Compare commits

..

8 Commits

Author SHA1 Message Date
MrZ626
510f7d7513 版本推进 2021-11-13 05:42:36 +08:00
MrZ626
3128eb38c0 再调整一些模式的bgm 2021-11-13 05:41:27 +08:00
MrZ626
14ef654612 混战模式信息绘制从玩家类移到规则包 2021-11-13 05:21:59 +08:00
MrZ626
bc5193f95e 落块事件改名落块钩子
添加死亡钩子(仅在窒息和超高触发)
堆积模式消行动作挂到死亡钩子上
2021-11-13 05:20:32 +08:00
MrZ626
8cbb4a38bc dropPiece事件改名hook_drop 2021-11-12 23:20:29 +08:00
MrZ626
fce08c83ef 堆积模式移出地图,删除h难度 2021-11-12 21:17:30 +08:00
MrZ626
018e99f9e6 修正改评级文本后tip没改 2021-11-12 16:39:30 +08:00
MrZ626
7fe390b34b 赞助名单添加三位 2021-11-12 16:28:37 +08:00
87 changed files with 159 additions and 231 deletions

View File

@@ -450,7 +450,7 @@ do
fs.remove('record/round_l.rec')
fs.remove('record/round_u.rec')
end
if STAT.version<1604 then
if RANKS.stack_e then
RANKS.stack_e=nil
RANKS.stack_h=nil
RANKS.stack_u=nil

View File

