Compare commits
20 Commits
pre0.17.0-
...
pre0.17.0-
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
07b47dee3f | ||
|
|
4431a906b9 | ||
|
|
2bb6852e3e | ||
|
|
1948ed3e16 | ||
|
|
81b5ccae30 | ||
|
|
5543ff0d29 | ||
|
|
cd567e9e98 | ||
|
|
5d86925a8a | ||
|
|
e3db564a4b | ||
|
|
a4293624ab | ||
|
|
367e2dc81a | ||
|
|
9ec33c6eef | ||
|
|
9c9b8d36f2 | ||
|
|
4fc6f335c7 | ||
|
|
d2f4123d08 | ||
|
|
b29d352a1b | ||
|
|
cd5a71cd12 | ||
|
|
cdd68e985d | ||
|
|
8cf4d4280c | ||
|
|
cd29bf8702 |
@@ -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)},
|
||||
|
||||
4
main.lua
4
main.lua
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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.
@@ -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)
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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={
|
||||
|
||||
@@ -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",
|
||||
|
||||
@@ -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",
|
||||
|
||||
@@ -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",
|
||||
|
||||
@@ -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="#~#",
|
||||
|
||||
@@ -140,7 +140,6 @@ return{fallback='zh',
|
||||
staff="游戏谁写的",
|
||||
his="黑历史",
|
||||
legals="正经人谁看啊",
|
||||
qq="QQ对线",
|
||||
},
|
||||
register={
|
||||
password2="你懂的",
|
||||
|
||||
@@ -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"},
|
||||
|
||||
@@ -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="键盘",
|
||||
|
||||
@@ -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="從剪貼板導入",
|
||||
|
||||
@@ -128,4 +128,5 @@ return{
|
||||
{font=25,name="Hathtiz"},
|
||||
{font=25,name="江江江江17"},
|
||||
{font=25,name="TetraCepra"},
|
||||
{font=25,name="爱抢姐姐布丁的芙兰酱(CHNO)"},
|
||||
}
|
||||
|
||||
@@ -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},
|
||||
}
|
||||
|
||||
|
||||
@@ -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},
|
||||
|
||||
@@ -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},
|
||||
|
||||
|
||||
@@ -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},
|
||||
}
|
||||
|
||||
@@ -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},
|
||||
}
|
||||
|
||||
|
||||
@@ -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'},
|
||||
|
||||
@@ -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},
|
||||
}
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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={
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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},
|
||||
|
||||
@@ -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'},
|
||||
}
|
||||
|
||||
126
parts/scenes/app_memorize.lua
Normal file
126
parts/scenes/app_memorize.lua
Normal 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
|
||||
@@ -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
|
||||
|
||||
@@ -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},
|
||||
}
|
||||
|
||||
|
||||
@@ -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},
|
||||
|
||||
@@ -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
321
parts/scenes/app_triple.lua
Normal 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
|
||||
@@ -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)
|
||||
|
||||
@@ -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)
|
||||
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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={}
|
||||
|
||||
@@ -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()
|
||||
|
||||
@@ -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},
|
||||
|
||||
@@ -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},
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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训练模式体验,添加胜利条件,不再无尽
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
return{
|
||||
["apkCode"]=413,
|
||||
["apkCode"]=414,
|
||||
["code"]=1700,
|
||||
["string"]="V0.17.0",
|
||||
["room"]="ver A-2",
|
||||
|
||||
Reference in New Issue
Block a user