Compare commits
74 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
ecf037f27d | ||
|
|
cf5844a2af | ||
|
|
b2f8abb884 | ||
|
|
128ab01cf0 | ||
|
|
a62945a71d | ||
|
|
9ff8cd3aaa | ||
|
|
b1306ac220 | ||
|
|
57a89c3859 | ||
|
|
610d953803 | ||
|
|
b788f26f50 | ||
|
|
e5f489fbab | ||
|
|
4786ab59b0 | ||
|
|
8c7e2da69a | ||
|
|
f511aa2f6f | ||
|
|
46b119601b | ||
|
|
d4238da156 | ||
|
|
f9cf35f746 | ||
|
|
94519ba147 | ||
|
|
e397bdcd12 | ||
|
|
e8f0efb22c | ||
|
|
7ecadb0ff1 | ||
|
|
097129bd08 | ||
|
|
59377efa0c | ||
|
|
4040afbbd9 | ||
|
|
d362e1cb54 | ||
|
|
ff9647bd00 | ||
|
|
eb2cff0016 | ||
|
|
858f2c673b | ||
|
|
4b9cd0cd06 | ||
|
|
7e2c76bf77 | ||
|
|
4b02f3b9ee | ||
|
|
3f7a09ef71 | ||
|
|
fd580dcadc | ||
|
|
6d64590a12 | ||
|
|
e5be25b481 | ||
|
|
7f28278378 | ||
|
|
a7112094f6 | ||
|
|
37d0a106a9 | ||
|
|
731bdab8b2 | ||
|
|
eabf1242aa | ||
|
|
ef857643c8 | ||
|
|
2cf64541f2 | ||
|
|
b2ba8a84e9 | ||
|
|
78e3aa2532 | ||
|
|
84e253fd8b | ||
|
|
1c4d89c425 | ||
|
|
720e7c6c06 | ||
|
|
e8902d578a | ||
|
|
e70b6d3218 | ||
|
|
dded42aeef | ||
|
|
6cccf2604c | ||
|
|
c72dedf7cf | ||
|
|
f26888beaa | ||
|
|
ce4ba0cefd | ||
|
|
0885f3bfb3 | ||
|
|
becc092192 | ||
|
|
185862eabf | ||
|
|
19ce62997b | ||
|
|
d8c096b06b | ||
|
|
aa836c7028 | ||
|
|
e5e378fa07 | ||
|
|
230514e34a | ||
|
|
d196d73448 | ||
|
|
cb98a9094a | ||
|
|
ec036037fe | ||
|
|
882769bb71 | ||
|
|
ba43e5e6a7 | ||
|
|
09c56d74bd | ||
|
|
c78630a31e | ||
|
|
5342d4f6d6 | ||
|
|
6641d402c0 | ||
|
|
86ffc4a207 | ||
|
|
71130bbced | ||
|
|
17d670a1ba |
1
.gitignore
vendored
Normal file
1
.gitignore
vendored
Normal file
@@ -0,0 +1 @@
|
|||||||
|
lib
|
||||||
@@ -1,6 +1,7 @@
|
|||||||
local gc=love.graphics
|
local gc=love.graphics
|
||||||
local int,ceil,rnd,abs=math.floor,math.ceil,math.random,math.abs
|
local int,ceil,rnd,abs=math.floor,math.ceil,math.random,math.abs
|
||||||
local max,min,sin,cos=math.max,math.min,math.sin,math.cos
|
local max,min,sin,cos=math.max,math.min,math.sin,math.cos
|
||||||
|
local ins,rem=table.insert,table.remove
|
||||||
|
|
||||||
local BG
|
local BG
|
||||||
local scr=scr
|
local scr=scr
|
||||||
@@ -58,13 +59,158 @@ back.flink={
|
|||||||
end
|
end
|
||||||
end,
|
end,
|
||||||
}--Flash after random time
|
}--Flash after random time
|
||||||
|
|
||||||
|
local wingColor={
|
||||||
|
{0., .9, .9,.626},
|
||||||
|
{.3, 1., .3,.626},
|
||||||
|
{.9, .9, 0.,.626},
|
||||||
|
{1., .5, 0.,.626},
|
||||||
|
{1., .3, .3,.626},
|
||||||
|
{.5, 0., 1.,.626},
|
||||||
|
{.3, .3, 1.,.626},
|
||||||
|
{0., .9, .9,.626},
|
||||||
|
}
|
||||||
|
back.wing={
|
||||||
|
init=function()
|
||||||
|
gc.setDefaultFilter("linear","linear")
|
||||||
|
bar=gc.newCanvas(41,1)
|
||||||
|
gc.push("transform")
|
||||||
|
gc.origin()
|
||||||
|
gc.setCanvas(bar)
|
||||||
|
for x=0,20 do
|
||||||
|
gc.setColor(1,1,1,x/11)
|
||||||
|
gc.rectangle("fill",x,0,1,1)
|
||||||
|
gc.rectangle("fill",41-x,0,1,1)
|
||||||
|
end
|
||||||
|
gc.setCanvas()
|
||||||
|
gc.pop()
|
||||||
|
BG.resize()
|
||||||
|
end,
|
||||||
|
resize=function()
|
||||||
|
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,
|
||||||
|
update=function()
|
||||||
|
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,
|
||||||
|
draw=function()
|
||||||
|
gc.clear(.06,.06,.06)
|
||||||
|
local sy=H*.8
|
||||||
|
for i=1,8 do
|
||||||
|
gc.setColor(wingColor[i])
|
||||||
|
local B=crystal[i]
|
||||||
|
gc.draw(bar,B.x,B.y,B.a,1,sy,20,0)
|
||||||
|
B=crystal[17-i]
|
||||||
|
gc.draw(bar,B.x,B.y,B.a,1,sy,20,0)
|
||||||
|
end
|
||||||
|
end,
|
||||||
|
event=function(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
|
||||||
|
end,
|
||||||
|
discard=function()
|
||||||
|
bar,crystal=nil
|
||||||
|
end,
|
||||||
|
}--Flandre's wing
|
||||||
|
|
||||||
|
local _
|
||||||
|
back.fan={
|
||||||
|
init=function()
|
||||||
|
fan=_G.title_fan
|
||||||
|
t=0
|
||||||
|
petal={}
|
||||||
|
BG.resize()
|
||||||
|
end,
|
||||||
|
resize=function()
|
||||||
|
CX,CY=scr.w/2,scr.h/2
|
||||||
|
W,H=scr.w,scr.h
|
||||||
|
end,
|
||||||
|
update=function()
|
||||||
|
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>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,
|
||||||
|
draw=function()
|
||||||
|
gc.push("transform")
|
||||||
|
gc.translate(CX,CY+20*sin(t*.02))
|
||||||
|
gc.scale(scr.k)
|
||||||
|
gc.clear(.1,.1,.1)
|
||||||
|
gc.setLineWidth(320)
|
||||||
|
gc.setColor(.3,.2,.3)
|
||||||
|
gc.arc("line","open",0,420,500,-.8*3.1416,-.2*3.1416)
|
||||||
|
|
||||||
|
gc.setLineWidth(4)
|
||||||
|
gc.setColor(.7,.5,.65)
|
||||||
|
gc.arc("line","open",0,420,660,-.799*3.1416,-.201*3.1416)
|
||||||
|
gc.arc("line","open",0,420,340,-.808*3.1416,-.192*3.1416)
|
||||||
|
gc.line(-281,224,-530,30.5)
|
||||||
|
gc.line(281,224,530,30.5)
|
||||||
|
|
||||||
|
gc.setLineWidth(6)
|
||||||
|
gc.setColor(.55,.5,.6)
|
||||||
|
local F=fan
|
||||||
|
for i=1,8 do
|
||||||
|
gc.polygon("line",F[i])
|
||||||
|
end
|
||||||
|
|
||||||
|
gc.setLineWidth(2)
|
||||||
|
gc.setColor(.6,.3,.5)
|
||||||
|
gc.origin()
|
||||||
|
for i=1,#petal do
|
||||||
|
local P=petal[i]
|
||||||
|
gc.ellipse("fill",P.x,P.y,P.rx,P.ry)
|
||||||
|
end
|
||||||
|
gc.pop()
|
||||||
|
end,
|
||||||
|
discard=function()
|
||||||
|
petal=nil
|
||||||
|
end,
|
||||||
|
}
|
||||||
|
|
||||||
back.aura={
|
back.aura={
|
||||||
init=function()
|
init=function()
|
||||||
t=rnd()*3600
|
t=rnd()*3600
|
||||||
BG.resize(scr.w,scr.h)
|
BG.resize(scr.w,scr.h)
|
||||||
end,
|
end,
|
||||||
resize=function(w,h)
|
resize=function(w,h)
|
||||||
SHADER.aura:send("w",w*scr.dpi)
|
SHADER.aura:send("w",scr.W)
|
||||||
SHADER.aura:send("h",h*scr.dpi)
|
SHADER.aura:send("h",h*scr.dpi)
|
||||||
end,
|
end,
|
||||||
update=function(dt)
|
update=function(dt)
|
||||||
@@ -77,13 +223,13 @@ back.aura={
|
|||||||
gc.setShader()
|
gc.setShader()
|
||||||
end,
|
end,
|
||||||
}--Cool liquid background
|
}--Cool liquid background
|
||||||
back.game1={
|
back.bg1={
|
||||||
init=function()
|
init=function()
|
||||||
t=0
|
t=0
|
||||||
BG.resize(scr.w)
|
BG.resize(scr.w)
|
||||||
end,
|
end,
|
||||||
resize=function(w)
|
resize=function(w)
|
||||||
SHADER.gradient1:send("w",w*scr.dpi)
|
SHADER.gradient1:send("w",scr.W)
|
||||||
end,
|
end,
|
||||||
update=function(dt)
|
update=function(dt)
|
||||||
t=t+dt
|
t=t+dt
|
||||||
@@ -95,7 +241,7 @@ back.game1={
|
|||||||
gc.setShader()
|
gc.setShader()
|
||||||
end,
|
end,
|
||||||
}--Horizonal red-blue gradient
|
}--Horizonal red-blue gradient
|
||||||
back.game2={
|
back.bg2={
|
||||||
init=function()
|
init=function()
|
||||||
t=0
|
t=0
|
||||||
BG.resize(nil,scr.h)
|
BG.resize(nil,scr.h)
|
||||||
@@ -113,13 +259,13 @@ back.game2={
|
|||||||
gc.setShader()
|
gc.setShader()
|
||||||
end,
|
end,
|
||||||
}--Vertical red-green gradient
|
}--Vertical red-green gradient
|
||||||
back.game3={
|
back.rainbow={
|
||||||
init=function()
|
init=function()
|
||||||
t=0
|
t=0
|
||||||
BG.resize(scr.w,scr.h)
|
BG.resize(scr.w,scr.h)
|
||||||
end,
|
end,
|
||||||
resize=function(w,h)
|
resize=function(w,h)
|
||||||
SHADER.rgb1:send("w",w*scr.dpi)
|
SHADER.rgb1:send("w",scr.W)
|
||||||
SHADER.rgb1:send("h",h*scr.dpi)
|
SHADER.rgb1:send("h",h*scr.dpi)
|
||||||
end,
|
end,
|
||||||
update=function(dt)
|
update=function(dt)
|
||||||
@@ -132,13 +278,13 @@ back.game3={
|
|||||||
gc.setShader()
|
gc.setShader()
|
||||||
end,
|
end,
|
||||||
}--Colorful RGB
|
}--Colorful RGB
|
||||||
back.game4={
|
back.rainbow2={
|
||||||
init=function()
|
init=function()
|
||||||
t=0
|
t=0
|
||||||
BG.resize(scr.w,scr.h)
|
BG.resize(scr.w,scr.h)
|
||||||
end,
|
end,
|
||||||
resize=function(w,h)
|
resize=function(w,h)
|
||||||
SHADER.rgb2:send("w",w*scr.dpi)
|
SHADER.rgb2:send("w",scr.W)
|
||||||
SHADER.rgb2:send("h",h*scr.dpi)
|
SHADER.rgb2:send("h",h*scr.dpi)
|
||||||
end,
|
end,
|
||||||
update=function(dt)
|
update=function(dt)
|
||||||
@@ -151,7 +297,7 @@ back.game4={
|
|||||||
gc.setShader()
|
gc.setShader()
|
||||||
end,
|
end,
|
||||||
}--Blue RGB
|
}--Blue RGB
|
||||||
back.game5={
|
back.lightning={
|
||||||
init=function()
|
init=function()
|
||||||
t=0
|
t=0
|
||||||
end,
|
end,
|
||||||
@@ -168,7 +314,7 @@ back.game5={
|
|||||||
|
|
||||||
local blocks=require("parts/mino")
|
local blocks=require("parts/mino")
|
||||||
local scs=require("parts/spinCenters")
|
local scs=require("parts/spinCenters")
|
||||||
back.game6={
|
back.lightning2={
|
||||||
init=function()
|
init=function()
|
||||||
t=0
|
t=0
|
||||||
colorLib=_G.SKIN.libColor
|
colorLib=_G.SKIN.libColor
|
||||||
@@ -251,7 +397,7 @@ back.space={
|
|||||||
gc.translate(10,10)
|
gc.translate(10,10)
|
||||||
end,
|
end,
|
||||||
discard=function()
|
discard=function()
|
||||||
stars={}
|
stars=nil
|
||||||
end,
|
end,
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -260,8 +406,9 @@ for _,bg in next,back do
|
|||||||
if not bg.init then bg.init= NULL end setfenv(bg.init ,BGvars)
|
if not bg.init then bg.init= NULL end setfenv(bg.init ,BGvars)
|
||||||
if not bg.resize then bg.resize= NULL end setfenv(bg.resize ,BGvars)
|
if not bg.resize then bg.resize= NULL end setfenv(bg.resize ,BGvars)
|
||||||
if not bg.update then bg.update= NULL end setfenv(bg.update ,BGvars)
|
if not bg.update then bg.update= NULL end setfenv(bg.update ,BGvars)
|
||||||
if not bg.discard then bg.discard=NULL end setfenv(bg.discard ,BGvars)
|
|
||||||
if not bg.draw then bg.draw= NULL end setfenv(bg.draw ,BGvars)
|
if not bg.draw then bg.draw= NULL end setfenv(bg.draw ,BGvars)
|
||||||
|
if not bg.event then bg.event= NULL end setfenv(bg.event ,BGvars)
|
||||||
|
if not bg.discard then bg.discard=NULL end setfenv(bg.discard ,BGvars)
|
||||||
end
|
end
|
||||||
|
|
||||||
BG={
|
BG={
|
||||||
@@ -270,6 +417,11 @@ BG={
|
|||||||
update=NULL,
|
update=NULL,
|
||||||
draw=back.none.draw,
|
draw=back.none.draw,
|
||||||
}
|
}
|
||||||
|
function BG.send(data)
|
||||||
|
if BG.event then
|
||||||
|
BG.event(data)
|
||||||
|
end
|
||||||
|
end
|
||||||
function BG.set(bg,data)
|
function BG.set(bg,data)
|
||||||
if bg==BG.cur or not setting.bg then return end
|
if bg==BG.cur or not setting.bg then return end
|
||||||
if BG.discard then
|
if BG.discard then
|
||||||
@@ -282,8 +434,9 @@ function BG.set(bg,data)
|
|||||||
BG.init=bg.init or NULL
|
BG.init=bg.init or NULL
|
||||||
BG.resize=bg.resize or NULL
|
BG.resize=bg.resize or NULL
|
||||||
BG.update=bg.update or NULL
|
BG.update=bg.update or NULL
|
||||||
BG.discard=bg.discard or NULL
|
|
||||||
BG.draw=bg.draw or NULL
|
BG.draw=bg.draw or NULL
|
||||||
|
BG.event=bg.event or NULL
|
||||||
|
BG.discard=bg.discard or NULL
|
||||||
BG.init()
|
BG.init()
|
||||||
end
|
end
|
||||||
return BG
|
return BG
|
||||||
@@ -9,7 +9,7 @@ local color={
|
|||||||
|
|
||||||
lRed={1,.5,.5},
|
lRed={1,.5,.5},
|
||||||
lGreen={.5,1,.5},
|
lGreen={.5,1,.5},
|
||||||
lBlue={.6,.6,1},
|
lBlue={.6,.7,1},
|
||||||
lCyan={.5,1,1},
|
lCyan={.5,1,1},
|
||||||
lMagenta={1,.5,1},
|
lMagenta={1,.5,1},
|
||||||
lYellow={1,1,.5},
|
lYellow={1,1,.5},
|
||||||
@@ -32,7 +32,6 @@ local color={
|
|||||||
pink={1,0,.6},
|
pink={1,0,.6},
|
||||||
grass={.6,1,0},
|
grass={.6,1,0},
|
||||||
water={0,1,.6},
|
water={0,1,.6},
|
||||||
bronze={.7,.4,0},
|
|
||||||
white={1,1,1},
|
white={1,1,1},
|
||||||
purple={.5,0,1},
|
purple={.5,0,1},
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -170,13 +170,15 @@ function keyDown.calculator(k)
|
|||||||
end
|
end
|
||||||
S.sym="="
|
S.sym="="
|
||||||
S.reg=false
|
S.reg=false
|
||||||
if S.val==626 then
|
if S.val==600+20+6 then
|
||||||
|
S.pass=true
|
||||||
|
elseif S.val==196000+022 then
|
||||||
S.pass=true
|
S.pass=true
|
||||||
elseif S.val==196022 then
|
|
||||||
marking=nil
|
marking=nil
|
||||||
TEXT.show("\68\69\86\58\87\97\116\101\114\109\97\114\107\32\82\101\109\111\118\101\100",640,360,60,"stretch",.6)
|
TEXT.show("\68\69\86\58\87\97\116\101\114\109\97\114\107\32\82\101\109\111\118\101\100",640,360,60,"stretch",.6)
|
||||||
SFX.play("clear")
|
SFX.play("clear")
|
||||||
elseif S.val==72943816 then
|
elseif S.val==72943816 then
|
||||||
|
S.pass=true
|
||||||
for name,M in next,Modes do
|
for name,M in next,Modes do
|
||||||
if not modeRanks[name]then
|
if not modeRanks[name]then
|
||||||
modeRanks[name]=M.score and 0 or 6
|
modeRanks[name]=M.score and 0 or 6
|
||||||
@@ -185,14 +187,27 @@ function keyDown.calculator(k)
|
|||||||
FILE.saveUnlock()
|
FILE.saveUnlock()
|
||||||
TEXT.show("\68\69\86\58\85\78\76\79\67\75\65\76\76",640,360,60,"stretch",.6)
|
TEXT.show("\68\69\86\58\85\78\76\79\67\75\65\76\76",640,360,60,"stretch",.6)
|
||||||
SFX.play("clear_2")
|
SFX.play("clear_2")
|
||||||
elseif S.val==137926261379 then
|
elseif S.val==1379e8+2626e4+1379 then
|
||||||
SCN.goto("debug")
|
S.pass=true
|
||||||
|
SCN.go("debug")
|
||||||
|
elseif S.val==34494 then
|
||||||
|
error("This is an error testing message.")
|
||||||
|
elseif S.val==114 then
|
||||||
|
S.val=514
|
||||||
|
elseif S.val==114514 then
|
||||||
|
S.reg=1919810
|
||||||
|
S.val=114514
|
||||||
|
elseif S.val==123456789 then
|
||||||
|
S.reg=123456789
|
||||||
|
S.val=987654321
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
elseif k=="space"then
|
elseif k=="escape"then
|
||||||
if S.pass then
|
S.val,S.reg,S.sym=0
|
||||||
SCN.goto("load")
|
elseif k=="delete"then
|
||||||
end
|
S.val=0
|
||||||
|
elseif k=="space"and S.pass then
|
||||||
|
SCN.swapTo("intro")
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
@@ -203,6 +218,8 @@ function keyDown.load(k)
|
|||||||
elseif k=="s"then
|
elseif k=="s"then
|
||||||
marking=nil
|
marking=nil
|
||||||
sceneTemp.skip=true
|
sceneTemp.skip=true
|
||||||
|
elseif k=="escape"then
|
||||||
|
SCN.back()
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
function touchDown.load(id,x,y)
|
function touchDown.load(id,x,y)
|
||||||
@@ -215,8 +232,12 @@ function mouseDown.intro(x,y,k)
|
|||||||
if k==2 then
|
if k==2 then
|
||||||
VOC.play("bye")
|
VOC.play("bye")
|
||||||
SCN.back()
|
SCN.back()
|
||||||
|
elseif newVersionLaunch then
|
||||||
|
SCN.push("main","fade")
|
||||||
|
SCN.swapTo("history","fade")
|
||||||
|
TEXT.show(text.newVersion,640,200,30,"fly",.3)
|
||||||
else
|
else
|
||||||
SCN.goto("main")
|
SCN.go("main")
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
function touchDown.intro(id,x,y)
|
function touchDown.intro(id,x,y)
|
||||||
@@ -339,7 +360,7 @@ function keyDown.mode(key)
|
|||||||
end
|
end
|
||||||
elseif mapCam.sel=="custom_clear" or mapCam.sel=="custom_puzzle" then
|
elseif mapCam.sel=="custom_clear" or mapCam.sel=="custom_puzzle" then
|
||||||
if key=="e"then
|
if key=="e"then
|
||||||
SCN.goto("custom")
|
SCN.go("custom")
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
@@ -396,7 +417,7 @@ function keyDown.custom(key)
|
|||||||
BGM.play(customRange.bgm[customSel[sel]])
|
BGM.play(customRange.bgm[customSel[sel]])
|
||||||
end
|
end
|
||||||
elseif key=="q"then
|
elseif key=="q"then
|
||||||
SCN.goto("sequence")
|
SCN.go("sequence")
|
||||||
elseif key=="e"then
|
elseif key=="e"then
|
||||||
SCN.swapTo("draw","swipe")
|
SCN.swapTo("draw","swipe")
|
||||||
elseif #key==1 then
|
elseif #key==1 then
|
||||||
@@ -429,8 +450,20 @@ function keyDown.sequence(key)
|
|||||||
local C=s.cur+1
|
local C=s.cur+1
|
||||||
ins(preBag,C,key)
|
ins(preBag,C,key)
|
||||||
s.cur=C
|
s.cur=C
|
||||||
|
elseif key=="c"and kb.isDown("lctrl","rctrl")or key=="cC"then
|
||||||
|
if #preBag>0 then
|
||||||
|
love.system.setClipboardText("Techmino SEQ:"..copySequence())
|
||||||
|
TEXT.show(text.copySuccess,640,225,50,"appear",.5)
|
||||||
|
end
|
||||||
|
elseif key=="v"and kb.isDown("lctrl","rctrl")or key=="cV"then
|
||||||
|
local str=love.system.getClipboardText()
|
||||||
|
local p=string.find(str,":")--ptr*
|
||||||
|
if p then str=string.sub(str,p+1)end
|
||||||
|
if not pasteSequence(str)then
|
||||||
|
TEXT.show(text.dataCorrupted,640,225,45,"flicker",.5)
|
||||||
|
end
|
||||||
elseif #key==1 then
|
elseif #key==1 then
|
||||||
local i=(kb.isDown("lctrl","lshift","lalt","rctrl","rshift","ralt")and minoKey2 or minoKey)[key]
|
local i=(kb.isDown("lshift","lalt","rshift","ralt")and minoKey2 or minoKey)[key]
|
||||||
if i then
|
if i then
|
||||||
local C=s.cur+1
|
local C=s.cur+1
|
||||||
ins(preBag,C,i)
|
ins(preBag,C,i)
|
||||||
@@ -458,18 +491,6 @@ function keyDown.sequence(key)
|
|||||||
else
|
else
|
||||||
sceneTemp.sure=50
|
sceneTemp.sure=50
|
||||||
end
|
end
|
||||||
elseif key=="c"and kb.isDown("lctrl","rctrl")or key=="cC"then
|
|
||||||
if #preBag>0 then
|
|
||||||
love.system.setClipboardText("Techmino SEQ:"..copySequence())
|
|
||||||
TEXT.show(text.copySuccess,640,225,50,"appear",.5)
|
|
||||||
end
|
|
||||||
elseif key=="v"and kb.isDown("lctrl","rctrl")or key=="cV"then
|
|
||||||
local str=love.system.getClipboardText()
|
|
||||||
local p=string.find(str,":")--ptr*
|
|
||||||
if p then str=string.sub(str,p+1)end
|
|
||||||
if not pasteSequence(str)then
|
|
||||||
TEXT.show(text.dataCorrupted,640,225,45,"flicker",.5)
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
@@ -685,7 +706,7 @@ function keyDown.pause(key)
|
|||||||
elseif key=="escape"then
|
elseif key=="escape"then
|
||||||
resumeGame()
|
resumeGame()
|
||||||
elseif key=="s"then
|
elseif key=="s"then
|
||||||
SCN.goto("setting_sound")
|
SCN.go("setting_sound")
|
||||||
elseif key=="r"then
|
elseif key=="r"then
|
||||||
TASK.clear("play")
|
TASK.clear("play")
|
||||||
resetGameData()
|
resetGameData()
|
||||||
@@ -1069,6 +1090,71 @@ function love.focus(f)
|
|||||||
pauseGame()
|
pauseGame()
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
function love.errorhandler(msg)
|
||||||
|
local PUMP,POLL=love.event.pump,love.event.poll
|
||||||
|
love.mouse.setVisible(true)
|
||||||
|
love.audio.stop()
|
||||||
|
local err={"Error:"..msg}
|
||||||
|
local trace=debug.traceback("",2)
|
||||||
|
local c=2
|
||||||
|
for l in string.gmatch(trace,"(.-)\n")do
|
||||||
|
if c>2 then
|
||||||
|
if not string.find(l,"boot")then
|
||||||
|
err[c]=string.gsub(l,"^\t*","")
|
||||||
|
c=c+1
|
||||||
|
end
|
||||||
|
else
|
||||||
|
err[2]="Traceback"
|
||||||
|
c=3
|
||||||
|
end
|
||||||
|
end
|
||||||
|
print(table.concat(err,"\n"),1,c-2)
|
||||||
|
gc.reset()
|
||||||
|
local CAP
|
||||||
|
local function _(_)CAP=gc.newImage(_)end
|
||||||
|
gc.captureScreenshot(_)
|
||||||
|
gc.present()
|
||||||
|
setting.sfx=setting.voc--only for error "voice" played with voice volume,not saved
|
||||||
|
if SFX.list.error then SFX.play("error",.8)end
|
||||||
|
local BGcolor=rnd()>.026 and{.3,.5,.9}or{.62,.3,.926}
|
||||||
|
local needDraw=true
|
||||||
|
return function()
|
||||||
|
PUMP()
|
||||||
|
for E,a,b,c,d,e in POLL()do
|
||||||
|
if E=="quit"or a=="escape"then
|
||||||
|
destroyPlayers()
|
||||||
|
return 1
|
||||||
|
elseif E=="resize"then
|
||||||
|
love.resize(a,b)
|
||||||
|
needDraw=true
|
||||||
|
elseif E=="focus"then
|
||||||
|
needDraw=true
|
||||||
|
end
|
||||||
|
end
|
||||||
|
if needDraw then
|
||||||
|
gc.discard()
|
||||||
|
gc.clear(BGcolor)
|
||||||
|
gc.setColor(1,1,1)
|
||||||
|
gc.push("transform")
|
||||||
|
gc.replaceTransform(xOy)
|
||||||
|
gc.draw(CAP,100,365,nil,512/CAP:getWidth(),288/CAP:getHeight())
|
||||||
|
setFont(120)gc.print(":(",100,40)
|
||||||
|
setFont(38)gc.printf(text.errorMsg,100,200,1280-100)
|
||||||
|
setFont(20)
|
||||||
|
gc.print(system.."-"..gameVersion,100,660)
|
||||||
|
gc.print("scene:"..SCN.cur,400,660)
|
||||||
|
gc.printf(err[1],626,360,1260-626)
|
||||||
|
gc.print("TRACEBACK",626,426)
|
||||||
|
for i=4,#err-2 do
|
||||||
|
gc.print(err[i],626,370+20*i)
|
||||||
|
end
|
||||||
|
gc.pop()
|
||||||
|
gc.present()
|
||||||
|
needDraw=false
|
||||||
|
end
|
||||||
|
love.timer.sleep(.2)
|
||||||
|
end
|
||||||
|
end
|
||||||
local scs={.5,1.5,.5,1.5,.5,1.5,.5,1.5,.5,1.5,1,1,0,2}
|
local scs={.5,1.5,.5,1.5,.5,1.5,.5,1.5,.5,1.5,1,1,0,2}
|
||||||
local devColor={
|
local devColor={
|
||||||
color.white,
|
color.white,
|
||||||
@@ -1092,7 +1178,7 @@ function love.run()
|
|||||||
local FCT=0--Framedraw counter
|
local FCT=0--Framedraw counter
|
||||||
|
|
||||||
love.resize(gc.getWidth(),gc.getHeight())
|
love.resize(gc.getWidth(),gc.getHeight())
|
||||||
SCN.init(setting.lock and "calculator"or"load")--Scene Launch
|
SCN.init("load")--Scene Launch
|
||||||
marking=true
|
marking=true
|
||||||
|
|
||||||
return function()
|
return function()
|
||||||
@@ -1162,7 +1248,7 @@ function love.run()
|
|||||||
|
|
||||||
--Draw scene swapping animation
|
--Draw scene swapping animation
|
||||||
if SCN.swapping then
|
if SCN.swapping then
|
||||||
_=SCN.swap
|
_=SCN.stat
|
||||||
_.draw(_.time)
|
_.draw(_.time)
|
||||||
end
|
end
|
||||||
|
|
||||||
@@ -1184,8 +1270,8 @@ function love.run()
|
|||||||
for i=1,#LIST do
|
for i=1,#LIST do
|
||||||
gc.rectangle("fill",900+2*i,_,2,-LIST[i]*4000)
|
gc.rectangle("fill",900+2*i,_,2,-LIST[i]*4000)
|
||||||
end
|
end
|
||||||
if devMode==3 then WAIT(.26)
|
if devMode==3 then WAIT(.1)
|
||||||
elseif devMode==4 then WAIT(.626)
|
elseif devMode==4 then WAIT(.5)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
@@ -1197,9 +1283,9 @@ function love.run()
|
|||||||
if Timer()-lastFreshPow>2 and setting.powerInfo and loadingFinished then
|
if Timer()-lastFreshPow>2 and setting.powerInfo and loadingFinished then
|
||||||
updatePowerInfo()
|
updatePowerInfo()
|
||||||
lastFreshPow=Timer()
|
lastFreshPow=Timer()
|
||||||
_=gc.getWidth()
|
if gc.getWidth()~=scr.w then
|
||||||
if _~=scr.w then
|
love.resize(gc.getWidth(),gc.getHeight())
|
||||||
love.resize(_,gc.getHeight())
|
TEXT.show("resized",200,100,30,"stretch")
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|||||||
@@ -18,6 +18,7 @@ local langList={
|
|||||||
stage=function(n)return"关卡 "..n end,
|
stage=function(n)return"关卡 "..n end,
|
||||||
great="Great!",
|
great="Great!",
|
||||||
awesome="Awesome.",
|
awesome="Awesome.",
|
||||||
|
almost="Almost!",
|
||||||
continue="Continue.",
|
continue="Continue.",
|
||||||
maxspeed="最高速度",
|
maxspeed="最高速度",
|
||||||
speedup="速度加快",
|
speedup="速度加快",
|
||||||
@@ -85,8 +86,6 @@ local langList={
|
|||||||
unlockSavingError="解锁保存失败:",
|
unlockSavingError="解锁保存失败:",
|
||||||
recSavingError="纪录保存失败:",
|
recSavingError="纪录保存失败:",
|
||||||
|
|
||||||
ai_fixed="不能同时开启AI和固定序列",
|
|
||||||
ai_prebag="不能同时开启AI和自定义序列",
|
|
||||||
switchSpawnSFX="请开启方块出生音效",
|
switchSpawnSFX="请开启方块出生音效",
|
||||||
|
|
||||||
needRestart="重新开始以生效",
|
needRestart="重新开始以生效",
|
||||||
@@ -126,7 +125,7 @@ local langList={
|
|||||||
radar={"DEF","OFF","ATK","SEND","SPD","DIG"},
|
radar={"DEF","OFF","ATK","SEND","SPD","DIG"},
|
||||||
radarData={
|
radarData={
|
||||||
"D'PM",
|
"D'PM",
|
||||||
"OPM",
|
"ADPM",
|
||||||
"APM",
|
"APM",
|
||||||
"SPM",
|
"SPM",
|
||||||
"L'PM",
|
"L'PM",
|
||||||
@@ -154,7 +153,7 @@ local langList={
|
|||||||
"",
|
"",
|
||||||
"使用LOVE2D引擎",
|
"使用LOVE2D引擎",
|
||||||
"错误或者建议请附带截图发送到内测群或者作者邮箱~",
|
"错误或者建议请附带截图发送到内测群或者作者邮箱~",
|
||||||
"仅通过内测群1080457319进行免费下载/更新",
|
"仅通过内测群1127702001进行免费下载/更新",
|
||||||
"其他渠道获得游戏皆有被修改/加广告/植入病毒的风险,程序只申请了振动&联网权限!",
|
"其他渠道获得游戏皆有被修改/加广告/植入病毒的风险,程序只申请了振动&联网权限!",
|
||||||
"若由于被修改的本游戏产生的各种损失作者不负责(我怎么负责啊跟我有啥关系)",
|
"若由于被修改的本游戏产生的各种损失作者不负责(我怎么负责啊跟我有啥关系)",
|
||||||
"请从正规途径获得最新版,游戏现为免费,不过有打赏当然感谢啦~",
|
"请从正规途径获得最新版,游戏现为免费,不过有打赏当然感谢啦~",
|
||||||
@@ -163,12 +162,14 @@ local langList={
|
|||||||
"作者:MrZ 邮箱:1046101471@qq.com",
|
"作者:MrZ 邮箱:1046101471@qq.com",
|
||||||
"使用LOVE2D引擎",
|
"使用LOVE2D引擎",
|
||||||
"",
|
"",
|
||||||
"程序:MrZ, FinnTenzor",
|
"程序: MrZ, FinnTenzor",
|
||||||
"美术:MrZ, (Gnyar)",
|
"美术: MrZ, (Gnyar)",
|
||||||
"音乐:MrZ, (T0722)",
|
"音乐: MrZ, (T0722)",
|
||||||
"音效/语音: MrZ, Miya",
|
"音效/语音: MrZ, Miya",
|
||||||
"演出: 模电, HBM",
|
"演出: 模电, HBM",
|
||||||
"测试:思竣 官网: 渣渣120",
|
"测试: 思竣",
|
||||||
|
"英文文案: User670",
|
||||||
|
"官网: 渣渣120",
|
||||||
"",
|
"",
|
||||||
"特别感谢:",
|
"特别感谢:",
|
||||||
"Flyz, Farter, 蕴空之灵,",
|
"Flyz, Farter, 蕴空之灵,",
|
||||||
@@ -184,7 +185,7 @@ local langList={
|
|||||||
simple-love-lights[dylhunn]
|
simple-love-lights[dylhunn]
|
||||||
]],
|
]],
|
||||||
support="支持作者",
|
support="支持作者",
|
||||||
group="官方QQ群(如果没有被暗改的话就是这个):1080457319",
|
group="官方QQ群(如果没有被暗改的话就是这个):1127702001",
|
||||||
WidgetText={
|
WidgetText={
|
||||||
calculator={
|
calculator={
|
||||||
_1="1",_2="2",_3="3",
|
_1="1",_2="2",_3="3",
|
||||||
@@ -246,6 +247,7 @@ local langList={
|
|||||||
back="返回",
|
back="返回",
|
||||||
},
|
},
|
||||||
draw={
|
draw={
|
||||||
|
b12="[ ]",
|
||||||
any="不定",
|
any="不定",
|
||||||
space="×",
|
space="×",
|
||||||
clear="清除",
|
clear="清除",
|
||||||
@@ -277,7 +279,7 @@ local langList={
|
|||||||
autoPause="失去焦点自动暂停",
|
autoPause="失去焦点自动暂停",
|
||||||
swap="组合键切换攻击模式",
|
swap="组合键切换攻击模式",
|
||||||
fine="极简操作提示音",
|
fine="极简操作提示音",
|
||||||
lock="软件锁(密码626)",
|
appLock="软件锁(密码626)",
|
||||||
back="返回",
|
back="返回",
|
||||||
},
|
},
|
||||||
setting_video={
|
setting_video={
|
||||||
@@ -290,6 +292,7 @@ local langList={
|
|||||||
bagLine="包分界线",
|
bagLine="包分界线",
|
||||||
lockFX="锁定特效等级",
|
lockFX="锁定特效等级",
|
||||||
dropFX="下落特效等级",
|
dropFX="下落特效等级",
|
||||||
|
moveFX="移动特效等级",
|
||||||
clearFX="消除特效等级",
|
clearFX="消除特效等级",
|
||||||
shakeFX="晃动特效等级",
|
shakeFX="晃动特效等级",
|
||||||
atkFX="攻击特效等级",
|
atkFX="攻击特效等级",
|
||||||
@@ -490,6 +493,7 @@ local langList={
|
|||||||
stage=function(n)return"关卡 "..n end,
|
stage=function(n)return"关卡 "..n end,
|
||||||
great="不错!",
|
great="不错!",
|
||||||
awesome="精彩。",
|
awesome="精彩。",
|
||||||
|
almost="差一点!",
|
||||||
continue="继续。",
|
continue="继续。",
|
||||||
maxspeed="最高速度",
|
maxspeed="最高速度",
|
||||||
speedup="速度加快",
|
speedup="速度加快",
|
||||||
@@ -555,8 +559,6 @@ local langList={
|
|||||||
unlockSavingError="解锁保存失败:",
|
unlockSavingError="解锁保存失败:",
|
||||||
recSavingError="纪录保存失败:",
|
recSavingError="纪录保存失败:",
|
||||||
|
|
||||||
ai_fixed="不能同时开启电脑玩家和固定序列",
|
|
||||||
ai_prebag="不能同时开启电脑玩家和自定义序列",
|
|
||||||
switchSpawnSFX="请开启方块出生音效",
|
switchSpawnSFX="请开启方块出生音效",
|
||||||
|
|
||||||
needRestart="重新开始以生效",
|
needRestart="重新开始以生效",
|
||||||
@@ -596,7 +598,7 @@ local langList={
|
|||||||
radar={"防","守","攻","送","速","挖"},
|
radar={"防","守","攻","送","速","挖"},
|
||||||
radarData={
|
radarData={
|
||||||
"防/分",
|
"防/分",
|
||||||
"挡/分",
|
"综/分",
|
||||||
"攻/分",
|
"攻/分",
|
||||||
"送/分",
|
"送/分",
|
||||||
"行/分",
|
"行/分",
|
||||||
@@ -623,7 +625,7 @@ local langList={
|
|||||||
"从TO/C2/KOS/TGM3/JS等方块获得过灵感",
|
"从TO/C2/KOS/TGM3/JS等方块获得过灵感",
|
||||||
"",
|
"",
|
||||||
"错误或者建议请附带截图发送到内测群或者作者邮箱~",
|
"错误或者建议请附带截图发送到内测群或者作者邮箱~",
|
||||||
"仅通过内测群1080457319进行免费下载/更新",
|
"仅通过内测群1127702001进行免费下载/更新",
|
||||||
"其他渠道获得游戏皆有被修改/加广告/植入病毒的风险,程序只申请了振动&联网权限!",
|
"其他渠道获得游戏皆有被修改/加广告/植入病毒的风险,程序只申请了振动&联网权限!",
|
||||||
"若由于被修改的本游戏产生的各种损失作者不负责(我怎么负责啊跟我有啥关系)",
|
"若由于被修改的本游戏产生的各种损失作者不负责(我怎么负责啊跟我有啥关系)",
|
||||||
"请从正规途径获得最新版,游戏现为免费,不过有打赏当然感谢啦~",
|
"请从正规途径获得最新版,游戏现为免费,不过有打赏当然感谢啦~",
|
||||||
@@ -632,13 +634,14 @@ local langList={
|
|||||||
"作者:MrZ 邮箱:1046101471@qq.com",
|
"作者:MrZ 邮箱:1046101471@qq.com",
|
||||||
"使用LOVE2D引擎",
|
"使用LOVE2D引擎",
|
||||||
"",
|
"",
|
||||||
"程序:MrZ, FinnTenzor",
|
"程序: MrZ, FinnTenzor",
|
||||||
"美术:MrZ, (T0722, Gnyar)",
|
"美术: MrZ, (T0722, Gnyar)",
|
||||||
"音乐:MrZ, (T0722)",
|
"音乐: MrZ, (T0722)",
|
||||||
"音效/语音: MrZ, Miya",
|
"音效/语音: MrZ, Miya",
|
||||||
"演出: 模电, HBM",
|
"演出: 模电, HBM",
|
||||||
"测试:思竣 官网: 渣渣120",
|
"测试: 思竣",
|
||||||
"",
|
"英文文案: User670",
|
||||||
|
"官网: 渣渣120",
|
||||||
"特别感谢:",
|
"特别感谢:",
|
||||||
"Flyz, Farter, 蕴空之灵,",
|
"Flyz, Farter, 蕴空之灵,",
|
||||||
"茶管, [所有内测人员]",
|
"茶管, [所有内测人员]",
|
||||||
@@ -653,7 +656,7 @@ local langList={
|
|||||||
simple-love-lights[dylhunn]
|
simple-love-lights[dylhunn]
|
||||||
]],
|
]],
|
||||||
support="支持作者",
|
support="支持作者",
|
||||||
group="官方QQ群(如果没有被暗改的话就是这个):1080457319",
|
group="官方QQ群(如果没有被暗改的话就是这个):1127702001",
|
||||||
WidgetText={
|
WidgetText={
|
||||||
calculator={
|
calculator={
|
||||||
_1="1",_2="2",_3="3",
|
_1="1",_2="2",_3="3",
|
||||||
@@ -715,6 +718,7 @@ local langList={
|
|||||||
back="返回",
|
back="返回",
|
||||||
},
|
},
|
||||||
draw={
|
draw={
|
||||||
|
b12="[ ]",
|
||||||
any="不定",
|
any="不定",
|
||||||
space="×",
|
space="×",
|
||||||
clear="清除",
|
clear="清除",
|
||||||
@@ -746,7 +750,7 @@ local langList={
|
|||||||
autoPause="失去焦点自动暂停",
|
autoPause="失去焦点自动暂停",
|
||||||
swap="组合键切换攻击模式",
|
swap="组合键切换攻击模式",
|
||||||
fine="极简操作提示音",
|
fine="极简操作提示音",
|
||||||
lock="软件锁(密码626)",
|
appLock="软件锁(密码626)",
|
||||||
back="返回",
|
back="返回",
|
||||||
},
|
},
|
||||||
setting_video={
|
setting_video={
|
||||||
@@ -759,6 +763,7 @@ local langList={
|
|||||||
bagLine="包分界线",
|
bagLine="包分界线",
|
||||||
lockFX="锁定特效等级",
|
lockFX="锁定特效等级",
|
||||||
dropFX="下落特效等级",
|
dropFX="下落特效等级",
|
||||||
|
moveFX="移动特效等级",
|
||||||
clearFX="消除特效等级",
|
clearFX="消除特效等级",
|
||||||
shakeFX="晃动特效等级",
|
shakeFX="晃动特效等级",
|
||||||
atkFX="攻击特效等级",
|
atkFX="攻击特效等级",
|
||||||
@@ -942,28 +947,29 @@ local langList={
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
anykey="Press any button",
|
anykey="Press any button",
|
||||||
newVersion="Updating detected!",
|
newVersion="Update detected!",
|
||||||
newBigVersion="Big updating detected! Save data altered",
|
newBigVersion="A big update was detected! Save data has been altered.",
|
||||||
marking="Game Author:MrZ_26\nIllegal recording if see this\nAny explanation invalid",
|
marking="Game Author: MrZ_26\nIllegal recording if you can see this\nAny explanation is invalid",
|
||||||
lang="English",
|
lang="English",
|
||||||
atkModeName={"Random","Badges","K.O.s","Attackers"},
|
atkModeName={"Random","Badges","K.O.s","Attackers"},
|
||||||
royale_remain=function(n)return n.." Players Remaining"end,
|
royale_remain=function(n)return n.." Players Remaining"end,
|
||||||
cmb={nil,"1 Combo","2 Combo","3 Combo","4 Combo","5 Combo","6 Combo","7 Combo","8 Combo","9 Combo","10 Combo!","11 Combo!","12 Combo!","13 Combo!","14 Combo!","15 Combo!","16 Combo!","17 Combo!","18 Combo!","19 Combo!","MEGACMB"},
|
cmb={nil,"1 Combo","2 Combo","3 Combo","4 Combo","5 Combo","6 Combo","7 Combo","8 Combo","9 Combo","10 Combo!","11 Combo!","12 Combo!","13 Combo!","14 Combo!!","15 Combo!!","16 Combo!!","17 Combo!!!","18 Combo!!!","19 Combo!!!","MEGACMB"},
|
||||||
block=nil,spin="-spin ",
|
block=nil,spin="-Spin ",
|
||||||
clear={"single","double","triple","Techrash","Techrash+"},
|
clear={"Single","Double","Triple","Techrash","Techrash+"},
|
||||||
mini="Mini",b2b="B2B ",b3b="B2B2B ",
|
mini="Mini",b2b="B2B ",b3b="B2B2B ",
|
||||||
PC="Perfect Clear",HPC="Clear",
|
PC="Perfect Clear",HPC="Clear",
|
||||||
hold="Hold",next="Next",
|
hold="HOLD",next="NEXT",
|
||||||
replaying="[Replaying]",
|
replaying="[Replay]",
|
||||||
|
|
||||||
stage=function(n)return"Stage "..n end,
|
stage=function(n)return"Stage "..n end,
|
||||||
great="Great!",
|
great="Great!",
|
||||||
awesome="Awesome!",
|
awesome="Awesome!",
|
||||||
|
almost="Almost!",
|
||||||
continue="Keep going!",
|
continue="Keep going!",
|
||||||
maxspeed="Max speed!",
|
maxspeed="Max speed!",
|
||||||
speedup="Speed up!",
|
speedup="Speed up!",
|
||||||
|
|
||||||
win="Win",
|
win="You Win!",
|
||||||
finish="Finish",
|
finish="Finish",
|
||||||
gameover="Game Over",
|
gameover="Game Over",
|
||||||
pause="Pause",
|
pause="Pause",
|
||||||
@@ -992,47 +998,45 @@ local langList={
|
|||||||
fall=nil,
|
fall=nil,
|
||||||
next=nil,
|
next=nil,
|
||||||
hold={"On","Off","Inf"},
|
hold={"On","Off","Inf"},
|
||||||
sequence={"bag","his4","random","loop","fixed"},
|
sequence={"Bag","His4","Random","Loop","Fixed"},
|
||||||
visible={"normal","slow fade","fast fade","sudden fade"},
|
visible={"Normal","Slow Fade","Quick Fade","Sudden Fade"},
|
||||||
target={10,20,40,100,200,500,1000,"None"},
|
target={10,20,40,100,200,500,1000,"None"},
|
||||||
freshLimit={0,8,15,"Inf"},
|
freshLimit={0,8,15,"Inf"},
|
||||||
opponent={"None","9S Lv1","9S Lv2","9S Lv3","9S Lv4","9S Lv5","CC Lv1","CC Lv2","CC Lv3","CC Lv4","CC Lv5","CC Lv6"},
|
opponent={"None","9S Lv1","9S Lv2","9S Lv3","9S Lv4","9S Lv5","CC Lv1","CC Lv2","CC Lv3","CC Lv4","CC Lv5","CC Lv6"},
|
||||||
},
|
},
|
||||||
sequence="Custom Sequence",
|
sequence="Custom Sequence",
|
||||||
snapLevelName={"Free pos","Snap-10","Snap-20","Snap-40","Snap-60","Snap-80"},
|
snapLevelName={"Free pos","Snap-10","Snap-20","Snap-40","Snap-60","Snap-80"},
|
||||||
setting_game="Game settings",
|
setting_game="Game Settings",
|
||||||
setting_video="Video settings",
|
setting_video="Video Settings",
|
||||||
setting_sound="Sound settings",
|
setting_sound="Sound Settings",
|
||||||
setting_control="Control Settings",
|
setting_control="Control Settings",
|
||||||
setting_skin="Layout Settings",
|
setting_skin="Layout Settings",
|
||||||
preview="Preview",
|
preview="Preview",
|
||||||
keyboard="Keyboard",joystick="Controller",
|
keyboard="Keyboard",joystick="Controller",
|
||||||
ctrlSetHelp="Arrowkey to select/change slot,Enter to change,Esc back",
|
ctrlSetHelp="Arrow keys: select/change slot, Enter: Change, Esc: Go back",
|
||||||
musicRoom="Music Room",
|
musicRoom="Music Room",
|
||||||
nowPlaying="Now Playing:",
|
nowPlaying="Now Playing:",
|
||||||
page="Page:",
|
page="Page:",
|
||||||
|
|
||||||
ai_fixed="AI is incompatible with fixed sequence",
|
ai_fixed="The AI is incompatible with fixed sequences.",
|
||||||
ai_prebag="AI is incompatible with custom sequence",
|
ai_prebag="The AI is incompatible with custom sequences.",
|
||||||
settingSaved="Settings Saved",
|
settingSaved="Settings Saved",
|
||||||
settingSavingError="Failed to save settings:",
|
settingSavingError="Failed to save settings:",
|
||||||
keyMapSaved="Key settings saved",
|
keyMapSaved="Key settings saved",
|
||||||
keyMapSavingError="Failed to save key settings:",
|
keyMapSavingError="Failed to save key settings:",
|
||||||
VKSaved="virtual keys saved",
|
VKSaved="Virtual keys saved",
|
||||||
VKSavingError="Failed to save virtual key:",
|
VKSavingError="Failed to save virtual key configuration:",
|
||||||
statSavingError="Failed to save stat:",
|
statSavingError="Failed to save statistics:",
|
||||||
unlockSavingError="Failed to save unlock:",
|
unlockSavingError="Failed to save unlocked content:",
|
||||||
recSavingError="Failed to save record:",
|
recSavingError="Failed to save record:",
|
||||||
|
|
||||||
ai_fixed="AI is incompatible with fixed sequence",
|
|
||||||
ai_prebag="AI is incompatible with custom sequence",
|
|
||||||
switchSpawnSFX="Switch on spawn SFX to play",
|
switchSpawnSFX="Switch on spawn SFX to play",
|
||||||
|
|
||||||
needRestart="Effective after restart",
|
needRestart="Effective after restart",
|
||||||
copySuccess="Copied successfully",
|
copySuccess="Copied successfully",
|
||||||
dataCorrupted="Data corrupted",
|
dataCorrupted="Data corrupted",
|
||||||
VKTchW="Touch Weight",
|
VKTchW="Touch Weight",
|
||||||
VKOrgW="Origion Weight",
|
VKOrgW="Origin Weight",
|
||||||
VKCurW="Cur. Pos. Weight",
|
VKCurW="Cur. Pos. Weight",
|
||||||
noScore="No Scores Yet",
|
noScore="No Scores Yet",
|
||||||
highScore="Personal Bests",
|
highScore="Personal Bests",
|
||||||
@@ -1062,7 +1066,7 @@ local langList={
|
|||||||
radar={"DEF","OFF","ATK","SEND","SPD","DIG"},
|
radar={"DEF","OFF","ATK","SEND","SPD","DIG"},
|
||||||
radarData={
|
radarData={
|
||||||
"D'PM",
|
"D'PM",
|
||||||
"OPM",
|
"ADPM",
|
||||||
"APM",
|
"APM",
|
||||||
"SPM",
|
"SPM",
|
||||||
"L'PM",
|
"L'PM",
|
||||||
@@ -1088,11 +1092,11 @@ local langList={
|
|||||||
"This is just an ordinary block game, not a certain one.",
|
"This is just an ordinary block game, not a certain one.",
|
||||||
"It plays like TO/C2/KOS/TGM3 and others.",
|
"It plays like TO/C2/KOS/TGM3 and others.",
|
||||||
"",
|
"",
|
||||||
"bug reports/suggestions, sent to the author's testing group or email ~",
|
"You can send bug reports or suggestions to the author's testing group or email ~",
|
||||||
"This is a free download available only through discord.gg/f9pUvkh",
|
"This is a free download available only through discord.gg/f9pUvkh",
|
||||||
"The game downloaded from other sources may contain viruses,",
|
"The game downloaded from other sources may contain viruses,",
|
||||||
"and only vibration & networking permissions are needed for mobile versions!",
|
"and only vibration & networking permissions are needed for mobile versions!",
|
||||||
"The author is not responsible for any losses from modifying the game.",
|
"The author is not responsible for any loss of data from modifying the game.",
|
||||||
},
|
},
|
||||||
staff={
|
staff={
|
||||||
"Author: MrZ E-mail: 1046101471@qq.com",
|
"Author: MrZ E-mail: 1046101471@qq.com",
|
||||||
@@ -1101,17 +1105,19 @@ local langList={
|
|||||||
"Program: MrZ, FinnTenzor",
|
"Program: MrZ, FinnTenzor",
|
||||||
"Art: MrZ, (Gnyar)",
|
"Art: MrZ, (Gnyar)",
|
||||||
"Music: MrZ, (T0722)",
|
"Music: MrZ, (T0722)",
|
||||||
"Voice/ Sound: MrZ, Miya",
|
"Voice & Sound: MrZ, Miya",
|
||||||
"Performance: 模电 HBM",
|
"Performance: 模电, HBM",
|
||||||
"Test: 思竣 Web: 渣渣120",
|
"Test: 思竣",
|
||||||
|
"Eng Doc: User670",
|
||||||
|
"Web: 渣渣120",
|
||||||
"",
|
"",
|
||||||
"Special Thanks:",
|
"Special Thanks:",
|
||||||
"Flyz, Farter, 蕴空之灵,",
|
"Flyz, Farter, 蕴空之灵,",
|
||||||
"Teatube, [All test staff]",
|
"Teatube, [All test staff]",
|
||||||
},
|
},
|
||||||
used="Tool used:\n\tBeepbox\n\tGFIE\n\tGoldwave\nLib used:\n\tCold_Clear[MinusKelvin]\n\tsimple-love-lights[dylhunn]",
|
used="Tools used:\n\tBeepbox\n\tGFIE\n\tGoldwave\nLib used:\n\tCold_Clear[MinusKelvin]\n\tsimple-love-lights[dylhunn]",
|
||||||
support="Support author",
|
support="Support author",
|
||||||
group="Official QQ Group(if not hacked):1080457319",
|
group="Official QQ Group (if not hacked): 1127702001",
|
||||||
WidgetText={
|
WidgetText={
|
||||||
calculator={
|
calculator={
|
||||||
_1="1",_2="2",_3="3",
|
_1="1",_2="2",_3="3",
|
||||||
@@ -1127,7 +1133,7 @@ local langList={
|
|||||||
main={
|
main={
|
||||||
play="Play",
|
play="Play",
|
||||||
setting="Settings",
|
setting="Settings",
|
||||||
music="Music room",
|
music="Music Room",
|
||||||
stat="Statistics",
|
stat="Statistics",
|
||||||
help="Help",
|
help="Help",
|
||||||
qplay="Q. Play",
|
qplay="Q. Play",
|
||||||
@@ -1157,7 +1163,7 @@ local langList={
|
|||||||
set4="Blind (4)",
|
set4="Blind (4)",
|
||||||
set5="Master (5)",
|
set5="Master (5)",
|
||||||
seq="Advanced(Q)",
|
seq="Advanced(Q)",
|
||||||
draw="Field Edit(E)",
|
draw="Edit Field (E)",
|
||||||
back="Back",
|
back="Back",
|
||||||
},
|
},
|
||||||
sequence={
|
sequence={
|
||||||
@@ -1173,6 +1179,7 @@ local langList={
|
|||||||
back="Back",
|
back="Back",
|
||||||
},
|
},
|
||||||
draw={
|
draw={
|
||||||
|
b12="[ ]",
|
||||||
any="Erase",
|
any="Erase",
|
||||||
space="×",
|
space="×",
|
||||||
clear="Clear",
|
clear="Clear",
|
||||||
@@ -1195,16 +1202,16 @@ local langList={
|
|||||||
setting_game={
|
setting_game={
|
||||||
graphic="←Video",
|
graphic="←Video",
|
||||||
sound="Sound→",
|
sound="Sound→",
|
||||||
ctrl="Control settings",
|
ctrl="Control Settings",
|
||||||
key="Key Mappings",
|
key="Key Mappings",
|
||||||
touch="Touch Settings",
|
touch="Touch Settings",
|
||||||
reTime="Start Delay",
|
reTime="Start Delay",
|
||||||
maxNext="Next Queue Length",
|
maxNext="Next Queue Length",
|
||||||
layout="Layout",
|
layout="Layout",
|
||||||
autoPause="Pause when lose focus",
|
autoPause="Pause when focus is lost",
|
||||||
swap="Key Combination (Change Atk. Mode)",
|
swap="Key Combination (Change Atk. Mode)",
|
||||||
fine="Finesse Error Sound",
|
fine="Finesse Error Sound",
|
||||||
lock="Game Lock(pw=626)",
|
appLock="App Lock (Password: 626)",
|
||||||
back="Back",
|
back="Back",
|
||||||
},
|
},
|
||||||
setting_video={
|
setting_video={
|
||||||
@@ -1214,18 +1221,19 @@ local langList={
|
|||||||
smooth="Smooth drop",
|
smooth="Smooth drop",
|
||||||
center="Center",
|
center="Center",
|
||||||
grid="Grid",
|
grid="Grid",
|
||||||
bagLine="Bag line",
|
bagLine="Bag Line",
|
||||||
lockFX="Lock FX level",
|
lockFX="Lock FX Level",
|
||||||
dropFX="Drop FX level",
|
dropFX="Drop FX Level",
|
||||||
clearFX="Clear FX level",
|
moveFX="Move FX Level",
|
||||||
shakeFX="Field Sway level",
|
clearFX="Clear FX Level",
|
||||||
atkFX="ATK. FX level",
|
shakeFX="Field Sway Level",
|
||||||
|
atkFX="ATK. FX Level",
|
||||||
frame="Render Frame Rate",
|
frame="Render Frame Rate",
|
||||||
text="Action Text",
|
text="Action Text",
|
||||||
warn="Death Alert",
|
warn="Death Alert",
|
||||||
fullscreen="Full Screen",
|
fullscreen="Full Screen",
|
||||||
bg="Background",
|
bg="Background",
|
||||||
power="Power Info.",
|
power="Power Info",
|
||||||
back="Back",
|
back="Back",
|
||||||
},
|
},
|
||||||
setting_sound={
|
setting_sound={
|
||||||
@@ -1278,9 +1286,9 @@ local langList={
|
|||||||
b13="Ins Down:", b14="Down 1:", b15="Down 4:", b16="Down 10:",
|
b13="Ins Down:", b14="Down 1:", b15="Down 4:", b16="Down 10:",
|
||||||
b17="Left Drop:", b18="Right Drop:", b19="Left Zangi:", b20="Right Zangi:",
|
b17="Left Drop:", b18="Right Drop:", b19="Left Zangi:", b20="Right Zangi:",
|
||||||
norm="Normal",
|
norm="Normal",
|
||||||
pro="Professioanl",
|
pro="Professional",
|
||||||
hide="Show Virtual Key",
|
hide="Show Virtual Key",
|
||||||
track="Auto track",
|
track="Auto Track",
|
||||||
sfx="SFX",
|
sfx="SFX",
|
||||||
vib="VIB",
|
vib="VIB",
|
||||||
icon="Icon",
|
icon="Icon",
|
||||||
@@ -1315,9 +1323,9 @@ local langList={
|
|||||||
},
|
},
|
||||||
debug={
|
debug={
|
||||||
reset="Reset?",
|
reset="Reset?",
|
||||||
reset1="Reset rank",
|
reset1="Reset ranks",
|
||||||
reset2="Reset data",
|
reset2="Reset data",
|
||||||
reset3="Reset ALL",
|
reset3="Reset all",
|
||||||
back="Back",
|
back="Back",
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
@@ -1351,13 +1359,13 @@ local langList={
|
|||||||
["master_beginner"]= {"Master", "LUNATIC", "For 20G beginners."},
|
["master_beginner"]= {"Master", "LUNATIC", "For 20G beginners."},
|
||||||
["master_advance"]= {"Master", "ULTIMATE", "Professional 20G challenge!"},
|
["master_advance"]= {"Master", "ULTIMATE", "Professional 20G challenge!"},
|
||||||
["master_final"]= {"Master", "FINAL", "20G: Unreachable end point!"},
|
["master_final"]= {"Master", "FINAL", "20G: Unreachable end point!"},
|
||||||
["GM"]= {"GrandMaster", "GM", "To be Grand Master"},
|
["GM"]= {"GrandMaster", "GM", "To be a Grand Master, take \nthis challenge."},
|
||||||
["blind_easy"]= {"Blind", "HALF", "For novice players."},
|
["blind_easy"]= {"Blind", "HALF", "For novice players."},
|
||||||
["blind_normal"]= {"Blind", "ALL", "For intermediate players."},
|
["blind_normal"]= {"Blind", "ALL", "For intermediate players."},
|
||||||
["blind_hard"]= {"Blind", "SUDDEN", "For experienced players."},
|
["blind_hard"]= {"Blind", "SUDDEN", "For experienced players."},
|
||||||
["blind_lunatic"]= {"Blind", "SUDDEN+", "For professionals."},
|
["blind_lunatic"]= {"Blind", "SUDDEN+", "For professionals."},
|
||||||
["blind_ultimate"]= {"Blind", "?", "R U Ready?"},
|
["blind_ultimate"]= {"Blind", "?", "Are you ready?"},
|
||||||
["blind_wtf"]= {"Blind", "WTF", "i m not ready"},
|
["blind_wtf"]= {"Blind", "WTF", "You're not ready."},
|
||||||
["classic_fast"]= {"Classic", "CTWC", "High-speed classic mode."},
|
["classic_fast"]= {"Classic", "CTWC", "High-speed classic mode."},
|
||||||
["survivor_easy"]= {"Survivor", "EASY", "How long can you survive?"},
|
["survivor_easy"]= {"Survivor", "EASY", "How long can you survive?"},
|
||||||
["survivor_normal"]= {"Survivor", "NORMAL", "How long can you survive?"},
|
["survivor_normal"]= {"Survivor", "NORMAL", "How long can you survive?"},
|
||||||
@@ -1395,7 +1403,7 @@ local langList={
|
|||||||
["infinite_dig"]= {"Infinite: Dig", "", "Dig, dig, dig."},
|
["infinite_dig"]= {"Infinite: Dig", "", "Dig, dig, dig."},
|
||||||
["custom_clear"]= {"Custom", "NORMAL", "Draw something then clear it!!"},
|
["custom_clear"]= {"Custom", "NORMAL", "Draw something then clear it!!"},
|
||||||
["custom_puzzle"]= {"Custom", "PUZZLE", "Draw something then stack it!!"},
|
["custom_puzzle"]= {"Custom", "PUZZLE", "Draw something then stack it!!"},
|
||||||
["sprintPenta"]= {"Sprint", "Pentomino", "Puzzle-18"},
|
["sprintPenta"]= {"Sprint", "Pentomino", "Clear 40 lines with pentominoes.\n18 pentominoes in each bag."},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@@ -1417,6 +1425,7 @@ local langList={
|
|||||||
stage=function(n)return"::"..n.."::"end,
|
stage=function(n)return"::"..n.."::"end,
|
||||||
great="!~",
|
great="!~",
|
||||||
awesome="!!~",
|
awesome="!!~",
|
||||||
|
almost="...!",
|
||||||
continue="~~",
|
continue="~~",
|
||||||
maxspeed="!!!",
|
maxspeed="!!!",
|
||||||
speedup="~!~",
|
speedup="~!~",
|
||||||
@@ -1516,7 +1525,7 @@ local langList={
|
|||||||
radar={"DEF","OFF","ATK","SEND","SPD","DIG"},
|
radar={"DEF","OFF","ATK","SEND","SPD","DIG"},
|
||||||
radarData={
|
radarData={
|
||||||
"D'PM",
|
"D'PM",
|
||||||
"OPM",
|
"ADPM",
|
||||||
"APM",
|
"APM",
|
||||||
"SPM",
|
"SPM",
|
||||||
"L'PM",
|
"L'PM",
|
||||||
@@ -1555,9 +1564,11 @@ local langList={
|
|||||||
"Program: MrZ, FinnTenzor",
|
"Program: MrZ, FinnTenzor",
|
||||||
"Art: MrZ, (Gnyar)",
|
"Art: MrZ, (Gnyar)",
|
||||||
"Music: MrZ, (T0722)",
|
"Music: MrZ, (T0722)",
|
||||||
"Voice/ Sound: MrZ, Miya",
|
"Voice % Sound: MrZ, Miya",
|
||||||
"Performance: 模电 HBM",
|
"Performance: 模电, HBM",
|
||||||
"Test: 思竣 Web: 渣渣120",
|
"Test: 思竣",
|
||||||
|
"Eng Doc: User670",
|
||||||
|
"Web: 渣渣120",
|
||||||
"",
|
"",
|
||||||
"Special Thanks:",
|
"Special Thanks:",
|
||||||
"Flyz, Farter, 蕴空之灵,",
|
"Flyz, Farter, 蕴空之灵,",
|
||||||
@@ -1565,7 +1576,7 @@ local langList={
|
|||||||
},
|
},
|
||||||
used="Tool used:\n\tBeepbox\n\tGFIE\n\tGoldwave\nLib used:\n\tCold_Clear[MinusKelvin]\n\tsimple-love-lights[dylhunn]",
|
used="Tool used:\n\tBeepbox\n\tGFIE\n\tGoldwave\nLib used:\n\tCold_Clear[MinusKelvin]\n\tsimple-love-lights[dylhunn]",
|
||||||
support="Support author",
|
support="Support author",
|
||||||
group="Official QQ Group(if not hacked):1080457319",
|
group="Official QQ Group(if not hacked):1127702001",
|
||||||
WidgetText={
|
WidgetText={
|
||||||
calculator={
|
calculator={
|
||||||
_1="1",_2="2",_3="3",
|
_1="1",_2="2",_3="3",
|
||||||
@@ -1627,6 +1638,7 @@ local langList={
|
|||||||
back="X",
|
back="X",
|
||||||
},
|
},
|
||||||
draw={
|
draw={
|
||||||
|
b12="[ ]",
|
||||||
any="_",
|
any="_",
|
||||||
space="×",
|
space="×",
|
||||||
clear="XXX",
|
clear="XXX",
|
||||||
@@ -1658,7 +1670,7 @@ local langList={
|
|||||||
autoPause="A||",
|
autoPause="A||",
|
||||||
swap="=+=+=",
|
swap="=+=+=",
|
||||||
fine="!#!X #!#",
|
fine="!#!X #!#",
|
||||||
lock="?XX(=626)",
|
appLock="?XX(=626)",
|
||||||
back="X",
|
back="X",
|
||||||
},
|
},
|
||||||
setting_video={
|
setting_video={
|
||||||
@@ -1671,6 +1683,7 @@ local langList={
|
|||||||
bagLine="123|123",
|
bagLine="123|123",
|
||||||
lockFX="↓_~",
|
lockFX="↓_~",
|
||||||
dropFX="↓~",
|
dropFX="↓~",
|
||||||
|
moveFX="←→~",
|
||||||
clearFX="↓↓↓~",
|
clearFX="↓↓↓~",
|
||||||
shakeFX="~|~|~",
|
shakeFX="~|~|~",
|
||||||
atkFX="→→~",
|
atkFX="→→~",
|
||||||
@@ -1871,6 +1884,7 @@ local langList={
|
|||||||
stage=function(n)return"关卡 "..n end,
|
stage=function(n)return"关卡 "..n end,
|
||||||
great="不错的",
|
great="不错的",
|
||||||
awesome="您很强",
|
awesome="您很强",
|
||||||
|
almost="太舒服了",
|
||||||
continue="您继续",
|
continue="您继续",
|
||||||
maxspeed="速度封顶",
|
maxspeed="速度封顶",
|
||||||
speedup="速度加快",
|
speedup="速度加快",
|
||||||
@@ -1938,8 +1952,6 @@ local langList={
|
|||||||
unlockSavingError="解锁保存失败:",
|
unlockSavingError="解锁保存失败:",
|
||||||
recSavingError="纪录保存失败:",
|
recSavingError="纪录保存失败:",
|
||||||
|
|
||||||
ai_fixed="不能同时开启AI和固定序列",
|
|
||||||
ai_prebag="不能同时开启AI和自定义序列",
|
|
||||||
switchSpawnSFX="请开启方块出生音效",
|
switchSpawnSFX="请开启方块出生音效",
|
||||||
|
|
||||||
needRestart="重新开始以生效",
|
needRestart="重新开始以生效",
|
||||||
@@ -1979,7 +1991,7 @@ local langList={
|
|||||||
radar={"DEF","OFF","ATK","SEND","SPD","DIG"},
|
radar={"DEF","OFF","ATK","SEND","SPD","DIG"},
|
||||||
radarData={
|
radarData={
|
||||||
"D'PM",
|
"D'PM",
|
||||||
"OPM",
|
"ADPM",
|
||||||
"APM",
|
"APM",
|
||||||
"SPM",
|
"SPM",
|
||||||
"L'PM",
|
"L'PM",
|
||||||
@@ -1997,8 +2009,8 @@ local langList={
|
|||||||
"挖掘/挖掘攻击:",
|
"挖掘/挖掘攻击:",
|
||||||
"效率/挖掘效率:",
|
"效率/挖掘效率:",
|
||||||
"多余操作/极简率:",
|
"多余操作/极简率:",
|
||||||
"满贯/大满贯:",
|
"牛逼/很牛逼:",
|
||||||
"全/半清:",
|
"消光/消半截:",
|
||||||
},
|
},
|
||||||
help={
|
help={
|
||||||
"既然你能玩到这个游戏,应该也不需要什么帮助吧?",
|
"既然你能玩到这个游戏,应该也不需要什么帮助吧?",
|
||||||
@@ -2007,7 +2019,7 @@ local langList={
|
|||||||
"",
|
"",
|
||||||
"使用LOVE2D引擎",
|
"使用LOVE2D引擎",
|
||||||
"错误或者建议请附带截图发送到内测群或者作者邮箱~",
|
"错误或者建议请附带截图发送到内测群或者作者邮箱~",
|
||||||
"仅通过内测群1080457319进行免费下载/更新",
|
"仅通过内测群1127702001进行免费下载/更新",
|
||||||
"其他渠道获得游戏皆有被修改/加广告/植入病毒的风险,程序只申请了振动&联网权限!",
|
"其他渠道获得游戏皆有被修改/加广告/植入病毒的风险,程序只申请了振动&联网权限!",
|
||||||
"若由于被修改的本游戏产生的各种损失作者不负责(我怎么负责啊跟我有啥关系)",
|
"若由于被修改的本游戏产生的各种损失作者不负责(我怎么负责啊跟我有啥关系)",
|
||||||
"请从正规途径获得最新版,游戏现为免费,不过有打赏当然感谢啦~",
|
"请从正规途径获得最新版,游戏现为免费,不过有打赏当然感谢啦~",
|
||||||
@@ -2037,7 +2049,7 @@ local langList={
|
|||||||
simple-love-lights[dylhunn]
|
simple-love-lights[dylhunn]
|
||||||
]],
|
]],
|
||||||
support="支持作者",
|
support="支持作者",
|
||||||
group="官方QQ群(如果没有被暗改的话就是这个):1080457319",
|
group="官方QQ群(如果没有被暗改的话就是这个):1127702001",
|
||||||
WidgetText={
|
WidgetText={
|
||||||
calculator={
|
calculator={
|
||||||
_1="1",_2="2",_3="3",
|
_1="1",_2="2",_3="3",
|
||||||
@@ -2099,6 +2111,7 @@ local langList={
|
|||||||
back="返回",
|
back="返回",
|
||||||
},
|
},
|
||||||
draw={
|
draw={
|
||||||
|
b12="[ ]",
|
||||||
any="不定",
|
any="不定",
|
||||||
space="×",
|
space="×",
|
||||||
clear="清除",
|
clear="清除",
|
||||||
@@ -2130,7 +2143,7 @@ local langList={
|
|||||||
autoPause="失去焦点自动暂停",
|
autoPause="失去焦点自动暂停",
|
||||||
swap="组合键切换攻击模式",
|
swap="组合键切换攻击模式",
|
||||||
fine="极简操作提示音",
|
fine="极简操作提示音",
|
||||||
lock="家长锁(密码626)",
|
appLock="家长锁(密码626)",
|
||||||
back="返回",
|
back="返回",
|
||||||
},
|
},
|
||||||
setting_video={
|
setting_video={
|
||||||
@@ -2143,6 +2156,7 @@ local langList={
|
|||||||
bagLine="包分界线",
|
bagLine="包分界线",
|
||||||
lockFX="锁定特效等级",
|
lockFX="锁定特效等级",
|
||||||
dropFX="下落特效等级",
|
dropFX="下落特效等级",
|
||||||
|
moveFX="移动特效等级",
|
||||||
clearFX="消除特效等级",
|
clearFX="消除特效等级",
|
||||||
shakeFX="晃动特效等级",
|
shakeFX="晃动特效等级",
|
||||||
atkFX="攻击特效等级",
|
atkFX="攻击特效等级",
|
||||||
|
|||||||
@@ -9,11 +9,11 @@ local mStr=mStr
|
|||||||
local scr=scr
|
local scr=scr
|
||||||
local scs=require("parts/spinCenters")
|
local scs=require("parts/spinCenters")
|
||||||
local modeRankColor={
|
local modeRankColor={
|
||||||
color.bronze, --Rank1
|
color.dRed, --D
|
||||||
color.lGrey, --Rank2
|
color.dOrange, --C
|
||||||
color.lYellow, --Rank3
|
color.lYellow, --B
|
||||||
color.lPurple, --Rank4
|
color.lBlue, --A
|
||||||
color.lCyan, --Rank5
|
color.lCyan, --S
|
||||||
color.lGreen, --Special
|
color.lGreen, --Special
|
||||||
}
|
}
|
||||||
local rankString={
|
local rankString={
|
||||||
@@ -101,8 +101,9 @@ function Pnt.calculator()
|
|||||||
setFont(45)
|
setFont(45)
|
||||||
if S.reg then gc.printf(S.reg,0,100,720,"right")end
|
if S.reg then gc.printf(S.reg,0,100,720,"right")end
|
||||||
if S.val then gc.printf(S.val,0,150,720,"right")end
|
if S.val then gc.printf(S.val,0,150,720,"right")end
|
||||||
setFont(50)
|
|
||||||
if S.sym then gc.print(S.sym,126,150)end
|
if S.sym then setFont(50)gc.print(S.sym,126,150)end
|
||||||
|
if S.pass then setFont(40)mStr(S.tip,640,10)end
|
||||||
end
|
end
|
||||||
function Pnt.load()
|
function Pnt.load()
|
||||||
local S=sceneTemp
|
local S=sceneTemp
|
||||||
@@ -111,6 +112,7 @@ function Pnt.load()
|
|||||||
gc.rectangle("fill",300,330,S.cur/S.tar*680,60,5)
|
gc.rectangle("fill",300,330,S.cur/S.tar*680,60,5)
|
||||||
gc.setColor(1,1,1)
|
gc.setColor(1,1,1)
|
||||||
gc.rectangle("line",300,330,680,60,5)
|
gc.rectangle("line",300,330,680,60,5)
|
||||||
|
if not setting.appLock then
|
||||||
setFont(35)
|
setFont(35)
|
||||||
gc.print(text.load[S.phase],340,335)
|
gc.print(text.load[S.phase],340,335)
|
||||||
if S.phase~=0 then
|
if S.phase~=0 then
|
||||||
@@ -118,6 +120,7 @@ function Pnt.load()
|
|||||||
end
|
end
|
||||||
setFont(25)
|
setFont(25)
|
||||||
mStr(S.tip,640,400)
|
mStr(S.tip,640,400)
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
local titleTransform={
|
local titleTransform={
|
||||||
@@ -312,10 +315,8 @@ end
|
|||||||
function Pnt.music()
|
function Pnt.music()
|
||||||
gc.setColor(1,1,1,.3+sin(Timer()*5)*.2)
|
gc.setColor(1,1,1,.3+sin(Timer()*5)*.2)
|
||||||
gc.rectangle("fill",45,98+30*sceneTemp,250,30)
|
gc.rectangle("fill",45,98+30*sceneTemp,250,30)
|
||||||
gc.setColor(.7,.7,.7)
|
gc.setColor(.7,.7,.7)gc.draw(drawableText.musicRoom,20,20)
|
||||||
gc.draw(drawableText.musicRoom,20,20)
|
gc.setColor(1,1,1)gc.draw(drawableText.musicRoom,22,23)
|
||||||
gc.setColor(1,1,1)
|
|
||||||
gc.draw(drawableText.musicRoom,22,23)
|
|
||||||
gc.draw(drawableText.nowPlaying,490,390)
|
gc.draw(drawableText.nowPlaying,490,390)
|
||||||
setFont(30)
|
setFont(30)
|
||||||
for i=1,BGM.len do
|
for i=1,BGM.len do
|
||||||
@@ -641,7 +642,7 @@ function Pnt.setting_video()
|
|||||||
mText(drawableText.setting_video,640,15)
|
mText(drawableText.setting_video,640,15)
|
||||||
end
|
end
|
||||||
function Pnt.setting_sound()
|
function Pnt.setting_sound()
|
||||||
gc.setColor(1,1,1,.8)
|
gc.setColor(1,1,1)
|
||||||
mText(drawableText.setting_sound,640,15)
|
mText(drawableText.setting_sound,640,15)
|
||||||
local t=Timer()
|
local t=Timer()
|
||||||
local _=sceneTemp.jump
|
local _=sceneTemp.jump
|
||||||
@@ -674,7 +675,8 @@ function Pnt.setting_control()
|
|||||||
gc.line(950,530,950,630)
|
gc.line(950,530,950,630)
|
||||||
|
|
||||||
--Texts
|
--Texts
|
||||||
gc.draw(drawableText.setting_control,80,50)
|
gc.setColor(.7,.7,.7)gc.draw(drawableText.setting_control,80,50)
|
||||||
|
gc.setColor(1,1,1)gc.draw(drawableText.setting_control,80,50)
|
||||||
setFont(50)
|
setFont(50)
|
||||||
gc.printf(text.preview,320,540,200,"right")
|
gc.printf(text.preview,320,540,200,"right")
|
||||||
|
|
||||||
@@ -744,7 +746,8 @@ function Pnt.setting_key()
|
|||||||
gc.draw(drawableText.ctrlSetHelp,50,650)
|
gc.draw(drawableText.ctrlSetHelp,50,650)
|
||||||
end
|
end
|
||||||
function Pnt.setting_skin()
|
function Pnt.setting_skin()
|
||||||
gc.setColor(1,1,1)
|
gc.setColor(.7,.7,.7)gc.draw(drawableText.setting_skin,80,50)
|
||||||
|
gc.setColor(1,1,1)gc.draw(drawableText.setting_skin,80,50)
|
||||||
for N=1,7 do
|
for N=1,7 do
|
||||||
local face=setting.face[N]
|
local face=setting.face[N]
|
||||||
local B=blocks[N][face]
|
local B=blocks[N][face]
|
||||||
@@ -760,7 +763,6 @@ function Pnt.setting_skin()
|
|||||||
for i=1,6 do
|
for i=1,6 do
|
||||||
gc.draw(blockSkin[11+i],570+60*i,610,nil,2)
|
gc.draw(blockSkin[11+i],570+60*i,610,nil,2)
|
||||||
end
|
end
|
||||||
gc.draw(drawableText.setting_skin,80,50)
|
|
||||||
end
|
end
|
||||||
function Pnt.setting_touch()
|
function Pnt.setting_touch()
|
||||||
gc.setColor(1,1,1)
|
gc.setColor(1,1,1)
|
||||||
|
|||||||
@@ -13,14 +13,15 @@ function sceneInit.calculator()
|
|||||||
val=0,
|
val=0,
|
||||||
sym=false,
|
sym=false,
|
||||||
pass=false,
|
pass=false,
|
||||||
|
tip=require("parts/getTip"),
|
||||||
}
|
}
|
||||||
end
|
end
|
||||||
function sceneInit.load()
|
function sceneInit.load()
|
||||||
sceneTemp={
|
sceneTemp={
|
||||||
phase=1,--Loading stage
|
phase=1,--Loading stage
|
||||||
cur=1,--Counter
|
cur=1,--Counter
|
||||||
tar=#VOC.name,--Loading bar lenth(current)
|
tar=#VOC.name,--Loading bar length(current)
|
||||||
tip=require("parts/getTip"),
|
tip=setting.appLock or require("parts/getTip"),
|
||||||
list={
|
list={
|
||||||
#VOC.name,
|
#VOC.name,
|
||||||
#BGM.list,
|
#BGM.list,
|
||||||
@@ -48,16 +49,9 @@ function sceneInit.main()
|
|||||||
BG.set("space")
|
BG.set("space")
|
||||||
BGM.play("blank")
|
BGM.play("blank")
|
||||||
|
|
||||||
game.frame=0
|
|
||||||
game.recording=false
|
|
||||||
game.replaying=false
|
|
||||||
game.seed=1046101471
|
|
||||||
game.rec={}
|
|
||||||
|
|
||||||
modeEnv={}
|
modeEnv={}
|
||||||
destroyPlayers()
|
|
||||||
|
|
||||||
--Create demo player
|
--Create demo player
|
||||||
|
destroyPlayers()
|
||||||
PLY.newDemoPlayer(1,900,35,1.1)
|
PLY.newDemoPlayer(1,900,35,1.1)
|
||||||
end
|
end
|
||||||
function sceneInit.music()
|
function sceneInit.music()
|
||||||
@@ -131,20 +125,20 @@ function sceneInit.pause(org)
|
|||||||
format("%d(%d-%d)",S.pend,S.recv,S.recv-S.pend),
|
format("%d(%d-%d)",S.pend,S.recv,S.recv-S.pend),
|
||||||
format("%d/%d/%d/%d",S.clears[1],S.clears[2],S.clears[3],S.clears[4]),
|
format("%d/%d/%d/%d",S.clears[1],S.clears[2],S.clears[3],S.clears[4]),
|
||||||
format("(%d)/%d/%d/%d",S.spins[1],S.spins[2],S.spins[3],S.spins[4]),
|
format("(%d)/%d/%d/%d",S.spins[1],S.spins[2],S.spins[3],S.spins[4]),
|
||||||
format("%d/%d;%d/%d",S.b2b,S.b3b,S.pc,S.hpc),
|
format("%d/%d ; %d/%d",S.b2b,S.b3b,S.pc,S.hpc),
|
||||||
format("%d[%.2f%%]",S.extraPiece,100*max(1-S.extraRate/S.piece,0)),
|
format("%d [%.2f%%]",S.extraPiece,100*max(1-S.extraRate/S.piece,0)),
|
||||||
},
|
},
|
||||||
|
|
||||||
--From right-down, 60 degree each
|
--From right-down, 60 degree each
|
||||||
radar={
|
radar={
|
||||||
(S.off+S.dig)/S.time*60,--DefPM
|
(S.off+S.dig)/S.time*60,--DefPM
|
||||||
(S.off)/S.time*60, --OffPM
|
(S.send+S.dig)/S.time*60,--ADPM
|
||||||
S.atk/S.time*60, --AtkPM
|
S.atk/S.time*60, --AtkPM
|
||||||
S.send/S.time*60, --SendPM
|
S.send/S.time*60, --SendPM
|
||||||
S.piece/S.time*24, --LinePM
|
S.piece/S.time*24, --LinePM
|
||||||
S.dig/S.time*60, --DigPM
|
S.dig/S.time*60, --DigPM
|
||||||
},
|
},
|
||||||
val={1/80,1/40,1/60,1/60,1/100,1/40},
|
val={1/80,1/80,1/80,1/60,1/100,1/40},
|
||||||
timing=org=="play",
|
timing=org=="play",
|
||||||
}
|
}
|
||||||
local _=sceneTemp
|
local _=sceneTemp
|
||||||
@@ -204,7 +198,7 @@ function sceneInit.setting_control()
|
|||||||
dir=1,
|
dir=1,
|
||||||
wait=30,
|
wait=30,
|
||||||
}
|
}
|
||||||
BG.set("game1")
|
BG.set("bg1")
|
||||||
end
|
end
|
||||||
function sceneInit.setting_key()
|
function sceneInit.setting_key()
|
||||||
sceneTemp={
|
sceneTemp={
|
||||||
@@ -214,7 +208,7 @@ function sceneInit.setting_key()
|
|||||||
}
|
}
|
||||||
end
|
end
|
||||||
function sceneInit.setting_touch()
|
function sceneInit.setting_touch()
|
||||||
BG.set("game3")
|
BG.set("rainbow")
|
||||||
sceneTemp={
|
sceneTemp={
|
||||||
default=1,
|
default=1,
|
||||||
snap=1,
|
snap=1,
|
||||||
@@ -271,7 +265,7 @@ function sceneInit.stat()
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
function sceneInit.history()
|
function sceneInit.history()
|
||||||
BG.set("game3")
|
BG.set("rainbow")
|
||||||
sceneTemp={
|
sceneTemp={
|
||||||
text=require("parts/updateLog"),--Text list
|
text=require("parts/updateLog"),--Text list
|
||||||
pos=1,--Scroll pos
|
pos=1,--Scroll pos
|
||||||
@@ -329,7 +323,7 @@ end
|
|||||||
local SCN={
|
local SCN={
|
||||||
cur="load",--Current scene
|
cur="load",--Current scene
|
||||||
swapping=false,--If Swapping
|
swapping=false,--If Swapping
|
||||||
swap={
|
stat={
|
||||||
tar=nil, --Swapping target
|
tar=nil, --Swapping target
|
||||||
style=nil, --Swapping style
|
style=nil, --Swapping style
|
||||||
mid=nil, --Loading point
|
mid=nil, --Loading point
|
||||||
@@ -340,7 +334,7 @@ local SCN={
|
|||||||
}--Scene datas, returned
|
}--Scene datas, returned
|
||||||
|
|
||||||
function SCN.swapUpdate()
|
function SCN.swapUpdate()
|
||||||
local S=SCN.swap
|
local S=SCN.stat
|
||||||
S.time=S.time-1
|
S.time=S.time-1
|
||||||
if S.time==S.mid then
|
if S.time==S.mid then
|
||||||
SCN.init(S.tar,SCN.cur)
|
SCN.init(S.tar,SCN.cur)
|
||||||
@@ -395,7 +389,7 @@ local swap={
|
|||||||
end},
|
end},
|
||||||
}--Scene swapping animations
|
}--Scene swapping animations
|
||||||
function SCN.swapTo(tar,style)--Parallel scene swapping, cannot back
|
function SCN.swapTo(tar,style)--Parallel scene swapping, cannot back
|
||||||
local S=SCN.swap
|
local S=SCN.stat
|
||||||
if not SCN.swapping and tar~=SCN.cur then
|
if not SCN.swapping and tar~=SCN.cur then
|
||||||
SCN.swapping=true
|
SCN.swapping=true
|
||||||
if not style then style="fade"end
|
if not style then style="fade"end
|
||||||
@@ -407,7 +401,7 @@ function SCN.swapTo(tar,style)--Parallel scene swapping, cannot back
|
|||||||
S.draw=swap[3]
|
S.draw=swap[3]
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
function SCN.goto(tar,style)--Normal scene swapping, can back
|
function SCN.go(tar,style)--Normal scene swapping, can back
|
||||||
SCN.push()SCN.swapTo(tar,style)
|
SCN.push()SCN.swapTo(tar,style)
|
||||||
end
|
end
|
||||||
function SCN.back()
|
function SCN.back()
|
||||||
|
|||||||
@@ -39,18 +39,15 @@ function Tmr.load()
|
|||||||
SKIN.load()
|
SKIN.load()
|
||||||
stat.run=stat.run+1
|
stat.run=stat.run+1
|
||||||
--------------------------
|
--------------------------
|
||||||
|
if not setting.appLock then
|
||||||
SFX.play("welcome_sfx")
|
SFX.play("welcome_sfx")
|
||||||
VOC.play("welcome")
|
VOC.play("welcome")
|
||||||
|
end
|
||||||
else
|
else
|
||||||
S.cur=S.cur+1
|
S.cur=S.cur+1
|
||||||
S.tar=S.cur
|
S.tar=S.cur
|
||||||
if S.cur>62.6 then
|
if S.cur>62.6 then
|
||||||
if newVersionLaunch then
|
SCN.swapTo(setting.appLock and "calculator"or"intro","none")
|
||||||
SCN.push("intro","fade")
|
|
||||||
SCN.swapTo("history","fade")
|
|
||||||
else
|
|
||||||
SCN.swapTo("intro","none")
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
loadingFinished=true
|
loadingFinished=true
|
||||||
return
|
return
|
||||||
@@ -131,7 +128,7 @@ function Tmr.mode(dt)
|
|||||||
cam.x1=cam.x1*.85+x*.15
|
cam.x1=cam.x1*.85+x*.15
|
||||||
cam.y1=cam.y1*.85+y*.15
|
cam.y1=cam.y1*.85+y*.15
|
||||||
cam.k1=cam.k1*.85+k*.15
|
cam.k1=cam.k1*.85+k*.15
|
||||||
local _=SCN.swap.tar
|
local _=SCN.stat.tar
|
||||||
cam.zoomMethod=_=="play"and 1 or _=="mode"and 2
|
cam.zoomMethod=_=="play"and 1 or _=="mode"and 2
|
||||||
if cam.zoomMethod==1 then
|
if cam.zoomMethod==1 then
|
||||||
if cam.sel then
|
if cam.sel then
|
||||||
@@ -354,8 +351,6 @@ function Tmr.staff(dt)
|
|||||||
S.time=S.time+S.v*dt
|
S.time=S.time+S.v*dt
|
||||||
if S.time>45 then
|
if S.time>45 then
|
||||||
S.time=45
|
S.time=45
|
||||||
elseif S.time<-10 then
|
|
||||||
S.time=-10
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
return Tmr
|
return Tmr
|
||||||
@@ -99,37 +99,37 @@ newSlider=WIDGET.newSlider
|
|||||||
local Widgets={
|
local Widgets={
|
||||||
load={},intro={},quit={},
|
load={},intro={},quit={},
|
||||||
calculator={
|
calculator={
|
||||||
newKey({name="_1", x=300,y=300,w=90,h=90, color="white", font=50,code=pressKey("1")}),
|
newKey({name="_1", x=150,y=300,w=90,h=90, color="white", font=50,code=pressKey("1")}),
|
||||||
newKey({name="_2", x=400,y=300,w=90,h=90, color="white", font=50,code=pressKey("2")}),
|
newKey({name="_2", x=250,y=300,w=90,h=90, color="white", font=50,code=pressKey("2")}),
|
||||||
newKey({name="_3", x=500,y=300,w=90,h=90, color="white", font=50,code=pressKey("3")}),
|
newKey({name="_3", x=350,y=300,w=90,h=90, color="white", font=50,code=pressKey("3")}),
|
||||||
newKey({name="_4", x=300,y=400,w=90,h=90, color="white", font=50,code=pressKey("4")}),
|
newKey({name="_4", x=150,y=400,w=90,h=90, color="white", font=50,code=pressKey("4")}),
|
||||||
newKey({name="_5", x=400,y=400,w=90,h=90, color="white", font=50,code=pressKey("5")}),
|
newKey({name="_5", x=250,y=400,w=90,h=90, color="white", font=50,code=pressKey("5")}),
|
||||||
newKey({name="_6", x=500,y=400,w=90,h=90, color="white", font=50,code=pressKey("6")}),
|
newKey({name="_6", x=350,y=400,w=90,h=90, color="white", font=50,code=pressKey("6")}),
|
||||||
newKey({name="_7", x=300,y=500,w=90,h=90, color="white", font=50,code=pressKey("7")}),
|
newKey({name="_7", x=150,y=500,w=90,h=90, color="white", font=50,code=pressKey("7")}),
|
||||||
newKey({name="_8", x=400,y=500,w=90,h=90, color="white", font=50,code=pressKey("8")}),
|
newKey({name="_8", x=250,y=500,w=90,h=90, color="white", font=50,code=pressKey("8")}),
|
||||||
newKey({name="_9", x=500,y=500,w=90,h=90, color="white", font=50,code=pressKey("9")}),
|
newKey({name="_9", x=350,y=500,w=90,h=90, color="white", font=50,code=pressKey("9")}),
|
||||||
newKey({name="_0", x=300,y=600,w=90,h=90, color="white", font=50,code=pressKey("0")}),
|
newKey({name="_0", x=150,y=600,w=90,h=90, color="white", font=50,code=pressKey("0")}),
|
||||||
newKey({name="<", x=400,y=600,w=90,h=90, color="lRed", font=50,code=pressKey("backspace")}),
|
newKey({name="<", x=250,y=600,w=90,h=90, color="lRed", font=50,code=pressKey("backspace")}),
|
||||||
newKey({name="=", x=500,y=600,w=90,h=90, color="lYellow",font=50,code=pressKey("return")}),
|
newKey({name="=", x=350,y=600,w=90,h=90, color="lYellow",font=50,code=pressKey("return")}),
|
||||||
newKey({name="+", x=600,y=300,w=90,h=90, color="lBlue", font=50,code=pressKey("+")}),
|
newKey({name="+", x=450,y=300,w=90,h=90, color="lBlue", font=50,code=pressKey("+")}),
|
||||||
newKey({name="-", x=600,y=400,w=90,h=90, color="lBlue", font=50,code=pressKey("-")}),
|
newKey({name="-", x=450,y=400,w=90,h=90, color="lBlue", font=50,code=pressKey("-")}),
|
||||||
newKey({name="*", x=600,y=500,w=90,h=90, color="lBlue", font=50,code=pressKey("*")}),
|
newKey({name="*", x=450,y=500,w=90,h=90, color="lBlue", font=50,code=pressKey("*")}),
|
||||||
newKey({name="/", x=600,y=600,w=90,h=90, color="lBlue", font=50,code=pressKey("/")}),
|
newKey({name="/", x=450,y=600,w=90,h=90, color="lBlue", font=50,code=pressKey("/")}),
|
||||||
newButton({name="play", x=800,y=600,w=180,h=90, color="lGreen", font=40,code=pressKey("space"),hide=function()return not sceneTemp.pass end}),
|
newButton({name="play", x=640,y=600,w=180,h=90, color="lGreen", font=40,code=pressKey("space"),hide=function()return not sceneTemp.pass end}),
|
||||||
},
|
},
|
||||||
main={
|
main={
|
||||||
newButton({name="play", x=150,y=280,w=200,h=160,color="lRed", font=55,code=function()SCN.goto("mode")end}),
|
newButton({name="play", x=150,y=280,w=200,h=160,color="lRed", font=55,code=function()SCN.go("mode")end}),
|
||||||
newButton({name="setting", x=370,y=280,w=200,h=160,color="lBlue", font=45,code=function()SCN.goto("setting_game")end}),
|
newButton({name="setting", x=370,y=280,w=200,h=160,color="lBlue", font=45,code=function()SCN.go("setting_game")end}),
|
||||||
newButton({name="music", x=590,y=280,w=200,h=160,color="lPurple",font=32,code=function()SCN.goto("music")end}),
|
newButton({name="music", x=590,y=280,w=200,h=160,color="lPurple",font=32,code=function()SCN.go("music")end}),
|
||||||
newButton({name="help", x=150,y=460,w=200,h=160,color="lYellow",font=50,code=function()SCN.goto("help")end}),
|
newButton({name="help", x=150,y=460,w=200,h=160,color="lYellow",font=50,code=function()SCN.go("help")end}),
|
||||||
newButton({name="stat", x=370,y=460,w=200,h=160,color="lCyan", font=43,code=function()SCN.goto("stat")end}),
|
newButton({name="stat", x=370,y=460,w=200,h=160,color="lCyan", font=43,code=function()SCN.go("stat")end}),
|
||||||
newButton({name="qplay", x=590,y=460,w=200,h=160,color="lOrange",font=43,code=function()SCN.push()loadGame(stat.lastPlay,true)end}),
|
newButton({name="qplay", x=590,y=460,w=200,h=160,color="lOrange",font=43,code=function()SCN.push()loadGame(stat.lastPlay,true)end}),
|
||||||
newButton({name="lang", x=150,y=610,w=160,h=100,color="lGreen", font=45,code=function()SCN.goto("setting_lang")end}),
|
newButton({name="lang", x=150,y=610,w=160,h=100,color="lGreen", font=45,code=function()SCN.go("setting_lang")end}),
|
||||||
newButton({name="quit", x=590,y=610,w=160,h=100,color="lGrey", font=45,code=function()VOC.play("bye")SCN.swapTo("quit","slowFade")end}),
|
newButton({name="quit", x=590,y=610,w=160,h=100,color="lGrey", font=45,code=function()VOC.play("bye")SCN.swapTo("quit","slowFade")end}),
|
||||||
},
|
},
|
||||||
mode={
|
mode={
|
||||||
newButton({name="setting", x=1100,y=540,w=240,h=90,color="lGreen", font=40,code=function()
|
newButton({name="setting", x=1100,y=540,w=240,h=90,color="lGreen", font=40,code=function()
|
||||||
SCN.goto("custom")
|
SCN.go("custom")
|
||||||
end,
|
end,
|
||||||
hide=function()
|
hide=function()
|
||||||
return mapCam.sel~="custom_clear" and mapCam.sel~="custom_puzzle"
|
return mapCam.sel~="custom_clear" and mapCam.sel~="custom_puzzle"
|
||||||
@@ -238,18 +238,18 @@ local Widgets={
|
|||||||
setting_game={
|
setting_game={
|
||||||
newButton({name="graphic", x=200, y=80, w=240,h=80, color="lCyan", font=35,code=function()SCN.swapTo("setting_video","swipe")end}),
|
newButton({name="graphic", x=200, y=80, w=240,h=80, color="lCyan", font=35,code=function()SCN.swapTo("setting_video","swipe")end}),
|
||||||
newButton({name="sound", x=1080, y=80, w=240,h=80, color="lCyan", font=35,code=function()SCN.swapTo("setting_sound","swipe")end}),
|
newButton({name="sound", x=1080, y=80, w=240,h=80, color="lCyan", font=35,code=function()SCN.swapTo("setting_sound","swipe")end}),
|
||||||
newButton({name="ctrl", x=290, y=220, w=320,h=80, color="lYellow",font=35,code=function()SCN.goto("setting_control")end}),
|
newButton({name="ctrl", x=290, y=220, w=320,h=80, color="lYellow",font=35,code=function()SCN.go("setting_control")end}),
|
||||||
newButton({name="key", x=640, y=220, w=320,h=80, color="lGreen", font=35,code=function()SCN.goto("setting_key")end}),
|
newButton({name="key", x=640, y=220, w=320,h=80, color="lGreen", font=35,code=function()SCN.go("setting_key")end}),
|
||||||
newButton({name="touch", x=990, y=220, w=320,h=80, color="lBlue", font=35,code=function()SCN.goto("setting_touch")end}),
|
newButton({name="touch", x=990, y=220, w=320,h=80, color="lBlue", font=35,code=function()SCN.go("setting_touch")end}),
|
||||||
newSlider({name="reTime", x=350, y=340, w=300,unit=10, font=30,disp=SETval("reTime"), code=SETsto("reTime")}),
|
newSlider({name="reTime", x=350, y=340, w=300,unit=10, font=30,disp=SETval("reTime"), code=SETsto("reTime")}),
|
||||||
newSlider({name="maxNext", x=350, y=440, w=300,unit=6, font=30,disp=SETval("maxNext"), code=SETsto("maxNext")}),
|
newSlider({name="maxNext", x=350, y=440, w=300,unit=6, font=30,disp=SETval("maxNext"), code=SETsto("maxNext")}),
|
||||||
newButton({name="layout", x=460, y=540, w=140,h=70,color="white", font=35,code=function()
|
newButton({name="layout", x=460, y=540, w=140,h=70,color="white", font=35,code=function()
|
||||||
SCN.goto("setting_skin")
|
SCN.go("setting_skin")
|
||||||
end}),
|
end}),
|
||||||
newSwitch({name="autoPause",x=1080, y=320, font=20,disp=SETval("autoPause"), code=SETrev("autoPause")}),
|
newSwitch({name="autoPause",x=1080, y=320, font=20,disp=SETval("autoPause"), code=SETrev("autoPause")}),
|
||||||
newSwitch({name="swap", x=1080, y=380, font=20,disp=SETval("swap"), code=SETrev("swap")}),
|
newSwitch({name="swap", x=1080, y=380, font=20,disp=SETval("swap"), code=SETrev("swap")}),
|
||||||
newSwitch({name="fine", x=1080, y=440, font=20,disp=SETval("fine"), code=SETrev("fine")}),
|
newSwitch({name="fine", x=1080, y=440, font=20,disp=SETval("fine"), code=SETrev("fine")}),
|
||||||
newSwitch({name="lock", x=1080, y=500, font=20,disp=SETval("lock"), code=SETrev("lock")}),
|
newSwitch({name="appLock", x=1080, y=500, font=20,disp=SETval("appLock"), code=SETrev("appLock")}),
|
||||||
newButton({name="back", x=1140, y=650, w=200,h=80,color="white", font=40,code=BACK}),
|
newButton({name="back", x=1140, y=650, w=200,h=80,color="white", font=40,code=BACK}),
|
||||||
},
|
},
|
||||||
setting_video={
|
setting_video={
|
||||||
@@ -260,11 +260,12 @@ local Widgets={
|
|||||||
newSwitch({name="center", x=500, y=180,font=35, disp=SETval("center"), code=SETrev("center")}),
|
newSwitch({name="center", x=500, y=180,font=35, disp=SETval("center"), code=SETrev("center")}),
|
||||||
newSwitch({name="grid", x=500, y=260,font=35, disp=SETval("grid"), code=SETrev("grid")}),
|
newSwitch({name="grid", x=500, y=260,font=35, disp=SETval("grid"), code=SETrev("grid")}),
|
||||||
newSwitch({name="bagLine", x=730, y=180,font=30, disp=SETval("bagLine"), code=SETrev("bagLine")}),
|
newSwitch({name="bagLine", x=730, y=180,font=30, disp=SETval("bagLine"), code=SETrev("bagLine")}),
|
||||||
newSlider({name="lockFX", x=350, y=340,w=373,unit=3, font=32,disp=SETval("lockFX"), code=SETsto("lockFX")}),
|
newSlider({name="lockFX", x=350, y=340,w=373,unit=5, font=32,disp=SETval("lockFX"), code=SETsto("lockFX")}),
|
||||||
newSlider({name="dropFX", x=350, y=400,w=373,unit=5, font=32,disp=SETval("dropFX"), code=SETsto("dropFX")}),
|
newSlider({name="dropFX", x=350, y=390,w=373,unit=5, font=32,disp=SETval("dropFX"), code=SETsto("dropFX")}),
|
||||||
newSlider({name="clearFX", x=350, y=460,w=373,unit=3, font=32,disp=SETval("clearFX"), code=SETsto("clearFX")}),
|
newSlider({name="moveFX", x=350, y=440,w=373,unit=5, font=32,disp=SETval("moveFX"), code=SETsto("moveFX")}),
|
||||||
newSlider({name="shakeFX", x=350, y=520,w=373,unit=5, font=32,disp=SETval("shakeFX"), code=SETsto("shakeFX")}),
|
newSlider({name="clearFX", x=350, y=490,w=373,unit=5, font=32,disp=SETval("clearFX"), code=SETsto("clearFX")}),
|
||||||
newSlider({name="atkFX", x=350, y=580,w=373,unit=5, font=32,disp=SETval("atkFX"), code=SETsto("atkFX")}),
|
newSlider({name="shakeFX", x=350, y=540,w=373,unit=5, font=32,disp=SETval("shakeFX"), code=SETsto("shakeFX")}),
|
||||||
|
newSlider({name="atkFX", x=350, y=590,w=373,unit=5, font=32,disp=SETval("atkFX"), code=SETsto("atkFX")}),
|
||||||
newSlider({name="frame", x=350, y=640,w=373,unit=10,font=30,
|
newSlider({name="frame", x=350, y=640,w=373,unit=10,font=30,
|
||||||
disp=function()
|
disp=function()
|
||||||
return setting.frameMul>35 and setting.frameMul/10 or setting.frameMul/5-4
|
return setting.frameMul>35 and setting.frameMul/10 or setting.frameMul/5-4
|
||||||
@@ -390,7 +391,7 @@ local Widgets={
|
|||||||
end}),
|
end}),
|
||||||
newButton({name="option", x=520,y=180,w=170,h=80,color="white",font=40,
|
newButton({name="option", x=520,y=180,w=170,h=80,color="white",font=40,
|
||||||
code=function()
|
code=function()
|
||||||
SCN.goto("setting_touchSwitch")
|
SCN.go("setting_touchSwitch")
|
||||||
end}),
|
end}),
|
||||||
newButton({name="back", x=760,y=180,w=170,h=80,color="white",font=40,code=BACK}),
|
newButton({name="back", x=760,y=180,w=170,h=80,color="white",font=40,code=BACK}),
|
||||||
newSlider({name="size", x=450,y=265,w=460,unit=14,font=40,
|
newSlider({name="size", x=450,y=265,w=460,unit=14,font=40,
|
||||||
@@ -436,7 +437,7 @@ local Widgets={
|
|||||||
newSwitch({name="icon", x=850, y=300, font=40,disp=SETval("VKIcon"),code=SETrev("VKIcon")}),
|
newSwitch({name="icon", x=850, y=300, font=40,disp=SETval("VKIcon"),code=SETrev("VKIcon")}),
|
||||||
newButton({name="tkset", x=1120, y=420, w=240,h=80,color="white",font=32,
|
newButton({name="tkset", x=1120, y=420, w=240,h=80,color="white",font=32,
|
||||||
code=function()
|
code=function()
|
||||||
SCN.goto("setting_trackSetting")
|
SCN.go("setting_trackSetting")
|
||||||
end,
|
end,
|
||||||
hide=function()
|
hide=function()
|
||||||
return not setting.VKTrack
|
return not setting.VKTrack
|
||||||
@@ -459,8 +460,8 @@ local Widgets={
|
|||||||
newButton({name="back", x=640, y=600,w=200,h=80,color="white",font=40,code=BACK}),
|
newButton({name="back", x=640, y=600,w=200,h=80,color="white",font=40,code=BACK}),
|
||||||
},
|
},
|
||||||
help={
|
help={
|
||||||
newButton({name="staff", x=980, y=500,w=150,h=80,color="white",font=32,code=function()SCN.goto("staff")end}),
|
newButton({name="staff", x=980, y=500,w=150,h=80,color="white",font=32,code=function()SCN.go("staff")end}),
|
||||||
newButton({name="his", x=1160, y=500,w=150,h=80,color="white",font=32,code=function()SCN.goto("history")end}),
|
newButton({name="his", x=1160, y=500,w=150,h=80,color="white",font=32,code=function()SCN.go("history")end}),
|
||||||
newButton({name="qq", x=1070, y=600,w=200,h=80,color="white",font=32,code=function()love.system.openURL("tencent://message/?uin=1046101471&Site=&Menu=yes")end,hide=mobileHide}),
|
newButton({name="qq", x=1070, y=600,w=200,h=80,color="white",font=32,code=function()love.system.openURL("tencent://message/?uin=1046101471&Site=&Menu=yes")end,hide=mobileHide}),
|
||||||
newButton({name="back", x=640, y=600,w=200,h=80,color="white",font=40,code=BACK}),
|
newButton({name="back", x=640, y=600,w=200,h=80,color="white",font=40,code=BACK}),
|
||||||
},
|
},
|
||||||
|
|||||||
2
conf.lua
2
conf.lua
@@ -1,4 +1,4 @@
|
|||||||
gameVersion="Alpha V0.10.3"
|
gameVersion="Alpha V0.10.6"
|
||||||
function love.conf(t)
|
function love.conf(t)
|
||||||
t.identity="Techmino"--Saving folder
|
t.identity="Techmino"--Saving folder
|
||||||
t.version="11.1"
|
t.version="11.1"
|
||||||
|
|||||||
57
main.lua
57
main.lua
@@ -3,9 +3,9 @@
|
|||||||
/_ __/___ _____ / /_ ____ ___ (_)____ ____
|
/_ __/___ _____ / /_ ____ ___ (_)____ ____
|
||||||
/ / / _ \ / ___// __ \ / __ `__ \ / // __ \ / __ \
|
/ / / _ \ / ___// __ \ / __ `__ \ / // __ \ / __ \
|
||||||
/ / / __// /__ / / / // / / / / // // / / // /_/ /
|
/ / / __// /__ / / / // / / / / // // / / // /_/ /
|
||||||
/_/ \___/ \___//_/ /_//_/ /_/ /_//_//_/ /_/ \____/
|
/_/ \___/ \___//_/ /_//_/ /_/ /_//_//_/ /_/ \____/
|
||||||
Techmino is my first "huge project"
|
Techmino is my first "huge project"
|
||||||
optimization is welcomed if you also love tetromino game
|
optimization is welcomed if you also love tetromino game
|
||||||
]]--
|
]]--
|
||||||
|
|
||||||
--?
|
--?
|
||||||
@@ -19,7 +19,6 @@ love.keyboard.setTextInput(false)
|
|||||||
love.mouse.setVisible(false)
|
love.mouse.setVisible(false)
|
||||||
|
|
||||||
system=love.system.getOS()
|
system=love.system.getOS()
|
||||||
game={}
|
|
||||||
mapCam={
|
mapCam={
|
||||||
sel=nil,--Selected mode ID
|
sel=nil,--Selected mode ID
|
||||||
|
|
||||||
@@ -42,7 +41,7 @@ preBag={}
|
|||||||
|
|
||||||
game={
|
game={
|
||||||
frame=0, --Frame count
|
frame=0, --Frame count
|
||||||
result=0, --Game result
|
result=false, --Game result (string)
|
||||||
pauseTime=0, --Time paused
|
pauseTime=0, --Time paused
|
||||||
pauseCount=0, --Pausing count
|
pauseCount=0, --Pausing count
|
||||||
garbageSpeed=1, --Garbage timing speed
|
garbageSpeed=1, --Garbage timing speed
|
||||||
@@ -50,7 +49,16 @@ game={
|
|||||||
warnLVL=0, --Warning level (show)
|
warnLVL=0, --Warning level (show)
|
||||||
recording=false, --If recording
|
recording=false, --If recording
|
||||||
replaying=false, --If replaying
|
replaying=false, --If replaying
|
||||||
rec={}, --Recording list, key-time
|
seed=math.random(999999999),--Game seed
|
||||||
|
setting={}, --Game settings
|
||||||
|
rec={}, --Recording list, key,time,key,time...
|
||||||
|
|
||||||
|
--Data for royale mode
|
||||||
|
stage=nil, --Game stage
|
||||||
|
mostBadge=nil, --Most badge owner
|
||||||
|
secBadge=nil, --Second badge owner
|
||||||
|
mostDangerous=nil, --Most dangerous player
|
||||||
|
secDangerous=nil, --Second dangerous player
|
||||||
}--Global game data
|
}--Global game data
|
||||||
players={alive={}}--Players data
|
players={alive={}}--Players data
|
||||||
curMode=nil--Current mode object
|
curMode=nil--Current mode object
|
||||||
@@ -91,6 +99,9 @@ else
|
|||||||
setting.swap=false
|
setting.swap=false
|
||||||
setting.vib=2
|
setting.vib=2
|
||||||
setting.powerInfo=true
|
setting.powerInfo=true
|
||||||
|
setting.fullscreen=true
|
||||||
|
love.window.setFullscreen(true)
|
||||||
|
love.resize(love.graphics.getWidth(),love.graphics.getHeight())
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
LANG.set(setting.lang)
|
LANG.set(setting.lang)
|
||||||
@@ -105,32 +116,34 @@ if fs.getInfo("tech_ultimate.dat")then fs.remove("tech_ultimate.dat")end
|
|||||||
if fs.getInfo("tech_ultimate+.dat")then fs.remove("tech_ultimate+.dat")end
|
if fs.getInfo("tech_ultimate+.dat")then fs.remove("tech_ultimate+.dat")end
|
||||||
|
|
||||||
--Update modeRanks
|
--Update modeRanks
|
||||||
R=modeRanks
|
do
|
||||||
for k,v in next,R do
|
local R=modeRanks
|
||||||
|
for k,v in next,R do
|
||||||
if type(k)=="number"then
|
if type(k)=="number"then
|
||||||
R[Modes[k].name],R[k]=R[k]
|
if Modes[k]and not R[Modes[k].name]then
|
||||||
break
|
R[Modes[k].name]=v
|
||||||
end
|
end
|
||||||
end
|
R[k]=nil
|
||||||
if R.master_adavnce then
|
end
|
||||||
|
end
|
||||||
|
if R.master_adavnce then
|
||||||
R.master_advance,R.master_adavnce=R.master_adavnce
|
R.master_advance,R.master_adavnce=R.master_adavnce
|
||||||
end
|
end
|
||||||
if not text.modes[stat.lastPlay]then
|
if not text.modes[stat.lastPlay]then
|
||||||
stat.lastPlay="sprint_10"
|
stat.lastPlay="sprint_10"
|
||||||
end
|
end
|
||||||
|
|
||||||
--Update data file
|
--Update data file
|
||||||
S=stat
|
local S=stat
|
||||||
if type(setting.spawn)~="number"then
|
if type(setting.spawn)~="number"then
|
||||||
setting.spawn=0
|
setting.spawn=0
|
||||||
end
|
end
|
||||||
if S.version~=gameVersion then
|
if S.version~=gameVersion then
|
||||||
S.version=gameVersion
|
S.version=gameVersion
|
||||||
TEXT.show(text.newVersion,640,200,30,"fly",.3)
|
|
||||||
newVersionLaunch=true
|
newVersionLaunch=true
|
||||||
|
|
||||||
fs.remove("sprintPenta.dat")
|
fs.remove("sprintPenta.dat")
|
||||||
fs.remove("master_adavnce.dat")
|
fs.remove("master_adavnce.dat")
|
||||||
fs.remove("master_beginner.dat")
|
fs.remove("master_beginner.dat")
|
||||||
|
end
|
||||||
end
|
end
|
||||||
R,S=nil
|
|
||||||
@@ -34,7 +34,7 @@ return{
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
end,
|
end,
|
||||||
bg="game4",bgm="way",
|
bg="rainbow2",bgm="way",
|
||||||
},
|
},
|
||||||
pauseLimit=true,
|
pauseLimit=true,
|
||||||
load=function()
|
load=function()
|
||||||
|
|||||||
@@ -43,7 +43,7 @@ return{
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
end,
|
end,
|
||||||
bg="game4",bgm="shining terminal",
|
bg="rainbow2",bgm="shining terminal",
|
||||||
},
|
},
|
||||||
pauseLimit=true,
|
pauseLimit=true,
|
||||||
load=function()
|
load=function()
|
||||||
|
|||||||
@@ -13,7 +13,7 @@ return{
|
|||||||
hold=false,
|
hold=false,
|
||||||
dropPiece=function(P)P:lose()end,
|
dropPiece=function(P)P:lose()end,
|
||||||
task=nil,
|
task=nil,
|
||||||
bg="game1",bgm="newera",
|
bg="bg1",bgm="newera",
|
||||||
},
|
},
|
||||||
pauseLimit=true,
|
pauseLimit=true,
|
||||||
load=function()
|
load=function()
|
||||||
|
|||||||
@@ -4,8 +4,9 @@ return{
|
|||||||
color=color.magenta,
|
color=color.magenta,
|
||||||
env={
|
env={
|
||||||
drop=15,lock=45,
|
drop=15,lock=45,
|
||||||
fall=10,lock=60,
|
fall=10,
|
||||||
center=false,
|
center=false,
|
||||||
|
dropFX=0,lockFX=0,
|
||||||
visible="none",
|
visible="none",
|
||||||
dropPiece=PLY.reach_winCheck,
|
dropPiece=PLY.reach_winCheck,
|
||||||
freshLimit=15,
|
freshLimit=15,
|
||||||
|
|||||||
@@ -7,7 +7,6 @@ return{
|
|||||||
freshLimit=10,
|
freshLimit=10,
|
||||||
visible="fast",
|
visible="fast",
|
||||||
dropPiece=PLY.reach_winCheck,
|
dropPiece=PLY.reach_winCheck,
|
||||||
freshLimit=10,
|
|
||||||
target=200,
|
target=200,
|
||||||
bg="glow",bgm="reason",
|
bg="glow",bgm="reason",
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -31,7 +31,11 @@ return{
|
|||||||
end
|
end
|
||||||
modeEnv._20G=modeEnv.drop==0
|
modeEnv._20G=modeEnv.drop==0
|
||||||
modeEnv.oncehold=customSel[6]==1
|
modeEnv.oncehold=customSel[6]==1
|
||||||
if preBag[1]then modeEnv.bag=preBag end
|
if preBag[1]then
|
||||||
|
modeEnv.bag=preBag
|
||||||
|
else
|
||||||
|
modeEnv.bag=nil
|
||||||
|
end
|
||||||
modeEnv.target=0
|
modeEnv.target=0
|
||||||
PLY.newPlayer(1,340,15)
|
PLY.newPlayer(1,340,15)
|
||||||
local L=modeEnv.opponent
|
local L=modeEnv.opponent
|
||||||
|
|||||||
@@ -37,7 +37,7 @@ return{
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
end,
|
end,
|
||||||
bg="game4",bgm="shining terminal",
|
bg="rainbow2",bgm="shining terminal",
|
||||||
},
|
},
|
||||||
pauseLimit=true,
|
pauseLimit=true,
|
||||||
load=function()
|
load=function()
|
||||||
|
|||||||
@@ -37,7 +37,7 @@ return{
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
end,
|
end,
|
||||||
bg="game4",bgm="way",
|
bg="rainbow2",bgm="way",
|
||||||
},
|
},
|
||||||
pauseLimit=true,
|
pauseLimit=true,
|
||||||
load=function()
|
load=function()
|
||||||
|
|||||||
@@ -16,7 +16,7 @@ return{
|
|||||||
D.event=D.event+1
|
D.event=D.event+1
|
||||||
end
|
end
|
||||||
end,
|
end,
|
||||||
bg="game2",bgm="way",
|
bg="bg2",bgm="way",
|
||||||
},
|
},
|
||||||
pauseLimit=true,
|
pauseLimit=true,
|
||||||
load=function()
|
load=function()
|
||||||
|
|||||||
@@ -15,7 +15,7 @@ return{
|
|||||||
D.event=D.event+1
|
D.event=D.event+1
|
||||||
end
|
end
|
||||||
end,
|
end,
|
||||||
bg="game2",bgm="shining terminal",
|
bg="bg2",bgm="shining terminal",
|
||||||
},
|
},
|
||||||
pauseLimit=true,
|
pauseLimit=true,
|
||||||
load=function()
|
load=function()
|
||||||
|
|||||||
@@ -1,9 +1,28 @@
|
|||||||
local format=string.format
|
local format=string.format
|
||||||
local function check_rise(P)
|
local function check_rise(P)
|
||||||
if #P.clearedRow==0 then
|
if #P.clearedRow==0 then
|
||||||
|
local L=P.garbageBeneath
|
||||||
|
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 i=1,8-P.garbageBeneath do
|
for i=1,8-P.garbageBeneath do
|
||||||
P:garbageRise(13,1,P:RND(10))
|
P:garbageRise(13,1,P:RND(10))
|
||||||
end
|
end
|
||||||
|
else
|
||||||
|
if P.garbageBeneath==0 then
|
||||||
|
P:showTextF(text.awesome,0,-120,80,"beat",.6)
|
||||||
|
SFX.play("clear")
|
||||||
|
BG.send(26)
|
||||||
|
for i=1,8-P.garbageBeneath do
|
||||||
|
P:garbageRise(13,1,P:RND(10))
|
||||||
|
end
|
||||||
|
else
|
||||||
|
BG.send(#P.clearedRow)
|
||||||
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
@@ -13,8 +32,8 @@ return{
|
|||||||
drop=1e99,lock=1e99,
|
drop=1e99,lock=1e99,
|
||||||
oncehold=false,
|
oncehold=false,
|
||||||
dropPiece=check_rise,
|
dropPiece=check_rise,
|
||||||
pushSpeed=1,
|
pushSpeed=1.2,
|
||||||
bg="glow",bgm="infinite",
|
bg="wing",bgm="infinite",
|
||||||
},
|
},
|
||||||
load=function()
|
load=function()
|
||||||
PLY.newPlayer(1,340,15)
|
PLY.newPlayer(1,340,15)
|
||||||
|
|||||||
@@ -21,7 +21,7 @@ return{
|
|||||||
mindas=7,minarr=1,minsdarr=1,
|
mindas=7,minarr=1,minsdarr=1,
|
||||||
drop=.5,wait=8,fall=20,
|
drop=.5,wait=8,fall=20,
|
||||||
target=50,dropPiece=check,
|
target=50,dropPiece=check,
|
||||||
bg="game2",bgm="push",
|
bg="bg2",bgm="push",
|
||||||
},
|
},
|
||||||
pauseLimit=true,
|
pauseLimit=true,
|
||||||
slowMark=true,
|
slowMark=true,
|
||||||
@@ -42,7 +42,7 @@ return{
|
|||||||
if L>=200 then
|
if L>=200 then
|
||||||
local T=P.stat.time
|
local T=P.stat.time
|
||||||
return
|
return
|
||||||
T<=200 and 5 or
|
T<=230 and 5 or
|
||||||
T<=270 and 4 or
|
T<=270 and 4 or
|
||||||
3
|
3
|
||||||
else
|
else
|
||||||
|
|||||||
@@ -17,11 +17,10 @@ return{
|
|||||||
color=color.green,
|
color=color.green,
|
||||||
env={
|
env={
|
||||||
noFly=true,
|
noFly=true,
|
||||||
minsdarr=1,
|
|
||||||
wait=8,fall=20,
|
wait=8,fall=20,
|
||||||
target=10,dropPiece=check_LVup,
|
target=10,dropPiece=check_LVup,
|
||||||
mindas=7,minarr=1,minsdarr=1,
|
mindas=7,minarr=1,minsdarr=1,
|
||||||
bg="game2",bgm="push",
|
bg="bg2",bgm="push",
|
||||||
},
|
},
|
||||||
pauseLimit=true,
|
pauseLimit=true,
|
||||||
slowMark=true,
|
slowMark=true,
|
||||||
@@ -42,8 +41,8 @@ return{
|
|||||||
if L>=200 then
|
if L>=200 then
|
||||||
local T=P.stat.time
|
local T=P.stat.time
|
||||||
return
|
return
|
||||||
T<=226 and 5 or
|
T<=230 and 5 or
|
||||||
T<=262 and 4 or
|
T<=270 and 4 or
|
||||||
3
|
3
|
||||||
else
|
else
|
||||||
return
|
return
|
||||||
|
|||||||
@@ -17,7 +17,7 @@ local function score(P)
|
|||||||
--Level up!
|
--Level up!
|
||||||
local s=P.modeData.event+1;P.modeData.event=s
|
local s=P.modeData.event+1;P.modeData.event=s
|
||||||
local E=P.gameEnv
|
local E=P.gameEnv
|
||||||
BG.set(s==1 and"game3"or s==2 and"game4"or s==3 and"game5"or s==4 and"game6"or"game5")
|
BG.set(s==1 and"rainbow"or s==2 and"rainbow2"or s==3 and"lightning"or s==4 and"lightning2"or"lightning")
|
||||||
E.lock=death_lock[s]
|
E.lock=death_lock[s]
|
||||||
E.wait=death_wait[s]
|
E.wait=death_wait[s]
|
||||||
E.fall=death_fall[s]
|
E.fall=death_fall[s]
|
||||||
@@ -44,7 +44,7 @@ return{
|
|||||||
fall=death_fall[1],
|
fall=death_fall[1],
|
||||||
dropPiece=score,
|
dropPiece=score,
|
||||||
freshLimit=15,
|
freshLimit=15,
|
||||||
bg="game2",bgm="secret7th",
|
bg="bg2",bgm="secret7th",
|
||||||
},
|
},
|
||||||
slowMark=true,
|
slowMark=true,
|
||||||
load=function()
|
load=function()
|
||||||
|
|||||||
@@ -16,7 +16,7 @@ local function score(P)
|
|||||||
--Level up!
|
--Level up!
|
||||||
local s=P.modeData.event+1;P.modeData.event=s
|
local s=P.modeData.event+1;P.modeData.event=s
|
||||||
local E=P.gameEnv
|
local E=P.gameEnv
|
||||||
BG.set(s==1 and"game1"or s==2 and"game2"or s==3 and"game3"or "game4")
|
BG.set(s==1 and"bg1"or s==2 and"bg2"or s==3 and"rainbow"or "rainbow2")
|
||||||
E.lock=rush_lock[s]
|
E.lock=rush_lock[s]
|
||||||
E.wait=rush_wait[s]
|
E.wait=rush_wait[s]
|
||||||
E.fall=rush_fall[s]
|
E.fall=rush_fall[s]
|
||||||
@@ -48,7 +48,7 @@ return{
|
|||||||
fall=rush_fall[1],
|
fall=rush_fall[1],
|
||||||
dropPiece=score,
|
dropPiece=score,
|
||||||
freshLimit=15,
|
freshLimit=15,
|
||||||
bg="game1",bgm="secret8th",
|
bg="bg1",bgm="secret8th",
|
||||||
},
|
},
|
||||||
slowMark=true,
|
slowMark=true,
|
||||||
load=function()
|
load=function()
|
||||||
|
|||||||
@@ -46,7 +46,7 @@ return{
|
|||||||
dropPiece=score,
|
dropPiece=score,
|
||||||
freshLimit=15,
|
freshLimit=15,
|
||||||
easyFresh=false,bone=true,
|
easyFresh=false,bone=true,
|
||||||
bg="none",bgm="distortion",
|
bg="lightning",bgm="distortion",
|
||||||
},
|
},
|
||||||
slowMark=true,
|
slowMark=true,
|
||||||
load=function()
|
load=function()
|
||||||
|
|||||||
@@ -16,7 +16,7 @@ return{
|
|||||||
drop=1e99,lock=1e99,
|
drop=1e99,lock=1e99,
|
||||||
oncehold=false,
|
oncehold=false,
|
||||||
dropPiece=update_round,
|
dropPiece=update_round,
|
||||||
bg="game3",bgm="push",
|
bg="rainbow",bgm="push",
|
||||||
},
|
},
|
||||||
load=function()
|
load=function()
|
||||||
PLY.newPlayer(1,340,15)
|
PLY.newPlayer(1,340,15)
|
||||||
|
|||||||
@@ -16,7 +16,7 @@ return{
|
|||||||
drop=1e99,lock=1e99,
|
drop=1e99,lock=1e99,
|
||||||
oncehold=false,
|
oncehold=false,
|
||||||
dropPiece=update_round,
|
dropPiece=update_round,
|
||||||
bg="game3",bgm="push",
|
bg="rainbow",bgm="push",
|
||||||
},
|
},
|
||||||
load=function()
|
load=function()
|
||||||
PLY.newPlayer(1,340,15)
|
PLY.newPlayer(1,340,15)
|
||||||
|
|||||||
@@ -16,7 +16,7 @@ return{
|
|||||||
drop=1e99,lock=1e99,
|
drop=1e99,lock=1e99,
|
||||||
oncehold=false,
|
oncehold=false,
|
||||||
dropPiece=update_round,
|
dropPiece=update_round,
|
||||||
bg="game3",bgm="push",
|
bg="rainbow",bgm="push",
|
||||||
},
|
},
|
||||||
load=function()
|
load=function()
|
||||||
PLY.newPlayer(1,340,15)
|
PLY.newPlayer(1,340,15)
|
||||||
|
|||||||
@@ -16,7 +16,7 @@ return{
|
|||||||
drop=1e99,lock=1e99,
|
drop=1e99,lock=1e99,
|
||||||
oncehold=false,
|
oncehold=false,
|
||||||
dropPiece=update_round,
|
dropPiece=update_round,
|
||||||
bg="game3",bgm="push",
|
bg="rainbow",bgm="push",
|
||||||
},
|
},
|
||||||
load=function()
|
load=function()
|
||||||
PLY.newPlayer(1,340,15)
|
PLY.newPlayer(1,340,15)
|
||||||
|
|||||||
@@ -16,7 +16,7 @@ return{
|
|||||||
drop=1e99,lock=1e99,
|
drop=1e99,lock=1e99,
|
||||||
oncehold=false,
|
oncehold=false,
|
||||||
dropPiece=update_round,
|
dropPiece=update_round,
|
||||||
bg="game3",bgm="push",
|
bg="rainbow",bgm="push",
|
||||||
},
|
},
|
||||||
load=function()
|
load=function()
|
||||||
PLY.newPlayer(1,340,15)
|
PLY.newPlayer(1,340,15)
|
||||||
|
|||||||
@@ -3,7 +3,7 @@ return{
|
|||||||
env={
|
env={
|
||||||
drop=60,lock=60,
|
drop=60,lock=60,
|
||||||
freshLimit=15,
|
freshLimit=15,
|
||||||
bg="game2",bgm="race",
|
bg="bg2",bgm="race",
|
||||||
},
|
},
|
||||||
pauseLimit=true,
|
pauseLimit=true,
|
||||||
load=function()
|
load=function()
|
||||||
|
|||||||
@@ -3,7 +3,7 @@ return{
|
|||||||
env={
|
env={
|
||||||
drop=60,lock=60,
|
drop=60,lock=60,
|
||||||
freshLimit=15,
|
freshLimit=15,
|
||||||
bg="game2",bgm="race",
|
bg="bg2",bgm="race",
|
||||||
},
|
},
|
||||||
pauseLimit=true,
|
pauseLimit=true,
|
||||||
load=function()
|
load=function()
|
||||||
|
|||||||
@@ -3,7 +3,7 @@ return{
|
|||||||
env={
|
env={
|
||||||
drop=60,lock=60,
|
drop=60,lock=60,
|
||||||
freshLimit=15,
|
freshLimit=15,
|
||||||
bg="game2",bgm="race",
|
bg="bg2",bgm="race",
|
||||||
},
|
},
|
||||||
pauseLimit=true,
|
pauseLimit=true,
|
||||||
load=function()
|
load=function()
|
||||||
|
|||||||
@@ -3,7 +3,7 @@ return{
|
|||||||
env={
|
env={
|
||||||
drop=60,lock=60,
|
drop=60,lock=60,
|
||||||
freshLimit=15,
|
freshLimit=15,
|
||||||
bg="game2",bgm="race",
|
bg="bg2",bgm="race",
|
||||||
},
|
},
|
||||||
pauseLimit=true,
|
pauseLimit=true,
|
||||||
load=function()
|
load=function()
|
||||||
|
|||||||
@@ -3,7 +3,7 @@ return{
|
|||||||
env={
|
env={
|
||||||
drop=60,lock=60,
|
drop=60,lock=60,
|
||||||
freshLimit=15,
|
freshLimit=15,
|
||||||
bg="game2",bgm="race",
|
bg="bg2",bgm="race",
|
||||||
},
|
},
|
||||||
pauseLimit=true,
|
pauseLimit=true,
|
||||||
load=function()
|
load=function()
|
||||||
|
|||||||
@@ -5,7 +5,7 @@ return{
|
|||||||
env={
|
env={
|
||||||
drop=60,lock=60,
|
drop=60,lock=60,
|
||||||
target=10,dropPiece=PLY.reach_winCheck,
|
target=10,dropPiece=PLY.reach_winCheck,
|
||||||
bg="game2",bgm="race",
|
bg="bg2",bgm="race",
|
||||||
},
|
},
|
||||||
load=function()
|
load=function()
|
||||||
PLY.newPlayer(1,340,15)
|
PLY.newPlayer(1,340,15)
|
||||||
|
|||||||
@@ -5,7 +5,7 @@ return{
|
|||||||
env={
|
env={
|
||||||
drop=60,lock=60,
|
drop=60,lock=60,
|
||||||
target=100,dropPiece=PLY.reach_winCheck,
|
target=100,dropPiece=PLY.reach_winCheck,
|
||||||
bg="game2",bgm="race",
|
bg="bg2",bgm="race",
|
||||||
},
|
},
|
||||||
load=function()
|
load=function()
|
||||||
PLY.newPlayer(1,340,15)
|
PLY.newPlayer(1,340,15)
|
||||||
@@ -33,7 +33,7 @@ return{
|
|||||||
T<=90 and 4 or
|
T<=90 and 4 or
|
||||||
T<=136 and 3 or
|
T<=136 and 3 or
|
||||||
T<=196 and 2 or
|
T<=196 and 2 or
|
||||||
T<=260 and 1 or
|
T<=240 and 1 or
|
||||||
0
|
0
|
||||||
end,
|
end,
|
||||||
}
|
}
|
||||||
@@ -5,7 +5,7 @@ return{
|
|||||||
env={
|
env={
|
||||||
drop=60,lock=60,
|
drop=60,lock=60,
|
||||||
target=1000,dropPiece=PLY.reach_winCheck,
|
target=1000,dropPiece=PLY.reach_winCheck,
|
||||||
bg="game3",bgm="push",
|
bg="rainbow",bgm="push",
|
||||||
},
|
},
|
||||||
load=function()
|
load=function()
|
||||||
PLY.newPlayer(1,340,15)
|
PLY.newPlayer(1,340,15)
|
||||||
@@ -30,10 +30,10 @@ return{
|
|||||||
local T=P.stat.time
|
local T=P.stat.time
|
||||||
return
|
return
|
||||||
T<=626 and 5 or
|
T<=626 and 5 or
|
||||||
T<=888 and 4 or
|
T<=800 and 4 or
|
||||||
T<=1140 and 3 or
|
T<=900 and 3 or
|
||||||
T<=1406 and 2 or
|
T<=1050 and 2 or
|
||||||
T<=1626 and 1 or
|
T<=1200 and 1 or
|
||||||
0
|
0
|
||||||
end,
|
end,
|
||||||
}
|
}
|
||||||
@@ -5,7 +5,7 @@ return{
|
|||||||
env={
|
env={
|
||||||
drop=60,lock=60,
|
drop=60,lock=60,
|
||||||
target=20,dropPiece=PLY.reach_winCheck,
|
target=20,dropPiece=PLY.reach_winCheck,
|
||||||
bg="game2",bgm="race",
|
bg="bg2",bgm="race",
|
||||||
},
|
},
|
||||||
load=function()
|
load=function()
|
||||||
PLY.newPlayer(1,340,15)
|
PLY.newPlayer(1,340,15)
|
||||||
|
|||||||
@@ -5,7 +5,7 @@ return{
|
|||||||
env={
|
env={
|
||||||
drop=60,lock=60,
|
drop=60,lock=60,
|
||||||
target=40,dropPiece=PLY.reach_winCheck,
|
target=40,dropPiece=PLY.reach_winCheck,
|
||||||
bg="game2",bgm="race",
|
bg="bg2",bgm="race",
|
||||||
},
|
},
|
||||||
load=function()
|
load=function()
|
||||||
PLY.newPlayer(1,340,15)
|
PLY.newPlayer(1,340,15)
|
||||||
|
|||||||
@@ -5,7 +5,7 @@ return{
|
|||||||
env={
|
env={
|
||||||
drop=60,lock=60,
|
drop=60,lock=60,
|
||||||
target=400,dropPiece=PLY.reach_winCheck,
|
target=400,dropPiece=PLY.reach_winCheck,
|
||||||
bg="game3",bgm="push",
|
bg="rainbow",bgm="push",
|
||||||
},
|
},
|
||||||
load=function()
|
load=function()
|
||||||
PLY.newPlayer(1,340,15)
|
PLY.newPlayer(1,340,15)
|
||||||
@@ -30,10 +30,10 @@ return{
|
|||||||
local T=P.stat.time
|
local T=P.stat.time
|
||||||
return
|
return
|
||||||
T<=300 and 5 or
|
T<=300 and 5 or
|
||||||
T<=340 and 4 or
|
T<=330 and 4 or
|
||||||
T<=462 and 3 or
|
T<=360 and 3 or
|
||||||
T<=555 and 2 or
|
T<=390 and 2 or
|
||||||
T<=626 and 1 or
|
T<=420 and 1 or
|
||||||
0
|
0
|
||||||
end,
|
end,
|
||||||
}
|
}
|
||||||
@@ -24,7 +24,7 @@ return{
|
|||||||
Fkey=selectTarget,
|
Fkey=selectTarget,
|
||||||
pushSpeed=2,
|
pushSpeed=2,
|
||||||
freshLimit=15,
|
freshLimit=15,
|
||||||
bg="game3",bgm="rockblock",
|
bg="rainbow",bgm="rockblock",
|
||||||
},
|
},
|
||||||
load=function()
|
load=function()
|
||||||
royaleData={
|
royaleData={
|
||||||
@@ -33,7 +33,7 @@ return{
|
|||||||
}
|
}
|
||||||
PLY.newPlayer(1,340,15)
|
PLY.newPlayer(1,340,15)
|
||||||
local L={}for i=1,49 do L[i]=true end
|
local L={}for i=1,49 do L[i]=true end
|
||||||
local t=system~="Windows"and 0 or 2
|
local t=CCloader_filename[system] and 2 or 0
|
||||||
while t>0 do
|
while t>0 do
|
||||||
local r=rnd(2,49)
|
local r=rnd(2,49)
|
||||||
if L[r]then L[r],t=false,t-1 end
|
if L[r]then L[r],t=false,t-1 end
|
||||||
@@ -43,7 +43,7 @@ return{
|
|||||||
if L[n]then
|
if L[n]then
|
||||||
PLY.newAIPlayer(n,78*i-54,115*j-98,.09,AITemplate("9S",rnd(2,5)))
|
PLY.newAIPlayer(n,78*i-54,115*j-98,.09,AITemplate("9S",rnd(2,5)))
|
||||||
else
|
else
|
||||||
PLY.newAIPlayer(n,78*i-54,115*j-98,.09,AITemplate("CC",rnd(2,5)-1,2,true,10000))
|
PLY.newAIPlayer(n,78*i-54,115*j-98,.09,AITemplate("CC",rnd(3,5),2,true,10000))
|
||||||
end
|
end
|
||||||
n=n+1
|
n=n+1
|
||||||
end end
|
end end
|
||||||
@@ -51,7 +51,7 @@ return{
|
|||||||
if L[n]then
|
if L[n]then
|
||||||
PLY.newAIPlayer(n,78*i+267,115*j-98,.09,AITemplate("9S",rnd(2,5)))
|
PLY.newAIPlayer(n,78*i+267,115*j-98,.09,AITemplate("9S",rnd(2,5)))
|
||||||
else
|
else
|
||||||
PLY.newAIPlayer(n,78*i+267,115*j-98,.09,AITemplate("CC",rnd(2,5)-1,2,true,10000))
|
PLY.newAIPlayer(n,78*i+267,115*j-98,.09,AITemplate("CC",rnd(3,5),2,true,10000))
|
||||||
end
|
end
|
||||||
n=n+1
|
n=n+1
|
||||||
end end
|
end end
|
||||||
|
|||||||
@@ -24,7 +24,7 @@ return{
|
|||||||
Fkey=selectTarget,
|
Fkey=selectTarget,
|
||||||
pushSpeed=2,
|
pushSpeed=2,
|
||||||
freshLimit=15,
|
freshLimit=15,
|
||||||
bg="game3",bgm="rockblock",
|
bg="rainbow",bgm="rockblock",
|
||||||
},
|
},
|
||||||
load=function()
|
load=function()
|
||||||
royaleData={
|
royaleData={
|
||||||
@@ -33,7 +33,7 @@ return{
|
|||||||
}
|
}
|
||||||
PLY.newPlayer(1,340,15)
|
PLY.newPlayer(1,340,15)
|
||||||
local L={}for i=1,49 do L[i]=true end
|
local L={}for i=1,49 do L[i]=true end
|
||||||
local t=system~="Windows"and 0 or 4
|
local t=CCloader_filename[system] and 4 or 0
|
||||||
while t>0 do
|
while t>0 do
|
||||||
local r=rnd(2,49)
|
local r=rnd(2,49)
|
||||||
if L[r]then L[r],t=false,t-1 end
|
if L[r]then L[r],t=false,t-1 end
|
||||||
@@ -43,7 +43,7 @@ return{
|
|||||||
if L[n]then
|
if L[n]then
|
||||||
PLY.newAIPlayer(n,78*i-54,115*j-98,.09,AITemplate("9S",rnd(4,7)))
|
PLY.newAIPlayer(n,78*i-54,115*j-98,.09,AITemplate("9S",rnd(4,7)))
|
||||||
else
|
else
|
||||||
PLY.newAIPlayer(n,78*i-54,115*j-98,.09,AITemplate("CC",rnd(4,7)-1,3,true,20000))
|
PLY.newAIPlayer(n,78*i-54,115*j-98,.09,AITemplate("CC",rnd(6,8),3,true,20000))
|
||||||
end
|
end
|
||||||
n=n+1
|
n=n+1
|
||||||
end end
|
end end
|
||||||
@@ -51,7 +51,7 @@ return{
|
|||||||
if L[n]then
|
if L[n]then
|
||||||
PLY.newAIPlayer(n,78*i+267,115*j-98,.09,AITemplate("9S",rnd(4,7)))
|
PLY.newAIPlayer(n,78*i+267,115*j-98,.09,AITemplate("9S",rnd(4,7)))
|
||||||
else
|
else
|
||||||
PLY.newAIPlayer(n,78*i+267,115*j-98,.09,AITemplate("CC",rnd(4,7)-1,3,true,20000))
|
PLY.newAIPlayer(n,78*i+267,115*j-98,.09,AITemplate("CC",rnd(6,8),3,true,20000))
|
||||||
end
|
end
|
||||||
n=n+1
|
n=n+1
|
||||||
end end
|
end end
|
||||||
|
|||||||
@@ -24,7 +24,7 @@ return{
|
|||||||
Fkey=selectTarget,
|
Fkey=selectTarget,
|
||||||
pushSpeed=2,
|
pushSpeed=2,
|
||||||
freshLimit=15,
|
freshLimit=15,
|
||||||
bg="game3",bgm="rockblock",
|
bg="rainbow",bgm="rockblock",
|
||||||
},
|
},
|
||||||
load=function()
|
load=function()
|
||||||
royaleData={
|
royaleData={
|
||||||
@@ -33,7 +33,7 @@ return{
|
|||||||
}
|
}
|
||||||
PLY.newPlayer(1,340,15)
|
PLY.newPlayer(1,340,15)
|
||||||
local L={}for i=1,49 do L[i]=true end
|
local L={}for i=1,49 do L[i]=true end
|
||||||
local t=system~="Windows"and 0 or 6
|
local t=CCloader_filename[system] and 6 or 0
|
||||||
while t>0 do
|
while t>0 do
|
||||||
local r=rnd(2,49)
|
local r=rnd(2,49)
|
||||||
if L[r]then L[r],t=false,t-1 end
|
if L[r]then L[r],t=false,t-1 end
|
||||||
@@ -43,7 +43,7 @@ return{
|
|||||||
if L[n]then
|
if L[n]then
|
||||||
PLY.newAIPlayer(n,78*i-54,115*j-98,.09,AITemplate("9S",rnd(8,10)))
|
PLY.newAIPlayer(n,78*i-54,115*j-98,.09,AITemplate("9S",rnd(8,10)))
|
||||||
else
|
else
|
||||||
PLY.newAIPlayer(n,78*i-54,115*j-98,.09,AITemplate("CC",rnd(8,10)-1,4,true,30000))
|
PLY.newAIPlayer(n,78*i-54,115*j-98,.09,AITemplate("CC",rnd(9,10),4,true,30000))
|
||||||
end
|
end
|
||||||
n=n+1
|
n=n+1
|
||||||
end end
|
end end
|
||||||
@@ -51,7 +51,7 @@ return{
|
|||||||
if L[n]then
|
if L[n]then
|
||||||
PLY.newAIPlayer(n,78*i+267,115*j-98,.09,AITemplate("9S",rnd(8,10)))
|
PLY.newAIPlayer(n,78*i+267,115*j-98,.09,AITemplate("9S",rnd(8,10)))
|
||||||
else
|
else
|
||||||
PLY.newAIPlayer(n,78*i+267,115*j-98,.09,AITemplate("CC",rnd(8,10)-1,4,true,30000))
|
PLY.newAIPlayer(n,78*i+267,115*j-98,.09,AITemplate("CC",rnd(9,10),4,true,30000))
|
||||||
end
|
end
|
||||||
n=n+1
|
n=n+1
|
||||||
end end
|
end end
|
||||||
|
|||||||
@@ -24,7 +24,7 @@ return{
|
|||||||
Fkey=selectTarget,
|
Fkey=selectTarget,
|
||||||
pushSpeed=2,
|
pushSpeed=2,
|
||||||
freshLimit=15,
|
freshLimit=15,
|
||||||
bg="game3",bgm="rockblock",
|
bg="rainbow",bgm="rockblock",
|
||||||
},
|
},
|
||||||
load=function()
|
load=function()
|
||||||
royaleData={
|
royaleData={
|
||||||
@@ -33,7 +33,7 @@ return{
|
|||||||
}
|
}
|
||||||
PLY.newPlayer(1,340,15)
|
PLY.newPlayer(1,340,15)
|
||||||
local L={}for i=1,100 do L[i]=true end
|
local L={}for i=1,100 do L[i]=true end
|
||||||
local t=system~="Windows"and 0 or 4
|
local t=CCloader_filename[system] and 4 or 0
|
||||||
while t>0 do
|
while t>0 do
|
||||||
local r=rnd(2,99)
|
local r=rnd(2,99)
|
||||||
if L[r]then L[r],t=false,t-1 end
|
if L[r]then L[r],t=false,t-1 end
|
||||||
@@ -43,7 +43,7 @@ return{
|
|||||||
if L[n]then
|
if L[n]then
|
||||||
PLY.newAIPlayer(n,46*i-36,97*j-72,.068,AITemplate("9S",rnd(2,5)))
|
PLY.newAIPlayer(n,46*i-36,97*j-72,.068,AITemplate("9S",rnd(2,5)))
|
||||||
else
|
else
|
||||||
PLY.newAIPlayer(n,46*i-36,97*j-72,.068,AITemplate("CC",rnd(2,5)-1,2,true,10000))
|
PLY.newAIPlayer(n,46*i-36,97*j-72,.068,AITemplate("CC",rnd(3,5),2,true,10000))
|
||||||
end
|
end
|
||||||
n=n+1
|
n=n+1
|
||||||
end end
|
end end
|
||||||
@@ -51,7 +51,7 @@ return{
|
|||||||
if L[n]then
|
if L[n]then
|
||||||
PLY.newAIPlayer(n,46*i+264,97*j-72,.068,AITemplate("9S",rnd(2,5)))
|
PLY.newAIPlayer(n,46*i+264,97*j-72,.068,AITemplate("9S",rnd(2,5)))
|
||||||
else
|
else
|
||||||
PLY.newAIPlayer(n,46*i+264,97*j-72,.068,AITemplate("CC",rnd(2,5)-1,2,true,10000))
|
PLY.newAIPlayer(n,46*i+264,97*j-72,.068,AITemplate("CC",rnd(3,5),2,true,10000))
|
||||||
end
|
end
|
||||||
n=n+1
|
n=n+1
|
||||||
end end
|
end end
|
||||||
|
|||||||
@@ -24,7 +24,7 @@ return{
|
|||||||
Fkey=selectTarget,
|
Fkey=selectTarget,
|
||||||
pushSpeed=2,
|
pushSpeed=2,
|
||||||
freshLimit=15,
|
freshLimit=15,
|
||||||
bg="game3",bgm="rockblock",
|
bg="rainbow",bgm="rockblock",
|
||||||
},
|
},
|
||||||
load=function()
|
load=function()
|
||||||
royaleData={
|
royaleData={
|
||||||
@@ -33,7 +33,7 @@ return{
|
|||||||
}
|
}
|
||||||
PLY.newPlayer(1,340,15)
|
PLY.newPlayer(1,340,15)
|
||||||
local L={}for i=1,100 do L[i]=true end
|
local L={}for i=1,100 do L[i]=true end
|
||||||
local t=system~="Windows"and 0 or 4
|
local t=CCloader_filename[system] and 4 or 0
|
||||||
while t>0 do
|
while t>0 do
|
||||||
local r=rnd(2,99)
|
local r=rnd(2,99)
|
||||||
if L[r]then L[r],t=false,t-1 end
|
if L[r]then L[r],t=false,t-1 end
|
||||||
@@ -43,7 +43,7 @@ return{
|
|||||||
if L[n]then
|
if L[n]then
|
||||||
PLY.newAIPlayer(n,46*i-36,97*j-72,.068,AITemplate("9S",rnd(4,7)))
|
PLY.newAIPlayer(n,46*i-36,97*j-72,.068,AITemplate("9S",rnd(4,7)))
|
||||||
else
|
else
|
||||||
PLY.newAIPlayer(n,46*i-36,97*j-72,.068,AITemplate("CC",rnd(4,7)-1,3,true,20000))
|
PLY.newAIPlayer(n,46*i-36,97*j-72,.068,AITemplate("CC",rnd(6,8),3,true,20000))
|
||||||
end
|
end
|
||||||
n=n+1
|
n=n+1
|
||||||
end end
|
end end
|
||||||
@@ -51,7 +51,7 @@ return{
|
|||||||
if L[n]then
|
if L[n]then
|
||||||
PLY.newAIPlayer(n,46*i+264,97*j-72,.068,AITemplate("9S",rnd(4,7)))
|
PLY.newAIPlayer(n,46*i+264,97*j-72,.068,AITemplate("9S",rnd(4,7)))
|
||||||
else
|
else
|
||||||
PLY.newAIPlayer(n,46*i+264,97*j-72,.068,AITemplate("CC",rnd(4,7)-1,3,true,20000))
|
PLY.newAIPlayer(n,46*i+264,97*j-72,.068,AITemplate("CC",rnd(6,8),3,true,20000))
|
||||||
end
|
end
|
||||||
n=n+1
|
n=n+1
|
||||||
end end
|
end end
|
||||||
|
|||||||
@@ -24,7 +24,7 @@ return{
|
|||||||
Fkey=selectTarget,
|
Fkey=selectTarget,
|
||||||
pushSpeed=2,
|
pushSpeed=2,
|
||||||
freshLimit=15,
|
freshLimit=15,
|
||||||
bg="game3",bgm="rockblock",
|
bg="rainbow",bgm="rockblock",
|
||||||
},
|
},
|
||||||
load=function()
|
load=function()
|
||||||
royaleData={
|
royaleData={
|
||||||
@@ -33,7 +33,7 @@ return{
|
|||||||
}
|
}
|
||||||
PLY.newPlayer(1,340,15)
|
PLY.newPlayer(1,340,15)
|
||||||
local L={}for i=1,100 do L[i]=true end
|
local L={}for i=1,100 do L[i]=true end
|
||||||
local t=system~="Windows"and 0 or 4
|
local t=CCloader_filename[system] and 4 or 0
|
||||||
while t>0 do
|
while t>0 do
|
||||||
local r=rnd(2,99)
|
local r=rnd(2,99)
|
||||||
if L[r]then L[r],t=false,t-1 end
|
if L[r]then L[r],t=false,t-1 end
|
||||||
@@ -43,7 +43,7 @@ return{
|
|||||||
if L[n]then
|
if L[n]then
|
||||||
PLY.newAIPlayer(n,46*i-36,97*j-72,.068,AITemplate("9S",rnd(8,10)))
|
PLY.newAIPlayer(n,46*i-36,97*j-72,.068,AITemplate("9S",rnd(8,10)))
|
||||||
else
|
else
|
||||||
PLY.newAIPlayer(n,46*i-36,97*j-72,.068,AITemplate("CC",rnd(8,10)-1,4,true,30000))
|
PLY.newAIPlayer(n,46*i-36,97*j-72,.068,AITemplate("CC",rnd(9,10),4,true,30000))
|
||||||
end
|
end
|
||||||
n=n+1
|
n=n+1
|
||||||
end end
|
end end
|
||||||
@@ -51,7 +51,7 @@ return{
|
|||||||
if L[n]then
|
if L[n]then
|
||||||
PLY.newAIPlayer(n,46*i+264,97*j-72,.068,AITemplate("9S",rnd(8,10)))
|
PLY.newAIPlayer(n,46*i+264,97*j-72,.068,AITemplate("9S",rnd(8,10)))
|
||||||
else
|
else
|
||||||
PLY.newAIPlayer(n,46*i+264,97*j-72,.068,AITemplate("CC",rnd(8,10)-1,4,true,30000))
|
PLY.newAIPlayer(n,46*i+264,97*j-72,.068,AITemplate("CC",rnd(9,10),4,true,30000))
|
||||||
end
|
end
|
||||||
n=n+1
|
n=n+1
|
||||||
end end
|
end end
|
||||||
|
|||||||
@@ -20,7 +20,7 @@ return{
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
end,
|
end,
|
||||||
bg="matrix",bgm="infinite",
|
bg="fan",bgm="infinite",
|
||||||
},
|
},
|
||||||
slowMark=true,
|
slowMark=true,
|
||||||
pauseLimit=true,
|
pauseLimit=true,
|
||||||
|
|||||||
@@ -4,7 +4,7 @@ return{
|
|||||||
drop=120,lock=120,
|
drop=120,lock=120,
|
||||||
oncehold=false,target=200,
|
oncehold=false,target=200,
|
||||||
dropPiece=PLY.reach_winCheck,
|
dropPiece=PLY.reach_winCheck,
|
||||||
bg="game2",bgm="infinite",
|
bg="bg2",bgm="infinite",
|
||||||
},
|
},
|
||||||
load=function()
|
load=function()
|
||||||
PLY.newPlayer(1,340,15)
|
PLY.newPlayer(1,340,15)
|
||||||
|
|||||||
57
parts/ai.lua
57
parts/ai.lua
@@ -1,12 +1,10 @@
|
|||||||
--[[
|
--[[
|
||||||
HighestBlock
|
HighestBlock
|
||||||
HorizontalTransitions
|
|
||||||
VerticalTransitions
|
|
||||||
BlockedCells
|
BlockedCells
|
||||||
Wells
|
Wells
|
||||||
FilledLines
|
FilledLines
|
||||||
4deepShape
|
4deepShape
|
||||||
BlockedWells;
|
BlockedWells
|
||||||
]]
|
]]
|
||||||
local int,ceil,min,abs,rnd=math.floor,math.ceil,math.min,math.abs,math.random
|
local int,ceil,min,abs,rnd=math.floor,math.ceil,math.min,math.abs,math.random
|
||||||
local ins,rem=table.insert,table.remove
|
local ins,rem=table.insert,table.remove
|
||||||
@@ -18,9 +16,32 @@ local Timer=love.timer.getTime
|
|||||||
local blockPos={4,4,4,4,4,5,4}
|
local blockPos={4,4,4,4,4,5,4}
|
||||||
local scs={{0,1},{0,1},{0,1},{0,1},{0,1},{.5,.5},{-.5,1.5}}
|
local scs={{0,1},{0,1},{0,1},{0,1},{0,1},{.5,.5},{-.5,1.5}}
|
||||||
-------------------------------------------------Cold clear
|
-------------------------------------------------Cold clear
|
||||||
local CCblockID={4,3,6,5,1,2,0}
|
local CCblockID={6,5,4,3,2,1,0}
|
||||||
if system=="Windows"then
|
CCloader_filename={
|
||||||
require("CCloader")
|
Windows={"CCloader.dll",{"x86_64","x86"}},
|
||||||
|
Android={"libCCloader.so",{"arm64-v8a","armeabi-v7a"}},
|
||||||
|
Linux={"libCCloader.so",{"x86_64"}},
|
||||||
|
}
|
||||||
|
local function loadCC()
|
||||||
|
if not CCloader_filename[system]then return end
|
||||||
|
local f
|
||||||
|
for i=1,#CCloader_filename[system][2]do
|
||||||
|
function f()
|
||||||
|
local CCloader_f,size=love.filesystem.read("data",table.concat({"lib",system,CCloader_filename[system][2][i],CCloader_filename[system][1]},"/"))
|
||||||
|
if not CCloader_f then return end
|
||||||
|
local success,message=love.filesystem.write(CCloader_filename[system][1],CCloader_f,size)
|
||||||
|
if not success then return end
|
||||||
|
local success,message=package.loadlib(table.concat({love.filesystem.getSaveDirectory(),CCloader_filename[system][1]},"/"),"luaopen_CCloader")
|
||||||
|
return success,message
|
||||||
|
end
|
||||||
|
f=f()
|
||||||
|
if f then break end
|
||||||
|
end
|
||||||
|
if not f then
|
||||||
|
CCloader_filename[system]=nil
|
||||||
|
return
|
||||||
|
end
|
||||||
|
f()
|
||||||
BOT={
|
BOT={
|
||||||
getConf= cc.get_default_config ,--()options,weights
|
getConf= cc.get_default_config ,--()options,weights
|
||||||
--setConf= cc.set_options ,--(options,hold,20g,bag7)
|
--setConf= cc.set_options ,--(options,hold,20g,bag7)
|
||||||
@@ -29,12 +50,12 @@ if system=="Windows"then
|
|||||||
addNext= cc.add_next_piece_async ,--(bot,piece)
|
addNext= cc.add_next_piece_async ,--(bot,piece)
|
||||||
update= cc.reset_async ,--(bot,field,b2b,combo)
|
update= cc.reset_async ,--(bot,field,b2b,combo)
|
||||||
think= cc.request_next_move ,--(bot)
|
think= cc.request_next_move ,--(bot)
|
||||||
getMove= cc.poll_next_move ,--(bot)success,hold,move
|
getMove= cc.poll_next_move ,--(bot)success,dest,hold,move
|
||||||
ifDead= cc.is_dead_async ,--(bot)dead
|
|
||||||
destroy= cc.destroy_async ,--(bot)
|
destroy= cc.destroy_async ,--(bot)
|
||||||
|
|
||||||
setHold= cc.set_hold ,--(opt,bool)
|
setHold= cc.set_hold ,--(opt,bool)
|
||||||
set20G= cc.set_20g ,--(opt,bool)
|
set20G= cc.set_20g ,--(opt,bool)
|
||||||
|
setPCLoop= cc.set_pcloop ,--(opt,bool)
|
||||||
setBag= cc.set_bag7 ,--(opt,bool)
|
setBag= cc.set_bag7 ,--(opt,bool)
|
||||||
setNode= cc.set_max_nodes ,--(opt,bool)
|
setNode= cc.set_max_nodes ,--(opt,bool)
|
||||||
free= cc.free ,--(opt/wei)
|
free= cc.free ,--(opt/wei)
|
||||||
@@ -66,7 +87,8 @@ if system=="Windows"then
|
|||||||
BOT.addNext(P.AI_bot,CCblockID[P.next[i].id])
|
BOT.addNext(P.AI_bot,CCblockID[P.next[i].id])
|
||||||
end
|
end
|
||||||
CC_updateField(P)
|
CC_updateField(P)
|
||||||
P.hd={bk={{}},id=0,color=0,name=0}P.holded=false
|
P.hd=nil
|
||||||
|
P.holded=false
|
||||||
P.cur=rem(P.next,1)
|
P.cur=rem(P.next,1)
|
||||||
P.sc,P.dir=scs[P.cur.id],0
|
P.sc,P.dir=scs[P.cur.id],0
|
||||||
P.r,P.c=#P.cur.bk,#P.cur.bk[1]
|
P.r,P.c=#P.cur.bk,#P.cur.bk[1]
|
||||||
@@ -80,6 +102,7 @@ if system=="Windows"then
|
|||||||
collectgarbage()
|
collectgarbage()
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
loadCC()
|
||||||
-------------------------------------------------9 Stack setup
|
-------------------------------------------------9 Stack setup
|
||||||
local dirCount={1,1,3,3,3,0,1}
|
local dirCount={1,1,3,3,3,0,1}
|
||||||
local spinOffset={
|
local spinOffset={
|
||||||
@@ -218,7 +241,7 @@ return{
|
|||||||
end
|
end
|
||||||
if not bn then goto CTN end
|
if not bn then goto CTN end
|
||||||
|
|
||||||
for dir=0,dirCount[bn] do--Each dir
|
for dir=0,dirCount[bn]do--Each dir
|
||||||
local cb=blocks[bn][dir]
|
local cb=blocks[bn][dir]
|
||||||
for cx=1,11-#cb[1]do--Each pos
|
for cx=1,11-#cb[1]do--Each pos
|
||||||
local cy=#Tfield+1
|
local cy=#Tfield+1
|
||||||
@@ -282,9 +305,17 @@ return{
|
|||||||
return 2
|
return 2
|
||||||
end,
|
end,
|
||||||
function(P,ctrl)--Poll keys
|
function(P,ctrl)--Poll keys
|
||||||
if BOT.ifDead(P.AI_bot)then ins(ctrl,6)return 3 end
|
local success,dest,hold,move=BOT.getMove(P.AI_bot)
|
||||||
local success,hold,move=BOT.getMove(P.AI_bot)
|
if success==2 then
|
||||||
if success then
|
ins(ctrl,6)
|
||||||
|
return 3
|
||||||
|
elseif success==0 then
|
||||||
|
for i=1,#dest do
|
||||||
|
for j=1,#dest[i]do
|
||||||
|
dest[i][j]=dest[i][j]+1
|
||||||
|
end
|
||||||
|
end
|
||||||
|
P.AI_dest=dest
|
||||||
if hold then ctrl[1]=8 end--Hold
|
if hold then ctrl[1]=8 end--Hold
|
||||||
while move[1]do
|
while move[1]do
|
||||||
local m=rem(move,1)
|
local m=rem(move,1)
|
||||||
|
|||||||
@@ -10,7 +10,7 @@ setting={
|
|||||||
reTime=4,
|
reTime=4,
|
||||||
autoPause=true,
|
autoPause=true,
|
||||||
fine=false,
|
fine=false,
|
||||||
lock=false,
|
appLock=false,
|
||||||
lang=1,
|
lang=1,
|
||||||
skinSet=1,
|
skinSet=1,
|
||||||
skin={1,5,8,2,10,3,7,1,5,1,5,8,2,10,3,7,10,7,8,2,8,2,1,5,3},
|
skin={1,5,8,2,10,3,7,1,5,1,5,8,2,10,3,7,10,7,8,2,8,2,1,5,3},
|
||||||
@@ -21,7 +21,8 @@ setting={
|
|||||||
smooth=true,grid=false,
|
smooth=true,grid=false,
|
||||||
bagLine=false,
|
bagLine=false,
|
||||||
lockFX=2,
|
lockFX=2,
|
||||||
dropFX=3,
|
dropFX=2,
|
||||||
|
moveFX=2,
|
||||||
clearFX=2,
|
clearFX=2,
|
||||||
shakeFX=2,
|
shakeFX=2,
|
||||||
atkFX=3,
|
atkFX=3,
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
local freeRow={}
|
local freeRow={}
|
||||||
local L={}--Storage
|
local L={}--Storage
|
||||||
local _=0--Lenth
|
local _=0--Length
|
||||||
function freeRow.reset(num)
|
function freeRow.reset(num)
|
||||||
if num<_ then
|
if num<_ then
|
||||||
for i=_,num+1,-1 do
|
for i=_,num+1,-1 do
|
||||||
|
|||||||
@@ -164,6 +164,7 @@ function pasteSequence(str)
|
|||||||
end
|
end
|
||||||
|
|
||||||
preBag=bag
|
preBag=bag
|
||||||
|
sceneTemp.cur=#preBag
|
||||||
return true
|
return true
|
||||||
end
|
end
|
||||||
|
|
||||||
@@ -310,7 +311,6 @@ function resetGameData()
|
|||||||
|
|
||||||
destroyPlayers()
|
destroyPlayers()
|
||||||
modeEnv=curMode.env
|
modeEnv=curMode.env
|
||||||
math.randomseed(game.seed)
|
|
||||||
curMode.load()--BG/BGM need redefine in custom,so up here
|
curMode.load()--BG/BGM need redefine in custom,so up here
|
||||||
if modeEnv.task then
|
if modeEnv.task then
|
||||||
for i=1,#players do
|
for i=1,#players do
|
||||||
@@ -363,7 +363,6 @@ function resetPartGameData(replaying)
|
|||||||
|
|
||||||
destroyPlayers()
|
destroyPlayers()
|
||||||
modeEnv=curMode.env
|
modeEnv=curMode.env
|
||||||
math.randomseed(game.seed)
|
|
||||||
curMode.load()
|
curMode.load()
|
||||||
if modeEnv.task then
|
if modeEnv.task then
|
||||||
for i=1,#players do
|
for i=1,#players do
|
||||||
@@ -388,8 +387,8 @@ function gameStart()
|
|||||||
SFX.play("start")
|
SFX.play("start")
|
||||||
for P=1,#players do
|
for P=1,#players do
|
||||||
P=players[P]
|
P=players[P]
|
||||||
P:popNext()
|
|
||||||
P.timing=true
|
|
||||||
P.control=true
|
P.control=true
|
||||||
|
P.timing=true
|
||||||
|
P:popNext()
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
@@ -15,7 +15,6 @@ if setting.lang==1 or setting.lang==2 then
|
|||||||
"O spin Triple!",
|
"O spin Triple!",
|
||||||
"nullpomino也很好玩!",
|
"nullpomino也很好玩!",
|
||||||
"Naki 可爱!",
|
"Naki 可爱!",
|
||||||
"Miya:喵!",
|
|
||||||
"Miya 可爱!",
|
"Miya 可爱!",
|
||||||
"Lua天下第一",
|
"Lua天下第一",
|
||||||
"LrL RlR LLr RRl RRR LLL FFF RfR RRf rFF",
|
"LrL RlR LLr RRl RRR LLL FFF RfR RRf rFF",
|
||||||
@@ -28,18 +27,28 @@ if setting.lang==1 or setting.lang==2 then
|
|||||||
"e^(pi*i)=-1",
|
"e^(pi*i)=-1",
|
||||||
"DT炮=TSD+TST炮",
|
"DT炮=TSD+TST炮",
|
||||||
"Cultris II也很好玩!",
|
"Cultris II也很好玩!",
|
||||||
|
"Ctrl+W=关闭当前标签页",
|
||||||
|
"Ctrl+Tab=切换标签页",
|
||||||
|
"Ctrl+F=查找",
|
||||||
|
"Ctrl+D=复制一份",
|
||||||
|
"Ctrl+Alt+Z=查看所有qq消息",
|
||||||
|
"Ctrl+A=全选",
|
||||||
|
"Ctrl+鼠标滚轮=缩放",
|
||||||
"COOL!!",
|
"COOL!!",
|
||||||
"CLASSIC SEXY RUSSIAN BLOCKS",
|
|
||||||
"BT炮=beta炮",
|
"BT炮=beta炮",
|
||||||
|
"backspace=返回上一个文件目录",
|
||||||
"B2B2B2B存在吗?",
|
"B2B2B2B存在吗?",
|
||||||
"B2B2B???",
|
"B2B2B???",
|
||||||
"Am G F G",
|
"Am G F G",
|
||||||
|
"Alt+Tab=切换窗口",
|
||||||
|
"Alt+F4=关闭当前窗口",
|
||||||
"ALLSPIN!",
|
"ALLSPIN!",
|
||||||
"注意到\"旋转\"到底对方块做了些什么吗?",
|
"注意到\"旋转\"到底对方块做了些什么吗?",
|
||||||
"有疑问? 先看设置有没有你想要的",
|
"有疑问? 先看设置有没有你想要的",
|
||||||
"有建议的话可以把信息反馈给作者~",
|
"有建议的话可以把信息反馈给作者~",
|
||||||
"学会使用两个旋转键, 三个更好",
|
"学会使用两个旋转键, 三个更好",
|
||||||
"享受特色旋转系统!",
|
"新人请千万记住,打好基础,不要太早学那些花里胡哨的",
|
||||||
|
"享受Tech的特色旋转系统!",
|
||||||
"无聊翻翻设置是好习惯",
|
"无聊翻翻设置是好习惯",
|
||||||
"我的世界好玩!",
|
"我的世界好玩!",
|
||||||
"提前旋转等设置可以用来救命",
|
"提前旋转等设置可以用来救命",
|
||||||
@@ -48,32 +57,32 @@ if setting.lang==1 or setting.lang==2 then
|
|||||||
"使用love2d引擎制作",
|
"使用love2d引擎制作",
|
||||||
"少女祈祷中",
|
"少女祈祷中",
|
||||||
"扫雷好玩!",
|
"扫雷好玩!",
|
||||||
"哦,我的上帝",
|
"你可以长按R键重新开始游戏(也不是很长)",
|
||||||
"你可以从统计页面打开游戏存档目录",
|
"你可以从统计页面打开游戏存档目录",
|
||||||
"你好 世界!",
|
|
||||||
"魔方好玩!",
|
"魔方好玩!",
|
||||||
|
"喵!",
|
||||||
"免费吃鸡方块",
|
"免费吃鸡方块",
|
||||||
"秘密数字:626",
|
"秘密数字:626",
|
||||||
"每个虚拟按键都可以隐藏/显示",
|
"每个虚拟按键都可以隐藏/显示,尺寸也可调",
|
||||||
"每个块的出现方向可以自定义",
|
"每个块的出现方向可以自定义",
|
||||||
"没专业美术,程序员审美警告",
|
"没有专业美术的人,程序员审美警告",
|
||||||
"没学过编曲,音乐都是自己凭感觉写的,觉得不好听就设置里关了吧",
|
"没学过编曲,音乐都是自己凭感觉写的,觉得不好听就设置里关了吧",
|
||||||
"联网还没做呢, 别急",
|
"联网还没做呢, 别急",
|
||||||
"键位是可以自定义的",
|
"键位是可以自定义的",
|
||||||
|
"健康小贴士:玩游戏多眨眼,不然会干眼病",
|
||||||
|
"健康小贴士:不要熬夜,真的会猝死",
|
||||||
"合群了就会消失, 但是消失不代表没有意义",
|
"合群了就会消失, 但是消失不代表没有意义",
|
||||||
"更小的DAS和ARR拥有更高的操作上限(如果你还能控制得了的话)",
|
"更小的DAS和ARR拥有更高的操作上限(前提是你能控制得了)",
|
||||||
"俄罗斯方块环游记也不错!",
|
"俄罗斯方块环游记也不错!",
|
||||||
"调到特殊的日期也不会发生什么的",
|
"调到特殊的日期也不会发生什么的",
|
||||||
"低帧率会降低游戏体验",
|
"低帧率会降低游戏体验",
|
||||||
"戴上耳机以获得最佳体验",
|
"戴上耳机以获得最佳体验",
|
||||||
"大满贯10连击消四全清!",
|
"大满贯10连击消四全清!",
|
||||||
"打好块没有捷径,多练",
|
"打好块没有捷径,多练",
|
||||||
"你可以长按R键重新开始游戏(也不是很长)",
|
|
||||||
"茶娘 可爱!",
|
"茶娘 可爱!",
|
||||||
"草(日本语)",
|
"草(日本语)",
|
||||||
"不要在上课时玩游戏!",
|
"不要在上课时玩游戏!",
|
||||||
"不要盯着bug不放",
|
"不要盯着bug不放",
|
||||||
"不要按F10",
|
|
||||||
"不是动画,真的在加载!",
|
"不是动画,真的在加载!",
|
||||||
"别问游戏名怎么取的,问就是随便想的",
|
"别问游戏名怎么取的,问就是随便想的",
|
||||||
"本游戏难度上限很高, 做好心理准备",
|
"本游戏难度上限很高, 做好心理准备",
|
||||||
@@ -90,6 +99,7 @@ if setting.lang==1 or setting.lang==2 then
|
|||||||
"2.7182818284590452353",
|
"2.7182818284590452353",
|
||||||
"15puzzle好玩!",
|
"15puzzle好玩!",
|
||||||
"11renPC!",
|
"11renPC!",
|
||||||
|
"100行内23PC来一个?",
|
||||||
"1, 2, 9!!!!!",
|
"1, 2, 9!!!!!",
|
||||||
"<方块研究所>有一个Nspire-CX版本!",
|
"<方块研究所>有一个Nspire-CX版本!",
|
||||||
"↑↑↓↓←→←→BABA",
|
"↑↑↓↓←→←→BABA",
|
||||||
@@ -106,13 +116,14 @@ elseif setting.lang==3 then
|
|||||||
"Who is diao",
|
"Who is diao",
|
||||||
"What about 26 TSDs?",
|
"What about 26 TSDs?",
|
||||||
"What about 20 PCs?",
|
"What about 20 PCs?",
|
||||||
|
"What about 23 PCs in 100 lines?",
|
||||||
"Warning: Programmer Art",
|
"Warning: Programmer Art",
|
||||||
"Try to use two rotate button,three better",
|
"Try to use two rotate button,three better",
|
||||||
"This in not a casual game",
|
"This in not a casual game",
|
||||||
"This game can be very hard,be mentally perpared",
|
"This game can be very hard,be mentally perpared",
|
||||||
"Tetris journey has network battle!",
|
"Tetris journey has network battle!",
|
||||||
"Terraria is fun!",
|
|
||||||
"Tetralegends is fun!",
|
"Tetralegends is fun!",
|
||||||
|
"Terraria is fun!",
|
||||||
"Techmino=Technique+Tetromino",
|
"Techmino=Technique+Tetromino",
|
||||||
"Techmino is so fun!",
|
"Techmino is so fun!",
|
||||||
"Techmino has a Nspire-CX edition!",
|
"Techmino has a Nspire-CX edition!",
|
||||||
@@ -140,10 +151,10 @@ elseif setting.lang==3 then
|
|||||||
"l-=-1",
|
"l-=-1",
|
||||||
"Is B2B2B2B possible?",
|
"Is B2B2B2B possible?",
|
||||||
"Initial Rotation etc. can save your life",
|
"Initial Rotation etc. can save your life",
|
||||||
|
"Hold R key to restart game",
|
||||||
"Hello world!",
|
"Hello world!",
|
||||||
"Headphones for better experience",
|
"Headphones for better experience",
|
||||||
"Have you noticed what does \"rotating\" do to block?",
|
"Have you noticed what does \"rotating\" do to block?",
|
||||||
"Hold R key to restart game",
|
|
||||||
"Find out what's in the setting!",
|
"Find out what's in the setting!",
|
||||||
"Enjoy Tech. Rotation System!",
|
"Enjoy Tech. Rotation System!",
|
||||||
"e^(pi*i/2)=i",
|
"e^(pi*i/2)=i",
|
||||||
@@ -155,8 +166,7 @@ elseif setting.lang==3 then
|
|||||||
"Disappearing doesn't mean useless",
|
"Disappearing doesn't mean useless",
|
||||||
"Diao so bully",
|
"Diao so bully",
|
||||||
"COOL!!",
|
"COOL!!",
|
||||||
"CLASSIC SEXY RUSSIAN BLOCKS",
|
"BT cannon=beta cannon",
|
||||||
"BT cannon=beta",
|
|
||||||
"Back to Back 10 combo Techrash PC!",
|
"Back to Back 10 combo Techrash PC!",
|
||||||
"B2B2B???",
|
"B2B2B???",
|
||||||
"Any suggestions to author!",
|
"Any suggestions to author!",
|
||||||
@@ -164,9 +174,9 @@ elseif setting.lang==3 then
|
|||||||
"Also try VVVVVV!",
|
"Also try VVVVVV!",
|
||||||
"Also try Tetr.js!",
|
"Also try Tetr.js!",
|
||||||
"Also try Tetr.io!",
|
"Also try Tetr.io!",
|
||||||
|
"Also try Nullpomino!",
|
||||||
"Also try Jstris!",
|
"Also try Jstris!",
|
||||||
"Also try Cultris II!",
|
"Also try Cultris II!",
|
||||||
"Also try Nullpomino!",
|
|
||||||
"ALLSPIN!",
|
"ALLSPIN!",
|
||||||
"少女祈禱中",
|
"少女祈禱中",
|
||||||
"40L WR: 15.654s",
|
"40L WR: 15.654s",
|
||||||
@@ -223,7 +233,7 @@ elseif setting.lang==5 then
|
|||||||
--[[23]]"大半夜的在这干啥呢?不睡觉是会猝死的",
|
--[[23]]"大半夜的在这干啥呢?不睡觉是会猝死的",
|
||||||
}
|
}
|
||||||
return time[tonumber(os.date("%H"))+1]
|
return time[tonumber(os.date("%H"))+1]
|
||||||
elseif true or R<.1 then
|
elseif R<.1 then
|
||||||
local int=math.floor
|
local int=math.floor
|
||||||
L={
|
L={
|
||||||
"平均"..int(stat.row/stat.time*60).."LPM,那可真强呢",
|
"平均"..int(stat.row/stat.time*60).."LPM,那可真强呢",
|
||||||
@@ -243,8 +253,10 @@ elseif setting.lang==5 then
|
|||||||
"我一个滑铲就挖了个11renPC",
|
"我一个滑铲就挖了个11renPC",
|
||||||
"我曾经在极度愤怒的时候15秒消了40行",
|
"我曾经在极度愤怒的时候15秒消了40行",
|
||||||
"天天F3F3,怕别人不知道你菜?",
|
"天天F3F3,怕别人不知道你菜?",
|
||||||
|
"天天卖弱,你一定把把150apm吧?",
|
||||||
"天天催更催更,你咋不来帮忙开发啊,真以为作者很强催催啥都有?",
|
"天天催更催更,你咋不来帮忙开发啊,真以为作者很强催催啥都有?",
|
||||||
"设置都看过一遍了吗?明明都能调还嫌这嫌那,可牛逼了您",
|
"设置都看过一遍了吗?明明都能调还嫌这嫌那,可牛逼了您",
|
||||||
|
"少玩点,多眨眼,到时候瞎了别怪我没提醒你",
|
||||||
"人只用一只手都能玩,你呢?",
|
"人只用一只手都能玩,你呢?",
|
||||||
"没那水平别天天整什么花里胡哨的,人玩几年你想几天赶上?",
|
"没那水平别天天整什么花里胡哨的,人玩几年你想几天赶上?",
|
||||||
"满口PCDT信天翁,还会点别的么?",
|
"满口PCDT信天翁,还会点别的么?",
|
||||||
@@ -253,6 +265,7 @@ elseif setting.lang==5 then
|
|||||||
"还搁这玩手机呢,作业做完了?",
|
"还搁这玩手机呢,作业做完了?",
|
||||||
"除了雨宫太阳你还认识谁?Jonas知道吗?Ajanba听过吗?",
|
"除了雨宫太阳你还认识谁?Jonas知道吗?Ajanba听过吗?",
|
||||||
"不会吧不会吧,真的还有人不能随手Tspin?",
|
"不会吧不会吧,真的还有人不能随手Tspin?",
|
||||||
|
"别会个c4w就以为自己多强,这是基本功罢了",
|
||||||
"60lpm?拍硬降刷的吧",
|
"60lpm?拍硬降刷的吧",
|
||||||
"4pps不是人均水平?",
|
"4pps不是人均水平?",
|
||||||
"40行还要40多秒,就这?",
|
"40行还要40多秒,就这?",
|
||||||
@@ -260,9 +273,8 @@ elseif setting.lang==5 then
|
|||||||
"20连pc不是随手?",
|
"20连pc不是随手?",
|
||||||
"100apm?定式刷的吧",
|
"100apm?定式刷的吧",
|
||||||
"0202年了,还在玩这种小孩子玩的游戏?",
|
"0202年了,还在玩这种小孩子玩的游戏?",
|
||||||
"天天卖弱,你一定把把150apm吧?",
|
"极限20G?那不是随手通",
|
||||||
"别会个c4w就以为自己多强,这是基本功罢了",
|
"全隐40行全消四很难吗??",
|
||||||
"少玩点,多眨眼,到时候瞎了别怪我没提醒你",
|
|
||||||
}
|
}
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -84,14 +84,14 @@ local TRS={
|
|||||||
},--Z
|
},--Z
|
||||||
{},--S
|
{},--S
|
||||||
{
|
{
|
||||||
[01]={{-1, 0},{-1, 1},{ 0,-2},{ 1, 1}},
|
[01]={{-1, 0},{-1, 1},{ 1, 0},{ 0,-2},{ 1, 1}},
|
||||||
[10]={{ 1, 0},{ 1,-1},{ 0, 2},{ 1, 2}},
|
[10]={{ 1, 0},{ 1,-1},{-1, 0},{ 0, 2},{ 1, 2}},
|
||||||
[03]={{ 1, 0},{ 1, 1},{ 0,-2},{ 1,-2},{ 1,-1},{ 0, 1}},
|
[03]={{ 1, 0},{ 1, 1},{ 0,-2},{ 1,-2},{ 1,-1},{ 0, 1}},
|
||||||
[30]={{-1, 0},{-1,-1},{ 0, 2},{-1, 2},{ 0,-1},{-1, 1}},
|
[30]={{-1, 0},{-1,-1},{ 0, 2},{-1, 2},{ 0,-1},{-1, 1}},
|
||||||
[12]={{ 1, 0},{ 1,-1},{ 1, 1},{-1, 0},{ 0,-1},{ 0, 2},{ 1, 2}},
|
[12]={{ 1, 0},{ 1,-1},{ 1, 1},{-1, 0},{ 0,-1},{ 0, 2},{ 1, 2}},
|
||||||
[21]={{-1, 0},{-1, 1},{ 1, 0},{ 0,-2},{-1,-2}},
|
[21]={{-1, 0},{-1, 1},{-1,-1},{ 1, 0},{ 0, 1},{ 0,-2},{-1,-2}},
|
||||||
[32]={{-1, 0},{-1,-1},{ 0, 2},{-1, 2},{-1, 1}},
|
[32]={{-1, 0},{-1,-1},{ 1, 0},{ 0, 2},{-1, 2},{-1, 1}},
|
||||||
[23]={{ 1, 0},{ 1,-1},{ 1, 1},{ 0,-2},{ 1,-2}},
|
[23]={{ 1, 0},{ 1,-1},{-1, 0},{ 1, 1},{ 0,-2},{ 1,-2}},
|
||||||
[02]={{-1, 0},{ 1, 0},{ 0,-1},{ 0, 1}},
|
[02]={{-1, 0},{ 1, 0},{ 0,-1},{ 0, 1}},
|
||||||
[20]={{ 1, 0},{-1, 0},{ 0, 1},{ 0,-1}},
|
[20]={{ 1, 0},{-1, 0},{ 0, 1},{ 0,-1}},
|
||||||
[13]={{ 0,-1},{ 0, 1},{ 1, 0}},
|
[13]={{ 0,-1},{ 0, 1},{ 1, 0}},
|
||||||
@@ -114,13 +114,15 @@ local TRS={
|
|||||||
},--T
|
},--T
|
||||||
function(P,d)
|
function(P,d)
|
||||||
if P.human then SFX.fieldPlay("rotate",nil,P)end
|
if P.human then SFX.fieldPlay("rotate",nil,P)end
|
||||||
P:freshLockDelay()
|
|
||||||
if not P.gameEnv.ospin then return end
|
if not P.gameEnv.ospin then return end
|
||||||
local x,y=P.curX,P.curY
|
local x,y=P.curX,P.curY
|
||||||
if y==P.imgY and((P:solid(x-1,y)or P:solid(x-1,y+1)))and(P:solid(x+2,y)or P:solid(x+2,y+1))then
|
if y==P.imgY and((P:solid(x-1,y)or P:solid(x-1,y+1)))and(P:solid(x+2,y)or P:solid(x+2,y+1))then
|
||||||
local D=P.spinSeq%100*10+d
|
local D=P.spinSeq%100*10+d
|
||||||
P.spinSeq=D
|
P.spinSeq=D
|
||||||
if D<100 then return end
|
if D<100 then
|
||||||
|
P:freshBlock(true,true)
|
||||||
|
return
|
||||||
|
end
|
||||||
for i=1,#OspinList do
|
for i=1,#OspinList do
|
||||||
local L=OspinList[i]
|
local L=OspinList[i]
|
||||||
if D==L[1]then
|
if D==L[1]then
|
||||||
@@ -136,7 +138,7 @@ local TRS={
|
|||||||
P.dir,P.sc=dir,scs[id][dir]
|
P.dir,P.sc=dir,scs[id][dir]
|
||||||
P.spinLast=2
|
P.spinLast=2
|
||||||
P.stat.rotate=P.stat.rotate+1
|
P.stat.rotate=P.stat.rotate+1
|
||||||
P:freshgho()
|
P:freshBlock(false,true)
|
||||||
P.spinSeq=0
|
P.spinSeq=0
|
||||||
SFX.fieldPlay("rotatekick",nil,P)
|
SFX.fieldPlay("rotatekick",nil,P)
|
||||||
return
|
return
|
||||||
@@ -145,17 +147,18 @@ local TRS={
|
|||||||
end
|
end
|
||||||
else
|
else
|
||||||
P.spinSeq=0
|
P.spinSeq=0
|
||||||
|
P:freshBlock(true,true)
|
||||||
end
|
end
|
||||||
end,--O
|
end,--O
|
||||||
{
|
{
|
||||||
[01]={{ 0, 1},{ 1, 0},{-2, 0},{-2,-1},{ 1, 2}},
|
[01]={{ 0, 1},{ 1, 0},{-2, 0},{-2,-1},{ 1, 2}},
|
||||||
[10]={{ 2, 0},{-1, 0},{-1,-2},{ 2, 1},{ 0, 2}},
|
[10]={{ 2, 0},{-1, 0},{-1,-2},{ 2, 1},{ 0, 1}},
|
||||||
[03]={{ 0, 1},{-1, 0},{ 2, 0},{ 2,-1},{-1, 2}},
|
[03]={{ 0, 1},{-1, 0},{ 2, 0},{ 2,-1},{-1, 2}},
|
||||||
[30]={{-2, 0},{ 1, 0},{ 1,-2},{-2, 1},{ 0, 2}},
|
[30]={{-2, 0},{ 1, 0},{ 1,-2},{-2, 1},{ 0, 1}},
|
||||||
[12]={{-1, 0},{ 2, 0},{ 0,-1},{-1, 2},{ 2,-1}},
|
[12]={{-1, 0},{ 2, 0},{ 2,-1},{ 0,-1},{-1, 2}},
|
||||||
[21]={{-2, 0},{ 1, 0},{ 0, 1},{ 1,-2},{-2, 1}},
|
[21]={{-2, 0},{ 1, 0},{ 1,-2},{-2, 1},{ 0, 1}},
|
||||||
[32]={{ 1, 0},{-2, 0},{ 0,-1},{ 1, 2},{-2,-1}},
|
[32]={{ 1, 0},{-2, 0},{-2,-1},{ 0,-1},{ 1, 2}},
|
||||||
[23]={{ 2, 0},{-1, 0},{ 0, 1},{-1,-2},{ 2, 1}},
|
[23]={{ 2, 0},{-1, 0},{-1,-2},{ 2, 1},{ 0, 1}},
|
||||||
[02]={{-1, 0},{ 1, 0},{ 0,-1},{ 0, 1}},
|
[02]={{-1, 0},{ 1, 0},{ 0,-1},{ 0, 1}},
|
||||||
[20]={{ 1, 0},{-1, 0},{ 0, 1},{ 0,-1}},
|
[20]={{ 1, 0},{-1, 0},{ 0, 1},{ 0,-1}},
|
||||||
[13]={{ 0,-1},{-1, 0},{ 1, 0},{ 0, 1}},
|
[13]={{ 0,-1},{-1, 0},{ 1, 0},{ 0, 1}},
|
||||||
@@ -213,10 +216,10 @@ local TRS={
|
|||||||
[31]={{-1, 0},{ 1, 1},{ 2, 0}},
|
[31]={{-1, 0},{ 1, 1},{ 2, 0}},
|
||||||
},--T5
|
},--T5
|
||||||
{
|
{
|
||||||
[01]={{-1, 0},{-1, 1},{ 0,-2},{-1,-2},{-1,-3}},
|
[01]={{-1, 0},{-1, 1},{ 0,-2},{-1,-2}},
|
||||||
[10]={{ 1, 0},{ 1,-1},{ 0, 2},{ 1, 2},{ 1, 3}},
|
[10]={{ 1, 0},{ 1,-1},{ 0, 2},{ 1, 2}},
|
||||||
[03]={{ 1, 0},{ 1, 1},{ 0,-2},{ 1,-2},{ 1,-3}},
|
[03]={{ 1, 0},{ 1, 1},{ 0,-2},{ 1,-2}},
|
||||||
[30]={{-1, 0},{-1,-1},{ 0,-2},{-1, 2},{-1, 3}},
|
[30]={{-1, 0},{-1,-1},{ 0,-2},{-1, 2}},
|
||||||
[12]={{ 1, 0},{ 1,-1},{ 1, 1}},
|
[12]={{ 1, 0},{ 1,-1},{ 1, 1}},
|
||||||
[21]={{-1,-1},{-1, 1},{-1,-1}},
|
[21]={{-1,-1},{-1, 1},{-1,-1}},
|
||||||
[32]={{-1, 0},{-1,-1},{-1, 1}},
|
[32]={{-1, 0},{-1,-1},{-1, 1}},
|
||||||
@@ -230,7 +233,7 @@ local TRS={
|
|||||||
[01]={{ 0, 1},{-1, 0},{ 0,-2},{-1,-2}},
|
[01]={{ 0, 1},{-1, 0},{ 0,-2},{-1,-2}},
|
||||||
[10]={{ 0, 1},{ 1, 0},{ 0,-2},{ 1,-2}},
|
[10]={{ 0, 1},{ 1, 0},{ 0,-2},{ 1,-2}},
|
||||||
[03]={{ 0,-1},{ 0, 1},{ 0, 2}},
|
[03]={{ 0,-1},{ 0, 1},{ 0, 2}},
|
||||||
[30]={{ 0,-1},{ 0,-1},{ 0,-2}},
|
[30]={{ 0,-1},{ 0, 1},{ 0,-2}},
|
||||||
[12]={{ 0,-1},{ 0, 1}},
|
[12]={{ 0,-1},{ 0, 1}},
|
||||||
[21]={{ 0,-1},{ 0,-2}},
|
[21]={{ 0,-1},{ 0,-2}},
|
||||||
[32]={{ 1, 0},{-1, 0}},
|
[32]={{ 1, 0},{-1, 0}},
|
||||||
@@ -256,18 +259,18 @@ local TRS={
|
|||||||
},--W
|
},--W
|
||||||
function(P,d)
|
function(P,d)
|
||||||
if P.human then SFX.fieldPlay("rotate",nil,P)end
|
if P.human then SFX.fieldPlay("rotate",nil,P)end
|
||||||
P:freshLockDelay()
|
|
||||||
local iki=XspinList[d]
|
local iki=XspinList[d]
|
||||||
for test=1,#iki do
|
for test=1,#iki do
|
||||||
local x,y=P.curX+iki[test][1],P.curY+iki[test][2]
|
local x,y=P.curX+iki[test][1],P.curY+iki[test][2]
|
||||||
if not P:ifoverlap(P.cur.bk,x,y)then
|
if not P:ifoverlap(P.cur.bk,x,y)then
|
||||||
P.curX,P.curY=x,y
|
P.curX,P.curY=x,y
|
||||||
P.spinLast=1
|
P.spinLast=1
|
||||||
P:freshgho()
|
P:freshBlock(false,true)
|
||||||
P.stat.rotate=P.stat.rotate+1
|
P.stat.rotate=P.stat.rotate+1
|
||||||
return
|
return
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
P:freshBlock(true,true)
|
||||||
end,--X
|
end,--X
|
||||||
{
|
{
|
||||||
[01]={{-1, 0},{-1, 1},{ 0,-3},{-1, 1},{-1, 2},{ 0, 1}},
|
[01]={{-1, 0},{-1, 1},{ 0,-3},{-1, 1},{-1, 2},{ 0, 1}},
|
||||||
@@ -285,14 +288,14 @@ local TRS={
|
|||||||
},--J5
|
},--J5
|
||||||
{},--L5
|
{},--L5
|
||||||
{
|
{
|
||||||
[01]={{-1, 0},{-1, 1},{ 1, 0},{-1, 2},{-1,-1},{ 0,-3},{ 0, 1}},
|
[01]={{-1, 0},{-1, 0},{-1, 1},{ 1, 0},{-1, 2},{-1,-1},{ 0,-3},{ 0, 1}},
|
||||||
[10]={{-1, 0},{ 1,-1},{ 1, 0},{ 1,-2},{ 1, 1},{ 0, 3},{ 0, 1}},
|
[10]={{-1, 0},{ 1, 0},{ 1,-1},{ 1, 0},{ 1,-2},{ 1, 1},{ 0, 3},{ 0, 1}},
|
||||||
[03]={{ 0,-1},{ 1,-1},{-1, 0},{ 1, 1},{ 0,-2},{ 1,-2},{ 0,-3},{ 1,-3},{-1, 1}},
|
[03]={{ 0,-1},{ 1, 0},{ 1,-1},{-1, 0},{ 1, 1},{ 0,-2},{ 1,-2},{ 0,-3},{ 1,-3},{-1, 1}},
|
||||||
[30]={{ 0, 1},{-1, 1},{ 1, 0},{-1,-1},{ 0, 2},{-1, 2},{ 0, 3},{-1, 3},{ 1,-1}},
|
[30]={{ 0, 1},{-1, 0},{-1, 1},{ 1, 0},{-1,-1},{ 0, 2},{-1, 2},{ 0, 3},{-1, 3},{ 1,-1}},
|
||||||
[12]={{ 1, 0},{ 1,-1},{ 0,-1},{ 1,-2},{ 0,-2},{ 1, 1},{-1, 0},{ 0, 2},{ 1, 2}},
|
[12]={{ 1, 0},{ 1,-1},{ 0,-1},{ 1,-2},{ 0,-2},{ 1, 1},{-1, 0},{ 0, 2},{ 1, 2}},
|
||||||
[21]={{-1, 0},{-1, 1},{ 0, 1},{-1, 2},{ 0, 2},{-1,-1},{ 1, 0},{ 0,-2},{-1,-2}},
|
[21]={{-1, 0},{-1, 1},{ 0, 1},{-1, 2},{ 0, 2},{-1,-1},{ 1, 0},{ 0,-2},{-1,-2}},
|
||||||
[32]={{-1, 0},{ 0,-1},{-1, 1},{-1,-1},{ 1, 0},{ 0, 2},{-1, 2},{ 0,-2}},
|
[32]={{ 0,-1},{-1, 0},{-1, 1},{-1,-1},{ 1, 0},{ 0, 2},{-1, 2},{ 0,-2}},
|
||||||
[23]={{ 1, 0},{ 0, 1},{ 1,-1},{ 1, 1},{-1, 0},{ 0,-2},{ 1,-2},{ 0, 2}},
|
[23]={{ 0, 1},{ 1, 0},{ 1,-1},{ 1, 1},{-1, 0},{ 0,-2},{ 1,-2},{ 0, 2}},
|
||||||
[02]={{ 0,-1},{ 1,-1},{-1, 0},{ 2,-1},{ 0, 1}},
|
[02]={{ 0,-1},{ 1,-1},{-1, 0},{ 2,-1},{ 0, 1}},
|
||||||
[20]={{ 0, 1},{-1, 1},{ 1, 0},{-2, 1},{ 0,-1}},
|
[20]={{ 0, 1},{-1, 1},{ 1, 0},{-2, 1},{ 0,-1}},
|
||||||
[13]={{-1, 0},{-1,-1},{ 0, 1},{-1,-2}},
|
[13]={{-1, 0},{-1,-1},{ 0, 1},{-1,-2}},
|
||||||
|
|||||||
@@ -1,3 +1,4 @@
|
|||||||
|
local sin,cos=math.sin,math.cos
|
||||||
snapLevelValue={1,10,20,40,60,80}
|
snapLevelValue={1,10,20,40,60,80}
|
||||||
title={
|
title={
|
||||||
{
|
{
|
||||||
@@ -114,6 +115,12 @@ title={
|
|||||||
5878, 463,
|
5878, 463,
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
for _,C in next,title do
|
||||||
|
for i=1,#C do
|
||||||
|
C[i]=C[i]*.1626
|
||||||
|
end
|
||||||
|
end
|
||||||
|
--[[
|
||||||
title2={}
|
title2={}
|
||||||
for i=1,#title do title2[i]=title[i]end
|
for i=1,#title do title2[i]=title[i]end
|
||||||
title2[5]={
|
title2[5]={
|
||||||
@@ -140,12 +147,22 @@ title2[5]={
|
|||||||
3001, 1280,
|
3001, 1280,
|
||||||
2779, 1280,
|
2779, 1280,
|
||||||
}
|
}
|
||||||
|
]]
|
||||||
for _,C in next,title do
|
title_fan={}
|
||||||
for i=1,#C do
|
for i=1,8 do
|
||||||
C[i]=C[i]*.1626
|
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
|
end
|
||||||
|
|
||||||
customID={
|
customID={
|
||||||
"drop","lock",
|
"drop","lock",
|
||||||
"wait","fall",
|
"wait","fall",
|
||||||
@@ -168,7 +185,7 @@ customRange={
|
|||||||
target={10,20,40,100,200,500,1000,1e99},
|
target={10,20,40,100,200,500,1000,1e99},
|
||||||
freshLimit={0,8,15,1e99},
|
freshLimit={0,8,15,1e99},
|
||||||
opponent={0,1,2,3,4,5,11,12,13,14,15,16},
|
opponent={0,1,2,3,4,5,11,12,13,14,15,16},
|
||||||
bg={"none","game1","game2","game3","aura","rgb","glow","matrix"},
|
bg={"none","bg1","bg2","rainbow","aura","rgb","glow","matrix"},
|
||||||
bgm={"blank","way","race","newera","push","reason","infinite","secret7th","secret8th","rockblock"},
|
bgm={"blank","way","race","newera","push","reason","infinite","secret7th","secret8th","rockblock"},
|
||||||
}
|
}
|
||||||
local function T(s,t)return love.graphics.newText(setFont(s),t)end
|
local function T(s,t)return love.graphics.newText(setFont(s),t)end
|
||||||
|
|||||||
366
parts/player.lua
366
parts/player.lua
@@ -18,8 +18,11 @@ local gameEnv0={
|
|||||||
smooth=false,grid=false,
|
smooth=false,grid=false,
|
||||||
bagLine=false,
|
bagLine=false,
|
||||||
text=true,
|
text=true,
|
||||||
lockFX=2,dropFX=3,
|
lockFX=2,
|
||||||
clearFX=2,shakeFX=3,
|
dropFX=2,
|
||||||
|
moveFX=2,
|
||||||
|
clearFX=2,
|
||||||
|
shakeFX=3,
|
||||||
|
|
||||||
drop=60,lock=60,
|
drop=60,lock=60,
|
||||||
wait=0,fall=0,
|
wait=0,fall=0,
|
||||||
@@ -84,7 +87,7 @@ local finesseList={
|
|||||||
finesseList[1][3],finesseList[1][4],finesseList[7][3],finesseList[7][4]=finesseList[1][1],finesseList[1][2],finesseList[7][1],finesseList[7][2]--"2-phase" SZI
|
finesseList[1][3],finesseList[1][4],finesseList[7][3],finesseList[7][4]=finesseList[1][1],finesseList[1][2],finesseList[7][1],finesseList[7][2]--"2-phase" SZI
|
||||||
finesseList[2]=finesseList[1]--S=Z
|
finesseList[2]=finesseList[1]--S=Z
|
||||||
finesseList[4],finesseList[5]=finesseList[3],finesseList[3]--J=L=T
|
finesseList[4],finesseList[5]=finesseList[3],finesseList[3]--J=L=T
|
||||||
local CCblockID={4,3,6,5,1,2,0}
|
local CCblockID={6,5,4,3,2,1,0}
|
||||||
local freshPrepare={
|
local freshPrepare={
|
||||||
none=NULL,
|
none=NULL,
|
||||||
bag=function(P)
|
bag=function(P)
|
||||||
@@ -243,12 +246,21 @@ local function updateFXs(P,dt)
|
|||||||
--DropFX
|
--DropFX
|
||||||
for i=#P.dropFX,1,-1 do
|
for i=#P.dropFX,1,-1 do
|
||||||
local S=P.dropFX[i]
|
local S=P.dropFX[i]
|
||||||
S[6]=S[6]+S[7]*dt
|
S[5]=S[5]+S[6]*dt
|
||||||
if S[6]>1 then
|
if S[5]>1 then
|
||||||
rem(P.dropFX,i)
|
rem(P.dropFX,i)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
--MoveFX
|
||||||
|
for i=#P.moveFX,1,-1 do
|
||||||
|
local S=P.moveFX[i]
|
||||||
|
S[4]=S[4]+S[5]*dt
|
||||||
|
if S[4]>1 then
|
||||||
|
rem(P.moveFX,i)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
--ClearFX
|
--ClearFX
|
||||||
for i=#P.clearFX,1,-1 do
|
for i=#P.clearFX,1,-1 do
|
||||||
local S=P.clearFX[i]
|
local S=P.clearFX[i]
|
||||||
@@ -410,15 +422,15 @@ local function Pupdate_alive(P,dt)
|
|||||||
|
|
||||||
--Try spawn new block
|
--Try spawn new block
|
||||||
if not P.control then goto stop end
|
if not P.control then goto stop end
|
||||||
if P.waiting==0 then P:popNext()end
|
|
||||||
if P.waiting>=0 then
|
if P.waiting>=0 then
|
||||||
P.waiting=P.waiting-1
|
P.waiting=P.waiting-1
|
||||||
|
if P.waiting<0 then P:popNext()end
|
||||||
goto stop
|
goto stop
|
||||||
end
|
end
|
||||||
|
|
||||||
--Natural block falling
|
--Natural block falling
|
||||||
if P.cur then
|
if P.cur then
|
||||||
if P.curY~=P.imgY then
|
if P.curY>P.imgY then
|
||||||
local D=P.dropDelay
|
local D=P.dropDelay
|
||||||
if D>1 then
|
if D>1 then
|
||||||
P.dropDelay=D-1
|
P.dropDelay=D-1
|
||||||
@@ -426,18 +438,24 @@ local function Pupdate_alive(P,dt)
|
|||||||
end
|
end
|
||||||
|
|
||||||
if D==1 then
|
if D==1 then
|
||||||
|
if P.gameEnv.moveFX and P.gameEnv.block then
|
||||||
|
P:createMoveFX("down")
|
||||||
|
end
|
||||||
P.curY=P.curY-1
|
P.curY=P.curY-1
|
||||||
else
|
else
|
||||||
local _=P.curY-P.imgY--Max fall dist
|
|
||||||
D=1/D--Fall dist
|
D=1/D--Fall dist
|
||||||
if D<_ then
|
if D>P.curY-P.imgY then D=P.curY-P.imgY end
|
||||||
P.curY=P.curY-D
|
if P.gameEnv.moveFX and P.gameEnv.block then
|
||||||
-- assert(P.curY==int(P.curY),"y:"..P.curY.." fall:"..D.." D_env:"..P.gameEnv.drop)
|
for i=1,D do
|
||||||
|
P:createMoveFX("down")
|
||||||
|
P.curY=P.curY-1
|
||||||
|
end
|
||||||
else
|
else
|
||||||
P.curY=P.imgY
|
P.curY=P.curY-D
|
||||||
end
|
end
|
||||||
|
-- assert(P.curY==int(P.curY),"y:"..P.curY.." fall:"..D.." D_env:"..P.gameEnv.drop)
|
||||||
end
|
end
|
||||||
P:freshMinY()
|
P:freshBlock(true,true)
|
||||||
P.spinLast=false
|
P.spinLast=false
|
||||||
|
|
||||||
if P.imgY~=P.curY then
|
if P.imgY~=P.curY then
|
||||||
@@ -533,25 +551,29 @@ end
|
|||||||
local function drawFXs(P)
|
local function drawFXs(P)
|
||||||
--LockFX
|
--LockFX
|
||||||
for i=1,#P.lockFX do
|
for i=1,#P.lockFX do
|
||||||
_=P.lockFX[i]
|
local S=P.lockFX[i]
|
||||||
if _[3]<.5 then
|
if S[3]<.5 then
|
||||||
gc.setColor(1,1,1,2*_[3])
|
gc.setColor(1,1,1,2*S[3])
|
||||||
gc.rectangle("fill",_[1],_[2],60*_[3],30)
|
gc.rectangle("fill",S[1],S[2],60*S[3],30)
|
||||||
else
|
else
|
||||||
gc.setColor(1,1,1,2-2*_[3])
|
gc.setColor(1,1,1,2-2*S[3])
|
||||||
gc.rectangle("fill",_[1]+30,_[2],60*_[3]-60,30)
|
gc.rectangle("fill",S[1]+30,S[2],60*S[3]-60,30)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
--DropFX
|
--DropFX
|
||||||
for i=1,#P.dropFX do
|
for i=1,#P.dropFX do
|
||||||
_=P.dropFX[i]
|
local S=P.dropFX[i]
|
||||||
gc.setColor(1,1,1,.6-_[6]*.6)
|
gc.setColor(1,1,1,.6-S[5]*.6)
|
||||||
for x=_[2],_[4]do
|
local w=30*S[3]*(1-S[5]*.5)
|
||||||
for y=_[5],_[3]do
|
gc.rectangle("fill",30*S[1]-30+15*S[3]-w*.5,600-30*S[2],w,30*S[4])
|
||||||
drawPixel(y,x,_[1])
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
|
|
||||||
|
--MoveFX
|
||||||
|
for i=1,#P.moveFX do
|
||||||
|
local S=P.moveFX[i]
|
||||||
|
gc.setColor(1,1,1,.6-S[4]*.6)
|
||||||
|
drawPixel(S[3],S[2],S[1])
|
||||||
end
|
end
|
||||||
|
|
||||||
--ClearFX
|
--ClearFX
|
||||||
@@ -636,7 +658,7 @@ local function Pdraw_norm(P)
|
|||||||
end end
|
end end
|
||||||
end
|
end
|
||||||
|
|
||||||
local dy=P.gameEnv.smooth and P.imgY~=P.curY and (min(P.dropDelay,1e99)/P.gameEnv.drop-1)*30 or 0
|
local dy=P.gameEnv.smooth and P.imgY~=P.curY and(P.dropDelay/P.gameEnv.drop-1)*30 or 0
|
||||||
gc.translate(0,-dy)
|
gc.translate(0,-dy)
|
||||||
local trans=P.lockDelay/P.gameEnv.lock
|
local trans=P.lockDelay/P.gameEnv.lock
|
||||||
if P.gameEnv.block then
|
if P.gameEnv.block then
|
||||||
@@ -680,13 +702,18 @@ local function Pdraw_norm(P)
|
|||||||
::E::
|
::E::
|
||||||
gc.setScissor()
|
gc.setScissor()
|
||||||
gc.translate(0,-P.fieldBeneath)
|
gc.translate(0,-P.fieldBeneath)
|
||||||
gc.setColor(1,1,1)
|
|
||||||
gc.rectangle("line",301,0,15,601)--AtkBuffer boarder
|
|
||||||
gc.rectangle("line",-16,-3,15,604)--B2b bar boarder
|
|
||||||
gc.setColor(P.frameColor)
|
gc.setColor(P.frameColor)
|
||||||
gc.rectangle("line",-1,-11,302,612)--Boarder
|
gc.rectangle("line",-1,-11,302,612)--Boarder
|
||||||
|
gc.rectangle("line",301,0,15,601)--AtkBuffer boarder
|
||||||
|
gc.rectangle("line",-16,-3,15,604)--B2b bar boarder
|
||||||
|
|
||||||
|
|
||||||
--LockDelay indicator
|
--LockDelay indicator
|
||||||
|
if P.gameEnv.easyFresh then
|
||||||
|
gc.setColor(1,1,1)
|
||||||
|
else
|
||||||
|
gc.setColor(1,.26,.26)
|
||||||
|
end
|
||||||
if P.lockDelay>=0 then
|
if P.lockDelay>=0 then
|
||||||
gc.rectangle("fill",0,602,300*P.lockDelay/P.gameEnv.lock,6)--Lock delay indicator
|
gc.rectangle("fill",0,602,300*P.lockDelay/P.gameEnv.lock,6)--Lock delay indicator
|
||||||
end
|
end
|
||||||
@@ -811,6 +838,12 @@ local function Pdraw_norm(P)
|
|||||||
mStr(format("%.2f",P.stat.time),-81,518)--Time
|
mStr(format("%.2f",P.stat.time),-81,518)--Time
|
||||||
mStr(P.score1,-81,560)--Score
|
mStr(P.score1,-81,560)--Score
|
||||||
|
|
||||||
|
--Display Ys
|
||||||
|
-- gc.setLineWidth(6)
|
||||||
|
-- if P.curY then gc.setColor(1,.4,0,.626)gc.line(0,611-P.curY*30,300,611-P.curY*30)end
|
||||||
|
-- if P.imgY then gc.setColor(0,1,.4,.626)gc.line(0,615-P.imgY*30,300,615-P.imgY*30)end
|
||||||
|
-- if P.minY then gc.setColor(0,.4,1,.626)gc.line(0,619-P.minY*30,300,619-P.minY*30)end
|
||||||
|
|
||||||
--Other messages
|
--Other messages
|
||||||
gc.setColor(1,1,1)
|
gc.setColor(1,1,1)
|
||||||
curMode.mesDisp(P)
|
curMode.mesDisp(P)
|
||||||
@@ -979,11 +1012,11 @@ end
|
|||||||
--------------------------<FX>--------------------------
|
--------------------------<FX>--------------------------
|
||||||
function player.showText(P,text,dx,dy,font,style,spd,stop)
|
function player.showText(P,text,dx,dy,font,style,spd,stop)
|
||||||
if P.gameEnv.text then
|
if P.gameEnv.text then
|
||||||
P.bonus[#P.bonus+1]=TEXT.getText(text,150+dx,300+dy,font*P.size,style,spd,stop)
|
ins(P.bonus,TEXT.getText(text,150+dx,300+dy,font*P.size,style,spd,stop))
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
function player.showTextF(P,text,dx,dy,font,style,spd,stop)
|
function player.showTextF(P,text,dx,dy,font,style,spd,stop)
|
||||||
P.bonus[#P.bonus+1]=TEXT.getText(text,150+dx,300+dy,font*P.size,style,spd,stop)
|
ins(P.bonus,TEXT.getText(text,150+dx,300+dy,font*P.size,style,spd,stop))
|
||||||
end
|
end
|
||||||
local function without(L,e)
|
local function without(L,e)
|
||||||
for i=1,#L do
|
for i=1,#L do
|
||||||
@@ -993,7 +1026,7 @@ local function without(L,e)
|
|||||||
end
|
end
|
||||||
function player.createLockFX(P)
|
function player.createLockFX(P)
|
||||||
local BK=P.cur.bk
|
local BK=P.cur.bk
|
||||||
local t=12-P.gameEnv.lockFX*3
|
local t=12-P.gameEnv.lockFX*2
|
||||||
|
|
||||||
for i=1,P.r do
|
for i=1,P.r do
|
||||||
local y=P.curY+i-1
|
local y=P.curY+i-1
|
||||||
@@ -1007,9 +1040,49 @@ function player.createLockFX(P)
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
function player.createDropFX(P,x1,y1,x2,y2)--x1<x2,y1>y2!
|
function player.creatDropFX(P,x,y,w,h)--TODO, remake dropFX
|
||||||
if P.gameEnv.block and y1>=y2 then
|
ins(P.dropFX,{x,y,w,h,0,13-2*P.gameEnv.dropFX})
|
||||||
P.dropFX[#P.dropFX+1]={P.cur.color,x1,y1,x2,y2,0,12-2*P.gameEnv.dropFX}
|
end
|
||||||
|
function player.createMoveFX(P,dir)
|
||||||
|
local T=10-1.5*P.gameEnv.moveFX
|
||||||
|
local C=P.cur.color
|
||||||
|
local x=P.curX-1
|
||||||
|
local y=P.gameEnv.smooth and P.curY+P.dropDelay/P.gameEnv.drop-2 or P.curY-1
|
||||||
|
if dir=="left"then
|
||||||
|
for i=1,P.r do
|
||||||
|
for j=P.c,1,-1 do
|
||||||
|
if P.cur.bk[i][j]then
|
||||||
|
ins(P.moveFX,{C,x+j,y+i,0,T})
|
||||||
|
break
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
elseif dir=="right"then
|
||||||
|
for i=1,P.r do
|
||||||
|
for j=1,P.c do
|
||||||
|
if P.cur.bk[i][j]then
|
||||||
|
ins(P.moveFX,{C,x+j,y+i,0,T})
|
||||||
|
break
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
elseif dir=="down"then
|
||||||
|
for j=1,P.c do
|
||||||
|
for i=P.r,1,-1 do
|
||||||
|
if P.cur.bk[i][j]then
|
||||||
|
ins(P.moveFX,{C,x+j,y+i,0,T})
|
||||||
|
break
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
else
|
||||||
|
for i=1,P.r do
|
||||||
|
for j=1,P.c do
|
||||||
|
if P.cur.bk[i][j]then
|
||||||
|
ins(P.moveFX,{C,x+j,y+i,0,T})
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
function player.createBeam(P,R,send,time,target,color,clear,spin,combo)
|
function player.createBeam(P,R,send,time,target,color,clear,spin,combo)
|
||||||
@@ -1063,7 +1136,7 @@ function player.createBeam(P,R,send,time,target,color,clear,spin,combo)
|
|||||||
radius=radius*.4
|
radius=radius*.4
|
||||||
a=.35
|
a=.35
|
||||||
end
|
end
|
||||||
FX_attack[#FX_attack+1]={
|
ins(FX_attack,{
|
||||||
x=x1,y=y1,--Current pos
|
x=x1,y=y1,--Current pos
|
||||||
x1=x1,y1=y1,--Start pos
|
x1=x1,y1=y1,--Start pos
|
||||||
x2=x2,y2=y2,--End pos
|
x2=x2,y2=y2,--End pos
|
||||||
@@ -1073,14 +1146,14 @@ function player.createBeam(P,R,send,time,target,color,clear,spin,combo)
|
|||||||
r=r,g=g,b=b,a=a*(setting.atkFX+5)*.1,
|
r=r,g=g,b=b,a=a*(setting.atkFX+5)*.1,
|
||||||
t=0,
|
t=0,
|
||||||
drag={},--Afterimage coordinate list
|
drag={},--Afterimage coordinate list
|
||||||
}
|
})
|
||||||
end
|
end
|
||||||
function player.newTask(P,code,data)
|
function player.newTask(P,code,data)
|
||||||
local L=P.tasks
|
local L=P.tasks
|
||||||
L[#L+1]={
|
ins(L,{
|
||||||
code=code,
|
code=code,
|
||||||
data=data,
|
data=data,
|
||||||
}
|
})
|
||||||
end
|
end
|
||||||
--------------------------</FX>--------------------------
|
--------------------------</FX>--------------------------
|
||||||
|
|
||||||
@@ -1215,7 +1288,7 @@ function player.garbageRise(P,color,amount,pos)
|
|||||||
_=P.dropFX[i]
|
_=P.dropFX[i]
|
||||||
_[3],_[5]=_[3]+amount,_[5]+amount
|
_[3],_[5]=_[3]+amount,_[5]+amount
|
||||||
end
|
end
|
||||||
if #P.field>40 then P:lose()end
|
if #P.field>42 then P:lose()end
|
||||||
end
|
end
|
||||||
|
|
||||||
local invList={2,1,4,3,5,6,7}
|
local invList={2,1,4,3,5,6,7}
|
||||||
@@ -1238,7 +1311,7 @@ function player.pushLine(P,L,mir)
|
|||||||
P.fieldBeneath=P.fieldBeneath+120
|
P.fieldBeneath=P.fieldBeneath+120
|
||||||
P.curY=P.curY+#L
|
P.curY=P.curY+#L
|
||||||
P.imgY=P.imgY+#L
|
P.imgY=P.imgY+#L
|
||||||
P:freshgho()
|
P:freshBlock(false,false)
|
||||||
end
|
end
|
||||||
function player.pushNext(P,L,mir)
|
function player.pushNext(P,L,mir)
|
||||||
for i=1,#L do
|
for i=1,#L do
|
||||||
@@ -1288,15 +1361,14 @@ function player.changeAtk(P,R)
|
|||||||
end
|
end
|
||||||
if R then
|
if R then
|
||||||
P.atking=R
|
P.atking=R
|
||||||
R.atker[#R.atker+1]=P
|
ins(R.atker,P)
|
||||||
else
|
else
|
||||||
P.atking=nil
|
P.atking=nil
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
function player.freshgho(P)
|
function player.freshBlock(P,keepGhost,control,system)
|
||||||
if not P.cur then return end
|
if not keepGhost and P.cur then
|
||||||
P.imgY=min(#P.field+1,P.curY)
|
P.imgY=min(#P.field+1,P.curY)
|
||||||
|
|
||||||
if P.gameEnv._20G or P.keyPressing[7]and P.gameEnv.sdarr==0 then
|
if P.gameEnv._20G or P.keyPressing[7]and P.gameEnv.sdarr==0 then
|
||||||
local _=P.imgY
|
local _=P.imgY
|
||||||
|
|
||||||
@@ -1312,8 +1384,8 @@ function player.freshgho(P)
|
|||||||
|
|
||||||
--Create FX if dropped
|
--Create FX if dropped
|
||||||
if P.curY>P.imgY then
|
if P.curY>P.imgY then
|
||||||
if P.gameEnv.dropFX then
|
if P.gameEnv.dropFX and P.gameEnv.block and P.curY-P.imgY-P.r>-1 then
|
||||||
P:createDropFX(P.curX,P.curY+1,P.curX+P.c-1,P.imgY+P.r-1)
|
P:creatDropFX(P.curX,P.curY-1,P.c,P.curY-P.imgY-P.r+1)
|
||||||
end
|
end
|
||||||
if P.gameEnv.shakeFX then
|
if P.gameEnv.shakeFX then
|
||||||
P.fieldOff.vy=P.gameEnv.shakeFX*.5
|
P.fieldOff.vy=P.gameEnv.shakeFX*.5
|
||||||
@@ -1325,30 +1397,38 @@ function player.freshgho(P)
|
|||||||
P.imgY=P.imgY-1
|
P.imgY=P.imgY-1
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
|
||||||
function player.freshLockDelay(P)
|
|
||||||
--Return when fall-fresh but no fall
|
|
||||||
if not P.gameEnv.easyFresh and P.curY>=P.minY then
|
|
||||||
return
|
|
||||||
end
|
end
|
||||||
|
|
||||||
local d,d0=P.lockDelay,P.gameEnv.lock
|
if control then
|
||||||
if d<d0 and(P.freshTime<P.gameEnv.freshLimit or P.curY<P.minY)then
|
if P.gameEnv.easyFresh then
|
||||||
if P.lockDelay<P.gameEnv.lock then
|
local d0=P.gameEnv.lock
|
||||||
|
if P.lockDelay<d0 and P.freshTime<P.gameEnv.freshLimit then
|
||||||
|
if not system then
|
||||||
|
P.freshTime=P.freshTime+1
|
||||||
|
end
|
||||||
|
P.lockDelay=d0
|
||||||
P.dropDelay=P.gameEnv.drop
|
P.dropDelay=P.gameEnv.drop
|
||||||
end
|
end
|
||||||
P.freshTime=P.freshTime+1
|
|
||||||
P.lockDelay=min(d+d0*.6,d0)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
function player.freshMinY(P)
|
|
||||||
if P.curY<P.minY then
|
if P.curY<P.minY then
|
||||||
P.freshTime=max(P.freshTime-1,0)
|
|
||||||
P.minY=P.curY
|
P.minY=P.curY
|
||||||
|
P.dropDelay=P.gameEnv.drop
|
||||||
P.lockDelay=P.gameEnv.lock
|
P.lockDelay=P.gameEnv.lock
|
||||||
end
|
end
|
||||||
|
else
|
||||||
|
if P.curY<P.minY then
|
||||||
|
P.minY=P.curY
|
||||||
|
if P.lockDelay<P.gameEnv.lock and P.freshTime<P.gameEnv.freshLimit then
|
||||||
|
P.freshTime=P.freshTime+1
|
||||||
|
P.dropDelay=P.gameEnv.drop
|
||||||
|
P.lockDelay=P.gameEnv.lock
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
end
|
end
|
||||||
function player.lock(P)
|
function player.lock(P)
|
||||||
|
local dest=P.AI_dest
|
||||||
|
local has_dest=dest~=nil
|
||||||
for i=1,P.r do
|
for i=1,P.r do
|
||||||
local y=P.curY+i-1
|
local y=P.curY+i-1
|
||||||
if not P.field[y]then P.field[y],P.visTime[y]=freeRow.get(0),freeRow.get(0)end
|
if not P.field[y]then P.field[y],P.visTime[y]=freeRow.get(0),freeRow.get(0)end
|
||||||
@@ -1356,8 +1436,24 @@ function player.lock(P)
|
|||||||
if P.cur.bk[i][j]then
|
if P.cur.bk[i][j]then
|
||||||
P.field[y][P.curX+j-1]=P.cur.color
|
P.field[y][P.curX+j-1]=P.cur.color
|
||||||
P.visTime[y][P.curX+j-1]=P.showTime
|
P.visTime[y][P.curX+j-1]=P.showTime
|
||||||
|
local x=P.curX+j-1
|
||||||
|
if dest then
|
||||||
|
local original_length=#dest
|
||||||
|
for k=1,original_length do
|
||||||
|
if x==dest[k][1]and y==dest[k][2]then
|
||||||
|
rem(dest, k)
|
||||||
|
break
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
if #dest~=original_length-1 then
|
||||||
|
dest=nil
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
if has_dest and not dest then
|
||||||
|
CC_updateField(P)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
function player.spin(P,d,ifpre)
|
function player.spin(P,d,ifpre)
|
||||||
@@ -1370,7 +1466,9 @@ function player.spin(P,d,ifpre)
|
|||||||
local ix,iy=P.curX+P.sc[2]-isc[2],P.curY+P.sc[1]-isc[1]
|
local ix,iy=P.curX+P.sc[2]-isc[2],P.curY+P.sc[1]-isc[1]
|
||||||
iki=iki[P.dir*10+idir]
|
iki=iki[P.dir*10+idir]
|
||||||
if not iki then
|
if not iki then
|
||||||
if P.gameEnv.easyFresh then P:freshLockDelay()end
|
if P.gameEnv.easyFresh then
|
||||||
|
P:freshBlock(false,true)
|
||||||
|
end
|
||||||
SFX.fieldPlay(ifpre and"prerotate"or "rotate",nil,P)
|
SFX.fieldPlay(ifpre and"prerotate"or "rotate",nil,P)
|
||||||
return
|
return
|
||||||
end
|
end
|
||||||
@@ -1378,17 +1476,17 @@ function player.spin(P,d,ifpre)
|
|||||||
local x,y=ix+iki[test][1],iy+iki[test][2]
|
local x,y=ix+iki[test][1],iy+iki[test][2]
|
||||||
if not P:ifoverlap(icb,x,y)and(P.freshTime<=P.gameEnv.freshLimit or iki[test][2]<0)then
|
if not P:ifoverlap(icb,x,y)and(P.freshTime<=P.gameEnv.freshLimit or iki[test][2]<0)then
|
||||||
ix,iy=x,y
|
ix,iy=x,y
|
||||||
if P.gameEnv.dropFX then
|
if P.gameEnv.moveFX and P.gameEnv.block then
|
||||||
P:createDropFX(P.curX,P.curY+P.r-1,P.curX+P.c-1,P.curY)
|
P:createMoveFX()
|
||||||
end
|
end
|
||||||
P.curX,P.curY,P.dir=ix,iy,idir
|
P.curX,P.curY,P.dir=ix,iy,idir
|
||||||
P.sc,P.cur.bk=scs[P.cur.id][idir],icb
|
P.sc,P.cur.bk=scs[P.cur.id][idir],icb
|
||||||
P.r,P.c=ir,ic
|
P.r,P.c=ir,ic
|
||||||
P.spinLast=test==2 and 0 or 1
|
P.spinLast=test==2 and 0 or 1
|
||||||
if not ifpre then P:freshgho()end
|
if not ifpre then
|
||||||
P:freshLockDelay()
|
P:freshBlock(false,true)
|
||||||
P:freshMinY()
|
end
|
||||||
if iki[test][2]>0 then
|
if iki[test][2]>0 and not P.gameEnv.easyFresh then
|
||||||
P.freshTime=P.freshTime+1
|
P.freshTime=P.freshTime+1
|
||||||
end
|
end
|
||||||
|
|
||||||
@@ -1487,8 +1585,10 @@ function player.hold(P,ifpre)
|
|||||||
end
|
end
|
||||||
if C then
|
if C then
|
||||||
P:resetBlock()
|
P:resetBlock()
|
||||||
P:freshgho()
|
P:freshBlock(false,true)
|
||||||
P.dropDelay,P.lockDelay,P.freshTime=P.gameEnv.drop,P.gameEnv.lock,max(P.freshTime-5,0)
|
P.dropDelay=P.gameEnv.drop
|
||||||
|
P.lockDelay=P.gameEnv.lock
|
||||||
|
P.freshTime=max(P.freshTime-5,0)
|
||||||
if P:ifoverlap(P.cur.bk,P.curX,P.curY)then P:lock()P:lose()end
|
if P:ifoverlap(P.cur.bk,P.curX,P.curY)then P:lock()P:lose()end
|
||||||
end
|
end
|
||||||
|
|
||||||
@@ -1501,7 +1601,7 @@ end
|
|||||||
|
|
||||||
function player.getNext(P,n)
|
function player.getNext(P,n)
|
||||||
local E=P.gameEnv
|
local E=P.gameEnv
|
||||||
P.next[#P.next+1]={bk=blocks[n][E.face[n]],id=n,color=E.bone and 12 or E.skin[n],name=n}
|
ins(P.next,{bk=blocks[n][E.face[n]],id=n,color=E.bone and 12 or E.skin[n],name=n})
|
||||||
end
|
end
|
||||||
function player.popNext(P)--Pop next queue to hand
|
function player.popNext(P)--Pop next queue to hand
|
||||||
P.holded=false
|
P.holded=false
|
||||||
@@ -1529,15 +1629,23 @@ function player.popNext(P)--Pop next queue to hand
|
|||||||
P:resetBlock()
|
P:resetBlock()
|
||||||
end
|
end
|
||||||
|
|
||||||
P.dropDelay,P.lockDelay,P.freshTime=P.gameEnv.drop,P.gameEnv.lock,0
|
P.dropDelay=P.gameEnv.drop
|
||||||
|
P.lockDelay=P.gameEnv.lock
|
||||||
|
P.freshTime=0
|
||||||
|
|
||||||
if P.cur then
|
if P.cur then
|
||||||
if P:ifoverlap(P.cur.bk,P.curX,P.curY)then P:lock()P:lose()end
|
if P:ifoverlap(P.cur.bk,P.curX,P.curY)then
|
||||||
P:freshgho()
|
P:lock()
|
||||||
|
P:lose()
|
||||||
|
end
|
||||||
|
P:freshBlock(false,true,true)
|
||||||
end
|
end
|
||||||
|
|
||||||
--IHdS
|
--IHdS
|
||||||
if _[6]then P.act.hardDrop(P)_[6]=false end
|
if _[6]then
|
||||||
|
P.act.hardDrop(P)
|
||||||
|
_[6]=false
|
||||||
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
@@ -1624,7 +1732,7 @@ function player.drop(P)--Place piece
|
|||||||
--Create clearing FX
|
--Create clearing FX
|
||||||
if cc>0 and P.gameEnv.clearFX then
|
if cc>0 and P.gameEnv.clearFX then
|
||||||
local l=P.clearedRow
|
local l=P.clearedRow
|
||||||
local t=6-P.gameEnv.clearFX*1.5
|
local t=7-P.gameEnv.clearFX*1
|
||||||
for i=1,cc do
|
for i=1,cc do
|
||||||
ins(P.clearFX,{l[i],0,t})
|
ins(P.clearFX,{l[i],0,t})
|
||||||
end
|
end
|
||||||
@@ -1634,8 +1742,13 @@ function player.drop(P)--Place piece
|
|||||||
if P.gameEnv.lockFX then
|
if P.gameEnv.lockFX then
|
||||||
if cc==0 then
|
if cc==0 then
|
||||||
P:createLockFX()
|
P:createLockFX()
|
||||||
elseif P.lockFX[1]then
|
else
|
||||||
P.lockFX={}
|
_=#P.lockFX
|
||||||
|
if _>0 then
|
||||||
|
for i=1,_ do
|
||||||
|
rem(P.lockFX)
|
||||||
|
end
|
||||||
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
@@ -1942,7 +2055,7 @@ function player.drop(P)--Place piece
|
|||||||
if P.dropSpeed>60 then
|
if P.dropSpeed>60 then
|
||||||
dropScore=dropScore*P.dropSpeed/60
|
dropScore=dropScore*P.dropSpeed/60
|
||||||
elseif P.dropSpeed>120 then
|
elseif P.dropSpeed>120 then
|
||||||
dropScore=dropScore*1,2*P.dropSpeed/120
|
dropScore=dropScore*1.2*P.dropSpeed/120
|
||||||
elseif P.dropSpeed>180 then
|
elseif P.dropSpeed>180 then
|
||||||
dropScore=dropScore*1.5*P.dropSpeed/180
|
dropScore=dropScore*1.5*P.dropSpeed/180
|
||||||
end
|
end
|
||||||
@@ -2237,9 +2350,11 @@ function player.act.moveLeft(P,auto)
|
|||||||
end
|
end
|
||||||
elseif P.control and P.waiting==-1 then
|
elseif P.control and P.waiting==-1 then
|
||||||
if P.cur and not P:ifoverlap(P.cur.bk,P.curX-1,P.curY)then
|
if P.cur and not P:ifoverlap(P.cur.bk,P.curX-1,P.curY)then
|
||||||
|
if P.gameEnv.moveFX and P.gameEnv.block then
|
||||||
|
P:createMoveFX("left")
|
||||||
|
end
|
||||||
P.curX=P.curX-1
|
P.curX=P.curX-1
|
||||||
P:freshgho()
|
P:freshBlock(false,true)
|
||||||
P:freshLockDelay()
|
|
||||||
if P.human and P.curY==P.imgY then SFX.play("move")end
|
if P.human and P.curY==P.imgY then SFX.play("move")end
|
||||||
if not auto then P.moving=0 end
|
if not auto then P.moving=0 end
|
||||||
P.spinLast=false
|
P.spinLast=false
|
||||||
@@ -2262,9 +2377,11 @@ function player.act.moveRight(P,auto)
|
|||||||
end
|
end
|
||||||
elseif P.control and P.waiting==-1 then
|
elseif P.control and P.waiting==-1 then
|
||||||
if P.cur and not P:ifoverlap(P.cur.bk,P.curX+1,P.curY)then
|
if P.cur and not P:ifoverlap(P.cur.bk,P.curX+1,P.curY)then
|
||||||
|
if P.gameEnv.moveFX and P.gameEnv.block then
|
||||||
|
P:createMoveFX("right")
|
||||||
|
end
|
||||||
P.curX=P.curX+1
|
P.curX=P.curX+1
|
||||||
P:freshgho()
|
P:freshBlock(false,true)
|
||||||
P:freshLockDelay()
|
|
||||||
if P.human and P.curY==P.imgY then SFX.play("move")end
|
if P.human and P.curY==P.imgY then SFX.play("move")end
|
||||||
if not auto then P.moving=0 end
|
if not auto then P.moving=0 end
|
||||||
P.spinLast=false
|
P.spinLast=false
|
||||||
@@ -2303,9 +2420,9 @@ function player.act.hardDrop(P)
|
|||||||
end
|
end
|
||||||
P.keyPressing[6]=false
|
P.keyPressing[6]=false
|
||||||
elseif P.control and P.waiting==-1 and P.cur then
|
elseif P.control and P.waiting==-1 and P.cur then
|
||||||
if P.curY~=P.imgY then
|
if P.curY>P.imgY then
|
||||||
if P.gameEnv.dropFX then
|
if P.gameEnv.dropFX and P.gameEnv.block and P.curY-P.imgY-P.r>-1 then
|
||||||
P:createDropFX(P.curX,P.curY+1,P.curX+P.c-1,P.imgY+P.r-1)
|
P:creatDropFX(P.curX,P.curY-1,P.c,P.curY-P.imgY-P.r+1)
|
||||||
end
|
end
|
||||||
P.curY=P.imgY
|
P.curY=P.imgY
|
||||||
P.spinLast=false
|
P.spinLast=false
|
||||||
@@ -2330,9 +2447,9 @@ function player.act.softDrop(P)
|
|||||||
else
|
else
|
||||||
P.downing=1
|
P.downing=1
|
||||||
if P.control and P.waiting==-1 and P.cur then
|
if P.control and P.waiting==-1 and P.cur then
|
||||||
if P.curY~=P.imgY then
|
if P.curY>P.imgY then
|
||||||
P.curY=P.curY-1
|
P.curY=P.curY-1
|
||||||
P:freshMinY()
|
P:freshBlock(true,true)
|
||||||
P.spinLast=false
|
P.spinLast=false
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
@@ -2356,14 +2473,13 @@ function player.act.insLeft(P,auto)
|
|||||||
if P.gameEnv.nofly or not P.cur then return end
|
if P.gameEnv.nofly or not P.cur then return end
|
||||||
local x0=P.curX
|
local x0=P.curX
|
||||||
while not P:ifoverlap(P.cur.bk,P.curX-1,P.curY)do
|
while not P:ifoverlap(P.cur.bk,P.curX-1,P.curY)do
|
||||||
P.curX=P.curX-1
|
if P.gameEnv.moveFX and P.gameEnv.block then
|
||||||
if P.gameEnv.dropFX then
|
P:createMoveFX("left")
|
||||||
P:createDropFX(P.curX+P.c,P.curY+P.r-1,P.curX+P.c,P.curY)
|
|
||||||
end
|
end
|
||||||
P:freshgho()
|
P.curX=P.curX-1
|
||||||
|
P:freshBlock(false,true)
|
||||||
end
|
end
|
||||||
if P.curX~=x0 then
|
if P.curX~=x0 then
|
||||||
P:freshLockDelay()
|
|
||||||
P.spinLast=false
|
P.spinLast=false
|
||||||
end
|
end
|
||||||
if P.gameEnv.shakeFX then
|
if P.gameEnv.shakeFX then
|
||||||
@@ -2379,14 +2495,13 @@ function player.act.insRight(P,auto)
|
|||||||
if P.gameEnv.nofly or not P.cur then return end
|
if P.gameEnv.nofly or not P.cur then return end
|
||||||
local x0=P.curX
|
local x0=P.curX
|
||||||
while not P:ifoverlap(P.cur.bk,P.curX+1,P.curY)do
|
while not P:ifoverlap(P.cur.bk,P.curX+1,P.curY)do
|
||||||
P.curX=P.curX+1
|
if P.gameEnv.moveFX and P.gameEnv.block then
|
||||||
if P.gameEnv.dropFX then
|
P:createMoveFX("right")
|
||||||
P:createDropFX(P.curX-1,P.curY+P.r-1,P.curX-1,P.curY)
|
|
||||||
end
|
end
|
||||||
P:freshgho()
|
P.curX=P.curX+1
|
||||||
|
P:freshBlock(false,true)
|
||||||
end
|
end
|
||||||
if P.curX~=x0 then
|
if P.curX~=x0 then
|
||||||
P:freshLockDelay()
|
|
||||||
P.spinLast=false
|
P.spinLast=false
|
||||||
end
|
end
|
||||||
if P.gameEnv.shakeFX then
|
if P.gameEnv.shakeFX then
|
||||||
@@ -2399,29 +2514,32 @@ function player.act.insRight(P,auto)
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
function player.act.insDown(P)
|
function player.act.insDown(P)
|
||||||
if P.curY~=P.imgY and P.cur then
|
if P.curY>P.imgY and P.cur then
|
||||||
if P.gameEnv.dropFX then
|
if P.gameEnv.dropFX and P.gameEnv.block and P.curY-P.imgY-P.r>-1 then
|
||||||
P:createDropFX(P.curX,P.curY+1,P.curX+P.c-1,P.imgY+P.r-1)
|
P:creatDropFX(P.curX,P.curY-1,P.c,P.curY-P.imgY-P.r+1)
|
||||||
end
|
end
|
||||||
if P.gameEnv.shakeFX then
|
if P.gameEnv.shakeFX then
|
||||||
P.fieldOff.vy=P.gameEnv.shakeFX*.5
|
P.fieldOff.vy=P.gameEnv.shakeFX*.5
|
||||||
end
|
end
|
||||||
P.curY,P.lockDelay,P.spinLast=P.imgY,P.gameEnv.lock,false
|
P.curY,P.lockDelay,P.spinLast=P.imgY,P.gameEnv.lock,false
|
||||||
P:freshMinY()
|
P:freshBlock(true,true)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
function player.act.down1(P)
|
function player.act.down1(P)
|
||||||
if P.curY~=P.imgY and P.cur then
|
if P.curY>P.imgY and P.cur then
|
||||||
|
if P.gameEnv.moveFX and P.gameEnv.block then
|
||||||
|
P:createMoveFX("down")
|
||||||
|
end
|
||||||
P.curY=P.curY-1
|
P.curY=P.curY-1
|
||||||
P:freshMinY()
|
P:freshBlock(true,true)
|
||||||
P.spinLast=false
|
P.spinLast=false
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
function player.act.down4(P)
|
function player.act.down4(P)
|
||||||
for _=1,4 do
|
for _=1,4 do
|
||||||
if P.curY~=P.imgY and P.cur then
|
if P.curY>P.imgY and P.cur then
|
||||||
P.curY=P.curY-1
|
P.curY=P.curY-1
|
||||||
P:freshMinY()
|
P:freshBlock(true,true)
|
||||||
P.spinLast=false
|
P.spinLast=false
|
||||||
else
|
else
|
||||||
return
|
return
|
||||||
@@ -2431,9 +2549,9 @@ end
|
|||||||
function player.act.down10(P)
|
function player.act.down10(P)
|
||||||
if P.cur then
|
if P.cur then
|
||||||
for _=1,10 do
|
for _=1,10 do
|
||||||
if P.curY~=P.imgY then
|
if P.curY>P.imgY then
|
||||||
P.curY=P.curY-1
|
P.curY=P.curY-1
|
||||||
P:freshMinY()
|
P:freshBlock(true,true)
|
||||||
P.spinLast=false
|
P.spinLast=false
|
||||||
else
|
else
|
||||||
return
|
return
|
||||||
@@ -2466,14 +2584,16 @@ function player.act.zangiRight(P)
|
|||||||
P.act.hardDrop(P)
|
P.act.hardDrop(P)
|
||||||
end
|
end
|
||||||
--Give operations a num name
|
--Give operations a num name
|
||||||
A=player.act
|
do
|
||||||
T={
|
local A=player.act
|
||||||
|
local T={
|
||||||
A.moveLeft ,A.moveRight, A.rotRight, A.rotLeft,
|
A.moveLeft ,A.moveRight, A.rotRight, A.rotLeft,
|
||||||
A.rot180 ,A.hardDrop, A.softDrop, A.hold,
|
A.rot180 ,A.hardDrop, A.softDrop, A.hold,
|
||||||
A.func ,A.restart, A.insLeft, A.insRight,
|
A.func ,A.restart, A.insLeft, A.insRight,
|
||||||
A.insDown ,A.down1, A.down4, A.down10,
|
A.insDown ,A.down1, A.down4, A.down10,
|
||||||
A.dropLeft ,A.dropRight, A.zangiLeft,A.zangiRight
|
A.dropLeft ,A.dropRight, A.zangiLeft,A.zangiRight
|
||||||
}for i=1,20 do A[i]=T[i]end;A,T=nil
|
}for i=1,20 do A[i]=T[i]end
|
||||||
|
end
|
||||||
--------------------------</Control>--------------------------
|
--------------------------</Control>--------------------------
|
||||||
|
|
||||||
--------------------------<Generator>--------------------------
|
--------------------------<Generator>--------------------------
|
||||||
@@ -2567,7 +2687,7 @@ local function newEmptyPlayer(id,x,y,size)
|
|||||||
P.fieldBeneath=0
|
P.fieldBeneath=0
|
||||||
|
|
||||||
P.score1,P.b2b1=0,0
|
P.score1,P.b2b1=0,0
|
||||||
P.dropFX,P.lockFX,P.clearFX={},{},{}
|
P.dropFX,P.moveFX,P.lockFX,P.clearFX={},{},{},{}
|
||||||
P.tasks={}--Tasks
|
P.tasks={}--Tasks
|
||||||
P.bonus={}--Texts
|
P.bonus={}--Texts
|
||||||
|
|
||||||
@@ -2579,15 +2699,20 @@ end
|
|||||||
local function loadGameEnv(P)--Load gameEnv
|
local function loadGameEnv(P)--Load gameEnv
|
||||||
P.gameEnv={}--Current game setting environment
|
P.gameEnv={}--Current game setting environment
|
||||||
local ENV=P.gameEnv
|
local ENV=P.gameEnv
|
||||||
|
local E
|
||||||
--Load game settings
|
--Load game settings
|
||||||
for k,v in next,gameEnv0 do
|
for k,v in next,gameEnv0 do
|
||||||
if modeEnv[k]~=nil then
|
if modeEnv[k]~=nil then
|
||||||
v=modeEnv[k] --Mode setting
|
v=modeEnv[k] --Mode setting
|
||||||
|
-- DBP("mode-"..k..":"..tostring(v))
|
||||||
elseif game.setting[k]~=nil then
|
elseif game.setting[k]~=nil then
|
||||||
v=game.setting[k] --Game setting
|
v=game.setting[k] --Game setting
|
||||||
|
-- DBP("game-"..k..":"..tostring(v))
|
||||||
elseif setting[k]~=nil then
|
elseif setting[k]~=nil then
|
||||||
v=setting[k] --Global setting
|
v=setting[k] --Global setting
|
||||||
|
-- DBP("global-"..k..":"..tostring(v))
|
||||||
|
-- else
|
||||||
|
-- DBP("default-"..k..":"..tostring(v))
|
||||||
end
|
end
|
||||||
ENV[k]=v --Default setting
|
ENV[k]=v --Default setting
|
||||||
end
|
end
|
||||||
@@ -2623,6 +2748,7 @@ local function applyGameEnv(P)--Finish gameEnv processing
|
|||||||
|
|
||||||
if ENV.lockFX==0 then ENV.lockFX=nil end
|
if ENV.lockFX==0 then ENV.lockFX=nil end
|
||||||
if ENV.dropFX==0 then ENV.dropFX=nil end
|
if ENV.dropFX==0 then ENV.dropFX=nil end
|
||||||
|
if ENV.moveFX==0 then ENV.moveFX=nil end
|
||||||
if ENV.clearFX==0 then ENV.clearFX=nil end
|
if ENV.clearFX==0 then ENV.clearFX=nil end
|
||||||
if ENV.shakeFX==0 then ENV.shakeFX=nil end
|
if ENV.shakeFX==0 then ENV.shakeFX=nil end
|
||||||
end
|
end
|
||||||
@@ -2696,8 +2822,11 @@ function PLY.newDemoPlayer(id,x,y,size)
|
|||||||
ghost=setting.ghost,center=setting.center,
|
ghost=setting.ghost,center=setting.center,
|
||||||
smooth=setting.smooth,grid=setting.grid,
|
smooth=setting.smooth,grid=setting.grid,
|
||||||
text=setting.text,
|
text=setting.text,
|
||||||
lockFX=setting.lockFX,dropFX=setting.dropFX,
|
lockFX=setting.lockFX,
|
||||||
clearFX=setting.clearFX,shakeFX=setting.shakeFX,
|
dropFX=setting.dropFX,
|
||||||
|
moveFX=setting.moveFX,
|
||||||
|
clearFX=setting.clearFX,
|
||||||
|
shakeFX=setting.shakeFX,
|
||||||
|
|
||||||
_20G=false,bone=false,
|
_20G=false,bone=false,
|
||||||
drop=1e99,lock=1e99,
|
drop=1e99,lock=1e99,
|
||||||
@@ -2745,9 +2874,9 @@ end
|
|||||||
function PLY.newRemotePlayer(id,x,y,size,actions)
|
function PLY.newRemotePlayer(id,x,y,size,actions)
|
||||||
local P=newEmptyPlayer(id,x,y,size)
|
local P=newEmptyPlayer(id,x,y,size)
|
||||||
|
|
||||||
P.human=false -- 录像不是人为操作
|
P.human=false
|
||||||
P.remote=true -- 远程操作
|
P.remote=true
|
||||||
-- 开发中
|
|
||||||
-- P.updateAction=buildActionFunctionFromActions(P, actions)
|
-- P.updateAction=buildActionFunctionFromActions(P, actions)
|
||||||
|
|
||||||
loadGameEnv(P)
|
loadGameEnv(P)
|
||||||
@@ -2761,6 +2890,7 @@ function PLY.newAIPlayer(id,x,y,size,AIdata)
|
|||||||
ENV.text=false
|
ENV.text=false
|
||||||
ENV.lockFX=nil
|
ENV.lockFX=nil
|
||||||
ENV.dropFX=nil
|
ENV.dropFX=nil
|
||||||
|
ENV.moveFX=nil
|
||||||
ENV.shakeFX=nil
|
ENV.shakeFX=nil
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|||||||
@@ -67,7 +67,7 @@ function Tick.throwBadge(data)--{ifAI,Sender,timer}
|
|||||||
end
|
end
|
||||||
function Tick.autoPause(data)
|
function Tick.autoPause(data)
|
||||||
data[1]=data[1]+1
|
data[1]=data[1]+1
|
||||||
if SCN.cur~="play"then return end
|
if SCN.cur~="play"then return true end
|
||||||
if data[1]==120 then
|
if data[1]==120 then
|
||||||
if SCN.cur=="play"then
|
if SCN.cur=="play"then
|
||||||
pauseGame()
|
pauseGame()
|
||||||
|
|||||||
@@ -6,62 +6,57 @@ local S=[=[
|
|||||||
靏鸖龘龘 込余 saki
|
靏鸖龘龘 込余 saki
|
||||||
模电
|
模电
|
||||||
[rmb10+]:
|
[rmb10+]:
|
||||||
八零哥 蕴空之灵 gggf127 dtg
|
八零哥 蕴空之灵 gggf127 dtg ThTsOd
|
||||||
ThTsOd Fireboos 金巧 10元
|
Fireboos 金巧 10元 立斐 Deep_Sea
|
||||||
立斐 Deep_Sea 时雪 yyangdid
|
时雪 yyangdid sfqr 心痕 Sasoric
|
||||||
sfqr 心痕 Sasoric 夏小亚 仁参
|
夏小亚 仁参 乐↗乐↘ 喜欢c4w的ztcjoin
|
||||||
乐↗乐↘ 喜欢c4w的ztcjoin 面包 蠢熏
|
面包 蠢熏 潘一栗 Lied 星街书婉 祝西
|
||||||
潘一栗 Lied 星街书婉 祝西 829
|
829 e m*12 我永远爱白银诺艾尔(鹏 PCX
|
||||||
e m*12 我永远爱白银诺艾尔(鹏 PCX
|
|
||||||
kagura77 呆喂 GlowingEmbers 轩辕辚
|
kagura77 呆喂 GlowingEmbers 轩辕辚
|
||||||
HimuroAki TCV100 tech有养成系统了@7065
|
HimuroAki TCV100 tech有养成系统了@7065
|
||||||
HAGE KANOBU 闪电和拐棍 葡萄味的曼妥思
|
HAGE KANOBU 闪电和拐棍 葡萄味的曼妥思
|
||||||
世界沃德 蓝绿 天生的魔法师 琳雨空
|
世界沃德 蓝绿 天生的魔法师 琳雨空 T8779.易缄
|
||||||
T8779.易缄 吃水榴莲 诗情画意 星姐阿夸双推Man暗炎
|
吃水榴莲 诗情画意 星姐阿夸双推Man暗炎 [*炎]
|
||||||
[*炎] [*Y] aaa222 [**城] cnDD
|
[*Y] aaa222 [**城] cnDD 红桃老给
|
||||||
红桃老给 昭庭玲秋 旋树墩 火花工作室
|
昭庭玲秋 旋树墩 火花工作室 Cosine 天上_飞
|
||||||
Cosine
|
|
||||||
Thanks!!!
|
Thanks!!!
|
||||||
|
|
||||||
Future outlook:
|
Future outlook:
|
||||||
New modes:
|
New modes:
|
||||||
PUYO
|
|
||||||
game tutorial
|
|
||||||
finesse tutorial/exam(3next, 1pt/mino, drop to score)
|
|
||||||
game Abbr. test
|
|
||||||
backfire
|
|
||||||
round-based dig
|
|
||||||
bigbang
|
|
||||||
rhythm
|
|
||||||
combo
|
|
||||||
square
|
|
||||||
field shifting(left/right)
|
|
||||||
task survival
|
|
||||||
dig practice
|
dig practice
|
||||||
dig zen
|
dig zen
|
||||||
symmetry
|
infinite PC challenge
|
||||||
hidden: sound only
|
|
||||||
reverb (often repeat a piece many times)
|
reverb (often repeat a piece many times)
|
||||||
|
game tutorial
|
||||||
|
finesse tutorial/exam (3next, 1pt/mino, drop to score)
|
||||||
|
easy finesse (only revert current)
|
||||||
|
combo
|
||||||
|
backfire
|
||||||
|
bigbang
|
||||||
|
rhythm
|
||||||
KPP-locked
|
KPP-locked
|
||||||
|
square
|
||||||
|
task survival
|
||||||
|
symmetry
|
||||||
|
game Abbr. test
|
||||||
parkour
|
parkour
|
||||||
Other:
|
Other:
|
||||||
mod system with:
|
mod system with:
|
||||||
block/field/up/low hidden
|
block/field/up/low hidden
|
||||||
next[1] hidden
|
next[1-n] hidden
|
||||||
field flip(LR/UD)
|
field flip(LR/UD)
|
||||||
no fail(∞ lives)
|
no fail(∞ lives)
|
||||||
mini games:
|
mini games:
|
||||||
15 puzzle (with hidden mode)
|
15 puzzle (with hidden mode)
|
||||||
2048 (with next (with deadly mode))
|
2048 (with next/deadly mode)
|
||||||
mine sweeper
|
mine sweeper
|
||||||
tank battle
|
tank battle
|
||||||
new AI: task-Z
|
new AI: task-Z
|
||||||
cool backgrounds
|
|
||||||
'Encrypt'(compile to byte code)
|
'Encrypt'(compile to byte code)
|
||||||
better drop FX
|
|
||||||
60+ fps supporting
|
60+ fps supporting
|
||||||
in-game document
|
in-game document
|
||||||
game recording
|
save recordings
|
||||||
full-key control
|
full-key control
|
||||||
drag control for mobile device
|
drag control for mobile device
|
||||||
new widgets (joystick etc.)
|
new widgets (joystick etc.)
|
||||||
@@ -69,6 +64,55 @@ Future outlook:
|
|||||||
more graphic FXs & 3D features & animations
|
more graphic FXs & 3D features & animations
|
||||||
network game
|
network game
|
||||||
|
|
||||||
|
0.10.6: CC更新 Cold Clear update
|
||||||
|
新内容:
|
||||||
|
全平台支持新版CC(也许)
|
||||||
|
改动:
|
||||||
|
修改UVRY的踢墙表
|
||||||
|
修复:
|
||||||
|
O卡住的时候旋转不刷新锁定延迟
|
||||||
|
CC在发现重力过大后hold即报错
|
||||||
|
|
||||||
|
0.10.5: 特效更新 FX update
|
||||||
|
新内容:
|
||||||
|
瞬移特效独立为瞬降和移动(旋转)特效,增加移动特效滑条,各特效范围均为0~5
|
||||||
|
增加两个莫名其妙的背景(放在无尽和限时打分)
|
||||||
|
把之前不小心弄丢的自制蓝屏报错界面捡回来了
|
||||||
|
改动:
|
||||||
|
雷达图OPM参数改为ADPM
|
||||||
|
调整J/L/I的踢墙表
|
||||||
|
根据锁延刷新模式决定锁延指示条颜色
|
||||||
|
增加无尽挖掘连挖提示,挖完后下一波立即升起
|
||||||
|
new English translation by @MattMayuga#8789
|
||||||
|
修改100/400/1000L的评级要求
|
||||||
|
软件锁界面出现时机调整,按钮位置调整
|
||||||
|
调整混战模式倍率影响边框颜色的范围
|
||||||
|
软件锁也可显示tip
|
||||||
|
代码:
|
||||||
|
重命名大多数背景
|
||||||
|
重构create___FX函数
|
||||||
|
修复:
|
||||||
|
加载部分老版本存档报错
|
||||||
|
几个设置大标题样式不统一
|
||||||
|
有消行延迟+出块等待时连续硬降出现神秘现象
|
||||||
|
垃圾行上涨不刷新ghost
|
||||||
|
粘贴序列后光标位置错误
|
||||||
|
不能用键盘复制粘贴序列
|
||||||
|
每次启动游戏ai是一样的块序
|
||||||
|
|
||||||
|
0.10.4: 漏洞修复 Bug Fix
|
||||||
|
代码:
|
||||||
|
修改场景模块方法名
|
||||||
|
软件锁变量名从lock改为appLock
|
||||||
|
使用linter整理代码
|
||||||
|
重构锁延相关代码,freshgho,freshLockDelay,freshMinY合并为freshBlock
|
||||||
|
修复:
|
||||||
|
BPM120~180之间分数计算不正确
|
||||||
|
进不指定锁延的模式就报错
|
||||||
|
锁延机制错误(这次真修好了)
|
||||||
|
游戏结束后马上暂停并解除还会自动暂停(之前没修好)
|
||||||
|
提前硬降失效
|
||||||
|
|
||||||
0.10.3: 软件锁 APP Lock
|
0.10.3: 软件锁 APP Lock
|
||||||
新内容:
|
新内容:
|
||||||
设置增加软件锁选项,打开游戏后进入伪装界面
|
设置增加软件锁选项,打开游戏后进入伪装界面
|
||||||
|
|||||||
Reference in New Issue
Block a user