界面美化/死亡动画/自定义序列编辑器

This commit is contained in:
MrZ_26
2020-07-15 23:22:44 +08:00
parent 3d22f5d8ca
commit 882b841d3f
35 changed files with 1054 additions and 812 deletions

View File

@@ -39,7 +39,12 @@ local function dumpTable(L,t)
else
k="["..k.."]="
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.."]="
else assert(false,"Error key type!")
end

View File

@@ -146,21 +146,18 @@ function mouseDown.intro(x,y,k)
VOC.play("bye")
SCN.back()
else
SCN.push()
SCN.swapTo("main")
SCN.goto("main")
end
end
function touchDown.intro(id,x,y)
SCN.push()
SCN.swapTo("main")
SCN.goto("main")
end
function keyDown.intro(key)
if key=="escape"then
VOC.play("bye")
SCN.back()
else
SCN.push()
SCN.swapTo("main")
SCN.goto("main")
end
end
@@ -168,17 +165,15 @@ local function onMode(x,y)
local cam=mapCam
x=(cam.x1-640+x)/cam.k1
y=(cam.y1-360+y)/cam.k1
local MM,R=Modes,modeRanks
for _=1,#MM do
if R[_]then
local M=MM[_]
for name,M in next,Modes do
if modeRanks[name]then
local s=M.size
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
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
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
@@ -208,20 +203,22 @@ end
function mouseClick.mode(x,y,k)
local cam=mapCam
local _=cam.sel
if not cam.sel or x<920 then
local __=onMode(x,y)
if _~=__ then
if __ then
if not _ or x<920 then
local SEL=onMode(x,y)
if _~=SEL then
if SEL then
SFX.play("click")
cam.moving=true
_=Modes[__]
_=Modes[SEL]
cam.x=_.x*cam.k+180
cam.y=_.y*cam.k
cam.sel=__
cam.sel=SEL
else
cam.sel=nil
cam.x=cam.x-180
end
elseif _ then
loadGame(_)
end
end
cam.keyCtrl=false
@@ -259,11 +256,9 @@ function keyDown.mode(key)
else
SCN.back()
end
elseif mapCam.sel==71 or mapCam.sel==72 then
if key=="q"then
SCN.push()SCN.swapTo("draw")
elseif key=="e"then
SCN.push()SCN.swapTo("custom")
elseif mapCam.sel=="custom_clear" or mapCam.sel=="custom_puzzle" then
if key=="e"then
SCN.goto("custom")
end
end
end
@@ -333,6 +328,28 @@ function keyDown.custom(key)
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)
mouseMove.draw(x,y)
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")
sceneTemp.last=Timer()
if rnd()<.0626 then
for i=1,#Modes do
local M=Modes[i]
for i=1,#M.unlock do
local m=M.unlock[i]
if not modeRanks[m]then
modeRanks[m]=Modes[m].score and 0 or 6
end
for name,M in next,Modes do
if not modeRanks[name]then
modeRanks[name]=M.score and 0 or 6
end
end
FILE.saveUnlock()
@@ -547,8 +560,7 @@ function keyDown.pause(key)
elseif key=="escape"then
resumeGame()
elseif key=="s"then
SCN.push()
SCN.swapTo("setting_sound")
SCN.goto("setting_sound")
elseif key=="r"then
TASK.clear("play")
mergeStat(stat,players[1].stat)

View File

