Compare commits

...

8 Commits

Author SHA1 Message Date
MrZ626
684cb90a7d 修改堆叠模式玩法(自动清除之前记录)
修改更新历史和build号
2021-11-02 03:38:43 +08:00
MrZ626
172101ed55 整理玩家类代码,再分离出一个方法 2021-11-02 02:27:08 +08:00
MrZ626
98b5914726 移除机翻语言的tips 2021-11-02 02:15:34 +08:00
MrZ626
d1518e7ba4 词典新增研究群下属mew词条 2021-11-02 00:31:43 +08:00
MrZ626
72d4faa52a 微调进控制台音效力度 2021-11-01 21:56:57 +08:00
MrZ626
862dcbf806 准备&开始音效改为函数整理到gameFuncs文件里
launchpad可以执行任意函数,添加准备-开始音效
2021-11-01 20:30:04 +08:00
MrZ626
3db28f5136 再修正ci替换版本号的问题 2021-11-01 17:33:42 +08:00
MrZ626
f9e37f3c6a 修正ci替换版本号的小问题 2021-11-01 17:24:47 +08:00
16 changed files with 216 additions and 325 deletions

View File

@@ -27,9 +27,10 @@ runs:
import re import re
with open('version.lua', 'r+', encoding='utf-8') as file: with open('version.lua', 'r+', encoding='utf-8') as file:
commitHash = '${{ inputs.commit }}' commitHash = '${{ inputs.commit }}'
commitHash = commitHash[0:4] if commitHash != '' else '????' if commitHash != '':
commitHash = '@' + commitHash[0:4]
data = file.read() data = file.read()
data = re.sub('(\d)"', r'\1@' + commitHash + '"', data) data = re.sub('(\d)"', r'\1' + commitHash + '"', data, 1)
file.seek(0) file.seek(0)
file.truncate() file.truncate()
file.flush() file.flush()

View File

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

View File

