Merge branch 'main' into main

This commit is contained in:
user670
2021-04-22 15:39:42 +08:00
committed by GitHub
157 changed files with 1241 additions and 1084 deletions

10
Zframework/aDraw.lua Normal file
View File

@@ -0,0 +1,10 @@
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.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
function aDraw.Y(obj,x,y,a,k)draw(obj,x,y,a,k,nil,0,obj:getHeight()*.5)end
function aDraw.draw(obj,x,y,a,k)draw(obj,x,y,a,k,nil,obj:getWidth()*.5,obj:getHeight()*.5)end
return aDraw

View File

@@ -50,7 +50,7 @@ function BGM.init(list)
Sources[list[i]]:setLooping(true) Sources[list[i]]:setLooping(true)
Sources[list[i]]:setVolume(0) Sources[list[i]]:setVolume(0)
else else
LOG.print("No BGM file: "..list[i],5,COLOR.orange) LOG.print("No BGM file: "..list[i],5,COLOR.O)
end end
if not skip and i~=count then if not skip and i~=count then
coroutine.yield() coroutine.yield()

View File

@@ -4,51 +4,51 @@ local COLOR={
orange= {1.0, 0.6, 0.0}, orange= {1.0, 0.6, 0.0},
yellow= {1.0, 1.0, 0.0}, yellow= {1.0, 1.0, 0.0},
lime= {0.7, 1.0, 0.0}, lime= {0.7, 1.0, 0.0},
grass= {0.5, 1.0, 0.0}, jade= {0.5, 1.0, 0.0},
green= {0.0, 1.0, 0.0}, green= {0.0, 1.0, 0.0},
aqua= {0.0, 1.0, 0.6}, aqua= {0.0, 1.0, 0.6},
cyan= {0.0, 1.0, 1.0}, cyan= {0.0, 1.0, 1.0},
sky= {0.0, 0.7, 1.0}, navy= {0.0, 0.7, 1.0},
sea= {0.0, 0.4, 1.0}, sea= {0.0, 0.4, 1.0},
blue= {0.2, 0.2, 1.0}, blue= {0.2, 0.2, 1.0},
purple= {0.4, 0.0, 1.0}, violet= {0.4, 0.0, 1.0},
grape= {0.7, 0.0, 1.0}, purple= {0.7, 0.0, 1.0},
magenta= {1.0, 0.0, 1.0}, magenta= {1.0, 0.0, 1.0},
pink= {1.0, 0.0, 0.5}, wine= {1.0, 0.0, 0.5},
lRed= {1.0, 0.5, 0.5}, lRed= {1.0, 0.5, 0.5},
lFire= {1.0, 0.7, 0.5}, lFire= {1.0, 0.7, 0.5},
lOrange= {1.0, 0.8, 0.3}, lOrange= {1.0, 0.8, 0.3},
lYellow= {1.0, 1.0, 0.5}, lYellow= {1.0, 1.0, 0.5},
lLime= {0.8, 1.0, 0.4}, lLime= {0.8, 1.0, 0.4},
lGrass= {0.6, 1.0, 0.4}, lJade= {0.6, 1.0, 0.4},
lGreen= {0.5, 1.0, 0.5}, lGreen= {0.5, 1.0, 0.5},
lAqua= {0.4, 1.0, 0.7}, lAqua= {0.4, 1.0, 0.7},
lCyan= {0.5, 1.0, 1.0}, lCyan= {0.5, 1.0, 1.0},
lSky= {0.5, 0.8, 1.0}, lNavy= {0.5, 0.8, 1.0},
lSea= {0.4, 0.7, 1.0}, lSea= {0.4, 0.7, 1.0},
lBlue= {0.7, 0.7, 1.0}, lBlue= {0.7, 0.7, 1.0},
lPurple= {0.7, 0.4, 1.0}, lViolet= {0.7, 0.4, 1.0},
lGrape= {0.8, 0.4, 1.0}, lPurple= {0.8, 0.4, 1.0},
lMagenta= {1.0, 0.5, 1.0}, lMagenta= {1.0, 0.5, 1.0},
lPink= {1.0, 0.4, 0.7}, lWine= {1.0, 0.4, 0.7},
dRed= {0.6, 0.0, 0.0}, dRed= {0.6, 0.0, 0.0},
dFire= {0.6, 0.3, 0.0}, dFire= {0.6, 0.3, 0.0},
dOrange= {0.6, 0.4, 0.0}, dOrange= {0.6, 0.4, 0.0},
dYellow= {0.6, 0.6, 0.0}, dYellow= {0.6, 0.6, 0.0},
dLime= {0.5, 0.6, 0.0}, dLime= {0.5, 0.6, 0.0},
dGrass= {0.3, 0.6, 0.0}, dJade= {0.3, 0.6, 0.0},
dGreen= {0.0, 0.6, 0.0}, dGreen= {0.0, 0.6, 0.0},
dAqua= {0.0, 0.6, 0.4}, dAqua= {0.0, 0.6, 0.4},
dCyan= {0.0, 0.6, 0.6}, dCyan= {0.0, 0.6, 0.6},
dSky= {0.0, 0.4, 0.6}, dNavy= {0.0, 0.4, 0.6},
dSea= {0.0, 0.2, 0.6}, dSea= {0.0, 0.2, 0.6},
dBlue= {0.1, 0.1, 0.6}, dBlue= {0.1, 0.1, 0.6},
dPurple= {0.2, 0.0, 0.6}, dViolet= {0.2, 0.0, 0.6},
dGrape= {0.4, 0.0, 0.6}, dPurple= {0.4, 0.0, 0.6},
dMagenta= {0.6, 0.0, 0.6}, dMagenta= {0.6, 0.0, 0.6},
dPink= {0.6, 0.0, 0.3}, dWine= {0.6, 0.0, 0.3},
black= {0.0, 0.0, 0.0}, black= {0.0, 0.0, 0.0},
dGray= {0.3, 0.3, 0.3}, dGray= {0.3, 0.3, 0.3},
@@ -56,56 +56,67 @@ local COLOR={
lGray= {0.8, 0.8, 0.8}, lGray= {0.8, 0.8, 0.8},
white= {1.0, 1.0, 1.0}, white= {1.0, 1.0, 1.0},
} }
local map={ for k,v in next,{
R="red", G="green", B="blue", C="cyan", Y="yellow", M="magenta", R="red",F="fire",O="orange",Y="yellow",L="lime",J="jade",G="green",A="aqua",C="cyan",N="navy",S="sea",B="blue",V="violet",P="purple",M="magenta",W="wine",
lR="lRed", lG="lGreen",lB="lBlue", lC="lCyan", lY="lYellow", lM="lMagenta", lR="lRed",lF="lFire",lO="lOrange",lY="lYellow",lL="lLime",lJ="lJade",lG="lGreen",lA="lAqua",lC="lCyan",lN="lNavy",lS="lSea",lB="lBlue",lV="lViolet",lP="lPurple",lM="lMagenta",lW="lWine",
dR="dRed", dG="dGreen",dB="dBlue", dC="dCyan", dY="dYellow", dM="dMagenta", dR="dRed",dF="dFire",dO="dOrange",dY="dYellow",dL="dLime",dJ="dJade",dG="dGreen",dA="dAqua",dC="dCyan",dN="dNavy",dS="dSea",dB="dBlue",dV="dViolet",dP="dPurple",dM="dMagenta",dW="dWine",
W="white", D="black",dH="dGray",H="gray",lH="lGray",Z="white",
}for k,v in next,map do COLOR[k]=COLOR[v]end --Remain letter: EIKQTUX
}do
COLOR[k]=COLOR[v]
end
setmetatable(COLOR,{__index=function(_,k)
error("No color: "..tostring(k))
end})
local list_norm={"red","fire","orange","yellow","i","grass","green","aqua","cyan","sky","sea","blue","purple","grape","magenta","pink"}
local len_list_norm=#list_norm do--Random generators
local rnd=math.random local rnd=math.random
function COLOR.random_norm() local list_norm={"red","fire","orange","yellow","lime","jade","green","aqua","cyan","navy","sea","blue","violet","purple","magenta","wine"}
return COLOR[list_norm[rnd(len_list_norm)]] local len_list_norm=#list_norm
function COLOR.random_norm()
return COLOR[list_norm[rnd(len_list_norm)]]
end
local list_bright={"lRed","lFire","lOrange","lYellow","lLime","lJade","lGreen","lAqua","lCyan","lNavy","lSea","lBlue","lViolet","lPurple","lMagenta","lWine"}
local len_list_bright=#list_bright
function COLOR.random_bright()
return COLOR[list_bright[rnd(len_list_bright)]]
end
local list_dark={"dRed","dFire","dOrange","dYellow","dLime","dJade","dGreen","dAqua","dCyan","dNavy","dSea","dBlue","dViolet","dPurple","dMagenta","dWine"}
local len_list_dark=#list_dark
function COLOR.random_dark()
return COLOR[list_dark[rnd(len_list_dark)]]
end
end end
local list_bright={"lRed","lFire","lOrange","lYellow","lLime","lGrass","lGreen","lAqua","lCyan","lSky","lSea","lBlue","lPurple","lGrape","lMagenta","lPink"} do--Rainbow generators
local len_list_bright=#list_bright local sin=math.sin
function COLOR.random_bright() function COLOR.rainbow(phase)
return COLOR[list_bright[rnd(len_list_bright)]] return
end sin(phase)*.4+.6,
sin(phase+2.0944)*.4+.6,
local list_dark={"dRed","dFire","dOrange","dYellow","dLime","dGrass","dGreen","dAqua","dCyan","dSky","dSea","dBlue","dPurple","dGrape","dMagenta","dPink"} sin(phase-2.0944)*.4+.6
local len_list_dark=#list_dark end
function COLOR.random_dark() function COLOR.rainbow_light(phase)
return COLOR[list_dark[rnd(len_list_dark)]] return
end sin(phase)*.2+.7,
sin(phase+2.0944)*.2+.7,
local sin=math.sin sin(phase-2.0944)*.2+.7
function COLOR.rainbow(phase) end
return function COLOR.rainbow_dark(phase)
sin(phase)*.4+.6, return
sin(phase+2.0944)*.4+.6, sin(phase)*.2+.4,
sin(phase-2.0944)*.4+.6 sin(phase+2.0944)*.2+.4,
end sin(phase-2.0944)*.2+.4
function COLOR.rainbow_light(phase) end
return function COLOR.rainbow_gray(phase)
sin(phase)*.2+.7, return
sin(phase+2.0944)*.2+.7, sin(phase)*.16+.5,
sin(phase-2.0944)*.2+.7 sin(phase+2.0944)*.16+.5,
end sin(phase-2.0944)*.16+.5
function COLOR.rainbow_dark(phase) end
return
sin(phase)*.2+.4,
sin(phase+2.0944)*.2+.4,
sin(phase-2.0944)*.2+.4
end
function COLOR.rainbow_gray(phase)
return
sin(phase)*.16+.5,
sin(phase+2.0944)*.16+.5,
sin(phase-2.0944)*.16+.5
end end
return COLOR return COLOR

View File

@@ -19,6 +19,15 @@ local cmds={
dCirc=function(...)gc.circle("line",...)end, dCirc=function(...)gc.circle("line",...)end,
fPoly=function(...)gc.polygon("fill",...)end, fPoly=function(...)gc.polygon("fill",...)end,
dPoly=function(...)gc.polygon("line",...)end, dPoly=function(...)gc.polygon("line",...)end,
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,
} }
return function(L) return function(L)
gc.push() gc.push()
@@ -28,9 +37,7 @@ return function(L)
gc.setColor(1,1,1) gc.setColor(1,1,1)
gc.setLineWidth(1) gc.setLineWidth(1)
for i=3,#L do for i=3,#L do
print(L[i][1])
local cmd=cmds[L[i][1]] local cmd=cmds[L[i][1]]
print(L[i][1])
if type(cmd)=="string"then if type(cmd)=="string"then
gc[cmd](unpack(L[i],2)) gc[cmd](unpack(L[i],2))
else else

View File

@@ -40,7 +40,7 @@ return function(L,t)
T=type(v) T=type(v)
if T=="number"then v=tostring(v) if T=="number"then v=tostring(v)
elseif T=="string"then v="\""..v.."\"" elseif T=="string"then v="\""..v.."\""
elseif T=="table"then v=DUMPTABLE(v,t+1) elseif T=="table"then v=TABLE.dump(v,t+1)
elseif T=="boolean"then v=tostring(v) elseif T=="boolean"then v=tostring(v)
else error("Error data type!") else error("Error data type!")
end end

View File

@@ -21,14 +21,14 @@ function FILE.load(name)
return s return s
end end
end end
LOG.print(name.." "..text.loadError,COLOR.red) LOG.print(name.." "..text.loadError,COLOR.R)
end end
end end
function FILE.save(data,name,mode) function FILE.save(data,name,mode)
if not mode then mode=""end if not mode then mode=""end
if type(data)=="table"then if type(data)=="table"then
if mode:find("l")then if mode:find("l")then
data=DUMPTABLE(data) data=TABLE.dump(data)
if not data then if not data then
LOG.print(name.." "..text.saveError.."dump error","error") LOG.print(name.." "..text.saveError.."dump error","error")
return return
@@ -50,7 +50,7 @@ function FILE.save(data,name,mode)
F:flush()F:close() F:flush()F:close()
if success then if success then
if not mode:find("q")then if not mode:find("q")then
LOG.print(text.saveDone,COLOR.green) LOG.print(text.saveDone,COLOR.G)
end end
else else
LOG.print(text.saveError..(mes or"unknown error"),"error") LOG.print(text.saveError..(mes or"unknown error"),"error")

View File

@@ -8,19 +8,15 @@ LOADLIB=require"Zframework.loadLib"
WHEELMOV=require"Zframework.wheelScroll" WHEELMOV=require"Zframework.wheelScroll"
require"Zframework.setFont" require"Zframework.setFont"
MDRAW=require"Zframework.mDraw" ADRAW=require"Zframework.aDraw"
mStr=MDRAW.str mStr=ADRAW.str
mText=MDRAW.simpX mText=ADRAW.simpX
mDraw=MDRAW.draw mDraw=ADRAW.draw
-- UPPERCHAR=require"Zframework.upperChar"
JSON=require"Zframework.json" JSON=require"Zframework.json"
DUMPTABLE=require"Zframework.dumpTable"
URLENCODE=require"Zframework.urlEncode"
TABLE=require"Zframework.tableExtend" TABLE=require"Zframework.tableExtend"
SPLITSTR=require"Zframework.splitStr" STRING=require"Zframework.stringExtend"
TIMESTR=require"Zframework.timeStr"
VIB= require"Zframework.vibrate" VIB= require"Zframework.vibrate"
SFX= require"Zframework.sfx" SFX= require"Zframework.sfx"
@@ -215,11 +211,11 @@ local function noDevkeyPressed(key)
elseif key=="f5"then if WIDGET.sel then DBP(WIDGET.sel)end elseif key=="f5"then if WIDGET.sel then DBP(WIDGET.sel)end
elseif key=="f6"then for k,v in next,_G do DBP(k,v)end elseif key=="f6"then for k,v in next,_G do DBP(k,v)end
elseif key=="f7"then if love._openConsole then love._openConsole()end elseif key=="f7"then if love._openConsole then love._openConsole()end
elseif key=="f8"then devMode=nil LOG.print("DEBUG OFF",COLOR.yellow) elseif key=="f8"then devMode=nil LOG.print("DEBUG OFF",COLOR.Y)
elseif key=="f9"then devMode=1 LOG.print("DEBUG 1",COLOR.yellow) elseif key=="f9"then devMode=1 LOG.print("DEBUG 1",COLOR.Y)
elseif key=="f10"then devMode=2 LOG.print("DEBUG 2",COLOR.yellow) elseif key=="f10"then devMode=2 LOG.print("DEBUG 2",COLOR.Y)
elseif key=="f11"then devMode=3 LOG.print("DEBUG 3",COLOR.yellow) elseif key=="f11"then devMode=3 LOG.print("DEBUG 3",COLOR.Y)
elseif key=="f12"then devMode=4 LOG.print("DEBUG 4",COLOR.yellow) elseif key=="f12"then devMode=4 LOG.print("DEBUG 4",COLOR.Y)
elseif key=="\\"then _G["\100\114\97\119\70\87\77"]=NULL elseif key=="\\"then _G["\100\114\97\119\70\87\77"]=NULL
elseif devMode==2 then elseif devMode==2 then
if WIDGET.sel then if WIDGET.sel then
@@ -249,7 +245,7 @@ function love.keypressed(key)
return return
elseif key=="f8"then elseif key=="f8"then
devMode=1 devMode=1
LOG.print("DEBUG ON",COLOR.yellow) LOG.print("DEBUG ON",COLOR.Y)
elseif key=="f11"then elseif key=="f11"then
switchFullscreen() switchFullscreen()
elseif not SCN.swapping then elseif not SCN.swapping then
@@ -281,7 +277,7 @@ function love.joystickremoved(JS)
for i=1,#joysticks do for i=1,#joysticks do
if joysticks[i]==JS then if joysticks[i]==JS then
rem(joysticks,i) rem(joysticks,i)
LOG.print("Joystick removed",COLOR.yellow) LOG.print("Joystick removed",COLOR.Y)
return return
end end
end end
@@ -454,10 +450,10 @@ local WScolor={
{.5,.8,1,.7}, {.5,.8,1,.7},
} }
local devColor={ local devColor={
COLOR.white, COLOR.Z,
COLOR.lMagenta, COLOR.lM,
COLOR.lGreen, COLOR.lG,
COLOR.lBlue, COLOR.lB,
} }
love.draw,love.update=nil--remove default draw/update love.draw,love.update=nil--remove default draw/update
function love.run() function love.run()
@@ -588,7 +584,7 @@ function love.run()
--Websocket status --Websocket status
gc_push("transform") gc_push("transform")
gc.translate(SCR.w,0) gc.translate(SCR.w,SCR.h-100)
gc.scale(SCR.k) gc.scale(SCR.k)
for i=1,5 do for i=1,5 do
local status=WS.status(WSnames[i]) local status=WS.status(WSnames[i])

View File