@@ -1,5 +1,5 @@
return{
dropPiece=function(P)
hook_drop=function(P)
if P.lastPiece.atk>0 then
P:receive(nil,P.lastPiece.atk,0,generateLine(P.holeRND:random(10)))
end

View File

@@ -1,5 +1,5 @@
return{
dropPiece=function(P)
hook_drop=function(P)
if P.lastPiece.atk>0 then
P:receive(nil,P.lastPiece.atk,120,generateLine(P.holeRND:random(10)))
end

View File

@@ -1,5 +1,5 @@
return{
dropPiece=function(P)
hook_drop=function(P)
if P.lastPiece.atk>0 then
P:receive(nil,P.lastPiece.atk,30,generateLine(P.holeRND:random(10)))
end

View File

@@ -1,5 +1,5 @@
return{
dropPiece=function(P)
hook_drop=function(P)
if P.lastPiece.atk>0 then
P:receive(nil,P.lastPiece.atk,60,generateLine(P.holeRND:random(10)))
end

View File

@@ -1,5 +1,5 @@
return{
dropPiece=function(P)
hook_drop=function(P)
if P.lastPiece.row>0 then
for _=1,#P.clearedRow do
local h=#P.field

View File

@@ -1,5 +1,5 @@
return{
dropPiece=function(P)
hook_drop=function(P)
if P.lastPiece.row==0 then
P:lose()
else

View File

@@ -6,7 +6,7 @@ return{
mText(TEXTOBJ.atk,63,243)
mText(TEXTOBJ.eff,63,363)
end,
dropPiece=function(P)
hook_drop=function(P)
if P.stat.atk>=100 then
P:win('finish')
end

View File

@@ -1,5 +1,5 @@
return{
dropPiece=function(P)
hook_drop=function(P)
if P.garbageBeneath==0 then
local D=P.modeData
D.finished=D.finished+1

View File

@@ -6,7 +6,7 @@ return{
mStr(r,63,265)
PLY.draw.drawTargetLine(P,r)
end,
dropPiece=function(P)
hook_drop=function(P)
if P.stat.row>=10 then
P:win('finish')
end

View File

@@ -6,7 +6,7 @@ return{
mStr(r,63,265)
PLY.draw.drawTargetLine(P,r)
end,
dropPiece=function(P)
hook_drop=function(P)
if P.stat.row>=100 then
P:win('finish')
end

View File

@@ -6,7 +6,7 @@ return{
mStr(r,63,265)
PLY.draw.drawTargetLine(P,r)
end,
dropPiece=function(P)
hook_drop=function(P)
if P.stat.row>=1000 then
P:win('finish')
end

View File

@@ -6,7 +6,7 @@ return{
mStr(r,63,265)
PLY.draw.drawTargetLine(P,r)
end,
dropPiece=function(P)
hook_drop=function(P)
if P.stat.row>=20 then
P:win('finish')
end

View File

@@ -6,7 +6,7 @@ return{
mStr(r,63,265)
PLY.draw.drawTargetLine(P,r)
end,
dropPiece=function(P)
hook_drop=function(P)
if P.stat.row>=200 then
P:win('finish')
end

View File

@@ -6,7 +6,7 @@ return{
mStr(r,63,265)
PLY.draw.drawTargetLine(P,r)
end,
dropPiece=function(P)
hook_drop=function(P)
if P.stat.row>=40 then
P:win('finish')
end

View File

@@ -6,7 +6,7 @@ return{
mStr(r,63,265)
PLY.draw.drawTargetLine(P,r)
end,
dropPiece=function(P)
hook_drop=function(P)
if P.stat.row>=400 then
P:win('finish')
end

View File

@@ -1,5 +1,5 @@
return{
dropPiece=function(P)
hook_drop=function(P)
if #PLY_ALIVE>1 then
P.control=false
local id1=P.sid

View File

@@ -1,5 +1,5 @@
return{
dropPiece=function(P)
hook_drop=function(P)
if P.stat.piece%7==0 and #PLY_ALIVE>1 then
P.control=false
local id1=P.sid

View File

@@ -22,7 +22,7 @@ return{
task=function(P)
P.modeData.target=10
end,
dropPiece=function(P)
hook_drop=function(P)
local D=P.modeData
if P.stat.row>=D.target then
if D.target==110 then

View File

@@ -22,7 +22,7 @@ return{
task=function(P)
P.modeData.target=10
end,
dropPiece=function(P)
hook_drop=function(P)
local D=P.modeData
if P.stat.row>=D.target then
if D.target==110 then

View File

@@ -22,7 +22,7 @@ return{
task=function(P)
P.modeData.target=10
end,
dropPiece=function(P)
hook_drop=function(P)
local D=P.modeData
if P.stat.row>=D.target then
if D.target==100 then

View File

@@ -3,7 +3,7 @@ return{
setFont(55)
mStr(100-P.stat.dig,63,265)
end,
dropPiece=function(P)
hook_drop=function(P)
for _=1,math.min(10,100-P.stat.dig)-P.garbageBeneath do
P:garbageRise(21,1,P:getHolePos())
end

View File

@@ -3,7 +3,7 @@ return{
setFont(55)
mStr(10-P.stat.dig,63,265)
end,
dropPiece=function(P)
hook_drop=function(P)
if P.stat.dig==10 then
P:win('finish')
end

View File

@@ -3,7 +3,7 @@ return{
setFont(55)
mStr(400-P.stat.dig,63,265)
end,
dropPiece=function(P)
hook_drop=function(P)
for _=1,math.min(10,400-P.stat.dig)-P.garbageBeneath do
P:garbageRise(21,1,P:getHolePos())
end

View File

@@ -3,7 +3,7 @@ return{
setFont(55)
mStr(40-P.stat.dig,63,265)
end,
dropPiece=function(P)
hook_drop=function(P)
for _=1,math.min(10,40-P.stat.dig)-P.garbageBeneath do
P:garbageRise(21,1,P:getHolePos())
end

View File

@@ -11,7 +11,7 @@ return{
task=function(P)
P.modeData.target=10
end,
dropPiece=function(P)
hook_drop=function(P)
local flag
local l=P.lastPiece
if P.combo>1 then flag=true;P:showText("2x",0,-220,40,'flicker',.3)end

View File

@@ -10,7 +10,7 @@ return
task=function(P)
P.modeData.target=50
end,
dropPiece=function(P)
hook_drop=function(P)
if P.stat.row>=P.modeData.target then
if P.modeData.target==50 then
P.gameEnv.drop=.25

View File

@@ -30,7 +30,7 @@ return
task=function(P)
P.modeData.target=10
end,
dropPiece=function(P)
hook_drop=function(P)
if P.stat.row>=P.modeData.target then
if P.modeData.target%300==0 then
P.gameEnv.wait=P.gameEnv.wait-1

View File

@@ -12,7 +12,7 @@ return
task=function(P)
P.modeData.target=10
end,
dropPiece=function(P)
hook_drop=function(P)
if P.stat.row>=P.modeData.target then
if P.modeData.target==200 then
P:win('finish')

View File

@@ -30,7 +30,7 @@ return{
mStr(P.stat.row,63,230)
mStr(P.stat.clears[4],63,340)
end,
dropPiece=function(P)
hook_drop=function(P)
if P.modeData.rankPoint<140-passPoint then--If Less then X
local R=#P.clearedRow
if R>0 then

View File

@@ -8,7 +8,7 @@ return{
mesDisp=function(P)
PLY.draw.drawProgress(P.modeData.pt,P.modeData.target)
end,
dropPiece=function(P)
hook_drop=function(P)
local D=P.modeData
local c=#P.clearedRow

View File

@@ -12,7 +12,7 @@ return{
mesDisp=function(P)
PLY.draw.drawProgress(P.modeData.pt,P.modeData.target)
end,
dropPiece=function(P)
hook_drop=function(P)
local D=P.modeData
local c=#P.clearedRow

View File

@@ -14,7 +14,7 @@ return
task=function(P)
P.modeData.target=10
end,
dropPiece=function(P)
hook_drop=function(P)
if P.stat.row>=P.modeData.target then
if P.modeData.target==200 then
P:win('finish')

View File

@@ -12,7 +12,7 @@ return{
mesDisp=function(P)
PLY.draw.drawProgress(P.modeData.pt,P.modeData.target)
end,
dropPiece=function(P)
hook_drop=function(P)
local D=P.modeData
local c=#P.clearedRow

View File

@@ -13,7 +13,7 @@ return
mesDisp=function(P)
PLY.draw.drawProgress(P.modeData.pt,P.modeData.target)
end,
dropPiece=function(P)
hook_drop=function(P)
local p=P.modeData.pt+P.lastPiece.row
if p>=P.modeData.target then
local ENV=P.gameEnv

View File

@@ -5,7 +5,7 @@ return{
mStr(P.stat.pc,63,340)
mText(TEXTOBJ.pc,63,410)
end,
dropPiece=function(P)
hook_drop=function(P)
if P.lastPiece.pc and P.stat.row%4==0 then
P.gameEnv.heightLimit=4
if P.stat.pc%5==0 then

View File

@@ -46,6 +46,6 @@ return{
mStr(P.stat.pc,63,340)
mText(TEXTOBJ.pc,63,410)
end,
dropPiece=check,
hook_drop=check,
task=check,
}

View File

@@ -37,6 +37,6 @@ return{
mStr(P.stat.pc,63,340)
mText(TEXTOBJ.pc,63,410)
end,
dropPiece=check,
hook_drop=check,
task=check,
}

View File

@@ -1,5 +1,24 @@
local gc=love.graphics
local gc_draw,gc_print,gc_setColor=gc.draw,gc.print,gc.setColor
local setFont=setFont
local PLAYERS,PLY_ALIVE=PLAYERS,PLY_ALIVE
return{
mesDisp=function(P)
PLY.draw.drawRoyaleInfo(P)
setFont(35)
mStr(#PLY_ALIVE.."/"..#PLAYERS,63,175)
mStr(P.modeData.ko,80,215)
gc_draw(TEXTOBJ.ko,60-TEXTOBJ.ko:getWidth(),222)
setFont(20)
gc_setColor(1,.5,0,.6)
gc_print(P.badge,103,227)
gc_setColor(.97,.97,.97)
setFont(25)
mStr(text.powerUp[P.strength],63,290)
gc_setColor(1,1,1)
for i=1,P.strength do
gc_draw(IMG.badgeIcon,16*i+6,260)
end
end,
}

View File

@@ -36,7 +36,7 @@ return{
end
end
end,
dropPiece=function(P)
hook_drop=function(P)
if P.stat.row>=40 then
P:win('finish')
end

View File

@@ -14,7 +14,7 @@ return{
mStr(r,63,265)
PLY.draw.drawTargetLine(P,r)
end,
dropPiece=function(P)
hook_drop=function(P)
local F=P.field
for y=1,#F do
local l=F[y]

View File

@@ -7,9 +7,9 @@ return{
mText(TEXTOBJ.line,63,350)
PLY.draw.drawMarkLine(P,20,.3,1,1,TIME()%.42<.21 and .95 or .6)
end,
dropPiece=function(P)
if #P.field>20 then
local cc=P:clearFilledLines(P.garbageBeneath+1,#P.field-P.garbageBeneath)
hook_die=function(P)
local cc=P:clearFilledLines(P.garbageBeneath+1,#P.field-P.garbageBeneath)
if cc>0 then
local h=20-cc-P.garbageBeneath
if h>0 then
P:garbageRise(21,h,2e10-1)

View File

@@ -1,22 +0,0 @@
return{
fieldH=21,
fillClear=false,
mesDisp=function(P)
setFont(60)
mStr(P.stat.row,63,280)
mText(TEXTOBJ.line,63,350)
PLY.draw.drawMarkLine(P,18,.3,1,1,TIME()%.42<.21 and .95 or .6)
end,
dropPiece=function(P)
if #P.field>20 then
local cc=P:clearFilledLines(P.garbageBeneath+1,#P.field-P.garbageBeneath)
local h=20-cc-P.garbageBeneath-2
if h>0 then
P:garbageRise(21,h,2e10-1)
if P.garbageBeneath>=20 then
P:lose()
end
end
end
end,
}

View File

@@ -7,9 +7,9 @@ return{
mText(TEXTOBJ.line,63,350)
PLY.draw.drawMarkLine(P,17,.3,1,1,TIME()%.42<.21 and .95 or .6)
end,
dropPiece=function(P)
if #P.field>20 then
local cc=P:clearFilledLines(P.garbageBeneath+1,#P.field-P.garbageBeneath)
hook_die=function(P)
local cc=P:clearFilledLines(P.garbageBeneath+1,#P.field-P.garbageBeneath)
if cc>0 then
local h=20-cc-P.garbageBeneath-3
if h>0 then
P:garbageRise(21,h,2e10-1)

View File

@@ -4,7 +4,7 @@ return{
mStr(P.stat.clear[7][4],63,250)
mText(TEXTOBJ.techrash,63,315)
end,
dropPiece=function(P)
hook_drop=function(P)
if P.lastPiece.row>0 and P.lastPiece.row<4 then
P:lose()
end

View File

@@ -8,12 +8,12 @@ return{
PLY.draw.applyField(P)
local L=P.modeData.history
for i=1,#L do
gc.setColor(1,.3,.3,.45-i*.04)
gc.setColor(1,.3,.3,.5-i*.04)
gc.rectangle('fill',30*L[i]-30,0,30,600)
end
PLY.draw.cancelField(P)
end,
dropPiece=function(P)
hook_drop=function(P)
local C=P.lastPiece
if C.row>0 then
if C.row==4 then

View File

@@ -4,7 +4,7 @@ return{
mStr(P.modeData.tsd,63,250)
mText(TEXTOBJ.tsd,63,315)
end,
dropPiece=function(P)
hook_drop=function(P)
local C=P.lastPiece
if C.row>0 then
if C.id==5 and C.row==2 and C.spin then

View File

@@ -13,7 +13,7 @@ return{
PLY.draw.cancelField(P)
end
end,
dropPiece=function(P)
hook_drop=function(P)
local C=P.lastPiece
if C.row>0 then
if C.id==5 and C.row==2 and C.spin then

View File

@@ -8,12 +8,12 @@ return{
PLY.draw.applyField(P)
local L=P.modeData.history
for i=1,#L do
gc.setColor(1,.3,.3,.3-i*.05)
gc.setColor(1,.3,.3,.4-i*.05)
gc.rectangle('fill',30*L[i]-30,0,30,600)
end
PLY.draw.cancelField(P)
end,
dropPiece=function(P)
hook_drop=function(P)
local C=P.lastPiece
if C.row>0 then
if C.id==5 and C.row==2 and C.spin then

View File

@@ -677,9 +677,6 @@ return{
['dig_400l']= {"Dig", "400L", "Dig 400 garbage lines"},
['drought_n']= {"Drought", "100L", "No I-pieces available"},
['drought_l']= {"Drought+", "100L", "W T F"},
['stack_e']= {"Stack", "EASY", "Pack them!"},
['stack_h']= {"Stack", "HARD", "Pack them!"},
['stack_u']= {"Stack", "ULTIMATE", "Pack them!"},
['marathon_n']= {"Marathon", "NORMAL", "200-line marathon with increasing speed"},
['marathon_h']= {"Marathon", "HARD", "200-line high-speed marathon"},
['solo_e']= {"Battle", "EASY", "Defeat the AI!"},
@@ -834,7 +831,7 @@ return{
"Powered by Un..LÖVE",
"pps-0.01",
"Server down randomly",
"Some requirements to achieve rank S are intentionally set to be difficult for even the best players.",
"Some requirements to achieve rank X are intentionally set to be difficult for even the best players.",
"Soon you'll be able to play against friends and foes all over the world.",
"Split clear coming soon!",
"sudo rm -rf /*",

View File

@@ -636,9 +636,6 @@ return{
['dig_400l']= {"Queso", "400L", "Limpia 400 líneas de queso."},
['drought_n']= {"Sequía", "100L", "¡Sin piezas I!"},
['drought_l']= {"Sequía+", "100L", "Guat de foc..."},
['stack_e']= {"Stack", "Fácil", "¡Sin dejar huecos!"},
['stack_h']= {"Stack", "Difícil", "¡Sin dejar huecos!"},
['stack_u']= {"Stack", "Supremo", "¡Sin dejar huecos!"},
['marathon_n']= {"Maratón", "Normal", "Maratón de 200 líneas con velocidad en aumento."},
['marathon_h']= {"Maratón", "Difícil", "Maratón de 200 líneas a velocidad máxima."},
['solo_e']= {"VS.", "Fácil", "¡Derrota a la CPU!"},

View File

@@ -638,7 +638,6 @@ return{
['drought_n']= {"Drought", "100L", "Pas de pièce I !"},
['drought_l']= {"Drought+", "100L", "WTF ??!!"},
-- ['stack_e']= {"Stack", "FACILE", "Pack them!"},
-- ['stack_h']= {"Stack", "DIFFICILE", "Pack them!"},
-- ['stack_u']= {"Stack", "ULTIME", "Pack them!"},
['marathon_n']= {"Marathon", "NORMAL", "Marathon de 200 lignes."},
['marathon_h']= {"Marathon", "DIFFICILE", "Marathon de 200 lignes à très haute vitesse"},

View File

@@ -668,7 +668,6 @@ return{
['drought_n']= {"Drought", "100L", "Sem peça I !"},
['drought_l']= {"Drought+", "100L", "WTF"},
-- ['stack_e']= {"Stack", "FÁCIL", "Pack them!"},
-- ['stack_h']= {"Stack", "DIFÍCIL", "Pack them!"},
-- ['stack_u']= {"Stack", "ULTIMATE", "Pack them!"},
['marathon_n']= {"Maratona", "NORMAL", "200-line Maratona com velocidade aumentando."},
['marathon_h']= {"Maratona", "DIFÍCIL", "200-line Maratona com velocidade alta."},

View File

@@ -206,9 +206,6 @@ return{fallback='zh',
['dig_400l']= {"挖掘", "400L", "挖400行"},
['drought_n']= {"干旱", "100L", "放轻松,简单得很"},
['drought_l']= {"干旱+", "100L", "有趣的要来了"},
['stack_e']= {"堆叠", "简单", "智力启蒙玩具(确信"},
['stack_h']= {"堆叠", "困难", "智力启蒙玩具(确信"},
['stack_u']= {"堆叠", "极限", "智力启蒙玩具(确信"},
['marathon_n']= {"马拉松", "普通", "休闲模式"},
['marathon_h']= {"马拉松", "困难", "休闲模式"},
['solo_e']= {"单挑", "简单", "鲨AI"},

View File

@@ -681,9 +681,6 @@ return{
['dig_400l']= {"挖掘", "400L", "挖掘400行"},
['drought_n']= {"干旱", "100L", "你I没了"},
['drought_l']= {"干旱+", "100L", "后 妈 发 牌"},
['stack_e']= {"堆积", "简单", "搭积木"},
['stack_h']= {"堆积", "困难", "搭积木"},
['stack_u']= {"堆积", "极限", "搭积木"},
['marathon_n']= {"马拉松", "普通", "200行加速马拉松"},
['marathon_h']= {"马拉松", "困难", "200行高速马拉松"},
['solo_e']= {"单挑", "简单", "打败AI"},
@@ -933,7 +930,7 @@ return{
"请勿大力敲打设备敲坏了就没有Techmino玩了",
"请勿使用三只手游玩",
"去玩别的方块的时候记得没有Ospin",
"全球应该没人能全S评价(大爆炸不算)",
"全球目前应该没人能全X评价(大爆炸不算)",
"群友翻译的中文方块百科全书! tetris.huijiwiki.com",
"让他三尺又何妨",
"如何O-spin: 一秒转626圈(误",

View File

@@ -95,9 +95,6 @@ return{
['dig_400l']= {"挖掘", "400L", "挖掘400行"},
['drought_n']= {"干旱", "100行", "你I没了"},
['drought_l']= {"干旱+", "100行", "后 妈 发 牌"},
['stack_e']= {"堆积", "简单", "搭积木"},
['stack_h']= {"堆积", "困难", "搭积木"},
['stack_u']= {"堆积", "极限", "搭积木"},
['marathon_n']= {"马拉松", "普通", "200行加速马拉松"},
['marathon_h']= {"马拉松", "困难", "200行高速马拉松"},
['solo_e']= {"单挑", "简单", "打败机器人"},

View File

@@ -678,9 +678,6 @@ return{
['dig_400l']= {"挖掘", "400升", "挖400条垃圾线"},
['drought_n']= {"干旱", "100升", "没有工装"},
['drought_l']= {"干旱+", "100升", "搞什么呀"},
['stack_e']= {"堆栈", "容易", "打包!"},
['stack_h']= {"堆栈", "硬的", "打包!"},
['stack_u']= {"堆栈", "终极", "打包!"},
['marathon_n']= {"马拉松赛跑", "正常", "200线加速马拉松"},
['marathon_h']= {"马拉松赛跑", "硬的", "200线高速马拉松"},
['solo_e']= {"战争", "容易", "打败AI"},

View File

@@ -681,9 +681,6 @@ return{
['dig_400l']= {"挖掘", "400L", "挖掘400行"},
['drought_n']= {"乾旱", "100L", "你I沒了"},
['drought_l']= {"乾旱+", "100L", "後 媽 發 牌"},
['stack_e']= {"堆疊", "簡單", "搭積木"},
['stack_h']= {"堆疊", "困難", "搭積木"},
['stack_u']= {"堆疊", "極限", "搭積木"},
['marathon_n']= {"馬拉松", "普通", "200行加速馬拉松"},
['marathon_h']= {"馬拉松", "困難", "200行高速馬拉松"},
['solo_e']= {"單挑", "簡單", "打敗AI"},

View File

@@ -1,7 +1,7 @@
return{
{name='sprint_10l', x=0, y=0, size=40,shape=1,icon="sprint1", unlock={'sprint_20l','sprint_40l'}},
{name='sprint_20l', x=-200, y=200, size=50,shape=1,icon="sprint1"},
{name='sprint_40l', x=0, y=-300, size=40,shape=1,icon="sprint2", unlock={'dig_10l','sprint_100l','marathon_n','sprintPenta','sprintMPH','stack_e'}},
{name='sprint_40l', x=0, y=-300, size=40,shape=1,icon="sprint2", unlock={'dig_10l','sprint_100l','marathon_n','sprintPenta','sprintMPH'}},
{name='sprint_100l', x=-200, y=0, size=50,shape=1,icon="sprint2", unlock={'sprint_400l','drought_n'}},
{name='sprint_400l', x=-400, y=0, size=40,shape=1,icon="sprint3", unlock={'sprint_1000l'}},
{name='sprint_1000l', x=-600, y=0, size=40,shape=1,icon="sprint3"},
@@ -12,10 +12,6 @@ return{
{name='drought_n', x=-400, y=200, size=40,shape=1,icon="drought", unlock={'drought_l'}},
{name='drought_l', x=-600, y=200, size=40,shape=1,icon="drought"},
{name='stack_e', x=-200, y=-400, size=40,shape=1,icon="mess", unlock={'stack_h'}},
{name='stack_h', x=-400, y=-400, size=40,shape=1,icon="mess", unlock={'stack_u'}},
{name='stack_u', x=-600, y=-400, size=40,shape=1,icon="mess"},
{name='dig_10l', x=-200, y=-200, size=40,shape=1,icon="dig_sprint", unlock={'dig_40l'}},
{name='dig_40l', x=-400, y=-200, size=40,shape=1,icon="dig_sprint", unlock={'dig_100l'}},
{name='dig_100l', x=-600, y=-200, size=40,shape=1,icon="dig_sprint", unlock={'dig_400l'}},

View File

@@ -2,9 +2,9 @@ return{
env={
drop=10,lock=60,
freshLimit=15,
dropPiece={
require'parts.eventsets.backfire_60'.dropPiece,
require'parts.eventsets.checkAttack_100'.dropPiece,
hook_drop={
require'parts.eventsets.backfire_60'.hook_drop,
require'parts.eventsets.checkAttack_100'.hook_drop,
},
mesDisp=function(P)
setFont(60)

View File

@@ -2,9 +2,9 @@ return{
env={
drop=5,lock=45,
freshLimit=15,
dropPiece={
require'parts.eventsets.backfire_30'.dropPiece,
require'parts.eventsets.checkAttack_100'.dropPiece,
hook_drop={
require'parts.eventsets.backfire_30'.hook_drop,
require'parts.eventsets.checkAttack_100'.hook_drop,
},
mesDisp=function(P)
setFont(60)

View File

@@ -1,9 +1,9 @@
return{
env={
drop=30,lock=60,
dropPiece={
require'parts.eventsets.backfire_120'.dropPiece,
require'parts.eventsets.checkAttack_100'.dropPiece,
hook_drop={
require'parts.eventsets.backfire_120'.hook_drop,
require'parts.eventsets.checkAttack_100'.hook_drop,
},
mesDisp=function(P)
setFont(60)

View File

@@ -2,9 +2,9 @@ return{
env={
drop=2,lock=30,
freshLimit=10,
dropPiece={
require'parts.eventsets.backfire_0'.dropPiece,
require'parts.eventsets.checkAttack_100'.dropPiece,
hook_drop={
require'parts.eventsets.backfire_0'.hook_drop,
require'parts.eventsets.checkAttack_100'.hook_drop,
},
mesDisp=function(P)
setFont(60)

View File

@@ -2,7 +2,7 @@ return{
env={
drop=5,lock=30,
freshLimit=15,ospin=false,
dropPiece=require'parts.eventsets.c4wCheck_hard'.dropPiece,
hook_drop=require'parts.eventsets.c4wCheck_hard'.hook_drop,
eventSet='c4wBase',
bg='rgb',bgm='oxygen',
},

View File

@@ -2,7 +2,7 @@ return{
env={
drop=30,lock=60,infHold=true,
freshLimit=15,ospin=false,
dropPiece=require'parts.eventsets.c4wCheck_easy'.dropPiece,
hook_drop=require'parts.eventsets.c4wCheck_easy'.hook_drop,
eventSet='c4wBase',
bg='rgb',bgm='oxygen',
},

View File

@@ -5,9 +5,9 @@ return{
--Switch clear sprint mode on
if #FIELD[1]>0 then
GAME.modeEnv.dropPiece=require'parts.eventsets.checkClearBoard'.dropPiece
GAME.modeEnv.hook_drop=require'parts.eventsets.checkClearBoard'.hook_drop
else
GAME.modeEnv.dropPiece=NULL
GAME.modeEnv.hook_drop=NULL
end
PLY.newPlayer(1)
local AItype=GAME.modeEnv.opponent:sub(1,2)

View File

@@ -4,7 +4,7 @@ local ply_applyField=PLY.draw.applyField
return{
env={
fkey1=function(P)P.modeData.showMark=1-P.modeData.showMark end,
dropPiece=function(P)
hook_drop=function(P)
local D=P.modeData
local F=FIELD[D.finished+1]
for y=1,#F do

View File

@@ -30,7 +30,7 @@ return{
drop=1e99,lock=1e99,
infHold=true,
pushSpeed=1.2,
dropPiece=check_rise,
hook_drop=check_rise,
mesDisp=function(P)
setFont(45)
mStr(P.stat.dig,63,190)

View File

@@ -3,7 +3,7 @@ return{
drop=60,lock=180,
keyCancel={1,2,11,12,17,18,19,20},
eventSet='checkLine_40',
bg='aura',bgm='waterfall',
bg='aura',bgm='there',
},
getRank=function(P)
local L=P.stat.row

View File

@@ -3,7 +3,7 @@ return{
drop=60,lock=180,
keyCancel={3,4,5},
eventSet='checkLine_40',
bg='aura',bgm='waterfall',
bg='aura',bgm='there',
},
getRank=function(P)
local L=P.stat.row

View File

@@ -2,7 +2,7 @@ return{
env={
drop=60,lock=60,
eventSet='sprintSym',
bg='aura',bgm='waterfall',
bg='aura',bgm='there',
},
getRank=function(P)
if P.stat.row<40 then return end

View File

@@ -3,22 +3,8 @@ return{
drop=60,lock=60,
wait=0,fall=50,
garbageSpeed=30,
highCam=false,
seqData={1,2,3,4,5,6,7},
eventSet='stack_e',
bg='blockrain',bgm='there',
},
score=function(P)return{P.stat.row,P.stat.time}end,
scoreDisp=function(D)return D[1].." Lines".." "..STRING.time(D[2])end,
comp=function(a,b)return a[1]>b[1]or a[1]==b[1]and a[2]<b[2]end,
getRank=function(P)
local L=P.stat.row
return
L>=200 and 5 or
L>=175 and 4 or
L>=150 and 3 or
L>=120 and 2 or
L>=90 and 1 or
L>=30 and 0
end,
}

View File

@@ -1,24 +0,0 @@
return{
env={
drop=60,lock=60,
wait=0,fall=50,
highCam=false,
garbageSpeed=30,
seqData={1,2,3,4,5,6,7,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25},
eventSet='stack_h',
bg='blockrain',bgm='there',
},
score=function(P)return{P.stat.row,P.stat.time}end,
scoreDisp=function(D)return D[1].." Lines".." "..STRING.time(D[2])end,
comp=function(a,b)return a[1]>b[1]or a[1]==b[1]and a[2]<b[2]end,
getRank=function(P)
local L=P.stat.row
return
L>=80 and 5 or
L>=70 and 4 or
L>=60 and 3 or
L>=50 and 2 or
L>=35 and 1 or
L>=20 and 0
end,
}

View File

@@ -2,23 +2,9 @@ return{
env={
drop=60,lock=60,
wait=0,fall=50,
highCam=false,
garbageSpeed=30,
seqData={8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25},
eventSet='stack_u',
bg='blockrain',bgm='there',
},
score=function(P)return{P.stat.row,P.stat.time}end,
scoreDisp=function(D)return D[1].." Lines".." "..STRING.time(D[2])end,
comp=function(a,b)return a[1]>b[1]or a[1]==b[1]and a[2]<b[2]end,
getRank=function(P)
local L=P.stat.row
return
L>=60 and 5 or
L>=50 and 4 or
L>=45 and 3 or
L>=30 and 2 or
L>=20 and 1 or
L>=10 and 0
end,
}

View File

@@ -17,7 +17,7 @@ return{
drop=1e99,lock=60,
freshLimit=15,
fineKill=true,
dropPiece=tech_check_hard,
hook_drop=tech_check_hard,
bg='flink',bgm='infinite',
},
slowMark=true,

View File

@@ -15,7 +15,7 @@ return{
env={
drop=30,lock=60,
freshLimit=15,
dropPiece=tech_check_hard,
hook_drop=tech_check_hard,
eventSet='checkAttack_100',
bg='matrix',bgm='down',
},

View File

@@ -15,7 +15,7 @@ return{
env={
drop=0,lock=60,
freshLimit=15,
dropPiece=tech_check_hard,
hook_drop=tech_check_hard,
eventSet='checkAttack_100',
bg='matrix',bgm='warped',
},

View File

@@ -15,7 +15,7 @@ return{
env={
infHold=true,
drop=1e99,lock=1e99,
dropPiece=tech_check_hard,
hook_drop=tech_check_hard,
eventSet='checkAttack_100',
bg='matrix',bgm='new era',
},

View File

@@ -4,7 +4,7 @@ return{
freshLimit=15,
ospin=false,
eventSet='techrash_n',
bg='matrix',bgm='vapor',
bg='matrix',bgm='magicblock',
},
getRank=function(P)
local T=P.stat.clear[7][4]

View File

@@ -4,7 +4,7 @@ return{
freshLimit=15,
ospin=false,
eventSet='techrash_u',
bg='matrix',bgm='vapor',
bg='matrix',bgm='magicblock',
},
getRank=function(P)
local T=P.stat.clear[7][4]

View File

@@ -118,4 +118,7 @@ return{
{font=25,name="Trebor"},
{font=25,name="[w*o]"},
{font=25,name="蚂蚁"},
{font=25,name="小丘"},
{font=25,name="[*)]"},
{font=25,name="费尔特林"},
}

View File

@@ -16,7 +16,6 @@ local shader_alpha,shader_lighter=SHADER.alpha,SHADER.lighter
local shader_fieldSatur,shader_blockSatur=SHADER.fieldSatur,SHADER.blockSatur
local TEXTOBJ,ENUM_MISSION,BLOCK_COLORS=TEXTOBJ,ENUM_MISSION,BLOCK_COLORS
local PLAYERS,PLY_ALIVE=PLAYERS,PLY_ALIVE
local RCPB={10,33,200,33,105,5,105,60}
local attackColor={
@@ -694,22 +693,6 @@ function draw.drawProgress(s1,s2)
mStr(s2,62,376)
gc_rectangle('fill',15,375,90,4,2)
end
function draw.drawRoyaleInfo(P)
setFont(35)
mStr(#PLY_ALIVE.."/"..#PLAYERS,63,175)
mStr(P.modeData.ko,80,215)
gc_draw(TEXTOBJ.ko,60-TEXTOBJ.ko:getWidth(),222)
setFont(20)
gc_setColor(1,.5,0,.6)
gc_print(P.badge,103,227)
gc_setColor(.97,.97,.97)
setFont(25)
mStr(text.powerUp[P.strength],63,290)
gc_setColor(1,1,1)
for i=1,P.strength do
gc_draw(IMG.badgeIcon,16*i+6,260)
end
end
function draw.norm(P,repMode)
local ENV=P.gameEnv

View File

@@ -61,7 +61,8 @@ return{
noInitSZO=false,
mesDisp={},
dropPiece={},
hook_drop={},
hook_die={},
task={},
eventSet="X",

View File

@@ -303,7 +303,8 @@ local function _applyGameEnv(P)--Finish gameEnv processing
--Apply events
ENV.mesDisp=_mergeFuncTable(ENV.mesDisp,{})
ENV.dropPiece=_mergeFuncTable(ENV.dropPiece,{})
ENV.hook_drop=_mergeFuncTable(ENV.hook_drop,{})
ENV.hook_die=_mergeFuncTable(ENV.hook_die,{})
ENV.task=_mergeFuncTable(ENV.task,{})
--Apply eventSet
@@ -314,7 +315,8 @@ local function _applyGameEnv(P)--Finish gameEnv processing
for k,v in next,eventSet do
if
k=='mesDisp'or
k=='dropPiece'or
k=='hook_drop'or
k=='hook_die'or
k=='task'
then
_mergeFuncTable(v,ENV[k])

View File

@@ -313,10 +313,13 @@ function Player:setRS(RSname)
end
end
function Player:triggerDropEvents()
local L=self.gameEnv.dropPiece
for i=1,#L do
L[i](self)
function Player:_triggerEvent(eventName)
local L=self.gameEnv[eventName]
if L[1]then
for i=1,#L do
L[i](self)
end
return true
end
end
@@ -378,9 +381,22 @@ function Player:garbageRise(color,amount,line)--Release n-lines garbage to field
_=self.dropFX[i]
_[3],_[5]=_[3]+amount,_[5]+amount
end
if #self.field>self.gameEnv.heightLimit then
if
#self.field>self.gameEnv.heightLimit and(
not self:_triggerEvent('hook_die')or
#self.field>self.gameEnv.heightLimit
)
then
self:lock()
self:lose()
end
if #self.field>self.gameEnv.heightLimit then
self:_triggerEvent('hook_die')
if #self.field>self.gameEnv.heightLimit then
self:lose()
end
end
end
local invList={2,1,4,3,5,6,7}
@@ -724,7 +740,7 @@ function Player:removeTopClearingFX()
return true
end
end
function Player:checkMission(piece,mission)
function Player:_checkMission(piece,mission)
if mission<5 then
return piece.row==mission and not piece.spin
elseif mission<9 then
@@ -736,6 +752,17 @@ function Player:checkMission(piece,mission)
end
return false
end
function Player:_checkSuffocate()
if
self:ifoverlap(self.cur.bk,self.curX,self.curY)and(
not self:_triggerEvent('hook_die')or
self:ifoverlap(self.cur.bk,self.curX,self.curY)
)
then
self:lock()
self:lose()
end
end
local spawnSFX_name={'spawn_1','spawn_2','spawn_3','spawn_4','spawn_5','spawn_6','spawn_7'}
function Player:resetBlock()--Reset Block's position and execute I*S
@@ -905,10 +932,7 @@ function Player:hold_norm(ifpre)
self:freshBlock('move')
self.dropDelay=ENV.drop
self.lockDelay=ENV.lock
if self:ifoverlap(self.cur.bk,self.curX,self.curY)then
self:lock()
self:lose()
end
self:_checkSuffocate()
end
self.freshTime=int(min(self.freshTime+ENV.freshLimit*.25,ENV.freshLimit*((self.holdTime+1)/ENV.holdCount),ENV.freshLimit))
@@ -971,10 +995,7 @@ function Player:hold_swap(ifpre)
self:freshBlock('move')
self.dropDelay=ENV.drop
self.lockDelay=ENV.lock
if self:ifoverlap(self.cur.bk,self.curX,self.curY)then
self:lock()
self:lose()
end
self:_checkSuffocate()
end
self.freshTime=int(min(self.freshTime+ENV.freshLimit*.25,ENV.freshLimit*((self.holdTime+1)/ENV.holdCount),ENV.freshLimit))
@@ -1044,10 +1065,7 @@ function Player:popNext(ifhold)--Pop nextQueue to hand
self.freshTime=ENV.freshLimit
if self.cur then
if self:ifoverlap(self.cur.bk,self.curX,self.curY)then
self:lock()
self:lose()
end
self:_checkSuffocate()
self:freshBlock('newBlock')
end
@@ -1608,7 +1626,7 @@ do
--Check clearing task
if cc>0 and self.curMission then
if self:checkMission(piece,ENV.mission[self.curMission])then
if self:_checkMission(piece,ENV.mission[self.curMission])then
self.curMission=self.curMission+1
SFX.play('reach')
if self.curMission>#ENV.mission then
@@ -1670,13 +1688,13 @@ do
if finish=='lose'then
self:lose()
else
self:triggerDropEvents()
self:_triggerEvent('hook_drop')
if finish then
self:win(finish)
end
end
else
self:triggerDropEvents()
self:_triggerEvent('hook_drop')
end
end
@@ -2333,7 +2351,9 @@ function Player:revive()
SFX.play('emit')
end
function Player:win(result)
if self.result then return end
if self.result then
return
end
self:_die()
self.result='win'
if GAME.modeEnv.royaleMode then
@@ -2374,8 +2394,7 @@ function Player:lose(force)
if self.life>0 then
self:revive()
return
end
if self.type=='remote'then
elseif self.type=='remote'then
self.waiting=1e99
return
end

View File

@@ -22,17 +22,19 @@ return[=[
新增繁中语言,新语言设置菜单布局
新BGM:peak(暂未使用)
新BGM:1989(用于经典模式,by C₂₉H₂₅N₃O₅)
除节奏模式
除节奏模式(之后会有全新音游模式)
移除模式标题的颜色
改动:
移动音效改为触地音效,在方块因重力或旋转触地时也会播放
再调整场地晃动的阻力,看起来更舒服
重做全局颜色表(by C₂₉H₂₅N₃O₅)
重新安排一些模式的BGM
堆积模式移出地图,修改规则可以消超过20行
只在更新后触发自动转换以旧版本模式名存储的数据
再次更换字体
代码:
播放乐器采样更自然并允许超过音源范围
添加死亡事件触发器
修复:
堆积模式超级消除有时报错
词典导出词条保留了替换敏感词的特殊字符

View File

@@ -1,5 +1,5 @@
return{
["apkCode"]=397,
["apkCode"]=398,
["code"]=1605,
["string"]="V0.16.5",
["room"]="ver A-0",