0.11.2:Pong(操作错误导致只能用覆盖文件代替合并分支)(非0.11.2最终版)

This commit is contained in:
MrZ626
2020-10-06 18:09:45 +08:00
parent 71fec8b497
commit 09d78e52f6
39 changed files with 1250 additions and 822 deletions

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@@ -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
新内容: