Compare commits
18 Commits
pre0.17.0-
...
pre0.17.0-
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
4d93374cf6 | ||
|
|
4e421bf9ba | ||
|
|
8b2a9d7c01 | ||
|
|
5a3244d345 | ||
|
|
f1b9d0c5e4 | ||
|
|
6493e0e623 | ||
|
|
e71ba17f9f | ||
|
|
e656363e20 | ||
|
|
0826a748ae | ||
|
|
a595fe99ef | ||
|
|
9dbc7942e3 | ||
|
|
845d8ae32e | ||
|
|
5c524e138c | ||
|
|
86d9265ff9 | ||
|
|
6994a5d6d3 | ||
|
|
e6213b00c1 | ||
|
|
43e2caa30e | ||
|
|
97ca245dfc |
@@ -226,10 +226,10 @@ function button:press(_,_,k)
|
||||
self.h
|
||||
)
|
||||
if self.sound then
|
||||
SFX.play('button')
|
||||
SFX.play(self.sound)
|
||||
end
|
||||
end
|
||||
function WIDGET.newButton(D)--name,x,y,w[,h][,fText][,color][,font=30][,fType][,sound=true][,align='M'][,edge=0][,code][,hideF][,hide]
|
||||
function WIDGET.newButton(D)--name,x,y,w[,h][,fText][,color][,font=30][,fType][,sound][,align='M'][,edge=0][,code][,hideF][,hide]
|
||||
if not D.h then D.h=D.w end
|
||||
local _={
|
||||
name= D.name or"_",
|
||||
@@ -253,11 +253,18 @@ function WIDGET.newButton(D)--name,x,y,w[,h][,fText][,color][,font=30][,fType][,
|
||||
fType=D.fType,
|
||||
align=D.align or'M',
|
||||
edge= D.edge or 0,
|
||||
sound=D.sound~=false,
|
||||
code= D.code or NULL,
|
||||
hideF=D.hideF,
|
||||
hide= D.hide,
|
||||
}
|
||||
if D.sound==false then
|
||||
_.sound=false
|
||||
elseif type(D.sound)=='string'then
|
||||
_.sound=D.sound
|
||||
else
|
||||
_.sound='button'
|
||||
end
|
||||
|
||||
for k,v in next,button do _[k]=v end
|
||||
setmetatable(_,widgetMetatable)
|
||||
return _
|
||||
@@ -347,10 +354,10 @@ end
|
||||
function key:press(_,_,k)
|
||||
self.code(k)
|
||||
if self.sound then
|
||||
SFX.play('key')
|
||||
SFX.play(self.sound)
|
||||
end
|
||||
end
|
||||
function WIDGET.newKey(D)--name,x,y,w[,h][,fText][,fShade][,color][,font=30][,fType][,sound=true][,align='M'][,edge=0][,code][,hideF][,hide]
|
||||
function WIDGET.newKey(D)--name,x,y,w[,h][,fText][,fShade][,color][,font=30][,fType][,sound][,align='M'][,edge=0][,code][,hideF][,hide]
|
||||
if not D.h then D.h=D.w end
|
||||
local _={
|
||||
name= D.name or"_",
|
||||
@@ -373,13 +380,19 @@ function WIDGET.newKey(D)--name,x,y,w[,h][,fText][,fShade][,color][,font=30][,fT
|
||||
color= D.color and(COLOR[D.color]or D.color)or COLOR.Z,
|
||||
font= D.font or 30,
|
||||
fType= D.fType,
|
||||
sound= D.sound~=false,
|
||||
align= D.align or'M',
|
||||
edge= D.edge or 0,
|
||||
code= D.code or NULL,
|
||||
hideF= D.hideF,
|
||||
hide= D.hide,
|
||||
}
|
||||
if D.sound==false then
|
||||
_.sound=false
|
||||
elseif type(D.sound)=='string'then
|
||||
_.sound=D.sound
|
||||
else
|
||||
_.sound='key'
|
||||
end
|
||||
for k,v in next,key do _[k]=v end
|
||||
setmetatable(_,widgetMetatable)
|
||||
return _
|
||||
|
||||
2
main.lua
2
main.lua
@@ -340,8 +340,8 @@ VOC.init{
|
||||
LANG.init('zh',
|
||||
{
|
||||
zh=require'parts.language.lang_zh',
|
||||
zh_full=require'parts.language.lang_zh_full',
|
||||
zh_trad=require'parts.language.lang_zh_trad',
|
||||
zh_full=require'parts.language.lang_zh_full',
|
||||
en=require'parts.language.lang_en',
|
||||
fr=require'parts.language.lang_fr',
|
||||
es=require'parts.language.lang_es',
|
||||
|
||||
BIN
media/effect/chiptune/back.ogg
Normal file
BIN
media/effect/chiptune/back.ogg
Normal file
Binary file not shown.
Binary file not shown.
@@ -810,9 +810,9 @@ return{
|
||||
"快速震动手指,实现比长按更快速+灵活的高速单点移动,主要在经典块的高难度下(因为das不可调而且特别慢,高速下很容易md导致失败,此时手动连点就比自动移动更快)或者受特殊情况限制不适合用自动移动时使用。会使用这个技术的人称为“Hypertapper”。",
|
||||
},
|
||||
{"穿透 Passthrough",
|
||||
"穿透 passthrough pingthrough",
|
||||
"穿透 passthrough pingthrough chuantou",
|
||||
"term",
|
||||
"(攻击)穿透,指双方的攻击明明时间上很接近但没有抵消,互相都收到的现象。\nTETR.IO中自定义房间如果开启passthrough规则(曾经天梯默认开启),那么对手消行攻击的瞬间能看到自己的红条出现但其处于“无敌时间”内,不会触发也不能抵消,此时你的攻击会直接打给对手。(应该是给攻击的飞行动画预留时间,同时也让玩家能反应过来并主动选择要不要抵消,要的话就再等一会)\n另有pingthrough的说法,最终效果同passthrough,只是根本原因是不可避免的网络传输延迟。设计比较简单的联网对战块没有特殊考虑的话可能自然就会带有这个机制。",
|
||||
"(攻击)穿透,指双方的攻击打出后没有抵消,互相都收到的现象。\nTETR.IO中自定义房间如果开启passthrough规则(曾经天梯默认开启),那么对手消行攻击的瞬间能看到自己的红条出现但其处于“无敌时间”内,不会触发也不能抵消,此时你的攻击会直接打给对手。(应该是给攻击的飞行动画预留时间,同时也让玩家能反应过来并主动选择要不要抵消,要的话就再等一会)\n另有pingthrough的说法,只是原因是由于不可避免的网络传输延迟,效果同passthrough,设计比较简单的联网对战块没有特殊考虑的话可能自然就会带有这个机制。",
|
||||
},
|
||||
{"TOP攻击表",
|
||||
"攻击表 top attack",
|
||||
|
||||
@@ -800,11 +800,11 @@ return{
|
||||
"Bridge clear coming soon!",
|
||||
"Can you master this modern yet familiar stacker?",
|
||||
"Certainly within this heart lies my M@STERPIECE.",
|
||||
"Changelogs in English can be found on Discord.",
|
||||
"Change logs in English can be found on Discord.",
|
||||
"Color clear coming soon!",
|
||||
"Decreasing DAS and ARR makes your game faster but harder to control.",
|
||||
"Did I just see a Back-to-Back-to-Back?",
|
||||
"Does B2B2B2B exists?",
|
||||
"Does B2B2B2B exist?",
|
||||
"Don't let a small glitch ruin your entire day!",
|
||||
"Don't look directly at the bugs!",
|
||||
"Enjoy the Techmino rotation system!",
|
||||
@@ -818,7 +818,6 @@ return{
|
||||
"Have you noticed what \"rotating\" does do to a block?",
|
||||
"Headphones recommended for a better experience.",
|
||||
"Hello world!",
|
||||
"hello world",
|
||||
"I3 and L3 are the only two unique triminoes.",
|
||||
"if a==true",
|
||||
"Increase your frame rate for a better experience.",
|
||||
@@ -839,7 +838,6 @@ return{
|
||||
"No easter eggs in this menu if you have the simplistic style turned on!",
|
||||
"O-Spin Triple!",
|
||||
"OHHHHHHHHHHHHHH",
|
||||
"Online mode is planned — please be patient.",
|
||||
"Play single-handedly!",
|
||||
"Playing good takes some time!",
|
||||
"Powered by LÖVE",
|
||||
@@ -860,6 +858,7 @@ return{
|
||||
"There are several hidden modes in the game that cannot be entered using the map.",
|
||||
"There is a total of 18 different pentominoes.",
|
||||
"There is a total of 7 different tetrominoes.",
|
||||
"Try online multiplayer! Expect things to break though.",
|
||||
"Try using multiple Hold Queues!",
|
||||
"Try using two rotation buttons. Using all three of them is better.",
|
||||
"Warning: Programmer Art",
|
||||
@@ -872,7 +871,6 @@ return{
|
||||
"You are welcome to help us to make BGMs and SFXs!",
|
||||
"You can connect a keyboard to your phone or tablet (not functional on iOS though).",
|
||||
"You can customize the key mappings in settings!",
|
||||
"You can navigate the menu with a keyboard, but only in this screen.",
|
||||
"You can open the save directory from the Stats page.",
|
||||
"You can perform a spin with 28 of the 29 minoes in this game; the exception being O1.",
|
||||
"You can set the spawning orientation for each piece.",
|
||||
|
||||
@@ -772,20 +772,11 @@ return{
|
||||
['custom_puzzle']= {"自定义", "拼图"},
|
||||
},
|
||||
getTip={refuseCopy=true,
|
||||
"……,合群了就会消失,不合群世界毁灭(指game over",
|
||||
"……,合群了就会消失,但消失不代表没有意义",
|
||||
"……,没有对比就没有伤害",
|
||||
"“Techmino.app”将对您的电脑造成伤害。您应该将它移到废纸篓。",
|
||||
"(a+b)³=a³+3a²b+3ab²+b³",
|
||||
"(RUR'U')R'FR2U'R'U'(RUR'F')",
|
||||
"《按钮风格进化史》",
|
||||
"《加载动画进化史》",
|
||||
"《教育的力量》",
|
||||
"《练习的力量》",
|
||||
"《梦想的意义》",
|
||||
"《天赋的力量》",
|
||||
"《游戏的意义》",
|
||||
"《知识的力量》",
|
||||
"《主题曲进化史》",
|
||||
"↑↑↓↓←→←→BA",
|
||||
"∫u dv=uv-∫v du",
|
||||
@@ -795,34 +786,16 @@ return{
|
||||
"1next 0hold",
|
||||
"1next 1hold!",
|
||||
"1next 6hold!",
|
||||
"2021年是Techmino联机元年",
|
||||
"20G本质是一个全新的游戏规则!",
|
||||
"29种块里28个都能spin你敢信?",
|
||||
"3.1415926535897932384???",
|
||||
"3.1415926535897932384(\\d{3})",
|
||||
"3next 1hold?",
|
||||
"40行世界纪录:14.915s by Reset_",
|
||||
"6236326236327175",
|
||||
"626in1",
|
||||
"6next 1hold!",
|
||||
"6next 6hold?!",
|
||||
"7宽三SZ架空捐了解一下",
|
||||
"把手机调到特殊的日期也许会发生什么",
|
||||
"报时机器人:新的一天开始了",
|
||||
"背景影响游玩?可以去设置关闭",
|
||||
"本游戏不叫Teachmino",
|
||||
"本游戏的一部分内容是国际合作的!",
|
||||
"本游戏的B2B是气槽机制,和传统的开关机制不一样哦",
|
||||
"本游戏还在测试中,出各种问题都是有可能的哦",
|
||||
"本游戏内置了几个休(yìng)闲(hé)小游戏哦~",
|
||||
"本游戏使用精简版字体,可能有些特殊字符不能正确显示",
|
||||
"本游戏在设计的时候受到了大量其他块游甚至一些音游的启发",
|
||||
"必须要软降才能到达的位置都会判定为极简操作",
|
||||
"别看攻击效率不高,其实消四还是很强的",
|
||||
"别问游戏名怎么取的,问就是随便想的",
|
||||
"不同人打40行最合适的方式不一样,s1w/63/散消/s2w……",
|
||||
"不同游戏(甚至不同模式)中不同战术的强度都不一样,并不能简单的按顺序排名",
|
||||
"不希望激烈的零和竞争充斥整个游戏",
|
||||
"不要悲伤,不要心急",
|
||||
"不要大力拍打或滑动哦",
|
||||
"不要卖弱不要卖弱不要卖弱",
|
||||
"不知道有多少人玩游戏的时候会关心游戏是谁做的",
|
||||
@@ -832,168 +805,73 @@ return{
|
||||
"车万方块是一家(暴论",
|
||||
"成就系统在做了!",
|
||||
"吃键?真的吗?建议回放看看到底按没按到,按了多久",
|
||||
"除了雨宫太阳还有很多高手玩家,甚至强出很多很多",
|
||||
"触发游戏报错后日志文件会越来越大(不过顶多几百K)",
|
||||
"触摸板打osu也很好!",
|
||||
"凑数tip什么时候能站起来!",
|
||||
"打好块跟学习一样没有捷径,多练。",
|
||||
"打铁.png",
|
||||
"打铁",
|
||||
"打网络对战前请确认自己有一定的水平,不然会毫无游戏体验的",
|
||||
"大概还是有人会看tip的",
|
||||
"大量使用开局定式的数据是不准的",
|
||||
"大陆的方块社区起步晚,所以世界级高手很少……下一个会是你吗?",
|
||||
"大家认为的俄罗斯方块很可能不是你以为的俄罗斯方块,场合合适的时候可以适当提醒一下哦",
|
||||
"大满贯10连击消四全清!",
|
||||
"戴上耳机以获得最佳体验",
|
||||
"单手也能玩!",
|
||||
"低帧率会降低游戏体验",
|
||||
"点击添加标题",
|
||||
"电脑游玩自带按键显示~",
|
||||
"对编程有真·兴趣推荐Lua,安装无脑 语法简单 执行速度快 远离枯燥学校编程(雾",
|
||||
"对战模式跟单机模式有本质区别,timing等能力需要专门练习",
|
||||
"多年小游戏玩家表示痛恨故意拖时间的假加载",
|
||||
"多hold现代块又回来了!",
|
||||
"俄罗斯方块完全可以作为电竞游戏",
|
||||
"发现有个“隐形”皮肤了吗",
|
||||
"发现Bug可以去GitHub上开个issue反馈",
|
||||
"方块不能吃",
|
||||
"方块不是你生活的全部,适当走出去看看",
|
||||
"方块教会我们,合群了就会消失,……",
|
||||
"方块默认出现的方向都是重心在下哦(如果你没乱动设置",
|
||||
"方块能吃吗",
|
||||
"分数一般只是好看的没有实际用途,建议只关心关卡要求",
|
||||
"服务器随时爆炸",
|
||||
"感觉明明按键了但是没反应?你真的按到了吗?",
|
||||
"感觉自己速度到上限了?试着把das调低一点",
|
||||
"感谢群友帮忙想tip",
|
||||
"感谢Orzmic为这个tip框提供修改意见",
|
||||
"感谢Phigros提供部分tip模板",
|
||||
"刚接触方块的话多玩玩就行,40行两分钟以外没啥好针对性练习的",
|
||||
"刚开始练全隐形可以尽量堆平,留一列消四",
|
||||
"感谢Phigros提供(确信)部分tip模板",
|
||||
"隔壁不在乎玩家意见但是我们在乎,没人提过的合理建议一定会回应",
|
||||
"隔断消除即将到来!",
|
||||
"各种画面细节选项都可以在设置里找到哦",
|
||||
"更换方块皮肤也许能帮助提升成绩?不懂,玄学",
|
||||
"更小的DAS和ARR拥有更高的操作上限(能控制得了的话)",
|
||||
"更新内容在游戏里和群公告都有写!",
|
||||
"攻击生效速度(从快到慢):消二/三,消四,spin,高连击",
|
||||
"还能写些什么tip呢",
|
||||
"好像还没人能用脚打块打到一定水平",
|
||||
"好像可以把手机倒过来打场地旋转180……那还是不建议违反规则",
|
||||
"很有精神!",
|
||||
"欢迎来帮忙制作音乐或音效!",
|
||||
"欢迎提供更多游戏创意!",
|
||||
"混合消除即将到来!",
|
||||
"基础堆叠和挖掘能力非常重要,忽视这两项的人都后悔了(确信)",
|
||||
"即使被顶到天上了也不要放弃,每一行垃圾都有可能成为你的武器",
|
||||
"极简率决定了你大概的速度上限和相等手速下的放块速度",
|
||||
"假如生活欺骗了你,不要悲伤,不要心急,还有块陪着你",
|
||||
"架空消除即将到来!",
|
||||
"建议使用双手游玩",
|
||||
"健康小贴士:不要熬夜,真的会猝死",
|
||||
"健康小贴士:戴耳机(尤其是半入耳式)时音量千万别拉满,不然真的会影响听力(虽然很慢)",
|
||||
"健康小贴士:玩游戏多眨眼,不然会干眼病",
|
||||
"键位是可以自定义的",
|
||||
"键位有可能决定了上限,可能的话还是尽量考虑一下自己的键位是否利于超高速操作",
|
||||
"尽早学双旋吧,单旋没前途的",
|
||||
"经典块的水也很深,不要小看经典块玩家",
|
||||
"经典块跟现代块是两个游戏,一个厉害不代表另一个也厉害,得从头练起",
|
||||
"经典块和渣方块不是一回事",
|
||||
"据某个群友描述玩了Techmino之后打字速度变快了",
|
||||
"绝大多数按钮上的图标是调用Unicode私用区里的自制字符实现的",
|
||||
"觉得移动速度太慢或太快,手感不好?快去设置调整DAS/ARR",
|
||||
"开启省流模式后将不会加载用户头像(应该能省不少流吧)",
|
||||
"科技骨牌 你的创新式块堆栈业务技术管理器",
|
||||
"块东V共荣",
|
||||
"快去打一把100%极简看看会怎样",
|
||||
"锟斤拷锟斤拷锟斤拷",
|
||||
"来学编程,好玩的",
|
||||
"老牌益智游戏了",
|
||||
"连续pc有大量知识要背,不过背出来后随手10连pc不是问题",
|
||||
"六连块总共有……?那不重要,不会做的(大概",
|
||||
"论如何正确使用Unicode私用区定制字体",
|
||||
"卖弱和谦虚不是一回事,发言前三思呀",
|
||||
"卖弱禁言警告",
|
||||
"没学过编曲,音乐都是自己瞎写的,如果真的觉得好听就太好了!",
|
||||
"没有量化就没有对比,……",
|
||||
"每个块的出现方向可以自定义",
|
||||
"每个块的颜色可以自定义",
|
||||
"每个虚拟按键都可以隐藏/显示,尺寸也可调",
|
||||
"免费吃鸡方块",
|
||||
"喵!",
|
||||
"魔方也是方块(确信",
|
||||
"能导致吃键的问题有很多,建议说清楚具体发生了什么并且录视频说明",
|
||||
"能玩到Techmino不是你有优越感的理由",
|
||||
"你的双手是为了你的一生服务的,而不是Techmino",
|
||||
"你今天的人品值是(满分100):"..math.random(100),
|
||||
"你可以从统计页面打开游戏存档目录",
|
||||
"你们考虑过Z酱的感受吗?没有!你们只考虑你自己。",
|
||||
"你说彩蛋?嗯…算是有,可以找找",
|
||||
"你有一个好",
|
||||
"你这场地是金子堆的还是块是金子做的",
|
||||
"你知道吗[001]看主页机器人玩可能比较费电",
|
||||
"你知道吗[002]全程不使用任何旋转键完成40行模式是有可能的",
|
||||
"你知道吗[003]全程不使用左右移动键完成40行模式是有可能的",
|
||||
"你知道吗[004]停留在模式地图界面很费电",
|
||||
"你知道吗[005]在其他(方块)游戏相关场合提及本游戏是很不礼貌的",
|
||||
"你知道吗[006]O-Spin是在0.8.20 (Fantastic Global Update II)中诞生的",
|
||||
"你知道吗[007]TRS旋转系统的最初形态在0.0.091726版本就存在了",
|
||||
"你准备好了吗?",
|
||||
"其实很多时候“吃键”是玩家对游戏机制不了解或者自己的操作问题导致的",
|
||||
"其实S和Z有四个方向(状态),虽然看起来只有两个",
|
||||
"请谨慎向没有方块经验的玩家推荐,会对本游戏的生存环境造成影响,感谢配合。",
|
||||
"请勿大力敲打设备!敲坏了就没有Techmino玩了",
|
||||
"请勿使用三只手游玩",
|
||||
"去玩别的方块的时候记得没有Ospin!",
|
||||
"全球目前应该没人能全X评价(大爆炸不算)",
|
||||
"群友翻译的中文方块百科全书!tetris.huijiwiki.com",
|
||||
"让他三尺又何妨",
|
||||
"如何O-spin: 一秒转626圈(误",
|
||||
"三连块只有2种",
|
||||
"三岁通关困难马拉松",
|
||||
"上面这个不是录像,是机器人实时在玩",
|
||||
"少女祈祷中",
|
||||
"少玩点游戏,多注意眨眼和休息",
|
||||
"深降了解一下",
|
||||
"时间碎片[000] 2021/11/21开始tip加入这个版块",
|
||||
"时间碎片[001] V0.7.9加入O-spin",
|
||||
"时间碎片[002] V0.7.19加入语音系统",
|
||||
"时间碎片[003] V0.7.22加入平滑下落",
|
||||
"时间碎片[004] V0.8.5加入模式地图",
|
||||
"时间碎片[005] V0.8.19加入五连块",
|
||||
"时间碎片[006] V0.9.0加入自定义序列和模式",
|
||||
"时间碎片[007] V0.10.0加入录像回放",
|
||||
"时间碎片[008] V0.11.1加入小z词典",
|
||||
"时间碎片[009] V0.12.2加入mod系统",
|
||||
"时间碎片[010] V0.13.0联网对战测试",
|
||||
"时间碎片[011] V0.13.2加入任意场地高度",
|
||||
"时间碎片[012] V0.13.3加入控制台",
|
||||
"时间碎片[013] V0.14.4加入第一首不是用Beepbox制作的BGM",
|
||||
"时间碎片[014] V0.14.5加入第一首社区玩家自制BGM",
|
||||
"时间碎片[015] V0.15.5加入录像回放菜单",
|
||||
"时间碎片[016] V0.16.0应该是单次更新内容最多的(起码更新历史最长)",
|
||||
"时间碎片[017] V0.16.2加入打击垫样式的音效室",
|
||||
"时间碎片[018] V0.17.0加入手柄的摇杆和扳机支持",
|
||||
"使用固定堆叠方法达成20TSD难度很低",
|
||||
"试试用跳舞毯打块",
|
||||
"适度游戏益脑,沉迷游戏伤身,合理安排时间,享受健康生活",
|
||||
"手机玩也可以外接键盘哦(iOS除外)",
|
||||
"首页的机器人可能会不小心把自己给玩死",
|
||||
"术语不认识?去右边那个词典里查查吧",
|
||||
"水平是随着时间一点点提升的,不是几天几星期就能玩好的哦",
|
||||
"四连块总共7种",
|
||||
"虽然极简连击和极简率计算看着很怪,但以后你会发现还挺科学!",
|
||||
"所有大道理tip都是亲眼目睹后加的,如果觉得多余说明就不是给你看的呀!消消气",
|
||||
"烫烫烫烫烫烫",
|
||||
"提前旋转等功能可以用来救命",
|
||||
"天哪,我竟然是一条凑数tip",
|
||||
"退一步海阔天空",
|
||||
"挖掘能力在对战里非常非常非常重要!!!!",
|
||||
"玩到一半弹出消息框?快去设置禁止弹窗",
|
||||
"玩得开心的话游戏作者也会很开心哦",
|
||||
"为了保护玩家们的健康,本游戏有一个临时的简易防沉迷系统!(不过估计你也触发不了/笑)",
|
||||
"为什么关卡那么少!因为前一模式成绩连B都没达到,再加把劲吧~",
|
||||
"为数不多走向世界的国产方块游戏",
|
||||
"我曾经在极度愤怒的时候15秒消了40行",
|
||||
"我们联合!",
|
||||
"我们是不是第一个在方块游戏做tip的?",
|
||||
@@ -1002,46 +880,24 @@ return{
|
||||
"我一个滑铲就挖了个11renPC",
|
||||
"我永远喜……",
|
||||
"无法打开“Techmino.app”,因为无法验证开发者。",
|
||||
"无聊翻翻设置是好习惯",
|
||||
"五连块总共18种",
|
||||
"物理hold了解一下",
|
||||
"希望极简率没事",
|
||||
"希望你们都能喜欢Z……哦不是,喜欢Techmino",
|
||||
"喜欢本游戏的话可以到应用商……好像没上架呢还,不过快了就是(",
|
||||
"喜欢本游戏的话可以到应用商店下载",
|
||||
"享受Tech的特色旋转系统!",
|
||||
"向其他人询问练习方法最好提供自己的详细水平,最好录些视频,不然很难给出合适的建议",
|
||||
"小心腱鞘炎",
|
||||
"写不出那种很酷的音乐(哭",
|
||||
"旋转不是变形!请尽量灵活利用顺逆时针两个旋转键",
|
||||
"学会使用两个旋转键,三个更好",
|
||||
"学习能力很重要,无论是玩游戏还是学知识",
|
||||
"要盯着bug不放",
|
||||
"音乐风格是什么,能吃吗",
|
||||
"音乐使用beepbox制作",
|
||||
"音游方块是一家(暴论",
|
||||
"隐形真的不难,只要花几个小时耐心练下去",
|
||||
"游戏确实可以是艺术,而不一定是纯“玩具”",
|
||||
"游戏使用LÖVE引擎制作",
|
||||
"游戏使用un……LÖVE引擎制作",
|
||||
"游戏也是一种艺术形式",
|
||||
"游戏中左下角三个信息分别是分数/时间/极简连击数",
|
||||
"游戏字体里藏了一套Z块表情包",
|
||||
"有建议的话可以把信息反馈给作者~",
|
||||
"有建议的话可以反馈给作者~",
|
||||
"有两个模式是以东方Project里的角色为主题的",
|
||||
"有一些隐藏模式不能从地图进入,到处找找看吧",
|
||||
"有疑问?先看设置有没有你想要的",
|
||||
"右下角那个问号按钮是游戏说明书 (开了简洁模式当我没说)",
|
||||
"长期睡眠不足会引起不可逆的脑损伤(变傻)",
|
||||
"这不是休闲游戏……别怪关卡要求太高,多练吧",
|
||||
"这个菜单可以用纯键盘控制",
|
||||
"这里的极简判定不松不严,放心软降",
|
||||
"震惊,我只是一条凑数tip吗",
|
||||
"众所周知俄罗斯方块是经典编程练手游戏(?",
|
||||
"众所周知mac不能拿来玩游戏",
|
||||
"注意到方块“旋转”的时候到底发生了些什么吗?",
|
||||
"自定义场地可以画图实现逐页演示",
|
||||
"自己不确定的问题尽量不要教别人哦",
|
||||
"总共有400多条tip哦",
|
||||
"作业都没做完别玩手机",
|
||||
"作者40行sub26了",
|
||||
"作者电脑上装了11个方块",
|
||||
@@ -1052,8 +908,6 @@ return{
|
||||
"B2B2B???",
|
||||
"B2B2B2B并不存在……",
|
||||
"B2B2B2B存在吗?",
|
||||
"BT炮=beta炮=TCM-β炮",
|
||||
"c4w可不是在所有游戏里都很强哦",
|
||||
"c4w人竟是我自己",
|
||||
"c4w人竟在我身边",
|
||||
"cos(α+β)=CαCβ-SβSα",
|
||||
@@ -1063,18 +917,6 @@ return{
|
||||
"e^(πi)=-1",
|
||||
"e^(πi/2)=i",
|
||||
"e^(πi/4)=(1+i)/√2",
|
||||
"Farter评[01]:“成天被夸赞‘好玩’的”",
|
||||
"Farter评[02]:“可以形成方块圈子小中心话题,同作者一起衍生一些概念与梗的”",
|
||||
"Farter评[03]:“论方块的软工意义(就算这么小个范围内,各种取舍蒙混翻车现象都总会以很易懂的方式出现(”",
|
||||
"Farter评[04]:“民间微创新”",
|
||||
"Farter评[05]:“民间音lè与图案”",
|
||||
"Farter评[06]:“民间游戏设计”",
|
||||
"Farter评[07]:“是方块爱好者研究平台”",
|
||||
"Farter评[08]:“是方块萌新入坑接收器”",
|
||||
"Farter评[09]:“是居家旅行装逼必备”",
|
||||
"Farter评[10]:“是民间UI动效艺术作品”",
|
||||
"Farter评[11]:“是一滩散乱的代码组成的蜜汁结构”",
|
||||
"Farter评[12]:“它是现在的techmino已发布版本”",
|
||||
"fin neo iso 是满足tspin条件的特殊t2的名字",
|
||||
"git commit",
|
||||
"git push -f",
|
||||
@@ -1093,23 +935,17 @@ return{
|
||||
"sin²α-sin²β=S(α+β)S(α-β)",
|
||||
"sin2α=2SαCα",
|
||||
"sofunhowtoget",
|
||||
"Staff名单里飘过的是赞助榜单,喜欢本游戏的话可以给我们打赞助支持开发哦~",
|
||||
"STSD必死",
|
||||
"sudo rm -rf /*",
|
||||
"Techmino /'tɛkmɪnoʊ/ n.铁壳米诺(游戏名)",
|
||||
"Techmino = Technique + Tetromino",
|
||||
"Techmino 好玩!",
|
||||
"Techmino 濂界帺锛",
|
||||
"Techmino 英['tɛkmɪnəʊ] 美/'tekmɪnoʊ/ n.铁壳米诺(游戏名)",
|
||||
"Techmino console了解一下",
|
||||
"Techmino: App意外退出。",
|
||||
"Techmino.exe 已停止工作",
|
||||
"Techmino安卓下载",
|
||||
"Techmino不是工业产品也不是练手程序,是游戏作品(至少目前是,嗯……)",
|
||||
"Techmino好玩!",
|
||||
"Techmino没有氪金没有逼肝,良不良心~",
|
||||
"Techmino生日不太清楚,那就定在2019.6.26吧",
|
||||
"Techmino也有节日主题了哦",
|
||||
"Techmino有一个Nspire-CX版本!",
|
||||
"Techmino在哪里下载",
|
||||
"Techmino怎么念啊",
|
||||
"techminohaowan",
|
||||
@@ -1122,22 +958,182 @@ return{
|
||||
"Z酱是谁",
|
||||
"Z酱只是个写代码的,懂什么方块",
|
||||
"Z块等身抱枕来一个(x",
|
||||
"豆知识[001]总共有400多条tip哦",
|
||||
"豆知识[002]背景影响游玩?可以去设置关闭",
|
||||
"豆知识[003]方块默认出现的方向都是重心在下哦(如果你没乱动设置",
|
||||
"豆知识[004]各种画面细节选项都可以在设置里找到哦",
|
||||
"豆知识[005]觉得移动速度太慢或太快,手感不好?快去设置调整DAS/ARR",
|
||||
"豆知识[006]无聊翻翻设置是好习惯",
|
||||
"豆知识[007]有疑问?先看设置有没有你想要的",
|
||||
"豆知识[008]2021年是Techmino联机元年",
|
||||
"豆知识[009]20G本质是一个全新的游戏规则!",
|
||||
"豆知识[010]29种块里28个都能spin你敢信?",
|
||||
"豆知识[011]7宽三SZ架空捐了解一下",
|
||||
"豆知识[012]把手机调到特殊的日期也许会发生什么",
|
||||
"豆知识[013]本游戏不叫Teachmino",
|
||||
"豆知识[014]本游戏的一部分内容是国际合作的!",
|
||||
"豆知识[015]本游戏的中文名叫《方块研究所》",
|
||||
"豆知识[016]本游戏的B2B是气槽机制,和传统的开关机制不一样哦",
|
||||
"豆知识[017]本游戏内置了几个休(yìng)闲(hé)小游戏哦~",
|
||||
"豆知识[018]本游戏在设计的时候受到了大量其他块游甚至一些音游的启发",
|
||||
"豆知识[019]必须要软降才能到达的位置都会判定为极简操作",
|
||||
"豆知识[020]别看攻击效率不高,其实消四还是很强的",
|
||||
"豆知识[021]别问游戏名字怎么取的,问就是随便想的",
|
||||
"豆知识[022]不同人打40行最合适的方式不一样,s1w/63/散消/s2w……",
|
||||
"豆知识[023]不同游戏(甚至不同模式)中不同战术的强度都不一样,并不能简单的按顺序排名",
|
||||
"豆知识[024]除了雨宫太阳还有很多高手玩家,尤其是不在PPT里,甚至强出不少",
|
||||
"豆知识[025]触发游戏报错后日志文件会越来越大(不过顶多几百K)",
|
||||
"豆知识[026]打好块跟学习一样没有捷径,多练!",
|
||||
"豆知识[027]打网络对战前请确认自己有一定的水平,不然会毫无游戏体验的",
|
||||
"豆知识[028]大量使用开局定式的数据是不准的",
|
||||
"豆知识[029]大陆的方块社区起步晚,所以世界级高手很少……下一个会是你吗?",
|
||||
"豆知识[030]低帧率会降低游戏体验",
|
||||
"豆知识[031]电脑游玩自带按键显示~",
|
||||
"豆知识[032]对战模式跟单机模式有本质区别,timing等能力需要专门练习",
|
||||
"豆知识[033]发现Bug可以去GitHub上开个issue反馈",
|
||||
"豆知识[034]分数一般只是好看的没有实际用途,建议只关心关卡要求",
|
||||
"豆知识[035]服务器随时爆炸",
|
||||
"豆知识[036]感觉自己速度到上限了?试着把das调低一点",
|
||||
"豆知识[037]刚接触方块的话多玩玩就行,40行两分钟以外没啥好针对性练习的",
|
||||
"豆知识[038]刚开始练全隐形可以尽量堆平,留一列消四",
|
||||
"豆知识[039]更小的DAS和ARR拥有更高的操作上限(能控制得了的话)",
|
||||
"豆知识[040]更新内容在游戏里和群公告都有写!",
|
||||
"豆知识[041]攻击生效速度(从快到慢):消二/三,消四,spin,高连击",
|
||||
"豆知识[042]好像可以把手机倒过来打场地旋转180……那还是不建议违反规则",
|
||||
"豆知识[043]基础堆叠和挖掘能力非常重要,忽视这两项的人都后悔了(确信)",
|
||||
"豆知识[044]即使被顶到天上了也不要放弃,每一行垃圾都有可能成为你的武器",
|
||||
"豆知识[045]极简率决定了你大概的速度上限和相等手速下的放块速度",
|
||||
"豆知识[046]键位是可以自定义的",
|
||||
"豆知识[047]键位有可能决定了上限,可能的话还是尽量考虑一下自己的键位是否利于超高速操作",
|
||||
"豆知识[048]尽早学双旋吧,单旋没前途的",
|
||||
"豆知识[049]经典块的水也很深,不要小看经典块玩家",
|
||||
"豆知识[050]经典块跟现代块是两个游戏,一个厉害不代表另一个也厉害,得从头练起",
|
||||
"豆知识[051]经典块和渣方块不是一回事",
|
||||
"豆知识[052]开启省流模式后将不会加载用户头像(应该能省不少流吧)",
|
||||
"豆知识[053]看主页机器人玩可能比较费电",
|
||||
"豆知识[054]连续pc有大量知识要背,不过背出来后随手10连pc不是问题",
|
||||
"豆知识[055]每个块的出现方向可以自定义",
|
||||
"豆知识[056]每个块的颜色可以自定义",
|
||||
"豆知识[057]每个虚拟按键都可以隐藏/显示,尺寸也可调",
|
||||
"豆知识[058]能导致吃键的问题有很多,建议说清楚具体发生了什么并且录视频说明",
|
||||
"豆知识[059]你可以从统计页面打开游戏存档目录",
|
||||
"豆知识[060]你说彩蛋?嗯…算是有,可以找找",
|
||||
"豆知识[061]其实很多时候“吃键”是玩家对游戏机制不了解或者自己的操作问题导致的",
|
||||
"豆知识[062]其实S和Z有四个方向(状态),虽然看起来只有两个",
|
||||
"豆知识[063]去玩别的方块的时候记得没有Ospin!",
|
||||
"豆知识[064]全程不使用任何旋转键完成40行模式是有可能的",
|
||||
"豆知识[065]三连块只有2种",
|
||||
"豆知识[066]四连块总共7种",
|
||||
"豆知识[067]五连块总共18种",
|
||||
"豆知识[068]六连块总共有……?那不重要,不会做的(大概",
|
||||
"豆知识[069]上面这个不是录像,是机器人实时在玩",
|
||||
"豆知识[070]使用固定堆叠方法达成20TSD难度很低",
|
||||
"豆知识[071]手机玩也可以外接键盘哦(iOS除外)",
|
||||
"豆知识[072]首页的机器人可能会不小心把自己给玩死",
|
||||
"豆知识[073]术语不认识?去右边那个词典里查查吧",
|
||||
"豆知识[074]水平是随着时间一点点提升的,不是几天几星期就能玩好的哦",
|
||||
"豆知识[075]虽然极简连击和极简率计算看着很怪,但以后你会发现还挺科学!",
|
||||
"豆知识[076]提前旋转等功能可以用来救命",
|
||||
"豆知识[077]停留在模式地图界面很费电",
|
||||
"豆知识[078]为了保护玩家们的健康,本游戏有一个临时的简易防沉迷系统!(不过估计你也触发不了/笑)",
|
||||
"豆知识[079]为什么关卡那么少!因为前一模式成绩连B都没达到,再加把劲吧~",
|
||||
"豆知识[080]为数不多走向世界的国产方块游戏",
|
||||
"豆知识[081]向其他人询问练习方法最好提供自己的详细水平,最好录些视频,不然很难给出合适的建议",
|
||||
"豆知识[082]小心腱鞘炎",
|
||||
"豆知识[083]玄学研究显示,更换方块皮肤也许能帮助提升成绩",
|
||||
"豆知识[084]旋转不是变形!请尽量灵活利用顺逆时针两个旋转键",
|
||||
"豆知识[085]学会使用两个旋转键,三个更好",
|
||||
"豆知识[086]隐形真的不难,只要耐心花几个小时练下去",
|
||||
"豆知识[087]游戏中左下角三个信息分别是分数/时间/极简连击数",
|
||||
"豆知识[088]游戏字体里藏了一套Z块表情包",
|
||||
"豆知识[089]有几个隐藏模式不能从地图进入,到处找找看吧",
|
||||
"豆知识[090]右下角那个问号按钮是游戏说明书 (开了简洁模式当我没说)",
|
||||
"豆知识[091]在其他(方块)游戏相关场合提及本游戏是很不礼貌的",
|
||||
"豆知识[092]这里的极简判定不松不严,放心软降",
|
||||
"豆知识[093]注意到方块“旋转”的时候到底发生了些什么吗?",
|
||||
"豆知识[094]自定义场地可以画图实现逐页演示",
|
||||
"豆知识[095]自己不确定的问题尽量不要教别人哦",
|
||||
"豆知识[096]BT炮=beta炮=TCM-β炮",
|
||||
"豆知识[097]c4w可不是在所有游戏里都很强哦",
|
||||
"豆知识[098]Staff名单里飘过的是赞助榜单,喜欢本游戏的话可以给我们打赞助支持开发哦~",
|
||||
"豆知识[099]Techmino不是工业产品也不是练手程序,是游戏作品(至少目前是,嗯……)",
|
||||
"豆知识[100]Techmino生日不太清楚,那就定在2019.6.26吧",
|
||||
"豆知识[101]Techmino有一个简单的节日主题系统",
|
||||
"豆知识[102]Techmino有一个Nspire-CX原型版本",
|
||||
"健康小贴士[01]玩游戏多眨眼,不然会干眼病",
|
||||
"健康小贴士[02]少玩点游戏,多注意眨眼和休息",
|
||||
"健康小贴士[03]戴耳机(尤其是半入耳式)时音量千万别拉满,不然真的会影响听力(虽然很慢)",
|
||||
"健康小贴士[04]不要熬夜,真的会猝死",
|
||||
"健康小贴士[05]长期睡眠不足会引起不可逆的脑损伤(变傻)",
|
||||
"Z思辨[01]《教育的力量》",
|
||||
"Z思辨[02]《学习的意义》",
|
||||
"Z思辨[03]《练习的力量》",
|
||||
"Z思辨[04]《知识的力量》",
|
||||
"Z思辨[05]《梦想的价值》",
|
||||
"Z思辨[06]《天赋的力量》",
|
||||
"Z思辨[07]《游戏的意义》",
|
||||
"Farter评[01]:“成天被夸赞‘好玩’的”",
|
||||
"Farter评[02]:“可以形成方块圈子小中心话题,同作者一起衍生一些概念与梗的”",
|
||||
"Farter评[03]:“论方块的软工意义(就算这么小个范围内,各种取舍蒙混翻车现象都总会以很易懂的方式出现(”",
|
||||
"Farter评[04]:“民间微创新”",
|
||||
"Farter评[05]:“民间音lè与图案”",
|
||||
"Farter评[06]:“民间游戏设计”",
|
||||
"Farter评[07]:“是方块爱好者研究平台”",
|
||||
"Farter评[08]:“是方块萌新入坑接收器”",
|
||||
"Farter评[09]:“是居家旅行装逼必备”",
|
||||
"Farter评[10]:“是民间UI动效艺术作品”",
|
||||
"Farter评[11]:“是一滩散乱的代码组成的蜜汁结构”",
|
||||
"Farter评[12]:“它是现在的techmino已发布版本”",
|
||||
"时间碎片[000] 2021/11/21加入这个版块",
|
||||
"时间碎片[001] V0.0.091726加入TRS旋转系统",
|
||||
"时间碎片[002] V0.7.9加入O-spin",
|
||||
"时间碎片[003] V0.7.19加入语音系统",
|
||||
"时间碎片[004] V0.7.22加入平滑下落",
|
||||
"时间碎片[005] V0.8.5加入模式地图",
|
||||
"时间碎片[006] V0.8.19加入五连块",
|
||||
"时间碎片[007] V0.9.0加入自定义序列和模式",
|
||||
"时间碎片[008] V0.10.0加入录像回放",
|
||||
"时间碎片[009] V0.11.1加入小z词典",
|
||||
"时间碎片[010] V0.12.2加入mod系统",
|
||||
"时间碎片[011] V0.13.0联网对战测试",
|
||||
"时间碎片[012] V0.13.2加入任意场地高度",
|
||||
"时间碎片[013] V0.13.3加入控制台",
|
||||
"时间碎片[014] V0.14.4加入第一首非Beepbox制作的BGM",
|
||||
"时间碎片[015] V0.14.5加入第一首社区玩家自制BGM",
|
||||
"时间碎片[016] V0.15.5加入录像回放菜单",
|
||||
"时间碎片[017] V0.16.0加入BIRS",
|
||||
"时间碎片[018] V0.16.2加入打击垫样式的音效室",
|
||||
"时间碎片[019] V0.17.0加入手柄的摇杆和扳机支持",
|
||||
"Z哲[01]方块教会我们,合群了就会消失,……",
|
||||
"Z哲[02]假如生活欺骗了你,不要悲伤,不要心急,还有块陪着你",
|
||||
"Z哲[03]……,合群了就会消失,不合群世界毁灭(指game over",
|
||||
"Z哲[04]……,合群了就会消失,但消失不代表没有意义",
|
||||
"Z哲[05]没有量化就没有对比,……",
|
||||
"Z哲[06]……,没有对比就没有伤害",
|
||||
"Z哲[07]方块不是你生活的全部,适当走出去看看",
|
||||
"Z哲[08]能玩到Techmino不是你有优越感的理由",
|
||||
"Z哲[09]卖弱和谦虚不是一回事,发言前三思呀",
|
||||
"Z哲[10]让他三尺又何妨",
|
||||
"Z哲[11]退一步海阔天空",
|
||||
"Z哲[12]学习能力很重要,只要你以变强为目的,无论玩游戏学知识都可以很难",
|
||||
"Z哲[13]游戏确实可以是一种艺术形式,而不一定是纯“玩具”",
|
||||
"Z哲[14]不希望激烈的零和竞争充斥整个游戏",
|
||||
{C.C,"<PURE ",C.P,"MEMORY>"},
|
||||
{C.C,"15puzzle好玩!"},
|
||||
{C.C,"东方Project好玩!"},
|
||||
{C.C,"魔方好玩!"},
|
||||
{C.C,"噗哟噗哟好玩!"},
|
||||
{C.C,"扫雷好玩!"},
|
||||
{C.C,"Ballance好玩!"},
|
||||
{C.C,"Celeste好玩!"},
|
||||
{C.C,"Minecraft好玩!"},
|
||||
{C.C,"Orzmic好玩!"},
|
||||
{C.C,"Osu! 好玩!"},
|
||||
{C.C,"Phigros好玩!"},
|
||||
{C.C,"Terraria好玩!"},
|
||||
{C.C,"VVVVVV好玩!"},
|
||||
{C.C,"World of goo好玩!"},
|
||||
{C.C,"Zuma好玩!"},
|
||||
{C.C,"z推[01]东方Project好玩!"},
|
||||
{C.C,"z推[02]Minecraft好玩!"},
|
||||
{C.C,"z推[03]Osu!好玩!"},
|
||||
{C.C,"z推[04]Terraria好玩!"},
|
||||
{C.C,"z推[05]Celeste好玩!"},
|
||||
{C.C,"z推[06]World of goo好玩!"},
|
||||
{C.C,"z推[07]Orzmic好玩!"},
|
||||
{C.C,"z推[08]噗哟噗哟好玩!"},
|
||||
{C.C,"z推[09]Phigros好玩!"},
|
||||
{C.C,"z推[10]VVVVVV好玩!"},
|
||||
{C.C,"z推[11]Ballance好玩!"},
|
||||
{C.C,"z推[12]Zuma好玩!"},
|
||||
{C.C,"z推[13]魔方好玩!"},
|
||||
{C.C,"z推[14]15puzzle好玩!"},
|
||||
{C.C,"z推[15]扫雷好玩!"},
|
||||
{C.H,"暂定段位:9"},
|
||||
{C.H,"REGRET!!"},
|
||||
{C.lC,"Xspin",C.Z,"是啥"},
|
||||
|
||||
@@ -15,12 +15,12 @@ local function check_rise(P)
|
||||
if L==0 then
|
||||
P:_showText(text.awesome,0,-120,80,'beat',.6)
|
||||
SFX.play('pc')
|
||||
BG.send(26)
|
||||
if BG.cur=='wing'then BG.send(26)end
|
||||
for _=1,8 do
|
||||
P:garbageRise(13,1,generateLine(P.holeRND:random(10)))
|
||||
end
|
||||
else
|
||||
BG.send(#P.clearedRow)
|
||||
if BG.cur=='wing'then BG.send(#P.clearedRow)end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
@@ -504,19 +504,27 @@ local playerActions={
|
||||
self.keyPressing[keyID]=true
|
||||
playerActions[keyID](self)
|
||||
self.stat.key=self.stat.key+1
|
||||
if self.id==1 and GAME.recording then
|
||||
end
|
||||
if self.id==1 then
|
||||
if GAME.recording then
|
||||
local L=GAME.rep
|
||||
ins(L,self.frameRun)
|
||||
ins(L,keyID)
|
||||
elseif self.streamProgress then
|
||||
VK.press(keyID)
|
||||
end
|
||||
end
|
||||
end
|
||||
function Player:releaseKey(keyID)
|
||||
self.keyPressing[keyID]=false
|
||||
if self.id==1 and GAME.recording then
|
||||
local L=GAME.rep
|
||||
ins(L,self.frameRun)
|
||||
ins(L,32+keyID)
|
||||
if self.id==1 then
|
||||
if GAME.recording then
|
||||
local L=GAME.rep
|
||||
ins(L,self.frameRun)
|
||||
ins(L,32+keyID)
|
||||
elseif self.streamProgress then
|
||||
VK.release(keyID)
|
||||
end
|
||||
end
|
||||
end
|
||||
function Player:newTask(code,...)
|
||||
@@ -1331,8 +1339,8 @@ function Player:hold_swap(ifpre)
|
||||
|
||||
self.stat.hold=self.stat.hold+1
|
||||
end
|
||||
function Player:hold(ifpre)
|
||||
if self.holdTime>0 and(self.cur or ifpre)then
|
||||
function Player:hold(ifpre,force)
|
||||
if self.holdTime>0 and(self.cur or ifpre or force)then
|
||||
if self.gameEnv.holdMode=='hold'then
|
||||
self:hold_norm(ifpre)
|
||||
elseif self.gameEnv.holdMode=='swap'then
|
||||
@@ -1398,7 +1406,7 @@ function Player:popNext(ifhold)--Pop nextQueue to hand
|
||||
pressing[6]=false
|
||||
end
|
||||
elseif self.holdQueue[1]then--Force using hold
|
||||
self:hold()
|
||||
self:hold(true,true)
|
||||
else--Next queue is empty, force lose
|
||||
self:lose(true)
|
||||
end
|
||||
|
||||
@@ -59,7 +59,7 @@ scene.widgetList={
|
||||
WIDGET.newButton{name='staff', x=1140,y=380,w=220,h=80,font=35,code=goScene'staff'},
|
||||
WIDGET.newButton{name='his', x=1140,y=480,w=220,h=80,font=35,code=goScene'history'},
|
||||
WIDGET.newButton{name='legals', x=1140,y=580,w=220,h=80,font=35,code=goScene'legals'},
|
||||
WIDGET.newButton{name='back', x=640, y=600,w=170,h=80,font=60,fText=CHAR.icon.back,code=backScene},
|
||||
WIDGET.newButton{name='back', x=640, y=600,w=170,h=80,font=60,sound='back',fText=CHAR.icon.back,code=backScene},
|
||||
}
|
||||
|
||||
return scene
|
||||
|
||||
@@ -8,7 +8,7 @@ end
|
||||
|
||||
scene.widgetList={
|
||||
WIDGET.newText{name='title',x=80,y=50,font=70,align='L'},
|
||||
WIDGET.newButton{name='back',x=1140,y=640,w=170,h=80,font=60,fText=CHAR.icon.back,code=backScene},
|
||||
WIDGET.newButton{name='back',x=1140,y=640,w=170,h=80,font=60,sound='back',fText=CHAR.icon.back,code=backScene},
|
||||
}
|
||||
|
||||
return scene
|
||||
|
||||
@@ -315,7 +315,7 @@ scene.widgetList={
|
||||
WIDGET.newSwitch{name='slide', x=240, y=420,lim=200,font=40,disp=function()return slide end, code=pressKey'e',hideF=ifGaming},
|
||||
WIDGET.newSwitch{name='pathVis',x=240, y=510,lim=200,font=40,disp=function()return pathVis end,code=pressKey'r',hideF=function()return state==1 or not slide end},
|
||||
WIDGET.newSwitch{name='revKB', x=240, y=600,lim=200,font=40,disp=function()return revKB end, code=pressKey't',hideF=ifGaming},
|
||||
WIDGET.newButton{name='back', x=1140,y=640,w=170,h=80,font=60,fText=CHAR.icon.back,code=backScene},
|
||||
WIDGET.newButton{name='back', x=1140,y=640,w=170,h=80,font=60,sound='back',fText=CHAR.icon.back,code=backScene},
|
||||
}
|
||||
|
||||
return scene
|
||||
|
||||
@@ -493,7 +493,7 @@ scene.widgetList={
|
||||
WIDGET.newKey{name='record2', x=1100,y=450,w=220,h=50,fText="", color='H',code=pressKey'2', hideF=function()return state==2 end},
|
||||
WIDGET.newKey{name='replay1', x=1245,y=390,w=50,fText="!", color='G',code=pressKey'c1', hideF=function()return state==2 or #repeater.seq[1]==0 end},
|
||||
WIDGET.newKey{name='replay2', x=1245,y=450,w=50,fText="!", color='G',code=pressKey'c2', hideF=function()return state==2 or #repeater.seq[2]==0 end},
|
||||
WIDGET.newButton{name='back', x=1140,y=640,w=170,h=80,font=60,fText=CHAR.icon.back,code=backScene},
|
||||
WIDGET.newButton{name='back', x=1140,y=640,w=170,h=80,font=60,sound='back',fText=CHAR.icon.back,code=backScene},
|
||||
}
|
||||
|
||||
return scene
|
||||
|
||||
@@ -119,7 +119,7 @@ scene.widgetList={
|
||||
WIDGET.newSelector{name='level', x=640,y=640,w=200,list={'A_Z','Z_A','Tech1','Tech2','KeyTest1','KeyTest2','Hello','Roll1','Roll2','Roll3','ZZZ','ZXZX','ZMZM','Stair','Stair2','Stair3','BPW'},disp=function()return levelName end,code=function(i)levelName=i;targetString=levels[i]end,hideF=function()return state>0 end},
|
||||
WIDGET.newButton{name='reset', x=160,y=100,w=180,h=100,color='lG',font=50,fText=CHAR.icon.retry_spin,code=pressKey'space'},
|
||||
WIDGET.newButton{name='keyboard',x=160,y=210,w=180,h=100,code=function()love.keyboard.setTextInput(true,0,select(2,SCR.xOy:transformPoint(0,500)),1,1)end,hide=not MOBILE},
|
||||
WIDGET.newButton{name='back', x=1140,y=640,w=170,h=80,font=60,fText=CHAR.icon.back,code=backScene},
|
||||
WIDGET.newButton{name='back', x=1140,y=640,w=170,h=80,font=60,sound='back',fText=CHAR.icon.back,code=backScene},
|
||||
}
|
||||
|
||||
return scene
|
||||
|
||||
@@ -232,7 +232,7 @@ end
|
||||
|
||||
scene.widgetList={
|
||||
WIDGET.newButton{name='reset',x=1140,y=540,w=170,h=80,font=50,fText=CHAR.icon.retry_spin,color='lG',code=restart},
|
||||
WIDGET.newButton{name='back',x=1140,y=640,w=170,h=80,font=60,fText=CHAR.icon.back,code=backScene},
|
||||
WIDGET.newButton{name='back',x=1140,y=640,w=170,h=80,font=60,sound='back',fText=CHAR.icon.back,code=backScene},
|
||||
}
|
||||
|
||||
return scene
|
||||
|
||||
@@ -231,7 +231,7 @@ scene.widgetList={
|
||||
WIDGET.newKey{name='7',x=540,y=320,w=90,font=60,fText="7",code=pressKey'7'},
|
||||
WIDGET.newKey{name='8',x=640,y=320,w=90,font=60,fText="8",code=pressKey'8'},
|
||||
WIDGET.newKey{name='9',x=740,y=320,w=90,font=60,fText="9",code=pressKey'9'},
|
||||
WIDGET.newButton{name='back',x=1200,y=660,w=110,h=60,font=60,fText=CHAR.icon.back,code=backScene},
|
||||
WIDGET.newButton{name='back',x=1200,y=660,w=110,h=60,font=45,sound='back',fText=CHAR.icon.back,code=backScene},
|
||||
}
|
||||
|
||||
return scene
|
||||
|
||||
@@ -165,7 +165,7 @@ scene.widgetList={
|
||||
WIDGET.newKey{name='/',x=445,y=600,w=90,sound=false,fText="/",color='lB',font=50,code=pressKey'/'},
|
||||
WIDGET.newKey{name='<',x=545,y=300,w=90,sound=false,fText=CHAR.key.backspace,color='lR',font=50,code=pressKey'backspace'},
|
||||
WIDGET.newKey{name='=',x=545,y=400,w=90,sound=false,fText="=",color='lY',font=50,code=pressKey'return'},
|
||||
WIDGET.newKey{name='back',x=1135,y=640,w=170,h=80,font=60,fText=CHAR.icon.back,code=backScene},
|
||||
WIDGET.newKey{name='back',x=1135,y=640,w=170,h=80,font=60,sound='back',fText=CHAR.icon.back,code=backScene},
|
||||
}
|
||||
|
||||
return scene
|
||||
|
||||
@@ -127,7 +127,7 @@ function scene.draw()
|
||||
end
|
||||
|
||||
scene.widgetList={
|
||||
WIDGET.newButton{name='back',x=1140,y=640,w=170,h=80,font=60,fText=CHAR.icon.back,code=backScene},
|
||||
WIDGET.newButton{name='back',x=1140,y=640,w=170,h=80,font=60,sound='back',fText=CHAR.icon.back,code=backScene},
|
||||
}
|
||||
|
||||
return scene
|
||||
|
||||
@@ -318,7 +318,7 @@ function scene.draw()
|
||||
end
|
||||
|
||||
scene.widgetList={
|
||||
WIDGET.newKey{name='back',x=1140,y=80,w=170,h=80,font=60,fText=CHAR.icon.back,code=backScene},
|
||||
WIDGET.newKey{name='back',x=1140,y=80,w=170,h=80,font=60,sound='back',fText=CHAR.icon.back,code=backScene},
|
||||
}
|
||||
|
||||
return scene
|
||||
|
||||
@@ -236,7 +236,7 @@ function scene.draw()
|
||||
end
|
||||
|
||||
scene.widgetList={
|
||||
WIDGET.newButton{name='back',x=1140,y=60,w=170,h=80,font=60,fText=CHAR.icon.back,code=backScene},
|
||||
WIDGET.newButton{name='back',x=1140,y=60,w=170,h=80,font=60,sound='back',fText=CHAR.icon.back,code=backScene},
|
||||
}
|
||||
|
||||
return scene
|
||||
|
||||
@@ -383,7 +383,7 @@ scene.widgetList={
|
||||
WIDGET.newButton{name='reset',x=155,y=100,w=180,h=100,color='lG',font=50,fText=CHAR.icon.retry_spin,code=pressKey'r'},
|
||||
modeSelector,bgmSelector,colorSelector,
|
||||
arcadeSwitch,
|
||||
WIDGET.newButton{name='back', x=1140,y=640,w=170,h=80,font=60,fText=CHAR.icon.back,code=backScene},
|
||||
WIDGET.newButton{name='back', x=1140,y=640,w=170,h=80,font=60,sound='back',fText=CHAR.icon.back,code=backScene},
|
||||
}
|
||||
|
||||
return scene
|
||||
|
||||
@@ -399,7 +399,7 @@ end
|
||||
scene.widgetList={
|
||||
WIDGET.newButton{name='reset',x=80,y=60,w=110,h=60,color='lG',fText=CHAR.icon.retry_spin,code=pressKey'r',hideF=function()return state==0 end},
|
||||
WIDGET.newSwitch{name='invis',x=100,y=140,lim=80,disp=function()return invis end,code=pressKey'q',hideF=function()return state==1 end},
|
||||
WIDGET.newButton{name='back',x=1200,y=660,w=110,font=50,fText=CHAR.icon.back,code=pressKey'escape'},
|
||||
WIDGET.newButton{name='back',x=1200,y=660,w=110,font=45,sound='back',fText=CHAR.icon.back,code=pressKey'escape'},
|
||||
}
|
||||
|
||||
return scene
|
||||
|
||||
@@ -120,7 +120,7 @@ scene.widgetList={
|
||||
WIDGET.newKey{name='7',x=540,y=320,w=90,font=60,fText="7",code=pressKey'7'},
|
||||
WIDGET.newKey{name='8',x=640,y=320,w=90,font=60,fText="8",code=pressKey'8'},
|
||||
WIDGET.newKey{name='9',x=740,y=320,w=90,font=60,fText="9",code=pressKey'9'},
|
||||
WIDGET.newButton{name='back',x=1200,y=660,w=110,h=60,font=60,fText=CHAR.icon.back,code=backScene},
|
||||
WIDGET.newButton{name='back',x=1200,y=660,w=110,h=60,font=45,sound='back',fText=CHAR.icon.back,code=backScene},
|
||||
}
|
||||
|
||||
return scene
|
||||
|
||||
@@ -48,6 +48,6 @@ function scene.draw()
|
||||
end
|
||||
|
||||
scene.widgetList={
|
||||
WIDGET.newButton{name="back", x=1140,y=640,w=170,h=80,font=60,fText=CHAR.icon.back,code=backScene},
|
||||
WIDGET.newButton{name='back', x=1140,y=640,w=170,h=80,font=60,sound='back',fText=CHAR.icon.back,code=backScene},
|
||||
}
|
||||
return scene
|
||||
|
||||
@@ -165,7 +165,7 @@ function scene.draw()
|
||||
end
|
||||
|
||||
scene.widgetList={
|
||||
WIDGET.newKey{name='back',x=1140,y=60,w=170,h=80,color='D',font=60,fText=CHAR.icon.back,code=backScene},
|
||||
WIDGET.newKey{name='back',x=1140,y=60,w=170,h=80,color='D',font=60,sound='back',fText=CHAR.icon.back,code=backScene},
|
||||
}
|
||||
|
||||
return scene
|
||||
|
||||
@@ -177,7 +177,7 @@ end
|
||||
|
||||
scene.widgetList={
|
||||
WIDGET.newKey{name='reset',x=640,y=45,w=150,h=50,font=35,fText=CHAR.icon.retry_spin,code=pressKey'r'},
|
||||
WIDGET.newKey{name='back',x=640,y=675,w=150,h=50,font=40,fText=CHAR.icon.back,code=backScene},
|
||||
WIDGET.newKey{name='back',x=640,y=675,w=150,h=50,font=40,sound='back',fText=CHAR.icon.back,code=backScene},
|
||||
}
|
||||
|
||||
return scene
|
||||
|
||||
@@ -131,7 +131,7 @@ function scene.draw()
|
||||
end
|
||||
|
||||
scene.widgetList={
|
||||
WIDGET.newKey{name='back',x=640,y=675,w=150,h=50,font=40,fText=CHAR.icon.back,code=backScene},
|
||||
WIDGET.newKey{name='back',x=640,y=675,w=150,h=50,font=40,sound='back',fText=CHAR.icon.back,code=backScene},
|
||||
}
|
||||
|
||||
return scene
|
||||
|
||||
@@ -175,7 +175,7 @@ scene.widgetList={
|
||||
WIDGET.newSwitch{name='invis', x=240,y=330,lim=200,font=40,disp=function()return invis end, code=pressKey'q',hideF=function()return state==1 end},
|
||||
WIDGET.newSwitch{name='disappear',x=240,y=420,lim=200,font=40,disp=function()return disappear end,code=pressKey'w',hideF=function()return state==1 end},
|
||||
WIDGET.newSwitch{name='tapFX', x=240,y=510,lim=200,font=40,disp=function()return tapFX end, code=pressKey'e',hideF=function()return state==1 end},
|
||||
WIDGET.newButton{name='back', x=1140,y=640,w=170,h=80,font=60,fText=CHAR.icon.back,code=backScene},
|
||||
WIDGET.newButton{name='back', x=1140,y=640,w=170,h=80,font=60,sound='back',fText=CHAR.icon.back,code=backScene},
|
||||
}
|
||||
|
||||
return scene
|
||||
|
||||
@@ -43,6 +43,6 @@ end
|
||||
|
||||
scene.widgetList={
|
||||
WIDGET.newButton{name="spin", x=1140,y=360,w=120,font=60,fText=CHAR.icon.retry_spin,code=pressKey'space'},
|
||||
WIDGET.newButton{name="back", x=1140,y=640,w=170,h=80,font=60,fText=CHAR.icon.back,code=backScene},
|
||||
WIDGET.newButton{name='back', x=1140,y=640,w=170,h=80,font=60,sound='back',fText=CHAR.icon.back,code=backScene},
|
||||
}
|
||||
return scene
|
||||
|
||||
@@ -26,7 +26,7 @@ function scene.keyDown(key,isRep)
|
||||
else
|
||||
ins(keyTime,1,TIME())
|
||||
keyTime[41]=nil
|
||||
SFX.play('click',.3)
|
||||
SFX.play('lock')
|
||||
end
|
||||
end
|
||||
end
|
||||
@@ -71,8 +71,8 @@ function scene.draw()
|
||||
end
|
||||
|
||||
scene.widgetList={
|
||||
WIDGET.newKey{name='tap',x=640,y=540,w=626,h=260,fText="TAP",color='Z',font=100,code=function(i)love.keypressed('b'..i)end},
|
||||
WIDGET.newButton{name='back',x=1140,y=640,w=170,h=80,font=60,fText=CHAR.icon.back,code=backScene},
|
||||
WIDGET.newKey{name='tap',x=640,y=540,w=626,h=260,sound='touch',fText="TAP",color='Z',font=100,code=function(i)love.keypressed('b'..i)end},
|
||||
WIDGET.newButton{name='back',x=1140,y=640,w=170,h=80,font=60,sound='back',fText=CHAR.icon.back,code=backScene},
|
||||
}
|
||||
|
||||
return scene
|
||||
|
||||
@@ -308,7 +308,7 @@ scene.widgetList={
|
||||
WIDGET.newSwitch{name='next', x=240,y=235,lim=200,font=40,disp=function()return nexts end,code=pressKey'q',hideF=function()return state==1 end},
|
||||
WIDGET.newSwitch{name='invis',x=240,y=305,lim=200,font=40,disp=function()return invis end,code=pressKey'w',hideF=function()return state==1 end},
|
||||
WIDGET.newSwitch{name='fast', x=240,y=375,lim=200,font=30,disp=function()return fast end,code=pressKey'e',hideF=function()return state==1 end},
|
||||
WIDGET.newButton{name='back', x=1140,y=640,w=170,h=80,font=60,fText=CHAR.icon.back,code=backScene},
|
||||
WIDGET.newButton{name='back', x=1140,y=640,w=170,h=80,font=60,sound='back',fText=CHAR.icon.back,code=backScene},
|
||||
}
|
||||
|
||||
return scene
|
||||
|
||||
@@ -345,6 +345,6 @@ end
|
||||
|
||||
scene.widgetList={
|
||||
WIDGET.newButton{name='reset',x=160,y=100,w=180,h=100,color='lG',font=50,fText=CHAR.icon.retry_spin,code=pressKey'r'},
|
||||
WIDGET.newButton{name="back", x=1140,y=640,w=170,h=80,font=60,fText=CHAR.icon.back,code=backScene},
|
||||
WIDGET.newButton{name='back', x=1140,y=640,w=170,h=80,font=60,sound='back',fText=CHAR.icon.back,code=backScene},
|
||||
}
|
||||
return scene
|
||||
|
||||
@@ -210,7 +210,7 @@ scene.widgetList={
|
||||
WIDGET.newButton{name='paste', x=1070,y=380,w=310,h=70,color='lB',font=25,code=pressKey'cV'},
|
||||
WIDGET.newButton{name='play_clear', x=1070,y=460,w=310,h=70,color='lY',font=35,code=pressKey'play1'},
|
||||
WIDGET.newButton{name='play_puzzle', x=1070,y=540,w=310,h=70,color='lM',font=35,code=pressKey'play2',hideF=function()return #FIELD[1]==0 end},
|
||||
WIDGET.newButton{name='back', x=1140,y=640,w=170,h=80,font=60,fText=CHAR.icon.back,code=pressKey'escape'},
|
||||
WIDGET.newButton{name='back', x=1140,y=640,w=170,h=80,font=60,sound='back',fText=CHAR.icon.back,code=pressKey'escape'},
|
||||
|
||||
--Rule set
|
||||
WIDGET.newSelector{name='eventSet', x=1050,y=760,w=340,color='H',list=sList.eventSet,disp=CUSval('eventSet'),code=CUSsto('eventSet')},
|
||||
|
||||
@@ -481,7 +481,7 @@ scene.widgetList={
|
||||
WIDGET.newButton{name='prevPg', x=100, y=350,w=160,h=110,color='lG',font=20,code=pressKey'pageup',hideF=function()return page==1 end},
|
||||
WIDGET.newButton{name='nextPg', x=100, y=470,w=160,h=110,color='lG',font=20,code=pressKey'pagedown',hideF=function()return page==#FIELD end},
|
||||
|
||||
WIDGET.newButton{name='back', x=1140,y=640,w=170,h=80,font=60,fText=CHAR.icon.back,code=backScene},
|
||||
WIDGET.newButton{name='back', x=1140,y=640,w=170,h=80,font=60,sound='back',fText=CHAR.icon.back,code=backScene},
|
||||
}
|
||||
|
||||
return scene
|
||||
|
||||
@@ -224,7 +224,7 @@ scene.widgetList={
|
||||
WIDGET.newButton{name='paste', x=1140,y=540,w=170,h=80,color='lB',font=50,code=pressKey'cV', fText=CHAR.icon.import},
|
||||
WIDGET.newSwitch{name='mission',x=1150,y=340,lim=280,disp=CUSval('missionKill'),code=CUSrev('missionKill')},
|
||||
|
||||
WIDGET.newButton{name='back', x=1140,y=640,w=170,h=80,font=60,fText=CHAR.icon.back,code=backScene},
|
||||
WIDGET.newButton{name='back', x=1140,y=640,w=170,h=80,font=60,sound='back',fText=CHAR.icon.back,code=backScene},
|
||||
}
|
||||
|
||||
return scene
|
||||
|
||||
@@ -220,7 +220,7 @@ scene.widgetList={
|
||||
|
||||
WIDGET.newButton{name='copy', x=1140,y=460,w=170,h=80,color='lR',font=50,fText=CHAR.icon.export,code=pressKey'cC',hideF=function()return #BAG==0 end},
|
||||
WIDGET.newButton{name='paste',x=1140,y=550,w=170,h=80,color='lB',font=50,fText=CHAR.icon.import,code=pressKey'cV'},
|
||||
WIDGET.newButton{name='back', x=1140,y=640,w=170,h=80,font=60,fText=CHAR.icon.back,code=backScene},
|
||||
WIDGET.newButton{name='back', x=1140,y=640,w=170,h=80,font=60,sound='back',fText=CHAR.icon.back,code=backScene},
|
||||
}
|
||||
|
||||
return scene
|
||||
|
||||
@@ -221,7 +221,7 @@ scene.widgetList={
|
||||
WIDGET.newKey{name='down', x=1120,y=565,w=80,font=50,fText=CHAR.key.down, code=pressKey'down',hide=not MOBILE},
|
||||
WIDGET.newKey{name='pageup', x=1210,y=475,w=80,font=50,fText=CHAR.icon.toUp, code=pressKey'pageup',hide=not MOBILE},
|
||||
WIDGET.newKey{name='pagedown',x=1210,y=565,w=80,font=50,fText=CHAR.icon.toDown,code=pressKey'pagedown',hide=not MOBILE},
|
||||
WIDGET.newButton{name='back', x=1165,y=60,w=170,h=80,font=60,fText=CHAR.icon.back,code=backScene},
|
||||
WIDGET.newButton{name='back', x=1165,y=60,w=170,h=80,font=60,sound='back',fText=CHAR.icon.back,code=backScene},
|
||||
}
|
||||
|
||||
return scene
|
||||
|
||||
@@ -24,7 +24,7 @@ end
|
||||
|
||||
scene.widgetList={
|
||||
WIDGET.newTextBox{name='texts',x=30,y=45,w=1000,h=640,font=20,fix=true},
|
||||
WIDGET.newButton{name='back',x=1140,y=640,w=170,h=80,font=60,fText=CHAR.icon.back,code=backScene},
|
||||
WIDGET.newButton{name='back',x=1140,y=640,w=170,h=80,font=60,sound='back',fText=CHAR.icon.back,code=backScene},
|
||||
}
|
||||
|
||||
return scene
|
||||
|
||||
@@ -4,13 +4,27 @@ local langList={
|
||||
zh_trad="繁體中文",
|
||||
en="English",
|
||||
fr="Français",
|
||||
es="Español\nCastellano",
|
||||
es=" Español\n(Castellano)",
|
||||
pt="Português",
|
||||
|
||||
zh_grass="机翻",
|
||||
zh_yygq="就这?",
|
||||
symbol="?????",
|
||||
}
|
||||
local languages={
|
||||
"Language",
|
||||
"语言",
|
||||
"言語",
|
||||
"Langue",
|
||||
"Idioma",
|
||||
"Línguas",
|
||||
"Sprache",
|
||||
"Lingua",
|
||||
"Язык",
|
||||
"Γλώσσα",
|
||||
"언어",
|
||||
}
|
||||
local curLang=1
|
||||
|
||||
local scene={}
|
||||
|
||||
@@ -18,28 +32,45 @@ function scene.sceneBack()
|
||||
saveSettings()
|
||||
end
|
||||
|
||||
function scene.update(dt)
|
||||
curLang=curLang+dt*1.626
|
||||
if curLang>=#languages+1 then
|
||||
curLang=1
|
||||
end
|
||||
end
|
||||
|
||||
function scene.draw()
|
||||
setFont(80)
|
||||
love.graphics.setColor(1,1,1,1-curLang%1*2)
|
||||
GC.mStr(languages[curLang-curLang%1],640,20)
|
||||
love.graphics.setColor(1,1,1,curLang%1*2)
|
||||
GC.mStr(languages[curLang-curLang%1+1]or languages[1],640,20)
|
||||
end
|
||||
|
||||
local function _setLang(lid)
|
||||
SETTING.locale=lid
|
||||
applyLanguage()
|
||||
TEXT.clear()
|
||||
TEXT.show(langList[lid],640,360,100,'appear',.626)
|
||||
collectgarbage()
|
||||
if FIRSTLAUNCH then SCN.back()end
|
||||
end
|
||||
|
||||
scene.widgetList={
|
||||
WIDGET.newButton{x=271,y=190,w=346,h=120,font=40, fText=langList.zh, color='O',code=function()_setLang('zh')end},
|
||||
WIDGET.newButton{x=637,y=190,w=346,h=120,font=40, fText=langList.zh_trad, color='F',code=function()_setLang('zh_trad')end},
|
||||
WIDGET.newButton{x=1003,y=190,w=346,h=120,font=40, fText=langList.zh_full, color='R',code=function()_setLang('zh_full')end},
|
||||
WIDGET.newButton{x=271,y=210,w=346,h=100,font=40, fText=langList.en, color='R',code=function()_setLang('en')end},
|
||||
WIDGET.newButton{x=271,y=329,w=346,h=100,font=40, fText=langList.fr, color='F',code=function()_setLang('fr')end},
|
||||
WIDGET.newButton{x=271,y=508,w=346,h=220,font=40, fText=langList.es, color='O',code=function()_setLang('es')end},
|
||||
|
||||
WIDGET.newButton{x=225,y=331,w=255,h=120,font=40, fText=langList.en, color='L',code=function()_setLang('en')end},
|
||||
WIDGET.newButton{x=500,y=331,w=255,h=120,font=40, fText=langList.fr, color='J',code=function()_setLang('fr')end},
|
||||
WIDGET.newButton{x=775,y=331,w=255,h=120,font=35, fText=langList.es, color='G',code=function()_setLang('es')end},
|
||||
WIDGET.newButton{x=1050,y=331,w=255,h=120,font=40, fText=langList.pt, color='dG',code=function()_setLang('pt')end},
|
||||
WIDGET.newButton{x=637,y=210,w=346,h=100,font=40, fText=langList.pt, color='G',code=function()_setLang('pt')end},
|
||||
WIDGET.newButton{x=637,y=329,w=346,h=100,font=40, fText=langList.symbol, color='J',code=function()_setLang('symbol')end},
|
||||
WIDGET.newButton{x=637,y=449,w=346,h=100,font=40, fText=langList.zh_yygq, color='L',code=function()_setLang('zh_yygq')end},
|
||||
WIDGET.newButton{x=637,y=568,w=346,h=100,font=40, fText=langList.zh_grass,color='Y',code=function()_setLang('zh_grass')end},
|
||||
|
||||
WIDGET.newButton{x=271,y=472,w=346,h=120,font=45, fText=langList.zh_grass,color='N',code=function()_setLang('zh_grass')end},
|
||||
WIDGET.newButton{x=637,y=472,w=346,h=120,font=45, fText=langList.zh_yygq, color='S',code=function()_setLang('zh_yygq')end},
|
||||
WIDGET.newButton{x=1003,y=472,w=346,h=120,font=45, fText=langList.symbol, color='B',code=function()_setLang('symbol')end},
|
||||
WIDGET.newButton{name='back',x=1140,y=640,w=170,h=80,font=60,fText=CHAR.icon.back,code=backScene},
|
||||
WIDGET.newButton{x=1003,y=210,w=346,h=100,font=40,fText=langList.zh, color='B',code=function()_setLang('zh')end},
|
||||
WIDGET.newButton{x=1003,y=329,w=346,h=100,font=40,fText=langList.zh_full, color='S',code=function()_setLang('zh_full')end},
|
||||
WIDGET.newButton{x=1003,y=449,w=346,h=100,font=40,fText=langList.zh_trad, color='N',code=function()_setLang('zh_trad')end},
|
||||
|
||||
WIDGET.newButton{name='back',x=1003,y=568,w=346,h=100,font=60,fText=CHAR.icon.back,code=backScene},
|
||||
}
|
||||
|
||||
return scene
|
||||
|
||||
@@ -287,7 +287,7 @@ scene.widgetList={
|
||||
WIDGET.newSlider{name='voc', x=1000,y=220,lim=130,w=250,disp=SETval('voc'),code=function(v)SETTING.voc=v VOC.setVol(SETTING.voc)end},
|
||||
WIDGET.newSwitch{name='label',x=1200,y=290,lim=160,disp=function()return showLabel end,code=pressKey'space',},
|
||||
WIDGET.newButton{name='music',x=1140,y=540,w=170,h=80,font=40,code=pressKey'tab'},
|
||||
WIDGET.newButton{name='back', x=1140,y=640,w=170,h=80,font=60,fText=CHAR.icon.back,code=backScene},
|
||||
WIDGET.newButton{name='back', x=1140,y=640,w=170,h=80,font=60,sound='back',fText=CHAR.icon.back,code=backScene},
|
||||
}
|
||||
|
||||
return scene
|
||||
|
||||
@@ -28,7 +28,7 @@ end
|
||||
|
||||
scene.widgetList={
|
||||
WIDGET.newTextBox{name='texts',x=30,y=45,w=1000,h=640,font=15,fix=true},
|
||||
WIDGET.newButton{name='back',x=1140,y=640,w=170,h=80,font=60,fText=CHAR.icon.back,code=backScene},
|
||||
WIDGET.newButton{name='back',x=1140,y=640,w=170,h=80,font=60,sound='back',fText=CHAR.icon.back,code=backScene},
|
||||
}
|
||||
|
||||
return scene
|
||||
|
||||
@@ -21,7 +21,7 @@ end
|
||||
local scene={}
|
||||
|
||||
function scene.sceneInit()
|
||||
local data=loadFile('conf/account')
|
||||
local data=loadFile('conf/account','-canSkip')
|
||||
if data then
|
||||
savePW=true
|
||||
emailBox:setText(data[1])
|
||||
@@ -36,7 +36,7 @@ scene.widgetList={
|
||||
passwordBox,
|
||||
WIDGET.newSwitch{name='keepPW', x=900, y=420,disp=function()return savePW end,code=function()savePW=not savePW end},
|
||||
WIDGET.newKey{name='login', x=1140,y=540,w=170,h=80,font=40,code=_login},
|
||||
WIDGET.newButton{name='back', x=1140,y=640,w=170,h=80,font=60,fText=CHAR.icon.back,code=backScene},
|
||||
WIDGET.newButton{name='back', x=1140,y=640,w=170,h=80,font=60,sound='back',fText=CHAR.icon.back,code=backScene},
|
||||
}
|
||||
|
||||
return scene
|
||||
|
||||
@@ -30,7 +30,7 @@ end
|
||||
|
||||
scene.widgetList={
|
||||
WIDGET.newTextBox{name='texts',x=30,y=45,w=1000,h=640,font=15,fix=true},
|
||||
WIDGET.newButton{name='back',x=1140,y=640,w=170,h=80,font=60,fText=CHAR.icon.back,code=backScene},
|
||||
WIDGET.newButton{name='back',x=1140,y=640,w=170,h=80,font=60,sound='back',fText=CHAR.icon.back,code=backScene},
|
||||
}
|
||||
|
||||
return scene
|
||||
|
||||
@@ -158,7 +158,7 @@ scene.widgetList={
|
||||
WIDGET.newText{name='title', x=80,y=50,font=70,align='L'},
|
||||
WIDGET.newText{name='unranked',x=1200,y=60,color='Y',font=50,align='R'},
|
||||
WIDGET.newButton{name='reset', x=1140,y=540,w=170,h=80,font=25,code=pressKey'tab'},
|
||||
WIDGET.newButton{name='back', x=1140,y=640,w=170,h=80,font=60,fText=CHAR.icon.back,code=backScene},
|
||||
WIDGET.newButton{name='back', x=1140,y=640,w=170,h=80,font=60,sound='back',fText=CHAR.icon.back,code=backScene},
|
||||
}
|
||||
|
||||
return scene
|
||||
|
||||
@@ -331,7 +331,7 @@ end
|
||||
scene.widgetList={
|
||||
WIDGET.newKey{name='mod', x=140,y=655,w=220,h=80,font=35,code=goScene'mod'},
|
||||
WIDGET.newButton{name='start',x=1040,y=655,w=180,h=80,font=40,code=pressKey'return',hideF=function()return not mapCam.sel end},
|
||||
WIDGET.newButton{name='back', x=1200,y=655,w=120,h=80,font=60,fText=CHAR.icon.back,code=backScene},
|
||||
WIDGET.newButton{name='back', x=1200,y=655,w=120,h=80,font=60,sound='back',fText=CHAR.icon.back,code=backScene},
|
||||
}
|
||||
|
||||
return scene
|
||||
|
||||
@@ -129,7 +129,7 @@ scene.widgetList={
|
||||
WIDGET.newButton{name='play', x=200,y=390,w=120,code=pressKey'space',font=65,fText=CHAR.icon.play_pause},
|
||||
WIDGET.newButton{name='down', x=200,y=530,w=120,code=pressKey'down',hideF=function()return selected==#bgmList end,font=60,fText=CHAR.key.down},
|
||||
WIDGET.newButton{name='sound',x=1140,y=540,w=170,h=80,font=40,code=pressKey'tab'},
|
||||
WIDGET.newButton{name='back', x=1140,y=640,w=170,h=80,font=60,fText=CHAR.icon.back,code=backScene},
|
||||
WIDGET.newButton{name='back', x=1140,y=640,w=170,h=80,font=60,sound='back',fText=CHAR.icon.back,code=backScene},
|
||||
}
|
||||
|
||||
return scene
|
||||
|
||||
@@ -17,7 +17,7 @@ end
|
||||
scene.widgetList={
|
||||
WIDGET.newKey{name='setting',x=1200,y=160,w=90,h=90,font=60,fText=CHAR.icon.settings,code=goScene'setting_game'},
|
||||
WIDGET.newKey{name='match',x=640,y=500,w=760,h=140,font=60,code=function()MES.new('warn',text.notFinished)end},
|
||||
WIDGET.newButton{name='back',x=1140,y=640,w=170,h=80,font=60,fText=CHAR.icon.back,code=backScene},
|
||||
WIDGET.newButton{name='back',x=1140,y=640,w=170,h=80,font=60,sound='back',fText=CHAR.icon.back,code=backScene},
|
||||
}
|
||||
|
||||
return scene
|
||||
|
||||
@@ -30,7 +30,7 @@ scene.widgetList={
|
||||
end
|
||||
end
|
||||
end},
|
||||
WIDGET.newButton{name='back', x=1140,y=640,w=170,h=80,font=60,fText=CHAR.icon.back,code=backScene},
|
||||
WIDGET.newButton{name='back', x=1140,y=640,w=170,h=80,font=60,sound='back',fText=CHAR.icon.back,code=backScene},
|
||||
}
|
||||
|
||||
return scene
|
||||
|
||||
@@ -86,7 +86,7 @@ scene.widgetList={
|
||||
--Capacity & Create & Back
|
||||
WIDGET.newSelector{name='capacity', x=1070,y=330,w=310,color='lY',list={2,3,4,5,7,10,17,31,49,99},disp=ROOMval('capacity'),code=ROOMsto('capacity')},
|
||||
WIDGET.newButton{name='create', x=1070,y=480,w=310,h=140,color='lN',font=40,code=_createRoom},
|
||||
WIDGET.newButton{name='back', x=1140,y=640,w=170,h=80,font=60,fText=CHAR.icon.back,code=backScene},
|
||||
WIDGET.newButton{name='back', x=1140,y=640,w=170,h=80,font=60,sound='back',fText=CHAR.icon.back,code=backScene},
|
||||
|
||||
--Special rules
|
||||
WIDGET.newSwitch{name='ospin', x=850, y=850, lim=210,disp=ROOMval('ospin'), code=ROOMrev('ospin')},
|
||||
|
||||
@@ -140,7 +140,7 @@ scene.widgetList={
|
||||
WIDGET.newKey{name='refresh', x=250,y=630,w=140,h=120,code=_fetchRoom,hideF=function()return fetchTimer>7 end},
|
||||
WIDGET.newKey{name='new', x=510,y=630,w=260,h=120,code=goScene'net_newRoom'},
|
||||
WIDGET.newKey{name='join', x=780,y=630,w=140,h=120,code=pressKey'join',hideF=function()return roomList:getLen()==0 or NET.getlock('enterRoom')end},
|
||||
WIDGET.newButton{name='back', x=1140,y=640,w=170,h=80,font=60,fText=CHAR.icon.back,code=pressKey'escape'},
|
||||
WIDGET.newButton{name='back', x=1140,y=640,w=170,h=80,font=60,sound='back',fText=CHAR.icon.back,code=pressKey'escape'},
|
||||
}
|
||||
|
||||
return scene
|
||||
|
||||
@@ -36,8 +36,8 @@ function scene.sceneInit(org)
|
||||
("%d(%d) %.2fLPM"):format(S.row,S.dig,S.row/S.time*60),
|
||||
("%d(%d) %.2fAPM"):format(S.atk,S.digatk,S.atk/S.time*60),
|
||||
("%d(%d-%d)"):format(S.pend,S.recv,S.recv-S.pend),
|
||||
("%d/%d/%d/%d"):format(S.clears[1],S.clears[2],S.clears[3],S.clears[4]),
|
||||
("(%d)/%d/%d/%d"):format(S.spins[1],S.spins[2],S.spins[3],S.spins[4]),
|
||||
("[1] %-7d[2] %-7d[3] %-7d[4] %-7d"):format(S.clears[1],S.clears[2],S.clears[3],S.clears[4]),
|
||||
(CHAR.icon.num0InSpin.." %-8d"..CHAR.icon.num1InSpin.." %-8d"..CHAR.icon.num2InSpin.." %-8d"..CHAR.icon.num3InSpin.." %-8d"):format(S.spins[1],S.spins[2],S.spins[3],S.spins[4]),
|
||||
("%d/%d ; %d/%d"):format(S.b2b,S.b3b,S.pc,S.hpc),
|
||||
("%d/%dx/%.2f%%"):format(S.extraPiece,S.maxFinesseCombo,S.finesseRate*20/S.piece),
|
||||
}
|
||||
|
||||
@@ -28,7 +28,7 @@ scene.widgetList={
|
||||
WIDGET.newKey{name='register', x=640, y=640,w=300,h=80,font=40,code=_register,hideF=function()return NET.getlock('register')end},
|
||||
WIDGET.newText{name='registering', x=640, y=605,font=50,hideF=function()return not NET.getlock('register')end},
|
||||
|
||||
WIDGET.newButton{name='back', x=1140,y=640,w=170,h=80,font=60,fText=CHAR.icon.back,code=backScene},
|
||||
WIDGET.newButton{name='back', x=1140,y=640,w=170,h=80,font=60,sound='back',fText=CHAR.icon.back,code=backScene},
|
||||
}
|
||||
|
||||
return scene
|
||||
|
||||
@@ -130,6 +130,8 @@ function scene.keyDown(key)
|
||||
SFX.play('finesseError',.7)
|
||||
end
|
||||
end
|
||||
elseif key=='up'or key=='down'then
|
||||
listBox:arrowKey(key)
|
||||
else
|
||||
return true
|
||||
end
|
||||
@@ -141,7 +143,7 @@ scene.widgetList={
|
||||
WIDGET.newButton{name='import',x=350,y=640,w=140,h=80,color='lN',code=pressKey'cV',font=50,fText=CHAR.icon.import},
|
||||
WIDGET.newButton{name='play', x=700,y=640,w=170,h=80,color='lY',code=pressKey'return',font=65,fText=CHAR.icon.play},
|
||||
WIDGET.newButton{name='delete',x=850,y=640,w=80,h=80,color='lR',code=pressKey'delete',font=50,fText=CHAR.icon.trash},
|
||||
WIDGET.newButton{name='back', x=1140,y=640,w=170,h=80,font=60,fText=CHAR.icon.back,code=backScene},
|
||||
WIDGET.newButton{name='back', x=1140,y=640,w=170,h=80,font=60,sound='back',fText=CHAR.icon.back,code=backScene},
|
||||
}
|
||||
|
||||
return scene
|
||||
|
||||
@@ -82,7 +82,7 @@ scene.widgetList={
|
||||
WIDGET.newText{name='notLogin', x=55,y=550,color='dB',align='L',font=30,hideF=function()return WS.status('user')=='running'end},
|
||||
WIDGET.newButton{name='upload', x=190,y=610,w=280,h=90,color='lB',font=25,code=NET.uploadSave,hideF=function()return WS.status('user')~='running'end},
|
||||
WIDGET.newButton{name='download', x=490,y=610,w=280,h=90,color='lB',font=25,code=NET.downloadSave,hideF=function()return WS.status('user')~='running'end},
|
||||
WIDGET.newButton{name='back', x=1140,y=640,w=170,h=80,font=60,fText=CHAR.icon.back,code=backScene},
|
||||
WIDGET.newButton{name='back', x=1140,y=640,w=170,h=80,font=60,sound='back',fText=CHAR.icon.back,code=backScene},
|
||||
}
|
||||
|
||||
return scene
|
||||
|
||||
@@ -105,7 +105,7 @@ scene.widgetList={
|
||||
_.sddas,_.sdarr=0,2
|
||||
_.ihs,_.irs,_.ims=false,false,false
|
||||
end},
|
||||
WIDGET.newButton{name='back', x=1140, y=640,w=170,h=80,font=60,fText=CHAR.icon.back,code=backScene},
|
||||
WIDGET.newButton{name='back', x=1140, y=640,w=170,h=80,font=60,sound='back',fText=CHAR.icon.back,code=backScene},
|
||||
}
|
||||
|
||||
return scene
|
||||
|
||||
@@ -59,7 +59,7 @@ scene.widgetList={
|
||||
end
|
||||
end
|
||||
end},
|
||||
WIDGET.newButton{name='back', x=1140, y=640, w=170,h=80,font=60,fText=CHAR.icon.back,code=backScene},
|
||||
WIDGET.newButton{name='back', x=1140, y=640, w=170,h=80,font=60,sound='back',fText=CHAR.icon.back,code=backScene},
|
||||
}
|
||||
|
||||
return scene
|
||||
|
||||
@@ -231,7 +231,7 @@ scene.widgetList={
|
||||
|
||||
WIDGET.newKey{name='restart',x=150,y=670,w=180,h=60,code=function()_setSel(0)end},
|
||||
|
||||
WIDGET.newButton{name='back',x=1140,y=640,w=190,h=80,font=60,fText=CHAR.icon.back,code=backScene},
|
||||
WIDGET.newButton{name='back',x=1140,y=640,w=170,h=80,font=60,sound='back',fText=CHAR.icon.back,code=backScene},
|
||||
}
|
||||
|
||||
return scene
|
||||
|
||||
@@ -124,7 +124,7 @@ scene.widgetList={
|
||||
end
|
||||
SFX.play('hold')
|
||||
end},
|
||||
WIDGET.newButton{name='back', x=1140,y=640,w=170,h=80,font=60,fText=CHAR.icon.back,code=backScene},
|
||||
WIDGET.newButton{name='back', x=1140,y=640,w=170,h=80,font=60,sound='back',fText=CHAR.icon.back,code=backScene},
|
||||
playEgg,
|
||||
}
|
||||
|
||||
|
||||
@@ -95,7 +95,7 @@ scene.widgetList={
|
||||
WIDGET.newButton{name='apply', x=1100,y=400,w=180,h=60,code=function()SETTING.sfxPack=sfxPack SFX.load('media/effect/'..sfxPack..'/')end,hideF=function()return SETTING.sfxPack==sfxPack end},
|
||||
WIDGET.newSelector{name='vocPack',x=1100,y=470,w=200,color='lV',list=VOCPACKS,disp=function()return vocPack end,code=function(i)vocPack=i end},
|
||||
WIDGET.newButton{name='apply', x=1100,y=540,w=180,h=60,code=function()SETTING.vocPack=vocPack VOC.load('media/vocal/'..vocPack..'/')end,hideF=function()return SETTING.vocPack==vocPack end},
|
||||
WIDGET.newButton{name='back', x=1140,y=640,w=170,h=80,font=60,fText=CHAR.icon.back,code=backScene},
|
||||
WIDGET.newButton{name='back', x=1140,y=640,w=170,h=80,font=60,sound='back',fText=CHAR.icon.back,code=backScene},
|
||||
}
|
||||
|
||||
return scene
|
||||
|
||||
@@ -115,7 +115,7 @@ scene.widgetList={
|
||||
end},
|
||||
WIDGET.newSelector{name='snap', x=750,y=90,w=200,h=80,color='Y',list={1,10,20,40,60,80},disp=function()return snapUnit end,code=function(i)snapUnit=i end},
|
||||
WIDGET.newButton{name='option', x=530,y=190,w=200,h=80,font=60,fText=CHAR.icon.menu,code=function()SCN.go('setting_touchSwitch')end},
|
||||
WIDGET.newButton{name='back', x=750,y=190,w=200,h=80,font=60,fText=CHAR.icon.back,code=backScene},
|
||||
WIDGET.newButton{name='back', x=750,y=190,w=200,h=80,font=60,sound='back',fText=CHAR.icon.back,code=backScene},
|
||||
WIDGET.newKey{name='save1', x=475,y=290,w=90,h=70,code=_save1,font=45,fText=CHAR.icon.saveOne},
|
||||
WIDGET.newKey{name='load1', x=585,y=290,w=90,h=70,code=_load1,font=45,fText=CHAR.icon.loadOne},
|
||||
WIDGET.newKey{name='save2', x=695,y=290,w=90,h=70,code=_save2,font=45,fText=CHAR.icon.saveTwo},
|
||||
|
||||
@@ -62,7 +62,7 @@ scene.widgetList={
|
||||
WIDGET.newSlider{name='tchW', x=140, y=860, w=1000, font=35,disp=SETval('VKTchW'),code=function(i)SETTING.VKTchW=i SETTING.VKCurW=math.max(SETTING.VKCurW,i)end,hideF=_notTrack},
|
||||
WIDGET.newSlider{name='curW', x=140, y=930, w=1000, font=35,disp=SETval('VKCurW'),code=function(i)SETTING.VKCurW=i SETTING.VKTchW=math.min(SETTING.VKTchW,i)end,hideF=_notTrack},
|
||||
|
||||
WIDGET.newButton{name='back', x=1140, y=640, w=170,h=80,font=60,fText=CHAR.icon.back,code=backScene},
|
||||
WIDGET.newButton{name='back', x=1140, y=640, w=170,h=80,font=60,sound='back',fText=CHAR.icon.back,code=backScene},
|
||||
}
|
||||
|
||||
return scene
|
||||
|
||||
@@ -113,7 +113,7 @@ scene.widgetList={
|
||||
code=function(v)SETTING.fieldSatur=v;applyFieldSatur(SETTING.fieldSatur)end
|
||||
},
|
||||
|
||||
WIDGET.newButton{name='back', x=1140,y=640,w=170,h=80,font=60,fText=CHAR.icon.back,code=backScene},
|
||||
WIDGET.newButton{name='back', x=1140,y=640,w=170,h=80,font=60,sound='back',fText=CHAR.icon.back,code=backScene},
|
||||
}
|
||||
|
||||
return scene
|
||||
|
||||
@@ -95,7 +95,7 @@ function scene.draw()
|
||||
end
|
||||
|
||||
scene.widgetList={
|
||||
WIDGET.newButton{name='back',x=1140,y=640,w=170,h=80,font=60,fText=CHAR.icon.back,code=backScene},
|
||||
WIDGET.newButton{name='back',x=1140,y=640,w=170,h=80,font=60,sound='back',fText=CHAR.icon.back,code=backScene},
|
||||
}
|
||||
|
||||
return scene
|
||||
|
||||
@@ -131,7 +131,7 @@ scene.widgetList={
|
||||
end
|
||||
},
|
||||
WIDGET.newButton{name='save',x=820,y=640,w=250,h=80,font=25,code=goScene'savedata'},
|
||||
WIDGET.newButton{name='back',x=1140,y=640,w=170,h=80,font=60,fText=CHAR.icon.back,code=backScene},
|
||||
WIDGET.newButton{name='back',x=1140,y=640,w=170,h=80,font=60,sound='back',fText=CHAR.icon.back,code=backScene},
|
||||
}
|
||||
|
||||
return scene
|
||||
|
||||
@@ -14,7 +14,7 @@ return[=[
|
||||
|
||||
0.17.0: 硬着陆 Hard Landing
|
||||
新增:
|
||||
新模式:策略堆叠(原设计来自游戏Cambridge, by NOT_A_ROBOT)
|
||||
新模式:策略堆叠(原设计来自游戏Cambridge by Milla, NOT_A_ROBOT移植)
|
||||
新旋转系统:DRS_weak,没有滞后旋转(五连块风格模仿) #441
|
||||
新机制:出块延迟打断(ARE打断)(默认关闭) #471
|
||||
新机制:锁定在外判负(lockout)(默认关闭)
|
||||
@@ -25,7 +25,7 @@ return[=[
|
||||
新小程序:Memorize,Triple
|
||||
新BGM:malate(暂未使用)
|
||||
玩法改动:
|
||||
出块/消行延迟逻辑修正,现在真的是0延迟,不再有一帧等待了(可以比原来更滑一点)
|
||||
出块/消行延迟逻辑修正,现在真的是0延迟,不再有一帧等待了(灵敏度上限增加一点点)
|
||||
大改重力和软降的结算逻辑,两个值接近的时候不会看起来不自然了 #438
|
||||
Ospin变O后操作序列清空,变远端朝下JL时允许水平可移动
|
||||
生成位置预览开启后hold的生成位置也可见 #453
|
||||
@@ -49,6 +49,7 @@ return[=[
|
||||
小程序arm加入计时器和重置按钮
|
||||
控制台使用等宽字体,更对味
|
||||
美化控制台help命令列表
|
||||
大规模整理首页tip
|
||||
代码:
|
||||
BGM模块可限制最大加载数,不容易达到上限导致没声 #447
|
||||
语音模块支持设置轻微随机音调偏移半径(游戏内固定使用1)
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
return{
|
||||
["apkCode"]=416,
|
||||
["apkCode"]=417,
|
||||
["code"]=1700,
|
||||
["string"]="V0.17.0",
|
||||
["room"]="ver A-2",
|
||||
|
||||
Reference in New Issue
Block a user