Compare commits

..

16 Commits

Author SHA1 Message Date
MrZ626
29a049fe4e 版本推进 2021-12-06 22:20:59 +08:00
MrZ626
b5a9c8e1bb 修正一处手柄事件可能爆炸 2021-12-06 21:17:30 +08:00
MrZ626
bb9a35c161 修复云存档/读档的一处小问题 2021-12-06 21:11:54 +08:00
MrZ626
b25a345b42 更换click音效,音乐室播放按钮声音调整 2021-12-06 20:33:41 +08:00
MrZ626
b22b0e0194 修正文件加载模块参数识别的小问题 2021-12-06 19:52:00 +08:00
MrZ626
55cf95f218 修正策略堆叠模式评级标准不当 2021-12-06 19:24:24 +08:00
MrZ626
225ddbcfac 调整几个tip 2021-12-06 16:43:46 +08:00
MrZ626
9377090c7c 【bug风险较大,需要测试】解耦玩家代码中的部分混战模式代码 2021-12-06 16:00:46 +08:00
MrZ626
ed002ec2e1 略微降低master-h模式骨块出现后的难度 2021-12-06 13:49:51 +08:00
MrZ626
e33036d9ec 调整几个词条的关键词 2021-12-06 12:46:17 +08:00
MrZ626
ef03e7c009 layout菜单名改为style 2021-12-06 12:46:11 +08:00
MrZ626
aef4220ac0 修复自定义场地16号颜色的方块名位置显示错误
优化皮肤设置页面交互效果
2021-12-06 03:25:39 +08:00
MrZ626
46223e38cd STRING模块新增一个简易摘要算法,未来保护用户密码明文可能用到 2021-12-06 03:18:41 +08:00
MrZ626
4bafa4bffe 版本推进 2021-12-05 22:01:16 +08:00
MrZ626
2b3dd877dd 修正100攻击竞速模式没有重力 2021-12-05 18:13:47 +08:00
MrZ626
0553e5c45e 调整中文tip 2021-12-05 18:11:12 +08:00
39 changed files with 177 additions and 174 deletions

View File

@@ -6,7 +6,14 @@ function FILE.load(name,args)
local F=fs.newFile(name)
assert(F:open'r','open error')
local s=F:read()F:close()
if args:sArg'-luaon'or args==''and s:sub(1,6)=='return{'then
local mode=
args:sArg'-luaon'and'luaon'or
args:sArg'-json'and'json'or
args:sArg'-string'and'string'or
s:sub(1,6)=='return{'and'luaon'or
(s:sub(1,1)=='['and s:sub(-1)==']'or s:sub(1,1)=='{'and s:sub(-1)=='}')and'json'or
'string'
if mode=='luaon'then
local func=loadstring(s)
if func then
setfenv(func,{})
@@ -15,13 +22,13 @@ function FILE.load(name,args)
else
error('decode error')
end
elseif args:sArg'-json'or args==''and s:sub(1,1)=='['and s:sub(-1)==']'or s:sub(1,1)=='{'and s:sub(-1)=='}'then
elseif mode=='json'then
local res=JSON.decode(s)
if res then
return res
end
error('decode error')
elseif args:sArg'-string'or args==''then
elseif mode=='string'then
return s
else
error('unknown mode')

View File

@@ -397,7 +397,7 @@ function love.joystickremoved(JS)
end
end
function love.gamepadaxis(JS,axis,val)
if JS==jsState[1]._jsObj then
if jsState[1]and JS==jsState[1]._jsObj then
local js=jsState[1]
if axis=='leftx'or axis=='lefty'or axis=='rightx'or axis=='righty'then
local newVal=--range: [0,1]

View File

@@ -169,6 +169,25 @@ function STRING.vcsDecrypt(text,key)
end
return result..buffer
end
function STRING.digezt(text)--Not powerful hash, just protect the original text
local out={0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}
local seed=26
for i=1,#text do
local c=byte(text,i)
seed=(seed+c)%26
c=c+seed
local pos=c*i%16
local step=(c+i)%4+1
local times=2+(c%6)
for _=1,times do
out[pos+1]=(out[pos+1]+c)%256
pos=(pos+step)%16
end
end
local result=""
for i=1,16 do result=result..char(out[i])end
return result
end
function STRING.readLine(str)
local p=str:find("\n")

Binary file not shown.

View File

