Compare commits
36 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
94519ba147 | ||
|
|
e397bdcd12 | ||
|
|
e8f0efb22c | ||
|
|
7ecadb0ff1 | ||
|
|
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 | ||
|
|
f26888beaa | ||
|
|
ce4ba0cefd | ||
|
|
0885f3bfb3 |
@@ -1,6 +1,7 @@
|
||||
local gc=love.graphics
|
||||
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 ins,rem=table.insert,table.remove
|
||||
|
||||
local BG
|
||||
local scr=scr
|
||||
@@ -58,13 +59,158 @@ back.flink={
|
||||
end
|
||||
end,
|
||||
}--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={
|
||||
init=function()
|
||||
t=rnd()*3600
|
||||
BG.resize(scr.w,scr.h)
|
||||
end,
|
||||
resize=function(w,h)
|
||||
SHADER.aura:send("w",w*scr.dpi)
|
||||
SHADER.aura:send("w",scr.W)
|
||||
SHADER.aura:send("h",h*scr.dpi)
|
||||
end,
|
||||
update=function(dt)
|
||||
@@ -77,13 +223,13 @@ back.aura={
|
||||
gc.setShader()
|
||||
end,
|
||||
}--Cool liquid background
|
||||
back.game1={
|
||||
back.bg1={
|
||||
init=function()
|
||||
t=0
|
||||
BG.resize(scr.w)
|
||||
end,
|
||||
resize=function(w)
|
||||
SHADER.gradient1:send("w",w*scr.dpi)
|
||||
SHADER.gradient1:send("w",scr.W)
|
||||
end,
|
||||
update=function(dt)
|
||||
t=t+dt
|
||||
@@ -95,7 +241,7 @@ back.game1={
|
||||
gc.setShader()
|
||||
end,
|
||||
}--Horizonal red-blue gradient
|
||||
back.game2={
|
||||
back.bg2={
|
||||
init=function()
|
||||
t=0
|
||||
BG.resize(nil,scr.h)
|
||||
@@ -113,13 +259,13 @@ back.game2={
|
||||
gc.setShader()
|
||||
end,
|
||||
}--Vertical red-green gradient
|
||||
back.game3={
|
||||
back.rainbow={
|
||||
init=function()
|
||||
t=0
|
||||
BG.resize(scr.w,scr.h)
|
||||
end,
|
||||
resize=function(w,h)
|
||||
SHADER.rgb1:send("w",w*scr.dpi)
|
||||
SHADER.rgb1:send("w",scr.W)
|
||||
SHADER.rgb1:send("h",h*scr.dpi)
|
||||
end,
|
||||
update=function(dt)
|
||||
@@ -132,13 +278,13 @@ back.game3={
|
||||
gc.setShader()
|
||||
end,
|
||||
}--Colorful RGB
|
||||
back.game4={
|
||||
back.rainbow2={
|
||||
init=function()
|
||||
t=0
|
||||
BG.resize(scr.w,scr.h)
|
||||
end,
|
||||
resize=function(w,h)
|
||||
SHADER.rgb2:send("w",w*scr.dpi)
|
||||
SHADER.rgb2:send("w",scr.W)
|
||||
SHADER.rgb2:send("h",h*scr.dpi)
|
||||
end,
|
||||
update=function(dt)
|
||||
@@ -151,7 +297,7 @@ back.game4={
|
||||
gc.setShader()
|
||||
end,
|
||||
}--Blue RGB
|
||||
back.game5={
|
||||
back.lightning={
|
||||
init=function()
|
||||
t=0
|
||||
end,
|
||||
@@ -168,7 +314,7 @@ back.game5={
|
||||
|
||||
local blocks=require("parts/mino")
|
||||
local scs=require("parts/spinCenters")
|
||||
back.game6={
|
||||
back.lightning2={
|
||||
init=function()
|
||||
t=0
|
||||
colorLib=_G.SKIN.libColor
|
||||
@@ -251,7 +397,7 @@ back.space={
|
||||
gc.translate(10,10)
|
||||
end,
|
||||
discard=function()
|
||||
stars={}
|
||||
stars=nil
|
||||
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.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.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.event then bg.event= NULL end setfenv(bg.event ,BGvars)
|
||||
if not bg.discard then bg.discard=NULL end setfenv(bg.discard ,BGvars)
|
||||
end
|
||||
|
||||
BG={
|
||||
@@ -270,6 +417,11 @@ BG={
|
||||
update=NULL,
|
||||
draw=back.none.draw,
|
||||
}
|
||||
function BG.send(data)
|
||||
if BG.event then
|
||||
BG.event(data)
|
||||
end
|
||||
end
|
||||
function BG.set(bg,data)
|
||||
if bg==BG.cur or not setting.bg then return end
|
||||
if BG.discard then
|
||||
@@ -282,8 +434,9 @@ function BG.set(bg,data)
|
||||
BG.init=bg.init or NULL
|
||||
BG.resize=bg.resize or NULL
|
||||
BG.update=bg.update or NULL
|
||||
BG.discard=bg.discard or NULL
|
||||
BG.draw=bg.draw or NULL
|
||||
BG.event=bg.event or NULL
|
||||
BG.discard=bg.discard or NULL
|
||||
BG.init()
|
||||
end
|
||||
return BG
|
||||
@@ -9,7 +9,7 @@ local color={
|
||||
|
||||
lRed={1,.5,.5},
|
||||
lGreen={.5,1,.5},
|
||||
lBlue={.6,.6,1},
|
||||
lBlue={.6,.7,1},
|
||||
lCyan={.5,1,1},
|
||||
lMagenta={1,.5,1},
|
||||
lYellow={1,1,.5},
|
||||
@@ -32,7 +32,6 @@ local color={
|
||||
pink={1,0,.6},
|
||||
grass={.6,1,0},
|
||||
water={0,1,.6},
|
||||
bronze={.7,.4,0},
|
||||
white={1,1,1},
|
||||
purple={.5,0,1},
|
||||
}
|
||||
|
||||
@@ -173,10 +173,12 @@ function keyDown.calculator(k)
|
||||
if S.val==626 then
|
||||
S.pass=true
|
||||
elseif S.val==196022 then
|
||||
S.pass=true
|
||||
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)
|
||||
SFX.play("clear")
|
||||
elseif S.val==72943816 then
|
||||
S.pass=true
|
||||
for name,M in next,Modes do
|
||||
if not modeRanks[name]then
|
||||
modeRanks[name]=M.score and 0 or 6
|
||||
@@ -191,7 +193,7 @@ function keyDown.calculator(k)
|
||||
end
|
||||
elseif k=="space"then
|
||||
if S.pass then
|
||||
SCN.swapTo("load")
|
||||
SCN.swapTo("intro")
|
||||
end
|
||||
end
|
||||
end
|
||||
@@ -217,6 +219,10 @@ function mouseDown.intro(x,y,k)
|
||||
if k==2 then
|
||||
VOC.play("bye")
|
||||
SCN.back()
|
||||
elseif newVersionLaunch then
|
||||
SCN.push("main","fade")
|
||||
SCN.swapTo("history","fade")
|
||||
TEXT.show(text.newVersion,640,200,30,"fly",.3)
|
||||
else
|
||||
SCN.go("main")
|
||||
end
|
||||
@@ -431,8 +437,20 @@ function keyDown.sequence(key)
|
||||
local C=s.cur+1
|
||||
ins(preBag,C,key)
|
||||
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
|
||||
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
|
||||
local C=s.cur+1
|
||||
ins(preBag,C,i)
|
||||
@@ -460,18 +478,6 @@ function keyDown.sequence(key)
|
||||
else
|
||||
sceneTemp.sure=50
|
||||
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
|
||||
@@ -1071,6 +1077,71 @@ function love.focus(f)
|
||||
pauseGame()
|
||||
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 devColor={
|
||||
color.white,
|
||||
@@ -1094,7 +1165,7 @@ function love.run()
|
||||
local FCT=0--Framedraw counter
|
||||
|
||||
love.resize(gc.getWidth(),gc.getHeight())
|
||||
SCN.init(setting.appLock and "calculator"or"load")--Scene Launch
|
||||
SCN.init("load")--Scene Launch
|
||||
marking=true
|
||||
|
||||
return function()
|
||||
@@ -1199,9 +1270,9 @@ function love.run()
|
||||
if Timer()-lastFreshPow>2 and setting.powerInfo and loadingFinished then
|
||||
updatePowerInfo()
|
||||
lastFreshPow=Timer()
|
||||
_=gc.getWidth()
|
||||
if _~=scr.w then
|
||||
love.resize(_,gc.getHeight())
|
||||
if gc.getWidth()~=scr.w then
|
||||
love.resize(gc.getWidth(),gc.getHeight())
|
||||
TEXT.show("resized",200,100,30,"stretch")
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
@@ -18,6 +18,7 @@ local langList={
|
||||
stage=function(n)return"关卡 "..n end,
|
||||
great="Great!",
|
||||
awesome="Awesome.",
|
||||
almost="Almost!",
|
||||
continue="Continue.",
|
||||
maxspeed="最高速度",
|
||||
speedup="速度加快",
|
||||
@@ -124,7 +125,7 @@ local langList={
|
||||
radar={"DEF","OFF","ATK","SEND","SPD","DIG"},
|
||||
radarData={
|
||||
"D'PM",
|
||||
"OPM",
|
||||
"ADPM",
|
||||
"APM",
|
||||
"SPM",
|
||||
"L'PM",
|
||||
@@ -152,7 +153,7 @@ local langList={
|
||||
"",
|
||||
"使用LOVE2D引擎",
|
||||
"错误或者建议请附带截图发送到内测群或者作者邮箱~",
|
||||
"仅通过内测群1080457319进行免费下载/更新",
|
||||
"仅通过内测群1127702001进行免费下载/更新",
|
||||
"其他渠道获得游戏皆有被修改/加广告/植入病毒的风险,程序只申请了振动&联网权限!",
|
||||
"若由于被修改的本游戏产生的各种损失作者不负责(我怎么负责啊跟我有啥关系)",
|
||||
"请从正规途径获得最新版,游戏现为免费,不过有打赏当然感谢啦~",
|
||||
@@ -161,12 +162,14 @@ local langList={
|
||||
"作者:MrZ 邮箱:1046101471@qq.com",
|
||||
"使用LOVE2D引擎",
|
||||
"",
|
||||
"程序:MrZ, FinnTenzor",
|
||||
"美术:MrZ, (Gnyar)",
|
||||
"音乐:MrZ, (T0722)",
|
||||
"程序: MrZ, FinnTenzor",
|
||||
"美术: MrZ, (Gnyar)",
|
||||
"音乐: MrZ, (T0722)",
|
||||
"音效/语音: MrZ, Miya",
|
||||
"演出: 模电, HBM",
|
||||
"测试:思竣 官网: 渣渣120",
|
||||
"测试: 思竣",
|
||||
"英文文案: User670",
|
||||
"官网: 渣渣120",
|
||||
"",
|
||||
"特别感谢:",
|
||||
"Flyz, Farter, 蕴空之灵,",
|
||||
@@ -182,7 +185,7 @@ local langList={
|
||||
simple-love-lights[dylhunn]
|
||||
]],
|
||||
support="支持作者",
|
||||
group="官方QQ群(如果没有被暗改的话就是这个):1080457319",
|
||||
group="官方QQ群(如果没有被暗改的话就是这个):1127702001",
|
||||
WidgetText={
|
||||
calculator={
|
||||
_1="1",_2="2",_3="3",
|
||||
@@ -244,6 +247,7 @@ local langList={
|
||||
back="返回",
|
||||
},
|
||||
draw={
|
||||
b12="[ ]",
|
||||
any="不定",
|
||||
space="×",
|
||||
clear="清除",
|
||||
@@ -288,6 +292,7 @@ local langList={
|
||||
bagLine="包分界线",
|
||||
lockFX="锁定特效等级",
|
||||
dropFX="下落特效等级",
|
||||
moveFX="移动特效等级",
|
||||
clearFX="消除特效等级",
|
||||
shakeFX="晃动特效等级",
|
||||
atkFX="攻击特效等级",
|
||||
@@ -488,6 +493,7 @@ local langList={
|
||||
stage=function(n)return"关卡 "..n end,
|
||||
great="不错!",
|
||||
awesome="精彩。",
|
||||
almost="差一点!",
|
||||
continue="继续。",
|
||||
maxspeed="最高速度",
|
||||
speedup="速度加快",
|
||||
@@ -592,7 +598,7 @@ local langList={
|
||||
radar={"防","守","攻","送","速","挖"},
|
||||
radarData={
|
||||
"防/分",
|
||||
"挡/分",
|
||||
"综/分",
|
||||
"攻/分",
|
||||
"送/分",
|
||||
"行/分",
|
||||
@@ -619,7 +625,7 @@ local langList={
|
||||
"从TO/C2/KOS/TGM3/JS等方块获得过灵感",
|
||||
"",
|
||||
"错误或者建议请附带截图发送到内测群或者作者邮箱~",
|
||||
"仅通过内测群1080457319进行免费下载/更新",
|
||||
"仅通过内测群1127702001进行免费下载/更新",
|
||||
"其他渠道获得游戏皆有被修改/加广告/植入病毒的风险,程序只申请了振动&联网权限!",
|
||||
"若由于被修改的本游戏产生的各种损失作者不负责(我怎么负责啊跟我有啥关系)",
|
||||
"请从正规途径获得最新版,游戏现为免费,不过有打赏当然感谢啦~",
|
||||
@@ -628,13 +634,14 @@ local langList={
|
||||
"作者:MrZ 邮箱:1046101471@qq.com",
|
||||
"使用LOVE2D引擎",
|
||||
"",
|
||||
"程序:MrZ, FinnTenzor",
|
||||
"美术:MrZ, (T0722, Gnyar)",
|
||||
"音乐:MrZ, (T0722)",
|
||||
"程序: MrZ, FinnTenzor",
|
||||
"美术: MrZ, (T0722, Gnyar)",
|
||||
"音乐: MrZ, (T0722)",
|
||||
"音效/语音: MrZ, Miya",
|
||||
"演出: 模电, HBM",
|
||||
"测试:思竣 官网: 渣渣120",
|
||||
"",
|
||||
"测试: 思竣",
|
||||
"英文文案: User670",
|
||||
"官网: 渣渣120",
|
||||
"特别感谢:",
|
||||
"Flyz, Farter, 蕴空之灵,",
|
||||
"茶管, [所有内测人员]",
|
||||
@@ -649,7 +656,7 @@ local langList={
|
||||
simple-love-lights[dylhunn]
|
||||
]],
|
||||
support="支持作者",
|
||||
group="官方QQ群(如果没有被暗改的话就是这个):1080457319",
|
||||
group="官方QQ群(如果没有被暗改的话就是这个):1127702001",
|
||||
WidgetText={
|
||||
calculator={
|
||||
_1="1",_2="2",_3="3",
|
||||
@@ -711,6 +718,7 @@ local langList={
|
||||
back="返回",
|
||||
},
|
||||
draw={
|
||||
b12="[ ]",
|
||||
any="不定",
|
||||
space="×",
|
||||
clear="清除",
|
||||
@@ -755,6 +763,7 @@ local langList={
|
||||
bagLine="包分界线",
|
||||
lockFX="锁定特效等级",
|
||||
dropFX="下落特效等级",
|
||||
moveFX="移动特效等级",
|
||||
clearFX="消除特效等级",
|
||||
shakeFX="晃动特效等级",
|
||||
atkFX="攻击特效等级",
|
||||
@@ -938,28 +947,29 @@ local langList={
|
||||
},
|
||||
{
|
||||
anykey="Press any button",
|
||||
newVersion="Updating detected!",
|
||||
newBigVersion="Big updating detected! Save data altered",
|
||||
marking="Game Author:MrZ_26\nIllegal recording if see this\nAny explanation invalid",
|
||||
newVersion="Update detected!",
|
||||
newBigVersion="A big update was detected! Save data has been altered.",
|
||||
marking="Game Author: MrZ_26\nIllegal recording if you can see this\nAny explanation is invalid",
|
||||
lang="English",
|
||||
atkModeName={"Random","Badges","K.O.s","Attackers"},
|
||||
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"},
|
||||
block=nil,spin="-spin ",
|
||||
clear={"single","double","triple","Techrash","Techrash+"},
|
||||
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 ",
|
||||
clear={"Single","Double","Triple","Techrash","Techrash+"},
|
||||
mini="Mini",b2b="B2B ",b3b="B2B2B ",
|
||||
PC="Perfect Clear",HPC="Clear",
|
||||
hold="Hold",next="Next",
|
||||
replaying="[Replaying]",
|
||||
hold="HOLD",next="NEXT",
|
||||
replaying="[Replay]",
|
||||
|
||||
stage=function(n)return"Stage "..n end,
|
||||
great="Great!",
|
||||
awesome="Awesome!",
|
||||
almost="Almost!",
|
||||
continue="Keep going!",
|
||||
maxspeed="Max speed!",
|
||||
speedup="Speed up!",
|
||||
|
||||
win="Win",
|
||||
win="You Win!",
|
||||
finish="Finish",
|
||||
gameover="Game Over",
|
||||
pause="Pause",
|
||||
@@ -988,36 +998,36 @@ local langList={
|
||||
fall=nil,
|
||||
next=nil,
|
||||
hold={"On","Off","Inf"},
|
||||
sequence={"bag","his4","random","loop","fixed"},
|
||||
visible={"normal","slow fade","fast fade","sudden fade"},
|
||||
sequence={"Bag","His4","Random","Loop","Fixed"},
|
||||
visible={"Normal","Slow Fade","Quick Fade","Sudden Fade"},
|
||||
target={10,20,40,100,200,500,1000,"None"},
|
||||
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"},
|
||||
},
|
||||
sequence="Custom Sequence",
|
||||
snapLevelName={"Free pos","Snap-10","Snap-20","Snap-40","Snap-60","Snap-80"},
|
||||
setting_game="Game settings",
|
||||
setting_video="Video settings",
|
||||
setting_sound="Sound settings",
|
||||
setting_game="Game Settings",
|
||||
setting_video="Video Settings",
|
||||
setting_sound="Sound Settings",
|
||||
setting_control="Control Settings",
|
||||
setting_skin="Layout Settings",
|
||||
preview="Preview",
|
||||
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",
|
||||
nowPlaying="Now Playing:",
|
||||
page="Page:",
|
||||
|
||||
ai_fixed="AI is incompatible with fixed sequence",
|
||||
ai_prebag="AI is incompatible with custom sequence",
|
||||
ai_fixed="The AI is incompatible with fixed sequences.",
|
||||
ai_prebag="The AI is incompatible with custom sequences.",
|
||||
settingSaved="Settings Saved",
|
||||
settingSavingError="Failed to save settings:",
|
||||
keyMapSaved="Key settings saved",
|
||||
keyMapSavingError="Failed to save key settings:",
|
||||
VKSaved="virtual keys saved",
|
||||
VKSavingError="Failed to save virtual key:",
|
||||
statSavingError="Failed to save stat:",
|
||||
unlockSavingError="Failed to save unlock:",
|
||||
VKSaved="Virtual keys saved",
|
||||
VKSavingError="Failed to save virtual key configuration:",
|
||||
statSavingError="Failed to save statistics:",
|
||||
unlockSavingError="Failed to save unlocked content:",
|
||||
recSavingError="Failed to save record:",
|
||||
|
||||
switchSpawnSFX="Switch on spawn SFX to play",
|
||||
@@ -1026,7 +1036,7 @@ local langList={
|
||||
copySuccess="Copied successfully",
|
||||
dataCorrupted="Data corrupted",
|
||||
VKTchW="Touch Weight",
|
||||
VKOrgW="Origion Weight",
|
||||
VKOrgW="Origin Weight",
|
||||
VKCurW="Cur. Pos. Weight",
|
||||
noScore="No Scores Yet",
|
||||
highScore="Personal Bests",
|
||||
@@ -1056,7 +1066,7 @@ local langList={
|
||||
radar={"DEF","OFF","ATK","SEND","SPD","DIG"},
|
||||
radarData={
|
||||
"D'PM",
|
||||
"OPM",
|
||||
"ADPM",
|
||||
"APM",
|
||||
"SPM",
|
||||
"L'PM",
|
||||
@@ -1082,11 +1092,11 @@ local langList={
|
||||
"This is just an ordinary block game, not a certain one.",
|
||||
"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",
|
||||
"The game downloaded from other sources may contain viruses,",
|
||||
"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={
|
||||
"Author: MrZ E-mail: 1046101471@qq.com",
|
||||
@@ -1095,17 +1105,19 @@ local langList={
|
||||
"Program: MrZ, FinnTenzor",
|
||||
"Art: MrZ, (Gnyar)",
|
||||
"Music: MrZ, (T0722)",
|
||||
"Voice/ Sound: MrZ, Miya",
|
||||
"Performance: 模电 HBM",
|
||||
"Test: 思竣 Web: 渣渣120",
|
||||
"Voice & Sound: MrZ, Miya",
|
||||
"Performance: 模电, HBM",
|
||||
"Test: 思竣",
|
||||
"Eng Doc: User670",
|
||||
"Web: 渣渣120",
|
||||
"",
|
||||
"Special Thanks:",
|
||||
"Flyz, Farter, 蕴空之灵,",
|
||||
"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",
|
||||
group="Official QQ Group(if not hacked):1080457319",
|
||||
group="Official QQ Group (if not hacked): 1127702001",
|
||||
WidgetText={
|
||||
calculator={
|
||||
_1="1",_2="2",_3="3",
|
||||
@@ -1121,7 +1133,7 @@ local langList={
|
||||
main={
|
||||
play="Play",
|
||||
setting="Settings",
|
||||
music="Music room",
|
||||
music="Music Room",
|
||||
stat="Statistics",
|
||||
help="Help",
|
||||
qplay="Q. Play",
|
||||
@@ -1151,7 +1163,7 @@ local langList={
|
||||
set4="Blind (4)",
|
||||
set5="Master (5)",
|
||||
seq="Advanced(Q)",
|
||||
draw="Field Edit(E)",
|
||||
draw="Edit Field (E)",
|
||||
back="Back",
|
||||
},
|
||||
sequence={
|
||||
@@ -1167,6 +1179,7 @@ local langList={
|
||||
back="Back",
|
||||
},
|
||||
draw={
|
||||
b12="[ ]",
|
||||
any="Erase",
|
||||
space="×",
|
||||
clear="Clear",
|
||||
@@ -1189,16 +1202,16 @@ local langList={
|
||||
setting_game={
|
||||
graphic="←Video",
|
||||
sound="Sound→",
|
||||
ctrl="Control settings",
|
||||
ctrl="Control Settings",
|
||||
key="Key Mappings",
|
||||
touch="Touch Settings",
|
||||
reTime="Start Delay",
|
||||
maxNext="Next Queue Length",
|
||||
layout="Layout",
|
||||
autoPause="Pause when lose focus",
|
||||
autoPause="Pause when focus is lost",
|
||||
swap="Key Combination (Change Atk. Mode)",
|
||||
fine="Finesse Error Sound",
|
||||
appLock="App Lock(pw=626)",
|
||||
appLock="App Lock (Password: 626)",
|
||||
back="Back",
|
||||
},
|
||||
setting_video={
|
||||
@@ -1208,18 +1221,19 @@ local langList={
|
||||
smooth="Smooth drop",
|
||||
center="Center",
|
||||
grid="Grid",
|
||||
bagLine="Bag line",
|
||||
lockFX="Lock FX level",
|
||||
dropFX="Drop FX level",
|
||||
clearFX="Clear FX level",
|
||||
shakeFX="Field Sway level",
|
||||
atkFX="ATK. FX level",
|
||||
bagLine="Bag Line",
|
||||
lockFX="Lock FX Level",
|
||||
dropFX="Drop FX Level",
|
||||
moveFX="Move FX Level",
|
||||
clearFX="Clear FX Level",
|
||||
shakeFX="Field Sway Level",
|
||||
atkFX="ATK. FX Level",
|
||||
frame="Render Frame Rate",
|
||||
text="Action Text",
|
||||
warn="Death Alert",
|
||||
fullscreen="Full Screen",
|
||||
bg="Background",
|
||||
power="Power Info.",
|
||||
power="Power Info",
|
||||
back="Back",
|
||||
},
|
||||
setting_sound={
|
||||
@@ -1272,9 +1286,9 @@ local langList={
|
||||
b13="Ins Down:", b14="Down 1:", b15="Down 4:", b16="Down 10:",
|
||||
b17="Left Drop:", b18="Right Drop:", b19="Left Zangi:", b20="Right Zangi:",
|
||||
norm="Normal",
|
||||
pro="Professioanl",
|
||||
pro="Professional",
|
||||
hide="Show Virtual Key",
|
||||
track="Auto track",
|
||||
track="Auto Track",
|
||||
sfx="SFX",
|
||||
vib="VIB",
|
||||
icon="Icon",
|
||||
@@ -1309,9 +1323,9 @@ local langList={
|
||||
},
|
||||
debug={
|
||||
reset="Reset?",
|
||||
reset1="Reset rank",
|
||||
reset1="Reset ranks",
|
||||
reset2="Reset data",
|
||||
reset3="Reset ALL",
|
||||
reset3="Reset all",
|
||||
back="Back",
|
||||
},
|
||||
},
|
||||
@@ -1345,13 +1359,13 @@ local langList={
|
||||
["master_beginner"]= {"Master", "LUNATIC", "For 20G beginners."},
|
||||
["master_advance"]= {"Master", "ULTIMATE", "Professional 20G challenge!"},
|
||||
["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_normal"]= {"Blind", "ALL", "For intermediate players."},
|
||||
["blind_hard"]= {"Blind", "SUDDEN", "For experienced players."},
|
||||
["blind_lunatic"]= {"Blind", "SUDDEN+", "For professionals."},
|
||||
["blind_ultimate"]= {"Blind", "?", "R U Ready?"},
|
||||
["blind_wtf"]= {"Blind", "WTF", "i m not ready"},
|
||||
["blind_ultimate"]= {"Blind", "?", "Are you ready?"},
|
||||
["blind_wtf"]= {"Blind", "WTF", "You're not ready."},
|
||||
["classic_fast"]= {"Classic", "CTWC", "High-speed classic mode."},
|
||||
["survivor_easy"]= {"Survivor", "EASY", "How long can you survive?"},
|
||||
["survivor_normal"]= {"Survivor", "NORMAL", "How long can you survive?"},
|
||||
@@ -1389,7 +1403,7 @@ local langList={
|
||||
["infinite_dig"]= {"Infinite: Dig", "", "Dig, dig, dig."},
|
||||
["custom_clear"]= {"Custom", "NORMAL", "Draw something then clear 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."},
|
||||
},
|
||||
},
|
||||
{
|
||||
@@ -1411,6 +1425,7 @@ local langList={
|
||||
stage=function(n)return"::"..n.."::"end,
|
||||
great="!~",
|
||||
awesome="!!~",
|
||||
almost="...!",
|
||||
continue="~~",
|
||||
maxspeed="!!!",
|
||||
speedup="~!~",
|
||||
@@ -1510,7 +1525,7 @@ local langList={
|
||||
radar={"DEF","OFF","ATK","SEND","SPD","DIG"},
|
||||
radarData={
|
||||
"D'PM",
|
||||
"OPM",
|
||||
"ADPM",
|
||||
"APM",
|
||||
"SPM",
|
||||
"L'PM",
|
||||
@@ -1549,9 +1564,11 @@ local langList={
|
||||
"Program: MrZ, FinnTenzor",
|
||||
"Art: MrZ, (Gnyar)",
|
||||
"Music: MrZ, (T0722)",
|
||||
"Voice/ Sound: MrZ, Miya",
|
||||
"Performance: 模电 HBM",
|
||||
"Test: 思竣 Web: 渣渣120",
|
||||
"Voice % Sound: MrZ, Miya",
|
||||
"Performance: 模电, HBM",
|
||||
"Test: 思竣",
|
||||
"Eng Doc: User670",
|
||||
"Web: 渣渣120",
|
||||
"",
|
||||
"Special Thanks:",
|
||||
"Flyz, Farter, 蕴空之灵,",
|
||||
@@ -1559,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]",
|
||||
support="Support author",
|
||||
group="Official QQ Group(if not hacked):1080457319",
|
||||
group="Official QQ Group(if not hacked):1127702001",
|
||||
WidgetText={
|
||||
calculator={
|
||||
_1="1",_2="2",_3="3",
|
||||
@@ -1621,6 +1638,7 @@ local langList={
|
||||
back="X",
|
||||
},
|
||||
draw={
|
||||
b12="[ ]",
|
||||
any="_",
|
||||
space="×",
|
||||
clear="XXX",
|
||||
@@ -1665,6 +1683,7 @@ local langList={
|
||||
bagLine="123|123",
|
||||
lockFX="↓_~",
|
||||
dropFX="↓~",
|
||||
moveFX="←→~",
|
||||
clearFX="↓↓↓~",
|
||||
shakeFX="~|~|~",
|
||||
atkFX="→→~",
|
||||
@@ -1865,6 +1884,7 @@ local langList={
|
||||
stage=function(n)return"关卡 "..n end,
|
||||
great="不错的",
|
||||
awesome="您很强",
|
||||
almost="太舒服了",
|
||||
continue="您继续",
|
||||
maxspeed="速度封顶",
|
||||
speedup="速度加快",
|
||||
@@ -1971,7 +1991,7 @@ local langList={
|
||||
radar={"DEF","OFF","ATK","SEND","SPD","DIG"},
|
||||
radarData={
|
||||
"D'PM",
|
||||
"OPM",
|
||||
"ADPM",
|
||||
"APM",
|
||||
"SPM",
|
||||
"L'PM",
|
||||
@@ -1989,8 +2009,8 @@ local langList={
|
||||
"挖掘/挖掘攻击:",
|
||||
"效率/挖掘效率:",
|
||||
"多余操作/极简率:",
|
||||
"满贯/大满贯:",
|
||||
"全/半清:",
|
||||
"牛逼/很牛逼:",
|
||||
"消光/消半截:",
|
||||
},
|
||||
help={
|
||||
"既然你能玩到这个游戏,应该也不需要什么帮助吧?",
|
||||
@@ -1999,7 +2019,7 @@ local langList={
|
||||
"",
|
||||
"使用LOVE2D引擎",
|
||||
"错误或者建议请附带截图发送到内测群或者作者邮箱~",
|
||||
"仅通过内测群1080457319进行免费下载/更新",
|
||||
"仅通过内测群1127702001进行免费下载/更新",
|
||||
"其他渠道获得游戏皆有被修改/加广告/植入病毒的风险,程序只申请了振动&联网权限!",
|
||||
"若由于被修改的本游戏产生的各种损失作者不负责(我怎么负责啊跟我有啥关系)",
|
||||
"请从正规途径获得最新版,游戏现为免费,不过有打赏当然感谢啦~",
|
||||
@@ -2029,7 +2049,7 @@ local langList={
|
||||
simple-love-lights[dylhunn]
|
||||
]],
|
||||
support="支持作者",
|
||||
group="官方QQ群(如果没有被暗改的话就是这个):1080457319",
|
||||
group="官方QQ群(如果没有被暗改的话就是这个):1127702001",
|
||||
WidgetText={
|
||||
calculator={
|
||||
_1="1",_2="2",_3="3",
|
||||
@@ -2091,6 +2111,7 @@ local langList={
|
||||
back="返回",
|
||||
},
|
||||
draw={
|
||||
b12="[ ]",
|
||||
any="不定",
|
||||
space="×",
|
||||
clear="清除",
|
||||
@@ -2135,6 +2156,7 @@ local langList={
|
||||
bagLine="包分界线",
|
||||
lockFX="锁定特效等级",
|
||||
dropFX="下落特效等级",
|
||||
moveFX="移动特效等级",
|
||||
clearFX="消除特效等级",
|
||||
shakeFX="晃动特效等级",
|
||||
atkFX="攻击特效等级",
|
||||
|
||||
@@ -9,11 +9,11 @@ local mStr=mStr
|
||||
local scr=scr
|
||||
local scs=require("parts/spinCenters")
|
||||
local modeRankColor={
|
||||
color.bronze, --Rank1
|
||||
color.lGrey, --Rank2
|
||||
color.lYellow, --Rank3
|
||||
color.lPurple, --Rank4
|
||||
color.lCyan, --Rank5
|
||||
color.dRed, --D
|
||||
color.dOrange, --C
|
||||
color.lYellow, --B
|
||||
color.lBlue, --A
|
||||
color.lCyan, --S
|
||||
color.lGreen, --Special
|
||||
}
|
||||
local rankString={
|
||||
@@ -111,13 +111,15 @@ function Pnt.load()
|
||||
gc.rectangle("fill",300,330,S.cur/S.tar*680,60,5)
|
||||
gc.setColor(1,1,1)
|
||||
gc.rectangle("line",300,330,680,60,5)
|
||||
setFont(35)
|
||||
gc.print(text.load[S.phase],340,335)
|
||||
if S.phase~=0 then
|
||||
gc.printf(S.cur.."/"..S.tar,795,335,150,"right")
|
||||
if not setting.appLock then
|
||||
setFont(35)
|
||||
gc.print(text.load[S.phase],340,335)
|
||||
if S.phase~=0 then
|
||||
gc.printf(S.cur.."/"..S.tar,795,335,150,"right")
|
||||
end
|
||||
setFont(25)
|
||||
mStr(S.tip,640,400)
|
||||
end
|
||||
setFont(25)
|
||||
mStr(S.tip,640,400)
|
||||
end
|
||||
|
||||
local titleTransform={
|
||||
@@ -312,10 +314,8 @@ end
|
||||
function Pnt.music()
|
||||
gc.setColor(1,1,1,.3+sin(Timer()*5)*.2)
|
||||
gc.rectangle("fill",45,98+30*sceneTemp,250,30)
|
||||
gc.setColor(.7,.7,.7)
|
||||
gc.draw(drawableText.musicRoom,20,20)
|
||||
gc.setColor(1,1,1)
|
||||
gc.draw(drawableText.musicRoom,22,23)
|
||||
gc.setColor(.7,.7,.7)gc.draw(drawableText.musicRoom,20,20)
|
||||
gc.setColor(1,1,1)gc.draw(drawableText.musicRoom,22,23)
|
||||
gc.draw(drawableText.nowPlaying,490,390)
|
||||
setFont(30)
|
||||
for i=1,BGM.len do
|
||||
@@ -641,7 +641,7 @@ function Pnt.setting_video()
|
||||
mText(drawableText.setting_video,640,15)
|
||||
end
|
||||
function Pnt.setting_sound()
|
||||
gc.setColor(1,1,1,.8)
|
||||
gc.setColor(1,1,1)
|
||||
mText(drawableText.setting_sound,640,15)
|
||||
local t=Timer()
|
||||
local _=sceneTemp.jump
|
||||
@@ -674,7 +674,8 @@ function Pnt.setting_control()
|
||||
gc.line(950,530,950,630)
|
||||
|
||||
--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)
|
||||
gc.printf(text.preview,320,540,200,"right")
|
||||
|
||||
@@ -744,7 +745,8 @@ function Pnt.setting_key()
|
||||
gc.draw(drawableText.ctrlSetHelp,50,650)
|
||||
end
|
||||
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
|
||||
local face=setting.face[N]
|
||||
local B=blocks[N][face]
|
||||
@@ -760,7 +762,6 @@ function Pnt.setting_skin()
|
||||
for i=1,6 do
|
||||
gc.draw(blockSkin[11+i],570+60*i,610,nil,2)
|
||||
end
|
||||
gc.draw(drawableText.setting_skin,80,50)
|
||||
end
|
||||
function Pnt.setting_touch()
|
||||
gc.setColor(1,1,1)
|
||||
|
||||
@@ -48,16 +48,9 @@ function sceneInit.main()
|
||||
BG.set("space")
|
||||
BGM.play("blank")
|
||||
|
||||
game.frame=0
|
||||
game.recording=false
|
||||
game.replaying=false
|
||||
game.seed=1046101471
|
||||
game.rec={}
|
||||
|
||||
modeEnv={}
|
||||
destroyPlayers()
|
||||
|
||||
--Create demo player
|
||||
destroyPlayers()
|
||||
PLY.newDemoPlayer(1,900,35,1.1)
|
||||
end
|
||||
function sceneInit.music()
|
||||
@@ -131,20 +124,20 @@ function sceneInit.pause(org)
|
||||
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.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[%.2f%%]",S.extraPiece,100*max(1-S.extraRate/S.piece,0)),
|
||||
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)),
|
||||
},
|
||||
|
||||
--From right-down, 60 degree each
|
||||
radar={
|
||||
(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.send/S.time*60, --SendPM
|
||||
S.piece/S.time*24, --LinePM
|
||||
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",
|
||||
}
|
||||
local _=sceneTemp
|
||||
@@ -204,7 +197,7 @@ function sceneInit.setting_control()
|
||||
dir=1,
|
||||
wait=30,
|
||||
}
|
||||
BG.set("game1")
|
||||
BG.set("bg1")
|
||||
end
|
||||
function sceneInit.setting_key()
|
||||
sceneTemp={
|
||||
@@ -214,7 +207,7 @@ function sceneInit.setting_key()
|
||||
}
|
||||
end
|
||||
function sceneInit.setting_touch()
|
||||
BG.set("game3")
|
||||
BG.set("rainbow")
|
||||
sceneTemp={
|
||||
default=1,
|
||||
snap=1,
|
||||
@@ -271,7 +264,7 @@ function sceneInit.stat()
|
||||
end
|
||||
end
|
||||
function sceneInit.history()
|
||||
BG.set("game3")
|
||||
BG.set("rainbow")
|
||||
sceneTemp={
|
||||
text=require("parts/updateLog"),--Text list
|
||||
pos=1,--Scroll pos
|
||||
|
||||
@@ -39,18 +39,15 @@ function Tmr.load()
|
||||
SKIN.load()
|
||||
stat.run=stat.run+1
|
||||
--------------------------
|
||||
SFX.play("welcome_sfx")
|
||||
VOC.play("welcome")
|
||||
if not setting.appLock then
|
||||
SFX.play("welcome_sfx")
|
||||
VOC.play("welcome")
|
||||
end
|
||||
else
|
||||
S.cur=S.cur+1
|
||||
S.tar=S.cur
|
||||
if S.cur>62.6 then
|
||||
if newVersionLaunch then
|
||||
SCN.push("intro","fade")
|
||||
SCN.swapTo("history","fade")
|
||||
else
|
||||
SCN.swapTo("intro","none")
|
||||
end
|
||||
SCN.swapTo(setting.appLock and "calculator"or"intro","none")
|
||||
end
|
||||
loadingFinished=true
|
||||
return
|
||||
@@ -354,8 +351,6 @@ function Tmr.staff(dt)
|
||||
S.time=S.time+S.v*dt
|
||||
if S.time>45 then
|
||||
S.time=45
|
||||
elseif S.time<-10 then
|
||||
S.time=-10
|
||||
end
|
||||
end
|
||||
return Tmr
|
||||
@@ -99,23 +99,23 @@ newSlider=WIDGET.newSlider
|
||||
local Widgets={
|
||||
load={},intro={},quit={},
|
||||
calculator={
|
||||
newKey({name="_1", x=300,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="_3", x=500,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="_5", x=400,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="_7", x=300,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="_9", x=500,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="<", x=400,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=600,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=600,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("/")}),
|
||||
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}),
|
||||
newKey({name="_1", x=150,y=300,w=90,h=90, color="white", font=50,code=pressKey("1")}),
|
||||
newKey({name="_2", x=250,y=300,w=90,h=90, color="white", font=50,code=pressKey("2")}),
|
||||
newKey({name="_3", x=350,y=300,w=90,h=90, color="white", font=50,code=pressKey("3")}),
|
||||
newKey({name="_4", x=150,y=400,w=90,h=90, color="white", font=50,code=pressKey("4")}),
|
||||
newKey({name="_5", x=250,y=400,w=90,h=90, color="white", font=50,code=pressKey("5")}),
|
||||
newKey({name="_6", x=350,y=400,w=90,h=90, color="white", font=50,code=pressKey("6")}),
|
||||
newKey({name="_7", x=150,y=500,w=90,h=90, color="white", font=50,code=pressKey("7")}),
|
||||
newKey({name="_8", x=250,y=500,w=90,h=90, color="white", font=50,code=pressKey("8")}),
|
||||
newKey({name="_9", x=350,y=500,w=90,h=90, color="white", font=50,code=pressKey("9")}),
|
||||
newKey({name="_0", x=150,y=600,w=90,h=90, color="white", font=50,code=pressKey("0")}),
|
||||
newKey({name="<", x=250,y=600,w=90,h=90, color="lRed", font=50,code=pressKey("backspace")}),
|
||||
newKey({name="=", x=350,y=600,w=90,h=90, color="lYellow",font=50,code=pressKey("return")}),
|
||||
newKey({name="+", x=450,y=300,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=450,y=500,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=640,y=600,w=180,h=90, color="lGreen", font=40,code=pressKey("space"),hide=function()return not sceneTemp.pass end}),
|
||||
},
|
||||
main={
|
||||
newButton({name="play", x=150,y=280,w=200,h=160,color="lRed", font=55,code=function()SCN.go("mode")end}),
|
||||
@@ -260,11 +260,12 @@ local Widgets={
|
||||
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="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="dropFX", x=350, y=400,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="shakeFX", x=350, y=520,w=373,unit=5, font=32,disp=SETval("shakeFX"), code=SETsto("shakeFX")}),
|
||||
newSlider({name="atkFX", x=350, y=580,w=373,unit=5, font=32,disp=SETval("atkFX"), code=SETsto("atkFX")}),
|
||||
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=390,w=373,unit=5, font=32,disp=SETval("dropFX"), code=SETsto("dropFX")}),
|
||||
newSlider({name="moveFX", x=350, y=440,w=373,unit=5, font=32,disp=SETval("moveFX"), code=SETsto("moveFX")}),
|
||||
newSlider({name="clearFX", x=350, y=490,w=373,unit=5, font=32,disp=SETval("clearFX"), code=SETsto("clearFX")}),
|
||||
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,
|
||||
disp=function()
|
||||
return setting.frameMul>35 and setting.frameMul/10 or setting.frameMul/5-4
|
||||
|
||||
2
conf.lua
2
conf.lua
@@ -1,4 +1,4 @@
|
||||
gameVersion="Alpha V0.10.4"
|
||||
gameVersion="Alpha V0.10.5"
|
||||
function love.conf(t)
|
||||
t.identity="Techmino"--Saving folder
|
||||
t.version="11.1"
|
||||
|
||||
11
main.lua
11
main.lua
@@ -99,6 +99,9 @@ else
|
||||
setting.swap=false
|
||||
setting.vib=2
|
||||
setting.powerInfo=true
|
||||
setting.fullscreen=true
|
||||
love.window.setFullscreen(true)
|
||||
love.resize(love.graphics.getWidth(),love.graphics.getHeight())
|
||||
end
|
||||
end
|
||||
LANG.set(setting.lang)
|
||||
@@ -116,8 +119,11 @@ if fs.getInfo("tech_ultimate+.dat")then fs.remove("tech_ultimate+.dat")end
|
||||
R=modeRanks
|
||||
for k,v in next,R do
|
||||
if type(k)=="number"then
|
||||
R[Modes[k].name],R[k]=R[k]
|
||||
break
|
||||
local save=v
|
||||
if not R[Modes[k].name]then
|
||||
R[Modes[k].name]=v
|
||||
end
|
||||
R[k]=nil
|
||||
end
|
||||
end
|
||||
if R.master_adavnce then
|
||||
@@ -134,7 +140,6 @@ if type(setting.spawn)~="number"then
|
||||
end
|
||||
if S.version~=gameVersion then
|
||||
S.version=gameVersion
|
||||
TEXT.show(text.newVersion,640,200,30,"fly",.3)
|
||||
newVersionLaunch=true
|
||||
|
||||
fs.remove("sprintPenta.dat")
|
||||
|
||||
@@ -34,7 +34,7 @@ return{
|
||||
end
|
||||
end
|
||||
end,
|
||||
bg="game4",bgm="way",
|
||||
bg="rainbow2",bgm="way",
|
||||
},
|
||||
pauseLimit=true,
|
||||
load=function()
|
||||
|
||||
@@ -43,7 +43,7 @@ return{
|
||||
end
|
||||
end
|
||||
end,
|
||||
bg="game4",bgm="shining terminal",
|
||||
bg="rainbow2",bgm="shining terminal",
|
||||
},
|
||||
pauseLimit=true,
|
||||
load=function()
|
||||
|
||||
@@ -13,7 +13,7 @@ return{
|
||||
hold=false,
|
||||
dropPiece=function(P)P:lose()end,
|
||||
task=nil,
|
||||
bg="game1",bgm="newera",
|
||||
bg="bg1",bgm="newera",
|
||||
},
|
||||
pauseLimit=true,
|
||||
load=function()
|
||||
|
||||
@@ -37,7 +37,7 @@ return{
|
||||
end
|
||||
end
|
||||
end,
|
||||
bg="game4",bgm="shining terminal",
|
||||
bg="rainbow2",bgm="shining terminal",
|
||||
},
|
||||
pauseLimit=true,
|
||||
load=function()
|
||||
|
||||
@@ -37,7 +37,7 @@ return{
|
||||
end
|
||||
end
|
||||
end,
|
||||
bg="game4",bgm="way",
|
||||
bg="rainbow2",bgm="way",
|
||||
},
|
||||
pauseLimit=true,
|
||||
load=function()
|
||||
|
||||
@@ -16,7 +16,7 @@ return{
|
||||
D.event=D.event+1
|
||||
end
|
||||
end,
|
||||
bg="game2",bgm="way",
|
||||
bg="bg2",bgm="way",
|
||||
},
|
||||
pauseLimit=true,
|
||||
load=function()
|
||||
|
||||
@@ -15,7 +15,7 @@ return{
|
||||
D.event=D.event+1
|
||||
end
|
||||
end,
|
||||
bg="game2",bgm="shining terminal",
|
||||
bg="bg2",bgm="shining terminal",
|
||||
},
|
||||
pauseLimit=true,
|
||||
load=function()
|
||||
|
||||
@@ -1,9 +1,28 @@
|
||||
local format=string.format
|
||||
local function check_rise(P)
|
||||
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
|
||||
P:garbageRise(13,1,P:RND(10))
|
||||
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
|
||||
|
||||
@@ -13,8 +32,8 @@ return{
|
||||
drop=1e99,lock=1e99,
|
||||
oncehold=false,
|
||||
dropPiece=check_rise,
|
||||
pushSpeed=1,
|
||||
bg="glow",bgm="infinite",
|
||||
pushSpeed=1.2,
|
||||
bg="wing",bgm="infinite",
|
||||
},
|
||||
load=function()
|
||||
PLY.newPlayer(1,340,15)
|
||||
|
||||
@@ -21,7 +21,7 @@ return{
|
||||
mindas=7,minarr=1,minsdarr=1,
|
||||
drop=.5,wait=8,fall=20,
|
||||
target=50,dropPiece=check,
|
||||
bg="game2",bgm="push",
|
||||
bg="bg2",bgm="push",
|
||||
},
|
||||
pauseLimit=true,
|
||||
slowMark=true,
|
||||
@@ -42,7 +42,7 @@ return{
|
||||
if L>=200 then
|
||||
local T=P.stat.time
|
||||
return
|
||||
T<=200 and 5 or
|
||||
T<=230 and 5 or
|
||||
T<=270 and 4 or
|
||||
3
|
||||
else
|
||||
|
||||
@@ -20,7 +20,7 @@ return{
|
||||
wait=8,fall=20,
|
||||
target=10,dropPiece=check_LVup,
|
||||
mindas=7,minarr=1,minsdarr=1,
|
||||
bg="game2",bgm="push",
|
||||
bg="bg2",bgm="push",
|
||||
},
|
||||
pauseLimit=true,
|
||||
slowMark=true,
|
||||
@@ -41,8 +41,8 @@ return{
|
||||
if L>=200 then
|
||||
local T=P.stat.time
|
||||
return
|
||||
T<=226 and 5 or
|
||||
T<=262 and 4 or
|
||||
T<=230 and 5 or
|
||||
T<=270 and 4 or
|
||||
3
|
||||
else
|
||||
return
|
||||
|
||||
@@ -17,7 +17,7 @@ local function score(P)
|
||||
--Level up!
|
||||
local s=P.modeData.event+1;P.modeData.event=s
|
||||
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.wait=death_wait[s]
|
||||
E.fall=death_fall[s]
|
||||
@@ -44,7 +44,7 @@ return{
|
||||
fall=death_fall[1],
|
||||
dropPiece=score,
|
||||
freshLimit=15,
|
||||
bg="game2",bgm="secret7th",
|
||||
bg="bg2",bgm="secret7th",
|
||||
},
|
||||
slowMark=true,
|
||||
load=function()
|
||||
|
||||
@@ -16,7 +16,7 @@ local function score(P)
|
||||
--Level up!
|
||||
local s=P.modeData.event+1;P.modeData.event=s
|
||||
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.wait=rush_wait[s]
|
||||
E.fall=rush_fall[s]
|
||||
@@ -48,7 +48,7 @@ return{
|
||||
fall=rush_fall[1],
|
||||
dropPiece=score,
|
||||
freshLimit=15,
|
||||
bg="game1",bgm="secret8th",
|
||||
bg="bg1",bgm="secret8th",
|
||||
},
|
||||
slowMark=true,
|
||||
load=function()
|
||||
|
||||
@@ -46,7 +46,7 @@ return{
|
||||
dropPiece=score,
|
||||
freshLimit=15,
|
||||
easyFresh=false,bone=true,
|
||||
bg="none",bgm="distortion",
|
||||
bg="lightning",bgm="distortion",
|
||||
},
|
||||
slowMark=true,
|
||||
load=function()
|
||||
|
||||
@@ -16,7 +16,7 @@ return{
|
||||
drop=1e99,lock=1e99,
|
||||
oncehold=false,
|
||||
dropPiece=update_round,
|
||||
bg="game3",bgm="push",
|
||||
bg="rainbow",bgm="push",
|
||||
},
|
||||
load=function()
|
||||
PLY.newPlayer(1,340,15)
|
||||
|
||||
@@ -16,7 +16,7 @@ return{
|
||||
drop=1e99,lock=1e99,
|
||||
oncehold=false,
|
||||
dropPiece=update_round,
|
||||
bg="game3",bgm="push",
|
||||
bg="rainbow",bgm="push",
|
||||
},
|
||||
load=function()
|
||||
PLY.newPlayer(1,340,15)
|
||||
|
||||
@@ -16,7 +16,7 @@ return{
|
||||
drop=1e99,lock=1e99,
|
||||
oncehold=false,
|
||||
dropPiece=update_round,
|
||||
bg="game3",bgm="push",
|
||||
bg="rainbow",bgm="push",
|
||||
},
|
||||
load=function()
|
||||
PLY.newPlayer(1,340,15)
|
||||
|
||||
@@ -16,7 +16,7 @@ return{
|
||||
drop=1e99,lock=1e99,
|
||||
oncehold=false,
|
||||
dropPiece=update_round,
|
||||
bg="game3",bgm="push",
|
||||
bg="rainbow",bgm="push",
|
||||
},
|
||||
load=function()
|
||||
PLY.newPlayer(1,340,15)
|
||||
|
||||
@@ -16,7 +16,7 @@ return{
|
||||
drop=1e99,lock=1e99,
|
||||
oncehold=false,
|
||||
dropPiece=update_round,
|
||||
bg="game3",bgm="push",
|
||||
bg="rainbow",bgm="push",
|
||||
},
|
||||
load=function()
|
||||
PLY.newPlayer(1,340,15)
|
||||
|
||||
@@ -3,7 +3,7 @@ return{
|
||||
env={
|
||||
drop=60,lock=60,
|
||||
freshLimit=15,
|
||||
bg="game2",bgm="race",
|
||||
bg="bg2",bgm="race",
|
||||
},
|
||||
pauseLimit=true,
|
||||
load=function()
|
||||
|
||||
@@ -3,7 +3,7 @@ return{
|
||||
env={
|
||||
drop=60,lock=60,
|
||||
freshLimit=15,
|
||||
bg="game2",bgm="race",
|
||||
bg="bg2",bgm="race",
|
||||
},
|
||||
pauseLimit=true,
|
||||
load=function()
|
||||
|
||||
@@ -3,7 +3,7 @@ return{
|
||||
env={
|
||||
drop=60,lock=60,
|
||||
freshLimit=15,
|
||||
bg="game2",bgm="race",
|
||||
bg="bg2",bgm="race",
|
||||
},
|
||||
pauseLimit=true,
|
||||
load=function()
|
||||
|
||||
@@ -3,7 +3,7 @@ return{
|
||||
env={
|
||||
drop=60,lock=60,
|
||||
freshLimit=15,
|
||||
bg="game2",bgm="race",
|
||||
bg="bg2",bgm="race",
|
||||
},
|
||||
pauseLimit=true,
|
||||
load=function()
|
||||
|
||||
@@ -3,7 +3,7 @@ return{
|
||||
env={
|
||||
drop=60,lock=60,
|
||||
freshLimit=15,
|
||||
bg="game2",bgm="race",
|
||||
bg="bg2",bgm="race",
|
||||
},
|
||||
pauseLimit=true,
|
||||
load=function()
|
||||
|
||||
@@ -5,7 +5,7 @@ return{
|
||||
env={
|
||||
drop=60,lock=60,
|
||||
target=10,dropPiece=PLY.reach_winCheck,
|
||||
bg="game2",bgm="race",
|
||||
bg="bg2",bgm="race",
|
||||
},
|
||||
load=function()
|
||||
PLY.newPlayer(1,340,15)
|
||||
|
||||
@@ -5,7 +5,7 @@ return{
|
||||
env={
|
||||
drop=60,lock=60,
|
||||
target=100,dropPiece=PLY.reach_winCheck,
|
||||
bg="game2",bgm="race",
|
||||
bg="bg2",bgm="race",
|
||||
},
|
||||
load=function()
|
||||
PLY.newPlayer(1,340,15)
|
||||
@@ -33,7 +33,7 @@ return{
|
||||
T<=90 and 4 or
|
||||
T<=136 and 3 or
|
||||
T<=196 and 2 or
|
||||
T<=260 and 1 or
|
||||
T<=240 and 1 or
|
||||
0
|
||||
end,
|
||||
}
|
||||
@@ -5,7 +5,7 @@ return{
|
||||
env={
|
||||
drop=60,lock=60,
|
||||
target=1000,dropPiece=PLY.reach_winCheck,
|
||||
bg="game3",bgm="push",
|
||||
bg="rainbow",bgm="push",
|
||||
},
|
||||
load=function()
|
||||
PLY.newPlayer(1,340,15)
|
||||
@@ -30,10 +30,10 @@ return{
|
||||
local T=P.stat.time
|
||||
return
|
||||
T<=626 and 5 or
|
||||
T<=888 and 4 or
|
||||
T<=1140 and 3 or
|
||||
T<=1406 and 2 or
|
||||
T<=1626 and 1 or
|
||||
T<=800 and 4 or
|
||||
T<=900 and 3 or
|
||||
T<=1050 and 2 or
|
||||
T<=1200 and 1 or
|
||||
0
|
||||
end,
|
||||
}
|
||||
@@ -5,7 +5,7 @@ return{
|
||||
env={
|
||||
drop=60,lock=60,
|
||||
target=20,dropPiece=PLY.reach_winCheck,
|
||||
bg="game2",bgm="race",
|
||||
bg="bg2",bgm="race",
|
||||
},
|
||||
load=function()
|
||||
PLY.newPlayer(1,340,15)
|
||||
|
||||
@@ -5,7 +5,7 @@ return{
|
||||
env={
|
||||
drop=60,lock=60,
|
||||
target=40,dropPiece=PLY.reach_winCheck,
|
||||
bg="game2",bgm="race",
|
||||
bg="bg2",bgm="race",
|
||||
},
|
||||
load=function()
|
||||
PLY.newPlayer(1,340,15)
|
||||
|
||||
@@ -5,7 +5,7 @@ return{
|
||||
env={
|
||||
drop=60,lock=60,
|
||||
target=400,dropPiece=PLY.reach_winCheck,
|
||||
bg="game3",bgm="push",
|
||||
bg="rainbow",bgm="push",
|
||||
},
|
||||
load=function()
|
||||
PLY.newPlayer(1,340,15)
|
||||
@@ -30,10 +30,10 @@ return{
|
||||
local T=P.stat.time
|
||||
return
|
||||
T<=300 and 5 or
|
||||
T<=340 and 4 or
|
||||
T<=462 and 3 or
|
||||
T<=555 and 2 or
|
||||
T<=626 and 1 or
|
||||
T<=330 and 4 or
|
||||
T<=360 and 3 or
|
||||
T<=390 and 2 or
|
||||
T<=420 and 1 or
|
||||
0
|
||||
end,
|
||||
}
|
||||
@@ -24,7 +24,7 @@ return{
|
||||
Fkey=selectTarget,
|
||||
pushSpeed=2,
|
||||
freshLimit=15,
|
||||
bg="game3",bgm="rockblock",
|
||||
bg="rainbow",bgm="rockblock",
|
||||
},
|
||||
load=function()
|
||||
royaleData={
|
||||
|
||||
@@ -24,7 +24,7 @@ return{
|
||||
Fkey=selectTarget,
|
||||
pushSpeed=2,
|
||||
freshLimit=15,
|
||||
bg="game3",bgm="rockblock",
|
||||
bg="rainbow",bgm="rockblock",
|
||||
},
|
||||
load=function()
|
||||
royaleData={
|
||||
|
||||
@@ -24,7 +24,7 @@ return{
|
||||
Fkey=selectTarget,
|
||||
pushSpeed=2,
|
||||
freshLimit=15,
|
||||
bg="game3",bgm="rockblock",
|
||||
bg="rainbow",bgm="rockblock",
|
||||
},
|
||||
load=function()
|
||||
royaleData={
|
||||
|
||||
@@ -24,7 +24,7 @@ return{
|
||||
Fkey=selectTarget,
|
||||
pushSpeed=2,
|
||||
freshLimit=15,
|
||||
bg="game3",bgm="rockblock",
|
||||
bg="rainbow",bgm="rockblock",
|
||||
},
|
||||
load=function()
|
||||
royaleData={
|
||||
|
||||
@@ -24,7 +24,7 @@ return{
|
||||
Fkey=selectTarget,
|
||||
pushSpeed=2,
|
||||
freshLimit=15,
|
||||
bg="game3",bgm="rockblock",
|
||||
bg="rainbow",bgm="rockblock",
|
||||
},
|
||||
load=function()
|
||||
royaleData={
|
||||
|
||||
@@ -24,7 +24,7 @@ return{
|
||||
Fkey=selectTarget,
|
||||
pushSpeed=2,
|
||||
freshLimit=15,
|
||||
bg="game3",bgm="rockblock",
|
||||
bg="rainbow",bgm="rockblock",
|
||||
},
|
||||
load=function()
|
||||
royaleData={
|
||||
|
||||
@@ -20,7 +20,7 @@ return{
|
||||
end
|
||||
end
|
||||
end,
|
||||
bg="matrix",bgm="infinite",
|
||||
bg="fan",bgm="infinite",
|
||||
},
|
||||
slowMark=true,
|
||||
pauseLimit=true,
|
||||
|
||||
@@ -4,7 +4,7 @@ return{
|
||||
drop=120,lock=120,
|
||||
oncehold=false,target=200,
|
||||
dropPiece=PLY.reach_winCheck,
|
||||
bg="game2",bgm="infinite",
|
||||
bg="bg2",bgm="infinite",
|
||||
},
|
||||
load=function()
|
||||
PLY.newPlayer(1,340,15)
|
||||
|
||||
@@ -21,7 +21,8 @@ setting={
|
||||
smooth=true,grid=false,
|
||||
bagLine=false,
|
||||
lockFX=2,
|
||||
dropFX=3,
|
||||
dropFX=2,
|
||||
moveFX=2,
|
||||
clearFX=2,
|
||||
shakeFX=2,
|
||||
atkFX=3,
|
||||
|
||||
@@ -164,6 +164,7 @@ function pasteSequence(str)
|
||||
end
|
||||
|
||||
preBag=bag
|
||||
sceneTemp.cur=#preBag
|
||||
return true
|
||||
end
|
||||
|
||||
|
||||
@@ -84,14 +84,14 @@ local TRS={
|
||||
},--Z
|
||||
{},--S
|
||||
{
|
||||
[01]={{-1, 0},{-1, 1},{ 0,-2},{ 1, 1}},
|
||||
[10]={{ 1, 0},{ 1,-1},{ 0, 2},{ 1, 2}},
|
||||
[01]={{-1, 0},{-1, 1},{ 1, 0},{ 0,-2},{ 1, 1}},
|
||||
[10]={{ 1, 0},{ 1,-1},{-1, 0},{ 0, 2},{ 1, 2}},
|
||||
[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}},
|
||||
[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}},
|
||||
[32]={{-1, 0},{-1,-1},{ 0, 2},{-1, 2},{-1, 1}},
|
||||
[23]={{ 1, 0},{ 1,-1},{ 1, 1},{ 0,-2},{ 1,-2}},
|
||||
[21]={{-1, 0},{-1, 1},{-1,-1},{ 1, 0},{ 0, 1},{ 0,-2},{-1,-2}},
|
||||
[32]={{-1, 0},{-1,-1},{ 1, 0},{ 0, 2},{-1, 2},{-1, 1}},
|
||||
[23]={{ 1, 0},{ 1,-1},{-1, 0},{ 1, 1},{ 0,-2},{ 1,-2}},
|
||||
[02]={{-1, 0},{ 1, 0},{ 0,-1},{ 0, 1}},
|
||||
[20]={{ 1, 0},{-1, 0},{ 0, 1},{ 0,-1}},
|
||||
[13]={{ 0,-1},{ 0, 1},{ 1, 0}},
|
||||
@@ -149,13 +149,13 @@ local TRS={
|
||||
end,--O
|
||||
{
|
||||
[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}},
|
||||
[30]={{-2, 0},{ 1, 0},{ 1,-2},{-2, 1},{ 0, 2}},
|
||||
[12]={{-1, 0},{ 2, 0},{ 0,-1},{-1, 2},{ 2,-1}},
|
||||
[21]={{-2, 0},{ 1, 0},{ 0, 1},{ 1,-2},{-2, 1}},
|
||||
[32]={{ 1, 0},{-2, 0},{ 0,-1},{ 1, 2},{-2,-1}},
|
||||
[23]={{ 2, 0},{-1, 0},{ 0, 1},{-1,-2},{ 2, 1}},
|
||||
[30]={{-2, 0},{ 1, 0},{ 1,-2},{-2, 1},{ 0, 1}},
|
||||
[12]={{-1, 0},{ 2, 0},{ 2,-1},{ 0,-1},{-1, 2}},
|
||||
[21]={{-2, 0},{ 1, 0},{ 1,-2},{-2, 1},{ 0, 1}},
|
||||
[32]={{ 1, 0},{-2, 0},{-2,-1},{ 0,-1},{ 1, 2}},
|
||||
[23]={{ 2, 0},{-1, 0},{-1,-2},{ 2, 1},{ 0, 1}},
|
||||
[02]={{-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}},
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
local sin,cos=math.sin,math.cos
|
||||
snapLevelValue={1,10,20,40,60,80}
|
||||
title={
|
||||
{
|
||||
@@ -114,6 +115,12 @@ title={
|
||||
5878, 463,
|
||||
},
|
||||
}
|
||||
for _,C in next,title do
|
||||
for i=1,#C do
|
||||
C[i]=C[i]*.1626
|
||||
end
|
||||
end
|
||||
--[[
|
||||
title2={}
|
||||
for i=1,#title do title2[i]=title[i]end
|
||||
title2[5]={
|
||||
@@ -140,12 +147,22 @@ title2[5]={
|
||||
3001, 1280,
|
||||
2779, 1280,
|
||||
}
|
||||
|
||||
for _,C in next,title do
|
||||
for i=1,#C do
|
||||
C[i]=C[i]*.1626
|
||||
]]
|
||||
title_fan={}
|
||||
for i=1,8 do
|
||||
local L={}
|
||||
title_fan[i]=L
|
||||
for j=1,#title[i]do
|
||||
L[j]=title[i][j]
|
||||
end
|
||||
for j=1,#L,2 do
|
||||
local x,y=L[j],L[j+1]--0<x<3041, 290<y<1280
|
||||
x,y=-(x+240+y*.3)*.002,(y-580)*.9
|
||||
x,y=y*cos(x),-y*sin(x)--Rec-Pol-Rec
|
||||
L[j],L[j+1]=x,y+300
|
||||
end
|
||||
end
|
||||
|
||||
customID={
|
||||
"drop","lock",
|
||||
"wait","fall",
|
||||
@@ -168,7 +185,7 @@ customRange={
|
||||
target={10,20,40,100,200,500,1000,1e99},
|
||||
freshLimit={0,8,15,1e99},
|
||||
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"},
|
||||
}
|
||||
local function T(s,t)return love.graphics.newText(setFont(s),t)end
|
||||
|
||||
230
parts/player.lua
230
parts/player.lua
@@ -18,8 +18,11 @@ local gameEnv0={
|
||||
smooth=false,grid=false,
|
||||
bagLine=false,
|
||||
text=true,
|
||||
lockFX=2,dropFX=3,
|
||||
clearFX=2,shakeFX=3,
|
||||
lockFX=2,
|
||||
dropFX=2,
|
||||
moveFX=2,
|
||||
clearFX=2,
|
||||
shakeFX=3,
|
||||
|
||||
drop=60,lock=60,
|
||||
wait=0,fall=0,
|
||||
@@ -243,12 +246,21 @@ local function updateFXs(P,dt)
|
||||
--DropFX
|
||||
for i=#P.dropFX,1,-1 do
|
||||
local S=P.dropFX[i]
|
||||
S[6]=S[6]+S[7]*dt
|
||||
if S[6]>1 then
|
||||
S[5]=S[5]+S[6]*dt
|
||||
if S[5]>1 then
|
||||
rem(P.dropFX,i)
|
||||
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
|
||||
for i=#P.clearFX,1,-1 do
|
||||
local S=P.clearFX[i]
|
||||
@@ -410,15 +422,15 @@ local function Pupdate_alive(P,dt)
|
||||
|
||||
--Try spawn new block
|
||||
if not P.control then goto stop end
|
||||
if P.waiting==0 then P:popNext()end
|
||||
if P.waiting>=0 then
|
||||
P.waiting=P.waiting-1
|
||||
if P.waiting<0 then P:popNext()end
|
||||
goto stop
|
||||
end
|
||||
|
||||
--Natural block falling
|
||||
if P.cur then
|
||||
if P.curY~=P.imgY then
|
||||
if P.curY>P.imgY then
|
||||
local D=P.dropDelay
|
||||
if D>1 then
|
||||
P.dropDelay=D-1
|
||||
@@ -426,16 +438,22 @@ local function Pupdate_alive(P,dt)
|
||||
end
|
||||
|
||||
if D==1 then
|
||||
if P.gameEnv.moveFX and P.gameEnv.block then
|
||||
P:createMoveFX("down")
|
||||
end
|
||||
P.curY=P.curY-1
|
||||
else
|
||||
local _=P.curY-P.imgY--Max fall dist
|
||||
D=1/D--Fall dist
|
||||
if D<_ then
|
||||
P.curY=P.curY-D
|
||||
-- assert(P.curY==int(P.curY),"y:"..P.curY.." fall:"..D.." D_env:"..P.gameEnv.drop)
|
||||
if D>P.curY-P.imgY then D=P.curY-P.imgY end
|
||||
if P.gameEnv.moveFX and P.gameEnv.block then
|
||||
for i=1,D do
|
||||
P:createMoveFX("down")
|
||||
P.curY=P.curY-1
|
||||
end
|
||||
else
|
||||
P.curY=P.imgY
|
||||
P.curY=P.curY-D
|
||||
end
|
||||
-- assert(P.curY==int(P.curY),"y:"..P.curY.." fall:"..D.." D_env:"..P.gameEnv.drop)
|
||||
end
|
||||
P:freshBlock(true,true)
|
||||
P.spinLast=false
|
||||
@@ -533,25 +551,29 @@ end
|
||||
local function drawFXs(P)
|
||||
--LockFX
|
||||
for i=1,#P.lockFX do
|
||||
_=P.lockFX[i]
|
||||
if _[3]<.5 then
|
||||
gc.setColor(1,1,1,2*_[3])
|
||||
gc.rectangle("fill",_[1],_[2],60*_[3],30)
|
||||
local S=P.lockFX[i]
|
||||
if S[3]<.5 then
|
||||
gc.setColor(1,1,1,2*S[3])
|
||||
gc.rectangle("fill",S[1],S[2],60*S[3],30)
|
||||
else
|
||||
gc.setColor(1,1,1,2-2*_[3])
|
||||
gc.rectangle("fill",_[1]+30,_[2],60*_[3]-60,30)
|
||||
gc.setColor(1,1,1,2-2*S[3])
|
||||
gc.rectangle("fill",S[1]+30,S[2],60*S[3]-60,30)
|
||||
end
|
||||
end
|
||||
|
||||
--DropFX
|
||||
for i=1,#P.dropFX do
|
||||
_=P.dropFX[i]
|
||||
gc.setColor(1,1,1,.6-_[6]*.6)
|
||||
for x=_[2],_[4]do
|
||||
for y=_[5],_[3]do
|
||||
drawPixel(y,x,_[1])
|
||||
end
|
||||
end
|
||||
local S=P.dropFX[i]
|
||||
gc.setColor(1,1,1,.6-S[5]*.6)
|
||||
local w=30*S[3]*(1-S[5]*.5)
|
||||
gc.rectangle("fill",30*S[1]-30+15*S[3]-w*.5,600-30*S[2],w,30*S[4])
|
||||
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
|
||||
|
||||
--ClearFX
|
||||
@@ -636,7 +658,7 @@ local function Pdraw_norm(P)
|
||||
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)
|
||||
local trans=P.lockDelay/P.gameEnv.lock
|
||||
if P.gameEnv.block then
|
||||
@@ -680,13 +702,18 @@ local function Pdraw_norm(P)
|
||||
::E::
|
||||
gc.setScissor()
|
||||
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.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
|
||||
if P.gameEnv.easyFresh then
|
||||
gc.setColor(1,1,1)
|
||||
else
|
||||
gc.setColor(1,.26,.26)
|
||||
end
|
||||
if P.lockDelay>=0 then
|
||||
gc.rectangle("fill",0,602,300*P.lockDelay/P.gameEnv.lock,6)--Lock delay indicator
|
||||
end
|
||||
@@ -985,11 +1012,11 @@ end
|
||||
--------------------------<FX>--------------------------
|
||||
function player.showText(P,text,dx,dy,font,style,spd,stop)
|
||||
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
|
||||
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
|
||||
local function without(L,e)
|
||||
for i=1,#L do
|
||||
@@ -999,7 +1026,7 @@ local function without(L,e)
|
||||
end
|
||||
function player.createLockFX(P)
|
||||
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
|
||||
local y=P.curY+i-1
|
||||
@@ -1013,9 +1040,49 @@ function player.createLockFX(P)
|
||||
end
|
||||
end
|
||||
end
|
||||
function player.createDropFX(P,x1,y1,x2,y2)--x1<x2,y1>y2!
|
||||
if P.gameEnv.block and y1>=y2 then
|
||||
P.dropFX[#P.dropFX+1]={P.cur.color,x1,y1,x2,y2,0,12-2*P.gameEnv.dropFX}
|
||||
function player.creatDropFX(P,x,y,w,h)--TODO, remake dropFX
|
||||
ins(P.dropFX,{x,y,w,h,0,13-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
|
||||
function player.createBeam(P,R,send,time,target,color,clear,spin,combo)
|
||||
@@ -1069,7 +1136,7 @@ function player.createBeam(P,R,send,time,target,color,clear,spin,combo)
|
||||
radius=radius*.4
|
||||
a=.35
|
||||
end
|
||||
FX_attack[#FX_attack+1]={
|
||||
ins(FX_attack,{
|
||||
x=x1,y=y1,--Current pos
|
||||
x1=x1,y1=y1,--Start pos
|
||||
x2=x2,y2=y2,--End pos
|
||||
@@ -1079,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,
|
||||
t=0,
|
||||
drag={},--Afterimage coordinate list
|
||||
}
|
||||
})
|
||||
end
|
||||
function player.newTask(P,code,data)
|
||||
local L=P.tasks
|
||||
L[#L+1]={
|
||||
ins(L,{
|
||||
code=code,
|
||||
data=data,
|
||||
}
|
||||
})
|
||||
end
|
||||
--------------------------</FX>--------------------------
|
||||
|
||||
@@ -1221,7 +1288,7 @@ function player.garbageRise(P,color,amount,pos)
|
||||
_=P.dropFX[i]
|
||||
_[3],_[5]=_[3]+amount,_[5]+amount
|
||||
end
|
||||
if #P.field>40 then P:lose()end
|
||||
if #P.field>42 then P:lose()end
|
||||
end
|
||||
|
||||
local invList={2,1,4,3,5,6,7}
|
||||
@@ -1244,7 +1311,7 @@ function player.pushLine(P,L,mir)
|
||||
P.fieldBeneath=P.fieldBeneath+120
|
||||
P.curY=P.curY+#L
|
||||
P.imgY=P.imgY+#L
|
||||
P:freshBlock(true,false)
|
||||
P:freshBlock(false,false)
|
||||
end
|
||||
function player.pushNext(P,L,mir)
|
||||
for i=1,#L do
|
||||
@@ -1294,7 +1361,7 @@ function player.changeAtk(P,R)
|
||||
end
|
||||
if R then
|
||||
P.atking=R
|
||||
R.atker[#R.atker+1]=P
|
||||
ins(R.atker,P)
|
||||
else
|
||||
P.atking=nil
|
||||
end
|
||||
@@ -1317,8 +1384,8 @@ function player.freshBlock(P,keepGhost,control,system)
|
||||
|
||||
--Create FX if dropped
|
||||
if P.curY>P.imgY then
|
||||
if P.gameEnv.dropFX then
|
||||
P:createDropFX(P.curX,P.curY+1,P.curX+P.c-1,P.imgY+P.r-1)
|
||||
if P.gameEnv.dropFX and P.gameEnv.block and P.curY-P.imgY-P.r>-1 then
|
||||
P:creatDropFX(P.curX,P.curY-1,P.c,P.curY-P.imgY-P.r+1)
|
||||
end
|
||||
if P.gameEnv.shakeFX then
|
||||
P.fieldOff.vy=P.gameEnv.shakeFX*.5
|
||||
@@ -1334,12 +1401,12 @@ function player.freshBlock(P,keepGhost,control,system)
|
||||
|
||||
if control then
|
||||
if P.gameEnv.easyFresh then
|
||||
local d,d0=P.lockDelay,P.gameEnv.lock
|
||||
if d<d0 and P.freshTime<P.gameEnv.freshLimit 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=min(d+d0*.6,d0)
|
||||
P.lockDelay=d0
|
||||
P.dropDelay=P.gameEnv.drop
|
||||
end
|
||||
if P.curY<P.minY then
|
||||
@@ -1391,8 +1458,8 @@ function player.spin(P,d,ifpre)
|
||||
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
|
||||
ix,iy=x,y
|
||||
if P.gameEnv.dropFX then
|
||||
P:createDropFX(P.curX,P.curY+P.r-1,P.curX+P.c-1,P.curY)
|
||||
if P.gameEnv.moveFX and P.gameEnv.block then
|
||||
P:createMoveFX()
|
||||
end
|
||||
P.curX,P.curY,P.dir=ix,iy,idir
|
||||
P.sc,P.cur.bk=scs[P.cur.id][idir],icb
|
||||
@@ -1516,7 +1583,7 @@ end
|
||||
|
||||
function player.getNext(P,n)
|
||||
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
|
||||
function player.popNext(P)--Pop next queue to hand
|
||||
P.holded=false
|
||||
@@ -1647,7 +1714,7 @@ function player.drop(P)--Place piece
|
||||
--Create clearing FX
|
||||
if cc>0 and P.gameEnv.clearFX then
|
||||
local l=P.clearedRow
|
||||
local t=6-P.gameEnv.clearFX*1.5
|
||||
local t=7-P.gameEnv.clearFX*1
|
||||
for i=1,cc do
|
||||
ins(P.clearFX,{l[i],0,t})
|
||||
end
|
||||
@@ -1657,8 +1724,13 @@ function player.drop(P)--Place piece
|
||||
if P.gameEnv.lockFX then
|
||||
if cc==0 then
|
||||
P:createLockFX()
|
||||
elseif P.lockFX[1]then
|
||||
P.lockFX={}
|
||||
else
|
||||
_=#P.lockFX
|
||||
if _>0 then
|
||||
for i=1,_ do
|
||||
rem(P.lockFX)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
@@ -2260,6 +2332,9 @@ function player.act.moveLeft(P,auto)
|
||||
end
|
||||
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.gameEnv.moveFX and P.gameEnv.block then
|
||||
P:createMoveFX("left")
|
||||
end
|
||||
P.curX=P.curX-1
|
||||
P:freshBlock(false,true)
|
||||
if P.human and P.curY==P.imgY then SFX.play("move")end
|
||||
@@ -2284,6 +2359,9 @@ function player.act.moveRight(P,auto)
|
||||
end
|
||||
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.gameEnv.moveFX and P.gameEnv.block then
|
||||
P:createMoveFX("right")
|
||||
end
|
||||
P.curX=P.curX+1
|
||||
P:freshBlock(false,true)
|
||||
if P.human and P.curY==P.imgY then SFX.play("move")end
|
||||
@@ -2323,10 +2401,10 @@ function player.act.hardDrop(P)
|
||||
P:changeAtkMode(3)
|
||||
end
|
||||
P.keyPressing[6]=false
|
||||
elseif P.control and P.waiting<=0 and P.cur then
|
||||
if P.curY~=P.imgY then
|
||||
if P.gameEnv.dropFX then
|
||||
P:createDropFX(P.curX,P.curY+1,P.curX+P.c-1,P.imgY+P.r-1)
|
||||
elseif P.control and P.waiting==-1 and P.cur then
|
||||
if P.curY>P.imgY then
|
||||
if P.gameEnv.dropFX and P.gameEnv.block and P.curY-P.imgY-P.r>-1 then
|
||||
P:creatDropFX(P.curX,P.curY-1,P.c,P.curY-P.imgY-P.r+1)
|
||||
end
|
||||
P.curY=P.imgY
|
||||
P.spinLast=false
|
||||
@@ -2351,7 +2429,7 @@ function player.act.softDrop(P)
|
||||
else
|
||||
P.downing=1
|
||||
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:freshBlock(true,true)
|
||||
P.spinLast=false
|
||||
@@ -2377,10 +2455,10 @@ function player.act.insLeft(P,auto)
|
||||
if P.gameEnv.nofly or not P.cur then return end
|
||||
local x0=P.curX
|
||||
while not P:ifoverlap(P.cur.bk,P.curX-1,P.curY)do
|
||||
P.curX=P.curX-1
|
||||
if P.gameEnv.dropFX then
|
||||
P:createDropFX(P.curX+P.c,P.curY+P.r-1,P.curX+P.c,P.curY)
|
||||
if P.gameEnv.moveFX and P.gameEnv.block then
|
||||
P:createMoveFX("left")
|
||||
end
|
||||
P.curX=P.curX-1
|
||||
P:freshBlock(false,true)
|
||||
end
|
||||
if P.curX~=x0 then
|
||||
@@ -2399,10 +2477,10 @@ function player.act.insRight(P,auto)
|
||||
if P.gameEnv.nofly or not P.cur then return end
|
||||
local x0=P.curX
|
||||
while not P:ifoverlap(P.cur.bk,P.curX+1,P.curY)do
|
||||
P.curX=P.curX+1
|
||||
if P.gameEnv.dropFX then
|
||||
P:createDropFX(P.curX-1,P.curY+P.r-1,P.curX-1,P.curY)
|
||||
if P.gameEnv.moveFX and P.gameEnv.block then
|
||||
P:createMoveFX("right")
|
||||
end
|
||||
P.curX=P.curX+1
|
||||
P:freshBlock(false,true)
|
||||
end
|
||||
if P.curX~=x0 then
|
||||
@@ -2418,9 +2496,9 @@ function player.act.insRight(P,auto)
|
||||
end
|
||||
end
|
||||
function player.act.insDown(P)
|
||||
if P.curY~=P.imgY and P.cur then
|
||||
if P.gameEnv.dropFX then
|
||||
P:createDropFX(P.curX,P.curY+1,P.curX+P.c-1,P.imgY+P.r-1)
|
||||
if P.curY>P.imgY and P.cur then
|
||||
if P.gameEnv.dropFX and P.gameEnv.block and P.curY-P.imgY-P.r>-1 then
|
||||
P:creatDropFX(P.curX,P.curY-1,P.c,P.curY-P.imgY-P.r+1)
|
||||
end
|
||||
if P.gameEnv.shakeFX then
|
||||
P.fieldOff.vy=P.gameEnv.shakeFX*.5
|
||||
@@ -2430,7 +2508,10 @@ function player.act.insDown(P)
|
||||
end
|
||||
end
|
||||
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:freshBlock(true,true)
|
||||
P.spinLast=false
|
||||
@@ -2438,7 +2519,7 @@ function player.act.down1(P)
|
||||
end
|
||||
function player.act.down4(P)
|
||||
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:freshBlock(true,true)
|
||||
P.spinLast=false
|
||||
@@ -2450,7 +2531,7 @@ end
|
||||
function player.act.down10(P)
|
||||
if P.cur then
|
||||
for _=1,10 do
|
||||
if P.curY~=P.imgY then
|
||||
if P.curY>P.imgY then
|
||||
P.curY=P.curY-1
|
||||
P:freshBlock(true,true)
|
||||
P.spinLast=false
|
||||
@@ -2586,7 +2667,7 @@ local function newEmptyPlayer(id,x,y,size)
|
||||
P.fieldBeneath=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.bonus={}--Texts
|
||||
|
||||
@@ -2647,6 +2728,7 @@ local function applyGameEnv(P)--Finish gameEnv processing
|
||||
|
||||
if ENV.lockFX==0 then ENV.lockFX=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.shakeFX==0 then ENV.shakeFX=nil end
|
||||
end
|
||||
@@ -2720,8 +2802,11 @@ function PLY.newDemoPlayer(id,x,y,size)
|
||||
ghost=setting.ghost,center=setting.center,
|
||||
smooth=setting.smooth,grid=setting.grid,
|
||||
text=setting.text,
|
||||
lockFX=setting.lockFX,dropFX=setting.dropFX,
|
||||
clearFX=setting.clearFX,shakeFX=setting.shakeFX,
|
||||
lockFX=setting.lockFX,
|
||||
dropFX=setting.dropFX,
|
||||
moveFX=setting.moveFX,
|
||||
clearFX=setting.clearFX,
|
||||
shakeFX=setting.shakeFX,
|
||||
|
||||
_20G=false,bone=false,
|
||||
drop=1e99,lock=1e99,
|
||||
@@ -2785,6 +2870,7 @@ function PLY.newAIPlayer(id,x,y,size,AIdata)
|
||||
ENV.text=false
|
||||
ENV.lockFX=nil
|
||||
ENV.dropFX=nil
|
||||
ENV.moveFX=nil
|
||||
ENV.shakeFX=nil
|
||||
end
|
||||
|
||||
|
||||
@@ -6,21 +6,20 @@ local S=[=[
|
||||
靏鸖龘龘 込余 saki
|
||||
模电
|
||||
[rmb10+]:
|
||||
八零哥 蕴空之灵 gggf127 dtg
|
||||
ThTsOd Fireboos 金巧 10元
|
||||
立斐 Deep_Sea 时雪 yyangdid
|
||||
sfqr 心痕 Sasoric 夏小亚 仁参
|
||||
乐↗乐↘ 喜欢c4w的ztcjoin 面包 蠢熏
|
||||
潘一栗 Lied 星街书婉 祝西 829
|
||||
e m*12 我永远爱白银诺艾尔(鹏 PCX
|
||||
八零哥 蕴空之灵 gggf127 dtg ThTsOd
|
||||
Fireboos 金巧 10元 立斐 Deep_Sea
|
||||
时雪 yyangdid sfqr 心痕 Sasoric
|
||||
夏小亚 仁参 乐↗乐↘ 喜欢c4w的ztcjoin
|
||||
面包 蠢熏 潘一栗 Lied 星街书婉 祝西
|
||||
829 e m*12 我永远爱白银诺艾尔(鹏 PCX
|
||||
kagura77 呆喂 GlowingEmbers 轩辕辚
|
||||
HimuroAki TCV100 tech有养成系统了@7065
|
||||
HAGE KANOBU 闪电和拐棍 葡萄味的曼妥思
|
||||
世界沃德 蓝绿 天生的魔法师 琳雨空
|
||||
T8779.易缄 吃水榴莲 诗情画意 星姐阿夸双推Man暗炎
|
||||
[*炎] [*Y] aaa222 [**城] cnDD
|
||||
红桃老给 昭庭玲秋 旋树墩 火花工作室
|
||||
Cosine
|
||||
世界沃德 蓝绿 天生的魔法师 琳雨空 T8779.易缄
|
||||
吃水榴莲 诗情画意 星姐阿夸双推Man暗炎 [*炎]
|
||||
[*Y] aaa222 [**城] cnDD 红桃老给
|
||||
昭庭玲秋 旋树墩 火花工作室 Cosine 天上_飞
|
||||
|
||||
Thanks!!!
|
||||
|
||||
Future outlook:
|
||||
@@ -28,11 +27,13 @@ Future outlook:
|
||||
PUYO
|
||||
game tutorial
|
||||
finesse tutorial/exam(3next, 1pt/mino, drop to score)
|
||||
easy finesse (only revert current)
|
||||
game Abbr. test
|
||||
backfire
|
||||
round-based dig
|
||||
bigbang
|
||||
rhythm
|
||||
KPP-locked
|
||||
combo
|
||||
square
|
||||
field shifting(left/right)
|
||||
@@ -42,21 +43,19 @@ Future outlook:
|
||||
symmetry
|
||||
hidden: sound only
|
||||
reverb (often repeat a piece many times)
|
||||
KPP-locked
|
||||
parkour
|
||||
Other:
|
||||
mod system with:
|
||||
block/field/up/low hidden
|
||||
next[1] hidden
|
||||
next[1-n] hidden
|
||||
field flip(LR/UD)
|
||||
no fail(∞ lives)
|
||||
mini games:
|
||||
15 puzzle (with hidden mode)
|
||||
2048 (with next (with deadly mode))
|
||||
2048 (with next/deadly mode)
|
||||
mine sweeper
|
||||
tank battle
|
||||
new AI: task-Z
|
||||
cool backgrounds
|
||||
'Encrypt'(compile to byte code)
|
||||
better drop FX
|
||||
60+ fps supporting
|
||||
@@ -69,6 +68,32 @@ Future outlook:
|
||||
more graphic FXs & 3D features & animations
|
||||
network game
|
||||
|
||||
0.10.5: 特效更新 FX update
|
||||
新内容:
|
||||
瞬移特效独立为瞬降和移动(旋转)特效,增加移动特效滑条,各特效范围均为0~5
|
||||
增加两个莫名其妙的背景(放在无尽和限时打分)
|
||||
把之前不小心弄丢的自制蓝屏报错界面捡回来了
|
||||
改动:
|
||||
雷达图OPM参数改为ADPM
|
||||
调整J/L/I的踢墙表
|
||||
根据锁延刷新模式决定锁延指示条颜色
|
||||
增加无尽挖掘连挖提示,挖完后下一波立即升起
|
||||
new English translation by @MattMayuga#8789
|
||||
修改100/400/1000L的评级要求
|
||||
支持加载部分老版本存档
|
||||
软件锁界面出现时机调整,按钮位置调整
|
||||
调整混战模式倍率影响边框颜色的范围
|
||||
代码:
|
||||
重命名大多数背景
|
||||
重构createXxxFX函数
|
||||
修复:
|
||||
几个设置大标题样式统一
|
||||
有消行延迟+出块等待时连续硬降出现神秘现象
|
||||
垃圾行上涨不刷新ghost
|
||||
粘贴序列bug
|
||||
可以用键盘复制粘贴序列
|
||||
每次启动游戏ai是一样的块序
|
||||
|
||||
0.10.4: 漏洞修复 Bug Fix
|
||||
代码:
|
||||
修改场景模块方法名
|
||||
|
||||
Reference in New Issue
Block a user