Compare commits

...

20 Commits

Author SHA1 Message Date
MrZ626
07b47dee3f 版本推进 2021-11-30 01:50:13 +08:00
MrZ626
4431a906b9 整理代码 2021-11-30 01:44:21 +08:00
NOT_A_ROBOT
2bb6852e3e Added multiple bg and bgm to Strategy Mode (#506)
(excluding strategy_e for the bgm)
2021-11-30 01:42:39 +08:00
user670
1948ed3e16 Update gameTables.lua (#508)
On an XBox controller, B is on the right and A is on the bottom (unlike a Nintendo controller), and it makes more sense to default B to rotate right and A to rotate left.
2021-11-30 01:42:02 +08:00
MrZ626
81b5ccae30 修复检测第一次启动失败 2021-11-30 01:40:53 +08:00
MrZ626
5543ff0d29 新小程序:Triple 2021-11-30 01:40:49 +08:00
MrZ626
cd567e9e98 删除添加作者qq按钮 2021-11-30 01:40:01 +08:00
MrZ626
5d86925a8a 大多数菜单的二次确认统一用tryXXX管理 2021-11-30 01:40:01 +08:00
MrZ626
e3db564a4b 整理代码,返回需要二次确认的小程序统一用一个函数 2021-11-30 01:40:01 +08:00
MrZ626
a4293624ab 微调wine颜色 2021-11-29 22:24:17 +08:00
MrZ626
367e2dc81a 新增几个tip 2021-11-29 21:32:09 +08:00
MrZ626
9ec33c6eef 修改BGM: sugar fairy的作者标注 2021-11-29 21:32:08 +08:00
MrZ626
9c9b8d36f2 小程序mem平衡调整 2021-11-29 21:32:08 +08:00
MrZ626
4fc6f335c7 新增小程序:Memorize 2021-11-29 15:40:55 +08:00
MrZ626
d2f4123d08 修改两个有数字键盘的小程序的退格键图标 2021-11-29 15:40:40 +08:00
MrZ626
b29d352a1b 把主菜单快捷键加回来 2021-11-29 12:57:17 +08:00
MrZ626
cd5a71cd12 更新赞助名单 2021-11-29 12:49:58 +08:00
MrZ626
cdd68e985d 修正键位设置菜单里mac的del键符号错误 2021-11-29 11:15:24 +08:00
MrZ626
8cf4d4280c 修正Ospin变O后操作序列不清空
Ospin变远端朝下JL时允许水平可移动
2021-11-29 11:11:54 +08:00
C29H25N3O5
cd29bf8702 调整字体
* Monospaced字体简中字库使用大陆标准字形, 日语部分仍然使用日语字形
* 调整自定义图标手柄和键盘部分的文字字体
* 修复proportional字体a的变音符没对齐的问题
* 修复Monospaced字体ij连字的问题
* 修复Monospaced字体slash还用的是plex字体的问题
2021-11-28 18:24:11 -06:00
50 changed files with 690 additions and 271 deletions

View File

@@ -31,7 +31,7 @@ local COLOR={
violet= {hsv(0.73, 1.00, 0.91)},
purple= {hsv(0.80, 1.00, 0.81)},
magenta= {hsv(0.86, 1.00, 0.78)},
wine= {hsv(0.94, 0.96, 0.91)},
wine= {hsv(0.92, 0.98, 0.91)},
lRed= {hsv(0.00, 0.38, 0.93)},
lFire= {hsv(0.04, 0.45, 0.91)},

View File

@@ -415,7 +415,6 @@ do
local needSave
if not fs.getInfo('conf/data')then
FIRSTLAUNCH=true
needSave=true
end
if type(STAT.version)~='number'then
@@ -559,7 +558,8 @@ do
end
end
--First start for phones
--First start
FIRSTLAUNCH=STAT.run==0
if FIRSTLAUNCH and MOBILE then
SETTING.VKSwitch=true
SETTING.powerInfo=true

View File

@@ -97,12 +97,12 @@ do
{131,2,2, 0, 0,0},{131,2,2,-1,-1,0},{131,2,2,-1, 0,0},--S
{131,1,2,-1, 0,0},{131,1,2, 0,-1,0},{131,1,2, 0, 0,0},--Z(misOrder)
{313,2,2, 0, 0,0},{313,2,2,-1,-1,0},{313,2,2,-1, 0,0},--S(misOrder)
{331,3,2, 0,-1,0},--J(farDown)
{113,4,2,-1,-1,0},--L(farDown)
{331,3,2, 0,-1,1},--J(farDown)
{113,4,2,-1,-1,1},--L(farDown)
{113,3,2,-1,-1,0},{113,3,0, 0, 0,0},--J
{331,4,2, 0,-1,0},{331,4,0,-1, 0,0},--L
{222,7,2,-1, 0,2},{222,7,2,-2, 0,2},{222,7,2, 0, 0,2},--I
{222,7,0,-1, 1,1},{222,7,0,-2, 1,1},{222,7,0, 0, 1,1},--I(high)
{222,7,2,-1, 0,2},{222,7,2,-2, 0,2},{222,7,2, 0, 0,2},--I(low)
{121,6,0, 1,-1,2},{112,6,0, 2,-1,2},{122,6,0, 1,-2,2},--O
{323,6,0,-1,-1,2},{332,6,0,-2,-1,2},{322,6,0,-1,-2,2},--O
}--{keys, ID, dir, dx, dy, freeLevel (0=immovable, 1=U/D-immovable, 2=free)}
@@ -204,6 +204,7 @@ do
P.spinLast=2
P.stat.rotate=P.stat.rotate+1
P:freshBlock('move')
C.spinSeq=nil
return
end
end

View File

@@ -18,8 +18,15 @@ return
if P.modeData.target==200 then
P:win('finish')
else
if P.modeData.target==100 then
if P.modeData.target==40 then
BG.set('rainbow')
elseif P.modeData.target==80 then
BG.set('rainbow2')
elseif P.modeData.target==100 then
BG.set('glow')
P.modeData.lock=6
elseif P.modeData.target==120 then
BG.set('lightning')
end
P.gameEnv.wait=waitSpeed[P.modeData.target/10]
P.modeData.target=P.modeData.target+10

View File

@@ -18,8 +18,16 @@ return
if P.modeData.target==200 then
P:win('finish')
else
if P.modeData.target==100 then
if P.modeData.target==40 then
BG.set('rainbow')
elseif P.modeData.target==80 then
BG.set('rainbow2')
elseif P.modeData.target==100 then
BG.set('glow')
P.modeData.lock=5
BGM.play('secret8th remix')
elseif P.modeData.target==120 then
BG.set('lightning')
end
P.gameEnv.wait=waitSpeed[P.modeData.target/10]
P.modeData.target=P.modeData.target+10

View File

@@ -18,8 +18,16 @@ return
if P.modeData.target==200 then
P:win('finish')
else
if P.modeData.target==100 then
if P.modeData.target==40 then
BG.set('rainbow')
elseif P.modeData.target==80 then
BG.set('rainbow2')
elseif P.modeData.target==100 then
BG.set('glow')
P.modeData.lock=4
BGM.play('secret7th remix')
elseif P.modeData.target==120 then
BG.set('lightning')
end
P.gameEnv.wait=waitSpeed[P.modeData.target/10]
P.modeData.target=P.modeData.target+10

Binary file not shown.

Binary file not shown.

View File

@@ -15,6 +15,42 @@ local playSFX=SFX.play
--System
do--function tryBack()
local sureTime=-1e99
function tryBack()
if TIME()-sureTime<1 then
sureTime=-1e99
return true
else
sureTime=TIME()
MES.new('warn',text.sureQuit)
end
end
end
do--function tryReset()
local sureTime=-1e99
function tryReset()
if TIME()-sureTime<1 then
sureTime=-1e99
return true
else
sureTime=TIME()
MES.new('warn',text.sureReset)
end
end
end
do--function tryDelete()
local sureTime=-1e99
function tryDelete()
if TIME()-sureTime<1 then
sureTime=-1e99
return true
else
sureTime=TIME()
MES.new('warn',text.sureDelete)
end
end
end
do--function loadFile(name,args), function saveFile(data,name,args)
local t=setmetatable({},{__index=function()return"'$1' loading failed: $2"end})
function loadFile(name,args)

View File

@@ -675,7 +675,7 @@ do--Userdata tables
r=0,
},
joystick={
dpleft=1,dpright=2,a=3,b=4,y=5,
dpleft=1,dpright=2,b=3,a=4,y=5,
dpup=6,dpdown=7,rightshoulder=8,x=9,
leftshoulder=0,
},
@@ -722,4 +722,4 @@ do--Userdata tables
date=false,
todayTime=0,
}
end
end

