Merge branch 'main' of https://github.com/26F-Studio/Techmino into main
This commit is contained in:
76
.github/workflows/build.yml
vendored
76
.github/workflows/build.yml
vendored
@@ -2,37 +2,87 @@ name: Techmino CI
|
|||||||
|
|
||||||
on:
|
on:
|
||||||
push:
|
push:
|
||||||
branches: [ ci ]
|
branches: [ main, ci ]
|
||||||
pull_request:
|
|
||||||
branches: [ ci ]
|
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
build-windows:
|
build-windows:
|
||||||
runs-on: windows-latest
|
runs-on: windows-latest
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v2
|
- uses: actions/checkout@v2
|
||||||
with:
|
|
||||||
lfs: true
|
|
||||||
- name: Download love
|
- name: Download love
|
||||||
run: |
|
run: |
|
||||||
curl -LO https://github.com/love2d/love/releases/download/11.3/love-11.3-win64.zip
|
curl -OL https://github.com/love2d/love/releases/download/11.3/love-11.3-win64.zip
|
||||||
7z x love-11.3-win64.zip
|
7z x love-11.3-win64.zip
|
||||||
- name: Download ColdClear
|
- name: Download ColdClear
|
||||||
run: |
|
run: |
|
||||||
curl -LO https://github.com/26F-Studio/Techmino/releases/download/coldclear/coldclear.zip
|
curl -OL https://github.com/26F-Studio/cold_clear_ai_love2d_wrapper/releases/download/20210520/win64.zip
|
||||||
7z x coldclear.zip -ocoldclear
|
7z x win64.zip -ocoldclear
|
||||||
move coldclear\win64\cold_clear.dll love-11.3-win64
|
move coldclear\cold_clear.dll love-11.3-win64
|
||||||
move coldclear\win64\CCloader.dll love-11.3-win64
|
move coldclear\CCloader.dll love-11.3-win64
|
||||||
- name: Pack Techmino
|
- name: Pack Techmino
|
||||||
shell: cmd
|
shell: cmd
|
||||||
run: |
|
run: |
|
||||||
7z a game.zip BGM document image modes parts SFX VOICE Zframework conf.lua font.ttf main.lua
|
7z a -tzip game.love document media parts Zframework conf.lua font.ttf main.lua
|
||||||
move game.zip game.love
|
|
||||||
copy /b love-11.3-win64\love.exe + game.love love-11.3-win64\Techmino.exe
|
copy /b love-11.3-win64\love.exe + game.love love-11.3-win64\Techmino.exe
|
||||||
del love-11.3-win64\love.exe
|
del love-11.3-win64\love.exe
|
||||||
del love-11.3-win64\lovec.exe
|
del love-11.3-win64\lovec.exe
|
||||||
- name: Artifact
|
- name: Artifact
|
||||||
uses: actions/upload-artifact@v1.0.0
|
uses: actions/upload-artifact@v1.0.0
|
||||||
with:
|
with:
|
||||||
name: Techmino_win64
|
name: Windows
|
||||||
path: love-11.3-win64
|
path: love-11.3-win64
|
||||||
|
|
||||||
|
build-linux:
|
||||||
|
runs-on: ubuntu-20.04
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v2
|
||||||
|
- name: Download AppImageKit
|
||||||
|
run: curl -OL https://github.com/AppImage/AppImageKit/releases/download/12/appimagetool-x86_64.AppImage
|
||||||
|
- name: Unpack and Repack
|
||||||
|
run: |
|
||||||
|
curl -OL https://github.com/26F-Studio/Techmino/releases/download/v0.15.1/Techmino.AppImage
|
||||||
|
chmod +x Techmino.AppImage appimagetool-x86_64.AppImage
|
||||||
|
./Techmino.AppImage --appimage-extract
|
||||||
|
rm Techmino.AppImage
|
||||||
|
cd squashfs-root/usr/share/Techmino
|
||||||
|
rm -rf document media parts Zframework conf.lua font.ttf main.lua
|
||||||
|
cd ../../../..
|
||||||
|
cp -r document media parts Zframework conf.lua font.ttf main.lua squashfs-root/usr/share/Techmino
|
||||||
|
./appimagetool-x86_64.AppImage squashfs-root Techmino.AppImage
|
||||||
|
- name: Artifact
|
||||||
|
uses: actions/upload-artifact@v2
|
||||||
|
with:
|
||||||
|
name: Linux
|
||||||
|
path: Techmino.AppImage
|
||||||
|
|
||||||
|
build-android:
|
||||||
|
runs-on: ubuntu-20.04
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v2
|
||||||
|
- name: Download Apktool
|
||||||
|
run: curl -OL https://bitbucket.org/iBotPeaches/apktool/downloads/apktool_2.5.0.jar
|
||||||
|
- name: Unpack and Repack
|
||||||
|
run: |
|
||||||
|
curl -OL https://github.com/26F-Studio/Techmino/releases/download/v0.15.1/Techmino.apk
|
||||||
|
java -jar apktool_2.5.0.jar d -s -o apk Techmino.apk
|
||||||
|
7z x -o. apk/assets/game.love libAndroid
|
||||||
|
rm apk/assets/game.love Techmino.apk
|
||||||
|
7z a -tzip apk/assets/game.love document libAndroid media parts Zframework conf.lua font.ttf main.lua
|
||||||
|
python3 .github/workflows/updateVersion.py
|
||||||
|
java -jar apktool_2.5.0.jar b -o Techmino.apk apk
|
||||||
|
- uses: 26F-Studio/sign-android-release@master
|
||||||
|
name: Sign app APK
|
||||||
|
id: sign_app
|
||||||
|
with:
|
||||||
|
releaseDirectory: .
|
||||||
|
signingKeyBase64: ${{ secrets.SIGNING_KEY }}
|
||||||
|
alias: ${{ secrets.ALIAS }}
|
||||||
|
keyStorePassword: ${{ secrets.KEY_STORE_PASSWORD }}
|
||||||
|
keyPassword: ${{ secrets.KEY_PASSWORD }}
|
||||||
|
env:
|
||||||
|
BUILD_TOOLS_VERSION: "30.0.2"
|
||||||
|
- name: Artifact
|
||||||
|
uses: actions/upload-artifact@v2
|
||||||
|
with:
|
||||||
|
name: Android
|
||||||
|
path: ${{steps.sign_app.outputs.signedReleaseFile}}
|
||||||
|
|||||||
12
.github/workflows/updateVersion.py
vendored
Normal file
12
.github/workflows/updateVersion.py
vendored
Normal file
@@ -0,0 +1,12 @@
|
|||||||
|
import re
|
||||||
|
with open("conf.lua", "r") as file:
|
||||||
|
data = file.read()
|
||||||
|
versionCode = re.search("build=(\\d+)", data).group(1)
|
||||||
|
versionName = re.search('short="([^"]+)', data).group(1)
|
||||||
|
with open("apk/apktool.yml", "r+") as file:
|
||||||
|
data = file.read()
|
||||||
|
data = re.sub("versionCode:.+", f"versionCode: '{versionCode}'", data)
|
||||||
|
data = re.sub("versionName:.+", f"versionName: {versionName}", data)
|
||||||
|
file.seek(0)
|
||||||
|
file.truncate()
|
||||||
|
file.write(data)
|
||||||
@@ -7,4 +7,11 @@ function aDraw.simpY(obj,x,y)draw(obj,x,y-obj:getHeight()*.5)end
|
|||||||
function aDraw.X(obj,x,y,a,k)draw(obj,x,y,a,k,nil,obj:getWidth()*.5,0)end
|
function aDraw.X(obj,x,y,a,k)draw(obj,x,y,a,k,nil,obj:getWidth()*.5,0)end
|
||||||
function aDraw.Y(obj,x,y,a,k)draw(obj,x,y,a,k,nil,0,obj:getHeight()*.5)end
|
function aDraw.Y(obj,x,y,a,k)draw(obj,x,y,a,k,nil,0,obj:getHeight()*.5)end
|
||||||
function aDraw.draw(obj,x,y,a,k)draw(obj,x,y,a,k,nil,obj:getWidth()*.5,obj:getHeight()*.5)end
|
function aDraw.draw(obj,x,y,a,k)draw(obj,x,y,a,k,nil,obj:getWidth()*.5,obj:getHeight()*.5)end
|
||||||
|
function aDraw.outDraw(obj,div,x,y,a,k)
|
||||||
|
local w,h=obj:getWidth()*.5,obj:getHeight()*.5
|
||||||
|
draw(obj,x-div,y-div,a,k,nil,w,h)
|
||||||
|
draw(obj,x-div,y+div,a,k,nil,w,h)
|
||||||
|
draw(obj,x+div,y-div,a,k,nil,w,h)
|
||||||
|
draw(obj,x+div,y+div,a,k,nil,w,h)
|
||||||
|
end
|
||||||
return aDraw
|
return aDraw
|
||||||
@@ -1,9 +1,6 @@
|
|||||||
|
local gc_clear=love.graphics.clear
|
||||||
local BGs={
|
local BGs={
|
||||||
none={
|
none={draw=function()gc_clear(.15,.15,.15)end}
|
||||||
draw=function()
|
|
||||||
love.graphics.clear(.15,.15,.15)
|
|
||||||
end
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
local BGlist={"none"}
|
local BGlist={"none"}
|
||||||
local BG={
|
local BG={
|
||||||
|
|||||||
@@ -50,7 +50,7 @@ function BGM.init(list)
|
|||||||
Sources[list[i]]:setLooping(true)
|
Sources[list[i]]:setLooping(true)
|
||||||
Sources[list[i]]:setVolume(0)
|
Sources[list[i]]:setVolume(0)
|
||||||
else
|
else
|
||||||
LOG.print("No BGM file: "..list[i],5,COLOR.O)
|
LOG.print("No BGM file: "..list[i],5,'warn')
|
||||||
end
|
end
|
||||||
if not skip and i~=count then
|
if not skip and i~=count then
|
||||||
coroutine.yield()
|
coroutine.yield()
|
||||||
|
|||||||
@@ -57,10 +57,10 @@ local COLOR={
|
|||||||
white= {1.0, 1.0, 1.0},
|
white= {1.0, 1.0, 1.0},
|
||||||
}
|
}
|
||||||
for k,v in next,{
|
for k,v in next,{
|
||||||
R="red",F="fire",O="orange",Y="yellow",L="lime",J="jade",G="green",A="aqua",C="cyan",N="navy",S="sea",B="blue",V="violet",P="purple",M="magenta",W="wine",
|
R='red',F='fire',O='orange',Y='yellow',L='lime',J='jade',G='green',A='aqua',C='cyan',N='navy',S='sea',B='blue',V='violet',P='purple',M='magenta',W='wine',
|
||||||
lR="lRed",lF="lFire",lO="lOrange",lY="lYellow",lL="lLime",lJ="lJade",lG="lGreen",lA="lAqua",lC="lCyan",lN="lNavy",lS="lSea",lB="lBlue",lV="lViolet",lP="lPurple",lM="lMagenta",lW="lWine",
|
lR='lRed',lF='lFire',lO='lOrange',lY='lYellow',lL='lLime',lJ='lJade',lG='lGreen',lA='lAqua',lC='lCyan',lN='lNavy',lS='lSea',lB='lBlue',lV='lViolet',lP='lPurple',lM='lMagenta',lW='lWine',
|
||||||
dR="dRed",dF="dFire",dO="dOrange",dY="dYellow",dL="dLime",dJ="dJade",dG="dGreen",dA="dAqua",dC="dCyan",dN="dNavy",dS="dSea",dB="dBlue",dV="dViolet",dP="dPurple",dM="dMagenta",dW="dWine",
|
dR='dRed',dF='dFire',dO='dOrange',dY='dYellow',dL='dLime',dJ='dJade',dG='dGreen',dA='dAqua',dC='dCyan',dN='dNavy',dS='dSea',dB='dBlue',dV='dViolet',dP='dPurple',dM='dMagenta',dW='dWine',
|
||||||
D="black",dH="dGray",H="gray",lH="lGray",Z="white",
|
D='black',dH='dGray',H='gray',lH='lGray',Z='white',
|
||||||
--Remain letter: EIKQTUX
|
--Remain letter: EIKQTUX
|
||||||
}do
|
}do
|
||||||
COLOR[k]=COLOR[v]
|
COLOR[k]=COLOR[v]
|
||||||
@@ -72,19 +72,19 @@ end})
|
|||||||
|
|
||||||
do--Random generators
|
do--Random generators
|
||||||
local rnd=math.random
|
local rnd=math.random
|
||||||
local list_norm={"red","fire","orange","yellow","lime","jade","green","aqua","cyan","navy","sea","blue","violet","purple","magenta","wine"}
|
local list_norm={'red','fire','orange','yellow','lime','jade','green','aqua','cyan','navy','sea','blue','violet','purple','magenta','wine'}
|
||||||
local len_list_norm=#list_norm
|
local len_list_norm=#list_norm
|
||||||
function COLOR.random_norm()
|
function COLOR.random_norm()
|
||||||
return COLOR[list_norm[rnd(len_list_norm)]]
|
return COLOR[list_norm[rnd(len_list_norm)]]
|
||||||
end
|
end
|
||||||
|
|
||||||
local list_bright={"lRed","lFire","lOrange","lYellow","lLime","lJade","lGreen","lAqua","lCyan","lNavy","lSea","lBlue","lViolet","lPurple","lMagenta","lWine"}
|
local list_bright={'lRed','lFire','lOrange','lYellow','lLime','lJade','lGreen','lAqua','lCyan','lNavy','lSea','lBlue','lViolet','lPurple','lMagenta','lWine'}
|
||||||
local len_list_bright=#list_bright
|
local len_list_bright=#list_bright
|
||||||
function COLOR.random_bright()
|
function COLOR.random_bright()
|
||||||
return COLOR[list_bright[rnd(len_list_bright)]]
|
return COLOR[list_bright[rnd(len_list_bright)]]
|
||||||
end
|
end
|
||||||
|
|
||||||
local list_dark={"dRed","dFire","dOrange","dYellow","dLime","dJade","dGreen","dAqua","dCyan","dNavy","dSea","dBlue","dViolet","dPurple","dMagenta","dWine"}
|
local list_dark={'dRed','dFire','dOrange','dYellow','dLime','dJade','dGreen','dAqua','dCyan','dNavy','dSea','dBlue','dViolet','dPurple','dMagenta','dWine'}
|
||||||
local len_list_dark=#list_dark
|
local len_list_dark=#list_dark
|
||||||
function COLOR.random_dark()
|
function COLOR.random_dark()
|
||||||
return COLOR[list_dark[rnd(len_list_dark)]]
|
return COLOR[list_dark[rnd(len_list_dark)]]
|
||||||
|
|||||||
@@ -4,6 +4,7 @@ local cmds={
|
|||||||
move="translate",
|
move="translate",
|
||||||
scale="scale",
|
scale="scale",
|
||||||
rotate="rotate",
|
rotate="rotate",
|
||||||
|
shear="shear",
|
||||||
clear="clear",
|
clear="clear",
|
||||||
|
|
||||||
setCL="setColor",
|
setCL="setColor",
|
||||||
@@ -12,10 +13,11 @@ local cmds={
|
|||||||
setLS="setLineStyle",
|
setLS="setLineStyle",
|
||||||
setLJ="setLineJoin",
|
setLJ="setLineJoin",
|
||||||
|
|
||||||
setFT=setFont,
|
|
||||||
print="print",
|
print="print",
|
||||||
mText=function(...)ADRAW.str(...)end,
|
setFT=setFont,
|
||||||
mDraw=function(...)ADRAW.draw(...)end,
|
mText=ADRAW.str,
|
||||||
|
mDraw=ADRAW.draw,
|
||||||
|
mOutDraw=ADRAW.outDraw,
|
||||||
|
|
||||||
draw="draw",
|
draw="draw",
|
||||||
line="line",
|
line="line",
|
||||||
@@ -23,6 +25,8 @@ local cmds={
|
|||||||
dRect=function(...)gc.rectangle('line',...)end,
|
dRect=function(...)gc.rectangle('line',...)end,
|
||||||
fCirc=function(...)gc.circle('fill',...)end,
|
fCirc=function(...)gc.circle('fill',...)end,
|
||||||
dCirc=function(...)gc.circle('line',...)end,
|
dCirc=function(...)gc.circle('line',...)end,
|
||||||
|
fElps=function(...)gc.ellipse('fill',...)end,
|
||||||
|
dElps=function(...)gc.ellipse('line',...)end,
|
||||||
fPoly=function(...)gc.polygon('fill',...)end,
|
fPoly=function(...)gc.polygon('fill',...)end,
|
||||||
dPoly=function(...)gc.polygon('line',...)end,
|
dPoly=function(...)gc.polygon('line',...)end,
|
||||||
|
|
||||||
|
|||||||
@@ -21,7 +21,7 @@ function FILE.load(name)
|
|||||||
return s
|
return s
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
LOG.print(name.." "..text.loadError,COLOR.R)
|
LOG.print(name.." "..text.loadError,'error')
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
function FILE.save(data,name,mode)
|
function FILE.save(data,name,mode)
|
||||||
@@ -50,11 +50,39 @@ function FILE.save(data,name,mode)
|
|||||||
F:flush()F:close()
|
F:flush()F:close()
|
||||||
if success then
|
if success then
|
||||||
if not mode:find'q'then
|
if not mode:find'q'then
|
||||||
LOG.print(text.saveDone,COLOR.G)
|
LOG.print(text.saveDone,'message')
|
||||||
end
|
end
|
||||||
else
|
else
|
||||||
LOG.print(text.saveError..(mes or"unknown error"),'error')
|
LOG.print(text.saveError..(mes or"unknown error"),'error')
|
||||||
LOG.print(debug.traceback(),'error')
|
LOG.print(debug.traceback(),'error')
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
function FILE.clear(path)
|
||||||
|
if fs.getRealDirectory(path)~=SAVEDIR or fs.getInfo(path).type~='directory'then return end
|
||||||
|
for _,name in next,fs.getDirectoryItems(path)do
|
||||||
|
name=path.."/"..name
|
||||||
|
if fs.getRealDirectory(name)==SAVEDIR then
|
||||||
|
local t=fs.getInfo(name).type
|
||||||
|
if t=='file'then
|
||||||
|
fs.remove(name)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
function FILE.clear_s(path)
|
||||||
|
if path~=""and(fs.getRealDirectory(path)~=SAVEDIR or fs.getInfo(path).type~='directory')then return end
|
||||||
|
for _,name in next,fs.getDirectoryItems(path)do
|
||||||
|
name=path.."/"..name
|
||||||
|
if fs.getRealDirectory(name)==SAVEDIR then
|
||||||
|
local t=fs.getInfo(name).type
|
||||||
|
if t=='file'then
|
||||||
|
fs.remove(name)
|
||||||
|
elseif t=='directory'then
|
||||||
|
FILE.clear_s(name)
|
||||||
|
fs.remove(name)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
fs.remove(path)
|
||||||
|
end
|
||||||
return FILE
|
return FILE
|
||||||
@@ -3,21 +3,21 @@ EDITING=""
|
|||||||
LOADED=false
|
LOADED=false
|
||||||
ERRDATA={}
|
ERRDATA={}
|
||||||
|
|
||||||
SCR= require"Zframework.screen"
|
|
||||||
COLOR= require"Zframework.color"
|
|
||||||
SCN= require"Zframework.scene"
|
|
||||||
LOG= require"Zframework.log"
|
|
||||||
WS= require"Zframework.websocket"
|
|
||||||
|
|
||||||
LOADLIB=require"Zframework.loadLib"
|
|
||||||
WHEELMOV=require"Zframework.wheelScroll"
|
|
||||||
|
|
||||||
require"Zframework.setFont"
|
require"Zframework.setFont"
|
||||||
ADRAW=require"Zframework.aDraw"
|
ADRAW=require"Zframework.aDraw"
|
||||||
mStr=ADRAW.str
|
mStr=ADRAW.str
|
||||||
mText=ADRAW.simpX
|
mText=ADRAW.simpX
|
||||||
mDraw=ADRAW.draw
|
mDraw=ADRAW.draw
|
||||||
|
|
||||||
|
SCR= require"Zframework.screen"
|
||||||
|
COLOR= require"Zframework.color"
|
||||||
|
LOG= require"Zframework.log"
|
||||||
|
SCN= require"Zframework.scene"
|
||||||
|
WS= require"Zframework.websocket"
|
||||||
|
|
||||||
|
LOADLIB=require"Zframework.loadLib"
|
||||||
|
WHEELMOV=require"Zframework.wheelScroll"
|
||||||
|
|
||||||
JSON=require"Zframework.json"
|
JSON=require"Zframework.json"
|
||||||
TABLE=require"Zframework.tableExtend"
|
TABLE=require"Zframework.tableExtend"
|
||||||
STRING=require"Zframework.stringExtend"
|
STRING=require"Zframework.stringExtend"
|
||||||
@@ -45,11 +45,12 @@ THEME= require"Zframework.theme"
|
|||||||
local ms,kb=love.mouse,love.keyboard
|
local ms,kb=love.mouse,love.keyboard
|
||||||
|
|
||||||
local gc=love.graphics
|
local gc=love.graphics
|
||||||
local gc_push,gc_pop=gc.push,gc.pop
|
local gc_push,gc_pop,gc_clear=gc.push,gc.pop,gc.clear
|
||||||
local gc_discard,gc_present=gc.discard,gc.present
|
local gc_replaceTransform,gc_present=gc.replaceTransform,gc.present
|
||||||
local gc_setColor,gc_draw,gc_rectangle=gc.setColor,gc.draw,gc.rectangle
|
local gc_setColor,gc_setLineWidth=gc.setColor,gc.setLineWidth
|
||||||
local gc_print=gc.print
|
local gc_draw,gc_line,gc_print=gc.draw,gc.line,gc.print
|
||||||
local setFont=setFont
|
|
||||||
|
local setFont,mStr=setFont,mStr
|
||||||
|
|
||||||
local int,rnd,abs=math.floor,math.random,math.abs
|
local int,rnd,abs=math.floor,math.random,math.abs
|
||||||
local min,sin=math.min,math.sin
|
local min,sin=math.min,math.sin
|
||||||
@@ -64,18 +65,27 @@ joysticks={}
|
|||||||
|
|
||||||
local devMode
|
local devMode
|
||||||
|
|
||||||
|
local batteryImg=DOGC{31,20,
|
||||||
|
{'fRect',1,0,26,2},
|
||||||
|
{'fRect',1,18,26,2},
|
||||||
|
{'fRect',0,1,2,18},
|
||||||
|
{'fRect',26,1,2,18},
|
||||||
|
{'fRect',29,3,2,14},
|
||||||
|
}
|
||||||
local infoCanvas=gc.newCanvas(108,27)
|
local infoCanvas=gc.newCanvas(108,27)
|
||||||
local function updatePowerInfo()
|
local function updatePowerInfo()
|
||||||
local state,pow=love.system.getPowerInfo()
|
local state,pow=love.system.getPowerInfo()
|
||||||
gc.setCanvas(infoCanvas)gc_push('transform')gc.origin()
|
gc.setCanvas(infoCanvas)
|
||||||
gc.clear(0,0,0,.25)
|
gc_push('transform')
|
||||||
|
gc.origin()
|
||||||
|
gc_clear(0,0,0,.25)
|
||||||
if state~='unknown'then
|
if state~='unknown'then
|
||||||
gc.setLineWidth(4)
|
gc_setLineWidth(4)
|
||||||
local charging=state=='charging'
|
local charging=state=='charging'
|
||||||
if state=='nobattery'then
|
if state=='nobattery'then
|
||||||
gc_setColor(1,1,1)
|
gc_setColor(1,1,1)
|
||||||
gc.setLineWidth(2)
|
gc_setLineWidth(2)
|
||||||
gc.line(74,SCR.safeX+5,100,22)
|
gc_line(74,SCR.safeX+5,100,22)
|
||||||
elseif pow then
|
elseif pow then
|
||||||
if charging then gc_setColor(0,1,0)
|
if charging then gc_setColor(0,1,0)
|
||||||
elseif pow>50 then gc_setColor(1,1,1)
|
elseif pow>50 then gc_setColor(1,1,1)
|
||||||
@@ -83,7 +93,7 @@ local function updatePowerInfo()
|
|||||||
elseif pow==26 then gc_setColor(.5,0,1)
|
elseif pow==26 then gc_setColor(.5,0,1)
|
||||||
else gc_setColor(1,0,0)
|
else gc_setColor(1,0,0)
|
||||||
end
|
end
|
||||||
gc_rectangle('fill',76,6,pow*.22,14)
|
gc.rectangle('fill',76,6,pow*.22,14)
|
||||||
if pow<100 then
|
if pow<100 then
|
||||||
setFont(15)
|
setFont(15)
|
||||||
gc_setColor(0,0,0)
|
gc_setColor(0,0,0)
|
||||||
@@ -95,11 +105,12 @@ local function updatePowerInfo()
|
|||||||
gc_print(pow,78,2)
|
gc_print(pow,78,2)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
gc_draw(IMG.batteryImage,73,3)
|
gc_draw(batteryImg,73,3)
|
||||||
end
|
end
|
||||||
setFont(25)
|
setFont(25)
|
||||||
gc_print(os.date("%H:%M"),3,-5)
|
gc_print(os.date("%H:%M"),3,-5)
|
||||||
gc_pop()gc.setCanvas()
|
gc_pop()
|
||||||
|
gc.setCanvas()
|
||||||
end
|
end
|
||||||
-------------------------------------------------------------
|
-------------------------------------------------------------
|
||||||
local lastX,lastY=0,0--Last click pos
|
local lastX,lastY=0,0--Last click pos
|
||||||
@@ -129,7 +140,7 @@ function love.mousemoved(x,y,dx,dy,touch)
|
|||||||
dx,dy=dx/SCR.k,dy/SCR.k
|
dx,dy=dx/SCR.k,dy/SCR.k
|
||||||
if SCN.mouseMove then SCN.mouseMove(mx,my,dx,dy)end
|
if SCN.mouseMove then SCN.mouseMove(mx,my,dx,dy)end
|
||||||
if ms.isDown(1)then
|
if ms.isDown(1)then
|
||||||
WIDGET.drag(mx,my,dx,dy)
|
WIDGET.drag(mx,my,dx/SCR.k,dy/SCR.k)
|
||||||
else
|
else
|
||||||
WIDGET.cursorMove(mx,my)
|
WIDGET.cursorMove(mx,my)
|
||||||
end
|
end
|
||||||
@@ -145,7 +156,12 @@ function love.mousereleased(x,y,k,touch)
|
|||||||
end
|
end
|
||||||
function love.wheelmoved(x,y)
|
function love.wheelmoved(x,y)
|
||||||
if SCN.swapping then return end
|
if SCN.swapping then return end
|
||||||
if SCN.wheelMoved then SCN.wheelMoved(x,y)end
|
if SCN.wheelMoved then
|
||||||
|
SCN.wheelMoved(x,y)
|
||||||
|
else
|
||||||
|
WIDGET.unFocus()
|
||||||
|
WIDGET.drag(0,0,0,100*y)
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
function love.touchpressed(id,x,y)
|
function love.touchpressed(id,x,y)
|
||||||
@@ -153,6 +169,7 @@ function love.touchpressed(id,x,y)
|
|||||||
if SCN.swapping then return end
|
if SCN.swapping then return end
|
||||||
if not touching then
|
if not touching then
|
||||||
touching=id
|
touching=id
|
||||||
|
WIDGET.unFocus(true)
|
||||||
love.touchmoved(id,x,y,0,0)
|
love.touchmoved(id,x,y,0,0)
|
||||||
end
|
end
|
||||||
x,y=xOy:inverseTransformPoint(x,y)
|
x,y=xOy:inverseTransformPoint(x,y)
|
||||||
@@ -164,15 +181,10 @@ function love.touchmoved(_,x,y,dx,dy)
|
|||||||
if SCN.swapping then return end
|
if SCN.swapping then return end
|
||||||
x,y=xOy:inverseTransformPoint(x,y)
|
x,y=xOy:inverseTransformPoint(x,y)
|
||||||
if SCN.touchMove then SCN.touchMove(x,y,dx/SCR.k,dy/SCR.k)end
|
if SCN.touchMove then SCN.touchMove(x,y,dx/SCR.k,dy/SCR.k)end
|
||||||
if WIDGET.sel then
|
WIDGET.drag(x,y,dx/SCR.k,dy/SCR.k)
|
||||||
if touching then
|
if touching then
|
||||||
WIDGET.drag(x,y,dx,dy)
|
|
||||||
end
|
|
||||||
else
|
|
||||||
WIDGET.cursorMove(x,y)
|
WIDGET.cursorMove(x,y)
|
||||||
if not WIDGET.sel then
|
if not WIDGET.sel then touching=false end
|
||||||
touching=false
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
function love.touchreleased(id,x,y)
|
function love.touchreleased(id,x,y)
|
||||||
@@ -181,10 +193,9 @@ function love.touchreleased(id,x,y)
|
|||||||
if id==touching then
|
if id==touching then
|
||||||
WIDGET.press(x,y,1)
|
WIDGET.press(x,y,1)
|
||||||
WIDGET.release(x,y)
|
WIDGET.release(x,y)
|
||||||
|
WIDGET.cursorMove(x,y)
|
||||||
|
WIDGET.unFocus()
|
||||||
touching=false
|
touching=false
|
||||||
if WIDGET.sel and not WIDGET.sel.keepFocus then
|
|
||||||
WIDGET.sel=false
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
if SCN.touchUp then SCN.touchUp(x,y)end
|
if SCN.touchUp then SCN.touchUp(x,y)end
|
||||||
if(x-lastX)^2+(y-lastY)^2<62 then
|
if(x-lastX)^2+(y-lastY)^2<62 then
|
||||||
@@ -197,7 +208,7 @@ local function noDevkeyPressed(key)
|
|||||||
if key=="f1"then
|
if key=="f1"then
|
||||||
PROFILE.switch()
|
PROFILE.switch()
|
||||||
elseif key=="f2"then
|
elseif key=="f2"then
|
||||||
LOG.print(("System:%s[%s]\nluaVer:%s\njitVer:%s\njitVerNum:%s"):format(SYSTEM,jit.arch,_VERSION,jit.version,jit.version_num))
|
LOG.print(("System:%s[%s]\nluaVer:%s\njitVer:%s\njitVerNum:%s"):format(SYSTEM,jit.arch,_VERSION,jit.version,jit.version_num),'message')
|
||||||
elseif key=="f3"then
|
elseif key=="f3"then
|
||||||
for _=1,8 do
|
for _=1,8 do
|
||||||
local P=PLY_ALIVE[rnd(#PLY_ALIVE)]
|
local P=PLY_ALIVE[rnd(#PLY_ALIVE)]
|
||||||
@@ -206,19 +217,27 @@ local function noDevkeyPressed(key)
|
|||||||
P:lose()
|
P:lose()
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
elseif key=="f4"then if not kb.isDown("lalt","ralt")then LOG.copy()end
|
elseif key=="f4"and not kb.isDown("lalt","ralt")then
|
||||||
elseif key=="f5"then if WIDGET.sel then print(WIDGET.sel)end
|
LOG.copy()
|
||||||
elseif key=="f6"then for k,v in next,_G do print(k,v)end
|
elseif key=="f5"then
|
||||||
elseif key=="f7"then if love._openConsole then love._openConsole()end
|
print(WIDGET.isFocus()or"no widget selected")
|
||||||
elseif key=="f8"then devMode=nil LOG.print("DEBUG OFF",COLOR.Y)
|
elseif key=="f6"then
|
||||||
elseif key=="f9"then devMode=1 LOG.print("DEBUG 1",COLOR.Y)
|
for k,v in next,_G do print(k,v)end
|
||||||
elseif key=="f10"then devMode=2 LOG.print("DEBUG 2",COLOR.Y)
|
elseif key=="f7"and love._openConsole then
|
||||||
elseif key=="f11"then devMode=3 LOG.print("DEBUG 3",COLOR.Y)
|
love._openConsole()
|
||||||
elseif key=="f12"then devMode=4 LOG.print("DEBUG 4",COLOR.Y)
|
elseif key=="f8"then
|
||||||
elseif key=="\\"then _G["\100\114\97\119\70\87\77"]=NULL
|
devMode=nil LOG.print("DEBUG OFF",10)
|
||||||
|
elseif key=="f9"then
|
||||||
|
devMode=1 LOG.print("DEBUG 1")
|
||||||
|
elseif key=="f10"then
|
||||||
|
devMode=2 LOG.print("DEBUG 2")
|
||||||
|
elseif key=="f11"then
|
||||||
|
devMode=3 LOG.print("DEBUG 3")
|
||||||
|
elseif key=="f12"then
|
||||||
|
devMode=4 LOG.print("DEBUG 4")
|
||||||
elseif devMode==2 then
|
elseif devMode==2 then
|
||||||
if WIDGET.sel then
|
|
||||||
local W=WIDGET.sel
|
local W=WIDGET.sel
|
||||||
|
if W then
|
||||||
if key=="left"then W.x=W.x-10
|
if key=="left"then W.x=W.x-10
|
||||||
elseif key=="right"then W.x=W.x+10
|
elseif key=="right"then W.x=W.x+10
|
||||||
elseif key=="up"then W.y=W.y-10
|
elseif key=="up"then W.y=W.y-10
|
||||||
@@ -244,9 +263,13 @@ function love.keypressed(key)
|
|||||||
return
|
return
|
||||||
elseif key=="f8"then
|
elseif key=="f8"then
|
||||||
devMode=1
|
devMode=1
|
||||||
LOG.print("DEBUG ON",COLOR.Y)
|
LOG.print("DEBUG ON",10)
|
||||||
elseif key=="f11"then
|
elseif key=="f11"then
|
||||||
|
if kb.isDown("lctrl","rctrl")then
|
||||||
|
_G["\100\114\97\119\70\87\77"]=NULL
|
||||||
|
else
|
||||||
switchFullscreen()
|
switchFullscreen()
|
||||||
|
end
|
||||||
elseif not SCN.swapping then
|
elseif not SCN.swapping then
|
||||||
if SCN.keyDown then
|
if SCN.keyDown then
|
||||||
SCN.keyDown(key)
|
SCN.keyDown(key)
|
||||||
@@ -270,15 +293,14 @@ function love.textinput(texts)
|
|||||||
end
|
end
|
||||||
|
|
||||||
function love.joystickadded(JS)
|
function love.joystickadded(JS)
|
||||||
joysticks[#joysticks+1]=JS
|
ins(joysticks,JS)
|
||||||
|
LOG.print("Joystick added",'message')
|
||||||
end
|
end
|
||||||
function love.joystickremoved(JS)
|
function love.joystickremoved(JS)
|
||||||
for i=1,#joysticks do
|
local i=TABLE.find(joysticks,JS)
|
||||||
if joysticks[i]==JS then
|
if i then
|
||||||
rem(joysticks,i)
|
rem(joysticks,i)
|
||||||
LOG.print("Joystick removed",COLOR.Y)
|
LOG.print("Joystick removed",'message')
|
||||||
return
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
local keyMirror={
|
local keyMirror={
|
||||||
@@ -344,6 +366,7 @@ function love.resize(w,h)
|
|||||||
SCR.resize(w,h)
|
SCR.resize(w,h)
|
||||||
if BG.resize then BG.resize(w,h)end
|
if BG.resize then BG.resize(w,h)end
|
||||||
if SCN.resize then SCN.resize(w,h)end
|
if SCN.resize then SCN.resize(w,h)end
|
||||||
|
WIDGET.resize(w,h)
|
||||||
|
|
||||||
SHADER.warning:send("w",w*SCR.dpi)
|
SHADER.warning:send("w",w*SCR.dpi)
|
||||||
SHADER.warning:send("h",h*SCR.dpi)
|
SHADER.warning:send("h",h*SCR.dpi)
|
||||||
@@ -387,7 +410,7 @@ function love.errorhandler(msg)
|
|||||||
if LOADED and #ERRDATA<3 then
|
if LOADED and #ERRDATA<3 then
|
||||||
BG.set('none')
|
BG.set('none')
|
||||||
local scn=SCN and SCN.cur or"NULL"
|
local scn=SCN and SCN.cur or"NULL"
|
||||||
ERRDATA[#ERRDATA+1]={mes=err,scene=scn}
|
ins(ERRDATA,{mes=err,scene=scn})
|
||||||
|
|
||||||
--Write messages to log file
|
--Write messages to log file
|
||||||
love.filesystem.append("conf/error.log",
|
love.filesystem.append("conf/error.log",
|
||||||
@@ -428,9 +451,9 @@ function love.errorhandler(msg)
|
|||||||
SCR.resize(a,b)
|
SCR.resize(a,b)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
gc.clear(.3,.5,.9)
|
gc_clear(.3,.5,.9)
|
||||||
gc_push('transform')
|
gc_push('transform')
|
||||||
gc.replaceTransform(xOy)
|
gc_replaceTransform(SCR.xOy)
|
||||||
setFont(100)gc_print(":(",100,0,0,1.2)
|
setFont(100)gc_print(":(",100,0,0,1.2)
|
||||||
setFont(40)gc.printf(errorMsg,100,160,SCR.w0-100)
|
setFont(40)gc.printf(errorMsg,100,160,SCR.w0-100)
|
||||||
setFont(20)
|
setFont(20)
|
||||||
@@ -446,22 +469,53 @@ function love.errorhandler(msg)
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
local WS=WS
|
|
||||||
local WSnames={'app','user','play','stream','chat'}
|
love.draw,love.update=nil--remove default draw/update
|
||||||
local WScolor={
|
|
||||||
{1,.5,.5,.7},
|
|
||||||
{1,.8,.3,.7},
|
|
||||||
{1,1,.4,.7},
|
|
||||||
{.4,1,.7,.7},
|
|
||||||
{.5,.8,1,.7},
|
|
||||||
}
|
|
||||||
local devColor={
|
local devColor={
|
||||||
COLOR.Z,
|
COLOR.Z,
|
||||||
COLOR.lM,
|
COLOR.lM,
|
||||||
COLOR.lG,
|
COLOR.lG,
|
||||||
COLOR.lB,
|
COLOR.lB,
|
||||||
}
|
}
|
||||||
love.draw,love.update=nil--remove default draw/update
|
local WS=WS
|
||||||
|
local WSnames={'app','user','play','stream','chat','manage'}
|
||||||
|
local wsBottomImage do
|
||||||
|
local L={78,18,
|
||||||
|
{'clear',1,1,1,0},
|
||||||
|
{'setCL',1,1,1,.3},
|
||||||
|
{'fRect',60,0,18,18},
|
||||||
|
}
|
||||||
|
for i=0,59 do
|
||||||
|
ins(L,{'setCL',1,1,1,i*.005})
|
||||||
|
ins(L,{'fRect',i,0,1,18})
|
||||||
|
end
|
||||||
|
wsBottomImage=DOGC(L)
|
||||||
|
end
|
||||||
|
local ws_deadImg=DOGC{20,20,
|
||||||
|
{'setFT',20},
|
||||||
|
{'setCL',1,.3,.3},
|
||||||
|
{'print',"X",3,-4},
|
||||||
|
}
|
||||||
|
local ws_connectingImg=DOGC{20,20,
|
||||||
|
{'setLW',3},
|
||||||
|
{'dArc',11.5,10,6.26,1,5.28},
|
||||||
|
}
|
||||||
|
local ws_runningImg=DOGC{20,20,
|
||||||
|
{'setFT',20},
|
||||||
|
{'setCL',.5,1,0},
|
||||||
|
{'print',"R",3,-4},
|
||||||
|
}
|
||||||
|
local cursorImg=DOGC{16,16,
|
||||||
|
{"fCirc",8,8,4},
|
||||||
|
{"setCL",1,1,1,.7},
|
||||||
|
{"fCirc",8,8,6},
|
||||||
|
}
|
||||||
|
local cursor_holdImg=DOGC{16,16,
|
||||||
|
{"setLW",2},
|
||||||
|
{"dCirc",8,8,7},
|
||||||
|
{"fCirc",8,8,3},
|
||||||
|
}
|
||||||
function love.run()
|
function love.run()
|
||||||
local love=love
|
local love=love
|
||||||
|
|
||||||
@@ -470,7 +524,6 @@ function love.run()
|
|||||||
|
|
||||||
local TEXTURE,TIME=TEXTURE,TIME
|
local TEXTURE,TIME=TEXTURE,TIME
|
||||||
local SETTING,VERSION=SETTING,VERSION
|
local SETTING,VERSION=SETTING,VERSION
|
||||||
local destroyPlayers=destroyPlayers
|
|
||||||
|
|
||||||
local STEP,WAIT=love.timer.step,love.timer.sleep
|
local STEP,WAIT=love.timer.step,love.timer.sleep
|
||||||
local FPS,MINI=love.timer.getFPS,love.window.isMinimized
|
local FPS,MINI=love.timer.getFPS,love.window.isMinimized
|
||||||
@@ -512,12 +565,12 @@ function love.run()
|
|||||||
TASK.update()
|
TASK.update()
|
||||||
WS.update(dt)
|
WS.update(dt)
|
||||||
VOC.update()
|
VOC.update()
|
||||||
BG.update(dt)--BG animation
|
BG.update(dt)
|
||||||
SYSFX.update(dt)
|
SYSFX.update(dt)
|
||||||
WIDGET.update()--Widgets animation
|
WIDGET.update()
|
||||||
if SCN.update then SCN.update(dt)end--Scene updater
|
if SCN.update then SCN.update(dt)end
|
||||||
if SCN.swapping then SCN.swapUpdate()end--Scene swapping animation
|
if SCN.swapping then SCN.swapUpdate()end
|
||||||
TEXT.update()--Update global texts animation
|
TEXT.update()
|
||||||
LOG.update()
|
LOG.update()
|
||||||
|
|
||||||
--DRAW
|
--DRAW
|
||||||
@@ -526,22 +579,14 @@ function love.run()
|
|||||||
if FCT>=100 then
|
if FCT>=100 then
|
||||||
FCT=FCT-100
|
FCT=FCT-100
|
||||||
|
|
||||||
--Draw background
|
gc_replaceTransform(SCR.origin)
|
||||||
|
gc_setColor(1,1,1)
|
||||||
BG.draw()
|
BG.draw()
|
||||||
|
gc_replaceTransform(SCR.xOy)
|
||||||
gc_push('transform')
|
|
||||||
gc.replaceTransform(xOy)
|
|
||||||
|
|
||||||
--Draw scene contents
|
|
||||||
if SCN.draw then SCN.draw()end
|
if SCN.draw then SCN.draw()end
|
||||||
|
|
||||||
--Draw widgets
|
|
||||||
WIDGET.draw()
|
WIDGET.draw()
|
||||||
|
SYSFX.draw()
|
||||||
--Draw Version string
|
TEXT.draw()
|
||||||
gc_setColor(.8,.8,.8,.4)
|
|
||||||
setFont(20)
|
|
||||||
mStr(VERSION.string,640,693)
|
|
||||||
|
|
||||||
--Draw cursor
|
--Draw cursor
|
||||||
if mouseShow then
|
if mouseShow then
|
||||||
@@ -551,83 +596,75 @@ function love.run()
|
|||||||
_=SCS[R][0]
|
_=SCS[R][0]
|
||||||
gc_draw(TEXTURE.miniBlock[R],mx,my,time%3.14159265359*4,16,16,_[2]+.5,#BLOCKS[R][0]-_[1]-.5)
|
gc_draw(TEXTURE.miniBlock[R],mx,my,time%3.14159265359*4,16,16,_[2]+.5,#BLOCKS[R][0]-_[1]-.5)
|
||||||
gc_setColor(1,1,1)
|
gc_setColor(1,1,1)
|
||||||
gc_draw(TEXTURE[ms.isDown(1)and'cursor_hold'or'cursor'],mx,my,nil,nil,nil,8,8)
|
gc_draw(ms.isDown(1)and cursor_holdImg or cursorImg,mx,my,nil,nil,nil,8,8)
|
||||||
end
|
end
|
||||||
SYSFX.draw()
|
gc_replaceTransform(SCR.xOy_ul)
|
||||||
TEXT.draw()
|
LOG.draw()
|
||||||
gc_pop()
|
gc_replaceTransform(SCR.origin)
|
||||||
|
|
||||||
--Draw power info.
|
--Draw power info.
|
||||||
gc_setColor(1,1,1)
|
|
||||||
if SETTING.powerInfo then
|
if SETTING.powerInfo then
|
||||||
|
gc_setColor(1,1,1)
|
||||||
gc_draw(infoCanvas,SCR.safeX,0,0,SCR.k)
|
gc_draw(infoCanvas,SCR.safeX,0,0,SCR.k)
|
||||||
end
|
end
|
||||||
|
|
||||||
--Draw scene swapping animation
|
--Draw scene swapping animation
|
||||||
if SCN.swapping then
|
if SCN.swapping then
|
||||||
|
gc_setColor(1,1,1)
|
||||||
_=SCN.stat
|
_=SCN.stat
|
||||||
_.draw(_.time)
|
_.draw(_.time)
|
||||||
end
|
end
|
||||||
|
gc_replaceTransform(SCR.xOy_dm)
|
||||||
|
--Draw Version string
|
||||||
|
gc_setColor(.8,.8,.8,.4)
|
||||||
|
setFont(20)
|
||||||
|
mStr(VERSION.string,0,-30)
|
||||||
|
gc_replaceTransform(SCR.xOy_dl)
|
||||||
--Draw FPS
|
--Draw FPS
|
||||||
setFont(15)
|
setFont(15)
|
||||||
_=SCR.h
|
|
||||||
gc_setColor(1,1,1)
|
gc_setColor(1,1,1)
|
||||||
gc_print(FPS(),SCR.safeX+5,_-20)
|
gc_print(FPS(),SCR.safeX+5,-20)
|
||||||
|
|
||||||
--Debug info.
|
--Debug info.
|
||||||
if devMode then
|
if devMode then
|
||||||
--Left-down infos
|
--Left-down infos
|
||||||
gc_setColor(devColor[devMode])
|
gc_setColor(devColor[devMode])
|
||||||
gc_print("MEM "..gcinfo(),SCR.safeX+5,_-40)
|
gc_print("MEM "..gcinfo(),SCR.safeX+5,-40)
|
||||||
gc_print("Lines "..FREEROW.getCount(),SCR.safeX+5,_-60)
|
gc_print("Lines "..FREEROW.getCount(),SCR.safeX+5,-60)
|
||||||
gc_print("Cursor "..int(mx+.5).." "..int(my+.5),SCR.safeX+5,_-80)
|
gc_print("Cursor "..int(mx+.5).." "..int(my+.5),SCR.safeX+5,-80)
|
||||||
gc_print("Voices "..VOC.getQueueCount(),SCR.safeX+5,_-100)
|
gc_print("Voices "..VOC.getQueueCount(),SCR.safeX+5,-100)
|
||||||
gc_print("Tasks "..TASK.getCount(),SCR.safeX+5,_-120)
|
gc_print("Tasks "..TASK.getCount(),SCR.safeX+5,-120)
|
||||||
|
|
||||||
--Update & draw frame time
|
--Update & draw frame time
|
||||||
ins(frameTimeList,1,dt)rem(frameTimeList,126)
|
ins(frameTimeList,1,dt)rem(frameTimeList,126)
|
||||||
gc_setColor(1,1,1,.3)
|
gc_setColor(1,1,1,.3)
|
||||||
for i=1,#frameTimeList do
|
for i=1,#frameTimeList do
|
||||||
gc_rectangle('fill',150+2*i,_-20,2,-frameTimeList[i]*4000)
|
gc.rectangle('fill',150+2*i,-20,2,-frameTimeList[i]*4000)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
gc_replaceTransform(SCR.xOy_dr)
|
||||||
--Websocket status
|
--Websocket status
|
||||||
gc_push('transform')
|
for i=1,6 do
|
||||||
gc.translate(SCR.w,SCR.h-100)
|
|
||||||
gc.scale(SCR.k)
|
|
||||||
for i=1,5 do
|
|
||||||
local status=WS.status(WSnames[i])
|
local status=WS.status(WSnames[i])
|
||||||
gc_setColor(WScolor[i])
|
|
||||||
gc_rectangle('fill',0,20*i,-80,-20)
|
|
||||||
if status=='dead'then
|
|
||||||
gc_setColor(1,1,1)
|
gc_setColor(1,1,1)
|
||||||
gc_draw(TEXTURE.ws_dead,-20,20*i-20)
|
gc.draw(wsBottomImage,-79,20*i-139)
|
||||||
|
if status=='dead'then
|
||||||
|
gc_draw(ws_deadImg,-20,20*i-140)
|
||||||
elseif status=='connecting'then
|
elseif status=='connecting'then
|
||||||
gc_setColor(1,1,1,.5+.3*sin(time*6.26))
|
gc_setColor(1,1,1,.5+.3*sin(time*6.26))
|
||||||
gc_draw(TEXTURE.ws_connecting,-20,20*i-20)
|
gc_draw(ws_connectingImg,-20,20*i-140)
|
||||||
elseif status=='running'then
|
elseif status=='running'then
|
||||||
gc_setColor(1,1,1)
|
gc_draw(ws_runningImg,-20,20*i-140)
|
||||||
gc_draw(TEXTURE.ws_running,-20,20*i-20)
|
|
||||||
end
|
end
|
||||||
local t1,t2,t3=WS.getTimers(WSnames[i])
|
local t1,t2,t3=WS.getTimers(WSnames[i])
|
||||||
gc_setColor(1,1,1,t1)gc_rectangle('fill',-60,20*i,-20,-20)
|
gc_setColor(1,1,1,t1)gc.rectangle('fill',-60,20*i-120,-20,-20)
|
||||||
gc_setColor(0,1,0,t2)gc_rectangle('fill',-40,20*i,-20,-20)
|
gc_setColor(0,1,0,t2)gc.rectangle('fill',-40,20*i-120,-20,-20)
|
||||||
gc_setColor(1,0,0,t3)gc_rectangle('fill',-20,20*i,-20,-20)
|
gc_setColor(1,0,0,t3)gc.rectangle('fill',-20,20*i-120,-20,-20)
|
||||||
end
|
|
||||||
gc_pop()
|
|
||||||
|
|
||||||
--Slow devmode
|
|
||||||
if devMode==3 then WAIT(.1)
|
|
||||||
elseif devMode==4 then WAIT(.5)
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
LOG.draw()
|
|
||||||
|
|
||||||
gc_present()
|
gc_present()
|
||||||
|
|
||||||
--SPEED UPUPUP!
|
--SPEED UPUPUP!
|
||||||
if SETTING.cleanCanvas then gc_discard()end
|
if SETTING.cleanCanvas then gc.discard()end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
@@ -642,6 +679,11 @@ function love.run()
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
--Slow devmode
|
||||||
|
if devMode==3 then WAIT(.1)
|
||||||
|
elseif devMode==4 then WAIT(.5)
|
||||||
|
end
|
||||||
|
|
||||||
--Keep 60fps
|
--Keep 60fps
|
||||||
_=TIME()-lastFrame
|
_=TIME()-lastFrame
|
||||||
if _<.016 then WAIT(.016-_)end
|
if _<.016 then WAIT(.016-_)end
|
||||||
|
|||||||
@@ -29,11 +29,6 @@ function LANG.init(langList,publicText)--Attention, calling this will destory al
|
|||||||
if type(rawget(L,"getTip"))=='table'then
|
if type(rawget(L,"getTip"))=='table'then
|
||||||
setmetatable(L.getTip,tipMeta)
|
setmetatable(L.getTip,tipMeta)
|
||||||
end
|
end
|
||||||
|
|
||||||
--set global name for all back button
|
|
||||||
for _,v in next,L.WidgetText do
|
|
||||||
v.back=L.back
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
|
|
||||||
LANG.init,LANG.setLangList,LANG.setPublicText=nil
|
LANG.init,LANG.setLangList,LANG.setPublicText=nil
|
||||||
|
|||||||
@@ -1,10 +1,10 @@
|
|||||||
--LIGHT MODULE (Optimized by MrZ, Original on github/love2d community/simple-love-lights)
|
--LIGHT MODULE (Optimized by MrZ, Original on github/LÖVE community/simple-love-lights)
|
||||||
--Heavily based on mattdesl's libGDX implementation:
|
--Heavily based on mattdesl's libGDX implementation:
|
||||||
--https://github.com/mattdesl/lwjgl-basics/wiki/2D-Pixel-Perfect-Shadows
|
--https://github.com/mattdesl/lwjgl-basics/wiki/2D-Pixel-Perfect-Shadows
|
||||||
local gc=love.graphics
|
local gc=love.graphics
|
||||||
local clear,translate=gc.clear,gc.translate
|
local clear,gc_translate=gc.clear,gc.translate
|
||||||
local setCanvas,setShader=gc.setCanvas,gc.setShader
|
local gc_setCanvas,gc_setShader=gc.setCanvas,gc.setShader
|
||||||
local render=gc.draw
|
local gc_setColor,gc_draw=gc.setColor,gc.draw
|
||||||
|
|
||||||
local shadowMapShader=gc.newShader("Zframework/light/shadowMap.glsl")--Shader for caculating the 1D shadow map.
|
local shadowMapShader=gc.newShader("Zframework/light/shadowMap.glsl")--Shader for caculating the 1D shadow map.
|
||||||
local lightRenderShader=gc.newShader("Zframework/light/lightRender.glsl")--Shader for rendering blurred lights and shadows.
|
local lightRenderShader=gc.newShader("Zframework/light/lightRender.glsl")--Shader for rendering blurred lights and shadows.
|
||||||
@@ -15,45 +15,40 @@ end
|
|||||||
local function setPow(L,pow)
|
local function setPow(L,pow)
|
||||||
L.size=pow
|
L.size=pow
|
||||||
end
|
end
|
||||||
local function destroy(L)
|
local function drawLight(L)
|
||||||
L.blackCanvas:release()
|
local s=L.size
|
||||||
L.shadowCanvas:release()
|
|
||||||
L.renderCanvas:release()
|
|
||||||
end
|
|
||||||
local function draw(L)
|
|
||||||
--Initialization
|
--Initialization
|
||||||
local r,g,b,a=gc.getColor()
|
gc_setCanvas(L.blackCanvas)clear()
|
||||||
setCanvas(L.blackCanvas)clear()
|
gc_setCanvas(L.shadowCanvas)clear()
|
||||||
setCanvas(L.shadowCanvas)clear()
|
gc_setCanvas(L.renderCanvas)clear()
|
||||||
setCanvas(L.renderCanvas)clear()
|
lightRenderShader:send("xresolution",s)
|
||||||
lightRenderShader:send("xresolution",L.size)
|
shadowMapShader:send("yresolution",s)
|
||||||
shadowMapShader:send("yresolution",L.size)
|
|
||||||
|
|
||||||
--Get up-left of light
|
--Get up-left of light
|
||||||
local X=L.x-L.size*.5
|
local X=L.x-s*.5
|
||||||
local Y=L.y-L.size*.5
|
local Y=L.y-s*.5
|
||||||
|
|
||||||
--Render solid
|
--Render solid
|
||||||
translate(-X,-Y)
|
gc_translate(-X,-Y)
|
||||||
L.blackCanvas:renderTo(L.blackFn)
|
L.blackCanvas:renderTo(L.blackFn)
|
||||||
translate(X,Y)
|
gc_translate(X,Y)
|
||||||
|
|
||||||
--Render shade canvas by solid
|
--Render shade canvas by solid
|
||||||
setShader(shadowMapShader)
|
gc_setShader(shadowMapShader)
|
||||||
setCanvas(L.shadowCanvas)
|
gc_setCanvas(L.shadowCanvas)
|
||||||
render(L.blackCanvas)
|
gc_draw(L.blackCanvas)
|
||||||
|
|
||||||
--Render light canvas by shade
|
--Render light canvas by shade
|
||||||
setShader(lightRenderShader)
|
gc_setShader(lightRenderShader)
|
||||||
setCanvas(L.renderCanvas)
|
gc_setCanvas(L.renderCanvas)
|
||||||
render(L.shadowCanvas,0,0,0,1,L.size)
|
gc_draw(L.shadowCanvas,0,0,0,1,s)
|
||||||
|
|
||||||
--Ready to final render
|
--Ready to final render
|
||||||
setShader()setCanvas()gc.setBlendMode('add')
|
gc_setShader()gc_setCanvas()gc.setBlendMode('add')
|
||||||
|
|
||||||
--Render to screes
|
--Render to screen
|
||||||
gc.setColor(r,g,b,a)
|
gc_draw(L.renderCanvas,X,Y+s,0,1,-1)
|
||||||
render(L.renderCanvas,X,Y+L.size,0,1,-1)
|
|
||||||
|
|
||||||
--Reset
|
--Reset
|
||||||
gc.setBlendMode('alpha')
|
gc.setBlendMode('alpha')
|
||||||
@@ -61,13 +56,16 @@ end
|
|||||||
|
|
||||||
local LIGHT={}
|
local LIGHT={}
|
||||||
function LIGHT.draw()
|
function LIGHT.draw()
|
||||||
|
gc_setColor(1,1,1)
|
||||||
for i=1,#Lights do
|
for i=1,#Lights do
|
||||||
draw(Lights[i])
|
drawLight(Lights[i])
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
function LIGHT.clear()
|
function LIGHT.clear()
|
||||||
for i=#Lights,1,-1 do
|
for i=#Lights,1,-1 do
|
||||||
Lights[i]:destroy()
|
Lights[i].blackCanvas:release()
|
||||||
|
Lights[i].shadowCanvas:release()
|
||||||
|
Lights[i].renderCanvas:release()
|
||||||
Lights[i]=nil
|
Lights[i]=nil
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
@@ -79,11 +77,10 @@ function LIGHT.add(x,y,radius,solidFunc)
|
|||||||
blackCanvas=gc.newCanvas(radius,radius),--Solid canvas
|
blackCanvas=gc.newCanvas(radius,radius),--Solid canvas
|
||||||
shadowCanvas=gc.newCanvas(radius,1),--1D vis-depth canvas
|
shadowCanvas=gc.newCanvas(radius,1),--1D vis-depth canvas
|
||||||
renderCanvas=gc.newCanvas(radius,radius),--Light canvas
|
renderCanvas=gc.newCanvas(radius,radius),--Light canvas
|
||||||
blackFn=solidFunc,--Solid draw funcion
|
blackFn=solidFunc,--Solid draw function
|
||||||
|
|
||||||
move=move,
|
move=move,
|
||||||
setPow=setPow,
|
setPow=setPow,
|
||||||
destroy=destroy,
|
|
||||||
}
|
}
|
||||||
end
|
end
|
||||||
return LIGHT
|
return LIGHT
|
||||||
@@ -4,43 +4,38 @@ return function(name,libName)
|
|||||||
if r1 and r2 then
|
if r1 and r2 then
|
||||||
return r2
|
return r2
|
||||||
else
|
else
|
||||||
LOG.print("Cannot load "..name..": "..(r2 or r3),'warn',COLOR.R)
|
LOG.print("Cannot load "..name..": "..(r2 or r3),'warn')
|
||||||
end
|
end
|
||||||
elseif SYSTEM=="Android"then
|
elseif SYSTEM=="Android"then
|
||||||
local fs=love.filesystem
|
local fs=love.filesystem
|
||||||
local platform={"arm64-v8a","armeabi-v7a"}
|
local platform={'arm64-v8a','armeabi-v7a'}
|
||||||
|
|
||||||
local libFunc=package.loadlib(SAVEDIR.."/lib/"..libName.Android,libName.libFunc)
|
|
||||||
if libFunc then
|
|
||||||
LOG.print(name.." lib loaded",'warn',COLOR.G)
|
|
||||||
else
|
|
||||||
for i=1,#platform do
|
for i=1,#platform do
|
||||||
local soFile=fs.read('data',"libAndroid/"..platform[i].."/"..libName.Android)
|
local soFile,_,_,mes1=fs.read('data',"libAndroid/"..platform[i].."/"..libName.Android)
|
||||||
if soFile then
|
if soFile then
|
||||||
local success,message=fs.write("lib/"..libName.Android,soFile)
|
local success,mes2=fs.write("lib/"..libName.Android,soFile)
|
||||||
if success then
|
if success then
|
||||||
libFunc,message=package.loadlib(SAVEDIR.."/lib/"..libName.Android,libName.libFunc)
|
libFunc,mes2=package.loadlib(SAVEDIR.."/lib/"..libName.Android,libName.libFunc)
|
||||||
if libFunc then
|
if libFunc then
|
||||||
LOG.print(name.." lib loaded",'warn',COLOR.G)
|
LOG.print(name.." lib loaded",'message')
|
||||||
break
|
break
|
||||||
else
|
else
|
||||||
LOG.print("Cannot load "..name..": "..message,'warn',COLOR.R)
|
LOG.print("Cannot load "..name..": "..mes2,'error')
|
||||||
end
|
end
|
||||||
else
|
else
|
||||||
LOG.print("Write "..name.."-"..platform[i].." to saving failed: "..message,'warn',COLOR.R)
|
LOG.print(("Write %s-%s to saving failed: %s"):format(name,platform[i],mes2),'error')
|
||||||
end
|
end
|
||||||
else
|
else
|
||||||
LOG.print("Read "..name.."-"..platform[i].." failed",'warn',COLOR.R)
|
LOG.print(("Read %s-%s to saving failed: %s"):format(name,platform[i],mes1),'error')
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
if not libFunc then
|
if not libFunc then
|
||||||
LOG.print("Cannot load "..name,'warn',COLOR.R)
|
LOG.print("Cannot load "..name,'error')
|
||||||
return
|
return
|
||||||
end
|
end
|
||||||
end
|
|
||||||
return libFunc()
|
return libFunc()
|
||||||
else
|
else
|
||||||
LOG.print("No "..name.." for "..SYSTEM,'warn',COLOR.R)
|
LOG.print("No "..name.." for "..SYSTEM,'error')
|
||||||
return
|
return
|
||||||
end
|
end
|
||||||
return true
|
return true
|
||||||
|
|||||||
@@ -1,70 +1,64 @@
|
|||||||
|
local utf8=require"utf8"
|
||||||
local gc=love.graphics
|
local gc=love.graphics
|
||||||
local int,max,min=math.floor,math.max,math.min
|
local gc_setColor,gc_print=gc.setColor,gc.print
|
||||||
|
local int,min=math.floor,math.min
|
||||||
local ins,rem=table.insert,table.remove
|
local ins,rem=table.insert,table.remove
|
||||||
|
local setFont=setFont
|
||||||
|
|
||||||
local debugMesList={}
|
local mesList={}
|
||||||
local debugMesHistory={
|
local mesHistory={
|
||||||
"Version: "..VERSION.string,
|
"Version: "..VERSION.string,
|
||||||
os.date("Launched at %Y/%m/%d %H:%M"),
|
os.date("Launched at %Y/%m/%d %H:%M"),
|
||||||
}
|
}
|
||||||
local LOG={}
|
local LOG={}
|
||||||
function LOG.update()
|
function LOG.update()
|
||||||
if debugMesList[1]then
|
if mesList[1]then
|
||||||
for i=#debugMesList,1,-1 do
|
for i=#mesList,1,-1 do
|
||||||
local M=debugMesList[i]
|
local M=mesList[i]
|
||||||
if M.blink>0 then
|
if M.blink>0 then
|
||||||
M.blink=M.blink-1
|
M.blink=M.blink-1
|
||||||
else
|
else
|
||||||
M.time=M.time-1
|
M.time=M.time-1
|
||||||
if M.time==0 then
|
if M.time==0 then
|
||||||
rem(debugMesList,i)
|
rem(mesList,i)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
function LOG.draw()
|
function LOG.draw()
|
||||||
if debugMesList[1]then
|
if mesList[1]then
|
||||||
local k=SCR.w/SCR.w0
|
setFont(20)
|
||||||
setFont(max(int(4*k)*5,5))
|
for i=1,#mesList do
|
||||||
for i=1,#debugMesList do
|
local M=mesList[i]
|
||||||
local M=debugMesList[i]
|
M.rgba[4]=M.blink>0 and int(M.blink/3)%2 or min(M.time/26,1)
|
||||||
local t=M.time
|
gc_setColor(M.rgba)
|
||||||
gc.setColor(M.r,M.g,M.b,M.blink>0 and int(M.blink/3)%2 or min(t/26,1))
|
gc_print(M.text,10+(20-min(M.time,20))^1.5/4,25*i)
|
||||||
gc.print(M.text,10+(20-min(t,20))^1.5/4,25*i*k)
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
function LOG.print(text,T,C)--text,type/time/color,color
|
function LOG.print(text,T)--text,type/time
|
||||||
local time
|
local color=COLOR.Z
|
||||||
local his
|
local his,time
|
||||||
if T=='warn'then
|
if T=='message'then
|
||||||
C=C or COLOR.Y
|
color=COLOR.N
|
||||||
his=true
|
his,time=true,180
|
||||||
time=180
|
elseif T=='warn'then
|
||||||
|
color=COLOR.Y
|
||||||
|
his,time=true,180
|
||||||
elseif T=='error'then
|
elseif T=='error'then
|
||||||
C=C or COLOR.R
|
color=COLOR.R
|
||||||
his=true
|
his,time=true,210
|
||||||
time=210
|
|
||||||
elseif T=='message'then
|
|
||||||
C=C or COLOR.N
|
|
||||||
his=true
|
|
||||||
elseif type(T)=='number'then
|
elseif type(T)=='number'then
|
||||||
C=C or COLOR.Z
|
|
||||||
time=T
|
time=T
|
||||||
elseif type(T)=='table'then
|
|
||||||
C=T
|
|
||||||
elseif not C then
|
|
||||||
C=COLOR.Z
|
|
||||||
end
|
end
|
||||||
if his then
|
text=tostring(text)
|
||||||
ins(debugMesHistory,SCN.cur..": "..tostring(text))
|
assert(utf8.len(text),"Error UTF-8 coding")
|
||||||
end
|
if his then ins(mesHistory,SCN.cur..": "..text)end
|
||||||
ins(debugMesList,{text=text,r=C[1],g=C[2],b=C[3],blink=30,time=time or 120})
|
ins(mesList,{text=text,rgba={color[1],color[2],color[3],nil},blink=30,time=time or 120})
|
||||||
end
|
end
|
||||||
function LOG.copy()
|
function LOG.copy()
|
||||||
local str=table.concat(debugMesHistory,"\n")
|
love.system.setClipboardText(table.concat(mesHistory,"\n"))
|
||||||
love.system.setClipboardText(str)
|
LOG.print("Log copied",'message')
|
||||||
LOG.print("Log copied",COLOR.B)
|
|
||||||
end
|
end
|
||||||
return LOG
|
return LOG
|
||||||
@@ -141,10 +141,10 @@ function profile.switch()
|
|||||||
profile.stop()
|
profile.stop()
|
||||||
love.system.setClipboardText(PROFILE.report())
|
love.system.setClipboardText(PROFILE.report())
|
||||||
PROFILE.reset()
|
PROFILE.reset()
|
||||||
LOG.print("profile report copied!")
|
LOG.print("profile report copied!",'message')
|
||||||
else
|
else
|
||||||
PROFILE.start()
|
PROFILE.start()
|
||||||
LOG.print("profile start!")
|
LOG.print("profile start!",'message')
|
||||||
end
|
end
|
||||||
switch=not switch
|
switch=not switch
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -60,10 +60,13 @@ function SCN.swapUpdate()
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
function SCN.init(s,org)
|
function SCN.init(s,org)
|
||||||
|
love.keyboard.setTextInput(false)
|
||||||
|
|
||||||
local S=scenes[s]
|
local S=scenes[s]
|
||||||
SCN.cur=s
|
SCN.cur=s
|
||||||
|
|
||||||
WIDGET.set(S.widgetList)
|
WIDGET.setScrollHeight(S.widgetScrollHeight)
|
||||||
|
WIDGET.setWidgetList(S.widgetList)
|
||||||
SCN.sceneInit=S.sceneInit
|
SCN.sceneInit=S.sceneInit
|
||||||
SCN.sceneBack=S.sceneBack
|
SCN.sceneBack=S.sceneBack
|
||||||
SCN.update=S.update
|
SCN.update=S.update
|
||||||
|
|||||||
@@ -10,7 +10,19 @@ local SCR={
|
|||||||
rad=0, --Radius
|
rad=0, --Radius
|
||||||
k=1, --Scale size
|
k=1, --Scale size
|
||||||
dpi=1, --DPI from gc.getDPIScale()
|
dpi=1, --DPI from gc.getDPIScale()
|
||||||
xOy=love.math.newTransform(),--Screen transformation object
|
|
||||||
|
--Screen transformation objects
|
||||||
|
origin=love.math.newTransform(),
|
||||||
|
xOy_m=love.math.newTransform(),
|
||||||
|
xOy=love.math.newTransform(),
|
||||||
|
xOy_ul=love.math.newTransform(),
|
||||||
|
xOy_um=love.math.newTransform(),
|
||||||
|
xOy_ur=love.math.newTransform(),
|
||||||
|
xOy_ml=love.math.newTransform(),
|
||||||
|
xOy_mr=love.math.newTransform(),
|
||||||
|
xOy_dl=love.math.newTransform(),
|
||||||
|
xOy_dm=love.math.newTransform(),
|
||||||
|
xOy_dr=love.math.newTransform(),
|
||||||
}
|
}
|
||||||
function SCR.setSize(w,h)
|
function SCR.setSize(w,h)
|
||||||
SCR.w0,SCR.h0=w,h
|
SCR.w0,SCR.h0=w,h
|
||||||
@@ -21,15 +33,29 @@ function SCR.resize(w,h)
|
|||||||
SCR.r=h/w
|
SCR.r=h/w
|
||||||
SCR.rad=(w^2+h^2)^.5
|
SCR.rad=(w^2+h^2)^.5
|
||||||
|
|
||||||
|
SCR.x,SCR.y=0,0
|
||||||
if SCR.r>=SCR.h0/SCR.w0 then
|
if SCR.r>=SCR.h0/SCR.w0 then
|
||||||
SCR.k=w/SCR.w0
|
SCR.k=w/SCR.w0
|
||||||
SCR.x,SCR.y=0,(h-w*SCR.h0/SCR.w0)/2
|
SCR.y=(h-SCR.h0*SCR.k)/2
|
||||||
else
|
else
|
||||||
SCR.k=h/SCR.h0
|
SCR.k=h/SCR.h0
|
||||||
SCR.x,SCR.y=(w-h*SCR.w0/SCR.h0)/2,0
|
SCR.x=(w-SCR.w0*SCR.k)/2
|
||||||
end
|
end
|
||||||
|
SCR.cx,SCR.cy=SCR.w/2,SCR.h/2
|
||||||
|
SCR.ex,SCR.ey=SCR.w-SCR.x,SCR.h-SCR.y
|
||||||
SCR.safeX,SCR.safeY,SCR.safeW,SCR.safeH=love.window.getSafeArea()
|
SCR.safeX,SCR.safeY,SCR.safeW,SCR.safeH=love.window.getSafeArea()
|
||||||
SCR.xOy:setTransformation(w/2,h/2,nil,SCR.k,nil,SCR.w0/2,SCR.h0/2)
|
|
||||||
|
SCR.origin:setTransformation(0,0)
|
||||||
|
SCR.xOy:setTransformation(SCR.x,SCR.y,0,SCR.k)
|
||||||
|
SCR.xOy_m:setTransformation(w/2,h/2,0,SCR.k)
|
||||||
|
SCR.xOy_ul:setTransformation(0,0,0,SCR.k)
|
||||||
|
SCR.xOy_um:setTransformation(w/2,0,0,SCR.k)
|
||||||
|
SCR.xOy_ur:setTransformation(w,0,0,SCR.k)
|
||||||
|
SCR.xOy_ml:setTransformation(0,h/2,0,SCR.k)
|
||||||
|
SCR.xOy_mr:setTransformation(w,h/2,0,SCR.k)
|
||||||
|
SCR.xOy_dl:setTransformation(0,h,0,SCR.k)
|
||||||
|
SCR.xOy_dm:setTransformation(w/2,h,0,SCR.k)
|
||||||
|
SCR.xOy_dr:setTransformation(w,h,0,SCR.k)
|
||||||
end
|
end
|
||||||
function SCR.info()
|
function SCR.info()
|
||||||
return{
|
return{
|
||||||
@@ -41,7 +67,7 @@ function SCR.info()
|
|||||||
("W,H : %d, %d"):format(SCR.W,SCR.H),
|
("W,H : %d, %d"):format(SCR.W,SCR.H),
|
||||||
("safeX,safeY : %d, %d"):format(SCR.safeX,SCR.safeY),
|
("safeX,safeY : %d, %d"):format(SCR.safeX,SCR.safeY),
|
||||||
("safeW,safeH : %d, %d"):format(SCR.safeW,SCR.safeH),
|
("safeW,safeH : %d, %d"):format(SCR.safeW,SCR.safeH),
|
||||||
("k,dpi,rad : %d, %d, %.4f"):format(SCR.k,SCR.dpi,SCR.rad),
|
("k,dpi,rad : %.2f, %d, %.2f"):format(SCR.k,SCR.dpi,SCR.rad),
|
||||||
}
|
}
|
||||||
end
|
end
|
||||||
return SCR
|
return SCR
|
||||||
@@ -17,7 +17,7 @@ function SFX.init(list)
|
|||||||
if love.filesystem.getInfo(N)then
|
if love.filesystem.getInfo(N)then
|
||||||
Sources[list[i]]={love.audio.newSource(N,'static')}
|
Sources[list[i]]={love.audio.newSource(N,'static')}
|
||||||
else
|
else
|
||||||
LOG.print("No SFX file: "..N,5,COLOR.O)
|
LOG.print("No SFX file: "..N,5)
|
||||||
end
|
end
|
||||||
if not skip and i~=count then
|
if not skip and i~=count then
|
||||||
coroutine.yield()
|
coroutine.yield()
|
||||||
|
|||||||
@@ -1,21 +1,28 @@
|
|||||||
|
local data=love.data
|
||||||
local STRING={}
|
local STRING={}
|
||||||
local int,format=math.floor,string.format
|
local int,format=math.floor,string.format
|
||||||
local find,sub,upper=string.find,string.sub,string.upper
|
local find,sub,upper=string.find,string.sub,string.upper
|
||||||
|
|
||||||
do--function STRING.shiftChar(c)
|
do--function STRING.shiftChar(c)
|
||||||
local shiftMap={
|
local shiftMap={
|
||||||
["1"]="!",["2"]="@",["3"]="#",["4"]="$",["5"]="%",
|
['1']='!',['2']='@',['3']='#',['4']='$',['5']='%',
|
||||||
["6"]="^",["7"]="&",["8"]="*",["9"]="(",["0"]=")",
|
['6']='^',['7']='&',['8']='*',['9']='(',['0']=')',
|
||||||
["`"]="~",["-"]="_",["="]="+",
|
['`']='~',['-']='_',['=']='+',
|
||||||
["["]="{",["]"]="}",["\\"]="|",
|
['[']='{',[']']='}',['\\']='|',
|
||||||
[";"]=":",["'"]="\"",
|
[';']=':',['\'']='"',
|
||||||
[","]="<",["."]=">",["/"]="?",
|
[',']='<',['.']='>',['/']='?',
|
||||||
}
|
}
|
||||||
function STRING.shiftChar(c)
|
function STRING.shiftChar(c)
|
||||||
return shiftMap[c]or upper(c)
|
return shiftMap[c]or upper(c)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
function STRING.trim(s)
|
||||||
|
if not s:find("%S")then return""end
|
||||||
|
s=s:sub((s:find("%S"))):reverse()
|
||||||
|
return s:sub((s:find("%S"))):reverse()
|
||||||
|
end
|
||||||
|
|
||||||
function STRING.split(s,sep,regex)
|
function STRING.split(s,sep,regex)
|
||||||
local L={}
|
local L={}
|
||||||
local p1,p2=1--start,target
|
local p1,p2=1--start,target
|
||||||
@@ -57,16 +64,16 @@ function STRING.time(s)
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
do--function STRING.urlEncode(str)
|
do--function STRING.urlEncode(s)
|
||||||
local rshift=bit.rshift
|
local rshift=bit.rshift
|
||||||
local b16={[0]="0","1","2","3","4","5","6","7","8","9","a","b","c","d","e","f"}
|
local b16={[0]='0','1','2','3','4','5','6','7','8','9','a','b','c','d','e','f'}
|
||||||
function STRING.urlEncode(str)
|
function STRING.urlEncode(s)
|
||||||
local out=""
|
local out=""
|
||||||
for i=1,#str do
|
for i=1,#s do
|
||||||
if str:sub(i,i):match("[a-zA-Z0-9]")then
|
if s:sub(i,i):match("[a-zA-Z0-9]")then
|
||||||
out=out..str:sub(i,i)
|
out=out..s:sub(i,i)
|
||||||
else
|
else
|
||||||
local b=str:byte(i)
|
local b=s:byte(i)
|
||||||
out=out.."%"..b16[rshift(b,4)]..b16[b%16]
|
out=out.."%"..b16[rshift(b,4)]..b16[b%16]
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
@@ -74,4 +81,31 @@ do--function STRING.urlEncode(str)
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
function STRING.packBin(s)
|
||||||
|
return data.encode('string','base64',data.compress('string','zlib',s))
|
||||||
|
end
|
||||||
|
function STRING.unpackBin(str)
|
||||||
|
local res
|
||||||
|
res,str=pcall(data.decode,'string','base64',str)
|
||||||
|
if not res then return end
|
||||||
|
res,str=pcall(data.decompress,'string','zlib',str)
|
||||||
|
if res then return str end
|
||||||
|
end
|
||||||
|
function STRING.packText(s)
|
||||||
|
return data.encode('string','base64',data.compress('string','gzip',s))
|
||||||
|
end
|
||||||
|
function STRING.unpackText(str)
|
||||||
|
local res
|
||||||
|
res,str=pcall(data.decode,'string','base64',str)
|
||||||
|
if not res then return end
|
||||||
|
res,str=pcall(data.decompress,'string','gzip',str)
|
||||||
|
if res then return str end
|
||||||
|
end
|
||||||
|
function STRING.packTable(t)
|
||||||
|
return STRING.packText(JSON.encode(t))
|
||||||
|
end
|
||||||
|
function STRING.unpackTable(t)
|
||||||
|
return JSON.decode(STRING.unpackText(t))
|
||||||
|
end
|
||||||
|
|
||||||
return STRING
|
return STRING
|
||||||
@@ -3,7 +3,7 @@ local setColor,setWidth=gc.setColor,gc.setLineWidth
|
|||||||
local sin,cos=math.sin,math.cos
|
local sin,cos=math.sin,math.cos
|
||||||
local max,min=math.max,math.min
|
local max,min=math.max,math.min
|
||||||
local rnd=math.random
|
local rnd=math.random
|
||||||
local rem=table.remove
|
local ins,rem=table.insert,table.remove
|
||||||
|
|
||||||
local fx={}
|
local fx={}
|
||||||
|
|
||||||
@@ -126,17 +126,17 @@ function SYSFX.draw()
|
|||||||
end
|
end
|
||||||
|
|
||||||
function SYSFX.newBadge(x1,y1,x2,y2)
|
function SYSFX.newBadge(x1,y1,x2,y2)
|
||||||
fx[#fx+1]={
|
ins(fx,{
|
||||||
update=FXupdate.badge,
|
update=FXupdate.badge,
|
||||||
draw=FXdraw.badge,
|
draw=FXdraw.badge,
|
||||||
t=0,
|
t=0,
|
||||||
x=x1,y=y1,
|
x=x1,y=y1,
|
||||||
x1=x1,y1=y1,
|
x1=x1,y1=y1,
|
||||||
x2=x2,y2=y2,
|
x2=x2,y2=y2,
|
||||||
}
|
})
|
||||||
end
|
end
|
||||||
function SYSFX.newAttack(rate,x1,y1,x2,y2,wid,r,g,b,a)
|
function SYSFX.newAttack(rate,x1,y1,x2,y2,wid,r,g,b,a)
|
||||||
fx[#fx+1]={
|
ins(fx,{
|
||||||
update=FXupdate.attack,
|
update=FXupdate.attack,
|
||||||
draw=FXdraw.attack,
|
draw=FXdraw.attack,
|
||||||
t=0,
|
t=0,
|
||||||
@@ -145,7 +145,7 @@ function SYSFX.newAttack(rate,x1,y1,x2,y2,wid,r,g,b,a)
|
|||||||
x2=x2,y2=y2,--End pos
|
x2=x2,y2=y2,--End pos
|
||||||
wid=wid,--Line width
|
wid=wid,--Line width
|
||||||
r=r,g=g,b=b,a=a,
|
r=r,g=g,b=b,a=a,
|
||||||
}
|
})
|
||||||
end
|
end
|
||||||
function SYSFX.newTap(rate,x,y)
|
function SYSFX.newTap(rate,x,y)
|
||||||
local T=
|
local T=
|
||||||
@@ -162,38 +162,38 @@ function SYSFX.newTap(rate,x,y)
|
|||||||
local ang=rnd()*6.2832
|
local ang=rnd()*6.2832
|
||||||
T.ptc[i]={x,y,x+d*cos(ang),y+d*sin(ang)}
|
T.ptc[i]={x,y,x+d*cos(ang),y+d*sin(ang)}
|
||||||
end
|
end
|
||||||
fx[#fx+1]=T
|
ins(fx,T)
|
||||||
end
|
end
|
||||||
function SYSFX.newRipple(rate,x,y,r)
|
function SYSFX.newRipple(rate,x,y,r)
|
||||||
fx[#fx+1]={
|
ins(fx,{
|
||||||
update=FXupdate.ripple,
|
update=FXupdate.ripple,
|
||||||
draw=FXdraw.ripple,
|
draw=FXdraw.ripple,
|
||||||
t=0,
|
t=0,
|
||||||
rate=rate,
|
rate=rate,
|
||||||
x=x,y=y,r=r,
|
x=x,y=y,r=r,
|
||||||
}
|
})
|
||||||
end
|
end
|
||||||
function SYSFX.newRectRipple(rate,x,y,w,h)
|
function SYSFX.newRectRipple(rate,x,y,w,h)
|
||||||
fx[#fx+1]={
|
ins(fx,{
|
||||||
update=FXupdate.rectRipple,
|
update=FXupdate.rectRipple,
|
||||||
draw=FXdraw.rectRipple,
|
draw=FXdraw.rectRipple,
|
||||||
t=0,
|
t=0,
|
||||||
rate=rate,
|
rate=rate,
|
||||||
x=x,y=y,w=w,h=h,
|
x=x,y=y,w=w,h=h,
|
||||||
}
|
})
|
||||||
end
|
end
|
||||||
function SYSFX.newShade(rate,x,y,w,h,r,g,b)
|
function SYSFX.newShade(rate,x,y,w,h,r,g,b)
|
||||||
fx[#fx+1]={
|
ins(fx,{
|
||||||
update=FXupdate.shade,
|
update=FXupdate.shade,
|
||||||
draw=FXdraw.shade,
|
draw=FXdraw.shade,
|
||||||
t=0,
|
t=0,
|
||||||
rate=rate,
|
rate=rate,
|
||||||
x=x,y=y,w=w,h=h,
|
x=x,y=y,w=w,h=h,
|
||||||
r=r or 1,g=g or 1,b=b or 1,
|
r=r or 1,g=g or 1,b=b or 1,
|
||||||
}
|
})
|
||||||
end
|
end
|
||||||
function SYSFX.newCell(rate,image,size,x,y,vx,vy,ax,ay)
|
function SYSFX.newCell(rate,image,size,x,y,vx,vy,ax,ay)
|
||||||
fx[#fx+1]={
|
ins(fx,{
|
||||||
update=FXupdate.cell,
|
update=FXupdate.cell,
|
||||||
draw=FXdraw.cell,
|
draw=FXdraw.cell,
|
||||||
t=0,
|
t=0,
|
||||||
@@ -203,10 +203,10 @@ function SYSFX.newCell(rate,image,size,x,y,vx,vy,ax,ay)
|
|||||||
x=x,y=y,
|
x=x,y=y,
|
||||||
vx=vx,vy=vy,
|
vx=vx,vy=vy,
|
||||||
ax=ax,ay=ay,
|
ax=ax,ay=ay,
|
||||||
}
|
})
|
||||||
end
|
end
|
||||||
function SYSFX.newLine(rate,x1,y1,x2,y2,r,g,b,a)
|
function SYSFX.newLine(rate,x1,y1,x2,y2,r,g,b,a)
|
||||||
fx[#fx+1]={
|
ins(fx,{
|
||||||
update=FXupdate.line,
|
update=FXupdate.line,
|
||||||
draw=FXdraw.line,
|
draw=FXdraw.line,
|
||||||
t=0,
|
t=0,
|
||||||
@@ -214,6 +214,6 @@ function SYSFX.newLine(rate,x1,y1,x2,y2,r,g,b,a)
|
|||||||
x1=x1 or 0,y1=y1 or 0,
|
x1=x1 or 0,y1=y1 or 0,
|
||||||
x2=x2 or x1 or 1280,y2=y2 or y1 or 720,
|
x2=x2 or x1 or 1280,y2=y2 or y1 or 720,
|
||||||
r=r or 1,g=g or 1,b=b or 1,a=a or 1,
|
r=r or 1,g=g or 1,b=b or 1,a=a or 1,
|
||||||
}
|
})
|
||||||
end
|
end
|
||||||
return SYSFX
|
return SYSFX
|
||||||
@@ -75,6 +75,16 @@ function TABLE.clear(G)
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
--Find value in [1~#]
|
||||||
|
function TABLE.find(t,val)
|
||||||
|
for i=1,#t do if t[i]==val then return i end end
|
||||||
|
end
|
||||||
|
|
||||||
|
--Find value in whole table
|
||||||
|
function TABLE.search(t,val)
|
||||||
|
for k,v in next,t do if v==val then return k end end
|
||||||
|
end
|
||||||
|
|
||||||
--Re-index string value of a table
|
--Re-index string value of a table
|
||||||
function TABLE.reIndex(org)
|
function TABLE.reIndex(org)
|
||||||
for k,v in next,org do
|
for k,v in next,org do
|
||||||
@@ -95,7 +105,7 @@ do--function TABLE.dump(L,t)
|
|||||||
"\t\t\t\t",
|
"\t\t\t\t",
|
||||||
"\t\t\t\t\t",
|
"\t\t\t\t\t",
|
||||||
}
|
}
|
||||||
function dump(L,t)
|
local function dump(L,t)
|
||||||
local s
|
local s
|
||||||
if t then
|
if t then
|
||||||
s="{\n"
|
s="{\n"
|
||||||
@@ -139,4 +149,42 @@ do--function TABLE.dump(L,t)
|
|||||||
TABLE.dump=dump
|
TABLE.dump=dump
|
||||||
end
|
end
|
||||||
|
|
||||||
|
--Dump a simple lua table (no whitespaces)
|
||||||
|
do--function TABLE.dumpDeflate(L,t)
|
||||||
|
local find=string.find
|
||||||
|
local function dump(L)
|
||||||
|
local s="return{"
|
||||||
|
if type(L)~='table'then return end
|
||||||
|
local count=1
|
||||||
|
for k,v in next,L do
|
||||||
|
local T=type(k)
|
||||||
|
if T=='number'then
|
||||||
|
if k==count then
|
||||||
|
k=""
|
||||||
|
count=count+1
|
||||||
|
else
|
||||||
|
k="["..k.."]="
|
||||||
|
end
|
||||||
|
elseif T=='string'then
|
||||||
|
if find(k,"[^0-9a-zA-Z_]")then
|
||||||
|
k="[\""..k.."\"]="
|
||||||
|
else
|
||||||
|
k=k.."="
|
||||||
|
end
|
||||||
|
elseif T=='boolean'then k="["..k.."]="
|
||||||
|
else error("Error key type!")
|
||||||
|
end
|
||||||
|
T=type(v)
|
||||||
|
if T=='number'then v=tostring(v)
|
||||||
|
elseif T=='string'then v="\""..v.."\""
|
||||||
|
elseif T=='table'then v=dump(v)
|
||||||
|
elseif T=='boolean'then v=tostring(v)
|
||||||
|
else error("Error data type!")
|
||||||
|
end
|
||||||
|
end
|
||||||
|
return s.."}"
|
||||||
|
end
|
||||||
|
TABLE.dumpDeflate=dump
|
||||||
|
end
|
||||||
|
|
||||||
return TABLE
|
return TABLE
|
||||||
@@ -1,8 +1,9 @@
|
|||||||
local gc=love.graphics
|
local gc=love.graphics
|
||||||
local gc_getColor,gc_setColor,gc_push,gc_pop,gc_translate,gc_scale,gc_rotate,gc_shear
|
local gc_getColor,gc_setColor,gc_push,gc_pop=gc.getColor,gc.setColor,gc.push,gc.pop
|
||||||
=gc.getColor,gc.setColor,gc.push,gc.pop,gc.translate,gc.scale,gc.rotate,gc.shear
|
local gc_translate,gc_scale,gc_rotate,gc_shear=gc.translate,gc.scale,gc.rotate,gc.shear
|
||||||
|
|
||||||
local int,rnd,rem=math.floor,math.random,table.remove
|
local int,rnd=math.floor,math.random
|
||||||
|
local ins,rem=table.insert,table.remove
|
||||||
local setFont,mStr=setFont,mStr
|
local setFont,mStr=setFont,mStr
|
||||||
|
|
||||||
local texts={}
|
local texts={}
|
||||||
@@ -77,7 +78,7 @@ function TEXT.clear()
|
|||||||
texts={}
|
texts={}
|
||||||
end
|
end
|
||||||
function TEXT.show(text,x,y,font,style,spd,stop)
|
function TEXT.show(text,x,y,font,style,spd,stop)
|
||||||
texts[#texts+1]={
|
ins(texts,{
|
||||||
c=0, --Timer
|
c=0, --Timer
|
||||||
text=text, --String
|
text=text, --String
|
||||||
x=x or 0, --X
|
x=x or 0, --X
|
||||||
@@ -86,7 +87,7 @@ function TEXT.show(text,x,y,font,style,spd,stop)
|
|||||||
spd=(spd or 1)/60, --Timing speed(1=last 1 sec)
|
spd=(spd or 1)/60, --Timing speed(1=last 1 sec)
|
||||||
stop=stop, --Stop time(sustained text)
|
stop=stop, --Stop time(sustained text)
|
||||||
draw=textFX[style or'appear']or error("unavailable type:"..style), --Draw method
|
draw=textFX[style or'appear']or error("unavailable type:"..style), --Draw method
|
||||||
}
|
})
|
||||||
end
|
end
|
||||||
function TEXT.getText(text,x,y,font,style,spd,stop)--Another version of TEXT.show(), but only return text object, need manual management
|
function TEXT.getText(text,x,y,font,style,spd,stop)--Another version of TEXT.show(), but only return text object, need manual management
|
||||||
return{
|
return{
|
||||||
|
|||||||
@@ -14,6 +14,10 @@ function THEME.calculate(Y,M,D)
|
|||||||
M=="12"and math.abs(D-25)<4 and
|
M=="12"and math.abs(D-25)<4 and
|
||||||
'xmas'or
|
'xmas'or
|
||||||
|
|
||||||
|
--Birthday
|
||||||
|
M=="06"and D=="06"and
|
||||||
|
'birth'or
|
||||||
|
|
||||||
--Spring festival
|
--Spring festival
|
||||||
M<"03"and math.abs((({
|
M<"03"and math.abs((({
|
||||||
--Festival days. Jan 26=26, Feb 1=32, etc.
|
--Festival days. Jan 26=26, Feb 1=32, etc.
|
||||||
@@ -33,9 +37,9 @@ function THEME.calculate(Y,M,D)
|
|||||||
|
|
||||||
--Z day (Feb./Mar./Apr./May./June. 26)
|
--Z day (Feb./Mar./Apr./May./June. 26)
|
||||||
D=="26"and(
|
D=="26"and(
|
||||||
M=="01"or M=="02"and'zday1'or
|
(M=="01"or M=="02")and'zday1'or
|
||||||
M=="03"or M=="04"and'zday2'or
|
(M=="03"or M=="04")and'zday2'or
|
||||||
M=="05"or M=="06"and'zday3'
|
(M=="05"or M=="06")and'zday3'
|
||||||
)or
|
)or
|
||||||
|
|
||||||
'classic'
|
'classic'
|
||||||
@@ -44,19 +48,22 @@ end
|
|||||||
function THEME.set(theme)
|
function THEME.set(theme)
|
||||||
if theme=='classic'then
|
if theme=='classic'then
|
||||||
BG.setDefault('space')
|
BG.setDefault('space')
|
||||||
BGM.setDefault("blank")
|
BGM.setDefault("space")
|
||||||
elseif theme=='xmas'then
|
elseif theme=='xmas'then
|
||||||
BG.setDefault('snow')
|
BG.setDefault('snow')
|
||||||
BGM.setDefault('xmas')
|
BGM.setDefault('xmas')
|
||||||
LOG.print("==============",COLOR.R)
|
LOG.print("==============")
|
||||||
LOG.print("Merry Christmas!",COLOR.Z)
|
LOG.print("Merry Christmas!")
|
||||||
LOG.print("==============",COLOR.R)
|
LOG.print("==============")
|
||||||
|
elseif theme=='birth'then
|
||||||
|
BG.setDefault('firework')
|
||||||
|
BGM.setDefault('magicblock')
|
||||||
elseif theme=='sprfes'then
|
elseif theme=='sprfes'then
|
||||||
BG.setDefault('firework')
|
BG.setDefault('firework')
|
||||||
BGM.setDefault("spring festival")
|
BGM.setDefault("spring festival")
|
||||||
LOG.print(" ★☆☆★",COLOR.R)
|
LOG.print(" ★☆☆★")
|
||||||
LOG.print("新年快乐!",COLOR.Z)
|
LOG.print("新年快乐!")
|
||||||
LOG.print(" ★☆☆★",COLOR.R)
|
LOG.print(" ★☆☆★")
|
||||||
elseif theme=='zday1'then
|
elseif theme=='zday1'then
|
||||||
BG.setDefault('lanterns')
|
BG.setDefault('lanterns')
|
||||||
BGM.setDefault("empty")
|
BGM.setDefault("empty")
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
local level={0,0,.01,.015,.02,.03,.04,.05,.06,.07}
|
local level={0,0,.01,.016,.023,.03,.04,.05,.06,.07,.08,.09,.12,.15}
|
||||||
local vib=love.system.vibrate
|
local vib=love.system.vibrate
|
||||||
return function(t)
|
return function(t)
|
||||||
local L=SETTING.vib
|
local L=SETTING.vib
|
||||||
|
|||||||
@@ -45,7 +45,7 @@ function VOC.init(list)
|
|||||||
|
|
||||||
if n==1 then
|
if n==1 then
|
||||||
if not loadVoiceFile(list[i],list[i])then
|
if not loadVoiceFile(list[i],list[i])then
|
||||||
LOG.print("No VOICE file: "..list[i],5,COLOR.O)
|
LOG.print("No VOICE file: "..list[i],5)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
if not Source[list[i]][1]then Source[list[i]]=nil end
|
if not Source[list[i]][1]then Source[list[i]]=nil end
|
||||||
|
|||||||
@@ -1,15 +1,15 @@
|
|||||||
-- local host="127.0.0.1"
|
local host=
|
||||||
-- local host="192.168.114.102"
|
-- "127.0.0.1"
|
||||||
-- local host="krakens.tpddns.cn"
|
-- "192.168.114.102"
|
||||||
-- local host="hdustea.3322.org"
|
"krakens.tpddns.cn"
|
||||||
local host="game.techmino.org"
|
-- "game.techmino.org"
|
||||||
local port="10026"
|
local port="10026"
|
||||||
local path="/tech/socket/v1"
|
local path="/tech/socket/v1"
|
||||||
|
|
||||||
local debug=""--S:send, R:receive, M=mark
|
local debugMode=""--S:send, R:receive, M=mark
|
||||||
|
|
||||||
local wsThread=[[
|
local wsThread=[[
|
||||||
-- lua + love2d threading websocket client
|
-- lua + LÖVE threading websocket client
|
||||||
-- Original pure lua ver. by flaribbit and Particle_G
|
-- Original pure lua ver. by flaribbit and Particle_G
|
||||||
-- Threading version by MrZ
|
-- Threading version by MrZ
|
||||||
|
|
||||||
@@ -24,8 +24,9 @@ do--Connect
|
|||||||
local port=sendCHN:demand()
|
local port=sendCHN:demand()
|
||||||
local path=sendCHN:demand()
|
local path=sendCHN:demand()
|
||||||
local body=sendCHN:demand()
|
local body=sendCHN:demand()
|
||||||
|
local timeout=sendCHN:demand()
|
||||||
|
|
||||||
SOCK:settimeout(2.6)
|
SOCK:settimeout(timeout)
|
||||||
local res,err=SOCK:connect(host,port)
|
local res,err=SOCK:connect(host,port)
|
||||||
if err then readCHN:push(err)return end
|
if err then readCHN:push(err)return end
|
||||||
|
|
||||||
@@ -87,7 +88,7 @@ local _send do
|
|||||||
local mask_str=char(unpack(mask_key))
|
local mask_str=char(unpack(mask_key))
|
||||||
|
|
||||||
function _send(op,message)
|
function _send(op,message)
|
||||||
]]..(debug:find'S'and""or"--")..[[print((">> %s[%d]:%s"):format(threadName,#message,message))
|
]]..(debugMode:find'S'and""or"--")..[[print((">> %s[%d]:%s"):format(threadName,#message,message))
|
||||||
--Message type
|
--Message type
|
||||||
SOCK:send(char(bor(0x80,op)))
|
SOCK:send(char(bor(0x80,op)))
|
||||||
|
|
||||||
@@ -154,7 +155,7 @@ while true do--Running
|
|||||||
if s then
|
if s then
|
||||||
res=s
|
res=s
|
||||||
elseif p then--UNF head
|
elseif p then--UNF head
|
||||||
]]..(debug:find'R'and""or"--")..[[print(("<< %s[%d/%d]:%s"):format(threadName,#p,length,#p<50 and p or p:sub(1,50)))
|
]]..(debugMode:find'R'and""or"--")..[[print(("<< %s[%d/%d]:%s"):format(threadName,#p,length,#p<50 and p or p:sub(1,50)))
|
||||||
UFF=true
|
UFF=true
|
||||||
sBuffer=sBuffer..p
|
sBuffer=sBuffer..p
|
||||||
length=length-#p
|
length=length-#p
|
||||||
@@ -166,11 +167,11 @@ while true do--Running
|
|||||||
else
|
else
|
||||||
local s,e,p=SOCK:receive(length)
|
local s,e,p=SOCK:receive(length)
|
||||||
if s then
|
if s then
|
||||||
]]..(debug:find'R'and""or"--")..[[print(("<< %s(%d):%s"):format(threadName,length,#s<50 and s or s:sub(1,50)))
|
]]..(debugMode:find'R'and""or"--")..[[print(("<< %s(%d):%s"):format(threadName,length,#s<50 and s or s:sub(1,50)))
|
||||||
sBuffer=sBuffer..s
|
sBuffer=sBuffer..s
|
||||||
length=length-#s
|
length=length-#s
|
||||||
elseif p then
|
elseif p then
|
||||||
]]..(debug:find'R'and""or"--")..[[print(("<< %s(%d):%s"):format(threadName,length,#p<50 and p or p:sub(1,50)))
|
]]..(debugMode:find'R'and""or"--")..[[print(("<< %s(%d):%s"):format(threadName,length,#p<50 and p or p:sub(1,50)))
|
||||||
sBuffer=sBuffer..p
|
sBuffer=sBuffer..p
|
||||||
length=length-#p
|
length=length-#p
|
||||||
end
|
end
|
||||||
@@ -181,36 +182,35 @@ while true do--Running
|
|||||||
break
|
break
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
]]..(debug:find'R'and""or"--")..[[print(("<< %s[(%d)]:%s"):format(threadName,#res,#res<800 and res or res:sub(1,150).."\n...\n"..res:sub(-150)))
|
]]..(debugMode:find'R'and""or"--")..[[print(("<< %s[(%d)]:%s"):format(threadName,#res,#res<800 and res or res:sub(1,150).."\n...\n"..res:sub(-150)))
|
||||||
|
|
||||||
--React
|
--React
|
||||||
if op==8 then--8=close
|
if op==8 then--8=close
|
||||||
readCHN:push(op)
|
readCHN:push(op)
|
||||||
SOCK:close()
|
SOCK:close()
|
||||||
if type(res)=='string'then
|
if type(res)=='string'then
|
||||||
res=JSON.decode(res)
|
readCHN:push(res:sub(3))--Warning: with 2 bytes close code
|
||||||
readCHN:push(res and res.reason or"WS Error")
|
|
||||||
else
|
else
|
||||||
readCHN:push("WS Error")
|
readCHN:push("WS Error")
|
||||||
end
|
end
|
||||||
elseif op==0 then--0=continue
|
elseif op==0 then--0=continue
|
||||||
lBuffer=lBuffer..res
|
lBuffer=lBuffer..res
|
||||||
if fin then
|
if fin then
|
||||||
]]..(debug:find'M'and""or"--")..[[print("FIN=1 (c")
|
]]..(debugMode:find'M'and""or"--")..[[print("FIN=1 (c")
|
||||||
readCHN:push(lBuffer)
|
readCHN:push(lBuffer)
|
||||||
lBuffer=""
|
lBuffer=""
|
||||||
else
|
else
|
||||||
]]..(debug:find'M'and""or"--")..[[print("FIN=0 (c")
|
]]..(debugMode:find'M'and""or"--")..[[print("FIN=0 (c")
|
||||||
end
|
end
|
||||||
else
|
else
|
||||||
readCHN:push(op)
|
readCHN:push(op)
|
||||||
if fin then
|
if fin then
|
||||||
]]..(debug:find'M'and""or"--")..[[print("OP: "..op.."\tFIN=1")
|
]]..(debugMode:find'M'and""or"--")..[[print("OP: "..op.."\tFIN=1")
|
||||||
readCHN:push(res)
|
readCHN:push(res)
|
||||||
else
|
else
|
||||||
]]..(debug:find'M'and""or"--")..[[print("OP: "..op.."\tFIN=0")
|
]]..(debugMode:find'M'and""or"--")..[[print("OP: "..op.."\tFIN=0")
|
||||||
sBuffer=res
|
sBuffer=res
|
||||||
]]..(debug:find'M'and""or"--")..[[print("START pack: "..res)
|
]]..(debugMode:find'M'and""or"--")..[[print("START pack: "..res)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
@@ -234,7 +234,16 @@ local wsList=setmetatable({},{
|
|||||||
end
|
end
|
||||||
})
|
})
|
||||||
|
|
||||||
function WS.connect(name,subPath,body)
|
function WS.switchHost(_1,_2,_3)
|
||||||
|
for k in next,wsList do
|
||||||
|
WS.close(k)
|
||||||
|
end
|
||||||
|
host=_1
|
||||||
|
port=_2 or port
|
||||||
|
path=_3 or path
|
||||||
|
end
|
||||||
|
|
||||||
|
function WS.connect(name,subPath,body,timeout)
|
||||||
local ws={
|
local ws={
|
||||||
real=true,
|
real=true,
|
||||||
thread=love.thread.newThread(wsThread),
|
thread=love.thread.newThread(wsThread),
|
||||||
@@ -243,8 +252,8 @@ function WS.connect(name,subPath,body)
|
|||||||
readCHN=love.thread.newChannel(),
|
readCHN=love.thread.newChannel(),
|
||||||
lastPingTime=0,
|
lastPingTime=0,
|
||||||
lastPongTime=timer(),
|
lastPongTime=timer(),
|
||||||
pingInterval=26,
|
pingInterval=12,
|
||||||
status='connecting',--connecting, running, dead
|
status='connecting',--'connecting', 'running', 'dead'
|
||||||
sendTimer=0,
|
sendTimer=0,
|
||||||
alertTimer=0,
|
alertTimer=0,
|
||||||
pongTimer=0,
|
pongTimer=0,
|
||||||
@@ -255,6 +264,7 @@ function WS.connect(name,subPath,body)
|
|||||||
ws.sendCHN:push(port)
|
ws.sendCHN:push(port)
|
||||||
ws.sendCHN:push(path..subPath)
|
ws.sendCHN:push(path..subPath)
|
||||||
ws.sendCHN:push(body or"")
|
ws.sendCHN:push(body or"")
|
||||||
|
ws.sendCHN:push(timeout or 2.6)
|
||||||
end
|
end
|
||||||
|
|
||||||
function WS.status(name)
|
function WS.status(name)
|
||||||
@@ -269,7 +279,7 @@ end
|
|||||||
|
|
||||||
function WS.setPingInterval(name,time)
|
function WS.setPingInterval(name,time)
|
||||||
local ws=wsList[name]
|
local ws=wsList[name]
|
||||||
ws.pingInterval=math.max(time or 1,2.6)
|
ws.pingInterval=math.max(time or 2.6,2.6)
|
||||||
end
|
end
|
||||||
|
|
||||||
function WS.alert(name)
|
function WS.alert(name)
|
||||||
@@ -348,7 +358,7 @@ function WS.update(dt)
|
|||||||
ws.sendCHN:push("")--ping
|
ws.sendCHN:push("")--ping
|
||||||
ws.lastPingTime=time
|
ws.lastPingTime=time
|
||||||
end
|
end
|
||||||
if time-ws.lastPongTime>10+3*ws.pingInterval then
|
if time-ws.lastPongTime>6+2*ws.pingInterval then
|
||||||
WS.close(name)
|
WS.close(name)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -1,21 +1,40 @@
|
|||||||
local kb=love.keyboard
|
|
||||||
local gc=love.graphics
|
local gc=love.graphics
|
||||||
|
local gc_clear,gc_origin=gc.clear,gc.origin
|
||||||
|
local gc_translate,gc_replaceTransform=gc.translate,gc.replaceTransform
|
||||||
|
local gc_setCanvas,gc_setBlendMode=gc.setCanvas,gc.setBlendMode
|
||||||
|
local gc_setColor,gc_setLineWidth=gc.setColor,gc.setLineWidth
|
||||||
|
local gc_draw,gc_line=gc.draw,gc.line
|
||||||
|
local gc_rectangle=gc.rectangle
|
||||||
|
local gc_print,gc_printf=gc.print,gc.printf
|
||||||
|
|
||||||
|
local kb=love.keyboard
|
||||||
|
|
||||||
|
local next=next
|
||||||
local int,abs=math.floor,math.abs
|
local int,abs=math.floor,math.abs
|
||||||
local max,min=math.max,math.min
|
local max,min=math.max,math.min
|
||||||
local sub=string.sub
|
local sub,ins=string.sub,table.insert
|
||||||
local ins=table.insert
|
local getFont,setFont,mStr=getFont,setFont,mStr
|
||||||
local setFont,mStr=setFont,mStr
|
local mDraw,mDraw_X,mDraw_Y=ADRAW.draw,ADRAW.simpX,ADRAW.simpY
|
||||||
local mDraw_X,mDraw_Y=ADRAW.simpX,ADRAW.simpY
|
local xOy=SCR.xOy
|
||||||
|
|
||||||
|
local downArrowIcon=DOGC{40,25,{'fPoly',0,0,20,25,40,0}}
|
||||||
|
local upArrowIcon=DOGC{40,25,{'fPoly',0,25,20,0,40,25}}
|
||||||
local clearIcon=DOGC{40,40,
|
local clearIcon=DOGC{40,40,
|
||||||
{"setLW",6},
|
{'fRect',16,5,8,3},
|
||||||
{"line",11,11,29,29},
|
{'fRect',8,8,24,3},
|
||||||
{"line",11,29,29,11},
|
{'fRect',11,14,18,21},
|
||||||
}
|
}
|
||||||
local sureIcon=DOGC{40,40,
|
local sureIcon=DOGC{40,40,
|
||||||
{"setFT",35},
|
{'setFT',35},
|
||||||
{"mText","?",20,-6},
|
{'mText',"?",20,-6},
|
||||||
|
}
|
||||||
|
local smallerThen=DOGC{20,20,
|
||||||
|
{'setLW',5},
|
||||||
|
{'line',18,2,1,10,18,18},
|
||||||
|
}
|
||||||
|
local largerThen=DOGC{20,20,
|
||||||
|
{'setLW',5},
|
||||||
|
{'line',2,2,19,10,2,18},
|
||||||
}
|
}
|
||||||
|
|
||||||
local WIDGET={}
|
local WIDGET={}
|
||||||
@@ -33,7 +52,7 @@ local text={
|
|||||||
|
|
||||||
function text:reset()end
|
function text:reset()end
|
||||||
function text:update()
|
function text:update()
|
||||||
if self.hideCon and self.hideCon()then
|
if self.hideF and self.hideF()then
|
||||||
if self.alpha>0 then
|
if self.alpha>0 then
|
||||||
self.alpha=self.alpha-.125
|
self.alpha=self.alpha-.125
|
||||||
end
|
end
|
||||||
@@ -44,17 +63,17 @@ end
|
|||||||
function text:draw()
|
function text:draw()
|
||||||
if self.alpha>0 then
|
if self.alpha>0 then
|
||||||
local c=self.color
|
local c=self.color
|
||||||
gc.setColor(c[1],c[2],c[3],self.alpha)
|
gc_setColor(c[1],c[2],c[3],self.alpha)
|
||||||
if self.align=='M'then
|
if self.align=='M'then
|
||||||
mDraw_X(self.obj,self.x,self.y)
|
mDraw_X(self.obj,self.x,self.y)
|
||||||
elseif self.align=='L'then
|
elseif self.align=='L'then
|
||||||
gc.draw(self.obj,self.x,self.y)
|
gc_draw(self.obj,self.x,self.y)
|
||||||
elseif self.align=='R'then
|
elseif self.align=='R'then
|
||||||
gc.draw(self.obj,self.x-self.obj:getWidth(),self.y)
|
gc_draw(self.obj,self.x-self.obj:getWidth(),self.y)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
function WIDGET.newText(D)--name,x,y[,fText][,color][,font=30][,align='M'][,hide]
|
function WIDGET.newText(D)--name,x,y[,fText][,color][,font=30][,align='M'][,hideF][,hide]
|
||||||
local _={
|
local _={
|
||||||
name= D.name,
|
name= D.name,
|
||||||
x= D.x,
|
x= D.x,
|
||||||
@@ -64,10 +83,10 @@ function WIDGET.newText(D)--name,x,y[,fText][,color][,font=30][,align='M'][,hide
|
|||||||
color= D.color and(COLOR[D.color]or D.color)or COLOR.Z,
|
color= D.color and(COLOR[D.color]or D.color)or COLOR.Z,
|
||||||
font= D.font or 30,
|
font= D.font or 30,
|
||||||
align= D.align or'M',
|
align= D.align or'M',
|
||||||
hideCon=D.hide,
|
hideF= D.hideF,
|
||||||
}
|
}
|
||||||
for k,v in next,text do _[k]=v end
|
for k,v in next,text do _[k]=v end
|
||||||
if not _.hideCon then _.alpha=1 end
|
if not _.hideF then _.alpha=1 end
|
||||||
setmetatable(_,widgetMetatable)
|
setmetatable(_,widgetMetatable)
|
||||||
return _
|
return _
|
||||||
end
|
end
|
||||||
@@ -81,10 +100,10 @@ function image:reset()
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
function image:draw()
|
function image:draw()
|
||||||
gc.setColor(1,1,1,self.alpha)
|
gc_setColor(1,1,1,self.alpha)
|
||||||
gc.draw(self.img,self.x,self.y,self.ang,self.k)
|
gc_draw(self.img,self.x,self.y,self.ang,self.k)
|
||||||
end
|
end
|
||||||
function WIDGET.newImage(D)--name[,img(name)],x,y[,ang][,k][,hide]
|
function WIDGET.newImage(D)--name[,img(name)],x,y[,ang][,k][,hideF][,hide]
|
||||||
local _={
|
local _={
|
||||||
name= D.name,
|
name= D.name,
|
||||||
img= D.img or D.name,
|
img= D.img or D.name,
|
||||||
@@ -93,6 +112,7 @@ function WIDGET.newImage(D)--name[,img(name)],x,y[,ang][,k][,hide]
|
|||||||
y= D.y,
|
y= D.y,
|
||||||
ang= D.ang,
|
ang= D.ang,
|
||||||
k= D.k,
|
k= D.k,
|
||||||
|
hideF= D.hideF,
|
||||||
hide= D.hide,
|
hide= D.hide,
|
||||||
}
|
}
|
||||||
for k,v in next,image do _[k]=v end
|
for k,v in next,image do _[k]=v end
|
||||||
@@ -126,16 +146,6 @@ end
|
|||||||
function button:getCenter()
|
function button:getCenter()
|
||||||
return self.x+self.w*.5,self.y+self.h*.5
|
return self.x+self.w*.5,self.y+self.h*.5
|
||||||
end
|
end
|
||||||
function button:FX()
|
|
||||||
local ATV=self.ATV
|
|
||||||
SYSFX.newRectRipple(
|
|
||||||
6,
|
|
||||||
self.x-ATV,
|
|
||||||
self.y-ATV,
|
|
||||||
self.w+2*ATV,
|
|
||||||
self.h+2*ATV
|
|
||||||
)
|
|
||||||
end
|
|
||||||
function button:update()
|
function button:update()
|
||||||
local ATV=self.ATV
|
local ATV=self.ATV
|
||||||
if WIDGET.sel==self then
|
if WIDGET.sel==self then
|
||||||
@@ -149,39 +159,39 @@ function button:draw()
|
|||||||
local ATV=self.ATV
|
local ATV=self.ATV
|
||||||
local c=self.color
|
local c=self.color
|
||||||
local r,g,b=c[1],c[2],c[3]
|
local r,g,b=c[1],c[2],c[3]
|
||||||
gc.setColor(.2+r*.8,.2+g*.8,.2+b*.8,.7)
|
gc_setColor(.2+r*.8,.2+g*.8,.2+b*.8,.7)
|
||||||
gc.rectangle('fill',x-ATV,y-ATV,w+2*ATV,h+2*ATV)
|
gc_rectangle('fill',x-ATV,y-ATV,w+2*ATV,h+2*ATV)
|
||||||
if ATV>0 then
|
if ATV>0 then
|
||||||
gc.setLineWidth(4)
|
gc_setLineWidth(4)
|
||||||
gc.setColor(1,1,1,ATV*.125)
|
gc_setColor(1,1,1,ATV*.125)
|
||||||
gc.rectangle('line',x-ATV+2,y-ATV+2,w+2*ATV-4,h+2*ATV-4)
|
gc_rectangle('line',x-ATV+2,y-ATV+2,w+2*ATV-4,h+2*ATV-4)
|
||||||
end
|
end
|
||||||
local obj=self.obj
|
local obj=self.obj
|
||||||
local y0=y+h*.5-ATV*.5
|
local y0=y+h*.5-ATV*.5
|
||||||
gc.setColor(1,1,1,.2+ATV*.05)
|
gc_setColor(1,1,1,.2+ATV*.05)
|
||||||
if self.align=='M'then
|
if self.align=='M'then
|
||||||
local x0=x+w*.5
|
local x0=x+w*.5
|
||||||
mDraw(obj,x0-2,y0-2)
|
mDraw(obj,x0-1.5,y0-1.5)
|
||||||
mDraw(obj,x0-2,y0+2)
|
mDraw(obj,x0-1.5,y0+1.5)
|
||||||
mDraw(obj,x0+2,y0-2)
|
mDraw(obj,x0+1.5,y0-1.5)
|
||||||
mDraw(obj,x0+2,y0+2)
|
mDraw(obj,x0+1.5,y0+1.5)
|
||||||
gc.setColor(r*.5,g*.5,b*.5)
|
gc_setColor(r*.5,g*.5,b*.5)
|
||||||
mDraw(obj,x0,y0)
|
mDraw(obj,x0,y0)
|
||||||
elseif self.align=='L'then
|
elseif self.align=='L'then
|
||||||
local edge=self.edge
|
local edge=self.edge
|
||||||
mDraw_Y(obj,x+edge-2,y0-2)
|
mDraw_Y(obj,x+edge-1.5,y0-1.5)
|
||||||
mDraw_Y(obj,x+edge-2,y0+2)
|
mDraw_Y(obj,x+edge-1.5,y0+1.5)
|
||||||
mDraw_Y(obj,x+edge+2,y0-2)
|
mDraw_Y(obj,x+edge+1.5,y0-1.5)
|
||||||
mDraw_Y(obj,x+edge+2,y0+2)
|
mDraw_Y(obj,x+edge+1.5,y0+1.5)
|
||||||
gc.setColor(r*.5,g*.5,b*.5)
|
gc_setColor(r*.5,g*.5,b*.5)
|
||||||
mDraw_Y(obj,x+edge,y0)
|
mDraw_Y(obj,x+edge,y0)
|
||||||
elseif self.align=='R'then
|
elseif self.align=='R'then
|
||||||
local x0=x+w-self.edge-obj:getWidth()
|
local x0=x+w-self.edge-obj:getWidth()
|
||||||
mDraw_Y(obj,x0-2,y0-2)
|
mDraw_Y(obj,x0-1.5,y0-1.5)
|
||||||
mDraw_Y(obj,x0-2,y0+2)
|
mDraw_Y(obj,x0-1.5,y0+1.5)
|
||||||
mDraw_Y(obj,x0+2,y0-2)
|
mDraw_Y(obj,x0+1.5,y0-1.5)
|
||||||
mDraw_Y(obj,x0+2,y0+2)
|
mDraw_Y(obj,x0+1.5,y0+1.5)
|
||||||
gc.setColor(r*.5,g*.5,b*.5)
|
gc_setColor(r*.5,g*.5,b*.5)
|
||||||
mDraw_Y(obj,x0,y0)
|
mDraw_Y(obj,x0,y0)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
@@ -190,10 +200,17 @@ function button:getInfo()
|
|||||||
end
|
end
|
||||||
function button:press(_,_,k)
|
function button:press(_,_,k)
|
||||||
self.code(k)
|
self.code(k)
|
||||||
self:FX()
|
local ATV=self.ATV
|
||||||
|
SYSFX.newRectRipple(
|
||||||
|
6,
|
||||||
|
self.x-ATV,
|
||||||
|
self.y-ATV-WIDGET.scrollPos,
|
||||||
|
self.w+2*ATV,
|
||||||
|
self.h+2*ATV
|
||||||
|
)
|
||||||
if self.sound then SFX.play('button')end
|
if self.sound then SFX.play('button')end
|
||||||
end
|
end
|
||||||
function WIDGET.newButton(D)--name,x,y,w[,h][,fText][,color][,font=30][,sound=true][,align='M'][,edge=0],code[,hide]
|
function WIDGET.newButton(D)--name,x,y,w[,h][,fText][,color][,font=30][,sound=true][,align='M'][,edge=0],code[,hideF][,hide]
|
||||||
if not D.h then D.h=D.w end
|
if not D.h then D.h=D.w end
|
||||||
local _={
|
local _={
|
||||||
name= D.name,
|
name= D.name,
|
||||||
@@ -218,6 +235,7 @@ function WIDGET.newButton(D)--name,x,y,w[,h][,fText][,color][,font=30][,sound=tr
|
|||||||
edge= D.edge or 0,
|
edge= D.edge or 0,
|
||||||
sound= D.sound~=false,
|
sound= D.sound~=false,
|
||||||
code= D.code,
|
code= D.code,
|
||||||
|
hideF= D.hideF,
|
||||||
hide= D.hide,
|
hide= D.hide,
|
||||||
}
|
}
|
||||||
for k,v in next,button do _[k]=v end
|
for k,v in next,button do _[k]=v end
|
||||||
@@ -264,14 +282,14 @@ function key:draw()
|
|||||||
local c=self.color
|
local c=self.color
|
||||||
local r,g,b=c[1],c[2],c[3]
|
local r,g,b=c[1],c[2],c[3]
|
||||||
|
|
||||||
gc.setColor(1,1,1,ATV*.125)
|
gc_setColor(1,1,1,ATV*.1)
|
||||||
gc.rectangle('fill',x,y,w,h)
|
gc_rectangle('fill',x,y,w,h)
|
||||||
|
|
||||||
gc.setColor(.2+r*.8,.2+g*.8,.2+b*.8,.7)
|
gc_setColor(.2+r*.8,.2+g*.8,.2+b*.8,.7)
|
||||||
gc.setLineWidth(4)
|
gc_setLineWidth(4)
|
||||||
gc.rectangle('line',x,y,w,h)
|
gc_rectangle('line',x,y,w,h)
|
||||||
|
|
||||||
gc.setColor(r,g,b,1.2)
|
gc_setColor(r,g,b,1.2)
|
||||||
if self.align=='M'then
|
if self.align=='M'then
|
||||||
mDraw(self.obj,x+w*.5,y+h*.5)
|
mDraw(self.obj,x+w*.5,y+h*.5)
|
||||||
elseif self.align=='L'then
|
elseif self.align=='L'then
|
||||||
@@ -287,7 +305,7 @@ function key:press(_,_,k)
|
|||||||
self.code(k)
|
self.code(k)
|
||||||
if self.sound then SFX.play('key')end
|
if self.sound then SFX.play('key')end
|
||||||
end
|
end
|
||||||
function WIDGET.newKey(D)--name,x,y,w[,h][,fText][,color][,font=30][,sound=true][,align='M'][,edge=0],code[,hide]
|
function WIDGET.newKey(D)--name,x,y,w[,h][,fText][,color][,font=30][,sound=true][,align='M'][,edge=0],code[,hideF][,hide]
|
||||||
if not D.h then D.h=D.w end
|
if not D.h then D.h=D.w end
|
||||||
local _={
|
local _={
|
||||||
name= D.name,
|
name= D.name,
|
||||||
@@ -312,6 +330,7 @@ function WIDGET.newKey(D)--name,x,y,w[,h][,fText][,color][,font=30][,sound=true]
|
|||||||
align= D.align or'M',
|
align= D.align or'M',
|
||||||
edge= D.edge or 0,
|
edge= D.edge or 0,
|
||||||
code= D.code,
|
code= D.code,
|
||||||
|
hideF= D.hideF,
|
||||||
hide= D.hide,
|
hide= D.hide,
|
||||||
}
|
}
|
||||||
for k,v in next,key do _[k]=v end
|
for k,v in next,key do _[k]=v end
|
||||||
@@ -351,22 +370,22 @@ function switch:draw()
|
|||||||
|
|
||||||
--Checked
|
--Checked
|
||||||
if ATV>0 then
|
if ATV>0 then
|
||||||
gc.setColor(1,1,1,ATV*.08)
|
gc_setColor(1,1,1,ATV*.08)
|
||||||
gc.rectangle('fill',x,y,50,50)
|
gc_rectangle('fill',x,y,50,50)
|
||||||
end
|
end
|
||||||
if self.CHK>0 then
|
if self.CHK>0 then
|
||||||
gc.setColor(.9,1,.9,self.CHK/6)
|
gc_setColor(.9,1,.9,self.CHK/6)
|
||||||
gc.setLineWidth(6)
|
gc_setLineWidth(6)
|
||||||
gc.line(x+5,y+25,x+18,y+38,x+45,y+11)
|
gc_line(x+5,y+25,x+18,y+38,x+45,y+11)
|
||||||
end
|
end
|
||||||
|
|
||||||
--Frame
|
--Frame
|
||||||
gc.setLineWidth(4)
|
gc_setLineWidth(4)
|
||||||
gc.setColor(1,1,1,.6+ATV*.05)
|
gc_setColor(1,1,1,.6+ATV*.05)
|
||||||
gc.rectangle('line',x,y,50,50)
|
gc_rectangle('line',x,y,50,50)
|
||||||
|
|
||||||
--Drawable
|
--Drawable
|
||||||
gc.setColor(self.color)
|
gc_setColor(self.color)
|
||||||
mDraw_Y(self.obj,x-12-ATV-self.obj:getWidth(),y+25)
|
mDraw_Y(self.obj,x-12-ATV-self.obj:getWidth(),y+25)
|
||||||
end
|
end
|
||||||
function switch:getInfo()
|
function switch:getInfo()
|
||||||
@@ -393,6 +412,7 @@ function WIDGET.newSwitch(D)--name,x,y[,fText][,color][,font=30][,sound=true][,d
|
|||||||
sound= D.sound~=false,
|
sound= D.sound~=false,
|
||||||
disp= D.disp,
|
disp= D.disp,
|
||||||
code= D.code,
|
code= D.code,
|
||||||
|
hideF= D.hideF,
|
||||||
hide= D.hide,
|
hide= D.hide,
|
||||||
}
|
}
|
||||||
for k,v in next,switch do _[k]=v end
|
for k,v in next,switch do _[k]=v end
|
||||||
@@ -446,7 +466,7 @@ function slider:update()
|
|||||||
self.ATV=atv
|
self.ATV=atv
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
if not(self.hide==true or self.hide and self.hide())then
|
if not self.hide then
|
||||||
self.pos=self.pos*.7+self.disp()*.3
|
self.pos=self.pos*.7+self.disp()*.3
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
@@ -455,41 +475,41 @@ function slider:draw()
|
|||||||
local ATV=self.ATV
|
local ATV=self.ATV
|
||||||
local x2=x+self.w
|
local x2=x+self.w
|
||||||
|
|
||||||
gc.setColor(1,1,1,.5+ATV*.06)
|
gc_setColor(1,1,1,.5+ATV*.06)
|
||||||
|
|
||||||
--Units
|
--Units
|
||||||
if not self.smooth then
|
if not self.smooth then
|
||||||
gc.setLineWidth(2)
|
gc_setLineWidth(2)
|
||||||
for p=0,self.unit do
|
for p=0,self.unit do
|
||||||
local X=x+(x2-x)*p/self.unit
|
local X=x+(x2-x)*p/self.unit
|
||||||
gc.line(X,y+7,X,y-7)
|
gc_line(X,y+7,X,y-7)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
--Axis
|
--Axis
|
||||||
gc.setLineWidth(4)
|
gc_setLineWidth(4)
|
||||||
gc.line(x,y,x2,y)
|
gc_line(x,y,x2,y)
|
||||||
|
|
||||||
--Block
|
--Block
|
||||||
local cx=x+(x2-x)*self.pos/self.unit
|
local cx=x+(x2-x)*self.pos/self.unit
|
||||||
local bx,by,bw,bh=cx-10-ATV*.5,y-16-ATV,20+ATV,32+2*ATV
|
local bx,by,bw,bh=cx-10-ATV*.5,y-16-ATV,20+ATV,32+2*ATV
|
||||||
gc.setColor(.8,.8,.8)
|
gc_setColor(.8,.8,.8)
|
||||||
gc.rectangle('fill',bx,by,bw,bh)
|
gc_rectangle('fill',bx,by,bw,bh)
|
||||||
|
|
||||||
if ATV>0 then
|
if ATV>0 then
|
||||||
gc.setLineWidth(2)
|
gc_setLineWidth(2)
|
||||||
gc.setColor(1,1,1,ATV*.16)
|
gc_setColor(1,1,1,ATV*.16)
|
||||||
gc.rectangle('line',bx+1,by+1,bw-2,bh-2)
|
gc_rectangle('line',bx+1,by+1,bw-2,bh-2)
|
||||||
end
|
end
|
||||||
if self.TAT>0 and self.show then
|
if self.TAT>0 and self.show then
|
||||||
setFont(25)
|
setFont(25)
|
||||||
gc.setColor(1,1,1,self.TAT/180)
|
gc_setColor(1,1,1,self.TAT/180)
|
||||||
mStr(self:show(),cx,by-30)
|
mStr(self:show(),cx,by-30)
|
||||||
end
|
end
|
||||||
|
|
||||||
--Drawable
|
--Drawable
|
||||||
if self.obj then
|
if self.obj then
|
||||||
gc.setColor(self.color)
|
gc_setColor(self.color)
|
||||||
mDraw_Y(self.obj,x-12-ATV-self.obj:getWidth(),y)
|
mDraw_Y(self.obj,x-12-ATV-self.obj:getWidth(),y)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
@@ -510,14 +530,14 @@ function slider:drag(x)
|
|||||||
if p~=P then
|
if p~=P then
|
||||||
self.code(P)
|
self.code(P)
|
||||||
end
|
end
|
||||||
if self.change and TIME()-self.lastTime>.18 then
|
if self.change and TIME()-self.lastTime>.26 then
|
||||||
self.lastTime=TIME()
|
self.lastTime=TIME()
|
||||||
self.change()
|
self.change()
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
function slider:release(x)
|
function slider:release(x)
|
||||||
self.lastTime=0
|
|
||||||
self:drag(x)
|
self:drag(x)
|
||||||
|
self.lastTime=0
|
||||||
end
|
end
|
||||||
function slider:arrowKey(isLeft)
|
function slider:arrowKey(isLeft)
|
||||||
local p=self.disp()
|
local p=self.disp()
|
||||||
@@ -554,6 +574,7 @@ function WIDGET.newSlider(D)--name,x,y,w[,fText][,color][,unit][,smooth][,font=3
|
|||||||
change= D.change,
|
change= D.change,
|
||||||
disp= D.disp,
|
disp= D.disp,
|
||||||
code= D.code,
|
code= D.code,
|
||||||
|
hideF= D.hideF,
|
||||||
hide= D.hide,
|
hide= D.hide,
|
||||||
show= false,
|
show= false,
|
||||||
}
|
}
|
||||||
@@ -589,18 +610,16 @@ local selector={
|
|||||||
}
|
}
|
||||||
function selector:reset()
|
function selector:reset()
|
||||||
self.ATV=0
|
self.ATV=0
|
||||||
local V=self.disp()
|
local V,L=self.disp(),self.list
|
||||||
local L=self.list
|
local i=TABLE.find(L,V)
|
||||||
for i=1,#L do
|
if i then
|
||||||
if L[i]==V then
|
|
||||||
self.select=i
|
self.select=i
|
||||||
self.selText=self.list[i]
|
self.selText=self.list[i]
|
||||||
return
|
else
|
||||||
end
|
|
||||||
end
|
|
||||||
self.hide=true
|
self.hide=true
|
||||||
LOG.print("Selector "..self.name.." dead, disp= "..tostring(V),'warn')
|
LOG.print("Selector "..self.name.." dead, disp= "..tostring(V),'warn')
|
||||||
end
|
end
|
||||||
|
end
|
||||||
function selector:isAbove(x,y)
|
function selector:isAbove(x,y)
|
||||||
return
|
return
|
||||||
x>self.x and
|
x>self.x and
|
||||||
@@ -628,32 +647,32 @@ function selector:draw()
|
|||||||
local w=self.w
|
local w=self.w
|
||||||
local ATV=self.ATV
|
local ATV=self.ATV
|
||||||
|
|
||||||
gc.setColor(1,1,1,.6+ATV*.1)
|
gc_setColor(1,1,1,.6+ATV*.1)
|
||||||
gc.setLineWidth(3)
|
gc_setLineWidth(3)
|
||||||
gc.rectangle('line',x,y,w,60)
|
gc_rectangle('line',x,y,w,60)
|
||||||
|
|
||||||
gc.setColor(1,1,1,.2+ATV*.1)
|
gc_setColor(1,1,1,.2+ATV*.1)
|
||||||
local t=(TIME()%.5)^.5
|
local t=(TIME()%.5)^.5
|
||||||
if self.select>1 then
|
if self.select>1 then
|
||||||
gc.draw(drawableText.small,x+6,y+20)
|
gc_draw(smallerThen,x+6,y+33)
|
||||||
if ATV>0 then
|
if ATV>0 then
|
||||||
gc.setColor(1,1,1,ATV*.4*(.5-t))
|
gc_setColor(1,1,1,ATV*.4*(.5-t))
|
||||||
gc.draw(drawableText.small,x+6-t*40,y+20)
|
gc_draw(smallerThen,x+6-t*40,y+33)
|
||||||
gc.setColor(1,1,1,.2+ATV*.1)
|
gc_setColor(1,1,1,.2+ATV*.1)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
if self.select<#self.list then
|
if self.select<#self.list then
|
||||||
gc.draw(drawableText.large,x+w-24,y+20)
|
gc_draw(largerThen,x+w-26,y+33)
|
||||||
if ATV>0 then
|
if ATV>0 then
|
||||||
gc.setColor(1,1,1,ATV*.4*(.5-t))
|
gc_setColor(1,1,1,ATV*.4*(.5-t))
|
||||||
gc.draw(drawableText.large,x+w-24+t*40,y+20)
|
gc_draw(largerThen,x+w-26+t*40,y+33)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
--Drawable
|
--Drawable
|
||||||
gc.setColor(self.color)
|
gc_setColor(self.color)
|
||||||
ADRAW.simpX(self.obj,x+w*.5,y+17-21)
|
ADRAW.simpX(self.obj,x+w*.5,y+17-21)
|
||||||
gc.setColor(1,1,1)
|
gc_setColor(1,1,1)
|
||||||
setFont(30)
|
setFont(30)
|
||||||
mStr(self.selText,x+w*.5,y+43-21)
|
mStr(self.selText,x+w*.5,y+43-21)
|
||||||
end
|
end
|
||||||
@@ -666,12 +685,12 @@ function selector:press(x)
|
|||||||
if x<self.x+self.w*.5 then
|
if x<self.x+self.w*.5 then
|
||||||
if s>1 then
|
if s>1 then
|
||||||
s=s-1
|
s=s-1
|
||||||
SYSFX.newShade(3,self.x,self.y,self.w*.5,60)
|
SYSFX.newShade(3,self.x,self.y-WIDGET.scrollPos,self.w*.5,60)
|
||||||
end
|
end
|
||||||
else
|
else
|
||||||
if s<#self.list then
|
if s<#self.list then
|
||||||
s=s+1
|
s=s+1
|
||||||
SYSFX.newShade(3,self.x+self.w*.5,self.y,self.w*.5,60)
|
SYSFX.newShade(3,self.x+self.w*.5,self.y-WIDGET.scrollPos,self.w*.5,60)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
if self.select~=s then
|
if self.select~=s then
|
||||||
@@ -687,10 +706,10 @@ function selector:arrowKey(isLeft)
|
|||||||
if isLeft and s==1 or not isLeft and s==#self.list then return end
|
if isLeft and s==1 or not isLeft and s==#self.list then return end
|
||||||
if isLeft then
|
if isLeft then
|
||||||
s=s-1
|
s=s-1
|
||||||
SYSFX.newShade(3,self.x,self.y,self.w*.5,60)
|
SYSFX.newShade(3,self.x,self.y-WIDGET.scrollPos,self.w*.5,60)
|
||||||
else
|
else
|
||||||
s=s+1
|
s=s+1
|
||||||
SYSFX.newShade(3,self.x+self.w*.5,self.y,self.w*.5,60)
|
SYSFX.newShade(3,self.x+self.w*.5,self.y-WIDGET.scrollPos,self.w*.5,60)
|
||||||
end
|
end
|
||||||
self.code(self.list[s])
|
self.code(self.list[s])
|
||||||
self.select=s
|
self.select=s
|
||||||
@@ -720,6 +739,7 @@ function WIDGET.newSelector(D)--name,x,y,w[,fText][,color][,sound=true],list,dis
|
|||||||
list= D.list,
|
list= D.list,
|
||||||
disp= D.disp,
|
disp= D.disp,
|
||||||
code= D.code,
|
code= D.code,
|
||||||
|
hideF= D.hideF,
|
||||||
hide= D.hide,
|
hide= D.hide,
|
||||||
}
|
}
|
||||||
for k,v in next,selector do _[k]=v end
|
for k,v in next,selector do _[k]=v end
|
||||||
@@ -735,8 +755,23 @@ local inputBox={
|
|||||||
}
|
}
|
||||||
function inputBox:reset()
|
function inputBox:reset()
|
||||||
self.ATV=0
|
self.ATV=0
|
||||||
if not MOBILE then
|
end
|
||||||
kb.setTextInput(true)
|
function inputBox:hasText()
|
||||||
|
return #self.value>0
|
||||||
|
end
|
||||||
|
function inputBox:getText()
|
||||||
|
return self.value
|
||||||
|
end
|
||||||
|
function inputBox:setText(str)
|
||||||
|
if type(str)=='string'then
|
||||||
|
self.value=str
|
||||||
|
end
|
||||||
|
end
|
||||||
|
function inputBox:addText(str)
|
||||||
|
if type(str)=='string'then
|
||||||
|
self.value=self.value..str
|
||||||
|
else
|
||||||
|
LOG.print("inputBox "..self.name.." dead, addText("..type(str)..")",'warn')
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
function inputBox:clear()
|
function inputBox:clear()
|
||||||
@@ -764,12 +799,12 @@ function inputBox:draw()
|
|||||||
local x,y,w,h=self.x,self.y,self.w,self.h
|
local x,y,w,h=self.x,self.y,self.w,self.h
|
||||||
local ATV=self.ATV
|
local ATV=self.ATV
|
||||||
|
|
||||||
gc.setColor(1,1,1,ATV*.1)
|
gc_setColor(1,1,1,ATV*.1)
|
||||||
gc.rectangle('fill',x,y,w,h)
|
gc_rectangle('fill',x,y,w,h)
|
||||||
|
|
||||||
gc.setColor(1,1,1)
|
gc_setColor(1,1,1)
|
||||||
gc.setLineWidth(4)
|
gc_setLineWidth(4)
|
||||||
gc.rectangle('line',x,y,w,h)
|
gc_rectangle('line',x,y,w,h)
|
||||||
|
|
||||||
--Drawable
|
--Drawable
|
||||||
setFont(self.font)
|
setFont(self.font)
|
||||||
@@ -778,13 +813,13 @@ function inputBox:draw()
|
|||||||
end
|
end
|
||||||
if self.secret then
|
if self.secret then
|
||||||
for i=1,#self.value do
|
for i=1,#self.value do
|
||||||
gc.print("*",x-5+self.font*.5*i,y+h*.5-self.font*.7)
|
gc_print("*",x-5+self.font*.5*i,y+h*.5-self.font*.7)
|
||||||
end
|
end
|
||||||
else
|
else
|
||||||
gc.printf(self.value,x+10,y,self.w)
|
gc_printf(self.value,x+10,y,self.w)
|
||||||
setFont(self.font-10)
|
setFont(self.font-10)
|
||||||
if WIDGET.sel==self then
|
if WIDGET.sel==self then
|
||||||
gc.print(EDITING,x+10,y+12-self.font*1.4)
|
gc_print(EDITING,x+10,y+12-self.font*1.4)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
@@ -793,7 +828,7 @@ function inputBox:getInfo()
|
|||||||
end
|
end
|
||||||
function inputBox:press()
|
function inputBox:press()
|
||||||
if MOBILE then
|
if MOBILE then
|
||||||
local _,y1=SCR.xOy:transformPoint(0,self.y+self.h)
|
local _,y1=xOy:transformPoint(0,self.y+self.h)
|
||||||
kb.setTextInput(true,0,y1,1,1)
|
kb.setTextInput(true,0,y1,1,1)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
@@ -832,6 +867,7 @@ function WIDGET.newInputBox(D)--name,x,y,w[,h][,font=30][,secret][,regex],hide
|
|||||||
font= D.font or int(D.h/7-1)*5,
|
font= D.font or int(D.h/7-1)*5,
|
||||||
secret= D.secret==true,
|
secret= D.secret==true,
|
||||||
regex= D.regex,
|
regex= D.regex,
|
||||||
|
hideF= D.hideF,
|
||||||
hide= D.hide,
|
hide= D.hide,
|
||||||
}
|
}
|
||||||
for k,v in next,inputBox do _[k]=v end
|
for k,v in next,inputBox do _[k]=v end
|
||||||
@@ -871,13 +907,14 @@ function textBox:update()
|
|||||||
end
|
end
|
||||||
function textBox:push(t)
|
function textBox:push(t)
|
||||||
ins(self.texts,t)
|
ins(self.texts,t)
|
||||||
if self.scrollPos==#self.texts-1 and not(self.hide==true or self.hide and self.hide())then
|
if self.scrollPos==#self.texts-1 then
|
||||||
self.scrollPos=#self.texts
|
self.scrollPos=#self.texts
|
||||||
else
|
else
|
||||||
self.new=true
|
self.new=true
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
function textBox:press(x,y)
|
function textBox:press(x,y)
|
||||||
|
if not(x and y)then return end
|
||||||
self:drag(nil,nil,nil,0)
|
self:drag(nil,nil,nil,0)
|
||||||
if not self.fix and x>self.x+self.w-40 and y<self.y+40 then
|
if not self.fix and x>self.x+self.w-40 and y<self.y+40 then
|
||||||
if self.sure>0 then
|
if self.sure>0 then
|
||||||
@@ -890,7 +927,7 @@ function textBox:press(x,y)
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
function textBox:drag(_,_,_,dy)
|
function textBox:drag(_,_,_,dy)
|
||||||
_=self.scrollPix+dy*SCR.dpi
|
_=self.scrollPix+dy
|
||||||
local sign=_>0 and 1 or -1
|
local sign=_>0 and 1 or -1
|
||||||
while abs(_)>30 do
|
while abs(_)>30 do
|
||||||
_=_-30*sign
|
_=_-30*sign
|
||||||
@@ -923,39 +960,39 @@ function textBox:draw()
|
|||||||
end
|
end
|
||||||
|
|
||||||
--Background
|
--Background
|
||||||
gc.setColor(0,0,0,.3)
|
gc_setColor(0,0,0,.4)
|
||||||
gc.rectangle('fill',x,y,w,h)
|
gc_rectangle('fill',x,y,w,h)
|
||||||
|
|
||||||
--Frame
|
--Frame
|
||||||
gc.setLineWidth(4)
|
gc_setLineWidth(4)
|
||||||
gc.setColor(1,1,WIDGET.sel==self and 0 or 1)
|
gc_setColor(1,1,WIDGET.sel==self and .8 or 1)
|
||||||
gc.rectangle('line',x,y,w,h)
|
gc_rectangle('line',x,y,w,h)
|
||||||
|
|
||||||
--Slider
|
--Slider
|
||||||
if #texts>cap then
|
if #texts>cap then
|
||||||
gc.setLineWidth(2)
|
gc_setLineWidth(2)
|
||||||
gc.rectangle('line',x-25,y,20,h)
|
gc_rectangle('line',x-25,y,20,h)
|
||||||
local len=max(h*cap/#texts,26)
|
local len=max(h*cap/#texts,26)
|
||||||
gc.rectangle('fill',x-22,y+(h-len-6)*(scroll-cap)/(#texts-cap)+3,14,len)
|
gc_rectangle('fill',x-22,y+(h-len-6)*(scroll-cap)/(#texts-cap)+3,14,len)
|
||||||
end
|
end
|
||||||
|
|
||||||
--Clear button
|
--Clear button
|
||||||
gc.setColor(1,1,1)
|
gc_setColor(1,1,1)
|
||||||
if not self.fix then
|
if not self.fix then
|
||||||
gc.rectangle('line',x+w-40,y,40,40)
|
gc_rectangle('line',x+w-40,y,40,40)
|
||||||
gc.draw(self.sure==0 and clearIcon or sureIcon,x+w-40,y)
|
gc_draw(self.sure==0 and clearIcon or sureIcon,x+w-40,y)
|
||||||
end
|
end
|
||||||
|
|
||||||
--Texts
|
--Texts
|
||||||
setFont(self.font)
|
setFont(self.font)
|
||||||
for i=max(scroll-cap+1,1),scroll do
|
for i=max(scroll-cap+1,1),scroll do
|
||||||
gc.printf(texts[i],x+8,y+h-10-self.lineH*(scroll-i+1),w)
|
gc_printf(texts[i],x+8,y+h-10-self.lineH*(scroll-i+1),w)
|
||||||
end
|
end
|
||||||
|
|
||||||
--New message
|
--New message
|
||||||
if self.new and self.scrollPos~=#texts then
|
if self.new and self.scrollPos~=#texts then
|
||||||
gc.setColor(1,TIME()%.4<.2 and 1 or 0,0)
|
gc_setColor(1,TIME()%.4<.2 and 1 or 0,0)
|
||||||
gc.print("v",x+w-25,y+h-40)
|
gc_print("v",x+w-25,y+h-40)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
function textBox:getInfo()
|
function textBox:getInfo()
|
||||||
@@ -985,6 +1022,7 @@ function WIDGET.newTextBox(D)--name,x,y,w,h[,font=30][,lineH][,fix],hide
|
|||||||
font= D.font or 30,
|
font= D.font or 30,
|
||||||
fix= D.fix,
|
fix= D.fix,
|
||||||
texts= {},
|
texts= {},
|
||||||
|
hideF= D.hideF,
|
||||||
hide= D.hide,
|
hide= D.hide,
|
||||||
}
|
}
|
||||||
_.lineH=D.lineH or _.font*7/5
|
_.lineH=D.lineH or _.font*7/5
|
||||||
@@ -996,8 +1034,9 @@ function WIDGET.newTextBox(D)--name,x,y,w,h[,font=30][,lineH][,fix],hide
|
|||||||
end
|
end
|
||||||
|
|
||||||
WIDGET.active={}--Table contains all active widgets
|
WIDGET.active={}--Table contains all active widgets
|
||||||
|
WIDGET.scrollHeight=0--Max drag height, not actual container height!
|
||||||
|
WIDGET.scrollPos=0--Current scroll position
|
||||||
WIDGET.sel=false--Selected widget
|
WIDGET.sel=false--Selected widget
|
||||||
|
|
||||||
WIDGET.indexMeta={
|
WIDGET.indexMeta={
|
||||||
__index=function(L,k)
|
__index=function(L,k)
|
||||||
for i=1,#L do
|
for i=1,#L do
|
||||||
@@ -1007,9 +1046,8 @@ WIDGET.indexMeta={
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
}
|
}
|
||||||
function WIDGET.set(list)
|
function WIDGET.setWidgetList(list)
|
||||||
kb.setTextInput(false)
|
WIDGET.unFocus()
|
||||||
WIDGET.sel=false
|
|
||||||
WIDGET.active=list or NONE
|
WIDGET.active=list or NONE
|
||||||
|
|
||||||
--Reset all widgets
|
--Reset all widgets
|
||||||
@@ -1029,6 +1067,10 @@ function WIDGET.set(list)
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
function WIDGET.setScrollHeight(height)
|
||||||
|
WIDGET.scrollHeight=height and height or 0
|
||||||
|
WIDGET.scrollPos=0
|
||||||
|
end
|
||||||
function WIDGET.setLang(widgetText)
|
function WIDGET.setLang(widgetText)
|
||||||
for S,L in next,SCN.scenes do
|
for S,L in next,SCN.scenes do
|
||||||
if L.widgetList then
|
if L.widgetList then
|
||||||
@@ -1046,60 +1088,81 @@ function WIDGET.setLang(widgetText)
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
function WIDGET.isFocus(W)
|
||||||
|
return W==nil and WIDGET.sel or WIDGET.sel==W
|
||||||
|
end
|
||||||
|
function WIDGET.focus(W)
|
||||||
|
if WIDGET.sel==W then return end
|
||||||
|
if WIDGET.sel and WIDGET.sel.type=='inputBox'then kb.setTextInput(false)end
|
||||||
|
WIDGET.sel=W
|
||||||
|
if W and W.type=='inputBox'then
|
||||||
|
local _,y1=xOy:transformPoint(0,W.y+W.h)
|
||||||
|
kb.setTextInput(true,0,y1,1,1)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
function WIDGET.unFocus(force)
|
||||||
|
local W=WIDGET.sel
|
||||||
|
if W and(force or not W.keepFocus)then
|
||||||
|
if W.type=='inputBox'then kb.setTextInput(false)end
|
||||||
|
WIDGET.sel=false
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
function WIDGET.cursorMove(x,y)
|
function WIDGET.cursorMove(x,y)
|
||||||
for _,W in next,WIDGET.active do
|
for _,W in next,WIDGET.active do
|
||||||
if not(W.hide==true or W.hide and W.hide())and W.resCtr and W:isAbove(x,y)then
|
if not W.hide and W.resCtr and W:isAbove(x,y+WIDGET.scrollPos)then
|
||||||
WIDGET.sel=W
|
WIDGET.focus(W)
|
||||||
return
|
return
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
if WIDGET.sel and not WIDGET.sel.keepFocus then
|
if WIDGET.sel and not WIDGET.sel.keepFocus then
|
||||||
WIDGET.sel=false
|
WIDGET.unFocus()
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
function WIDGET.press(x,y,k)
|
function WIDGET.press(x,y,k)
|
||||||
local W=WIDGET.sel
|
local W=WIDGET.sel
|
||||||
if not W then return end
|
if W then
|
||||||
W:press(x,y,k)
|
W:press(x,y and y+WIDGET.scrollPos,k)
|
||||||
if W.hide==true or W.hide and W.hide()then WIDGET.sel=false end
|
if W.hide then WIDGET.unFocus()end
|
||||||
|
end
|
||||||
end
|
end
|
||||||
function WIDGET.drag(x,y,dx,dy)
|
function WIDGET.drag(x,y,dx,dy)
|
||||||
|
if WIDGET.sel then
|
||||||
local W=WIDGET.sel
|
local W=WIDGET.sel
|
||||||
if not W then return end
|
|
||||||
if W.type=='slider'or W.type=='textBox'then
|
if W.type=='slider'or W.type=='textBox'then
|
||||||
W:drag(x,y,dx,dy)
|
W:drag(x,y+WIDGET.scrollPos,dx,dy)
|
||||||
elseif not W:isAbove(x,y)then
|
elseif not W:isAbove(x,y)then
|
||||||
WIDGET.sel=false
|
WIDGET.unFocus(true)
|
||||||
|
end
|
||||||
|
else
|
||||||
|
WIDGET.scrollPos=max(min(WIDGET.scrollPos-dy,WIDGET.scrollHeight),0)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
function WIDGET.release(x,y)
|
function WIDGET.release(x,y)
|
||||||
local W=WIDGET.sel
|
local W=WIDGET.sel
|
||||||
if not W then return end
|
if W and W.type=='slider'then
|
||||||
if W.type=='slider'then
|
W:release(x,y+WIDGET.scrollPos)
|
||||||
W:release(x,y)
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
function WIDGET.keyPressed(k)
|
function WIDGET.keyPressed(k)
|
||||||
|
local W=WIDGET.sel
|
||||||
if k=="space"or k=="return"then
|
if k=="space"or k=="return"then
|
||||||
WIDGET.press()
|
WIDGET.press()
|
||||||
elseif kb.isDown("lshift","lalt","lctrl")and(k=="left"or k=="right")then
|
elseif kb.isDown("lshift","lalt","lctrl")and(k=="left"or k=="right")then
|
||||||
--When hold [↑], control slider with left/right
|
--When hold [↑], control slider with left/right
|
||||||
local W=WIDGET.sel
|
|
||||||
if W and W.type=='slider'or W.type=='selector'then
|
if W and W.type=='slider'or W.type=='selector'then
|
||||||
W:arrowKey(k=="left")
|
W:arrowKey(k=="left")
|
||||||
end
|
end
|
||||||
elseif k=="up"or k=="down"or k=="left"or k=="right"then
|
elseif k=="up"or k=="down"or k=="left"or k=="right"then
|
||||||
if not WIDGET.sel then
|
if not W then
|
||||||
for _,W in next,WIDGET.active do
|
for _,w in next,WIDGET.active do
|
||||||
if not(W.hide==true or W.hide and W.hide())and W.isAbove then
|
if not w.hide and w.isAbove then
|
||||||
WIDGET.sel=W
|
WIDGET.focus(w)
|
||||||
return
|
return
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
return
|
return
|
||||||
end
|
end
|
||||||
local W=WIDGET.sel
|
|
||||||
if not W.getCenter then return end
|
if not W.getCenter then return end
|
||||||
local WX,WY=W:getCenter()
|
local WX,WY=W:getCenter()
|
||||||
local dir=(k=="right"or k=="down")and 1 or -1
|
local dir=(k=="right"or k=="down")and 1 or -1
|
||||||
@@ -1108,7 +1171,7 @@ function WIDGET.keyPressed(k)
|
|||||||
local swap_xy=k=="up"or k=="down"
|
local swap_xy=k=="up"or k=="down"
|
||||||
if swap_xy then WX,WY=WY,WX end -- note that we do not swap them back later
|
if swap_xy then WX,WY=WY,WX end -- note that we do not swap them back later
|
||||||
for _,W1 in ipairs(WIDGET.active)do
|
for _,W1 in ipairs(WIDGET.active)do
|
||||||
if W~=W1 and W1.resCtr and not(W1.hide==true or W1.hide and W1.hide())then
|
if W~=W1 and W1.resCtr and not W1.hide then
|
||||||
local L=W1.resCtr
|
local L=W1.resCtr
|
||||||
for j=1,#L,2 do
|
for j=1,#L,2 do
|
||||||
local x,y=L[j],L[j+1]
|
local x,y=L[j],L[j+1]
|
||||||
@@ -1125,10 +1188,9 @@ function WIDGET.keyPressed(k)
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
if tar then
|
if tar then
|
||||||
WIDGET.sel=tar
|
WIDGET.focus(tar)
|
||||||
end
|
end
|
||||||
else
|
else
|
||||||
local W=WIDGET.sel
|
|
||||||
if W and W.type=='inputBox'then
|
if W and W.type=='inputBox'then
|
||||||
W:keypress(k)
|
W:keypress(k)
|
||||||
end
|
end
|
||||||
@@ -1179,15 +1241,49 @@ end
|
|||||||
|
|
||||||
function WIDGET.update()
|
function WIDGET.update()
|
||||||
for _,W in next,WIDGET.active do
|
for _,W in next,WIDGET.active do
|
||||||
|
if W.hideF then W.hide=W.hideF()end
|
||||||
if W.update then W:update()end
|
if W.update then W:update()end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
local widgetCanvas
|
||||||
|
local widgetCover do
|
||||||
|
local L={1,360,{'fRect',0,30,1,300}}
|
||||||
|
for i=0,30 do
|
||||||
|
ins(L,{'setCL',1,1,1,i/30})
|
||||||
|
ins(L,{'fRect',0,i,1,2})
|
||||||
|
ins(L,{'fRect',0,360-i,1,2})
|
||||||
|
end
|
||||||
|
widgetCover=DOGC(L)
|
||||||
|
end
|
||||||
|
local scr_w,scr_h
|
||||||
|
function WIDGET.resize(w,h)
|
||||||
|
scr_w,scr_h=w,h
|
||||||
|
widgetCanvas=gc.newCanvas(w,h)
|
||||||
|
end
|
||||||
function WIDGET.draw()
|
function WIDGET.draw()
|
||||||
|
gc_setCanvas(widgetCanvas)
|
||||||
|
gc_clear(0,0,0,0)
|
||||||
|
gc_translate(0,-WIDGET.scrollPos)
|
||||||
for _,W in next,WIDGET.active do
|
for _,W in next,WIDGET.active do
|
||||||
if not(W.hide==true or W.hide and W.hide())then
|
if not W.hide then W:draw()end
|
||||||
W:draw()
|
|
||||||
end
|
end
|
||||||
|
gc_origin()
|
||||||
|
gc_setColor(1,1,1)
|
||||||
|
if WIDGET.scrollHeight>0 then
|
||||||
|
if WIDGET.scrollPos>0 then
|
||||||
|
gc_draw(upArrowIcon,scr_w*.5,10,0,SCR.k,nil,upArrowIcon:getWidth()*.5,0)
|
||||||
end
|
end
|
||||||
|
if WIDGET.scrollPos<WIDGET.scrollHeight then
|
||||||
|
gc_draw(downArrowIcon,scr_w*.5,scr_h-10,0,SCR.k,nil,downArrowIcon:getWidth()*.5,downArrowIcon:getHeight())
|
||||||
|
end
|
||||||
|
gc_setBlendMode('multiply','premultiplied')
|
||||||
|
gc_draw(widgetCover,nil,nil,nil,scr_w,scr_h/360)
|
||||||
|
end
|
||||||
|
gc_setCanvas()
|
||||||
|
gc_setBlendMode('alpha','premultiplied')
|
||||||
|
gc_draw(widgetCanvas)
|
||||||
|
gc_setBlendMode('alpha')
|
||||||
|
gc_replaceTransform(SCR.xOy)
|
||||||
end
|
end
|
||||||
|
|
||||||
return WIDGET
|
return WIDGET
|
||||||
9
conf.lua
9
conf.lua
@@ -1,7 +1,9 @@
|
|||||||
VERSION={
|
VERSION={
|
||||||
code=1406,
|
build=333,
|
||||||
string="Alpha V0.14.6",
|
code=1503,
|
||||||
name="午 Noon",
|
short="V0.15.3",
|
||||||
|
string="Alpha V0.15.3",
|
||||||
|
name="卫星 Satellite",
|
||||||
}
|
}
|
||||||
function love.conf(t)
|
function love.conf(t)
|
||||||
t.identity='Techmino'--Saving folder
|
t.identity='Techmino'--Saving folder
|
||||||
@@ -21,7 +23,6 @@ function love.conf(t)
|
|||||||
W.minwidth,W.minheight=640,360
|
W.minwidth,W.minheight=640,360
|
||||||
W.borderless=false
|
W.borderless=false
|
||||||
W.resizable=true
|
W.resizable=true
|
||||||
W.fullscreentype='desktop'--'exclusive'
|
|
||||||
W.fullscreen=false
|
W.fullscreen=false
|
||||||
W.vsync=0--Unlimited FPS
|
W.vsync=0--Unlimited FPS
|
||||||
W.msaa=false--Num of samples to use with multi-sampled antialiasing
|
W.msaa=false--Num of samples to use with multi-sampled antialiasing
|
||||||
|
|||||||
@@ -11,11 +11,15 @@
|
|||||||
wait:出块延迟(帧)
|
wait:出块延迟(帧)
|
||||||
fall:下落延迟(帧)
|
fall:下落延迟(帧)
|
||||||
bone:是否开启骨块模式
|
bone:是否开启骨块模式
|
||||||
|
fieldH:场地高度
|
||||||
|
heightLimit:允许的最大场地高度
|
||||||
nextCount:显示next个数
|
nextCount:显示next个数
|
||||||
nextStartPos:next从第几个开始显示
|
nextStartPos:next从第几个开始显示
|
||||||
holdCount:hold个数
|
holdCount:hold个数
|
||||||
infHold:是否能无限hold
|
infHold:是否能无限hold
|
||||||
|
phyHold:是否开启物理hold
|
||||||
ospin=是否能O-spin
|
ospin=是否能O-spin
|
||||||
|
deepDrop:是否开启深降
|
||||||
RS:旋转系统名
|
RS:旋转系统名
|
||||||
|
|
||||||
das:DAS
|
das:DAS
|
||||||
@@ -57,11 +61,13 @@
|
|||||||
mission:包含任务的table,说明暂时略
|
mission:包含任务的table,说明暂时略
|
||||||
|
|
||||||
life:生命数
|
life:生命数
|
||||||
pushSpeed:上涨速度
|
garbageSpeed:垃圾行释放速度
|
||||||
|
pushSpeed:垃圾行上涨速度
|
||||||
noTele:是否禁止10个高级按键
|
noTele:是否禁止10个高级按键
|
||||||
visible:方块可见性,填写固定的几个字符串
|
visible:方块可见性,填写固定的几个字符串
|
||||||
freshLimit:锁延刷新次数限制
|
freshLimit:锁延刷新次数限制
|
||||||
easyFresh:是否使用简单锁延刷新规则
|
easyFresh:是否使用简单锁延刷新规则
|
||||||
|
bufferLimit:攻击缓冲行数上限
|
||||||
|
|
||||||
fkey1:按下功能键1后执行的函数
|
fkey1:按下功能键1后执行的函数
|
||||||
fkey2:按下功能键2后执行的函数
|
fkey2:按下功能键2后执行的函数
|
||||||
|
|||||||
@@ -11,10 +11,11 @@
|
|||||||
single, double, triple, techrash
|
single, double, triple, techrash
|
||||||
以上直接念就可以,用于普通直接消行
|
以上直接念就可以,用于普通直接消行
|
||||||
|
|
||||||
mini, b2b, b3b
|
mini, b2b, b2b2b
|
||||||
以上直接念就可以,用于组合进spin消除
|
以上直接念就可以,用于组合进spin消除
|
||||||
|
注: b2b读作back to back
|
||||||
|
|
||||||
zspin, sspin, lspin, jspin, tspin, ospin, ispin
|
[各种spin消除]
|
||||||
以上的每一个都要衍生出数条语音,例如zpin的是这五条:
|
以上的每一个都要衍生出数条语音,例如zpin的是这五条:
|
||||||
z-spin (用于不消行)
|
z-spin (用于不消行)
|
||||||
z-spin single
|
z-spin single
|
||||||
@@ -24,7 +25,6 @@
|
|||||||
(z-spin pentacrash)
|
(z-spin pentacrash)
|
||||||
(z-spin hexacrash)
|
(z-spin hexacrash)
|
||||||
对于 S L J T O I 每一个都是这样, 五种语音, 加括号的是消5和消6, 一般不用所以可以不录
|
对于 S L J T O I 每一个都是这样, 五种语音, 加括号的是消5和消6, 一般不用所以可以不录
|
||||||
|
|
||||||
另:对于P, Q, F, E, U, V, W, X, R, Y, N, H
|
另:对于P, Q, F, E, U, V, W, X, R, Y, N, H
|
||||||
这些方块也可以有上面那些语音,但由于仅在五连块使用还会显著增加语音包体积, 所以不录也可以
|
这些方块也可以有上面那些语音,但由于仅在五连块使用还会显著增加语音包体积, 所以不录也可以
|
||||||
|
|
||||||
@@ -32,10 +32,12 @@
|
|||||||
这俩可以直接念也可以略做修改
|
这俩可以直接念也可以略做修改
|
||||||
|
|
||||||
win, lose, bye
|
win, lose, bye
|
||||||
这几个可以自由发挥
|
这几个可以自由发挥, 能用在三个场合就行
|
||||||
|
|
||||||
test, happy, doubt, sad, egg
|
test, happy, doubt, sad, egg
|
||||||
第一个是拉语音条预览音量播放的, 剩下的是彩蛋音效(不录也行, 反正一般不会触发)
|
这几个是特殊音效,具体使用情况不定
|
||||||
|
第一个是测试音量用的音效,尽量短一点,长度在半秒内
|
||||||
|
其他是彩蛋音效(不录也行, 反正一般不会触发)
|
||||||
|
|
||||||
welcome_voc
|
welcome_voc
|
||||||
进入游戏播放的欢迎语音(类似osu)
|
进入游戏播放的欢迎语音(类似osu)
|
||||||
|
|||||||
101
main.lua
101
main.lua
@@ -5,7 +5,13 @@
|
|||||||
/ / / __// /__ / / / // / / / / // // / / // /_/ /
|
/ / / __// /__ / / / // / / / / // // / / // /_/ /
|
||||||
/_/ \___/ \___//_/ /_//_/ /_/ /_//_//_/ /_/ \____/
|
/_/ \___/ \___//_/ /_//_/ /_/ /_//_//_/ /_/ \____/
|
||||||
Techmino is my first "huge project"
|
Techmino is my first "huge project"
|
||||||
optimization is welcomed if you also love tetromino game
|
optimization is welcomed if you also love tetromino stacking game
|
||||||
|
|
||||||
|
Instructions:
|
||||||
|
1. I made a framework called Zframework, most code in Zframework are not directly relevant to game;
|
||||||
|
2. "xxx" are texts for reading, 'xxx' are string values just in program;
|
||||||
|
3. Some goto statement are used for better performance. All goto-labes have detailed names so don't afraid;
|
||||||
|
4. Except "gcinfo" function of lua itself, other "gc" are short for "graphics";
|
||||||
]]--
|
]]--
|
||||||
|
|
||||||
|
|
||||||
@@ -31,14 +37,12 @@ love.keyboard.setKeyRepeat(true)
|
|||||||
love.keyboard.setTextInput(false)
|
love.keyboard.setTextInput(false)
|
||||||
love.mouse.setVisible(false)
|
love.mouse.setVisible(false)
|
||||||
|
|
||||||
--Delete all files from too old version
|
--Load modules
|
||||||
function CLEAR(root)
|
require"Zframework"
|
||||||
for _,name in next,fs.getDirectoryItems(root or"")do
|
SCR.setSize(1280,720)--Initialize Screen size
|
||||||
if fs.getRealDirectory(name)==SAVEDIR and fs.getInfo(name).type~='directory'then
|
|
||||||
fs.remove(name)
|
--Delete all naked files (from too old version)
|
||||||
end
|
FILE.clear("")
|
||||||
end
|
|
||||||
end CLEAR()
|
|
||||||
|
|
||||||
--Create directories
|
--Create directories
|
||||||
for _,v in next,{"conf","record","replay","cache","lib"}do
|
for _,v in next,{"conf","record","replay","cache","lib"}do
|
||||||
@@ -51,14 +55,6 @@ for _,v in next,{"conf","record","replay","cache","lib"}do
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
--Load modules
|
|
||||||
require"Zframework"
|
|
||||||
SCR.setSize(1280,720)--Initialize Screen size
|
|
||||||
|
|
||||||
require"parts.list"
|
|
||||||
require"parts.globalTables"
|
|
||||||
require"parts.gametoolfunc"
|
|
||||||
|
|
||||||
--Load shader files from SOURCE ONLY
|
--Load shader files from SOURCE ONLY
|
||||||
SHADER={}
|
SHADER={}
|
||||||
for _,v in next,fs.getDirectoryItems("parts/shaders")do
|
for _,v in next,fs.getDirectoryItems("parts/shaders")do
|
||||||
@@ -68,6 +64,10 @@ for _,v in next,fs.getDirectoryItems("parts/shaders")do
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
require"parts.list"
|
||||||
|
require"parts.globalTables"
|
||||||
|
require"parts.gametoolfunc"
|
||||||
|
|
||||||
FREEROW= require"parts.freeRow"
|
FREEROW= require"parts.freeRow"
|
||||||
DATA= require"parts.data"
|
DATA= require"parts.data"
|
||||||
|
|
||||||
@@ -76,17 +76,17 @@ SKIN= require"parts.skin"
|
|||||||
USERS= require"parts.users"
|
USERS= require"parts.users"
|
||||||
NET= require"parts.net"
|
NET= require"parts.net"
|
||||||
VK= require"parts.virtualKey"
|
VK= require"parts.virtualKey"
|
||||||
PLY= require"parts.player"
|
|
||||||
netPLY= require"parts.netPlayer"
|
|
||||||
AIFUNC= require"parts.ai"
|
AIFUNC= require"parts.ai"
|
||||||
AIBUILDER= require"parts.AITemplate"
|
AIBUILDER= require"parts.AITemplate"
|
||||||
|
PLY= require"parts.player"
|
||||||
|
netPLY= require"parts.netPlayer"
|
||||||
MODES= require"parts.modes"
|
MODES= require"parts.modes"
|
||||||
|
|
||||||
--Initialize field[1]
|
--Initialize field[1]
|
||||||
FIELD[1]=DATA.newBoard()
|
FIELD[1]=DATA.newBoard()
|
||||||
|
|
||||||
--First start for phones
|
--First start for phones
|
||||||
if not fs.getInfo("conf/settings")and MOBILE then
|
if not fs.getInfo('conf/settings')and MOBILE then
|
||||||
SETTING.VKSwitch=true
|
SETTING.VKSwitch=true
|
||||||
SETTING.swap=false
|
SETTING.swap=false
|
||||||
SETTING.powerInfo=true
|
SETTING.powerInfo=true
|
||||||
@@ -96,19 +96,17 @@ if SETTING.fullscreen then love.window.setFullscreen(true)end
|
|||||||
|
|
||||||
--Initialize image libs
|
--Initialize image libs
|
||||||
IMG.init{
|
IMG.init{
|
||||||
batteryImage="mess/power.png",
|
|
||||||
lock="mess/lock.png",
|
lock="mess/lock.png",
|
||||||
dialCircle="mess/dialCircle.png",
|
dialCircle="mess/dialCircle.png",
|
||||||
dialNeedle="mess/dialNeedle.png",
|
dialNeedle="mess/dialNeedle.png",
|
||||||
lifeIcon="mess/life.png",
|
lifeIcon="mess/life.png",
|
||||||
badgeIcon="mess/badge.png",
|
badgeIcon="mess/badge.png",
|
||||||
spinCenter="mess/spinCenter.png",
|
|
||||||
ctrlSpeedLimit="mess/ctrlSpeedLimit.png",
|
ctrlSpeedLimit="mess/ctrlSpeedLimit.png",
|
||||||
speedLimit="mess/speedLimit.png",
|
speedLimit="mess/speedLimit.png",--Not used, for future C2-mode
|
||||||
pay1="mess/pay1.png",
|
pay1="mess/pay1.png",
|
||||||
pay2="mess/pay2.png",
|
pay2="mess/pay2.png",
|
||||||
|
|
||||||
nakiCH="characters/naki.png",
|
nakiCH="characters/nakiharu.png",
|
||||||
miyaCH="characters/miya.png",
|
miyaCH="characters/miya.png",
|
||||||
miyaF1="characters/miya_f1.png",
|
miyaF1="characters/miya_f1.png",
|
||||||
miyaF2="characters/miya_f2.png",
|
miyaF2="characters/miya_f2.png",
|
||||||
@@ -161,9 +159,9 @@ SFX.init((function()
|
|||||||
local L={}
|
local L={}
|
||||||
for _,v in next,fs.getDirectoryItems("media/SFX")do
|
for _,v in next,fs.getDirectoryItems("media/SFX")do
|
||||||
if fs.getRealDirectory("media/SFX/"..v)~=SAVEDIR then
|
if fs.getRealDirectory("media/SFX/"..v)~=SAVEDIR then
|
||||||
L[#L+1]=v:sub(1,-5)
|
table.insert(L,v:sub(1,-5))
|
||||||
else
|
else
|
||||||
LOG.print("Dangerous file : %SAVE%/media/SFX/"..v)
|
LOG.print("Dangerous file : %SAVE%/media/SFX/"..v,'warn')
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
return L
|
return L
|
||||||
@@ -172,9 +170,9 @@ BGM.init((function()
|
|||||||
local L={}
|
local L={}
|
||||||
for _,v in next,fs.getDirectoryItems("media/BGM")do
|
for _,v in next,fs.getDirectoryItems("media/BGM")do
|
||||||
if fs.getRealDirectory("media/BGM/"..v)~=SAVEDIR then
|
if fs.getRealDirectory("media/BGM/"..v)~=SAVEDIR then
|
||||||
L[#L+1]=v:sub(1,-5)
|
table.insert(L,v:sub(1,-5))
|
||||||
else
|
else
|
||||||
LOG.print("Dangerous file : %SAVE%/media/BGM/"..v)
|
LOG.print("Dangerous file : %SAVE%/media/BGM/"..v,'warn')
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
return L
|
return L
|
||||||
@@ -232,56 +230,34 @@ for _,v in next,fs.getDirectoryItems("parts/scenes")do
|
|||||||
LANG.addScene(sceneName)
|
LANG.addScene(sceneName)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
LANG.set(SETTING.lang)
|
|
||||||
|
|
||||||
--Update data
|
--Update data
|
||||||
do
|
do
|
||||||
local needSave
|
local needSave,autoRestart
|
||||||
local autoRestart
|
|
||||||
|
|
||||||
if type(STAT.version)~='number'then
|
if type(STAT.version)~='number'then
|
||||||
STAT.version=0
|
STAT.version=0
|
||||||
needSave=true
|
needSave=true
|
||||||
end
|
end
|
||||||
if STAT.version<1300 then
|
|
||||||
STAT.frame=math.floor(STAT.time*60)
|
|
||||||
STAT.lastPlay='sprint_10l'
|
|
||||||
RANKS.sprintFix=nil
|
|
||||||
RANKS.sprintLock=nil
|
|
||||||
needSave=true
|
|
||||||
for _,name in next,fs.getDirectoryItems("replay")do
|
|
||||||
fs.remove("replay/"..name)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
if STAT.version<1302 then
|
if STAT.version<1302 then
|
||||||
if RANKS.pctrain_n then RANKS.pctrain_n=0 end
|
FILE.clear_s("")
|
||||||
if RANKS.pctrain_l then RANKS.pctrain_l=0 end
|
|
||||||
fs.remove("conf/settings")
|
|
||||||
needSave=true
|
|
||||||
autoRestart=true
|
|
||||||
end
|
|
||||||
if STAT.version<1400 then
|
|
||||||
fs.remove("conf/user")
|
|
||||||
fs.remove("conf/key")
|
|
||||||
needSave=true
|
|
||||||
autoRestart=true
|
|
||||||
end
|
end
|
||||||
if STAT.version<1405 then
|
if STAT.version<1405 then
|
||||||
fs.remove("conf/user")
|
fs.remove('conf/user')
|
||||||
autoRestart=true
|
fs.remove('conf/key')
|
||||||
end
|
end
|
||||||
SETTING.appLock=nil
|
|
||||||
|
|
||||||
for _,v in next,VK_org do v.color=nil end
|
|
||||||
|
|
||||||
if STAT.version~=VERSION.code then
|
if STAT.version~=VERSION.code then
|
||||||
newVersionLaunch=true
|
|
||||||
STAT.version=VERSION.code
|
STAT.version=VERSION.code
|
||||||
CLEAR("lib")
|
|
||||||
needSave=true
|
needSave=true
|
||||||
autoRestart=true
|
autoRestart=true
|
||||||
end
|
end
|
||||||
|
if not SETTING.VKSkin then SETTING.VKSkin=1 end
|
||||||
|
if not TABLE.find({8,10,13,17,22,29,37,47,62,80,100},SETTING.frameMul)then
|
||||||
|
SETTING.frameMul=100
|
||||||
|
end
|
||||||
|
SETTING.appLock=nil
|
||||||
|
SETTING.dataSaving=nil
|
||||||
|
for _,v in next,VK_org do v.color=nil end
|
||||||
if RANKS.GM then RANKS.GM=0 end
|
if RANKS.GM then RANKS.GM=0 end
|
||||||
if RANKS.infinite then RANKS.infinite=6 end
|
if RANKS.infinite then RANKS.infinite=6 end
|
||||||
if RANKS.infinite_dig then RANKS.infinite_dig=6 end
|
if RANKS.infinite_dig then RANKS.infinite_dig=6 end
|
||||||
@@ -321,3 +297,6 @@ do
|
|||||||
love.event.quit('restart')
|
love.event.quit('restart')
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
LANG.set(SETTING.lang)
|
||||||
|
VK.setShape(SETTING.VKSkin)
|
||||||
BIN
media/BGM/exploration.ogg
Normal file
BIN
media/BGM/exploration.ogg
Normal file
Binary file not shown.
BIN
media/BGM/memory.ogg
Normal file
BIN
media/BGM/memory.ogg
Normal file
Binary file not shown.
BIN
media/BGM/moonbeam.ogg
Normal file
BIN
media/BGM/moonbeam.ogg
Normal file
Binary file not shown.
BIN
media/BGM/space.ogg
Normal file
BIN
media/BGM/space.ogg
Normal file
Binary file not shown.
Binary file not shown.
BIN
media/SFX/connect.ogg
Normal file
BIN
media/SFX/connect.ogg
Normal file
Binary file not shown.
BIN
media/SFX/connected.ogg
Normal file
BIN
media/SFX/connected.ogg
Normal file
Binary file not shown.
Binary file not shown.
|
Before Width: | Height: | Size: 121 KiB |
BIN
media/image/characters/nakiharu.png
Normal file
BIN
media/image/characters/nakiharu.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 78 KiB |
Binary file not shown.
|
Before Width: | Height: | Size: 155 B |
Binary file not shown.
|
Before Width: | Height: | Size: 137 B |
20
parts/ai.lua
20
parts/ai.lua
@@ -101,17 +101,17 @@ local FCL={
|
|||||||
{{11,4},{11,3},{1,4},{4},{3},{2,3},{2,2,3},{12,4},{12,3}},
|
{{11,4},{11,3},{1,4},{4},{3},{2,3},{2,2,3},{12,4},{12,3}},
|
||||||
},
|
},
|
||||||
[3]={
|
[3]={
|
||||||
{{11},{11,2},{1},{},{2},{2,2},{12,1},{12},},
|
{{11},{11,2},{1},{},{2},{2,2},{12,1},{12}},
|
||||||
{{3,11},{11,3},{11,2,3},{1,3},{3},{2,3},{2,2,3},{12,1,3},{12,3},},
|
{{3,11},{11,3},{11,2,3},{1,3},{3},{2,3},{2,2,3},{12,1,3},{12,3}},
|
||||||
{{11,5},{11,2,5},{1,5},{5},{2,5},{2,2,5},{12,1,5},{12,5},},
|
{{11,5},{11,2,5},{1,5},{5},{2,5},{2,2,5},{12,1,5},{12,5}},
|
||||||
{{11,4},{11,2,4},{1,4},{4},{2,4},{2,2,4},{12,1,4},{12,4},{4,12},},
|
{{11,4},{11,2,4},{1,4},{4},{2,4},{2,2,4},{12,1,4},{12,4},{4,12}},
|
||||||
},
|
},
|
||||||
[6]={
|
[6]={
|
||||||
{{11},{11,2},{1,1},{1},{},{2},{2,2},{12,1},{12},},
|
{{11},{11,2},{1,1},{1},{},{2},{2,2},{12,1},{12}},
|
||||||
},
|
},
|
||||||
[7]={
|
[7]={
|
||||||
{{11},{11,2},{1},{},{2},{12,1},{12},},
|
{{11},{11,2},{1},{},{2},{12,1},{12}},
|
||||||
{{4,11},{11,4},{11,3},{1,4},{4},{3},{2,3},{12,4},{12,3},{3,12},},
|
{{4,11},{11,4},{11,3},{1,4},{4},{3},{2,3},{12,4},{12,3},{3,12}},
|
||||||
},
|
},
|
||||||
}FCL[2],FCL[4],FCL[5]=FCL[1],FCL[3],FCL[3]
|
}FCL[2],FCL[4],FCL[5]=FCL[1],FCL[3],FCL[3]
|
||||||
local LclearScore={[0]=0,-200,-120,-80,200}
|
local LclearScore={[0]=0,-200,-120,-80,200}
|
||||||
@@ -199,6 +199,8 @@ local function getScore(field,cb,cy)
|
|||||||
return score
|
return score
|
||||||
end
|
end
|
||||||
-------------------------------------------------
|
-------------------------------------------------
|
||||||
|
local BLOCKS=BLOCKS
|
||||||
|
local CC=CC
|
||||||
return{
|
return{
|
||||||
['9S']=function(P,keys)
|
['9S']=function(P,keys)
|
||||||
while true do
|
while true do
|
||||||
@@ -270,7 +272,7 @@ return{
|
|||||||
|
|
||||||
--Check if time to change target
|
--Check if time to change target
|
||||||
yield()
|
yield()
|
||||||
if P:RND()<.00126 then
|
if P.aiRND:random()<.00126 then
|
||||||
P:changeAtkMode(rnd()<.85 and 1 or #P.atker>3 and 4 or rnd()<.3 and 2 or 3)
|
P:changeAtkMode(rnd()<.85 and 1 or #P.atker>3 and 4 or rnd()<.3 and 2 or 3)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
@@ -313,7 +315,7 @@ return{
|
|||||||
|
|
||||||
--Check if time to change target
|
--Check if time to change target
|
||||||
yield()
|
yield()
|
||||||
if P:RND()<.00126 then
|
if P.aiRND:random()<.00126 then
|
||||||
P:changeAtkMode(rnd()<.85 and 1 or #P.atker>3 and 4 or rnd()<.3 and 2 or 3)
|
P:changeAtkMode(rnd()<.85 and 1 or #P.atker>3 and 4 or rnd()<.3 and 2 or 3)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -16,6 +16,7 @@ function back.update(dt)
|
|||||||
t=t+dt
|
t=t+dt
|
||||||
end
|
end
|
||||||
function back.draw()
|
function back.draw()
|
||||||
|
gc.clear(.1,.1,.1)
|
||||||
shader:send("t",t)
|
shader:send("t",t)
|
||||||
gc.setShader(shader)
|
gc.setShader(shader)
|
||||||
gc.rectangle('fill',0,0,SCR.w,SCR.h)
|
gc.rectangle('fill',0,0,SCR.w,SCR.h)
|
||||||
|
|||||||
@@ -28,9 +28,8 @@ function back.resize()
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
function back.draw()
|
function back.draw()
|
||||||
gc.clear(.2,.2,.2)
|
gc.clear(.1,.1,.1)
|
||||||
local r,g,b=COLOR.rainbow_light(TIME())
|
gc.setColor(1,1,1,.1)
|
||||||
gc.setColor(r,g,b,.2)
|
|
||||||
gc.draw(video,X,Y,nil,K)
|
gc.draw(video,X,Y,nil,K)
|
||||||
end
|
end
|
||||||
function back.discard()
|
function back.discard()
|
||||||
|
|||||||
@@ -15,6 +15,7 @@ function back.update(dt)
|
|||||||
t=t+dt
|
t=t+dt
|
||||||
end
|
end
|
||||||
function back.draw()
|
function back.draw()
|
||||||
|
gc.clear(.1,.1,.1)
|
||||||
shader:send("t",t)
|
shader:send("t",t)
|
||||||
gc.setShader(shader)
|
gc.setShader(shader)
|
||||||
gc.rectangle('fill',0,0,SCR.w,SCR.h)
|
gc.rectangle('fill',0,0,SCR.w,SCR.h)
|
||||||
|
|||||||
@@ -15,6 +15,7 @@ function back.update(dt)
|
|||||||
t=t+dt
|
t=t+dt
|
||||||
end
|
end
|
||||||
function back.draw()
|
function back.draw()
|
||||||
|
gc.clear(.1,.1,.1)
|
||||||
shader:send("t",t)
|
shader:send("t",t)
|
||||||
gc.setShader(shader)
|
gc.setShader(shader)
|
||||||
gc.rectangle('fill',0,0,SCR.w,SCR.h)
|
gc.rectangle('fill',0,0,SCR.w,SCR.h)
|
||||||
|
|||||||
@@ -1,5 +1,9 @@
|
|||||||
--Blackhole
|
--Blackhole
|
||||||
local gc=love.graphics
|
local gc=love.graphics
|
||||||
|
local gc_clear,gc_replaceTransform=gc.clear,gc.replaceTransform
|
||||||
|
local gc_setColor,gc_setLineWidth=gc.setColor,gc.setLineWidth
|
||||||
|
local gc_draw,gc_circle=gc.draw,gc.circle
|
||||||
|
|
||||||
local sin,cos=math.sin,math.cos
|
local sin,cos=math.sin,math.cos
|
||||||
local rnd=math.random
|
local rnd=math.random
|
||||||
local ins,rem=table.insert,table.remove
|
local ins,rem=table.insert,table.remove
|
||||||
@@ -37,29 +41,24 @@ function back.update()
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
function back.draw()
|
function back.draw()
|
||||||
gc.clear(.1,.1,.1)
|
gc_clear(.1,.1,.1)
|
||||||
gc.push('transform')
|
gc_replaceTransform(SCR.xOy_m)
|
||||||
gc.origin()
|
|
||||||
gc.translate(SCR.w/2,SCR.h/2)
|
|
||||||
|
|
||||||
--Squares
|
--Squares
|
||||||
gc.setColor(.5,.5,.5)
|
gc_setColor(1,1,1,.2)
|
||||||
for i=1,#squares do
|
for i=1,#squares do
|
||||||
local S=squares[i]
|
local S=squares[i]
|
||||||
gc.draw(S.texture,S.d*cos(S.ang),S.d*sin(S.ang),S.rotate,S.size*.026,nil,15,15)
|
gc_draw(S.texture,S.d*cos(S.ang),S.d*sin(S.ang),S.rotate,S.size*.026,nil,15,15)
|
||||||
end
|
end
|
||||||
|
|
||||||
--Blackhole
|
--Blackhole
|
||||||
gc.scale(SCR.rad/1600)
|
gc_setColor(.07,.07,.07)
|
||||||
gc.setColor(0,0,0)
|
gc_circle('fill',0,0,157)
|
||||||
gc.circle('fill',0,0,157)
|
gc_setLineWidth(6)
|
||||||
gc.setLineWidth(6)
|
|
||||||
for i=0,15 do
|
for i=0,15 do
|
||||||
gc.setColor(0,0,0,1-i*.0666)
|
gc_setColor(.07,.07,.07,1-i*.0666)
|
||||||
gc.circle('line',0,0,160+6*i)
|
gc_circle('line',0,0,160+6*i)
|
||||||
end
|
end
|
||||||
gc.scale(1600/SCR.rad)
|
|
||||||
gc.pop()
|
|
||||||
end
|
end
|
||||||
function back.discard()
|
function back.discard()
|
||||||
squares=nil
|
squares=nil
|
||||||
|
|||||||
@@ -1,5 +1,8 @@
|
|||||||
--Large falling tetrominoes
|
--Large falling tetrominoes
|
||||||
local gc=love.graphics
|
local gc=love.graphics
|
||||||
|
local gc_clear=gc.clear
|
||||||
|
local gc_setColor,gc_draw=gc.setColor,gc.draw
|
||||||
|
|
||||||
local rnd=math.random
|
local rnd=math.random
|
||||||
local ins,rem=table.insert,table.remove
|
local ins,rem=table.insert,table.remove
|
||||||
local back={}
|
local back={}
|
||||||
@@ -32,22 +35,19 @@ function back.update()
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
function back.draw()
|
function back.draw()
|
||||||
gc.clear(.1,.1,.1)
|
gc_clear(.1,.1,.1)
|
||||||
gc.push('transform')
|
gc_setColor(1,1,1,.2)
|
||||||
gc.origin()
|
|
||||||
gc.setColor(1,1,1,.4)
|
|
||||||
for i=1,#mino do
|
for i=1,#mino do
|
||||||
local M=mino[i]
|
local M=mino[i]
|
||||||
local b=M.block
|
local b=M.block
|
||||||
for y=1,#b do
|
for y=1,#b do
|
||||||
for x=1,#b[1]do
|
for x=1,#b[1]do
|
||||||
if b[y][x]then
|
if b[y][x]then
|
||||||
gc.draw(M.texture,M.x+(x-1)*30*M.k,M.y-y*30*M.k,nil,M.k)
|
gc_draw(M.texture,M.x+(x-1)*30*M.k,M.y-y*30*M.k,nil,M.k)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
gc.pop()
|
|
||||||
end
|
end
|
||||||
function back.discard()
|
function back.discard()
|
||||||
mino=nil
|
mino=nil
|
||||||
|
|||||||
@@ -41,15 +41,12 @@ function back.update()
|
|||||||
end
|
end
|
||||||
function back.draw()
|
function back.draw()
|
||||||
gc.clear(.1,.1,.1)
|
gc.clear(.1,.1,.1)
|
||||||
gc.push('transform')
|
|
||||||
gc.origin()
|
|
||||||
for i=1,#mino do
|
for i=1,#mino do
|
||||||
local C=mino[i]
|
local C=mino[i]
|
||||||
local c=C.color
|
local c=C.color
|
||||||
gc.setColor(c[1],c[2],c[3],.5)
|
gc.setColor(c[1],c[2],c[3],.2)
|
||||||
gc.draw(C.block,C.x,C.y,C.ang,C.k,C.k,C.block:getWidth()/2,C.block:getHeight()/2)
|
gc.draw(C.block,C.x,C.y,C.ang,C.k,C.k,C.block:getWidth()/2,C.block:getHeight()/2)
|
||||||
end
|
end
|
||||||
gc.pop()
|
|
||||||
end
|
end
|
||||||
function back.discard()
|
function back.discard()
|
||||||
mino=nil
|
mino=nil
|
||||||
|
|||||||
@@ -1,5 +1,8 @@
|
|||||||
--Space but tetrominoes
|
--Space but tetrominoes
|
||||||
local gc=love.graphics
|
local gc=love.graphics
|
||||||
|
local gc_clear,gc_translate=gc.clear,gc.translate
|
||||||
|
local gc_setColor,gc_draw=gc.setColor,gc.draw
|
||||||
|
|
||||||
local sin,cos=math.sin,math.cos
|
local sin,cos=math.sin,math.cos
|
||||||
local rnd=math.random
|
local rnd=math.random
|
||||||
local ins,rem=table.insert,table.remove
|
local ins,rem=table.insert,table.remove
|
||||||
@@ -33,22 +36,20 @@ function back.update()
|
|||||||
rem(mino,i)
|
rem(mino,i)
|
||||||
else
|
else
|
||||||
M.rotate=M.rotate+M.vr
|
M.rotate=M.rotate+M.vr
|
||||||
M.v=M.v*(1+M.d/SCR.rad*.05)
|
M.v=M.v*(1+M.d/rad*.05)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
function back.draw()
|
function back.draw()
|
||||||
gc.clear(.1,.1,.1)
|
gc_clear(.1,.1,.1)
|
||||||
gc.push('transform')
|
gc_translate(SCR.cx,SCR.cy)
|
||||||
gc.origin()
|
|
||||||
gc.translate(SCR.w/2,SCR.h/2)
|
|
||||||
for i=1,#mino do
|
for i=1,#mino do
|
||||||
local M=mino[i]
|
local M=mino[i]
|
||||||
local c=M.color
|
local c=M.color
|
||||||
gc.setColor(c[1],c[2],c[3],.4)
|
gc_setColor(c[1],c[2],c[3],.2)
|
||||||
gc.draw(M.block,M.d*cos(M.ang),M.d*sin(M.ang),M.rotate,(18*M.d/SCR.rad)^1.6,nil,M.block:getWidth()/2,M.block:getHeight()/2)
|
gc_draw(M.block,M.d*cos(M.ang),M.d*sin(M.ang),M.rotate,(18*M.d/SCR.rad)^1.6,nil,M.block:getWidth()/2,M.block:getHeight()/2)
|
||||||
end
|
end
|
||||||
gc.pop()
|
gc_translate(-SCR.cx,-SCR.cy)
|
||||||
end
|
end
|
||||||
function back.discard()
|
function back.discard()
|
||||||
mino=nil
|
mino=nil
|
||||||
|
|||||||
@@ -1,6 +1,9 @@
|
|||||||
--Flying cubes
|
--Flying cubes
|
||||||
local gc=love.graphics
|
local gc=love.graphics
|
||||||
local rectangle=gc.rectangle
|
local gc_clear=gc.clear
|
||||||
|
local gc_setColor,gc_setLineWidth=gc.setColor,gc.setLineWidth
|
||||||
|
local gc_rectangle=gc.rectangle
|
||||||
|
|
||||||
local rnd=math.random
|
local rnd=math.random
|
||||||
local ins,rem=table.insert,table.remove
|
local ins,rem=table.insert,table.remove
|
||||||
local back={}
|
local back={}
|
||||||
@@ -61,19 +64,16 @@ function back.update(dt)
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
function back.draw()
|
function back.draw()
|
||||||
gc.clear(.1,.1,.1)
|
gc_clear(.1,.1,.1)
|
||||||
gc.push('transform')
|
gc_setLineWidth(6)
|
||||||
gc.origin()
|
|
||||||
gc.setLineWidth(6)
|
|
||||||
for i=1,#squares do
|
for i=1,#squares do
|
||||||
local S=squares[i]
|
local S=squares[i]
|
||||||
local c=S.color
|
local c=S.color
|
||||||
gc.setColor(c[1],c[2],c[3],.6)
|
gc_setColor(c[1],c[2],c[3],.2)
|
||||||
rectangle('line',S.x,S.y,S.size,S.size)
|
gc_rectangle('line',S.x,S.y,S.size,S.size)
|
||||||
gc.setColor(c)
|
gc_setColor(c[1],c[2],c[3],.3)
|
||||||
rectangle('fill',S.x,S.y,S.size,S.size)
|
gc_rectangle('fill',S.x,S.y,S.size,S.size)
|
||||||
end
|
end
|
||||||
gc.pop()
|
|
||||||
end
|
end
|
||||||
function back.discard()
|
function back.discard()
|
||||||
squares=nil
|
squares=nil
|
||||||
|
|||||||
@@ -1,6 +1,11 @@
|
|||||||
--UUZ's fan
|
--UUZ's fan
|
||||||
local gc=love.graphics
|
local gc=love.graphics
|
||||||
local polygon,ellipse=gc.polygon,gc.ellipse
|
local gc_clear,gc_origin,gc_replaceTransform=gc.clear,gc.origin,gc.replaceTransform
|
||||||
|
local gc_translate=gc.translate
|
||||||
|
local gc_setColor,gc_setLineWidth=gc.setColor,gc.setLineWidth
|
||||||
|
local gc_line,gc_polygon=gc.line,gc.polygon
|
||||||
|
local gc_arc,gc_ellipse=gc.arc,gc.ellipse
|
||||||
|
|
||||||
local rnd=math.random
|
local rnd=math.random
|
||||||
local max,min,sin=math.max,math.min,math.sin
|
local max,min,sin=math.max,math.min,math.sin
|
||||||
local ins,rem=table.insert,table.remove
|
local ins,rem=table.insert,table.remove
|
||||||
@@ -9,7 +14,7 @@ local back={}
|
|||||||
local t
|
local t
|
||||||
local fan,petal
|
local fan,petal
|
||||||
function back.init()
|
function back.init()
|
||||||
t=rnd(2600)
|
t=0
|
||||||
fan=title_fan
|
fan=title_fan
|
||||||
petal={}
|
petal={}
|
||||||
end
|
end
|
||||||
@@ -39,35 +44,34 @@ function back.update()
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
function back.draw()
|
function back.draw()
|
||||||
gc.push('transform')
|
gc_clear(.1,.1,.1)
|
||||||
gc.translate(SCR.w/2,SCR.h/2+20*sin(t*.02))
|
|
||||||
gc.scale(SCR.k)
|
|
||||||
gc.clear(.1,.1,.1)
|
|
||||||
gc.setLineWidth(320)
|
|
||||||
gc.setColor(.3,.2,.3)
|
|
||||||
gc.arc('line','open',0,420,500,-.8*3.1416,-.2*3.1416)
|
|
||||||
|
|
||||||
gc.setLineWidth(4)
|
gc_replaceTransform(SCR.xOy_m)
|
||||||
gc.setColor(.7,.5,.65)
|
gc_translate(0,20*sin(t*.02))
|
||||||
gc.arc('line','open',0,420,660,-.799*3.1416,-.201*3.1416)
|
|
||||||
gc.arc('line','open',0,420,340,-.808*3.1416,-.192*3.1416)
|
|
||||||
gc.line(-281,224,-530,30.5)
|
|
||||||
gc.line(281,224,530,30.5)
|
|
||||||
|
|
||||||
gc.setLineWidth(6)
|
gc_setLineWidth(320)
|
||||||
gc.setColor(.55,.5,.6)
|
gc_setColor(.9,.6,.9,.1)
|
||||||
for i=1,8 do
|
gc_arc('line','open',0,420,500,-.8*3.1416,-.2*3.1416)
|
||||||
polygon('line',fan[i])
|
|
||||||
end
|
|
||||||
|
|
||||||
gc.setLineWidth(2)
|
gc_setLineWidth(4)
|
||||||
gc.setColor(.6,.3,.5)
|
gc_setColor(1,.7,.9,.2)
|
||||||
gc.origin()
|
gc_arc('line','open',0,420,660,-.799*3.1416,-.201*3.1416)
|
||||||
|
gc_arc('line','open',0,420,340,-.808*3.1416,-.192*3.1416)
|
||||||
|
gc_line(-281,224,-530,30.5)
|
||||||
|
gc_line(281,224,530,30.5)
|
||||||
|
|
||||||
|
gc_setLineWidth(6)
|
||||||
|
gc_setColor(.8,.9,1,.3)
|
||||||
|
for i=1,8 do gc_polygon('line',fan[i])end
|
||||||
|
|
||||||
|
gc_setLineWidth(2)
|
||||||
|
gc_setColor(1,.5,.7,.3)
|
||||||
|
|
||||||
|
gc_origin()
|
||||||
for i=1,#petal do
|
for i=1,#petal do
|
||||||
local P=petal[i]
|
local P=petal[i]
|
||||||
ellipse('fill',P.x,P.y,P.rx,P.ry)
|
gc_ellipse('fill',P.x,P.y,P.rx,P.ry)
|
||||||
end
|
end
|
||||||
gc.pop()
|
|
||||||
end
|
end
|
||||||
function back.discard()
|
function back.discard()
|
||||||
petal=nil
|
petal=nil
|
||||||
|
|||||||
@@ -1,6 +1,9 @@
|
|||||||
--Firework
|
--Firework
|
||||||
local gc=love.graphics
|
local gc=love.graphics
|
||||||
local circle,line=gc.circle,gc.line
|
local gc_clear=gc.clear
|
||||||
|
local gc_setColor,gc_setLineWidth=gc.setColor,gc.setLineWidth
|
||||||
|
local gc_line,gc_circle=gc.line,gc.circle
|
||||||
|
|
||||||
local rnd=math.random
|
local rnd=math.random
|
||||||
local ins,rem=table.insert,table.remove
|
local ins,rem=table.insert,table.remove
|
||||||
local back={}
|
local back={}
|
||||||
@@ -22,7 +25,7 @@ function back.update(dt)
|
|||||||
y1=SCR.h*(.15+rnd()*.4),
|
y1=SCR.h*(.15+rnd()*.4),
|
||||||
t=0,
|
t=0,
|
||||||
v=.5+rnd(),
|
v=.5+rnd(),
|
||||||
color=COLOR.random_bright(),
|
color=COLOR.random_dark(),
|
||||||
big=rnd()<.1,
|
big=rnd()<.1,
|
||||||
})
|
})
|
||||||
t=rnd(26,62)
|
t=rnd(26,62)
|
||||||
@@ -75,22 +78,19 @@ function back.update(dt)
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
function back.draw()
|
function back.draw()
|
||||||
gc.clear(.1,.1,.1)
|
gc_clear(.1,.1,.1)
|
||||||
gc.push('transform')
|
|
||||||
gc.origin()
|
|
||||||
for i=1,#firework do
|
for i=1,#firework do
|
||||||
local F=firework[i]
|
local F=firework[i]
|
||||||
gc.setColor(F.color)
|
gc_setColor(F.color)
|
||||||
circle('fill',F.x,F.y,F.big and 8 or 4)
|
gc_circle('fill',F.x,F.y,F.big and 8 or 4)
|
||||||
end
|
end
|
||||||
gc.setLineWidth(3)
|
gc_setLineWidth(3)
|
||||||
for i=1,#particle do
|
for i=1,#particle do
|
||||||
local P=particle[i]
|
local P=particle[i]
|
||||||
local c=P.color
|
local c=P.color
|
||||||
gc.setColor(c[1],c[2],c[3],P.t)
|
gc_setColor(c[1],c[2],c[3],P.t*.4)
|
||||||
line(P.x,P.y,P.x-P.vx*4,P.y-P.vy*4)
|
gc_line(P.x,P.y,P.x-P.vx*4,P.y-P.vy*4)
|
||||||
end
|
end
|
||||||
gc.pop()
|
|
||||||
end
|
end
|
||||||
function back.discard()
|
function back.discard()
|
||||||
firework=nil
|
firework=nil
|
||||||
|
|||||||
@@ -1,6 +0,0 @@
|
|||||||
local gc=love.graphics
|
|
||||||
local back={}
|
|
||||||
function back.draw()
|
|
||||||
gc.clear(.3,.3,.3)
|
|
||||||
end
|
|
||||||
return back
|
|
||||||
@@ -38,14 +38,11 @@ function back.update(dt)
|
|||||||
end
|
end
|
||||||
function back.draw()
|
function back.draw()
|
||||||
gc.clear(.1,.1,.1)
|
gc.clear(.1,.1,.1)
|
||||||
gc.push('transform')
|
gc.setColor(1,1,1,.2)
|
||||||
gc.origin()
|
|
||||||
gc.setColor(1,1,1)
|
|
||||||
local img=IMG.lanterns
|
local img=IMG.lanterns
|
||||||
for i=1,#lanterns do
|
for i=1,#lanterns do
|
||||||
local L=lanterns[i]
|
local L=lanterns[i]
|
||||||
mDraw(img[int(L.phase*6)+1],L.x,L.y,nil,L.size)
|
mDraw(img[int(L.phase*6)+1],L.x,L.y,nil,L.size)
|
||||||
end
|
end
|
||||||
gc.pop()
|
|
||||||
end
|
end
|
||||||
return back
|
return back
|
||||||
36
parts/backgrounds/league.lua
Normal file
36
parts/backgrounds/league.lua
Normal file
@@ -0,0 +1,36 @@
|
|||||||
|
--Space with stars
|
||||||
|
local gc=love.graphics
|
||||||
|
local back={}
|
||||||
|
|
||||||
|
local upCover do
|
||||||
|
local L={1,64}
|
||||||
|
for i=0,63 do
|
||||||
|
table.insert(L,{'setCL',.6,1,1,i*.01})
|
||||||
|
table.insert(L,{'fRect',0,63-i,1,1})
|
||||||
|
end
|
||||||
|
upCover=DOGC(L)
|
||||||
|
end
|
||||||
|
local downCover do
|
||||||
|
local L={1,64}
|
||||||
|
for i=0,63 do
|
||||||
|
table.insert(L,{'setCL',1,.5,.8,i*.01})
|
||||||
|
table.insert(L,{'fRect',0,i,1,1})
|
||||||
|
end
|
||||||
|
downCover=DOGC(L)
|
||||||
|
end
|
||||||
|
|
||||||
|
local W,H
|
||||||
|
function back.init()
|
||||||
|
BG.resize(SCR.w,SCR.h)
|
||||||
|
end
|
||||||
|
function back.resize(w,h)
|
||||||
|
W,H=w,h
|
||||||
|
end
|
||||||
|
function back.update()
|
||||||
|
end
|
||||||
|
function back.draw()
|
||||||
|
gc.clear(.1,.1,.1)
|
||||||
|
gc.draw(upCover,0,0,0,W,H*.3/64)
|
||||||
|
gc.draw(downCover,0,H*.7,0,W,H*.3/64)
|
||||||
|
end
|
||||||
|
return back
|
||||||
@@ -1,6 +0,0 @@
|
|||||||
local gc=love.graphics
|
|
||||||
local back={}
|
|
||||||
function back.draw()
|
|
||||||
gc.clear(.95,.95,.95)
|
|
||||||
end
|
|
||||||
return back
|
|
||||||
@@ -24,6 +24,6 @@ function back.draw()
|
|||||||
end
|
end
|
||||||
local _=colorLib[SETTING.skin[R]]
|
local _=colorLib[SETTING.skin[R]]
|
||||||
gc.setColor(_[1],_[2],_[3],.12)
|
gc.setColor(_[1],_[2],_[3],.12)
|
||||||
gc.draw(TEXTURE.miniBlock[R],SCR.w/2,SCR.h/2,t%3.1416*6,400*SCR.k,nil,scs[R][0][2]+.5,#blocks[R][0]-scs[R][0][1]-.5)
|
gc.draw(TEXTURE.miniBlock[R],SCR.cx,SCR.cy,t%3.1416*6,400*SCR.k,nil,scs[R][0][2]+.5,#blocks[R][0]-scs[R][0][1]-.5)
|
||||||
end
|
end
|
||||||
return back
|
return back
|
||||||
@@ -1,5 +1,9 @@
|
|||||||
--Black-White grid
|
--Black-White grid
|
||||||
local gc=love.graphics
|
local gc=love.graphics
|
||||||
|
local gc_clear,gc_scale=gc.clear,gc.scale
|
||||||
|
local gc_setColor=gc.setColor
|
||||||
|
local gc_rectangle=gc.rectangle
|
||||||
|
|
||||||
local sin=math.sin
|
local sin=math.sin
|
||||||
local ceil=math.ceil
|
local ceil=math.ceil
|
||||||
local back={}
|
local back={}
|
||||||
@@ -13,17 +17,15 @@ function back.update(dt)
|
|||||||
t=t+dt
|
t=t+dt
|
||||||
end
|
end
|
||||||
function back.draw()
|
function back.draw()
|
||||||
gc.clear(.1,.1,.1)
|
gc_clear(.1,.1,.1)
|
||||||
gc.push('transform')
|
|
||||||
local k=SCR.k
|
local k=SCR.k
|
||||||
gc.scale(k)
|
gc_scale(k)
|
||||||
local Y=ceil(SCR.h/80/k)
|
local Y=ceil(SCR.h/80/k)
|
||||||
for x=1,ceil(SCR.w/80/k)do
|
for x=1,ceil(SCR.w/80/k)do
|
||||||
for y=1,Y do
|
for y=1,Y do
|
||||||
gc.setColor(1,1,1,sin(x+matrixT[x][y]*t)*.1+.1)
|
gc_setColor(1,1,1,sin(x+matrixT[x][y]*t)*.04+.04)
|
||||||
gc.rectangle('fill',80*x,80*y,-80,-80)
|
gc_rectangle('fill',80*x,80*y,-80,-80)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
gc.pop()
|
|
||||||
end
|
end
|
||||||
return back
|
return back
|
||||||
@@ -16,6 +16,7 @@ function back.update(dt)
|
|||||||
t=t+dt
|
t=t+dt
|
||||||
end
|
end
|
||||||
function back.draw()
|
function back.draw()
|
||||||
|
gc.clear(.1,.1,.1)
|
||||||
shader:send("t",t)
|
shader:send("t",t)
|
||||||
gc.setShader(shader)
|
gc.setShader(shader)
|
||||||
gc.rectangle('fill',0,0,SCR.w,SCR.h)
|
gc.rectangle('fill',0,0,SCR.w,SCR.h)
|
||||||
|
|||||||
@@ -16,6 +16,7 @@ function back.update(dt)
|
|||||||
t=t+dt
|
t=t+dt
|
||||||
end
|
end
|
||||||
function back.draw()
|
function back.draw()
|
||||||
|
gc.clear(.1,.1,.1)
|
||||||
shader:send("t",t)
|
shader:send("t",t)
|
||||||
gc.setShader(shader)
|
gc.setShader(shader)
|
||||||
gc.rectangle('fill',0,0,SCR.w,SCR.h)
|
gc.rectangle('fill',0,0,SCR.w,SCR.h)
|
||||||
|
|||||||
@@ -12,9 +12,9 @@ function back.update(dt)
|
|||||||
end
|
end
|
||||||
function back.draw()
|
function back.draw()
|
||||||
gc.clear(
|
gc.clear(
|
||||||
sin(t*1.2)*.15+.2,
|
sin(t*1.2)*.06+.08,
|
||||||
sin(t*1.5)*.15+.2,
|
sin(t*1.5)*.06+.08,
|
||||||
sin(t*1.9)*.15+.2
|
sin(t*1.9)*.06+.08
|
||||||
)
|
)
|
||||||
end
|
end
|
||||||
return back
|
return back
|
||||||
@@ -38,15 +38,12 @@ function back.update()
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
function back.draw()
|
function back.draw()
|
||||||
gc.clear(.2,.2,.2)
|
gc.clear(.1,.1,.1)
|
||||||
gc.push('transform')
|
|
||||||
gc.setColor(.7,.7,.7)
|
gc.setColor(.7,.7,.7)
|
||||||
gc.origin()
|
|
||||||
for i=1,#snow do
|
for i=1,#snow do
|
||||||
local P=snow[i]
|
local P=snow[i]
|
||||||
ellipse('fill',P.x,P.y,P.rx,P.ry)
|
ellipse('fill',P.x,P.y,P.rx,P.ry)
|
||||||
end
|
end
|
||||||
gc.pop()
|
|
||||||
end
|
end
|
||||||
function back.discard()
|
function back.discard()
|
||||||
snow=nil
|
snow=nil
|
||||||
|
|||||||
@@ -34,7 +34,7 @@ function back.draw()
|
|||||||
gc.clear(.1,.1,.1)
|
gc.clear(.1,.1,.1)
|
||||||
if not stars[1]then return end
|
if not stars[1]then return end
|
||||||
gc.translate(-10,-10)
|
gc.translate(-10,-10)
|
||||||
gc.setColor(.8,.8,.8)
|
gc.setColor(1,1,1,.6)
|
||||||
for i=1,1260,5 do
|
for i=1,1260,5 do
|
||||||
rectangle('fill',stars[i+1],stars[i+2],stars[i],stars[i])
|
rectangle('fill',stars[i+1],stars[i+2],stars[i],stars[i])
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -30,7 +30,7 @@ function back.update(dt)
|
|||||||
end
|
end
|
||||||
function back.draw()
|
function back.draw()
|
||||||
gc.clear(.1,.1,.1)
|
gc.clear(.1,.1,.1)
|
||||||
gc.setColor(.4,.4,.4)
|
gc.setColor(1,1,1,.1)
|
||||||
for i=1,#ring do
|
for i=1,#ring do
|
||||||
local r=ring[i]^2/12
|
local r=ring[i]^2/12
|
||||||
gc.setLineWidth(30-15/(r+.5))
|
gc.setLineWidth(30-15/(r+.5))
|
||||||
|
|||||||
@@ -19,7 +19,7 @@ function back.draw()
|
|||||||
gc.clear(.1,.1,.1)
|
gc.clear(.1,.1,.1)
|
||||||
end
|
end
|
||||||
gc.push('transform')
|
gc.push('transform')
|
||||||
gc.translate(SCR.w/2,SCR.h/2+20*sin(t*.02))
|
gc.translate(SCR.cx,SCR.cy+20*sin(t*.02))
|
||||||
gc.scale(SCR.k)
|
gc.scale(SCR.k)
|
||||||
gc.scale(1.1626,1.26)
|
gc.scale(1.1626,1.26)
|
||||||
if -t%6.26<.1355 then
|
if -t%6.26<.1355 then
|
||||||
@@ -28,11 +28,11 @@ function back.draw()
|
|||||||
if -t%12.6<.1626 then
|
if -t%12.6<.1626 then
|
||||||
gc.rotate(t+5*sin(.26*t)+5*sin(.626*t))
|
gc.rotate(t+5*sin(.26*t)+5*sin(.626*t))
|
||||||
end
|
end
|
||||||
gc.setColor(.2,.3,.5)
|
gc.setColor(.4,.6,1,.3)
|
||||||
gc.draw(txt,-883*.5+4*sin(t*.7942),-110*.5+4*sin(t*.7355))
|
gc.draw(txt,-883*.5+4*sin(t*.7942),-110*.5+4*sin(t*.7355))
|
||||||
gc.setColor(.4,.6,.8)
|
gc.setColor(.5,.7,1,.4)
|
||||||
gc.draw(txt,-883*.5+2*sin(t*.77023),-110*.5+2*sin(t*.7026))
|
gc.draw(txt,-883*.5+2*sin(t*.77023),-110*.5+2*sin(t*.7026))
|
||||||
gc.setColor(.9,.9,.9)
|
gc.setColor(1,1,1,.5)
|
||||||
gc.draw(txt,-883*.5+3*sin(t*.7283),-110*.5+3*sin(t*.7626))
|
gc.draw(txt,-883*.5+3*sin(t*.7283),-110*.5+3*sin(t*.7626))
|
||||||
gc.pop()
|
gc.pop()
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -3,14 +3,14 @@ local gc=love.graphics
|
|||||||
local rnd=math.random
|
local rnd=math.random
|
||||||
local back={}
|
local back={}
|
||||||
local wingColor={
|
local wingColor={
|
||||||
{0., .9, .9,.626},
|
{0., .9, .9,.26},
|
||||||
{.3, 1., .3,.626},
|
{.3, 1., .3,.26},
|
||||||
{.9, .9, 0.,.626},
|
{.9, .9, 0.,.26},
|
||||||
{1., .5, 0.,.626},
|
{1., .5, 0.,.26},
|
||||||
{1., .3, .3,.626},
|
{1., .3, .3,.26},
|
||||||
{.5, 0., 1.,.626},
|
{.5, 0., 1.,.26},
|
||||||
{.3, .3, 1.,.626},
|
{.3, .3, 1.,.26},
|
||||||
{0., .9, .9,.626},
|
{0., .9, .9,.26},
|
||||||
}
|
}
|
||||||
local bar,crystal
|
local bar,crystal
|
||||||
local W,H
|
local W,H
|
||||||
|
|||||||
@@ -4,6 +4,8 @@ local int=math.floor
|
|||||||
local char,byte=string.char,string.byte
|
local char,byte=string.char,string.byte
|
||||||
local ins=table.insert
|
local ins=table.insert
|
||||||
|
|
||||||
|
local BAG,FIELD,MISSION,CUSTOMENV,GAME=BAG,FIELD,MISSION,CUSTOMENV,GAME
|
||||||
|
|
||||||
local DATA={}
|
local DATA={}
|
||||||
--Sep symbol: 33 (!)
|
--Sep symbol: 33 (!)
|
||||||
--Safe char: 34~126
|
--Safe char: 34~126
|
||||||
@@ -14,7 +16,6 @@ local DATA={}
|
|||||||
Example: "abcdefg" is [SZJLTOI], "a^aDb)" is [Z*63,Z*37,S*10]
|
Example: "abcdefg" is [SZJLTOI], "a^aDb)" is [Z*63,Z*37,S*10]
|
||||||
]]
|
]]
|
||||||
function DATA.copySequence()
|
function DATA.copySequence()
|
||||||
local BAG=BAG
|
|
||||||
local str=""
|
local str=""
|
||||||
|
|
||||||
local count=1
|
local count=1
|
||||||
@@ -33,10 +34,8 @@ function DATA.copySequence()
|
|||||||
return str
|
return str
|
||||||
end
|
end
|
||||||
function DATA.pasteSequence(str)
|
function DATA.pasteSequence(str)
|
||||||
local b
|
TABLE.cut(BAG)
|
||||||
|
local b,reg
|
||||||
local bag={}
|
|
||||||
local reg
|
|
||||||
for i=1,#str do
|
for i=1,#str do
|
||||||
b=byte(str,i)
|
b=byte(str,i)
|
||||||
if not reg then
|
if not reg then
|
||||||
@@ -47,21 +46,17 @@ function DATA.pasteSequence(str)
|
|||||||
end
|
end
|
||||||
else
|
else
|
||||||
if b>=97 and b<=125 then
|
if b>=97 and b<=125 then
|
||||||
ins(bag,reg)
|
ins(BAG,reg)
|
||||||
reg=b-96
|
reg=b-96
|
||||||
elseif b>=34 and b<=96 then
|
elseif b>=34 and b<=96 then
|
||||||
for _=1,b-32 do
|
for _=1,b-32 do
|
||||||
ins(bag,reg)
|
ins(BAG,reg)
|
||||||
end
|
end
|
||||||
reg=false
|
reg=false
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
if reg then
|
if reg then ins(BAG,reg)end
|
||||||
ins(bag,reg)
|
|
||||||
end
|
|
||||||
|
|
||||||
BAG=bag
|
|
||||||
return true
|
return true
|
||||||
end
|
end
|
||||||
|
|
||||||
@@ -98,7 +93,7 @@ function DATA.copyBoard(page)--Copy the [page] board
|
|||||||
end
|
end
|
||||||
str=str..S
|
str=str..S
|
||||||
end
|
end
|
||||||
return data.encode('string','base64',data.compress('string','zlib',str))
|
return STRING.packBin(str)
|
||||||
end
|
end
|
||||||
function DATA.copyBoards()
|
function DATA.copyBoards()
|
||||||
local out={}
|
local out={}
|
||||||
@@ -111,22 +106,18 @@ function DATA.pasteBoard(str,page)--Paste [str] data to [page] board
|
|||||||
if not page then page=1 end
|
if not page then page=1 end
|
||||||
if not FIELD[page]then FIELD[page]=DATA.newBoard()end
|
if not FIELD[page]then FIELD[page]=DATA.newBoard()end
|
||||||
local F=FIELD[page]
|
local F=FIELD[page]
|
||||||
local _,__
|
|
||||||
|
|
||||||
--Decode
|
--Decode
|
||||||
str=str:sub(str:find("%S"),str:find(".%s-$"))
|
str=STRING.unpackBin(str)
|
||||||
_,str=pcall(data.decode,'string','base64',str)
|
if not str then return end
|
||||||
if not _ then return end
|
|
||||||
_,str=pcall(data.decompress,'string','zlib',str)
|
|
||||||
if not _ then return end
|
|
||||||
|
|
||||||
local fX,fY=1,1--*ptr for Field(r*10+(c-1))
|
local fX,fY=1,1--*ptr for Field(r*10+(c-1))
|
||||||
local p=1
|
local p=1
|
||||||
while true do
|
while true do
|
||||||
_=byte(str,p)--1byte
|
local b=byte(str,p)--1byte
|
||||||
|
|
||||||
--Str end
|
--Str end
|
||||||
if not _ then
|
if not b then
|
||||||
if fX~=1 then
|
if fX~=1 then
|
||||||
return
|
return
|
||||||
else
|
else
|
||||||
@@ -134,11 +125,11 @@ function DATA.pasteBoard(str,page)--Paste [str] data to [page] board
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
__=_%32-1--Block id
|
local id=b%32-1--Block id
|
||||||
if __>26 then return end--Illegal blockid
|
if id>26 then return end--Illegal blockid
|
||||||
_=int(_/32)--Mode id
|
b=int(b/32)--Mode id
|
||||||
|
|
||||||
F[fY][fX]=__
|
F[fY][fX]=id
|
||||||
if fX<10 then
|
if fX<10 then
|
||||||
fX=fX+1
|
fX=fX+1
|
||||||
else
|
else
|
||||||
@@ -176,7 +167,6 @@ end
|
|||||||
]]
|
]]
|
||||||
function DATA.copyMission()
|
function DATA.copyMission()
|
||||||
local _
|
local _
|
||||||
local MISSION=MISSION
|
|
||||||
local str=""
|
local str=""
|
||||||
|
|
||||||
local count=1
|
local count=1
|
||||||
@@ -362,7 +352,7 @@ do--function DATA.saveRecording()
|
|||||||
--Filtering modes that cannot be saved
|
--Filtering modes that cannot be saved
|
||||||
for _,v in next,noRecList do
|
for _,v in next,noRecList do
|
||||||
if GAME.curModeName:find(v)then
|
if GAME.curModeName:find(v)then
|
||||||
LOG.print("Cannot save recording of this mode now!",COLOR.N)
|
LOG.print("Cannot save recording of this mode now!",'warn')
|
||||||
return
|
return
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
@@ -386,7 +376,7 @@ do--function DATA.saveRecording()
|
|||||||
FILE.save(REPLAY,'conf/replay')
|
FILE.save(REPLAY,'conf/replay')
|
||||||
return true
|
return true
|
||||||
else
|
else
|
||||||
LOG.print("Save failed: File already exists")
|
LOG.print("Save failed: File already exists",'error')
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -1,13 +1,21 @@
|
|||||||
local gc=love.graphics
|
local gc=love.graphics
|
||||||
|
local gc_push,gc_pop=gc.push,gc.pop
|
||||||
|
local gc_origin,gc_replaceTransform=gc.origin,gc.replaceTransform
|
||||||
|
local gc_setLineWidth,gc_setColor=gc.setLineWidth,gc.setColor
|
||||||
|
local gc_setShader=gc.setShader
|
||||||
|
local gc_draw,gc_rectangle,gc_line,gc_printf=gc.draw,gc.rectangle,gc.line,gc.printf
|
||||||
|
|
||||||
local ins,rem=table.insert,table.remove
|
local ins,rem=table.insert,table.remove
|
||||||
|
|
||||||
|
local SETTING,GAME,SCR=SETTING,GAME,SCR
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
--System
|
--System
|
||||||
function switchFullscreen()
|
function switchFullscreen()
|
||||||
SETTING.fullscreen=not SETTING.fullscreen
|
SETTING.fullscreen=not SETTING.fullscreen
|
||||||
love.window.setFullscreen(SETTING.fullscreen)
|
love.window.setFullscreen(SETTING.fullscreen)
|
||||||
love.resize(love.graphics.getWidth(),love.graphics.getHeight())
|
love.resize(gc.getWidth(),gc.getHeight())
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
@@ -228,7 +236,7 @@ function loadGame(M,ifQuickPlay,ifNet)--Load a mode and go to game scene
|
|||||||
if ifNet then
|
if ifNet then
|
||||||
SCN.go('net_game','swipeD')
|
SCN.go('net_game','swipeD')
|
||||||
else
|
else
|
||||||
drawableText.modeName:set(text.modes[M][1].." "..text.modes[M][2])
|
drawableText.modeName:set((text.modes[M][1]or M).." "..(text.modes[M][2]or""))
|
||||||
SCN.go('game',ifQuickPlay and'swipeD'or'fade_togame')
|
SCN.go('game',ifQuickPlay and'swipeD'or'fade_togame')
|
||||||
SFX.play('enter')
|
SFX.play('enter')
|
||||||
end
|
end
|
||||||
@@ -236,7 +244,8 @@ function loadGame(M,ifQuickPlay,ifNet)--Load a mode and go to game scene
|
|||||||
end
|
end
|
||||||
function gameOver()--Save record
|
function gameOver()--Save record
|
||||||
if GAME.replaying then return end
|
if GAME.replaying then return end
|
||||||
FILE.save(STAT,'conf/data')
|
trySave()
|
||||||
|
|
||||||
local M=GAME.curMode
|
local M=GAME.curMode
|
||||||
local R=M.getRank
|
local R=M.getRank
|
||||||
if R then
|
if R then
|
||||||
@@ -291,7 +300,61 @@ function gameOver()--Save record
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
function initPlayerPosition(sudden)--Set initial position for every player
|
function trySave()
|
||||||
|
if not GAME.statSaved and PLAYERS[1]and(PLAYERS[1].frameRun>300 or GAME.result)then
|
||||||
|
GAME.statSaved=true
|
||||||
|
STAT.game=STAT.game+1
|
||||||
|
mergeStat(STAT,PLAYERS[1].stat)
|
||||||
|
STAT.todayTime=STAT.todayTime+PLAYERS[1].stat.time
|
||||||
|
FILE.save(STAT,'conf/data')
|
||||||
|
end
|
||||||
|
end
|
||||||
|
do--function freshPlayerPosition(sudden)
|
||||||
|
local posLists={
|
||||||
|
--1~5
|
||||||
|
{
|
||||||
|
{340,75,1},
|
||||||
|
{965,390,.5},
|
||||||
|
{965,30,.5},
|
||||||
|
{20,390,.5},
|
||||||
|
{20,30,.5},
|
||||||
|
},
|
||||||
|
--6~17
|
||||||
|
(function()
|
||||||
|
local L={{340,75,1}}
|
||||||
|
for i=1,4 do ins(L,{15,-160+180*i,.25})end
|
||||||
|
for i=1,4 do ins(L,{180,-160+180*i,.25})end
|
||||||
|
for i=1,4 do ins(L,{950,-160+180*i,.25})end
|
||||||
|
for i=1,4 do ins(L,{1120,-160+180*i,.25})end
|
||||||
|
return L
|
||||||
|
end)(),
|
||||||
|
--18~31
|
||||||
|
(function()
|
||||||
|
local L={{340,75,1}}
|
||||||
|
for i=1,5 do ins(L,{10, -100+135*i,.18})end
|
||||||
|
for i=1,5 do ins(L,{120,-100+135*i,.18})end
|
||||||
|
for i=1,5 do ins(L,{230,-100+135*i,.18})end
|
||||||
|
for i=1,5 do ins(L,{940,-100+135*i,.18})end
|
||||||
|
for i=1,5 do ins(L,{1050,-100+135*i,.18})end
|
||||||
|
for i=1,5 do ins(L,{1160,-100+135*i,.18})end
|
||||||
|
return L
|
||||||
|
end)(),
|
||||||
|
--32~49
|
||||||
|
(function()
|
||||||
|
local L={{340,75,1}}
|
||||||
|
for i=1,4 do for j=1,6 do ins(L,{78*i-54,115*j-98,.09})end end
|
||||||
|
for i=9,12 do for j=1,6 do ins(L,{78*i+267,115*j-98,.09})end end
|
||||||
|
return L
|
||||||
|
end)(),
|
||||||
|
--50~99
|
||||||
|
(function()
|
||||||
|
local L={{340,75,1}}
|
||||||
|
for i=1,7 do for j=1,7 do ins(L,{46*i-36,97*j-72,.068})end end
|
||||||
|
for i=15,21 do for j=1,7 do ins(L,{46*i+264,97*j-72,.068})end end
|
||||||
|
return L
|
||||||
|
end)(),
|
||||||
|
}
|
||||||
|
function freshPlayerPosition(sudden)--Set initial position for every player
|
||||||
local L=PLY_ALIVE
|
local L=PLY_ALIVE
|
||||||
if not sudden then
|
if not sudden then
|
||||||
for i=1,#L do
|
for i=1,#L do
|
||||||
@@ -299,71 +362,36 @@ function initPlayerPosition(sudden)--Set initial position for every player
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
local posList
|
||||||
|
if #L<=5 then posList=posLists[1]
|
||||||
|
elseif #L<=17 then posList=posLists[2]
|
||||||
|
elseif #L<=31 then posList=posLists[3]
|
||||||
|
elseif #L<=49 then posList=posLists[4]
|
||||||
|
elseif #L<=99 then posList=posLists[5]
|
||||||
|
else error("TOO MANY PLAYERS!")
|
||||||
|
end
|
||||||
local method=sudden and'setPosition'or'movePosition'
|
local method=sudden and'setPosition'or'movePosition'
|
||||||
L[1][method](L[1],340,75,1)
|
for i=1,#L do L[i][method](L[i],unpack(posList[i]))end
|
||||||
if #L<=5 then
|
|
||||||
if L[2]then L[2][method](L[2],965,390,.5)end
|
|
||||||
if L[3]then L[3][method](L[3],965, 30,.5)end
|
|
||||||
if L[4]then L[4][method](L[4], 20,390,.5)end
|
|
||||||
if L[5]then L[5][method](L[5], 20, 30,.5)end
|
|
||||||
elseif #L<=17 then
|
|
||||||
for i=1,4 do if L[i+1]then L[i+1][method](L[i+1], 15, -160+180*i,.25)else return end end
|
|
||||||
for i=1,4 do if L[i+5]then L[i+5][method](L[i+5], 180,-160+180*i,.25)else return end end
|
|
||||||
for i=1,4 do if L[i+9]then L[i+9][method](L[i+9], 950,-160+180*i,.25)else return end end
|
|
||||||
for i=1,4 do if L[i+13]then L[i+13][method](L[i+13],1120,-160+180*i,.25)else return end end
|
|
||||||
elseif #L<=31 then
|
|
||||||
for i=1,5 do if L[i+1]then L[i+1][method](L[i+1], 10, -100+135*i,.18)else return end end
|
|
||||||
for i=1,5 do if L[i+6]then L[i+6][method](L[i+6], 120,-100+135*i,.18)else return end end
|
|
||||||
for i=1,5 do if L[i+11]then L[i+11][method](L[i+11],230,-100+135*i,.18)else return end end
|
|
||||||
for i=1,5 do if L[i+16]then L[i+16][method](L[i+16],940,-100+135*i,.18)else return end end
|
|
||||||
for i=1,5 do if L[i+21]then L[i+21][method](L[i+21],1050,-100+135*i,.18)else return end end
|
|
||||||
for i=1,5 do if L[i+26]then L[i+26][method](L[i+26],1160,-100+135*i,.18)else return end end
|
|
||||||
elseif #L<=49 then
|
|
||||||
local n=2
|
|
||||||
for i=1,4 do for j=1,6 do
|
|
||||||
if not L[n]then return end
|
|
||||||
L[n][method](L[n],78*i-54,115*j-98,.09)
|
|
||||||
n=n+1
|
|
||||||
end end
|
|
||||||
for i=9,12 do for j=1,6 do
|
|
||||||
if not L[n]then return end
|
|
||||||
L[n][method](L[n],78*i+267,115*j-98,.09)
|
|
||||||
n=n+1
|
|
||||||
end end
|
|
||||||
elseif #L<=99 then
|
|
||||||
local n=2
|
|
||||||
for i=1,7 do for j=1,7 do
|
|
||||||
if not L[n]then return end
|
|
||||||
L[n][method](L[n],46*i-36,97*j-72,.068)
|
|
||||||
n=n+1
|
|
||||||
end end
|
|
||||||
for i=15,21 do for j=1,7 do
|
|
||||||
if not L[n]then return end
|
|
||||||
L[n][method](L[n],46*i+264,97*j-72,.068)
|
|
||||||
n=n+1
|
|
||||||
end end
|
|
||||||
else
|
|
||||||
error("TOO MANY PLAYERS!")
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
do--function dumpBasicConfig()
|
do--function dumpBasicConfig()
|
||||||
local gameSetting={
|
local gameSetting={
|
||||||
--Tuning
|
--Tuning
|
||||||
"das","arr","dascut","sddas","sdarr",
|
'das','arr','dascut','sddas','sdarr',
|
||||||
"ihs","irs","ims","RS","swap",
|
'ihs','irs','ims','RS','swap',
|
||||||
|
|
||||||
--System
|
--System
|
||||||
"skin","face",
|
'skin','face',
|
||||||
|
|
||||||
--Graphic
|
--Graphic
|
||||||
"block","ghost","center","bagLine",
|
'block','ghost','center','bagLine',
|
||||||
"dropFX","moveFX","shakeFX",
|
'dropFX','moveFX','shakeFX',
|
||||||
"text","highCam","nextPos",
|
'text','highCam','nextPos',
|
||||||
|
|
||||||
--Unnecessary graphic
|
--Unnecessary graphic
|
||||||
-- "grid","smooth",
|
-- 'grid','smooth',
|
||||||
-- "lockFX","clearFX","splashFX","atkFX",
|
-- 'lockFX','clearFX','splashFX','atkFX',
|
||||||
-- "score",
|
-- 'score',
|
||||||
}
|
}
|
||||||
function dumpBasicConfig()
|
function dumpBasicConfig()
|
||||||
local S={}
|
local S={}
|
||||||
@@ -374,7 +402,6 @@ do--function dumpBasicConfig()
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
do--function resetGameData(args)
|
do--function resetGameData(args)
|
||||||
local YIELD=YIELD
|
|
||||||
local function tick_showMods()
|
local function tick_showMods()
|
||||||
local time=0
|
local time=0
|
||||||
while true do
|
while true do
|
||||||
@@ -392,16 +419,16 @@ do--function resetGameData(args)
|
|||||||
end
|
end
|
||||||
local gameSetting={
|
local gameSetting={
|
||||||
--Tuning
|
--Tuning
|
||||||
"das","arr","dascut","sddas","sdarr",
|
'das','arr','dascut','sddas','sdarr',
|
||||||
"ihs","irs","ims","RS","swap",
|
'ihs','irs','ims','RS','swap',
|
||||||
|
|
||||||
--System
|
--System
|
||||||
"skin","face",
|
'skin','face',
|
||||||
|
|
||||||
--Graphic
|
--Graphic
|
||||||
"block","ghost","center","smooth","grid","bagLine",
|
'block','ghost','center','smooth','grid','bagLine',
|
||||||
"lockFX","dropFX","moveFX","clearFX","splashFX","shakeFX","atkFX",
|
'lockFX','dropFX','moveFX','clearFX','splashFX','shakeFX','atkFX',
|
||||||
"text","score",'warn',"highCam","nextPos",
|
'text','score','warn','highCam','nextPos',
|
||||||
}
|
}
|
||||||
local function copyGameSetting()
|
local function copyGameSetting()
|
||||||
local S={}
|
local S={}
|
||||||
@@ -416,10 +443,7 @@ do--function resetGameData(args)
|
|||||||
end
|
end
|
||||||
function resetGameData(args,seed)
|
function resetGameData(args,seed)
|
||||||
if not args then args=""end
|
if not args then args=""end
|
||||||
if PLAYERS[1]and not GAME.replaying and(PLAYERS[1].frameRun>400 or GAME.result)then
|
trySave()
|
||||||
mergeStat(STAT,PLAYERS[1].stat)
|
|
||||||
STAT.todayTime=STAT.todayTime+PLAYERS[1].stat.time
|
|
||||||
end
|
|
||||||
|
|
||||||
GAME.result=false
|
GAME.result=false
|
||||||
GAME.warnLVL0=0
|
GAME.warnLVL0=0
|
||||||
@@ -437,6 +461,7 @@ do--function resetGameData(args)
|
|||||||
GAME.setting=copyGameSetting()
|
GAME.setting=copyGameSetting()
|
||||||
GAME.rep={}
|
GAME.rep={}
|
||||||
GAME.recording=true
|
GAME.recording=true
|
||||||
|
GAME.statSaved=false
|
||||||
GAME.replaying=false
|
GAME.replaying=false
|
||||||
GAME.rank=0
|
GAME.rank=0
|
||||||
math.randomseed(TIME())
|
math.randomseed(TIME())
|
||||||
@@ -444,11 +469,22 @@ do--function resetGameData(args)
|
|||||||
|
|
||||||
destroyPlayers()
|
destroyPlayers()
|
||||||
GAME.curMode.load()
|
GAME.curMode.load()
|
||||||
initPlayerPosition(args:find'q')
|
freshPlayerPosition(args:find'q')
|
||||||
VK.restore()
|
VK.restore()
|
||||||
if GAME.modeEnv.task then
|
if GAME.modeEnv.task then
|
||||||
|
local task=GAME.modeEnv.task
|
||||||
|
if type(task)=='function'then
|
||||||
for i=1,#PLAYERS do
|
for i=1,#PLAYERS do
|
||||||
PLAYERS[i]:newTask(GAME.modeEnv.task)
|
PLAYERS[i]:newTask(task)
|
||||||
|
end
|
||||||
|
elseif type(task)=='table'then
|
||||||
|
for i=1,#PLAYERS do
|
||||||
|
for _,t in ipairs(task)do
|
||||||
|
PLAYERS[i]:newTask(t)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
else
|
||||||
|
LOG.print("Wrong task type",'warn')
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
BG.set(GAME.modeEnv.bg)
|
BG.set(GAME.modeEnv.bg)
|
||||||
@@ -467,7 +503,6 @@ do--function resetGameData(args)
|
|||||||
GAME.secDangerous=false
|
GAME.secDangerous=false
|
||||||
GAME.stage=1
|
GAME.stage=1
|
||||||
end
|
end
|
||||||
STAT.game=STAT.game+1
|
|
||||||
FREEROW.reset(30*#PLAYERS)
|
FREEROW.reset(30*#PLAYERS)
|
||||||
TASK.removeTask_code(tick_showMods)
|
TASK.removeTask_code(tick_showMods)
|
||||||
if GAME.setting.allowMod then
|
if GAME.setting.allowMod then
|
||||||
@@ -495,7 +530,7 @@ do--function checkWarning()
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
GAME.warnLVL0=math.log(height-(P1.gameEnv.fieldH-5)+P1.atkBuffer.sum*.8)
|
GAME.warnLVL0=math.log(height-(P1.gameEnv.fieldH-5)+P1.atkBufferSum*.8)
|
||||||
end
|
end
|
||||||
local _=GAME.warnLVL
|
local _=GAME.warnLVL
|
||||||
if _<GAME.warnLVL0 then
|
if _<GAME.warnLVL0 then
|
||||||
@@ -508,7 +543,7 @@ do--function checkWarning()
|
|||||||
GAME.warnLVL=max(GAME.warnLVL-.026,0)
|
GAME.warnLVL=max(GAME.warnLVL-.026,0)
|
||||||
end
|
end
|
||||||
if GAME.warnLVL>1.126 and P1.frameRun%30==0 then
|
if GAME.warnLVL>1.126 and P1.frameRun%30==0 then
|
||||||
SFX.fplay("warning",SETTING.sfx_warn)
|
SFX.fplay('warning',SETTING.sfx_warn)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
@@ -516,50 +551,33 @@ end
|
|||||||
|
|
||||||
|
|
||||||
--Game draw
|
--Game draw
|
||||||
do--function drawFWM()
|
|
||||||
local m={
|
|
||||||
string.char(230,184,184,230,136,143,228,189,156,232,128,133,58,77,114,90,95,50,54,10,228,187,187,228,189,149,232,167,134,233,162,145,47,231,155,180,230,146,173,228,184,141,229,190,151,229,135,186,231,142,176,230,173,164,230,176,180,229,141,176,10,228,187,187,228,189,149,232,189,172,232,191,176,229,163,176,230,152,142,230,151,160,230,149,136),
|
|
||||||
string.char(230,184,184,230,136,143,228,189,156,232,128,133,58,77,114,90,95,50,54,10,228,187,187,228,189,149,232,167,134,233,162,145,47,231,155,180,230,146,173,228,184,141,229,190,151,229,135,186,231,142,176,230,173,164,230,176,180,229,141,176,10,228,187,187,228,189,149,232,189,172,232,191,176,229,163,176,230,152,142,230,151,160,230,149,136),
|
|
||||||
string.char(230,184,184,230,136,143,228,189,156,232,128,133,58,77,114,90,95,50,54,10,228,187,187,228,189,149,232,167,134,233,162,145,47,231,155,180,230,146,173,228,184,141,229,190,151,229,135,186,231,142,176,230,173,164,230,176,180,229,141,176,10,228,187,187,228,189,149,232,189,172,232,191,176,229,163,176,230,152,142,230,151,160,230,149,136),
|
|
||||||
string.char(65,117,116,104,111,114,58,32,77,114,90,95,50,54,10,82,101,99,111,114,100,105,110,103,115,32,99,111,110,116,97,105,110,105,110,103,32,116,104,105,115,10,119,97,116,101,114,109,97,114,107,32,97,114,101,32,117,110,97,117,116,104,111,114,105,122,101,100),
|
|
||||||
string.char(67,114,195,169,97,116,101,117,114,32,100,117,32,106,101,117,58,32,77,114,90,95,50,54,10,69,110,114,101,103,105,115,116,114,101,109,101,110,116,32,110,111,110,32,97,117,116,111,114,105,115,195,169,10,99,111,110,116,101,110,97,110,116,32,99,101,32,102,105,108,105,103,114,97,110,101),
|
|
||||||
string.char(65,117,116,111,114,58,32,77,114,90,95,50,54,10,71,114,97,98,97,99,105,195,179,110,32,110,111,32,97,117,116,111,114,105,122,97,100,97,32,113,117,101,10,99,111,110,116,105,101,110,101,32,101,115,116,97,32,109,97,114,99,97,32,100,101,32,97,103,117,97),
|
|
||||||
string.char(65,117,116,111,114,32,100,111,32,106,111,103,111,58,32,77,114,90,95,50,54,10,71,114,97,118,97,195,167,195,181,101,115,32,99,111,110,116,101,110,100,111,32,101,115,116,97,32,77,97,114,99,97,10,100,101,32,195,161,103,117,97,32,110,195,163,111,32,115,195,163,111,32,97,117,116,111,114,105,122,97,100,97,115),
|
|
||||||
string.char(65,117,116,104,111,114,58,32,77,114,90,95,50,54,10,82,101,99,111,114,100,105,110,103,115,32,99,111,110,116,97,105,110,105,110,103,32,116,104,105,115,10,119,97,116,101,114,109,97,114,107,32,97,114,101,32,117,110,97,117,116,104,111,114,105,122,101,100),
|
|
||||||
}
|
|
||||||
--你竟然找到了这里!那么在动手之前读读下面这些吧。
|
|
||||||
--【魔幻错别字躲关键字搜索警告,看得懂就行】
|
|
||||||
--千万不要为了在网络公共场合发视屏或者直播需要而擅自删除这部分代码!
|
|
||||||
--录制视屏上传到公共场合(包括但不限于任何视屏平台/论坛/好几十个人及以上的非方块社区/群等)很可能会对Techmino未来的发展有负面影响
|
|
||||||
--如果被TTC发现,随时可能被他们用DMCA从法律层面强迫停止开发,到时候谁都没得玩。这是真的,已经有几个方块这么死了…
|
|
||||||
--氵印限制还可以减少低质量视屏泛滥,也能减轻过多不是真的感兴趣路人玩家入坑可能带来的压力
|
|
||||||
--想发视屏的话请先向作者申请,描述录制的大致内容,同意了才可以去关闭氵印
|
|
||||||
--等Techmino发展到一定程度之后会解除这个限制
|
|
||||||
--最后,别把藏在这里的东西截图/复制出去哦~
|
|
||||||
--感谢您对Techmino的支持!!!
|
|
||||||
local sin=math.sin
|
|
||||||
local setFont,TIME,mStr=setFont,TIME,mStr
|
|
||||||
function drawFWM()
|
|
||||||
local t=TIME()
|
|
||||||
setFont(25)
|
|
||||||
gc.setColor(1,1,1,.2+.1*(sin(3*t)+sin(2.6*t)))
|
|
||||||
mStr(m[_G["\83\69\84\84\73\78\71"]["\108\97\110\103"]or m[1]],240,60+26*sin(t))
|
|
||||||
end
|
|
||||||
end
|
|
||||||
do--function drawSelfProfile()
|
do--function drawSelfProfile()
|
||||||
|
local lvIcon=setmetatable({},{__index=function(self,lv)
|
||||||
|
local img={25,25}
|
||||||
|
|
||||||
|
ins(img,{"clear",0,0,0})
|
||||||
|
ins(img,{"setLW",4})
|
||||||
|
ins(img,{"setCL",.5,.8,1})
|
||||||
|
ins(img,{"dRect",2,2,21,21})
|
||||||
|
--TODO: draw with lv
|
||||||
|
|
||||||
|
img=DOGC(img)
|
||||||
|
rawset(self,lv,img)
|
||||||
|
return img
|
||||||
|
end})
|
||||||
local name
|
local name
|
||||||
local textObject,scaleK,width,offY
|
local textObject,scaleK,width,offY
|
||||||
function drawSelfProfile()
|
function drawSelfProfile()
|
||||||
local selfAvatar=USERS.getAvatar(USER.uid)
|
local selfAvatar=USERS.getAvatar(USER.uid)
|
||||||
gc.push('transform')
|
gc_push('transform')
|
||||||
gc.translate(1280,0)
|
gc_replaceTransform(SCR.xOy_ur)
|
||||||
|
|
||||||
--Draw avatar
|
--Draw avatar
|
||||||
gc.setLineWidth(2)
|
gc_setLineWidth(2)
|
||||||
gc.setColor(.3,.3,.3,.8)gc.rectangle('fill',-300,0,300,80)
|
gc_setColor(.3,.3,.3,.8)gc_rectangle('fill',-300,0,300,80)
|
||||||
gc.setColor(1,1,1)gc.rectangle('line',-300,0,300,80)
|
gc_setColor(1,1,1)gc_rectangle('line',-300,0,300,80)
|
||||||
gc.rectangle('line',-73,7,66,66,2)
|
gc_rectangle('line',-73,7,66,66,2)
|
||||||
gc.draw(selfAvatar,-72,8,nil,.5)
|
gc_draw(selfAvatar,-72,8,nil,.5)
|
||||||
|
|
||||||
--Draw username
|
--Draw username
|
||||||
if name~=USERS.getUsername(USER.uid)then
|
if name~=USERS.getUsername(USER.uid)then
|
||||||
@@ -569,27 +587,50 @@ do--function drawSelfProfile()
|
|||||||
scaleK=210/math.max(width,210)
|
scaleK=210/math.max(width,210)
|
||||||
offY=textObject:getHeight()/2
|
offY=textObject:getHeight()/2
|
||||||
end
|
end
|
||||||
gc.draw(textObject,-82,26,nil,scaleK,nil,width,offY)
|
gc_draw(textObject,-82,26,nil,scaleK,nil,width,offY)
|
||||||
|
|
||||||
--Draw lv. & xp.
|
--Draw lv. & xp.
|
||||||
gc.draw(TEXTURE.lvIcon[USER.lv],-295,50)
|
gc_draw(lvIcon[USER.lv],-295,50)
|
||||||
gc.line(-270,55,-80,55,-80,70,-270,70)
|
gc_line(-270,55,-80,55,-80,70,-270,70)
|
||||||
gc.rectangle('fill',-210,55,150*USER.xp/USER.lv/USER.lv,15)
|
gc_rectangle('fill',-210,55,150*USER.xp/USER.lv/USER.lv,15)
|
||||||
|
|
||||||
gc.pop()
|
gc_pop()
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
function drawOnlinePlayerCount()
|
||||||
|
setFont(20)
|
||||||
|
gc_setColor(1,1,1)
|
||||||
|
gc_push('transform')
|
||||||
|
gc_replaceTransform(SCR.xOy_ur)
|
||||||
|
gc_printf(("%s: %s/%s/%s"):format(text.onlinePlayerCount,NET.UserCount,NET.PlayCount,NET.StreamCount),-600,80,594,'right')
|
||||||
|
gc_pop()
|
||||||
|
end
|
||||||
|
do--function drawWarning()
|
||||||
|
local shader_warning=SHADER.warning
|
||||||
function drawWarning()
|
function drawWarning()
|
||||||
if SETTING.warn and GAME.warnLVL>0 then
|
if SETTING.warn and GAME.warnLVL>0 then
|
||||||
gc.push('transform')
|
gc_push('transform')
|
||||||
gc.origin()
|
gc_origin()
|
||||||
SHADER.warning:send("level",GAME.warnLVL)
|
shader_warning:send("level",GAME.warnLVL)
|
||||||
gc.setShader(SHADER.warning)
|
gc_setShader(shader_warning)
|
||||||
gc.rectangle('fill',0,0,SCR.w,SCR.h)
|
gc_rectangle('fill',0,0,SCR.w,SCR.h)
|
||||||
gc.setShader()
|
gc_setShader()
|
||||||
gc.pop()
|
gc_pop()
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
end
|
||||||
|
do--function drawSystemInfo(
|
||||||
|
--你竟然找到了這裏!那麽在動手之前讀讀下面這些吧。
|
||||||
|
--千萬不要為了在網絡公共場合發視頻或者直播需要而擅自刪除這部分代碼!
|
||||||
|
--錄製視頻上傳到公共場合(包括但不限於任何視頻平臺/論壇/好幾十個人及以上的非方塊社區/群等)很可能會對Techmino未來的發展有負面影響
|
||||||
|
--如果被TTC發現,隨時可能被他們用DMCA從法律層面強迫停止開發,到時候誰都沒得玩。這是真的,已經有幾個方塊這麽死了…
|
||||||
|
--氵印限製還可以減少低質量視頻泛濫,也能減輕過多不是真的感興趣路人玩家入坑可能帶來的壓力
|
||||||
|
--想發視頻的話請先向作者申請,描述錄製的大致內容,同意了才可以去關閉氵印
|
||||||
|
--等Techmino發展到一定程度之後會解除這個限製
|
||||||
|
--最後,別把藏在這裏的東西截圖/復製出去哦~
|
||||||
|
--感謝您對Techmino的支持!!!
|
||||||
|
loadstring(love.data.decode('string','base64',"CWxvY2FsIGc9bG92ZS5ncmFwaGljcztsb2NhbCB4LHMsVCxkLGM9Zy5uZXdUZXh0KGdldEZvbnQoMjUpKSxtYXRoLnNpbixUSU1FLGcuZHJhdyxnLnNldENvbG9yO3g6c2V0ZigiQXV0aOS9nOiAhTpNclpfMjZcbkFscGhh5YaF5rWL56aB5q2i5b2V5bGPL+ebtOaSrVxuTm8gcmVjb3JkaW5nL3N0cmVhbWluZyIsMzAwLCdjZW50ZXInKWZ1bmN0aW9uIGRyYXdGV00oKWxvY2FsIHQ9VCgpYygxLDEsMSwuMTYrLjA2KihzKDMuNTUqdCkrcygyLjYqdCkpKWQoeCwzMCw3Mys1MypzKHQqLjI2KSllbmQK"))()
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@@ -598,19 +639,21 @@ function backScene()SCN.back()end
|
|||||||
do--function goScene(name,style)
|
do--function goScene(name,style)
|
||||||
local cache={}
|
local cache={}
|
||||||
function goScene(name,style)
|
function goScene(name,style)
|
||||||
if not cache[name]then
|
local hash=style and name..style or name
|
||||||
cache[name]=function()SCN.go(name,style)end
|
if not cache[hash]then
|
||||||
|
cache[hash]=function()SCN.go(name,style)end
|
||||||
end
|
end
|
||||||
return cache[name]
|
return cache[hash]
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
do--function swapScene(name,style)
|
do--function swapScene(name,style)
|
||||||
local cache={}
|
local cache={}
|
||||||
function swapScene(name,style)
|
function swapScene(name,style)
|
||||||
if not cache[name]then
|
local hash=style and name..style or name
|
||||||
cache[name]=function()SCN.swapTo(name,style)end
|
if not cache[hash]then
|
||||||
|
cache[hash]=function()SCN.swapTo(name,style)end
|
||||||
end
|
end
|
||||||
return cache[name]
|
return cache[hash]
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
do--function pressKey(k)
|
do--function pressKey(k)
|
||||||
@@ -623,11 +666,14 @@ do--function pressKey(k)
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
do--CUS/SETXXX(k)
|
do--CUS/SETXXX(k)
|
||||||
local c,s=CUSTOMENV,SETTING
|
local CUSTOMENV=CUSTOMENV
|
||||||
function CUSval(k)return function()return c[k]end end
|
function CUSval(k)return function()return CUSTOMENV[k]end end
|
||||||
function SETval(k)return function()return s[k]end end
|
function ROOMval(k)return function()return ROOMENV[k]end end
|
||||||
function CUSrev(k)return function()c[k]=not c[k]end end
|
function SETval(k)return function()return SETTING[k]end end
|
||||||
function SETrev(k)return function()s[k]=not s[k]end end
|
function CUSrev(k)return function()CUSTOMENV[k]=not CUSTOMENV[k]end end
|
||||||
function CUSsto(k)return function(i)c[k]=i end end
|
function ROOMrev(k)return function()ROOMENV[k]=not ROOMENV[k]end end
|
||||||
function SETsto(k)return function(i)s[k]=i end end
|
function SETrev(k)return function()SETTING[k]=not SETTING[k]end end
|
||||||
|
function CUSsto(k)return function(i)CUSTOMENV[k]=i end end
|
||||||
|
function ROOMsto(k)return function(i)ROOMENV[k]=i end end
|
||||||
|
function SETsto(k)return function(i)SETTING[k]=i end end
|
||||||
end
|
end
|
||||||
@@ -164,6 +164,7 @@ GAME={--Global game data
|
|||||||
modeEnv=false, --Current gamemode environment
|
modeEnv=false, --Current gamemode environment
|
||||||
setting={}, --Game settings
|
setting={}, --Game settings
|
||||||
rep={}, --Recording list, key,time,key,time...
|
rep={}, --Recording list, key,time,key,time...
|
||||||
|
statSaved=false, --If recording saved
|
||||||
recording=false, --If recording
|
recording=false, --If recording
|
||||||
replaying=false, --If replaying
|
replaying=false, --If replaying
|
||||||
saved=false, --If recording saved
|
saved=false, --If recording saved
|
||||||
@@ -183,8 +184,8 @@ ROYALEDATA={
|
|||||||
}
|
}
|
||||||
|
|
||||||
--Userdata tables
|
--Userdata tables
|
||||||
RANKS=FILE.load("conf/unlock")or{sprint_10l=0}--Ranks of modes
|
RANKS=FILE.load('conf/unlock')or{sprint_10l=0}--Ranks of modes
|
||||||
USER=FILE.load("conf/user")or{--User infomation
|
USER=FILE.load('conf/user')or{--User infomation
|
||||||
--Network infos
|
--Network infos
|
||||||
uid=false,
|
uid=false,
|
||||||
authToken=false,
|
authToken=false,
|
||||||
@@ -192,6 +193,7 @@ USER=FILE.load("conf/user")or{--User infomation
|
|||||||
--Local data
|
--Local data
|
||||||
xp=0,lv=1,
|
xp=0,lv=1,
|
||||||
}
|
}
|
||||||
|
|
||||||
customEnv0={
|
customEnv0={
|
||||||
version=VERSION.code,
|
version=VERSION.code,
|
||||||
|
|
||||||
@@ -213,6 +215,8 @@ customEnv0={
|
|||||||
--Rule
|
--Rule
|
||||||
sequence='bag',
|
sequence='bag',
|
||||||
fieldH=20,
|
fieldH=20,
|
||||||
|
heightLimit=1e99,
|
||||||
|
bufferLimit=1e99,
|
||||||
|
|
||||||
ospin=true,
|
ospin=true,
|
||||||
fineKill=false,
|
fineKill=false,
|
||||||
@@ -226,14 +230,59 @@ customEnv0={
|
|||||||
opponent="X",
|
opponent="X",
|
||||||
life=0,
|
life=0,
|
||||||
pushSpeed=3,
|
pushSpeed=3,
|
||||||
|
garbageSpeed=1,
|
||||||
missionKill=false,
|
missionKill=false,
|
||||||
|
|
||||||
--Else
|
--Else
|
||||||
bg='blockfall',
|
bg='blockfall',
|
||||||
bgm='infinite',
|
bgm='hang out',
|
||||||
|
}
|
||||||
|
CUSTOMENV=FILE.load('conf/customEnv')--gameEnv for cutsom game
|
||||||
|
if not CUSTOMENV or CUSTOMENV.version~=VERSION.code then
|
||||||
|
CUSTOMENV=TABLE.copy(customEnv0)
|
||||||
|
else
|
||||||
|
TABLE.complete(customEnv0,CUSTOMENV)
|
||||||
|
end
|
||||||
|
ROOMENV={
|
||||||
|
--Room config
|
||||||
|
capacity=5,
|
||||||
|
|
||||||
|
--Basic
|
||||||
|
drop=30,
|
||||||
|
lock=60,
|
||||||
|
wait=0,
|
||||||
|
fall=0,
|
||||||
|
|
||||||
|
--Control
|
||||||
|
nextCount=6,
|
||||||
|
holdCount=1,
|
||||||
|
infHold=false,
|
||||||
|
phyHold=false,
|
||||||
|
|
||||||
|
--Visual
|
||||||
|
bone=false,
|
||||||
|
|
||||||
|
--Rule
|
||||||
|
life=0,
|
||||||
|
pushSpeed=5,
|
||||||
|
garbageSpeed=2,
|
||||||
|
visible='show',
|
||||||
|
freshLimit=15,
|
||||||
|
|
||||||
|
fieldH=20,
|
||||||
|
heightLimit=1e99,
|
||||||
|
bufferLimit=1e99,
|
||||||
|
|
||||||
|
ospin=true,
|
||||||
|
fineKill=false,
|
||||||
|
b2bKill=false,
|
||||||
|
easyFresh=true,
|
||||||
|
deepDrop=false,
|
||||||
|
|
||||||
|
--Else
|
||||||
|
bg='blockfall',
|
||||||
|
bgm='hang out',
|
||||||
}
|
}
|
||||||
CUSTOMENV=FILE.load("conf/customEnv")--gameEnv for cutsom game
|
|
||||||
if not CUSTOMENV or CUSTOMENV.version~=VERSION.code then CUSTOMENV=TABLE.copy(customEnv0)end
|
|
||||||
SETTING={--Settings
|
SETTING={--Settings
|
||||||
--Tuning
|
--Tuning
|
||||||
das=10,arr=2,dascut=0,
|
das=10,arr=2,dascut=0,
|
||||||
@@ -255,7 +304,6 @@ SETTING={--Settings
|
|||||||
10,13,2,8
|
10,13,2,8
|
||||||
},
|
},
|
||||||
face={0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
|
face={0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
|
||||||
dataSaving=false,
|
|
||||||
|
|
||||||
--Graphic
|
--Graphic
|
||||||
block=true,ghost=.3,center=1,
|
block=true,ghost=.3,center=1,
|
||||||
@@ -274,18 +322,20 @@ SETTING={--Settings
|
|||||||
|
|
||||||
text=true,
|
text=true,
|
||||||
score=true,
|
score=true,
|
||||||
warn=true,
|
bufferWarn=true,
|
||||||
highCam=false,
|
showSpike=true,
|
||||||
nextPos=false,
|
highCam=true,
|
||||||
|
nextPos=true,
|
||||||
fullscreen=true,
|
fullscreen=true,
|
||||||
bg=true,
|
bg=true,
|
||||||
powerInfo=false,
|
powerInfo=false,
|
||||||
clickFX=true,
|
clickFX=true,
|
||||||
|
warn=true,
|
||||||
|
|
||||||
--Sound
|
--Sound
|
||||||
sfx=1,
|
sfx=1,
|
||||||
sfx_spawn=.3,
|
sfx_spawn=0,
|
||||||
sfx_warn=.3,
|
sfx_warn=.4,
|
||||||
bgm=.7,
|
bgm=.7,
|
||||||
stereo=.7,
|
stereo=.7,
|
||||||
vib=0,
|
vib=0,
|
||||||
@@ -296,6 +346,7 @@ SETTING={--Settings
|
|||||||
VKSFX=.2,--SFX volume
|
VKSFX=.2,--SFX volume
|
||||||
VKVIB=0,--VIB
|
VKVIB=0,--VIB
|
||||||
VKSwitch=false,--If disp
|
VKSwitch=false,--If disp
|
||||||
|
VKSkin=1,--If disp
|
||||||
VKTrack=false,--If tracked
|
VKTrack=false,--If tracked
|
||||||
VKDodge=false,--If dodge
|
VKDodge=false,--If dodge
|
||||||
VKTchW=.3,--Touch-Pos Weight
|
VKTchW=.3,--Touch-Pos Weight
|
||||||
@@ -303,9 +354,9 @@ SETTING={--Settings
|
|||||||
VKIcon=true,--If disp icon
|
VKIcon=true,--If disp icon
|
||||||
VKAlpha=.3,
|
VKAlpha=.3,
|
||||||
}
|
}
|
||||||
local S=FILE.load("conf/settings")
|
local S=FILE.load('conf/settings')
|
||||||
if S then TABLE.update(S,SETTING)end
|
if S then TABLE.update(S,SETTING)end
|
||||||
S=FILE.load("conf/data")
|
S=FILE.load('conf/data')
|
||||||
if S then--Statistics
|
if S then--Statistics
|
||||||
STAT=S
|
STAT=S
|
||||||
else
|
else
|
||||||
@@ -324,7 +375,7 @@ else
|
|||||||
todayTime=0,
|
todayTime=0,
|
||||||
}for i=1,29 do STAT.clear[i]={0,0,0,0,0,0}STAT.spin[i]={0,0,0,0,0,0,0}end
|
}for i=1,29 do STAT.clear[i]={0,0,0,0,0,0}STAT.spin[i]={0,0,0,0,0,0,0}end
|
||||||
end
|
end
|
||||||
keyMap=FILE.load("conf/key")or{--Key setting
|
keyMap=FILE.load('conf/key')or{--Key setting
|
||||||
keyboard={
|
keyboard={
|
||||||
left=1,right=2,x=3,z=4,c=5,
|
left=1,right=2,x=3,z=4,c=5,
|
||||||
up=6,down=7,space=8,a=9,s=10,
|
up=6,down=7,space=8,a=9,s=10,
|
||||||
@@ -336,7 +387,7 @@ keyMap=FILE.load("conf/key")or{--Key setting
|
|||||||
leftshoulder=0,
|
leftshoulder=0,
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
VK_org=FILE.load("conf/virtualkey")or{--Virtualkey layout, refresh all VKs' position with this before each game
|
VK_org=FILE.load('conf/virtualkey')or{--Virtualkey layout, refresh all VKs' position with this before each game
|
||||||
{ava=true, x=80, y=720-200, r=80},--moveLeft
|
{ava=true, x=80, y=720-200, r=80},--moveLeft
|
||||||
{ava=true, x=320, y=720-200, r=80},--moveRight
|
{ava=true, x=320, y=720-200, r=80},--moveRight
|
||||||
{ava=true, x=1280-80, y=720-200, r=80},--rotRight
|
{ava=true, x=1280-80, y=720-200, r=80},--rotRight
|
||||||
@@ -358,4 +409,4 @@ VK_org=FILE.load("conf/virtualkey")or{--Virtualkey layout, refresh all VKs' posi
|
|||||||
{ava=false, x=900, y=50, r=80},--addToLeft
|
{ava=false, x=900, y=50, r=80},--addToLeft
|
||||||
{ava=false, x=1000, y=50, r=80},--addToRight
|
{ava=false, x=1000, y=50, r=80},--addToRight
|
||||||
}
|
}
|
||||||
REPLAY=FILE.load("conf/replay")or{}
|
REPLAY=FILE.load('conf/replay')or{}
|
||||||
@@ -91,48 +91,48 @@ do
|
|||||||
}
|
}
|
||||||
TRS={
|
TRS={
|
||||||
{
|
{
|
||||||
[01]={"-1+0","-1+1","+0-2","-1+2","+0+1"},
|
[01]={'-1+0','-1+1','+0-2','-1+2','+0+1'},
|
||||||
[10]={"+1+0","+1-1","+0+2","+1-2","+1-2"},
|
[10]={'+1+0','+1-1','+0+2','+1-2','+1-2'},
|
||||||
[03]={"+1+0","+1+1","+0-2","+1-1","+1-2"},
|
[03]={'+1+0','+1+1','+0-2','+1-1','+1-2'},
|
||||||
[30]={"-1+0","-1-1","+0+2","-1+2","+0-1"},
|
[30]={'-1+0','-1-1','+0+2','-1+2','+0-1'},
|
||||||
[12]={"+1+0","+1-1","+0+2","+1+2"},
|
[12]={'+1+0','+1-1','+0+2','+1+2'},
|
||||||
[21]={"-1+0","-1+1","+0-2","-1-2"},
|
[21]={'-1+0','-1+1','+0-2','-1-2'},
|
||||||
[32]={"-1+0","-1-1","+0+2","-1+2"},
|
[32]={'-1+0','-1-1','+0+2','-1+2'},
|
||||||
[23]={"+1+0","+1+1","+0-2","+1-2"},
|
[23]={'+1+0','+1+1','+0-2','+1-2'},
|
||||||
[02]={"+1+0","-1+0","+0-1","+0+1"},
|
[02]={'+1+0','-1+0','+0-1','+0+1'},
|
||||||
[20]={"-1+0","+1+0","+0+1","+0-1"},
|
[20]={'-1+0','+1+0','+0+1','+0-1'},
|
||||||
[13]={"+0-1","+0+1","+0-2"},
|
[13]={'+0-1','+0+1','+0-2'},
|
||||||
[31]={"+0+1","+0-1","+0+2"},
|
[31]={'+0+1','+0-1','+0+2'},
|
||||||
},--Z
|
},--Z
|
||||||
false,--S
|
false,--S
|
||||||
{
|
{
|
||||||
[01]={"-1+0","-1+1","+1+0","+0-2","+1+1"},
|
[01]={'-1+0','-1+1','+1+0','+0-2','+1+1'},
|
||||||
[10]={"+1+0","+1-1","-1+0","+0+2","+1+2"},
|
[10]={'+1+0','+1-1','-1+0','+0+2','+1+2'},
|
||||||
[03]={"+1+0","+1+1","+0-2","+1-2","+1-1","+0+1"},
|
[03]={'+1+0','+1+1','+0-2','+1-2','+1-1','+0+1'},
|
||||||
[30]={"-1+0","-1-1","+0+2","-1+2","+0-1","-1+1"},
|
[30]={'-1+0','-1-1','+0+2','-1+2','+0-1','-1+1'},
|
||||||
[12]={"+1+0","+1-1","+1+1","-1+0","+0-1","+0+2","+1+2"},
|
[12]={'+1+0','+1-1','+1+1','-1+0','+0-1','+0+2','+1+2'},
|
||||||
[21]={"-1+0","-1+1","-1-1","+1+0","+0+1","+0-2","-1-2"},
|
[21]={'-1+0','-1+1','-1-1','+1+0','+0+1','+0-2','-1-2'},
|
||||||
[32]={"-1+0","-1-1","+1+0","+0+2","-1+2","-1+1"},
|
[32]={'-1+0','-1-1','+1+0','+0+2','-1+2','-1+1'},
|
||||||
[23]={"+1+0","+1-1","-1+0","+1+1","+0-2","+1-2"},
|
[23]={'+1+0','+1-1','-1+0','+1+1','+0-2','+1-2'},
|
||||||
[02]={"-1+0","+1+0","+0-1","+0+1"},
|
[02]={'-1+0','+1+0','+0-1','+0+1'},
|
||||||
[20]={"+1+0","-1+0","+0+1","+0-1"},
|
[20]={'+1+0','-1+0','+0+1','+0-1'},
|
||||||
[13]={"+0-1","+0+1","+1+0"},
|
[13]={'+0-1','+0+1','+1+0'},
|
||||||
[31]={"+0+1","+0-1","-1+0"},
|
[31]={'+0+1','+0-1','-1+0'},
|
||||||
},--J
|
},--J
|
||||||
false,--L
|
false,--L
|
||||||
{
|
{
|
||||||
[01]={"-1+0","-1+1","+0-2","-1-2","+0+1"},
|
[01]={'-1+0','-1+1','+0-2','-1-2','+0+1'},
|
||||||
[10]={"+1+0","+1-1","+0+2","+1+2","+0-1"},
|
[10]={'+1+0','+1-1','+0+2','+1+2','+0-1'},
|
||||||
[03]={"+1+0","+1+1","+0-2","+1-2","+0+1"},
|
[03]={'+1+0','+1+1','+0-2','+1-2','+0+1'},
|
||||||
[30]={"-1+0","-1-1","+0+2","-1+2","+0-1"},
|
[30]={'-1+0','-1-1','+0+2','-1+2','+0-1'},
|
||||||
[12]={"+1+0","+1-1","+0-1","-1-1","+0+2","+1+2"},
|
[12]={'+1+0','+1-1','+0-1','-1-1','+0+2','+1+2'},
|
||||||
[21]={"-1+0","+0-2","-1-2","+1+1"},
|
[21]={'-1+0','+0-2','-1-2','+1+1'},
|
||||||
[32]={"-1+0","-1-1","+0-1","+1-1","+0+2","-1+2"},
|
[32]={'-1+0','-1-1','+0-1','+1-1','+0+2','-1+2'},
|
||||||
[23]={"+1+0","+0-2","+1-2","-1+1"},
|
[23]={'+1+0','+0-2','+1-2','-1+1'},
|
||||||
[02]={"-1+0","+1+0","+0+1"},
|
[02]={'-1+0','+1+0','+0+1'},
|
||||||
[20]={"+1+0","-1+0","+0-1"},
|
[20]={'+1+0','-1+0','+0-1'},
|
||||||
[13]={"+0-1","+0+1","+1+0","+0-2","+0+2"},
|
[13]={'+0-1','+0+1','+1+0','+0-2','+0+2'},
|
||||||
[31]={"+0-1","+0+1","-1+0","+0-2","+0+2"},
|
[31]={'+0-1','+0+1','-1+0','+0-2','+0+2'},
|
||||||
},--T
|
},--T
|
||||||
function(P,d)
|
function(P,d)
|
||||||
if P.gameEnv.easyFresh then
|
if P.gameEnv.easyFresh then
|
||||||
@@ -179,111 +179,111 @@ do
|
|||||||
end
|
end
|
||||||
end,--O
|
end,--O
|
||||||
{
|
{
|
||||||
[01]={"+0+1","+1+0","-2+0","-2-1","+1+2"},
|
[01]={'+0+1','+1+0','-2+0','-2-1','+1+2'},
|
||||||
[10]={"+2+0","-1+0","-1-2","+2+1","+0+1"},
|
[10]={'+2+0','-1+0','-1-2','+2+1','+0+1'},
|
||||||
[03]={"+0+1","-1+0","+2+0","+2-1","-1+2"},
|
[03]={'+0+1','-1+0','+2+0','+2-1','-1+2'},
|
||||||
[30]={"-2+0","+1+0","+1-2","-2+1","+0+1"},
|
[30]={'-2+0','+1+0','+1-2','-2+1','+0+1'},
|
||||||
[12]={"-1+0","+2+0","+2-1","+0-1","-1+2"},
|
[12]={'-1+0','+2+0','+2-1','+0-1','-1+2'},
|
||||||
[21]={"-2+0","+1+0","+1-2","-2+1","+0+1"},
|
[21]={'-2+0','+1+0','+1-2','-2+1','+0+1'},
|
||||||
[32]={"+1+0","-2+0","-2-1","+0-1","+1+2"},
|
[32]={'+1+0','-2+0','-2-1','+0-1','+1+2'},
|
||||||
[23]={"+2+0","-1+0","-1-2","+2+1","+0+1"},
|
[23]={'+2+0','-1+0','-1-2','+2+1','+0+1'},
|
||||||
[02]={"-1+0","+1+0","+0-1","+0+1"},
|
[02]={'-1+0','+1+0','+0-1','+0+1'},
|
||||||
[20]={"+1+0","-1+0","+0+1","+0-1"},
|
[20]={'+1+0','-1+0','+0+1','+0-1'},
|
||||||
[13]={"+0-1","-1+0","+1+0","+0+1"},
|
[13]={'+0-1','-1+0','+1+0','+0+1'},
|
||||||
[31]={"+0-1","+1+0","-1+0","+0+1"},
|
[31]={'+0-1','+1+0','-1+0','+0+1'},
|
||||||
},--I
|
},--I
|
||||||
{
|
{
|
||||||
[01]={"-1+0","+0+1","+1+1","+0-3","+0+2","+0+3","-1+2"},
|
[01]={'-1+0','+0+1','+1+1','+0-3','+0+2','+0+3','-1+2'},
|
||||||
[10]={"+1+0","+0-1","-1-1","+0-2","+0-3","+0+3","+1-2"},
|
[10]={'+1+0','+0-1','-1-1','+0-2','+0-3','+0+3','+1-2'},
|
||||||
[03]={"+1+0","+0-3","+0+1","+0+2","+0+3","+1+2"},
|
[03]={'+1+0','+0-3','+0+1','+0+2','+0+3','+1+2'},
|
||||||
[30]={"-1+0","+0+1","+0-2","+0-3","+0+3","-1-2"},
|
[30]={'-1+0','+0+1','+0-2','+0-3','+0+3','-1-2'},
|
||||||
},--Z5
|
},--Z5
|
||||||
false,--S5
|
false,--S5
|
||||||
{
|
{
|
||||||
[01]={"-1+0","-1+1","+0-2","-1-2","-1-1","+0+1"},
|
[01]={'-1+0','-1+1','+0-2','-1-2','-1-1','+0+1'},
|
||||||
[10]={"+1+0","+1-1","+0+2","+1+2","+0-1","+1+1"},
|
[10]={'+1+0','+1-1','+0+2','+1+2','+0-1','+1+1'},
|
||||||
[03]={"+1+0","+1+1","+0-2","-1+1"},
|
[03]={'+1+0','+1+1','+0-2','-1+1'},
|
||||||
[30]={"-1+0","-1-1","+0+2","-1+2"},
|
[30]={'-1+0','-1-1','+0+2','-1+2'},
|
||||||
[12]={"+1+0","+1-1","+0+2","+1+2","+1+1"},
|
[12]={'+1+0','+1-1','+0+2','+1+2','+1+1'},
|
||||||
[21]={"-1+0","-1-1","-1+1","+0-2","-1-2","-1-1"},
|
[21]={'-1+0','-1-1','-1+1','+0-2','-1-2','-1-1'},
|
||||||
[32]={"-1+0","-1-1","-1+1","+0-1","+0+2","-1+2"},
|
[32]={'-1+0','-1-1','-1+1','+0-1','+0+2','-1+2'},
|
||||||
[23]={"+1+0","+1+1","-1+0","+0-2","+1-2"},
|
[23]={'+1+0','+1+1','-1+0','+0-2','+1-2'},
|
||||||
[02]={"-1+0","+0-1","+0+1"},
|
[02]={'-1+0','+0-1','+0+1'},
|
||||||
[20]={"+1+0","+0+1","+0-1"},
|
[20]={'+1+0','+0+1','+0-1'},
|
||||||
[13]={"+1+0","+0+1","-1+0"},
|
[13]={'+1+0','+0+1','-1+0'},
|
||||||
[31]={"-1+0","+0-1","+1+0"},
|
[31]={'-1+0','+0-1','+1+0'},
|
||||||
},--P
|
},--P
|
||||||
false,--Q
|
false,--Q
|
||||||
{
|
{
|
||||||
[01]={"-1+0","+1+0","-1+1","+0-2","+0-3"},
|
[01]={'-1+0','+1+0','-1+1','+0-2','+0-3'},
|
||||||
[10]={"+1+0","+1-1","-1+0","+0+2","+0+3"},
|
[10]={'+1+0','+1-1','-1+0','+0+2','+0+3'},
|
||||||
[03]={"+1+0","+1-1","+0+1","+0-2","+0-3"},
|
[03]={'+1+0','+1-1','+0+1','+0-2','+0-3'},
|
||||||
[30]={"-1+1","+1+0","+0-1","+0+2","+0+3"},
|
[30]={'-1+1','+1+0','+0-1','+0+2','+0+3'},
|
||||||
[12]={"+1+0","+0-1","-1+0","+0+2"},
|
[12]={'+1+0','+0-1','-1+0','+0+2'},
|
||||||
[21]={"-1+0","+0+1","+1+0","+0-2"},
|
[21]={'-1+0','+0+1','+1+0','+0-2'},
|
||||||
[32]={"-1+0","+0+1","-1+1","+1+0","+0+2","-2+0"},
|
[32]={'-1+0','+0+1','-1+1','+1+0','+0+2','-2+0'},
|
||||||
[23]={"+1+0","+1-1","+0-1","-1+0","+0-2","+2+0"},
|
[23]={'+1+0','+1-1','+0-1','-1+0','+0-2','+2+0'},
|
||||||
[02]={"+1+0","-1+0","-1-1"},
|
[02]={'+1+0','-1+0','-1-1'},
|
||||||
[20]={"-1+0","+1+0","+1+1"},
|
[20]={'-1+0','+1+0','+1+1'},
|
||||||
[13]={"+0-1","-1+1","+0+1"},
|
[13]={'+0-1','-1+1','+0+1'},
|
||||||
[31]={"+0-1","+1-1","+0+1"},
|
[31]={'+0-1','+1-1','+0+1'},
|
||||||
},--F
|
},--F
|
||||||
false,--E
|
false,--E
|
||||||
{
|
{
|
||||||
[01]={"+0-1","-1-1","+1+0","+1+1","+0-3","-1+0","+0+2","-1+2"},
|
[01]={'+0-1','-1-1','+1+0','+1+1','+0-3','-1+0','+0+2','-1+2'},
|
||||||
[10]={"+1+0","+0-1","-1-1","+0-2","-1+1","+0-3","+1-2","+0+1"},
|
[10]={'+1+0','+0-1','-1-1','+0-2','-1+1','+0-3','+1-2','+0+1'},
|
||||||
[03]={"+0-1","+1-1","-1+0","-1+1","+0-3","+1+0","+0+2","+1+2"},
|
[03]={'+0-1','+1-1','-1+0','-1+1','+0-3','+1+0','+0+2','+1+2'},
|
||||||
[30]={"-1+0","+0-1","+1-1","+0-2","+1+1","+0-3","-1-2","+0+1"},
|
[30]={'-1+0','+0-1','+1-1','+0-2','+1+1','+0-3','-1-2','+0+1'},
|
||||||
[12]={"+1+0","-1+0","+0-2","+0-3","+0+1","-1+1"},
|
[12]={'+1+0','-1+0','+0-2','+0-3','+0+1','-1+1'},
|
||||||
[21]={"+1-1","-1+0","+1+0","+0-1","+0+2","+0+3"},
|
[21]={'+1-1','-1+0','+1+0','+0-1','+0+2','+0+3'},
|
||||||
[32]={"-1+0","+1+0","+0-2","+0-3","+0+1","+1+1"},
|
[32]={'-1+0','+1+0','+0-2','+0-3','+0+1','+1+1'},
|
||||||
[23]={"-1-1","+1+0","-1+0","+0-1","+0+2","+0+3"},
|
[23]={'-1-1','+1+0','-1+0','+0-1','+0+2','+0+3'},
|
||||||
[02]={"+0-1","+0+1","+0+2"},
|
[02]={'+0-1','+0+1','+0+2'},
|
||||||
[20]={"+0-1","+0+1","+0-2"},
|
[20]={'+0-1','+0+1','+0-2'},
|
||||||
[13]={"+1+0","-1+1","-2+0"},
|
[13]={'+1+0','-1+1','-2+0'},
|
||||||
[31]={"-1+0","+1+1","+2+0"},
|
[31]={'-1+0','+1+1','+2+0'},
|
||||||
},--T5
|
},--T5
|
||||||
{
|
{
|
||||||
[01]={"-1+0","-1+1","+0-2","-1-2"},
|
[01]={'-1+0','-1+1','+0-2','-1-2'},
|
||||||
[10]={"+1+0","+1-1","+0+2","+1+2"},
|
[10]={'+1+0','+1-1','+0+2','+1+2'},
|
||||||
[03]={"+1+0","+1+1","+0-2","+1-2"},
|
[03]={'+1+0','+1+1','+0-2','+1-2'},
|
||||||
[30]={"-1+0","-1-1","+0-2","-1+2"},
|
[30]={'-1+0','-1-1','+0-2','-1+2'},
|
||||||
[12]={"+1+0","+1-1","+1+1"},
|
[12]={'+1+0','+1-1','+1+1'},
|
||||||
[21]={"-1-1","-1+1","-1-1"},
|
[21]={'-1-1','-1+1','-1-1'},
|
||||||
[32]={"-1+0","-1-1","-1+1"},
|
[32]={'-1+0','-1-1','-1+1'},
|
||||||
[23]={"+1-1","+1+1","+1-1"},
|
[23]={'+1-1','+1+1','+1-1'},
|
||||||
[02]={"+0+1"},
|
[02]={'+0+1'},
|
||||||
[20]={"+0-1"},
|
[20]={'+0-1'},
|
||||||
[13]={"+0-1","+0+1","+1+0"},
|
[13]={'+0-1','+0+1','+1+0'},
|
||||||
[31]={"+0-1","+0+1","-1+0"},
|
[31]={'+0-1','+0+1','-1+0'},
|
||||||
},--U
|
},--U
|
||||||
{
|
{
|
||||||
[01]={"+0+1","-1+0","+0-2","-1-2"},
|
[01]={'+0+1','-1+0','+0-2','-1-2'},
|
||||||
[10]={"+0+1","+1+0","+0-2","+1-2"},
|
[10]={'+0+1','+1+0','+0-2','+1-2'},
|
||||||
[03]={"+0-1","+0+1","+0+2"},
|
[03]={'+0-1','+0+1','+0+2'},
|
||||||
[30]={"+0-1","+0+1","+0-2"},
|
[30]={'+0-1','+0+1','+0-2'},
|
||||||
[12]={"+0-1","+0+1"},
|
[12]={'+0-1','+0+1'},
|
||||||
[21]={"+0-1","+0-2"},
|
[21]={'+0-1','+0-2'},
|
||||||
[32]={"+1+0","-1+0"},
|
[32]={'+1+0','-1+0'},
|
||||||
[23]={"-1+0","+1+0"},
|
[23]={'-1+0','+1+0'},
|
||||||
[02]={"-1+1","+1-1"},
|
[02]={'-1+1','+1-1'},
|
||||||
[20]={"+1-1","-1+1"},
|
[20]={'+1-1','-1+1'},
|
||||||
[13]={"+1+1","-1-1"},
|
[13]={'+1+1','-1-1'},
|
||||||
[31]={"-1-1","+1+1"},
|
[31]={'-1-1','+1+1'},
|
||||||
},--V
|
},--V
|
||||||
{
|
{
|
||||||
[01]={"+0-1","-1+0","+1+0","+1-1","+0+2"},
|
[01]={'+0-1','-1+0','+1+0','+1-1','+0+2'},
|
||||||
[10]={"+0-1","-1-1","+0+1","+0-2","+1-2","+0+2"},
|
[10]={'+0-1','-1-1','+0+1','+0-2','+1-2','+0+2'},
|
||||||
[03]={"+1+0","+1+1","+0-1","+0-2","+0-3","+1-1","+0+1","+0+2","+0+3"},
|
[03]={'+1+0','+1+1','+0-1','+0-2','+0-3','+1-1','+0+1','+0+2','+0+3'},
|
||||||
[30]={"-1+0","-1+1","+0-1","+0-2","+0-3","-1-1","+0+1","+0+2","+0+3"},
|
[30]={'-1+0','-1+1','+0-1','+0-2','+0-3','-1-1','+0+1','+0+2','+0+3'},
|
||||||
[12]={"+1+0","+0-1","-2+0","+1+1","-1+0","+0+1","-1-1"},
|
[12]={'+1+0','+0-1','-2+0','+1+1','-1+0','+0+1','-1-1'},
|
||||||
[21]={"-1+0","+0-1","+2+0","-1+1","+1+0","+0+1","+1-1"},
|
[21]={'-1+0','+0-1','+2+0','-1+1','+1+0','+0+1','+1-1'},
|
||||||
[32]={"+0-1","+1+0","+0+1","-1+0","-1-1","+0+2"},
|
[32]={'+0-1','+1+0','+0+1','-1+0','-1-1','+0+2'},
|
||||||
[23]={"+0-1","+1-1","+0+1","+0-2","-1-2","+0+2"},
|
[23]={'+0-1','+1-1','+0+1','+0-2','-1-2','+0+2'},
|
||||||
[02]={"+0-1","-1+0"},
|
[02]={'+0-1','-1+0'},
|
||||||
[20]={"+0+1","+1+0"},
|
[20]={'+0+1','+1+0'},
|
||||||
[13]={"+0+1","-1+0"},
|
[13]={'+0+1','-1+0'},
|
||||||
[31]={"+0-1","+1+0"},
|
[31]={'+0-1','+1+0'},
|
||||||
},--W
|
},--W
|
||||||
function(P,d)
|
function(P,d)
|
||||||
if P.type=='human'then SFX.play('rotate',nil,P:getCenterX()*.15)end
|
if P.type=='human'then SFX.play('rotate',nil,P:getCenterX()*.15)end
|
||||||
@@ -301,89 +301,89 @@ do
|
|||||||
P:freshBlock('fresh')
|
P:freshBlock('fresh')
|
||||||
end,--X
|
end,--X
|
||||||
{
|
{
|
||||||
[01]={"-1+0","-1+1","+0-3","-1+1","-1+2","+0+1"},
|
[01]={'-1+0','-1+1','+0-3','-1+1','-1+2','+0+1'},
|
||||||
[10]={"-1+0","+1-1","+0+3","+1-1","+1-2","+0+1"},
|
[10]={'-1+0','+1-1','+0+3','+1-1','+1-2','+0+1'},
|
||||||
[03]={"+0-1","+1-1","-1+0","+1+1","+0-2","+1-2","+0-3","+1-3","-1+1"},
|
[03]={'+0-1','+1-1','-1+0','+1+1','+0-2','+1-2','+0-3','+1-3','-1+1'},
|
||||||
[30]={"+0+1","-1+1","+1+0","-1-1","+0+2","-1+2","+0+3","-1+3","+1-1"},
|
[30]={'+0+1','-1+1','+1+0','-1-1','+0+2','-1+2','+0+3','-1+3','+1-1'},
|
||||||
[12]={"+1+0","+1-1","+0-1","+1-2","+0-2","+1+1","-1+0","+0+2","+1+2"},
|
[12]={'+1+0','+1-1','+0-1','+1-2','+0-2','+1+1','-1+0','+0+2','+1+2'},
|
||||||
[21]={"-1+0","-1+1","+0+1","-1+2","+0+2","-1-1","+1+0","+0-2","-1-2"},
|
[21]={'-1+0','-1+1','+0+1','-1+2','+0+2','-1-1','+1+0','+0-2','-1-2'},
|
||||||
[32]={"-1+0","-1+1","-1-1","+1+0","+0+2","-1+2","+0-2"},
|
[32]={'-1+0','-1+1','-1-1','+1+0','+0+2','-1+2','+0-2'},
|
||||||
[23]={"+1+0","+1-1","+1+1","-1+0","+0-2","+1-2","+0+2"},
|
[23]={'+1+0','+1-1','+1+1','-1+0','+0-2','+1-2','+0+2'},
|
||||||
[02]={"+0-1","+1-1","-1+0","+2-1"},
|
[02]={'+0-1','+1-1','-1+0','+2-1'},
|
||||||
[20]={"+0+1","-1+1","+1+0","-2+1"},
|
[20]={'+0+1','-1+1','+1+0','-2+1'},
|
||||||
[13]={"-1+0","-1-1","+0+1","-1-2"},
|
[13]={'-1+0','-1-1','+0+1','-1-2'},
|
||||||
[31]={"+1+0","+1+1","+0-1","+1+2"},
|
[31]={'+1+0','+1+1','+0-1','+1+2'},
|
||||||
},--J5
|
},--J5
|
||||||
false,--L5
|
false,--L5
|
||||||
{
|
{
|
||||||
[01]={"-1+0","-1+0","-1+1","+1+0","-1+2","-1-1","+0-3","+0+1"},
|
[01]={'-1+0','-1+0','-1+1','+1+0','-1+2','-1-1','+0-3','+0+1'},
|
||||||
[10]={"-1+0","+1+0","+1-1","+1+0","+1-2","+1+1","+0+3","+0+1"},
|
[10]={'-1+0','+1+0','+1-1','+1+0','+1-2','+1+1','+0+3','+0+1'},
|
||||||
[03]={"+0-1","+1+0","+1-1","-1+0","+1+1","+0-2","+1-2","+0-3","+1-3","-1+1"},
|
[03]={'+0-1','+1+0','+1-1','-1+0','+1+1','+0-2','+1-2','+0-3','+1-3','-1+1'},
|
||||||
[30]={"+0+1","-1+0","-1+1","+1+0","-1-1","+0+2","-1+2","+0+3","-1+3","+1-1"},
|
[30]={'+0+1','-1+0','-1+1','+1+0','-1-1','+0+2','-1+2','+0+3','-1+3','+1-1'},
|
||||||
[12]={"+1+0","+1-1","+0-1","+1-2","+0-2","+1+1","-1+0","+0+2","+1+2"},
|
[12]={'+1+0','+1-1','+0-1','+1-2','+0-2','+1+1','-1+0','+0+2','+1+2'},
|
||||||
[21]={"-1+0","-1+1","+0+1","-1+2","+0+2","-1-1","+1+0","+0-2","-1-2"},
|
[21]={'-1+0','-1+1','+0+1','-1+2','+0+2','-1-1','+1+0','+0-2','-1-2'},
|
||||||
[32]={"+0-1","-1+0","-1+1","-1-1","+1+0","+0+2","-1+2","+0-2"},
|
[32]={'+0-1','-1+0','-1+1','-1-1','+1+0','+0+2','-1+2','+0-2'},
|
||||||
[23]={"+0+1","+1+0","+1-1","+1+1","-1+0","+0-2","+1-2","+0+2"},
|
[23]={'+0+1','+1+0','+1-1','+1+1','-1+0','+0-2','+1-2','+0+2'},
|
||||||
[02]={"+0-1","+1-1","-1+0","+2-1","+0+1"},
|
[02]={'+0-1','+1-1','-1+0','+2-1','+0+1'},
|
||||||
[20]={"+0+1","-1+1","+1+0","-2+1","+0-1"},
|
[20]={'+0+1','-1+1','+1+0','-2+1','+0-1'},
|
||||||
[13]={"-1+0","-1-1","+0+1","-1-2"},
|
[13]={'-1+0','-1-1','+0+1','-1-2'},
|
||||||
[31]={"+1+0","+1+1","+0-1","+1+2"},
|
[31]={'+1+0','+1+1','+0-1','+1+2'},
|
||||||
},--R
|
},--R
|
||||||
false,--Y
|
false,--Y
|
||||||
{
|
{
|
||||||
[01]={"-1+0","-1+1","+0+1","+1+0","-1+2","-2+0","+0-2"},
|
[01]={'-1+0','-1+1','+0+1','+1+0','-1+2','-2+0','+0-2'},
|
||||||
[10]={"+1+0","-1+0","+0-1","+1-1","+1-2","+2+0","+0+2"},
|
[10]={'+1+0','-1+0','+0-1','+1-1','+1-2','+2+0','+0+2'},
|
||||||
[03]={"-1+0","+1-1","+0-2","+0-3","+1+0","+1-2","+1-3","+0+1","-1+1"},
|
[03]={'-1+0','+1-1','+0-2','+0-3','+1+0','+1-2','+1-3','+0+1','-1+1'},
|
||||||
[30]={"-1+0","+1-1","+1-2","+1+0","+0-2","+1-3","-1+2","+0+3","-1+3"},
|
[30]={'-1+0','+1-1','+1-2','+1+0','+0-2','+1-3','-1+2','+0+3','-1+3'},
|
||||||
[12]={"-1+0","+1-1","-1-1","+1-2","+1+0","+0-2","+1-3","-1+2","+0+3","-1+3"},
|
[12]={'-1+0','+1-1','-1-1','+1-2','+1+0','+0-2','+1-3','-1+2','+0+3','-1+3'},
|
||||||
[21]={"-1+0","+1-1","+1+1","+0-2","+0-3","+1+0","+1-2","+1-3","+0+1","-1+1"},
|
[21]={'-1+0','+1-1','+1+1','+0-2','+0-3','+1+0','+1-2','+1-3','+0+1','-1+1'},
|
||||||
[32]={"-1+0","+0-1","-1-2","+1-1","+1+0","+1+1","+0+2","+0+3"},
|
[32]={'-1+0','+0-1','-1-2','+1-1','+1+0','+1+1','+0+2','+0+3'},
|
||||||
[23]={"+0-2","+0-3","+1+2","+1+0","+0+1","-1+1","+0-1","+0+2"},
|
[23]={'+0-2','+0-3','+1+2','+1+0','+0+1','-1+1','+0-1','+0+2'},
|
||||||
[02]={"-1+0","+0+2","+0-1"},
|
[02]={'-1+0','+0+2','+0-1'},
|
||||||
[20]={"+1+0","+0-2","+0+1"},
|
[20]={'+1+0','+0-2','+0+1'},
|
||||||
[13]={"-1+0","-1-1","+0+1","+1+2"},
|
[13]={'-1+0','-1-1','+0+1','+1+2'},
|
||||||
[31]={"+1+0","+1+1","+0-1","-1-2"},
|
[31]={'+1+0','+1+1','+0-1','-1-2'},
|
||||||
},--N
|
},--N
|
||||||
false,--H
|
false,--H
|
||||||
{
|
{
|
||||||
[01]={"+1-1","+1+0","+1+1","+0+1","-1+1","-1+0","-1-1","+0-1","+0-2","-2-1","-2-2","+2+0","+2-1","+2-2","+1+2","+2+2","-1+2","-2+2"},
|
[01]={'+1-1','+1+0','+1+1','+0+1','-1+1','-1+0','-1-1','+0-1','+0-2','-2-1','-2-2','+2+0','+2-1','+2-2','+1+2','+2+2','-1+2','-2+2'},
|
||||||
[10]={"-1+0","-1-1","+0-1","+1-1","-2-2","-2-1","-2+0","-1-2","+0-2","+1-2","+2-2","-1+1","-2+1","-2+2","+1+0","+2+0","+2-1","+0+1","+1-1","+2-2"},
|
[10]={'-1+0','-1-1','+0-1','+1-1','-2-2','-2-1','-2+0','-1-2','+0-2','+1-2','+2-2','-1+1','-2+1','-2+2','+1+0','+2+0','+2-1','+0+1','+1-1','+2-2'},
|
||||||
[03]={"-1-1","-1+0","-1+1","-0+1","+1+1","+1+0","+1-1","-0-1","-0-2","+2-1","+2-2","-2+0","-2-1","-2-2","-1+2","-2+2","+1+2","+2+2"},
|
[03]={'-1-1','-1+0','-1+1','-0+1','+1+1','+1+0','+1-1','-0-1','-0-2','+2-1','+2-2','-2+0','-2-1','-2-2','-1+2','-2+2','+1+2','+2+2'},
|
||||||
[30]={"+1+0","+1-1","-0-1","-1-1","+2-2","+2-1","+2+0","+1-2","-0-2","-1-2","-2-2","+1+1","+2+1","+2+2","-1+0","-2+0","-2-1","+0+1","-1-1","-2-2"},
|
[30]={'+1+0','+1-1','-0-1','-1-1','+2-2','+2-1','+2+0','+1-2','-0-2','-1-2','-2-2','+1+1','+2+1','+2+2','-1+0','-2+0','-2-1','+0+1','-1-1','-2-2'},
|
||||||
},--I5
|
},--I5
|
||||||
{
|
{
|
||||||
[01]={"-1+0","-1-1","+1+1","-1+1"},
|
[01]={'-1+0','-1-1','+1+1','-1+1'},
|
||||||
[10]={"-1+0","+1+0","-1-1","+1+1"},
|
[10]={'-1+0','+1+0','-1-1','+1+1'},
|
||||||
[03]={"+1+0","+1-1","-1+1","+1+1"},
|
[03]={'+1+0','+1-1','-1+1','+1+1'},
|
||||||
[30]={"+1+0","-1+0","+1-1","-1+1"},
|
[30]={'+1+0','-1+0','+1-1','-1+1'},
|
||||||
},--I3
|
},--I3
|
||||||
{
|
{
|
||||||
[01]={"-1+0","+1+0"},
|
[01]={'-1+0','+1+0'},
|
||||||
[10]={"+1+0","-1+0"},
|
[10]={'+1+0','-1+0'},
|
||||||
[03]={"+0+1","+0-1"},
|
[03]={'+0+1','+0-1'},
|
||||||
[30]={"+0-1","+0+1"},
|
[30]={'+0-1','+0+1'},
|
||||||
[12]={"+0+1","+0-1"},
|
[12]={'+0+1','+0-1'},
|
||||||
[21]={"+0-1","+0+1"},
|
[21]={'+0-1','+0+1'},
|
||||||
[32]={"-1+0","+1+0"},
|
[32]={'-1+0','+1+0'},
|
||||||
[23]={"+1+0","-1+0"},
|
[23]={'+1+0','-1+0'},
|
||||||
[02]={"+0-1","+1-1","-1-1"},
|
[02]={'+0-1','+1-1','-1-1'},
|
||||||
[20]={"+0+1","-1+1","+1+1"},
|
[20]={'+0+1','-1+1','+1+1'},
|
||||||
[13]={"+0-1","-1-1","+1-1"},
|
[13]={'+0-1','-1-1','+1-1'},
|
||||||
[31]={"+0+1","+1+1","-1+1"},
|
[31]={'+0+1','+1+1','-1+1'},
|
||||||
},--C
|
},--C
|
||||||
{
|
{
|
||||||
[01]={"-1+0","+0+1"},
|
[01]={'-1+0','+0+1'},
|
||||||
[10]={"+1+0","+0+1"},
|
[10]={'+1+0','+0+1'},
|
||||||
[03]={"+1+0","+0+1"},
|
[03]={'+1+0','+0+1'},
|
||||||
[30]={"-1+0","+0+1"},
|
[30]={'-1+0','+0+1'},
|
||||||
[12]={"+1+0","+0+2"},
|
[12]={'+1+0','+0+2'},
|
||||||
[21]={"+0-1","-1+0"},
|
[21]={'+0-1','-1+0'},
|
||||||
[32]={"-1+0","+0+2"},
|
[32]={'-1+0','+0+2'},
|
||||||
[23]={"+0-1","-1+0"},
|
[23]={'+0-1','-1+0'},
|
||||||
[02]={"+0-1","+0+1"},
|
[02]={'+0-1','+0+1'},
|
||||||
[20]={"+0+1","+0-1"},
|
[20]={'+0+1','+0-1'},
|
||||||
[13]={"-1+0","+1+0"},
|
[13]={'-1+0','+1+0'},
|
||||||
[31]={"+1+0","-1+0"},
|
[31]={'+1+0','-1+0'},
|
||||||
},--I2
|
},--I2
|
||||||
nil,--O1
|
nil,--O1
|
||||||
}
|
}
|
||||||
@@ -405,14 +405,14 @@ local SRS
|
|||||||
do
|
do
|
||||||
SRS={
|
SRS={
|
||||||
{
|
{
|
||||||
[01]={"-1+0","-1+1","+0-2","-1-2"},
|
[01]={'-1+0','-1+1','+0-2','-1-2'},
|
||||||
[10]={"+1+0","+1-1","+0+2","+1+2"},
|
[10]={'+1+0','+1-1','+0+2','+1+2'},
|
||||||
[03]={"+1+0","+1+1","+0-2","+1-2"},
|
[03]={'+1+0','+1+1','+0-2','+1-2'},
|
||||||
[30]={"-1+0","-1-1","+0+2","-1+2"},
|
[30]={'-1+0','-1-1','+0+2','-1+2'},
|
||||||
[12]={"+1+0","+1-1","+0+2","+1+2"},
|
[12]={'+1+0','+1-1','+0+2','+1+2'},
|
||||||
[21]={"-1+0","-1+1","+0-2","-1-2"},
|
[21]={'-1+0','-1+1','+0-2','-1-2'},
|
||||||
[32]={"-1+0","-1-1","+0+2","-1+2"},
|
[32]={'-1+0','-1-1','+0+2','-1+2'},
|
||||||
[23]={"+1+0","+1+1","+0-2","+1-2"},
|
[23]={'+1+0','+1+1','+0-2','+1-2'},
|
||||||
[02]={},[20]={},[13]={},[31]={},
|
[02]={},[20]={},[13]={},[31]={},
|
||||||
},--Z
|
},--Z
|
||||||
false,--S
|
false,--S
|
||||||
@@ -421,14 +421,14 @@ do
|
|||||||
false,--T
|
false,--T
|
||||||
noKickSet,--O
|
noKickSet,--O
|
||||||
{
|
{
|
||||||
[01]={"-2+0","+1+0","-2-1","+1+2"},
|
[01]={'-2+0','+1+0','-2-1','+1+2'},
|
||||||
[10]={"+2+0","-1+0","+2+1","-1-2"},
|
[10]={'+2+0','-1+0','+2+1','-1-2'},
|
||||||
[12]={"-1+0","+2+0","-1+2","+2-1"},
|
[12]={'-1+0','+2+0','-1+2','+2-1'},
|
||||||
[21]={"+1+0","-2+0","+1-2","-2+1"},
|
[21]={'+1+0','-2+0','+1-2','-2+1'},
|
||||||
[23]={"+2+0","-1+0","+2+1","-1-2"},
|
[23]={'+2+0','-1+0','+2+1','-1-2'},
|
||||||
[32]={"-2+0","+1+0","-2-1","+1+2"},
|
[32]={'-2+0','+1+0','-2-1','+1+2'},
|
||||||
[30]={"+1+0","-2+0","+1-2","-2+1"},
|
[30]={'+1+0','-2+0','+1-2','-2+1'},
|
||||||
[03]={"-1+0","+2+0","-1+2","+2-1"},
|
[03]={'-1+0','+2+0','-1+2','+2-1'},
|
||||||
[02]={},[20]={},[13]={},[31]={},
|
[02]={},[20]={},[13]={},[31]={},
|
||||||
}--I
|
}--I
|
||||||
}
|
}
|
||||||
@@ -441,7 +441,7 @@ end
|
|||||||
|
|
||||||
local C2
|
local C2
|
||||||
do
|
do
|
||||||
local L={"+0+0","-1+0","+1+0","+0-1","-1-1","+1-1","-2+0","+2+0"}
|
local L={'+0+0','-1+0','+1+0','+0-1','-1-1','+1-1','-2+0','+2+0'}
|
||||||
vecStrConv(L)
|
vecStrConv(L)
|
||||||
C2={
|
C2={
|
||||||
{
|
{
|
||||||
@@ -455,8 +455,8 @@ end
|
|||||||
|
|
||||||
local C2sym
|
local C2sym
|
||||||
do
|
do
|
||||||
local L={"+0+0","-1+0","+1+0","+0-1","-1-1","+1-1","-2+0","+2+0"}
|
local L={'+0+0','-1+0','+1+0','+0-1','-1-1','+1-1','-2+0','+2+0'}
|
||||||
local R={"+0+0","+1+0","-1+0","+0-1","+1-1","-1-1","+2+0","-2+0"}
|
local R={'+0+0','+1+0','-1+0','+0-1','+1-1','-1-1','+2+0','-2+0'}
|
||||||
|
|
||||||
local Z={
|
local Z={
|
||||||
[01]=R,[10]=L,[03]=L,[30]=R,
|
[01]=R,[10]=L,[03]=L,[30]=R,
|
||||||
|
|||||||
@@ -6,6 +6,12 @@ return{
|
|||||||
"help",
|
"help",
|
||||||
"This translation of the TetroDictionary is provided by me, User670 (Discord: User670#9501).\n\nThe translation may not completely reflect the contents of the original Chinese text."
|
"This translation of the TetroDictionary is provided by me, User670 (Discord: User670#9501).\n\nThe translation may not completely reflect the contents of the original Chinese text."
|
||||||
},
|
},
|
||||||
|
{"Official website",
|
||||||
|
"official website homepage",
|
||||||
|
"help",
|
||||||
|
"Official website of Techmino!\nYou can modify your profile on it",
|
||||||
|
"http://home.techmino.org",
|
||||||
|
},
|
||||||
{"To New Players",
|
{"To New Players",
|
||||||
"guide newbie noob",
|
"guide newbie noob",
|
||||||
"help",
|
"help",
|
||||||
@@ -36,11 +42,6 @@ return{
|
|||||||
"Chinese: 灰机wiki\nA Chinese Tetris wiki, written by Tetris fans from the Tetris Research community.\nCurrently, most of its pages are translated from Hard Drop Wiki and Tetris Wiki.\n(Link is in Chinese.)",
|
"Chinese: 灰机wiki\nA Chinese Tetris wiki, written by Tetris fans from the Tetris Research community.\nCurrently, most of its pages are translated from Hard Drop Wiki and Tetris Wiki.\n(Link is in Chinese.)",
|
||||||
"https://tetris.huijiwiki.com",
|
"https://tetris.huijiwiki.com",
|
||||||
},
|
},
|
||||||
{"Applets",
|
|
||||||
"applets",
|
|
||||||
"help",
|
|
||||||
"[Entrance of applets has been moved to console]",
|
|
||||||
},
|
|
||||||
|
|
||||||
--Games
|
--Games
|
||||||
{"TTT",
|
{"TTT",
|
||||||
@@ -95,7 +96,7 @@ return{
|
|||||||
{"Nuketris",
|
{"Nuketris",
|
||||||
"nuketris",
|
"nuketris",
|
||||||
"game",
|
"game",
|
||||||
"[NEED TRANSLATION]",--TODO
|
"*Web-based | Single player and multiplayer*\nA block stacker game with 1-vs-1 ranked mode and a few single player modes. A PC is recommended for playing this game.",
|
||||||
"https://nuketris.herokuapp.com",
|
"https://nuketris.herokuapp.com",
|
||||||
},
|
},
|
||||||
{"WWC",
|
{"WWC",
|
||||||
@@ -184,7 +185,8 @@ return{
|
|||||||
{"Falling lightblock",
|
{"Falling lightblock",
|
||||||
"fl fallinglightblock",
|
"fl fallinglightblock",
|
||||||
"game",
|
"game",
|
||||||
"[NEED TRANSLATION]",--TODO
|
"*Android, iOS, Web | Single player and multiplayer*\nA game that supports many platforms. Has delays that cannot be adjusted. Can, to some extent, customize controls on mobile. Most of the modes are similar to classic Tetris, but modern-ish modes also exist. Battles are half-turn-based-half-real-time, and garbage cannot be buffered or cancelled.",
|
||||||
|
"https://golfgl.de/lightblocks/",
|
||||||
},
|
},
|
||||||
{"Huopin Tetris",
|
{"Huopin Tetris",
|
||||||
"huopin qq",
|
"huopin qq",
|
||||||
@@ -231,7 +233,12 @@ return{
|
|||||||
{"SPM",
|
{"SPM",
|
||||||
"spm linessentperminute",
|
"spm linessentperminute",
|
||||||
"term",
|
"term",
|
||||||
"[lines] Sent per minute\n\tReflects *actual* offensive power of a player. (Seems like this does not count lines used for cancelling garbage in buffer.)",
|
"[lines] Sent per minute\n\tReflects *actual* offensive power of a player. (does not count lines used for cancelling garbage in buffer.)",
|
||||||
|
},
|
||||||
|
{"RPM",
|
||||||
|
"rpm receive jieshou",
|
||||||
|
"term",
|
||||||
|
"[lines] Receive per Minute\n\tReflects pressure applied to a player.",
|
||||||
},
|
},
|
||||||
{"DPM",
|
{"DPM",
|
||||||
"dpm digperminute defendperminute",
|
"dpm digperminute defendperminute",
|
||||||
@@ -348,7 +355,7 @@ return{
|
|||||||
{"NRS",
|
{"NRS",
|
||||||
"nrs nintendorotationsystem",
|
"nrs nintendorotationsystem",
|
||||||
"term",
|
"term",
|
||||||
"Nintendo Rotation System\nThe rotation system used in the Tetris games on NES and Gameboy.\nIt has two mirrored versions; the left-handed version is used on Gameboy, and the right-handed version on the NES.",
|
"Nintendo Rotation System\nThe rotation system used in the Tetris games on the NES and Gameboy.\nIt has two mirrored versions; the left-handed version is used on Gameboy, and the right-handed version on the NES.",
|
||||||
},
|
},
|
||||||
{"ARS",
|
{"ARS",
|
||||||
"ars arikrotationsystem atarirotationsystem",
|
"ars arikrotationsystem atarirotationsystem",
|
||||||
@@ -363,7 +370,7 @@ return{
|
|||||||
{"TRS",
|
{"TRS",
|
||||||
"trs techminorotationsystem",
|
"trs techminorotationsystem",
|
||||||
"term",
|
"term",
|
||||||
"*Techmino-exclusive*\nTechmino Rotation System\nThe rotation system used in Techmino.\nIt is based on SRS, with fixes on common cases where S/Z are locked from rotating, and some extra useful kicks. Each pentomino also has a kick table roughly based on SRS logic.",
|
"*Techmino-exclusive*\nTechmino Rotation System\nThe rotation system used in Techmino, based on SRS.\nIt includes fixes on common cases where S/Z are locked from rotating, and some extra useful kicks. Each pentomino also has a kick table roughly based on SRS logic.",
|
||||||
},
|
},
|
||||||
|
|
||||||
{"Back to Back",
|
{"Back to Back",
|
||||||
@@ -381,11 +388,10 @@ return{
|
|||||||
"term",
|
"term",
|
||||||
"Special T-Spin techniques that exploit the T piece's kicks and T-Spin detections.\nThey might worth different values in different games (some games consider them Minis), and hardly have real value in combat due to their relatively complex setup.",
|
"Special T-Spin techniques that exploit the T piece's kicks and T-Spin detections.\nThey might worth different values in different games (some games consider them Minis), and hardly have real value in combat due to their relatively complex setup.",
|
||||||
},
|
},
|
||||||
|
{"Modern Tetris",
|
||||||
{"Modern Stack-game",
|
|
||||||
"modern",
|
"modern",
|
||||||
"term",
|
"term",
|
||||||
"",
|
"The concept of a \"modern\" Tetris game or block-stacking game is a bit fuzzy. In general, a block-stacking game that somewhat resembles games that follow the Tetris Design Guideline is considered a modern game. Here are some rules of thumb, but they are not hard requirements:\n1. The visible part of the Matrix is 10w x 20h, often with additional hidden rows above this.\n2. Pieces spawn in the top-middle of the visible matrix. Each piece has a consistent spawn orientation and color.\n3. Has an appropriate randomizer like 7-Bag and His.\n4. Has an appropriate rotation system, with at least the ability to rotate both directions.\n5. Has an appropriate lockdown delay system.\n6. Has an appropriate top-out condition.\n7. Has a NEXT queue, with multiple next pieces displayed (usually 3 to 6), and with presentation in the queue matching the spawn orientation of the piece.\n8. Has a HOLD queue.\n9. If there is spawn delay or line delay, usually has IRS and IHS.\n10. Has a DAS system for precise and swift sideways movements.",
|
||||||
},
|
},
|
||||||
{"IRS",
|
{"IRS",
|
||||||
"irs initialrotationsystem",
|
"irs initialrotationsystem",
|
||||||
@@ -442,6 +448,11 @@ return{
|
|||||||
"term",
|
"term",
|
||||||
"Known in Japan as REN.\nConsecutive line clears make up combos. The second line clear in the combo is 1 combo, and the third line clear is 2 combo, and so on.\nUnlike Back to Back, placing a piece that does not clear a line will break the combo.",
|
"Known in Japan as REN.\nConsecutive line clears make up combos. The second line clear in the combo is 1 combo, and the third line clear is 2 combo, and so on.\nUnlike Back to Back, placing a piece that does not clear a line will break the combo.",
|
||||||
},
|
},
|
||||||
|
{"Spike",
|
||||||
|
"spike",
|
||||||
|
"term",
|
||||||
|
"Send a lot of attack in a short time.\n\nTechmino and Tetr.io has a spike counter, which shows how much attack you send in a short time.\n\nNote that accumulated garbage due to network lag do not count as a spike.",
|
||||||
|
},
|
||||||
{"Side well",
|
{"Side well",
|
||||||
"sidewell",
|
"sidewell",
|
||||||
"term",
|
"term",
|
||||||
@@ -487,6 +498,11 @@ return{
|
|||||||
"term",
|
"term",
|
||||||
"The stacking method where you leave a 4-block-wide well in the middle.\nThe infamous combo setup that not only makes a lot of combos, but also abuses the death conditions and won't die even if you receive some garbage. This technique is often disliked by players due to how unbalanced it is.",
|
"The stacking method where you leave a 4-block-wide well in the middle.\nThe infamous combo setup that not only makes a lot of combos, but also abuses the death conditions and won't die even if you receive some garbage. This technique is often disliked by players due to how unbalanced it is.",
|
||||||
},
|
},
|
||||||
|
{"Residual",
|
||||||
|
"residual c4w s4w",
|
||||||
|
"term",
|
||||||
|
"Refers to how many blocks to leave in the well of a 4-wide combo setup. The most common are 3-residual and 6-residual.\n3-residual has less variations and is easier to learn, with pretty good chance of success, and it's pretty useful in combat.\n6-residual has more variables and is harder, but can be more consistent if you do it well. It can also be used for special challenges like getting 100 combos in an infinite 4-wide challenge.",
|
||||||
|
},
|
||||||
{"6-3 Stacking",
|
{"6-3 Stacking",
|
||||||
"63stacking",
|
"63stacking",
|
||||||
"term",
|
"term",
|
||||||
@@ -500,7 +516,7 @@ return{
|
|||||||
{"Topping out",
|
{"Topping out",
|
||||||
"die death topout toppingout",
|
"die death topout toppingout",
|
||||||
"term",
|
"term",
|
||||||
"Modern Tetris games have three different conditions in which the player tops out:\n1. Block out: when a piece spawns overlapping with another block;\n2. Lock out: when a piece locks entirely above the skyline;\n3. Garbage out: when the stack exceeds 40 lines in height (often due to incoming garbage).\nTechmino does not check for locking out, and has a 42 line limit for garbage out.",
|
"Modern Tetris games have three different conditions in which the player tops out:\n1. Block out: when a piece spawns overlapping with another block;\n2. Lock out: when a piece locks entirely above the skyline;\n3. Garbage out: when the stack exceeds 40 lines in height (often due to incoming garbage).\nTechmino does not check for locking out and garbage out.",
|
||||||
},
|
},
|
||||||
{"Falling speed",
|
{"Falling speed",
|
||||||
"fallingspeed",
|
"fallingspeed",
|
||||||
@@ -554,7 +570,7 @@ return{
|
|||||||
{"His generator",
|
{"His generator",
|
||||||
"history hisgenerator",
|
"history hisgenerator",
|
||||||
"term",
|
"term",
|
||||||
"A way to generate pieces, notably used in Tetris: The Grand Master games. Every time a random Tetrimino is selected, but if this Tetrimino is the same as one of the few previous pieces, then reroll until a different piece is rolled or until a reroll limit is reached.\nFor example, a \"his 4 roll 6\" (h4r6) generator rerolls when the piece is the same as one of the 4 previous pieces, and rerolls up to 6 times.",--TODO
|
"A way to generate pieces, notably used in Tetris: The Grand Master games. Every time a random Tetrimino is selected, but if this Tetrimino is the same as one of the few previous pieces, then reroll until a different piece is rolled or until a reroll limit is reached.\nFor example, a \"his 4 roll 6\" (h4r6) generator rerolls when the piece is the same as one of the 4 previous pieces, and rerolls up to 6 times.\nThere are other variations as well, such as \"his4 roll6 pool35\", which further reduces the randomness of the piece sequence.\n\nIn Techmino, the max. reroll count is half of the sequence length, rounded up.",
|
||||||
},
|
},
|
||||||
{"Hypertapping",
|
{"Hypertapping",
|
||||||
"hypertapping",
|
"hypertapping",
|
||||||
@@ -801,22 +817,42 @@ return{
|
|||||||
{"Console",
|
{"Console",
|
||||||
"console cmd commamd minglinghang kongzhitai",
|
"console cmd commamd minglinghang kongzhitai",
|
||||||
"command",
|
"command",
|
||||||
"Now the way to enter console is in the main menu, clicking a specific area or pressing a speciao key on the keyboard several times",
|
"Techmino has a console which enables debugging/advanced features.\nTo access the console, repeatedly tap the Techmino logo or press C key on the keyboard on the main menu.\n\nCareless actions in the console may result in corrupting or losing save data. Proceed at your own risk.",
|
||||||
|
},
|
||||||
|
{"Reset setting",
|
||||||
|
"reset setting",
|
||||||
|
"command",
|
||||||
|
"Go to console and type \"rm conf/setting\" then press enter.\nEffected after restart game\nplay one game to get setting back",
|
||||||
|
},
|
||||||
|
{"Reset statistics",
|
||||||
|
"reset statistic data",
|
||||||
|
"command",
|
||||||
|
"Go to console and type \"rm conf/data\" then press enter.\nEffected after restart game\nplay one game to get data back",
|
||||||
},
|
},
|
||||||
{"Reset unlock",
|
{"Reset unlock",
|
||||||
"reset unlock chongzhi qingkong jiesuo",
|
"reset unlock",
|
||||||
"command",
|
"command",
|
||||||
"Go to console and type \"rm conf/unlock\" then press enter.\nEffected after restart game\nfresh a rank to get data back",
|
"Go to console and type \"rm conf/unlock\" then press enter.\nEffected after restart game\nfresh a rank to get data back",
|
||||||
},
|
},
|
||||||
{"Reset record",
|
{"Reset records",
|
||||||
"reset chongzhi paihangbang",
|
"reset record",
|
||||||
"command",
|
"command",
|
||||||
"Go to console and type \"rm /s record\" then press enter.\nEffected after restart game\nfresh a record list to get one list back",
|
"Go to console and type \"rm -s record\" then press enter.\nEffected after restart game\nfresh a record list to get one list back",
|
||||||
},
|
},
|
||||||
{"Reset stat.",
|
{"Reset key",
|
||||||
"reset statistic data chongzhi tongji shuju",
|
"reset virtualkey",
|
||||||
"command",
|
"command",
|
||||||
"Go to console and type \"rm conf/data\" then press enter.\nEffected after restart game\nplay one game to get data back",
|
"Go to console and type \"rm conf/[keyFile]\" then press enter.\nKeyboard: key, Virtualkey: virtualkey, Virtualkey save: vkSave1(2)\nFirst two effected after restart game\nEnter setting and back to get one file back",
|
||||||
|
},
|
||||||
|
{"Delete replays",
|
||||||
|
"delete recording",
|
||||||
|
"command",
|
||||||
|
"Go to console and type \"rm -s replay\" then press enter.\nEffected immediately",
|
||||||
|
},
|
||||||
|
{"Delete cache",
|
||||||
|
"delete cache",
|
||||||
|
"command",
|
||||||
|
"Go to console and type \"rm -s cache\" then press enter.\nEffected immediately",
|
||||||
},
|
},
|
||||||
|
|
||||||
--English
|
--English
|
||||||
@@ -925,7 +961,7 @@ return{
|
|||||||
{"MrZ",
|
{"MrZ",
|
||||||
"mrz 626",
|
"mrz 626",
|
||||||
"name",
|
"name",
|
||||||
"Tetris Research community member, author of Techmino.\nPersonal bests: Sprint 25.95 seconds, MPH Sprint 57 seconds, #8 on Jstris leaderboards, U rank on TETR.IO, cleared TGM3 (World rule, Shirase gold 1300).",
|
"Tetris Research community member, author of Techmino.\nPersonal bests: Sprint 25.95 seconds, MPH Sprint 57 seconds, #8 on Jstris leaderboards, X rank on TETR.IO, cleared TGM3 (World rule, Shirase gold 1300).",
|
||||||
"https://space.bilibili.com/225238922",
|
"https://space.bilibili.com/225238922",
|
||||||
},
|
},
|
||||||
|
|
||||||
@@ -965,9 +1001,9 @@ return{
|
|||||||
"https://space.bilibili.com/787096",
|
"https://space.bilibili.com/787096",
|
||||||
},
|
},
|
||||||
{"gggf",
|
{"gggf",
|
||||||
"gggf kissne",
|
"xiaoqi kissne gggf",
|
||||||
"name",
|
"name",
|
||||||
"Tetris Research community member.\nPersonal bests: Sprint 22.831 seconds (25.483 seconds on mobile), MPH Sprint 56 seconds, X rank on Tetr.io\nOne of the top players of 20G in China, achieved almost every achievement in TGM3.",
|
"Tetris Research community member.\nPersonal bests: Sprint 22.677 seconds (25.483 seconds on mobile), MPH Sprint 56 seconds, X rank on Tetr.io\nOne of the top players of 20G in China, achieved almost every achievement in TGM3.",
|
||||||
"https://space.bilibili.com/287769888",
|
"https://space.bilibili.com/287769888",
|
||||||
},
|
},
|
||||||
{"蕴空之灵",
|
{"蕴空之灵",
|
||||||
|
|||||||
@@ -7,6 +7,12 @@ return{
|
|||||||
"致想深入玩下去的新人:\n\t两大根本原则:\n\t\t1.选手感好的版本(Techmino/Tetr.io/Jstris/TOP/Tetr.js),别用编程练习渣版本\n\t\t2.踏实打好基础(预判next稳定消四等),别总想着炫酷T旋,对未来发展没好处\n\t两大主要技巧:\n\t\t1.熟悉初始位置以及到各个位置的初始操作\n\t\t2.提前计算好下一块能放哪\n(推荐阅读专栏)一位块圈dalao给新人的话\n\n[点击右下角按钮打开链接]",
|
"致想深入玩下去的新人:\n\t两大根本原则:\n\t\t1.选手感好的版本(Techmino/Tetr.io/Jstris/TOP/Tetr.js),别用编程练习渣版本\n\t\t2.踏实打好基础(预判next稳定消四等),别总想着炫酷T旋,对未来发展没好处\n\t两大主要技巧:\n\t\t1.熟悉初始位置以及到各个位置的初始操作\n\t\t2.提前计算好下一块能放哪\n(推荐阅读专栏)一位块圈dalao给新人的话\n\n[点击右下角按钮打开链接]",
|
||||||
"https://bilibili.com/read/cv2352939",
|
"https://bilibili.com/read/cv2352939",
|
||||||
},
|
},
|
||||||
|
{"游戏官网",
|
||||||
|
"official website homepage guanwang",
|
||||||
|
"help",
|
||||||
|
"Techmino的官网!\n可以在上面修改头像和个人信息",
|
||||||
|
"http://home.techmino.org",
|
||||||
|
},
|
||||||
{"Tetris Wiki",
|
{"Tetris Wiki",
|
||||||
"tetris wiki",
|
"tetris wiki",
|
||||||
"help",
|
"help",
|
||||||
@@ -31,11 +37,6 @@ return{
|
|||||||
"俄罗斯方块中文维基,由一群来自俄罗斯方块研究群及下属群的方块同好建立的关于俄罗斯方块的中文百科全书。\n目前其大部分页面翻译和参考来自Harddrop wiki和Tetris Wiki",
|
"俄罗斯方块中文维基,由一群来自俄罗斯方块研究群及下属群的方块同好建立的关于俄罗斯方块的中文百科全书。\n目前其大部分页面翻译和参考来自Harddrop wiki和Tetris Wiki",
|
||||||
"https://tetris.huijiwiki.com",
|
"https://tetris.huijiwiki.com",
|
||||||
},
|
},
|
||||||
{"小程序",
|
|
||||||
"小程序 applets",
|
|
||||||
"help",
|
|
||||||
"[小程序入口已移动至控制台]",
|
|
||||||
},
|
|
||||||
|
|
||||||
--游戏(题库)
|
--游戏(题库)
|
||||||
{"TTT",
|
{"TTT",
|
||||||
@@ -238,6 +239,11 @@ return{
|
|||||||
"term",
|
"term",
|
||||||
"Dig/Defend per Minute\n挖掘每分,即玩家每分钟向下挖掘的垃圾行数。\n某些时候可以体现玩家生存能力\n\n或:防御(抵消+挖掘)每分",
|
"Dig/Defend per Minute\n挖掘每分,即玩家每分钟向下挖掘的垃圾行数。\n某些时候可以体现玩家生存能力\n\n或:防御(抵消+挖掘)每分",
|
||||||
},
|
},
|
||||||
|
{"RPM",
|
||||||
|
"rpm receive jieshou",
|
||||||
|
"term",
|
||||||
|
"Receive per Minute\n接收每分,即玩家每分钟收到来自对手的垃圾行数。\n一定程度体现玩家被对手施加的压力",
|
||||||
|
},
|
||||||
{"ADPM",
|
{"ADPM",
|
||||||
"adpm attack defend vs",
|
"adpm attack defend vs",
|
||||||
"term",
|
"term",
|
||||||
@@ -368,7 +374,7 @@ return{
|
|||||||
"Techmino Rotation System\nTechmino独有的旋转系统,基于SRS设计,修补了一些常见SZ卡死的地形,增加了不少实用踢墙,每个五连块也基本按照SRS的spin逻辑单独设计了踢墙表。",
|
"Techmino Rotation System\nTechmino独有的旋转系统,基于SRS设计,修补了一些常见SZ卡死的地形,增加了不少实用踢墙,每个五连块也基本按照SRS的spin逻辑单独设计了踢墙表。",
|
||||||
},
|
},
|
||||||
|
|
||||||
--术语(游戏内名词)
|
--术语(其他)
|
||||||
{"B2B",
|
{"B2B",
|
||||||
"大满贯 b2b btb backtoback",
|
"大满贯 b2b btb backtoback",
|
||||||
"term",
|
"term",
|
||||||
@@ -384,8 +390,6 @@ return{
|
|||||||
"term",
|
"term",
|
||||||
"一种特殊T2的名字,不同的游戏内的攻击可能不一样,没有特殊价值,可以不详细了解。",
|
"一种特殊T2的名字,不同的游戏内的攻击可能不一样,没有特殊价值,可以不详细了解。",
|
||||||
},
|
},
|
||||||
|
|
||||||
--术语(其他)
|
|
||||||
{"现代方块",
|
{"现代方块",
|
||||||
"现代方块 modern xiandaikuai",
|
"现代方块 modern xiandaikuai",
|
||||||
"term",
|
"term",
|
||||||
@@ -446,6 +450,11 @@ return{
|
|||||||
"term",
|
"term",
|
||||||
"从第二次消除起叫1ren/combo,打出的攻击根据游戏设计的不同也不同",
|
"从第二次消除起叫1ren/combo,打出的攻击根据游戏设计的不同也不同",
|
||||||
},
|
},
|
||||||
|
{"Spike",
|
||||||
|
"spike baofa xingbao",
|
||||||
|
"term",
|
||||||
|
"爆发攻击\n指短时间内打出大量的攻击,本游戏和TETR.IO中有spike计数器,可以看到自己短时间内打出了多少攻击。\n注意,网络卡顿导致的累计攻击瞬间释放不算spike。",
|
||||||
|
},
|
||||||
{"Side",
|
{"Side",
|
||||||
"连击 ·side",
|
"连击 ·side",
|
||||||
"term",
|
"term",
|
||||||
@@ -509,7 +518,7 @@ return{
|
|||||||
{"死亡判定",
|
{"死亡判定",
|
||||||
"死亡判定 die death siwang",
|
"死亡判定 die death siwang",
|
||||||
"term",
|
"term",
|
||||||
"现代方块普遍使用的死亡判定:\n1.新出现的方块和场地方块有重叠(窒息)(c4w比s4w强的原因,因为被打进18行都不会窒息)\n2.方块锁定时完全在场地的外面\n3.所有东西的总高度超出40。\n\n注:本游戏使用的死亡判定不包含上述的第二条,并且第三条的40改成42",
|
"现代方块普遍使用的死亡判定:\n1.新出现的方块和场地方块有重叠(窒息)(c4w比s4w强的原因,因为被打进18行都不会窒息)\n2.方块锁定时完全在场地的外面\n3.所有东西的总高度超出40。\n\n注:本游戏使用的死亡判定不包含上述的第二条和第三条",
|
||||||
},
|
},
|
||||||
{"下落速度",
|
{"下落速度",
|
||||||
"下落速度 drop speed",
|
"下落速度 drop speed",
|
||||||
@@ -810,22 +819,42 @@ return{
|
|||||||
{"控制台",
|
{"控制台",
|
||||||
"console cmd commamd minglinghang kongzhitai",
|
"console cmd commamd minglinghang kongzhitai",
|
||||||
"command",
|
"command",
|
||||||
"目前进入控制台的方式是在主菜单点击特定位置/按键盘某个键数次",
|
"目前进入控制台的方式是在主菜单 点特定位置/按键盘某个键 数次",
|
||||||
},
|
},
|
||||||
{"重置解锁状态",
|
{"重置设置",
|
||||||
"reset unlock chongzhi qingkong jiesuo",
|
"reset setting chongzhi qingkong shezhi",
|
||||||
"command",
|
"command",
|
||||||
"前往控制台输入\"rm conf/unlock\"并回车\n需要重启游戏生效,若反悔,刷新任意一个模式在地图上的状态即可恢复文件",
|
"前往控制台输入\"rm conf/setting\"并回车\n需要重启游戏生效,若反悔,进入设置菜单再退出即可恢复文件",
|
||||||
},
|
|
||||||
{"重置本地排行榜",
|
|
||||||
"reset chongzhi paihangbang",
|
|
||||||
"command",
|
|
||||||
"前往控制台输入\"rm /s record\"并回车\n需要重启游戏生效,若反悔,玩一局并更新模式排行榜即可恢复保存对应模式的单个排行榜文件",
|
|
||||||
},
|
},
|
||||||
{"重置统计数据",
|
{"重置统计数据",
|
||||||
"reset statistic data chongzhi tongji shuju",
|
"reset statistic data chongzhi tongji shuju",
|
||||||
"command",
|
"command",
|
||||||
"前往控制台输入\"rm conf/data\"并回车\n需要重启游戏生效,若反悔,玩一局并触发结算即可恢复文件",
|
"前往控制台输入\"rm conf/data\"并回车\n需要重启游戏生效,若反悔,玩一局并触发结算即可恢复文件",
|
||||||
|
},
|
||||||
|
{"重置解锁状态",
|
||||||
|
"reset unlock chongzhi qingkong jiesuo",
|
||||||
|
"command",
|
||||||
|
"前往控制台输入\"rm conf/unlock\"并回车\n需要重启游戏生效,若反悔,刷新任意一个模式在地图上的状态即可恢复文件",
|
||||||
|
},
|
||||||
|
{"重置本地排行榜",
|
||||||
|
"reset chongzhi paihangbang",
|
||||||
|
"command",
|
||||||
|
"前往控制台输入\"rm -s record\"并回车\n需要重启游戏生效,若反悔,玩一局并更新模式排行榜即可恢复对应模式的单个排行榜文件",
|
||||||
|
},
|
||||||
|
{"删除键位",
|
||||||
|
"reset virtualkey",
|
||||||
|
"command",
|
||||||
|
"前往控制台输入\"rm conf/键位文件\"并回车\n键盘是key,虚拟按键是virtualkey,虚拟按键预设是vkSave1(2)\n前两者重启生效,若反悔,进入对应的设置菜单再返回即可恢复文件",
|
||||||
|
},
|
||||||
|
{"删除录像",
|
||||||
|
"reset replay luxiang",
|
||||||
|
"command",
|
||||||
|
"前往控制台输入\"rm -s replay\"并回车\n立即生效",
|
||||||
|
},
|
||||||
|
{"删除缓存",
|
||||||
|
"reset cache huancun touxiang",
|
||||||
|
"command",
|
||||||
|
"前往控制台输入\"rm -s cache\"并回车\n立即生效",
|
||||||
},
|
},
|
||||||
|
|
||||||
--英文
|
--英文
|
||||||
@@ -930,12 +959,12 @@ return{
|
|||||||
{"小Z",
|
{"小Z",
|
||||||
"小Z xiaoz zictionary tetrodictionary littlez",
|
"小Z xiaoz zictionary tetrodictionary littlez",
|
||||||
"name",
|
"name",
|
||||||
"这个词典的名字!曾经是群里的答疑机器人,此词典数据库也沿用了机器人的问答库~",
|
"这个词典的名字!曾经是群里的答疑机器人,此词典数据库开始也是沿用的机器人问答库~",
|
||||||
},
|
},
|
||||||
{"MrZ",
|
{"MrZ",
|
||||||
"mrz zjiang ddd 026 t626",
|
"mrz zjiang ddd 026 t626",
|
||||||
"name",
|
"name",
|
||||||
"【研究群】「T026」\n40行25.95秒, MPH40行57秒排世界第8(jstris),tetr.io段位U,top数据约50L60A TGM3(W)shirase金1300通关\n这个游戏的作者!",
|
"【研究群】「T026」\n40行25.95秒, MPH40行57秒排世界第8(jstris),tetr.io段位X,top数据约50L60A TGM3(W)shirase金1300通关\n这个游戏的作者!",
|
||||||
"https://space.bilibili.com/225238922",
|
"https://space.bilibili.com/225238922",
|
||||||
},
|
},
|
||||||
|
|
||||||
@@ -976,9 +1005,9 @@ return{
|
|||||||
"https://space.bilibili.com/787096",
|
"https://space.bilibili.com/787096",
|
||||||
},
|
},
|
||||||
{"gggf",
|
{"gggf",
|
||||||
"gggf kissne t127",
|
"xiaoqi kissne gggf t127",
|
||||||
"name",
|
"name",
|
||||||
"【研究群】「T127」\n40行22.831秒(手机25.483),MPH40行56秒,tetr.io段位X,数据约60L95A\n20G规则国内一流玩家,拿到了TGM3几乎全部的最终成就(全世界都没几个)\n其他名称:小柒 kissne 127\n还是车车人,几个正作成绩:永EX NM 1B FS 风L NM",
|
"【研究群】「T127」\n40行22.677秒(手机25.483),MPH40行56秒,tetr.io段位X,数据约60L95A\n20G规则国内一流玩家,拿到了TGM3几乎全部的最终成就(全世界都没几个)\n其他名称:小柒 kissne 127\n还是车车人,几个正作成绩:永EX NM 1B FS 风L NM",
|
||||||
"https://space.bilibili.com/287769888",
|
"https://space.bilibili.com/287769888",
|
||||||
},
|
},
|
||||||
{"蕴空之灵",
|
{"蕴空之灵",
|
||||||
|
|||||||
@@ -1,22 +1,20 @@
|
|||||||
local C=COLOR
|
local C=COLOR
|
||||||
return{
|
return{
|
||||||
back="Back",
|
|
||||||
anykey="Press a key!",
|
anykey="Press a key!",
|
||||||
sureQuit="Press again to exit",
|
sureQuit="Press again to exit",
|
||||||
newVersion="Thanks for updating! Changelog:",
|
|
||||||
httpTimeout="Connection error: Timed out",
|
httpTimeout="Connection error: Timed out",
|
||||||
newDay="A new day, a new beginning!",
|
newDay="A new day, a new beginning!",
|
||||||
playedLong="You have been playing for a long time. Make sure to rest well!",
|
playedLong="You have been playing for a long time. Make sure to rest well!",
|
||||||
playedTooMuch="You have been playing too long! Playing a block game is fun, but it's time to take a break.",
|
playedTooMuch="You have been playing for too long! Playing a block game is fun, but it's time to take a break.",
|
||||||
|
|
||||||
atkModeName={"Random","Badges","K.O.s","Attackers"},
|
atkModeName={"Random","Badges","K.O.s","Attackers"},
|
||||||
royale_remain="$1 Player(s) Remaining",
|
royale_remain="$1 Player(s) Remaining",
|
||||||
|
powerUp={[0]="+000%","+025%","+050%","+075%","+100%"},
|
||||||
cmb={nil,"1 Combo","2 Combo","3 Combo","4 Combo","5 Combo","6 Combo","7 Combo","8 Combo","9 Combo","10 Combo!","11 Combo!","12 Combo!","13 Combo!","14 Combo!!","15 Combo!!","16 Combo!!","17 Combo!!!","18 Combo!!!","19 Combo!!!","MEGACMB"},
|
cmb={nil,"1 Combo","2 Combo","3 Combo","4 Combo","5 Combo","6 Combo","7 Combo","8 Combo","9 Combo","10 Combo!","11 Combo!","12 Combo!","13 Combo!","14 Combo!!","15 Combo!!","16 Combo!!","17 Combo!!!","18 Combo!!!","19 Combo!!!","MEGACMB"},
|
||||||
spin="-Spin ",
|
spin="-Spin ",
|
||||||
clear={"Single","Double","Triple","Techrash","Pentacrash","Hexacrash"},
|
clear={"Single","Double","Triple","Techrash","Pentacrash","Hexacrash"},
|
||||||
mini="Mini",b2b="B2B ",b3b="B2B2B ",
|
mini="Mini",b2b="B2B ",b3b="B2B2B ",
|
||||||
PC="Perfect Clear",HPC="Hemi-Perfect Clear",
|
PC="Perfect Clear",HPC="Hemi-Perfect Clear",
|
||||||
hold="HOLD",next="NEXT",
|
|
||||||
replaying="[Replay]",
|
replaying="[Replay]",
|
||||||
|
|
||||||
stage="Stage $1",
|
stage="Stage $1",
|
||||||
@@ -39,7 +37,7 @@ return{
|
|||||||
win="Win",
|
win="Win",
|
||||||
lose="Lose",
|
lose="Lose",
|
||||||
finish="Finish",
|
finish="Finish",
|
||||||
gamewin="You Win!",
|
gamewin="You Win",
|
||||||
gameover="Game Over",
|
gameover="Game Over",
|
||||||
pause="Pause",
|
pause="Pause",
|
||||||
pauseCount="Pauses",
|
pauseCount="Pauses",
|
||||||
@@ -62,6 +60,8 @@ return{
|
|||||||
exportSuccess="Exported successfully",
|
exportSuccess="Exported successfully",
|
||||||
importSuccess="Imported successfully",
|
importSuccess="Imported successfully",
|
||||||
dataCorrupted="Data corrupted",
|
dataCorrupted="Data corrupted",
|
||||||
|
pasteWrongPlace="Paste at wrong place?",
|
||||||
|
noFile="File not found",
|
||||||
|
|
||||||
VKTchW="Touch Weight",
|
VKTchW="Touch Weight",
|
||||||
VKOrgW="Origin Weight",
|
VKOrgW="Origin Weight",
|
||||||
@@ -72,10 +72,9 @@ return{
|
|||||||
newRecord="New Record!",
|
newRecord="New Record!",
|
||||||
|
|
||||||
getNoticeFail="Failed fetching announcements...",
|
getNoticeFail="Failed fetching announcements...",
|
||||||
getVersionFail="Update detection failed",
|
|
||||||
oldVersion="Version $1 is now available!",
|
oldVersion="Version $1 is now available!",
|
||||||
needUpdate="Newer version required!",
|
needUpdate="Newer version required!",
|
||||||
noInternet="Not connected to the network",
|
versionNotMatch="Version do not match!",
|
||||||
notFinished="Coming soon!",
|
notFinished="Coming soon!",
|
||||||
|
|
||||||
jsonError="JSON error",
|
jsonError="JSON error",
|
||||||
@@ -90,20 +89,23 @@ return{
|
|||||||
loginFailed="Failed to log in.",
|
loginFailed="Failed to log in.",
|
||||||
accessSuccessed="Access Granted.",
|
accessSuccessed="Access Granted.",
|
||||||
accessFailed="Access Denied.",
|
accessFailed="Access Denied.",
|
||||||
wsSuccessed="WebSocket: Connected.",
|
|
||||||
|
wsConnecting="Websocket: Connecting",
|
||||||
wsFailed="WebSocket: Connection Failed.",
|
wsFailed="WebSocket: Connection Failed.",
|
||||||
wsClose="WebSocket Closed: ",
|
wsClose="WebSocket Closed: ",
|
||||||
netTimeout="Network connection timeout",
|
netTimeout="Network connection timeout",
|
||||||
|
|
||||||
createRoomTooFast="You are creating a room too fast!",
|
onlinePlayerCount="Online",
|
||||||
|
|
||||||
createRoomSuccessed="Room successfully created!",
|
createRoomSuccessed="Room successfully created!",
|
||||||
started="Playing",
|
started="Playing",
|
||||||
joinRoom="has joined the room.",
|
joinRoom="has joined the room.",
|
||||||
leaveRoom="has left the room.",
|
leaveRoom="has left the room.",
|
||||||
ready="READY",
|
ready="Ready",
|
||||||
set="SET",
|
connStream="Connecting",
|
||||||
champion="$1 won",
|
waitStream="Waiting",
|
||||||
chatRemain="Online: ",
|
spectating="Spectating",
|
||||||
|
chatRemain="Online",
|
||||||
chatStart="------Beginning of log------",
|
chatStart="------Beginning of log------",
|
||||||
chatHistory="------New messages below------",
|
chatHistory="------New messages below------",
|
||||||
|
|
||||||
@@ -112,7 +114,7 @@ return{
|
|||||||
|
|
||||||
errorMsg="Techmino ran into a problem and needs to restart.\nYou can send the error log to the devs.",
|
errorMsg="Techmino ran into a problem and needs to restart.\nYou can send the error log to the devs.",
|
||||||
|
|
||||||
modInstruction="Choose your modifiers!\nMods allow you to change the game\n(and possibly break it in weird ways).\nBeware! Some mods unrank your game.",
|
modInstruction="Choose your modifiers!\nMods allow you to change the game.\nThey may also break it in weird ways.\nBeware, some mods will cause your game to be unranked!",
|
||||||
modInfo={
|
modInfo={
|
||||||
next="NEXT\nOverrides the number of Next pieces.",
|
next="NEXT\nOverrides the number of Next pieces.",
|
||||||
hold="HOLD\nOverrides the number of Hold pieces.",
|
hold="HOLD\nOverrides the number of Hold pieces.",
|
||||||
@@ -150,14 +152,7 @@ return{
|
|||||||
"Finesse:",
|
"Finesse:",
|
||||||
},
|
},
|
||||||
radar={"DEF","OFF","ATK","SEND","SPD","DIG"},
|
radar={"DEF","OFF","ATK","SEND","SPD","DIG"},
|
||||||
radarData={
|
radarData={"D'PM","ADPM","APM","SPM","L'PM","DPM"},
|
||||||
"D'PM",
|
|
||||||
"ADPM",
|
|
||||||
"APM",
|
|
||||||
"SPM",
|
|
||||||
"L'PM",
|
|
||||||
"DPM",
|
|
||||||
},
|
|
||||||
stat={
|
stat={
|
||||||
"Times Launched:",
|
"Times Launched:",
|
||||||
"Play Count:",
|
"Play Count:",
|
||||||
@@ -171,11 +166,11 @@ return{
|
|||||||
"PC/HPC:",
|
"PC/HPC:",
|
||||||
"FnsErrs./FnsRate:",
|
"FnsErrs./FnsRate:",
|
||||||
},
|
},
|
||||||
help={
|
aboutTexts={
|
||||||
"This is just an *ordinary* block stacker. Really. That's it.",
|
"This is just an *ordinary* block stacker. Really, that's it.",
|
||||||
"It has inspirations from TO/C2/KOS/TGM3 etc.",
|
"It has inspirations from C2/IO/JS/WWC/KOS etc.",
|
||||||
"",
|
"",
|
||||||
"Powered by LÖVE/love2d",
|
"Powered by LÖVE",
|
||||||
"Any suggestions or bug reports are appreciated!",
|
"Any suggestions or bug reports are appreciated!",
|
||||||
"Make sure to get the game only from official sources,",
|
"Make sure to get the game only from official sources,",
|
||||||
"as we can't make sure you're safe if you got it elsewhere.",
|
"as we can't make sure you're safe if you got it elsewhere.",
|
||||||
@@ -184,11 +179,11 @@ return{
|
|||||||
},
|
},
|
||||||
staff={
|
staff={
|
||||||
"Author: MrZ E-mail: 1046101471@qq.com",
|
"Author: MrZ E-mail: 1046101471@qq.com",
|
||||||
"Powered by LOVE2D",
|
"Powered by LÖVE",
|
||||||
"",
|
"",
|
||||||
"Program: MrZ, Particle_G, [FinnTenzor]",
|
"Program: MrZ, Particle_G, [FinnTenzor]",
|
||||||
"Art: MrZ, ScF, [Gnyar, 旋律星萤, T0722]",
|
"Art: MrZ, ScF, [Gnyar, 旋律星萤, T0722]",
|
||||||
"Music: MrZ, ERM, [T0722]",
|
"Music: MrZ, ERM, [T0722, Aether]",
|
||||||
"Voice & Sound: Miya, Naki, MrZ",
|
"Voice & Sound: Miya, Naki, MrZ",
|
||||||
"Performance: 模电, HBM",
|
"Performance: 模电, HBM",
|
||||||
"Translations: User670, MattMayuga, Mizu, Mr.Faq, ScF",
|
"Translations: User670, MattMayuga, Mizu, Mr.Faq, ScF",
|
||||||
@@ -200,8 +195,8 @@ return{
|
|||||||
used=[[
|
used=[[
|
||||||
Tools used:
|
Tools used:
|
||||||
Beepbox
|
Beepbox
|
||||||
GFIE
|
|
||||||
Goldwave
|
Goldwave
|
||||||
|
GFIE
|
||||||
FL Mobile
|
FL Mobile
|
||||||
Libs used:
|
Libs used:
|
||||||
Cold_Clear [MinusKelvin]
|
Cold_Clear [MinusKelvin]
|
||||||
@@ -209,7 +204,7 @@ return{
|
|||||||
profile.lua [itraykov]
|
profile.lua [itraykov]
|
||||||
simple-love-lights [dylhunn]
|
simple-love-lights [dylhunn]
|
||||||
]],
|
]],
|
||||||
support="Support author",
|
support="Support the author",
|
||||||
group="Join our Discord: discord.gg/f9pUvkh",
|
group="Join our Discord: discord.gg/f9pUvkh",
|
||||||
WidgetText={
|
WidgetText={
|
||||||
main={
|
main={
|
||||||
@@ -220,7 +215,6 @@ return{
|
|||||||
setting="Settings",
|
setting="Settings",
|
||||||
stat="Statistics",
|
stat="Statistics",
|
||||||
music="Music & SE",
|
music="Music & SE",
|
||||||
about="About",
|
|
||||||
dict="Zictionary",
|
dict="Zictionary",
|
||||||
manual="Manual",
|
manual="Manual",
|
||||||
},
|
},
|
||||||
@@ -246,26 +240,64 @@ return{
|
|||||||
quit="Quit (Q)",
|
quit="Quit (Q)",
|
||||||
},
|
},
|
||||||
net_menu={
|
net_menu={
|
||||||
|
league="Tech League",
|
||||||
ffa="FFA",
|
ffa="FFA",
|
||||||
rooms="Rooms",
|
rooms="Rooms",
|
||||||
chat="Chat",
|
|
||||||
logout="Log out",
|
logout="Log out",
|
||||||
},
|
},
|
||||||
|
net_league={
|
||||||
|
match="Find Match",
|
||||||
|
},
|
||||||
net_rooms={
|
net_rooms={
|
||||||
refreshing="Refreshing rooms",
|
refreshing="Refreshing rooms",
|
||||||
noRoom="There aren't any rooms right now...",
|
noRoom="There aren't any rooms right now...",
|
||||||
refresh="Refresh",
|
refresh="Refresh",
|
||||||
new="New Room(2)",
|
new="New Room",
|
||||||
new2="New Room(5)",
|
|
||||||
join="Join",
|
join="Join",
|
||||||
},
|
},
|
||||||
|
net_newRoom={
|
||||||
|
title="Custom room config",
|
||||||
|
roomName="Room name(default to username's room)",
|
||||||
|
roomDescription="Room description",
|
||||||
|
|
||||||
|
life="Lives",
|
||||||
|
pushSpeed="Push Speed",
|
||||||
|
garbageSpeed="Garbage Speed",
|
||||||
|
visible="Visibility",
|
||||||
|
freshLimit="Lock Reset Limit",
|
||||||
|
|
||||||
|
fieldH="Field Height",
|
||||||
|
bufferLimit="Buffer Limit",
|
||||||
|
heightLimit="Height Limit",
|
||||||
|
|
||||||
|
drop="Drop Delay",
|
||||||
|
lock="Lock Delay",
|
||||||
|
wait="Entry Delay",
|
||||||
|
fall="Line Delay",
|
||||||
|
|
||||||
|
capacity="Capacity",
|
||||||
|
create="Create",
|
||||||
|
|
||||||
|
ospin="O-spin",
|
||||||
|
fineKill="100% Finesse",
|
||||||
|
b2bKill="No B2B break",
|
||||||
|
easyFresh="Normal Lock Reset",
|
||||||
|
deepDrop="Deep Drop",
|
||||||
|
bone="Bone Blocks",
|
||||||
|
|
||||||
|
nextCount="Next",
|
||||||
|
holdCount="Hold",
|
||||||
|
infHold="Infinite Hold",
|
||||||
|
phyHold="In-place Hold",
|
||||||
|
|
||||||
|
bg="Background",
|
||||||
|
bgm="Music",
|
||||||
|
},
|
||||||
net_game={
|
net_game={
|
||||||
ready="Ready",
|
ready="Ready",
|
||||||
|
spectate="Spectate",
|
||||||
cancel="Cancel",
|
cancel="Cancel",
|
||||||
},
|
},
|
||||||
net_chat={
|
|
||||||
send="Send",
|
|
||||||
},
|
|
||||||
setting_game={
|
setting_game={
|
||||||
title="Game Settings",
|
title="Game Settings",
|
||||||
graphic="←Video",
|
graphic="←Video",
|
||||||
@@ -280,7 +312,6 @@ return{
|
|||||||
autoPause="Pause while unfocused",
|
autoPause="Pause while unfocused",
|
||||||
swap="Key Combination (Change Atk. Mode)",
|
swap="Key Combination (Change Atk. Mode)",
|
||||||
fine="Finesse Error SFX",
|
fine="Finesse Error SFX",
|
||||||
dataSaving="Data saving",
|
|
||||||
simpMode="Simplistic Style",
|
simpMode="Simplistic Style",
|
||||||
},
|
},
|
||||||
setting_video={
|
setting_video={
|
||||||
@@ -289,14 +320,14 @@ return{
|
|||||||
game="Game→",
|
game="Game→",
|
||||||
|
|
||||||
block="Draw Block",
|
block="Draw Block",
|
||||||
ghost="Ghost",
|
|
||||||
center="Center",
|
|
||||||
|
|
||||||
smooth="Smooth Falling",
|
smooth="Smooth Falling",
|
||||||
grid="Grid",
|
|
||||||
upEdge="3D Block",
|
upEdge="3D Block",
|
||||||
bagLine="Bag Separator",
|
bagLine="Bag Separator",
|
||||||
|
|
||||||
|
ghost="Ghost",
|
||||||
|
grid="Grid",
|
||||||
|
center="Center",
|
||||||
|
|
||||||
lockFX="Lock FX",
|
lockFX="Lock FX",
|
||||||
dropFX="Drop FX",
|
dropFX="Drop FX",
|
||||||
moveFX="Move FX",
|
moveFX="Move FX",
|
||||||
@@ -304,18 +335,21 @@ return{
|
|||||||
splashFX="Splash FX",
|
splashFX="Splash FX",
|
||||||
shakeFX="Field Sway",
|
shakeFX="Field Sway",
|
||||||
atkFX="Atk. FX",
|
atkFX="Atk. FX",
|
||||||
frame="Render Frame Rate",
|
frame="Render Frame Rate(%)",
|
||||||
|
|
||||||
text="Line Clear Pop-up",
|
text="Line Clear Pop-up",
|
||||||
score="Score Pop-up",
|
score="Score Pop-up",
|
||||||
warn="Danger Alert",
|
bufferWarn="Buffer Alert",
|
||||||
highCam="Screen Scrolling",
|
showSpike="Spike Counter",
|
||||||
nextPos="Next Preview",
|
nextPos="Next Preview",
|
||||||
fullscreen="Full Screen",
|
highCam="Screen Scrolling",
|
||||||
power="Power Info",
|
warn="Danger Alert",
|
||||||
|
|
||||||
clickFX="Click FX",
|
clickFX="Click FX",
|
||||||
bg="Background",
|
power="Power Info",
|
||||||
clean="Fast Draw",
|
clean="Fast Draw",
|
||||||
|
fullscreen="Full Screen",
|
||||||
|
bg="Background",
|
||||||
},
|
},
|
||||||
setting_sound={
|
setting_sound={
|
||||||
title="Sound Settings",
|
title="Sound Settings",
|
||||||
@@ -323,11 +357,11 @@ return{
|
|||||||
game="←Game",
|
game="←Game",
|
||||||
graphic="Video→",
|
graphic="Video→",
|
||||||
|
|
||||||
|
bgm="BGM",
|
||||||
sfx="SFX",
|
sfx="SFX",
|
||||||
|
stereo="Stereo",
|
||||||
spawn="Spawn Sounds",
|
spawn="Spawn Sounds",
|
||||||
warn="Warning",
|
warn="Warning",
|
||||||
bgm="BGM",
|
|
||||||
stereo="Stereo",
|
|
||||||
vib="Vibration",
|
vib="Vibration",
|
||||||
voc="Voice",
|
voc="Voice",
|
||||||
cv="Voice Pack",
|
cv="Voice Pack",
|
||||||
@@ -376,8 +410,12 @@ return{
|
|||||||
setting_touch={
|
setting_touch={
|
||||||
default="Default",
|
default="Default",
|
||||||
snap="Snap",
|
snap="Snap",
|
||||||
option="Options",
|
save1="Save1",
|
||||||
|
load1="Load1",
|
||||||
|
save2="Save2",
|
||||||
|
load2="Load2",
|
||||||
size="Size",
|
size="Size",
|
||||||
|
shape="Shape",
|
||||||
},
|
},
|
||||||
setting_touchSwitch={
|
setting_touchSwitch={
|
||||||
b1= "Move Left:", b2="Move Right:", b3="Rotate Right:", b4="Rotate Left:",
|
b1= "Move Left:", b2="Move Right:", b3="Rotate Right:", b4="Rotate Left:",
|
||||||
@@ -385,18 +423,17 @@ return{
|
|||||||
b9= "Function1:", b10="Function2:", b11="Instant Left:",b12="Instant Right:",
|
b9= "Function1:", b10="Function2:", b11="Instant Left:",b12="Instant Right:",
|
||||||
b13="Sonic Drop:", b14="Down 1:", b15="Down 4:", b16="Down 10:",
|
b13="Sonic Drop:", b14="Down 1:", b15="Down 4:", b16="Down 10:",
|
||||||
b17="Left Drop:", b18="Right Drop:", b19="Left Zangi:", b20="Right Zangi:",
|
b17="Left Drop:", b18="Right Drop:", b19="Left Zangi:", b20="Right Zangi:",
|
||||||
|
|
||||||
norm="Normal",
|
norm="Normal",
|
||||||
pro="Professional",
|
pro="Professional",
|
||||||
hide="Show Virtual Keys",
|
hide="Show Virtual Keys",
|
||||||
track="Auto Track",
|
icon="Icon",
|
||||||
sfx="SFX",
|
sfx="SFX",
|
||||||
vib="VIB",
|
vib="VIB",
|
||||||
icon="Icon",
|
|
||||||
tkset="Track Settings",
|
|
||||||
alpha="Alpha",
|
alpha="Alpha",
|
||||||
},
|
|
||||||
setting_trackSetting={
|
track="Auto Track",
|
||||||
VKDodge="Auto Dodge",
|
dodge="Auto Dodge",
|
||||||
},
|
},
|
||||||
customGame={
|
customGame={
|
||||||
title="Custom Game",
|
title="Custom Game",
|
||||||
@@ -423,28 +460,28 @@ return{
|
|||||||
field="Edit Field (F)",
|
field="Edit Field (F)",
|
||||||
sequence="Edit Sequence (S)",
|
sequence="Edit Sequence (S)",
|
||||||
mission="Edit Mission (M)",
|
mission="Edit Mission (M)",
|
||||||
},
|
|
||||||
custom_advance={
|
|
||||||
title="Custom Game",
|
|
||||||
subTitle="Advance",
|
|
||||||
|
|
||||||
nextCount="Next",
|
nextCount="Next",
|
||||||
holdCount="Hold",
|
holdCount="Hold",
|
||||||
infHold="Infinite Hold",
|
infHold="Infinite Hold",
|
||||||
phyHold="In-place Hold",
|
phyHold="In-place Hold",
|
||||||
bone="Bone Blocks",
|
|
||||||
|
|
||||||
fieldH="Field Height",
|
fieldH="Field Height",
|
||||||
ospin="O-Spin",
|
|
||||||
deepDrop="Deep Drop",
|
|
||||||
visible="Visibility",
|
visible="Visibility",
|
||||||
freshLimit="Lock Reset Limit",
|
freshLimit="Lock Reset Limit",
|
||||||
easyFresh="Normal Lock Reset",
|
|
||||||
fineKill="100% Finesse",
|
|
||||||
b2bKill="No B2B break",
|
|
||||||
opponent="Opponent",
|
opponent="Opponent",
|
||||||
life="Lives",
|
life="Lives",
|
||||||
pushSpeed="Garbage Speed",
|
pushSpeed="Push Speed",
|
||||||
|
garbageSpeed="Garbage Speed",
|
||||||
|
|
||||||
|
bufferLimit="Buffer Limit",
|
||||||
|
heightLimit="Height Limit",
|
||||||
|
ospin="O-Spin",
|
||||||
|
fineKill="100% Finesse",
|
||||||
|
b2bKill="No B2B break",
|
||||||
|
easyFresh="Normal Lock Reset",
|
||||||
|
deepDrop="Deep Drop",
|
||||||
|
bone="Bone Blocks",
|
||||||
},
|
},
|
||||||
custom_field={
|
custom_field={
|
||||||
title="Custom Game",
|
title="Custom Game",
|
||||||
@@ -526,7 +563,7 @@ return{
|
|||||||
sound={
|
sound={
|
||||||
title="SE Room",
|
title="SE Room",
|
||||||
sfx="SFX",
|
sfx="SFX",
|
||||||
voc="VOICE",
|
voc="Voice",
|
||||||
|
|
||||||
move="Movement",
|
move="Movement",
|
||||||
lock="Lock",
|
lock="Lock",
|
||||||
@@ -552,37 +589,37 @@ return{
|
|||||||
_2="Double",
|
_2="Double",
|
||||||
_3="Triple",
|
_3="Triple",
|
||||||
_4="Techrash",
|
_4="Techrash",
|
||||||
z0="Z-spin",
|
z0="Z-Spin",
|
||||||
z1="Z-spin 1",
|
z1="Z-Spin 1",
|
||||||
z2="Z-spin 2",
|
z2="Z-Spin 2",
|
||||||
z3="Z-spin 3",
|
z3="Z-Spin 3",
|
||||||
s0="S-spin",
|
s0="S-Spin",
|
||||||
s1="S-spin 1",
|
s1="S-Spin 1",
|
||||||
s2="S-spin 2",
|
s2="S-Spin 2",
|
||||||
s3="S-spin 3",
|
s3="S-Spin 3",
|
||||||
|
|
||||||
j0="J-spin",
|
j0="J-Spin",
|
||||||
j1="J-spin 1",
|
j1="J-Spin 1",
|
||||||
j2="J-spin 2",
|
j2="J-Spin 2",
|
||||||
j3="J-spin 3",
|
j3="J-Spin 3",
|
||||||
l0="L-spin",
|
l0="L-Spin",
|
||||||
l1="L-spin 1",
|
l1="L-Spin 1",
|
||||||
l2="L-spin 2",
|
l2="L-Spin 2",
|
||||||
l3="L-spin 3",
|
l3="L-Spin 3",
|
||||||
|
|
||||||
t0="T-spin",
|
t0="T-Spin",
|
||||||
t1="T-spin 1",
|
t1="T-Spin 1",
|
||||||
t2="T-spin 2",
|
t2="T-Spin 2",
|
||||||
t3="T-spin 3",
|
t3="T-Spin 3",
|
||||||
o0="O-spin",
|
o0="O-Spin",
|
||||||
o1="O-spin 1",
|
o1="O-Spin 1",
|
||||||
o2="O-spin 2",
|
o2="O-Spin 2",
|
||||||
o3="O-spin 3",
|
o3="O-Spin 3",
|
||||||
|
|
||||||
i0="I-spin",
|
i0="I-Spin",
|
||||||
i1="I-spin 1",
|
i1="I-Spin 1",
|
||||||
i2="I-spin 2",
|
i2="I-Spin 2",
|
||||||
i3="I-spin 3",
|
i3="I-Spin 3",
|
||||||
|
|
||||||
mini="Mini",
|
mini="Mini",
|
||||||
b2b="B2B",
|
b2b="B2B",
|
||||||
@@ -596,6 +633,7 @@ return{
|
|||||||
register="Register",
|
register="Register",
|
||||||
email="E-mail Address",
|
email="E-mail Address",
|
||||||
password="Password",
|
password="Password",
|
||||||
|
keepPW="Remember me",
|
||||||
login="Log In",
|
login="Log In",
|
||||||
},
|
},
|
||||||
register={
|
register={
|
||||||
@@ -636,7 +674,7 @@ return{
|
|||||||
app_2048={
|
app_2048={
|
||||||
reset="Reset",
|
reset="Reset",
|
||||||
blind="Blind",
|
blind="Blind",
|
||||||
tapControl="Tap control",
|
tapControl="Tap controls",
|
||||||
|
|
||||||
skip="Skip Round",
|
skip="Skip Round",
|
||||||
},
|
},
|
||||||
@@ -652,15 +690,17 @@ return{
|
|||||||
mode="Mode",
|
mode="Mode",
|
||||||
},
|
},
|
||||||
savedata={
|
savedata={
|
||||||
exportUnlock="Export Progress",
|
export="Export to clipboard",
|
||||||
exportData="Export Stats",
|
import="Import from clipboard",
|
||||||
exportSetting="Export Settings",
|
unlock="Progress",
|
||||||
exportVK="Export Virtual Key Layout",
|
data="Stats",
|
||||||
|
setting="Settings",
|
||||||
|
vk="Virtual Key Layout",
|
||||||
|
|
||||||
importUnlock="Import Progress",
|
couldSave="Cloud Save (CAUTION: TESTING)",
|
||||||
importData="Import Stats",
|
notLogin="[Login to access cloud save]",
|
||||||
importSetting="Import Settings",
|
upload="Upload to cloud",
|
||||||
importVK="Import Virtual Key Layout",
|
download="Download from cloud",
|
||||||
},
|
},
|
||||||
error={
|
error={
|
||||||
console="Console",
|
console="Console",
|
||||||
@@ -682,7 +722,7 @@ return{
|
|||||||
['dig_400l']= {"Dig", "400L", "Dig 400 garbage lines."},
|
['dig_400l']= {"Dig", "400L", "Dig 400 garbage lines."},
|
||||||
['dig_1000l']= {"Dig", "1000L", "Dig 1000 garbage lines."},
|
['dig_1000l']= {"Dig", "1000L", "Dig 1000 garbage lines."},
|
||||||
['drought_n']= {"Drought", "100L", "There are no I-pieces."},
|
['drought_n']= {"Drought", "100L", "There are no I-pieces."},
|
||||||
['drought_l']= {"Drought", "100L", "W T F"},
|
['drought_l']= {"Drought+", "100L", "W T F"},
|
||||||
['marathon_n']= {"Marathon", "NORMAL", "200-line marathon with accelerating speed."},
|
['marathon_n']= {"Marathon", "NORMAL", "200-line marathon with accelerating speed."},
|
||||||
['marathon_h']= {"Marathon", "HARD", "200-line high-speed marathon."},
|
['marathon_h']= {"Marathon", "HARD", "200-line high-speed marathon."},
|
||||||
['solo_e']= {"Battle", "EASY", "Defeat the AI!"},
|
['solo_e']= {"Battle", "EASY", "Defeat the AI!"},
|
||||||
@@ -721,20 +761,21 @@ return{
|
|||||||
['survivor_h']= {"Survivor", "HARD", "How long can you survive?"},
|
['survivor_h']= {"Survivor", "HARD", "How long can you survive?"},
|
||||||
['survivor_l']= {"Survivor", "LUNATIC", "How long can you survive?"},
|
['survivor_l']= {"Survivor", "LUNATIC", "How long can you survive?"},
|
||||||
['survivor_u']= {"Survivor", "ULTIMATE", "How long can you survive?"},
|
['survivor_u']= {"Survivor", "ULTIMATE", "How long can you survive?"},
|
||||||
['attacker_h']= {"Attacker", "HARD", "Practice Offense!"},
|
['attacker_h']= {"Attacker", "HARD", "Practice your offensive skills!"},
|
||||||
['attacker_u']= {"Attacker", "ULTIMATE", "Practice Offense!"},
|
['attacker_u']= {"Attacker", "ULTIMATE", "Practice your offensive skills!"},
|
||||||
['defender_n']= {"Defender", "NORMAL", "Practice Defense!"},
|
['defender_n']= {"Defender", "NORMAL", "Practice your defensive skills!"},
|
||||||
['defender_l']= {"Defender", "LUNATIC", "Practice Defense!"},
|
['defender_l']= {"Defender", "LUNATIC", "Practice your defensive skills!"},
|
||||||
['dig_h']= {"Driller", "HARD", "Digging practice!"},
|
['dig_h']= {"Driller", "HARD", "Digging practice!"},
|
||||||
['dig_u']= {"Driller", "ULTIMATE", "Digging practice!"},
|
['dig_u']= {"Driller", "ULTIMATE", "Digging practice!"},
|
||||||
['bigbang']= {"Big Bang", "EASY", "All-spin tutorial!\n[Under construction]"},
|
['bigbang']= {"Big Bang", "EASY", "All-spin tutorial!\n[Under construction]"},
|
||||||
['c4wtrain_n']= {"C4W Training", "NORMAL", "Infinite combos."},
|
['c4wtrain_n']= {"C4W Training", "NORMAL", "Infinite combos."},
|
||||||
['c4wtrain_l']= {"C4W Training", "LUNATIC", "Infinite combos."},
|
['c4wtrain_l']= {"C4W Training", "LUNATIC", "Infinite combos."},
|
||||||
['pctrain_n']= {"PC Training", "NORMAL", "Perfect Clear Practice."},
|
['pctrain_n']= {"PC Training", "NORMAL", "Perfect Clear practice."},
|
||||||
['pctrain_l']= {"PC Training", "LUNATIC", "Harder Perfect Clear Practice."},
|
['pctrain_l']= {"PC Training", "LUNATIC", "A harder Perfect Clear practice."},
|
||||||
['pc_n']= {"PC Challenge", "NORMAL", "Get PCs within 100 lines!"},
|
['pc_n']= {"PC Challenge", "NORMAL", "Get PCs within 100 lines!"},
|
||||||
['pc_h']= {"PC Challenge", "HARD", "Get PCs within 100 lines!"},
|
['pc_h']= {"PC Challenge", "HARD", "Get PCs within 100 lines!"},
|
||||||
['pc_l']= {"PC Challenge", "LUNATIC", "Get PCs within 100 lines!"},
|
['pc_l']= {"PC Challenge", "LUNATIC", "Get PCs within 100 lines!"},
|
||||||
|
['pc_inf']= {"Inf. PC Challenge","", "Get PCs as much as you can"},
|
||||||
['tech_n']= {"Tech", "NORMAL", "Try to keep the\nBack-to-Back chain!"},
|
['tech_n']= {"Tech", "NORMAL", "Try to keep the\nBack-to-Back chain!"},
|
||||||
['tech_n_plus']= {"Tech", "NORMAL+", "Spins & PCs only."},
|
['tech_n_plus']= {"Tech", "NORMAL+", "Spins & PCs only."},
|
||||||
['tech_h']= {"Tech", "HARD", "Try to keep the\nBack-to-Back chain!"},
|
['tech_h']= {"Tech", "HARD", "Try to keep the\nBack-to-Back chain!"},
|
||||||
@@ -756,6 +797,7 @@ return{
|
|||||||
['infinite_dig']= {"Infinite: Dig", "", "Dig-diggi-dug."},
|
['infinite_dig']= {"Infinite: Dig", "", "Dig-diggi-dug."},
|
||||||
['sprintFix']= {"Sprint", "NO LEFT/RIGHT"},
|
['sprintFix']= {"Sprint", "NO LEFT/RIGHT"},
|
||||||
['sprintLock']= {"Sprint", "NO ROTATIONS"},
|
['sprintLock']= {"Sprint", "NO ROTATIONS"},
|
||||||
|
['sprintSmooth']= {"Sprint", "NO FRICTION"},
|
||||||
['marathon_bfmax']= {"Marathon", "ULTIMATE"},
|
['marathon_bfmax']= {"Marathon", "ULTIMATE"},
|
||||||
['custom_clear']= {"Custom", "NORMAL"},
|
['custom_clear']= {"Custom", "NORMAL"},
|
||||||
['custom_puzzle']= {"Custom", "PUZZLE"},
|
['custom_puzzle']= {"Custom", "PUZZLE"},
|
||||||
@@ -774,21 +816,25 @@ return{
|
|||||||
"1next 1hold!",
|
"1next 1hold!",
|
||||||
"1next 6hold!",
|
"1next 6hold!",
|
||||||
"20G actually is a brand new game rule.",
|
"20G actually is a brand new game rule.",
|
||||||
"40-line Sprint WR: 15.654s by VinceHD",
|
"40-line Sprint WR: 15.557s by Reset",
|
||||||
"6next 1hold!",
|
"6next 1hold!",
|
||||||
"6next 6hold?!",
|
"6next 6hold?!",
|
||||||
|
"Achievement system coming soon!",
|
||||||
"ALL SPIN!",
|
"ALL SPIN!",
|
||||||
"Am G F G",
|
"Am G F G",
|
||||||
"B2B2B???",
|
"B2B2B???",
|
||||||
"B2B2B2B does not exist..",
|
"B2B2B2B does not exist..",
|
||||||
"B2B2B2B exists?",
|
"B2B2B2B exists?",
|
||||||
"Back-to-Back Techrash, 10 Combo, PC!",
|
"Back-to-Back Techrash, 10 Combo, PC!",
|
||||||
|
"Be sure to give it your best shot again today!",
|
||||||
"Bridge clear coming soon!",
|
"Bridge clear coming soon!",
|
||||||
|
"Can you master this modern yet familiar stacker?",
|
||||||
"Certainly within this heart lies my M@STERPIECE.",
|
"Certainly within this heart lies my M@STERPIECE.",
|
||||||
"Changelogs in English can be found on Discord.",
|
"Changelogs in English can be found on Discord.",
|
||||||
"Color clear coming soon!",
|
"Color clear coming soon!",
|
||||||
"COOL!!",
|
"COOL!!",
|
||||||
"Decreasing DAS and ARR is faster but harder to control.",
|
"Decreasing DAS and ARR is faster but harder to control.",
|
||||||
|
"Did I just see a Back-to-Back-to-Back?",
|
||||||
"Don't let a small glitch ruin your entire day!",
|
"Don't let a small glitch ruin your entire day!",
|
||||||
"Don't look directly at the bugs!",
|
"Don't look directly at the bugs!",
|
||||||
"Enjoy the Techmino rotation system!",
|
"Enjoy the Techmino rotation system!",
|
||||||
@@ -797,15 +843,14 @@ return{
|
|||||||
"Got any suggestions? Post them in our Discord!",
|
"Got any suggestions? Post them in our Discord!",
|
||||||
"Headphones recommended for a better experience.",
|
"Headphones recommended for a better experience.",
|
||||||
"Hello world!",
|
"Hello world!",
|
||||||
"if a==true",
|
|
||||||
"I3 and L3 are the only two unique triminoes.",
|
"I3 and L3 are the only two unique triminoes.",
|
||||||
|
"if a==true",
|
||||||
"Increase your frame rate for a better experience.",
|
"Increase your frame rate for a better experience.",
|
||||||
"Initial [insert action] system can save you.",
|
"Initial [insert action] system can save you.",
|
||||||
"Is B2B2B2B possible?",
|
"Is B2B2B2B possible?",
|
||||||
"It's possible to finish 40L without left/right button.",
|
"It's possible to finish 40L without left/right button.",
|
||||||
"It's really loading! Not just a cutscene!",
|
"It's really loading! Not just a cutscene!",
|
||||||
"Join our discord!",
|
"Join our discord!",
|
||||||
"l-=-1",
|
|
||||||
"Let the bass kick!",
|
"Let the bass kick!",
|
||||||
"LrL RlR LLr RRl RRR LLL FFF RfR RRf rFF",
|
"LrL RlR LLr RRl RRR LLL FFF RfR RRf rFF",
|
||||||
"Lua No.1",
|
"Lua No.1",
|
||||||
@@ -816,12 +861,14 @@ return{
|
|||||||
"O-Spin Triple!",
|
"O-Spin Triple!",
|
||||||
"OHHHHHHHHHHHHHH",
|
"OHHHHHHHHHHHHHH",
|
||||||
"Online mode is planned - please be patient.",
|
"Online mode is planned - please be patient.",
|
||||||
"Playing good takes some time!",
|
|
||||||
"Play single-handedly!",
|
"Play single-handedly!",
|
||||||
|
"Playing good takes some time!",
|
||||||
"Powered by Love2D",
|
"Powered by Love2D",
|
||||||
|
"Powered by Un..Love2D",
|
||||||
"pps-0.01",
|
"pps-0.01",
|
||||||
"REGRET!!",
|
"REGRET!!",
|
||||||
"Secret number: 626",
|
"Secret number: 626",
|
||||||
|
"Server down randomly",
|
||||||
"Some requirements to achieve rank S are intentionally set to be difficult for even the best players.",
|
"Some requirements to achieve rank S are intentionally set to be difficult for even the best players.",
|
||||||
"Soon, you'll be able to play against friends and foes all over the world.",
|
"Soon, you'll be able to play against friends and foes all over the world.",
|
||||||
"Split clear coming soon!",
|
"Split clear coming soon!",
|
||||||
@@ -833,7 +880,8 @@ return{
|
|||||||
"There are three hidden modes in the game.",
|
"There are three hidden modes in the game.",
|
||||||
"There is a total of 18 different pentominoes.",
|
"There is a total of 18 different pentominoes.",
|
||||||
"There is a total of 7 different tetrominoes.",
|
"There is a total of 7 different tetrominoes.",
|
||||||
"Try using two rotate buttons. All three is better.",
|
"Try using multiple Hold Queues!",
|
||||||
|
"Try using two rotation buttons. Using all three of them is better.",
|
||||||
"Warning: Programmer Art",
|
"Warning: Programmer Art",
|
||||||
"What about 20 PCs?",
|
"What about 20 PCs?",
|
||||||
"What about 23 PCs in 100 lines?",
|
"What about 23 PCs in 100 lines?",
|
||||||
@@ -842,7 +890,7 @@ return{
|
|||||||
"while(false)",
|
"while(false)",
|
||||||
"You are a Grand Master!",
|
"You are a Grand Master!",
|
||||||
"You can connect a keyboard to your phone or tablet!",
|
"You can connect a keyboard to your phone or tablet!",
|
||||||
"You can control with keyboard only in this menu",
|
"You can navigate the menu with a keyboard, but only in this screen.",
|
||||||
"You can open the save directory from the Stats page.",
|
"You can open the save directory from the Stats page.",
|
||||||
"You can perform a spin with 28 of the 29 minoes in this game; the exception being O1.",
|
"You can perform a spin with 28 of the 29 minoes in this game; the exception being O1.",
|
||||||
"You can set the spawning orientation for each tetromino.",
|
"You can set the spawning orientation for each tetromino.",
|
||||||
@@ -850,11 +898,12 @@ return{
|
|||||||
{C.C,"Also try 15puzzle!"},
|
{C.C,"Also try 15puzzle!"},
|
||||||
{C.C,"Also try Minecraft!"},
|
{C.C,"Also try Minecraft!"},
|
||||||
{C.C,"Also try Minesweeper!"},
|
{C.C,"Also try Minesweeper!"},
|
||||||
|
{C.C,"Also try Orzmic!"},
|
||||||
{C.C,"Also try osu!"},
|
{C.C,"Also try osu!"},
|
||||||
{C.C,"Also try Phigros!"},
|
{C.C,"Also try Phigros!"},
|
||||||
{C.C,"Also try Rubic's cube!"},
|
{C.C,"Also try Rubic's cube!"},
|
||||||
{C.C,"Also try Terraria!"},
|
{C.C,"Also try Terraria!"},
|
||||||
{C.C,"Also try VVVVVVV!"},
|
{C.C,"Also try VVVVVV!"},
|
||||||
{C.F,"Also try Cultris II!"},
|
{C.F,"Also try Cultris II!"},
|
||||||
{C.F,"Also try Jstris"},
|
{C.F,"Also try Jstris"},
|
||||||
{C.F,"Also try NullpoMino!"},
|
{C.F,"Also try NullpoMino!"},
|
||||||
|
|||||||
@@ -1,9 +1,7 @@
|
|||||||
return{
|
return{
|
||||||
fallback=4,
|
fallback=4,
|
||||||
back="Retour",
|
|
||||||
anykey="Appuyez sur n'importe quelle touche",
|
anykey="Appuyez sur n'importe quelle touche",
|
||||||
sureQuit="Appuyez à nouveau pour sortir",
|
sureQuit="Appuyez à nouveau pour sortir",
|
||||||
newVersion="Merci d'avoir mis le jeu à jour ! Les nouvelles fonctionnalités sont listées ci-dessous.",
|
|
||||||
httpTimeout="La connexion au réseau ne s'est pas faite à temps.",
|
httpTimeout="La connexion au réseau ne s'est pas faite à temps.",
|
||||||
newDay="[Anti-addiction] Nouveau jour, nouveau commencement !",
|
newDay="[Anti-addiction] Nouveau jour, nouveau commencement !",
|
||||||
playedLong="[Anti-addiction] Vous avez joué pendant un bon bout de temps aujourd'hui. Faites des pauses.",
|
playedLong="[Anti-addiction] Vous avez joué pendant un bon bout de temps aujourd'hui. Faites des pauses.",
|
||||||
@@ -16,7 +14,6 @@ return{
|
|||||||
clear={"Simple","Double","Triple","Techrash","Pentacrash","Hexacrash"},
|
clear={"Simple","Double","Triple","Techrash","Pentacrash","Hexacrash"},
|
||||||
mini="Mini",b2b="B2B ",b3b="B2B2B ",
|
mini="Mini",b2b="B2B ",b3b="B2B2B ",
|
||||||
PC="Perfect Clear",HPC="Clear",
|
PC="Perfect Clear",HPC="Clear",
|
||||||
hold="RESERVE",next="SUIVANT",
|
|
||||||
replaying="[Replay]",
|
replaying="[Replay]",
|
||||||
|
|
||||||
stage="Etape $1",
|
stage="Etape $1",
|
||||||
@@ -56,13 +53,14 @@ return{
|
|||||||
saveError="Sauvegarde échouée : ",
|
saveError="Sauvegarde échouée : ",
|
||||||
loadError="Lecture échouée : ",
|
loadError="Lecture échouée : ",
|
||||||
switchSpawnSFX="Activez les effets sonores d'apparition des pièces pour jouer",
|
switchSpawnSFX="Activez les effets sonores d'apparition des pièces pour jouer",
|
||||||
getRank="Rang : ",
|
|
||||||
|
|
||||||
needRestart="Fonctionnera dès la prochaine partie",
|
needRestart="Fonctionnera dès la prochaine partie",
|
||||||
|
|
||||||
exportSuccess="Exporté avec succès",
|
exportSuccess="Exporté avec succès",
|
||||||
importSuccess="Importé avec succès",
|
importSuccess="Importé avec succès",
|
||||||
dataCorrupted="Données corrompues",
|
dataCorrupted="Données corrompues",
|
||||||
|
-- pasteWrongPlace="Paste at wrong place?",
|
||||||
|
-- noFile="File not found",
|
||||||
|
|
||||||
VKTchW="Poids du toucher",
|
VKTchW="Poids du toucher",
|
||||||
VKOrgW="Poids d'origine",
|
VKOrgW="Poids d'origine",
|
||||||
@@ -73,10 +71,9 @@ return{
|
|||||||
newRecord="Nouveau record !",
|
newRecord="Nouveau record !",
|
||||||
|
|
||||||
getNoticeFail="Echec de l'obtention de la notice",
|
getNoticeFail="Echec de l'obtention de la notice",
|
||||||
getVersionFail="Echec d'obtention de la dernière version",
|
|
||||||
oldVersion="La version $1 est disponible !",
|
oldVersion="La version $1 est disponible !",
|
||||||
|
-- versionNotMatch="Version do not match!",
|
||||||
-- needUpdate="Newer version required!",
|
-- needUpdate="Newer version required!",
|
||||||
-- noInternet="Not connected to the network",
|
|
||||||
-- notFinished="Coming soon!",
|
-- notFinished="Coming soon!",
|
||||||
|
|
||||||
jsonError="Erreur json",
|
jsonError="Erreur json",
|
||||||
@@ -91,19 +88,22 @@ return{
|
|||||||
loginFailed="Erreur de connexion",
|
loginFailed="Erreur de connexion",
|
||||||
accessSuccessed="Autorisé avec succès !",
|
accessSuccessed="Autorisé avec succès !",
|
||||||
accessFailed="Autorisation échouée",
|
accessFailed="Autorisation échouée",
|
||||||
wsSuccessed="WebSocket: connecté",
|
|
||||||
|
-- wsConnecting="Websocket: Connecting",
|
||||||
wsFailed="WebSocket: connection échouée",
|
wsFailed="WebSocket: connection échouée",
|
||||||
-- wsClose="WebSocket Closed: ",
|
-- wsClose="WebSocket Closed: ",
|
||||||
-- netTimeout="Network connection timeout",
|
-- netTimeout="Network connection timeout",
|
||||||
|
|
||||||
createRoomTooFast="Vous avez créé un salon trop rapidement !",
|
-- onlinePlayerCount="Online",
|
||||||
|
|
||||||
createRoomSuccessed="Salon créé avec succès !",
|
createRoomSuccessed="Salon créé avec succès !",
|
||||||
-- started="Playing",
|
-- started="Playing",
|
||||||
joinRoom="a rejoint le salon.",
|
joinRoom="a rejoint le salon.",
|
||||||
leaveRoom="a quitté le salon.",
|
leaveRoom="a quitté le salon.",
|
||||||
-- ready="READY",
|
-- ready="READY",
|
||||||
-- set="SET",
|
-- connStream="CONNECTING",
|
||||||
champion="$1 a gagné",
|
-- waitStream="WAITING",
|
||||||
|
-- spectating="Spectating",
|
||||||
chatRemain="En ligne : ",
|
chatRemain="En ligne : ",
|
||||||
chatStart="--------Début des logs--------",
|
chatStart="--------Début des logs--------",
|
||||||
chatHistory="-Nouveaux messages en dessous-",
|
chatHistory="-Nouveaux messages en dessous-",
|
||||||
@@ -128,14 +128,7 @@ return{
|
|||||||
"Finesse :",
|
"Finesse :",
|
||||||
},
|
},
|
||||||
radar={"DEF","OFF","ATQ","ENVOYER","SPD","DIG"},
|
radar={"DEF","OFF","ATQ","ENVOYER","SPD","DIG"},
|
||||||
radarData={
|
radarData={"D'PM","ADPM","APM","SPM","L'PM","DPM"},
|
||||||
"D'PM",
|
|
||||||
"ADPM",
|
|
||||||
"APM",
|
|
||||||
"SPM",
|
|
||||||
"L'PM",
|
|
||||||
"DPM",
|
|
||||||
},
|
|
||||||
stat={
|
stat={
|
||||||
"Nombre de fois lancé :",
|
"Nombre de fois lancé :",
|
||||||
"Nombre de parties :",
|
"Nombre de parties :",
|
||||||
@@ -149,9 +142,9 @@ return{
|
|||||||
"PC/HPC :",
|
"PC/HPC :",
|
||||||
"Errs. Finesse/Finesse :",
|
"Errs. Finesse/Finesse :",
|
||||||
},
|
},
|
||||||
help={
|
aboutTexts={
|
||||||
"Ceci est un simple jeu de blocs.",
|
"Ceci est un simple jeu de blocs.",
|
||||||
"On y joue comme sur TO/C2/KOS/TGM3 et autres.",
|
"On y joue comme sur C2/IO/JS/WWC/KOS et autres.",
|
||||||
"",
|
"",
|
||||||
"Vous pouvez envoyer des rapports de bogues ou des suggastions via le groupe de test ou l'email du créateur ~",
|
"Vous pouvez envoyer des rapports de bogues ou des suggastions via le groupe de test ou l'email du créateur ~",
|
||||||
"Ce jeu est gratuit et est uniquement disponible via discord.gg/f9pUvkh",
|
"Ce jeu est gratuit et est uniquement disponible via discord.gg/f9pUvkh",
|
||||||
@@ -165,7 +158,7 @@ return{
|
|||||||
"",
|
"",
|
||||||
"Programme : MrZ, Particle_G, [FinnTenzor]",
|
"Programme : MrZ, Particle_G, [FinnTenzor]",
|
||||||
"Art : MrZ, ScF, [Gnyar, 旋律星萤, T0722]",
|
"Art : MrZ, ScF, [Gnyar, 旋律星萤, T0722]",
|
||||||
"Musique : MrZ, ERM, [T0722]",
|
"Musique : MrZ, ERM, [T0722, Aether]",
|
||||||
"Voix & Sons: Miya, Naki, MrZ Performance: 模电, HBM",
|
"Voix & Sons: Miya, Naki, MrZ Performance: 模电, HBM",
|
||||||
"Performance: 模电, HBM",
|
"Performance: 模电, HBM",
|
||||||
"Traduction: User670, MattMayuga, Mizu, Mr.Faq, ScF",
|
"Traduction: User670, MattMayuga, Mizu, Mr.Faq, ScF",
|
||||||
@@ -177,8 +170,8 @@ return{
|
|||||||
used=[[
|
used=[[
|
||||||
Outils utilisés:
|
Outils utilisés:
|
||||||
Beepbox
|
Beepbox
|
||||||
GFIE
|
|
||||||
Goldwave
|
Goldwave
|
||||||
|
GFIE
|
||||||
FL Mobile
|
FL Mobile
|
||||||
Libs utilisées:
|
Libs utilisées:
|
||||||
Cold_Clear [MinusKelvin]
|
Cold_Clear [MinusKelvin]
|
||||||
@@ -197,7 +190,6 @@ return{
|
|||||||
setting="Paramètres",
|
setting="Paramètres",
|
||||||
stat="Statistiques",
|
stat="Statistiques",
|
||||||
-- music="Music & SE",
|
-- music="Music & SE",
|
||||||
-- about="About",
|
|
||||||
dict="Zictionary",
|
dict="Zictionary",
|
||||||
manual="Manuel",
|
manual="Manuel",
|
||||||
},
|
},
|
||||||
@@ -219,24 +211,64 @@ return{
|
|||||||
quit="Quitter (Q)",
|
quit="Quitter (Q)",
|
||||||
},
|
},
|
||||||
net_menu={
|
net_menu={
|
||||||
|
-- league="Tech League",
|
||||||
ffa="FFA",
|
ffa="FFA",
|
||||||
rooms="Salons",
|
rooms="Salons",
|
||||||
chat="Chat",
|
|
||||||
-- logout="Log out",
|
-- logout="Log out",
|
||||||
},
|
},
|
||||||
|
net_league={
|
||||||
|
-- match="Find Match",
|
||||||
|
},
|
||||||
net_rooms={
|
net_rooms={
|
||||||
-- refreshing="Refreshing Rooms",
|
-- refreshing="Refreshing Rooms",
|
||||||
noRoom="Aucun salon actuellement",
|
noRoom="Aucun salon actuellement",
|
||||||
-- refresh="Refresh",
|
-- refresh="Refresh",
|
||||||
|
-- new="New Room",
|
||||||
join="Rejoindre",
|
join="Rejoindre",
|
||||||
},
|
},
|
||||||
|
net_newRoom={
|
||||||
|
-- title="Custom room config",
|
||||||
|
-- roomName="Room name(default to username's room)",
|
||||||
|
-- roomDescription="Room description",
|
||||||
|
|
||||||
|
life="Vie",
|
||||||
|
-- pushSpeed="Push Speed",
|
||||||
|
garbageSpeed="Vitesse des lignes indésirables",
|
||||||
|
visible="Visibilité",
|
||||||
|
freshLimit="Limite de réinit. du délai de verrouillage",
|
||||||
|
|
||||||
|
-- fieldH="Field height",
|
||||||
|
-- bufferLimit="Buffer Limit",
|
||||||
|
-- heightLimit="Height Limit",
|
||||||
|
|
||||||
|
drop="Délai de chute",
|
||||||
|
lock="Délai de verrouillage",
|
||||||
|
wait="Délai d'apparition",
|
||||||
|
fall="Délai de ligne",
|
||||||
|
|
||||||
|
-- capacity="Capacity",
|
||||||
|
-- create="Create",
|
||||||
|
|
||||||
|
ospin="O-spin",
|
||||||
|
fineKill="100% Finesse",
|
||||||
|
b2bKill="Sans perte de B2B",
|
||||||
|
easyFresh="Réinit. de verrouillage normale",
|
||||||
|
-- deepDrop="Deep Drop",
|
||||||
|
bone="Crochets",
|
||||||
|
|
||||||
|
nextCount="Prévisualisations de pièces",
|
||||||
|
holdCount="Réserve",
|
||||||
|
infHold="Réserver une fois",
|
||||||
|
-- phyHold="Physical Hold",
|
||||||
|
|
||||||
|
bg="Arrière-plan",
|
||||||
|
bgm="Musique",
|
||||||
|
},
|
||||||
net_game={
|
net_game={
|
||||||
-- ready="Ready",
|
-- ready="Ready",
|
||||||
|
-- spectate="Spectate",
|
||||||
-- cancel="Cancel",
|
-- cancel="Cancel",
|
||||||
},
|
},
|
||||||
net_chat={
|
|
||||||
send="Envoyer",
|
|
||||||
},
|
|
||||||
setting_game={
|
setting_game={
|
||||||
title="Paramètres du jeu",
|
title="Paramètres du jeu",
|
||||||
|
|
||||||
@@ -252,7 +284,6 @@ return{
|
|||||||
autoPause="Mettre en pause en cas de perte de focus",
|
autoPause="Mettre en pause en cas de perte de focus",
|
||||||
swap="Combinaison de touches (changer le mode d'attaque)",
|
swap="Combinaison de touches (changer le mode d'attaque)",
|
||||||
fine="Son d'erreur de Finesse",
|
fine="Son d'erreur de Finesse",
|
||||||
-- dataSaving="Data saving",
|
|
||||||
-- simpMode="Simple mode",
|
-- simpMode="Simple mode",
|
||||||
},
|
},
|
||||||
setting_video={
|
setting_video={
|
||||||
@@ -277,18 +308,21 @@ return{
|
|||||||
splashFX="Effets splash",
|
splashFX="Effets splash",
|
||||||
shakeFX="Tremblements de l'écran",
|
shakeFX="Tremblements de l'écran",
|
||||||
atkFX="Effets d'attaque",
|
atkFX="Effets d'attaque",
|
||||||
frame="Montrer les FPS",
|
frame="Montrer les FPS(%)",
|
||||||
|
|
||||||
text="Texte d'action",
|
text="Texte d'action",
|
||||||
score="Pop-up de score",
|
score="Pop-up de score",
|
||||||
warn="Alerte de danger",
|
-- bufferWarn="Buffer Alert",
|
||||||
highCam="Vue d'oiseau",
|
-- showSpike="Spike Counter",
|
||||||
nextPos="Prévisualisation de position",
|
nextPos="Prévisualisation de position",
|
||||||
fullscreen="Plein écran",
|
highCam="Vue d'oiseau",
|
||||||
power="Infos d'alimentation",
|
warn="Alerte de danger",
|
||||||
|
|
||||||
-- clickFX="Click FX",
|
-- clickFX="Click FX",
|
||||||
bg="Arrière-plan",
|
power="Infos d'alimentation",
|
||||||
-- clean="Fast Draw",
|
-- clean="Fast Draw",
|
||||||
|
fullscreen="Plein écran",
|
||||||
|
bg="Arrière-plan",
|
||||||
},
|
},
|
||||||
setting_sound={
|
setting_sound={
|
||||||
title="Paramètres du son",
|
title="Paramètres du son",
|
||||||
@@ -296,11 +330,11 @@ return{
|
|||||||
game="←Jeu",
|
game="←Jeu",
|
||||||
graphic="Vidéo→",
|
graphic="Vidéo→",
|
||||||
|
|
||||||
|
bgm="Musique",
|
||||||
sfx="Sons",
|
sfx="Sons",
|
||||||
|
stereo="Stéréo",
|
||||||
spawn="Apparition",
|
spawn="Apparition",
|
||||||
warn="Alerte de danger",
|
warn="Alerte de danger",
|
||||||
bgm="Musique",
|
|
||||||
stereo="Stéréo",
|
|
||||||
vib="Vibration",
|
vib="Vibration",
|
||||||
voc="Voix",
|
voc="Voix",
|
||||||
},
|
},
|
||||||
@@ -347,8 +381,12 @@ return{
|
|||||||
setting_touch={
|
setting_touch={
|
||||||
default="Par défaut",
|
default="Par défaut",
|
||||||
snap="Snap",
|
snap="Snap",
|
||||||
option="Options",
|
-- save1="Save1",
|
||||||
|
-- load1="Load1",
|
||||||
|
-- save2="Save2",
|
||||||
|
-- load2="Load2",
|
||||||
size="Taille",
|
size="Taille",
|
||||||
|
-- shape="Shape",
|
||||||
},
|
},
|
||||||
setting_touchSwitch={
|
setting_touchSwitch={
|
||||||
b1= "Déplacement vers la gauche :",b2="Déplacement vers la droite:",
|
b1= "Déplacement vers la gauche :",b2="Déplacement vers la droite:",
|
||||||
@@ -358,18 +396,17 @@ return{
|
|||||||
b11="Déplacement instantané vers la gauche :",b12="Déplacement instantané vers la droite :",
|
b11="Déplacement instantané vers la gauche :",b12="Déplacement instantané vers la droite :",
|
||||||
b13="Chute sonique :",b14="Descendre de 1 :",b15="Descendre de 4 :",b16="Descendre de 10:",
|
b13="Chute sonique :",b14="Descendre de 1 :",b15="Descendre de 4 :",b16="Descendre de 10:",
|
||||||
b17="Chute à gauche :",b18="Chute à droite :",b19="Zangi Gauche :",b20="Zangi Droite :",
|
b17="Chute à gauche :",b18="Chute à droite :",b19="Zangi Gauche :",b20="Zangi Droite :",
|
||||||
|
|
||||||
norm="Normal",
|
norm="Normal",
|
||||||
pro="Professionel",
|
pro="Professionel",
|
||||||
hide="Montrer les touches virtuelles",
|
hide="Montrer les touches virtuelles",
|
||||||
track="Auto Track",
|
icon="Icône",
|
||||||
sfx="Sons",
|
sfx="Sons",
|
||||||
vib="Vib.",
|
vib="Vib.",
|
||||||
icon="Icône",
|
|
||||||
tkset="Paramètres des tracks",
|
|
||||||
alpha="Alpha",
|
alpha="Alpha",
|
||||||
},
|
|
||||||
setting_trackSetting={
|
track="Auto Track",
|
||||||
VKDodge="Auto-esquive",
|
dodge="Auto-esquive",
|
||||||
},
|
},
|
||||||
customGame={
|
customGame={
|
||||||
title="Mode personnalisé",
|
title="Mode personnalisé",
|
||||||
@@ -396,28 +433,28 @@ return{
|
|||||||
field="Modifier la matrice (F)",
|
field="Modifier la matrice (F)",
|
||||||
sequence="Modifier la séquence (S)",
|
sequence="Modifier la séquence (S)",
|
||||||
mission="Modifier la mission(M)",
|
mission="Modifier la mission(M)",
|
||||||
},
|
|
||||||
custom_advance={
|
|
||||||
title="Mode personnalisé",
|
|
||||||
subTitle="Avancer",
|
|
||||||
|
|
||||||
nextCount="Prévisualisations de pièces",
|
nextCount="Prévisualisations de pièces",
|
||||||
holdCount="Réserve",
|
holdCount="Réserve",
|
||||||
infHold="Réserver une fois",
|
infHold="Réserver une fois",
|
||||||
-- phyHold="Physical Hold",
|
-- phyHold="Physical Hold",
|
||||||
bone="Crochets",
|
|
||||||
|
|
||||||
-- fieldH="Field height",
|
-- fieldH="Field height",
|
||||||
ospin="O-spin",
|
|
||||||
-- deepDrop="Deep Drop",
|
|
||||||
visible="Visibilité",
|
visible="Visibilité",
|
||||||
freshLimit="Limite de réinit. du délai de verrouillage",
|
freshLimit="Limite de réinit. du délai de verrouillage",
|
||||||
easyFresh="Réinit. de verrouillage normale",
|
|
||||||
fineKill="100% Finesse",
|
|
||||||
b2bKill="Sans perte de B2B",
|
|
||||||
opponent="Adversaire",
|
opponent="Adversaire",
|
||||||
life="Vie",
|
life="Vie",
|
||||||
pushSpeed="Vitesse des lignes indésirables",
|
-- pushSpeed="Push Speed",
|
||||||
|
garbageSpeed="Vitesse des lignes indésirables",
|
||||||
|
|
||||||
|
-- bufferLimit="Buffer Limit",
|
||||||
|
-- heightLimit="Height Limit",
|
||||||
|
ospin="O-spin",
|
||||||
|
fineKill="100% Finesse",
|
||||||
|
b2bKill="Sans perte de B2B",
|
||||||
|
easyFresh="Réinit. de verrouillage normale",
|
||||||
|
-- deepDrop="Deep Drop",
|
||||||
|
bone="Crochets",
|
||||||
},
|
},
|
||||||
custom_field={
|
custom_field={
|
||||||
title="Mode personnalisé",
|
title="Mode personnalisé",
|
||||||
@@ -504,6 +541,7 @@ return{
|
|||||||
register="Enregistrement",
|
register="Enregistrement",
|
||||||
email="E-mail",
|
email="E-mail",
|
||||||
password="Mot de passe",
|
password="Mot de passe",
|
||||||
|
-- keepPW="Remember me",
|
||||||
login="Connexion",
|
login="Connexion",
|
||||||
},
|
},
|
||||||
register={
|
register={
|
||||||
@@ -564,15 +602,17 @@ return{
|
|||||||
qq="QQ du créateur",
|
qq="QQ du créateur",
|
||||||
},
|
},
|
||||||
savedata={
|
savedata={
|
||||||
exportUnlock="Exporter les Unlocks",
|
-- export="Export to clipboard",
|
||||||
exportData="Exporter les Données",
|
-- import="Import from clipboard",
|
||||||
exportSetting="Exporter les Paramètres",
|
-- unlock="Progress",
|
||||||
exportVK="Exporter VK",
|
-- data="Stats",
|
||||||
|
-- setting="Settings",
|
||||||
|
-- vk="Virtual Key Layout",
|
||||||
|
|
||||||
importUnlock="Importer les Unlocks",
|
-- couldSave="Cloud Save (need login) (CAUTION: TESTING)",
|
||||||
importData="Importer les Données",
|
-- notLogin="[Login to access cloud save]",
|
||||||
importSetting="Importer les Paramètres",
|
-- upload="Upload to cloud",
|
||||||
importVK="Importer VK",
|
-- download="Download from cloud",
|
||||||
},
|
},
|
||||||
error={
|
error={
|
||||||
console="Console",
|
console="Console",
|
||||||
@@ -594,7 +634,7 @@ return{
|
|||||||
['dig_400l']= {"Dig", "400L", "Creusez 400 lines"},
|
['dig_400l']= {"Dig", "400L", "Creusez 400 lines"},
|
||||||
['dig_1000l']= {"Dig", "1000L", "Creusez 1000 lines"},
|
['dig_1000l']= {"Dig", "1000L", "Creusez 1000 lines"},
|
||||||
['drought_n']= {"Drought", "100L", "Pas de pièce I !"},
|
['drought_n']= {"Drought", "100L", "Pas de pièce I !"},
|
||||||
['drought_l']= {"Drought", "100L", "WTF ??!!"},
|
['drought_l']= {"Drought+", "100L", "WTF ??!!"},
|
||||||
['marathon_n']= {"Marathon", "NORMAL", "Marathon de 200 lignes."},
|
['marathon_n']= {"Marathon", "NORMAL", "Marathon de 200 lignes."},
|
||||||
['marathon_h']= {"Marathon", "DIFFICILE", "Marathon de 200 lignes à très haute vitesse"},
|
['marathon_h']= {"Marathon", "DIFFICILE", "Marathon de 200 lignes à très haute vitesse"},
|
||||||
['solo_e']= {"Battle", "FACILE", "Battez l'IA !"},
|
['solo_e']= {"Battle", "FACILE", "Battez l'IA !"},
|
||||||
@@ -647,6 +687,7 @@ return{
|
|||||||
['pc_n']= {"PC Challenge", "NORMAL", "Obtenez un PC dans les prochaines 100 lignes !"},
|
['pc_n']= {"PC Challenge", "NORMAL", "Obtenez un PC dans les prochaines 100 lignes !"},
|
||||||
['pc_h']= {"PC Challenge", "DIFFICILE", "Obtenez un PC dans les prochaines 100 lignes !"},
|
['pc_h']= {"PC Challenge", "DIFFICILE", "Obtenez un PC dans les prochaines 100 lignes !"},
|
||||||
['pc_l']= {"PC Challenge", "LUNATIQUE", "Obtenez un PC dans les prochaines 100 lignes !"},
|
['pc_l']= {"PC Challenge", "LUNATIQUE", "Obtenez un PC dans les prochaines 100 lignes !"},
|
||||||
|
-- ['pc_inf']= {"Inf. PC Challenge","", "Get PCs as much as you can"},
|
||||||
['tech_n']= {"Tech", "NORMAL", "Gardez le B2B !"},
|
['tech_n']= {"Tech", "NORMAL", "Gardez le B2B !"},
|
||||||
['tech_n_plus']= {"Tech", "NORMAL+", "Spin & PC uniquement"},
|
['tech_n_plus']= {"Tech", "NORMAL+", "Spin & PC uniquement"},
|
||||||
['tech_h']= {"Tech", "DIFFICILE", "Gardez le B2B !"},
|
['tech_h']= {"Tech", "DIFFICILE", "Gardez le B2B !"},
|
||||||
@@ -668,6 +709,7 @@ return{
|
|||||||
['infinite_dig']= {"Infini : Dig", "", "Creuser, creuser, creuser."},
|
['infinite_dig']= {"Infini : Dig", "", "Creuser, creuser, creuser."},
|
||||||
['sprintFix']= {"Sprint", "Sans gauche/droite"},
|
['sprintFix']= {"Sprint", "Sans gauche/droite"},
|
||||||
['sprintLock']= {"Sprint", "Sans rotation"},
|
['sprintLock']= {"Sprint", "Sans rotation"},
|
||||||
|
-- ['sprintSmooth']= {"Sprint", "NO FRICTION"},
|
||||||
['marathon_bfmax']= {"Marathon", "ULTIME"},
|
['marathon_bfmax']= {"Marathon", "ULTIME"},
|
||||||
['custom_clear']= {"Perso.", "NORMAL"},
|
['custom_clear']= {"Perso.", "NORMAL"},
|
||||||
['custom_puzzle']= {"Perso.", "PUZZLE"},
|
['custom_puzzle']= {"Perso.", "PUZZLE"},
|
||||||
|
|||||||
@@ -1,10 +1,8 @@
|
|||||||
local C=COLOR
|
local C=COLOR
|
||||||
return{
|
return{
|
||||||
fallback=4,
|
fallback=4,
|
||||||
back="Voltar",
|
|
||||||
anykey="Pressione qualquer tecla",
|
anykey="Pressione qualquer tecla",
|
||||||
sureQuit="Aparte novamente para sair",
|
sureQuit="Aparte novamente para sair",
|
||||||
newVersion="Obrigado por atualizar! Veja as mudanças abaixo.",
|
|
||||||
httpTimeout="Conexão de rede expirou",
|
httpTimeout="Conexão de rede expirou",
|
||||||
newDay="[Anti-vício] Novo dia, um começo novo!",
|
newDay="[Anti-vício] Novo dia, um começo novo!",
|
||||||
playedLong="[Anti-vício] Você andou jogando bastante hoje. Certifique-se de fazer pausas.",
|
playedLong="[Anti-vício] Você andou jogando bastante hoje. Certifique-se de fazer pausas.",
|
||||||
@@ -17,7 +15,6 @@ return{
|
|||||||
clear={"Single","Double","Triple","Techrash","Pentacrash","Hexacrash"},
|
clear={"Single","Double","Triple","Techrash","Pentacrash","Hexacrash"},
|
||||||
mini="Mini",b2b="B2B ",b3b="B2B2B ",
|
mini="Mini",b2b="B2B ",b3b="B2B2B ",
|
||||||
PC="Perfect Clear",HPC="Clear",
|
PC="Perfect Clear",HPC="Clear",
|
||||||
hold="HOLD",next="NEXT",
|
|
||||||
replaying="[Replay]",
|
replaying="[Replay]",
|
||||||
|
|
||||||
stage="Fase $1",
|
stage="Fase $1",
|
||||||
@@ -56,13 +53,14 @@ return{
|
|||||||
saveError="Falha ao salvar:",
|
saveError="Falha ao salvar:",
|
||||||
loadError="Falha ao ler:",
|
loadError="Falha ao ler:",
|
||||||
switchSpawnSFX="Switch on spawn SFX to play",
|
switchSpawnSFX="Switch on spawn SFX to play",
|
||||||
ranks={"D","C","B","A","S"},
|
|
||||||
|
|
||||||
needRestart="Funciona após reiniciar",
|
needRestart="Funciona após reiniciar",
|
||||||
|
|
||||||
exportSuccess="Exportado com sucesso",
|
exportSuccess="Exportado com sucesso",
|
||||||
importSuccess="Importado com sucesso",
|
importSuccess="Importado com sucesso",
|
||||||
dataCorrupted="Data corrompida",
|
dataCorrupted="Data corrompida",
|
||||||
|
-- pasteWrongPlace="Paste at wrong place?",
|
||||||
|
-- noFile="File not found",
|
||||||
|
|
||||||
VKTchW="Peso de toque",
|
VKTchW="Peso de toque",
|
||||||
VKOrgW="Peso da origem",
|
VKOrgW="Peso da origem",
|
||||||
@@ -73,10 +71,9 @@ return{
|
|||||||
newRecord="Novo recorde",
|
newRecord="Novo recorde",
|
||||||
|
|
||||||
getNoticeFail="Não conseguiu ter anúncios",
|
getNoticeFail="Não conseguiu ter anúncios",
|
||||||
getVersionFail="Falha ao detectar uma versão nova",
|
|
||||||
oldVersion="Versão $1 esta disponível agora!",
|
oldVersion="Versão $1 esta disponível agora!",
|
||||||
|
-- versionNotMatch="Version do not match!",
|
||||||
-- needUpdate="Newer version required!",
|
-- needUpdate="Newer version required!",
|
||||||
-- noInternet="Not connected to the network",
|
|
||||||
-- notFinished="Coming soon!",
|
-- notFinished="Coming soon!",
|
||||||
|
|
||||||
jsonError="Json error",
|
jsonError="Json error",
|
||||||
@@ -91,20 +88,23 @@ return{
|
|||||||
loginFailed="Falha na autenticação",
|
loginFailed="Falha na autenticação",
|
||||||
accessSuccessed="Autorizado com sucesso!",
|
accessSuccessed="Autorizado com sucesso!",
|
||||||
accessFailed="Falha na autorização",
|
accessFailed="Falha na autorização",
|
||||||
wsSuccessed="WebSocket: conectado",
|
|
||||||
|
-- wsConnecting="Websocket: Connecting",
|
||||||
wsFailed="WebSocket: falha na conexão",
|
wsFailed="WebSocket: falha na conexão",
|
||||||
wsClose="WebSocket closed: ",
|
wsClose="WebSocket closed: ",
|
||||||
-- netTimeout="Network connection timeout",
|
-- netTimeout="Network connection timeout",
|
||||||
|
|
||||||
-- createRoomTooFast="Create room too fast!",
|
-- onlinePlayerCount="Online",
|
||||||
|
|
||||||
-- createRoomSuccessed="Room successfully created!",
|
-- createRoomSuccessed="Room successfully created!",
|
||||||
-- started="Playing",
|
-- started="Playing",
|
||||||
joinRoom="Entrou a sala.",
|
joinRoom="Entrou a sala.",
|
||||||
leaveRoom="Saiu da sala.",
|
leaveRoom="Saiu da sala.",
|
||||||
-- ready="READY",
|
-- ready="READY",
|
||||||
-- set="SET",
|
-- connStream="CONNECTING",
|
||||||
-- champion="$1 won",
|
-- waitStream="WAITING",
|
||||||
chatRemain="Online: ",
|
-- spectating="Spectating",
|
||||||
|
chatRemain="Online",
|
||||||
chatStart="------Começo do log------",
|
chatStart="------Começo do log------",
|
||||||
chatHistory="------Novas mensagens abaixo------",
|
chatHistory="------Novas mensagens abaixo------",
|
||||||
|
|
||||||
@@ -151,14 +151,7 @@ return{
|
|||||||
"Destreza:",
|
"Destreza:",
|
||||||
},
|
},
|
||||||
radar={"DEF","OFF","ATK","SEND","SPD","DIG"},
|
radar={"DEF","OFF","ATK","SEND","SPD","DIG"},
|
||||||
radarData={
|
radarData={"D'PM","ADPM","APM","SPM","L'PM","DPM"},
|
||||||
"D'PM",
|
|
||||||
"ADPM",
|
|
||||||
"APM",
|
|
||||||
"SPM",
|
|
||||||
"L'PM",
|
|
||||||
"DPM",
|
|
||||||
},
|
|
||||||
stat={
|
stat={
|
||||||
"Vezes iniciadas:",
|
"Vezes iniciadas:",
|
||||||
"Jogos:",
|
"Jogos:",
|
||||||
@@ -172,9 +165,9 @@ return{
|
|||||||
"PC/HPC:",
|
"PC/HPC:",
|
||||||
"FalhaDestreza/TaxaDestreza:",
|
"FalhaDestreza/TaxaDestreza:",
|
||||||
},
|
},
|
||||||
help={
|
aboutTexts={
|
||||||
"Isso é apenas um jogo de blocos, nada de especial.",
|
"Isso é apenas um jogo de blocos, nada de especial.",
|
||||||
"Joga como TO/C2/KOS/TGM3 e outros.",
|
"Joga como C2/IO/JS/WWC/KOS e outros.",
|
||||||
"",
|
"",
|
||||||
"Feito na Love 2D Engine",
|
"Feito na Love 2D Engine",
|
||||||
"Por favor mande bugs ou sugestões para o autor.",
|
"Por favor mande bugs ou sugestões para o autor.",
|
||||||
@@ -189,7 +182,7 @@ return{
|
|||||||
"",
|
"",
|
||||||
"Programa: MrZ, Particle_G, [FinnTenzor]",
|
"Programa: MrZ, Particle_G, [FinnTenzor]",
|
||||||
"Art: MrZ, ScF, [Gnyar, 旋律星萤, T0722]",
|
"Art: MrZ, ScF, [Gnyar, 旋律星萤, T0722]",
|
||||||
"Music: MrZ, ERM, [T0722]",
|
"Music: MrZ, ERM, [T0722, Aether]",
|
||||||
"Voice & Sound: Miya, Naki, MrZ",
|
"Voice & Sound: Miya, Naki, MrZ",
|
||||||
"Performance: 模电, HBM",
|
"Performance: 模电, HBM",
|
||||||
"Traduzir: User670, MattMayuga, Mizu, Mr.Faq, ScF",
|
"Traduzir: User670, MattMayuga, Mizu, Mr.Faq, ScF",
|
||||||
@@ -201,8 +194,8 @@ return{
|
|||||||
used=[[
|
used=[[
|
||||||
Ferramentas usadas:
|
Ferramentas usadas:
|
||||||
Beepbox
|
Beepbox
|
||||||
GFIE
|
|
||||||
Goldwave
|
Goldwave
|
||||||
|
GFIE
|
||||||
FL Mobile
|
FL Mobile
|
||||||
Libs used:
|
Libs used:
|
||||||
Cold_Clear [MinusKelvin]
|
Cold_Clear [MinusKelvin]
|
||||||
@@ -221,7 +214,6 @@ return{
|
|||||||
setting="Config.",
|
setting="Config.",
|
||||||
stat="Stats",
|
stat="Stats",
|
||||||
-- music="Music & SE",
|
-- music="Music & SE",
|
||||||
-- about="About",
|
|
||||||
dict="Zictionary",
|
dict="Zictionary",
|
||||||
manual="Manual",
|
manual="Manual",
|
||||||
},
|
},
|
||||||
@@ -247,26 +239,64 @@ return{
|
|||||||
quit="Sair (Q)",
|
quit="Sair (Q)",
|
||||||
},
|
},
|
||||||
net_menu={
|
net_menu={
|
||||||
|
-- league="Tech League",
|
||||||
ffa="FFA",
|
ffa="FFA",
|
||||||
rooms="Salas",
|
rooms="Salas",
|
||||||
chat="Chat",
|
|
||||||
-- logout="Log out",
|
-- logout="Log out",
|
||||||
},
|
},
|
||||||
|
net_league={
|
||||||
|
-- match="Find Match",
|
||||||
|
},
|
||||||
net_rooms={
|
net_rooms={
|
||||||
-- refreshing="Refreshing Rooms",
|
-- refreshing="Refreshing Rooms",
|
||||||
noRoom="Nenhuma sala agora",
|
noRoom="Nenhuma sala agora",
|
||||||
-- refresh="Refresh",
|
-- refresh="Refresh",
|
||||||
-- new="New Room(2)",
|
-- new="New Room",
|
||||||
-- new2="New Room(5)",
|
|
||||||
-- join="Join",
|
-- join="Join",
|
||||||
},
|
},
|
||||||
|
net_newRoom={
|
||||||
|
-- title="Custom room config",
|
||||||
|
-- roomName="Room name(default to username's room)",
|
||||||
|
-- roomDescription="Room description",
|
||||||
|
|
||||||
|
life="Vidas",
|
||||||
|
pushSpeed="Garbage Speed",
|
||||||
|
-- garbageSpeed="Velocidade De Lixo",
|
||||||
|
visible="Visibilidade",
|
||||||
|
freshLimit="Limite Reset de Trava",
|
||||||
|
|
||||||
|
-- fieldH="Field height",
|
||||||
|
-- bufferLimit="Buffer Limit",
|
||||||
|
-- heightLimit="Height Limit",
|
||||||
|
|
||||||
|
drop="Delay Queda",
|
||||||
|
lock="Delay Trava",
|
||||||
|
wait="Delay Entrada",
|
||||||
|
fall="Delay Linha",
|
||||||
|
|
||||||
|
-- capacity="Capacity",
|
||||||
|
-- create="Create",
|
||||||
|
|
||||||
|
ospin="O-Spin",
|
||||||
|
fineKill="100% Finesse",
|
||||||
|
b2bKill="Sem Quebrar B2B",
|
||||||
|
easyFresh="Reset De Trava Normal",
|
||||||
|
-- deepDrop="Deep Drop",
|
||||||
|
bone="Bone Blocks",
|
||||||
|
|
||||||
|
nextCount="Prox.",
|
||||||
|
holdCount="Segurar",
|
||||||
|
infHold="Segurar Infinito",
|
||||||
|
-- phyHold="Physical Hold",
|
||||||
|
|
||||||
|
bg="Fundo",
|
||||||
|
bgm="Música",
|
||||||
|
},
|
||||||
net_game={
|
net_game={
|
||||||
-- ready="Ready",
|
-- ready="Ready",
|
||||||
|
-- spectate="Spectate",
|
||||||
-- cancel="Cancel",
|
-- cancel="Cancel",
|
||||||
},
|
},
|
||||||
net_chat={
|
|
||||||
send="Mandar",
|
|
||||||
},
|
|
||||||
setting_game={
|
setting_game={
|
||||||
title="Config. de jogo",
|
title="Config. de jogo",
|
||||||
graphic="←Video",
|
graphic="←Video",
|
||||||
@@ -281,7 +311,6 @@ return{
|
|||||||
autoPause="Pausar quando foco for perco",
|
autoPause="Pausar quando foco for perco",
|
||||||
swap="Combinação de tecla(Mudar modo de atk)",
|
swap="Combinação de tecla(Mudar modo de atk)",
|
||||||
fine="Som Falha de destreza",
|
fine="Som Falha de destreza",
|
||||||
-- dataSaving="Data saving",
|
|
||||||
-- simpMode="Simple mode",
|
-- simpMode="Simple mode",
|
||||||
},
|
},
|
||||||
setting_video={
|
setting_video={
|
||||||
@@ -290,14 +319,14 @@ return{
|
|||||||
game="Jogo→",
|
game="Jogo→",
|
||||||
|
|
||||||
block="Mostrar bloco",
|
block="Mostrar bloco",
|
||||||
ghost="Fantasma",
|
|
||||||
center="Centro",
|
|
||||||
|
|
||||||
smooth="Queda suave",
|
smooth="Queda suave",
|
||||||
grid="Rede",
|
|
||||||
upEdge="3D bloco",
|
upEdge="3D bloco",
|
||||||
bagLine="Linha da bolsa",
|
bagLine="Linha da bolsa",
|
||||||
|
|
||||||
|
ghost="Fantasma",
|
||||||
|
grid="Rede",
|
||||||
|
center="Centro",
|
||||||
|
|
||||||
lockFX="Nível FX Trava",
|
lockFX="Nível FX Trava",
|
||||||
dropFX="Nível FX Queda",
|
dropFX="Nível FX Queda",
|
||||||
moveFX="Nível FX Mover",
|
moveFX="Nível FX Mover",
|
||||||
@@ -305,18 +334,21 @@ return{
|
|||||||
splashFX="Nível FX Splash",
|
splashFX="Nível FX Splash",
|
||||||
shakeFX="Nível Tremida Tabuleiro",
|
shakeFX="Nível Tremida Tabuleiro",
|
||||||
atkFX="Nível FX Atk.",
|
atkFX="Nível FX Atk.",
|
||||||
frame="Render Frame Rate",
|
frame="Render Frame Rate(%)",
|
||||||
|
|
||||||
text="Texto de ação",
|
text="Texto de ação",
|
||||||
score="Pop-up de pontos",
|
score="Pop-up de pontos",
|
||||||
warn="Alerta de perigo",
|
-- bufferWarn="Buffer Alert",
|
||||||
highCam="Vista Olho-de-pássaro",
|
-- showSpike="Spike Counter",
|
||||||
nextPos="Próxima Pos.",
|
nextPos="Próxima Pos.",
|
||||||
fullscreen="Tela cheia",
|
highCam="Vista Olho-de-pássaro",
|
||||||
power="Informação bateria",
|
warn="Alerta de perigo",
|
||||||
|
|
||||||
-- clickFX="Click FX",
|
-- clickFX="Click FX",
|
||||||
bg="Fundo",
|
power="Informação bateria",
|
||||||
-- clean="Fast Draw",
|
-- clean="Fast Draw",
|
||||||
|
fullscreen="Tela cheia",
|
||||||
|
bg="Fundo",
|
||||||
},
|
},
|
||||||
setting_sound={
|
setting_sound={
|
||||||
title="Config. de sons",
|
title="Config. de sons",
|
||||||
@@ -324,11 +356,11 @@ return{
|
|||||||
game="←Jogo",
|
game="←Jogo",
|
||||||
graphic="Vídeo→",
|
graphic="Vídeo→",
|
||||||
|
|
||||||
|
bgm="BGM",
|
||||||
sfx="SFX",
|
sfx="SFX",
|
||||||
|
stereo="Stereo",
|
||||||
spawn="Nascida",
|
spawn="Nascida",
|
||||||
warn="Alerta de perigo",
|
warn="Alerta de perigo",
|
||||||
bgm="BGM",
|
|
||||||
stereo="Stereo",
|
|
||||||
vib="Vibração",
|
vib="Vibração",
|
||||||
voc="Voz",
|
voc="Voz",
|
||||||
cv="Pacote de voz",
|
cv="Pacote de voz",
|
||||||
@@ -377,8 +409,12 @@ return{
|
|||||||
setting_touch={
|
setting_touch={
|
||||||
default="Default",
|
default="Default",
|
||||||
snap="Encaixo",
|
snap="Encaixo",
|
||||||
option="Opção",
|
-- save1="Save1",
|
||||||
|
-- load1="Load1",
|
||||||
|
-- save2="Save2",
|
||||||
|
-- load2="Load2",
|
||||||
size="Tamanho",
|
size="Tamanho",
|
||||||
|
-- shape="Shape",
|
||||||
},
|
},
|
||||||
setting_touchSwitch={
|
setting_touchSwitch={
|
||||||
b1= "Esquerda:", b2="Direita:", b3="Giro Dir.:", b4="Giro Esq.:",
|
b1= "Esquerda:", b2="Direita:", b3="Giro Dir.:", b4="Giro Esq.:",
|
||||||
@@ -386,18 +422,17 @@ return{
|
|||||||
b9= "Função:", b10="Reiniciar Jogo:", b11="Esq. Imediata:",b12="Dir. Imediata:",
|
b9= "Função:", b10="Reiniciar Jogo:", b11="Esq. Imediata:",b12="Dir. Imediata:",
|
||||||
b13="Queda Sonic:", b14="Queda 1:", b15="Queda 4:", b16="Queda 10:",
|
b13="Queda Sonic:", b14="Queda 1:", b15="Queda 4:", b16="Queda 10:",
|
||||||
b17="Queda Esq.:", b18="Queda Dir.:", b19="Zangi Esq.:", b20="Zangi Dir.:",
|
b17="Queda Esq.:", b18="Queda Dir.:", b19="Zangi Esq.:", b20="Zangi Dir.:",
|
||||||
|
|
||||||
norm="Normal",
|
norm="Normal",
|
||||||
pro="Professional",
|
pro="Professional",
|
||||||
hide="Mostrar tecla virtual",
|
hide="Mostrar tecla virtual",
|
||||||
track="Localizar Auto",
|
icon="Icone",
|
||||||
sfx="SFX",
|
sfx="SFX",
|
||||||
vib="VIB",
|
vib="VIB",
|
||||||
icon="Icone",
|
|
||||||
tkset="Config. localizacao",
|
|
||||||
alpha="Transparência",
|
alpha="Transparência",
|
||||||
},
|
|
||||||
setting_trackSetting={
|
track="Localizar Auto",
|
||||||
VKDodge="Auto Dodge",
|
dodge="Auto Dodge",
|
||||||
},
|
},
|
||||||
customGame={
|
customGame={
|
||||||
title="Jogo person.",
|
title="Jogo person.",
|
||||||
@@ -424,28 +459,28 @@ return{
|
|||||||
field="Editar Tab. (F)",
|
field="Editar Tab. (F)",
|
||||||
sequence="Editar Sequência (S)",
|
sequence="Editar Sequência (S)",
|
||||||
mission="Editar Missão (M)",
|
mission="Editar Missão (M)",
|
||||||
},
|
|
||||||
custom_advance={
|
|
||||||
title="Jogo Person.",
|
|
||||||
subTitle="Avançado",
|
|
||||||
|
|
||||||
nextCount="Prox.",
|
nextCount="Prox.",
|
||||||
holdCount="Segurar",
|
holdCount="Segurar",
|
||||||
infHold="Segurar Infinito",
|
infHold="Segurar Infinito",
|
||||||
-- phyHold="Physical Hold",
|
-- phyHold="Physical Hold",
|
||||||
bone="Bone Blocks",
|
|
||||||
|
|
||||||
-- fieldH="Field height",
|
-- fieldH="Field height",
|
||||||
ospin="O-Spin",
|
|
||||||
-- deepDrop="Deep Drop",
|
|
||||||
visible="Visibilidade",
|
visible="Visibilidade",
|
||||||
freshLimit="Limite Reset de Trava",
|
freshLimit="Limite Reset de Trava",
|
||||||
easyFresh="Reset De Trava Normal",
|
|
||||||
fineKill="100% Finesse",
|
|
||||||
b2bKill="Sem Quebrar B2B",
|
|
||||||
opponent="Oponente",
|
opponent="Oponente",
|
||||||
life="Vidas",
|
life="Vidas",
|
||||||
pushSpeed="Velocidade De Lixo",
|
pushSpeed="Garbage Speed",
|
||||||
|
-- garbageSpeed="Velocidade De Lixo",
|
||||||
|
|
||||||
|
-- bufferLimit="Buffer Limit",
|
||||||
|
-- heightLimit="Height Limit",
|
||||||
|
ospin="O-Spin",
|
||||||
|
fineKill="100% Finesse",
|
||||||
|
b2bKill="Sem Quebrar B2B",
|
||||||
|
easyFresh="Reset De Trava Normal",
|
||||||
|
-- deepDrop="Deep Drop",
|
||||||
|
bone="Bone Blocks",
|
||||||
},
|
},
|
||||||
custom_field={
|
custom_field={
|
||||||
title="Jogo Costumizado",
|
title="Jogo Costumizado",
|
||||||
@@ -594,6 +629,7 @@ return{
|
|||||||
register="Registrar",
|
register="Registrar",
|
||||||
email="Endereço De Email",
|
email="Endereço De Email",
|
||||||
password="Senha",
|
password="Senha",
|
||||||
|
-- keepPW="Remember me",
|
||||||
login="Log in",
|
login="Log in",
|
||||||
},
|
},
|
||||||
register={
|
register={
|
||||||
@@ -649,15 +685,17 @@ return{
|
|||||||
-- mode="Mode",
|
-- mode="Mode",
|
||||||
},
|
},
|
||||||
savedata={
|
savedata={
|
||||||
exportUnlock="Exportar progresso",
|
-- export="Export to clipboard",
|
||||||
exportData="Exportar estatística",
|
-- import="Import from clipboard",
|
||||||
exportSetting="Exportar config.",
|
-- unlock="Progress",
|
||||||
exportVK="Exportar layout de hud",
|
-- data="Stats",
|
||||||
|
-- setting="Settings",
|
||||||
|
-- vk="Virtual Key Layout",
|
||||||
|
|
||||||
importUnlock="Importar progresso",
|
-- couldSave="Cloud Save (need login) (CAUTION: TESTING)",
|
||||||
importData="Importar estatística",
|
-- notLogin="[Login to access cloud save]",
|
||||||
importSetting="Importar config.",
|
-- upload="Upload to cloud",
|
||||||
importVK="Importar layout de hud",
|
-- download="Download from cloud",
|
||||||
},
|
},
|
||||||
error={
|
error={
|
||||||
console="Console",
|
console="Console",
|
||||||
@@ -679,7 +717,7 @@ return{
|
|||||||
['dig_400l']= {"Cave", "400L", "Cave 400 linhas de lixo."},
|
['dig_400l']= {"Cave", "400L", "Cave 400 linhas de lixo."},
|
||||||
['dig_1000l']= {"Cave", "1000L", "Cave 1000 linhas de lixo."},
|
['dig_1000l']= {"Cave", "1000L", "Cave 1000 linhas de lixo."},
|
||||||
['drought_n']= {"Drought", "100L", "Sem peça I !"},
|
['drought_n']= {"Drought", "100L", "Sem peça I !"},
|
||||||
['drought_l']= {"Drought", "100L", "WTF"},
|
['drought_l']= {"Drought+", "100L", "WTF"},
|
||||||
['marathon_n']= {"Maratona", "NORMAL", "200-line Maratona com velocidade aumentando."},
|
['marathon_n']= {"Maratona", "NORMAL", "200-line Maratona com velocidade aumentando."},
|
||||||
['marathon_h']= {"Maratona", "DIFÍCIL", "200-line Maratona com velocidade alta."},
|
['marathon_h']= {"Maratona", "DIFÍCIL", "200-line Maratona com velocidade alta."},
|
||||||
['solo_e']= {"Batalha", "FÁCIL", "Derrote a inteligência!"},
|
['solo_e']= {"Batalha", "FÁCIL", "Derrote a inteligência!"},
|
||||||
@@ -732,6 +770,7 @@ return{
|
|||||||
['pc_n']= {"Desafio PC", "NORMAL", "Obtenha PCs em 100 linhas!"},
|
['pc_n']= {"Desafio PC", "NORMAL", "Obtenha PCs em 100 linhas!"},
|
||||||
['pc_h']= {"Desafio PC", "DIFÍCIL", "Obtenha PCs em 100 linhas!"},
|
['pc_h']= {"Desafio PC", "DIFÍCIL", "Obtenha PCs em 100 linhas!"},
|
||||||
['pc_l']= {"Desafio PC", "LUNÁTICO", "Obteha PCs em 100 linhas!"},
|
['pc_l']= {"Desafio PC", "LUNÁTICO", "Obteha PCs em 100 linhas!"},
|
||||||
|
-- ['pc_inf']= {"Inf. PC Challenge","", "Get PCs as much as you can"},
|
||||||
['tech_n']= {"Tech", "NORMAL", "Não quebre o B2B!"},
|
['tech_n']= {"Tech", "NORMAL", "Não quebre o B2B!"},
|
||||||
['tech_n_plus']= {"Tech", "NORMAL+", "Apenas spins e PC"},
|
['tech_n_plus']= {"Tech", "NORMAL+", "Apenas spins e PC"},
|
||||||
['tech_h']= {"Tech", "HARD", "Keep the B2B chain!"},
|
['tech_h']= {"Tech", "HARD", "Keep the B2B chain!"},
|
||||||
@@ -753,6 +792,7 @@ return{
|
|||||||
['infinite_dig']= {"Infinito:Cave", "", "Cava, Cava, Cava."},
|
['infinite_dig']= {"Infinito:Cave", "", "Cava, Cava, Cava."},
|
||||||
['sprintFix']= {"Sprint", "SEM ESQUERDA/DIREITA"},
|
['sprintFix']= {"Sprint", "SEM ESQUERDA/DIREITA"},
|
||||||
['sprintLock']= {"Sprint", "SEM ROTAÇÃO"},
|
['sprintLock']= {"Sprint", "SEM ROTAÇÃO"},
|
||||||
|
-- ['sprintSmooth']= {"Sprint", "NO FRICTION"},
|
||||||
['marathon_bfmax']= {"Maratona", "ULTIMATE"},
|
['marathon_bfmax']= {"Maratona", "ULTIMATE"},
|
||||||
['custom_clear']= {"Custom", "NORMAL"},
|
['custom_clear']= {"Custom", "NORMAL"},
|
||||||
['custom_puzzle']= {"Custom", "PUZZLE"},
|
['custom_puzzle']= {"Custom", "PUZZLE"},
|
||||||
@@ -772,7 +812,7 @@ return{
|
|||||||
"1next 1hold!",
|
"1next 1hold!",
|
||||||
"1next 6hold!",
|
"1next 6hold!",
|
||||||
"Na verdade 20G é uma regra de jogo nova.",
|
"Na verdade 20G é uma regra de jogo nova.",
|
||||||
"40-linhas Sprint WR: 15.654s por VinceHD",
|
"40-lines Sprint WR: 15.557s by Reset",
|
||||||
"6next 1hold!",
|
"6next 1hold!",
|
||||||
"6next 6hold?!",
|
"6next 6hold?!",
|
||||||
"ALL SPIN!",
|
"ALL SPIN!",
|
||||||
|
|||||||
@@ -1,9 +1,7 @@
|
|||||||
return{
|
return{
|
||||||
fallback=4,
|
fallback=4,
|
||||||
back="Atrás",
|
|
||||||
anykey="Pulsa cualquier tecla",
|
anykey="Pulsa cualquier tecla",
|
||||||
sureQuit="Pulsa de nuevo para salir",
|
sureQuit="Pulsa de nuevo para salir",
|
||||||
newVersion="¡Gracias por actualizar! Detalles a continuación:",
|
|
||||||
httpTimeout="¡Tiempo de espera de conexión agotado!",
|
httpTimeout="¡Tiempo de espera de conexión agotado!",
|
||||||
newDay="[Anti-adicción] ¡Nuevo día, nuevo comienzo!",
|
newDay="[Anti-adicción] ¡Nuevo día, nuevo comienzo!",
|
||||||
playedLong="[Anti-adicción] Estuviste jugando un buen rato hoy. Recuerda descansar de vez en cuando.",
|
playedLong="[Anti-adicción] Estuviste jugando un buen rato hoy. Recuerda descansar de vez en cuando.",
|
||||||
@@ -16,7 +14,6 @@ return{
|
|||||||
clear={"Single","Doble","Triple","Techrash","Pentacrash","Hexacrash"},
|
clear={"Single","Doble","Triple","Techrash","Pentacrash","Hexacrash"},
|
||||||
mini="Mini",b2b="B2B ",b3b="B2B2B ",
|
mini="Mini",b2b="B2B ",b3b="B2B2B ",
|
||||||
PC="Perfect Clear",HPC="Half Clear",
|
PC="Perfect Clear",HPC="Half Clear",
|
||||||
hold="Reserva",next="Sig.",
|
|
||||||
replaying="[Repetición]",
|
replaying="[Repetición]",
|
||||||
|
|
||||||
stage="Nivel $1",
|
stage="Nivel $1",
|
||||||
@@ -51,18 +48,18 @@ return{
|
|||||||
ai_fixed="La IA no es compatible con secuencias de piezas prefijadas.",
|
ai_fixed="La IA no es compatible con secuencias de piezas prefijadas.",
|
||||||
ai_prebag="La IA no es compatible con secuencias de piezas personalizadas.",
|
ai_prebag="La IA no es compatible con secuencias de piezas personalizadas.",
|
||||||
ai_mission="La IA no es compatible con misiones personalizadas.",
|
ai_mission="La IA no es compatible con misiones personalizadas.",
|
||||||
settingSaved="Cambios guardados",
|
|
||||||
saveDone="Datos guardados",
|
saveDone="Datos guardados",
|
||||||
saveError="Error al guardar:",
|
saveError="Error al guardar:",
|
||||||
loadError="Error al cargar:",
|
loadError="Error al cargar:",
|
||||||
switchSpawnSFX="Habilita los sonidos de aparición de las piezas ;)",
|
switchSpawnSFX="Habilita los sonidos de aparición de las piezas ;)",
|
||||||
getRank="Rango obtenido:",
|
|
||||||
|
|
||||||
needRestart="Reinicia Techmino para que los cambios tengan efecto.",
|
needRestart="Reinicia Techmino para que los cambios tengan efecto.",
|
||||||
|
|
||||||
exportSuccess="Exportado con éxito",
|
exportSuccess="Exportado con éxito",
|
||||||
importSuccess="Importado con éxito",
|
importSuccess="Importado con éxito",
|
||||||
dataCorrupted="Los datos están corruptos.",
|
dataCorrupted="Los datos están corruptos.",
|
||||||
|
-- pasteWrongPlace="Paste at wrong place?",
|
||||||
|
-- noFile="File not found",
|
||||||
|
|
||||||
VKTchW="Sens. al tacto",
|
VKTchW="Sens. al tacto",
|
||||||
VKOrgW="Sens. al origen",
|
VKOrgW="Sens. al origen",
|
||||||
@@ -73,10 +70,9 @@ return{
|
|||||||
newRecord="¡Nuevo Récord!",
|
newRecord="¡Nuevo Récord!",
|
||||||
|
|
||||||
getNoticeFail="Error al buscar novedades.",
|
getNoticeFail="Error al buscar novedades.",
|
||||||
getVersionFail="Error al buscar nuevas versiones.",
|
|
||||||
oldVersion="¡Está disponible la nueva versión $1!",
|
oldVersion="¡Está disponible la nueva versión $1!",
|
||||||
needUpdate="¡Nueva versión requerida!",
|
-- versionNotMatch="Version do not match!",
|
||||||
-- noInternet="Not connected to the network",
|
-- needUpdate="¡Nueva versión requerida!",
|
||||||
notFinished="Próximamente",
|
notFinished="Próximamente",
|
||||||
|
|
||||||
jsonError="Error en Json",
|
jsonError="Error en Json",
|
||||||
@@ -91,19 +87,22 @@ return{
|
|||||||
loginFailed="Error al ingresar",
|
loginFailed="Error al ingresar",
|
||||||
accessSuccessed="¡Autorizado exitoso!",
|
accessSuccessed="¡Autorizado exitoso!",
|
||||||
accessFailed="Error al autorizar",
|
accessFailed="Error al autorizar",
|
||||||
wsSuccessed="WebSocket: conectado",
|
|
||||||
|
-- wsConnecting="Websocket: Connecting",
|
||||||
wsFailed="WebSocket: conexión fallida",
|
wsFailed="WebSocket: conexión fallida",
|
||||||
wsClose="WebSocket cerrado: ",
|
wsClose="WebSocket cerrado: ",
|
||||||
waitNetTask="Conectando, espera por favor",
|
-- netTimeout="Network connection timeout",
|
||||||
|
|
||||||
|
-- onlinePlayerCount="Online",
|
||||||
|
|
||||||
createRoomTooFast="¡Creas salas muy rápido, párale we!",
|
|
||||||
createRoomSuccessed="¡Sala creada con éxito!",
|
createRoomSuccessed="¡Sala creada con éxito!",
|
||||||
-- started="Playing",
|
-- started="Playing",
|
||||||
joinRoom="entró a la sala.",
|
joinRoom="entró a la sala.",
|
||||||
leaveRoom="salió de la sala.",
|
leaveRoom="salió de la sala.",
|
||||||
-- ready="READY",
|
-- ready="READY",
|
||||||
-- set="SET",
|
-- connStream="CONNECTING",
|
||||||
champion="$1 ganó!",
|
-- waitStream="WAITING",
|
||||||
|
-- spectating="Spectating",
|
||||||
chatRemain="Usuarios en línea: ",
|
chatRemain="Usuarios en línea: ",
|
||||||
chatStart="------Comienzo del historial------",
|
chatStart="------Comienzo del historial------",
|
||||||
chatHistory="------Nuevos mensajes------",
|
chatHistory="------Nuevos mensajes------",
|
||||||
@@ -128,14 +127,7 @@ return{
|
|||||||
"Finesse:",
|
"Finesse:",
|
||||||
},
|
},
|
||||||
radar={"DEF","OFF","ATK","SEND","SPD","DIG"},
|
radar={"DEF","OFF","ATK","SEND","SPD","DIG"},
|
||||||
radarData={
|
radarData={"D'PM","ADPM","APM","SPM","L'PM","DPM"},
|
||||||
"D'PM",
|
|
||||||
"ADPM",
|
|
||||||
"APM",
|
|
||||||
"SPM",
|
|
||||||
"L'PM",
|
|
||||||
"DPM",
|
|
||||||
},
|
|
||||||
stat={
|
stat={
|
||||||
"Veces Iniciado:",
|
"Veces Iniciado:",
|
||||||
"Veces Jugado:",
|
"Veces Jugado:",
|
||||||
@@ -149,9 +141,9 @@ return{
|
|||||||
"PC/HPC:",
|
"PC/HPC:",
|
||||||
"Err.Fns./RatioFns:",
|
"Err.Fns./RatioFns:",
|
||||||
},
|
},
|
||||||
help={
|
aboutTexts={
|
||||||
"Este es simplemente un juego de puzzle ordinario, no pienses de él como un juego promedio.",
|
"Este es simplemente un juego de puzzle ordinario, no pienses de él como un juego promedio.",
|
||||||
"Está inspirado en otros como TO/C2/KoS/TGM3/JS.",
|
"Está inspirado en otros como C2/IO/JS/WWC/KOS.",
|
||||||
"",
|
"",
|
||||||
"Creado con LOVE2D",
|
"Creado con LOVE2D",
|
||||||
"Puedes reportar errores o enviar sugerencias al grupo de testeo del autor o por email ~",
|
"Puedes reportar errores o enviar sugerencias al grupo de testeo del autor o por email ~",
|
||||||
@@ -166,7 +158,7 @@ return{
|
|||||||
"",
|
"",
|
||||||
"Programación: MrZ, Particle_G, [FinnTenzor]",
|
"Programación: MrZ, Particle_G, [FinnTenzor]",
|
||||||
"Artistas: MrZ, ScF, [Gnyar, 旋律星萤, T0722]",
|
"Artistas: MrZ, ScF, [Gnyar, 旋律星萤, T0722]",
|
||||||
"Música: MrZ, ERM, [T0722]",
|
"Música: MrZ, ERM, [T0722, Aether]",
|
||||||
"Voces/Sonidos: Miya, Naki, MrZ Performance: 模电, HBM",
|
"Voces/Sonidos: Miya, Naki, MrZ Performance: 模电, HBM",
|
||||||
"Performance: 模电, HBM",
|
"Performance: 模电, HBM",
|
||||||
"Traducción: User670, MattMayuga, Mizu, Mr.Faq, ScF",
|
"Traducción: User670, MattMayuga, Mizu, Mr.Faq, ScF",
|
||||||
@@ -178,8 +170,8 @@ return{
|
|||||||
used=[[
|
used=[[
|
||||||
Herramientas utilizadas:
|
Herramientas utilizadas:
|
||||||
Beepbox
|
Beepbox
|
||||||
GFIE
|
|
||||||
Goldwave
|
Goldwave
|
||||||
|
GFIE
|
||||||
FL Mobile
|
FL Mobile
|
||||||
Librerías usadas:
|
Librerías usadas:
|
||||||
Cold_Clear [MinusKelvin]
|
Cold_Clear [MinusKelvin]
|
||||||
@@ -198,7 +190,6 @@ return{
|
|||||||
setting="Opciones",
|
setting="Opciones",
|
||||||
stat="Estadísticas",
|
stat="Estadísticas",
|
||||||
music="Música y SFX",
|
music="Música y SFX",
|
||||||
about="Acerca del Juego",
|
|
||||||
dict="Zictionary",
|
dict="Zictionary",
|
||||||
manual="Manual",
|
manual="Manual",
|
||||||
},
|
},
|
||||||
@@ -224,26 +215,64 @@ return{
|
|||||||
quit="Finalizar (Q)",
|
quit="Finalizar (Q)",
|
||||||
},
|
},
|
||||||
net_menu={
|
net_menu={
|
||||||
|
-- league="Tech League",
|
||||||
ffa="FFA",
|
ffa="FFA",
|
||||||
rooms="Salas",
|
rooms="Salas",
|
||||||
chat="Chat",
|
|
||||||
-- logout="Log out",
|
-- logout="Log out",
|
||||||
},
|
},
|
||||||
|
net_league={
|
||||||
|
-- match="Find Match",
|
||||||
|
},
|
||||||
net_rooms={
|
net_rooms={
|
||||||
-- refreshing="Refreshing Rooms",
|
-- refreshing="Refreshing Rooms",
|
||||||
noRoom="No Hay Salas Actualmente",
|
noRoom="No Hay Salas Actualmente",
|
||||||
refresh="Refrescar",
|
refresh="Refrescar",
|
||||||
new="Sala Nueva(2)",
|
-- new="New Room",
|
||||||
new2="Sala Nueva(5)",
|
|
||||||
join="Unirse",
|
join="Unirse",
|
||||||
},
|
},
|
||||||
|
net_newRoom={
|
||||||
|
-- title="Custom room config",
|
||||||
|
-- roomName="Room name(default to username's room)",
|
||||||
|
-- roomDescription="Room description",
|
||||||
|
|
||||||
|
life="Vida",
|
||||||
|
-- pushSpeed="Garbage Speed",
|
||||||
|
garbageSpeed="Velocidad de Basura",
|
||||||
|
visible="Visibilidad",
|
||||||
|
freshLimit="Límite de Reinicio LD",
|
||||||
|
|
||||||
|
fieldH="Altura del tablero",
|
||||||
|
-- bufferLimit="Buffer Limit",
|
||||||
|
-- heightLimit="Height Limit",
|
||||||
|
|
||||||
|
drop="Retraso de Caída",
|
||||||
|
lock="Retraso de Bloqueo",
|
||||||
|
wait="Retraso de Spawneo",
|
||||||
|
fall="Retraso de Línea",
|
||||||
|
|
||||||
|
-- capacity="Capacity",
|
||||||
|
-- create="Create",
|
||||||
|
|
||||||
|
ospin="O-Spin",
|
||||||
|
fineKill="100% Finesse",
|
||||||
|
b2bKill="No Romper B2B ",
|
||||||
|
easyFresh="Reinicio de Bloqueo Normal",
|
||||||
|
deepDrop="Deep Drop",
|
||||||
|
bone="Bone Block",
|
||||||
|
|
||||||
|
nextCount="Siguiente",
|
||||||
|
holdCount="Reserva",
|
||||||
|
infHold="Reserva Inft.",
|
||||||
|
phyHold="Reserva Limit.",
|
||||||
|
|
||||||
|
bg="Fundo",
|
||||||
|
bgm="Música",
|
||||||
|
},
|
||||||
net_game={
|
net_game={
|
||||||
ready="Estoy Listo",
|
ready="Estoy Listo",
|
||||||
|
-- spectate="Spectate",
|
||||||
-- cancel="Cancel",
|
-- cancel="Cancel",
|
||||||
},
|
},
|
||||||
net_chat={
|
|
||||||
send="Enviar",
|
|
||||||
},
|
|
||||||
setting_game={
|
setting_game={
|
||||||
title="Ajustes del Juego",
|
title="Ajustes del Juego",
|
||||||
graphic="←Video",
|
graphic="←Video",
|
||||||
@@ -258,7 +287,6 @@ return{
|
|||||||
autoPause="Pausar cuando la ventana no está enfocada",
|
autoPause="Pausar cuando la ventana no está enfocada",
|
||||||
swap="Combinación de Teclas (Cambiar Modo de Ataque)",
|
swap="Combinación de Teclas (Cambiar Modo de Ataque)",
|
||||||
fine="Sonido de Error de Finesse",
|
fine="Sonido de Error de Finesse",
|
||||||
-- dataSaving="Data saving",
|
|
||||||
simpMode="Modo Sencillo",
|
simpMode="Modo Sencillo",
|
||||||
},
|
},
|
||||||
setting_video={
|
setting_video={
|
||||||
@@ -282,29 +310,32 @@ return{
|
|||||||
splashFX="FX Vis. de Splash",
|
splashFX="FX Vis. de Splash",
|
||||||
shakeFX="Bamboleo del Tablero",
|
shakeFX="Bamboleo del Tablero",
|
||||||
atkFX="FX Vis. de Ataque",
|
atkFX="FX Vis. de Ataque",
|
||||||
frame="Ratio de FPSs",
|
frame="Ratio de FPSs(%)",
|
||||||
|
|
||||||
text="Texto de Acciones",
|
text="Texto de Acciones",
|
||||||
score="Puntaje en Pantalla",
|
score="Puntaje en Pantalla",
|
||||||
warn="Alerta de Peligro",
|
-- bufferWarn="Buffer Alert",
|
||||||
highCam="Cám. Vista Aérea",
|
-- showSpike="Spike Counter",
|
||||||
nextPos="Ver Spawn de Pza. Sig.",
|
nextPos="Ver Spawn de Pza. Sig.",
|
||||||
fullscreen="Pant. Completa",
|
highCam="Cám. Vista Aérea",
|
||||||
power="Inf. de Batería",
|
warn="Alerta de Peligro",
|
||||||
|
|
||||||
-- clickFX="Click FX",
|
-- clickFX="Click FX",
|
||||||
bg="Fondo",
|
power="Inf. de Batería",
|
||||||
clean="Fast Draw",
|
clean="Fast Draw",
|
||||||
|
fullscreen="Pant. Completa",
|
||||||
|
bg="Fondo",
|
||||||
},
|
},
|
||||||
setting_sound={
|
setting_sound={
|
||||||
title="Ajustes de Sonido",
|
title="Ajustes de Sonido",
|
||||||
game="←Juego",
|
game="←Juego",
|
||||||
graphic="Video→",
|
graphic="Video→",
|
||||||
|
|
||||||
|
bgm="BGM",
|
||||||
sfx="SFX",
|
sfx="SFX",
|
||||||
|
stereo="Estéreo",
|
||||||
spawn="Spawn de Pzas.",
|
spawn="Spawn de Pzas.",
|
||||||
warn="Alerta de Peligro",
|
warn="Alerta de Peligro",
|
||||||
bgm="BGM",
|
|
||||||
stereo="Estéreo",
|
|
||||||
vib="Vibración",
|
vib="Vibración",
|
||||||
voc="Voces",
|
voc="Voces",
|
||||||
},
|
},
|
||||||
@@ -350,8 +381,12 @@ return{
|
|||||||
setting_touch={
|
setting_touch={
|
||||||
default="Por Defecto",
|
default="Por Defecto",
|
||||||
snap="Snap",
|
snap="Snap",
|
||||||
option="Opciones",
|
-- save1="Save1",
|
||||||
|
-- load1="Load1",
|
||||||
|
-- save2="Save2",
|
||||||
|
-- load2="Load2",
|
||||||
size="Tamaño",
|
size="Tamaño",
|
||||||
|
-- shape="Shape",
|
||||||
},
|
},
|
||||||
setting_touchSwitch={
|
setting_touchSwitch={
|
||||||
b1= "Mover Izq.:",b2="Mover Der.:",b3="Rotar Der.:",b4="Rotar Izq.:",
|
b1= "Mover Izq.:",b2="Mover Der.:",b3="Rotar Der.:",b4="Rotar Izq.:",
|
||||||
@@ -359,18 +394,17 @@ return{
|
|||||||
b9= "Función1:",b10="Función2:",b11="Izq. Instant.:",b12="Der. Instant.:",
|
b9= "Función1:",b10="Función2:",b11="Izq. Instant.:",b12="Der. Instant.:",
|
||||||
b13="Sonic Drop:",b14="Abajo 1:",b15="Abajo 4:",b16="Abajo 10:",
|
b13="Sonic Drop:",b14="Abajo 1:",b15="Abajo 4:",b16="Abajo 10:",
|
||||||
b17="Soltar a Izq.:",b18="Soltar a Der.:",b19="Zangi a Izq.:",b20="Zangi a Der.:",
|
b17="Soltar a Izq.:",b18="Soltar a Der.:",b19="Zangi a Izq.:",b20="Zangi a Der.:",
|
||||||
|
|
||||||
norm="Normal",
|
norm="Normal",
|
||||||
pro="Profesional",
|
pro="Profesional",
|
||||||
hide="Mostrar Tec. Virtual",
|
hide="Mostrar Tec. Virtual",
|
||||||
track="Música Autom.",
|
icon="Ícono",
|
||||||
sfx="SFX",
|
sfx="SFX",
|
||||||
vib="Vibr.",
|
vib="Vibr.",
|
||||||
icon="Ícono",
|
|
||||||
tkset="Ajustes de Canción",
|
|
||||||
alpha="Alpha",
|
alpha="Alpha",
|
||||||
},
|
|
||||||
setting_trackSetting={
|
track="Música Autom.",
|
||||||
VKDodge="Autoskip",
|
dodge="Autoskip",
|
||||||
},
|
},
|
||||||
customGame={
|
customGame={
|
||||||
title="Juego Personalizado",
|
title="Juego Personalizado",
|
||||||
@@ -397,29 +431,28 @@ return{
|
|||||||
field="Editar Tablero (F)",
|
field="Editar Tablero (F)",
|
||||||
sequence="Editar Secuencia (S)",
|
sequence="Editar Secuencia (S)",
|
||||||
mission="Editar Misiones (M)",
|
mission="Editar Misiones (M)",
|
||||||
},
|
|
||||||
custom_advance={
|
|
||||||
title="Juego Personalizado",
|
|
||||||
subTitle="Avanzado",
|
|
||||||
|
|
||||||
nextCount="Siguiente",
|
nextCount="Siguiente",
|
||||||
holdCount="Reserva",
|
holdCount="Reserva",
|
||||||
infHold="Reserva Inft.",
|
infHold="Reserva Inft.",
|
||||||
phyHold="Reserva Limit.",
|
phyHold="Reserva Limit.",
|
||||||
bone="Bone Block",
|
|
||||||
|
|
||||||
fieldH="Altura del tablero",
|
fieldH="Altura del tablero",
|
||||||
ospin="O-Spin",
|
|
||||||
deepDrop="Deep Drop",
|
|
||||||
target="Objetivo",
|
|
||||||
visible="Visibilidad",
|
visible="Visibilidad",
|
||||||
freshLimit="Límite de Reinicio LD",
|
freshLimit="Límite de Reinicio LD",
|
||||||
easyFresh="Reinicio de Bloqueo Normal",
|
|
||||||
fineKill="100% Finesse",
|
|
||||||
b2bKill="No Romper B2B ",
|
|
||||||
opponent="Oponente",
|
opponent="Oponente",
|
||||||
life="Vida",
|
life="Vida",
|
||||||
pushSpeed="Velocidad de Basura",
|
-- pushSpeed="Garbage Speed",
|
||||||
|
garbageSpeed="Velocidad de Basura",
|
||||||
|
|
||||||
|
-- bufferLimit="Buffer Limit",
|
||||||
|
-- heightLimit="Height Limit",
|
||||||
|
ospin="O-Spin",
|
||||||
|
fineKill="100% Finesse",
|
||||||
|
b2bKill="No Romper B2B ",
|
||||||
|
easyFresh="Reinicio de Bloqueo Normal",
|
||||||
|
deepDrop="Deep Drop",
|
||||||
|
bone="Bone Block",
|
||||||
},
|
},
|
||||||
custom_field={
|
custom_field={
|
||||||
title="Juego Personalizado",
|
title="Juego Personalizado",
|
||||||
@@ -508,6 +541,7 @@ return{
|
|||||||
register="Registrarse",
|
register="Registrarse",
|
||||||
email="Correo Elec.",
|
email="Correo Elec.",
|
||||||
password="Contraseña",
|
password="Contraseña",
|
||||||
|
-- keepPW="Remember me",
|
||||||
login="Entrar",
|
login="Entrar",
|
||||||
},
|
},
|
||||||
register={
|
register={
|
||||||
@@ -563,15 +597,17 @@ return{
|
|||||||
mode="Modo",
|
mode="Modo",
|
||||||
},
|
},
|
||||||
savedata={
|
savedata={
|
||||||
exportUnlock="Exportar Desbloqueos",
|
-- export="Export to clipboard",
|
||||||
exportData="Exportar Récords",
|
-- import="Import from clipboard",
|
||||||
exportSetting="Exportar Ajustes",
|
-- unlock="Progress",
|
||||||
exportVK="Exportar VK",
|
-- data="Stats",
|
||||||
|
-- setting="Settings",
|
||||||
|
-- vk="Virtual Key Layout",
|
||||||
|
|
||||||
importUnlock="Importar Desbloqueos",
|
-- couldSave="Cloud Save (need login) (CAUTION: TESTING)",
|
||||||
importData="Importar Datos",
|
-- notLogin="[Login to access cloud save]",
|
||||||
importSetting="Importar Ajustes",
|
-- upload="Upload to cloud",
|
||||||
importVK="Importar VK",
|
-- download="Download from cloud",
|
||||||
},
|
},
|
||||||
error={
|
error={
|
||||||
console="Console",
|
console="Console",
|
||||||
@@ -593,7 +629,7 @@ return{
|
|||||||
['dig_400l']= {"Queso", "400L", "Limpia 400 líneas de queso."},
|
['dig_400l']= {"Queso", "400L", "Limpia 400 líneas de queso."},
|
||||||
['dig_1000l']= {"Queso", "1000L", "Limpia 1000 líneas de queso."},
|
['dig_1000l']= {"Queso", "1000L", "Limpia 1000 líneas de queso."},
|
||||||
['drought_n']= {"Sequía", "100L", "¡Sin piezas I!"},
|
['drought_n']= {"Sequía", "100L", "¡Sin piezas I!"},
|
||||||
['drought_l']= {"Sequía", "100L", "Guat de foc..."},
|
['drought_l']= {"Sequía+", "100L", "Guat de foc..."},
|
||||||
['marathon_n']= {"Maratón", "Normal", "Maratón de 200 líneas con velocidad en aumento."},
|
['marathon_n']= {"Maratón", "Normal", "Maratón de 200 líneas con velocidad en aumento."},
|
||||||
['marathon_h']= {"Maratón", "Difícil", "Maratón de 200 líneas a velocidad máxima."},
|
['marathon_h']= {"Maratón", "Difícil", "Maratón de 200 líneas a velocidad máxima."},
|
||||||
['solo_e']= {"VS.", "Fácil", "¡Derrota a la CPU!"},
|
['solo_e']= {"VS.", "Fácil", "¡Derrota a la CPU!"},
|
||||||
@@ -645,6 +681,7 @@ return{
|
|||||||
['pc_n']= {"Desafío de PCs", "Normal", "¡Consigue los PCs que puedas en 100 líneas!"},
|
['pc_n']= {"Desafío de PCs", "Normal", "¡Consigue los PCs que puedas en 100 líneas!"},
|
||||||
['pc_h']= {"Desafío de PCs", "Difícil", "¡Consigue los PCs que puedas en 100 líneas!"},
|
['pc_h']= {"Desafío de PCs", "Difícil", "¡Consigue los PCs que puedas en 100 líneas!"},
|
||||||
['pc_l']= {"Desafío de PCs", "Lunático", "¡Consigue los PCs que puedas en 100 líneas!"},
|
['pc_l']= {"Desafío de PCs", "Lunático", "¡Consigue los PCs que puedas en 100 líneas!"},
|
||||||
|
-- ['pc_inf']= {"Inf. PC Challenge","", "Get PCs as much as you can"},
|
||||||
['tech_n']= {"Tech", "Normal", "¡Mantén el B2B!"},
|
['tech_n']= {"Tech", "Normal", "¡Mantén el B2B!"},
|
||||||
['tech_n_plus']= {"Tech", "Normal+", "¡Sólo se permiten Spins y PCs!"},
|
['tech_n_plus']= {"Tech", "Normal+", "¡Sólo se permiten Spins y PCs!"},
|
||||||
['tech_h']= {"Tech", "Difícil", "¡Mantén el B2B!"},
|
['tech_h']= {"Tech", "Difícil", "¡Mantén el B2B!"},
|
||||||
@@ -666,6 +703,7 @@ return{
|
|||||||
['infinite_dig']= {"Infinito: Queso", "", "Limpia, limpia, más limpia que tú."},
|
['infinite_dig']= {"Infinito: Queso", "", "Limpia, limpia, más limpia que tú."},
|
||||||
['sprintFix']= {"Sprint", "Sin mover a Izq./Der."},
|
['sprintFix']= {"Sprint", "Sin mover a Izq./Der."},
|
||||||
['sprintLock']= {"Sprint", "Sin rotar"},
|
['sprintLock']= {"Sprint", "Sin rotar"},
|
||||||
|
-- ['sprintSmooth']= {"Sprint", "NO FRICTION"},
|
||||||
['marathon_bfmax']= {"Maratón", "Supremo"},
|
['marathon_bfmax']= {"Maratón", "Supremo"},
|
||||||
['custom_clear']= {"Personalizado", "Normal"},
|
['custom_clear']= {"Personalizado", "Normal"},
|
||||||
['custom_puzzle']= {"Personalizado", "Puzzle"},
|
['custom_puzzle']= {"Personalizado", "Puzzle"},
|
||||||
|
|||||||
@@ -1,8 +1,6 @@
|
|||||||
return{
|
return{
|
||||||
fallback=4,
|
fallback=4,
|
||||||
back="X",
|
|
||||||
anykey="↓□↓",
|
anykey="↓□↓",
|
||||||
newVersion="&!!!???↓↓",
|
|
||||||
httpTimeout="e??????x",
|
httpTimeout="e??????x",
|
||||||
|
|
||||||
atkModeName={"?","( )","!","←→"},
|
atkModeName={"?","( )","!","←→"},
|
||||||
@@ -12,7 +10,6 @@ return{
|
|||||||
clear={"1","2","3","4","5","6"},
|
clear={"1","2","3","4","5","6"},
|
||||||
mini="v",b2b="^ ",b3b="^^ ",
|
mini="v",b2b="^ ",b3b="^^ ",
|
||||||
PC="#<>#",HPC="<>",
|
PC="#<>#",HPC="<>",
|
||||||
hold="[ ]",next="→",
|
|
||||||
replaying="[R]",
|
replaying="[R]",
|
||||||
|
|
||||||
stage="::$1::",
|
stage="::$1::",
|
||||||
@@ -47,6 +44,9 @@ return{
|
|||||||
exportSuccess="~Out~",
|
exportSuccess="~Out~",
|
||||||
importSuccess="~In~",
|
importSuccess="~In~",
|
||||||
dataCorrupted="XXXXX",
|
dataCorrupted="XXXXX",
|
||||||
|
pasteWrongPlace="_?X.",
|
||||||
|
-- noFile="File not found",
|
||||||
|
|
||||||
VKTchW="Tch↓",
|
VKTchW="Tch↓",
|
||||||
VKOrgW="Org↓",
|
VKOrgW="Org↓",
|
||||||
VKCurW="Cur↓",
|
VKCurW="Cur↓",
|
||||||
@@ -81,11 +81,11 @@ return{
|
|||||||
"#<>#/<>:",
|
"#<>#/<>:",
|
||||||
"!#!X/%:",
|
"!#!X/%:",
|
||||||
},
|
},
|
||||||
help={
|
aboutTexts={
|
||||||
"□!!~~~,□□□□X",
|
"□!!~~~,□□□□X",
|
||||||
"□!!==*/*/*/*~",
|
"□!!==*/*/*/*/*~",
|
||||||
"",
|
"",
|
||||||
"Powered by LÖVE/love2d",
|
"Powered by LÖVE",
|
||||||
"Any suggestions or bug reports are appreciated!",
|
"Any suggestions or bug reports are appreciated!",
|
||||||
"Make sure to only obtain the game from official sources;",
|
"Make sure to only obtain the game from official sources;",
|
||||||
"We can't make sure you're safe if you got it elsewhere.",
|
"We can't make sure you're safe if you got it elsewhere.",
|
||||||
@@ -101,7 +101,6 @@ return{
|
|||||||
setting="_?_",
|
setting="_?_",
|
||||||
stat="=___",
|
stat="=___",
|
||||||
music="~~~ & =><=",
|
music="~~~ & =><=",
|
||||||
about="?",
|
|
||||||
dict="z",
|
dict="z",
|
||||||
manual="???",
|
manual="???",
|
||||||
},
|
},
|
||||||
@@ -137,7 +136,6 @@ return{
|
|||||||
autoPause="A||",
|
autoPause="A||",
|
||||||
swap="=+=+=",
|
swap="=+=+=",
|
||||||
fine="12 X 21",
|
fine="12 X 21",
|
||||||
dataSaving="XX.",
|
|
||||||
simpMode=".",
|
simpMode=".",
|
||||||
},
|
},
|
||||||
setting_video={
|
setting_video={
|
||||||
@@ -161,18 +159,21 @@ return{
|
|||||||
splashFX="↑↑↑~",
|
splashFX="↑↑↑~",
|
||||||
shakeFX="~|~|~",
|
shakeFX="~|~|~",
|
||||||
atkFX="→→~",
|
atkFX="→→~",
|
||||||
frame="|=|",
|
frame="|=|%",
|
||||||
|
|
||||||
text="ABC",
|
text="ABC",
|
||||||
score="+123",
|
score="+123",
|
||||||
warn="!↑↑↑!",
|
bufferWarn="^+",
|
||||||
highCam="↑__↑",
|
showSpike="→→+",
|
||||||
nextPos="???←",
|
nextPos="???←",
|
||||||
fullscreen="|←→|",
|
highCam="↑__↑",
|
||||||
power="+.",
|
warn="!↑↑↑!",
|
||||||
|
|
||||||
clickFX="_.~",
|
clickFX="_.~",
|
||||||
bg="__?__",
|
power="+.",
|
||||||
clean="[]→→O",
|
clean="[]→→O",
|
||||||
|
fullscreen="|←→|",
|
||||||
|
bg="__?__",
|
||||||
},
|
},
|
||||||
setting_sound={
|
setting_sound={
|
||||||
title="(~~)",
|
title="(~~)",
|
||||||
@@ -180,11 +181,11 @@ return{
|
|||||||
game="←Game",
|
game="←Game",
|
||||||
graphic="Video→",
|
graphic="Video→",
|
||||||
|
|
||||||
|
bgm="#~#",
|
||||||
sfx="#!#",
|
sfx="#!#",
|
||||||
|
stereo="←~→",
|
||||||
spawn="#[]#",
|
spawn="#[]#",
|
||||||
warn="!↑↑↑!",
|
warn="!↑↑↑!",
|
||||||
bgm="#~#",
|
|
||||||
stereo="←~→",
|
|
||||||
vib="=~=",
|
vib="=~=",
|
||||||
voc="~~~",
|
voc="~~~",
|
||||||
},
|
},
|
||||||
@@ -230,8 +231,12 @@ return{
|
|||||||
setting_touch={
|
setting_touch={
|
||||||
default="$0",
|
default="$0",
|
||||||
snap="_ _",
|
snap="_ _",
|
||||||
option="_?",
|
save1=">1",
|
||||||
|
load1="1>",
|
||||||
|
save2=">2",
|
||||||
|
load2="2>",
|
||||||
size="←→",
|
size="←→",
|
||||||
|
shape="@?",
|
||||||
},
|
},
|
||||||
setting_touchSwitch={
|
setting_touchSwitch={
|
||||||
b1="←:", b2="→:", b3="R→:", b4="←R:",
|
b1="←:", b2="→:", b3="R→:", b4="←R:",
|
||||||
@@ -239,18 +244,17 @@ return{
|
|||||||
b9="F1:", b10="F2:", b11="←←:", b12="→→:",
|
b9="F1:", b10="F2:", b11="←←:", b12="→→:",
|
||||||
b13="↓_:", b14="↓1:", b15="↓4:", b16="↓10:",
|
b13="↓_:", b14="↓1:", b15="↓4:", b16="↓10:",
|
||||||
b17="←↓→↓:", b18="→↓↓:", b19="←↓→↓:",b20="→↓←↓:",
|
b17="←↓→↓:", b18="→↓↓:", b19="←↓→↓:",b20="→↓←↓:",
|
||||||
|
|
||||||
norm="-",
|
norm="-",
|
||||||
pro="+",
|
pro="+",
|
||||||
hide="--?",
|
hide="--?",
|
||||||
track="~=?",
|
icon="@?",
|
||||||
sfx="#!#",
|
sfx="#!#",
|
||||||
vib="=~=",
|
vib="=~=",
|
||||||
icon="@?",
|
|
||||||
tkset="_~=_",
|
|
||||||
alpha="+?",
|
alpha="+?",
|
||||||
},
|
|
||||||
setting_trackSetting={
|
track="~=?",
|
||||||
VKDodge="←_→",
|
dodge="←_→",
|
||||||
},
|
},
|
||||||
customGame={
|
customGame={
|
||||||
title="!@#$%^&*",
|
title="!@#$%^&*",
|
||||||
@@ -277,28 +281,28 @@ return{
|
|||||||
field="Edit Field (F)",
|
field="Edit Field (F)",
|
||||||
sequence="Edit Sequence (S)",
|
sequence="Edit Sequence (S)",
|
||||||
mission="Edit Mission (M)",
|
mission="Edit Mission (M)",
|
||||||
},
|
|
||||||
custom_advance={
|
|
||||||
title="!@#$%^&*",
|
|
||||||
subTitle="##",
|
|
||||||
|
|
||||||
nextCount="→",
|
nextCount="→",
|
||||||
holdCount="[ ]",
|
holdCount="[ ]",
|
||||||
infHold="∞*[ ]",
|
infHold="∞*[ ]",
|
||||||
phyHold="P-[ ]",
|
phyHold="P-[ ]",
|
||||||
bone="[]",
|
|
||||||
|
|
||||||
fieldH="↑[]↓",
|
fieldH="↑[]↓",
|
||||||
ospin="O→Any",
|
|
||||||
deepDrop="\\↓↓/",
|
|
||||||
visible="?=",
|
visible="?=",
|
||||||
freshLimit="@",
|
freshLimit="@",
|
||||||
easyFresh="↓_↓_↓_",
|
|
||||||
fineKill="12 XX 21",
|
|
||||||
b2bKill="_1 XX",
|
|
||||||
opponent="^_^",
|
opponent="^_^",
|
||||||
life="<R>",
|
life="<R>",
|
||||||
pushSpeed="_↑_↑_",
|
pushSpeed="_↑__",
|
||||||
|
garbageSpeed="#↑↑",
|
||||||
|
|
||||||
|
bufferLimit="^↑",
|
||||||
|
heightLimit="#↑",
|
||||||
|
ospin="O→Any",
|
||||||
|
fineKill="12 XX 21",
|
||||||
|
b2bKill="_1 XX",
|
||||||
|
easyFresh="↓_↓_↓_",
|
||||||
|
deepDrop="\\↓↓/",
|
||||||
|
bone="[]",
|
||||||
},
|
},
|
||||||
custom_field={
|
custom_field={
|
||||||
title="!@#$%^&*",
|
title="!@#$%^&*",
|
||||||
@@ -435,6 +439,7 @@ return{
|
|||||||
register="Sign up",
|
register="Sign up",
|
||||||
email="@",
|
email="@",
|
||||||
password="*",
|
password="*",
|
||||||
|
-- keepPW="I",
|
||||||
login="Log in",
|
login="Log in",
|
||||||
},
|
},
|
||||||
register={
|
register={
|
||||||
|
|||||||
@@ -1,6 +1,5 @@
|
|||||||
return{
|
return{
|
||||||
anykey="您开始了",
|
anykey="您开始了",
|
||||||
newVersion="感谢更新,去看看更新了些啥,别老跑群里问",
|
|
||||||
httpTimeout="没网或者网不好?",
|
httpTimeout="没网或者网不好?",
|
||||||
playedLong="今天玩很久了,给我注意点",
|
playedLong="今天玩很久了,给我注意点",
|
||||||
playedTooMuch="特么再玩小心眼睛瞎掉,爬",
|
playedTooMuch="特么再玩小心眼睛瞎掉,爬",
|
||||||
@@ -43,10 +42,9 @@ return{
|
|||||||
|
|
||||||
ranks={"菜","可","好","强","您"},
|
ranks={"菜","可","好","强","您"},
|
||||||
|
|
||||||
createRoomTooFast="手痒要开这么多房间?",
|
|
||||||
createRoomSuccessed="创好了",
|
createRoomSuccessed="创好了",
|
||||||
started="开了",
|
started="开了",
|
||||||
champion="神仙是 $1",
|
spectating="看戏中",
|
||||||
|
|
||||||
stat={
|
stat={
|
||||||
"开了几次:",
|
"开了几次:",
|
||||||
@@ -83,6 +81,7 @@ return{
|
|||||||
|
|
||||||
text="招式名",
|
text="招式名",
|
||||||
score="跳分",
|
score="跳分",
|
||||||
|
warn="要死",
|
||||||
highCam="拉镜",
|
highCam="拉镜",
|
||||||
},
|
},
|
||||||
setting_sound={
|
setting_sound={
|
||||||
@@ -91,9 +90,9 @@ return{
|
|||||||
game="←游戏设置",
|
game="←游戏设置",
|
||||||
graphic="改画面→",
|
graphic="改画面→",
|
||||||
|
|
||||||
|
bgm="曲",
|
||||||
spawn="出块",
|
spawn="出块",
|
||||||
warn="警告",
|
warn="警告",
|
||||||
bgm="曲",
|
|
||||||
vib="嗡嗡",
|
vib="嗡嗡",
|
||||||
cv="谁",
|
cv="谁",
|
||||||
},
|
},
|
||||||
@@ -109,12 +108,12 @@ return{
|
|||||||
pro="阴间",
|
pro="阴间",
|
||||||
},
|
},
|
||||||
about={
|
about={
|
||||||
staff="游戏谁做的",
|
staff="游戏谁写的",
|
||||||
his="黑历史",
|
his="黑历史",
|
||||||
qq="QQ对线",
|
qq="QQ对线",
|
||||||
},
|
},
|
||||||
register={
|
register={
|
||||||
password2="你猜该填啥",
|
password2="你懂的",
|
||||||
},
|
},
|
||||||
sound={
|
sound={
|
||||||
title="音效室",
|
title="音效室",
|
||||||
@@ -182,9 +181,18 @@ return{
|
|||||||
disappear="消失",
|
disappear="消失",
|
||||||
tapFX="动画",
|
tapFX="动画",
|
||||||
},
|
},
|
||||||
error={
|
savedata={
|
||||||
console="Console",
|
export="复制走",
|
||||||
quit="Quit",
|
import="粘贴到",
|
||||||
|
unlock="地图",
|
||||||
|
data="统计",
|
||||||
|
setting="设置",
|
||||||
|
vk="虚拟按键",
|
||||||
|
|
||||||
|
couldSave="云存档(测试,炸了别怪我)",
|
||||||
|
notLogin="[不登录存个锤子]",
|
||||||
|
upload="上传",
|
||||||
|
download="下载",
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
modes={
|
modes={
|
||||||
@@ -202,7 +210,7 @@ return{
|
|||||||
['dig_400l']= {"挖掘", "400L", "挖400行"},
|
['dig_400l']= {"挖掘", "400L", "挖400行"},
|
||||||
['dig_1000l']= {"挖掘", "1000L", "挖1000行"},
|
['dig_1000l']= {"挖掘", "1000L", "挖1000行"},
|
||||||
['drought_n']= {"干旱", "100L", "放轻松,简单得很"},
|
['drought_n']= {"干旱", "100L", "放轻松,简单得很"},
|
||||||
['drought_l']= {"干旱", "100L", "有趣的要来了"},
|
['drought_l']= {"干旱+", "100L", "有趣的要来了"},
|
||||||
['marathon_n']= {"马拉松", "普通", "休闲模式"},
|
['marathon_n']= {"马拉松", "普通", "休闲模式"},
|
||||||
['marathon_h']= {"马拉松", "困难", "休闲模式"},
|
['marathon_h']= {"马拉松", "困难", "休闲模式"},
|
||||||
['solo_e']= {"单挑", "简单", "鲨AI"},
|
['solo_e']= {"单挑", "简单", "鲨AI"},
|
||||||
@@ -255,6 +263,7 @@ return{
|
|||||||
['pc_n']= {"全清挑战", "普通", "100行内刷PC"},
|
['pc_n']= {"全清挑战", "普通", "100行内刷PC"},
|
||||||
['pc_h']= {"全清挑战", "困难", "100行内刷PC"},
|
['pc_h']= {"全清挑战", "困难", "100行内刷PC"},
|
||||||
['pc_l']= {"全清挑战", "疯狂", "100行内刷PC"},
|
['pc_l']= {"全清挑战", "疯狂", "100行内刷PC"},
|
||||||
|
['pc_inf']= {"无尽全清挑战", "", "你这水平还是先别玩了"},
|
||||||
['tech_n']= {"科研", "普通", "禁止断B2B"},
|
['tech_n']= {"科研", "普通", "禁止断B2B"},
|
||||||
['tech_n_plus']= {"科研", "普通+", "仅允许spin与PC"},
|
['tech_n_plus']= {"科研", "普通+", "仅允许spin与PC"},
|
||||||
['tech_h']= {"科研", "困难", "禁止断B2B"},
|
['tech_h']= {"科研", "困难", "禁止断B2B"},
|
||||||
@@ -273,44 +282,12 @@ return{
|
|||||||
['zen']= {"禅", "200", "不限时200行"},
|
['zen']= {"禅", "200", "不限时200行"},
|
||||||
['ultra']= {"限时打分", "挑战", "2分钟刷分"},
|
['ultra']= {"限时打分", "挑战", "2分钟刷分"},
|
||||||
['infinite']= {"无尽", "", "真的有人会玩这个?"},
|
['infinite']= {"无尽", "", "真的有人会玩这个?"},
|
||||||
['infinite_dig']= {"无尽:挖掘", "", "闲得慌的话来挖"},
|
['infinite_dig']= {"无尽:挖掘", "", "闲得慌就来挖"},
|
||||||
['sprintFix']= {"竞速", "无移动"},
|
['sprintFix']= {"竞速", "无移动"},
|
||||||
['sprintLock']= {"竞速", "无旋转"},
|
['sprintLock']= {"竞速", "无旋转"},
|
||||||
|
['sprintSmooth']= {"竞速", "无摩擦"},
|
||||||
['marathon_bfmax']= {"马拉松", "极限"},
|
['marathon_bfmax']= {"马拉松", "极限"},
|
||||||
['custom_clear']= {"自定义", "普通"},
|
['custom_clear']= {"自定义", "普通"},
|
||||||
['custom_puzzle']= {"自定义", "拼图"},
|
['custom_puzzle']= {"自定义", "拼图"},
|
||||||
},
|
},
|
||||||
getTip={refuseCopy=true,
|
|
||||||
"100apm?你倒是不用开局定式连续打几把",
|
|
||||||
"10连pc不是随手?",
|
|
||||||
"20G很难?是个人都能玩吧。",
|
|
||||||
"20TSD不难吧。",
|
|
||||||
"3pps不是人均水平?",
|
|
||||||
"40行还要40多秒,就这?",
|
|
||||||
"别会个c4w就以为自己多强,这是基本功罢了。",
|
|
||||||
"别人只用一只手都能玩,你呢?",
|
|
||||||
"不会吧不会吧,真的还有人不能随手Tspin?",
|
|
||||||
"除了雨宫太阳你还认识谁?Jonas知道吗?Ajanba听过吗?",
|
|
||||||
"还搁这玩手机呢,作业做完了?",
|
|
||||||
"极限20G不是随手通?",
|
|
||||||
"叫你多练就多练,想着几天变神仙,当自己是谁?",
|
|
||||||
"先练基础不听,现在速度没有,Tspin完地形一塌糊涂,开心吗?",
|
|
||||||
"经典块跟现代块是两个游戏,别拿多少年前水平秀优越,请从头练起。",
|
|
||||||
"卖弱不是谦虚,请看场合。",
|
|
||||||
"卖弱是要遭报应的",
|
|
||||||
"满口PCDT信天翁,还会点别的么?",
|
|
||||||
"没那水平别天天整什么花里胡哨的,人玩几年你想几天赶上?",
|
|
||||||
"全隐40行全消四很难吗??",
|
|
||||||
"少玩点,多眨眨眼,不听瞎了别怪我没提醒你",
|
|
||||||
"设置都看过一遍了吗?明明都有还嫌功能少,谁的问题?",
|
|
||||||
"谁说一定要强的人才叫卖弱?不是最菜就一定在有人眼中是卖弱",
|
|
||||||
"双旋和极简尽早学起来…懒得学以后亏的是自己",
|
|
||||||
"天天催更催更,你咋不来帮忙开发啊,真以为作者很强催催啥都有?",
|
|
||||||
"天天卖弱,你一定把把150apm吧?",
|
|
||||||
"问怎么练就好好问,别就一句话怎么变强,鬼知道你现在什么水平",
|
|
||||||
"一口一个wtcl还不赶紧去练,你是不思进取还是不想好好说话?",
|
|
||||||
"隐形很难?上电视那个水平一般都打成那样,属实自己不行看不起别人",
|
|
||||||
"隐形哪难了,你练了吗?没练几个小时在这里说难是嫌葡萄酸?",
|
|
||||||
"这不是休闲游戏…别怪关卡要求太高,就是你菜,请多练。",
|
|
||||||
},
|
|
||||||
}
|
}
|
||||||
@@ -1,9 +1,7 @@
|
|||||||
local C=COLOR
|
local C=COLOR
|
||||||
return{
|
return{
|
||||||
back="返回",
|
|
||||||
anykey="按任意键继续",
|
anykey="按任意键继续",
|
||||||
sureQuit="再按一次退出",
|
sureQuit="再按一次退出",
|
||||||
newVersion="感谢更新!更新内容如下",
|
|
||||||
httpTimeout="网络连接超时!",
|
httpTimeout="网络连接超时!",
|
||||||
newDay="新的一天,新的开始~",
|
newDay="新的一天,新的开始~",
|
||||||
playedLong="已经玩很久了!注意休息!",
|
playedLong="已经玩很久了!注意休息!",
|
||||||
@@ -11,12 +9,12 @@ return{
|
|||||||
|
|
||||||
atkModeName={"随机","徽章","击杀","反击"},
|
atkModeName={"随机","徽章","击杀","反击"},
|
||||||
royale_remain="剩余 $1 名玩家",
|
royale_remain="剩余 $1 名玩家",
|
||||||
|
powerUp={[0]="000%UP","025%UP","050%UP","075%UP","100%UP"},
|
||||||
cmb={nil,"1 Combo","2 Combo","3 Combo","4 Combo","5 Combo","6 Combo","7 Combo","8 Combo","9 Combo","10 Combo!","11 Combo!","12 Combo!","13 Combo!","14 Combo!","15 Combo!","16 Combo!","17 Combo!","18 Combo!","19 Combo!","MEGACMB"},
|
cmb={nil,"1 Combo","2 Combo","3 Combo","4 Combo","5 Combo","6 Combo","7 Combo","8 Combo","9 Combo","10 Combo!","11 Combo!","12 Combo!","13 Combo!","14 Combo!","15 Combo!","16 Combo!","17 Combo!","18 Combo!","19 Combo!","MEGACMB"},
|
||||||
spin="-spin ",
|
spin="-spin ",
|
||||||
clear={"single","double","triple","Techrash","Pentcrash","Hexcrash"},
|
clear={"single","double","triple","Techrash","Pentcrash","Hexcrash"},
|
||||||
mini="Mini",b2b="B2B ",b3b="B2B2B ",
|
mini="Mini",b2b="B2B ",b3b="B2B2B ",
|
||||||
PC="Perfect Clear",HPC="Half Clear",
|
PC="Perfect Clear",HPC="Half Clear",
|
||||||
hold="暂存",next="下一个",
|
|
||||||
replaying="[回放]",
|
replaying="[回放]",
|
||||||
|
|
||||||
stage="关卡 $1",
|
stage="关卡 $1",
|
||||||
@@ -62,6 +60,8 @@ return{
|
|||||||
exportSuccess="导出成功",
|
exportSuccess="导出成功",
|
||||||
importSuccess="导入成功",
|
importSuccess="导入成功",
|
||||||
dataCorrupted="数据损坏",
|
dataCorrupted="数据损坏",
|
||||||
|
pasteWrongPlace="提醒:可能粘贴错地方了",
|
||||||
|
noFile="找不到文件",
|
||||||
|
|
||||||
VKTchW="触摸点权重",
|
VKTchW="触摸点权重",
|
||||||
VKOrgW="原始点权重",
|
VKOrgW="原始点权重",
|
||||||
@@ -72,10 +72,9 @@ return{
|
|||||||
newRecord="打破纪录",
|
newRecord="打破纪录",
|
||||||
|
|
||||||
getNoticeFail="拉取公告失败",
|
getNoticeFail="拉取公告失败",
|
||||||
getVersionFail="检测新版本失败",
|
|
||||||
oldVersion="最新版本$1可以下载了!",
|
oldVersion="最新版本$1可以下载了!",
|
||||||
needUpdate="请更新游戏!",
|
needUpdate="请更新游戏!",
|
||||||
noInternet="还未连接到网络",
|
versionNotMatch="版本不一致!",
|
||||||
notFinished="暂未完成,敬请期待!",
|
notFinished="暂未完成,敬请期待!",
|
||||||
|
|
||||||
jsonError="json错误",
|
jsonError="json错误",
|
||||||
@@ -90,19 +89,22 @@ return{
|
|||||||
loginFailed="登录失败",
|
loginFailed="登录失败",
|
||||||
accessSuccessed="身份验证成功",
|
accessSuccessed="身份验证成功",
|
||||||
accessFailed="身份验证失败",
|
accessFailed="身份验证失败",
|
||||||
wsSuccessed="WS连接成功",
|
|
||||||
wsFailed="WS连接失败",
|
|
||||||
wsClose="WS被断开: ",
|
|
||||||
netTimeout="网络连接超时",
|
|
||||||
|
|
||||||
createRoomTooFast="创建房间太快啦,等等吧",
|
wsConnecting="正在连接",
|
||||||
|
wsFailed="连接失败",
|
||||||
|
wsClose="连接被断开: ",
|
||||||
|
netTimeout="连接超时",
|
||||||
|
|
||||||
|
onlinePlayerCount="在线人数",
|
||||||
|
|
||||||
createRoomSuccessed="创建房间成功!",
|
createRoomSuccessed="创建房间成功!",
|
||||||
started="游戏中",
|
started="游戏中",
|
||||||
joinRoom="进入房间",
|
joinRoom="进入房间",
|
||||||
leaveRoom="离开房间",
|
leaveRoom="离开房间",
|
||||||
ready="各就各位!",
|
ready="各就各位!",
|
||||||
set="预备!",
|
connStream="正在连接",
|
||||||
champion="$1 获胜",
|
waitStream="等待其他人连接",
|
||||||
|
spectating="观战中",
|
||||||
chatRemain="人数:",
|
chatRemain="人数:",
|
||||||
chatStart="------消息的开头------",
|
chatStart="------消息的开头------",
|
||||||
chatHistory="------以上是历史消息------",
|
chatHistory="------以上是历史消息------",
|
||||||
@@ -150,14 +152,7 @@ return{
|
|||||||
"Finesse:",
|
"Finesse:",
|
||||||
},
|
},
|
||||||
radar={"DEF","OFF","ATK","SEND","SPD","DIG"},
|
radar={"DEF","OFF","ATK","SEND","SPD","DIG"},
|
||||||
radarData={
|
radarData={"D'PM","ADPM","APM","SPM","L'PM","DPM"},
|
||||||
"D'PM",
|
|
||||||
"ADPM",
|
|
||||||
"APM",
|
|
||||||
"SPM",
|
|
||||||
"L'PM",
|
|
||||||
"DPM",
|
|
||||||
},
|
|
||||||
stat={
|
stat={
|
||||||
"游戏运行次数:",
|
"游戏运行次数:",
|
||||||
"游戏局数:",
|
"游戏局数:",
|
||||||
@@ -171,9 +166,9 @@ return{
|
|||||||
"全/半清:",
|
"全/半清:",
|
||||||
"多余操作/极简率:",
|
"多余操作/极简率:",
|
||||||
},
|
},
|
||||||
help={
|
aboutTexts={
|
||||||
"这只是一个普通的方块游戏,请勿称此游戏为某某某方块",
|
"这只是一个普通的方块游戏,请勿将此与某带国家名的事物强行联系",
|
||||||
"从TO/C2/KOS/TGM3/JS等方块获得过灵感",
|
"从C2/IO/JS/WWC/KOS等方块获得过灵感",
|
||||||
"",
|
"",
|
||||||
"使用LOVE2D引擎",
|
"使用LOVE2D引擎",
|
||||||
"错误或者建议请附带截图发送到内测群或者作者邮箱~",
|
"错误或者建议请附带截图发送到内测群或者作者邮箱~",
|
||||||
@@ -188,20 +183,20 @@ return{
|
|||||||
"",
|
"",
|
||||||
"程序: MrZ, Particle_G, [FinnTenzor]",
|
"程序: MrZ, Particle_G, [FinnTenzor]",
|
||||||
"美术: MrZ, ScF, [Gnyar, 旋律星萤, T0722]",
|
"美术: MrZ, ScF, [Gnyar, 旋律星萤, T0722]",
|
||||||
"音乐: MrZ, ERM, [T0722]",
|
"音乐: MrZ, ERM, [T0722, Aether]",
|
||||||
"音效/语音: Miya, Naki, MrZ",
|
"音效/语音: Miya, Naki, MrZ",
|
||||||
"演出: 模电, HBM",
|
"演出: 模电, HBM",
|
||||||
"翻译: User670, MattMayuga, Mizu, Mr.Faq, ScF",
|
"翻译: User670, MattMayuga, Mizu, Mr.Faq, ScF",
|
||||||
"",
|
"",
|
||||||
"特别感谢:",
|
"特别感谢:",
|
||||||
"User670, Big_True, Flyz, Farter, 思竣",
|
"User670, Big_True, Flyz, Farter, 思竣",
|
||||||
"T9972, 蕴空之灵, Teatube, [所有内测人员]",
|
"T9972, Teatube, 蕴空之灵, [所有内测人员]",
|
||||||
},
|
},
|
||||||
used=[[
|
used=[[
|
||||||
使用工具:
|
使用工具:
|
||||||
Beepbox
|
Beepbox
|
||||||
GFIE
|
|
||||||
Goldwave
|
Goldwave
|
||||||
|
GFIE
|
||||||
FL Mobile
|
FL Mobile
|
||||||
使用库:
|
使用库:
|
||||||
Cold_Clear [MinusKelvin]
|
Cold_Clear [MinusKelvin]
|
||||||
@@ -220,7 +215,6 @@ return{
|
|||||||
setting="设置",
|
setting="设置",
|
||||||
stat="统计信息",
|
stat="统计信息",
|
||||||
music="音乐&音效",
|
music="音乐&音效",
|
||||||
about="关于",
|
|
||||||
dict="小Z词典",
|
dict="小Z词典",
|
||||||
manual="说明书",
|
manual="说明书",
|
||||||
},
|
},
|
||||||
@@ -246,26 +240,64 @@ return{
|
|||||||
quit="退出(Q)",
|
quit="退出(Q)",
|
||||||
},
|
},
|
||||||
net_menu={
|
net_menu={
|
||||||
|
league="Tech League",
|
||||||
ffa="FFA",
|
ffa="FFA",
|
||||||
rooms="房间列表",
|
rooms="房间列表",
|
||||||
chat="聊天室",
|
|
||||||
logout="退出登录",
|
logout="退出登录",
|
||||||
},
|
},
|
||||||
|
net_league={
|
||||||
|
match="匹配对手",
|
||||||
|
},
|
||||||
net_rooms={
|
net_rooms={
|
||||||
refreshing="刷新房间列表中",
|
refreshing="刷新房间列表中",
|
||||||
noRoom="一个房间都没有哎...",
|
noRoom="一个房间都没有哎...",
|
||||||
refresh="刷新",
|
refresh="刷新",
|
||||||
new="创建房间(2)",
|
new="创建房间",
|
||||||
new2="创建房间(5)",
|
|
||||||
join="加入",
|
join="加入",
|
||||||
},
|
},
|
||||||
|
net_newRoom={
|
||||||
|
title="自定义房间参数",
|
||||||
|
roomName="房间名(留空默认 用户名's room)",
|
||||||
|
roomDescription="房间描述",
|
||||||
|
|
||||||
|
life="命数",
|
||||||
|
pushSpeed="上涨速度",
|
||||||
|
garbageSpeed="垃圾行速度",
|
||||||
|
visible="能见度",
|
||||||
|
freshLimit="锁延刷新限制",
|
||||||
|
|
||||||
|
fieldH="场地高度",
|
||||||
|
bufferLimit="缓冲上限",
|
||||||
|
heightLimit="高度上限",
|
||||||
|
|
||||||
|
drop="下落延迟",
|
||||||
|
lock="锁定延迟",
|
||||||
|
wait="出块等待",
|
||||||
|
fall="消行延迟",
|
||||||
|
|
||||||
|
capacity="房间容量",
|
||||||
|
create="创建房间",
|
||||||
|
|
||||||
|
ospin="O-spin",
|
||||||
|
fineKill="强制极简",
|
||||||
|
b2bKill="强制B2B",
|
||||||
|
easyFresh="普通刷新锁延",
|
||||||
|
deepDrop="深降",
|
||||||
|
bone="骨块",
|
||||||
|
|
||||||
|
nextCount="Next",
|
||||||
|
holdCount="Hold",
|
||||||
|
infHold="无限Hold",
|
||||||
|
phyHold="物理Hold",
|
||||||
|
|
||||||
|
bg="背景",
|
||||||
|
bgm="音乐",
|
||||||
|
},
|
||||||
net_game={
|
net_game={
|
||||||
ready="准备",
|
ready="准备",
|
||||||
|
spectate="观战",
|
||||||
cancel="取消",
|
cancel="取消",
|
||||||
},
|
},
|
||||||
net_chat={
|
|
||||||
send="发送",
|
|
||||||
},
|
|
||||||
setting_game={
|
setting_game={
|
||||||
title="游戏设置",
|
title="游戏设置",
|
||||||
graphic="←画面设置",
|
graphic="←画面设置",
|
||||||
@@ -280,7 +312,6 @@ return{
|
|||||||
autoPause="失去焦点自动暂停",
|
autoPause="失去焦点自动暂停",
|
||||||
swap="组合键切换攻击模式",
|
swap="组合键切换攻击模式",
|
||||||
fine="极简操作提示音",
|
fine="极简操作提示音",
|
||||||
dataSaving="省流模式",
|
|
||||||
simpMode="简洁模式",
|
simpMode="简洁模式",
|
||||||
},
|
},
|
||||||
setting_video={
|
setting_video={
|
||||||
@@ -294,7 +325,7 @@ return{
|
|||||||
bagLine="包分界线",
|
bagLine="包分界线",
|
||||||
|
|
||||||
ghost="阴影不透明度",
|
ghost="阴影不透明度",
|
||||||
grid="网格",
|
grid="网格不透明度",
|
||||||
center="旋转中心不透明度",
|
center="旋转中心不透明度",
|
||||||
|
|
||||||
lockFX="锁定特效",
|
lockFX="锁定特效",
|
||||||
@@ -304,29 +335,32 @@ return{
|
|||||||
splashFX="溅射特效",
|
splashFX="溅射特效",
|
||||||
shakeFX="晃动特效",
|
shakeFX="晃动特效",
|
||||||
atkFX="攻击特效",
|
atkFX="攻击特效",
|
||||||
frame="绘制帧率",
|
frame="绘制帧率(%)",
|
||||||
|
|
||||||
text="消行文本",
|
text="消行文本",
|
||||||
score="分数动画",
|
score="分数动画",
|
||||||
warn="死亡预警",
|
bufferWarn="缓冲预警",
|
||||||
highCam="超屏视野",
|
showSpike="爆发累计",
|
||||||
nextPos="生成预览",
|
nextPos="生成预览",
|
||||||
fullscreen="全屏",
|
highCam="超屏视野",
|
||||||
power="电量显示",
|
warn="死亡预警",
|
||||||
|
|
||||||
clickFX="点按特效",
|
clickFX="点按特效",
|
||||||
bg="背景",
|
power="电量显示",
|
||||||
clean="绘制优化",
|
clean="绘制优化",
|
||||||
|
fullscreen="全屏",
|
||||||
|
bg="背景",
|
||||||
},
|
},
|
||||||
setting_sound={
|
setting_sound={
|
||||||
title="声音设置",
|
title="声音设置",
|
||||||
game="←游戏设置",
|
game="←游戏设置",
|
||||||
graphic="画面设置→",
|
graphic="画面设置→",
|
||||||
|
|
||||||
|
bgm="音乐",
|
||||||
sfx="音效",
|
sfx="音效",
|
||||||
|
stereo="立体声",
|
||||||
spawn="方块生成",
|
spawn="方块生成",
|
||||||
warn="危险警告",
|
warn="危险警告",
|
||||||
bgm="音乐",
|
|
||||||
stereo="立体声",
|
|
||||||
vib="振动",
|
vib="振动",
|
||||||
voc="语音",
|
voc="语音",
|
||||||
cv="语音包",
|
cv="语音包",
|
||||||
@@ -375,8 +409,12 @@ return{
|
|||||||
setting_touch={
|
setting_touch={
|
||||||
default="默认组合",
|
default="默认组合",
|
||||||
snap="吸附",
|
snap="吸附",
|
||||||
option="选项",
|
save1="保存1",
|
||||||
|
load1="读取1",
|
||||||
|
save2="保存2",
|
||||||
|
load2="读取2",
|
||||||
size="大小",
|
size="大小",
|
||||||
|
shape="形状",
|
||||||
},
|
},
|
||||||
setting_touchSwitch={
|
setting_touchSwitch={
|
||||||
b1= "左移:", b2="右移:", b3="顺时针旋转:", b4="逆时针旋转:",
|
b1= "左移:", b2="右移:", b3="顺时针旋转:", b4="逆时针旋转:",
|
||||||
@@ -384,18 +422,17 @@ return{
|
|||||||
b9= "功能键1:", b10="功能键2:",b11="左瞬移:", b12="右瞬移:",
|
b9= "功能键1:", b10="功能键2:",b11="左瞬移:", b12="右瞬移:",
|
||||||
b13="软降到底:",b14="软降一格:",b15="软降四格:", b16="软降十格:",
|
b13="软降到底:",b14="软降一格:",b15="软降四格:", b16="软降十格:",
|
||||||
b17="落在最左:",b18="落在最右:",b19="列在最左:", b20="列在最右:",
|
b17="落在最左:",b18="落在最右:",b19="列在最左:", b20="列在最右:",
|
||||||
|
|
||||||
norm="标准",
|
norm="标准",
|
||||||
pro="专业",
|
pro="专业",
|
||||||
hide="显示虚拟按键",
|
hide="显示虚拟按键",
|
||||||
track="按键自动跟踪",
|
icon="图标",
|
||||||
sfx="按键音效",
|
sfx="按键音效",
|
||||||
vib="按键振动",
|
vib="按键振动",
|
||||||
icon="图标",
|
|
||||||
tkset="跟踪设置",
|
|
||||||
alpha="不透明度",
|
alpha="不透明度",
|
||||||
},
|
|
||||||
setting_trackSetting={
|
track="按键自动跟踪",
|
||||||
VKDodge="自动避让",
|
dodge="自动避让",
|
||||||
},
|
},
|
||||||
customGame={
|
customGame={
|
||||||
title="自定义游戏",
|
title="自定义游戏",
|
||||||
@@ -422,28 +459,28 @@ return{
|
|||||||
field="场地编辑(F)",
|
field="场地编辑(F)",
|
||||||
sequence="序列编辑(S)",
|
sequence="序列编辑(S)",
|
||||||
mission="任务编辑(M)",
|
mission="任务编辑(M)",
|
||||||
},
|
|
||||||
custom_advance={
|
|
||||||
title="自定义游戏",
|
|
||||||
subTitle="高级",
|
|
||||||
|
|
||||||
nextCount="Next",
|
nextCount="Next",
|
||||||
holdCount="Hold",
|
holdCount="Hold",
|
||||||
infHold="无限Hold",
|
infHold="无限Hold",
|
||||||
phyHold="物理Hold",
|
phyHold="物理Hold",
|
||||||
bone="骨块",
|
|
||||||
|
|
||||||
fieldH="场地高度",
|
fieldH="场地高度",
|
||||||
ospin="O-spin",
|
|
||||||
deepDrop="深降",
|
|
||||||
visible="能见度",
|
visible="能见度",
|
||||||
freshLimit="锁延刷新限制",
|
freshLimit="锁延刷新限制",
|
||||||
easyFresh="普通刷新锁延",
|
|
||||||
fineKill="强制极简",
|
|
||||||
b2bKill="强制B2B",
|
|
||||||
opponent="对手",
|
opponent="对手",
|
||||||
life="命数",
|
life="命数",
|
||||||
pushSpeed="上涨速度",
|
pushSpeed="上涨速度",
|
||||||
|
garbageSpeed="垃圾行速度",
|
||||||
|
|
||||||
|
bufferLimit="缓冲上限",
|
||||||
|
heightLimit="高度上限",
|
||||||
|
ospin="O-spin",
|
||||||
|
fineKill="强制极简",
|
||||||
|
b2bKill="强制B2B",
|
||||||
|
easyFresh="普通刷新锁延",
|
||||||
|
deepDrop="深降",
|
||||||
|
bone="骨块",
|
||||||
},
|
},
|
||||||
custom_field={
|
custom_field={
|
||||||
title="自定义游戏",
|
title="自定义游戏",
|
||||||
@@ -594,6 +631,7 @@ return{
|
|||||||
register="注册",
|
register="注册",
|
||||||
email="邮箱",
|
email="邮箱",
|
||||||
password="密码",
|
password="密码",
|
||||||
|
keepPW="保存密码",
|
||||||
login="登录",
|
login="登录",
|
||||||
},
|
},
|
||||||
register={
|
register={
|
||||||
@@ -653,15 +691,17 @@ return{
|
|||||||
mode="模式",
|
mode="模式",
|
||||||
},
|
},
|
||||||
savedata={
|
savedata={
|
||||||
exportUnlock="导出地图进度",
|
export="导出到剪切板",
|
||||||
exportData="导出统计数据",
|
import="从剪切板导入",
|
||||||
exportSetting="导出设置",
|
unlock="地图进度",
|
||||||
exportVK="导出虚拟按键布局",
|
data="统计数据",
|
||||||
|
setting="设置",
|
||||||
|
vk="虚拟按键布局",
|
||||||
|
|
||||||
importUnlock="导入地图进度",
|
couldSave="云存档(测试功能,谨慎使用)",
|
||||||
importData="导入统计数据",
|
notLogin="[登录以使用云存档]",
|
||||||
importSetting="导入设置",
|
upload="上传到云端",
|
||||||
importVK="导入虚拟按键布局",
|
download="从云端下载",
|
||||||
},
|
},
|
||||||
error={
|
error={
|
||||||
console="控制台",
|
console="控制台",
|
||||||
@@ -683,7 +723,7 @@ return{
|
|||||||
['dig_400l']= {"挖掘", "400L", "挖掘400行"},
|
['dig_400l']= {"挖掘", "400L", "挖掘400行"},
|
||||||
['dig_1000l']= {"挖掘", "1000L", "挖掘1000行"},
|
['dig_1000l']= {"挖掘", "1000L", "挖掘1000行"},
|
||||||
['drought_n']= {"干旱", "100L", "你I没了"},
|
['drought_n']= {"干旱", "100L", "你I没了"},
|
||||||
['drought_l']= {"干旱", "100L", "后 妈 发 牌"},
|
['drought_l']= {"干旱+", "100L", "后 妈 发 牌"},
|
||||||
['marathon_n']= {"马拉松", "普通", "200行加速马拉松"},
|
['marathon_n']= {"马拉松", "普通", "200行加速马拉松"},
|
||||||
['marathon_h']= {"马拉松", "困难", "200行高速马拉松"},
|
['marathon_h']= {"马拉松", "困难", "200行高速马拉松"},
|
||||||
['solo_e']= {"单挑", "简单", "打败AI"},
|
['solo_e']= {"单挑", "简单", "打败AI"},
|
||||||
@@ -736,6 +776,7 @@ return{
|
|||||||
['pc_n']= {"全清挑战", "普通", "100行内刷PC"},
|
['pc_n']= {"全清挑战", "普通", "100行内刷PC"},
|
||||||
['pc_h']= {"全清挑战", "困难", "100行内刷PC"},
|
['pc_h']= {"全清挑战", "困难", "100行内刷PC"},
|
||||||
['pc_l']= {"全清挑战", "疯狂", "100行内刷PC"},
|
['pc_l']= {"全清挑战", "疯狂", "100行内刷PC"},
|
||||||
|
['pc_inf']= {"无尽全清挑战", "", "你能连续做多少PC?"},
|
||||||
['tech_n']= {"科研", "普通", "禁止断B2B"},
|
['tech_n']= {"科研", "普通", "禁止断B2B"},
|
||||||
['tech_n_plus']= {"科研", "普通+", "仅允许spin与PC"},
|
['tech_n_plus']= {"科研", "普通+", "仅允许spin与PC"},
|
||||||
['tech_h']= {"科研", "困难", "禁止断B2B"},
|
['tech_h']= {"科研", "困难", "禁止断B2B"},
|
||||||
@@ -757,6 +798,7 @@ return{
|
|||||||
['infinite_dig']= {"无尽:挖掘", "", "挖呀挖呀挖"},
|
['infinite_dig']= {"无尽:挖掘", "", "挖呀挖呀挖"},
|
||||||
['sprintFix']= {"竞速", "无移动"},
|
['sprintFix']= {"竞速", "无移动"},
|
||||||
['sprintLock']= {"竞速", "无旋转"},
|
['sprintLock']= {"竞速", "无旋转"},
|
||||||
|
['sprintSmooth']= {"竞速", "无摩擦"},
|
||||||
['marathon_bfmax']= {"马拉松", "极限"},
|
['marathon_bfmax']= {"马拉松", "极限"},
|
||||||
['custom_clear']= {"自定义", "普通"},
|
['custom_clear']= {"自定义", "普通"},
|
||||||
['custom_puzzle']= {"自定义", "拼图"},
|
['custom_puzzle']= {"自定义", "拼图"},
|
||||||
@@ -789,21 +831,20 @@ return{
|
|||||||
"29种块里28个都能spin你敢信?",
|
"29种块里28个都能spin你敢信?",
|
||||||
"3.1415926535897932384 ? ? ?",
|
"3.1415926535897932384 ? ? ?",
|
||||||
"3next 1hold?",
|
"3next 1hold?",
|
||||||
"40行世界纪录:15.654s by VinceHD",
|
"40行世界纪录:15.557s by Reset",
|
||||||
"6236326236327175",
|
"6236326236327175",
|
||||||
|
"626in1",
|
||||||
"6next 1hold!",
|
"6next 1hold!",
|
||||||
"6next 6hold?!",
|
"6next 6hold?!",
|
||||||
"7宽三SZ架空捐了解一下",
|
"7宽三SZ架空捐了解一下",
|
||||||
"9999in1",
|
|
||||||
"按钮风格进化史",
|
"按钮风格进化史",
|
||||||
"把手机调到特殊的日期也许会发生什么",
|
"把手机调到特殊的日期也许会发生什么",
|
||||||
"报时机器人:新的一天开始了",
|
"报时机器人:新的一天开始了",
|
||||||
"背景影响游玩?可以去设置关闭",
|
"背景影响游玩?可以去设置关闭",
|
||||||
"本游戏不是产品,是作品(至少目前是…)",
|
|
||||||
"本游戏的一部分内容是国际合作的!",
|
"本游戏的一部分内容是国际合作的!",
|
||||||
"本游戏的B2B是气槽机制,和传统的开关机制不一样哦",
|
"本游戏的B2B是气槽机制,和传统的开关机制不一样哦",
|
||||||
"本游戏可不是休闲游戏。",
|
"本游戏还在测试中,出各种问题都是有可能的哦",
|
||||||
"本游戏内置了几个休(ying)闲(he)小游戏哦~入口就藏在这个菜单",
|
"本游戏内置了几个休(ying)闲(he)小游戏哦~",
|
||||||
"本游戏在设计的时候受到了大量其他块游甚至一些音游的启发",
|
"本游戏在设计的时候受到了大量其他块游甚至一些音游的启发",
|
||||||
"必须要软降才能到达的位置都会判定为极简操作",
|
"必须要软降才能到达的位置都会判定为极简操作",
|
||||||
"别看攻击效率不高,其实消四还是很强的",
|
"别看攻击效率不高,其实消四还是很强的",
|
||||||
@@ -816,7 +857,8 @@ return{
|
|||||||
"彩色消除即将到来!",
|
"彩色消除即将到来!",
|
||||||
"草(日本语)",
|
"草(日本语)",
|
||||||
"成就系统在做了!",
|
"成就系统在做了!",
|
||||||
"触发游戏报错后日志文件会越来越大(不过顶多几十K)",
|
"吃键?真的吗?建议回放看看到底按没按到,按了多久",
|
||||||
|
"触发游戏报错后日志文件会越来越大(不过顶多几百K)",
|
||||||
"触摸板打osu也很好!",
|
"触摸板打osu也很好!",
|
||||||
"凑数tip什么时候能站起来!",
|
"凑数tip什么时候能站起来!",
|
||||||
"打好块跟学习一样没有捷径,多练。",
|
"打好块跟学习一样没有捷径,多练。",
|
||||||
@@ -828,7 +870,6 @@ return{
|
|||||||
"低帧率会降低游戏体验",
|
"低帧率会降低游戏体验",
|
||||||
"点击添加标题",
|
"点击添加标题",
|
||||||
"点击添加副标题",
|
"点击添加副标题",
|
||||||
"点击退出按钮会有极小概率会…",
|
|
||||||
"电脑游玩自带按键显示~",
|
"电脑游玩自带按键显示~",
|
||||||
"对编程有真·兴趣推荐Lua,安装无脑 语法简单 执行速度快 远离枯燥学校编程(雾",
|
"对编程有真·兴趣推荐Lua,安装无脑 语法简单 执行速度快 远离枯燥学校编程(雾",
|
||||||
"对战游戏不是单机游戏,所以timing在对战里也非常重要!",
|
"对战游戏不是单机游戏,所以timing在对战里也非常重要!",
|
||||||
@@ -841,10 +882,11 @@ return{
|
|||||||
"方块默认出现的方向都是重心在下哦",
|
"方块默认出现的方向都是重心在下哦",
|
||||||
"方块能吃吗",
|
"方块能吃吗",
|
||||||
"服务器随时爆炸",
|
"服务器随时爆炸",
|
||||||
"感觉自己明明按键了但是没反应?你真的按到了吗?",
|
"感觉明明按键了但是没反应?你真的按到了吗?",
|
||||||
"感觉自己速度到上限了?试着把das调低一点",
|
"感觉自己速度到上限了?试着把das调低一点",
|
||||||
"感谢群友帮忙想tip",
|
"感谢群友帮忙想tip",
|
||||||
"感谢Orzmic为这个tip显示框提出意见",
|
"感谢Orzmic为这个tip显示框提出意见",
|
||||||
|
"感谢Phigros提供部分tip模板(",
|
||||||
"刚接触方块的话多玩玩就行,40行两分钟以外没啥好针对性练习的",
|
"刚接触方块的话多玩玩就行,40行两分钟以外没啥好针对性练习的",
|
||||||
"刚开始练全隐形可以尽量堆平,留一列消四",
|
"刚开始练全隐形可以尽量堆平,留一列消四",
|
||||||
"隔断消除即将到来!",
|
"隔断消除即将到来!",
|
||||||
@@ -853,12 +895,13 @@ return{
|
|||||||
"更小的DAS和ARR拥有更高的操作上限(能控制得了的话)",
|
"更小的DAS和ARR拥有更高的操作上限(能控制得了的话)",
|
||||||
"更新内容在游戏里和群公告都有写!",
|
"更新内容在游戏里和群公告都有写!",
|
||||||
"攻击生效速度(从快到慢):消二/三,消四,spin,高连击",
|
"攻击生效速度(从快到慢):消二/三,消四,spin,高连击",
|
||||||
"官网在做了",
|
|
||||||
"还能写些什么tip呢",
|
"还能写些什么tip呢",
|
||||||
"好像还没人能用脚打块打到一定水平",
|
"好像还没人能用脚打块打到一定水平",
|
||||||
"好像可以把手机倒过来打场地旋转180...那还是不建议违反规则",
|
"好像可以把手机倒过来打场地旋转180...那还是不建议违反规则",
|
||||||
"很有精神!",
|
"很有精神!",
|
||||||
"混合消除即将到来!",
|
"混合消除即将到来!",
|
||||||
|
"基础堆叠和挖掘能力非常重要,忽视这两项的人都后悔了(确信)",
|
||||||
|
"激烈的竞争不应充斥整个游戏",
|
||||||
"即使被顶到天上了也不要放弃,每一行垃圾都有可能成为你的武器",
|
"即使被顶到天上了也不要放弃,每一行垃圾都有可能成为你的武器",
|
||||||
"极简率决定了你大概的速度上限和相等手速下的放块速度",
|
"极简率决定了你大概的速度上限和相等手速下的放块速度",
|
||||||
"假如生活欺骗了你,不要悲伤,不要心急,还有块陪着你",
|
"假如生活欺骗了你,不要悲伤,不要心急,还有块陪着你",
|
||||||
@@ -867,6 +910,7 @@ return{
|
|||||||
"健康小贴士:不要熬夜,真的会猝死",
|
"健康小贴士:不要熬夜,真的会猝死",
|
||||||
"健康小贴士:玩游戏多眨眼,不然会干眼病",
|
"健康小贴士:玩游戏多眨眼,不然会干眼病",
|
||||||
"键位是可以自定义的",
|
"键位是可以自定义的",
|
||||||
|
"键位有可能决定了上限,可能的话还是尽量考虑一下自己的键位是否利于超高速操作",
|
||||||
"觉得移动速度太慢或太快,手感不好?快去设置调整DAS/ARR",
|
"觉得移动速度太慢或太快,手感不好?快去设置调整DAS/ARR",
|
||||||
"开启省流模式后将不会加载用户头像(应该能省不少流吧)",
|
"开启省流模式后将不会加载用户头像(应该能省不少流吧)",
|
||||||
"快去打一把100%极简看看会怎样",
|
"快去打一把100%极简看看会怎样",
|
||||||
@@ -880,23 +924,26 @@ return{
|
|||||||
"免费吃鸡方块",
|
"免费吃鸡方块",
|
||||||
"喵!",
|
"喵!",
|
||||||
"魔方也是方块(确信",
|
"魔方也是方块(确信",
|
||||||
|
"能导致吃键的问题有很多,建议说清楚具体发生了什么并且录视频说明",
|
||||||
"你的双手是为了你的一生服务的,而不是Techmino",
|
"你的双手是为了你的一生服务的,而不是Techmino",
|
||||||
"你今天的人品值是:"..math.random(100),
|
"你今天的人品值是:"..math.random(100),
|
||||||
"你可以从统计页面打开游戏存档目录",
|
"你可以从统计页面打开游戏存档目录",
|
||||||
"你们考虑过Z酱的感受吗?没有!你们只考虑你自己。",
|
"你们考虑过Z酱的感受吗?没有!你们只考虑你自己。",
|
||||||
"你说彩蛋?嗯…算是有,可以找找",
|
"你说彩蛋?嗯…算是有,可以找找",
|
||||||
|
"你有一个好",
|
||||||
"你知道吗:看主页机器人玩可能比较费电",
|
"你知道吗:看主页机器人玩可能比较费电",
|
||||||
"你知道吗:全程不使用任何旋转键完成40行模式是有可能的",
|
"你知道吗:全程不使用任何旋转键完成40行模式是有可能的",
|
||||||
"你知道吗:全程不使用左右移动键完成40行模式是有可能的",
|
"你知道吗:全程不使用左右移动键完成40行模式是有可能的",
|
||||||
"你知道吗:停留在模式地图界面很费电",
|
"你知道吗:停留在模式地图界面很费电",
|
||||||
|
"你知道吗:在其他(方块)游戏相关场合提及本游戏是很不礼貌的",
|
||||||
"你准备好了吗?",
|
"你准备好了吗?",
|
||||||
|
"其实很多时候\"吃键\"是玩家对游戏机制不了解或者自己的操作问题导致的",
|
||||||
"请勿大力敲打设备!敲坏了就没有Techmino玩了",
|
"请勿大力敲打设备!敲坏了就没有Techmino玩了",
|
||||||
"请勿使用三只手游玩",
|
"请勿使用三只手游玩",
|
||||||
"去玩别的方块的时候记得没有Ospin!",
|
"去玩别的方块的时候记得没有Ospin!",
|
||||||
"全球应该没人能全S评价(大爆炸不算)",
|
"全球应该没人能全S评价(大爆炸不算)",
|
||||||
"群友翻译的中文方块百科全书! tetris.huijiwiki.com",
|
"群友翻译的中文方块百科全书! tetris.huijiwiki.com",
|
||||||
"让他三尺又何妨",
|
"让他三尺又何妨",
|
||||||
"如果打开简洁模式那这个菜单就没有彩蛋了",
|
|
||||||
"如何O-spin: 一秒转626圈(误",
|
"如何O-spin: 一秒转626圈(误",
|
||||||
"三连块只有2种",
|
"三连块只有2种",
|
||||||
"三岁通关困难马拉松",
|
"三岁通关困难马拉松",
|
||||||
@@ -909,6 +956,7 @@ return{
|
|||||||
"睡眠不足会引起不可逆的脑损伤(变傻)",
|
"睡眠不足会引起不可逆的脑损伤(变傻)",
|
||||||
"四连块总共7种",
|
"四连块总共7种",
|
||||||
"虽然极简连击和极简率计算看着很怪,但以后你会发现还挺科学!",
|
"虽然极简连击和极简率计算看着很怪,但以后你会发现还挺科学!",
|
||||||
|
"所有大道理tip都是亲眼目睹后加的,如果觉得多余说明就不是给你看的呀!消消气",
|
||||||
"提前旋转等功能可以用来救命",
|
"提前旋转等功能可以用来救命",
|
||||||
"天哪,我竟然是一条凑数tip",
|
"天哪,我竟然是一条凑数tip",
|
||||||
"退一步海阔天空",
|
"退一步海阔天空",
|
||||||
@@ -917,6 +965,7 @@ return{
|
|||||||
"玩得开心的话游戏作者也会很开心哦",
|
"玩得开心的话游戏作者也会很开心哦",
|
||||||
"为了保护玩家们的健康,本游戏有一个临时的简易防沉迷系统!(不过估计你也触发不了/笑)",
|
"为了保护玩家们的健康,本游戏有一个临时的简易防沉迷系统!(不过估计你也触发不了/笑)",
|
||||||
"为什么关卡那么少!因为前一模式成绩连D都没达到,再加把劲吧~",
|
"为什么关卡那么少!因为前一模式成绩连D都没达到,再加把劲吧~",
|
||||||
|
"为数不多走向世界的国产方块游戏",
|
||||||
"我曾经在极度愤怒的时候15秒消了40行",
|
"我曾经在极度愤怒的时候15秒消了40行",
|
||||||
"我们联合!",
|
"我们联合!",
|
||||||
"我们是不是第一个在方块游戏做tip的?",
|
"我们是不是第一个在方块游戏做tip的?",
|
||||||
@@ -932,6 +981,7 @@ return{
|
|||||||
"希望你们都能喜欢Z…哦不是,喜欢Techmino",
|
"希望你们都能喜欢Z…哦不是,喜欢Techmino",
|
||||||
"喜欢本游戏的话可以到应用商…好像没上架呢还",
|
"喜欢本游戏的话可以到应用商…好像没上架呢还",
|
||||||
"享受Tech的特色旋转系统!",
|
"享受Tech的特色旋转系统!",
|
||||||
|
"向无关人员推荐这个游戏会对本游戏的生存环境造成影响",
|
||||||
"写不出那种很酷的音乐(哭",
|
"写不出那种很酷的音乐(哭",
|
||||||
"旋转不是变形!请尽量灵活利用顺逆时针两个旋转键!",
|
"旋转不是变形!请尽量灵活利用顺逆时针两个旋转键!",
|
||||||
"学会使用两个旋转键,三个更好",
|
"学会使用两个旋转键,三个更好",
|
||||||
@@ -939,7 +989,9 @@ return{
|
|||||||
"要盯着bug不放",
|
"要盯着bug不放",
|
||||||
"音乐使用beepbox制作",
|
"音乐使用beepbox制作",
|
||||||
"音游方块是一家(暴论",
|
"音游方块是一家(暴论",
|
||||||
"游戏使用love2d引擎制作",
|
"游戏使用LÖVE引擎制作",
|
||||||
|
"游戏使用un...LÖVE引擎制作",
|
||||||
|
"游戏也是一种艺术形式",
|
||||||
"游戏中左下角三个信息分别是分数/时间/极简连击数",
|
"游戏中左下角三个信息分别是分数/时间/极简连击数",
|
||||||
"有建议的话可以把信息反馈给作者~",
|
"有建议的话可以把信息反馈给作者~",
|
||||||
"有三个隐藏模式不能从地图进入,到处找找看吧",
|
"有三个隐藏模式不能从地图进入,到处找找看吧",
|
||||||
@@ -950,10 +1002,11 @@ return{
|
|||||||
"众所周知俄罗斯方块是经典编程练手游戏(?",
|
"众所周知俄罗斯方块是经典编程练手游戏(?",
|
||||||
"注意到方块\"旋转\"的时候到底发生了些什么吗?",
|
"注意到方块\"旋转\"的时候到底发生了些什么吗?",
|
||||||
"自定义场地可以画图实现逐页演示",
|
"自定义场地可以画图实现逐页演示",
|
||||||
"总共有300多条tip哦",
|
"总共有将近400条tip哦",
|
||||||
"作者40行sub26了",
|
"作者40行sub26了",
|
||||||
"作者电脑上装了10个方块",
|
"作者电脑上装了10个方块",
|
||||||
"作者浏览器收藏夹里有6个方块",
|
"作者浏览器收藏夹里有6个方块",
|
||||||
|
"做,做碌鸠啊做,打块先啦!",
|
||||||
"做点击特效的时候真没想抄Phigros!想法另有出处,做完了才突然发现好像(",
|
"做点击特效的时候真没想抄Phigros!想法另有出处,做完了才突然发现好像(",
|
||||||
"ALLSPIN!",
|
"ALLSPIN!",
|
||||||
"Am G F G",
|
"Am G F G",
|
||||||
@@ -998,6 +1051,7 @@ return{
|
|||||||
"sin2α=2SαCα",
|
"sin2α=2SαCα",
|
||||||
"sofunhowtoget",
|
"sofunhowtoget",
|
||||||
"Staff名单里飘过的是赞助榜单,喜欢本游戏的话可以给我们打赞助支持开发哦~",
|
"Staff名单里飘过的是赞助榜单,喜欢本游戏的话可以给我们打赞助支持开发哦~",
|
||||||
|
"STSD必死",
|
||||||
"SΔABC=√(h(h-a)(h-b)(h-c)), h=(a+b+c)/2",
|
"SΔABC=√(h(h-a)(h-b)(h-c)), h=(a+b+c)/2",
|
||||||
"Techmino = Technique + tetromino",
|
"Techmino = Technique + tetromino",
|
||||||
"Techmino 好玩!",
|
"Techmino 好玩!",
|
||||||
@@ -1005,6 +1059,7 @@ return{
|
|||||||
"Techmino console了解一下",
|
"Techmino console了解一下",
|
||||||
"Techmino n.铁壳米诺(游戏名)",
|
"Techmino n.铁壳米诺(游戏名)",
|
||||||
"Techmino安卓下载",
|
"Techmino安卓下载",
|
||||||
|
"Techmino不是工业产品也不是练手程序,是游戏作品(至少目前是,嗯…)",
|
||||||
"Techmino好玩!",
|
"Techmino好玩!",
|
||||||
"Techmino生日不太清楚,那就定在2019.6.26吧",
|
"Techmino生日不太清楚,那就定在2019.6.26吧",
|
||||||
"Techmino也有节日主题了哦",
|
"Techmino也有节日主题了哦",
|
||||||
@@ -1051,19 +1106,13 @@ return{
|
|||||||
{C.G,"快捷键: Ctrl+W=关闭当前标签页"},
|
{C.G,"快捷键: Ctrl+W=关闭当前标签页"},
|
||||||
{C.G,"快捷键: shift+del=永久删除文件 (技术人员别杠)"},
|
{C.G,"快捷键: shift+del=永久删除文件 (技术人员别杠)"},
|
||||||
{C.G,"GREEN"},
|
{C.G,"GREEN"},
|
||||||
{C.H,"感谢Phigros提供部分tip模板("},
|
|
||||||
{C.H,"暂定段位:9"},
|
{C.H,"暂定段位:9"},
|
||||||
{C.H,"REGRET!!"},
|
{C.H,"REGRET!!"},
|
||||||
{C.J,"JADE"},
|
{C.J,"JADE"},
|
||||||
{C.L,"LIME"},
|
{C.L,"LIME"},
|
||||||
{C.lC,"26连T2来一个?"},
|
{C.lC,"26连T2来一个?"},
|
||||||
{C.lC,"Xspin",C.Z,"是啥"},
|
{C.lC,"Xspin",C.Z,"是啥"},
|
||||||
{C.lH,"腱鞘炎警告"},
|
{C.lP,"秘密数字:626"},
|
||||||
{C.lH,"没学过编曲,音乐都是自己瞎写的,觉得不好听就去设置关了吧"},
|
|
||||||
{C.lH,"秘密数字:626"},
|
|
||||||
{C.lH,"你有一个好"},
|
|
||||||
{C.lH,"STSD必死"},
|
|
||||||
{C.lH,"Techmino没有抽卡没有氪金,太良心了"},
|
|
||||||
{C.lP,"Naki",C.Z," 可爱!"},
|
{C.lP,"Naki",C.Z," 可爱!"},
|
||||||
{C.lR,"Z ",C.lG,"S ",C.lS,"J ",C.lO,"L ",C.lP,"T ",C.lY,"O ",C.lC,"I"},
|
{C.lR,"Z ",C.lG,"S ",C.lS,"J ",C.lO,"L ",C.lP,"T ",C.lY,"O ",C.lC,"I"},
|
||||||
{C.lS,"茶娘",C.Z," 可爱!"},
|
{C.lS,"茶娘",C.Z," 可爱!"},
|
||||||
@@ -1104,5 +1153,48 @@ return{
|
|||||||
{C.Z,"效率药水",C.H," 效率提升 (8:00)"},
|
{C.Z,"效率药水",C.H," 效率提升 (8:00)"},
|
||||||
{C.Z,"协调药水",C.H," MD减少 II(1:30)"},
|
{C.Z,"协调药水",C.H," MD减少 II(1:30)"},
|
||||||
-- "Z酱 可爱!",
|
-- "Z酱 可爱!",
|
||||||
|
{C.dH,"100apm?你倒是不用开局定式连续打几把"},
|
||||||
|
{C.dH,"10连pc不是随手?"},
|
||||||
|
{C.dH,"20G很难?换谁多练练都行吧。"},
|
||||||
|
{C.dH,"20TSD不是轻松?"},
|
||||||
|
{C.dH,"3pps不是人均水平?"},
|
||||||
|
{C.dH,"40行还要40多秒,就这?"},
|
||||||
|
{C.dH,"别动不动大惊小怪,就这场面谁没见过"},
|
||||||
|
{C.dH,"别会个c4w就以为自己多强,基本功之一罢了。"},
|
||||||
|
{C.dH,"别人用跳舞毯打得都比你好"},
|
||||||
|
{C.dH,"别人只用一只手都能玩,你呢?"},
|
||||||
|
{C.dH,"不会有人以为S和Z只有两个方向吧"},
|
||||||
|
{C.dH,"除了雨宫太阳你还认识谁?Jonas知道吗?Ajanba听过吗?"},
|
||||||
|
{C.dH,"单旋没前途的,别玩了"},
|
||||||
|
{C.dH,"还搁这玩手机呢,作业做完了?"},
|
||||||
|
{C.dH,"极限20G不是随手通?"},
|
||||||
|
{C.dH,"腱鞘炎警告"},
|
||||||
|
{C.dH,"经典块的水也很深,不要小看经典块玩家"},
|
||||||
|
{C.dH,"经典块跟现代块是两个游戏,别拿多少年前的水平秀,何况你也没见过厉害的,请从头练起。"},
|
||||||
|
{C.dH,"经典块和渣方块是两个概念"},
|
||||||
|
{C.dH,"觉得Techmino好玩是你的幸运,不是你有优越感的理由"},
|
||||||
|
{C.dH,"卖弱和谦虚不是一回事,请看场合。"},
|
||||||
|
{C.dH,"满口PCDT信天翁,还会点别的么?"},
|
||||||
|
{C.dH,"没那水平别天天整什么花里胡哨的,人家玩了几年你想几天赶上?"},
|
||||||
|
{C.dH,"没学过编曲,音乐都是自己瞎写的,觉得不好听就去设置关了吧"},
|
||||||
|
{C.dH,"请自己先搞搞清楚再去教别人"},
|
||||||
|
{C.dH,"全隐40行全消四很难吗??"},
|
||||||
|
{C.dH,"少玩点游戏,多注意眨眼和休息,瞎了别怪没提醒你"},
|
||||||
|
{C.dH,"设置都看过一遍了吗?在那提老早就做好了的东西,谁的问题?"},
|
||||||
|
{C.dH,"谁说一定要强的人才叫卖弱?不是最菜就一定在有人眼中是卖弱"},
|
||||||
|
{C.dH,"双旋和极简尽早学起来…懒得学以后亏的是自己"},
|
||||||
|
{C.dH,"说了多练就去多练,想着几天变神仙,当自己是谁?"},
|
||||||
|
{C.dH,"天天催更催更,你咋不来帮忙开发啊,真以为作者很强催啥都能有?"},
|
||||||
|
{C.dH,"天天卖弱,你一定把把150apm吧?"},
|
||||||
|
{C.dH,"问怎么练就好好问,别就一句话怎么变强,鬼知道你现在什么水平"},
|
||||||
|
{C.dH,"先练基础不听,现在速度没有,Tspin完地形一塌糊涂,开心吗?"},
|
||||||
|
{C.dH,"一口一个wtcl还不赶紧去练,你是不思进取还是不想好好说话?"},
|
||||||
|
{C.dH,"隐形很难?上电视那个水平一般都打成那样,属实自己不行看不起别人"},
|
||||||
|
{C.dH,"隐形哪难了,你练了吗?没专门练几个小时就说难是不是也太没耐心了点"},
|
||||||
|
{C.dH,"有问题建议先找找是不是自己的问题,那么多人就你事多?"},
|
||||||
|
{C.dH,"这不是休闲游戏…别怪关卡要求太高,就是你菜,请多练。"},
|
||||||
|
{C.dH,"这年头不会双旋还敢跟人打对战?"},
|
||||||
|
{C.dH,"整天卖弱必天打雷劈"},
|
||||||
|
{C.dH,"Techmino没有抽卡没有氪金没有逼肝,良不良心不言自明"},
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -48,14 +48,7 @@ return{
|
|||||||
"非极简操作:",
|
"非极简操作:",
|
||||||
},
|
},
|
||||||
radar={"防","守","攻","送","速","挖"},
|
radar={"防","守","攻","送","速","挖"},
|
||||||
radarData={
|
radarData={"防/分","守/分","攻/分","送/分","行/分","挖/分"},
|
||||||
"防/分",
|
|
||||||
"综/分",
|
|
||||||
"攻/分",
|
|
||||||
"送/分",
|
|
||||||
"行/分",
|
|
||||||
"挖/分",
|
|
||||||
},
|
|
||||||
WidgetText={
|
WidgetText={
|
||||||
mode={
|
mode={
|
||||||
mod="模组(F1)",
|
mod="模组(F1)",
|
||||||
@@ -79,8 +72,7 @@ return{
|
|||||||
},
|
},
|
||||||
customGame={
|
customGame={
|
||||||
mod="模组(F1)",
|
mod="模组(F1)",
|
||||||
},
|
|
||||||
custom_advance={
|
|
||||||
nextCount="预览个数",
|
nextCount="预览个数",
|
||||||
holdCount="暂存个数",
|
holdCount="暂存个数",
|
||||||
infHold="无限暂存",
|
infHold="无限暂存",
|
||||||
@@ -153,7 +145,7 @@ return{
|
|||||||
['dig_400l']= {"挖掘", "400L", "挖掘400行"},
|
['dig_400l']= {"挖掘", "400L", "挖掘400行"},
|
||||||
['dig_1000l']= {"挖掘", "1000L", "挖掘1000行"},
|
['dig_1000l']= {"挖掘", "1000L", "挖掘1000行"},
|
||||||
['drought_n']= {"干旱", "100行", "你I没了"},
|
['drought_n']= {"干旱", "100行", "你I没了"},
|
||||||
['drought_l']= {"干旱", "100行", "后 妈 发 牌"},
|
['drought_l']= {"干旱+", "100行", "后 妈 发 牌"},
|
||||||
['marathon_n']= {"马拉松", "普通", "200行加速马拉松"},
|
['marathon_n']= {"马拉松", "普通", "200行加速马拉松"},
|
||||||
['marathon_h']= {"马拉松", "困难", "200行高速马拉松"},
|
['marathon_h']= {"马拉松", "困难", "200行高速马拉松"},
|
||||||
['solo_e']= {"单挑", "简单", "打败机器人"},
|
['solo_e']= {"单挑", "简单", "打败机器人"},
|
||||||
@@ -206,6 +198,7 @@ return{
|
|||||||
['pc_n']= {"全清挑战", "普通", "100行内刷全清"},
|
['pc_n']= {"全清挑战", "普通", "100行内刷全清"},
|
||||||
['pc_h']= {"全清挑战", "困难", "100行内刷全清"},
|
['pc_h']= {"全清挑战", "困难", "100行内刷全清"},
|
||||||
['pc_l']= {"全清挑战", "疯狂", "100行内刷全清"},
|
['pc_l']= {"全清挑战", "疯狂", "100行内刷全清"},
|
||||||
|
['pc_inf']= {"无尽全清挑战", "", "你能连续做多少PC?"},
|
||||||
['tech_n']= {"科研", "普通", "禁止断B2B"},
|
['tech_n']= {"科研", "普通", "禁止断B2B"},
|
||||||
['tech_n_plus']= {"科研", "普通+", "仅允许回旋与全清"},
|
['tech_n_plus']= {"科研", "普通+", "仅允许回旋与全清"},
|
||||||
['tech_h']= {"科研", "困难", "禁止断B2B"},
|
['tech_h']= {"科研", "困难", "禁止断B2B"},
|
||||||
@@ -227,6 +220,7 @@ return{
|
|||||||
['infinite_dig']= {"无尽:挖掘", "", "挖呀挖呀挖"},
|
['infinite_dig']= {"无尽:挖掘", "", "挖呀挖呀挖"},
|
||||||
['sprintFix']= {"竞速", "无移动"},
|
['sprintFix']= {"竞速", "无移动"},
|
||||||
['sprintLock']= {"竞速", "无旋转"},
|
['sprintLock']= {"竞速", "无旋转"},
|
||||||
|
['sprintSmooth']= {"竞速", "无摩擦"},
|
||||||
['marathon_bfmax']= {"马拉松", "极限"},
|
['marathon_bfmax']= {"马拉松", "极限"},
|
||||||
['custom_clear']= {"自定义", "普通"},
|
['custom_clear']= {"自定义", "普通"},
|
||||||
['custom_puzzle']= {"自定义", "拼图"},
|
['custom_puzzle']= {"自定义", "拼图"},
|
||||||
|
|||||||
@@ -39,7 +39,7 @@ Attack system:
|
|||||||
Sends 8 to 16 (increments within a game by 2 for every PC) OR every other damage above, whichever is higher,
|
Sends 8 to 16 (increments within a game by 2 for every PC) OR every other damage above, whichever is higher,
|
||||||
and +2 extra blocking.
|
and +2 extra blocking.
|
||||||
|
|
||||||
Combos: All damage above will be given a (combo x25%) bonus, or (combo x15% for Single clear) (capped at 12 combo),
|
Combos: All damage above will be given a (combo x25%) bonus, or (combo x15%) for Single clear (capped at 12 combo),
|
||||||
+1 more attack for 3 Combo or more.
|
+1 more attack for 3 Combo or more.
|
||||||
After calculating all above, the damage value will be rounded down then sent
|
After calculating all above, the damage value will be rounded down then sent
|
||||||
|
|
||||||
|
|||||||
@@ -1,3 +1,4 @@
|
|||||||
|
do--title
|
||||||
title={
|
title={
|
||||||
{
|
{
|
||||||
53, 60,
|
53, 60,
|
||||||
@@ -118,7 +119,7 @@ for _,C in next,title do
|
|||||||
C[i]=C[i]*.1626
|
C[i]=C[i]*.1626
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
end
|
||||||
do--title_fan
|
do--title_fan
|
||||||
title_fan={}
|
title_fan={}
|
||||||
local sin,cos=math.sin,math.cos
|
local sin,cos=math.sin,math.cos
|
||||||
@@ -136,7 +137,6 @@ do--title_fan
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
do--missionEnum
|
do--missionEnum
|
||||||
missionEnum={
|
missionEnum={
|
||||||
_1=01,_2=02,_3=03,_4=04,
|
_1=01,_2=02,_3=03,_4=04,
|
||||||
@@ -154,18 +154,13 @@ do--missionEnum
|
|||||||
for k,v in next,missionEnum do L[v]=k end
|
for k,v in next,missionEnum do L[v]=k end
|
||||||
for k,v in next,L do missionEnum[k]=v end
|
for k,v in next,L do missionEnum[k]=v end
|
||||||
end
|
end
|
||||||
|
|
||||||
do--drawableText
|
do--drawableText
|
||||||
local function T(s,t)return love.graphics.newText(getFont(s),t)end
|
local function T(s,t)return love.graphics.newText(getFont(s),t)end
|
||||||
drawableText={
|
drawableText={
|
||||||
question=T(100,"?"),
|
|
||||||
small=T(30,"<"),large=T(30,">"),
|
|
||||||
bpm=T(15,"BPM"),kpm=T(15,"KPM"),
|
|
||||||
modeName=T(30),
|
modeName=T(30),
|
||||||
|
|
||||||
anykey=T(40),
|
anykey=T(40),
|
||||||
replaying=T(20),
|
replaying=T(20),
|
||||||
next=T(40),hold=T(40),
|
|
||||||
win=T(120),lose=T(120),
|
win=T(120),lose=T(120),
|
||||||
finish=T(120),
|
finish=T(120),
|
||||||
gamewin=T(100),gameover=T(100),pause=T(120),
|
gamewin=T(100),gameover=T(100),pause=T(120),
|
||||||
@@ -181,7 +176,6 @@ do--drawableText
|
|||||||
noScore=T(45),highScore=T(30),
|
noScore=T(45),highScore=T(30),
|
||||||
}
|
}
|
||||||
end
|
end
|
||||||
|
|
||||||
do--BLOCKS
|
do--BLOCKS
|
||||||
local O,_=true,false
|
local O,_=true,false
|
||||||
BLOCKS={
|
BLOCKS={
|
||||||
@@ -244,7 +238,6 @@ do--BLOCKS
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
do--SCS(spinCenters)
|
do--SCS(spinCenters)
|
||||||
local N1,N2,N3,N4={0,1},{1,0},{1,1},{.5,.5}
|
local N1,N2,N3,N4={0,1},{1,0},{1,1},{.5,.5}
|
||||||
local I1,I2,I3,I4={-.5,1.5},{1.5,-.5},{.5,1.5},{1.5,.5}
|
local I1,I2,I3,I4={-.5,1.5},{1.5,-.5},{.5,1.5},{1.5,.5}
|
||||||
@@ -293,7 +286,6 @@ do--SCS(spinCenters)
|
|||||||
{[0]=D,D,D,D},--O1
|
{[0]=D,D,D,D},--O1
|
||||||
}
|
}
|
||||||
end
|
end
|
||||||
|
|
||||||
rankColor={
|
rankColor={
|
||||||
{.6,.3,.3},
|
{.6,.3,.3},
|
||||||
{.7,.5,.3},
|
{.7,.5,.3},
|
||||||
@@ -301,7 +293,6 @@ rankColor={
|
|||||||
{.6,.9,1},
|
{.6,.9,1},
|
||||||
{.95,.95,.5},
|
{.95,.95,.5},
|
||||||
}
|
}
|
||||||
|
|
||||||
minoColor={
|
minoColor={
|
||||||
COLOR.R,COLOR.F,COLOR.O,COLOR.Y,COLOR.L,COLOR.J,COLOR.G,COLOR.A,
|
COLOR.R,COLOR.F,COLOR.O,COLOR.Y,COLOR.L,COLOR.J,COLOR.G,COLOR.A,
|
||||||
COLOR.C,COLOR.N,COLOR.S,COLOR.B,COLOR.V,COLOR.P,COLOR.M,COLOR.W,
|
COLOR.C,COLOR.N,COLOR.S,COLOR.B,COLOR.V,COLOR.P,COLOR.M,COLOR.W,
|
||||||
|
|||||||
@@ -77,12 +77,13 @@ return{
|
|||||||
{name='c4wtrain_n', x=700, y=-400, size=40,shape=1,icon="pc",unlock={'c4wtrain_l'}},
|
{name='c4wtrain_n', x=700, y=-400, size=40,shape=1,icon="pc",unlock={'c4wtrain_l'}},
|
||||||
{name='c4wtrain_l', x=900, y=-400, size=40,shape=1,icon="pc"},
|
{name='c4wtrain_l', x=900, y=-400, size=40,shape=1,icon="pc"},
|
||||||
|
|
||||||
{name='pctrain_n', x=700, y=-220, size=40,shape=1,icon="pc", unlock={'pctrain_l','pc_n'}},
|
{name='pctrain_n', x=700, y=-250, size=40,shape=1,icon="pc", unlock={'pctrain_l','pc_n'}},
|
||||||
{name='pctrain_l', x=900, y=-220, size=40,shape=1,icon="pc"},
|
{name='pctrain_l', x=900, y=-250, size=40,shape=1,icon="pc"},
|
||||||
|
|
||||||
{name='pc_n', x=800, y=-100, size=40,shape=1,icon="pc", unlock={'pc_h'}},
|
{name='pc_n', x=800, y=-110, size=40,shape=1,icon="pc", unlock={'pc_h'}},
|
||||||
{name='pc_h', x=1000, y=-100, size=40,shape=3,icon="pc", unlock={'pc_l'}},
|
{name='pc_h', x=950, y=-110, size=40,shape=3,icon="pc", unlock={'pc_l','pc_inf'}},
|
||||||
{name='pc_l', x=1200, y=-100, size=40,shape=2,icon="pc"},
|
{name='pc_l', x=1100, y=-110, size=40,shape=3,icon="pc"},
|
||||||
|
{name='pc_inf', x=1100, y=-250, size=40,shape=2,icon="pc"},
|
||||||
|
|
||||||
{name='tech_n', x=400, y=-150, size=40,shape=1,icon="tech", unlock={'tech_n_plus','tech_h','tech_finesse'}},
|
{name='tech_n', x=400, y=-150, size=40,shape=1,icon="tech", unlock={'tech_n_plus','tech_h','tech_finesse'}},
|
||||||
{name='tech_n_plus', x=600, y=160, size=40,shape=3,icon="tech", unlock={'tsd_e','backfire_n'}},
|
{name='tech_n_plus', x=600, y=160, size=40,shape=3,icon="tech", unlock={'tsd_e','backfire_n'}},
|
||||||
@@ -110,10 +111,11 @@ return{
|
|||||||
|
|
||||||
{name='sprintFix'},
|
{name='sprintFix'},
|
||||||
{name='sprintLock'},
|
{name='sprintLock'},
|
||||||
|
|
||||||
|
{name='sprintSmooth'},
|
||||||
{name='marathon_bfmax'},
|
{name='marathon_bfmax'},
|
||||||
|
|
||||||
{name='custom_puzzle'},
|
{name='custom_puzzle'},
|
||||||
{name='custom_clear'},
|
{name='custom_clear'},
|
||||||
|
|
||||||
{name="netBattle"},
|
{name="netBattle"},
|
||||||
}
|
}
|
||||||
@@ -8,20 +8,18 @@ return{
|
|||||||
task=function(P)
|
task=function(P)
|
||||||
while true do
|
while true do
|
||||||
YIELD()
|
YIELD()
|
||||||
if P.control and P.atkBuffer.sum==0 then
|
if P.control and P.atkBufferSum==0 then
|
||||||
local p=#P.atkBuffer+1
|
local D=P.modeData
|
||||||
local B,D=P.atkBuffer,P.modeData
|
|
||||||
local t
|
|
||||||
if D.wave<20 then
|
if D.wave<20 then
|
||||||
t=1500-30*D.wave--1500~900
|
local t=1500-30*D.wave--1500~900
|
||||||
B[p]= {line=generateLine(P:RND(4,7)),amount=12,countdown=t,cd0=t,time=0,sent=false,lv=3}
|
table.insert(P.atkBuffer,{line=generateLine(P.holeRND:random(4,7)),amount=12,countdown=t,cd0=t,time=0,sent=false,lv=3})
|
||||||
B[p+1]= {line=generateLine(P:RND(3,8)),amount=10,countdown=t,cd0=t,time=0,sent=false,lv=4}
|
table.insert(P.atkBuffer,{line=generateLine(P.holeRND:random(3,8)),amount=10,countdown=t,cd0=t,time=0,sent=false,lv=4})
|
||||||
else
|
else
|
||||||
t=900-10*(D.wave-20)--900~600
|
local t=900-10*(D.wave-20)--900~600
|
||||||
B[p]= {line=generateLine(P:RND(10)),amount=14,countdown=t,cd0=t,time=0,sent=false,lv=4}
|
table.insert(P.atkBuffer,{line=generateLine(P.holeRND:random(10)),amount=14,countdown=t,cd0=t,time=0,sent=false,lv=4})
|
||||||
B[p+1]= {line=generateLine(P:RND(4,7)),amount=8,countdown=t,cd0=t,time=0,sent=false,lv=5}
|
table.insert(P.atkBuffer,{line=generateLine(P.holeRND:random(4,7)),amount=8,countdown=t,cd0=t,time=0,sent=false,lv=5})
|
||||||
end
|
end
|
||||||
B.sum=B.sum+22
|
P.atkBufferSum=P.atkBufferSum+22
|
||||||
P.stat.recv=P.stat.recv+22
|
P.stat.recv=P.stat.recv+22
|
||||||
D.wave=D.wave+1
|
D.wave=D.wave+1
|
||||||
if D.wave%10==0 then
|
if D.wave%10==0 then
|
||||||
|
|||||||
@@ -7,25 +7,24 @@ return{
|
|||||||
task=function(P)
|
task=function(P)
|
||||||
while true do
|
while true do
|
||||||
YIELD()
|
YIELD()
|
||||||
if P.control and P.atkBuffer.sum<4 then
|
if P.control and P.atkBufferSum<4 then
|
||||||
local p=#P.atkBuffer+1
|
local D=P.modeData
|
||||||
local B,D=P.atkBuffer,P.modeData
|
|
||||||
local s
|
local s
|
||||||
local t=800-10*D.wave--800~700~600~500
|
local t=800-10*D.wave--800~700~600~500
|
||||||
if D.wave<10 then
|
if D.wave<10 then
|
||||||
B[p]= {line=generateLine(P:RND(5,6)),amount=9,countdown=t,cd0=t,time=0,sent=false,lv=3}
|
table.insert(P.atkBuffer,{line=generateLine(P.holeRND:random(5,6)),amount=9,countdown=t,cd0=t,time=0,sent=false,lv=3})
|
||||||
B[p+1]= {line=generateLine(P:RND(4,7)),amount=11,countdown=t,cd0=t+62,time=0,sent=false,lv=4}
|
table.insert(P.atkBuffer,{line=generateLine(P.holeRND:random(4,7)),amount=11,countdown=t,cd0=t+62,time=0,sent=false,lv=4})
|
||||||
s=20
|
s=20
|
||||||
elseif D.wave<20 then
|
elseif D.wave<20 then
|
||||||
B[p]= {line=generateLine(P:RND(3,8)),amount=11,countdown=t,cd0=t,time=0,sent=false,lv=4}
|
table.insert(P.atkBuffer,{line=generateLine(P.holeRND:random(3,8)),amount=11,countdown=t,cd0=t,time=0,sent=false,lv=4})
|
||||||
B[p+1]= {line=generateLine(P:RND(4,7)),amount=13,countdown=t,cd0=t+62,time=0,sent=false,lv=5}
|
table.insert(P.atkBuffer,{line=generateLine(P.holeRND:random(4,7)),amount=13,countdown=t,cd0=t+62,time=0,sent=false,lv=5})
|
||||||
s=24
|
s=24
|
||||||
else
|
else
|
||||||
B[p]= {line=generateLine(P:RND(2)*9-8),amount=14,countdown=t,cd0=t,time=0,sent=false,lv=5}
|
table.insert(P.atkBuffer,{line=generateLine(P.holeRND:random(2)*9-8),amount=14,countdown=t,cd0=t,time=0,sent=false,lv=5})
|
||||||
B[p+1]= {line=generateLine(P:RND(3,8)),amount=14,countdown=t+62,cd0=t,time=0,sent=false,lv=5}
|
table.insert(P.atkBuffer,{line=generateLine(P.holeRND:random(3,8)),amount=14,countdown=t+62,cd0=t,time=0,sent=false,lv=5})
|
||||||
s=28
|
s=28
|
||||||
end
|
end
|
||||||
B.sum=B.sum+s
|
P.atkBufferSum=P.atkBufferSum+s
|
||||||
P.stat.recv=P.stat.recv+s
|
P.stat.recv=P.stat.recv+s
|
||||||
D.wave=D.wave+1
|
D.wave=D.wave+1
|
||||||
if D.wave%10==0 then
|
if D.wave%10==0 then
|
||||||
|
|||||||
@@ -5,7 +5,7 @@ return{
|
|||||||
freshLimit=15,
|
freshLimit=15,
|
||||||
dropPiece=function(P)
|
dropPiece=function(P)
|
||||||
if P.lastPiece.atk>0 then
|
if P.lastPiece.atk>0 then
|
||||||
P:receive(nil,P.lastPiece.atk,60,generateLine(P:RND(10)))
|
P:receive(nil,P.lastPiece.atk,60,generateLine(P.holeRND:random(10)))
|
||||||
end
|
end
|
||||||
if P.stat.atk>=100 then
|
if P.stat.atk>=100 then
|
||||||
P:win('finish')
|
P:win('finish')
|
||||||
|
|||||||
@@ -5,7 +5,7 @@ return{
|
|||||||
freshLimit=15,
|
freshLimit=15,
|
||||||
dropPiece=function(P)
|
dropPiece=function(P)
|
||||||
if P.lastPiece.atk>0 then
|
if P.lastPiece.atk>0 then
|
||||||
P:receive(nil,P.lastPiece.atk,30,generateLine(P:RND(10)))
|
P:receive(nil,P.lastPiece.atk,30,generateLine(P.holeRND:random(10)))
|
||||||
end
|
end
|
||||||
if P.stat.atk>=100 then
|
if P.stat.atk>=100 then
|
||||||
P:win('finish')
|
P:win('finish')
|
||||||
|
|||||||
@@ -4,7 +4,7 @@ return{
|
|||||||
drop=30,lock=60,
|
drop=30,lock=60,
|
||||||
dropPiece=function(P)
|
dropPiece=function(P)
|
||||||
if P.lastPiece.atk>0 then
|
if P.lastPiece.atk>0 then
|
||||||
P:receive(nil,P.lastPiece.atk,120,generateLine(P:RND(10)))
|
P:receive(nil,P.lastPiece.atk,120,generateLine(P.holeRND:random(10)))
|
||||||
end
|
end
|
||||||
if P.stat.atk>=100 then
|
if P.stat.atk>=100 then
|
||||||
P:win('finish')
|
P:win('finish')
|
||||||
|
|||||||
@@ -5,7 +5,7 @@ return{
|
|||||||
freshLimit=10,
|
freshLimit=10,
|
||||||
dropPiece=function(P)
|
dropPiece=function(P)
|
||||||
if P.lastPiece.atk>0 then
|
if P.lastPiece.atk>0 then
|
||||||
P:receive(nil,P.lastPiece.atk,0,generateLine(P:RND(10)))
|
P:receive(nil,P.lastPiece.atk,0,generateLine(P.holeRND:random(10)))
|
||||||
end
|
end
|
||||||
if P.stat.atk>=100 then
|
if P.stat.atk>=100 then
|
||||||
P:win('finish')
|
P:win('finish')
|
||||||
|
|||||||
@@ -22,8 +22,11 @@ return{
|
|||||||
setFont(75)
|
setFont(75)
|
||||||
mStr(P.stat.row,69,220)
|
mStr(P.stat.row,69,220)
|
||||||
mStr(P.stat.clears[4],69,340)
|
mStr(P.stat.clears[4],69,340)
|
||||||
gc.setColor(1,1,1,.2)
|
gc.push('transform')
|
||||||
gc.draw(IMG.electric,124,106,0,2.6)
|
PLY.draw.applyFieldOffset(P)
|
||||||
|
gc.setColor(1,1,1,.1)
|
||||||
|
gc.draw(IMG.electric,0,106,0,2.6)
|
||||||
|
gc.pop()
|
||||||
end,
|
end,
|
||||||
score=function(P)return{min(P.stat.row,200),P.stat.time}end,
|
score=function(P)return{min(P.stat.row,200),P.stat.time}end,
|
||||||
scoreDisp=function(D)return D[1].." Lines "..STRING.time(D[2])end,
|
scoreDisp=function(D)return D[1].." Lines "..STRING.time(D[2])end,
|
||||||
|
|||||||
@@ -23,8 +23,11 @@ return{
|
|||||||
setFont(75)
|
setFont(75)
|
||||||
mStr(P.stat.row,69,220)
|
mStr(P.stat.row,69,220)
|
||||||
mStr(P.stat.clears[4],69,340)
|
mStr(P.stat.clears[4],69,340)
|
||||||
gc.setColor(1,1,1,.2)
|
gc.push('transform')
|
||||||
gc.draw(IMG.electric,124,106,0,2.6)
|
PLY.draw.applyFieldOffset(P)
|
||||||
|
gc.setColor(1,1,1,.1)
|
||||||
|
gc.draw(IMG.electric,0,106,0,2.6)
|
||||||
|
gc.pop()
|
||||||
end,
|
end,
|
||||||
score=function(P)return{min(P.stat.row,200),P.stat.time}end,
|
score=function(P)return{min(P.stat.row,200),P.stat.time}end,
|
||||||
scoreDisp=function(D)return D[1].." Lines "..STRING.time(D[2])end,
|
scoreDisp=function(D)return D[1].." Lines "..STRING.time(D[2])end,
|
||||||
|
|||||||
@@ -19,8 +19,11 @@ return{
|
|||||||
setFont(75)
|
setFont(75)
|
||||||
mStr(P.stat.row,69,220)
|
mStr(P.stat.row,69,220)
|
||||||
mStr(P.stat.clears[4],69,340)
|
mStr(P.stat.clears[4],69,340)
|
||||||
gc.setColor(1,1,1,.2)
|
gc.push('transform')
|
||||||
gc.draw(IMG.electric,124,106,0,2.6)
|
PLY.draw.applyFieldOffset(P)
|
||||||
|
gc.setColor(1,1,1,.1)
|
||||||
|
gc.draw(IMG.electric,0,106,0,2.6)
|
||||||
|
gc.pop()
|
||||||
end,
|
end,
|
||||||
score=function(P)return{min(P.stat.row,200),P.stat.time}end,
|
score=function(P)return{min(P.stat.row,200),P.stat.time}end,
|
||||||
scoreDisp=function(D)return D[1].." Lines "..STRING.time(D[2])end,
|
scoreDisp=function(D)return D[1].." Lines "..STRING.time(D[2])end,
|
||||||
|
|||||||
@@ -22,8 +22,11 @@ return{
|
|||||||
setFont(75)
|
setFont(75)
|
||||||
mStr(P.stat.row,69,220)
|
mStr(P.stat.row,69,220)
|
||||||
mStr(P.stat.clears[4],69,340)
|
mStr(P.stat.clears[4],69,340)
|
||||||
gc.setColor(1,1,1,.2)
|
gc.push('transform')
|
||||||
gc.draw(IMG.electric,124,106,0,2.6)
|
PLY.draw.applyFieldOffset(P)
|
||||||
|
gc.setColor(1,1,1,.1)
|
||||||
|
gc.draw(IMG.electric,0,106,0,2.6)
|
||||||
|
gc.pop()
|
||||||
end,
|
end,
|
||||||
score=function(P)return{min(P.stat.row,100),P.stat.time}end,
|
score=function(P)return{min(P.stat.row,100),P.stat.time}end,
|
||||||
scoreDisp=function(D)return D[1].." Lines "..STRING.time(D[2])end,
|
scoreDisp=function(D)return D[1].." Lines "..STRING.time(D[2])end,
|
||||||
|
|||||||
@@ -16,28 +16,26 @@ return{
|
|||||||
load=function()
|
load=function()
|
||||||
PLY.newPlayer(1)
|
PLY.newPlayer(1)
|
||||||
if SETTING.sfx_spawn==0 then
|
if SETTING.sfx_spawn==0 then
|
||||||
LOG.print(text.switchSpawnSFX,COLOR.Y)
|
LOG.print(text.switchSpawnSFX,'warn')
|
||||||
end
|
end
|
||||||
end,
|
end,
|
||||||
mesDisp=function(P)
|
mesDisp=function(P)
|
||||||
if not GAME.result then
|
if not GAME.result then
|
||||||
|
gc.push('transform')
|
||||||
if GAME.replaying then
|
if GAME.replaying then
|
||||||
gc.setColor(.3,.3,.3,.7)
|
|
||||||
gc.push('transform')
|
|
||||||
gc.origin()
|
gc.origin()
|
||||||
|
gc.setColor(.3,.3,.3,.7)
|
||||||
gc.rectangle('fill',0,0,SCR.w,SCR.h)
|
gc.rectangle('fill',0,0,SCR.w,SCR.h)
|
||||||
gc.pop()
|
|
||||||
else
|
else
|
||||||
gc.clear(.26,.26,.26)
|
gc.clear(.2,.2,.2)
|
||||||
--Frame
|
|
||||||
gc.setColor(.5,.5,.5)
|
|
||||||
gc.push('transform')
|
|
||||||
gc.translate(150,0)
|
gc.translate(150,0)
|
||||||
|
gc.setColor(.5,.5,.5)
|
||||||
|
--Frame
|
||||||
gc.rectangle('line',-1,-11,302,612)--Boarder
|
gc.rectangle('line',-1,-11,302,612)--Boarder
|
||||||
gc.rectangle('line',301,-3,15,604)--AtkBuffer boarder
|
gc.rectangle('line',301,-3,15,604)--AtkBuffer boarder
|
||||||
gc.rectangle('line',-16,-3,15,604)--B2b bar boarder
|
gc.rectangle('line',-16,-3,15,604)--B2b bar boarder
|
||||||
gc.pop()
|
|
||||||
end
|
end
|
||||||
|
gc.pop()
|
||||||
end
|
end
|
||||||
|
|
||||||
--Figures
|
--Figures
|
||||||
|
|||||||
@@ -37,18 +37,18 @@ return{
|
|||||||
P.visTime[i]=FREEROW.get(20)
|
P.visTime[i]=FREEROW.get(20)
|
||||||
for x=4,7 do F[i][x]=0 end
|
for x=4,7 do F[i][x]=0 end
|
||||||
end
|
end
|
||||||
if P:RND()<.6 then
|
if P.holeRND:random()<.6 then
|
||||||
local initCell={11,14,12,13,21,24}
|
local initCell={11,14,12,13,21,24}
|
||||||
for _=1,3 do
|
for _=1,3 do
|
||||||
_=rem(initCell,P:RND(#initCell))
|
_=rem(initCell,P.holeRND:random(#initCell))
|
||||||
F[math.floor(_/10)][3+_%10]=20
|
F[math.floor(_/10)][3+_%10]=20
|
||||||
end
|
end
|
||||||
else
|
else
|
||||||
local initCell={11,12,13,14,21,22,23,24}
|
local initCell={11,12,13,14,21,22,23,24}
|
||||||
rem(initCell,P:RND(5,8))
|
rem(initCell,P.holeRND:random(5,8))
|
||||||
rem(initCell,P:RND(1,4))
|
rem(initCell,P.holeRND:random(1,4))
|
||||||
for _=1,6 do
|
for _=1,6 do
|
||||||
_=rem(initCell,P:RND(#initCell))
|
_=rem(initCell,P.holeRND:random(#initCell))
|
||||||
F[math.floor(_/10)][3+_%10]=20
|
F[math.floor(_/10)][3+_%10]=20
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -35,18 +35,18 @@ return{
|
|||||||
P.visTime[i]=FREEROW.get(20)
|
P.visTime[i]=FREEROW.get(20)
|
||||||
for x=4,7 do F[i][x]=0 end
|
for x=4,7 do F[i][x]=0 end
|
||||||
end
|
end
|
||||||
if P:RND()<.6 then
|
if P.holeRND:random()<.6 then
|
||||||
local initCell={11,14,12,13,21,24}
|
local initCell={11,14,12,13,21,24}
|
||||||
for _=1,3 do
|
for _=1,3 do
|
||||||
_=rem(initCell,P:RND(#initCell))
|
_=rem(initCell,P.holeRND:random(#initCell))
|
||||||
F[math.floor(_/10)][3+_%10]=20
|
F[math.floor(_/10)][3+_%10]=20
|
||||||
end
|
end
|
||||||
else
|
else
|
||||||
local initCell={11,12,13,14,21,22,23,24}
|
local initCell={11,12,13,14,21,22,23,24}
|
||||||
rem(initCell,P:RND(5,8))
|
rem(initCell,P.holeRND:random(5,8))
|
||||||
rem(initCell,P:RND(1,4))
|
rem(initCell,P.holeRND:random(1,4))
|
||||||
for _=1,6 do
|
for _=1,6 do
|
||||||
_=rem(initCell,P:RND(#initCell))
|
_=rem(initCell,P.holeRND:random(#initCell))
|
||||||
F[math.floor(_/10)][3+_%10]=20
|
F[math.floor(_/10)][3+_%10]=20
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -31,10 +31,10 @@ local function checkClear(P)
|
|||||||
D.finished=D.finished+1
|
D.finished=D.finished+1
|
||||||
if FIELD[D.finished+1]then
|
if FIELD[D.finished+1]then
|
||||||
P.waiting=26
|
P.waiting=26
|
||||||
for _=#P.field,1,-1 do
|
for i=#P.field,1,-1 do
|
||||||
FREEROW.discard(P.field[_])
|
FREEROW.discard(P.field[i])
|
||||||
FREEROW.discard(P.visTime[_])
|
FREEROW.discard(P.visTime[i])
|
||||||
P.field[_],P.visTime[_]=nil
|
P.field[i],P.visTime[i]=nil
|
||||||
end
|
end
|
||||||
setField(P,D.finished+1)
|
setField(P,D.finished+1)
|
||||||
SYSFX.newShade(1.4,P.absFieldX,P.absFieldY,300*P.size,610*P.size,.6,.8,.6)
|
SYSFX.newShade(1.4,P.absFieldX,P.absFieldY,300*P.size,610*P.size,.6,.8,.6)
|
||||||
@@ -50,24 +50,20 @@ return{
|
|||||||
load=function()
|
load=function()
|
||||||
applyCustomGame()
|
applyCustomGame()
|
||||||
|
|
||||||
local ENV=GAME.modeEnv
|
|
||||||
ENV.dropPiece=PLY.check_lineReach
|
|
||||||
for y=1,20 do
|
for y=1,20 do
|
||||||
if notAir(FIELD[1][y])then
|
if notAir(FIELD[1][y])then
|
||||||
--Switch clear sprint mode on
|
--Switch clear sprint mode on
|
||||||
ENV.dropPiece=checkClear
|
GAME.modeEnv.dropPiece=checkClear
|
||||||
break
|
break
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
PLY.newPlayer(1)
|
PLY.newPlayer(1)
|
||||||
local AItype=ENV.opponent:sub(1,2)
|
local AItype=GAME.modeEnv.opponent:sub(1,2)
|
||||||
local AIlevel=tonumber(ENV.opponent:sub(-1))
|
local AIlevel=tonumber(GAME.modeEnv.opponent:sub(-1))
|
||||||
if AItype=='9S'then
|
if AItype=='9S'then
|
||||||
ENV.target=nil
|
|
||||||
PLY.newAIPlayer(2,AIBUILDER('9S',2*AIlevel))
|
PLY.newAIPlayer(2,AIBUILDER('9S',2*AIlevel))
|
||||||
elseif AItype=='CC'then
|
elseif AItype=='CC'then
|
||||||
ENV.target=nil
|
|
||||||
PLY.newAIPlayer(2,AIBUILDER('CC',2*AIlevel-1,math.floor(AIlevel*.5+1),true,20000+5000*AIlevel))
|
PLY.newAIPlayer(2,AIBUILDER('CC',2*AIlevel-1,math.floor(AIlevel*.5+1),true,20000+5000*AIlevel))
|
||||||
end
|
end
|
||||||
|
|
||||||
@@ -77,12 +73,7 @@ return{
|
|||||||
end,
|
end,
|
||||||
mesDisp=function(P)
|
mesDisp=function(P)
|
||||||
setFont(55)
|
setFont(55)
|
||||||
if P.modeData.target>1e10 then
|
|
||||||
mStr(P.stat.row,69,225)
|
mStr(P.stat.row,69,225)
|
||||||
mText(drawableText.line,69,290)
|
mText(drawableText.line,69,290)
|
||||||
else
|
|
||||||
local R=P.modeData.target-P.stat.row
|
|
||||||
mStr(R>=0 and R or 0,69,240)
|
|
||||||
end
|
|
||||||
end,
|
end,
|
||||||
}
|
}
|
||||||
@@ -39,10 +39,9 @@ return{
|
|||||||
},
|
},
|
||||||
load=function()
|
load=function()
|
||||||
applyCustomGame()
|
applyCustomGame()
|
||||||
|
local AItype=GAME.modeEnv.opponent:sub(1,2)
|
||||||
|
local AIlevel=tonumber(GAME.modeEnv.opponent:sub(-1))
|
||||||
PLY.newPlayer(1)
|
PLY.newPlayer(1)
|
||||||
local ENV=GAME.modeEnv
|
|
||||||
local AItype=ENV.opponent:sub(1,2)
|
|
||||||
local AIlevel=tonumber(ENV.opponent:sub(-1))
|
|
||||||
if AItype=='9S'then
|
if AItype=='9S'then
|
||||||
PLY.newAIPlayer(2,AIBUILDER('9S',2*AIlevel))
|
PLY.newAIPlayer(2,AIBUILDER('9S',2*AIlevel))
|
||||||
elseif AItype=='CC'then
|
elseif AItype=='CC'then
|
||||||
|
|||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user