@@ -1,6 +1,6 @@
local death_lock={12,11,10,9,8, 7,7,7,7,6}
local death_wait={10,9, 8, 7,6, 6,6,5,5,4}
local death_fall={10,9, 8, 7,6, 6,5,5,4,4}
local death_lock={12,11,10,9,8, 8,8,7,7,6}
local death_wait={10,9, 8, 7,6, 7,6,6,5,5}
local death_fall={10,9, 8, 7,6, 7,6,5,5,5}
return{
drop=0,

View File

@@ -5,15 +5,22 @@ local setFont=setFont
local PLAYERS,PLY_ALIVE=PLAYERS,PLY_ALIVE
return{
layout='royale',
fkey1=function(P)
P:changeAtkMode(P.atkMode<3 and P.atkMode+2 or 5-P.atkMode)
P.swappingAtkMode=45
end,
mesDisp=function(P)
setFont(35)
mStr(#PLY_ALIVE.."/"..#PLAYERS,63,175)
mStr(P.modeData.ko,80,215)
gc_draw(TEXTOBJ.ko,60-TEXTOBJ.ko:getWidth(),222)
setFont(20)
gc_setColor(1,.5,0,.6)
gc_print(P.badge,103,227)
gc_setColor(.97,.97,.97)
setFont(25)
mStr(text.powerUp[P.strength],63,290)
gc_setColor(1,1,1)

View File

@@ -79,7 +79,7 @@ do--function loadFile(name,args), function saveFile(data,name,args)
local text=text or t
local res,mes=pcall(FILE.save,data,name,args)
if res then
return mes
return true
else
MES.new('error',
mes:find'duplicate'and
@@ -771,7 +771,7 @@ do--function resetGameData(args)
BGM.play(type(bgm)=='string'and bgm or type(bgm)=='table'and bgm[math.random(#bgm)])
TEXT.clear()
if GAME.modeEnv.royaleMode then
if GAME.modeEnv.eventset=='royale'then
for i=1,#PLAYERS do
PLAYERS[i]:changeAtk(randomTarget(PLAYERS[i]))
end

View File

@@ -859,12 +859,12 @@ return{
"Any input device takes some time for the input to reach the game. This delay can range from a few milliseconds to a few dozen milliseconds.\nIf input delay is too long, the controls can feel uncomfortable.\nThis delay is often due to the performance of the hardware and software used, and often out of your control. Turn on performance mode (or turn off power saving mode) on your device, and turn on gaming mode on your monitor/TV (if you have one), may help reducing input delay.",
},
{"Cold Clear",
"cc coldclear",
"cc coldclear ai bot",
"term",
"A Tetris bot. Originally built for Puyo Puyo Tetris, thus can be less powerful on Techmino.",
},
{"ZZZbot",
"zzzbot",
"zzzbot ai bot",
"term",
"A Tetris bot. Built by the Chinese Tetris player 奏之章 (Zou Zhi Zhang) and has decent performance in many games",
},

View File

@@ -880,17 +880,17 @@ return{
"一个游戏模式:\nMemorylessPreviewlessHoldless\n纯随机+无next+无hold一个非常考验玩家反应速度的模式",
},
{"输入延迟",
"输入延迟 input delay",
"输入延迟 input delay yanchi",
"term",
"用任何设备玩任何游戏时所有的操作按键盘点鼠标等都会晚一点点很短几毫秒到几十毫秒才到达游戏如果过长就会很影响游戏手感作用效果类似于你拿QQ远程控制打fps游戏\nTOP、TE等游戏比较明显\n这个延迟一般由硬件性能,硬件状态影响,通常来说不可设置,开启性能模式(或者关闭节能模式)可能会好一点",
},
{"Cold Clear",
"cc coldclear",
"机器人 电脑 cc coldclear ai bot jiqiren",
"term",
"一个AI的名字就跟AlphaGo一样\n本身是为PPT开发故在本游戏中使用效果欠佳版本也较旧",
},
{"ZZZbot",
"zzzbot",
"机器人 电脑 zzzbot ai bot jiqiren",
"term",
"一个AI的名字就跟AlphaGo一样\n由研究群群友奏之章开发,重新调参后在各个游戏平台上的表现都很不错",
},
@@ -902,7 +902,7 @@ return{
"开局定式,定式一般指开局定式这个概念。\n指开局后可以使用的套路摆法。局中情况合适的时候也可以摆出同样的形状,但是和摆法开局一般都不一样。\n\n能称为定式的摆法要尽量满足以下至少2~3条\n能适应大多数块序\n输出高尽量不浪费T块\n很多方块无需软降,极简操作数少\n有明确后续,分支尽量少。\n\n绝大多数定式基于bag7序列规律性强才有发明定式的可能。",
},
{"DT炮",
"dt炮",
"dt炮 dt cannon",
"setup",
"Double-Triple Cannon.\n"..HDwiki,
HDsearch.."dt",
@@ -914,7 +914,7 @@ return{
HDsearch.."dt",
},
{"BT炮",
"bt炮",
"bt炮 bt cannon",
"setup",
"β炮Beta炮\n"..HDwiki,
HDsearch.."bt_cannon",
@@ -932,7 +932,7 @@ return{
HDsearch.."TKI_3_Perfect_Clear",
},
{"QT炮",
"qt炮",
"qt炮 qt cannon",
"setup",
"QT炮细节未知。",
},

View File

@@ -339,7 +339,7 @@ return{
title="Game Settings",
graphic="←Video",
sound="Audio→",
layout="Layout",
-- style="Style",
ctrl="Control Settings",
key="Key Mappings",
@@ -460,7 +460,7 @@ return{
},
setting_skin={
skinSet="Block Skin",
title="Layout Settings",
title="Style Settings",
skinR="Reset Colors",
faceR="Reset Dir.",
},

View File

@@ -305,7 +305,7 @@ return{
title="Ajustes del Juego",
graphic="←Video",
sound="Sonido→",
layout="Diseño",
-- style="Style",
ctrl="Sensibilidad",
key="Teclas",

View File

@@ -299,10 +299,9 @@ return{
},
setting_game={
title="Paramètres du jeu",
graphic="←Vidéo",
sound="Son→",
layout="Disposition",
-- style="Style",
ctrl="Paramètres de contrôle",
key="Touches",

View File

@@ -327,7 +327,7 @@ return{
title="Config. de jogo",
graphic="←Video",
sound="Som→",
layout="Layout",
-- style="Style",
ctrl="Config. controle",
key="Map. teclas",

View File

@@ -228,10 +228,9 @@ return{
},
setting_game={
title="%~~%",
graphic="←Video",
sound="Sound→",
layout="=-=-=",
style="=-=-=",
ctrl="=?=",
key="=?",

View File

@@ -87,7 +87,6 @@ return{fallback='zh',
WidgetText={
setting_game={
title="改游戏",
graphic="←改画面",
sound="改声音→",

View File

@@ -337,9 +337,9 @@ return{
},
setting_game={
title="游戏设置",
graphic="←画面设置",
sound="声音设置",
layout="外观",
graphic="←画面",
sound="声音→",
style="风格",
ctrl="控制设置",
key="键位设置",
@@ -356,8 +356,8 @@ return{
},
setting_video={
title="画面设置",
sound="←声音设置",
game="游戏设置",
sound="←声音",
game="游戏→",
block="方块可见",
smooth="平滑下落",
@@ -403,8 +403,8 @@ return{
},
setting_sound={
title="声音设置",
game="←游戏设置",
graphic="画面设置",
game="←游戏",
graphic="画面→",
mainVol="总音量",
bgm="音乐",
@@ -773,13 +773,11 @@ return{
},
getTip={refuseCopy=true,
"“Techmino.app”将对您的电脑造成伤害。您应该将它移到废纸篓。",
"(a+b)³=a³+3a²b+3ab²+b³",
"(RUR'U')R'FR2U'R'U'(RUR'F')",
"《按钮风格进化史》",
"《加载动画进化史》",
"《主题曲进化史》",
"↑↑↓↓←→←→BA",
"∫u dv=uv-∫v du",
"$include<studio.h>",
"0next 0hold.",
"11renPC",
@@ -860,7 +858,6 @@ return{
"请勿大力敲打设备敲坏了就没有Techmino玩了",
"请勿使用三只手游玩",
"全球目前应该没人能全X评价(大爆炸不算)",
"群友翻译的中文方块百科全书tetris.huijiwiki.com",
"如何O-spin: 一秒转626圈(误",
"三岁通关困难马拉松",
"少女祈祷中",
@@ -896,6 +893,7 @@ return{
"有两个模式是以东方Project里的角色为主题的",
"这不是休闲游戏……别怪关卡要求太高,多练吧",
"震惊我只是一条凑数tip吗",
"中文方块百科全书tetris.huijiwiki.com",
"众所周知俄罗斯方块是经典编程练手游戏(",
"众所周知mac不能拿来玩游戏",
"作业都没做完别玩手机",
@@ -910,13 +908,6 @@ return{
"B2B2B2B存在吗",
"c4w人竟是我自己",
"c4w人竟在我身边",
"cos(α+β)=CαCβ-SβSα",
"cos²α-cos²β=-S(α+β)S(α-β)",
"cos²α-sin²β=C(α+β)C(α-β)",
"cos2α=C²α-S²α",
"e^(πi)=-1",
"e^(πi/2)=i",
"e^(πi/4)=(1+i)/√2",
"fin neo iso 是满足tspin条件的特殊t2的名字",
"git commit",
"git push -f",
@@ -925,15 +916,9 @@ return{
"iOS设备使用键盘控制可能会有问题还是先只用触屏吧",
"l-=-1",
"Let-The-Bass-Kick",
"lim x→c f(x)/g(x)=lim x→c f'(x)/g'(x)",
"MrZ是谁啊",
"pps-0.01",
"S△ABC=√(h(h-a)(h-b)(h-c))h=(a+b+c)/2",
"shutdown -h now",
"sin(α+β)=SαCβ+SβCα",
"sin²α-cos²β=-C(α+β)C(α-β)",
"sin²α-sin²β=S(α+β)S(α-β)",
"sin2α=2SαCα",
"sofunhowtoget",
"STSD必死",
"sudo rm -rf /*",
@@ -1072,18 +1057,33 @@ return{
"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已发布版本”",
"Frt评[01]“成天被夸赞‘好玩’的”",
"Frt评[02]“可以形成方块圈子小中心话题,同作者一起衍生一些概念与梗的”",
"Frt评[03]“论方块的软工意义(就算这么小个范围内,各种取舍蒙混翻车现象都总会以很易懂的方式出现(”",
"Frt评[04]“民间微创新”",
"Frt评[05]“民间音lè与图案”",
"Frt评[06]“民间游戏设计”",
"Frt评[07]“是方块爱好者研究平台”",
"Frt评[08]“是方块萌新入坑接收器”",
"Frt评[09]“是居家旅行装逼必备”",
"Frt评[10]“是民间UI动效艺术作品”",
"Frt评[11]“是一滩散乱的代码组成的蜜汁结构”",
"Frt评[12]“它是现在的techmino已发布版本”",
"今日数学[01](a+b)³=a³+3a²b+3ab²+b³",
"今日数学[02]∫u dv=uv-∫v du",
"今日数学[03]cos(α+β)=CαCβ-SβSα",
"今日数学[04]cos²α-cos²β=-S(α+β)S(α-β)",
"今日数学[05]cos²α-sin²β=C(α+β)C(α-β)",
"今日数学[06]cos2α=C²α-S²α",
"今日数学[07]e^(πi)=-1",
"今日数学[08]e^(πi/2)=i",
"今日数学[09]e^(πi/4)=(1+i)/√2",
"今日数学[10]lim x→c f(x)/g(x)=lim x→c f'(x)/g'(x)",
"今日数学[11]S△ABC=√(h(h-a)(h-b)(h-c))h=(a+b+c)/2",
"今日数学[12]sin(α+β)=SαCβ+SβCα",
"今日数学[13]sin²α-cos²β=-C(α+β)C(α-β)",
"今日数学[14]sin²α-sin²β=S(α+β)S(α-β)",
"今日数学[15]sin2α=2SαCα",
"时间碎片[000] 2021/11/21加入这个版块",
"时间碎片[001] V0.0.091726加入TRS旋转系统",
"时间碎片[002] V0.7.9加入O-spin",
@@ -1148,9 +1148,9 @@ return{
{C.R,"《知识产权法》"},
{C.R,"本游戏难度上限很高,做好心理准备。"},
{C.R,"不要向不感兴趣的路人推荐!!!!!!!!"},
{C.R,"不要在上课时玩游戏!"},
{C.R,"光敏性癫痫警告"},
{C.R,"请在有一定游戏基础之后再学Tspin不然副作用非常大"},
{C.R,"上班时间不许摸鱼打块!"},
{C.R,"上课时间不许摸鱼打块!"},
{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,""},

View File

@@ -337,7 +337,7 @@ return{
title="游戏设置",
graphic="←视频",
sound="声音→",
layout="布局",
style="风格",
ctrl="控制设置",
key="键映射",

View File

@@ -336,9 +336,9 @@ return{
},
setting_game={
title="遊戲設置",
graphic="←畫面設置",
sound="音頻設置",
layout="外觀",
graphic="←畫面",
sound="音頻→",
style="風格",
ctrl="控制設置",
key="鍵位設置",
@@ -355,8 +355,8 @@ return{
},
setting_video={
title="畫面設置",
sound="←音頻設置",
game="遊戲設置",
sound="←音頻",
game="遊戲→",
block="方塊可見",
smooth="平滑下落",
@@ -402,8 +402,8 @@ return{
},
setting_sound={
title="音頻設置",
game="←遊戲設置",
graphic="畫面設置",
game="←遊戲",
graphic="畫面→",
mainVol="主音量",
bgm="音樂",

View File

@@ -1,7 +1,6 @@
return{
env={
infHold=true,
drop=1e99,lock=1e99,
eventSet='checkAttack_100',
bg='matrix',bgm='new era',
},

View File

@@ -16,6 +16,6 @@ return{
L>=120 and 3 or
L>=70 and 2 or
L>=40 and 1 or
L>=26 and 0
L>=16 and 0
end,
}

View File

@@ -16,6 +16,6 @@ return{
L>=80 and 3 or
L>=40 and 2 or
L>=20 and 1 or
L>=26 and 0
L>=10 and 0
end,
}

View File

@@ -1,14 +1,7 @@
local function selectTarget(P)
P:changeAtkMode(P.atkMode<3 and P.atkMode+2 or 5-P.atkMode)
P.swappingAtkMode=30
end
return{
env={
drop=60,lock=60,
fall=20,
royaleMode=true,
fkey1=selectTarget,
garbageSpeed=.3,
pushSpeed=2,
freshLimit=15,

View File

@@ -1,14 +1,7 @@
local function selectTarget(P)
P:changeAtkMode(P.atkMode<3 and P.atkMode+2 or 5-P.atkMode)
P.swappingAtkMode=30
end
return{
env={
drop=60,lock=60,
fall=20,
royaleMode=true,
fkey1=selectTarget,
garbageSpeed=.3,
pushSpeed=2,
freshLimit=15,

View File

@@ -1,14 +1,7 @@
local function selectTarget(P)
P:changeAtkMode(P.atkMode<3 and P.atkMode+2 or 5-P.atkMode)
P.swappingAtkMode=30
end
return{
env={
drop=15,lock=60,
fall=20,
royaleMode=true,
fkey1=selectTarget,
garbageSpeed=.3,
pushSpeed=2,
freshLimit=15,

View File

@@ -1,14 +1,7 @@
local function selectTarget(P)
P:changeAtkMode(P.atkMode<3 and P.atkMode+2 or 5-P.atkMode)
P.swappingAtkMode=30
end
return{
env={
drop=60,lock=60,
fall=20,
royaleMode=true,
fkey1=selectTarget,
garbageSpeed=.3,
pushSpeed=2,
freshLimit=15,

View File

@@ -1,14 +1,7 @@
local function selectTarget(P)
P:changeAtkMode(P.atkMode<3 and P.atkMode+2 or 5-P.atkMode)
P.swappingAtkMode=30
end
return{
env={
drop=60,lock=60,
fall=20,
royaleMode=true,
fkey1=selectTarget,
garbageSpeed=.3,
pushSpeed=2,
freshLimit=15,

View File

@@ -1,14 +1,7 @@
local function selectTarget(P)
P:changeAtkMode(P.atkMode<3 and P.atkMode+2 or 5-P.atkMode)
P.swappingAtkMode=30
end
return{
env={
drop=15,lock=60,
fall=20,
royaleMode=true,
fkey1=selectTarget,
garbageSpeed=.3,
pushSpeed=2,
freshLimit=15,

View File

@@ -240,8 +240,8 @@ function NET.uploadSave()
{section=3,data=STRING.packTable(SETTING)},
{section=4,data=STRING.packTable(KEY_MAP)},
{section=5,data=STRING.packTable(VK_ORG)},
{section=6,data=STRING.packTable(loadFile('conf/vkSave1'))},
{section=7,data=STRING.packTable(loadFile('conf/vkSave2'))},
{section=6,data=STRING.packTable(loadFile('conf/vkSave1','-canSkip')or{})},
{section=7,data=STRING.packTable(loadFile('conf/vkSave2','-canSkip')or{})},
}..'}}')
MES.new('info',"Uploading")
end
@@ -287,10 +287,12 @@ function NET.loadSavedData(sections)
TABLE.cover(NET.cloudData.VK_org,VK_ORG)
success=success and saveFile(VK_ORG,'conf/virtualkey')
success=success and saveFile(NET.cloudData.vkSave1,'conf/vkSave1')
success=success and saveFile(NET.cloudData.vkSave2,'conf/vkSave2')
if #NET.cloudData.vkSave1[1]then success=success and saveFile(NET.cloudData.vkSave1,'conf/vkSave1')end
if #NET.cloudData.vkSave2[1]then success=success and saveFile(NET.cloudData.vkSave2,'conf/vkSave2')end
if success then
MES.new('check',text.saveDone)
else
MES.new('warn',text.dataCorrupted)
end
end

View File

@@ -11,7 +11,7 @@ local int,ceil,rnd=math.floor,math.ceil,math.random
local max,min,sin,modf=math.max,math.min,math.sin,math.modf
local setFont,mDraw,mStr=FONT.set,GC.draw,GC.mStr
local SKIN,TEXTURE,IMG=SKIN,TEXTURE,IMG
local TEXT,COLOR,GAME,TIME=TEXT,COLOR,GAME,TIME
local TEXT,COLOR,TIME=TEXT,COLOR,TIME
local shader_alpha,shader_lighter=SHADER.alpha,SHADER.lighter
local shader_fieldSatur,shader_blockSatur=SHADER.fieldSatur,SHADER.blockSatur
local TEXTOBJ,ENUM_MISSION,BLOCK_COLORS=TEXTOBJ,ENUM_MISSION,BLOCK_COLORS
@@ -862,12 +862,12 @@ function draw.norm(P,repMode)
_drawLDI(ENV.easyFresh,P.lockDelay/ENV.lock,P.freshTime)
--Draw target selecting pad
if GAME.modeEnv.royaleMode then
if ENV.layout=='royale'then
if P.atkMode then
gc_setColor(1,.8,0,P.swappingAtkMode*.02)
gc_setColor(1,.8,0,min(P.swappingAtkMode,30)*.02)
gc_rectangle('fill',RCPB[2*P.atkMode-1],RCPB[2*P.atkMode],90,35,8,4)
end
gc_setColor(1,1,1,P.swappingAtkMode*.025)
gc_setColor(1,1,1,min(P.swappingAtkMode,30)*.025)
setFont(35)
gc_setLineWidth(1)
for i=1,4 do
@@ -953,7 +953,7 @@ function draw.small(P)
end
--Draw badge
if GAME.modeEnv.royaleMode then
if P.gameEnv.layout=='royale'then
gc_setColor(1,1,1)
for i=1,P.strength do
gc_draw(IMG.badgeIcon,12*i-7,4,nil,.5)

View File

@@ -53,6 +53,7 @@ return{
bufferLimit=1e99,
fillClear=true,
layout='normal',
fkey1=false,fkey2=false,
keyCancel={},
fine=false,fineKill=false,

View File

@@ -193,9 +193,9 @@ function Player:createBeam(R,send)
local c=BLOCK_COLORS[color]
local r,g,b=c[1]*2,c[2]*2,c[3]*2
local a=GAME.modeEnv.royaleMode and not(self.type=='human'or R.type=='human')and .2 or 1
SYSFX.newAttack(1-power*.1,x1,y1,x2,y2,int(send^.7*(4+power)),r,g,b,a*(power+2)*.0626)
local a=(power+2)*.0626
if self.type~='human'and R.type~='human'then a=a*.2 end
SYSFX.newAttack(1-power*.1,x1,y1,x2,y2,int(send^.7*(4+power)),r,g,b,a)
end
end
--------------------------</FX>--------------------------
@@ -1847,7 +1847,7 @@ do
end
--Bonus atk/def when focused
if GAME.modeEnv.royaleMode then
if ENV.layout=='royale'then
local i=min(#self.atker,9)
if i>1 then
atk=atk+reAtk[i]
@@ -1870,7 +1870,7 @@ do
off=off+_
if send>0 then
local T
if GAME.modeEnv.royaleMode then
if ENV.layout=='royale'then
if self.atkMode==4 then
local M=#self.atker
if M>0 then
@@ -2144,7 +2144,7 @@ local function task_lose(self)
return
end
end
if not GAME.modeEnv.royaleMode and #PLAYERS>1 then
if not self.gameEnv.layout=='royale'and #PLAYERS>1 then
self.y=self.y+self.endCounter*.26
self.absFieldY=self.absFieldY+self.endCounter*.26
end
@@ -2339,7 +2339,7 @@ local function update_alive(P)
P.dropSpeed=P.dropSpeed*.99+v*.01
end
if GAME.modeEnv.royaleMode then
if P.gameEnv.layout=='royale'then
local v=P.swappingAtkMode
local tar=#P.field>15 and 4 or 8
if v~=tar then
@@ -2596,7 +2596,7 @@ local function update_dead(P)
--Final average speed
P.dropSpeed=P.dropSpeed*.96+S.piece/S.frame*144
if GAME.modeEnv.royaleMode then
if P.gameEnv.layout=='royale'then
P.swappingAtkMode=min(P.swappingAtkMode+2,30)
end
@@ -2714,7 +2714,7 @@ function Player:win(result)
end
self:_die()
self.result='win'
if GAME.modeEnv.royaleMode then
if self.gameEnv.layout=='royale'then
self.modeData.place=1
self:changeAtk()
end
@@ -2729,7 +2729,7 @@ function Player:win(result)
GAME.result=result or'gamewin'
SFX.play('win')
VOC.play('win')
if GAME.modeEnv.royaleMode then
if self.gameEnv.layout=='royale'then
BGM.play('8-bit happiness')
end
end
@@ -2760,7 +2760,7 @@ function Player:lose(force)
self:_die()
self.result='lose'
do local p=TABLE.find(PLY_ALIVE,self)if p then rem(PLY_ALIVE,p)end end
if GAME.modeEnv.royaleMode then
if self.gameEnv.layout=='royale'then
self:changeAtk()
self.modeData.place=#PLY_ALIVE+1
self.strength=0
@@ -2802,7 +2802,7 @@ function Player:lose(force)
GAME.result='gameover'
SFX.play('fail')
VOC.play('lose')
if GAME.modeEnv.royaleMode then
if self.gameEnv.layout=='royale'then
BGM.play('end')
end
gameOver()

View File

@@ -428,8 +428,8 @@ function scene.draw()
setFont(55)
gc.setColor(1,1,1)
for i=1,7 do
local skin=SETTING.skin[i]
mStr(text.block[i],500+skin%8*80,90+80*int(skin/8))
local skin=SETTING.skin[i]-1
mStr(text.block[i],580+(skin%8)*80,90+80*int(skin/8))
end
end

View File

@@ -293,7 +293,7 @@ local function _update_common(dt)
for p=1,#PLAYERS do PLAYERS[p]:update(dt)end
--Fresh royale target
if GAME.modeEnv.royaleMode and PLAYERS[1].frameRun%120==0 then
if PLAYERS[1].frameRun%120==0 and PLAYERS[1].gameEnv.layout=='royale'then
freshMostDangerous()
end
@@ -339,7 +339,7 @@ function scene.draw()
VK.draw()
--Attacking & Being attacked
if GAME.modeEnv.royaleMode then
if PLAYERS[1].gameEnv.layout=='royale'then
local P=PLAYERS[1]
gc_setLineWidth(5)
gc_setColor(.8,1,0,.2)

View File

@@ -10,6 +10,7 @@ local function _login()
elseif #password==0 then
MES.new('error',text.noPassword)return
end
-- password=STRING.digezt(password)
NET.wsconn_user_pswd(email,password)
if savePW then
saveFile({email,password},'conf/account')

View File

@@ -55,11 +55,10 @@ function scene.keyDown(key,isRep)
if key=='return'or key=='space'then
if BGM.nowPlay~=bgmList[S]then
BGM.play(bgmList[S])
if SETTING.bgm>0 then
SFX.play('click')
end
SFX.play('click')
else
BGM.stop()
SFX.play('click')
end
elseif key=='tab'then
SCN.swapTo('launchpad','none')
@@ -126,7 +125,7 @@ scene.widgetList={
},
WIDGET.newSlider{name='bgm', x=760,y=80,w=400,disp=SETval('bgm'),code=function(v)SETTING.bgm=v BGM.setVol(SETTING.bgm)end},
WIDGET.newButton{name='up', x=200,y=250,w=120,code=pressKey'up',hideF=function()return selected==1 end,font=60,fText=CHAR.key.up},
WIDGET.newButton{name='play', x=200,y=390,w=120,code=pressKey'space',font=65,fText=CHAR.icon.play_pause},
WIDGET.newButton{name='play', x=200,y=390,w=120,code=pressKey'space',sound=false,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,sound='back',fText=CHAR.icon.back,code=backScene},

View File

@@ -36,7 +36,7 @@ scene.widgetList={
WIDGET.newButton{name='graphic', x=200, y=80, w=240,h=80,color='lC',font=35,code=swapScene('setting_video','swipeR')},
WIDGET.newButton{name='sound', x=1080, y=80, w=240,h=80,color='lC',font=35,code=swapScene('setting_sound','swipeL')},
WIDGET.newButton{name='layout', x=250, y=540, w=200,h=70,font=35,code=goScene'setting_skin'},
WIDGET.newButton{name='style', x=250, y=540, w=200,h=70,font=35,code=goScene'setting_skin'},
WIDGET.newButton{name='ctrl', x=290, y=220, w=320,h=80,font=35,code=goScene'setting_control'},
WIDGET.newButton{name='key', x=640, y=220, w=320,h=80,color=MOBILE and'dH',font=35, code=goScene'setting_key'},

View File

@@ -78,43 +78,42 @@ local function _nextDir(i)
end
playEgg.hide=not selEggMode
end
SFX.play('rotate')
end
scene.widgetList={
WIDGET.newText{name='title', x=80,y=50,font=70,align='L'},
WIDGET.newSelector{name='skinSet',x=780,y=100,w=320,list=SKIN.getList(),disp=SETval('skinSet'),code=SETsto('skinSet')},
WIDGET.newButton{name='prev1', x=130,y=220,w=80,h=65,fText="",code=function()_prevSkin(1)end},
WIDGET.newButton{name='prev2', x=270,y=220,w=80,h=65,fText="",code=function()_prevSkin(2)end},
WIDGET.newButton{name='prev3', x=410,y=220,w=80,h=65,fText="",code=function()_prevSkin(3)end},
WIDGET.newButton{name='prev4', x=550,y=220,w=80,h=65,fText="",code=function()_prevSkin(4)end},
WIDGET.newButton{name='prev5', x=690,y=220,w=80,h=65,fText="",code=function()_prevSkin(5)end},
WIDGET.newButton{name='prev6', x=830,y=220,w=80,h=65,fText="",code=function()_prevSkin(6)end},
WIDGET.newButton{name='prev7', x=970,y=220,w=80,h=65,fText="",code=function()_prevSkin(7)end},
WIDGET.newButton{name='prev1', x=130,y=220,w=80,h=65,sound='hold',font=40,fText="",code=function()_prevSkin(1)end},
WIDGET.newButton{name='prev2', x=270,y=220,w=80,h=65,sound='hold',font=40,fText="",code=function()_prevSkin(2)end},
WIDGET.newButton{name='prev3', x=410,y=220,w=80,h=65,sound='hold',font=40,fText="",code=function()_prevSkin(3)end},
WIDGET.newButton{name='prev4', x=550,y=220,w=80,h=65,sound='hold',font=40,fText="",code=function()_prevSkin(4)end},
WIDGET.newButton{name='prev5', x=690,y=220,w=80,h=65,sound='hold',font=40,fText="",code=function()_prevSkin(5)end},
WIDGET.newButton{name='prev6', x=830,y=220,w=80,h=65,sound='hold',font=40,fText="",code=function()_prevSkin(6)end},
WIDGET.newButton{name='prev7', x=970,y=220,w=80,h=65,sound='hold',font=40,fText="",code=function()_prevSkin(7)end},
WIDGET.newButton{name='next1', x=130,y=440,w=80,h=65,fText="",code=function()_nextSkin(1)end},
WIDGET.newButton{name='next2', x=270,y=440,w=80,h=65,fText="",code=function()_nextSkin(2)end},
WIDGET.newButton{name='next3', x=410,y=440,w=80,h=65,fText="",code=function()_nextSkin(3)end},
WIDGET.newButton{name='next4', x=550,y=440,w=80,h=65,fText="",code=function()_nextSkin(4)end},
WIDGET.newButton{name='next5', x=690,y=440,w=80,h=65,fText="",code=function()_nextSkin(5)end},
WIDGET.newButton{name='next6', x=830,y=440,w=80,h=65,fText="",code=function()_nextSkin(6)end},
WIDGET.newButton{name='next7', x=970,y=440,w=80,h=65,fText="",code=function()_nextSkin(7)end},
WIDGET.newButton{name='next1', x=130,y=440,w=80,h=65,sound='hold',font=40,fText="",code=function()_nextSkin(1)end},
WIDGET.newButton{name='next2', x=270,y=440,w=80,h=65,sound='hold',font=40,fText="",code=function()_nextSkin(2)end},
WIDGET.newButton{name='next3', x=410,y=440,w=80,h=65,sound='hold',font=40,fText="",code=function()_nextSkin(3)end},
WIDGET.newButton{name='next4', x=550,y=440,w=80,h=65,sound='hold',font=40,fText="",code=function()_nextSkin(4)end},
WIDGET.newButton{name='next5', x=690,y=440,w=80,h=65,sound='hold',font=40,fText="",code=function()_nextSkin(5)end},
WIDGET.newButton{name='next6', x=830,y=440,w=80,h=65,sound='hold',font=40,fText="",code=function()_nextSkin(6)end},
WIDGET.newButton{name='next7', x=970,y=440,w=80,h=65,sound='hold',font=40,fText="",code=function()_nextSkin(7)end},
WIDGET.newButton{name='spin1', x=130,y=540,w=80,h=65,code=function()_nextDir(1)end,font=50,fText=CHAR.icon.retry_spin},
WIDGET.newButton{name='spin2', x=270,y=540,w=80,h=65,code=function()_nextDir(2)end,font=50,fText=CHAR.icon.retry_spin},
WIDGET.newButton{name='spin3', x=410,y=540,w=80,h=65,code=function()_nextDir(3)end,font=50,fText=CHAR.icon.retry_spin},
WIDGET.newButton{name='spin4', x=550,y=540,w=80,h=65,code=function()_nextDir(4)end,font=50,fText=CHAR.icon.retry_spin},
WIDGET.newButton{name='spin5', x=690,y=540,w=80,h=65,code=function()_nextDir(5)end,font=50,fText=CHAR.icon.retry_spin},
WIDGET.newButton{name='spin6', x=825,y=540,w=80,h=65,code=function()_nextDir(6)end,font=50,fText=CHAR.icon.retry_spin},
WIDGET.newButton{name='spin7', x=970,y=540,w=80,h=65,code=function()_nextDir(7)end,font=50,fText=CHAR.icon.retry_spin},
WIDGET.newButton{name='spin1', x=130,y=540,w=80,h=65,sound='rotate',font=40,code=function()_nextDir(1)end,fText=CHAR.icon.retry_spin},
WIDGET.newButton{name='spin2', x=270,y=540,w=80,h=65,sound='rotate',font=40,code=function()_nextDir(2)end,fText=CHAR.icon.retry_spin},
WIDGET.newButton{name='spin3', x=410,y=540,w=80,h=65,sound='rotate',font=40,code=function()_nextDir(3)end,fText=CHAR.icon.retry_spin},
WIDGET.newButton{name='spin4', x=550,y=540,w=80,h=65,sound='rotate',font=40,code=function()_nextDir(4)end,fText=CHAR.icon.retry_spin},
WIDGET.newButton{name='spin5', x=690,y=540,w=80,h=65,sound='rotate',font=40,code=function()_nextDir(5)end,fText=CHAR.icon.retry_spin},
WIDGET.newButton{name='spin6', x=825,y=540,w=80,h=65,sound='rotate',font=40,code=function()_nextDir(6)end,fText=CHAR.icon.retry_spin},
WIDGET.newButton{name='spin7', x=970,y=540,w=80,h=65,sound='rotate',font=40,code=function()_nextDir(7)end,fText=CHAR.icon.retry_spin},
WIDGET.newButton{name='skinR', x=200,y=640,w=220,h=80,color='lV',font=35,
WIDGET.newButton{name='skinR', x=200,y=640,w=220,h=80,color='lV',font=35,sound='back',
code=function()
SETTING.skin={1,7,11,3,14,4,9,1,7,2,6,10,2,13,5,9,15,10,11,3,10,2,16,8,4,10,13,2,8}
SFX.play('rotate')
end},
WIDGET.newButton{name='faceR', x=480,y=640,w=220,h=80,color='lR',font=35,
WIDGET.newButton{name='faceR', x=480,y=640,w=220,h=80,color='lR',font=35,sound='back',
code=function()
for i=1,29 do
SETTING.face[i]=0

View File

@@ -12,6 +12,19 @@ return[=[
更自由的攻击系统; 更多消除方式; 可调场地宽度;
task-Z(新AI); 自适应UI; 新联网游戏场景切换逻辑
0.17.1: 醒来 Wake Up
新增:
--TODO
改动:
修改选择模式音效
优化皮肤设置页面交互效果
略微降低master-h模式骨块出现后的难度
修复:
自定义场地16号色的方块名位置显示错误
登录界面读取本地账号密码数据错误
策略堆叠模式评级标准不当
云存档/读档的一处小问题
0.17.0: 硬着陆 Hard Landing
新增:
新模式:策略堆叠(原设计来自游戏Cambridge by Milla, NOT_A_ROBOT移植)
@@ -62,6 +75,7 @@ return[=[
软降在sddas/sdarr很小的时候行为不正确
机翻语言超级消除无行数显示 #462
竞速-效率左侧信息颜色问题
攻击竞速模式无重力
0.16.5: 新世界 New World
新增:

View File

@@ -1,7 +1,7 @@
return{
["apkCode"]=417,
["code"]=1700,
["string"]="V0.17.0",
["apkCode"]=419,
["code"]=1701,
["string"]="V0.17.1",
["room"]="ver A-2",
["name"]="硬着陆 Hard Landing",
["name"]="醒来 Wake Up",
}