@@ -4,7 +4,7 @@ return function(name,libName)
if r1 and r2 then if r1 and r2 then
return r2 return r2
else else
LOG.print("Cannot load "..name..": "..(r2 or r3),"warn",COLOR.red) LOG.print("Cannot load "..name..": "..(r2 or r3),"warn",COLOR.R)
end end
elseif SYSTEM=="Android"then elseif SYSTEM=="Android"then
local fs=love.filesystem local fs=love.filesystem
@@ -17,25 +17,25 @@ return function(name,libName)
if success then if success then
libFunc,message=package.loadlib(table.concat({SAVEDIR,libName.Android},"/"),libName.libFunc) libFunc,message=package.loadlib(table.concat({SAVEDIR,libName.Android},"/"),libName.libFunc)
if libFunc then if libFunc then
LOG.print(name.." lib loaded","warn",COLOR.green) LOG.print(name.." lib loaded","warn",COLOR.G)
break break
else else
LOG.print("Cannot load "..name..": "..message,"warn",COLOR.red) LOG.print("Cannot load "..name..": "..message,"warn",COLOR.R)
end end
else else
LOG.print("Write "..name.."-"..platform[i].." to saving failed: "..message,"warn",COLOR.red) LOG.print("Write "..name.."-"..platform[i].." to saving failed: "..message,"warn",COLOR.R)
end end
else else
LOG.print("Read "..name.."-"..platform[i].." failed","warn",COLOR.red) LOG.print("Read "..name.."-"..platform[i].." failed","warn",COLOR.R)
end end
end end
if not libFunc then if not libFunc then
LOG.print("Cannot load "..name,"warn",COLOR.red) LOG.print("Cannot load "..name,"warn",COLOR.R)
return return
end end
return libFunc() return libFunc()
else else
LOG.print("No "..name.." for "..SYSTEM,"warn",COLOR.red) LOG.print("No "..name.." for "..SYSTEM,"warn",COLOR.R)
return return
end end
return true return true

View File

@@ -39,23 +39,23 @@ function LOG.print(text,T,C)--text,type/time,color
local time local time
local his local his
if T=="warn"then if T=="warn"then
C=C or COLOR.yellow C=C or COLOR.Y
his=true his=true
time=180 time=180
elseif T=="error"then elseif T=="error"then
C=C or COLOR.red C=C or COLOR.R
his=true his=true
time=210 time=210
elseif T=="message"then elseif T=="message"then
C=C or COLOR.sky C=C or COLOR.N
his=true his=true
elseif type(T)=="number"then elseif type(T)=="number"then
C=C or COLOR.white C=C or COLOR.Z
time=T time=T
elseif type(T)=="table"then elseif type(T)=="table"then
C=T C=T
elseif not C then elseif not C then
C=COLOR.white C=COLOR.Z
end end
if his then if his then
ins(debugMesHistory,SCN.cur..": "..tostring(text)) ins(debugMesHistory,SCN.cur..": "..tostring(text))
@@ -65,6 +65,6 @@ end
function LOG.copy() function LOG.copy()
local str=table.concat(debugMesHistory,"\n") local str=table.concat(debugMesHistory,"\n")
love.system.setClipboardText(str) love.system.setClipboardText(str)
LOG.print("Log copied",COLOR.blue) LOG.print("Log copied",COLOR.B)
end end
return LOG return LOG

View File

@@ -1,10 +0,0 @@
local printf=love.graphics.printf
local draw=love.graphics.draw
local mDraw={}
function mDraw.str(str,x,y)printf(str,x-626,y,1252,"center")end
function mDraw.simpX(str,x,y)draw(str,x-str:getWidth()*.5,y)end
function mDraw.simpY(str,x,y)draw(str,x,y-str:getHeight()*.5)end
function mDraw.X(str,x,y,a,k)draw(str,x,y,a,k,nil,str:getWidth()*.5,0)end
function mDraw.Y(str,x,y,a,k)draw(str,x,y,a,k,nil,0,str:getHeight()*.5)end
function mDraw.draw(str,x,y,a,k)draw(str,x,y,a,k,nil,str:getWidth()*.5,str:getHeight()*.5)end
return mDraw

View File

@@ -17,7 +17,7 @@ function SFX.init(list)
if love.filesystem.getInfo(N)then if love.filesystem.getInfo(N)then
Sources[list[i]]={love.audio.newSource(N,"static")} Sources[list[i]]={love.audio.newSource(N,"static")}
else else
LOG.print("No SFX file: "..N,5,COLOR.orange) LOG.print("No SFX file: "..N,5,COLOR.O)
end end
if not skip and i~=count then if not skip and i~=count then
coroutine.yield() coroutine.yield()

View File

@@ -1,19 +0,0 @@
local find,sub=string.find,string.sub
return function(s,sep,regex)
local L={}
local p1,p2=1--start,target
if regex then
while p1<=#s do
p2=find(s,sep,p1)or #s+1
L[#L+1]=sub(s,p1,p2-1)
p1=p2+#sep
end
else
while p1<=#s do
p2=find(s,sep,p1,true)or #s+1
L[#L+1]=sub(s,p1,p2-1)
p1=p2+#sep
end
end
return L
end

View File

@@ -0,0 +1,77 @@
local STRING={}
local int,format=math.floor,string.format
local find,sub,upper=string.find,string.sub,string.upper
do--function STRING.shiftChar(c)
local shiftMap={
["1"]="!",["2"]="@",["3"]="#",["4"]="$",["5"]="%",
["6"]="^",["7"]="&",["8"]="*",["9"]="(",["0"]=")",
["`"]="~",["-"]="_",["="]="+",
["["]="{",["]"]="}",["\\"]="|",
[";"]=":",["'"]="\"",
[","]="<",["."]=">",["/"]="?",
}
function STRING.shiftChar(c)
return shiftMap[c]or upper(c)
end
end
function STRING.split(s,sep,regex)
local L={}
local p1,p2=1--start,target
if regex then
while p1<=#s do
p2=find(s,sep,p1)or #s+1
L[#L+1]=sub(s,p1,p2-1)
p1=p2+#sep
end
else
while p1<=#s do
p2=find(s,sep,p1,true)or #s+1
L[#L+1]=sub(s,p1,p2-1)
p1=p2+#sep
end
end
return L
end
function STRING.simpEmailCheck(e)
e=STRING.split(e,"@")
if #e~=2 then return false end
if e[1]:sub(-1)=="."or e[2]:sub(-1)=="."then return false end
local e1,e2=STRING.split(e[1],"."),STRING.split(e[2],".")
if #e1*#e2==0 then return false end
for _,v in next,e1 do if #v==0 then return false end end
for _,v in next,e2 do if #v==0 then return false end end
return true
end
function STRING.time(s)
if s<60 then
return format("%.3f\"",s)
elseif s<3600 then
return format("%d'%05.2f\"",int(s/60),s%60)
else
local h=int(s/3600)
return format("%d:%.2d'%05.2f\"",h,int(s/60%60),s%60)
end
end
do--function STRING.urlEncode(str)
local rshift=bit.rshift
local b16={[0]="0","1","2","3","4","5","6","7","8","9","a","b","c","d","e","f"}
function STRING.urlEncode(str)
local out=""
for i=1,#str do
if str:sub(i,i):match("[a-zA-Z0-9]")then
out=out..str:sub(i,i)
else
local b=str:byte(i)
out=out.."%"..b16[rshift(b,4)]..b16[b%16]
end
end
return out
end
end
return STRING

View File

@@ -73,4 +73,60 @@ function TABLE.reIndex(org)
end end
end end
end end
--Dump a simple lua table
do--function TABLE.dump(L,t)
local find=string.find
local tabs={
[0]="",
"\t",
"\t\t",
"\t\t\t",
"\t\t\t\t",
"\t\t\t\t\t",
}
function dump(L,t)
local s
if t then
s="{\n"
else
s="return{\n"
t=1
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 k==count then
k=""
count=count+1
else
k="["..k.."]="
end
elseif T=="string"then
if find(k,"[^0-9a-zA-Z_]")then
k="[\""..k.."\"]="
else
k=k.."="
end
elseif T=="boolean"then k="["..k.."]="
else error("Error key type!")
end
T=type(v)
if T=="number"then v=tostring(v)
elseif T=="string"then v="\""..v.."\""
elseif T=="table"then v=dump(v,t+1)
elseif T=="boolean"then v=tostring(v)
else error("Error data type!")
end
s=s..tabs[t]..k..v..",\n"
end
return s..tabs[t-1].."}"
end
TABLE.dump=dump
end
return TABLE return TABLE

View File

@@ -2,8 +2,8 @@ local THEME={
cur=false,--Current theme cur=false,--Current theme
} }
local themeColor={ local themeColor={
xmas={COLOR.red,COLOR.white,COLOR.green}, xmas={COLOR.R,COLOR.Z,COLOR.G},
sprfes={COLOR.red,COLOR.orange,COLOR.yellow}, sprfes={COLOR.R,COLOR.O,COLOR.Y},
} }
function THEME.calculate(Y,M,D) function THEME.calculate(Y,M,D)
@@ -48,15 +48,15 @@ function THEME.set(theme)
elseif theme=="xmas"then elseif theme=="xmas"then
BG.setDefault("snow") BG.setDefault("snow")
BGM.setDefault("xmas") BGM.setDefault("xmas")
LOG.print("==============",COLOR.red) LOG.print("==============",COLOR.R)
LOG.print("Merry Christmas!",COLOR.white) LOG.print("Merry Christmas!",COLOR.Z)
LOG.print("==============",COLOR.red) LOG.print("==============",COLOR.R)
elseif theme=="sprfes"then elseif theme=="sprfes"then
BG.setDefault("firework") BG.setDefault("firework")
BGM.setDefault("spring festival") BGM.setDefault("spring festival")
LOG.print(" ★☆☆★",COLOR.red) LOG.print(" ★☆☆★",COLOR.R)
LOG.print("新年快乐!",COLOR.white) LOG.print("新年快乐!",COLOR.Z)
LOG.print(" ★☆☆★",COLOR.red) LOG.print(" ★☆☆★",COLOR.R)
elseif theme=="zday1"then elseif theme=="zday1"then
BG.setDefault("lanterns") BG.setDefault("lanterns")
BGM.setDefault("empty") BGM.setDefault("empty")

View File

@@ -1,11 +0,0 @@
local int,format=math.floor,string.format
return function(s)
if s<60 then
return format("%.3f\"",s)
elseif s<3600 then
return format("%d'%05.2f\"",int(s/60),s%60)
else
local h=int(s/3600)
return format("%d:%.2d'%05.2f\"",h,int(s/60%60),s%60)
end
end

View File

@@ -1,12 +0,0 @@
local upper=string.upper
local upperList={
["1"]="!",["2"]="@",["3"]="#",["4"]="$",["5"]="%",
["6"]="^",["7"]="&",["8"]="*",["9"]="(",["0"]=")",
["`"]="~",["-"]="_",["="]="+",
["["]="{",["]"]="}",["\\"]="|",
[";"]=":",["'"]="\"",
[","]="<",["."]=">",["/"]="?",
}
return function(c)
return upperList[c]or upper(c)
end

View File

@@ -1,14 +0,0 @@
local rshift=bit.rshift
local b16={[0]="0","1","2","3","4","5","6","7","8","9","a","b","c","d","e","f"}
return function(str)
local out=""
for i=1,#str do
if str:sub(i,i):match("[a-zA-Z0-9]")then
out=out..str:sub(i,i)
else
local b=str:byte(i)
out=out.."%"..b16[rshift(b,4)]..b16[b%16]
end
end
return out
end

View File

@@ -45,7 +45,7 @@ function VOC.init(list)
if n==1 then if n==1 then
if not loadVoiceFile(list[i],list[i])then if not loadVoiceFile(list[i],list[i])then
LOG.print("No VOICE file: "..list[i],5,COLOR.orange) LOG.print("No VOICE file: "..list[i],5,COLOR.O)
end end
end end
if not Source[list[i]][1]then Source[list[i]]=nil end if not Source[list[i]][1]then Source[list[i]]=nil end

View File

@@ -1,17 +1,18 @@
local gc=love.graphics
local kb=love.keyboard local kb=love.keyboard
local gc=love.graphics
local int,abs=math.floor,math.abs local int,abs=math.floor,math.abs
local max,min=math.max,math.min local max,min=math.max,math.min
local sub,format=string.sub,string.format local sub,format=string.sub,string.format
local ins=table.insert local ins=table.insert
local COLOR=COLOR
local setFont,mStr=setFont,mStr local setFont,mStr=setFont,mStr
local mDraw_X,mDraw_Y=ADRAW.simpX,ADRAW.simpY
local alignModes={ local allowNoText={
M="center", image=true,
L="left", inputBox=true,
R="right", textBox=true,
F="justify",
} }
local WIDGET={} local WIDGET={}
@@ -25,15 +26,7 @@ local text={
type="text", type="text",
alpha=0, alpha=0,
} }
function text:reset() function text:reset()end
if type(self.text)=="string"then
self.text=gc.newText(getFont(self.font),self.text)
elseif type(self.text)~="userdata"or self.text.type(self.text)~="Text"then
self.text=gc.newText(getFont(self.font),self.name)
self.color=COLOR.dPurple
self.font=self.font-10
end
end
function text:update() function text:update()
if self.hideCon and self.hideCon()then if self.hideCon and self.hideCon()then
if self.alpha>0 then if self.alpha>0 then
@@ -47,12 +40,13 @@ function text:draw()
if self.alpha>0 then if self.alpha>0 then
local c=self.color local c=self.color
gc.setColor(c[1],c[2],c[3],self.alpha) gc.setColor(c[1],c[2],c[3],self.alpha)
local obj=self.obj
if self.align=="M"then if self.align=="M"then
gc.draw(self.text,self.x-self.text:getWidth()*.5,self.y) mDraw_X(obj,self.x,self.y)
elseif self.align=="L"then elseif self.align=="L"then
gc.draw(self.text,self.x,self.y) gc.draw(obj,self.x,self.y)
elseif self.align=="R"then elseif self.align=="R"then
gc.draw(self.text,self.x-self.text:getWidth(),self.y) gc.draw(obj,self.x-obj:getWidth(),self.y)
end end
end end
end end
@@ -63,7 +57,7 @@ function WIDGET.newText(D)--name,x,y[,fText][,color][,font=30][,align="M"][,hide
y= D.y, y= D.y,
fText= D.fText, fText= D.fText,
color= D.color and(COLOR[D.color]or D.color)or COLOR.white, color= D.color and(COLOR[D.color]or D.color)or COLOR.Z,
font= D.font or 30, font= D.font or 30,
align= D.align or"M", align= D.align or"M",
hideCon=D.hide, hideCon=D.hide,
@@ -109,6 +103,13 @@ local button={
function button:reset() function button:reset()
self.ATV=0 self.ATV=0
end end
function button:setObject(obj)
if type(obj)=="string"or type(obj)=="number"then
self.obj=gc.newText(getFont(self.font),obj)
elseif obj then
self.obj=obj
end
end
function button:isAbove(x,y) function button:isAbove(x,y)
local ATV=self.ATV local ATV=self.ATV
return return
@@ -150,21 +151,33 @@ function button:draw()
gc.setColor(1,1,1,ATV*.125) gc.setColor(1,1,1,ATV*.125)
gc.rectangle("line",x-ATV+2,y-ATV+2,w+2*ATV-4,h+2*ATV-4) gc.rectangle("line",x-ATV+2,y-ATV+2,w+2*ATV-4,h+2*ATV-4)
end end
local t=self.text local obj=self.obj
if t then local y0=y+h*.5-ATV*.5
setFont(self.font) gc.setColor(1,1,1,.2+ATV*.05)
local y0=y+h*.5-self.font*.7-ATV*.5 if self.align=="M"then
gc.setColor(1,1,1,.2+ATV*.05) local x0=x+w*.5
local edge=self.edge mDraw(obj,x0-2,y0-2)
gc.printf(t,x+edge-2,y0-2,w-2*edge,self.align) mDraw(obj,x0-2,y0+2)
gc.printf(t,x+edge-2,y0+2,w-2*edge,self.align) mDraw(obj,x0+2,y0-2)
gc.printf(t,x+edge+2,y0-2,w-2*edge,self.align) mDraw(obj,x0+2,y0+2)
gc.printf(t,x+edge+2,y0+2,w-2*edge,self.align)
gc.setColor(r*.5,g*.5,b*.5) gc.setColor(r*.5,g*.5,b*.5)
gc.printf(t,x+edge,y0,w-2*edge,self.align) mDraw(obj,x0,y0)
else elseif self.align=="L"then
self.text=self.name or"###" local edge=self.edge
self.color=COLOR.dPurple mDraw_Y(obj,x+edge-2,y0-2)
mDraw_Y(obj,x+edge-2,y0+2)
mDraw_Y(obj,x+edge+2,y0-2)
mDraw_Y(obj,x+edge+2,y0+2)
gc.setColor(r*.5,g*.5,b*.5)
mDraw_Y(obj,x+edge,y0)
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)
mDraw_Y(obj,x0+2,y0-2)
mDraw_Y(obj,x0+2,y0+2)
gc.setColor(r*.5,g*.5,b*.5)
mDraw_Y(obj,x0,y0)
end end
end end
function button:getInfo() function button:getInfo()
@@ -194,9 +207,9 @@ function WIDGET.newButton(D)--name,x,y,w[,h][,fText][,color][,font][,align="M"[,
}, },
fText= D.fText, fText= D.fText,
color= D.color and(COLOR[D.color]or D.color)or COLOR.white, color= D.color and(COLOR[D.color]or D.color)or COLOR.Z,
font= D.font or 30, font= D.font or 30,
align= alignModes[D.align or"M"]or"center", align= D.align or"M",
edge= D.edge or 0, edge= D.edge or 0,
code= D.code, code= D.code,
hide= D.hide, hide= D.hide,
@@ -213,6 +226,13 @@ local key={
function key:reset() function key:reset()
self.ATV=0 self.ATV=0
end end
function key:setObject(obj)
if type(obj)=="string"or type(obj)=="number"then
self.obj=gc.newText(getFont(self.font),obj)
elseif obj then
self.obj=obj
end
end
function key:isAbove(x,y) function key:isAbove(x,y)
return return
x>self.x and x>self.x and
@@ -244,14 +264,13 @@ function key:draw()
gc.setLineWidth(4) gc.setLineWidth(4)
gc.rectangle("line",x,y,w,h) gc.rectangle("line",x,y,w,h)
local t=self.text gc.setColor(r,g,b,1.2)
if t then if self.align=="M"then
setFont(self.font) mDraw(self.obj,x+w*.5,y+h*.5)
gc.setColor(r,g,b,1.2) elseif self.align=="L"then
gc.printf(t,x+self.edge,y+h*.5-self.font*.7,w-2*self.edge,self.align) mDraw_Y(self.obj,x+self.edge,y+h*.5)
else elseif self.align=="R"then
self.text=self.name or"###" mDraw_Y(self.obj,self.x-self.edge-self.obj:getWidth(),y+h*.5)
self.color=COLOR.dPurple
end end
end end
function key:getInfo() function key:getInfo()
@@ -279,9 +298,9 @@ function WIDGET.newKey(D)--name,x,y,w[,h][,fText][,color][,font][,align="M"[,edg
}, },
fText= D.fText, fText= D.fText,
color= D.color and(COLOR[D.color]or D.color)or COLOR.white, color= D.color and(COLOR[D.color]or D.color)or COLOR.Z,
font= D.font or 30, font= D.font or 30,
align= alignModes[D.align or"M"]or"center", align= D.align or"M",
edge= D.edge or 0, edge= D.edge or 0,
code= D.code, code= D.code,
hide= D.hide, hide= D.hide,
@@ -336,13 +355,10 @@ function switch:draw()
gc.setColor(1,1,1,.6+ATV*.05) gc.setColor(1,1,1,.6+ATV*.05)
gc.rectangle("line",x,y,50,50) gc.rectangle("line",x,y,50,50)
--Text --Drawable
local t=self.text local obj=self.obj
if t then gc.setColor(self.color)
gc.setColor(self.color) mDraw_Y(obj,x-12-ATV-obj:getWidth(),y+25)
setFont(self.font)
gc.printf(t,x-412-ATV,y+20-self.font*.7,400,"right")
end
end end
function switch:getInfo() function switch:getInfo()
return format("x=%d,y=%d,font=%d",self.x,self.y,self.font) return format("x=%d,y=%d,font=%d",self.x,self.y,self.font)
@@ -363,7 +379,7 @@ function WIDGET.newSwitch(D)--name,x,y[,fText][,color][,font][,disp],code,hide
}, },
fText= D.fText, fText= D.fText,
color= D.color and(COLOR[D.color]or D.color)or COLOR.white, color= D.color and(COLOR[D.color]or D.color)or COLOR.Z,
font= D.font or 30, font= D.font or 30,
disp= D.disp, disp= D.disp,
code= D.code, code= D.code,
@@ -461,13 +477,10 @@ function slider:draw()
mStr(self:show(),cx,by-30) mStr(self:show(),cx,by-30)
end end
--Text --Drawable
local t=self.text local obj=self.obj
if t then gc.setColor(self.color)
gc.setColor(self.color) mDraw_Y(obj,x-12-ATV-obj:getWidth(),y)
setFont(self.font)
gc.printf(t,x-312-ATV,y-self.font*.7,300,"right")
end
end end
function slider:getInfo() function slider:getInfo()
return format("x=%d,y=%d,w=%d",self.x,self.y,self.w) return format("x=%d,y=%d,w=%d",self.x,self.y,self.w)
@@ -520,7 +533,7 @@ function WIDGET.newSlider(D)--name,x,y,w[,fText][,color][,unit][,smooth][,font][
}, },
fText= D.fText, fText= D.fText,
color= D.color and(COLOR[D.color]or D.color)or COLOR.white, color= D.color and(COLOR[D.color]or D.color)or COLOR.Z,
unit= D.unit or 1, unit= D.unit or 1,
smooth= false, smooth= false,
font= D.font or 30, font= D.font or 30,
@@ -622,14 +635,11 @@ function selector:draw()
end end
end end
--Text --Drawable
setFont(30) gc.setColor(self.color)
t=self.text ADRAW.simpX(self.obj,x+w*.5,y+17-21)
if t then
gc.setColor(self.color)
mStr(self.text,x+w*.5,y+17-21)
end
gc.setColor(1,1,1) gc.setColor(1,1,1)
setFont(30)
mStr(self.selText,x+w*.5,y+43-21) mStr(self.selText,x+w*.5,y+43-21)
end end
function selector:getInfo() function selector:getInfo()
@@ -689,7 +699,8 @@ function WIDGET.newSelector(D)--name,x,y,w[,fText][,color],list,disp,code,hide
}, },
fText= D.fText, fText= D.fText,
color= D.color and(COLOR[D.color]or D.color)or COLOR.white, color= D.color and(COLOR[D.color]or D.color)or COLOR.Z,
font= 30,
list= D.list, list= D.list,
disp= D.disp, disp= D.disp,
code= D.code, code= D.code,
@@ -744,11 +755,11 @@ function inputBox:draw()
gc.setLineWidth(4) gc.setLineWidth(4)
gc.rectangle("line",x,y,w,h) gc.rectangle("line",x,y,w,h)
--Text --Drawable
setFont(self.font) setFont(self.font)
local t=self.text local obj=self.obj
if t then if obj then
gc.printf(t,x-412,y+h*.5-self.font*.7,400,"right") mDraw_Y(obj,x-12-obj:getWidth(),y+h*.5)
end end
if self.secret then if self.secret then
for i=1,#self.value do for i=1,#self.value do
@@ -1004,7 +1015,15 @@ function WIDGET.setLang(widgetText)
for S,L in next,SCN.scenes do for S,L in next,SCN.scenes do
if L.widgetList then if L.widgetList then
for _,W in next,L.widgetList do for _,W in next,L.widgetList do
W.text=W.fText or widgetText[S][W.name] local t=W.fText or widgetText[S][W.name]
if not t and not allowNoText[W.type]then
t=W.name or"##"
W.color=COLOR.dV
end
if type(t)=="string"and W.font then
t=gc.newText(getFont(W.font),t)
end
W.obj=t
end end
end end
end end