View File

@@ -12,6 +12,7 @@ return{
},
sureQuit="Press again to quit",
sureReset="Press again to reset",
sureDelete="Press again to delete",
newDay="A new day, a new beginning!",
playedLong="You have been playing for a long time. Time to a break!",
playedTooMuch="You have been playing for far too long! Techmino is fun, but remember to take some rests!",
@@ -506,7 +507,7 @@ return{
play_clear="Start-Clear",
play_puzzle="Start-Puzzle",
reset="Reset (Del)",
reset="Reset (del)",
advance="More (A)",
mod="Mods (F1)",
field="Edit Field (F)",
@@ -578,7 +579,6 @@ return{
staff="Staff",
his="History",
legals="Legals",
qq="Author's QQ",
},
dict={
title="TetroDictionary",
@@ -625,7 +625,6 @@ return{
title="Account",
},
app_15p={
reset="Shuffle",
color="Color",
invis="Invis",
slide="Slide",
@@ -633,42 +632,33 @@ return{
revKB="Reverse",
},
app_schulteG={
reset="Reset",
rank="Size",
invis="Invis",
disappear="Hide",
tapFX="Tap FX",
},
app_pong={
reset="Restart",
},
app_AtoZ={
level="Level",
keyboard="Keyboard",
reset="Reset",
},
app_2048={
reset="Reset",
invis="Invis",
tapControl="Tap controls",
skip="Skip Round",
},
app_ten={
reset="Reset",
next="Next",
invis="Invis",
fast="Fast",
},
app_dtw={
reset="Reset",
color="Color",
mode="Mode",
bgm="BGM",
arcade="Arcade",
},
app_link={
reset="Reset",
invis="Invis",
},
savedata={

View File

@@ -2,6 +2,7 @@ return{
fallback='en',
sureQuit="Pulsa de nuevo para salir",
-- sureReset="Press again to reset",
-- sureDelete="Press again to delete",
newDay="[Anti-adicción] ¡Nuevo día, nuevo comienzo!",
playedLong="[Anti-adicción] Estuviste jugando un buen rato hoy. Recuerda descansar de vez en cuando.",
playedTooMuch="[Anti-adicción] ¡Has jugado mucho por hoy! No puedes jugar más.",
@@ -535,7 +536,6 @@ return{
staff="Staff",
his="Hist. de Acts.",
-- legals="Legals",
qq="QQ del Autor",
},
dict={
title="TetroDictionary",
@@ -583,7 +583,6 @@ return{
title="Cuenta",
},
app_15p={
reset="Mezclar",
color="Color",
invis="A ciegas",
slide="Mover",
@@ -591,46 +590,34 @@ return{
revKB="Deshacer",
},
app_schulteG={
reset="Reiniciar",
rank="Tamaño",
invis="A ciegas",
disappear="No mostrar",
tapFX="Sonido al pulsar",
},
app_pong={
reset="Reiniciar",
},
app_AtoZ={
level="Nivel",
keyboard="Teclado",
reset="Reiniciar",
},
app_2048={
reset="Reiniciar",
invis="A ciegas",
tapControl="Control táctil",
skip="Saltar ronda",
},
app_ten={
reset="Reiniciar",
next="Siguiente",
invis="A ciegas",
fast="Rápido",
},
app_dtw={
reset="Reiniciar",
color="Color",
mode="Modo",
bgm="BGM",
arcade="Arcade",
},
app_link={
reset="Reiniciar",
invis="A ciegas",
},
app_arithmetic={
reset="Reiniciar",
},
savedata={
export="Exportar al portapapeles",
import="Importar de portapapeles",

View File

@@ -2,6 +2,7 @@ return{
fallback='en',
sureQuit="Appuyez à nouveau pour sortir",
-- sureReset="Press again to reset",
-- sureDelete="Press again to delete",
newDay="[Anti-addiction] Nouveau jour, nouveau commencement !",
playedLong="[Anti-addiction] Vous avez joué pendant un bon bout de temps aujourd'hui. Faites des pauses.",
playedTooMuch="[Anti-addiction] Vous avez joué trop longtemps ! Vous ne pouvez plus jouer.",
@@ -472,7 +473,7 @@ return{
play_clear="Démarrer Clear",
play_puzzle="Démarrer Puzzle",
-- reset="Reset (Del)",
-- reset="Reset (del)",
advance="Plus (A)",
mod="Mods (F1)",
field="Modifier la matrice (F)",
@@ -578,7 +579,6 @@ return{
title="Compte",
},
app_15p={
reset="Réinitialiser",
color="Couleur",
invis="Aveugler",
slide="Glisser",
@@ -586,34 +586,26 @@ return{
revKB="Inverser",
},
app_schulteG={
reset="Réinitialiser",
rank="Taille",
invis="Aveugler",
disappear="Cacher",
tapFX="Effet quand tapé",
},
app_pong={
reset="Redémarrer",
},
app_AtoZ={
level="niveau",
keyboard="Clavier",
reset="Redémarrer",
},
app_2048={
reset="Réinitialiser",
invis="Aveugler",
tapControl="Contrôle par toucher",
skip="Passer Round",
},
app_ten={
reset="Réinitialiser",
next="Prévisualisations",
invis="Aveugler",
-- fast="Fast",
},
app_dtw={
reset="Réinitialiser",
color="Couleur",
mode="Mode",
bgm="Musique",
@@ -623,15 +615,10 @@ return{
staff="Staff",
his="History",
-- legals="Legals",
qq="QQ du créateur",
},
app_link={
reset="Réinitialiser",
invis="Aveugler",
},
app_arithmetic={
reset="Réinitialiser",
},
savedata={
-- export="Export to clipboard",
-- import="Import from clipboard",

View File

@@ -3,6 +3,7 @@ return{
fallback='en',
sureQuit="Aparte novamente para sair",
-- sureReset="Press again to reset",
-- sureDelete="Press again to delete",
newDay="[Anti-vício] Novo dia, um começo novo!",
playedLong="[Anti-vício] Você andou jogando bastante hoje. Certifique-se de fazer pausas.",
playedTooMuch="[Anti-vício] Você esteve jogando demais hoje! Você não pode jogar mais.",
@@ -494,7 +495,7 @@ return{
play_clear="Iniciar-Limpar",
play_puzzle="Iniciar-Puzzle",
-- reset="Reset (Del)",
-- reset="Reset (del)",
advance="Mais (A)",
mod="Mods (F1)",
field="Editar Tab. (F)",
@@ -566,7 +567,6 @@ return{
staff="Staff",
his="History",
-- legals="Legals",
qq="Author's qq",
},
dict={
title="TetroDictionary",
@@ -614,7 +614,6 @@ return{
title="Conta",
},
app_15p={
reset="Embaralhar",
C="Cor",
invis="Cego",
slide="Deslizar",
@@ -622,46 +621,34 @@ return{
revKB="Reverso",
},
app_schulteG={
reset="Resetar",
rank="Tamanho",
invis="Cego",
disappear="Escond.",
tapFX="FX De Toque",
},
app_pong={
reset="Reiniciar",
},
app_AtoZ={
level="Nivel",
keyboard="Teclado",
reset="Reiniciar",
},
app_2048={
reset="Resetar",
invis="Cego",
-- tapControl="Tap control",
-- skip="Skip Round",
},
app_ten={
reset="Resetar",
next="Próxima",
invis="Cego",
-- fast="Fast",
},
app_dtw={
reset="Resetar",
-- color="Color",
-- mode="Mode",
bgm="BGM",
-- arcade="Arcade",
},
app_link={
reset="Resetar",
invis="Cego",
},
app_arithmetic={
reset="Resetar",
},
savedata={
-- export="Export to clipboard",
-- import="Import from clipboard",

View File

@@ -14,6 +14,7 @@ return{
sureQuit="X?",
sureReset="R?",
sureDelete="D?",
newDay="→→!→→",
playedLong="→→→→!, XX□XX!",
playedTooMuch="→→→→→→→→→→→!, XX□XX!!!!!!!",
@@ -149,7 +150,7 @@ return{
},
mod={
title="?!?!?!",
reset="R",
reset="R (tab)",
unranked="X!!!",
},
pause={
@@ -396,7 +397,7 @@ return{
play_clear="Start-Clear",
play_puzzle="Start-Puzzle",
reset="Reset (Del)",
reset="Reset (del)",
advance="More (A)",
mod="?!?!?! (F1)",
field="Edit Field (F)",
@@ -461,7 +462,6 @@ return{
staff="Orz",
his="_&_",
legals="",
qq="_@_",
},
dict={
title="TetroDictionary",
@@ -508,7 +508,6 @@ return{
title="@_@",
},
app_15p={
reset="!@#$%",
color="~~~",
invis="???",
slide="~_~",
@@ -516,34 +515,26 @@ return{
revKB="Reverse",
},
app_schulteG={
reset="!@#$%",
rank="←?→",
invis="???",
disappear="=X=",
tapFX="↓ !",
},
app_pong={
reset="R",
},
app_AtoZ={
level="_ _ _",
keyboard="[##]",
reset="R",
},
app_2048={
reset="R",
invis="???",
tapControl="_↓",
skip=">>",
},
app_ten={
reset="R",
next="",
invis="???",
fast="~~→",
},
app_dtw={
reset="R",
color="~~~",
mode="?",
bgm="#~#",

View File

@@ -140,7 +140,6 @@ return{fallback='zh',
staff="游戏谁写的",
his="黑历史",
legals="正经人谁看啊",
qq="QQ对线",
},
register={
password2="你懂的",

View File

@@ -12,6 +12,7 @@ return{
},
sureQuit="再按一次退出",
sureReset="再按一次重置",
sureDelete="再按一次删除",
newDay="新的一天,新的开始~",
playedLong="已经玩很久了!注意休息!",
playedTooMuch="今天玩太久啦!打块好玩但也要适可而止哦~",
@@ -505,7 +506,7 @@ return{
play_clear="开始-消除",
play_puzzle="开始-拼图",
reset="重置所有(Del)",
reset="重置所有(del)",
advance="更多设置(A)",
mod="Mods (F1)",
field="场地编辑(F)",
@@ -593,7 +594,6 @@ return{
staff="制作人员",
his="更新历史",
legals="法律信息",
qq="作者QQ",
},
dict={
title="小Z方块词典",
@@ -624,7 +624,6 @@ return{
title="帐户",
},
app_15p={
reset="打乱",
color="颜色",
invis="盲打",
slide="滑动操作",
@@ -632,50 +631,35 @@ return{
revKB="键盘反向",
},
app_schulteG={
reset="重来",
rank="尺寸",
invis="盲打",
disappear="消失",
tapFX="点击动画",
},
app_pong={
reset="重置",
},
app_AtoZ={
level="关卡",
keyboard="键盘",
reset="重置",
},
app_UTTT={
reset="重置",
},
app_2048={
reset="重置",
invis="盲打",
tapControl="点击操作",
skip="跳过回合",
},
app_ten={
reset="重置",
next="预览",
invis="盲打",
fast="速打",
},
app_dtw={
reset="重置",
color="颜色",
mode="模式",
bgm="音乐",
arcade="街机",
},
app_link={
reset="重置",
invis="盲打",
},
app_arithmetic={
reset="重置",
},
savedata={
export="导出到剪切板",
import="从剪切板导入",
@@ -854,6 +838,7 @@ return{
"触摸板打osu也很好",
"凑数tip什么时候能站起来",
"打好块跟学习一样没有捷径,多练。",
"打铁.png",
"打网络对战前请确认自己有一定的水平,不然会毫无游戏体验的",
"大概还是有人会看tip的",
"大量使用开局定式的数据是不准的",
@@ -944,6 +929,7 @@ return{
"你们考虑过Z酱的感受吗没有你们只考虑你自己。",
"你说彩蛋?嗯…算是有,可以找找",
"你有一个好",
"你这场地是金子堆的还是块是金子做的",
"你知道吗[001]看主页机器人玩可能比较费电",
"你知道吗[002]全程不使用任何旋转键完成40行模式是有可能的",
"你知道吗[003]全程不使用左右移动键完成40行模式是有可能的",
@@ -1129,6 +1115,7 @@ return{
"while(false)",
"Z酱竟是我自己",
"Z酱累了Z酱不想更新",
"Z酱是谁",
"Z酱只是个写代码的懂什么方块",
"Z块等身抱枕来一个(x",
{C.C,"<PURE ",C.P,"MEMORY>"},
@@ -1170,6 +1157,8 @@ return{
{C.R,"DT",C.Z,"炮=",C.P,"TS",C.R,"D",C.Z,"+",C.P,"TS",C.R,"T",C.Z,""},
{C.R,"LrL ",C.G,"RlR ",C.B,"LLr ",C.O,"RRl ",C.P,"RRR LLL ",C.C,"FFF ",C.Y,"RfR RRf rFF"},
{C.W,"uid:225238922"},
{C.Y,"<φ> 10000"},
{C.Y,"10000 φ"},
{C.Y,"暂定段位:GM"},
{C.Y,"暂定段位:M"},
{C.Y,"暂定段位:MK"},

View File

@@ -12,6 +12,7 @@ return{
},
sureQuit="再次按退出",
sureReset="再次按下可重置",
sureDelete="再次按可删除",
newDay="新的一天,新的开始!",
playedLong="你已经玩了很长时间了。一定要好好休息!",
playedTooMuch="你玩得太久了!玩方块游戏很有趣,但现在是休息的时候了。",
@@ -503,7 +504,7 @@ return{
play_clear="清场",
play_puzzle="开始拼图",
reset="复位(Del)",
reset="复位(del)",
advance="更多(A)",
mod="多重器官衰竭(F1)",
field="编辑字段(F)",
@@ -575,7 +576,6 @@ return{
staff="工作人员",
his="历史",
legals="法律",
qq="作者QQ",
},
dict={
title="四联词典",
@@ -622,7 +622,6 @@ return{
title="帐户",
},
app_15p={
reset="洗牌",
color="颜色",
invis="英维斯",
slide="滑动",
@@ -635,9 +634,6 @@ return{
disappear="隐藏",
tapFX="Tap外汇",
},
app_pong={
reset="重新启动",
},
app_AtoZ={
level="水平仪",
keyboard="键盘",

View File

@@ -12,6 +12,7 @@ return{
},
sureQuit="再按一次退出",
sureReset="再按一次重設",
sureDelete="再按一次删除",
newDay="新的一天,新的開始~",
playedLong="你玩太久了!注意休息!",
playedTooMuch="今天玩得太久啦Techmino好玩但也要注意休息哦~",
@@ -504,7 +505,7 @@ return{
play_clear="開始-清除",
play_puzzle="開始-拼圖",
reset="重設所有(Del)",
reset="重設所有(del)",
advance="更多設置(A)",
mod="Mods (F1)",
field="場地編輯(F)",
@@ -592,7 +593,6 @@ return{
staff="製作人員",
his="更新曆史",
legals="法律信息",
qq="作者QQ",
},
dict={
title="小Z方塊詞典",
@@ -623,7 +623,6 @@ return{
title="賬戶",
},
app_15p={
reset="打亂",
color="顏色",
invis="盲打",
slide="滑動操作",
@@ -631,50 +630,35 @@ return{
revKB="鍵盤反向",
},
app_schulteG={
reset="重新啟動",
rank="尺寸",
invis="盲打",
disappear="消失",
tapFX="點擊動畫",
},
app_pong={
reset="重設",
},
app_AtoZ={
level="等級",
keyboard="鍵盤",
reset="重設",
},
app_UTTT={
reset="重設",
},
app_2048={
reset="重設",
invis="盲打",
tapControl="點擊操作",
skip="跳過回合",
},
app_ten={
reset="重設",
next="預覽",
invis="盲打",
fast="速打",
},
app_dtw={
reset="重設",
color="顏色",
mode="模式",
bgm="音樂",
arcade="街機",
},
app_link={
reset="重設",
invis="盲打",
},
app_arithmetic={
reset="重設",
},
savedata={
export="導出到剪貼板",
import="從剪貼板導入",

View File

@@ -128,4 +128,5 @@ return{
{font=25,name="Hathtiz"},
{font=25,name="江江江江17"},
{font=25,name="TetraCepra"},
{font=25,name="爱抢姐姐布丁的芙兰酱(CHNO)"},
}

View File

@@ -57,9 +57,8 @@ scene.widgetList={
WIDGET.newImage{name='pay1', x=20, y=20,hide=SYSTEM=='iOS'},
WIDGET.newImage{name='pay2', x=1014,y=20,hide=SYSTEM=='iOS'},
WIDGET.newButton{name='staff', x=1140,y=380,w=220,h=80,font=35,code=goScene'staff'},
WIDGET.newButton{name='his', x=1140,y=470,w=220,h=80,font=35,code=goScene'history'},
WIDGET.newButton{name='legals', x=1140,y=560,w=220,h=80,font=35,code=goScene'legals'},
WIDGET.newButton{name='qq', x=1140,y=650,w=220,h=80,font=35,code=function()love.system.openURL("tencent://message/?uin=1046101471&Site=&Menu=yes")end,hide=MOBILE},
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},
}

View File

@@ -309,7 +309,7 @@ function scene.draw()
end
scene.widgetList={
WIDGET.newButton{name='reset', x=160, y=100,w=180,h=100,color='lG',font=40,code=pressKey'space'},
WIDGET.newButton{name='reset', x=160, y=100,w=180,h=100,color='lG',font=50,fText=CHAR.icon.retry_spin,code=pressKey'space'},
colorSelector,
WIDGET.newSwitch{name='invis', x=240, y=330,lim=200,font=40,disp=function()return invis end, code=pressKey'w',hideF=ifGaming},
WIDGET.newSwitch{name='slide', x=240, y=420,lim=200,font=40,disp=function()return slide end, code=pressKey'e',hideF=ifGaming},

View File

@@ -331,7 +331,7 @@ function scene.keyDown(key,isRep)
elseif key=='escape'then
if repeater.focus then
repeater.focus=false
else
elseif tryBack()then
SCN.back()
end
end
@@ -480,7 +480,7 @@ function scene.draw()
end
scene.widgetList={
WIDGET.newButton{name='reset', x=155, y=100,w=180,h=100,color='lG',font=40,code=pressKey'r'},
WIDGET.newButton{name='reset', x=155, y=100,w=180,h=100,color='lG',font=50,fText=CHAR.icon.retry_spin,code=pressKey'r'},
WIDGET.newSwitch{name='invis', x=240, y=300,lim=200,font=40,disp=function()return invis end,code=pressKey'q',hideF=function()return state==1 end},
WIDGET.newSwitch{name='tapControl',x=240, y=370,lim=200,font=40,disp=function()return tapControl end,code=pressKey'w',hideF=function()return state==1 end},

View File

@@ -117,7 +117,7 @@ end
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=40,code=pressKey'space'},
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},
}

View File

@@ -231,7 +231,7 @@ function scene.draw()
end
scene.widgetList={
WIDGET.newButton{name='reset',x=1140,y=540,w=170,h=80,font=40,color='lG',code=restart},
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},
}

View File

@@ -185,7 +185,9 @@ function scene.keyDown(key,isRep)
elseif key=='r'then
reset()
elseif key=='escape'then
SCN.back()
if tryBack()then
SCN.back()
end
end
end
@@ -216,8 +218,8 @@ function scene.draw()
end
scene.widgetList={
WIDGET.newButton{name='reset',x=155,y=100,w=180,h=100,color='lG',font=40,code=pressKey'r'},
WIDGET.newKey{name='X',x=540,y=620,w=90,font=60,fText="X",code=pressKey'backspace'},
WIDGET.newButton{name='reset',x=155,y=100,w=180,h=100,color='lG',font=50,fText=CHAR.icon.retry_spin,code=pressKey'r'},
WIDGET.newKey{name='X',x=540,y=620,w=90,font=60,fText=CHAR.key.clear,code=pressKey'backspace'},
WIDGET.newKey{name='0',x=640,y=620,w=90,font=60,fText="0",code=pressKey'0'},
WIDGET.newKey{name='-',x=740,y=620,w=90,font=60,fText="-",code=pressKey'-'},
WIDGET.newKey{name='1',x=540,y=520,w=90,font=60,fText="1",code=pressKey'1'},

View File

@@ -161,7 +161,7 @@ scene.widgetList={
WIDGET.newKey{name='-',x=445,y=400,w=90,sound=false,fText="-",color='lB',font=50,code=pressKey'-'},
WIDGET.newKey{name='*',x=445,y=500,w=90,sound=false,fText="*",color='lB',font=50,code=pressKey'*'},
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="<",color='lR',font=50,code=pressKey'backspace'},
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},
}

View File

@@ -28,7 +28,9 @@ function scene.keyDown(key,isRep)
vy=pow*sin(ang)/2.6
end
elseif key=='escape'then
SCN.back()
if tryBack()then
SCN.back()
end
end
end
function scene.mouseDown(_,_,k)

View File

@@ -566,7 +566,7 @@ local commands={}do
{
code="2048",
scene='app_2048',
description="2048 with some new features"
description="2048 with some new features\nOriginal by Asher Vollmer"
},
{
code="ten",
@@ -601,7 +601,7 @@ local commands={}do
{
code="poly",
scene='app_polyforge',
description="Polyforge, original by ImpactBlue Studios"
description="Polyforge\nOriginal by ImpactBlue Studios"
},
{
code="link",
@@ -618,10 +618,20 @@ local commands={}do
scene='app_piano',
description="A simple keyboard piano"
},
{
code="mem",
scene='app_memorize',
description="Number memorize"
},
{
code="trp",
scene='app_triple',
description="A simply clone of a famous Match-3 Game\nOriginal idea from Sanlitun / Triple Town"
},
{
code="spin",
scene='app_spin',
description="???"
description="¿"
},
}
commands.app={

View File

@@ -62,7 +62,9 @@ function scene.keyDown(key,isRep)
state='move'
end
elseif key=='escape'then
SCN.back()
if tryBack()then
SCN.back()
end
end
end
function scene.mouseDown(_,_,k)

View File

@@ -380,7 +380,7 @@ function scene.draw()
end
scene.widgetList={
WIDGET.newButton{name='reset',x=155,y=100,w=180,h=100,color='lG',font=40,code=pressKey'r'},
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},

View File

@@ -262,11 +262,12 @@ function scene.keyDown(key,isRep)
elseif key=='z'or key=='x'then
love.mousepressed(ms.getPosition())
elseif key=='escape'then
if state~=1 or sure>.2 then
SCN.back()
if state~=1 then
if tryBack()then
SCN.back()
end
else
sure=1
MES.new('info',"Press again")
end
elseif state==0 then
if key=='q'then
@@ -399,7 +400,7 @@ function scene.draw()
end
scene.widgetList={
WIDGET.newButton{name='reset',x=80,y=60,w=110,h=60,color='lG',code=pressKey'r',hideF=function()return state==0 end},
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'},
}

View File

@@ -0,0 +1,126 @@
local gc=love.graphics
local state--0=playing, 1=gameover
local timeUsed
local level
local showNum
local showTime
local input
local inputTime
local scene={}
local function newNum(lv)
local num=""
for _=1,4+lv^.66 do num=num..math.random(0,9)end
return num
end
local function freshLevel()
showNum=newNum(level)
showTime=math.max(4-level,0)+#showNum*math.max(.5-#showNum*.01,.3)
inputTime=2+#showNum*math.max(1-#showNum*.01,.626)
input=''
end
local function _reset()
state=0
timeUsed=0
level=1
freshLevel()
end
function scene.sceneInit()
state=1
timeUsed=0
level=0
input=''
showNum='memoriZe'
BGM.play('reason')
end
function scene.keyDown(key,isRep)
if isRep then return end
if key=='escape'then
if tryBack()then
SCN.back()
end
elseif key=='r'then
_reset()
elseif state==0 then
if key:sub(1,2)=="kp"then key=key:sub(3)end
if #key==1 and("0123456789"):find(key,nil,true)then
input=input..key
showTime=math.min(showTime,0)
if input==showNum then
level=level+1
freshLevel()
SFX.play('reach')
end
elseif key=='space'or key=='backspace'then
input=""
end
end
end
function scene.update(dt)
if state==0 then
showTime=showTime-dt
if showTime<=0 then
timeUsed=timeUsed+dt
inputTime=inputTime-dt
if inputTime<=0 then
inputTime=0
state=1
SFX.play('finesseError_long',.6)
end
end
end
end
function scene.draw()
gc.setColor(COLOR.Z)
FONT.set(45)
gc.print(("%.3f"):format(timeUsed),1026,70)
FONT.set(35)
GC.mStr("["..level.."]",640,30)
FONT.set(60)
GC.mStr(input,640,160)
if state==0 then
if showTime<=0 then
FONT.set(30)
gc.setColor(1,.7,.7,-3*showTime)
GC.mStr(("%.1f"):format(inputTime),640,230)
end
gc.setColor(1,1,1,showTime/1.26)
else
gc.setColor(1,.4,.4)
end
if #showNum<=10 then
FONT.set(100)
GC.mStr(showNum,640,60)
else
FONT.set(60)
GC.mStr(showNum,640,90)
end
end
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'},
WIDGET.newKey{name='X',x=540,y=620,w=90,font=60,fText=CHAR.key.clear,code=pressKey'backspace'},
WIDGET.newKey{name='0',x=640,y=620,w=90,font=60,fText="0",code=pressKey'0'},
WIDGET.newKey{name='1',x=540,y=520,w=90,font=60,fText="1",code=pressKey'1'},
WIDGET.newKey{name='2',x=640,y=520,w=90,font=60,fText="2",code=pressKey'2'},
WIDGET.newKey{name='3',x=740,y=520,w=90,font=60,fText="3",code=pressKey'3'},
WIDGET.newKey{name='4',x=540,y=420,w=90,font=60,fText="4",code=pressKey'4'},
WIDGET.newKey{name='5',x=640,y=420,w=90,font=60,fText="5",code=pressKey'5'},
WIDGET.newKey{name='6',x=740,y=420,w=90,font=60,fText="6",code=pressKey'6'},
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},
}
return scene

View File

@@ -45,7 +45,9 @@ end
function scene.keyDown(key,isRep)
if isRep then return end
if key=='escape'then
SCN.back()
if tryBack()then
SCN.back()
end
elseif key=='space'then
if state==0 then--main
if timer==0 then

View File

@@ -176,7 +176,7 @@ function scene.draw()
end
scene.widgetList={
WIDGET.newKey{name='reset',x=640,y=45,w=150,h=50,font=35,code=pressKey'r'},
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},
}

View File

@@ -166,7 +166,7 @@ function scene.draw()
end
scene.widgetList={
WIDGET.newButton{name='reset', x=160,y=100,w=180,h=100,color='lG',font=40,code=pressKey'space',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',hideF=function()return state==0 end},
WIDGET.newSlider{name='rank', x=130,y=250,lim=105,w=150,unit=3,show=false,font=40,disp=function()return rank-3 end,code=function(v)rank=v+3 end,hideF=function()return state>0 end},
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},

View File

@@ -109,11 +109,11 @@ local function merge()
end
if chosen>=5 then
SFX.play(
chosen>=9 and"ren_mega"or
chosen>=8 and"spin_3"or
chosen>=7 and"spin_2"or
chosen>=6 and"spin_1"or
"spin_0"
chosen>=9 and'ren_mega'or
chosen>=8 and'spin_3'or
chosen>=7 and'spin_2'or
chosen>=6 and'spin_1'or
'spin_0'
)
end
fallingTimer=fast and 8 or 12
@@ -157,7 +157,9 @@ function scene.keyDown(key,isRep)
fast=not fast
end
elseif key=='escape'then
SCN.back()
if tryBack()then
SCN.back()
end
end
end
function scene.mouseMove(x,y)
@@ -302,7 +304,7 @@ function scene.draw()
end
scene.widgetList={
WIDGET.newButton{name='reset',x=160,y=100,w=180,h=100,color='lG',font=40,code=pressKey'r'},
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.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},

321
parts/scenes/app_triple.lua Normal file
View File

@@ -0,0 +1,321 @@
local gc=love.graphics
local setColor,rectangle=gc.setColor,gc.rectangle
local int,rnd=math.floor,math.random
local ins,rem=table.insert,table.remove
local setFont,mStr=FONT.set,GC.mStr
local tileColor={
[-1]=COLOR.H,
{.39, 1.0, .39},
{.39, .39, 1.0},
{1.0, .70, .31},
{.94, .31, .31},
{.00, .71, .12},
{.90, .20, .90},
{.94, .47, .39},
{.90, .00, .00},
{.86, .86, .31},
{.78, .31, .00},
{.78, .55, .04},
{.12, .12, .51},
}
local textColor={
[-1]=COLOR.D,
{.26, .66, .26},
{.26, .26, .66},
{.66, .46, .20},
{.62, .20, .20},
{.00, .48, .08},
{.60, .14, .60},
{.62, .32, .26},
{.60, .00, .00},
{.58, .58, .20},
{.52, .20, .00},
{.52, .36, .20},
{.08, .80, .34},
}
local tileTexts=setmetatable({
[-1]="×",
},{__index=function(self,k)self[k]=k return k end})
local player={x=340,y=90}
function player:newTile()
local r=1
if rnd()<.3 then
r=r+1
if rnd()<.3 then r=r+1 end
end
if self.maxTile>=4 and rnd()<.3 then
r=r+1
if self.maxTile>=6 and rnd()<.3 then
r=r+1
if self.maxTile>=8 and rnd()<.3 then
r=r+1
end
end
end
return r
end
function player:reset()
self.progress={}
self.state=0
self.time=0
self.startTime=false
self.score=0
self.maxTile=3
self.nexts,self.hold={self:newTile(),self:newTile(),self:newTile()},false
self.selectX,self.selectY=false,false
self.board={}
for y=1,6 do
self.board[y]={}
for x=1,6 do
self.board[y][x]=0
end
end
self.board[1][1]=false
for _,n in next,{-1,-1,1,1,2,2,3,3}do
local x,y
repeat
x,y=rnd(6),rnd(6)
until not(x==1 and y==1)and self.board[y][x]==0
self.board[y][x]=n
end
end
function player:merge(b,v,y,x)
if b[y]and v==b[y][x]then
ins(self.mergedTiles,{y,x})
b[y][x]=0
return 1
+self:merge(b,v,y,x-1)
+self:merge(b,v,y,x+1)
+self:merge(b,v,y-1,x)
+self:merge(b,v,y+1,x)
else
return 0
end
end
function player:click(y,x)
if y==1 and x==1 then
self.nexts[1],self.hold=self.hold,self.nexts[1]
SFX.play('hold')
if not self.nexts[1] then
rem(self.nexts,1)
ins(self.nexts,self:newTile())
end
elseif self.board[y][x]~=0 then
self.selectX,self.selectY=false,false
elseif y==self.selectY and x==self.selectX then
if self.state==0 then
self.state=1
self.startTime=TIME()
end
self.board[y][x]=rem(self.nexts,1)
SFX.play('touch')
local merged
::REPEAT_merge::
local cur=self.board[y][x]
local b1=TABLE.shift(self.board)
self.mergedTiles={}
local count=self:merge(b1,cur,y,x)
if count>2 then
merged=true
self.board=b1
b1[y][x]=cur+1
if cur+1>self.maxTile then
self.maxTile=cur+1
if self.maxTile>=6 then
ins(self.progress,("%s - %.3fs"):format(self.maxTile,TIME()-player.startTime))
end
SFX.play('reach')
end
local getScore=4^cur*count
self.score=self.score+getScore
TEXT.show(getScore,player.x+self.selectX*100-50,player.y+self.selectY*100-50,40,'score')
for i=1,#self.mergedTiles do
SYSFX.newShade(3,player.x+100*self.mergedTiles[i][2]-100,player.y+100*self.mergedTiles[i][1]-100,100,100)
end
goto REPEAT_merge
end
ins(self.nexts,self:newTile())
self.selectX,self.selectY=false,false
print('-------------')
if merged then
SFX.play('lock')
if cur>=4 then
SFX.play(
cur>=8 and'ren_mega'or
cur>=7 and'spin_3'or
cur>=6 and'spin_2'or
cur>=5 and'spin_1'or
'spin_0'
)
end
else
for i=1,6 do
if TABLE.find(self.board[i],0)then
print(i,TABLE.find(self.board[i],0))
return
end
end
self.state=2
SFX.play('fail')
end
else
self.selectX,self.selectY=x,y
end
end
local function drawTile(x,y,v)
if v and v~=0 then
setColor(tileColor[v])
rectangle('fill',x*100-100,y*100-100,100,100)
setColor(textColor[v])
mStr(tileTexts[v],x*100-50,y*100-92)
end
end
function player:drawBoard()
gc.push('transform')
gc.translate(self.x,self.y)
--Board background
setColor(.2,.2,.2,.7)
rectangle("fill",0,0,600,600)
--Hold slot
setColor(0,1,1,.4)
rectangle("fill",0,0,100,100)
gc.setLineWidth(10)
setColor(COLOR.lC)
rectangle("line",5,5,90,90)
--Hold tile
setFont(60)
drawTile(1,1,self.hold)
--Board tiles
local b=self.board
for y=1,6 do for x=1,6 do
drawTile(x,y,b[y][x])
end end
--Board lines
setColor(COLOR.Z)
gc.setLineWidth(2)
for x=1,5 do gc.line(x*100,0,x*100,600)end
for y=1,5 do gc.line(0,y*100,600,y*100)end
gc.setLineWidth(6)
rectangle("line",0,0,600,600)
--Select box
if self.selectX then
local c=tileColor[self.nexts[1]]
setColor(c[1],c[2],c[3],.6+.3*math.sin(TIME()*9.29))
rectangle("line",self.selectX*100-95,self.selectY*100-95,90,90)
end
gc.pop()
end
local scene={}
function scene.sceneInit()
player:reset()
BGM.play('truth')
end
function scene.mouseDown(x,y)
x,y=int((x-player.x)/100)+1,int((y-player.y)/100)+1
if x>=1 and x<=6 and y>=1 and y<=6 then
player:click(y,x)
end
end
function scene.keyDown(key,isRep)
if isRep then return end
if key=='up'or key=='down'or key=='left'or key=='right'then
if not player.selectX then
player.selectX,player.selectY=3,3
else
if key=='up'then player.selectY=math.max(player.selectY-1,1)
elseif key=='down'then player.selectY=math.min(player.selectY+1,6)
elseif key=='left'then player.selectX=math.max(player.selectX-1,1)
elseif key=='right'then player.selectX=math.min(player.selectX+1,6)
end
end
elseif key=='z'or key=='space'then
if not player.selectX then
player.selectX,player.selectY=3,3
else
local y,x=player.selectY,player.selectX
player:click(player.selectY,player.selectX)
player.selectY,player.selectX=y,x
end
elseif key=='x'then
player:click(1,1)
elseif key=='r'then
if player.state~=1 or tryReset()then
player:reset()
end
elseif key=='escape'then
if tryBack()then
SCN.back()
end
end
end
function scene.update()
if player.state==1 then
player.time=TIME()-player.startTime
end
end
function scene.draw()
setFont(40)
setColor(1,1,1)
gc.print(("%.3f"):format(player.time),1026,50)
gc.print(player.score,1026,100)
--Progress time list
setFont(25)
setColor(.7,.7,.7)
for i=1,#player.progress do
gc.print(player.progress[i],1000,140+30*i)
end
gc.push('transform')
gc.translate(745,13)
setColor(COLOR.Z)
gc.setLineWidth(4)
gc.rectangle("line",-5,-5,200,70)
for i=1,3 do
setColor(tileColor[player.nexts[i]])
rectangle('fill',65*i-65,0,60,60)
setFont(40)
setColor(textColor[player.nexts[i]])
mStr(player.nexts[i],65*i-35,0)
end
gc.pop()
player:drawBoard()
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},
}
return scene

View File

@@ -24,9 +24,7 @@ local sList={
local scene={}
local sure
function scene.sceneInit()
sure=0
destroyPlayers()
BG.set(CUSTOMENV.bg)
BGM.play(CUSTOMENV.bgm)
@@ -80,7 +78,7 @@ function scene.keyDown(key,isRep)
elseif key=='m'then
SCN.go('custom_mission','swipeD')
elseif key=='delete'then
if sure>.3 then
if tryReset()then
TABLE.cut(FIELD)TABLE.cut(BAG)TABLE.cut(MISSION)
FIELD[1]=DATA.newBoard()
TABLE.clear(CUSTOMENV)
@@ -90,13 +88,9 @@ function scene.keyDown(key,isRep)
saveFile(DATA.copyBoards(),'conf/customBoards')
saveFile(DATA.copySequence(),'conf/customSequence')
saveFile(CUSTOMENV,'conf/customEnv')
sure=0
SFX.play('finesseError',.7)
BG.set(CUSTOMENV.bg)
BGM.play(CUSTOMENV.bgm)
else
sure=1
MES.new('info',text.sureReset)
end
elseif key=='f1'then
SCN.go('mod','swipeD')
@@ -129,10 +123,6 @@ function scene.keyDown(key,isRep)
end
end
function scene.update(dt)
if sure>0 then sure=sure-dt end
end
function scene.draw()
gc.translate(0,-WIDGET.scrollPos)
setFont(30)

View File

@@ -7,7 +7,6 @@ local ins,rem=table.insert,table.remove
local FIELD=FIELD
local scene={}
local sure
local curPen
local pens={-2,0,-1,[false]=false}--Color (air/smart)
local penMode
@@ -119,7 +118,6 @@ local function _pDraw()
end
function scene.sceneInit()
sure=0
curPen=false
penMode=0
penX,penY=1,1
@@ -182,13 +180,9 @@ function scene.keyDown(key)
_pTouch(penX,penY)
end
elseif key=='delete'then
if sure>.3 then
if tryReset()then
FIELD[page]=DATA.newBoard()
sure=0
SFX.play('finesseError',.7)
else
sure=1
MES.new('info',text.sureReset)
end
elseif key=='j'then
demo=not demo
@@ -265,12 +259,6 @@ function scene.keyUp(key)
end
end
function scene.update(dt)
if sure>0 then
sure=sure-dt
end
end
function scene.draw()
gc.translate(200,60)

View File

@@ -8,12 +8,10 @@ local scene={}
local input--Input buffer
local cur--Cursor position
local sure
function scene.sceneInit()
input=""
cur=#MISSION
sure=0
end
function scene.sceneBack()
saveFile(DATA.copyMission(),'conf/customMissions')
@@ -62,14 +60,10 @@ function scene.keyDown(key)
end
end
elseif key=='delete'then
if sure>.3 then
if tryReset()then
TABLE.cut(MISSION)
cur=0
sure=0
SFX.play('finesseError',.7)
else
sure=1
MES.new('info',text.sureReset)
end
elseif key=='c'and kb.isDown('lctrl','rctrl')or key=='cC'then
if #MISSION>0 then
@@ -117,12 +111,6 @@ function scene.keyDown(key)
end
end
function scene.update(dt)
if sure>0 then
sure=sure-dt
end
end
function scene.draw()
--Draw frame
gc.setLineWidth(2)

View File

@@ -9,11 +9,9 @@ local gc_setColor,gc_print=gc.setColor,gc.print
local scene={}
local cur--Cursor position
local sure
function scene.sceneInit()
cur=#BAG
sure=0
end
function scene.sceneBack()
saveFile(DATA.copySequence(),'conf/customSequence')
@@ -66,14 +64,10 @@ function scene.keyDown(key)
cur=cur-1
end
elseif key=='delete'then
if sure>.3 then
if tryReset()then
TABLE.cut(BAG)
cur=0
sure=0
SFX.play('finesseError',.7)
else
sure=1
MES.new('info',text.sureReset)
end
elseif key=='='then
local l={1,2,3,4,5,6,7}
@@ -119,12 +113,6 @@ function scene.keyDown(key)
end
end
function scene.update(dt)
if sure>0 then
sure=sure-dt
end
end
local blockCharWidth={}for i=1,#BLOCK_CHARS do blockCharWidth[i]=gc.newText(FONT.get(60),BLOCK_CHARS[i]):getWidth()end
function scene.draw()
--Draw frame

View File

@@ -46,15 +46,79 @@ function scene.mouseDown(x,y)
end
end
scene.touchDown=scene.mouseDown
local function _testButton(n)
if NET.getlock('access_and_login')then
MES.new('warn',text.wsConnecting)
else
if WIDGET.isFocus(scene.widgetList[n])then
return true
else
WIDGET.focus(scene.widgetList[n])
end
end
end
function scene.keyDown(key,isRep)
if isRep then return true end
if key=='escape'then
if TIME()-lastQuitTime<1 then
if key=='1'then
if _testButton(1)then
SCN.go('mode')
end
elseif key=='q'then
if _testButton(2)then
loadGame(STAT.lastPlay,true)
end
elseif key=='a'then
if _testButton(3)then
if WS.status('app')=='running'then
NET.tryLogin(false)
elseif WS.status('app')=='dead'then
NET.wsconn_app()
SFX.play('connect')
MES.new('info',text.wsConnecting)
end
end
elseif key=='z'then
if _testButton(4)then
SCN.go('customGame')
end
elseif key=='-'then
if _testButton(5)then
SCN.go('setting_game')
end
elseif key=='p'then
if _testButton(6)then
SCN.go('stat')
end
elseif key=='l'then
if _testButton(7)then
SCN.go('dict')
end
elseif key==','then
if _testButton(8)then
SCN.go('replays')
end
elseif key=='2'then
if _testButton(9)then
SCN.go('music')
end
elseif key=='3'then
if _testButton(10)then
SCN.go('lang')
end
elseif key=='x'then
if _testButton(11)then
SCN.go('about')
end
elseif key=='m'then
if _testButton(12)then
SCN.go('manual')
end
elseif key=='c'then
enterConsole()
elseif key=='escape'then
if tryBack()then
VOC.play('bye')
SCN.swapTo('quit','slowFade')
else
lastQuitTime=TIME()
MES.new('warn',text.sureQuit)
end
elseif key=='c'then
enterConsole()
@@ -120,36 +184,20 @@ function scene.draw()
end
end
local function notConn()
if NET.getlock('access_and_login')then
MES.new('warn',text.wsConnecting)
else
return true
end
end
scene.widgetList={
WIDGET.newButton{name='offline',x=-1200,y=210,w=800,h=100,color='lR',font=45,align='R',edge=30,code=function()if notConn()then SCN.go('mode')end end},
WIDGET.newButton{name='qplay', x=-1200,y=330,w=800,h=100,color='lM',font=40,align='R',edge=30,code=function()loadGame(STAT.lastPlay,true)end},
WIDGET.newButton{name='online', x=-1200,y=450,w=800,h=100,color='lV',font=45,align='R',edge=30,code=function()
if WS.status('app')=='running'then
NET.tryLogin(false)
elseif WS.status('app')=='dead'then
NET.wsconn_app()
SFX.play('connect')
MES.new('info',text.wsConnecting)
end
end},
WIDGET.newButton{name='custom', x=-1200,y=570,w=800,h=100,color='lS',font=45,align='R',edge=30,code=function()if notConn()then SCN.go('customGame')end end},
WIDGET.newButton{name='offline',x=-1200,y=210,w=800,h=100,color='lR',font=45,align='R',edge=30,code=pressKey'1'},
WIDGET.newButton{name='qplay', x=-1200,y=330,w=800,h=100,color='lM',font=40,align='R',edge=30,code=pressKey'q'},
WIDGET.newButton{name='online', x=-1200,y=450,w=800,h=100,color='lV',font=45,align='R',edge=30,code=pressKey'a'},
WIDGET.newButton{name='custom', x=-1200,y=570,w=800,h=100,color='lS',font=45,align='R',edge=30,code=pressKey'z'},
WIDGET.newButton{name='setting',x=2480,y=210,w=800,h=100, color='lO',font=40,align='L',edge=30,code=function()if notConn()then SCN.go('setting_game')end end},
WIDGET.newButton{name='stat', x=2480,y=330,w=800,h=100, color='lL',font=40,align='L',edge=30,code=function()if notConn()then SCN.go('stat')end end},
WIDGET.newButton{name='dict', x=2480,y=450,w=800,h=100, color='lG',font=40,align='L',edge=30,code=function()if notConn()then SCN.go('dict')end end},
WIDGET.newButton{name='replays',x=2480,y=570,w=800,h=100, color='lC',font=40,align='L',edge=30,code=function()if notConn()then SCN.go('replays')end end},
WIDGET.newButton{name='setting',x=2480,y=210,w=800,h=100, color='lO',font=40,align='L',edge=30,code=pressKey'-'},
WIDGET.newButton{name='stat', x=2480,y=330,w=800,h=100, color='lL',font=40,align='L',edge=30,code=pressKey'p'},
WIDGET.newButton{name='dict', x=2480,y=450,w=800,h=100, color='lG',font=40,align='L',edge=30,code=pressKey'l'},
WIDGET.newButton{name='replays',x=2480,y=570,w=800,h=100, color='lC',font=40,align='L',edge=30,code=pressKey','},
WIDGET.newButton{name='music', x=120,y=80,w=100, color='lO',code=function()if notConn()then SCN.go('music')end end,font=70,fText=CHAR.icon.music},
WIDGET.newButton{name='lang', x=280,y=80,w=100, color='lN',code=function()if notConn()then SCN.go('lang')end end,font=70,fText=CHAR.icon.language},
WIDGET.newButton{name='about', x=-110,y=670,w=600,h=70, color='lB',align='R',edge=20,code=function()if notConn()then SCN.go('about')end end,font=50,fText=CHAR.icon.info},
WIDGET.newButton{name='manual', x=1390,y=670,w=600,h=70, color='lR',align='L',edge=20,code=function()if notConn()then SCN.go('manual')end end,font=50,fText=CHAR.icon.help},
WIDGET.newButton{name='music', x=120,y=80,w=100, color='lO',code=pressKey'2',font=70,fText=CHAR.icon.music},
WIDGET.newButton{name='lang', x=280,y=80,w=100, color='lN',code=pressKey'3',font=70,fText=CHAR.icon.language},
WIDGET.newButton{name='about', x=-110,y=670,w=600,h=70, color='lB',align='R',edge=20,code=pressKey'x',font=50,fText=CHAR.icon.info},
WIDGET.newButton{name='manual', x=1390,y=670,w=600,h=70, color='lR',align='L',edge=20,code=pressKey'm',font=50,fText=CHAR.icon.help},
}
return scene

View File

@@ -17,12 +17,13 @@ local author={
moonbeam="Beethoven & MrZ",
empty="ERM",
["how feeling"]="V.A.",
["sugar fairy"]="Tchaikovsky & MrZ",
["secret7th remix"]="柒栎流星",
["jazz nihilism"]="Trebor",
["race remix"]="柒栎流星",
["sakura"]="ZUN & C₂₉H₂₅N₃O₅",
sakura="ZUN & C₂₉H₂₅N₃O₅",
["1980s"]="C₂₉H₂₅N₃O₅",
["malate"]="ZUN & C₂₉H₂₅N₃O₅",
malate="ZUN & C₂₉H₂₅N₃O₅",
}
local scene={}

View File

@@ -16,7 +16,6 @@ local inputBox=WIDGET.newInputBox{name='input',x=340,y=660,w=600,h=50,limit=256}
local playing
local lastUpstreamTime
local upstreamProgress
local lastBackTime=0
local noTouch,noKey=false,false
local touchMoveLastFrame=false
local newMessageTimer
@@ -36,15 +35,12 @@ local function _gotoSetting()
SCN.go('setting_game')
end
local function _quit()
if TIME()-lastBackTime<1 then
if tryBack()then
NET.signal_quit()
if SCN.stack[#SCN.stack-1]=='net_newRoom'then
SCN.pop()
end
SCN.back()
else
lastBackTime=TIME()
MES.new('info',text.sureQuit)
end
end
local function _switchChat()

View File

@@ -1,9 +1,6 @@
local lastLogoutTime
local scene={}
function scene.sceneInit()
lastLogoutTime=-1e99
BG.set()
end
function scene.sceneBack()
@@ -22,7 +19,7 @@ scene.widgetList={
WIDGET.newButton{name='rooms', x=640, y=540,w=350,h=120,font=40,code=goScene'net_rooms'},
WIDGET.newButton{name='logout',x=880, y=40,w=180, h=60,color='dR',
code=function()
if TIME()-lastLogoutTime<1 then
if tryBack()then
if USER.uid then
NET.wsclose_play()
NET.wsclose_user()
@@ -31,9 +28,6 @@ scene.widgetList={
saveFile(USER,'conf/user')
SCN.back()
end
else
MES.new('info',text.sureQuit)
lastLogoutTime=TIME()
end
end},
WIDGET.newButton{name='back', x=1140,y=640,w=170,h=80,font=60,fText=CHAR.icon.back,code=backScene},

View File

@@ -39,8 +39,6 @@ end}
local scene={}
local sure
local function _playRep(fileName)
local rep=DATA.parseReplay(fileName,true)
if not rep.available then
@@ -72,7 +70,6 @@ end
function scene.sceneInit()
BG.set()
sure=0
listBox:setList(REPLAY)
local hide=listBox:getLen()==0
for i=3,5 do
@@ -121,8 +118,7 @@ function scene.keyDown(key)
elseif key=='delete'then
local rep=listBox:getSel()
if rep then
if sure>.3 then
sure=0
if tryDelete()then
listBox:remove()
love.filesystem.remove(rep.fileName)
for i=1,#REPLAY do
@@ -132,9 +128,6 @@ function scene.keyDown(key)
end
end
SFX.play('finesseError',.7)
else
sure=1
MES.new('info',text.sureReset)
end
end
else
@@ -142,12 +135,6 @@ function scene.keyDown(key)
end
end
function scene.update(dt)
if sure>0 then
sure=sure-dt
end
end
scene.widgetList={
listBox,
WIDGET.newButton{name='export',x=180,y=640,w=140,h=80,color='lG',code=pressKey'cC',font=50,fText=CHAR.icon.export},

View File

@@ -54,7 +54,7 @@ local keyNames={
lgui='L'..CHAR.key.macCmd,
rgui='R'..CHAR.key.macCmd,
space=CHAR.key.space,
delete=CHAR.key.del,
delete=CHAR.key.macFowardDel,
pageup=CHAR.key.macPgup,
pagedown=CHAR.key.macPgdn,
home=CHAR.key.macHome,

View File

@@ -1,7 +1,7 @@
return[=[
未来小游戏:
Tetro-1010(2C2N, 重力); Tetra-link(桌游)
求合体; 坦克大战; 扫雷; 接水管; 记忆
求合体; 坦克大战; 扫雷; 接水管
其他未来内容:
模式包系统; 新模组系统; 加速下落; spike相关统计数据
实时统计数据可视化; 教学关脚本语言; 从录像继续
@@ -13,18 +13,18 @@ return[=[
0.17.0: 硬着陆 Hard Landing
新增:
新模式:清版竞速
新模式:策略堆叠(原设计来自游戏Cambridge, by NOT_A_ROBOT)
新旋转系统:DRS_weak,移除了滞后旋转(五连块朝向风格模仿) #441
新BGM:malate(暂未使用)
新机制:出块延迟打断(ARE打断)(默认关闭) #471
新机制:锁定在外判负(lockout)(默认关闭)
新机制:全局默认使用5帧窒息延迟
新功能:自定义图片背景功能(可调透明度)(目前仅电脑可用)
新功能:支持摇杆和扳机(参数暂时不能调整)
新功能:没有键盘全支持的场景可以用方向键控制光标操作 #329
新BGM:malate(暂未使用)
新小程序:Memorize,Triple
改动:
关闭背景亮度可调 #119
关闭背景的灰底亮度可调 #119
调整游戏大logo为正体字
软降n格的键也可以触发深降
优化键位设置菜单各种键的显示
@@ -33,6 +33,7 @@ return[=[
修改按钮音效,给复选框和选择器添加新音效
ultra模式计时器改为秒表,重开的时候会重播bgm
出块/消行延迟逻辑修正,现在真的是0延迟,不再有一帧等待了(略微影响手感,更滑)
Ospin变O后操作序列清空,变远端朝下JL时允许水平可移动
生成位置预览开启后hold的生成位置也可见 #453
TRS的S/Z添加四个踢墙防止在一些地方卡死
优化pc训练模式体验,添加胜利条件,不再无尽

View File

@@ -1,5 +1,5 @@
return{
["apkCode"]=413,
["apkCode"]=414,
["code"]=1700,
["string"]="V0.17.0",
["room"]="ver A-2",