This is to resolve an issue with my LOCAL repository.
If this seems to affect the REMOTE repository please let me know.
This commit is contained in:
user670
2021-05-02 00:55:42 +08:00
226 changed files with 3812 additions and 3503 deletions

View File

@@ -1,7 +1,7 @@
local printf=love.graphics.printf local printf=love.graphics.printf
local draw=love.graphics.draw local draw=love.graphics.draw
local aDraw={} local aDraw={}
function aDraw.str(obj,x,y)printf(obj,x-626,y,1252,"center")end function aDraw.str(obj,x,y)printf(obj,x-626,y,1252,'center')end
function aDraw.simpX(obj,x,y)draw(obj,x-obj:getWidth()*.5,y)end function aDraw.simpX(obj,x,y)draw(obj,x-obj:getWidth()*.5,y)end
function aDraw.simpY(obj,x,y)draw(obj,x,y-obj:getHeight()*.5)end 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

View File

@@ -46,7 +46,7 @@ function BGM.init(list)
for i=1,count do for i=1,count do
local file="media/BGM/"..list[i]..".ogg" local file="media/BGM/"..list[i]..".ogg"
if love.filesystem.getInfo(file)then if love.filesystem.getInfo(file)then
Sources[list[i]]=love.audio.newSource(file,"stream") Sources[list[i]]=love.audio.newSource(file,'stream')
Sources[list[i]]:setLooping(true) Sources[list[i]]:setLooping(true)
Sources[list[i]]:setVolume(0) Sources[list[i]]:setVolume(0)
else else

View File

@@ -1,9 +1,9 @@
local gc=love.graphics local gc=love.graphics
local cmds={ local cmds={
reset="origin", origin="origin",
trans="translate", move="translate",
scale="scale", scale="scale",
rotat="rotate", rotate="rotate",
clear="clear", clear="clear",
setCL="setColor", setCL="setColor",
@@ -12,23 +12,26 @@ local cmds={
setLS="setLineStyle", setLS="setLineStyle",
setLJ="setLineJoin", setLJ="setLineJoin",
draw="draw", setFT=setFont,
dLine="line", print="print",
fRect=function(...)gc.rectangle("fill",...)end, mText=function(...)ADRAW.str(...)end,
dRect=function(...)gc.rectangle("line",...)end, mDraw=function(...)ADRAW.draw(...)end,
fCirc=function(...)gc.circle("fill",...)end,
dCirc=function(...)gc.circle("line",...)end,
fPoly=function(...)gc.polygon("fill",...)end,
dPoly=function(...)gc.polygon("line",...)end,
drArc=function(...)gc.arc("line",...)end, draw="draw",
flArc=function(...)gc.arc("fill",...)end, line="line",
dpArc=function(...)gc.arc("line","pie",...)end, fRect=function(...)gc.rectangle('fill',...)end,
doArc=function(...)gc.arc("line","open",...)end, dRect=function(...)gc.rectangle('line',...)end,
dcArc=function(...)gc.arc("line","closed",...)end, fCirc=function(...)gc.circle('fill',...)end,
fpArc=function(...)gc.arc("fill","pie",...)end, dCirc=function(...)gc.circle('line',...)end,
foArc=function(...)gc.arc("fill","open",...)end, fPoly=function(...)gc.polygon('fill',...)end,
fcArc=function(...)gc.arc("fill","closed",...)end, dPoly=function(...)gc.polygon('line',...)end,
dPie=function(...)gc.arc('line',...)end,
dArc=function(...)gc.arc('line','open',...)end,
dBow=function(...)gc.arc('line','closed',...)end,
fPie=function(...)gc.arc('fill',...)end,
fArc=function(...)gc.arc('fill','open',...)end,
fBow=function(...)gc.arc('fill','closed',...)end,
} }
return function(L) return function(L)
gc.push() gc.push()
@@ -38,11 +41,19 @@ return function(L)
gc.setColor(1,1,1) gc.setColor(1,1,1)
gc.setLineWidth(1) gc.setLineWidth(1)
for i=3,#L do for i=3,#L do
local cmd=cmds[L[i][1]] local cmd=L[i][1]
if type(cmd)=="string"then if type(cmd)=='boolean'and cmd then
gc[cmd](unpack(L[i],2)) table.remove(L[i],1)
else cmd=L[i][1]
cmd(unpack(L[i],2)) end
if type(cmd)=='string'then
local func=cmds[cmd]
if type(func)=='string'then func=gc[func]end
if func then
func(unpack(L[i],2))
else
error("No gc command: "..cmd)
end
end end
end end
gc.setCanvas() gc.setCanvas()

View File

@@ -14,34 +14,34 @@ return function(L,t)
else else
s="return{\n" s="return{\n"
t=1 t=1
if type(L)~="table"then if type(L)~='table'then
return return
end end
end end
local count=1 local count=1
for k,v in next,L do for k,v in next,L do
local T=type(k) local T=type(k)
if T=="number"then if T=='number'then
if k==count then if k==count then
k="" k=""
count=count+1 count=count+1
else else
k="["..k.."]=" k="["..k.."]="
end end
elseif T=="string"then elseif T=='string'then
if find(k,"[^0-9a-zA-Z_]")then if find(k,"[^0-9a-zA-Z_]")then
k="[\""..k.."\"]=" k="[\""..k.."\"]="
else else
k=k.."=" k=k.."="
end end
elseif T=="boolean"then k="["..k.."]=" elseif T=='boolean'then k="["..k.."]="
else error("Error key type!") else error("Error key type!")
end end
T=type(v) T=type(v)
if T=="number"then v=tostring(v) if T=='number'then v=tostring(v)
elseif T=="string"then v="\""..v.."\"" elseif T=='string'then v="\""..v.."\""
elseif T=="table"then v=TABLE.dump(v,t+1) elseif T=='table'then v=TABLE.dump(v,t+1)
elseif T=="boolean"then v=tostring(v) elseif T=='boolean'then v=tostring(v)
else error("Error data type!") else error("Error data type!")
end end
s=s..tabs[t]..k..v..",\n" s=s..tabs[t]..k..v..",\n"

View File

@@ -3,7 +3,7 @@ local FILE={}
function FILE.load(name) function FILE.load(name)
if fs.getInfo(name)then if fs.getInfo(name)then
local F=fs.newFile(name) local F=fs.newFile(name)
if F:open("r")then if F:open'r'then
local s=F:read() local s=F:read()
F:close() F:close()
if s:sub(1,6)=="return"then if s:sub(1,6)=="return"then
@@ -26,17 +26,17 @@ function FILE.load(name)
end end
function FILE.save(data,name,mode) function FILE.save(data,name,mode)
if not mode then mode=""end if not mode then mode=""end
if type(data)=="table"then if type(data)=='table'then
if mode:find("l")then if mode:find'l'then
data=TABLE.dump(data) data=TABLE.dump(data)
if not data then if not data then
LOG.print(name.." "..text.saveError.."dump error","error") LOG.print(name.." "..text.saveError.."dump error",'error')
return return
end end
else else
data=JSON.encode(data) data=JSON.encode(data)
if not data then if not data then
LOG.print(name.." "..text.saveError.."json error","error") LOG.print(name.." "..text.saveError.."json error",'error')
return return
end end
end end
@@ -45,16 +45,16 @@ function FILE.save(data,name,mode)
end end
local F=fs.newFile(name) local F=fs.newFile(name)
F:open("w") F:open'w'
local success,mes=F:write(data) local success,mes=F:write(data)
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,COLOR.G)
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
return FILE return FILE

View File

@@ -12,7 +12,7 @@ function IMG.init(list)
local function load(skip) local function load(skip)
local loaded=0 local loaded=0
for k,v in next,list do for k,v in next,list do
if type(v)=="string"then if type(v)=='string'then
IMG[k]=love.graphics.newImage("media/image/"..v) IMG[k]=love.graphics.newImage("media/image/"..v)
else else
for i=1,#v do for i=1,#v do

View File