View File

@@ -129,7 +129,7 @@ return{--返回一个table你也可以在之前定义一些常量或者函数
PLY.draw.drawTargetLine(P,r)--使用自带的境界高度线绘制函数 PLY.draw.drawTargetLine(P,r)--使用自带的境界高度线绘制函数
end, end,
score=function(P)return{P.stat.time,P.stat.piece}end,--游戏结束时需要保存的本局关键信息 score=function(P)return{P.stat.time,P.stat.piece}end,--游戏结束时需要保存的本局关键信息
scoreDisp=function(D)return TIMESTR(D[1]).." "..D[2].." Pieces"end,--把score返回的数据显示出来的方法 scoreDisp=function(D)return STRING.time(D[1]).." "..D[2].." Pieces"end,--把score返回的数据显示出来的方法
comp=function(a,b)return a[1]<b[1]or a[1]==b[1]and a[2]<b[2]end,--按照时间排序,时间一样就看块数 comp=function(a,b)return a[1]<b[1]or a[1]==b[1]and a[2]<b[2]end,--按照时间排序,时间一样就看块数
getRank=function(P)--计算评级 getRank=function(P)--计算评级
if P.stat.row<40 then return end--你总得打完40行对吧否则直接return空掉成绩都不记录 if P.stat.row<40 then return end--你总得打完40行对吧否则直接return空掉成绩都不记录

View File

@@ -267,8 +267,8 @@ do
for _,v in next,VK_org do for _,v in next,VK_org do
if not v.color then if not v.color then
autoRestart=true
fs.remove("conf/virtualkey") fs.remove("conf/virtualkey")
autoRestart=true
break break
end end
end end

BIN
media/BGM/battle.ogg Normal file

Binary file not shown.

View File

@@ -2,14 +2,11 @@ local data=love.data
local gc=love.graphics local gc=love.graphics
local gc_setColor,gc_setLineWidth,gc_setShader=gc.setColor,gc.setLineWidth,gc.setShader local gc_setColor,gc_setLineWidth,gc_setShader=gc.setColor,gc.setLineWidth,gc.setShader
local gc_push,gc_pop,gc_origin=gc.push,gc.pop,gc.origin local gc_push,gc_pop,gc_origin,gc_translate=gc.push,gc.pop,gc.origin,gc.translate
local gc_draw,gc_rectangle,gc_circle=gc.draw,gc.rectangle,gc.circle local gc_draw,gc_rectangle,gc_circle=gc.draw,gc.rectangle,gc.circle
local max,int,rnd=math.max,math.floor,math.random local int,rnd=math.floor,math.random
local sin=math.sin
local sub=string.sub
local char,byte=string.char,string.byte local char,byte=string.char,string.byte
local ins,rem=table.insert,table.remove local ins,rem=table.insert,table.remove
local YIELD=YIELD
@@ -257,14 +254,17 @@ function copyQuestArgs()
ENV.sequence ENV.sequence
return str return str
end end
function pasteQuestArgs(str) do--function pasteQuestArgs(str)
if #str<4 then return end local sub=string.sub
local ENV=CUSTOMENV function pasteQuestArgs(str)
ENV.holdCount= byte(str,1)-48 if #str<4 then return end
ENV.ospin= byte(str,2)~=90 local ENV=CUSTOMENV
ENV.missionKill= byte(str,3)~=90 ENV.holdCount= byte(str,1)-48
ENV.sequence= sub(str,4) ENV.ospin= byte(str,2)~=90
return true ENV.missionKill= byte(str,3)~=90
ENV.sequence= sub(str,4)
return true
end
end end
@@ -467,7 +467,6 @@ end
--Game --Game
function generateLine(hole) function generateLine(hole)
-- return 2^10-1-2^(hole-1)
return 1023-2^(hole-1) return 1023-2^(hole-1)
end end
function freshDate(mode) function freshDate(mode)
@@ -500,16 +499,6 @@ function legalGameTime()--Check if today's playtime is legal
end end
return true return true
end end
function legalEmail(e)
e=SPLITSTR(e,"@")
if #e~=2 then return false end
if e[1]:sub(-1)=="."or e[2]:sub(-1)=="."then return false end
local e1,e2=SPLITSTR(e[1],"."),SPLITSTR(e[2],".")
if #e1*#e2==0 then return false end
for _,v in next,e1 do if #v==0 then return false end end
for _,v in next,e2 do if #v==0 then return false end end
return true
end
function mergeStat(stat,delta)--Merge delta stat. to global stat. function mergeStat(stat,delta)--Merge delta stat. to global stat.
for k,v in next,delta do for k,v in next,delta do
@@ -690,6 +679,7 @@ do--function dumpBasicConfig()
end end
end end
do--function resetGameData(args) do--function resetGameData(args)
local YIELD=YIELD
local function tick_showMods() local function tick_showMods()
local time=0 local time=0
while true do while true do
@@ -790,36 +780,39 @@ do--function resetGameData(args)
collectgarbage() collectgarbage()
end end
end end
function checkWarning() do--function checkWarning()
local P1=PLAYERS[1] local max=math.max
if P1.alive then function checkWarning()
if P1.frameRun%26==0 then local P1=PLAYERS[1]
local F=P1.field if P1.alive then
local height=0--Max height of row 4~7 if P1.frameRun%26==0 then
for x=4,7 do local F=P1.field
for y=#F,1,-1 do local height=0--Max height of row 4~7
if F[y][x]>0 then for x=4,7 do
if y>height then for y=#F,1,-1 do
height=y if F[y][x]>0 then
if y>height then
height=y
end
break
end end
break
end end
end end
GAME.warnLVL0=math.log(height-(P1.gameEnv.fieldH-5)+P1.atkBuffer.sum*.8)
end end
GAME.warnLVL0=math.log(height-(P1.gameEnv.fieldH-5)+P1.atkBuffer.sum*.8) local _=GAME.warnLVL
if _<GAME.warnLVL0 then
_=_*.95+GAME.warnLVL0*.05
elseif _>0 then
_=max(_-.026,0)
end
GAME.warnLVL=_
elseif GAME.warnLVL>0 then
GAME.warnLVL=max(GAME.warnLVL-.026,0)
end end
local _=GAME.warnLVL if GAME.warnLVL>1.126 and P1.frameRun%30==0 then
if _<GAME.warnLVL0 then SFX.fplay("warning",SETTING.sfx_warn)
_=_*.95+GAME.warnLVL0*.05
elseif _>0 then
_=max(_-.026,0)
end end
GAME.warnLVL=_
elseif GAME.warnLVL>0 then
GAME.warnLVL=max(GAME.warnLVL-.026,0)
end
if GAME.warnLVL>1.126 and P1.frameRun%30==0 then
SFX.fplay("warning",SETTING.sfx_warn)
end end
end end
@@ -933,7 +926,7 @@ do--function saveRecording()
--Filtering modes that cannot be saved --Filtering modes that cannot be saved
for _,v in next,noRecList do for _,v in next,noRecList do
if GAME.curModeName:find(v)then if GAME.curModeName:find(v)then
LOG.print("Cannot save recording of this mode now!",COLOR.sky) LOG.print("Cannot save recording of this mode now!",COLOR.N)
return return
end end
end end
@@ -987,6 +980,7 @@ do--function drawFWM()
--等Techmino发展到一定程度之后会解除这个限制 --等Techmino发展到一定程度之后会解除这个限制
--最后,别把藏在这里的东西截图/复制出去哦~ --最后,别把藏在这里的东西截图/复制出去哦~
--感谢您对Techmino的支持!!! --感谢您对Techmino的支持!!!
local sin=math.sin
local setFont,TIME,mStr=setFont,TIME,mStr local setFont,TIME,mStr=setFont,TIME,mStr
function drawFWM() function drawFWM()
local t=TIME() local t=TIME()
@@ -995,6 +989,22 @@ do--function drawFWM()
mStr(m[_G["\83\69\84\84\73\78\71"]["\108\97\110\103"]or m[1]],240,60+26*sin(t)) mStr(m[_G["\83\69\84\84\73\78\71"]["\108\97\110\103"]or m[1]],240,60+26*sin(t))
end end
end end
do--function drawSelfProfile()
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)
gc_pop()
end
end
function drawWarning() function drawWarning()
if SETTING.warn and GAME.warnLVL>0 then if SETTING.warn and GAME.warnLVL>0 then
gc_push("transform") gc_push("transform")

View File

