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

View File

@@ -1,7 +1,7 @@
local printf=love.graphics.printf
local 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

View File

@@ -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

View File

@@ -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()

View File

@@ -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"

View File

@@ -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

View 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

View File

@@ -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()

View File

@@ -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

View File

@@ -2,9 +2,9 @@ local LANG={}
function LANG.init(langList,publicText)--Attention, calling this will destory all initializing methods, create a LANG.set()!
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

View File

@@ -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={}

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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()

View File

@@ -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)

View File

@@ -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

View File

@@ -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"

View File

@@ -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,

View File

@@ -19,21 +19,21 @@ function textFX.fly(t)
mStr(t.text,t.x+(t.c-.5)^3*300,t.y-t.font*.7)
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)

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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号玩家

View File

@@ -9,11 +9,12 @@
]]--
--Var leak check
-- setmetatable(_G,{__newindex=function(self,k,v)print('>>'..k)print(debug.traceback():match("\n.-\n\t(.-): "))rawset(self,k,v)end})
--Declaration
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

Binary file not shown.

BIN
media/SFX/key.ogg Normal file

Binary file not shown.

Binary file not shown.

Before

Width:  |  Height:  |  Size: 46 KiB

After

Width:  |  Height:  |  Size: 76 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.4 KiB

View File

@@ -1,17 +1,17 @@
local AISpeed={60,50,40,30,20,14,10,6,4,3}
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,
}

View File

@@ -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()

View File

@@ -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

View File

@@ -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()

View File

@@ -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

View File

@@ -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

View File

@@ -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()

View File

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

View File

@@ -5,52 +5,53 @@ local ins,rem=table.insert,table.remove
local back={}
local 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

View File

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

View File

@@ -62,16 +62,16 @@ function back.update(dt)
end
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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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()

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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()

View File

@@ -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)

View File

@@ -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()

View File

@@ -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")

View File

@@ -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

View File

@@ -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

View File

@@ -6,7 +6,7 @@ local noKickSet,noKickSet_180,pushZero do
noKickSet_180={[01]=Zero,[10]=Zero,[03]=Zero,[30]=Zero,[12]=Zero,[21]=Zero,[32]=Zero,[23]=Zero,[02]=Zero,[20]=Zero,[13]=Zero,[31]=Zero}
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"},

View File

@@ -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",

View File

@@ -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段位Utop数据约40L50A TGM3(W)shirase金1300通关\n这个游戏的作者!",
"【研究群】「T026」\n40行25.95秒, MPH40行57秒排世界第8(jstris)tetr.io段位Utop数据约50L60A TGM3(W)shirase金1300通关\n这个游戏的作者!",
"https://space.bilibili.com/225238922",
},

View File

@@ -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?"},
}
}
}

View File

@@ -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"},
},
}

View File

@@ -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!',

View File

@@ -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"},
},
}

View File

@@ -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="!@#$%^&*",

View File

@@ -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?你倒是不用开局定式连续打几把",

View File

@@ -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酱竟是我自己",

View File

@@ -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']= {"自定义", "拼图"},
},
}

View File

@@ -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"},
}

View File

@@ -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()

View File

@@ -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()

View File

@@ -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()

View File

@@ -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()

View File

@@ -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()

View File

@@ -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()

View File

@@ -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

View File

@@ -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()

View File

@@ -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()

View File

@@ -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()

View File

@@ -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()

View File

@@ -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()

View File

@@ -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

View File

@@ -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()

View File

@@ -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()

View File

@@ -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,

View File

@@ -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

View File

@@ -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

View File

@@ -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()

View File

@@ -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()

View File

@@ -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)

View File

@@ -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)

View File

@@ -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)

View File

@@ -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)

View File

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

View File

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

View File

@@ -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()

View File

@@ -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()

View File

@@ -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,

View File

@@ -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)

View File

@@ -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

View File

@@ -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,

View File

@@ -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,

View File

@@ -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