Merge branch 'main' of https://github.com/26F-Studio/Techmino into main
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:
@@ -1,7 +1,7 @@
|
||||
local printf=love.graphics.printf
|
||||
local draw=love.graphics.draw
|
||||
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.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
|
||||
|
||||
@@ -46,7 +46,7 @@ function BGM.init(list)
|
||||
for i=1,count do
|
||||
local file="media/BGM/"..list[i]..".ogg"
|
||||
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]]:setVolume(0)
|
||||
else
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
local gc=love.graphics
|
||||
local cmds={
|
||||
reset="origin",
|
||||
trans="translate",
|
||||
origin="origin",
|
||||
move="translate",
|
||||
scale="scale",
|
||||
rotat="rotate",
|
||||
rotate="rotate",
|
||||
clear="clear",
|
||||
|
||||
setCL="setColor",
|
||||
@@ -12,23 +12,26 @@ local cmds={
|
||||
setLS="setLineStyle",
|
||||
setLJ="setLineJoin",
|
||||
|
||||
draw="draw",
|
||||
dLine="line",
|
||||
fRect=function(...)gc.rectangle("fill",...)end,
|
||||
dRect=function(...)gc.rectangle("line",...)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,
|
||||
setFT=setFont,
|
||||
print="print",
|
||||
mText=function(...)ADRAW.str(...)end,
|
||||
mDraw=function(...)ADRAW.draw(...)end,
|
||||
|
||||
drArc=function(...)gc.arc("line",...)end,
|
||||
flArc=function(...)gc.arc("fill",...)end,
|
||||
dpArc=function(...)gc.arc("line","pie",...)end,
|
||||
doArc=function(...)gc.arc("line","open",...)end,
|
||||
dcArc=function(...)gc.arc("line","closed",...)end,
|
||||
fpArc=function(...)gc.arc("fill","pie",...)end,
|
||||
foArc=function(...)gc.arc("fill","open",...)end,
|
||||
fcArc=function(...)gc.arc("fill","closed",...)end,
|
||||
draw="draw",
|
||||
line="line",
|
||||
fRect=function(...)gc.rectangle('fill',...)end,
|
||||
dRect=function(...)gc.rectangle('line',...)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,
|
||||
|
||||
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)
|
||||
gc.push()
|
||||
@@ -38,11 +41,19 @@ return function(L)
|
||||
gc.setColor(1,1,1)
|
||||
gc.setLineWidth(1)
|
||||
for i=3,#L do
|
||||
local cmd=cmds[L[i][1]]
|
||||
if type(cmd)=="string"then
|
||||
gc[cmd](unpack(L[i],2))
|
||||
else
|
||||
cmd(unpack(L[i],2))
|
||||
local cmd=L[i][1]
|
||||
if type(cmd)=='boolean'and cmd then
|
||||
table.remove(L[i],1)
|
||||
cmd=L[i][1]
|
||||
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
|
||||
gc.setCanvas()
|
||||
|
||||
@@ -14,34 +14,34 @@ return function(L,t)
|
||||
else
|
||||
s="return{\n"
|
||||
t=1
|
||||
if type(L)~="table"then
|
||||
if type(L)~='table'then
|
||||
return
|
||||
end
|
||||
end
|
||||
local count=1
|
||||
for k,v in next,L do
|
||||
local T=type(k)
|
||||
if T=="number"then
|
||||
if T=='number'then
|
||||
if k==count then
|
||||
k=""
|
||||
count=count+1
|
||||
else
|
||||
k="["..k.."]="
|
||||
end
|
||||
elseif T=="string"then
|
||||
elseif T=='string'then
|
||||
if find(k,"[^0-9a-zA-Z_]")then
|
||||
k="[\""..k.."\"]="
|
||||
else
|
||||
k=k.."="
|
||||
end
|
||||
elseif T=="boolean"then k="["..k.."]="
|
||||
elseif T=='boolean'then k="["..k.."]="
|
||||
else error("Error key type!")
|
||||
end
|
||||
T=type(v)
|
||||
if T=="number"then v=tostring(v)
|
||||
elseif T=="string"then v="\""..v.."\""
|
||||
elseif T=="table"then v=TABLE.dump(v,t+1)
|
||||
elseif T=="boolean"then v=tostring(v)
|
||||
if T=='number'then v=tostring(v)
|
||||
elseif T=='string'then v="\""..v.."\""
|
||||
elseif T=='table'then v=TABLE.dump(v,t+1)
|
||||
elseif T=='boolean'then v=tostring(v)
|
||||
else error("Error data type!")
|
||||
end
|
||||
s=s..tabs[t]..k..v..",\n"
|
||||
|
||||
@@ -3,7 +3,7 @@ local FILE={}
|
||||
function FILE.load(name)
|
||||
if fs.getInfo(name)then
|
||||
local F=fs.newFile(name)
|
||||
if F:open("r")then
|
||||
if F:open'r'then
|
||||
local s=F:read()
|
||||
F:close()
|
||||
if s:sub(1,6)=="return"then
|
||||
@@ -26,17 +26,17 @@ function FILE.load(name)
|
||||
end
|
||||
function FILE.save(data,name,mode)
|
||||
if not mode then mode=""end
|
||||
if type(data)=="table"then
|
||||
if mode:find("l")then
|
||||
if type(data)=='table'then
|
||||
if mode:find'l'then
|
||||
data=TABLE.dump(data)
|
||||
if not data then
|
||||
LOG.print(name.." "..text.saveError.."dump error","error")
|
||||
LOG.print(name.." "..text.saveError.."dump error",'error')
|
||||
return
|
||||
end
|
||||
else
|
||||
data=JSON.encode(data)
|
||||
if not data then
|
||||
LOG.print(name.." "..text.saveError.."json error","error")
|
||||
LOG.print(name.." "..text.saveError.."json error",'error')
|
||||
return
|
||||
end
|
||||
end
|
||||
@@ -45,16 +45,16 @@ function FILE.save(data,name,mode)
|
||||
end
|
||||
|
||||
local F=fs.newFile(name)
|
||||
F:open("w")
|
||||
F:open'w'
|
||||
local success,mes=F:write(data)
|
||||
F:flush()F:close()
|
||||
if success then
|
||||
if not mode:find("q")then
|
||||
if not mode:find'q'then
|
||||
LOG.print(text.saveDone,COLOR.G)
|
||||
end
|
||||
else
|
||||
LOG.print(text.saveError..(mes or"unknown error"),"error")
|
||||
LOG.print(debug.traceback(),"error")
|
||||
LOG.print(text.saveError..(mes or"unknown error"),'error')
|
||||
LOG.print(debug.traceback(),'error')
|
||||
end
|
||||
end
|
||||
return FILE
|
||||
@@ -12,7 +12,7 @@ function IMG.init(list)
|
||||
local function load(skip)
|
||||
local loaded=0
|
||||
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)
|
||||
else
|
||||
for i=1,#v do
|
||||
|
||||
@@ -1,3 +1,8 @@
|
||||
NONE={}function NULL()end
|
||||
EDITING=""
|
||||
LOADED=false
|
||||
ERRDATA={}
|
||||
|
||||
SCR= require"Zframework.screen"
|
||||
COLOR= require"Zframework.color"
|
||||
SCN= require"Zframework.scene"
|
||||
@@ -61,12 +66,12 @@ local devMode
|
||||
local infoCanvas=gc.newCanvas(108,27)
|
||||
local function updatePowerInfo()
|
||||
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)
|
||||
if state~="unknown"then
|
||||
if state~='unknown'then
|
||||
gc.setLineWidth(4)
|
||||
local charging=state=="charging"
|
||||
if state=="nobattery"then
|
||||
local charging=state=='charging'
|
||||
if state=='nobattery'then
|
||||
gc_setColor(1,1,1)
|
||||
gc.setLineWidth(2)
|
||||
gc.line(74,SCR.safeX+5,100,22)
|
||||
@@ -77,7 +82,7 @@ local function updatePowerInfo()
|
||||
elseif pow<26 then gc_setColor(1,0,0)
|
||||
else gc_setColor(.5,0,1)
|
||||
end
|
||||
gc_rectangle("fill",76,6,pow*.22,14)
|
||||
gc_rectangle('fill',76,6,pow*.22,14)
|
||||
if pow<100 then
|
||||
setFont(15)
|
||||
gc_setColor(0,0,0)
|
||||
@@ -110,14 +115,8 @@ function love.mousepressed(x,y,k,touch)
|
||||
))
|
||||
end
|
||||
if SCN.swapping then return end
|
||||
if SCN.mouseDown then
|
||||
SCN.mouseDown(mx,my,k)
|
||||
elseif k==2 then
|
||||
SCN.back()
|
||||
end
|
||||
if k==1 then
|
||||
WIDGET.press(mx,my)
|
||||
end
|
||||
if SCN.mouseDown then SCN.mouseDown(mx,my,k)end
|
||||
WIDGET.press(mx,my,k)
|
||||
lastX,lastY=mx,my
|
||||
if SETTING.clickFX then SYSFX.newTap(3,mx,my,30)end
|
||||
end
|
||||
@@ -128,7 +127,7 @@ function love.mousemoved(x,y,dx,dy,touch)
|
||||
if SCN.swapping then return end
|
||||
dx,dy=dx/SCR.k,dy/SCR.k
|
||||
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)
|
||||
else
|
||||
WIDGET.cursorMove(mx,my)
|
||||
@@ -179,7 +178,7 @@ function love.touchreleased(id,x,y)
|
||||
if SCN.swapping then return end
|
||||
x,y=xOy:inverseTransformPoint(x,y)
|
||||
if id==touching then
|
||||
WIDGET.press(x,y)
|
||||
WIDGET.press(x,y,1)
|
||||
WIDGET.release(x,y)
|
||||
touching=false
|
||||
if WIDGET.sel and not WIDGET.sel.keepFocus then
|
||||
@@ -197,7 +196,7 @@ local function noDevkeyPressed(key)
|
||||
if key=="f1"then
|
||||
PROFILE.switch()
|
||||
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
|
||||
for _=1,8 do
|
||||
local P=PLY_ALIVE[rnd(#PLY_ALIVE)]
|
||||
@@ -282,12 +281,12 @@ function love.joystickremoved(JS)
|
||||
end
|
||||
end
|
||||
local keyMirror={
|
||||
dpup="up",
|
||||
dpdown="down",
|
||||
dpleft="left",
|
||||
dpright="right",
|
||||
start="return",
|
||||
back="escape",
|
||||
dpup='up',
|
||||
dpdown='down',
|
||||
dpleft='left',
|
||||
dpright='right',
|
||||
start='return',
|
||||
back='escape',
|
||||
}
|
||||
function love.gamepadpressed(_,i)
|
||||
mouseShow=false
|
||||
@@ -331,7 +330,7 @@ function love.lowmemory()
|
||||
if TIME()-lastGCtime>6.26 then
|
||||
collectgarbage()
|
||||
lastGCtime=TIME()
|
||||
LOG.print("[auto GC] low MEM 设备内存过低","warn")
|
||||
LOG.print("[auto GC] low MEM 设备内存过低",'warn')
|
||||
end
|
||||
end
|
||||
function love.resize(w,h)
|
||||
@@ -344,7 +343,7 @@ end
|
||||
function love.focus(f)
|
||||
if f then
|
||||
love.timer.step()
|
||||
elseif SCN.cur=="game"and SETTING.autoPause then
|
||||
elseif SCN.cur=='game'and SETTING.autoPause then
|
||||
pauseGame()
|
||||
end
|
||||
end
|
||||
@@ -378,7 +377,7 @@ function love.errorhandler(msg)
|
||||
gc.reset()
|
||||
|
||||
if LOADED and #ERRDATA<3 then
|
||||
BG.set("none")
|
||||
BG.set('none')
|
||||
local scn=SCN and SCN.cur or"NULL"
|
||||
ERRDATA[#ERRDATA+1]={mes=err,scene=scn}
|
||||
|
||||
@@ -399,7 +398,7 @@ function love.errorhandler(msg)
|
||||
local res,threadErr
|
||||
repeat
|
||||
res,threadErr=resume(loopThread)
|
||||
until status(loopThread)=="dead"
|
||||
until status(loopThread)=='dead'
|
||||
if not res then
|
||||
love.errorhandler(threadErr)
|
||||
return
|
||||
@@ -414,15 +413,15 @@ function love.errorhandler(msg)
|
||||
while true do
|
||||
love.event.pump()
|
||||
for E,a,b in love.event.poll()do
|
||||
if E=="quit"or a=="escape"then
|
||||
if E=='quit'or a=='escape'then
|
||||
destroyPlayers()
|
||||
return true
|
||||
elseif E=="resize"then
|
||||
elseif E=='resize'then
|
||||
SCR.resize(a,b)
|
||||
end
|
||||
end
|
||||
gc.clear(.3,.5,.9)
|
||||
gc_push("transform")
|
||||
gc_push('transform')
|
||||
gc.replaceTransform(xOy)
|
||||
setFont(100)gc_print(":(",100,0,0,1.2)
|
||||
setFont(40)gc.printf(errorMsg,100,160,SCR.w0-100)
|
||||
@@ -440,7 +439,7 @@ function love.errorhandler(msg)
|
||||
end
|
||||
end
|
||||
local WS=WS
|
||||
local WSnames={"app","user","play","stream","chat"}
|
||||
local WSnames={'app','user','play','stream','chat'}
|
||||
local WScolor={
|
||||
{1,.5,.5,.7},
|
||||
{1,.8,.3,.7},
|
||||
@@ -480,8 +479,8 @@ function love.run()
|
||||
|
||||
--Scene Launch
|
||||
while #SCN.stack>0 do SCN.pop()end
|
||||
SCN.push("quit","slowFade")
|
||||
SCN.init(#ERRDATA==0 and"load"or"error")
|
||||
SCN.push('quit','slowFade')
|
||||
SCN.init(#ERRDATA==0 and'load'or'error')
|
||||
|
||||
return function()
|
||||
local _
|
||||
@@ -495,7 +494,7 @@ function love.run()
|
||||
for N,a,b,c,d,e in POLL()do
|
||||
if love[N]then
|
||||
love[N](a,b,c,d,e)
|
||||
elseif N=="quit"then
|
||||
elseif N=='quit'then
|
||||
destroyPlayers()
|
||||
return a or true
|
||||
end
|
||||
@@ -523,7 +522,7 @@ function love.run()
|
||||
--Draw background
|
||||
BG.draw()
|
||||
|
||||
gc_push("transform")
|
||||
gc_push('transform')
|
||||
gc.replaceTransform(xOy)
|
||||
|
||||
--Draw scene contents
|
||||
@@ -540,7 +539,7 @@ function love.run()
|
||||
_=SCS[R][0]
|
||||
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_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
|
||||
SYSFX.draw()
|
||||
TEXT.draw()
|
||||
@@ -578,31 +577,31 @@ function love.run()
|
||||
ins(frameTimeList,1,dt)rem(frameTimeList,126)
|
||||
gc_setColor(1,1,1,.3)
|
||||
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
|
||||
|
||||
--Websocket status
|
||||
gc_push("transform")
|
||||
gc_push('transform')
|
||||
gc.translate(SCR.w,SCR.h-100)
|
||||
gc.scale(SCR.k)
|
||||
for i=1,5 do
|
||||
local status=WS.status(WSnames[i])
|
||||
gc_setColor(WScolor[i])
|
||||
gc_rectangle("fill",0,20*i,-80,-20)
|
||||
if status=="dead"then
|
||||
gc_rectangle('fill',0,20*i,-80,-20)
|
||||
if status=='dead'then
|
||||
gc_setColor(1,1,1)
|
||||
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_draw(TEXTURE.ws_connecting,-20,20*i-20)
|
||||
elseif status=="running"then
|
||||
elseif status=='running'then
|
||||
gc_setColor(1,1,1)
|
||||
gc_draw(TEXTURE.ws_running,-20,20*i-20)
|
||||
end
|
||||
local t1,t2,t3=WS.getTimers(WSnames[i])
|
||||
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(1,0,0,t3)gc_rectangle("fill",-20,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(1,0,0,t3)gc_rectangle('fill',-20,20*i,-20,-20)
|
||||
end
|
||||
gc_pop()
|
||||
|
||||
|
||||
@@ -63,7 +63,7 @@ local function encode_table(val, stack)
|
||||
-- Treat as array -- check keys are valid and it is not sparse
|
||||
local n = 0
|
||||
for k in pairs(val) do
|
||||
if type(k) ~= "number" then
|
||||
if type(k) ~= 'number' then
|
||||
error("invalid table: mixed or invalid key types")
|
||||
end
|
||||
n = n + 1
|
||||
@@ -77,7 +77,7 @@ local function encode_table(val, stack)
|
||||
else
|
||||
-- Treat as an object
|
||||
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")
|
||||
end
|
||||
ins(res, encode(k, stack) .. ":" .. encode(v, stack))
|
||||
@@ -100,11 +100,11 @@ local function encode_number(val)
|
||||
end
|
||||
|
||||
local type_func_map = {
|
||||
["nil"] = encode_nil,
|
||||
["table"] = encode_table,
|
||||
["string"] = encode_string,
|
||||
["number"] = encode_number,
|
||||
["boolean"] = tostring
|
||||
['nil'] = encode_nil,
|
||||
['table'] = encode_table,
|
||||
['string'] = encode_string,
|
||||
['number'] = encode_number,
|
||||
['boolean'] = tostring
|
||||
}
|
||||
|
||||
encode = function(val, stack)
|
||||
@@ -119,7 +119,7 @@ function json.encode(val)
|
||||
if a then
|
||||
return b
|
||||
elseif LOG then
|
||||
LOG.print(text.jsonError..": "..(b or"uknErr"),"warn")
|
||||
LOG.print(text.jsonError..": "..(b or"uknErr"),'warn')
|
||||
end
|
||||
end
|
||||
|
||||
@@ -336,7 +336,7 @@ function parse(str, idx)
|
||||
end
|
||||
|
||||
local function decode(str)
|
||||
if type(str) ~= "string" then
|
||||
if type(str) ~= 'string' then
|
||||
error("expected argument of type string, got " .. type(str))
|
||||
end
|
||||
local res, idx = parse(str, next_char(str, 1, space_chars, true))
|
||||
@@ -349,7 +349,7 @@ function json.decode(str)
|
||||
if a then
|
||||
return b
|
||||
elseif LOG then
|
||||
LOG.print(text.jsonError..": "..(b or"uknErr"),"warn")
|
||||
LOG.print(text.jsonError..": "..(b or"uknErr"),'warn')
|
||||
end
|
||||
end
|
||||
return json
|
||||
@@ -2,9 +2,9 @@ local LANG={}
|
||||
function LANG.init(langList,publicText)--Attention, calling this will destory all initializing methods, create a LANG.set()!
|
||||
local function langFallback(T0,T)
|
||||
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 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
|
||||
T[k]=v
|
||||
end
|
||||
@@ -26,7 +26,7 @@ function LANG.init(langList,publicText)--Attention, calling this will destory al
|
||||
end
|
||||
|
||||
--Metatable:__call for table:getTip
|
||||
if type(rawget(L,"getTip"))=="table"then
|
||||
if type(rawget(L,"getTip"))=='table'then
|
||||
setmetatable(L.getTip,tipMeta)
|
||||
end
|
||||
|
||||
|
||||
@@ -49,14 +49,14 @@ local function draw(L)
|
||||
render(L.shadowCanvas,0,0,0,1,L.size)
|
||||
|
||||
--Ready to final render
|
||||
setShader()setCanvas()gc.setBlendMode("add")
|
||||
setShader()setCanvas()gc.setBlendMode('add')
|
||||
|
||||
--Render to screes
|
||||
gc.setColor(r,g,b,a)
|
||||
render(L.renderCanvas,X,Y+L.size,0,1,-1)
|
||||
|
||||
--Reset
|
||||
gc.setBlendMode("alpha")
|
||||
gc.setBlendMode('alpha')
|
||||
end
|
||||
|
||||
local LIGHT={}
|
||||
|
||||
@@ -4,7 +4,7 @@ return function(name,libName)
|
||||
if r1 and r2 then
|
||||
return r2
|
||||
else
|
||||
LOG.print("Cannot load "..name..": "..(r2 or r3),"warn",COLOR.R)
|
||||
LOG.print("Cannot load "..name..": "..(r2 or r3),'warn',COLOR.R)
|
||||
end
|
||||
elseif SYSTEM=="Android"then
|
||||
local fs=love.filesystem
|
||||
@@ -12,35 +12,35 @@ return function(name,libName)
|
||||
|
||||
local libFunc=package.loadlib(SAVEDIR.."/lib/"..libName.Android,libName.libFunc)
|
||||
if libFunc then
|
||||
LOG.print(name.." lib loaded","warn",COLOR.G)
|
||||
LOG.print(name.." lib loaded",'warn',COLOR.G)
|
||||
else
|
||||
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
|
||||
local success,message=fs.write("lib/"..libName.Android,soFile)
|
||||
if success then
|
||||
libFunc,message=package.loadlib(SAVEDIR.."/lib/"..libName.Android,libName.libFunc)
|
||||
if libFunc then
|
||||
LOG.print(name.." lib loaded","warn",COLOR.G)
|
||||
LOG.print(name.." lib loaded",'warn',COLOR.G)
|
||||
break
|
||||
else
|
||||
LOG.print("Cannot load "..name..": "..message,"warn",COLOR.R)
|
||||
LOG.print("Cannot load "..name..": "..message,'warn',COLOR.R)
|
||||
end
|
||||
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
|
||||
else
|
||||
LOG.print("Read "..name.."-"..platform[i].." failed","warn",COLOR.R)
|
||||
LOG.print("Read "..name.."-"..platform[i].." failed",'warn',COLOR.R)
|
||||
end
|
||||
end
|
||||
if not libFunc then
|
||||
LOG.print("Cannot load "..name,"warn",COLOR.R)
|
||||
LOG.print("Cannot load "..name,'warn',COLOR.R)
|
||||
return
|
||||
end
|
||||
end
|
||||
return libFunc()
|
||||
else
|
||||
LOG.print("No "..name.." for "..SYSTEM,"warn",COLOR.R)
|
||||
LOG.print("No "..name.." for "..SYSTEM,'warn',COLOR.R)
|
||||
return
|
||||
end
|
||||
return true
|
||||
|
||||
@@ -38,21 +38,21 @@ end
|
||||
function LOG.print(text,T,C)--text,type/time,color
|
||||
local time
|
||||
local his
|
||||
if T=="warn"then
|
||||
if T=='warn'then
|
||||
C=C or COLOR.Y
|
||||
his=true
|
||||
time=180
|
||||
elseif T=="error"then
|
||||
elseif T=='error'then
|
||||
C=C or COLOR.R
|
||||
his=true
|
||||
time=210
|
||||
elseif T=="message"then
|
||||
elseif T=='message'then
|
||||
C=C or COLOR.N
|
||||
his=true
|
||||
elseif type(T)=="number"then
|
||||
elseif type(T)=='number'then
|
||||
C=C or COLOR.Z
|
||||
time=T
|
||||
elseif type(T)=="table"then
|
||||
elseif type(T)=='table'then
|
||||
C=T
|
||||
elseif not C then
|
||||
C=COLOR.Z
|
||||
|
||||
@@ -11,7 +11,7 @@ local _internal={}-- list of internal profiler functions
|
||||
|
||||
local getInfo=debug.getinfo
|
||||
function profile.hooker(event,line,info)
|
||||
info=info or getInfo(2,"fnS")
|
||||
info=info or getInfo(2,'fnS')
|
||||
local f=info.func
|
||||
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
|
||||
@@ -27,10 +27,10 @@ function profile.hooker(event,line,info)
|
||||
_tcalled[f]=nil
|
||||
end
|
||||
if event=="tail call"then
|
||||
local prev=getInfo(3,"fnS")
|
||||
profile.hooker("return",line,prev)
|
||||
profile.hooker("call",line,info)
|
||||
elseif event=="call"then
|
||||
local prev=getInfo(3,'fnS')
|
||||
profile.hooker('return',line,prev)
|
||||
profile.hooker('call',line,info)
|
||||
elseif event=='call'then
|
||||
_tcalled[f]=clock()
|
||||
else
|
||||
_ncalls[f]=_ncalls[f]+1
|
||||
@@ -43,7 +43,7 @@ function profile.start()
|
||||
jit.off()
|
||||
jit.flush()
|
||||
end
|
||||
debug.sethook(profile.hooker,"cr")
|
||||
debug.sethook(profile.hooker,'cr')
|
||||
end
|
||||
|
||||
--- Stops collecting data.
|
||||
@@ -68,7 +68,7 @@ function profile.stop()
|
||||
lookup[id]=f
|
||||
end
|
||||
end
|
||||
collectgarbage("collect")
|
||||
collectgarbage()
|
||||
end
|
||||
|
||||
--- Resets all collected data.
|
||||
@@ -78,7 +78,7 @@ function profile.reset()
|
||||
_telapsed[f]=0
|
||||
_tcalled[f]=nil
|
||||
end
|
||||
collectgarbage("collect")
|
||||
collectgarbage()
|
||||
end
|
||||
|
||||
local function _comp(a,b)
|
||||
@@ -132,7 +132,7 @@ function profile.report(n)
|
||||
if #out>0 then
|
||||
sz=sz.." | "..table.concat(out," | \n | ").." | \n"
|
||||
end
|
||||
return"\n"..sz..row
|
||||
return "\n"..sz..row
|
||||
end
|
||||
|
||||
local switch=false
|
||||
@@ -151,7 +151,7 @@ end
|
||||
|
||||
-- store all internal profiler functions
|
||||
for _,v in next,profile do
|
||||
_internal[v]=type(v)=="function"
|
||||
_internal[v]=type(v)=='function'
|
||||
end
|
||||
|
||||
return profile
|
||||
|
||||
@@ -85,7 +85,7 @@ function SCN.push(tar,style)
|
||||
if not SCN.swapping then
|
||||
local m=#SCN.stack
|
||||
SCN.stack[m+1]=tar or SCN.cur
|
||||
SCN.stack[m+2]=style or"fade"
|
||||
SCN.stack[m+2]=style or'fade'
|
||||
end
|
||||
end
|
||||
function SCN.pop()
|
||||
@@ -94,46 +94,46 @@ function SCN.pop()
|
||||
end
|
||||
|
||||
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},
|
||||
fade={30,15,function(t)
|
||||
t=t>15 and 2-t/15 or t/15
|
||||
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},
|
||||
fade_togame={120,20,function(t)
|
||||
t=t>20 and(120-t)/100 or t/20
|
||||
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},
|
||||
slowFade={180,90,function(t)
|
||||
t=t>90 and 2-t/90 or t/90
|
||||
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},
|
||||
swipeL={30,15,function(t)
|
||||
t=t/30
|
||||
gc.setColor(.1,.1,.1,1-abs(t-.5))
|
||||
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},
|
||||
swipeR={30,15,function(t)
|
||||
t=t/30
|
||||
gc.setColor(.1,.1,.1,1-abs(t-.5))
|
||||
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},
|
||||
swipeD={30,15,function(t)
|
||||
t=t/30
|
||||
gc.setColor(.1,.1,.1,1-abs(t-.5))
|
||||
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},
|
||||
}--Scene swapping animations
|
||||
function SCN.swapTo(tar,style)--Parallel scene swapping, cannot back
|
||||
if scenes[tar]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
|
||||
local S=SCN.stat
|
||||
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]
|
||||
end
|
||||
else
|
||||
LOG.print("No Scene: "..tar,"warn")
|
||||
LOG.print("No Scene: "..tar,'warn')
|
||||
end
|
||||
end
|
||||
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.swapTo(tar,style)
|
||||
else
|
||||
LOG.print("No Scene: "..tar,"warn")
|
||||
LOG.print("No Scene: "..tar,'warn')
|
||||
end
|
||||
end
|
||||
function SCN.back()
|
||||
|
||||
@@ -15,7 +15,7 @@ function SFX.init(list)
|
||||
for i=1,count do
|
||||
local N="media/SFX/"..list[i]..".ogg"
|
||||
if love.filesystem.getInfo(N)then
|
||||
Sources[list[i]]={love.audio.newSource(N,"static")}
|
||||
Sources[list[i]]={love.audio.newSource(N,'static')}
|
||||
else
|
||||
LOG.print("No SFX file: "..N,5,COLOR.O)
|
||||
end
|
||||
@@ -76,7 +76,7 @@ function SFX.init(list)
|
||||
end
|
||||
function SFX.reset()
|
||||
for _,L in next,Sources do
|
||||
if type(L)=="table"then
|
||||
if type(L)=='table'then
|
||||
for i=#L,1,-1 do
|
||||
if not L[i]:isPlaying()then
|
||||
rem(L,i)
|
||||
|
||||
@@ -75,32 +75,32 @@ function FXdraw.tap(S)
|
||||
local t=S.t
|
||||
setWidth(2)
|
||||
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)
|
||||
gc.circle("fill",S.x,S.y,t*30)
|
||||
gc.circle('fill',S.x,S.y,t*30)
|
||||
|
||||
setColor(1,1,1,1-t)
|
||||
for i=1,10 do
|
||||
local p=S.ptc[i]
|
||||
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
|
||||
function FXdraw.ripple(S)
|
||||
local t=S.t
|
||||
setWidth(2)
|
||||
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
|
||||
function FXdraw.rectRipple(S)
|
||||
setWidth(6)
|
||||
setColor(1,1,1,1-S.t)
|
||||
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
|
||||
function FXdraw.shade(S)
|
||||
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
|
||||
function FXdraw.cell(S)
|
||||
setColor(1,1,1,1-S.t)
|
||||
@@ -114,7 +114,7 @@ end
|
||||
local SYSFX={}
|
||||
function SYSFX.update(dt)
|
||||
for i=#fx,1,-1 do
|
||||
if fx[i]:update(dt) then
|
||||
if fx[i]:update(dt)then
|
||||
rem(fx,i)
|
||||
end
|
||||
end
|
||||
|
||||
@@ -1,11 +1,11 @@
|
||||
local next,type=next,type
|
||||
local TABLE={}
|
||||
|
||||
--Copy [1~#] elements
|
||||
--Get a copy of [1~#] elements
|
||||
function TABLE.shift(org)
|
||||
local L={}
|
||||
for i=1,#org do
|
||||
if type(org[i])~="table"then
|
||||
if type(org[i])~='table'then
|
||||
L[i]=org[i]
|
||||
else
|
||||
L[i]=TABLE.shift(org[i])
|
||||
@@ -14,11 +14,11 @@ function TABLE.shift(org)
|
||||
return L
|
||||
end
|
||||
|
||||
--Copy all elements
|
||||
--Get a full copy of a table
|
||||
function TABLE.copy(org)
|
||||
local L={}
|
||||
for k,v in next,org do
|
||||
if type(v)~="table"then
|
||||
if type(v)~='table'then
|
||||
L[k]=v
|
||||
else
|
||||
L[k]=TABLE.copy(v)
|
||||
@@ -28,25 +28,25 @@ function TABLE.copy(org)
|
||||
end
|
||||
|
||||
--For all things in G if same type in base, push to base
|
||||
function TABLE.update(G,base)
|
||||
for k,v in next,G do
|
||||
if type(v)==type(base[k])then
|
||||
if type(v)=="table"then
|
||||
TABLE.update(v,base[k])
|
||||
function TABLE.update(new,old)
|
||||
for k,v in next,new do
|
||||
if type(v)==type(old[k])then
|
||||
if type(v)=='table'then
|
||||
TABLE.update(v,old[k])
|
||||
else
|
||||
base[k]=v
|
||||
old[k]=v
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
--For all things in G if no val in base, push to base
|
||||
function TABLE.complete(G,base)
|
||||
for k,v in next,G do
|
||||
if base[k]==nil then
|
||||
base[k]=v
|
||||
elseif type(v)=="table"and type(base[k])=="table"then
|
||||
TABLE.complete(v,base[k])
|
||||
function TABLE.complete(new,old)
|
||||
for k,v in next,new do
|
||||
if old[k]==nil then
|
||||
old[k]=v
|
||||
elseif type(v)=='table'and type(old[k])=='table'then
|
||||
TABLE.complete(v,old[k])
|
||||
end
|
||||
end
|
||||
end
|
||||
@@ -68,7 +68,7 @@ end
|
||||
--Re-index string value of a table
|
||||
function TABLE.reIndex(org)
|
||||
for k,v in next,org do
|
||||
if type(v)=="string"then
|
||||
if type(v)=='string'then
|
||||
org[k]=org[v]
|
||||
end
|
||||
end
|
||||
@@ -92,34 +92,34 @@ do--function TABLE.dump(L,t)
|
||||
else
|
||||
s="return{\n"
|
||||
t=1
|
||||
if type(L)~="table"then
|
||||
if type(L)~='table'then
|
||||
return
|
||||
end
|
||||
end
|
||||
local count=1
|
||||
for k,v in next,L do
|
||||
local T=type(k)
|
||||
if T=="number"then
|
||||
if T=='number'then
|
||||
if k==count then
|
||||
k=""
|
||||
count=count+1
|
||||
else
|
||||
k="["..k.."]="
|
||||
end
|
||||
elseif T=="string"then
|
||||
elseif T=='string'then
|
||||
if find(k,"[^0-9a-zA-Z_]")then
|
||||
k="[\""..k.."\"]="
|
||||
else
|
||||
k=k.."="
|
||||
end
|
||||
elseif T=="boolean"then k="["..k.."]="
|
||||
elseif T=='boolean'then k="["..k.."]="
|
||||
else error("Error key type!")
|
||||
end
|
||||
T=type(v)
|
||||
if T=="number"then v=tostring(v)
|
||||
elseif T=="string"then v="\""..v.."\""
|
||||
elseif T=="table"then v=dump(v,t+1)
|
||||
elseif T=="boolean"then v=tostring(v)
|
||||
if T=='number'then v=tostring(v)
|
||||
elseif T=='string'then v="\""..v.."\""
|
||||
elseif T=='table'then v=dump(v,t+1)
|
||||
elseif T=='boolean'then v=tostring(v)
|
||||
else error("Error data type!")
|
||||
end
|
||||
s=s..tabs[t]..k..v..",\n"
|
||||
|
||||
@@ -9,7 +9,7 @@ end
|
||||
function TASK.update()
|
||||
for i=#tasks,1,-1 do
|
||||
local T=tasks[i]
|
||||
if status(T.thread)=="dead"then
|
||||
if status(T.thread)=='dead'then
|
||||
rem(tasks,i)
|
||||
else
|
||||
assert(resume(T.thread))
|
||||
@@ -19,7 +19,7 @@ end
|
||||
function TASK.new(code,...)
|
||||
local thread=coroutine.create(code)
|
||||
resume(thread,...)
|
||||
if status(thread)~="dead"then
|
||||
if status(thread)~='dead'then
|
||||
tasks[#tasks+1]={
|
||||
thread=thread,
|
||||
code=code,
|
||||
|
||||
@@ -19,21 +19,21 @@ function textFX.fly(t)
|
||||
mStr(t.text,t.x+(t.c-.5)^3*300,t.y-t.font*.7)
|
||||
end
|
||||
function textFX.stretch(t)
|
||||
gc_push("transform")
|
||||
gc_push('transform')
|
||||
gc_translate(t.x,t.y)
|
||||
if t.c<.3 then gc_scale((.3-t.c)*1.6+1,1)end
|
||||
mStr(t.text,0,-t.font*.7)
|
||||
gc_pop()
|
||||
end
|
||||
function textFX.drive(t)
|
||||
gc_push("transform")
|
||||
gc_push('transform')
|
||||
gc_translate(t.x,t.y)
|
||||
if t.c<.3 then gc_shear((.3-t.c)*2,0)end
|
||||
mStr(t.text,0,-t.font*.7)
|
||||
gc_pop()
|
||||
end
|
||||
function textFX.spin(t)
|
||||
gc_push("transform")
|
||||
gc_push('transform')
|
||||
gc_translate(t.x,t.y)
|
||||
if t.c<.3 then
|
||||
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)
|
||||
end
|
||||
function textFX.zoomout(t)
|
||||
gc_push("transform")
|
||||
gc_push('transform')
|
||||
local k=t.c^.5*.1+1
|
||||
gc_translate(t.x,t.y)
|
||||
gc_scale(k,k)
|
||||
@@ -57,7 +57,7 @@ function textFX.zoomout(t)
|
||||
gc_pop()
|
||||
end
|
||||
function textFX.beat(t)
|
||||
gc_push("transform")
|
||||
gc_push('transform')
|
||||
gc_translate(t.x,t.y)
|
||||
if t.c<.3 then
|
||||
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
|
||||
spd=(spd or 1)/60, --Timing speed(1=last 1 sec)
|
||||
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
|
||||
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,
|
||||
spd=(spd or 1)/60,
|
||||
stop=stop,
|
||||
draw=textFX[style or"appear"]or error("unavailable type:"..style),
|
||||
draw=textFX[style or'appear']or error("unavailable type:"..style),
|
||||
}
|
||||
end
|
||||
function TEXT.update(list)
|
||||
|
||||
@@ -7,12 +7,12 @@ local themeColor={
|
||||
}
|
||||
|
||||
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
|
||||
return
|
||||
--Christmas
|
||||
M=="12"and math.abs(D-25)<4 and
|
||||
"xmas"or
|
||||
'xmas'or
|
||||
|
||||
--Spring festival
|
||||
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,
|
||||
21,40,
|
||||
})[Y-2000]or -26)-((M-1)*31+D))<6 and
|
||||
"sprfes"or
|
||||
'sprfes'or
|
||||
|
||||
--April fool's day
|
||||
M=="04"and D=="01"and
|
||||
"fool"or
|
||||
'fool'or
|
||||
|
||||
--Z day (Feb./Mar./Apr./May./June. 26)
|
||||
D=="26"and(
|
||||
M=="1"or M=="2"and"zday1"or
|
||||
M=="3"or M=="4"and"zday2"or
|
||||
M=="5"or M=="6"and"zday3"
|
||||
M=="01"or M=="02"and'zday1'or
|
||||
M=="03"or M=="04"and'zday2'or
|
||||
M=="05"or M=="06"and'zday3'
|
||||
)or
|
||||
|
||||
"classic"
|
||||
'classic'
|
||||
end
|
||||
|
||||
function THEME.set(theme)
|
||||
if theme=="classic"then
|
||||
BG.setDefault("space")
|
||||
if theme=='classic'then
|
||||
BG.setDefault('space')
|
||||
BGM.setDefault("blank")
|
||||
elseif theme=="xmas"then
|
||||
BG.setDefault("snow")
|
||||
BGM.setDefault("xmas")
|
||||
elseif theme=='xmas'then
|
||||
BG.setDefault('snow')
|
||||
BGM.setDefault('xmas')
|
||||
LOG.print("==============",COLOR.R)
|
||||
LOG.print("Merry Christmas!",COLOR.Z)
|
||||
LOG.print("==============",COLOR.R)
|
||||
elseif theme=="sprfes"then
|
||||
BG.setDefault("firework")
|
||||
elseif theme=='sprfes'then
|
||||
BG.setDefault('firework')
|
||||
BGM.setDefault("spring festival")
|
||||
LOG.print(" ★☆☆★",COLOR.R)
|
||||
LOG.print("新年快乐!",COLOR.Z)
|
||||
LOG.print(" ★☆☆★",COLOR.R)
|
||||
elseif theme=="zday1"then
|
||||
BG.setDefault("lanterns")
|
||||
elseif theme=='zday1'then
|
||||
BG.setDefault('lanterns')
|
||||
BGM.setDefault("empty")
|
||||
elseif theme=="zday2"then
|
||||
BG.setDefault("lanterns")
|
||||
elseif theme=='zday2'then
|
||||
BG.setDefault('lanterns')
|
||||
BGM.setDefault("overzero")
|
||||
elseif theme=="zday3"then
|
||||
BG.setDefault("lanterns")
|
||||
elseif theme=='zday3'then
|
||||
BG.setDefault('lanterns')
|
||||
BGM.setDefault("vacuum")
|
||||
elseif theme=="fool"then
|
||||
BG.setDefault("blockrain")
|
||||
elseif theme=='fool'then
|
||||
BG.setDefault('blockrain')
|
||||
BGM.setDefault("how feeling")
|
||||
else
|
||||
return
|
||||
@@ -84,7 +84,7 @@ function THEME.getThemeColor(theme)
|
||||
end
|
||||
|
||||
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
|
||||
|
||||
return THEME
|
||||
@@ -54,8 +54,8 @@ do--Connect
|
||||
repeat
|
||||
res,err=SOCK:receive("*l")
|
||||
if not res then readCHN:push(err)return end
|
||||
if not ctLen and res:find"length"then
|
||||
ctLen=tonumber(res:match"%d+")
|
||||
if not ctLen and res:find("length")then
|
||||
ctLen=tonumber(res:match("%d+"))
|
||||
end
|
||||
until res==""
|
||||
|
||||
@@ -87,7 +87,7 @@ local _send do
|
||||
local mask_str=char(unpack(mask_key))
|
||||
|
||||
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
|
||||
SOCK:send(char(bor(0x80,op)))
|
||||
|
||||
@@ -154,7 +154,7 @@ while true do--Running
|
||||
if s then
|
||||
res=s
|
||||
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
|
||||
sBuffer=sBuffer..p
|
||||
length=length-#p
|
||||
@@ -166,11 +166,11 @@ while true do--Running
|
||||
else
|
||||
local s,e,p=SOCK:receive(length)
|
||||
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
|
||||
length=length-#s
|
||||
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
|
||||
length=length-#p
|
||||
end
|
||||
@@ -181,13 +181,13 @@ while true do--Running
|
||||
break
|
||||
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
|
||||
if op==8 then--8=close
|
||||
readCHN:push(op)
|
||||
SOCK:close()
|
||||
if type(res)=="string"then
|
||||
if type(res)=='string'then
|
||||
res=JSON.decode(res)
|
||||
readCHN:push(res and res.reason or"WS Error")
|
||||
else
|
||||
@@ -196,21 +196,21 @@ while true do--Running
|
||||
elseif op==0 then--0=continue
|
||||
lBuffer=lBuffer..res
|
||||
if fin then
|
||||
]]..(debug:find"M"and""or"--")..[[print("FIN=1 (c")
|
||||
]]..(debug:find'M'and""or"--")..[[print("FIN=1 (c")
|
||||
readCHN:push(lBuffer)
|
||||
lBuffer=""
|
||||
else
|
||||
]]..(debug:find"M"and""or"--")..[[print("FIN=0 (c")
|
||||
]]..(debug:find'M'and""or"--")..[[print("FIN=0 (c")
|
||||
end
|
||||
else
|
||||
readCHN:push(op)
|
||||
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)
|
||||
else
|
||||
]]..(debug:find"M"and""or"--")..[[print("OP: "..op.."\tFIN=0")
|
||||
]]..(debug:find'M'and""or"--")..[[print("OP: "..op.."\tFIN=0")
|
||||
sBuffer=res
|
||||
]]..(debug:find"M"and""or"--")..[[print("START pack: "..res)
|
||||
]]..(debug:find'M'and""or"--")..[[print("START pack: "..res)
|
||||
end
|
||||
end
|
||||
end
|
||||
@@ -223,7 +223,7 @@ local wsList=setmetatable({},{
|
||||
__index=function(l,k)
|
||||
local ws={
|
||||
real=false,
|
||||
status="dead",
|
||||
status='dead',
|
||||
lastPongTime=timer(),
|
||||
sendTimer=0,
|
||||
alertTimer=0,
|
||||
@@ -244,7 +244,7 @@ function WS.connect(name,subPath,body)
|
||||
lastPingTime=0,
|
||||
lastPongTime=timer(),
|
||||
pingInterval=26,
|
||||
status="connecting",--connecting, running, dead
|
||||
status='connecting',--connecting, running, dead
|
||||
sendTimer=0,
|
||||
alertTimer=0,
|
||||
pongTimer=0,
|
||||
@@ -259,7 +259,7 @@ end
|
||||
|
||||
function WS.status(name)
|
||||
local ws=wsList[name]
|
||||
return ws.status or"dead"
|
||||
return ws.status or'dead'
|
||||
end
|
||||
|
||||
function WS.getTimers(name)
|
||||
@@ -286,12 +286,12 @@ local OPcode={
|
||||
pong=10,
|
||||
}
|
||||
local OPname={
|
||||
[0]="continue",
|
||||
[1]="text",
|
||||
[2]="binary",
|
||||
[8]="close",
|
||||
[9]="ping",
|
||||
[10]="pong",
|
||||
[0]='continue',
|
||||
[1]='text',
|
||||
[2]='binary',
|
||||
[8]='close',
|
||||
[9]='ping',
|
||||
[10]='pong',
|
||||
}
|
||||
function WS.send(name,message,op)
|
||||
local ws=wsList[name]
|
||||
@@ -308,7 +308,7 @@ function WS.read(name)
|
||||
if ws.real and ws.readCHN:getCount()>=2 then
|
||||
local op=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.pongTimer=1
|
||||
return message,OPname[op]or op
|
||||
@@ -320,7 +320,7 @@ function WS.close(name)
|
||||
if ws.real then
|
||||
ws.sendCHN:push(8)--close
|
||||
ws.sendCHN:push("")
|
||||
ws.status="dead"
|
||||
ws.status='dead'
|
||||
end
|
||||
end
|
||||
|
||||
@@ -329,20 +329,20 @@ function WS.update(dt)
|
||||
for name,ws in next,wsList do
|
||||
if ws.real then
|
||||
ws.triggerCHN:push(0)
|
||||
if ws.status=="connecting"then
|
||||
if ws.status=='connecting'then
|
||||
local mes=ws.readCHN:pop()
|
||||
if mes then
|
||||
if mes=="success"then
|
||||
ws.status="running"
|
||||
ws.status='running'
|
||||
ws.lastPingTime=time
|
||||
ws.lastPongTime=time
|
||||
ws.pongTimer=1
|
||||
else
|
||||
ws.status="dead"
|
||||
LOG.print(text.wsFailed..": "..(mes=="timeout"and text.netTimeout or mes),"warn")
|
||||
ws.status='dead'
|
||||
LOG.print(text.wsFailed..": "..(mes=="timeout"and text.netTimeout or mes),'warn')
|
||||
end
|
||||
end
|
||||
elseif ws.status=="running"then
|
||||
elseif ws.status=='running'then
|
||||
if time-ws.lastPingTime>ws.pingInterval then
|
||||
ws.sendCHN:push(9)
|
||||
ws.sendCHN:push("")--ping
|
||||
|
||||
@@ -3,18 +3,19 @@ local gc=love.graphics
|
||||
|
||||
local int,abs=math.floor,math.abs
|
||||
local max,min=math.max,math.min
|
||||
local sub,format=string.sub,string.format
|
||||
local sub=string.sub
|
||||
local ins=table.insert
|
||||
local COLOR=COLOR
|
||||
local setFont,mStr=setFont,mStr
|
||||
local mDraw_X,mDraw_Y=ADRAW.simpX,ADRAW.simpY
|
||||
|
||||
local mustHaveText={
|
||||
text=true,
|
||||
button=true,
|
||||
key=true,
|
||||
switch=true,
|
||||
selector=true,
|
||||
local clearIcon=DOGC{40,40,
|
||||
{"setLW",6},
|
||||
{"line",11,11,29,29},
|
||||
{"line",11,29,29,11},
|
||||
}
|
||||
local sureIcon=DOGC{40,40,
|
||||
{"setFT",35},
|
||||
{"mText","?",20,-6},
|
||||
}
|
||||
|
||||
local WIDGET={}
|
||||
@@ -25,9 +26,11 @@ local widgetMetatable={
|
||||
}
|
||||
|
||||
local text={
|
||||
type="text",
|
||||
type='text',
|
||||
mustHaveText=true,
|
||||
alpha=0,
|
||||
}
|
||||
|
||||
function text:reset()end
|
||||
function text:update()
|
||||
if self.hideCon and self.hideCon()then
|
||||
@@ -42,16 +45,16 @@ function text:draw()
|
||||
if self.alpha>0 then
|
||||
local c=self.color
|
||||
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)
|
||||
elseif self.align=="L"then
|
||||
elseif self.align=='L'then
|
||||
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)
|
||||
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 _={
|
||||
name= D.name,
|
||||
x= D.x,
|
||||
@@ -60,7 +63,7 @@ function WIDGET.newText(D)--name,x,y[,fText][,color][,font=30][,align="M"][,hide
|
||||
fText= D.fText,
|
||||
color= D.color and(COLOR[D.color]or D.color)or COLOR.Z,
|
||||
font= D.font or 30,
|
||||
align= D.align or"M",
|
||||
align= D.align or'M',
|
||||
hideCon=D.hide,
|
||||
}
|
||||
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
|
||||
|
||||
local image={
|
||||
type="image",
|
||||
type='image',
|
||||
}
|
||||
function image:reset()
|
||||
if type(self.img)=="string"then
|
||||
if type(self.img)=='string'then
|
||||
self.img=IMG[self.img]
|
||||
end
|
||||
end
|
||||
@@ -98,14 +101,15 @@ function WIDGET.newImage(D)--name[,img(name)],x,y[,ang][,k][,hide]
|
||||
end
|
||||
|
||||
local button={
|
||||
type="button",
|
||||
type='button',
|
||||
mustHaveText=true,
|
||||
ATV=0,--Activating time(0~8)
|
||||
}
|
||||
function button:reset()
|
||||
self.ATV=0
|
||||
end
|
||||
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)
|
||||
elseif obj then
|
||||
self.obj=obj
|
||||
@@ -146,16 +150,16 @@ function button:draw()
|
||||
local c=self.color
|
||||
local r,g,b=c[1],c[2],c[3]
|
||||
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
|
||||
gc.setLineWidth(4)
|
||||
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
|
||||
local obj=self.obj
|
||||
local y0=y+h*.5-ATV*.5
|
||||
gc.setColor(1,1,1,.2+ATV*.05)
|
||||
if self.align=="M"then
|
||||
if self.align=='M'then
|
||||
local x0=x+w*.5
|
||||
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)
|
||||
gc.setColor(r*.5,g*.5,b*.5)
|
||||
mDraw(obj,x0,y0)
|
||||
elseif self.align=="L"then
|
||||
elseif self.align=='L'then
|
||||
local edge=self.edge
|
||||
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)
|
||||
gc.setColor(r*.5,g*.5,b*.5)
|
||||
mDraw_Y(obj,x+edge,y0)
|
||||
elseif self.align=="R"then
|
||||
elseif self.align=='R'then
|
||||
local x0=x+w-self.edge-obj:getWidth()
|
||||
mDraw_Y(obj,x0-2,y0-2)
|
||||
mDraw_Y(obj,x0-2,y0+2)
|
||||
@@ -182,14 +186,14 @@ function button:draw()
|
||||
end
|
||||
end
|
||||
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
|
||||
function button:press()
|
||||
self.code()
|
||||
function button:press(_,_,k)
|
||||
self.code(k)
|
||||
self:FX()
|
||||
SFX.play("button")
|
||||
if self.sound then SFX.play('button')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
|
||||
local _={
|
||||
name= D.name,
|
||||
@@ -210,8 +214,9 @@ function WIDGET.newButton(D)--name,x,y,w[,h][,fText][,color][,font][,align="M"[,
|
||||
fText= D.fText,
|
||||
color= D.color and(COLOR[D.color]or D.color)or COLOR.Z,
|
||||
font= D.font or 30,
|
||||
align= D.align or"M",
|
||||
align= D.align or'M',
|
||||
edge= D.edge or 0,
|
||||
sound= D.sound~=false,
|
||||
code= D.code,
|
||||
hide= D.hide,
|
||||
}
|
||||
@@ -221,14 +226,15 @@ function WIDGET.newButton(D)--name,x,y,w[,h][,fText][,color][,font][,align="M"[,
|
||||
end
|
||||
|
||||
local key={
|
||||
type="key",
|
||||
type='key',
|
||||
mustHaveText=true,
|
||||
ATV=0,--Activating time(0~4)
|
||||
}
|
||||
function key:reset()
|
||||
self.ATV=0
|
||||
end
|
||||
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)
|
||||
elseif obj then
|
||||
self.obj=obj
|
||||
@@ -259,28 +265,29 @@ function key:draw()
|
||||
local r,g,b=c[1],c[2],c[3]
|
||||
|
||||
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.setLineWidth(4)
|
||||
gc.rectangle("line",x,y,w,h)
|
||||
gc.rectangle('line',x,y,w,h)
|
||||
|
||||
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)
|
||||
elseif self.align=="L"then
|
||||
elseif self.align=='L'then
|
||||
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)
|
||||
end
|
||||
end
|
||||
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
|
||||
function key:press()
|
||||
self.code()
|
||||
function key:press(_,_,k)
|
||||
self.code(k)
|
||||
if self.sound then SFX.play('key')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
|
||||
local _={
|
||||
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,
|
||||
color= D.color and(COLOR[D.color]or D.color)or COLOR.Z,
|
||||
font= D.font or 30,
|
||||
align= D.align or"M",
|
||||
sound= D.sound~=false,
|
||||
align= D.align or'M',
|
||||
edge= D.edge or 0,
|
||||
code= D.code,
|
||||
hide= D.hide,
|
||||
@@ -312,7 +320,8 @@ function WIDGET.newKey(D)--name,x,y,w[,h][,fText][,color][,font][,align="M"[,edg
|
||||
end
|
||||
|
||||
local switch={
|
||||
type="switch",
|
||||
type='switch',
|
||||
mustHaveText=true,
|
||||
ATV=0,--Activating time(0~8)
|
||||
CHK=0,--Check alpha(0~6)
|
||||
}
|
||||
@@ -343,7 +352,7 @@ function switch:draw()
|
||||
--Checked
|
||||
if ATV>0 then
|
||||
gc.setColor(1,1,1,ATV*.08)
|
||||
gc.rectangle("fill",x,y,50,50)
|
||||
gc.rectangle('fill',x,y,50,50)
|
||||
end
|
||||
if self.CHK>0 then
|
||||
gc.setColor(.9,1,.9,self.CHK/6)
|
||||
@@ -354,20 +363,20 @@ function switch:draw()
|
||||
--Frame
|
||||
gc.setLineWidth(4)
|
||||
gc.setColor(1,1,1,.6+ATV*.05)
|
||||
gc.rectangle("line",x,y,50,50)
|
||||
gc.rectangle('line',x,y,50,50)
|
||||
|
||||
--Drawable
|
||||
gc.setColor(self.color)
|
||||
mDraw_Y(self.obj,x-12-ATV-self.obj:getWidth(),y+25)
|
||||
end
|
||||
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
|
||||
function switch:press()
|
||||
self.code()
|
||||
SFX.play("move")
|
||||
if self.sound then SFX.play('move')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 _={
|
||||
name= D.name,
|
||||
|
||||
@@ -381,6 +390,7 @@ function WIDGET.newSwitch(D)--name,x,y[,fText][,color][,font][,disp],code,hide
|
||||
fText= D.fText,
|
||||
color= D.color and(COLOR[D.color]or D.color)or COLOR.Z,
|
||||
font= D.font or 30,
|
||||
sound= D.sound~=false,
|
||||
disp= D.disp,
|
||||
code= D.code,
|
||||
hide= D.hide,
|
||||
@@ -391,7 +401,7 @@ function WIDGET.newSwitch(D)--name,x,y[,fText][,color][,font][,disp],code,hide
|
||||
end
|
||||
|
||||
local slider={
|
||||
type="slider",
|
||||
type='slider',
|
||||
ATV=0,--Activating time(0~8)
|
||||
TAT=0,--Text activating time(0~180)
|
||||
pos=0,--Position shown
|
||||
@@ -464,12 +474,12 @@ function slider:draw()
|
||||
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
|
||||
gc.setColor(.8,.8,.8)
|
||||
gc.rectangle("fill",bx,by,bw,bh)
|
||||
gc.rectangle('fill',bx,by,bw,bh)
|
||||
|
||||
if ATV>0 then
|
||||
gc.setLineWidth(2)
|
||||
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
|
||||
if self.TAT>0 and self.show then
|
||||
setFont(25)
|
||||
@@ -484,7 +494,10 @@ function slider:draw()
|
||||
end
|
||||
end
|
||||
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
|
||||
function slider:drag(x)
|
||||
if not x then return end
|
||||
@@ -517,7 +530,7 @@ function slider:arrowKey(isLeft)
|
||||
self.change()
|
||||
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 _={
|
||||
name= D.name,
|
||||
|
||||
@@ -550,7 +563,7 @@ function WIDGET.newSlider(D)--name,x,y,w[,fText][,color][,unit][,smooth][,font][
|
||||
_.smooth=_.unit<=1
|
||||
end
|
||||
if D.show then
|
||||
if type(D.show)=="function"then
|
||||
if type(D.show)=='function'then
|
||||
_.show=D.show
|
||||
else
|
||||
_.show=sliderShowFunc[D.show]
|
||||
@@ -568,7 +581,8 @@ function WIDGET.newSlider(D)--name,x,y,w[,fText][,color][,unit][,smooth][,font][
|
||||
end
|
||||
|
||||
local selector={
|
||||
type="selector",
|
||||
type='selector',
|
||||
mustHaveText=true,
|
||||
ATV=8,--Activating time(0~4)
|
||||
select=0,--Selected item ID
|
||||
selText=false,--Selected item name
|
||||
@@ -585,7 +599,7 @@ function selector:reset()
|
||||
end
|
||||
end
|
||||
self.hide=true
|
||||
LOG.print("Selector "..self.name.." dead, disp= "..tostring(V),"warn")
|
||||
LOG.print("Selector "..self.name.." dead, disp= "..tostring(V),'warn')
|
||||
end
|
||||
function selector:isAbove(x,y)
|
||||
return
|
||||
@@ -616,7 +630,7 @@ function selector:draw()
|
||||
|
||||
gc.setColor(1,1,1,.6+ATV*.1)
|
||||
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)
|
||||
local t=(TIME()%.5)^.5
|
||||
@@ -644,7 +658,7 @@ function selector:draw()
|
||||
mStr(self.selText,x+w*.5,y+43-21)
|
||||
end
|
||||
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
|
||||
function selector:press(x)
|
||||
if x then
|
||||
@@ -664,7 +678,7 @@ function selector:press(x)
|
||||
self.code(self.list[s])
|
||||
self.select=s
|
||||
self.selText=self.list[s]
|
||||
SFX.play("prerotate")
|
||||
if self.sound then SFX.play('prerotate')end
|
||||
end
|
||||
end
|
||||
end
|
||||
@@ -681,9 +695,9 @@ function selector:arrowKey(isLeft)
|
||||
self.code(self.list[s])
|
||||
self.select=s
|
||||
self.selText=self.list[s]
|
||||
SFX.play("prerotate")
|
||||
if self.sound then SFX.play('prerotate')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 _={
|
||||
name= D.name,
|
||||
|
||||
@@ -701,6 +715,7 @@ function WIDGET.newSelector(D)--name,x,y,w[,fText][,color],list,disp,code,hide
|
||||
|
||||
fText= D.fText,
|
||||
color= D.color and(COLOR[D.color]or D.color)or COLOR.Z,
|
||||
sound= D.sound~=false,
|
||||
font= 30,
|
||||
list= D.list,
|
||||
disp= D.disp,
|
||||
@@ -713,7 +728,7 @@ function WIDGET.newSelector(D)--name,x,y,w[,fText][,color],list,disp,code,hide
|
||||
end
|
||||
|
||||
local inputBox={
|
||||
type="inputBox",
|
||||
type='inputBox',
|
||||
keepFocus=true,
|
||||
ATV=0,--Activating time(0~4)
|
||||
value="",--Text contained
|
||||
@@ -750,11 +765,11 @@ function inputBox:draw()
|
||||
local ATV=self.ATV
|
||||
|
||||
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.setLineWidth(4)
|
||||
gc.rectangle("line",x,y,w,h)
|
||||
gc.rectangle('line',x,y,w,h)
|
||||
|
||||
--Drawable
|
||||
setFont(self.font)
|
||||
@@ -766,7 +781,7 @@ function inputBox:draw()
|
||||
gc.print("*",x-5+self.font*.5*i,y+h*.5-self.font*.7)
|
||||
end
|
||||
else
|
||||
gc.printf(self.value,x+10,y,self.w,"left")
|
||||
gc.printf(self.value,x+10,y,self.w)
|
||||
setFont(self.font-10)
|
||||
if WIDGET.sel==self then
|
||||
gc.print(EDITING,x+10,y+12-self.font*1.4)
|
||||
@@ -774,7 +789,7 @@ function inputBox:draw()
|
||||
end
|
||||
end
|
||||
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
|
||||
function inputBox:press()
|
||||
if MOBILE then
|
||||
@@ -791,15 +806,15 @@ function inputBox:keypress(k)
|
||||
p=p-1
|
||||
end
|
||||
t=sub(t,1,p-1)
|
||||
SFX.play("lock")
|
||||
SFX.play('lock')
|
||||
elseif k=="delete"then
|
||||
t=""
|
||||
SFX.play("hold")
|
||||
SFX.play('hold')
|
||||
end
|
||||
self.value=t
|
||||
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 _={
|
||||
name= D.name,
|
||||
|
||||
@@ -825,7 +840,7 @@ function WIDGET.newInputBox(D)--name,x,y,w[,h][,font][,secret][,regex],hide
|
||||
end
|
||||
|
||||
local textBox={
|
||||
type="textBox",
|
||||
type='textBox',
|
||||
scrollPos=0,--Which line display at bottom
|
||||
scrollPix=0,--Hidden wheel move value
|
||||
sure=0,--Sure-timer for clear history
|
||||
@@ -862,16 +877,8 @@ function textBox:push(t)
|
||||
self.new=true
|
||||
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)
|
||||
self:drag(nil,nil,nil,0)
|
||||
if not self.fix and x>self.x+self.w-40 and y<self.y+40 then
|
||||
if self.sure>0 then
|
||||
self:clear()
|
||||
@@ -881,6 +888,15 @@ function textBox:press(x,y)
|
||||
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)
|
||||
if n<0 then
|
||||
self.scrollPos=max(self.scrollPos+n,min(#self.texts,self.capacity))
|
||||
@@ -894,7 +910,7 @@ end
|
||||
function textBox:clear()
|
||||
self.texts={}
|
||||
self.scrollPos=0
|
||||
SFX.play("fall")
|
||||
SFX.play('fall')
|
||||
end
|
||||
function textBox:draw()
|
||||
local x,y,w,h=self.x,self.y,self.w,self.h
|
||||
@@ -905,27 +921,26 @@ function textBox:draw()
|
||||
|
||||
--Background
|
||||
gc.setColor(0,0,0,.3)
|
||||
gc.rectangle("fill",x,y,w,h)
|
||||
gc.rectangle('fill',x,y,w,h)
|
||||
|
||||
--Frame
|
||||
gc.setLineWidth(4)
|
||||
gc.setColor(COLOR[WIDGET.sel==self and"Y"or"Z"])
|
||||
gc.rectangle("line",x,y,w,h)
|
||||
gc.setColor(1,1,WIDGET.sel==self and 0 or 1)
|
||||
gc.rectangle('line',x,y,w,h)
|
||||
|
||||
--Slider
|
||||
if #texts>cap then
|
||||
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)
|
||||
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
|
||||
|
||||
gc.setColor(1,1,1)
|
||||
setFont(30)
|
||||
--Clear button
|
||||
gc.setColor(1,1,1)
|
||||
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
|
||||
|
||||
--Texts
|
||||
@@ -941,9 +956,9 @@ function textBox:draw()
|
||||
end
|
||||
end
|
||||
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
|
||||
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 _={
|
||||
name= D.name,
|
||||
|
||||
@@ -999,7 +1014,7 @@ function WIDGET.set(list)
|
||||
for i=1,#list do
|
||||
list[i]:reset()
|
||||
end
|
||||
if SCN.cur~="custom_field"then
|
||||
if SCN.cur~='custom_field'then
|
||||
local colorList=THEME.getThemeColor()
|
||||
if not colorList then return end
|
||||
local rnd=math.random
|
||||
@@ -1016,11 +1031,11 @@ function WIDGET.setLang(widgetText)
|
||||
if L.widgetList then
|
||||
for _,W in next,L.widgetList do
|
||||
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"##"
|
||||
W.color=COLOR.dV
|
||||
end
|
||||
if type(t)=="string"and W.font then
|
||||
if type(t)=='string'and W.font then
|
||||
t=gc.newText(getFont(W.font),t)
|
||||
end
|
||||
W.obj=t
|
||||
@@ -1040,20 +1055,16 @@ function WIDGET.cursorMove(x,y)
|
||||
WIDGET.sel=false
|
||||
end
|
||||
end
|
||||
function WIDGET.press(x,y)
|
||||
function WIDGET.press(x,y,k)
|
||||
local W=WIDGET.sel
|
||||
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)
|
||||
elseif W.type=="slider"then
|
||||
WIDGET.drag(x,y)
|
||||
end
|
||||
W:press(x,y,k)
|
||||
if W.hide==true or W.hide and W.hide()then WIDGET.sel=false end
|
||||
end
|
||||
function WIDGET.drag(x,y,dx,dy)
|
||||
local W=WIDGET.sel
|
||||
if not W then return end
|
||||
if W.type=="slider"or W.type=="textBox"then
|
||||
if W.type=='slider'or W.type=='textBox'then
|
||||
W:drag(x,y,dx,dy)
|
||||
elseif not W:isAbove(x,y)then
|
||||
WIDGET.sel=false
|
||||
@@ -1062,7 +1073,7 @@ end
|
||||
function WIDGET.release(x,y)
|
||||
local W=WIDGET.sel
|
||||
if not W then return end
|
||||
if W.type=="slider"then
|
||||
if W.type=='slider'then
|
||||
W:release(x,y)
|
||||
end
|
||||
end
|
||||
@@ -1072,7 +1083,7 @@ function WIDGET.keyPressed(k)
|
||||
elseif kb.isDown("lshift","lalt","lctrl")and(k=="left"or k=="right")then
|
||||
--When hold [↑], control slider with left/right
|
||||
local W=WIDGET.sel
|
||||
if W and W.type=="slider"or W.type=="selector"then
|
||||
if W and W.type=='slider'or W.type=='selector'then
|
||||
W:arrowKey(k=="left")
|
||||
end
|
||||
elseif k=="up"or k=="down"or k=="left"or k=="right"then
|
||||
@@ -1115,19 +1126,19 @@ function WIDGET.keyPressed(k)
|
||||
end
|
||||
else
|
||||
local W=WIDGET.sel
|
||||
if W and W.type=="inputBox"then
|
||||
if W and W.type=='inputBox'then
|
||||
W:keypress(k)
|
||||
end
|
||||
end
|
||||
end
|
||||
function WIDGET.textinput(texts)
|
||||
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
|
||||
WIDGET.sel.value=WIDGET.sel.value..texts
|
||||
SFX.play("move")
|
||||
SFX.play('move')
|
||||
else
|
||||
SFX.play("finesseError",.3)
|
||||
SFX.play('finesseError',.3)
|
||||
end
|
||||
end
|
||||
end
|
||||
@@ -1145,9 +1156,9 @@ function WIDGET.gamepadPressed(i)
|
||||
elseif i=="a"or i=="b"then
|
||||
local W=WIDGET.sel
|
||||
if W then
|
||||
if W.type=="button"or W.type=="key"then
|
||||
if W.type=='button'or W.type=='key'then
|
||||
WIDGET.press()
|
||||
elseif W.type=="slider"then
|
||||
elseif W.type=='slider'then
|
||||
local p=W.disp()
|
||||
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
|
||||
|
||||
10
conf.lua
10
conf.lua
@@ -1,10 +1,10 @@
|
||||
VERSION={
|
||||
code=1405,
|
||||
string="Alpha V0.14.5",
|
||||
name="晨 Morn",
|
||||
code=1406,
|
||||
string="Alpha V0.14.6",
|
||||
name="午 Noon",
|
||||
}
|
||||
function love.conf(t)
|
||||
t.identity="Techmino"--Saving folder
|
||||
t.identity='Techmino'--Saving folder
|
||||
t.version="11.1"
|
||||
t.gammacorrect=false
|
||||
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.borderless=false
|
||||
W.resizable=true
|
||||
W.fullscreentype="desktop"--"exclusive"
|
||||
W.fullscreentype='desktop'--'exclusive'
|
||||
W.fullscreen=false
|
||||
W.vsync=0--Unlimited FPS
|
||||
W.msaa=false--Num of samples to use with multi-sampled antialiasing
|
||||
|
||||
@@ -73,7 +73,7 @@
|
||||
|
||||
bg:背景,只能填写内置背景的名字
|
||||
bgm:背景音乐名(或者列表随机,例如{"race","push"}),只能用内置音乐库的音乐名
|
||||
noMod:是否禁用mod
|
||||
allowMod:是否允许mod
|
||||
load:
|
||||
必选
|
||||
模式初始化函数,一般创建一个玩家即可
|
||||
@@ -115,8 +115,8 @@ return{--返回一个table,你也可以在之前定义一些常量或者函数
|
||||
color=COLOR.green,--颜色
|
||||
env={--模式环境变量
|
||||
drop=60,lock=60,
|
||||
dropPiece=function(P)if P.stat.row>=40 then P:win("finish")end end,
|
||||
bg="bg2",bgm="race",
|
||||
dropPiece=function(P)if P.stat.row>=40 then P:win('finish')end end,
|
||||
bg='bg2',bgm='race',
|
||||
},
|
||||
load=function()--生成玩家
|
||||
PLY.newPlayer(1)--1是玩家编号,默认用户控制1号玩家
|
||||
|
||||
38
main.lua
38
main.lua
@@ -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
|
||||
goto REM love=require"love"::REM::--Just tell IDE to load love-api, no actual usage
|
||||
local fs=love.filesystem
|
||||
NONE={}function NULL()end
|
||||
DBP=print--Use this in temporary code, easy to find and remove
|
||||
TIME=love.timer.getTime
|
||||
YIELD=coroutine.yield
|
||||
SYSTEM=love.system.getOS()
|
||||
@@ -21,10 +22,7 @@ MOBILE=SYSTEM=="Android"or SYSTEM=="iOS"
|
||||
SAVEDIR=fs.getSaveDirectory()
|
||||
|
||||
--Global Vars & Settings
|
||||
LOADED=false
|
||||
DAILYLAUNCH=false
|
||||
EDITING=""
|
||||
ERRDATA={}
|
||||
|
||||
--System setting
|
||||
math.randomseed(os.time()*626)
|
||||
@@ -36,7 +34,7 @@ love.mouse.setVisible(false)
|
||||
--Delete all files from too old version
|
||||
function CLEAR(root)
|
||||
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)
|
||||
end
|
||||
end
|
||||
@@ -47,7 +45,7 @@ for _,v in next,{"conf","record","replay","cache","lib"}do
|
||||
local info=fs.getInfo(v)
|
||||
if not info then
|
||||
fs.createDirectory(v)
|
||||
elseif info.type~="directory"then
|
||||
elseif info.type~='directory'then
|
||||
fs.remove(v)
|
||||
fs.createDirectory(v)
|
||||
end
|
||||
@@ -64,9 +62,9 @@ require"parts.gametoolfunc"
|
||||
FREEROW= require"parts.freeRow"
|
||||
DATA= require"parts.data"
|
||||
|
||||
USERS= require"parts.users"
|
||||
TEXTURE= require"parts.texture"
|
||||
SKIN= require"parts.skin"
|
||||
USERS= require"parts.users"
|
||||
NET= require"parts.net"
|
||||
VK= require"parts.virtualKey"
|
||||
PLY= require"parts.player"
|
||||
@@ -120,6 +118,7 @@ IMG.init{
|
||||
}
|
||||
SKIN.init{
|
||||
"crystal_scf",
|
||||
"matte_mrz",
|
||||
"contrast_mrz",
|
||||
"polkadots_scf",
|
||||
"toy_scf",
|
||||
@@ -240,13 +239,13 @@ do
|
||||
local needSave
|
||||
local autoRestart
|
||||
|
||||
if type(STAT.version)~="number"then
|
||||
if type(STAT.version)~='number'then
|
||||
STAT.version=0
|
||||
needSave=true
|
||||
end
|
||||
if STAT.version<1300 then
|
||||
STAT.frame=math.floor(STAT.time*60)
|
||||
STAT.lastPlay="sprint_10l"
|
||||
STAT.lastPlay='sprint_10l'
|
||||
RANKS.sprintFix=nil
|
||||
RANKS.sprintLock=nil
|
||||
needSave=true
|
||||
@@ -293,12 +292,12 @@ do
|
||||
if RANKS.infinite then RANKS.infinite=6 end
|
||||
if RANKS.infinite_dig then RANKS.infinite_dig=6 end
|
||||
for k in next,RANKS do
|
||||
if type(k)=="number"then
|
||||
if type(k)=='number'then
|
||||
RANKS[k]=nil
|
||||
needSave=true
|
||||
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
|
||||
if RANKS[v]then
|
||||
RANKS[k]=RANKS[v]
|
||||
@@ -306,7 +305,7 @@ do
|
||||
end
|
||||
v="record/"..v
|
||||
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")
|
||||
end
|
||||
if fs.getInfo(v..".rec")then
|
||||
@@ -320,14 +319,11 @@ do
|
||||
end
|
||||
|
||||
if needSave then
|
||||
FILE.save(SETTING,"conf/settings","q")
|
||||
FILE.save(RANKS,"conf/unlock","q")
|
||||
FILE.save(STAT,"conf/data","q")
|
||||
FILE.save(SETTING,'conf/settings','q')
|
||||
FILE.save(RANKS,'conf/unlock','q')
|
||||
FILE.save(STAT,'conf/data','q')
|
||||
end
|
||||
if autoRestart then
|
||||
love.event.quit("restart")
|
||||
love.event.quit('restart')
|
||||
end
|
||||
end
|
||||
|
||||
--Var leak check
|
||||
-- setmetatable(_G,{__newindex=function(self,k,v)print('>>'..k,tostring(v))rawset(self,k,v)end})
|
||||
end
|
||||
BIN
media/BGM/hope.ogg
Normal file
BIN
media/BGM/hope.ogg
Normal file
Binary file not shown.
BIN
media/SFX/key.ogg
Normal file
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 |
BIN
media/image/skin/matte_mrz.png
Normal file
BIN
media/image/skin/matte_mrz.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 9.4 KiB |
@@ -1,17 +1,17 @@
|
||||
local AISpeed={60,50,40,30,20,14,10,6,4,3}
|
||||
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
|
||||
return{
|
||||
type="CC",
|
||||
type='CC',
|
||||
next=next,
|
||||
hold=hold,
|
||||
delta=AISpeed[speedLV],
|
||||
node=node,
|
||||
}
|
||||
elseif type=="9S"then
|
||||
elseif type=='9S'then
|
||||
return{
|
||||
type="9S",
|
||||
type='9S',
|
||||
delta=math.floor(AISpeed[speedLV]),
|
||||
hold=hold,
|
||||
}
|
||||
|
||||
12
parts/ai.lua
12
parts/ai.lua
@@ -7,13 +7,13 @@ local yield=coroutine.yield
|
||||
-- 11~13:LL,RR,DD
|
||||
local blockPos={4,4,4,4,4,5,4}
|
||||
-------------------------------------------------Cold clear
|
||||
local _CC=LOADLIB("CC",{
|
||||
local _CC=LOADLIB('CC',{
|
||||
Windows="CCloader",
|
||||
Linux="CCloader",
|
||||
Android="libCCloader.so",
|
||||
libFunc="luaopen_CCloader",
|
||||
})cc=nil
|
||||
if type(_CC)=="table"then
|
||||
if type(_CC)=='table'then
|
||||
local CCblockID={6,5,4,3,2,1,0}
|
||||
CC={
|
||||
getConf= _CC.get_default_config ,--()options,weights
|
||||
@@ -62,7 +62,7 @@ if type(_CC)=="table"then
|
||||
CC.fastWeights(wei)
|
||||
CC.setHold(opt,P.AIdata.hold)
|
||||
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)
|
||||
P.AI_bot=CC.new(opt,wei)
|
||||
CC.free(opt)CC.free(wei)
|
||||
@@ -71,7 +71,7 @@ if type(_CC)=="table"then
|
||||
end
|
||||
CC.updateField(P)
|
||||
|
||||
TABLE.clear(P.holdQueue)
|
||||
TABLE.cut(P.holdQueue)
|
||||
P.holdTime=P.gameEnv.holdCount
|
||||
|
||||
P.cur=rem(P.nextQueue,1)
|
||||
@@ -200,7 +200,7 @@ local function getScore(field,cb,cy)
|
||||
end
|
||||
-------------------------------------------------
|
||||
return{
|
||||
["9S"]=function(P,keys)
|
||||
['9S']=function(P,keys)
|
||||
while true do
|
||||
--Thinking
|
||||
yield()
|
||||
@@ -275,7 +275,7 @@ return{
|
||||
end
|
||||
end
|
||||
end,
|
||||
["CC"]=CC and function(P,keys)
|
||||
['CC']=CC and function(P,keys)
|
||||
while true do
|
||||
--Start thinking
|
||||
yield()
|
||||
|
||||
@@ -18,7 +18,7 @@ end
|
||||
function back.draw()
|
||||
shader:send("t",t)
|
||||
gc.setShader(shader)
|
||||
gc.rectangle("fill",0,0,SCR.w,SCR.h)
|
||||
gc.rectangle('fill',0,0,SCR.w,SCR.h)
|
||||
gc.setShader()
|
||||
end
|
||||
return back
|
||||
@@ -7,7 +7,7 @@ local X,Y,K
|
||||
function back.init()
|
||||
if not video then
|
||||
video=gc.newVideo("parts/backgrounds/badapple.ogv",{false})
|
||||
video:setFilter("linear","linear")
|
||||
video:setFilter('linear','linear')
|
||||
video:play()
|
||||
end
|
||||
back.resize()
|
||||
|
||||
@@ -17,7 +17,7 @@ end
|
||||
function back.draw()
|
||||
shader:send("t",t)
|
||||
gc.setShader(shader)
|
||||
gc.rectangle("fill",0,0,SCR.w,SCR.h)
|
||||
gc.rectangle('fill',0,0,SCR.w,SCR.h)
|
||||
gc.setShader()
|
||||
end
|
||||
return back
|
||||
@@ -17,7 +17,7 @@ end
|
||||
function back.draw()
|
||||
shader:send("t",t)
|
||||
gc.setShader(shader)
|
||||
gc.rectangle("fill",0,0,SCR.w,SCR.h)
|
||||
gc.rectangle('fill',0,0,SCR.w,SCR.h)
|
||||
gc.setShader()
|
||||
end
|
||||
return back
|
||||
@@ -1,5 +1,6 @@
|
||||
--Blackhole
|
||||
local gc=love.graphics
|
||||
local sin,cos=math.sin,math.cos
|
||||
local rnd=math.random
|
||||
local ins,rem=table.insert,table.remove
|
||||
local back={}
|
||||
@@ -13,36 +14,23 @@ end
|
||||
function back.update()
|
||||
t=t-1
|
||||
if t==0 then
|
||||
local size=SCR.rad*(2+rnd()*3)/100
|
||||
local S={
|
||||
x=(SCR.w-size)*rnd()-SCR.w/2,
|
||||
y=(SCR.h-size)*rnd()-SCR.h/2,
|
||||
ang=6.2832*rnd(),
|
||||
d=SCR.rad*1.05/2,
|
||||
rotate=6.2832*rnd(),
|
||||
va=.05-rnd()*.1,
|
||||
size=size,
|
||||
texture=rnd(16),
|
||||
size=SCR.rad*(2+rnd()*3)/100,
|
||||
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)
|
||||
t=rnd(6,16)
|
||||
t=rnd(6,12)
|
||||
end
|
||||
for i=#squares,1,-1 do
|
||||
local S=squares[i]
|
||||
local ang=math.atan2(S.y,S.x)
|
||||
local d=(S.x^2+S.y^2)^.5
|
||||
d=d-2000/(d+60)
|
||||
if d>0 then
|
||||
S.x=d*math.cos(ang)
|
||||
S.y=d*math.sin(ang)
|
||||
S.ang=S.ang+S.va
|
||||
S.d=S.d-SCR.rad/(S.d+60)
|
||||
if S.d>0 then
|
||||
S.ang=S.ang+.008
|
||||
S.rotate=S.rotate+S.va
|
||||
else
|
||||
rem(squares,i)
|
||||
end
|
||||
@@ -50,7 +38,7 @@ function back.update()
|
||||
end
|
||||
function back.draw()
|
||||
gc.clear(.1,.1,.1)
|
||||
gc.push("transform")
|
||||
gc.push('transform')
|
||||
gc.origin()
|
||||
gc.translate(SCR.w/2,SCR.h/2)
|
||||
|
||||
@@ -58,19 +46,19 @@ function back.draw()
|
||||
gc.setColor(.5,.5,.5)
|
||||
for i=1,#squares do
|
||||
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
|
||||
|
||||
--Blackhole
|
||||
gc.scale(SCR.rad/1260)
|
||||
gc.scale(SCR.rad/1600)
|
||||
gc.setColor(0,0,0)
|
||||
gc.circle("fill",0,0,157)
|
||||
gc.circle('fill',0,0,157)
|
||||
gc.setLineWidth(6)
|
||||
for i=0,15 do
|
||||
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
|
||||
gc.scale(1260/SCR.rad)
|
||||
gc.scale(1600/SCR.rad)
|
||||
gc.pop()
|
||||
end
|
||||
function back.discard()
|
||||
|
||||
55
parts/backgrounds/blockfall.lua
Normal file
55
parts/backgrounds/blockfall.lua
Normal 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
|
||||
@@ -5,52 +5,53 @@ local ins,rem=table.insert,table.remove
|
||||
local back={}
|
||||
|
||||
local t
|
||||
local cell
|
||||
local mino
|
||||
function back.init()
|
||||
t=0
|
||||
cell={}
|
||||
mino={}
|
||||
end
|
||||
function back.update()
|
||||
t=t+1
|
||||
if t%10==0 then
|
||||
ins(cell,{
|
||||
bid=rnd(29),
|
||||
local r=rnd(29)
|
||||
ins(mino,{
|
||||
bid=r,
|
||||
block=TEXTURE.miniBlock[r],
|
||||
color=minoColor[SETTING.skin[r]],
|
||||
x=SCR.w*rnd(),
|
||||
y=-25,
|
||||
a=rnd()*6.2832,
|
||||
y=SCR.h*-.05,
|
||||
k=SCR.rad/100,
|
||||
ang=rnd()*6.2832,
|
||||
vy=.5+rnd()*.4,
|
||||
vx=rnd()*.4-.2,
|
||||
va=rnd()*.04-.02,
|
||||
})
|
||||
end
|
||||
for i=#cell,1,-1 do
|
||||
local P=cell[i]
|
||||
for i=#mino,1,-1 do
|
||||
local P=mino[i]
|
||||
P.y=P.y+P.vy
|
||||
if P.y>SCR.h+25 then
|
||||
rem(cell,i)
|
||||
rem(mino,i)
|
||||
else
|
||||
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
|
||||
end
|
||||
end
|
||||
end
|
||||
function back.draw()
|
||||
gc.clear(.15,.15,.15)
|
||||
gc.push("transform")
|
||||
gc.push('transform')
|
||||
gc.origin()
|
||||
local texture=TEXTURE.miniBlock
|
||||
local minoColor=minoColor
|
||||
for i=1,#cell do
|
||||
local C=cell[i]
|
||||
local tex=texture[C.bid]
|
||||
local c=minoColor[SETTING.skin[C.bid]]
|
||||
for i=1,#mino do
|
||||
local C=mino[i]
|
||||
local c=C.color
|
||||
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
|
||||
gc.pop()
|
||||
end
|
||||
function back.discard()
|
||||
cell=nil
|
||||
mino=nil
|
||||
end
|
||||
return back
|
||||
56
parts/backgrounds/blockspace.lua
Normal file
56
parts/backgrounds/blockspace.lua
Normal 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
|
||||
@@ -62,16 +62,16 @@ function back.update(dt)
|
||||
end
|
||||
function back.draw()
|
||||
gc.clear(.1,.1,.1)
|
||||
gc.push("transform")
|
||||
gc.push('transform')
|
||||
gc.origin()
|
||||
gc.setLineWidth(6)
|
||||
for i=1,#squares do
|
||||
local S=squares[i]
|
||||
local c=S.color
|
||||
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)
|
||||
rectangle("fill",S.x,S.y,S.size,S.size)
|
||||
rectangle('fill',S.x,S.y,S.size,S.size)
|
||||
end
|
||||
gc.pop()
|
||||
end
|
||||
|
||||
@@ -39,25 +39,25 @@ function back.update()
|
||||
end
|
||||
end
|
||||
function back.draw()
|
||||
gc.push("transform")
|
||||
gc.push('transform')
|
||||
gc.translate(SCR.w/2,SCR.h/2+20*sin(t*.02))
|
||||
gc.scale(SCR.k)
|
||||
gc.clear(.1,.1,.1)
|
||||
gc.setLineWidth(320)
|
||||
gc.setColor(.3,.2,.3)
|
||||
gc.arc("line","open",0,420,500,-.8*3.1416,-.2*3.1416)
|
||||
gc.arc('line','open',0,420,500,-.8*3.1416,-.2*3.1416)
|
||||
|
||||
gc.setLineWidth(4)
|
||||
gc.setColor(.7,.5,.65)
|
||||
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,660,-.799*3.1416,-.201*3.1416)
|
||||
gc.arc('line','open',0,420,340,-.808*3.1416,-.192*3.1416)
|
||||
gc.line(-281,224,-530,30.5)
|
||||
gc.line(281,224,530,30.5)
|
||||
|
||||
gc.setLineWidth(6)
|
||||
gc.setColor(.55,.5,.6)
|
||||
for i=1,8 do
|
||||
polygon("line",fan[i])
|
||||
polygon('line',fan[i])
|
||||
end
|
||||
|
||||
gc.setLineWidth(2)
|
||||
@@ -65,7 +65,7 @@ function back.draw()
|
||||
gc.origin()
|
||||
for i=1,#petal do
|
||||
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
|
||||
gc.pop()
|
||||
end
|
||||
|
||||
@@ -33,7 +33,7 @@ function back.update(dt)
|
||||
if time>1 then
|
||||
local x,y,color=F.x,F.y,F.color
|
||||
if F.big then
|
||||
SFX.play("fall",.5)
|
||||
SFX.play('fall',.5)
|
||||
for _=1,rnd(62,126)do
|
||||
ins(particle,{
|
||||
x=x,y=y,
|
||||
@@ -44,7 +44,7 @@ function back.update(dt)
|
||||
})
|
||||
end
|
||||
else
|
||||
SFX.play("clear_1",.4)
|
||||
SFX.play('clear_1',.4)
|
||||
for _=1,rnd(16,26)do
|
||||
ins(particle,{
|
||||
x=x,y=y,
|
||||
@@ -76,12 +76,12 @@ function back.update(dt)
|
||||
end
|
||||
function back.draw()
|
||||
gc.clear(.1,.1,.1)
|
||||
gc.push("transform")
|
||||
gc.push('transform')
|
||||
gc.origin()
|
||||
for i=1,#firework do
|
||||
local F=firework[i]
|
||||
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
|
||||
gc.setLineWidth(3)
|
||||
for i=1,#particle do
|
||||
|
||||
@@ -38,7 +38,7 @@ function back.update(dt)
|
||||
end
|
||||
function back.draw()
|
||||
gc.clear(.1,.1,.1)
|
||||
gc.push("transform")
|
||||
gc.push('transform')
|
||||
gc.origin()
|
||||
gc.setColor(1,1,1)
|
||||
local img=IMG.lanterns
|
||||
|
||||
@@ -14,14 +14,14 @@ function back.update(dt)
|
||||
end
|
||||
function back.draw()
|
||||
gc.clear(.15,.15,.15)
|
||||
gc.push("transform")
|
||||
gc.push('transform')
|
||||
local k=SCR.k
|
||||
gc.scale(k)
|
||||
local Y=ceil(SCR.h/80/k)
|
||||
for x=1,ceil(SCR.w/80/k)do
|
||||
for y=1,Y do
|
||||
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
|
||||
gc.pop()
|
||||
|
||||
@@ -18,7 +18,7 @@ end
|
||||
function back.draw()
|
||||
shader:send("t",t)
|
||||
gc.setShader(shader)
|
||||
gc.rectangle("fill",0,0,SCR.w,SCR.h)
|
||||
gc.rectangle('fill',0,0,SCR.w,SCR.h)
|
||||
gc.setShader()
|
||||
end
|
||||
return back
|
||||
@@ -18,7 +18,7 @@ end
|
||||
function back.draw()
|
||||
shader:send("t",t)
|
||||
gc.setShader(shader)
|
||||
gc.rectangle("fill",0,0,SCR.w,SCR.h)
|
||||
gc.rectangle('fill',0,0,SCR.w,SCR.h)
|
||||
gc.setShader()
|
||||
end
|
||||
return back
|
||||
@@ -39,12 +39,12 @@ function back.update()
|
||||
end
|
||||
function back.draw()
|
||||
gc.clear(.2,.2,.2)
|
||||
gc.push("transform")
|
||||
gc.push('transform')
|
||||
gc.setColor(.7,.7,.7)
|
||||
gc.origin()
|
||||
for i=1,#snow do
|
||||
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
|
||||
gc.pop()
|
||||
end
|
||||
|
||||
@@ -36,7 +36,7 @@ function back.draw()
|
||||
gc.translate(-10,-10)
|
||||
gc.setColor(.8,.8,.8)
|
||||
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
|
||||
gc.translate(10,10)
|
||||
end
|
||||
|
||||
@@ -34,7 +34,7 @@ function back.draw()
|
||||
for i=1,#ring do
|
||||
local r=ring[i]^2/12
|
||||
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
|
||||
function back.discard()
|
||||
|
||||
@@ -18,7 +18,7 @@ function back.draw()
|
||||
else
|
||||
gc.clear(.1,.1,.1)
|
||||
end
|
||||
gc.push("transform")
|
||||
gc.push('transform')
|
||||
gc.translate(SCR.w/2,SCR.h/2+20*sin(t*.02))
|
||||
gc.scale(SCR.k)
|
||||
gc.scale(1.1626,1.26)
|
||||
|
||||
@@ -17,12 +17,12 @@ local W,H
|
||||
function back.init()
|
||||
bar=gc.newCanvas(41,1)
|
||||
gc.setCanvas(bar)
|
||||
gc.push("transform")
|
||||
gc.push('transform')
|
||||
gc.origin()
|
||||
for x=0,20 do
|
||||
gc.setColor(1,1,1,x/11)
|
||||
gc.rectangle("fill",x,0,1,1)
|
||||
gc.rectangle("fill",41-x,0,1,1)
|
||||
gc.rectangle('fill',x,0,1,1)
|
||||
gc.rectangle('fill',41-x,0,1,1)
|
||||
end
|
||||
gc.pop()
|
||||
gc.setCanvas()
|
||||
|
||||
@@ -98,7 +98,7 @@ function DATA.copyBoard(page)--Copy the [page] board
|
||||
end
|
||||
str=str..S
|
||||
end
|
||||
return data.encode("string","base64",data.compress("string","zlib",str))
|
||||
return data.encode('string','base64',data.compress('string','zlib',str))
|
||||
end
|
||||
function DATA.copyBoards()
|
||||
local out={}
|
||||
@@ -114,9 +114,10 @@ function DATA.pasteBoard(str,page)--Paste [str] data to [page] board
|
||||
local _,__
|
||||
|
||||
--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
|
||||
_,str=pcall(data.decompress,"string","zlib",str)
|
||||
_,str=pcall(data.decompress,'string','zlib',str)
|
||||
if not _ then return end
|
||||
|
||||
local fX,fY=1,1--*ptr for Field(r*10+(c-1))
|
||||
@@ -240,14 +241,13 @@ function DATA.copyQuestArgs()
|
||||
return str
|
||||
end
|
||||
do--function DATA.pasteQuestArgs(str)
|
||||
local sub=string.sub
|
||||
function pasteQuestArgs(str)
|
||||
function DATA.pasteQuestArgs(str)
|
||||
if #str<4 then return end
|
||||
local ENV=CUSTOMENV
|
||||
ENV.holdCount= byte(str,1)-48
|
||||
ENV.ospin= byte(str,2)~=90
|
||||
ENV.missionKill= byte(str,3)~=90
|
||||
ENV.sequence= sub(str,4)
|
||||
ENV.holdCount= str:byte(1)-48
|
||||
ENV.ospin= str:byte(2)~=90
|
||||
ENV.missionKill= str:byte(3)~=90
|
||||
ENV.sequence= str:sub(4)
|
||||
return true
|
||||
end
|
||||
end
|
||||
@@ -381,9 +381,9 @@ do--function DATA.saveRecording()
|
||||
JSON.encode(getModList()).."\n"..
|
||||
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)
|
||||
FILE.save(REPLAY,"conf/replay")
|
||||
FILE.save(REPLAY,'conf/replay')
|
||||
return true
|
||||
else
|
||||
LOG.print("Save failed: File already exists")
|
||||
|
||||
@@ -1,7 +1,4 @@
|
||||
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()
|
||||
GAME.stage=GAME.stage+1
|
||||
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
|
||||
spd=30
|
||||
elseif GAME.stage==3 then
|
||||
@@ -77,7 +74,7 @@ function royaleLevelup()
|
||||
for _,P in next,PLY_ALIVE do
|
||||
P.gameEnv.garbageSpeed=.6
|
||||
end
|
||||
if PLAYERS[1].alive then BGM.play("cruelty")end
|
||||
if PLAYERS[1].alive then BGM.play('cruelty')end
|
||||
elseif GAME.stage==4 then
|
||||
spd=10
|
||||
for _,P in next,PLY_ALIVE do
|
||||
@@ -90,7 +87,7 @@ function royaleLevelup()
|
||||
end
|
||||
elseif GAME.stage==6 then
|
||||
spd=3
|
||||
if PLAYERS[1].alive then BGM.play("final")end
|
||||
if PLAYERS[1].alive then BGM.play('final')end
|
||||
end
|
||||
for _,P in next,PLY_ALIVE do
|
||||
P.gameEnv.drop=spd
|
||||
@@ -120,8 +117,8 @@ function freshDate(mode)
|
||||
if STAT.date~=date then
|
||||
STAT.date=date
|
||||
STAT.todayTime=0
|
||||
if not mode:find("q")then
|
||||
LOG.print(text.newDay,"message")
|
||||
if not mode:find'q'then
|
||||
LOG.print(text.newDay,'message')
|
||||
end
|
||||
return true
|
||||
end
|
||||
@@ -135,10 +132,10 @@ function legalGameTime()--Check if today's playtime is legal
|
||||
if STAT.todayTime<14400 then
|
||||
return true
|
||||
elseif STAT.todayTime<21600 then
|
||||
LOG.print(text.playedLong,"warning")
|
||||
LOG.print(text.playedLong,'warn')
|
||||
return true
|
||||
else
|
||||
LOG.print(text.playedTooMuch,"warning")
|
||||
LOG.print(text.playedTooMuch,'warn')
|
||||
return false
|
||||
end
|
||||
end
|
||||
@@ -147,8 +144,8 @@ end
|
||||
|
||||
function mergeStat(stat,delta)--Merge delta stat. to global stat.
|
||||
for k,v in next,delta do
|
||||
if type(v)=="table"then
|
||||
if type(stat[k])=="table"then
|
||||
if type(v)=='table'then
|
||||
if type(stat[k])=='table'then
|
||||
mergeStat(stat[k],v)
|
||||
end
|
||||
else
|
||||
@@ -175,7 +172,7 @@ function destroyPlayers()--Destroy all player objects, restore freerows and free
|
||||
FREEROW.discard(rem(P.field))
|
||||
FREEROW.discard(rem(P.visTime))
|
||||
end
|
||||
if P.AI_mode=="CC"then
|
||||
if P.AI_mode=='CC'then
|
||||
CC.free(P.bot_opt)
|
||||
CC.free(P.bot_wei)
|
||||
CC.destroy(P.AI_bot)
|
||||
@@ -183,7 +180,7 @@ function destroyPlayers()--Destroy all player objects, restore freerows and free
|
||||
end
|
||||
PLAYERS[i]=nil
|
||||
end
|
||||
TABLE.clear(PLY_ALIVE)
|
||||
TABLE.cut(PLY_ALIVE)
|
||||
collectgarbage()
|
||||
end
|
||||
function pauseGame()
|
||||
@@ -201,7 +198,7 @@ function pauseGame()
|
||||
if not(GAME.result or GAME.replaying)then
|
||||
GAME.pauseCount=GAME.pauseCount+1
|
||||
end
|
||||
SCN.swapTo("pause","none")
|
||||
SCN.swapTo('pause','none')
|
||||
end
|
||||
end
|
||||
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.net=ifNet
|
||||
if ifNet then
|
||||
SCN.go("net_game","swipeD")
|
||||
SCN.go('net_game','swipeD')
|
||||
else
|
||||
drawableText.modeName:set(text.modes[M][1].." "..text.modes[M][2])
|
||||
SCN.go("game",ifQuickPlay and"swipeD"or"fade_togame")
|
||||
SFX.play("enter")
|
||||
SCN.go('game',ifQuickPlay and'swipeD'or'fade_togame')
|
||||
SFX.play('enter')
|
||||
end
|
||||
end
|
||||
end
|
||||
@@ -245,13 +242,25 @@ function initPlayerPosition(sudden)--Set initial position for every player
|
||||
end
|
||||
end
|
||||
|
||||
local method=sudden and"setPosition"or"movePosition"
|
||||
local method=sudden and'setPosition'or'movePosition'
|
||||
L[1][method](L[1],340,75,1)
|
||||
if #L<=5 then
|
||||
if L[2]then L[2][method](L[2],965,390,.5)end
|
||||
if L[3]then L[3][method](L[3],965,30,.5)end
|
||||
if L[4]then L[4][method](L[4],20,390,.5)end
|
||||
if L[5]then L[5][method](L[5],20,30,.5)end
|
||||
if L[3]then L[3][method](L[3],965, 30,.5)end
|
||||
if L[4]then L[4][method](L[4], 20,390,.5)end
|
||||
if L[5]then L[5][method](L[5], 20, 30,.5)end
|
||||
elseif #L<=17 then
|
||||
for i=1,4 do if L[i+1]then L[i+1][method](L[i+1], 15, -160+180*i,.25)else return end end
|
||||
for i=1,4 do if L[i+5]then L[i+5][method](L[i+5], 180,-160+180*i,.25)else return end end
|
||||
for i=1,4 do if L[i+9]then L[i+9][method](L[i+9], 950,-160+180*i,.25)else return end end
|
||||
for i=1,4 do if L[i+13]then L[i+13][method](L[i+13],1120,-160+180*i,.25)else return end end
|
||||
elseif #L<=31 then
|
||||
for i=1,5 do if L[i+1]then L[i+1][method](L[i+1], 10, -100+135*i,.18)else return end end
|
||||
for i=1,5 do if L[i+6]then L[i+6][method](L[i+6], 120,-100+135*i,.18)else return end end
|
||||
for i=1,5 do if L[i+11]then L[i+11][method](L[i+11],230,-100+135*i,.18)else return end end
|
||||
for i=1,5 do if L[i+16]then L[i+16][method](L[i+16],940,-100+135*i,.18)else return end end
|
||||
for i=1,5 do if L[i+21]then L[i+21][method](L[i+21],1050,-100+135*i,.18)else return end end
|
||||
for i=1,5 do if L[i+26]then L[i+26][method](L[i+26],1160,-100+135*i,.18)else return end end
|
||||
elseif #L<=49 then
|
||||
local n=2
|
||||
for i=1,4 do for j=1,6 do
|
||||
@@ -317,7 +326,7 @@ do--function resetGameData(args)
|
||||
if time%20==0 then
|
||||
local M=GAME.mod[time/20]
|
||||
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
|
||||
return
|
||||
end
|
||||
@@ -335,12 +344,12 @@ do--function resetGameData(args)
|
||||
--Graphic
|
||||
"block","ghost","center","smooth","grid","bagLine",
|
||||
"lockFX","dropFX","moveFX","clearFX","splashFX","shakeFX","atkFX",
|
||||
"text","score","warn","highCam","nextPos",
|
||||
"text","score",'warn',"highCam","nextPos",
|
||||
}
|
||||
local function copyGameSetting()
|
||||
local S={}
|
||||
for _,key in next,gameSetting do
|
||||
if type(SETTING[key])=="table"then
|
||||
if type(SETTING[key])=='table'then
|
||||
S[key]=TABLE.shift(SETTING[key])
|
||||
else
|
||||
S[key]=SETTING[key]
|
||||
@@ -358,12 +367,12 @@ do--function resetGameData(args)
|
||||
GAME.result=false
|
||||
GAME.warnLVL0=0
|
||||
GAME.warnLVL=0
|
||||
if args:find("r")then
|
||||
if args:find'r'then
|
||||
GAME.frameStart=0
|
||||
GAME.recording=false
|
||||
GAME.replaying=1
|
||||
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.pauseTime=0
|
||||
GAME.pauseCount=0
|
||||
@@ -378,7 +387,7 @@ do--function resetGameData(args)
|
||||
|
||||
destroyPlayers()
|
||||
GAME.curMode.load()
|
||||
initPlayerPosition(args:find("q"))
|
||||
initPlayerPosition(args:find'q')
|
||||
VK.restore()
|
||||
if GAME.modeEnv.task then
|
||||
for i=1,#PLAYERS do
|
||||
@@ -387,7 +396,7 @@ do--function resetGameData(args)
|
||||
end
|
||||
BG.set(GAME.modeEnv.bg)
|
||||
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()
|
||||
if GAME.modeEnv.royaleMode then
|
||||
@@ -404,8 +413,10 @@ do--function resetGameData(args)
|
||||
STAT.game=STAT.game+1
|
||||
FREEROW.reset(30*#PLAYERS)
|
||||
TASK.removeTask_code(tick_showMods)
|
||||
TASK.new(tick_showMods)
|
||||
SFX.play("ready")
|
||||
if GAME.setting.allowMod then
|
||||
TASK.new(tick_showMods)
|
||||
end
|
||||
SFX.play('ready')
|
||||
collectgarbage()
|
||||
end
|
||||
end
|
||||
@@ -474,42 +485,52 @@ do--function drawFWM()
|
||||
function drawFWM()
|
||||
local t=TIME()
|
||||
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))
|
||||
end
|
||||
end
|
||||
function drawSelfProfile()
|
||||
local selfAvatar=USERS.getAvatar(USER.uid)
|
||||
gc_push("transform")
|
||||
gc_translate(1280,0)
|
||||
do--function drawSelfProfile()
|
||||
local name
|
||||
local textObject,scaleK,width,offY
|
||||
function drawSelfProfile()
|
||||
local selfAvatar=USERS.getAvatar(USER.uid)
|
||||
gc.push('transform')
|
||||
gc.translate(1280,0)
|
||||
|
||||
--Draw avatar
|
||||
gc_setLineWidth(2)
|
||||
gc_setColor(.3,.3,.3,.8)gc_rectangle("fill",-260,0,260,80)
|
||||
gc_setColor(1,1,1)gc_rectangle("line",-260,0,260,80)
|
||||
gc_rectangle("line",-73,7,66,66,2)
|
||||
gc_draw(selfAvatar,-72,8,nil,.5)
|
||||
--Draw avatar
|
||||
gc.setLineWidth(2)
|
||||
gc.setColor(.3,.3,.3,.8)gc.rectangle('fill',-300,0,300,80)
|
||||
gc.setColor(1,1,1)gc.rectangle('line',-300,0,300,80)
|
||||
gc.rectangle('line',-73,7,66,66,2)
|
||||
gc.draw(selfAvatar,-72,8,nil,.5)
|
||||
|
||||
--Draw username
|
||||
setFont(30)
|
||||
gc_printf(USERS.getUsername(USER.uid),-342,5,260,"right")
|
||||
--Draw username
|
||||
if name~=USERS.getUsername(USER.uid)then
|
||||
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.
|
||||
gc_draw(TEXTURE.lvIcon[USER.lv],-255,50)
|
||||
gc_line(-230,55,-80,55,-80,70,-230,70)
|
||||
gc_rectangle("fill",-230,55,150*USER.xp/USER.lv/USER.lv,15)
|
||||
--Draw lv. & xp.
|
||||
gc.draw(TEXTURE.lvIcon[USER.lv],-295,50)
|
||||
gc.line(-270,55,-80,55,-80,70,-270,70)
|
||||
gc.rectangle('fill',-210,55,150*USER.xp/USER.lv/USER.lv,15)
|
||||
|
||||
gc_pop()
|
||||
gc.pop()
|
||||
end
|
||||
end
|
||||
function drawWarning()
|
||||
if SETTING.warn and GAME.warnLVL>0 then
|
||||
gc_push("transform")
|
||||
gc_origin()
|
||||
gc.push('transform')
|
||||
gc.origin()
|
||||
SHADER.warning:send("level",GAME.warnLVL)
|
||||
gc_setShader(SHADER.warning)
|
||||
gc_rectangle("fill",0,0,SCR.w,SCR.h)
|
||||
gc_setShader()
|
||||
gc_pop()
|
||||
gc.setShader(SHADER.warning)
|
||||
gc.rectangle('fill',0,0,SCR.w,SCR.h)
|
||||
gc.setShader()
|
||||
gc.pop()
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
@@ -4,94 +4,94 @@ local function disableKey(P,key)
|
||||
end
|
||||
MODOPT={--Mod options
|
||||
{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},
|
||||
func=function(P,O)P.gameEnv.nextCount=O end,
|
||||
},
|
||||
{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},
|
||||
func=function(P,O)P.gameEnv.holdCount=O end,
|
||||
unranked=true,
|
||||
},
|
||||
{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},
|
||||
func=function(P,O)P.gameEnv.nextStartPos=O +1 end,
|
||||
},
|
||||
{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,
|
||||
unranked=true,
|
||||
},
|
||||
{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,
|
||||
},
|
||||
{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,
|
||||
},
|
||||
{no=6,id="HD",name="hidden",
|
||||
key="i",x=920,y=230,color="P",
|
||||
list={"easy","slow","medium","fast","none"},
|
||||
key="i",x=920,y=230,color='P',
|
||||
list={'easy','slow','medium','fast','none'},
|
||||
func=function(P,O)P.gameEnv.visible=O end,
|
||||
unranked=true,
|
||||
},
|
||||
{no=7,id="HB",name="hideBoard",
|
||||
key="o",x=1040,y=230,color="P",
|
||||
list={"down","up","all"},
|
||||
key="o",x=1040,y=230,color='P',
|
||||
list={'down','up','all'},
|
||||
func=function(P,O)P.gameEnv.hideBoard=O end,
|
||||
},
|
||||
{no=8,id="FB",name="flipBoard",
|
||||
key="p",x=1160,y=230,color="J",
|
||||
list={"U-D","L-R","180"},
|
||||
key="p",x=1160,y=230,color='J',
|
||||
list={'U-D','L-R','180'},
|
||||
func=function(P,O)P.gameEnv.flipBoard=O end,
|
||||
},
|
||||
|
||||
{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},
|
||||
func=function(P,O)P.gameEnv.drop=O end,
|
||||
unranked=true,
|
||||
},
|
||||
{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},
|
||||
func=function(P,O)P.gameEnv.lock=O end,
|
||||
unranked=true,
|
||||
},
|
||||
{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},
|
||||
func=function(P,O)P.gameEnv.wait=O end,
|
||||
unranked=true,
|
||||
},
|
||||
{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},
|
||||
func=function(P,O)P.gameEnv.fall=O end,
|
||||
unranked=true,
|
||||
},
|
||||
{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},
|
||||
func=function(P,O)P.gameEnv.life=O end,
|
||||
unranked=true,
|
||||
},
|
||||
{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,
|
||||
unranked=true,
|
||||
},
|
||||
{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,
|
||||
unranked=true,
|
||||
},
|
||||
|
||||
{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)
|
||||
P.gameEnv.das,P.gameEnv.arr=0,0
|
||||
P.gameEnv.sddas,P.gameEnv.sdarr=0,0
|
||||
@@ -99,7 +99,7 @@ MODOPT={--Mod options
|
||||
unranked=true,
|
||||
},
|
||||
{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)
|
||||
disableKey(P,3)
|
||||
disableKey(P,4)
|
||||
@@ -108,7 +108,7 @@ MODOPT={--Mod options
|
||||
unranked=true,
|
||||
},
|
||||
{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)
|
||||
disableKey(P,1)disableKey(P,2)
|
||||
disableKey(P,11)disableKey(P,12)
|
||||
@@ -118,21 +118,21 @@ MODOPT={--Mod options
|
||||
unranked=true,
|
||||
},
|
||||
{no=19,id="CS",name="customSeq",
|
||||
key="b",x=680,y=470,color="B",
|
||||
list={"bag","his4","c2","rnd","mess","reverb"},
|
||||
key="b",x=680,y=470,color='B',
|
||||
list={'bag','his4','c2','rnd','mess','reverb'},
|
||||
func=function(P,O)P.gameEnv.sequence=O end,
|
||||
unranked=true,
|
||||
},
|
||||
{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},
|
||||
func=function(P,O)P.gameEnv.pushSpeed=O end,
|
||||
unranked=true,
|
||||
},
|
||||
{no=21,id="BN",name="boneBlock",
|
||||
key="m",x=920,y=470,color="B",
|
||||
list={"on","off"},
|
||||
func=function(P,O)P.gameEnv.bone=O=="on"end,
|
||||
key="m",x=920,y=470,color='B',
|
||||
list={'on','off'},
|
||||
func=function(P,O)P.gameEnv.bone=O=='on'end,
|
||||
},
|
||||
}
|
||||
for i=1,#MODOPT do
|
||||
@@ -193,8 +193,7 @@ USER=FILE.load("conf/user")or{--User infomation
|
||||
--Local data
|
||||
xp=0,lv=1,
|
||||
}
|
||||
CUSTOMENV=FILE.load("conf/customEnv")
|
||||
if not CUSTOMENV or CUSTOMENV.version~=VERSION.code then CUSTOMENV={--gameEnv for cutsom game
|
||||
customEnv0={
|
||||
version=VERSION.code,
|
||||
|
||||
--Basic
|
||||
@@ -213,7 +212,7 @@ if not CUSTOMENV or CUSTOMENV.version~=VERSION.code then CUSTOMENV={--gameEnv fo
|
||||
bone=false,
|
||||
|
||||
--Rule
|
||||
sequence="bag",
|
||||
sequence='bag',
|
||||
fieldH=20,
|
||||
|
||||
ospin=true,
|
||||
@@ -221,7 +220,7 @@ if not CUSTOMENV or CUSTOMENV.version~=VERSION.code then CUSTOMENV={--gameEnv fo
|
||||
b2bKill=false,
|
||||
easyFresh=true,
|
||||
deepDrop=false,
|
||||
visible="show",
|
||||
visible='show',
|
||||
freshLimit=1e99,
|
||||
|
||||
|
||||
@@ -231,15 +230,17 @@ if not CUSTOMENV or CUSTOMENV.version~=VERSION.code then CUSTOMENV={--gameEnv fo
|
||||
missionKill=false,
|
||||
|
||||
--Else
|
||||
bg="none",
|
||||
bgm="infinite",
|
||||
}end
|
||||
bg='blockfall',
|
||||
bgm='infinite',
|
||||
}
|
||||
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
|
||||
--Tuning
|
||||
das=10,arr=2,dascut=0,
|
||||
sddas=0,sdarr=2,
|
||||
ihs=true,irs=true,ims=true,
|
||||
RS="TRS",
|
||||
RS='TRS',
|
||||
swap=true,
|
||||
|
||||
--System
|
||||
@@ -291,7 +292,7 @@ SETTING={--Settings
|
||||
stereo=.7,
|
||||
vib=0,
|
||||
voc=0,
|
||||
cv="miya",
|
||||
cv='miya',
|
||||
|
||||
--Virtualkey
|
||||
VKSFX=.2,--SFX volume
|
||||
@@ -320,7 +321,7 @@ else
|
||||
send=0,recv=0,pend=0,off=0,
|
||||
clear={},spin={},
|
||||
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,
|
||||
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
|
||||
|
||||
@@ -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}
|
||||
function pushZero(t)
|
||||
for _,L in next,t do
|
||||
if type(L)=="table"then
|
||||
if type(L)=='table'then
|
||||
for _,v in next,L do
|
||||
if not v[1]or v[1][1]~=0 or v[1][2]~=0 then
|
||||
table.insert(v,1,map[0][0])
|
||||
@@ -26,9 +26,9 @@ end
|
||||
|
||||
--Make all vec point to the same vec
|
||||
local function collectSet(set)
|
||||
if type(set)~="table"then return end
|
||||
if type(set)~='table'then return end
|
||||
for _,list in next,set do
|
||||
if type(list[1])=="string"then
|
||||
if type(list[1])=='string'then
|
||||
vecStrConv(list)
|
||||
end
|
||||
end
|
||||
@@ -52,20 +52,20 @@ local function flipList(O)
|
||||
end
|
||||
|
||||
local function reflect(a)
|
||||
local b={}
|
||||
b[03]=flipList(a[01])
|
||||
b[01]=flipList(a[03])
|
||||
b[30]=flipList(a[10])
|
||||
b[32]=flipList(a[12])
|
||||
b[23]=flipList(a[21])
|
||||
b[21]=flipList(a[23])
|
||||
b[10]=flipList(a[30])
|
||||
b[12]=flipList(a[32])
|
||||
b[02]=flipList(a[02])
|
||||
b[20]=flipList(a[20])
|
||||
b[31]=flipList(a[13])
|
||||
b[13]=flipList(a[31])
|
||||
return b
|
||||
return{
|
||||
[03]=flipList(a[01]),
|
||||
[01]=flipList(a[03]),
|
||||
[30]=flipList(a[10]),
|
||||
[32]=flipList(a[12]),
|
||||
[23]=flipList(a[21]),
|
||||
[21]=flipList(a[23]),
|
||||
[10]=flipList(a[30]),
|
||||
[12]=flipList(a[32]),
|
||||
[02]=flipList(a[02]),
|
||||
[20]=flipList(a[20]),
|
||||
[31]=flipList(a[13]),
|
||||
[13]=flipList(a[31]),
|
||||
}
|
||||
end
|
||||
|
||||
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
|
||||
{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
|
||||
{331,3,2, 0,-1,0},{113,3,0, 0, 0,0},{113,3,2,-1, 0,0},--J
|
||||
{113,4,2,-1,-1,0},{331,4,0,-1, 0,0},{331,4,2, 0, 0,0},--L
|
||||
{222,7,2,-1, 0,1},{222,7,2,-2, 0,1},{222,7,2, 0, 0,1},--I
|
||||
{331,3,2, 0,-1,0},--J(farDown)
|
||||
{113,4,2,-1,-1,0},--L(farDown)
|
||||
{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
|
||||
{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={
|
||||
{{ 1,-1},{ 1, 0},{ 1, 1},{ 1,-2},{ 1, 2}},
|
||||
{{ 0,-1},{ 0,-2},{ 0, 1},{ 0,-2},{ 0, 2}},
|
||||
@@ -133,12 +136,12 @@ do
|
||||
},--T
|
||||
function(P,d)
|
||||
if P.gameEnv.easyFresh then
|
||||
P:freshBlock("fresh")
|
||||
P:freshBlock('fresh')
|
||||
end
|
||||
if P.gameEnv.ospin then
|
||||
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 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
|
||||
if P.spinSeq<100 then return end
|
||||
for i=1,#OspinList do
|
||||
@@ -147,7 +150,13 @@ do
|
||||
local id,dir=L[2],L[3]
|
||||
local bk=BLOCKS[id][dir]
|
||||
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
|
||||
C.id=id
|
||||
C.bk=bk
|
||||
@@ -155,18 +164,18 @@ do
|
||||
P.cur.dir,P.cur.sc=dir,SCS[id][dir]
|
||||
P.spinLast=2
|
||||
P.stat.rotate=P.stat.rotate+1
|
||||
P:freshBlock("move")
|
||||
P:freshBlock('move')
|
||||
P.spinSeq=0
|
||||
return
|
||||
end
|
||||
end
|
||||
end
|
||||
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
|
||||
end
|
||||
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,--O
|
||||
{
|
||||
@@ -277,19 +286,19 @@ do
|
||||
[31]={"+0-1","+1+0"},
|
||||
},--W
|
||||
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]
|
||||
for test=1,#kickData do
|
||||
local x,y=P.curX+kickData[test][1],P.curY+kickData[test][2]
|
||||
if not P:ifoverlap(P.cur.bk,x,y)then
|
||||
P.curX,P.curY=x,y
|
||||
P.spinLast=1
|
||||
P:freshBlock("move")
|
||||
P:freshBlock('move')
|
||||
P.stat.rotate=P.stat.rotate+1
|
||||
return
|
||||
end
|
||||
end
|
||||
P:freshBlock("fresh")
|
||||
P:freshBlock('fresh')
|
||||
end,--X
|
||||
{
|
||||
[01]={"-1+0","-1+1","+0-3","-1+1","-1+2","+0+1"},
|
||||
|
||||
@@ -786,6 +786,28 @@ return{
|
||||
"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
|
||||
{"SFX",
|
||||
"sfx soundeffects",
|
||||
|
||||
@@ -795,6 +795,28 @@ return{
|
||||
"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",
|
||||
@@ -902,7 +924,7 @@ return{
|
||||
{"MrZ",
|
||||
"mrz zjiang ddd 026 t626",
|
||||
"name",
|
||||
"【研究群】「T026」\n40行25.95秒, MPH40行57秒排世界第8(jstris),tetr.io段位U,top数据约40L50A TGM3(W)shirase金1300通关\n这个游戏的作者!",
|
||||
"【研究群】「T026」\n40行25.95秒, MPH40行57秒排世界第8(jstris),tetr.io段位U,top数据约50L60A TGM3(W)shirase金1300通关\n这个游戏的作者!",
|
||||
"https://space.bilibili.com/225238922",
|
||||
},
|
||||
|
||||
|
||||
@@ -98,8 +98,7 @@ return{
|
||||
started="Playing",
|
||||
joinRoom="has joined the room.",
|
||||
leaveRoom="has left the room.",
|
||||
notReady="Waiting",
|
||||
beReady="Ready",
|
||||
ready="READY",
|
||||
champion="$1 won",
|
||||
chatRemain="Online: ",
|
||||
chatStart="------Beginning of log------",
|
||||
@@ -255,8 +254,6 @@ return{
|
||||
new="New Room(2)",
|
||||
new2="New Room(5)",
|
||||
join="Join",
|
||||
up="↑",
|
||||
down="↓",
|
||||
},
|
||||
net_game={
|
||||
ready="Ready",
|
||||
@@ -276,6 +273,7 @@ return{
|
||||
reTime="Start Delay",
|
||||
RS="Rotation System",
|
||||
layout="Layout",
|
||||
dataSaving="Data saving",
|
||||
autoPause="Pause while unfocused",
|
||||
swap="Key Combination (Change Atk. Mode)",
|
||||
fine="Finesse Error SFX",
|
||||
@@ -416,8 +414,9 @@ return{
|
||||
clear="Start-Clear",
|
||||
puzzle="Start-Puzzle",
|
||||
|
||||
reset="Reset (Del)",
|
||||
advance="More (A)",
|
||||
mod="Mods",
|
||||
mod="Mods (F1)",
|
||||
field="Edit Field (F)",
|
||||
sequence="Edit Sequence (S)",
|
||||
mission="Edit Mission (M)",
|
||||
@@ -450,20 +449,20 @@ return{
|
||||
|
||||
any="Erase",
|
||||
space="×",
|
||||
smartPen="Smart",
|
||||
smart="Smart",
|
||||
|
||||
pushLine="Add Line(K)",
|
||||
delLine="Del Line(L)",
|
||||
push="Add Line(K)",
|
||||
del="Del Line(L)",
|
||||
|
||||
copy="Copy",
|
||||
paste="Paste",
|
||||
clear="Clear",
|
||||
demo="Don't Show ×",
|
||||
|
||||
newPage="New Page(N)",
|
||||
delPage="Del Page(M)",
|
||||
prevPage="Prev Page",
|
||||
nextPage="Next Page",
|
||||
newPg="New Page(N)",
|
||||
delPg="Del Page(M)",
|
||||
prevPg="Prev Page",
|
||||
nextPg="Next Page",
|
||||
},
|
||||
custom_sequence={
|
||||
title="Custom Game",
|
||||
@@ -659,109 +658,104 @@ return{
|
||||
importData="Import Stats",
|
||||
importSetting="Import Settings",
|
||||
importVK="Import Virtual Key Layout",
|
||||
|
||||
reset="Reset?",
|
||||
resetUnlock="Reset Ranks",
|
||||
resetRecord="Reset Records",
|
||||
resetData="Reset Data",
|
||||
},
|
||||
error={
|
||||
cmd="Console",
|
||||
console="Console",
|
||||
quit="Quit",
|
||||
},
|
||||
},
|
||||
modes={
|
||||
["sprint_10l"]= {"Sprint", "10L", "Clear 10 lines!"},
|
||||
["sprint_20l"]= {"Sprint", "20L", "Clear 20 lines!"},
|
||||
["sprint_40l"]= {"Sprint", "40L", "Clear 40 lines!"},
|
||||
["sprint_100l"]= {"Sprint", "100L", "Clear 100 lines!"},
|
||||
["sprint_400l"]= {"Sprint", "400L", "Clear 400 lines!"},
|
||||
["sprint_1000l"]= {"Sprint", "1000L", "Clear 1000 lines!"},
|
||||
["sprintPenta"]= {"Sprint", "PENTOMINO", "40L with 18 pentominoes."},
|
||||
["sprintMPH"]= {"Sprint", "MPH", "Memoryless\nPreviewless\nHoldless"},
|
||||
["dig_10l"]= {"Dig", "10L", "Dig 10 garbage lines."},
|
||||
["dig_40l"]= {"Dig", "40L", "Dig 40 garbage lines."},
|
||||
["dig_100l"]= {"Dig", "100L", "Dig 100 garbage lines."},
|
||||
["dig_400l"]= {"Dig", "400L", "Dig 400 garbage lines."},
|
||||
["dig_1000l"]= {"Dig", "1000L", "Dig 1000 garbage lines."},
|
||||
["drought_n"]= {"Drought", "100L", "There are no I-pieces."},
|
||||
["drought_l"]= {"Drought", "100L", "W T F"},
|
||||
["marathon_n"]= {"Marathon", "NORMAL", "200-line marathon with accelerating speed."},
|
||||
["marathon_h"]= {"Marathon", "HARD", "200-line high-speed marathon."},
|
||||
["solo_e"]= {"Battle", "EASY", "Defeat the AI!"},
|
||||
["solo_n"]= {"Battle", "NORMAL", "Defeat the AI!"},
|
||||
["solo_h"]= {"Battle", "HARD", "Defeat the AI!"},
|
||||
["solo_l"]= {"Battle", "LUNATIC", "Defeat the AI!"},
|
||||
["solo_u"]= {"Battle", "ULTIMATE", "Defeat the AI!"},
|
||||
["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_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_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."},
|
||||
["round_e"]= {"Turn-Based", "EASY", "Chess mode"},
|
||||
["round_n"]= {"Turn-Based", "NORMAL", "Chess mode"},
|
||||
["round_h"]= {"Turn-Based", "HARD", "Chess mode"},
|
||||
["round_l"]= {"Turn-Based", "LUNATIC", "Chess mode"},
|
||||
["round_u"]= {"Turn-Based", "ULTIMATE", "Chess mode"},
|
||||
["master_beginner"]= {"Master", "LUNATIC", "For 20G beginners."},
|
||||
["master_advance"]= {"Master", "ULTIMATE", "For 20G pros."},
|
||||
["master_final"]= {"Master", "FINAL", "20G and beyond."},
|
||||
["master_phantasm"]= {"Master", "PHANTASM", "???"},
|
||||
["master_extra"]= {"GrandMaster", "EXTRA", "An eternity shorter than an instant."},
|
||||
["rhythm_e"]= {"Rhythm", "EASY", "200-line low-BPM rhythm marathon."},
|
||||
["rhythm_h"]= {"Rhythm", "HARD", "200-line medium BPM rhythm marathon"},
|
||||
["rhythm_u"]= {"Rhythm", "ULTIMATE", "200-line high-BPM rhythm marathon."},
|
||||
["blind_e"]= {"Blind", "HALF", "For novices."},
|
||||
["blind_n"]= {"Blind", "ALL", "For intermediates."},
|
||||
["blind_h"]= {"Blind", "SUDDEN", "For the experienced."},
|
||||
["blind_l"]= {"Blind", "SUDDEN+", "For professionals."},
|
||||
["blind_u"]= {"Blind", "?", "Are you ready?"},
|
||||
["blind_wtf"]= {"Blind", "WTF", "You're not ready."},
|
||||
["classic_fast"]= {"Classic", "CTWC", "High-speed classic mode."},
|
||||
["survivor_e"]= {"Survivor", "EASY", "How long can you survive?"},
|
||||
["survivor_n"]= {"Survivor", "NORMAL", "How long can you survive?"},
|
||||
["survivor_h"]= {"Survivor", "HARD", "How long can you survive?"},
|
||||
["survivor_l"]= {"Survivor", "LUNATIC", "How long can you survive?"},
|
||||
["survivor_u"]= {"Survivor", "ULTIMATE", "How long can you survive?"},
|
||||
["attacker_h"]= {"Attacker", "HARD", "Practice Offense!"},
|
||||
["attacker_u"]= {"Attacker", "ULTIMATE", "Practice Offense!"},
|
||||
["defender_n"]= {"Defender", "NORMAL", "Practice Defense!"},
|
||||
["defender_l"]= {"Defender", "LUNATIC", "Practice Defense!"},
|
||||
["dig_h"]= {"Driller", "HARD", "Digging practice!"},
|
||||
["dig_u"]= {"Driller", "ULTIMATE", "Digging practice!"},
|
||||
["bigbang"]= {"Big Bang", "EASY", "All-spin tutorial!\n[Under construction]"},
|
||||
["c4wtrain_n"]= {"C4W Training", "NORMAL", "Infinite combos."},
|
||||
["c4wtrain_l"]= {"C4W Training", "LUNATIC", "Infinite combos."},
|
||||
["pctrain_n"]= {"PC Training", "NORMAL", "Perfect Clear Practice."},
|
||||
["pctrain_l"]= {"PC Training", "LUNATIC", "Harder Perfect Clear Practice."},
|
||||
["pc_n"]= {"PC Challenge", "NORMAL", "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!"},
|
||||
["tech_n"]= {"Tech", "NORMAL", "Try to keep the\nBack-to-Back chain!"},
|
||||
["tech_n_plus"]= {"Tech", "NORMAL+", "Spins & PCs only."},
|
||||
["tech_h"]= {"Tech", "HARD", "Try to keep the\nBack-to-Back chain!"},
|
||||
["tech_h_plus"]= {"Tech", "HARD+", "Spins & PCs only."},
|
||||
["tech_l"]= {"Tech", "LUNATIC", "Try to keep the\nBack-to-Back chain!"},
|
||||
["tech_l_plus"]= {"Tech", "LUNATIC+", "Spins & PCs only."},
|
||||
["tech_finesse"]= {"Tech", "FINESSE", "No finesse faults!"},
|
||||
["tech_finesse_f"]= {"Tech", "FINESSE+", "No normal clears and finesse faults!"},
|
||||
["tsd_e"]= {"TSD Challenge", "EASY", "T-Spin Doubles only!"},
|
||||
["tsd_h"]= {"TSD Challenge", "HARD", "T-Spin Doubles only!"},
|
||||
["tsd_u"]= {"TSD Challenge", "ULTIMATE", "T-Spin Doubles only!"},
|
||||
["backfire_n"]= {"Backfire", "NORMAL", "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_u"]= {"Backfire", "ULTIMATE", "Hold back the backfiring garbage lines."},
|
||||
["zen"]= {"Zen", "200", "A 200-line run without a time limit."},
|
||||
["ultra"]= {"Ultra", "EXTRA", "A 2-minute score attack."},
|
||||
["infinite"]= {"Infinite", "", "It's just a sandbox."},
|
||||
["infinite_dig"]= {"Infinite: Dig", "", "Dig-diggi-dug."},
|
||||
["sprintFix"]= {"Sprint", "NO LEFT/RIGHT"},
|
||||
["sprintLock"]= {"Sprint", "NO ROTATIONS"},
|
||||
["marathon_bfmax"]= {"Marathon", "ULTIMATE"},
|
||||
["custom_clear"]= {"Custom", "NORMAL"},
|
||||
["custom_puzzle"]= {"Custom", "PUZZLE"},
|
||||
['sprint_10l']= {"Sprint", "10L", "Clear 10 lines!"},
|
||||
['sprint_20l']= {"Sprint", "20L", "Clear 20 lines!"},
|
||||
['sprint_40l']= {"Sprint", "40L", "Clear 40 lines!"},
|
||||
['sprint_100l']= {"Sprint", "100L", "Clear 100 lines!"},
|
||||
['sprint_400l']= {"Sprint", "400L", "Clear 400 lines!"},
|
||||
['sprint_1000l']= {"Sprint", "1000L", "Clear 1000 lines!"},
|
||||
['sprintPenta']= {"Sprint", "PENTOMINO", "40L with 18 pentominoes."},
|
||||
['sprintMPH']= {"Sprint", "MPH", "Memoryless\nPreviewless\nHoldless"},
|
||||
['dig_10l']= {"Dig", "10L", "Dig 10 garbage lines."},
|
||||
['dig_40l']= {"Dig", "40L", "Dig 40 garbage lines."},
|
||||
['dig_100l']= {"Dig", "100L", "Dig 100 garbage lines."},
|
||||
['dig_400l']= {"Dig", "400L", "Dig 400 garbage lines."},
|
||||
['dig_1000l']= {"Dig", "1000L", "Dig 1000 garbage lines."},
|
||||
['drought_n']= {"Drought", "100L", "There are no I-pieces."},
|
||||
['drought_l']= {"Drought", "100L", "W T F"},
|
||||
['marathon_n']= {"Marathon", "NORMAL", "200-line marathon with accelerating speed."},
|
||||
['marathon_h']= {"Marathon", "HARD", "200-line high-speed marathon."},
|
||||
['solo_e']= {"Battle", "EASY", "Defeat the AI!"},
|
||||
['solo_n']= {"Battle", "NORMAL", "Defeat the AI!"},
|
||||
['solo_h']= {"Battle", "HARD", "Defeat the AI!"},
|
||||
['solo_l']= {"Battle", "LUNATIC", "Defeat the AI!"},
|
||||
['solo_u']= {"Battle", "ULTIMATE", "Defeat the AI!"},
|
||||
['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_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_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."},
|
||||
['round_e']= {"Turn-Based", "EASY", "Chess mode"},
|
||||
['round_n']= {"Turn-Based", "NORMAL", "Chess mode"},
|
||||
['round_h']= {"Turn-Based", "HARD", "Chess mode"},
|
||||
['round_l']= {"Turn-Based", "LUNATIC", "Chess mode"},
|
||||
['round_u']= {"Turn-Based", "ULTIMATE", "Chess mode"},
|
||||
['master_beginner']= {"Master", "LUNATIC", "For 20G beginners."},
|
||||
['master_advance']= {"Master", "ULTIMATE", "For 20G pros."},
|
||||
['master_final']= {"Master", "FINAL", "20G and beyond."},
|
||||
['master_phantasm']= {"Master", "PHANTASM", "???"},
|
||||
['master_extra']= {"GrandMaster", "EXTRA", "An eternity shorter than an instant."},
|
||||
['rhythm_e']= {"Rhythm", "EASY", "200-line low-BPM rhythm marathon."},
|
||||
['rhythm_h']= {"Rhythm", "HARD", "200-line medium BPM rhythm marathon"},
|
||||
['rhythm_u']= {"Rhythm", "ULTIMATE", "200-line high-BPM rhythm marathon."},
|
||||
['blind_e']= {"Blind", "HALF", "For novices."},
|
||||
['blind_n']= {"Blind", "ALL", "For intermediates."},
|
||||
['blind_h']= {"Blind", "SUDDEN", "For the experienced."},
|
||||
['blind_l']= {"Blind", "SUDDEN+", "For professionals."},
|
||||
['blind_u']= {"Blind", "?", "Are you ready?"},
|
||||
['blind_wtf']= {"Blind", "WTF", "You're not ready."},
|
||||
['classic_fast']= {"Classic", "CTWC", "High-speed classic mode."},
|
||||
['survivor_e']= {"Survivor", "EASY", "How long can you survive?"},
|
||||
['survivor_n']= {"Survivor", "NORMAL", "How long can you survive?"},
|
||||
['survivor_h']= {"Survivor", "HARD", "How long can you survive?"},
|
||||
['survivor_l']= {"Survivor", "LUNATIC", "How long can you survive?"},
|
||||
['survivor_u']= {"Survivor", "ULTIMATE", "How long can you survive?"},
|
||||
['attacker_h']= {"Attacker", "HARD", "Practice Offense!"},
|
||||
['attacker_u']= {"Attacker", "ULTIMATE", "Practice Offense!"},
|
||||
['defender_n']= {"Defender", "NORMAL", "Practice Defense!"},
|
||||
['defender_l']= {"Defender", "LUNATIC", "Practice Defense!"},
|
||||
['dig_h']= {"Driller", "HARD", "Digging practice!"},
|
||||
['dig_u']= {"Driller", "ULTIMATE", "Digging practice!"},
|
||||
['bigbang']= {"Big Bang", "EASY", "All-spin tutorial!\n[Under construction]"},
|
||||
['c4wtrain_n']= {"C4W Training", "NORMAL", "Infinite combos."},
|
||||
['c4wtrain_l']= {"C4W Training", "LUNATIC", "Infinite combos."},
|
||||
['pctrain_n']= {"PC Training", "NORMAL", "Perfect Clear Practice."},
|
||||
['pctrain_l']= {"PC Training", "LUNATIC", "Harder Perfect Clear Practice."},
|
||||
['pc_n']= {"PC Challenge", "NORMAL", "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!"},
|
||||
['tech_n']= {"Tech", "NORMAL", "Try to keep the\nBack-to-Back chain!"},
|
||||
['tech_n_plus']= {"Tech", "NORMAL+", "Spins & PCs only."},
|
||||
['tech_h']= {"Tech", "HARD", "Try to keep the\nBack-to-Back chain!"},
|
||||
['tech_h_plus']= {"Tech", "HARD+", "Spins & PCs only."},
|
||||
['tech_l']= {"Tech", "LUNATIC", "Try to keep the\nBack-to-Back chain!"},
|
||||
['tech_l_plus']= {"Tech", "LUNATIC+", "Spins & PCs only."},
|
||||
['tech_finesse']= {"Tech", "FINESSE", "No finesse faults!"},
|
||||
['tech_finesse_f']= {"Tech", "FINESSE+", "No normal clears and finesse faults!"},
|
||||
['tsd_e']= {"TSD Challenge", "EASY", "T-Spin Doubles only!"},
|
||||
['tsd_h']= {"TSD Challenge", "HARD", "T-Spin Doubles only!"},
|
||||
['tsd_u']= {"TSD Challenge", "ULTIMATE", "T-Spin Doubles only!"},
|
||||
['backfire_n']= {"Backfire", "NORMAL", "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_u']= {"Backfire", "ULTIMATE", "Hold back the backfiring garbage lines."},
|
||||
['zen']= {'Zen', "200", "A 200-line run without a time limit."},
|
||||
['ultra']= {'Ultra', "EXTRA", "A 2-minute score attack."},
|
||||
['infinite']= {'infinite', "", "It's just a sandbox."},
|
||||
['infinite_dig']= {"Infinite: Dig", "", "Dig-diggi-dug."},
|
||||
['sprintFix']= {"Sprint", "NO LEFT/RIGHT"},
|
||||
['sprintLock']= {"Sprint", "NO ROTATIONS"},
|
||||
['marathon_bfmax']= {"Marathon", "ULTIMATE"},
|
||||
['custom_clear']= {"Custom", "NORMAL"},
|
||||
['custom_puzzle']= {"Custom", "PUZZLE"},
|
||||
},
|
||||
getTip={refuseCopy=true,
|
||||
'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,"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.Z,"What is an ",C.lC,"X-Spin?"},
|
||||
{C.Z,"What? ",C.lC,"Xspin?"},
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -99,8 +99,7 @@ return{
|
||||
-- started="Playing",
|
||||
joinRoom="a rejoint le salon.",
|
||||
leaveRoom="a quitté le salon.",
|
||||
notReady="Attente",
|
||||
beReady="Prêt",
|
||||
-- ready="READY",
|
||||
champion="$1 a gagné",
|
||||
chatRemain="En ligne : ",
|
||||
chatStart="--------Début des logs--------",
|
||||
@@ -226,8 +225,6 @@ return{
|
||||
noRoom="Aucun salon actuellement",
|
||||
-- refresh="Refresh",
|
||||
join="Rejoindre",
|
||||
up="↑",
|
||||
down="↓",
|
||||
},
|
||||
net_game={
|
||||
-- ready="Ready",
|
||||
@@ -248,6 +245,7 @@ return{
|
||||
reTime="Délai de démarrage",
|
||||
RS="Système de rotation",
|
||||
layout="Disposition",
|
||||
-- dataSaving="Data saving",
|
||||
autoPause="Mettre en pause en cas de perte de focus",
|
||||
swap="Combinaison de touches (changer le mode d'attaque)",
|
||||
fine="Son d'erreur de Finesse",
|
||||
@@ -389,8 +387,9 @@ return{
|
||||
clear="Démarrer Clear",
|
||||
puzzle="Démarrer Puzzle",
|
||||
|
||||
-- reset="Reset (Del)",
|
||||
advance="Plus (A)",
|
||||
mod="Mods",
|
||||
mod="Mods (F1)",
|
||||
field="Modifier la matrice (F)",
|
||||
sequence="Modifier la séquence (S)",
|
||||
mission="Modifier la mission(M)",
|
||||
@@ -423,20 +422,20 @@ return{
|
||||
|
||||
any="Effacer",
|
||||
space="×",
|
||||
-- smartPen="Smart",
|
||||
-- smart="Smart",
|
||||
|
||||
pushLine="Ajouter ligne (K)",
|
||||
delLine="Supprimer ligne (L)",
|
||||
push="Ajouter ligne (K)",
|
||||
del="Supprimer ligne (L)",
|
||||
|
||||
copy="Copier",
|
||||
paste="Coller",
|
||||
clear="Nettoyer",
|
||||
demo="Masquer les ×",
|
||||
|
||||
newPage="Nouvelle Page(N)",
|
||||
delPage="Supp. Page(M)",
|
||||
prevPage="Page Préc.",
|
||||
nextPage="Page Suiv.",
|
||||
newPg="Nouvelle Page(N)",
|
||||
delPg="Supp. Page(M)",
|
||||
prevPg="Page Préc.",
|
||||
nextPg="Page Suiv.",
|
||||
},
|
||||
custom_sequence={
|
||||
title="Mode personnalisée",
|
||||
@@ -571,108 +570,103 @@ return{
|
||||
importData="Importer les Données",
|
||||
importSetting="Importer les Paramètres",
|
||||
importVK="Importer VK",
|
||||
|
||||
reset="Réinitialiser ?",
|
||||
resetUnlock="Réinitialiser les rangs",
|
||||
resetRecord="Réinitialiser les records",
|
||||
resetData="Réinitialiser les données",
|
||||
},
|
||||
error={
|
||||
cmd="Console",
|
||||
console="Console",
|
||||
quit="Quit",
|
||||
},
|
||||
},
|
||||
modes={
|
||||
["sprint_10l"]= {"Sprint", "10L", "Nettoyez 10 lignes !"},
|
||||
["sprint_20l"]= {"Sprint", "20L", "Nettoyez 20 lignes !"},
|
||||
["sprint_40l"]= {"Sprint", "40L", "Nettoyez 40 lignes !"},
|
||||
["sprint_100l"]= {"Sprint", "100L", "Nettoyez 100 lignes !"},
|
||||
["sprint_400l"]= {"Sprint", "400L", "Nettoyez 400 lignes !"},
|
||||
["sprint_1000l"]= {"Sprint", "1000L", "Nettoyez 1000 lignes !"},
|
||||
["sprintPenta"]= {"Sprint", "Pentomino", "40 lignes avec 18 pentominos."},
|
||||
["sprintMPH"]= {"Sprint", "MPH", "Memoryless\nPreviewless\nHoldless"},
|
||||
["dig_10l"]= {"Dig", "10L", "Creusez 10 lines"},
|
||||
["dig_40l"]= {"Dig", "40L", "Creusez 40 lines"},
|
||||
["dig_100l"]= {"Dig", "100L", "Creusez 100 lines"},
|
||||
["dig_400l"]= {"Dig", "400L", "Creusez 400 lines"},
|
||||
["dig_1000l"]= {"Dig", "1000L", "Creusez 1000 lines"},
|
||||
["drought_n"]= {"Drought", "100L", "Pas de pièce I !"},
|
||||
["drought_l"]= {"Drought", "100L", "WTF ??!!"},
|
||||
["marathon_n"]= {"Marathon", "NORMAL", "Marathon de 200 lignes."},
|
||||
["marathon_h"]= {"Marathon", "DIFFICILE", "Marathon de 200 lignes à très haute vitesse"},
|
||||
["solo_e"]= {"Battle", "FACILE", "Battez l'IA !"},
|
||||
["solo_n"]= {"Battle", "NORMAL", "Battez l'IA !"},
|
||||
["solo_h"]= {"Battle", "DIFFICILE", "Battez l'IA !"},
|
||||
["solo_l"]= {"Battle", "LUNATIQUE", "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_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."},
|
||||
["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_u"]= {"Tech 99", "ULTIMe", "Bataille de 99 joueurs.\nLe dernier en vie gagne."},
|
||||
["round_e"]= {"Tour à tour", "FACILE", "Mode échecs"},
|
||||
["round_n"]= {"Tour à tour", "NORMAL", "Mode échecs"},
|
||||
["round_h"]= {"Tour à tour", "DIFFICILE", "Mode échecs"},
|
||||
["round_l"]= {"Tour à tour", "LUNATIQUE", "Mode échecs"},
|
||||
["round_u"]= {"Tour à tour", "ULTIME", "Mode échecs"},
|
||||
["master_beginner"]= {"Master", "LUNATIQUE", "Pour les débutants en 20G."},
|
||||
["master_advance"]= {"Master", "ULTIME", "Challenge 20G pro !"},
|
||||
["master_final"]= {"Master", "FINAL", "20G : Un point final impossible à atteindre !"},
|
||||
-- ["master_phantasm"]= {"Mester", "FANTASMA", "20G: ???"},
|
||||
["master_extra"]= {"GrandMaster", "EXTRA", "Tentez de devenir un Grandmaster."},
|
||||
-- ["rhythm_e"]= {"Rhythm", "EASY", "200-line low-bpm rhythm marathon."},
|
||||
-- ["rhythm_h"]= {"Rhythm", "HARD", "200-line medium-bpm rhythm marathon"},
|
||||
-- ["rhythm_u"]= {"Rhythm", "ULTIMATE", "200-line high-bpm rhythm marathon."},
|
||||
["blind_e"]= {"Aveugle", "MOITIE", "Pour les novices."},
|
||||
["blind_n"]= {"Aveugle", "TOUT", "Pour les joueurs intermédiaires."},
|
||||
["blind_h"]= {"Aveugle", "SOUDAIN", "Pour les bons jooeurs."},
|
||||
["blind_l"]= {"Aveugle", "SOUDAIN+", "Pour les pros."},
|
||||
["blind_u"]= {"Aveugle", "?", "Êtes-vous prêt ?"},
|
||||
["blind_wtf"]= {"Aveugle", "WTF", "Vous n'êtes pas prêt."},
|
||||
["classic_fast"]= {"Classic", "CTWC", "Un mode classique rapide."},
|
||||
["survivor_e"]= {"Survivor", "FACILE", "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_l"]= {"Survivor", "LUNATIQUE", "Pendant combien de temps survivrez-vous ?"},
|
||||
["survivor_u"]= {"Survivor", "ULTIME", "Pendant combien de temps survivrez-vous ?"},
|
||||
["attacker_h"]= {"Attaquant", "DIFFICILE", "Soyez offensifs !"},
|
||||
["attacker_u"]= {"Attaquant", "ULTIME", "Soyez offensifs !"},
|
||||
["defender_n"]= {"Défendant", "NORMAL", "Soyez défensifs !"},
|
||||
["defender_l"]= {"Défendant", "LUNATIQUE", "Soyez défensifs !"},
|
||||
["dig_h"]= {"Perceuse", "DIFFICILE", "Essayez de creuser !"},
|
||||
["dig_u"]= {"Perceuse", "ULTIME", "Essayez de creuser !"},
|
||||
["bigbang"]= {"Big Bang", "FACILE", "Tutoriel All-Spin\nEn construction..."},
|
||||
["c4wtrain_n"]= {"Mode essai C4W", "NORMAL", "Combos infinis."},
|
||||
["c4wtrain_l"]= {"Mode essai C4W", "LUNATIQUE", "Combos infinis."},
|
||||
["pctrain_n"]= {"Mode essai PC", "NORMAL", "Mode Perfect Clear simple"},
|
||||
["pctrain_l"]= {"Mode essai PC", "LUNATIQUE", "Mode Perfect Clear dur"},
|
||||
["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_l"]= {"PC Challenge", "LUNATIQUE", "Obtenez un PC dans les prochaines 100 lignes !"},
|
||||
["tech_n"]= {"Tech", "NORMAL", "Gardez le B2B !"},
|
||||
["tech_n_plus"]= {"Tech", "NORMAL+", "Spin & PC uniquement"},
|
||||
["tech_h"]= {"Tech", "DIFFICILE", "Gardez le B2B !"},
|
||||
["tech_h_plus"]= {"Tech", "HARD+", "Spin & PC uniquement"},
|
||||
["tech_l"]= {"Tech", "LUNATIQUE", "Gardez le B2B !"},
|
||||
["tech_l_plus"]= {"Tech", "LUNATIQUE+", "Spin & PC uniquement"},
|
||||
["tech_finesse"]= {"Tech", "FINESSE", "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_h"]= {"TSD Challenge", "DIFFICILE", "T-spin doubles uniquement !"},
|
||||
["tsd_u"]= {"TSD Challenge", "ULTIME", "T-spin doubles uniquement !"},
|
||||
-- ["backfire_n"]= {"Backfire", "NORMAL", "Self-send garbages"},
|
||||
-- ["backfire_h"]= {"Backfire", "HARD", "Self-send garbages"},
|
||||
-- ["backfire_l"]= {"Backfire", "LUNATIC", "Self-send garbages"},
|
||||
-- ["backfire_u"]= {"Backfire", "ULTIMATE", "Self-send garbages"},
|
||||
["zen"]= {"Zen", "200", "200 lignes sans limites de temps."},
|
||||
["ultra"]= {"Ultra", "EXTRA", "2 minutes pour avoir le meilleur score."},
|
||||
["infinite"]= {"Infini", "", "Mode tranquile."},
|
||||
["infinite_dig"]= {"Infini : Dig", "", "Creuser, creuser, creuser."},
|
||||
["sprintFix"]= {"Sprint", "Sans gauche/droite"},
|
||||
["sprintLock"]= {"Sprint", "Sans rotation"},
|
||||
["marathon_bfmax"]= {"Marathon", "ULTIME"},
|
||||
["custom_clear"]= {"Perso.", "NORMAL"},
|
||||
["custom_puzzle"]= {"Perso.", "PUZZLE"},
|
||||
['sprint_10l']= {"Sprint", "10L", "Nettoyez 10 lignes !"},
|
||||
['sprint_20l']= {"Sprint", "20L", "Nettoyez 20 lignes !"},
|
||||
['sprint_40l']= {"Sprint", "40L", "Nettoyez 40 lignes !"},
|
||||
['sprint_100l']= {"Sprint", "100L", "Nettoyez 100 lignes !"},
|
||||
['sprint_400l']= {"Sprint", "400L", "Nettoyez 400 lignes !"},
|
||||
['sprint_1000l']= {"Sprint", "1000L", "Nettoyez 1000 lignes !"},
|
||||
['sprintPenta']= {"Sprint", "Pentomino", "40 lignes avec 18 pentominos."},
|
||||
['sprintMPH']= {"Sprint", "MPH", "Memoryless\nPreviewless\nHoldless"},
|
||||
['dig_10l']= {"Dig", "10L", "Creusez 10 lines"},
|
||||
['dig_40l']= {"Dig", "40L", "Creusez 40 lines"},
|
||||
['dig_100l']= {"Dig", "100L", "Creusez 100 lines"},
|
||||
['dig_400l']= {"Dig", "400L", "Creusez 400 lines"},
|
||||
['dig_1000l']= {"Dig", "1000L", "Creusez 1000 lines"},
|
||||
['drought_n']= {"Drought", "100L", "Pas de pièce I !"},
|
||||
['drought_l']= {"Drought", "100L", "WTF ??!!"},
|
||||
['marathon_n']= {"Marathon", "NORMAL", "Marathon de 200 lignes."},
|
||||
['marathon_h']= {"Marathon", "DIFFICILE", "Marathon de 200 lignes à très haute vitesse"},
|
||||
['solo_e']= {"Battle", "FACILE", "Battez l'IA !"},
|
||||
['solo_n']= {"Battle", "NORMAL", "Battez l'IA !"},
|
||||
['solo_h']= {"Battle", "DIFFICILE", "Battez l'IA !"},
|
||||
['solo_l']= {"Battle", "LUNATIQUE", "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_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."},
|
||||
['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_u']= {"Tech 99", "ULTIMe", "Bataille de 99 joueurs.\nLe dernier en vie gagne."},
|
||||
['round_e']= {"Tour à tour", "FACILE", "Mode échecs"},
|
||||
['round_n']= {"Tour à tour", "NORMAL", "Mode échecs"},
|
||||
['round_h']= {"Tour à tour", "DIFFICILE", "Mode échecs"},
|
||||
['round_l']= {"Tour à tour", "LUNATIQUE", "Mode échecs"},
|
||||
['round_u']= {"Tour à tour", "ULTIME", "Mode échecs"},
|
||||
['master_beginner']= {"Master", "LUNATIQUE", "Pour les débutants en 20G."},
|
||||
['master_advance']= {"Master", "ULTIME", "Challenge 20G pro !"},
|
||||
['master_final']= {"Master", "FINAL", "20G : Un point final impossible à atteindre !"},
|
||||
-- ['master_phantasm']= {"Mester", "FANTASMA", "20G: ???"},
|
||||
['master_extra']= {"GrandMaster", "EXTRA", "Tentez de devenir un Grandmaster."},
|
||||
-- ['rhythm_e']= {"Rhythm", "EASY", "200-line low-bpm rhythm marathon."},
|
||||
-- ['rhythm_h']= {"Rhythm", "HARD", "200-line medium-bpm rhythm marathon"},
|
||||
-- ['rhythm_u']= {"Rhythm", "ULTIMATE", "200-line high-bpm rhythm marathon."},
|
||||
['blind_e']= {"Aveugle", "MOITIE", "Pour les novices."},
|
||||
['blind_n']= {"Aveugle", "TOUT", "Pour les joueurs intermédiaires."},
|
||||
['blind_h']= {"Aveugle", "SOUDAIN", "Pour les bons jooeurs."},
|
||||
['blind_l']= {"Aveugle", "SOUDAIN+", "Pour les pros."},
|
||||
['blind_u']= {"Aveugle", "?", "Êtes-vous prêt ?"},
|
||||
['blind_wtf']= {"Aveugle", "WTF", "Vous n'êtes pas prêt."},
|
||||
['classic_fast']= {"Classic", "CTWC", "Un mode classique rapide."},
|
||||
['survivor_e']= {"Survivor", "FACILE", "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_l']= {"Survivor", "LUNATIQUE", "Pendant combien de temps survivrez-vous ?"},
|
||||
['survivor_u']= {"Survivor", "ULTIME", "Pendant combien de temps survivrez-vous ?"},
|
||||
['attacker_h']= {"Attaquant", "DIFFICILE", "Soyez offensifs !"},
|
||||
['attacker_u']= {"Attaquant", "ULTIME", "Soyez offensifs !"},
|
||||
['defender_n']= {"Défendant", "NORMAL", "Soyez défensifs !"},
|
||||
['defender_l']= {"Défendant", "LUNATIQUE", "Soyez défensifs !"},
|
||||
['dig_h']= {"Perceuse", "DIFFICILE", "Essayez de creuser !"},
|
||||
['dig_u']= {"Perceuse", "ULTIME", "Essayez de creuser !"},
|
||||
['bigbang']= {"Big Bang", "FACILE", "Tutoriel All-Spin\nEn construction..."},
|
||||
['c4wtrain_n']= {"Mode essai C4W", "NORMAL", "Combos infinis."},
|
||||
['c4wtrain_l']= {"Mode essai C4W", "LUNATIQUE", "Combos infinis."},
|
||||
['pctrain_n']= {"Mode essai PC", "NORMAL", "Mode Perfect Clear simple"},
|
||||
['pctrain_l']= {"Mode essai PC", "LUNATIQUE", "Mode Perfect Clear dur"},
|
||||
['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_l']= {"PC Challenge", "LUNATIQUE", "Obtenez un PC dans les prochaines 100 lignes !"},
|
||||
['tech_n']= {"Tech", "NORMAL", "Gardez le B2B !"},
|
||||
['tech_n_plus']= {"Tech", "NORMAL+", "Spin & PC uniquement"},
|
||||
['tech_h']= {"Tech", "DIFFICILE", "Gardez le B2B !"},
|
||||
['tech_h_plus']= {"Tech", "HARD+", "Spin & PC uniquement"},
|
||||
['tech_l']= {"Tech", "LUNATIQUE", "Gardez le B2B !"},
|
||||
['tech_l_plus']= {"Tech", "LUNATIQUE+", "Spin & PC uniquement"},
|
||||
['tech_finesse']= {"Tech", "FINESSE", "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_h']= {"TSD Challenge", "DIFFICILE", "T-spin doubles uniquement !"},
|
||||
['tsd_u']= {"TSD Challenge", "ULTIME", "T-spin doubles uniquement !"},
|
||||
-- ['backfire_n']= {"Backfire", "NORMAL", "Self-send garbages"},
|
||||
-- ['backfire_h']= {"Backfire", "HARD", "Self-send garbages"},
|
||||
-- ['backfire_l']= {"Backfire", "LUNATIC", "Self-send garbages"},
|
||||
-- ['backfire_u']= {"Backfire", "ULTIMATE", "Self-send garbages"},
|
||||
['zen']= {'Zen', "200", "200 lignes sans limites de temps."},
|
||||
['ultra']= {'Ultra', "EXTRA", "2 minutes pour avoir le meilleur score."},
|
||||
['infinite']= {"Infini", "", "Mode tranquile."},
|
||||
['infinite_dig']= {"Infini : Dig", "", "Creuser, creuser, creuser."},
|
||||
['sprintFix']= {"Sprint", "Sans gauche/droite"},
|
||||
['sprintLock']= {"Sprint", "Sans rotation"},
|
||||
['marathon_bfmax']= {"Marathon", "ULTIME"},
|
||||
['custom_clear']= {"Perso.", "NORMAL"},
|
||||
['custom_puzzle']= {"Perso.", "PUZZLE"},
|
||||
},
|
||||
}
|
||||
@@ -99,8 +99,7 @@ return{
|
||||
-- started="Playing",
|
||||
joinRoom="Entrou a sala.",
|
||||
leaveRoom="Saiu da sala.",
|
||||
-- notReady="Waiting",
|
||||
-- beReady="Ready",
|
||||
-- ready="READY",
|
||||
-- champion="$1 won",
|
||||
chatRemain="Online: ",
|
||||
chatStart="------Começo do log------",
|
||||
@@ -256,8 +255,6 @@ return{
|
||||
-- new="New Room(2)",
|
||||
-- new2="New Room(5)",
|
||||
-- join="Join",
|
||||
up="↑",
|
||||
down="↓",
|
||||
},
|
||||
net_game={
|
||||
-- ready="Ready",
|
||||
@@ -277,6 +274,7 @@ return{
|
||||
reTime="Demora iniciação",
|
||||
RS="Sistema de rotação",
|
||||
layout="Layout",
|
||||
-- dataSaving="Data saving",
|
||||
autoPause="Pausar quando foco for perco",
|
||||
swap="Combinação de tecla(Mudar modo de atk)",
|
||||
fine="Som Falha de destreza",
|
||||
@@ -417,8 +415,9 @@ return{
|
||||
clear="Iniciar-Limpar",
|
||||
puzzle="Iniciar-Puzzle",
|
||||
|
||||
-- reset="Reset (Del)",
|
||||
advance="Mais (A)",
|
||||
mod="Mods",
|
||||
mod="Mods (F1)",
|
||||
field="Editar Tab. (F)",
|
||||
sequence="Editar Sequência (S)",
|
||||
mission="Editar Missão (M)",
|
||||
@@ -451,20 +450,20 @@ return{
|
||||
|
||||
any="Apagar",
|
||||
space="×",
|
||||
-- smartPen="Smart",
|
||||
-- smart="Smart",
|
||||
|
||||
pushLine="Add Linha(K)",
|
||||
delLine="Del Linha(L)",
|
||||
push="Add Linha(K)",
|
||||
del="Del Linha(L)",
|
||||
|
||||
copy="Copiar",
|
||||
paste="Colar",
|
||||
clear="Limpar",
|
||||
demo="Não mostrar ×",
|
||||
|
||||
newPage="Nova Página(N)",
|
||||
delPage="Del Página(M)",
|
||||
prevPage="Página Ant.",
|
||||
nextPage="Prox. Página",
|
||||
newPg="Nova Página(N)",
|
||||
delPg="Del Página(M)",
|
||||
prevPg="Página Ant.",
|
||||
nextPg="Prox. Página",
|
||||
},
|
||||
custom_sequence={
|
||||
title="Jogo Custom",
|
||||
@@ -656,109 +655,104 @@ return{
|
||||
importData="Importar estatística",
|
||||
importSetting="Importar config.",
|
||||
importVK="Importar layout de hud",
|
||||
|
||||
reset="RESET?",
|
||||
resetUnlock="Reset ranks",
|
||||
resetRecord="Reset records",
|
||||
resetData="Reset data",
|
||||
},
|
||||
error={
|
||||
cmd="Console",
|
||||
console="Console",
|
||||
quit="Quit",
|
||||
},
|
||||
},
|
||||
modes={
|
||||
["sprint_10l"]= {"Sprint", "10L", "Limpe 10 linhas!"},
|
||||
["sprint_20l"]= {"Sprint", "20L", "Limpe 20 linhas!"},
|
||||
["sprint_40l"]= {"Sprint", "40L", "Limpe 40 linhas!"},
|
||||
["sprint_100l"]= {"Sprint", "100L", "Limpe 100 linhas!"},
|
||||
["sprint_400l"]= {"Sprint", "400L", "Limpe 400 linhas!"},
|
||||
["sprint_1000l"]= {"Sprint", "1000L", "Limpe 1000 linhas!"},
|
||||
["sprintPenta"]= {"Sprint", "PENTOMINO", "Limpe 40 linhas com 18 pentominoes."},
|
||||
["sprintMPH"]= {"Sprint", "MPH", "SemMem.\nSemPrévia\nSemSegurar"},
|
||||
["dig_10l"]= {"Cave", "10L", "Cave 10 linhas de lixo."},
|
||||
["dig_40l"]= {"Cave", "40L", "Cave 40 linhas de lixo."},
|
||||
["dig_100l"]= {"Cave", "100L", "Cave 100 linhas de lixo."},
|
||||
["dig_400l"]= {"Cave", "400L", "Cave 400 linhas de lixo."},
|
||||
["dig_1000l"]= {"Cave", "1000L", "Cave 1000 linhas de lixo."},
|
||||
["drought_n"]= {"Drought", "100L", "Sem peça I !"},
|
||||
["drought_l"]= {"Drought", "100L", "WTF"},
|
||||
["marathon_n"]= {"Maratona", "NORMAL", "200-line Maratona com velocidade aumentando."},
|
||||
["marathon_h"]= {"Maratona", "DIFÍCIL", "200-line Maratona com velocidade alta."},
|
||||
["solo_e"]= {"Batalha", "FÁCIL", "Derrote a inteligência!"},
|
||||
["solo_n"]= {"Batalha", "NORMAL", "Derrote a inteligência!"},
|
||||
["solo_h"]= {"Batalha", "DIFÍCIL", "Derrote a inteligência!"},
|
||||
["solo_l"]= {"Batalha", "LUNATICO", "Defeat the AI!"},
|
||||
["solo_u"]= {"Batalha", "ULTIMATE", "Defeat the AI!"},
|
||||
["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_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_h"]= {"Tech 99", "DIFÍCIL", "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_n"]= {"Baseado Turnos", "NORMAL", "Modo xadrez"},
|
||||
["round_h"]= {"Baseado Turnos", "DIFÍCIL", "Modo xadrez"},
|
||||
["round_l"]= {"Baseado Turnos", "LUNÁTICO", "Modo xadrez"},
|
||||
["round_u"]= {"Baseado Turnos", "ULTIMATE", "Modo xadrez"},
|
||||
["master_beginner"]= {"Mestre", "LUNÁTICO", "Pra iniciantes de 20G."},
|
||||
["master_advance"]= {"Mestre", "ULTIMATE", "Desafio 20G profissional!"},
|
||||
["master_final"]= {"Mestre", "FINAL", "20G: Final inalcançável!"},
|
||||
["master_phantasm"]= {"Mestre", "FANTASMA", "20G: ???"},
|
||||
["master_extra"]= {"GrandMaster", "EXTRA", "Para ser um Grand Master, aceite \nesse desafio."},
|
||||
-- ["rhythm_e"]= {"Rhythm", "EASY", "200-line low-bpm rhythm marathon."},
|
||||
-- ["rhythm_h"]= {"Rhythm", "HARD", "200-line medium-bpm rhythm marathon"},
|
||||
-- ["rhythm_u"]= {"Rhythm", "ULTIMATE", "200-line high-bpm rhythm marathon."},
|
||||
["blind_e"]= {"Cego", "METADE", "Para novatos."},
|
||||
["blind_n"]= {"Cego", "TUDO", "Para intermediários."},
|
||||
["blind_h"]= {"Cego", "DE REPENTE", "Para experientes."},
|
||||
["blind_l"]= {"Cego", "DE REPENTE+", "For professionals."},
|
||||
["blind_u"]= {"Cego", "?", "Are you ready?"},
|
||||
["blind_wtf"]= {"Cego", "WTF", "You're not ready."},
|
||||
["classic_fast"]= {"Clássico", "CTWC", "Modo clássico rápido. "},
|
||||
["survivor_e"]= {"Sobrevivente", "FACIL", "Por quanto sobrevive?"},
|
||||
["survivor_n"]= {"Sobrevivente", "NORMAL", "Por quanto sobrevive?"},
|
||||
["survivor_h"]= {"Sobrevivente", "DIFÍCIL", "Por quanto sobrevive?"},
|
||||
["survivor_l"]= {"Sobrevivente", "LUNÁTICO", "Por quanto sobrevive?"},
|
||||
["survivor_u"]= {"Sobrevivente", "ULTIMATE", "Por quanto sobrevive?"},
|
||||
["attacker_h"]= {"Atacante", "DIFÍCIL", "Prática de ofensiva!"},
|
||||
["attacker_u"]= {"Atacante", "ULTIMATE", "Prática de ofensiva!"},
|
||||
["defender_n"]= {"Defensor", "NORMAL", "Prática de defensiva!"},
|
||||
["defender_l"]= {"Defensor", "LUNÁTICO", "Prática de defensiva!"},
|
||||
["dig_h"]= {"Cavador", "DIFÍCIL", "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]"},
|
||||
["c4wtrain_n"]= {"Treinamento C4W", "NORMAL", "Combos infinitos."},
|
||||
["c4wtrain_l"]= {"Treinamento C4W", "LUNÁTICO", "Combos infinitos."},
|
||||
["pctrain_n"]= {"Treinamento PC", "NORMAL", "Modo simples 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_h"]= {"Desafio PC", "DIFÍCIL", "Obtenha 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_plus"]= {"Tech", "NORMAL+", "Apenas spins e PC"},
|
||||
["tech_h"]= {"Tech", "HARD", "Keep the B2B chain!"},
|
||||
["tech_h_plus"]= {"Tech", "HARD+", "Apenas spins e PC"},
|
||||
["tech_l"]= {"Tech", "LUNÁTICO", "Não quebre o B2B!"},
|
||||
["tech_l_plus"]= {"Tech", "LUNÁTICO+", "Apenas spins e PC"},
|
||||
["tech_finesse"]= {"Tech", "FINESSE", "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_h"]= {"Desafio TSD", "DIFÍCIL", "Apenas T-spin-doubles!"},
|
||||
["tsd_u"]= {"Desafio TSD", "ULTIMATE", "Apenas T-spin-doubles!"},
|
||||
-- ["backfire_n"]= {"Backfire", "NORMAL", "Self-send garbages"},
|
||||
-- ["backfire_h"]= {"Backfire", "HARD", "Self-send garbages"},
|
||||
-- ["backfire_l"]= {"Backfire", "LUNATIC", "Self-send garbages"},
|
||||
-- ["backfire_u"]= {"Backfire", "ULTIMATE", "Self-send garbages"},
|
||||
["zen"]= {"Zen", "200", "200 linhas sem um limite de tempo."},
|
||||
["ultra"]= {"Ultra", "EXTRA", "Pegue a maior pontuação em 2 minutos."},
|
||||
["infinite"]= {"Infinito", "", "Modo Sandbox."},
|
||||
["infinite_dig"]= {"Infinito:Cave", "", "Cava, Cava, Cava."},
|
||||
["sprintFix"]= {"Sprint", "SEM ESQUERDA/DIREITA"},
|
||||
["sprintLock"]= {"Sprint", "SEM ROTAÇÃO"},
|
||||
["marathon_bfmax"]= {"Maratona", "ULTIMATE"},
|
||||
["custom_clear"]= {"Custom", "NORMAL"},
|
||||
["custom_puzzle"]= {"Custom", "PUZZLE"},
|
||||
['sprint_10l']= {"Sprint", "10L", "Limpe 10 linhas!"},
|
||||
['sprint_20l']= {"Sprint", "20L", "Limpe 20 linhas!"},
|
||||
['sprint_40l']= {"Sprint", "40L", "Limpe 40 linhas!"},
|
||||
['sprint_100l']= {"Sprint", "100L", "Limpe 100 linhas!"},
|
||||
['sprint_400l']= {"Sprint", "400L", "Limpe 400 linhas!"},
|
||||
['sprint_1000l']= {"Sprint", "1000L", "Limpe 1000 linhas!"},
|
||||
['sprintPenta']= {"Sprint", "PENTOMINO", "Limpe 40 linhas com 18 pentominoes."},
|
||||
['sprintMPH']= {"Sprint", "MPH", "SemMem.\nSemPrévia\nSemSegurar"},
|
||||
['dig_10l']= {"Cave", "10L", "Cave 10 linhas de lixo."},
|
||||
['dig_40l']= {"Cave", "40L", "Cave 40 linhas de lixo."},
|
||||
['dig_100l']= {"Cave", "100L", "Cave 100 linhas de lixo."},
|
||||
['dig_400l']= {"Cave", "400L", "Cave 400 linhas de lixo."},
|
||||
['dig_1000l']= {"Cave", "1000L", "Cave 1000 linhas de lixo."},
|
||||
['drought_n']= {"Drought", "100L", "Sem peça I !"},
|
||||
['drought_l']= {"Drought", "100L", "WTF"},
|
||||
['marathon_n']= {"Maratona", "NORMAL", "200-line Maratona com velocidade aumentando."},
|
||||
['marathon_h']= {"Maratona", "DIFÍCIL", "200-line Maratona com velocidade alta."},
|
||||
['solo_e']= {"Batalha", "FÁCIL", "Derrote a inteligência!"},
|
||||
['solo_n']= {"Batalha", "NORMAL", "Derrote a inteligência!"},
|
||||
['solo_h']= {"Batalha", "DIFÍCIL", "Derrote a inteligência!"},
|
||||
['solo_l']= {"Batalha", "LUNATICO", "Defeat the AI!"},
|
||||
['solo_u']= {"Batalha", "ULTIMATE", "Defeat the AI!"},
|
||||
['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_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_h']= {"Tech 99", "DIFÍCIL", "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_n']= {"Baseado Turnos", "NORMAL", "Modo xadrez"},
|
||||
['round_h']= {"Baseado Turnos", "DIFÍCIL", "Modo xadrez"},
|
||||
['round_l']= {"Baseado Turnos", "LUNÁTICO", "Modo xadrez"},
|
||||
['round_u']= {"Baseado Turnos", "ULTIMATE", "Modo xadrez"},
|
||||
['master_beginner']= {"Mestre", "LUNÁTICO", "Pra iniciantes de 20G."},
|
||||
['master_advance']= {"Mestre", "ULTIMATE", "Desafio 20G profissional!"},
|
||||
['master_final']= {"Mestre", "FINAL", "20G: Final inalcançável!"},
|
||||
['master_phantasm']= {"Mestre", "FANTASMA", "20G: ???"},
|
||||
['master_extra']= {"GrandMaster", "EXTRA", "Para ser um Grand Master, aceite \nesse desafio."},
|
||||
-- ['rhythm_e']= {"Rhythm", "EASY", "200-line low-bpm rhythm marathon."},
|
||||
-- ['rhythm_h']= {"Rhythm", "HARD", "200-line medium-bpm rhythm marathon"},
|
||||
-- ['rhythm_u']= {"Rhythm", "ULTIMATE", "200-line high-bpm rhythm marathon."},
|
||||
['blind_e']= {"Cego", "METADE", "Para novatos."},
|
||||
['blind_n']= {"Cego", "TUDO", "Para intermediários."},
|
||||
['blind_h']= {"Cego", "DE REPENTE", "Para experientes."},
|
||||
['blind_l']= {"Cego", "DE REPENTE+", "For professionals."},
|
||||
['blind_u']= {"Cego", "?", "Are you ready?"},
|
||||
['blind_wtf']= {"Cego", "WTF", "You're not ready."},
|
||||
['classic_fast']= {"Clássico", "CTWC", "Modo clássico rápido. "},
|
||||
['survivor_e']= {"Sobrevivente", "FACIL", "Por quanto sobrevive?"},
|
||||
['survivor_n']= {"Sobrevivente", "NORMAL", "Por quanto sobrevive?"},
|
||||
['survivor_h']= {"Sobrevivente", "DIFÍCIL", "Por quanto sobrevive?"},
|
||||
['survivor_l']= {"Sobrevivente", "LUNÁTICO", "Por quanto sobrevive?"},
|
||||
['survivor_u']= {"Sobrevivente", "ULTIMATE", "Por quanto sobrevive?"},
|
||||
['attacker_h']= {"Atacante", "DIFÍCIL", "Prática de ofensiva!"},
|
||||
['attacker_u']= {"Atacante", "ULTIMATE", "Prática de ofensiva!"},
|
||||
['defender_n']= {"Defensor", "NORMAL", "Prática de defensiva!"},
|
||||
['defender_l']= {"Defensor", "LUNÁTICO", "Prática de defensiva!"},
|
||||
['dig_h']= {"Cavador", "DIFÍCIL", "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]"},
|
||||
['c4wtrain_n']= {"Treinamento C4W", "NORMAL", "Combos infinitos."},
|
||||
['c4wtrain_l']= {"Treinamento C4W", "LUNÁTICO", "Combos infinitos."},
|
||||
['pctrain_n']= {"Treinamento PC", "NORMAL", "Modo simples 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_h']= {"Desafio PC", "DIFÍCIL", "Obtenha 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_plus']= {"Tech", "NORMAL+", "Apenas spins e PC"},
|
||||
['tech_h']= {"Tech", "HARD", "Keep the B2B chain!"},
|
||||
['tech_h_plus']= {"Tech", "HARD+", "Apenas spins e PC"},
|
||||
['tech_l']= {"Tech", "LUNÁTICO", "Não quebre o B2B!"},
|
||||
['tech_l_plus']= {"Tech", "LUNÁTICO+", "Apenas spins e PC"},
|
||||
['tech_finesse']= {"Tech", "FINESSE", "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_h']= {"Desafio TSD", "DIFÍCIL", "Apenas T-spin-doubles!"},
|
||||
['tsd_u']= {"Desafio TSD", "ULTIMATE", "Apenas T-spin-doubles!"},
|
||||
-- ['backfire_n']= {"Backfire", "NORMAL", "Self-send garbages"},
|
||||
-- ['backfire_h']= {"Backfire", "HARD", "Self-send garbages"},
|
||||
-- ['backfire_l']= {"Backfire", "LUNATIC", "Self-send garbages"},
|
||||
-- ['backfire_u']= {"Backfire", "ULTIMATE", "Self-send garbages"},
|
||||
['zen']= {'Zen', "200", "200 linhas sem um limite de tempo."},
|
||||
['ultra']= {'Ultra', "EXTRA", "Pegue a maior pontuação em 2 minutos."},
|
||||
['infinite']= {"Infinito", "", "Modo Sandbox."},
|
||||
['infinite_dig']= {"Infinito:Cave", "", "Cava, Cava, Cava."},
|
||||
['sprintFix']= {"Sprint", "SEM ESQUERDA/DIREITA"},
|
||||
['sprintLock']= {"Sprint", "SEM ROTAÇÃO"},
|
||||
['marathon_bfmax']= {"Maratona", "ULTIMATE"},
|
||||
['custom_clear']= {"Custom", "NORMAL"},
|
||||
['custom_puzzle']= {"Custom", "PUZZLE"},
|
||||
},
|
||||
getTip={refuseCopy=true,
|
||||
'Jogo de blocos gratis com um modo Battle Royale!',
|
||||
|
||||
@@ -99,8 +99,7 @@ return{
|
||||
-- started="Playing",
|
||||
joinRoom="entró a la sala.",
|
||||
leaveRoom="salió de la sala.",
|
||||
notReady="En espera",
|
||||
beReady="Listo",
|
||||
-- ready="READY",
|
||||
champion="$1 ganó!",
|
||||
chatRemain="Usuarios en línea: ",
|
||||
chatStart="------Comienzo del historial------",
|
||||
@@ -214,11 +213,11 @@ return{
|
||||
},
|
||||
pause={
|
||||
setting="Opciones (S)",
|
||||
replay= "Grabación (P)",
|
||||
replay="Grabación (P)",
|
||||
save="Guardar (O)",
|
||||
resume= "Resumir (esc)",
|
||||
resume="Resumir (esc)",
|
||||
restart="Reiniciar (R)",
|
||||
quit= "Finalizar (Q)",
|
||||
quit="Finalizar (Q)",
|
||||
},
|
||||
net_menu={
|
||||
ffa="FFA",
|
||||
@@ -233,8 +232,6 @@ return{
|
||||
new="Sala Nueva(2)",
|
||||
new2="Sala Nueva(5)",
|
||||
join="Unirse",
|
||||
up="↑",
|
||||
down="↓",
|
||||
},
|
||||
net_game={
|
||||
ready="Estoy Listo",
|
||||
@@ -254,6 +251,7 @@ return{
|
||||
reTime="Retraso de Inicio",
|
||||
RS="Sistema de Rotación",
|
||||
layout="Diseño",
|
||||
-- dataSaving="Data saving",
|
||||
autoPause="Pausar cuando la ventana no está enfocada",
|
||||
swap="Combinación de Teclas (Cambiar Modo de Ataque)",
|
||||
fine="Sonido de Error de Finesse",
|
||||
@@ -390,8 +388,9 @@ return{
|
||||
clear="Inicio-Fin",
|
||||
puzzle="Inicio-Puzzle",
|
||||
|
||||
-- reset="Reset (Del)",
|
||||
advance="Más opciones (A)",
|
||||
mod="Mods",
|
||||
mod="Mods (F1)",
|
||||
field="Editar Tablero (F)",
|
||||
sequence="Editar Secuencia (S)",
|
||||
mission="Editar Misiones (M)",
|
||||
@@ -570,107 +569,102 @@ return{
|
||||
importData="Importar Datos",
|
||||
importSetting="Importar Ajustes",
|
||||
importVK="Importar VK",
|
||||
|
||||
reset="¿Reiniciar?",
|
||||
resetUnlock="Reiniciar rangos",
|
||||
resetRecord="Reiniciar récords",
|
||||
resetData="Reiniciar datos",
|
||||
},
|
||||
error={
|
||||
cmd="Console",
|
||||
console="Console",
|
||||
quit="Salir",
|
||||
},
|
||||
},
|
||||
modes={
|
||||
["sprint_10l"]= {"Sprint", "10L", "¡Limpia 10 líneas!"},
|
||||
["sprint_20l"]= {"Sprint", "20L", "¡Limpia 20 líneas!"},
|
||||
["sprint_40l"]= {"Sprint", "40L", "¡Limpia 40 líneas!"},
|
||||
["sprint_100l"]= {"Sprint", "100L", "¡Limpia 100 líneas!"},
|
||||
["sprint_400l"]= {"Sprint", "400L", "¡Limpia 400 líneas!"},
|
||||
["sprint_1000l"]= {"Sprint", "1000L", "¡Limpia 1000 líneas!"},
|
||||
["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)."},
|
||||
["dig_10l"]= {"Queso", "10L", "Limpia 10 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_400l"]= {"Queso", "400L", "Limpia 400 líneas de queso."},
|
||||
["dig_1000l"]= {"Queso", "1000L", "Limpia 1000 líneas de queso."},
|
||||
["drought_n"]= {"Sequía", "100L", "¡Sin piezas I!"},
|
||||
["drought_l"]= {"Sequía", "100L", "Guat de foc..."},
|
||||
["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."},
|
||||
["solo_e"]= {"VS.", "Fácil", "¡Derrota a la CPU!"},
|
||||
["solo_n"]= {"VS.", "Normal", "¡Derrota a la CPU!"},
|
||||
["solo_h"]= {"VS.", "Difícil", "¡Derrota a la CPU!"},
|
||||
["solo_l"]= {"VS.", "Lunático", "¡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_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!"},
|
||||
["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_u"]= {"Tech 99", "Supremo", "Batalla de 99 jugadores. ¡El último en pie gana!"},
|
||||
["round_e"]= {"Por Turnos", "Fácil", "Modo ajedrez."},
|
||||
["round_n"]= {"Por Turnos", "Normal", "Modo ajedrez."},
|
||||
["round_h"]= {"Por Turnos", "Difícil", "Modo ajedrez."},
|
||||
["round_l"]= {"Por Turnos", "Lunático", "Modo ajedrez."},
|
||||
["round_u"]= {"Por Turnos", "Supremo", "Modo ajedrez."},
|
||||
["master_beginner"]= {"Master", "Lunático", "Para principiantes en 20G"},
|
||||
["master_advance"]= {"Master", "Supremo", "¡Desafío profesional de 20G!"},
|
||||
["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"},
|
||||
["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_u"]= {"Al Ritmo", "Supremo", "Maratón rítmica de 200 líneas con bpm elevado."},
|
||||
["blind_e"]= {"A Ciegas", "Parcial", "Para novatos."},
|
||||
["blind_n"]= {"A Ciegas", "Total", "Para jugadores intermedios."},
|
||||
["blind_h"]= {"A Ciegas", "Inmediato", "Para jugadores experimentados"},
|
||||
["blind_l"]= {"A Ciegas", "Inmediato+", "Para profesionales."},
|
||||
["blind_u"]= {"A Ciegas", "?", "¿Estás preparado?"},
|
||||
["blind_wtf"]= {"A Ciegas", "Guat de Foc", "No, no lo estás."},
|
||||
["classic_fast"]= {"Clásico", "CTWC", "Modo clásico con alta velocidad."},
|
||||
["survivor_e"]= {"Supervivencia", "Fácil", "¿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_l"]= {"Supervivencia", "Lunático", "¿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_u"]= {"Atacante", "Supremo", "¡Practica la ofensiva!"},
|
||||
["defender_n"]= {"Defensor", "Normal", "¡Practica la defensa!"},
|
||||
["defender_l"]= {"Defensor", "Lunático", "¡Practica la defensa!"},
|
||||
["dig_h"]= {"Downstack", "Difícil", "¡Practica el downstackeo!"},
|
||||
["dig_u"]= {"Downstack", "Supremo", "¡Practica el downstackeo!"},
|
||||
["bigbang"]= {"Big Bang", "Fácil", "¡Tutorial de All-spins!\n[No finalizado]"},
|
||||
["c4wtrain_n"]= {"Entrenar C4W", "Normal", "Combos infinitos."},
|
||||
["c4wtrain_l"]= {"Entrenar C4W", "Lunático", "Combos infinitos."},
|
||||
["pctrain_n"]= {"Entrenar PC", "Normal", "Modo sencillo 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_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!"},
|
||||
["tech_n"]= {"Tech", "Normal", "¡Mantén el B2B!"},
|
||||
["tech_n_plus"]= {"Tech", "Normal+", "¡Sólo se permiten Spins y PCs!"},
|
||||
["tech_h"]= {"Tech", "Difícil", "¡Mantén el B2B!"},
|
||||
["tech_h_plus"]= {"Tech", "Difícil+", "¡Sólo se permiten Spins y PCs!"},
|
||||
["tech_l"]= {"Tech", "Lunático", "¡Mantén el B2B!"},
|
||||
["tech_l_plus"]= {"Tech", "Lunático+", "¡Sólo se permiten Spins y PCs!"},
|
||||
["tech_finesse"]= {"Tech", "Finesse", "¡No cometas errores de Finesse!"},
|
||||
["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_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!"},
|
||||
["backfire_n"]= {"Retorno", "Normal", "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_u"]= {"Retorno", "Supremo", "Lidia con tus propias líneas basura."},
|
||||
["zen"]= {"Zen", "200L", "200 líneas sin límite de tiempo."},
|
||||
["ultra"]= {"Ultra", "Extra", "¡Consigue el mayor puntaje posible en 2 minutos!"},
|
||||
["infinite"]= {"Infinito", "", "Modo Sandbox."},
|
||||
["infinite_dig"]= {"Infinito: Queso", "", "Limpia, limpia, más limpia que tú."},
|
||||
["sprintFix"]= {"Sprint", "Sin mover a Izq./Der."},
|
||||
["sprintLock"]= {"Sprint", "Sin rotar"},
|
||||
["marathon_bfmax"]= {"Maratón", "Supremo"},
|
||||
["custom_clear"]= {"Personalizado", "Normal"},
|
||||
["custom_puzzle"]= {"Personalizado", "Puzzle"},
|
||||
['sprint_10l']= {"Sprint", "10L", "¡Limpia 10 líneas!"},
|
||||
['sprint_20l']= {"Sprint", "20L", "¡Limpia 20 líneas!"},
|
||||
['sprint_40l']= {"Sprint", "40L", "¡Limpia 40 líneas!"},
|
||||
['sprint_100l']= {"Sprint", "100L", "¡Limpia 100 líneas!"},
|
||||
['sprint_400l']= {"Sprint", "400L", "¡Limpia 400 líneas!"},
|
||||
['sprint_1000l']= {"Sprint", "1000L", "¡Limpia 1000 líneas!"},
|
||||
['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)."},
|
||||
['dig_10l']= {"Queso", "10L", "Limpia 10 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_400l']= {"Queso", "400L", "Limpia 400 líneas de queso."},
|
||||
['dig_1000l']= {"Queso", "1000L", "Limpia 1000 líneas de queso."},
|
||||
['drought_n']= {"Sequía", "100L", "¡Sin piezas I!"},
|
||||
['drought_l']= {"Sequía", "100L", "Guat de foc..."},
|
||||
['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."},
|
||||
['solo_e']= {"VS.", "Fácil", "¡Derrota a la CPU!"},
|
||||
['solo_n']= {"VS.", "Normal", "¡Derrota a la CPU!"},
|
||||
['solo_h']= {"VS.", "Difícil", "¡Derrota a la CPU!"},
|
||||
['solo_l']= {"VS.", "Lunático", "¡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_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!"},
|
||||
['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_u']= {"Tech 99", "Supremo", "Batalla de 99 jugadores. ¡El último en pie gana!"},
|
||||
['round_e']= {"Por Turnos", "Fácil", "Modo ajedrez."},
|
||||
['round_n']= {"Por Turnos", "Normal", "Modo ajedrez."},
|
||||
['round_h']= {"Por Turnos", "Difícil", "Modo ajedrez."},
|
||||
['round_l']= {"Por Turnos", "Lunático", "Modo ajedrez."},
|
||||
['round_u']= {"Por Turnos", "Supremo", "Modo ajedrez."},
|
||||
['master_beginner']= {"Master", "Lunático", "Para principiantes en 20G"},
|
||||
['master_advance']= {"Master", "Supremo", "¡Desafío profesional de 20G!"},
|
||||
['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"},
|
||||
['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_u']= {"Al Ritmo", "Supremo", "Maratón rítmica de 200 líneas con bpm elevado."},
|
||||
['blind_e']= {"A Ciegas", "Parcial", "Para novatos."},
|
||||
['blind_n']= {"A Ciegas", "Total", "Para jugadores intermedios."},
|
||||
['blind_h']= {"A Ciegas", "Inmediato", "Para jugadores experimentados"},
|
||||
['blind_l']= {"A Ciegas", "Inmediato+", "Para profesionales."},
|
||||
['blind_u']= {"A Ciegas", "?", "¿Estás preparado?"},
|
||||
['blind_wtf']= {"A Ciegas", "Guat de Foc", "No, no lo estás."},
|
||||
['classic_fast']= {"Clásico", "CTWC", "Modo clásico con alta velocidad."},
|
||||
['survivor_e']= {"Supervivencia", "Fácil", "¿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_l']= {"Supervivencia", "Lunático", "¿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_u']= {"Atacante", "Supremo", "¡Practica la ofensiva!"},
|
||||
['defender_n']= {"Defensor", "Normal", "¡Practica la defensa!"},
|
||||
['defender_l']= {"Defensor", "Lunático", "¡Practica la defensa!"},
|
||||
['dig_h']= {"Downstack", "Difícil", "¡Practica el downstackeo!"},
|
||||
['dig_u']= {"Downstack", "Supremo", "¡Practica el downstackeo!"},
|
||||
['bigbang']= {"Big Bang", "Fácil", "¡Tutorial de All-spins!\n[No finalizado]"},
|
||||
['c4wtrain_n']= {"Entrenar C4W", "Normal", "Combos infinitos."},
|
||||
['c4wtrain_l']= {"Entrenar C4W", "Lunático", "Combos infinitos."},
|
||||
['pctrain_n']= {"Entrenar PC", "Normal", "Modo sencillo 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_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!"},
|
||||
['tech_n']= {"Tech", "Normal", "¡Mantén el B2B!"},
|
||||
['tech_n_plus']= {"Tech", "Normal+", "¡Sólo se permiten Spins y PCs!"},
|
||||
['tech_h']= {"Tech", "Difícil", "¡Mantén el B2B!"},
|
||||
['tech_h_plus']= {"Tech", "Difícil+", "¡Sólo se permiten Spins y PCs!"},
|
||||
['tech_l']= {"Tech", "Lunático", "¡Mantén el B2B!"},
|
||||
['tech_l_plus']= {"Tech", "Lunático+", "¡Sólo se permiten Spins y PCs!"},
|
||||
['tech_finesse']= {"Tech", "Finesse", "¡No cometas errores de Finesse!"},
|
||||
['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_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!"},
|
||||
['backfire_n']= {"Retorno", "Normal", "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_u']= {"Retorno", "Supremo", "Lidia con tus propias líneas basura."},
|
||||
['zen']= {'Zen', "200L", "200 líneas sin límite de tiempo."},
|
||||
['ultra']= {'Ultra', "Extra", "¡Consigue el mayor puntaje posible en 2 minutos!"},
|
||||
['infinite']= {"Infinito", "", "Modo Sandbox."},
|
||||
['infinite_dig']= {"Infinito: Queso", "", "Limpia, limpia, más limpia que tú."},
|
||||
['sprintFix']= {"Sprint", "Sin mover a Izq./Der."},
|
||||
['sprintLock']= {"Sprint", "Sin rotar"},
|
||||
['marathon_bfmax']= {"Maratón", "Supremo"},
|
||||
['custom_clear']= {"Personalizado", "Normal"},
|
||||
['custom_puzzle']= {"Personalizado", "Puzzle"},
|
||||
},
|
||||
}
|
||||
@@ -132,6 +132,7 @@ return{
|
||||
reTime="3-2-1",
|
||||
RS="''?",
|
||||
layout="=-=-=",
|
||||
dataSaving="XX.",
|
||||
autoPause="A||",
|
||||
swap="=+=+=",
|
||||
fine="12 X 21",
|
||||
@@ -232,9 +233,9 @@ return{
|
||||
size="←→",
|
||||
},
|
||||
setting_touchSwitch={
|
||||
b1= "←:", b2="→:", b3="R→:", b4="←R:",
|
||||
b5= "R↑↓:", b6="↓↓:", b7="↓:", b8="□←:",
|
||||
b9= "F1:", b10="F2:", b11="←←:", b12="→→:",
|
||||
b1="←:", b2="→:", b3="R→:", b4="←R:",
|
||||
b5="R↑↓:", b6="↓↓:", b7="↓:", b8="□←:",
|
||||
b9="F1:", b10="F2:", b11="←←:", b12="→→:",
|
||||
b13="↓_:", b14="↓1:", b15="↓4:", b16="↓10:",
|
||||
b17="←↓→↓:", b18="→↓↓:", b19="←↓→↓:",b20="→↓←↓:",
|
||||
norm="-",
|
||||
@@ -269,8 +270,9 @@ return{
|
||||
clear="Start-Clear",
|
||||
puzzle="Start-Puzzle",
|
||||
|
||||
reset="Reset (Del)",
|
||||
advance="More (A)",
|
||||
mod="?!?!?!",
|
||||
mod="?!?!?! (F1)",
|
||||
field="Edit Field (F)",
|
||||
sequence="Edit Sequence (S)",
|
||||
mission="Edit Mission (M)",
|
||||
@@ -303,20 +305,20 @@ return{
|
||||
|
||||
any="_",
|
||||
space="×",
|
||||
smartPen="~",
|
||||
smart="~",
|
||||
|
||||
pushLine="↑↑↑↑↑(K)",
|
||||
delLine="==X==(L)",
|
||||
push="↑↑↑↑↑(K)",
|
||||
del="==X==(L)",
|
||||
|
||||
copy="→__",
|
||||
paste="__→",
|
||||
clear="XXX",
|
||||
demo="X ×",
|
||||
|
||||
newPage="+[_](N)",
|
||||
delPage="x[_](M)",
|
||||
prevPage="←[_]",
|
||||
nextPage="[_]→",
|
||||
newPg="+[_](N)",
|
||||
delPg="x[_](M)",
|
||||
prevPg="←[_]",
|
||||
nextPg="[_]→",
|
||||
},
|
||||
custom_sequence={
|
||||
title="!@#$%^&*",
|
||||
|
||||
@@ -44,8 +44,7 @@ return{
|
||||
createRoomTooFast="手痒要开这么多房间?",
|
||||
createRoomSuccessed="创好了",
|
||||
started="开了",
|
||||
notReady="没有准备好",
|
||||
beReady="准备好了",
|
||||
ready="预备!",
|
||||
champion="神仙是 $1",
|
||||
|
||||
stat={
|
||||
@@ -183,102 +182,102 @@ return{
|
||||
tapFX="动画",
|
||||
},
|
||||
error={
|
||||
cmd="Console",
|
||||
console="Console",
|
||||
quit="Quit",
|
||||
},
|
||||
},
|
||||
modes={
|
||||
["sprint_10l"]= {"竞速", "10L", "消10行"},
|
||||
["sprint_20l"]= {"竞速", "20L", "消20行"},
|
||||
["sprint_40l"]= {"竞速", "40L", "消40行"},
|
||||
["sprint_100l"]= {"竞速", "100L", "消100行"},
|
||||
["sprint_400l"]= {"竞速", "400L", "消400行"},
|
||||
["sprint_1000l"]= {"竞速", "1000L", "消1000行"},
|
||||
["sprintPenta"]= {"竞速", "五连块", "离谱"},
|
||||
["sprintMPH"]= {"竞速", "纯净", "听说你反应很快?"},
|
||||
["dig_10l"]= {"挖掘", "10L", "挖10行"},
|
||||
["dig_40l"]= {"挖掘", "40L", "挖40行"},
|
||||
["dig_100l"]= {"挖掘", "100L", "挖100行"},
|
||||
["dig_400l"]= {"挖掘", "400L", "挖400行"},
|
||||
["dig_1000l"]= {"挖掘", "1000L", "挖1000行"},
|
||||
["drought_n"]= {"干旱", "100L", "放轻松,简单得很"},
|
||||
["drought_l"]= {"干旱", "100L", "有趣的要来了"},
|
||||
["marathon_n"]= {"马拉松", "普通", "休闲模式"},
|
||||
["marathon_h"]= {"马拉松", "困难", "休闲模式"},
|
||||
["solo_e"]= {"单挑", "简单", "鲨AI"},
|
||||
["solo_n"]= {"单挑", "普通", "鲨AI"},
|
||||
["solo_h"]= {"单挑", "困难", "鲨AI"},
|
||||
["solo_l"]= {"单挑", "疯狂", "鲨AI"},
|
||||
["solo_u"]= {"单挑", "极限", "鲨AI"},
|
||||
["techmino49_e"]= {"49人混战", "简单", "这我岂不是乱鲨"},
|
||||
["techmino49_h"]= {"49人混战", "困难", "这我岂不是乱鲨"},
|
||||
["techmino49_u"]= {"49人混战", "极限", "你吃鸡率多少?"},
|
||||
["techmino99_e"]= {"99人混战", "简单", "这我岂不是乱鲨"},
|
||||
["techmino99_h"]= {"99人混战", "困难", "这我岂不是乱鲨"},
|
||||
["techmino99_u"]= {"99人混战", "极限", "你吃鸡率多少?"},
|
||||
["round_e"]= {"回合制", "简单", "下棋"},
|
||||
["round_n"]= {"回合制", "普通", "下棋"},
|
||||
["round_h"]= {"回合制", "困难", "下棋"},
|
||||
["round_l"]= {"回合制", "疯狂", "下棋"},
|
||||
["round_u"]= {"回合制", "极限", "下棋"},
|
||||
["master_beginner"]= {"大师", "疯狂", "无脑20G"},
|
||||
["master_advance"]= {"大师", "极限", "简单20G"},
|
||||
["master_final"]= {"大师", "终点", "究极20G:真正的游戏"},
|
||||
["master_phantasm"]= {"大师", "虚幻", "虚幻20G:好玩"},
|
||||
["master_extra"]= {"宗师", "EX", "你行你上"},
|
||||
["rhythm_e"]= {"节奏", "简单", "很无聊的"},
|
||||
["rhythm_h"]= {"节奏", "困难", "好玩么?"},
|
||||
["rhythm_u"]= {"节奏", "极限", "真男人不玩低难度"},
|
||||
["blind_e"]= {"隐形", "半隐", "谁都能玩"},
|
||||
["blind_n"]= {"隐形", "全隐", "稍加练习即可"},
|
||||
["blind_h"]= {"隐形", "瞬隐", "和上一个一样"},
|
||||
["blind_l"]= {"隐形", "瞬隐+", "这个确实挺难的"},
|
||||
["blind_u"]= {"隐形", "啊这", "你准备好了吗"},
|
||||
["blind_wtf"]= {"隐形", "不会吧", "还没准备好"},
|
||||
["classic_fast"]= {"高速经典", "CTWC", "就这?简单"},
|
||||
["survivor_e"]= {"生存", "简单", "这都玩不下去?不会吧"},
|
||||
["survivor_n"]= {"生存", "普通", "呵,这都玩不过?"},
|
||||
["survivor_h"]= {"生存", "困难", "所以呢?"},
|
||||
["survivor_l"]= {"生存", "疯狂", "然后呢?"},
|
||||
["survivor_u"]= {"生存", "极限", "舒服了"},
|
||||
["attacker_h"]= {"进攻", "困难", "进攻练习"},
|
||||
["attacker_u"]= {"进攻", "极限", "进攻练习"},
|
||||
["defender_n"]= {"防守", "普通", "防守练习"},
|
||||
["defender_l"]= {"防守", "疯狂", "防守练习"},
|
||||
["dig_h"]= {"挖掘", "困难", "挖掘练习"},
|
||||
["dig_u"]= {"挖掘", "极限", "挖掘练习"},
|
||||
["bigbang"]= {"大爆炸", "简单", "All-spin 入门教程\n未制作完成,落块即通"},
|
||||
["c4wtrain_n"]= {"C4W练习", "普通", "无 限 连 击"},
|
||||
["c4wtrain_l"]= {"C4W练习", "疯狂", "无 限 连 击"},
|
||||
["pctrain_n"]= {"全清训练", "普通", "随便打打"},
|
||||
["pctrain_l"]= {"全清训练", "疯狂", "建议不打"},
|
||||
["pc_n"]= {"全清挑战", "普通", "100行内刷PC"},
|
||||
["pc_h"]= {"全清挑战", "困难", "100行内刷PC"},
|
||||
["pc_l"]= {"全清挑战", "疯狂", "100行内刷PC"},
|
||||
["tech_n"]= {"科研", "普通", "禁止断B2B"},
|
||||
["tech_n_plus"]= {"科研", "普通+", "仅允许spin与PC"},
|
||||
["tech_h"]= {"科研", "困难", "禁止断B2B"},
|
||||
["tech_h_plus"]= {"科研", "困难+", "仅允许spin与PC"},
|
||||
["tech_l"]= {"科研", "疯狂", "禁止断B2B"},
|
||||
["tech_l_plus"]= {"科研", "疯狂+", "仅允许spin与PC"},
|
||||
["tech_finesse"]= {"科研", "极简", "强制最简操作"},
|
||||
["tech_finesse_f"]= {"科研", "极简+", "禁止普通消除,强制最简操作"},
|
||||
["tsd_e"]= {"TSD挑战", "简单", "刷T2"},
|
||||
["tsd_h"]= {"TSD挑战", "困难", "刷T2"},
|
||||
["tsd_u"]= {"TSD挑战", "极限", "刷T2"},
|
||||
["backfire_n"]= {"自攻自受", "普通", "200攻击很少的,冲冲冲"},
|
||||
["backfire_h"]= {"自攻自受", "困难", "你在害怕什么"},
|
||||
["backfire_l"]= {"自攻自受", "疯狂", "别怂啊,打攻击呀"},
|
||||
["backfire_u"]= {"自攻自受", "极限", "能把自己玩死,不会吧"},
|
||||
["zen"]= {"禅", "200", "不限时200行"},
|
||||
["ultra"]= {"限时打分", "挑战", "2分钟刷分"},
|
||||
["infinite"]= {"无尽", "", "真的有人会玩这个?"},
|
||||
["infinite_dig"]= {"无尽:挖掘", "", "闲得慌的话来挖"},
|
||||
["sprintFix"]= {"竞速", "无移动"},
|
||||
["sprintLock"]= {"竞速", "无旋转"},
|
||||
["marathon_bfmax"]= {"马拉松", "极限"},
|
||||
["custom_clear"]= {"自定义", "普通"},
|
||||
["custom_puzzle"]= {"自定义", "拼图"},
|
||||
['sprint_10l']= {"竞速", "10L", "消10行"},
|
||||
['sprint_20l']= {"竞速", "20L", "消20行"},
|
||||
['sprint_40l']= {"竞速", "40L", "消40行"},
|
||||
['sprint_100l']= {"竞速", "100L", "消100行"},
|
||||
['sprint_400l']= {"竞速", "400L", "消400行"},
|
||||
['sprint_1000l']= {"竞速", "1000L", "消1000行"},
|
||||
['sprintPenta']= {"竞速", "五连块", "离谱"},
|
||||
['sprintMPH']= {"竞速", "纯净", "听说你反应很快?"},
|
||||
['dig_10l']= {"挖掘", "10L", "挖10行"},
|
||||
['dig_40l']= {"挖掘", "40L", "挖40行"},
|
||||
['dig_100l']= {"挖掘", "100L", "挖100行"},
|
||||
['dig_400l']= {"挖掘", "400L", "挖400行"},
|
||||
['dig_1000l']= {"挖掘", "1000L", "挖1000行"},
|
||||
['drought_n']= {"干旱", "100L", "放轻松,简单得很"},
|
||||
['drought_l']= {"干旱", "100L", "有趣的要来了"},
|
||||
['marathon_n']= {"马拉松", "普通", "休闲模式"},
|
||||
['marathon_h']= {"马拉松", "困难", "休闲模式"},
|
||||
['solo_e']= {"单挑", "简单", "鲨AI"},
|
||||
['solo_n']= {"单挑", "普通", "鲨AI"},
|
||||
['solo_h']= {"单挑", "困难", "鲨AI"},
|
||||
['solo_l']= {"单挑", "疯狂", "鲨AI"},
|
||||
['solo_u']= {"单挑", "极限", "鲨AI"},
|
||||
['techmino49_e']= {"49人混战", "简单", "这我岂不是乱鲨"},
|
||||
['techmino49_h']= {"49人混战", "困难", "这我岂不是乱鲨"},
|
||||
['techmino49_u']= {"49人混战", "极限", "你吃鸡率多少?"},
|
||||
['techmino99_e']= {"99人混战", "简单", "这我岂不是乱鲨"},
|
||||
['techmino99_h']= {"99人混战", "困难", "这我岂不是乱鲨"},
|
||||
['techmino99_u']= {"99人混战", "极限", "你吃鸡率多少?"},
|
||||
['round_e']= {"回合制", "简单", "下棋"},
|
||||
['round_n']= {"回合制", "普通", "下棋"},
|
||||
['round_h']= {"回合制", "困难", "下棋"},
|
||||
['round_l']= {"回合制", "疯狂", "下棋"},
|
||||
['round_u']= {"回合制", "极限", "下棋"},
|
||||
['master_beginner']= {"大师", "疯狂", "无脑20G"},
|
||||
['master_advance']= {"大师", "极限", "简单20G"},
|
||||
['master_final']= {"大师", "终点", "究极20G:真正的游戏"},
|
||||
['master_phantasm']= {"大师", "虚幻", "虚幻20G:好玩"},
|
||||
['master_extra']= {"宗师", "EX", "你行你上"},
|
||||
['rhythm_e']= {"节奏", "简单", "很无聊的"},
|
||||
['rhythm_h']= {"节奏", "困难", "好玩么?"},
|
||||
['rhythm_u']= {"节奏", "极限", "真男人不玩低难度"},
|
||||
['blind_e']= {"隐形", "半隐", "谁都能玩"},
|
||||
['blind_n']= {"隐形", "全隐", "稍加练习即可"},
|
||||
['blind_h']= {"隐形", "瞬隐", "和上一个一样"},
|
||||
['blind_l']= {"隐形", "瞬隐+", "这个确实挺难的"},
|
||||
['blind_u']= {"隐形", "啊这", "你准备好了吗"},
|
||||
['blind_wtf']= {"隐形", "不会吧", "还没准备好"},
|
||||
['classic_fast']= {"高速经典", "CTWC", "就这?简单"},
|
||||
['survivor_e']= {"生存", "简单", "这都玩不下去?不会吧"},
|
||||
['survivor_n']= {"生存", "普通", "呵,这都玩不过?"},
|
||||
['survivor_h']= {"生存", "困难", "所以呢?"},
|
||||
['survivor_l']= {"生存", "疯狂", "然后呢?"},
|
||||
['survivor_u']= {"生存", "极限", "舒服了"},
|
||||
['attacker_h']= {"进攻", "困难", "进攻练习"},
|
||||
['attacker_u']= {"进攻", "极限", "进攻练习"},
|
||||
['defender_n']= {"防守", "普通", "防守练习"},
|
||||
['defender_l']= {"防守", "疯狂", "防守练习"},
|
||||
['dig_h']= {"挖掘", "困难", "挖掘练习"},
|
||||
['dig_u']= {"挖掘", "极限", "挖掘练习"},
|
||||
['bigbang']= {"大爆炸", "简单", "All-spin 入门教程\n未制作完成,落块即通"},
|
||||
['c4wtrain_n']= {"C4W练习", "普通", "无 限 连 击"},
|
||||
['c4wtrain_l']= {"C4W练习", "疯狂", "无 限 连 击"},
|
||||
['pctrain_n']= {"全清训练", "普通", "随便打打"},
|
||||
['pctrain_l']= {"全清训练", "疯狂", "建议不打"},
|
||||
['pc_n']= {"全清挑战", "普通", "100行内刷PC"},
|
||||
['pc_h']= {"全清挑战", "困难", "100行内刷PC"},
|
||||
['pc_l']= {"全清挑战", "疯狂", "100行内刷PC"},
|
||||
['tech_n']= {"科研", "普通", "禁止断B2B"},
|
||||
['tech_n_plus']= {"科研", "普通+", "仅允许spin与PC"},
|
||||
['tech_h']= {"科研", "困难", "禁止断B2B"},
|
||||
['tech_h_plus']= {"科研", "困难+", "仅允许spin与PC"},
|
||||
['tech_l']= {"科研", "疯狂", "禁止断B2B"},
|
||||
['tech_l_plus']= {"科研", "疯狂+", "仅允许spin与PC"},
|
||||
['tech_finesse']= {"科研", "极简", "强制最简操作"},
|
||||
['tech_finesse_f']= {"科研", "极简+", "禁止普通消除,强制最简操作"},
|
||||
['tsd_e']= {"TSD挑战", "简单", "刷T2"},
|
||||
['tsd_h']= {"TSD挑战", "困难", "刷T2"},
|
||||
['tsd_u']= {"TSD挑战", "极限", "刷T2"},
|
||||
['backfire_n']= {"自攻自受", "普通", "200攻击很少的,冲冲冲"},
|
||||
['backfire_h']= {"自攻自受", "困难", "你在害怕什么"},
|
||||
['backfire_l']= {"自攻自受", "疯狂", "别怂啊,打攻击呀"},
|
||||
['backfire_u']= {"自攻自受", "极限", "能把自己玩死,不会吧"},
|
||||
['zen']= {"禅", "200", "不限时200行"},
|
||||
['ultra']= {"限时打分", "挑战", "2分钟刷分"},
|
||||
['infinite']= {"无尽", "", "真的有人会玩这个?"},
|
||||
['infinite_dig']= {"无尽:挖掘", "", "闲得慌的话来挖"},
|
||||
['sprintFix']= {"竞速", "无移动"},
|
||||
['sprintLock']= {"竞速", "无旋转"},
|
||||
['marathon_bfmax']= {"马拉松", "极限"},
|
||||
['custom_clear']= {"自定义", "普通"},
|
||||
['custom_puzzle']= {"自定义", "拼图"},
|
||||
},
|
||||
getTip={refuseCopy=true,
|
||||
"100apm?你倒是不用开局定式连续打几把",
|
||||
|
||||
@@ -98,8 +98,7 @@ return{
|
||||
started="游戏中",
|
||||
joinRoom="进入房间",
|
||||
leaveRoom="离开房间",
|
||||
notReady="等待中",
|
||||
beReady="准备",
|
||||
ready="准备!",
|
||||
champion="$1 获胜",
|
||||
chatRemain="人数:",
|
||||
chatStart="------消息的开头------",
|
||||
@@ -236,11 +235,11 @@ return{
|
||||
},
|
||||
pause={
|
||||
setting="设置(S)",
|
||||
replay= "回放(P)",
|
||||
replay="回放(P)",
|
||||
save="保存(O)",
|
||||
resume= "继续(esc)",
|
||||
resume="继续(esc)",
|
||||
restart="重新开始(R)",
|
||||
quit= "退出(Q)",
|
||||
quit="退出(Q)",
|
||||
},
|
||||
net_menu={
|
||||
ffa="FFA",
|
||||
@@ -255,8 +254,6 @@ return{
|
||||
new="创建房间(2)",
|
||||
new2="创建房间(5)",
|
||||
join="加入",
|
||||
up="↑",
|
||||
down="↓",
|
||||
},
|
||||
net_game={
|
||||
ready="准备",
|
||||
@@ -276,6 +273,7 @@ return{
|
||||
reTime="开局等待时间",
|
||||
RS="旋转系统",
|
||||
layout="外观",
|
||||
dataSaving="省流模式",
|
||||
autoPause="失去焦点自动暂停",
|
||||
swap="组合键切换攻击模式",
|
||||
fine="极简操作提示音",
|
||||
@@ -415,8 +413,9 @@ return{
|
||||
clear="开始-消除",
|
||||
puzzle="开始-拼图",
|
||||
|
||||
reset="重置所有(Del)",
|
||||
advance="更多设置(A)",
|
||||
mod="Mods",
|
||||
mod="Mods (F1)",
|
||||
field="场地编辑(F)",
|
||||
sequence="序列编辑(S)",
|
||||
mission="任务编辑(M)",
|
||||
@@ -449,20 +448,20 @@ return{
|
||||
|
||||
any="不定",
|
||||
space="×",
|
||||
smartPen="智能",
|
||||
smart="智能",
|
||||
|
||||
pushLine="增加一行(K)",
|
||||
delLine="消除行(L)",
|
||||
push="增加一行(K)",
|
||||
del="消除行(L)",
|
||||
|
||||
copy="复制",
|
||||
paste="粘贴",
|
||||
clear="清除",
|
||||
demo="不显示×",
|
||||
|
||||
newPage="新页面(N)",
|
||||
delPage="删除页面(M)",
|
||||
prevPage="上一页面",
|
||||
nextPage="下一页面",
|
||||
newPg="新页面(N)",
|
||||
delPg="删除页面(M)",
|
||||
prevPg="上一页面",
|
||||
nextPg="下一页面",
|
||||
},
|
||||
custom_sequence={
|
||||
title="自定义游戏",
|
||||
@@ -660,109 +659,104 @@ return{
|
||||
importData="导入统计数据",
|
||||
importSetting="导入设置",
|
||||
importVK="导入虚拟按键布局",
|
||||
|
||||
reset="重置?",
|
||||
resetUnlock="重置解锁/等级",
|
||||
resetRecord="重置纪录",
|
||||
resetData="重置统计",
|
||||
},
|
||||
error={
|
||||
cmd="控制台",
|
||||
console="控制台",
|
||||
quit="退出",
|
||||
},
|
||||
},
|
||||
modes={
|
||||
["sprint_10l"]= {"竞速", "10L", "消除10行"},
|
||||
["sprint_20l"]= {"竞速", "20L", "消除20行"},
|
||||
["sprint_40l"]= {"竞速", "40L", "消除40行"},
|
||||
["sprint_100l"]= {"竞速", "100L", "消除100行"},
|
||||
["sprint_400l"]= {"竞速", "400L", "消除400行"},
|
||||
["sprint_1000l"]= {"竞速", "1000L", "消除1000行"},
|
||||
["sprintPenta"]= {"竞速", "五连块", "伤脑筋十八块"},
|
||||
["sprintMPH"]= {"竞速", "MPH", "纯随机\n无预览\n无暂存"},
|
||||
["dig_10l"]= {"挖掘", "10L", "挖掘10行"},
|
||||
["dig_40l"]= {"挖掘", "40L", "挖掘40行"},
|
||||
["dig_100l"]= {"挖掘", "100L", "挖掘100行"},
|
||||
["dig_400l"]= {"挖掘", "400L", "挖掘400行"},
|
||||
["dig_1000l"]= {"挖掘", "1000L", "挖掘1000行"},
|
||||
["drought_n"]= {"干旱", "100L", "你I没了"},
|
||||
["drought_l"]= {"干旱", "100L", "后 妈 发 牌"},
|
||||
["marathon_n"]= {"马拉松", "普通", "200行加速马拉松"},
|
||||
["marathon_h"]= {"马拉松", "困难", "200行高速马拉松"},
|
||||
["solo_e"]= {"单挑", "简单", "打败AI"},
|
||||
["solo_n"]= {"单挑", "普通", "打败AI"},
|
||||
["solo_h"]= {"单挑", "困难", "打败AI"},
|
||||
["solo_l"]= {"单挑", "疯狂", "打败AI"},
|
||||
["solo_u"]= {"单挑", "极限", "打败AI"},
|
||||
["techmino49_e"]= {"49人混战", "简单", "49人混战,活到最后"},
|
||||
["techmino49_h"]= {"49人混战", "困难", "49人混战,活到最后"},
|
||||
["techmino49_u"]= {"49人混战", "极限", "49人混战,活到最后"},
|
||||
["techmino99_e"]= {"99人混战", "简单", "99人混战,活到最后"},
|
||||
["techmino99_h"]= {"99人混战", "困难", "99人混战,活到最后"},
|
||||
["techmino99_u"]= {"99人混战", "极限", "99人混战,活到最后"},
|
||||
["round_e"]= {"回合制", "简单", "下棋模式"},
|
||||
["round_n"]= {"回合制", "普通", "下棋模式"},
|
||||
["round_h"]= {"回合制", "困难", "下棋模式"},
|
||||
["round_l"]= {"回合制", "疯狂", "下棋模式"},
|
||||
["round_u"]= {"回合制", "极限", "下棋模式"},
|
||||
["master_beginner"]= {"大师", "疯狂", "20G初心者练习"},
|
||||
["master_advance"]= {"大师", "极限", "上级者20G挑战"},
|
||||
["master_final"]= {"大师", "终点", "究极20G:无法触及的终点"},
|
||||
["master_phantasm"]= {"大师", "虚幻", "虚幻20G:???"},
|
||||
["master_extra"]= {"宗师", "EX", "成为方块大师"},
|
||||
["rhythm_e"]= {"节奏", "简单", "200行低速节奏马拉松"},
|
||||
["rhythm_h"]= {"节奏", "困难", "200行中速节奏马拉松"},
|
||||
["rhythm_u"]= {"节奏", "极限", "200行高速节奏马拉松"},
|
||||
["blind_e"]= {"隐形", "半隐", "不强大脑"},
|
||||
["blind_n"]= {"隐形", "全隐", "挺强大脑"},
|
||||
["blind_h"]= {"隐形", "瞬隐", "很强大脑"},
|
||||
["blind_l"]= {"隐形", "瞬隐+", "最强大脑"},
|
||||
["blind_u"]= {"隐形", "啊这", "你准备好了吗"},
|
||||
["blind_wtf"]= {"隐形", "不会吧", "还没准备好"},
|
||||
["classic_fast"]= {"高速经典", "CTWC", "高速经典"},
|
||||
["survivor_e"]= {"生存", "简单", "你能存活多久?"},
|
||||
["survivor_n"]= {"生存", "普通", "你能存活多久?"},
|
||||
["survivor_h"]= {"生存", "困难", "你能存活多久?"},
|
||||
["survivor_l"]= {"生存", "疯狂", "你能存活多久?"},
|
||||
["survivor_u"]= {"生存", "极限", "你能存活多久?"},
|
||||
["attacker_h"]= {"进攻", "困难", "进攻练习"},
|
||||
["attacker_u"]= {"进攻", "极限", "进攻练习"},
|
||||
["defender_n"]= {"防守", "普通", "防守练习"},
|
||||
["defender_l"]= {"防守", "疯狂", "防守练习"},
|
||||
["dig_h"]= {"挖掘", "困难", "挖掘练习"},
|
||||
["dig_u"]= {"挖掘", "极限", "挖掘练习"},
|
||||
["bigbang"]= {"大爆炸", "简单", "All-spin 入门教程\n未制作完成,落块即通"},
|
||||
["c4wtrain_n"]= {"C4W练习", "普通", "无 限 连 击"},
|
||||
["c4wtrain_l"]= {"C4W练习", "疯狂", "无 限 连 击"},
|
||||
["pctrain_n"]= {"全清训练", "普通", "简易PC题库,熟悉全清定式的组合"},
|
||||
["pctrain_l"]= {"全清训练", "疯狂", "困难PC题库,强算力者进"},
|
||||
["pc_n"]= {"全清挑战", "普通", "100行内刷PC"},
|
||||
["pc_h"]= {"全清挑战", "困难", "100行内刷PC"},
|
||||
["pc_l"]= {"全清挑战", "疯狂", "100行内刷PC"},
|
||||
["tech_n"]= {"科研", "普通", "禁止断B2B"},
|
||||
["tech_n_plus"]= {"科研", "普通+", "仅允许spin与PC"},
|
||||
["tech_h"]= {"科研", "困难", "禁止断B2B"},
|
||||
["tech_h_plus"]= {"科研", "困难+", "仅允许spin与PC"},
|
||||
["tech_l"]= {"科研", "疯狂", "禁止断B2B"},
|
||||
["tech_l_plus"]= {"科研", "疯狂+", "仅允许spin与PC"},
|
||||
["tech_finesse"]= {"科研", "极简", "强制最简操作"},
|
||||
["tech_finesse_f"]= {"科研", "极简+", "禁止普通消除,强制最简操作"},
|
||||
["tsd_e"]= {"TSD挑战", "简单", "你能连续做几个TSD?"},
|
||||
["tsd_h"]= {"TSD挑战", "困难", "你能连续做几个TSD?"},
|
||||
["tsd_u"]= {"TSD挑战", "极限", "你能连续做几个TSD?"},
|
||||
["backfire_n"]= {"Backfire", "普通", "打出100攻击"},
|
||||
["backfire_h"]= {"Backfire", "困难", "打出100攻击"},
|
||||
["backfire_l"]= {"Backfire", "疯狂", "打出100攻击"},
|
||||
["backfire_u"]= {"Backfire", "极限", "打出100攻击"},
|
||||
["zen"]= {"禅", "200", "不限时200行"},
|
||||
["ultra"]= {"限时打分", "挑战", "在两分钟内尽可能拿到最多的分数"},
|
||||
["infinite"]= {"无尽", "", "沙盒"},
|
||||
["infinite_dig"]= {"无尽:挖掘", "", "挖呀挖呀挖"},
|
||||
["sprintFix"]= {"竞速", "无移动"},
|
||||
["sprintLock"]= {"竞速", "无旋转"},
|
||||
["marathon_bfmax"]= {"马拉松", "极限"},
|
||||
["custom_clear"]= {"自定义", "普通"},
|
||||
["custom_puzzle"]= {"自定义", "拼图"},
|
||||
['sprint_10l']= {"竞速", "10L", "消除10行"},
|
||||
['sprint_20l']= {"竞速", "20L", "消除20行"},
|
||||
['sprint_40l']= {"竞速", "40L", "消除40行"},
|
||||
['sprint_100l']= {"竞速", "100L", "消除100行"},
|
||||
['sprint_400l']= {"竞速", "400L", "消除400行"},
|
||||
['sprint_1000l']= {"竞速", "1000L", "消除1000行"},
|
||||
['sprintPenta']= {"竞速", "五连块", "伤脑筋十八块"},
|
||||
['sprintMPH']= {"竞速", "MPH", "纯随机\n无预览\n无暂存"},
|
||||
['dig_10l']= {"挖掘", "10L", "挖掘10行"},
|
||||
['dig_40l']= {"挖掘", "40L", "挖掘40行"},
|
||||
['dig_100l']= {"挖掘", "100L", "挖掘100行"},
|
||||
['dig_400l']= {"挖掘", "400L", "挖掘400行"},
|
||||
['dig_1000l']= {"挖掘", "1000L", "挖掘1000行"},
|
||||
['drought_n']= {"干旱", "100L", "你I没了"},
|
||||
['drought_l']= {"干旱", "100L", "后 妈 发 牌"},
|
||||
['marathon_n']= {"马拉松", "普通", "200行加速马拉松"},
|
||||
['marathon_h']= {"马拉松", "困难", "200行高速马拉松"},
|
||||
['solo_e']= {"单挑", "简单", "打败AI"},
|
||||
['solo_n']= {"单挑", "普通", "打败AI"},
|
||||
['solo_h']= {"单挑", "困难", "打败AI"},
|
||||
['solo_l']= {"单挑", "疯狂", "打败AI"},
|
||||
['solo_u']= {"单挑", "极限", "打败AI"},
|
||||
['techmino49_e']= {"49人混战", "简单", "49人混战,活到最后"},
|
||||
['techmino49_h']= {"49人混战", "困难", "49人混战,活到最后"},
|
||||
['techmino49_u']= {"49人混战", "极限", "49人混战,活到最后"},
|
||||
['techmino99_e']= {"99人混战", "简单", "99人混战,活到最后"},
|
||||
['techmino99_h']= {"99人混战", "困难", "99人混战,活到最后"},
|
||||
['techmino99_u']= {"99人混战", "极限", "99人混战,活到最后"},
|
||||
['round_e']= {"回合制", "简单", "下棋模式"},
|
||||
['round_n']= {"回合制", "普通", "下棋模式"},
|
||||
['round_h']= {"回合制", "困难", "下棋模式"},
|
||||
['round_l']= {"回合制", "疯狂", "下棋模式"},
|
||||
['round_u']= {"回合制", "极限", "下棋模式"},
|
||||
['master_beginner']= {"大师", "疯狂", "20G初心者练习"},
|
||||
['master_advance']= {"大师", "极限", "上级者20G挑战"},
|
||||
['master_final']= {"大师", "终点", "究极20G:无法触及的终点"},
|
||||
['master_phantasm']= {"大师", "虚幻", "虚幻20G:???"},
|
||||
['master_extra']= {"宗师", "EX", "成为方块大师"},
|
||||
['rhythm_e']= {"节奏", "简单", "200行低速节奏马拉松"},
|
||||
['rhythm_h']= {"节奏", "困难", "200行中速节奏马拉松"},
|
||||
['rhythm_u']= {"节奏", "极限", "200行高速节奏马拉松"},
|
||||
['blind_e']= {"隐形", "半隐", "不强大脑"},
|
||||
['blind_n']= {"隐形", "全隐", "挺强大脑"},
|
||||
['blind_h']= {"隐形", "瞬隐", "很强大脑"},
|
||||
['blind_l']= {"隐形", "瞬隐+", "最强大脑"},
|
||||
['blind_u']= {"隐形", "啊这", "你准备好了吗"},
|
||||
['blind_wtf']= {"隐形", "不会吧", "还没准备好"},
|
||||
['classic_fast']= {"高速经典", "CTWC", "高速经典"},
|
||||
['survivor_e']= {"生存", "简单", "你能存活多久?"},
|
||||
['survivor_n']= {"生存", "普通", "你能存活多久?"},
|
||||
['survivor_h']= {"生存", "困难", "你能存活多久?"},
|
||||
['survivor_l']= {"生存", "疯狂", "你能存活多久?"},
|
||||
['survivor_u']= {"生存", "极限", "你能存活多久?"},
|
||||
['attacker_h']= {"进攻", "困难", "进攻练习"},
|
||||
['attacker_u']= {"进攻", "极限", "进攻练习"},
|
||||
['defender_n']= {"防守", "普通", "防守练习"},
|
||||
['defender_l']= {"防守", "疯狂", "防守练习"},
|
||||
['dig_h']= {"挖掘", "困难", "挖掘练习"},
|
||||
['dig_u']= {"挖掘", "极限", "挖掘练习"},
|
||||
['bigbang']= {"大爆炸", "简单", "All-spin 入门教程\n未制作完成,落块即通"},
|
||||
['c4wtrain_n']= {"C4W练习", "普通", "无 限 连 击"},
|
||||
['c4wtrain_l']= {"C4W练习", "疯狂", "无 限 连 击"},
|
||||
['pctrain_n']= {"全清训练", "普通", "简易PC题库,熟悉全清定式的组合"},
|
||||
['pctrain_l']= {"全清训练", "疯狂", "困难PC题库,强算力者进"},
|
||||
['pc_n']= {"全清挑战", "普通", "100行内刷PC"},
|
||||
['pc_h']= {"全清挑战", "困难", "100行内刷PC"},
|
||||
['pc_l']= {"全清挑战", "疯狂", "100行内刷PC"},
|
||||
['tech_n']= {"科研", "普通", "禁止断B2B"},
|
||||
['tech_n_plus']= {"科研", "普通+", "仅允许spin与PC"},
|
||||
['tech_h']= {"科研", "困难", "禁止断B2B"},
|
||||
['tech_h_plus']= {"科研", "困难+", "仅允许spin与PC"},
|
||||
['tech_l']= {"科研", "疯狂", "禁止断B2B"},
|
||||
['tech_l_plus']= {"科研", "疯狂+", "仅允许spin与PC"},
|
||||
['tech_finesse']= {"科研", "极简", "强制最简操作"},
|
||||
['tech_finesse_f']= {"科研", "极简+", "禁止普通消除,强制最简操作"},
|
||||
['tsd_e']= {"TSD挑战", "简单", "你能连续做几个TSD?"},
|
||||
['tsd_h']= {"TSD挑战", "困难", "你能连续做几个TSD?"},
|
||||
['tsd_u']= {"TSD挑战", "极限", "你能连续做几个TSD?"},
|
||||
['backfire_n']= {"Backfire", "普通", "打出100攻击"},
|
||||
['backfire_h']= {"Backfire", "困难", "打出100攻击"},
|
||||
['backfire_l']= {"Backfire", "疯狂", "打出100攻击"},
|
||||
['backfire_u']= {"Backfire", "极限", "打出100攻击"},
|
||||
['zen']= {"禅", "200", "不限时200行"},
|
||||
['ultra']= {"限时打分", "挑战", "在两分钟内尽可能拿到最多的分数"},
|
||||
['infinite']= {"无尽", "", "沙盒"},
|
||||
['infinite_dig']= {"无尽:挖掘", "", "挖呀挖呀挖"},
|
||||
['sprintFix']= {"竞速", "无移动"},
|
||||
['sprintLock']= {"竞速", "无旋转"},
|
||||
['marathon_bfmax']= {"马拉松", "极限"},
|
||||
['custom_clear']= {"自定义", "普通"},
|
||||
['custom_puzzle']= {"自定义", "拼图"},
|
||||
},
|
||||
getTip={refuseCopy=true,
|
||||
"...,合群了就会消失,不合群世界毁灭(指game over",
|
||||
@@ -803,6 +797,7 @@ return{
|
||||
"本游戏的B2B是气槽机制,和传统的开关机制不一样哦",
|
||||
"本游戏可不是休闲游戏。",
|
||||
"本游戏内置了几个休(ying)闲(he)小游戏哦~入口就藏在这个菜单",
|
||||
"本游戏在设计的时候受到了大量其他块游甚至一些音游的启发",
|
||||
"必须要软降才能到达的位置都会判定为极简操作",
|
||||
"别看攻击效率不高,其实消四还是很强的",
|
||||
"别问游戏名怎么取的,问就是随便想的",
|
||||
@@ -839,6 +834,7 @@ return{
|
||||
"方块默认出现的方向都是重心在下哦",
|
||||
"方块能吃吗",
|
||||
"服务器随时爆炸",
|
||||
"开启省流模式后将不会加载用户头像(应该能省不少流吧)",
|
||||
"感觉自己明明按键了但是没反应?你真的按到了吗?",
|
||||
"感觉自己速度到上限了?试着把das调低一点",
|
||||
"感谢群友帮忙想tip",
|
||||
@@ -858,7 +854,7 @@ return{
|
||||
"很有精神!",
|
||||
"混合消除即将到来!",
|
||||
"即使被顶到天上了也不要放弃,每一行垃圾都有可能成为你的武器",
|
||||
"极简率决定了你大约的速度上限和相等手速下的放块速度",
|
||||
"极简率决定了你大概的速度上限和相等手速下的放块速度",
|
||||
"假如生活欺骗了你,不要悲伤,不要心急,还有块陪着你",
|
||||
"架空消除即将到来!",
|
||||
"建议使用双手游玩",
|
||||
@@ -881,16 +877,15 @@ return{
|
||||
"你今天的人品值是:"..math.random(100),
|
||||
"你今天的人品值是:0.22",
|
||||
"你今天的人品值是:0.26",
|
||||
"你今天的人品值是:0",
|
||||
"你今天的人品值是:12.7",
|
||||
"你今天的人品值是:2.6",
|
||||
"你今天的人品值是:22",
|
||||
"你今天的人品值是:26",
|
||||
"你今天的人品值是:28.3",
|
||||
"你今天的人品值是:35.5",
|
||||
"你今天的人品值是:6.26",
|
||||
"你今天的人品值是:6.26",
|
||||
"你今天的人品值是:62.6",
|
||||
"你今天的人品值是:87.2",
|
||||
"你今天的人品值是:89.5",
|
||||
"你今天的人品值是:9999%",
|
||||
"你可以从统计页面打开游戏存档目录",
|
||||
"你们考虑过Z酱的感受吗?没有!你们只考虑你自己。",
|
||||
@@ -915,7 +910,7 @@ return{
|
||||
"术语不认识?去帮助-词典里查查吧",
|
||||
"水平是随着时间一点点提升的,不是几天几星期就能玩好的哦",
|
||||
"四连块总共7种",
|
||||
"虽然极简连击和极简率计算看着很怪,但是很科学!",
|
||||
"虽然极简连击和极简率计算看着很怪,但以后你会发现还挺科学!",
|
||||
"提前旋转等功能可以用来救命",
|
||||
"天哪,我竟然是一条凑数tip",
|
||||
"挖掘能力在对战里非常非常非常重要!!!!",
|
||||
@@ -994,15 +989,15 @@ return{
|
||||
"l-=-1",
|
||||
"Let-The-Bass-Kick!",
|
||||
"pps-0.01",
|
||||
"rm -rf /*",
|
||||
"shutdown -h now",
|
||||
"sin(α+β)=SαCβ+SβCα",
|
||||
"sin²α-cos²β=-C(α+β)C(α-β)",
|
||||
"sin²α-sin²β=S(α+β)S(α-β)",
|
||||
"sin2α=2SαCα",
|
||||
"sofunhowtoget",
|
||||
"Staff名单里飘过的是赞助榜单,喜欢本游戏的话可以给我们打赞助支持开发哦~",
|
||||
"SΔABC=√(h(h-a)(h-b)(h-c)), h=(a+b+c)/2",
|
||||
"Tech生日不太清楚,那就定在2019.6.26吧",
|
||||
"Tech也有节日主题了哦",
|
||||
"Techmino = Technique + tetromino",
|
||||
"Techmino 好玩!",
|
||||
"Techmino 濂界帺锛",
|
||||
@@ -1010,9 +1005,13 @@ return{
|
||||
"Techmino n.铁壳米诺(游戏名)",
|
||||
"Techmino安卓下载",
|
||||
"Techmino好玩!",
|
||||
"Techmino生日不太清楚,那就定在2019.6.26吧",
|
||||
"Techmino也有节日主题了哦",
|
||||
"Techmino有一个Nspire-CX版本!",
|
||||
"Techmino在哪里下载",
|
||||
"Techminohaowan",
|
||||
"Techmino怎么念啊",
|
||||
"techminohaowan",
|
||||
"techminoisfun",
|
||||
"viod main[]",
|
||||
"while(false)",
|
||||
"Z酱竟是我自己",
|
||||
|
||||
@@ -78,7 +78,7 @@ return{
|
||||
spin7="转",
|
||||
},
|
||||
customGame={
|
||||
mod="模组",
|
||||
mod="模组(F1)",
|
||||
},
|
||||
custom_advance={
|
||||
nextCount="预览个数",
|
||||
@@ -139,96 +139,96 @@ return{
|
||||
},
|
||||
},
|
||||
modes={
|
||||
["sprint_10l"]= {"竞速", "10行", "消除10行"},
|
||||
["sprint_20l"]= {"竞速", "20行", "消除20行"},
|
||||
["sprint_40l"]= {"竞速", "40行", "消除40行"},
|
||||
["sprint_100l"]= {"竞速", "100行", "消除100行"},
|
||||
["sprint_400l"]= {"竞速", "400行", "消除400行"},
|
||||
["sprint_1000l"]= {"竞速", "1000行", "消除1000行"},
|
||||
["sprintPenta"]= {"竞速", "五连块", "伤脑筋十八块"},
|
||||
["sprintMPH"]= {"竞速", "纯净", "纯随机\n无预览\n无暂存"},
|
||||
["dig_10l"]= {"挖掘", "10L", "挖掘10行"},
|
||||
["dig_40l"]= {"挖掘", "40L", "挖掘40行"},
|
||||
["dig_100l"]= {"挖掘", "100L", "挖掘100行"},
|
||||
["dig_400l"]= {"挖掘", "400L", "挖掘400行"},
|
||||
["dig_1000l"]= {"挖掘", "1000L", "挖掘1000行"},
|
||||
["drought_n"]= {"干旱", "100行", "你I没了"},
|
||||
["drought_l"]= {"干旱", "100行", "后 妈 发 牌"},
|
||||
["marathon_n"]= {"马拉松", "普通", "200行加速马拉松"},
|
||||
["marathon_h"]= {"马拉松", "困难", "200行高速马拉松"},
|
||||
["solo_e"]= {"单挑", "简单", "打败机器人"},
|
||||
["solo_n"]= {"单挑", "普通", "打败机器人"},
|
||||
["solo_h"]= {"单挑", "困难", "打败机器人"},
|
||||
["solo_l"]= {"单挑", "疯狂", "打败机器人"},
|
||||
["solo_u"]= {"单挑", "极限", "打败机器人"},
|
||||
["techmino49_e"]= {"49人混战", "简单", "49人混战,活到最后"},
|
||||
["techmino49_h"]= {"49人混战", "困难", "49人混战,活到最后"},
|
||||
["techmino49_u"]= {"49人混战", "极限", "49人混战,活到最后"},
|
||||
["techmino99_e"]= {"99人混战", "简单", "99人混战,活到最后"},
|
||||
["techmino99_h"]= {"99人混战", "困难", "99人混战,活到最后"},
|
||||
["techmino99_u"]= {"99人混战", "极限", "99人混战,活到最后"},
|
||||
["round_e"]= {"回合制", "简单", "下棋模式"},
|
||||
["round_n"]= {"回合制", "普通", "下棋模式"},
|
||||
["round_h"]= {"回合制", "困难", "下棋模式"},
|
||||
["round_l"]= {"回合制", "疯狂", "下棋模式"},
|
||||
["round_u"]= {"回合制", "极限", "下棋模式"},
|
||||
["master_beginner"]= {"大师", "疯狂", "20G初心者练习"},
|
||||
["master_advance"]= {"大师", "极限", "上级者20G挑战"},
|
||||
["master_final"]= {"大师", "终点", "究极20G:无法触及的终点"},
|
||||
["master_phantasm"]= {"大师", "虚幻", "虚幻20G:???"},
|
||||
["master_extra"]= {"宗师", "EX", "成为方块大师"},
|
||||
["rhythm_e"]= {"节奏", "简单", "200行低速节奏马拉松"},
|
||||
["rhythm_h"]= {"节奏", "困难", "200行中速节奏马拉松"},
|
||||
["rhythm_u"]= {"节奏", "极限", "200行高速节奏马拉松"},
|
||||
["blind_e"]= {"隐形", "半隐", "不强大脑"},
|
||||
["blind_n"]= {"隐形", "全隐", "挺强大脑"},
|
||||
["blind_h"]= {"隐形", "瞬隐", "很强大脑"},
|
||||
["blind_l"]= {"隐形", "瞬隐+", "超强大脑"},
|
||||
["blind_u"]= {"隐形", "啊这", "你准备好了吗"},
|
||||
["blind_wtf"]= {"隐形", "不会吧", "还没准备好"},
|
||||
["classic_fast"]= {"高速经典", "CTWC", "高速经典"},
|
||||
["survivor_e"]= {"生存", "简单", "你能存活多久?"},
|
||||
["survivor_n"]= {"生存", "普通", "你能存活多久?"},
|
||||
["survivor_h"]= {"生存", "困难", "你能存活多久?"},
|
||||
["survivor_l"]= {"生存", "疯狂", "你能存活多久?"},
|
||||
["survivor_u"]= {"生存", "极限", "你能存活多久?"},
|
||||
["attacker_h"]= {"进攻", "困难", "进攻练习"},
|
||||
["attacker_u"]= {"进攻", "极限", "进攻练习"},
|
||||
["defender_n"]= {"防守", "普通", "防守练习"},
|
||||
["defender_l"]= {"防守", "疯狂", "防守练习"},
|
||||
["dig_h"]= {"挖掘", "困难", "挖掘练习"},
|
||||
["dig_u"]= {"挖掘", "极限", "挖掘练习"},
|
||||
["bigbang"]= {"大爆炸", "简单", "All-spin 入门教程\n未制作完成,落块即通"},
|
||||
["c4wtrain_n"]= {"中四宽练习", "普通", "无 限 连 击"},
|
||||
["c4wtrain_l"]= {"中四宽练习", "疯狂", "无 限 连 击"},
|
||||
["pctrain_n"]= {"全清训练", "普通", "简易全清题库,熟悉全清定式的组合"},
|
||||
["pctrain_l"]= {"全清训练", "疯狂", "困难PC题库,强算力者进"},
|
||||
["pc_n"]= {"全清挑战", "普通", "100行内刷全清"},
|
||||
["pc_h"]= {"全清挑战", "困难", "100行内刷全清"},
|
||||
["pc_l"]= {"全清挑战", "疯狂", "100行内刷全清"},
|
||||
["tech_n"]= {"科研", "普通", "禁止断B2B"},
|
||||
["tech_n_plus"]= {"科研", "普通+", "仅允许回旋与全清"},
|
||||
["tech_h"]= {"科研", "困难", "禁止断B2B"},
|
||||
["tech_h_plus"]= {"科研", "困难+", "仅允许回旋与全清"},
|
||||
["tech_l"]= {"科研", "疯狂", "禁止断B2B"},
|
||||
["tech_l_plus"]= {"科研", "疯狂+", "仅允许spin与PC"},
|
||||
["tech_finesse"]= {"科研", "极简", "强制最简操作"},
|
||||
["tech_finesse_f"]= {"科研", "极简+", "禁止普通消除,强制最简操作"},
|
||||
["tsd_e"]= {"T2挑战", "简单", "你能连续做几个T旋双清?"},
|
||||
["tsd_h"]= {"T2挑战", "困难", "你能连续做几个T旋双清?"},
|
||||
["tsd_u"]= {"T2挑战", "极限", "你能连续做几个T旋双清?"},
|
||||
["backfire_n"]= {"自攻自防", "普通", "打出100攻击"},
|
||||
["backfire_h"]= {"自攻自防", "困难", "打出100攻击"},
|
||||
["backfire_l"]= {"自攻自防", "疯狂", "打出100攻击"},
|
||||
["backfire_u"]= {"自攻自防", "极限", "打出100攻击"},
|
||||
["zen"]= {"禅", "200", "不限时200行"},
|
||||
["ultra"]= {"限时打分", "挑战", "在两分钟内尽可能拿到最多的分数"},
|
||||
["infinite"]= {"无尽", "", "沙盒"},
|
||||
["infinite_dig"]= {"无尽:挖掘", "", "挖呀挖呀挖"},
|
||||
["sprintFix"]= {"竞速", "无移动"},
|
||||
["sprintLock"]= {"竞速", "无旋转"},
|
||||
["marathon_bfmax"]= {"马拉松", "极限"},
|
||||
["custom_clear"]= {"自定义", "普通"},
|
||||
["custom_puzzle"]= {"自定义", "拼图"},
|
||||
['sprint_10l']= {"竞速", "10行", "消除10行"},
|
||||
['sprint_20l']= {"竞速", "20行", "消除20行"},
|
||||
['sprint_40l']= {"竞速", "40行", "消除40行"},
|
||||
['sprint_100l']= {"竞速", "100行", "消除100行"},
|
||||
['sprint_400l']= {"竞速", "400行", "消除400行"},
|
||||
['sprint_1000l']= {"竞速", "1000行", "消除1000行"},
|
||||
['sprintPenta']= {"竞速", "五连块", "伤脑筋十八块"},
|
||||
['sprintMPH']= {"竞速", "纯净", "纯随机\n无预览\n无暂存"},
|
||||
['dig_10l']= {"挖掘", "10L", "挖掘10行"},
|
||||
['dig_40l']= {"挖掘", "40L", "挖掘40行"},
|
||||
['dig_100l']= {"挖掘", "100L", "挖掘100行"},
|
||||
['dig_400l']= {"挖掘", "400L", "挖掘400行"},
|
||||
['dig_1000l']= {"挖掘", "1000L", "挖掘1000行"},
|
||||
['drought_n']= {"干旱", "100行", "你I没了"},
|
||||
['drought_l']= {"干旱", "100行", "后 妈 发 牌"},
|
||||
['marathon_n']= {"马拉松", "普通", "200行加速马拉松"},
|
||||
['marathon_h']= {"马拉松", "困难", "200行高速马拉松"},
|
||||
['solo_e']= {"单挑", "简单", "打败机器人"},
|
||||
['solo_n']= {"单挑", "普通", "打败机器人"},
|
||||
['solo_h']= {"单挑", "困难", "打败机器人"},
|
||||
['solo_l']= {"单挑", "疯狂", "打败机器人"},
|
||||
['solo_u']= {"单挑", "极限", "打败机器人"},
|
||||
['techmino49_e']= {"49人混战", "简单", "49人混战,活到最后"},
|
||||
['techmino49_h']= {"49人混战", "困难", "49人混战,活到最后"},
|
||||
['techmino49_u']= {"49人混战", "极限", "49人混战,活到最后"},
|
||||
['techmino99_e']= {"99人混战", "简单", "99人混战,活到最后"},
|
||||
['techmino99_h']= {"99人混战", "困难", "99人混战,活到最后"},
|
||||
['techmino99_u']= {"99人混战", "极限", "99人混战,活到最后"},
|
||||
['round_e']= {"回合制", "简单", "下棋模式"},
|
||||
['round_n']= {"回合制", "普通", "下棋模式"},
|
||||
['round_h']= {"回合制", "困难", "下棋模式"},
|
||||
['round_l']= {"回合制", "疯狂", "下棋模式"},
|
||||
['round_u']= {"回合制", "极限", "下棋模式"},
|
||||
['master_beginner']= {"大师", "疯狂", "20G初心者练习"},
|
||||
['master_advance']= {"大师", "极限", "上级者20G挑战"},
|
||||
['master_final']= {"大师", "终点", "究极20G:无法触及的终点"},
|
||||
['master_phantasm']= {"大师", "虚幻", "虚幻20G:???"},
|
||||
['master_extra']= {"宗师", "EX", "成为方块大师"},
|
||||
['rhythm_e']= {"节奏", "简单", "200行低速节奏马拉松"},
|
||||
['rhythm_h']= {"节奏", "困难", "200行中速节奏马拉松"},
|
||||
['rhythm_u']= {"节奏", "极限", "200行高速节奏马拉松"},
|
||||
['blind_e']= {"隐形", "半隐", "不强大脑"},
|
||||
['blind_n']= {"隐形", "全隐", "挺强大脑"},
|
||||
['blind_h']= {"隐形", "瞬隐", "很强大脑"},
|
||||
['blind_l']= {"隐形", "瞬隐+", "超强大脑"},
|
||||
['blind_u']= {"隐形", "啊这", "你准备好了吗"},
|
||||
['blind_wtf']= {"隐形", "不会吧", "还没准备好"},
|
||||
['classic_fast']= {"高速经典", "CTWC", "高速经典"},
|
||||
['survivor_e']= {"生存", "简单", "你能存活多久?"},
|
||||
['survivor_n']= {"生存", "普通", "你能存活多久?"},
|
||||
['survivor_h']= {"生存", "困难", "你能存活多久?"},
|
||||
['survivor_l']= {"生存", "疯狂", "你能存活多久?"},
|
||||
['survivor_u']= {"生存", "极限", "你能存活多久?"},
|
||||
['attacker_h']= {"进攻", "困难", "进攻练习"},
|
||||
['attacker_u']= {"进攻", "极限", "进攻练习"},
|
||||
['defender_n']= {"防守", "普通", "防守练习"},
|
||||
['defender_l']= {"防守", "疯狂", "防守练习"},
|
||||
['dig_h']= {"挖掘", "困难", "挖掘练习"},
|
||||
['dig_u']= {"挖掘", "极限", "挖掘练习"},
|
||||
['bigbang']= {"大爆炸", "简单", "All-spin 入门教程\n未制作完成,落块即通"},
|
||||
['c4wtrain_n']= {"中四宽练习", "普通", "无 限 连 击"},
|
||||
['c4wtrain_l']= {"中四宽练习", "疯狂", "无 限 连 击"},
|
||||
['pctrain_n']= {"全清训练", "普通", "简易全清题库,熟悉全清定式的组合"},
|
||||
['pctrain_l']= {"全清训练", "疯狂", "困难PC题库,强算力者进"},
|
||||
['pc_n']= {"全清挑战", "普通", "100行内刷全清"},
|
||||
['pc_h']= {"全清挑战", "困难", "100行内刷全清"},
|
||||
['pc_l']= {"全清挑战", "疯狂", "100行内刷全清"},
|
||||
['tech_n']= {"科研", "普通", "禁止断B2B"},
|
||||
['tech_n_plus']= {"科研", "普通+", "仅允许回旋与全清"},
|
||||
['tech_h']= {"科研", "困难", "禁止断B2B"},
|
||||
['tech_h_plus']= {"科研", "困难+", "仅允许回旋与全清"},
|
||||
['tech_l']= {"科研", "疯狂", "禁止断B2B"},
|
||||
['tech_l_plus']= {"科研", "疯狂+", "仅允许spin与PC"},
|
||||
['tech_finesse']= {"科研", "极简", "强制最简操作"},
|
||||
['tech_finesse_f']= {"科研", "极简+", "禁止普通消除,强制最简操作"},
|
||||
['tsd_e']= {"T2挑战", "简单", "你能连续做几个T旋双清?"},
|
||||
['tsd_h']= {"T2挑战", "困难", "你能连续做几个T旋双清?"},
|
||||
['tsd_u']= {"T2挑战", "极限", "你能连续做几个T旋双清?"},
|
||||
['backfire_n']= {"自攻自防", "普通", "打出100攻击"},
|
||||
['backfire_h']= {"自攻自防", "困难", "打出100攻击"},
|
||||
['backfire_l']= {"自攻自防", "疯狂", "打出100攻击"},
|
||||
['backfire_u']= {"自攻自防", "极限", "打出100攻击"},
|
||||
['zen']= {"禅", "200", "不限时200行"},
|
||||
['ultra']= {"限时打分", "挑战", "在两分钟内尽可能拿到最多的分数"},
|
||||
['infinite']= {"无尽", "", "沙盒"},
|
||||
['infinite_dig']= {"无尽:挖掘", "", "挖呀挖呀挖"},
|
||||
['sprintFix']= {"竞速", "无移动"},
|
||||
['sprintLock']= {"竞速", "无旋转"},
|
||||
['marathon_bfmax']= {"马拉松", "极限"},
|
||||
['custom_clear']= {"自定义", "普通"},
|
||||
['custom_puzzle']= {"自定义", "拼图"},
|
||||
},
|
||||
}
|
||||
180
parts/modes.lua
180
parts/modes.lua
@@ -1,119 +1,119 @@
|
||||
return{
|
||||
{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_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_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_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_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_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="sprintPenta", x=210, y=-370, size=40,shape=3,icon="tech"},
|
||||
{name="sprintMPH", x=210, y=-230, 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="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_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="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_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_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_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="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_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="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_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_u", x=-1400,y=-1000,size=40,shape=1,icon="solo"},
|
||||
{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_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_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_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="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_u", x=-1300,y=-1800,size=40,shape=1,icon="t99"},
|
||||
{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_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_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="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_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_u", x=-1400,y=-800, size=40,shape=1,icon="round"},
|
||||
{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_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_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_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_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_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_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_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_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_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_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_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_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_wtf", x=150, y=-1200,size=35,shape=2,icon="hidden"},
|
||||
{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_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_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="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_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_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_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_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_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_u", x=300, y=-1000,size=40,shape=1,icon="attack"},
|
||||
{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="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_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="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_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="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_l", x=900, y=-400, size=40,shape=1,icon="pc"},
|
||||
{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_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_l", x=900, y=-220, 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_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_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_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_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_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_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_plus", x=200, y=230, size=35,shape=3,icon="tech"},
|
||||
{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_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_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_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', 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="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_u", x=1200, y=200, size=40,shape=1,icon="tsd"},
|
||||
{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_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_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_u", x=1250, y=350, size=35,shape=2,icon="backfire"},
|
||||
{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_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="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="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='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='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="sprintFix"},
|
||||
{name="sprintLock"},
|
||||
{name="marathon_bfmax"},
|
||||
{name='sprintFix'},
|
||||
{name='sprintLock'},
|
||||
{name='marathon_bfmax'},
|
||||
|
||||
{name="custom_puzzle"},
|
||||
{name="custom_clear"},
|
||||
{name='custom_puzzle'},
|
||||
{name='custom_clear'},
|
||||
|
||||
{name="netBattle"},
|
||||
}
|
||||
@@ -26,16 +26,16 @@ return{
|
||||
D.wave=D.wave+1
|
||||
if D.wave%10==0 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
|
||||
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,
|
||||
bg="rainbow2",bgm="shining terminal",
|
||||
bg='rainbow2',bgm='shining terminal',
|
||||
},
|
||||
pauseLimit=true,
|
||||
load=function()
|
||||
|
||||
@@ -30,19 +30,19 @@ return{
|
||||
D.wave=D.wave+1
|
||||
if D.wave%10==0 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
|
||||
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
|
||||
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,
|
||||
bg="rainbow2",bgm="shining terminal",
|
||||
bg='rainbow2',bgm='shining terminal',
|
||||
},
|
||||
pauseLimit=true,
|
||||
load=function()
|
||||
|
||||
@@ -8,10 +8,10 @@ return{
|
||||
P:receive(nil,P.lastPiece.atk,60,generateLine(P:RND(10)))
|
||||
end
|
||||
if P.stat.atk>=100 then
|
||||
P:win("finish")
|
||||
P:win('finish')
|
||||
end
|
||||
end,
|
||||
bg="tunnel",bgm="echo",
|
||||
bg='tunnel',bgm='echo',
|
||||
},
|
||||
pauseLimit=true,
|
||||
load=function()
|
||||
|
||||
@@ -8,10 +8,10 @@ return{
|
||||
P:receive(nil,P.lastPiece.atk,30,generateLine(P:RND(10)))
|
||||
end
|
||||
if P.stat.atk>=100 then
|
||||
P:win("finish")
|
||||
P:win('finish')
|
||||
end
|
||||
end,
|
||||
bg="blackhole",bgm="echo",
|
||||
bg='blackhole',bgm='echo',
|
||||
},
|
||||
pauseLimit=true,
|
||||
load=function()
|
||||
|
||||
@@ -7,10 +7,10 @@ return{
|
||||
P:receive(nil,P.lastPiece.atk,120,generateLine(P:RND(10)))
|
||||
end
|
||||
if P.stat.atk>=100 then
|
||||
P:win("finish")
|
||||
P:win('finish')
|
||||
end
|
||||
end,
|
||||
bg="tunnel",bgm="echo",
|
||||
bg='tunnel',bgm='echo',
|
||||
},
|
||||
pauseLimit=true,
|
||||
load=function()
|
||||
|
||||
@@ -8,10 +8,10 @@ return{
|
||||
P:receive(nil,P.lastPiece.atk,0,generateLine(P:RND(10)))
|
||||
end
|
||||
if P.stat.atk>=100 then
|
||||
P:win("finish")
|
||||
P:win('finish')
|
||||
end
|
||||
end,
|
||||
bg="blackhole",bgm="echo",
|
||||
bg='blackhole',bgm='echo',
|
||||
},
|
||||
pauseLimit=true,
|
||||
load=function()
|
||||
|
||||
@@ -1,18 +1,17 @@
|
||||
local format=string.format
|
||||
return{
|
||||
color=COLOR.lH,
|
||||
env={
|
||||
drop=1e99,lock=1e99,
|
||||
holdCount=0,
|
||||
dropPiece=function(P)P:lose()end,
|
||||
bg="bg1",bgm="new era",
|
||||
bg='bg1',bgm='new era',
|
||||
},
|
||||
pauseLimit=true,
|
||||
load=function()
|
||||
PLY.newPlayer(1)
|
||||
end,
|
||||
score=function(P)return{P.modeData.event,P.stat.finesseRate*25/P.stat.piece}end,
|
||||
scoreDisp=function(D)return D[1].."Stage "..format("%.2f",D[2]).."%"end,
|
||||
score=function(P)return{P.modeData.event,P.stat.finesseRate*20/P.stat.piece}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,
|
||||
getRank=function(P)
|
||||
local W=P.modeData.event
|
||||
|
||||
@@ -3,10 +3,10 @@ return{
|
||||
color=COLOR.cyan,
|
||||
env={
|
||||
drop=30,lock=45,
|
||||
visible="easy",
|
||||
dropPiece=function(P)if P.stat.row>=200 then P:win("finish")end end,
|
||||
visible='easy',
|
||||
dropPiece=function(P)if P.stat.row>=200 then P:win('finish')end end,
|
||||
freshLimit=10,
|
||||
bg="glow",bgm="push",
|
||||
bg='glow',bgm='push',
|
||||
},
|
||||
pauseLimit=true,
|
||||
load=function()
|
||||
|
||||
@@ -6,11 +6,11 @@ return{
|
||||
drop=15,lock=45,
|
||||
fall=10,
|
||||
dropFX=0,lockFX=0,
|
||||
visible="none",
|
||||
visible='none',
|
||||
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,
|
||||
bg="rgb",bgm="push",
|
||||
bg='rgb',bgm='push',
|
||||
},
|
||||
pauseLimit=true,
|
||||
load=function()
|
||||
|
||||
@@ -7,11 +7,11 @@ return{
|
||||
fall=5,
|
||||
ghost=0,
|
||||
dropFX=0,lockFX=0,
|
||||
visible="none",
|
||||
visible='none',
|
||||
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,
|
||||
bg="rgb",bgm="push",
|
||||
bg='rgb',bgm='push',
|
||||
},
|
||||
pauseLimit=true,
|
||||
load=function()
|
||||
|
||||
@@ -5,9 +5,9 @@ return{
|
||||
env={
|
||||
drop=15,lock=45,
|
||||
freshLimit=10,
|
||||
visible="fast",
|
||||
dropPiece=function(P)if P.stat.row>=200 then P:win("finish")end end,
|
||||
bg="glow",bgm="push",
|
||||
visible='fast',
|
||||
dropPiece=function(P)if P.stat.row>=200 then P:win('finish')end end,
|
||||
bg='glow',bgm='push',
|
||||
},
|
||||
pauseLimit=true,
|
||||
load=function()
|
||||
|
||||
@@ -6,11 +6,11 @@ return{
|
||||
drop=30,lock=60,
|
||||
block=false,center=0,ghost=0,
|
||||
dropFX=0,lockFX=0,
|
||||
visible="none",
|
||||
visible='none',
|
||||
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,
|
||||
bg="rgb",bgm="far",
|
||||
bg='rgb',bgm='far',
|
||||
},
|
||||
pauseLimit=true,
|
||||
load=function()
|
||||
|
||||
@@ -7,10 +7,10 @@ return{
|
||||
nextCount=1,
|
||||
block=false,center=0,ghost=0,
|
||||
dropFX=0,lockFX=0,
|
||||
visible="none",
|
||||
dropPiece=function(P)if P.stat.row>=40 then P:win("finish")end end,
|
||||
visible='none',
|
||||
dropPiece=function(P)if P.stat.row>=40 then P:win('finish')end end,
|
||||
freshLimit=15,
|
||||
bg="none",bgm="far",
|
||||
bg='none',bgm='far',
|
||||
},
|
||||
pauseLimit=true,
|
||||
load=function()
|
||||
@@ -23,19 +23,19 @@ return{
|
||||
if not GAME.result then
|
||||
if GAME.replaying then
|
||||
gc.setColor(.3,.3,.3,.7)
|
||||
gc.push("transform")
|
||||
gc.push('transform')
|
||||
gc.origin()
|
||||
gc.rectangle("fill",0,0,SCR.w,SCR.h)
|
||||
gc.rectangle('fill',0,0,SCR.w,SCR.h)
|
||||
gc.pop()
|
||||
else
|
||||
gc.clear(.26,.26,.26)
|
||||
--Frame
|
||||
gc.setColor(.5,.5,.5)
|
||||
gc.push("transform")
|
||||
gc.push('transform')
|
||||
gc.translate(150,0)
|
||||
gc.rectangle("line",-1,-11,302,612)--Boarder
|
||||
gc.rectangle("line",301,-3,15,604)--AtkBuffer boarder
|
||||
gc.rectangle("line",-16,-3,15,604)--B2b bar boarder
|
||||
gc.rectangle('line',-1,-11,302,612)--Boarder
|
||||
gc.rectangle('line',301,-3,15,604)--AtkBuffer boarder
|
||||
gc.rectangle('line',-16,-3,15,604)--B2b bar boarder
|
||||
gc.pop()
|
||||
end
|
||||
end
|
||||
|
||||
@@ -13,7 +13,7 @@ local function check_c4w(P)
|
||||
P.modeData.maxCombo=P.combo
|
||||
end
|
||||
if P.stat.row>=100 then
|
||||
P:win("finish")
|
||||
P:win('finish')
|
||||
end
|
||||
end
|
||||
end
|
||||
@@ -25,7 +25,7 @@ return{
|
||||
task=function(P)P.modeData.maxCombo=0 end,
|
||||
dropPiece=check_c4w,
|
||||
freshLimit=15,ospin=false,
|
||||
bg="rgb",bgm="oxygen",
|
||||
bg='rgb',bgm='oxygen',
|
||||
},
|
||||
pauseLimit=true,
|
||||
load=function()
|
||||
|
||||
@@ -11,7 +11,7 @@ local function check_c4w(P)
|
||||
P.modeData.maxCombo=P.combo
|
||||
end
|
||||
if P.stat.row>=100 then
|
||||
P:win("finish")
|
||||
P:win('finish')
|
||||
end
|
||||
end
|
||||
end
|
||||
@@ -23,7 +23,7 @@ return{
|
||||
task=function(P)P.modeData.maxCombo=0 end,
|
||||
dropPiece=check_c4w,
|
||||
freshLimit=15,ospin=false,
|
||||
bg="rgb",bgm="oxygen",
|
||||
bg='rgb',bgm='oxygen',
|
||||
},
|
||||
pauseLimit=true,
|
||||
load=function()
|
||||
|
||||
@@ -1,5 +1,4 @@
|
||||
local gc=love.graphics
|
||||
local format=string.format
|
||||
|
||||
return{
|
||||
color=COLOR.lBlue,
|
||||
@@ -11,8 +10,8 @@ return{
|
||||
center=0,ghost=0,
|
||||
drop=3,lock=3,wait=10,fall=25,
|
||||
nextCount=1,holdCount=false,
|
||||
sequence="rnd",
|
||||
RS="Classic",
|
||||
sequence='rnd',
|
||||
RS='Classic',
|
||||
freshLimit=0,
|
||||
face={0,0,2,2,2,0,0},
|
||||
task=function(P)P.modeData.target=10 end,
|
||||
@@ -22,16 +21,16 @@ return{
|
||||
D.target=D.target+10
|
||||
if D.target==110 then
|
||||
P.gameEnv.drop,P.gameEnv.lock=2,2
|
||||
SFX.play("blip_1")
|
||||
SFX.play('blip_1')
|
||||
elseif D.target==200 then
|
||||
P.gameEnv.drop,P.gameEnv.lock=1,1
|
||||
SFX.play("blip_1")
|
||||
SFX.play('blip_1')
|
||||
else
|
||||
SFX.play("reach")
|
||||
SFX.play('reach')
|
||||
end
|
||||
end
|
||||
end,
|
||||
bg="rgb",bgm="magicblock",
|
||||
bg='rgb',bgm='magicblock',
|
||||
},
|
||||
slowMark=true,
|
||||
load=function()
|
||||
@@ -40,12 +39,12 @@ return{
|
||||
mesDisp=function(P)
|
||||
setFont(75)
|
||||
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)
|
||||
setFont(45)
|
||||
mStr(P.stat.row,69,320)
|
||||
mStr(P.modeData.target,69,370)
|
||||
gc.rectangle("fill",25,375,90,4)
|
||||
gc.rectangle('fill',25,375,90,4)
|
||||
end,
|
||||
score=function(P)return{P.stat.score,P.stat.row}end,
|
||||
scoreDisp=function(D)return D[1].." "..D[2].." Lines"end,
|
||||
|
||||
@@ -38,9 +38,9 @@ local function checkClear(P)
|
||||
end
|
||||
setField(P,D.finished+1)
|
||||
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
|
||||
P:win("finish")
|
||||
P:win('finish')
|
||||
end
|
||||
end
|
||||
end
|
||||
@@ -63,12 +63,12 @@ return{
|
||||
PLY.newPlayer(1)
|
||||
local AItype=ENV.opponent:sub(1,2)
|
||||
local AIlevel=tonumber(ENV.opponent:sub(-1))
|
||||
if AItype=="9S"then
|
||||
if AItype=='9S'then
|
||||
ENV.target=nil
|
||||
PLY.newAIPlayer(2,AIBUILDER("9S",2*AIlevel))
|
||||
elseif AItype=="CC"then
|
||||
PLY.newAIPlayer(2,AIBUILDER('9S',2*AIlevel))
|
||||
elseif AItype=='CC'then
|
||||
ENV.target=nil
|
||||
PLY.newAIPlayer(2,AIBUILDER("CC",2*AIlevel-1,math.floor(AIlevel*.5+1),true,20000+5000*AIlevel))
|
||||
PLY.newAIPlayer(2,AIBUILDER('CC',2*AIlevel-1,math.floor(AIlevel*.5+1),true,20000+5000*AIlevel))
|
||||
end
|
||||
|
||||
for _,P in next,PLY_ALIVE do
|
||||
|
||||
@@ -23,11 +23,11 @@ local function puzzleCheck(P)
|
||||
P.field[_],P.visTime[_]=nil
|
||||
end
|
||||
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
|
||||
else
|
||||
D.showMark=1
|
||||
P:win("finish")
|
||||
P:win('finish')
|
||||
end
|
||||
end
|
||||
|
||||
@@ -43,17 +43,17 @@ return{
|
||||
local ENV=GAME.modeEnv
|
||||
local AItype=ENV.opponent:sub(1,2)
|
||||
local AIlevel=tonumber(ENV.opponent:sub(-1))
|
||||
if AItype=="9S"then
|
||||
PLY.newAIPlayer(2,AIBUILDER("9S",2*AIlevel))
|
||||
elseif AItype=="CC"then
|
||||
PLY.newAIPlayer(2,AIBUILDER("CC",2*AIlevel-1,math.floor(AIlevel*.5+1),true,20000+5000*AIlevel))
|
||||
if AItype=='9S'then
|
||||
PLY.newAIPlayer(2,AIBUILDER('9S',2*AIlevel))
|
||||
elseif AItype=='CC'then
|
||||
PLY.newAIPlayer(2,AIBUILDER('CC',2*AIlevel-1,math.floor(AIlevel*.5+1),true,20000+5000*AIlevel))
|
||||
end
|
||||
end,
|
||||
mesDisp=function(P)
|
||||
setFont(55)
|
||||
mStr(P.stat.row,69,225)
|
||||
mText(drawableText.line,69,290)
|
||||
gc.push("transform")
|
||||
gc.push('transform')
|
||||
PLY.draw.applyFieldOffset(P)
|
||||
if P.modeData.showMark==0 then
|
||||
local mark=TEXTURE.puzzleMark
|
||||
|
||||
@@ -24,15 +24,15 @@ return{
|
||||
if D.wave<=75 then
|
||||
D.rpm=math.floor(144e3/t)*.1
|
||||
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.dropDelay,P.gameEnv.drop=4,4
|
||||
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.dropDelay,P.gameEnv.drop=3,3
|
||||
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
|
||||
end
|
||||
end
|
||||
@@ -40,7 +40,7 @@ return{
|
||||
end
|
||||
end
|
||||
end,
|
||||
bg="rainbow2",bgm="storm",
|
||||
bg='rainbow2',bgm='storm',
|
||||
},
|
||||
pauseLimit=true,
|
||||
load=function()
|
||||
|
||||
@@ -24,23 +24,23 @@ return{
|
||||
if D.wave<=90 then
|
||||
D.rpm=math.floor(108e3/t)*.1
|
||||
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.dropDelay,P.gameEnv.drop=20,20
|
||||
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.dropDelay,P.gameEnv.drop=10,10
|
||||
elseif D.wave==90 then
|
||||
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,
|
||||
bg="rainbow2",bgm="storm",
|
||||
bg='rainbow2',bgm='storm',
|
||||
},
|
||||
pauseLimit=true,
|
||||
load=function()
|
||||
|
||||
@@ -3,7 +3,7 @@ local function check_rise(P)
|
||||
P:garbageRise(21,1,P:getHolePos())
|
||||
end
|
||||
if P.stat.dig==100 then
|
||||
P:win("finish")
|
||||
P:win('finish')
|
||||
end
|
||||
end
|
||||
|
||||
@@ -12,7 +12,7 @@ return{
|
||||
env={
|
||||
pushSpeed=6,
|
||||
dropPiece=check_rise,
|
||||
bg="bg2",bgm="way",
|
||||
bg='bg2',bgm='way',
|
||||
},
|
||||
load=function()
|
||||
PLY.newPlayer(1)
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
local function check_rise(P)
|
||||
if P.stat.dig==10 then
|
||||
P:win("finish")
|
||||
P:win('finish')
|
||||
end
|
||||
end
|
||||
|
||||
@@ -9,7 +9,7 @@ return{
|
||||
env={
|
||||
pushSpeed=6,
|
||||
dropPiece=check_rise,
|
||||
bg="bg1",bgm="way",
|
||||
bg='bg1',bgm='way',
|
||||
},
|
||||
load=function()
|
||||
PLY.newPlayer(1)
|
||||
|
||||
@@ -3,7 +3,7 @@ local function check_rise(P)
|
||||
P:garbageRise(21,1,P:getHolePos())
|
||||
end
|
||||
if P.stat.dig==400 then
|
||||
P:win("finish")
|
||||
P:win('finish')
|
||||
end
|
||||
end
|
||||
|
||||
@@ -12,7 +12,7 @@ return{
|
||||
env={
|
||||
pushSpeed=6,
|
||||
dropPiece=check_rise,
|
||||
bg="bg2",bgm="way",
|
||||
bg='bg2',bgm='way',
|
||||
},
|
||||
load=function()
|
||||
PLY.newPlayer(1)
|
||||
|
||||
@@ -3,7 +3,7 @@ local function check_rise(P)
|
||||
P:garbageRise(21,1,P:getHolePos())
|
||||
end
|
||||
if P.stat.dig==40 then
|
||||
P:win("finish")
|
||||
P:win('finish')
|
||||
end
|
||||
end
|
||||
|
||||
@@ -12,7 +12,7 @@ return{
|
||||
env={
|
||||
pushSpeed=6,
|
||||
dropPiece=check_rise,
|
||||
bg="bg1",bgm="way",
|
||||
bg='bg1',bgm='way',
|
||||
},
|
||||
load=function()
|
||||
PLY.newPlayer(1)
|
||||
|
||||
@@ -19,7 +19,7 @@ return{
|
||||
end
|
||||
end
|
||||
end,
|
||||
bg="bg2",bgm="down",
|
||||
bg='bg2',bgm='down',
|
||||
},
|
||||
pauseLimit=true,
|
||||
load=function()
|
||||
|
||||
@@ -18,7 +18,7 @@ return{
|
||||
end
|
||||
end
|
||||
end,
|
||||
bg="bg2",bgm="down",
|
||||
bg='bg2',bgm='down',
|
||||
},
|
||||
pauseLimit=true,
|
||||
load=function()
|
||||
|
||||
@@ -75,11 +75,11 @@ return{
|
||||
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,
|
||||
ospin=false,
|
||||
freshLimit=15,
|
||||
bg="glow",bgm="reason",
|
||||
bg='blockfall',bgm='reason',
|
||||
},
|
||||
pauseLimit=true,
|
||||
load=function()
|
||||
|
||||
@@ -3,13 +3,13 @@ return{
|
||||
color=COLOR.green,
|
||||
env={
|
||||
drop=20,lock=60,
|
||||
sequence="bag",
|
||||
sequence='bag',
|
||||
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,
|
||||
ospin=false,
|
||||
freshLimit=15,
|
||||
bg="glow",bgm="reason",
|
||||
bg='blockfall',bgm='reason',
|
||||
},
|
||||
pauseLimit=true,
|
||||
load=function()
|
||||
|
||||
@@ -1,18 +1,17 @@
|
||||
local format=string.format
|
||||
return{
|
||||
color=COLOR.white,
|
||||
env={
|
||||
drop=1e99,lock=1e99,
|
||||
infHold=true,
|
||||
bg="glow",bgm="infinite",
|
||||
bg='blockfall',bgm='infinite',
|
||||
},
|
||||
load=function()
|
||||
PLY.newPlayer(1)
|
||||
end,
|
||||
mesDisp=function(P)
|
||||
setFont(45)
|
||||
mStr(format("%.1f",P.stat.atk),69,190)
|
||||
mStr(format("%.2f",P.stat.atk/P.stat.row),69,310)
|
||||
mStr(("%.1f"):format(P.stat.atk),69,190)
|
||||
mStr(("%.2f"):format(P.stat.atk/P.stat.row),69,310)
|
||||
mText(drawableText.atk,69,243)
|
||||
mText(drawableText.eff,69,363)
|
||||
end,
|
||||
|
||||
@@ -1,12 +1,11 @@
|
||||
local format=string.format
|
||||
local function check_rise(P)
|
||||
local L=P.garbageBeneath
|
||||
if #P.clearedRow==0 then
|
||||
if L>0 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
|
||||
P:showTextF(text.great,0,-120,80,"fly",.8)
|
||||
P:showTextF(text.great,0,-120,80,'fly',.8)
|
||||
end
|
||||
end
|
||||
for _=1,8-L do
|
||||
@@ -14,8 +13,8 @@ local function check_rise(P)
|
||||
end
|
||||
else
|
||||
if L==0 then
|
||||
P:showTextF(text.awesome,0,-120,80,"beat",.6)
|
||||
SFX.play("clear")
|
||||
P:showTextF(text.awesome,0,-120,80,'beat',.6)
|
||||
SFX.play('clear')
|
||||
BG.send(26)
|
||||
for _=1,8 do
|
||||
P:garbageRise(13,1,generateLine(P:RND(10)))
|
||||
@@ -33,7 +32,7 @@ return{
|
||||
infHold=true,
|
||||
dropPiece=check_rise,
|
||||
pushSpeed=1.2,
|
||||
bg="wing",bgm="dream",
|
||||
bg='wing',bgm='dream',
|
||||
},
|
||||
load=function()
|
||||
PLY.newPlayer(1)
|
||||
@@ -47,7 +46,7 @@ return{
|
||||
setFont(45)
|
||||
mStr(P.stat.dig,69,190)
|
||||
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.atk,69,363)
|
||||
mText(drawableText.eff,69,475)
|
||||
|
||||
@@ -9,26 +9,26 @@ return{
|
||||
task=function(P)P.modeData.target=10 end,
|
||||
dropPiece=function(P)
|
||||
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.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.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.lastPiece.row>1 then P:showText("1+",0,-100,40,'flicker',.3)end
|
||||
P:lose()
|
||||
return
|
||||
end
|
||||
local T=P.modeData.target
|
||||
if P.stat.row>=T then
|
||||
if T==200 then
|
||||
P:win("finish")
|
||||
P:win('finish')
|
||||
else
|
||||
T=T+10
|
||||
P.gameEnv.drop=dropSpeed[T/10]
|
||||
P.modeData.target=T
|
||||
SFX.play("reach")
|
||||
SFX.play('reach')
|
||||
end
|
||||
end
|
||||
end,
|
||||
mindas=7,minarr=1,minsdarr=1,
|
||||
bg="bg2",bgm="sugar fairy",
|
||||
bg='bg2',bgm='sugar fairy',
|
||||
},
|
||||
pauseLimit=true,
|
||||
slowMark=true,
|
||||
@@ -39,7 +39,7 @@ return{
|
||||
setFont(45)
|
||||
mStr(P.stat.row,69,320)
|
||||
mStr(P.modeData.target,69,370)
|
||||
gc.rectangle("fill",25,375,90,4)
|
||||
gc.rectangle('fill',25,375,90,4)
|
||||
end,
|
||||
getRank=function(P)
|
||||
local L=P.stat.row
|
||||
|
||||
@@ -12,17 +12,17 @@ return{
|
||||
if P.modeData.target==50 then
|
||||
P.gameEnv.drop=.25
|
||||
P.modeData.target=100
|
||||
SFX.play("reach")
|
||||
SFX.play('reach')
|
||||
elseif P.modeData.target==100 then
|
||||
P:set20G(true)
|
||||
P.modeData.target=200
|
||||
SFX.play("reach")
|
||||
SFX.play('reach')
|
||||
else
|
||||
P:win("finish")
|
||||
P:win('finish')
|
||||
end
|
||||
end
|
||||
end,
|
||||
bg="cubes",bgm="push",
|
||||
bg='cubes',bgm='push',
|
||||
},
|
||||
pauseLimit=true,
|
||||
slowMark=true,
|
||||
@@ -33,7 +33,7 @@ return{
|
||||
setFont(45)
|
||||
mStr(P.stat.row,69,320)
|
||||
mStr(P.modeData.target,69,370)
|
||||
gc.rectangle("fill",25,375,90,4)
|
||||
gc.rectangle('fill',25,375,90,4)
|
||||
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,
|
||||
|
||||
@@ -10,16 +10,16 @@ return{
|
||||
dropPiece=function(P)
|
||||
if P.stat.row>=P.modeData.target then
|
||||
if P.modeData.target==200 then
|
||||
P:win("finish")
|
||||
P:win('finish')
|
||||
else
|
||||
P.gameEnv.drop=dropSpeed[P.modeData.target/10]
|
||||
P.modeData.target=P.modeData.target+10
|
||||
SFX.play("reach")
|
||||
SFX.play('reach')
|
||||
end
|
||||
end
|
||||
end,
|
||||
mindas=7,minarr=1,minsdarr=1,
|
||||
bg="bg2",bgm="push",
|
||||
bg='bg2',bgm='push',
|
||||
},
|
||||
pauseLimit=true,
|
||||
slowMark=true,
|
||||
@@ -30,7 +30,7 @@ return{
|
||||
setFont(45)
|
||||
mStr(P.stat.row,69,320)
|
||||
mStr(P.modeData.target,69,370)
|
||||
gc.rectangle("fill",25,375,90,4)
|
||||
gc.rectangle('fill',25,375,90,4)
|
||||
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,
|
||||
|
||||
@@ -14,11 +14,11 @@ local function score(P)
|
||||
D.pt=D.pt+s
|
||||
|
||||
if D.pt%100==99 then
|
||||
SFX.play("blip_1")
|
||||
SFX.play('blip_1')
|
||||
elseif D.pt>=D.target then--Level up!
|
||||
s=D.target/100
|
||||
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.wait=death_wait[s]
|
||||
E.fall=death_fall[s]
|
||||
@@ -29,12 +29,12 @@ local function score(P)
|
||||
|
||||
if s==5 then
|
||||
D.pt=500
|
||||
P:win("finish")
|
||||
P:win('finish')
|
||||
else
|
||||
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
|
||||
SFX.play("reach")
|
||||
SFX.play('reach')
|
||||
end
|
||||
end
|
||||
|
||||
@@ -53,7 +53,7 @@ return{
|
||||
P.modeData.target=100
|
||||
end,
|
||||
freshLimit=15,
|
||||
bg="bg2",bgm="secret7th",
|
||||
bg='bg2',bgm='secret7th',
|
||||
},
|
||||
slowMark=true,
|
||||
load=function()
|
||||
@@ -63,7 +63,7 @@ return{
|
||||
setFont(45)
|
||||
mStr(P.modeData.pt,69,320)
|
||||
mStr(P.modeData.target,69,370)
|
||||
gc.rectangle("fill",25,375,90,4)
|
||||
gc.rectangle('fill',25,375,90,4)
|
||||
end,
|
||||
score=function(P)return{P.modeData.pt,P.stat.time}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
Reference in New Issue
Block a user