@@ -4,94 +4,94 @@ local function disableKey(P,key)
end end
MODOPT={--Mod options MODOPT={--Mod options
{no=0,id="NX",name="next", {no=0,id="NX",name="next",
key="q",x=80,y=230,color="orange", key="q",x=80,y=230,color="O",
list={0,1,2,3,4,5,6}, list={0,1,2,3,4,5,6},
func=function(P,O)P.gameEnv.nextCount=O end, func=function(P,O)P.gameEnv.nextCount=O end,
}, },
{no=1,id="HL",name="hold", {no=1,id="HL",name="hold",
key="w",x=200,y=230,color="orange", key="w",x=200,y=230,color="O",
list={0,1,2,3,4,5,6}, list={0,1,2,3,4,5,6},
func=function(P,O)P.gameEnv.holdCount=O end, func=function(P,O)P.gameEnv.holdCount=O end,
unranked=true, unranked=true,
}, },
{no=2,id="FL",name="hideNext", {no=2,id="FL",name="hideNext",
key="e",x=320,y=230,color="aqua", key="e",x=320,y=230,color="A",
list={1,2,3,4,5}, list={1,2,3,4,5},
func=function(P,O)P.gameEnv.nextStartPos=O +1 end, func=function(P,O)P.gameEnv.nextStartPos=O +1 end,
}, },
{no=3,id="IH",name="infHold", {no=3,id="IH",name="infHold",
key="r",x=440,y=230,color="aqua", key="r",x=440,y=230,color="A",
func=function(P)P.gameEnv.infHold=true end, func=function(P)P.gameEnv.infHold=true end,
unranked=true, unranked=true,
}, },
{no=4,id="HB",name="hideBlock", {no=4,id="HB",name="hideBlock",
key="y",x=680,y=230,color="purple", key="y",x=680,y=230,color="V",
func=function(P)P.gameEnv.block=false end, func=function(P)P.gameEnv.block=false end,
}, },
{no=5,id="HG",name="hideGhost", {no=5,id="HG",name="hideGhost",
key="u",x=800,y=230,color="purple", key="u",x=800,y=230,color="V",
func=function(P)P.gameEnv.ghost=false end, func=function(P)P.gameEnv.ghost=false end,
}, },
{no=6,id="HD",name="hidden", {no=6,id="HD",name="hidden",
key="i",x=920,y=230,color="grape", key="i",x=920,y=230,color="P",
list={"easy","slow","medium","fast","none"}, list={"easy","slow","medium","fast","none"},
func=function(P,O)P.gameEnv.visible=O end, func=function(P,O)P.gameEnv.visible=O end,
unranked=true, unranked=true,
}, },
{no=7,id="HB",name="hideBoard", {no=7,id="HB",name="hideBoard",
key="o",x=1040,y=230,color="grape", key="o",x=1040,y=230,color="P",
list={"down","up","all"}, list={"down","up","all"},
func=function(P,O)P.gameEnv.hideBoard=O end, func=function(P,O)P.gameEnv.hideBoard=O end,
}, },
{no=8,id="FB",name="flipBoard", {no=8,id="FB",name="flipBoard",
key="p",x=1160,y=230,color="grass", key="p",x=1160,y=230,color="J",
list={"U-D","L-R","180"}, list={"U-D","L-R","180"},
func=function(P,O)P.gameEnv.flipBoard=O end, func=function(P,O)P.gameEnv.flipBoard=O end,
}, },
{no=9,id="DT",name="dropDelay", {no=9,id="DT",name="dropDelay",
key="a",x=140,y=350,color="red", key="a",x=140,y=350,color="R",
list={0,.125,.25,.5,1,2,3,4,5,6,7,8,9,10,12,14,16,18,20,25,30,40,60,180,1e99}, list={0,.125,.25,.5,1,2,3,4,5,6,7,8,9,10,12,14,16,18,20,25,30,40,60,180,1e99},
func=function(P,O)P.gameEnv.drop=O end, func=function(P,O)P.gameEnv.drop=O end,
unranked=true, unranked=true,
}, },
{no=10,id="LT",name="lockDelay", {no=10,id="LT",name="lockDelay",
key="s",x=260,y=350,color="red", key="s",x=260,y=350,color="R",
list={0,1,2,3,4,5,6,7,8,9,10,12,14,16,18,20,25,30,40,60,180,1e99}, list={0,1,2,3,4,5,6,7,8,9,10,12,14,16,18,20,25,30,40,60,180,1e99},
func=function(P,O)P.gameEnv.lock=O end, func=function(P,O)P.gameEnv.lock=O end,
unranked=true, unranked=true,
}, },
{no=11,id="ST",name="waitDelay", {no=11,id="ST",name="waitDelay",
key="d",x=380,y=350,color="red", key="d",x=380,y=350,color="R",
list={0,1,2,3,4,5,6,7,8,10,15,20,30,60}, list={0,1,2,3,4,5,6,7,8,10,15,20,30,60},
func=function(P,O)P.gameEnv.wait=O end, func=function(P,O)P.gameEnv.wait=O end,
unranked=true, unranked=true,
}, },
{no=12,id="CT",name="fallDelay", {no=12,id="CT",name="fallDelay",
key="f",x=500,y=350,color="red", key="f",x=500,y=350,color="R",
list={0,1,2,3,4,5,6,7,8,10,15,20,30,60}, list={0,1,2,3,4,5,6,7,8,10,15,20,30,60},
func=function(P,O)P.gameEnv.fall=O end, func=function(P,O)P.gameEnv.fall=O end,
unranked=true, unranked=true,
}, },
{no=13,id="LF",name="life", {no=13,id="LF",name="life",
key="j",x=860,y=350,color="yellow", key="j",x=860,y=350,color="Y",
list={0,1,2,3,5,10,15,26,42,87,500}, list={0,1,2,3,5,10,15,26,42,87,500},
func=function(P,O)P.gameEnv.life=O end, func=function(P,O)P.gameEnv.life=O end,
unranked=true, unranked=true,
}, },
{no=14,id="FB",name="forceB2B", {no=14,id="FB",name="forceB2B",
key="k",x=980,y=350,color="yellow", key="k",x=980,y=350,color="Y",
func=function(P)P.gameEnv.b2bKill=true end, func=function(P)P.gameEnv.b2bKill=true end,
unranked=true, unranked=true,
}, },
{no=15,id="PF",name="forceFinesse", {no=15,id="PF",name="forceFinesse",
key="l",x=1100,y=350,color="yellow", key="l",x=1100,y=350,color="Y",
func=function(P)P.gameEnv.fineKill=true end, func=function(P)P.gameEnv.fineKill=true end,
unranked=true, unranked=true,
}, },
{no=16,id="TL",name="tele", {no=16,id="TL",name="tele",
key="z",x=200,y=470,color="lGray", key="z",x=200,y=470,color="lH",
func=function(P) func=function(P)
P.gameEnv.das,P.gameEnv.arr=0,0 P.gameEnv.das,P.gameEnv.arr=0,0
P.gameEnv.sddas,P.gameEnv.sdarr=0,0 P.gameEnv.sddas,P.gameEnv.sdarr=0,0
@@ -99,7 +99,7 @@ MODOPT={--Mod options
unranked=true, unranked=true,
}, },
{no=17,id="FX",name="noRotation", {no=17,id="FX",name="noRotation",
key="x",x=320,y=470,color="lGray", key="x",x=320,y=470,color="lH",
func=function(P) func=function(P)
disableKey(P,3) disableKey(P,3)
disableKey(P,4) disableKey(P,4)
@@ -108,7 +108,7 @@ MODOPT={--Mod options
unranked=true, unranked=true,
}, },
{no=18,id="GL",name="noMove", {no=18,id="GL",name="noMove",
key="c",x=440,y=470,color="lGray", key="c",x=440,y=470,color="lH",
func=function(P) func=function(P)
disableKey(P,1)disableKey(P,2) disableKey(P,1)disableKey(P,2)
disableKey(P,11)disableKey(P,12) disableKey(P,11)disableKey(P,12)
@@ -118,19 +118,19 @@ MODOPT={--Mod options
unranked=true, unranked=true,
}, },
{no=19,id="CS",name="customSeq", {no=19,id="CS",name="customSeq",
key="b",x=680,y=470,color="blue", key="b",x=680,y=470,color="B",
list={"bag","his4","c2","rnd","mess","reverb"}, list={"bag","his4","c2","rnd","mess","reverb"},
func=function(P,O)P.gameEnv.sequence=O end, func=function(P,O)P.gameEnv.sequence=O end,
unranked=true, unranked=true,
}, },
{no=20,id="PS",name="pushSpeed", {no=20,id="PS",name="pushSpeed",
key="n",x=800,y=470,color="blue", key="n",x=800,y=470,color="B",
list={.5,1,2,3,5,15,1e99}, list={.5,1,2,3,5,15,1e99},
func=function(P,O)P.gameEnv.pushSpeed=O end, func=function(P,O)P.gameEnv.pushSpeed=O end,
unranked=true, unranked=true,
}, },
{no=21,id="BN",name="boneBlock", {no=21,id="BN",name="boneBlock",
key="m",x=920,y=470,color="blue", key="m",x=920,y=470,color="B",
list={"on","off"}, list={"on","off"},
func=function(P,O)P.gameEnv.bone=O=="on"end, func=function(P,O)P.gameEnv.bone=O=="on"end,
}, },
@@ -148,44 +148,6 @@ PLY_NET={}
FIELD={}--Field(s) for custom game FIELD={}--Field(s) for custom game
BAG={}--Sequence for custom game BAG={}--Sequence for custom game
MISSION={}--Clearing mission for custom game MISSION={}--Clearing mission for custom game
CUSTOMENV={--gameEnv for cutsom game
--Basic
drop=60,
lock=60,
wait=0,
fall=0,
--Control
nextCount=6,
holdCount=1,
infHold=false,
phyHold=false,
--Visual
bone=false,
--Rule
sequence="bag",
fieldH=20,
ospin=true,
fineKill=false,
b2bKill=false,
easyFresh=true,
deepDrop=false,
visible="show",
freshLimit=1e99,
opponent="X",
life=0,
pushSpeed=3,
missionKill=false,
--Else
bg="none",
bgm="race",
}
GAME={--Global game data GAME={--Global game data
init=false, --If need initializing game when enter scene-play init=false, --If need initializing game when enter scene-play
net=false, --If play net game net=false, --If play net game
@@ -227,6 +189,47 @@ USER=FILE.load("conf/user")or{--User infomation
--Local data --Local data
xp=0,lv=1, xp=0,lv=1,
} }
CUSTOMENV=FILE.load("conf/customEnv")
if not CUSTOMENV or CUSTOMENV.version~=VERSION.code then CUSTOMENV={--gameEnv for cutsom game
version=VERSION.code,
--Basic
drop=1e99,
lock=1e99,
wait=0,
fall=0,
--Control
nextCount=6,
holdCount=1,
infHold=true,
phyHold=false,
--Visual
bone=false,
--Rule
sequence="bag",
fieldH=20,
ospin=true,
fineKill=false,
b2bKill=false,
easyFresh=true,
deepDrop=false,
visible="show",
freshLimit=1e99,
opponent="X",
life=0,
pushSpeed=3,
missionKill=false,
--Else
bg="none",
bgm="infinite",
}end
SETTING={--Settings SETTING={--Settings
--Tuning --Tuning
das=10,arr=2,dascut=0, das=10,arr=2,dascut=0,
@@ -331,26 +334,26 @@ keyMap=FILE.load("conf/key")or{--Key setting
}, },
} }
VK_org=FILE.load("conf/virtualkey")or{--Virtualkey layout, refresh all VKs' position with this before each game VK_org=FILE.load("conf/virtualkey")or{--Virtualkey layout, refresh all VKs' position with this before each game
{ava=true, x=80, y=720-200, r=80,color=COLOR.lime},--moveLeft {ava=true, x=80, y=720-200, r=80,color=COLOR.L},--moveLeft
{ava=true, x=320, y=720-200, r=80,color=COLOR.lime},--moveRight {ava=true, x=320, y=720-200, r=80,color=COLOR.L},--moveRight
{ava=true, x=1280-80, y=720-200, r=80,color=COLOR.red},--rotRight {ava=true, x=1280-80, y=720-200, r=80,color=COLOR.R},--rotRight
{ava=true, x=1280-200, y=720-80, r=80,color=COLOR.orange},--rotLeft {ava=true, x=1280-200, y=720-80, r=80,color=COLOR.O},--rotLeft
{ava=true, x=1280-200, y=720-320, r=80,color=COLOR.magenta},--rot180 {ava=true, x=1280-200, y=720-320, r=80,color=COLOR.M},--rot180
{ava=true, x=200, y=720-320, r=80,color=COLOR.cyan},--hardDrop {ava=true, x=200, y=720-320, r=80,color=COLOR.C},--hardDrop
{ava=true, x=200, y=720-80, r=80,color=COLOR.sea},--softDrop {ava=true, x=200, y=720-80, r=80,color=COLOR.S},--softDrop
{ava=true, x=1280-320, y=720-200, r=80,color=COLOR.yellow},--hold {ava=true, x=1280-320, y=720-200, r=80,color=COLOR.Y},--hold
{ava=true, x=1280-80, y=280, r=80,color=COLOR.lRed},--func1 {ava=true, x=1280-80, y=280, r=80,color=COLOR.lR},--func1
{ava=true, x=80, y=280, r=80,color=COLOR.lMagenta},--func2 {ava=true, x=80, y=280, r=80,color=COLOR.lM},--func2
{ava=false, x=100, y=50, r=80,color=COLOR.aqua},--insLeft {ava=false, x=100, y=50, r=80,color=COLOR.A},--insLeft
{ava=false, x=200, y=50, r=80,color=COLOR.aqua},--insRight {ava=false, x=200, y=50, r=80,color=COLOR.A},--insRight
{ava=false, x=300, y=50, r=80,color={COLOR.rainbow(3.5)}},--insDown {ava=false, x=300, y=50, r=80,color={COLOR.rainbow(3.5)}},--insDown
{ava=false, x=400, y=50, r=80,color={COLOR.rainbow(3.3)}},--down1 {ava=false, x=400, y=50, r=80,color={COLOR.rainbow(3.3)}},--down1
{ava=false, x=500, y=50, r=80,color={COLOR.rainbow(3.1)}},--down4 {ava=false, x=500, y=50, r=80,color={COLOR.rainbow(3.1)}},--down4
{ava=false, x=600, y=50, r=80,color={COLOR.rainbow(2.9)}},--down10 {ava=false, x=600, y=50, r=80,color={COLOR.rainbow(2.9)}},--down10
{ava=false, x=700, y=50, r=80,color=COLOR.lLime},--dropLeft {ava=false, x=700, y=50, r=80,color=COLOR.lL},--dropLeft
{ava=false, x=800, y=50, r=80,color=COLOR.lLime},--dropRight {ava=false, x=800, y=50, r=80,color=COLOR.lL},--dropRight
{ava=false, x=900, y=50, r=80,color=COLOR.laqua},--addToLeft {ava=false, x=900, y=50, r=80,color=COLOR.lA},--addToLeft
{ava=false, x=1000, y=50, r=80,color=COLOR.laqua},--addToRight {ava=false, x=1000, y=50, r=80,color=COLOR.lA},--addToRight
} }
virtualkey={}for i=1,#VK_org do virtualkey[i]={}end--In-game virtualkey layout virtualkey={}for i=1,#VK_org do virtualkey[i]={}end--In-game virtualkey layout
REPLAY=FILE.load("conf/replay")or{} REPLAY=FILE.load("conf/replay")or{}

View File

@@ -47,19 +47,19 @@ return{
"ttt tetris trainer tres bien", "ttt tetris trainer tres bien",
"game", "game",
"*Web-based, no mobile support | Single player*\nTetris Trainer Tres-Bien. A hands-on tutorial of advanced techniques in modern Tetris.\nRecommended for players that can complete a 40-line Sprint with all Tetris line clears and no hold.\nCovered topics include T-Spin, finesse, SRS, and some battle setups.\nLinked is translated to Simplified Chinese; original in Japanese.", "*Web-based, no mobile support | Single player*\nTetris Trainer Tres-Bien. A hands-on tutorial of advanced techniques in modern Tetris.\nRecommended for players that can complete a 40-line Sprint with all Tetris line clears and no hold.\nCovered topics include T-Spin, finesse, SRS, and some battle setups.\nLinked is translated to Simplified Chinese; original in Japanese.",
"http://121.4.147.128/ttt", "http://teatube.ltd/ttt",
}, },
{"TTPC", {"TTPC",
"ttpc tetris perfect clear challenge", "ttpc tetris perfect clear challenge",
"game", "game",
"*Web-based, no mobile support | Single player*\nTetris Perfect Clear Challenge. The PC opener tutorial for SRS+bag7.\nRecommended for players that have completed TTT. You need to know SRS to play this.\nIncludes only the basic PC opener.\nLinked is translated to Simplified Chinese; original in Japanese.", "*Web-based, no mobile support | Single player*\nTetris Perfect Clear Challenge. The PC opener tutorial for SRS+bag7.\nRecommended for players that have completed TTT. You need to know SRS to play this.\nIncludes only the basic PC opener.\nLinked is translated to Simplified Chinese; original in Japanese.",
"http://121.4.147.128/ttpc", "http://teatube.ltd/ttpc",
}, },
{"NAZO", {"NAZO",
"nazo", "nazo",
"game", "game",
"*Web-based, no mobile support | Single player*\nAll sorts of SRS puzzles. Recommended for players that have completed TTT.\nHas T-Spin and all spin puzzles of all difficulties.\nLinked is translated to Simplified Chinese; original in Japanese.", "*Web-based, no mobile support | Single player*\nAll sorts of SRS puzzles. Recommended for players that have completed TTT.\nHas T-Spin and all spin puzzles of all difficulties.\nLinked is translated to Simplified Chinese; original in Japanese.",
"http://121.4.147.128/nazo", "http://teatube.ltd/nazo",
}, },
{"King of Stackers", {"King of Stackers",
@@ -228,9 +228,9 @@ return{
"Dig/Defend per minute\n\tSometimes can reflect how well a player can survive garbage.", "Dig/Defend per minute\n\tSometimes can reflect how well a player can survive garbage.",
}, },
{"ADPM", {"ADPM",
"adpm attackdigperminute", "adpm attackdigperminute vs",
"term", "term",
"Attack&Dig per minute\n\tUsed to compare skill differences between the two players within one match; slightly more accurate than APM.", "Attack&Dig per minute\n\tUsed to compare skill differences between the two players within one match; slightly more accurate than APM.\n\"vs\" in TETR.IO is Atk+Dig per 100s",
}, },
{"APL", {"APL",
"apl attackperline efficiency", "apl attackperline efficiency",
@@ -772,7 +772,7 @@ return{
"tetrisonline servers", "tetrisonline servers",
"other", "other",
"Google \"Tetris Online Poland\" for the Poland server.\nClick \"Open URL\" for information about the Tetris Online Study server.", "Google \"Tetris Online Poland\" for the Poland server.\nClick \"Open URL\" for information about the Tetris Online Study server.",
"http://121.4.147.128/tos", "http://teatube.ltd/tos",
}, },
{"Github Repository", {"Github Repository",
"githubrepository sourcecode", "githubrepository sourcecode",

View File

@@ -42,19 +42,19 @@ return{
"教程 ttt", "教程 ttt",
"game", "game",
"现代方块特殊操作手把手教程(推荐使用电脑,移动设备需要外接键盘)\n\t推荐能无hold纯消四完成40行挑战的人学习\n\t内含T-spin、极简、SRS、部分对战定式介绍等教程\n\t完全吃透了话就可以成为教练啦!\n注:提供的链接是翻译后挂在茶服的版本", "现代方块特殊操作手把手教程(推荐使用电脑,移动设备需要外接键盘)\n\t推荐能无hold纯消四完成40行挑战的人学习\n\t内含T-spin、极简、SRS、部分对战定式介绍等教程\n\t完全吃透了话就可以成为教练啦!\n注:提供的链接是翻译后挂在茶服的版本",
"http://121.4.147.128/ttt", "http://teatube.ltd/ttt",
}, },
{"TTPC", {"TTPC",
"pc教程 ttpc", "pc教程 ttpc",
"game", "game",
"SRS+bag7方块游戏开局PC教程(推荐使用电脑,移动设备需要外接键盘)\n\t推荐完成了ttt的人学习(必须先学会SRS)\n\t(不包括六巧板等其它PC定式)\n\n注:提供的链接是翻译后挂在茶服的版本", "SRS+bag7方块游戏开局PC教程(推荐使用电脑,移动设备需要外接键盘)\n\t推荐完成了ttt的人学习(必须先学会SRS)\n\t(不包括六巧板等其它PC定式)\n\n注:提供的链接是翻译后挂在茶服的版本",
"http://121.4.147.128/ttpc", "http://teatube.ltd/ttpc",
}, },
{"NAZO", {"NAZO",
"题库 nazo", "题库 nazo",
"game", "game",
"各类SRS试题(手机触屏玩不了)\n\t推荐能通过ttt的玩家尝试。\n\t内含各种t-spin/all-spin题目简单到极难题目都有。\n\n注:提供的链接是翻译后挂在茶服的版本", "各类SRS试题(手机触屏玩不了)\n\t推荐能通过ttt的玩家尝试。\n\t内含各种t-spin/all-spin题目简单到极难题目都有。\n\n注:提供的链接是翻译后挂在茶服的版本",
"http://121.4.147.128/nazo", "http://teatube.ltd/nazo",
}, },
--游戏(网页) --游戏(网页)
@@ -106,7 +106,7 @@ return{
"俄罗斯方块大师 tgm tetrisgrandmaster", "俄罗斯方块大师 tgm tetrisgrandmaster",
"game", "game",
"一个街机平台方块系列S13/GM等称号出自该系列可以在win平台运行\n\n其中TGM3目前玩得最普遍部分模式说明:\nMaster:大师模式,有段位评价,拿到更高段位点的要求:非消一的连击和消四字幕战中消除和通关每100的前70小于【标准时间上一个0~70秒数+2】中小的一个每100总用时不能超过限定值(不然取消上一个方法的加分并反扣点数);到500若没有进标准时间会强制结束游戏(称为铁门);字幕战有两个难度,半隐和全隐,后者必须拿到几乎全部的段位点才能进,消除奖励的段位点也更多。\nShirase:死亡模式类似于techmino中的20G-极限开局就是高速20G500和1000有铁门500开始底下开始涨垃圾行1000开始出现骨块1300通关进入大方块字幕战;段位结算:每通100加1段从S1到S13如果通关了字幕战就会有金色的S13\n\n更多内容详见链接", "一个街机平台方块系列S13/GM等称号出自该系列可以在win平台运行\n\n其中TGM3目前玩得最普遍部分模式说明:\nMaster:大师模式,有段位评价,拿到更高段位点的要求:非消一的连击和消四字幕战中消除和通关每100的前70小于【标准时间上一个0~70秒数+2】中小的一个每100总用时不能超过限定值(不然取消上一个方法的加分并反扣点数);到500若没有进标准时间会强制结束游戏(称为铁门);字幕战有两个难度,半隐和全隐,后者必须拿到几乎全部的段位点才能进,消除奖励的段位点也更多。\nShirase:死亡模式类似于techmino中的20G-极限开局就是高速20G500和1000有铁门500开始底下开始涨垃圾行1000开始出现骨块1300通关进入大方块字幕战;段位结算:每通100加1段从S1到S13如果通关了字幕战就会有金色的S13\n\n更多内容详见链接",
"http://121.4.147.128/TGMGUIDE/", "http://teatube.ltd/TGMGUIDE/",
}, },
{"DTET", {"DTET",
"dtet", "dtet",
@@ -228,9 +228,9 @@ return{
"Dig/Defend per Minute\n挖掘每分,即玩家每分钟向下挖掘的垃圾行数。\n某些时候可以体现玩家生存能力\n\n或:防御(抵消+挖掘)每分", "Dig/Defend per Minute\n挖掘每分,即玩家每分钟向下挖掘的垃圾行数。\n某些时候可以体现玩家生存能力\n\n或:防御(抵消+挖掘)每分",
}, },
{"ADPM", {"ADPM",
"adpm attack defend", "adpm attack defend vs",
"term", "term",
"Atk+Dig per Minute\n攻击+挖掘每分用于在同一局游戏内对比玩家间水平差距比apm更准确一些。\n在TETR.IO中有一个叫vs的数据就是ADPM(调整比例)",--TODO "Atk+Dig per Minute\n攻击+挖掘每分用于在同一局游戏内对比玩家间水平差距比apm更准确一些。\n在TETR.IO中叫vs的数据就是ADPM(调整比例具体是Atk+Dig per 100s)",
}, },
{"APL", {"APL",
"apl xiaolv", "apl xiaolv",
@@ -262,7 +262,7 @@ return{
{"Tetris", {"Tetris",
"tetris xiaosi", "tetris xiaosi",
"term", "term",
"商标Tetris游戏名同时也是别的方块游戏里消四行的名字。\n含义是Tetra(古希腊语 四)+Tennis(游戏原作者喜欢的运动)。", "商标Tetris游戏名同时也是别的方块游戏里消四行的名字。\n含义是Tetra(古希腊语 四)+Tennis(游戏原作者喜欢的运动)。\n现在版权在TTC(The Tetris Company)手上任天堂和世嘉开发游戏是TTC授权的本身并没有版权。",
}, },
{"PC", {"PC",
"pc perfectclear ac allclear quanxiao quanqing", "pc perfectclear ac allclear quanxiao quanqing",
@@ -523,12 +523,12 @@ return{
{"DAS & ARR", {"DAS & ARR",
"灵敏度 das arr", "灵敏度 das arr",
"term", "term",
"DAS(Delay-auto-shift延迟自动移动)系统。\n\nDAS自动移动延迟,指从<按下移动键时动了一格>到<开始自动移动>之间的时间\nARR(Auto-repeat-rate),自动重复速率,指<每次自动移动>之间的时间\n\n单位都是f(帧1帧=1/60秒)\n新人不会调的话推荐用das=8~10arr=1~2\n对自己能力比较自信或者是已经有一定水平想提速推荐用das=4~6arr=0\n(如果是别的游戏单位是ms(毫秒)那么乘16.7就可算出对应的数值)\n\n最佳调整方法:das越小越好小到玩家依然能准区分单点/长按为止;arr能0就0游戏不允许的话就能拉多小拉多小\n\n这套系统也被叫作DAS系统", "DAS(Delay-auto-shift自动加速延迟)系统。\n\nDAS具体指从<按下移动键时动了一格>到<开始自动移动>之间的时间\nARR(Auto-repeat-rate),自动重复速率,指<每次自动移动>之间的时间\n\n单位都是f(帧1帧=1/60秒)\n新人不会调的话推荐用das=8~10arr=1~2\n对自己能力比较自信或者是已经有一定水平想提速推荐用das=4~6arr=0\n(如果是别的游戏单位是ms(毫秒)那么乘16.7就可算出对应的数值)\n\n最佳调整方法:das越小越好小到依然能准区分单点/长按为止;arr能0就0游戏不允许的话就能拉多小拉多小\n\n这套系统也被叫作DAS系统",
}, },
{"DAS通俗", {"DAS通俗",
"das arr", "das arr",
"term", "term",
"打字时按住o你会看到:Ooooooooooo\n在时间轴上:O-----------o-o-o-o-o-o-o-o-o-o\n-----------就是das长度-就是arr长度", "打字时按住o你会看到:ooooooooooo\n在时间轴上:o-----------o-o-o-o-o-o-o-o-o-o\n-----------就是das长度-就是arr长度",
}, },
{"DAS打断", {"DAS打断",
"dascut", "dascut",
@@ -781,7 +781,7 @@ return{
"茶服 chafu study", "茶服 chafu study",
"other", "other",
"TO-S的添加方法、说明等关于茶服的一切", "TO-S的添加方法、说明等关于茶服的一切",
"http://121.4.147.128/tos", "http://teatube.ltd/tos",
}, },
{"Github仓库", {"Github仓库",
"源代码 github sourcecode yuandaima", "源代码 github sourcecode yuandaima",

View File

@@ -1,4 +1,4 @@
local c=COLOR local C=COLOR
return{ return{
back="Back", back="Back",
anykey="Press a key!", anykey="Press a key!",
@@ -219,7 +219,6 @@ return{
music="Music & SE", music="Music & SE",
about="About", about="About",
dict="Zictionary", dict="Zictionary",
lang="言/A",
manual="Manual", manual="Manual",
quit="Exit", quit="Exit",
}, },
@@ -852,30 +851,30 @@ return{
"You can perform a spin with 28 of the 29 minoes in this game; the exception being O1.", "You can perform a spin with 28 of the 29 minoes in this game; the exception being O1.",
"You can set the spawning orientation for each tetromino.", "You can set the spawning orientation for each tetromino.",
"ZS JL T O I", "ZS JL T O I",
{c.C,"Also try 15puzzle!"}, {C.C,"Also try 15puzzle!"},
{c.C,"Also try Minecraft!"}, {C.C,"Also try Minecraft!"},
{c.C,"Also try Minesweeper!"}, {C.C,"Also try Minesweeper!"},
{c.C,"Also try osu!"}, {C.C,"Also try osu!"},
{c.C,"Also try Phigros!"}, {C.C,"Also try Phigros!"},
{c.C,"Also try Rubic's cube!"}, {C.C,"Also try Rubic's cube!"},
{c.C,"Also try Terraria!"}, {C.C,"Also try Terraria!"},
{c.C,"Also try VVVVVV!"}, {C.C,"Also try VVVVVV!"},
{c.fire,"Also try Cultris II!"}, {C.fire,"Also try Cultris II!"},
{c.fire,"Also try Jstris"}, {C.fire,"Also try Jstris"},
{c.fire,"Also try NullpoMino!"}, {C.fire,"Also try NullpoMino!"},
{c.fire,"Also try TETR.IO!"}, {C.fire,"Also try TETR.IO!"},
{c.fire,"Also try Tetr.js!"}, {C.fire,"Also try Tetr.js!"},
{c.fire,"Also try Tetra Legends!"}, {C.fire,"Also try Tetra Legends!"},
{c.grape,"T-spin!"}, {C.purple,"T-spin!"},
{c.gray,"REGRET!!"}, {C.H,"REGRET!!"},
{c.lR,"Z ",c.lG,"S ",c.lSea,"J ",c.lOrange,"L ",c.lGrape,"T ",c.lY,"O ",c.lC,"I"}, {C.lR,"Z ",C.lG,"S ",C.lS,"J ",C.lO,"L ",C.lP,"T ",C.lY,"O ",C.lC,"I"},
{c.lY,"COOL!!"}, {C.lY,"COOL!!"},
{c.R,"\"DMCA abusing\""}, {C.R,"\"DMCA abusing\""},
{c.R,"\"Intellectual property law\""}, {C.R,"\"Intellectual property law\""},
{c.R,"DT",c.W," Cannon=",c.grape,"TS",c.R,"D",c.W,"+",c.grape,"TS",c.R,"T",c.W," Cannon"}, {C.R,"DT",C.Z," Cannon=",C.purple,"TS",C.R,"D",C.Z,"+",C.purple,"TS",C.R,"T",C.Z," Cannon"},
{c.R,"LrL ",c.G,"RlR ",c.B,"LLr ",c.orange,"RRl ",c.grape,"RRR ",c.grape,"LLL ",c.C,"FFF ",c.Y,"RfR ",c.Y,"RRf ",c.Y,"rFF"}, {C.R,"LrL ",C.G,"RlR ",C.B,"LLr ",C.orange,"RRl ",C.purple,"RRR ",C.purple,"LLL ",C.C,"FFF ",C.Y,"RfR ",C.Y,"RRf ",C.Y,"rFF"},
{c.sky,"Lua",c.W," No.1"}, {C.navy,"Lua",C.Z," No.1"},
{c.W,"What is an ",c.lC,"X-Spin"?}, {C.Z,"What is an ",c.lC,"X-Spin"?},
{c.Y,"O-Spin Triple!"}, {C.Y,"O-Spin Triple!"},
} }
} }

View File

@@ -196,7 +196,6 @@ return{
-- music="Music & SE", -- music="Music & SE",
-- about="About", -- about="About",
dict="Zictionary", dict="Zictionary",
lang="言/A",
manual="Manuel", manual="Manuel",
quit="Quitter", quit="Quitter",
}, },

View File

@@ -1,3 +1,4 @@
local C=COLOR
return{ return{
fallback=4, fallback=4,
back="Voltar", back="Voltar",
@@ -219,7 +220,6 @@ return{
-- music="Music & SE", -- music="Music & SE",
-- about="About", -- about="About",
dict="Zictionary", dict="Zictionary",
lang="言/A",
manual="Manual", manual="Manual",
quit="Saída", quit="Saída",
}, },
@@ -609,7 +609,7 @@ return{
}, },
app_15p={ app_15p={
reset="Embaralhar", reset="Embaralhar",
color="Cor", C="Cor",
blind="Cego", blind="Cego",
slide="Deslizar", slide="Deslizar",
pathVis="Mostrar caminho", pathVis="Mostrar caminho",
@@ -843,37 +843,37 @@ return{
"Você pode abrir o diretório de save na pagina de Stats.", "Você pode abrir o diretório de save na pagina de Stats.",
"Você pode escolher uma orientação pra cada blococan.", "Você pode escolher uma orientação pra cada blococan.",
"ZS JL T O I", "ZS JL T O I",
{COLOR.cyan,"Tente também 15puzzle"}, {C.C,"Tente também 15puzzle"},
{COLOR.cyan,"Tente também Minecraft"}, {C.C,"Tente também Minecraft"},
{COLOR.cyan,"Tente também Minesweeper"}, {C.C,"Tente também Minesweeper"},
{COLOR.cyan,"Tente também osu!"}, {C.C,"Tente também osu!"},
{COLOR.cyan,"Tente também Phigros"}, {C.C,"Tente também Phigros"},
{COLOR.cyan,"Tente também Rubic's cube"}, {C.C,"Tente também Rubic's cube"},
{COLOR.cyan,"Tente também Terraria"}, {C.C,"Tente também Terraria"},
{COLOR.cyan,"Tente também VVVVVV"}, {C.C,"Tente também VVVVVV"},
{COLOR.fire,"Tente também Cultris II"}, {C.F,"Tente também Cultris II"},
{COLOR.fire,"Tente também Jstris"}, {C.F,"Tente também Jstris"},
{COLOR.fire,"Tente também Nullpomino"}, {C.F,"Tente também Nullpomino"},
{COLOR.fire,"Tente também Tetr.io"}, {C.F,"Tente também Tetr.io"},
{COLOR.fire,"Tente também Tetr.js"}, {C.F,"Tente também Tetr.js"},
{COLOR.fire,"Tente também Tetralegends"}, {C.F,"Tente também Tetralegends"},
{COLOR.grape,"T-spin!"}, {C.H,"暫定段位:9"},
{COLOR.gray,"暫定段位:9"}, {C.H,"REGRET!!"},
{COLOR.gray,"REGRET!!"}, {C.lR,"Z ",C.lG,"S ",C.lS,"J ",C.lO,"L ",C.lP,"T ",C.lY,"O ",C.lC,"I"},
{COLOR.lR,"Z ",COLOR.lG,"S ",COLOR.lSea,"J ",COLOR.lOrange,"L ",COLOR.lGrape,"T ",COLOR.lY,"O ",COLOR.lC,"I"}, {C.lY,"LEGAL!!"},
{COLOR.lY,"LEGAL!!"}, {C.N,"Lua",C.Z," No.1"},
{COLOR.R,"\"DMCA abusing\""}, {C.P,"T-spin!"},
{COLOR.R,"\"Intellectual property law\""}, {C.R,"\"DMCA abusing\""},
{COLOR.R,"DT",COLOR.W," Cannon=",COLOR.grape,"TS",COLOR.R,"D",COLOR.W,"+",COLOR.grape,"TS",COLOR.R,"T",COLOR.W," Cannon"}, {C.R,"\"Intellectual property law\""},
{COLOR.R,"LrL ",COLOR.G,"RlR ",COLOR.B,"LLr ",COLOR.orange,"RRl ",COLOR.grape,"RRR ",COLOR.grape,"LLL ",COLOR.C,"FFF ",COLOR.Y,"RfR ",COLOR.Y,"RRf ",COLOR.Y,"rFF"}, {C.R,"DT",C.Z," Cannon=",C.P,"TS",C.R,"D",C.Z,"+",C.P,"TS",C.R,"T",C.Z," Cannon"},
{COLOR.sky,"Lua",COLOR.W," No.1"}, {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"},
{COLOR.W,"What is ",COLOR.lC,"Xspin"}, {C.Z,"What is ",C.lC,"Xspin"},
{COLOR.Y,"暫定段位:GM"}, {C.Y,"暫定段位:GM"},
{COLOR.Y,"暫定段位:M"}, {C.Y,"暫定段位:M"},
{COLOR.Y,"暫定段位:MK"}, {C.Y,"暫定段位:MK"},
{COLOR.Y,"暫定段位:MM"}, {C.Y,"暫定段位:MM"},
{COLOR.Y,"暫定段位:MO"}, {C.Y,"暫定段位:MO"},
{COLOR.Y,"暫定段位:MV"}, {C.Y,"暫定段位:MV"},
{COLOR.Y,"O-spin Triple!"}, {C.Y,"O-spin Triple!"},
} }
} }

View File

@@ -197,7 +197,6 @@ return{
music="Música y SFX", music="Música y SFX",
about="Acerca del Juego", about="Acerca del Juego",
dict="Zictionary", dict="Zictionary",
lang="言/A",
manual="Manual", manual="Manual",
quit="Salir", quit="Salir",
}, },

View File

@@ -101,7 +101,6 @@ return{
music="~~~ & =><=", music="~~~ & =><=",
about="?", about="?",
dict="z", dict="z",
lang="言/A",
manual="???", manual="???",
quit="X", quit="X",
}, },

View File

@@ -1,4 +1,4 @@
local c=COLOR local C=COLOR
return{ return{
back="返回", back="返回",
anykey="按任意键继续", anykey="按任意键继续",
@@ -219,7 +219,6 @@ return{
music="音乐&音效", music="音乐&音效",
about="关于", about="关于",
dict="小Z词典", dict="小Z词典",
lang="言/A",
manual="说明书", manual="说明书",
quit="退出", quit="退出",
}, },
@@ -1013,91 +1012,91 @@ return{
"Z酱累了,Z酱不想更新", "Z酱累了,Z酱不想更新",
"Z酱只是个写代码的,懂什么方块", "Z酱只是个写代码的,懂什么方块",
"Z块等身抱枕来一个(x", "Z块等身抱枕来一个(x",
{c.aqua,"AQUA"}, {C.A,"AQUA"},
{c.B,"BLUE"}, {C.B,"BLUE"},
{c.C,"<PURE ",c.grape,"MEMORY>"}, {C.C,"<PURE ",C.purple,"MEMORY>"},
{c.C,"15puzzle好玩!"}, {C.C,"15puzzle好玩!"},
{c.C,"魔方好玩!"}, {C.C,"魔方好玩!"},
{c.C,"扫雷好玩!"}, {C.C,"扫雷好玩!"},
{c.C,"泰拉瑞亚好玩!"}, {C.C,"泰拉瑞亚好玩!"},
{c.C,"我的世界好玩!"}, {C.C,"我的世界好玩!"},
{c.C,"CYAN"}, {C.C,"CYAN"},
{c.C,"Orzmic好玩!"}, {C.C,"Orzmic好玩!"},
{c.C,"Osu!好玩!"}, {C.C,"Osu!好玩!"},
{c.C,"Phigros好玩!"}, {C.C,"Phigros好玩!"},
{c.C,"VVVVVV好玩!"}, {C.C,"VVVVVV好玩!"},
{c.fire,"Cultris II也很好玩!"}, {C.F,"Cultris II也很好玩!"},
{c.fire,"FIRE"}, {C.F,"FIRE"},
{c.fire,"Jstris也很好玩!"}, {C.F,"Jstris也很好玩!"},
{c.fire,"Nullpomino也很好玩!"}, {C.F,"Nullpomino也很好玩!"},
{c.fire,"Tetr.io也很好玩!"}, {C.F,"Tetr.io也很好玩!"},
{c.fire,"Tetr.js也很好玩!"}, {C.F,"Tetr.js也很好玩!"},
{c.fire,"Tetralegends也很好玩!"}, {C.F,"Tetralegends也很好玩!"},
{c.G,"快捷键: Alt+F4=关闭当前窗口"}, {C.G,"快捷键: Alt+F4=关闭当前窗口"},
{c.G,"快捷键: Alt+Tab=切换窗口"}, {C.G,"快捷键: Alt+Tab=切换窗口"},
{c.G,"快捷键: backspace=返回上一个文件目录"}, {C.G,"快捷键: backspace=返回上一个文件目录"},
{c.G,"快捷键: Ctrl+鼠标滚轮=缩放"}, {C.G,"快捷键: Ctrl+鼠标滚轮=缩放"},
{c.G,"快捷键: Ctrl+A=全选"}, {C.G,"快捷键: Ctrl+A=全选"},
{c.G,"快捷键: Ctrl+Alt+Z=查看所有qq消息"}, {C.G,"快捷键: Ctrl+Alt+Z=查看所有qq消息"},
{c.G,"快捷键: Ctrl+D=复制一份"}, {C.G,"快捷键: Ctrl+D=复制一份"},
{c.G,"快捷键: Ctrl+F=查找"}, {C.G,"快捷键: Ctrl+F=查找"},
{c.G,"快捷键: Ctrl+Tab=切换标签页"}, {C.G,"快捷键: Ctrl+Tab=切换标签页"},
{c.G,"快捷键: Ctrl+W=关闭当前标签页"}, {C.G,"快捷键: Ctrl+W=关闭当前标签页"},
{c.G,"快捷键: shift+del=永久删除文件 (技术人员别杠)"}, {C.G,"快捷键: shift+del=永久删除文件 (技术人员别杠)"},
{c.G,"GREEN"}, {C.G,"GREEN"},
{c.grape,"GRAPE"}, {C.H,"感谢Phigros提供部分tip模板("},
{c.grape,"T-spin!"}, {C.H,"暂定段位:9"},
{c.grass,"GRASS"}, {C.H,"REGRET!!"},
{c.gray,"感谢Phigros提供部分tip模板("}, {C.jade,"JADE"},
{c.gray,"暂定段位:9"}, {C.lC,"26连T2来一个?"},
{c.gray,"REGRET!!"}, {C.lC,"Xspin",C.Z,"是啥"},
{c.lime,"LIME"}, {C.lH,"腱鞘炎警告"},
{c.lC,"26连T2来一个?"}, {C.lH,"看起来是个计算器,其实…"},
{c.lC,"Xspin",c.W,"是啥"}, {C.lH,"没学过编曲,音乐都是自己瞎写的,觉得不好听就去设置关了吧"},
{c.lGrape,"Naki",c.W," 可爱!"}, {C.lH,"秘密数字:626"},
{c.lGray,"腱鞘炎警告"}, {C.lH,"你有一个好"},
{c.lGray,"看起来是个计算器,其实…"}, {C.lH,"STSD必死"},
{c.lGray,"没学过编曲,音乐都是自己瞎写的,觉得不好听就去设置关了吧"}, {C.lH,"Techmino没有抽卡没有氪金,太良心了"},
{c.lGray,"秘密数字:626"}, {C.L,"LIME"},
{c.lGray,"你有一个好"}, {C.lP,"Naki",C.Z," 可爱!"},
{c.lGray,"STSD必死"}, {C.lR,"Z ",C.lG,"S ",C.lS,"J ",C.lO,"L ",C.lP,"T ",C.lY,"O ",C.lC,"I"},
{c.lGray,"Techmino没有抽卡没有氪金,太良心了"}, {C.lS,"茶娘",C.Z," 可爱!"},
{c.lR,"Z ",c.lG,"S ",c.lSea,"J ",c.lOrange,"L ",c.lGrape,"T ",c.lY,"O ",c.lC,"I"}, {C.lY,"COOL!!"},
{c.lSea,"茶娘",c.W," 可爱!"}, {C.M,"MAGENTA"},
{c.lY,"COOL!!"}, {C.N,"Lua",C.Z,"天下第一"},
{c.magenta,"MAGENTA"}, {C.N,"NAVY"},
{c.orange,"ORANGE"}, {C.O,"ORANGE"},
{c.pink,"PINK"}, {C.P,"PURPLE"},
{c.pink,"uid:225238922"}, {C.P,"T-spin!"},
{c.purple,"PURPLE"}, {C.R,"《滥用DMCA》"},
{c.R,"滥用DMCA"}, {C.R,"知识产权法"},
{c.R,"《知识产权法》"}, {C.R,"本游戏难度上限很高,做好心理准备。"},
{c.R,"本游戏难度上限很高,做好心理准备。"}, {C.R,"不要向不感兴趣的路人推荐!!!!!!!!"},
{c.R,"不要向不感兴趣的路人推荐!!!!!!!!"}, {C.R,"不要在上课时玩游戏!"},
{c.R,"不要在上课时玩游戏!"}, {C.R,"光敏性癫痫警告"},
{c.R,"光敏性癫痫警告"}, {C.R,"请在有一定游戏基础之后再学Tspin!不然副作用非常大!"},
{c.R,"请在有一定游戏基础之后再学Tspin!不然副作用非常大!"}, {C.R,"新人请千万记住,打好基础,不要太早学那些花里胡哨的。"},
{c.R,"新人请千万记住,打好基础,不要太早学那些花里胡哨的。"}, {C.R,"长时间游戏状态会越来越差!玩久了记得放松一下~"},
{c.R,"长时间游戏状态会越来越差!玩久了记得放松一下~"}, {C.R,"DD",C.Z,"炮=",C.purple,"TS",C.R,"D",C.Z,"+",C.purple,"TS",C.R,"D",C.Z,""},
{c.R,"DD",c.W,"炮=",c.grape,"TS",c.R,"D",c.W,"+",c.grape,"TS",c.R,"D",c.W,""}, {C.R,"DT",C.Z,"炮=",C.purple,"TS",C.R,"D",C.Z,"+",C.purple,"TS",C.R,"T",C.Z,""},
{c.R,"DT",c.W,"炮=",c.grape,"TS",c.R,"D",c.W,"+",c.grape,"TS",c.R,"T",c.W,""}, {C.R,"LrL ",C.G,"RlR ",C.B,"LLr ",C.orange,"RRl ",C.purple,"RRR LLL ",C.C,"FFF ",C.Y,"RfR RRf rFF"},
{c.R,"LrL ",c.G,"RlR ",c.B,"LLr ",c.orange,"RRl ",c.grape,"RRR LLL ",c.C,"FFF ",c.Y,"RfR RRf rFF"}, {C.R,"RED"},
{c.R,"RED"}, {C.S,"SEA"},
{c.sea,"SEA"}, {C.V,"VIOLET"},
{c.sky,"Lua",c.W,"天下第一"}, {C.W,"uid:225238922"},
{c.sky,"SKY"}, {C.W,"WINE"},
{c.W,"1, 2, ",c.C,"",c.W,"!!!!!"}, {C.Y,"暂定段位:GM"},
{c.W,"效率药水",c.gray," 效率提升 (8:00)"}, {C.Y,"暂定段位:M"},
{c.W,"协调药水",c.gray," MD减少 II(1:30)"}, {C.Y,"暂定段位:MK"},
{c.Y,"暂定段位:GM"}, {C.Y,"暂定段位:MM"},
{c.Y,"暂定段位:M"}, {C.Y,"暂定段位:MO"},
{c.Y,"暂定段位:MK"}, {C.Y,"暂定段位:MV"},
{c.Y,"暂定段位:MM"}, {C.Y,"Miya",C.Z," 可爱!"},
{c.Y,"暂定段位:MO"}, {C.Y,"O-spin Triple!"},
{c.Y,"暂定段位:MV"}, {C.Y,"YELLOW"},
{c.Y,"Miya",c.W," 可爱!"}, {C.Z,"1, 2, ",C.C,"",C.Z,"!!!!!"},
{c.Y,"O-spin Triple!"}, {C.Z,"效率药水",C.H," 效率提升 (8:00)"},
{c.Y,"YELLOW"}, {C.Z,"协调药水",C.H," MD减少 II(1:30)"},
-- "Z酱 可爱!", -- "Z酱 可爱!",
} }
} }

View File

@@ -1,4 +1,4 @@
return SPLITSTR([=[ return STRING.split([=[
Gameplay: Gameplay:
The system will provide you with tetrominoes (4-block pieces), The system will provide you with tetrominoes (4-block pieces),
with a total of 7 types, and the player needs to control them with a total of 7 types, and the player needs to control them

View File

@@ -1,4 +1,4 @@
return SPLITSTR([=[ return STRING.split([=[
游戏方法: 游戏方法:
系统会提供的一个个四连骨牌("方块",总共7种) 系统会提供的一个个四连骨牌("方块",总共7种)
玩家需要控制(左右移动和旋转90,180,270度)这些骨牌直到下落到场地底部,锁定 玩家需要控制(左右移动和旋转90,180,270度)这些骨牌直到下落到场地底部,锁定

View File

@@ -302,7 +302,7 @@ rankColor={
} }
minoColor={ minoColor={
COLOR.red, COLOR.fire, COLOR.orange, COLOR.yellow, COLOR.lime, COLOR.grass, COLOR.green, COLOR.aqua, COLOR.R,COLOR.F,COLOR.O,COLOR.Y,COLOR.L,COLOR.J,COLOR.G,COLOR.A,
COLOR.cyan, COLOR.sky, COLOR.sea, COLOR.blue, COLOR.purple, COLOR.grape, COLOR.magenta, COLOR.pink, COLOR.C,COLOR.N,COLOR.S,COLOR.B,COLOR.V,COLOR.P,COLOR.M,COLOR.W,
COLOR.dGray,COLOR.black,COLOR.lYellow, COLOR.gray, COLOR.lGray, COLOR.dPurple, COLOR.dRed, COLOR.dGreen, COLOR.dH,COLOR.D,COLOR.lY,COLOR.H,COLOR.lH,COLOR.dV,COLOR.dR,COLOR.dG,
} }

View File

@@ -49,7 +49,7 @@ return{
mText(drawableText.nextWave,69,380) mText(drawableText.nextWave,69,380)
end, end,
score=function(P)return{P.modeData.wave,P.stat.time}end, score=function(P)return{P.modeData.wave,P.stat.time}end,
scoreDisp=function(D)return D[1].." Waves "..TIMESTR(D[2])end, scoreDisp=function(D)return D[1].." Waves "..STRING.time(D[2])end,
comp=function(a,b)return a[1]>b[1]or a[1]==b[1]and a[2]<b[2]end, comp=function(a,b)return a[1]>b[1]or a[1]==b[1]and a[2]<b[2]end,
getRank=function(P) getRank=function(P)
local W=P.modeData.wave local W=P.modeData.wave

View File

@@ -56,7 +56,7 @@ return{
mText(drawableText.nextWave,69,380) mText(drawableText.nextWave,69,380)
end, end,
score=function(P)return{P.modeData.wave,P.stat.time}end, score=function(P)return{P.modeData.wave,P.stat.time}end,
scoreDisp=function(D)return D[1].." Waves "..TIMESTR(D[2])end, scoreDisp=function(D)return D[1].." Waves "..STRING.time(D[2])end,
comp=function(a,b)return a[1]>b[1]or a[1]==b[1]and a[2]<b[2]end, comp=function(a,b)return a[1]>b[1]or a[1]==b[1]and a[2]<b[2]end,
getRank=function(P) getRank=function(P)
local W=P.modeData.wave local W=P.modeData.wave

View File

@@ -23,7 +23,7 @@ return{
mText(drawableText.atk,69,380) mText(drawableText.atk,69,380)
end, end,
score=function(P)return{math.min(math.floor(P.stat.atk),100),P.stat.time}end, score=function(P)return{math.min(math.floor(P.stat.atk),100),P.stat.time}end,
scoreDisp=function(D)return D[1].." Attack "..TIMESTR(D[2])end, scoreDisp=function(D)return D[1].." Attack "..STRING.time(D[2])end,
comp=function(a,b)return a[1]>b[1]or a[1]==b[1]and a[2]<b[2]end, comp=function(a,b)return a[1]>b[1]or a[1]==b[1]and a[2]<b[2]end,
getRank=function(P) getRank=function(P)
local L=P.stat.atk local L=P.stat.atk

View File

@@ -23,7 +23,7 @@ return{
mText(drawableText.atk,69,380) mText(drawableText.atk,69,380)
end, end,
score=function(P)return{math.min(math.floor(P.stat.atk),100),P.stat.time}end, score=function(P)return{math.min(math.floor(P.stat.atk),100),P.stat.time}end,
scoreDisp=function(D)return D[1].." Attack "..TIMESTR(D[2])end, scoreDisp=function(D)return D[1].." Attack "..STRING.time(D[2])end,
comp=function(a,b)return a[1]>b[1]or a[1]==b[1]and a[2]<b[2]end, comp=function(a,b)return a[1]>b[1]or a[1]==b[1]and a[2]<b[2]end,
getRank=function(P) getRank=function(P)
local L=P.stat.atk local L=P.stat.atk

View File

@@ -22,7 +22,7 @@ return{
mText(drawableText.atk,69,380) mText(drawableText.atk,69,380)
end, end,
score=function(P)return{math.min(math.floor(P.stat.atk),100),P.stat.time}end, score=function(P)return{math.min(math.floor(P.stat.atk),100),P.stat.time}end,
scoreDisp=function(D)return D[1].." Attack "..TIMESTR(D[2])end, scoreDisp=function(D)return D[1].." Attack "..STRING.time(D[2])end,
comp=function(a,b)return a[1]>b[1]or a[1]==b[1]and a[2]<b[2]end, comp=function(a,b)return a[1]>b[1]or a[1]==b[1]and a[2]<b[2]end,
getRank=function(P) getRank=function(P)
local L=P.stat.atk local L=P.stat.atk

View File

@@ -23,7 +23,7 @@ return{
mText(drawableText.atk,69,380) mText(drawableText.atk,69,380)
end, end,
score=function(P)return{math.min(math.floor(P.stat.atk),100),P.stat.time}end, score=function(P)return{math.min(math.floor(P.stat.atk),100),P.stat.time}end,
scoreDisp=function(D)return D[1].." Attack "..TIMESTR(D[2])end, scoreDisp=function(D)return D[1].." Attack "..STRING.time(D[2])end,
comp=function(a,b)return a[1]>b[1]or a[1]==b[1]and a[2]<b[2]end, comp=function(a,b)return a[1]>b[1]or a[1]==b[1]and a[2]<b[2]end,
getRank=function(P) getRank=function(P)
local L=P.stat.atk local L=P.stat.atk

View File

@@ -1,6 +1,6 @@
local format=string.format local format=string.format
return{ return{
color=COLOR.lGray, color=COLOR.lH,
env={ env={
drop=1e99,lock=1e99, drop=1e99,lock=1e99,
holdCount=0, holdCount=0,

View File

@@ -20,7 +20,7 @@ return{
mStr(P.stat.clears[4],69,340) mStr(P.stat.clears[4],69,340)
end, end,
score=function(P)return{min(P.stat.row,200),P.stat.time}end, score=function(P)return{min(P.stat.row,200),P.stat.time}end,
scoreDisp=function(D)return D[1].." Lines "..TIMESTR(D[2])end, scoreDisp=function(D)return D[1].." Lines "..STRING.time(D[2])end,
comp=function(a,b)return a[1]>b[1]or a[1]==b[1]and a[2]<b[2]end, comp=function(a,b)return a[1]>b[1]or a[1]==b[1]and a[2]<b[2]end,
getRank=function(P) getRank=function(P)
local L=P.stat.row local L=P.stat.row

View File

@@ -26,7 +26,7 @@ return{
gc.draw(IMG.electric,124,106,0,2.6) gc.draw(IMG.electric,124,106,0,2.6)
end, end,
score=function(P)return{min(P.stat.row,200),P.stat.time}end, score=function(P)return{min(P.stat.row,200),P.stat.time}end,
scoreDisp=function(D)return D[1].." Lines "..TIMESTR(D[2])end, scoreDisp=function(D)return D[1].." Lines "..STRING.time(D[2])end,
comp=function(a,b)return a[1]>b[1]or a[1]==b[1]and a[2]<b[2]end, comp=function(a,b)return a[1]>b[1]or a[1]==b[1]and a[2]<b[2]end,
getRank=function(P) getRank=function(P)
local L=P.stat.row local L=P.stat.row

View File

@@ -27,7 +27,7 @@ return{
gc.draw(IMG.electric,124,106,0,2.6) gc.draw(IMG.electric,124,106,0,2.6)
end, end,
score=function(P)return{min(P.stat.row,200),P.stat.time}end, score=function(P)return{min(P.stat.row,200),P.stat.time}end,
scoreDisp=function(D)return D[1].." Lines "..TIMESTR(D[2])end, scoreDisp=function(D)return D[1].." Lines "..STRING.time(D[2])end,
comp=function(a,b)return a[1]>b[1]or a[1]==b[1]and a[2]<b[2]end, comp=function(a,b)return a[1]>b[1]or a[1]==b[1]and a[2]<b[2]end,
getRank=function(P) getRank=function(P)
local L=P.stat.row local L=P.stat.row

View File

@@ -23,7 +23,7 @@ return{
gc.draw(IMG.electric,124,106,0,2.6) gc.draw(IMG.electric,124,106,0,2.6)
end, end,
score=function(P)return{min(P.stat.row,200),P.stat.time}end, score=function(P)return{min(P.stat.row,200),P.stat.time}end,
scoreDisp=function(D)return D[1].." Lines "..TIMESTR(D[2])end, scoreDisp=function(D)return D[1].." Lines "..STRING.time(D[2])end,
comp=function(a,b)return a[1]>b[1]or a[1]==b[1]and a[2]<b[2]end, comp=function(a,b)return a[1]>b[1]or a[1]==b[1]and a[2]<b[2]end,
getRank=function(P) getRank=function(P)
local L=P.stat.row local L=P.stat.row

View File

@@ -26,7 +26,7 @@ return{
gc.draw(IMG.electric,124,106,0,2.6) gc.draw(IMG.electric,124,106,0,2.6)
end, end,
score=function(P)return{min(P.stat.row,100),P.stat.time}end, score=function(P)return{min(P.stat.row,100),P.stat.time}end,
scoreDisp=function(D)return D[1].." Lines "..TIMESTR(D[2])end, scoreDisp=function(D)return D[1].." Lines "..STRING.time(D[2])end,
comp=function(a,b)return a[1]>b[1]or a[1]==b[1]and a[2]<b[2]end, comp=function(a,b)return a[1]>b[1]or a[1]==b[1]and a[2]<b[2]end,
getRank=function(P) getRank=function(P)
local L=P.stat.row local L=P.stat.row

View File

@@ -16,7 +16,7 @@ return{
load=function() load=function()
PLY.newPlayer(1) PLY.newPlayer(1)
if SETTING.sfx_spawn==0 then if SETTING.sfx_spawn==0 then
LOG.print(text.switchSpawnSFX,COLOR.yellow) LOG.print(text.switchSpawnSFX,COLOR.Y)
end end
end, end,
mesDisp=function(P) mesDisp=function(P)
@@ -55,7 +55,7 @@ return{
mStr(P.stat.clears[4],69,340) mStr(P.stat.clears[4],69,340)
end, end,
score=function(P)return{min(P.stat.row,40),P.stat.time}end, score=function(P)return{min(P.stat.row,40),P.stat.time}end,
scoreDisp=function(D)return D[1].." Lines "..TIMESTR(D[2])end, scoreDisp=function(D)return D[1].." Lines "..STRING.time(D[2])end,
comp=function(a,b)return a[1]>b[1]or a[1]==b[1]and a[2]<b[2]end, comp=function(a,b)return a[1]>b[1]or a[1]==b[1]and a[2]<b[2]end,
getRank=function(P) getRank=function(P)
local L=P.stat.row local L=P.stat.row

View File

@@ -61,7 +61,7 @@ return{
mText(drawableText.maxcmb,69,450) mText(drawableText.maxcmb,69,450)
end, end,
score=function(P)return{math.min(P.modeData.maxCombo,100),P.stat.time}end, score=function(P)return{math.min(P.modeData.maxCombo,100),P.stat.time}end,
scoreDisp=function(D)return D[1].." Combo "..TIMESTR(D[2])end, scoreDisp=function(D)return D[1].." Combo "..STRING.time(D[2])end,
comp=function(a,b)return a[1]>b[1]or a[1]==b[1]and a[2]<b[2]end, comp=function(a,b)return a[1]>b[1]or a[1]==b[1]and a[2]<b[2]end,
getRank=function(P) getRank=function(P)
local L=P.modeData.maxCombo local L=P.modeData.maxCombo

View File

@@ -59,7 +59,7 @@ return{
mText(drawableText.maxcmb,69,450) mText(drawableText.maxcmb,69,450)
end, end,
score=function(P)return{math.min(P.modeData.maxCombo,100),P.stat.time}end, score=function(P)return{math.min(P.modeData.maxCombo,100),P.stat.time}end,
scoreDisp=function(D)return D[1].." Combo "..TIMESTR(D[2])end, scoreDisp=function(D)return D[1].." Combo "..STRING.time(D[2])end,
comp=function(a,b)return a[1]>b[1]or a[1]==b[1]and a[2]<b[2]end, comp=function(a,b)return a[1]>b[1]or a[1]==b[1]and a[2]<b[2]end,
getRank=function(P) getRank=function(P)
local L=P.stat.row local L=P.stat.row

View File

@@ -54,7 +54,7 @@ return{
mText(drawableText.rpm,69,380) mText(drawableText.rpm,69,380)
end, end,
score=function(P)return{P.modeData.wave,P.stat.time}end, score=function(P)return{P.modeData.wave,P.stat.time}end,
scoreDisp=function(D)return D[1].." Waves "..TIMESTR(D[2])end, scoreDisp=function(D)return D[1].." Waves "..STRING.time(D[2])end,
comp=function(a,b)return a[1]>b[1]or a[1]==b[1]and a[2]<b[2]end, comp=function(a,b)return a[1]>b[1]or a[1]==b[1]and a[2]<b[2]end,
getRank=function(P) getRank=function(P)
local W=P.modeData.wave local W=P.modeData.wave

View File

@@ -54,7 +54,7 @@ return{
mText(drawableText.rpm,69,380) mText(drawableText.rpm,69,380)
end, end,
score=function(P)return{P.modeData.wave,P.stat.time}end, score=function(P)return{P.modeData.wave,P.stat.time}end,
scoreDisp=function(D)return D[1].." Waves "..TIMESTR(D[2])end, scoreDisp=function(D)return D[1].." Waves "..STRING.time(D[2])end,
comp=function(a,b)return a[1]>b[1]or a[1]==b[1]and a[2]<b[2]end, comp=function(a,b)return a[1]>b[1]or a[1]==b[1]and a[2]<b[2]end,
getRank=function(P) getRank=function(P)
local W=P.modeData.wave local W=P.modeData.wave

View File

@@ -27,7 +27,7 @@ return{
mStr(100-P.stat.dig,69,265) mStr(100-P.stat.dig,69,265)
end, end,
score=function(P)return{P.stat.time,P.stat.piece}end, score=function(P)return{P.stat.time,P.stat.piece}end,
scoreDisp=function(D)return TIMESTR(D[1]).." "..D[2].." Pieces"end, scoreDisp=function(D)return STRING.time(D[1]).." "..D[2].." Pieces"end,
comp=function(a,b)return a[1]<b[1]or a[1]==b[1]and a[2]<b[2]end, comp=function(a,b)return a[1]<b[1]or a[1]==b[1]and a[2]<b[2]end,
getRank=function(P) getRank=function(P)
if P.stat.dig<100 then return end if P.stat.dig<100 then return end

View File

@@ -24,7 +24,7 @@ return{
mStr(10-P.stat.dig,69,265) mStr(10-P.stat.dig,69,265)
end, end,
score=function(P)return{P.stat.time,P.stat.piece}end, score=function(P)return{P.stat.time,P.stat.piece}end,
scoreDisp=function(D)return TIMESTR(D[1]).." "..D[2].." Pieces"end, scoreDisp=function(D)return STRING.time(D[1]).." "..D[2].." Pieces"end,
comp=function(a,b)return a[1]<b[1]or a[1]==b[1]and a[2]<b[2]end, comp=function(a,b)return a[1]<b[1]or a[1]==b[1]and a[2]<b[2]end,
getRank=function(P) getRank=function(P)
if P.stat.dig<10 then return end if P.stat.dig<10 then return end

View File

@@ -27,7 +27,7 @@ return{
mStr(400-P.stat.dig,69,265) mStr(400-P.stat.dig,69,265)
end, end,
score=function(P)return{P.stat.time,P.stat.piece}end, score=function(P)return{P.stat.time,P.stat.piece}end,
scoreDisp=function(D)return TIMESTR(D[1]).." "..D[2].." Pieces"end, scoreDisp=function(D)return STRING.time(D[1]).." "..D[2].." Pieces"end,
comp=function(a,b)return a[1]<b[1]or a[1]==b[1]and a[2]<b[2]end, comp=function(a,b)return a[1]<b[1]or a[1]==b[1]and a[2]<b[2]end,
getRank=function(P) getRank=function(P)
if P.stat.dig<400 then return end if P.stat.dig<400 then return end

View File

@@ -27,7 +27,7 @@ return{
mStr(40-P.stat.dig,69,265) mStr(40-P.stat.dig,69,265)
end, end,
score=function(P)return{P.stat.time,P.stat.piece}end, score=function(P)return{P.stat.time,P.stat.piece}end,
scoreDisp=function(D)return TIMESTR(D[1]).." "..D[2].." Pieces"end, scoreDisp=function(D)return STRING.time(D[1]).." "..D[2].." Pieces"end,
comp=function(a,b)return a[1]<b[1]or a[1]==b[1]and a[2]<b[2]end, comp=function(a,b)return a[1]<b[1]or a[1]==b[1]and a[2]<b[2]end,
getRank=function(P) getRank=function(P)
if P.stat.dig<40 then return end if P.stat.dig<40 then return end

View File

@@ -91,7 +91,7 @@ return{
mStr(R>=0 and R or 0,69,265) mStr(R>=0 and R or 0,69,265)
end, end,
score=function(P)return{math.min(P.stat.row,100),P.stat.time}end, score=function(P)return{math.min(P.stat.row,100),P.stat.time}end,
scoreDisp=function(D)return D[1].." Lines "..TIMESTR(D[2])end, scoreDisp=function(D)return D[1].." Lines "..STRING.time(D[2])end,
comp=function(a,b)return a[1]>b[1]or a[1]==b[1]and a[2]<b[2]end, comp=function(a,b)return a[1]>b[1]or a[1]==b[1]and a[2]<b[2]end,
getRank=function(P) getRank=function(P)
local L=P.stat.row local L=P.stat.row

View File

@@ -21,7 +21,7 @@ return{
mStr(R>=0 and R or 0,69,265) mStr(R>=0 and R or 0,69,265)
end, end,
score=function(P)return{min(P.stat.row,100),P.stat.time}end, score=function(P)return{min(P.stat.row,100),P.stat.time}end,
scoreDisp=function(D)return D[1].." Lines "..TIMESTR(D[2])end, scoreDisp=function(D)return D[1].." Lines "..STRING.time(D[2])end,
comp=function(a,b)return a[1]>b[1]or a[1]==b[1]and a[2]<b[2]end, comp=function(a,b)return a[1]>b[1]or a[1]==b[1]and a[2]<b[2]end,
getRank=function(P) getRank=function(P)
local L=P.stat.row local L=P.stat.row

View File

@@ -36,7 +36,7 @@ return{
gc.rectangle("fill",25,375,90,4) gc.rectangle("fill",25,375,90,4)
end, end,
score=function(P)return{math.min(P.stat.row,200),P.stat.time}end, score=function(P)return{math.min(P.stat.row,200),P.stat.time}end,
scoreDisp=function(D)return D[1].." Lines "..TIMESTR(D[2])end, scoreDisp=function(D)return D[1].." Lines "..STRING.time(D[2])end,
comp=function(a,b)return a[1]>b[1]or a[1]==b[1]and a[2]<b[2]end, comp=function(a,b)return a[1]>b[1]or a[1]==b[1]and a[2]<b[2]end,
getRank=function(P) getRank=function(P)
local L=P.stat.row local L=P.stat.row

View File

@@ -33,7 +33,7 @@ return{
gc.rectangle("fill",25,375,90,4) gc.rectangle("fill",25,375,90,4)
end, end,
score=function(P)return{math.min(P.stat.row,200),P.stat.time}end, score=function(P)return{math.min(P.stat.row,200),P.stat.time}end,
scoreDisp=function(D)return D[1].." Lines "..TIMESTR(D[2])end, scoreDisp=function(D)return D[1].." Lines "..STRING.time(D[2])end,
comp=function(a,b)return a[1]>b[1]or a[1]==b[1]and a[2]<b[2]end, comp=function(a,b)return a[1]>b[1]or a[1]==b[1]and a[2]<b[2]end,
getRank=function(P) getRank=function(P)
local L=P.stat.row local L=P.stat.row

View File

@@ -66,7 +66,7 @@ return{
gc.rectangle("fill",25,375,90,4) gc.rectangle("fill",25,375,90,4)
end, end,
score=function(P)return{P.modeData.pt,P.stat.time}end, score=function(P)return{P.modeData.pt,P.stat.time}end,
scoreDisp=function(D)return D[1].."P "..TIMESTR(D[2])end, scoreDisp=function(D)return D[1].."P "..STRING.time(D[2])end,
comp=function(a,b) comp=function(a,b)
return a[1]>b[1]or(a[1]==b[1]and a[2]<b[2]) return a[1]>b[1]or(a[1]==b[1]and a[2]<b[2])
end, end,

View File

@@ -68,7 +68,7 @@ return{
gc.rectangle("fill",25,375,90,4) gc.rectangle("fill",25,375,90,4)
end, end,
score=function(P)return{P.modeData.pt,P.stat.time}end, score=function(P)return{P.modeData.pt,P.stat.time}end,
scoreDisp=function(D)return D[1].."P "..TIMESTR(D[2])end, scoreDisp=function(D)return D[1].."P "..STRING.time(D[2])end,
comp=function(a,b) comp=function(a,b)
return a[1]>b[1]or(a[1]==b[1]and a[2]<b[2]) return a[1]>b[1]or(a[1]==b[1]and a[2]<b[2])
end, end,

View File

@@ -40,7 +40,7 @@ local function score(P)
end end
return{ return{
color=COLOR.lGray, color=COLOR.lH,
env={ env={
noTele=true, noTele=true,
das=5,arr=1, das=5,arr=1,
@@ -66,7 +66,7 @@ return{
gc.rectangle("fill",25,375,90,4) gc.rectangle("fill",25,375,90,4)
end, end,
score=function(P)return{P.modeData.pt,P.stat.time}end, score=function(P)return{P.modeData.pt,P.stat.time}end,
scoreDisp=function(D)return D[1].."P "..TIMESTR(D[2])end, scoreDisp=function(D)return D[1].."P "..STRING.time(D[2])end,
comp=function(a,b)return a[1]>b[1]or a[1]==b[1]and a[2]<b[2]end, comp=function(a,b)return a[1]>b[1]or a[1]==b[1]and a[2]<b[2]end,
getRank=function(P) getRank=function(P)
local S=P.modeData.pt local S=P.modeData.pt

View File

@@ -155,7 +155,7 @@ return{
gc.rectangle("fill",25,375,90,4) gc.rectangle("fill",25,375,90,4)
end, end,
score=function(P)return{P.result=="WIN"and 260 or P.modeData.pt,P.stat.time}end, score=function(P)return{P.result=="WIN"and 260 or P.modeData.pt,P.stat.time}end,
scoreDisp=function(D)return D[1].."P "..TIMESTR(D[2])end, scoreDisp=function(D)return D[1].."P "..STRING.time(D[2])end,
comp=function(a,b)return a[1]>b[1]or a[1]==b[1]and a[2]<b[2]end, comp=function(a,b)return a[1]>b[1]or a[1]==b[1]and a[2]<b[2]end,
getRank=function(P) getRank=function(P)
local p=P.modeData.pt local p=P.modeData.pt

View File

@@ -6,7 +6,7 @@ return{
pushSpeed=5, pushSpeed=5,
garbageSpeed=2, garbageSpeed=2,
noMod=true, noMod=true,
bgm={"race","push","secret8th","secret7th","waterfall","oxygen","shining terminal","storm","rockblock","magicblock","cruelty"}, bgm={"race","battle","push","secret8th","secret7th","waterfall","oxygen","shining terminal","storm","rockblock","magicblock","cruelty"},
}, },
load=function() load=function()
PLY.newPlayer(1) PLY.newPlayer(1)

View File

@@ -22,7 +22,7 @@ return{
mText(drawableText.pc,69,432) mText(drawableText.pc,69,432)
end, end,
score=function(P)return{P.stat.pc,P.stat.time}end, score=function(P)return{P.stat.pc,P.stat.time}end,
scoreDisp=function(D)return D[1].." PCs "..TIMESTR(D[2])end, scoreDisp=function(D)return D[1].." PCs "..STRING.time(D[2])end,
comp=function(a,b)return a[1]>b[1]or a[1]==b[1]and a[2]<b[2]end, comp=function(a,b)return a[1]>b[1]or a[1]==b[1]and a[2]<b[2]end,
getRank=function(P) getRank=function(P)
local L=P.stat.pc local L=P.stat.pc

View File

@@ -22,7 +22,7 @@ return{
mText(drawableText.pc,69,432) mText(drawableText.pc,69,432)
end, end,
score=function(P)return{P.stat.pc,P.stat.time}end, score=function(P)return{P.stat.pc,P.stat.time}end,
scoreDisp=function(D)return D[1].." PCs "..TIMESTR(D[2])end, scoreDisp=function(D)return D[1].." PCs "..STRING.time(D[2])end,
comp=function(a,b)return a[1]>b[1]or a[1]==b[1]and a[2]<b[2]end, comp=function(a,b)return a[1]>b[1]or a[1]==b[1]and a[2]<b[2]end,
getRank=function(P) getRank=function(P)
local L=P.stat.pc local L=P.stat.pc

View File

@@ -20,7 +20,7 @@ return{
mText(drawableText.pc,69,432) mText(drawableText.pc,69,432)
end, end,
score=function(P)return{P.stat.pc,P.stat.time}end, score=function(P)return{P.stat.pc,P.stat.time}end,
scoreDisp=function(D)return D[1].." PCs "..TIMESTR(D[2])end, scoreDisp=function(D)return D[1].." PCs "..STRING.time(D[2])end,
comp=function(a,b)return a[1]>b[1]or a[1]==b[1]and a[2]<b[2]end, comp=function(a,b)return a[1]>b[1]or a[1]==b[1]and a[2]<b[2]end,
getRank=function(P) getRank=function(P)
local L=P.stat.pc local L=P.stat.pc

View File

@@ -68,7 +68,7 @@ return{
mText(drawableText.pc,69,412) mText(drawableText.pc,69,412)
end, end,
score=function(P)return{P.stat.pc,P.stat.time}end, score=function(P)return{P.stat.pc,P.stat.time}end,
scoreDisp=function(D)return D[1].." PCs "..TIMESTR(D[2])end, scoreDisp=function(D)return D[1].." PCs "..STRING.time(D[2])end,
comp=function(a,b)return a[1]>b[1]or a[1]==b[1]and a[2]<b[2]end, comp=function(a,b)return a[1]>b[1]or a[1]==b[1]and a[2]<b[2]end,
getRank=function(P) getRank=function(P)
local L=P.stat.pc local L=P.stat.pc

View File

@@ -59,7 +59,7 @@ return{
mText(drawableText.pc,69,412) mText(drawableText.pc,69,412)
end, end,
score=function(P)return{P.stat.pc,P.stat.time}end, score=function(P)return{P.stat.pc,P.stat.time}end,
scoreDisp=function(D)return D[1].." PCs "..TIMESTR(D[2])end, scoreDisp=function(D)return D[1].." PCs "..STRING.time(D[2])end,
comp=function(a,b)return a[1]>b[1]or a[1]==b[1]and a[2]<b[2]end, comp=function(a,b)return a[1]>b[1]or a[1]==b[1]and a[2]<b[2]end,
getRank=function(P) getRank=function(P)
local L=P.stat.pc local L=P.stat.pc

View File

@@ -66,7 +66,7 @@ return{
gc.circle("line",69,200,30+45*beat) gc.circle("line",69,200,30+45*beat)
end, end,
score=function(P)return{math.min(P.stat.row,200),P.stat.time}end, score=function(P)return{math.min(P.stat.row,200),P.stat.time}end,
scoreDisp=function(D)return D[1].." Lines "..TIMESTR(D[2])end, scoreDisp=function(D)return D[1].." Lines "..STRING.time(D[2])end,
comp=function(a,b)return a[1]>b[1]or a[1]==b[1]and a[2]<b[2]end, comp=function(a,b)return a[1]>b[1]or a[1]==b[1]and a[2]<b[2]end,
getRank=function(P) getRank=function(P)
local L=P.stat.row local L=P.stat.row

View File

@@ -66,7 +66,7 @@ return{
gc.circle("line",69,200,30+45*beat) gc.circle("line",69,200,30+45*beat)
end, end,
score=function(P)return{math.min(P.stat.row,200),P.stat.time}end, score=function(P)return{math.min(P.stat.row,200),P.stat.time}end,
scoreDisp=function(D)return D[1].." Lines "..TIMESTR(D[2])end, scoreDisp=function(D)return D[1].." Lines "..STRING.time(D[2])end,
comp=function(a,b)return a[1]>b[1]or a[1]==b[1]and a[2]<b[2]end, comp=function(a,b)return a[1]>b[1]or a[1]==b[1]and a[2]<b[2]end,
getRank=function(P) getRank=function(P)
local L=P.stat.row local L=P.stat.row

View File

@@ -72,7 +72,7 @@ return{
gc.circle("line",69,200,30+45*beat) gc.circle("line",69,200,30+45*beat)
end, end,
score=function(P)return{math.min(P.stat.row,200),P.stat.time}end, score=function(P)return{math.min(P.stat.row,200),P.stat.time}end,
scoreDisp=function(D)return D[1].." Lines "..TIMESTR(D[2])end, scoreDisp=function(D)return D[1].." Lines "..STRING.time(D[2])end,
comp=function(a,b)return a[1]>b[1]or a[1]==b[1]and a[2]<b[2]end, comp=function(a,b)return a[1]>b[1]or a[1]==b[1]and a[2]<b[2]end,
getRank=function(P) getRank=function(P)
local L=P.stat.row local L=P.stat.row

View File

@@ -25,7 +25,7 @@ return{
PLY.newAIPlayer(2,AIBUILDER("CC",7,1,true,10000)) PLY.newAIPlayer(2,AIBUILDER("CC",7,1,true,10000))
end, end,
score=function(P)return{P.stat.piece,P.stat.time}end, score=function(P)return{P.stat.piece,P.stat.time}end,
scoreDisp=function(D)return D[1].." Pieces "..TIMESTR(D[2])end, scoreDisp=function(D)return D[1].." Pieces "..STRING.time(D[2])end,
comp=function(a,b)return a[1]<b[1]or a[1]==b[1]and a[2]<b[2]end, comp=function(a,b)return a[1]<b[1]or a[1]==b[1]and a[2]<b[2]end,
getRank=function(P) getRank=function(P)
if P.result=="WIN"then if P.result=="WIN"then

View File

@@ -25,7 +25,7 @@ return{
PLY.newAIPlayer(2,AIBUILDER("CC",7,2,true,16000)) PLY.newAIPlayer(2,AIBUILDER("CC",7,2,true,16000))
end, end,
score=function(P)return{P.stat.piece,P.stat.time}end, score=function(P)return{P.stat.piece,P.stat.time}end,
scoreDisp=function(D)return D[1].." Pieces "..TIMESTR(D[2])end, scoreDisp=function(D)return D[1].." Pieces "..STRING.time(D[2])end,
comp=function(a,b)return a[1]<b[1]or a[1]==b[1]and a[2]<b[2]end, comp=function(a,b)return a[1]<b[1]or a[1]==b[1]and a[2]<b[2]end,
getRank=function(P) getRank=function(P)
if P.result=="WIN"then if P.result=="WIN"then

View File

@@ -25,7 +25,7 @@ return{
PLY.newAIPlayer(2,AIBUILDER("CC",7,3,true,26000)) PLY.newAIPlayer(2,AIBUILDER("CC",7,3,true,26000))
end, end,
score=function(P)return{P.stat.piece,P.stat.time}end, score=function(P)return{P.stat.piece,P.stat.time}end,
scoreDisp=function(D)return D[1].." Pieces "..TIMESTR(D[2])end, scoreDisp=function(D)return D[1].." Pieces "..STRING.time(D[2])end,
comp=function(a,b)return a[1]<b[1]or a[1]==b[1]and a[2]<b[2]end, comp=function(a,b)return a[1]<b[1]or a[1]==b[1]and a[2]<b[2]end,
getRank=function(P) getRank=function(P)
if P.result=="WIN"then if P.result=="WIN"then

View File

@@ -25,7 +25,7 @@ return{
PLY.newAIPlayer(2,AIBUILDER("CC",7,1,true,13000)) PLY.newAIPlayer(2,AIBUILDER("CC",7,1,true,13000))
end, end,
score=function(P)return{P.stat.piece,P.stat.time}end, score=function(P)return{P.stat.piece,P.stat.time}end,
scoreDisp=function(D)return D[1].." Pieces "..TIMESTR(D[2])end, scoreDisp=function(D)return D[1].." Pieces "..STRING.time(D[2])end,
comp=function(a,b)return a[1]<b[1]or a[1]==b[1]and a[2]<b[2]end, comp=function(a,b)return a[1]<b[1]or a[1]==b[1]and a[2]<b[2]end,
getRank=function(P) getRank=function(P)
if P.result=="WIN"then if P.result=="WIN"then

View File

@@ -25,7 +25,7 @@ return{
PLY.newAIPlayer(2,AIBUILDER("CC",7,3,true,40000)) PLY.newAIPlayer(2,AIBUILDER("CC",7,3,true,40000))
end, end,
score=function(P)return{P.stat.piece,P.stat.time}end, score=function(P)return{P.stat.piece,P.stat.time}end,
scoreDisp=function(D)return D[1].." Pieces "..TIMESTR(D[2])end, scoreDisp=function(D)return D[1].." Pieces "..STRING.time(D[2])end,
comp=function(a,b)return a[1]<b[1]or a[1]==b[1]and a[2]<b[2]end, comp=function(a,b)return a[1]<b[1]or a[1]==b[1]and a[2]<b[2]end,
getRank=function(P) getRank=function(P)
if P.result=="WIN"then if P.result=="WIN"then

View File

@@ -12,7 +12,7 @@ return{
PLY.newAIPlayer(2,AIBUILDER("9S",4)) PLY.newAIPlayer(2,AIBUILDER("9S",4))
end, end,
score=function(P)return{P.stat.time}end, score=function(P)return{P.stat.time}end,
scoreDisp=function(D)return TIMESTR(D[1])end, scoreDisp=function(D)return STRING.time(D[1])end,
comp=function(a,b)return a[1]<b[1]end, comp=function(a,b)return a[1]<b[1]end,
getRank=function(P) getRank=function(P)
if P.result=="WIN"then if P.result=="WIN"then

View File

@@ -12,7 +12,7 @@ return{
PLY.newAIPlayer(2,AIBUILDER("9S",6)) PLY.newAIPlayer(2,AIBUILDER("9S",6))
end, end,
score=function(P)return{P.stat.time}end, score=function(P)return{P.stat.time}end,
scoreDisp=function(D)return TIMESTR(D[1])end, scoreDisp=function(D)return STRING.time(D[1])end,
comp=function(a,b)return a[1]<b[1]end, comp=function(a,b)return a[1]<b[1]end,
getRank=function(P) getRank=function(P)
if P.result=="WIN"then if P.result=="WIN"then

View File

@@ -4,7 +4,7 @@ return{
life=2, life=2,
drop=60,lock=60, drop=60,lock=60,
freshLimit=15, freshLimit=15,
bg="bg2",bgm="race", bg="bg2",bgm="battle",
}, },
pauseLimit=true, pauseLimit=true,
load=function() load=function()
@@ -12,7 +12,7 @@ return{
PLY.newAIPlayer(2,AIBUILDER("CC",6,2,true,30000)) PLY.newAIPlayer(2,AIBUILDER("CC",6,2,true,30000))
end, end,
score=function(P)return{P.stat.time}end, score=function(P)return{P.stat.time}end,
scoreDisp=function(D)return TIMESTR(D[1])end, scoreDisp=function(D)return STRING.time(D[1])end,
comp=function(a,b)return a[1]<b[1]end, comp=function(a,b)return a[1]<b[1]end,
getRank=function(P) getRank=function(P)
if P.result=="WIN"then if P.result=="WIN"then

View File

@@ -12,7 +12,7 @@ return{
PLY.newAIPlayer(2,AIBUILDER("9S",5)) PLY.newAIPlayer(2,AIBUILDER("9S",5))
end, end,
score=function(P)return{P.stat.time}end, score=function(P)return{P.stat.time}end,
scoreDisp=function(D)return TIMESTR(D[1])end, scoreDisp=function(D)return STRING.time(D[1])end,
comp=function(a,b)return a[1]<b[1]end, comp=function(a,b)return a[1]<b[1]end,
getRank=function(P) getRank=function(P)
if P.result=="WIN"then if P.result=="WIN"then

View File

@@ -4,7 +4,7 @@ return{
life=2, life=2,
drop=60,lock=60, drop=60,lock=60,
freshLimit=15, freshLimit=15,
bg="bg2",bgm="race", bg="bg2",bgm="battle",
}, },
pauseLimit=true, pauseLimit=true,
load=function() load=function()
@@ -12,7 +12,7 @@ return{
PLY.newAIPlayer(2,AIBUILDER("CC",7,3,true,50000)) PLY.newAIPlayer(2,AIBUILDER("CC",7,3,true,50000))
end, end,
score=function(P)return{P.stat.time}end, score=function(P)return{P.stat.time}end,
scoreDisp=function(D)return TIMESTR(D[1])end, scoreDisp=function(D)return STRING.time(D[1])end,
comp=function(a,b)return a[1]<b[1]end, comp=function(a,b)return a[1]<b[1]end,
getRank=function(P) getRank=function(P)
if P.result=="WIN"then if P.result=="WIN"then

View File

@@ -18,7 +18,7 @@ return{
PLY.draw.drawTargetLine(P,r) PLY.draw.drawTargetLine(P,r)
end, end,
score=function(P)return{P.stat.time,P.stat.piece}end, score=function(P)return{P.stat.time,P.stat.piece}end,
scoreDisp=function(D)return TIMESTR(D[1]).." "..D[2].." Pieces"end, scoreDisp=function(D)return STRING.time(D[1]).." "..D[2].." Pieces"end,
comp=function(a,b)return a[1]<b[1]or(a[1]==b[1]and a[2]<b[2])end, comp=function(a,b)return a[1]<b[1]or(a[1]==b[1]and a[2]<b[2])end,
getRank=function(P) getRank=function(P)
if P.stat.row<40 then return end if P.stat.row<40 then return end

View File

@@ -17,7 +17,7 @@ return{
PLY.draw.drawTargetLine(P,r) PLY.draw.drawTargetLine(P,r)
end, end,
score=function(P)return{P.stat.time,P.stat.piece}end, score=function(P)return{P.stat.time,P.stat.piece}end,
scoreDisp=function(D)return TIMESTR(D[1]).." "..D[2].." Pieces"end, scoreDisp=function(D)return STRING.time(D[1]).." "..D[2].." Pieces"end,
comp=function(a,b)return a[1]<b[1]or(a[1]==b[1]and a[2]<b[2])end, comp=function(a,b)return a[1]<b[1]or(a[1]==b[1]and a[2]<b[2])end,
getRank=function(P) getRank=function(P)
if P.stat.row<40 then return end if P.stat.row<40 then return end

View File

@@ -1,5 +1,5 @@
return{ return{
color=COLOR.lGray, color=COLOR.lH,
env={ env={
drop=60,lock=60, drop=60,lock=60,
dropPiece=function(P)if P.stat.row>=1000 then P:win("finish")end end, bg="rainbow",bgm="push", dropPiece=function(P)if P.stat.row>=1000 then P:win("finish")end end, bg="rainbow",bgm="push",
@@ -15,7 +15,7 @@ return{
PLY.draw.drawTargetLine(P,r) PLY.draw.drawTargetLine(P,r)
end, end,
score=function(P)return{P.stat.time,P.stat.piece}end, score=function(P)return{P.stat.time,P.stat.piece}end,
scoreDisp=function(D)return TIMESTR(D[1]).." "..D[2].." Pieces"end, scoreDisp=function(D)return STRING.time(D[1]).." "..D[2].." Pieces"end,
comp=function(a,b)return a[1]<b[1]or a[1]==b[1]and a[2]<b[2]end, comp=function(a,b)return a[1]<b[1]or a[1]==b[1]and a[2]<b[2]end,
getRank=function(P) getRank=function(P)
if P.stat.row<1000 then return end if P.stat.row<1000 then return end

View File

@@ -15,7 +15,7 @@ return{
PLY.draw.drawTargetLine(P,r) PLY.draw.drawTargetLine(P,r)
end, end,
score=function(P)return{P.stat.time,P.stat.piece}end, score=function(P)return{P.stat.time,P.stat.piece}end,
scoreDisp=function(D)return TIMESTR(D[1]).." "..D[2].." Pieces"end, scoreDisp=function(D)return STRING.time(D[1]).." "..D[2].." Pieces"end,
comp=function(a,b)return a[1]<b[1]or a[1]==b[1]and a[2]<b[2]end, comp=function(a,b)return a[1]<b[1]or a[1]==b[1]and a[2]<b[2]end,
getRank=function(P) getRank=function(P)
if P.stat.row<100 then return end if P.stat.row<100 then return end

View File

@@ -16,7 +16,7 @@ return{
PLY.draw.drawTargetLine(P,r) PLY.draw.drawTargetLine(P,r)
end, end,
score=function(P)return{P.stat.time,P.stat.piece}end, score=function(P)return{P.stat.time,P.stat.piece}end,
scoreDisp=function(D)return TIMESTR(D[1]).." "..D[2].." Pieces"end, scoreDisp=function(D)return STRING.time(D[1]).." "..D[2].." Pieces"end,
comp=function(a,b)return a[1]<b[1]or a[1]==b[1]and a[2]<b[2]end, comp=function(a,b)return a[1]<b[1]or a[1]==b[1]and a[2]<b[2]end,
getRank=function(P) getRank=function(P)
if P.stat.row<10 then return end if P.stat.row<10 then return end

View File

@@ -16,7 +16,7 @@ return{
PLY.draw.drawTargetLine(P,r) PLY.draw.drawTargetLine(P,r)
end, end,
score=function(P)return{P.stat.time,P.stat.piece}end, score=function(P)return{P.stat.time,P.stat.piece}end,
scoreDisp=function(D)return TIMESTR(D[1]).." "..D[2].." Pieces"end, scoreDisp=function(D)return STRING.time(D[1]).." "..D[2].." Pieces"end,
comp=function(a,b)return a[1]<b[1]or a[1]==b[1]and a[2]<b[2]end, comp=function(a,b)return a[1]<b[1]or a[1]==b[1]and a[2]<b[2]end,
getRank=function(P) getRank=function(P)
if P.stat.row<20 then return end if P.stat.row<20 then return end

View File

@@ -15,7 +15,7 @@ return{
PLY.draw.drawTargetLine(P,r) PLY.draw.drawTargetLine(P,r)
end, end,
score=function(P)return{P.stat.time,P.stat.piece}end, score=function(P)return{P.stat.time,P.stat.piece}end,
scoreDisp=function(D)return TIMESTR(D[1]).." "..D[2].." Pieces"end, scoreDisp=function(D)return STRING.time(D[1]).." "..D[2].." Pieces"end,
comp=function(a,b)return a[1]<b[1]or a[1]==b[1]and a[2]<b[2]end, comp=function(a,b)return a[1]<b[1]or a[1]==b[1]and a[2]<b[2]end,
getRank=function(P) getRank=function(P)
if P.stat.row<400 then return end if P.stat.row<400 then return end

View File

@@ -16,7 +16,7 @@ return{
PLY.draw.drawTargetLine(P,r) PLY.draw.drawTargetLine(P,r)
end, end,
score=function(P)return{P.stat.time,P.stat.piece}end, score=function(P)return{P.stat.time,P.stat.piece}end,
scoreDisp=function(D)return TIMESTR(D[1]).." "..D[2].." Pieces"end, scoreDisp=function(D)return STRING.time(D[1]).." "..D[2].." Pieces"end,
comp=function(a,b)return a[1]<b[1]or a[1]==b[1]and a[2]<b[2]end, comp=function(a,b)return a[1]<b[1]or a[1]==b[1]and a[2]<b[2]end,
getRank=function(P) getRank=function(P)
if P.stat.row<40 then return end if P.stat.row<40 then return end

View File

@@ -32,7 +32,7 @@ return{
mText(drawableText.wave,69,375) mText(drawableText.wave,69,375)
end, end,
score=function(P)return{P.modeData.wave,P.stat.time}end, score=function(P)return{P.modeData.wave,P.stat.time}end,
scoreDisp=function(D)return D[1].." Waves "..TIMESTR(D[2])end, scoreDisp=function(D)return D[1].." Waves "..STRING.time(D[2])end,
comp=function(a,b)return a[1]>b[1]or a[1]==b[1]and a[2]<b[2]end, comp=function(a,b)return a[1]>b[1]or a[1]==b[1]and a[2]<b[2]end,
getRank=function(P) getRank=function(P)
local W=P.modeData.wave local W=P.modeData.wave

View File

@@ -38,7 +38,7 @@ return{
mText(drawableText.wave,69,375) mText(drawableText.wave,69,375)
end, end,
score=function(P)return{P.modeData.wave,P.stat.time}end, score=function(P)return{P.modeData.wave,P.stat.time}end,
scoreDisp=function(D)return D[1].." Waves "..TIMESTR(D[2])end, scoreDisp=function(D)return D[1].." Waves "..STRING.time(D[2])end,
comp=function(a,b)return a[1]>b[1]or a[1]==b[1]and a[2]<b[2]end, comp=function(a,b)return a[1]>b[1]or a[1]==b[1]and a[2]<b[2]end,
getRank=function(P) getRank=function(P)
local W=P.modeData.wave local W=P.modeData.wave

View File

@@ -33,7 +33,7 @@ return{
mText(drawableText.wave,69,375) mText(drawableText.wave,69,375)
end, end,
score=function(P)return{P.modeData.wave,P.stat.time}end, score=function(P)return{P.modeData.wave,P.stat.time}end,
scoreDisp=function(D)return D[1].." Waves "..TIMESTR(D[2])end, scoreDisp=function(D)return D[1].." Waves "..STRING.time(D[2])end,
comp=function(a,b)return a[1]>b[1]or a[1]==b[1]and a[2]<b[2]end, comp=function(a,b)return a[1]>b[1]or a[1]==b[1]and a[2]<b[2]end,
getRank=function(P) getRank=function(P)
local W=P.modeData.wave local W=P.modeData.wave

View File

@@ -37,7 +37,7 @@ return{
mText(drawableText.wave,69,375) mText(drawableText.wave,69,375)
end, end,
score=function(P)return{P.modeData.wave,P.stat.time}end, score=function(P)return{P.modeData.wave,P.stat.time}end,
scoreDisp=function(D)return D[1].." Waves "..TIMESTR(D[2])end, scoreDisp=function(D)return D[1].." Waves "..STRING.time(D[2])end,
comp=function(a,b)return a[1]>b[1]or a[1]==b[1]and a[2]<b[2]end, comp=function(a,b)return a[1]>b[1]or a[1]==b[1]and a[2]<b[2]end,
getRank=function(P) getRank=function(P)
local W=P.modeData.wave local W=P.modeData.wave

View File

@@ -39,7 +39,7 @@ return{
mText(drawableText.wave,69,375) mText(drawableText.wave,69,375)
end, end,
score=function(P)return{P.modeData.wave,P.stat.time}end, score=function(P)return{P.modeData.wave,P.stat.time}end,
scoreDisp=function(D)return D[1].." Waves "..TIMESTR(D[2])end, scoreDisp=function(D)return D[1].." Waves "..STRING.time(D[2])end,
comp=function(a,b)return a[1]>b[1]or a[1]==b[1]and a[2]<b[2]end, comp=function(a,b)return a[1]>b[1]or a[1]==b[1]and a[2]<b[2]end,
getRank=function(P) getRank=function(P)
local W=P.modeData.wave local W=P.modeData.wave

View File

@@ -22,7 +22,7 @@ return{
mText(drawableText.eff,69,363) mText(drawableText.eff,69,363)
end, end,
score=function(P)return{P.stat.atk<=200 and math.floor(P.stat.atk)or 200,P.stat.time}end, score=function(P)return{P.stat.atk<=200 and math.floor(P.stat.atk)or 200,P.stat.time}end,
scoreDisp=function(D)return D[1].." Attack "..TIMESTR(D[2])end, scoreDisp=function(D)return D[1].." Attack "..STRING.time(D[2])end,
comp=function(a,b)return a[1]>b[1]or a[1]==b[1]and a[2]<b[2]end, comp=function(a,b)return a[1]>b[1]or a[1]==b[1]and a[2]<b[2]end,
getRank=function(P) getRank=function(P)
local L=P.stat.atk local L=P.stat.atk

View File

@@ -34,7 +34,7 @@ return{
mText(drawableText.eff,69,363) mText(drawableText.eff,69,363)
end, end,
score=function(P)return{P.stat.atk<=200 and math.floor(P.stat.atk)or 200,P.stat.time}end, score=function(P)return{P.stat.atk<=200 and math.floor(P.stat.atk)or 200,P.stat.time}end,
scoreDisp=function(D)return D[1].." Attack "..TIMESTR(D[2])end, scoreDisp=function(D)return D[1].." Attack "..STRING.time(D[2])end,
comp=function(a,b)return a[1]>b[1]or a[1]==b[1]and a[2]<b[2]end, comp=function(a,b)return a[1]>b[1]or a[1]==b[1]and a[2]<b[2]end,
getRank=function(P) getRank=function(P)
local L=P.stat.atk local L=P.stat.atk

View File

@@ -20,7 +20,7 @@ return{
mText(drawableText.eff,69,363) mText(drawableText.eff,69,363)
end, end,
score=function(P)return{P.stat.atk<=200 and math.floor(P.stat.atk)or 200,P.stat.time}end, score=function(P)return{P.stat.atk<=200 and math.floor(P.stat.atk)or 200,P.stat.time}end,
scoreDisp=function(D)return D[1].." Attack "..TIMESTR(D[2])end, scoreDisp=function(D)return D[1].." Attack "..STRING.time(D[2])end,
comp=function(a,b)return a[1]>b[1]or a[1]==b[1]and a[2]<b[2]end, comp=function(a,b)return a[1]>b[1]or a[1]==b[1]and a[2]<b[2]end,
getRank=function(P) getRank=function(P)
local L=P.stat.atk local L=P.stat.atk

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