代码规范:把所有的tab换成空格
This commit is contained in:
1724
parts/RSlist.lua
1724
parts/RSlist.lua
File diff suppressed because it is too large
Load Diff
@@ -5,21 +5,21 @@ local shader=SHADER.aura
|
||||
local t
|
||||
|
||||
function back.init()
|
||||
t=math.random()*2600
|
||||
BG.resize(SCR.w,SCR.h)
|
||||
t=math.random()*2600
|
||||
BG.resize(SCR.w,SCR.h)
|
||||
end
|
||||
function back.resize(_,h)
|
||||
shader:send('w',SCR.W)
|
||||
shader:send('h',h*SCR.dpi)
|
||||
shader:send('w',SCR.W)
|
||||
shader:send('h',h*SCR.dpi)
|
||||
end
|
||||
function back.update(dt)
|
||||
t=t+dt
|
||||
t=t+dt
|
||||
end
|
||||
function back.draw()
|
||||
gc.clear(.08,.08,.084)
|
||||
shader:send('t',t)
|
||||
gc.setShader(shader)
|
||||
gc.rectangle('fill',0,0,SCR.w,SCR.h)
|
||||
gc.setShader()
|
||||
gc.clear(.08,.08,.084)
|
||||
shader:send('t',t)
|
||||
gc.setShader(shader)
|
||||
gc.rectangle('fill',0,0,SCR.w,SCR.h)
|
||||
gc.setShader()
|
||||
end
|
||||
return back
|
||||
@@ -5,20 +5,20 @@ local shader=SHADER.grad1
|
||||
|
||||
local t
|
||||
function back.init()
|
||||
t=math.random()*2600
|
||||
back.resize()
|
||||
t=math.random()*2600
|
||||
back.resize()
|
||||
end
|
||||
function back.resize()
|
||||
shader:send('w',SCR.W)
|
||||
shader:send('w',SCR.W)
|
||||
end
|
||||
function back.update(dt)
|
||||
t=t+dt
|
||||
t=t+dt
|
||||
end
|
||||
function back.draw()
|
||||
gc.clear(.08,.08,.084)
|
||||
shader:send('t',t)
|
||||
gc.setShader(shader)
|
||||
gc.rectangle('fill',0,0,SCR.w,SCR.h)
|
||||
gc.setShader()
|
||||
gc.clear(.08,.08,.084)
|
||||
shader:send('t',t)
|
||||
gc.setShader(shader)
|
||||
gc.rectangle('fill',0,0,SCR.w,SCR.h)
|
||||
gc.setShader()
|
||||
end
|
||||
return back
|
||||
@@ -5,20 +5,20 @@ local shader=SHADER.grad2
|
||||
|
||||
local t
|
||||
function back.init()
|
||||
t=math.random()*2600
|
||||
BG.resize(nil,SCR.h)
|
||||
t=math.random()*2600
|
||||
BG.resize(nil,SCR.h)
|
||||
end
|
||||
function back.resize(_,h)
|
||||
shader:send('h',h*SCR.dpi)
|
||||
shader:send('h',h*SCR.dpi)
|
||||
end
|
||||
function back.update(dt)
|
||||
t=t+dt
|
||||
t=t+dt
|
||||
end
|
||||
function back.draw()
|
||||
gc.clear(.08,.08,.084)
|
||||
shader:send('t',t)
|
||||
gc.setShader(shader)
|
||||
gc.rectangle('fill',0,0,SCR.w,SCR.h)
|
||||
gc.setShader()
|
||||
gc.clear(.08,.08,.084)
|
||||
shader:send('t',t)
|
||||
gc.setShader(shader)
|
||||
gc.rectangle('fill',0,0,SCR.w,SCR.h)
|
||||
gc.setShader()
|
||||
end
|
||||
return back
|
||||
@@ -12,55 +12,55 @@ local back={}
|
||||
local t
|
||||
local squares
|
||||
function back.init()
|
||||
t=26
|
||||
squares={}
|
||||
t=26
|
||||
squares={}
|
||||
end
|
||||
function back.update()
|
||||
t=t-1
|
||||
if t==0 then
|
||||
local S={
|
||||
ang=6.2832*rnd(),
|
||||
d=SCR.rad*1.05/2,
|
||||
rotate=6.2832*rnd(),
|
||||
va=.05-rnd()*.1,
|
||||
size=SCR.rad*(2+rnd()*3)/100,
|
||||
texture=SKIN.lib[SETTING.skinSet][rnd(16)],
|
||||
}
|
||||
ins(squares,S)
|
||||
t=rnd(6,12)
|
||||
end
|
||||
for i=#squares,1,-1 do
|
||||
local S=squares[i]
|
||||
S.d=S.d-SCR.rad/(S.d+60)
|
||||
if S.d>0 then
|
||||
S.ang=S.ang+.008
|
||||
S.rotate=S.rotate+S.va
|
||||
else
|
||||
rem(squares,i)
|
||||
end
|
||||
end
|
||||
t=t-1
|
||||
if t==0 then
|
||||
local S={
|
||||
ang=6.2832*rnd(),
|
||||
d=SCR.rad*1.05/2,
|
||||
rotate=6.2832*rnd(),
|
||||
va=.05-rnd()*.1,
|
||||
size=SCR.rad*(2+rnd()*3)/100,
|
||||
texture=SKIN.lib[SETTING.skinSet][rnd(16)],
|
||||
}
|
||||
ins(squares,S)
|
||||
t=rnd(6,12)
|
||||
end
|
||||
for i=#squares,1,-1 do
|
||||
local S=squares[i]
|
||||
S.d=S.d-SCR.rad/(S.d+60)
|
||||
if S.d>0 then
|
||||
S.ang=S.ang+.008
|
||||
S.rotate=S.rotate+S.va
|
||||
else
|
||||
rem(squares,i)
|
||||
end
|
||||
end
|
||||
end
|
||||
function back.draw()
|
||||
gc_clear(.1,.1,.1)
|
||||
gc_replaceTransform(SCR.xOy_m)
|
||||
gc_clear(.1,.1,.1)
|
||||
gc_replaceTransform(SCR.xOy_m)
|
||||
|
||||
--Squares
|
||||
gc_setColor(1,1,1,.2)
|
||||
for i=1,#squares do
|
||||
local S=squares[i]
|
||||
gc_draw(S.texture,S.d*cos(S.ang),S.d*sin(S.ang),S.rotate,S.size*.026,nil,15,15)
|
||||
end
|
||||
--Squares
|
||||
gc_setColor(1,1,1,.2)
|
||||
for i=1,#squares do
|
||||
local S=squares[i]
|
||||
gc_draw(S.texture,S.d*cos(S.ang),S.d*sin(S.ang),S.rotate,S.size*.026,nil,15,15)
|
||||
end
|
||||
|
||||
--Blackhole
|
||||
gc_setColor(.07,.07,.07)
|
||||
gc_circle('fill',0,0,157)
|
||||
gc_setLineWidth(6)
|
||||
for i=0,15 do
|
||||
gc_setColor(.07,.07,.07,1-i*.0666)
|
||||
gc_circle('line',0,0,160+6*i)
|
||||
end
|
||||
--Blackhole
|
||||
gc_setColor(.07,.07,.07)
|
||||
gc_circle('fill',0,0,157)
|
||||
gc_setLineWidth(6)
|
||||
for i=0,15 do
|
||||
gc_setColor(.07,.07,.07,1-i*.0666)
|
||||
gc_circle('line',0,0,160+6*i)
|
||||
end
|
||||
end
|
||||
function back.discard()
|
||||
squares=nil
|
||||
squares=nil
|
||||
end
|
||||
return back
|
||||
@@ -10,46 +10,46 @@ local back={}
|
||||
local t
|
||||
local mino
|
||||
function back.init()
|
||||
t=0
|
||||
mino={}
|
||||
t=0
|
||||
mino={}
|
||||
end
|
||||
function back.update()
|
||||
t=t+1
|
||||
if t%26==0 then
|
||||
local r=rnd(7)
|
||||
local B=BLOCKS[r][rnd(0,3)]
|
||||
local k=(1+rnd()*2)*SCR.rad/1000
|
||||
ins(mino,{
|
||||
x=(SCR.w)*rnd()-15*#B[1],
|
||||
y=0,
|
||||
k=k,
|
||||
vy=k*2,
|
||||
block=B,
|
||||
texture=SKIN.lib[SETTING.skinSet][SETTING.skin[r]],
|
||||
})
|
||||
end
|
||||
for i=#mino,1,-1 do
|
||||
local M=mino[i]
|
||||
M.y=M.y+M.vy
|
||||
if M.y-M.k*#M.block*30>SCR.h then rem(mino,i)end
|
||||
end
|
||||
t=t+1
|
||||
if t%26==0 then
|
||||
local r=rnd(7)
|
||||
local B=BLOCKS[r][rnd(0,3)]
|
||||
local k=(1+rnd()*2)*SCR.rad/1000
|
||||
ins(mino,{
|
||||
x=(SCR.w)*rnd()-15*#B[1],
|
||||
y=0,
|
||||
k=k,
|
||||
vy=k*2,
|
||||
block=B,
|
||||
texture=SKIN.lib[SETTING.skinSet][SETTING.skin[r]],
|
||||
})
|
||||
end
|
||||
for i=#mino,1,-1 do
|
||||
local M=mino[i]
|
||||
M.y=M.y+M.vy
|
||||
if M.y-M.k*#M.block*30>SCR.h then rem(mino,i)end
|
||||
end
|
||||
end
|
||||
function back.draw()
|
||||
gc_clear(.1,.1,.1)
|
||||
gc_setColor(1,1,1,.2)
|
||||
for i=1,#mino do
|
||||
local M=mino[i]
|
||||
local b=M.block
|
||||
for y=1,#b do
|
||||
for x=1,#b[1]do
|
||||
if b[y][x]then
|
||||
gc_draw(M.texture,M.x+(x-1)*30*M.k,M.y-y*30*M.k,nil,M.k)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
gc_clear(.1,.1,.1)
|
||||
gc_setColor(1,1,1,.2)
|
||||
for i=1,#mino do
|
||||
local M=mino[i]
|
||||
local b=M.block
|
||||
for y=1,#b do
|
||||
for x=1,#b[1]do
|
||||
if b[y][x]then
|
||||
gc_draw(M.texture,M.x+(x-1)*30*M.k,M.y-y*30*M.k,nil,M.k)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
function back.discard()
|
||||
mino=nil
|
||||
mino=nil
|
||||
end
|
||||
return back
|
||||
@@ -7,48 +7,48 @@ local back={}
|
||||
local t
|
||||
local mino
|
||||
function back.init()
|
||||
t=0
|
||||
mino={}
|
||||
t=0
|
||||
mino={}
|
||||
end
|
||||
function back.update()
|
||||
t=t+1
|
||||
if t%10==0 then
|
||||
local r=rnd(29)
|
||||
ins(mino,{
|
||||
bid=r,
|
||||
block=TEXTURE.miniBlock[r],
|
||||
color=minoColor[SETTING.skin[r]],
|
||||
x=SCR.w*rnd(),
|
||||
y=SCR.h*-.05,
|
||||
k=SCR.rad/100,
|
||||
ang=rnd()*6.2832,
|
||||
vy=.5+rnd()*.4,
|
||||
vx=rnd()*.4-.2,
|
||||
va=rnd()*.04-.02,
|
||||
})
|
||||
end
|
||||
for i=#mino,1,-1 do
|
||||
local P=mino[i]
|
||||
P.y=P.y+P.vy
|
||||
if P.y>SCR.h+25 then
|
||||
rem(mino,i)
|
||||
else
|
||||
P.x=P.x+P.vx
|
||||
P.ang=P.ang+P.va
|
||||
P.vx=P.vx-.01+rnd()*.02
|
||||
end
|
||||
end
|
||||
t=t+1
|
||||
if t%10==0 then
|
||||
local r=rnd(29)
|
||||
ins(mino,{
|
||||
bid=r,
|
||||
block=TEXTURE.miniBlock[r],
|
||||
color=minoColor[SETTING.skin[r]],
|
||||
x=SCR.w*rnd(),
|
||||
y=SCR.h*-.05,
|
||||
k=SCR.rad/100,
|
||||
ang=rnd()*6.2832,
|
||||
vy=.5+rnd()*.4,
|
||||
vx=rnd()*.4-.2,
|
||||
va=rnd()*.04-.02,
|
||||
})
|
||||
end
|
||||
for i=#mino,1,-1 do
|
||||
local P=mino[i]
|
||||
P.y=P.y+P.vy
|
||||
if P.y>SCR.h+25 then
|
||||
rem(mino,i)
|
||||
else
|
||||
P.x=P.x+P.vx
|
||||
P.ang=P.ang+P.va
|
||||
P.vx=P.vx-.01+rnd()*.02
|
||||
end
|
||||
end
|
||||
end
|
||||
function back.draw()
|
||||
gc.clear(.08,.08,.084)
|
||||
for i=1,#mino do
|
||||
local C=mino[i]
|
||||
local c=C.color
|
||||
gc.setColor(c[1],c[2],c[3],.2)
|
||||
gc.draw(C.block,C.x,C.y,C.ang,C.k,C.k,C.block:getWidth()/2,C.block:getHeight()/2)
|
||||
end
|
||||
gc.clear(.08,.08,.084)
|
||||
for i=1,#mino do
|
||||
local C=mino[i]
|
||||
local c=C.color
|
||||
gc.setColor(c[1],c[2],c[3],.2)
|
||||
gc.draw(C.block,C.x,C.y,C.ang,C.k,C.k,C.block:getWidth()/2,C.block:getHeight()/2)
|
||||
end
|
||||
end
|
||||
function back.discard()
|
||||
mino=nil
|
||||
mino=nil
|
||||
end
|
||||
return back
|
||||
@@ -11,47 +11,47 @@ local back={}
|
||||
local t
|
||||
local mino
|
||||
function back.init()
|
||||
t=0
|
||||
mino={}
|
||||
t=0
|
||||
mino={}
|
||||
end
|
||||
function back.update()
|
||||
t=t+1
|
||||
if t%3==0 then
|
||||
local r=rnd(29)
|
||||
ins(mino,{
|
||||
block=TEXTURE.miniBlock[r],
|
||||
color=minoColor[SETTING.skin[r]],
|
||||
ang=6.2832*rnd(),
|
||||
rotate=6.2832*rnd(),
|
||||
vr=.05-rnd()*.1,
|
||||
d=0,
|
||||
v=.5+rnd(),
|
||||
})
|
||||
end
|
||||
local rad=SCR.rad
|
||||
for i=#mino,1,-1 do
|
||||
local M=mino[i]
|
||||
M.d=M.d+M.v
|
||||
if M.d>rad*1.05 then
|
||||
rem(mino,i)
|
||||
else
|
||||
M.rotate=M.rotate+M.vr
|
||||
M.v=M.v*(1+M.d/rad*.05)
|
||||
end
|
||||
end
|
||||
t=t+1
|
||||
if t%3==0 then
|
||||
local r=rnd(29)
|
||||
ins(mino,{
|
||||
block=TEXTURE.miniBlock[r],
|
||||
color=minoColor[SETTING.skin[r]],
|
||||
ang=6.2832*rnd(),
|
||||
rotate=6.2832*rnd(),
|
||||
vr=.05-rnd()*.1,
|
||||
d=0,
|
||||
v=.5+rnd(),
|
||||
})
|
||||
end
|
||||
local rad=SCR.rad
|
||||
for i=#mino,1,-1 do
|
||||
local M=mino[i]
|
||||
M.d=M.d+M.v
|
||||
if M.d>rad*1.05 then
|
||||
rem(mino,i)
|
||||
else
|
||||
M.rotate=M.rotate+M.vr
|
||||
M.v=M.v*(1+M.d/rad*.05)
|
||||
end
|
||||
end
|
||||
end
|
||||
function back.draw()
|
||||
gc_clear(.1,.1,.1)
|
||||
gc_translate(SCR.cx,SCR.cy)
|
||||
for i=1,#mino do
|
||||
local M=mino[i]
|
||||
local c=M.color
|
||||
gc_setColor(c[1],c[2],c[3],.2)
|
||||
gc_draw(M.block,M.d*cos(M.ang),M.d*sin(M.ang),M.rotate,(18*M.d/SCR.rad)^1.6,nil,M.block:getWidth()/2,M.block:getHeight()/2)
|
||||
end
|
||||
gc_translate(-SCR.cx,-SCR.cy)
|
||||
gc_clear(.1,.1,.1)
|
||||
gc_translate(SCR.cx,SCR.cy)
|
||||
for i=1,#mino do
|
||||
local M=mino[i]
|
||||
local c=M.color
|
||||
gc_setColor(c[1],c[2],c[3],.2)
|
||||
gc_draw(M.block,M.d*cos(M.ang),M.d*sin(M.ang),M.rotate,(18*M.d/SCR.rad)^1.6,nil,M.block:getWidth()/2,M.block:getHeight()/2)
|
||||
end
|
||||
gc_translate(-SCR.cx,-SCR.cy)
|
||||
end
|
||||
function back.discard()
|
||||
mino=nil
|
||||
mino=nil
|
||||
end
|
||||
return back
|
||||
@@ -11,71 +11,71 @@ local back={}
|
||||
local t
|
||||
local squares
|
||||
function back.init()
|
||||
t=26
|
||||
squares={}
|
||||
t=26
|
||||
squares={}
|
||||
end
|
||||
function back.update(dt)
|
||||
t=t-1
|
||||
if t==0 then
|
||||
local size=SCR.rad*(2+rnd()*3)/100
|
||||
local S={
|
||||
x=(SCR.w-size)*rnd(),
|
||||
y=(SCR.h-size)*rnd(),
|
||||
vx=0,vy=0,
|
||||
size=size,
|
||||
color=COLOR.random_dark(),
|
||||
}
|
||||
local speed=SCR.rad*(1+rnd()*2)/6
|
||||
if rnd()<.5 then
|
||||
S.vy=26*(.5-rnd())
|
||||
S.vx=speed
|
||||
if rnd()<.5 then
|
||||
S.x=-S.size
|
||||
else
|
||||
S.x=SCR.w
|
||||
S.vx=-S.vx
|
||||
end
|
||||
else
|
||||
S.vx=26*(.5-rnd())
|
||||
S.vy=speed
|
||||
if rnd()<.5 then
|
||||
S.y=-S.size
|
||||
else
|
||||
S.y=SCR.h
|
||||
S.vy=-S.vy
|
||||
end
|
||||
end
|
||||
ins(squares,S)
|
||||
t=rnd(6,16)
|
||||
end
|
||||
for i=#squares,1,-1 do
|
||||
local S=squares[i]
|
||||
if
|
||||
S.vx>0 and S.x>SCR.w or
|
||||
S.vx<0 and S.x+S.size<0 or
|
||||
S.vy>0 and S.y>SCR.h or
|
||||
S.vy<0 and S.y+S.size<0
|
||||
then
|
||||
rem(squares,i)
|
||||
else
|
||||
S.x=S.x+S.vx*dt
|
||||
S.y=S.y+S.vy*dt
|
||||
end
|
||||
end
|
||||
t=t-1
|
||||
if t==0 then
|
||||
local size=SCR.rad*(2+rnd()*3)/100
|
||||
local S={
|
||||
x=(SCR.w-size)*rnd(),
|
||||
y=(SCR.h-size)*rnd(),
|
||||
vx=0,vy=0,
|
||||
size=size,
|
||||
color=COLOR.random_dark(),
|
||||
}
|
||||
local speed=SCR.rad*(1+rnd()*2)/6
|
||||
if rnd()<.5 then
|
||||
S.vy=26*(.5-rnd())
|
||||
S.vx=speed
|
||||
if rnd()<.5 then
|
||||
S.x=-S.size
|
||||
else
|
||||
S.x=SCR.w
|
||||
S.vx=-S.vx
|
||||
end
|
||||
else
|
||||
S.vx=26*(.5-rnd())
|
||||
S.vy=speed
|
||||
if rnd()<.5 then
|
||||
S.y=-S.size
|
||||
else
|
||||
S.y=SCR.h
|
||||
S.vy=-S.vy
|
||||
end
|
||||
end
|
||||
ins(squares,S)
|
||||
t=rnd(6,16)
|
||||
end
|
||||
for i=#squares,1,-1 do
|
||||
local S=squares[i]
|
||||
if
|
||||
S.vx>0 and S.x>SCR.w or
|
||||
S.vx<0 and S.x+S.size<0 or
|
||||
S.vy>0 and S.y>SCR.h or
|
||||
S.vy<0 and S.y+S.size<0
|
||||
then
|
||||
rem(squares,i)
|
||||
else
|
||||
S.x=S.x+S.vx*dt
|
||||
S.y=S.y+S.vy*dt
|
||||
end
|
||||
end
|
||||
end
|
||||
function back.draw()
|
||||
gc_clear(.1,.1,.1)
|
||||
gc_setLineWidth(6)
|
||||
for i=1,#squares do
|
||||
local S=squares[i]
|
||||
local c=S.color
|
||||
gc_setColor(c[1],c[2],c[3],.2)
|
||||
gc_rectangle('line',S.x,S.y,S.size,S.size)
|
||||
gc_setColor(c[1],c[2],c[3],.3)
|
||||
gc_rectangle('fill',S.x,S.y,S.size,S.size)
|
||||
end
|
||||
gc_clear(.1,.1,.1)
|
||||
gc_setLineWidth(6)
|
||||
for i=1,#squares do
|
||||
local S=squares[i]
|
||||
local c=S.color
|
||||
gc_setColor(c[1],c[2],c[3],.2)
|
||||
gc_rectangle('line',S.x,S.y,S.size,S.size)
|
||||
gc_setColor(c[1],c[2],c[3],.3)
|
||||
gc_rectangle('fill',S.x,S.y,S.size,S.size)
|
||||
end
|
||||
end
|
||||
function back.discard()
|
||||
squares=nil
|
||||
squares=nil
|
||||
end
|
||||
return back
|
||||
@@ -14,66 +14,66 @@ local back={}
|
||||
local t
|
||||
local fan,petal
|
||||
function back.init()
|
||||
t=0
|
||||
fan=title_fan
|
||||
petal={}
|
||||
t=0
|
||||
fan=title_fan
|
||||
petal={}
|
||||
end
|
||||
function back.update()
|
||||
t=t+1
|
||||
if t%10==0 then
|
||||
ins(petal,{
|
||||
x=SCR.w*rnd(),
|
||||
y=0,
|
||||
vy=2+rnd()*2,
|
||||
vx=rnd()*2-.5,
|
||||
rx=4+rnd()*4,
|
||||
ry=4+rnd()*4,
|
||||
})
|
||||
end
|
||||
for i=#petal,1,-1 do
|
||||
local P=petal[i]
|
||||
P.y=P.y+P.vy
|
||||
if P.y>SCR.h then
|
||||
rem(petal,i)
|
||||
else
|
||||
P.x=P.x+P.vx
|
||||
P.vx=P.vx+rnd()*.01
|
||||
P.rx=max(min(P.rx+rnd()-.5,10),2)
|
||||
P.ry=max(min(P.ry+rnd()-.5,10),2)
|
||||
end
|
||||
end
|
||||
t=t+1
|
||||
if t%10==0 then
|
||||
ins(petal,{
|
||||
x=SCR.w*rnd(),
|
||||
y=0,
|
||||
vy=2+rnd()*2,
|
||||
vx=rnd()*2-.5,
|
||||
rx=4+rnd()*4,
|
||||
ry=4+rnd()*4,
|
||||
})
|
||||
end
|
||||
for i=#petal,1,-1 do
|
||||
local P=petal[i]
|
||||
P.y=P.y+P.vy
|
||||
if P.y>SCR.h then
|
||||
rem(petal,i)
|
||||
else
|
||||
P.x=P.x+P.vx
|
||||
P.vx=P.vx+rnd()*.01
|
||||
P.rx=max(min(P.rx+rnd()-.5,10),2)
|
||||
P.ry=max(min(P.ry+rnd()-.5,10),2)
|
||||
end
|
||||
end
|
||||
end
|
||||
function back.draw()
|
||||
gc_clear(.1,.1,.1)
|
||||
gc_clear(.1,.1,.1)
|
||||
|
||||
gc_replaceTransform(SCR.xOy_m)
|
||||
gc_translate(0,20*sin(t*.02))
|
||||
gc_replaceTransform(SCR.xOy_m)
|
||||
gc_translate(0,20*sin(t*.02))
|
||||
|
||||
gc_setLineWidth(320)
|
||||
gc_setColor(.9,.6,.9,.1)
|
||||
gc_arc('line','open',0,420,500,-.8*3.1416,-.2*3.1416)
|
||||
gc_setLineWidth(320)
|
||||
gc_setColor(.9,.6,.9,.1)
|
||||
gc_arc('line','open',0,420,500,-.8*3.1416,-.2*3.1416)
|
||||
|
||||
gc_setLineWidth(4)
|
||||
gc_setColor(1,.7,.9,.2)
|
||||
gc_arc('line','open',0,420,660,-.799*3.1416,-.201*3.1416)
|
||||
gc_arc('line','open',0,420,340,-.808*3.1416,-.192*3.1416)
|
||||
gc_line(-281,224,-530,30.5)
|
||||
gc_line(281,224,530,30.5)
|
||||
gc_setLineWidth(4)
|
||||
gc_setColor(1,.7,.9,.2)
|
||||
gc_arc('line','open',0,420,660,-.799*3.1416,-.201*3.1416)
|
||||
gc_arc('line','open',0,420,340,-.808*3.1416,-.192*3.1416)
|
||||
gc_line(-281,224,-530,30.5)
|
||||
gc_line(281,224,530,30.5)
|
||||
|
||||
gc_setLineWidth(6)
|
||||
gc_setColor(.8,.9,1,.3)
|
||||
for i=1,8 do gc_polygon('line',fan[i])end
|
||||
gc_setLineWidth(6)
|
||||
gc_setColor(.8,.9,1,.3)
|
||||
for i=1,8 do gc_polygon('line',fan[i])end
|
||||
|
||||
gc_setLineWidth(2)
|
||||
gc_setColor(1,.5,.7,.3)
|
||||
gc_setLineWidth(2)
|
||||
gc_setColor(1,.5,.7,.3)
|
||||
|
||||
gc_origin()
|
||||
for i=1,#petal do
|
||||
local P=petal[i]
|
||||
gc_ellipse('fill',P.x,P.y,P.rx,P.ry)
|
||||
end
|
||||
gc_origin()
|
||||
for i=1,#petal do
|
||||
local P=petal[i]
|
||||
gc_ellipse('fill',P.x,P.y,P.rx,P.ry)
|
||||
end
|
||||
end
|
||||
function back.discard()
|
||||
petal=nil
|
||||
petal=nil
|
||||
end
|
||||
return back
|
||||
@@ -11,88 +11,88 @@ local back={}
|
||||
local t
|
||||
local firework,particle
|
||||
function back.init()
|
||||
t=26
|
||||
firework,particle={},{}
|
||||
t=26
|
||||
firework,particle={},{}
|
||||
end
|
||||
function back.update(dt)
|
||||
t=t-1
|
||||
if t==0 then
|
||||
ins(firework,{
|
||||
x=nil,y=nil,
|
||||
x0=SCR.w*(rnd()*1.2-.1),
|
||||
y0=SCR.h*1.5,
|
||||
x1=SCR.w*(.15+rnd()*.7),
|
||||
y1=SCR.h*(.15+rnd()*.4),
|
||||
t=0,
|
||||
v=.5+rnd(),
|
||||
color=COLOR.random_dark(),
|
||||
big=rnd()<.1,
|
||||
})
|
||||
t=rnd(26,62)
|
||||
end
|
||||
for i=#firework,1,-1 do
|
||||
local F=firework[i]
|
||||
local time=F.t^.5
|
||||
if time>1 then
|
||||
local x,y,color=F.x,F.y,F.color
|
||||
if F.big then
|
||||
SFX.play('fall',.5)
|
||||
for _=1,rnd(62,126)do
|
||||
ins(particle,{
|
||||
x=x,y=y,
|
||||
color=color,
|
||||
vx=rnd()*16-8,
|
||||
vy=rnd()*16-8,
|
||||
t=1,
|
||||
})
|
||||
end
|
||||
else
|
||||
SFX.play('clear_1',.4)
|
||||
for _=1,rnd(16,26)do
|
||||
ins(particle,{
|
||||
x=x,y=y,
|
||||
color=color,
|
||||
vx=rnd()*8-4,
|
||||
vy=rnd()*8-4,
|
||||
t=1,
|
||||
})
|
||||
end
|
||||
end
|
||||
rem(firework,i)
|
||||
else
|
||||
F.t=F.t+dt*F.v
|
||||
F.x=F.x0*(1-time)+F.x1*time
|
||||
F.y=F.y0*(1-time)+F.y1*time
|
||||
end
|
||||
end
|
||||
for i=#particle,1,-1 do
|
||||
local P=particle[i]
|
||||
if P.t<0 then
|
||||
rem(particle,i)
|
||||
else
|
||||
P.x=P.x+P.vx
|
||||
P.y=P.y+P.vy
|
||||
P.vy=P.vy+.04
|
||||
P.t=P.t-dt*.6
|
||||
end
|
||||
end
|
||||
t=t-1
|
||||
if t==0 then
|
||||
ins(firework,{
|
||||
x=nil,y=nil,
|
||||
x0=SCR.w*(rnd()*1.2-.1),
|
||||
y0=SCR.h*1.5,
|
||||
x1=SCR.w*(.15+rnd()*.7),
|
||||
y1=SCR.h*(.15+rnd()*.4),
|
||||
t=0,
|
||||
v=.5+rnd(),
|
||||
color=COLOR.random_dark(),
|
||||
big=rnd()<.1,
|
||||
})
|
||||
t=rnd(26,62)
|
||||
end
|
||||
for i=#firework,1,-1 do
|
||||
local F=firework[i]
|
||||
local time=F.t^.5
|
||||
if time>1 then
|
||||
local x,y,color=F.x,F.y,F.color
|
||||
if F.big then
|
||||
SFX.play('fall',.5)
|
||||
for _=1,rnd(62,126)do
|
||||
ins(particle,{
|
||||
x=x,y=y,
|
||||
color=color,
|
||||
vx=rnd()*16-8,
|
||||
vy=rnd()*16-8,
|
||||
t=1,
|
||||
})
|
||||
end
|
||||
else
|
||||
SFX.play('clear_1',.4)
|
||||
for _=1,rnd(16,26)do
|
||||
ins(particle,{
|
||||
x=x,y=y,
|
||||
color=color,
|
||||
vx=rnd()*8-4,
|
||||
vy=rnd()*8-4,
|
||||
t=1,
|
||||
})
|
||||
end
|
||||
end
|
||||
rem(firework,i)
|
||||
else
|
||||
F.t=F.t+dt*F.v
|
||||
F.x=F.x0*(1-time)+F.x1*time
|
||||
F.y=F.y0*(1-time)+F.y1*time
|
||||
end
|
||||
end
|
||||
for i=#particle,1,-1 do
|
||||
local P=particle[i]
|
||||
if P.t<0 then
|
||||
rem(particle,i)
|
||||
else
|
||||
P.x=P.x+P.vx
|
||||
P.y=P.y+P.vy
|
||||
P.vy=P.vy+.04
|
||||
P.t=P.t-dt*.6
|
||||
end
|
||||
end
|
||||
end
|
||||
function back.draw()
|
||||
gc_clear(.1,.1,.1)
|
||||
for i=1,#firework do
|
||||
local F=firework[i]
|
||||
gc_setColor(F.color)
|
||||
gc_circle('fill',F.x,F.y,F.big and 8 or 4)
|
||||
end
|
||||
gc_setLineWidth(3)
|
||||
for i=1,#particle do
|
||||
local P=particle[i]
|
||||
local c=P.color
|
||||
gc_setColor(c[1],c[2],c[3],P.t*.4)
|
||||
gc_line(P.x,P.y,P.x-P.vx*4,P.y-P.vy*4)
|
||||
end
|
||||
gc_clear(.1,.1,.1)
|
||||
for i=1,#firework do
|
||||
local F=firework[i]
|
||||
gc_setColor(F.color)
|
||||
gc_circle('fill',F.x,F.y,F.big and 8 or 4)
|
||||
end
|
||||
gc_setLineWidth(3)
|
||||
for i=1,#particle do
|
||||
local P=particle[i]
|
||||
local c=P.color
|
||||
gc_setColor(c[1],c[2],c[3],P.t*.4)
|
||||
gc_line(P.x,P.y,P.x-P.vx*4,P.y-P.vy*4)
|
||||
end
|
||||
end
|
||||
function back.discard()
|
||||
firework=nil
|
||||
firework=nil
|
||||
end
|
||||
return back
|
||||
@@ -4,15 +4,15 @@ local back={}
|
||||
|
||||
local t
|
||||
function back.init()
|
||||
t=math.random()*2600
|
||||
t=math.random()*2600
|
||||
end
|
||||
function back.update(dt)
|
||||
t=t+dt
|
||||
t=t+dt
|
||||
end
|
||||
function back.draw()
|
||||
local t1=.13-t%3%1.9
|
||||
if t1<.2 then gc.clear(t1,t1,t1)
|
||||
else gc.clear(0,0,0)
|
||||
end
|
||||
local t1=.13-t%3%1.9
|
||||
if t1<.2 then gc.clear(t1,t1,t1)
|
||||
else gc.clear(0,0,0)
|
||||
end
|
||||
end
|
||||
return back
|
||||
@@ -5,13 +5,13 @@ local back={}
|
||||
|
||||
local t
|
||||
function back.init()
|
||||
t=math.random()*2600
|
||||
t=math.random()*2600
|
||||
end
|
||||
function back.update(dt)
|
||||
t=t+dt
|
||||
t=t+dt
|
||||
end
|
||||
function back.draw()
|
||||
local t1=(sin(t*.5)+sin(t*.7)+sin(t*.9+1)+sin(t*1.5)+sin(t*2+10))*.08
|
||||
gc.clear(t1,t1,t1)
|
||||
local t1=(sin(t*.5)+sin(t*.7)+sin(t*.9+1)+sin(t*1.5)+sin(t*2+10))*.08
|
||||
gc.clear(t1,t1,t1)
|
||||
end
|
||||
return back
|
||||
@@ -8,41 +8,41 @@ local back={}
|
||||
local lanterns
|
||||
local t
|
||||
function back.init()
|
||||
lanterns={}
|
||||
t=0
|
||||
lanterns={}
|
||||
t=0
|
||||
end
|
||||
function back.update(dt)
|
||||
t=t-dt
|
||||
local H=SCR.h
|
||||
if t<=0 then
|
||||
local size=SCR.rad*(2+rnd()*3)/5/2000
|
||||
local L={
|
||||
x=SCR.w*rnd(),
|
||||
y=H*1.1,
|
||||
vy=size*2,
|
||||
size=size,
|
||||
phase=rnd(),
|
||||
vp=(.02+.02*rnd())*(rnd(2)*2-3),
|
||||
}
|
||||
ins(lanterns,L)
|
||||
t=rnd(.626,1.626)
|
||||
end
|
||||
for i=#lanterns,1,-1 do
|
||||
local L=lanterns[i]
|
||||
L.y=L.y-L.vy*dt*60
|
||||
L.phase=(L.phase+L.vp*dt*60)%1
|
||||
if L.y<-.1*H then
|
||||
rem(lanterns,i)
|
||||
end
|
||||
end
|
||||
t=t-dt
|
||||
local H=SCR.h
|
||||
if t<=0 then
|
||||
local size=SCR.rad*(2+rnd()*3)/5/2000
|
||||
local L={
|
||||
x=SCR.w*rnd(),
|
||||
y=H*1.1,
|
||||
vy=size*2,
|
||||
size=size,
|
||||
phase=rnd(),
|
||||
vp=(.02+.02*rnd())*(rnd(2)*2-3),
|
||||
}
|
||||
ins(lanterns,L)
|
||||
t=rnd(.626,1.626)
|
||||
end
|
||||
for i=#lanterns,1,-1 do
|
||||
local L=lanterns[i]
|
||||
L.y=L.y-L.vy*dt*60
|
||||
L.phase=(L.phase+L.vp*dt*60)%1
|
||||
if L.y<-.1*H then
|
||||
rem(lanterns,i)
|
||||
end
|
||||
end
|
||||
end
|
||||
function back.draw()
|
||||
gc.clear(.08,.08,.084)
|
||||
gc.setColor(1,1,1,.2)
|
||||
local img=IMG.lanterns
|
||||
for i=1,#lanterns do
|
||||
local L=lanterns[i]
|
||||
mDraw(img[int(L.phase*6)+1],L.x,L.y,nil,L.size)
|
||||
end
|
||||
gc.clear(.08,.08,.084)
|
||||
gc.setColor(1,1,1,.2)
|
||||
local img=IMG.lanterns
|
||||
for i=1,#lanterns do
|
||||
local L=lanterns[i]
|
||||
mDraw(img[int(L.phase*6)+1],L.x,L.y,nil,L.size)
|
||||
end
|
||||
end
|
||||
return back
|
||||
@@ -3,34 +3,34 @@ local gc=love.graphics
|
||||
local back={}
|
||||
|
||||
local upCover do
|
||||
local L={1,64}
|
||||
for i=0,63 do
|
||||
table.insert(L,{'setCL',.6,1,1,i*.01})
|
||||
table.insert(L,{'fRect',0,63-i,1,1})
|
||||
end
|
||||
upCover=GC.DO(L)
|
||||
local L={1,64}
|
||||
for i=0,63 do
|
||||
table.insert(L,{'setCL',.6,1,1,i*.01})
|
||||
table.insert(L,{'fRect',0,63-i,1,1})
|
||||
end
|
||||
upCover=GC.DO(L)
|
||||
end
|
||||
local downCover do
|
||||
local L={1,64}
|
||||
for i=0,63 do
|
||||
table.insert(L,{'setCL',1,.5,.8,i*.01})
|
||||
table.insert(L,{'fRect',0,i,1,1})
|
||||
end
|
||||
downCover=GC.DO(L)
|
||||
local L={1,64}
|
||||
for i=0,63 do
|
||||
table.insert(L,{'setCL',1,.5,.8,i*.01})
|
||||
table.insert(L,{'fRect',0,i,1,1})
|
||||
end
|
||||
downCover=GC.DO(L)
|
||||
end
|
||||
|
||||
local W,H
|
||||
function back.init()
|
||||
BG.resize(SCR.w,SCR.h)
|
||||
BG.resize(SCR.w,SCR.h)
|
||||
end
|
||||
function back.resize(w,h)
|
||||
W,H=w,h
|
||||
W,H=w,h
|
||||
end
|
||||
function back.update()
|
||||
end
|
||||
function back.draw()
|
||||
gc.clear(.08,.08,.084)
|
||||
gc.draw(upCover,0,0,0,W,H*.3/64)
|
||||
gc.draw(downCover,0,H*.7,0,W,H*.3/64)
|
||||
gc.clear(.08,.08,.084)
|
||||
gc.draw(upCover,0,0,0,W,H*.3/64)
|
||||
gc.draw(downCover,0,H*.7,0,W,H*.3/64)
|
||||
end
|
||||
return back
|
||||
@@ -4,15 +4,15 @@ local back={}
|
||||
|
||||
local t
|
||||
function back.init()
|
||||
t=math.random()*2600
|
||||
t=math.random()*2600
|
||||
end
|
||||
function back.update(dt)
|
||||
t=t+dt
|
||||
t=t+dt
|
||||
end
|
||||
function back.draw()
|
||||
local t1=2.5-t%20%6%2.5
|
||||
if t1<.3 then gc.clear(t1,t1,t1)
|
||||
else gc.clear(0,0,0)
|
||||
end
|
||||
local t1=2.5-t%20%6%2.5
|
||||
if t1<.3 then gc.clear(t1,t1,t1)
|
||||
else gc.clear(0,0,0)
|
||||
end
|
||||
end
|
||||
return back
|
||||
@@ -8,19 +8,19 @@ local colorLib=minoColor
|
||||
local blocks=BLOCKS
|
||||
local scs=RSlist.TRS.centerPos
|
||||
function back.init()
|
||||
t=rnd()*2600
|
||||
t=rnd()*2600
|
||||
end
|
||||
function back.update(dt)
|
||||
t=t+dt
|
||||
t=t+dt
|
||||
end
|
||||
function back.draw()
|
||||
local R=7-int(t*.5%7)
|
||||
local T=1.2-t%15%6%1.8
|
||||
if T<.26 then gc.clear(T,T,T)
|
||||
else gc.clear(0,0,0)
|
||||
end
|
||||
local _=colorLib[SETTING.skin[R]]
|
||||
gc.setColor(_[1],_[2],_[3],.12)
|
||||
gc.draw(TEXTURE.miniBlock[R],SCR.cx,SCR.cy,t%3.1416*6,400*SCR.k,nil,scs[R][0][2]+.5,#blocks[R][0]-scs[R][0][1]-.5)
|
||||
local R=7-int(t*.5%7)
|
||||
local T=1.2-t%15%6%1.8
|
||||
if T<.26 then gc.clear(T,T,T)
|
||||
else gc.clear(0,0,0)
|
||||
end
|
||||
local _=colorLib[SETTING.skin[R]]
|
||||
gc.setColor(_[1],_[2],_[3],.12)
|
||||
gc.draw(TEXTURE.miniBlock[R],SCR.cx,SCR.cy,t%3.1416*6,400*SCR.k,nil,scs[R][0][2]+.5,#blocks[R][0]-scs[R][0][1]-.5)
|
||||
end
|
||||
return back
|
||||
@@ -11,21 +11,21 @@ local back={}
|
||||
local t
|
||||
local matrixT={}for i=1,50 do matrixT[i]={}for j=1,50 do matrixT[i][j]=love.math.noise(i,j)+2 end end
|
||||
function back.init()
|
||||
t=math.random()*2600
|
||||
t=math.random()*2600
|
||||
end
|
||||
function back.update(dt)
|
||||
t=t+dt
|
||||
t=t+dt
|
||||
end
|
||||
function back.draw()
|
||||
gc_clear(.1,.1,.1)
|
||||
local k=SCR.k
|
||||
gc_scale(k)
|
||||
local Y=ceil(SCR.h/80/k)
|
||||
for x=1,ceil(SCR.w/80/k)do
|
||||
for y=1,Y do
|
||||
gc_setColor(1,1,1,sin(x+matrixT[x][y]*t)*.04+.04)
|
||||
gc_rectangle('fill',80*x,80*y,-80,-80)
|
||||
end
|
||||
end
|
||||
gc_clear(.1,.1,.1)
|
||||
local k=SCR.k
|
||||
gc_scale(k)
|
||||
local Y=ceil(SCR.h/80/k)
|
||||
for x=1,ceil(SCR.w/80/k)do
|
||||
for y=1,Y do
|
||||
gc_setColor(1,1,1,sin(x+matrixT[x][y]*t)*.04+.04)
|
||||
gc_rectangle('fill',80*x,80*y,-80,-80)
|
||||
end
|
||||
end
|
||||
end
|
||||
return back
|
||||
@@ -5,21 +5,21 @@ local shader=SHADER.rgb1
|
||||
|
||||
local t
|
||||
function back.init()
|
||||
t=math.random()*2600
|
||||
BG.resize(SCR.w,SCR.h)
|
||||
t=math.random()*2600
|
||||
BG.resize(SCR.w,SCR.h)
|
||||
end
|
||||
function back.resize(_,h)
|
||||
shader:send('w',SCR.W)
|
||||
shader:send('h',h*SCR.dpi)
|
||||
shader:send('w',SCR.W)
|
||||
shader:send('h',h*SCR.dpi)
|
||||
end
|
||||
function back.update(dt)
|
||||
t=t+dt
|
||||
t=t+dt
|
||||
end
|
||||
function back.draw()
|
||||
gc.clear(.08,.08,.084)
|
||||
shader:send('t',t)
|
||||
gc.setShader(shader)
|
||||
gc.rectangle('fill',0,0,SCR.w,SCR.h)
|
||||
gc.setShader()
|
||||
gc.clear(.08,.08,.084)
|
||||
shader:send('t',t)
|
||||
gc.setShader(shader)
|
||||
gc.rectangle('fill',0,0,SCR.w,SCR.h)
|
||||
gc.setShader()
|
||||
end
|
||||
return back
|
||||
@@ -5,21 +5,21 @@ local shader=SHADER.rgb2
|
||||
|
||||
local t
|
||||
function back.init()
|
||||
t=math.random()*2600
|
||||
BG.resize(SCR.w,SCR.h)
|
||||
t=math.random()*2600
|
||||
BG.resize(SCR.w,SCR.h)
|
||||
end
|
||||
function back.resize(_,h)
|
||||
shader:send('w',SCR.W)
|
||||
shader:send('h',h*SCR.dpi)
|
||||
shader:send('w',SCR.W)
|
||||
shader:send('h',h*SCR.dpi)
|
||||
end
|
||||
function back.update(dt)
|
||||
t=t+dt
|
||||
t=t+dt
|
||||
end
|
||||
function back.draw()
|
||||
gc.clear(.08,.08,.084)
|
||||
shader:send('t',t)
|
||||
gc.setShader(shader)
|
||||
gc.rectangle('fill',0,0,SCR.w,SCR.h)
|
||||
gc.setShader()
|
||||
gc.clear(.08,.08,.084)
|
||||
shader:send('t',t)
|
||||
gc.setShader(shader)
|
||||
gc.rectangle('fill',0,0,SCR.w,SCR.h)
|
||||
gc.setShader()
|
||||
end
|
||||
return back
|
||||
@@ -5,16 +5,16 @@ local back={}
|
||||
|
||||
local t
|
||||
function back.init()
|
||||
t=math.random()*2600
|
||||
t=math.random()*2600
|
||||
end
|
||||
function back.update(dt)
|
||||
t=t+dt
|
||||
t=t+dt
|
||||
end
|
||||
function back.draw()
|
||||
gc.clear(
|
||||
sin(t*1.2)*.06+.08,
|
||||
sin(t*1.5)*.06+.08,
|
||||
sin(t*1.9)*.06+.08
|
||||
)
|
||||
gc.clear(
|
||||
sin(t*1.2)*.06+.08,
|
||||
sin(t*1.5)*.06+.08,
|
||||
sin(t*1.9)*.06+.08
|
||||
)
|
||||
end
|
||||
return back
|
||||
@@ -9,43 +9,43 @@ local back={}
|
||||
local t
|
||||
local snow
|
||||
function back.init()
|
||||
t=0
|
||||
snow={}
|
||||
t=0
|
||||
snow={}
|
||||
end
|
||||
function back.update()
|
||||
t=t+1
|
||||
if t%(t%626>260 and 3 or 6)==0 then
|
||||
ins(snow,{
|
||||
x=SCR.w*rnd(),
|
||||
y=0,
|
||||
vy=1+rnd()*.6,
|
||||
vx=rnd()*2-.5,
|
||||
rx=2+rnd()*2,
|
||||
ry=2+rnd()*2,
|
||||
})
|
||||
end
|
||||
for i=#snow,1,-1 do
|
||||
local P=snow[i]
|
||||
P.y=P.y+P.vy
|
||||
if P.y>SCR.h then
|
||||
rem(snow,i)
|
||||
else
|
||||
P.x=P.x+P.vx
|
||||
P.vx=P.vx-.02+rnd()*.04
|
||||
P.rx=max(min(P.rx+rnd()-.5,4),2)
|
||||
P.ry=max(min(P.ry+rnd()-.5,5),3)
|
||||
end
|
||||
end
|
||||
t=t+1
|
||||
if t%(t%626>260 and 3 or 6)==0 then
|
||||
ins(snow,{
|
||||
x=SCR.w*rnd(),
|
||||
y=0,
|
||||
vy=1+rnd()*.6,
|
||||
vx=rnd()*2-.5,
|
||||
rx=2+rnd()*2,
|
||||
ry=2+rnd()*2,
|
||||
})
|
||||
end
|
||||
for i=#snow,1,-1 do
|
||||
local P=snow[i]
|
||||
P.y=P.y+P.vy
|
||||
if P.y>SCR.h then
|
||||
rem(snow,i)
|
||||
else
|
||||
P.x=P.x+P.vx
|
||||
P.vx=P.vx-.02+rnd()*.04
|
||||
P.rx=max(min(P.rx+rnd()-.5,4),2)
|
||||
P.ry=max(min(P.ry+rnd()-.5,5),3)
|
||||
end
|
||||
end
|
||||
end
|
||||
function back.draw()
|
||||
gc.clear(.08,.08,.084)
|
||||
gc.setColor(.7,.7,.7)
|
||||
for i=1,#snow do
|
||||
local P=snow[i]
|
||||
ellipse('fill',P.x,P.y,P.rx,P.ry)
|
||||
end
|
||||
gc.clear(.08,.08,.084)
|
||||
gc.setColor(.7,.7,.7)
|
||||
for i=1,#snow do
|
||||
local P=snow[i]
|
||||
ellipse('fill',P.x,P.y,P.rx,P.ry)
|
||||
end
|
||||
end
|
||||
function back.discard()
|
||||
snow=nil
|
||||
snow=nil
|
||||
end
|
||||
return back
|
||||
@@ -7,40 +7,40 @@ local back={}
|
||||
local stars
|
||||
local W,H
|
||||
function back.init()
|
||||
stars={}
|
||||
BG.resize(SCR.w,SCR.h)
|
||||
stars={}
|
||||
BG.resize(SCR.w,SCR.h)
|
||||
end
|
||||
function back.resize(w,h)
|
||||
W,H=w+20,h+20
|
||||
local S=stars
|
||||
for i=1,1260,5 do
|
||||
local s=rnd(26,40)*.1
|
||||
S[i]=s*SCR.k --Size
|
||||
S[i+1]=rnd(W)-10 --X
|
||||
S[i+2]=rnd(H)-10 --Y
|
||||
S[i+3]=(rnd()-.5)*.01*s --Vx
|
||||
S[i+4]=(rnd()-.5)*.01*s --Vy
|
||||
end
|
||||
W,H=w+20,h+20
|
||||
local S=stars
|
||||
for i=1,1260,5 do
|
||||
local s=rnd(26,40)*.1
|
||||
S[i]=s*SCR.k --Size
|
||||
S[i+1]=rnd(W)-10 --X
|
||||
S[i+2]=rnd(H)-10 --Y
|
||||
S[i+3]=(rnd()-.5)*.01*s--Vx
|
||||
S[i+4]=(rnd()-.5)*.01*s--Vy
|
||||
end
|
||||
end
|
||||
function back.update()
|
||||
local S=stars
|
||||
--Star moving
|
||||
for i=1,1260,5 do
|
||||
S[i+1]=(S[i+1]+S[i+3])%W
|
||||
S[i+2]=(S[i+2]+S[i+4])%H
|
||||
end
|
||||
local S=stars
|
||||
--Star moving
|
||||
for i=1,1260,5 do
|
||||
S[i+1]=(S[i+1]+S[i+3])%W
|
||||
S[i+2]=(S[i+2]+S[i+4])%H
|
||||
end
|
||||
end
|
||||
function back.draw()
|
||||
gc.clear(.08,.08,.084)
|
||||
if not stars[1]then return end
|
||||
gc.translate(-10,-10)
|
||||
gc.setColor(1,1,1,.6)
|
||||
for i=1,1260,5 do
|
||||
rectangle('fill',stars[i+1],stars[i+2],stars[i],stars[i])
|
||||
end
|
||||
gc.translate(10,10)
|
||||
gc.clear(.08,.08,.084)
|
||||
if not stars[1]then return end
|
||||
gc.translate(-10,-10)
|
||||
gc.setColor(1,1,1,.6)
|
||||
for i=1,1260,5 do
|
||||
rectangle('fill',stars[i+1],stars[i+2],stars[i],stars[i])
|
||||
end
|
||||
gc.translate(10,10)
|
||||
end
|
||||
function back.discard()
|
||||
stars=nil
|
||||
stars=nil
|
||||
end
|
||||
return back
|
||||
@@ -8,36 +8,36 @@ local ring
|
||||
local t
|
||||
local W,H
|
||||
function back.init()
|
||||
ring={}
|
||||
t=26
|
||||
back.resize(SCR.w,SCR.h)
|
||||
ring={}
|
||||
t=26
|
||||
back.resize(SCR.w,SCR.h)
|
||||
end
|
||||
function back.resize(w,h)
|
||||
W,H=w,h
|
||||
W,H=w,h
|
||||
end
|
||||
function back.update(dt)
|
||||
t=t-1
|
||||
if t==0 then
|
||||
t=rnd(26,62)
|
||||
ins(ring,0)
|
||||
end
|
||||
for i=#ring,1,-1 do
|
||||
ring[i]=ring[i]+dt
|
||||
if ring[i]>3.55 then
|
||||
rem(ring,i)
|
||||
end
|
||||
end
|
||||
t=t-1
|
||||
if t==0 then
|
||||
t=rnd(26,62)
|
||||
ins(ring,0)
|
||||
end
|
||||
for i=#ring,1,-1 do
|
||||
ring[i]=ring[i]+dt
|
||||
if ring[i]>3.55 then
|
||||
rem(ring,i)
|
||||
end
|
||||
end
|
||||
end
|
||||
function back.draw()
|
||||
gc.clear(.08,.08,.084)
|
||||
gc.setColor(1,1,1,.1)
|
||||
for i=1,#ring do
|
||||
local r=ring[i]^2/12
|
||||
gc.setLineWidth(30-15/(r+.5))
|
||||
gc.rectangle('line',W*.5-W*r/2,H*.5-H*r/2,W*r,H*r)
|
||||
end
|
||||
gc.clear(.08,.08,.084)
|
||||
gc.setColor(1,1,1,.1)
|
||||
for i=1,#ring do
|
||||
local r=ring[i]^2/12
|
||||
gc.setLineWidth(30-15/(r+.5))
|
||||
gc.rectangle('line',W*.5-W*r/2,H*.5-H*r/2,W*r,H*r)
|
||||
end
|
||||
end
|
||||
function back.discard()
|
||||
ring=nil
|
||||
ring=nil
|
||||
end
|
||||
return back
|
||||
@@ -6,34 +6,34 @@ local back={}
|
||||
local t
|
||||
local txt
|
||||
function back.init()
|
||||
t=math.random()*2600
|
||||
txt=gc.newText(getFont(80),"Welcome To Techmino")
|
||||
t=math.random()*2600
|
||||
txt=gc.newText(getFont(80),"Welcome To Techmino")
|
||||
end
|
||||
function back.update(dt)
|
||||
t=t+dt
|
||||
t=t+dt
|
||||
end
|
||||
function back.draw()
|
||||
if -t%13.55<.1283 then
|
||||
gc.clear(.2+.1*sin(t),.2+.1*sin(1.26*t),.2+.1*sin(1.626*t))
|
||||
else
|
||||
gc.clear(.08,.08,.084)
|
||||
end
|
||||
gc.push('transform')
|
||||
gc.translate(SCR.cx,SCR.cy+20*sin(t*.02))
|
||||
gc.scale(SCR.k)
|
||||
gc.scale(1.1626,1.26)
|
||||
if -t%6.26<.1355 then
|
||||
gc.translate(60*sin(t*.26),100*sin(t*.626))
|
||||
end
|
||||
if -t%12.6<.1626 then
|
||||
gc.rotate(t+5*sin(.26*t)+5*sin(.626*t))
|
||||
end
|
||||
gc.setColor(.4,.6,1,.3)
|
||||
gc.draw(txt,-883*.5+4*sin(t*.7942),-110*.5+4*sin(t*.7355))
|
||||
gc.setColor(.5,.7,1,.4)
|
||||
gc.draw(txt,-883*.5+2*sin(t*.77023),-110*.5+2*sin(t*.7026))
|
||||
gc.setColor(1,1,1,.5)
|
||||
gc.draw(txt,-883*.5+3*sin(t*.7283),-110*.5+3*sin(t*.7626))
|
||||
gc.pop()
|
||||
if -t%13.55<.1283 then
|
||||
gc.clear(.2+.1*sin(t),.2+.1*sin(1.26*t),.2+.1*sin(1.626*t))
|
||||
else
|
||||
gc.clear(.08,.08,.084)
|
||||
end
|
||||
gc.push('transform')
|
||||
gc.translate(SCR.cx,SCR.cy+20*sin(t*.02))
|
||||
gc.scale(SCR.k)
|
||||
gc.scale(1.1626,1.26)
|
||||
if -t%6.26<.1355 then
|
||||
gc.translate(60*sin(t*.26),100*sin(t*.626))
|
||||
end
|
||||
if -t%12.6<.1626 then
|
||||
gc.rotate(t+5*sin(.26*t)+5*sin(.626*t))
|
||||
end
|
||||
gc.setColor(.4,.6,1,.3)
|
||||
gc.draw(txt,-883*.5+4*sin(t*.7942),-110*.5+4*sin(t*.7355))
|
||||
gc.setColor(.5,.7,1,.4)
|
||||
gc.draw(txt,-883*.5+2*sin(t*.77023),-110*.5+2*sin(t*.7026))
|
||||
gc.setColor(1,1,1,.5)
|
||||
gc.draw(txt,-883*.5+3*sin(t*.7283),-110*.5+3*sin(t*.7626))
|
||||
gc.pop()
|
||||
end
|
||||
return back
|
||||
@@ -3,71 +3,71 @@ local gc=love.graphics
|
||||
local rnd=math.random
|
||||
local back={}
|
||||
local wingColor={
|
||||
{.3,.9,.9,.2},
|
||||
{.5,1.,.5,.2},
|
||||
{.9,.9,.3,.2},
|
||||
{1.,.7,.3,.2},
|
||||
{1.,.5,.5,.2},
|
||||
{.7,.3,1.,.2},
|
||||
{.5,.5,1.,.2},
|
||||
{.3,.9,.9,.2},
|
||||
{.3,.9,.9,.2},
|
||||
{.5,1.,.5,.2},
|
||||
{.9,.9,.3,.2},
|
||||
{1.,.7,.3,.2},
|
||||
{1.,.5,.5,.2},
|
||||
{.7,.3,1.,.2},
|
||||
{.5,.5,1.,.2},
|
||||
{.3,.9,.9,.2},
|
||||
}
|
||||
local bar,crystal
|
||||
local W,H
|
||||
function back.init()
|
||||
bar=gc.newCanvas(41,1)
|
||||
gc.setCanvas(bar)
|
||||
gc.push('transform')
|
||||
gc.origin()
|
||||
for x=0,20 do
|
||||
gc.setColor(1,1,1,x/5)
|
||||
gc.rectangle('fill',x,0,1,1)
|
||||
gc.rectangle('fill',41-x,0,1,1)
|
||||
end
|
||||
gc.pop()
|
||||
gc.setCanvas()
|
||||
back.resize()
|
||||
bar=gc.newCanvas(41,1)
|
||||
gc.setCanvas(bar)
|
||||
gc.push('transform')
|
||||
gc.origin()
|
||||
for x=0,20 do
|
||||
gc.setColor(1,1,1,x/5)
|
||||
gc.rectangle('fill',x,0,1,1)
|
||||
gc.rectangle('fill',41-x,0,1,1)
|
||||
end
|
||||
gc.pop()
|
||||
gc.setCanvas()
|
||||
back.resize()
|
||||
end
|
||||
function back.resize()
|
||||
crystal={}
|
||||
W,H=SCR.w,SCR.h
|
||||
for i=1,16 do
|
||||
crystal[i]={
|
||||
x=i<9 and W*.05*i or W*.05*(28-i),
|
||||
y=H*.1,
|
||||
a=0,
|
||||
va=0,
|
||||
f=i<9 and .012-i*.0005 or .012-(17-i)*.0005
|
||||
}
|
||||
end
|
||||
crystal={}
|
||||
W,H=SCR.w,SCR.h
|
||||
for i=1,16 do
|
||||
crystal[i]={
|
||||
x=i<9 and W*.05*i or W*.05*(28-i),
|
||||
y=H*.1,
|
||||
a=0,
|
||||
va=0,
|
||||
f=i<9 and .012-i*.0005 or .012-(17-i)*.0005
|
||||
}
|
||||
end
|
||||
end
|
||||
function back.update()
|
||||
for i=1,16 do
|
||||
local B=crystal[i]
|
||||
B.a=B.a+B.va
|
||||
B.va=B.va*.986-B.a*B.f
|
||||
end
|
||||
for i=1,16 do
|
||||
local B=crystal[i]
|
||||
B.a=B.a+B.va
|
||||
B.va=B.va*.986-B.a*B.f
|
||||
end
|
||||
end
|
||||
function back.draw()
|
||||
gc.clear(.06,.06,.06)
|
||||
local sk,sy=SCR.k,H*.8
|
||||
for i=1,8 do
|
||||
gc.setColor(wingColor[i])
|
||||
local B=crystal[i]
|
||||
gc.draw(bar,B.x,B.y,B.a,sk,sy,20,0)
|
||||
B=crystal[17-i]
|
||||
gc.draw(bar,B.x,B.y,B.a,sk,sy,20,0)
|
||||
end
|
||||
gc.clear(.06,.06,.06)
|
||||
local sk,sy=SCR.k,H*.8
|
||||
for i=1,8 do
|
||||
gc.setColor(wingColor[i])
|
||||
local B=crystal[i]
|
||||
gc.draw(bar,B.x,B.y,B.a,sk,sy,20,0)
|
||||
B=crystal[17-i]
|
||||
gc.draw(bar,B.x,B.y,B.a,sk,sy,20,0)
|
||||
end
|
||||
end
|
||||
function back.event(level)
|
||||
for i=1,8 do
|
||||
local B=crystal[i]
|
||||
B.va=B.va+.001*level*(1+rnd())
|
||||
B=crystal[17-i]
|
||||
B.va=B.va-.001*level*(1+rnd())
|
||||
end
|
||||
for i=1,8 do
|
||||
local B=crystal[i]
|
||||
B.va=B.va+.001*level*(1+rnd())
|
||||
B=crystal[17-i]
|
||||
B.va=B.va-.001*level*(1+rnd())
|
||||
end
|
||||
end
|
||||
function back.discard()
|
||||
bar,crystal=nil
|
||||
bar,crystal=nil
|
||||
end
|
||||
return back
|
||||
@@ -1,15 +1,15 @@
|
||||
--[[ControlID:
|
||||
1~5:mL,mR,rR,rL,rF,
|
||||
6~10:hD,sD,H,A,R,
|
||||
11~13:LL,RR,DD
|
||||
1~5:mL,mR,rR,rL,rF,
|
||||
6~10:hD,sD,H,A,R,
|
||||
11~13:LL,RR,DD
|
||||
]]
|
||||
--[[Future:
|
||||
HighestBlock
|
||||
BlockedCells
|
||||
Wells
|
||||
FilledLines
|
||||
4deepShape
|
||||
BlockedWells
|
||||
HighestBlock
|
||||
BlockedCells
|
||||
Wells
|
||||
FilledLines
|
||||
4deepShape
|
||||
BlockedWells
|
||||
]]
|
||||
local min,abs=math.min,math.abs
|
||||
local ins,rem=table.insert,table.remove
|
||||
@@ -17,184 +17,184 @@ local yield=coroutine.yield
|
||||
|
||||
local dirCount={1,1,3,3,3,0,1}
|
||||
local FCL={
|
||||
[1]={
|
||||
{{11},{11,2},{1},{},{2},{2,2},{12,1},{12}},
|
||||
{{11,4},{11,3},{1,4},{4},{3},{2,3},{2,2,3},{12,4},{12,3}},
|
||||
},
|
||||
[3]={
|
||||
{{11},{11,2},{1},{},{2},{2,2},{12,1},{12}},
|
||||
{{3,11},{11,3},{11,2,3},{1,3},{3},{2,3},{2,2,3},{12,1,3},{12,3}},
|
||||
{{11,5},{11,2,5},{1,5},{5},{2,5},{2,2,5},{12,1,5},{12,5}},
|
||||
{{11,4},{11,2,4},{1,4},{4},{2,4},{2,2,4},{12,1,4},{12,4},{4,12}},
|
||||
},
|
||||
[6]={
|
||||
{{11},{11,2},{1,1},{1},{},{2},{2,2},{12,1},{12}},
|
||||
},
|
||||
[7]={
|
||||
{{11},{11,2},{1},{},{2},{12,1},{12}},
|
||||
{{4,11},{11,4},{11,3},{1,4},{4},{3},{2,3},{12,4},{12,3},{3,12}},
|
||||
},
|
||||
[1]={
|
||||
{{11},{11,2},{1},{},{2},{2,2},{12,1},{12}},
|
||||
{{11,4},{11,3},{1,4},{4},{3},{2,3},{2,2,3},{12,4},{12,3}},
|
||||
},
|
||||
[3]={
|
||||
{{11},{11,2},{1},{},{2},{2,2},{12,1},{12}},
|
||||
{{3,11},{11,3},{11,2,3},{1,3},{3},{2,3},{2,2,3},{12,1,3},{12,3}},
|
||||
{{11,5},{11,2,5},{1,5},{5},{2,5},{2,2,5},{12,1,5},{12,5}},
|
||||
{{11,4},{11,2,4},{1,4},{4},{2,4},{2,2,4},{12,1,4},{12,4},{4,12}},
|
||||
},
|
||||
[6]={
|
||||
{{11},{11,2},{1,1},{1},{},{2},{2,2},{12,1},{12}},
|
||||
},
|
||||
[7]={
|
||||
{{11},{11,2},{1},{},{2},{12,1},{12}},
|
||||
{{4,11},{11,4},{11,3},{1,4},{4},{3},{2,3},{12,4},{12,3},{3,12}},
|
||||
},
|
||||
}FCL[2],FCL[4],FCL[5]=FCL[1],FCL[3],FCL[3]
|
||||
local LclearScore={[0]=0,-200,-150,-100,200}
|
||||
local HclearScore={[0]=0,100,140,200,500}
|
||||
local function _ifoverlapAI(f,bk,x,y)
|
||||
for i=1,#bk do for j=1,#bk[1]do
|
||||
if f[y+i-1]and bk[i][j]and f[y+i-1][x+j-1]>0 then return true end
|
||||
end end
|
||||
for i=1,#bk do for j=1,#bk[1]do
|
||||
if f[y+i-1]and bk[i][j]and f[y+i-1][x+j-1]>0 then return true end
|
||||
end end
|
||||
end
|
||||
local discardRow=FREEROW.discard
|
||||
local getRow=FREEROW.get
|
||||
local function _resetField(f0,f,start)
|
||||
for _=#f,start,-1 do
|
||||
discardRow(f[_])
|
||||
f[_]=nil
|
||||
end
|
||||
for i=start,#f0 do
|
||||
f[i]=getRow(0)
|
||||
for j=1,10 do
|
||||
f[i][j]=f0[i][j]
|
||||
end
|
||||
end
|
||||
for _=#f,start,-1 do
|
||||
discardRow(f[_])
|
||||
f[_]=nil
|
||||
end
|
||||
for i=start,#f0 do
|
||||
f[i]=getRow(0)
|
||||
for j=1,10 do
|
||||
f[i][j]=f0[i][j]
|
||||
end
|
||||
end
|
||||
end
|
||||
local function _getScore(field,cb,cy)
|
||||
local score=0
|
||||
local highest=0
|
||||
local height=getRow(0)
|
||||
local clear=0
|
||||
local hole=0
|
||||
local score=0
|
||||
local highest=0
|
||||
local height=getRow(0)
|
||||
local clear=0
|
||||
local hole=0
|
||||
|
||||
for i=cy+#cb-1,cy,-1 do
|
||||
for j=1,10 do
|
||||
if field[i][j]==0 then goto CONTINUE_notFull end
|
||||
end
|
||||
discardRow(rem(field,i))
|
||||
clear=clear+1
|
||||
::CONTINUE_notFull::
|
||||
end
|
||||
if #field==0 then return 1e99 end--PC
|
||||
for x=1,10 do
|
||||
local h=#field
|
||||
while field[h][x]==0 and h>1 do
|
||||
h=h-1
|
||||
end
|
||||
height[x]=h
|
||||
if x>3 and x<8 and h>highest then highest=h end
|
||||
if h>1 then
|
||||
for h1=h-1,1,-1 do
|
||||
if field[h1][x]==0 then
|
||||
hole=hole+1
|
||||
if hole==5 then break end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
local sdh=0
|
||||
local h1,mh1=0,0
|
||||
for x=1,9 do
|
||||
local dh=abs(height[x]-height[x+1])
|
||||
if dh==1 then
|
||||
h1=h1+1
|
||||
if h1>mh1 then mh1=h1 end
|
||||
else
|
||||
h1=0
|
||||
end
|
||||
sdh=sdh+min(dh^1.6,20)
|
||||
end
|
||||
discardRow(height)
|
||||
score=
|
||||
-#field*30
|
||||
-#cb*15
|
||||
+(#field>10 and
|
||||
HclearScore[clear]--Clearing
|
||||
-hole*70--Hole
|
||||
-cy*50--Height
|
||||
-sdh--Sum of DeltaH
|
||||
or
|
||||
LclearScore[clear]
|
||||
-hole*100
|
||||
-cy*40
|
||||
-sdh*3
|
||||
)
|
||||
if #field>6 then score=score-highest*5+20 end
|
||||
if mh1>3 then score=score-20-mh1*30 end
|
||||
return score
|
||||
for i=cy+#cb-1,cy,-1 do
|
||||
for j=1,10 do
|
||||
if field[i][j]==0 then goto CONTINUE_notFull end
|
||||
end
|
||||
discardRow(rem(field,i))
|
||||
clear=clear+1
|
||||
::CONTINUE_notFull::
|
||||
end
|
||||
if #field==0 then return 1e99 end--PC
|
||||
for x=1,10 do
|
||||
local h=#field
|
||||
while field[h][x]==0 and h>1 do
|
||||
h=h-1
|
||||
end
|
||||
height[x]=h
|
||||
if x>3 and x<8 and h>highest then highest=h end
|
||||
if h>1 then
|
||||
for h1=h-1,1,-1 do
|
||||
if field[h1][x]==0 then
|
||||
hole=hole+1
|
||||
if hole==5 then break end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
local sdh=0
|
||||
local h1,mh1=0,0
|
||||
for x=1,9 do
|
||||
local dh=abs(height[x]-height[x+1])
|
||||
if dh==1 then
|
||||
h1=h1+1
|
||||
if h1>mh1 then mh1=h1 end
|
||||
else
|
||||
h1=0
|
||||
end
|
||||
sdh=sdh+min(dh^1.6,20)
|
||||
end
|
||||
discardRow(height)
|
||||
score=
|
||||
-#field*30
|
||||
-#cb*15
|
||||
+(#field>10 and
|
||||
HclearScore[clear]--Clearing
|
||||
-hole*70--Hole
|
||||
-cy*50--Height
|
||||
-sdh--Sum of DeltaH
|
||||
or
|
||||
LclearScore[clear]
|
||||
-hole*100
|
||||
-cy*40
|
||||
-sdh*3
|
||||
)
|
||||
if #field>6 then score=score-highest*5+20 end
|
||||
if mh1>3 then score=score-20-mh1*30 end
|
||||
return score
|
||||
end
|
||||
|
||||
local bot_9s={}
|
||||
function bot_9s.thread(bot)
|
||||
local P,data,keys=bot.P,bot.data,bot.keys
|
||||
while true do
|
||||
--Thinking
|
||||
yield()
|
||||
local Tfield={}--Test field
|
||||
local best={x=1,dir=0,hold=false,score=-1e99}--Best method
|
||||
local field_org=P.field
|
||||
for i=1,#field_org do
|
||||
Tfield[i]=getRow(0)
|
||||
for j=1,10 do
|
||||
Tfield[i][j]=field_org[i][j]
|
||||
end
|
||||
end
|
||||
local P,data,keys=bot.P,bot.data,bot.keys
|
||||
while true do
|
||||
--Thinking
|
||||
yield()
|
||||
local Tfield={}--Test field
|
||||
local best={x=1,dir=0,hold=false,score=-1e99}--Best method
|
||||
local field_org=P.field
|
||||
for i=1,#field_org do
|
||||
Tfield[i]=getRow(0)
|
||||
for j=1,10 do
|
||||
Tfield[i][j]=field_org[i][j]
|
||||
end
|
||||
end
|
||||
|
||||
for ifhold=0,data.hold and P.gameEnv.holdCount>0 and 1 or 0 do
|
||||
--Get block id
|
||||
local bn
|
||||
if ifhold==0 then
|
||||
bn=P.cur and P.cur.id
|
||||
else
|
||||
bn=P.holdQueue[1]and P.holdQueue[1].id or P.nextQueue[1]and P.nextQueue[1].id
|
||||
end
|
||||
if bn then
|
||||
for dir=0,dirCount[bn]do--Each dir
|
||||
local cb=BLOCKS[bn][dir]
|
||||
for cx=1,11-#cb[1]do--Each pos
|
||||
local cy=#Tfield+1
|
||||
for ifhold=0,data.hold and P.gameEnv.holdCount>0 and 1 or 0 do
|
||||
--Get block id
|
||||
local bn
|
||||
if ifhold==0 then
|
||||
bn=P.cur and P.cur.id
|
||||
else
|
||||
bn=P.holdQueue[1]and P.holdQueue[1].id or P.nextQueue[1]and P.nextQueue[1].id
|
||||
end
|
||||
if bn then
|
||||
for dir=0,dirCount[bn]do--Each dir
|
||||
local cb=BLOCKS[bn][dir]
|
||||
for cx=1,11-#cb[1]do--Each pos
|
||||
local cy=#Tfield+1
|
||||
|
||||
--Move to bottom
|
||||
while cy>1 and not _ifoverlapAI(Tfield,cb,cx,cy-1)do
|
||||
cy=cy-1
|
||||
end
|
||||
--Move to bottom
|
||||
while cy>1 and not _ifoverlapAI(Tfield,cb,cx,cy-1)do
|
||||
cy=cy-1
|
||||
end
|
||||
|
||||
--Simulate lock
|
||||
for i=1,#cb do
|
||||
local y=cy+i-1
|
||||
if not Tfield[y]then Tfield[y]=getRow(0)end
|
||||
local L=Tfield[y]
|
||||
for j=1,#cb[1]do
|
||||
if cb[i][j]then
|
||||
L[cx+j-1]=1
|
||||
end
|
||||
end
|
||||
end
|
||||
local score=_getScore(Tfield,cb,cy)
|
||||
if score>best.score then
|
||||
best={bn=bn,x=cx,dir=dir,hold=ifhold==1,score=score}
|
||||
end
|
||||
_resetField(field_org,Tfield,cy)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
if not best.bn then return 1 end
|
||||
--Simulate lock
|
||||
for i=1,#cb do
|
||||
local y=cy+i-1
|
||||
if not Tfield[y]then Tfield[y]=getRow(0)end
|
||||
local L=Tfield[y]
|
||||
for j=1,#cb[1]do
|
||||
if cb[i][j]then
|
||||
L[cx+j-1]=1
|
||||
end
|
||||
end
|
||||
end
|
||||
local score=_getScore(Tfield,cb,cy)
|
||||
if score>best.score then
|
||||
best={bn=bn,x=cx,dir=dir,hold=ifhold==1,score=score}
|
||||
end
|
||||
_resetField(field_org,Tfield,cy)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
if not best.bn then return 1 end
|
||||
|
||||
--Release cache
|
||||
while #Tfield>0 do
|
||||
discardRow(rem(Tfield,1))
|
||||
end
|
||||
if best.hold then
|
||||
ins(keys,8)
|
||||
end
|
||||
local l=FCL[best.bn][best.dir+1][best.x]
|
||||
for i=1,#l do
|
||||
ins(keys,l[i])
|
||||
end
|
||||
ins(keys,6)
|
||||
--Release cache
|
||||
while #Tfield>0 do
|
||||
discardRow(rem(Tfield,1))
|
||||
end
|
||||
if best.hold then
|
||||
ins(keys,8)
|
||||
end
|
||||
local l=FCL[best.bn][best.dir+1][best.x]
|
||||
for i=1,#l do
|
||||
ins(keys,l[i])
|
||||
end
|
||||
ins(keys,6)
|
||||
|
||||
--Check if time to change target
|
||||
yield()
|
||||
if P.aiRND:random()<.00126 then
|
||||
P:changeAtkMode(P.aiRND:random()<.85 and 1 or #P.atker>3 and 4 or P.aiRND:random()<.3 and 2 or 3)
|
||||
end
|
||||
end
|
||||
--Check if time to change target
|
||||
yield()
|
||||
if P.aiRND:random()<.00126 then
|
||||
P:changeAtkMode(P.aiRND:random()<.85 and 1 or #P.atker>3 and 4 or P.aiRND:random()<.3 and 2 or 3)
|
||||
end
|
||||
end
|
||||
end
|
||||
return bot_9s
|
||||
@@ -1,55 +1,55 @@
|
||||
--[[ControlID:
|
||||
1~5:mL,mR,rR,rL,rF,
|
||||
6~10:hD,sD,H,A,R,
|
||||
11~13:LL,RR,DD
|
||||
1~5:mL,mR,rR,rL,rF,
|
||||
6~10:hD,sD,H,A,R,
|
||||
11~13:LL,RR,DD
|
||||
]]
|
||||
local ins,rem=table.insert,table.remove
|
||||
local yield=coroutine.yield
|
||||
local bot_cc={}
|
||||
function bot_cc:pushNewNext(id)
|
||||
self.bot:addNext(rem(self.nexts,1))
|
||||
ins(self.nexts,id)
|
||||
self.bot:addNext(rem(self.nexts,1))
|
||||
ins(self.nexts,id)
|
||||
end
|
||||
function bot_cc:thread()
|
||||
local P,keys=self.P,self.keys
|
||||
local ccBot=self.ccBot
|
||||
while true do
|
||||
--Start thinking
|
||||
yield()
|
||||
ccBot:think()
|
||||
local P,keys=self.P,self.keys
|
||||
local ccBot=self.ccBot
|
||||
while true do
|
||||
--Start thinking
|
||||
yield()
|
||||
ccBot:think()
|
||||
|
||||
--Poll keys
|
||||
local success,result,dest,hold,move
|
||||
repeat
|
||||
yield()
|
||||
success,result,dest,hold,move=ccBot:getMove()
|
||||
until not success or result==0 or result==2
|
||||
if not success then break end
|
||||
if result==2 then
|
||||
break
|
||||
elseif result==0 then
|
||||
dest[5],dest[6]=dest[1][1],dest[1][2]
|
||||
dest[7],dest[8]=dest[2][1],dest[2][2]
|
||||
dest[1],dest[2]=dest[3][1],dest[3][2]
|
||||
dest[3],dest[4]=dest[4][1],dest[4][2]
|
||||
P.AI_dest=dest
|
||||
if hold then keys[1]=8 end--Hold
|
||||
while move[1]do
|
||||
local m=rem(move,1)
|
||||
if m<4 then
|
||||
ins(keys,m+1)
|
||||
elseif not P.AIdata._20G then
|
||||
ins(keys,13)
|
||||
end
|
||||
end
|
||||
ins(keys,6)
|
||||
end
|
||||
--Poll keys
|
||||
local success,result,dest,hold,move
|
||||
repeat
|
||||
yield()
|
||||
success,result,dest,hold,move=ccBot:getMove()
|
||||
until not success or result==0 or result==2
|
||||
if not success then break end
|
||||
if result==2 then
|
||||
break
|
||||
elseif result==0 then
|
||||
dest[5],dest[6]=dest[1][1],dest[1][2]
|
||||
dest[7],dest[8]=dest[2][1],dest[2][2]
|
||||
dest[1],dest[2]=dest[3][1],dest[3][2]
|
||||
dest[3],dest[4]=dest[4][1],dest[4][2]
|
||||
P.AI_dest=dest
|
||||
if hold then keys[1]=8 end--Hold
|
||||
while move[1]do
|
||||
local m=rem(move,1)
|
||||
if m<4 then
|
||||
ins(keys,m+1)
|
||||
elseif not P.AIdata._20G then
|
||||
ins(keys,13)
|
||||
end
|
||||
end
|
||||
ins(keys,6)
|
||||
end
|
||||
|
||||
--Check if time to change target
|
||||
yield()
|
||||
if P.aiRND:random()<.00126 then
|
||||
P:changeAtkMode(P.aiRND:random()<.85 and 1 or #P.atker>3 and 4 or P.aiRND:random()<.3 and 2 or 3)
|
||||
end
|
||||
end
|
||||
--Check if time to change target
|
||||
yield()
|
||||
if P.aiRND:random()<.00126 then
|
||||
P:changeAtkMode(P.aiRND:random()<.85 and 1 or #P.atker>3 and 4 or P.aiRND:random()<.3 and 2 or 3)
|
||||
end
|
||||
end
|
||||
end
|
||||
return bot_cc
|
||||
@@ -1,35 +1,35 @@
|
||||
local ins,rem=table.insert,table.remove
|
||||
|
||||
local baseBot={
|
||||
pushNewNext=NULL,
|
||||
updateField=NULL,
|
||||
lockWrongPlace=NULL,
|
||||
switch20G=NULL,
|
||||
revive=NULL,
|
||||
pushNewNext=NULL,
|
||||
updateField=NULL,
|
||||
lockWrongPlace=NULL,
|
||||
switch20G=NULL,
|
||||
revive=NULL,
|
||||
}
|
||||
function baseBot.update(bot)
|
||||
local P=bot.P
|
||||
local keys=bot.keys
|
||||
if P.control and P.waiting==-1 then
|
||||
bot.delay=bot.delay-1
|
||||
if not keys[1]then
|
||||
if bot.runningThread then
|
||||
pcall(bot.runningThread)
|
||||
else
|
||||
P:act_hardDrop()
|
||||
end
|
||||
elseif bot.delay<=0 then
|
||||
bot.delay=bot.delay0*.5
|
||||
P:pressKey(keys[1])P:releaseKey(keys[1])
|
||||
rem(keys,1)
|
||||
end
|
||||
end
|
||||
local P=bot.P
|
||||
local keys=bot.keys
|
||||
if P.control and P.waiting==-1 then
|
||||
bot.delay=bot.delay-1
|
||||
if not keys[1]then
|
||||
if bot.runningThread then
|
||||
pcall(bot.runningThread)
|
||||
else
|
||||
P:act_hardDrop()
|
||||
end
|
||||
elseif bot.delay<=0 then
|
||||
bot.delay=bot.delay0*.5
|
||||
P:pressKey(keys[1])P:releaseKey(keys[1])
|
||||
rem(keys,1)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
local function _undefMethod(self,k)
|
||||
print("Undefined method: "..k)
|
||||
self[k]=NULL
|
||||
return NULL
|
||||
print("Undefined method: "..k)
|
||||
self[k]=NULL
|
||||
return NULL
|
||||
end
|
||||
local botMeta={__index=_undefMethod}
|
||||
|
||||
@@ -37,75 +37,75 @@ local BOT={}
|
||||
|
||||
local AISpeed={60,50,40,30,20,14,10,6,4,3}
|
||||
function BOT.template(arg)
|
||||
if arg.type=='CC'then
|
||||
if not arg.hold then arg.hold=false else arg.hold=true end
|
||||
return{
|
||||
type='CC',
|
||||
next=arg.next,
|
||||
hold=arg.hold,
|
||||
delay=AISpeed[arg.speedLV],
|
||||
["args.node"]=arg.node,
|
||||
}
|
||||
elseif arg.type=='9S'then
|
||||
return{
|
||||
type='9S',
|
||||
delay=math.floor(AISpeed[arg.speedLV]),
|
||||
hold=arg.hold,
|
||||
}
|
||||
end
|
||||
if arg.type=='CC'then
|
||||
if not arg.hold then arg.hold=false else arg.hold=true end
|
||||
return{
|
||||
type='CC',
|
||||
next=arg.next,
|
||||
hold=arg.hold,
|
||||
delay=AISpeed[arg.speedLV],
|
||||
["args.node"]=arg.node,
|
||||
}
|
||||
elseif arg.type=='9S'then
|
||||
return{
|
||||
type='9S',
|
||||
delay=math.floor(AISpeed[arg.speedLV]),
|
||||
hold=arg.hold,
|
||||
}
|
||||
end
|
||||
end
|
||||
|
||||
function BOT.new(P,data)
|
||||
local bot={P=P,data=data}
|
||||
if data.type=="CC"then
|
||||
-- P:setRS('SRS')
|
||||
-- bot.keys={}
|
||||
-- bot.nexts={}
|
||||
-- bot.delay=data.delay
|
||||
-- bot.delay0=data.delay
|
||||
-- if P.gameEnv.holdCount and P.gameEnv.holdCount>1 then P:setHold(1)end
|
||||
local bot={P=P,data=data}
|
||||
if data.type=="CC"then
|
||||
-- P:setRS('SRS')
|
||||
-- bot.keys={}
|
||||
-- bot.nexts={}
|
||||
-- bot.delay=data.delay
|
||||
-- bot.delay0=data.delay
|
||||
-- if P.gameEnv.holdCount and P.gameEnv.holdCount>1 then P:setHold(1)end
|
||||
|
||||
-- local cc=require"parts.bot.cc_wrapper"
|
||||
-- local opt,wei=cc.getConf()
|
||||
-- wei:fastWeights()
|
||||
-- opt:setHold(P.AIdata.hold)
|
||||
-- opt:set20G(P.AIdata._20G)
|
||||
-- opt:setBag(P.AIdata.bag=='bag')
|
||||
-- opt:setNode(P.AIdata.node)
|
||||
-- bot.ccBot=cc.new(opt,wei)
|
||||
-- local cc_lua=require"parts.bot.bot_cc"
|
||||
-- setmetatable(bot,{__index=function(self,k)
|
||||
-- if self.ccBot[k]then
|
||||
-- self.ccBot[k](self.ccBot)
|
||||
-- elseif cc_lua[k]then
|
||||
-- cc_lua[k](self)
|
||||
-- elseif baseBot[k]then
|
||||
-- baseBot[k](self)
|
||||
-- end
|
||||
-- end})
|
||||
-- local cc=require"parts.bot.cc_wrapper"
|
||||
-- local opt,wei=cc.getConf()
|
||||
-- wei:fastWeights()
|
||||
-- opt:setHold(P.AIdata.hold)
|
||||
-- opt:set20G(P.AIdata._20G)
|
||||
-- opt:setBag(P.AIdata.bag=='bag')
|
||||
-- opt:setNode(P.AIdata.node)
|
||||
-- bot.ccBot=cc.new(opt,wei)
|
||||
-- local cc_lua=require"parts.bot.bot_cc"
|
||||
-- setmetatable(bot,{__index=function(self,k)
|
||||
-- if self.ccBot[k]then
|
||||
-- self.ccBot[k](self.ccBot)
|
||||
-- elseif cc_lua[k]then
|
||||
-- cc_lua[k](self)
|
||||
-- elseif baseBot[k]then
|
||||
-- baseBot[k](self)
|
||||
-- end
|
||||
-- end})
|
||||
|
||||
-- for i,B in next,P.gameEnv.nextQueue do
|
||||
-- if i<=data.next then
|
||||
-- bot:addNext(B.id)
|
||||
-- else
|
||||
-- ins(bot.nexts,B.id)
|
||||
-- end
|
||||
-- end
|
||||
-- bot.runningThread=coroutine.wrap(cc_lua.thread)
|
||||
-- bot.runningThread(bot)
|
||||
setmetatable(bot,botMeta)
|
||||
elseif data.type=="9S"or true then--9s or else
|
||||
TABLE.cover(baseBot,bot)
|
||||
TABLE.cover(require"parts.bot.bot_9s",bot)
|
||||
P:setRS('TRS')
|
||||
bot.keys={}
|
||||
bot.delay=data.delay
|
||||
bot.delay0=data.delay
|
||||
bot.runningThread=coroutine.wrap(bot.thread)
|
||||
bot.runningThread(bot)
|
||||
setmetatable(bot,botMeta)
|
||||
end
|
||||
return bot
|
||||
-- for i,B in next,P.gameEnv.nextQueue do
|
||||
-- if i<=data.next then
|
||||
-- bot:addNext(B.id)
|
||||
-- else
|
||||
-- ins(bot.nexts,B.id)
|
||||
-- end
|
||||
-- end
|
||||
-- bot.runningThread=coroutine.wrap(cc_lua.thread)
|
||||
-- bot.runningThread(bot)
|
||||
setmetatable(bot,botMeta)
|
||||
elseif data.type=="9S"or true then--9s or else
|
||||
TABLE.cover(baseBot,bot)
|
||||
TABLE.cover(require"parts.bot.bot_9s",bot)
|
||||
P:setRS('TRS')
|
||||
bot.keys={}
|
||||
bot.delay=data.delay
|
||||
bot.delay0=data.delay
|
||||
bot.runningThread=coroutine.wrap(bot.thread)
|
||||
bot.runningThread(bot)
|
||||
setmetatable(bot,botMeta)
|
||||
end
|
||||
return bot
|
||||
end
|
||||
|
||||
return BOT
|
||||
@@ -1,43 +1,43 @@
|
||||
return{
|
||||
version=VERSION.code,
|
||||
version=VERSION.code,
|
||||
|
||||
--Basic
|
||||
drop=1e99,
|
||||
lock=1e99,
|
||||
wait=0,
|
||||
fall=0,
|
||||
--Basic
|
||||
drop=1e99,
|
||||
lock=1e99,
|
||||
wait=0,
|
||||
fall=0,
|
||||
|
||||
--Control
|
||||
nextCount=6,
|
||||
holdCount=1,
|
||||
infHold=true,
|
||||
phyHold=false,
|
||||
--Control
|
||||
nextCount=6,
|
||||
holdCount=1,
|
||||
infHold=true,
|
||||
phyHold=false,
|
||||
|
||||
--Visual
|
||||
bone=false,
|
||||
--Visual
|
||||
bone=false,
|
||||
|
||||
--Rule
|
||||
sequence='bag',
|
||||
fieldH=20,
|
||||
heightLimit=1e99,
|
||||
bufferLimit=1e99,
|
||||
--Rule
|
||||
sequence='bag',
|
||||
fieldH=20,
|
||||
heightLimit=1e99,
|
||||
bufferLimit=1e99,
|
||||
|
||||
ospin=true,
|
||||
fineKill=false,
|
||||
b2bKill=false,
|
||||
easyFresh=true,
|
||||
deepDrop=false,
|
||||
visible='show',
|
||||
freshLimit=1e99,
|
||||
ospin=true,
|
||||
fineKill=false,
|
||||
b2bKill=false,
|
||||
easyFresh=true,
|
||||
deepDrop=false,
|
||||
visible='show',
|
||||
freshLimit=1e99,
|
||||
|
||||
|
||||
opponent="X",
|
||||
life=0,
|
||||
pushSpeed=3,
|
||||
garbageSpeed=1,
|
||||
missionKill=false,
|
||||
opponent="X",
|
||||
life=0,
|
||||
pushSpeed=3,
|
||||
garbageSpeed=1,
|
||||
missionKill=false,
|
||||
|
||||
--Else
|
||||
bg='blockrain',
|
||||
bgm='hang out',
|
||||
--Else
|
||||
bg='blockrain',
|
||||
bgm='hang out',
|
||||
}
|
||||
|
||||
698
parts/data.lua
698
parts/data.lua
@@ -8,423 +8,423 @@ local DATA={}
|
||||
--Sep symbol: 33 (!)
|
||||
--Safe char: 34~126
|
||||
--[[
|
||||
Count: 34~96
|
||||
Block: 97~125
|
||||
Encode: A[B] sequence, A = block ID, B = repeat times, no B means do not repeat.
|
||||
Example: "abcdefg" is [SZJLTOI], "a^aDb)" is [Z*63,Z*37,S*10]
|
||||
Count: 34~96
|
||||
Block: 97~125
|
||||
Encode: A[B] sequence, A = block ID, B = repeat times, no B means do not repeat.
|
||||
Example: "abcdefg" is [SZJLTOI], "a^aDb)" is [Z*63,Z*37,S*10]
|
||||
]]
|
||||
function DATA.copySequence()
|
||||
local str=""
|
||||
local str=""
|
||||
|
||||
local count=1
|
||||
for i=1,#BAG+1 do
|
||||
if BAG[i+1]~=BAG[i]or count==64 then
|
||||
str=str..char(96+BAG[i])
|
||||
if count>1 then
|
||||
str=str..char(32+count)
|
||||
count=1
|
||||
end
|
||||
else
|
||||
count=count+1
|
||||
end
|
||||
end
|
||||
local count=1
|
||||
for i=1,#BAG+1 do
|
||||
if BAG[i+1]~=BAG[i]or count==64 then
|
||||
str=str..char(96+BAG[i])
|
||||
if count>1 then
|
||||
str=str..char(32+count)
|
||||
count=1
|
||||
end
|
||||
else
|
||||
count=count+1
|
||||
end
|
||||
end
|
||||
|
||||
return str
|
||||
return str
|
||||
end
|
||||
function DATA.pasteSequence(str)
|
||||
TABLE.cut(BAG)
|
||||
local b,reg
|
||||
for i=1,#str do
|
||||
b=byte(str,i)
|
||||
if not reg then
|
||||
if b>=97 and b<=125 then
|
||||
reg=b-96
|
||||
else
|
||||
return
|
||||
end
|
||||
else
|
||||
if b>=97 and b<=125 then
|
||||
ins(BAG,reg)
|
||||
reg=b-96
|
||||
elseif b>=34 and b<=96 then
|
||||
for _=1,b-32 do
|
||||
ins(BAG,reg)
|
||||
end
|
||||
reg=false
|
||||
end
|
||||
end
|
||||
end
|
||||
if reg then ins(BAG,reg)end
|
||||
return true
|
||||
TABLE.cut(BAG)
|
||||
local b,reg
|
||||
for i=1,#str do
|
||||
b=byte(str,i)
|
||||
if not reg then
|
||||
if b>=97 and b<=125 then
|
||||
reg=b-96
|
||||
else
|
||||
return
|
||||
end
|
||||
else
|
||||
if b>=97 and b<=125 then
|
||||
ins(BAG,reg)
|
||||
reg=b-96
|
||||
elseif b>=34 and b<=96 then
|
||||
for _=1,b-32 do
|
||||
ins(BAG,reg)
|
||||
end
|
||||
reg=false
|
||||
end
|
||||
end
|
||||
end
|
||||
if reg then ins(BAG,reg)end
|
||||
return true
|
||||
end
|
||||
|
||||
function DATA.newBoard(f)--Generate a new board
|
||||
if f then
|
||||
return TABLE.shift(f)
|
||||
else
|
||||
local F={}
|
||||
for i=1,20 do F[i]={0,0,0,0,0,0,0,0,0,0}end
|
||||
return F
|
||||
end
|
||||
if f then
|
||||
return TABLE.shift(f)
|
||||
else
|
||||
local F={}
|
||||
for i=1,20 do F[i]={0,0,0,0,0,0,0,0,0,0}end
|
||||
return F
|
||||
end
|
||||
end
|
||||
function DATA.copyBoard(page)--Copy the [page] board
|
||||
local F=FIELD[page or 1]
|
||||
local str=""
|
||||
local H=0
|
||||
local F=FIELD[page or 1]
|
||||
local str=""
|
||||
local H=0
|
||||
|
||||
for y=20,1,-1 do
|
||||
for x=1,10 do
|
||||
if F[y][x]~=0 then
|
||||
H=y
|
||||
goto BREAK_topFound
|
||||
end
|
||||
end
|
||||
end
|
||||
::BREAK_topFound::
|
||||
for y=20,1,-1 do
|
||||
for x=1,10 do
|
||||
if F[y][x]~=0 then
|
||||
H=y
|
||||
goto BREAK_topFound
|
||||
end
|
||||
end
|
||||
end
|
||||
::BREAK_topFound::
|
||||
|
||||
--Encode field
|
||||
for y=1,H do
|
||||
local S=""
|
||||
local L=F[y]
|
||||
for x=1,10 do
|
||||
S=S..char(L[x]+1)
|
||||
end
|
||||
str=str..S
|
||||
end
|
||||
return STRING.packBin(str)
|
||||
--Encode field
|
||||
for y=1,H do
|
||||
local S=""
|
||||
local L=F[y]
|
||||
for x=1,10 do
|
||||
S=S..char(L[x]+1)
|
||||
end
|
||||
str=str..S
|
||||
end
|
||||
return STRING.packBin(str)
|
||||
end
|
||||
function DATA.copyBoards()
|
||||
local out={}
|
||||
for i=1,#FIELD do
|
||||
out[i]=DATA.copyBoard(i)
|
||||
end
|
||||
return table.concat(out,"!")
|
||||
local out={}
|
||||
for i=1,#FIELD do
|
||||
out[i]=DATA.copyBoard(i)
|
||||
end
|
||||
return table.concat(out,"!")
|
||||
end
|
||||
function DATA.pasteBoard(str,page)--Paste [str] data to [page] board
|
||||
if not page then page=1 end
|
||||
if not FIELD[page]then FIELD[page]=DATA.newBoard()end
|
||||
local F=FIELD[page]
|
||||
if not page then page=1 end
|
||||
if not FIELD[page]then FIELD[page]=DATA.newBoard()end
|
||||
local F=FIELD[page]
|
||||
|
||||
--Decode
|
||||
str=STRING.unpackBin(str)
|
||||
if not str then return end
|
||||
--Decode
|
||||
str=STRING.unpackBin(str)
|
||||
if not str then return end
|
||||
|
||||
local fX,fY=1,1--*ptr for Field(r*10+(c-1))
|
||||
local p=1
|
||||
while true do
|
||||
local b=byte(str,p)--1byte
|
||||
local fX,fY=1,1--*ptr for Field(r*10+(c-1))
|
||||
local p=1
|
||||
while true do
|
||||
local b=byte(str,p)--1byte
|
||||
|
||||
--Str end
|
||||
if not b then
|
||||
if fX~=1 then
|
||||
return
|
||||
else
|
||||
break
|
||||
end
|
||||
end
|
||||
--Str end
|
||||
if not b then
|
||||
if fX~=1 then
|
||||
return
|
||||
else
|
||||
break
|
||||
end
|
||||
end
|
||||
|
||||
local id=b%32-1--Block id
|
||||
if id>26 then return end--Illegal blockid
|
||||
b=int(b/32)--Mode id
|
||||
local id=b%32-1--Block id
|
||||
if id>26 then return end--Illegal blockid
|
||||
b=int(b/32)--Mode id
|
||||
|
||||
F[fY][fX]=id
|
||||
if fX<10 then
|
||||
fX=fX+1
|
||||
else
|
||||
fY=fY+1
|
||||
if fY>20 then break end
|
||||
fX=1
|
||||
end
|
||||
p=p+1
|
||||
end
|
||||
F[fY][fX]=id
|
||||
if fX<10 then
|
||||
fX=fX+1
|
||||
else
|
||||
fY=fY+1
|
||||
if fY>20 then break end
|
||||
fX=1
|
||||
end
|
||||
p=p+1
|
||||
end
|
||||
|
||||
for y=fY,20 do
|
||||
for x=1,10 do
|
||||
F[y][x]=0
|
||||
end
|
||||
end
|
||||
for y=fY,20 do
|
||||
for x=1,10 do
|
||||
F[y][x]=0
|
||||
end
|
||||
end
|
||||
|
||||
return true
|
||||
return true
|
||||
end
|
||||
|
||||
--[[
|
||||
Mission: 34~114
|
||||
Count: 115~126
|
||||
Encode: [A] or [AB] sequence, A = mission ID, B = repeat times, no B means do not repeat.
|
||||
Mission: 34~114
|
||||
Count: 115~126
|
||||
Encode: [A] or [AB] sequence, A = mission ID, B = repeat times, no B means do not repeat.
|
||||
|
||||
_1=01,_2=02,_3=03,_4=04,
|
||||
A1=05,A2=06,A3=07,A4=08,
|
||||
PC=09,
|
||||
Z1=11,Z2=12,Z3=13,
|
||||
S1=21,S2=22,S3=23,
|
||||
J1=31,J2=32,J3=33,
|
||||
L1=41,L2=42,L3=43,
|
||||
T1=51,T2=52,T3=53,
|
||||
O1=61,O2=62,O3=63,O4=64,
|
||||
I1=71,I2=72,I3=73,I4=74,
|
||||
_1=01,_2=02,_3=03,_4=04,
|
||||
A1=05,A2=06,A3=07,A4=08,
|
||||
PC=09,
|
||||
Z1=11,Z2=12,Z3=13,
|
||||
S1=21,S2=22,S3=23,
|
||||
J1=31,J2=32,J3=33,
|
||||
L1=41,L2=42,L3=43,
|
||||
T1=51,T2=52,T3=53,
|
||||
O1=61,O2=62,O3=63,O4=64,
|
||||
I1=71,I2=72,I3=73,I4=74,
|
||||
]]
|
||||
function DATA.copyMission()
|
||||
local _
|
||||
local str=""
|
||||
local _
|
||||
local str=""
|
||||
|
||||
local count=1
|
||||
for i=1,#MISSION+1 do
|
||||
if MISSION[i+1]~=MISSION[i]or count==13 then
|
||||
_=33+MISSION[i]
|
||||
str=str..char(_)
|
||||
if count>1 then
|
||||
str=str..char(113+count)
|
||||
count=1
|
||||
end
|
||||
else
|
||||
count=count+1
|
||||
end
|
||||
end
|
||||
local count=1
|
||||
for i=1,#MISSION+1 do
|
||||
if MISSION[i+1]~=MISSION[i]or count==13 then
|
||||
_=33+MISSION[i]
|
||||
str=str..char(_)
|
||||
if count>1 then
|
||||
str=str..char(113+count)
|
||||
count=1
|
||||
end
|
||||
else
|
||||
count=count+1
|
||||
end
|
||||
end
|
||||
|
||||
return str
|
||||
return str
|
||||
end
|
||||
function DATA.pasteMission(str)
|
||||
local b
|
||||
TABLE.cut(MISSION)
|
||||
local reg
|
||||
for i=1,#str do
|
||||
b=byte(str,i)
|
||||
if not reg then
|
||||
if b>=34 and b<=114 then
|
||||
reg=b-33
|
||||
else
|
||||
return
|
||||
end
|
||||
else
|
||||
if b>=34 and b<=114 then
|
||||
if missionEnum[reg]then
|
||||
ins(MISSION,reg)
|
||||
reg=b-33
|
||||
else
|
||||
TABLE.cut(MISSION)
|
||||
return
|
||||
end
|
||||
elseif b>=115 and b<=126 then
|
||||
for _=1,b-113 do
|
||||
ins(MISSION,reg)
|
||||
end
|
||||
reg=false
|
||||
end
|
||||
end
|
||||
end
|
||||
if reg then ins(MISSION,reg)end
|
||||
return true
|
||||
local b
|
||||
TABLE.cut(MISSION)
|
||||
local reg
|
||||
for i=1,#str do
|
||||
b=byte(str,i)
|
||||
if not reg then
|
||||
if b>=34 and b<=114 then
|
||||
reg=b-33
|
||||
else
|
||||
return
|
||||
end
|
||||
else
|
||||
if b>=34 and b<=114 then
|
||||
if missionEnum[reg]then
|
||||
ins(MISSION,reg)
|
||||
reg=b-33
|
||||
else
|
||||
TABLE.cut(MISSION)
|
||||
return
|
||||
end
|
||||
elseif b>=115 and b<=126 then
|
||||
for _=1,b-113 do
|
||||
ins(MISSION,reg)
|
||||
end
|
||||
reg=false
|
||||
end
|
||||
end
|
||||
end
|
||||
if reg then ins(MISSION,reg)end
|
||||
return true
|
||||
end
|
||||
|
||||
function DATA.copyQuestArgs()
|
||||
local ENV=CUSTOMENV
|
||||
local str=""..
|
||||
ENV.holdCount..
|
||||
(ENV.ospin and"O"or"Z")..
|
||||
(ENV.missionKill and"M"or"Z")..
|
||||
ENV.sequence
|
||||
return str
|
||||
local ENV=CUSTOMENV
|
||||
local str=""..
|
||||
ENV.holdCount..
|
||||
(ENV.ospin and"O"or"Z")..
|
||||
(ENV.missionKill and"M"or"Z")..
|
||||
ENV.sequence
|
||||
return str
|
||||
end
|
||||
function DATA.pasteQuestArgs(str)
|
||||
if #str<4 then return end
|
||||
local ENV=CUSTOMENV
|
||||
ENV.holdCount= str:byte(1)-48
|
||||
ENV.ospin= str:byte(2)~=90
|
||||
ENV.missionKill= str:byte(3)~=90
|
||||
ENV.sequence= str:sub(4)
|
||||
return true
|
||||
if #str<4 then return end
|
||||
local ENV=CUSTOMENV
|
||||
ENV.holdCount= str:byte(1)-48
|
||||
ENV.ospin= str:byte(2)~=90
|
||||
ENV.missionKill=str:byte(3)~=90
|
||||
ENV.sequence= str:sub(4)
|
||||
return true
|
||||
end
|
||||
|
||||
--[[
|
||||
Replay file:
|
||||
a zlib-compressed json table
|
||||
Replay file:
|
||||
a zlib-compressed json table
|
||||
|
||||
Replay data format (table):
|
||||
{frame,event, frame,event, ...}
|
||||
Replay data format (table):
|
||||
{frame,event, frame,event, ...}
|
||||
|
||||
Replay data format (byte): (1 byte each period)
|
||||
dt, event, dt, event, ...
|
||||
all data range from 0 to 127
|
||||
large value will be encoded as 1xxxxxxx(high)-1xxxxxxx-...-0xxxxxxx(low)
|
||||
Replay data format (byte): (1 byte each period)
|
||||
dt, event, dt, event, ...
|
||||
all data range from 0 to 127
|
||||
large value will be encoded as 1xxxxxxx(high)-1xxxxxxx-...-0xxxxxxx(low)
|
||||
|
||||
Example (decoded):
|
||||
6,1, 20,-1, 0,2, 26,-2, 872,4, ...
|
||||
This means:
|
||||
Press key1 at 6f
|
||||
Release key1 at 26f (6+20)
|
||||
Press key2 at the same time (26+0)
|
||||
Release key 2 after 26 frame (26+26)
|
||||
Press key 4 after 872 frame (52+872)
|
||||
...
|
||||
Example (decoded):
|
||||
6,1, 20,-1, 0,2, 26,-2, 872,4, ...
|
||||
This means:
|
||||
Press key1 at 6f
|
||||
Release key1 at 26f (6+20)
|
||||
Press key2 at the same time (26+0)
|
||||
Release key 2 after 26 frame (26+26)
|
||||
Press key 4 after 872 frame (52+872)
|
||||
...
|
||||
]]
|
||||
function DATA.dumpRecording(list,ptr)
|
||||
local out=""
|
||||
local buffer,buffer2=""
|
||||
if not ptr then ptr=1 end
|
||||
local prevFrm=list[ptr-2]or 0
|
||||
while list[ptr]do
|
||||
--Flush buffer
|
||||
if #buffer>10 then
|
||||
out=out..buffer
|
||||
buffer=""
|
||||
end
|
||||
local out=""
|
||||
local buffer,buffer2=""
|
||||
if not ptr then ptr=1 end
|
||||
local prevFrm=list[ptr-2]or 0
|
||||
while list[ptr]do
|
||||
--Flush buffer
|
||||
if #buffer>10 then
|
||||
out=out..buffer
|
||||
buffer=""
|
||||
end
|
||||
|
||||
--Encode time
|
||||
local t=list[ptr]-prevFrm
|
||||
prevFrm=list[ptr]
|
||||
if t>=128 then
|
||||
buffer2=char(t%128)
|
||||
t=int(t/128)
|
||||
while t>=128 do
|
||||
buffer2=char(128+t%128)..buffer2
|
||||
t=int(t/128)
|
||||
end
|
||||
buffer=buffer..char(128+t)..buffer2
|
||||
else
|
||||
buffer=buffer..char(t)
|
||||
end
|
||||
--Encode time
|
||||
local t=list[ptr]-prevFrm
|
||||
prevFrm=list[ptr]
|
||||
if t>=128 then
|
||||
buffer2=char(t%128)
|
||||
t=int(t/128)
|
||||
while t>=128 do
|
||||
buffer2=char(128+t%128)..buffer2
|
||||
t=int(t/128)
|
||||
end
|
||||
buffer=buffer..char(128+t)..buffer2
|
||||
else
|
||||
buffer=buffer..char(t)
|
||||
end
|
||||
|
||||
--Encode event
|
||||
t=list[ptr+1]
|
||||
if t>=128 then
|
||||
buffer2=char(t%128)
|
||||
t=int(t/128)
|
||||
while t>=128 do
|
||||
buffer2=char(128+t%128)..buffer2
|
||||
t=int(t/128)
|
||||
end
|
||||
buffer=buffer..char(128+t)..buffer2
|
||||
else
|
||||
buffer=buffer..char(t)
|
||||
end
|
||||
--Encode event
|
||||
t=list[ptr+1]
|
||||
if t>=128 then
|
||||
buffer2=char(t%128)
|
||||
t=int(t/128)
|
||||
while t>=128 do
|
||||
buffer2=char(128+t%128)..buffer2
|
||||
t=int(t/128)
|
||||
end
|
||||
buffer=buffer..char(128+t)..buffer2
|
||||
else
|
||||
buffer=buffer..char(t)
|
||||
end
|
||||
|
||||
--Step
|
||||
ptr=ptr+2
|
||||
end
|
||||
return out..buffer,ptr
|
||||
--Step
|
||||
ptr=ptr+2
|
||||
end
|
||||
return out..buffer,ptr
|
||||
end
|
||||
function DATA.pumpRecording(str,L)
|
||||
local len=#str
|
||||
local p=1
|
||||
local len=#str
|
||||
local p=1
|
||||
|
||||
local curFrm=L[#L-1]or 0
|
||||
local code
|
||||
while p<=len do
|
||||
--Read delta time
|
||||
code=0
|
||||
local b=byte(str,p)
|
||||
while b>=128 do
|
||||
code=code*128+b-128
|
||||
p=p+1
|
||||
b=byte(str,p)
|
||||
end
|
||||
curFrm=curFrm+code*128+b
|
||||
L[#L+1]=curFrm
|
||||
p=p+1
|
||||
local curFrm=L[#L-1]or 0
|
||||
local code
|
||||
while p<=len do
|
||||
--Read delta time
|
||||
code=0
|
||||
local b=byte(str,p)
|
||||
while b>=128 do
|
||||
code=code*128+b-128
|
||||
p=p+1
|
||||
b=byte(str,p)
|
||||
end
|
||||
curFrm=curFrm+code*128+b
|
||||
L[#L+1]=curFrm
|
||||
p=p+1
|
||||
|
||||
local event=0
|
||||
b=byte(str,p)
|
||||
while b>=128 do
|
||||
event=event*128+b-128
|
||||
p=p+1
|
||||
b=byte(str,p)
|
||||
end
|
||||
L[#L+1]=event*128+b
|
||||
p=p+1
|
||||
end
|
||||
local event=0
|
||||
b=byte(str,p)
|
||||
while b>=128 do
|
||||
event=event*128+b-128
|
||||
p=p+1
|
||||
b=byte(str,p)
|
||||
end
|
||||
L[#L+1]=event*128+b
|
||||
p=p+1
|
||||
end
|
||||
end
|
||||
do--function DATA.saveReplay()
|
||||
local noRecList={"custom","solo","round","techmino"}
|
||||
local function _getModList()
|
||||
local res={}
|
||||
for _,v in next,GAME.mod do
|
||||
if v.sel>0 then
|
||||
ins(res,{v.no,v.sel})
|
||||
end
|
||||
end
|
||||
return res
|
||||
end
|
||||
function DATA.saveReplay()
|
||||
--Filtering modes that cannot be saved
|
||||
for _,v in next,noRecList do
|
||||
if GAME.curModeName:find(v)then
|
||||
MES.new('error',"Cannot save recording of this mode now!")
|
||||
return
|
||||
end
|
||||
end
|
||||
local noRecList={"custom","solo","round","techmino"}
|
||||
local function _getModList()
|
||||
local res={}
|
||||
for _,v in next,GAME.mod do
|
||||
if v.sel>0 then
|
||||
ins(res,{v.no,v.sel})
|
||||
end
|
||||
end
|
||||
return res
|
||||
end
|
||||
function DATA.saveReplay()
|
||||
--Filtering modes that cannot be saved
|
||||
for _,v in next,noRecList do
|
||||
if GAME.curModeName:find(v)then
|
||||
MES.new('error',"Cannot save recording of this mode now!")
|
||||
return
|
||||
end
|
||||
end
|
||||
|
||||
--Write file
|
||||
local fileName=os.date("replay/%Y_%m_%d_%H%M%S.rep")
|
||||
if not love.filesystem.getInfo(fileName)then
|
||||
love.filesystem.write(fileName,
|
||||
love.data.compress('string','zlib',
|
||||
JSON.encode{
|
||||
date=os.date("%Y/%m/%d %H:%M:%S"),
|
||||
mode=GAME.curModeName,
|
||||
version=VERSION.string,
|
||||
player=USERS.getUsername(USER.uid),
|
||||
seed=GAME.seed,
|
||||
setting=GAME.setting,
|
||||
mod=_getModList(),
|
||||
tasUsed=GAME.tasUsed,
|
||||
}.."\n"..
|
||||
DATA.dumpRecording(GAME.rep)
|
||||
)
|
||||
)
|
||||
ins(REPLAY,1,DATA.parseReplay(fileName))
|
||||
return true
|
||||
else
|
||||
MES.new('error',"Save failed: File already exists")
|
||||
end
|
||||
end
|
||||
--Write file
|
||||
local fileName=os.date("replay/%Y_%m_%d_%H%M%S.rep")
|
||||
if not love.filesystem.getInfo(fileName)then
|
||||
love.filesystem.write(fileName,
|
||||
love.data.compress('string','zlib',
|
||||
JSON.encode{
|
||||
date=os.date("%Y/%m/%d %H:%M:%S"),
|
||||
mode=GAME.curModeName,
|
||||
version=VERSION.string,
|
||||
player=USERS.getUsername(USER.uid),
|
||||
seed=GAME.seed,
|
||||
setting=GAME.setting,
|
||||
mod=_getModList(),
|
||||
tasUsed=GAME.tasUsed,
|
||||
}.."\n"..
|
||||
DATA.dumpRecording(GAME.rep)
|
||||
)
|
||||
)
|
||||
ins(REPLAY,1,DATA.parseReplay(fileName))
|
||||
return true
|
||||
else
|
||||
MES.new('error',"Save failed: File already exists")
|
||||
end
|
||||
end
|
||||
end
|
||||
function DATA.parseReplay(fileName,ifFull)
|
||||
local fileData
|
||||
--Read file
|
||||
fileData=love.filesystem.read(fileName)
|
||||
return DATA.parseReplayData(fileName,fileData,ifFull)
|
||||
local fileData
|
||||
--Read file
|
||||
fileData=love.filesystem.read(fileName)
|
||||
return DATA.parseReplayData(fileName,fileData,ifFull)
|
||||
end
|
||||
function DATA.parseReplayData(fileName,fileData,ifFull)
|
||||
local success,metaData,rep
|
||||
local success,metaData,rep
|
||||
|
||||
if not(fileData and #fileData>0)then goto BREAK_cannotParse end
|
||||
if not(fileData and #fileData>0)then goto BREAK_cannotParse end
|
||||
|
||||
--Decompress file
|
||||
success,fileData=pcall(love.data.decompress,'string','zlib',fileData)
|
||||
if not success then goto BREAK_cannotParse end
|
||||
--Decompress file
|
||||
success,fileData=pcall(love.data.decompress,'string','zlib',fileData)
|
||||
if not success then goto BREAK_cannotParse end
|
||||
|
||||
--Load metadata
|
||||
metaData,fileData=STRING.readLine(fileData)
|
||||
metaData=JSON.decode(metaData)
|
||||
if not metaData then goto BREAK_cannotParse end
|
||||
--Load metadata
|
||||
metaData,fileData=STRING.readLine(fileData)
|
||||
metaData=JSON.decode(metaData)
|
||||
if not metaData then goto BREAK_cannotParse end
|
||||
|
||||
--Convert ancient replays
|
||||
metaData.mode=oldModeNameTable[metaData.mode]or metaData.mode
|
||||
if not MODES[metaData.mode]then goto BREAK_cannotParse end
|
||||
--Convert ancient replays
|
||||
metaData.mode=oldModeNameTable[metaData.mode]or metaData.mode
|
||||
if not MODES[metaData.mode]then goto BREAK_cannotParse end
|
||||
|
||||
--Create replay object
|
||||
rep={
|
||||
fileName=fileName,
|
||||
available=true,
|
||||
--Create replay object
|
||||
rep={
|
||||
fileName=fileName,
|
||||
available=true,
|
||||
|
||||
date=metaData.date,
|
||||
mode=metaData.mode,
|
||||
version=metaData.version,
|
||||
player=metaData.player,
|
||||
date=metaData.date,
|
||||
mode=metaData.mode,
|
||||
version=metaData.version,
|
||||
player=metaData.player,
|
||||
|
||||
seed=metaData.seed,
|
||||
setting=metaData.setting,
|
||||
mod=metaData.mod,
|
||||
tasUsed=metaData.tasUsed,
|
||||
}
|
||||
if ifFull then rep.data=fileData end
|
||||
do return rep end
|
||||
seed=metaData.seed,
|
||||
setting=metaData.setting,
|
||||
mod=metaData.mod,
|
||||
tasUsed=metaData.tasUsed,
|
||||
}
|
||||
if ifFull then rep.data=fileData end
|
||||
do return rep end
|
||||
|
||||
--Create unavailable replay object
|
||||
::BREAK_cannotParse::
|
||||
return{
|
||||
fileName=fileName,
|
||||
available=false,
|
||||
}
|
||||
--Create unavailable replay object
|
||||
::BREAK_cannotParse::
|
||||
return{
|
||||
fileName=fileName,
|
||||
available=false,
|
||||
}
|
||||
end
|
||||
return DATA
|
||||
@@ -2,36 +2,36 @@ local FREEROW={}
|
||||
local L={}--Storage
|
||||
local len=0--Length
|
||||
function FREEROW.reset(num)
|
||||
if num<len then
|
||||
for i=len,num+1,-1 do
|
||||
L[i]=nil
|
||||
end
|
||||
elseif num>len then
|
||||
for i=len+1,num do
|
||||
L[i]={0,0,0,0,0,0,0,0,0,0,garbage=false}
|
||||
end
|
||||
end
|
||||
len=num
|
||||
if num<len then
|
||||
for i=len,num+1,-1 do
|
||||
L[i]=nil
|
||||
end
|
||||
elseif num>len then
|
||||
for i=len+1,num do
|
||||
L[i]={0,0,0,0,0,0,0,0,0,0,garbage=false}
|
||||
end
|
||||
end
|
||||
len=num
|
||||
end
|
||||
function FREEROW.get(val,ifGarbage)
|
||||
if len==0 then
|
||||
for i=1,10 do
|
||||
L[i]={0,0,0,0,0,0,0,0,0,0,garbage=false}
|
||||
end
|
||||
len=len+10
|
||||
end
|
||||
local t=L[len]
|
||||
for i=1,10 do t[i]=val end
|
||||
t.garbage=ifGarbage==true
|
||||
L[len]=nil
|
||||
len=len-1
|
||||
return t
|
||||
if len==0 then
|
||||
for i=1,10 do
|
||||
L[i]={0,0,0,0,0,0,0,0,0,0,garbage=false}
|
||||
end
|
||||
len=len+10
|
||||
end
|
||||
local t=L[len]
|
||||
for i=1,10 do t[i]=val end
|
||||
t.garbage=ifGarbage==true
|
||||
L[len]=nil
|
||||
len=len-1
|
||||
return t
|
||||
end
|
||||
function FREEROW.discard(t)
|
||||
len=len+1
|
||||
L[len]=t
|
||||
len=len+1
|
||||
L[len]=t
|
||||
end
|
||||
function FREEROW.getCount()
|
||||
return len
|
||||
return len
|
||||
end
|
||||
return FREEROW
|
||||
File diff suppressed because it is too large
Load Diff
@@ -1,151 +1,151 @@
|
||||
--Complex tables
|
||||
local function _disableKey(P,key)
|
||||
table.insert(P.gameEnv.keyCancel,key)
|
||||
table.insert(P.gameEnv.keyCancel,key)
|
||||
end
|
||||
MODOPT={--Mod options
|
||||
{no=0,id="NX",name="next",
|
||||
key="q",x=80,y=230,color='lO',
|
||||
list={0,1,2,3,4,5,6},
|
||||
func=function(P,O)P.gameEnv.nextCount=O end,
|
||||
unranked=true,
|
||||
},
|
||||
{no=1,id="HL",name="hold",
|
||||
key="w",x=200,y=230,color='lO',
|
||||
list={0,1,2,3,4,5,6},
|
||||
func=function(P,O)P.gameEnv.holdCount=O end,
|
||||
unranked=true,
|
||||
},
|
||||
{no=2,id="FL",name="hideNext",
|
||||
key="e",x=320,y=230,color='lA',
|
||||
list={1,2,3,4,5},
|
||||
func=function(P,O)P.gameEnv.nextStartPos=O+1 end,
|
||||
unranked=true,
|
||||
},
|
||||
{no=3,id="IH",name="infHold",
|
||||
key="r",x=440,y=230,color='lA',
|
||||
func=function(P)P.gameEnv.infHold=true end,
|
||||
unranked=true,
|
||||
},
|
||||
{no=4,id="HB",name="hideBlock",
|
||||
key="y",x=680,y=230,color='lV',
|
||||
func=function(P)P.gameEnv.block=false end,
|
||||
unranked=true,
|
||||
},
|
||||
{no=5,id="HG",name="hideGhost",
|
||||
key="u",x=800,y=230,color='lV',
|
||||
func=function(P)P.gameEnv.ghost=false end,
|
||||
unranked=true,
|
||||
},
|
||||
{no=6,id="HD",name="hidden",
|
||||
key="i",x=920,y=230,color='lP',
|
||||
list={'easy','slow','medium','fast','none'},
|
||||
func=function(P,O)P.gameEnv.visible=O end,
|
||||
unranked=true,
|
||||
},
|
||||
{no=7,id="HB",name="hideBoard",
|
||||
key="o",x=1040,y=230,color='lP',
|
||||
list={'down','up','all'},
|
||||
func=function(P,O)P.gameEnv.hideBoard=O end,
|
||||
unranked=true,
|
||||
},
|
||||
{no=8,id="FB",name="flipBoard",
|
||||
key="p",x=1160,y=230,color='lJ',
|
||||
list={'U-D','L-R','180'},
|
||||
func=function(P,O)P.gameEnv.flipBoard=O end,
|
||||
unranked=true,
|
||||
},
|
||||
{no=0,id="NX",name="next",
|
||||
key="q",x=80,y=230,color='lO',
|
||||
list={0,1,2,3,4,5,6},
|
||||
func=function(P,O)P.gameEnv.nextCount=O end,
|
||||
unranked=true,
|
||||
},
|
||||
{no=1,id="HL",name="hold",
|
||||
key="w",x=200,y=230,color='lO',
|
||||
list={0,1,2,3,4,5,6},
|
||||
func=function(P,O)P.gameEnv.holdCount=O end,
|
||||
unranked=true,
|
||||
},
|
||||
{no=2,id="FL",name="hideNext",
|
||||
key="e",x=320,y=230,color='lA',
|
||||
list={1,2,3,4,5},
|
||||
func=function(P,O)P.gameEnv.nextStartPos=O+1 end,
|
||||
unranked=true,
|
||||
},
|
||||
{no=3,id="IH",name="infHold",
|
||||
key="r",x=440,y=230,color='lA',
|
||||
func=function(P)P.gameEnv.infHold=true end,
|
||||
unranked=true,
|
||||
},
|
||||
{no=4,id="HB",name="hideBlock",
|
||||
key="y",x=680,y=230,color='lV',
|
||||
func=function(P)P.gameEnv.block=false end,
|
||||
unranked=true,
|
||||
},
|
||||
{no=5,id="HG",name="hideGhost",
|
||||
key="u",x=800,y=230,color='lV',
|
||||
func=function(P)P.gameEnv.ghost=false end,
|
||||
unranked=true,
|
||||
},
|
||||
{no=6,id="HD",name="hidden",
|
||||
key="i",x=920,y=230,color='lP',
|
||||
list={'easy','slow','medium','fast','none'},
|
||||
func=function(P,O)P.gameEnv.visible=O end,
|
||||
unranked=true,
|
||||
},
|
||||
{no=7,id="HB",name="hideBoard",
|
||||
key="o",x=1040,y=230,color='lP',
|
||||
list={'down','up','all'},
|
||||
func=function(P,O)P.gameEnv.hideBoard=O end,
|
||||
unranked=true,
|
||||
},
|
||||
{no=8,id="FB",name="flipBoard",
|
||||
key="p",x=1160,y=230,color='lJ',
|
||||
list={'U-D','L-R','180'},
|
||||
func=function(P,O)P.gameEnv.flipBoard=O end,
|
||||
unranked=true,
|
||||
},
|
||||
|
||||
{no=9,id="DT",name="dropDelay",
|
||||
key="a",x=140,y=350,color='lR',
|
||||
list={0,.125,.25,.5,1,2,3,4,5,6,7,8,9,10,12,14,16,18,20,25,30,40,60,180,1e99},
|
||||
func=function(P,O)P.gameEnv.drop=O end,
|
||||
unranked=true,
|
||||
},
|
||||
{no=10,id="LT",name="lockDelay",
|
||||
key="s",x=260,y=350,color='lR',
|
||||
list={0,1,2,3,4,5,6,7,8,9,10,12,14,16,18,20,25,30,40,60,180,1e99},
|
||||
func=function(P,O)P.gameEnv.lock=O end,
|
||||
unranked=true,
|
||||
},
|
||||
{no=11,id="ST",name="waitDelay",
|
||||
key="d",x=380,y=350,color='lR',
|
||||
list={0,1,2,3,4,5,6,7,8,10,15,20,30,60},
|
||||
func=function(P,O)P.gameEnv.wait=O end,
|
||||
unranked=true,
|
||||
},
|
||||
{no=12,id="CT",name="fallDelay",
|
||||
key="f",x=500,y=350,color='lR',
|
||||
list={0,1,2,3,4,5,6,7,8,10,15,20,30,60},
|
||||
func=function(P,O)P.gameEnv.fall=O end,
|
||||
unranked=true,
|
||||
},
|
||||
{no=13,id="LF",name="life",
|
||||
key="j",x=860,y=350,color='lY',
|
||||
list={0,1,2,3,5,10,15,26,42,87,500},
|
||||
func=function(P,O)P.gameEnv.life=O end,
|
||||
unranked=true,
|
||||
},
|
||||
{no=14,id="FB",name="forceB2B",
|
||||
key="k",x=980,y=350,color='lY',
|
||||
func=function(P)P.gameEnv.b2bKill=true end,
|
||||
unranked=true,
|
||||
},
|
||||
{no=15,id="PF",name="forceFinesse",
|
||||
key="l",x=1100,y=350,color='lY',
|
||||
func=function(P)P.gameEnv.fineKill=true end,
|
||||
unranked=true,
|
||||
},
|
||||
{no=9,id="DT",name="dropDelay",
|
||||
key="a",x=140,y=350,color='lR',
|
||||
list={0,.125,.25,.5,1,2,3,4,5,6,7,8,9,10,12,14,16,18,20,25,30,40,60,180,1e99},
|
||||
func=function(P,O)P.gameEnv.drop=O end,
|
||||
unranked=true,
|
||||
},
|
||||
{no=10,id="LT",name="lockDelay",
|
||||
key="s",x=260,y=350,color='lR',
|
||||
list={0,1,2,3,4,5,6,7,8,9,10,12,14,16,18,20,25,30,40,60,180,1e99},
|
||||
func=function(P,O)P.gameEnv.lock=O end,
|
||||
unranked=true,
|
||||
},
|
||||
{no=11,id="ST",name="waitDelay",
|
||||
key="d",x=380,y=350,color='lR',
|
||||
list={0,1,2,3,4,5,6,7,8,10,15,20,30,60},
|
||||
func=function(P,O)P.gameEnv.wait=O end,
|
||||
unranked=true,
|
||||
},
|
||||
{no=12,id="CT",name="fallDelay",
|
||||
key="f",x=500,y=350,color='lR',
|
||||
list={0,1,2,3,4,5,6,7,8,10,15,20,30,60},
|
||||
func=function(P,O)P.gameEnv.fall=O end,
|
||||
unranked=true,
|
||||
},
|
||||
{no=13,id="LF",name="life",
|
||||
key="j",x=860,y=350,color='lY',
|
||||
list={0,1,2,3,5,10,15,26,42,87,500},
|
||||
func=function(P,O)P.gameEnv.life=O end,
|
||||
unranked=true,
|
||||
},
|
||||
{no=14,id="FB",name="forceB2B",
|
||||
key="k",x=980,y=350,color='lY',
|
||||
func=function(P)P.gameEnv.b2bKill=true end,
|
||||
unranked=true,
|
||||
},
|
||||
{no=15,id="PF",name="forceFinesse",
|
||||
key="l",x=1100,y=350,color='lY',
|
||||
func=function(P)P.gameEnv.fineKill=true end,
|
||||
unranked=true,
|
||||
},
|
||||
|
||||
{no=16,id="TL",name="tele",
|
||||
key="z",x=200,y=470,color='lH',
|
||||
func=function(P)
|
||||
P.gameEnv.das,P.gameEnv.arr=0,0
|
||||
P.gameEnv.sddas,P.gameEnv.sdarr=0,0
|
||||
end,
|
||||
unranked=true,
|
||||
},
|
||||
{no=17,id="FX",name="noRotation",
|
||||
key="x",x=320,y=470,color='lH',
|
||||
func=function(P)
|
||||
_disableKey(P,3)
|
||||
_disableKey(P,4)
|
||||
_disableKey(P,5)
|
||||
end,
|
||||
unranked=true,
|
||||
},
|
||||
{no=18,id="GL",name="noMove",
|
||||
key="c",x=440,y=470,color='lH',
|
||||
func=function(P)
|
||||
_disableKey(P,1)_disableKey(P,2)
|
||||
_disableKey(P,11)_disableKey(P,12)
|
||||
_disableKey(P,17)_disableKey(P,18)
|
||||
_disableKey(P,19)_disableKey(P,20)
|
||||
end,
|
||||
unranked=true,
|
||||
},
|
||||
{no=19,id="CS",name="customSeq",
|
||||
key="b",x=680,y=470,color='lB',
|
||||
list={'bag','his','hisPool','c2','rnd','mess','reverb'},
|
||||
func=function(P,O)P.gameEnv.sequence=O end,
|
||||
unranked=true,
|
||||
},
|
||||
{no=20,id="PS",name="pushSpeed",
|
||||
key="n",x=800,y=470,color='lB',
|
||||
list={.5,1,2,3,5,15,1e99},
|
||||
func=function(P,O)P.gameEnv.pushSpeed=O end,
|
||||
unranked=true,
|
||||
},
|
||||
{no=21,id="BN",name="boneBlock",
|
||||
key="m",x=920,y=470,color='lB',
|
||||
list={'on','off'},
|
||||
func=function(P,O)P.gameEnv.bone=O=='on'end,
|
||||
unranked=true,
|
||||
},
|
||||
{no=16,id="TL",name="tele",
|
||||
key="z",x=200,y=470,color='lH',
|
||||
func=function(P)
|
||||
P.gameEnv.das,P.gameEnv.arr=0,0
|
||||
P.gameEnv.sddas,P.gameEnv.sdarr=0,0
|
||||
end,
|
||||
unranked=true,
|
||||
},
|
||||
{no=17,id="FX",name="noRotation",
|
||||
key="x",x=320,y=470,color='lH',
|
||||
func=function(P)
|
||||
_disableKey(P,3)
|
||||
_disableKey(P,4)
|
||||
_disableKey(P,5)
|
||||
end,
|
||||
unranked=true,
|
||||
},
|
||||
{no=18,id="GL",name="noMove",
|
||||
key="c",x=440,y=470,color='lH',
|
||||
func=function(P)
|
||||
_disableKey(P,1)_disableKey(P,2)
|
||||
_disableKey(P,11)_disableKey(P,12)
|
||||
_disableKey(P,17)_disableKey(P,18)
|
||||
_disableKey(P,19)_disableKey(P,20)
|
||||
end,
|
||||
unranked=true,
|
||||
},
|
||||
{no=19,id="CS",name="customSeq",
|
||||
key="b",x=680,y=470,color='lB',
|
||||
list={'bag','his','hisPool','c2','rnd','mess','reverb'},
|
||||
func=function(P,O)P.gameEnv.sequence=O end,
|
||||
unranked=true,
|
||||
},
|
||||
{no=20,id="PS",name="pushSpeed",
|
||||
key="n",x=800,y=470,color='lB',
|
||||
list={.5,1,2,3,5,15,1e99},
|
||||
func=function(P,O)P.gameEnv.pushSpeed=O end,
|
||||
unranked=true,
|
||||
},
|
||||
{no=21,id="BN",name="boneBlock",
|
||||
key="m",x=920,y=470,color='lB',
|
||||
list={'on','off'},
|
||||
func=function(P,O)P.gameEnv.bone=O=='on'end,
|
||||
unranked=true,
|
||||
},
|
||||
}
|
||||
for i=1,#MODOPT do
|
||||
local M=MODOPT[i]
|
||||
M.sel,M.time=0,0
|
||||
M.color=COLOR[M.color]
|
||||
local M=MODOPT[i]
|
||||
M.sel,M.time=0,0
|
||||
M.color=COLOR[M.color]
|
||||
end
|
||||
|
||||
--Game tables
|
||||
@@ -155,216 +155,216 @@ FIELD={}--Field(s) for custom game
|
||||
BAG={}--Sequence for custom game
|
||||
MISSION={}--Clearing mission for custom game
|
||||
GAME={--Global game data
|
||||
playing=false, --If in-game
|
||||
init=false, --If need initializing game when enter scene-play
|
||||
net=false, --If play net game
|
||||
playing=false, --If in-game
|
||||
init=false, --If need initializing game when enter scene-play
|
||||
net=false, --If play net game
|
||||
|
||||
result=false, --Game result (string)
|
||||
rank=0, --Rank reached
|
||||
pauseTime=0, --Time paused
|
||||
pauseCount=0, --Pausing count
|
||||
warnLVL0=0, --Warning level
|
||||
warnLVL=0, --Warning level (show)
|
||||
result=false, --Game result (string)
|
||||
rank=0, --Rank reached
|
||||
pauseTime=0, --Time paused
|
||||
pauseCount=0, --Pausing count
|
||||
warnLVL0=0, --Warning level
|
||||
warnLVL=0, --Warning level (show)
|
||||
|
||||
seed=1046101471, --Game seed
|
||||
curMode=false, --Current gamemode object
|
||||
mod={}, --List of loaded mods
|
||||
modeEnv=false, --Current gamemode environment
|
||||
setting={}, --Game settings
|
||||
rep={}, --Recording list, key,time,key,time...
|
||||
statSaved=true, --If recording saved
|
||||
recording=false, --If recording
|
||||
replaying=false, --If replaying
|
||||
saved=false, --If recording saved
|
||||
tasUsed=false, --If tasMode used
|
||||
seed=1046101471, --Game seed
|
||||
curMode=false, --Current gamemode object
|
||||
mod={}, --List of loaded mods
|
||||
modeEnv=false, --Current gamemode environment
|
||||
setting={}, --Game settings
|
||||
rep={}, --Recording list, key,time,key,time...
|
||||
statSaved=true, --If recording saved
|
||||
recording=false, --If recording
|
||||
replaying=false, --If replaying
|
||||
saved=false, --If recording saved
|
||||
tasUsed=false, --If tasMode used
|
||||
|
||||
prevBG=false, --Previous background, for restore BG when quit setting page
|
||||
prevBG=false, --Previous background, for restore BG when quit setting page
|
||||
|
||||
--Data for royale mode
|
||||
stage=false, --Game stage
|
||||
mostBadge=false, --Most badge owner
|
||||
secBadge=false, --Second badge owner
|
||||
mostDangerous=false,--Most dangerous player
|
||||
secDangerous=false, --Second dangerous player
|
||||
--Data for royale mode
|
||||
stage=false, --Game stage
|
||||
mostBadge=false, --Most badge owner
|
||||
secBadge=false, --Second badge owner
|
||||
mostDangerous=false,--Most dangerous player
|
||||
secDangerous=false, --Second dangerous player
|
||||
}
|
||||
ROYALEDATA={
|
||||
powerUp=false,
|
||||
stage=false,
|
||||
powerUp=false,
|
||||
stage=false,
|
||||
}
|
||||
CUSTOMENV={}
|
||||
ROOMENV={
|
||||
--Room config
|
||||
capacity=10,
|
||||
--Room config
|
||||
capacity=10,
|
||||
|
||||
--Basic
|
||||
drop=30,
|
||||
lock=60,
|
||||
wait=0,
|
||||
fall=0,
|
||||
--Basic
|
||||
drop=30,
|
||||
lock=60,
|
||||
wait=0,
|
||||
fall=0,
|
||||
|
||||
--Control
|
||||
nextCount=6,
|
||||
holdCount=1,
|
||||
infHold=false,
|
||||
phyHold=false,
|
||||
--Control
|
||||
nextCount=6,
|
||||
holdCount=1,
|
||||
infHold=false,
|
||||
phyHold=false,
|
||||
|
||||
--Visual
|
||||
bone=false,
|
||||
--Visual
|
||||
bone=false,
|
||||
|
||||
--Rule
|
||||
life=0,
|
||||
pushSpeed=5,
|
||||
garbageSpeed=2,
|
||||
visible='show',
|
||||
freshLimit=15,
|
||||
--Rule
|
||||
life=0,
|
||||
pushSpeed=5,
|
||||
garbageSpeed=2,
|
||||
visible='show',
|
||||
freshLimit=15,
|
||||
|
||||
fieldH=20,
|
||||
heightLimit=1e99,
|
||||
bufferLimit=1e99,
|
||||
fieldH=20,
|
||||
heightLimit=1e99,
|
||||
bufferLimit=1e99,
|
||||
|
||||
ospin=true,
|
||||
fineKill=false,
|
||||
b2bKill=false,
|
||||
easyFresh=true,
|
||||
deepDrop=false,
|
||||
ospin=true,
|
||||
fineKill=false,
|
||||
b2bKill=false,
|
||||
easyFresh=true,
|
||||
deepDrop=false,
|
||||
}
|
||||
REPLAY={}--Replay objects (not include stream data)
|
||||
|
||||
--Userdata tables
|
||||
USER={--User infomation
|
||||
--Network infos
|
||||
uid=false,
|
||||
authToken=false,
|
||||
--Network infos
|
||||
uid=false,
|
||||
authToken=false,
|
||||
|
||||
--Local data
|
||||
xp=0,lv=1,
|
||||
--Local data
|
||||
xp=0,lv=1,
|
||||
}
|
||||
|
||||
SETTING={--Settings
|
||||
--Tuning
|
||||
das=10,arr=2,
|
||||
dascut=0,dropcut=0,
|
||||
sddas=0,sdarr=2,
|
||||
ihs=true,irs=true,ims=true,
|
||||
RS='TRS',
|
||||
swap=true,
|
||||
--Tuning
|
||||
das=10,arr=2,
|
||||
dascut=0,dropcut=0,
|
||||
sddas=0,sdarr=2,
|
||||
ihs=true,irs=true,ims=true,
|
||||
RS='TRS',
|
||||
swap=true,
|
||||
|
||||
--System
|
||||
reTime=4,
|
||||
allowTAS=false,
|
||||
autoPause=true,
|
||||
menuPos='middle',
|
||||
fine=false,
|
||||
autoSave=false,
|
||||
simpMode=false,
|
||||
lang=1,
|
||||
skinSet='crystal_scf',
|
||||
skin={
|
||||
1,7,11,3,14,4,9,
|
||||
1,7,2,6,10,2,13,5,9,15,10,11,3,12,2,16,8,4,
|
||||
10,13,2,8
|
||||
},
|
||||
face={0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
|
||||
--System
|
||||
reTime=4,
|
||||
allowTAS=false,
|
||||
autoPause=true,
|
||||
menuPos='middle',
|
||||
fine=false,
|
||||
autoSave=false,
|
||||
simpMode=false,
|
||||
lang=1,
|
||||
skinSet='crystal_scf',
|
||||
skin={
|
||||
1,7,11,3,14,4,9,
|
||||
1,7,2,6,10,2,13,5,9,15,10,11,3,12,2,16,8,4,
|
||||
10,13,2,8
|
||||
},
|
||||
face={0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
|
||||
|
||||
--Graphic
|
||||
ghostType='gray',
|
||||
block=true,ghost=.3,center=1,
|
||||
smooth=true,grid=.16,lineNum=.5,
|
||||
upEdge=true,
|
||||
bagLine=false,
|
||||
lockFX=2,
|
||||
dropFX=2,
|
||||
moveFX=2,
|
||||
clearFX=2,
|
||||
splashFX=2,
|
||||
shakeFX=2,
|
||||
atkFX=2,
|
||||
frameMul=100,
|
||||
cleanCanvas=false,
|
||||
blockSatur='normal',
|
||||
fieldSatur='normal',
|
||||
--Graphic
|
||||
ghostType='gray',
|
||||
block=true,ghost=.3,center=1,
|
||||
smooth=true,grid=.16,lineNum=.5,
|
||||
upEdge=true,
|
||||
bagLine=false,
|
||||
lockFX=2,
|
||||
dropFX=2,
|
||||
moveFX=2,
|
||||
clearFX=2,
|
||||
splashFX=2,
|
||||
shakeFX=2,
|
||||
atkFX=2,
|
||||
frameMul=100,
|
||||
cleanCanvas=false,
|
||||
blockSatur='normal',
|
||||
fieldSatur='normal',
|
||||
|
||||
text=true,
|
||||
score=true,
|
||||
bufferWarn=true,
|
||||
showSpike=true,
|
||||
highCam=true,
|
||||
nextPos=true,
|
||||
fullscreen=true,
|
||||
bg=true,
|
||||
powerInfo=false,
|
||||
clickFX=true,
|
||||
warn=true,
|
||||
text=true,
|
||||
score=true,
|
||||
bufferWarn=true,
|
||||
showSpike=true,
|
||||
highCam=true,
|
||||
nextPos=true,
|
||||
fullscreen=true,
|
||||
bg=true,
|
||||
powerInfo=false,
|
||||
clickFX=true,
|
||||
warn=true,
|
||||
|
||||
--Sound
|
||||
sfx=1,
|
||||
sfx_spawn=0,
|
||||
sfx_warn=.4,
|
||||
bgm=.7,
|
||||
stereo=.7,
|
||||
vib=0,
|
||||
voc=0,
|
||||
cv='miya',
|
||||
--Sound
|
||||
sfx=1,
|
||||
sfx_spawn=0,
|
||||
sfx_warn=.4,
|
||||
bgm=.7,
|
||||
stereo=.7,
|
||||
vib=0,
|
||||
voc=0,
|
||||
cv='miya',
|
||||
|
||||
--Virtualkey
|
||||
VKSFX=.2,--SFX volume
|
||||
VKVIB=0,--VIB
|
||||
VKSwitch=false,--If disp
|
||||
VKSkin=1,--If disp
|
||||
VKTrack=false,--If tracked
|
||||
VKDodge=false,--If dodge
|
||||
VKTchW=.3,--Touch-Pos Weight
|
||||
VKCurW=.4,--Cur-Pos Weight
|
||||
VKIcon=true,--If disp icon
|
||||
VKAlpha=.3,
|
||||
--Virtualkey
|
||||
VKSFX=.2,--SFX volume
|
||||
VKVIB=0,--VIB
|
||||
VKSwitch=false,--If disp
|
||||
VKSkin=1,--If disp
|
||||
VKTrack=false,--If tracked
|
||||
VKDodge=false,--If dodge
|
||||
VKTchW=.3,--Touch-Pos Weight
|
||||
VKCurW=.4,--Cur-Pos Weight
|
||||
VKIcon=true,--If disp icon
|
||||
VKAlpha=.3,
|
||||
}
|
||||
keyMap={--Key setting
|
||||
keyboard={
|
||||
left=1,right=2,x=3,z=4,c=5,
|
||||
up=6,down=7,space=8,a=9,s=10,
|
||||
r=0,
|
||||
},
|
||||
joystick={
|
||||
dpleft=1,dpright=2,a=3,b=4,y=5,
|
||||
dpup=6,dpdown=7,rightshoulder=8,x=9,
|
||||
leftshoulder=0,
|
||||
},
|
||||
keyboard={
|
||||
left=1,right=2,x=3,z=4,c=5,
|
||||
up=6,down=7,space=8,a=9,s=10,
|
||||
r=0,
|
||||
},
|
||||
joystick={
|
||||
dpleft=1,dpright=2,a=3,b=4,y=5,
|
||||
dpup=6,dpdown=7,rightshoulder=8,x=9,
|
||||
leftshoulder=0,
|
||||
},
|
||||
}
|
||||
VK_org={--Virtualkey layout, refresh all VKs' position with this before each game
|
||||
{ava=true, x=80, y=720-200, r=80},--moveLeft
|
||||
{ava=true, x=320, y=720-200, r=80},--moveRight
|
||||
{ava=true, x=1280-80, y=720-200, r=80},--rotRight
|
||||
{ava=true, x=1280-200, y=720-80, r=80},--rotLeft
|
||||
{ava=true, x=1280-200, y=720-320, r=80},--rot180
|
||||
{ava=true, x=200, y=720-320, r=80},--hardDrop
|
||||
{ava=true, x=200, y=720-80, r=80},--softDrop
|
||||
{ava=true, x=1280-320, y=720-200, r=80},--hold
|
||||
{ava=true, x=80, y=280, r=80},--func1
|
||||
{ava=true, x=1280-80, y=280, r=80},--func2
|
||||
{ava=false, x=670, y=50, r=30},--insLeft
|
||||
{ava=false, x=730, y=50, r=30},--insRight
|
||||
{ava=false, x=790, y=50, r=30},--insDown
|
||||
{ava=false, x=850, y=50, r=30},--down1
|
||||
{ava=false, x=910, y=50, r=30},--down4
|
||||
{ava=false, x=970, y=50, r=30},--down10
|
||||
{ava=false, x=1030, y=50, r=30},--dropLeft
|
||||
{ava=false, x=1090, y=50, r=30},--dropRight
|
||||
{ava=false, x=1150, y=50, r=30},--zangiLeft
|
||||
{ava=false, x=1210, y=50, r=30},--zangiRight
|
||||
{ava=true, x=80, y=720-200,r=80},--moveLeft
|
||||
{ava=true, x=320, y=720-200,r=80},--moveRight
|
||||
{ava=true, x=1280-80, y=720-200,r=80},--rotRight
|
||||
{ava=true, x=1280-200,y=720-80, r=80},--rotLeft
|
||||
{ava=true, x=1280-200,y=720-320,r=80},--rot180
|
||||
{ava=true, x=200, y=720-320,r=80},--hardDrop
|
||||
{ava=true, x=200, y=720-80, r=80},--softDrop
|
||||
{ava=true, x=1280-320,y=720-200,r=80},--hold
|
||||
{ava=true, x=80, y=280, r=80},--func1
|
||||
{ava=true, x=1280-80, y=280, r=80},--func2
|
||||
{ava=false, x=670, y=50, r=30},--insLeft
|
||||
{ava=false, x=730, y=50, r=30},--insRight
|
||||
{ava=false, x=790, y=50, r=30},--insDown
|
||||
{ava=false, x=850, y=50, r=30},--down1
|
||||
{ava=false, x=910, y=50, r=30},--down4
|
||||
{ava=false, x=970, y=50, r=30},--down10
|
||||
{ava=false, x=1030, y=50, r=30},--dropLeft
|
||||
{ava=false, x=1090, y=50, r=30},--dropRight
|
||||
{ava=false, x=1150, y=50, r=30},--zangiLeft
|
||||
{ava=false, x=1210, y=50, r=30},--zangiRight
|
||||
}
|
||||
RANKS={sprint_10l=0}--Ranks of modes
|
||||
STAT={
|
||||
version=VERSION.code,
|
||||
run=0,game=0,time=0,frame=0,
|
||||
key=0,rotate=0,hold=0,
|
||||
extraPiece=0,finesseRate=0,
|
||||
piece=0,row=0,dig=0,
|
||||
atk=0,digatk=0,
|
||||
send=0,recv=0,pend=0,off=0,
|
||||
clear=(function()local L={}for i=1,29 do L[i]={0,0,0,0,0,0}end return L end)(),
|
||||
spin=(function()local L={}for i=1,29 do L[i]={0,0,0,0,0,0,0}end return L end)(),
|
||||
pc=0,hpc=0,b2b=0,b3b=0,score=0,
|
||||
lastPlay='sprint_10l',--Last played mode ID
|
||||
date=false,
|
||||
todayTime=0,
|
||||
version=VERSION.code,
|
||||
run=0,game=0,time=0,frame=0,
|
||||
key=0,rotate=0,hold=0,
|
||||
extraPiece=0,finesseRate=0,
|
||||
piece=0,row=0,dig=0,
|
||||
atk=0,digatk=0,
|
||||
send=0,recv=0,pend=0,off=0,
|
||||
clear=(function()local L={}for i=1,29 do L[i]={0,0,0,0,0,0}end return L end)(),
|
||||
spin=(function()local L={}for i=1,29 do L[i]={0,0,0,0,0,0,0}end return L end)(),
|
||||
pc=0,hpc=0,b2b=0,b3b=0,score=0,
|
||||
lastPlay='sprint_10l',--Last played mode ID
|
||||
date=false,
|
||||
todayTime=0,
|
||||
}
|
||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -1,314 +1,314 @@
|
||||
return{
|
||||
loadText={
|
||||
loadSFX="音效",
|
||||
loadVoice="语音",
|
||||
loadFont="字体",
|
||||
loadModeIcon="模式图标",
|
||||
loadMode="模式",
|
||||
loadOther="其他",
|
||||
finish="走你",
|
||||
},
|
||||
playedLong="今天玩很久了,给我注意点",
|
||||
playedTooMuch="特么再玩小心眼睛瞎掉,爬",
|
||||
loadText={
|
||||
loadSFX="音效",
|
||||
loadVoice="语音",
|
||||
loadFont="字体",
|
||||
loadModeIcon="模式图标",
|
||||
loadMode="模式",
|
||||
loadOther="其他",
|
||||
finish="走你",
|
||||
},
|
||||
playedLong="今天玩很久了,给我注意点",
|
||||
playedTooMuch="特么再玩小心眼睛瞎掉,爬",
|
||||
|
||||
royale_remain="剩 $1 人",
|
||||
cmb={nil,"1连","2连","3连","4连","5连","6连","7连","8连","9连","10连!","11连!","12连!","13连!","14连!","15连!","16连!","17连!","18连!","19连!","MEGACMB"},
|
||||
spin="旋",
|
||||
clear={"消一","消二","消三","消四","卧槽","离谱"},
|
||||
mini="矬",b2b="牛逼",b3b="很牛逼",
|
||||
PC="消干净了",HPC="消挺干净",
|
||||
royale_remain="剩 $1 人",
|
||||
cmb={nil,"1连","2连","3连","4连","5连","6连","7连","8连","9连","10连!","11连!","12连!","13连!","14连!","15连!","16连!","17连!","18连!","19连!","MEGACMB"},
|
||||
spin="旋",
|
||||
clear={"消一","消二","消三","消四","卧槽","离谱"},
|
||||
mini="矬",b2b="牛逼",b3b="很牛逼",
|
||||
PC="消干净了",HPC="消挺干净",
|
||||
|
||||
great="不错的",
|
||||
awesome="您很强",
|
||||
almost="太舒服了",
|
||||
continue="您继续",
|
||||
maxspeed="速度封顶",
|
||||
great="不错的",
|
||||
awesome="您很强",
|
||||
almost="太舒服了",
|
||||
continue="您继续",
|
||||
maxspeed="速度封顶",
|
||||
|
||||
speedLV="速度等级",
|
||||
piece="块数",line="行数",atk="攻",eff="效",
|
||||
rpm="收每分",tsd="T2",
|
||||
grade="段位",techrash="消四",
|
||||
wave="波数",nextWave="下一波",
|
||||
combo="连击",maxcmb="最大连",
|
||||
pc="消干净了",ko="淘汰",
|
||||
speedLV="速度等级",
|
||||
piece="块数",line="行数",atk="攻",eff="效",
|
||||
rpm="收每分",tsd="T2",
|
||||
grade="段位",techrash="消四",
|
||||
wave="波数",nextWave="下一波",
|
||||
combo="连击",maxcmb="最大连",
|
||||
pc="消干净了",ko="淘汰",
|
||||
|
||||
win="好了",
|
||||
lose="挂了",
|
||||
win="好了",
|
||||
lose="挂了",
|
||||
|
||||
finish="好厉害呀 真帅气呢",
|
||||
gamewin="成了",
|
||||
gameover="没了",
|
||||
finish="好厉害呀 真帅气呢",
|
||||
gamewin="成了",
|
||||
gameover="没了",
|
||||
|
||||
pause="歇会",
|
||||
pauseCount="歇多久了",
|
||||
finesse_ap="您",
|
||||
finesse_fc="全连",
|
||||
pause="歇会",
|
||||
pauseCount="歇多久了",
|
||||
finesse_ap="您",
|
||||
finesse_fc="全连",
|
||||
|
||||
noUsername="别闹。",
|
||||
wrongEmail="别乱输。",
|
||||
noPassword="注册会不会?",
|
||||
diffPassword="字不认识?",
|
||||
noUsername="别闹。",
|
||||
wrongEmail="别乱输。",
|
||||
noPassword="注册会不会?",
|
||||
diffPassword="字不认识?",
|
||||
|
||||
ranks={"菜","可","好","强","您"},
|
||||
ranks={"菜","可","好","强","您"},
|
||||
|
||||
createRoomSuccessed="创好了",
|
||||
started="开了",
|
||||
spectating="看戏中",
|
||||
createRoomSuccessed="创好了",
|
||||
started="开了",
|
||||
spectating="看戏中",
|
||||
|
||||
stat={
|
||||
"开了几次:",
|
||||
"玩了几把:",
|
||||
"玩了多久:",
|
||||
"按键/旋转/暂存:",
|
||||
"方块/消行/攻击:",
|
||||
"接收/抵消/上涨:",
|
||||
"挖掘/挖掘攻击:",
|
||||
"效率/挖掘效率:",
|
||||
"牛逼/很牛逼:",
|
||||
"消光/消半截:",
|
||||
"多余操作/极简率:",
|
||||
},
|
||||
WidgetText={
|
||||
setting_game={
|
||||
title="游戏设置",
|
||||
stat={
|
||||
"开了几次:",
|
||||
"玩了几把:",
|
||||
"玩了多久:",
|
||||
"按键/旋转/暂存:",
|
||||
"方块/消行/攻击:",
|
||||
"接收/抵消/上涨:",
|
||||
"挖掘/挖掘攻击:",
|
||||
"效率/挖掘效率:",
|
||||
"牛逼/很牛逼:",
|
||||
"消光/消半截:",
|
||||
"多余操作/极简率:",
|
||||
},
|
||||
WidgetText={
|
||||
setting_game={
|
||||
title="游戏设置",
|
||||
|
||||
graphic="←改画面",
|
||||
sound="改声音→",
|
||||
graphic="←改画面",
|
||||
sound="改声音→",
|
||||
|
||||
ctrl="改控制",
|
||||
key="改键位",
|
||||
touch="改触屏",
|
||||
},
|
||||
setting_video={
|
||||
title="改画面",
|
||||
sound="←改声音",
|
||||
game="游戏设置→",
|
||||
ctrl="改控制",
|
||||
key="改键位",
|
||||
touch="改触屏",
|
||||
},
|
||||
setting_video={
|
||||
title="改画面",
|
||||
sound="←改声音",
|
||||
game="游戏设置→",
|
||||
|
||||
block="方块可见",
|
||||
ghost="阴影",
|
||||
center="中心",
|
||||
lineNum="行号",
|
||||
block="方块可见",
|
||||
ghost="阴影",
|
||||
center="中心",
|
||||
lineNum="行号",
|
||||
|
||||
text="招式名",
|
||||
score="跳分",
|
||||
warn="要死",
|
||||
highCam="拉镜",
|
||||
},
|
||||
setting_sound={
|
||||
title="改声音",
|
||||
text="招式名",
|
||||
score="跳分",
|
||||
warn="要死",
|
||||
highCam="拉镜",
|
||||
},
|
||||
setting_sound={
|
||||
title="改声音",
|
||||
|
||||
game="←游戏设置",
|
||||
graphic="改画面→",
|
||||
game="←游戏设置",
|
||||
graphic="改画面→",
|
||||
|
||||
bgm="曲",
|
||||
spawn="出块",
|
||||
warn="警告",
|
||||
vib="嗡嗡",
|
||||
cv="谁",
|
||||
},
|
||||
setting_control={
|
||||
title="改控制",
|
||||
reset="重设",
|
||||
},
|
||||
setting_skin={
|
||||
skinSet="皮肤",
|
||||
title="改外观",
|
||||
},
|
||||
setting_touchSwitch={
|
||||
basic="阳间",
|
||||
pro="阴间",
|
||||
},
|
||||
about={
|
||||
staff="游戏谁写的",
|
||||
his="黑历史",
|
||||
qq="QQ对线",
|
||||
},
|
||||
register={
|
||||
password2="你懂的",
|
||||
registering="等",
|
||||
},
|
||||
sound={
|
||||
title="音效室",
|
||||
sfx="音效",
|
||||
voc="语音",
|
||||
bgm="曲",
|
||||
spawn="出块",
|
||||
warn="警告",
|
||||
vib="嗡嗡",
|
||||
cv="谁",
|
||||
},
|
||||
setting_control={
|
||||
title="改控制",
|
||||
reset="重设",
|
||||
},
|
||||
setting_skin={
|
||||
skinSet="皮肤",
|
||||
title="改外观",
|
||||
},
|
||||
setting_touchSwitch={
|
||||
basic="阳间",
|
||||
pro="阴间",
|
||||
},
|
||||
about={
|
||||
staff="游戏谁写的",
|
||||
his="黑历史",
|
||||
qq="QQ对线",
|
||||
},
|
||||
register={
|
||||
password2="你懂的",
|
||||
registering="等",
|
||||
},
|
||||
sound={
|
||||
title="音效室",
|
||||
sfx="音效",
|
||||
voc="语音",
|
||||
|
||||
hold="暂存",
|
||||
prehold="提前暂存",
|
||||
_pc="消干净了",
|
||||
hold="暂存",
|
||||
prehold="提前暂存",
|
||||
_pc="消干净了",
|
||||
|
||||
spin0="空旋转",
|
||||
spin1="旋转消一",
|
||||
spin2="旋转消二",
|
||||
spin3="旋转消三",
|
||||
spin0="空旋转",
|
||||
spin1="旋转消一",
|
||||
spin2="旋转消二",
|
||||
spin3="旋转消三",
|
||||
|
||||
z0="Z旋",
|
||||
z1="Z旋消一",
|
||||
z2="Z旋消二",
|
||||
z3="Z旋消三",
|
||||
s0="S旋",
|
||||
s1="S旋消一",
|
||||
s2="S旋消二",
|
||||
s3="S旋消三",
|
||||
z0="Z旋",
|
||||
z1="Z旋消一",
|
||||
z2="Z旋消二",
|
||||
z3="Z旋消三",
|
||||
s0="S旋",
|
||||
s1="S旋消一",
|
||||
s2="S旋消二",
|
||||
s3="S旋消三",
|
||||
|
||||
j0="J旋",
|
||||
j1="J旋消一",
|
||||
j2="J旋消二",
|
||||
j3="J旋消三",
|
||||
l0="L旋",
|
||||
l1="L旋消一",
|
||||
l2="L旋消二",
|
||||
l3="L旋消三",
|
||||
j0="J旋",
|
||||
j1="J旋消一",
|
||||
j2="J旋消二",
|
||||
j3="J旋消三",
|
||||
l0="L旋",
|
||||
l1="L旋消一",
|
||||
l2="L旋消二",
|
||||
l3="L旋消三",
|
||||
|
||||
t0="T旋",
|
||||
t1="T旋消一",
|
||||
t2="T旋消二",
|
||||
t3="T旋消三",
|
||||
o0="O旋",
|
||||
o1="O旋消一",
|
||||
o2="O旋消二",
|
||||
o3="O旋消三",
|
||||
t0="T旋",
|
||||
t1="T旋消一",
|
||||
t2="T旋消二",
|
||||
t3="T旋消三",
|
||||
o0="O旋",
|
||||
o1="O旋消一",
|
||||
o2="O旋消二",
|
||||
o3="O旋消三",
|
||||
|
||||
i0="I旋",
|
||||
i1="I旋消一",
|
||||
i2="I旋消二",
|
||||
i3="I旋消三",
|
||||
i0="I旋",
|
||||
i1="I旋消一",
|
||||
i2="I旋消二",
|
||||
i3="I旋消三",
|
||||
|
||||
mini="矬",
|
||||
b2b="牛逼",
|
||||
b3b="很牛逼",
|
||||
pc="消干净了",
|
||||
},
|
||||
app_15p={
|
||||
reset="打乱",
|
||||
color="彩",
|
||||
blind="盲",
|
||||
slide="滑动",
|
||||
pathVis="路径显示",
|
||||
revKB="键盘反向",
|
||||
},
|
||||
app_schulteG={
|
||||
reset="重开",
|
||||
rank="尺寸",
|
||||
blind="盲",
|
||||
disappear="消失",
|
||||
tapFX="动画",
|
||||
},
|
||||
savedata={
|
||||
export="复制走",
|
||||
import="粘贴到",
|
||||
unlock="地图",
|
||||
data="统计",
|
||||
setting="设置",
|
||||
vk="虚拟按键",
|
||||
mini="矬",
|
||||
b2b="牛逼",
|
||||
b3b="很牛逼",
|
||||
pc="消干净了",
|
||||
},
|
||||
app_15p={
|
||||
reset="打乱",
|
||||
color="彩",
|
||||
blind="盲",
|
||||
slide="滑动",
|
||||
pathVis="路径显示",
|
||||
revKB="键盘反向",
|
||||
},
|
||||
app_schulteG={
|
||||
reset="重开",
|
||||
rank="尺寸",
|
||||
blind="盲",
|
||||
disappear="消失",
|
||||
tapFX="动画",
|
||||
},
|
||||
savedata={
|
||||
export="复制走",
|
||||
import="粘贴到",
|
||||
unlock="地图",
|
||||
data="统计",
|
||||
setting="设置",
|
||||
vk="虚拟按键",
|
||||
|
||||
couldSave="云存档(测试,炸了别怪我)",
|
||||
notLogin="[不登录存个锤子]",
|
||||
upload="上传",
|
||||
download="下载",
|
||||
},
|
||||
},
|
||||
modes={
|
||||
['sprint_10l']= {"竞速", "10L", "消10行"},
|
||||
['sprint_20l']= {"竞速", "20L", "消20行"},
|
||||
['sprint_40l']= {"竞速", "40L", "消40行"},
|
||||
['sprint_100l']= {"竞速", "100L", "消100行"},
|
||||
['sprint_400l']= {"竞速", "400L", "消400行"},
|
||||
['sprint_1000l']= {"竞速", "1000L", "消1000行"},
|
||||
['sprintPenta']= {"竞速", "五连块", "离谱"},
|
||||
['sprintMPH']= {"竞速", "纯净", "听说你反应很快?"},
|
||||
['dig_10l']= {"挖掘", "10L", "挖10行"},
|
||||
['dig_40l']= {"挖掘", "40L", "挖40行"},
|
||||
['dig_100l']= {"挖掘", "100L", "挖100行"},
|
||||
['dig_400l']= {"挖掘", "400L", "挖400行"},
|
||||
['dig_1000l']= {"挖掘", "1000L", "挖1000行"},
|
||||
['drought_n']= {"干旱", "100L", "放轻松,简单得很"},
|
||||
['drought_l']= {"干旱+", "100L", "有趣的要来了"},
|
||||
['stack_e']= {"堆叠", "简单", "智力启蒙玩具(确信"},
|
||||
['stack_h']= {"堆叠", "困难", "智力启蒙玩具(确信"},
|
||||
['stack_u']= {"堆叠", "极限", "智力启蒙玩具(确信"},
|
||||
['marathon_n']= {"马拉松", "普通", "休闲模式"},
|
||||
['marathon_h']= {"马拉松", "困难", "休闲模式"},
|
||||
['solo_e']= {"单挑", "简单", "鲨AI"},
|
||||
['solo_n']= {"单挑", "普通", "鲨AI"},
|
||||
['solo_h']= {"单挑", "困难", "鲨AI"},
|
||||
['solo_l']= {"单挑", "疯狂", "鲨AI"},
|
||||
['solo_u']= {"单挑", "极限", "鲨AI"},
|
||||
['techmino49_e']= {"49人混战", "简单", "这我岂不是乱鲨"},
|
||||
['techmino49_h']= {"49人混战", "困难", "这我岂不是乱鲨"},
|
||||
['techmino49_u']= {"49人混战", "极限", "你吃鸡率多少?"},
|
||||
['techmino99_e']= {"99人混战", "简单", "这我岂不是乱鲨"},
|
||||
['techmino99_h']= {"99人混战", "困难", "这我岂不是乱鲨"},
|
||||
['techmino99_u']= {"99人混战", "极限", "你吃鸡率多少?"},
|
||||
['round_e']= {"回合制", "简单", "下棋"},
|
||||
['round_n']= {"回合制", "普通", "下棋"},
|
||||
['round_h']= {"回合制", "困难", "下棋"},
|
||||
['round_l']= {"回合制", "疯狂", "下棋"},
|
||||
['round_u']= {"回合制", "极限", "下棋"},
|
||||
['master_n']= {"大师", "普通", "无脑20G"},
|
||||
['master_h']= {"大师", "困难", "简单20G"},
|
||||
['master_final']= {"大师", "终点", "究极20G:真正的游戏"},
|
||||
['master_ph']= {"大师", "虚幻", "虚幻20G:好玩"},
|
||||
['master_ex']= {"宗师", "EX", "你行你上"},
|
||||
['rhythm_e']= {"节奏", "简单", "很无聊的"},
|
||||
['rhythm_h']= {"节奏", "困难", "好玩么?"},
|
||||
['rhythm_u']= {"节奏", "极限", "真男人不玩低难度"},
|
||||
['blind_e']= {"隐形", "半隐", "谁都能玩"},
|
||||
['blind_n']= {"隐形", "全隐", "稍加练习即可"},
|
||||
['blind_h']= {"隐形", "瞬隐", "和上一个一样"},
|
||||
['blind_l']= {"隐形", "瞬隐+", "这个确实挺难的"},
|
||||
['blind_u']= {"隐形", "啊这", "你准备好了吗"},
|
||||
['blind_wtf']= {"隐形", "不会吧", "还没准备好"},
|
||||
['classic_fast']= {"高速经典", "CTWC", "就这?简单"},
|
||||
['survivor_e']= {"生存", "简单", "这都玩不下去?不会吧"},
|
||||
['survivor_n']= {"生存", "普通", "呵,这都玩不过?"},
|
||||
['survivor_h']= {"生存", "困难", "所以呢?"},
|
||||
['survivor_l']= {"生存", "疯狂", "然后呢?"},
|
||||
['survivor_u']= {"生存", "极限", "舒服了"},
|
||||
['attacker_h']= {"进攻", "困难", "进攻练习"},
|
||||
['attacker_u']= {"进攻", "极限", "进攻练习"},
|
||||
['defender_n']= {"防守", "普通", "防守练习"},
|
||||
['defender_l']= {"防守", "疯狂", "防守练习"},
|
||||
['dig_h']= {"挖掘", "困难", "挖掘练习"},
|
||||
['dig_u']= {"挖掘", "极限", "挖掘练习"},
|
||||
['bigbang']= {"大爆炸", "简单", "All-spin 入门教程\n施工中"},
|
||||
['c4wtrain_n']= {"C4W练习", "普通", "无 限 连 击"},
|
||||
['c4wtrain_l']= {"C4W练习", "疯狂", "无 限 连 击"},
|
||||
['pctrain_n']= {"全清训练", "普通", "随便打打"},
|
||||
['pctrain_l']= {"全清训练", "疯狂", "建议不打"},
|
||||
['pc_n']= {"全清挑战", "普通", "100行内刷PC"},
|
||||
['pc_h']= {"全清挑战", "困难", "100行内刷PC"},
|
||||
['pc_l']= {"全清挑战", "疯狂", "100行内刷PC"},
|
||||
['pc_inf']= {"无尽全清挑战", "", "你这水平还是先别玩了"},
|
||||
['tech_n']= {"科研", "普通", "禁止断B2B"},
|
||||
['tech_n_plus']= {"科研", "普通+", "仅允许spin与PC"},
|
||||
['tech_h']= {"科研", "困难", "禁止断B2B"},
|
||||
['tech_h_plus']= {"科研", "困难+", "仅允许spin与PC"},
|
||||
['tech_l']= {"科研", "疯狂", "禁止断B2B"},
|
||||
['tech_l_plus']= {"科研", "疯狂+", "仅允许spin与PC"},
|
||||
['tech_finesse']= {"科研", "极简", "强制最简操作"},
|
||||
['tech_finesse_f']= {"科研", "极简+", "禁止普通消除,强制最简操作"},
|
||||
['tsd_e']= {"TSD挑战", "简单", "刷T2"},
|
||||
['tsd_h']= {"TSD挑战", "困难", "刷T2"},
|
||||
['tsd_u']= {"TSD挑战", "极限", "刷T2"},
|
||||
['backfire_n']= {"自攻自受", "普通", "100攻击很少的,冲冲冲"},
|
||||
['backfire_h']= {"自攻自受", "困难", "你在害怕什么"},
|
||||
['backfire_l']= {"自攻自受", "疯狂", "别怂啊,打攻击呀"},
|
||||
['backfire_u']= {"自攻自受", "极限", "能把自己玩死,不会吧"},
|
||||
['sprintAtk']= {"竞速", "100攻击", "送100行"},
|
||||
['zen']= {"禅", "200", "不限时200行"},
|
||||
['ultra']= {"限时打分", "挑战", "2分钟刷分"},
|
||||
['infinite']= {"无尽", "", "真的有人会玩这个?"},
|
||||
['infinite_dig']= {"无尽:挖掘", "", "闲得慌就来挖"},
|
||||
couldSave="云存档(测试,炸了别怪我)",
|
||||
notLogin="[不登录存个锤子]",
|
||||
upload="上传",
|
||||
download="下载",
|
||||
},
|
||||
},
|
||||
modes={
|
||||
['sprint_10l']= {"竞速", "10L", "消10行"},
|
||||
['sprint_20l']= {"竞速", "20L", "消20行"},
|
||||
['sprint_40l']= {"竞速", "40L", "消40行"},
|
||||
['sprint_100l']= {"竞速", "100L", "消100行"},
|
||||
['sprint_400l']= {"竞速", "400L", "消400行"},
|
||||
['sprint_1000l']= {"竞速", "1000L", "消1000行"},
|
||||
['sprintPenta']= {"竞速", "五连块", "离谱"},
|
||||
['sprintMPH']= {"竞速", "纯净", "听说你反应很快?"},
|
||||
['dig_10l']= {"挖掘", "10L", "挖10行"},
|
||||
['dig_40l']= {"挖掘", "40L", "挖40行"},
|
||||
['dig_100l']= {"挖掘", "100L", "挖100行"},
|
||||
['dig_400l']= {"挖掘", "400L", "挖400行"},
|
||||
['dig_1000l']= {"挖掘", "1000L", "挖1000行"},
|
||||
['drought_n']= {"干旱", "100L", "放轻松,简单得很"},
|
||||
['drought_l']= {"干旱+", "100L", "有趣的要来了"},
|
||||
['stack_e']= {"堆叠", "简单", "智力启蒙玩具(确信"},
|
||||
['stack_h']= {"堆叠", "困难", "智力启蒙玩具(确信"},
|
||||
['stack_u']= {"堆叠", "极限", "智力启蒙玩具(确信"},
|
||||
['marathon_n']= {"马拉松", "普通", "休闲模式"},
|
||||
['marathon_h']= {"马拉松", "困难", "休闲模式"},
|
||||
['solo_e']= {"单挑", "简单", "鲨AI"},
|
||||
['solo_n']= {"单挑", "普通", "鲨AI"},
|
||||
['solo_h']= {"单挑", "困难", "鲨AI"},
|
||||
['solo_l']= {"单挑", "疯狂", "鲨AI"},
|
||||
['solo_u']= {"单挑", "极限", "鲨AI"},
|
||||
['techmino49_e']= {"49人混战", "简单", "这我岂不是乱鲨"},
|
||||
['techmino49_h']= {"49人混战", "困难", "这我岂不是乱鲨"},
|
||||
['techmino49_u']= {"49人混战", "极限", "你吃鸡率多少?"},
|
||||
['techmino99_e']= {"99人混战", "简单", "这我岂不是乱鲨"},
|
||||
['techmino99_h']= {"99人混战", "困难", "这我岂不是乱鲨"},
|
||||
['techmino99_u']= {"99人混战", "极限", "你吃鸡率多少?"},
|
||||
['round_e']= {"回合制", "简单", "下棋"},
|
||||
['round_n']= {"回合制", "普通", "下棋"},
|
||||
['round_h']= {"回合制", "困难", "下棋"},
|
||||
['round_l']= {"回合制", "疯狂", "下棋"},
|
||||
['round_u']= {"回合制", "极限", "下棋"},
|
||||
['master_n']= {"大师", "普通", "无脑20G"},
|
||||
['master_h']= {"大师", "困难", "简单20G"},
|
||||
['master_final']= {"大师", "终点", "究极20G:真正的游戏"},
|
||||
['master_ph']= {"大师", "虚幻", "虚幻20G:好玩"},
|
||||
['master_ex']= {"宗师", "EX", "你行你上"},
|
||||
['rhythm_e']= {"节奏", "简单", "很无聊的"},
|
||||
['rhythm_h']= {"节奏", "困难", "好玩么?"},
|
||||
['rhythm_u']= {"节奏", "极限", "真男人不玩低难度"},
|
||||
['blind_e']= {"隐形", "半隐", "谁都能玩"},
|
||||
['blind_n']= {"隐形", "全隐", "稍加练习即可"},
|
||||
['blind_h']= {"隐形", "瞬隐", "和上一个一样"},
|
||||
['blind_l']= {"隐形", "瞬隐+", "这个确实挺难的"},
|
||||
['blind_u']= {"隐形", "啊这", "你准备好了吗"},
|
||||
['blind_wtf']= {"隐形", "不会吧", "还没准备好"},
|
||||
['classic_fast']= {"高速经典", "CTWC", "就这?简单"},
|
||||
['survivor_e']= {"生存", "简单", "这都玩不下去?不会吧"},
|
||||
['survivor_n']= {"生存", "普通", "呵,这都玩不过?"},
|
||||
['survivor_h']= {"生存", "困难", "所以呢?"},
|
||||
['survivor_l']= {"生存", "疯狂", "然后呢?"},
|
||||
['survivor_u']= {"生存", "极限", "舒服了"},
|
||||
['attacker_h']= {"进攻", "困难", "进攻练习"},
|
||||
['attacker_u']= {"进攻", "极限", "进攻练习"},
|
||||
['defender_n']= {"防守", "普通", "防守练习"},
|
||||
['defender_l']= {"防守", "疯狂", "防守练习"},
|
||||
['dig_h']= {"挖掘", "困难", "挖掘练习"},
|
||||
['dig_u']= {"挖掘", "极限", "挖掘练习"},
|
||||
['bigbang']= {"大爆炸", "简单", "All-spin 入门教程\n施工中"},
|
||||
['c4wtrain_n']= {"C4W练习", "普通", "无 限 连 击"},
|
||||
['c4wtrain_l']= {"C4W练习", "疯狂", "无 限 连 击"},
|
||||
['pctrain_n']= {"全清训练", "普通", "随便打打"},
|
||||
['pctrain_l']= {"全清训练", "疯狂", "建议不打"},
|
||||
['pc_n']= {"全清挑战", "普通", "100行内刷PC"},
|
||||
['pc_h']= {"全清挑战", "困难", "100行内刷PC"},
|
||||
['pc_l']= {"全清挑战", "疯狂", "100行内刷PC"},
|
||||
['pc_inf']= {"无尽全清挑战", "", "你这水平还是先别玩了"},
|
||||
['tech_n']= {"科研", "普通", "禁止断B2B"},
|
||||
['tech_n_plus']= {"科研", "普通+", "仅允许spin与PC"},
|
||||
['tech_h']= {"科研", "困难", "禁止断B2B"},
|
||||
['tech_h_plus']= {"科研", "困难+", "仅允许spin与PC"},
|
||||
['tech_l']= {"科研", "疯狂", "禁止断B2B"},
|
||||
['tech_l_plus']= {"科研", "疯狂+", "仅允许spin与PC"},
|
||||
['tech_finesse']= {"科研", "极简", "强制最简操作"},
|
||||
['tech_finesse_f']= {"科研", "极简+", "禁止普通消除,强制最简操作"},
|
||||
['tsd_e']= {"TSD挑战", "简单", "刷T2"},
|
||||
['tsd_h']= {"TSD挑战", "困难", "刷T2"},
|
||||
['tsd_u']= {"TSD挑战", "极限", "刷T2"},
|
||||
['backfire_n']= {"自攻自受", "普通", "100攻击很少的,冲冲冲"},
|
||||
['backfire_h']= {"自攻自受", "困难", "你在害怕什么"},
|
||||
['backfire_l']= {"自攻自受", "疯狂", "别怂啊,打攻击呀"},
|
||||
['backfire_u']= {"自攻自受", "极限", "能把自己玩死,不会吧"},
|
||||
['sprintAtk']= {"竞速", "100攻击", "送100行"},
|
||||
['zen']= {"禅", "200", "不限时200行"},
|
||||
['ultra']= {"限时打分", "挑战", "2分钟刷分"},
|
||||
['infinite']= {"无尽", "", "真的有人会玩这个?"},
|
||||
['infinite_dig']= {"无尽:挖掘", "", "闲得慌就来挖"},
|
||||
|
||||
['sprintFix']= {"竞速", "无移动"},
|
||||
['sprintLock']= {"竞速", "无旋转"},
|
||||
['sprintSmooth']= {"竞速", "无摩擦"},
|
||||
['marathon_bfmax']= {"马拉松", "极限"},
|
||||
['sprintFix']= {"竞速", "无移动"},
|
||||
['sprintLock']= {"竞速", "无旋转"},
|
||||
['sprintSmooth']= {"竞速", "无摩擦"},
|
||||
['marathon_bfmax']= {"马拉松", "极限"},
|
||||
|
||||
['master_l']= {"大师", "疯狂"},
|
||||
['master_u']= {"大师", "极限"},
|
||||
['master_l']= {"大师", "疯狂"},
|
||||
['master_u']= {"大师", "极限"},
|
||||
|
||||
['custom_clear']= {"自定义", "普通"},
|
||||
['custom_puzzle']= {"自定义", "拼图"},
|
||||
},
|
||||
['custom_clear']= {"自定义", "普通"},
|
||||
['custom_puzzle']= {"自定义", "拼图"},
|
||||
},
|
||||
}
|
||||
File diff suppressed because it is too large
Load Diff
@@ -1,230 +1,230 @@
|
||||
return{
|
||||
cmb={nil,"1连击","2连击","3连击","4连击","5连击","6连击","7连击","8连击","9连击","10连击!","11连击!","12连击!","13连击!","14连击!","15连击!","16连击!","17连击!","18连击!","19连击!","巨型连击"},
|
||||
spin="型回旋",
|
||||
clear={"单清","双清","三清","四清","五清","六清"},
|
||||
mini="迷你",b2b="满贯",b3b="大满贯",
|
||||
PC="场地全清",HPC="场地半清",
|
||||
cmb={nil,"1连击","2连击","3连击","4连击","5连击","6连击","7连击","8连击","9连击","10连击!","11连击!","12连击!","13连击!","14连击!","15连击!","16连击!","17连击!","18连击!","19连击!","巨型连击"},
|
||||
spin="型回旋",
|
||||
clear={"单清","双清","三清","四清","五清","六清"},
|
||||
mini="迷你",b2b="满贯",b3b="大满贯",
|
||||
PC="场地全清",HPC="场地半清",
|
||||
|
||||
great="不错!",
|
||||
awesome="精彩。",
|
||||
almost="差一点!",
|
||||
continue="继续。",
|
||||
great="不错!",
|
||||
awesome="精彩。",
|
||||
almost="差一点!",
|
||||
continue="继续。",
|
||||
|
||||
speedLV="速度等级",
|
||||
piece="块数",line="行数",atk="攻击",eff="效率",
|
||||
rpm="收每分",tsd="T2",
|
||||
grade="段位",techrash="消四",
|
||||
wave="波数",nextWave="下一波",
|
||||
combo="连击",maxcmb="最大连击",
|
||||
pc="全清",ko="淘汰",
|
||||
speedLV="速度等级",
|
||||
piece="块数",line="行数",atk="攻击",eff="效率",
|
||||
rpm="收每分",tsd="T2",
|
||||
grade="段位",techrash="消四",
|
||||
wave="波数",nextWave="下一波",
|
||||
combo="连击",maxcmb="最大连击",
|
||||
pc="全清",ko="淘汰",
|
||||
|
||||
finesse_ap="完美极简",
|
||||
finesse_fc="全连击",
|
||||
finesse_ap="完美极简",
|
||||
finesse_fc="全连击",
|
||||
|
||||
ai_fixed="不能同时开启电脑玩家和固定序列",
|
||||
ai_prebag="不能同时开启电脑玩家和含有非四连块的自定义序列",
|
||||
ai_mission="不能同时开启电脑玩家和自定义任务",
|
||||
ai_fixed="不能同时开启电脑玩家和固定序列",
|
||||
ai_prebag="不能同时开启电脑玩家和含有非四连块的自定义序列",
|
||||
ai_mission="不能同时开启电脑玩家和自定义任务",
|
||||
|
||||
ranks={"差","可","中","良","优"},
|
||||
ranks={"差","可","中","良","优"},
|
||||
|
||||
modInstruction="选择你要使用的模组!\n不同的模组会用不同的方式改变游戏规则,来开发新玩法挑战自我吧!\n提醒:开启一些模组会让成绩无效 你可以用键盘开关模组,按tab重置",
|
||||
modInfo={
|
||||
next="预览数量:\n强制使用预览的个数",
|
||||
hold="暂存数量:\n强制使用暂存的个数",
|
||||
hideNext="隐藏预览:\n隐藏前几个预览",
|
||||
infHold="无限暂存:\n可以无限制使用暂存",
|
||||
forceB2B="强制满贯:\n满贯点数条掉到启动线以下就会结束游戏",
|
||||
},
|
||||
pauseStat={
|
||||
"时间:",
|
||||
"按键/旋转/暂存:",
|
||||
"落块:",
|
||||
"消行/挖掘:",
|
||||
"攻击/挖掘攻击:",
|
||||
"上涨/接收/抵消:",
|
||||
"消除:",
|
||||
"回旋:",
|
||||
"(大)满贯/全(半)清:",
|
||||
"非极简操作:",
|
||||
},
|
||||
radar={"防","守","攻","送","速","挖"},
|
||||
radarData={"防/分","守/分","攻/分","送/分","行/分","挖/分"},
|
||||
WidgetText={
|
||||
mode={
|
||||
mod="模组(F1)",
|
||||
},
|
||||
mod={
|
||||
title="模组",
|
||||
},
|
||||
setting_control={
|
||||
das="首次移动延迟",arr="移动重复延迟",
|
||||
sddas="首次软降延迟",sdarr="软降重复延迟",
|
||||
ihs="提前暂存",
|
||||
},
|
||||
setting_skin={
|
||||
spin1="转",spin2="转",spin3="转",spin4="转",spin5="转",spin6="转",spin7="转",
|
||||
},
|
||||
customGame={
|
||||
mod="模组(F1)",
|
||||
modInstruction="选择你要使用的模组!\n不同的模组会用不同的方式改变游戏规则,来开发新玩法挑战自我吧!\n提醒:开启一些模组会让成绩无效 你可以用键盘开关模组,按tab重置",
|
||||
modInfo={
|
||||
next="预览数量:\n强制使用预览的个数",
|
||||
hold="暂存数量:\n强制使用暂存的个数",
|
||||
hideNext="隐藏预览:\n隐藏前几个预览",
|
||||
infHold="无限暂存:\n可以无限制使用暂存",
|
||||
forceB2B="强制满贯:\n满贯点数条掉到启动线以下就会结束游戏",
|
||||
},
|
||||
pauseStat={
|
||||
"时间:",
|
||||
"按键/旋转/暂存:",
|
||||
"落块:",
|
||||
"消行/挖掘:",
|
||||
"攻击/挖掘攻击:",
|
||||
"上涨/接收/抵消:",
|
||||
"消除:",
|
||||
"回旋:",
|
||||
"(大)满贯/全(半)清:",
|
||||
"非极简操作:",
|
||||
},
|
||||
radar={"防","守","攻","送","速","挖"},
|
||||
radarData={"防/分","守/分","攻/分","送/分","行/分","挖/分"},
|
||||
WidgetText={
|
||||
mode={
|
||||
mod="模组(F1)",
|
||||
},
|
||||
mod={
|
||||
title="模组",
|
||||
},
|
||||
setting_control={
|
||||
das="首次移动延迟",arr="移动重复延迟",
|
||||
sddas="首次软降延迟",sdarr="软降重复延迟",
|
||||
ihs="提前暂存",
|
||||
},
|
||||
setting_skin={
|
||||
spin1="转",spin2="转",spin3="转",spin4="转",spin5="转",spin6="转",spin7="转",
|
||||
},
|
||||
customGame={
|
||||
mod="模组(F1)",
|
||||
|
||||
nextCount="预览个数",
|
||||
holdCount="暂存个数",
|
||||
infHold="无限暂存",
|
||||
phyHold="物理暂存",
|
||||
},
|
||||
sound={
|
||||
clear1="消一",
|
||||
clear2="消二",
|
||||
clear3="消三",
|
||||
clear4="消四",
|
||||
spin0="空旋转",
|
||||
spin1="旋转消一",
|
||||
spin2="旋转消二",
|
||||
spin3="旋转消三",
|
||||
nextCount="预览个数",
|
||||
holdCount="暂存个数",
|
||||
infHold="无限暂存",
|
||||
phyHold="物理暂存",
|
||||
},
|
||||
sound={
|
||||
clear1="消一",
|
||||
clear2="消二",
|
||||
clear3="消三",
|
||||
clear4="消四",
|
||||
spin0="空旋转",
|
||||
spin1="旋转消一",
|
||||
spin2="旋转消二",
|
||||
spin3="旋转消三",
|
||||
|
||||
_1="消一",
|
||||
_2="消二",
|
||||
_3="消三",
|
||||
_4="消四",
|
||||
z0="Z旋",
|
||||
z1="Z旋消一",
|
||||
z2="Z旋消二",
|
||||
z3="Z旋消三",
|
||||
s0="S旋",
|
||||
s1="S旋消一",
|
||||
s2="S旋消二",
|
||||
s3="S旋消三",
|
||||
_1="消一",
|
||||
_2="消二",
|
||||
_3="消三",
|
||||
_4="消四",
|
||||
z0="Z旋",
|
||||
z1="Z旋消一",
|
||||
z2="Z旋消二",
|
||||
z3="Z旋消三",
|
||||
s0="S旋",
|
||||
s1="S旋消一",
|
||||
s2="S旋消二",
|
||||
s3="S旋消三",
|
||||
|
||||
j0="J旋",
|
||||
j1="J旋消一",
|
||||
j2="J旋消二",
|
||||
j3="J旋消三",
|
||||
l0="L旋",
|
||||
l1="L旋消一",
|
||||
l2="L旋消二",
|
||||
l3="L旋消三",
|
||||
j0="J旋",
|
||||
j1="J旋消一",
|
||||
j2="J旋消二",
|
||||
j3="J旋消三",
|
||||
l0="L旋",
|
||||
l1="L旋消一",
|
||||
l2="L旋消二",
|
||||
l3="L旋消三",
|
||||
|
||||
t0="T旋",
|
||||
t1="T旋消一",
|
||||
t2="T旋消二",
|
||||
t3="T旋消三",
|
||||
o0="O旋",
|
||||
o1="O旋消一",
|
||||
o2="O旋消二",
|
||||
o3="O旋消三",
|
||||
t0="T旋",
|
||||
t1="T旋消一",
|
||||
t2="T旋消二",
|
||||
t3="T旋消三",
|
||||
o0="O旋",
|
||||
o1="O旋消一",
|
||||
o2="O旋消二",
|
||||
o3="O旋消三",
|
||||
|
||||
i0="I旋",
|
||||
i1="I旋消一",
|
||||
i2="I旋消二",
|
||||
i3="I旋消三",
|
||||
i0="I旋",
|
||||
i1="I旋消一",
|
||||
i2="I旋消二",
|
||||
i3="I旋消三",
|
||||
|
||||
mini="迷你",
|
||||
b2b="满贯",
|
||||
b3b="大满贯",
|
||||
pc="全清",
|
||||
},
|
||||
},
|
||||
modes={
|
||||
['sprint_10l']= {"竞速", "10行", "消除10行"},
|
||||
['sprint_20l']= {"竞速", "20行", "消除20行"},
|
||||
['sprint_40l']= {"竞速", "40行", "消除40行"},
|
||||
['sprint_100l']= {"竞速", "100行", "消除100行"},
|
||||
['sprint_400l']= {"竞速", "400行", "消除400行"},
|
||||
['sprint_1000l']= {"竞速", "1000行", "消除1000行"},
|
||||
['sprintPenta']= {"竞速", "五连块", "伤脑筋十八块"},
|
||||
['sprintMPH']= {"竞速", "纯净", "纯随机\n无预览\n无暂存"},
|
||||
['dig_10l']= {"挖掘", "10L", "挖掘10行"},
|
||||
['dig_40l']= {"挖掘", "40L", "挖掘40行"},
|
||||
['dig_100l']= {"挖掘", "100L", "挖掘100行"},
|
||||
['dig_400l']= {"挖掘", "400L", "挖掘400行"},
|
||||
['dig_1000l']= {"挖掘", "1000L", "挖掘1000行"},
|
||||
['drought_n']= {"干旱", "100行", "你I没了"},
|
||||
['drought_l']= {"干旱+", "100行", "后 妈 发 牌"},
|
||||
['stack_e']= {"堆积", "简单", "搭积木"},
|
||||
['stack_h']= {"堆积", "困难", "搭积木"},
|
||||
['stack_u']= {"堆积", "极限", "搭积木"},
|
||||
['marathon_n']= {"马拉松", "普通", "200行加速马拉松"},
|
||||
['marathon_h']= {"马拉松", "困难", "200行高速马拉松"},
|
||||
['solo_e']= {"单挑", "简单", "打败机器人"},
|
||||
['solo_n']= {"单挑", "普通", "打败机器人"},
|
||||
['solo_h']= {"单挑", "困难", "打败机器人"},
|
||||
['solo_l']= {"单挑", "疯狂", "打败机器人"},
|
||||
['solo_u']= {"单挑", "极限", "打败机器人"},
|
||||
['techmino49_e']= {"49人混战", "简单", "49人混战,活到最后"},
|
||||
['techmino49_h']= {"49人混战", "困难", "49人混战,活到最后"},
|
||||
['techmino49_u']= {"49人混战", "极限", "49人混战,活到最后"},
|
||||
['techmino99_e']= {"99人混战", "简单", "99人混战,活到最后"},
|
||||
['techmino99_h']= {"99人混战", "困难", "99人混战,活到最后"},
|
||||
['techmino99_u']= {"99人混战", "极限", "99人混战,活到最后"},
|
||||
['round_e']= {"回合制", "简单", "下棋模式"},
|
||||
['round_n']= {"回合制", "普通", "下棋模式"},
|
||||
['round_h']= {"回合制", "困难", "下棋模式"},
|
||||
['round_l']= {"回合制", "疯狂", "下棋模式"},
|
||||
['round_u']= {"回合制", "极限", "下棋模式"},
|
||||
['master_n']= {"大师", "普通", "20G初心者练习"},
|
||||
['master_h']= {"大师", "困难", "上级者20G挑战"},
|
||||
['master_final']= {"大师", "终点", "究极20G:无法触及的终点"},
|
||||
['master_ph']= {"大师", "虚幻", "虚幻20G:???"},
|
||||
['master_ex']= {"宗师", "EX", "成为方块大师"},
|
||||
['rhythm_e']= {"节奏", "简单", "200行低速节奏马拉松"},
|
||||
['rhythm_h']= {"节奏", "困难", "200行中速节奏马拉松"},
|
||||
['rhythm_u']= {"节奏", "极限", "200行高速节奏马拉松"},
|
||||
['blind_e']= {"隐形", "半隐", "不强大脑"},
|
||||
['blind_n']= {"隐形", "全隐", "挺强大脑"},
|
||||
['blind_h']= {"隐形", "瞬隐", "很强大脑"},
|
||||
['blind_l']= {"隐形", "瞬隐+", "超强大脑"},
|
||||
['blind_u']= {"隐形", "啊这", "你准备好了吗"},
|
||||
['blind_wtf']= {"隐形", "不会吧", "还没准备好"},
|
||||
['classic_fast']= {"高速经典", "CTWC", "高速经典"},
|
||||
['survivor_e']= {"生存", "简单", "你能存活多久?"},
|
||||
['survivor_n']= {"生存", "普通", "你能存活多久?"},
|
||||
['survivor_h']= {"生存", "困难", "你能存活多久?"},
|
||||
['survivor_l']= {"生存", "疯狂", "你能存活多久?"},
|
||||
['survivor_u']= {"生存", "极限", "你能存活多久?"},
|
||||
['attacker_h']= {"进攻", "困难", "进攻练习"},
|
||||
['attacker_u']= {"进攻", "极限", "进攻练习"},
|
||||
['defender_n']= {"防守", "普通", "防守练习"},
|
||||
['defender_l']= {"防守", "疯狂", "防守练习"},
|
||||
['dig_h']= {"挖掘", "困难", "挖掘练习"},
|
||||
['dig_u']= {"挖掘", "极限", "挖掘练习"},
|
||||
['bigbang']= {"大爆炸", "简单", "All-spin 入门教程\n施工中"},
|
||||
['c4wtrain_n']= {"中四宽练习", "普通", "无 限 连 击"},
|
||||
['c4wtrain_l']= {"中四宽练习", "疯狂", "无 限 连 击"},
|
||||
['pctrain_n']= {"全清训练", "普通", "简易全清题库,熟悉全清定式的组合"},
|
||||
['pctrain_l']= {"全清训练", "疯狂", "困难PC题库,强算力者进"},
|
||||
['pc_n']= {"全清挑战", "普通", "100行内刷全清"},
|
||||
['pc_h']= {"全清挑战", "困难", "100行内刷全清"},
|
||||
['pc_l']= {"全清挑战", "疯狂", "100行内刷全清"},
|
||||
['pc_inf']= {"无尽全清挑战", "", "你能连续做多少PC?"},
|
||||
['tech_n']= {"科研", "普通", "禁止断B2B"},
|
||||
['tech_n_plus']= {"科研", "普通+", "仅允许回旋与全清"},
|
||||
['tech_h']= {"科研", "困难", "禁止断B2B"},
|
||||
['tech_h_plus']= {"科研", "困难+", "仅允许回旋与全清"},
|
||||
['tech_l']= {"科研", "疯狂", "禁止断B2B"},
|
||||
['tech_l_plus']= {"科研", "疯狂+", "仅允许spin与PC"},
|
||||
['tech_finesse']= {"科研", "极简", "强制最简操作"},
|
||||
['tech_finesse_f']= {"科研", "极简+", "禁止普通消除,强制最简操作"},
|
||||
['tsd_e']= {"T2挑战", "简单", "你能连续做几个T旋双清?"},
|
||||
['tsd_h']= {"T2挑战", "困难", "你能连续做几个T旋双清?"},
|
||||
['tsd_u']= {"T2挑战", "极限", "你能连续做几个T旋双清?"},
|
||||
['backfire_n']= {"自攻自防", "普通", "打出100攻击"},
|
||||
['backfire_h']= {"自攻自防", "困难", "打出100攻击"},
|
||||
['backfire_l']= {"自攻自防", "疯狂", "打出100攻击"},
|
||||
['backfire_u']= {"自攻自防", "极限", "打出100攻击"},
|
||||
['sprintAtk']= {"竞速", "100攻击", "打出100攻击"},
|
||||
['zen']= {"禅", "200", "不限时200行"},
|
||||
['ultra']= {"限时打分", "挑战", "在两分钟内尽可能拿到最多的分数"},
|
||||
['infinite']= {"无尽", "", "沙盒"},
|
||||
['infinite_dig']= {"无尽:挖掘", "", "挖呀挖呀挖"},
|
||||
mini="迷你",
|
||||
b2b="满贯",
|
||||
b3b="大满贯",
|
||||
pc="全清",
|
||||
},
|
||||
},
|
||||
modes={
|
||||
['sprint_10l']= {"竞速", "10行", "消除10行"},
|
||||
['sprint_20l']= {"竞速", "20行", "消除20行"},
|
||||
['sprint_40l']= {"竞速", "40行", "消除40行"},
|
||||
['sprint_100l']= {"竞速", "100行", "消除100行"},
|
||||
['sprint_400l']= {"竞速", "400行", "消除400行"},
|
||||
['sprint_1000l']= {"竞速", "1000行", "消除1000行"},
|
||||
['sprintPenta']= {"竞速", "五连块", "伤脑筋十八块"},
|
||||
['sprintMPH']= {"竞速", "纯净", "纯随机\n无预览\n无暂存"},
|
||||
['dig_10l']= {"挖掘", "10L", "挖掘10行"},
|
||||
['dig_40l']= {"挖掘", "40L", "挖掘40行"},
|
||||
['dig_100l']= {"挖掘", "100L", "挖掘100行"},
|
||||
['dig_400l']= {"挖掘", "400L", "挖掘400行"},
|
||||
['dig_1000l']= {"挖掘", "1000L", "挖掘1000行"},
|
||||
['drought_n']= {"干旱", "100行", "你I没了"},
|
||||
['drought_l']= {"干旱+", "100行", "后 妈 发 牌"},
|
||||
['stack_e']= {"堆积", "简单", "搭积木"},
|
||||
['stack_h']= {"堆积", "困难", "搭积木"},
|
||||
['stack_u']= {"堆积", "极限", "搭积木"},
|
||||
['marathon_n']= {"马拉松", "普通", "200行加速马拉松"},
|
||||
['marathon_h']= {"马拉松", "困难", "200行高速马拉松"},
|
||||
['solo_e']= {"单挑", "简单", "打败机器人"},
|
||||
['solo_n']= {"单挑", "普通", "打败机器人"},
|
||||
['solo_h']= {"单挑", "困难", "打败机器人"},
|
||||
['solo_l']= {"单挑", "疯狂", "打败机器人"},
|
||||
['solo_u']= {"单挑", "极限", "打败机器人"},
|
||||
['techmino49_e']= {"49人混战", "简单", "49人混战,活到最后"},
|
||||
['techmino49_h']= {"49人混战", "困难", "49人混战,活到最后"},
|
||||
['techmino49_u']= {"49人混战", "极限", "49人混战,活到最后"},
|
||||
['techmino99_e']= {"99人混战", "简单", "99人混战,活到最后"},
|
||||
['techmino99_h']= {"99人混战", "困难", "99人混战,活到最后"},
|
||||
['techmino99_u']= {"99人混战", "极限", "99人混战,活到最后"},
|
||||
['round_e']= {"回合制", "简单", "下棋模式"},
|
||||
['round_n']= {"回合制", "普通", "下棋模式"},
|
||||
['round_h']= {"回合制", "困难", "下棋模式"},
|
||||
['round_l']= {"回合制", "疯狂", "下棋模式"},
|
||||
['round_u']= {"回合制", "极限", "下棋模式"},
|
||||
['master_n']= {"大师", "普通", "20G初心者练习"},
|
||||
['master_h']= {"大师", "困难", "上级者20G挑战"},
|
||||
['master_final']= {"大师", "终点", "究极20G:无法触及的终点"},
|
||||
['master_ph']= {"大师", "虚幻", "虚幻20G:???"},
|
||||
['master_ex']= {"宗师", "EX", "成为方块大师"},
|
||||
['rhythm_e']= {"节奏", "简单", "200行低速节奏马拉松"},
|
||||
['rhythm_h']= {"节奏", "困难", "200行中速节奏马拉松"},
|
||||
['rhythm_u']= {"节奏", "极限", "200行高速节奏马拉松"},
|
||||
['blind_e']= {"隐形", "半隐", "不强大脑"},
|
||||
['blind_n']= {"隐形", "全隐", "挺强大脑"},
|
||||
['blind_h']= {"隐形", "瞬隐", "很强大脑"},
|
||||
['blind_l']= {"隐形", "瞬隐+", "超强大脑"},
|
||||
['blind_u']= {"隐形", "啊这", "你准备好了吗"},
|
||||
['blind_wtf']= {"隐形", "不会吧", "还没准备好"},
|
||||
['classic_fast']= {"高速经典", "CTWC", "高速经典"},
|
||||
['survivor_e']= {"生存", "简单", "你能存活多久?"},
|
||||
['survivor_n']= {"生存", "普通", "你能存活多久?"},
|
||||
['survivor_h']= {"生存", "困难", "你能存活多久?"},
|
||||
['survivor_l']= {"生存", "疯狂", "你能存活多久?"},
|
||||
['survivor_u']= {"生存", "极限", "你能存活多久?"},
|
||||
['attacker_h']= {"进攻", "困难", "进攻练习"},
|
||||
['attacker_u']= {"进攻", "极限", "进攻练习"},
|
||||
['defender_n']= {"防守", "普通", "防守练习"},
|
||||
['defender_l']= {"防守", "疯狂", "防守练习"},
|
||||
['dig_h']= {"挖掘", "困难", "挖掘练习"},
|
||||
['dig_u']= {"挖掘", "极限", "挖掘练习"},
|
||||
['bigbang']= {"大爆炸", "简单", "All-spin 入门教程\n施工中"},
|
||||
['c4wtrain_n']= {"中四宽练习", "普通", "无 限 连 击"},
|
||||
['c4wtrain_l']= {"中四宽练习", "疯狂", "无 限 连 击"},
|
||||
['pctrain_n']= {"全清训练", "普通", "简易全清题库,熟悉全清定式的组合"},
|
||||
['pctrain_l']= {"全清训练", "疯狂", "困难PC题库,强算力者进"},
|
||||
['pc_n']= {"全清挑战", "普通", "100行内刷全清"},
|
||||
['pc_h']= {"全清挑战", "困难", "100行内刷全清"},
|
||||
['pc_l']= {"全清挑战", "疯狂", "100行内刷全清"},
|
||||
['pc_inf']= {"无尽全清挑战", "", "你能连续做多少PC?"},
|
||||
['tech_n']= {"科研", "普通", "禁止断B2B"},
|
||||
['tech_n_plus']= {"科研", "普通+", "仅允许回旋与全清"},
|
||||
['tech_h']= {"科研", "困难", "禁止断B2B"},
|
||||
['tech_h_plus']= {"科研", "困难+", "仅允许回旋与全清"},
|
||||
['tech_l']= {"科研", "疯狂", "禁止断B2B"},
|
||||
['tech_l_plus']= {"科研", "疯狂+", "仅允许spin与PC"},
|
||||
['tech_finesse']= {"科研", "极简", "强制最简操作"},
|
||||
['tech_finesse_f']= {"科研", "极简+", "禁止普通消除,强制最简操作"},
|
||||
['tsd_e']= {"T2挑战", "简单", "你能连续做几个T旋双清?"},
|
||||
['tsd_h']= {"T2挑战", "困难", "你能连续做几个T旋双清?"},
|
||||
['tsd_u']= {"T2挑战", "极限", "你能连续做几个T旋双清?"},
|
||||
['backfire_n']= {"自攻自防", "普通", "打出100攻击"},
|
||||
['backfire_h']= {"自攻自防", "困难", "打出100攻击"},
|
||||
['backfire_l']= {"自攻自防", "疯狂", "打出100攻击"},
|
||||
['backfire_u']= {"自攻自防", "极限", "打出100攻击"},
|
||||
['sprintAtk']= {"竞速", "100攻击", "打出100攻击"},
|
||||
['zen']= {"禅", "200", "不限时200行"},
|
||||
['ultra']= {"限时打分", "挑战", "在两分钟内尽可能拿到最多的分数"},
|
||||
['infinite']= {"无尽", "", "沙盒"},
|
||||
['infinite_dig']= {"无尽:挖掘", "", "挖呀挖呀挖"},
|
||||
|
||||
['sprintFix']= {"竞速", "无移动"},
|
||||
['sprintLock']= {"竞速", "无旋转"},
|
||||
['sprintSmooth']= {"竞速", "无摩擦"},
|
||||
['marathon_bfmax']= {"马拉松", "极限"},
|
||||
['sprintFix']= {"竞速", "无移动"},
|
||||
['sprintLock']= {"竞速", "无旋转"},
|
||||
['sprintSmooth']= {"竞速", "无摩擦"},
|
||||
['marathon_bfmax']= {"马拉松", "极限"},
|
||||
|
||||
['master_l']= {"大师", "疯狂"},
|
||||
['master_u']= {"大师", "极限"},
|
||||
['custom_clear']= {"自定义", "普通"},
|
||||
['custom_puzzle']= {"自定义", "拼图"},
|
||||
},
|
||||
['master_l']= {"大师", "疯狂"},
|
||||
['master_u']= {"大师", "极限"},
|
||||
['custom_clear']= {"自定义", "普通"},
|
||||
['custom_puzzle']= {"自定义", "拼图"},
|
||||
},
|
||||
}
|
||||
@@ -1,92 +1,92 @@
|
||||
return STRING.split([=[
|
||||
Gameplay:
|
||||
The system will provide you with tetrominoes (4-block pieces),
|
||||
with a total of 7 types, and the player needs to control them
|
||||
(move left and right, rotate 90, 180 or 270 degrees).
|
||||
each row filled with the field will be cleared.
|
||||
If there is an opponent, an attack will be sent depending on the line clear type
|
||||
Play until the end or achieve the level's goal to win.
|
||||
The system will provide you with tetrominoes (4-block pieces),
|
||||
with a total of 7 types, and the player needs to control them
|
||||
(move left and right, rotate 90, 180 or 270 degrees).
|
||||
each row filled with the field will be cleared.
|
||||
If there is an opponent, an attack will be sent depending on the line clear type
|
||||
Play until the end or achieve the level's goal to win.
|
||||
|
||||
Rotation system:
|
||||
Uses Techmino's custom rotation system. Too lazy to write the details
|
||||
Uses Techmino's custom rotation system. Too lazy to write the details
|
||||
|
||||
Spin detection:
|
||||
Satisfies "3 corner" rule +2 points
|
||||
Satisfies "immobile" rule +2 points
|
||||
- As long as one of the above is true, it is a Spin
|
||||
Satisfies "3 corner" rule +2 points
|
||||
Satisfies "immobile" rule +2 points
|
||||
- As long as one of the above is true, it is a Spin
|
||||
|
||||
If the rotation was not using the second check in the kick table, +1 point
|
||||
- The Spin is a Mini if it only has 2 points; the piece is one of S, Z, J, L, T; AND the line clear did not clear the entire piece.
|
||||
If the rotation was not using the second check in the kick table, +1 point
|
||||
- The Spin is a Mini if it only has 2 points; the piece is one of S, Z, J, L, T; AND the line clear did not clear the entire piece.
|
||||
|
||||
Attack system:
|
||||
Normal line clears (1 to 3 lines):
|
||||
Sends (lines cleared -0.5) attack
|
||||
Special line clears:
|
||||
Spin sends (lines cleared x2) attack,
|
||||
- B2B sends extra 1/1/2/4/8 for Spin Single/Double/Triple/Techrash/Techrash+
|
||||
- B2B2B sends (lines cleared x0.5), and +1 extra blocking
|
||||
- Minis reduces the attack to 25% (x0.25 multiplier)
|
||||
Non-Spin Techrash/Techrash+ sends (lines cleared) attack,
|
||||
- B2B sends 1 additional line
|
||||
- B2B2B will have an attack boost of 50% and +1 extra blocking
|
||||
Normal line clears (1 to 3 lines):
|
||||
Sends (lines cleared -0.5) attack
|
||||
Special line clears:
|
||||
Spin sends (lines cleared x2) attack,
|
||||
- B2B sends extra 1/1/2/4/8 for Spin Single/Double/Triple/Techrash/Techrash+
|
||||
- B2B2B sends (lines cleared x0.5), and +1 extra blocking
|
||||
- Minis reduces the attack to 25% (x0.25 multiplier)
|
||||
Non-Spin Techrash/Techrash+ sends (lines cleared) attack,
|
||||
- B2B sends 1 additional line
|
||||
- B2B2B will have an attack boost of 50% and +1 extra blocking
|
||||
|
||||
Special line clears will the increase B2B gauge, making later special line clears have either a B2B or B2B2B bonus (see below)
|
||||
Special line clears will the increase B2B gauge, making later special line clears have either a B2B or B2B2B bonus (see below)
|
||||
|
||||
Hemi Perfect Clear (a P.C. "with blocks left below". If it's an I clearing 1 line, the remaining blocks must not be player-placed):
|
||||
Attack +4, Extra Blocking +2
|
||||
Hemi Perfect Clear (a P.C. "with blocks left below". If it's an I clearing 1 line, the remaining blocks must not be player-placed):
|
||||
Attack +4, Extra Blocking +2
|
||||
|
||||
Perfect Clear (aka All Clear):
|
||||
Sends 8 to 16 (increments within a game by 2 for every PC) OR every other damage above, whichever is higher,
|
||||
and +2 extra blocking.
|
||||
Perfect Clear (aka All Clear):
|
||||
Sends 8 to 16 (increments within a game by 2 for every PC) OR every other damage above, whichever is higher,
|
||||
and +2 extra blocking.
|
||||
|
||||
Combos: All damage above will be given a (combo x25%) bonus, or (combo x15%) for Single clear (capped at 12 combo),
|
||||
+1 more attack for 3 Combo or more.
|
||||
After calculating all above, the damage value will be rounded down then sent
|
||||
Combos: All damage above will be given a (combo x25%) bonus, or (combo x15%) for Single clear (capped at 12 combo),
|
||||
+1 more attack for 3 Combo or more.
|
||||
After calculating all above, the damage value will be rounded down then sent
|
||||
|
||||
Score system:
|
||||
The better you play, the higher the score.
|
||||
The better you play, the higher the score.
|
||||
|
||||
Attack delay:
|
||||
Attacks from Doubles/Triples take effect the fastest;
|
||||
Followed by Techrash, Spins, which send slower attacks;
|
||||
High combos are the slowest;
|
||||
For B2B or B2B2B, they also increase the attack delay while they increase lines sent;
|
||||
Minis will greatly increase the delay.
|
||||
Attacks from Doubles/Triples take effect the fastest;
|
||||
Followed by Techrash, Spins, which send slower attacks;
|
||||
High combos are the slowest;
|
||||
For B2B or B2B2B, they also increase the attack delay while they increase lines sent;
|
||||
Minis will greatly increase the delay.
|
||||
|
||||
Countering:
|
||||
When you send attacks, if there is garbage in queue,
|
||||
extra blocking will be used first, then attack, countering the earliest attack at a 1:1 ratio.
|
||||
Any extra blocking you didn't use will be discarded, and finally the remaining attack power will be sent to your opponent.
|
||||
When you send attacks, if there is garbage in queue,
|
||||
extra blocking will be used first, then attack, countering the earliest attack at a 1:1 ratio.
|
||||
Any extra blocking you didn't use will be discarded, and finally the remaining attack power will be sent to your opponent.
|
||||
|
||||
Back to Back (B2B) gauge:
|
||||
The B2B gauge ranges from 0 to 1,000. Special line clears are B2B if the gauge is >=50, B2B2B if >800.
|
||||
A regular line clear -250
|
||||
Spin Single/Double/Triple/Techrash/Techrash+ + 50/100/180/800/1000 (x50% if Mini)
|
||||
Techrash/Techrash+ + 150/200/...
|
||||
PC when lines cleared in this round >4, +800
|
||||
Hemi-PC, +100
|
||||
Spin (0 lines) +20. Do note that the B2B gauge cannot exceed 800 using this method.
|
||||
When gauge is above 800, a drop without clearing lines decreases it by 40, but cannot drop below 800
|
||||
The B2B gauge ranges from 0 to 1,000. Special line clears are B2B if the gauge is >=50, B2B2B if >800.
|
||||
A regular line clear -250
|
||||
Spin Single/Double/Triple/Techrash/Techrash+ + 50/100/180/800/1000 (x50% if Mini)
|
||||
Techrash/Techrash+ + 150/200/...
|
||||
PC when lines cleared in this round >4, +800
|
||||
Hemi-PC, +100
|
||||
Spin (0 lines) +20. Do note that the B2B gauge cannot exceed 800 using this method.
|
||||
When gauge is above 800, a drop without clearing lines decreases it by 40, but cannot drop below 800
|
||||
|
||||
Battle Royale modes:
|
||||
Many players play a game at the same time (against AI bots, not real players).
|
||||
As players get eliminated, blocks fall faster, and garbage take effect faster, as well as rise faster.
|
||||
Eliminate other players to gain a badge and the player's badge to increase your attack power.
|
||||
Players can choose between four attack modes:
|
||||
1. Random: Every time you attack, 10% chance to lock onto a random player.
|
||||
2. Badges: After you attack or when your target dies, lock onto the player with the most badges.
|
||||
3. KOs: After you attack or when your target dies, lock onto the player with the highest field. (Refreshes every second)
|
||||
4. Attackers: attack all players locking onto yourself.
|
||||
Your attack will be sent to all of them. If you are not targetted, you attack a random player (not locking).
|
||||
When all opponents have been eliminated, the last player in the match is the winner.
|
||||
Many players play a game at the same time (against AI bots, not real players).
|
||||
As players get eliminated, blocks fall faster, and garbage take effect faster, as well as rise faster.
|
||||
Eliminate other players to gain a badge and the player's badge to increase your attack power.
|
||||
Players can choose between four attack modes:
|
||||
1. Random: Every time you attack, 10% chance to lock onto a random player.
|
||||
2. Badges: After you attack or when your target dies, lock onto the player with the most badges.
|
||||
3. KOs: After you attack or when your target dies, lock onto the player with the highest field. (Refreshes every second)
|
||||
4. Attackers: attack all players locking onto yourself.
|
||||
Your attack will be sent to all of them. If you are not targetted, you attack a random player (not locking).
|
||||
When all opponents have been eliminated, the last player in the match is the winner.
|
||||
|
||||
Custom mode:
|
||||
You can freely adjust most parameters (not including special effects of other game modes).
|
||||
You can also draw a field to clear or make a template to build.
|
||||
In build (puzzle) mode, you can toggle template display with Function key:
|
||||
Cells with a X cannot have blocks;
|
||||
empty cells can be in any state;
|
||||
regular colored cells have to be made of the corresponding block;
|
||||
garbage-colored cells can be any block but not air.
|
||||
Once you make the shape, you will win.
|
||||
You can freely adjust most parameters (not including special effects of other game modes).
|
||||
You can also draw a field to clear or make a template to build.
|
||||
In build (puzzle) mode, you can toggle template display with Function key:
|
||||
Cells with a X cannot have blocks;
|
||||
empty cells can be in any state;
|
||||
regular colored cells have to be made of the corresponding block;
|
||||
garbage-colored cells can be any block but not air.
|
||||
Once you make the shape, you will win.
|
||||
]=],"\n")
|
||||
|
||||
@@ -1,76 +1,76 @@
|
||||
return STRING.split([=[
|
||||
游戏方法:
|
||||
系统会提供的一个个四连骨牌("方块",总共7种)
|
||||
玩家需要控制(左右移动和旋转90,180,270度)这些骨牌直到下落到场地底部,锁定
|
||||
每填满场地的一行就会将其消除(如果有对手的话根据消除方式会给对手攻击)
|
||||
尝试存活更久,或者完成目标即胜利.
|
||||
系统会提供的一个个四连骨牌("方块",总共7种)
|
||||
玩家需要控制(左右移动和旋转90,180,270度)这些骨牌直到下落到场地底部,锁定
|
||||
每填满场地的一行就会将其消除(如果有对手的话根据消除方式会给对手攻击)
|
||||
尝试存活更久,或者完成目标即胜利.
|
||||
|
||||
旋转系统:
|
||||
使用Techmino专属旋转系统,具体太复杂并且随时可能更改所以不写在这里,可以去parts/kicklist.lua看
|
||||
使用Techmino专属旋转系统,具体太复杂并且随时可能更改所以不写在这里,可以去parts/kicklist.lua看
|
||||
|
||||
spin判定:
|
||||
满足三角判定+2分
|
||||
满足不可移动判定+2分
|
||||
--满足以上之一就算是spin
|
||||
满足非第二个test+1分
|
||||
--如果分数只有2,方块是SZJLT之一,并且没有把当前方块整个消除那么就是mini
|
||||
满足三角判定+2分
|
||||
满足不可移动判定+2分
|
||||
--满足以上之一就算是spin
|
||||
满足非第二个test+1分
|
||||
--如果分数只有2,方块是SZJLT之一,并且没有把当前方块整个消除那么就是mini
|
||||
|
||||
攻击系统:
|
||||
普通消除:
|
||||
消<4行打出[消行数-0.5]攻击
|
||||
特殊消除:
|
||||
如果是spin,打出[2*消行数]攻击,
|
||||
B2B攻击+[1/1/2/4/8(spin1~5)]
|
||||
B3B攻击在B2B基础上+消行数*0.5,+1额外抵挡
|
||||
mini减至25%
|
||||
不是spin但是单次消>=4行,打出[消行数]攻击,
|
||||
B2B攻击+1
|
||||
B3B攻击+50%,+1额外抵挡
|
||||
特殊消除会增加B2B点数,让之后的特殊消除获得B2B(B3B)增益(详细说明见下文)
|
||||
半全消("下方有剩余方块"的全消,如果是I消1行则必须不剩余玩家放置的方块):伤害+4,额外抵挡+2
|
||||
全消:全消伤害为8~16(本局内递增2),和上述其他伤害取大,然后+2额外抵挡
|
||||
连击:每次连击给予上述攻击[连击数*25%(上限12连)(如果只消一行就是15%)]的加成,>=3次时再额外加1攻击
|
||||
根据上述规则计算后,向下取整,攻击打出
|
||||
普通消除:
|
||||
消<4行打出[消行数-0.5]攻击
|
||||
特殊消除:
|
||||
如果是spin,打出[2*消行数]攻击,
|
||||
B2B攻击+[1/1/2/4/8(spin1~5)]
|
||||
B3B攻击在B2B基础上+消行数*0.5,+1额外抵挡
|
||||
mini减至25%
|
||||
不是spin但是单次消>=4行,打出[消行数]攻击,
|
||||
B2B攻击+1
|
||||
B3B攻击+50%,+1额外抵挡
|
||||
特殊消除会增加B2B点数,让之后的特殊消除获得B2B(B3B)增益(详细说明见下文)
|
||||
半全消("下方有剩余方块"的全消,如果是I消1行则必须不剩余玩家放置的方块):伤害+4,额外抵挡+2
|
||||
全消:全消伤害为8~16(本局内递增2),和上述其他伤害取大,然后+2额外抵挡
|
||||
连击:每次连击给予上述攻击[连击数*25%(上限12连)(如果只消一行就是15%)]的加成,>=3次时再额外加1攻击
|
||||
根据上述规则计算后,向下取整,攻击打出
|
||||
|
||||
分数系统:
|
||||
分数计算系统非常复杂,而且随时可能更改所以不写在这里,并且计算只跟消除方式等信息有关,和模式设定无关
|
||||
分数计算系统非常复杂,而且随时可能更改所以不写在这里,并且计算只跟消除方式等信息有关,和模式设定无关
|
||||
|
||||
攻击延迟:
|
||||
消2/3的攻击生效最快,消四其次,spin攻击生效较慢,高连击生效最慢
|
||||
B2B或者B3B增加攻击力的同时也会减缓一点生效速度,mini大幅减缓生效速度
|
||||
消2/3的攻击生效最快,消四其次,spin攻击生效较慢,高连击生效最慢
|
||||
B2B或者B3B增加攻击力的同时也会减缓一点生效速度,mini大幅减缓生效速度
|
||||
|
||||
抵消逻辑:
|
||||
发动攻击时,若缓冲条有攻击则先用额外抵挡再用攻击力1:1抵消最先受到的攻击
|
||||
没有用上的额外抵挡会被丢弃,最后剩下的攻击力会发送给对手
|
||||
发动攻击时,若缓冲条有攻击则先用额外抵挡再用攻击力1:1抵消最先受到的攻击
|
||||
没有用上的额外抵挡会被丢弃,最后剩下的攻击力会发送给对手
|
||||
|
||||
back to back(B2B)点数说明:
|
||||
B2B点数的范围在0~1000,在点数>=50时进行特殊消除为B2B,>800时特殊消除为B3B
|
||||
普通消除:-250
|
||||
spin1~5:+[50/100/180/800/1000](mini变为原来50%)
|
||||
消四/五/六:+[150/200/...]
|
||||
本局内消行数>4时全消:+800
|
||||
半全消:+100
|
||||
空spin:+20,此法得到的点数不能超过800
|
||||
当点数在800以上时空放一块-40(不低于800)
|
||||
B2B点数的范围在0~1000,在点数>=50时进行特殊消除为B2B,>800时特殊消除为B3B
|
||||
普通消除:-250
|
||||
spin1~5:+[50/100/180/800/1000](mini变为原来50%)
|
||||
消四/五/六:+[150/200/...]
|
||||
本局内消行数>4时全消:+800
|
||||
半全消:+100
|
||||
空spin:+20,此法得到的点数不能超过800
|
||||
当点数在800以上时空放一块-40(不低于800)
|
||||
|
||||
混战模式说明:
|
||||
许多玩家同时进行一局游戏(对手都是AI,不是真人).
|
||||
随着玩家数量的减少,方块下落/垃圾生效速度/垃圾升起速度都会增加.
|
||||
淘汰其它玩家后可以获得一个徽章和该玩家持有的徽章,增强自己的攻击力.
|
||||
玩家可选四个攻击模式:
|
||||
1.随机:每次攻击后10%随机挑选一个玩家锁定
|
||||
2.最多徽章:攻击后或者锁定玩家死亡时锁定徽章最多的玩家
|
||||
3.最高:攻击后或者锁定玩家死亡时锁定场地最高的玩家(每秒刷新)
|
||||
4.反击:攻击所有锁定自己的玩家(攻击AOE),若未被任何人锁定则攻击随机玩家(不锁定)
|
||||
坚持到最后的玩家就是胜利者.
|
||||
许多玩家同时进行一局游戏(对手都是AI,不是真人).
|
||||
随着玩家数量的减少,方块下落/垃圾生效速度/垃圾升起速度都会增加.
|
||||
淘汰其它玩家后可以获得一个徽章和该玩家持有的徽章,增强自己的攻击力.
|
||||
玩家可选四个攻击模式:
|
||||
1.随机:每次攻击后10%随机挑选一个玩家锁定
|
||||
2.最多徽章:攻击后或者锁定玩家死亡时锁定徽章最多的玩家
|
||||
3.最高:攻击后或者锁定玩家死亡时锁定场地最高的玩家(每秒刷新)
|
||||
4.反击:攻击所有锁定自己的玩家(攻击AOE),若未被任何人锁定则攻击随机玩家(不锁定)
|
||||
坚持到最后的玩家就是胜利者.
|
||||
|
||||
自定义模式说明:
|
||||
玩家可以自由调整大多数参数(不包括上述各种游戏模式的特殊效果),
|
||||
也可以画一个场地去消除或者是作为提示模板来进行拼图模式.
|
||||
在拼图模式下可以按功能键切换是否展示提示,其中:
|
||||
打"X"的格子不允许有方块;
|
||||
空的格子可以是任何状态;
|
||||
普通的七种彩色方块必须颜色对应;
|
||||
垃圾行方块的位置只要有方块就可以,但是不能是空气.
|
||||
玩家拼出画的图后就会判定胜利.
|
||||
玩家可以自由调整大多数参数(不包括上述各种游戏模式的特殊效果),
|
||||
也可以画一个场地去消除或者是作为提示模板来进行拼图模式.
|
||||
在拼图模式下可以按功能键切换是否展示提示,其中:
|
||||
打"X"的格子不允许有方块;
|
||||
空的格子可以是任何状态;
|
||||
普通的七种彩色方块必须颜色对应;
|
||||
垃圾行方块的位置只要有方块就可以,但是不能是空气.
|
||||
玩家拼出画的图后就会判定胜利.
|
||||
]=],"\n")
|
||||
600
parts/list.lua
600
parts/list.lua
@@ -1,324 +1,324 @@
|
||||
do--title
|
||||
title={
|
||||
{
|
||||
53, 60,
|
||||
1035, 0,
|
||||
964, 218,
|
||||
660, 218,
|
||||
391, 1300,
|
||||
231, 1154,
|
||||
415, 218,
|
||||
0, 218,
|
||||
},
|
||||
{
|
||||
716, 290,
|
||||
1429, 290,
|
||||
1312, 462,
|
||||
875, 489,
|
||||
821, 695,
|
||||
1148, 712,
|
||||
1017, 902,
|
||||
761, 924,
|
||||
707, 1127,
|
||||
1106, 1101,
|
||||
1198, 1300,
|
||||
465, 1300,
|
||||
},
|
||||
{
|
||||
1516, 287,
|
||||
2102, 290,
|
||||
2036, 464,
|
||||
1598, 465,
|
||||
1322, 905,
|
||||
1395, 1102,
|
||||
1819, 1064,
|
||||
1743, 1280,
|
||||
1286, 1310,
|
||||
1106, 902,
|
||||
},
|
||||
{
|
||||
2179, 290,
|
||||
2411, 290,
|
||||
2272, 688,
|
||||
2674, 666,
|
||||
2801, 290,
|
||||
3041, 290,
|
||||
2693, 1280,
|
||||
2464, 1280,
|
||||
2601, 879,
|
||||
2199, 897,
|
||||
2056, 1280,
|
||||
1828, 1280,
|
||||
},
|
||||
{
|
||||
3123, 290,
|
||||
3480, 290,
|
||||
3496, 480,
|
||||
3664, 290,
|
||||
4017, 294,
|
||||
3682, 1280,
|
||||
3453, 1280,
|
||||
3697, 578,
|
||||
3458, 843,
|
||||
3304, 842,
|
||||
3251, 561,
|
||||
3001, 1280,
|
||||
2779, 1280,
|
||||
},
|
||||
{
|
||||
4088, 290,
|
||||
4677, 290,
|
||||
4599, 501,
|
||||
4426, 502,
|
||||
4219, 1069,
|
||||
4388, 1070,
|
||||
4317, 1280,
|
||||
3753, 1280,
|
||||
3822, 1068,
|
||||
3978, 1068,
|
||||
4194, 504,
|
||||
4016, 504,
|
||||
},
|
||||
{
|
||||
4747, 290,
|
||||
4978, 295,
|
||||
4921, 464,
|
||||
5186, 850,
|
||||
5366, 290,
|
||||
5599, 295,
|
||||
5288, 1280,
|
||||
5051, 1280,
|
||||
5106, 1102,
|
||||
4836, 709,
|
||||
4641, 1280,
|
||||
4406, 1280,
|
||||
},
|
||||
{
|
||||
5814, 290,
|
||||
6370, 295,
|
||||
6471, 415,
|
||||
6238, 1156,
|
||||
6058, 1280,
|
||||
5507, 1280,
|
||||
5404, 1154,
|
||||
5635, 416,
|
||||
-- 5814, 290,
|
||||
-- 5878, 463,
|
||||
5770, 542,
|
||||
5617, 1030,
|
||||
5676, 1105,
|
||||
5995, 1106,
|
||||
6100, 1029,
|
||||
6255, 541,
|
||||
6199, 465,
|
||||
5878, 463,
|
||||
},
|
||||
}
|
||||
for _,C in next,title do
|
||||
for i=1,#C do
|
||||
C[i]=C[i]*.1626
|
||||
end
|
||||
end
|
||||
title={
|
||||
{
|
||||
53, 60,
|
||||
1035, 0,
|
||||
964, 218,
|
||||
660, 218,
|
||||
391, 1300,
|
||||
231, 1154,
|
||||
415, 218,
|
||||
0, 218,
|
||||
},
|
||||
{
|
||||
716, 290,
|
||||
1429, 290,
|
||||
1312, 462,
|
||||
875, 489,
|
||||
821, 695,
|
||||
1148, 712,
|
||||
1017, 902,
|
||||
761, 924,
|
||||
707, 1127,
|
||||
1106, 1101,
|
||||
1198, 1300,
|
||||
465, 1300,
|
||||
},
|
||||
{
|
||||
1516, 287,
|
||||
2102, 290,
|
||||
2036, 464,
|
||||
1598, 465,
|
||||
1322, 905,
|
||||
1395, 1102,
|
||||
1819, 1064,
|
||||
1743, 1280,
|
||||
1286, 1310,
|
||||
1106, 902,
|
||||
},
|
||||
{
|
||||
2179, 290,
|
||||
2411, 290,
|
||||
2272, 688,
|
||||
2674, 666,
|
||||
2801, 290,
|
||||
3041, 290,
|
||||
2693, 1280,
|
||||
2464, 1280,
|
||||
2601, 879,
|
||||
2199, 897,
|
||||
2056, 1280,
|
||||
1828, 1280,
|
||||
},
|
||||
{
|
||||
3123, 290,
|
||||
3480, 290,
|
||||
3496, 480,
|
||||
3664, 290,
|
||||
4017, 294,
|
||||
3682, 1280,
|
||||
3453, 1280,
|
||||
3697, 578,
|
||||
3458, 843,
|
||||
3304, 842,
|
||||
3251, 561,
|
||||
3001, 1280,
|
||||
2779, 1280,
|
||||
},
|
||||
{
|
||||
4088, 290,
|
||||
4677, 290,
|
||||
4599, 501,
|
||||
4426, 502,
|
||||
4219, 1069,
|
||||
4388, 1070,
|
||||
4317, 1280,
|
||||
3753, 1280,
|
||||
3822, 1068,
|
||||
3978, 1068,
|
||||
4194, 504,
|
||||
4016, 504,
|
||||
},
|
||||
{
|
||||
4747, 290,
|
||||
4978, 295,
|
||||
4921, 464,
|
||||
5186, 850,
|
||||
5366, 290,
|
||||
5599, 295,
|
||||
5288, 1280,
|
||||
5051, 1280,
|
||||
5106, 1102,
|
||||
4836, 709,
|
||||
4641, 1280,
|
||||
4406, 1280,
|
||||
},
|
||||
{
|
||||
5814, 290,
|
||||
6370, 295,
|
||||
6471, 415,
|
||||
6238, 1156,
|
||||
6058, 1280,
|
||||
5507, 1280,
|
||||
5404, 1154,
|
||||
5635, 416,
|
||||
-- 5814, 290,
|
||||
-- 5878, 463,
|
||||
5770, 542,
|
||||
5617, 1030,
|
||||
5676, 1105,
|
||||
5995, 1106,
|
||||
6100, 1029,
|
||||
6255, 541,
|
||||
6199, 465,
|
||||
5878, 463,
|
||||
},
|
||||
}
|
||||
for _,C in next,title do
|
||||
for i=1,#C do
|
||||
C[i]=C[i]*.1626
|
||||
end
|
||||
end
|
||||
end
|
||||
do--title_fan
|
||||
title_fan={}
|
||||
local sin,cos=math.sin,math.cos
|
||||
for i=1,8 do
|
||||
local L={}
|
||||
title_fan[i]=L
|
||||
for j=1,#title[i]do
|
||||
L[j]=title[i][j]
|
||||
end
|
||||
for j=1,#L,2 do
|
||||
local x,y=L[j],L[j+1]--0<x<3041, 290<y<1280
|
||||
x,y=-(x+240+y*.3)*.002,(y-580)*.9
|
||||
x,y=y*cos(x),-y*sin(x)--Rec-Pol-Rec
|
||||
L[j],L[j+1]=x,y+300
|
||||
end
|
||||
end
|
||||
title_fan={}
|
||||
local sin,cos=math.sin,math.cos
|
||||
for i=1,8 do
|
||||
local L={}
|
||||
title_fan[i]=L
|
||||
for j=1,#title[i]do
|
||||
L[j]=title[i][j]
|
||||
end
|
||||
for j=1,#L,2 do
|
||||
local x,y=L[j],L[j+1]--0<x<3041, 290<y<1280
|
||||
x,y=-(x+240+y*.3)*.002,(y-580)*.9
|
||||
x,y=y*cos(x),-y*sin(x)--Rec-Pol-Rec
|
||||
L[j],L[j+1]=x,y+300
|
||||
end
|
||||
end
|
||||
end
|
||||
do--missionEnum
|
||||
missionEnum={
|
||||
_1=01,_2=02,_3=03,_4=04,
|
||||
A1=05,A2=06,A3=07,A4=08,
|
||||
PC=09,
|
||||
Z1=11,Z2=12,Z3=13,
|
||||
S1=21,S2=22,S3=23,
|
||||
J1=31,J2=32,J3=33,
|
||||
L1=41,L2=42,L3=43,
|
||||
T1=51,T2=52,T3=53,
|
||||
O1=61,O2=62,O3=63,O4=64,
|
||||
I1=71,I2=72,I3=73,I4=74,
|
||||
}
|
||||
local L={}
|
||||
for k,v in next,missionEnum do L[v]=k end
|
||||
for k,v in next,L do missionEnum[k]=v end
|
||||
missionEnum={
|
||||
_1=01,_2=02,_3=03,_4=04,
|
||||
A1=05,A2=06,A3=07,A4=08,
|
||||
PC=09,
|
||||
Z1=11,Z2=12,Z3=13,
|
||||
S1=21,S2=22,S3=23,
|
||||
J1=31,J2=32,J3=33,
|
||||
L1=41,L2=42,L3=43,
|
||||
T1=51,T2=52,T3=53,
|
||||
O1=61,O2=62,O3=63,O4=64,
|
||||
I1=71,I2=72,I3=73,I4=74,
|
||||
}
|
||||
local L={}
|
||||
for k,v in next,missionEnum do L[v]=k end
|
||||
for k,v in next,L do missionEnum[k]=v end
|
||||
end
|
||||
do--drawableText
|
||||
local function T(s,t)return love.graphics.newText(getFont(s),t)end
|
||||
drawableText={
|
||||
modeName=T(30),
|
||||
local function T(s,t)return love.graphics.newText(getFont(s),t)end
|
||||
drawableText={
|
||||
modeName=T(30),
|
||||
|
||||
win=T(120),
|
||||
lose=T(120),
|
||||
win=T(120),
|
||||
lose=T(120),
|
||||
|
||||
finish=T(90),
|
||||
gamewin=T(90),
|
||||
gameover=T(90),
|
||||
pause=T(90),
|
||||
finish=T(90),
|
||||
gamewin=T(90),
|
||||
gameover=T(90),
|
||||
pause=T(90),
|
||||
|
||||
speedLV=T(20),
|
||||
piece=T(25),line=T(25),atk=T(20),eff=T(20),
|
||||
rpm=T(35),tsd=T(35),
|
||||
grade=T(25),techrash=T(25),
|
||||
wave=T(30),nextWave=T(30),
|
||||
combo=T(20),maxcmb=T(20),
|
||||
pc=T(20),ko=T(25),
|
||||
speedLV=T(20),
|
||||
piece=T(25),line=T(25),atk=T(20),eff=T(20),
|
||||
rpm=T(35),tsd=T(35),
|
||||
grade=T(25),techrash=T(25),
|
||||
wave=T(30),nextWave=T(30),
|
||||
combo=T(20),maxcmb=T(20),
|
||||
pc=T(20),ko=T(25),
|
||||
|
||||
noScore=T(45),highScore=T(30),modeLocked=T(45),
|
||||
}
|
||||
noScore=T(45),highScore=T(30),modeLocked=T(45),
|
||||
}
|
||||
end
|
||||
do--BLOCKS
|
||||
local O,_=true,false
|
||||
BLOCKS={
|
||||
--Tetromino
|
||||
{{_,O,O},{O,O,_}}, --Z
|
||||
{{O,O,_},{_,O,O}}, --S
|
||||
{{O,O,O},{O,_,_}}, --J
|
||||
{{O,O,O},{_,_,O}}, --L
|
||||
{{O,O,O},{_,O,_}}, --T
|
||||
{{O,O},{O,O}}, --O
|
||||
{{O,O,O,O}}, --I
|
||||
local O,_=true,false
|
||||
BLOCKS={
|
||||
--Tetromino
|
||||
{{_,O,O},{O,O,_}},--Z
|
||||
{{O,O,_},{_,O,O}},--S
|
||||
{{O,O,O},{O,_,_}},--J
|
||||
{{O,O,O},{_,_,O}},--L
|
||||
{{O,O,O},{_,O,_}},--T
|
||||
{{O,O},{O,O}}, --O
|
||||
{{O,O,O,O}}, --I
|
||||
|
||||
--Pentomino
|
||||
{{_,O,O},{_,O,_},{O,O,_}}, --Z5
|
||||
{{O,O,_},{_,O,_},{_,O,O}}, --S5
|
||||
{{O,O,O},{O,O,_}}, --P
|
||||
{{O,O,O},{_,O,O}}, --Q
|
||||
{{_,O,_},{O,O,O},{O,_,_}}, --F
|
||||
{{_,O,_},{O,O,O},{_,_,O}}, --E
|
||||
{{O,O,O},{_,O,_},{_,O,_}}, --T5
|
||||
{{O,O,O},{O,_,O}}, --U
|
||||
{{O,O,O},{_,_,O},{_,_,O}}, --V
|
||||
{{_,O,O},{O,O,_},{O,_,_}}, --W
|
||||
{{_,O,_},{O,O,O},{_,O,_}}, --X
|
||||
{{O,O,O,O},{O,_,_,_}}, --J5
|
||||
{{O,O,O,O},{_,_,_,O}}, --L5
|
||||
{{O,O,O,O},{_,O,_,_}}, --R
|
||||
{{O,O,O,O},{_,_,O,_}}, --Y
|
||||
{{_,O,O,O},{O,O,_,_}}, --N
|
||||
{{O,O,O,_},{_,_,O,O}}, --H
|
||||
{{O,O,O,O,O}}, --I5
|
||||
--Pentomino
|
||||
{{_,O,O},{_,O,_},{O,O,_}},--Z5
|
||||
{{O,O,_},{_,O,_},{_,O,O}},--S5
|
||||
{{O,O,O},{O,O,_}}, --P
|
||||
{{O,O,O},{_,O,O}}, --Q
|
||||
{{_,O,_},{O,O,O},{O,_,_}},--F
|
||||
{{_,O,_},{O,O,O},{_,_,O}},--E
|
||||
{{O,O,O},{_,O,_},{_,O,_}},--T5
|
||||
{{O,O,O},{O,_,O}}, --U
|
||||
{{O,O,O},{_,_,O},{_,_,O}},--V
|
||||
{{_,O,O},{O,O,_},{O,_,_}},--W
|
||||
{{_,O,_},{O,O,O},{_,O,_}},--X
|
||||
{{O,O,O,O},{O,_,_,_}}, --J5
|
||||
{{O,O,O,O},{_,_,_,O}}, --L5
|
||||
{{O,O,O,O},{_,O,_,_}}, --R
|
||||
{{O,O,O,O},{_,_,O,_}}, --Y
|
||||
{{_,O,O,O},{O,O,_,_}}, --N
|
||||
{{O,O,O,_},{_,_,O,O}}, --H
|
||||
{{O,O,O,O,O}}, --I5
|
||||
|
||||
--Trimino
|
||||
{{O,O,O}}, --I3
|
||||
{{O,O},{_,O}}, --C
|
||||
--Trimino
|
||||
{{O,O,O}}, --I3
|
||||
{{O,O},{_,O}},--C
|
||||
|
||||
--Domino
|
||||
{{O,O}}, --I2
|
||||
--Domino
|
||||
{{O,O}},--I2
|
||||
|
||||
--Dot
|
||||
{{O}}, --O1
|
||||
}
|
||||
local function _RotCW(B)
|
||||
local N={}
|
||||
local r,c=#B,#B[1]--row,col
|
||||
for x=1,c do
|
||||
N[x]={}
|
||||
for y=1,r do
|
||||
N[x][y]=B[y][c-x+1]
|
||||
end
|
||||
end
|
||||
return N
|
||||
end
|
||||
for i=1,#BLOCKS do
|
||||
local B=BLOCKS[i]
|
||||
BLOCKS[i]={[0]=B}
|
||||
for j=1,3 do
|
||||
B=_RotCW(B)
|
||||
BLOCKS[i][j]=B
|
||||
end
|
||||
end
|
||||
--Dot
|
||||
{{O}},--O1
|
||||
}
|
||||
local function _RotCW(B)
|
||||
local N={}
|
||||
local r,c=#B,#B[1]--row,col
|
||||
for x=1,c do
|
||||
N[x]={}
|
||||
for y=1,r do
|
||||
N[x][y]=B[y][c-x+1]
|
||||
end
|
||||
end
|
||||
return N
|
||||
end
|
||||
for i=1,#BLOCKS do
|
||||
local B=BLOCKS[i]
|
||||
BLOCKS[i]={[0]=B}
|
||||
for j=1,3 do
|
||||
B=_RotCW(B)
|
||||
BLOCKS[i][j]=B
|
||||
end
|
||||
end
|
||||
end
|
||||
oldModeNameTable={
|
||||
attacker_hard="attacker_h",
|
||||
attacker_ultimate="attacker_u",
|
||||
blind_easy="blind_e",
|
||||
blind_hard="blind_h",
|
||||
blind_lunatic="blind_l",
|
||||
blind_normal="blind_n",
|
||||
blind_ultimate="blind_u",
|
||||
c4wtrain_lunatic="c4wtrain_l",
|
||||
c4wtrain_normal="c4wtrain_n",
|
||||
defender_lunatic="defender_l",
|
||||
defender_normal="defender_n",
|
||||
dig_100="dig_100l",
|
||||
dig_10="dig_10l",
|
||||
dig_400="dig_400l",
|
||||
dig_40="dig_40l",
|
||||
dig_hard="dig_h",
|
||||
dig_ultimate="dig_u",
|
||||
drought_lunatic="drought_l",
|
||||
drought_normal="drought_n",
|
||||
marathon_hard="marathon_h",
|
||||
marathon_normal="marathon_n",
|
||||
pcchallenge_hard="pc_h",
|
||||
pcchallenge_lunatic="pc_l",
|
||||
pcchallenge_normal="pc_n",
|
||||
pctrain_lunatic="pctrain_l",
|
||||
pctrain_normal="pctrain_n",
|
||||
round_1="round_e",
|
||||
round_2="round_h",
|
||||
round_3="round_l",
|
||||
round_4="round_n",
|
||||
round_5="round_u",
|
||||
solo_1="solo_e",
|
||||
solo_2="solo_h",
|
||||
solo_3="solo_l",
|
||||
solo_4="solo_n",
|
||||
solo_5="solo_u",
|
||||
sprint_10="sprint_10l",
|
||||
sprint_20="sprint_20l",
|
||||
sprint_40="sprint_40l",
|
||||
sprint_400="sprint_400l",
|
||||
sprint_100="sprint_100l",
|
||||
sprint_1000="sprint_1000l",
|
||||
survivor_easy="survivor_e",
|
||||
survivor_hard="survivor_h",
|
||||
survivor_lunatic="survivor_l",
|
||||
survivor_normal="survivor_n",
|
||||
survivor_ultimate="survivor_u",
|
||||
tech_finesse2="tech_finesse_f",
|
||||
tech_hard2="tech_h_plus",
|
||||
tech_hard="tech_h",
|
||||
tech_lunatic2="tech_l_plus",
|
||||
tech_lunatic="tech_l",
|
||||
tech_normal2="tech_n_plus",
|
||||
tech_normal="tech_n",
|
||||
techmino49_easy="techmino49_e",
|
||||
techmino49_hard="techmino49_h",
|
||||
techmino49_ultimate="techmino49_u",
|
||||
techmino99_easy="techmino99_e",
|
||||
techmino99_hard="techmino99_h",
|
||||
techmino99_ultimate="techmino99_u",
|
||||
tsd_easy="tsd_e",
|
||||
tsd_hard="tsd_h",
|
||||
tsd_ultimate="tsd_u",
|
||||
GM="master_ex",
|
||||
master_beginner="master_l",
|
||||
master_advance="master_u",
|
||||
master_phantasm="master_ph",
|
||||
master_extra="master_ex",
|
||||
attacker_hard="attacker_h",
|
||||
attacker_ultimate="attacker_u",
|
||||
blind_easy="blind_e",
|
||||
blind_hard="blind_h",
|
||||
blind_lunatic="blind_l",
|
||||
blind_normal="blind_n",
|
||||
blind_ultimate="blind_u",
|
||||
c4wtrain_lunatic="c4wtrain_l",
|
||||
c4wtrain_normal="c4wtrain_n",
|
||||
defender_lunatic="defender_l",
|
||||
defender_normal="defender_n",
|
||||
dig_100="dig_100l",
|
||||
dig_10="dig_10l",
|
||||
dig_400="dig_400l",
|
||||
dig_40="dig_40l",
|
||||
dig_hard="dig_h",
|
||||
dig_ultimate="dig_u",
|
||||
drought_lunatic="drought_l",
|
||||
drought_normal="drought_n",
|
||||
marathon_hard="marathon_h",
|
||||
marathon_normal="marathon_n",
|
||||
pcchallenge_hard="pc_h",
|
||||
pcchallenge_lunatic="pc_l",
|
||||
pcchallenge_normal="pc_n",
|
||||
pctrain_lunatic="pctrain_l",
|
||||
pctrain_normal="pctrain_n",
|
||||
round_1="round_e",
|
||||
round_2="round_h",
|
||||
round_3="round_l",
|
||||
round_4="round_n",
|
||||
round_5="round_u",
|
||||
solo_1="solo_e",
|
||||
solo_2="solo_h",
|
||||
solo_3="solo_l",
|
||||
solo_4="solo_n",
|
||||
solo_5="solo_u",
|
||||
sprint_10="sprint_10l",
|
||||
sprint_20="sprint_20l",
|
||||
sprint_40="sprint_40l",
|
||||
sprint_400="sprint_400l",
|
||||
sprint_100="sprint_100l",
|
||||
sprint_1000="sprint_1000l",
|
||||
survivor_easy="survivor_e",
|
||||
survivor_hard="survivor_h",
|
||||
survivor_lunatic="survivor_l",
|
||||
survivor_normal="survivor_n",
|
||||
survivor_ultimate="survivor_u",
|
||||
tech_finesse2="tech_finesse_f",
|
||||
tech_hard2="tech_h_plus",
|
||||
tech_hard="tech_h",
|
||||
tech_lunatic2="tech_l_plus",
|
||||
tech_lunatic="tech_l",
|
||||
tech_normal2="tech_n_plus",
|
||||
tech_normal="tech_n",
|
||||
techmino49_easy="techmino49_e",
|
||||
techmino49_hard="techmino49_h",
|
||||
techmino49_ultimate="techmino49_u",
|
||||
techmino99_easy="techmino99_e",
|
||||
techmino99_hard="techmino99_h",
|
||||
techmino99_ultimate="techmino99_u",
|
||||
tsd_easy="tsd_e",
|
||||
tsd_hard="tsd_h",
|
||||
tsd_ultimate="tsd_u",
|
||||
GM="master_ex",
|
||||
master_beginner="master_l",
|
||||
master_advance="master_u",
|
||||
master_phantasm="master_ph",
|
||||
master_extra="master_ex",
|
||||
}
|
||||
rankColor={
|
||||
{.6,.3,.3},
|
||||
{.7,.5,.3},
|
||||
{.9,.7,.5},
|
||||
{.6,.9,1},
|
||||
{.95,.95,.5},
|
||||
{.6,.3,.3},
|
||||
{.7,.5,.3},
|
||||
{.9,.7,.5},
|
||||
{.6,.9,1},
|
||||
{.95,.95,.5},
|
||||
}
|
||||
minoColor={
|
||||
COLOR.R,COLOR.F,COLOR.O,COLOR.Y,COLOR.L,COLOR.J,COLOR.G,COLOR.A,
|
||||
COLOR.C,COLOR.N,COLOR.S,COLOR.B,COLOR.V,COLOR.P,COLOR.M,COLOR.W,
|
||||
COLOR.dH,COLOR.D,COLOR.lY,COLOR.H,COLOR.lH,COLOR.dV,COLOR.dR,COLOR.dG,
|
||||
COLOR.R,COLOR.F,COLOR.O,COLOR.Y,COLOR.L,COLOR.J,COLOR.G,COLOR.A,
|
||||
COLOR.C,COLOR.N,COLOR.S,COLOR.B,COLOR.V,COLOR.P,COLOR.M,COLOR.W,
|
||||
COLOR.dH,COLOR.D,COLOR.lY,COLOR.H,COLOR.lH,COLOR.dV,COLOR.dR,COLOR.dG,
|
||||
}
|
||||
204
parts/modes.lua
204
parts/modes.lua
@@ -1,132 +1,132 @@
|
||||
return{
|
||||
{name='sprint_10l', x=0, y=0, size=40,shape=1,icon="sprint1", unlock={'sprint_20l','sprint_40l'}},
|
||||
{name='sprint_20l', x=-200, y=200, size=50,shape=1,icon="sprint1"},
|
||||
{name='sprint_40l', x=0, y=-300, size=40,shape=1,icon="sprint2", unlock={'dig_10l','sprint_100l','marathon_n','sprintPenta','sprintMPH','stack_e'}},
|
||||
{name='sprint_100l', x=-200, y=0, size=50,shape=1,icon="sprint2", unlock={'sprint_400l','drought_n'}},
|
||||
{name='sprint_400l', x=-400, y=0, size=40,shape=1,icon="sprint3", unlock={'sprint_1000l'}},
|
||||
{name='sprint_1000l', x=-600, y=0, size=40,shape=1,icon="sprint3"},
|
||||
{name='sprint_10l', x=0, y=0, size=40,shape=1,icon="sprint1", unlock={'sprint_20l','sprint_40l'}},
|
||||
{name='sprint_20l', x=-200, y=200, size=50,shape=1,icon="sprint1"},
|
||||
{name='sprint_40l', x=0, y=-300, size=40,shape=1,icon="sprint2", unlock={'dig_10l','sprint_100l','marathon_n','sprintPenta','sprintMPH','stack_e'}},
|
||||
{name='sprint_100l', x=-200, y=0, size=50,shape=1,icon="sprint2", unlock={'sprint_400l','drought_n'}},
|
||||
{name='sprint_400l', x=-400, y=0, size=40,shape=1,icon="sprint3", unlock={'sprint_1000l'}},
|
||||
{name='sprint_1000l', x=-600, y=0, size=40,shape=1,icon="sprint3"},
|
||||
|
||||
{name='sprintPenta', x=210, y=-370, size=40,shape=3,icon="tech"},
|
||||
{name='sprintMPH', x=210, y=-230, size=40,shape=3,icon="tech"},
|
||||
{name='sprintPenta', x=210, y=-370, size=40,shape=3,icon="tech"},
|
||||
{name='sprintMPH', x=210, y=-230, size=40,shape=3,icon="tech"},
|
||||
|
||||
{name='drought_n', x=-400, y=200, size=40,shape=1,icon="drought", unlock={'drought_l'}},
|
||||
{name='drought_l', x=-600, y=200, size=40,shape=1,icon="drought"},
|
||||
{name='drought_n', x=-400, y=200, size=40,shape=1,icon="drought", unlock={'drought_l'}},
|
||||
{name='drought_l', x=-600, y=200, size=40,shape=1,icon="drought"},
|
||||
|
||||
{name='stack_e', x=-200, y=-400, size=40,shape=1,icon="mess", unlock={'stack_h'}},
|
||||
{name='stack_h', x=-400, y=-400, size=40,shape=1,icon="mess", unlock={'stack_u'}},
|
||||
{name='stack_u', x=-600, y=-400, size=40,shape=1,icon="mess"},
|
||||
{name='stack_e', x=-200, y=-400, size=40,shape=1,icon="mess", unlock={'stack_h'}},
|
||||
{name='stack_h', x=-400, y=-400, size=40,shape=1,icon="mess", unlock={'stack_u'}},
|
||||
{name='stack_u', x=-600, y=-400, size=40,shape=1,icon="mess"},
|
||||
|
||||
{name='dig_10l', x=-200, y=-200, size=40,shape=1,icon="dig_sprint",unlock={'dig_40l'}},
|
||||
{name='dig_40l', x=-400, y=-200, size=40,shape=1,icon="dig_sprint",unlock={'dig_100l'}},
|
||||
{name='dig_100l', x=-600, y=-200, size=40,shape=1,icon="dig_sprint",unlock={'dig_400l'}},
|
||||
{name='dig_400l', x=-800, y=-200, size=40,shape=1,icon="dig_sprint"},
|
||||
{name='dig_10l', x=-200, y=-200, size=40,shape=1,icon="dig_sprint", unlock={'dig_40l'}},
|
||||
{name='dig_40l', x=-400, y=-200, size=40,shape=1,icon="dig_sprint", unlock={'dig_100l'}},
|
||||
{name='dig_100l', x=-600, y=-200, size=40,shape=1,icon="dig_sprint", unlock={'dig_400l'}},
|
||||
{name='dig_400l', x=-800, y=-200, size=40,shape=1,icon="dig_sprint"},
|
||||
|
||||
{name='marathon_n', x=0, y=-600, size=60,shape=1,icon="marathon",unlock={'marathon_h','rhythm_e','solo_e','round_e','blind_e','classic_fast','survivor_e','bigbang','zen'}},
|
||||
{name='marathon_h', x=0, y=-800, size=50,shape=1,icon="marathon",unlock={'master_n'}},
|
||||
{name='marathon_n', x=0, y=-600, size=60,shape=1,icon="marathon", unlock={'marathon_h','rhythm_e','solo_e','round_e','blind_e','classic_fast','survivor_e','bigbang','zen'}},
|
||||
{name='marathon_h', x=0, y=-800, size=50,shape=1,icon="marathon", unlock={'master_n'}},
|
||||
|
||||
{name='solo_e', x=-600, y=-1000,size=40,shape=1,icon="solo", unlock={'solo_n'}},
|
||||
{name='solo_n', x=-800, y=-1000,size=40,shape=1,icon="solo", unlock={'solo_h'}},
|
||||
{name='solo_h', x=-1000,y=-1000,size=40,shape=1,icon="solo", unlock={'solo_l','techmino49_e'}},
|
||||
{name='solo_l', x=-1200,y=-1000,size=40,shape=1,icon="solo", unlock={'solo_u'}},
|
||||
{name='solo_u', x=-1400,y=-1000,size=40,shape=1,icon="solo"},
|
||||
{name='solo_e', x=-600, y=-1000, size=40,shape=1,icon="solo", unlock={'solo_n'}},
|
||||
{name='solo_n', x=-800, y=-1000, size=40,shape=1,icon="solo", unlock={'solo_h'}},
|
||||
{name='solo_h', x=-1000, y=-1000, size=40,shape=1,icon="solo", unlock={'solo_l','techmino49_e'}},
|
||||
{name='solo_l', x=-1200, y=-1000, size=40,shape=1,icon="solo", unlock={'solo_u'}},
|
||||
{name='solo_u', x=-1400, y=-1000, size=40,shape=1,icon="solo"},
|
||||
|
||||
{name='techmino49_e', x=-1100,y=-1200,size=40,shape=1,icon="t49", unlock={'techmino49_h','techmino99_e'}},
|
||||
{name='techmino49_h', x=-1100,y=-1400,size=40,shape=1,icon="t49", unlock={'techmino49_u'}},
|
||||
{name='techmino49_u', x=-1100,y=-1600,size=40,shape=1,icon="t49"},
|
||||
{name='techmino99_e', x=-1300,y=-1400,size=40,shape=1,icon="t99", unlock={'techmino99_h'}},
|
||||
{name='techmino99_h', x=-1300,y=-1600,size=40,shape=1,icon="t99", unlock={'techmino99_u'}},
|
||||
{name='techmino99_u', x=-1300,y=-1800,size=40,shape=1,icon="t99"},
|
||||
{name='techmino49_e', x=-1100, y=-1200, size=40,shape=1,icon="t49", unlock={'techmino49_h','techmino99_e'}},
|
||||
{name='techmino49_h', x=-1100, y=-1400, size=40,shape=1,icon="t49", unlock={'techmino49_u'}},
|
||||
{name='techmino49_u', x=-1100, y=-1600, size=40,shape=1,icon="t49"},
|
||||
{name='techmino99_e', x=-1300, y=-1400, size=40,shape=1,icon="t99", unlock={'techmino99_h'}},
|
||||
{name='techmino99_h', x=-1300, y=-1600, size=40,shape=1,icon="t99", unlock={'techmino99_u'}},
|
||||
{name='techmino99_u', x=-1300, y=-1800, size=40,shape=1,icon="t99"},
|
||||
|
||||
{name='round_e', x=-600, y=-800, size=40,shape=1,icon="round", unlock={'round_n'}},
|
||||
{name='round_n', x=-800, y=-800, size=40,shape=1,icon="round", unlock={'round_h'}},
|
||||
{name='round_h', x=-1000,y=-800, size=40,shape=1,icon="round", unlock={'round_l'}},
|
||||
{name='round_l', x=-1200,y=-800, size=40,shape=1,icon="round", unlock={'round_u'}},
|
||||
{name='round_u', x=-1400,y=-800, size=40,shape=1,icon="round"},
|
||||
{name='round_e', x=-600, y=-800, size=40,shape=1,icon="round", unlock={'round_n'}},
|
||||
{name='round_n', x=-800, y=-800, size=40,shape=1,icon="round", unlock={'round_h'}},
|
||||
{name='round_h', x=-1000, y=-800, size=40,shape=1,icon="round", unlock={'round_l'}},
|
||||
{name='round_l', x=-1200, y=-800, size=40,shape=1,icon="round", unlock={'round_u'}},
|
||||
{name='round_u', x=-1400, y=-800, size=40,shape=1,icon="round"},
|
||||
|
||||
{name='master_n', x=0, y=-1000,size=40,shape=1,icon="master", unlock={'master_h'}},
|
||||
{name='master_h', x=0, y=-1200,size=40,shape=3,icon="master", unlock={'master_final','master_ex','master_ph'}},
|
||||
{name='master_final', x=0, y=-1600,size=40,shape=2,icon="master"},
|
||||
{name='master_ph', x=-150, y=-1500,size=40,shape=2,icon="master"},
|
||||
{name='master_ex', x=150, y=-1500,size=40,shape=2,icon="master_ex"},
|
||||
{name='master_n', x=0, y=-1000, size=40,shape=1,icon="master", unlock={'master_h'}},
|
||||
{name='master_h', x=0, y=-1200, size=40,shape=3,icon="master", unlock={'master_final','master_ex','master_ph'}},
|
||||
{name='master_final', x=0, y=-1600, size=40,shape=2,icon="master"},
|
||||
{name='master_ph', x=-150, y=-1500, size=40,shape=2,icon="master"},
|
||||
{name='master_ex', x=150, y=-1500, size=40,shape=2,icon="master_ex"},
|
||||
|
||||
{name='rhythm_e', x=-350, y=-1000,size=40,shape=1,icon="rhythm", unlock={'rhythm_h'}},
|
||||
{name='rhythm_h', x=-350, y=-1200,size=40,shape=3,icon="rhythm", unlock={'rhythm_u'}},
|
||||
{name='rhythm_u', x=-350, y=-1400,size=40,shape=2,icon="rhythm"},
|
||||
{name='rhythm_e', x=-350, y=-1000, size=40,shape=1,icon="rhythm", unlock={'rhythm_h'}},
|
||||
{name='rhythm_h', x=-350, y=-1200, size=40,shape=3,icon="rhythm", unlock={'rhythm_u'}},
|
||||
{name='rhythm_u', x=-350, y=-1400, size=40,shape=2,icon="rhythm"},
|
||||
|
||||
{name='blind_e', x=150, y=-700, size=40,shape=1,icon="hidden", unlock={'blind_n'}},
|
||||
{name='blind_n', x=150, y=-800, size=40,shape=1,icon="hidden", unlock={'blind_h'}},
|
||||
{name='blind_h', x=150, y=-900, size=35,shape=1,icon="hidden", unlock={'blind_l'}},
|
||||
{name='blind_l', x=150, y=-1000,size=35,shape=3,icon="hidden", unlock={'blind_u'}},
|
||||
{name='blind_u', x=150, y=-1100,size=30,shape=3,icon="hidden", unlock={'blind_wtf'}},
|
||||
{name='blind_wtf', x=150, y=-1200,size=25,shape=2,icon="hidden"},
|
||||
{name='blind_e', x=150, y=-700, size=40,shape=1,icon="hidden", unlock={'blind_n'}},
|
||||
{name='blind_n', x=150, y=-800, size=40,shape=1,icon="hidden", unlock={'blind_h'}},
|
||||
{name='blind_h', x=150, y=-900, size=35,shape=1,icon="hidden", unlock={'blind_l'}},
|
||||
{name='blind_l', x=150, y=-1000, size=35,shape=3,icon="hidden", unlock={'blind_u'}},
|
||||
{name='blind_u', x=150, y=-1100, size=30,shape=3,icon="hidden", unlock={'blind_wtf'}},
|
||||
{name='blind_wtf', x=150, y=-1200, size=25,shape=2,icon="hidden"},
|
||||
|
||||
{name='classic_fast', x=-150, y=-950, size=40,shape=2,icon="classic"},
|
||||
{name='classic_fast', x=-150, y=-950, size=40,shape=2,icon="classic"},
|
||||
|
||||
{name='survivor_e', x=300, y=-600, size=40,shape=1,icon="survivor",unlock={'survivor_n'}},
|
||||
{name='survivor_n', x=500, y=-600, size=40,shape=1,icon="survivor",unlock={'survivor_h','attacker_h','defender_n','dig_h'}},
|
||||
{name='survivor_h', x=700, y=-600, size=40,shape=1,icon="survivor",unlock={'survivor_l'}},
|
||||
{name='survivor_l', x=900, y=-600, size=40,shape=3,icon="survivor",unlock={'survivor_u'}},
|
||||
{name='survivor_u', x=1100, y=-600, size=40,shape=2,icon="survivor"},
|
||||
{name='survivor_e', x=300, y=-600, size=40,shape=1,icon="survivor", unlock={'survivor_n'}},
|
||||
{name='survivor_n', x=500, y=-600, size=40,shape=1,icon="survivor", unlock={'survivor_h','attacker_h','defender_n','dig_h'}},
|
||||
{name='survivor_h', x=700, y=-600, size=40,shape=1,icon="survivor", unlock={'survivor_l'}},
|
||||
{name='survivor_l', x=900, y=-600, size=40,shape=3,icon="survivor", unlock={'survivor_u'}},
|
||||
{name='survivor_u', x=1100, y=-600, size=40,shape=2,icon="survivor"},
|
||||
|
||||
{name='attacker_h', x=300, y=-800, size=40,shape=1,icon="attack", unlock={'attacker_u'}},
|
||||
{name='attacker_u', x=300, y=-1000,size=40,shape=1,icon="attack"},
|
||||
{name='attacker_h', x=300, y=-800, size=40,shape=1,icon="attack", unlock={'attacker_u'}},
|
||||
{name='attacker_u', x=300, y=-1000, size=40,shape=1,icon="attack"},
|
||||
|
||||
{name='defender_n', x=500, y=-800, size=40,shape=1,icon="defend", unlock={'defender_l'}},
|
||||
{name='defender_l', x=500, y=-1000,size=40,shape=1,icon="defend"},
|
||||
{name='defender_n', x=500, y=-800, size=40,shape=1,icon="defend", unlock={'defender_l'}},
|
||||
{name='defender_l', x=500, y=-1000, size=40,shape=1,icon="defend"},
|
||||
|
||||
{name='dig_h', x=700, y=-800, size=40,shape=1,icon="dig", unlock={'dig_u'}},
|
||||
{name='dig_u', x=700, y=-1000,size=40,shape=1,icon="dig"},
|
||||
{name='dig_h', x=700, y=-800, size=40,shape=1,icon="dig", unlock={'dig_u'}},
|
||||
{name='dig_u', x=700, y=-1000, size=40,shape=1,icon="dig"},
|
||||
|
||||
{name='bigbang', x=400, y=-400, size=50,shape=1,icon="bigbang", unlock={'c4wtrain_n','pctrain_n','tech_n'}},
|
||||
{name='c4wtrain_n', x=700, y=-400, size=40,shape=1,icon="pc", unlock={'c4wtrain_l'}},
|
||||
{name='c4wtrain_l', x=900, y=-400, size=40,shape=1,icon="pc"},
|
||||
{name='bigbang', x=400, y=-400, size=50,shape=1,icon="bigbang", unlock={'c4wtrain_n','pctrain_n','tech_n'}},
|
||||
{name='c4wtrain_n', x=700, y=-400, size=40,shape=1,icon="pc", unlock={'c4wtrain_l'}},
|
||||
{name='c4wtrain_l', x=900, y=-400, size=40,shape=1,icon="pc"},
|
||||
|
||||
{name='pctrain_n', x=700, y=-250, size=40,shape=1,icon="pc", unlock={'pctrain_l','pc_n'}},
|
||||
{name='pctrain_l', x=900, y=-250, size=40,shape=1,icon="pc"},
|
||||
{name='pctrain_n', x=700, y=-250, size=40,shape=1,icon="pc", unlock={'pctrain_l','pc_n'}},
|
||||
{name='pctrain_l', x=900, y=-250, size=40,shape=1,icon="pc"},
|
||||
|
||||
{name='pc_n', x=800, y=-110, size=40,shape=1,icon="pc", unlock={'pc_h'}},
|
||||
{name='pc_h', x=950, y=-110, size=40,shape=3,icon="pc", unlock={'pc_l','pc_inf'}},
|
||||
{name='pc_l', x=1100, y=-110, size=40,shape=3,icon="pc"},
|
||||
{name='pc_inf', x=1100, y=-250, size=40,shape=2,icon="pc"},
|
||||
{name='pc_n', x=800, y=-110, size=40,shape=1,icon="pc", unlock={'pc_h'}},
|
||||
{name='pc_h', x=950, y=-110, size=40,shape=3,icon="pc", unlock={'pc_l','pc_inf'}},
|
||||
{name='pc_l', x=1100, y=-110, size=40,shape=3,icon="pc"},
|
||||
{name='pc_inf', x=1100, y=-250, size=40,shape=2,icon="pc"},
|
||||
|
||||
{name='tech_n', x=400, y=-110, size=40,shape=1,icon="tech", unlock={'tech_n_plus','tech_h','tech_finesse','sprintAtk'}},
|
||||
{name='tech_n_plus', x=600, y=160, size=40,shape=3,icon="tech", unlock={'tsd_e','backfire_n'}},
|
||||
{name='tech_h', x=220, y=120, size=40,shape=1,icon="tech", unlock={'tech_h_plus','tech_l'}},
|
||||
{name='tech_h_plus', x=20, y=150, size=35,shape=3,icon="tech"},
|
||||
{name='tech_l', x=220, y=280, size=40,shape=1,icon="tech", unlock={'tech_l_plus'}},
|
||||
{name='tech_l_plus', x=20, y=310, size=35,shape=3,icon="tech"},
|
||||
{name='tech_n', x=400, y=-110, size=40,shape=1,icon="tech", unlock={'tech_n_plus','tech_h','tech_finesse','sprintAtk'}},
|
||||
{name='tech_n_plus', x=600, y=160, size=40,shape=3,icon="tech", unlock={'tsd_e','backfire_n'}},
|
||||
{name='tech_h', x=220, y=120, size=40,shape=1,icon="tech", unlock={'tech_h_plus','tech_l'}},
|
||||
{name='tech_h_plus', x=20, y=150, size=35,shape=3,icon="tech"},
|
||||
{name='tech_l', x=220, y=280, size=40,shape=1,icon="tech", unlock={'tech_l_plus'}},
|
||||
{name='tech_l_plus', x=20, y=310, size=35,shape=3,icon="tech"},
|
||||
|
||||
{name='tech_finesse', x=800, y=50, size=40,shape=1,icon="tech", unlock={'tech_finesse_f'}},
|
||||
{name='tech_finesse_f', x=1000, y=50, size=40,shape=1,icon="tech"},
|
||||
{name='tech_finesse', x=800, y=50, size=40,shape=1,icon="tech", unlock={'tech_finesse_f'}},
|
||||
{name='tech_finesse_f',x=1000, y=50, size=40,shape=1,icon="tech"},
|
||||
|
||||
{name='tsd_e', x=800, y=200, size=40,shape=1,icon="tsd", unlock={'tsd_h'}},
|
||||
{name='tsd_h', x=1000, y=200, size=40,shape=1,icon="tsd", unlock={'tsd_u'}},
|
||||
{name='tsd_u', x=1200, y=200, size=40,shape=1,icon="tsd"},
|
||||
{name='tsd_e', x=800, y=200, size=40,shape=1,icon="tsd", unlock={'tsd_h'}},
|
||||
{name='tsd_h', x=1000, y=200, size=40,shape=1,icon="tsd", unlock={'tsd_u'}},
|
||||
{name='tsd_u', x=1200, y=200, size=40,shape=1,icon="tsd"},
|
||||
|
||||
{name='backfire_n', x=800, y=350, size=40,shape=1,icon="backfire",unlock={'backfire_h'}},
|
||||
{name='backfire_h', x=950, y=350, size=40,shape=1,icon="backfire",unlock={'backfire_l'}},
|
||||
{name='backfire_l', x=1100, y=350, size=40,shape=3,icon="backfire",unlock={'backfire_u'}},
|
||||
{name='backfire_u', x=1250, y=350, size=35,shape=2,icon="backfire"},
|
||||
{name='backfire_n', x=800, y=350, size=40,shape=1,icon="backfire", unlock={'backfire_h'}},
|
||||
{name='backfire_h', x=950, y=350, size=40,shape=1,icon="backfire", unlock={'backfire_l'}},
|
||||
{name='backfire_l', x=1100, y=350, size=40,shape=3,icon="backfire", unlock={'backfire_u'}},
|
||||
{name='backfire_u', x=1250, y=350, size=35,shape=2,icon="backfire"},
|
||||
|
||||
{name='sprintAtk', x=400, y=200, size=40,shape=1,icon="sprint2"},
|
||||
{name='sprintAtk', x=400, y=200, size=40,shape=1,icon="sprint2"},
|
||||
|
||||
{name='zen', x=-800, y=-600, size=40,shape=1,icon="zen", unlock={'ultra','infinite','infinite_dig'}},
|
||||
{name='ultra', x=-1000,y=-600, size=40,shape=1,icon="ultra"},
|
||||
{name='infinite', x=-1000,y=-400, size=40,shape=1,icon='infinite'},
|
||||
{name='infinite_dig', x=-800, y=-400, size=40,shape=1,icon="dig"},
|
||||
{name='zen', x=-800, y=-600, size=40,shape=1,icon="zen", unlock={'ultra','infinite','infinite_dig'}},
|
||||
{name='ultra', x=-1000, y=-600, size=40,shape=1,icon="ultra"},
|
||||
{name='infinite', x=-1000, y=-400, size=40,shape=1,icon='infinite'},
|
||||
{name='infinite_dig', x=-800, y=-400, size=40,shape=1,icon="dig"},
|
||||
|
||||
--Secret
|
||||
{name='sprintFix'},
|
||||
{name='sprintLock'},
|
||||
{name='sprintSmooth'},
|
||||
{name='marathon_bfmax'},
|
||||
--Secret
|
||||
{name='sprintFix'},
|
||||
{name='sprintLock'},
|
||||
{name='sprintSmooth'},
|
||||
{name='marathon_bfmax'},
|
||||
|
||||
--Old
|
||||
{name='master_l'},
|
||||
{name='master_u'},
|
||||
--Old
|
||||
{name='master_l'},
|
||||
{name='master_u'},
|
||||
|
||||
--Special
|
||||
{name='custom_puzzle'},
|
||||
{name='custom_clear'},
|
||||
{name="netBattle"},
|
||||
--Special
|
||||
{name='custom_puzzle'},
|
||||
{name='custom_clear'},
|
||||
{name="netBattle"},
|
||||
}
|
||||
@@ -1,108 +1,108 @@
|
||||
return{
|
||||
{
|
||||
{
|
||||
{4,4,4,3,3,3,7,0,0,0},
|
||||
{4,1,6,6,2,3,7,0,0,0},
|
||||
{1,1,6,6,2,2,7,0,0,0},
|
||||
{1,7,7,7,7,2,7,0,0,0},
|
||||
},
|
||||
{
|
||||
{4,4,4,3,3,3,0,0,0,7},
|
||||
{4,1,6,6,2,3,0,0,0,7},
|
||||
{1,1,6,6,2,2,0,0,0,7},
|
||||
{1,7,7,7,7,2,0,0,0,7},
|
||||
},
|
||||
{
|
||||
{2,7,7,7,7,1,7,0,0,0},
|
||||
{2,2,6,6,1,1,7,0,0,0},
|
||||
{3,2,6,6,1,4,7,0,0,0},
|
||||
{3,3,3,4,4,4,7,0,0,0},
|
||||
},
|
||||
{
|
||||
{2,7,7,7,7,1,0,0,0,7},
|
||||
{2,2,6,6,1,1,0,0,0,7},
|
||||
{3,2,6,6,1,4,0,0,0,7},
|
||||
{3,3,3,4,4,4,0,0,0,7},
|
||||
},
|
||||
},--3*4 shape
|
||||
{
|
||||
{
|
||||
{1,1,0,0,0,0,0,3,3,3},
|
||||
{5,1,1,0,0,0,0,6,6,3},
|
||||
{5,5,2,2,0,0,0,6,6,4},
|
||||
{5,2,2,0,0,0,0,4,4,4},
|
||||
},
|
||||
{
|
||||
{1,1,0,0,0,0,0,4,4,4},
|
||||
{5,1,1,0,0,0,0,4,6,6},
|
||||
{5,5,2,2,0,0,0,3,6,6},
|
||||
{5,2,2,0,0,0,0,3,3,3},
|
||||
},
|
||||
{
|
||||
{3,3,3,1,1,0,0,0,0,0},
|
||||
{6,6,3,5,1,1,0,0,0,0},
|
||||
{6,6,4,5,5,2,2,0,0,0},
|
||||
{4,4,4,5,2,2,0,0,0,0},
|
||||
},
|
||||
{
|
||||
{4,4,4,1,1,0,0,0,0,0},
|
||||
{4,6,6,5,1,1,0,0,0,0},
|
||||
{3,6,6,5,5,2,2,0,0,0},
|
||||
{3,3,3,5,2,2,0,0,0,0},
|
||||
},
|
||||
},--7 piece opener(right>)(without i)
|
||||
{
|
||||
{
|
||||
{4,4,4,3,3,3,0,0,0,0},
|
||||
{4,1,6,6,2,3,0,0,0,0},
|
||||
{1,1,6,6,2,2,0,0,0,0},
|
||||
{1,7,7,7,7,2,0,0,0,0},
|
||||
},
|
||||
{
|
||||
{2,7,7,7,7,1,0,0,0,0},
|
||||
{2,2,6,6,1,1,0,0,0,0},
|
||||
{3,2,6,6,1,4,0,0,0,0},
|
||||
{3,3,3,4,4,4,0,0,0,0},
|
||||
},
|
||||
},--6 piece opener
|
||||
{
|
||||
{
|
||||
{0,0,0,0,0,1,3,5,6,7},
|
||||
{0,0,0,0,0,1,3,5,6,7},
|
||||
{0,0,0,0,0,1,3,5,6,7},
|
||||
{0,0,0,0,0,1,3,5,6,7},
|
||||
},
|
||||
{
|
||||
{1,0,0,0,0,0,3,5,6,7},
|
||||
{1,0,0,0,0,0,3,5,6,7},
|
||||
{1,0,0,0,0,0,3,5,6,7},
|
||||
{1,0,0,0,0,0,3,5,6,7},
|
||||
},
|
||||
{
|
||||
{1,3,0,0,0,0,0,5,6,7},
|
||||
{1,3,0,0,0,0,0,5,6,7},
|
||||
{1,3,0,0,0,0,0,5,6,7},
|
||||
{1,3,0,0,0,0,0,5,6,7},
|
||||
},
|
||||
},--4*5
|
||||
{
|
||||
{
|
||||
{0,0,0,0,0,0,1,3,5,7},
|
||||
{0,0,0,0,0,0,7,1,3,5},
|
||||
{0,0,0,0,0,0,5,7,1,3},
|
||||
{0,0,0,0,0,0,3,5,7,1},
|
||||
},
|
||||
{
|
||||
{7,0,0,0,0,0,0,5,3,1},
|
||||
{7,0,0,0,0,0,0,5,3,1},
|
||||
{7,0,0,0,0,0,0,5,3,1},
|
||||
{7,0,0,0,0,0,0,5,3,1},
|
||||
},
|
||||
{
|
||||
{1,3,0,0,0,0,0,0,6,5},
|
||||
{5,6,0,0,0,0,0,0,3,1},
|
||||
{5,7,0,0,0,0,0,0,3,1},
|
||||
{1,3,0,0,0,0,0,0,7,5},
|
||||
},
|
||||
},--4*6
|
||||
{
|
||||
{
|
||||
{4,4,4,3,3,3,7,0,0,0},
|
||||
{4,1,6,6,2,3,7,0,0,0},
|
||||
{1,1,6,6,2,2,7,0,0,0},
|
||||
{1,7,7,7,7,2,7,0,0,0},
|
||||
},
|
||||
{
|
||||
{4,4,4,3,3,3,0,0,0,7},
|
||||
{4,1,6,6,2,3,0,0,0,7},
|
||||
{1,1,6,6,2,2,0,0,0,7},
|
||||
{1,7,7,7,7,2,0,0,0,7},
|
||||
},
|
||||
{
|
||||
{2,7,7,7,7,1,7,0,0,0},
|
||||
{2,2,6,6,1,1,7,0,0,0},
|
||||
{3,2,6,6,1,4,7,0,0,0},
|
||||
{3,3,3,4,4,4,7,0,0,0},
|
||||
},
|
||||
{
|
||||
{2,7,7,7,7,1,0,0,0,7},
|
||||
{2,2,6,6,1,1,0,0,0,7},
|
||||
{3,2,6,6,1,4,0,0,0,7},
|
||||
{3,3,3,4,4,4,0,0,0,7},
|
||||
},
|
||||
},--3*4 shape
|
||||
{
|
||||
{
|
||||
{1,1,0,0,0,0,0,3,3,3},
|
||||
{5,1,1,0,0,0,0,6,6,3},
|
||||
{5,5,2,2,0,0,0,6,6,4},
|
||||
{5,2,2,0,0,0,0,4,4,4},
|
||||
},
|
||||
{
|
||||
{1,1,0,0,0,0,0,4,4,4},
|
||||
{5,1,1,0,0,0,0,4,6,6},
|
||||
{5,5,2,2,0,0,0,3,6,6},
|
||||
{5,2,2,0,0,0,0,3,3,3},
|
||||
},
|
||||
{
|
||||
{3,3,3,1,1,0,0,0,0,0},
|
||||
{6,6,3,5,1,1,0,0,0,0},
|
||||
{6,6,4,5,5,2,2,0,0,0},
|
||||
{4,4,4,5,2,2,0,0,0,0},
|
||||
},
|
||||
{
|
||||
{4,4,4,1,1,0,0,0,0,0},
|
||||
{4,6,6,5,1,1,0,0,0,0},
|
||||
{3,6,6,5,5,2,2,0,0,0},
|
||||
{3,3,3,5,2,2,0,0,0,0},
|
||||
},
|
||||
},--7 piece opener(right>)(without i)
|
||||
{
|
||||
{
|
||||
{4,4,4,3,3,3,0,0,0,0},
|
||||
{4,1,6,6,2,3,0,0,0,0},
|
||||
{1,1,6,6,2,2,0,0,0,0},
|
||||
{1,7,7,7,7,2,0,0,0,0},
|
||||
},
|
||||
{
|
||||
{2,7,7,7,7,1,0,0,0,0},
|
||||
{2,2,6,6,1,1,0,0,0,0},
|
||||
{3,2,6,6,1,4,0,0,0,0},
|
||||
{3,3,3,4,4,4,0,0,0,0},
|
||||
},
|
||||
},--6 piece opener
|
||||
{
|
||||
{
|
||||
{0,0,0,0,0,1,3,5,6,7},
|
||||
{0,0,0,0,0,1,3,5,6,7},
|
||||
{0,0,0,0,0,1,3,5,6,7},
|
||||
{0,0,0,0,0,1,3,5,6,7},
|
||||
},
|
||||
{
|
||||
{1,0,0,0,0,0,3,5,6,7},
|
||||
{1,0,0,0,0,0,3,5,6,7},
|
||||
{1,0,0,0,0,0,3,5,6,7},
|
||||
{1,0,0,0,0,0,3,5,6,7},
|
||||
},
|
||||
{
|
||||
{1,3,0,0,0,0,0,5,6,7},
|
||||
{1,3,0,0,0,0,0,5,6,7},
|
||||
{1,3,0,0,0,0,0,5,6,7},
|
||||
{1,3,0,0,0,0,0,5,6,7},
|
||||
},
|
||||
},--4*5
|
||||
{
|
||||
{
|
||||
{0,0,0,0,0,0,1,3,5,7},
|
||||
{0,0,0,0,0,0,7,1,3,5},
|
||||
{0,0,0,0,0,0,5,7,1,3},
|
||||
{0,0,0,0,0,0,3,5,7,1},
|
||||
},
|
||||
{
|
||||
{7,0,0,0,0,0,0,5,3,1},
|
||||
{7,0,0,0,0,0,0,5,3,1},
|
||||
{7,0,0,0,0,0,0,5,3,1},
|
||||
{7,0,0,0,0,0,0,5,3,1},
|
||||
},
|
||||
{
|
||||
{1,3,0,0,0,0,0,0,6,5},
|
||||
{5,6,0,0,0,0,0,0,3,1},
|
||||
{5,7,0,0,0,0,0,0,3,1},
|
||||
{1,3,0,0,0,0,0,0,7,5},
|
||||
},
|
||||
},--4*6
|
||||
}
|
||||
File diff suppressed because one or more lines are too long
@@ -1,58 +1,58 @@
|
||||
return{
|
||||
color=COLOR.magenta,
|
||||
env={
|
||||
drop=30,lock=60,
|
||||
fall=12,
|
||||
freshLimit=15,
|
||||
pushSpeed=2,
|
||||
task=function(P)
|
||||
while true do
|
||||
YIELD()
|
||||
if P.control and P.atkBufferSum==0 then
|
||||
local D=P.modeData
|
||||
if D.wave<20 then
|
||||
local t=1500-30*D.wave--1500~900
|
||||
table.insert(P.atkBuffer,{line=generateLine(P.holeRND:random(4,7)),amount=12,countdown=t,cd0=t,time=0,sent=false,lv=3})
|
||||
table.insert(P.atkBuffer,{line=generateLine(P.holeRND:random(3,8)),amount=10,countdown=t,cd0=t,time=0,sent=false,lv=4})
|
||||
else
|
||||
local t=900-10*(D.wave-20)--900~600
|
||||
table.insert(P.atkBuffer,{line=generateLine(P.holeRND:random(10)),amount=14,countdown=t,cd0=t,time=0,sent=false,lv=4})
|
||||
table.insert(P.atkBuffer,{line=generateLine(P.holeRND:random(4,7)),amount=8,countdown=t,cd0=t,time=0,sent=false,lv=5})
|
||||
end
|
||||
P.atkBufferSum=P.atkBufferSum+22
|
||||
P.stat.recv=P.stat.recv+22
|
||||
D.wave=D.wave+1
|
||||
if D.wave%10==0 then
|
||||
if D.wave==20 then
|
||||
P:showTextF(text.great,0,-140,100,'appear',.6)
|
||||
P.gameEnv.pushSpeed=3
|
||||
elseif D.wave==50 then
|
||||
P:showTextF(text.maxspeed,0,-140,100,'appear',.6)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end,
|
||||
bg='rainbow2',bgm='shining terminal',
|
||||
},
|
||||
mesDisp=function(P)
|
||||
setFont(55)
|
||||
mStr(P.modeData.wave,63,200)
|
||||
mStr("22",63,320)
|
||||
mText(drawableText.wave,63,260)
|
||||
mText(drawableText.nextWave,63,380)
|
||||
end,
|
||||
score=function(P)return{P.modeData.wave,P.stat.time}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,
|
||||
getRank=function(P)
|
||||
local W=P.modeData.wave
|
||||
return
|
||||
W>=50 and 5 or
|
||||
W>=40 and 4 or
|
||||
W>=30 and 3 or
|
||||
W>=20 and 2 or
|
||||
W>=10 and 1 or
|
||||
W>=5 and 0
|
||||
end,
|
||||
color=COLOR.magenta,
|
||||
env={
|
||||
drop=30,lock=60,
|
||||
fall=12,
|
||||
freshLimit=15,
|
||||
pushSpeed=2,
|
||||
task=function(P)
|
||||
while true do
|
||||
YIELD()
|
||||
if P.control and P.atkBufferSum==0 then
|
||||
local D=P.modeData
|
||||
if D.wave<20 then
|
||||
local t=1500-30*D.wave--1500~900
|
||||
table.insert(P.atkBuffer,{line=generateLine(P.holeRND:random(4,7)),amount=12,countdown=t,cd0=t,time=0,sent=false,lv=3})
|
||||
table.insert(P.atkBuffer,{line=generateLine(P.holeRND:random(3,8)),amount=10,countdown=t,cd0=t,time=0,sent=false,lv=4})
|
||||
else
|
||||
local t=900-10*(D.wave-20)--900~600
|
||||
table.insert(P.atkBuffer,{line=generateLine(P.holeRND:random(10)),amount=14,countdown=t,cd0=t,time=0,sent=false,lv=4})
|
||||
table.insert(P.atkBuffer,{line=generateLine(P.holeRND:random(4,7)),amount=8,countdown=t,cd0=t,time=0,sent=false,lv=5})
|
||||
end
|
||||
P.atkBufferSum=P.atkBufferSum+22
|
||||
P.stat.recv=P.stat.recv+22
|
||||
D.wave=D.wave+1
|
||||
if D.wave%10==0 then
|
||||
if D.wave==20 then
|
||||
P:showTextF(text.great,0,-140,100,'appear',.6)
|
||||
P.gameEnv.pushSpeed=3
|
||||
elseif D.wave==50 then
|
||||
P:showTextF(text.maxspeed,0,-140,100,'appear',.6)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end,
|
||||
bg='rainbow2',bgm='shining terminal',
|
||||
},
|
||||
mesDisp=function(P)
|
||||
setFont(55)
|
||||
mStr(P.modeData.wave,63,200)
|
||||
mStr("22",63,320)
|
||||
mText(drawableText.wave,63,260)
|
||||
mText(drawableText.nextWave,63,380)
|
||||
end,
|
||||
score=function(P)return{P.modeData.wave,P.stat.time}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,
|
||||
getRank=function(P)
|
||||
local W=P.modeData.wave
|
||||
return
|
||||
W>=50 and 5 or
|
||||
W>=40 and 4 or
|
||||
W>=30 and 3 or
|
||||
W>=20 and 2 or
|
||||
W>=10 and 1 or
|
||||
W>=5 and 0
|
||||
end,
|
||||
}
|
||||
@@ -1,66 +1,66 @@
|
||||
return{
|
||||
color=COLOR.lYellow,
|
||||
env={
|
||||
drop=5,lock=60,
|
||||
fall=8,
|
||||
freshLimit=15,
|
||||
task=function(P)
|
||||
while true do
|
||||
YIELD()
|
||||
if P.control and P.atkBufferSum<4 then
|
||||
local D=P.modeData
|
||||
local s
|
||||
local t=800-10*D.wave--800~700~600~500
|
||||
if D.wave<10 then
|
||||
table.insert(P.atkBuffer,{line=generateLine(P.holeRND:random(5,6)),amount=9,countdown=t,cd0=t,time=0,sent=false,lv=3})
|
||||
table.insert(P.atkBuffer,{line=generateLine(P.holeRND:random(4,7)),amount=11,countdown=t,cd0=t+62,time=0,sent=false,lv=4})
|
||||
s=20
|
||||
elseif D.wave<20 then
|
||||
table.insert(P.atkBuffer,{line=generateLine(P.holeRND:random(3,8)),amount=11,countdown=t,cd0=t,time=0,sent=false,lv=4})
|
||||
table.insert(P.atkBuffer,{line=generateLine(P.holeRND:random(4,7)),amount=13,countdown=t,cd0=t+62,time=0,sent=false,lv=5})
|
||||
s=24
|
||||
else
|
||||
table.insert(P.atkBuffer,{line=generateLine(P.holeRND:random(2)*9-8),amount=14,countdown=t,cd0=t,time=0,sent=false,lv=5})
|
||||
table.insert(P.atkBuffer,{line=generateLine(P.holeRND:random(3,8)),amount=14,countdown=t+62,cd0=t,time=0,sent=false,lv=5})
|
||||
s=28
|
||||
end
|
||||
P.atkBufferSum=P.atkBufferSum+s
|
||||
P.stat.recv=P.stat.recv+s
|
||||
D.wave=D.wave+1
|
||||
if D.wave%10==0 then
|
||||
if D.wave==10 then
|
||||
P:showTextF(text.great,0,-140,100,'appear',.6)
|
||||
P.gameEnv.pushSpeed=4
|
||||
elseif D.wave==20 then
|
||||
P:showTextF(text.awesome,0,-140,100,'appear',.6)
|
||||
P.gameEnv.pushSpeed=5
|
||||
elseif D.wave==30 then
|
||||
P:showTextF(text.maxspeed,0,-140,100,'appear',.6)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end,
|
||||
bg='rainbow2',bgm='shining terminal',
|
||||
},
|
||||
mesDisp=function(P)
|
||||
setFont(55)
|
||||
mStr(P.modeData.wave,63,200)
|
||||
mStr(20+4*math.min(math.floor(P.modeData.wave/10),2),63,320)
|
||||
mText(drawableText.wave,63,260)
|
||||
mText(drawableText.nextWave,63,380)
|
||||
end,
|
||||
score=function(P)return{P.modeData.wave,P.stat.time}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,
|
||||
getRank=function(P)
|
||||
local W=P.modeData.wave
|
||||
return
|
||||
W>=50 and 5 or
|
||||
W>=40 and 4 or
|
||||
W>=30 and 3 or
|
||||
W>=20 and 2 or
|
||||
W>=10 and 1 or
|
||||
W>=5 and 0
|
||||
end,
|
||||
color=COLOR.lYellow,
|
||||
env={
|
||||
drop=5,lock=60,
|
||||
fall=8,
|
||||
freshLimit=15,
|
||||
task=function(P)
|
||||
while true do
|
||||
YIELD()
|
||||
if P.control and P.atkBufferSum<4 then
|
||||
local D=P.modeData
|
||||
local s
|
||||
local t=800-10*D.wave--800~700~600~500
|
||||
if D.wave<10 then
|
||||
table.insert(P.atkBuffer,{line=generateLine(P.holeRND:random(5,6)),amount=9,countdown=t,cd0=t,time=0,sent=false,lv=3})
|
||||
table.insert(P.atkBuffer,{line=generateLine(P.holeRND:random(4,7)),amount=11,countdown=t,cd0=t+62,time=0,sent=false,lv=4})
|
||||
s=20
|
||||
elseif D.wave<20 then
|
||||
table.insert(P.atkBuffer,{line=generateLine(P.holeRND:random(3,8)),amount=11,countdown=t,cd0=t,time=0,sent=false,lv=4})
|
||||
table.insert(P.atkBuffer,{line=generateLine(P.holeRND:random(4,7)),amount=13,countdown=t,cd0=t+62,time=0,sent=false,lv=5})
|
||||
s=24
|
||||
else
|
||||
table.insert(P.atkBuffer,{line=generateLine(P.holeRND:random(2)*9-8),amount=14,countdown=t,cd0=t,time=0,sent=false,lv=5})
|
||||
table.insert(P.atkBuffer,{line=generateLine(P.holeRND:random(3,8)),amount=14,countdown=t+62,cd0=t,time=0,sent=false,lv=5})
|
||||
s=28
|
||||
end
|
||||
P.atkBufferSum=P.atkBufferSum+s
|
||||
P.stat.recv=P.stat.recv+s
|
||||
D.wave=D.wave+1
|
||||
if D.wave%10==0 then
|
||||
if D.wave==10 then
|
||||
P:showTextF(text.great,0,-140,100,'appear',.6)
|
||||
P.gameEnv.pushSpeed=4
|
||||
elseif D.wave==20 then
|
||||
P:showTextF(text.awesome,0,-140,100,'appear',.6)
|
||||
P.gameEnv.pushSpeed=5
|
||||
elseif D.wave==30 then
|
||||
P:showTextF(text.maxspeed,0,-140,100,'appear',.6)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end,
|
||||
bg='rainbow2',bgm='shining terminal',
|
||||
},
|
||||
mesDisp=function(P)
|
||||
setFont(55)
|
||||
mStr(P.modeData.wave,63,200)
|
||||
mStr(20+4*math.min(math.floor(P.modeData.wave/10),2),63,320)
|
||||
mText(drawableText.wave,63,260)
|
||||
mText(drawableText.nextWave,63,380)
|
||||
end,
|
||||
score=function(P)return{P.modeData.wave,P.stat.time}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,
|
||||
getRank=function(P)
|
||||
local W=P.modeData.wave
|
||||
return
|
||||
W>=50 and 5 or
|
||||
W>=40 and 4 or
|
||||
W>=30 and 3 or
|
||||
W>=20 and 2 or
|
||||
W>=10 and 1 or
|
||||
W>=5 and 0
|
||||
end,
|
||||
}
|
||||
@@ -1,39 +1,39 @@
|
||||
return{
|
||||
color=COLOR.magenta,
|
||||
env={
|
||||
drop=10,lock=60,
|
||||
freshLimit=15,
|
||||
dropPiece=function(P)
|
||||
if P.lastPiece.atk>0 then
|
||||
P:receive(nil,P.lastPiece.atk,60,generateLine(P.holeRND:random(10)))
|
||||
end
|
||||
if P.stat.atk>=100 then
|
||||
P:win('finish')
|
||||
end
|
||||
end,
|
||||
bg='tunnel',bgm='echo',
|
||||
},
|
||||
mesDisp=function(P)
|
||||
setFont(60)
|
||||
mStr(P.stat.atk,63,280)
|
||||
mText(drawableText.atk,63,350)
|
||||
end,
|
||||
score=function(P)return{math.min(math.floor(P.stat.atk),100),P.stat.time}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,
|
||||
getRank=function(P)
|
||||
local L=P.stat.atk
|
||||
if L>=100 then
|
||||
local T=P.stat.time
|
||||
return
|
||||
T<50 and 5 or
|
||||
T<65 and 4 or
|
||||
T<100 and 3 or
|
||||
T<130 and 2 or
|
||||
1
|
||||
else
|
||||
return
|
||||
L>=50 and 0
|
||||
end
|
||||
end,
|
||||
color=COLOR.magenta,
|
||||
env={
|
||||
drop=10,lock=60,
|
||||
freshLimit=15,
|
||||
dropPiece=function(P)
|
||||
if P.lastPiece.atk>0 then
|
||||
P:receive(nil,P.lastPiece.atk,60,generateLine(P.holeRND:random(10)))
|
||||
end
|
||||
if P.stat.atk>=100 then
|
||||
P:win('finish')
|
||||
end
|
||||
end,
|
||||
bg='tunnel',bgm='echo',
|
||||
},
|
||||
mesDisp=function(P)
|
||||
setFont(60)
|
||||
mStr(P.stat.atk,63,280)
|
||||
mText(drawableText.atk,63,350)
|
||||
end,
|
||||
score=function(P)return{math.min(math.floor(P.stat.atk),100),P.stat.time}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,
|
||||
getRank=function(P)
|
||||
local L=P.stat.atk
|
||||
if L>=100 then
|
||||
local T=P.stat.time
|
||||
return
|
||||
T<50 and 5 or
|
||||
T<65 and 4 or
|
||||
T<100 and 3 or
|
||||
T<130 and 2 or
|
||||
1
|
||||
else
|
||||
return
|
||||
L>=50 and 0
|
||||
end
|
||||
end,
|
||||
}
|
||||
@@ -1,39 +1,39 @@
|
||||
return{
|
||||
color=COLOR.red,
|
||||
env={
|
||||
drop=5,lock=45,
|
||||
freshLimit=15,
|
||||
dropPiece=function(P)
|
||||
if P.lastPiece.atk>0 then
|
||||
P:receive(nil,P.lastPiece.atk,30,generateLine(P.holeRND:random(10)))
|
||||
end
|
||||
if P.stat.atk>=100 then
|
||||
P:win('finish')
|
||||
end
|
||||
end,
|
||||
bg='blackhole',bgm='echo',
|
||||
},
|
||||
mesDisp=function(P)
|
||||
setFont(60)
|
||||
mStr(P.stat.atk,63,280)
|
||||
mText(drawableText.atk,63,350)
|
||||
end,
|
||||
score=function(P)return{math.min(math.floor(P.stat.atk),100),P.stat.time}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,
|
||||
getRank=function(P)
|
||||
local L=P.stat.atk
|
||||
if L>=100 then
|
||||
local T=P.stat.time
|
||||
return
|
||||
T<55 and 5 or
|
||||
T<70 and 4 or
|
||||
T<110 and 3 or
|
||||
T<150 and 2 or
|
||||
1
|
||||
else
|
||||
return
|
||||
L>=50 and 0
|
||||
end
|
||||
end,
|
||||
color=COLOR.red,
|
||||
env={
|
||||
drop=5,lock=45,
|
||||
freshLimit=15,
|
||||
dropPiece=function(P)
|
||||
if P.lastPiece.atk>0 then
|
||||
P:receive(nil,P.lastPiece.atk,30,generateLine(P.holeRND:random(10)))
|
||||
end
|
||||
if P.stat.atk>=100 then
|
||||
P:win('finish')
|
||||
end
|
||||
end,
|
||||
bg='blackhole',bgm='echo',
|
||||
},
|
||||
mesDisp=function(P)
|
||||
setFont(60)
|
||||
mStr(P.stat.atk,63,280)
|
||||
mText(drawableText.atk,63,350)
|
||||
end,
|
||||
score=function(P)return{math.min(math.floor(P.stat.atk),100),P.stat.time}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,
|
||||
getRank=function(P)
|
||||
local L=P.stat.atk
|
||||
if L>=100 then
|
||||
local T=P.stat.time
|
||||
return
|
||||
T<55 and 5 or
|
||||
T<70 and 4 or
|
||||
T<110 and 3 or
|
||||
T<150 and 2 or
|
||||
1
|
||||
else
|
||||
return
|
||||
L>=50 and 0
|
||||
end
|
||||
end,
|
||||
}
|
||||
@@ -1,38 +1,38 @@
|
||||
return{
|
||||
color=COLOR.green,
|
||||
env={
|
||||
drop=30,lock=60,
|
||||
dropPiece=function(P)
|
||||
if P.lastPiece.atk>0 then
|
||||
P:receive(nil,P.lastPiece.atk,120,generateLine(P.holeRND:random(10)))
|
||||
end
|
||||
if P.stat.atk>=100 then
|
||||
P:win('finish')
|
||||
end
|
||||
end,
|
||||
bg='tunnel',bgm='echo',
|
||||
},
|
||||
mesDisp=function(P)
|
||||
setFont(60)
|
||||
mStr(P.stat.atk,63,280)
|
||||
mText(drawableText.atk,63,350)
|
||||
end,
|
||||
score=function(P)return{math.min(math.floor(P.stat.atk),100),P.stat.time}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,
|
||||
getRank=function(P)
|
||||
local L=P.stat.atk
|
||||
if L>=100 then
|
||||
local T=P.stat.time
|
||||
return
|
||||
T<45 and 5 or
|
||||
T<60 and 4 or
|
||||
T<90 and 3 or
|
||||
T<120 and 2 or
|
||||
1
|
||||
else
|
||||
return
|
||||
L>=50 and 0
|
||||
end
|
||||
end,
|
||||
color=COLOR.green,
|
||||
env={
|
||||
drop=30,lock=60,
|
||||
dropPiece=function(P)
|
||||
if P.lastPiece.atk>0 then
|
||||
P:receive(nil,P.lastPiece.atk,120,generateLine(P.holeRND:random(10)))
|
||||
end
|
||||
if P.stat.atk>=100 then
|
||||
P:win('finish')
|
||||
end
|
||||
end,
|
||||
bg='tunnel',bgm='echo',
|
||||
},
|
||||
mesDisp=function(P)
|
||||
setFont(60)
|
||||
mStr(P.stat.atk,63,280)
|
||||
mText(drawableText.atk,63,350)
|
||||
end,
|
||||
score=function(P)return{math.min(math.floor(P.stat.atk),100),P.stat.time}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,
|
||||
getRank=function(P)
|
||||
local L=P.stat.atk
|
||||
if L>=100 then
|
||||
local T=P.stat.time
|
||||
return
|
||||
T<45 and 5 or
|
||||
T<60 and 4 or
|
||||
T<90 and 3 or
|
||||
T<120 and 2 or
|
||||
1
|
||||
else
|
||||
return
|
||||
L>=50 and 0
|
||||
end
|
||||
end,
|
||||
}
|
||||
@@ -1,39 +1,39 @@
|
||||
return{
|
||||
color=COLOR.lYellow,
|
||||
env={
|
||||
drop=2,lock=30,
|
||||
freshLimit=10,
|
||||
dropPiece=function(P)
|
||||
if P.lastPiece.atk>0 then
|
||||
P:receive(nil,P.lastPiece.atk,0,generateLine(P.holeRND:random(10)))
|
||||
end
|
||||
if P.stat.atk>=100 then
|
||||
P:win('finish')
|
||||
end
|
||||
end,
|
||||
bg='blackhole',bgm='echo',
|
||||
},
|
||||
mesDisp=function(P)
|
||||
setFont(60)
|
||||
mStr(P.stat.atk,63,280)
|
||||
mText(drawableText.atk,63,350)
|
||||
end,
|
||||
score=function(P)return{math.min(math.floor(P.stat.atk),100),P.stat.time}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,
|
||||
getRank=function(P)
|
||||
local L=P.stat.atk
|
||||
if L>=100 then
|
||||
local T=P.stat.time
|
||||
return
|
||||
T<60 and 5 or
|
||||
T<80 and 4 or
|
||||
T<120 and 3 or
|
||||
T<180 and 2 or
|
||||
1
|
||||
else
|
||||
return
|
||||
L>=50 and 0
|
||||
end
|
||||
end,
|
||||
color=COLOR.lYellow,
|
||||
env={
|
||||
drop=2,lock=30,
|
||||
freshLimit=10,
|
||||
dropPiece=function(P)
|
||||
if P.lastPiece.atk>0 then
|
||||
P:receive(nil,P.lastPiece.atk,0,generateLine(P.holeRND:random(10)))
|
||||
end
|
||||
if P.stat.atk>=100 then
|
||||
P:win('finish')
|
||||
end
|
||||
end,
|
||||
bg='blackhole',bgm='echo',
|
||||
},
|
||||
mesDisp=function(P)
|
||||
setFont(60)
|
||||
mStr(P.stat.atk,63,280)
|
||||
mText(drawableText.atk,63,350)
|
||||
end,
|
||||
score=function(P)return{math.min(math.floor(P.stat.atk),100),P.stat.time}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,
|
||||
getRank=function(P)
|
||||
local L=P.stat.atk
|
||||
if L>=100 then
|
||||
local T=P.stat.time
|
||||
return
|
||||
T<60 and 5 or
|
||||
T<80 and 4 or
|
||||
T<120 and 3 or
|
||||
T<180 and 2 or
|
||||
1
|
||||
else
|
||||
return
|
||||
L>=50 and 0
|
||||
end
|
||||
end,
|
||||
}
|
||||
@@ -1,19 +1,19 @@
|
||||
return{
|
||||
color=COLOR.lGray,
|
||||
env={
|
||||
drop=1e99,lock=1e99,
|
||||
holdCount=0,
|
||||
task=function(P)
|
||||
while not P.control do YIELD()end
|
||||
P:pressKey(6)
|
||||
P:lose()
|
||||
end,
|
||||
bg='bg1',bgm='new era',
|
||||
},
|
||||
score=function(P)return{P.modeData.event,P.stat.finesseRate*.2/P.stat.piece}end,
|
||||
scoreDisp=function(D)return("%d Stage %.2f%%"):format(D[1],D[2])end,
|
||||
comp=function(a,b)return a[1]>b[1]or a[1]==b[1]and a[2]>b[2]end,
|
||||
getRank=function()
|
||||
return 1
|
||||
end,
|
||||
color=COLOR.lGray,
|
||||
env={
|
||||
drop=1e99,lock=1e99,
|
||||
holdCount=0,
|
||||
task=function(P)
|
||||
while not P.control do YIELD()end
|
||||
P:pressKey(6)
|
||||
P:lose()
|
||||
end,
|
||||
bg='bg1',bgm='new era',
|
||||
},
|
||||
score=function(P)return{P.modeData.event,P.stat.finesseRate*.2/P.stat.piece}end,
|
||||
scoreDisp=function(D)return("%d Stage %.2f%%"):format(D[1],D[2])end,
|
||||
comp=function(a,b)return a[1]>b[1]or a[1]==b[1]and a[2]>b[2]end,
|
||||
getRank=function()
|
||||
return 1
|
||||
end,
|
||||
}
|
||||
@@ -1,37 +1,37 @@
|
||||
local min=math.min
|
||||
return{
|
||||
color=COLOR.cyan,
|
||||
env={
|
||||
drop=30,lock=45,
|
||||
visible='easy',
|
||||
dropPiece=function(P)if P.stat.row>=200 then P:win('finish')end end,
|
||||
freshLimit=10,
|
||||
bg='glow',bgm='push',
|
||||
},
|
||||
mesDisp=function(P)
|
||||
mText(drawableText.line,63,300)
|
||||
mText(drawableText.techrash,63,420)
|
||||
setFont(75)
|
||||
mStr(P.stat.row,63,220)
|
||||
mStr(P.stat.clears[4],63,340)
|
||||
end,
|
||||
score=function(P)return{min(P.stat.row,200),P.stat.time}end,
|
||||
scoreDisp=function(D)return D[1].." Lines "..STRING.time(D[2])end,
|
||||
comp=function(a,b)return a[1]>b[1]or a[1]==b[1]and a[2]<b[2]end,
|
||||
getRank=function(P)
|
||||
local L=P.stat.row
|
||||
if L>=200 then
|
||||
local T=P.stat.time
|
||||
return
|
||||
T<=140 and 5 or
|
||||
T<=200 and 4 or
|
||||
3
|
||||
else
|
||||
return
|
||||
L>=150 and 3 or
|
||||
L>=100 and 2 or
|
||||
L>=40 and 1 or
|
||||
L>=1 and 0
|
||||
end
|
||||
end,
|
||||
color=COLOR.cyan,
|
||||
env={
|
||||
drop=30,lock=45,
|
||||
visible='easy',
|
||||
dropPiece=function(P)if P.stat.row>=200 then P:win('finish')end end,
|
||||
freshLimit=10,
|
||||
bg='glow',bgm='push',
|
||||
},
|
||||
mesDisp=function(P)
|
||||
mText(drawableText.line,63,300)
|
||||
mText(drawableText.techrash,63,420)
|
||||
setFont(75)
|
||||
mStr(P.stat.row,63,220)
|
||||
mStr(P.stat.clears[4],63,340)
|
||||
end,
|
||||
score=function(P)return{min(P.stat.row,200),P.stat.time}end,
|
||||
scoreDisp=function(D)return D[1].." Lines "..STRING.time(D[2])end,
|
||||
comp=function(a,b)return a[1]>b[1]or a[1]==b[1]and a[2]<b[2]end,
|
||||
getRank=function(P)
|
||||
local L=P.stat.row
|
||||
if L>=200 then
|
||||
local T=P.stat.time
|
||||
return
|
||||
T<=140 and 5 or
|
||||
T<=200 and 4 or
|
||||
3
|
||||
else
|
||||
return
|
||||
L>=150 and 3 or
|
||||
L>=100 and 2 or
|
||||
L>=40 and 1 or
|
||||
L>=1 and 0
|
||||
end
|
||||
end,
|
||||
}
|
||||
@@ -1,45 +1,45 @@
|
||||
local gc=love.graphics
|
||||
local min=math.min
|
||||
return{
|
||||
color=COLOR.magenta,
|
||||
env={
|
||||
drop=15,lock=45,
|
||||
fall=10,
|
||||
dropFX=0,lockFX=0,
|
||||
visible='none',
|
||||
score=false,
|
||||
dropPiece=function(P)if P.stat.row>=200 then P:win('finish')end end,
|
||||
freshLimit=15,
|
||||
bg='rgb',bgm='push',
|
||||
},
|
||||
mesDisp=function(P)
|
||||
mText(drawableText.line,63,300)
|
||||
mText(drawableText.techrash,63,420)
|
||||
setFont(75)
|
||||
mStr(P.stat.row,63,220)
|
||||
mStr(P.stat.clears[4],63,340)
|
||||
PLY.draw.applyField(P)
|
||||
gc.setColor(1,1,1,.1)
|
||||
gc.draw(IMG.electric,0,106,0,2.6)
|
||||
PLY.draw.cancelField(P)
|
||||
end,
|
||||
score=function(P)return{min(P.stat.row,200),P.stat.time}end,
|
||||
scoreDisp=function(D)return D[1].." Lines "..STRING.time(D[2])end,
|
||||
comp=function(a,b)return a[1]>b[1]or a[1]==b[1]and a[2]<b[2]end,
|
||||
getRank=function(P)
|
||||
local L=P.stat.row
|
||||
if L>=200 then
|
||||
local T=P.stat.time
|
||||
return
|
||||
T<=180 and 5 or
|
||||
T<=240 and 4 or
|
||||
3
|
||||
else
|
||||
return
|
||||
L>=150 and 3 or
|
||||
L>=90 and 2 or
|
||||
L>=40 and 1 or
|
||||
L>=1 and 0
|
||||
end
|
||||
end,
|
||||
color=COLOR.magenta,
|
||||
env={
|
||||
drop=15,lock=45,
|
||||
fall=10,
|
||||
dropFX=0,lockFX=0,
|
||||
visible='none',
|
||||
score=false,
|
||||
dropPiece=function(P)if P.stat.row>=200 then P:win('finish')end end,
|
||||
freshLimit=15,
|
||||
bg='rgb',bgm='push',
|
||||
},
|
||||
mesDisp=function(P)
|
||||
mText(drawableText.line,63,300)
|
||||
mText(drawableText.techrash,63,420)
|
||||
setFont(75)
|
||||
mStr(P.stat.row,63,220)
|
||||
mStr(P.stat.clears[4],63,340)
|
||||
PLY.draw.applyField(P)
|
||||
gc.setColor(1,1,1,.1)
|
||||
gc.draw(IMG.electric,0,106,0,2.6)
|
||||
PLY.draw.cancelField(P)
|
||||
end,
|
||||
score=function(P)return{min(P.stat.row,200),P.stat.time}end,
|
||||
scoreDisp=function(D)return D[1].." Lines "..STRING.time(D[2])end,
|
||||
comp=function(a,b)return a[1]>b[1]or a[1]==b[1]and a[2]<b[2]end,
|
||||
getRank=function(P)
|
||||
local L=P.stat.row
|
||||
if L>=200 then
|
||||
local T=P.stat.time
|
||||
return
|
||||
T<=180 and 5 or
|
||||
T<=240 and 4 or
|
||||
3
|
||||
else
|
||||
return
|
||||
L>=150 and 3 or
|
||||
L>=90 and 2 or
|
||||
L>=40 and 1 or
|
||||
L>=1 and 0
|
||||
end
|
||||
end,
|
||||
}
|
||||
@@ -1,46 +1,46 @@
|
||||
local gc=love.graphics
|
||||
local min=math.min
|
||||
return{
|
||||
color=COLOR.red,
|
||||
env={
|
||||
drop=10,lock=60,
|
||||
fall=5,
|
||||
ghost=0,
|
||||
dropFX=0,lockFX=0,
|
||||
visible='none',
|
||||
score=false,
|
||||
dropPiece=function(P)if P.stat.row>=200 then P:win('finish')end end,
|
||||
freshLimit=15,
|
||||
bg='rgb',bgm='push',
|
||||
},
|
||||
mesDisp=function(P)
|
||||
mText(drawableText.line,63,300)
|
||||
mText(drawableText.techrash,63,420)
|
||||
setFont(75)
|
||||
mStr(P.stat.row,63,220)
|
||||
mStr(P.stat.clears[4],63,340)
|
||||
PLY.draw.applyField(P)
|
||||
gc.setColor(1,1,1,.1)
|
||||
gc.draw(IMG.electric,0,106,0,2.6)
|
||||
PLY.draw.cancelField(P)
|
||||
end,
|
||||
score=function(P)return{min(P.stat.row,200),P.stat.time}end,
|
||||
scoreDisp=function(D)return D[1].." Lines "..STRING.time(D[2])end,
|
||||
comp=function(a,b)return a[1]>b[1]or a[1]==b[1]and a[2]<b[2]end,
|
||||
getRank=function(P)
|
||||
local L=P.stat.row
|
||||
if L>=200 then
|
||||
local T=P.stat.time
|
||||
return
|
||||
T<=200 and 5 or
|
||||
T<=250 and 4 or
|
||||
3
|
||||
else
|
||||
return
|
||||
L>=150 and 3 or
|
||||
L>=100 and 2 or
|
||||
L>=40 and 1 or
|
||||
L>=1 and 0
|
||||
end
|
||||
end,
|
||||
color=COLOR.red,
|
||||
env={
|
||||
drop=10,lock=60,
|
||||
fall=5,
|
||||
ghost=0,
|
||||
dropFX=0,lockFX=0,
|
||||
visible='none',
|
||||
score=false,
|
||||
dropPiece=function(P)if P.stat.row>=200 then P:win('finish')end end,
|
||||
freshLimit=15,
|
||||
bg='rgb',bgm='push',
|
||||
},
|
||||
mesDisp=function(P)
|
||||
mText(drawableText.line,63,300)
|
||||
mText(drawableText.techrash,63,420)
|
||||
setFont(75)
|
||||
mStr(P.stat.row,63,220)
|
||||
mStr(P.stat.clears[4],63,340)
|
||||
PLY.draw.applyField(P)
|
||||
gc.setColor(1,1,1,.1)
|
||||
gc.draw(IMG.electric,0,106,0,2.6)
|
||||
PLY.draw.cancelField(P)
|
||||
end,
|
||||
score=function(P)return{min(P.stat.row,200),P.stat.time}end,
|
||||
scoreDisp=function(D)return D[1].." Lines "..STRING.time(D[2])end,
|
||||
comp=function(a,b)return a[1]>b[1]or a[1]==b[1]and a[2]<b[2]end,
|
||||
getRank=function(P)
|
||||
local L=P.stat.row
|
||||
if L>=200 then
|
||||
local T=P.stat.time
|
||||
return
|
||||
T<=200 and 5 or
|
||||
T<=250 and 4 or
|
||||
3
|
||||
else
|
||||
return
|
||||
L>=150 and 3 or
|
||||
L>=100 and 2 or
|
||||
L>=40 and 1 or
|
||||
L>=1 and 0
|
||||
end
|
||||
end,
|
||||
}
|
||||
@@ -1,42 +1,42 @@
|
||||
local gc=love.graphics
|
||||
local min=math.min
|
||||
return{
|
||||
color=COLOR.green,
|
||||
env={
|
||||
drop=15,lock=45,
|
||||
freshLimit=10,
|
||||
visible='fast',
|
||||
dropPiece=function(P)if P.stat.row>=200 then P:win('finish')end end,
|
||||
bg='glow',bgm='push',
|
||||
},
|
||||
mesDisp=function(P)
|
||||
mText(drawableText.line,63,300)
|
||||
mText(drawableText.techrash,63,420)
|
||||
setFont(75)
|
||||
mStr(P.stat.row,63,220)
|
||||
mStr(P.stat.clears[4],63,340)
|
||||
PLY.draw.applyField(P)
|
||||
gc.setColor(1,1,1,.1)
|
||||
gc.draw(IMG.electric,0,106,0,2.6)
|
||||
PLY.draw.cancelField(P)
|
||||
end,
|
||||
score=function(P)return{min(P.stat.row,200),P.stat.time}end,
|
||||
scoreDisp=function(D)return D[1].." Lines "..STRING.time(D[2])end,
|
||||
comp=function(a,b)return a[1]>b[1]or a[1]==b[1]and a[2]<b[2]end,
|
||||
getRank=function(P)
|
||||
local L=P.stat.row
|
||||
if L>=200 then
|
||||
local T=P.stat.time
|
||||
return
|
||||
T<=180 and 5 or
|
||||
T<=220 and 4 or
|
||||
3
|
||||
else
|
||||
return
|
||||
L>=126 and 3 or
|
||||
L>=80 and 2 or
|
||||
L>=40 and 1 or
|
||||
L>=1 and 0
|
||||
end
|
||||
end,
|
||||
color=COLOR.green,
|
||||
env={
|
||||
drop=15,lock=45,
|
||||
freshLimit=10,
|
||||
visible='fast',
|
||||
dropPiece=function(P)if P.stat.row>=200 then P:win('finish')end end,
|
||||
bg='glow',bgm='push',
|
||||
},
|
||||
mesDisp=function(P)
|
||||
mText(drawableText.line,63,300)
|
||||
mText(drawableText.techrash,63,420)
|
||||
setFont(75)
|
||||
mStr(P.stat.row,63,220)
|
||||
mStr(P.stat.clears[4],63,340)
|
||||
PLY.draw.applyField(P)
|
||||
gc.setColor(1,1,1,.1)
|
||||
gc.draw(IMG.electric,0,106,0,2.6)
|
||||
PLY.draw.cancelField(P)
|
||||
end,
|
||||
score=function(P)return{min(P.stat.row,200),P.stat.time}end,
|
||||
scoreDisp=function(D)return D[1].." Lines "..STRING.time(D[2])end,
|
||||
comp=function(a,b)return a[1]>b[1]or a[1]==b[1]and a[2]<b[2]end,
|
||||
getRank=function(P)
|
||||
local L=P.stat.row
|
||||
if L>=200 then
|
||||
local T=P.stat.time
|
||||
return
|
||||
T<=180 and 5 or
|
||||
T<=220 and 4 or
|
||||
3
|
||||
else
|
||||
return
|
||||
L>=126 and 3 or
|
||||
L>=80 and 2 or
|
||||
L>=40 and 1 or
|
||||
L>=1 and 0
|
||||
end
|
||||
end,
|
||||
}
|
||||
@@ -1,39 +1,39 @@
|
||||
local gc=love.graphics
|
||||
local min=math.min
|
||||
return{
|
||||
color=COLOR.red,
|
||||
env={
|
||||
drop=30,lock=60,
|
||||
block=false,center=0,ghost=0,
|
||||
dropFX=0,lockFX=0,
|
||||
visible='none',
|
||||
score=false,
|
||||
dropPiece=function(P)if P.stat.row>=100 then P:win('finish')end end,
|
||||
freshLimit=15,
|
||||
bg='rgb',bgm='far',
|
||||
},
|
||||
mesDisp=function(P)
|
||||
mText(drawableText.line,63,300)
|
||||
mText(drawableText.techrash,63,420)
|
||||
setFont(75)
|
||||
mStr(P.stat.row,63,220)
|
||||
mStr(P.stat.clears[4],63,340)
|
||||
PLY.draw.applyField(P)
|
||||
gc.setColor(1,1,1,.1)
|
||||
gc.draw(IMG.electric,0,106,0,2.6)
|
||||
PLY.draw.cancelField(P)
|
||||
end,
|
||||
score=function(P)return{min(P.stat.row,100),P.stat.time}end,
|
||||
scoreDisp=function(D)return D[1].." Lines "..STRING.time(D[2])end,
|
||||
comp=function(a,b)return a[1]>b[1]or a[1]==b[1]and a[2]<b[2]end,
|
||||
getRank=function(P)
|
||||
local L=P.stat.row
|
||||
return
|
||||
L>=100 and 5 or
|
||||
L>=75 and 4 or
|
||||
L>=50 and 3 or
|
||||
L>=26 and 2 or
|
||||
L>=10 and 1 or
|
||||
L>=1 and 0
|
||||
end,
|
||||
color=COLOR.red,
|
||||
env={
|
||||
drop=30,lock=60,
|
||||
block=false,center=0,ghost=0,
|
||||
dropFX=0,lockFX=0,
|
||||
visible='none',
|
||||
score=false,
|
||||
dropPiece=function(P)if P.stat.row>=100 then P:win('finish')end end,
|
||||
freshLimit=15,
|
||||
bg='rgb',bgm='far',
|
||||
},
|
||||
mesDisp=function(P)
|
||||
mText(drawableText.line,63,300)
|
||||
mText(drawableText.techrash,63,420)
|
||||
setFont(75)
|
||||
mStr(P.stat.row,63,220)
|
||||
mStr(P.stat.clears[4],63,340)
|
||||
PLY.draw.applyField(P)
|
||||
gc.setColor(1,1,1,.1)
|
||||
gc.draw(IMG.electric,0,106,0,2.6)
|
||||
PLY.draw.cancelField(P)
|
||||
end,
|
||||
score=function(P)return{min(P.stat.row,100),P.stat.time}end,
|
||||
scoreDisp=function(D)return D[1].." Lines "..STRING.time(D[2])end,
|
||||
comp=function(a,b)return a[1]>b[1]or a[1]==b[1]and a[2]<b[2]end,
|
||||
getRank=function(P)
|
||||
local L=P.stat.row
|
||||
return
|
||||
L>=100 and 5 or
|
||||
L>=75 and 4 or
|
||||
L>=50 and 3 or
|
||||
L>=26 and 2 or
|
||||
L>=10 and 1 or
|
||||
L>=1 and 0
|
||||
end,
|
||||
}
|
||||
@@ -9,65 +9,65 @@ local boarder=GC.DO{334,620,
|
||||
local gc=love.graphics
|
||||
local sin,min=math.sin,math.min
|
||||
return{
|
||||
color=COLOR.red,
|
||||
env={
|
||||
drop=30,lock=60,
|
||||
nextCount=1,
|
||||
block=false,center=0,ghost=0,
|
||||
dropFX=0,lockFX=0,
|
||||
visible='none',
|
||||
dropPiece=function(P)if P.stat.row>=40 then P:win('finish')end end,
|
||||
freshLimit=15,
|
||||
bg='none',bgm='far',
|
||||
},
|
||||
load=function()
|
||||
PLY.newPlayer(1)
|
||||
if SETTING.sfx_spawn==0 then
|
||||
MES.new('warn',text.switchSpawnSFX)
|
||||
end
|
||||
end,
|
||||
mesDisp=function(P,repMode)
|
||||
if not GAME.result then
|
||||
gc.push('transform')
|
||||
if repMode then
|
||||
gc.origin()
|
||||
gc.setColor(.3,.3,.3,.7)
|
||||
gc.rectangle('fill',0,0,SCR.w,SCR.h)
|
||||
else
|
||||
gc.clear(.2,.2,.2)
|
||||
gc.translate(150,0)
|
||||
gc.setColor(.5,.5,.5)
|
||||
--Frame
|
||||
gc.draw(boarder,-17,-12)
|
||||
end
|
||||
gc.pop()
|
||||
end
|
||||
color=COLOR.red,
|
||||
env={
|
||||
drop=30,lock=60,
|
||||
nextCount=1,
|
||||
block=false,center=0,ghost=0,
|
||||
dropFX=0,lockFX=0,
|
||||
visible='none',
|
||||
dropPiece=function(P)if P.stat.row>=40 then P:win('finish')end end,
|
||||
freshLimit=15,
|
||||
bg='none',bgm='far',
|
||||
},
|
||||
load=function()
|
||||
PLY.newPlayer(1)
|
||||
if SETTING.sfx_spawn==0 then
|
||||
MES.new('warn',text.switchSpawnSFX)
|
||||
end
|
||||
end,
|
||||
mesDisp=function(P,repMode)
|
||||
if not GAME.result then
|
||||
gc.push('transform')
|
||||
if repMode then
|
||||
gc.origin()
|
||||
gc.setColor(.3,.3,.3,.7)
|
||||
gc.rectangle('fill',0,0,SCR.w,SCR.h)
|
||||
else
|
||||
gc.clear(.2,.2,.2)
|
||||
gc.translate(150,0)
|
||||
gc.setColor(.5,.5,.5)
|
||||
--Frame
|
||||
gc.draw(boarder,-17,-12)
|
||||
end
|
||||
gc.pop()
|
||||
end
|
||||
|
||||
--Figures
|
||||
local t=TIME()
|
||||
gc.setColor(1,1,1,.5+.2*sin(t))
|
||||
gc.draw(IMG.hbm,-276,-86,0,1.5)
|
||||
gc.draw(IMG.electric,476,152,0,2.6)
|
||||
--Figures
|
||||
local t=TIME()
|
||||
gc.setColor(1,1,1,.5+.2*sin(t))
|
||||
gc.draw(IMG.hbm,-276,-86,0,1.5)
|
||||
gc.draw(IMG.electric,476,152,0,2.6)
|
||||
|
||||
--Texts
|
||||
gc.setColor(.8,.8,.8)
|
||||
mText(drawableText.line,63,300)
|
||||
mText(drawableText.techrash,63,420)
|
||||
setFont(75)
|
||||
mStr(P.stat.row,63,220)
|
||||
mStr(P.stat.clears[4],63,340)
|
||||
end,
|
||||
score=function(P)return{min(P.stat.row,40),P.stat.time}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,
|
||||
getRank=function(P)
|
||||
local L=P.stat.row
|
||||
return
|
||||
L>=40 and 5 or
|
||||
L>=30 and 4 or
|
||||
L>=20 and 3 or
|
||||
L>=10 and 2 or
|
||||
L>=5 and 1 or
|
||||
L>=2 and 0
|
||||
end,
|
||||
--Texts
|
||||
gc.setColor(.8,.8,.8)
|
||||
mText(drawableText.line,63,300)
|
||||
mText(drawableText.techrash,63,420)
|
||||
setFont(75)
|
||||
mStr(P.stat.row,63,220)
|
||||
mStr(P.stat.clears[4],63,340)
|
||||
end,
|
||||
score=function(P)return{min(P.stat.row,40),P.stat.time}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,
|
||||
getRank=function(P)
|
||||
local L=P.stat.row
|
||||
return
|
||||
L>=40 and 5 or
|
||||
L>=30 and 4 or
|
||||
L>=20 and 3 or
|
||||
L>=10 and 2 or
|
||||
L>=5 and 1 or
|
||||
L>=2 and 0
|
||||
end,
|
||||
}
|
||||
@@ -1,81 +1,81 @@
|
||||
local rem=table.remove
|
||||
local function check_c4w(P)
|
||||
if P.lastPiece.row==0 then
|
||||
P:lose()
|
||||
else
|
||||
for _=1,P.lastPiece.row do
|
||||
local h=#P.field
|
||||
P.field[h+1]=FREEROW.get(20)
|
||||
P.visTime[h+1]=FREEROW.get(20)
|
||||
for i=4,7 do P.field[h+1][i]=0 end
|
||||
end
|
||||
if P.combo>P.modeData.maxCombo then
|
||||
P.modeData.maxCombo=P.combo
|
||||
end
|
||||
if P.stat.row>=100 then
|
||||
P:win('finish')
|
||||
end
|
||||
end
|
||||
if P.lastPiece.row==0 then
|
||||
P:lose()
|
||||
else
|
||||
for _=1,P.lastPiece.row do
|
||||
local h=#P.field
|
||||
P.field[h+1]=FREEROW.get(20)
|
||||
P.visTime[h+1]=FREEROW.get(20)
|
||||
for i=4,7 do P.field[h+1][i]=0 end
|
||||
end
|
||||
if P.combo>P.modeData.maxCombo then
|
||||
P.modeData.maxCombo=P.combo
|
||||
end
|
||||
if P.stat.row>=100 then
|
||||
P:win('finish')
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
return{
|
||||
color=COLOR.red,
|
||||
env={
|
||||
drop=5,lock=30,
|
||||
task=function(P)P.modeData.maxCombo=0 end,
|
||||
dropPiece=check_c4w,
|
||||
freshLimit=15,ospin=false,
|
||||
bg='rgb',bgm='oxygen',
|
||||
},
|
||||
load=function()
|
||||
PLY.newPlayer(1)
|
||||
local P=PLAYERS[1]
|
||||
local F=P.field
|
||||
for i=1,24 do
|
||||
F[i]=FREEROW.get(20)
|
||||
P.visTime[i]=FREEROW.get(20)
|
||||
for x=4,7 do F[i][x]=0 end
|
||||
end
|
||||
if P.holeRND:random()<.6 then
|
||||
local initCell={11,14,12,13,21,24}
|
||||
for _=1,3 do
|
||||
_=rem(initCell,P.holeRND:random(#initCell))
|
||||
F[math.floor(_/10)][3+_%10]=20
|
||||
end
|
||||
else
|
||||
local initCell={11,12,13,14,21,22,23,24}
|
||||
rem(initCell,P.holeRND:random(5,8))
|
||||
rem(initCell,P.holeRND:random(1,4))
|
||||
for _=1,6 do
|
||||
_=rem(initCell,P.holeRND:random(#initCell))
|
||||
F[math.floor(_/10)][3+_%10]=20
|
||||
end
|
||||
end
|
||||
end,
|
||||
mesDisp=function(P)
|
||||
setFont(45)
|
||||
mStr(P.combo,63,310)
|
||||
mStr(P.modeData.maxCombo,63,400)
|
||||
mText(drawableText.combo,63,358)
|
||||
mText(drawableText.maxcmb,63,450)
|
||||
end,
|
||||
score=function(P)return{math.min(P.modeData.maxCombo,100),P.stat.time}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,
|
||||
getRank=function(P)
|
||||
local L=P.modeData.maxCombo
|
||||
if L==100 then
|
||||
local T=P.stat.time
|
||||
return
|
||||
T<=40 and 5 or
|
||||
T<=60 and 4 or
|
||||
3
|
||||
else
|
||||
return
|
||||
L>=70 and 3 or
|
||||
L>=40 and 2 or
|
||||
L>=20 and 1 or
|
||||
L>=5 and 0
|
||||
end
|
||||
end,
|
||||
color=COLOR.red,
|
||||
env={
|
||||
drop=5,lock=30,
|
||||
task=function(P)P.modeData.maxCombo=0 end,
|
||||
dropPiece=check_c4w,
|
||||
freshLimit=15,ospin=false,
|
||||
bg='rgb',bgm='oxygen',
|
||||
},
|
||||
load=function()
|
||||
PLY.newPlayer(1)
|
||||
local P=PLAYERS[1]
|
||||
local F=P.field
|
||||
for i=1,24 do
|
||||
F[i]=FREEROW.get(20)
|
||||
P.visTime[i]=FREEROW.get(20)
|
||||
for x=4,7 do F[i][x]=0 end
|
||||
end
|
||||
if P.holeRND:random()<.6 then
|
||||
local initCell={11,14,12,13,21,24}
|
||||
for _=1,3 do
|
||||
_=rem(initCell,P.holeRND:random(#initCell))
|
||||
F[math.floor(_/10)][3+_%10]=20
|
||||
end
|
||||
else
|
||||
local initCell={11,12,13,14,21,22,23,24}
|
||||
rem(initCell,P.holeRND:random(5,8))
|
||||
rem(initCell,P.holeRND:random(1,4))
|
||||
for _=1,6 do
|
||||
_=rem(initCell,P.holeRND:random(#initCell))
|
||||
F[math.floor(_/10)][3+_%10]=20
|
||||
end
|
||||
end
|
||||
end,
|
||||
mesDisp=function(P)
|
||||
setFont(45)
|
||||
mStr(P.combo,63,310)
|
||||
mStr(P.modeData.maxCombo,63,400)
|
||||
mText(drawableText.combo,63,358)
|
||||
mText(drawableText.maxcmb,63,450)
|
||||
end,
|
||||
score=function(P)return{math.min(P.modeData.maxCombo,100),P.stat.time}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,
|
||||
getRank=function(P)
|
||||
local L=P.modeData.maxCombo
|
||||
if L==100 then
|
||||
local T=P.stat.time
|
||||
return
|
||||
T<=40 and 5 or
|
||||
T<=60 and 4 or
|
||||
3
|
||||
else
|
||||
return
|
||||
L>=70 and 3 or
|
||||
L>=40 and 2 or
|
||||
L>=20 and 1 or
|
||||
L>=5 and 0
|
||||
end
|
||||
end,
|
||||
}
|
||||
@@ -1,79 +1,79 @@
|
||||
local rem=table.remove
|
||||
local function check_c4w(P)
|
||||
if P.lastPiece.row>0 then
|
||||
for _=1,#P.clearedRow do
|
||||
local h=#P.field
|
||||
P.field[h+1]=FREEROW.get(20)
|
||||
P.visTime[h+1]=FREEROW.get(20)
|
||||
for i=4,7 do P.field[h+1][i]=0 end
|
||||
end
|
||||
if P.combo>P.modeData.maxCombo then
|
||||
P.modeData.maxCombo=P.combo
|
||||
end
|
||||
if P.stat.row>=100 then
|
||||
P:win('finish')
|
||||
end
|
||||
end
|
||||
if P.lastPiece.row>0 then
|
||||
for _=1,#P.clearedRow do
|
||||
local h=#P.field
|
||||
P.field[h+1]=FREEROW.get(20)
|
||||
P.visTime[h+1]=FREEROW.get(20)
|
||||
for i=4,7 do P.field[h+1][i]=0 end
|
||||
end
|
||||
if P.combo>P.modeData.maxCombo then
|
||||
P.modeData.maxCombo=P.combo
|
||||
end
|
||||
if P.stat.row>=100 then
|
||||
P:win('finish')
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
return{
|
||||
color=COLOR.green,
|
||||
env={
|
||||
drop=30,lock=60,infHold=true,
|
||||
task=function(P)P.modeData.maxCombo=0 end,
|
||||
dropPiece=check_c4w,
|
||||
freshLimit=15,ospin=false,
|
||||
bg='rgb',bgm='oxygen',
|
||||
},
|
||||
load=function()
|
||||
PLY.newPlayer(1)
|
||||
local P=PLAYERS[1]
|
||||
local F=P.field
|
||||
for i=1,24 do
|
||||
F[i]=FREEROW.get(20)
|
||||
P.visTime[i]=FREEROW.get(20)
|
||||
for x=4,7 do F[i][x]=0 end
|
||||
end
|
||||
if P.holeRND:random()<.6 then
|
||||
local initCell={11,14,12,13,21,24}
|
||||
for _=1,3 do
|
||||
_=rem(initCell,P.holeRND:random(#initCell))
|
||||
F[math.floor(_/10)][3+_%10]=20
|
||||
end
|
||||
else
|
||||
local initCell={11,12,13,14,21,22,23,24}
|
||||
rem(initCell,P.holeRND:random(5,8))
|
||||
rem(initCell,P.holeRND:random(1,4))
|
||||
for _=1,6 do
|
||||
_=rem(initCell,P.holeRND:random(#initCell))
|
||||
F[math.floor(_/10)][3+_%10]=20
|
||||
end
|
||||
end
|
||||
end,
|
||||
mesDisp=function(P)
|
||||
setFont(45)
|
||||
mStr(P.combo,63,310)
|
||||
mStr(P.modeData.maxCombo,63,400)
|
||||
mText(drawableText.combo,63,358)
|
||||
mText(drawableText.maxcmb,63,450)
|
||||
end,
|
||||
score=function(P)return{math.min(P.modeData.maxCombo,100),P.stat.time}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,
|
||||
getRank=function(P)
|
||||
local L=P.stat.row
|
||||
if L==100 then
|
||||
local T=P.stat.time
|
||||
return
|
||||
T<=32 and 5 or
|
||||
T<=50 and 4 or
|
||||
T<=80 and 3 or
|
||||
2
|
||||
else
|
||||
return
|
||||
L>=60 and 2 or
|
||||
L>=30 and 1 or
|
||||
L>=10 and 0
|
||||
end
|
||||
end,
|
||||
color=COLOR.green,
|
||||
env={
|
||||
drop=30,lock=60,infHold=true,
|
||||
task=function(P)P.modeData.maxCombo=0 end,
|
||||
dropPiece=check_c4w,
|
||||
freshLimit=15,ospin=false,
|
||||
bg='rgb',bgm='oxygen',
|
||||
},
|
||||
load=function()
|
||||
PLY.newPlayer(1)
|
||||
local P=PLAYERS[1]
|
||||
local F=P.field
|
||||
for i=1,24 do
|
||||
F[i]=FREEROW.get(20)
|
||||
P.visTime[i]=FREEROW.get(20)
|
||||
for x=4,7 do F[i][x]=0 end
|
||||
end
|
||||
if P.holeRND:random()<.6 then
|
||||
local initCell={11,14,12,13,21,24}
|
||||
for _=1,3 do
|
||||
_=rem(initCell,P.holeRND:random(#initCell))
|
||||
F[math.floor(_/10)][3+_%10]=20
|
||||
end
|
||||
else
|
||||
local initCell={11,12,13,14,21,22,23,24}
|
||||
rem(initCell,P.holeRND:random(5,8))
|
||||
rem(initCell,P.holeRND:random(1,4))
|
||||
for _=1,6 do
|
||||
_=rem(initCell,P.holeRND:random(#initCell))
|
||||
F[math.floor(_/10)][3+_%10]=20
|
||||
end
|
||||
end
|
||||
end,
|
||||
mesDisp=function(P)
|
||||
setFont(45)
|
||||
mStr(P.combo,63,310)
|
||||
mStr(P.modeData.maxCombo,63,400)
|
||||
mText(drawableText.combo,63,358)
|
||||
mText(drawableText.maxcmb,63,450)
|
||||
end,
|
||||
score=function(P)return{math.min(P.modeData.maxCombo,100),P.stat.time}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,
|
||||
getRank=function(P)
|
||||
local L=P.stat.row
|
||||
if L==100 then
|
||||
local T=P.stat.time
|
||||
return
|
||||
T<=32 and 5 or
|
||||
T<=50 and 4 or
|
||||
T<=80 and 3 or
|
||||
2
|
||||
else
|
||||
return
|
||||
L>=60 and 2 or
|
||||
L>=30 and 1 or
|
||||
L>=10 and 0
|
||||
end
|
||||
end,
|
||||
}
|
||||
@@ -1,55 +1,55 @@
|
||||
return{
|
||||
color=COLOR.lBlue,
|
||||
env={
|
||||
das=16,arr=6,sddas=2,sdarr=2,
|
||||
irs=false,ims=false,
|
||||
center=0,ghost=0,
|
||||
smooth=false,
|
||||
drop=3,lock=3,wait=10,fall=25,
|
||||
fieldH=19,
|
||||
nextCount=1,holdCount=false,
|
||||
RS='Classic',
|
||||
sequence='rnd',
|
||||
freshLimit=0,
|
||||
face={0,0,2,2,2,0,0},
|
||||
noTele=true,keyCancel={5,6},
|
||||
task=function(P)P.modeData.target=10 end,
|
||||
dropPiece=function(P)
|
||||
local D=P.modeData
|
||||
if P.stat.row>=D.target then
|
||||
D.target=D.target+10
|
||||
if D.target==110 then
|
||||
P.gameEnv.drop,P.gameEnv.lock=2,2
|
||||
SFX.play('blip_1')
|
||||
elseif D.target==200 then
|
||||
P.gameEnv.drop,P.gameEnv.lock=1,1
|
||||
SFX.play('blip_1')
|
||||
else
|
||||
SFX.play('reach')
|
||||
end
|
||||
end
|
||||
end,
|
||||
bg='rgb',bgm='magicblock',
|
||||
},
|
||||
slowMark=true,
|
||||
mesDisp=function(P)
|
||||
setFont(75)
|
||||
local r=P.modeData.target*.1
|
||||
mStr(r<11 and 18 or r<22 and r+8 or("%02x"):format(r*10-220),63,210)
|
||||
mText(drawableText.speedLV,63,290)
|
||||
PLY.draw.drawProgress(P.stat.row,P.modeData.target)
|
||||
end,
|
||||
score=function(P)return{P.stat.score,P.stat.row}end,
|
||||
scoreDisp=function(D)return D[1].." "..D[2].." Lines"end,
|
||||
comp=function(a,b)return a[1]>b[1]or a[1]==b[1]and a[2]<b[2]end,
|
||||
getRank=function(P)
|
||||
local L=P.stat.row
|
||||
return
|
||||
L>=200 and 5 or
|
||||
L>=191 and 4 or
|
||||
L>=110 and 3 or
|
||||
L>=50 and 2 or
|
||||
L>=5 and 1 or
|
||||
L>=1 and 0
|
||||
end,
|
||||
color=COLOR.lBlue,
|
||||
env={
|
||||
das=16,arr=6,sddas=2,sdarr=2,
|
||||
irs=false,ims=false,
|
||||
center=0,ghost=0,
|
||||
smooth=false,
|
||||
drop=3,lock=3,wait=10,fall=25,
|
||||
fieldH=19,
|
||||
nextCount=1,holdCount=false,
|
||||
RS='Classic',
|
||||
sequence='rnd',
|
||||
freshLimit=0,
|
||||
face={0,0,2,2,2,0,0},
|
||||
noTele=true,keyCancel={5,6},
|
||||
task=function(P)P.modeData.target=10 end,
|
||||
dropPiece=function(P)
|
||||
local D=P.modeData
|
||||
if P.stat.row>=D.target then
|
||||
D.target=D.target+10
|
||||
if D.target==110 then
|
||||
P.gameEnv.drop,P.gameEnv.lock=2,2
|
||||
SFX.play('blip_1')
|
||||
elseif D.target==200 then
|
||||
P.gameEnv.drop,P.gameEnv.lock=1,1
|
||||
SFX.play('blip_1')
|
||||
else
|
||||
SFX.play('reach')
|
||||
end
|
||||
end
|
||||
end,
|
||||
bg='rgb',bgm='magicblock',
|
||||
},
|
||||
slowMark=true,
|
||||
mesDisp=function(P)
|
||||
setFont(75)
|
||||
local r=P.modeData.target*.1
|
||||
mStr(r<11 and 18 or r<22 and r+8 or("%02x"):format(r*10-220),63,210)
|
||||
mText(drawableText.speedLV,63,290)
|
||||
PLY.draw.drawProgress(P.stat.row,P.modeData.target)
|
||||
end,
|
||||
score=function(P)return{P.stat.score,P.stat.row}end,
|
||||
scoreDisp=function(D)return D[1].." "..D[2].." Lines"end,
|
||||
comp=function(a,b)return a[1]>b[1]or a[1]==b[1]and a[2]<b[2]end,
|
||||
getRank=function(P)
|
||||
local L=P.stat.row
|
||||
return
|
||||
L>=200 and 5 or
|
||||
L>=191 and 4 or
|
||||
L>=110 and 3 or
|
||||
L>=50 and 2 or
|
||||
L>=5 and 1 or
|
||||
L>=1 and 0
|
||||
end,
|
||||
}
|
||||
@@ -1,80 +1,80 @@
|
||||
local function notAir(L)
|
||||
for i=1,10 do
|
||||
if L[i]>0 then return true end
|
||||
end
|
||||
for i=1,10 do
|
||||
if L[i]>0 then return true end
|
||||
end
|
||||
end
|
||||
local function setField(P,page)
|
||||
local F=FIELD[page]
|
||||
local height=0
|
||||
for y=20,1,-1 do
|
||||
if notAir(F[y])then
|
||||
height=y
|
||||
break
|
||||
end
|
||||
end
|
||||
local t=P.showTime*3
|
||||
for y=1,height do
|
||||
local solid=notAir(F[y])
|
||||
P.field[y]=FREEROW.get(0,solid)
|
||||
P.visTime[y]=FREEROW.get(t)
|
||||
if solid then
|
||||
for x=1,10 do
|
||||
P.field[y][x]=F[y][x]
|
||||
end
|
||||
P.garbageBeneath=P.garbageBeneath+1
|
||||
end
|
||||
end
|
||||
local F=FIELD[page]
|
||||
local height=0
|
||||
for y=20,1,-1 do
|
||||
if notAir(F[y])then
|
||||
height=y
|
||||
break
|
||||
end
|
||||
end
|
||||
local t=P.showTime*3
|
||||
for y=1,height do
|
||||
local solid=notAir(F[y])
|
||||
P.field[y]=FREEROW.get(0,solid)
|
||||
P.visTime[y]=FREEROW.get(t)
|
||||
if solid then
|
||||
for x=1,10 do
|
||||
P.field[y][x]=F[y][x]
|
||||
end
|
||||
P.garbageBeneath=P.garbageBeneath+1
|
||||
end
|
||||
end
|
||||
end
|
||||
local function checkClear(P)
|
||||
if P.garbageBeneath==0 then
|
||||
local D=P.modeData
|
||||
D.finished=D.finished+1
|
||||
if FIELD[D.finished+1]then
|
||||
P.waiting=26
|
||||
for i=#P.field,1,-1 do
|
||||
FREEROW.discard(P.field[i])
|
||||
FREEROW.discard(P.visTime[i])
|
||||
P.field[i],P.visTime[i]=nil
|
||||
end
|
||||
setField(P,D.finished+1)
|
||||
SYSFX.newShade(1.4,P.absFieldX,P.absFieldY,300*P.size,610*P.size,.6,.8,.6)
|
||||
SFX.play('blip_1')
|
||||
else
|
||||
P:win('finish')
|
||||
end
|
||||
end
|
||||
if P.garbageBeneath==0 then
|
||||
local D=P.modeData
|
||||
D.finished=D.finished+1
|
||||
if FIELD[D.finished+1]then
|
||||
P.waiting=26
|
||||
for i=#P.field,1,-1 do
|
||||
FREEROW.discard(P.field[i])
|
||||
FREEROW.discard(P.visTime[i])
|
||||
P.field[i],P.visTime[i]=nil
|
||||
end
|
||||
setField(P,D.finished+1)
|
||||
SYSFX.newShade(1.4,P.absFieldX,P.absFieldY,300*P.size,610*P.size,.6,.8,.6)
|
||||
SFX.play('blip_1')
|
||||
else
|
||||
P:win('finish')
|
||||
end
|
||||
end
|
||||
end
|
||||
return{
|
||||
color=COLOR.white,
|
||||
env={},
|
||||
load=function()
|
||||
applyCustomGame()
|
||||
color=COLOR.white,
|
||||
env={},
|
||||
load=function()
|
||||
applyCustomGame()
|
||||
|
||||
for y=1,20 do
|
||||
if notAir(FIELD[1][y])then
|
||||
--Switch clear sprint mode on
|
||||
GAME.modeEnv.dropPiece=checkClear
|
||||
goto BREAK_clearMode
|
||||
end
|
||||
end
|
||||
GAME.modeEnv.dropPiece=NULL
|
||||
::BREAK_clearMode::
|
||||
PLY.newPlayer(1)
|
||||
local AItype=GAME.modeEnv.opponent:sub(1,2)
|
||||
local AIlevel=tonumber(GAME.modeEnv.opponent:sub(-1))
|
||||
if AItype=='9S'then
|
||||
PLY.newAIPlayer(2,BOT.template{type='9S',speedLV=2*AIlevel,hold=true})
|
||||
elseif AItype=='CC'then
|
||||
PLY.newAIPlayer(2,BOT.template{type='CC',speedLV=2*AIlevel-1,next=math.floor(AIlevel*.5+1),hold=true,node=20000+5000*AIlevel})
|
||||
end
|
||||
for y=1,20 do
|
||||
if notAir(FIELD[1][y])then
|
||||
--Switch clear sprint mode on
|
||||
GAME.modeEnv.dropPiece=checkClear
|
||||
goto BREAK_clearMode
|
||||
end
|
||||
end
|
||||
GAME.modeEnv.dropPiece=NULL
|
||||
::BREAK_clearMode::
|
||||
PLY.newPlayer(1)
|
||||
local AItype=GAME.modeEnv.opponent:sub(1,2)
|
||||
local AIlevel=tonumber(GAME.modeEnv.opponent:sub(-1))
|
||||
if AItype=='9S'then
|
||||
PLY.newAIPlayer(2,BOT.template{type='9S',speedLV=2*AIlevel,hold=true})
|
||||
elseif AItype=='CC'then
|
||||
PLY.newAIPlayer(2,BOT.template{type='CC',speedLV=2*AIlevel-1,next=math.floor(AIlevel*.5+1),hold=true,node=20000+5000*AIlevel})
|
||||
end
|
||||
|
||||
for _,P in next,PLY_ALIVE do
|
||||
setField(P,1)
|
||||
end
|
||||
end,
|
||||
mesDisp=function(P)
|
||||
setFont(55)
|
||||
mStr(P.stat.row,63,225)
|
||||
mText(drawableText.line,63,290)
|
||||
end,
|
||||
for _,P in next,PLY_ALIVE do
|
||||
setField(P,1)
|
||||
end
|
||||
end,
|
||||
mesDisp=function(P)
|
||||
setFont(55)
|
||||
mStr(P.stat.row,63,225)
|
||||
mText(drawableText.line,63,290)
|
||||
end,
|
||||
}
|
||||
@@ -1,70 +1,70 @@
|
||||
local gc=love.graphics
|
||||
local gc_draw=gc.draw
|
||||
local function puzzleCheck(P)
|
||||
local D=P.modeData
|
||||
local F=FIELD[D.finished+1]
|
||||
for y=1,20 do
|
||||
local L=P.field[y]
|
||||
for x=1,10 do
|
||||
local a,b=F[y][x],L and L[x]or 0
|
||||
if a~=0 then
|
||||
if a==-1 then if b>0 then return end
|
||||
elseif a<12 then if a~=b then return end
|
||||
elseif a>7 then if b==0 then return end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
D.finished=D.finished+1
|
||||
if FIELD[D.finished+1]then
|
||||
P.waiting=26
|
||||
for _=#P.field,1,-1 do
|
||||
FREEROW.discard(P.field[_])
|
||||
FREEROW.discard(P.visTime[_])
|
||||
P.field[_],P.visTime[_]=nil
|
||||
end
|
||||
SYSFX.newShade(1.4,P.absFieldX,P.absFieldY,300*P.size,610*P.size,.3,1,.3)
|
||||
SFX.play('reach')
|
||||
D.showMark=0
|
||||
else
|
||||
D.showMark=1
|
||||
P:win('finish')
|
||||
end
|
||||
local D=P.modeData
|
||||
local F=FIELD[D.finished+1]
|
||||
for y=1,20 do
|
||||
local L=P.field[y]
|
||||
for x=1,10 do
|
||||
local a,b=F[y][x],L and L[x]or 0
|
||||
if a~=0 then
|
||||
if a==-1 then if b>0 then return end
|
||||
elseif a<12 then if a~=b then return end
|
||||
elseif a>7 then if b==0 then return end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
D.finished=D.finished+1
|
||||
if FIELD[D.finished+1]then
|
||||
P.waiting=26
|
||||
for _=#P.field,1,-1 do
|
||||
FREEROW.discard(P.field[_])
|
||||
FREEROW.discard(P.visTime[_])
|
||||
P.field[_],P.visTime[_]=nil
|
||||
end
|
||||
SYSFX.newShade(1.4,P.absFieldX,P.absFieldY,300*P.size,610*P.size,.3,1,.3)
|
||||
SFX.play('reach')
|
||||
D.showMark=0
|
||||
else
|
||||
D.showMark=1
|
||||
P:win('finish')
|
||||
end
|
||||
end
|
||||
|
||||
return{
|
||||
color=COLOR.white,
|
||||
env={
|
||||
fkey1=function(P)P.modeData.showMark=1-P.modeData.showMark end,
|
||||
dropPiece=puzzleCheck,
|
||||
},
|
||||
load=function()
|
||||
applyCustomGame()
|
||||
local AItype=GAME.modeEnv.opponent:sub(1,2)
|
||||
local AIlevel=tonumber(GAME.modeEnv.opponent:sub(-1))
|
||||
PLY.newPlayer(1)
|
||||
if AItype=='9S'then
|
||||
PLY.newAIPlayer(2,BOT.template{type='9S',speedLV=2*AIlevel,hold=true})
|
||||
elseif AItype=='CC'then
|
||||
PLY.newAIPlayer(2,BOT.template{type='CC',speedLV=2*AIlevel-1,next=math.floor(AIlevel*.5+1),hold=true,node=20000+5000*AIlevel})
|
||||
end
|
||||
end,
|
||||
mesDisp=function(P)
|
||||
setFont(55)
|
||||
mStr(P.stat.row,63,225)
|
||||
mText(drawableText.line,63,290)
|
||||
PLY.draw.applyField(P)
|
||||
if P.modeData.showMark==0 then
|
||||
local mark=TEXTURE.puzzleMark
|
||||
local F=FIELD[P.modeData.finished+1]
|
||||
gc.setColor(1,1,1)
|
||||
for y=1,20 do for x=1,10 do
|
||||
local T=F[y][x]
|
||||
if T~=0 then
|
||||
gc_draw(mark[T],30*x-30,600-30*y)
|
||||
end
|
||||
end end
|
||||
end
|
||||
PLY.draw.cancelField(P)
|
||||
end,
|
||||
color=COLOR.white,
|
||||
env={
|
||||
fkey1=function(P)P.modeData.showMark=1-P.modeData.showMark end,
|
||||
dropPiece=puzzleCheck,
|
||||
},
|
||||
load=function()
|
||||
applyCustomGame()
|
||||
local AItype=GAME.modeEnv.opponent:sub(1,2)
|
||||
local AIlevel=tonumber(GAME.modeEnv.opponent:sub(-1))
|
||||
PLY.newPlayer(1)
|
||||
if AItype=='9S'then
|
||||
PLY.newAIPlayer(2,BOT.template{type='9S',speedLV=2*AIlevel,hold=true})
|
||||
elseif AItype=='CC'then
|
||||
PLY.newAIPlayer(2,BOT.template{type='CC',speedLV=2*AIlevel-1,next=math.floor(AIlevel*.5+1),hold=true,node=20000+5000*AIlevel})
|
||||
end
|
||||
end,
|
||||
mesDisp=function(P)
|
||||
setFont(55)
|
||||
mStr(P.stat.row,63,225)
|
||||
mText(drawableText.line,63,290)
|
||||
PLY.draw.applyField(P)
|
||||
if P.modeData.showMark==0 then
|
||||
local mark=TEXTURE.puzzleMark
|
||||
local F=FIELD[P.modeData.finished+1]
|
||||
gc.setColor(1,1,1)
|
||||
for y=1,20 do for x=1,10 do
|
||||
local T=F[y][x]
|
||||
if T~=0 then
|
||||
gc_draw(mark[T],30*x-30,600-30*y)
|
||||
end
|
||||
end end
|
||||
end
|
||||
PLY.draw.cancelField(P)
|
||||
end,
|
||||
}
|
||||
@@ -1,65 +1,65 @@
|
||||
return{
|
||||
color=COLOR.red,
|
||||
env={
|
||||
drop=5,lock=60,
|
||||
fall=6,
|
||||
nextCount=3,
|
||||
freshLimit=15,
|
||||
pushSpeed=2,
|
||||
task=function(P)
|
||||
while true do
|
||||
YIELD()
|
||||
if P.control then
|
||||
local D=P.modeData
|
||||
D.counter=D.counter+1
|
||||
local t=math.max(240-2*D.wave,40)
|
||||
if D.counter>=t then
|
||||
D.counter=0
|
||||
for _=1,4 do
|
||||
table.insert(P.atkBuffer,{line=generateLine(P.holeRND:random(10)),amount=1,countdown=5*t,cd0=5*t,time=0,sent=false,lv=2})
|
||||
end
|
||||
P.atkBufferSum=P.atkBufferSum+4
|
||||
P.stat.recv=P.stat.recv+4
|
||||
D.wave=D.wave+1
|
||||
if D.wave<=75 then
|
||||
D.rpm=math.floor(144e3/t)*.1
|
||||
if D.wave==25 then
|
||||
P:showTextF(text.great,0,-140,100,'appear',.6)
|
||||
P.gameEnv.pushSpeed=3
|
||||
P.dropDelay,P.gameEnv.drop=4,4
|
||||
elseif D.wave==50 then
|
||||
P:showTextF(text.awesome,0,-140,100,'appear',.6)
|
||||
P.gameEnv.pushSpeed=4
|
||||
P.dropDelay,P.gameEnv.drop=3,3
|
||||
elseif D.wave==75 then
|
||||
P:showTextF(text.maxspeed,0,-140,100,'appear',.6)
|
||||
P.dropDelay,P.gameEnv.drop=2,2
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end,
|
||||
bg='rainbow2',bgm='storm',
|
||||
},
|
||||
mesDisp=function(P)
|
||||
setFont(55)
|
||||
mStr(P.modeData.wave,63,200)
|
||||
mStr(P.modeData.rpm,63,320)
|
||||
mText(drawableText.wave,63,260)
|
||||
mText(drawableText.rpm,63,380)
|
||||
end,
|
||||
score=function(P)return{P.modeData.wave,P.stat.time}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,
|
||||
getRank=function(P)
|
||||
local W=P.modeData.wave
|
||||
return
|
||||
W>=100 and 5 or
|
||||
W>=80 and 4 or
|
||||
W>=55 and 3 or
|
||||
W>=30 and 2 or
|
||||
W>=20 and 1 or
|
||||
W>=5 and 0
|
||||
end,
|
||||
color=COLOR.red,
|
||||
env={
|
||||
drop=5,lock=60,
|
||||
fall=6,
|
||||
nextCount=3,
|
||||
freshLimit=15,
|
||||
pushSpeed=2,
|
||||
task=function(P)
|
||||
while true do
|
||||
YIELD()
|
||||
if P.control then
|
||||
local D=P.modeData
|
||||
D.counter=D.counter+1
|
||||
local t=math.max(240-2*D.wave,40)
|
||||
if D.counter>=t then
|
||||
D.counter=0
|
||||
for _=1,4 do
|
||||
table.insert(P.atkBuffer,{line=generateLine(P.holeRND:random(10)),amount=1,countdown=5*t,cd0=5*t,time=0,sent=false,lv=2})
|
||||
end
|
||||
P.atkBufferSum=P.atkBufferSum+4
|
||||
P.stat.recv=P.stat.recv+4
|
||||
D.wave=D.wave+1
|
||||
if D.wave<=75 then
|
||||
D.rpm=math.floor(144e3/t)*.1
|
||||
if D.wave==25 then
|
||||
P:showTextF(text.great,0,-140,100,'appear',.6)
|
||||
P.gameEnv.pushSpeed=3
|
||||
P.dropDelay,P.gameEnv.drop=4,4
|
||||
elseif D.wave==50 then
|
||||
P:showTextF(text.awesome,0,-140,100,'appear',.6)
|
||||
P.gameEnv.pushSpeed=4
|
||||
P.dropDelay,P.gameEnv.drop=3,3
|
||||
elseif D.wave==75 then
|
||||
P:showTextF(text.maxspeed,0,-140,100,'appear',.6)
|
||||
P.dropDelay,P.gameEnv.drop=2,2
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end,
|
||||
bg='rainbow2',bgm='storm',
|
||||
},
|
||||
mesDisp=function(P)
|
||||
setFont(55)
|
||||
mStr(P.modeData.wave,63,200)
|
||||
mStr(P.modeData.rpm,63,320)
|
||||
mText(drawableText.wave,63,260)
|
||||
mText(drawableText.rpm,63,380)
|
||||
end,
|
||||
score=function(P)return{P.modeData.wave,P.stat.time}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,
|
||||
getRank=function(P)
|
||||
local W=P.modeData.wave
|
||||
return
|
||||
W>=100 and 5 or
|
||||
W>=80 and 4 or
|
||||
W>=55 and 3 or
|
||||
W>=30 and 2 or
|
||||
W>=20 and 1 or
|
||||
W>=5 and 0
|
||||
end,
|
||||
}
|
||||
@@ -1,65 +1,65 @@
|
||||
return{
|
||||
color=COLOR.green,
|
||||
env={
|
||||
drop=30,lock=60,
|
||||
fall=10,
|
||||
nextCount=3,
|
||||
freshLimit=15,
|
||||
pushSpeed=1,
|
||||
task=function(P)
|
||||
while true do
|
||||
YIELD()
|
||||
if P.control then
|
||||
local D=P.modeData
|
||||
D.counter=D.counter+1
|
||||
local t=math.max(360-D.wave*2,60)
|
||||
if D.counter>=t then
|
||||
D.counter=0
|
||||
for _=1,3 do
|
||||
table.insert(P.atkBuffer,{line=generateLine(P.holeRND:random(10)),amount=1,countdown=2*t,cd0=2*t,time=0,sent=false,lv=1})
|
||||
end
|
||||
P.atkBufferSum=P.atkBufferSum+3
|
||||
P.stat.recv=P.stat.recv+3
|
||||
D.wave=D.wave+1
|
||||
if D.wave<=90 then
|
||||
D.rpm=math.floor(108e3/t)*.1
|
||||
if D.wave==25 then
|
||||
P:showTextF(text.great,0,-140,100,'appear',.6)
|
||||
P.gameEnv.pushSpeed=2
|
||||
P.dropDelay,P.gameEnv.drop=20,20
|
||||
elseif D.wave==50 then
|
||||
P:showTextF(text.awesome,0,-140,100,'appear',.6)
|
||||
P.gameEnv.pushSpeed=3
|
||||
P.dropDelay,P.gameEnv.drop=10,10
|
||||
elseif D.wave==90 then
|
||||
P.dropDelay,P.gameEnv.drop=5,5
|
||||
P:showTextF(text.maxspeed,0,-140,100,'appear',.6)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end,
|
||||
bg='rainbow2',bgm='storm',
|
||||
},
|
||||
mesDisp=function(P)
|
||||
setFont(55)
|
||||
mStr(P.modeData.wave,63,200)
|
||||
mStr(P.modeData.rpm,63,320)
|
||||
mText(drawableText.wave,63,260)
|
||||
mText(drawableText.rpm,63,380)
|
||||
end,
|
||||
score=function(P)return{P.modeData.wave,P.stat.time}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,
|
||||
getRank=function(P)
|
||||
local W=P.modeData.wave
|
||||
return
|
||||
W>=120 and 5 or
|
||||
W>=100 and 4 or
|
||||
W>=70 and 3 or
|
||||
W>=40 and 2 or
|
||||
W>=10 and 1 or
|
||||
W>=3 and 0
|
||||
end,
|
||||
color=COLOR.green,
|
||||
env={
|
||||
drop=30,lock=60,
|
||||
fall=10,
|
||||
nextCount=3,
|
||||
freshLimit=15,
|
||||
pushSpeed=1,
|
||||
task=function(P)
|
||||
while true do
|
||||
YIELD()
|
||||
if P.control then
|
||||
local D=P.modeData
|
||||
D.counter=D.counter+1
|
||||
local t=math.max(360-D.wave*2,60)
|
||||
if D.counter>=t then
|
||||
D.counter=0
|
||||
for _=1,3 do
|
||||
table.insert(P.atkBuffer,{line=generateLine(P.holeRND:random(10)),amount=1,countdown=2*t,cd0=2*t,time=0,sent=false,lv=1})
|
||||
end
|
||||
P.atkBufferSum=P.atkBufferSum+3
|
||||
P.stat.recv=P.stat.recv+3
|
||||
D.wave=D.wave+1
|
||||
if D.wave<=90 then
|
||||
D.rpm=math.floor(108e3/t)*.1
|
||||
if D.wave==25 then
|
||||
P:showTextF(text.great,0,-140,100,'appear',.6)
|
||||
P.gameEnv.pushSpeed=2
|
||||
P.dropDelay,P.gameEnv.drop=20,20
|
||||
elseif D.wave==50 then
|
||||
P:showTextF(text.awesome,0,-140,100,'appear',.6)
|
||||
P.gameEnv.pushSpeed=3
|
||||
P.dropDelay,P.gameEnv.drop=10,10
|
||||
elseif D.wave==90 then
|
||||
P.dropDelay,P.gameEnv.drop=5,5
|
||||
P:showTextF(text.maxspeed,0,-140,100,'appear',.6)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end,
|
||||
bg='rainbow2',bgm='storm',
|
||||
},
|
||||
mesDisp=function(P)
|
||||
setFont(55)
|
||||
mStr(P.modeData.wave,63,200)
|
||||
mStr(P.modeData.rpm,63,320)
|
||||
mText(drawableText.wave,63,260)
|
||||
mText(drawableText.rpm,63,380)
|
||||
end,
|
||||
score=function(P)return{P.modeData.wave,P.stat.time}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,
|
||||
getRank=function(P)
|
||||
local W=P.modeData.wave
|
||||
return
|
||||
W>=120 and 5 or
|
||||
W>=100 and 4 or
|
||||
W>=70 and 3 or
|
||||
W>=40 and 2 or
|
||||
W>=10 and 1 or
|
||||
W>=3 and 0
|
||||
end,
|
||||
}
|
||||
@@ -1,43 +1,43 @@
|
||||
local function check_rise(P)
|
||||
for _=1,math.min(8,100-P.stat.dig)-P.garbageBeneath do
|
||||
P:garbageRise(21,1,P:getHolePos())
|
||||
end
|
||||
if P.stat.dig==100 then
|
||||
P:win('finish')
|
||||
end
|
||||
for _=1,math.min(8,100-P.stat.dig)-P.garbageBeneath do
|
||||
P:garbageRise(21,1,P:getHolePos())
|
||||
end
|
||||
if P.stat.dig==100 then
|
||||
P:win('finish')
|
||||
end
|
||||
end
|
||||
|
||||
return{
|
||||
color=COLOR.green,
|
||||
env={
|
||||
pushSpeed=6,
|
||||
dropPiece=check_rise,
|
||||
bg='bg2',bgm='way',
|
||||
},
|
||||
load=function()
|
||||
PLY.newPlayer(1)
|
||||
local P=PLAYERS[1]
|
||||
for _=1,10 do
|
||||
P:garbageRise(21,1,P:getHolePos())
|
||||
end
|
||||
P.fieldBeneath=0
|
||||
end,
|
||||
mesDisp=function(P)
|
||||
setFont(55)
|
||||
mStr(100-P.stat.dig,63,265)
|
||||
end,
|
||||
score=function(P)return{P.stat.time,P.stat.piece}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,
|
||||
getRank=function(P)
|
||||
if P.stat.dig<100 then return end
|
||||
local T=P.stat.time
|
||||
return
|
||||
T<=120 and 5 or
|
||||
T<=160 and 4 or
|
||||
T<=240 and 3 or
|
||||
T<=360 and 2 or
|
||||
T<=480 and 1 or
|
||||
0
|
||||
end,
|
||||
color=COLOR.green,
|
||||
env={
|
||||
pushSpeed=6,
|
||||
dropPiece=check_rise,
|
||||
bg='bg2',bgm='way',
|
||||
},
|
||||
load=function()
|
||||
PLY.newPlayer(1)
|
||||
local P=PLAYERS[1]
|
||||
for _=1,10 do
|
||||
P:garbageRise(21,1,P:getHolePos())
|
||||
end
|
||||
P.fieldBeneath=0
|
||||
end,
|
||||
mesDisp=function(P)
|
||||
setFont(55)
|
||||
mStr(100-P.stat.dig,63,265)
|
||||
end,
|
||||
score=function(P)return{P.stat.time,P.stat.piece}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,
|
||||
getRank=function(P)
|
||||
if P.stat.dig<100 then return end
|
||||
local T=P.stat.time
|
||||
return
|
||||
T<=120 and 5 or
|
||||
T<=160 and 4 or
|
||||
T<=240 and 3 or
|
||||
T<=360 and 2 or
|
||||
T<=480 and 1 or
|
||||
0
|
||||
end,
|
||||
}
|
||||
@@ -1,40 +1,40 @@
|
||||
local function check_rise(P)
|
||||
if P.stat.dig==10 then
|
||||
P:win('finish')
|
||||
end
|
||||
if P.stat.dig==10 then
|
||||
P:win('finish')
|
||||
end
|
||||
end
|
||||
|
||||
return{
|
||||
color=COLOR.cyan,
|
||||
env={
|
||||
pushSpeed=6,
|
||||
dropPiece=check_rise,
|
||||
bg='bg1',bgm='way',
|
||||
},
|
||||
load=function()
|
||||
PLY.newPlayer(1)
|
||||
local P=PLAYERS[1]
|
||||
for _=1,10 do
|
||||
P:garbageRise(21,1,P:getHolePos())
|
||||
end
|
||||
P.fieldBeneath=0
|
||||
end,
|
||||
mesDisp=function(P)
|
||||
setFont(55)
|
||||
mStr(10-P.stat.dig,63,265)
|
||||
end,
|
||||
score=function(P)return{P.stat.time,P.stat.piece}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,
|
||||
getRank=function(P)
|
||||
if P.stat.dig<10 then return end
|
||||
local T=P.stat.time
|
||||
return
|
||||
T<=7 and 5 or
|
||||
T<=12 and 4 or
|
||||
T<=20 and 3 or
|
||||
T<=40 and 2 or
|
||||
T<=60 and 1 or
|
||||
0
|
||||
end,
|
||||
color=COLOR.cyan,
|
||||
env={
|
||||
pushSpeed=6,
|
||||
dropPiece=check_rise,
|
||||
bg='bg1',bgm='way',
|
||||
},
|
||||
load=function()
|
||||
PLY.newPlayer(1)
|
||||
local P=PLAYERS[1]
|
||||
for _=1,10 do
|
||||
P:garbageRise(21,1,P:getHolePos())
|
||||
end
|
||||
P.fieldBeneath=0
|
||||
end,
|
||||
mesDisp=function(P)
|
||||
setFont(55)
|
||||
mStr(10-P.stat.dig,63,265)
|
||||
end,
|
||||
score=function(P)return{P.stat.time,P.stat.piece}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,
|
||||
getRank=function(P)
|
||||
if P.stat.dig<10 then return end
|
||||
local T=P.stat.time
|
||||
return
|
||||
T<=7 and 5 or
|
||||
T<=12 and 4 or
|
||||
T<=20 and 3 or
|
||||
T<=40 and 2 or
|
||||
T<=60 and 1 or
|
||||
0
|
||||
end,
|
||||
}
|
||||
@@ -1,43 +1,43 @@
|
||||
local function check_rise(P)
|
||||
for _=1,math.min(8,400-P.stat.dig)-P.garbageBeneath do
|
||||
P:garbageRise(21,1,P:getHolePos())
|
||||
end
|
||||
if P.stat.dig==400 then
|
||||
P:win('finish')
|
||||
end
|
||||
for _=1,math.min(8,400-P.stat.dig)-P.garbageBeneath do
|
||||
P:garbageRise(21,1,P:getHolePos())
|
||||
end
|
||||
if P.stat.dig==400 then
|
||||
P:win('finish')
|
||||
end
|
||||
end
|
||||
|
||||
return{
|
||||
color=COLOR.orange,
|
||||
env={
|
||||
pushSpeed=6,
|
||||
dropPiece=check_rise,
|
||||
bg='bg2',bgm='way',
|
||||
},
|
||||
load=function()
|
||||
PLY.newPlayer(1)
|
||||
local P=PLAYERS[1]
|
||||
for _=1,10 do
|
||||
P:garbageRise(21,1,P:getHolePos())
|
||||
end
|
||||
P.fieldBeneath=0
|
||||
end,
|
||||
mesDisp=function(P)
|
||||
setFont(55)
|
||||
mStr(400-P.stat.dig,63,265)
|
||||
end,
|
||||
score=function(P)return{P.stat.time,P.stat.piece}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,
|
||||
getRank=function(P)
|
||||
if P.stat.dig<400 then return end
|
||||
local T=P.stat.time
|
||||
return
|
||||
T<=540 and 5 or
|
||||
T<=720 and 4 or
|
||||
T<=960 and 3 or
|
||||
T<=1500 and 2 or
|
||||
T<=1800 and 1 or
|
||||
0
|
||||
end,
|
||||
color=COLOR.orange,
|
||||
env={
|
||||
pushSpeed=6,
|
||||
dropPiece=check_rise,
|
||||
bg='bg2',bgm='way',
|
||||
},
|
||||
load=function()
|
||||
PLY.newPlayer(1)
|
||||
local P=PLAYERS[1]
|
||||
for _=1,10 do
|
||||
P:garbageRise(21,1,P:getHolePos())
|
||||
end
|
||||
P.fieldBeneath=0
|
||||
end,
|
||||
mesDisp=function(P)
|
||||
setFont(55)
|
||||
mStr(400-P.stat.dig,63,265)
|
||||
end,
|
||||
score=function(P)return{P.stat.time,P.stat.piece}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,
|
||||
getRank=function(P)
|
||||
if P.stat.dig<400 then return end
|
||||
local T=P.stat.time
|
||||
return
|
||||
T<=540 and 5 or
|
||||
T<=720 and 4 or
|
||||
T<=960 and 3 or
|
||||
T<=1500 and 2 or
|
||||
T<=1800 and 1 or
|
||||
0
|
||||
end,
|
||||
}
|
||||
@@ -1,43 +1,43 @@
|
||||
local function check_rise(P)
|
||||
for _=1,math.min(8,40-P.stat.dig)-P.garbageBeneath do
|
||||
P:garbageRise(21,1,P:getHolePos())
|
||||
end
|
||||
if P.stat.dig==40 then
|
||||
P:win('finish')
|
||||
end
|
||||
for _=1,math.min(8,40-P.stat.dig)-P.garbageBeneath do
|
||||
P:garbageRise(21,1,P:getHolePos())
|
||||
end
|
||||
if P.stat.dig==40 then
|
||||
P:win('finish')
|
||||
end
|
||||
end
|
||||
|
||||
return{
|
||||
color=COLOR.lBlue,
|
||||
env={
|
||||
pushSpeed=6,
|
||||
dropPiece=check_rise,
|
||||
bg='bg1',bgm='way',
|
||||
},
|
||||
load=function()
|
||||
PLY.newPlayer(1)
|
||||
local P=PLAYERS[1]
|
||||
for _=1,10 do
|
||||
P:garbageRise(21,1,P:getHolePos())
|
||||
end
|
||||
P.fieldBeneath=0
|
||||
end,
|
||||
mesDisp=function(P)
|
||||
setFont(55)
|
||||
mStr(40-P.stat.dig,63,265)
|
||||
end,
|
||||
score=function(P)return{P.stat.time,P.stat.piece}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,
|
||||
getRank=function(P)
|
||||
if P.stat.dig<40 then return end
|
||||
local T=P.stat.time
|
||||
return
|
||||
T<=50 and 5 or
|
||||
T<=70 and 4 or
|
||||
T<=90 and 3 or
|
||||
T<=120 and 2 or
|
||||
T<=180 and 1 or
|
||||
0
|
||||
end,
|
||||
color=COLOR.lBlue,
|
||||
env={
|
||||
pushSpeed=6,
|
||||
dropPiece=check_rise,
|
||||
bg='bg1',bgm='way',
|
||||
},
|
||||
load=function()
|
||||
PLY.newPlayer(1)
|
||||
local P=PLAYERS[1]
|
||||
for _=1,10 do
|
||||
P:garbageRise(21,1,P:getHolePos())
|
||||
end
|
||||
P.fieldBeneath=0
|
||||
end,
|
||||
mesDisp=function(P)
|
||||
setFont(55)
|
||||
mStr(40-P.stat.dig,63,265)
|
||||
end,
|
||||
score=function(P)return{P.stat.time,P.stat.piece}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,
|
||||
getRank=function(P)
|
||||
if P.stat.dig<40 then return end
|
||||
local T=P.stat.time
|
||||
return
|
||||
T<=50 and 5 or
|
||||
T<=70 and 4 or
|
||||
T<=90 and 3 or
|
||||
T<=120 and 2 or
|
||||
T<=180 and 1 or
|
||||
0
|
||||
end,
|
||||
}
|
||||
@@ -1,42 +1,42 @@
|
||||
return{
|
||||
color=COLOR.magenta,
|
||||
env={
|
||||
drop=60,lock=120,
|
||||
fall=20,
|
||||
freshLimit=15,
|
||||
task=function(P)
|
||||
while true do
|
||||
YIELD()
|
||||
if P.control then
|
||||
local D=P.modeData
|
||||
D.timer=D.timer+1
|
||||
if D.timer>=math.max(90,180-D.wave)then
|
||||
P:garbageRise(21,1,P:getHolePos())
|
||||
P.stat.recv=P.stat.recv+1
|
||||
D.timer=0
|
||||
D.wave=D.wave+1
|
||||
end
|
||||
end
|
||||
end
|
||||
end,
|
||||
bg='bg2',bgm='shift',
|
||||
},
|
||||
mesDisp=function(P)
|
||||
setFont(60)
|
||||
mStr(P.modeData.wave,63,310)
|
||||
mText(drawableText.wave,63,375)
|
||||
end,
|
||||
score=function(P)return{P.modeData.wave,P.stat.row}end,
|
||||
scoreDisp=function(D)return D[1].." Waves "..D[2].." Lines"end,
|
||||
comp=function(a,b)return a[1]>b[1]or a[1]==b[1]and a[2]<b[2]end,
|
||||
getRank=function(P)
|
||||
local W=P.modeData.wave
|
||||
return
|
||||
W>=150 and 5 or
|
||||
W>=110 and 4 or
|
||||
W>=80 and 3 or
|
||||
W>=50 and 2 or
|
||||
W>=20 and 1 or
|
||||
P.stat.row>=5 and 0
|
||||
end,
|
||||
color=COLOR.magenta,
|
||||
env={
|
||||
drop=60,lock=120,
|
||||
fall=20,
|
||||
freshLimit=15,
|
||||
task=function(P)
|
||||
while true do
|
||||
YIELD()
|
||||
if P.control then
|
||||
local D=P.modeData
|
||||
D.timer=D.timer+1
|
||||
if D.timer>=math.max(90,180-D.wave)then
|
||||
P:garbageRise(21,1,P:getHolePos())
|
||||
P.stat.recv=P.stat.recv+1
|
||||
D.timer=0
|
||||
D.wave=D.wave+1
|
||||
end
|
||||
end
|
||||
end
|
||||
end,
|
||||
bg='bg2',bgm='shift',
|
||||
},
|
||||
mesDisp=function(P)
|
||||
setFont(60)
|
||||
mStr(P.modeData.wave,63,310)
|
||||
mText(drawableText.wave,63,375)
|
||||
end,
|
||||
score=function(P)return{P.modeData.wave,P.stat.row}end,
|
||||
scoreDisp=function(D)return D[1].." Waves "..D[2].." Lines"end,
|
||||
comp=function(a,b)return a[1]>b[1]or a[1]==b[1]and a[2]<b[2]end,
|
||||
getRank=function(P)
|
||||
local W=P.modeData.wave
|
||||
return
|
||||
W>=150 and 5 or
|
||||
W>=110 and 4 or
|
||||
W>=80 and 3 or
|
||||
W>=50 and 2 or
|
||||
W>=20 and 1 or
|
||||
P.stat.row>=5 and 0
|
||||
end,
|
||||
}
|
||||
@@ -1,41 +1,41 @@
|
||||
return{
|
||||
color=COLOR.lYellow,
|
||||
env={
|
||||
drop=10,lock=30,
|
||||
freshLimit=15,
|
||||
task=function(P)
|
||||
while true do
|
||||
YIELD()
|
||||
if P.control then
|
||||
local D=P.modeData
|
||||
D.timer=D.timer+1
|
||||
if D.timer>=math.max(30,80-.3*D.wave)then
|
||||
P:garbageRise(20+D.wave%5,1,P:getHolePos())
|
||||
P.stat.recv=P.stat.recv+1
|
||||
D.timer=0
|
||||
D.wave=D.wave+1
|
||||
end
|
||||
end
|
||||
end
|
||||
end,
|
||||
bg='bg2',bgm='shift',
|
||||
},
|
||||
mesDisp=function(P)
|
||||
setFont(60)
|
||||
mStr(P.modeData.wave,63,310)
|
||||
mText(drawableText.wave,63,375)
|
||||
end,
|
||||
score=function(P)return{P.modeData.wave,P.stat.row}end,
|
||||
scoreDisp=function(D)return D[1].." Waves "..D[2].." Lines"end,
|
||||
comp=function(a,b)return a[1]>b[1]or a[1]==b[1]and a[2]<b[2]end,
|
||||
getRank=function(P)
|
||||
local W=P.modeData.wave
|
||||
return
|
||||
W>=150 and 5 or
|
||||
W>=110 and 4 or
|
||||
W>=80 and 3 or
|
||||
W>=50 and 2 or
|
||||
W>=20 and 1 or
|
||||
P.stat.row>=5 and 0
|
||||
end,
|
||||
color=COLOR.lYellow,
|
||||
env={
|
||||
drop=10,lock=30,
|
||||
freshLimit=15,
|
||||
task=function(P)
|
||||
while true do
|
||||
YIELD()
|
||||
if P.control then
|
||||
local D=P.modeData
|
||||
D.timer=D.timer+1
|
||||
if D.timer>=math.max(30,80-.3*D.wave)then
|
||||
P:garbageRise(20+D.wave%5,1,P:getHolePos())
|
||||
P.stat.recv=P.stat.recv+1
|
||||
D.timer=0
|
||||
D.wave=D.wave+1
|
||||
end
|
||||
end
|
||||
end
|
||||
end,
|
||||
bg='bg2',bgm='shift',
|
||||
},
|
||||
mesDisp=function(P)
|
||||
setFont(60)
|
||||
mStr(P.modeData.wave,63,310)
|
||||
mText(drawableText.wave,63,375)
|
||||
end,
|
||||
score=function(P)return{P.modeData.wave,P.stat.row}end,
|
||||
scoreDisp=function(D)return D[1].." Waves "..D[2].." Lines"end,
|
||||
comp=function(a,b)return a[1]>b[1]or a[1]==b[1]and a[2]<b[2]end,
|
||||
getRank=function(P)
|
||||
local W=P.modeData.wave
|
||||
return
|
||||
W>=150 and 5 or
|
||||
W>=110 and 4 or
|
||||
W>=80 and 3 or
|
||||
W>=50 and 2 or
|
||||
W>=20 and 1 or
|
||||
P.stat.row>=5 and 0
|
||||
end,
|
||||
}
|
||||
@@ -1,110 +1,110 @@
|
||||
local ins=table.insert
|
||||
return{
|
||||
color=COLOR.red,
|
||||
env={
|
||||
drop=20,lock=60,
|
||||
sequence=function(P)
|
||||
for _=1,3 do P:getNext(7)end
|
||||
while true do
|
||||
YIELD()
|
||||
if not P.nextQueue[1]then
|
||||
local height=FREEROW.get(0)
|
||||
local max=#P.field
|
||||
if max>0 then
|
||||
--Get heights
|
||||
for x=1,10 do
|
||||
local h=max
|
||||
while P.field[h][x]==0 and h>1 do
|
||||
h=h-1
|
||||
end
|
||||
height[x]=h
|
||||
end
|
||||
else
|
||||
for x=1,10 do
|
||||
height[x]=0
|
||||
end
|
||||
end
|
||||
height[11]=999
|
||||
color=COLOR.red,
|
||||
env={
|
||||
drop=20,lock=60,
|
||||
sequence=function(P)
|
||||
for _=1,3 do P:getNext(7)end
|
||||
while true do
|
||||
YIELD()
|
||||
if not P.nextQueue[1]then
|
||||
local height=FREEROW.get(0)
|
||||
local max=#P.field
|
||||
if max>0 then
|
||||
--Get heights
|
||||
for x=1,10 do
|
||||
local h=max
|
||||
while P.field[h][x]==0 and h>1 do
|
||||
h=h-1
|
||||
end
|
||||
height[x]=h
|
||||
end
|
||||
else
|
||||
for x=1,10 do
|
||||
height[x]=0
|
||||
end
|
||||
end
|
||||
height[11]=999
|
||||
|
||||
local wei={1,1,2,2,3,4}
|
||||
local d=0
|
||||
for i=1,10 do
|
||||
d=d+height[i]
|
||||
end
|
||||
if d<40 or P.stat.row>2*42 then--Low field or almost win, give SZO
|
||||
for _=1,4 do
|
||||
ins(wei,1)
|
||||
ins(wei,2)
|
||||
ins(wei,6)
|
||||
end
|
||||
else
|
||||
--Give I when no hole
|
||||
local tempDeltaHei=-999--Height difference
|
||||
for x=2,11 do
|
||||
local deltaHei=height[x]-height[x-1]
|
||||
if tempDeltaHei<-2 and deltaHei>2 then
|
||||
break
|
||||
elseif x==11 then
|
||||
for _=1,3 do ins(wei,7)end
|
||||
else
|
||||
tempDeltaHei=deltaHei
|
||||
end
|
||||
end
|
||||
local wei={1,1,2,2,3,4}
|
||||
local d=0
|
||||
for i=1,10 do
|
||||
d=d+height[i]
|
||||
end
|
||||
if d<40 or P.stat.row>2*42 then--Low field or almost win, give SZO
|
||||
for _=1,4 do
|
||||
ins(wei,1)
|
||||
ins(wei,2)
|
||||
ins(wei,6)
|
||||
end
|
||||
else
|
||||
--Give I when no hole
|
||||
local tempDeltaHei=-999--Height difference
|
||||
for x=2,11 do
|
||||
local deltaHei=height[x]-height[x-1]
|
||||
if tempDeltaHei<-2 and deltaHei>2 then
|
||||
break
|
||||
elseif x==11 then
|
||||
for _=1,3 do ins(wei,7)end
|
||||
else
|
||||
tempDeltaHei=deltaHei
|
||||
end
|
||||
end
|
||||
|
||||
--Give O when no d=0/give T when no d=1
|
||||
local flatCount=0--d=0 count
|
||||
local stairCount=0--d=1 count
|
||||
for x=2,10 do
|
||||
local _=height[x]-height[x-1]
|
||||
if _==0 then
|
||||
flatCount=flatCount+1
|
||||
elseif _==1 or _==-1 then
|
||||
stairCount=stairCount+1
|
||||
end
|
||||
end
|
||||
if flatCount<3 then
|
||||
for _=1,3 do ins(wei,6)end
|
||||
end
|
||||
if stairCount<3 then
|
||||
for _=1,4 do ins(wei,5)end
|
||||
end
|
||||
end
|
||||
--Give O when no d=0/give T when no d=1
|
||||
local flatCount=0--d=0 count
|
||||
local stairCount=0--d=1 count
|
||||
for x=2,10 do
|
||||
local _=height[x]-height[x-1]
|
||||
if _==0 then
|
||||
flatCount=flatCount+1
|
||||
elseif _==1 or _==-1 then
|
||||
stairCount=stairCount+1
|
||||
end
|
||||
end
|
||||
if flatCount<3 then
|
||||
for _=1,3 do ins(wei,6)end
|
||||
end
|
||||
if stairCount<3 then
|
||||
for _=1,4 do ins(wei,5)end
|
||||
end
|
||||
end
|
||||
|
||||
FREEROW.discard(height)
|
||||
P:getNext(wei[P.seqRND:random(#wei)])
|
||||
end
|
||||
end
|
||||
end,
|
||||
dropPiece=function(P)if P.stat.row>=100 then P:win('finish')end end,
|
||||
nextCount=1,holdCount=0,
|
||||
ospin=false,
|
||||
freshLimit=15,
|
||||
bg='blockfall',bgm='reason',
|
||||
},
|
||||
mesDisp=function(P)
|
||||
setFont(55)
|
||||
local r=100-P.stat.row
|
||||
if r<0 then r=0 end
|
||||
mStr(r,63,265)
|
||||
PLY.draw.drawTargetLine(P,r)
|
||||
end,
|
||||
score=function(P)return{math.min(P.stat.row,100),P.stat.time}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,
|
||||
getRank=function(P)
|
||||
local L=P.stat.row
|
||||
if L>=100 then
|
||||
local T=P.stat.time
|
||||
return
|
||||
T<=110 and 5 or
|
||||
T<=126 and 4 or
|
||||
T<=160 and 3 or
|
||||
T<=240 and 2 or
|
||||
1
|
||||
else
|
||||
return
|
||||
L>=50 and 1 or
|
||||
L>=10 and 0
|
||||
end
|
||||
end,
|
||||
FREEROW.discard(height)
|
||||
P:getNext(wei[P.seqRND:random(#wei)])
|
||||
end
|
||||
end
|
||||
end,
|
||||
dropPiece=function(P)if P.stat.row>=100 then P:win('finish')end end,
|
||||
nextCount=1,holdCount=0,
|
||||
ospin=false,
|
||||
freshLimit=15,
|
||||
bg='blockfall',bgm='reason',
|
||||
},
|
||||
mesDisp=function(P)
|
||||
setFont(55)
|
||||
local r=100-P.stat.row
|
||||
if r<0 then r=0 end
|
||||
mStr(r,63,265)
|
||||
PLY.draw.drawTargetLine(P,r)
|
||||
end,
|
||||
score=function(P)return{math.min(P.stat.row,100),P.stat.time}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,
|
||||
getRank=function(P)
|
||||
local L=P.stat.row
|
||||
if L>=100 then
|
||||
local T=P.stat.time
|
||||
return
|
||||
T<=110 and 5 or
|
||||
T<=126 and 4 or
|
||||
T<=160 and 3 or
|
||||
T<=240 and 2 or
|
||||
1
|
||||
else
|
||||
return
|
||||
L>=50 and 1 or
|
||||
L>=10 and 0
|
||||
end
|
||||
end,
|
||||
}
|
||||
@@ -1,40 +1,40 @@
|
||||
local min=math.min
|
||||
return{
|
||||
color=COLOR.green,
|
||||
env={
|
||||
drop=20,lock=60,
|
||||
sequence='bag',
|
||||
seqData={1,1,2,2,3,3,4,4,5,5,6,6},
|
||||
dropPiece=function(P)if P.stat.row>=100 then P:win('finish')end end,
|
||||
nextCount=3,
|
||||
ospin=false,
|
||||
freshLimit=15,
|
||||
bg='blockfall',bgm='reason',
|
||||
},
|
||||
mesDisp=function(P)
|
||||
setFont(55)
|
||||
local r=100-P.stat.row
|
||||
if r<0 then r=0 end
|
||||
mStr(r,63,265)
|
||||
PLY.draw.drawTargetLine(P,r)
|
||||
end,
|
||||
score=function(P)return{min(P.stat.row,100),P.stat.time}end,
|
||||
scoreDisp=function(D)return D[1].." Lines "..STRING.time(D[2])end,
|
||||
comp=function(a,b)return a[1]>b[1]or a[1]==b[1]and a[2]<b[2]end,
|
||||
getRank=function(P)
|
||||
local L=P.stat.row
|
||||
if L>=100 then
|
||||
local T=P.stat.time
|
||||
return
|
||||
T<=80 and 5 or
|
||||
T<=100 and 4 or
|
||||
T<=150 and 3 or
|
||||
T<=210 and 2 or
|
||||
1
|
||||
else
|
||||
return
|
||||
L>=50 and 1 or
|
||||
L>=10 and 0
|
||||
end
|
||||
end,
|
||||
color=COLOR.green,
|
||||
env={
|
||||
drop=20,lock=60,
|
||||
sequence='bag',
|
||||
seqData={1,1,2,2,3,3,4,4,5,5,6,6},
|
||||
dropPiece=function(P)if P.stat.row>=100 then P:win('finish')end end,
|
||||
nextCount=3,
|
||||
ospin=false,
|
||||
freshLimit=15,
|
||||
bg='blockfall',bgm='reason',
|
||||
},
|
||||
mesDisp=function(P)
|
||||
setFont(55)
|
||||
local r=100-P.stat.row
|
||||
if r<0 then r=0 end
|
||||
mStr(r,63,265)
|
||||
PLY.draw.drawTargetLine(P,r)
|
||||
end,
|
||||
score=function(P)return{min(P.stat.row,100),P.stat.time}end,
|
||||
scoreDisp=function(D)return D[1].." Lines "..STRING.time(D[2])end,
|
||||
comp=function(a,b)return a[1]>b[1]or a[1]==b[1]and a[2]<b[2]end,
|
||||
getRank=function(P)
|
||||
local L=P.stat.row
|
||||
if L>=100 then
|
||||
local T=P.stat.time
|
||||
return
|
||||
T<=80 and 5 or
|
||||
T<=100 and 4 or
|
||||
T<=150 and 3 or
|
||||
T<=210 and 2 or
|
||||
1
|
||||
else
|
||||
return
|
||||
L>=50 and 1 or
|
||||
L>=10 and 0
|
||||
end
|
||||
end,
|
||||
}
|
||||
@@ -1,15 +1,15 @@
|
||||
return{
|
||||
color=COLOR.white,
|
||||
env={
|
||||
drop=1e99,lock=1e99,
|
||||
infHold=true,
|
||||
bg='blockfall',bgm='infinite',
|
||||
},
|
||||
mesDisp=function(P)
|
||||
setFont(45)
|
||||
mStr(("%.1f"):format(P.stat.atk),63,190)
|
||||
mStr(("%.2f"):format(P.stat.atk/P.stat.row),63,310)
|
||||
mText(drawableText.atk,63,243)
|
||||
mText(drawableText.eff,63,363)
|
||||
end,
|
||||
color=COLOR.white,
|
||||
env={
|
||||
drop=1e99,lock=1e99,
|
||||
infHold=true,
|
||||
bg='blockfall',bgm='infinite',
|
||||
},
|
||||
mesDisp=function(P)
|
||||
setFont(45)
|
||||
mStr(("%.1f"):format(P.stat.atk),63,190)
|
||||
mStr(("%.2f"):format(P.stat.atk/P.stat.row),63,310)
|
||||
mText(drawableText.atk,63,243)
|
||||
mText(drawableText.eff,63,363)
|
||||
end,
|
||||
}
|
||||
@@ -1,54 +1,54 @@
|
||||
local function check_rise(P)
|
||||
local L=P.garbageBeneath
|
||||
if #P.clearedRow==0 then
|
||||
if L>0 then
|
||||
if L<3 then
|
||||
P:showTextF(text.almost,0,-120,80,'beat',.8)
|
||||
elseif L<5 then
|
||||
P:showTextF(text.great,0,-120,80,'fly',.8)
|
||||
end
|
||||
end
|
||||
for _=1,8-L do
|
||||
P:garbageRise(13,1,generateLine(P.holeRND:random(10)))
|
||||
end
|
||||
else
|
||||
if L==0 then
|
||||
P:showTextF(text.awesome,0,-120,80,'beat',.6)
|
||||
SFX.play('clear')
|
||||
BG.send(26)
|
||||
for _=1,8 do
|
||||
P:garbageRise(13,1,generateLine(P.holeRND:random(10)))
|
||||
end
|
||||
else
|
||||
BG.send(#P.clearedRow)
|
||||
end
|
||||
end
|
||||
local L=P.garbageBeneath
|
||||
if #P.clearedRow==0 then
|
||||
if L>0 then
|
||||
if L<3 then
|
||||
P:showTextF(text.almost,0,-120,80,'beat',.8)
|
||||
elseif L<5 then
|
||||
P:showTextF(text.great,0,-120,80,'fly',.8)
|
||||
end
|
||||
end
|
||||
for _=1,8-L do
|
||||
P:garbageRise(13,1,generateLine(P.holeRND:random(10)))
|
||||
end
|
||||
else
|
||||
if L==0 then
|
||||
P:showTextF(text.awesome,0,-120,80,'beat',.6)
|
||||
SFX.play('clear')
|
||||
BG.send(26)
|
||||
for _=1,8 do
|
||||
P:garbageRise(13,1,generateLine(P.holeRND:random(10)))
|
||||
end
|
||||
else
|
||||
BG.send(#P.clearedRow)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
return{
|
||||
color=COLOR.white,
|
||||
env={
|
||||
drop=1e99,lock=1e99,
|
||||
infHold=true,
|
||||
dropPiece=check_rise,
|
||||
pushSpeed=1.2,
|
||||
bg='wing',bgm='dream',
|
||||
},
|
||||
load=function()
|
||||
PLY.newPlayer(1)
|
||||
local P=PLAYERS[1]
|
||||
for _=1,8 do
|
||||
P:garbageRise(13,1,generateLine(P.holeRND:random(10)))
|
||||
end
|
||||
P.fieldBeneath=0
|
||||
end,
|
||||
mesDisp=function(P)
|
||||
setFont(45)
|
||||
mStr(P.stat.dig,63,190)
|
||||
mStr(P.stat.atk,63,310)
|
||||
mStr(("%.2f"):format(P.stat.atk/P.stat.row),63,420)
|
||||
mText(drawableText.line,63,243)
|
||||
mText(drawableText.atk,63,363)
|
||||
mText(drawableText.eff,63,475)
|
||||
end,
|
||||
color=COLOR.white,
|
||||
env={
|
||||
drop=1e99,lock=1e99,
|
||||
infHold=true,
|
||||
dropPiece=check_rise,
|
||||
pushSpeed=1.2,
|
||||
bg='wing',bgm='dream',
|
||||
},
|
||||
load=function()
|
||||
PLY.newPlayer(1)
|
||||
local P=PLAYERS[1]
|
||||
for _=1,8 do
|
||||
P:garbageRise(13,1,generateLine(P.holeRND:random(10)))
|
||||
end
|
||||
P.fieldBeneath=0
|
||||
end,
|
||||
mesDisp=function(P)
|
||||
setFont(45)
|
||||
mStr(P.stat.dig,63,190)
|
||||
mStr(P.stat.atk,63,310)
|
||||
mStr(("%.2f"):format(P.stat.atk/P.stat.row),63,420)
|
||||
mText(drawableText.line,63,243)
|
||||
mText(drawableText.atk,63,363)
|
||||
mText(drawableText.eff,63,475)
|
||||
end,
|
||||
}
|
||||
@@ -1,56 +1,56 @@
|
||||
local dropSpeed={50,40,30,25,20,15,12,9,7,5,4,3,2,1,1,.5,.5,.25,.25}
|
||||
|
||||
return{
|
||||
color=COLOR.yellow,
|
||||
env={
|
||||
noTele=true,
|
||||
drop=60,wait=8,fall=20,
|
||||
task=function(P)P.modeData.target=10 end,
|
||||
dropPiece=function(P)
|
||||
local flag
|
||||
local l=P.lastPiece
|
||||
if P.combo>1 then flag=true;P:showText("2x",0,-220,40,'flicker',.3)end
|
||||
if l.spin then flag=true;P:showText("spin",0,-180,40,'flicker',.3)end
|
||||
if l.row>1 then flag=true;P:showText("1+",0,-140,40,'flicker',.3)end
|
||||
if l.pc then flag=true;P:showText("PC",0,-100,40,'flicker',.3)end
|
||||
if l.hpc then flag=true;P:showText("HPC",0,-100,40,'flicker',.3)end
|
||||
if flag then
|
||||
P:lose()
|
||||
else
|
||||
local T=P.modeData.target
|
||||
if P.stat.row>=T then
|
||||
if T==200 then
|
||||
P:win('finish')
|
||||
else
|
||||
T=T+10
|
||||
P.gameEnv.drop=dropSpeed[T/10]
|
||||
P.modeData.target=T
|
||||
SFX.play('reach')
|
||||
end
|
||||
end
|
||||
end
|
||||
end,
|
||||
mindas=7,minarr=1,minsdarr=1,
|
||||
bg='bg2',bgm='blank',
|
||||
},
|
||||
slowMark=true,
|
||||
mesDisp=function(P)
|
||||
PLY.draw.drawProgress(P.stat.row,P.modeData.target)
|
||||
PLY.draw.drawTargetLine(P,200-P.stat.row)
|
||||
end,
|
||||
getRank=function(P)
|
||||
local L=P.stat.row
|
||||
if L>=200 then
|
||||
local T=P.stat.time
|
||||
return
|
||||
T<=400 and 5 or
|
||||
T<=600 and 4 or
|
||||
3
|
||||
else
|
||||
return
|
||||
L>=150 and 2 or
|
||||
L>=80 and 1 or
|
||||
L>=20 and 0
|
||||
end
|
||||
end,
|
||||
color=COLOR.yellow,
|
||||
env={
|
||||
noTele=true,
|
||||
drop=60,wait=8,fall=20,
|
||||
task=function(P)P.modeData.target=10 end,
|
||||
dropPiece=function(P)
|
||||
local flag
|
||||
local l=P.lastPiece
|
||||
if P.combo>1 then flag=true;P:showText("2x",0,-220,40,'flicker',.3)end
|
||||
if l.spin then flag=true;P:showText("spin",0,-180,40,'flicker',.3)end
|
||||
if l.row>1 then flag=true;P:showText("1+",0,-140,40,'flicker',.3)end
|
||||
if l.pc then flag=true;P:showText("PC",0,-100,40,'flicker',.3)end
|
||||
if l.hpc then flag=true;P:showText("HPC",0,-100,40,'flicker',.3)end
|
||||
if flag then
|
||||
P:lose()
|
||||
else
|
||||
local T=P.modeData.target
|
||||
if P.stat.row>=T then
|
||||
if T==200 then
|
||||
P:win('finish')
|
||||
else
|
||||
T=T+10
|
||||
P.gameEnv.drop=dropSpeed[T/10]
|
||||
P.modeData.target=T
|
||||
SFX.play('reach')
|
||||
end
|
||||
end
|
||||
end
|
||||
end,
|
||||
mindas=7,minarr=1,minsdarr=1,
|
||||
bg='bg2',bgm='blank',
|
||||
},
|
||||
slowMark=true,
|
||||
mesDisp=function(P)
|
||||
PLY.draw.drawProgress(P.stat.row,P.modeData.target)
|
||||
PLY.draw.drawTargetLine(P,200-P.stat.row)
|
||||
end,
|
||||
getRank=function(P)
|
||||
local L=P.stat.row
|
||||
if L>=200 then
|
||||
local T=P.stat.time
|
||||
return
|
||||
T<=400 and 5 or
|
||||
T<=600 and 4 or
|
||||
3
|
||||
else
|
||||
return
|
||||
L>=150 and 2 or
|
||||
L>=80 and 1 or
|
||||
L>=20 and 0
|
||||
end
|
||||
end,
|
||||
}
|
||||
@@ -1,49 +1,49 @@
|
||||
return{
|
||||
color=COLOR.magenta,
|
||||
env={
|
||||
noTele=true,
|
||||
mindas=7,minarr=1,minsdarr=1,
|
||||
drop=.5,wait=8,fall=20,
|
||||
task=function(P)P.modeData.target=50 end,
|
||||
dropPiece=function(P)
|
||||
if P.stat.row>=P.modeData.target then
|
||||
if P.modeData.target==50 then
|
||||
P.gameEnv.drop=.25
|
||||
P.modeData.target=100
|
||||
SFX.play('reach')
|
||||
elseif P.modeData.target==100 then
|
||||
P:set20G(true)
|
||||
P.modeData.target=200
|
||||
SFX.play('reach')
|
||||
else
|
||||
P:win('finish')
|
||||
end
|
||||
end
|
||||
end,
|
||||
noInitSZO=true,
|
||||
bg='cubes',bgm='push',
|
||||
},
|
||||
slowMark=true,
|
||||
mesDisp=function(P)
|
||||
PLY.draw.drawProgress(P.stat.row,P.modeData.target)
|
||||
PLY.draw.drawTargetLine(P,200-P.stat.row)
|
||||
end,
|
||||
score=function(P)return{math.min(P.stat.row,200),P.stat.time}end,
|
||||
scoreDisp=function(D)return D[1].." Lines "..STRING.time(D[2])end,
|
||||
comp=function(a,b)return a[1]>b[1]or a[1]==b[1]and a[2]<b[2]end,
|
||||
getRank=function(P)
|
||||
local L=P.stat.row
|
||||
if L>=200 then
|
||||
local T=P.stat.time
|
||||
return
|
||||
T<=240 and 5 or
|
||||
T<=360 and 4 or
|
||||
3
|
||||
else
|
||||
return
|
||||
L>=100 and 2 or
|
||||
L>=50 and 1 or
|
||||
L>=10 and 0
|
||||
end
|
||||
end,
|
||||
color=COLOR.magenta,
|
||||
env={
|
||||
noTele=true,
|
||||
mindas=7,minarr=1,minsdarr=1,
|
||||
drop=.5,wait=8,fall=20,
|
||||
task=function(P)P.modeData.target=50 end,
|
||||
dropPiece=function(P)
|
||||
if P.stat.row>=P.modeData.target then
|
||||
if P.modeData.target==50 then
|
||||
P.gameEnv.drop=.25
|
||||
P.modeData.target=100
|
||||
SFX.play('reach')
|
||||
elseif P.modeData.target==100 then
|
||||
P:set20G(true)
|
||||
P.modeData.target=200
|
||||
SFX.play('reach')
|
||||
else
|
||||
P:win('finish')
|
||||
end
|
||||
end
|
||||
end,
|
||||
noInitSZO=true,
|
||||
bg='cubes',bgm='push',
|
||||
},
|
||||
slowMark=true,
|
||||
mesDisp=function(P)
|
||||
PLY.draw.drawProgress(P.stat.row,P.modeData.target)
|
||||
PLY.draw.drawTargetLine(P,200-P.stat.row)
|
||||
end,
|
||||
score=function(P)return{math.min(P.stat.row,200),P.stat.time}end,
|
||||
scoreDisp=function(D)return D[1].." Lines "..STRING.time(D[2])end,
|
||||
comp=function(a,b)return a[1]>b[1]or a[1]==b[1]and a[2]<b[2]end,
|
||||
getRank=function(P)
|
||||
local L=P.stat.row
|
||||
if L>=200 then
|
||||
local T=P.stat.time
|
||||
return
|
||||
T<=240 and 5 or
|
||||
T<=360 and 4 or
|
||||
3
|
||||
else
|
||||
return
|
||||
L>=100 and 2 or
|
||||
L>=50 and 1 or
|
||||
L>=10 and 0
|
||||
end
|
||||
end,
|
||||
}
|
||||
@@ -1,47 +1,47 @@
|
||||
local dropSpeed={50,40,30,24,18,14,10,8,6,5,4,3,2,1,1,.5,.5,.25,.25}
|
||||
|
||||
return{
|
||||
color=COLOR.green,
|
||||
env={
|
||||
noTele=true,
|
||||
mindas=7,minarr=1,minsdarr=1,
|
||||
drop=60,wait=8,fall=20,
|
||||
task=function(P)P.modeData.target=10 end,
|
||||
dropPiece=function(P)
|
||||
if P.stat.row>=P.modeData.target then
|
||||
if P.modeData.target==200 then
|
||||
P:win('finish')
|
||||
else
|
||||
P.gameEnv.drop=dropSpeed[P.modeData.target/10]
|
||||
P.modeData.target=P.modeData.target+10
|
||||
SFX.play('reach')
|
||||
end
|
||||
end
|
||||
end,
|
||||
noInitSZO=true,
|
||||
bg='bg2',bgm='push',
|
||||
},
|
||||
slowMark=true,
|
||||
mesDisp=function(P)
|
||||
PLY.draw.drawProgress(P.stat.row,P.modeData.target)
|
||||
PLY.draw.drawTargetLine(P,200-P.stat.row)
|
||||
end,
|
||||
score=function(P)return{math.min(P.stat.row,200),P.stat.time}end,
|
||||
scoreDisp=function(D)return D[1].." Lines "..STRING.time(D[2])end,
|
||||
comp=function(a,b)return a[1]>b[1]or a[1]==b[1]and a[2]<b[2]end,
|
||||
getRank=function(P)
|
||||
local L=P.stat.row
|
||||
if L>=200 then
|
||||
local T=P.stat.time
|
||||
return
|
||||
T<=240 and 5 or
|
||||
T<=360 and 4 or
|
||||
3
|
||||
else
|
||||
return
|
||||
L>=150 and 2 or
|
||||
L>=100 and 1 or
|
||||
L>=20 and 0
|
||||
end
|
||||
end,
|
||||
color=COLOR.green,
|
||||
env={
|
||||
noTele=true,
|
||||
mindas=7,minarr=1,minsdarr=1,
|
||||
drop=60,wait=8,fall=20,
|
||||
task=function(P)P.modeData.target=10 end,
|
||||
dropPiece=function(P)
|
||||
if P.stat.row>=P.modeData.target then
|
||||
if P.modeData.target==200 then
|
||||
P:win('finish')
|
||||
else
|
||||
P.gameEnv.drop=dropSpeed[P.modeData.target/10]
|
||||
P.modeData.target=P.modeData.target+10
|
||||
SFX.play('reach')
|
||||
end
|
||||
end
|
||||
end,
|
||||
noInitSZO=true,
|
||||
bg='bg2',bgm='push',
|
||||
},
|
||||
slowMark=true,
|
||||
mesDisp=function(P)
|
||||
PLY.draw.drawProgress(P.stat.row,P.modeData.target)
|
||||
PLY.draw.drawTargetLine(P,200-P.stat.row)
|
||||
end,
|
||||
score=function(P)return{math.min(P.stat.row,200),P.stat.time}end,
|
||||
scoreDisp=function(D)return D[1].." Lines "..STRING.time(D[2])end,
|
||||
comp=function(a,b)return a[1]>b[1]or a[1]==b[1]and a[2]<b[2]end,
|
||||
getRank=function(P)
|
||||
local L=P.stat.row
|
||||
if L>=200 then
|
||||
local T=P.stat.time
|
||||
return
|
||||
T<=240 and 5 or
|
||||
T<=360 and 4 or
|
||||
3
|
||||
else
|
||||
return
|
||||
L>=150 and 2 or
|
||||
L>=100 and 1 or
|
||||
L>=20 and 0
|
||||
end
|
||||
end,
|
||||
}
|
||||
@@ -1,68 +1,68 @@
|
||||
local sectionName={"D","C","B","A","A+","S-","S","S+","S+","SS","SS","U","U","X","X+"}
|
||||
local passPoint=16
|
||||
local function score(P)
|
||||
if P.modeData.rankPoint<140-passPoint then--If Less then X
|
||||
local R=#P.clearedRow
|
||||
if R>0 then
|
||||
if R==4 then R=10 end--Techrash +10
|
||||
P.modeData.rankPoint=math.min(P.modeData.rankPoint+R,140-passPoint)
|
||||
P.modeData.rankName=sectionName[math.floor(P.modeData.rankPoint/10)+1]
|
||||
end
|
||||
end
|
||||
if P.modeData.rankPoint<140-passPoint then--If Less then X
|
||||
local R=#P.clearedRow
|
||||
if R>0 then
|
||||
if R==4 then R=10 end--Techrash +10
|
||||
P.modeData.rankPoint=math.min(P.modeData.rankPoint+R,140-passPoint)
|
||||
P.modeData.rankName=sectionName[math.floor(P.modeData.rankPoint/10)+1]
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
return{
|
||||
color=COLOR.lBlue,
|
||||
env={
|
||||
noTele=true,
|
||||
minarr=1,
|
||||
drop=0,lock=15,
|
||||
wait=15,fall=6,
|
||||
nextCount=3,
|
||||
sequence='hisPool',
|
||||
visible='fast',
|
||||
freshLimit=15,
|
||||
dropPiece=score,
|
||||
noInitSZO=true,
|
||||
task=function(P)
|
||||
P.modeData.rankPoint=0
|
||||
P.modeData.rankName=sectionName[1]
|
||||
while true do
|
||||
YIELD()
|
||||
if P.stat.frame>=3600 then
|
||||
P.modeData.rankPoint=math.min(P.modeData.rankPoint+passPoint,140)
|
||||
P.modeData.rankName=sectionName[math.floor(P.modeData.rankPoint/10)+1]
|
||||
P:win('finish')
|
||||
return
|
||||
end
|
||||
end
|
||||
end,
|
||||
bg='blockspace',bgm='hope',
|
||||
},
|
||||
slowMark=true,
|
||||
mesDisp=function(P)
|
||||
mText(drawableText.line,63,300)
|
||||
mText(drawableText.techrash,63,420)
|
||||
mText(drawableText.grade,63,170)
|
||||
setFont(55)
|
||||
mStr(P.modeData.rankName,63,110)
|
||||
setFont(20)
|
||||
mStr(("%.1f"):format(P.modeData.rankPoint/10),63,198)
|
||||
setFont(75)
|
||||
mStr(P.stat.row,63,220)
|
||||
mStr(P.stat.clears[4],63,340)
|
||||
end,
|
||||
score=function(P)return{P.modeData.rankPoint,P.stat.score}end,
|
||||
scoreDisp=function(D)return sectionName[math.floor(D[1]/10)+1].." "..D[2]end,
|
||||
comp=function(a,b)return a[1]>b[1]or a[1]==b[1]and a[2]>b[2]end,
|
||||
getRank=function(P)
|
||||
P=P.modeData.rankPoint
|
||||
return
|
||||
P==140 and 5 or
|
||||
P>=110 and 4 or
|
||||
P>=80 and 3 or
|
||||
P>=50 and 2 or
|
||||
P>=30 and 1 or
|
||||
P>=10 and 0
|
||||
end,
|
||||
color=COLOR.lBlue,
|
||||
env={
|
||||
noTele=true,
|
||||
minarr=1,
|
||||
drop=0,lock=15,
|
||||
wait=15,fall=6,
|
||||
nextCount=3,
|
||||
sequence='hisPool',
|
||||
visible='fast',
|
||||
freshLimit=15,
|
||||
dropPiece=score,
|
||||
noInitSZO=true,
|
||||
task=function(P)
|
||||
P.modeData.rankPoint=0
|
||||
P.modeData.rankName=sectionName[1]
|
||||
while true do
|
||||
YIELD()
|
||||
if P.stat.frame>=3600 then
|
||||
P.modeData.rankPoint=math.min(P.modeData.rankPoint+passPoint,140)
|
||||
P.modeData.rankName=sectionName[math.floor(P.modeData.rankPoint/10)+1]
|
||||
P:win('finish')
|
||||
return
|
||||
end
|
||||
end
|
||||
end,
|
||||
bg='blockspace',bgm='hope',
|
||||
},
|
||||
slowMark=true,
|
||||
mesDisp=function(P)
|
||||
mText(drawableText.line,63,300)
|
||||
mText(drawableText.techrash,63,420)
|
||||
mText(drawableText.grade,63,170)
|
||||
setFont(55)
|
||||
mStr(P.modeData.rankName,63,110)
|
||||
setFont(20)
|
||||
mStr(("%.1f"):format(P.modeData.rankPoint/10),63,198)
|
||||
setFont(75)
|
||||
mStr(P.stat.row,63,220)
|
||||
mStr(P.stat.clears[4],63,340)
|
||||
end,
|
||||
score=function(P)return{P.modeData.rankPoint,P.stat.score}end,
|
||||
scoreDisp=function(D)return sectionName[math.floor(D[1]/10)+1].." "..D[2]end,
|
||||
comp=function(a,b)return a[1]>b[1]or a[1]==b[1]and a[2]>b[2]end,
|
||||
getRank=function(P)
|
||||
P=P.modeData.rankPoint
|
||||
return
|
||||
P==140 and 5 or
|
||||
P>=110 and 4 or
|
||||
P>=80 and 3 or
|
||||
P>=50 and 2 or
|
||||
P>=30 and 1 or
|
||||
P>=10 and 0
|
||||
end,
|
||||
}
|
||||
@@ -1,75 +1,75 @@
|
||||
local function score(P)
|
||||
local D=P.modeData
|
||||
local D=P.modeData
|
||||
|
||||
local c=#P.clearedRow
|
||||
if c==0 and D.pt%100==99 then return end
|
||||
local s=c<3 and c+1 or c==3 and 5 or 7
|
||||
if P.combo>7 then s=s+2
|
||||
elseif P.combo>3 then s=s+1
|
||||
end
|
||||
D.pt=D.pt+s
|
||||
local c=#P.clearedRow
|
||||
if c==0 and D.pt%100==99 then return end
|
||||
local s=c<3 and c+1 or c==3 and 5 or 7
|
||||
if P.combo>7 then s=s+2
|
||||
elseif P.combo>3 then s=s+1
|
||||
end
|
||||
D.pt=D.pt+s
|
||||
|
||||
if D.pt%100==99 then
|
||||
SFX.play('blip_1')
|
||||
elseif D.pt>=D.target then--Level up!
|
||||
s=D.target/100--range from 1 to 9
|
||||
local E=P.gameEnv
|
||||
if s<4 then
|
||||
P:showTextF(text.stage:gsub("$1",s),0,-120,80,'fly')
|
||||
--First 300
|
||||
if s~=1 then E.lock=E.lock-1 end
|
||||
if s~=2 then E.wait=E.wait-1 end
|
||||
if s~=3 then E.fall=E.fall-1 end
|
||||
D.target=D.target+100
|
||||
elseif s<10 then
|
||||
if s==5 then BGM.play('distortion')end
|
||||
P:showTextF(text.stage:gsub("$1",s),0,-120,60,'fly',1.26)
|
||||
if s==4 or s==7 then E.das=E.das-1 end
|
||||
if s%3==0 then E.lock=E.lock-1
|
||||
elseif s%3==1 then E.wait=E.wait-1
|
||||
elseif s%3==2 then E.fall=E.fall-1
|
||||
end
|
||||
D.target=D.target+100
|
||||
else
|
||||
D.pt=1000
|
||||
P:win('finish')
|
||||
end
|
||||
SFX.play('reach')
|
||||
end
|
||||
if D.pt%100==99 then
|
||||
SFX.play('blip_1')
|
||||
elseif D.pt>=D.target then--Level up!
|
||||
s=D.target/100--range from 1 to 9
|
||||
local E=P.gameEnv
|
||||
if s<4 then
|
||||
P:showTextF(text.stage:gsub("$1",s),0,-120,80,'fly')
|
||||
--First 300
|
||||
if s~=1 then E.lock=E.lock-1 end
|
||||
if s~=2 then E.wait=E.wait-1 end
|
||||
if s~=3 then E.fall=E.fall-1 end
|
||||
D.target=D.target+100
|
||||
elseif s<10 then
|
||||
if s==5 then BGM.play('distortion')end
|
||||
P:showTextF(text.stage:gsub("$1",s),0,-120,60,'fly',1.26)
|
||||
if s==4 or s==7 then E.das=E.das-1 end
|
||||
if s%3==0 then E.lock=E.lock-1
|
||||
elseif s%3==1 then E.wait=E.wait-1
|
||||
elseif s%3==2 then E.fall=E.fall-1
|
||||
end
|
||||
D.target=D.target+100
|
||||
else
|
||||
D.pt=1000
|
||||
P:win('finish')
|
||||
end
|
||||
SFX.play('reach')
|
||||
end
|
||||
end
|
||||
|
||||
return{
|
||||
color=COLOR.lGray,
|
||||
env={
|
||||
noTele=true,
|
||||
das=5,arr=1,
|
||||
drop=0,lock=12,
|
||||
wait=10,fall=10,
|
||||
dropPiece=score,
|
||||
task=function(P)
|
||||
P.modeData.pt=0
|
||||
P.modeData.target=100
|
||||
end,
|
||||
freshLimit=15,
|
||||
easyFresh=false,bone=true,
|
||||
noInitSZO=true,
|
||||
bg='lightning',bgm='rectification',
|
||||
},
|
||||
slowMark=true,
|
||||
mesDisp=function(P)
|
||||
PLY.draw.drawProgress(P.modeData.pt,P.modeData.target)
|
||||
end,
|
||||
score=function(P)return{P.modeData.pt,P.stat.time}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,
|
||||
getRank=function(P)
|
||||
local S=P.modeData.pt
|
||||
return
|
||||
S>=1000 and 5 or
|
||||
S>=800 and 4 or
|
||||
S>=600 and 3 or
|
||||
S>=400 and 2 or
|
||||
S>=200 and 1 or
|
||||
S>=50 and 0
|
||||
end,
|
||||
color=COLOR.lGray,
|
||||
env={
|
||||
noTele=true,
|
||||
das=5,arr=1,
|
||||
drop=0,lock=12,
|
||||
wait=10,fall=10,
|
||||
dropPiece=score,
|
||||
task=function(P)
|
||||
P.modeData.pt=0
|
||||
P.modeData.target=100
|
||||
end,
|
||||
freshLimit=15,
|
||||
easyFresh=false,bone=true,
|
||||
noInitSZO=true,
|
||||
bg='lightning',bgm='rectification',
|
||||
},
|
||||
slowMark=true,
|
||||
mesDisp=function(P)
|
||||
PLY.draw.drawProgress(P.modeData.pt,P.modeData.target)
|
||||
end,
|
||||
score=function(P)return{P.modeData.pt,P.stat.time}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,
|
||||
getRank=function(P)
|
||||
local S=P.modeData.pt
|
||||
return
|
||||
S>=1000 and 5 or
|
||||
S>=800 and 4 or
|
||||
S>=600 and 3 or
|
||||
S>=400 and 2 or
|
||||
S>=200 and 1 or
|
||||
S>=50 and 0
|
||||
end,
|
||||
}
|
||||
@@ -1,93 +1,93 @@
|
||||
local death_lock={12,11,10,9,8, 7,7,7,7,6}
|
||||
local death_wait={10,9, 8, 7,6, 6,6,5,5,4}
|
||||
local death_fall={10,9, 8, 7,6, 6,5,5,4,4}
|
||||
local death_lock={12,11,10,9,8, 7,7,7,7,6}
|
||||
local death_wait={10,9, 8, 7,6, 6,6,5,5,4}
|
||||
local death_fall={10,9, 8, 7,6, 6,5,5,4,4}
|
||||
local function score(P)
|
||||
local D=P.modeData
|
||||
local D=P.modeData
|
||||
|
||||
local c=#P.clearedRow
|
||||
if c==0 and D.pt%100==99 then return end
|
||||
local s=c<3 and c+1 or c==3 and 5 or 7
|
||||
if P.combo>7 then s=s+2
|
||||
elseif P.combo>3 then s=s+1
|
||||
end
|
||||
D.pt=D.pt+s
|
||||
local c=#P.clearedRow
|
||||
if c==0 and D.pt%100==99 then return end
|
||||
local s=c<3 and c+1 or c==3 and 5 or 7
|
||||
if P.combo>7 then s=s+2
|
||||
elseif P.combo>3 then s=s+1
|
||||
end
|
||||
D.pt=D.pt+s
|
||||
|
||||
if D.pt%100==99 then
|
||||
SFX.play('blip_1')
|
||||
elseif D.pt>=D.target then--Level up!
|
||||
s=D.target/100
|
||||
local E=P.gameEnv
|
||||
E.lock=death_lock[s]
|
||||
E.wait=death_wait[s]
|
||||
E.fall=death_fall[s]
|
||||
if s==2 then
|
||||
E.das=5
|
||||
BG.set('rainbow')
|
||||
elseif s==4 then
|
||||
E.das=4
|
||||
BG.set('rainbow2')
|
||||
elseif s==5 then
|
||||
if P.stat.frame>183*60 then
|
||||
D.pt=500
|
||||
P:win('finish')
|
||||
return
|
||||
else
|
||||
E.bone=true
|
||||
P.gameEnv.freshLimit=10
|
||||
BG.set('glow')
|
||||
BGM.play('secret7th remix')
|
||||
end
|
||||
elseif s==6 then
|
||||
E.das=3
|
||||
BG.set('lightning')
|
||||
elseif s==7 then
|
||||
E.bone=true
|
||||
elseif s==10 then
|
||||
D.pt=1000
|
||||
P:win('finish')
|
||||
return
|
||||
end
|
||||
D.target=D.target+100
|
||||
P:showTextF(text.stage:gsub("$1",s),0,-120,80,'beat')
|
||||
SFX.play('reach')
|
||||
end
|
||||
if D.pt%100==99 then
|
||||
SFX.play('blip_1')
|
||||
elseif D.pt>=D.target then--Level up!
|
||||
s=D.target/100
|
||||
local E=P.gameEnv
|
||||
E.lock=death_lock[s]
|
||||
E.wait=death_wait[s]
|
||||
E.fall=death_fall[s]
|
||||
if s==2 then
|
||||
E.das=5
|
||||
BG.set('rainbow')
|
||||
elseif s==4 then
|
||||
E.das=4
|
||||
BG.set('rainbow2')
|
||||
elseif s==5 then
|
||||
if P.stat.frame>183*60 then
|
||||
D.pt=500
|
||||
P:win('finish')
|
||||
return
|
||||
else
|
||||
E.bone=true
|
||||
P.gameEnv.freshLimit=10
|
||||
BG.set('glow')
|
||||
BGM.play('secret7th remix')
|
||||
end
|
||||
elseif s==6 then
|
||||
E.das=3
|
||||
BG.set('lightning')
|
||||
elseif s==7 then
|
||||
E.bone=true
|
||||
elseif s==10 then
|
||||
D.pt=1000
|
||||
P:win('finish')
|
||||
return
|
||||
end
|
||||
D.target=D.target+100
|
||||
P:showTextF(text.stage:gsub("$1",s),0,-120,80,'beat')
|
||||
SFX.play('reach')
|
||||
end
|
||||
end
|
||||
|
||||
return{
|
||||
color=COLOR.red,
|
||||
env={
|
||||
noTele=true,
|
||||
das=6,arr=1,
|
||||
drop=0,
|
||||
lock=death_lock[1],
|
||||
wait=death_wait[1],
|
||||
fall=death_fall[1],
|
||||
dropPiece=score,
|
||||
task=function(P)
|
||||
P.modeData.pt=0
|
||||
P.modeData.target=100
|
||||
end,
|
||||
freshLimit=15,
|
||||
noInitSZO=true,
|
||||
bg='bg2',bgm='secret7th',
|
||||
},
|
||||
slowMark=true,
|
||||
mesDisp=function(P)
|
||||
PLY.draw.drawProgress(P.modeData.pt,P.modeData.target)
|
||||
end,
|
||||
score=function(P)return{P.modeData.pt,P.stat.time}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,
|
||||
getRank=function(P)
|
||||
local S=P.modeData.pt
|
||||
return
|
||||
S>=1000 and 5 or
|
||||
S>=800 and 4 or
|
||||
S>=500 and 3 or
|
||||
S>=300 and 2 or
|
||||
S>=100 and 1 or
|
||||
S>=60 and 0
|
||||
end,
|
||||
color=COLOR.red,
|
||||
env={
|
||||
noTele=true,
|
||||
das=6,arr=1,
|
||||
drop=0,
|
||||
lock=death_lock[1],
|
||||
wait=death_wait[1],
|
||||
fall=death_fall[1],
|
||||
dropPiece=score,
|
||||
task=function(P)
|
||||
P.modeData.pt=0
|
||||
P.modeData.target=100
|
||||
end,
|
||||
freshLimit=15,
|
||||
noInitSZO=true,
|
||||
bg='bg2',bgm='secret7th',
|
||||
},
|
||||
slowMark=true,
|
||||
mesDisp=function(P)
|
||||
PLY.draw.drawProgress(P.modeData.pt,P.modeData.target)
|
||||
end,
|
||||
score=function(P)return{P.modeData.pt,P.stat.time}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,
|
||||
getRank=function(P)
|
||||
local S=P.modeData.pt
|
||||
return
|
||||
S>=1000 and 5 or
|
||||
S>=800 and 4 or
|
||||
S>=500 and 3 or
|
||||
S>=300 and 2 or
|
||||
S>=100 and 1 or
|
||||
S>=60 and 0
|
||||
end,
|
||||
}
|
||||
@@ -2,84 +2,84 @@ local rush_lock={20,18,16,15,14}
|
||||
local rush_wait={12,10, 9, 8, 7}
|
||||
local rush_fall={18,16,14,13,12}
|
||||
local function score(P)
|
||||
local D=P.modeData
|
||||
local D=P.modeData
|
||||
|
||||
local c=#P.clearedRow
|
||||
if c==0 and D.pt%100==99 then return end
|
||||
local s=c<3 and c+1 or c==3 and 5 or 7
|
||||
if P.combo>7 then s=s+2
|
||||
elseif P.combo>3 then s=s+1
|
||||
end
|
||||
D.pt=D.pt+s
|
||||
local c=#P.clearedRow
|
||||
if c==0 and D.pt%100==99 then return end
|
||||
local s=c<3 and c+1 or c==3 and 5 or 7
|
||||
if P.combo>7 then s=s+2
|
||||
elseif P.combo>3 then s=s+1
|
||||
end
|
||||
D.pt=D.pt+s
|
||||
|
||||
if D.pt%100==99 then
|
||||
SFX.play('blip_1')
|
||||
elseif D.pt>=D.target then--Level up!
|
||||
s=D.target/100
|
||||
local E=P.gameEnv
|
||||
BG.set(s==1 and'bg1'or s==2 and'bg2'or s==3 and'rainbow'or 'rainbow2')
|
||||
E.lock=rush_lock[s]
|
||||
E.wait=rush_wait[s]
|
||||
E.fall=rush_fall[s]
|
||||
E.das=10-s
|
||||
if s==2 then
|
||||
E.arr=2
|
||||
elseif s==4 then
|
||||
E.bone=true
|
||||
end
|
||||
if D.pt%100==99 then
|
||||
SFX.play('blip_1')
|
||||
elseif D.pt>=D.target then--Level up!
|
||||
s=D.target/100
|
||||
local E=P.gameEnv
|
||||
BG.set(s==1 and'bg1'or s==2 and'bg2'or s==3 and'rainbow'or 'rainbow2')
|
||||
E.lock=rush_lock[s]
|
||||
E.wait=rush_wait[s]
|
||||
E.fall=rush_fall[s]
|
||||
E.das=10-s
|
||||
if s==2 then
|
||||
E.arr=2
|
||||
elseif s==4 then
|
||||
E.bone=true
|
||||
end
|
||||
|
||||
if s==5 then
|
||||
D.pt=500
|
||||
P:win('finish')
|
||||
else
|
||||
D.target=D.target+100
|
||||
P:showTextF(text.stage:gsub("$1",s),0,-120,80,'fly')
|
||||
end
|
||||
SFX.play('reach')
|
||||
end
|
||||
if s==5 then
|
||||
D.pt=500
|
||||
P:win('finish')
|
||||
else
|
||||
D.target=D.target+100
|
||||
P:showTextF(text.stage:gsub("$1",s),0,-120,80,'fly')
|
||||
end
|
||||
SFX.play('reach')
|
||||
end
|
||||
end
|
||||
|
||||
return{
|
||||
color=COLOR.red,
|
||||
env={
|
||||
noTele=true,
|
||||
das=9,arr=3,
|
||||
drop=0,
|
||||
lock=rush_lock[1],
|
||||
wait=rush_wait[1],
|
||||
fall=rush_fall[1],
|
||||
dropPiece=score,
|
||||
noInitSZO=true,
|
||||
task=function(P)
|
||||
P.modeData.pt=0
|
||||
P.modeData.target=100
|
||||
end,
|
||||
freshLimit=15,
|
||||
bg='bg1',bgm='secret8th',
|
||||
},
|
||||
slowMark=true,
|
||||
mesDisp=function(P)
|
||||
PLY.draw.drawProgress(P.modeData.pt,P.modeData.target)
|
||||
end,
|
||||
score=function(P)return{P.modeData.pt,P.stat.time}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,
|
||||
getRank=function(P)
|
||||
local S=P.modeData.pt
|
||||
if S==500 then
|
||||
local T=P.stat.time
|
||||
return
|
||||
T<=170 and 5 or
|
||||
T<=200 and 4 or
|
||||
3
|
||||
else
|
||||
return
|
||||
S>=460 and 3 or
|
||||
S>=350 and 2 or
|
||||
S>=200 and 1 or
|
||||
S>=50 and 0
|
||||
end
|
||||
end,
|
||||
color=COLOR.red,
|
||||
env={
|
||||
noTele=true,
|
||||
das=9,arr=3,
|
||||
drop=0,
|
||||
lock=rush_lock[1],
|
||||
wait=rush_wait[1],
|
||||
fall=rush_fall[1],
|
||||
dropPiece=score,
|
||||
noInitSZO=true,
|
||||
task=function(P)
|
||||
P.modeData.pt=0
|
||||
P.modeData.target=100
|
||||
end,
|
||||
freshLimit=15,
|
||||
bg='bg1',bgm='secret8th',
|
||||
},
|
||||
slowMark=true,
|
||||
mesDisp=function(P)
|
||||
PLY.draw.drawProgress(P.modeData.pt,P.modeData.target)
|
||||
end,
|
||||
score=function(P)return{P.modeData.pt,P.stat.time}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,
|
||||
getRank=function(P)
|
||||
local S=P.modeData.pt
|
||||
if S==500 then
|
||||
local T=P.stat.time
|
||||
return
|
||||
T<=170 and 5 or
|
||||
T<=200 and 4 or
|
||||
3
|
||||
else
|
||||
return
|
||||
S>=460 and 3 or
|
||||
S>=350 and 2 or
|
||||
S>=200 and 1 or
|
||||
S>=50 and 0
|
||||
end
|
||||
end,
|
||||
}
|
||||
@@ -1,93 +1,93 @@
|
||||
local rush_lock={20,18,16,15,14, 14,13,12,11,11}
|
||||
local rush_wait={12,11,11,10,10, 10,10, 9, 9, 9}
|
||||
local rush_fall={18,16,14,13,12, 12,11,11,10,10}
|
||||
local rush_lock={20,18,16,15,14, 14,13,12,11,11}
|
||||
local rush_wait={12,11,11,10,10, 10,10, 9, 9, 9}
|
||||
local rush_fall={18,16,14,13,12, 12,11,11,10,10}
|
||||
local function score(P)
|
||||
local D=P.modeData
|
||||
local D=P.modeData
|
||||
|
||||
local c=#P.clearedRow
|
||||
if c==0 and D.pt%100==99 then return end
|
||||
local s=c<3 and c+1 or c==3 and 5 or 7
|
||||
if P.combo>7 then s=s+2
|
||||
elseif P.combo>3 then s=s+1
|
||||
end
|
||||
D.pt=D.pt+s
|
||||
local c=#P.clearedRow
|
||||
if c==0 and D.pt%100==99 then return end
|
||||
local s=c<3 and c+1 or c==3 and 5 or 7
|
||||
if P.combo>7 then s=s+2
|
||||
elseif P.combo>3 then s=s+1
|
||||
end
|
||||
D.pt=D.pt+s
|
||||
|
||||
if D.pt%100==99 then
|
||||
SFX.play('blip_1')
|
||||
elseif D.pt>=D.target then--Level up!
|
||||
s=D.target/100
|
||||
local E=P.gameEnv
|
||||
E.lock=rush_lock[s]
|
||||
E.wait=rush_wait[s]
|
||||
E.fall=rush_fall[s]
|
||||
if D.pt%100==99 then
|
||||
SFX.play('blip_1')
|
||||
elseif D.pt>=D.target then--Level up!
|
||||
s=D.target/100
|
||||
local E=P.gameEnv
|
||||
E.lock=rush_lock[s]
|
||||
E.wait=rush_wait[s]
|
||||
E.fall=rush_fall[s]
|
||||
|
||||
if s==2 then
|
||||
E.das=8
|
||||
BG.set('rainbow')
|
||||
elseif s==4 then
|
||||
BG.set('rainbow2')
|
||||
elseif s==5 then
|
||||
if P.stat.frame>260*60 then
|
||||
D.pt=500
|
||||
P:win('finish')
|
||||
return
|
||||
else
|
||||
P.gameEnv.freshLimit=10
|
||||
E.das=7
|
||||
BG.set('glow')
|
||||
BGM.play('secret8th remix')
|
||||
end
|
||||
elseif s==7 then
|
||||
E.das=6
|
||||
BG.set('lightning')
|
||||
elseif s==9 then
|
||||
E.bone=true
|
||||
elseif s==10 then
|
||||
D.pt=1000
|
||||
P:win('finish')
|
||||
return
|
||||
end
|
||||
D.target=D.target+100
|
||||
P:showTextF(text.stage:gsub("$1",s),0,-120,80,'fly')
|
||||
SFX.play('reach')
|
||||
end
|
||||
if s==2 then
|
||||
E.das=8
|
||||
BG.set('rainbow')
|
||||
elseif s==4 then
|
||||
BG.set('rainbow2')
|
||||
elseif s==5 then
|
||||
if P.stat.frame>260*60 then
|
||||
D.pt=500
|
||||
P:win('finish')
|
||||
return
|
||||
else
|
||||
P.gameEnv.freshLimit=10
|
||||
E.das=7
|
||||
BG.set('glow')
|
||||
BGM.play('secret8th remix')
|
||||
end
|
||||
elseif s==7 then
|
||||
E.das=6
|
||||
BG.set('lightning')
|
||||
elseif s==9 then
|
||||
E.bone=true
|
||||
elseif s==10 then
|
||||
D.pt=1000
|
||||
P:win('finish')
|
||||
return
|
||||
end
|
||||
D.target=D.target+100
|
||||
P:showTextF(text.stage:gsub("$1",s),0,-120,80,'fly')
|
||||
SFX.play('reach')
|
||||
end
|
||||
end
|
||||
|
||||
return{
|
||||
color=COLOR.red,
|
||||
env={
|
||||
noTele=true,
|
||||
das=10,arr=3,
|
||||
drop=0,
|
||||
lock=rush_lock[1],
|
||||
wait=rush_wait[1],
|
||||
fall=rush_fall[1],
|
||||
dropPiece=score,
|
||||
noInitSZO=true,
|
||||
task=function(P)
|
||||
P.modeData.pt=0
|
||||
P.modeData.target=100
|
||||
end,
|
||||
freshLimit=15,
|
||||
bg='bg1',bgm='secret8th',
|
||||
},
|
||||
slowMark=true,
|
||||
mesDisp=function(P)
|
||||
PLY.draw.drawProgress(P.modeData.pt,P.modeData.target)
|
||||
end,
|
||||
score=function(P)return{P.modeData.pt,P.stat.time}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,
|
||||
getRank=function(P)
|
||||
local S=P.modeData.pt
|
||||
return
|
||||
S>=1000 and 5 or
|
||||
S>=800 and 4 or
|
||||
S>=500 and 3 or
|
||||
S>=300 and 2 or
|
||||
S>=100 and 1 or
|
||||
S>=60 and 0
|
||||
end,
|
||||
color=COLOR.red,
|
||||
env={
|
||||
noTele=true,
|
||||
das=10,arr=3,
|
||||
drop=0,
|
||||
lock=rush_lock[1],
|
||||
wait=rush_wait[1],
|
||||
fall=rush_fall[1],
|
||||
dropPiece=score,
|
||||
noInitSZO=true,
|
||||
task=function(P)
|
||||
P.modeData.pt=0
|
||||
P.modeData.target=100
|
||||
end,
|
||||
freshLimit=15,
|
||||
bg='bg1',bgm='secret8th',
|
||||
},
|
||||
slowMark=true,
|
||||
mesDisp=function(P)
|
||||
PLY.draw.drawProgress(P.modeData.pt,P.modeData.target)
|
||||
end,
|
||||
score=function(P)return{P.modeData.pt,P.stat.time}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,
|
||||
getRank=function(P)
|
||||
local S=P.modeData.pt
|
||||
return
|
||||
S>=1000 and 5 or
|
||||
S>=800 and 4 or
|
||||
S>=500 and 3 or
|
||||
S>=300 and 2 or
|
||||
S>=100 and 1 or
|
||||
S>=60 and 0
|
||||
end,
|
||||
}
|
||||
@@ -1,163 +1,163 @@
|
||||
return{
|
||||
color=COLOR.black,
|
||||
env={
|
||||
noTele=true,
|
||||
das=5,arr=1,
|
||||
drop=0,lock=15,
|
||||
wait=10,fall=10,
|
||||
nextCount=2,
|
||||
sequence='his',
|
||||
task=function(P)P.modeData.target=12 end,
|
||||
dropPiece=function(P)
|
||||
local p=P.modeData.pt+P.lastPiece.row
|
||||
if p>=P.modeData.target then
|
||||
local ENV=P.gameEnv
|
||||
local T=P.modeData.target
|
||||
--Stage 1: clear 3 techrash
|
||||
if T==12 then--Stage 2: swap color of S/Z & J/L
|
||||
P.waiting=30
|
||||
P.curMission=false
|
||||
color=COLOR.black,
|
||||
env={
|
||||
noTele=true,
|
||||
das=5,arr=1,
|
||||
drop=0,lock=15,
|
||||
wait=10,fall=10,
|
||||
nextCount=2,
|
||||
sequence='his',
|
||||
task=function(P)P.modeData.target=12 end,
|
||||
dropPiece=function(P)
|
||||
local p=P.modeData.pt+P.lastPiece.row
|
||||
if p>=P.modeData.target then
|
||||
local ENV=P.gameEnv
|
||||
local T=P.modeData.target
|
||||
--Stage 1: clear 3 techrash
|
||||
if T==12 then--Stage 2: swap color of S/Z & J/L
|
||||
P.waiting=30
|
||||
P.curMission=false
|
||||
|
||||
ENV.skin[1],ENV.skin[2]=ENV.skin[2],ENV.skin[1]
|
||||
ENV.skin[3],ENV.skin[4]=ENV.skin[4],ENV.skin[3]
|
||||
ENV.skin[1],ENV.skin[2]=ENV.skin[2],ENV.skin[1]
|
||||
ENV.skin[3],ENV.skin[4]=ENV.skin[4],ENV.skin[3]
|
||||
|
||||
ENV.lock=14
|
||||
ENV.wait=7
|
||||
ENV.fall=7
|
||||
P:setNext(4)
|
||||
ENV.lock=14
|
||||
ENV.wait=7
|
||||
ENV.fall=7
|
||||
P:setNext(4)
|
||||
|
||||
P.modeData.target=26
|
||||
SFX.play('reach')
|
||||
elseif T==26 then--Stage 3: dig to bottom
|
||||
if not P.holdQueue[1]then P.life=P.life+1 end--1 up if ban hold
|
||||
P.waiting=45
|
||||
ENV.skin[1],ENV.skin[2]=ENV.skin[2],ENV.skin[1]
|
||||
ENV.skin[3],ENV.skin[4]=ENV.skin[4],ENV.skin[3]
|
||||
P.modeData.target=26
|
||||
SFX.play('reach')
|
||||
elseif T==26 then--Stage 3: dig to bottom
|
||||
if not P.holdQueue[1]then P.life=P.life+1 end--1 up if ban hold
|
||||
P.waiting=45
|
||||
ENV.skin[1],ENV.skin[2]=ENV.skin[2],ENV.skin[1]
|
||||
ENV.skin[3],ENV.skin[4]=ENV.skin[4],ENV.skin[3]
|
||||
|
||||
for i=1,10 do
|
||||
if P.field[i]then
|
||||
for j=1,10 do
|
||||
if P.field[i][j]>0 then
|
||||
P.field[i][j]=17
|
||||
P.visTime[i][j]=15
|
||||
end
|
||||
end
|
||||
for _=1,5 do
|
||||
P.field[i][P.holeRND:random(10)]=0
|
||||
end
|
||||
else
|
||||
P.field[i]=FREEROW.get(0)
|
||||
P.visTime[i]=FREEROW.get(30)
|
||||
for j=1,10 do
|
||||
if P.holeRND:random()>.9 then
|
||||
P.field[i][j]=P.holeRND:random(16)
|
||||
end
|
||||
end
|
||||
P.field[i][P.holeRND:random(10)]=0
|
||||
end
|
||||
P.field[i].garbage=true
|
||||
end
|
||||
P.garbageBeneath=10
|
||||
for i=1,10 do
|
||||
P:createClearingFX(i,1.5)
|
||||
end
|
||||
SYSFX.newShade(2.5,P.absFieldX,P.y+300*P.size,300*P.size,300*P.size)
|
||||
for i=1,10 do
|
||||
if P.field[i]then
|
||||
for j=1,10 do
|
||||
if P.field[i][j]>0 then
|
||||
P.field[i][j]=17
|
||||
P.visTime[i][j]=15
|
||||
end
|
||||
end
|
||||
for _=1,5 do
|
||||
P.field[i][P.holeRND:random(10)]=0
|
||||
end
|
||||
else
|
||||
P.field[i]=FREEROW.get(0)
|
||||
P.visTime[i]=FREEROW.get(30)
|
||||
for j=1,10 do
|
||||
if P.holeRND:random()>.9 then
|
||||
P.field[i][j]=P.holeRND:random(16)
|
||||
end
|
||||
end
|
||||
P.field[i][P.holeRND:random(10)]=0
|
||||
end
|
||||
P.field[i].garbage=true
|
||||
end
|
||||
P.garbageBeneath=10
|
||||
for i=1,10 do
|
||||
P:createClearingFX(i,1.5)
|
||||
end
|
||||
SYSFX.newShade(2.5,P.absFieldX,P.y+300*P.size,300*P.size,300*P.size)
|
||||
|
||||
ENV.lock=13
|
||||
ENV.wait=6
|
||||
ENV.fall=6
|
||||
P:setNext(5)
|
||||
ENV.lock=13
|
||||
ENV.wait=6
|
||||
ENV.fall=6
|
||||
P:setNext(5)
|
||||
|
||||
P.modeData.target=42
|
||||
SFX.play('reach')
|
||||
elseif T==42 then--Stage 4: survive in high speed
|
||||
if P.garbageBeneath==0 then
|
||||
P.waiting=30
|
||||
ENV.lock=11
|
||||
P:setNext(6)
|
||||
P:setHold(false)
|
||||
ENV.bone=true
|
||||
P.modeData.target=42
|
||||
SFX.play('reach')
|
||||
elseif T==42 then--Stage 4: survive in high speed
|
||||
if P.garbageBeneath==0 then
|
||||
P.waiting=30
|
||||
ENV.lock=11
|
||||
P:setNext(6)
|
||||
P:setHold(false)
|
||||
ENV.bone=true
|
||||
|
||||
P.modeData.target=62
|
||||
else
|
||||
p=41
|
||||
end
|
||||
elseif T==62 then--Stage 5: survive without easy-fresh rule
|
||||
P.life=P.life+1
|
||||
ENV.lock=13
|
||||
ENV.wait=5
|
||||
ENV.fall=5
|
||||
P.modeData.target=62
|
||||
else
|
||||
p=41
|
||||
end
|
||||
elseif T==62 then--Stage 5: survive without easy-fresh rule
|
||||
P.life=P.life+1
|
||||
ENV.lock=13
|
||||
ENV.wait=5
|
||||
ENV.fall=5
|
||||
|
||||
ENV.easyFresh=false
|
||||
ENV.easyFresh=false
|
||||
|
||||
P.modeData.target=126
|
||||
SFX.play('reach')
|
||||
elseif T==126 then--Stage 6: speed up
|
||||
P.life=P.life+1
|
||||
P.modeData.target=126
|
||||
SFX.play('reach')
|
||||
elseif T==126 then--Stage 6: speed up
|
||||
P.life=P.life+1
|
||||
|
||||
ENV.lock=11
|
||||
ENV.wait=4
|
||||
ENV.fall=4
|
||||
ENV.lock=11
|
||||
ENV.wait=4
|
||||
ENV.fall=4
|
||||
|
||||
P.modeData.target=162
|
||||
elseif T==162 then--Stage 7: speed up+++
|
||||
P.life=P.life+1
|
||||
P.modeData.target=162
|
||||
elseif T==162 then--Stage 7: speed up+++
|
||||
P.life=P.life+1
|
||||
|
||||
ENV.lock=10
|
||||
ENV.lock=10
|
||||
|
||||
P:setHold(true)
|
||||
P:setInvisible(180)
|
||||
P:setHold(true)
|
||||
P:setInvisible(180)
|
||||
|
||||
P.modeData.target=226
|
||||
SFX.play('reach')
|
||||
elseif T==226 then--Stage 8: final invisible
|
||||
P.life=P.life+1
|
||||
P.modeData.target=226
|
||||
SFX.play('reach')
|
||||
elseif T==226 then--Stage 8: final invisible
|
||||
P.life=P.life+1
|
||||
|
||||
ENV.bone=false
|
||||
P:setInvisible(90)
|
||||
ENV.bone=false
|
||||
P:setInvisible(90)
|
||||
|
||||
P.modeData.target=259
|
||||
SFX.play('reach')
|
||||
elseif T==259 then--Stage 9: ending
|
||||
P.life=P.life+1
|
||||
for i=1,7 do ENV.skin[i]=P.holeRND:random(16)end
|
||||
P.modeData.target=259
|
||||
SFX.play('reach')
|
||||
elseif T==259 then--Stage 9: ending
|
||||
P.life=P.life+1
|
||||
for i=1,7 do ENV.skin[i]=P.holeRND:random(16)end
|
||||
|
||||
P:setInvisible(40)
|
||||
ENV.lock=15
|
||||
P.curMission=1
|
||||
ENV.mission={4,4,4,4,4,4,4,4}
|
||||
ENV.missionKill=false
|
||||
P:setInvisible(40)
|
||||
ENV.lock=15
|
||||
P.curMission=1
|
||||
ENV.mission={4,4,4,4,4,4,4,4}
|
||||
ENV.missionKill=false
|
||||
|
||||
P.modeData.target=260
|
||||
p=260
|
||||
SFX.play('blip_2')
|
||||
else
|
||||
p=260
|
||||
end
|
||||
end
|
||||
P.modeData.pt=p
|
||||
end,
|
||||
mission={4,4,4,64},
|
||||
missionKill=true,
|
||||
freshLimit=12,
|
||||
noInitSZO=true,
|
||||
bg='blockspace',bgm='super7th',
|
||||
},
|
||||
slowMark=true,
|
||||
mesDisp=function(P)
|
||||
PLY.draw.drawProgress(P.modeData.pt,P.modeData.target)
|
||||
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 "..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,
|
||||
getRank=function(P)
|
||||
local p=P.modeData.pt
|
||||
return
|
||||
P.result=='win'and 5 or
|
||||
p>=226 and 4 or
|
||||
p>=162 and 3 or
|
||||
p>=62 and 2 or
|
||||
p>=42 and 1 or
|
||||
p>=26 and 0
|
||||
end,
|
||||
P.modeData.target=260
|
||||
p=260
|
||||
SFX.play('blip_2')
|
||||
else
|
||||
p=260
|
||||
end
|
||||
end
|
||||
P.modeData.pt=p
|
||||
end,
|
||||
mission={4,4,4,64},
|
||||
missionKill=true,
|
||||
freshLimit=12,
|
||||
noInitSZO=true,
|
||||
bg='blockspace',bgm='super7th',
|
||||
},
|
||||
slowMark=true,
|
||||
mesDisp=function(P)
|
||||
PLY.draw.drawProgress(P.modeData.pt,P.modeData.target)
|
||||
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 "..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,
|
||||
getRank=function(P)
|
||||
local p=P.modeData.pt
|
||||
return
|
||||
P.result=='win'and 5 or
|
||||
p>=226 and 4 or
|
||||
p>=162 and 3 or
|
||||
p>=62 and 2 or
|
||||
p>=42 and 1 or
|
||||
p>=26 and 0
|
||||
end,
|
||||
}
|
||||
@@ -1,88 +1,88 @@
|
||||
local death_lock={12,11,10,9,8, 7,7,7,6,6}
|
||||
local death_wait={10, 9, 8,7,6, 6,5,4,4,3}
|
||||
local death_fall={10, 9, 8,7,6, 5,5,4,3,3}
|
||||
local death_lock={12,11,10,9,8, 7,7,7,6,6}
|
||||
local death_wait={10, 9, 8,7,6, 6,5,4,4,3}
|
||||
local death_fall={10, 9, 8,7,6, 5,5,4,3,3}
|
||||
local function score(P)
|
||||
local D=P.modeData
|
||||
local D=P.modeData
|
||||
|
||||
local c=#P.clearedRow
|
||||
if c==0 and D.pt%100==99 then return end
|
||||
local s=c<3 and c+1 or c==3 and 5 or 7
|
||||
if P.combo>7 then s=s+2
|
||||
elseif P.combo>3 then s=s+1
|
||||
end
|
||||
D.pt=D.pt+s
|
||||
local c=#P.clearedRow
|
||||
if c==0 and D.pt%100==99 then return end
|
||||
local s=c<3 and c+1 or c==3 and 5 or 7
|
||||
if P.combo>7 then s=s+2
|
||||
elseif P.combo>3 then s=s+1
|
||||
end
|
||||
D.pt=D.pt+s
|
||||
|
||||
if D.pt%100==99 then
|
||||
SFX.play('blip_1')
|
||||
elseif D.pt>=D.target then--Level up!
|
||||
s=D.target/100
|
||||
local E=P.gameEnv
|
||||
SFX.play('reach')
|
||||
E.lock=death_lock[s]
|
||||
E.wait=death_wait[s]
|
||||
E.fall=death_fall[s]
|
||||
E.das=math.floor(6.9-s*.4)
|
||||
if s==1 then
|
||||
BG.set('rainbow')
|
||||
elseif s==2 then
|
||||
BG.set('rainbow2')
|
||||
elseif s==3 then
|
||||
BG.set('glow')
|
||||
elseif s==5 then
|
||||
if P.stat.frame>183*60 then
|
||||
D.pt=500
|
||||
P:win('finish')
|
||||
return
|
||||
else
|
||||
P.gameEnv.freshLimit=10
|
||||
BG.set('lightning')
|
||||
BGM.play('secret7th remix')
|
||||
end
|
||||
elseif s==10 then
|
||||
D.pt=1000
|
||||
P:win('finish')
|
||||
return
|
||||
end
|
||||
D.target=D.target+100
|
||||
P:showTextF(text.stage:gsub("$1",s),0,-120,80,'fly')
|
||||
end
|
||||
if D.pt%100==99 then
|
||||
SFX.play('blip_1')
|
||||
elseif D.pt>=D.target then--Level up!
|
||||
s=D.target/100
|
||||
local E=P.gameEnv
|
||||
SFX.play('reach')
|
||||
E.lock=death_lock[s]
|
||||
E.wait=death_wait[s]
|
||||
E.fall=death_fall[s]
|
||||
E.das=math.floor(6.9-s*.4)
|
||||
if s==1 then
|
||||
BG.set('rainbow')
|
||||
elseif s==2 then
|
||||
BG.set('rainbow2')
|
||||
elseif s==3 then
|
||||
BG.set('glow')
|
||||
elseif s==5 then
|
||||
if P.stat.frame>183*60 then
|
||||
D.pt=500
|
||||
P:win('finish')
|
||||
return
|
||||
else
|
||||
P.gameEnv.freshLimit=10
|
||||
BG.set('lightning')
|
||||
BGM.play('secret7th remix')
|
||||
end
|
||||
elseif s==10 then
|
||||
D.pt=1000
|
||||
P:win('finish')
|
||||
return
|
||||
end
|
||||
D.target=D.target+100
|
||||
P:showTextF(text.stage:gsub("$1",s),0,-120,80,'fly')
|
||||
end
|
||||
end
|
||||
|
||||
return{
|
||||
color=COLOR.red,
|
||||
env={
|
||||
noTele=true,
|
||||
das=6,arr=1,
|
||||
drop=0,
|
||||
lock=death_lock[1],
|
||||
wait=death_wait[1],
|
||||
fall=death_fall[1],
|
||||
dropPiece=score,
|
||||
task=function(P)
|
||||
P.modeData.pt=0
|
||||
P.modeData.target=100
|
||||
end,
|
||||
freshLimit=15,
|
||||
noInitSZO=true,
|
||||
bg='bg2',bgm='secret7th',
|
||||
},
|
||||
slowMark=true,
|
||||
mesDisp=function(P)
|
||||
PLY.draw.drawProgress(P.modeData.pt,P.modeData.target)
|
||||
end,
|
||||
score=function(P)return{P.modeData.pt,P.stat.time}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,
|
||||
getRank=function(P)
|
||||
local S=P.modeData.pt
|
||||
return
|
||||
S>=1000 and 5 or
|
||||
S>=800 and 4 or
|
||||
S>=500 and 3 or
|
||||
S>=300 and 2 or
|
||||
S>=100 and 1 or
|
||||
S>=50 and 0
|
||||
end,
|
||||
color=COLOR.red,
|
||||
env={
|
||||
noTele=true,
|
||||
das=6,arr=1,
|
||||
drop=0,
|
||||
lock=death_lock[1],
|
||||
wait=death_wait[1],
|
||||
fall=death_fall[1],
|
||||
dropPiece=score,
|
||||
task=function(P)
|
||||
P.modeData.pt=0
|
||||
P.modeData.target=100
|
||||
end,
|
||||
freshLimit=15,
|
||||
noInitSZO=true,
|
||||
bg='bg2',bgm='secret7th',
|
||||
},
|
||||
slowMark=true,
|
||||
mesDisp=function(P)
|
||||
PLY.draw.drawProgress(P.modeData.pt,P.modeData.target)
|
||||
end,
|
||||
score=function(P)return{P.modeData.pt,P.stat.time}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,
|
||||
getRank=function(P)
|
||||
local S=P.modeData.pt
|
||||
return
|
||||
S>=1000 and 5 or
|
||||
S>=800 and 4 or
|
||||
S>=500 and 3 or
|
||||
S>=300 and 2 or
|
||||
S>=100 and 1 or
|
||||
S>=50 and 0
|
||||
end,
|
||||
}
|
||||
@@ -1,42 +1,42 @@
|
||||
local yield=YIELD
|
||||
local function marginTask(P)
|
||||
local S=P.stat
|
||||
while true do yield()if S.frame>90*60 then P.strength=1;P:setFrameColor(1)break end end
|
||||
while true do yield()if S.frame>135*60 then P.strength=2;P:setFrameColor(2)break end end
|
||||
while true do yield()if S.frame>180*60 then P.strength=3;P:setFrameColor(3)break end end
|
||||
while true do yield()if S.frame>260*60 then P.strength=4;P:setFrameColor(4)break end end
|
||||
local S=P.stat
|
||||
while true do yield()if S.frame>90*60 then P.strength=1;P:setFrameColor(1)break end end
|
||||
while true do yield()if S.frame>135*60 then P.strength=2;P:setFrameColor(2)break end end
|
||||
while true do yield()if S.frame>180*60 then P.strength=3;P:setFrameColor(3)break end end
|
||||
while true do yield()if S.frame>260*60 then P.strength=4;P:setFrameColor(4)break end end
|
||||
end
|
||||
return{
|
||||
color=COLOR.white,
|
||||
env={
|
||||
bg={'bg1','bg2','blackhole','blockfall','blockrain','blockspace','cubes','fan','flink','glow','matrix','rainbow','rainbow2','tunnel'},
|
||||
bgm={'battle','beat5th','cruelty','distortion','echo','far','final','here','hope','memory','moonbeam','push','rectification','secret7th remix','secret7th','secret8th remix','secret8th','shift','shining terminal','storm','super7th','there','truth','vapor','waterfall'},
|
||||
},
|
||||
load=function()
|
||||
for k,v in next,NET.roomState.roomData do
|
||||
GAME.modeEnv[k]=v
|
||||
end
|
||||
GAME.modeEnv.allowMod=false
|
||||
GAME.modeEnv.task=marginTask
|
||||
color=COLOR.white,
|
||||
env={
|
||||
bg={'bg1','bg2','blackhole','blockfall','blockrain','blockspace','cubes','fan','flink','glow','matrix','rainbow','rainbow2','tunnel'},
|
||||
bgm={'battle','beat5th','cruelty','distortion','echo','far','final','here','hope','memory','moonbeam','push','rectification','secret7th remix','secret7th','secret8th remix','secret8th','shift','shining terminal','storm','super7th','there','truth','vapor','waterfall'},
|
||||
},
|
||||
load=function()
|
||||
for k,v in next,NET.roomState.roomData do
|
||||
GAME.modeEnv[k]=v
|
||||
end
|
||||
GAME.modeEnv.allowMod=false
|
||||
GAME.modeEnv.task=marginTask
|
||||
|
||||
local L=TABLE.copy(netPLY.list)
|
||||
local N=1
|
||||
for i,p in next,L do
|
||||
if p.uid==USER.uid then
|
||||
if p.connected then
|
||||
PLY.newPlayer(1)
|
||||
PLAYERS[1].sid=netPLY.getSID(USER.uid)
|
||||
N=2
|
||||
end
|
||||
table.remove(L,i)
|
||||
break
|
||||
end
|
||||
end
|
||||
for _,p in next,L do
|
||||
if p.connected then
|
||||
PLY.newRemotePlayer(N,false,p)
|
||||
N=N+1
|
||||
end
|
||||
end
|
||||
end,
|
||||
local L=TABLE.copy(netPLY.list)
|
||||
local N=1
|
||||
for i,p in next,L do
|
||||
if p.uid==USER.uid then
|
||||
if p.connected then
|
||||
PLY.newPlayer(1)
|
||||
PLAYERS[1].sid=netPLY.getSID(USER.uid)
|
||||
N=2
|
||||
end
|
||||
table.remove(L,i)
|
||||
break
|
||||
end
|
||||
end
|
||||
for _,p in next,L do
|
||||
if p.connected then
|
||||
PLY.newRemotePlayer(N,false,p)
|
||||
N=N+1
|
||||
end
|
||||
end
|
||||
end,
|
||||
}
|
||||
@@ -1,35 +1,35 @@
|
||||
return{
|
||||
color=COLOR.magenta,
|
||||
env={
|
||||
drop=60,lock=120,
|
||||
fall=10,
|
||||
dropPiece=function(P)if P.stat.row>=100 then P:win('finish')end end,
|
||||
freshLimit=15,
|
||||
ospin=false,
|
||||
bg='rgb',bgm='truth',
|
||||
},
|
||||
mesDisp=function(P)
|
||||
setFont(55)
|
||||
local r=100-P.stat.row
|
||||
if r<0 then r=0 end
|
||||
mStr(r,63,220)
|
||||
PLY.draw.drawTargetLine(P,r)
|
||||
color=COLOR.magenta,
|
||||
env={
|
||||
drop=60,lock=120,
|
||||
fall=10,
|
||||
dropPiece=function(P)if P.stat.row>=100 then P:win('finish')end end,
|
||||
freshLimit=15,
|
||||
ospin=false,
|
||||
bg='rgb',bgm='truth',
|
||||
},
|
||||
mesDisp=function(P)
|
||||
setFont(55)
|
||||
local r=100-P.stat.row
|
||||
if r<0 then r=0 end
|
||||
mStr(r,63,220)
|
||||
PLY.draw.drawTargetLine(P,r)
|
||||
|
||||
setFont(60)
|
||||
mStr(P.stat.pc,63,300)
|
||||
mText(drawableText.pc,63,370)
|
||||
end,
|
||||
score=function(P)return{P.stat.pc,P.stat.time}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,
|
||||
getRank=function(P)
|
||||
local L=P.stat.pc
|
||||
return
|
||||
L>=24 and 5 or
|
||||
L>=20 and 4 or
|
||||
L>=16 and 3 or
|
||||
L>=12 and 2 or
|
||||
L>=8 and 1 or
|
||||
L>=1 and 0
|
||||
end,
|
||||
setFont(60)
|
||||
mStr(P.stat.pc,63,300)
|
||||
mText(drawableText.pc,63,370)
|
||||
end,
|
||||
score=function(P)return{P.stat.pc,P.stat.time}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,
|
||||
getRank=function(P)
|
||||
local L=P.stat.pc
|
||||
return
|
||||
L>=24 and 5 or
|
||||
L>=20 and 4 or
|
||||
L>=16 and 3 or
|
||||
L>=12 and 2 or
|
||||
L>=8 and 1 or
|
||||
L>=1 and 0
|
||||
end,
|
||||
}
|
||||
@@ -1,42 +1,42 @@
|
||||
return{
|
||||
color=COLOR.red,
|
||||
env={
|
||||
drop=20,lock=60,
|
||||
fall=10,
|
||||
dropPiece=function(P)
|
||||
if P.lastPiece.pc then
|
||||
P.gameEnv.heightLimit=4
|
||||
if P.stat.pc%5==0 then
|
||||
P.gameEnv.drop=math.max(P.gameEnv.drop-1,1)
|
||||
end
|
||||
else
|
||||
P.gameEnv.heightLimit=P.gameEnv.heightLimit-P.lastPiece.row
|
||||
end
|
||||
if #P.field>P.gameEnv.heightLimit then
|
||||
P:lose()
|
||||
end
|
||||
end,
|
||||
freshLimit=8,
|
||||
heightLimit=4,
|
||||
ospin=false,
|
||||
bg='rgb',bgm='moonbeam',
|
||||
},
|
||||
mesDisp=function(P)
|
||||
setFont(60)
|
||||
mStr(P.stat.pc,63,300)
|
||||
mText(drawableText.pc,63,370)
|
||||
end,
|
||||
score=function(P)return{P.stat.pc,P.stat.time}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,
|
||||
getRank=function(P)
|
||||
local L=P.stat.pc
|
||||
return
|
||||
L>=50 and 5 or
|
||||
L>=40 and 4 or
|
||||
L>=30 and 3 or
|
||||
L>=20 and 2 or
|
||||
L>=10 and 1 or
|
||||
L>=5 and 0
|
||||
end,
|
||||
color=COLOR.red,
|
||||
env={
|
||||
drop=20,lock=60,
|
||||
fall=10,
|
||||
dropPiece=function(P)
|
||||
if P.lastPiece.pc then
|
||||
P.gameEnv.heightLimit=4
|
||||
if P.stat.pc%5==0 then
|
||||
P.gameEnv.drop=math.max(P.gameEnv.drop-1,1)
|
||||
end
|
||||
else
|
||||
P.gameEnv.heightLimit=P.gameEnv.heightLimit-P.lastPiece.row
|
||||
end
|
||||
if #P.field>P.gameEnv.heightLimit then
|
||||
P:lose()
|
||||
end
|
||||
end,
|
||||
freshLimit=8,
|
||||
heightLimit=4,
|
||||
ospin=false,
|
||||
bg='rgb',bgm='moonbeam',
|
||||
},
|
||||
mesDisp=function(P)
|
||||
setFont(60)
|
||||
mStr(P.stat.pc,63,300)
|
||||
mText(drawableText.pc,63,370)
|
||||
end,
|
||||
score=function(P)return{P.stat.pc,P.stat.time}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,
|
||||
getRank=function(P)
|
||||
local L=P.stat.pc
|
||||
return
|
||||
L>=50 and 5 or
|
||||
L>=40 and 4 or
|
||||
L>=30 and 3 or
|
||||
L>=20 and 2 or
|
||||
L>=10 and 1 or
|
||||
L>=5 and 0
|
||||
end,
|
||||
}
|
||||
@@ -1,35 +1,35 @@
|
||||
return{
|
||||
color=COLOR.red,
|
||||
env={
|
||||
drop=20,lock=60,
|
||||
fall=20,
|
||||
dropPiece=function(P)if P.stat.row>=100 then P:win('finish')end end,
|
||||
freshLimit=15,
|
||||
ospin=false,
|
||||
bg='rgb',bgm='moonbeam',
|
||||
},
|
||||
mesDisp=function(P)
|
||||
setFont(55)
|
||||
local r=100-P.stat.row
|
||||
if r<0 then r=0 end
|
||||
mStr(r,63,220)
|
||||
PLY.draw.drawTargetLine(P,r)
|
||||
color=COLOR.red,
|
||||
env={
|
||||
drop=20,lock=60,
|
||||
fall=20,
|
||||
dropPiece=function(P)if P.stat.row>=100 then P:win('finish')end end,
|
||||
freshLimit=15,
|
||||
ospin=false,
|
||||
bg='rgb',bgm='moonbeam',
|
||||
},
|
||||
mesDisp=function(P)
|
||||
setFont(55)
|
||||
local r=100-P.stat.row
|
||||
if r<0 then r=0 end
|
||||
mStr(r,63,220)
|
||||
PLY.draw.drawTargetLine(P,r)
|
||||
|
||||
setFont(60)
|
||||
mStr(P.stat.pc,63,300)
|
||||
mText(drawableText.pc,63,370)
|
||||
end,
|
||||
score=function(P)return{P.stat.pc,P.stat.time}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,
|
||||
getRank=function(P)
|
||||
local L=P.stat.pc
|
||||
return
|
||||
L>=24 and 5 or
|
||||
L>=20 and 4 or
|
||||
L>=16 and 3 or
|
||||
L>=12 and 2 or
|
||||
L>=8 and 1 or
|
||||
L>=1 and 0
|
||||
end,
|
||||
setFont(60)
|
||||
mStr(P.stat.pc,63,300)
|
||||
mText(drawableText.pc,63,370)
|
||||
end,
|
||||
score=function(P)return{P.stat.pc,P.stat.time}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,
|
||||
getRank=function(P)
|
||||
local L=P.stat.pc
|
||||
return
|
||||
L>=24 and 5 or
|
||||
L>=20 and 4 or
|
||||
L>=16 and 3 or
|
||||
L>=12 and 2 or
|
||||
L>=8 and 1 or
|
||||
L>=1 and 0
|
||||
end,
|
||||
}
|
||||
@@ -1,33 +1,33 @@
|
||||
return{
|
||||
color=COLOR.green,
|
||||
env={
|
||||
infHold=true,
|
||||
drop=150,lock=1e99,
|
||||
dropPiece=function(P)if P.stat.row>=100 then P:win('finish')end end,
|
||||
bg='rgb',bgm='truth',
|
||||
},
|
||||
mesDisp=function(P)
|
||||
setFont(55)
|
||||
local r=100-P.stat.row
|
||||
if r<0 then r=0 end
|
||||
mStr(r,63,220)
|
||||
PLY.draw.drawTargetLine(P,r)
|
||||
color=COLOR.green,
|
||||
env={
|
||||
infHold=true,
|
||||
drop=150,lock=1e99,
|
||||
dropPiece=function(P)if P.stat.row>=100 then P:win('finish')end end,
|
||||
bg='rgb',bgm='truth',
|
||||
},
|
||||
mesDisp=function(P)
|
||||
setFont(55)
|
||||
local r=100-P.stat.row
|
||||
if r<0 then r=0 end
|
||||
mStr(r,63,220)
|
||||
PLY.draw.drawTargetLine(P,r)
|
||||
|
||||
setFont(60)
|
||||
mStr(P.stat.pc,63,300)
|
||||
mText(drawableText.pc,63,370)
|
||||
end,
|
||||
score=function(P)return{P.stat.pc,P.stat.time}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,
|
||||
getRank=function(P)
|
||||
local L=P.stat.pc
|
||||
return
|
||||
L>=24 and 5 or
|
||||
L>=20 and 4 or
|
||||
L>=16 and 3 or
|
||||
L>=12 and 2 or
|
||||
L>=8 and 1 or
|
||||
L>=1 and 0
|
||||
end,
|
||||
setFont(60)
|
||||
mStr(P.stat.pc,63,300)
|
||||
mText(drawableText.pc,63,370)
|
||||
end,
|
||||
score=function(P)return{P.stat.pc,P.stat.time}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,
|
||||
getRank=function(P)
|
||||
local L=P.stat.pc
|
||||
return
|
||||
L>=24 and 5 or
|
||||
L>=20 and 4 or
|
||||
L>=16 and 3 or
|
||||
L>=12 and 2 or
|
||||
L>=8 and 1 or
|
||||
L>=1 and 0
|
||||
end,
|
||||
}
|
||||
@@ -5,73 +5,73 @@ local PCbase=require"parts.modes.PCbase"
|
||||
local PClist=require"parts.modes.PClist"
|
||||
|
||||
local function task_PC(P)
|
||||
P.control=false
|
||||
for _=1,26 do YIELD()end
|
||||
P.control=true
|
||||
local base=PCbase[P.modeData.type]
|
||||
P:pushLineList(base[P.holeRND:random(#base)],P.modeData.symmetry)
|
||||
P.control=false
|
||||
for _=1,26 do YIELD()end
|
||||
P.control=true
|
||||
local base=PCbase[P.modeData.type]
|
||||
P:pushLineList(base[P.holeRND:random(#base)],P.modeData.symmetry)
|
||||
end
|
||||
local function check(P)
|
||||
local f=P.field
|
||||
if #f>0 then
|
||||
if #f+P.stat.row%4>4 then
|
||||
P:lose()
|
||||
end
|
||||
else
|
||||
local type=P.stat.pc<10 and 4 or 5
|
||||
local L=PClist[type][P.holeRND:random(#PClist[type])]
|
||||
local symmetry=P.holeRND:random()>.5
|
||||
P.modeData.type=type
|
||||
P.modeData.symmetry=symmetry
|
||||
P:pushNextList(L,symmetry)
|
||||
P.modeData.counter=P.stat.piece==0 and 20 or 0
|
||||
P:newTask(task_PC)
|
||||
local f=P.field
|
||||
if #f>0 then
|
||||
if #f+P.stat.row%4>4 then
|
||||
P:lose()
|
||||
end
|
||||
else
|
||||
local type=P.stat.pc<10 and 4 or 5
|
||||
local L=PClist[type][P.holeRND:random(#PClist[type])]
|
||||
local symmetry=P.holeRND:random()>.5
|
||||
P.modeData.type=type
|
||||
P.modeData.symmetry=symmetry
|
||||
P:pushNextList(L,symmetry)
|
||||
P.modeData.counter=P.stat.piece==0 and 20 or 0
|
||||
P:newTask(task_PC)
|
||||
|
||||
local s=P.stat.pc*.25
|
||||
if math.floor(s)==s and s>0 then
|
||||
P.gameEnv.drop=pc_drop[s]or 10
|
||||
P.gameEnv.lock=pc_lock[s]or 25
|
||||
P.gameEnv.fall=pc_fall[s]or 4
|
||||
if s==10 then
|
||||
P:showTextF(text.maxspeed,0,-140,100,'appear',.6)
|
||||
end
|
||||
end
|
||||
end
|
||||
local s=P.stat.pc*.25
|
||||
if math.floor(s)==s and s>0 then
|
||||
P.gameEnv.drop=pc_drop[s]or 10
|
||||
P.gameEnv.lock=pc_lock[s]or 25
|
||||
P.gameEnv.fall=pc_fall[s]or 4
|
||||
if s==10 then
|
||||
P:showTextF(text.maxspeed,0,-140,100,'appear',.6)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
return{
|
||||
color=COLOR.red,
|
||||
env={
|
||||
nextCount=5,
|
||||
holdCount=0,
|
||||
drop=60,lock=60,
|
||||
fall=20,
|
||||
sequence='none',
|
||||
freshLimit=15,
|
||||
dropPiece=check,
|
||||
RS="SRS",
|
||||
bg='rgb',bgm='oxygen',
|
||||
},
|
||||
load=function()
|
||||
PLY.newPlayer(1)
|
||||
check(PLAYERS[1])
|
||||
end,
|
||||
mesDisp=function(P)
|
||||
setFont(60)
|
||||
mStr(P.stat.pc,63,300)
|
||||
mText(drawableText.pc,63,370)
|
||||
end,
|
||||
score=function(P)return{P.stat.pc,P.stat.time}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,
|
||||
getRank=function(P)
|
||||
local L=P.stat.pc
|
||||
return
|
||||
L>=50 and 5 or
|
||||
L>=42 and 4 or
|
||||
L>=26 and 3 or
|
||||
L>=18 and 2 or
|
||||
L>=10 and 1 or
|
||||
L>=3 and 0
|
||||
end,
|
||||
color=COLOR.red,
|
||||
env={
|
||||
nextCount=5,
|
||||
holdCount=0,
|
||||
drop=60,lock=60,
|
||||
fall=20,
|
||||
sequence='none',
|
||||
freshLimit=15,
|
||||
dropPiece=check,
|
||||
RS="SRS",
|
||||
bg='rgb',bgm='oxygen',
|
||||
},
|
||||
load=function()
|
||||
PLY.newPlayer(1)
|
||||
check(PLAYERS[1])
|
||||
end,
|
||||
mesDisp=function(P)
|
||||
setFont(60)
|
||||
mStr(P.stat.pc,63,300)
|
||||
mText(drawableText.pc,63,370)
|
||||
end,
|
||||
score=function(P)return{P.stat.pc,P.stat.time}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,
|
||||
getRank=function(P)
|
||||
local L=P.stat.pc
|
||||
return
|
||||
L>=50 and 5 or
|
||||
L>=42 and 4 or
|
||||
L>=26 and 3 or
|
||||
L>=18 and 2 or
|
||||
L>=10 and 1 or
|
||||
L>=3 and 0
|
||||
end,
|
||||
}
|
||||
@@ -1,68 +1,68 @@
|
||||
local PCbase=require"parts.modes.PCbase"
|
||||
local PClist=require"parts.modes.PClist"
|
||||
local PCtype={
|
||||
1,1,1,1,2,
|
||||
1,1,1,1,3,
|
||||
1,1,1,2,
|
||||
1,2,1,3,
|
||||
1,2,3,
|
||||
1,1,1,1,2,
|
||||
1,1,1,1,3,
|
||||
1,1,1,2,
|
||||
1,2,1,3,
|
||||
1,2,3,
|
||||
}
|
||||
local function task_PC(P)
|
||||
P.control=false
|
||||
for _=1,26 do YIELD()end
|
||||
P.control=true
|
||||
local base=PCbase[P.modeData.type]
|
||||
P:pushLineList(base[P.holeRND:random(#base)],P.modeData.symmetry)
|
||||
P.control=false
|
||||
for _=1,26 do YIELD()end
|
||||
P.control=true
|
||||
local base=PCbase[P.modeData.type]
|
||||
P:pushLineList(base[P.holeRND:random(#base)],P.modeData.symmetry)
|
||||
end
|
||||
local function check(P)
|
||||
local r=P.field
|
||||
if #r>0 then
|
||||
if #r+P.stat.row%4>4 then
|
||||
P:lose()
|
||||
end
|
||||
else
|
||||
local type=PCtype[P.stat.pc+1]or 3
|
||||
local L=PClist[type][P.holeRND:random(#PClist[type])]
|
||||
local symmetry=P.holeRND:random()>.5
|
||||
P.modeData.type=type
|
||||
P.modeData.symmetry=symmetry
|
||||
P:pushNextList(L,symmetry)
|
||||
P.modeData.counter=P.stat.piece==0 and 20 or 0
|
||||
P:newTask(task_PC)
|
||||
end
|
||||
local r=P.field
|
||||
if #r>0 then
|
||||
if #r+P.stat.row%4>4 then
|
||||
P:lose()
|
||||
end
|
||||
else
|
||||
local type=PCtype[P.stat.pc+1]or 3
|
||||
local L=PClist[type][P.holeRND:random(#PClist[type])]
|
||||
local symmetry=P.holeRND:random()>.5
|
||||
P.modeData.type=type
|
||||
P.modeData.symmetry=symmetry
|
||||
P:pushNextList(L,symmetry)
|
||||
P.modeData.counter=P.stat.piece==0 and 20 or 0
|
||||
P:newTask(task_PC)
|
||||
end
|
||||
end
|
||||
return{
|
||||
color=COLOR.green,
|
||||
env={
|
||||
nextCount=4,
|
||||
holdCount=0,
|
||||
drop=120,lock=180,
|
||||
fall=20,
|
||||
sequence='none',
|
||||
dropPiece=check,
|
||||
RS="SRS",
|
||||
bg='rgb',bgm='oxygen',
|
||||
},
|
||||
load=function()
|
||||
PLY.newPlayer(1)
|
||||
check(PLAYERS[1])
|
||||
end,
|
||||
mesDisp=function(P)
|
||||
setFont(60)
|
||||
mStr(P.stat.pc,63,300)
|
||||
mText(drawableText.pc,63,370)
|
||||
end,
|
||||
score=function(P)return{P.stat.pc,P.stat.time}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,
|
||||
getRank=function(P)
|
||||
local L=P.stat.pc
|
||||
return
|
||||
L>=62 and 5 or
|
||||
L>=42 and 4 or
|
||||
L>=26 and 3 or
|
||||
L>=18 and 2 or
|
||||
L>=10 and 1 or
|
||||
L>=2 and 0
|
||||
end,
|
||||
color=COLOR.green,
|
||||
env={
|
||||
nextCount=4,
|
||||
holdCount=0,
|
||||
drop=120,lock=180,
|
||||
fall=20,
|
||||
sequence='none',
|
||||
dropPiece=check,
|
||||
RS="SRS",
|
||||
bg='rgb',bgm='oxygen',
|
||||
},
|
||||
load=function()
|
||||
PLY.newPlayer(1)
|
||||
check(PLAYERS[1])
|
||||
end,
|
||||
mesDisp=function(P)
|
||||
setFont(60)
|
||||
mStr(P.stat.pc,63,300)
|
||||
mText(drawableText.pc,63,370)
|
||||
end,
|
||||
score=function(P)return{P.stat.pc,P.stat.time}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,
|
||||
getRank=function(P)
|
||||
local L=P.stat.pc
|
||||
return
|
||||
L>=62 and 5 or
|
||||
L>=42 and 4 or
|
||||
L>=26 and 3 or
|
||||
L>=18 and 2 or
|
||||
L>=10 and 1 or
|
||||
L>=2 and 0
|
||||
end,
|
||||
}
|
||||
@@ -2,73 +2,73 @@ local gc=love.graphics
|
||||
local dropSpeed={[0]=40,33,27,20,16,12,11,10,9,8,7,6,5,4,3,3,2,2,1,1}
|
||||
|
||||
return{
|
||||
color=COLOR.green,
|
||||
env={
|
||||
noTele=true,
|
||||
lock=1e99,
|
||||
wait=20,fall=90,
|
||||
mindas=7,minarr=1,minsdarr=1,
|
||||
keyCancel={6},
|
||||
dropPiece=function(P)
|
||||
if P.stat.row>=P.modeData.target then
|
||||
if P.modeData.target==200 then
|
||||
P:win('finish')
|
||||
else
|
||||
P.modeData.bpm=40+2*P.modeData.target/10
|
||||
P.modeData.beatFrame=math.floor(3600/P.modeData.bpm)
|
||||
P.gameEnv.fall=P.modeData.beatFrame
|
||||
P.gameEnv.wait=math.max(P.gameEnv.wait-2,0)
|
||||
P.gameEnv.drop=dropSpeed[P.modeData.target/10]
|
||||
P.modeData.target=P.modeData.target+10
|
||||
SFX.play('reach')
|
||||
end
|
||||
end
|
||||
end,
|
||||
task=function(P)
|
||||
P.modeData.target=10
|
||||
P.modeData.bpm=40
|
||||
P.modeData.beatFrame=90
|
||||
P.modeData.counter=90
|
||||
while true do
|
||||
YIELD()
|
||||
P.modeData.counter=P.modeData.counter-1
|
||||
if P.modeData.counter==0 then
|
||||
P.modeData.counter=P.modeData.beatFrame
|
||||
SFX.play('click',.3)
|
||||
P:switchKey(6,true)
|
||||
P:pressKey(6)
|
||||
P:switchKey(6,false)
|
||||
end
|
||||
end
|
||||
end,
|
||||
bg='bg2',bgm='push',
|
||||
},
|
||||
slowMark=true,
|
||||
mesDisp=function(P)
|
||||
PLY.draw.drawProgress(P.stat.row,P.modeData.target)
|
||||
color=COLOR.green,
|
||||
env={
|
||||
noTele=true,
|
||||
lock=1e99,
|
||||
wait=20,fall=90,
|
||||
mindas=7,minarr=1,minsdarr=1,
|
||||
keyCancel={6},
|
||||
dropPiece=function(P)
|
||||
if P.stat.row>=P.modeData.target then
|
||||
if P.modeData.target==200 then
|
||||
P:win('finish')
|
||||
else
|
||||
P.modeData.bpm=40+2*P.modeData.target/10
|
||||
P.modeData.beatFrame=math.floor(3600/P.modeData.bpm)
|
||||
P.gameEnv.fall=P.modeData.beatFrame
|
||||
P.gameEnv.wait=math.max(P.gameEnv.wait-2,0)
|
||||
P.gameEnv.drop=dropSpeed[P.modeData.target/10]
|
||||
P.modeData.target=P.modeData.target+10
|
||||
SFX.play('reach')
|
||||
end
|
||||
end
|
||||
end,
|
||||
task=function(P)
|
||||
P.modeData.target=10
|
||||
P.modeData.bpm=40
|
||||
P.modeData.beatFrame=90
|
||||
P.modeData.counter=90
|
||||
while true do
|
||||
YIELD()
|
||||
P.modeData.counter=P.modeData.counter-1
|
||||
if P.modeData.counter==0 then
|
||||
P.modeData.counter=P.modeData.beatFrame
|
||||
SFX.play('click',.3)
|
||||
P:switchKey(6,true)
|
||||
P:pressKey(6)
|
||||
P:switchKey(6,false)
|
||||
end
|
||||
end
|
||||
end,
|
||||
bg='bg2',bgm='push',
|
||||
},
|
||||
slowMark=true,
|
||||
mesDisp=function(P)
|
||||
PLY.draw.drawProgress(P.stat.row,P.modeData.target)
|
||||
|
||||
setFont(30)
|
||||
mStr(P.modeData.bpm,63,178)
|
||||
setFont(30)
|
||||
mStr(P.modeData.bpm,63,178)
|
||||
|
||||
gc.setLineWidth(4)
|
||||
gc.circle('line',63,200,30)
|
||||
gc.setLineWidth(4)
|
||||
gc.circle('line',63,200,30)
|
||||
|
||||
local beat=P.modeData.counter/P.modeData.beatFrame
|
||||
gc.setColor(1,1,1,1-beat)
|
||||
gc.setLineWidth(3)
|
||||
gc.circle('line',63,200,30+45*beat)
|
||||
end,
|
||||
score=function(P)return{math.min(P.stat.row,200),P.stat.time}end,
|
||||
scoreDisp=function(D)return D[1].." Lines "..STRING.time(D[2])end,
|
||||
comp=function(a,b)return a[1]>b[1]or a[1]==b[1]and a[2]<b[2]end,
|
||||
getRank=function(P)
|
||||
local L=P.stat.row
|
||||
return
|
||||
L>=200 and 5 or
|
||||
L>=170 and 4 or
|
||||
L>=140 and 3 or
|
||||
L>=100 and 2 or
|
||||
L>=50 and 1 or
|
||||
L>=20 and 0
|
||||
end,
|
||||
local beat=P.modeData.counter/P.modeData.beatFrame
|
||||
gc.setColor(1,1,1,1-beat)
|
||||
gc.setLineWidth(3)
|
||||
gc.circle('line',63,200,30+45*beat)
|
||||
end,
|
||||
score=function(P)return{math.min(P.stat.row,200),P.stat.time}end,
|
||||
scoreDisp=function(D)return D[1].." Lines "..STRING.time(D[2])end,
|
||||
comp=function(a,b)return a[1]>b[1]or a[1]==b[1]and a[2]<b[2]end,
|
||||
getRank=function(P)
|
||||
local L=P.stat.row
|
||||
return
|
||||
L>=200 and 5 or
|
||||
L>=170 and 4 or
|
||||
L>=140 and 3 or
|
||||
L>=100 and 2 or
|
||||
L>=50 and 1 or
|
||||
L>=20 and 0
|
||||
end,
|
||||
}
|
||||
@@ -2,73 +2,73 @@ local gc=love.graphics
|
||||
local dropSpeed={[0]=60,50,40,30,24,18,14,10,8,6,5,4,3,2,1,1,.5,.5,.25,.25}
|
||||
|
||||
return{
|
||||
color=COLOR.magenta,
|
||||
env={
|
||||
noTele=true,
|
||||
lock=1e99,
|
||||
wait=10,fall=60,
|
||||
mindas=7,minarr=1,minsdarr=1,
|
||||
keyCancel={6},
|
||||
dropPiece=function(P)
|
||||
if P.stat.row>=P.modeData.target then
|
||||
if P.modeData.target==200 then
|
||||
P:win('finish')
|
||||
else
|
||||
P.modeData.bpm=60+3*P.modeData.target/10
|
||||
P.modeData.beatFrame=math.floor(3600/P.modeData.bpm)
|
||||
P.gameEnv.fall=P.modeData.beatFrame
|
||||
P.gameEnv.wait=math.max(P.gameEnv.wait-1,0)
|
||||
P.gameEnv.drop=dropSpeed[P.modeData.target/10]
|
||||
P.modeData.target=P.modeData.target+10
|
||||
SFX.play('reach')
|
||||
end
|
||||
end
|
||||
end,
|
||||
task=function(P)
|
||||
P.modeData.target=10
|
||||
P.modeData.bpm=60
|
||||
P.modeData.beatFrame=60
|
||||
P.modeData.counter=60
|
||||
while true do
|
||||
YIELD()
|
||||
P.modeData.counter=P.modeData.counter-1
|
||||
if P.modeData.counter==0 then
|
||||
P.modeData.counter=P.modeData.beatFrame
|
||||
SFX.play('click',.3)
|
||||
P:switchKey(6,true)
|
||||
P:pressKey(6)
|
||||
P:switchKey(6,false)
|
||||
end
|
||||
end
|
||||
end,
|
||||
bg='bg2',bgm='secret8th',
|
||||
},
|
||||
slowMark=true,
|
||||
mesDisp=function(P)
|
||||
PLY.draw.drawProgress(P.stat.row,P.modeData.target)
|
||||
color=COLOR.magenta,
|
||||
env={
|
||||
noTele=true,
|
||||
lock=1e99,
|
||||
wait=10,fall=60,
|
||||
mindas=7,minarr=1,minsdarr=1,
|
||||
keyCancel={6},
|
||||
dropPiece=function(P)
|
||||
if P.stat.row>=P.modeData.target then
|
||||
if P.modeData.target==200 then
|
||||
P:win('finish')
|
||||
else
|
||||
P.modeData.bpm=60+3*P.modeData.target/10
|
||||
P.modeData.beatFrame=math.floor(3600/P.modeData.bpm)
|
||||
P.gameEnv.fall=P.modeData.beatFrame
|
||||
P.gameEnv.wait=math.max(P.gameEnv.wait-1,0)
|
||||
P.gameEnv.drop=dropSpeed[P.modeData.target/10]
|
||||
P.modeData.target=P.modeData.target+10
|
||||
SFX.play('reach')
|
||||
end
|
||||
end
|
||||
end,
|
||||
task=function(P)
|
||||
P.modeData.target=10
|
||||
P.modeData.bpm=60
|
||||
P.modeData.beatFrame=60
|
||||
P.modeData.counter=60
|
||||
while true do
|
||||
YIELD()
|
||||
P.modeData.counter=P.modeData.counter-1
|
||||
if P.modeData.counter==0 then
|
||||
P.modeData.counter=P.modeData.beatFrame
|
||||
SFX.play('click',.3)
|
||||
P:switchKey(6,true)
|
||||
P:pressKey(6)
|
||||
P:switchKey(6,false)
|
||||
end
|
||||
end
|
||||
end,
|
||||
bg='bg2',bgm='secret8th',
|
||||
},
|
||||
slowMark=true,
|
||||
mesDisp=function(P)
|
||||
PLY.draw.drawProgress(P.stat.row,P.modeData.target)
|
||||
|
||||
setFont(30)
|
||||
mStr(P.modeData.bpm,63,178)
|
||||
setFont(30)
|
||||
mStr(P.modeData.bpm,63,178)
|
||||
|
||||
gc.setLineWidth(4)
|
||||
gc.circle('line',63,200,30)
|
||||
gc.setLineWidth(4)
|
||||
gc.circle('line',63,200,30)
|
||||
|
||||
local beat=P.modeData.counter/P.modeData.beatFrame
|
||||
gc.setColor(1,1,1,1-beat)
|
||||
gc.setLineWidth(3)
|
||||
gc.circle('line',63,200,30+45*beat)
|
||||
end,
|
||||
score=function(P)return{math.min(P.stat.row,200),P.stat.time}end,
|
||||
scoreDisp=function(D)return D[1].." Lines "..STRING.time(D[2])end,
|
||||
comp=function(a,b)return a[1]>b[1]or a[1]==b[1]and a[2]<b[2]end,
|
||||
getRank=function(P)
|
||||
local L=P.stat.row
|
||||
return
|
||||
L>=200 and 5 or
|
||||
L>=170 and 4 or
|
||||
L>=140 and 3 or
|
||||
L>=100 and 2 or
|
||||
L>=50 and 1 or
|
||||
L>=20 and 0
|
||||
end,
|
||||
local beat=P.modeData.counter/P.modeData.beatFrame
|
||||
gc.setColor(1,1,1,1-beat)
|
||||
gc.setLineWidth(3)
|
||||
gc.circle('line',63,200,30+45*beat)
|
||||
end,
|
||||
score=function(P)return{math.min(P.stat.row,200),P.stat.time}end,
|
||||
scoreDisp=function(D)return D[1].." Lines "..STRING.time(D[2])end,
|
||||
comp=function(a,b)return a[1]>b[1]or a[1]==b[1]and a[2]<b[2]end,
|
||||
getRank=function(P)
|
||||
local L=P.stat.row
|
||||
return
|
||||
L>=200 and 5 or
|
||||
L>=170 and 4 or
|
||||
L>=140 and 3 or
|
||||
L>=100 and 2 or
|
||||
L>=50 and 1 or
|
||||
L>=20 and 0
|
||||
end,
|
||||
}
|
||||
@@ -1,80 +1,80 @@
|
||||
local gc=love.graphics
|
||||
|
||||
return{
|
||||
color=COLOR.magenta,
|
||||
env={
|
||||
noTele=true,
|
||||
lock=1e99,
|
||||
drop=.5,
|
||||
wait=5,fall=30,
|
||||
das=6,minarr=1,minsdarr=1,
|
||||
keyCancel={6},
|
||||
dropPiece=function(P)
|
||||
if P.stat.row>=P.modeData.target then
|
||||
if P.modeData.target==200 then
|
||||
P:win('finish')
|
||||
else
|
||||
P.modeData.bpm=120+2*P.modeData.target/10
|
||||
P.modeData.beatFrame=math.floor(3600/P.modeData.bpm)
|
||||
P.gameEnv.fall=P.modeData.beatFrame
|
||||
P.gameEnv.wait=math.max(P.gameEnv.wait-1,0)
|
||||
if P.modeData.target==50 then
|
||||
P.gameEnv.das=5
|
||||
P.gameEnv.drop=.25
|
||||
elseif P.modeData.target==100 then
|
||||
P.gameEnv.das=4
|
||||
P:set20G(true)
|
||||
end
|
||||
P.modeData.target=P.modeData.target+10
|
||||
SFX.play('reach')
|
||||
end
|
||||
end
|
||||
end,
|
||||
task=function(P)
|
||||
P.modeData.target=10
|
||||
P.modeData.bpm=120
|
||||
P.modeData.beatFrame=30
|
||||
P.modeData.counter=30
|
||||
while true do
|
||||
YIELD()
|
||||
P.modeData.counter=P.modeData.counter-1
|
||||
if P.modeData.counter==0 then
|
||||
P.modeData.counter=P.modeData.beatFrame
|
||||
SFX.play('click',.3)
|
||||
P:switchKey(6,true)
|
||||
P:pressKey(6)
|
||||
P:switchKey(6,false)
|
||||
end
|
||||
end
|
||||
end,
|
||||
bg='bg2',bgm='secret7th',
|
||||
},
|
||||
slowMark=true,
|
||||
mesDisp=function(P)
|
||||
PLY.draw.drawProgress(P.stat.row,P.modeData.target)
|
||||
color=COLOR.magenta,
|
||||
env={
|
||||
noTele=true,
|
||||
lock=1e99,
|
||||
drop=.5,
|
||||
wait=5,fall=30,
|
||||
das=6,minarr=1,minsdarr=1,
|
||||
keyCancel={6},
|
||||
dropPiece=function(P)
|
||||
if P.stat.row>=P.modeData.target then
|
||||
if P.modeData.target==200 then
|
||||
P:win('finish')
|
||||
else
|
||||
P.modeData.bpm=120+2*P.modeData.target/10
|
||||
P.modeData.beatFrame=math.floor(3600/P.modeData.bpm)
|
||||
P.gameEnv.fall=P.modeData.beatFrame
|
||||
P.gameEnv.wait=math.max(P.gameEnv.wait-1,0)
|
||||
if P.modeData.target==50 then
|
||||
P.gameEnv.das=5
|
||||
P.gameEnv.drop=.25
|
||||
elseif P.modeData.target==100 then
|
||||
P.gameEnv.das=4
|
||||
P:set20G(true)
|
||||
end
|
||||
P.modeData.target=P.modeData.target+10
|
||||
SFX.play('reach')
|
||||
end
|
||||
end
|
||||
end,
|
||||
task=function(P)
|
||||
P.modeData.target=10
|
||||
P.modeData.bpm=120
|
||||
P.modeData.beatFrame=30
|
||||
P.modeData.counter=30
|
||||
while true do
|
||||
YIELD()
|
||||
P.modeData.counter=P.modeData.counter-1
|
||||
if P.modeData.counter==0 then
|
||||
P.modeData.counter=P.modeData.beatFrame
|
||||
SFX.play('click',.3)
|
||||
P:switchKey(6,true)
|
||||
P:pressKey(6)
|
||||
P:switchKey(6,false)
|
||||
end
|
||||
end
|
||||
end,
|
||||
bg='bg2',bgm='secret7th',
|
||||
},
|
||||
slowMark=true,
|
||||
mesDisp=function(P)
|
||||
PLY.draw.drawProgress(P.stat.row,P.modeData.target)
|
||||
|
||||
setFont(30)
|
||||
mStr(P.modeData.bpm,63,178)
|
||||
setFont(30)
|
||||
mStr(P.modeData.bpm,63,178)
|
||||
|
||||
gc.setLineWidth(4)
|
||||
gc.circle('line',63,200,30)
|
||||
gc.setLineWidth(4)
|
||||
gc.circle('line',63,200,30)
|
||||
|
||||
local beat=P.modeData.counter/P.modeData.beatFrame
|
||||
gc.setColor(1,1,1,1-beat)
|
||||
gc.setLineWidth(3)
|
||||
gc.circle('line',63,200,30+45*beat)
|
||||
end,
|
||||
score=function(P)return{math.min(P.stat.row,200),P.stat.time}end,
|
||||
scoreDisp=function(D)return D[1].." Lines "..STRING.time(D[2])end,
|
||||
comp=function(a,b)return a[1]>b[1]or a[1]==b[1]and a[2]<b[2]end,
|
||||
getRank=function(P)
|
||||
local L=P.stat.row
|
||||
return
|
||||
L>=200 and 5 or
|
||||
L>=170 and 4 or
|
||||
L>=140 and 3 or
|
||||
L>=100 and 2 or
|
||||
L>=50 and 1 or
|
||||
L>=20 and 0
|
||||
end,
|
||||
local beat=P.modeData.counter/P.modeData.beatFrame
|
||||
gc.setColor(1,1,1,1-beat)
|
||||
gc.setLineWidth(3)
|
||||
gc.circle('line',63,200,30+45*beat)
|
||||
end,
|
||||
score=function(P)return{math.min(P.stat.row,200),P.stat.time}end,
|
||||
scoreDisp=function(D)return D[1].." Lines "..STRING.time(D[2])end,
|
||||
comp=function(a,b)return a[1]>b[1]or a[1]==b[1]and a[2]<b[2]end,
|
||||
getRank=function(P)
|
||||
local L=P.stat.row
|
||||
return
|
||||
L>=200 and 5 or
|
||||
L>=170 and 4 or
|
||||
L>=140 and 3 or
|
||||
L>=100 and 2 or
|
||||
L>=50 and 1 or
|
||||
L>=20 and 0
|
||||
end,
|
||||
}
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user