Compare commits
8 Commits
pre0.16.4-
...
pre0.16.4-
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
684cb90a7d | ||
|
|
172101ed55 | ||
|
|
98b5914726 | ||
|
|
d1518e7ba4 | ||
|
|
72d4faa52a | ||
|
|
862dcbf806 | ||
|
|
3db28f5136 | ||
|
|
f9e37f3c6a |
5
.github/actions/update-version/action.yml
vendored
5
.github/actions/update-version/action.yml
vendored
@@ -27,9 +27,10 @@ runs:
|
||||
import re
|
||||
with open('version.lua', 'r+', encoding='utf-8') as file:
|
||||
commitHash = '${{ inputs.commit }}'
|
||||
commitHash = commitHash[0:4] if commitHash != '' else '????'
|
||||
if commitHash != '':
|
||||
commitHash = '@' + commitHash[0:4]
|
||||
data = file.read()
|
||||
data = re.sub('(\d)"', r'\1@' + commitHash + '"', data)
|
||||
data = re.sub('(\d)"', r'\1' + commitHash + '"', data, 1)
|
||||
file.seek(0)
|
||||
file.truncate()
|
||||
file.flush()
|
||||
|
||||
8
main.lua
8
main.lua
@@ -443,6 +443,14 @@ do
|
||||
fs.remove('record/round_l.rec')
|
||||
fs.remove('record/round_u.rec')
|
||||
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
|
||||
RANKS.stack_20l=nil
|
||||
RANKS.stack_40l=nil
|
||||
|
||||
21
parts/eventsets/stack_100.lua
Normal file
21
parts/eventsets/stack_100.lua
Normal 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,
|
||||
}
|
||||
22
parts/eventsets/stack_50.lua
Normal file
22
parts/eventsets/stack_50.lua
Normal 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,
|
||||
}
|
||||
@@ -173,7 +173,25 @@ function royaleLevelup()
|
||||
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
|
||||
@@ -622,8 +640,7 @@ do--function resetGameData(args)
|
||||
if GAME.setting.allowMod then
|
||||
TASK.new(task_showMods)
|
||||
end
|
||||
Snd('bass','A3')
|
||||
Snd('lead','A4')
|
||||
playReadySFX(3)
|
||||
collectgarbage()
|
||||
end
|
||||
end
|
||||
|
||||
@@ -943,24 +943,30 @@ return{
|
||||
},
|
||||
|
||||
--Other
|
||||
{"Github Repository",
|
||||
"githubrepository sourcecode",
|
||||
"other",
|
||||
"Techmino's Github repository. Stars are appreciated.",
|
||||
"https://github.com/26F-Studio/Techmino",
|
||||
},
|
||||
{"Communities",
|
||||
"community communities",
|
||||
"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\").",
|
||||
"https://discord.gg/harddrop"
|
||||
},
|
||||
{"Mew",
|
||||
"mew tieba forum",
|
||||
"help",
|
||||
"",--TODO
|
||||
"https://mew.fun/n/tetris",
|
||||
},
|
||||
{"Tetris OL Servers",
|
||||
"tetrisonline servers",
|
||||
"other",
|
||||
"Google \"Tetris Online Poland\" for the Poland server.\nClick \"Open URL\" for information about the Tetris Online Study server.",
|
||||
"http://teatube.ltd/tos",
|
||||
},
|
||||
{"Github Repository",
|
||||
"githubrepository sourcecode",
|
||||
"other",
|
||||
"Techmino's Github repository. Stars are appreciated.",
|
||||
"https://github.com/26F-Studio/Techmino",
|
||||
},
|
||||
|
||||
--Savedata managing
|
||||
{"Console",
|
||||
|
||||
@@ -974,23 +974,29 @@ return{
|
||||
},
|
||||
|
||||
--其他
|
||||
{"GitHub仓库",
|
||||
"源代码 github git sourcecode yuandaima",
|
||||
"other",
|
||||
"Techmino的GitHub仓库地址,欢迎Star",
|
||||
"https://github.com/26F-Studio/Techmino",
|
||||
},
|
||||
{"研究群",
|
||||
"研究群 yanjiu study",
|
||||
"other",
|
||||
"俄罗斯方块·[研究]群QQ号112897780,“中国俄罗斯方块总群”",
|
||||
},
|
||||
{"Mew据点",
|
||||
"mew tieba forum",
|
||||
"help",
|
||||
"研究群下属的mew据点(类似贴吧或者discord的服务器),2021年下半年建立,是discord和贴吧的结合体,可以在同一个大社区的各个频道实时聊天,也可以发帖以主题交流,同时还有一个叫图书馆的功能方便各种方块资料整理(还在建设中,目前没多少内容,2021.11,2)",
|
||||
"https://mew.fun/n/tetris",
|
||||
},
|
||||
{"茶服",
|
||||
"茶服 chafu study",
|
||||
"other",
|
||||
"TO-S的添加方法、说明等关于茶服的一切",
|
||||
"http://teatube.ltd/tos",
|
||||
},
|
||||
{"GitHub仓库",
|
||||
"源代码 github git sourcecode yuandaima",
|
||||
"other",
|
||||
"Techmino的GitHub仓库地址,欢迎Star",
|
||||
"https://github.com/26F-Studio/Techmino",
|
||||
},
|
||||
|
||||
--存档管理
|
||||
{"控制台",
|
||||
|
||||
@@ -760,163 +760,4 @@ return{
|
||||
['custom_clear']= {"习俗", "正常"} ,
|
||||
['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?"},
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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{
|
||||
color=COLOR.cyan,
|
||||
env={
|
||||
drop=60,lock=60,
|
||||
fieldH=100,
|
||||
highCam=true,
|
||||
fillClear=false,
|
||||
wait=0,fall=50,
|
||||
garbageSpeed=30,
|
||||
highCam=false,
|
||||
seqData={1,2,3,4,5,6,7},
|
||||
mesDisp=function(P)PLY.draw.drawTargetLine(P,100)end,
|
||||
eventSet='stack_100',
|
||||
bg='blockrain',bgm='there',
|
||||
},
|
||||
score=function(P)return{getHoleCount(P),P.stat.time}end,
|
||||
scoreDisp=function(D)return D[1].." Holes".." "..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,
|
||||
score=function(P)return{P.stat.row,P.stat.time}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,
|
||||
getRank=function(P)
|
||||
local H=getHoleCount(P)
|
||||
local L=P.stat.row
|
||||
return
|
||||
H==0 and 5 or
|
||||
H<=1 and 4 or
|
||||
H<=2 and 3 or
|
||||
H<=5 and 2 or
|
||||
H<=10 and 1 or
|
||||
H<=26 and 0
|
||||
L>=200 and 5 or
|
||||
L>=180 and 4 or
|
||||
L>=160 and 3 or
|
||||
L>=130 and 2 or
|
||||
L>=100 and 1 or
|
||||
L>=70 and 0
|
||||
end,
|
||||
}
|
||||
|
||||
@@ -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{
|
||||
color=COLOR.magenta,
|
||||
env={
|
||||
drop=60,lock=60,
|
||||
fieldH=100,
|
||||
highCam=true,
|
||||
fillClear=false,
|
||||
wait=0,fall=50,
|
||||
fieldH=21,
|
||||
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},
|
||||
mesDisp=function(P)PLY.draw.drawTargetLine(P,98)end,
|
||||
eventSet='stack_50',
|
||||
bg='blockrain',bgm='there',
|
||||
},
|
||||
score=function(P)return{getHoleCount(P),P.stat.time}end,
|
||||
scoreDisp=function(D)return D[1].." Holes".." "..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,
|
||||
score=function(P)return{P.stat.row,P.stat.time}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,
|
||||
getRank=function(P)
|
||||
local H=getHoleCount(P)
|
||||
local L=P.stat.row
|
||||
return
|
||||
H==0 and 5 or
|
||||
H<=2 and 4 or
|
||||
H<=4 and 3 or
|
||||
H<=10 and 2 or
|
||||
H<=26 and 1 or
|
||||
H<=62 and 0
|
||||
L>=80 and 5 or
|
||||
L>=70 and 4 or
|
||||
L>=60 and 3 or
|
||||
L>=50 and 2 or
|
||||
L>=40 and 1 or
|
||||
L>=20 and 0
|
||||
end,
|
||||
}
|
||||
}
|
||||
@@ -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{
|
||||
color=COLOR.yellow,
|
||||
env={
|
||||
drop=60,lock=60,
|
||||
fieldH=100,
|
||||
highCam=true,
|
||||
fillClear=false,
|
||||
wait=0,fall=50,
|
||||
fieldH=21,
|
||||
highCam=false,
|
||||
garbageSpeed=30,
|
||||
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',
|
||||
},
|
||||
score=function(P)return{getHoleCount(P),P.stat.time}end,
|
||||
scoreDisp=function(D)return D[1].." Holes".." "..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,
|
||||
score=function(P)return{P.stat.row,P.stat.time}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,
|
||||
getRank=function(P)
|
||||
local H=getHoleCount(P)
|
||||
local L=P.stat.row
|
||||
return
|
||||
H<=2 and 5 or
|
||||
H<=5 and 4 or
|
||||
H<=10 and 3 or
|
||||
H<=26 and 2 or
|
||||
H<=62 and 1 or
|
||||
H<=126 and 0
|
||||
L>=60 and 5 or
|
||||
L>=50 and 4 or
|
||||
L>=45 and 3 or
|
||||
L>=30 and 2 or
|
||||
L>=20 and 1 or
|
||||
L>=10 and 0
|
||||
end,
|
||||
}
|
||||
}
|
||||
@@ -622,37 +622,36 @@ function Player:lock()
|
||||
end
|
||||
|
||||
function Player:checkClear(field,start,height,CB,CX)
|
||||
local cc=0
|
||||
if self.gameEnv.fillClear then
|
||||
for i=1,height do
|
||||
local h=start+i-2
|
||||
local cc,gbcc=0,0
|
||||
for i=1,height do
|
||||
local h=start+i-2
|
||||
|
||||
--Bomb trigger (optional, must with CB)
|
||||
if CB and h>0 and field[h]and self.clearedRow[cc]~=h then
|
||||
for x=1,#CB[1]do
|
||||
if CB[i][x]and field[h][CX+x-1]==19 then
|
||||
cc=cc+1
|
||||
self.clearingRow[cc]=h-cc+1
|
||||
self.clearedRow[cc]=h
|
||||
break
|
||||
end
|
||||
--Bomb trigger (optional, must with CB)
|
||||
if CB and h>0 and field[h]and self.clearedRow[cc]~=h then
|
||||
for x=1,#CB[1]do
|
||||
if CB[i][x]and field[h][CX+x-1]==19 then
|
||||
cc=cc+1
|
||||
self.clearingRow[cc]=h-cc+1
|
||||
self.clearedRow[cc]=h
|
||||
break
|
||||
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
|
||||
|
||||
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
|
||||
return cc
|
||||
return cc,gbcc
|
||||
end
|
||||
function Player:roofCheck()
|
||||
local CB=self.cur.bk
|
||||
@@ -673,14 +672,30 @@ function Player:roofCheck()
|
||||
end
|
||||
return false
|
||||
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()
|
||||
for i=#self.clearingRow,1,-1 do
|
||||
if self.clearingRow[i]>#self.field then
|
||||
rem(self.clearingRow)
|
||||
else
|
||||
return
|
||||
break
|
||||
end
|
||||
end
|
||||
if self.clearingRow[1]then
|
||||
self.falling=self.gameEnv.fall
|
||||
return false
|
||||
else
|
||||
return true
|
||||
end
|
||||
end
|
||||
function Player:checkMission(piece,mission)
|
||||
if mission<5 then
|
||||
@@ -1225,7 +1240,10 @@ do--Player.drop(self)--Place piece
|
||||
end
|
||||
|
||||
--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
|
||||
for i=1,cc do
|
||||
@@ -1257,25 +1275,10 @@ do--Player.drop(self)--Place piece
|
||||
local finesse=CY>ENV.fieldH-2 or self:roofCheck()
|
||||
|
||||
--Remove rows need to be cleared
|
||||
if cc>0 then
|
||||
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
|
||||
self:removeClearedLines()
|
||||
|
||||
--Cancel top clearing FX
|
||||
self:removeTopClearingFX()
|
||||
if self.clearingRow[1]then
|
||||
self.falling=ENV.fall
|
||||
else
|
||||
clear=true
|
||||
end
|
||||
--Cancel top clearing FX & get clear flag
|
||||
clear=self:removeTopClearingFX()
|
||||
|
||||
--Finesse check (control)
|
||||
local finePts
|
||||
@@ -1888,24 +1891,11 @@ local function update_alive(P)
|
||||
P.frameRun=P.frameRun+1
|
||||
if P.frameRun<=180 then
|
||||
if P.frameRun==60 then
|
||||
if P.id==1 then
|
||||
Snd('bass','F3')
|
||||
Snd('lead','A4')
|
||||
Snd('lead','D5')
|
||||
end
|
||||
if P.id==1 then playReadySFX(2)end
|
||||
elseif P.frameRun==120 then
|
||||
if P.id==1 then
|
||||
Snd('bass','G3')
|
||||
Snd('lead','B4')
|
||||
Snd('lead','E5')
|
||||
end
|
||||
if P.id==1 then playReadySFX(1)end
|
||||
elseif P.frameRun==180 then
|
||||
if P.id==1 then
|
||||
Snd('bass','A3')
|
||||
Snd('lead','A4')
|
||||
Snd('lead','E5')
|
||||
Snd('lead','A5')
|
||||
end
|
||||
if P.id==1 then playReadySFX(0)end
|
||||
P.control=true
|
||||
P.timing=true
|
||||
P:popNext()
|
||||
|
||||
@@ -37,7 +37,13 @@ pad={x=140,y=65,page=1,
|
||||
{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='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'}},
|
||||
@@ -108,6 +114,7 @@ local function press(x,y)
|
||||
pad.funcAlpha[y]=1
|
||||
else
|
||||
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.voc then VOC.play(k.voc)end
|
||||
if k.bgm then BGM.play(k.bgm)end
|
||||
@@ -201,10 +208,12 @@ function scene.draw()
|
||||
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.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
|
||||
else
|
||||
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.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
|
||||
end
|
||||
if pad.alpha[y][x]>0 then
|
||||
|
||||
@@ -14,10 +14,10 @@ local widgetX0={
|
||||
}
|
||||
local enterConsole=coroutine.wrap(function()
|
||||
while true do
|
||||
Snd('bell',.3,'A4',.5,'E5',1,coin('A5','B5'))YIELD()
|
||||
Snd('bell',.3,'A4',.5,'F5',1,coin('C6','D6'))YIELD()
|
||||
Snd('bell',.3,'A4',.5,'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,'E5',1,coin('A5','B5'))YIELD()
|
||||
Snd('bell',.6,'A4',.7,'F5',1,coin('C6','D6'))YIELD()
|
||||
Snd('bell',.6,'A4',.7,'G5',1,coin('E6','G6'))YIELD()
|
||||
Snd('bell',.6,'A4',.7,'A5',1,'A6')SFX.play('ren_mega')SCN.go('app_console')YIELD()
|
||||
end
|
||||
end)
|
||||
function scene.sceneInit()
|
||||
|
||||
@@ -7,12 +7,12 @@ return[=[
|
||||
其他未来内容:
|
||||
组队战; 实时统计数据可视化; 教学关; 从录像继续
|
||||
重做模式选择UI; 重做模组UI; 加速下落; spike相关统计数据
|
||||
更好的手柄支持; 场地格边缘线; 模式数据分析; 高级自定义序列
|
||||
支持更多手柄; 场地格边缘线; 模式数据分析; 高级自定义序列
|
||||
等级系统; 成就系统; Domain状态; 手势操作; C2连击; 特殊控件(虚拟摇杆等)
|
||||
可调场地宽度; 可调攻击系统; 更多消除方式(隔断/架空/混合/彩色/穿墙)
|
||||
方块位移/旋转动画; 更细节的DAS选项; 拓展主题系统; 复杂的攻击系统
|
||||
方块位移/旋转动画; 更细节的DAS选项; 拓展主题系统; 无用货币
|
||||
可调攻击系统; 更多消除方式; 可调场地宽度
|
||||
工程编译到字节码; task-Z(新AI)
|
||||
无用货币; 收集向抽奖; 自适应UI; 多方块
|
||||
收集向抽奖; 自适应UI; 多方块
|
||||
|
||||
0.16.4: 虫洞 Wormhole
|
||||
新增:
|
||||
@@ -21,6 +21,7 @@ return[=[
|
||||
Next槽上方显示序列模式标记
|
||||
等级图标(暂时不能升级)
|
||||
词典支持复制词条方便发给别人
|
||||
修改堆叠模式玩法(自动清除之前记录)
|
||||
改动:
|
||||
移除组合键切换攻击模式功能,固定为单点切换
|
||||
iOS设备支持三档振动(原来只有一档)
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
return{
|
||||
["apkCode"]=388,
|
||||
["apkCode"]=389,
|
||||
["code"]=1604,
|
||||
["string"]="V0.16.4",
|
||||
["room"]="ver A-0",
|
||||
|
||||
Reference in New Issue
Block a user