界面美化/死亡动画/自定义序列编辑器
This commit is contained in:
@@ -39,7 +39,12 @@ local function dumpTable(L,t)
|
|||||||
else
|
else
|
||||||
k="["..k.."]="
|
k="["..k.."]="
|
||||||
end
|
end
|
||||||
elseif T=="string"then k=k.."="
|
elseif T=="string"then
|
||||||
|
if find(k,"[^0-9a-zA-Z_]")then
|
||||||
|
k="[\""..k.."\"]="
|
||||||
|
else
|
||||||
|
k=k.."="
|
||||||
|
end
|
||||||
elseif T=="boolean"then k="["..k.."]="
|
elseif T=="boolean"then k="["..k.."]="
|
||||||
else assert(false,"Error key type!")
|
else assert(false,"Error key type!")
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -146,21 +146,18 @@ function mouseDown.intro(x,y,k)
|
|||||||
VOC.play("bye")
|
VOC.play("bye")
|
||||||
SCN.back()
|
SCN.back()
|
||||||
else
|
else
|
||||||
SCN.push()
|
SCN.goto("main")
|
||||||
SCN.swapTo("main")
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
function touchDown.intro(id,x,y)
|
function touchDown.intro(id,x,y)
|
||||||
SCN.push()
|
SCN.goto("main")
|
||||||
SCN.swapTo("main")
|
|
||||||
end
|
end
|
||||||
function keyDown.intro(key)
|
function keyDown.intro(key)
|
||||||
if key=="escape"then
|
if key=="escape"then
|
||||||
VOC.play("bye")
|
VOC.play("bye")
|
||||||
SCN.back()
|
SCN.back()
|
||||||
else
|
else
|
||||||
SCN.push()
|
SCN.goto("main")
|
||||||
SCN.swapTo("main")
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
@@ -168,17 +165,15 @@ local function onMode(x,y)
|
|||||||
local cam=mapCam
|
local cam=mapCam
|
||||||
x=(cam.x1-640+x)/cam.k1
|
x=(cam.x1-640+x)/cam.k1
|
||||||
y=(cam.y1-360+y)/cam.k1
|
y=(cam.y1-360+y)/cam.k1
|
||||||
local MM,R=Modes,modeRanks
|
for name,M in next,Modes do
|
||||||
for _=1,#MM do
|
if modeRanks[name]then
|
||||||
if R[_]then
|
|
||||||
local M=MM[_]
|
|
||||||
local s=M.size
|
local s=M.size
|
||||||
if M.shape==1 then
|
if M.shape==1 then
|
||||||
if x>M.x-s and x<M.x+s and y>M.y-s and y<M.y+s then return _ end
|
if x>M.x-s and x<M.x+s and y>M.y-s and y<M.y+s then return name end
|
||||||
elseif M.shape==2 then
|
elseif M.shape==2 then
|
||||||
if abs(x-M.x)+abs(y-M.y)<s then return _ end
|
if abs(x-M.x)+abs(y-M.y)<s then return name end
|
||||||
elseif M.shape==3 then
|
elseif M.shape==3 then
|
||||||
if(x-M.x)^2+(y-M.y)^2<s^2 then return _ end
|
if(x-M.x)^2+(y-M.y)^2<s^2 then return name end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
@@ -208,20 +203,22 @@ end
|
|||||||
function mouseClick.mode(x,y,k)
|
function mouseClick.mode(x,y,k)
|
||||||
local cam=mapCam
|
local cam=mapCam
|
||||||
local _=cam.sel
|
local _=cam.sel
|
||||||
if not cam.sel or x<920 then
|
if not _ or x<920 then
|
||||||
local __=onMode(x,y)
|
local SEL=onMode(x,y)
|
||||||
if _~=__ then
|
if _~=SEL then
|
||||||
if __ then
|
if SEL then
|
||||||
SFX.play("click")
|
SFX.play("click")
|
||||||
cam.moving=true
|
cam.moving=true
|
||||||
_=Modes[__]
|
_=Modes[SEL]
|
||||||
cam.x=_.x*cam.k+180
|
cam.x=_.x*cam.k+180
|
||||||
cam.y=_.y*cam.k
|
cam.y=_.y*cam.k
|
||||||
cam.sel=__
|
cam.sel=SEL
|
||||||
else
|
else
|
||||||
cam.sel=nil
|
cam.sel=nil
|
||||||
cam.x=cam.x-180
|
cam.x=cam.x-180
|
||||||
end
|
end
|
||||||
|
elseif _ then
|
||||||
|
loadGame(_)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
cam.keyCtrl=false
|
cam.keyCtrl=false
|
||||||
@@ -259,11 +256,9 @@ function keyDown.mode(key)
|
|||||||
else
|
else
|
||||||
SCN.back()
|
SCN.back()
|
||||||
end
|
end
|
||||||
elseif mapCam.sel==71 or mapCam.sel==72 then
|
elseif mapCam.sel=="custom_clear" or mapCam.sel=="custom_puzzle" then
|
||||||
if key=="q"then
|
if key=="e"then
|
||||||
SCN.push()SCN.swapTo("draw")
|
SCN.goto("custom")
|
||||||
elseif key=="e"then
|
|
||||||
SCN.push()SCN.swapTo("custom")
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
@@ -333,6 +328,28 @@ function keyDown.custom(key)
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
function keyDown.sequence(key)
|
||||||
|
local s=sceneTemp
|
||||||
|
if key=="left"then
|
||||||
|
if s.cur>0 then s.cur=s.cur-1 end
|
||||||
|
elseif key=="right"then
|
||||||
|
if s.cur<#preBag then s.cur=s.cur+1 end
|
||||||
|
elseif key=="backspace"then
|
||||||
|
local C=s.cur
|
||||||
|
if C>0 then
|
||||||
|
rem(preBag,C)
|
||||||
|
s.cur=C-1
|
||||||
|
end
|
||||||
|
elseif key=="delete"then
|
||||||
|
if sceneTemp.sure>20 then
|
||||||
|
preBag={1,2,3,4,5,6,7}
|
||||||
|
sceneTemp.sure=0
|
||||||
|
else
|
||||||
|
sceneTemp.sure=50
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
function mouseDown.draw(x,y,k)
|
function mouseDown.draw(x,y,k)
|
||||||
mouseMove.draw(x,y)
|
mouseMove.draw(x,y)
|
||||||
end
|
end
|
||||||
@@ -417,13 +434,9 @@ function mouseDown.setting_sound(x,y,k)
|
|||||||
VOC.play((t<1.5 or t>15)and"doubt"or rnd()<.8 and"happy"or"egg")
|
VOC.play((t<1.5 or t>15)and"doubt"or rnd()<.8 and"happy"or"egg")
|
||||||
sceneTemp.last=Timer()
|
sceneTemp.last=Timer()
|
||||||
if rnd()<.0626 then
|
if rnd()<.0626 then
|
||||||
for i=1,#Modes do
|
for name,M in next,Modes do
|
||||||
local M=Modes[i]
|
if not modeRanks[name]then
|
||||||
for i=1,#M.unlock do
|
modeRanks[name]=M.score and 0 or 6
|
||||||
local m=M.unlock[i]
|
|
||||||
if not modeRanks[m]then
|
|
||||||
modeRanks[m]=Modes[m].score and 0 or 6
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
FILE.saveUnlock()
|
FILE.saveUnlock()
|
||||||
@@ -547,8 +560,7 @@ function keyDown.pause(key)
|
|||||||
elseif key=="escape"then
|
elseif key=="escape"then
|
||||||
resumeGame()
|
resumeGame()
|
||||||
elseif key=="s"then
|
elseif key=="s"then
|
||||||
SCN.push()
|
SCN.goto("setting_sound")
|
||||||
SCN.swapTo("setting_sound")
|
|
||||||
elseif key=="r"then
|
elseif key=="r"then
|
||||||
TASK.clear("play")
|
TASK.clear("play")
|
||||||
mergeStat(stat,players[1].stat)
|
mergeStat(stat,players[1].stat)
|
||||||
|
|||||||
@@ -2,7 +2,7 @@ local langList={
|
|||||||
{
|
{
|
||||||
anykey="按任意键继续",
|
anykey="按任意键继续",
|
||||||
newVersion="检测到更新!存档格式可能更新,设置已重置",
|
newVersion="检测到更新!存档格式可能更新,设置已重置",
|
||||||
marking="游戏作者:MrZ_26\n任何视频不得出现此水印",
|
marking="游戏作者:MrZ_26\n任何视频/直播不得出现此水印\n任何视频内声明无效",
|
||||||
lang="中文",
|
lang="中文",
|
||||||
atkModeName={"随机","徽章","击杀","反击"},
|
atkModeName={"随机","徽章","击杀","反击"},
|
||||||
royale_remain=function(n)return"剩余 "..n.." 名玩家"end,
|
royale_remain=function(n)return"剩余 "..n.." 名玩家"end,
|
||||||
@@ -49,12 +49,13 @@ local langList={
|
|||||||
fall=nil,
|
fall=nil,
|
||||||
next=nil,
|
next=nil,
|
||||||
hold={"开","关","无限"},
|
hold={"开","关","无限"},
|
||||||
sequence={"bag7","his4","随机"},
|
sequence={"bag","his4","随机","循环","固定"},
|
||||||
visible={"可见","半隐","全隐","瞬隐"},
|
visible={"可见","半隐","全隐","瞬隐"},
|
||||||
target={10,20,40,100,200,500,1000,"∞"},
|
target={10,20,40,100,200,500,1000,"∞"},
|
||||||
freshLimit={0,8,15,"∞"},
|
freshLimit={0,8,15,"∞"},
|
||||||
opponent={"无电脑","9S Lv1","9S Lv2","9S Lv3","9S Lv4","9S Lv5","CC Lv1","CC Lv2","CC Lv3","CC Lv4","CC Lv5","CC Lv6"},
|
opponent={"无电脑","9S Lv1","9S Lv2","9S Lv3","9S Lv4","9S Lv5","CC Lv1","CC Lv2","CC Lv3","CC Lv4","CC Lv5","CC Lv6"},
|
||||||
},
|
},
|
||||||
|
sequence="自定义序列",
|
||||||
softdropdas="软降DAS:",
|
softdropdas="软降DAS:",
|
||||||
softdroparr="软降ARR:",
|
softdroparr="软降ARR:",
|
||||||
snapLevelName={"无吸附","10px吸附","20px吸附","40px吸附","60px吸附","80px吸附"},
|
snapLevelName={"无吸附","10px吸附","20px吸附","40px吸附","60px吸附","80px吸附"},
|
||||||
@@ -188,8 +189,7 @@ local langList={
|
|||||||
quit="退出",
|
quit="退出",
|
||||||
},
|
},
|
||||||
mode={
|
mode={
|
||||||
draw="画图(Q)",
|
setting="参数(E)",
|
||||||
custom="参数(E)",
|
|
||||||
start="开始",
|
start="开始",
|
||||||
back="返回",
|
back="返回",
|
||||||
},
|
},
|
||||||
@@ -210,6 +210,18 @@ local langList={
|
|||||||
set3="无尽(3)",
|
set3="无尽(3)",
|
||||||
set4="隐形(4)",
|
set4="隐形(4)",
|
||||||
set5="极限(5)",
|
set5="极限(5)",
|
||||||
|
seq="高级设置",
|
||||||
|
draw="初始场地编辑",
|
||||||
|
back="返回",
|
||||||
|
},
|
||||||
|
sequence={
|
||||||
|
Z="Z",S="S",J="J",L="L",T="T",O="O",I="I",
|
||||||
|
Z5="Z5",S5="S5",P="P",Q="Q",F="F",E="E",T5="T5",U="U",
|
||||||
|
V="V",W="W",X="X",J5="J5",L5="L5",R="R",Y="Y",N="N",H="H",I5="I5",
|
||||||
|
left="←",
|
||||||
|
right="→",
|
||||||
|
backsp="<X",
|
||||||
|
reset="R",
|
||||||
back="返回",
|
back="返回",
|
||||||
},
|
},
|
||||||
draw={
|
draw={
|
||||||
@@ -219,6 +231,7 @@ local langList={
|
|||||||
demo="不显示×",
|
demo="不显示×",
|
||||||
copy="复制",
|
copy="复制",
|
||||||
paste="粘贴",
|
paste="粘贴",
|
||||||
|
custom="参数",
|
||||||
back="返回",
|
back="返回",
|
||||||
},
|
},
|
||||||
play={
|
play={
|
||||||
@@ -352,85 +365,85 @@ local langList={
|
|||||||
},
|
},
|
||||||
},
|
},
|
||||||
modes={
|
modes={
|
||||||
{"竞速", "10L", "消除10行"},
|
["sprint_10"]= {"竞速", "10L", "消除10行"},
|
||||||
{"竞速", "20L", "消除20行"},
|
["sprint_20"]= {"竞速", "20L", "消除20行"},
|
||||||
{"竞速", "40L", "消除40行"},
|
["sprint_40"]= {"竞速", "40L", "消除40行"},
|
||||||
{"竞速", "100L", "消除100行"},
|
["sprint_100"]= {"竞速", "100L", "消除100行"},
|
||||||
{"竞速", "400L", "消除400行"},
|
["sprint_400"]= {"竞速", "400L", "消除400行"},
|
||||||
{"竞速", "1000L", "消除1000行"},
|
["sprint_1000"]= {"竞速", "1000L", "消除1000行"},
|
||||||
{"干旱", "100L", "你I没了"},
|
["drought_normal"]= {"干旱", "100L", "你I没了"},
|
||||||
{"干旱", "100L", "后 妈 发 牌"},
|
["drought_lunatic"]= {"干旱", "100L", "后 妈 发 牌"},
|
||||||
{"马拉松", "普通", "200行加速马拉松"},
|
["marathon_normal"]= {"马拉松", "普通", "200行加速马拉松"},
|
||||||
{"马拉松", "困难", "200行高速马拉松"},
|
["marathon_hard"]= {"马拉松", "困难", "200行高速马拉松"},
|
||||||
{"单挑", "简单", "打败AI"},
|
["solo_1"]= {"单挑", "简单", "打败AI"},
|
||||||
{"单挑", "普通", "打败AI"},
|
["solo_2"]= {"单挑", "普通", "打败AI"},
|
||||||
{"单挑", "困难", "打败AI"},
|
["solo_3"]= {"单挑", "困难", "打败AI"},
|
||||||
{"单挑", "疯狂", "打败AI"},
|
["solo_4"]= {"单挑", "疯狂", "打败AI"},
|
||||||
{"单挑", "极限", "打败AI"},
|
["solo_5"]= {"单挑", "极限", "打败AI"},
|
||||||
{"49人混战", "简单", "49人混战,活到最后"},
|
["techmino49_easy"]= {"49人混战", "简单", "49人混战,活到最后"},
|
||||||
{"49人混战", "困难", "49人混战,活到最后"},
|
["techmino49_hard"]= {"49人混战", "困难", "49人混战,活到最后"},
|
||||||
{"49人混战", "极限", "49人混战,活到最后"},
|
["techmino49_ultimate"]={"49人混战", "极限", "49人混战,活到最后"},
|
||||||
{"99人混战", "简单", "99人混战,活到最后"},
|
["techmino99_easy"]= {"99人混战", "简单", "99人混战,活到最后"},
|
||||||
{"99人混战", "困难", "99人混战,活到最后"},
|
["techmino99_hard"]= {"99人混战", "困难", "99人混战,活到最后"},
|
||||||
{"99人混战", "极限", "99人混战,活到最后"},
|
["techmino99_ultimate"]={"99人混战", "极限", "99人混战,活到最后"},
|
||||||
{"回合制", "简单", "下棋模式"},
|
["round_1"]= {"回合制", "简单", "下棋模式"},
|
||||||
{"回合制", "普通", "下棋模式"},
|
["round_2"]= {"回合制", "普通", "下棋模式"},
|
||||||
{"回合制", "困难", "下棋模式"},
|
["round_3"]= {"回合制", "困难", "下棋模式"},
|
||||||
{"回合制", "疯狂", "下棋模式"},
|
["round_4"]= {"回合制", "疯狂", "下棋模式"},
|
||||||
{"回合制", "极限", "下棋模式"},
|
["round_5"]= {"回合制", "极限", "下棋模式"},
|
||||||
{"大师", "疯狂", "20G:初心者适用"},
|
["master_beginner"]= {"大师", "疯狂", "20G:初心者适用"},
|
||||||
{"大师", "极限", "20G:上级者的挑战"},
|
["master_adavnce"]= {"大师", "极限", "20G:上级者的挑战"},
|
||||||
{"大师", "终点", "究极20G:无法触及的终点"},
|
["master_final"]= {"大师", "终点", "究极20G:无法触及的终点"},
|
||||||
{"宗师", "GM", "成为方块大师"},
|
["GM"]= {"宗师", "GM", "成为方块大师"},
|
||||||
{"隐形", "半隐", "不强大脑"},
|
["blind_easy"]= {"隐形", "半隐", "不强大脑"},
|
||||||
{"隐形", "全隐", "挺强大脑"},
|
["blind_normal"]= {"隐形", "全隐", "挺强大脑"},
|
||||||
{"隐形", "瞬隐", "很强大脑"},
|
["blind_hard"]= {"隐形", "瞬隐", "很强大脑"},
|
||||||
{"隐形", "瞬隐+", "最强大脑"},
|
["blind_lunatic"]= {"隐形", "瞬隐+", "最强大脑"},
|
||||||
{"隐形", "", "你准备好了吗"},
|
["blind_ultimate"]= {"隐形", "", "你准备好了吗"},
|
||||||
{"高速经典", "CTWC", "高速经典"},
|
["classic_fast"]= {"高速经典", "CTWC", "高速经典"},
|
||||||
{"生存", "简单", "你能存活多久?"},
|
["survivor_easy"]= {"生存", "简单", "你能存活多久?"},
|
||||||
{"生存", "普通", "你能存活多久?"},
|
["survivor_normal"]= {"生存", "普通", "你能存活多久?"},
|
||||||
{"生存", "困难", "你能存活多久?"},
|
["survivor_hard"]= {"生存", "困难", "你能存活多久?"},
|
||||||
{"生存", "疯狂", "你能存活多久?"},
|
["survivor_lunatic"]= {"生存", "疯狂", "你能存活多久?"},
|
||||||
{"生存", "极限", "你能存活多久?"},
|
["survivor_ultimate"]= {"生存", "极限", "你能存活多久?"},
|
||||||
{"进攻", "困难", "进攻练习"},
|
["attacker_hard"]= {"进攻", "困难", "进攻练习"},
|
||||||
{"进攻", "极限", "进攻练习"},
|
["attacker_ultimate"]= {"进攻", "极限", "进攻练习"},
|
||||||
{"防守", "普通", "防守练习"},
|
["defender_normal"]= {"防守", "普通", "防守练习"},
|
||||||
{"防守", "疯狂", "防守练习"},
|
["defender_lunatic"]= {"防守", "疯狂", "防守练习"},
|
||||||
{"挖掘", "困难", "挖掘练习"},
|
["dig_hard"]= {"挖掘", "困难", "挖掘练习"},
|
||||||
{"挖掘", "极限", "挖掘练习"},
|
["dig_ultimate"]= {"挖掘", "极限", "挖掘练习"},
|
||||||
{"大爆炸", "简单", "All-spin 入门教程\n未制作完成,落块即通"},
|
["bigbang"]= {"大爆炸", "简单", "All-spin 入门教程\n未制作完成,落块即通"},
|
||||||
{"C4W练习", "普通", "无 限 连 击"},
|
["c4wtrain_normal"]= {"C4W练习", "普通", "无 限 连 击"},
|
||||||
{"C4W练习", "疯狂", "无 限 连 击"},
|
["c4wtrain_lunatic"]= {"C4W练习", "疯狂", "无 限 连 击"},
|
||||||
{"全清训练", "普通", "简易PC题库,熟悉全清定式的组合"},
|
["pctrain_normal"]= {"全清训练", "普通", "简易PC题库,熟悉全清定式的组合"},
|
||||||
{"全清训练", "疯狂", "简易PC题库,熟悉全清定式的组合"},
|
["pctrain_lunatic"]= {"全清训练", "疯狂", "简易PC题库,熟悉全清定式的组合"},
|
||||||
{"全清挑战", "普通", "100行内刷PC"},
|
["pcchallenge_normal"]= {"全清挑战", "普通", "100行内刷PC"},
|
||||||
{"全清挑战", "困难", "100行内刷PC"},
|
["pcchallenge_hard"]= {"全清挑战", "困难", "100行内刷PC"},
|
||||||
{"全清挑战", "疯狂", "100行内刷PC"},
|
["pcchallenge_lunatic"]={"全清挑战", "疯狂", "100行内刷PC"},
|
||||||
{"科研", "普通", "禁止断B2B"},
|
["tech_normal"]= {"科研", "普通", "禁止断B2B"},
|
||||||
{"科研", "普通+", "仅允许spin与PC"},
|
["tech_normal+"]= {"科研", "普通+", "仅允许spin与PC"},
|
||||||
{"科研", "困难", "禁止断B2B"},
|
["tech_hard"]= {"科研", "困难", "禁止断B2B"},
|
||||||
{"科研", "困难+", "仅允许spin与PC"},
|
["tech_hard+"]= {"科研", "困难+", "仅允许spin与PC"},
|
||||||
{"科研", "疯狂", "禁止断B2B"},
|
["tech_lunatic"]= {"科研", "疯狂", "禁止断B2B"},
|
||||||
{"科研", "疯狂+", "仅允许spin与PC"},
|
["tech_lunatic+"]= {"科研", "疯狂+", "仅允许spin与PC"},
|
||||||
{"科研", "极限", "强制最简操作"},
|
["tech_ultimate"]= {"科研", "极限", "强制最简操作"},
|
||||||
{"科研", "极限+", "禁止普通消除,强制最简操作"},
|
["tech_ultimate+"]= {"科研", "极限+", "禁止普通消除,强制最简操作"},
|
||||||
{"TSD挑战", "简单", "你能连续做几个TSD?"},
|
["tsd_easy"]= {"TSD挑战", "简单", "你能连续做几个TSD?"},
|
||||||
{"TSD挑战", "困难", "你能连续做几个TSD?"},
|
["tsd_hard"]= {"TSD挑战", "困难", "你能连续做几个TSD?"},
|
||||||
{"TSD挑战", "极限", "你能连续做几个TSD?"},
|
["tsd_ultimate"]= {"TSD挑战", "极限", "你能连续做几个TSD?"},
|
||||||
{"禅", "", "不限时200行"},
|
["zen"]= {"禅", "", "不限时200行"},
|
||||||
{"限时打分", "挑战", "在两分钟内尽可能拿到最多的分数"},
|
["ultra"]= {"限时打分", "挑战", "在两分钟内尽可能拿到最多的分数"},
|
||||||
{"无尽", "", "沙盒"},
|
["infinite"]= {"无尽", "", "沙盒"},
|
||||||
{"无尽:挖掘", "", "挖呀挖呀挖"},
|
["infinite_dig"]= {"无尽:挖掘", "", "挖呀挖呀挖"},
|
||||||
{"自定义", "普通", "画点什么然后把它消除!"},
|
["custom_clear"]= {"自定义", "普通", "画点什么然后把它消除!"},
|
||||||
{"自定义", "拼图", "画点什么然后把它拼出来吧!"},
|
["custom_puzzle"]= {"自定义", "拼图", "画点什么然后把它拼出来吧!"},
|
||||||
{"竞速", "五联块", "伤脑筋十八块"},
|
["sprintPenta"]= {"竞速", "五联块", "伤脑筋十八块"},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
anykey="按任意键继续",
|
anykey="按任意键继续",
|
||||||
newVersion="检测到更新!存档格式可能更新,设置已重置",
|
newVersion="检测到更新!存档格式可能更新,设置已重置",
|
||||||
marking="游戏作者:MrZ_26\n任何视频不得出现此水印",
|
marking="游戏作者:MrZ_26\n任何视频/直播不得出现此水印\n任何视频内声明无效",
|
||||||
lang="全中文",
|
lang="全中文",
|
||||||
atkModeName={"随机","徽章","击杀","反击"},
|
atkModeName={"随机","徽章","击杀","反击"},
|
||||||
royale_remain=function(n)return"剩余 "..n.." 名玩家"end,
|
royale_remain=function(n)return"剩余 "..n.." 名玩家"end,
|
||||||
@@ -477,12 +490,13 @@ local langList={
|
|||||||
fall=nil,
|
fall=nil,
|
||||||
next=nil,
|
next=nil,
|
||||||
hold={"开","关","无限"},
|
hold={"开","关","无限"},
|
||||||
sequence={"bag7","his4","随机"},
|
sequence={"bag","his4","随机","循环","固定"},
|
||||||
visible={"可见","半隐","全隐","瞬隐"},
|
visible={"可见","半隐","全隐","瞬隐"},
|
||||||
target={10,20,40,100,200,500,1000,"∞"},
|
target={10,20,40,100,200,500,1000,"∞"},
|
||||||
freshLimit={0,8,15,"∞"},
|
freshLimit={0,8,15,"∞"},
|
||||||
opponent={"无电脑","9S Lv1","9S Lv2","9S Lv3","9S Lv4","9S Lv5","CC Lv1","CC Lv2","CC Lv3","CC Lv4","CC Lv5","CC Lv6"},
|
opponent={"无电脑","9S Lv1","9S Lv2","9S Lv3","9S Lv4","9S Lv5","CC Lv1","CC Lv2","CC Lv3","CC Lv4","CC Lv5","CC Lv6"},
|
||||||
},
|
},
|
||||||
|
sequence="自定义序列",
|
||||||
snapLevelName={"无吸附","10像素吸附","20像素吸附","40像素吸附","60像素吸附","80像素吸附"},
|
snapLevelName={"无吸附","10像素吸附","20像素吸附","40像素吸附","60像素吸附","80像素吸附"},
|
||||||
setting_game="游戏设置",
|
setting_game="游戏设置",
|
||||||
setting_video="画面设置",
|
setting_video="画面设置",
|
||||||
@@ -613,8 +627,7 @@ local langList={
|
|||||||
quit="退出",
|
quit="退出",
|
||||||
},
|
},
|
||||||
mode={
|
mode={
|
||||||
draw="画图(Q)",
|
setting="参数(E)",
|
||||||
custom="参数(E)",
|
|
||||||
start="开始",
|
start="开始",
|
||||||
back="返回",
|
back="返回",
|
||||||
},
|
},
|
||||||
@@ -635,6 +648,18 @@ local langList={
|
|||||||
set3="无尽(3)",
|
set3="无尽(3)",
|
||||||
set4="隐形(4)",
|
set4="隐形(4)",
|
||||||
set5="极限(5)",
|
set5="极限(5)",
|
||||||
|
seq="高级设置",
|
||||||
|
draw="初始场地编辑",
|
||||||
|
back="返回",
|
||||||
|
},
|
||||||
|
sequence={
|
||||||
|
Z="Z",S="S",J="J",L="L",T="T",O="O",I="I",
|
||||||
|
Z5="Z5",S5="S5",P="P",Q="Q",F="F",E="E",T5="T5",U="U",
|
||||||
|
V="V",W="W",X="X",J5="J5",L5="L5",R="R",Y="Y",N="N",H="H",I5="I5",
|
||||||
|
left="←",
|
||||||
|
right="→",
|
||||||
|
backsp="<X",
|
||||||
|
reset="R",
|
||||||
back="返回",
|
back="返回",
|
||||||
},
|
},
|
||||||
draw={
|
draw={
|
||||||
@@ -644,6 +669,7 @@ local langList={
|
|||||||
demo="不显示×",
|
demo="不显示×",
|
||||||
copy="复制",
|
copy="复制",
|
||||||
paste="粘贴",
|
paste="粘贴",
|
||||||
|
custom="参数",
|
||||||
back="返回",
|
back="返回",
|
||||||
},
|
},
|
||||||
play={
|
play={
|
||||||
@@ -777,85 +803,85 @@ local langList={
|
|||||||
},
|
},
|
||||||
},
|
},
|
||||||
modes={
|
modes={
|
||||||
{"竞速", "10行", "消除10行"},
|
["sprint_10"]= {"竞速", "10行", "消除10行"},
|
||||||
{"竞速", "20行", "消除20行"},
|
["sprint_20"]= {"竞速", "20行", "消除20行"},
|
||||||
{"竞速", "40行", "消除40行"},
|
["sprint_40"]= {"竞速", "40行", "消除40行"},
|
||||||
{"竞速", "100行", "消除100行"},
|
["sprint_100"]= {"竞速", "100行", "消除100行"},
|
||||||
{"竞速", "400行", "消除400行"},
|
["sprint_400"]= {"竞速", "400行", "消除400行"},
|
||||||
{"竞速", "1000行", "消除1000行"},
|
["sprint_1000"]= {"竞速", "1000行", "消除1000行"},
|
||||||
{"干旱", "100行", "你I没了"},
|
["drought_normal"]= {"干旱", "100行", "你I没了"},
|
||||||
{"干旱", "100行", "后 妈 发 牌"},
|
["drought_lunatic"]= {"干旱", "100行", "后 妈 发 牌"},
|
||||||
{"马拉松", "普通", "200行加速马拉松"},
|
["marathon_normal"]= {"马拉松", "普通", "200行加速马拉松"},
|
||||||
{"马拉松", "困难", "200行高速马拉松"},
|
["marathon_hard"]= {"马拉松", "困难", "200行高速马拉松"},
|
||||||
{"单挑", "简单", "打败机器人"},
|
["solo_1"]= {"单挑", "简单", "打败机器人"},
|
||||||
{"单挑", "普通", "打败机器人"},
|
["solo_2"]= {"单挑", "普通", "打败机器人"},
|
||||||
{"单挑", "困难", "打败机器人"},
|
["solo_3"]= {"单挑", "困难", "打败机器人"},
|
||||||
{"单挑", "疯狂", "打败机器人"},
|
["solo_4"]= {"单挑", "疯狂", "打败机器人"},
|
||||||
{"单挑", "极限", "打败机器人"},
|
["solo_5"]= {"单挑", "极限", "打败机器人"},
|
||||||
{"49人混战", "简单", "49人混战,活到最后"},
|
["techmino49_easy"]= {"49人混战", "简单", "49人混战,活到最后"},
|
||||||
{"49人混战", "困难", "49人混战,活到最后"},
|
["techmino49_hard"]= {"49人混战", "困难", "49人混战,活到最后"},
|
||||||
{"49人混战", "极限", "49人混战,活到最后"},
|
["techmino49_ultimate"]={"49人混战", "极限", "49人混战,活到最后"},
|
||||||
{"99人混战", "简单", "99人混战,活到最后"},
|
["techmino99_easy"]= {"99人混战", "简单", "99人混战,活到最后"},
|
||||||
{"99人混战", "困难", "99人混战,活到最后"},
|
["techmino99_hard"]= {"99人混战", "困难", "99人混战,活到最后"},
|
||||||
{"99人混战", "极限", "99人混战,活到最后"},
|
["techmino99_ultimate"]={"99人混战", "极限", "99人混战,活到最后"},
|
||||||
{"回合制", "简单", "下棋模式"},
|
["round_1"]= {"回合制", "简单", "下棋模式"},
|
||||||
{"回合制", "普通", "下棋模式"},
|
["round_2"]= {"回合制", "普通", "下棋模式"},
|
||||||
{"回合制", "困难", "下棋模式"},
|
["round_3"]= {"回合制", "困难", "下棋模式"},
|
||||||
{"回合制", "疯狂", "下棋模式"},
|
["round_4"]= {"回合制", "疯狂", "下棋模式"},
|
||||||
{"回合制", "极限", "下棋模式"},
|
["round_5"]= {"回合制", "极限", "下棋模式"},
|
||||||
{"大师", "疯狂", "20G:初心者适用"},
|
["master_beginner"]= {"大师", "疯狂", "20G:初心者适用"},
|
||||||
{"大师", "极限", "20G:上级者的挑战"},
|
["master_adavnce"]= {"大师", "极限", "20G:上级者的挑战"},
|
||||||
{"大师", "终点", "究极20G:无法触及的终点"},
|
["master_final"]= {"大师", "终点", "究极20G:无法触及的终点"},
|
||||||
{"宗师", "GM", "成为方块大师"},
|
["GM"]= {"宗师", "GM", "成为方块大师"},
|
||||||
{"隐形", "半隐", "不强大脑"},
|
["blind_easy"]= {"隐形", "半隐", "不强大脑"},
|
||||||
{"隐形", "全隐", "挺强大脑"},
|
["blind_normal"]= {"隐形", "全隐", "挺强大脑"},
|
||||||
{"隐形", "瞬隐", "很强大脑"},
|
["blind_hard"]= {"隐形", "瞬隐", "很强大脑"},
|
||||||
{"隐形", "瞬隐+", "超强大脑"},
|
["blind_lunatic"]= {"隐形", "瞬隐+", "超强大脑"},
|
||||||
{"隐形", "", "你准备好了吗"},
|
["blind_ultimate"]= {"隐形", "", "你准备好了吗"},
|
||||||
{"高速经典", "CTWC", "高速经典"},
|
["classic_fast"]= {"高速经典", "CTWC", "高速经典"},
|
||||||
{"生存", "简单", "你能存活多久?"},
|
["survivor_easy"]= {"生存", "简单", "你能存活多久?"},
|
||||||
{"生存", "普通", "你能存活多久?"},
|
["survivor_normal"]= {"生存", "普通", "你能存活多久?"},
|
||||||
{"生存", "困难", "你能存活多久?"},
|
["survivor_hard"]= {"生存", "困难", "你能存活多久?"},
|
||||||
{"生存", "疯狂", "你能存活多久?"},
|
["survivor_lunatic"]= {"生存", "疯狂", "你能存活多久?"},
|
||||||
{"生存", "极限", "你能存活多久?"},
|
["survivor_ultimate"]= {"生存", "极限", "你能存活多久?"},
|
||||||
{"进攻", "困难", "进攻练习"},
|
["attacker_hard"]= {"进攻", "困难", "进攻练习"},
|
||||||
{"进攻", "极限", "进攻练习"},
|
["attacker_ultimate"]= {"进攻", "极限", "进攻练习"},
|
||||||
{"防守", "普通", "防守练习"},
|
["defender_normal"]= {"防守", "普通", "防守练习"},
|
||||||
{"防守", "疯狂", "防守练习"},
|
["defender_lunatic"]= {"防守", "疯狂", "防守练习"},
|
||||||
{"挖掘", "困难", "挖掘练习"},
|
["dig_hard"]= {"挖掘", "困难", "挖掘练习"},
|
||||||
{"挖掘", "极限", "挖掘练习"},
|
["dig_ultimate"]= {"挖掘", "极限", "挖掘练习"},
|
||||||
{"大爆炸", "简单", "All-spin 入门教程\n未制作完成,落块即通"},
|
["bigbang"]= {"大爆炸", "简单", "All-spin 入门教程\n未制作完成,落块即通"},
|
||||||
{"中四宽练习", "普通", "无 限 连 击"},
|
["c4wtrain_normal"]= {"中四宽练习", "普通", "无 限 连 击"},
|
||||||
{"中四宽练习", "疯狂", "无 限 连 击"},
|
["c4wtrain_lunatic"]= {"中四宽练习", "疯狂", "无 限 连 击"},
|
||||||
{"全清训练", "普通", "简易全清题库,熟悉全清定式的组合"},
|
["pctrain_normal"]= {"全清训练", "普通", "简易全清题库,熟悉全清定式的组合"},
|
||||||
{"全清训练", "疯狂", "简易全清题库,熟悉全清定式的组合"},
|
["pctrain_lunatic"]= {"全清训练", "疯狂", "简易全清题库,熟悉全清定式的组合"},
|
||||||
{"全清挑战", "普通", "100行内刷全清"},
|
["pcchallenge_normal"]= {"全清挑战", "普通", "100行内刷全清"},
|
||||||
{"全清挑战", "困难", "100行内刷全清"},
|
["pcchallenge_hard"]= {"全清挑战", "困难", "100行内刷全清"},
|
||||||
{"全清挑战", "疯狂", "100行内刷全清"},
|
["pcchallenge_lunatic"]={"全清挑战", "疯狂", "100行内刷全清"},
|
||||||
{"科研", "普通", "禁止断B2B"},
|
["tech_normal"]= {"科研", "普通", "禁止断B2B"},
|
||||||
{"科研", "普通+", "仅允许回旋与全清"},
|
["tech_normal+"]= {"科研", "普通+", "仅允许回旋与全清"},
|
||||||
{"科研", "困难", "禁止断B2B"},
|
["tech_hard"]= {"科研", "困难", "禁止断B2B"},
|
||||||
{"科研", "困难+", "仅允许回旋与全清"},
|
["tech_hard+"]= {"科研", "困难+", "仅允许回旋与全清"},
|
||||||
{"科研", "疯狂", "禁止断B2B"},
|
["tech_lunatic"]= {"科研", "疯狂", "禁止断B2B"},
|
||||||
{"科研", "疯狂+", "仅允许spin与PC"},
|
["tech_lunatic+"]= {"科研", "疯狂+", "仅允许spin与PC"},
|
||||||
{"科研", "极限", "强制最简操作"},
|
["tech_ultimate"]= {"科研", "极限", "强制最简操作"},
|
||||||
{"科研", "极限+", "禁止普通消除,强制最简操作"},
|
["tech_ultimate+"]= {"科研", "极限+", "禁止普通消除,强制最简操作"},
|
||||||
{"T2挑战", "简单", "你能连续做几个T旋双清?"},
|
["tsd_easy"]= {"T2挑战", "简单", "你能连续做几个T旋双清?"},
|
||||||
{"T2挑战", "困难", "你能连续做几个T旋双清?"},
|
["tsd_hard"]= {"T2挑战", "困难", "你能连续做几个T旋双清?"},
|
||||||
{"T2挑战", "极限", "你能连续做几个T旋双清?"},
|
["tsd_ultimate"]= {"T2挑战", "极限", "你能连续做几个T旋双清?"},
|
||||||
{"禅", "", "不限时200行"},
|
["zen"]= {"禅", "", "不限时200行"},
|
||||||
{"限时打分", "挑战", "在两分钟内尽可能拿到最多的分数"},
|
["ultra"]= {"限时打分", "挑战", "在两分钟内尽可能拿到最多的分数"},
|
||||||
{"无尽", "", "沙盒"},
|
["infinite"]= {"无尽", "", "沙盒"},
|
||||||
{"无尽:挖掘", "", "挖呀挖呀挖"},
|
["infinite_dig"]= {"无尽:挖掘", "", "挖呀挖呀挖"},
|
||||||
{"自定义", "普通", "画点什么然后把它消除!"},
|
["custom_clear"]= {"自定义", "普通", "画点什么然后把它消除!"},
|
||||||
{"自定义", "拼图", "画点什么然后把它拼出来吧!"},
|
["custom_puzzle"]= {"自定义", "拼图", "画点什么然后把它拼出来吧!"},
|
||||||
{"竞速", "五联块", "伤脑筋十八块"},
|
["sprintPenta"]= {"竞速", "五联块", "伤脑筋十八块"},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
anykey="Press any button",
|
anykey="Press any button",
|
||||||
newVersion="Updating detected! Save format may have been updated, settings reseted",
|
newVersion="Updating detected! Save format may have been updated, settings reseted",
|
||||||
marking="Author:MrZ_26\nIllegal recording if u see this",
|
marking="Author:MrZ_26\nIllegal recording if see this\nAny explanation 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,
|
||||||
@@ -902,12 +928,13 @@ local langList={
|
|||||||
fall=nil,
|
fall=nil,
|
||||||
next=nil,
|
next=nil,
|
||||||
hold={"On","Off","Inf"},
|
hold={"On","Off","Inf"},
|
||||||
sequence={"bag7","his4","random"},
|
sequence={"bag","his4","random","loop","fixed"},
|
||||||
visible={"normal","slow fade","fast fade","sudden fade"},
|
visible={"normal","slow fade","fast 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",
|
||||||
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",
|
||||||
@@ -1027,8 +1054,7 @@ local langList={
|
|||||||
quit="Exit",
|
quit="Exit",
|
||||||
},
|
},
|
||||||
mode={
|
mode={
|
||||||
draw="Draw (Q)",
|
setting="Settings (E)",
|
||||||
custom="Settings (E)",
|
|
||||||
start="Start",
|
start="Start",
|
||||||
back="Back",
|
back="Back",
|
||||||
},
|
},
|
||||||
@@ -1049,6 +1075,18 @@ local langList={
|
|||||||
set3="Inf. (3)",
|
set3="Inf. (3)",
|
||||||
set4="Blind (4)",
|
set4="Blind (4)",
|
||||||
set5="Master (5)",
|
set5="Master (5)",
|
||||||
|
seq="Advanced",
|
||||||
|
draw="Field Edit",
|
||||||
|
back="Back",
|
||||||
|
},
|
||||||
|
sequence={
|
||||||
|
Z="Z",S="S",J="J",L="L",T="T",O="O",I="I",
|
||||||
|
Z5="Z5",S5="S5",P="P",Q="Q",F="F",E="E",T5="T5",U="U",
|
||||||
|
V="V",W="W",X="X",J5="J5",L5="L5",R="R",Y="Y",N="N",H="H",I5="I5",
|
||||||
|
left="←",
|
||||||
|
right="→",
|
||||||
|
backsp="<X",
|
||||||
|
reset="R",
|
||||||
back="Back",
|
back="Back",
|
||||||
},
|
},
|
||||||
draw={
|
draw={
|
||||||
@@ -1058,6 +1096,7 @@ local langList={
|
|||||||
demo="Don't show ×",
|
demo="Don't show ×",
|
||||||
copy="Copy",
|
copy="Copy",
|
||||||
paste="Paste",
|
paste="Paste",
|
||||||
|
custom="Args",
|
||||||
back="Back",
|
back="Back",
|
||||||
},
|
},
|
||||||
play={
|
play={
|
||||||
@@ -1191,85 +1230,85 @@ local langList={
|
|||||||
},
|
},
|
||||||
},
|
},
|
||||||
modes={
|
modes={
|
||||||
{"Sprint", "10L", "Clear 10 lines!"},
|
["sprint_10"]= {"Sprint", "10L", "Clear 10 lines!"},
|
||||||
{"Sprint", "20L", "Clear 20 lines!"},
|
["sprint_20"]= {"Sprint", "20L", "Clear 20 lines!"},
|
||||||
{"Sprint", "40L", "Clear 40 lines!"},
|
["sprint_40"]= {"Sprint", "40L", "Clear 40 lines!"},
|
||||||
{"Sprint", "100L", "Clear 100 lines!"},
|
["sprint_100"]= {"Sprint", "100L", "Clear 100 lines!"},
|
||||||
{"Sprint", "400L", "Clear 400 lines!"},
|
["sprint_400"]= {"Sprint", "400L", "Clear 400 lines!"},
|
||||||
{"Sprint", "1000L", "Clear 1000 lines!"},
|
["sprint_1000"]= {"Sprint", "1000L", "Clear 1000 lines!"},
|
||||||
{"Drought", "100L", "No I piece!"},
|
["drought_normal"]= {"Drought", "100L", "No I piece!"},
|
||||||
{"Drought", "100L", "WTF"},
|
["drought_lunatic"]= {"Drought", "100L", "WTF"},
|
||||||
{"Marathon", "NORMAL", "200-line marathon with accelerating speed."},
|
["marathon_normal"]= {"Marathon", "NORMAL", "200-line marathon with accelerating speed."},
|
||||||
{"Marathon", "HARD", "200-line high-speed marathon."},
|
["marathon_hard"]= {"Marathon", "HARD", "200-line high-speed marathon."},
|
||||||
{"Battle", "EASY", "Defeat the AI!"},
|
["solo_1"]= {"Battle", "EASY", "Defeat the AI!"},
|
||||||
{"Battle", "NORMAL", "Defeat the AI!"},
|
["solo_2"]= {"Battle", "NORMAL", "Defeat the AI!"},
|
||||||
{"Battle", "HARD", "Defeat the AI!"},
|
["solo_3"]= {"Battle", "HARD", "Defeat the AI!"},
|
||||||
{"Battle", "LUNATIC", "Defeat the AI!"},
|
["solo_4"]= {"Battle", "LUNATIC", "Defeat the AI!"},
|
||||||
{"Battle", "ULTIMATE", "Defeat the AI!"},
|
["solo_5"]= {"Battle", "ULTIMATE", "Defeat the AI!"},
|
||||||
{"Tech 49", "EASY", "49-player battle.\nThe last one standing wins."},
|
["techmino49_easy"]= {"Tech 49", "EASY", "49-player battle.\nThe last one standing wins."},
|
||||||
{"Tech 49", "HARD", "49-player battle.\nThe last one standing wins."},
|
["techmino49_hard"]= {"Tech 49", "HARD", "49-player battle.\nThe last one standing wins."},
|
||||||
{"Tech 49", "ULTIMATE", "49-player battle.\nThe last one standing wins."},
|
["techmino49_ultimate"]={"Tech 49", "ULTIMATE", "49-player battle.\nThe last one standing wins."},
|
||||||
{"Tech 99", "EASY", "99-player battle.\nThe last one standing wins."},
|
["techmino99_easy"]= {"Tech 99", "EASY", "99-player battle.\nThe last one standing wins."},
|
||||||
{"Tech 99", "HARD", "99-player battle.\nThe last one standing wins."},
|
["techmino99_hard"]= {"Tech 99", "HARD", "99-player battle.\nThe last one standing wins."},
|
||||||
{"Tech 99", "ULTIMATE", "99-player battle.\nThe last one standing wins."},
|
["techmino99_ultimate"]={"Tech 99", "ULTIMATE", "99-player battle.\nThe last one standing wins."},
|
||||||
{"Turn-Based", "EASY", "Chess mode"},
|
["round_1"]= {"Turn-Based", "EASY", "Chess mode"},
|
||||||
{"Turn-Based", "NORMAL", "Chess mode"},
|
["round_2"]= {"Turn-Based", "NORMAL", "Chess mode"},
|
||||||
{"Turn-Based", "HARD", "Chess mode"},
|
["round_3"]= {"Turn-Based", "HARD", "Chess mode"},
|
||||||
{"Turn-Based", "LUNATIC", "Chess mode"},
|
["round_4"]= {"Turn-Based", "LUNATIC", "Chess mode"},
|
||||||
{"Turn-Based", "ULTIMATE", "Chess mode"},
|
["round_5"]= {"Turn-Based", "ULTIMATE", "Chess mode"},
|
||||||
{"Master", "LUNATIC", "20G: For beginners."},
|
["master_beginner"]= {"Master", "LUNATIC", "20G: For beginners."},
|
||||||
{"Master", "ULTIMATE", "20G: Professional challenge!"},
|
["master_adavnce"]= {"Master", "ULTIMATE", "20G: Professional challenge!"},
|
||||||
{"Master", "FINAL", "20G: Unreachable end point!"},
|
["master_final"]= {"Master", "FINAL", "20G: Unreachable end point!"},
|
||||||
{"GrandMaster", "GM", "To be Grand Master"},
|
["GM"]= {"GrandMaster", "GM", "To be Grand Master"},
|
||||||
{"Blind", "HALF", "For novice players."},
|
["blind_easy"]= {"Blind", "HALF", "For novice players."},
|
||||||
{"Blind", "ALL", "For intermediate players."},
|
["blind_normal"]= {"Blind", "ALL", "For intermediate players."},
|
||||||
{"Blind", "SUDDEN", "For experienced players."},
|
["blind_hard"]= {"Blind", "SUDDEN", "For experienced players."},
|
||||||
{"Blind", "SUDDEN+", "For professionals."},
|
["blind_lunatic"]= {"Blind", "SUDDEN+", "For professionals."},
|
||||||
{"Blind", "", "R U Ready?"},
|
["blind_ultimate"]= {"Blind", "", "R U Ready?"},
|
||||||
{"Classic", "CTWC", "High-speed classic mode."},
|
["classic_fast"]= {"Classic", "CTWC", "High-speed classic mode."},
|
||||||
{"Survivor", "EASY", "How long can you survive?"},
|
["survivor_easy"]= {"Survivor", "EASY", "How long can you survive?"},
|
||||||
{"Survivor", "NORMAL", "How long can you survive?"},
|
["survivor_normal"]= {"Survivor", "NORMAL", "How long can you survive?"},
|
||||||
{"Survivor", "HARD", "How long can you survive?"},
|
["survivor_hard"]= {"Survivor", "HARD", "How long can you survive?"},
|
||||||
{"Survivor", "LUNATIC", "How long can you survive?"},
|
["survivor_lunatic"]= {"Survivor", "LUNATIC", "How long can you survive?"},
|
||||||
{"Survivor", "ULTIMATE", "How long can you survive?"},
|
["survivor_ultimate"]= {"Survivor", "ULTIMATE", "How long can you survive?"},
|
||||||
{"Attacker", "HARD", "Offensive practice!"},
|
["attacker_hard"]= {"Attacker", "HARD", "Offensive practice!"},
|
||||||
{"Attacker", "ULTIMATE", "Offensive practice!"},
|
["attacker_ultimate"]= {"Attacker", "ULTIMATE", "Offensive practice!"},
|
||||||
{"Defender", "NORMAL", "Defensive practice!"},
|
["defender_normal"]= {"Defender", "NORMAL", "Defensive practice!"},
|
||||||
{"Defender", "LUNATIC", "Defensive practice!"},
|
["defender_lunatic"]= {"Defender", "LUNATIC", "Defensive practice!"},
|
||||||
{"Driller", "HARD", "Digging practice!"},
|
["dig_hard"]= {"Driller", "HARD", "Digging practice!"},
|
||||||
{"Driller", "ULTIMATE", "Digging practice!"},
|
["dig_ultimate"]= {"Driller", "ULTIMATE", "Digging practice!"},
|
||||||
{"Big Bang", "EASY", "All-spin tutorial!\n[Under construction]"},
|
["bigbang"]= {"Big Bang", "EASY", "All-spin tutorial!\n[Under construction]"},
|
||||||
{"C4W Training", "NORMAL", "Infinite combos."},
|
["c4wtrain_normal"]= {"C4W Training", "NORMAL", "Infinite combos."},
|
||||||
{"C4W Training", "LUNATIC", "Infinite combos."},
|
["c4wtrain_lunatic"]= {"C4W Training", "LUNATIC", "Infinite combos."},
|
||||||
{"PC Training", "NORMAL", "Simple Perfect Clear mode."},
|
["pctrain_normal"]= {"PC Training", "NORMAL", "Simple Perfect Clear mode."},
|
||||||
{"PC Training", "LUNATIC", "Simple Perfect Clear mode."},
|
["pctrain_lunatic"]= {"PC Training", "LUNATIC", "Simple Perfect Clear mode."},
|
||||||
{"PC Challenge", "NORMAL", "Get PCs within 100 lines!"},
|
["pcchallenge_normal"]= {"PC Challenge", "NORMAL", "Get PCs within 100 lines!"},
|
||||||
{"PC Challenge", "HARD", "Get PCs within 100 lines!"},
|
["pcchallenge_hard"]= {"PC Challenge", "HARD", "Get PCs within 100 lines!"},
|
||||||
{"PC Challenge", "LUNATIC", "Get PCs within 100 lines!"},
|
["pcchallenge_lunatic"]={"PC Challenge", "LUNATIC", "Get PCs within 100 lines!"},
|
||||||
{"Tech", "NORMAL", "Keep the B2B chain!"},
|
["tech_normal"]= {"Tech", "NORMAL", "Keep the B2B chain!"},
|
||||||
{"Tech", "NORMAL+", "Spin & PC only"},
|
["tech_normal+"]= {"Tech", "NORMAL+", "Spin & PC only"},
|
||||||
{"Tech", "HARD", "Keep the B2B chain!"},
|
["tech_hard"]= {"Tech", "HARD", "Keep the B2B chain!"},
|
||||||
{"Tech", "HARD+", "Spin & PC only"},
|
["tech_hard+"]= {"Tech", "HARD+", "Spin & PC only"},
|
||||||
{"Tech", "LUNATIC", "Keep the B2B chain!"},
|
["tech_lunatic"]= {"Tech", "LUNATIC", "Keep the B2B chain!"},
|
||||||
{"Tech", "LUNATIC+", "Spin & PC only"},
|
["tech_lunatic+"]= {"Tech", "LUNATIC+", "Spin & PC only"},
|
||||||
{"Tech", "ULTIMATE", "No finesse faults!"},
|
["tech_ultimate"]= {"Tech", "ULTIMATE", "No finesse faults!"},
|
||||||
{"Tech", "ULTIMATE+", "No normal clears, no finesse faults!"},
|
["tech_ultimate+"]= {"Tech", "ULTIMATE+", "No normal clears, no finesse faults!"},
|
||||||
{"TSD Challenge", "EASY", "T-spin-doubles only!"},
|
["tsd_easy"]= {"TSD Challenge", "EASY", "T-spin-doubles only!"},
|
||||||
{"TSD Challenge", "HARD", "T-spin-doubles only!"},
|
["tsd_hard"]= {"TSD Challenge", "HARD", "T-spin-doubles only!"},
|
||||||
{"TSD Challenge", "ULTIMATE", "T-spin-doubles only!"},
|
["tsd_ultimate"]= {"TSD Challenge", "ULTIMATE", "T-spin-doubles only!"},
|
||||||
{"Zen", "", "200 lines without a time limit."},
|
["zen"]= {"Zen", "", "200 lines without a time limit."},
|
||||||
{"Ultra", "EXTRA", "Get the highest score within 2 min."},
|
["ultra"]= {"Ultra", "EXTRA", "Get the highest score within 2 min."},
|
||||||
{"Infinite", "", "Sandbox mode."},
|
["infinite"]= {"Infinite", "", "Sandbox mode."},
|
||||||
{"Infinite: Dig", "", "Dig, dig, dig."},
|
["infinite_dig"]= {"Infinite: Dig", "", "Dig, dig, dig."},
|
||||||
{"Custom", "NORMAL", "Draw something then clear it!!"},
|
["custom_clear"]= {"Custom", "NORMAL", "Draw something then clear it!!"},
|
||||||
{"Custom", "PUZZLE", "Draw something then stack it!!"},
|
["custom_puzzle"]= {"Custom", "PUZZLE", "Draw something then stack it!!"},
|
||||||
{"Sprint", "Pentomino", "Puzzle-18"},
|
["sprintPenta"]= {"Sprint", "Pentomino", "Puzzle-18"},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
anykey="↓□↓",
|
anykey="↓□↓",
|
||||||
newVersion="&!!! ___/_?_ R",
|
newVersion="&!!! ___/_?_ R",
|
||||||
marking="Author:MrZ_26\nIllegal recording if u see this",
|
marking="Author:MrZ_26\nIllegal recording if see this\nAny explanation invalid",
|
||||||
lang="?????",
|
lang="?????",
|
||||||
atkModeName={"?","( )","!","←→"},
|
atkModeName={"?","( )","!","←→"},
|
||||||
royale_remain=function(n)return n.."~"end,
|
royale_remain=function(n)return n.."~"end,
|
||||||
@@ -1316,12 +1355,13 @@ local langList={
|
|||||||
fall=nil,
|
fall=nil,
|
||||||
next=nil,
|
next=nil,
|
||||||
hold={"+","-","~"},
|
hold={"+","-","~"},
|
||||||
sequence={"(xxx)","[...]","???"},
|
sequence={"(xxx)","[....]","???","{abc}+","==="},
|
||||||
visible={"=","-","_","."},
|
visible={"=","-","_","."},
|
||||||
target={10,20,40,100,200,500,1000,"x"},
|
target={10,20,40,100,200,500,1000,"x"},
|
||||||
freshLimit={0,8,15,"~"},
|
freshLimit={0,8,15,"~"},
|
||||||
opponent={"x","9S Lv1","9S Lv2","9S Lv3","9S Lv4","9S Lv5","CC Lv1","CC Lv2","CC Lv3","CC Lv4","CC Lv5","CC Lv6"},
|
opponent={"x","9S Lv1","9S Lv2","9S Lv3","9S Lv4","9S Lv5","CC Lv1","CC Lv2","CC Lv3","CC Lv4","CC Lv5","CC Lv6"},
|
||||||
},
|
},
|
||||||
|
sequence="!@#$%^&*",
|
||||||
snapLevelName={"~","10","20","40","60","80"},
|
snapLevelName={"~","10","20","40","60","80"},
|
||||||
setting_game="%~~%",
|
setting_game="%~~%",
|
||||||
setting_video="{~~}",
|
setting_video="{~~}",
|
||||||
@@ -1441,8 +1481,7 @@ local langList={
|
|||||||
quit="X",
|
quit="X",
|
||||||
},
|
},
|
||||||
mode={
|
mode={
|
||||||
draw="ABC (Q)",
|
setting="_?_ (E)",
|
||||||
custom="_?_ (E)",
|
|
||||||
start="!!!",
|
start="!!!",
|
||||||
back="X",
|
back="X",
|
||||||
},
|
},
|
||||||
@@ -1463,6 +1502,18 @@ local langList={
|
|||||||
set3="Inf. (3)",
|
set3="Inf. (3)",
|
||||||
set4="Blind (4)",
|
set4="Blind (4)",
|
||||||
set5="Master (5)",
|
set5="Master (5)",
|
||||||
|
seq="Advanced",
|
||||||
|
draw="Field Edit",
|
||||||
|
back="X",
|
||||||
|
},
|
||||||
|
sequence={
|
||||||
|
Z="Z",S="S",J="J",L="L",T="T",O="O",I="I",
|
||||||
|
Z5="Z5",S5="S5",P="P",Q="Q",F="F",E="E",T5="T5",U="U",
|
||||||
|
V="V",W="W",X="X",J5="J5",L5="L5",R="R",Y="Y",N="N",H="H",I5="I5",
|
||||||
|
left="←",
|
||||||
|
right="→",
|
||||||
|
backsp="<X",
|
||||||
|
reset="R",
|
||||||
back="X",
|
back="X",
|
||||||
},
|
},
|
||||||
draw={
|
draw={
|
||||||
@@ -1472,6 +1523,7 @@ local langList={
|
|||||||
demo="X ×",
|
demo="X ×",
|
||||||
copy="→__",
|
copy="→__",
|
||||||
paste="__→",
|
paste="__→",
|
||||||
|
custom="_?_",
|
||||||
back="X",
|
back="X",
|
||||||
},
|
},
|
||||||
play={
|
play={
|
||||||
@@ -1605,79 +1657,79 @@ local langList={
|
|||||||
},
|
},
|
||||||
},
|
},
|
||||||
modes={
|
modes={
|
||||||
{"Sprint", "10L", "Clear 10 lines!"},
|
["sprint_10"]= {"Sprint", "10L", "Clear 10 lines!"},
|
||||||
{"Sprint", "20L", "Clear 20 lines!"},
|
["sprint_20"]= {"Sprint", "20L", "Clear 20 lines!"},
|
||||||
{"Sprint", "40L", "Clear 40 lines!"},
|
["sprint_40"]= {"Sprint", "40L", "Clear 40 lines!"},
|
||||||
{"Sprint", "100L", "Clear 100 lines!"},
|
["sprint_100"]= {"Sprint", "100L", "Clear 100 lines!"},
|
||||||
{"Sprint", "400L", "Clear 400 lines!"},
|
["sprint_400"]= {"Sprint", "400L", "Clear 400 lines!"},
|
||||||
{"Sprint", "1000L", "Clear 1000 lines!"},
|
["sprint_1000"]= {"Sprint", "1000L", "Clear 1000 lines!"},
|
||||||
{"Drought", "100L", "No I piece!"},
|
["drought_normal"]= {"Drought", "100L", "No I piece!"},
|
||||||
{"Drought", "100L", "WTF"},
|
["drought_lunatic"]= {"Drought", "100L", "WTF"},
|
||||||
{"Marathon", "NORMAL", "200-line marathon with accelerating speed."},
|
["marathon_normal"]= {"Marathon", "NORMAL", "200-line marathon with accelerating speed."},
|
||||||
{"Marathon", "HARD", "200-line high-speed marathon."},
|
["marathon_hard"]= {"Marathon", "HARD", "200-line high-speed marathon."},
|
||||||
{"Battle", "EASY", "Defeat the AI!"},
|
["solo_1"]= {"Battle", "EASY", "Defeat the AI!"},
|
||||||
{"Battle", "NORMAL", "Defeat the AI!"},
|
["solo_2"]= {"Battle", "NORMAL", "Defeat the AI!"},
|
||||||
{"Battle", "HARD", "Defeat the AI!"},
|
["solo_3"]= {"Battle", "HARD", "Defeat the AI!"},
|
||||||
{"Battle", "LUNATIC", "Defeat the AI!"},
|
["solo_4"]= {"Battle", "LUNATIC", "Defeat the AI!"},
|
||||||
{"Battle", "ULTIMATE", "Defeat the AI!"},
|
["solo_5"]= {"Battle", "ULTIMATE", "Defeat the AI!"},
|
||||||
{"Tech 49", "EASY", "49-player battle.\nThe last one standing wins."},
|
["techmino49_easy"]= {"Tech 49", "EASY", "49-player battle.\nThe last one standing wins."},
|
||||||
{"Tech 49", "HARD", "49-player battle.\nThe last one standing wins."},
|
["techmino49_hard"]= {"Tech 49", "HARD", "49-player battle.\nThe last one standing wins."},
|
||||||
{"Tech 49", "ULTIMATE", "49-player battle.\nThe last one standing wins."},
|
["techmino49_ultimate"]={"Tech 49", "ULTIMATE", "49-player battle.\nThe last one standing wins."},
|
||||||
{"Tech 99", "EASY", "99-player battle.\nThe last one standing wins."},
|
["techmino99_easy"]= {"Tech 99", "EASY", "99-player battle.\nThe last one standing wins."},
|
||||||
{"Tech 99", "HARD", "99-player battle.\nThe last one standing wins."},
|
["techmino99_hard"]= {"Tech 99", "HARD", "99-player battle.\nThe last one standing wins."},
|
||||||
{"Tech 99", "ULTIMATE", "99-player battle.\nThe last one standing wins."},
|
["techmino99_ultimate"]={"Tech 99", "ULTIMATE", "99-player battle.\nThe last one standing wins."},
|
||||||
{"Turn-Based", "EASY", "Chess mode"},
|
["round_1"]= {"Turn-Based", "EASY", "Chess mode"},
|
||||||
{"Turn-Based", "NORMAL", "Chess mode"},
|
["round_2"]= {"Turn-Based", "NORMAL", "Chess mode"},
|
||||||
{"Turn-Based", "HARD", "Chess mode"},
|
["round_3"]= {"Turn-Based", "HARD", "Chess mode"},
|
||||||
{"Turn-Based", "LUNATIC", "Chess mode"},
|
["round_4"]= {"Turn-Based", "LUNATIC", "Chess mode"},
|
||||||
{"Turn-Based", "ULTIMATE", "Chess mode"},
|
["round_5"]= {"Turn-Based", "ULTIMATE", "Chess mode"},
|
||||||
{"Master", "LUNATIC", "20G: For beginners."},
|
["master_beginner"]= {"Master", "LUNATIC", "20G: For beginners."},
|
||||||
{"Master", "ULTIMATE", "20G: Professional challenge!"},
|
["master_adavnce"]= {"Master", "ULTIMATE", "20G: Professional challenge!"},
|
||||||
{"Master", "FINAL", "20G: Unreachable end point!"},
|
["master_final"]= {"Master", "FINAL", "20G: Unreachable end point!"},
|
||||||
{"GrandMaster", "GM", "To be Grand Master"},
|
["GM"]= {"GrandMaster", "GM", "To be Grand Master"},
|
||||||
{"Blind", "HALF", "For novice players."},
|
["blind_easy"]= {"Blind", "HALF", "For novice players."},
|
||||||
{"Blind", "ALL", "For intermediate players."},
|
["blind_normal"]= {"Blind", "ALL", "For intermediate players."},
|
||||||
{"Blind", "SUDDEN", "For experienced players."},
|
["blind_hard"]= {"Blind", "SUDDEN", "For experienced players."},
|
||||||
{"Blind", "SUDDEN+", "For professionals."},
|
["blind_lunatic"]= {"Blind", "SUDDEN+", "For professionals."},
|
||||||
{"Blind", "", "R U Ready?"},
|
["blind_ultimate"]= {"Blind", "", "R U Ready?"},
|
||||||
{"Classic", "CTWC", "High-speed classic mode."},
|
["classic_fast"]= {"Classic", "CTWC", "High-speed classic mode."},
|
||||||
{"Survivor", "EASY", "How long can you survive?"},
|
["survivor_easy"]= {"Survivor", "EASY", "How long can you survive?"},
|
||||||
{"Survivor", "NORMAL", "How long can you survive?"},
|
["survivor_normal"]= {"Survivor", "NORMAL", "How long can you survive?"},
|
||||||
{"Survivor", "HARD", "How long can you survive?"},
|
["survivor_hard"]= {"Survivor", "HARD", "How long can you survive?"},
|
||||||
{"Survivor", "LUNATIC", "How long can you survive?"},
|
["survivor_lunatic"]= {"Survivor", "LUNATIC", "How long can you survive?"},
|
||||||
{"Survivor", "ULTIMATE", "How long can you survive?"},
|
["survivor_ultimate"]= {"Survivor", "ULTIMATE", "How long can you survive?"},
|
||||||
{"Attacker", "HARD", "Offensive practice!"},
|
["attacker_hard"]= {"Attacker", "HARD", "Offensive practice!"},
|
||||||
{"Attacker", "ULTIMATE", "Offensive practice!"},
|
["attacker_ultimate"]= {"Attacker", "ULTIMATE", "Offensive practice!"},
|
||||||
{"Defender", "NORMAL", "Defensive practice!"},
|
["defender_normal"]= {"Defender", "NORMAL", "Defensive practice!"},
|
||||||
{"Defender", "LUNATIC", "Defensive practice!"},
|
["defender_lunatic"]= {"Defender", "LUNATIC", "Defensive practice!"},
|
||||||
{"Driller", "HARD", "Digging practice!"},
|
["dig_hard"]= {"Driller", "HARD", "Digging practice!"},
|
||||||
{"Driller", "ULTIMATE", "Digging practice!"},
|
["dig_ultimate"]= {"Driller", "ULTIMATE", "Digging practice!"},
|
||||||
{"Big Bang", "EASY", "All-spin tutorial!\n[Under construction]"},
|
["bigbang"]= {"Big Bang", "EASY", "All-spin tutorial!\n[Under construction]"},
|
||||||
{"C4W Training", "NORMAL", "Infinite combos."},
|
["c4wtrain_normal"]= {"C4W Training", "NORMAL", "Infinite combos."},
|
||||||
{"C4W Training", "LUNATIC", "Infinite combos."},
|
["c4wtrain_lunatic"]= {"C4W Training", "LUNATIC", "Infinite combos."},
|
||||||
{"PC Training", "NORMAL", "Simple Perfect Clear mode."},
|
["pctrain_normal"]= {"PC Training", "NORMAL", "Simple Perfect Clear mode."},
|
||||||
{"PC Training", "LUNATIC", "Simple Perfect Clear mode."},
|
["pctrain_lunatic"]= {"PC Training", "LUNATIC", "Simple Perfect Clear mode."},
|
||||||
{"PC Challenge", "NORMAL", "Get PCs within 100 lines!"},
|
["pcchallenge_normal"]= {"PC Challenge", "NORMAL", "Get PCs within 100 lines!"},
|
||||||
{"PC Challenge", "HARD", "Get PCs within 100 lines!"},
|
["pcchallenge_hard"]= {"PC Challenge", "HARD", "Get PCs within 100 lines!"},
|
||||||
{"PC Challenge", "LUNATIC", "Get PCs within 100 lines!"},
|
["pcchallenge_lunatic"]={"PC Challenge", "LUNATIC", "Get PCs within 100 lines!"},
|
||||||
{"Tech", "NORMAL", "Keep the B2B chain!"},
|
["tech_normal"]= {"Tech", "NORMAL", "Keep the B2B chain!"},
|
||||||
{"Tech", "NORMAL+", "Spin & PC only"},
|
["tech_normal+"]= {"Tech", "NORMAL+", "Spin & PC only"},
|
||||||
{"Tech", "HARD", "Keep the B2B chain!"},
|
["tech_hard"]= {"Tech", "HARD", "Keep the B2B chain!"},
|
||||||
{"Tech", "HARD+", "Spin & PC only"},
|
["tech_hard+"]= {"Tech", "HARD+", "Spin & PC only"},
|
||||||
{"Tech", "LUNATIC", "Keep the B2B chain!"},
|
["tech_lunatic"]= {"Tech", "LUNATIC", "Keep the B2B chain!"},
|
||||||
{"Tech", "LUNATIC+", "Spin & PC only"},
|
["tech_lunatic+"]= {"Tech", "LUNATIC+", "Spin & PC only"},
|
||||||
{"Tech", "ULTIMATE", "No finesse faults!"},
|
["tech_ultimate"]= {"Tech", "ULTIMATE", "No finesse faults!"},
|
||||||
{"Tech", "ULTIMATE+", "No normal clears, no finesse faults!"},
|
["tech_ultimate+"]= {"Tech", "ULTIMATE+", "No normal clears, no finesse faults!"},
|
||||||
{"TSD Challenge", "EASY", "T-spin-doubles only!"},
|
["tsd_easy"]= {"TSD Challenge", "EASY", "T-spin-doubles only!"},
|
||||||
{"TSD Challenge", "HARD", "T-spin-doubles only!"},
|
["tsd_hard"]= {"TSD Challenge", "HARD", "T-spin-doubles only!"},
|
||||||
{"TSD Challenge", "ULTIMATE", "T-spin-doubles only!"},
|
["tsd_ultimate"]= {"TSD Challenge", "ULTIMATE", "T-spin-doubles only!"},
|
||||||
{"Zen", "", "200 lines without a time limit."},
|
["zen"]= {"Zen", "", "200 lines without a time limit."},
|
||||||
{"Ultra", "EXTRA", "Get the highest score within 2 min."},
|
["ultra"]= {"Ultra", "EXTRA", "Get the highest score within 2 min."},
|
||||||
{"Infinite", "", "Sandbox mode."},
|
["infinite"]= {"Infinite", "", "Sandbox mode."},
|
||||||
{"Infinite: Dig", "", "Dig, dig, dig."},
|
["infinite_dig"]= {"Infinite: Dig", "", "Dig, dig, dig."},
|
||||||
{"Custom", "NORMAL", "Draw something then clear it!!"},
|
["custom_clear"]= {"Custom", "NORMAL", "Draw something then clear it!!"},
|
||||||
{"Custom", "PUZZLE", "Draw something then stack it!!"},
|
["custom_puzzle"]= {"Custom", "PUZZLE", "Draw something then stack it!!"},
|
||||||
{"Sprint", "Pentomino", "Puzzle-18"},
|
["sprintPenta"]= {"Sprint", "Pentomino", "Puzzle-18"},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
@@ -1729,7 +1781,7 @@ local drawableTextLoad={
|
|||||||
"anykey",
|
"anykey",
|
||||||
"next","hold",
|
"next","hold",
|
||||||
"win","finish","lose","pause",
|
"win","finish","lose","pause",
|
||||||
"custom",
|
"custom","sequence",
|
||||||
"setting_game",
|
"setting_game",
|
||||||
"setting_video",
|
"setting_video",
|
||||||
"setting_sound",
|
"setting_sound",
|
||||||
|
|||||||
@@ -3,8 +3,8 @@
|
|||||||
--https://github.com/mattdesl/lwjgl-basics/wiki/2D-Pixel-Perfect-Shadows
|
--https://github.com/mattdesl/lwjgl-basics/wiki/2D-Pixel-Perfect-Shadows
|
||||||
local gc=love.graphics
|
local gc=love.graphics
|
||||||
local C=gc.clear
|
local C=gc.clear
|
||||||
local shadowMapShader=gc.newShader("shader/shadowMap.glsl")--Shader for caculating the 1D shadow map.
|
local shadowMapShader=gc.newShader("Zframework/shader/shadowMap.glsl")--Shader for caculating the 1D shadow map.
|
||||||
local lightRenderShader=gc.newShader("shader/lightRender.glsl")--Shader for rendering blurred lights and shadows.
|
local lightRenderShader=gc.newShader("Zframework/shader/lightRender.glsl")--Shader for rendering blurred lights and shadows.
|
||||||
local Lights={}--Lightsource objects
|
local Lights={}--Lightsource objects
|
||||||
local function move(L,x,y)
|
local function move(L,x,y)
|
||||||
L.x,L.y=x,y
|
L.x,L.y=x,y
|
||||||
|
|||||||
@@ -152,59 +152,60 @@ function Pnt.mode()
|
|||||||
gc.scale(cam.zoomK)
|
gc.scale(cam.zoomK)
|
||||||
gc.translate(-cam.x1,-cam.y1)
|
gc.translate(-cam.x1,-cam.y1)
|
||||||
gc.scale(cam.k1)
|
gc.scale(cam.k1)
|
||||||
local MM=Modes
|
|
||||||
local R=modeRanks
|
local R=modeRanks
|
||||||
local sel=cam.sel
|
local sel=cam.sel
|
||||||
setFont(30)
|
setFont(30)
|
||||||
for _=1,#MM do
|
|
||||||
local M=MM[_]
|
gc.setLineWidth(8)
|
||||||
if R[_]then
|
gc.setColor(1,1,1,.2)
|
||||||
gc.setLineWidth(8)
|
for name,M in next,Modes do
|
||||||
gc.setColor(1,1,1,.2)
|
if R[name]then
|
||||||
for _=1,#M.unlock do
|
for _=1,#M.unlock do
|
||||||
local m=M.unlock[_]
|
local m=Modes[M.unlock[_]]
|
||||||
m=MM[m]
|
|
||||||
gc.line(M.x,M.y,m.x,m.y)
|
gc.line(M.x,M.y,m.x,m.y)
|
||||||
end
|
end
|
||||||
|
end
|
||||||
|
end--lines connecting modes
|
||||||
|
|
||||||
|
for name,M in next,Modes do
|
||||||
|
if R[name]then
|
||||||
local S=M.size
|
local S=M.size
|
||||||
local d=((M.x-(cam.x1+(sel and -180 or 0))/cam.k1)^2+(M.y-cam.y1/cam.k1)^2)^.55
|
local d=((M.x-(cam.x1+(sel and -180 or 0))/cam.k1)^2+(M.y-cam.y1/cam.k1)^2)^.55
|
||||||
if d<500 then S=S*(1.25-d*0.0005) end
|
if d<500 then S=S*(1.25-d*0.0005) end
|
||||||
local c=modeRankColor[modeRanks[M.id]]
|
local c=modeRankColor[R[M.name]]
|
||||||
if c then
|
if c then
|
||||||
gc.setColor(c)
|
gc.setColor(c)
|
||||||
else
|
else
|
||||||
c=.5+sin(Timer()*6.26-_)*.2
|
c=.5+sin(Timer()*6.26)*.2
|
||||||
S=S*(.9+c*.4)
|
S=S*(.9+c*.4)
|
||||||
gc.setColor(c,c,c)
|
gc.setColor(c,c,c)
|
||||||
end
|
end
|
||||||
if M.shape==1 then--Rectangle
|
if M.shape==1 then--Rectangle
|
||||||
gc.rectangle("fill",M.x-S,M.y-S,2*S,2*S)
|
gc.rectangle("fill",M.x-S,M.y-S,2*S,2*S)
|
||||||
if sel==_ then
|
if sel==name then
|
||||||
gc.setColor(1,1,1)
|
gc.setColor(1,1,1)
|
||||||
gc.setLineWidth(10)
|
gc.setLineWidth(10)
|
||||||
gc.rectangle("line",M.x-S+5,M.y-S+5,2*S-10,2*S-10)
|
gc.rectangle("line",M.x-S+5,M.y-S+5,2*S-10,2*S-10)
|
||||||
end
|
end
|
||||||
elseif M.shape==2 then--diamond
|
elseif M.shape==2 then--diamond
|
||||||
gc.circle("fill",M.x,M.y,S+5,4)
|
gc.circle("fill",M.x,M.y,S+5,4)
|
||||||
if sel==_ then
|
if sel==name then
|
||||||
gc.setColor(1,1,1)
|
gc.setColor(1,1,1)
|
||||||
gc.setLineWidth(10)
|
gc.setLineWidth(10)
|
||||||
gc.circle("line",M.x,M.y,S+5,4)
|
gc.circle("line",M.x,M.y,S+5,4)
|
||||||
end
|
end
|
||||||
elseif M.shape==3 then--Octagon
|
elseif M.shape==3 then--Octagon
|
||||||
gc.circle("fill",M.x,M.y,S,8)
|
gc.circle("fill",M.x,M.y,S,8)
|
||||||
if sel==_ then
|
if sel==name then
|
||||||
gc.setColor(1,1,1)
|
gc.setColor(1,1,1)
|
||||||
gc.setLineWidth(10)
|
gc.setLineWidth(10)
|
||||||
gc.circle("line",M.x,M.y,S,8)
|
gc.circle("line",M.x,M.y,S,8)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
_=drawableText[rankString[modeRanks[M.id]]]
|
name=drawableText[rankString[R[M.name]]]
|
||||||
if _ then
|
if name then
|
||||||
local dx,dy=6.26*sin(Timer()*0.626+M.id),6.6*sin(Timer()+M.id)
|
|
||||||
gc.setColor(0,0,0,.26)
|
gc.setColor(0,0,0,.26)
|
||||||
mDraw(_,M.x+dx*1.5,M.y+dy*1.5)
|
mDraw(name,M.x,M.y)
|
||||||
end
|
end
|
||||||
--[[
|
--[[
|
||||||
if M.icon then
|
if M.icon then
|
||||||
@@ -224,7 +225,7 @@ function Pnt.mode()
|
|||||||
end
|
end
|
||||||
gc.pop()
|
gc.pop()
|
||||||
if sel then
|
if sel then
|
||||||
local M=MM[sel]
|
local M=Modes[sel]
|
||||||
local lang=setting.lang
|
local lang=setting.lang
|
||||||
gc.setColor(.7,.7,.7,.5)
|
gc.setColor(.7,.7,.7,.5)
|
||||||
gc.rectangle("fill",920,0,360,720)--Info board
|
gc.rectangle("fill",920,0,360,720)--Info board
|
||||||
@@ -293,21 +294,40 @@ function Pnt.music()
|
|||||||
end
|
end
|
||||||
function Pnt.custom()
|
function Pnt.custom()
|
||||||
gc.setColor(1,1,1,.3+sin(Timer()*8)*.2)
|
gc.setColor(1,1,1,.3+sin(Timer()*8)*.2)
|
||||||
gc.rectangle("fill",25,95+40*sceneTemp,480,40)
|
gc.rectangle("fill",100,115+40*sceneTemp,570,40)
|
||||||
gc.setColor(.7,.7,.7)gc.draw(drawableText.custom,20,20)
|
gc.setColor(.7,.7,.7)gc.draw(drawableText.custom,360,20)
|
||||||
gc.setColor(1,1,1)gc.draw(drawableText.custom,22,23)
|
gc.setColor(1,1,1)gc.draw(drawableText.custom,362,23)
|
||||||
setFont(35)
|
setFont(35)
|
||||||
for i=1,#customID do
|
for i=1,#customID do
|
||||||
local k=customID[i]
|
local k=customID[i]
|
||||||
local y=90+40*i
|
local y=110+40*i
|
||||||
gc.printf(text.customOption[k],15,y,320,"right")
|
gc.printf(text.customOption[k],100,y,320,"right")
|
||||||
if text.customVal[k]then
|
if text.customVal[k]then
|
||||||
gc.print(text.customVal[k][customSel[i]],335,y)
|
gc.print(text.customVal[k][customSel[i]],440,y)
|
||||||
else
|
else
|
||||||
gc.print(customRange[k][customSel[i]],335,y)
|
gc.print(customRange[k][customSel[i]],440,y)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
function Pnt.sequence()
|
||||||
|
gc.setColor(.7,.7,.7)gc.draw(drawableText.sequence,120,-15)
|
||||||
|
gc.setColor(1,1,1)gc.draw(drawableText.sequence,122,-12)
|
||||||
|
gc.setLineWidth(4)
|
||||||
|
gc.rectangle("line",100,100,1080,260)
|
||||||
|
setFont(30)
|
||||||
|
for i=1,#preBag do
|
||||||
|
gc.print(preBag[i],100+30*i,110)
|
||||||
|
end
|
||||||
|
setFont(40)
|
||||||
|
gc.print(sceneTemp.cur,120,300)
|
||||||
|
|
||||||
|
--Confirm reset
|
||||||
|
if sceneTemp.sure>0 then
|
||||||
|
gc.setColor(1,1,1,sceneTemp.sure*.02)
|
||||||
|
gc.draw(drawableText.question,1035,570)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
function Pnt.draw()
|
function Pnt.draw()
|
||||||
local sx,sy=sceneTemp.x,sceneTemp.y
|
local sx,sy=sceneTemp.x,sceneTemp.y
|
||||||
gc.translate(200,60)
|
gc.translate(200,60)
|
||||||
@@ -333,6 +353,8 @@ function Pnt.draw()
|
|||||||
gc.rectangle("line",30*sx-30,600-30*sy,30,30)
|
gc.rectangle("line",30*sx-30,600-30*sy,30,30)
|
||||||
end
|
end
|
||||||
gc.translate(-200,-60)
|
gc.translate(-200,-60)
|
||||||
|
|
||||||
|
--Pen
|
||||||
local pen=sceneTemp.pen
|
local pen=sceneTemp.pen
|
||||||
if pen>0 then
|
if pen>0 then
|
||||||
gc.setLineWidth(13)
|
gc.setLineWidth(13)
|
||||||
@@ -344,10 +366,14 @@ function Pnt.draw()
|
|||||||
gc.line(575,470,625,520)
|
gc.line(575,470,625,520)
|
||||||
gc.line(575,520,625,470)
|
gc.line(575,520,625,470)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
--Confirm reset
|
||||||
if sceneTemp.sure>0 then
|
if sceneTemp.sure>0 then
|
||||||
gc.setColor(1,1,1,sceneTemp.sure*.02)
|
gc.setColor(1,1,1,sceneTemp.sure*.02)
|
||||||
gc.draw(drawableText.question,1040,430)
|
gc.draw(drawableText.question,1040,430)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
--Block name
|
||||||
setFont(40)
|
setFont(40)
|
||||||
local _
|
local _
|
||||||
for i=1,7 do
|
for i=1,7 do
|
||||||
@@ -358,10 +384,13 @@ function Pnt.draw()
|
|||||||
end
|
end
|
||||||
function Pnt.play()
|
function Pnt.play()
|
||||||
if marking then
|
if marking then
|
||||||
setFont(36)
|
setFont(26)
|
||||||
local x=game.frame*2%1800-260
|
local x=Timer()*46%1680-200
|
||||||
gc.setColor(1,1,1,abs(0.26*(1-x/640))-0.0626)
|
gc.setColor(1,1,1,abs(.26*(1-x/640)))
|
||||||
mStr(text.marking,x,260+62*sin(Timer()))
|
mStr(text.marking,x,260+62*sin(Timer()))
|
||||||
|
-- gc.setColor(1,1,1,.0626)
|
||||||
|
-- mStr(text.marking,260,62+26*sin(Timer()))
|
||||||
|
-- mStr(text.marking,1100,460+62*sin(Timer()*1.2))
|
||||||
end
|
end
|
||||||
for p=1,#players do
|
for p=1,#players do
|
||||||
players[p]:draw()
|
players[p]:draw()
|
||||||
@@ -420,6 +449,13 @@ function Pnt.play()
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
--Mode info
|
||||||
|
gc.setColor(1,1,1,.8)
|
||||||
|
gc.draw(drawableText.modeName,485,10)
|
||||||
|
gc.draw(drawableText.levelName,511+drawableText.modeName:getWidth(),10)
|
||||||
|
|
||||||
|
--Danger
|
||||||
gc.push("transform")
|
gc.push("transform")
|
||||||
gc.origin()
|
gc.origin()
|
||||||
if restartCount>0 then
|
if restartCount>0 then
|
||||||
|
|||||||
@@ -79,6 +79,9 @@ function sceneInit.custom()
|
|||||||
BG.set(customRange.bg[customSel[12]])
|
BG.set(customRange.bg[customSel[12]])
|
||||||
BGM.play(customRange.bgm[customSel[13]])
|
BGM.play(customRange.bgm[customSel[13]])
|
||||||
end
|
end
|
||||||
|
function sceneInit.sequence()
|
||||||
|
sceneTemp={cur=#preBag,sure=0}
|
||||||
|
end
|
||||||
function sceneInit.draw()
|
function sceneInit.draw()
|
||||||
BG.set("space")
|
BG.set("space")
|
||||||
sceneTemp={
|
sceneTemp={
|
||||||
@@ -328,6 +331,9 @@ function SCN.swapTo(tar,style)
|
|||||||
S.draw=swap[3]
|
S.draw=swap[3]
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
function SCN.goto(tar,style)
|
||||||
|
SCN.push()SCN.swapTo(tar,style)
|
||||||
|
end
|
||||||
function SCN.back()
|
function SCN.back()
|
||||||
if backFunc[SCN.cur] then backFunc[SCN.cur]()end
|
if backFunc[SCN.cur] then backFunc[SCN.cur]()end
|
||||||
--func when scene end
|
--func when scene end
|
||||||
|
|||||||
@@ -1,8 +1,8 @@
|
|||||||
local function N(file)
|
local function N(file)
|
||||||
return love.graphics.newShader("shader/"..file..".glsl")
|
return love.graphics.newShader("Zframework/shader/"..file..".glsl")
|
||||||
end
|
end
|
||||||
return{
|
return{
|
||||||
-- glow=gc.newShader("shader/glow.cs"),
|
-- glow=gc.newShader("Zframework/shader/glow.cs"),
|
||||||
alpha=N("alpha"),
|
alpha=N("alpha"),
|
||||||
warning=N("warning"),
|
warning=N("warning"),
|
||||||
|
|
||||||
|
|||||||
@@ -37,6 +37,6 @@ vec4 effect(vec4 color,Image text,vec2 pos,vec2 scr_pos){
|
|||||||
dx=sqrt(dx*dx+dy*dy);
|
dx=sqrt(dx*dx+dy*dy);
|
||||||
V.gb+=vec2(smoothstep(0.626,0.,dx));
|
V.gb+=vec2(smoothstep(0.626,0.,dx));
|
||||||
|
|
||||||
dx=1.26*max(max(V.r,V.g),V.b);
|
dx=1.626*max(max(V.r,V.g),V.b);
|
||||||
return vec4(V/dx,1.);
|
return vec4(V/dx,1.);
|
||||||
}
|
}
|
||||||
@@ -1,5 +1,4 @@
|
|||||||
local rem=table.remove
|
local rem=table.remove
|
||||||
|
|
||||||
local tasks={}
|
local tasks={}
|
||||||
|
|
||||||
local TASK={}
|
local TASK={}
|
||||||
@@ -48,12 +47,6 @@ function TASK.clear(opt)
|
|||||||
tasks[i]=nil
|
tasks[i]=nil
|
||||||
i=i-1
|
i=i-1
|
||||||
end
|
end
|
||||||
elseif opt=="play"then
|
|
||||||
for i=#tasks,1,-1 do
|
|
||||||
if tasks[i].P then
|
|
||||||
rem(tasks,i)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
else--Player table
|
else--Player table
|
||||||
for i=#tasks,1,-1 do
|
for i=#tasks,1,-1 do
|
||||||
if tasks[i].P==opt then
|
if tasks[i].P==opt then
|
||||||
|
|||||||
@@ -18,13 +18,13 @@ function Tmr.load()
|
|||||||
elseif S.phase==4 then
|
elseif S.phase==4 then
|
||||||
IMG.loadOne(S.cur)
|
IMG.loadOne(S.cur)
|
||||||
elseif S.phase==5 then
|
elseif S.phase==5 then
|
||||||
local m=Modes[S.cur]
|
local m=Modes[S.cur]--mode template
|
||||||
Modes[S.cur]=require("modes/"..m[1])
|
local M=require("modes/"..m.name)--mode file
|
||||||
local M=Modes[S.cur]
|
Modes[m.name]=M
|
||||||
M.saveFileName,M.id=m[1],m.id
|
for k,v in next,m do
|
||||||
M.x,M.y,M.size,M.shape=m.x,m.y,m.size,m.shape
|
M[k]=v
|
||||||
M.unlock=m.unlock
|
end
|
||||||
M.records=FILE.loadRecord(m[1])or M.score and{}
|
M.records=FILE.loadRecord(m.name)or M.score and{}
|
||||||
-- M.icon=gc.newImage("image/modeIcon/"..m.icon..".png")
|
-- M.icon=gc.newImage("image/modeIcon/"..m.icon..".png")
|
||||||
-- M.icon=gc.newImage("image/modeIcon/custom.png")
|
-- M.icon=gc.newImage("image/modeIcon/custom.png")
|
||||||
elseif S.phase==6 then
|
elseif S.phase==6 then
|
||||||
@@ -105,21 +105,19 @@ function Tmr.mode(dt)
|
|||||||
cam.keyCtrl=true
|
cam.keyCtrl=true
|
||||||
end
|
end
|
||||||
local x,y=(cam.x1-180)/cam.k1,cam.y1/cam.k1
|
local x,y=(cam.x1-180)/cam.k1,cam.y1/cam.k1
|
||||||
local MM,R=Modes,modeRanks
|
for name,M in next,Modes do
|
||||||
for _=1,#MM do
|
if modeRanks[name]then
|
||||||
if R[_]then
|
local SEL
|
||||||
local __
|
|
||||||
local M=MM[_]
|
|
||||||
local s=M.size
|
local s=M.size
|
||||||
if M.shape==1 then
|
if M.shape==1 then
|
||||||
if x>M.x-s and x<M.x+s and y>M.y-s and y<M.y+s then __=_ end
|
if x>M.x-s and x<M.x+s and y>M.y-s and y<M.y+s then SEL=name end
|
||||||
elseif M.shape==2 then
|
elseif M.shape==2 then
|
||||||
if abs(x-M.x)+abs(y-M.y)<s then __=_ end
|
if abs(x-M.x)+abs(y-M.y)<s then SEL=name end
|
||||||
elseif M.shape==3 then
|
elseif M.shape==3 then
|
||||||
if(x-M.x)^2+(y-M.y)^2<s^2 then __=_ end
|
if(x-M.x)^2+(y-M.y)^2<s^2 then SEL=name end
|
||||||
end
|
end
|
||||||
if __ and cam.sel~=__ then
|
if SEL and cam.sel~=SEL then
|
||||||
cam.sel=__
|
cam.sel=SEL
|
||||||
SFX.play("click")
|
SFX.play("click")
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
@@ -154,6 +152,9 @@ function Tmr.mode(dt)
|
|||||||
cam.zoomK=cam.zoomK^.9
|
cam.zoomK=cam.zoomK^.9
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
function Tmr.sequence()
|
||||||
|
if sceneTemp.sure>0 then sceneTemp.sure=sceneTemp.sure-1 end
|
||||||
|
end
|
||||||
function Tmr.draw()
|
function Tmr.draw()
|
||||||
if sceneTemp.sure>0 then sceneTemp.sure=sceneTemp.sure-1 end
|
if sceneTemp.sure>0 then sceneTemp.sure=sceneTemp.sure-1 end
|
||||||
end
|
end
|
||||||
@@ -239,8 +240,8 @@ function Tmr.play(dt)
|
|||||||
if game.frame%26==0 and setting.warn then
|
if game.frame%26==0 and setting.warn then
|
||||||
local F=P1.field
|
local F=P1.field
|
||||||
local M=#F
|
local M=#F
|
||||||
local height=0
|
local height=0--max height of row 4~7
|
||||||
for x=3,8 do
|
for x=4,7 do
|
||||||
for y=M,1,-1 do
|
for y=M,1,-1 do
|
||||||
if F[y][x]>0 then
|
if F[y][x]>0 then
|
||||||
if y>height then
|
if y>height then
|
||||||
|
|||||||
@@ -218,9 +218,6 @@ function WIDGET.press(x,y)
|
|||||||
local W=WIDGET.sel
|
local W=WIDGET.sel
|
||||||
if not W then return end
|
if not W then return end
|
||||||
if W.type=="button"then
|
if W.type=="button"then
|
||||||
for k,v in next,W do
|
|
||||||
print(k,v)
|
|
||||||
end
|
|
||||||
W.code()
|
W.code()
|
||||||
W:FX()
|
W:FX()
|
||||||
SFX.play("button")
|
SFX.play("button")
|
||||||
|
|||||||
@@ -1,3 +1,4 @@
|
|||||||
|
local ins,rem=table.insert,table.remove
|
||||||
local mobileHide=(system=="Android"or system=="iOS")and function()return true end
|
local mobileHide=(system=="Android"or system=="iOS")and function()return true end
|
||||||
local function BACK()SCN.back()end
|
local function BACK()SCN.back()end
|
||||||
local virtualkeySet={
|
local virtualkeySet={
|
||||||
@@ -85,46 +86,84 @@ local function nextDir(n) return function()SKIN.rotate(n) end end
|
|||||||
local function VKAdisp(n) return function()return VK_org[n].ava end end
|
local function VKAdisp(n) return function()return VK_org[n].ava end end
|
||||||
local function VKAcode(n) return function()VK_org[n].ava=not VK_org[n].ava end end
|
local function VKAcode(n) return function()VK_org[n].ava=not VK_org[n].ava end end
|
||||||
local function setLang(n) return function()LANG.set(n)setting.lang=n end end
|
local function setLang(n) return function()LANG.set(n)setting.lang=n end end
|
||||||
|
local function SEQpush(n) return function()local C=sceneTemp.cur+1 ins(preBag,C,n)sceneTemp.cur=C end end
|
||||||
local newButton,newSwitch,newSlider=WIDGET.new.button,WIDGET.new.switch,WIDGET.new.slider
|
local newButton,newSwitch,newSlider=WIDGET.new.button,WIDGET.new.switch,WIDGET.new.slider
|
||||||
|
|
||||||
|
|
||||||
local C=color
|
local C=color
|
||||||
local Widgets={
|
local Widgets={
|
||||||
load={},intro={},quit={},
|
load={},intro={},quit={},
|
||||||
main={
|
main={
|
||||||
play= newButton(150,280,200,160,C.lightRed, 55,function()SCN.push()SCN.swapTo("mode")end, nil,"setting"),
|
play= newButton(150,280,200,160,C.lightRed, 55,function()SCN.goto("mode")end, nil,"setting"),
|
||||||
setting=newButton(370,280,200,160,C.lightBlue, 45,function()SCN.push()SCN.swapTo("setting_game")end, nil,"music"),
|
setting=newButton(370,280,200,160,C.lightBlue, 45,function()SCN.goto("setting_game")end, nil,"music"),
|
||||||
music= newButton(590,280,200,160,C.lightPurple, 32,function()SCN.push()SCN.swapTo("music")end, nil,"help"),
|
music= newButton(590,280,200,160,C.lightPurple, 32,function()SCN.goto("music")end, nil,"help"),
|
||||||
help= newButton(150,460,200,160,C.lightYellow, 50,function()SCN.push()SCN.swapTo("help")end, nil,"stat"),
|
help= newButton(150,460,200,160,C.lightYellow, 50,function()SCN.goto("help")end, nil,"stat"),
|
||||||
stat= newButton(370,460,200,160,C.lightCyan, 43,function()SCN.push()SCN.swapTo("stat")end, nil,"qplay"),
|
stat= newButton(370,460,200,160,C.lightCyan, 43,function()SCN.goto("stat")end, nil,"qplay"),
|
||||||
qplay= newButton(590,460,200,160,C.lightOrange, 43,function()SCN.push()loadGame(stat.lastPlay)end, nil,"lang"),
|
qplay= newButton(590,460,200,160,C.lightOrange, 43,function()SCN.push()loadGame(stat.lastPlay)end, nil,"lang"),
|
||||||
lang= newButton(150,610,160,100,C.lightGreen, 45,function()SCN.push()SCN.swapTo("setting_lang")end, nil,"quit"),
|
lang= newButton(150,610,160,100,C.lightGreen, 45,function()SCN.goto("setting_lang")end, nil,"quit"),
|
||||||
quit= newButton(590,610,160,100,C.lightGrey, 45,function()VOC.play("bye")SCN.swapTo("quit","slowFade")end,nil,"play"),
|
quit= newButton(590,610,160,100,C.lightGrey, 45,function()VOC.play("bye")SCN.swapTo("quit","slowFade")end,nil,"play"),
|
||||||
},
|
},
|
||||||
mode={
|
mode={
|
||||||
draw= newButton(1100, 440,240,90,C.lightYellow, 40,function()SCN.push()SCN.swapTo("draw")end,function()return mapCam.sel~=71 and mapCam.sel~=72 end),
|
setting=newButton(1100, 540,240,90,C.lightGreen, 40,function()SCN.goto("custom")end,function()return mapCam.sel~="custom_clear" and mapCam.sel~="custom_puzzle" end),
|
||||||
custom= newButton(1100, 540,240,90,C.lightGreen, 40,function()SCN.push()SCN.swapTo("custom")end,function()return mapCam.sel~=71 and mapCam.sel~=72 end),
|
|
||||||
start= newButton(1040, 655,180,80,C.lightGrey, 40,function()if mapCam.sel then SCN.push()loadGame(mapCam.sel)end end,function()return not mapCam.sel end),
|
start= newButton(1040, 655,180,80,C.lightGrey, 40,function()if mapCam.sel then SCN.push()loadGame(mapCam.sel)end end,function()return not mapCam.sel end),
|
||||||
back= newButton(1200, 655,120,80,C.white, 40,BACK),
|
back= newButton(1200, 655,120,80,C.white, 40,BACK),
|
||||||
--function()SCN.push()SCN.swapTo("custom")end
|
|
||||||
},
|
},
|
||||||
music={
|
music={
|
||||||
bgm= newSlider(760, 80,400,10,35,function()BGM.freshVolume()end,SETval("bgm"),SETsto("bgm")),
|
bgm= newSlider(760, 80,400,10,35,function()BGM.freshVolume()end,SETval("bgm"),SETsto("bgm")),
|
||||||
up= newButton(1100, 200,120,120,C.white,55,pressKey("up")),
|
up= newButton(1100, 200,120,120,C.white, 55,pressKey("up")),
|
||||||
play= newButton(1100, 340,120,120,C.white,35,pressKey("space"),function()return setting.bgm==0 end),
|
play= newButton(1100, 340,120,120,C.white, 35,pressKey("space"),function()return setting.bgm==0 end),
|
||||||
down= newButton(1100, 480,120,120,C.white,55,pressKey("down")),
|
down= newButton(1100, 480,120,120,C.white, 55,pressKey("down")),
|
||||||
back= newButton(640, 630,230,90, C.white,40,BACK),
|
back= newButton(640, 630,230,90, C.white, 40,BACK),
|
||||||
},
|
},
|
||||||
custom={
|
custom={
|
||||||
up= newButton(1000, 360,100,100,C.white, 45,function()sceneTemp=(sceneTemp-2)%#customID+1 end),
|
up= newButton(1140, 100,100,100,C.white, 45,function()sceneTemp=(sceneTemp-2)%#customID+1 end),
|
||||||
down= newButton(1000, 600,100,100,C.white, 45,function()sceneTemp=sceneTemp%#customID+1 end),
|
down= newButton(1140, 340,100,100,C.white, 45,function()sceneTemp=sceneTemp%#customID+1 end),
|
||||||
left= newButton(880, 480,100,100,C.white, 45,pressKey("left")),
|
left= newButton(1080, 220,100,100,C.white, 45,pressKey("left")),
|
||||||
right= newButton(1120, 480,100,100,C.white, 45,pressKey("right")),
|
right= newButton(1200, 220,100,100,C.white, 45,pressKey("right")),
|
||||||
set1= newButton(640, 160,240,75, C.lightYellow, 35,pressKey("1")),
|
|
||||||
set2= newButton(640, 250,240,75, C.lightYellow, 35,pressKey("2")),
|
set1= newButton(940, 320,260,70, C.lightYellow, 32,pressKey("1")),
|
||||||
set3= newButton(640, 340,240,75, C.lightYellow, 35,pressKey("3")),
|
set2= newButton(940, 400,260,70, C.lightYellow, 32,pressKey("2")),
|
||||||
set4= newButton(640, 430,240,75, C.lightYellow, 35,pressKey("4")),
|
set3= newButton(940, 480,260,70, C.lightYellow, 32,pressKey("3")),
|
||||||
set5= newButton(640, 520,240,75, C.lightYellow, 35,pressKey("5")),
|
set4= newButton(940, 560,260,70, C.lightYellow, 32,pressKey("4")),
|
||||||
back= newButton(640, 630,180,60, C.white, 35,BACK),
|
set5= newButton(940, 640,260,70, C.lightYellow, 32,pressKey("5")),
|
||||||
|
|
||||||
|
seq= newButton(665, 415,162,40, C.lightGreen, 32,function()SCN.goto("sequence")end),
|
||||||
|
draw= newButton(150, 80, 220,80, C.white, 35,function()SCN.swapTo("draw")end),
|
||||||
|
back= newButton(1200, 640,120,120,C.white, 35,BACK),
|
||||||
|
},
|
||||||
|
sequence={
|
||||||
|
Z= newButton(150, 440,90, 90,C.white, 50,SEQpush(1)),
|
||||||
|
S= newButton(250, 440,90, 90,C.white, 50,SEQpush(2)),
|
||||||
|
J= newButton(350, 440,90, 90,C.white, 50,SEQpush(3)),
|
||||||
|
L= newButton(450, 440,90, 90,C.white, 50,SEQpush(4)),
|
||||||
|
T= newButton(550, 440,90, 90,C.white, 50,SEQpush(5)),
|
||||||
|
O= newButton(650, 440,90, 90,C.white, 50,SEQpush(6)),
|
||||||
|
I= newButton(750, 440,90, 90,C.white, 50,SEQpush(7)),
|
||||||
|
|
||||||
|
Z5= newButton(150, 540,90, 90,C.white, 50,SEQpush(8)),
|
||||||
|
S5= newButton(250, 540,90, 90,C.white, 50,SEQpush(9)),
|
||||||
|
P= newButton(350, 540,90, 90,C.white, 50,SEQpush(10)),
|
||||||
|
Q= newButton(450, 540,90, 90,C.white, 50,SEQpush(11)),
|
||||||
|
F= newButton(550, 540,90, 90,C.white, 50,SEQpush(12)),
|
||||||
|
E= newButton(650, 540,90, 90,C.white, 50,SEQpush(13)),
|
||||||
|
T5= newButton(750, 540,90, 90,C.white, 50,SEQpush(14)),
|
||||||
|
U= newButton(850, 540,90, 90,C.white, 50,SEQpush(15)),
|
||||||
|
V= newButton(950, 540,90, 90,C.white, 50,SEQpush(16)),
|
||||||
|
W= newButton(150, 640,90, 90,C.white, 50,SEQpush(17)),
|
||||||
|
X= newButton(250, 640,90, 90,C.white, 50,SEQpush(18)),
|
||||||
|
J5= newButton(350, 640,90, 90,C.white, 50,SEQpush(19)),
|
||||||
|
L5= newButton(450, 640,90, 90,C.white, 50,SEQpush(20)),
|
||||||
|
R= newButton(550, 640,90, 90,C.white, 50,SEQpush(21)),
|
||||||
|
Y= newButton(650, 640,90, 90,C.white, 50,SEQpush(22)),
|
||||||
|
N= newButton(750, 640,90, 90,C.white, 50,SEQpush(23)),
|
||||||
|
H= newButton(850, 640,90, 90,C.white, 50,SEQpush(24)),
|
||||||
|
I5= newButton(950, 640,90, 90,C.white, 50,SEQpush(25)),
|
||||||
|
|
||||||
|
left= newButton(850, 440,90, 90,C.green, 55,pressKey("left")),
|
||||||
|
right= newButton(950, 440,90, 90,C.green, 55,pressKey("right")),
|
||||||
|
backsp= newButton(1050, 440,90, 90,C.red, 50,pressKey("backspace")),
|
||||||
|
reset= newButton(1050, 540,90, 90,C.red, 50,pressKey("delete")),
|
||||||
|
back= newButton(1200, 640,120,120,C.white, 35,BACK),
|
||||||
},
|
},
|
||||||
draw={
|
draw={
|
||||||
b1= newButton(500+65*1, 150,58,58,C.red, 30,setPen(1)),--B1
|
b1= newButton(500+65*1, 150,58,58,C.red, 30,setPen(1)),--B1
|
||||||
@@ -152,6 +191,7 @@ local Widgets={
|
|||||||
demo= newSwitch(755, 640,30,function()return sceneTemp.demo end,function()sceneTemp.demo=not sceneTemp.demo end),
|
demo= newSwitch(755, 640,30,function()return sceneTemp.demo end,function()sceneTemp.demo=not sceneTemp.demo end),
|
||||||
copy= newButton(920, 640,120,120,C.lightRed, 35,copyBoard),
|
copy= newButton(920, 640,120,120,C.lightRed, 35,copyBoard),
|
||||||
paste= newButton(1060, 640,120,120,C.lightBlue, 35,pasteBoard),
|
paste= newButton(1060, 640,120,120,C.lightBlue, 35,pasteBoard),
|
||||||
|
custom= newButton(110, 80, 140,80, C.white, 35,function()SCN.goto("custom")end),
|
||||||
back= newButton(1200, 640,120,120,C.white, 35,BACK),
|
back= newButton(1200, 640,120,120,C.white, 35,BACK),
|
||||||
},
|
},
|
||||||
play={
|
play={
|
||||||
@@ -160,28 +200,27 @@ local Widgets={
|
|||||||
pause={
|
pause={
|
||||||
resume= newButton(640,290,240,100,C.white,30,function()resumeGame()end),
|
resume= newButton(640,290,240,100,C.white,30,function()resumeGame()end),
|
||||||
restart=newButton(640,445,240,100,C.white,33,function()
|
restart=newButton(640,445,240,100,C.white,33,function()
|
||||||
TASK.clear("play")
|
TASK.removeTask_code(TICK.autoPause)
|
||||||
mergeStat(stat,players[1].stat)
|
mergeStat(stat,players[1].stat)
|
||||||
resetGameData()
|
resetGameData()
|
||||||
SCN.swapTo("play","none")
|
SCN.swapTo("play","none")
|
||||||
end),
|
end),
|
||||||
setting=newButton(1120,70,240,90,C.lightBlue,35,function()
|
setting=newButton(1120,70,240,90,C.lightBlue,35,function()
|
||||||
SCN.push()SCN.swapTo("setting_sound")
|
SCN.goto("setting_sound")
|
||||||
end),
|
end),
|
||||||
quit= newButton(640,600,240,100,C.white,35,BACK),
|
quit= newButton(640,600,240,100,C.white,35,BACK),
|
||||||
},
|
},
|
||||||
setting_game={
|
setting_game={
|
||||||
graphic=newButton(200,80,240,80,C.lightCyan,35,function()SCN.swapTo("setting_video")end, nil,"sound"),
|
graphic=newButton(200,80,240,80,C.lightCyan,35,function()SCN.swapTo("setting_video")end, nil,"sound"),
|
||||||
sound= newButton(1080,80,240,80,C.lightCyan,35,function()SCN.swapTo("setting_sound")end, nil,"ctrl"),
|
sound= newButton(1080,80,240,80,C.lightCyan,35,function()SCN.swapTo("setting_sound")end, nil,"ctrl"),
|
||||||
ctrl= newButton(290,220,320,80,C.lightYellow,35,function()SCN.push()SCN.swapTo("setting_control")end, nil,"key"),
|
ctrl= newButton(290,220,320,80,C.lightYellow,35,function()SCN.goto("setting_control")end, nil,"key"),
|
||||||
key= newButton(640,220,320,80,C.lightGreen,35,function()SCN.push()SCN.swapTo("setting_key")end, nil,"touch"),
|
key= newButton(640,220,320,80,C.lightGreen,35,function()SCN.goto("setting_key")end, nil,"touch"),
|
||||||
touch= newButton(990,220,320,80,C.lightBlue,35,function()SCN.push()SCN.swapTo("setting_touch")end, nil,"reTime"),
|
touch= newButton(990,220,320,80,C.lightBlue,35,function()SCN.goto("setting_touch")end, nil,"reTime"),
|
||||||
reTime= newSlider(350,340,300,10,30,nil, SETval("reTime"), SETsto("reTime"), nil,"maxNext"),
|
reTime= newSlider(350,340,300,10,30,nil, SETval("reTime"), SETsto("reTime"), nil,"maxNext"),
|
||||||
maxNext=newSlider(350,440,300,6,30,nil, SETval("maxNext"), SETsto("maxNext"), nil,"autoPause"),
|
maxNext=newSlider(350,440,300,6,30,nil, SETval("maxNext"), SETsto("maxNext"), nil,"autoPause"),
|
||||||
autoPause=newSwitch(350,540,20, SETval("autoPause"), SETrev("autoPause"), nil,"layout"),
|
autoPause=newSwitch(350,540,20, SETval("autoPause"), SETrev("autoPause"), nil,"layout"),
|
||||||
layout= newButton(590,540,140,70,C.white,35,function()
|
layout= newButton(590,540,140,70,C.white,35,function()
|
||||||
SCN.push()
|
SCN.goto("setting_skin")
|
||||||
SCN.swapTo("setting_skin")
|
|
||||||
end,nil,"quickR"),
|
end,nil,"quickR"),
|
||||||
quickR= newSwitch(1050,340,35, SETval("quickR"), SETrev("quickR"), nil,"swap"),
|
quickR= newSwitch(1050,340,35, SETval("quickR"), SETrev("quickR"), nil,"swap"),
|
||||||
swap= newSwitch(1050,440,19, SETval("swap"), SETrev("swap"), nil,"fine"),
|
swap= newSwitch(1050,440,19, SETval("swap"), SETrev("swap"), nil,"fine"),
|
||||||
@@ -308,8 +347,7 @@ local Widgets={
|
|||||||
sceneTemp.snap=sceneTemp.snap%6+1
|
sceneTemp.snap=sceneTemp.snap%6+1
|
||||||
end),
|
end),
|
||||||
option= newButton(520,180,170,80,C.white,40,function()
|
option= newButton(520,180,170,80,C.white,40,function()
|
||||||
SCN.push()
|
SCN.goto("setting_touchSwitch")
|
||||||
SCN.swapTo("setting_touchSwitch")
|
|
||||||
end),
|
end),
|
||||||
back= newButton(760,180,170,80,C.white,40,BACK),
|
back= newButton(760,180,170,80,C.white,40,BACK),
|
||||||
size= newSlider(450,265,460,14,40,nil,function()
|
size= newSlider(450,265,460,14,40,nil,function()
|
||||||
@@ -351,8 +389,7 @@ local Widgets={
|
|||||||
vib= newSlider(800,460,180,2,40,function()VIB(setting.VKVIB)end,SETval("VKVIB"),SETsto("VKVIB")),
|
vib= newSlider(800,460,180,2,40,function()VIB(setting.VKVIB)end,SETval("VKVIB"),SETsto("VKVIB")),
|
||||||
icon= newSwitch(850,300, 40,SETval("VKIcon"),SETrev("VKIcon")),
|
icon= newSwitch(850,300, 40,SETval("VKIcon"),SETrev("VKIcon")),
|
||||||
tkset= newButton(1120,420,240,80,C.white,32,function()
|
tkset= newButton(1120,420,240,80,C.white,32,function()
|
||||||
SCN.push()
|
SCN.goto("setting_trackSetting")
|
||||||
SCN.swapTo("setting_trackSetting")
|
|
||||||
end,function()return not setting.VKTrack end),
|
end,function()return not setting.VKTrack end),
|
||||||
alpha= newSlider(840,540,400,10,40,nil,SETval("VKAlpha"),SETsto("VKAlpha")),
|
alpha= newSlider(840,540,400,10,40,nil,SETval("VKAlpha"),SETsto("VKAlpha")),
|
||||||
back= newButton(1120,620,200,80,C.white,45,BACK),
|
back= newButton(1120,620,200,80,C.white,45,BACK),
|
||||||
@@ -371,8 +408,8 @@ local Widgets={
|
|||||||
back= newButton(640,600,200,80,C.white,40,BACK,nil,"chi"),
|
back= newButton(640,600,200,80,C.white,40,BACK,nil,"chi"),
|
||||||
},
|
},
|
||||||
help={
|
help={
|
||||||
staff= newButton(980,500,150,80,C.white,32,function()SCN.push()SCN.swapTo("staff")end,nil,"his"),
|
staff= newButton(980,500,150,80,C.white,32,function()SCN.goto("staff")end,nil,"his"),
|
||||||
his= newButton(1160,500,150,80,C.white,32,function()SCN.push()SCN.swapTo("history")end,nil,"qq"),
|
his= newButton(1160,500,150,80,C.white,32,function()SCN.goto("history")end,nil,"qq"),
|
||||||
qq= newButton(980,600,150,80,C.white,32,function()love.system.openURL("tencent://message/?uin=1046101471&Site=&Menu=yes")end,mobileHide,"back"),
|
qq= newButton(980,600,150,80,C.white,32,function()love.system.openURL("tencent://message/?uin=1046101471&Site=&Menu=yes")end,mobileHide,"back"),
|
||||||
back= newButton(640,600,200,80,C.white,40,BACK,nil,"staff"),
|
back= newButton(640,600,200,80,C.white,40,BACK,nil,"staff"),
|
||||||
},
|
},
|
||||||
|
|||||||
13
main.lua
13
main.lua
@@ -26,8 +26,11 @@ mapCam={
|
|||||||
--for auto zooming when enter/leave scene
|
--for auto zooming when enter/leave scene
|
||||||
}
|
}
|
||||||
scr={x=0,y=0,w=0,h=0,rad=0,k=1}--wid,hei,radius,scale K
|
scr={x=0,y=0,w=0,h=0,rad=0,k=1}--wid,hei,radius,scale K
|
||||||
|
|
||||||
customSel={1,22,1,1,7,3,1,1,8,4,1,1,1}
|
customSel={1,22,1,1,7,3,1,1,8,4,1,1,1}
|
||||||
preField={h=20}for i=1,20 do preField[i]={0,0,0,0,0,0,0,0,0,0}end
|
preField={h=20}for i=1,20 do preField[i]={0,0,0,0,0,0,0,0,0,0}end
|
||||||
|
preBag={1,2,3,4,5,6,7}
|
||||||
|
|
||||||
players={alive={},human=0}
|
players={alive={},human=0}
|
||||||
--blockSkin,blockSkinMini={},{}--redefined in SKIN.change
|
--blockSkin,blockSkinMini={},{}--redefined in SKIN.change
|
||||||
|
|
||||||
@@ -47,11 +50,11 @@ SKIN= require("parts/skin")
|
|||||||
PLY= require("parts/player")
|
PLY= require("parts/player")
|
||||||
AIfunc= require("parts/ai")
|
AIfunc= require("parts/ai")
|
||||||
Modes= require("parts/modes")
|
Modes= require("parts/modes")
|
||||||
|
TICK= require("parts/tick")
|
||||||
|
|
||||||
|
|
||||||
--load files & settings
|
--load files & settings
|
||||||
modeRanks={}for i=1,#Modes do modeRanks[i]=false assert(i==Modes[i].id,"ModeID error:"..i)end
|
modeRanks={sprint_10=0}
|
||||||
modeRanks[1]=0
|
|
||||||
|
|
||||||
local fs=love.filesystem
|
local fs=love.filesystem
|
||||||
if fs.getInfo("keymap.dat")then fs.remove("keymap.dat")end
|
if fs.getInfo("keymap.dat")then fs.remove("keymap.dat")end
|
||||||
@@ -149,6 +152,12 @@ while #modeRanks>73 do
|
|||||||
table.remove(modeRanks)
|
table.remove(modeRanks)
|
||||||
end
|
end
|
||||||
if modeRanks[73]==6 then modeRanks[73]=0 end
|
if modeRanks[73]==6 then modeRanks[73]=0 end
|
||||||
|
if modeRanks[1]then--rename key of modeRanks
|
||||||
|
local L=modeRanks
|
||||||
|
for i=1,#L do
|
||||||
|
L[Modes[i].name],L[i]=L[i]
|
||||||
|
end
|
||||||
|
end
|
||||||
if setting.skin[10]==5 then
|
if setting.skin[10]==5 then
|
||||||
setting.skin[10],setting.skin[11]=1,5
|
setting.skin[10],setting.skin[11]=1,5
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -12,6 +12,7 @@ return{
|
|||||||
end
|
end
|
||||||
modeEnv._20G=modeEnv.drop==0
|
modeEnv._20G=modeEnv.drop==0
|
||||||
modeEnv.oncehold=customSel[6]==1
|
modeEnv.oncehold=customSel[6]==1
|
||||||
|
modeEnv.bag=preBag
|
||||||
PLY.newPlayer(1,340,15)
|
PLY.newPlayer(1,340,15)
|
||||||
local L=modeEnv.opponent
|
local L=modeEnv.opponent
|
||||||
if L~=0 then
|
if L~=0 then
|
||||||
|
|||||||
@@ -31,6 +31,7 @@ return{
|
|||||||
end
|
end
|
||||||
modeEnv._20G=modeEnv.drop==0
|
modeEnv._20G=modeEnv.drop==0
|
||||||
modeEnv.oncehold=customSel[6]==1
|
modeEnv.oncehold=customSel[6]==1
|
||||||
|
modeEnv.bag=preBag
|
||||||
modeEnv.target=0
|
modeEnv.target=0
|
||||||
PLY.newPlayer(1,340,15)
|
PLY.newPlayer(1,340,15)
|
||||||
local L=modeEnv.opponent
|
local L=modeEnv.opponent
|
||||||
|
|||||||
@@ -36,7 +36,7 @@ return{
|
|||||||
color=color.red,
|
color=color.red,
|
||||||
env={
|
env={
|
||||||
noFly=true,
|
noFly=true,
|
||||||
mindas=6,minarr=1,
|
das=6,arr=1,
|
||||||
_20G=true,
|
_20G=true,
|
||||||
lock=death_lock[1],
|
lock=death_lock[1],
|
||||||
wait=death_wait[1],
|
wait=death_wait[1],
|
||||||
|
|||||||
@@ -12,12 +12,12 @@ local function score(P)
|
|||||||
if MD.point%100==99 then SFX.play("blip_1")end
|
if MD.point%100==99 then SFX.play("blip_1")end
|
||||||
if int(MD.point*.01)>MD.event then
|
if int(MD.point*.01)>MD.event then
|
||||||
local s=MD.event+1;MD.event=s--level up!
|
local s=MD.event+1;MD.event=s--level up!
|
||||||
P:showTextF(text.stage(s),0,-120,80,"fly")
|
|
||||||
local E=P.gameEnv
|
local E=P.gameEnv
|
||||||
if s<4 then--first 300
|
if s<4 then--first 300
|
||||||
if s~=1 then E.lock=E.lock-1 end
|
if s~=1 then E.lock=E.lock-1 end
|
||||||
if s~=2 then E.wait=E.wait-1 end
|
if s~=2 then E.wait=E.wait-1 end
|
||||||
if s~=3 then E.fall=E.fall-1 end
|
if s~=3 then E.fall=E.fall-1 end
|
||||||
|
P:showTextF(text.stage(s),0,-120,80,"fly")
|
||||||
elseif s<10 then
|
elseif s<10 then
|
||||||
if s==4 or s==7 then E.das=E.das-1 end
|
if s==4 or s==7 then E.das=E.das-1 end
|
||||||
s=s%3
|
s=s%3
|
||||||
@@ -25,6 +25,7 @@ local function score(P)
|
|||||||
elseif s==1 then E.wait=E.wait-1
|
elseif s==1 then E.wait=E.wait-1
|
||||||
elseif s==2 then E.fall=E.fall-1
|
elseif s==2 then E.fall=E.fall-1
|
||||||
end
|
end
|
||||||
|
P:showTextF(text.stage(s),0,-120,80,"fly")
|
||||||
else
|
else
|
||||||
MD.point,MD.event=1000,9
|
MD.point,MD.event=1000,9
|
||||||
P:win("finish")
|
P:win("finish")
|
||||||
@@ -37,7 +38,7 @@ return{
|
|||||||
color=color.lightGrey,
|
color=color.lightGrey,
|
||||||
env={
|
env={
|
||||||
noFly=true,
|
noFly=true,
|
||||||
mindas=5,minarr=1,
|
das=5,arr=1,
|
||||||
_20G=true,lock=12,
|
_20G=true,lock=12,
|
||||||
wait=10,fall=10,
|
wait=10,fall=10,
|
||||||
dropPiece=score,
|
dropPiece=score,
|
||||||
|
|||||||
@@ -5,7 +5,7 @@ local function check_tsd(P)
|
|||||||
elseif #P.clearedRow>0 then
|
elseif #P.clearedRow>0 then
|
||||||
P.modeData.event=P.modeData.event+1
|
P.modeData.event=P.modeData.event+1
|
||||||
if P.modeData.event==20 then
|
if P.modeData.event==20 then
|
||||||
P:win()
|
P:win("finish")
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -205,7 +205,7 @@ return{
|
|||||||
end
|
end
|
||||||
local best={x=1,dir=0,hold=false,score=-1e99}
|
local best={x=1,dir=0,hold=false,score=-1e99}
|
||||||
for ifhold=0,P.gameEnv.hold and 1 or 0 do
|
for ifhold=0,P.gameEnv.hold and 1 or 0 do
|
||||||
local bn=ifhold==0 and P.cur.id or P.hd.id>0 and P.hd.id or P.next[1].id
|
local bn=ifhold==0 and P.cur.id or P.hd and P.hd.id or P.next[1]and P.next[1].id
|
||||||
for dir=0,dirCount[bn] do--each dir
|
for dir=0,dirCount[bn] do--each dir
|
||||||
local cb=blocks[bn][dir]
|
local cb=blocks[bn][dir]
|
||||||
for cx=1,11-#cb[1]do--each pos
|
for cx=1,11-#cb[1]do--each pos
|
||||||
|
|||||||
@@ -63,7 +63,7 @@ s={
|
|||||||
clear={},clear_B={},clear_S={0,0,0,0,0},
|
clear={},clear_B={},clear_S={0,0,0,0,0},
|
||||||
spin={},spin_B={},spin_S={0,0,0,0,0},
|
spin={},spin_B={},spin_S={0,0,0,0,0},
|
||||||
pc=0,hpc=0,b2b=0,b3b=0,score=0,
|
pc=0,hpc=0,b2b=0,b3b=0,score=0,
|
||||||
lastPlay=1,--last played mode ID
|
lastPlay="sprint_10",--last played mode ID
|
||||||
}
|
}
|
||||||
for i=1,25 do
|
for i=1,25 do
|
||||||
s.clear_B[i]=0
|
s.clear_B[i]=0
|
||||||
|
|||||||
@@ -97,7 +97,7 @@ function pasteBoard()
|
|||||||
p=p+1
|
p=p+1
|
||||||
end
|
end
|
||||||
|
|
||||||
for y=fY+1,20 do
|
for y=fY,20 do
|
||||||
for x=1,10 do
|
for x=1,10 do
|
||||||
preField[y][x]=0
|
preField[y][x]=0
|
||||||
end
|
end
|
||||||
@@ -211,6 +211,7 @@ function resumeGame()
|
|||||||
SCN.swapTo("play","none")
|
SCN.swapTo("play","none")
|
||||||
end
|
end
|
||||||
function loadGame(M)
|
function loadGame(M)
|
||||||
|
print(M)
|
||||||
--rec={}
|
--rec={}
|
||||||
stat.lastPlay=M
|
stat.lastPlay=M
|
||||||
curMode=Modes[M]
|
curMode=Modes[M]
|
||||||
|
|||||||
@@ -70,7 +70,7 @@ local XspinList={
|
|||||||
local TRS={
|
local TRS={
|
||||||
{
|
{
|
||||||
[01]={{-1, 0},{-1, 1},{ 0,-2},{-1, 2},{ 0, 1}},
|
[01]={{-1, 0},{-1, 1},{ 0,-2},{-1, 2},{ 0, 1}},
|
||||||
[10]={{ 1, 0},{ 1,-1},{ 0, 2},{ 1,-1},{ 1,-2}},
|
[10]={{ 1, 0},{ 1,-1},{ 0, 2},{ 1,-2},{ 1,-2}},
|
||||||
[03]={{ 1, 0},{ 1, 1},{ 0,-2},{ 1,-1},{ 1,-2}},
|
[03]={{ 1, 0},{ 1, 1},{ 0,-2},{ 1,-1},{ 1,-2}},
|
||||||
[30]={{-1, 0},{-1,-1},{ 0, 2},{-1, 2},{ 0,-1}},
|
[30]={{-1, 0},{-1,-1},{ 0, 2},{-1, 2},{ 0,-1}},
|
||||||
[12]={{ 1, 0},{ 1,-1},{ 0, 2},{ 1, 2}},
|
[12]={{ 1, 0},{ 1,-1},{ 0, 2},{ 1, 2}},
|
||||||
@@ -91,7 +91,7 @@ local TRS={
|
|||||||
[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, 0},{ 0,-2},{-1,-2}},
|
||||||
[32]={{-1, 0},{-1,-1},{ 0, 2},{-1, 2},{-1, 1}},
|
[32]={{-1, 0},{-1,-1},{ 0, 2},{-1, 2},{-1, 1}},
|
||||||
[23]={{ 1, 0},{ 1,-1},{ 1, 1},{ 0,-2},{ 1,-2},{ 1,-1}},
|
[23]={{ 1, 0},{ 1,-1},{ 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}},
|
||||||
@@ -104,9 +104,9 @@ local TRS={
|
|||||||
[03]={{ 1, 0},{ 1, 1},{ 0,-2},{ 1,-2}},
|
[03]={{ 1, 0},{ 1, 1},{ 0,-2},{ 1,-2}},
|
||||||
[30]={{-1, 0},{-1,-1},{ 0, 2},{-1, 2},{ 0,-1}},
|
[30]={{-1, 0},{-1,-1},{ 0, 2},{-1, 2},{ 0,-1}},
|
||||||
[12]={{ 1, 0},{ 1,-1},{ 0,-1},{-1,-1},{ 0, 2},{ 1, 2}},
|
[12]={{ 1, 0},{ 1,-1},{ 0,-1},{-1,-1},{ 0, 2},{ 1, 2}},
|
||||||
[21]={{-1, 0},{-1, 1},{ 0,-2},{-1,-2},{ 1, 1}},
|
[21]={{-1, 0},{ 0,-2},{-1,-2},{ 1, 1}},
|
||||||
[32]={{-1, 0},{-1,-1},{ 0,-1},{ 1,-1},{ 0, 2},{-1, 2}},
|
[32]={{-1, 0},{-1,-1},{ 0,-1},{ 1,-1},{ 0, 2},{-1, 2}},
|
||||||
[23]={{ 1, 0},{ 1, 1},{ 0,-2},{ 1,-2},{-1, 1}},
|
[23]={{ 1, 0},{ 0,-2},{ 1,-2},{-1, 1}},
|
||||||
[02]={{-1, 0},{ 1, 0},{ 0, 1}},
|
[02]={{-1, 0},{ 1, 0},{ 0, 1}},
|
||||||
[20]={{ 1, 0},{-1, 0},{ 0,-1}},
|
[20]={{ 1, 0},{-1, 0},{ 0,-1}},
|
||||||
[13]={{ 0,-1},{ 0, 1},{ 1, 0},{ 0,-2},{ 0, 2}},
|
[13]={{ 0,-1},{ 0, 1},{ 1, 0},{ 0,-2},{ 0, 2}},
|
||||||
@@ -217,10 +217,10 @@ local TRS={
|
|||||||
[10]={{ 1, 0},{ 1,-1}},
|
[10]={{ 1, 0},{ 1,-1}},
|
||||||
[03]={{ 1, 0},{ 1, 1},{ 0,-2},{ 1,-1},{ 1,-2}},
|
[03]={{ 1, 0},{ 1, 1},{ 0,-2},{ 1,-1},{ 1,-2}},
|
||||||
[30]={{-1, 0},{-1,-1}},
|
[30]={{-1, 0},{-1,-1}},
|
||||||
[12]={{ 1, 0},{ 1, 1}},
|
[12]={{ 1, 0},{ 1,-1},{ 1, 1}},
|
||||||
[21]={{-1,-1},{-1, 1}},
|
[21]={{-1,-1},{-1, 1},{-1,-1}},
|
||||||
[32]={{-1, 0},{-1, 1}},
|
[32]={{-1, 0},{-1,-1},{-1, 1}},
|
||||||
[23]={{ 1,-1},{ 1, 1}},
|
[23]={{ 1,-1},{ 1, 1},{ 1,-1}},
|
||||||
[02]={{ 0, 1}},
|
[02]={{ 0, 1}},
|
||||||
[20]={{ 0,-1}},
|
[20]={{ 0,-1}},
|
||||||
[13]={{ 0,-1},{ 0, 1},{ 1, 0}},
|
[13]={{ 0,-1},{ 0, 1},{ 1, 0}},
|
||||||
@@ -286,7 +286,7 @@ local TRS={
|
|||||||
{},--L5
|
{},--L5
|
||||||
{
|
{
|
||||||
[01]={{-1, 0},{-1, 1},{ 1, 0},{-1, 2},{-1,-1},{ 0,-3},{ 0, 1}},
|
[01]={{-1, 0},{-1, 1},{ 1, 0},{-1, 2},{-1,-1},{ 0,-3},{ 0, 1}},
|
||||||
[10]={{-1, 0},{ 1,-1},{-1, 0},{ 1,-2},{ 1, 1},{ 0, 3},{ 0, 1}},
|
[10]={{-1, 0},{ 1,-1},{ 1, 0},{ 1,-2},{ 1, 1},{ 0, 3},{ 0, 1}},
|
||||||
[03]={{ 0,-1},{ 1,-1},{-1, 0},{ 1, 1},{ 0,-2},{ 1,-2},{ 0,-3},{ 1,-3},{-1, 1}},
|
[03]={{ 0,-1},{ 1,-1},{-1, 0},{ 1, 1},{ 0,-2},{ 1,-2},{ 0,-3},{ 1,-3},{-1, 1}},
|
||||||
[30]={{ 0, 1},{-1, 1},{ 1, 0},{-1,-1},{ 0, 2},{-1, 2},{ 0, 3},{-1, 3},{ 1,-1}},
|
[30]={{ 0, 1},{-1, 1},{ 1, 0},{-1,-1},{ 0, 2},{-1, 2},{ 0, 3},{-1, 3},{ 1,-1}},
|
||||||
[12]={{ 1, 0},{ 1,-1},{ 0,-1},{ 1,-2},{ 0,-2},{ 1, 1},{-1, 0},{ 0, 2},{ 1, 2}},
|
[12]={{ 1, 0},{ 1,-1},{ 0,-1},{ 1,-2},{ 0,-2},{ 1, 1},{-1, 0},{ 0, 2},{ 1, 2}},
|
||||||
|
|||||||
@@ -15,7 +15,7 @@ customRange={
|
|||||||
fall={0,1,2,3,4,5,6,7,8,10,15,20,30,60},
|
fall={0,1,2,3,4,5,6,7,8,10,15,20,30,60},
|
||||||
next={0,1,2,3,4,5,6},
|
next={0,1,2,3,4,5,6},
|
||||||
hold={true,false,true},
|
hold={true,false,true},
|
||||||
sequence={"bag","his4","rnd"},
|
sequence={"bag","his4","rnd","loop","fixed"},
|
||||||
visible={"show","time","fast","none"},
|
visible={"show","time","fast","none"},
|
||||||
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},
|
||||||
|
|||||||
146
parts/modes.lua
146
parts/modes.lua
@@ -1,85 +1,85 @@
|
|||||||
return{
|
return{
|
||||||
{"sprint_10", id=1, x=0, y=0, size=35,shape=1,icon="sprint", unlock={2,3}},
|
{name="sprint_10", x=0, y=0, size=35,shape=1,icon="sprint", unlock={"sprint_20","sprint_40"}},
|
||||||
{"sprint_20", id=2, x=-300, y=0, size=45,shape=1,icon="sprint", unlock={}},
|
{name="sprint_20", x=-300, y=0, size=45,shape=1,icon="sprint", unlock={}},
|
||||||
{"sprint_40", id=3, x=0, y=-400, size=55,shape=1,icon="sprint", unlock={4,9,71,72,73}},
|
{name="sprint_40", x=0, y=-400, size=55,shape=1,icon="sprint", unlock={"sprint_100","marathon_normal","custom_clear","custom_puzzle","sprintPenta"}},
|
||||||
{"sprint_100", id=4, x=-200, y=-400, size=45,shape=1,icon="sprint", unlock={5,7}},
|
{name="sprint_100", x=-200, y=-400, size=45,shape=1,icon="sprint", unlock={"sprint_400","drought_normal"}},
|
||||||
{"sprint_400", id=5, x=-400, y=-400, size=35,shape=1,icon="sprint", unlock={6}},
|
{name="sprint_400", x=-400, y=-400, size=35,shape=1,icon="sprint", unlock={"sprint_1000"}},
|
||||||
{"sprint_1000", id=6, x=-600, y=-400, size=35,shape=1,icon="sprint", unlock={}},
|
{name="sprint_1000", x=-600, y=-400, size=35,shape=1,icon="sprint", unlock={}},
|
||||||
{"drought_normal", id=7, x=-400, y=-200, size=35,shape=1,icon="noI", unlock={8}},
|
{name="drought_normal", x=-400, y=-200, size=35,shape=1,icon="noI", unlock={"drought_lunatic"}},
|
||||||
{"drought_lunatic", id=8, x=-600, y=-200, size=35,shape=1,icon="mess", unlock={}},
|
{name="drought_lunatic", x=-600, y=-200, size=35,shape=1,icon="mess", unlock={}},
|
||||||
{"marathon_normal", id=9, x=0, y=-600, size=55,shape=1,icon="flag", unlock={10,11,22,31,36,37,48,67}},
|
{name="marathon_normal", x=0, y=-600, size=55,shape=1,icon="flag", unlock={"marathon_hard","solo_1","round_1","blind_easy","classic_fast","survivor_easy","bigbang","zen"}},
|
||||||
{"marathon_hard", id=10, x=0, y=-800, size=45,shape=1,icon="flag", unlock={27}},
|
{name="marathon_hard", x=0, y=-800, size=45,shape=1,icon="flag", unlock={"master_beginner"}},
|
||||||
{"solo_1", id=11, x=-300, y=-1000, size=35,shape=1,icon="solo", unlock={12}},
|
{name="solo_1", x=-300, y=-1000, size=35,shape=1,icon="solo", unlock={"solo_2"}},
|
||||||
{"solo_2", id=12, x=-500, y=-1000, size=35,shape=1,icon="solo", unlock={13}},
|
{name="solo_2", x=-500, y=-1000, size=35,shape=1,icon="solo", unlock={"solo_3"}},
|
||||||
{"solo_3", id=13, x=-700, y=-1000, size=35,shape=1,icon="solo", unlock={14,16}},
|
{name="solo_3", x=-700, y=-1000, size=35,shape=1,icon="solo", unlock={"solo_4","techmino49_easy"}},
|
||||||
{"solo_4", id=14, x=-900, y=-1000, size=35,shape=1,icon="solo", unlock={15}},
|
{name="solo_4", x=-900, y=-1000, size=35,shape=1,icon="solo", unlock={"solo_5"}},
|
||||||
{"solo_5", id=15, x=-1100, y=-1000, size=35,shape=1,icon="solo", unlock={}},
|
{name="solo_5", x=-1100, y=-1000, size=35,shape=1,icon="solo", unlock={}},
|
||||||
{"techmino49_easy", id=16, x=-900, y=-1200, size=35,shape=1,icon="royale", unlock={17,19}},
|
{name="techmino49_easy", x=-900, y=-1200, size=35,shape=1,icon="royale", unlock={"techmino49_hard","techmino99_easy"}},
|
||||||
{"techmino49_hard", id=17, x=-900, y=-1400, size=35,shape=1,icon="royale", unlock={18}},
|
{name="techmino49_hard", x=-900, y=-1400, size=35,shape=1,icon="royale", unlock={"techmino49_ultimate"}},
|
||||||
{"techmino49_ultimate", id=18, x=-900, y=-1600, size=35,shape=1,icon="royale", unlock={}},
|
{name="techmino49_ultimate", x=-900, y=-1600, size=35,shape=1,icon="royale", unlock={}},
|
||||||
|
|
||||||
{"techmino99_easy", id=19, x=-1100, y=-1400, size=35,shape=1,icon="royale", unlock={20}},
|
{name="techmino99_easy", x=-1100, y=-1400, size=35,shape=1,icon="royale", unlock={"techmino99_hard"}},
|
||||||
{"techmino99_hard", id=20, x=-1100, y=-1600, size=35,shape=1,icon="royale", unlock={21}},
|
{name="techmino99_hard", x=-1100, y=-1600, size=35,shape=1,icon="royale", unlock={"techmino99_ultimate"}},
|
||||||
{"techmino99_ultimate", id=21, x=-1100, y=-1800, size=35,shape=1,icon="royale", unlock={}},
|
{name="techmino99_ultimate", x=-1100, y=-1800, size=35,shape=1,icon="royale", unlock={}},
|
||||||
{"round_1", id=22, x=-300, y=-800, size=35,shape=1,icon="round", unlock={23}},
|
{name="round_1", x=-300, y=-800, size=35,shape=1,icon="round", unlock={"round_2"}},
|
||||||
{"round_2", id=23, x=-500, y=-800, size=35,shape=1,icon="round", unlock={24}},
|
{name="round_2", x=-500, y=-800, size=35,shape=1,icon="round", unlock={"round_3"}},
|
||||||
{"round_3", id=24, x=-700, y=-800, size=35,shape=1,icon="round", unlock={25}},
|
{name="round_3", x=-700, y=-800, size=35,shape=1,icon="round", unlock={"round_4"}},
|
||||||
{"round_4", id=25, x=-900, y=-800, size=35,shape=1,icon="round", unlock={26}},
|
{name="round_4", x=-900, y=-800, size=35,shape=1,icon="round", unlock={"round_5"}},
|
||||||
{"round_5", id=26, x=-1100, y=-800, size=35,shape=1,icon="round", unlock={}},
|
{name="round_5", x=-1100, y=-800, size=35,shape=1,icon="round", unlock={}},
|
||||||
|
|
||||||
{"master_beginner", id=27, x=0, y=-1000, size=35,shape=1,icon="master", unlock={28}},
|
{name="master_beginner", x=0, y=-1000, size=35,shape=1,icon="master", unlock={"master_adavnce"}},
|
||||||
{"master_adavnce", id=28, x=0, y=-1200, size=35,shape=1,icon="master", unlock={29,30}},
|
{name="master_adavnce", x=0, y=-1200, size=35,shape=1,icon="master", unlock={"master_final","GM"}},
|
||||||
{"master_final", id=29, x=0, y=-1400, size=40,shape=2,icon="master", unlock={}},
|
{name="master_final", x=0, y=-1400, size=40,shape=2,icon="master", unlock={}},
|
||||||
{"GM", id=30, x=150, y=-1500, size=35,shape=1,icon="master", unlock={}},
|
{name="GM", x=150, y=-1500, size=35,shape=1,icon="master", unlock={}},
|
||||||
|
|
||||||
{"blind_easy", id=31, x=150, y=-700, size=35,shape=1,icon="blind", unlock={32}},
|
{name="blind_easy", x=150, y=-700, size=35,shape=1,icon="blind", unlock={"blind_normal"}},
|
||||||
{"blind_normal", id=32, x=150, y=-800, size=35,shape=1,icon="blind", unlock={33}},
|
{name="blind_normal", x=150, y=-800, size=35,shape=1,icon="blind", unlock={"blind_hard"}},
|
||||||
{"blind_hard", id=33, x=150, y=-900, size=35,shape=1,icon="blind", unlock={34}},
|
{name="blind_hard", x=150, y=-900, size=35,shape=1,icon="blind", unlock={"blind_lunatic"}},
|
||||||
{"blind_lunatic", id=34, x=150, y=-1000, size=35,shape=1,icon="blind", unlock={35}},
|
{name="blind_lunatic", x=150, y=-1000, size=35,shape=1,icon="blind", unlock={"blind_ultimate"}},
|
||||||
{"blind_ultimate", id=35, x=150, y=-1100, size=35,shape=1,icon="blind", unlock={}},
|
{name="blind_ultimate", x=150, y=-1100, size=35,shape=1,icon="blind", unlock={}},
|
||||||
|
|
||||||
{"classic_fast", id=36, x=-300, y=-1200, size=40,shape=2,icon="classic", unlock={}},
|
{name="classic_fast", x=-300, y=-1200, size=40,shape=2,icon="classic", unlock={}},
|
||||||
|
|
||||||
{"survivor_easy", id=37, x=300, y=-600, size=35,shape=1,icon="survivor",unlock={38}},
|
{name="survivor_easy", x=300, y=-600, size=35,shape=1,icon="survivor", unlock={"survivor_normal"}},
|
||||||
{"survivor_normal", id=38, x=500, y=-600, size=35,shape=1,icon="survivor",unlock={39,42,44,46}},
|
{name="survivor_normal", x=500, y=-600, size=35,shape=1,icon="survivor", unlock={"survivor_hard","attacker_hard","defender_normal","dig_hard"}},
|
||||||
{"survivor_hard", id=39, x=700, y=-600, size=35,shape=1,icon="survivor",unlock={40}},
|
{name="survivor_hard", x=700, y=-600, size=35,shape=1,icon="survivor", unlock={"survivor_lunatic"}},
|
||||||
{"survivor_lunatic", id=40, x=900, y=-600, size=35,shape=1,icon="survivor",unlock={41}},
|
{name="survivor_lunatic", x=900, y=-600, size=35,shape=1,icon="survivor", unlock={"survivor_ultimate"}},
|
||||||
{"survivor_ultimate", id=41, x=1100, y=-600, size=35,shape=1,icon="survivor",unlock={}},
|
{name="survivor_ultimate", x=1100, y=-600, size=35,shape=1,icon="survivor", unlock={}},
|
||||||
{"attacker_hard", id=42, x=300, y=-800, size=35,shape=1,icon="attacker",unlock={43}},
|
{name="attacker_hard", x=300, y=-800, size=35,shape=1,icon="attacker", unlock={"attacker_ultimate"}},
|
||||||
{"attacker_ultimate", id=43, x=300, y=-1000, size=35,shape=1,icon="attacker",unlock={}},
|
{name="attacker_ultimate", x=300, y=-1000, size=35,shape=1,icon="attacker", unlock={}},
|
||||||
|
|
||||||
{"defender_normal", id=44, x=500, y=-800, size=35,shape=1,icon="defender",unlock={45}},
|
{name="defender_normal", x=500, y=-800, size=35,shape=1,icon="defender", unlock={"defender_lunatic"}},
|
||||||
{"defender_lunatic", id=45, x=500, y=-1000, size=35,shape=1,icon="defender",unlock={}},
|
{name="defender_lunatic", x=500, y=-1000, size=35,shape=1,icon="defender", unlock={}},
|
||||||
|
|
||||||
{"dig_hard", id=46, x=700, y=-800, size=35,shape=1,icon="dig", unlock={47}},
|
{name="dig_hard", x=700, y=-800, size=35,shape=1,icon="dig", unlock={"dig_ultimate"}},
|
||||||
{"dig_ultimate", id=47, x=700, y=-1000, size=35,shape=1,icon="dig", unlock={}},
|
{name="dig_ultimate", x=700, y=-1000, size=35,shape=1,icon="dig", unlock={}},
|
||||||
|
|
||||||
{"bigbang", id=48, x=400, y=-400, size=55,shape=1,icon="bigbang", unlock={49,51,56}},
|
{name="bigbang", x=400, y=-400, size=55,shape=1,icon="bigbang", unlock={"c4wtrain_normal","pctrain_normal","tech_normal"}},
|
||||||
{"c4wtrain_normal", id=49, x=700, y=-400, size=35,shape=1,icon="c4wtrain",unlock={50}},
|
{name="c4wtrain_normal", x=700, y=-400, size=35,shape=1,icon="c4wtrain", unlock={"c4wtrain_lunatic"}},
|
||||||
{"c4wtrain_lunatic", id=50, x=900, y=-400, size=35,shape=1,icon="c4wtrain",unlock={}},
|
{name="c4wtrain_lunatic", x=900, y=-400, size=35,shape=1,icon="c4wtrain", unlock={}},
|
||||||
|
|
||||||
{"pctrain_normal", id=51, x=700, y=-200, size=35,shape=1,icon="pctrain", unlock={52,53}},
|
{name="pctrain_normal", x=700, y=-200, size=35,shape=1,icon="pctrain", unlock={"pctrain_lunatic","pcchallenge_normal"}},
|
||||||
{"pctrain_lunatic", id=52, x=900, y=-200, size=35,shape=1,icon="pctrain", unlock={}},
|
{name="pctrain_lunatic", x=900, y=-200, size=35,shape=1,icon="pctrain", unlock={}},
|
||||||
{"pcchallenge_normal", id=53, x=800, y=-100, size=35,shape=1,icon="pcchallenge",unlock={54}},
|
{name="pcchallenge_normal", x=800, y=-100, size=35,shape=1,icon="pcchallenge", unlock={"pcchallenge_hard"}},
|
||||||
{"pcchallenge_hard", id=54, x=1000, y=-100, size=35,shape=1,icon="pcchallenge",unlock={55}},
|
{name="pcchallenge_hard", x=1000, y=-100, size=35,shape=1,icon="pcchallenge", unlock={"pcchallenge_lunatic"}},
|
||||||
{"pcchallenge_lunatic", id=55, x=1200, y=-100, size=35,shape=1,icon="pcchallenge",unlock={}},
|
{name="pcchallenge_lunatic",x=1200, y=-100, size=35,shape=1,icon="pcchallenge", unlock={}},
|
||||||
{"tech_normal", id=56, x=400, y=-100, size=35,shape=1,icon="tech", unlock={57,58}},
|
{name="tech_normal", x=400, y=-100, size=35,shape=1,icon="tech", unlock={"tech_normal+","tech_hard"}},
|
||||||
{"tech_normal+", id=57, x=650, y=150, size=35,shape=1,icon="tech", unlock={64}},
|
{name="tech_normal+", x=650, y=150, size=35,shape=1,icon="tech", unlock={"tsd_easy"}},
|
||||||
{"tech_hard", id=58, x=400, y=50, size=35,shape=1,icon="tech", unlock={59,60}},
|
{name="tech_hard", x=400, y=50, size=35,shape=1,icon="tech", unlock={"tech_hard+","tech_lunatic"}},
|
||||||
{"tech_hard+", id=59, x=250, y=50, size=35,shape=1,icon="tech", unlock={}},
|
{name="tech_hard+", x=250, y=50, size=35,shape=1,icon="tech", unlock={}},
|
||||||
{"tech_lunatic", id=60, x=400, y=200, size=35,shape=1,icon="tech", unlock={61,62}},
|
{name="tech_lunatic", x=400, y=200, size=35,shape=1,icon="tech", unlock={"tech_lunatic+","tech_ultimate"}},
|
||||||
{"tech_lunatic+", id=61, x=250, y=200, size=35,shape=1,icon="tech", unlock={}},
|
{name="tech_lunatic+", x=250, y=200, size=35,shape=1,icon="tech", unlock={}},
|
||||||
{"tech_ultimate", id=62, x=400, y=350, size=35,shape=1,icon="tech", unlock={63}},
|
{name="tech_ultimate", x=400, y=350, size=35,shape=1,icon="tech", unlock={"tech_ultimate+"}},
|
||||||
{"tech_ultimate+", id=63, x=250, y=350, size=35,shape=1,icon="tech", unlock={}},
|
{name="tech_ultimate+", x=250, y=350, size=35,shape=1,icon="tech", unlock={}},
|
||||||
{"tsd_easy", id=64, x=800, y=200, size=35,shape=1,icon="tsd", unlock={65}},
|
{name="tsd_easy", x=800, y=200, size=35,shape=1,icon="tsd", unlock={"tsd_hard"}},
|
||||||
{"tsd_hard", id=65, x=1000, y=200, size=35,shape=1,icon="tsd", unlock={66}},
|
{name="tsd_hard", x=1000, y=200, size=35,shape=1,icon="tsd", unlock={"tsd_ultimate"}},
|
||||||
{"tsd_ultimate", id=66, x=1200, y=200, size=35,shape=1,icon="tsd", unlock={}},
|
{name="tsd_ultimate", x=1200, y=200, size=35,shape=1,icon="tsd", unlock={}},
|
||||||
|
|
||||||
{"zen", id=67, x=-900, y=-600, size=35,shape=1,icon="zen", unlock={68,69,70}},
|
{name="zen", x=-900, y=-600, size=35,shape=1,icon="zen", unlock={"ultra","infinite","infinite_dig"}},
|
||||||
{"ultra", id=68, x=-1100, y=-400, size=35,shape=1,icon="ultra", unlock={}},
|
{name="ultra", x=-1100, y=-400, size=35,shape=1,icon="ultra", unlock={}},
|
||||||
{"infinite", id=69, x=-900, y=-400, size=35,shape=1,icon="infinite",unlock={}},
|
{name="infinite", x=-900, y=-400, size=35,shape=1,icon="infinite", unlock={}},
|
||||||
{"infinite_dig", id=70, x=-1100, y=-600, size=35,shape=1,icon="infinite_dig",unlock={}},
|
{name="infinite_dig", x=-1100, y=-600, size=35,shape=1,icon="infinite_dig",unlock={}},
|
||||||
{"custom_clear", id=71, x=200, y=-350, size=45,shape=3,icon="custom", unlock={}},
|
{name="custom_clear", x=200, y=-350, size=45,shape=3,icon="custom", unlock={}},
|
||||||
{"custom_puzzle", id=72, x=200, y=-200, size=45,shape=3,icon="puzzle", unlock={}},
|
{name="custom_puzzle", x=200, y=-200, size=45,shape=3,icon="puzzle", unlock={}},
|
||||||
{"sprintPenta", id=73, x=-200, y=-200, size=45,shape=3,icon="sprint", unlock={}},
|
{name="sprintPenta", x=-200, y=-200, size=45,shape=3,icon="sprint", unlock={}},
|
||||||
}
|
}
|
||||||
562
parts/player.lua
562
parts/player.lua
@@ -87,17 +87,22 @@ local CCblockID={4,3,6,5,1,2,0}
|
|||||||
local freshPrepare={
|
local freshPrepare={
|
||||||
none=NULL,
|
none=NULL,
|
||||||
bag=function(P)
|
bag=function(P)
|
||||||
local bag0,bag=P.gameEnv.bag,{}
|
local bag=P.gameEnv.bag
|
||||||
for i=1,#bag0 do bag[i]=bag0[i]end
|
local L
|
||||||
repeat P:getNext(rem(bag,rnd(#bag)))until not bag[1]
|
repeat
|
||||||
|
L={}for i=1,#bag do L[i]=i end
|
||||||
|
repeat P:getNext(bag[rem(L,rnd(#L))])until not L[1]
|
||||||
|
until #P.next>5
|
||||||
end,
|
end,
|
||||||
his4=function(P)
|
his4=function(P)
|
||||||
P.his={rnd(7),rnd(7),rnd(7),rnd(7)}
|
local bag=P.gameEnv.bag
|
||||||
|
local L=#bag
|
||||||
|
P.his={bag[rnd(L)],bag[rnd(L)],bag[rnd(L)],bag[rnd(L)]}
|
||||||
for _=1,6 do
|
for _=1,6 do
|
||||||
local i
|
local i
|
||||||
local j=0
|
local j=0
|
||||||
repeat
|
repeat
|
||||||
i=rnd(7)
|
i=bag[rnd(L)]
|
||||||
j=j+1
|
j=j+1
|
||||||
until i~=P.his[1]and i~=P.his[2]and i~=P.his[3]and i~=P.his[4]or j==6
|
until i~=P.his[1]and i~=P.his[2]and i~=P.his[3]and i~=P.his[4]or j==6
|
||||||
P:getNext(i)
|
P:getNext(i)
|
||||||
@@ -105,13 +110,33 @@ local freshPrepare={
|
|||||||
end
|
end
|
||||||
end,
|
end,
|
||||||
rnd=function(P)
|
rnd=function(P)
|
||||||
P:getNext(rnd(7))
|
local bag=P.gameEnv.bag
|
||||||
|
local L=#bag
|
||||||
|
P:getNext(bag[rnd(L)])
|
||||||
for i=1,5 do
|
for i=1,5 do
|
||||||
|
local count=0
|
||||||
local i
|
local i
|
||||||
repeat i=rnd(7)until i~=P.next[#P.next].id
|
repeat
|
||||||
|
i=bag[rnd(L)]
|
||||||
|
count=count+1
|
||||||
|
until i~=P.next[#P.next].id or count>=L
|
||||||
P:getNext(i)
|
P:getNext(i)
|
||||||
end
|
end
|
||||||
end,
|
end,
|
||||||
|
loop=function(P)
|
||||||
|
local bag=P.gameEnv.bag
|
||||||
|
repeat
|
||||||
|
for i=1,#bag do
|
||||||
|
P:getNext(bag[i])
|
||||||
|
end
|
||||||
|
until #P.next>5
|
||||||
|
end,
|
||||||
|
fixed=function(P)
|
||||||
|
local bag=P.gameEnv.bag
|
||||||
|
for i=1,#bag do
|
||||||
|
P:getNext(bag[i])
|
||||||
|
end
|
||||||
|
end,
|
||||||
}
|
}
|
||||||
local freshMethod={
|
local freshMethod={
|
||||||
none=NULL,
|
none=NULL,
|
||||||
@@ -124,10 +149,12 @@ local freshMethod={
|
|||||||
end,
|
end,
|
||||||
his4=function(P)
|
his4=function(P)
|
||||||
if #P.next<6 then
|
if #P.next<6 then
|
||||||
|
local bag=P.gameEnv.bag
|
||||||
|
local L=#bag
|
||||||
for n=1,4 do
|
for n=1,4 do
|
||||||
local j,i=0
|
local j,i=0
|
||||||
repeat
|
repeat
|
||||||
i=rnd(7)
|
i=bag[rnd(L)]
|
||||||
j=j+1
|
j=j+1
|
||||||
until i~=P.his[1]and i~=P.his[2]and i~=P.his[3]and i~=P.his[4]or j==4
|
until i~=P.his[1]and i~=P.his[2]and i~=P.his[3]and i~=P.his[4]or j==4
|
||||||
P:getNext(i)
|
P:getNext(i)
|
||||||
@@ -137,13 +164,29 @@ local freshMethod={
|
|||||||
end,
|
end,
|
||||||
rnd=function(P)
|
rnd=function(P)
|
||||||
if #P.next<6 then
|
if #P.next<6 then
|
||||||
for i=1,3 do
|
local bag=P.gameEnv.bag
|
||||||
|
local L=#bag
|
||||||
|
for i=1,4 do
|
||||||
|
local count=0
|
||||||
local i
|
local i
|
||||||
repeat i=rnd(7)until i~=P.next[#P.next].id
|
repeat
|
||||||
|
i=bag[rnd(L)]
|
||||||
|
count=count+1
|
||||||
|
until i~=P.next[#P.next].id or count>=L
|
||||||
P:getNext(i)
|
P:getNext(i)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end,
|
end,
|
||||||
|
loop=function(P)
|
||||||
|
local bag=P.gameEnv.bag
|
||||||
|
for i=1,#bag do
|
||||||
|
P:getNext(bag[i])
|
||||||
|
end
|
||||||
|
end,
|
||||||
|
fixed=function(P)
|
||||||
|
if P.cur or P.hd then return end
|
||||||
|
P:lose()
|
||||||
|
end,
|
||||||
}
|
}
|
||||||
local spinName={"zspin","sspin","jspin","lspin","tspin","ospin","ispin","zspin","sspin","pspin","qspin","fspin","espin","tspin","uspin","vspin","wspin","xspin","jspin","lspin","rspin","yspin","hspin","nspin","ispin"}
|
local spinName={"zspin","sspin","jspin","lspin","tspin","ospin","ispin","zspin","sspin","pspin","qspin","fspin","espin","tspin","uspin","vspin","wspin","xspin","jspin","lspin","rspin","yspin","hspin","nspin","ispin"}
|
||||||
local clearName={"single","double","triple","techrash","pentcrash"}
|
local clearName={"single","double","triple","techrash","pentcrash"}
|
||||||
@@ -220,7 +263,7 @@ end
|
|||||||
local function updateTasks(P)
|
local function updateTasks(P)
|
||||||
local L=P.tasks
|
local L=P.tasks
|
||||||
for i=#L,1,-1 do
|
for i=#L,1,-1 do
|
||||||
if L[i].code(P,L[i].data)then end
|
if L[i].code(P,L[i].data)then rem(L,i)end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
local function Pupdate_alive(P,dt)
|
local function Pupdate_alive(P,dt)
|
||||||
@@ -281,7 +324,7 @@ local function Pupdate_alive(P,dt)
|
|||||||
mov=mov+1
|
mov=mov+1
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
if mov>=das and P.gameEnv.shakeFX and P:ifoverlap(P.cur.bk,P.curX+1,P.curY)then
|
if mov>=das and P.gameEnv.shakeFX and P.cur and P:ifoverlap(P.cur.bk,P.curX+1,P.curY)then
|
||||||
P.fieldOff.vx=P.gameEnv.shakeFX*.5
|
P.fieldOff.vx=P.gameEnv.shakeFX*.5
|
||||||
end
|
end
|
||||||
else
|
else
|
||||||
@@ -306,7 +349,7 @@ local function Pupdate_alive(P,dt)
|
|||||||
mov=mov+1
|
mov=mov+1
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
if mov>=das and P.gameEnv.shakeFX and P:ifoverlap(P.cur.bk,P.curX-1,P.curY)then
|
if mov>=das and P.gameEnv.shakeFX and P.cur and P:ifoverlap(P.cur.bk,P.curX-1,P.curY)then
|
||||||
P.fieldOff.vx=-P.gameEnv.shakeFX*.5
|
P.fieldOff.vx=-P.gameEnv.shakeFX*.5
|
||||||
end
|
end
|
||||||
else
|
else
|
||||||
@@ -353,42 +396,44 @@ local function Pupdate_alive(P,dt)
|
|||||||
P.waiting=P.waiting-1
|
P.waiting=P.waiting-1
|
||||||
goto stop
|
goto stop
|
||||||
end
|
end
|
||||||
if P.curY~=P.y_img then
|
if P.cur then
|
||||||
local D=P.dropDelay
|
if P.curY~=P.y_img then
|
||||||
if D>1 then
|
local D=P.dropDelay
|
||||||
P.dropDelay=D-1
|
if D>1 then
|
||||||
goto stop
|
P.dropDelay=D-1
|
||||||
end
|
goto stop
|
||||||
if D==1 then
|
end
|
||||||
P.curY=P.curY-1
|
if D==1 then
|
||||||
else
|
P.curY=P.curY-1
|
||||||
local _=P.curY-P.y_img--max fall dist
|
|
||||||
D=1/D--fall dist
|
|
||||||
if D<_ then
|
|
||||||
P.curY=P.curY-D
|
|
||||||
assert(P.curY==int(P.curY),"y:"..P.curY.." fall:"..D.." D_env:"..P.gameEnv.drop)
|
|
||||||
else
|
else
|
||||||
P.curY=P.y_img
|
local _=P.curY-P.y_img--max fall dist
|
||||||
|
D=1/D--fall dist
|
||||||
|
if D<_ then
|
||||||
|
P.curY=P.curY-D
|
||||||
|
assert(P.curY==int(P.curY),"y:"..P.curY.." fall:"..D.." D_env:"..P.gameEnv.drop)
|
||||||
|
else
|
||||||
|
P.curY=P.y_img
|
||||||
|
end
|
||||||
end
|
end
|
||||||
end
|
P.spinLast=false
|
||||||
P.spinLast=false
|
if P.y_img~=P.curY then
|
||||||
if P.y_img~=P.curY then
|
P.dropDelay=P.gameEnv.drop
|
||||||
P.dropDelay=P.gameEnv.drop
|
elseif P.AI_mode=="CC"then
|
||||||
elseif P.AI_mode=="CC"then
|
P.AI_needFresh=true
|
||||||
P.AI_needFresh=true
|
if not P.AIdata._20G and P.gameEnv.drop<P.AI_delay0*.5 then
|
||||||
if not P.AIdata._20G and P.gameEnv.drop<P.AI_delay0*.5 then
|
CC_switch20G(P)
|
||||||
CC_switch20G(P)
|
end
|
||||||
|
end
|
||||||
|
if P.freshTime<=P.gameEnv.freshLimit then
|
||||||
|
P.lockDelay=P.gameEnv.lock
|
||||||
|
end
|
||||||
|
else
|
||||||
|
P.lockDelay=P.lockDelay-1
|
||||||
|
if P.lockDelay>=0 then goto stop end
|
||||||
|
P:drop()
|
||||||
|
if P.AI_mode=="CC"then
|
||||||
|
P.AI_needFresh=true
|
||||||
end
|
end
|
||||||
end
|
|
||||||
if P.freshTime<=P.gameEnv.freshLimit then
|
|
||||||
P.lockDelay=P.gameEnv.lock
|
|
||||||
end
|
|
||||||
else
|
|
||||||
P.lockDelay=P.lockDelay-1
|
|
||||||
if P.lockDelay>=0 then goto stop end
|
|
||||||
P:drop()
|
|
||||||
if P.AI_mode=="CC"then
|
|
||||||
P.AI_needFresh=true
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
::stop::
|
::stop::
|
||||||
@@ -422,11 +467,6 @@ local function Pupdate_dead(P,dt)
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
::stop::
|
::stop::
|
||||||
if P.endCounter<40 then
|
|
||||||
for j=1,#P.field do for i=1,10 do
|
|
||||||
if P.visTime[j][i]<20 then P.visTime[j][i]=P.visTime[j][i]+.5 end
|
|
||||||
end end--Make field visible
|
|
||||||
end
|
|
||||||
if P.b2b1>0 then P.b2b1=max(0,P.b2b1*.92-1)end
|
if P.b2b1>0 then P.b2b1=max(0,P.b2b1*.92-1)end
|
||||||
updateFXs(P,dt)
|
updateFXs(P,dt)
|
||||||
updateTasks(P)
|
updateTasks(P)
|
||||||
@@ -499,15 +539,12 @@ local function drawFXs(P)
|
|||||||
end--clearFX
|
end--clearFX
|
||||||
end
|
end
|
||||||
local function Pdraw_norm(P)
|
local function Pdraw_norm(P)
|
||||||
local curColor=P.cur.color
|
|
||||||
local _
|
local _
|
||||||
gc.push("transform")
|
gc.push("transform")
|
||||||
gc.translate(P.x,P.y)gc.scale(P.size)
|
gc.translate(P.x,P.y)gc.scale(P.size)
|
||||||
--Camera
|
--Camera
|
||||||
gc.setColor(0,0,0,.6)gc.rectangle("fill",0,0,600,690)
|
|
||||||
gc.setLineWidth(7)gc.setColor(frameColor[P.strength])gc.rectangle("line",0,0,600,690)
|
|
||||||
--Boarder
|
|
||||||
gc.translate(150+P.fieldOff.x,70+P.fieldOff.y)
|
gc.translate(150+P.fieldOff.x,70+P.fieldOff.y)
|
||||||
|
gc.setColor(0,0,0,.6)gc.rectangle("fill",0,-10,300,610)
|
||||||
if P.gameEnv.grid then
|
if P.gameEnv.grid then
|
||||||
gc.setLineWidth(1)
|
gc.setLineWidth(1)
|
||||||
gc.setColor(1,1,1,.2)
|
gc.setColor(1,1,1,.2)
|
||||||
@@ -517,7 +554,9 @@ local function Pdraw_norm(P)
|
|||||||
gc.line(0,y,300,y)
|
gc.line(0,y,300,y)
|
||||||
end
|
end
|
||||||
end--Grid
|
end--Grid
|
||||||
|
gc.setLineWidth(2)
|
||||||
gc.translate(0,P.fieldBeneath)
|
gc.translate(0,P.fieldBeneath)
|
||||||
|
gc.setScissor(scr.x+(P.absFieldX+P.fieldOff.x)*scr.k,scr.y+(P.absFieldY+P.fieldOff.y)*scr.k,300*P.size*scr.k,610*P.size*scr.k)
|
||||||
if P.falling==-1 then
|
if P.falling==-1 then
|
||||||
for j=int(P.fieldBeneath/30+1),#P.field do
|
for j=int(P.fieldBeneath/30+1),#P.field do
|
||||||
for i=1,10 do
|
for i=1,10 do
|
||||||
@@ -551,7 +590,8 @@ local function Pdraw_norm(P)
|
|||||||
|
|
||||||
drawFXs(P)
|
drawFXs(P)
|
||||||
|
|
||||||
if P.waiting==-1 then
|
if P.cur and P.waiting==-1 then
|
||||||
|
local curColor=P.cur.color
|
||||||
if P.gameEnv.ghost then
|
if P.gameEnv.ghost then
|
||||||
gc.setColor(1,1,1,.3)
|
gc.setColor(1,1,1,.3)
|
||||||
for i=1,P.r do for j=1,P.c do
|
for i=1,P.r do for j=1,P.c do
|
||||||
@@ -598,94 +638,103 @@ local function Pdraw_norm(P)
|
|||||||
gc.translate(0,dy)
|
gc.translate(0,dy)
|
||||||
end
|
end
|
||||||
::E::
|
::E::
|
||||||
|
gc.setScissor()--In-playField things
|
||||||
gc.translate(0,-P.fieldBeneath)
|
gc.translate(0,-P.fieldBeneath)
|
||||||
gc.setLineWidth(2)
|
gc.setColor(1,1,1)
|
||||||
gc.setColor(1,1,1)
|
gc.rectangle("line",-1,-11,302,612)--Boarder
|
||||||
gc.rectangle("line",-1,-11,302,612)--Draw boarder
|
gc.rectangle("line",301,0,15,601)--AtkBuffer boarder
|
||||||
gc.rectangle("line",301,0,15,601)--Draw atkBuffer boarder
|
gc.rectangle("line",-16,-3,15,604)--B2b bar boarder
|
||||||
local h=0
|
|
||||||
for i=1,#P.atkBuffer do
|
--Buffer line
|
||||||
local A=P.atkBuffer[i]
|
local h=0
|
||||||
local bar=A.amount*30
|
for i=1,#P.atkBuffer do
|
||||||
if h+bar>600 then bar=600-h end
|
local A=P.atkBuffer[i]
|
||||||
if not A.sent then
|
local bar=A.amount*30
|
||||||
if A.time<20 then
|
if h+bar>600 then bar=600-h end
|
||||||
bar=bar*(20*A.time)^.5*.05
|
if not A.sent then
|
||||||
--Appear
|
if A.time<20 then
|
||||||
end
|
bar=bar*(20*A.time)^.5*.05
|
||||||
if A.countdown>0 then
|
--Appear
|
||||||
gc.setColor(attackColor[A.lv][1])
|
end
|
||||||
gc.rectangle("fill",303,599-h,11,-bar+3)
|
if A.countdown>0 then
|
||||||
gc.setColor(attackColor[A.lv][2])
|
gc.setColor(attackColor[A.lv][1])
|
||||||
gc.rectangle("fill",303,599-h+(-bar+3),11,-(-bar+3)*(1-A.countdown/A.cd0))
|
gc.rectangle("fill",303,599-h,11,-bar+3)
|
||||||
--Timing
|
gc.setColor(attackColor[A.lv][2])
|
||||||
|
gc.rectangle("fill",303,599-h+(-bar+3),11,-(-bar+3)*(1-A.countdown/A.cd0))
|
||||||
|
--Timing
|
||||||
|
else
|
||||||
|
local t=math.sin((Timer()-i)*30)*.5+.5
|
||||||
|
local c1,c2=attackColor[A.lv][1],attackColor[A.lv][2]
|
||||||
|
gc.setColor(c1[1]*t+c2[1]*(1-t),c1[2]*t+c2[2]*(1-t),c1[3]*t+c2[3]*(1-t))
|
||||||
|
gc.rectangle("fill",303,599-h,11,-bar+3)
|
||||||
|
--Warning
|
||||||
|
end
|
||||||
else
|
else
|
||||||
local t=math.sin((Timer()-i)*30)*.5+.5
|
gc.setColor(attackColor[A.lv][1])
|
||||||
local c1,c2=attackColor[A.lv][1],attackColor[A.lv][2]
|
bar=bar*(20-A.time)*.05
|
||||||
gc.setColor(c1[1]*t+c2[1]*(1-t),c1[2]*t+c2[2]*(1-t),c1[3]*t+c2[3]*(1-t))
|
gc.rectangle("fill",303,599-h,11,-bar+2)
|
||||||
gc.rectangle("fill",303,599-h,11,-bar+3)
|
--Disappear
|
||||||
--Warning
|
|
||||||
end
|
end
|
||||||
else
|
h=h+bar
|
||||||
gc.setColor(attackColor[A.lv][1])
|
end
|
||||||
bar=bar*(20-A.time)*.05
|
|
||||||
gc.rectangle("fill",303,599-h,11,-bar+2)
|
--B2B indictator
|
||||||
--Disappear
|
local a,b=P.b2b,P.b2b1 if a>b then a,b=b,a end
|
||||||
|
gc.setColor(.8,1,.2)
|
||||||
|
gc.rectangle("fill",-14,599,11,-b*.5)
|
||||||
|
gc.setColor(P.b2b<40 and color.white or P.b2b<=1e3 and color.lightRed or color.lightBlue)
|
||||||
|
gc.rectangle("fill",-14,599,11,-a*.5)
|
||||||
|
gc.setColor(1,1,1)
|
||||||
|
if Timer()%.5<.3 then
|
||||||
|
gc.rectangle("fill",-15,b<40 and 578.5 or 98.5,13,3)
|
||||||
end
|
end
|
||||||
h=h+bar
|
|
||||||
end--Buffer line
|
|
||||||
local a,b=P.b2b,P.b2b1 if a>b then a,b=b,a end
|
|
||||||
gc.setColor(.8,1,.2)
|
|
||||||
gc.rectangle("fill",-14,599,11,-b*.5)
|
|
||||||
gc.setColor(P.b2b<40 and color.white or P.b2b<=1e3 and color.lightRed or color.lightBlue)
|
|
||||||
gc.rectangle("fill",-14,599,11,-a*.5)
|
|
||||||
gc.setColor(1,1,1)
|
|
||||||
if Timer()%.5<.3 then
|
|
||||||
gc.rectangle("fill",-15,b<40 and 578.5 or 98.5,13,3)
|
|
||||||
end
|
|
||||||
gc.rectangle("line",-16,-3,15,604)--Draw b2b bar boarder
|
|
||||||
--B2B indictator
|
|
||||||
gc.translate(-P.fieldOff.x,-P.fieldOff.y)
|
gc.translate(-P.fieldOff.x,-P.fieldOff.y)
|
||||||
|
|
||||||
|
--Draw Hold
|
||||||
if P.gameEnv.hold then
|
if P.gameEnv.hold then
|
||||||
|
gc.setColor(0,0,0,.4)gc.rectangle("fill",-143,36,124,80)
|
||||||
|
gc.setColor(1,1,1)gc.rectangle("line",-143,36,124,80)
|
||||||
mText(drawableText.hold,-81,-15)
|
mText(drawableText.hold,-81,-15)
|
||||||
if P.holded then gc.setColor(.6,.5,.5)end
|
if P.hd then
|
||||||
local B=P.hd.bk
|
if P.holded then gc.setColor(.6,.5,.5)end
|
||||||
for i=1,#B do for j=1,#B[1]do
|
local B=P.hd.bk
|
||||||
if B[i][j]then
|
for i=1,#B do for j=1,#B[1]do
|
||||||
drawPixel(i+17.5-#B*.5,j-2.7-#B[1]*.5,P.hd.color)
|
if B[i][j]then
|
||||||
end
|
drawPixel(i+17.5-#B*.5,j-2.7-#B[1]*.5,P.hd.color)
|
||||||
end end
|
end
|
||||||
end--Hold
|
end end
|
||||||
|
end
|
||||||
gc.setColor(1,1,1)
|
|
||||||
mText(drawableText.next,381,-15)
|
|
||||||
local N=1
|
|
||||||
while N<=P.gameEnv.next and P.next[N]do
|
|
||||||
local b,c=P.next[N].bk,P.next[N].color
|
|
||||||
for i=1,#b do for j=1,#b[1] do
|
|
||||||
if b[i][j]then
|
|
||||||
drawPixel(i+20-2.4*N-#b*.5,j+12.7-#b[1]*.5,c)
|
|
||||||
end
|
|
||||||
end end
|
|
||||||
N=N+1
|
|
||||||
end
|
end
|
||||||
--Next(s)
|
|
||||||
|
|
||||||
|
--Draw Next(s)
|
||||||
|
local N=P.gameEnv.next*72
|
||||||
|
if P.gameEnv.next>0 then
|
||||||
|
gc.setColor(0,0,0,.4)gc.rectangle("fill",319,36,124,N)
|
||||||
|
gc.setColor(1,1,1)gc.rectangle("line",319,36,124,N)
|
||||||
|
mText(drawableText.next,381,-15)
|
||||||
|
N=1
|
||||||
|
while N<=P.gameEnv.next and P.next[N]do
|
||||||
|
local b,c=P.next[N].bk,P.next[N].color
|
||||||
|
for i=1,#b do for j=1,#b[1] do
|
||||||
|
if b[i][j]then
|
||||||
|
drawPixel(i+20-2.4*N-#b*.5,j+12.7-#b[1]*.5,c)
|
||||||
|
end
|
||||||
|
end end
|
||||||
|
N=N+1
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
--Draw Bagline(s)
|
||||||
if P.gameEnv.bagLine then
|
if P.gameEnv.bagLine then
|
||||||
local L=P.gameEnv.bagLen
|
local L=P.gameEnv.bagLen
|
||||||
local C=-P.pieceCount%L--phase
|
local C=-P.pieceCount%L--phase
|
||||||
gc.setColor(.5,.5,.5)
|
gc.setColor(.5,.5,.5)
|
||||||
for i=C,N-1,L do
|
for i=C,N-1,L do
|
||||||
local y=72*i+36
|
local y=72*i+36
|
||||||
gc.line(320,y,442,y)
|
gc.line(321+P.fieldOff.x,y,441,y)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
--BagLine(s)
|
|
||||||
|
|
||||||
gc.setColor(.8,.8,.8)
|
|
||||||
gc.draw(drawableText.modeName,-135,-65)
|
|
||||||
gc.draw(drawableText.levelName,437-drawableText.levelName:getWidth(),-65)
|
|
||||||
gc.setColor(1,1,1)
|
gc.setColor(1,1,1)
|
||||||
if game.frame<180 then
|
if game.frame<180 then
|
||||||
local count=179-game.frame
|
local count=179-game.frame
|
||||||
@@ -715,7 +764,6 @@ local function Pdraw_norm(P)
|
|||||||
gc.rectangle("fill",RCPB[2*P.atkMode-1],RCPB[2*P.atkMode],90,35,8,4)
|
gc.rectangle("fill",RCPB[2*P.atkMode-1],RCPB[2*P.atkMode],90,35,8,4)
|
||||||
end
|
end
|
||||||
gc.setColor(1,1,1,P.swappingAtkMode*.025)
|
gc.setColor(1,1,1,P.swappingAtkMode*.025)
|
||||||
gc.setLineWidth(2)
|
|
||||||
setFont(18)
|
setFont(18)
|
||||||
for i=1,4 do
|
for i=1,4 do
|
||||||
gc.rectangle("line",RCPB[2*i-1],RCPB[2*i],90,35,8,4)
|
gc.rectangle("line",RCPB[2*i-1],RCPB[2*i],90,35,8,4)
|
||||||
@@ -812,7 +860,7 @@ local function Pdraw_demo(P)
|
|||||||
|
|
||||||
drawFXs(P)
|
drawFXs(P)
|
||||||
|
|
||||||
if P.waiting==-1 then
|
if P.cur and P.waiting==-1 then
|
||||||
gc.setColor(1,1,1,.3)
|
gc.setColor(1,1,1,.3)
|
||||||
for i=1,P.r do for j=1,P.c do
|
for i=1,P.r do for j=1,P.c do
|
||||||
if P.cur.bk[i][j]then
|
if P.cur.bk[i][j]then
|
||||||
@@ -828,14 +876,13 @@ local function Pdraw_demo(P)
|
|||||||
end end--Block
|
end end--Block
|
||||||
end
|
end
|
||||||
|
|
||||||
local id=P.hd.id
|
if P.hd then
|
||||||
if id>0 then
|
local id=P.hd.id
|
||||||
_=P.color[id]
|
_=P.color[id]
|
||||||
gc.setColor(_[1],_[2],_[3],.3)
|
gc.setColor(_[1],_[2],_[3],.3)
|
||||||
_=miniBlock[P.hd.id]
|
_=miniBlock[id]
|
||||||
gc.draw(_,15,30,nil,16,nil,0,_:getHeight()*.5)
|
gc.draw(_,15,30,nil,16,nil,0,_:getHeight()*.5)
|
||||||
end
|
end--Hold
|
||||||
--Hold
|
|
||||||
|
|
||||||
local N=1
|
local N=1
|
||||||
while N<=P.gameEnv.next and P.next[N]do
|
while N<=P.gameEnv.next and P.next[N]do
|
||||||
@@ -845,8 +892,7 @@ local function Pdraw_demo(P)
|
|||||||
_=miniBlock[id]
|
_=miniBlock[id]
|
||||||
gc.draw(_,285,40*N-10,nil,16,nil,_:getWidth(),_:getHeight()*.5)
|
gc.draw(_,285,40*N-10,nil,16,nil,_:getWidth(),_:getHeight()*.5)
|
||||||
N=N+1
|
N=N+1
|
||||||
end
|
end--Next
|
||||||
--Next
|
|
||||||
|
|
||||||
gc.setColor(1,1,1)
|
gc.setColor(1,1,1)
|
||||||
gc.translate(-P.fieldOff.x,-P.fieldOff.y)
|
gc.translate(-P.fieldOff.x,-P.fieldOff.y)
|
||||||
@@ -1248,28 +1294,30 @@ function player.spin(P,d,ifpre)
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
function player.resetBlock(P)
|
function player.resetBlock(P)
|
||||||
local id=P.cur.id
|
local C=P.cur
|
||||||
|
local id=C.id
|
||||||
local face=P.gameEnv.face[id]
|
local face=P.gameEnv.face[id]
|
||||||
local sc=scs[id][face]
|
local sc=scs[id][face]
|
||||||
P.sc=sc --spin center
|
P.sc=sc --spin center
|
||||||
P.dir=face --block direction
|
P.dir=face --block direction
|
||||||
P.r,P.c=#P.cur.bk,#P.cur.bk[1] --row/column
|
P.r,P.c=#C.bk,#C.bk[1] --row/column
|
||||||
P.curX=int(6-P.c*.5)
|
P.curX=int(6-P.c*.5)
|
||||||
local y=21+ceil(P.fieldBeneath/30)
|
local y=21+ceil(P.fieldBeneath/30)
|
||||||
P.curY=y
|
P.curY=y
|
||||||
if P.gameEnv.ims and(P.keyPressing[1]and P.movDir==-1 or P.keyPressing[2]and P.movDir==1)and P.moving>=P.gameEnv.das then
|
if P.gameEnv.ims and(P.keyPressing[1]and P.movDir==-1 or P.keyPressing[2]and P.movDir==1)and P.moving>=P.gameEnv.das then
|
||||||
local x=P.curX+P.movDir
|
local x=P.curX+P.movDir
|
||||||
if not P:ifoverlap(P.cur.bk,x,y)then
|
if not P:ifoverlap(C.bk,x,y)then
|
||||||
P.curX=x
|
P.curX=x
|
||||||
end
|
end
|
||||||
end
|
end--IMS
|
||||||
--IMS
|
|
||||||
end
|
end
|
||||||
function player.hold(P,ifpre)
|
function player.hold(P,ifpre)
|
||||||
if not P.holded and (ifpre or P.waiting==-1) and P.gameEnv.hold then
|
if not P.holded and (ifpre or P.waiting==-1) and P.gameEnv.hold then
|
||||||
|
local H,C=P.hd,P.cur
|
||||||
|
if not(H or C)then return end
|
||||||
|
|
||||||
--Finesse check
|
--Finesse check
|
||||||
local H,B=P.hd,P.cur
|
if H and C and H.id==C.id and H.name==C.name or P.ctrlCount>1 then
|
||||||
if H and H.id==B.id and H.name==B.name or P.ctrlCount>1 then
|
|
||||||
P:fineError(1)
|
P:fineError(1)
|
||||||
end
|
end
|
||||||
|
|
||||||
@@ -1277,20 +1325,31 @@ function player.hold(P,ifpre)
|
|||||||
P.spinLast=false
|
P.spinLast=false
|
||||||
P.ctrlCount=0
|
P.ctrlCount=0
|
||||||
P.spinSeq=0
|
P.spinSeq=0
|
||||||
P.cur,P.hd=P.hd,P.cur
|
|
||||||
local hid=P.hd.id
|
|
||||||
P.hd.bk=blocks[hid][P.gameEnv.face[hid]]
|
|
||||||
if P.cur.id==0 then
|
|
||||||
P.cur=rem(P.next,1)
|
|
||||||
P:newNext()
|
|
||||||
P.pieceCount=P.pieceCount+1
|
|
||||||
if P.AI_mode=="CC"then BOT.addNext(P.AI_bot,CCblockID[P.next[P.AIdata.next].id])end
|
|
||||||
end
|
|
||||||
P:resetBlock()
|
|
||||||
|
|
||||||
P:freshgho()
|
P.cur,P.hd=H,C--Swap hold
|
||||||
P.dropDelay,P.lockDelay,P.freshTime=P.gameEnv.drop,P.gameEnv.lock,max(P.freshTime-5,0)
|
|
||||||
if P:ifoverlap(P.cur.bk,P.curX,P.curY)then P:lock()P:lose()end
|
H,C=P.hd,P.cur
|
||||||
|
if H then
|
||||||
|
local hid=P.hd.id
|
||||||
|
P.hd.bk=blocks[hid][P.gameEnv.face[hid]]
|
||||||
|
end
|
||||||
|
if not C then
|
||||||
|
C=rem(P.next,1)
|
||||||
|
P:newNext()
|
||||||
|
if C then
|
||||||
|
P.cur=C
|
||||||
|
P.pieceCount=P.pieceCount+1
|
||||||
|
if P.AI_mode=="CC"then BOT.addNext(P.AI_bot,CCblockID[P.next[P.AIdata.next].id])end
|
||||||
|
else
|
||||||
|
P.holded=false
|
||||||
|
end
|
||||||
|
end
|
||||||
|
if C then
|
||||||
|
P:resetBlock()
|
||||||
|
P:freshgho()
|
||||||
|
P.dropDelay,P.lockDelay,P.freshTime=P.gameEnv.drop,P.gameEnv.lock,max(P.freshTime-5,0)
|
||||||
|
if P:ifoverlap(P.cur.bk,P.curX,P.curY)then P:lock()P:lose()end
|
||||||
|
end
|
||||||
|
|
||||||
if P.human then
|
if P.human then
|
||||||
SFX.play(ifpre and"prehold"or"hold")
|
SFX.play(ifpre and"prehold"or"hold")
|
||||||
@@ -1298,6 +1357,7 @@ function player.hold(P,ifpre)
|
|||||||
P.stat.hold=P.stat.hold+1
|
P.stat.hold=P.stat.hold+1
|
||||||
end
|
end
|
||||||
end
|
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}
|
P.next[#P.next+1]={bk=blocks[n][E.face[n]],id=n,color=E.bone and 12 or E.skin[n],name=n}
|
||||||
@@ -1310,37 +1370,41 @@ function player.popNext(P)--pop next queue to hand
|
|||||||
|
|
||||||
P.cur=rem(P.next,1)
|
P.cur=rem(P.next,1)
|
||||||
P:newNext()
|
P:newNext()
|
||||||
P.pieceCount=P.pieceCount+1
|
if P.cur then
|
||||||
if P.AI_mode=="CC"then BOT.addNext(P.AI_bot,CCblockID[P.next[P.AIdata.next].id])end
|
P.pieceCount=P.pieceCount+1
|
||||||
local _=P.keyPressing
|
if P.AI_mode=="CC"then BOT.addNext(P.AI_bot,CCblockID[P.next[P.AIdata.next].id])end
|
||||||
if _[8]and P.gameEnv.hold and P.gameEnv.ihs then
|
local _=P.keyPressing
|
||||||
P:hold(true)
|
if _[8]and P.gameEnv.hold and P.gameEnv.ihs then
|
||||||
_[8]=false
|
P:hold(true)
|
||||||
else
|
_[8]=false
|
||||||
P:resetBlock()
|
|
||||||
end
|
|
||||||
--IHS
|
|
||||||
P.dropDelay,P.lockDelay,P.freshTime=P.gameEnv.drop,P.gameEnv.lock,0
|
|
||||||
if P.gameEnv.irs then
|
|
||||||
if _[5]then
|
|
||||||
P:spin(2,true)
|
|
||||||
else
|
else
|
||||||
if _[3]then
|
P:resetBlock()
|
||||||
if _[4]then
|
end--IHS
|
||||||
P:spin(2,true)
|
|
||||||
else
|
P.dropDelay,P.lockDelay,P.freshTime=P.gameEnv.drop,P.gameEnv.lock,0
|
||||||
P:spin(1,true)
|
if P.gameEnv.irs then
|
||||||
|
if _[5]then
|
||||||
|
P:spin(2,true)
|
||||||
|
else
|
||||||
|
if _[3]then
|
||||||
|
if _[4]then
|
||||||
|
P:spin(2,true)
|
||||||
|
else
|
||||||
|
P:spin(1,true)
|
||||||
|
end
|
||||||
|
elseif _[4]then
|
||||||
|
P:spin(3,true)
|
||||||
end
|
end
|
||||||
elseif _[4]then
|
|
||||||
P:spin(3,true)
|
|
||||||
end
|
end
|
||||||
|
end--IRS
|
||||||
|
|
||||||
|
if P.cur then
|
||||||
|
if P:ifoverlap(P.cur.bk,P.curX,P.curY)then P:lock()P:lose()end
|
||||||
|
P:freshgho()
|
||||||
end
|
end
|
||||||
|
|
||||||
|
if _[6]then P.act.hardDrop(P)_[6]=false end--IHdS
|
||||||
end
|
end
|
||||||
--IRS
|
|
||||||
if P:ifoverlap(P.cur.bk,P.curX,P.curY)then P:lock()P:lose()end
|
|
||||||
P:freshgho()
|
|
||||||
if _[6]then P.act.hardDrop(P)_[6]=false end
|
|
||||||
--IHdS
|
|
||||||
end
|
end
|
||||||
function player.drop(P)--Place piece
|
function player.drop(P)--Place piece
|
||||||
local _
|
local _
|
||||||
@@ -1783,60 +1847,6 @@ end
|
|||||||
--------------------------</Methods>--------------------------
|
--------------------------</Methods>--------------------------
|
||||||
|
|
||||||
--------------------------<Events>--------------------------
|
--------------------------<Events>--------------------------
|
||||||
local tick={}
|
|
||||||
function tick.finish(P)
|
|
||||||
if SCN.cur~="play"then return true end
|
|
||||||
P.endCounter=P.endCounter+1
|
|
||||||
if P.endCounter>120 then pauseGame()end
|
|
||||||
end
|
|
||||||
function tick.lose(P)
|
|
||||||
P.endCounter=P.endCounter+1
|
|
||||||
if P.endCounter>80 then
|
|
||||||
for i=1,#P.field do
|
|
||||||
for j=1,10 do
|
|
||||||
if P.visTime[i][j]>0 then
|
|
||||||
P.visTime[i][j]=P.visTime[i][j]-1
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
if P.endCounter==120 then
|
|
||||||
for _=#P.field,1,-1 do
|
|
||||||
freeRow.discard(P.field[_])
|
|
||||||
freeRow.discard(P.visTime[_])
|
|
||||||
P.field[_],P.visTime[_]=nil
|
|
||||||
end
|
|
||||||
if #players==1 and SCN.cur=="play"then
|
|
||||||
pauseGame()
|
|
||||||
end
|
|
||||||
return true
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
function tick.throwBadge(data)--{ifAI,Sender,timer}
|
|
||||||
data[3]=data[3]-1
|
|
||||||
if data[3]%4==0 then
|
|
||||||
local S,R=data[2],data[2].lastRecv
|
|
||||||
local x1,y1,x2,y2
|
|
||||||
if S.small then
|
|
||||||
x1,y1=S.centerX,S.centerY
|
|
||||||
else
|
|
||||||
x1,y1=S.x+308*S.size,S.y+450*S.size
|
|
||||||
end
|
|
||||||
if R.small then
|
|
||||||
x2,y2=R.centerX,R.centerY
|
|
||||||
else
|
|
||||||
x2,y2=R.x+66*R.size,R.y+344*R.size
|
|
||||||
end
|
|
||||||
FX_badge[#FX_badge+1]={x1,y1,x2,y2,t=0}
|
|
||||||
--generate badge object
|
|
||||||
|
|
||||||
if not data[1]and data[3]%8==0 then
|
|
||||||
SFX.play("collect")
|
|
||||||
end
|
|
||||||
end
|
|
||||||
if data[3]<=0 then return true end
|
|
||||||
end
|
|
||||||
|
|
||||||
local function gameOver()
|
local function gameOver()
|
||||||
FILE.saveData()
|
FILE.saveData()
|
||||||
local M=curMode
|
local M=curMode
|
||||||
@@ -1845,16 +1855,17 @@ local function gameOver()
|
|||||||
local P=players[1]
|
local P=players[1]
|
||||||
R=R(P)--new rank
|
R=R(P)--new rank
|
||||||
if R then
|
if R then
|
||||||
local r=modeRanks[M.id]--old rank
|
local r=modeRanks[M.name]--old rank
|
||||||
local _
|
local _
|
||||||
if R>r then
|
if R>r then
|
||||||
modeRanks[M.id]=R
|
modeRanks[M.name]=R
|
||||||
_=true
|
_=true
|
||||||
end
|
end
|
||||||
for i=1,#M.unlock do
|
for i=1,#M.unlock do
|
||||||
local m=M.unlock[i]
|
local m=M.unlock[i]
|
||||||
if not modeRanks[m]then
|
local n=Modes[m].name
|
||||||
modeRanks[m]=Modes[m].score and 0 or 6
|
if not modeRanks[n]then
|
||||||
|
modeRanks[n]=Modes[m].score and 0 or 6
|
||||||
_=true
|
_=true
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
@@ -1877,7 +1888,7 @@ local function gameOver()
|
|||||||
D.date=os.date("%Y/%m/%d %H:%M")
|
D.date=os.date("%Y/%m/%d %H:%M")
|
||||||
ins(L,p+1,D)
|
ins(L,p+1,D)
|
||||||
if L[11]then L[11]=nil end
|
if L[11]then L[11]=nil end
|
||||||
FILE.saveRecord(M.saveFileName,L)
|
FILE.saveRecord(M.name,L)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
@@ -1923,8 +1934,9 @@ function player.win(P,result)
|
|||||||
end
|
end
|
||||||
if P.human then
|
if P.human then
|
||||||
gameOver()
|
gameOver()
|
||||||
|
TASK.new(TICK.autoPause,{0})
|
||||||
end
|
end
|
||||||
P:newTask(tick.finish)
|
P:newTask(TICK.finish)
|
||||||
end
|
end
|
||||||
function player.lose(P)
|
function player.lose(P)
|
||||||
if P.life>0 then
|
if P.life>0 then
|
||||||
@@ -1968,7 +1980,7 @@ function player.lose(P)
|
|||||||
end
|
end
|
||||||
P.lastRecv=A
|
P.lastRecv=A
|
||||||
if P.id==1 or A.id==1 then
|
if P.id==1 or A.id==1 then
|
||||||
TASK.new(tick.throwBadge,{A.ai,P,max(3,P.badge)*4})
|
TASK.new(TICK.throwBadge,{A.ai,P,max(3,P.badge)*4})
|
||||||
end
|
end
|
||||||
freshMostBadge()
|
freshMostBadge()
|
||||||
end
|
end
|
||||||
@@ -2001,9 +2013,10 @@ function player.lose(P)
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
gameOver()
|
gameOver()
|
||||||
P:newTask(#players>1 and tick.lose or tick.finish)
|
P:newTask(#players>1 and TICK.lose or TICK.finish)
|
||||||
|
TASK.new(TICK.autoPause,{0})
|
||||||
else
|
else
|
||||||
P:newTask(tick.lose)
|
P:newTask(TICK.lose)
|
||||||
end
|
end
|
||||||
if #players.alive==1 then
|
if #players.alive==1 then
|
||||||
players.alive[1]:win()
|
players.alive[1]:win()
|
||||||
@@ -2030,7 +2043,7 @@ function player.act.moveLeft(P,auto)
|
|||||||
P.keyPressing[1]=false
|
P.keyPressing[1]=false
|
||||||
end
|
end
|
||||||
elseif P.control and P.waiting==-1 then
|
elseif P.control and P.waiting==-1 then
|
||||||
if 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
|
||||||
P.curX=P.curX-1
|
P.curX=P.curX-1
|
||||||
local y0=P.curY
|
local y0=P.curY
|
||||||
P:freshgho()
|
P:freshgho()
|
||||||
@@ -2056,7 +2069,7 @@ function player.act.moveRight(P,auto)
|
|||||||
P.keyPressing[2]=false
|
P.keyPressing[2]=false
|
||||||
end
|
end
|
||||||
elseif P.control and P.waiting==-1 then
|
elseif P.control and P.waiting==-1 then
|
||||||
if 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
|
||||||
P.curX=P.curX+1
|
P.curX=P.curX+1
|
||||||
local y0=P.curY
|
local y0=P.curY
|
||||||
P:freshgho()
|
P:freshgho()
|
||||||
@@ -2072,21 +2085,21 @@ function player.act.moveRight(P,auto)
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
function player.act.rotRight(P)
|
function player.act.rotRight(P)
|
||||||
if P.control and P.waiting==-1 then
|
if P.control and P.waiting==-1 and P.cur then
|
||||||
P.ctrlCount=P.ctrlCount+1
|
P.ctrlCount=P.ctrlCount+1
|
||||||
P:spin(1)
|
P:spin(1)
|
||||||
P.keyPressing[3]=false
|
P.keyPressing[3]=false
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
function player.act.rotLeft(P)
|
function player.act.rotLeft(P)
|
||||||
if P.control and P.waiting==-1 then
|
if P.control and P.waiting==-1 and P.cur then
|
||||||
P.ctrlCount=P.ctrlCount+1
|
P.ctrlCount=P.ctrlCount+1
|
||||||
P:spin(3)
|
P:spin(3)
|
||||||
P.keyPressing[4]=false
|
P.keyPressing[4]=false
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
function player.act.rot180(P)
|
function player.act.rot180(P)
|
||||||
if P.control and P.waiting==-1 then
|
if P.control and P.waiting==-1 and P.cur then
|
||||||
P.ctrlCount=P.ctrlCount+2
|
P.ctrlCount=P.ctrlCount+2
|
||||||
P:spin(2)
|
P:spin(2)
|
||||||
P.keyPressing[5]=false
|
P.keyPressing[5]=false
|
||||||
@@ -2098,7 +2111,7 @@ 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==-1 then
|
elseif P.control and P.waiting==-1 and P.cur then
|
||||||
if P.curY~=P.y_img then
|
if P.curY~=P.y_img then
|
||||||
if P.gameEnv.dropFX then
|
if P.gameEnv.dropFX then
|
||||||
P:createDropFX(P.curX,P.curY+1,P.curX+P.c-1,P.y_img+P.r-1)
|
P:createDropFX(P.curX,P.curY+1,P.curX+P.c-1,P.y_img+P.r-1)
|
||||||
@@ -2125,7 +2138,7 @@ function player.act.softDrop(P)
|
|||||||
end
|
end
|
||||||
else
|
else
|
||||||
P.downing=1
|
P.downing=1
|
||||||
if P.control and P.waiting==-1 then
|
if P.control and P.waiting==-1 and P.cur then
|
||||||
if P.curY~=P.y_img then
|
if P.curY~=P.y_img then
|
||||||
P.curY=P.curY-1
|
P.curY=P.curY-1
|
||||||
P.spinLast=false
|
P.spinLast=false
|
||||||
@@ -2143,12 +2156,12 @@ function player.act.func(P)
|
|||||||
end
|
end
|
||||||
function player.act.restart(P)
|
function player.act.restart(P)
|
||||||
if P.gameEnv.quickR or game.frame<180 then
|
if P.gameEnv.quickR or game.frame<180 then
|
||||||
TASK.clear("play")
|
TASK.removeTask_code(TICK.autoPause)
|
||||||
resetPartGameData()
|
resetPartGameData()
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
function player.act.insLeft(P,auto)
|
function player.act.insLeft(P,auto)
|
||||||
if P.gameEnv.nofly then return end
|
if P.gameEnv.nofly or not P.cur then return end
|
||||||
local x0,y0=P.curX,P.curY
|
local x0,y0=P.curX,P.curY
|
||||||
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
|
P.curX=P.curX-1
|
||||||
@@ -2171,7 +2184,7 @@ function player.act.insLeft(P,auto)
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
function player.act.insRight(P,auto)
|
function player.act.insRight(P,auto)
|
||||||
if P.gameEnv.nofly then return end
|
if P.gameEnv.nofly or not P.cur then return end
|
||||||
local x0,y0=P.curX,P.curY
|
local x0,y0=P.curX,P.curY
|
||||||
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
|
P.curX=P.curX+1
|
||||||
@@ -2194,7 +2207,7 @@ function player.act.insRight(P,auto)
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
function player.act.insDown(P)
|
function player.act.insDown(P)
|
||||||
if P.curY~=P.y_img then
|
if P.curY~=P.y_img and P.cur then
|
||||||
if P.gameEnv.dropFX then
|
if P.gameEnv.dropFX then
|
||||||
P:createDropFX(P.curX,P.curY+1,P.curX+P.c-1,P.y_img+P.r-1)
|
P:createDropFX(P.curX,P.curY+1,P.curX+P.c-1,P.y_img+P.r-1)
|
||||||
end
|
end
|
||||||
@@ -2205,14 +2218,14 @@ function player.act.insDown(P)
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
function player.act.down1(P)
|
function player.act.down1(P)
|
||||||
if P.curY~=P.y_img then
|
if P.curY~=P.y_img and P.cur then
|
||||||
P.curY=P.curY-1
|
P.curY=P.curY-1
|
||||||
P.spinLast=false
|
P.spinLast=false
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
function player.act.down4(P)
|
function player.act.down4(P)
|
||||||
for _=1,4 do
|
for _=1,4 do
|
||||||
if P.curY~=P.y_img then
|
if P.curY~=P.y_img and P.cur then
|
||||||
P.curY=P.curY-1
|
P.curY=P.curY-1
|
||||||
P.spinLast=false
|
P.spinLast=false
|
||||||
else
|
else
|
||||||
@@ -2221,34 +2234,36 @@ function player.act.down4(P)
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
function player.act.down10(P)
|
function player.act.down10(P)
|
||||||
for _=1,10 do
|
if P.cur then
|
||||||
if P.curY~=P.y_img then
|
for _=1,10 do
|
||||||
P.curY=P.curY-1
|
if P.curY~=P.y_img then
|
||||||
P.spinLast=false
|
P.curY=P.curY-1
|
||||||
else
|
P.spinLast=false
|
||||||
break
|
else
|
||||||
|
break
|
||||||
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
function player.act.dropLeft(P)
|
function player.act.dropLeft(P)
|
||||||
if P.gameEnv.nofly then return end
|
if P.gameEnv.nofly or not P.cur then return end
|
||||||
P.act.insLeft(P)
|
P.act.insLeft(P)
|
||||||
P.act.hardDrop(P)
|
P.act.hardDrop(P)
|
||||||
end
|
end
|
||||||
function player.act.dropRight(P)
|
function player.act.dropRight(P)
|
||||||
if P.gameEnv.nofly then return end
|
if P.gameEnv.nofly or not P.cur then return end
|
||||||
P.act.insRight(P)
|
P.act.insRight(P)
|
||||||
P.act.hardDrop(P)
|
P.act.hardDrop(P)
|
||||||
end
|
end
|
||||||
function player.act.addLeft(P)
|
function player.act.addLeft(P)
|
||||||
if P.gameEnv.nofly then return end
|
if P.gameEnv.nofly or not P.cur then return end
|
||||||
P.act.insLeft(P)
|
P.act.insLeft(P)
|
||||||
P.act.insDown(P)
|
P.act.insDown(P)
|
||||||
P.act.insRight(P)
|
P.act.insRight(P)
|
||||||
P.act.hardDrop(P)
|
P.act.hardDrop(P)
|
||||||
end
|
end
|
||||||
function player.act.addRight(P)
|
function player.act.addRight(P)
|
||||||
if P.gameEnv.nofly then return end
|
if P.gameEnv.nofly or not P.cur then return end
|
||||||
P.act.insRight(P)
|
P.act.insRight(P)
|
||||||
P.act.insDown(P)
|
P.act.insDown(P)
|
||||||
P.act.insLeft(P)
|
P.act.insLeft(P)
|
||||||
@@ -2319,10 +2334,11 @@ local function newEmptyPlayer(id,x,y,size)
|
|||||||
P.showTime=nil
|
P.showTime=nil
|
||||||
P.keepVisible=true
|
P.keepVisible=true
|
||||||
|
|
||||||
P.cur={bk={{}},id=0,color=0,name=0}--shape,shapeID,colorID,nameID
|
--P.cur={bk=matrix[2], id=shapeID, color=colorID, name=nameID}
|
||||||
P.sc,P.dir,P.r,P.c={0,0},0,0,0--IMG.spinCenter,direction,row,col
|
--P.sc,P.dir={0,0},0--spinCenterCoord, direction
|
||||||
|
--P.r,P.c=0,0--row, col
|
||||||
|
--P.hd={...},same as P.cur
|
||||||
P.curX,P.curY,P.y_img=0,0,0--x,y,ghostY
|
P.curX,P.curY,P.y_img=0,0,0--x,y,ghostY
|
||||||
P.hd={bk={{}},id=0,color=0,name=0}
|
|
||||||
P.holded=false
|
P.holded=false
|
||||||
P.next={}
|
P.next={}
|
||||||
|
|
||||||
@@ -2335,8 +2351,7 @@ local function newEmptyPlayer(id,x,y,size)
|
|||||||
P.human=false
|
P.human=false
|
||||||
P.RS=kickList.TRS
|
P.RS=kickList.TRS
|
||||||
|
|
||||||
-- prepareSequence 这个参数在调用prepareSequence时被初始化
|
-- P.newNext=nil--call prepareSequence()to get a function to get new next
|
||||||
P.newNext=nil
|
|
||||||
|
|
||||||
P.keyPressing={}for i=1,12 do P.keyPressing[i]=false end
|
P.keyPressing={}for i=1,12 do P.keyPressing[i]=false end
|
||||||
P.movDir,P.moving,P.downing=0,0,0--last move key,DAS charging,downDAS charging
|
P.movDir,P.moving,P.downing=0,0,0--last move key,DAS charging,downDAS charging
|
||||||
@@ -2391,7 +2406,7 @@ local function applyGameEnv(P)--finish gameEnv processing
|
|||||||
ENV.sdarr=max(ENV.sdarr,ENV.minsdarr)
|
ENV.sdarr=max(ENV.sdarr,ENV.minsdarr)
|
||||||
ENV.next=min(ENV.next,setting.maxNext)
|
ENV.next=min(ENV.next,setting.maxNext)
|
||||||
|
|
||||||
if ENV.sequence~="bag"then
|
if ENV.sequence~="bag"and ENV.sequence~="loop"then
|
||||||
ENV.bagLine=false
|
ENV.bagLine=false
|
||||||
else
|
else
|
||||||
ENV.bagLen=#ENV.bag
|
ENV.bagLen=#ENV.bag
|
||||||
@@ -2543,11 +2558,12 @@ function PLY.newAIPlayer(id,x,y,size,AIdata)
|
|||||||
|
|
||||||
loadGameEnv(P)
|
loadGameEnv(P)
|
||||||
applyGameEnv(P)
|
applyGameEnv(P)
|
||||||
prepareSequence(P)
|
|
||||||
|
|
||||||
local ENV=P.gameEnv
|
local ENV=P.gameEnv
|
||||||
ENV.face={0,0,0,0,0,0,0}
|
ENV.face={0,0,0,0,0,0,0}
|
||||||
ENV.skin={1,5,8,2,10,3,7}
|
ENV.skin={1,5,8,2,10,3,7}
|
||||||
|
prepareSequence(P)
|
||||||
|
|
||||||
P.human=false
|
P.human=false
|
||||||
loadAI(P,AIdata)
|
loadAI(P,AIdata)
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -69,7 +69,7 @@ drawableText={
|
|||||||
win=T(120),finish=T(120),
|
win=T(120),finish=T(120),
|
||||||
lose=T(120),pause=T(120),
|
lose=T(120),pause=T(120),
|
||||||
|
|
||||||
custom=T(80),
|
custom=T(80),sequence=T(80),
|
||||||
setting_game=T(80),setting_video=T(80),setting_sound=T(80),
|
setting_game=T(80),setting_video=T(80),setting_sound=T(80),
|
||||||
setting_control=T(70),setting_skin=T(70),
|
setting_control=T(70),setting_skin=T(70),
|
||||||
preview=T(40),
|
preview=T(40),
|
||||||
|
|||||||
72
parts/tick.lua
Normal file
72
parts/tick.lua
Normal file
@@ -0,0 +1,72 @@
|
|||||||
|
local Tick={}
|
||||||
|
function Tick.finish(P)
|
||||||
|
P.endCounter=P.endCounter+1
|
||||||
|
if P.endCounter<40 then
|
||||||
|
for j=1,#P.field do for i=1,10 do
|
||||||
|
if P.visTime[j][i]<20 then P.visTime[j][i]=P.visTime[j][i]+.5 end
|
||||||
|
end end--Make field visible
|
||||||
|
elseif P.endCounter==60 then
|
||||||
|
return true
|
||||||
|
end
|
||||||
|
end
|
||||||
|
function Tick.lose(P)
|
||||||
|
P.endCounter=P.endCounter+1
|
||||||
|
if P.endCounter<40 then
|
||||||
|
for j=1,#P.field do for i=1,10 do
|
||||||
|
if P.visTime[j][i]<20 then P.visTime[j][i]=P.visTime[j][i]+.5 end
|
||||||
|
end end--Make field visible
|
||||||
|
elseif P.endCounter>80 then
|
||||||
|
for i=1,#P.field do
|
||||||
|
for j=1,10 do
|
||||||
|
if P.visTime[i][j]>0 then
|
||||||
|
P.visTime[i][j]=P.visTime[i][j]-1
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
if P.endCounter==120 then
|
||||||
|
for _=#P.field,1,-1 do
|
||||||
|
freeRow.discard(P.field[_])
|
||||||
|
freeRow.discard(P.visTime[_])
|
||||||
|
P.field[_],P.visTime[_]=nil
|
||||||
|
end
|
||||||
|
return true
|
||||||
|
end
|
||||||
|
end
|
||||||
|
if not modeEnv.royaleMode and #players>1 then
|
||||||
|
P.y=P.y+P.endCounter*.26
|
||||||
|
end
|
||||||
|
end
|
||||||
|
function Tick.throwBadge(data)--{ifAI,Sender,timer}
|
||||||
|
data[3]=data[3]-1
|
||||||
|
if data[3]%4==0 then
|
||||||
|
local S,R=data[2],data[2].lastRecv
|
||||||
|
local x1,y1,x2,y2
|
||||||
|
if S.small then
|
||||||
|
x1,y1=S.centerX,S.centerY
|
||||||
|
else
|
||||||
|
x1,y1=S.x+308*S.size,S.y+450*S.size
|
||||||
|
end
|
||||||
|
if R.small then
|
||||||
|
x2,y2=R.centerX,R.centerY
|
||||||
|
else
|
||||||
|
x2,y2=R.x+66*R.size,R.y+344*R.size
|
||||||
|
end
|
||||||
|
FX_badge[#FX_badge+1]={x1,y1,x2,y2,t=0}
|
||||||
|
--generate badge object
|
||||||
|
|
||||||
|
if not data[1]and data[3]%8==0 then
|
||||||
|
SFX.play("collect")
|
||||||
|
end
|
||||||
|
end
|
||||||
|
if data[3]<=0 then return true end
|
||||||
|
end
|
||||||
|
function Tick.autoPause(data)
|
||||||
|
data[1]=data[1]+1
|
||||||
|
if data[1]==120 then
|
||||||
|
if SCN.cur=="play"then
|
||||||
|
pauseGame()
|
||||||
|
end
|
||||||
|
return true
|
||||||
|
end
|
||||||
|
end
|
||||||
|
return Tick
|
||||||
@@ -21,7 +21,7 @@ local S=[=[
|
|||||||
Thanks!!!
|
Thanks!!!
|
||||||
|
|
||||||
Future outlook:
|
Future outlook:
|
||||||
New mode:
|
New modes:
|
||||||
PUYO
|
PUYO
|
||||||
game tutorial
|
game tutorial
|
||||||
finesse tutorial
|
finesse tutorial
|
||||||
@@ -68,7 +68,6 @@ Future outlook:
|
|||||||
lang setting page
|
lang setting page
|
||||||
game recording
|
game recording
|
||||||
new widgets (joystick etc.)
|
new widgets (joystick etc.)
|
||||||
custom sequence(TTT!)
|
|
||||||
splashing block
|
splashing block
|
||||||
cool backgrounds
|
cool backgrounds
|
||||||
more graphic FXs & 3D features & animations
|
more graphic FXs & 3D features & animations
|
||||||
@@ -76,12 +75,15 @@ Future outlook:
|
|||||||
network game
|
network game
|
||||||
new AI: task-Z
|
new AI: task-Z
|
||||||
|
|
||||||
0.8.25: Custom Sequence Update
|
0.9.0: Custom Sequence Update
|
||||||
new:
|
new:
|
||||||
--TODO: custom sequence
|
custom sequence
|
||||||
|
new sequence type: loop & fixed
|
||||||
many new tips
|
many new tips
|
||||||
better watermark
|
more powerful watermark
|
||||||
|
die animation in non-royale mode
|
||||||
changed:
|
changed:
|
||||||
|
mode name shown at the top of screen
|
||||||
faster & harder attacker-ultimate
|
faster & harder attacker-ultimate
|
||||||
little easier to get S in PC challenge (easy mode)
|
little easier to get S in PC challenge (easy mode)
|
||||||
easier to get S in infinite mode, c4w, PC
|
easier to get S in infinite mode, c4w, PC
|
||||||
|
|||||||
Reference in New Issue
Block a user