@@ -2,7 +2,7 @@ local langList={
{
anykey="按任意键继续",
newVersion="检测到更新!存档格式可能更新,设置已重置",
marking="游戏作者:MrZ_26\n任何视频不得出现此水印",
marking="游戏作者:MrZ_26\n任何视频/直播不得出现此水印\n任何视频内声明无效",
lang="中文",
atkModeName={"随机","徽章","击杀","反击"},
royale_remain=function(n)return"剩余 "..n.." 名玩家"end,
@@ -49,12 +49,13 @@ local langList={
fall=nil,
next=nil,
hold={"","","无限"},
sequence={"bag7","his4","随机"},
sequence={"bag","his4","随机","循环","固定"},
visible={"可见","半隐","全隐","瞬隐"},
target={10,20,40,100,200,500,1000,""},
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"},
},
sequence="自定义序列",
softdropdas="软降DAS:",
softdroparr="软降ARR:",
snapLevelName={"无吸附","10px吸附","20px吸附","40px吸附","60px吸附","80px吸附"},
@@ -188,8 +189,7 @@ local langList={
quit="退出",
},
mode={
draw="画图(Q)",
custom="参数(E)",
setting="参数(E)",
start="开始",
back="返回",
},
@@ -210,6 +210,18 @@ local langList={
set3="无尽(3)",
set4="隐形(4)",
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="返回",
},
draw={
@@ -219,6 +231,7 @@ local langList={
demo="不显示×",
copy="复制",
paste="粘贴",
custom="参数",
back="返回",
},
play={
@@ -352,85 +365,85 @@ local langList={
},
},
modes={
{"竞速", "10L", "消除10行"},
{"竞速", "20L", "消除20行"},
{"竞速", "40L", "消除40行"},
{"竞速", "100L", "消除100行"},
{"竞速", "400L", "消除400行"},
{"竞速", "1000L", "消除1000行"},
{"干旱", "100L", "你I没了"},
{"干旱", "100L", "后 妈 发 牌"},
{"马拉松", "普通", "200行加速马拉松"},
{"马拉松", "困难", "200行高速马拉松"},
{"单挑", "简单", "打败AI"},
{"单挑", "普通", "打败AI"},
{"单挑", "困难", "打败AI"},
{"单挑", "疯狂", "打败AI"},
{"单挑", "极限", "打败AI"},
{"49人混战", "简单", "49人混战,活到最后"},
{"49人混战", "困难", "49人混战,活到最后"},
{"49人混战", "极限", "49人混战,活到最后"},
{"99人混战", "简单", "99人混战,活到最后"},
{"99人混战", "困难", "99人混战,活到最后"},
{"99人混战", "极限", "99人混战,活到最后"},
{"回合制", "简单", "下棋模式"},
{"回合制", "普通", "下棋模式"},
{"回合制", "困难", "下棋模式"},
{"回合制", "疯狂", "下棋模式"},
{"回合制", "极限", "下棋模式"},
{"大师", "疯狂", "20G:初心者适用"},
{"大师", "极限", "20G:上级者的挑战"},
{"大师", "终点", "究极20G:无法触及的终点"},
{"宗师", "GM", "成为方块大师"},
{"隐形", "半隐", "不强大脑"},
{"隐形", "全隐", "挺强大脑"},
{"隐形", "瞬隐", "很强大脑"},
{"隐形", "瞬隐+", "最强大脑"},
{"隐形", "", "你准备好了吗"},
{"高速经典", "CTWC", "高速经典"},
{"生存", "简单", "你能存活多久?"},
{"生存", "普通", "你能存活多久?"},
{"生存", "困难", "你能存活多久?"},
{"生存", "疯狂", "你能存活多久?"},
{"生存", "极限", "你能存活多久?"},
{"进攻", "困难", "进攻练习"},
{"进攻", "极限", "进攻练习"},
{"防守", "普通", "防守练习"},
{"防守", "疯狂", "防守练习"},
{"挖掘", "困难", "挖掘练习"},
{"挖掘", "极限", "挖掘练习"},
{"大爆炸", "简单", "All-spin 入门教程\n未制作完成,落块即通"},
{"C4W练习", "普通", "无 限 连 击"},
{"C4W练习", "疯狂", "无 限 连 击"},
{"全清训练", "普通", "简易PC题库,熟悉全清定式的组合"},
{"全清训练", "疯狂", "简易PC题库,熟悉全清定式的组合"},
{"全清挑战", "普通", "100行内刷PC"},
{"全清挑战", "困难", "100行内刷PC"},
{"全清挑战", "疯狂", "100行内刷PC"},
{"科研", "普通", "禁止断B2B"},
{"科研", "普通+", "仅允许spin与PC"},
{"科研", "困难", "禁止断B2B"},
{"科研", "困难+", "仅允许spin与PC"},
{"科研", "疯狂", "禁止断B2B"},
{"科研", "疯狂+", "仅允许spin与PC"},
{"科研", "极限", "强制最简操作"},
{"科研", "极限+", "禁止普通消除,强制最简操作"},
{"TSD挑战", "简单", "你能连续做几个TSD?"},
{"TSD挑战", "困难", "你能连续做几个TSD?"},
{"TSD挑战", "极限", "你能连续做几个TSD?"},
{"", "", "不限时200行"},
{"限时打分", "挑战", "在两分钟内尽可能拿到最多的分数"},
{"无尽", "", "沙盒"},
{"无尽:挖掘", "", "挖呀挖呀挖"},
{"自定义", "普通", "画点什么然后把它消除!"},
{"自定义", "拼图", "画点什么然后把它拼出来吧!"},
{"竞速", "五联块", "伤脑筋十八块"},
["sprint_10"]= {"竞速", "10L", "消除10行"},
["sprint_20"]= {"竞速", "20L", "消除20行"},
["sprint_40"]= {"竞速", "40L", "消除40行"},
["sprint_100"]= {"竞速", "100L", "消除100行"},
["sprint_400"]= {"竞速", "400L", "消除400行"},
["sprint_1000"]= {"竞速", "1000L", "消除1000行"},
["drought_normal"]= {"干旱", "100L", "你I没了"},
["drought_lunatic"]= {"干旱", "100L", "后 妈 发 牌"},
["marathon_normal"]= {"马拉松", "普通", "200行加速马拉松"},
["marathon_hard"]= {"马拉松", "困难", "200行高速马拉松"},
["solo_1"]= {"单挑", "简单", "打败AI"},
["solo_2"]= {"单挑", "普通", "打败AI"},
["solo_3"]= {"单挑", "困难", "打败AI"},
["solo_4"]= {"单挑", "疯狂", "打败AI"},
["solo_5"]= {"单挑", "极限", "打败AI"},
["techmino49_easy"]= {"49人混战", "简单", "49人混战,活到最后"},
["techmino49_hard"]= {"49人混战", "困难", "49人混战,活到最后"},
["techmino49_ultimate"]={"49人混战", "极限", "49人混战,活到最后"},
["techmino99_easy"]= {"99人混战", "简单", "99人混战,活到最后"},
["techmino99_hard"]= {"99人混战", "困难", "99人混战,活到最后"},
["techmino99_ultimate"]={"99人混战", "极限", "99人混战,活到最后"},
["round_1"]= {"回合制", "简单", "下棋模式"},
["round_2"]= {"回合制", "普通", "下棋模式"},
["round_3"]= {"回合制", "困难", "下棋模式"},
["round_4"]= {"回合制", "疯狂", "下棋模式"},
["round_5"]= {"回合制", "极限", "下棋模式"},
["master_beginner"]= {"大师", "疯狂", "20G:初心者适用"},
["master_adavnce"]= {"大师", "极限", "20G:上级者的挑战"},
["master_final"]= {"大师", "终点", "究极20G:无法触及的终点"},
["GM"]= {"宗师", "GM", "成为方块大师"},
["blind_easy"]= {"隐形", "半隐", "不强大脑"},
["blind_normal"]= {"隐形", "全隐", "挺强大脑"},
["blind_hard"]= {"隐形", "瞬隐", "很强大脑"},
["blind_lunatic"]= {"隐形", "瞬隐+", "最强大脑"},
["blind_ultimate"]= {"隐形", "", "你准备好了吗"},
["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"]= {"挖掘", "极限", "挖掘练习"},
["bigbang"]= {"大爆炸", "简单", "All-spin 入门教程\n未制作完成,落块即通"},
["c4wtrain_normal"]= {"C4W练习", "普通", "无 限 连 击"},
["c4wtrain_lunatic"]= {"C4W练习", "疯狂", "无 限 连 击"},
["pctrain_normal"]= {"全清训练", "普通", "简易PC题库,熟悉全清定式的组合"},
["pctrain_lunatic"]= {"全清训练", "疯狂", "简易PC题库,熟悉全清定式的组合"},
["pcchallenge_normal"]= {"全清挑战", "普通", "100行内刷PC"},
["pcchallenge_hard"]= {"全清挑战", "困难", "100行内刷PC"},
["pcchallenge_lunatic"]={"全清挑战", "疯狂", "100行内刷PC"},
["tech_normal"]= {"科研", "普通", "禁止断B2B"},
["tech_normal+"]= {"科研", "普通+", "仅允许spin与PC"},
["tech_hard"]= {"科研", "困难", "禁止断B2B"},
["tech_hard+"]= {"科研", "困难+", "仅允许spin与PC"},
["tech_lunatic"]= {"科研", "疯狂", "禁止断B2B"},
["tech_lunatic+"]= {"科研", "疯狂+", "仅允许spin与PC"},
["tech_ultimate"]= {"科研", "极限", "强制最简操作"},
["tech_ultimate+"]= {"科研", "极限+", "禁止普通消除,强制最简操作"},
["tsd_easy"]= {"TSD挑战", "简单", "你能连续做几个TSD?"},
["tsd_hard"]= {"TSD挑战", "困难", "你能连续做几个TSD?"},
["tsd_ultimate"]= {"TSD挑战", "极限", "你能连续做几个TSD?"},
["zen"]= {"", "", "不限时200行"},
["ultra"]= {"限时打分", "挑战", "在两分钟内尽可能拿到最多的分数"},
["infinite"]= {"无尽", "", "沙盒"},
["infinite_dig"]= {"无尽:挖掘", "", "挖呀挖呀挖"},
["custom_clear"]= {"自定义", "普通", "画点什么然后把它消除!"},
["custom_puzzle"]= {"自定义", "拼图", "画点什么然后把它拼出来吧!"},
["sprintPenta"]= {"竞速", "五联块", "伤脑筋十八块"},
},
},
{
anykey="按任意键继续",
newVersion="检测到更新!存档格式可能更新,设置已重置",
marking="游戏作者:MrZ_26\n任何视频不得出现此水印",
marking="游戏作者:MrZ_26\n任何视频/直播不得出现此水印\n任何视频内声明无效",
lang="全中文",
atkModeName={"随机","徽章","击杀","反击"},
royale_remain=function(n)return"剩余 "..n.." 名玩家"end,
@@ -477,12 +490,13 @@ local langList={
fall=nil,
next=nil,
hold={"","","无限"},
sequence={"bag7","his4","随机"},
sequence={"bag","his4","随机","循环","固定"},
visible={"可见","半隐","全隐","瞬隐"},
target={10,20,40,100,200,500,1000,""},
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"},
},
sequence="自定义序列",
snapLevelName={"无吸附","10像素吸附","20像素吸附","40像素吸附","60像素吸附","80像素吸附"},
setting_game="游戏设置",
setting_video="画面设置",
@@ -613,8 +627,7 @@ local langList={
quit="退出",
},
mode={
draw="画图(Q)",
custom="参数(E)",
setting="参数(E)",
start="开始",
back="返回",
},
@@ -635,6 +648,18 @@ local langList={
set3="无尽(3)",
set4="隐形(4)",
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="返回",
},
draw={
@@ -644,6 +669,7 @@ local langList={
demo="不显示×",
copy="复制",
paste="粘贴",
custom="参数",
back="返回",
},
play={
@@ -777,85 +803,85 @@ local langList={
},
},
modes={
{"竞速", "10行", "消除10行"},
{"竞速", "20行", "消除20行"},
{"竞速", "40行", "消除40行"},
{"竞速", "100行", "消除100行"},
{"竞速", "400行", "消除400行"},
{"竞速", "1000行", "消除1000行"},
{"干旱", "100行", "你I没了"},
{"干旱", "100行", "后 妈 发 牌"},
{"马拉松", "普通", "200行加速马拉松"},
{"马拉松", "困难", "200行高速马拉松"},
{"单挑", "简单", "打败机器人"},
{"单挑", "普通", "打败机器人"},
{"单挑", "困难", "打败机器人"},
{"单挑", "疯狂", "打败机器人"},
{"单挑", "极限", "打败机器人"},
{"49人混战", "简单", "49人混战,活到最后"},
{"49人混战", "困难", "49人混战,活到最后"},
{"49人混战", "极限", "49人混战,活到最后"},
{"99人混战", "简单", "99人混战,活到最后"},
{"99人混战", "困难", "99人混战,活到最后"},
{"99人混战", "极限", "99人混战,活到最后"},
{"回合制", "简单", "下棋模式"},
{"回合制", "普通", "下棋模式"},
{"回合制", "困难", "下棋模式"},
{"回合制", "疯狂", "下棋模式"},
{"回合制", "极限", "下棋模式"},
{"大师", "疯狂", "20G:初心者适用"},
{"大师", "极限", "20G:上级者的挑战"},
{"大师", "终点", "究极20G:无法触及的终点"},
{"宗师", "GM", "成为方块大师"},
{"隐形", "半隐", "不强大脑"},
{"隐形", "全隐", "挺强大脑"},
{"隐形", "瞬隐", "很强大脑"},
{"隐形", "瞬隐+", "超强大脑"},
{"隐形", "", "你准备好了吗"},
{"高速经典", "CTWC", "高速经典"},
{"生存", "简单", "你能存活多久?"},
{"生存", "普通", "你能存活多久?"},
{"生存", "困难", "你能存活多久?"},
{"生存", "疯狂", "你能存活多久?"},
{"生存", "极限", "你能存活多久?"},
{"进攻", "困难", "进攻练习"},
{"进攻", "极限", "进攻练习"},
{"防守", "普通", "防守练习"},
{"防守", "疯狂", "防守练习"},
{"挖掘", "困难", "挖掘练习"},
{"挖掘", "极限", "挖掘练习"},
{"大爆炸", "简单", "All-spin 入门教程\n未制作完成,落块即通"},
{"中四宽练习", "普通", "无 限 连 击"},
{"中四宽练习", "疯狂", "无 限 连 击"},
{"全清训练", "普通", "简易全清题库,熟悉全清定式的组合"},
{"全清训练", "疯狂", "简易全清题库,熟悉全清定式的组合"},
{"全清挑战", "普通", "100行内刷全清"},
{"全清挑战", "困难", "100行内刷全清"},
{"全清挑战", "疯狂", "100行内刷全清"},
{"科研", "普通", "禁止断B2B"},
{"科研", "普通+", "仅允许回旋与全清"},
{"科研", "困难", "禁止断B2B"},
{"科研", "困难+", "仅允许回旋与全清"},
{"科研", "疯狂", "禁止断B2B"},
{"科研", "疯狂+", "仅允许spin与PC"},
{"科研", "极限", "强制最简操作"},
{"科研", "极限+", "禁止普通消除,强制最简操作"},
{"T2挑战", "简单", "你能连续做几个T旋双清?"},
{"T2挑战", "困难", "你能连续做几个T旋双清?"},
{"T2挑战", "极限", "你能连续做几个T旋双清?"},
{"", "", "不限时200行"},
{"限时打分", "挑战", "在两分钟内尽可能拿到最多的分数"},
{"无尽", "", "沙盒"},
{"无尽:挖掘", "", "挖呀挖呀挖"},
{"自定义", "普通", "画点什么然后把它消除!"},
{"自定义", "拼图", "画点什么然后把它拼出来吧!"},
{"竞速", "五联块", "伤脑筋十八块"},
["sprint_10"]= {"竞速", "10行", "消除10行"},
["sprint_20"]= {"竞速", "20行", "消除20行"},
["sprint_40"]= {"竞速", "40行", "消除40行"},
["sprint_100"]= {"竞速", "100行", "消除100行"},
["sprint_400"]= {"竞速", "400行", "消除400行"},
["sprint_1000"]= {"竞速", "1000行", "消除1000行"},
["drought_normal"]= {"干旱", "100行", "你I没了"},
["drought_lunatic"]= {"干旱", "100行", "后 妈 发 牌"},
["marathon_normal"]= {"马拉松", "普通", "200行加速马拉松"},
["marathon_hard"]= {"马拉松", "困难", "200行高速马拉松"},
["solo_1"]= {"单挑", "简单", "打败机器人"},
["solo_2"]= {"单挑", "普通", "打败机器人"},
["solo_3"]= {"单挑", "困难", "打败机器人"},
["solo_4"]= {"单挑", "疯狂", "打败机器人"},
["solo_5"]= {"单挑", "极限", "打败机器人"},
["techmino49_easy"]= {"49人混战", "简单", "49人混战,活到最后"},
["techmino49_hard"]= {"49人混战", "困难", "49人混战,活到最后"},
["techmino49_ultimate"]={"49人混战", "极限", "49人混战,活到最后"},
["techmino99_easy"]= {"99人混战", "简单", "99人混战,活到最后"},
["techmino99_hard"]= {"99人混战", "困难", "99人混战,活到最后"},
["techmino99_ultimate"]={"99人混战", "极限", "99人混战,活到最后"},
["round_1"]= {"回合制", "简单", "下棋模式"},
["round_2"]= {"回合制", "普通", "下棋模式"},
["round_3"]= {"回合制", "困难", "下棋模式"},
["round_4"]= {"回合制", "疯狂", "下棋模式"},
["round_5"]= {"回合制", "极限", "下棋模式"},
["master_beginner"]= {"大师", "疯狂", "20G:初心者适用"},
["master_adavnce"]= {"大师", "极限", "20G:上级者的挑战"},
["master_final"]= {"大师", "终点", "究极20G:无法触及的终点"},
["GM"]= {"宗师", "GM", "成为方块大师"},
["blind_easy"]= {"隐形", "半隐", "不强大脑"},
["blind_normal"]= {"隐形", "全隐", "挺强大脑"},
["blind_hard"]= {"隐形", "瞬隐", "很强大脑"},
["blind_lunatic"]= {"隐形", "瞬隐+", "超强大脑"},
["blind_ultimate"]= {"隐形", "", "你准备好了吗"},
["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"]= {"挖掘", "极限", "挖掘练习"},
["bigbang"]= {"大爆炸", "简单", "All-spin 入门教程\n未制作完成,落块即通"},
["c4wtrain_normal"]= {"中四宽练习", "普通", "无 限 连 击"},
["c4wtrain_lunatic"]= {"中四宽练习", "疯狂", "无 限 连 击"},
["pctrain_normal"]= {"全清训练", "普通", "简易全清题库,熟悉全清定式的组合"},
["pctrain_lunatic"]= {"全清训练", "疯狂", "简易全清题库,熟悉全清定式的组合"},
["pcchallenge_normal"]= {"全清挑战", "普通", "100行内刷全清"},
["pcchallenge_hard"]= {"全清挑战", "困难", "100行内刷全清"},
["pcchallenge_lunatic"]={"全清挑战", "疯狂", "100行内刷全清"},
["tech_normal"]= {"科研", "普通", "禁止断B2B"},
["tech_normal+"]= {"科研", "普通+", "仅允许回旋与全清"},
["tech_hard"]= {"科研", "困难", "禁止断B2B"},
["tech_hard+"]= {"科研", "困难+", "仅允许回旋与全清"},
["tech_lunatic"]= {"科研", "疯狂", "禁止断B2B"},
["tech_lunatic+"]= {"科研", "疯狂+", "仅允许spin与PC"},
["tech_ultimate"]= {"科研", "极限", "强制最简操作"},
["tech_ultimate+"]= {"科研", "极限+", "禁止普通消除,强制最简操作"},
["tsd_easy"]= {"T2挑战", "简单", "你能连续做几个T旋双清?"},
["tsd_hard"]= {"T2挑战", "困难", "你能连续做几个T旋双清?"},
["tsd_ultimate"]= {"T2挑战", "极限", "你能连续做几个T旋双清?"},
["zen"]= {"", "", "不限时200行"},
["ultra"]= {"限时打分", "挑战", "在两分钟内尽可能拿到最多的分数"},
["infinite"]= {"无尽", "", "沙盒"},
["infinite_dig"]= {"无尽:挖掘", "", "挖呀挖呀挖"},
["custom_clear"]= {"自定义", "普通", "画点什么然后把它消除!"},
["custom_puzzle"]= {"自定义", "拼图", "画点什么然后把它拼出来吧!"},
["sprintPenta"]= {"竞速", "五联块", "伤脑筋十八块"},
},
},
{
anykey="Press any button",
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",
atkModeName={"Random","Badges","K.O.s","Attackers"},
royale_remain=function(n)return n.." Players Remaining"end,
@@ -902,12 +928,13 @@ local langList={
fall=nil,
next=nil,
hold={"On","Off","Inf"},
sequence={"bag7","his4","random"},
sequence={"bag","his4","random","loop","fixed"},
visible={"normal","slow fade","fast fade","sudden fade"},
target={10,20,40,100,200,500,1000,"None"},
freshLimit={0,8,15,"Inf"},
opponent={"None","9S Lv1","9S Lv2","9S Lv3","9S Lv4","9S Lv5","CC Lv1","CC Lv2","CC Lv3","CC Lv4","CC Lv5","CC Lv6"},
},
sequence="Custom Sequence",
snapLevelName={"Free pos","Snap-10","Snap-20","Snap-40","Snap-60","Snap-80"},
setting_game="Game settings",
setting_video="Video settings",
@@ -1027,8 +1054,7 @@ local langList={
quit="Exit",
},
mode={
draw="Draw (Q)",
custom="Settings (E)",
setting="Settings (E)",
start="Start",
back="Back",
},
@@ -1049,6 +1075,18 @@ local langList={
set3="Inf. (3)",
set4="Blind (4)",
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",
},
draw={
@@ -1058,6 +1096,7 @@ local langList={
demo="Don't show ×",
copy="Copy",
paste="Paste",
custom="Args",
back="Back",
},
play={
@@ -1191,85 +1230,85 @@ local langList={
},
},
modes={
{"Sprint", "10L", "Clear 10 lines!"},
{"Sprint", "20L", "Clear 20 lines!"},
{"Sprint", "40L", "Clear 40 lines!"},
{"Sprint", "100L", "Clear 100 lines!"},
{"Sprint", "400L", "Clear 400 lines!"},
{"Sprint", "1000L", "Clear 1000 lines!"},
{"Drought", "100L", "No I piece!"},
{"Drought", "100L", "WTF"},
{"Marathon", "NORMAL", "200-line marathon with accelerating speed."},
{"Marathon", "HARD", "200-line high-speed marathon."},
{"Battle", "EASY", "Defeat the AI!"},
{"Battle", "NORMAL", "Defeat the AI!"},
{"Battle", "HARD", "Defeat the AI!"},
{"Battle", "LUNATIC", "Defeat the AI!"},
{"Battle", "ULTIMATE", "Defeat the AI!"},
{"Tech 49", "EASY", "49-player battle.\nThe last one standing wins."},
{"Tech 49", "HARD", "49-player battle.\nThe last one standing wins."},
{"Tech 49", "ULTIMATE", "49-player battle.\nThe last one standing wins."},
{"Tech 99", "EASY", "99-player battle.\nThe last one standing wins."},
{"Tech 99", "HARD", "99-player battle.\nThe last one standing wins."},
{"Tech 99", "ULTIMATE", "99-player battle.\nThe last one standing wins."},
{"Turn-Based", "EASY", "Chess mode"},
{"Turn-Based", "NORMAL", "Chess mode"},
{"Turn-Based", "HARD", "Chess mode"},
{"Turn-Based", "LUNATIC", "Chess mode"},
{"Turn-Based", "ULTIMATE", "Chess mode"},
{"Master", "LUNATIC", "20G: For beginners."},
{"Master", "ULTIMATE", "20G: Professional challenge!"},
{"Master", "FINAL", "20G: Unreachable end point!"},
{"GrandMaster", "GM", "To be Grand Master"},
{"Blind", "HALF", "For novice players."},
{"Blind", "ALL", "For intermediate players."},
{"Blind", "SUDDEN", "For experienced players."},
{"Blind", "SUDDEN+", "For professionals."},
{"Blind", "", "R U Ready?"},
{"Classic", "CTWC", "High-speed classic mode."},
{"Survivor", "EASY", "How long can you survive?"},
{"Survivor", "NORMAL", "How long can you survive?"},
{"Survivor", "HARD", "How long can you survive?"},
{"Survivor", "LUNATIC", "How long can you survive?"},
{"Survivor", "ULTIMATE", "How long can you survive?"},
{"Attacker", "HARD", "Offensive practice!"},
{"Attacker", "ULTIMATE", "Offensive practice!"},
{"Defender", "NORMAL", "Defensive practice!"},
{"Defender", "LUNATIC", "Defensive practice!"},
{"Driller", "HARD", "Digging practice!"},
{"Driller", "ULTIMATE", "Digging practice!"},
{"Big Bang", "EASY", "All-spin tutorial!\n[Under construction]"},
{"C4W Training", "NORMAL", "Infinite combos."},
{"C4W Training", "LUNATIC", "Infinite combos."},
{"PC Training", "NORMAL", "Simple Perfect Clear mode."},
{"PC Training", "LUNATIC", "Simple Perfect Clear mode."},
{"PC Challenge", "NORMAL", "Get PCs within 100 lines!"},
{"PC Challenge", "HARD", "Get PCs within 100 lines!"},
{"PC Challenge", "LUNATIC", "Get PCs within 100 lines!"},
{"Tech", "NORMAL", "Keep the B2B chain!"},
{"Tech", "NORMAL+", "Spin & PC only"},
{"Tech", "HARD", "Keep the B2B chain!"},
{"Tech", "HARD+", "Spin & PC only"},
{"Tech", "LUNATIC", "Keep the B2B chain!"},
{"Tech", "LUNATIC+", "Spin & PC only"},
{"Tech", "ULTIMATE", "No finesse faults!"},
{"Tech", "ULTIMATE+", "No normal clears, no finesse faults!"},
{"TSD Challenge", "EASY", "T-spin-doubles only!"},
{"TSD Challenge", "HARD", "T-spin-doubles only!"},
{"TSD Challenge", "ULTIMATE", "T-spin-doubles only!"},
{"Zen", "", "200 lines without a time limit."},
{"Ultra", "EXTRA", "Get the highest score within 2 min."},
{"Infinite", "", "Sandbox mode."},
{"Infinite: Dig", "", "Dig, dig, dig."},
{"Custom", "NORMAL", "Draw something then clear it!!"},
{"Custom", "PUZZLE", "Draw something then stack it!!"},
{"Sprint", "Pentomino", "Puzzle-18"},
["sprint_10"]= {"Sprint", "10L", "Clear 10 lines!"},
["sprint_20"]= {"Sprint", "20L", "Clear 20 lines!"},
["sprint_40"]= {"Sprint", "40L", "Clear 40 lines!"},
["sprint_100"]= {"Sprint", "100L", "Clear 100 lines!"},
["sprint_400"]= {"Sprint", "400L", "Clear 400 lines!"},
["sprint_1000"]= {"Sprint", "1000L", "Clear 1000 lines!"},
["drought_normal"]= {"Drought", "100L", "No I piece!"},
["drought_lunatic"]= {"Drought", "100L", "WTF"},
["marathon_normal"]= {"Marathon", "NORMAL", "200-line marathon with accelerating speed."},
["marathon_hard"]= {"Marathon", "HARD", "200-line high-speed marathon."},
["solo_1"]= {"Battle", "EASY", "Defeat the AI!"},
["solo_2"]= {"Battle", "NORMAL", "Defeat the AI!"},
["solo_3"]= {"Battle", "HARD", "Defeat the AI!"},
["solo_4"]= {"Battle", "LUNATIC", "Defeat the AI!"},
["solo_5"]= {"Battle", "ULTIMATE", "Defeat the AI!"},
["techmino49_easy"]= {"Tech 49", "EASY", "49-player battle.\nThe last one standing wins."},
["techmino49_hard"]= {"Tech 49", "HARD", "49-player battle.\nThe last one standing wins."},
["techmino49_ultimate"]={"Tech 49", "ULTIMATE", "49-player battle.\nThe last one standing wins."},
["techmino99_easy"]= {"Tech 99", "EASY", "99-player battle.\nThe last one standing wins."},
["techmino99_hard"]= {"Tech 99", "HARD", "99-player battle.\nThe last one standing wins."},
["techmino99_ultimate"]={"Tech 99", "ULTIMATE", "99-player battle.\nThe last one standing wins."},
["round_1"]= {"Turn-Based", "EASY", "Chess mode"},
["round_2"]= {"Turn-Based", "NORMAL", "Chess mode"},
["round_3"]= {"Turn-Based", "HARD", "Chess mode"},
["round_4"]= {"Turn-Based", "LUNATIC", "Chess mode"},
["round_5"]= {"Turn-Based", "ULTIMATE", "Chess mode"},
["master_beginner"]= {"Master", "LUNATIC", "20G: For beginners."},
["master_adavnce"]= {"Master", "ULTIMATE", "20G: Professional challenge!"},
["master_final"]= {"Master", "FINAL", "20G: Unreachable end point!"},
["GM"]= {"GrandMaster", "GM", "To be Grand Master"},
["blind_easy"]= {"Blind", "HALF", "For novice players."},
["blind_normal"]= {"Blind", "ALL", "For intermediate players."},
["blind_hard"]= {"Blind", "SUDDEN", "For experienced players."},
["blind_lunatic"]= {"Blind", "SUDDEN+", "For professionals."},
["blind_ultimate"]= {"Blind", "", "R U Ready?"},
["classic_fast"]= {"Classic", "CTWC", "High-speed classic mode."},
["survivor_easy"]= {"Survivor", "EASY", "How long can you survive?"},
["survivor_normal"]= {"Survivor", "NORMAL", "How long can you survive?"},
["survivor_hard"]= {"Survivor", "HARD", "How long can you survive?"},
["survivor_lunatic"]= {"Survivor", "LUNATIC", "How long can you survive?"},
["survivor_ultimate"]= {"Survivor", "ULTIMATE", "How long can you survive?"},
["attacker_hard"]= {"Attacker", "HARD", "Offensive practice!"},
["attacker_ultimate"]= {"Attacker", "ULTIMATE", "Offensive practice!"},
["defender_normal"]= {"Defender", "NORMAL", "Defensive practice!"},
["defender_lunatic"]= {"Defender", "LUNATIC", "Defensive practice!"},
["dig_hard"]= {"Driller", "HARD", "Digging practice!"},
["dig_ultimate"]= {"Driller", "ULTIMATE", "Digging practice!"},
["bigbang"]= {"Big Bang", "EASY", "All-spin tutorial!\n[Under construction]"},
["c4wtrain_normal"]= {"C4W Training", "NORMAL", "Infinite combos."},
["c4wtrain_lunatic"]= {"C4W Training", "LUNATIC", "Infinite combos."},
["pctrain_normal"]= {"PC Training", "NORMAL", "Simple Perfect Clear mode."},
["pctrain_lunatic"]= {"PC Training", "LUNATIC", "Simple Perfect Clear mode."},
["pcchallenge_normal"]= {"PC Challenge", "NORMAL", "Get PCs within 100 lines!"},
["pcchallenge_hard"]= {"PC Challenge", "HARD", "Get PCs within 100 lines!"},
["pcchallenge_lunatic"]={"PC Challenge", "LUNATIC", "Get PCs within 100 lines!"},
["tech_normal"]= {"Tech", "NORMAL", "Keep the B2B chain!"},
["tech_normal+"]= {"Tech", "NORMAL+", "Spin & PC only"},
["tech_hard"]= {"Tech", "HARD", "Keep the B2B chain!"},
["tech_hard+"]= {"Tech", "HARD+", "Spin & PC only"},
["tech_lunatic"]= {"Tech", "LUNATIC", "Keep the B2B chain!"},
["tech_lunatic+"]= {"Tech", "LUNATIC+", "Spin & PC only"},
["tech_ultimate"]= {"Tech", "ULTIMATE", "No finesse faults!"},
["tech_ultimate+"]= {"Tech", "ULTIMATE+", "No normal clears, no finesse faults!"},
["tsd_easy"]= {"TSD Challenge", "EASY", "T-spin-doubles only!"},
["tsd_hard"]= {"TSD Challenge", "HARD", "T-spin-doubles only!"},
["tsd_ultimate"]= {"TSD Challenge", "ULTIMATE", "T-spin-doubles only!"},
["zen"]= {"Zen", "", "200 lines without a time limit."},
["ultra"]= {"Ultra", "EXTRA", "Get the highest score within 2 min."},
["infinite"]= {"Infinite", "", "Sandbox mode."},
["infinite_dig"]= {"Infinite: Dig", "", "Dig, dig, dig."},
["custom_clear"]= {"Custom", "NORMAL", "Draw something then clear it!!"},
["custom_puzzle"]= {"Custom", "PUZZLE", "Draw something then stack it!!"},
["sprintPenta"]= {"Sprint", "Pentomino", "Puzzle-18"},
},
},
{
anykey="↓□↓",
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="?????",
atkModeName={"?","( )","!","←→"},
royale_remain=function(n)return n.."~"end,
@@ -1316,12 +1355,13 @@ local langList={
fall=nil,
next=nil,
hold={"+","-","~"},
sequence={"(xxx)","[...]","???"},
sequence={"(xxx)","[....]","???","{abc}+","==="},
visible={"=","-","_","."},
target={10,20,40,100,200,500,1000,"x"},
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"},
},
sequence="!@#$%^&*",
snapLevelName={"~","10","20","40","60","80"},
setting_game="%~~%",
setting_video="{~~}",
@@ -1441,8 +1481,7 @@ local langList={
quit="X",
},
mode={
draw="ABC (Q)",
custom="_?_ (E)",
setting="_?_ (E)",
start="!!!",
back="X",
},
@@ -1463,6 +1502,18 @@ local langList={
set3="Inf. (3)",
set4="Blind (4)",
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",
},
draw={
@@ -1472,6 +1523,7 @@ local langList={
demo="X ×",
copy="→__",
paste="__→",
custom="_?_",
back="X",
},
play={
@@ -1605,79 +1657,79 @@ local langList={
},
},
modes={
{"Sprint", "10L", "Clear 10 lines!"},
{"Sprint", "20L", "Clear 20 lines!"},
{"Sprint", "40L", "Clear 40 lines!"},
{"Sprint", "100L", "Clear 100 lines!"},
{"Sprint", "400L", "Clear 400 lines!"},
{"Sprint", "1000L", "Clear 1000 lines!"},
{"Drought", "100L", "No I piece!"},
{"Drought", "100L", "WTF"},
{"Marathon", "NORMAL", "200-line marathon with accelerating speed."},
{"Marathon", "HARD", "200-line high-speed marathon."},
{"Battle", "EASY", "Defeat the AI!"},
{"Battle", "NORMAL", "Defeat the AI!"},
{"Battle", "HARD", "Defeat the AI!"},
{"Battle", "LUNATIC", "Defeat the AI!"},
{"Battle", "ULTIMATE", "Defeat the AI!"},
{"Tech 49", "EASY", "49-player battle.\nThe last one standing wins."},
{"Tech 49", "HARD", "49-player battle.\nThe last one standing wins."},
{"Tech 49", "ULTIMATE", "49-player battle.\nThe last one standing wins."},
{"Tech 99", "EASY", "99-player battle.\nThe last one standing wins."},
{"Tech 99", "HARD", "99-player battle.\nThe last one standing wins."},
{"Tech 99", "ULTIMATE", "99-player battle.\nThe last one standing wins."},
{"Turn-Based", "EASY", "Chess mode"},
{"Turn-Based", "NORMAL", "Chess mode"},
{"Turn-Based", "HARD", "Chess mode"},
{"Turn-Based", "LUNATIC", "Chess mode"},
{"Turn-Based", "ULTIMATE", "Chess mode"},
{"Master", "LUNATIC", "20G: For beginners."},
{"Master", "ULTIMATE", "20G: Professional challenge!"},
{"Master", "FINAL", "20G: Unreachable end point!"},
{"GrandMaster", "GM", "To be Grand Master"},
{"Blind", "HALF", "For novice players."},
{"Blind", "ALL", "For intermediate players."},
{"Blind", "SUDDEN", "For experienced players."},
{"Blind", "SUDDEN+", "For professionals."},
{"Blind", "", "R U Ready?"},
{"Classic", "CTWC", "High-speed classic mode."},
{"Survivor", "EASY", "How long can you survive?"},
{"Survivor", "NORMAL", "How long can you survive?"},
{"Survivor", "HARD", "How long can you survive?"},
{"Survivor", "LUNATIC", "How long can you survive?"},
{"Survivor", "ULTIMATE", "How long can you survive?"},
{"Attacker", "HARD", "Offensive practice!"},
{"Attacker", "ULTIMATE", "Offensive practice!"},
{"Defender", "NORMAL", "Defensive practice!"},
{"Defender", "LUNATIC", "Defensive practice!"},
{"Driller", "HARD", "Digging practice!"},
{"Driller", "ULTIMATE", "Digging practice!"},
{"Big Bang", "EASY", "All-spin tutorial!\n[Under construction]"},
{"C4W Training", "NORMAL", "Infinite combos."},
{"C4W Training", "LUNATIC", "Infinite combos."},
{"PC Training", "NORMAL", "Simple Perfect Clear mode."},
{"PC Training", "LUNATIC", "Simple Perfect Clear mode."},
{"PC Challenge", "NORMAL", "Get PCs within 100 lines!"},
{"PC Challenge", "HARD", "Get PCs within 100 lines!"},
{"PC Challenge", "LUNATIC", "Get PCs within 100 lines!"},
{"Tech", "NORMAL", "Keep the B2B chain!"},
{"Tech", "NORMAL+", "Spin & PC only"},
{"Tech", "HARD", "Keep the B2B chain!"},
{"Tech", "HARD+", "Spin & PC only"},
{"Tech", "LUNATIC", "Keep the B2B chain!"},
{"Tech", "LUNATIC+", "Spin & PC only"},
{"Tech", "ULTIMATE", "No finesse faults!"},
{"Tech", "ULTIMATE+", "No normal clears, no finesse faults!"},
{"TSD Challenge", "EASY", "T-spin-doubles only!"},
{"TSD Challenge", "HARD", "T-spin-doubles only!"},
{"TSD Challenge", "ULTIMATE", "T-spin-doubles only!"},
{"Zen", "", "200 lines without a time limit."},
{"Ultra", "EXTRA", "Get the highest score within 2 min."},
{"Infinite", "", "Sandbox mode."},
{"Infinite: Dig", "", "Dig, dig, dig."},
{"Custom", "NORMAL", "Draw something then clear it!!"},
{"Custom", "PUZZLE", "Draw something then stack it!!"},
{"Sprint", "Pentomino", "Puzzle-18"},
["sprint_10"]= {"Sprint", "10L", "Clear 10 lines!"},
["sprint_20"]= {"Sprint", "20L", "Clear 20 lines!"},
["sprint_40"]= {"Sprint", "40L", "Clear 40 lines!"},
["sprint_100"]= {"Sprint", "100L", "Clear 100 lines!"},
["sprint_400"]= {"Sprint", "400L", "Clear 400 lines!"},
["sprint_1000"]= {"Sprint", "1000L", "Clear 1000 lines!"},
["drought_normal"]= {"Drought", "100L", "No I piece!"},
["drought_lunatic"]= {"Drought", "100L", "WTF"},
["marathon_normal"]= {"Marathon", "NORMAL", "200-line marathon with accelerating speed."},
["marathon_hard"]= {"Marathon", "HARD", "200-line high-speed marathon."},
["solo_1"]= {"Battle", "EASY", "Defeat the AI!"},
["solo_2"]= {"Battle", "NORMAL", "Defeat the AI!"},
["solo_3"]= {"Battle", "HARD", "Defeat the AI!"},
["solo_4"]= {"Battle", "LUNATIC", "Defeat the AI!"},
["solo_5"]= {"Battle", "ULTIMATE", "Defeat the AI!"},
["techmino49_easy"]= {"Tech 49", "EASY", "49-player battle.\nThe last one standing wins."},
["techmino49_hard"]= {"Tech 49", "HARD", "49-player battle.\nThe last one standing wins."},
["techmino49_ultimate"]={"Tech 49", "ULTIMATE", "49-player battle.\nThe last one standing wins."},
["techmino99_easy"]= {"Tech 99", "EASY", "99-player battle.\nThe last one standing wins."},
["techmino99_hard"]= {"Tech 99", "HARD", "99-player battle.\nThe last one standing wins."},
["techmino99_ultimate"]={"Tech 99", "ULTIMATE", "99-player battle.\nThe last one standing wins."},
["round_1"]= {"Turn-Based", "EASY", "Chess mode"},
["round_2"]= {"Turn-Based", "NORMAL", "Chess mode"},
["round_3"]= {"Turn-Based", "HARD", "Chess mode"},
["round_4"]= {"Turn-Based", "LUNATIC", "Chess mode"},
["round_5"]= {"Turn-Based", "ULTIMATE", "Chess mode"},
["master_beginner"]= {"Master", "LUNATIC", "20G: For beginners."},
["master_adavnce"]= {"Master", "ULTIMATE", "20G: Professional challenge!"},
["master_final"]= {"Master", "FINAL", "20G: Unreachable end point!"},
["GM"]= {"GrandMaster", "GM", "To be Grand Master"},
["blind_easy"]= {"Blind", "HALF", "For novice players."},
["blind_normal"]= {"Blind", "ALL", "For intermediate players."},
["blind_hard"]= {"Blind", "SUDDEN", "For experienced players."},
["blind_lunatic"]= {"Blind", "SUDDEN+", "For professionals."},
["blind_ultimate"]= {"Blind", "", "R U Ready?"},
["classic_fast"]= {"Classic", "CTWC", "High-speed classic mode."},
["survivor_easy"]= {"Survivor", "EASY", "How long can you survive?"},
["survivor_normal"]= {"Survivor", "NORMAL", "How long can you survive?"},
["survivor_hard"]= {"Survivor", "HARD", "How long can you survive?"},
["survivor_lunatic"]= {"Survivor", "LUNATIC", "How long can you survive?"},
["survivor_ultimate"]= {"Survivor", "ULTIMATE", "How long can you survive?"},
["attacker_hard"]= {"Attacker", "HARD", "Offensive practice!"},
["attacker_ultimate"]= {"Attacker", "ULTIMATE", "Offensive practice!"},
["defender_normal"]= {"Defender", "NORMAL", "Defensive practice!"},
["defender_lunatic"]= {"Defender", "LUNATIC", "Defensive practice!"},
["dig_hard"]= {"Driller", "HARD", "Digging practice!"},
["dig_ultimate"]= {"Driller", "ULTIMATE", "Digging practice!"},
["bigbang"]= {"Big Bang", "EASY", "All-spin tutorial!\n[Under construction]"},
["c4wtrain_normal"]= {"C4W Training", "NORMAL", "Infinite combos."},
["c4wtrain_lunatic"]= {"C4W Training", "LUNATIC", "Infinite combos."},
["pctrain_normal"]= {"PC Training", "NORMAL", "Simple Perfect Clear mode."},
["pctrain_lunatic"]= {"PC Training", "LUNATIC", "Simple Perfect Clear mode."},
["pcchallenge_normal"]= {"PC Challenge", "NORMAL", "Get PCs within 100 lines!"},
["pcchallenge_hard"]= {"PC Challenge", "HARD", "Get PCs within 100 lines!"},
["pcchallenge_lunatic"]={"PC Challenge", "LUNATIC", "Get PCs within 100 lines!"},
["tech_normal"]= {"Tech", "NORMAL", "Keep the B2B chain!"},
["tech_normal+"]= {"Tech", "NORMAL+", "Spin & PC only"},
["tech_hard"]= {"Tech", "HARD", "Keep the B2B chain!"},
["tech_hard+"]= {"Tech", "HARD+", "Spin & PC only"},
["tech_lunatic"]= {"Tech", "LUNATIC", "Keep the B2B chain!"},
["tech_lunatic+"]= {"Tech", "LUNATIC+", "Spin & PC only"},
["tech_ultimate"]= {"Tech", "ULTIMATE", "No finesse faults!"},
["tech_ultimate+"]= {"Tech", "ULTIMATE+", "No normal clears, no finesse faults!"},
["tsd_easy"]= {"TSD Challenge", "EASY", "T-spin-doubles only!"},
["tsd_hard"]= {"TSD Challenge", "HARD", "T-spin-doubles only!"},
["tsd_ultimate"]= {"TSD Challenge", "ULTIMATE", "T-spin-doubles only!"},
["zen"]= {"Zen", "", "200 lines without a time limit."},
["ultra"]= {"Ultra", "EXTRA", "Get the highest score within 2 min."},
["infinite"]= {"Infinite", "", "Sandbox mode."},
["infinite_dig"]= {"Infinite: Dig", "", "Dig, dig, dig."},
["custom_clear"]= {"Custom", "NORMAL", "Draw something then clear it!!"},
["custom_puzzle"]= {"Custom", "PUZZLE", "Draw something then stack it!!"},
["sprintPenta"]= {"Sprint", "Pentomino", "Puzzle-18"},
},
},
}
@@ -1729,7 +1781,7 @@ local drawableTextLoad={
"anykey",
"next","hold",
"win","finish","lose","pause",
"custom",
"custom","sequence",
"setting_game",
"setting_video",
"setting_sound",

View File

@@ -3,8 +3,8 @@
--https://github.com/mattdesl/lwjgl-basics/wiki/2D-Pixel-Perfect-Shadows
local gc=love.graphics
local C=gc.clear
local shadowMapShader=gc.newShader("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 shadowMapShader=gc.newShader("Zframework/shader/shadowMap.glsl")--Shader for caculating the 1D shadow map.
local lightRenderShader=gc.newShader("Zframework/shader/lightRender.glsl")--Shader for rendering blurred lights and shadows.
local Lights={}--Lightsource objects
local function move(L,x,y)
L.x,L.y=x,y

View File

@@ -152,59 +152,60 @@ function Pnt.mode()
gc.scale(cam.zoomK)
gc.translate(-cam.x1,-cam.y1)
gc.scale(cam.k1)
local MM=Modes
local R=modeRanks
local sel=cam.sel
setFont(30)
for _=1,#MM do
local M=MM[_]
if R[_]then
gc.setLineWidth(8)
gc.setColor(1,1,1,.2)
gc.setLineWidth(8)
gc.setColor(1,1,1,.2)
for name,M in next,Modes do
if R[name]then
for _=1,#M.unlock do
local m=M.unlock[_]
m=MM[m]
local m=Modes[M.unlock[_]]
gc.line(M.x,M.y,m.x,m.y)
end
end
end--lines connecting modes
for name,M in next,Modes do
if R[name]then
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
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
gc.setColor(c)
else
c=.5+sin(Timer()*6.26-_)*.2
c=.5+sin(Timer()*6.26)*.2
S=S*(.9+c*.4)
gc.setColor(c,c,c)
end
if M.shape==1 then--Rectangle
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.setLineWidth(10)
gc.rectangle("line",M.x-S+5,M.y-S+5,2*S-10,2*S-10)
end
elseif M.shape==2 then--diamond
gc.circle("fill",M.x,M.y,S+5,4)
if sel==_ then
if sel==name then
gc.setColor(1,1,1)
gc.setLineWidth(10)
gc.circle("line",M.x,M.y,S+5,4)
end
elseif M.shape==3 then--Octagon
gc.circle("fill",M.x,M.y,S,8)
if sel==_ then
if sel==name then
gc.setColor(1,1,1)
gc.setLineWidth(10)
gc.circle("line",M.x,M.y,S,8)
end
end
_=drawableText[rankString[modeRanks[M.id]]]
if _ then
local dx,dy=6.26*sin(Timer()*0.626+M.id),6.6*sin(Timer()+M.id)
name=drawableText[rankString[R[M.name]]]
if name then
gc.setColor(0,0,0,.26)
mDraw(_,M.x+dx*1.5,M.y+dy*1.5)
mDraw(name,M.x,M.y)
end
--[[
if M.icon then
@@ -224,7 +225,7 @@ function Pnt.mode()
end
gc.pop()
if sel then
local M=MM[sel]
local M=Modes[sel]
local lang=setting.lang
gc.setColor(.7,.7,.7,.5)
gc.rectangle("fill",920,0,360,720)--Info board
@@ -293,21 +294,40 @@ function Pnt.music()
end
function Pnt.custom()
gc.setColor(1,1,1,.3+sin(Timer()*8)*.2)
gc.rectangle("fill",25,95+40*sceneTemp,480,40)
gc.setColor(.7,.7,.7)gc.draw(drawableText.custom,20,20)
gc.setColor(1,1,1)gc.draw(drawableText.custom,22,23)
gc.rectangle("fill",100,115+40*sceneTemp,570,40)
gc.setColor(.7,.7,.7)gc.draw(drawableText.custom,360,20)
gc.setColor(1,1,1)gc.draw(drawableText.custom,362,23)
setFont(35)
for i=1,#customID do
local k=customID[i]
local y=90+40*i
gc.printf(text.customOption[k],15,y,320,"right")
local y=110+40*i
gc.printf(text.customOption[k],100,y,320,"right")
if text.customVal[k]then
gc.print(text.customVal[k][customSel[i]],335,y)
gc.print(text.customVal[k][customSel[i]],440,y)
else
gc.print(customRange[k][customSel[i]],335,y)
gc.print(customRange[k][customSel[i]],440,y)
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()
local sx,sy=sceneTemp.x,sceneTemp.y
gc.translate(200,60)
@@ -333,6 +353,8 @@ function Pnt.draw()
gc.rectangle("line",30*sx-30,600-30*sy,30,30)
end
gc.translate(-200,-60)
--Pen
local pen=sceneTemp.pen
if pen>0 then
gc.setLineWidth(13)
@@ -344,10 +366,14 @@ function Pnt.draw()
gc.line(575,470,625,520)
gc.line(575,520,625,470)
end
--Confirm reset
if sceneTemp.sure>0 then
gc.setColor(1,1,1,sceneTemp.sure*.02)
gc.draw(drawableText.question,1040,430)
end
--Block name
setFont(40)
local _
for i=1,7 do
@@ -358,10 +384,13 @@ function Pnt.draw()
end
function Pnt.play()
if marking then
setFont(36)
local x=game.frame*2%1800-260
gc.setColor(1,1,1,abs(0.26*(1-x/640))-0.0626)
setFont(26)
local x=Timer()*46%1680-200
gc.setColor(1,1,1,abs(.26*(1-x/640)))
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
for p=1,#players do
players[p]:draw()
@@ -420,6 +449,13 @@ function Pnt.play()
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.origin()
if restartCount>0 then

View File

@@ -79,6 +79,9 @@ function sceneInit.custom()
BG.set(customRange.bg[customSel[12]])
BGM.play(customRange.bgm[customSel[13]])
end
function sceneInit.sequence()
sceneTemp={cur=#preBag,sure=0}
end
function sceneInit.draw()
BG.set("space")
sceneTemp={
@@ -328,6 +331,9 @@ function SCN.swapTo(tar,style)
S.draw=swap[3]
end
end
function SCN.goto(tar,style)
SCN.push()SCN.swapTo(tar,style)
end
function SCN.back()
if backFunc[SCN.cur] then backFunc[SCN.cur]()end
--func when scene end

View File

@@ -1,8 +1,8 @@
local function N(file)
return love.graphics.newShader("shader/"..file..".glsl")
return love.graphics.newShader("Zframework/shader/"..file..".glsl")
end
return{
-- glow=gc.newShader("shader/glow.cs"),
-- glow=gc.newShader("Zframework/shader/glow.cs"),
alpha=N("alpha"),
warning=N("warning"),

View File

@@ -0,0 +1,4 @@
extern float a;
vec4 effect(vec4 color,Image text,vec2 pos,vec2 scr_pos){
return vec4(1.,1.,1.,sign(Texel(text,pos).a)*a);
}

View File

@@ -0,0 +1,42 @@
#define PI 3.1415926535897932384626
extern float w,h;
extern float t;
vec4 effect(vec4 color,Image text,vec2 pos,vec2 scr_pos){
float x=scr_pos.x/w;
float y=scr_pos.y/h;
float dx,dy;
vec3 V=vec3(0.);
dx=0.5+cos(t*3.*0.26)*0.4-x;
dy=0.5-sin(t*3.*0.62)*0.4-y;
dx=sqrt(dx*dx+dy*dy);
V.r=V.r+smoothstep(1.26,0.,dx);
dx=(0.5+cos(t*3.*0.32)*0.4)-x;
dy=(0.5-sin(t*3.*0.80)*0.4)-y;
dx=sqrt(dx*dx+dy*dy);
V.g=V.g+smoothstep(1.26,0.,dx);
dx=(0.5-cos(t*3.*0.49)*0.4)-x;
dy=(0.5+sin(t*3.*0.18)*0.4)-y;
dx=sqrt(dx*dx+dy*dy);
V.b=V.b+smoothstep(1.26,0.,dx);
dx=(0.5+cos(t*0.53)*0.4)-x;
dy=(0.5-sin(t*0.46)*0.4)-y;
dx=sqrt(dx*dx+dy*dy);
V.rg+=vec2(smoothstep(0.626,0.,dx));
dx=(0.5+cos(t*0.98)*0.4)-x;
dy=(0.5+sin(t*0.57)*0.4)-y;
dx=sqrt(dx*dx+dy*dy);
V.rb+=vec2(smoothstep(0.626,0.,dx));
dx=(0.5-cos(t*0.86)*0.4)-x;
dy=(0.5-sin(t*0.32)*0.4)-y;
dx=sqrt(dx*dx+dy*dy);
V.gb+=vec2(smoothstep(0.626,0.,dx));
dx=1.626*max(max(V.r,V.g),V.b);
return vec4(V/dx,1.);
}

View File

@@ -0,0 +1,5 @@
extern float X,Y,W,H;
vec4 effect(vec4 C,Image Tx,vec2 pos,vec2 scr_pos){
C[3]=min((scr_pos.x-X)/W*0.3+(scr_pos.y-Y)/H*0.1,0.3)+0.5;
return C;
}

View File

@@ -0,0 +1,29 @@
#define PI 3.14159
extern float xresolution;
//sample from 1D vis-depth map
float samp(vec2 coord,float r,Image u_texture){
return step(r,Texel(u_texture,coord).r);
}
vec4 effect(vec4 color,Image texture,vec2 texture_coords,vec2 screen_coords){
//cartesian to polar, y of 1D sample is always 0
vec2 norm=texture_coords.st*2.-1.;
vec2 tc=vec2((atan(norm.y,norm.x)+PI)/(2.*PI),0.);
float r=length(norm);
//enlarge blur parameter by distance, light scattering simulation
float blur=(1./xresolution)*smoothstep(0.3,1.,r);
//Simple Gaussian blur
float sum=//brightness(0~1)
samp(vec2(tc.x-3.*blur,tc.y),r,texture)*0.1
+samp(vec2(tc.x-2.*blur,tc.y),r,texture)*0.13
+samp(vec2(tc.x-1.*blur,tc.y),r,texture)*0.17
+samp(tc,r,texture)*0.2//The center tex coord,which gives us hard shadows.
+samp(vec2(tc.x+1.*blur,tc.y),r,texture)*0.17
+samp(vec2(tc.x+2.*blur,tc.y),r,texture)*0.13
+samp(vec2(tc.x+3.*blur,tc.y),r,texture)*0.1;
//Multiply the distance to get a soft fading
return vec4(vec3(1.),sum*smoothstep(1.,0.,r));
}

View File

@@ -0,0 +1,15 @@
#define PI 3.14159265
extern float w,h;
extern float t;
vec4 effect(vec4 color,Image text,vec2 pos,vec2 scr_pos){
float x=scr_pos.x-w/2.;
float y=scr_pos.y-h/2.;
float a=(step(0.,x)*2.-1.)*PI+atan(y,x)+PI*0.5+t*0.626;
return vec4(
color.r*(sin(a+PI*0./3.)*0.3+0.5),
color.g*(sin(a+PI*2./3.)*0.3+0.5),
color.b*(sin(a+PI*4./3.)*0.3+0.5),
1.
);
}

View File

@@ -0,0 +1,21 @@
#define PI 3.14
extern float yresolution;
vec4 effect(vec4 color,Image texture,vec2 texture_coords,vec2 screen_coords){
//Iterate through the occluder map's y-axis.
for(float y=0.;y<yresolution;y++){
//cartesian to polar
// y/yresolution=distance to light source(0~1)
vec2 norm=vec2(texture_coords.s,y/yresolution)*2.-1.;
float theta=PI*1.5+norm.x*PI;
float r=(1.+norm.y)*0.5;
//sample from solid
if(
Texel(texture,(
vec2(-r*sin(theta),-r*cos(theta))*0.5+0.5//coord of solid sampling
))
.a>0.1
)return vec4(vec3(y/yresolution),1.);//collision check, alpha>0.1 means transparent
}
return vec4(1.,1.,1.,1.);//return max distance 1
}

View File

@@ -0,0 +1,11 @@
#define PI 3.14159265
extern float t;
vec4 effect(vec4 color,Image text,vec2 pos,vec2 scr_pos){
float x=scr_pos.x/262.+t;
return vec4(
color.r*(sin(x+PI*0./3.)*0.3+0.5),
color.g*(sin(x+PI*2./3.)*0.3+0.5),
color.b*(sin(x+PI*4./3.)*0.3+0.5),
1.
);
}

View File

@@ -0,0 +1,8 @@
extern float w,h;
extern float level;
vec4 effect(vec4 color,Image text,vec2 pos,vec2 scr_pos){
float dx=abs(scr_pos.x/w-0.5);
float dy=abs(scr_pos.y/h-0.5);
float a=(max(dx,dy)*2.-.626)*level;
return vec4(1.,0.,0.,a);
}

View File

@@ -1,5 +1,4 @@
local rem=table.remove
local tasks={}
local TASK={}
@@ -48,12 +47,6 @@ function TASK.clear(opt)
tasks[i]=nil
i=i-1
end
elseif opt=="play"then
for i=#tasks,1,-1 do
if tasks[i].P then
rem(tasks,i)
end
end
else--Player table
for i=#tasks,1,-1 do
if tasks[i].P==opt then

View File

@@ -18,13 +18,13 @@ function Tmr.load()
elseif S.phase==4 then
IMG.loadOne(S.cur)
elseif S.phase==5 then
local m=Modes[S.cur]
Modes[S.cur]=require("modes/"..m[1])
local M=Modes[S.cur]
M.saveFileName,M.id=m[1],m.id
M.x,M.y,M.size,M.shape=m.x,m.y,m.size,m.shape
M.unlock=m.unlock
M.records=FILE.loadRecord(m[1])or M.score and{}
local m=Modes[S.cur]--mode template
local M=require("modes/"..m.name)--mode file
Modes[m.name]=M
for k,v in next,m do
M[k]=v
end
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/custom.png")
elseif S.phase==6 then
@@ -105,21 +105,19 @@ function Tmr.mode(dt)
cam.keyCtrl=true
end
local x,y=(cam.x1-180)/cam.k1,cam.y1/cam.k1
local MM,R=Modes,modeRanks
for _=1,#MM do
if R[_]then
local __
local M=MM[_]
for name,M in next,Modes do
if modeRanks[name]then
local SEL
local s=M.size
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
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
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
if __ and cam.sel~=__ then
cam.sel=__
if SEL and cam.sel~=SEL then
cam.sel=SEL
SFX.play("click")
end
end
@@ -154,6 +152,9 @@ function Tmr.mode(dt)
cam.zoomK=cam.zoomK^.9
end
end
function Tmr.sequence()
if sceneTemp.sure>0 then sceneTemp.sure=sceneTemp.sure-1 end
end
function Tmr.draw()
if sceneTemp.sure>0 then sceneTemp.sure=sceneTemp.sure-1 end
end
@@ -239,8 +240,8 @@ function Tmr.play(dt)
if game.frame%26==0 and setting.warn then
local F=P1.field
local M=#F
local height=0
for x=3,8 do
local height=0--max height of row 4~7
for x=4,7 do
for y=M,1,-1 do
if F[y][x]>0 then
if y>height then

View File

@@ -218,9 +218,6 @@ function WIDGET.press(x,y)
local W=WIDGET.sel
if not W then return end
if W.type=="button"then
for k,v in next,W do
print(k,v)
end
W.code()
W:FX()
SFX.play("button")

View File

@@ -1,3 +1,4 @@
local ins,rem=table.insert,table.remove
local mobileHide=(system=="Android"or system=="iOS")and function()return true end
local function BACK()SCN.back()end
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 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 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 C=color
local Widgets={
load={},intro={},quit={},
main={
play= newButton(150,280,200,160,C.lightRed, 55,function()SCN.push()SCN.swapTo("mode")end, nil,"setting"),
setting=newButton(370,280,200,160,C.lightBlue, 45,function()SCN.push()SCN.swapTo("setting_game")end, nil,"music"),
music= newButton(590,280,200,160,C.lightPurple, 32,function()SCN.push()SCN.swapTo("music")end, nil,"help"),
help= newButton(150,460,200,160,C.lightYellow, 50,function()SCN.push()SCN.swapTo("help")end, nil,"stat"),
stat= newButton(370,460,200,160,C.lightCyan, 43,function()SCN.push()SCN.swapTo("stat")end, nil,"qplay"),
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.goto("setting_game")end, nil,"music"),
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.goto("help")end, nil,"stat"),
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"),
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"),
},
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),
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),
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),
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),
--function()SCN.push()SCN.swapTo("custom")end
},
music={
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")),
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")),
back= newButton(640, 630,230,90, C.white,40,BACK),
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),
down= newButton(1100, 480,120,120,C.white, 55,pressKey("down")),
back= newButton(640, 630,230,90, C.white, 40,BACK),
},
custom={
up= newButton(1000, 360,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),
left= newButton(880, 480,100,100,C.white, 45,pressKey("left")),
right= newButton(1120, 480,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")),
set3= newButton(640, 340,240,75, C.lightYellow, 35,pressKey("3")),
set4= newButton(640, 430,240,75, C.lightYellow, 35,pressKey("4")),
set5= newButton(640, 520,240,75, C.lightYellow, 35,pressKey("5")),
back= newButton(640, 630,180,60, C.white, 35,BACK),
up= newButton(1140, 100,100,100,C.white, 45,function()sceneTemp=(sceneTemp-2)%#customID+1 end),
down= newButton(1140, 340,100,100,C.white, 45,function()sceneTemp=sceneTemp%#customID+1 end),
left= newButton(1080, 220,100,100,C.white, 45,pressKey("left")),
right= newButton(1200, 220,100,100,C.white, 45,pressKey("right")),
set1= newButton(940, 320,260,70, C.lightYellow, 32,pressKey("1")),
set2= newButton(940, 400,260,70, C.lightYellow, 32,pressKey("2")),
set3= newButton(940, 480,260,70, C.lightYellow, 32,pressKey("3")),
set4= newButton(940, 560,260,70, C.lightYellow, 32,pressKey("4")),
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={
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),
copy= newButton(920, 640,120,120,C.lightRed, 35,copyBoard),
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),
},
play={
@@ -160,28 +200,27 @@ local Widgets={
pause={
resume= newButton(640,290,240,100,C.white,30,function()resumeGame()end),
restart=newButton(640,445,240,100,C.white,33,function()
TASK.clear("play")
TASK.removeTask_code(TICK.autoPause)
mergeStat(stat,players[1].stat)
resetGameData()
SCN.swapTo("play","none")
end),
setting=newButton(1120,70,240,90,C.lightBlue,35,function()
SCN.push()SCN.swapTo("setting_sound")
SCN.goto("setting_sound")
end),
quit= newButton(640,600,240,100,C.white,35,BACK),
},
setting_game={
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"),
ctrl= newButton(290,220,320,80,C.lightYellow,35,function()SCN.push()SCN.swapTo("setting_control")end, nil,"key"),
key= newButton(640,220,320,80,C.lightGreen,35,function()SCN.push()SCN.swapTo("setting_key")end, nil,"touch"),
touch= newButton(990,220,320,80,C.lightBlue,35,function()SCN.push()SCN.swapTo("setting_touch")end, nil,"reTime"),
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.goto("setting_key")end, nil,"touch"),
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"),
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"),
layout= newButton(590,540,140,70,C.white,35,function()
SCN.push()
SCN.swapTo("setting_skin")
SCN.goto("setting_skin")
end,nil,"quickR"),
quickR= newSwitch(1050,340,35, SETval("quickR"), SETrev("quickR"), nil,"swap"),
swap= newSwitch(1050,440,19, SETval("swap"), SETrev("swap"), nil,"fine"),
@@ -308,8 +347,7 @@ local Widgets={
sceneTemp.snap=sceneTemp.snap%6+1
end),
option= newButton(520,180,170,80,C.white,40,function()
SCN.push()
SCN.swapTo("setting_touchSwitch")
SCN.goto("setting_touchSwitch")
end),
back= newButton(760,180,170,80,C.white,40,BACK),
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")),
icon= newSwitch(850,300, 40,SETval("VKIcon"),SETrev("VKIcon")),
tkset= newButton(1120,420,240,80,C.white,32,function()
SCN.push()
SCN.swapTo("setting_trackSetting")
SCN.goto("setting_trackSetting")
end,function()return not setting.VKTrack end),
alpha= newSlider(840,540,400,10,40,nil,SETval("VKAlpha"),SETsto("VKAlpha")),
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"),
},
help={
staff= newButton(980,500,150,80,C.white,32,function()SCN.push()SCN.swapTo("staff")end,nil,"his"),
his= newButton(1160,500,150,80,C.white,32,function()SCN.push()SCN.swapTo("history")end,nil,"qq"),
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.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"),
back= newButton(640,600,200,80,C.white,40,BACK,nil,"staff"),
},