0.11.2:Pong(操作错误导致只能用覆盖文件代替合并分支)(非0.11.2最终版)
This commit is contained in:
@@ -150,7 +150,7 @@ local spinOffset={
|
||||
local FCL={
|
||||
[1]={
|
||||
{{11},{11,2},{1},{},{2},{2,2},{12,1},{12}},
|
||||
{{11,4},{11,3},{11,2,3},{4},{3},{2,3},{2,2,3},{12,4},{12,3}},
|
||||
{{11,4},{11,3},{1,4},{4},{3},{2,3},{2,2,3},{12,4},{12,3}},
|
||||
},
|
||||
[3]={
|
||||
{{11},{11,2},{1},{},{2},{2,2},{12,1},{12},},
|
||||
|
||||
@@ -438,9 +438,9 @@ function resetGameData()
|
||||
game.seed=rnd(261046101471026)
|
||||
|
||||
destroyPlayers()
|
||||
restoreVirtualKey()
|
||||
modeEnv=curMode.env
|
||||
curMode.load()--BG/BGM need redefine in custom,so up here
|
||||
restoreVirtualKey()
|
||||
curMode.load()
|
||||
if modeEnv.task then
|
||||
for i=1,#players do
|
||||
players[i]:newTask(modeEnv.task)
|
||||
@@ -494,8 +494,8 @@ function resetPartGameData(replaying)
|
||||
end
|
||||
|
||||
destroyPlayers()
|
||||
restoreVirtualKey()
|
||||
modeEnv=curMode.env
|
||||
restoreVirtualKey()
|
||||
curMode.load()
|
||||
if modeEnv.task then
|
||||
for i=1,#players do
|
||||
|
||||
428
parts/getTip.lua
428
parts/getTip.lua
@@ -1,200 +1,200 @@
|
||||
local L
|
||||
if setting.lang==1 or setting.lang==2 then
|
||||
L={
|
||||
"ZS JL T O I",
|
||||
"VVVVVV好玩!",
|
||||
"uid:225238922",
|
||||
"Tetralegends也很好玩!",
|
||||
"tetr.js也很好玩!",
|
||||
"Tetr.io也很好玩!",
|
||||
"Techminohaowan",
|
||||
"Techmino 好玩!",
|
||||
"STSD必死",
|
||||
"REGRET!!",
|
||||
"osu好玩!",
|
||||
"O spin Triple!",
|
||||
"Nullpomino也很好玩!",
|
||||
"Naki 可爱!",
|
||||
"Miya 可爱!",
|
||||
"Lua天下第一",
|
||||
"LrL RlR LLr RRl RRR LLL FFF RfR RRf rFF",
|
||||
"Let-The-Bass-Kick!",
|
||||
"l-=-1",
|
||||
"Jstris也很好玩!",
|
||||
"fin neo iso 是满足tspin条件的特殊t2的名字",
|
||||
"e^(pi*i/2)=i",
|
||||
"e^(pi*i)=-1",
|
||||
"DT炮=TSD+TST炮",
|
||||
"Cultris II也很好玩!",
|
||||
"Ctrl+W=关闭当前标签页",
|
||||
"Ctrl+Tab=切换标签页",
|
||||
"Ctrl+F=查找",
|
||||
"Ctrl+D=复制一份",
|
||||
"Ctrl+Alt+Z=查看所有qq消息",
|
||||
"Ctrl+A=全选",
|
||||
"Ctrl+鼠标滚轮=缩放",
|
||||
"COOL!!",
|
||||
"BT炮=beta炮=TCM-β炮",
|
||||
"backspace=返回上一个文件目录",
|
||||
"B2B2B2B存在吗?",
|
||||
"B2B2B???",
|
||||
"Am G F G",
|
||||
"Alt+Tab=切换窗口",
|
||||
"Alt+F4=关闭当前窗口",
|
||||
"ALLSPIN!",
|
||||
"注意到\"旋转\"到底对方块做了些什么吗?",
|
||||
"有疑问? 先看设置有没有你想要的",
|
||||
"有建议的话可以把信息反馈给作者~",
|
||||
"学会使用两个旋转键, 三个更好",
|
||||
"新人请千万记住,打好基础,不要太早学那些花里胡哨的。",
|
||||
"享受Tech的特色旋转系统!",
|
||||
"无聊翻翻设置是好习惯",
|
||||
"我的世界好玩!",
|
||||
"提前旋转等设置可以用来救命",
|
||||
"泰拉瑞亚好玩!",
|
||||
"适度游戏益脑,沉迷游戏伤身,合理安排时间,享受健康生活",
|
||||
"使用love2d引擎制作",
|
||||
"少女祈祷中",
|
||||
"扫雷好玩!",
|
||||
"请不要向对方块不感兴趣的路人推荐此游戏。",
|
||||
"请不要随意宣传,出了事都怪你们",
|
||||
"你可以从统计页面打开游戏存档目录",
|
||||
"魔方好玩!",
|
||||
"喵!",
|
||||
"免费吃鸡方块",
|
||||
"秘密数字:626",
|
||||
"每个虚拟按键都可以隐藏/显示,尺寸也可调",
|
||||
"每个块的出现方向可以自定义。",
|
||||
"没有专业美术的人,程序员审美警告",
|
||||
"没学过编曲,音乐都是自己凭感觉写的,觉得不好听就设置里关了吧",
|
||||
"联网还没做呢, 别急",
|
||||
"键位是可以自定义的。",
|
||||
"健康小贴士:玩游戏多眨眼,不然会干眼病",
|
||||
"健康小贴士:不要熬夜,真的会猝死",
|
||||
"合群了就会消失, 但是消失不代表没有意义",
|
||||
"更小的DAS和ARR拥有更高的操作上限(前提是你能控制得了)",
|
||||
"俄罗斯方块环游记也不错!",
|
||||
"调到特殊的日期也不会发生什么的",
|
||||
"低帧率会降低游戏体验",
|
||||
"戴上耳机以获得最佳体验",
|
||||
"大满贯10连击消四全清!",
|
||||
"打好块没有捷径,多练。",
|
||||
"茶娘 可爱!",
|
||||
"草(日本语)",
|
||||
"不要在上课时玩游戏!",
|
||||
"不要随意宣传,不要随意宣传,不要随意宣传",
|
||||
"不要盯着bug不放",
|
||||
"不是动画,真的在加载!",
|
||||
"别问游戏名怎么取的,问就是随便想的",
|
||||
"本游戏难度上限很高, 做好心理准备。",
|
||||
"本游戏可不是休闲游戏",
|
||||
"报时机器人:新的一天开始了",
|
||||
"626r/s",
|
||||
"40行世界纪录:15.654s",
|
||||
"4+4+4+4+2+2+1=17",
|
||||
"3.1415926535897932384",
|
||||
"26连T2来一个?",
|
||||
"20G本质是一套全新的游戏规则",
|
||||
"20连PC来一个?",
|
||||
"2+2=Miya",
|
||||
"2.7182818284590452353",
|
||||
"15puzzle好玩!",
|
||||
"11renPC!",
|
||||
"100行内23PC来一个?",
|
||||
"1, 2, ⑨!!!!!",
|
||||
"<方块研究所>有一个Nspire-CX版本!",
|
||||
"↑↑↓↓←→←→BABA",
|
||||
"\\196/",
|
||||
"(RUR'U')R'FR2U'R'U'(RUR'F')",
|
||||
"\\196/",
|
||||
"↑↑↓↓←→←→BABA",
|
||||
"1, 2, ⑨!!!!!",
|
||||
"100行内23PC来一个?",
|
||||
"11renPC!",
|
||||
"15puzzle好玩!",
|
||||
"2.7182818284590452353",
|
||||
"2+2=Miya",
|
||||
"20连PC来一个?",
|
||||
"20G本质是一套全新的游戏规则",
|
||||
"26连T2来一个?",
|
||||
"3.1415926535897932384",
|
||||
"4+4+4+4+2+2+1=17",
|
||||
"40行世界纪录:15.654s",
|
||||
"626r/s",
|
||||
"报时机器人:新的一天开始了",
|
||||
"本游戏可不是休闲游戏",
|
||||
"本游戏难度上限很高,做好心理准备。",
|
||||
"别问游戏名怎么取的,问就是随便想的",
|
||||
"不是动画,真的在加载!",
|
||||
"不要盯着bug不放",
|
||||
"不要随意宣传,不要随意宣传,不要随意宣传",
|
||||
"不要在上课时玩游戏!",
|
||||
"草(日本语)",
|
||||
"茶娘 可爱!",
|
||||
"打好块没有捷径,多练。",
|
||||
"大满贯10连击消四全清!",
|
||||
"戴上耳机以获得最佳体验",
|
||||
"低帧率会降低游戏体验",
|
||||
"调到特殊的日期也不会发生什么的",
|
||||
"俄罗斯方块环游记也不错!",
|
||||
"方块研究所 有一个Nspire-CX版本!",
|
||||
"更小的DAS和ARR拥有更高的操作上限(前提是你能控制得了)",
|
||||
"合群了就会消失,但是消失不代表没有意义",
|
||||
"健康小贴士:不要熬夜,真的会猝死",
|
||||
"健康小贴士:玩游戏多眨眼,不然会干眼病",
|
||||
"键位是可以自定义的",
|
||||
"联网还没做呢,别急",
|
||||
"没学过编曲,音乐都是自己凭感觉写的,觉得不好听就设置里关了吧",
|
||||
"没有专业美术的人,程序员审美警告",
|
||||
"每个块的出现方向可以自定义",
|
||||
"每个虚拟按键都可以隐藏/显示,尺寸也可调",
|
||||
"秘密数字:626",
|
||||
"免费吃鸡方块",
|
||||
"喵!",
|
||||
"魔方好玩!",
|
||||
"你可以从统计页面打开游戏存档目录",
|
||||
"请不要随意宣传,出了事都怪你们",
|
||||
"请不要向对方块不感兴趣的路人推荐此游戏。",
|
||||
"扫雷好玩!",
|
||||
"少女祈祷中",
|
||||
"使用love2d引擎制作",
|
||||
"适度游戏益脑,沉迷游戏伤身,合理安排时间,享受健康生活",
|
||||
"泰拉瑞亚好玩!",
|
||||
"提前旋转等设置可以用来救命",
|
||||
"我的世界好玩!",
|
||||
"无聊翻翻设置是好习惯",
|
||||
"享受Tech的特色旋转系统!",
|
||||
"新人请千万记住,打好基础,不要太早学那些花里胡哨的。",
|
||||
"学会使用两个旋转键,三个更好",
|
||||
"有建议的话可以把信息反馈给作者~",
|
||||
"有疑问? 先看设置有没有你想要的",
|
||||
"注意到\"旋转\"到底对方块做了些什么吗?",
|
||||
"ALLSPIN!",
|
||||
"Alt+F4=关闭当前窗口",
|
||||
"Alt+Tab=切换窗口",
|
||||
"Am G F G",
|
||||
"B2B2B???",
|
||||
"B2B2B2B存在吗?",
|
||||
"backspace=返回上一个文件目录",
|
||||
"BT炮=beta炮=TCM-β炮",
|
||||
"COOL!!",
|
||||
"Ctrl+鼠标滚轮=缩放",
|
||||
"Ctrl+A=全选",
|
||||
"Ctrl+Alt+Z=查看所有qq消息",
|
||||
"Ctrl+D=复制一份",
|
||||
"Ctrl+F=查找",
|
||||
"Ctrl+Tab=切换标签页",
|
||||
"Ctrl+W=关闭当前标签页",
|
||||
"Cultris II也很好玩!",
|
||||
"DT炮=TSD+TST炮",
|
||||
"e^(pi*i)=-1",
|
||||
"e^(pi*i/2)=i",
|
||||
"fin neo iso 是满足tspin条件的特殊t2的名字",
|
||||
"Jstris也很好玩!",
|
||||
"l-=-1",
|
||||
"Let-The-Bass-Kick!",
|
||||
"LrL RlR LLr RRl RRR LLL FFF RfR RRf rFF",
|
||||
"Lua天下第一",
|
||||
"Miya 可爱!",
|
||||
"Naki 可爱!",
|
||||
"Nullpomino也很好玩!",
|
||||
"O spin Triple!",
|
||||
"osu好玩!",
|
||||
"Phigros好玩!",
|
||||
"REGRET!!",
|
||||
"STSD必死",
|
||||
"Techmino好玩!",
|
||||
"Techminohaowan",
|
||||
"Tetr.io也很好玩!",
|
||||
"Tetr.js也很好玩!",
|
||||
"Tetralegends也很好玩!",
|
||||
"uid:225238922",
|
||||
"VVVVVV好玩!",
|
||||
"ZS JL T O I",
|
||||
-- "Z酱 可爱!",
|
||||
}
|
||||
elseif setting.lang==3 then
|
||||
L={
|
||||
"ZS JL T O I",
|
||||
"You can set orientation for each block",
|
||||
"You can open saving directory from stat. page",
|
||||
"You are Grand Master",
|
||||
"wwwwww",
|
||||
"Who is diao",
|
||||
"What about 26 TSDs?",
|
||||
":pog:",
|
||||
"(RUR'U')R'FR2U'R'U'(RUR'F')",
|
||||
"\"Free block game with royale mode\"",
|
||||
"\\jezevec/\\jezevec/\\jezevec/",
|
||||
"\\osk/\\osk/\\osk/",
|
||||
"↑↑↓↓←→←→BABA",
|
||||
"1, 2, ⑨!!!!!",
|
||||
"11renPC!",
|
||||
"2.7182818284590452353",
|
||||
"2^2=Miya",
|
||||
"20G actually is a brand new game rule",
|
||||
"225238922 Bilibili cheers!",
|
||||
"3.1415926535897932384",
|
||||
"4+4+4+4+2+2+1=17",
|
||||
"40L WR: 15.654s",
|
||||
"少女祈禱中",
|
||||
"ALLSPIN!",
|
||||
"Also try 15puzzle",
|
||||
"Also try Cultris II!",
|
||||
"Also try Jstris!",
|
||||
"Also try Minecraft",
|
||||
"Also try Minesweeper",
|
||||
"Also try Nullpomino!",
|
||||
"Also try OSU",
|
||||
"Also try Phigros",
|
||||
"Also try Rubik's cube",
|
||||
"Also try Terraria",
|
||||
"Also try Tetr.io!",
|
||||
"Also try Tetr.js!",
|
||||
"Also try Tetralegends",
|
||||
"Also try VVVVVV!",
|
||||
"Am G F G",
|
||||
"Any suggestions to author!",
|
||||
"B2B2B???",
|
||||
"Back to Back 10 combo Techrash PC!",
|
||||
"COOL!!",
|
||||
"Diao so bully",
|
||||
"Disappearing doesn't mean useless",
|
||||
"Do not play game in class!",
|
||||
"Do not playing too long without having a break!",
|
||||
"Don't look directly at the bugs!",
|
||||
"DT cannon=TSD+TST",
|
||||
"e^(pi*i)=-1",
|
||||
"e^(pi*i/2)=i",
|
||||
"Enjoy Tech. Rotation System!",
|
||||
"Find out what's in the setting!",
|
||||
"Have you noticed what does \"rotating\" do to block?",
|
||||
"Headphones for better experience",
|
||||
"Hello world!",
|
||||
"Initial Rotation etc. can save your life",
|
||||
"Is B2B2B2B possible?",
|
||||
"l-=-1",
|
||||
"Let-The-Bass-Kick!",
|
||||
"Lower fps causes lower game experience",
|
||||
"LrL RlR LLr RRl RRR LLL FFF RfR RRf rFF",
|
||||
"Lua No.1",
|
||||
"Miya so cute!",
|
||||
"Miya:Nya!",
|
||||
"Not animation,real loading!",
|
||||
"Nothing will happen when some special day come",
|
||||
"O spin triple!",
|
||||
"OHHHHHHHHHHHHHH",
|
||||
"Only offline game now",
|
||||
"Powered by love2d",
|
||||
"REGRET!!",
|
||||
"Secret num:626",
|
||||
"Small DAS&ARR can make you faster,if you can control block correctly",
|
||||
"Switch music off if make you awful",
|
||||
"Techmino has a Nspire-CX edition!",
|
||||
"Techmino is so fun!",
|
||||
"Techmino=Technique+Tetromino",
|
||||
"This game can be very hard,be mentally perpared",
|
||||
"This in not a casual game",
|
||||
"Try to use two rotate button,three better",
|
||||
"Warning: Programmer Art",
|
||||
"What about 20 PCs?",
|
||||
"What about 23 PCs in 100 lines?",
|
||||
"Warning: Programmer Art",
|
||||
"Try to use two rotate button,three better",
|
||||
"This in not a casual game",
|
||||
"This game can be very hard,be mentally perpared",
|
||||
"Tetris journey has network battle!",
|
||||
"Tetralegends is fun!",
|
||||
"Terraria is fun!",
|
||||
"Techmino=Technique+Tetromino",
|
||||
"Techmino is so fun!",
|
||||
"Techmino has a Nspire-CX edition!",
|
||||
"Switch music off if make you awful",
|
||||
"Small DAS&ARR can make you faster,if you can control block correctly",
|
||||
"Secret num:626",
|
||||
"Rubik's cube is fun!",
|
||||
"REGRET!!",
|
||||
"Powered by love2d",
|
||||
"Playing too much = taking drugs",
|
||||
"OSU is fun!",
|
||||
"Only offline game now",
|
||||
"OHHHHHHHHHHHHHH",
|
||||
"O spin triple!",
|
||||
"Nothing will happen when some special day come",
|
||||
"Not animation,real loading!",
|
||||
"Miya:Nya!",
|
||||
"Miya so cute!",
|
||||
"Minesweeper is fun!",
|
||||
"Minecraft is fun!",
|
||||
"Lua No.1",
|
||||
"LrL RlR LLr RRl RRR LLL FFF RfR RRf rFF",
|
||||
"Lower fps causes lower game experience",
|
||||
"Let-The-Bass-Kick!",
|
||||
"l-=-1",
|
||||
"Is B2B2B2B possible?",
|
||||
"Initial Rotation etc. can save your life",
|
||||
"Hello world!",
|
||||
"Headphones for better experience",
|
||||
"Have you noticed what does \"rotating\" do to block?",
|
||||
"Find out what's in the setting!",
|
||||
"Enjoy Tech. Rotation System!",
|
||||
"e^(pi*i/2)=i",
|
||||
"e^(pi*i)=-1",
|
||||
"DT cannon=TSD+TST",
|
||||
"Don't look directly at the bugs!",
|
||||
"DO NOT PRESS F10",
|
||||
"Do not play game in class!",
|
||||
"Disappearing doesn't mean useless",
|
||||
"Diao so bully",
|
||||
"COOL!!",
|
||||
"Back to Back 10 combo Techrash PC!",
|
||||
"B2B2B???",
|
||||
"Any suggestions to author!",
|
||||
"Am G F G",
|
||||
"Also try VVVVVV!",
|
||||
"Also try Tetr.js!",
|
||||
"Also try Tetr.io!",
|
||||
"Also try Nullpomino!",
|
||||
"Also try Jstris!",
|
||||
"Also try Cultris II!",
|
||||
"ALLSPIN!",
|
||||
"少女祈禱中",
|
||||
"40L WR: 15.654s",
|
||||
"4+4+4+4+2+2+1=17",
|
||||
"3.1415926535897932384",
|
||||
"225238922 Bilibili cheers!",
|
||||
"20G actually is a brand new game rule",
|
||||
"2^2=Miya",
|
||||
"2.7182818284590452353",
|
||||
"15puzzle is fun!",
|
||||
"11renPC!",
|
||||
"1, 2, ⑨!!!!!",
|
||||
"↑↑↓↓←→←→BABA",
|
||||
"\\osk/",
|
||||
"\\jezevec/",
|
||||
"\"Free block game with royale mode\"",
|
||||
"(RUR'U')R'FR2U'R'U'(RUR'F')",
|
||||
":pog:",
|
||||
"What about 26 TSDs?",
|
||||
"Who is diao",
|
||||
"wwwwww",
|
||||
"You are Grand Master",
|
||||
"You can open saving directory from stat. page",
|
||||
"You can set orientation for each block",
|
||||
"ZS JL T O I",
|
||||
}
|
||||
elseif setting.lang==4 then
|
||||
L={'!','@','#','$','%','^','&','*','(',')','-','=','_','+','[',']','{','}','\\','|',';',':','\'','"',',','<','.','>','/','?'}
|
||||
@@ -247,34 +247,34 @@ elseif setting.lang==5 then
|
||||
}
|
||||
else
|
||||
L={
|
||||
"隐形难吗?那个节目上的谁,水平那么菜也打得还行,就是你菜",
|
||||
"一口一个wtcl还不赶紧去练,你是不思进取还是不想好好说话?",
|
||||
"我一个滑铲就挖了个11renPC",
|
||||
"我曾经在极度愤怒的时候15秒消了40行",
|
||||
"天天F3F3,怕别人不知道你菜?",
|
||||
"天天卖弱,你一定把把150apm吧?",
|
||||
"天天催更催更,你咋不来帮忙开发啊,真以为作者很强催催啥都有?",
|
||||
"设置都看过一遍了吗?明明都能调还嫌这嫌那,可牛逼了您",
|
||||
"少玩点,多眨眼,到时候瞎了别怪我没提醒你",
|
||||
"人只用一只手都能玩,你呢?",
|
||||
"全隐40行全消四很难吗??",
|
||||
"没那水平别天天整什么花里胡哨的,人玩几年你想几天赶上?",
|
||||
"满口PCDT信天翁,还会点别的么?",
|
||||
"叫你多练消四不听,现在要速度没速度,spin打完地形一塌糊涂,开心了?",
|
||||
"叫你多练就多练,想着几天变神仙,当自己是谁?",
|
||||
"极限20G不是随手通?",
|
||||
"还搁这玩手机呢,作业做完了?",
|
||||
"除了雨宫太阳你还认识谁?Jonas知道吗?Ajanba听过吗?",
|
||||
"不会吧不会吧,真的还有人不能随手Tspin?",
|
||||
"别会个c4w就以为自己多强,这是基本功罢了。",
|
||||
"60lpm?拍硬降刷的吧。",
|
||||
"40行还要40多秒,就这?",
|
||||
"3pps不是人均水平?",
|
||||
"25TSD不难吧。",
|
||||
"20G很难?是个人都能玩吧。",
|
||||
"20连pc不是随手?",
|
||||
"100apm?定式刷的吧。",
|
||||
"0202年了,还在玩这种小孩子玩的游戏?",
|
||||
"100apm?定式刷的吧。",
|
||||
"20连pc不是随手?",
|
||||
"20G很难?是个人都能玩吧。",
|
||||
"25TSD不难吧。",
|
||||
"3pps不是人均水平?",
|
||||
"40行还要40多秒,就这?",
|
||||
"60LPM?拍硬降刷的吧。",
|
||||
"别会个c4w就以为自己多强,这是基本功罢了。",
|
||||
"不会吧不会吧,真的还有人不能随手Tspin?",
|
||||
"除了雨宫太阳你还认识谁?Jonas知道吗?Ajanba听过吗?",
|
||||
"还搁这玩手机呢,作业做完了?",
|
||||
"极限20G不是随手通?",
|
||||
"叫你多练就多练,想着几天变神仙,当自己是谁?",
|
||||
"叫你多练消四不听,现在要速度没速度,spin打完地形一塌糊涂,开心了?",
|
||||
"满口PCDT信天翁,还会点别的么?",
|
||||
"没那水平别天天整什么花里胡哨的,人玩几年你想几天赶上?",
|
||||
"全隐40行全消四很难吗??",
|
||||
"人只用一只手都能玩,你呢?",
|
||||
"少玩点,多眨眼,到时候瞎了别怪我没提醒你",
|
||||
"设置都看过一遍了吗?明明都能调还嫌这嫌那,可牛逼了您",
|
||||
"天天催更催更,你咋不来帮忙开发啊,真以为作者很强催催啥都有?",
|
||||
"天天卖弱,你一定把把150apm吧?",
|
||||
"天天F3F3,怕别人不知道你菜?",
|
||||
"我曾经在极度愤怒的时候15秒消了40行",
|
||||
"我一个滑铲就挖了个11renPC",
|
||||
"一口一个wtcl还不赶紧去练,你是不思进取还是不想好好说话?",
|
||||
"隐形难吗?那个节目上的谁,水平那么菜也打得还行,就是你菜",
|
||||
}
|
||||
end
|
||||
end
|
||||
|
||||
@@ -62,9 +62,9 @@ do
|
||||
{331,3,2, 0,-1,0},{113,3,0, 0, 0,0},{113,3,2,-1, 0,0},--J
|
||||
{113,4,2,-1,-1,0},{331,4,0,-1, 0,0},{331,4,2, 0, 0,0},--L
|
||||
{222,7,2,-1, 0,1},{222,7,2,-2, 0,1},{222,7,2, 0, 0,1},--I
|
||||
{121,6,0, 1,-1,1},{112,6,0, 2,-1,2},{122,6,0, 1,-2,2},--O
|
||||
{121,6,0, 1,-1,2},{112,6,0, 2,-1,2},{122,6,0, 1,-2,2},--O
|
||||
{323,6,0,-1,-1,2},{332,6,0,-2,-1,2},{322,6,0,-1,-2,2},--O
|
||||
}--{key,id,dir,dx,dy,freeLv(0=unmovable,1=L/R unmovable,2=free)}
|
||||
}--{keys, ID, dir, dx, dy, freeLevel (0=immovable,1=L+R immovable,2=free)}
|
||||
local XspinList={
|
||||
{{ 1,-1},{ 1, 0},{ 1, 1},{ 1,-2},{ 1, 2}},
|
||||
{{ 0,-1},{ 0,-2},{ 0, 1},{ 0,-2},{ 0, 2}},
|
||||
@@ -251,8 +251,8 @@ do
|
||||
[10]={{ 0,-1},{-1,-1},{ 0, 1},{ 0,-2},{ 1,-2},{ 0, 2}},
|
||||
[03]={{ 1, 0},{ 1, 1},{ 0,-1},{ 0,-2},{ 0,-3},{ 1,-1},{ 0, 1},{ 0, 2},{ 0, 3}},
|
||||
[30]={{-1, 0},{-1, 1},{ 0,-1},{ 0,-2},{ 0,-3},{-1,-1},{ 0, 1},{ 0, 2},{ 0, 3}},
|
||||
[12]={{ 1, 0},{ 0,-1},{ 1, 1},{-1, 0},{ 0, 1},{-1,-1}},
|
||||
[21]={{-1, 0},{ 0,-1},{-1, 1},{ 1, 0},{ 0, 1},{ 1,-1}},
|
||||
[12]={{ 1, 0},{ 0,-1},{-2, 0},{ 1, 1},{-1, 0},{ 0, 1},{-1,-1}},
|
||||
[21]={{-1, 0},{ 0,-1},{ 2, 0},{-1, 1},{ 1, 0},{ 0, 1},{ 1,-1}},
|
||||
[32]={{ 0,-1},{ 1, 0},{ 0, 1},{-1, 0},{-1,-1},{ 0, 2}},
|
||||
[23]={{ 0,-1},{ 1,-1},{ 0, 1},{ 0,-2},{-1,-2},{ 0, 2}},
|
||||
[02]={{ 0,-1},{-1, 0}},
|
||||
@@ -378,9 +378,9 @@ do
|
||||
for i=2,5 do AIRS[i]=AIRS[1]end
|
||||
for i=8,25 do AIRS[i]=AIRS[1]end
|
||||
|
||||
local NONE={}
|
||||
for i=1,25 do NONE[i]=ZERO end
|
||||
end
|
||||
local NONE={}
|
||||
for i=1,25 do NONE[i]=ZERO end
|
||||
|
||||
return{
|
||||
TRS=TRS,
|
||||
|
||||
@@ -179,7 +179,7 @@ local _={}
|
||||
for k,v in next,missionEnum do _[v]=k end
|
||||
for k,v in next,_ do missionEnum[k]=v end
|
||||
|
||||
local function T(s,t)return love.graphics.newText(setFont(s),t)end
|
||||
local function T(s,t)return love.graphics.newText(getFont(s),t)end
|
||||
drawableText={
|
||||
question=T(100,"?"),right=T(45,"→"),
|
||||
small=T(30,"<"),large=T(30,">"),
|
||||
@@ -224,10 +224,8 @@ drawableText={
|
||||
}
|
||||
|
||||
do
|
||||
local N1,N2={0,1},{1,0}
|
||||
local N3,N4={1,1},{.5,.5}
|
||||
local I1,I2={-.5,1.5},{1.5,-.5}
|
||||
local I3,I4={.5,1.5},{1.5,.5}
|
||||
local N1,N2,N3,N4={0,1},{1,0},{1,1},{.5,.5}
|
||||
local I1,I2,I3,I4={-.5,1.5},{1.5,-.5},{.5,1.5},{1.5,.5}
|
||||
local V4={1.5,1.5}
|
||||
local L1,L2={0,2},{2,0}
|
||||
spinCenters={
|
||||
|
||||
@@ -1,12 +1,16 @@
|
||||
return{
|
||||
{name="sprint_10", x=0, y=0, size=35,shape=1,icon="sprint", unlock={"sprint_20","sprint_40"}},
|
||||
{name="sprint_20", x=-300, y=0, size=45,shape=1,icon="sprint", },
|
||||
{name="sprint_40", x=0, y=-400, size=55,shape=1,icon="sprint", unlock={"sprint_100","marathon_normal","sprintPenta","sprintMPH"}},
|
||||
{name="sprint_100", x=-200, y=-400, size=45,shape=1,icon="sprint", unlock={"sprint_400","drought_normal"}},
|
||||
{name="sprint_400", x=-400, y=-400, size=35,shape=1,icon="sprint", unlock={"sprint_1000"}},
|
||||
{name="sprint_1000", x=-600, y=-400, size=35,shape=1,icon="sprint", },
|
||||
{name="drought_normal", x=-400, y=-200, size=35,shape=1,icon="noI", unlock={"drought_lunatic"}},
|
||||
{name="drought_lunatic", x=-600, y=-200, size=35,shape=1,icon="mess", },
|
||||
{name="sprint_20", x=-200, y=0, size=45,shape=1,icon="sprint", },
|
||||
{name="sprint_40", x=0, y=-400, size=35,shape=1,icon="sprint", unlock={"dig_10","sprint_100","marathon_normal","sprintPenta","sprintMPH"}},
|
||||
{name="sprint_100", x=-200, y=-200, size=45,shape=1,icon="sprint", unlock={"sprint_400","drought_normal"}},
|
||||
{name="drought_normal", x=-400, y=0, size=35,shape=1,icon="noI", unlock={"drought_lunatic"}},
|
||||
{name="drought_lunatic", x=-600, y=0, size=35,shape=1,icon="mess", },
|
||||
{name="sprint_400", x=-400, y=-200, size=35,shape=1,icon="sprint", unlock={"sprint_1000"}},
|
||||
{name="sprint_1000", x=-600, y=-200, size=35,shape=1,icon="sprint", },
|
||||
{name="dig_10", x=-200, y=-400, size=35,shape=1,icon="dig", unlock={"dig_40"}},
|
||||
{name="dig_40", x=-400, y=-400, size=35,shape=1,icon="dig", unlock={"dig_100"}},
|
||||
{name="dig_100", x=-600, y=-400, size=35,shape=1,icon="dig", unlock={"dig_400"}},
|
||||
{name="dig_400", x=-800, y=-200, size=35,shape=1,icon="dig", },
|
||||
{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"}},
|
||||
{name="marathon_hard", x=0, y=-800, size=45,shape=1,icon="flag", unlock={"master_beginner"}},
|
||||
{name="solo_1", x=-300, y=-1000, size=35,shape=1,icon="solo", unlock={"solo_2"}},
|
||||
@@ -17,7 +21,6 @@ return{
|
||||
{name="techmino49_easy", x=-900, y=-1200, size=35,shape=1,icon="royale", unlock={"techmino49_hard","techmino99_easy"}},
|
||||
{name="techmino49_hard", x=-900, y=-1400, size=35,shape=1,icon="royale", unlock={"techmino49_ultimate"}},
|
||||
{name="techmino49_ultimate", x=-900, y=-1600, size=35,shape=1,icon="royale", },
|
||||
|
||||
{name="techmino99_easy", x=-1100, y=-1400, size=35,shape=1,icon="royale", unlock={"techmino99_hard"}},
|
||||
{name="techmino99_hard", x=-1100, y=-1600, size=35,shape=1,icon="royale", unlock={"techmino99_ultimate"}},
|
||||
{name="techmino99_ultimate", x=-1100, y=-1800, size=35,shape=1,icon="royale", },
|
||||
@@ -48,10 +51,8 @@ return{
|
||||
{name="survivor_ultimate", x=1100, y=-600, size=35,shape=1,icon="survivor", },
|
||||
{name="attacker_hard", x=300, y=-800, size=35,shape=1,icon="attacker", unlock={"attacker_ultimate"}},
|
||||
{name="attacker_ultimate", x=300, y=-1000, size=35,shape=1,icon="attacker", },
|
||||
|
||||
{name="defender_normal", x=500, y=-800, size=35,shape=1,icon="defender", unlock={"defender_lunatic"}},
|
||||
{name="defender_lunatic", x=500, y=-1000, size=35,shape=1,icon="defender", },
|
||||
|
||||
{name="dig_hard", x=700, y=-800, size=35,shape=1,icon="dig", unlock={"dig_ultimate"}},
|
||||
{name="dig_ultimate", x=700, y=-1000, size=35,shape=1,icon="dig", },
|
||||
|
||||
@@ -64,17 +65,17 @@ return{
|
||||
{name="pcchallenge_normal", x=800, y=-100, size=35,shape=1,icon="pcchallenge", unlock={"pcchallenge_hard"}},
|
||||
{name="pcchallenge_hard", x=1000, y=-100, size=35,shape=1,icon="pcchallenge", unlock={"pcchallenge_lunatic"}},
|
||||
{name="pcchallenge_lunatic",x=1200, y=-100, size=35,shape=1,icon="pcchallenge", },
|
||||
{name="tech_normal", x=400, y=-150, size=35,shape=1,icon="tech", unlock={"tech_normal+","tech_hard","tech_finesse"}},
|
||||
{name="tech_finesse", x=800, y=50, size=35,shape=1,icon="tech", unlock={"tech_finesse+"}},
|
||||
{name="tech_finesse+", x=1000, y=50, size=35,shape=1,icon="tech", },
|
||||
{name="tech_normal+", x=650, y=150, size=35,shape=1,icon="tech", unlock={"tsd_easy"}},
|
||||
{name="tech_normal", x=400, y=-150, size=35,shape=1,icon="tech", unlock={"tech_normal2","tech_hard","tech_finesse"}},
|
||||
{name="tech_finesse", x=800, y=50, size=35,shape=1,icon="tech", unlock={"tech_finesse2"}},
|
||||
{name="tech_finesse2", x=1000, y=50, size=35,shape=1,icon="tech", },
|
||||
{name="tech_normal2", x=650, y=150, size=35,shape=1,icon="tech", unlock={"tsd_easy"}},
|
||||
{name="tsd_easy", x=800, y=250, size=35,shape=1,icon="tsd", unlock={"tsd_hard"}},
|
||||
{name="tsd_hard", x=1000, y=250, size=35,shape=1,icon="tsd", unlock={"tsd_ultimate"}},
|
||||
{name="tsd_ultimate", x=1200, y=250, size=35,shape=1,icon="tsd", },
|
||||
{name="tech_hard", x=400, y=50, size=35,shape=1,icon="tech", unlock={"tech_hard+","tech_lunatic"}},
|
||||
{name="tech_hard+", x=250, y=50, size=35,shape=1,icon="tech", },
|
||||
{name="tech_lunatic", x=400, y=200, size=35,shape=1,icon="tech", unlock={"tech_lunatic+"}},
|
||||
{name="tech_lunatic+", x=250, y=200, size=35,shape=1,icon="tech", },
|
||||
{name="tech_hard", x=400, y=50, size=35,shape=1,icon="tech", unlock={"tech_hard2","tech_lunatic"}},
|
||||
{name="tech_hard2", x=250, y=50, size=35,shape=1,icon="tech", },
|
||||
{name="tech_lunatic", x=400, y=200, size=35,shape=1,icon="tech", unlock={"tech_lunatic2"}},
|
||||
{name="tech_lunatic2", x=250, y=200, size=35,shape=1,icon="tech", },
|
||||
|
||||
{name="zen", x=-800, y=-600, size=35,shape=1,icon="zen", unlock={"ultra","infinite","infinite_dig"}},
|
||||
{name="ultra", x=-1000, y=-400, size=35,shape=1,icon="ultra", },
|
||||
|
||||
371
parts/player.lua
371
parts/player.lua
@@ -58,110 +58,6 @@ local gameEnv0={
|
||||
local scs=spinCenters
|
||||
local kickList=require("parts/kickList")
|
||||
local CCblockID={6,5,4,3,2,1,0}
|
||||
local freshPrepare={
|
||||
none=NULL,
|
||||
bag=function(P)
|
||||
local bag=P.gameEnv.bag
|
||||
local L
|
||||
repeat
|
||||
L={}for i=1,#bag do L[i]=i end
|
||||
repeat P:getNext(bag[rem(L,P:RND(#L))])until not L[1]
|
||||
until #P.next>5
|
||||
end,
|
||||
his4=function(P)
|
||||
local bag=P.gameEnv.bag
|
||||
local L=#bag
|
||||
P.his={bag[P:RND(L)],bag[P:RND(L)],bag[P:RND(L)],bag[P:RND(L)]}
|
||||
for _=1,6 do
|
||||
local i
|
||||
local j=0
|
||||
repeat
|
||||
i=bag[P:RND(L)]
|
||||
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
|
||||
P:getNext(i)
|
||||
rem(P.his,1)P.his[4]=i
|
||||
end
|
||||
end,
|
||||
rnd=function(P)
|
||||
local bag=P.gameEnv.bag
|
||||
local L=#bag
|
||||
P:getNext(bag[P:RND(L)])
|
||||
for i=1,5 do
|
||||
local count=0
|
||||
local i
|
||||
repeat
|
||||
i=bag[P:RND(L)]
|
||||
count=count+1
|
||||
until i~=P.next[#P.next].id or count>=L
|
||||
P:getNext(i)
|
||||
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={
|
||||
none=NULL,
|
||||
bag=function(P)
|
||||
if #P.next<6 then
|
||||
local bag0,bag=P.gameEnv.bag,{}
|
||||
for i=1,#bag0 do bag[i]=bag0[i]end
|
||||
repeat P:getNext(rem(bag,P:RND(#bag)))until not bag[1]
|
||||
end
|
||||
end,
|
||||
his4=function(P)
|
||||
if #P.next<6 then
|
||||
local bag=P.gameEnv.bag
|
||||
local L=#bag
|
||||
for n=1,4 do
|
||||
local j,i=0
|
||||
repeat
|
||||
i=bag[P:RND(L)]
|
||||
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
|
||||
P:getNext(i)
|
||||
P.his[n]=i
|
||||
end
|
||||
end
|
||||
end,
|
||||
rnd=function(P)
|
||||
if #P.next<6 then
|
||||
local bag=P.gameEnv.bag
|
||||
local L=#bag
|
||||
for i=1,4 do
|
||||
local count=0
|
||||
local i
|
||||
repeat
|
||||
i=bag[P:RND(L)]
|
||||
count=count+1
|
||||
until i~=P.next[#P.next].id or count>=L
|
||||
P:getNext(i)
|
||||
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,
|
||||
}
|
||||
--------------------------</Data>--------------------------
|
||||
|
||||
--------------------------<LIB>--------------------------
|
||||
@@ -648,8 +544,7 @@ local function drawHold(P,clr)
|
||||
end end
|
||||
end
|
||||
|
||||
local Pdraw_norm
|
||||
do--function Pdraw_norm(P)
|
||||
local Pdraw_norm do
|
||||
local attackColor={
|
||||
{color.dGrey,color.white},
|
||||
{color.grey,color.white},
|
||||
@@ -1263,17 +1158,124 @@ local function applyGameEnv(P)--Finish gameEnv processing
|
||||
if ENV.ghost==0 then ENV.ghost=nil end
|
||||
if ENV.center==0 then ENV.center=nil end
|
||||
end
|
||||
local function prepareSequence(P)--Call freshPrepare and set newNext
|
||||
local ENV=P.gameEnv
|
||||
if type(ENV.sequence)=="string"then
|
||||
freshPrepare[ENV.sequence](P)
|
||||
P.newNext=freshMethod[ENV.sequence]
|
||||
else
|
||||
print(type(ENV.sequence))
|
||||
print(type(ENV.freshMethod))
|
||||
assert(type(ENV.sequence)=="function"and type(ENV.freshMethod)=="function","wrong sequence generator code")
|
||||
ENV.sequence(P)
|
||||
P.newNext=ENV.freshMethod
|
||||
|
||||
local prepareSequence do
|
||||
local freshPrepare={
|
||||
none=NULL,
|
||||
bag=function(P)
|
||||
local bag=P.gameEnv.bag
|
||||
local L
|
||||
repeat
|
||||
L={}for i=1,#bag do L[i]=i end
|
||||
repeat P:getNext(bag[rem(L,P:RND(#L))])until not L[1]
|
||||
until #P.next>5
|
||||
end,
|
||||
his4=function(P)
|
||||
local bag=P.gameEnv.bag
|
||||
local L=#bag
|
||||
P.his={bag[P:RND(L)],bag[P:RND(L)],bag[P:RND(L)],bag[P:RND(L)]}
|
||||
for _=1,6 do
|
||||
local i
|
||||
local j=0
|
||||
repeat
|
||||
i=bag[P:RND(L)]
|
||||
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
|
||||
P:getNext(i)
|
||||
rem(P.his,1)P.his[4]=i
|
||||
end
|
||||
end,
|
||||
rnd=function(P)
|
||||
local bag=P.gameEnv.bag
|
||||
local L=#bag
|
||||
P:getNext(bag[P:RND(L)])
|
||||
for i=1,5 do
|
||||
local count=0
|
||||
local i
|
||||
repeat
|
||||
i=bag[P:RND(L)]
|
||||
count=count+1
|
||||
until i~=P.next[#P.next].id or count>=L
|
||||
P:getNext(i)
|
||||
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={
|
||||
none=NULL,
|
||||
bag=function(P)
|
||||
if #P.next<6 then
|
||||
local bag0,bag=P.gameEnv.bag,{}
|
||||
for i=1,#bag0 do bag[i]=bag0[i]end
|
||||
repeat P:getNext(rem(bag,P:RND(#bag)))until not bag[1]
|
||||
end
|
||||
end,
|
||||
his4=function(P)
|
||||
if #P.next<6 then
|
||||
local bag=P.gameEnv.bag
|
||||
local L=#bag
|
||||
for n=1,4 do
|
||||
local j,i=0
|
||||
repeat
|
||||
i=bag[P:RND(L)]
|
||||
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
|
||||
P:getNext(i)
|
||||
P.his[n]=i
|
||||
end
|
||||
end
|
||||
end,
|
||||
rnd=function(P)
|
||||
if #P.next<6 then
|
||||
local bag=P.gameEnv.bag
|
||||
local L=#bag
|
||||
for i=1,4 do
|
||||
local count=0
|
||||
local i
|
||||
repeat
|
||||
i=bag[P:RND(L)]
|
||||
count=count+1
|
||||
until i~=P.next[#P.next].id or count>=L
|
||||
P:getNext(i)
|
||||
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,
|
||||
}
|
||||
function prepareSequence(P)--Call freshPrepare and set newNext
|
||||
local ENV=P.gameEnv
|
||||
if type(ENV.sequence)=="string"then
|
||||
freshPrepare[ENV.sequence](P)
|
||||
P.newNext=freshMethod[ENV.sequence]
|
||||
else
|
||||
print(type(ENV.sequence))
|
||||
print(type(ENV.freshMethod))
|
||||
assert(type(ENV.sequence)=="function"and type(ENV.freshMethod)=="function","wrong sequence generator code")
|
||||
ENV.sequence(P)
|
||||
P.newNext=ENV.freshMethod
|
||||
end
|
||||
end
|
||||
end
|
||||
local function loadAI(P,AIdata)--Load AI params
|
||||
@@ -1618,6 +1620,7 @@ function player.attack(P,R,send,time,...)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
function player.garbageRelease(P)
|
||||
local n,flag=1
|
||||
while true do
|
||||
@@ -1743,7 +1746,7 @@ function player.freshBlock(P,keepGhost,control,system)
|
||||
local ENV=P.gameEnv
|
||||
if not keepGhost and P.cur then
|
||||
P.imgY=min(#P.field+1,P.curY)
|
||||
if _20G or P.keyPressing[7]and ENV.sdarr==0 then
|
||||
if P._20G or P.keyPressing[7]and ENV.sdarr==0 then
|
||||
local _=P.imgY
|
||||
|
||||
--Move ghost to bottom
|
||||
@@ -1830,6 +1833,53 @@ function player.lock(P)
|
||||
CC_updateField(P)
|
||||
end
|
||||
end
|
||||
|
||||
local spawnSFX_name={}for i=1,7 do spawnSFX_name[i]="spawn_"..i end
|
||||
function player.resetBlock(P)
|
||||
local C=P.cur
|
||||
local id=C.id
|
||||
local face=P.gameEnv.face[id]
|
||||
local sc=scs[id][face]
|
||||
P.sc=sc --Spin center
|
||||
P.dir=face --Block direction
|
||||
P.r,P.c=#C.bk,#C.bk[1] --Row/column
|
||||
P.curX=int(6-P.c*.5)
|
||||
local y=21+ceil(P.fieldBeneath/30)
|
||||
P.curY=y
|
||||
P.minY=y+sc[2]
|
||||
|
||||
local _=P.keyPressing
|
||||
--IMS
|
||||
if P.gameEnv.ims and(_[1]and P.movDir==-1 or _[2]and P.movDir==1)and P.moving>=P.gameEnv.das then
|
||||
local x=P.curX+P.movDir
|
||||
if not P:ifoverlap(C.bk,x,y)then
|
||||
P.curX=x
|
||||
end
|
||||
end
|
||||
|
||||
--IRS
|
||||
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
|
||||
end
|
||||
|
||||
--Spawn SFX
|
||||
if P.human and id<8 then
|
||||
SFX.fplay(spawnSFX_name[id],setting.spawn)
|
||||
end
|
||||
end
|
||||
|
||||
function player.spin(P,d,ifpre)
|
||||
local iki=P.RS[P.cur.id]
|
||||
if type(iki)=="table"then
|
||||
@@ -1875,50 +1925,6 @@ function player.spin(P,d,ifpre)
|
||||
iki(P,d)
|
||||
end
|
||||
end
|
||||
function player.resetBlock(P)
|
||||
local C=P.cur
|
||||
local id=C.id
|
||||
local face=P.gameEnv.face[id]
|
||||
local sc=scs[id][face]
|
||||
P.sc=sc --Spin center
|
||||
P.dir=face --Block direction
|
||||
P.r,P.c=#C.bk,#C.bk[1] --Row/column
|
||||
P.curX=int(6-P.c*.5)
|
||||
local y=21+ceil(P.fieldBeneath/30)
|
||||
P.curY=y
|
||||
P.minY=y+sc[2]
|
||||
|
||||
local _=P.keyPressing
|
||||
--IMS
|
||||
if P.gameEnv.ims and(_[1]and P.movDir==-1 or _[2]and P.movDir==1)and P.moving>=P.gameEnv.das then
|
||||
local x=P.curX+P.movDir
|
||||
if not P:ifoverlap(C.bk,x,y)then
|
||||
P.curX=x
|
||||
end
|
||||
end
|
||||
|
||||
--IRS
|
||||
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
|
||||
end
|
||||
|
||||
--Spawn SFX
|
||||
if P.human and id<8 then
|
||||
SFX.fplay("spawn_"..id,setting.spawn)
|
||||
end
|
||||
end
|
||||
function player.hold(P,ifpre)
|
||||
if not P.holded and (ifpre or P.waiting==-1) and P.gameEnv.hold then
|
||||
local H,C=P.hd,P.cur
|
||||
@@ -2096,7 +2102,7 @@ do--player.drop(P)--Place piece
|
||||
finesseList[1][3],finesseList[1][4],finesseList[7][3],finesseList[7][4]=finesseList[1][1],finesseList[1][2],finesseList[7][1],finesseList[7][2]--"2-phase" SZI
|
||||
finesseList[2]=finesseList[1]--S=Z
|
||||
finesseList[4],finesseList[5]=finesseList[3],finesseList[3]--J=L=T
|
||||
function player.drop(P)--Place piece
|
||||
function player.drop(P)
|
||||
local _
|
||||
local CHN=VOC.getFreeChannel()
|
||||
P.dropTime[11]=ins(P.dropTime,1,game.frame)--Update speed dial
|
||||
@@ -2377,7 +2383,7 @@ do--player.drop(P)--Place piece
|
||||
--Normal clear, reduce B2B point
|
||||
if not C.special then
|
||||
P.b2b=max(P.b2b-250,0)
|
||||
P:showText(text.clear[cc],0,-30,27+cc*3,"appear",(8-cc)*.3)
|
||||
P:showText(text.clear[cc],0,-30,35,"appear",(8-cc)*.3)
|
||||
atk=cc-.5
|
||||
sendTime=20+atk*20
|
||||
cscore=cscore+clearSCR[cc]
|
||||
@@ -2390,7 +2396,7 @@ do--player.drop(P)--Place piece
|
||||
if cmb>=3 then
|
||||
atk=atk+1
|
||||
end
|
||||
P:showText(text.cmb[min(cmb,21)],0,25,15+min(cmb,25)*3,cmb<10 and"appear"or"flicker")
|
||||
P:showText(text.cmb[min(cmb,21)],0,25,15+min(cmb,15)*5,cmb<10 and"appear"or"flicker")
|
||||
cscore=cscore+min(50*cmb,500)*(2*cc-1)
|
||||
end
|
||||
|
||||
@@ -2526,7 +2532,7 @@ do--player.drop(P)--Place piece
|
||||
|
||||
cscore=int(cscore)
|
||||
if ENV.score then
|
||||
P:showText(cscore,(P.curX+P.sc[2]-5.5)*30,(10-P.curY-P.sc[1])*30+P.fieldBeneath+P.fieldUp,int(40-600/(cscore+20)),"score",2)
|
||||
P:showText(cscore,(P.curX+P.sc[2]-5.5)*30,(10-P.curY-P.sc[1])*30+P.fieldBeneath+P.fieldUp,int(8-120/(cscore+20))*5,"score",2)
|
||||
end
|
||||
STAT.score=STAT.score+cscore
|
||||
STAT.piece=STAT.piece+1
|
||||
@@ -2575,24 +2581,26 @@ local function gameOver()--Save record
|
||||
local P=players[1]
|
||||
R=R(P)--New rank
|
||||
if R then
|
||||
if R>0 then LOG.print(text.getRank..text.ranks[R],color.green)end
|
||||
local r=modeRanks[M.name]--Old rank
|
||||
local _
|
||||
local needSave
|
||||
if R>r then
|
||||
modeRanks[M.name]=R
|
||||
_=true
|
||||
needSave=true
|
||||
end
|
||||
if M.unlock then
|
||||
for i=1,#M.unlock do
|
||||
local m=M.unlock[i]
|
||||
local n=Modes[m].name
|
||||
if not modeRanks[n]then
|
||||
modeRanks[n]=Modes[m].score and 0 or 6
|
||||
_=true
|
||||
if R>0 then
|
||||
LOG.print(text.getRank..text.ranks[R],color.green)
|
||||
if M.unlock then
|
||||
for i=1,#M.unlock do
|
||||
local m=M.unlock[i]
|
||||
local n=Modes[m].name
|
||||
if not modeRanks[n]then
|
||||
modeRanks[n]=Modes[m].score and 0 or 6
|
||||
needSave=true
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
if _ then
|
||||
if needSave then
|
||||
FILE.saveUnlock()
|
||||
end
|
||||
local D=M.score(P)
|
||||
@@ -2659,7 +2667,7 @@ function player.win(P,result)
|
||||
gameOver()
|
||||
TASK.new(TICK.autoPause,{0})
|
||||
if marking then
|
||||
P:showTextF(text.marking,0,-226,22,"appear",.4,.0626)
|
||||
P:showTextF(text.marking,0,-226,25,"appear",.4,.0626)
|
||||
end
|
||||
end
|
||||
P:newTask(TICK.finish)
|
||||
@@ -2764,7 +2772,7 @@ function player.lose(P)
|
||||
P:newTask(#players>1 and TICK.lose or TICK.finish)
|
||||
TASK.new(TICK.autoPause,{0})
|
||||
if marking then
|
||||
P:showTextF(text.marking,0,-226,22,"appear",.4,.0626)
|
||||
P:showTextF(text.marking,0,-226,25,"appear",.4,.0626)
|
||||
end
|
||||
else
|
||||
P:newTask(TICK.lose)
|
||||
@@ -2786,7 +2794,7 @@ function PLY.check_attackReach(P)
|
||||
end
|
||||
--------------------------<\Events>--------------------------
|
||||
|
||||
--------------------------<Control>--------------------------
|
||||
--------------------------<Actions>--------------------------
|
||||
player.act={}
|
||||
function player.act.moveLeft(P,auto)
|
||||
if not auto then
|
||||
@@ -3045,7 +3053,7 @@ do
|
||||
A.dropLeft ,A.dropRight, A.zangiLeft,A.zangiRight
|
||||
}for i=1,20 do A[i]=T[i]end
|
||||
end
|
||||
--------------------------</Control>--------------------------
|
||||
--------------------------</Actions>--------------------------
|
||||
|
||||
--------------------------<Generator>--------------------------
|
||||
function PLY.newDemoPlayer(id,x,y,size)
|
||||
@@ -3128,6 +3136,7 @@ function PLY.newRemotePlayer(id,x,y,size,actions)
|
||||
end
|
||||
function PLY.newAIPlayer(id,x,y,size,AIdata)
|
||||
local P=newEmptyPlayer(id,x,y,size)
|
||||
local ENV=P.gameEnv
|
||||
|
||||
if P.small then
|
||||
ENV.text=false
|
||||
|
||||
340
parts/scenes.lua
340
parts/scenes.lua
@@ -103,24 +103,6 @@ do--calculator
|
||||
S.reg=false
|
||||
local v=tonumber(S.val)
|
||||
if v==600+26 then S.pass=true
|
||||
elseif v==022 then EGG("T022.Teatube")
|
||||
elseif v==024 then EGG("S024.Sniraite")
|
||||
elseif v==114 then EGG("T114.Flyz")
|
||||
elseif v==127 then EGG("T127.gggf")
|
||||
elseif v==196 then EGG("T196.蕴空之灵")
|
||||
elseif v==210 then EGG("T210.Naki")
|
||||
elseif v==238 then EGG("T238.模电")
|
||||
elseif v==274 then EGG("T274.ZZZ")
|
||||
elseif v==512 then EGG("T512.tatianyi")
|
||||
elseif v==616 then EGG("T616.Mifu")
|
||||
elseif v==655 then EGG("T655.ThTsOd")
|
||||
elseif v==665 then EGG("T665.Tinko")
|
||||
elseif v==722 then EGG("T0722")
|
||||
elseif v==872 then EGG("T872.DIAO")
|
||||
elseif v==942 then EGG("T942.思竣")
|
||||
elseif v==1905 then EGG("T1905.Rinnya")
|
||||
elseif v==3182 then EGG("T3182.蓝绿")
|
||||
elseif v==7023 then EGG("T7023.Miya")
|
||||
elseif v==190000+6022 then
|
||||
S.pass,marking=true
|
||||
LOG.print("\68\69\86\58\87\97\116\101\114\109\97\114\107\32\82\101\109\111\118\101\100","message")
|
||||
@@ -241,10 +223,10 @@ do--p15
|
||||
local S=sceneTemp
|
||||
if S.state<2 then
|
||||
if not key then
|
||||
x,y=int((x-320)/160)+1,int((y-40)/160)+1
|
||||
if S.pathVis then
|
||||
sysFX.newRipple(.16,x,y,10)
|
||||
end
|
||||
x,y=int((x-320)/160)+1,int((y-40)/160)+1
|
||||
end
|
||||
local b=S.board
|
||||
local moves=0
|
||||
@@ -556,7 +538,9 @@ do--schulte_G
|
||||
end
|
||||
function keyDown.schulte_G(key)
|
||||
local S=sceneTemp
|
||||
if key=="space"or key=="r"then
|
||||
if key=="z"or key=="x"then
|
||||
love.mousepressed(ms.getPosition())
|
||||
elseif key=="space"then
|
||||
if sceneTemp.state>0 then
|
||||
S.board={}
|
||||
S.time=0
|
||||
@@ -564,8 +548,6 @@ do--schulte_G
|
||||
S.state=0
|
||||
S.progress=0
|
||||
end
|
||||
elseif key=="z"or key=="x"then
|
||||
love.mousepressed(ms.getPosition())
|
||||
elseif key=="q"then
|
||||
if S.state==0 then
|
||||
S.blind=not S.blind
|
||||
@@ -594,7 +576,6 @@ do--schulte_G
|
||||
end
|
||||
end
|
||||
|
||||
local fontSize={nil,nil,120,100,80,60}
|
||||
function Pnt.schulte_G()
|
||||
local S=sceneTemp
|
||||
|
||||
@@ -624,7 +605,7 @@ do--schulte_G
|
||||
local width=640/rank
|
||||
local blind=S.state==0 or S.blind and S.state==1 and S.progress>0
|
||||
gc.setLineWidth(4)
|
||||
local f=fontSize[rank]
|
||||
local f=180-rank*20
|
||||
setFont(f)
|
||||
for i=1,rank do
|
||||
for j=1,rank do
|
||||
@@ -647,6 +628,178 @@ do--schulte_G
|
||||
end
|
||||
end
|
||||
end
|
||||
do--pong
|
||||
function sceneInit.pong()
|
||||
BG.set("none")
|
||||
BGM.play("way")
|
||||
sceneTemp={
|
||||
state=0,
|
||||
|
||||
x=640,y=360,
|
||||
vx=0,vy=0,
|
||||
ry=0,
|
||||
|
||||
p1={
|
||||
score=0,
|
||||
y=360,
|
||||
vy=0,
|
||||
y0=false,
|
||||
},
|
||||
p2={
|
||||
score=0,
|
||||
y=360,
|
||||
vy=0,
|
||||
y0=false,
|
||||
},
|
||||
}
|
||||
end
|
||||
|
||||
local function start()
|
||||
sceneTemp.state=1
|
||||
sceneTemp.vx=rnd()>.5 and 6 or -6
|
||||
sceneTemp.vy=rnd()*6-3
|
||||
end
|
||||
function keyDown.pong(key)
|
||||
local S=sceneTemp
|
||||
if key=="space"then
|
||||
if S.state==0 then
|
||||
start()
|
||||
end
|
||||
elseif key=="r"then
|
||||
S.state=0
|
||||
S.x,S.y=640,360
|
||||
S.vx,S.vy=0,0
|
||||
S.ry=0
|
||||
S.p1.score,S.p2.score=0,0
|
||||
elseif key=="w"or key=="s"then
|
||||
S.p1.y0=false
|
||||
elseif key=="up"or key=="down"then
|
||||
S.p2.y0=false
|
||||
elseif key=="escape"then
|
||||
SCN.back()
|
||||
end
|
||||
end
|
||||
function touchDown.pong(id,x,y)
|
||||
touchMove.pong(id,x,y)
|
||||
if sceneTemp.state==0 then
|
||||
start()
|
||||
end
|
||||
end
|
||||
function touchMove.pong(id,x,y,dx,dy)
|
||||
sceneTemp[x<640 and"p1"or"p2"].y0=y
|
||||
end
|
||||
|
||||
--DEBUGGING
|
||||
function mouseMove.pong(x,y)
|
||||
sceneTemp[x<640 and"p1"or"p2"].y0=y
|
||||
end
|
||||
|
||||
--Rect Area X:150~1130 Y:20~700
|
||||
function Tmr.pong()
|
||||
local S=sceneTemp
|
||||
|
||||
--Update pads
|
||||
local P=S.p1
|
||||
while P do
|
||||
if P.y0 then
|
||||
if P.y>P.y0 then
|
||||
P.y=max(P.y-8,P.y0,70)
|
||||
P.vy=-8
|
||||
elseif P.y<P.y0 then
|
||||
P.y=min(P.y+8,P.y0,650)
|
||||
P.vy=8
|
||||
else
|
||||
P.vy=P.vy*.5
|
||||
end
|
||||
else
|
||||
if kb.isDown(P==S.p1 and"w"or"up")then P.vy=max(P.vy-1,-8)end
|
||||
if kb.isDown(P==S.p1 and"s"or"down")then P.vy=min(P.vy+1,8)end
|
||||
P.y=P.y+P.vy
|
||||
P.vy=P.vy*.9
|
||||
if P.y>650 then
|
||||
P.vy=-P.vy*.5
|
||||
P.y=650
|
||||
elseif P.y<70 then
|
||||
P.vy=-P.vy*.5
|
||||
P.y=70
|
||||
end
|
||||
end
|
||||
P=P==S.p1 and S.p2
|
||||
end
|
||||
|
||||
--Update ball
|
||||
local x,y,vx,vy,ry=S.x,S.y,S.vx,S.vy,S.ry
|
||||
x,y=x+vx,y+vy
|
||||
if ry~=0 then
|
||||
if ry>0 then
|
||||
ry=max(ry-.1,0)
|
||||
vy=vy-.1
|
||||
else
|
||||
ry=min(ry+.1,0)
|
||||
vy=vy+.1
|
||||
end
|
||||
end
|
||||
if S.state==1 then--Playing
|
||||
if x<160 or x>1120 then
|
||||
local P=x<160 and S.p1 or S.p2
|
||||
local d=y-P.y
|
||||
if abs(d)<60 then
|
||||
vx=-vx-(vx>0 and .05 or -.5)
|
||||
vy=vy+d*.08+P.vy*.5
|
||||
ry=P.vy
|
||||
SFX.play("collect")
|
||||
else
|
||||
S.state=2
|
||||
end
|
||||
end
|
||||
if y<30 or y>690 then
|
||||
y=y<30 and 30 or 690
|
||||
vy,ry=-vy,-ry
|
||||
SFX.play("collect")
|
||||
end
|
||||
elseif S.state==2 then--Game over
|
||||
if x<-120 or x>1400 or y<-40 or y>760 then
|
||||
local P=x>1400 and S.p1 or S.p2
|
||||
P.score=P.score+1
|
||||
TEXT.show("+1",x>1400 and 470 or 810,226,50,"score")
|
||||
SFX.play("reach")
|
||||
|
||||
S.state=0
|
||||
x,y=640,360
|
||||
vx,vy=0,0
|
||||
end
|
||||
end
|
||||
S.x,S.y,S.vx,S.vy,S.ry=x,y,vx,vy,ry
|
||||
end
|
||||
|
||||
function Pnt.pong()
|
||||
local S=sceneTemp
|
||||
|
||||
--Draw score
|
||||
setFont(100)
|
||||
gc.setColor(.4,.4,.4)
|
||||
mStr(S.p1.score,470,20)
|
||||
mStr(S.p2.score,810,20)
|
||||
|
||||
--Draw boundary
|
||||
gc.setColor(1,1,1)
|
||||
gc.setLineWidth(6)
|
||||
gc.line(130,20,1160,20)
|
||||
gc.line(130,700,1160,700)
|
||||
|
||||
--Draw ball & speed line
|
||||
gc.setColor(1,1,1-abs(S.ry)*.16)
|
||||
gc.circle("fill",S.x,S.y,10)
|
||||
gc.setColor(1,1,1,.1)
|
||||
gc.line(S.x+S.vx*22,S.y+S.vy*22,S.x+S.vx*30,S.y+S.vy*30)
|
||||
|
||||
--Draw pads
|
||||
gc.setColor(1,.8,.8)
|
||||
gc.rectangle("fill",130,S.p1.y-50,20,100)
|
||||
gc.setColor(.8,.8,1)
|
||||
gc.rectangle("fill",1130,S.p2.y-50,20,100)
|
||||
end
|
||||
end
|
||||
do--load
|
||||
function sceneInit.load()
|
||||
sceneTemp={
|
||||
@@ -659,6 +812,7 @@ do--load
|
||||
#BGM.list,
|
||||
#SFX.list,
|
||||
IMG.getCount(),
|
||||
17,--Fontsize 20~100
|
||||
#Modes,
|
||||
1,
|
||||
},
|
||||
@@ -697,6 +851,8 @@ do--load
|
||||
elseif S.phase==4 then
|
||||
IMG.loadOne(S.cur)
|
||||
elseif S.phase==5 then
|
||||
getFont(15+5*S.cur)
|
||||
elseif S.phase==6 then
|
||||
local m=Modes[S.cur]--Mode template
|
||||
local M=require("modes/"..m.name)--Mode file
|
||||
Modes[m.name],Modes[S.cur]=M
|
||||
@@ -713,7 +869,7 @@ do--load
|
||||
end
|
||||
-- M.icon=gc.newImage("image/modeIcon/"..m.icon..".png")
|
||||
-- M.icon=gc.newImage("image/modeIcon/custom.png")
|
||||
elseif S.phase==6 then
|
||||
elseif S.phase==7 then
|
||||
--------------------------Loading other little things here
|
||||
SKIN.load()
|
||||
stat.run=stat.run+1
|
||||
@@ -779,13 +935,13 @@ do--intro
|
||||
for i=1,8 do
|
||||
sceneTemp.r[i]=rnd(5)
|
||||
end
|
||||
local notice=HTTPrequest("http://47.103.200.40/api/notice.php")
|
||||
local notice=HTTPrequest("http://47.103.200.40/api/notice")
|
||||
if notice then
|
||||
LOG.print(notice,"message")
|
||||
else
|
||||
LOG.print(text.getNoticeFail,"warn")
|
||||
end
|
||||
local newVersion=HTTPrequest("http://47.103.200.40/api/getNewVersion.php")
|
||||
local newVersion=HTTPrequest("http://47.103.200.40/api/version_check")
|
||||
if not newVersion then
|
||||
LOG.print(text.getVersionFail,"warn")
|
||||
elseif newVersion~=gameVersion then
|
||||
@@ -799,9 +955,12 @@ do--intro
|
||||
if k==2 then
|
||||
VOC.play("bye")
|
||||
SCN.back()
|
||||
elseif NOGAME=="delSetting"then
|
||||
LOG.print("检测到过老版本非法设置数据,设置已经全部重置,请重启游戏完成",600,color.yellow)
|
||||
LOG.print("Old version detected, setting file deleted, please restart the game",600,color.yellow)
|
||||
elseif NOGAME=="delCC"then
|
||||
LOG.print("Please quit the game, then delete CCloader.dll(21KB) in saving folder!",600,color.yellow)
|
||||
LOG.print("请关闭游戏,然后删除存档文件夹内的 CCloader.dll(21KB) !",600,color.yellow)
|
||||
LOG.print("Please quit the game, then delete CCloader.dll(21KB) in saving folder!",600,color.yellow)
|
||||
TASK.new(function(S)
|
||||
S[1]=S[1]-1
|
||||
if S[1]==0 then
|
||||
@@ -990,7 +1149,7 @@ do--mode
|
||||
end
|
||||
mapCam.keyCtrl=false
|
||||
end
|
||||
function mouseClick.mode(x,y,k)
|
||||
function mouseClick.mode(x,y)
|
||||
local cam=mapCam
|
||||
local _=cam.sel
|
||||
if not _ or x<920 then
|
||||
@@ -1034,8 +1193,8 @@ do--mode
|
||||
end
|
||||
mapCam.keyCtrl=false
|
||||
end
|
||||
function touchClick.mode(x,y,id)
|
||||
mouseClick.mode(x,y,1)
|
||||
function touchClick.mode(x,y)
|
||||
mouseClick.mode(x,y)
|
||||
end
|
||||
function keyDown.mode(key)
|
||||
if key=="return"then
|
||||
@@ -1246,7 +1405,7 @@ do--mode
|
||||
elseif s<25 then dy=2
|
||||
else dy=4
|
||||
end
|
||||
setFont(int(26-s*.4))
|
||||
setFont(int((26-s*.4)/3)*3)
|
||||
gc.print(t,955,275+dy+25*i)
|
||||
setFont(10)
|
||||
_=L[i].date
|
||||
@@ -2985,38 +3144,38 @@ do--dict
|
||||
input="",
|
||||
dict=require("document/dict"),
|
||||
result={},
|
||||
select=nil,
|
||||
title=nil,
|
||||
select=1,
|
||||
scroll=0,
|
||||
|
||||
lastSearch=nil,
|
||||
hideKB=1 or system~="Windows",
|
||||
hideKB=system~="Windows",
|
||||
}
|
||||
BG.set("rainbow")
|
||||
end
|
||||
|
||||
local function clearResult()
|
||||
local S=sceneTemp
|
||||
local result=S.result
|
||||
for i=1,#result do rem(result)end
|
||||
S.select,S.scroll,S.lastSearch=1,0
|
||||
end
|
||||
local function search()
|
||||
clearResult()
|
||||
local S=sceneTemp
|
||||
local dict=S.dict
|
||||
local result=S.result
|
||||
for i=1,#result do rem(result)end
|
||||
local first
|
||||
for i=1,#dict do
|
||||
local pos=find(dict[i][1],S.input)
|
||||
local pos=find(dict[i][1],S.input,nil,true)
|
||||
if pos==1 and not first then
|
||||
ins(result,1,dict[i])
|
||||
first=true
|
||||
elseif pos then
|
||||
ins(result,dict[i])
|
||||
end
|
||||
if first and #result==15 then
|
||||
break
|
||||
end
|
||||
end
|
||||
if result[1]then
|
||||
S.select=1
|
||||
S.title=result[1][3]
|
||||
else
|
||||
S.select=nil
|
||||
S.title=nil
|
||||
if not result[1]then
|
||||
S.input=""
|
||||
end
|
||||
end
|
||||
|
||||
@@ -3029,38 +3188,39 @@ do--dict
|
||||
elseif key=="up"then
|
||||
if S.select and S.select>1 then
|
||||
S.select=S.select-1
|
||||
if S.select<S.scroll+1 then
|
||||
S.scroll=S.scroll-1
|
||||
end
|
||||
end
|
||||
elseif key=="down"then
|
||||
if S.select and S.select<#S.result and S.select<15 then
|
||||
if S.select and S.select<#(S.result[1]and S.result or S.dict)then
|
||||
S.select=S.select+1
|
||||
if S.select>S.scroll+15 then
|
||||
S.scroll=S.select-15
|
||||
end
|
||||
end
|
||||
elseif key=="kb"then
|
||||
S.hideKB=not S.hideKB
|
||||
elseif key=="delete"then
|
||||
if #S.input>0 then
|
||||
clearResult()
|
||||
S.input=""
|
||||
S.select=nil
|
||||
S.lastSearch=nil
|
||||
SFX.play("hold")
|
||||
end
|
||||
elseif key=="backspace"then
|
||||
S.input=sub(S.input,1,-2)
|
||||
if #S.input==0 then
|
||||
S.select=nil
|
||||
S.lastSearch=nil
|
||||
clearResult()
|
||||
end
|
||||
elseif key=="escape"then
|
||||
if #S.input>0 then
|
||||
clearResult()
|
||||
S.input=""
|
||||
S.select=nil
|
||||
S.lastSearch=nil
|
||||
else
|
||||
SCN.back()
|
||||
end
|
||||
elseif key=="return"then
|
||||
if #S.input<2 then
|
||||
S.input=""
|
||||
elseif S.input~=S.lastSearch then
|
||||
if #S.input>0 and S.input~=S.lastSearch then
|
||||
search()
|
||||
if S.result[1]then
|
||||
SFX.play("reach")
|
||||
@@ -3084,44 +3244,44 @@ do--dict
|
||||
gc.setColor(1,1,1)
|
||||
gc.draw(drawableText.dict,20,5)
|
||||
|
||||
gc.setLineWidth(4)
|
||||
gc.rectangle("line",20,109,726,60)
|
||||
setFont(40)
|
||||
gc.print(S.input,35,110)
|
||||
|
||||
gc.setLineWidth(4)
|
||||
gc.rectangle("line",20,109,726,60)
|
||||
|
||||
if S.select then
|
||||
gc.rectangle("line",300,180,958,526)
|
||||
gc.rectangle("line",20,180,280,526)
|
||||
|
||||
gc.setColor(1,1,1)
|
||||
local text=S.result[S.select][4]
|
||||
if #text>500 then
|
||||
setFont(20)
|
||||
elseif #text>300 then
|
||||
setFont(24)
|
||||
else
|
||||
setFont(28)
|
||||
end
|
||||
gc.printf(text,306,180,950)
|
||||
|
||||
setFont(30)
|
||||
gc.setColor(1,1,1,.4+.2*sin(Timer()*4))
|
||||
gc.rectangle("fill",20,143+35*S.select,280,35)
|
||||
|
||||
setFont(30)
|
||||
for i=1,min(#S.result,15)do
|
||||
local S=S.result[i]
|
||||
local y=142+35*i
|
||||
gc.setColor(0,0,0)
|
||||
gc.print(S[3],29,y-1)
|
||||
gc.print(S[3],29,y+1)
|
||||
gc.print(S[3],31,y-1)
|
||||
gc.print(S[3],31,y+1)
|
||||
gc.setColor(typeColor[S[2]])
|
||||
gc.print(S[3],30,y)
|
||||
end
|
||||
local list=S.result[1]and S.result or S.dict
|
||||
gc.setColor(1,1,1)
|
||||
local text=list[S.select][4]
|
||||
if #text>500 then
|
||||
setFont(20)
|
||||
elseif #text>300 then
|
||||
setFont(24)
|
||||
else
|
||||
setFont(28)
|
||||
end
|
||||
gc.printf(text,306,180,950)
|
||||
|
||||
setFont(30)
|
||||
gc.setColor(1,1,1,.4+.2*sin(Timer()*4))
|
||||
gc.rectangle("fill",20,143+35*(S.select-S.scroll),280,35)
|
||||
|
||||
setFont(30)
|
||||
for i=1,min(#list,15)do
|
||||
local y=142+35*i
|
||||
i=i+S.scroll
|
||||
local S=list[i]
|
||||
gc.setColor(0,0,0)
|
||||
gc.print(S[3],29,y-1)
|
||||
gc.print(S[3],29,y+1)
|
||||
gc.print(S[3],31,y-1)
|
||||
gc.print(S[3],31,y+1)
|
||||
gc.setColor(typeColor[S[2]])
|
||||
gc.print(S[3],30,y)
|
||||
end
|
||||
|
||||
gc.setColor(1,1,1)
|
||||
gc.rectangle("line",300,180,958,526)
|
||||
gc.rectangle("line",20,180,280,526)
|
||||
end
|
||||
end
|
||||
do--staff
|
||||
|
||||
@@ -20,7 +20,7 @@ local S=[=[
|
||||
aaa222 [**城] cnDD 红桃老给 昭庭玲秋
|
||||
旋树墩 火花工作室 Cosine 沁音的芝麻王
|
||||
SuperJH 天上_飞 uiro 宇酱 [W*N]
|
||||
|
||||
[Z*.]
|
||||
Thanks!!!
|
||||
|
||||
Future outlook:
|
||||
@@ -50,36 +50,44 @@ Future outlook:
|
||||
no fail(∞ lives)
|
||||
mini games:
|
||||
2048 (with next/deadly mode)
|
||||
mine sweeper
|
||||
tank battle
|
||||
find difference
|
||||
sodoku
|
||||
link-link
|
||||
pong
|
||||
自定义游戏允许按各种目的复制数据
|
||||
地图增加模式图标
|
||||
物理hold
|
||||
多hold
|
||||
多方块
|
||||
扫雷
|
||||
坦克大战
|
||||
找不同
|
||||
数独
|
||||
连连看
|
||||
热更新; 联网游戏
|
||||
录像保存/导出; 按块回放录像
|
||||
⑨S机器人调试模式
|
||||
健康游戏时间提醒;游戏内文档
|
||||
物理hold; 多hold; 多方块
|
||||
自定义游戏支持选择旋转系统(C2,DTET,ASC...)
|
||||
录像保存/导出
|
||||
热更新
|
||||
新BGM:water
|
||||
画图智能画笔
|
||||
健康游戏时间提醒
|
||||
多语音包系统
|
||||
按块回放录像
|
||||
自定义游戏允许按各种目的复制数据; 画图智能画笔
|
||||
地图增加模式图标; 多语音包系统
|
||||
split判定及效果
|
||||
工程编译到字节码
|
||||
游戏内文档
|
||||
方块散落动画
|
||||
"一键操作"
|
||||
手机滑动操作
|
||||
新控件(例如虚拟摇杆)
|
||||
联网游戏
|
||||
支持超60帧
|
||||
task-Z(新AI)
|
||||
更多画面效果 & 一些3D小玩意
|
||||
"一键操作"; 手机滑动操作; 特殊控件(例如虚拟摇杆)
|
||||
方块散落动画; 更多画面效果; 一些3D小玩意; 支持超60帧
|
||||
task-Z(新AI); 工程编译到字节码
|
||||
|
||||
0.11.2: 弹球小游戏 Pong
|
||||
新内容:
|
||||
Pong
|
||||
公开小游戏入口
|
||||
新BGM:waterfall(用于特种40L)
|
||||
新模式:挖掘10/40/100/400/1000
|
||||
改动:
|
||||
修改查询机制,增加词条,优化词典体验
|
||||
优化字号使用,字体预加载
|
||||
减小字体文件体积(9.1M→7.8M)
|
||||
增加Wspin
|
||||
修复:
|
||||
水平移动优先于20G
|
||||
混战第一把不显示功能键的虚拟按键
|
||||
Ospin小错误
|
||||
无评价也能解锁下一关
|
||||
词典内输入特殊符号报错/查询错误
|
||||
马拉松-普通目标行数显示错误
|
||||
9S机器人极简错误
|
||||
报错界面执行代码无效
|
||||
|
||||
0.11.1: 小Z更新 Dictionary Update
|
||||
新内容:
|
||||
|
||||
Reference in New Issue
Block a user