@@ -1,3 +1,8 @@
NONE={}function NULL()end
EDITING=""
LOADED=false
ERRDATA={}
SCR= require"Zframework.screen" SCR= require"Zframework.screen"
COLOR= require"Zframework.color" COLOR= require"Zframework.color"
SCN= require"Zframework.scene" SCN= require"Zframework.scene"
@@ -61,12 +66,12 @@ local devMode
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_push('transform')gc.origin()
gc.clear(0,0,0,.25) 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)
@@ -77,7 +82,7 @@ local function updatePowerInfo()
elseif pow<26 then gc_setColor(1,0,0) elseif pow<26 then gc_setColor(1,0,0)
else gc_setColor(.5,0,1) else gc_setColor(.5,0,1)
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)
@@ -110,14 +115,8 @@ function love.mousepressed(x,y,k,touch)
)) ))
end end
if SCN.swapping then return end if SCN.swapping then return end
if SCN.mouseDown then if SCN.mouseDown then SCN.mouseDown(mx,my,k)end
SCN.mouseDown(mx,my,k) WIDGET.press(mx,my,k)
elseif k==2 then
SCN.back()
end
if k==1 then
WIDGET.press(mx,my)
end
lastX,lastY=mx,my lastX,lastY=mx,my
if SETTING.clickFX then SYSFX.newTap(3,mx,my,30)end if SETTING.clickFX then SYSFX.newTap(3,mx,my,30)end
end end
@@ -128,7 +127,7 @@ function love.mousemoved(x,y,dx,dy,touch)
if SCN.swapping then return end if SCN.swapping then return end
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,dy)
else else
WIDGET.cursorMove(mx,my) WIDGET.cursorMove(mx,my)
@@ -179,7 +178,7 @@ function love.touchreleased(id,x,y)
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 id==touching then if id==touching then
WIDGET.press(x,y) WIDGET.press(x,y,1)
WIDGET.release(x,y) WIDGET.release(x,y)
touching=false touching=false
if WIDGET.sel and not WIDGET.sel.keepFocus then if WIDGET.sel and not WIDGET.sel.keepFocus then
@@ -197,7 +196,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(string.format("System:%s[%s]\nluaVer:%s\njitVer:%s\njitVerNum:%s",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))
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)]
@@ -282,12 +281,12 @@ function love.joystickremoved(JS)
end end
end end
local keyMirror={ local keyMirror={
dpup="up", dpup='up',
dpdown="down", dpdown='down',
dpleft="left", dpleft='left',
dpright="right", dpright='right',
start="return", start='return',
back="escape", back='escape',
} }
function love.gamepadpressed(_,i) function love.gamepadpressed(_,i)
mouseShow=false mouseShow=false
@@ -331,7 +330,7 @@ function love.lowmemory()
if TIME()-lastGCtime>6.26 then if TIME()-lastGCtime>6.26 then
collectgarbage() collectgarbage()
lastGCtime=TIME() lastGCtime=TIME()
LOG.print("[auto GC] low MEM 设备内存过低","warn") LOG.print("[auto GC] low MEM 设备内存过低",'warn')
end end
end end
function love.resize(w,h) function love.resize(w,h)
@@ -344,7 +343,7 @@ end
function love.focus(f) function love.focus(f)
if f then if f then
love.timer.step() love.timer.step()
elseif SCN.cur=="game"and SETTING.autoPause then elseif SCN.cur=='game'and SETTING.autoPause then
pauseGame() pauseGame()
end end
end end
@@ -378,7 +377,7 @@ function love.errorhandler(msg)
gc.reset() gc.reset()
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} ERRDATA[#ERRDATA+1]={mes=err,scene=scn}
@@ -399,7 +398,7 @@ function love.errorhandler(msg)
local res,threadErr local res,threadErr
repeat repeat
res,threadErr=resume(loopThread) res,threadErr=resume(loopThread)
until status(loopThread)=="dead" until status(loopThread)=='dead'
if not res then if not res then
love.errorhandler(threadErr) love.errorhandler(threadErr)
return return
@@ -414,15 +413,15 @@ function love.errorhandler(msg)
while true do while true do
love.event.pump() love.event.pump()
for E,a,b in love.event.poll()do for E,a,b in love.event.poll()do
if E=="quit"or a=="escape"then if E=='quit'or a=='escape'then
destroyPlayers() destroyPlayers()
return true return true
elseif E=="resize"then elseif E=='resize'then
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(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)
@@ -440,7 +439,7 @@ function love.errorhandler(msg)
end end
end end
local WS=WS local WS=WS
local WSnames={"app","user","play","stream","chat"} local WSnames={'app','user','play','stream','chat'}
local WScolor={ local WScolor={
{1,.5,.5,.7}, {1,.5,.5,.7},
{1,.8,.3,.7}, {1,.8,.3,.7},
@@ -480,8 +479,8 @@ function love.run()
--Scene Launch --Scene Launch
while #SCN.stack>0 do SCN.pop()end while #SCN.stack>0 do SCN.pop()end
SCN.push("quit","slowFade") SCN.push('quit','slowFade')
SCN.init(#ERRDATA==0 and"load"or"error") SCN.init(#ERRDATA==0 and'load'or'error')
return function() return function()
local _ local _
@@ -495,7 +494,7 @@ function love.run()
for N,a,b,c,d,e in POLL()do for N,a,b,c,d,e in POLL()do
if love[N]then if love[N]then
love[N](a,b,c,d,e) love[N](a,b,c,d,e)
elseif N=="quit"then elseif N=='quit'then
destroyPlayers() destroyPlayers()
return a or true return a or true
end end
@@ -523,7 +522,7 @@ function love.run()
--Draw background --Draw background
BG.draw() BG.draw()
gc_push("transform") gc_push('transform')
gc.replaceTransform(xOy) gc.replaceTransform(xOy)
--Draw scene contents --Draw scene contents
@@ -540,7 +539,7 @@ function love.run()
_=SCS[R][0] _=SCS[R][0]
gc_draw(TEXTURE.miniBlock[R],mx,my,t%3.14159265359*4,16,16,_[2]+.5,#BLOCKS[R][0]-_[1]-.5) gc_draw(TEXTURE.miniBlock[R],mx,my,t%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(TEXTURE[ms.isDown(1)and'cursor_hold'or'cursor'],mx,my,nil,nil,nil,8,8)
end end
SYSFX.draw() SYSFX.draw()
TEXT.draw() TEXT.draw()
@@ -578,31 +577,31 @@ function love.run()
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
--Websocket status --Websocket status
gc_push("transform") gc_push('transform')
gc.translate(SCR.w,SCR.h-100) gc.translate(SCR.w,SCR.h-100)
gc.scale(SCR.k) gc.scale(SCR.k)
for i=1,5 do for i=1,5 do
local status=WS.status(WSnames[i]) local status=WS.status(WSnames[i])
gc_setColor(WScolor[i]) gc_setColor(WScolor[i])
gc_rectangle("fill",0,20*i,-80,-20) gc_rectangle('fill',0,20*i,-80,-20)
if status=="dead"then 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(TEXTURE.ws_dead,-20,20*i-20)
elseif status=="connecting"then elseif status=='connecting'then
gc_setColor(1,1,1,.5+.3*sin(t*6.26)) gc_setColor(1,1,1,.5+.3*sin(t*6.26))
gc_draw(TEXTURE.ws_connecting,-20,20*i-20) gc_draw(TEXTURE.ws_connecting,-20,20*i-20)
elseif status=="running"then elseif status=='running'then
gc_setColor(1,1,1) gc_setColor(1,1,1)
gc_draw(TEXTURE.ws_running,-20,20*i-20) 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,-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,-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,-20,-20)
end end
gc_pop() gc_pop()

View File

@@ -63,7 +63,7 @@ local function encode_table(val, stack)
-- Treat as array -- check keys are valid and it is not sparse -- Treat as array -- check keys are valid and it is not sparse
local n = 0 local n = 0
for k in pairs(val) do for k in pairs(val) do
if type(k) ~= "number" then if type(k) ~= 'number' then
error("invalid table: mixed or invalid key types") error("invalid table: mixed or invalid key types")
end end
n = n + 1 n = n + 1
@@ -77,7 +77,7 @@ local function encode_table(val, stack)
else else
-- Treat as an object -- Treat as an object
for k, v in pairs(val) do for k, v in pairs(val) do
if type(k) ~= "string" then if type(k) ~= 'string' then
error("invalid table: mixed or invalid key types") error("invalid table: mixed or invalid key types")
end end
ins(res, encode(k, stack) .. ":" .. encode(v, stack)) ins(res, encode(k, stack) .. ":" .. encode(v, stack))
@@ -100,11 +100,11 @@ local function encode_number(val)
end end
local type_func_map = { local type_func_map = {
["nil"] = encode_nil, ['nil'] = encode_nil,
["table"] = encode_table, ['table'] = encode_table,
["string"] = encode_string, ['string'] = encode_string,
["number"] = encode_number, ['number'] = encode_number,
["boolean"] = tostring ['boolean'] = tostring
} }
encode = function(val, stack) encode = function(val, stack)
@@ -119,7 +119,7 @@ function json.encode(val)
if a then if a then
return b return b
elseif LOG then elseif LOG then
LOG.print(text.jsonError..": "..(b or"uknErr"),"warn") LOG.print(text.jsonError..": "..(b or"uknErr"),'warn')
end end
end end
@@ -336,7 +336,7 @@ function parse(str, idx)
end end
local function decode(str) local function decode(str)
if type(str) ~= "string" then if type(str) ~= 'string' then
error("expected argument of type string, got " .. type(str)) error("expected argument of type string, got " .. type(str))
end end
local res, idx = parse(str, next_char(str, 1, space_chars, true)) local res, idx = parse(str, next_char(str, 1, space_chars, true))
@@ -349,7 +349,7 @@ function json.decode(str)
if a then if a then
return b return b
elseif LOG then elseif LOG then
LOG.print(text.jsonError..": "..(b or"uknErr"),"warn") LOG.print(text.jsonError..": "..(b or"uknErr"),'warn')
end end
end end
return json return json

View File

@@ -2,9 +2,9 @@ local LANG={}
function LANG.init(langList,publicText)--Attention, calling this will destory all initializing methods, create a LANG.set()! function LANG.init(langList,publicText)--Attention, calling this will destory all initializing methods, create a LANG.set()!
local function langFallback(T0,T) local function langFallback(T0,T)
for k,v in next,T0 do for k,v in next,T0 do
if type(v)=="table"and not v.refuseCopy then--refuseCopy: just copy pointer, not contents if type(v)=='table'and not v.refuseCopy then--refuseCopy: just copy pointer, not contents
if not T[k]then T[k]={}end if not T[k]then T[k]={}end
if type(T[k])=="table"then langFallback(v,T[k])end if type(T[k])=='table'then langFallback(v,T[k])end
elseif not T[k]then elseif not T[k]then
T[k]=v T[k]=v
end end
@@ -26,7 +26,7 @@ function LANG.init(langList,publicText)--Attention, calling this will destory al
end end
--Metatable:__call for table:getTip --Metatable:__call for table:getTip
if type(rawget(L,"getTip"))=="table"then if type(rawget(L,"getTip"))=='table'then
setmetatable(L.getTip,tipMeta) setmetatable(L.getTip,tipMeta)
end end

View File

@@ -49,14 +49,14 @@ local function draw(L)
render(L.shadowCanvas,0,0,0,1,L.size) render(L.shadowCanvas,0,0,0,1,L.size)
--Ready to final render --Ready to final render
setShader()setCanvas()gc.setBlendMode("add") setShader()setCanvas()gc.setBlendMode('add')
--Render to screes --Render to screes
gc.setColor(r,g,b,a) gc.setColor(r,g,b,a)
render(L.renderCanvas,X,Y+L.size,0,1,-1) render(L.renderCanvas,X,Y+L.size,0,1,-1)
--Reset --Reset
gc.setBlendMode("alpha") gc.setBlendMode('alpha')
end end
local LIGHT={} local LIGHT={}

View File

@@ -4,7 +4,7 @@ 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',COLOR.R)
end end
elseif SYSTEM=="Android"then elseif SYSTEM=="Android"then
local fs=love.filesystem local fs=love.filesystem
@@ -12,35 +12,35 @@ return function(name,libName)
local libFunc=package.loadlib(SAVEDIR.."/lib/"..libName.Android,libName.libFunc) local libFunc=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",'warn',COLOR.G)
else else
for i=1,#platform do for i=1,#platform do
local soFile=fs.read("data","libAndroid/"..platform[i].."/"..libName.Android) local soFile=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,message=fs.write("lib/"..libName.Android,soFile)
if success then if success then
libFunc,message=package.loadlib(SAVEDIR.."/lib/"..libName.Android,libName.libFunc) libFunc,message=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",'warn',COLOR.G)
break break
else else
LOG.print("Cannot load "..name..": "..message,"warn",COLOR.R) LOG.print("Cannot load "..name..": "..message,'warn',COLOR.R)
end end
else else
LOG.print("Write "..name.."-"..platform[i].." to saving failed: "..message,"warn",COLOR.R) LOG.print("Write "..name.."-"..platform[i].." to saving failed: "..message,'warn',COLOR.R)
end end
else else
LOG.print("Read "..name.."-"..platform[i].." failed","warn",COLOR.R) LOG.print("Read "..name.."-"..platform[i].." failed",'warn',COLOR.R)
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,'warn',COLOR.R)
return return
end end
end end
return libFunc() return libFunc()
else else
LOG.print("No "..name.." for "..SYSTEM,"warn",COLOR.R) LOG.print("No "..name.." for "..SYSTEM,'warn',COLOR.R)
return return
end end
return true return true

View File

@@ -38,21 +38,21 @@ end
function LOG.print(text,T,C)--text,type/time,color function LOG.print(text,T,C)--text,type/time,color
local time local time
local his local his
if T=="warn"then if T=='warn'then
C=C or COLOR.Y C=C or COLOR.Y
his=true his=true
time=180 time=180
elseif T=="error"then elseif T=='error'then
C=C or COLOR.R C=C or COLOR.R
his=true his=true
time=210 time=210
elseif T=="message"then elseif T=='message'then
C=C or COLOR.N C=C or COLOR.N
his=true his=true
elseif type(T)=="number"then elseif type(T)=='number'then
C=C or COLOR.Z C=C or COLOR.Z
time=T time=T
elseif type(T)=="table"then elseif type(T)=='table'then
C=T C=T
elseif not C then elseif not C then
C=COLOR.Z C=COLOR.Z

View File

@@ -11,7 +11,7 @@ local _internal={}-- list of internal profiler functions
local getInfo=debug.getinfo local getInfo=debug.getinfo
function profile.hooker(event,line,info) function profile.hooker(event,line,info)
info=info or getInfo(2,"fnS") info=info or getInfo(2,'fnS')
local f=info.func local f=info.func
if _internal[f]then return end-- ignore the profiler itself if _internal[f]then return end-- ignore the profiler itself
if info.name then _labeled[f]=info.name end-- get the function name if available if info.name then _labeled[f]=info.name end-- get the function name if available
@@ -27,10 +27,10 @@ function profile.hooker(event,line,info)
_tcalled[f]=nil _tcalled[f]=nil
end end
if event=="tail call"then if event=="tail call"then
local prev=getInfo(3,"fnS") local prev=getInfo(3,'fnS')
profile.hooker("return",line,prev) profile.hooker('return',line,prev)
profile.hooker("call",line,info) profile.hooker('call',line,info)
elseif event=="call"then elseif event=='call'then
_tcalled[f]=clock() _tcalled[f]=clock()
else else
_ncalls[f]=_ncalls[f]+1 _ncalls[f]=_ncalls[f]+1
@@ -43,7 +43,7 @@ function profile.start()
jit.off() jit.off()
jit.flush() jit.flush()
end end
debug.sethook(profile.hooker,"cr") debug.sethook(profile.hooker,'cr')
end end
--- Stops collecting data. --- Stops collecting data.
@@ -68,7 +68,7 @@ function profile.stop()
lookup[id]=f lookup[id]=f
end end
end end
collectgarbage("collect") collectgarbage()
end end
--- Resets all collected data. --- Resets all collected data.
@@ -78,7 +78,7 @@ function profile.reset()
_telapsed[f]=0 _telapsed[f]=0
_tcalled[f]=nil _tcalled[f]=nil
end end
collectgarbage("collect") collectgarbage()
end end
local function _comp(a,b) local function _comp(a,b)
@@ -132,7 +132,7 @@ function profile.report(n)
if #out>0 then if #out>0 then
sz=sz.." | "..table.concat(out," | \n | ").." | \n" sz=sz.." | "..table.concat(out," | \n | ").." | \n"
end end
return"\n"..sz..row return "\n"..sz..row
end end
local switch=false local switch=false
@@ -151,7 +151,7 @@ end
-- store all internal profiler functions -- store all internal profiler functions
for _,v in next,profile do for _,v in next,profile do
_internal[v]=type(v)=="function" _internal[v]=type(v)=='function'
end end
return profile return profile

View File

@@ -85,7 +85,7 @@ function SCN.push(tar,style)
if not SCN.swapping then if not SCN.swapping then
local m=#SCN.stack local m=#SCN.stack
SCN.stack[m+1]=tar or SCN.cur SCN.stack[m+1]=tar or SCN.cur
SCN.stack[m+2]=style or"fade" SCN.stack[m+2]=style or'fade'
end end
end end
function SCN.pop() function SCN.pop()
@@ -94,46 +94,46 @@ function SCN.pop()
end end
local swap={ local swap={
none={1,0,NULL},--swapTime, changeTime, drawFunction none={1,0,function()end},--swapTime, changeTime, drawFunction
flash={8,1,function()gc.clear(1,1,1)end}, flash={8,1,function()gc.clear(1,1,1)end},
fade={30,15,function(t) fade={30,15,function(t)
t=t>15 and 2-t/15 or t/15 t=t>15 and 2-t/15 or t/15
gc.setColor(0,0,0,t) gc.setColor(0,0,0,t)
gc.rectangle("fill",0,0,SCR.w,SCR.h) gc.rectangle('fill',0,0,SCR.w,SCR.h)
end}, end},
fade_togame={120,20,function(t) fade_togame={120,20,function(t)
t=t>20 and(120-t)/100 or t/20 t=t>20 and(120-t)/100 or t/20
gc.setColor(0,0,0,t) gc.setColor(0,0,0,t)
gc.rectangle("fill",0,0,SCR.w,SCR.h) gc.rectangle('fill',0,0,SCR.w,SCR.h)
end}, end},
slowFade={180,90,function(t) slowFade={180,90,function(t)
t=t>90 and 2-t/90 or t/90 t=t>90 and 2-t/90 or t/90
gc.setColor(0,0,0,t) gc.setColor(0,0,0,t)
gc.rectangle("fill",0,0,SCR.w,SCR.h) gc.rectangle('fill',0,0,SCR.w,SCR.h)
end}, end},
swipeL={30,15,function(t) swipeL={30,15,function(t)
t=t/30 t=t/30
gc.setColor(.1,.1,.1,1-abs(t-.5)) gc.setColor(.1,.1,.1,1-abs(t-.5))
t=t*t*(3-2*t)*2-1 t=t*t*(3-2*t)*2-1
gc.rectangle("fill",t*SCR.w,0,SCR.w,SCR.h) gc.rectangle('fill',t*SCR.w,0,SCR.w,SCR.h)
end}, end},
swipeR={30,15,function(t) swipeR={30,15,function(t)
t=t/30 t=t/30
gc.setColor(.1,.1,.1,1-abs(t-.5)) gc.setColor(.1,.1,.1,1-abs(t-.5))
t=t*t*(2*t-3)*2+1 t=t*t*(2*t-3)*2+1
gc.rectangle("fill",t*SCR.w,0,SCR.w,SCR.h) gc.rectangle('fill',t*SCR.w,0,SCR.w,SCR.h)
end}, end},
swipeD={30,15,function(t) swipeD={30,15,function(t)
t=t/30 t=t/30
gc.setColor(.1,.1,.1,1-abs(t-.5)) gc.setColor(.1,.1,.1,1-abs(t-.5))
t=t*t*(2*t-3)*2+1 t=t*t*(2*t-3)*2+1
gc.rectangle("fill",0,t*SCR.h,SCR.w,SCR.h) gc.rectangle('fill',0,t*SCR.h,SCR.w,SCR.h)
end}, end},
}--Scene swapping animations }--Scene swapping animations
function SCN.swapTo(tar,style)--Parallel scene swapping, cannot back function SCN.swapTo(tar,style)--Parallel scene swapping, cannot back
if scenes[tar]then if scenes[tar]then
if not SCN.swapping and tar~=SCN.cur then if not SCN.swapping and tar~=SCN.cur then
if not style then style="fade"end if not style then style='fade'end
SCN.swapping=true SCN.swapping=true
local S=SCN.stat local S=SCN.stat
S.tar,S.style=tar,style S.tar,S.style=tar,style
@@ -141,7 +141,7 @@ function SCN.swapTo(tar,style)--Parallel scene swapping, cannot back
S.time,S.mid,S.draw=s[1],s[2],s[3] S.time,S.mid,S.draw=s[1],s[2],s[3]
end end
else else
LOG.print("No Scene: "..tar,"warn") LOG.print("No Scene: "..tar,'warn')
end end
end end
function SCN.go(tar,style)--Normal scene swapping, can back function SCN.go(tar,style)--Normal scene swapping, can back
@@ -149,7 +149,7 @@ function SCN.go(tar,style)--Normal scene swapping, can back
SCN.push() SCN.push()
SCN.swapTo(tar,style) SCN.swapTo(tar,style)
else else
LOG.print("No Scene: "..tar,"warn") LOG.print("No Scene: "..tar,'warn')
end end
end end
function SCN.back() function SCN.back()

View File

@@ -15,7 +15,7 @@ function SFX.init(list)
for i=1,count do for i=1,count do
local N="media/SFX/"..list[i]..".ogg" local N="media/SFX/"..list[i]..".ogg"
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,COLOR.O)
end end
@@ -76,7 +76,7 @@ function SFX.init(list)
end end
function SFX.reset() function SFX.reset()
for _,L in next,Sources do for _,L in next,Sources do
if type(L)=="table"then if type(L)=='table'then
for i=#L,1,-1 do for i=#L,1,-1 do
if not L[i]:isPlaying()then if not L[i]:isPlaying()then
rem(L,i) rem(L,i)

View File

@@ -75,32 +75,32 @@ function FXdraw.tap(S)
local t=S.t local t=S.t
setWidth(2) setWidth(2)
setColor(1,1,1,1-t) setColor(1,1,1,1-t)
gc.circle("line",S.x,S.y,t*(2-t)*30) gc.circle('line',S.x,S.y,t*(2-t)*30)
setColor(1,1,1,(1-t)*.5) setColor(1,1,1,(1-t)*.5)
gc.circle("fill",S.x,S.y,t*30) gc.circle('fill',S.x,S.y,t*30)
setColor(1,1,1,1-t) setColor(1,1,1,1-t)
for i=1,10 do for i=1,10 do
local p=S.ptc[i] local p=S.ptc[i]
local T=t^.5 local T=t^.5
gc.rectangle("fill",p[1]*(1-T)+p[3]*T-5,p[2]*(1-T)+p[4]*T-5,11,11) gc.rectangle('fill',p[1]*(1-T)+p[3]*T-5,p[2]*(1-T)+p[4]*T-5,11,11)
end end
end end
function FXdraw.ripple(S) function FXdraw.ripple(S)
local t=S.t local t=S.t
setWidth(2) setWidth(2)
setColor(1,1,1,1-t) setColor(1,1,1,1-t)
gc.circle("line",S.x,S.y,t*(2-t)*S.r) gc.circle('line',S.x,S.y,t*(2-t)*S.r)
end end
function FXdraw.rectRipple(S) function FXdraw.rectRipple(S)
setWidth(6) setWidth(6)
setColor(1,1,1,1-S.t) setColor(1,1,1,1-S.t)
local r=(10*S.t)^1.2 local r=(10*S.t)^1.2
gc.rectangle("line",S.x-r,S.y-r,S.w+2*r,S.h+2*r) gc.rectangle('line',S.x-r,S.y-r,S.w+2*r,S.h+2*r)
end end
function FXdraw.shade(S) function FXdraw.shade(S)
setColor(S.r,S.g,S.b,1-S.t) setColor(S.r,S.g,S.b,1-S.t)
gc.rectangle("fill",S.x,S.y,S.w,S.h,2) gc.rectangle('fill',S.x,S.y,S.w,S.h,2)
end end
function FXdraw.cell(S) function FXdraw.cell(S)
setColor(1,1,1,1-S.t) setColor(1,1,1,1-S.t)
@@ -114,7 +114,7 @@ end
local SYSFX={} local SYSFX={}
function SYSFX.update(dt) function SYSFX.update(dt)
for i=#fx,1,-1 do for i=#fx,1,-1 do
if fx[i]:update(dt) then if fx[i]:update(dt)then
rem(fx,i) rem(fx,i)
end end
end end

View File

@@ -1,11 +1,11 @@
local next,type=next,type local next,type=next,type
local TABLE={} local TABLE={}
--Copy [1~#] elements --Get a copy of [1~#] elements
function TABLE.shift(org) function TABLE.shift(org)
local L={} local L={}
for i=1,#org do for i=1,#org do
if type(org[i])~="table"then if type(org[i])~='table'then
L[i]=org[i] L[i]=org[i]
else else
L[i]=TABLE.shift(org[i]) L[i]=TABLE.shift(org[i])
@@ -14,11 +14,11 @@ function TABLE.shift(org)
return L return L
end end
--Copy all elements --Get a full copy of a table
function TABLE.copy(org) function TABLE.copy(org)
local L={} local L={}
for k,v in next,org do for k,v in next,org do
if type(v)~="table"then if type(v)~='table'then
L[k]=v L[k]=v
else else
L[k]=TABLE.copy(v) L[k]=TABLE.copy(v)
@@ -28,25 +28,25 @@ function TABLE.copy(org)
end end
--For all things in G if same type in base, push to base --For all things in G if same type in base, push to base
function TABLE.update(G,base) function TABLE.update(new,old)
for k,v in next,G do for k,v in next,new do
if type(v)==type(base[k])then if type(v)==type(old[k])then
if type(v)=="table"then if type(v)=='table'then
TABLE.update(v,base[k]) TABLE.update(v,old[k])
else else
base[k]=v old[k]=v
end end
end end
end end
end end
--For all things in G if no val in base, push to base --For all things in G if no val in base, push to base
function TABLE.complete(G,base) function TABLE.complete(new,old)
for k,v in next,G do for k,v in next,new do
if base[k]==nil then if old[k]==nil then
base[k]=v old[k]=v
elseif type(v)=="table"and type(base[k])=="table"then elseif type(v)=='table'and type(old[k])=='table'then
TABLE.complete(v,base[k]) TABLE.complete(v,old[k])
end end
end end
end end
@@ -68,7 +68,7 @@ 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
if type(v)=="string"then if type(v)=='string'then
org[k]=org[v] org[k]=org[v]
end end
end end
@@ -92,34 +92,34 @@ do--function TABLE.dump(L,t)
else else
s="return{\n" s="return{\n"
t=1 t=1
if type(L)~="table"then if type(L)~='table'then
return return
end end
end end
local count=1 local count=1
for k,v in next,L do for k,v in next,L do
local T=type(k) local T=type(k)
if T=="number"then if T=='number'then
if k==count then if k==count then
k="" k=""
count=count+1 count=count+1
else else
k="["..k.."]=" k="["..k.."]="
end end
elseif T=="string"then elseif T=='string'then
if find(k,"[^0-9a-zA-Z_]")then if find(k,"[^0-9a-zA-Z_]")then
k="[\""..k.."\"]=" k="[\""..k.."\"]="
else else
k=k.."=" k=k.."="
end end
elseif T=="boolean"then k="["..k.."]=" elseif T=='boolean'then k="["..k.."]="
else error("Error key type!") else error("Error key type!")
end end
T=type(v) T=type(v)
if T=="number"then v=tostring(v) if T=='number'then v=tostring(v)
elseif T=="string"then v="\""..v.."\"" elseif T=='string'then v="\""..v.."\""
elseif T=="table"then v=dump(v,t+1) elseif T=='table'then v=dump(v,t+1)
elseif T=="boolean"then v=tostring(v) elseif T=='boolean'then v=tostring(v)
else error("Error data type!") else error("Error data type!")
end end
s=s..tabs[t]..k..v..",\n" s=s..tabs[t]..k..v..",\n"

View File

@@ -9,7 +9,7 @@ end
function TASK.update() function TASK.update()
for i=#tasks,1,-1 do for i=#tasks,1,-1 do
local T=tasks[i] local T=tasks[i]
if status(T.thread)=="dead"then if status(T.thread)=='dead'then
rem(tasks,i) rem(tasks,i)
else else
assert(resume(T.thread)) assert(resume(T.thread))
@@ -19,7 +19,7 @@ end
function TASK.new(code,...) function TASK.new(code,...)
local thread=coroutine.create(code) local thread=coroutine.create(code)
resume(thread,...) resume(thread,...)
if status(thread)~="dead"then if status(thread)~='dead'then
tasks[#tasks+1]={ tasks[#tasks+1]={
thread=thread, thread=thread,
code=code, code=code,

View File

@@ -19,21 +19,21 @@ function textFX.fly(t)
mStr(t.text,t.x+(t.c-.5)^3*300,t.y-t.font*.7) mStr(t.text,t.x+(t.c-.5)^3*300,t.y-t.font*.7)
end end
function textFX.stretch(t) function textFX.stretch(t)
gc_push("transform") gc_push('transform')
gc_translate(t.x,t.y) gc_translate(t.x,t.y)
if t.c<.3 then gc_scale((.3-t.c)*1.6+1,1)end if t.c<.3 then gc_scale((.3-t.c)*1.6+1,1)end
mStr(t.text,0,-t.font*.7) mStr(t.text,0,-t.font*.7)
gc_pop() gc_pop()
end end
function textFX.drive(t) function textFX.drive(t)
gc_push("transform") gc_push('transform')
gc_translate(t.x,t.y) gc_translate(t.x,t.y)
if t.c<.3 then gc_shear((.3-t.c)*2,0)end if t.c<.3 then gc_shear((.3-t.c)*2,0)end
mStr(t.text,0,-t.font*.7) mStr(t.text,0,-t.font*.7)
gc_pop() gc_pop()
end end
function textFX.spin(t) function textFX.spin(t)
gc_push("transform") gc_push('transform')
gc_translate(t.x,t.y) gc_translate(t.x,t.y)
if t.c<.3 then if t.c<.3 then
gc_rotate((.3-t.c)^2*4) gc_rotate((.3-t.c)^2*4)
@@ -49,7 +49,7 @@ function textFX.flicker(t)
mStr(t.text,t.x,t.y-t.font*.7) mStr(t.text,t.x,t.y-t.font*.7)
end end
function textFX.zoomout(t) function textFX.zoomout(t)
gc_push("transform") gc_push('transform')
local k=t.c^.5*.1+1 local k=t.c^.5*.1+1
gc_translate(t.x,t.y) gc_translate(t.x,t.y)
gc_scale(k,k) gc_scale(k,k)
@@ -57,7 +57,7 @@ function textFX.zoomout(t)
gc_pop() gc_pop()
end end
function textFX.beat(t) function textFX.beat(t)
gc_push("transform") gc_push('transform')
gc_translate(t.x,t.y) gc_translate(t.x,t.y)
if t.c<.3 then if t.c<.3 then
local k=1.3-t.c^2/.3 local k=1.3-t.c^2/.3
@@ -85,7 +85,7 @@ function TEXT.show(text,x,y,font,style,spd,stop)
font=int(font/5)*5 or 40, --Font font=int(font/5)*5 or 40, --Font
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
@@ -97,7 +97,7 @@ function TEXT.getText(text,x,y,font,style,spd,stop)--Another version of TEXT.sho
font=int(font/5)*5 or 40, font=int(font/5)*5 or 40,
spd=(spd or 1)/60, spd=(spd or 1)/60,
stop=stop, stop=stop,
draw=textFX[style or"appear"]or error("unavailable type:"..style), draw=textFX[style or'appear']or error("unavailable type:"..style),
} }
end end
function TEXT.update(list) function TEXT.update(list)

View File

@@ -7,12 +7,12 @@ local themeColor={
} }
function THEME.calculate(Y,M,D) function THEME.calculate(Y,M,D)
if not Y then Y,M,D=os.date"%Y",os.date"%m",os.date"%d"end if not Y then Y,M,D=os.date("%Y"),os.date("%m"),os.date("%d")end
--Festival calculate within one statement --Festival calculate within one statement
return return
--Christmas --Christmas
M=="12"and math.abs(D-25)<4 and M=="12"and math.abs(D-25)<4 and
"xmas"or 'xmas'or
--Spring festival --Spring festival
M<"03"and math.abs((({ M<"03"and math.abs((({
@@ -25,49 +25,49 @@ function THEME.calculate(Y,M,D)
42,32,50,39,28,46,35,24,43,33, 42,32,50,39,28,46,35,24,43,33,
21,40, 21,40,
})[Y-2000]or -26)-((M-1)*31+D))<6 and })[Y-2000]or -26)-((M-1)*31+D))<6 and
"sprfes"or 'sprfes'or
--April fool's day --April fool's day
M=="04"and D=="01"and M=="04"and D=="01"and
"fool"or 'fool'or
--Z day (Feb./Mar./Apr./May./June. 26) --Z day (Feb./Mar./Apr./May./June. 26)
D=="26"and( D=="26"and(
M=="1"or M=="2"and"zday1"or M=="01"or M=="02"and'zday1'or
M=="3"or M=="4"and"zday2"or M=="03"or M=="04"and'zday2'or
M=="5"or M=="6"and"zday3" M=="05"or M=="06"and'zday3'
)or )or
"classic" 'classic'
end 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("blank")
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("==============",COLOR.R)
LOG.print("Merry Christmas!",COLOR.Z) LOG.print("Merry Christmas!",COLOR.Z)
LOG.print("==============",COLOR.R) LOG.print("==============",COLOR.R)
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(" ★☆☆★",COLOR.R)
LOG.print("新年快乐!",COLOR.Z) LOG.print("新年快乐!",COLOR.Z)
LOG.print(" ★☆☆★",COLOR.R) LOG.print(" ★☆☆★",COLOR.R)
elseif theme=="zday1"then elseif theme=='zday1'then
BG.setDefault("lanterns") BG.setDefault('lanterns')
BGM.setDefault("empty") BGM.setDefault("empty")
elseif theme=="zday2"then elseif theme=='zday2'then
BG.setDefault("lanterns") BG.setDefault('lanterns')
BGM.setDefault("overzero") BGM.setDefault("overzero")
elseif theme=="zday3"then elseif theme=='zday3'then
BG.setDefault("lanterns") BG.setDefault('lanterns')
BGM.setDefault("vacuum") BGM.setDefault("vacuum")
elseif theme=="fool"then elseif theme=='fool'then
BG.setDefault("blockrain") BG.setDefault('blockrain')
BGM.setDefault("how feeling") BGM.setDefault("how feeling")
else else
return return
@@ -84,7 +84,7 @@ function THEME.getThemeColor(theme)
end end
function THEME.fresh() function THEME.fresh()
THEME.set(THEME.calculate(os.date"%Y",os.date"%m",os.date"%d")) THEME.set(THEME.calculate(os.date("%Y"),os.date("%m"),os.date("%d")))
end end
return THEME return THEME

View File

@@ -54,8 +54,8 @@ do--Connect
repeat repeat
res,err=SOCK:receive("*l") res,err=SOCK:receive("*l")
if not res then readCHN:push(err)return end if not res then readCHN:push(err)return end
if not ctLen and res:find"length"then if not ctLen and res:find("length")then
ctLen=tonumber(res:match"%d+") ctLen=tonumber(res:match("%d+"))
end end
until res=="" until res==""
@@ -87,7 +87,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)) ]]..(debug: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 +154,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))) ]]..(debug: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 +166,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))) ]]..(debug: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))) ]]..(debug: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,13 +181,13 @@ 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))) ]]..(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)))
--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) res=JSON.decode(res)
readCHN:push(res and res.reason or"WS Error") readCHN:push(res and res.reason or"WS Error")
else else
@@ -196,21 +196,21 @@ while true do--Running
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") ]]..(debug: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") ]]..(debug: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") ]]..(debug: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") ]]..(debug:find'M'and""or"--")..[[print("OP: "..op.."\tFIN=0")
sBuffer=res sBuffer=res
]]..(debug:find"M"and""or"--")..[[print("START pack: "..res) ]]..(debug:find'M'and""or"--")..[[print("START pack: "..res)
end end
end end
end end
@@ -223,7 +223,7 @@ local wsList=setmetatable({},{
__index=function(l,k) __index=function(l,k)
local ws={ local ws={
real=false, real=false,
status="dead", status='dead',
lastPongTime=timer(), lastPongTime=timer(),
sendTimer=0, sendTimer=0,
alertTimer=0, alertTimer=0,
@@ -244,7 +244,7 @@ function WS.connect(name,subPath,body)
lastPingTime=0, lastPingTime=0,
lastPongTime=timer(), lastPongTime=timer(),
pingInterval=26, pingInterval=26,
status="connecting",--connecting, running, dead status='connecting',--connecting, running, dead
sendTimer=0, sendTimer=0,
alertTimer=0, alertTimer=0,
pongTimer=0, pongTimer=0,
@@ -259,7 +259,7 @@ end
function WS.status(name) function WS.status(name)
local ws=wsList[name] local ws=wsList[name]
return ws.status or"dead" return ws.status or'dead'
end end
function WS.getTimers(name) function WS.getTimers(name)
@@ -286,12 +286,12 @@ local OPcode={
pong=10, pong=10,
} }
local OPname={ local OPname={
[0]="continue", [0]='continue',
[1]="text", [1]='text',
[2]="binary", [2]='binary',
[8]="close", [8]='close',
[9]="ping", [9]='ping',
[10]="pong", [10]='pong',
} }
function WS.send(name,message,op) function WS.send(name,message,op)
local ws=wsList[name] local ws=wsList[name]
@@ -308,7 +308,7 @@ function WS.read(name)
if ws.real and ws.readCHN:getCount()>=2 then if ws.real and ws.readCHN:getCount()>=2 then
local op=ws.readCHN:pop() local op=ws.readCHN:pop()
local message=ws.readCHN:pop() local message=ws.readCHN:pop()
if op==8 then ws.status="dead"end--8=close if op==8 then ws.status='dead'end--8=close
ws.lastPongTime=timer() ws.lastPongTime=timer()
ws.pongTimer=1 ws.pongTimer=1
return message,OPname[op]or op return message,OPname[op]or op
@@ -320,7 +320,7 @@ function WS.close(name)
if ws.real then if ws.real then
ws.sendCHN:push(8)--close ws.sendCHN:push(8)--close
ws.sendCHN:push("") ws.sendCHN:push("")
ws.status="dead" ws.status='dead'
end end
end end
@@ -329,20 +329,20 @@ function WS.update(dt)
for name,ws in next,wsList do for name,ws in next,wsList do
if ws.real then if ws.real then
ws.triggerCHN:push(0) ws.triggerCHN:push(0)
if ws.status=="connecting"then if ws.status=='connecting'then
local mes=ws.readCHN:pop() local mes=ws.readCHN:pop()
if mes then if mes then
if mes=="success"then if mes=="success"then
ws.status="running" ws.status='running'
ws.lastPingTime=time ws.lastPingTime=time
ws.lastPongTime=time ws.lastPongTime=time
ws.pongTimer=1 ws.pongTimer=1
else else
ws.status="dead" ws.status='dead'
LOG.print(text.wsFailed..": "..(mes=="timeout"and text.netTimeout or mes),"warn") LOG.print(text.wsFailed..": "..(mes=="timeout"and text.netTimeout or mes),'warn')
end end
end end
elseif ws.status=="running"then elseif ws.status=='running'then
if time-ws.lastPingTime>ws.pingInterval then if time-ws.lastPingTime>ws.pingInterval then
ws.sendCHN:push(9) ws.sendCHN:push(9)
ws.sendCHN:push("")--ping ws.sendCHN:push("")--ping

View File

@@ -3,18 +3,19 @@ local gc=love.graphics
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,format=string.sub,string.format local sub=string.sub
local ins=table.insert local ins=table.insert
local COLOR=COLOR
local setFont,mStr=setFont,mStr local setFont,mStr=setFont,mStr
local mDraw_X,mDraw_Y=ADRAW.simpX,ADRAW.simpY local mDraw_X,mDraw_Y=ADRAW.simpX,ADRAW.simpY
local mustHaveText={ local clearIcon=DOGC{40,40,
text=true, {"setLW",6},
button=true, {"line",11,11,29,29},
key=true, {"line",11,29,29,11},
switch=true, }
selector=true, local sureIcon=DOGC{40,40,
{"setFT",35},
{"mText","?",20,-6},
} }
local WIDGET={} local WIDGET={}
@@ -25,9 +26,11 @@ local widgetMetatable={
} }
local text={ local text={
type="text", type='text',
mustHaveText=true,
alpha=0, alpha=0,
} }
function text:reset()end function text:reset()end
function text:update() function text:update()
if self.hideCon and self.hideCon()then if self.hideCon and self.hideCon()then
@@ -42,16 +45,16 @@ 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'][,hide]
local _={ local _={
name= D.name, name= D.name,
x= D.x, x= D.x,
@@ -60,7 +63,7 @@ function WIDGET.newText(D)--name,x,y[,fText][,color][,font=30][,align="M"][,hide
fText= D.fText, fText= D.fText,
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, hideCon=D.hide,
} }
for k,v in next,text do _[k]=v end for k,v in next,text do _[k]=v end
@@ -70,10 +73,10 @@ function WIDGET.newText(D)--name,x,y[,fText][,color][,font=30][,align="M"][,hide
end end
local image={ local image={
type="image", type='image',
} }
function image:reset() function image:reset()
if type(self.img)=="string"then if type(self.img)=='string'then
self.img=IMG[self.img] self.img=IMG[self.img]
end end
end end
@@ -98,14 +101,15 @@ function WIDGET.newImage(D)--name[,img(name)],x,y[,ang][,k][,hide]
end end
local button={ local button={
type="button", type='button',
mustHaveText=true,
ATV=0,--Activating time(0~8) ATV=0,--Activating time(0~8)
} }
function button:reset() function button:reset()
self.ATV=0 self.ATV=0
end end
function button:setObject(obj) function button:setObject(obj)
if type(obj)=="string"or type(obj)=="number"then if type(obj)=='string'or type(obj)=='number'then
self.obj=gc.newText(getFont(self.font),obj) self.obj=gc.newText(getFont(self.font),obj)
elseif obj then elseif obj then
self.obj=obj self.obj=obj
@@ -146,16 +150,16 @@ function button: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(.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-2,y0-2)
mDraw(obj,x0-2,y0+2) mDraw(obj,x0-2,y0+2)
@@ -163,7 +167,7 @@ function button:draw()
mDraw(obj,x0+2,y0+2) mDraw(obj,x0+2,y0+2)
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-2,y0-2)
mDraw_Y(obj,x+edge-2,y0+2) mDraw_Y(obj,x+edge-2,y0+2)
@@ -171,7 +175,7 @@ function button:draw()
mDraw_Y(obj,x+edge+2,y0+2) mDraw_Y(obj,x+edge+2,y0+2)
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-2,y0-2)
mDraw_Y(obj,x0-2,y0+2) mDraw_Y(obj,x0-2,y0+2)
@@ -182,14 +186,14 @@ function button:draw()
end end
end end
function button:getInfo() function button:getInfo()
return format("x=%d,y=%d,w=%d,h=%d,font=%d",self.x+self.w*.5,self.y+self.h*.5,self.w,self.h,self.font) return("x=%d,y=%d,w=%d,h=%d,font=%d"):format(self.x+self.w*.5,self.y+self.h*.5,self.w,self.h,self.font)
end end
function button:press() function button:press(_,_,k)
self.code() self.code(k)
self:FX() self:FX()
SFX.play("button") if self.sound then SFX.play('button')end
end end
function WIDGET.newButton(D)--name,x,y,w[,h][,fText][,color][,font][,align="M"[,edge]],code[,hide] function WIDGET.newButton(D)--name,x,y,w[,h][,fText][,color][,font=30][,sound=true][,align='M'][,edge=0],code[,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,
@@ -210,8 +214,9 @@ function WIDGET.newButton(D)--name,x,y,w[,h][,fText][,color][,font][,align="M"[,
fText= D.fText, fText= D.fText,
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',
edge= D.edge or 0, edge= D.edge or 0,
sound= D.sound~=false,
code= D.code, code= D.code,
hide= D.hide, hide= D.hide,
} }
@@ -221,14 +226,15 @@ function WIDGET.newButton(D)--name,x,y,w[,h][,fText][,color][,font][,align="M"[,
end end
local key={ local key={
type="key", type='key',
mustHaveText=true,
ATV=0,--Activating time(0~4) ATV=0,--Activating time(0~4)
} }
function key:reset() function key:reset()
self.ATV=0 self.ATV=0
end end
function key:setObject(obj) function key:setObject(obj)
if type(obj)=="string"or type(obj)=="number"then if type(obj)=='string'or type(obj)=='number'then
self.obj=gc.newText(getFont(self.font),obj) self.obj=gc.newText(getFont(self.font),obj)
elseif obj then elseif obj then
self.obj=obj self.obj=obj
@@ -259,28 +265,29 @@ function key:draw()
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*.125)
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
mDraw_Y(self.obj,x+self.edge,y+h*.5) mDraw_Y(self.obj,x+self.edge,y+h*.5)
elseif self.align=="R"then elseif self.align=='R'then
mDraw_Y(self.obj,x+w-self.edge-self.obj:getWidth(),y+h*.5) mDraw_Y(self.obj,x+w-self.edge-self.obj:getWidth(),y+h*.5)
end end
end end
function key:getInfo() function key:getInfo()
return format("x=%d,y=%d,w=%d,h=%d,font=%d",self.x+self.w*.5,self.y+self.h*.5,self.w,self.h,self.font) return("x=%d,y=%d,w=%d,h=%d,font=%d"):format(self.x+self.w*.5,self.y+self.h*.5,self.w,self.h,self.font)
end end
function key:press() function key:press(_,_,k)
self.code() self.code(k)
if self.sound then SFX.play('key')end
end end
function WIDGET.newKey(D)--name,x,y,w[,h][,fText][,color][,font][,align="M"[,edge]],code[,hide] function WIDGET.newKey(D)--name,x,y,w[,h][,fText][,color][,font=30][,sound=true][,align='M'][,edge=0],code[,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,
@@ -301,7 +308,8 @@ function WIDGET.newKey(D)--name,x,y,w[,h][,fText][,color][,font][,align="M"[,edg
fText= D.fText, fText= D.fText,
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", sound= D.sound~=false,
align= D.align or'M',
edge= D.edge or 0, edge= D.edge or 0,
code= D.code, code= D.code,
hide= D.hide, hide= D.hide,
@@ -312,7 +320,8 @@ function WIDGET.newKey(D)--name,x,y,w[,h][,fText][,color][,font][,align="M"[,edg
end end
local switch={ local switch={
type="switch", type='switch',
mustHaveText=true,
ATV=0,--Activating time(0~8) ATV=0,--Activating time(0~8)
CHK=0,--Check alpha(0~6) CHK=0,--Check alpha(0~6)
} }
@@ -343,7 +352,7 @@ 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)
@@ -354,20 +363,20 @@ function switch:draw()
--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()
return format("x=%d,y=%d,font=%d",self.x,self.y,self.font) return("x=%d,y=%d,font=%d"):format(self.x,self.y,self.font)
end end
function switch:press() function switch:press()
self.code() self.code()
SFX.play("move") if self.sound then SFX.play('move')end
end end
function WIDGET.newSwitch(D)--name,x,y[,fText][,color][,font][,disp],code,hide function WIDGET.newSwitch(D)--name,x,y[,fText][,color][,font=30][,sound=true][,disp],code,hide
local _={ local _={
name= D.name, name= D.name,
@@ -381,6 +390,7 @@ function WIDGET.newSwitch(D)--name,x,y[,fText][,color][,font][,disp],code,hide
fText= D.fText, fText= D.fText,
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,
sound= D.sound~=false,
disp= D.disp, disp= D.disp,
code= D.code, code= D.code,
hide= D.hide, hide= D.hide,
@@ -391,7 +401,7 @@ function WIDGET.newSwitch(D)--name,x,y[,fText][,color][,font][,disp],code,hide
end end
local slider={ local slider={
type="slider", type='slider',
ATV=0,--Activating time(0~8) ATV=0,--Activating time(0~8)
TAT=0,--Text activating time(0~180) TAT=0,--Text activating time(0~180)
pos=0,--Position shown pos=0,--Position shown
@@ -464,12 +474,12 @@ function slider:draw()
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)
@@ -484,7 +494,10 @@ function slider:draw()
end end
end end
function slider:getInfo() function slider:getInfo()
return format("x=%d,y=%d,w=%d",self.x,self.y,self.w) return("x=%d,y=%d,w=%d"):format(self.x,self.y,self.w)
end
function slider:press(x)
self:drag(x)
end end
function slider:drag(x) function slider:drag(x)
if not x then return end if not x then return end
@@ -517,7 +530,7 @@ function slider:arrowKey(isLeft)
self.change() self.change()
end end
end end
function WIDGET.newSlider(D)--name,x,y,w[,fText][,color][,unit][,smooth][,font][,change],disp,code,hide function WIDGET.newSlider(D)--name,x,y,w[,fText][,color][,unit][,smooth][,font=30][,change],disp,code,hide
local _={ local _={
name= D.name, name= D.name,
@@ -550,7 +563,7 @@ function WIDGET.newSlider(D)--name,x,y,w[,fText][,color][,unit][,smooth][,font][
_.smooth=_.unit<=1 _.smooth=_.unit<=1
end end
if D.show then if D.show then
if type(D.show)=="function"then if type(D.show)=='function'then
_.show=D.show _.show=D.show
else else
_.show=sliderShowFunc[D.show] _.show=sliderShowFunc[D.show]
@@ -568,7 +581,8 @@ function WIDGET.newSlider(D)--name,x,y,w[,fText][,color][,unit][,smooth][,font][
end end
local selector={ local selector={
type="selector", type='selector',
mustHaveText=true,
ATV=8,--Activating time(0~4) ATV=8,--Activating time(0~4)
select=0,--Selected item ID select=0,--Selected item ID
selText=false,--Selected item name selText=false,--Selected item name
@@ -585,7 +599,7 @@ function selector:reset()
end end
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
function selector:isAbove(x,y) function selector:isAbove(x,y)
return return
@@ -616,7 +630,7 @@ function selector:draw()
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
@@ -644,7 +658,7 @@ function selector:draw()
mStr(self.selText,x+w*.5,y+43-21) mStr(self.selText,x+w*.5,y+43-21)
end end
function selector:getInfo() function selector:getInfo()
return format("x=%d,y=%d,w=%d",self.x+self.w*.5,self.y+30,self.w) return("x=%d,y=%d,w=%d"):format(self.x+self.w*.5,self.y+30,self.w)
end end
function selector:press(x) function selector:press(x)
if x then if x then
@@ -664,7 +678,7 @@ function selector:press(x)
self.code(self.list[s]) self.code(self.list[s])
self.select=s self.select=s
self.selText=self.list[s] self.selText=self.list[s]
SFX.play("prerotate") if self.sound then SFX.play('prerotate')end
end end
end end
end end
@@ -681,9 +695,9 @@ function selector:arrowKey(isLeft)
self.code(self.list[s]) self.code(self.list[s])
self.select=s self.select=s
self.selText=self.list[s] self.selText=self.list[s]
SFX.play("prerotate") if self.sound then SFX.play('prerotate')end
end end
function WIDGET.newSelector(D)--name,x,y,w[,fText][,color],list,disp,code,hide function WIDGET.newSelector(D)--name,x,y,w[,fText][,color][,sound=true],list,disp,code,hide
local _={ local _={
name= D.name, name= D.name,
@@ -701,6 +715,7 @@ function WIDGET.newSelector(D)--name,x,y,w[,fText][,color],list,disp,code,hide
fText= D.fText, fText= D.fText,
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,
sound= D.sound~=false,
font= 30, font= 30,
list= D.list, list= D.list,
disp= D.disp, disp= D.disp,
@@ -713,7 +728,7 @@ function WIDGET.newSelector(D)--name,x,y,w[,fText][,color],list,disp,code,hide
end end
local inputBox={ local inputBox={
type="inputBox", type='inputBox',
keepFocus=true, keepFocus=true,
ATV=0,--Activating time(0~4) ATV=0,--Activating time(0~4)
value="",--Text contained value="",--Text contained
@@ -750,11 +765,11 @@ function inputBox:draw()
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)
@@ -766,7 +781,7 @@ function inputBox:draw()
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,"left") 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)
@@ -774,7 +789,7 @@ function inputBox:draw()
end end
end end
function inputBox:getInfo() function inputBox:getInfo()
return format("x=%d,y=%d,w=%d,h=%d",self.x+self.w*.5,self.y+self.h*.5,self.w,self.h) return("x=%d,y=%d,w=%d,h=%d"):format(self.x+self.w*.5,self.y+self.h*.5,self.w,self.h)
end end
function inputBox:press() function inputBox:press()
if MOBILE then if MOBILE then
@@ -791,15 +806,15 @@ function inputBox:keypress(k)
p=p-1 p=p-1
end end
t=sub(t,1,p-1) t=sub(t,1,p-1)
SFX.play("lock") SFX.play('lock')
elseif k=="delete"then elseif k=="delete"then
t="" t=""
SFX.play("hold") SFX.play('hold')
end end
self.value=t self.value=t
end end
end end
function WIDGET.newInputBox(D)--name,x,y,w[,h][,font][,secret][,regex],hide function WIDGET.newInputBox(D)--name,x,y,w[,h][,font=30][,secret][,regex],hide
local _={ local _={
name= D.name, name= D.name,
@@ -825,7 +840,7 @@ function WIDGET.newInputBox(D)--name,x,y,w[,h][,font][,secret][,regex],hide
end end
local textBox={ local textBox={
type="textBox", type='textBox',
scrollPos=0,--Which line display at bottom scrollPos=0,--Which line display at bottom
scrollPix=0,--Hidden wheel move value scrollPix=0,--Hidden wheel move value
sure=0,--Sure-timer for clear history sure=0,--Sure-timer for clear history
@@ -862,16 +877,8 @@ function textBox:push(t)
self.new=true self.new=true
end end
end end
function textBox:drag(_,_,_,dy)
_=self.scrollPix+dy*SCR.dpi
local sign=_>0 and 1 or -1
while abs(_)>30 do
_=_-30*sign
self:scroll(-sign)
end
self.scrollPix=_
end
function textBox:press(x,y) function textBox:press(x,y)
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
self:clear() self:clear()
@@ -881,6 +888,15 @@ function textBox:press(x,y)
end end
end end
end end
function textBox:drag(_,_,_,dy)
_=self.scrollPix+dy*SCR.dpi
local sign=_>0 and 1 or -1
while abs(_)>30 do
_=_-30*sign
self:scroll(-sign)
end
self.scrollPix=_
end
function textBox:scroll(n) function textBox:scroll(n)
if n<0 then if n<0 then
self.scrollPos=max(self.scrollPos+n,min(#self.texts,self.capacity)) self.scrollPos=max(self.scrollPos+n,min(#self.texts,self.capacity))
@@ -894,7 +910,7 @@ end
function textBox:clear() function textBox:clear()
self.texts={} self.texts={}
self.scrollPos=0 self.scrollPos=0
SFX.play("fall") SFX.play('fall')
end end
function textBox:draw() function textBox: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
@@ -905,27 +921,26 @@ function textBox:draw()
--Background --Background
gc.setColor(0,0,0,.3) gc.setColor(0,0,0,.3)
gc.rectangle("fill",x,y,w,h) gc.rectangle('fill',x,y,w,h)
--Frame --Frame
gc.setLineWidth(4) gc.setLineWidth(4)
gc.setColor(COLOR[WIDGET.sel==self and"Y"or"Z"]) gc.setColor(1,1,WIDGET.sel==self and 0 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
gc.setColor(1,1,1)
setFont(30)
--Clear button --Clear button
gc.setColor(1,1,1)
if not self.fix then if not self.fix then
mStr(self.sure>0 and"?"or"X",x+w-20,y-1) 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)
end end
--Texts --Texts
@@ -941,9 +956,9 @@ function textBox:draw()
end end
end end
function textBox:getInfo() function textBox:getInfo()
return format("x=%d,y=%d,w=%d,h=%d",self.x+self.w*.5,self.y+self.h*.5,self.w,self.h) return("x=%d,y=%d,w=%d,h=%d"):format(self.x+self.w*.5,self.y+self.h*.5,self.w,self.h)
end end
function WIDGET.newTextBox(D)--name,x,y,w,h[,font][,lineH][,fix],hide function WIDGET.newTextBox(D)--name,x,y,w,h[,font=30][,lineH][,fix],hide
local _={ local _={
name= D.name, name= D.name,
@@ -999,7 +1014,7 @@ function WIDGET.set(list)
for i=1,#list do for i=1,#list do
list[i]:reset() list[i]:reset()
end end
if SCN.cur~="custom_field"then if SCN.cur~='custom_field'then
local colorList=THEME.getThemeColor() local colorList=THEME.getThemeColor()
if not colorList then return end if not colorList then return end
local rnd=math.random local rnd=math.random
@@ -1016,11 +1031,11 @@ function WIDGET.setLang(widgetText)
if L.widgetList then if L.widgetList then
for _,W in next,L.widgetList do for _,W in next,L.widgetList do
local t=W.fText or widgetText[S][W.name] local t=W.fText or widgetText[S][W.name]
if not t and mustHaveText[W.type]then if not t and W.mustHaveText then
t=W.name or"##" t=W.name or"##"
W.color=COLOR.dV W.color=COLOR.dV
end end
if type(t)=="string"and W.font then if type(t)=='string'and W.font then
t=gc.newText(getFont(W.font),t) t=gc.newText(getFont(W.font),t)
end end
W.obj=t W.obj=t
@@ -1040,20 +1055,16 @@ function WIDGET.cursorMove(x,y)
WIDGET.sel=false WIDGET.sel=false
end end
end end
function WIDGET.press(x,y) function WIDGET.press(x,y,k)
local W=WIDGET.sel local W=WIDGET.sel
if not W then return end if not W then return end
if W.type=="button"or W.type=="key"or W.type=="switch"or W.type=="selector"or W.type=="inputBox"or W.type=="textBox"then W:press(x,y,k)
W:press(x,y)
elseif W.type=="slider"then
WIDGET.drag(x,y)
end
if W.hide==true or W.hide and W.hide()then WIDGET.sel=false end if W.hide==true or W.hide and W.hide()then WIDGET.sel=false end
end end
function WIDGET.drag(x,y,dx,dy) function WIDGET.drag(x,y,dx,dy)
local W=WIDGET.sel local W=WIDGET.sel
if not W then return end 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,dx,dy)
elseif not W:isAbove(x,y)then elseif not W:isAbove(x,y)then
WIDGET.sel=false WIDGET.sel=false
@@ -1062,7 +1073,7 @@ 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 not W then return end
if W.type=="slider"then if W.type=='slider'then
W:release(x,y) W:release(x,y)
end end
end end
@@ -1072,7 +1083,7 @@ function WIDGET.keyPressed(k)
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 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
@@ -1115,19 +1126,19 @@ function WIDGET.keyPressed(k)
end end
else else
local W=WIDGET.sel 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
end end
end end
function WIDGET.textinput(texts) function WIDGET.textinput(texts)
local W=WIDGET.sel local W=WIDGET.sel
if W and W.type=="inputBox"then if W and W.type=='inputBox'then
if not W.regex or texts:match(W.regex)then if not W.regex or texts:match(W.regex)then
WIDGET.sel.value=WIDGET.sel.value..texts WIDGET.sel.value=WIDGET.sel.value..texts
SFX.play("move") SFX.play('move')
else else
SFX.play("finesseError",.3) SFX.play('finesseError',.3)
end end
end end
end end
@@ -1145,9 +1156,9 @@ function WIDGET.gamepadPressed(i)
elseif i=="a"or i=="b"then elseif i=="a"or i=="b"then
local W=WIDGET.sel local W=WIDGET.sel
if W then if W then
if W.type=="button"or W.type=="key"then if W.type=='button'or W.type=='key'then
WIDGET.press() WIDGET.press()
elseif W.type=="slider"then elseif W.type=='slider'then
local p=W.disp() local p=W.disp()
local P=i=="left"and(p>0 and p-1)or p<W.unit and p+1 local P=i=="left"and(p>0 and p-1)or p<W.unit and p+1
if p==P or not P then return end if p==P or not P then return end

View File

@@ -1,10 +1,10 @@
VERSION={ VERSION={
code=1405, code=1406,
string="Alpha V0.14.5", string="Alpha V0.14.6",
name="晨 Morn", name="午 Noon",
} }
function love.conf(t) function love.conf(t)
t.identity="Techmino"--Saving folder t.identity='Techmino'--Saving folder
t.version="11.1" t.version="11.1"
t.gammacorrect=false t.gammacorrect=false
t.appendidentity=true--Search files in source then in save directory t.appendidentity=true--Search files in source then in save directory
@@ -21,7 +21,7 @@ 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.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

View File

@@ -73,7 +73,7 @@
bg:背景,只能填写内置背景的名字 bg:背景,只能填写内置背景的名字
bgm:背景音乐名(或者列表随机,例如{"race","push"}),只能用内置音乐库的音乐名 bgm:背景音乐名(或者列表随机,例如{"race","push"}),只能用内置音乐库的音乐名
noMod:是否禁用mod allowMod:是否允许mod
load: load:
必选 必选
模式初始化函数,一般创建一个玩家即可 模式初始化函数,一般创建一个玩家即可
@@ -115,8 +115,8 @@ return{--返回一个table你也可以在之前定义一些常量或者函数
color=COLOR.green,--颜色 color=COLOR.green,--颜色
env={--模式环境变量 env={--模式环境变量
drop=60,lock=60, drop=60,lock=60,
dropPiece=function(P)if P.stat.row>=40 then P:win("finish")end end, dropPiece=function(P)if P.stat.row>=40 then P:win('finish')end end,
bg="bg2",bgm="race", bg='bg2',bgm='race',
}, },
load=function()--生成玩家 load=function()--生成玩家
PLY.newPlayer(1)--1是玩家编号默认用户控制1号玩家 PLY.newPlayer(1)--1是玩家编号默认用户控制1号玩家

View File

@@ -9,11 +9,12 @@
]]-- ]]--
--Var leak check
-- setmetatable(_G,{__newindex=function(self,k,v)print('>>'..k)print(debug.traceback():match("\n.-\n\t(.-): "))rawset(self,k,v)end})
--Declaration --Declaration
goto REM love=require"love"::REM::--Just tell IDE to load love-api, no actual usage goto REM love=require"love"::REM::--Just tell IDE to load love-api, no actual usage
local fs=love.filesystem local fs=love.filesystem
NONE={}function NULL()end
DBP=print--Use this in temporary code, easy to find and remove
TIME=love.timer.getTime TIME=love.timer.getTime
YIELD=coroutine.yield YIELD=coroutine.yield
SYSTEM=love.system.getOS() SYSTEM=love.system.getOS()
@@ -21,10 +22,7 @@ MOBILE=SYSTEM=="Android"or SYSTEM=="iOS"
SAVEDIR=fs.getSaveDirectory() SAVEDIR=fs.getSaveDirectory()
--Global Vars & Settings --Global Vars & Settings
LOADED=false
DAILYLAUNCH=false DAILYLAUNCH=false
EDITING=""
ERRDATA={}
--System setting --System setting
math.randomseed(os.time()*626) math.randomseed(os.time()*626)
@@ -36,7 +34,7 @@ love.mouse.setVisible(false)
--Delete all files from too old version --Delete all files from too old version
function CLEAR(root) function CLEAR(root)
for _,name in next,fs.getDirectoryItems(root or"")do for _,name in next,fs.getDirectoryItems(root or"")do
if fs.getRealDirectory(name)==SAVEDIR and fs.getInfo(name).type~="directory"then if fs.getRealDirectory(name)==SAVEDIR and fs.getInfo(name).type~='directory'then
fs.remove(name) fs.remove(name)
end end
end end
@@ -47,7 +45,7 @@ for _,v in next,{"conf","record","replay","cache","lib"}do
local info=fs.getInfo(v) local info=fs.getInfo(v)
if not info then if not info then
fs.createDirectory(v) fs.createDirectory(v)
elseif info.type~="directory"then elseif info.type~='directory'then
fs.remove(v) fs.remove(v)
fs.createDirectory(v) fs.createDirectory(v)
end end
@@ -64,9 +62,9 @@ require"parts.gametoolfunc"
FREEROW= require"parts.freeRow" FREEROW= require"parts.freeRow"
DATA= require"parts.data" DATA= require"parts.data"
USERS= require"parts.users"
TEXTURE= require"parts.texture" TEXTURE= require"parts.texture"
SKIN= require"parts.skin" SKIN= require"parts.skin"
USERS= require"parts.users"
NET= require"parts.net" NET= require"parts.net"
VK= require"parts.virtualKey" VK= require"parts.virtualKey"
PLY= require"parts.player" PLY= require"parts.player"
@@ -120,6 +118,7 @@ IMG.init{
} }
SKIN.init{ SKIN.init{
"crystal_scf", "crystal_scf",
"matte_mrz",
"contrast_mrz", "contrast_mrz",
"polkadots_scf", "polkadots_scf",
"toy_scf", "toy_scf",
@@ -240,13 +239,13 @@ do
local needSave local needSave
local 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 if STAT.version<1300 then
STAT.frame=math.floor(STAT.time*60) STAT.frame=math.floor(STAT.time*60)
STAT.lastPlay="sprint_10l" STAT.lastPlay='sprint_10l'
RANKS.sprintFix=nil RANKS.sprintFix=nil
RANKS.sprintLock=nil RANKS.sprintLock=nil
needSave=true needSave=true
@@ -293,12 +292,12 @@ do
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
for k in next,RANKS do for k in next,RANKS do
if type(k)=="number"then if type(k)=='number'then
RANKS[k]=nil RANKS[k]=nil
needSave=true needSave=true
end end
end end
local modeTable={attacker_h="attacker_hard",attacker_u="attacker_ultimate",blind_e="blind_easy",blind_h="blind_hard",blind_l="blind_lunatic",blind_n="blind_normal",blind_u="blind_ultimate",c4wtrain_l="c4wtrain_lunatic",c4wtrain_n="c4wtrain_normal",defender_l="defender_lunatic",defender_n="defender_normal",dig_100l="dig_10",dig_10l="dig_100",dig_400l="dig_40",dig_40l="dig_400",dig_h="dig_hard",dig_u="dig_ultimate",drought_l="drought_lunatic",drought_n="drought_normal",marathon_h="marathon_hard",marathon_n="marathon_normal",pc_h="pcchallenge_hard",pc_l="pcchallenge_lunatic",pc_n="pcchallenge_normal",pctrain_l="pctrain_lunatic",pctrain_n="pctrain_normal",round_e="round_1",round_h="round_2",round_l="round_3",round_n="round_4",round_u="round_5",solo_e="solo_1",solo_h="solo_2",solo_l="solo_3",solo_n="solo_4",solo_u="solo_5",sprint_10l="sprint_10",sprint_20l="sprint_20",sprint_40l="sprint_40",sprint_400l="sprint_400",sprint_100l="sprint_100",sprint_1000l="sprint_1000",survivor_e="survivor_easy",survivor_h="survivor_hard",survivor_l="survivor_lunatic",survivor_n="survivor_normal",survivor_u="survivor_ultimate",tech_finesse_f="tech_finesse2",tech_h_plus="tech_hard2",tech_h="tech_hard",tech_l_plus="tech_lunatic2",tech_l="tech_lunatic",tech_n_plus="tech_normal2",tech_n="tech_normal",techmino49_e="techmino49_easy",techmino49_h="techmino49_hard",techmino49_u="techmino49_ultimate",techmino99_e="techmino99_easy",techmino99_h="techmino99_hard",techmino99_u="techmino99_ultimate",tsd_e="tsd_easy",tsd_h="tsd_hard",tsd_u="tsd_ultimate",master_extra="GM"} local modeTable={attacker_h="attacker_hard",attacker_u="attacker_ultimate",blind_e="blind_easy",blind_h="blind_hard",blind_l="blind_lunatic",blind_n="blind_normal",blind_u="blind_ultimate",c4wtrain_l="c4wtrain_lunatic",c4wtrain_n="c4wtrain_normal",defender_l="defender_lunatic",defender_n="defender_normal",dig_100l="dig_100",dig_10l="dig_10",dig_400l="dig_400",dig_40l="dig_40",dig_h="dig_hard",dig_u="dig_ultimate",drought_l="drought_lunatic",drought_n="drought_normal",marathon_h="marathon_hard",marathon_n="marathon_normal",pc_h="pcchallenge_hard",pc_l="pcchallenge_lunatic",pc_n="pcchallenge_normal",pctrain_l="pctrain_lunatic",pctrain_n="pctrain_normal",round_e="round_1",round_h="round_2",round_l="round_3",round_n="round_4",round_u="round_5",solo_e="solo_1",solo_h="solo_2",solo_l="solo_3",solo_n="solo_4",solo_u="solo_5",sprint_10l="sprint_10",sprint_20l="sprint_20",sprint_40l="sprint_40",sprint_400l="sprint_400",sprint_100l="sprint_100",sprint_1000l="sprint_1000",survivor_e="survivor_easy",survivor_h="survivor_hard",survivor_l="survivor_lunatic",survivor_n="survivor_normal",survivor_u="survivor_ultimate",tech_finesse_f="tech_finesse2",tech_h_plus="tech_hard2",tech_h="tech_hard",tech_l_plus="tech_lunatic2",tech_l="tech_lunatic",tech_n_plus="tech_normal2",tech_n="tech_normal",techmino49_e="techmino49_easy",techmino49_h="techmino49_hard",techmino49_u="techmino49_ultimate",techmino99_e="techmino99_easy",techmino99_h="techmino99_hard",techmino99_u="techmino99_ultimate",tsd_e="tsd_easy",tsd_h="tsd_hard",tsd_u="tsd_ultimate",master_extra="GM"}
for k,v in next,modeTable do for k,v in next,modeTable do
if RANKS[v]then if RANKS[v]then
RANKS[k]=RANKS[v] RANKS[k]=RANKS[v]
@@ -306,7 +305,7 @@ do
end end
v="record/"..v v="record/"..v
if fs.getInfo(v..".dat")then if fs.getInfo(v..".dat")then
fs.write("record/"..k.."rec",fs.read(v..".dat")) fs.write("record/"..k..".rec",fs.read(v..".dat"))
fs.remove(v..".dat") fs.remove(v..".dat")
end end
if fs.getInfo(v..".rec")then if fs.getInfo(v..".rec")then
@@ -320,14 +319,11 @@ do
end end
if needSave then if needSave then
FILE.save(SETTING,"conf/settings","q") FILE.save(SETTING,'conf/settings','q')
FILE.save(RANKS,"conf/unlock","q") FILE.save(RANKS,'conf/unlock','q')
FILE.save(STAT,"conf/data","q") FILE.save(STAT,'conf/data','q')
end end
if autoRestart then if autoRestart then
love.event.quit("restart") love.event.quit('restart')
end end
end end
--Var leak check
-- setmetatable(_G,{__newindex=function(self,k,v)print('>>'..k,tostring(v))rawset(self,k,v)end})

BIN
media/BGM/hope.ogg Normal file

Binary file not shown.

BIN
media/SFX/key.ogg Normal file

Binary file not shown.

Binary file not shown.

Before

Width:  |  Height:  |  Size: 46 KiB

After

Width:  |  Height:  |  Size: 76 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.4 KiB

View File

@@ -1,17 +1,17 @@
local AISpeed={60,50,40,30,20,14,10,6,4,3} local AISpeed={60,50,40,30,20,14,10,6,4,3}
return function(type,speedLV,next,hold,node) return function(type,speedLV,next,hold,node)
if type=="CC"then if type=='CC'then
if not hold then hold=false else hold=true end if not hold then hold=false else hold=true end
return{ return{
type="CC", type='CC',
next=next, next=next,
hold=hold, hold=hold,
delta=AISpeed[speedLV], delta=AISpeed[speedLV],
node=node, node=node,
} }
elseif type=="9S"then elseif type=='9S'then
return{ return{
type="9S", type='9S',
delta=math.floor(AISpeed[speedLV]), delta=math.floor(AISpeed[speedLV]),
hold=hold, hold=hold,
} }

View File

@@ -7,13 +7,13 @@ local yield=coroutine.yield
-- 11~13:LL,RR,DD -- 11~13:LL,RR,DD
local blockPos={4,4,4,4,4,5,4} local blockPos={4,4,4,4,4,5,4}
-------------------------------------------------Cold clear -------------------------------------------------Cold clear
local _CC=LOADLIB("CC",{ local _CC=LOADLIB('CC',{
Windows="CCloader", Windows="CCloader",
Linux="CCloader", Linux="CCloader",
Android="libCCloader.so", Android="libCCloader.so",
libFunc="luaopen_CCloader", libFunc="luaopen_CCloader",
})cc=nil })cc=nil
if type(_CC)=="table"then if type(_CC)=='table'then
local CCblockID={6,5,4,3,2,1,0} local CCblockID={6,5,4,3,2,1,0}
CC={ CC={
getConf= _CC.get_default_config ,--()options,weights getConf= _CC.get_default_config ,--()options,weights
@@ -62,7 +62,7 @@ if type(_CC)=="table"then
CC.fastWeights(wei) CC.fastWeights(wei)
CC.setHold(opt,P.AIdata.hold) CC.setHold(opt,P.AIdata.hold)
CC.set20G(opt,P.AIdata._20G) CC.set20G(opt,P.AIdata._20G)
CC.setBag(opt,P.AIdata.bag=="bag") CC.setBag(opt,P.AIdata.bag=='bag')
CC.setNode(opt,P.AIdata.node) CC.setNode(opt,P.AIdata.node)
P.AI_bot=CC.new(opt,wei) P.AI_bot=CC.new(opt,wei)
CC.free(opt)CC.free(wei) CC.free(opt)CC.free(wei)
@@ -71,7 +71,7 @@ if type(_CC)=="table"then
end end
CC.updateField(P) CC.updateField(P)
TABLE.clear(P.holdQueue) TABLE.cut(P.holdQueue)
P.holdTime=P.gameEnv.holdCount P.holdTime=P.gameEnv.holdCount
P.cur=rem(P.nextQueue,1) P.cur=rem(P.nextQueue,1)
@@ -200,7 +200,7 @@ local function getScore(field,cb,cy)
end end
------------------------------------------------- -------------------------------------------------
return{ return{
["9S"]=function(P,keys) ['9S']=function(P,keys)
while true do while true do
--Thinking --Thinking
yield() yield()
@@ -275,7 +275,7 @@ return{
end end
end end
end, end,
["CC"]=CC and function(P,keys) ['CC']=CC and function(P,keys)
while true do while true do
--Start thinking --Start thinking
yield() yield()

View File

@@ -18,7 +18,7 @@ end
function back.draw() function back.draw()
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)
gc.setShader() gc.setShader()
end end
return back return back

View File

@@ -7,7 +7,7 @@ local X,Y,K
function back.init() function back.init()
if not video then if not video then
video=gc.newVideo("parts/backgrounds/badapple.ogv",{false}) video=gc.newVideo("parts/backgrounds/badapple.ogv",{false})
video:setFilter("linear","linear") video:setFilter('linear','linear')
video:play() video:play()
end end
back.resize() back.resize()

View File

@@ -17,7 +17,7 @@ end
function back.draw() function back.draw()
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)
gc.setShader() gc.setShader()
end end
return back return back

View File

@@ -17,7 +17,7 @@ end
function back.draw() function back.draw()
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)
gc.setShader() gc.setShader()
end end
return back return back

View File

@@ -1,5 +1,6 @@
--Blackhole --Blackhole
local gc=love.graphics local gc=love.graphics
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
local back={} local back={}
@@ -13,36 +14,23 @@ end
function back.update() function back.update()
t=t-1 t=t-1
if t==0 then if t==0 then
local size=SCR.rad*(2+rnd()*3)/100
local S={ local S={
x=(SCR.w-size)*rnd()-SCR.w/2,
y=(SCR.h-size)*rnd()-SCR.h/2,
ang=6.2832*rnd(), ang=6.2832*rnd(),
d=SCR.rad*1.05/2,
rotate=6.2832*rnd(),
va=.05-rnd()*.1, va=.05-rnd()*.1,
size=size, size=SCR.rad*(2+rnd()*3)/100,
texture=rnd(16), texture=SKIN.curText[rnd(16)],
} }
if rnd()<.5 then
S.x=rnd()<.5 and
-SCR.w/2-S.size or
SCR.w/2
else
S.y=rnd()<.5 and
-SCR.h/2-S.size or
SCR.h/2
end
ins(squares,S) ins(squares,S)
t=rnd(6,16) t=rnd(6,12)
end end
for i=#squares,1,-1 do for i=#squares,1,-1 do
local S=squares[i] local S=squares[i]
local ang=math.atan2(S.y,S.x) S.d=S.d-SCR.rad/(S.d+60)
local d=(S.x^2+S.y^2)^.5 if S.d>0 then
d=d-2000/(d+60) S.ang=S.ang+.008
if d>0 then S.rotate=S.rotate+S.va
S.x=d*math.cos(ang)
S.y=d*math.sin(ang)
S.ang=S.ang+S.va
else else
rem(squares,i) rem(squares,i)
end end
@@ -50,7 +38,7 @@ 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.push('transform')
gc.origin() gc.origin()
gc.translate(SCR.w/2,SCR.h/2) gc.translate(SCR.w/2,SCR.h/2)
@@ -58,19 +46,19 @@ function back.draw()
gc.setColor(.5,.5,.5) gc.setColor(.5,.5,.5)
for i=1,#squares do for i=1,#squares do
local S=squares[i] local S=squares[i]
gc.draw(SKIN.curText[S.texture],S.x,S.y,S.ang,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/1260) gc.scale(SCR.rad/1600)
gc.setColor(0,0,0) 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(0,0,0,1-i*.0666)
gc.circle("line",0,0,160+6*i) gc.circle('line',0,0,160+6*i)
end end
gc.scale(1260/SCR.rad) gc.scale(1600/SCR.rad)
gc.pop() gc.pop()
end end
function back.discard() function back.discard()

View File

@@ -0,0 +1,55 @@
--Large falling tetrominoes
local gc=love.graphics
local rnd=math.random
local ins,rem=table.insert,table.remove
local back={}
local t
local mino
function back.init()
t=0
mino={}
end
function back.update()
t=t+1
if t%26==0 then
local r=rnd(7)
local B=BLOCKS[r][rnd(0,3)]
local k=(1+rnd()*2)*SCR.rad/1000
ins(mino,{
x=(SCR.w)*rnd()-15*#B[1],
y=0,
k=k,
vy=k*2,
block=B,
texture=SKIN.curText[SETTING.skin[r]],
})
end
for i=#mino,1,-1 do
local M=mino[i]
M.y=M.y+M.vy
if M.y-M.k*#M.block*30>SCR.h then rem(mino,i)end
end
end
function back.draw()
gc.clear(.15,.15,.15)
gc.push('transform')
gc.origin()
gc.setColor(1,1,1,.4)
for i=1,#mino do
local M=mino[i]
local b=M.block
for y=1,#b do
for x=1,#b[1]do
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)
end
end
end
end
gc.pop()
end
function back.discard()
mino=nil
end
return back

View File

@@ -5,52 +5,53 @@ local ins,rem=table.insert,table.remove
local back={} local back={}
local t local t
local cell local mino
function back.init() function back.init()
t=0 t=0
cell={} mino={}
end end
function back.update() function back.update()
t=t+1 t=t+1
if t%10==0 then if t%10==0 then
ins(cell,{ local r=rnd(29)
bid=rnd(29), ins(mino,{
bid=r,
block=TEXTURE.miniBlock[r],
color=minoColor[SETTING.skin[r]],
x=SCR.w*rnd(), x=SCR.w*rnd(),
y=-25, y=SCR.h*-.05,
a=rnd()*6.2832, k=SCR.rad/100,
ang=rnd()*6.2832,
vy=.5+rnd()*.4, vy=.5+rnd()*.4,
vx=rnd()*.4-.2, vx=rnd()*.4-.2,
va=rnd()*.04-.02, va=rnd()*.04-.02,
}) })
end end
for i=#cell,1,-1 do for i=#mino,1,-1 do
local P=cell[i] local P=mino[i]
P.y=P.y+P.vy P.y=P.y+P.vy
if P.y>SCR.h+25 then if P.y>SCR.h+25 then
rem(cell,i) rem(mino,i)
else else
P.x=P.x+P.vx P.x=P.x+P.vx
P.a=P.a+P.va P.ang=P.ang+P.va
P.vx=P.vx-.01+rnd()*.02 P.vx=P.vx-.01+rnd()*.02
end end
end end
end end
function back.draw() function back.draw()
gc.clear(.15,.15,.15) gc.clear(.15,.15,.15)
gc.push("transform") gc.push('transform')
gc.origin() gc.origin()
local texture=TEXTURE.miniBlock for i=1,#mino do
local minoColor=minoColor local C=mino[i]
for i=1,#cell do local c=C.color
local C=cell[i]
local tex=texture[C.bid]
local c=minoColor[SETTING.skin[C.bid]]
gc.setColor(c[1],c[2],c[3],.5) gc.setColor(c[1],c[2],c[3],.5)
gc.draw(tex,C.x,C.y,C.a,10,10,tex:getWidth()/2,tex: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() gc.pop()
end end
function back.discard() function back.discard()
cell=nil mino=nil
end end
return back return back

View File

@@ -0,0 +1,56 @@
--Space but tetrominoes
local gc=love.graphics
local sin,cos=math.sin,math.cos
local rnd=math.random
local ins,rem=table.insert,table.remove
local back={}
local t
local mino
function back.init()
t=0
mino={}
end
function back.update()
t=t+1
if t%2==0 then
local r=rnd(29)
ins(mino,{
block=TEXTURE.miniBlock[r],
color=minoColor[SETTING.skin[r]],
ang=6.2832*rnd(),
rotate=6.2832*rnd(),
vr=.03-rnd()*.06,
d=0,
v=1,
})
end
local rad=SCR.rad
for i=#mino,1,-1 do
local M=mino[i]
M.d=M.d+M.v
if M.d>rad*1.05 then
rem(mino,i)
else
M.rotate=M.rotate+M.vr
M.v=M.v*(1+M.d/SCR.rad*.2)
end
end
end
function back.draw()
gc.clear(.15,.15,.15)
gc.push('transform')
gc.origin()
gc.translate(SCR.w/2,SCR.h/2)
for i=1,#mino do
local M=mino[i]
local c=M.color
gc.setColor(c[1],c[2],c[3],.4)
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
gc.pop()
end
function back.discard()
mino=nil
end
return back

View File

@@ -62,16 +62,16 @@ 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.push('transform')
gc.origin() gc.origin()
gc.setLineWidth(6) 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],.6)
rectangle("line",S.x,S.y,S.size,S.size) rectangle('line',S.x,S.y,S.size,S.size)
gc.setColor(c) gc.setColor(c)
rectangle("fill",S.x,S.y,S.size,S.size) rectangle('fill',S.x,S.y,S.size,S.size)
end end
gc.pop() gc.pop()
end end

View File

@@ -39,25 +39,25 @@ function back.update()
end end
end end
function back.draw() function back.draw()
gc.push("transform") gc.push('transform')
gc.translate(SCR.w/2,SCR.h/2+20*sin(t*.02)) gc.translate(SCR.w/2,SCR.h/2+20*sin(t*.02))
gc.scale(SCR.k) gc.scale(SCR.k)
gc.clear(.1,.1,.1) gc.clear(.1,.1,.1)
gc.setLineWidth(320) gc.setLineWidth(320)
gc.setColor(.3,.2,.3) gc.setColor(.3,.2,.3)
gc.arc("line","open",0,420,500,-.8*3.1416,-.2*3.1416) gc.arc('line','open',0,420,500,-.8*3.1416,-.2*3.1416)
gc.setLineWidth(4) gc.setLineWidth(4)
gc.setColor(.7,.5,.65) gc.setColor(.7,.5,.65)
gc.arc("line","open",0,420,660,-.799*3.1416,-.201*3.1416) 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.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.line(281,224,530,30.5) gc.line(281,224,530,30.5)
gc.setLineWidth(6) gc.setLineWidth(6)
gc.setColor(.55,.5,.6) gc.setColor(.55,.5,.6)
for i=1,8 do for i=1,8 do
polygon("line",fan[i]) polygon('line',fan[i])
end end
gc.setLineWidth(2) gc.setLineWidth(2)
@@ -65,7 +65,7 @@ function back.draw()
gc.origin() 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) ellipse('fill',P.x,P.y,P.rx,P.ry)
end end
gc.pop() gc.pop()
end end

View File

@@ -33,7 +33,7 @@ function back.update(dt)
if time>1 then if time>1 then
local x,y,color=F.x,F.y,F.color local x,y,color=F.x,F.y,F.color
if F.big then if F.big then
SFX.play("fall",.5) SFX.play('fall',.5)
for _=1,rnd(62,126)do for _=1,rnd(62,126)do
ins(particle,{ ins(particle,{
x=x,y=y, x=x,y=y,
@@ -44,7 +44,7 @@ function back.update(dt)
}) })
end end
else else
SFX.play("clear_1",.4) SFX.play('clear_1',.4)
for _=1,rnd(16,26)do for _=1,rnd(16,26)do
ins(particle,{ ins(particle,{
x=x,y=y, x=x,y=y,
@@ -76,12 +76,12 @@ 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.push('transform')
gc.origin() 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) 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

View File

@@ -38,7 +38,7 @@ 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.push('transform')
gc.origin() gc.origin()
gc.setColor(1,1,1) gc.setColor(1,1,1)
local img=IMG.lanterns local img=IMG.lanterns

View File

@@ -14,14 +14,14 @@ function back.update(dt)
end end
function back.draw() function back.draw()
gc.clear(.15,.15,.15) gc.clear(.15,.15,.15)
gc.push("transform") 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)*.1+.1)
gc.rectangle("fill",80*x,80*y,-80,-80) gc.rectangle('fill',80*x,80*y,-80,-80)
end end
end end
gc.pop() gc.pop()

View File

@@ -18,7 +18,7 @@ end
function back.draw() function back.draw()
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)
gc.setShader() gc.setShader()
end end
return back return back

View File

@@ -18,7 +18,7 @@ end
function back.draw() function back.draw()
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)
gc.setShader() gc.setShader()
end end
return back return back

View File

@@ -39,12 +39,12 @@ function back.update()
end end
function back.draw() function back.draw()
gc.clear(.2,.2,.2) gc.clear(.2,.2,.2)
gc.push("transform") gc.push('transform')
gc.setColor(.7,.7,.7) gc.setColor(.7,.7,.7)
gc.origin() 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() gc.pop()
end end

View File

@@ -36,7 +36,7 @@ function back.draw()
gc.translate(-10,-10) gc.translate(-10,-10)
gc.setColor(.8,.8,.8) gc.setColor(.8,.8,.8)
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
gc.translate(10,10) gc.translate(10,10)
end end

View File

@@ -34,7 +34,7 @@ function back.draw()
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))
gc.rectangle("line",W*.5-W*r/2,H*.5-H*r/2,W*r,H*r) gc.rectangle('line',W*.5-W*r/2,H*.5-H*r/2,W*r,H*r)
end end
end end
function back.discard() function back.discard()

View File

@@ -18,7 +18,7 @@ function back.draw()
else else
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.w/2,SCR.h/2+20*sin(t*.02))
gc.scale(SCR.k) gc.scale(SCR.k)
gc.scale(1.1626,1.26) gc.scale(1.1626,1.26)

View File

@@ -17,12 +17,12 @@ local W,H
function back.init() function back.init()
bar=gc.newCanvas(41,1) bar=gc.newCanvas(41,1)
gc.setCanvas(bar) gc.setCanvas(bar)
gc.push("transform") gc.push('transform')
gc.origin() gc.origin()
for x=0,20 do for x=0,20 do
gc.setColor(1,1,1,x/11) gc.setColor(1,1,1,x/11)
gc.rectangle("fill",x,0,1,1) gc.rectangle('fill',x,0,1,1)
gc.rectangle("fill",41-x,0,1,1) gc.rectangle('fill',41-x,0,1,1)
end end
gc.pop() gc.pop()
gc.setCanvas() gc.setCanvas()

View File

@@ -98,7 +98,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 data.encode('string','base64',data.compress('string','zlib',str))
end end
function DATA.copyBoards() function DATA.copyBoards()
local out={} local out={}
@@ -114,9 +114,10 @@ function DATA.pasteBoard(str,page)--Paste [str] data to [page] board
local _,__ local _,__
--Decode --Decode
_,str=pcall(data.decode,"string","base64",str) str=str:sub(str:find("%S"),str:find(".%s-$"))
_,str=pcall(data.decode,'string','base64',str)
if not _ then return end if not _ then return end
_,str=pcall(data.decompress,"string","zlib",str) _,str=pcall(data.decompress,'string','zlib',str)
if not _ then return end 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))
@@ -240,14 +241,13 @@ function DATA.copyQuestArgs()
return str return str
end end
do--function DATA.pasteQuestArgs(str) do--function DATA.pasteQuestArgs(str)
local sub=string.sub function DATA.pasteQuestArgs(str)
function pasteQuestArgs(str)
if #str<4 then return end if #str<4 then return end
local ENV=CUSTOMENV local ENV=CUSTOMENV
ENV.holdCount= byte(str,1)-48 ENV.holdCount= str:byte(1)-48
ENV.ospin= byte(str,2)~=90 ENV.ospin= str:byte(2)~=90
ENV.missionKill= byte(str,3)~=90 ENV.missionKill= str:byte(3)~=90
ENV.sequence= sub(str,4) ENV.sequence= str:sub(4)
return true return true
end end
end end
@@ -381,9 +381,9 @@ do--function DATA.saveRecording()
JSON.encode(getModList()).."\n".. JSON.encode(getModList()).."\n"..
DATA.dumpRecording(GAME.rep) DATA.dumpRecording(GAME.rep)
love.filesystem.write(fileName,fileHead.."\n"..data.compress("string","zlib",fileBody)) love.filesystem.write(fileName,fileHead.."\n"..data.compress('string','zlib',fileBody))
ins(REPLAY,fileName) ins(REPLAY,fileName)
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")

View File

@@ -1,7 +1,4 @@
local gc=love.graphics local gc=love.graphics
local gc_setColor,gc_setLineWidth,gc_setShader=gc.setColor,gc.setLineWidth,gc.setShader
local gc_push,gc_pop,gc_origin,gc_translate=gc.push,gc.pop,gc.origin,gc.translate
local gc_draw,gc_printf,gc_line,gc_rectangle=gc.draw,gc.printf,gc.line,gc.rectangle
@@ -69,7 +66,7 @@ end
function royaleLevelup() function royaleLevelup()
GAME.stage=GAME.stage+1 GAME.stage=GAME.stage+1
local spd local spd
TEXT.show(text.royale_remain:gsub("$1",#PLY_ALIVE),640,200,40,"beat",.3) TEXT.show(text.royale_remain:gsub("$1",#PLY_ALIVE),640,200,40,'beat',.3)
if GAME.stage==2 then if GAME.stage==2 then
spd=30 spd=30
elseif GAME.stage==3 then elseif GAME.stage==3 then
@@ -77,7 +74,7 @@ function royaleLevelup()
for _,P in next,PLY_ALIVE do for _,P in next,PLY_ALIVE do
P.gameEnv.garbageSpeed=.6 P.gameEnv.garbageSpeed=.6
end end
if PLAYERS[1].alive then BGM.play("cruelty")end if PLAYERS[1].alive then BGM.play('cruelty')end
elseif GAME.stage==4 then elseif GAME.stage==4 then
spd=10 spd=10
for _,P in next,PLY_ALIVE do for _,P in next,PLY_ALIVE do
@@ -90,7 +87,7 @@ function royaleLevelup()
end end
elseif GAME.stage==6 then elseif GAME.stage==6 then
spd=3 spd=3
if PLAYERS[1].alive then BGM.play("final")end if PLAYERS[1].alive then BGM.play('final')end
end end
for _,P in next,PLY_ALIVE do for _,P in next,PLY_ALIVE do
P.gameEnv.drop=spd P.gameEnv.drop=spd
@@ -120,8 +117,8 @@ function freshDate(mode)
if STAT.date~=date then if STAT.date~=date then
STAT.date=date STAT.date=date
STAT.todayTime=0 STAT.todayTime=0
if not mode:find("q")then if not mode:find'q'then
LOG.print(text.newDay,"message") LOG.print(text.newDay,'message')
end end
return true return true
end end
@@ -135,10 +132,10 @@ function legalGameTime()--Check if today's playtime is legal
if STAT.todayTime<14400 then if STAT.todayTime<14400 then
return true return true
elseif STAT.todayTime<21600 then elseif STAT.todayTime<21600 then
LOG.print(text.playedLong,"warning") LOG.print(text.playedLong,'warn')
return true return true
else else
LOG.print(text.playedTooMuch,"warning") LOG.print(text.playedTooMuch,'warn')
return false return false
end end
end end
@@ -147,8 +144,8 @@ end
function mergeStat(stat,delta)--Merge delta stat. to global stat. function mergeStat(stat,delta)--Merge delta stat. to global stat.
for k,v in next,delta do for k,v in next,delta do
if type(v)=="table"then if type(v)=='table'then
if type(stat[k])=="table"then if type(stat[k])=='table'then
mergeStat(stat[k],v) mergeStat(stat[k],v)
end end
else else
@@ -175,7 +172,7 @@ function destroyPlayers()--Destroy all player objects, restore freerows and free
FREEROW.discard(rem(P.field)) FREEROW.discard(rem(P.field))
FREEROW.discard(rem(P.visTime)) FREEROW.discard(rem(P.visTime))
end end
if P.AI_mode=="CC"then if P.AI_mode=='CC'then
CC.free(P.bot_opt) CC.free(P.bot_opt)
CC.free(P.bot_wei) CC.free(P.bot_wei)
CC.destroy(P.AI_bot) CC.destroy(P.AI_bot)
@@ -183,7 +180,7 @@ function destroyPlayers()--Destroy all player objects, restore freerows and free
end end
PLAYERS[i]=nil PLAYERS[i]=nil
end end
TABLE.clear(PLY_ALIVE) TABLE.cut(PLY_ALIVE)
collectgarbage() collectgarbage()
end end
function pauseGame() function pauseGame()
@@ -201,7 +198,7 @@ function pauseGame()
if not(GAME.result or GAME.replaying)then if not(GAME.result or GAME.replaying)then
GAME.pauseCount=GAME.pauseCount+1 GAME.pauseCount=GAME.pauseCount+1
end end
SCN.swapTo("pause","none") SCN.swapTo('pause','none')
end end
end end
function applyCustomGame()--Apply CUSTOMENV, BAG, MISSION function applyCustomGame()--Apply CUSTOMENV, BAG, MISSION
@@ -229,11 +226,11 @@ function loadGame(M,ifQuickPlay,ifNet)--Load a mode and go to game scene
GAME.init=true GAME.init=true
GAME.net=ifNet GAME.net=ifNet
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].." "..text.modes[M][2])
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
end end
end end
@@ -245,13 +242,25 @@ function initPlayerPosition(sudden)--Set initial position for every player
end end
end end
local method=sudden and"setPosition"or"movePosition" local method=sudden and'setPosition'or'movePosition'
L[1][method](L[1],340,75,1) L[1][method](L[1],340,75,1)
if #L<=5 then if #L<=5 then
if L[2]then L[2][method](L[2],965,390,.5)end 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[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[4]then L[4][method](L[4], 20,390,.5)end
if L[5]then L[5][method](L[5],20,30,.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 elseif #L<=49 then
local n=2 local n=2
for i=1,4 do for j=1,6 do for i=1,4 do for j=1,6 do
@@ -317,7 +326,7 @@ do--function resetGameData(args)
if time%20==0 then if time%20==0 then
local M=GAME.mod[time/20] local M=GAME.mod[time/20]
if M then if M then
TEXT.show(M.id,700+(time-20)%120*4,36,45,"spin",.5) TEXT.show(M.id,700+(time-20)%120*4,36,45,'spin',.5)
else else
return return
end end
@@ -335,12 +344,12 @@ do--function resetGameData(args)
--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={}
for _,key in next,gameSetting do for _,key in next,gameSetting do
if type(SETTING[key])=="table"then if type(SETTING[key])=='table'then
S[key]=TABLE.shift(SETTING[key]) S[key]=TABLE.shift(SETTING[key])
else else
S[key]=SETTING[key] S[key]=SETTING[key]
@@ -358,12 +367,12 @@ do--function resetGameData(args)
GAME.result=false GAME.result=false
GAME.warnLVL0=0 GAME.warnLVL0=0
GAME.warnLVL=0 GAME.warnLVL=0
if args:find("r")then if args:find'r'then
GAME.frameStart=0 GAME.frameStart=0
GAME.recording=false GAME.recording=false
GAME.replaying=1 GAME.replaying=1
else else
GAME.frameStart=args:find("n")and 0 or 150-SETTING.reTime*15 GAME.frameStart=args:find'n'and 0 or 150-SETTING.reTime*15
GAME.seed=seed or math.random(1046101471,2662622626) GAME.seed=seed or math.random(1046101471,2662622626)
GAME.pauseTime=0 GAME.pauseTime=0
GAME.pauseCount=0 GAME.pauseCount=0
@@ -378,7 +387,7 @@ do--function resetGameData(args)
destroyPlayers() destroyPlayers()
GAME.curMode.load() GAME.curMode.load()
initPlayerPosition(args:find("q")) initPlayerPosition(args:find'q')
VK.restore() VK.restore()
if GAME.modeEnv.task then if GAME.modeEnv.task then
for i=1,#PLAYERS do for i=1,#PLAYERS do
@@ -387,7 +396,7 @@ do--function resetGameData(args)
end end
BG.set(GAME.modeEnv.bg) BG.set(GAME.modeEnv.bg)
local bgm=GAME.modeEnv.bgm local bgm=GAME.modeEnv.bgm
BGM.play(type(bgm)=="string"and bgm or type(bgm)=="table"and bgm[math.random(#bgm)]) BGM.play(type(bgm)=='string'and bgm or type(bgm)=='table'and bgm[math.random(#bgm)])
TEXT.clear() TEXT.clear()
if GAME.modeEnv.royaleMode then if GAME.modeEnv.royaleMode then
@@ -404,8 +413,10 @@ do--function resetGameData(args)
STAT.game=STAT.game+1 STAT.game=STAT.game+1
FREEROW.reset(30*#PLAYERS) FREEROW.reset(30*#PLAYERS)
TASK.removeTask_code(tick_showMods) TASK.removeTask_code(tick_showMods)
TASK.new(tick_showMods) if GAME.setting.allowMod then
SFX.play("ready") TASK.new(tick_showMods)
end
SFX.play('ready')
collectgarbage() collectgarbage()
end end
end end
@@ -474,42 +485,52 @@ do--function drawFWM()
function drawFWM() function drawFWM()
local t=TIME() local t=TIME()
setFont(25) setFont(25)
gc_setColor(1,1,1,.2+.1*(sin(3*t)+sin(2.6*t))) 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)) mStr(m[_G["\83\69\84\84\73\78\71"]["\108\97\110\103"]or m[1]],240,60+26*sin(t))
end end
end end
function drawSelfProfile() do--function drawSelfProfile()
local selfAvatar=USERS.getAvatar(USER.uid) local name
gc_push("transform") local textObject,scaleK,width,offY
gc_translate(1280,0) function drawSelfProfile()
local selfAvatar=USERS.getAvatar(USER.uid)
gc.push('transform')
gc.translate(1280,0)
--Draw avatar --Draw avatar
gc_setLineWidth(2) gc.setLineWidth(2)
gc_setColor(.3,.3,.3,.8)gc_rectangle("fill",-260,0,260,80) gc.setColor(.3,.3,.3,.8)gc.rectangle('fill',-300,0,300,80)
gc_setColor(1,1,1)gc_rectangle("line",-260,0,260,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
setFont(30) if name~=USERS.getUsername(USER.uid)then
gc_printf(USERS.getUsername(USER.uid),-342,5,260,"right") name=USERS.getUsername(USER.uid)
textObject=gc.newText(getFont(30),name)
width=textObject:getWidth()
scaleK=210/math.max(width,210)
offY=textObject:getHeight()/2
end
gc.draw(textObject,-82,26,nil,scaleK,nil,width,offY)
--Draw lv. & xp. --Draw lv. & xp.
gc_draw(TEXTURE.lvIcon[USER.lv],-255,50) gc.draw(TEXTURE.lvIcon[USER.lv],-295,50)
gc_line(-230,55,-80,55,-80,70,-230,70) gc.line(-270,55,-80,55,-80,70,-270,70)
gc_rectangle("fill",-230,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
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

View File

@@ -4,94 +4,94 @@ local function disableKey(P,key)
end end
MODOPT={--Mod options MODOPT={--Mod options
{no=0,id="NX",name="next", {no=0,id="NX",name="next",
key="q",x=80,y=230,color="O", key="q",x=80,y=230,color='O',
list={0,1,2,3,4,5,6}, list={0,1,2,3,4,5,6},
func=function(P,O)P.gameEnv.nextCount=O end, func=function(P,O)P.gameEnv.nextCount=O end,
}, },
{no=1,id="HL",name="hold", {no=1,id="HL",name="hold",
key="w",x=200,y=230,color="O", key="w",x=200,y=230,color='O',
list={0,1,2,3,4,5,6}, list={0,1,2,3,4,5,6},
func=function(P,O)P.gameEnv.holdCount=O end, func=function(P,O)P.gameEnv.holdCount=O end,
unranked=true, unranked=true,
}, },
{no=2,id="FL",name="hideNext", {no=2,id="FL",name="hideNext",
key="e",x=320,y=230,color="A", key="e",x=320,y=230,color='A',
list={1,2,3,4,5}, list={1,2,3,4,5},
func=function(P,O)P.gameEnv.nextStartPos=O +1 end, func=function(P,O)P.gameEnv.nextStartPos=O +1 end,
}, },
{no=3,id="IH",name="infHold", {no=3,id="IH",name="infHold",
key="r",x=440,y=230,color="A", key="r",x=440,y=230,color='A',
func=function(P)P.gameEnv.infHold=true end, func=function(P)P.gameEnv.infHold=true end,
unranked=true, unranked=true,
}, },
{no=4,id="HB",name="hideBlock", {no=4,id="HB",name="hideBlock",
key="y",x=680,y=230,color="V", key="y",x=680,y=230,color='V',
func=function(P)P.gameEnv.block=false end, func=function(P)P.gameEnv.block=false end,
}, },
{no=5,id="HG",name="hideGhost", {no=5,id="HG",name="hideGhost",
key="u",x=800,y=230,color="V", key="u",x=800,y=230,color='V',
func=function(P)P.gameEnv.ghost=false end, func=function(P)P.gameEnv.ghost=false end,
}, },
{no=6,id="HD",name="hidden", {no=6,id="HD",name="hidden",
key="i",x=920,y=230,color="P", key="i",x=920,y=230,color='P',
list={"easy","slow","medium","fast","none"}, list={'easy','slow','medium','fast','none'},
func=function(P,O)P.gameEnv.visible=O end, func=function(P,O)P.gameEnv.visible=O end,
unranked=true, unranked=true,
}, },
{no=7,id="HB",name="hideBoard", {no=7,id="HB",name="hideBoard",
key="o",x=1040,y=230,color="P", key="o",x=1040,y=230,color='P',
list={"down","up","all"}, list={'down','up','all'},
func=function(P,O)P.gameEnv.hideBoard=O end, func=function(P,O)P.gameEnv.hideBoard=O end,
}, },
{no=8,id="FB",name="flipBoard", {no=8,id="FB",name="flipBoard",
key="p",x=1160,y=230,color="J", key="p",x=1160,y=230,color='J',
list={"U-D","L-R","180"}, list={'U-D','L-R','180'},
func=function(P,O)P.gameEnv.flipBoard=O end, func=function(P,O)P.gameEnv.flipBoard=O end,
}, },
{no=9,id="DT",name="dropDelay", {no=9,id="DT",name="dropDelay",
key="a",x=140,y=350,color="R", key="a",x=140,y=350,color='R',
list={0,.125,.25,.5,1,2,3,4,5,6,7,8,9,10,12,14,16,18,20,25,30,40,60,180,1e99}, list={0,.125,.25,.5,1,2,3,4,5,6,7,8,9,10,12,14,16,18,20,25,30,40,60,180,1e99},
func=function(P,O)P.gameEnv.drop=O end, func=function(P,O)P.gameEnv.drop=O end,
unranked=true, unranked=true,
}, },
{no=10,id="LT",name="lockDelay", {no=10,id="LT",name="lockDelay",
key="s",x=260,y=350,color="R", key="s",x=260,y=350,color='R',
list={0,1,2,3,4,5,6,7,8,9,10,12,14,16,18,20,25,30,40,60,180,1e99}, list={0,1,2,3,4,5,6,7,8,9,10,12,14,16,18,20,25,30,40,60,180,1e99},
func=function(P,O)P.gameEnv.lock=O end, func=function(P,O)P.gameEnv.lock=O end,
unranked=true, unranked=true,
}, },
{no=11,id="ST",name="waitDelay", {no=11,id="ST",name="waitDelay",
key="d",x=380,y=350,color="R", key="d",x=380,y=350,color='R',
list={0,1,2,3,4,5,6,7,8,10,15,20,30,60}, list={0,1,2,3,4,5,6,7,8,10,15,20,30,60},
func=function(P,O)P.gameEnv.wait=O end, func=function(P,O)P.gameEnv.wait=O end,
unranked=true, unranked=true,
}, },
{no=12,id="CT",name="fallDelay", {no=12,id="CT",name="fallDelay",
key="f",x=500,y=350,color="R", key="f",x=500,y=350,color='R',
list={0,1,2,3,4,5,6,7,8,10,15,20,30,60}, list={0,1,2,3,4,5,6,7,8,10,15,20,30,60},
func=function(P,O)P.gameEnv.fall=O end, func=function(P,O)P.gameEnv.fall=O end,
unranked=true, unranked=true,
}, },
{no=13,id="LF",name="life", {no=13,id="LF",name="life",
key="j",x=860,y=350,color="Y", key="j",x=860,y=350,color='Y',
list={0,1,2,3,5,10,15,26,42,87,500}, list={0,1,2,3,5,10,15,26,42,87,500},
func=function(P,O)P.gameEnv.life=O end, func=function(P,O)P.gameEnv.life=O end,
unranked=true, unranked=true,
}, },
{no=14,id="FB",name="forceB2B", {no=14,id="FB",name="forceB2B",
key="k",x=980,y=350,color="Y", key="k",x=980,y=350,color='Y',
func=function(P)P.gameEnv.b2bKill=true end, func=function(P)P.gameEnv.b2bKill=true end,
unranked=true, unranked=true,
}, },
{no=15,id="PF",name="forceFinesse", {no=15,id="PF",name="forceFinesse",
key="l",x=1100,y=350,color="Y", key="l",x=1100,y=350,color='Y',
func=function(P)P.gameEnv.fineKill=true end, func=function(P)P.gameEnv.fineKill=true end,
unranked=true, unranked=true,
}, },
{no=16,id="TL",name="tele", {no=16,id="TL",name="tele",
key="z",x=200,y=470,color="lH", key="z",x=200,y=470,color='lH',
func=function(P) func=function(P)
P.gameEnv.das,P.gameEnv.arr=0,0 P.gameEnv.das,P.gameEnv.arr=0,0
P.gameEnv.sddas,P.gameEnv.sdarr=0,0 P.gameEnv.sddas,P.gameEnv.sdarr=0,0
@@ -99,7 +99,7 @@ MODOPT={--Mod options
unranked=true, unranked=true,
}, },
{no=17,id="FX",name="noRotation", {no=17,id="FX",name="noRotation",
key="x",x=320,y=470,color="lH", key="x",x=320,y=470,color='lH',
func=function(P) func=function(P)
disableKey(P,3) disableKey(P,3)
disableKey(P,4) disableKey(P,4)
@@ -108,7 +108,7 @@ MODOPT={--Mod options
unranked=true, unranked=true,
}, },
{no=18,id="GL",name="noMove", {no=18,id="GL",name="noMove",
key="c",x=440,y=470,color="lH", key="c",x=440,y=470,color='lH',
func=function(P) func=function(P)
disableKey(P,1)disableKey(P,2) disableKey(P,1)disableKey(P,2)
disableKey(P,11)disableKey(P,12) disableKey(P,11)disableKey(P,12)
@@ -118,21 +118,21 @@ MODOPT={--Mod options
unranked=true, unranked=true,
}, },
{no=19,id="CS",name="customSeq", {no=19,id="CS",name="customSeq",
key="b",x=680,y=470,color="B", key="b",x=680,y=470,color='B',
list={"bag","his4","c2","rnd","mess","reverb"}, list={'bag','his4','c2','rnd','mess','reverb'},
func=function(P,O)P.gameEnv.sequence=O end, func=function(P,O)P.gameEnv.sequence=O end,
unranked=true, unranked=true,
}, },
{no=20,id="PS",name="pushSpeed", {no=20,id="PS",name="pushSpeed",
key="n",x=800,y=470,color="B", key="n",x=800,y=470,color='B',
list={.5,1,2,3,5,15,1e99}, list={.5,1,2,3,5,15,1e99},
func=function(P,O)P.gameEnv.pushSpeed=O end, func=function(P,O)P.gameEnv.pushSpeed=O end,
unranked=true, unranked=true,
}, },
{no=21,id="BN",name="boneBlock", {no=21,id="BN",name="boneBlock",
key="m",x=920,y=470,color="B", key="m",x=920,y=470,color='B',
list={"on","off"}, list={'on','off'},
func=function(P,O)P.gameEnv.bone=O=="on"end, func=function(P,O)P.gameEnv.bone=O=='on'end,
}, },
} }
for i=1,#MODOPT do for i=1,#MODOPT do
@@ -193,8 +193,7 @@ USER=FILE.load("conf/user")or{--User infomation
--Local data --Local data
xp=0,lv=1, xp=0,lv=1,
} }
CUSTOMENV=FILE.load("conf/customEnv") customEnv0={
if not CUSTOMENV or CUSTOMENV.version~=VERSION.code then CUSTOMENV={--gameEnv for cutsom game
version=VERSION.code, version=VERSION.code,
--Basic --Basic
@@ -213,7 +212,7 @@ if not CUSTOMENV or CUSTOMENV.version~=VERSION.code then CUSTOMENV={--gameEnv fo
bone=false, bone=false,
--Rule --Rule
sequence="bag", sequence='bag',
fieldH=20, fieldH=20,
ospin=true, ospin=true,
@@ -221,7 +220,7 @@ if not CUSTOMENV or CUSTOMENV.version~=VERSION.code then CUSTOMENV={--gameEnv fo
b2bKill=false, b2bKill=false,
easyFresh=true, easyFresh=true,
deepDrop=false, deepDrop=false,
visible="show", visible='show',
freshLimit=1e99, freshLimit=1e99,
@@ -231,15 +230,17 @@ if not CUSTOMENV or CUSTOMENV.version~=VERSION.code then CUSTOMENV={--gameEnv fo
missionKill=false, missionKill=false,
--Else --Else
bg="none", bg='blockfall',
bgm="infinite", bgm='infinite',
}end }
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,
sddas=0,sdarr=2, sddas=0,sdarr=2,
ihs=true,irs=true,ims=true, ihs=true,irs=true,ims=true,
RS="TRS", RS='TRS',
swap=true, swap=true,
--System --System
@@ -291,7 +292,7 @@ SETTING={--Settings
stereo=.7, stereo=.7,
vib=0, vib=0,
voc=0, voc=0,
cv="miya", cv='miya',
--Virtualkey --Virtualkey
VKSFX=.2,--SFX volume VKSFX=.2,--SFX volume
@@ -320,7 +321,7 @@ else
send=0,recv=0,pend=0,off=0, send=0,recv=0,pend=0,off=0,
clear={},spin={}, clear={},spin={},
pc=0,hpc=0,b2b=0,b3b=0,score=0, pc=0,hpc=0,b2b=0,b3b=0,score=0,
lastPlay="sprint_10l",--Last played mode ID lastPlay='sprint_10l',--Last played mode ID
date=false, date=false,
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

View File

@@ -6,7 +6,7 @@ local noKickSet,noKickSet_180,pushZero do
noKickSet_180={[01]=Zero,[10]=Zero,[03]=Zero,[30]=Zero,[12]=Zero,[21]=Zero,[32]=Zero,[23]=Zero,[02]=Zero,[20]=Zero,[13]=Zero,[31]=Zero} noKickSet_180={[01]=Zero,[10]=Zero,[03]=Zero,[30]=Zero,[12]=Zero,[21]=Zero,[32]=Zero,[23]=Zero,[02]=Zero,[20]=Zero,[13]=Zero,[31]=Zero}
function pushZero(t) function pushZero(t)
for _,L in next,t do for _,L in next,t do
if type(L)=="table"then if type(L)=='table'then
for _,v in next,L do for _,v in next,L do
if not v[1]or v[1][1]~=0 or v[1][2]~=0 then if not v[1]or v[1][1]~=0 or v[1][2]~=0 then
table.insert(v,1,map[0][0]) table.insert(v,1,map[0][0])
@@ -26,9 +26,9 @@ end
--Make all vec point to the same vec --Make all vec point to the same vec
local function collectSet(set) local function collectSet(set)
if type(set)~="table"then return end if type(set)~='table'then return end
for _,list in next,set do for _,list in next,set do
if type(list[1])=="string"then if type(list[1])=='string'then
vecStrConv(list) vecStrConv(list)
end end
end end
@@ -52,20 +52,20 @@ local function flipList(O)
end end
local function reflect(a) local function reflect(a)
local b={} return{
b[03]=flipList(a[01]) [03]=flipList(a[01]),
b[01]=flipList(a[03]) [01]=flipList(a[03]),
b[30]=flipList(a[10]) [30]=flipList(a[10]),
b[32]=flipList(a[12]) [32]=flipList(a[12]),
b[23]=flipList(a[21]) [23]=flipList(a[21]),
b[21]=flipList(a[23]) [21]=flipList(a[23]),
b[10]=flipList(a[30]) [10]=flipList(a[30]),
b[12]=flipList(a[32]) [12]=flipList(a[32]),
b[02]=flipList(a[02]) [02]=flipList(a[02]),
b[20]=flipList(a[20]) [20]=flipList(a[20]),
b[31]=flipList(a[13]) [31]=flipList(a[13]),
b[13]=flipList(a[31]) [13]=flipList(a[31]),
return b }
end end
local TRS local TRS
@@ -75,12 +75,15 @@ do
{333,5,2,-1,-1,0},{333,5,2, 0,-1,0},{333,5,0, 0, 0,0},--T {333,5,2,-1,-1,0},{333,5,2, 0,-1,0},{333,5,0, 0, 0,0},--T
{313,1,2,-1, 0,0},{313,1,2, 0,-1,0},{313,1,2, 0, 0,0},--Z {313,1,2,-1, 0,0},{313,1,2, 0,-1,0},{313,1,2, 0, 0,0},--Z
{131,2,2, 0, 0,0},{131,2,2,-1,-1,0},{131,2,2,-1, 0,0},--S {131,2,2, 0, 0,0},{131,2,2,-1,-1,0},{131,2,2,-1, 0,0},--S
{331,3,2, 0,-1,0},{113,3,0, 0, 0,0},{113,3,2,-1, 0,0},--J {331,3,2, 0,-1,0},--J(farDown)
{113,4,2,-1,-1,0},{331,4,0,-1, 0,0},{331,4,2, 0, 0,0},--L {113,4,2,-1,-1,0},--L(farDown)
{222,7,2,-1, 0,1},{222,7,2,-2, 0,1},{222,7,2, 0, 0,1},--I {113,3,2,-1,-1,0},{113,3,0, 0, 0,0},--J
{331,4,2, 0,-1,0},{331,4,0,-1, 0,0},--L
{222,7,2,-1, 0,2},{222,7,2,-2, 0,2},{222,7,2, 0, 0,2},--I
{222,7,0,-1, 1,1},{222,7,0,-2, 1,1},{222,7,0, 0, 1,1},--I(high)
{121,6,0, 1,-1,2},{112,6,0, 2,-1,2},{122,6,0, 1,-2,2},--O {121,6,0, 1,-1,2},{112,6,0, 2,-1,2},{122,6,0, 1,-2,2},--O
{323,6,0,-1,-1,2},{332,6,0,-2,-1,2},{322,6,0,-1,-2,2},--O {323,6,0,-1,-1,2},{332,6,0,-2,-1,2},{322,6,0,-1,-2,2},--O
}--{keys, ID, dir, dx, dy, freeLevel (0=immovable,1=L+R immovable,2=free)} }--{keys, ID, dir, dx, dy, freeLevel (0=immovable, 1=U/D-immovable, 2=free)}
local XspinList={ local XspinList={
{{ 1,-1},{ 1, 0},{ 1, 1},{ 1,-2},{ 1, 2}}, {{ 1,-1},{ 1, 0},{ 1, 1},{ 1,-2},{ 1, 2}},
{{ 0,-1},{ 0,-2},{ 0, 1},{ 0,-2},{ 0, 2}}, {{ 0,-1},{ 0,-2},{ 0, 1},{ 0,-2},{ 0, 2}},
@@ -133,12 +136,12 @@ do
},--T },--T
function(P,d) function(P,d)
if P.gameEnv.easyFresh then if P.gameEnv.easyFresh then
P:freshBlock("fresh") P:freshBlock('fresh')
end end
if P.gameEnv.ospin then if P.gameEnv.ospin then
local x,y=P.curX,P.curY local x,y=P.curX,P.curY
if y==P.ghoY and((P:solid(x-1,y)or P:solid(x-1,y+1)))and(P:solid(x+2,y)or P:solid(x+2,y+1))then if y==P.ghoY and((P:solid(x-1,y)or P:solid(x-1,y+1)))and(P:solid(x+2,y)or P:solid(x+2,y+1))then
if P.sound then SFX.play("rotatekick",nil,P:getCenterX()*.15)end if P.sound then SFX.play('rotatekick',nil,P:getCenterX()*.15)end
P.spinSeq=P.spinSeq%100*10+d P.spinSeq=P.spinSeq%100*10+d
if P.spinSeq<100 then return end if P.spinSeq<100 then return end
for i=1,#OspinList do for i=1,#OspinList do
@@ -147,7 +150,13 @@ do
local id,dir=L[2],L[3] local id,dir=L[2],L[3]
local bk=BLOCKS[id][dir] local bk=BLOCKS[id][dir]
x,y=P.curX+L[4],P.curY+L[5] x,y=P.curX+L[4],P.curY+L[5]
if not P:ifoverlap(bk,x,y)and(L[6]>0 or P:ifoverlap(bk,x-1,y)and P:ifoverlap(bk,x+1,y))and(L[6]==2 or P:ifoverlap(bk,x,y-1))and P:ifoverlap(bk,x,y+1)then if
not P:ifoverlap(bk,x,y)and(
L[6]>0 or(P:ifoverlap(bk,x-1,y)and P:ifoverlap(bk,x+1,y))
)and(
L[6]==2 or(P:ifoverlap(bk,x,y-1)and P:ifoverlap(bk,x,y+1))
)
then
local C=P.cur local C=P.cur
C.id=id C.id=id
C.bk=bk C.bk=bk
@@ -155,18 +164,18 @@ do
P.cur.dir,P.cur.sc=dir,SCS[id][dir] P.cur.dir,P.cur.sc=dir,SCS[id][dir]
P.spinLast=2 P.spinLast=2
P.stat.rotate=P.stat.rotate+1 P.stat.rotate=P.stat.rotate+1
P:freshBlock("move") P:freshBlock('move')
P.spinSeq=0 P.spinSeq=0
return return
end end
end end
end end
else else
if P.sound then SFX.play("rotate",nil,P:getCenterX()*.15)end if P.sound then SFX.play('rotate',nil,P:getCenterX()*.15)end
P.spinSeq=0 P.spinSeq=0
end end
else else
if P.sound then SFX.play("rotate",nil,P:getCenterX()*.15)end if P.sound then SFX.play('rotate',nil,P:getCenterX()*.15)end
end end
end,--O end,--O
{ {
@@ -277,19 +286,19 @@ do
[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
local kickData=XspinList[d] local kickData=XspinList[d]
for test=1,#kickData do for test=1,#kickData do
local x,y=P.curX+kickData[test][1],P.curY+kickData[test][2] local x,y=P.curX+kickData[test][1],P.curY+kickData[test][2]
if not P:ifoverlap(P.cur.bk,x,y)then if not P:ifoverlap(P.cur.bk,x,y)then
P.curX,P.curY=x,y P.curX,P.curY=x,y
P.spinLast=1 P.spinLast=1
P:freshBlock("move") P:freshBlock('move')
P.stat.rotate=P.stat.rotate+1 P.stat.rotate=P.stat.rotate+1
return return
end end
end end
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"},

View File

@@ -786,6 +786,28 @@ return{
"https://github.com/26F-Studio/Techmino", "https://github.com/26F-Studio/Techmino",
}, },
--Savedata managing
{"Console",
"console cmd commamd minglinghang kongzhitai",
"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",
},
{"Reset unlock",
"reset unlock chongzhi qingkong jiesuo",
"command",
"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 chongzhi paihangbang",
"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",
},
{"Reset stat.",
"reset statistic data chongzhi tongji shuju",
"command",
"Go to console and type \"rm conf/data\" then press enter.\nEffected after restart game\nplay one game to get data back",
},
--English --English
{"SFX", {"SFX",
"sfx soundeffects", "sfx soundeffects",

View File

@@ -795,6 +795,28 @@ return{
"https://github.com/26F-Studio/Techmino", "https://github.com/26F-Studio/Techmino",
}, },
--存档管理
{"控制台",
"console cmd commamd minglinghang kongzhitai",
"command",
"目前进入控制台的方式是在主菜单点击特定位置/按键盘某个键数次",
},
{"重置解锁状态",
"reset unlock chongzhi qingkong jiesuo",
"command",
"前往控制台输入\"rm conf/unlock\"并回车\n需要重启游戏生效,若反悔,刷新任意一个模式在地图上的状态即可恢复文件",
},
{"重置本地排行榜",
"reset chongzhi paihangbang",
"command",
"前往控制台输入\"rm /s record\"并回车\n需要重启游戏生效,若反悔,玩一局并更新模式排行榜即可恢复保存对应模式的单个排行榜文件",
},
{"重置统计数据",
"reset statistic data chongzhi tongji shuju",
"command",
"前往控制台输入\"rm conf/data\"并回车\n需要重启游戏生效,若反悔,玩一局并触发结算即可恢复文件",
},
--英文 --英文
{"SFX", {"SFX",
"sfx", "sfx",
@@ -902,7 +924,7 @@ return{
{"MrZ", {"MrZ",
"mrz zjiang ddd 026 t626", "mrz zjiang ddd 026 t626",
"name", "name",
"【研究群】「T026」\n40行25.95秒, MPH40行57秒排世界第8(jstris)tetr.io段位Utop数据约40L50A TGM3(W)shirase金1300通关\n这个游戏的作者!", "【研究群】「T026」\n40行25.95秒, MPH40行57秒排世界第8(jstris)tetr.io段位Utop数据约50L60A TGM3(W)shirase金1300通关\n这个游戏的作者!",
"https://space.bilibili.com/225238922", "https://space.bilibili.com/225238922",
}, },

View File

@@ -98,8 +98,7 @@ return{
started="Playing", started="Playing",
joinRoom="has joined the room.", joinRoom="has joined the room.",
leaveRoom="has left the room.", leaveRoom="has left the room.",
notReady="Waiting", ready="READY",
beReady="Ready",
champion="$1 won", champion="$1 won",
chatRemain="Online: ", chatRemain="Online: ",
chatStart="------Beginning of log------", chatStart="------Beginning of log------",
@@ -255,8 +254,6 @@ return{
new="New Room(2)", new="New Room(2)",
new2="New Room(5)", new2="New Room(5)",
join="Join", join="Join",
up="",
down="",
}, },
net_game={ net_game={
ready="Ready", ready="Ready",
@@ -276,6 +273,7 @@ return{
reTime="Start Delay", reTime="Start Delay",
RS="Rotation System", RS="Rotation System",
layout="Layout", layout="Layout",
dataSaving="Data saving",
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",
@@ -416,8 +414,9 @@ return{
clear="Start-Clear", clear="Start-Clear",
puzzle="Start-Puzzle", puzzle="Start-Puzzle",
reset="Reset (Del)",
advance="More (A)", advance="More (A)",
mod="Mods", mod="Mods (F1)",
field="Edit Field (F)", field="Edit Field (F)",
sequence="Edit Sequence (S)", sequence="Edit Sequence (S)",
mission="Edit Mission (M)", mission="Edit Mission (M)",
@@ -450,20 +449,20 @@ return{
any="Erase", any="Erase",
space="×", space="×",
smartPen="Smart", smart="Smart",
pushLine="Add Line(K)", push="Add Line(K)",
delLine="Del Line(L)", del="Del Line(L)",
copy="Copy", copy="Copy",
paste="Paste", paste="Paste",
clear="Clear", clear="Clear",
demo="Don't Show ×", demo="Don't Show ×",
newPage="New Page(N)", newPg="New Page(N)",
delPage="Del Page(M)", delPg="Del Page(M)",
prevPage="Prev Page", prevPg="Prev Page",
nextPage="Next Page", nextPg="Next Page",
}, },
custom_sequence={ custom_sequence={
title="Custom Game", title="Custom Game",
@@ -659,109 +658,104 @@ return{
importData="Import Stats", importData="Import Stats",
importSetting="Import Settings", importSetting="Import Settings",
importVK="Import Virtual Key Layout", importVK="Import Virtual Key Layout",
reset="Reset?",
resetUnlock="Reset Ranks",
resetRecord="Reset Records",
resetData="Reset Data",
}, },
error={ error={
cmd="Console", console="Console",
quit="Quit", quit="Quit",
}, },
}, },
modes={ modes={
["sprint_10l"]= {"Sprint", "10L", "Clear 10 lines!"}, ['sprint_10l']= {"Sprint", "10L", "Clear 10 lines!"},
["sprint_20l"]= {"Sprint", "20L", "Clear 20 lines!"}, ['sprint_20l']= {"Sprint", "20L", "Clear 20 lines!"},
["sprint_40l"]= {"Sprint", "40L", "Clear 40 lines!"}, ['sprint_40l']= {"Sprint", "40L", "Clear 40 lines!"},
["sprint_100l"]= {"Sprint", "100L", "Clear 100 lines!"}, ['sprint_100l']= {"Sprint", "100L", "Clear 100 lines!"},
["sprint_400l"]= {"Sprint", "400L", "Clear 400 lines!"}, ['sprint_400l']= {"Sprint", "400L", "Clear 400 lines!"},
["sprint_1000l"]= {"Sprint", "1000L", "Clear 1000 lines!"}, ['sprint_1000l']= {"Sprint", "1000L", "Clear 1000 lines!"},
["sprintPenta"]= {"Sprint", "PENTOMINO", "40L with 18 pentominoes."}, ['sprintPenta']= {"Sprint", "PENTOMINO", "40L with 18 pentominoes."},
["sprintMPH"]= {"Sprint", "MPH", "Memoryless\nPreviewless\nHoldless"}, ['sprintMPH']= {"Sprint", "MPH", "Memoryless\nPreviewless\nHoldless"},
["dig_10l"]= {"Dig", "10L", "Dig 10 garbage lines."}, ['dig_10l']= {"Dig", "10L", "Dig 10 garbage lines."},
["dig_40l"]= {"Dig", "40L", "Dig 40 garbage lines."}, ['dig_40l']= {"Dig", "40L", "Dig 40 garbage lines."},
["dig_100l"]= {"Dig", "100L", "Dig 100 garbage lines."}, ['dig_100l']= {"Dig", "100L", "Dig 100 garbage lines."},
["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!"},
["solo_n"]= {"Battle", "NORMAL", "Defeat the AI!"}, ['solo_n']= {"Battle", "NORMAL", "Defeat the AI!"},
["solo_h"]= {"Battle", "HARD", "Defeat the AI!"}, ['solo_h']= {"Battle", "HARD", "Defeat the AI!"},
["solo_l"]= {"Battle", "LUNATIC", "Defeat the AI!"}, ['solo_l']= {"Battle", "LUNATIC", "Defeat the AI!"},
["solo_u"]= {"Battle", "ULTIMATE", "Defeat the AI!"}, ['solo_u']= {"Battle", "ULTIMATE", "Defeat the AI!"},
["techmino49_e"]= {"Tech 49", "EASY", "49-player battle.\nThe last one standing wins."}, ['techmino49_e']= {"Tech 49", "EASY", "49-player battle.\nThe last one standing wins."},
["techmino49_h"]= {"Tech 49", "HARD", "49-player battle.\nThe last one standing wins."}, ['techmino49_h']= {"Tech 49", "HARD", "49-player battle.\nThe last one standing wins."},
["techmino49_u"]= {"Tech 49", "ULTIMATE", "49-player battle.\nThe last one standing wins."}, ['techmino49_u']= {"Tech 49", "ULTIMATE", "49-player battle.\nThe last one standing wins."},
["techmino99_e"]= {"Tech 99", "EASY", "99-player battle.\nThe last one standing wins."}, ['techmino99_e']= {"Tech 99", "EASY", "99-player battle.\nThe last one standing wins."},
["techmino99_h"]= {"Tech 99", "HARD", "99-player battle.\nThe last one standing wins."}, ['techmino99_h']= {"Tech 99", "HARD", "99-player battle.\nThe last one standing wins."},
["techmino99_u"]= {"Tech 99", "ULTIMATE", "99-player battle.\nThe last one standing wins."}, ['techmino99_u']= {"Tech 99", "ULTIMATE", "99-player battle.\nThe last one standing wins."},
["round_e"]= {"Turn-Based", "EASY", "Chess mode"}, ['round_e']= {"Turn-Based", "EASY", "Chess mode"},
["round_n"]= {"Turn-Based", "NORMAL", "Chess mode"}, ['round_n']= {"Turn-Based", "NORMAL", "Chess mode"},
["round_h"]= {"Turn-Based", "HARD", "Chess mode"}, ['round_h']= {"Turn-Based", "HARD", "Chess mode"},
["round_l"]= {"Turn-Based", "LUNATIC", "Chess mode"}, ['round_l']= {"Turn-Based", "LUNATIC", "Chess mode"},
["round_u"]= {"Turn-Based", "ULTIMATE", "Chess mode"}, ['round_u']= {"Turn-Based", "ULTIMATE", "Chess mode"},
["master_beginner"]= {"Master", "LUNATIC", "For 20G beginners."}, ['master_beginner']= {"Master", "LUNATIC", "For 20G beginners."},
["master_advance"]= {"Master", "ULTIMATE", "For 20G pros."}, ['master_advance']= {"Master", "ULTIMATE", "For 20G pros."},
["master_final"]= {"Master", "FINAL", "20G and beyond."}, ['master_final']= {"Master", "FINAL", "20G and beyond."},
["master_phantasm"]= {"Master", "PHANTASM", "???"}, ['master_phantasm']= {"Master", "PHANTASM", "???"},
["master_extra"]= {"GrandMaster", "EXTRA", "An eternity shorter than an instant."}, ['master_extra']= {"GrandMaster", "EXTRA", "An eternity shorter than an instant."},
["rhythm_e"]= {"Rhythm", "EASY", "200-line low-BPM rhythm marathon."}, ['rhythm_e']= {"Rhythm", "EASY", "200-line low-BPM rhythm marathon."},
["rhythm_h"]= {"Rhythm", "HARD", "200-line medium BPM rhythm marathon"}, ['rhythm_h']= {"Rhythm", "HARD", "200-line medium BPM rhythm marathon"},
["rhythm_u"]= {"Rhythm", "ULTIMATE", "200-line high-BPM rhythm marathon."}, ['rhythm_u']= {"Rhythm", "ULTIMATE", "200-line high-BPM rhythm marathon."},
["blind_e"]= {"Blind", "HALF", "For novices."}, ['blind_e']= {"Blind", "HALF", "For novices."},
["blind_n"]= {"Blind", "ALL", "For intermediates."}, ['blind_n']= {"Blind", "ALL", "For intermediates."},
["blind_h"]= {"Blind", "SUDDEN", "For the experienced."}, ['blind_h']= {"Blind", "SUDDEN", "For the experienced."},
["blind_l"]= {"Blind", "SUDDEN+", "For professionals."}, ['blind_l']= {"Blind", "SUDDEN+", "For professionals."},
["blind_u"]= {"Blind", "?", "Are you ready?"}, ['blind_u']= {"Blind", "?", "Are you ready?"},
["blind_wtf"]= {"Blind", "WTF", "You're not ready."}, ['blind_wtf']= {"Blind", "WTF", "You're not ready."},
["classic_fast"]= {"Classic", "CTWC", "High-speed classic mode."}, ['classic_fast']= {"Classic", "CTWC", "High-speed classic mode."},
["survivor_e"]= {"Survivor", "EASY", "How long can you survive?"}, ['survivor_e']= {"Survivor", "EASY", "How long can you survive?"},
["survivor_n"]= {"Survivor", "NORMAL", "How long can you survive?"}, ['survivor_n']= {"Survivor", "NORMAL", "How long can you survive?"},
["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 Offense!"},
["attacker_u"]= {"Attacker", "ULTIMATE", "Practice Offense!"}, ['attacker_u']= {"Attacker", "ULTIMATE", "Practice Offense!"},
["defender_n"]= {"Defender", "NORMAL", "Practice Defense!"}, ['defender_n']= {"Defender", "NORMAL", "Practice Defense!"},
["defender_l"]= {"Defender", "LUNATIC", "Practice Defense!"}, ['defender_l']= {"Defender", "LUNATIC", "Practice Defense!"},
["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", "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!"},
["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!"},
["tech_h_plus"]= {"Tech", "HARD+", "Spins & PCs only."}, ['tech_h_plus']= {"Tech", "HARD+", "Spins & PCs only."},
["tech_l"]= {"Tech", "LUNATIC", "Try to keep the\nBack-to-Back chain!"}, ['tech_l']= {"Tech", "LUNATIC", "Try to keep the\nBack-to-Back chain!"},
["tech_l_plus"]= {"Tech", "LUNATIC+", "Spins & PCs only."}, ['tech_l_plus']= {"Tech", "LUNATIC+", "Spins & PCs only."},
["tech_finesse"]= {"Tech", "FINESSE", "No finesse faults!"}, ['tech_finesse']= {"Tech", "FINESSE", "No finesse faults!"},
["tech_finesse_f"]= {"Tech", "FINESSE+", "No normal clears and finesse faults!"}, ['tech_finesse_f']= {"Tech", "FINESSE+", "No normal clears and finesse faults!"},
["tsd_e"]= {"TSD Challenge", "EASY", "T-Spin Doubles only!"}, ['tsd_e']= {"TSD Challenge", "EASY", "T-Spin Doubles only!"},
["tsd_h"]= {"TSD Challenge", "HARD", "T-Spin Doubles only!"}, ['tsd_h']= {"TSD Challenge", "HARD", "T-Spin Doubles only!"},
["tsd_u"]= {"TSD Challenge", "ULTIMATE", "T-Spin Doubles only!"}, ['tsd_u']= {"TSD Challenge", "ULTIMATE", "T-Spin Doubles only!"},
["backfire_n"]= {"Backfire", "NORMAL", "Hold back the backfiring garbage lines."}, ['backfire_n']= {"Backfire", "NORMAL", "Hold back the backfiring garbage lines."},
["backfire_h"]= {"Backfire", "HARD", "Hold back the backfiring garbage lines."}, ['backfire_h']= {"Backfire", "HARD", "Hold back the backfiring garbage lines."},
["backfire_l"]= {"Backfire", "LUNATIC", "Hold back the backfiring garbage lines."}, ['backfire_l']= {"Backfire", "LUNATIC", "Hold back the backfiring garbage lines."},
["backfire_u"]= {"Backfire", "ULTIMATE", "Hold back the backfiring garbage lines."}, ['backfire_u']= {"Backfire", "ULTIMATE", "Hold back the backfiring garbage lines."},
["zen"]= {"Zen", "200", "A 200-line run without a time limit."}, ['zen']= {'Zen', "200", "A 200-line run without a time limit."},
["ultra"]= {"Ultra", "EXTRA", "A 2-minute score attack."}, ['ultra']= {'Ultra', "EXTRA", "A 2-minute score attack."},
["infinite"]= {"Infinite", "", "It's just a sandbox."}, ['infinite']= {'infinite', "", "It's just a sandbox."},
["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"},
["marathon_bfmax"]= {"Marathon", "ULTIMATE"}, ['marathon_bfmax']= {"Marathon", "ULTIMATE"},
["custom_clear"]= {"Custom", "NORMAL"}, ['custom_clear']= {"Custom", "NORMAL"},
["custom_puzzle"]= {"Custom", "PUZZLE"}, ['custom_puzzle']= {"Custom", "PUZZLE"},
}, },
getTip={refuseCopy=true, getTip={refuseCopy=true,
'Free-to-play block stacking game with a Battle Royale mode!', 'Free-to-play block stacking game with a Battle Royale mode!',
@@ -874,6 +868,6 @@ return{
{C.R,"DT",C.Z," Cannon=",C.P,"TS",C.R,"D",C.Z,"+",C.P,"TS",C.R,"T",C.Z," Cannon"}, {C.R,"DT",C.Z," Cannon=",C.P,"TS",C.R,"D",C.Z,"+",C.P,"TS",C.R,"T",C.Z," Cannon"},
{C.R,"LrL ",C.G,"RlR ",C.B,"LLr ",C.O,"RRl ",C.P,"RRR ",C.P,"LLL ",C.C,"FFF ",C.Y,"RfR ",C.Y,"RRf ",C.Y,"rFF"}, {C.R,"LrL ",C.G,"RlR ",C.B,"LLr ",C.O,"RRl ",C.P,"RRR ",C.P,"LLL ",C.C,"FFF ",C.Y,"RfR ",C.Y,"RRf ",C.Y,"rFF"},
{C.Y,"O-Spin Triple!"}, {C.Y,"O-Spin Triple!"},
{C.Z,"What is an ",C.lC,"X-Spin?"}, {C.Z,"What? ",C.lC,"Xspin?"},
} }
} }

View File

@@ -99,8 +99,7 @@ return{
-- started="Playing", -- started="Playing",
joinRoom="a rejoint le salon.", joinRoom="a rejoint le salon.",
leaveRoom="a quitté le salon.", leaveRoom="a quitté le salon.",
notReady="Attente", -- ready="READY",
beReady="Prêt",
champion="$1 a gagné", champion="$1 a gagné",
chatRemain="En ligne : ", chatRemain="En ligne : ",
chatStart="--------Début des logs--------", chatStart="--------Début des logs--------",
@@ -226,8 +225,6 @@ return{
noRoom="Aucun salon actuellement", noRoom="Aucun salon actuellement",
-- refresh="Refresh", -- refresh="Refresh",
join="Rejoindre", join="Rejoindre",
up="",
down="",
}, },
net_game={ net_game={
-- ready="Ready", -- ready="Ready",
@@ -248,6 +245,7 @@ return{
reTime="Délai de démarrage", reTime="Délai de démarrage",
RS="Système de rotation", RS="Système de rotation",
layout="Disposition", layout="Disposition",
-- dataSaving="Data saving",
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",
@@ -389,8 +387,9 @@ return{
clear="Démarrer Clear", clear="Démarrer Clear",
puzzle="Démarrer Puzzle", puzzle="Démarrer Puzzle",
-- reset="Reset (Del)",
advance="Plus (A)", advance="Plus (A)",
mod="Mods", mod="Mods (F1)",
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)",
@@ -423,20 +422,20 @@ return{
any="Effacer", any="Effacer",
space="×", space="×",
-- smartPen="Smart", -- smart="Smart",
pushLine="Ajouter ligne (K)", push="Ajouter ligne (K)",
delLine="Supprimer ligne (L)", del="Supprimer ligne (L)",
copy="Copier", copy="Copier",
paste="Coller", paste="Coller",
clear="Nettoyer", clear="Nettoyer",
demo="Masquer les ×", demo="Masquer les ×",
newPage="Nouvelle Page(N)", newPg="Nouvelle Page(N)",
delPage="Supp. Page(M)", delPg="Supp. Page(M)",
prevPage="Page Préc.", prevPg="Page Préc.",
nextPage="Page Suiv.", nextPg="Page Suiv.",
}, },
custom_sequence={ custom_sequence={
title="Mode personnalisée", title="Mode personnalisée",
@@ -571,108 +570,103 @@ return{
importData="Importer les Données", importData="Importer les Données",
importSetting="Importer les Paramètres", importSetting="Importer les Paramètres",
importVK="Importer VK", importVK="Importer VK",
reset="Réinitialiser ?",
resetUnlock="Réinitialiser les rangs",
resetRecord="Réinitialiser les records",
resetData="Réinitialiser les données",
}, },
error={ error={
cmd="Console", console="Console",
quit="Quit", quit="Quit",
}, },
}, },
modes={ modes={
["sprint_10l"]= {"Sprint", "10L", "Nettoyez 10 lignes !"}, ['sprint_10l']= {"Sprint", "10L", "Nettoyez 10 lignes !"},
["sprint_20l"]= {"Sprint", "20L", "Nettoyez 20 lignes !"}, ['sprint_20l']= {"Sprint", "20L", "Nettoyez 20 lignes !"},
["sprint_40l"]= {"Sprint", "40L", "Nettoyez 40 lignes !"}, ['sprint_40l']= {"Sprint", "40L", "Nettoyez 40 lignes !"},
["sprint_100l"]= {"Sprint", "100L", "Nettoyez 100 lignes !"}, ['sprint_100l']= {"Sprint", "100L", "Nettoyez 100 lignes !"},
["sprint_400l"]= {"Sprint", "400L", "Nettoyez 400 lignes !"}, ['sprint_400l']= {"Sprint", "400L", "Nettoyez 400 lignes !"},
["sprint_1000l"]= {"Sprint", "1000L", "Nettoyez 1000 lignes !"}, ['sprint_1000l']= {"Sprint", "1000L", "Nettoyez 1000 lignes !"},
["sprintPenta"]= {"Sprint", "Pentomino", "40 lignes avec 18 pentominos."}, ['sprintPenta']= {"Sprint", "Pentomino", "40 lignes avec 18 pentominos."},
["sprintMPH"]= {"Sprint", "MPH", "Memoryless\nPreviewless\nHoldless"}, ['sprintMPH']= {"Sprint", "MPH", "Memoryless\nPreviewless\nHoldless"},
["dig_10l"]= {"Dig", "10L", "Creusez 10 lines"}, ['dig_10l']= {"Dig", "10L", "Creusez 10 lines"},
["dig_40l"]= {"Dig", "40L", "Creusez 40 lines"}, ['dig_40l']= {"Dig", "40L", "Creusez 40 lines"},
["dig_100l"]= {"Dig", "100L", "Creusez 100 lines"}, ['dig_100l']= {"Dig", "100L", "Creusez 100 lines"},
["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 !"},
["solo_n"]= {"Battle", "NORMAL", "Battez l'IA !"}, ['solo_n']= {"Battle", "NORMAL", "Battez l'IA !"},
["solo_h"]= {"Battle", "DIFFICILE", "Battez l'IA !"}, ['solo_h']= {"Battle", "DIFFICILE", "Battez l'IA !"},
["solo_l"]= {"Battle", "LUNATIQUE", "Battez l'IA !"}, ['solo_l']= {"Battle", "LUNATIQUE", "Battez l'IA !"},
["solo_u"]= {"Battle", "ULTIME", "Battez l'IA !"}, ['solo_u']= {"Battle", "ULTIME", "Battez l'IA !"},
["techmino49_e"]= {"Tech 49", "FACILE", "Bataille de 49 joueurs.\nLe dernier en vie gagne."}, ['techmino49_e']= {"Tech 49", "FACILE", "Bataille de 49 joueurs.\nLe dernier en vie gagne."},
["techmino49_h"]= {"Tech 49", "DIFFICILE", "Bataille de 49 joueurs.\nLe dernier en vie gagne."}, ['techmino49_h']= {"Tech 49", "DIFFICILE", "Bataille de 49 joueurs.\nLe dernier en vie gagne."},
["techmino49_u"]= {"Tech 49", "ULTIME", "Bataille de 49 joueurs.\nLe dernier en vie gagne."}, ['techmino49_u']= {"Tech 49", "ULTIME", "Bataille de 49 joueurs.\nLe dernier en vie gagne."},
["techmino99_e"]= {"Tech 99", "FACILE", "Bataille de 99 joueurs.\nLe dernier en vie gagne."}, ['techmino99_e']= {"Tech 99", "FACILE", "Bataille de 99 joueurs.\nLe dernier en vie gagne."},
["techmino99_h"]= {"Tech 99", "DIFFICILE", "Bataille de 99 joueurs.\nLe dernier en vie gagne."}, ['techmino99_h']= {"Tech 99", "DIFFICILE", "Bataille de 99 joueurs.\nLe dernier en vie gagne."},
["techmino99_u"]= {"Tech 99", "ULTIMe", "Bataille de 99 joueurs.\nLe dernier en vie gagne."}, ['techmino99_u']= {"Tech 99", "ULTIMe", "Bataille de 99 joueurs.\nLe dernier en vie gagne."},
["round_e"]= {"Tour à tour", "FACILE", "Mode échecs"}, ['round_e']= {"Tour à tour", "FACILE", "Mode échecs"},
["round_n"]= {"Tour à tour", "NORMAL", "Mode échecs"}, ['round_n']= {"Tour à tour", "NORMAL", "Mode échecs"},
["round_h"]= {"Tour à tour", "DIFFICILE", "Mode échecs"}, ['round_h']= {"Tour à tour", "DIFFICILE", "Mode échecs"},
["round_l"]= {"Tour à tour", "LUNATIQUE", "Mode échecs"}, ['round_l']= {"Tour à tour", "LUNATIQUE", "Mode échecs"},
["round_u"]= {"Tour à tour", "ULTIME", "Mode échecs"}, ['round_u']= {"Tour à tour", "ULTIME", "Mode échecs"},
["master_beginner"]= {"Master", "LUNATIQUE", "Pour les débutants en 20G."}, ['master_beginner']= {"Master", "LUNATIQUE", "Pour les débutants en 20G."},
["master_advance"]= {"Master", "ULTIME", "Challenge 20G pro !"}, ['master_advance']= {"Master", "ULTIME", "Challenge 20G pro !"},
["master_final"]= {"Master", "FINAL", "20G : Un point final impossible à atteindre !"}, ['master_final']= {"Master", "FINAL", "20G : Un point final impossible à atteindre !"},
-- ["master_phantasm"]= {"Mester", "FANTASMA", "20G: ???"}, -- ['master_phantasm']= {"Mester", "FANTASMA", "20G: ???"},
["master_extra"]= {"GrandMaster", "EXTRA", "Tentez de devenir un Grandmaster."}, ['master_extra']= {"GrandMaster", "EXTRA", "Tentez de devenir un Grandmaster."},
-- ["rhythm_e"]= {"Rhythm", "EASY", "200-line low-bpm rhythm marathon."}, -- ['rhythm_e']= {"Rhythm", "EASY", "200-line low-bpm rhythm marathon."},
-- ["rhythm_h"]= {"Rhythm", "HARD", "200-line medium-bpm rhythm marathon"}, -- ['rhythm_h']= {"Rhythm", "HARD", "200-line medium-bpm rhythm marathon"},
-- ["rhythm_u"]= {"Rhythm", "ULTIMATE", "200-line high-bpm rhythm marathon."}, -- ['rhythm_u']= {"Rhythm", "ULTIMATE", "200-line high-bpm rhythm marathon."},
["blind_e"]= {"Aveugle", "MOITIE", "Pour les novices."}, ['blind_e']= {"Aveugle", "MOITIE", "Pour les novices."},
["blind_n"]= {"Aveugle", "TOUT", "Pour les joueurs intermédiaires."}, ['blind_n']= {"Aveugle", "TOUT", "Pour les joueurs intermédiaires."},
["blind_h"]= {"Aveugle", "SOUDAIN", "Pour les bons jooeurs."}, ['blind_h']= {"Aveugle", "SOUDAIN", "Pour les bons jooeurs."},
["blind_l"]= {"Aveugle", "SOUDAIN+", "Pour les pros."}, ['blind_l']= {"Aveugle", "SOUDAIN+", "Pour les pros."},
["blind_u"]= {"Aveugle", "?", "Êtes-vous prêt ?"}, ['blind_u']= {"Aveugle", "?", "Êtes-vous prêt ?"},
["blind_wtf"]= {"Aveugle", "WTF", "Vous n'êtes pas prêt."}, ['blind_wtf']= {"Aveugle", "WTF", "Vous n'êtes pas prêt."},
["classic_fast"]= {"Classic", "CTWC", "Un mode classique rapide."}, ['classic_fast']= {"Classic", "CTWC", "Un mode classique rapide."},
["survivor_e"]= {"Survivor", "FACILE", "Pendant combien de temps survivrez-vous ?"}, ['survivor_e']= {"Survivor", "FACILE", "Pendant combien de temps survivrez-vous ?"},
["survivor_n"]= {"Survivor", "NORMAL", "Pendant combien de temps survivrez-vous ?"}, ['survivor_n']= {"Survivor", "NORMAL", "Pendant combien de temps survivrez-vous ?"},
["survivor_h"]= {"Survivor", "DIFFICILE", "Pendant combien de temps survivrez-vous ?"}, ['survivor_h']= {"Survivor", "DIFFICILE", "Pendant combien de temps survivrez-vous ?"},
["survivor_l"]= {"Survivor", "LUNATIQUE", "Pendant combien de temps survivrez-vous ?"}, ['survivor_l']= {"Survivor", "LUNATIQUE", "Pendant combien de temps survivrez-vous ?"},
["survivor_u"]= {"Survivor", "ULTIME", "Pendant combien de temps survivrez-vous ?"}, ['survivor_u']= {"Survivor", "ULTIME", "Pendant combien de temps survivrez-vous ?"},
["attacker_h"]= {"Attaquant", "DIFFICILE", "Soyez offensifs !"}, ['attacker_h']= {"Attaquant", "DIFFICILE", "Soyez offensifs !"},
["attacker_u"]= {"Attaquant", "ULTIME", "Soyez offensifs !"}, ['attacker_u']= {"Attaquant", "ULTIME", "Soyez offensifs !"},
["defender_n"]= {"Défendant", "NORMAL", "Soyez défensifs !"}, ['defender_n']= {"Défendant", "NORMAL", "Soyez défensifs !"},
["defender_l"]= {"Défendant", "LUNATIQUE", "Soyez défensifs !"}, ['defender_l']= {"Défendant", "LUNATIQUE", "Soyez défensifs !"},
["dig_h"]= {"Perceuse", "DIFFICILE", "Essayez de creuser !"}, ['dig_h']= {"Perceuse", "DIFFICILE", "Essayez de creuser !"},
["dig_u"]= {"Perceuse", "ULTIME", "Essayez de creuser !"}, ['dig_u']= {"Perceuse", "ULTIME", "Essayez de creuser !"},
["bigbang"]= {"Big Bang", "FACILE", "Tutoriel All-Spin\nEn construction..."}, ['bigbang']= {"Big Bang", "FACILE", "Tutoriel All-Spin\nEn construction..."},
["c4wtrain_n"]= {"Mode essai C4W", "NORMAL", "Combos infinis."}, ['c4wtrain_n']= {"Mode essai C4W", "NORMAL", "Combos infinis."},
["c4wtrain_l"]= {"Mode essai C4W", "LUNATIQUE", "Combos infinis."}, ['c4wtrain_l']= {"Mode essai C4W", "LUNATIQUE", "Combos infinis."},
["pctrain_n"]= {"Mode essai PC", "NORMAL", "Mode Perfect Clear simple"}, ['pctrain_n']= {"Mode essai PC", "NORMAL", "Mode Perfect Clear simple"},
["pctrain_l"]= {"Mode essai PC", "LUNATIQUE", "Mode Perfect Clear dur"}, ['pctrain_l']= {"Mode essai PC", "LUNATIQUE", "Mode Perfect Clear dur"},
["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 !"},
["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 !"},
["tech_h_plus"]= {"Tech", "HARD+", "Spin & PC uniquement"}, ['tech_h_plus']= {"Tech", "HARD+", "Spin & PC uniquement"},
["tech_l"]= {"Tech", "LUNATIQUE", "Gardez le B2B !"}, ['tech_l']= {"Tech", "LUNATIQUE", "Gardez le B2B !"},
["tech_l_plus"]= {"Tech", "LUNATIQUE+", "Spin & PC uniquement"}, ['tech_l_plus']= {"Tech", "LUNATIQUE+", "Spin & PC uniquement"},
["tech_finesse"]= {"Tech", "FINESSE", "Pas d'erreurs de finesse !"}, ['tech_finesse']= {"Tech", "FINESSE", "Pas d'erreurs de finesse !"},
["tech_finesse_f"]= {"Tech", "FINESSE+", "Pas de nettoyages normaux, Pas d'erreurs de finesse !"}, ['tech_finesse_f']= {"Tech", "FINESSE+", "Pas de nettoyages normaux, Pas d'erreurs de finesse !"},
["tsd_e"]= {"TSD Challenge", "FACILE", "T-spin doubles uniquement !"}, ['tsd_e']= {"TSD Challenge", "FACILE", "T-spin doubles uniquement !"},
["tsd_h"]= {"TSD Challenge", "DIFFICILE", "T-spin doubles uniquement !"}, ['tsd_h']= {"TSD Challenge", "DIFFICILE", "T-spin doubles uniquement !"},
["tsd_u"]= {"TSD Challenge", "ULTIME", "T-spin doubles uniquement !"}, ['tsd_u']= {"TSD Challenge", "ULTIME", "T-spin doubles uniquement !"},
-- ["backfire_n"]= {"Backfire", "NORMAL", "Self-send garbages"}, -- ['backfire_n']= {"Backfire", "NORMAL", "Self-send garbages"},
-- ["backfire_h"]= {"Backfire", "HARD", "Self-send garbages"}, -- ['backfire_h']= {"Backfire", "HARD", "Self-send garbages"},
-- ["backfire_l"]= {"Backfire", "LUNATIC", "Self-send garbages"}, -- ['backfire_l']= {"Backfire", "LUNATIC", "Self-send garbages"},
-- ["backfire_u"]= {"Backfire", "ULTIMATE", "Self-send garbages"}, -- ['backfire_u']= {"Backfire", "ULTIMATE", "Self-send garbages"},
["zen"]= {"Zen", "200", "200 lignes sans limites de temps."}, ['zen']= {'Zen', "200", "200 lignes sans limites de temps."},
["ultra"]= {"Ultra", "EXTRA", "2 minutes pour avoir le meilleur score."}, ['ultra']= {'Ultra', "EXTRA", "2 minutes pour avoir le meilleur score."},
["infinite"]= {"Infini", "", "Mode tranquile."}, ['infinite']= {"Infini", "", "Mode tranquile."},
["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"},
["marathon_bfmax"]= {"Marathon", "ULTIME"}, ['marathon_bfmax']= {"Marathon", "ULTIME"},
["custom_clear"]= {"Perso.", "NORMAL"}, ['custom_clear']= {"Perso.", "NORMAL"},
["custom_puzzle"]= {"Perso.", "PUZZLE"}, ['custom_puzzle']= {"Perso.", "PUZZLE"},
}, },
} }

View File

@@ -99,8 +99,7 @@ return{
-- started="Playing", -- started="Playing",
joinRoom="Entrou a sala.", joinRoom="Entrou a sala.",
leaveRoom="Saiu da sala.", leaveRoom="Saiu da sala.",
-- notReady="Waiting", -- ready="READY",
-- beReady="Ready",
-- champion="$1 won", -- champion="$1 won",
chatRemain="Online: ", chatRemain="Online: ",
chatStart="------Começo do log------", chatStart="------Começo do log------",
@@ -256,8 +255,6 @@ return{
-- new="New Room(2)", -- new="New Room(2)",
-- new2="New Room(5)", -- new2="New Room(5)",
-- join="Join", -- join="Join",
up="",
down="",
}, },
net_game={ net_game={
-- ready="Ready", -- ready="Ready",
@@ -277,6 +274,7 @@ return{
reTime="Demora iniciação", reTime="Demora iniciação",
RS="Sistema de rotação", RS="Sistema de rotação",
layout="Layout", layout="Layout",
-- dataSaving="Data saving",
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",
@@ -417,8 +415,9 @@ return{
clear="Iniciar-Limpar", clear="Iniciar-Limpar",
puzzle="Iniciar-Puzzle", puzzle="Iniciar-Puzzle",
-- reset="Reset (Del)",
advance="Mais (A)", advance="Mais (A)",
mod="Mods", mod="Mods (F1)",
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)",
@@ -451,20 +450,20 @@ return{
any="Apagar", any="Apagar",
space="×", space="×",
-- smartPen="Smart", -- smart="Smart",
pushLine="Add Linha(K)", push="Add Linha(K)",
delLine="Del Linha(L)", del="Del Linha(L)",
copy="Copiar", copy="Copiar",
paste="Colar", paste="Colar",
clear="Limpar", clear="Limpar",
demo="Não mostrar ×", demo="Não mostrar ×",
newPage="Nova Página(N)", newPg="Nova Página(N)",
delPage="Del Página(M)", delPg="Del Página(M)",
prevPage="Página Ant.", prevPg="Página Ant.",
nextPage="Prox. Página", nextPg="Prox. Página",
}, },
custom_sequence={ custom_sequence={
title="Jogo Custom", title="Jogo Custom",
@@ -656,109 +655,104 @@ return{
importData="Importar estatística", importData="Importar estatística",
importSetting="Importar config.", importSetting="Importar config.",
importVK="Importar layout de hud", importVK="Importar layout de hud",
reset="RESET?",
resetUnlock="Reset ranks",
resetRecord="Reset records",
resetData="Reset data",
}, },
error={ error={
cmd="Console", console="Console",
quit="Quit", quit="Quit",
}, },
}, },
modes={ modes={
["sprint_10l"]= {"Sprint", "10L", "Limpe 10 linhas!"}, ['sprint_10l']= {"Sprint", "10L", "Limpe 10 linhas!"},
["sprint_20l"]= {"Sprint", "20L", "Limpe 20 linhas!"}, ['sprint_20l']= {"Sprint", "20L", "Limpe 20 linhas!"},
["sprint_40l"]= {"Sprint", "40L", "Limpe 40 linhas!"}, ['sprint_40l']= {"Sprint", "40L", "Limpe 40 linhas!"},
["sprint_100l"]= {"Sprint", "100L", "Limpe 100 linhas!"}, ['sprint_100l']= {"Sprint", "100L", "Limpe 100 linhas!"},
["sprint_400l"]= {"Sprint", "400L", "Limpe 400 linhas!"}, ['sprint_400l']= {"Sprint", "400L", "Limpe 400 linhas!"},
["sprint_1000l"]= {"Sprint", "1000L", "Limpe 1000 linhas!"}, ['sprint_1000l']= {"Sprint", "1000L", "Limpe 1000 linhas!"},
["sprintPenta"]= {"Sprint", "PENTOMINO", "Limpe 40 linhas com 18 pentominoes."}, ['sprintPenta']= {"Sprint", "PENTOMINO", "Limpe 40 linhas com 18 pentominoes."},
["sprintMPH"]= {"Sprint", "MPH", "SemMem.\nSemPrévia\nSemSegurar"}, ['sprintMPH']= {"Sprint", "MPH", "SemMem.\nSemPrévia\nSemSegurar"},
["dig_10l"]= {"Cave", "10L", "Cave 10 linhas de lixo."}, ['dig_10l']= {"Cave", "10L", "Cave 10 linhas de lixo."},
["dig_40l"]= {"Cave", "40L", "Cave 40 linhas de lixo."}, ['dig_40l']= {"Cave", "40L", "Cave 40 linhas de lixo."},
["dig_100l"]= {"Cave", "100L", "Cave 100 linhas de lixo."}, ['dig_100l']= {"Cave", "100L", "Cave 100 linhas de lixo."},
["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!"},
["solo_n"]= {"Batalha", "NORMAL", "Derrote a inteligência!"}, ['solo_n']= {"Batalha", "NORMAL", "Derrote a inteligência!"},
["solo_h"]= {"Batalha", "DIFÍCIL", "Derrote a inteligência!"}, ['solo_h']= {"Batalha", "DIFÍCIL", "Derrote a inteligência!"},
["solo_l"]= {"Batalha", "LUNATICO", "Defeat the AI!"}, ['solo_l']= {"Batalha", "LUNATICO", "Defeat the AI!"},
["solo_u"]= {"Batalha", "ULTIMATE", "Defeat the AI!"}, ['solo_u']= {"Batalha", "ULTIMATE", "Defeat the AI!"},
["techmino49_e"]= {"Tech 49", "FÁCIL", "Batalha de 49 jogadores.\nO último vence"}, ['techmino49_e']= {"Tech 49", "FÁCIL", "Batalha de 49 jogadores.\nO último vence"},
["techmino49_h"]= {"Tech 49", "DIFÍCIL", "Batalha de 49 jogadores.\nO último vence."}, ['techmino49_h']= {"Tech 49", "DIFÍCIL", "Batalha de 49 jogadores.\nO último vence."},
["techmino49_u"]= {"Tech 49", "ULTIMATE", "Batalha de 49 jogadores.\nO último vence."}, ['techmino49_u']= {"Tech 49", "ULTIMATE", "Batalha de 49 jogadores.\nO último vence."},
["techmino99_e"]= {"Tech 99", "FÁCIL", "Batalha de 99 jogadores.\nO último vence."}, ['techmino99_e']= {"Tech 99", "FÁCIL", "Batalha de 99 jogadores.\nO último vence."},
["techmino99_h"]= {"Tech 99", "DIFÍCIL", "Batalha de 99 jogadores.\nO último vence."}, ['techmino99_h']= {"Tech 99", "DIFÍCIL", "Batalha de 99 jogadores.\nO último vence."},
["techmino99_u"]= {"Tech 99", "ULTIMATE", "Batalha de 99 jogadores.\nO último vence."}, ['techmino99_u']= {"Tech 99", "ULTIMATE", "Batalha de 99 jogadores.\nO último vence."},
["round_e"]= {"Baseado Turnos", "FÁCIL", "Modo xadrez"}, ['round_e']= {"Baseado Turnos", "FÁCIL", "Modo xadrez"},
["round_n"]= {"Baseado Turnos", "NORMAL", "Modo xadrez"}, ['round_n']= {"Baseado Turnos", "NORMAL", "Modo xadrez"},
["round_h"]= {"Baseado Turnos", "DIFÍCIL", "Modo xadrez"}, ['round_h']= {"Baseado Turnos", "DIFÍCIL", "Modo xadrez"},
["round_l"]= {"Baseado Turnos", "LUNÁTICO", "Modo xadrez"}, ['round_l']= {"Baseado Turnos", "LUNÁTICO", "Modo xadrez"},
["round_u"]= {"Baseado Turnos", "ULTIMATE", "Modo xadrez"}, ['round_u']= {"Baseado Turnos", "ULTIMATE", "Modo xadrez"},
["master_beginner"]= {"Mestre", "LUNÁTICO", "Pra iniciantes de 20G."}, ['master_beginner']= {"Mestre", "LUNÁTICO", "Pra iniciantes de 20G."},
["master_advance"]= {"Mestre", "ULTIMATE", "Desafio 20G profissional!"}, ['master_advance']= {"Mestre", "ULTIMATE", "Desafio 20G profissional!"},
["master_final"]= {"Mestre", "FINAL", "20G: Final inalcançável!"}, ['master_final']= {"Mestre", "FINAL", "20G: Final inalcançável!"},
["master_phantasm"]= {"Mestre", "FANTASMA", "20G: ???"}, ['master_phantasm']= {"Mestre", "FANTASMA", "20G: ???"},
["master_extra"]= {"GrandMaster", "EXTRA", "Para ser um Grand Master, aceite \nesse desafio."}, ['master_extra']= {"GrandMaster", "EXTRA", "Para ser um Grand Master, aceite \nesse desafio."},
-- ["rhythm_e"]= {"Rhythm", "EASY", "200-line low-bpm rhythm marathon."}, -- ['rhythm_e']= {"Rhythm", "EASY", "200-line low-bpm rhythm marathon."},
-- ["rhythm_h"]= {"Rhythm", "HARD", "200-line medium-bpm rhythm marathon"}, -- ['rhythm_h']= {"Rhythm", "HARD", "200-line medium-bpm rhythm marathon"},
-- ["rhythm_u"]= {"Rhythm", "ULTIMATE", "200-line high-bpm rhythm marathon."}, -- ['rhythm_u']= {"Rhythm", "ULTIMATE", "200-line high-bpm rhythm marathon."},
["blind_e"]= {"Cego", "METADE", "Para novatos."}, ['blind_e']= {"Cego", "METADE", "Para novatos."},
["blind_n"]= {"Cego", "TUDO", "Para intermediários."}, ['blind_n']= {"Cego", "TUDO", "Para intermediários."},
["blind_h"]= {"Cego", "DE REPENTE", "Para experientes."}, ['blind_h']= {"Cego", "DE REPENTE", "Para experientes."},
["blind_l"]= {"Cego", "DE REPENTE+", "For professionals."}, ['blind_l']= {"Cego", "DE REPENTE+", "For professionals."},
["blind_u"]= {"Cego", "?", "Are you ready?"}, ['blind_u']= {"Cego", "?", "Are you ready?"},
["blind_wtf"]= {"Cego", "WTF", "You're not ready."}, ['blind_wtf']= {"Cego", "WTF", "You're not ready."},
["classic_fast"]= {"Clássico", "CTWC", "Modo clássico rápido. "}, ['classic_fast']= {"Clássico", "CTWC", "Modo clássico rápido. "},
["survivor_e"]= {"Sobrevivente", "FACIL", "Por quanto sobrevive?"}, ['survivor_e']= {"Sobrevivente", "FACIL", "Por quanto sobrevive?"},
["survivor_n"]= {"Sobrevivente", "NORMAL", "Por quanto sobrevive?"}, ['survivor_n']= {"Sobrevivente", "NORMAL", "Por quanto sobrevive?"},
["survivor_h"]= {"Sobrevivente", "DIFÍCIL", "Por quanto sobrevive?"}, ['survivor_h']= {"Sobrevivente", "DIFÍCIL", "Por quanto sobrevive?"},
["survivor_l"]= {"Sobrevivente", "LUNÁTICO", "Por quanto sobrevive?"}, ['survivor_l']= {"Sobrevivente", "LUNÁTICO", "Por quanto sobrevive?"},
["survivor_u"]= {"Sobrevivente", "ULTIMATE", "Por quanto sobrevive?"}, ['survivor_u']= {"Sobrevivente", "ULTIMATE", "Por quanto sobrevive?"},
["attacker_h"]= {"Atacante", "DIFÍCIL", "Prática de ofensiva!"}, ['attacker_h']= {"Atacante", "DIFÍCIL", "Prática de ofensiva!"},
["attacker_u"]= {"Atacante", "ULTIMATE", "Prática de ofensiva!"}, ['attacker_u']= {"Atacante", "ULTIMATE", "Prática de ofensiva!"},
["defender_n"]= {"Defensor", "NORMAL", "Prática de defensiva!"}, ['defender_n']= {"Defensor", "NORMAL", "Prática de defensiva!"},
["defender_l"]= {"Defensor", "LUNÁTICO", "Prática de defensiva!"}, ['defender_l']= {"Defensor", "LUNÁTICO", "Prática de defensiva!"},
["dig_h"]= {"Cavador", "DIFÍCIL", "Prática de cavar!"}, ['dig_h']= {"Cavador", "DIFÍCIL", "Prática de cavar!"},
["dig_u"]= {"Cavador", "ULTIMATE", "Prática de cavar!"}, ['dig_u']= {"Cavador", "ULTIMATE", "Prática de cavar!"},
["bigbang"]= {"Big Bang", "FÁCIL", "Tutorial de todos giros!\n[Em construção]"}, ['bigbang']= {"Big Bang", "FÁCIL", "Tutorial de todos giros!\n[Em construção]"},
["c4wtrain_n"]= {"Treinamento C4W", "NORMAL", "Combos infinitos."}, ['c4wtrain_n']= {"Treinamento C4W", "NORMAL", "Combos infinitos."},
["c4wtrain_l"]= {"Treinamento C4W", "LUNÁTICO", "Combos infinitos."}, ['c4wtrain_l']= {"Treinamento C4W", "LUNÁTICO", "Combos infinitos."},
["pctrain_n"]= {"Treinamento PC", "NORMAL", "Modo simples de limpeza perfeita."}, ['pctrain_n']= {"Treinamento PC", "NORMAL", "Modo simples de limpeza perfeita."},
["pctrain_l"]= {"Treinamento PC", "LUNÁTICO", "Modo duro de limpeza perfeita."}, ['pctrain_l']= {"Treinamento PC", "LUNÁTICO", "Modo duro de limpeza perfeita."},
["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!"},
["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!"},
["tech_h_plus"]= {"Tech", "HARD+", "Apenas spins e PC"}, ['tech_h_plus']= {"Tech", "HARD+", "Apenas spins e PC"},
["tech_l"]= {"Tech", "LUNÁTICO", "Não quebre o B2B!"}, ['tech_l']= {"Tech", "LUNÁTICO", "Não quebre o B2B!"},
["tech_l_plus"]= {"Tech", "LUNÁTICO+", "Apenas spins e PC"}, ['tech_l_plus']= {"Tech", "LUNÁTICO+", "Apenas spins e PC"},
["tech_finesse"]= {"Tech", "FINESSE", "Não erre a destreza!"}, ['tech_finesse']= {"Tech", "FINESSE", "Não erre a destreza!"},
["tech_finesse_f"]= {"Tech", "FINESSE+", "Sem limpas normais, não erre a destreza!"}, ['tech_finesse_f']= {"Tech", "FINESSE+", "Sem limpas normais, não erre a destreza!"},
["tsd_e"]= {"Desafio TSD", "FÁCIL", "Apenas T-spin-doubles!"}, ['tsd_e']= {"Desafio TSD", "FÁCIL", "Apenas T-spin-doubles!"},
["tsd_h"]= {"Desafio TSD", "DIFÍCIL", "Apenas T-spin-doubles!"}, ['tsd_h']= {"Desafio TSD", "DIFÍCIL", "Apenas T-spin-doubles!"},
["tsd_u"]= {"Desafio TSD", "ULTIMATE", "Apenas T-spin-doubles!"}, ['tsd_u']= {"Desafio TSD", "ULTIMATE", "Apenas T-spin-doubles!"},
-- ["backfire_n"]= {"Backfire", "NORMAL", "Self-send garbages"}, -- ['backfire_n']= {"Backfire", "NORMAL", "Self-send garbages"},
-- ["backfire_h"]= {"Backfire", "HARD", "Self-send garbages"}, -- ['backfire_h']= {"Backfire", "HARD", "Self-send garbages"},
-- ["backfire_l"]= {"Backfire", "LUNATIC", "Self-send garbages"}, -- ['backfire_l']= {"Backfire", "LUNATIC", "Self-send garbages"},
-- ["backfire_u"]= {"Backfire", "ULTIMATE", "Self-send garbages"}, -- ['backfire_u']= {"Backfire", "ULTIMATE", "Self-send garbages"},
["zen"]= {"Zen", "200", "200 linhas sem um limite de tempo."}, ['zen']= {'Zen', "200", "200 linhas sem um limite de tempo."},
["ultra"]= {"Ultra", "EXTRA", "Pegue a maior pontuação em 2 minutos."}, ['ultra']= {'Ultra', "EXTRA", "Pegue a maior pontuação em 2 minutos."},
["infinite"]= {"Infinito", "", "Modo Sandbox."}, ['infinite']= {"Infinito", "", "Modo Sandbox."},
["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"},
["marathon_bfmax"]= {"Maratona", "ULTIMATE"}, ['marathon_bfmax']= {"Maratona", "ULTIMATE"},
["custom_clear"]= {"Custom", "NORMAL"}, ['custom_clear']= {"Custom", "NORMAL"},
["custom_puzzle"]= {"Custom", "PUZZLE"}, ['custom_puzzle']= {"Custom", "PUZZLE"},
}, },
getTip={refuseCopy=true, getTip={refuseCopy=true,
'Jogo de blocos gratis com um modo Battle Royale!', 'Jogo de blocos gratis com um modo Battle Royale!',

View File

@@ -99,8 +99,7 @@ return{
-- started="Playing", -- started="Playing",
joinRoom="entró a la sala.", joinRoom="entró a la sala.",
leaveRoom="salió de la sala.", leaveRoom="salió de la sala.",
notReady="En espera", -- ready="READY",
beReady="Listo",
champion="$1 ganó!", champion="$1 ganó!",
chatRemain="Usuarios en línea: ", chatRemain="Usuarios en línea: ",
chatStart="------Comienzo del historial------", chatStart="------Comienzo del historial------",
@@ -214,11 +213,11 @@ return{
}, },
pause={ pause={
setting="Opciones (S)", setting="Opciones (S)",
replay= "Grabación (P)", replay="Grabación (P)",
save="Guardar (O)", save="Guardar (O)",
resume= "Resumir (esc)", resume="Resumir (esc)",
restart="Reiniciar (R)", restart="Reiniciar (R)",
quit= "Finalizar (Q)", quit="Finalizar (Q)",
}, },
net_menu={ net_menu={
ffa="FFA", ffa="FFA",
@@ -233,8 +232,6 @@ return{
new="Sala Nueva(2)", new="Sala Nueva(2)",
new2="Sala Nueva(5)", new2="Sala Nueva(5)",
join="Unirse", join="Unirse",
up="",
down="",
}, },
net_game={ net_game={
ready="Estoy Listo", ready="Estoy Listo",
@@ -254,6 +251,7 @@ return{
reTime="Retraso de Inicio", reTime="Retraso de Inicio",
RS="Sistema de Rotación", RS="Sistema de Rotación",
layout="Diseño", layout="Diseño",
-- dataSaving="Data saving",
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",
@@ -390,8 +388,9 @@ return{
clear="Inicio-Fin", clear="Inicio-Fin",
puzzle="Inicio-Puzzle", puzzle="Inicio-Puzzle",
-- reset="Reset (Del)",
advance="Más opciones (A)", advance="Más opciones (A)",
mod="Mods", mod="Mods (F1)",
field="Editar Tablero (F)", field="Editar Tablero (F)",
sequence="Editar Secuencia (S)", sequence="Editar Secuencia (S)",
mission="Editar Misiones (M)", mission="Editar Misiones (M)",
@@ -570,107 +569,102 @@ return{
importData="Importar Datos", importData="Importar Datos",
importSetting="Importar Ajustes", importSetting="Importar Ajustes",
importVK="Importar VK", importVK="Importar VK",
reset="¿Reiniciar?",
resetUnlock="Reiniciar rangos",
resetRecord="Reiniciar récords",
resetData="Reiniciar datos",
}, },
error={ error={
cmd="Console", console="Console",
quit="Salir", quit="Salir",
}, },
}, },
modes={ modes={
["sprint_10l"]= {"Sprint", "10L", "¡Limpia 10 líneas!"}, ['sprint_10l']= {"Sprint", "10L", "¡Limpia 10 líneas!"},
["sprint_20l"]= {"Sprint", "20L", "¡Limpia 20 líneas!"}, ['sprint_20l']= {"Sprint", "20L", "¡Limpia 20 líneas!"},
["sprint_40l"]= {"Sprint", "40L", "¡Limpia 40 líneas!"}, ['sprint_40l']= {"Sprint", "40L", "¡Limpia 40 líneas!"},
["sprint_100l"]= {"Sprint", "100L", "¡Limpia 100 líneas!"}, ['sprint_100l']= {"Sprint", "100L", "¡Limpia 100 líneas!"},
["sprint_400l"]= {"Sprint", "400L", "¡Limpia 400 líneas!"}, ['sprint_400l']= {"Sprint", "400L", "¡Limpia 400 líneas!"},
["sprint_1000l"]= {"Sprint", "1000L", "¡Limpia 1000 líneas!"}, ['sprint_1000l']= {"Sprint", "1000L", "¡Limpia 1000 líneas!"},
["sprintPenta"]= {"Sprint", "Pentominos", "¡Limpia 40 líneas con los 18 pentominos distintos!"}, ['sprintPenta']= {"Sprint", "Pentominos", "¡Limpia 40 líneas con los 18 pentominos distintos!"},
["sprintMPH"]= {"Sprint", "MPH", "Memoryless (sin memoria)\nPreviewless (sin pzas. siguientes)\nHoldless (sin reserva)."}, ['sprintMPH']= {"Sprint", "MPH", "Memoryless (sin memoria)\nPreviewless (sin pzas. siguientes)\nHoldless (sin reserva)."},
["dig_10l"]= {"Queso", "10L", "Limpia 10 líneas de queso."}, ['dig_10l']= {"Queso", "10L", "Limpia 10 líneas de queso."},
["dig_40l"]= {"Queso", "40L", "Limpia 40 líneas de queso."}, ['dig_40l']= {"Queso", "40L", "Limpia 40 líneas de queso."},
["dig_100l"]= {"Queso", "100L", "Limpia 100 líneas de queso."}, ['dig_100l']= {"Queso", "100L", "Limpia 100 líneas de queso."},
["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!"},
["solo_n"]= {"VS.", "Normal", "¡Derrota a la CPU!"}, ['solo_n']= {"VS.", "Normal", "¡Derrota a la CPU!"},
["solo_h"]= {"VS.", "Difícil", "¡Derrota a la CPU!"}, ['solo_h']= {"VS.", "Difícil", "¡Derrota a la CPU!"},
["solo_l"]= {"VS.", "Lunático", "¡Derrota a la CPU!"}, ['solo_l']= {"VS.", "Lunático", "¡Derrota a la CPU!"},
["solo_u"]= {"VS.", "Supremo", "¡Derrota a la CPU!"}, ['solo_u']= {"VS.", "Supremo", "¡Derrota a la CPU!"},
["techmino49_e"]= {"Tech 49", "Fácil", "Batalla de 49 jugadores. ¡El último en pie gana!"}, ['techmino49_e']= {"Tech 49", "Fácil", "Batalla de 49 jugadores. ¡El último en pie gana!"},
["techmino49_h"]= {"Tech 49", "Difícil", "Batalla de 49 jugadores. ¡El último en pie gana!"}, ['techmino49_h']= {"Tech 49", "Difícil", "Batalla de 49 jugadores. ¡El último en pie gana!"},
["techmino49_u"]= {"Tech 49", "Supremo", "Batalla de 49 jugadores. ¡El último en pie gana!"}, ['techmino49_u']= {"Tech 49", "Supremo", "Batalla de 49 jugadores. ¡El último en pie gana!"},
["techmino99_e"]= {"Tech 99", "Fácil", "Batalla de 99 jugadores. ¡El último en pie gana!"}, ['techmino99_e']= {"Tech 99", "Fácil", "Batalla de 99 jugadores. ¡El último en pie gana!"},
["techmino99_h"]= {"Tech 99", "Difícil", "Batalla de 99 jugadores. ¡El último en pie gana!"}, ['techmino99_h']= {"Tech 99", "Difícil", "Batalla de 99 jugadores. ¡El último en pie gana!"},
["techmino99_u"]= {"Tech 99", "Supremo", "Batalla de 99 jugadores. ¡El último en pie gana!"}, ['techmino99_u']= {"Tech 99", "Supremo", "Batalla de 99 jugadores. ¡El último en pie gana!"},
["round_e"]= {"Por Turnos", "Fácil", "Modo ajedrez."}, ['round_e']= {"Por Turnos", "Fácil", "Modo ajedrez."},
["round_n"]= {"Por Turnos", "Normal", "Modo ajedrez."}, ['round_n']= {"Por Turnos", "Normal", "Modo ajedrez."},
["round_h"]= {"Por Turnos", "Difícil", "Modo ajedrez."}, ['round_h']= {"Por Turnos", "Difícil", "Modo ajedrez."},
["round_l"]= {"Por Turnos", "Lunático", "Modo ajedrez."}, ['round_l']= {"Por Turnos", "Lunático", "Modo ajedrez."},
["round_u"]= {"Por Turnos", "Supremo", "Modo ajedrez."}, ['round_u']= {"Por Turnos", "Supremo", "Modo ajedrez."},
["master_beginner"]= {"Master", "Lunático", "Para principiantes en 20G"}, ['master_beginner']= {"Master", "Lunático", "Para principiantes en 20G"},
["master_advance"]= {"Master", "Supremo", "¡Desafío profesional de 20G!"}, ['master_advance']= {"Master", "Supremo", "¡Desafío profesional de 20G!"},
["master_final"]= {"Master", "FINAL", "El verdadero 20G Supremo: el final es inalcanzable."}, ['master_final']= {"Master", "FINAL", "El verdadero 20G Supremo: el final es inalcanzable."},
["master_extra"]= {"GrandMaster", "EXTRA", "Para ser un gran maestro, acepta este desafío"}, ['master_extra']= {"GrandMaster", "EXTRA", "Para ser un gran maestro, acepta este desafío"},
["rhythm_e"]= {"Al Ritmo", "Fácil", "Maratón rítmica de 200 líneas con bajo bpm."}, ['rhythm_e']= {"Al Ritmo", "Fácil", "Maratón rítmica de 200 líneas con bajo bpm."},
["rhythm_h"]= {"Al Ritmo", "Difícil", "Maratón rítmica de 200 líneas con bpm moderado."}, ['rhythm_h']= {"Al Ritmo", "Difícil", "Maratón rítmica de 200 líneas con bpm moderado."},
["rhythm_u"]= {"Al Ritmo", "Supremo", "Maratón rítmica de 200 líneas con bpm elevado."}, ['rhythm_u']= {"Al Ritmo", "Supremo", "Maratón rítmica de 200 líneas con bpm elevado."},
["blind_e"]= {"A Ciegas", "Parcial", "Para novatos."}, ['blind_e']= {"A Ciegas", "Parcial", "Para novatos."},
["blind_n"]= {"A Ciegas", "Total", "Para jugadores intermedios."}, ['blind_n']= {"A Ciegas", "Total", "Para jugadores intermedios."},
["blind_h"]= {"A Ciegas", "Inmediato", "Para jugadores experimentados"}, ['blind_h']= {"A Ciegas", "Inmediato", "Para jugadores experimentados"},
["blind_l"]= {"A Ciegas", "Inmediato+", "Para profesionales."}, ['blind_l']= {"A Ciegas", "Inmediato+", "Para profesionales."},
["blind_u"]= {"A Ciegas", "?", "¿Estás preparado?"}, ['blind_u']= {"A Ciegas", "?", "¿Estás preparado?"},
["blind_wtf"]= {"A Ciegas", "Guat de Foc", "No, no lo estás."}, ['blind_wtf']= {"A Ciegas", "Guat de Foc", "No, no lo estás."},
["classic_fast"]= {"Clásico", "CTWC", "Modo clásico con alta velocidad."}, ['classic_fast']= {"Clásico", "CTWC", "Modo clásico con alta velocidad."},
["survivor_e"]= {"Supervivencia", "Fácil", "¿Cuánto tiempo podrás sobrevivir?"}, ['survivor_e']= {"Supervivencia", "Fácil", "¿Cuánto tiempo podrás sobrevivir?"},
["survivor_n"]= {"Supervivencia", "Normal", "¿Cuánto tiempo podrás sobrevivir?"}, ['survivor_n']= {"Supervivencia", "Normal", "¿Cuánto tiempo podrás sobrevivir?"},
["survivor_h"]= {"Supervivencia", "Difícil", "¿Cuánto tiempo podrás sobrevivir?"}, ['survivor_h']= {"Supervivencia", "Difícil", "¿Cuánto tiempo podrás sobrevivir?"},
["survivor_l"]= {"Supervivencia", "Lunático", "¿Cuánto tiempo podrás sobrevivir?"}, ['survivor_l']= {"Supervivencia", "Lunático", "¿Cuánto tiempo podrás sobrevivir?"},
["survivor_u"]= {"Supervivencia", "Supremo", "¿Cuánto tiempo podrás sobrevivir?"}, ['survivor_u']= {"Supervivencia", "Supremo", "¿Cuánto tiempo podrás sobrevivir?"},
["attacker_h"]= {"Atacante", "Difícil", "¡Practica la ofensiva!"}, ['attacker_h']= {"Atacante", "Difícil", "¡Practica la ofensiva!"},
["attacker_u"]= {"Atacante", "Supremo", "¡Practica la ofensiva!"}, ['attacker_u']= {"Atacante", "Supremo", "¡Practica la ofensiva!"},
["defender_n"]= {"Defensor", "Normal", "¡Practica la defensa!"}, ['defender_n']= {"Defensor", "Normal", "¡Practica la defensa!"},
["defender_l"]= {"Defensor", "Lunático", "¡Practica la defensa!"}, ['defender_l']= {"Defensor", "Lunático", "¡Practica la defensa!"},
["dig_h"]= {"Downstack", "Difícil", "¡Practica el downstackeo!"}, ['dig_h']= {"Downstack", "Difícil", "¡Practica el downstackeo!"},
["dig_u"]= {"Downstack", "Supremo", "¡Practica el downstackeo!"}, ['dig_u']= {"Downstack", "Supremo", "¡Practica el downstackeo!"},
["bigbang"]= {"Big Bang", "Fácil", "¡Tutorial de All-spins!\n[No finalizado]"}, ['bigbang']= {"Big Bang", "Fácil", "¡Tutorial de All-spins!\n[No finalizado]"},
["c4wtrain_n"]= {"Entrenar C4W", "Normal", "Combos infinitos."}, ['c4wtrain_n']= {"Entrenar C4W", "Normal", "Combos infinitos."},
["c4wtrain_l"]= {"Entrenar C4W", "Lunático", "Combos infinitos."}, ['c4wtrain_l']= {"Entrenar C4W", "Lunático", "Combos infinitos."},
["pctrain_n"]= {"Entrenar PC", "Normal", "Modo sencillo para practicar Perfect Clears."}, ['pctrain_n']= {"Entrenar PC", "Normal", "Modo sencillo para practicar Perfect Clears."},
["pctrain_l"]= {"Entrenar PC", "Lunático", "Modo duro para practicar Perfect Clears."}, ['pctrain_l']= {"Entrenar PC", "Lunático", "Modo duro para practicar Perfect Clears."},
["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!"},
["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!"},
["tech_h_plus"]= {"Tech", "Difícil+", "¡Sólo se permiten Spins y PCs!"}, ['tech_h_plus']= {"Tech", "Difícil+", "¡Sólo se permiten Spins y PCs!"},
["tech_l"]= {"Tech", "Lunático", "¡Mantén el B2B!"}, ['tech_l']= {"Tech", "Lunático", "¡Mantén el B2B!"},
["tech_l_plus"]= {"Tech", "Lunático+", "¡Sólo se permiten Spins y PCs!"}, ['tech_l_plus']= {"Tech", "Lunático+", "¡Sólo se permiten Spins y PCs!"},
["tech_finesse"]= {"Tech", "Finesse", "¡No cometas errores de Finesse!"}, ['tech_finesse']= {"Tech", "Finesse", "¡No cometas errores de Finesse!"},
["tech_finesse_f"]= {"Tech", "Finesse+", "Sin errores de finesse, ¡pero tampoco clears normales!"}, ['tech_finesse_f']= {"Tech", "Finesse+", "Sin errores de finesse, ¡pero tampoco clears normales!"},
["tsd_e"]= {"Desafío de TSD", "Fácil", "¡Sólo se permiten T-Spin Dobles!"}, ['tsd_e']= {"Desafío de TSD", "Fácil", "¡Sólo se permiten T-Spin Dobles!"},
["tsd_h"]= {"Desafío de TSD", "Difícil", "¡Sólo se permiten T-Spin Dobles!"}, ['tsd_h']= {"Desafío de TSD", "Difícil", "¡Sólo se permiten T-Spin Dobles!"},
["tsd_u"]= {"Desafío de TSD", "Supremo", "¡Sólo se permiten T-Spin Dobles!"}, ['tsd_u']= {"Desafío de TSD", "Supremo", "¡Sólo se permiten T-Spin Dobles!"},
["backfire_n"]= {"Retorno", "Normal", "Lidia con tus propias líneas basura."}, ['backfire_n']= {"Retorno", "Normal", "Lidia con tus propias líneas basura."},
["backfire_h"]= {"Retorno", "Difícil", "Lidia con tus propias líneas basura."}, ['backfire_h']= {"Retorno", "Difícil", "Lidia con tus propias líneas basura."},
["backfire_l"]= {"Retorno", "Lunático", "Lidia con tus propias líneas basura."}, ['backfire_l']= {"Retorno", "Lunático", "Lidia con tus propias líneas basura."},
["backfire_u"]= {"Retorno", "Supremo", "Lidia con tus propias líneas basura."}, ['backfire_u']= {"Retorno", "Supremo", "Lidia con tus propias líneas basura."},
["zen"]= {"Zen", "200L", "200 líneas sin límite de tiempo."}, ['zen']= {'Zen', "200L", "200 líneas sin límite de tiempo."},
["ultra"]= {"Ultra", "Extra", "¡Consigue el mayor puntaje posible en 2 minutos!"}, ['ultra']= {'Ultra', "Extra", "¡Consigue el mayor puntaje posible en 2 minutos!"},
["infinite"]= {"Infinito", "", "Modo Sandbox."}, ['infinite']= {"Infinito", "", "Modo Sandbox."},
["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"},
["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"},
}, },
} }

View File

@@ -132,6 +132,7 @@ return{
reTime="3-2-1", reTime="3-2-1",
RS="''?", RS="''?",
layout="=-=-=", layout="=-=-=",
dataSaving="XX.",
autoPause="A||", autoPause="A||",
swap="=+=+=", swap="=+=+=",
fine="12 X 21", fine="12 X 21",
@@ -232,9 +233,9 @@ return{
size="←→", size="←→",
}, },
setting_touchSwitch={ setting_touchSwitch={
b1= "←:", b2="→:", b3="R→:", b4="←R:", b1="←:", b2="→:", b3="R→:", b4="←R:",
b5= "R↑↓:", b6="↓↓:", b7="↓:", b8="□←:", b5="R↑↓:", b6="↓↓:", b7="↓:", b8="□←:",
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="-",
@@ -269,8 +270,9 @@ return{
clear="Start-Clear", clear="Start-Clear",
puzzle="Start-Puzzle", puzzle="Start-Puzzle",
reset="Reset (Del)",
advance="More (A)", advance="More (A)",
mod="?!?!?!", mod="?!?!?! (F1)",
field="Edit Field (F)", field="Edit Field (F)",
sequence="Edit Sequence (S)", sequence="Edit Sequence (S)",
mission="Edit Mission (M)", mission="Edit Mission (M)",
@@ -303,20 +305,20 @@ return{
any="_", any="_",
space="×", space="×",
smartPen="~", smart="~",
pushLine="↑↑↑↑↑(K)", push="↑↑↑↑↑(K)",
delLine="==X==(L)", del="==X==(L)",
copy="→__", copy="→__",
paste="__→", paste="__→",
clear="XXX", clear="XXX",
demo="X ×", demo="X ×",
newPage="+[_](N)", newPg="+[_](N)",
delPage="x[_](M)", delPg="x[_](M)",
prevPage="←[_]", prevPg="←[_]",
nextPage="[_]→", nextPg="[_]→",
}, },
custom_sequence={ custom_sequence={
title="!@#$%^&*", title="!@#$%^&*",

View File

@@ -44,8 +44,7 @@ return{
createRoomTooFast="手痒要开这么多房间?", createRoomTooFast="手痒要开这么多房间?",
createRoomSuccessed="创好了", createRoomSuccessed="创好了",
started="开了", started="开了",
notReady="没有准备好", ready="预备!",
beReady="准备好了",
champion="神仙是 $1", champion="神仙是 $1",
stat={ stat={
@@ -183,102 +182,102 @@ return{
tapFX="动画", tapFX="动画",
}, },
error={ error={
cmd="Console", console="Console",
quit="Quit", quit="Quit",
}, },
}, },
modes={ modes={
["sprint_10l"]= {"竞速", "10L", "消10行"}, ['sprint_10l']= {"竞速", "10L", "消10行"},
["sprint_20l"]= {"竞速", "20L", "消20行"}, ['sprint_20l']= {"竞速", "20L", "消20行"},
["sprint_40l"]= {"竞速", "40L", "消40行"}, ['sprint_40l']= {"竞速", "40L", "消40行"},
["sprint_100l"]= {"竞速", "100L", "消100行"}, ['sprint_100l']= {"竞速", "100L", "消100行"},
["sprint_400l"]= {"竞速", "400L", "消400行"}, ['sprint_400l']= {"竞速", "400L", "消400行"},
["sprint_1000l"]= {"竞速", "1000L", "消1000行"}, ['sprint_1000l']= {"竞速", "1000L", "消1000行"},
["sprintPenta"]= {"竞速", "五连块", "离谱"}, ['sprintPenta']= {"竞速", "五连块", "离谱"},
["sprintMPH"]= {"竞速", "纯净", "听说你反应很快?"}, ['sprintMPH']= {"竞速", "纯净", "听说你反应很快?"},
["dig_10l"]= {"挖掘", "10L", "挖10行"}, ['dig_10l']= {"挖掘", "10L", "挖10行"},
["dig_40l"]= {"挖掘", "40L", "挖40行"}, ['dig_40l']= {"挖掘", "40L", "挖40行"},
["dig_100l"]= {"挖掘", "100L", "挖100行"}, ['dig_100l']= {"挖掘", "100L", "挖100行"},
["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"},
["solo_n"]= {"单挑", "普通", "鲨AI"}, ['solo_n']= {"单挑", "普通", "鲨AI"},
["solo_h"]= {"单挑", "困难", "鲨AI"}, ['solo_h']= {"单挑", "困难", "鲨AI"},
["solo_l"]= {"单挑", "疯狂", "鲨AI"}, ['solo_l']= {"单挑", "疯狂", "鲨AI"},
["solo_u"]= {"单挑", "极限", "鲨AI"}, ['solo_u']= {"单挑", "极限", "鲨AI"},
["techmino49_e"]= {"49人混战", "简单", "这我岂不是乱鲨"}, ['techmino49_e']= {"49人混战", "简单", "这我岂不是乱鲨"},
["techmino49_h"]= {"49人混战", "困难", "这我岂不是乱鲨"}, ['techmino49_h']= {"49人混战", "困难", "这我岂不是乱鲨"},
["techmino49_u"]= {"49人混战", "极限", "你吃鸡率多少?"}, ['techmino49_u']= {"49人混战", "极限", "你吃鸡率多少?"},
["techmino99_e"]= {"99人混战", "简单", "这我岂不是乱鲨"}, ['techmino99_e']= {"99人混战", "简单", "这我岂不是乱鲨"},
["techmino99_h"]= {"99人混战", "困难", "这我岂不是乱鲨"}, ['techmino99_h']= {"99人混战", "困难", "这我岂不是乱鲨"},
["techmino99_u"]= {"99人混战", "极限", "你吃鸡率多少?"}, ['techmino99_u']= {"99人混战", "极限", "你吃鸡率多少?"},
["round_e"]= {"回合制", "简单", "下棋"}, ['round_e']= {"回合制", "简单", "下棋"},
["round_n"]= {"回合制", "普通", "下棋"}, ['round_n']= {"回合制", "普通", "下棋"},
["round_h"]= {"回合制", "困难", "下棋"}, ['round_h']= {"回合制", "困难", "下棋"},
["round_l"]= {"回合制", "疯狂", "下棋"}, ['round_l']= {"回合制", "疯狂", "下棋"},
["round_u"]= {"回合制", "极限", "下棋"}, ['round_u']= {"回合制", "极限", "下棋"},
["master_beginner"]= {"大师", "疯狂", "无脑20G"}, ['master_beginner']= {"大师", "疯狂", "无脑20G"},
["master_advance"]= {"大师", "极限", "简单20G"}, ['master_advance']= {"大师", "极限", "简单20G"},
["master_final"]= {"大师", "终点", "究极20G:真正的游戏"}, ['master_final']= {"大师", "终点", "究极20G:真正的游戏"},
["master_phantasm"]= {"大师", "虚幻", "虚幻20G:好玩"}, ['master_phantasm']= {"大师", "虚幻", "虚幻20G:好玩"},
["master_extra"]= {"宗师", "EX", "你行你上"}, ['master_extra']= {"宗师", "EX", "你行你上"},
["rhythm_e"]= {"节奏", "简单", "很无聊的"}, ['rhythm_e']= {"节奏", "简单", "很无聊的"},
["rhythm_h"]= {"节奏", "困难", "好玩么?"}, ['rhythm_h']= {"节奏", "困难", "好玩么?"},
["rhythm_u"]= {"节奏", "极限", "真男人不玩低难度"}, ['rhythm_u']= {"节奏", "极限", "真男人不玩低难度"},
["blind_e"]= {"隐形", "半隐", "谁都能玩"}, ['blind_e']= {"隐形", "半隐", "谁都能玩"},
["blind_n"]= {"隐形", "全隐", "稍加练习即可"}, ['blind_n']= {"隐形", "全隐", "稍加练习即可"},
["blind_h"]= {"隐形", "瞬隐", "和上一个一样"}, ['blind_h']= {"隐形", "瞬隐", "和上一个一样"},
["blind_l"]= {"隐形", "瞬隐+", "这个确实挺难的"}, ['blind_l']= {"隐形", "瞬隐+", "这个确实挺难的"},
["blind_u"]= {"隐形", "啊这", "你准备好了吗"}, ['blind_u']= {"隐形", "啊这", "你准备好了吗"},
["blind_wtf"]= {"隐形", "不会吧", "还没准备好"}, ['blind_wtf']= {"隐形", "不会吧", "还没准备好"},
["classic_fast"]= {"高速经典", "CTWC", "就这?简单"}, ['classic_fast']= {"高速经典", "CTWC", "就这?简单"},
["survivor_e"]= {"生存", "简单", "这都玩不下去?不会吧"}, ['survivor_e']= {"生存", "简单", "这都玩不下去?不会吧"},
["survivor_n"]= {"生存", "普通", "呵,这都玩不过?"}, ['survivor_n']= {"生存", "普通", "呵,这都玩不过?"},
["survivor_h"]= {"生存", "困难", "所以呢?"}, ['survivor_h']= {"生存", "困难", "所以呢?"},
["survivor_l"]= {"生存", "疯狂", "然后呢?"}, ['survivor_l']= {"生存", "疯狂", "然后呢?"},
["survivor_u"]= {"生存", "极限", "舒服了"}, ['survivor_u']= {"生存", "极限", "舒服了"},
["attacker_h"]= {"进攻", "困难", "进攻练习"}, ['attacker_h']= {"进攻", "困难", "进攻练习"},
["attacker_u"]= {"进攻", "极限", "进攻练习"}, ['attacker_u']= {"进攻", "极限", "进攻练习"},
["defender_n"]= {"防守", "普通", "防守练习"}, ['defender_n']= {"防守", "普通", "防守练习"},
["defender_l"]= {"防守", "疯狂", "防守练习"}, ['defender_l']= {"防守", "疯狂", "防守练习"},
["dig_h"]= {"挖掘", "困难", "挖掘练习"}, ['dig_h']= {"挖掘", "困难", "挖掘练习"},
["dig_u"]= {"挖掘", "极限", "挖掘练习"}, ['dig_u']= {"挖掘", "极限", "挖掘练习"},
["bigbang"]= {"大爆炸", "简单", "All-spin 入门教程\n未制作完成,落块即通"}, ['bigbang']= {"大爆炸", "简单", "All-spin 入门教程\n未制作完成,落块即通"},
["c4wtrain_n"]= {"C4W练习", "普通", "无 限 连 击"}, ['c4wtrain_n']= {"C4W练习", "普通", "无 限 连 击"},
["c4wtrain_l"]= {"C4W练习", "疯狂", "无 限 连 击"}, ['c4wtrain_l']= {"C4W练习", "疯狂", "无 限 连 击"},
["pctrain_n"]= {"全清训练", "普通", "随便打打"}, ['pctrain_n']= {"全清训练", "普通", "随便打打"},
["pctrain_l"]= {"全清训练", "疯狂", "建议不打"}, ['pctrain_l']= {"全清训练", "疯狂", "建议不打"},
["pc_n"]= {"全清挑战", "普通", "100行内刷PC"}, ['pc_n']= {"全清挑战", "普通", "100行内刷PC"},
["pc_h"]= {"全清挑战", "困难", "100行内刷PC"}, ['pc_h']= {"全清挑战", "困难", "100行内刷PC"},
["pc_l"]= {"全清挑战", "疯狂", "100行内刷PC"}, ['pc_l']= {"全清挑战", "疯狂", "100行内刷PC"},
["tech_n"]= {"科研", "普通", "禁止断B2B"}, ['tech_n']= {"科研", "普通", "禁止断B2B"},
["tech_n_plus"]= {"科研", "普通+", "仅允许spin与PC"}, ['tech_n_plus']= {"科研", "普通+", "仅允许spin与PC"},
["tech_h"]= {"科研", "困难", "禁止断B2B"}, ['tech_h']= {"科研", "困难", "禁止断B2B"},
["tech_h_plus"]= {"科研", "困难+", "仅允许spin与PC"}, ['tech_h_plus']= {"科研", "困难+", "仅允许spin与PC"},
["tech_l"]= {"科研", "疯狂", "禁止断B2B"}, ['tech_l']= {"科研", "疯狂", "禁止断B2B"},
["tech_l_plus"]= {"科研", "疯狂+", "仅允许spin与PC"}, ['tech_l_plus']= {"科研", "疯狂+", "仅允许spin与PC"},
["tech_finesse"]= {"科研", "极简", "强制最简操作"}, ['tech_finesse']= {"科研", "极简", "强制最简操作"},
["tech_finesse_f"]= {"科研", "极简+", "禁止普通消除,强制最简操作"}, ['tech_finesse_f']= {"科研", "极简+", "禁止普通消除,强制最简操作"},
["tsd_e"]= {"TSD挑战", "简单", "刷T2"}, ['tsd_e']= {"TSD挑战", "简单", "刷T2"},
["tsd_h"]= {"TSD挑战", "困难", "刷T2"}, ['tsd_h']= {"TSD挑战", "困难", "刷T2"},
["tsd_u"]= {"TSD挑战", "极限", "刷T2"}, ['tsd_u']= {"TSD挑战", "极限", "刷T2"},
["backfire_n"]= {"自攻自受", "普通", "200攻击很少的,冲冲冲"}, ['backfire_n']= {"自攻自受", "普通", "200攻击很少的,冲冲冲"},
["backfire_h"]= {"自攻自受", "困难", "你在害怕什么"}, ['backfire_h']= {"自攻自受", "困难", "你在害怕什么"},
["backfire_l"]= {"自攻自受", "疯狂", "别怂啊,打攻击呀"}, ['backfire_l']= {"自攻自受", "疯狂", "别怂啊,打攻击呀"},
["backfire_u"]= {"自攻自受", "极限", "能把自己玩死,不会吧"}, ['backfire_u']= {"自攻自受", "极限", "能把自己玩死,不会吧"},
["zen"]= {"", "200", "不限时200行"}, ['zen']= {"", "200", "不限时200行"},
["ultra"]= {"限时打分", "挑战", "2分钟刷分"}, ['ultra']= {"限时打分", "挑战", "2分钟刷分"},
["infinite"]= {"无尽", "", "真的有人会玩这个?"}, ['infinite']= {"无尽", "", "真的有人会玩这个?"},
["infinite_dig"]= {"无尽:挖掘", "", "闲得慌的话来挖"}, ['infinite_dig']= {"无尽:挖掘", "", "闲得慌的话来挖"},
["sprintFix"]= {"竞速", "无移动"}, ['sprintFix']= {"竞速", "无移动"},
["sprintLock"]= {"竞速", "无旋转"}, ['sprintLock']= {"竞速", "无旋转"},
["marathon_bfmax"]= {"马拉松", "极限"}, ['marathon_bfmax']= {"马拉松", "极限"},
["custom_clear"]= {"自定义", "普通"}, ['custom_clear']= {"自定义", "普通"},
["custom_puzzle"]= {"自定义", "拼图"}, ['custom_puzzle']= {"自定义", "拼图"},
}, },
getTip={refuseCopy=true, getTip={refuseCopy=true,
"100apm?你倒是不用开局定式连续打几把", "100apm?你倒是不用开局定式连续打几把",

View File

@@ -98,8 +98,7 @@ return{
started="游戏中", started="游戏中",
joinRoom="进入房间", joinRoom="进入房间",
leaveRoom="离开房间", leaveRoom="离开房间",
notReady="等待中", ready="准备!",
beReady="准备",
champion="$1 获胜", champion="$1 获胜",
chatRemain="人数:", chatRemain="人数:",
chatStart="------消息的开头------", chatStart="------消息的开头------",
@@ -236,11 +235,11 @@ return{
}, },
pause={ pause={
setting="设置(S)", setting="设置(S)",
replay= "回放(P)", replay="回放(P)",
save="保存(O)", save="保存(O)",
resume= "继续(esc)", resume="继续(esc)",
restart="重新开始(R)", restart="重新开始(R)",
quit= "退出(Q)", quit="退出(Q)",
}, },
net_menu={ net_menu={
ffa="FFA", ffa="FFA",
@@ -255,8 +254,6 @@ return{
new="创建房间(2)", new="创建房间(2)",
new2="创建房间(5)", new2="创建房间(5)",
join="加入", join="加入",
up="",
down="",
}, },
net_game={ net_game={
ready="准备", ready="准备",
@@ -276,6 +273,7 @@ return{
reTime="开局等待时间", reTime="开局等待时间",
RS="旋转系统", RS="旋转系统",
layout="外观", layout="外观",
dataSaving="省流模式",
autoPause="失去焦点自动暂停", autoPause="失去焦点自动暂停",
swap="组合键切换攻击模式", swap="组合键切换攻击模式",
fine="极简操作提示音", fine="极简操作提示音",
@@ -415,8 +413,9 @@ return{
clear="开始-消除", clear="开始-消除",
puzzle="开始-拼图", puzzle="开始-拼图",
reset="重置所有(Del)",
advance="更多设置(A)", advance="更多设置(A)",
mod="Mods", mod="Mods (F1)",
field="场地编辑(F)", field="场地编辑(F)",
sequence="序列编辑(S)", sequence="序列编辑(S)",
mission="任务编辑(M)", mission="任务编辑(M)",
@@ -449,20 +448,20 @@ return{
any="不定", any="不定",
space="×", space="×",
smartPen="智能", smart="智能",
pushLine="增加一行(K)", push="增加一行(K)",
delLine="消除行(L)", del="消除行(L)",
copy="复制", copy="复制",
paste="粘贴", paste="粘贴",
clear="清除", clear="清除",
demo="不显示×", demo="不显示×",
newPage="新页面(N)", newPg="新页面(N)",
delPage="删除页面(M)", delPg="删除页面(M)",
prevPage="上一页面", prevPg="上一页面",
nextPage="下一页面", nextPg="下一页面",
}, },
custom_sequence={ custom_sequence={
title="自定义游戏", title="自定义游戏",
@@ -660,109 +659,104 @@ return{
importData="导入统计数据", importData="导入统计数据",
importSetting="导入设置", importSetting="导入设置",
importVK="导入虚拟按键布局", importVK="导入虚拟按键布局",
reset="重置?",
resetUnlock="重置解锁/等级",
resetRecord="重置纪录",
resetData="重置统计",
}, },
error={ error={
cmd="控制台", console="控制台",
quit="退出", quit="退出",
}, },
}, },
modes={ modes={
["sprint_10l"]= {"竞速", "10L", "消除10行"}, ['sprint_10l']= {"竞速", "10L", "消除10行"},
["sprint_20l"]= {"竞速", "20L", "消除20行"}, ['sprint_20l']= {"竞速", "20L", "消除20行"},
["sprint_40l"]= {"竞速", "40L", "消除40行"}, ['sprint_40l']= {"竞速", "40L", "消除40行"},
["sprint_100l"]= {"竞速", "100L", "消除100行"}, ['sprint_100l']= {"竞速", "100L", "消除100行"},
["sprint_400l"]= {"竞速", "400L", "消除400行"}, ['sprint_400l']= {"竞速", "400L", "消除400行"},
["sprint_1000l"]= {"竞速", "1000L", "消除1000行"}, ['sprint_1000l']= {"竞速", "1000L", "消除1000行"},
["sprintPenta"]= {"竞速", "五连块", "伤脑筋十八块"}, ['sprintPenta']= {"竞速", "五连块", "伤脑筋十八块"},
["sprintMPH"]= {"竞速", "MPH", "纯随机\n无预览\n无暂存"}, ['sprintMPH']= {"竞速", "MPH", "纯随机\n无预览\n无暂存"},
["dig_10l"]= {"挖掘", "10L", "挖掘10行"}, ['dig_10l']= {"挖掘", "10L", "挖掘10行"},
["dig_40l"]= {"挖掘", "40L", "挖掘40行"}, ['dig_40l']= {"挖掘", "40L", "挖掘40行"},
["dig_100l"]= {"挖掘", "100L", "挖掘100行"}, ['dig_100l']= {"挖掘", "100L", "挖掘100行"},
["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"},
["solo_n"]= {"单挑", "普通", "打败AI"}, ['solo_n']= {"单挑", "普通", "打败AI"},
["solo_h"]= {"单挑", "困难", "打败AI"}, ['solo_h']= {"单挑", "困难", "打败AI"},
["solo_l"]= {"单挑", "疯狂", "打败AI"}, ['solo_l']= {"单挑", "疯狂", "打败AI"},
["solo_u"]= {"单挑", "极限", "打败AI"}, ['solo_u']= {"单挑", "极限", "打败AI"},
["techmino49_e"]= {"49人混战", "简单", "49人混战,活到最后"}, ['techmino49_e']= {"49人混战", "简单", "49人混战,活到最后"},
["techmino49_h"]= {"49人混战", "困难", "49人混战,活到最后"}, ['techmino49_h']= {"49人混战", "困难", "49人混战,活到最后"},
["techmino49_u"]= {"49人混战", "极限", "49人混战,活到最后"}, ['techmino49_u']= {"49人混战", "极限", "49人混战,活到最后"},
["techmino99_e"]= {"99人混战", "简单", "99人混战,活到最后"}, ['techmino99_e']= {"99人混战", "简单", "99人混战,活到最后"},
["techmino99_h"]= {"99人混战", "困难", "99人混战,活到最后"}, ['techmino99_h']= {"99人混战", "困难", "99人混战,活到最后"},
["techmino99_u"]= {"99人混战", "极限", "99人混战,活到最后"}, ['techmino99_u']= {"99人混战", "极限", "99人混战,活到最后"},
["round_e"]= {"回合制", "简单", "下棋模式"}, ['round_e']= {"回合制", "简单", "下棋模式"},
["round_n"]= {"回合制", "普通", "下棋模式"}, ['round_n']= {"回合制", "普通", "下棋模式"},
["round_h"]= {"回合制", "困难", "下棋模式"}, ['round_h']= {"回合制", "困难", "下棋模式"},
["round_l"]= {"回合制", "疯狂", "下棋模式"}, ['round_l']= {"回合制", "疯狂", "下棋模式"},
["round_u"]= {"回合制", "极限", "下棋模式"}, ['round_u']= {"回合制", "极限", "下棋模式"},
["master_beginner"]= {"大师", "疯狂", "20G初心者练习"}, ['master_beginner']= {"大师", "疯狂", "20G初心者练习"},
["master_advance"]= {"大师", "极限", "上级者20G挑战"}, ['master_advance']= {"大师", "极限", "上级者20G挑战"},
["master_final"]= {"大师", "终点", "究极20G:无法触及的终点"}, ['master_final']= {"大师", "终点", "究极20G:无法触及的终点"},
["master_phantasm"]= {"大师", "虚幻", "虚幻20G:???"}, ['master_phantasm']= {"大师", "虚幻", "虚幻20G:???"},
["master_extra"]= {"宗师", "EX", "成为方块大师"}, ['master_extra']= {"宗师", "EX", "成为方块大师"},
["rhythm_e"]= {"节奏", "简单", "200行低速节奏马拉松"}, ['rhythm_e']= {"节奏", "简单", "200行低速节奏马拉松"},
["rhythm_h"]= {"节奏", "困难", "200行中速节奏马拉松"}, ['rhythm_h']= {"节奏", "困难", "200行中速节奏马拉松"},
["rhythm_u"]= {"节奏", "极限", "200行高速节奏马拉松"}, ['rhythm_u']= {"节奏", "极限", "200行高速节奏马拉松"},
["blind_e"]= {"隐形", "半隐", "不强大脑"}, ['blind_e']= {"隐形", "半隐", "不强大脑"},
["blind_n"]= {"隐形", "全隐", "挺强大脑"}, ['blind_n']= {"隐形", "全隐", "挺强大脑"},
["blind_h"]= {"隐形", "瞬隐", "很强大脑"}, ['blind_h']= {"隐形", "瞬隐", "很强大脑"},
["blind_l"]= {"隐形", "瞬隐+", "最强大脑"}, ['blind_l']= {"隐形", "瞬隐+", "最强大脑"},
["blind_u"]= {"隐形", "啊这", "你准备好了吗"}, ['blind_u']= {"隐形", "啊这", "你准备好了吗"},
["blind_wtf"]= {"隐形", "不会吧", "还没准备好"}, ['blind_wtf']= {"隐形", "不会吧", "还没准备好"},
["classic_fast"]= {"高速经典", "CTWC", "高速经典"}, ['classic_fast']= {"高速经典", "CTWC", "高速经典"},
["survivor_e"]= {"生存", "简单", "你能存活多久?"}, ['survivor_e']= {"生存", "简单", "你能存活多久?"},
["survivor_n"]= {"生存", "普通", "你能存活多久?"}, ['survivor_n']= {"生存", "普通", "你能存活多久?"},
["survivor_h"]= {"生存", "困难", "你能存活多久?"}, ['survivor_h']= {"生存", "困难", "你能存活多久?"},
["survivor_l"]= {"生存", "疯狂", "你能存活多久?"}, ['survivor_l']= {"生存", "疯狂", "你能存活多久?"},
["survivor_u"]= {"生存", "极限", "你能存活多久?"}, ['survivor_u']= {"生存", "极限", "你能存活多久?"},
["attacker_h"]= {"进攻", "困难", "进攻练习"}, ['attacker_h']= {"进攻", "困难", "进攻练习"},
["attacker_u"]= {"进攻", "极限", "进攻练习"}, ['attacker_u']= {"进攻", "极限", "进攻练习"},
["defender_n"]= {"防守", "普通", "防守练习"}, ['defender_n']= {"防守", "普通", "防守练习"},
["defender_l"]= {"防守", "疯狂", "防守练习"}, ['defender_l']= {"防守", "疯狂", "防守练习"},
["dig_h"]= {"挖掘", "困难", "挖掘练习"}, ['dig_h']= {"挖掘", "困难", "挖掘练习"},
["dig_u"]= {"挖掘", "极限", "挖掘练习"}, ['dig_u']= {"挖掘", "极限", "挖掘练习"},
["bigbang"]= {"大爆炸", "简单", "All-spin 入门教程\n未制作完成,落块即通"}, ['bigbang']= {"大爆炸", "简单", "All-spin 入门教程\n未制作完成,落块即通"},
["c4wtrain_n"]= {"C4W练习", "普通", "无 限 连 击"}, ['c4wtrain_n']= {"C4W练习", "普通", "无 限 连 击"},
["c4wtrain_l"]= {"C4W练习", "疯狂", "无 限 连 击"}, ['c4wtrain_l']= {"C4W练习", "疯狂", "无 限 连 击"},
["pctrain_n"]= {"全清训练", "普通", "简易PC题库,熟悉全清定式的组合"}, ['pctrain_n']= {"全清训练", "普通", "简易PC题库,熟悉全清定式的组合"},
["pctrain_l"]= {"全清训练", "疯狂", "困难PC题库,强算力者进"}, ['pctrain_l']= {"全清训练", "疯狂", "困难PC题库,强算力者进"},
["pc_n"]= {"全清挑战", "普通", "100行内刷PC"}, ['pc_n']= {"全清挑战", "普通", "100行内刷PC"},
["pc_h"]= {"全清挑战", "困难", "100行内刷PC"}, ['pc_h']= {"全清挑战", "困难", "100行内刷PC"},
["pc_l"]= {"全清挑战", "疯狂", "100行内刷PC"}, ['pc_l']= {"全清挑战", "疯狂", "100行内刷PC"},
["tech_n"]= {"科研", "普通", "禁止断B2B"}, ['tech_n']= {"科研", "普通", "禁止断B2B"},
["tech_n_plus"]= {"科研", "普通+", "仅允许spin与PC"}, ['tech_n_plus']= {"科研", "普通+", "仅允许spin与PC"},
["tech_h"]= {"科研", "困难", "禁止断B2B"}, ['tech_h']= {"科研", "困难", "禁止断B2B"},
["tech_h_plus"]= {"科研", "困难+", "仅允许spin与PC"}, ['tech_h_plus']= {"科研", "困难+", "仅允许spin与PC"},
["tech_l"]= {"科研", "疯狂", "禁止断B2B"}, ['tech_l']= {"科研", "疯狂", "禁止断B2B"},
["tech_l_plus"]= {"科研", "疯狂+", "仅允许spin与PC"}, ['tech_l_plus']= {"科研", "疯狂+", "仅允许spin与PC"},
["tech_finesse"]= {"科研", "极简", "强制最简操作"}, ['tech_finesse']= {"科研", "极简", "强制最简操作"},
["tech_finesse_f"]= {"科研", "极简+", "禁止普通消除,强制最简操作"}, ['tech_finesse_f']= {"科研", "极简+", "禁止普通消除,强制最简操作"},
["tsd_e"]= {"TSD挑战", "简单", "你能连续做几个TSD?"}, ['tsd_e']= {"TSD挑战", "简单", "你能连续做几个TSD?"},
["tsd_h"]= {"TSD挑战", "困难", "你能连续做几个TSD?"}, ['tsd_h']= {"TSD挑战", "困难", "你能连续做几个TSD?"},
["tsd_u"]= {"TSD挑战", "极限", "你能连续做几个TSD?"}, ['tsd_u']= {"TSD挑战", "极限", "你能连续做几个TSD?"},
["backfire_n"]= {"Backfire", "普通", "打出100攻击"}, ['backfire_n']= {"Backfire", "普通", "打出100攻击"},
["backfire_h"]= {"Backfire", "困难", "打出100攻击"}, ['backfire_h']= {"Backfire", "困难", "打出100攻击"},
["backfire_l"]= {"Backfire", "疯狂", "打出100攻击"}, ['backfire_l']= {"Backfire", "疯狂", "打出100攻击"},
["backfire_u"]= {"Backfire", "极限", "打出100攻击"}, ['backfire_u']= {"Backfire", "极限", "打出100攻击"},
["zen"]= {"", "200", "不限时200行"}, ['zen']= {"", "200", "不限时200行"},
["ultra"]= {"限时打分", "挑战", "在两分钟内尽可能拿到最多的分数"}, ['ultra']= {"限时打分", "挑战", "在两分钟内尽可能拿到最多的分数"},
["infinite"]= {"无尽", "", "沙盒"}, ['infinite']= {"无尽", "", "沙盒"},
["infinite_dig"]= {"无尽:挖掘", "", "挖呀挖呀挖"}, ['infinite_dig']= {"无尽:挖掘", "", "挖呀挖呀挖"},
["sprintFix"]= {"竞速", "无移动"}, ['sprintFix']= {"竞速", "无移动"},
["sprintLock"]= {"竞速", "无旋转"}, ['sprintLock']= {"竞速", "无旋转"},
["marathon_bfmax"]= {"马拉松", "极限"}, ['marathon_bfmax']= {"马拉松", "极限"},
["custom_clear"]= {"自定义", "普通"}, ['custom_clear']= {"自定义", "普通"},
["custom_puzzle"]= {"自定义", "拼图"}, ['custom_puzzle']= {"自定义", "拼图"},
}, },
getTip={refuseCopy=true, getTip={refuseCopy=true,
"...,合群了就会消失,不合群世界毁灭(指game over", "...,合群了就会消失,不合群世界毁灭(指game over",
@@ -803,6 +797,7 @@ return{
"本游戏的B2B是气槽机制,和传统的开关机制不一样哦", "本游戏的B2B是气槽机制,和传统的开关机制不一样哦",
"本游戏可不是休闲游戏。", "本游戏可不是休闲游戏。",
"本游戏内置了几个休(ying)闲(he)小游戏哦~入口就藏在这个菜单", "本游戏内置了几个休(ying)闲(he)小游戏哦~入口就藏在这个菜单",
"本游戏在设计的时候受到了大量其他块游甚至一些音游的启发",
"必须要软降才能到达的位置都会判定为极简操作", "必须要软降才能到达的位置都会判定为极简操作",
"别看攻击效率不高,其实消四还是很强的", "别看攻击效率不高,其实消四还是很强的",
"别问游戏名怎么取的,问就是随便想的", "别问游戏名怎么取的,问就是随便想的",
@@ -839,6 +834,7 @@ return{
"方块默认出现的方向都是重心在下哦", "方块默认出现的方向都是重心在下哦",
"方块能吃吗", "方块能吃吗",
"服务器随时爆炸", "服务器随时爆炸",
"开启省流模式后将不会加载用户头像(应该能省不少流吧)",
"感觉自己明明按键了但是没反应?你真的按到了吗?", "感觉自己明明按键了但是没反应?你真的按到了吗?",
"感觉自己速度到上限了?试着把das调低一点", "感觉自己速度到上限了?试着把das调低一点",
"感谢群友帮忙想tip", "感谢群友帮忙想tip",
@@ -858,7 +854,7 @@ return{
"很有精神!", "很有精神!",
"混合消除即将到来!", "混合消除即将到来!",
"即使被顶到天上了也不要放弃,每一行垃圾都有可能成为你的武器", "即使被顶到天上了也不要放弃,每一行垃圾都有可能成为你的武器",
"极简率决定了你大的速度上限和相等手速下的放块速度", "极简率决定了你大的速度上限和相等手速下的放块速度",
"假如生活欺骗了你,不要悲伤,不要心急,还有块陪着你", "假如生活欺骗了你,不要悲伤,不要心急,还有块陪着你",
"架空消除即将到来!", "架空消除即将到来!",
"建议使用双手游玩", "建议使用双手游玩",
@@ -881,16 +877,15 @@ return{
"你今天的人品值是:"..math.random(100), "你今天的人品值是:"..math.random(100),
"你今天的人品值是:0.22", "你今天的人品值是:0.22",
"你今天的人品值是:0.26", "你今天的人品值是:0.26",
"你今天的人品值是:0",
"你今天的人品值是:12.7", "你今天的人品值是:12.7",
"你今天的人品值是:2.6",
"你今天的人品值是:22", "你今天的人品值是:22",
"你今天的人品值是:26", "你今天的人品值是:26",
"你今天的人品值是:28.3", "你今天的人品值是:28.3",
"你今天的人品值是:35.5", "你今天的人品值是:6.26",
"你今天的人品值是:6.26", "你今天的人品值是:6.26",
"你今天的人品值是:62.6", "你今天的人品值是:62.6",
"你今天的人品值是:87.2", "你今天的人品值是:87.2",
"你今天的人品值是:89.5",
"你今天的人品值是:9999%", "你今天的人品值是:9999%",
"你可以从统计页面打开游戏存档目录", "你可以从统计页面打开游戏存档目录",
"你们考虑过Z酱的感受吗?没有!你们只考虑你自己。", "你们考虑过Z酱的感受吗?没有!你们只考虑你自己。",
@@ -915,7 +910,7 @@ return{
"术语不认识?去帮助-词典里查查吧", "术语不认识?去帮助-词典里查查吧",
"水平是随着时间一点点提升的,不是几天几星期就能玩好的哦", "水平是随着时间一点点提升的,不是几天几星期就能玩好的哦",
"四连块总共7种", "四连块总共7种",
"虽然极简连击和极简率计算看着很怪,但是很科学!", "虽然极简连击和极简率计算看着很怪,但以后你会发现还挺科学!",
"提前旋转等功能可以用来救命", "提前旋转等功能可以用来救命",
"天哪,我竟然是一条凑数tip", "天哪,我竟然是一条凑数tip",
"挖掘能力在对战里非常非常非常重要!!!!", "挖掘能力在对战里非常非常非常重要!!!!",
@@ -994,15 +989,15 @@ return{
"l-=-1", "l-=-1",
"Let-The-Bass-Kick!", "Let-The-Bass-Kick!",
"pps-0.01", "pps-0.01",
"rm -rf /*",
"shutdown -h now", "shutdown -h now",
"sin(α+β)=SαCβ+SβCα", "sin(α+β)=SαCβ+SβCα",
"sin²α-cos²β=-C(α+β)C(α-β)", "sin²α-cos²β=-C(α+β)C(α-β)",
"sin²α-sin²β=S(α+β)S(α-β)", "sin²α-sin²β=S(α+β)S(α-β)",
"sin2α=2SαCα", "sin2α=2SαCα",
"sofunhowtoget",
"Staff名单里飘过的是赞助榜单,喜欢本游戏的话可以给我们打赞助支持开发哦~", "Staff名单里飘过的是赞助榜单,喜欢本游戏的话可以给我们打赞助支持开发哦~",
"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",
"Tech生日不太清楚,那就定在2019.6.26吧",
"Tech也有节日主题了哦",
"Techmino = Technique + tetromino", "Techmino = Technique + tetromino",
"Techmino 好玩!", "Techmino 好玩!",
"Techmino 濂界帺锛", "Techmino 濂界帺锛",
@@ -1010,9 +1005,13 @@ return{
"Techmino n.铁壳米诺(游戏名)", "Techmino n.铁壳米诺(游戏名)",
"Techmino安卓下载", "Techmino安卓下载",
"Techmino好玩!", "Techmino好玩!",
"Techmino生日不太清楚,那就定在2019.6.26吧",
"Techmino也有节日主题了哦",
"Techmino有一个Nspire-CX版本!", "Techmino有一个Nspire-CX版本!",
"Techmino在哪里下载", "Techmino在哪里下载",
"Techminohaowan", "Techmino怎么念啊",
"techminohaowan",
"techminoisfun",
"viod main[]", "viod main[]",
"while(false)", "while(false)",
"Z酱竟是我自己", "Z酱竟是我自己",

View File

@@ -78,7 +78,7 @@ return{
spin7="", spin7="",
}, },
customGame={ customGame={
mod="模组", mod="模组(F1)",
}, },
custom_advance={ custom_advance={
nextCount="预览个数", nextCount="预览个数",
@@ -139,96 +139,96 @@ return{
}, },
}, },
modes={ modes={
["sprint_10l"]= {"竞速", "10行", "消除10行"}, ['sprint_10l']= {"竞速", "10行", "消除10行"},
["sprint_20l"]= {"竞速", "20行", "消除20行"}, ['sprint_20l']= {"竞速", "20行", "消除20行"},
["sprint_40l"]= {"竞速", "40行", "消除40行"}, ['sprint_40l']= {"竞速", "40行", "消除40行"},
["sprint_100l"]= {"竞速", "100行", "消除100行"}, ['sprint_100l']= {"竞速", "100行", "消除100行"},
["sprint_400l"]= {"竞速", "400行", "消除400行"}, ['sprint_400l']= {"竞速", "400行", "消除400行"},
["sprint_1000l"]= {"竞速", "1000行", "消除1000行"}, ['sprint_1000l']= {"竞速", "1000行", "消除1000行"},
["sprintPenta"]= {"竞速", "五连块", "伤脑筋十八块"}, ['sprintPenta']= {"竞速", "五连块", "伤脑筋十八块"},
["sprintMPH"]= {"竞速", "纯净", "纯随机\n无预览\n无暂存"}, ['sprintMPH']= {"竞速", "纯净", "纯随机\n无预览\n无暂存"},
["dig_10l"]= {"挖掘", "10L", "挖掘10行"}, ['dig_10l']= {"挖掘", "10L", "挖掘10行"},
["dig_40l"]= {"挖掘", "40L", "挖掘40行"}, ['dig_40l']= {"挖掘", "40L", "挖掘40行"},
["dig_100l"]= {"挖掘", "100L", "挖掘100行"}, ['dig_100l']= {"挖掘", "100L", "挖掘100行"},
["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']= {"单挑", "简单", "打败机器人"},
["solo_n"]= {"单挑", "普通", "打败机器人"}, ['solo_n']= {"单挑", "普通", "打败机器人"},
["solo_h"]= {"单挑", "困难", "打败机器人"}, ['solo_h']= {"单挑", "困难", "打败机器人"},
["solo_l"]= {"单挑", "疯狂", "打败机器人"}, ['solo_l']= {"单挑", "疯狂", "打败机器人"},
["solo_u"]= {"单挑", "极限", "打败机器人"}, ['solo_u']= {"单挑", "极限", "打败机器人"},
["techmino49_e"]= {"49人混战", "简单", "49人混战,活到最后"}, ['techmino49_e']= {"49人混战", "简单", "49人混战,活到最后"},
["techmino49_h"]= {"49人混战", "困难", "49人混战,活到最后"}, ['techmino49_h']= {"49人混战", "困难", "49人混战,活到最后"},
["techmino49_u"]= {"49人混战", "极限", "49人混战,活到最后"}, ['techmino49_u']= {"49人混战", "极限", "49人混战,活到最后"},
["techmino99_e"]= {"99人混战", "简单", "99人混战,活到最后"}, ['techmino99_e']= {"99人混战", "简单", "99人混战,活到最后"},
["techmino99_h"]= {"99人混战", "困难", "99人混战,活到最后"}, ['techmino99_h']= {"99人混战", "困难", "99人混战,活到最后"},
["techmino99_u"]= {"99人混战", "极限", "99人混战,活到最后"}, ['techmino99_u']= {"99人混战", "极限", "99人混战,活到最后"},
["round_e"]= {"回合制", "简单", "下棋模式"}, ['round_e']= {"回合制", "简单", "下棋模式"},
["round_n"]= {"回合制", "普通", "下棋模式"}, ['round_n']= {"回合制", "普通", "下棋模式"},
["round_h"]= {"回合制", "困难", "下棋模式"}, ['round_h']= {"回合制", "困难", "下棋模式"},
["round_l"]= {"回合制", "疯狂", "下棋模式"}, ['round_l']= {"回合制", "疯狂", "下棋模式"},
["round_u"]= {"回合制", "极限", "下棋模式"}, ['round_u']= {"回合制", "极限", "下棋模式"},
["master_beginner"]= {"大师", "疯狂", "20G初心者练习"}, ['master_beginner']= {"大师", "疯狂", "20G初心者练习"},
["master_advance"]= {"大师", "极限", "上级者20G挑战"}, ['master_advance']= {"大师", "极限", "上级者20G挑战"},
["master_final"]= {"大师", "终点", "究极20G:无法触及的终点"}, ['master_final']= {"大师", "终点", "究极20G:无法触及的终点"},
["master_phantasm"]= {"大师", "虚幻", "虚幻20G:???"}, ['master_phantasm']= {"大师", "虚幻", "虚幻20G:???"},
["master_extra"]= {"宗师", "EX", "成为方块大师"}, ['master_extra']= {"宗师", "EX", "成为方块大师"},
["rhythm_e"]= {"节奏", "简单", "200行低速节奏马拉松"}, ['rhythm_e']= {"节奏", "简单", "200行低速节奏马拉松"},
["rhythm_h"]= {"节奏", "困难", "200行中速节奏马拉松"}, ['rhythm_h']= {"节奏", "困难", "200行中速节奏马拉松"},
["rhythm_u"]= {"节奏", "极限", "200行高速节奏马拉松"}, ['rhythm_u']= {"节奏", "极限", "200行高速节奏马拉松"},
["blind_e"]= {"隐形", "半隐", "不强大脑"}, ['blind_e']= {"隐形", "半隐", "不强大脑"},
["blind_n"]= {"隐形", "全隐", "挺强大脑"}, ['blind_n']= {"隐形", "全隐", "挺强大脑"},
["blind_h"]= {"隐形", "瞬隐", "很强大脑"}, ['blind_h']= {"隐形", "瞬隐", "很强大脑"},
["blind_l"]= {"隐形", "瞬隐+", "超强大脑"}, ['blind_l']= {"隐形", "瞬隐+", "超强大脑"},
["blind_u"]= {"隐形", "啊这", "你准备好了吗"}, ['blind_u']= {"隐形", "啊这", "你准备好了吗"},
["blind_wtf"]= {"隐形", "不会吧", "还没准备好"}, ['blind_wtf']= {"隐形", "不会吧", "还没准备好"},
["classic_fast"]= {"高速经典", "CTWC", "高速经典"}, ['classic_fast']= {"高速经典", "CTWC", "高速经典"},
["survivor_e"]= {"生存", "简单", "你能存活多久?"}, ['survivor_e']= {"生存", "简单", "你能存活多久?"},
["survivor_n"]= {"生存", "普通", "你能存活多久?"}, ['survivor_n']= {"生存", "普通", "你能存活多久?"},
["survivor_h"]= {"生存", "困难", "你能存活多久?"}, ['survivor_h']= {"生存", "困难", "你能存活多久?"},
["survivor_l"]= {"生存", "疯狂", "你能存活多久?"}, ['survivor_l']= {"生存", "疯狂", "你能存活多久?"},
["survivor_u"]= {"生存", "极限", "你能存活多久?"}, ['survivor_u']= {"生存", "极限", "你能存活多久?"},
["attacker_h"]= {"进攻", "困难", "进攻练习"}, ['attacker_h']= {"进攻", "困难", "进攻练习"},
["attacker_u"]= {"进攻", "极限", "进攻练习"}, ['attacker_u']= {"进攻", "极限", "进攻练习"},
["defender_n"]= {"防守", "普通", "防守练习"}, ['defender_n']= {"防守", "普通", "防守练习"},
["defender_l"]= {"防守", "疯狂", "防守练习"}, ['defender_l']= {"防守", "疯狂", "防守练习"},
["dig_h"]= {"挖掘", "困难", "挖掘练习"}, ['dig_h']= {"挖掘", "困难", "挖掘练习"},
["dig_u"]= {"挖掘", "极限", "挖掘练习"}, ['dig_u']= {"挖掘", "极限", "挖掘练习"},
["bigbang"]= {"大爆炸", "简单", "All-spin 入门教程\n未制作完成,落块即通"}, ['bigbang']= {"大爆炸", "简单", "All-spin 入门教程\n未制作完成,落块即通"},
["c4wtrain_n"]= {"中四宽练习", "普通", "无 限 连 击"}, ['c4wtrain_n']= {"中四宽练习", "普通", "无 限 连 击"},
["c4wtrain_l"]= {"中四宽练习", "疯狂", "无 限 连 击"}, ['c4wtrain_l']= {"中四宽练习", "疯狂", "无 限 连 击"},
["pctrain_n"]= {"全清训练", "普通", "简易全清题库,熟悉全清定式的组合"}, ['pctrain_n']= {"全清训练", "普通", "简易全清题库,熟悉全清定式的组合"},
["pctrain_l"]= {"全清训练", "疯狂", "困难PC题库,强算力者进"}, ['pctrain_l']= {"全清训练", "疯狂", "困难PC题库,强算力者进"},
["pc_n"]= {"全清挑战", "普通", "100行内刷全清"}, ['pc_n']= {"全清挑战", "普通", "100行内刷全清"},
["pc_h"]= {"全清挑战", "困难", "100行内刷全清"}, ['pc_h']= {"全清挑战", "困难", "100行内刷全清"},
["pc_l"]= {"全清挑战", "疯狂", "100行内刷全清"}, ['pc_l']= {"全清挑战", "疯狂", "100行内刷全清"},
["tech_n"]= {"科研", "普通", "禁止断B2B"}, ['tech_n']= {"科研", "普通", "禁止断B2B"},
["tech_n_plus"]= {"科研", "普通+", "仅允许回旋与全清"}, ['tech_n_plus']= {"科研", "普通+", "仅允许回旋与全清"},
["tech_h"]= {"科研", "困难", "禁止断B2B"}, ['tech_h']= {"科研", "困难", "禁止断B2B"},
["tech_h_plus"]= {"科研", "困难+", "仅允许回旋与全清"}, ['tech_h_plus']= {"科研", "困难+", "仅允许回旋与全清"},
["tech_l"]= {"科研", "疯狂", "禁止断B2B"}, ['tech_l']= {"科研", "疯狂", "禁止断B2B"},
["tech_l_plus"]= {"科研", "疯狂+", "仅允许spin与PC"}, ['tech_l_plus']= {"科研", "疯狂+", "仅允许spin与PC"},
["tech_finesse"]= {"科研", "极简", "强制最简操作"}, ['tech_finesse']= {"科研", "极简", "强制最简操作"},
["tech_finesse_f"]= {"科研", "极简+", "禁止普通消除,强制最简操作"}, ['tech_finesse_f']= {"科研", "极简+", "禁止普通消除,强制最简操作"},
["tsd_e"]= {"T2挑战", "简单", "你能连续做几个T旋双清?"}, ['tsd_e']= {"T2挑战", "简单", "你能连续做几个T旋双清?"},
["tsd_h"]= {"T2挑战", "困难", "你能连续做几个T旋双清?"}, ['tsd_h']= {"T2挑战", "困难", "你能连续做几个T旋双清?"},
["tsd_u"]= {"T2挑战", "极限", "你能连续做几个T旋双清?"}, ['tsd_u']= {"T2挑战", "极限", "你能连续做几个T旋双清?"},
["backfire_n"]= {"自攻自防", "普通", "打出100攻击"}, ['backfire_n']= {"自攻自防", "普通", "打出100攻击"},
["backfire_h"]= {"自攻自防", "困难", "打出100攻击"}, ['backfire_h']= {"自攻自防", "困难", "打出100攻击"},
["backfire_l"]= {"自攻自防", "疯狂", "打出100攻击"}, ['backfire_l']= {"自攻自防", "疯狂", "打出100攻击"},
["backfire_u"]= {"自攻自防", "极限", "打出100攻击"}, ['backfire_u']= {"自攻自防", "极限", "打出100攻击"},
["zen"]= {"", "200", "不限时200行"}, ['zen']= {"", "200", "不限时200行"},
["ultra"]= {"限时打分", "挑战", "在两分钟内尽可能拿到最多的分数"}, ['ultra']= {"限时打分", "挑战", "在两分钟内尽可能拿到最多的分数"},
["infinite"]= {"无尽", "", "沙盒"}, ['infinite']= {"无尽", "", "沙盒"},
["infinite_dig"]= {"无尽:挖掘", "", "挖呀挖呀挖"}, ['infinite_dig']= {"无尽:挖掘", "", "挖呀挖呀挖"},
["sprintFix"]= {"竞速", "无移动"}, ['sprintFix']= {"竞速", "无移动"},
["sprintLock"]= {"竞速", "无旋转"}, ['sprintLock']= {"竞速", "无旋转"},
["marathon_bfmax"]= {"马拉松", "极限"}, ['marathon_bfmax']= {"马拉松", "极限"},
["custom_clear"]= {"自定义", "普通"}, ['custom_clear']= {"自定义", "普通"},
["custom_puzzle"]= {"自定义", "拼图"}, ['custom_puzzle']= {"自定义", "拼图"},
}, },
} }

View File

@@ -1,119 +1,119 @@
return{ return{
{name="sprint_10l", x=0, y=0, size=40,shape=1,icon="sprint1", unlock={"sprint_20l","sprint_40l"}}, {name='sprint_10l', x=0, y=0, size=40,shape=1,icon="sprint1", unlock={'sprint_20l','sprint_40l'}},
{name="sprint_20l", x=-200, y=0, size=50,shape=1,icon="sprint1"}, {name='sprint_20l', x=-200, y=0, size=50,shape=1,icon="sprint1"},
{name="sprint_40l", x=0, y=-300, size=40,shape=1,icon="sprint2", unlock={"dig_10l","sprint_100l","marathon_n","sprintPenta","sprintMPH"}}, {name='sprint_40l', x=0, y=-300, size=40,shape=1,icon="sprint2", unlock={'dig_10l','sprint_100l','marathon_n','sprintPenta','sprintMPH'}},
{name="sprint_100l", x=-200, y=-200, size=50,shape=1,icon="sprint2", unlock={"sprint_400l","drought_n"}}, {name='sprint_100l', x=-200, y=-200, size=50,shape=1,icon="sprint2", unlock={'sprint_400l','drought_n'}},
{name="sprint_400l", x=-400, y=-200, size=40,shape=1,icon="sprint3", unlock={"sprint_1000l"}}, {name='sprint_400l', x=-400, y=-200, size=40,shape=1,icon="sprint3", unlock={'sprint_1000l'}},
{name="sprint_1000l", x=-600, y=-200, size=40,shape=1,icon="sprint3"}, {name='sprint_1000l', x=-600, y=-200, size=40,shape=1,icon="sprint3"},
{name="sprintPenta", x=210, y=-370, size=40,shape=3,icon="tech"}, {name='sprintPenta', x=210, y=-370, size=40,shape=3,icon="tech"},
{name="sprintMPH", x=210, y=-230, size=40,shape=3,icon="tech"}, {name='sprintMPH', x=210, y=-230, size=40,shape=3,icon="tech"},
{name="drought_n", x=-400, y=0, size=40,shape=1,icon="drought", unlock={"drought_l"}}, {name='drought_n', x=-400, y=0, size=40,shape=1,icon="drought", unlock={'drought_l'}},
{name="drought_l", x=-600, y=0, size=40,shape=1,icon="mess"}, {name='drought_l', x=-600, y=0, size=40,shape=1,icon="mess"},
{name="dig_10l", x=-200, y=-400, size=40,shape=1,icon="dig_sprint", unlock={"dig_40l"}}, {name='dig_10l', x=-200, y=-400, size=40,shape=1,icon="dig_sprint", unlock={'dig_40l'}},
{name="dig_40l", x=-400, y=-400, size=40,shape=1,icon="dig_sprint", unlock={"dig_100l"}}, {name='dig_40l', x=-400, y=-400, size=40,shape=1,icon="dig_sprint", unlock={'dig_100l'}},
{name="dig_100l", x=-600, y=-400, size=40,shape=1,icon="dig_sprint", unlock={"dig_400l"}}, {name='dig_100l', x=-600, y=-400, size=40,shape=1,icon="dig_sprint", unlock={'dig_400l'}},
{name="dig_400l", x=-800, y=-200, size=40,shape=1,icon="dig_sprint"}, {name='dig_400l', x=-800, y=-200, size=40,shape=1,icon="dig_sprint"},
{name="marathon_n", x=0, y=-600, size=60,shape=1,icon="marathon",unlock={"marathon_h","rhythm_e","solo_e","round_e","blind_e","classic_fast","survivor_e","bigbang","zen"}}, {name='marathon_n', x=0, y=-600, size=60,shape=1,icon="marathon",unlock={'marathon_h','rhythm_e','solo_e','round_e','blind_e','classic_fast','survivor_e','bigbang','zen'}},
{name="marathon_h", x=0, y=-800, size=50,shape=1,icon="marathon",unlock={"master_beginner"}}, {name='marathon_h', x=0, y=-800, size=50,shape=1,icon="marathon",unlock={'master_beginner'}},
{name="solo_e", x=-600, y=-1000,size=40,shape=1,icon="solo", unlock={"solo_n"}}, {name='solo_e', x=-600, y=-1000,size=40,shape=1,icon="solo", unlock={'solo_n'}},
{name="solo_n", x=-800, y=-1000,size=40,shape=1,icon="solo", unlock={"solo_h"}}, {name='solo_n', x=-800, y=-1000,size=40,shape=1,icon="solo", unlock={'solo_h'}},
{name="solo_h", x=-1000,y=-1000,size=40,shape=1,icon="solo", unlock={"solo_l","techmino49_e"}}, {name='solo_h', x=-1000,y=-1000,size=40,shape=1,icon="solo", unlock={'solo_l','techmino49_e'}},
{name="solo_l", x=-1200,y=-1000,size=40,shape=1,icon="solo", unlock={"solo_u"}}, {name='solo_l', x=-1200,y=-1000,size=40,shape=1,icon="solo", unlock={'solo_u'}},
{name="solo_u", x=-1400,y=-1000,size=40,shape=1,icon="solo"}, {name='solo_u', x=-1400,y=-1000,size=40,shape=1,icon="solo"},
{name="techmino49_e", x=-1100,y=-1200,size=40,shape=1,icon="t49", unlock={"techmino49_h","techmino99_e"}}, {name='techmino49_e', x=-1100,y=-1200,size=40,shape=1,icon="t49", unlock={'techmino49_h','techmino99_e'}},
{name="techmino49_h", x=-1100,y=-1400,size=40,shape=1,icon="t49", unlock={"techmino49_u"}}, {name='techmino49_h', x=-1100,y=-1400,size=40,shape=1,icon="t49", unlock={'techmino49_u'}},
{name="techmino49_u", x=-1100,y=-1600,size=40,shape=1,icon="t49"}, {name='techmino49_u', x=-1100,y=-1600,size=40,shape=1,icon="t49"},
{name="techmino99_e", x=-1300,y=-1400,size=40,shape=1,icon="t99", unlock={"techmino99_h"}}, {name='techmino99_e', x=-1300,y=-1400,size=40,shape=1,icon="t99", unlock={'techmino99_h'}},
{name="techmino99_h", x=-1300,y=-1600,size=40,shape=1,icon="t99", unlock={"techmino99_u"}}, {name='techmino99_h', x=-1300,y=-1600,size=40,shape=1,icon="t99", unlock={'techmino99_u'}},
{name="techmino99_u", x=-1300,y=-1800,size=40,shape=1,icon="t99"}, {name='techmino99_u', x=-1300,y=-1800,size=40,shape=1,icon="t99"},
{name="round_e", x=-600, y=-800, size=40,shape=1,icon="round", unlock={"round_n"}}, {name='round_e', x=-600, y=-800, size=40,shape=1,icon="round", unlock={'round_n'}},
{name="round_n", x=-800, y=-800, size=40,shape=1,icon="round", unlock={"round_h"}}, {name='round_n', x=-800, y=-800, size=40,shape=1,icon="round", unlock={'round_h'}},
{name="round_h", x=-1000,y=-800, size=40,shape=1,icon="round", unlock={"round_l"}}, {name='round_h', x=-1000,y=-800, size=40,shape=1,icon="round", unlock={'round_l'}},
{name="round_l", x=-1200,y=-800, size=40,shape=1,icon="round", unlock={"round_u"}}, {name='round_l', x=-1200,y=-800, size=40,shape=1,icon="round", unlock={'round_u'}},
{name="round_u", x=-1400,y=-800, size=40,shape=1,icon="round"}, {name='round_u', x=-1400,y=-800, size=40,shape=1,icon="round"},
{name="master_beginner",x=0, y=-1000,size=40,shape=1,icon="master", unlock={"master_advance"}}, {name='master_beginner',x=0, y=-1000,size=40,shape=1,icon="master", unlock={'master_advance'}},
{name="master_advance", x=0, y=-1200,size=40,shape=3,icon="master", unlock={"master_final","master_extra","master_phantasm"}}, {name='master_advance', x=0, y=-1200,size=40,shape=3,icon="master", unlock={'master_final','master_extra','master_phantasm'}},
{name="master_final", x=0, y=-1600,size=40,shape=2,icon="master"}, {name='master_final', x=0, y=-1600,size=40,shape=2,icon="master"},
{name="master_phantasm",x=-150, y=-1500,size=40,shape=2,icon="master"}, {name='master_phantasm',x=-150, y=-1500,size=40,shape=2,icon="master"},
{name="master_extra", x=150, y=-1500,size=40,shape=2,icon="master_ex"}, {name='master_extra', x=150, y=-1500,size=40,shape=2,icon="master_ex"},
{name="rhythm_e", x=-350, y=-1000,size=40,shape=1,icon="rhythm", unlock={"rhythm_h"}}, {name='rhythm_e', x=-350, y=-1000,size=40,shape=1,icon="rhythm", unlock={'rhythm_h'}},
{name="rhythm_h", x=-350, y=-1200,size=40,shape=3,icon="rhythm", unlock={"rhythm_u"}}, {name='rhythm_h', x=-350, y=-1200,size=40,shape=3,icon="rhythm", unlock={'rhythm_u'}},
{name="rhythm_u", x=-350, y=-1400,size=40,shape=2,icon="rhythm"}, {name='rhythm_u', x=-350, y=-1400,size=40,shape=2,icon="rhythm"},
{name="blind_e", x=150, y=-700, size=40,shape=1,icon="hidden", unlock={"blind_n"}}, {name='blind_e', x=150, y=-700, size=40,shape=1,icon="hidden", unlock={'blind_n'}},
{name="blind_n", x=150, y=-800, size=40,shape=1,icon="hidden", unlock={"blind_h"}}, {name='blind_n', x=150, y=-800, size=40,shape=1,icon="hidden", unlock={'blind_h'}},
{name="blind_h", x=150, y=-900, size=35,shape=1,icon="hidden", unlock={"blind_l"}}, {name='blind_h', x=150, y=-900, size=35,shape=1,icon="hidden", unlock={'blind_l'}},
{name="blind_l", x=150, y=-1000,size=35,shape=3,icon="hidden", unlock={"blind_u"}}, {name='blind_l', x=150, y=-1000,size=35,shape=3,icon="hidden", unlock={'blind_u'}},
{name="blind_u", x=150, y=-1100,size=35,shape=3,icon="hidden", unlock={"blind_wtf"}}, {name='blind_u', x=150, y=-1100,size=35,shape=3,icon="hidden", unlock={'blind_wtf'}},
{name="blind_wtf", x=150, y=-1200,size=35,shape=2,icon="hidden"}, {name='blind_wtf', x=150, y=-1200,size=35,shape=2,icon="hidden"},
{name="classic_fast", x=-150, y=-950, size=40,shape=2,icon="classic"}, {name='classic_fast', x=-150, y=-950, size=40,shape=2,icon="classic"},
{name="survivor_e", x=300, y=-600, size=40,shape=1,icon="survivor",unlock={"survivor_n"}}, {name='survivor_e', x=300, y=-600, size=40,shape=1,icon="survivor",unlock={'survivor_n'}},
{name="survivor_n", x=500, y=-600, size=40,shape=1,icon="survivor",unlock={"survivor_h","attacker_h","defender_n","dig_h"}}, {name='survivor_n', x=500, y=-600, size=40,shape=1,icon="survivor",unlock={'survivor_h','attacker_h','defender_n','dig_h'}},
{name="survivor_h", x=700, y=-600, size=40,shape=1,icon="survivor",unlock={"survivor_l"}}, {name='survivor_h', x=700, y=-600, size=40,shape=1,icon="survivor",unlock={'survivor_l'}},
{name="survivor_l", x=900, y=-600, size=40,shape=3,icon="survivor",unlock={"survivor_u"}}, {name='survivor_l', x=900, y=-600, size=40,shape=3,icon="survivor",unlock={'survivor_u'}},
{name="survivor_u", x=1100, y=-600, size=40,shape=2,icon="survivor"}, {name='survivor_u', x=1100, y=-600, size=40,shape=2,icon="survivor"},
{name="attacker_h", x=300, y=-800, size=40,shape=1,icon="attack", unlock={"attacker_u"}}, {name='attacker_h', x=300, y=-800, size=40,shape=1,icon="attack", unlock={'attacker_u'}},
{name="attacker_u", x=300, y=-1000,size=40,shape=1,icon="attack"}, {name='attacker_u', x=300, y=-1000,size=40,shape=1,icon="attack"},
{name="defender_n", x=500, y=-800, size=40,shape=1,icon="defend", unlock={"defender_l"}}, {name='defender_n', x=500, y=-800, size=40,shape=1,icon="defend", unlock={'defender_l'}},
{name="defender_l", x=500, y=-1000,size=40,shape=1,icon="defend"}, {name='defender_l', x=500, y=-1000,size=40,shape=1,icon="defend"},
{name="dig_h", x=700, y=-800, size=40,shape=1,icon="dig", unlock={"dig_u"}}, {name='dig_h', x=700, y=-800, size=40,shape=1,icon="dig", unlock={'dig_u'}},
{name="dig_u", x=700, y=-1000,size=40,shape=1,icon="dig"}, {name='dig_u', x=700, y=-1000,size=40,shape=1,icon="dig"},
{name="bigbang", x=400, y=-400, size=50,shape=1,icon="bigbang", unlock={"c4wtrain_n","pctrain_n","tech_n"}}, {name='bigbang', x=400, y=-400, size=50,shape=1,icon="bigbang", unlock={'c4wtrain_n','pctrain_n','tech_n'}},
{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=-220, 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=-220, 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=-100, 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=1000, y=-100, size=40,shape=3,icon="pc", unlock={'pc_l'}},
{name="pc_l", x=1200, y=-100, size=40,shape=2,icon="pc"}, {name='pc_l', x=1200, y=-100, 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'}},
{name="tech_h", x=400, y=40, size=40,shape=1,icon="tech", unlock={"tech_h_plus","tech_l"}}, {name='tech_h', x=400, y=40, size=40,shape=1,icon="tech", unlock={'tech_h_plus','tech_l'}},
{name="tech_h_plus", x=200, y=70, size=35,shape=3,icon="tech"}, {name='tech_h_plus', x=200, y=70, size=35,shape=3,icon="tech"},
{name="tech_l", x=400, y=200, size=40,shape=1,icon="tech", unlock={"tech_l_plus"}}, {name='tech_l', x=400, y=200, size=40,shape=1,icon="tech", unlock={'tech_l_plus'}},
{name="tech_l_plus", x=200, y=230, size=35,shape=3,icon="tech"}, {name='tech_l_plus', x=200, y=230, size=35,shape=3,icon="tech"},
{name="tech_finesse", x=800, y=50, size=40,shape=1,icon="tech", unlock={"tech_finesse_f"}}, {name='tech_finesse', x=800, y=50, size=40,shape=1,icon="tech", unlock={'tech_finesse_f'}},
{name="tech_finesse_f", x=1000, y=50, size=40,shape=1,icon="tech"}, {name='tech_finesse_f', x=1000, y=50, size=40,shape=1,icon="tech"},
{name="tsd_e", x=800, y=200, size=40,shape=1,icon="tsd", unlock={"tsd_h"}}, {name='tsd_e', x=800, y=200, size=40,shape=1,icon="tsd", unlock={'tsd_h'}},
{name="tsd_h", x=1000, y=200, size=40,shape=1,icon="tsd", unlock={"tsd_u"}}, {name='tsd_h', x=1000, y=200, size=40,shape=1,icon="tsd", unlock={'tsd_u'}},
{name="tsd_u", x=1200, y=200, size=40,shape=1,icon="tsd"}, {name='tsd_u', x=1200, y=200, size=40,shape=1,icon="tsd"},
{name="backfire_n", x=800, y=350, size=40,shape=1,icon="backfire",unlock={"backfire_h"}}, {name='backfire_n', x=800, y=350, size=40,shape=1,icon="backfire",unlock={'backfire_h'}},
{name="backfire_h", x=950, y=350, size=40,shape=1,icon="backfire",unlock={"backfire_l"}}, {name='backfire_h', x=950, y=350, size=40,shape=1,icon="backfire",unlock={'backfire_l'}},
{name="backfire_l", x=1100, y=350, size=40,shape=3,icon="backfire",unlock={"backfire_u"}}, {name='backfire_l', x=1100, y=350, size=40,shape=3,icon="backfire",unlock={'backfire_u'}},
{name="backfire_u", x=1250, y=350, size=35,shape=2,icon="backfire"}, {name='backfire_u', x=1250, y=350, size=35,shape=2,icon="backfire"},
{name="zen", x=-800, y=-600, size=40,shape=1,icon="zen", unlock={"ultra","infinite","infinite_dig"}}, {name='zen', x=-800, y=-600, size=40,shape=1,icon="zen", unlock={'ultra','infinite','infinite_dig'}},
{name="ultra", x=-1000,y=-400, size=40,shape=1,icon="ultra"}, {name='ultra', x=-1000,y=-400, size=40,shape=1,icon="ultra"},
{name="infinite", x=-800, y=-400, size=40,shape=1,icon="infinite"}, {name='infinite', x=-800, y=-400, size=40,shape=1,icon='infinite'},
{name="infinite_dig", x=-1000,y=-600, size=40,shape=1,icon="dig"}, {name='infinite_dig', x=-1000,y=-600, size=40,shape=1,icon="dig"},
{name="sprintFix"}, {name='sprintFix'},
{name="sprintLock"}, {name='sprintLock'},
{name="marathon_bfmax"}, {name='marathon_bfmax'},
{name="custom_puzzle"}, {name='custom_puzzle'},
{name="custom_clear"}, {name='custom_clear'},
{name="netBattle"}, {name="netBattle"},
} }

View File

@@ -26,16 +26,16 @@ return{
D.wave=D.wave+1 D.wave=D.wave+1
if D.wave%10==0 then if D.wave%10==0 then
if D.wave==20 then if D.wave==20 then
P:showTextF(text.great,0,-140,100,"appear",.6) P:showTextF(text.great,0,-140,100,'appear',.6)
P.gameEnv.pushSpeed=3 P.gameEnv.pushSpeed=3
elseif D.wave==50 then elseif D.wave==50 then
P:showTextF(text.maxspeed,0,-140,100,"appear",.6) P:showTextF(text.maxspeed,0,-140,100,'appear',.6)
end end
end end
end end
end end
end, end,
bg="rainbow2",bgm="shining terminal", bg='rainbow2',bgm='shining terminal',
}, },
pauseLimit=true, pauseLimit=true,
load=function() load=function()

View File

@@ -30,19 +30,19 @@ return{
D.wave=D.wave+1 D.wave=D.wave+1
if D.wave%10==0 then if D.wave%10==0 then
if D.wave==10 then if D.wave==10 then
P:showTextF(text.great,0,-140,100,"appear",.6) P:showTextF(text.great,0,-140,100,'appear',.6)
P.gameEnv.pushSpeed=4 P.gameEnv.pushSpeed=4
elseif D.wave==20 then elseif D.wave==20 then
P:showTextF(text.awesome,0,-140,100,"appear",.6) P:showTextF(text.awesome,0,-140,100,'appear',.6)
P.gameEnv.pushSpeed=5 P.gameEnv.pushSpeed=5
elseif D.wave==30 then elseif D.wave==30 then
P:showTextF(text.maxspeed,0,-140,100,"appear",.6) P:showTextF(text.maxspeed,0,-140,100,'appear',.6)
end end
end end
end end
end end
end, end,
bg="rainbow2",bgm="shining terminal", bg='rainbow2',bgm='shining terminal',
}, },
pauseLimit=true, pauseLimit=true,
load=function() load=function()

View File

@@ -8,10 +8,10 @@ return{
P:receive(nil,P.lastPiece.atk,60,generateLine(P:RND(10))) P:receive(nil,P.lastPiece.atk,60,generateLine(P:RND(10)))
end end
if P.stat.atk>=100 then if P.stat.atk>=100 then
P:win("finish") P:win('finish')
end end
end, end,
bg="tunnel",bgm="echo", bg='tunnel',bgm='echo',
}, },
pauseLimit=true, pauseLimit=true,
load=function() load=function()

View File

@@ -8,10 +8,10 @@ return{
P:receive(nil,P.lastPiece.atk,30,generateLine(P:RND(10))) P:receive(nil,P.lastPiece.atk,30,generateLine(P:RND(10)))
end end
if P.stat.atk>=100 then if P.stat.atk>=100 then
P:win("finish") P:win('finish')
end end
end, end,
bg="blackhole",bgm="echo", bg='blackhole',bgm='echo',
}, },
pauseLimit=true, pauseLimit=true,
load=function() load=function()

View File

@@ -7,10 +7,10 @@ return{
P:receive(nil,P.lastPiece.atk,120,generateLine(P:RND(10))) P:receive(nil,P.lastPiece.atk,120,generateLine(P:RND(10)))
end end
if P.stat.atk>=100 then if P.stat.atk>=100 then
P:win("finish") P:win('finish')
end end
end, end,
bg="tunnel",bgm="echo", bg='tunnel',bgm='echo',
}, },
pauseLimit=true, pauseLimit=true,
load=function() load=function()

View File

@@ -8,10 +8,10 @@ return{
P:receive(nil,P.lastPiece.atk,0,generateLine(P:RND(10))) P:receive(nil,P.lastPiece.atk,0,generateLine(P:RND(10)))
end end
if P.stat.atk>=100 then if P.stat.atk>=100 then
P:win("finish") P:win('finish')
end end
end, end,
bg="blackhole",bgm="echo", bg='blackhole',bgm='echo',
}, },
pauseLimit=true, pauseLimit=true,
load=function() load=function()

View File

@@ -1,18 +1,17 @@
local format=string.format
return{ return{
color=COLOR.lH, color=COLOR.lH,
env={ env={
drop=1e99,lock=1e99, drop=1e99,lock=1e99,
holdCount=0, holdCount=0,
dropPiece=function(P)P:lose()end, dropPiece=function(P)P:lose()end,
bg="bg1",bgm="new era", bg='bg1',bgm='new era',
}, },
pauseLimit=true, pauseLimit=true,
load=function() load=function()
PLY.newPlayer(1) PLY.newPlayer(1)
end, end,
score=function(P)return{P.modeData.event,P.stat.finesseRate*25/P.stat.piece}end, score=function(P)return{P.modeData.event,P.stat.finesseRate*20/P.stat.piece}end,
scoreDisp=function(D)return D[1].."Stage "..format("%.2f",D[2]).."%"end, scoreDisp=function(D)return("%d Stage %.2f%"):format(D[1],D[2])end,
comp=function(a,b)return a[1]>b[1]or a[1]==b[1]and a[2]>b[2]end, comp=function(a,b)return a[1]>b[1]or a[1]==b[1]and a[2]>b[2]end,
getRank=function(P) getRank=function(P)
local W=P.modeData.event local W=P.modeData.event

View File

@@ -3,10 +3,10 @@ return{
color=COLOR.cyan, color=COLOR.cyan,
env={ env={
drop=30,lock=45, drop=30,lock=45,
visible="easy", visible='easy',
dropPiece=function(P)if P.stat.row>=200 then P:win("finish")end end, dropPiece=function(P)if P.stat.row>=200 then P:win('finish')end end,
freshLimit=10, freshLimit=10,
bg="glow",bgm="push", bg='glow',bgm='push',
}, },
pauseLimit=true, pauseLimit=true,
load=function() load=function()

View File

@@ -6,11 +6,11 @@ return{
drop=15,lock=45, drop=15,lock=45,
fall=10, fall=10,
dropFX=0,lockFX=0, dropFX=0,lockFX=0,
visible="none", visible='none',
score=false, score=false,
dropPiece=function(P)if P.stat.row>=200 then P:win("finish")end end, dropPiece=function(P)if P.stat.row>=200 then P:win('finish')end end,
freshLimit=15, freshLimit=15,
bg="rgb",bgm="push", bg='rgb',bgm='push',
}, },
pauseLimit=true, pauseLimit=true,
load=function() load=function()

View File

@@ -7,11 +7,11 @@ return{
fall=5, fall=5,
ghost=0, ghost=0,
dropFX=0,lockFX=0, dropFX=0,lockFX=0,
visible="none", visible='none',
score=false, score=false,
dropPiece=function(P)if P.stat.row>=200 then P:win("finish")end end, dropPiece=function(P)if P.stat.row>=200 then P:win('finish')end end,
freshLimit=15, freshLimit=15,
bg="rgb",bgm="push", bg='rgb',bgm='push',
}, },
pauseLimit=true, pauseLimit=true,
load=function() load=function()

View File

@@ -5,9 +5,9 @@ return{
env={ env={
drop=15,lock=45, drop=15,lock=45,
freshLimit=10, freshLimit=10,
visible="fast", visible='fast',
dropPiece=function(P)if P.stat.row>=200 then P:win("finish")end end, dropPiece=function(P)if P.stat.row>=200 then P:win('finish')end end,
bg="glow",bgm="push", bg='glow',bgm='push',
}, },
pauseLimit=true, pauseLimit=true,
load=function() load=function()

View File

@@ -6,11 +6,11 @@ return{
drop=30,lock=60, drop=30,lock=60,
block=false,center=0,ghost=0, block=false,center=0,ghost=0,
dropFX=0,lockFX=0, dropFX=0,lockFX=0,
visible="none", visible='none',
score=false, score=false,
dropPiece=function(P)if P.stat.row>=100 then P:win("finish")end end, dropPiece=function(P)if P.stat.row>=100 then P:win('finish')end end,
freshLimit=15, freshLimit=15,
bg="rgb",bgm="far", bg='rgb',bgm='far',
}, },
pauseLimit=true, pauseLimit=true,
load=function() load=function()

View File

@@ -7,10 +7,10 @@ return{
nextCount=1, nextCount=1,
block=false,center=0,ghost=0, block=false,center=0,ghost=0,
dropFX=0,lockFX=0, dropFX=0,lockFX=0,
visible="none", visible='none',
dropPiece=function(P)if P.stat.row>=40 then P:win("finish")end end, dropPiece=function(P)if P.stat.row>=40 then P:win('finish')end end,
freshLimit=15, freshLimit=15,
bg="none",bgm="far", bg='none',bgm='far',
}, },
pauseLimit=true, pauseLimit=true,
load=function() load=function()
@@ -23,19 +23,19 @@ return{
if not GAME.result then if not GAME.result then
if GAME.replaying then if GAME.replaying then
gc.setColor(.3,.3,.3,.7) gc.setColor(.3,.3,.3,.7)
gc.push("transform") gc.push('transform')
gc.origin() gc.origin()
gc.rectangle("fill",0,0,SCR.w,SCR.h) gc.rectangle('fill',0,0,SCR.w,SCR.h)
gc.pop() gc.pop()
else else
gc.clear(.26,.26,.26) gc.clear(.26,.26,.26)
--Frame --Frame
gc.setColor(.5,.5,.5) gc.setColor(.5,.5,.5)
gc.push("transform") gc.push('transform')
gc.translate(150,0) gc.translate(150,0)
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() gc.pop()
end end
end end

View File

@@ -13,7 +13,7 @@ local function check_c4w(P)
P.modeData.maxCombo=P.combo P.modeData.maxCombo=P.combo
end end
if P.stat.row>=100 then if P.stat.row>=100 then
P:win("finish") P:win('finish')
end end
end end
end end
@@ -25,7 +25,7 @@ return{
task=function(P)P.modeData.maxCombo=0 end, task=function(P)P.modeData.maxCombo=0 end,
dropPiece=check_c4w, dropPiece=check_c4w,
freshLimit=15,ospin=false, freshLimit=15,ospin=false,
bg="rgb",bgm="oxygen", bg='rgb',bgm='oxygen',
}, },
pauseLimit=true, pauseLimit=true,
load=function() load=function()

View File

@@ -11,7 +11,7 @@ local function check_c4w(P)
P.modeData.maxCombo=P.combo P.modeData.maxCombo=P.combo
end end
if P.stat.row>=100 then if P.stat.row>=100 then
P:win("finish") P:win('finish')
end end
end end
end end
@@ -23,7 +23,7 @@ return{
task=function(P)P.modeData.maxCombo=0 end, task=function(P)P.modeData.maxCombo=0 end,
dropPiece=check_c4w, dropPiece=check_c4w,
freshLimit=15,ospin=false, freshLimit=15,ospin=false,
bg="rgb",bgm="oxygen", bg='rgb',bgm='oxygen',
}, },
pauseLimit=true, pauseLimit=true,
load=function() load=function()

View File

@@ -1,5 +1,4 @@
local gc=love.graphics local gc=love.graphics
local format=string.format
return{ return{
color=COLOR.lBlue, color=COLOR.lBlue,
@@ -11,8 +10,8 @@ return{
center=0,ghost=0, center=0,ghost=0,
drop=3,lock=3,wait=10,fall=25, drop=3,lock=3,wait=10,fall=25,
nextCount=1,holdCount=false, nextCount=1,holdCount=false,
sequence="rnd", sequence='rnd',
RS="Classic", RS='Classic',
freshLimit=0, freshLimit=0,
face={0,0,2,2,2,0,0}, face={0,0,2,2,2,0,0},
task=function(P)P.modeData.target=10 end, task=function(P)P.modeData.target=10 end,
@@ -22,16 +21,16 @@ return{
D.target=D.target+10 D.target=D.target+10
if D.target==110 then if D.target==110 then
P.gameEnv.drop,P.gameEnv.lock=2,2 P.gameEnv.drop,P.gameEnv.lock=2,2
SFX.play("blip_1") SFX.play('blip_1')
elseif D.target==200 then elseif D.target==200 then
P.gameEnv.drop,P.gameEnv.lock=1,1 P.gameEnv.drop,P.gameEnv.lock=1,1
SFX.play("blip_1") SFX.play('blip_1')
else else
SFX.play("reach") SFX.play('reach')
end end
end end
end, end,
bg="rgb",bgm="magicblock", bg='rgb',bgm='magicblock',
}, },
slowMark=true, slowMark=true,
load=function() load=function()
@@ -40,12 +39,12 @@ return{
mesDisp=function(P) mesDisp=function(P)
setFont(75) setFont(75)
local r=P.modeData.target*.1 local r=P.modeData.target*.1
mStr(r<11 and 18 or r<22 and r+8 or format("%02x",r*10-220),69,210) mStr(r<11 and 18 or r<22 and r+8 or("%02x"):format(r*10-220),69,210)
mText(drawableText.speedLV,69,290) mText(drawableText.speedLV,69,290)
setFont(45) setFont(45)
mStr(P.stat.row,69,320) mStr(P.stat.row,69,320)
mStr(P.modeData.target,69,370) mStr(P.modeData.target,69,370)
gc.rectangle("fill",25,375,90,4) gc.rectangle('fill',25,375,90,4)
end, end,
score=function(P)return{P.stat.score,P.stat.row}end, score=function(P)return{P.stat.score,P.stat.row}end,
scoreDisp=function(D)return D[1].." "..D[2].." Lines"end, scoreDisp=function(D)return D[1].." "..D[2].." Lines"end,

View File

@@ -38,9 +38,9 @@ local function checkClear(P)
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)
SFX.play("blip_1") SFX.play('blip_1')
else else
P:win("finish") P:win('finish')
end end
end end
end end
@@ -63,12 +63,12 @@ return{
PLY.newPlayer(1) PLY.newPlayer(1)
local AItype=ENV.opponent:sub(1,2) local AItype=ENV.opponent:sub(1,2)
local AIlevel=tonumber(ENV.opponent:sub(-1)) local AIlevel=tonumber(ENV.opponent:sub(-1))
if AItype=="9S"then if AItype=='9S'then
ENV.target=nil 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 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
for _,P in next,PLY_ALIVE do for _,P in next,PLY_ALIVE do

View File

@@ -23,11 +23,11 @@ local function puzzleCheck(P)
P.field[_],P.visTime[_]=nil P.field[_],P.visTime[_]=nil
end end
SYSFX.newShade(1.4,P.absFieldX,P.absFieldY,300*P.size,610*P.size,.3,1,.3) SYSFX.newShade(1.4,P.absFieldX,P.absFieldY,300*P.size,610*P.size,.3,1,.3)
SFX.play("reach") SFX.play('reach')
D.showMark=0 D.showMark=0
else else
D.showMark=1 D.showMark=1
P:win("finish") P:win('finish')
end end
end end
@@ -43,17 +43,17 @@ return{
local ENV=GAME.modeEnv local ENV=GAME.modeEnv
local AItype=ENV.opponent:sub(1,2) local AItype=ENV.opponent:sub(1,2)
local AIlevel=tonumber(ENV.opponent:sub(-1)) 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
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
end, end,
mesDisp=function(P) mesDisp=function(P)
setFont(55) setFont(55)
mStr(P.stat.row,69,225) mStr(P.stat.row,69,225)
mText(drawableText.line,69,290) mText(drawableText.line,69,290)
gc.push("transform") gc.push('transform')
PLY.draw.applyFieldOffset(P) PLY.draw.applyFieldOffset(P)
if P.modeData.showMark==0 then if P.modeData.showMark==0 then
local mark=TEXTURE.puzzleMark local mark=TEXTURE.puzzleMark

View File

@@ -24,15 +24,15 @@ return{
if D.wave<=75 then if D.wave<=75 then
D.rpm=math.floor(144e3/t)*.1 D.rpm=math.floor(144e3/t)*.1
if D.wave==25 then if D.wave==25 then
P:showTextF(text.great,0,-140,100,"appear",.6) P:showTextF(text.great,0,-140,100,'appear',.6)
P.gameEnv.pushSpeed=3 P.gameEnv.pushSpeed=3
P.dropDelay,P.gameEnv.drop=4,4 P.dropDelay,P.gameEnv.drop=4,4
elseif D.wave==50 then elseif D.wave==50 then
P:showTextF(text.awesome,0,-140,100,"appear",.6) P:showTextF(text.awesome,0,-140,100,'appear',.6)
P.gameEnv.pushSpeed=4 P.gameEnv.pushSpeed=4
P.dropDelay,P.gameEnv.drop=3,3 P.dropDelay,P.gameEnv.drop=3,3
elseif D.wave==75 then elseif D.wave==75 then
P:showTextF(text.maxspeed,0,-140,100,"appear",.6) P:showTextF(text.maxspeed,0,-140,100,'appear',.6)
P.dropDelay,P.gameEnv.drop=2,2 P.dropDelay,P.gameEnv.drop=2,2
end end
end end
@@ -40,7 +40,7 @@ return{
end end
end end
end, end,
bg="rainbow2",bgm="storm", bg='rainbow2',bgm='storm',
}, },
pauseLimit=true, pauseLimit=true,
load=function() load=function()

View File

@@ -24,23 +24,23 @@ return{
if D.wave<=90 then if D.wave<=90 then
D.rpm=math.floor(108e3/t)*.1 D.rpm=math.floor(108e3/t)*.1
if D.wave==25 then if D.wave==25 then
P:showTextF(text.great,0,-140,100,"appear",.6) P:showTextF(text.great,0,-140,100,'appear',.6)
P.gameEnv.pushSpeed=2 P.gameEnv.pushSpeed=2
P.dropDelay,P.gameEnv.drop=20,20 P.dropDelay,P.gameEnv.drop=20,20
elseif D.wave==50 then elseif D.wave==50 then
P:showTextF(text.awesome,0,-140,100,"appear",.6) P:showTextF(text.awesome,0,-140,100,'appear',.6)
P.gameEnv.pushSpeed=3 P.gameEnv.pushSpeed=3
P.dropDelay,P.gameEnv.drop=10,10 P.dropDelay,P.gameEnv.drop=10,10
elseif D.wave==90 then elseif D.wave==90 then
P.dropDelay,P.gameEnv.drop=5,5 P.dropDelay,P.gameEnv.drop=5,5
P:showTextF(text.maxspeed,0,-140,100,"appear",.6) P:showTextF(text.maxspeed,0,-140,100,'appear',.6)
end end
end end
end end
end end
end end
end, end,
bg="rainbow2",bgm="storm", bg='rainbow2',bgm='storm',
}, },
pauseLimit=true, pauseLimit=true,
load=function() load=function()

View File

@@ -3,7 +3,7 @@ local function check_rise(P)
P:garbageRise(21,1,P:getHolePos()) P:garbageRise(21,1,P:getHolePos())
end end
if P.stat.dig==100 then if P.stat.dig==100 then
P:win("finish") P:win('finish')
end end
end end
@@ -12,7 +12,7 @@ return{
env={ env={
pushSpeed=6, pushSpeed=6,
dropPiece=check_rise, dropPiece=check_rise,
bg="bg2",bgm="way", bg='bg2',bgm='way',
}, },
load=function() load=function()
PLY.newPlayer(1) PLY.newPlayer(1)

View File

@@ -1,6 +1,6 @@
local function check_rise(P) local function check_rise(P)
if P.stat.dig==10 then if P.stat.dig==10 then
P:win("finish") P:win('finish')
end end
end end
@@ -9,7 +9,7 @@ return{
env={ env={
pushSpeed=6, pushSpeed=6,
dropPiece=check_rise, dropPiece=check_rise,
bg="bg1",bgm="way", bg='bg1',bgm='way',
}, },
load=function() load=function()
PLY.newPlayer(1) PLY.newPlayer(1)

View File

@@ -3,7 +3,7 @@ local function check_rise(P)
P:garbageRise(21,1,P:getHolePos()) P:garbageRise(21,1,P:getHolePos())
end end
if P.stat.dig==400 then if P.stat.dig==400 then
P:win("finish") P:win('finish')
end end
end end
@@ -12,7 +12,7 @@ return{
env={ env={
pushSpeed=6, pushSpeed=6,
dropPiece=check_rise, dropPiece=check_rise,
bg="bg2",bgm="way", bg='bg2',bgm='way',
}, },
load=function() load=function()
PLY.newPlayer(1) PLY.newPlayer(1)

View File

@@ -3,7 +3,7 @@ local function check_rise(P)
P:garbageRise(21,1,P:getHolePos()) P:garbageRise(21,1,P:getHolePos())
end end
if P.stat.dig==40 then if P.stat.dig==40 then
P:win("finish") P:win('finish')
end end
end end
@@ -12,7 +12,7 @@ return{
env={ env={
pushSpeed=6, pushSpeed=6,
dropPiece=check_rise, dropPiece=check_rise,
bg="bg1",bgm="way", bg='bg1',bgm='way',
}, },
load=function() load=function()
PLY.newPlayer(1) PLY.newPlayer(1)

View File

@@ -19,7 +19,7 @@ return{
end end
end end
end, end,
bg="bg2",bgm="down", bg='bg2',bgm='down',
}, },
pauseLimit=true, pauseLimit=true,
load=function() load=function()

View File

@@ -18,7 +18,7 @@ return{
end end
end end
end, end,
bg="bg2",bgm="down", bg='bg2',bgm='down',
}, },
pauseLimit=true, pauseLimit=true,
load=function() load=function()

View File

@@ -75,11 +75,11 @@ return{
end end
end end
end, end,
dropPiece=function(P)if P.stat.row>=100 then P:win("finish")end end, dropPiece=function(P)if P.stat.row>=100 then P:win('finish')end end,
nextCount=1,holdCount=0, nextCount=1,holdCount=0,
ospin=false, ospin=false,
freshLimit=15, freshLimit=15,
bg="glow",bgm="reason", bg='blockfall',bgm='reason',
}, },
pauseLimit=true, pauseLimit=true,
load=function() load=function()

View File

@@ -3,13 +3,13 @@ return{
color=COLOR.green, color=COLOR.green,
env={ env={
drop=20,lock=60, drop=20,lock=60,
sequence="bag", sequence='bag',
seqData={1,1,2,2,3,3,4,4,5,5,6,6}, seqData={1,1,2,2,3,3,4,4,5,5,6,6},
dropPiece=function(P)if P.stat.row>=100 then P:win("finish")end end, dropPiece=function(P)if P.stat.row>=100 then P:win('finish')end end,
nextCount=3, nextCount=3,
ospin=false, ospin=false,
freshLimit=15, freshLimit=15,
bg="glow",bgm="reason", bg='blockfall',bgm='reason',
}, },
pauseLimit=true, pauseLimit=true,
load=function() load=function()

View File

@@ -1,18 +1,17 @@
local format=string.format
return{ return{
color=COLOR.white, color=COLOR.white,
env={ env={
drop=1e99,lock=1e99, drop=1e99,lock=1e99,
infHold=true, infHold=true,
bg="glow",bgm="infinite", bg='blockfall',bgm='infinite',
}, },
load=function() load=function()
PLY.newPlayer(1) PLY.newPlayer(1)
end, end,
mesDisp=function(P) mesDisp=function(P)
setFont(45) setFont(45)
mStr(format("%.1f",P.stat.atk),69,190) mStr(("%.1f"):format(P.stat.atk),69,190)
mStr(format("%.2f",P.stat.atk/P.stat.row),69,310) mStr(("%.2f"):format(P.stat.atk/P.stat.row),69,310)
mText(drawableText.atk,69,243) mText(drawableText.atk,69,243)
mText(drawableText.eff,69,363) mText(drawableText.eff,69,363)
end, end,

View File

@@ -1,12 +1,11 @@
local format=string.format
local function check_rise(P) local function check_rise(P)
local L=P.garbageBeneath local L=P.garbageBeneath
if #P.clearedRow==0 then if #P.clearedRow==0 then
if L>0 then if L>0 then
if L<3 then if L<3 then
P:showTextF(text.almost,0,-120,80,"beat",.8) P:showTextF(text.almost,0,-120,80,'beat',.8)
elseif L<5 then elseif L<5 then
P:showTextF(text.great,0,-120,80,"fly",.8) P:showTextF(text.great,0,-120,80,'fly',.8)
end end
end end
for _=1,8-L do for _=1,8-L do
@@ -14,8 +13,8 @@ local function check_rise(P)
end end
else else
if L==0 then if L==0 then
P:showTextF(text.awesome,0,-120,80,"beat",.6) P:showTextF(text.awesome,0,-120,80,'beat',.6)
SFX.play("clear") SFX.play('clear')
BG.send(26) BG.send(26)
for _=1,8 do for _=1,8 do
P:garbageRise(13,1,generateLine(P:RND(10))) P:garbageRise(13,1,generateLine(P:RND(10)))
@@ -33,7 +32,7 @@ return{
infHold=true, infHold=true,
dropPiece=check_rise, dropPiece=check_rise,
pushSpeed=1.2, pushSpeed=1.2,
bg="wing",bgm="dream", bg='wing',bgm='dream',
}, },
load=function() load=function()
PLY.newPlayer(1) PLY.newPlayer(1)
@@ -47,7 +46,7 @@ return{
setFont(45) setFont(45)
mStr(P.stat.dig,69,190) mStr(P.stat.dig,69,190)
mStr(P.stat.atk,69,310) mStr(P.stat.atk,69,310)
mStr(format("%.2f",P.stat.atk/P.stat.row),69,420) mStr(("%.2f"):format(P.stat.atk/P.stat.row),69,420)
mText(drawableText.line,69,243) mText(drawableText.line,69,243)
mText(drawableText.atk,69,363) mText(drawableText.atk,69,363)
mText(drawableText.eff,69,475) mText(drawableText.eff,69,475)

View File

@@ -9,26 +9,26 @@ return{
task=function(P)P.modeData.target=10 end, task=function(P)P.modeData.target=10 end,
dropPiece=function(P) dropPiece=function(P)
if P.combo>1 or P.b2b>0 or P.lastPiece.row>1 then if P.combo>1 or P.b2b>0 or P.lastPiece.row>1 then
if P.combo>1 then P:showText("2x",0,-220,40,"flicker",.3)end if P.combo>1 then P:showText("2x",0,-220,40,'flicker',.3)end
if P.b2b>0 then P:showText("spin",0,-160,40,"flicker",.3)end if P.b2b>0 then P:showText("spin",0,-160,40,'flicker',.3)end
if P.lastPiece.row>1 then P:showText("1+",0,-100,40,"flicker",.3)end if P.lastPiece.row>1 then P:showText("1+",0,-100,40,'flicker',.3)end
P:lose() P:lose()
return return
end end
local T=P.modeData.target local T=P.modeData.target
if P.stat.row>=T then if P.stat.row>=T then
if T==200 then if T==200 then
P:win("finish") P:win('finish')
else else
T=T+10 T=T+10
P.gameEnv.drop=dropSpeed[T/10] P.gameEnv.drop=dropSpeed[T/10]
P.modeData.target=T P.modeData.target=T
SFX.play("reach") SFX.play('reach')
end end
end end
end, end,
mindas=7,minarr=1,minsdarr=1, mindas=7,minarr=1,minsdarr=1,
bg="bg2",bgm="sugar fairy", bg='bg2',bgm='sugar fairy',
}, },
pauseLimit=true, pauseLimit=true,
slowMark=true, slowMark=true,
@@ -39,7 +39,7 @@ return{
setFont(45) setFont(45)
mStr(P.stat.row,69,320) mStr(P.stat.row,69,320)
mStr(P.modeData.target,69,370) mStr(P.modeData.target,69,370)
gc.rectangle("fill",25,375,90,4) gc.rectangle('fill',25,375,90,4)
end, end,
getRank=function(P) getRank=function(P)
local L=P.stat.row local L=P.stat.row

View File

@@ -12,17 +12,17 @@ return{
if P.modeData.target==50 then if P.modeData.target==50 then
P.gameEnv.drop=.25 P.gameEnv.drop=.25
P.modeData.target=100 P.modeData.target=100
SFX.play("reach") SFX.play('reach')
elseif P.modeData.target==100 then elseif P.modeData.target==100 then
P:set20G(true) P:set20G(true)
P.modeData.target=200 P.modeData.target=200
SFX.play("reach") SFX.play('reach')
else else
P:win("finish") P:win('finish')
end end
end end
end, end,
bg="cubes",bgm="push", bg='cubes',bgm='push',
}, },
pauseLimit=true, pauseLimit=true,
slowMark=true, slowMark=true,
@@ -33,7 +33,7 @@ return{
setFont(45) setFont(45)
mStr(P.stat.row,69,320) mStr(P.stat.row,69,320)
mStr(P.modeData.target,69,370) mStr(P.modeData.target,69,370)
gc.rectangle("fill",25,375,90,4) gc.rectangle('fill',25,375,90,4)
end, end,
score=function(P)return{math.min(P.stat.row,200),P.stat.time}end, score=function(P)return{math.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,

View File

@@ -10,16 +10,16 @@ return{
dropPiece=function(P) dropPiece=function(P)
if P.stat.row>=P.modeData.target then if P.stat.row>=P.modeData.target then
if P.modeData.target==200 then if P.modeData.target==200 then
P:win("finish") P:win('finish')
else else
P.gameEnv.drop=dropSpeed[P.modeData.target/10] P.gameEnv.drop=dropSpeed[P.modeData.target/10]
P.modeData.target=P.modeData.target+10 P.modeData.target=P.modeData.target+10
SFX.play("reach") SFX.play('reach')
end end
end end
end, end,
mindas=7,minarr=1,minsdarr=1, mindas=7,minarr=1,minsdarr=1,
bg="bg2",bgm="push", bg='bg2',bgm='push',
}, },
pauseLimit=true, pauseLimit=true,
slowMark=true, slowMark=true,
@@ -30,7 +30,7 @@ return{
setFont(45) setFont(45)
mStr(P.stat.row,69,320) mStr(P.stat.row,69,320)
mStr(P.modeData.target,69,370) mStr(P.modeData.target,69,370)
gc.rectangle("fill",25,375,90,4) gc.rectangle('fill',25,375,90,4)
end, end,
score=function(P)return{math.min(P.stat.row,200),P.stat.time}end, score=function(P)return{math.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,

View File

@@ -14,11 +14,11 @@ local function score(P)
D.pt=D.pt+s D.pt=D.pt+s
if D.pt%100==99 then if D.pt%100==99 then
SFX.play("blip_1") SFX.play('blip_1')
elseif D.pt>=D.target then--Level up! elseif D.pt>=D.target then--Level up!
s=D.target/100 s=D.target/100
local E=P.gameEnv local E=P.gameEnv
BG.set(s==1 and"rainbow"or s==2 and"rainbow2"or s==3 and"lightning"or s==4 and"lightning2"or"lightning") BG.set(s==1 and'rainbow'or s==2 and'rainbow2'or s==3 and'lightning'or s==4 and'lightning2'or'lightning')
E.lock=death_lock[s] E.lock=death_lock[s]
E.wait=death_wait[s] E.wait=death_wait[s]
E.fall=death_fall[s] E.fall=death_fall[s]
@@ -29,12 +29,12 @@ local function score(P)
if s==5 then if s==5 then
D.pt=500 D.pt=500
P:win("finish") P:win('finish')
else else
D.target=D.target+100 D.target=D.target+100
P:showTextF(text.stage:gsub("$1",s),0,-120,80,"fly") P:showTextF(text.stage:gsub("$1",s),0,-120,80,'fly')
end end
SFX.play("reach") SFX.play('reach')
end end
end end
@@ -53,7 +53,7 @@ return{
P.modeData.target=100 P.modeData.target=100
end, end,
freshLimit=15, freshLimit=15,
bg="bg2",bgm="secret7th", bg='bg2',bgm='secret7th',
}, },
slowMark=true, slowMark=true,
load=function() load=function()
@@ -63,7 +63,7 @@ return{
setFont(45) setFont(45)
mStr(P.modeData.pt,69,320) mStr(P.modeData.pt,69,320)
mStr(P.modeData.target,69,370) mStr(P.modeData.target,69,370)
gc.rectangle("fill",25,375,90,4) gc.rectangle('fill',25,375,90,4)
end, end,
score=function(P)return{P.modeData.pt,P.stat.time}end, score=function(P)return{P.modeData.pt,P.stat.time}end,
scoreDisp=function(D)return D[1].."P "..STRING.time(D[2])end, scoreDisp=function(D)return D[1].."P "..STRING.time(D[2])end,

Some files were not shown because too many files have changed in this diff Show More