@@ -0,0 +1,21 @@
return{
fillClear=false,
dropPiece=function(P)
if #P.field>P.gameEnv.fieldH then
local cc=P:checkClear(P.field,P.garbageBeneath+1,#P.field-P.garbageBeneath)
if cc>0 then
SFX.play('clear_'..math.min(cc,6))
P:showText(text.clear[cc]or cc.."-crash",0,0,60,'beat',.4)
P:removeClearedLines()
P.falling=P.gameEnv.fall
P.stat.row=P.stat.row+cc
end
if P.gameEnv.fieldH-cc-P.garbageBeneath>0 then
P:garbageRise(21,P.gameEnv.fieldH-cc-P.garbageBeneath,2e10-1)
if P.garbageBeneath>=P.gameEnv.fieldH then
P:lose()
end
end
end
end,
}

View File

@@ -0,0 +1,22 @@
return{
fillClear=false,
dropPiece=function(P)
if #P.field>P.gameEnv.fieldH then
local cc=P:checkClear(P.field,P.garbageBeneath+1,#P.field-P.garbageBeneath)
if cc>0 then
SFX.play('clear_'..math.min(cc,6))
P:showText(text.clear[cc]or cc.."-crash",0,0,60,'beat',.4)
P:removeClearedLines()
P.falling=P.gameEnv.fall
P.stat.row=P.stat.row+cc
end
local h=math.ceil((P.gameEnv.fieldH-cc-P.garbageBeneath)/2)
if h>0 then
P:garbageRise(21,h,2e10-1)
if P.garbageBeneath>=P.gameEnv.fieldH then
P:lose()
end
end
end
end,
}

View File

@@ -173,7 +173,25 @@ function royaleLevelup()
end end
end end
end end
function playReadySFX(i)
if i==3 then
Snd('bass','A3')
Snd('lead','A4')
elseif i==2 then
Snd('bass','F3')
Snd('lead','A4')
Snd('lead','D5')
elseif i==1 then
Snd('bass','G3')
Snd('lead','B4')
Snd('lead','E5')
elseif i==0 then
Snd('bass','A3')
Snd('lead','A4')
Snd('lead','E5')
Snd('lead','A5')
end
end
--Game --Game
@@ -622,8 +640,7 @@ do--function resetGameData(args)
if GAME.setting.allowMod then if GAME.setting.allowMod then
TASK.new(task_showMods) TASK.new(task_showMods)
end end
Snd('bass','A3') playReadySFX(3)
Snd('lead','A4')
collectgarbage() collectgarbage()
end end
end end

View File

@@ -943,24 +943,30 @@ return{
}, },
--Other --Other
{"Github Repository",
"githubrepository sourcecode",
"other",
"Techmino's Github repository. Stars are appreciated.",
"https://github.com/26F-Studio/Techmino",
},
{"Communities", {"Communities",
"community communities", "community communities",
"other", "other",
"Join Tetris communities and talk with other players!\n\nChina: [QQ] Tetris Research: 112897780\nGlobal: [Discord] Hard Drop: discord.gg/harddrop (click \"Open URL\").", "Join Tetris communities and talk with other players!\n\nChina: [QQ] Tetris Research: 112897780\nGlobal: [Discord] Hard Drop: discord.gg/harddrop (click \"Open URL\").",
"https://discord.gg/harddrop" "https://discord.gg/harddrop"
}, },
{"Mew",
"mew tieba forum",
"help",
"",--TODO
"https://mew.fun/n/tetris",
},
{"Tetris OL Servers", {"Tetris OL Servers",
"tetrisonline servers", "tetrisonline servers",
"other", "other",
"Google \"Tetris Online Poland\" for the Poland server.\nClick \"Open URL\" for information about the Tetris Online Study server.", "Google \"Tetris Online Poland\" for the Poland server.\nClick \"Open URL\" for information about the Tetris Online Study server.",
"http://teatube.ltd/tos", "http://teatube.ltd/tos",
}, },
{"Github Repository",
"githubrepository sourcecode",
"other",
"Techmino's Github repository. Stars are appreciated.",
"https://github.com/26F-Studio/Techmino",
},
--Savedata managing --Savedata managing
{"Console", {"Console",

View File

@@ -974,23 +974,29 @@ return{
}, },
--其他 --其他
{"GitHub仓库",
"源代码 github git sourcecode yuandaima",
"other",
"Techmino的GitHub仓库地址欢迎Star",
"https://github.com/26F-Studio/Techmino",
},
{"研究群", {"研究群",
"研究群 yanjiu study", "研究群 yanjiu study",
"other", "other",
"俄罗斯方块·[研究]群QQ号112897780“中国俄罗斯方块总群”", "俄罗斯方块·[研究]群QQ号112897780“中国俄罗斯方块总群”",
}, },
{"Mew据点",
"mew tieba forum",
"help",
"研究群下属的mew据点类似贴吧或者discord的服务器2021年下半年建立是discord和贴吧的结合体可以在同一个大社区的各个频道实时聊天也可以发帖以主题交流同时还有一个叫图书馆的功能方便各种方块资料整理还在建设中目前没多少内容2021.11,2",
"https://mew.fun/n/tetris",
},
{"茶服", {"茶服",
"茶服 chafu study", "茶服 chafu study",
"other", "other",
"TO-S的添加方法、说明等关于茶服的一切", "TO-S的添加方法、说明等关于茶服的一切",
"http://teatube.ltd/tos", "http://teatube.ltd/tos",
}, },
{"GitHub仓库",
"源代码 github git sourcecode yuandaima",
"other",
"Techmino的GitHub仓库地址欢迎Star",
"https://github.com/26F-Studio/Techmino",
},
--存档管理 --存档管理
{"控制台", {"控制台",

View File

@@ -760,163 +760,4 @@ return{
['custom_clear']= {"习俗", "正常"} , ['custom_clear']= {"习俗", "正常"} ,
['custom_puzzle']= {"习俗", "令人费解的"}, ['custom_puzzle']= {"习俗", "令人费解的"},
}, },
getTip={refuseCopy=true,
"免费玩积木游戏与战斗皇家模式!",
"你注意到什么了吗?\"旋转的\"去一个街区有什么用?",
":pog:",
"(RUR'U')R'FR2U'R'U'(RUR'F')",
"\"技术米诺.app\"不能打开,因为开发人员无法证实。",
"\\jezevec/\\jezevec/\\jezevec/",
"\\osk/\\osk/\\osk/",
"↑↑↓↓←→←→文学士",
"$包括<工作室.哈>",
"0下一个0等待.",
"1下一个0等待",
"1下一个1等待",
"1下一个6等待",
"20克实际上是一个全新的游戏规则",
"40直线冲刺世界纪录:14.915秒重置_",
"6下一个1等待",
"6下一个6等一下",
"成就系统即将推出!",
"所有自旋!",
"上午 G F G",
"背靠背靠背???",
"背靠背靠背靠背不存在",
"背靠背靠背靠背存在吗?",
"背靠背技术崩溃10连击个人电脑",
"今天一定要再次尽你最大的努力!",
"桥很快就清了!",
"你能熟练掌握这个现代而又熟悉的堆垛机吗?",
"我的杰作就在这颗心里。",
"在不谐和上可以找到英语的变更日志",
"颜色很快就会清晰!",
"降低直连式存储和抗共振环速度更快,但更难控制",
"我刚才看到的是背靠背靠背吗?",
"不要让一个小故障毁掉你的一天!",
"不要直接看虫子!",
"享受技术米诺旋转系统!",
"太好了,但下次我们要做得更好",
"找出设置中的内容!",
"有虫子吗? 在我们的GitHub页面上打开一个问题!",
"git提交",
"git推-f",
"有什么建议吗?在我们的不谐和中发布它们!",
"建议佩戴耳机以获得更好的体验",
"你好,世界!",
"I3和L3是仅有的两种独特的三聚体",
"如果a==真",
"提高帧速率以获得更好的体验",
"初始[插入操作]系统可以节省您的时间",
"无需左/右按钮即可完成40升",
"没有旋转按钮也可以完成40升",
"它真的在加载!不仅仅是一个剪贴画!",
"sudo rm -rf /*",
"加入我们的纷争吧!",
"l-=-1",
"让贝斯来踢!",
"LrL RlR LLr RRl RRR LLL FFF RfR RRf rFF",
"低帧率减少你的游戏体验",
"路亚一号",
"快来了!",
"大多数按钮图标是通过在Unicode私人使用地区中使用自绘制的符号来实现的",
"这个游戏的音乐是使用Beepbox制作的",
"音乐太让人分心了?你可以把它关掉",
"如果您启用了简单化样式,则此菜单中没有复活节彩蛋!",
"旋转三倍!",
"哦哦哦哦哦哦哦哦!",
"已计划在线模式-请耐心等待",
"单枪匹马!",
"玩得好需要一些时间!",
"被爱冲昏头脑",
"由联合国...LÖVE为动力",
"pps-0.01",
"服务器随机停机",
"一些达到S级的要求被故意设定为即使是最好的球员也很难达到",
"很快,你就可以和全世界的朋友和敌人比赛了",
"马上就来!",
"技术米诺=技术+特特罗米诺",
"技术米诺有一个Nspire CX版本",
"技术米诺太有趣了!",
"\"技术米诺.app\"会损坏你的电脑。你应该把它移到垃圾桶里。",
"\"TechminOS\"",
"四联词典现在有英文版本",
"出现在员工页面后台的名字是我们赞助商的名单",
"在技术米诺,堆垛机的未来是你的!",
"在游戏中有许多隐藏的模式, 不能使用地图进入",
"总共有18种不同的五分音符",
"总共有7种不同的河豚",
"尝试使用多个等待队列!",
"尝试使用两个旋转按钮。使用这三种方法会更好",
"警告:程序员艺术",
"20件怎么样",
"100条生产线23件怎么样",
"26个热关断怎么样",
"这个便宜的界面和音乐是什么",
"当(假)",
"你是大师!",
"欢迎您帮助我们制作血糖监测和特效!",
"你可以把键盘连接到你的手机或平板电脑上(虽然在iOS上没有这个功能)",
"可以在设置中自定义键映射!",
"您可以将键盘连接到手机或平板电脑!",
"您可以使用键盘浏览菜单,但仅限于此屏幕",
"您可以从统计数据页面打开保存目录",
"在这个游戏中你可以用29个米诺中的28个进行旋转;例外情况是O1",
"您可以为每个四格拼板设置繁殖方向",
"ZS JL T O I",
{C.C,"也试试15拼图"},
{C.C,"还试试我的世界!"},
{C.C,"也试试噗噗噗!"},
{C.C,"也试试扫雷艇!"},
{C.C,"也试试奥兹米奇!"},
{C.C,"也试试俄亥俄州立大学!"},
{C.C,"也试试菲格罗斯!"},
{C.C,"也试试魔方!"},
{C.C,"也试试特拉里亚!"},
{C.C,"也试试土后项目!"},
{C.C,"也试试VVVVVV"},
{C.G,"绿色"},
{C.G,"Mac快捷键:Cmd-A=选中所有项目"},
{C.G,"Mac快捷键:Cmd-F=找到物品"},
{C.G,"Mac快捷键:Cmd-Option-Delete=立即删除文件"},
{C.G,"Mac快捷键:Cmd-Q=退出应用程序"},
{C.G,"Mac快捷键:Control-↑=显示任务控制"},
{C.G,"Mac快捷键:Cmd-Tab =你打开应用程序之间切换"},
{C.G,"Mac快捷键:Cmd-W=关闭前窗口"},
{C.G,"Mac快捷键:Cmd-Z=取消上一条命令"},
{C.G,"Mac快捷键:Cmd-,=打开前面应用程序的首选项"},
{C.G,"Windows快捷键:Alt+F4=关闭活动窗口"},
{C.G,"Windows快捷键:Alt+Tab=在窗口之间切换"},
{C.G,"Windows快捷键:Backspace=转到前一个文件夹"},
{C.G,"Windows快捷键:Ctrl+鼠标滚轮=缩放"},
{C.G,"Windows快捷键:Ctrl+A=选择所有项目"},
{C.G,"Windows快捷键:Ctrl+F=查找项目"},
{C.G,"Windows快捷键:Ctrl+Tab=在选项卡之间切换"},
{C.G,"Windows快捷键:Ctrl+W=关闭活动选项卡"},
{C.G,"Windows快捷键:shift+del=永久删除文件"},
{C.J,"玉石"},
{C.L,"酸橙"},
{C.lP,"秘密号码: 626"},
{C.H,"后悔!!!"},
{C.lR,"Z ",C.lG,"S ",C.lS,"J ",C.lO,"L ",C.lP,"T ",C.lY,"O ",C.lC,"I"},
{C.lY,"凉爽!!!"},
{C.M,"品红色"},
{C.N,"Lua",C.Z,"第一"},
{C.N,"海军"},
{C.O,"橙子"},
{C.P,"紫色"},
{C.P,"旋转!"},
{C.R,"\"滥用数字千年版权法\""},
{C.R,"\"知识产权法\""},
{C.R,"DD",C.Z,"大炮=",C.P,"TS",C.R,"D",C.Z,"+",C.P,"TS",C.R,"D",C.Z,"大炮"},
{C.R,"DT",C.Z,"大炮=",C.P,"TS",C.R,"D",C.Z,"+",C.P,"TS",C.R,"T",C.Z,"大炮"},
{C.R,"月球接收实验室",C.G,"RlR",C.B,"最后贷款人",C.O,"区域铁路线",C.P,"存款准备金率",C.P,"微光",C.C,"熔丝制造",C.Y,"自由罗斯科电台",C.Y,"雨林基金会基金",C.Y,"雨林基金会基金"},
{C.R,"红色"},
{C.S,"海洋"},
{C.V,"紫罗兰"},
{C.W,"葡萄酒"},
{C.Y,"旋转三倍!"},
{C.Y,"黄色"},
{C.Z,"什么?",C.lC,"Xspin"},
}
} }

View File

@@ -1,36 +1,25 @@
local function getHoleCount(P)
local hole=0
for x=1,10 do
for y=1,100 do
if not P:solid(x,y)then
hole=hole+1
end
end
end
return hole
end
return{ return{
color=COLOR.cyan, color=COLOR.cyan,
env={ env={
drop=60,lock=60, drop=60,lock=60,
fieldH=100, wait=0,fall=50,
highCam=true, garbageSpeed=30,
fillClear=false, highCam=false,
seqData={1,2,3,4,5,6,7}, seqData={1,2,3,4,5,6,7},
mesDisp=function(P)PLY.draw.drawTargetLine(P,100)end, eventSet='stack_100',
bg='blockrain',bgm='there', bg='blockrain',bgm='there',
}, },
score=function(P)return{getHoleCount(P),P.stat.time}end, score=function(P)return{P.stat.row,P.stat.time}end,
scoreDisp=function(D)return D[1].." Holes".." "..STRING.time(D[2])end, scoreDisp=function(D)return D[1].." Lines".." "..STRING.time(D[2])end,
comp=function(a,b)return a[1]<b[1]or a[1]==b[1]and a[2]<b[2]end, comp=function(a,b)return a[1]>b[1]or a[1]==b[1]and a[2]<b[2]end,
getRank=function(P) getRank=function(P)
local H=getHoleCount(P) local L=P.stat.row
return return
H==0 and 5 or L>=200 and 5 or
H<=1 and 4 or L>=180 and 4 or
H<=2 and 3 or L>=160 and 3 or
H<=5 and 2 or L>=130 and 2 or
H<=10 and 1 or L>=100 and 1 or
H<=26 and 0 L>=70 and 0
end, end,
} }

View File

@@ -1,36 +1,26 @@
local function getHoleCount(P)
local hole=0
for x=1,10 do
for y=1,98 do
if not P:solid(x,y)then
hole=hole+1
end
end
end
return hole
end
return{ return{
color=COLOR.magenta, color=COLOR.magenta,
env={ env={
drop=60,lock=60, drop=60,lock=60,
fieldH=100, wait=0,fall=50,
highCam=true, fieldH=21,
fillClear=false, highCam=false,
garbageSpeed=30,
seqData={1,2,3,4,5,6,7,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25}, seqData={1,2,3,4,5,6,7,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25},
mesDisp=function(P)PLY.draw.drawTargetLine(P,98)end, eventSet='stack_50',
bg='blockrain',bgm='there', bg='blockrain',bgm='there',
}, },
score=function(P)return{getHoleCount(P),P.stat.time}end, score=function(P)return{P.stat.row,P.stat.time}end,
scoreDisp=function(D)return D[1].." Holes".." "..STRING.time(D[2])end, scoreDisp=function(D)return D[1].." Lines".." "..STRING.time(D[2])end,
comp=function(a,b)return a[1]<b[1]or a[1]==b[1]and a[2]<b[2]end, comp=function(a,b)return a[1]>b[1]or a[1]==b[1]and a[2]<b[2]end,
getRank=function(P) getRank=function(P)
local H=getHoleCount(P) local L=P.stat.row
return return
H==0 and 5 or L>=80 and 5 or
H<=2 and 4 or L>=70 and 4 or
H<=4 and 3 or L>=60 and 3 or
H<=10 and 2 or L>=50 and 2 or
H<=26 and 1 or L>=40 and 1 or
H<=62 and 0 L>=20 and 0
end, end,
} }

View File

@@ -1,36 +1,26 @@
local function getHoleCount(P)
local hole=0
for x=1,10 do
for y=1,97 do
if not P:solid(x,y)then
hole=hole+1
end
end
end
return hole
end
return{ return{
color=COLOR.yellow, color=COLOR.yellow,
env={ env={
drop=60,lock=60, drop=60,lock=60,
fieldH=100, wait=0,fall=50,
highCam=true, fieldH=21,
fillClear=false, highCam=false,
garbageSpeed=30,
seqData={8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25}, seqData={8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25},
mesDisp=function(P)PLY.draw.drawTargetLine(P,97)end, eventSet='stack_50',
bg='blockrain',bgm='there', bg='blockrain',bgm='there',
}, },
score=function(P)return{getHoleCount(P),P.stat.time}end, score=function(P)return{P.stat.row,P.stat.time}end,
scoreDisp=function(D)return D[1].." Holes".." "..STRING.time(D[2])end, scoreDisp=function(D)return D[1].." Lines".." "..STRING.time(D[2])end,
comp=function(a,b)return a[1]<b[1]or a[1]==b[1]and a[2]<b[2]end, comp=function(a,b)return a[1]>b[1]or a[1]==b[1]and a[2]<b[2]end,
getRank=function(P) getRank=function(P)
local H=getHoleCount(P) local L=P.stat.row
return return
H<=2 and 5 or L>=60 and 5 or
H<=5 and 4 or L>=50 and 4 or
H<=10 and 3 or L>=45 and 3 or
H<=26 and 2 or L>=30 and 2 or
H<=62 and 1 or L>=20 and 1 or
H<=126 and 0 L>=10 and 0
end, end,
} }

View File

@@ -622,37 +622,36 @@ function Player:lock()
end end
function Player:checkClear(field,start,height,CB,CX) function Player:checkClear(field,start,height,CB,CX)
local cc=0 local cc,gbcc=0,0
if self.gameEnv.fillClear then for i=1,height do
for i=1,height do local h=start+i-2
local h=start+i-2
--Bomb trigger (optional, must with CB) --Bomb trigger (optional, must with CB)
if CB and h>0 and field[h]and self.clearedRow[cc]~=h then if CB and h>0 and field[h]and self.clearedRow[cc]~=h then
for x=1,#CB[1]do for x=1,#CB[1]do
if CB[i][x]and field[h][CX+x-1]==19 then if CB[i][x]and field[h][CX+x-1]==19 then
cc=cc+1 cc=cc+1
self.clearingRow[cc]=h-cc+1 self.clearingRow[cc]=h-cc+1
self.clearedRow[cc]=h self.clearedRow[cc]=h
break break
end
end end
end end
h=h+1
--Row filled
for x=1,10 do
if field[h][x]<=0 then
goto CONTINUE_notFull
end
end
cc=cc+1
ins(self.clearingRow,h-cc+1)
ins(self.clearedRow,h)
::CONTINUE_notFull::
end end
h=h+1
--Row filled
for x=1,10 do
if field[h][x]<=0 then
goto CONTINUE_notFull
end
end
cc=cc+1
if field[h].garbage then gbcc=gbcc+1 end
ins(self.clearingRow,h-cc+1)
ins(self.clearedRow,h)
::CONTINUE_notFull::
end end
return cc return cc,gbcc
end end
function Player:roofCheck() function Player:roofCheck()
local CB=self.cur.bk local CB=self.cur.bk
@@ -673,14 +672,30 @@ function Player:roofCheck()
end end
return false return false
end end
function Player:removeClearedLines()
for i=#self.clearedRow,1,-1 do
local h=self.clearedRow[i]
if self.field[h].garbage then
self.garbageBeneath=self.garbageBeneath-1
end
FREEROW.discard(rem(self.field,h))
FREEROW.discard(rem(self.visTime,h))
end
end
function Player:removeTopClearingFX() function Player:removeTopClearingFX()
for i=#self.clearingRow,1,-1 do for i=#self.clearingRow,1,-1 do
if self.clearingRow[i]>#self.field then if self.clearingRow[i]>#self.field then
rem(self.clearingRow) rem(self.clearingRow)
else else
return break
end end
end end
if self.clearingRow[1]then
self.falling=self.gameEnv.fall
return false
else
return true
end
end end
function Player:checkMission(piece,mission) function Player:checkMission(piece,mission)
if mission<5 then if mission<5 then
@@ -1225,7 +1240,10 @@ do--Player.drop(self)--Place piece
end end
--Check line clear --Check line clear
cc=cc+self:checkClear(self.field,CY,#CB,CB,CX) if self.gameEnv.fillClear then
local _cc,_gbcc=self:checkClear(self.field,CY,#CB,CB,CX)
cc,gbcc=cc+_cc,gbcc+_gbcc
end
--Create clearing FX --Create clearing FX
for i=1,cc do for i=1,cc do
@@ -1257,25 +1275,10 @@ do--Player.drop(self)--Place piece
local finesse=CY>ENV.fieldH-2 or self:roofCheck() local finesse=CY>ENV.fieldH-2 or self:roofCheck()
--Remove rows need to be cleared --Remove rows need to be cleared
if cc>0 then self:removeClearedLines()
for i=cc,1,-1 do
_=self.clearedRow[i]
if self.field[_].garbage then
self.garbageBeneath=self.garbageBeneath-1
gbcc=gbcc+1
end
FREEROW.discard(rem(self.field,_))
FREEROW.discard(rem(self.visTime,_))
end
end
--Cancel top clearing FX --Cancel top clearing FX & get clear flag
self:removeTopClearingFX() clear=self:removeTopClearingFX()
if self.clearingRow[1]then
self.falling=ENV.fall
else
clear=true
end
--Finesse check (control) --Finesse check (control)
local finePts local finePts
@@ -1888,24 +1891,11 @@ local function update_alive(P)
P.frameRun=P.frameRun+1 P.frameRun=P.frameRun+1
if P.frameRun<=180 then if P.frameRun<=180 then
if P.frameRun==60 then if P.frameRun==60 then
if P.id==1 then if P.id==1 then playReadySFX(2)end
Snd('bass','F3')
Snd('lead','A4')
Snd('lead','D5')
end
elseif P.frameRun==120 then elseif P.frameRun==120 then
if P.id==1 then if P.id==1 then playReadySFX(1)end
Snd('bass','G3')
Snd('lead','B4')
Snd('lead','E5')
end
elseif P.frameRun==180 then elseif P.frameRun==180 then
if P.id==1 then if P.id==1 then playReadySFX(0)end
Snd('bass','A3')
Snd('lead','A4')
Snd('lead','E5')
Snd('lead','A5')
end
P.control=true P.control=true
P.timing=true P.timing=true
P:popNext() P:popNext()

View File

@@ -37,7 +37,13 @@ pad={x=140,y=65,page=1,
{0,0,0,0,0,0,0,0}, {0,0,0,0,0,0,0,0},
}, },
{ {
{{}, {}, {}, {}, {sfx='move'}, {sfx='lock'}, {sfx='drop'}, {sfx='fall'},}, {
{samp={tag='ready3',func=function()playReadySFX(3)end}},
{samp={tag='ready2',func=function()playReadySFX(2)end}},
{samp={tag='ready1',func=function()playReadySFX(1)end}},
{samp={tag='start',func=function()playReadySFX(0)end}},
{sfx='move'},{sfx='lock'},{sfx='drop'},{sfx='fall'},
},
{{sfx='hold'}, {sfx='prehold'}, {}, {}, {sfx='clear_1'},{sfx='clear_2'},{sfx='clear_3'},{sfx='clear_4'}}, {{sfx='hold'}, {sfx='prehold'}, {}, {}, {sfx='clear_1'},{sfx='clear_2'},{sfx='clear_3'},{sfx='clear_4'}},
{{sfx='prerotate'}, {sfx='rotate'}, {sfx='rotatekick'}, {}, {voc='single'}, {voc='double'}, {voc='triple'}, {voc='techrash'}}, {{sfx='prerotate'}, {sfx='rotate'}, {sfx='rotatekick'}, {}, {voc='single'}, {voc='double'}, {voc='triple'}, {voc='techrash'}},
{{sfx='finesseError'},{sfx='finesseError_long'},{sfx='drop_cancel'},{}, {sfx='spin_0'}, {sfx='spin_1'}, {sfx='spin_2'}, {sfx='spin_3'}}, {{sfx='finesseError'},{sfx='finesseError_long'},{sfx='drop_cancel'},{}, {sfx='spin_0'}, {sfx='spin_1'}, {sfx='spin_2'}, {sfx='spin_3'}},
@@ -108,6 +114,7 @@ local function press(x,y)
pad.funcAlpha[y]=1 pad.funcAlpha[y]=1
else else
local k=pad[pad.page][y][x] local k=pad[pad.page][y][x]
if k.samp then k.samp.func()end
if k.sfx then SFX.play(k.sfx,k.vol)end if k.sfx then SFX.play(k.sfx,k.vol)end
if k.voc then VOC.play(k.voc)end if k.voc then VOC.play(k.voc)end
if k.bgm then BGM.play(k.bgm)end if k.bgm then BGM.play(k.bgm)end
@@ -201,10 +208,12 @@ function scene.draw()
if showLabel then if showLabel then
if k.sfx then mStr(k.sfx,x*80+40,y*80-30)gc_circle('fill',x*80+40,(y-1)*80+40,6)end if k.sfx then mStr(k.sfx,x*80+40,y*80-30)gc_circle('fill',x*80+40,(y-1)*80+40,6)end
if k.voc then mStr(k.voc,x*80+40,y*80-17)gc_rectangle('line',x*80+30,(y-1)*80+30,20,20,1)end if k.voc then mStr(k.voc,x*80+40,y*80-17)gc_rectangle('line',x*80+30,(y-1)*80+30,20,20,1)end
if k.samp then mStr(k.samp.tag,x*80+40,y*80-30)gc_rectangle('fill',x*80+10,(y-1)*80+35,60,5,1)end
if k.bgm then mStr(k.bgm,x*80+40,y*80-78)gc_rectangle('fill',x*80+20,(y-1)*80+15,40,5,2)end if k.bgm then mStr(k.bgm,x*80+40,y*80-78)gc_rectangle('fill',x*80+20,(y-1)*80+15,40,5,2)end
else else
if k.sfx then gc_circle('fill',x*80+40,(y-1)*80+40,6)end if k.sfx then gc_circle('fill',x*80+40,(y-1)*80+40,6)end
if k.voc then gc_rectangle('line',x*80+30,(y-1)*80+30,20,20,1)end if k.voc then gc_rectangle('line',x*80+30,(y-1)*80+30,20,20,1)end
if k.samp then gc_rectangle('fill',x*80+10,(y-1)*80+35,60,5,1)end
if k.bgm then gc_rectangle('fill',x*80+20,(y-1)*80+15,40,5,2)end if k.bgm then gc_rectangle('fill',x*80+20,(y-1)*80+15,40,5,2)end
end end
if pad.alpha[y][x]>0 then if pad.alpha[y][x]>0 then

View File

@@ -14,10 +14,10 @@ local widgetX0={
} }
local enterConsole=coroutine.wrap(function() local enterConsole=coroutine.wrap(function()
while true do while true do
Snd('bell',.3,'A4',.5,'E5',1,coin('A5','B5'))YIELD() Snd('bell',.6,'A4',.7,'E5',1,coin('A5','B5'))YIELD()
Snd('bell',.3,'A4',.5,'F5',1,coin('C6','D6'))YIELD() Snd('bell',.6,'A4',.7,'F5',1,coin('C6','D6'))YIELD()
Snd('bell',.3,'A4',.5,'G5',1,coin('E6','G6'))YIELD() Snd('bell',.6,'A4',.7,'G5',1,coin('E6','G6'))YIELD()
Snd('bell',.3,'A4',.5,'A5',1,'A6')SFX.play('ren_mega')SCN.go('app_console')YIELD() Snd('bell',.6,'A4',.7,'A5',1,'A6')SFX.play('ren_mega')SCN.go('app_console')YIELD()
end end
end) end)
function scene.sceneInit() function scene.sceneInit()

View File

@@ -7,12 +7,12 @@ return[=[
其他未来内容: 其他未来内容:
组队战; 实时统计数据可视化; 教学关; 从录像继续 组队战; 实时统计数据可视化; 教学关; 从录像继续
重做模式选择UI; 重做模组UI; 加速下落; spike相关统计数据 重做模式选择UI; 重做模组UI; 加速下落; spike相关统计数据
更好的手柄支持; 场地格边缘线; 模式数据分析; 高级自定义序列 支持更多手柄; 场地格边缘线; 模式数据分析; 高级自定义序列
等级系统; 成就系统; Domain状态; 手势操作; C2连击; 特殊控件(虚拟摇杆等) 等级系统; 成就系统; Domain状态; 手势操作; C2连击; 特殊控件(虚拟摇杆等)
可调场地宽度; 可调攻击系统; 更多消除方式(隔断/架空/混合/彩色/穿墙) 方块位移/旋转动画; 更细节的DAS选项; 拓展主题系统; 无用货币
方块位移/旋转动画; 更细节的DAS选项; 拓展主题系统; 复杂的攻击系统 可调攻击系统; 更多消除方式; 可调场地宽度
工程编译到字节码; task-Z(新AI) 工程编译到字节码; task-Z(新AI)
无用货币; 收集向抽奖; 自适应UI; 多方块 收集向抽奖; 自适应UI; 多方块
0.16.4: 虫洞 Wormhole 0.16.4: 虫洞 Wormhole
新增: 新增:
@@ -21,6 +21,7 @@ return[=[
Next槽上方显示序列模式标记 Next槽上方显示序列模式标记
等级图标(暂时不能升级) 等级图标(暂时不能升级)
词典支持复制词条方便发给别人 词典支持复制词条方便发给别人
修改堆叠模式玩法(自动清除之前记录)
改动: 改动:
移除组合键切换攻击模式功能,固定为单点切换 移除组合键切换攻击模式功能,固定为单点切换
iOS设备支持三档振动(原来只有一档) iOS设备支持三档振动(原来只有一档)

View File

@@ -1,5 +1,5 @@
return{ return{
["apkCode"]=388, ["apkCode"]=389,
["code"]=1604, ["code"]=1604,
["string"]="V0.16.4", ["string"]="V0.16.4",
["room"]="ver A-0", ["room"]="ver A-0",