Compare commits

..

36 Commits

Author SHA1 Message Date
MrZ_26
94519ba147 0.10.5:特效更新 2020-08-22 02:17:48 +08:00
MrZ_26
e397bdcd12 重构createMoveFX 2020-08-22 02:11:29 +08:00
MrZ_26
e8f0efb22c 代码小调整 2020-08-22 02:04:52 +08:00
MrZ_26
7ecadb0ff1 几个设置大标题样式统一 2020-08-22 01:57:06 +08:00
MrZ_26
59377efa0c 降低两个马拉松的S评级要求 2020-08-21 17:30:23 +08:00
MrZ_26
4040afbbd9 瞬移特效独立为瞬降和移动(旋转)特效,增加移动特效滑条,各特效范围均为0~5 2020-08-21 00:34:39 +08:00
MrZ_26
d362e1cb54 超高死亡高度改为42 2020-08-21 00:30:47 +08:00
MrZ_26
ff9647bd00 修复垃圾行上涨不刷新ghost 2020-08-21 00:30:09 +08:00
MrZ_26
eb2cff0016 调整各评级颜色 2020-08-19 20:51:19 +08:00
MrZ_26
858f2c673b 暂停界面数据排版微调 2020-08-19 20:50:52 +08:00
MrZ_26
4b9cd0cd06 蓝色更亮一点 2020-08-19 20:50:25 +08:00
MrZ_26
7e2c76bf77 调整JLI的踢墙表 2020-08-19 17:48:17 +08:00
MrZ_26
4b02f3b9ee 复原之前自制蓝屏报错界面 2020-08-19 00:21:26 +08:00
MrZ_26
3f7a09ef71 fan背景完善 2020-08-19 00:06:09 +08:00
MrZ_26
fd580dcadc new English translation by @MattMayuga#8789 2020-08-18 23:06:02 +08:00
MrZ_26
6d64590a12 声音设置页面标题颜色浅了 2020-08-18 21:54:50 +08:00
MrZ_26
e5be25b481 有消行延迟+出块等待时连续硬降出现神秘现象 2020-08-18 21:54:29 +08:00
MrZ_26
7f28278378 挖完后下一波8行会立刻升起 2020-08-18 00:38:50 +08:00
MrZ_26
a7112094f6 加入扇子背景 2020-08-18 00:38:28 +08:00
MrZ_26
37d0a106a9 修复粘贴序列bug,可以用键盘复制粘贴 2020-08-17 17:17:52 +08:00
MrZ_26
731bdab8b2 群号修改 2020-08-17 00:42:36 +08:00
MrZ_26
eabf1242aa wing背景细节调整 2020-08-16 22:47:02 +08:00
MrZ_26
ef857643c8 再微调i踢墙表(顺顺逆式) 2020-08-16 22:28:51 +08:00
MrZ_26
2cf64541f2 支持加载部分老版本存档,软件锁界面出现时机调整,按钮位置调整 2020-08-16 21:01:34 +08:00
MrZ_26
b2ba8a84e9 可交互背景系统试验(给无尽挖掘装上了) 2020-08-16 01:19:46 +08:00
MrZ_26
78e3aa2532 staff添加user670,格式规范 2020-08-16 00:31:33 +08:00
MrZ_26
84e253fd8b 调整混战模式玩家边框颜色影响区域,根据锁延刷新模式决定锁延指示条颜色 2020-08-16 00:31:25 +08:00
MrZ_26
1c4d89c425 雷达图OPM参数改为ADPM 2020-08-15 21:48:04 +08:00
MrZ_26
720e7c6c06 无尽挖掘连挖提示语 2020-08-15 19:46:24 +08:00
MrZ_26
e8902d578a 换字库 2020-08-15 18:15:19 +08:00
MrZ_26
e70b6d3218 微调i的踢墙表 2020-08-15 17:53:12 +08:00
MrZ_26
dded42aeef 整理代码 2020-08-15 17:52:08 +08:00
MrZ_26
6cccf2604c 重命名大多数背景 2020-08-15 17:23:59 +08:00
MrZ_26
f26888beaa 微调yygq语言 2020-08-14 20:20:57 +08:00
MrZ_26
ce4ba0cefd 每次启动游戏ai是一样的块序 2020-08-14 18:23:12 +08:00
MrZ_26
0885f3bfb3 修改100/400/1000L的评级要求 2020-08-14 17:13:02 +08:00
54 changed files with 724 additions and 335 deletions

