mod系统初版(三个mod未完成)
This commit is contained in:
@@ -433,6 +433,13 @@ function loadGame(M,ifQuickPlay)
|
|||||||
STAT.lastPlay=M
|
STAT.lastPlay=M
|
||||||
GAME.curMode=MODES[M]
|
GAME.curMode=MODES[M]
|
||||||
GAME.modeEnv=GAME.curMode.env
|
GAME.modeEnv=GAME.curMode.env
|
||||||
|
GAME.unranked=false
|
||||||
|
for _,mod in next,MODOPT do
|
||||||
|
if mod.sel>0 and mod.unranked then
|
||||||
|
GAME.unranked=true
|
||||||
|
end
|
||||||
|
end
|
||||||
|
print(GAME.unranked)
|
||||||
drawableText.modeName:set(text.modes[M][1])
|
drawableText.modeName:set(text.modes[M][1])
|
||||||
drawableText.levelName:set(text.modes[M][2])
|
drawableText.levelName:set(text.modes[M][2])
|
||||||
GAME.init=true
|
GAME.init=true
|
||||||
|
|||||||
@@ -1,120 +1,144 @@
|
|||||||
|
local function disableKey(P,key)
|
||||||
|
table.insert(P.gameEnv.keyCancel,key)
|
||||||
|
end
|
||||||
MODOPT={--Mod options
|
MODOPT={--Mod options
|
||||||
{
|
noNext={id="NL",
|
||||||
name="noRotation",
|
key="q",x=80,y=230,color=COLOR.red,
|
||||||
list={false,true},
|
conflict={"hideNext","fullNext"},
|
||||||
sel=1,
|
func=function(P)P.gameEnv.nextCount=0 end,
|
||||||
code=function(P)end,
|
|
||||||
time=0,
|
|
||||||
},
|
},
|
||||||
{
|
hideNext={id="FL",
|
||||||
name="noMove",
|
key="w",x=200,y=230,color=COLOR.red,
|
||||||
list={false,true},
|
list={1,2,3,4,5},
|
||||||
sel=1,
|
conflict={"noNext"},
|
||||||
code=function(P)end,
|
func=function(P,M)P.gameEnv.nextStartPos=M.list[M.sel]+1 end,
|
||||||
time=0,
|
|
||||||
},
|
},
|
||||||
{
|
fullNext={id="FN",
|
||||||
name="suddenMove",
|
key="e",x=320,y=230,color=COLOR.water,
|
||||||
list={false,true},
|
conflict={"noNext"},
|
||||||
sel=1,
|
func=function(P)P.gameEnv.nextCount=6 end,
|
||||||
code=function(P)end,
|
unranked=true,
|
||||||
time=0,
|
},
|
||||||
|
noHold={id="HL",
|
||||||
|
key="r",x=440,y=230,color=COLOR.red,
|
||||||
|
func=function(P)P.gameEnv.holdCount=0 end,
|
||||||
|
},
|
||||||
|
hideBlock={id="HB",
|
||||||
|
key="y",x=680,y=230,color=COLOR.orange,
|
||||||
|
func=function(P)P.gameEnv.block=false end,
|
||||||
|
},
|
||||||
|
hideGhost={id="HG",
|
||||||
|
key="u",x=800,y=230,color=COLOR.orange,
|
||||||
|
func=function(P)P.gameEnv.ghost=false end,
|
||||||
|
},
|
||||||
|
hidden={id="HD",
|
||||||
|
key="o",x=1040,y=230,color=COLOR.green,
|
||||||
|
list={"time","fast","none"},
|
||||||
|
conflict={"coverBoard"},
|
||||||
|
func=function(P,M)P.gameEnv.visible=M.list[M.sel]end,
|
||||||
|
unranked=true,
|
||||||
|
},
|
||||||
|
coverBoard={id="CB",
|
||||||
|
key="p",x=1160,y=230,color=COLOR.green,
|
||||||
|
list={"down","up","all"},
|
||||||
|
conflict={"hidden"},
|
||||||
|
func=function(P)LOG.print("该mod还没有做好!")end,
|
||||||
},
|
},
|
||||||
|
|
||||||
{
|
maxG={id="20G",
|
||||||
name="noNext",
|
key="a",x=140,y=350,color=COLOR.red,
|
||||||
list={false,true},
|
conflict={"minG","suddenLock"},
|
||||||
sel=1,
|
func=function(P)P.gameEnv.drop=0 end,
|
||||||
code=function(P)end,
|
unranked=true,
|
||||||
time=0,
|
|
||||||
},
|
},
|
||||||
{
|
suddenLock={id="SL",
|
||||||
name="noHold",
|
key="s",x=260,y=350,color=COLOR.red,
|
||||||
list={false,true},
|
conflict={"maxG","infLock"},
|
||||||
sel=1,
|
func=function(P)P.gameEnv.lock=0 end,
|
||||||
code=function(P)end,
|
unranked=true,
|
||||||
time=0,
|
|
||||||
},
|
},
|
||||||
{
|
oneLife={id="SD",
|
||||||
name="hideNext",
|
key="d",x=380,y=350,color=COLOR.red,
|
||||||
list={0,1,2,3,4,5,6},
|
conflict={"infLife"},
|
||||||
sel=1,
|
func=function(P)P.gameEnv.life=0 end,
|
||||||
code=function(P)end,
|
unranked=true,
|
||||||
time=0,
|
|
||||||
},
|
},
|
||||||
{
|
noTele={id="NT",
|
||||||
name="hideBlock",
|
key="f",x=500,y=350,color=COLOR.red,
|
||||||
list={false,true},
|
conflict={"teleMove"},
|
||||||
sel=1,
|
func=function(P)P.gameEnv.noTele=true end,
|
||||||
code=function(P)end,
|
unranked=true,
|
||||||
time=0,
|
|
||||||
},
|
},
|
||||||
{
|
forceB2B={id="FB",
|
||||||
name="hideGhost",
|
key="h",x=740,y=350,color=COLOR.yellow,
|
||||||
list={false,true},
|
func=function(P)P.gameEnv.b2bKill=true end,
|
||||||
sel=1,
|
},
|
||||||
code=function(P)end,
|
forceFinesse={id="PF",
|
||||||
time=0,
|
key="j",x=860,y=350,color=COLOR.yellow,
|
||||||
|
func=function(P)P.gameEnv.fineKill=true end,
|
||||||
|
},
|
||||||
|
mirror={id="MR",
|
||||||
|
key="k",x=980,y=350,color=COLOR.yellow,
|
||||||
|
func=function(P)LOG.print("该mod还没有做好!")end,
|
||||||
|
},
|
||||||
|
flip={id="HR",
|
||||||
|
key="l",x=1100,y=350,color=COLOR.yellow,
|
||||||
|
func=function(P)LOG.print("该mod还没有做好!")end,
|
||||||
},
|
},
|
||||||
|
|
||||||
{
|
minG={id="0G",
|
||||||
name="mirror",
|
key="z",x=200,y=470,color=COLOR.cyan,
|
||||||
list={false,true},
|
conflict={"maxG"},
|
||||||
sel=1,
|
func=function(P)P.gameEnv.drop=1e99 end,
|
||||||
code=function(P)end,
|
unranked=true,
|
||||||
time=0,
|
|
||||||
},
|
},
|
||||||
{
|
infLock={id="IF",
|
||||||
name="flip",
|
key="x",x=320,y=470,color=COLOR.cyan,
|
||||||
list={false,true},
|
conflict={"suddenLock"},
|
||||||
sel=1,
|
func=function(P)P.gameEnv.lock=1e99 end,
|
||||||
code=function(P)end,
|
unranked=true,
|
||||||
time=0,
|
|
||||||
},
|
},
|
||||||
{
|
infLife={id="NF",
|
||||||
name="hidden",
|
key="c",x=440,y=470,color=COLOR.cyan,
|
||||||
list={false,true},
|
conflict={"oneLife"},
|
||||||
sel=1,
|
func=function(P)P.gameEnv.life=1e99 end,
|
||||||
code=function(P)end,
|
unranked=true,
|
||||||
time=0,
|
|
||||||
},
|
},
|
||||||
{
|
teleMove={id="TL",
|
||||||
name="hideUp",
|
key="v",x=560,y=470,color=COLOR.cyan,
|
||||||
list={false,true},
|
conflict={"noTele"},
|
||||||
sel=1,
|
func=function(P)
|
||||||
code=function(P)end,
|
P.gameEnv.das,P.gameEnv.arr=0,0
|
||||||
time=0,
|
P.gameEnv.sddas,P.gameEnv.sdarr=0,0
|
||||||
|
disableKey(P,14)
|
||||||
|
disableKey(P,15)
|
||||||
|
disableKey(P,16)
|
||||||
|
end,
|
||||||
|
unranked=true,
|
||||||
},
|
},
|
||||||
{
|
randSeq={id="RS",
|
||||||
name="hideDown",
|
key="b",x=680,y=470,color=COLOR.purple,
|
||||||
list={false,true},
|
func=function(P)P.gameEnv.sequence="rnd"end,
|
||||||
sel=1,
|
unranked=true,
|
||||||
code=function(P)end,
|
|
||||||
time=0,
|
|
||||||
},
|
},
|
||||||
|
noRotation={id="FX",
|
||||||
{
|
key="n",x=800,y=470,color=COLOR.red,
|
||||||
name="_20G",
|
func=function(P)
|
||||||
list={false,true},
|
disableKey(P,3)
|
||||||
sel=1,
|
disableKey(P,4)
|
||||||
code=function(P)end,
|
disableKey(P,5)
|
||||||
time=0,
|
end,
|
||||||
},
|
},
|
||||||
{
|
noMove={id="ST",
|
||||||
name="suddenLock",
|
key="m",x=920,y=470,color=COLOR.red,
|
||||||
list={false,true},
|
func=function(P)
|
||||||
sel=1,
|
disableKey(P,1)disableKey(P,2)
|
||||||
code=function(P)end,
|
disableKey(P,11)disableKey(P,12)
|
||||||
time=0,
|
disableKey(P,17)disableKey(P,18)
|
||||||
|
disableKey(P,19)disableKey(P,20)
|
||||||
|
end,
|
||||||
},
|
},
|
||||||
{
|
}for _,M in next,MODOPT do M.sel,M.time=0,0 end
|
||||||
name="infLives",
|
|
||||||
list={false,true},
|
|
||||||
sel=1,
|
|
||||||
code=function(P)end,
|
|
||||||
time=0,
|
|
||||||
},
|
|
||||||
}
|
|
||||||
|
|
||||||
CUSTOMENV={--gameEnv for cutsom game
|
CUSTOMENV={--gameEnv for cutsom game
|
||||||
--Basic
|
--Basic
|
||||||
@@ -147,6 +171,7 @@ CUSTOMENV={--gameEnv for cutsom game
|
|||||||
|
|
||||||
noTele=false,
|
noTele=false,
|
||||||
fineKill=false,
|
fineKill=false,
|
||||||
|
b2bKill=false,
|
||||||
missionKill=false,
|
missionKill=false,
|
||||||
easyFresh=true,
|
easyFresh=true,
|
||||||
visible="show",
|
visible="show",
|
||||||
@@ -162,9 +187,7 @@ CUSTOMENV={--gameEnv for cutsom game
|
|||||||
}
|
}
|
||||||
|
|
||||||
FIELD={}--Field(s) for custom game
|
FIELD={}--Field(s) for custom game
|
||||||
|
|
||||||
BAG={}--Sequence for custom game
|
BAG={}--Sequence for custom game
|
||||||
|
|
||||||
MISSION={}--Clearing mission for custom game
|
MISSION={}--Clearing mission for custom game
|
||||||
|
|
||||||
GAME={--Global game data
|
GAME={--Global game data
|
||||||
@@ -178,12 +201,15 @@ GAME={--Global game data
|
|||||||
garbageSpeed=1, --Garbage timing speed
|
garbageSpeed=1, --Garbage timing speed
|
||||||
warnLVL0=0, --Warning level
|
warnLVL0=0, --Warning level
|
||||||
warnLVL=0, --Warning level (show)
|
warnLVL=0, --Warning level (show)
|
||||||
recording=false, --If recording
|
|
||||||
replaying=false, --If replaying
|
seed=1046101471, --Game seed
|
||||||
seed=math.random(2e6),--Game seed
|
|
||||||
curMode=nil, --Current gamemode object
|
curMode=nil, --Current gamemode object
|
||||||
|
modeEnv=nil, --Current gamemode environment
|
||||||
setting={}, --Game settings
|
setting={}, --Game settings
|
||||||
rec={}, --Recording list, key,time,key,time...
|
rec={}, --Recording list, key,time,key,time...
|
||||||
|
recording=false, --If recording
|
||||||
|
replaying=false, --If replaying
|
||||||
|
unranked=nil, --unranked if specific mod is on
|
||||||
rank=nil, --Rank reached
|
rank=nil, --Rank reached
|
||||||
|
|
||||||
prevBG=nil, --Previous background, for restore BG when quit setting page
|
prevBG=nil, --Previous background, for restore BG when quit setting page
|
||||||
|
|||||||
@@ -89,6 +89,8 @@ return{
|
|||||||
|
|
||||||
errorMsg="An error has occurred and Techmino needs to restart.\nError info has been created, and you can send it to the author.",
|
errorMsg="An error has occurred and Techmino needs to restart.\nError info has been created, and you can send it to the author.",
|
||||||
|
|
||||||
|
-- modInstruction="",
|
||||||
|
-- modInfo={},--See lang_zh.lua
|
||||||
acts={
|
acts={
|
||||||
"Move Left:","Move Right:",
|
"Move Left:","Move Right:",
|
||||||
"Rotate Right:","Rotate Left:","Rotate 180°:",
|
"Rotate Right:","Rotate Left:","Rotate 180°:",
|
||||||
@@ -186,8 +188,13 @@ return{
|
|||||||
minigame="Mini Games",
|
minigame="Mini Games",
|
||||||
},
|
},
|
||||||
mode={
|
mode={
|
||||||
|
mod="Mods (F1)",
|
||||||
start="Start",
|
start="Start",
|
||||||
},
|
},
|
||||||
|
mod={
|
||||||
|
title="Mods",
|
||||||
|
unranked="Unranked",
|
||||||
|
},
|
||||||
play={
|
play={
|
||||||
pause="Pause",
|
pause="Pause",
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -92,6 +92,8 @@ return{
|
|||||||
|
|
||||||
errorMsg="Une erreur est survenue et Techmino doit redémarrer.\nDes informations concernant l'erreur ont été créées, et vous pouvez les envoyer au créateur.",
|
errorMsg="Une erreur est survenue et Techmino doit redémarrer.\nDes informations concernant l'erreur ont été créées, et vous pouvez les envoyer au créateur.",
|
||||||
|
|
||||||
|
-- modInstruction="",
|
||||||
|
-- modInfo={},--See lang_en.lua
|
||||||
acts={
|
acts={
|
||||||
"Déplacement vers la gauche :","Déplacement vers la droite :",
|
"Déplacement vers la gauche :","Déplacement vers la droite :",
|
||||||
"Rotation vers la droite:","Rotation vers la gauche :","180° :",
|
"Rotation vers la droite:","Rotation vers la gauche :","180° :",
|
||||||
@@ -99,7 +101,6 @@ return{
|
|||||||
"Déplacement instantané vers la gauche :","Déplacement instantané vers la droite : ","Chute sonique :","Descendre de 1 :","Descendre de 4 :","Descendre de 10 :",
|
"Déplacement instantané vers la gauche :","Déplacement instantané vers la droite : ","Chute sonique :","Descendre de 1 :","Descendre de 4 :","Descendre de 10 :",
|
||||||
"Chute à gauche :","Chute à droite :","Zangi gauche :","Zangi droite :",
|
"Chute à gauche :","Chute à droite :","Zangi gauche :","Zangi droite :",
|
||||||
},
|
},
|
||||||
load={[0]="Terminé","Chargement de la voix","Chargement de la musique","Chargement des effets sonores","Chargement des images","Chargement des polices","chargement des modes","Loading other things"},
|
|
||||||
pauseStat={
|
pauseStat={
|
||||||
"Temps :",
|
"Temps :",
|
||||||
"Touche/Rot./Réserve :",
|
"Touche/Rot./Réserve :",
|
||||||
@@ -190,8 +191,13 @@ return{
|
|||||||
minigame="Minijeux",
|
minigame="Minijeux",
|
||||||
},
|
},
|
||||||
mode={
|
mode={
|
||||||
|
-- mod="Mods (F1)",
|
||||||
start="Démarrer",
|
start="Démarrer",
|
||||||
},
|
},
|
||||||
|
mod={
|
||||||
|
-- title="Mods",
|
||||||
|
-- unranked="Unranked",
|
||||||
|
},
|
||||||
play={
|
play={
|
||||||
pause="Pause",
|
pause="Pause",
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -92,6 +92,8 @@ return{
|
|||||||
|
|
||||||
errorMsg="Ha ocurrido un error y Techmino necesita reiniciarse.\nSe creó un registro de error, puedes enviarlo al autor.",
|
errorMsg="Ha ocurrido un error y Techmino necesita reiniciarse.\nSe creó un registro de error, puedes enviarlo al autor.",
|
||||||
|
|
||||||
|
-- modInstruction="",
|
||||||
|
-- modInfo={},--See lang_en.lua
|
||||||
acts={
|
acts={
|
||||||
"Mover a Izq.:","Mover a Der.:",
|
"Mover a Izq.:","Mover a Der.:",
|
||||||
"Rotar Der.:","Rotar Izq.:","Rotar 180°:",
|
"Rotar Der.:","Rotar Izq.:","Rotar 180°:",
|
||||||
@@ -101,8 +103,6 @@ return{
|
|||||||
"Izq. Instant.:","Der. Instant.:","Sonic Drop:","Abajo 1:","Abajo 4:","Abajo 10:",
|
"Izq. Instant.:","Der. Instant.:","Sonic Drop:","Abajo 1:","Abajo 4:","Abajo 10:",
|
||||||
"Caída a Izq.:","Caída a Der.:","Zangi a Izq.:","Zangi a Der.:",
|
"Caída a Izq.:","Caída a Der.:","Zangi a Izq.:","Zangi a Der.:",
|
||||||
},
|
},
|
||||||
|
|
||||||
load={[0]="Terminado","Cargando voces","Cargando bgm","Cargando sfx","Cargando imágenes","Cargando fuentes","Cargando modos","Cargando otras cosas"},
|
|
||||||
pauseStat={
|
pauseStat={
|
||||||
"Tiempo:",
|
"Tiempo:",
|
||||||
"Tecla/Rot./Reserva:",
|
"Tecla/Rot./Reserva:",
|
||||||
@@ -194,8 +194,13 @@ return{
|
|||||||
minigame="Minijuegos",
|
minigame="Minijuegos",
|
||||||
},
|
},
|
||||||
mode={
|
mode={
|
||||||
|
-- mod="Mods (F1)",
|
||||||
start="Empezar",
|
start="Empezar",
|
||||||
},
|
},
|
||||||
|
mod={
|
||||||
|
-- title="Mods",
|
||||||
|
-- unranked="Unranked",
|
||||||
|
},
|
||||||
play={
|
play={
|
||||||
pause="Pausa",
|
pause="Pausa",
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -124,8 +124,13 @@ return{
|
|||||||
minigame="^_^",
|
minigame="^_^",
|
||||||
},
|
},
|
||||||
mode={
|
mode={
|
||||||
|
mod="?!?!?!(F1)",
|
||||||
start="!!!",
|
start="!!!",
|
||||||
},
|
},
|
||||||
|
mod={
|
||||||
|
title="?!?!?!",
|
||||||
|
unranked="X!!!",
|
||||||
|
},
|
||||||
play={
|
play={
|
||||||
pause="||",
|
pause="||",
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -90,6 +90,32 @@ return{
|
|||||||
|
|
||||||
errorMsg="Techmino遭受了雷击,需要重新启动.\n我们已收集了一些错误信息,你可以向作者进行反馈.",
|
errorMsg="Techmino遭受了雷击,需要重新启动.\n我们已收集了一些错误信息,你可以向作者进行反馈.",
|
||||||
|
|
||||||
|
modInstruction="选择你要使用的Mod!\n不同的Mod会用不同的方式改变游戏规则,来开发新玩法挑战自我吧!\n提醒:开启一些Mod会让成绩无效 你可以用键盘开关Mod,按tab重置",
|
||||||
|
modInfo={
|
||||||
|
noNext="无Next:\n禁用Next",
|
||||||
|
hideNext="隐藏Next:\n隐藏前几个Next",
|
||||||
|
fullNext="全Next:\n强制打开6Next",
|
||||||
|
noHold="无Hold:\n禁用Hold",
|
||||||
|
hideBlock="隐藏方块:\n隐藏当前方块",
|
||||||
|
hideGhost="隐藏阴影:\n隐藏提示阴影",
|
||||||
|
hidden="隐形:\n方块将会在锁定之后隐形",
|
||||||
|
coverBoard="遮挡:\n遮挡部分/全部场地",
|
||||||
|
maxG="20G:\n强制启用最高下落速度",
|
||||||
|
suddenLock="0锁延:\n强制启用0锁定延迟",
|
||||||
|
oneLife="一命:\n只有一条生命!",
|
||||||
|
noTele="简单操作:\n禁用10个高级操作按键",
|
||||||
|
forceB2B="禁断B2B:\nB2B条掉到启动线以下就会结束游戏",
|
||||||
|
forceFinesse="禁非极简:\n非极简操作将强制结束游戏",
|
||||||
|
mirror="镜像:\n场地左右颠倒",
|
||||||
|
flip="翻转:\n场地上下颠倒",
|
||||||
|
minG="0G:\n关闭重力",
|
||||||
|
infLock="无限锁延:\n方块将不会锁定",
|
||||||
|
infLife="不死:\n无限生命数",
|
||||||
|
teleMove="瞬移:\n强制启用0DAS和0ARR",
|
||||||
|
randSeq="随机序列:\n强制使用随机序列",
|
||||||
|
noRotation="无旋转:\n禁用旋转按键",
|
||||||
|
noMove="无移动:\n禁用移动按键",
|
||||||
|
},
|
||||||
acts={
|
acts={
|
||||||
"左移:","右移:",
|
"左移:","右移:",
|
||||||
"顺时针旋转:","逆时针旋转:","180°旋转:",
|
"顺时针旋转:","逆时针旋转:","180°旋转:",
|
||||||
@@ -99,7 +125,6 @@ return{
|
|||||||
"左瞬移:","右瞬移:","软降到底:","软降一格:","软降四格:","软降十格:",
|
"左瞬移:","右瞬移:","软降到底:","软降一格:","软降四格:","软降十格:",
|
||||||
"落在最左:","落在最右:","列在最左:","列在最右:",
|
"落在最左:","落在最右:","列在最左:","列在最右:",
|
||||||
},
|
},
|
||||||
|
|
||||||
pauseStat={
|
pauseStat={
|
||||||
"时间:",
|
"时间:",
|
||||||
"按键/旋转/暂存:",
|
"按键/旋转/暂存:",
|
||||||
@@ -191,8 +216,13 @@ return{
|
|||||||
minigame="小游戏",
|
minigame="小游戏",
|
||||||
},
|
},
|
||||||
mode={
|
mode={
|
||||||
|
mod="Mods (F1)",
|
||||||
start="开始",
|
start="开始",
|
||||||
},
|
},
|
||||||
|
mod={
|
||||||
|
title="Mods",
|
||||||
|
unranked="成绩无效",
|
||||||
|
},
|
||||||
play={
|
play={
|
||||||
pause="暂停",
|
pause="暂停",
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -27,6 +27,32 @@ return{
|
|||||||
|
|
||||||
ranks={"差","可","中","良","优"},
|
ranks={"差","可","中","良","优"},
|
||||||
|
|
||||||
|
modInstruction="选择你要使用的模组!\n不同的模组会用不同的方式改变游戏规则,来开发新玩法挑战自我吧!\n提醒:开启一些模组会让成绩无效 你可以用键盘开关模组,按tab重置",
|
||||||
|
modInfo={
|
||||||
|
noNext="无预览:\n禁用预览",
|
||||||
|
hideNext="隐藏预览:\n隐藏前几个预览",
|
||||||
|
fullNext="全预览:\n强制打开6预览",
|
||||||
|
noHold="无暂存:\n禁用暂存",
|
||||||
|
hideBlock="隐藏方块:\n隐藏当前方块",
|
||||||
|
hideGhost="隐藏阴影:\n隐藏提示阴影",
|
||||||
|
hidden="隐形:\n方块将会在锁定之后隐形",
|
||||||
|
coverBoard="遮挡:\n遮挡部分/全部场地",
|
||||||
|
maxG="20G:\n强制启用最高下落速度",
|
||||||
|
suddenLock="0锁延:\n强制启用0锁定延迟",
|
||||||
|
oneLife="一命:\n只有一条生命!",
|
||||||
|
noTele="简单操作:\n禁用10个高级操作按键",
|
||||||
|
forceB2B="禁断满贯:\n满贯点数掉到启动线以下就会结束游戏",
|
||||||
|
forceFinesse="禁非极简:\n非极简操作将强制结束游戏",
|
||||||
|
mirror="镜像:\n场地左右颠倒",
|
||||||
|
flip="翻转:\n场地上下颠倒",
|
||||||
|
minG="0G:\n关闭重力",
|
||||||
|
infLock="无限锁延:\n方块将不会锁定",
|
||||||
|
infLife="不死:\n无限生命数",
|
||||||
|
teleMove="瞬移:\n强制启用0DAS和0ARR",
|
||||||
|
randSeq="随机序列:\n强制使用随机序列",
|
||||||
|
noRotation="无旋转:\n禁用旋转按键",
|
||||||
|
noMove="无移动:\n禁用移动按键",
|
||||||
|
},
|
||||||
pauseStat={
|
pauseStat={
|
||||||
"时间:",
|
"时间:",
|
||||||
"按键/旋转/暂存:",
|
"按键/旋转/暂存:",
|
||||||
@@ -49,6 +75,12 @@ return{
|
|||||||
"挖/分",
|
"挖/分",
|
||||||
},
|
},
|
||||||
WidgetText={
|
WidgetText={
|
||||||
|
mode={
|
||||||
|
mod="模组(F1)",
|
||||||
|
},
|
||||||
|
mod={
|
||||||
|
title="模组",
|
||||||
|
},
|
||||||
setting_control={
|
setting_control={
|
||||||
das="首次移动延迟",arr="移动重复延迟",
|
das="首次移动延迟",arr="移动重复延迟",
|
||||||
sddas="首次软降延迟",sdarr="软降重复延迟",
|
sddas="首次软降延迟",sdarr="软降重复延迟",
|
||||||
@@ -63,6 +95,15 @@ return{
|
|||||||
spin6="转",
|
spin6="转",
|
||||||
spin7="转",
|
spin7="转",
|
||||||
},
|
},
|
||||||
|
custom_advance={
|
||||||
|
nextCount="Next个数",
|
||||||
|
holdCount="暂存个数",
|
||||||
|
infHold="无限暂存",
|
||||||
|
|
||||||
|
mindas="最小首次移动延迟",
|
||||||
|
minarr="最小移动重复延迟",
|
||||||
|
minsdarr="最小软降重复延迟",
|
||||||
|
},
|
||||||
music={
|
music={
|
||||||
bgm="音乐",
|
bgm="音乐",
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -214,6 +214,11 @@ local function loadGameEnv(P)--Load gameEnv
|
|||||||
ENV[k]=copyTable(v)
|
ENV[k]=copyTable(v)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
for _,M in next,MODOPT do
|
||||||
|
if M.sel>0 then
|
||||||
|
M.func(P,M)
|
||||||
|
end
|
||||||
|
end
|
||||||
end
|
end
|
||||||
local function applyGameEnv(P)--Finish gameEnv processing
|
local function applyGameEnv(P)--Finish gameEnv processing
|
||||||
local ENV=P.gameEnv
|
local ENV=P.gameEnv
|
||||||
|
|||||||
@@ -1342,6 +1342,10 @@ local function gameOver()--Save record
|
|||||||
local P=PLAYERS[1]
|
local P=PLAYERS[1]
|
||||||
R=R(P)--New rank
|
R=R(P)--New rank
|
||||||
if R then
|
if R then
|
||||||
|
if R>0 then
|
||||||
|
GAME.rank=R
|
||||||
|
end
|
||||||
|
if not GAME.unranked then
|
||||||
local r=RANKS[M.name]--Old rank
|
local r=RANKS[M.name]--Old rank
|
||||||
local needSave
|
local needSave
|
||||||
if R>r then
|
if R>r then
|
||||||
@@ -1349,7 +1353,6 @@ local function gameOver()--Save record
|
|||||||
needSave=true
|
needSave=true
|
||||||
end
|
end
|
||||||
if R>0 then
|
if R>0 then
|
||||||
GAME.rank=R
|
|
||||||
if M.unlock then
|
if M.unlock then
|
||||||
for i=1,#M.unlock do
|
for i=1,#M.unlock do
|
||||||
local m=M.unlock[i]
|
local m=M.unlock[i]
|
||||||
@@ -1385,6 +1388,7 @@ local function gameOver()--Save record
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
end
|
||||||
|
|
||||||
function Player.die(P)--Called both when win/lose!
|
function Player.die(P)--Called both when win/lose!
|
||||||
P.alive=false
|
P.alive=false
|
||||||
|
|||||||
119
parts/scenes/mod.lua
Normal file
119
parts/scenes/mod.lua
Normal file
@@ -0,0 +1,119 @@
|
|||||||
|
local gc=love.graphics
|
||||||
|
|
||||||
|
local function checkunranked()
|
||||||
|
for _,M in next,MODOPT do
|
||||||
|
if M.sel>0 and M.unranked then
|
||||||
|
return true
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
local function toggleMod(M)
|
||||||
|
if M.list then
|
||||||
|
M.sel=(M.sel+1)%(#M.list+1)
|
||||||
|
else
|
||||||
|
M.sel=1-M.sel
|
||||||
|
end
|
||||||
|
if M.sel>0 and M.conflict then
|
||||||
|
for _,v in next,M.conflict do
|
||||||
|
MODOPT[v].sel=0
|
||||||
|
end
|
||||||
|
end
|
||||||
|
sceneTemp.unranked=checkunranked()
|
||||||
|
SFX.play("move")
|
||||||
|
end
|
||||||
|
|
||||||
|
function sceneInit.mod()
|
||||||
|
sceneTemp={
|
||||||
|
sel=nil,--selected mod name
|
||||||
|
unranked=checkunranked(),--if unranked
|
||||||
|
}
|
||||||
|
BG.set("tunnel")
|
||||||
|
end
|
||||||
|
|
||||||
|
function mouseMove.mod(x,y)
|
||||||
|
sceneTemp.sel=nil
|
||||||
|
for N,M in next,MODOPT do
|
||||||
|
if(x-M.x)^2+(y-M.y)^2<1600 then
|
||||||
|
sceneTemp.sel=N
|
||||||
|
break
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
function mouseDown.mod(x,y,k)
|
||||||
|
if k==1 then
|
||||||
|
for _,M in next,MODOPT do
|
||||||
|
if(x-M.x)^2+(y-M.y)^2<1600 then
|
||||||
|
toggleMod(M)
|
||||||
|
break
|
||||||
|
end
|
||||||
|
end
|
||||||
|
elseif k==2 then
|
||||||
|
SCN.back()
|
||||||
|
end
|
||||||
|
end
|
||||||
|
function keyDown.mod(key)
|
||||||
|
if key=="tab"or key=="delete"or key=="`"then
|
||||||
|
for _,M in next,MODOPT do
|
||||||
|
M.sel=0
|
||||||
|
end
|
||||||
|
elseif #key==1 then
|
||||||
|
for N,M in next,MODOPT do
|
||||||
|
if key==M.key then
|
||||||
|
toggleMod(M)
|
||||||
|
sceneTemp.sel=N
|
||||||
|
break
|
||||||
|
end
|
||||||
|
end
|
||||||
|
elseif key=="escape"then
|
||||||
|
SCN.back()
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
function Tmr.mod()
|
||||||
|
for _,M in next,MODOPT do
|
||||||
|
if M.sel==0 then
|
||||||
|
if M.time>0 then
|
||||||
|
M.time=M.time-1
|
||||||
|
end
|
||||||
|
else
|
||||||
|
if M.time<10 then
|
||||||
|
M.time=M.time+1
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
function Pnt.mod()
|
||||||
|
setFont(40)
|
||||||
|
gc.setLineWidth(4)
|
||||||
|
for _,M in next,MODOPT do
|
||||||
|
gc.push("transform")
|
||||||
|
gc.translate(M.x,M.y)
|
||||||
|
local t=M.time*.01
|
||||||
|
gc.scale(1+3*t)
|
||||||
|
gc.rotate(t)
|
||||||
|
local color=M.color
|
||||||
|
gc.setColor(color[1],color[2],color[3],5*t)
|
||||||
|
gc.circle("fill",0,0,40)
|
||||||
|
|
||||||
|
gc.setColor(color)
|
||||||
|
gc.circle("line",0,0,40)
|
||||||
|
gc.setColor(1,1,1)
|
||||||
|
mStr(M.id,0,-28)
|
||||||
|
if M.sel>0 and M.list then
|
||||||
|
setFont(25)
|
||||||
|
gc.setColor(1,1,1,10*t)
|
||||||
|
mStr(M.list[M.sel],20,8)
|
||||||
|
setFont(40)
|
||||||
|
end
|
||||||
|
gc.pop()
|
||||||
|
end
|
||||||
|
|
||||||
|
setFont(30)
|
||||||
|
gc.printf(sceneTemp.sel and text.modInfo[sceneTemp.sel]or text.modInstruction,70,540,950)
|
||||||
|
end
|
||||||
|
|
||||||
|
WIDGET.init("mod",{
|
||||||
|
WIDGET.newText({name="title",x=80,y=50,font=70,align="L"}),
|
||||||
|
WIDGET.newText({name="unranked",x=1200,y=60,color="lRed",font=50,align="R",hide=function()return not sceneTemp.unranked end}),
|
||||||
|
WIDGET.newButton({name="back",x=1140,y=640,w=170,h=80,font=40,code=WIDGET.lnk_BACK}),
|
||||||
|
})
|
||||||
@@ -123,6 +123,8 @@ function keyDown.mode(key)
|
|||||||
SCN.push()
|
SCN.push()
|
||||||
loadGame(mapCam.sel)
|
loadGame(mapCam.sel)
|
||||||
end
|
end
|
||||||
|
elseif key=="f1"then
|
||||||
|
SCN.go("mod")
|
||||||
elseif key=="escape"then
|
elseif key=="escape"then
|
||||||
if mapCam.sel then
|
if mapCam.sel then
|
||||||
mapCam.sel=nil
|
mapCam.sel=nil
|
||||||
@@ -307,6 +309,7 @@ function Pnt.mode()
|
|||||||
end
|
end
|
||||||
|
|
||||||
WIDGET.init("mode",{
|
WIDGET.init("mode",{
|
||||||
|
WIDGET.newKey({name="mod", x=140,y=655,w=210,h=80,font=35,code=WIDGET.lnk_goScene("mod")}),
|
||||||
WIDGET.newButton({name="start", x=1040,y=655,w=180,h=80,font=40,code=WIDGET.lnk_pressKey("return"),hide=function()return not mapCam.sel end}),
|
WIDGET.newButton({name="start", x=1040,y=655,w=180,h=80,font=40,code=WIDGET.lnk_pressKey("return"),hide=function()return not mapCam.sel end}),
|
||||||
WIDGET.newButton({name="back", x=1200,y=655,w=120,h=80,font=40,code=WIDGET.lnk_BACK}),
|
WIDGET.newButton({name="back", x=1200,y=655,w=120,h=80,font=40,code=WIDGET.lnk_BACK}),
|
||||||
})
|
})
|
||||||
Reference in New Issue
Block a user