View File

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

View File

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

View File

@@ -173,10 +173,12 @@ function keyDown.calculator(k)
if S.val==626 then if S.val==626 then
S.pass=true S.pass=true
elseif S.val==196022 then elseif S.val==196022 then
S.pass=true
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
@@ -191,7 +193,7 @@ function keyDown.calculator(k)
end end
elseif k=="space"then elseif k=="space"then
if S.pass then if S.pass then
SCN.swapTo("load") SCN.swapTo("intro")
end end
end end
end end
@@ -217,6 +219,10 @@ 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.go("main") SCN.go("main")
end end
@@ -431,8 +437,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)
@@ -460,18 +478,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
@@ -1071,6 +1077,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,
@@ -1094,7 +1165,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.appLock and "calculator"or"load")--Scene Launch SCN.init("load")--Scene Launch
marking=true marking=true
return function() return function()
@@ -1199,9 +1270,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

View File

@@ -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="速度加快",
@@ -124,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",
@@ -152,7 +153,7 @@ local langList={
"", "",
"使用LOVE2D引擎", "使用LOVE2D引擎",
"错误或者建议请附带截图发送到内测群或者作者邮箱~", "错误或者建议请附带截图发送到内测群或者作者邮箱~",
"仅通过内测群1080457319进行免费下载/更新", "仅通过内测群1127702001进行免费下载/更新",
"其他渠道获得游戏皆有被修改/加广告/植入病毒的风险,程序只申请了振动&联网权限!", "其他渠道获得游戏皆有被修改/加广告/植入病毒的风险,程序只申请了振动&联网权限!",
"若由于被修改的本游戏产生的各种损失作者不负责(我怎么负责啊跟我有啥关系)", "若由于被修改的本游戏产生的各种损失作者不负责(我怎么负责啊跟我有啥关系)",
"请从正规途径获得最新版,游戏现为免费,不过有打赏当然感谢啦~", "请从正规途径获得最新版,游戏现为免费,不过有打赏当然感谢啦~",
@@ -161,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, 蕴空之灵,",
@@ -182,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",
@@ -244,6 +247,7 @@ local langList={
back="返回", back="返回",
}, },
draw={ draw={
b12="[ ]",
any="不定", any="不定",
space="×", space="×",
clear="清除", clear="清除",
@@ -288,6 +292,7 @@ local langList={
bagLine="包分界线", bagLine="包分界线",
lockFX="锁定特效等级", lockFX="锁定特效等级",
dropFX="下落特效等级", dropFX="下落特效等级",
moveFX="移动特效等级",
clearFX="消除特效等级", clearFX="消除特效等级",
shakeFX="晃动特效等级", shakeFX="晃动特效等级",
atkFX="攻击特效等级", atkFX="攻击特效等级",
@@ -488,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="速度加快",
@@ -592,7 +598,7 @@ local langList={
radar={"","","","","",""}, radar={"","","","","",""},
radarData={ radarData={
"防/分", "防/分",
"/分", "/分",
"攻/分", "攻/分",
"送/分", "送/分",
"行/分", "行/分",
@@ -619,7 +625,7 @@ local langList={
"从TO/C2/KOS/TGM3/JS等方块获得过灵感", "从TO/C2/KOS/TGM3/JS等方块获得过灵感",
"", "",
"错误或者建议请附带截图发送到内测群或者作者邮箱~", "错误或者建议请附带截图发送到内测群或者作者邮箱~",
"仅通过内测群1080457319进行免费下载/更新", "仅通过内测群1127702001进行免费下载/更新",
"其他渠道获得游戏皆有被修改/加广告/植入病毒的风险,程序只申请了振动&联网权限!", "其他渠道获得游戏皆有被修改/加广告/植入病毒的风险,程序只申请了振动&联网权限!",
"若由于被修改的本游戏产生的各种损失作者不负责(我怎么负责啊跟我有啥关系)", "若由于被修改的本游戏产生的各种损失作者不负责(我怎么负责啊跟我有啥关系)",
"请从正规途径获得最新版,游戏现为免费,不过有打赏当然感谢啦~", "请从正规途径获得最新版,游戏现为免费,不过有打赏当然感谢啦~",
@@ -628,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, 蕴空之灵,",
"茶管, [所有内测人员]", "茶管, [所有内测人员]",
@@ -649,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",
@@ -711,6 +718,7 @@ local langList={
back="返回", back="返回",
}, },
draw={ draw={
b12="[ ]",
any="不定", any="不定",
space="×", space="×",
clear="清除", clear="清除",
@@ -755,6 +763,7 @@ local langList={
bagLine="包分界线", bagLine="包分界线",
lockFX="锁定特效等级", lockFX="锁定特效等级",
dropFX="下落特效等级", dropFX="下落特效等级",
moveFX="移动特效等级",
clearFX="消除特效等级", clearFX="消除特效等级",
shakeFX="晃动特效等级", shakeFX="晃动特效等级",
atkFX="攻击特效等级", atkFX="攻击特效等级",
@@ -938,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",
@@ -988,36 +998,36 @@ 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:",
switchSpawnSFX="Switch on spawn SFX to play", switchSpawnSFX="Switch on spawn SFX to play",
@@ -1026,7 +1036,7 @@ local langList={
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",
@@ -1056,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",
@@ -1082,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",
@@ -1095,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",
@@ -1121,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",
@@ -1151,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={
@@ -1167,6 +1179,7 @@ local langList={
back="Back", back="Back",
}, },
draw={ draw={
b12="[ ]",
any="Erase", any="Erase",
space="×", space="×",
clear="Clear", clear="Clear",
@@ -1189,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",
appLock="App Lock(pw=626)", appLock="App Lock (Password: 626)",
back="Back", back="Back",
}, },
setting_video={ setting_video={
@@ -1208,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={
@@ -1272,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",
@@ -1309,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",
}, },
}, },
@@ -1345,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?"},
@@ -1389,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."},
}, },
}, },
{ {
@@ -1411,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="~!~",
@@ -1510,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",
@@ -1549,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, 蕴空之灵,",
@@ -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]", 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",
@@ -1621,6 +1638,7 @@ local langList={
back="X", back="X",
}, },
draw={ draw={
b12="[ ]",
any="_", any="_",
space="×", space="×",
clear="XXX", clear="XXX",
@@ -1665,6 +1683,7 @@ local langList={
bagLine="123|123", bagLine="123|123",
lockFX="↓_~", lockFX="↓_~",
dropFX="↓~", dropFX="↓~",
moveFX="←→~",
clearFX="↓↓↓~", clearFX="↓↓↓~",
shakeFX="~|~|~", shakeFX="~|~|~",
atkFX="→→~", atkFX="→→~",
@@ -1865,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="速度加快",
@@ -1971,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",
@@ -1989,8 +2009,8 @@ local langList={
"挖掘/挖掘攻击:", "挖掘/挖掘攻击:",
"效率/挖掘效率:", "效率/挖掘效率:",
"多余操作/极简率:", "多余操作/极简率:",
"满贯/大满贯:", "牛逼/很牛逼:",
"全/半清:", "消光/消半截:",
}, },
help={ help={
"既然你能玩到这个游戏,应该也不需要什么帮助吧?", "既然你能玩到这个游戏,应该也不需要什么帮助吧?",
@@ -1999,7 +2019,7 @@ local langList={
"", "",
"使用LOVE2D引擎", "使用LOVE2D引擎",
"错误或者建议请附带截图发送到内测群或者作者邮箱~", "错误或者建议请附带截图发送到内测群或者作者邮箱~",
"仅通过内测群1080457319进行免费下载/更新", "仅通过内测群1127702001进行免费下载/更新",
"其他渠道获得游戏皆有被修改/加广告/植入病毒的风险,程序只申请了振动&联网权限!", "其他渠道获得游戏皆有被修改/加广告/植入病毒的风险,程序只申请了振动&联网权限!",
"若由于被修改的本游戏产生的各种损失作者不负责(我怎么负责啊跟我有啥关系)", "若由于被修改的本游戏产生的各种损失作者不负责(我怎么负责啊跟我有啥关系)",
"请从正规途径获得最新版,游戏现为免费,不过有打赏当然感谢啦~", "请从正规途径获得最新版,游戏现为免费,不过有打赏当然感谢啦~",
@@ -2029,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",
@@ -2091,6 +2111,7 @@ local langList={
back="返回", back="返回",
}, },
draw={ draw={
b12="[ ]",
any="不定", any="不定",
space="×", space="×",
clear="清除", clear="清除",
@@ -2135,6 +2156,7 @@ local langList={
bagLine="包分界线", bagLine="包分界线",
lockFX="锁定特效等级", lockFX="锁定特效等级",
dropFX="下落特效等级", dropFX="下落特效等级",
moveFX="移动特效等级",
clearFX="消除特效等级", clearFX="消除特效等级",
shakeFX="晃动特效等级", shakeFX="晃动特效等级",
atkFX="攻击特效等级", atkFX="攻击特效等级",

View File

@@ -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={
@@ -111,13 +111,15 @@ 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)
setFont(35) if not setting.appLock then
gc.print(text.load[S.phase],340,335) setFont(35)
if S.phase~=0 then gc.print(text.load[S.phase],340,335)
gc.printf(S.cur.."/"..S.tar,795,335,150,"right") if S.phase~=0 then
gc.printf(S.cur.."/"..S.tar,795,335,150,"right")
end
setFont(25)
mStr(S.tip,640,400)
end end
setFont(25)
mStr(S.tip,640,400)
end end
local titleTransform={ local titleTransform={
@@ -312,10 +314,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 +641,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 +674,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 +745,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 +762,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)

View File

@@ -48,16 +48,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 +124,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 +197,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 +207,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 +264,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

View File

@@ -39,18 +39,15 @@ function Tmr.load()
SKIN.load() SKIN.load()
stat.run=stat.run+1 stat.run=stat.run+1
-------------------------- --------------------------
SFX.play("welcome_sfx") if not setting.appLock then
VOC.play("welcome") SFX.play("welcome_sfx")
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
@@ -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

View File

@@ -99,23 +99,23 @@ 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.go("mode")end}), 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="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

View File

@@ -1,4 +1,4 @@
gameVersion="Alpha V0.10.4" gameVersion="Alpha V0.10.5"
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"

BIN
font.ttf

Binary file not shown.

View File

@@ -99,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)
@@ -116,8 +119,11 @@ if fs.getInfo("tech_ultimate+.dat")then fs.remove("tech_ultimate+.dat")end
R=modeRanks R=modeRanks
for k,v in next,R do 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] local save=v
break if not R[Modes[k].name]then
R[Modes[k].name]=v
end
R[k]=nil
end end
end end
if R.master_adavnce then if R.master_adavnce then
@@ -134,7 +140,6 @@ if type(setting.spawn)~="number"then
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")

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@@ -20,7 +20,7 @@ return{
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,
@@ -41,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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@@ -164,6 +164,7 @@ function pasteSequence(str)
end end
preBag=bag preBag=bag
sceneTemp.cur=#preBag
return true return true
end end

View File

@@ -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}},
@@ -149,13 +149,13 @@ local TRS={
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}},

View File

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

View File

@@ -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,
@@ -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,16 +438,22 @@ 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:freshBlock(true,true) P:freshBlock(true,true)
P.spinLast=false P.spinLast=false
@@ -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
@@ -985,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
@@ -999,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
@@ -1013,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)
@@ -1069,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
@@ -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, 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>--------------------------
@@ -1221,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}
@@ -1244,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:freshBlock(true,false) 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
@@ -1294,7 +1361,7 @@ 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
@@ -1317,8 +1384,8 @@ function player.freshBlock(P,keepGhost,control,system)
--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
@@ -1334,12 +1401,12 @@ function player.freshBlock(P,keepGhost,control,system)
if control then if control then
if P.gameEnv.easyFresh then if P.gameEnv.easyFresh then
local d,d0=P.lockDelay,P.gameEnv.lock local d0=P.gameEnv.lock
if d<d0 and P.freshTime<P.gameEnv.freshLimit then if P.lockDelay<d0 and P.freshTime<P.gameEnv.freshLimit then
if not system then if not system then
P.freshTime=P.freshTime+1 P.freshTime=P.freshTime+1
end end
P.lockDelay=min(d+d0*.6,d0) P.lockDelay=d0
P.dropDelay=P.gameEnv.drop P.dropDelay=P.gameEnv.drop
end end
if P.curY<P.minY then 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] 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
@@ -1516,7 +1583,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
@@ -1647,7 +1714,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
@@ -1657,8 +1724,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
@@ -2260,6 +2332,9 @@ 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:freshBlock(false,true) P:freshBlock(false,true)
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
@@ -2284,6 +2359,9 @@ 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:freshBlock(false,true) P:freshBlock(false,true)
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
@@ -2323,10 +2401,10 @@ function player.act.hardDrop(P)
P:changeAtkMode(3) P:changeAtkMode(3)
end end
P.keyPressing[6]=false P.keyPressing[6]=false
elseif P.control and P.waiting<=0 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
@@ -2351,7 +2429,7 @@ 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:freshBlock(true,true) P:freshBlock(true,true)
P.spinLast=false P.spinLast=false
@@ -2377,10 +2455,10 @@ 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.curX=P.curX-1
P:freshBlock(false,true) P:freshBlock(false,true)
end end
if P.curX~=x0 then 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 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.curX=P.curX+1
P:freshBlock(false,true) P:freshBlock(false,true)
end end
if P.curX~=x0 then if P.curX~=x0 then
@@ -2418,9 +2496,9 @@ 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
@@ -2430,7 +2508,10 @@ function player.act.insDown(P)
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:freshBlock(true,true) P:freshBlock(true,true)
P.spinLast=false P.spinLast=false
@@ -2438,7 +2519,7 @@ function player.act.down1(P)
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:freshBlock(true,true) P:freshBlock(true,true)
P.spinLast=false P.spinLast=false
@@ -2450,7 +2531,7 @@ 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:freshBlock(true,true) P:freshBlock(true,true)
P.spinLast=false P.spinLast=false
@@ -2586,7 +2667,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
@@ -2647,6 +2728,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
@@ -2720,8 +2802,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,
@@ -2785,6 +2870,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

View File

@@ -6,21 +6,20 @@ 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:
@@ -28,11 +27,13 @@ Future outlook:
PUYO PUYO
game tutorial game tutorial
finesse tutorial/exam(3next, 1pt/mino, drop to score) finesse tutorial/exam(3next, 1pt/mino, drop to score)
easy finesse (only revert current)
game Abbr. test game Abbr. test
backfire backfire
round-based dig round-based dig
bigbang bigbang
rhythm rhythm
KPP-locked
combo combo
square square
field shifting(left/right) field shifting(left/right)
@@ -42,21 +43,19 @@ Future outlook:
symmetry symmetry
hidden: sound only hidden: sound only
reverb (often repeat a piece many times) reverb (often repeat a piece many times)
KPP-locked
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 better drop FX
60+ fps supporting 60+ fps supporting
@@ -69,6 +68,32 @@ Future outlook:
more graphic FXs & 3D features & animations more graphic FXs & 3D features & animations
network game 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 0.10.4: 漏洞修复 Bug Fix
代码: 代码:
修改场景模块方法名 修改场景模块方法名