Compare commits

..

1 Commits

Author SHA1 Message Date
MrZ_26
1641440886 0.7.31+α 2020-02-04 19:37:41 +08:00
29 changed files with 545 additions and 489 deletions

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@@ -108,7 +108,6 @@ function switch:draw()
--frame --frame
local t=self.text local t=self.text
if t then if t then
if type(t)=="function"then t=t()end
gc.setColor(1,1,1) gc.setColor(1,1,1)
setFont(self.font) setFont(self.font)
gc.printf(t,x-412,y+20-self.font*.7,400,"right") gc.printf(t,x-412,y+20-self.font*.7,400,"right")

View File

@@ -1,5 +1,5 @@
math.randomseed(os.time()) math.randomseed(os.time())
gameVersion="Alpha V0.7.30" gameVersion="Alpha V0.7.31+"
function love.conf(t) function love.conf(t)
t.identity="Techmino"--Save directory name t.identity="Techmino"--Save directory name
t.version="11.1" t.version="11.1"
@@ -23,7 +23,7 @@ function love.conf(t)
W.resizable=1 W.resizable=1
W.fullscreentype="desktop"--"exclusive" W.fullscreentype="desktop"--"exclusive"
W.fullscreen=X W.fullscreen=X
W.vsync=X--0→∞fps W.vsync=0--0→∞fps
W.msaa=X--The number of samples to use with multi-sampled antialiasing (number) W.msaa=X--The number of samples to use with multi-sampled antialiasing (number)
W.depth=X--Bits per sample in the depth buffer W.depth=X--Bits per sample in the depth buffer
W.stencil=1--The number of bits per sample in the stencil buffer W.stencil=1--The number of bits per sample in the stencil buffer

View File

@@ -532,7 +532,9 @@ end
function Event.classic_reach(P) function Event.classic_reach(P)
if P.stat.row>=P.gameEnv.target then if P.stat.row>=P.gameEnv.target then
P.gameEnv.target=P.gameEnv.target+10 P.gameEnv.target=P.gameEnv.target+10
if P.gameEnv.target==100 then if P.gameEnv.target==110 then
P.gameEnv.drop,P.gameEnv.lock=2,2
elseif P.gameEnv.target==210 then
P.gameEnv.drop,P.gameEnv.lock=1,1 P.gameEnv.drop,P.gameEnv.lock=1,1
end end
SFX("reach") SFX("reach")
@@ -561,6 +563,7 @@ function Event.GM_reach(P)
if R==4 then R=10 end if R==4 then R=10 end
P.modeData.point=P.modeData.point+R P.modeData.point=P.modeData.point+R
if P.stat.time>=53.5 then if P.stat.time>=53.5 then
P.modeData.point=P.modeData.point+15
Event.win(P) Event.win(P)
end end
end end
@@ -949,7 +952,7 @@ function Event_task.PC(P)
end end
end end
function Event_task.bgmFadeOut(_,id) function Event_task.bgmFadeOut(_,id)
local v=bgm[id]:getVolume()-.025*setting.bgm*.125 local v=bgm[id]:getVolume()-.025*setting.bgm*.1
bgm[id]:setVolume(v>0 and v or 0) bgm[id]:setVolume(v>0 and v or 0)
if v<=0 then if v<=0 then
bgm[id]:stop() bgm[id]:stop()
@@ -957,9 +960,9 @@ function Event_task.bgmFadeOut(_,id)
end end
end end
function Event_task.bgmFadeIn(_,id) function Event_task.bgmFadeIn(_,id)
local v=min(bgm[id]:getVolume()+.025*setting.bgm*.125,setting.bgm*.125) local v=min(bgm[id]:getVolume()+.025*setting.bgm*.1,setting.bgm*.1)
bgm[id]:setVolume(v) bgm[id]:setVolume(v)
if v>=setting.bgm*.125 then return true end if v>=setting.bgm*.1 then return true end
end end
-------------------------</Tasks>------------------------- -------------------------</Tasks>-------------------------
@@ -981,458 +984,457 @@ local Fkey_func={
P.modeData.event=1-P.modeData.event P.modeData.event=1-P.modeData.event
end, end,
} }
defaultModeEnv={ defModeEnv={}
sprint={ defModeEnv.sprint={
{ {
drop=60,lock=60, drop=60,lock=60,
target=10,dropPiece="reach_winCheck", target=10,dropPiece="reach_winCheck",
bg="strap",bgm="race", bg="strap",bgm="race",
},
{
drop=60,lock=60,
target=20,dropPiece="reach_winCheck",
bg="strap",bgm="race",
},
{
drop=60,lock=60,
target=40,dropPiece="reach_winCheck",
bg="strap",bgm="race",
},
{
drop=60,lock=60,
target=100,dropPiece="reach_winCheck",
bg="strap",bgm="race",
},
{
drop=60,lock=60,
target=400,dropPiece="reach_winCheck",
bg="strap",bgm="push",
},
{
drop=60,lock=60,
target=1000,dropPiece="reach_winCheck",
bg="strap",bgm="push",
},
}, },
marathon={ {
{ drop=60,lock=60,
drop=60,lock=60,fall=30, target=20,dropPiece="reach_winCheck",
target=200,dropPiece="reach_winCheck", bg="strap",bgm="race",
bg="strap",bgm="way",
},
{
drop=60,fall=20,
target=10,dropPiece="marathon_update",
bg="strap",bgm="way",
},
{
_20G=true,fall=15,
target=200,dropPiece="reach_winCheck",
bg="strap",bgm="race",
},
}, },
master={ {
{ drop=60,lock=60,
_20G=true,lock=rush_lock[1], target=40,dropPiece="reach_winCheck",
wait=rush_wait[1], bg="strap",bgm="race",
fall=rush_fall[1],
dropPiece="master_score",
das=9,arr=3,
freshLimit=15,
bg="strap",bgm="secret8th",
},
{
_20G=true,lock=death_lock[1],
wait=death_wait[1],
fall=death_fall[1],
dropPiece="master_score",
das=6,arr=1,
freshLimit=15,
bg="game2",bgm="secret7th",
},
{
_20G=true,lock=12,
wait=10,fall=10,
dropPiece="master_score_hard",
das=5,arr=1,
freshLimit=15,
easyFresh=false,bone=true,
bg="none",bgm="shining terminal",
},
}, },
classic={ {
{ drop=60,lock=60,
das=15,arr=3,sddas=2,sdarr=2, target=100,dropPiece="reach_winCheck",
ghost=false,center=false, bg="strap",bgm="race",
drop=2,lock=2,wait=10,fall=25,
next=1,hold=false,
sequence="rnd",
freshLimit=0,
target=10,dropPiece="classic_reach",
bg="rgb",bgm="rockblock",
},
}, },
zen={ {
{ drop=60,lock=60,
drop=1e99,lock=1e99, target=400,dropPiece="reach_winCheck",
oncehold=false, bg="strap",bgm="push",
dropPiece="reach_winCheck",
bg="strap",bgm="infinite",
},
}, },
infinite={ {
{ drop=60,lock=60,
drop=1e99,lock=1e99, target=1000,dropPiece="reach_winCheck",
oncehold=false, bg="strap",bgm="push",
bg="glow",bgm="infinite",
},
{
drop=1e99,lock=1e99,
oncehold=false,
dropPiece="infinite_check",
bg="glow",bgm="infinite",
},
}, },
solo={ }
{ defModeEnv.marathon={
drop=60,lock=60, {
freshLimit=15, drop=60,lock=60,fall=30,
bg="game2",bgm="race", target=200,dropPiece="reach_winCheck",
}, bg="strap",bgm="way",
}, },
round={ {
{ drop=60,fall=20,
drop=1e99,lock=1e99, target=10,dropPiece="marathon_update",
oncehold=false, bg="strap",bgm="way",
dropPiece="round_check",
bg="game2",bgm="push",
},
}, },
tsd={ {
{ _20G=true,fall=15,
oncehold=false, target=200,dropPiece="reach_winCheck",
drop=1e99,lock=1e99, bg="strap",bgm="race",
dropPiece="tsd_reach",
ospin=false,
bg="matrix",bgm="reason",
},
{
drop=60,lock=60,
freshLimit=15,
dropPiece="tsd_reach",
ospin=false,
bg="matrix",bgm="reason",
},
}, },
blind={ }
{ defModeEnv.master={
drop=30,lock=45, {
freshLimit=10, _20G=true,lock=rush_lock[1],
visible="time", wait=rush_wait[1],
bg="glow",bgm="newera", fall=rush_fall[1],
}, dropPiece="master_score",
{ das=9,arr=3,
drop=15,lock=45, freshLimit=15,
freshLimit=10, bg="strap",bgm="secret8th",
visible="fast",
freshLimit=10,
bg="glow",bgm="reason",
},
{
drop=15,lock=45,
fall=10,lock=60,
center=false,
visible="none",
freshLimit=15,
bg="rgb",bgm="secret7th",
},
{
drop=10,lock=45,
fall=5,lock=60,
center=false,ghost=false,
visible="none",
freshLimit=15,
bg="rgb",bgm="secret8th",
},
{
drop=30,lock=60,
fall=5,
block=false,
center=false,ghost=false,
visible="none",
freshLimit=15,
bg="rgb",bgm="secret7th",
},
{
_20G=true,
drop=0,lock=15,
wait=10,fall=15,
visible="fast",
freshLimit=15,
dropPiece="GM_reach",
arr=1,
bg="game3",bgm="shining terminal",
},
}, },
dig={ {
{ _20G=true,lock=death_lock[1],
drop=60,lock=120, wait=death_wait[1],
fall=20, fall=death_fall[1],
freshLimit=15, dropPiece="master_score",
task="dig_normal", das=6,arr=1,
bg="game2",bgm="push", freshLimit=15,
}, bg="game2",bgm="secret7th",
{
drop=10,lock=30,
freshLimit=15,
task="dig_lunatic",
bg="game2",bgm="secret7th",
},
}, },
survivor={ {
{ _20G=true,lock=12,
drop=60,lock=120, wait=10,fall=10,
fall=30, dropPiece="master_score_hard",
freshLimit=15, das=5,arr=1,
task="survivor_easy", freshLimit=15,
bg="game2",bgm="push", easyFresh=false,bone=true,
}, bg="none",bgm="shining terminal",
{
drop=30,lock=60,
fall=20,
freshLimit=15,
task="survivor_normal",
bg="game2",bgm="newera",
},
{
drop=10,lock=60,
fall=15,
freshLimit=15,
task="survivor_hard",
bg="game2",bgm="secret8th",
},
{
drop=6,lock=60,
fall=10,
freshLimit=15,
task="survivor_lunatic",
bg="game3",bgm="secret7th",
},
{
drop=5,lock=60,
fall=10,
freshLimit=15,
task="survivor_ultimate",
bg="rgb",bgm="secret7th",
},
}, },
defender={ }
{ defModeEnv.classic={
drop=30,lock=60, {
fall=10, das=16,arr=6,sddas=2,sdarr=2,
freshLimit=15, ghost=false,center=false,
task="defender_normal", drop=3,lock=3,wait=10,fall=25,
bg="game3",bgm="way", next=1,hold=false,
}, sequence="rnd",
{ freshLimit=0,
drop=5,lock=60, target=10,dropPiece="classic_reach",
fall=6, bg="rgb",bgm="rockblock",
freshLimit=15,
task="defender_lunatic",
bg="game4",bgm="way",
},
}, },
attacker={ }
{ defModeEnv.zen={
drop=30,lock=60, {
fall=12, drop=1e99,lock=1e99,
freshLimit=15, oncehold=false,
task="attacker_hard", dropPiece="reach_winCheck",
bg="game3",bgm="push", bg="strap",bgm="infinite",
},
{
drop=5,lock=60,
fall=8,
freshLimit=15,
task="attacker_ultimate",
bg="game4",bgm="shining terminal",
},
}, },
tech={ }
{ defModeEnv.infinite={
oncehold=false, {
drop=1e99,lock=1e99, drop=1e99,lock=1e99,
dropPiece="tech_reach_easy", oncehold=false,
bg="matrix",bgm="newera", bg="glow",bgm="infinite",
},
{
oncehold=false,
drop=1e99,lock=1e99,
dropPiece="tech_reach_ultimate",
bg="matrix",bgm="newera",
},
{
drop=10,lock=60,
freshLimit=15,
dropPiece="tech_reach_easy",
bg="matrix",bgm="secret8th",
},
{
drop=30,lock=60,
freshLimit=15,
dropPiece="tech_reach_ultimate",
bg="matrix",bgm="secret8th",
},
{
_20G=true,lock=60,
freshLimit=15,
dropPiece="tech_reach_hard",
bg="matrix",bgm="secret7th",
},
{
_20G=true,lock=60,
freshLimit=15,
dropPiece="tech_reach_ultimate",
bg="matrix",bgm="secret7th",
},
{
drop=1e99,lock=60,
freshLimit=15,
fine=true,fineKill=true,
dropPiece="tech_reach_hard",
bg="flink",bgm="infinite",
},
{
drop=1e99,lock=60,
freshLimit=15,
fine=true,fineKill=true,
dropPiece="tech_reach_ultimate",
bg="flink",bgm="infinite",
},
}, },
c4wtrain={ {
{ drop=1e99,lock=1e99,
drop=30,lock=60, oncehold=false,
oncehold=false, dropPiece="infinite_check",
freshLimit=15, bg="glow",bgm="infinite",
dropPiece="c4w_reach",
ospin=false,
bg="rgb",bgm="newera",
},
{
drop=5,lock=30,
freshLimit=15,
dropPiece="c4w_reach",
ospin=false,
bg="rgb",bgm="newera",
},
}, },
pctrain={ }
{ defModeEnv.solo={
next=4, {
hold=false, drop=60,lock=60,
drop=150,lock=150, freshLimit=15,
fall=20, bg="game2",bgm="race",
sequence="none",
dropPiece="newPC",
ospin=false,
bg="rgb",bgm="newera",
},
{
next=4,
hold=false,
drop=60,lock=60,
fall=20,
sequence="none",
freshLimit=15,
dropPiece="newPC",
ospin=false,
bg="rgb",bgm="newera",
},
}, },
pcchallenge={ }
{ defModeEnv.round={
oncehold=false, {
drop=300,lock=1e99, drop=1e99,lock=1e99,
target=100,dropPiece="reach_winCheck", oncehold=false,
ospin=false, dropPiece="round_check",
bg="rgb",bgm="newera", bg="game2",bgm="push",
},
{
drop=60,lock=120,
fall=10,
target=100,dropPiece="reach_winCheck",
freshLimit=15,
ospin=false,
bg="rgb",bgm="infinite",
},
{
drop=20,lock=60,
fall=20,
target=100,dropPiece="reach_winCheck",
freshLimit=15,
ospin=false,
bg="rgb",bgm="infinite",
},
}, },
techmino49={ }
{ defModeEnv.tsd={
drop=60,lock=60, {
fall=20, oncehold=false,
royaleMode=true, drop=1e99,lock=1e99,
Fkey=Fkey_func.royale, dropPiece="tsd_reach",
royalePowerup={2,5,10,20}, ospin=false,
royaleRemain={30,20,15,10,5}, bg="matrix",bgm="reason",
pushSpeed=2,
freshLimit=15,
bg="game3",bgm="rockblock",
},
}, },
techmino99={ {
{ drop=60,lock=60,
drop=60,lock=60, freshLimit=15,
fall=20, dropPiece="tsd_reach",
royaleMode=true, ospin=false,
Fkey=Fkey_func.royale, bg="matrix",bgm="reason",
royalePowerup={2,6,14,30},
royaleRemain={75,50,35,20,10},
pushSpeed=2,
freshLimit=15,
bg="game3",bgm="rockblock",
},
}, },
drought={ }
{ defModeEnv.blind={
drop=20,lock=60, {
sequence="drought1", drop=30,lock=45,
target=100,dropPiece="reach_winCheck", freshLimit=10,
ospin=false, visible="time",
freshLimit=15, bg="glow",bgm="newera",
bg="glow",bgm="reason",
},
{
drop=20,lock=60,
sequence="drought2",
target=100,dropPiece="reach_winCheck",
ospin=false,
freshLimit=15,
bg="glow",bgm="reason",
},
}, },
hotseat={ {
{ drop=15,lock=45,
drop=60,lock=60, freshLimit=10,
freshLimit=15, visible="fast",
bg="none",bgm="way", freshLimit=10,
}, bg="glow",bgm="reason",
}, },
custom={ {
{ drop=15,lock=45,
dropPiece="reach_winCheck", fall=10,lock=60,
}, center=false,
{ visible="none",
Fkey=Fkey_func.puzzle,puzzle=true, freshLimit=15,
dropPiece="puzzleCheck", bg="rgb",bgm="secret7th",
}, },
{
drop=10,lock=45,
fall=5,lock=60,
center=false,ghost=false,
visible="none",
freshLimit=15,
bg="rgb",bgm="secret8th",
},
{
drop=30,lock=60,
fall=5,
block=false,
center=false,ghost=false,
visible="none",
freshLimit=15,
bg="rgb",bgm="secret7th",
},
{
_20G=true,
drop=0,lock=15,
wait=10,fall=15,
visible="fast",
freshLimit=15,
dropPiece="GM_reach",
arr=1,
bg="game3",bgm="shining terminal",
},
}
defModeEnv.dig={
{
drop=60,lock=120,
fall=20,
freshLimit=15,
task="dig_normal",
bg="game2",bgm="push",
},
{
drop=10,lock=30,
freshLimit=15,
task="dig_lunatic",
bg="game2",bgm="secret7th",
},
}
defModeEnv.survivor={
{
drop=60,lock=120,
fall=30,
freshLimit=15,
task="survivor_easy",
bg="game2",bgm="push",
},
{
drop=30,lock=60,
fall=20,
freshLimit=15,
task="survivor_normal",
bg="game2",bgm="newera",
},
{
drop=10,lock=60,
fall=15,
freshLimit=15,
task="survivor_hard",
bg="game2",bgm="secret8th",
},
{
drop=6,lock=60,
fall=10,
freshLimit=15,
task="survivor_lunatic",
bg="game3",bgm="secret7th",
},
{
drop=5,lock=60,
fall=10,
freshLimit=15,
task="survivor_ultimate",
bg="rgb",bgm="secret7th",
},
}
defModeEnv.defender={
{
drop=30,lock=60,
fall=10,
freshLimit=15,
task="defender_normal",
bg="game3",bgm="way",
},
{
drop=5,lock=60,
fall=6,
freshLimit=15,
task="defender_lunatic",
bg="game4",bgm="way",
},
}
defModeEnv.attacker={
{
drop=30,lock=60,
fall=12,
freshLimit=15,
task="attacker_hard",
bg="game3",bgm="push",
},
{
drop=5,lock=60,
fall=8,
freshLimit=15,
task="attacker_ultimate",
bg="game4",bgm="shining terminal",
},
}
defModeEnv.tech={
{
oncehold=false,
drop=1e99,lock=1e99,
dropPiece="tech_reach_easy",
bg="matrix",bgm="newera",
},
{
oncehold=false,
drop=1e99,lock=1e99,
dropPiece="tech_reach_ultimate",
bg="matrix",bgm="newera",
},
{
drop=10,lock=60,
freshLimit=15,
dropPiece="tech_reach_easy",
bg="matrix",bgm="secret8th",
},
{
drop=30,lock=60,
freshLimit=15,
dropPiece="tech_reach_ultimate",
bg="matrix",bgm="secret8th",
},
{
_20G=true,lock=60,
freshLimit=15,
dropPiece="tech_reach_hard",
bg="matrix",bgm="secret7th",
},
{
_20G=true,lock=60,
freshLimit=15,
dropPiece="tech_reach_ultimate",
bg="matrix",bgm="secret7th",
},
{
drop=1e99,lock=60,
freshLimit=15,
fine=true,fineKill=true,
dropPiece="tech_reach_hard",
bg="flink",bgm="infinite",
},
{
drop=1e99,lock=60,
freshLimit=15,
fine=true,fineKill=true,
dropPiece="tech_reach_ultimate",
bg="flink",bgm="infinite",
},
}
defModeEnv.c4wtrain={
{
drop=30,lock=60,
oncehold=false,
freshLimit=15,
dropPiece="c4w_reach",
ospin=false,
bg="rgb",bgm="newera",
},
{
drop=5,lock=30,
freshLimit=15,
dropPiece="c4w_reach",
ospin=false,
bg="rgb",bgm="newera",
},
}
defModeEnv.pctrain={
{
next=4,
hold=false,
drop=150,lock=150,
fall=20,
sequence="none",
dropPiece="newPC",
ospin=false,
bg="rgb",bgm="newera",
},
{
next=4,
hold=false,
drop=60,lock=60,
fall=20,
sequence="none",
freshLimit=15,
dropPiece="newPC",
ospin=false,
bg="rgb",bgm="newera",
},
}
defModeEnv.pcchallenge={
{
oncehold=false,
drop=300,lock=1e99,
target=100,dropPiece="reach_winCheck",
ospin=false,
bg="rgb",bgm="newera",
},
{
drop=60,lock=120,
fall=10,
target=100,dropPiece="reach_winCheck",
freshLimit=15,
ospin=false,
bg="rgb",bgm="infinite",
},
{
drop=20,lock=60,
fall=20,
target=100,dropPiece="reach_winCheck",
freshLimit=15,
ospin=false,
bg="rgb",bgm="infinite",
},
}
defModeEnv.techmino49={
{
drop=60,lock=60,
fall=20,
royaleMode=true,
Fkey=Fkey_func.royale,
royalePowerup={2,5,10,20},
royaleRemain={30,20,15,10,5},
pushSpeed=2,
freshLimit=15,
bg="game3",bgm="rockblock",
},
}
defModeEnv.techmino99={
{
drop=60,lock=60,
fall=20,
royaleMode=true,
Fkey=Fkey_func.royale,
royalePowerup={2,6,14,30},
royaleRemain={75,50,35,20,10},
pushSpeed=2,
freshLimit=15,
bg="game3",bgm="rockblock",
},
}
defModeEnv.drought={
{
drop=20,lock=60,
sequence="drought1",
target=100,dropPiece="reach_winCheck",
ospin=false,
freshLimit=15,
bg="glow",bgm="reason",
},
{
drop=20,lock=60,
sequence="drought2",
target=100,dropPiece="reach_winCheck",
ospin=false,
freshLimit=15,
bg="glow",bgm="reason",
},
}
defModeEnv.hotseat={
{
drop=60,lock=60,
freshLimit=15,
bg="none",bgm="way",
},
}
defModeEnv.custom={
{
dropPiece="reach_winCheck",
},
{
Fkey=Fkey_func.puzzle,puzzle=true,
dropPiece="puzzleCheck",
}, },
} }

View File

@@ -19,8 +19,9 @@ setting={
skin=1, skin=1,
--graphic --graphic
sfx=8,bgm=6, sfx=10,bgm=7,
vib=3,voc=0, vib=3,voc=0,
stereo=6,
--sound --sound
keyMap={ keyMap={

BIN
font.ttf

Binary file not shown.

View File

@@ -192,7 +192,7 @@ return{
warning="禁 止 私 自 传 播", warning="禁 止 私 自 传 播",
WidgetText={ WidgetText={
main={ main={
lang="", lang="-Lang",
qplay="快速开始", qplay="快速开始",
play="开始", play="开始",
setting="设置", setting="设置",
@@ -256,6 +256,7 @@ return{
pause={ pause={
resume= "继续", resume= "继续",
restart="重新开始", restart="重新开始",
setting="设置",
quit= "退出", quit= "退出",
}, },
setting_game={ setting_game={

View File

@@ -192,7 +192,7 @@ return{
warning="禁 止 私 自 传 播", warning="禁 止 私 自 传 播",
WidgetText={ WidgetText={
main={ main={
lang="全中", lang="-Lang",
qplay="快速开始", qplay="快速开始",
play="开始", play="开始",
setting="设置", setting="设置",
@@ -256,6 +256,7 @@ return{
pause={ pause={
resume= "继续", resume= "继续",
restart="重新开始", restart="重新开始",
setting="设置",
quit= "退出", quit= "退出",
}, },
@@ -342,4 +343,4 @@ return{
back=BK, back=BK,
}, },
}, },
}--部分译文 }

View File

@@ -191,7 +191,7 @@ Lib used:
warning="DO NOT DISTRIBUTE", warning="DO NOT DISTRIBUTE",
WidgetText={ WidgetText={
main={ main={
lang="English", lang="文-Lang",
qplay="Qplay", qplay="Qplay",
play="Play", play="Play",
setting="Settings", setting="Settings",
@@ -255,6 +255,7 @@ Lib used:
pause={ pause={
resume="Resume", resume="Resume",
restart="Restart", restart="Restart",
setting="Setting",
quit="Quit", quit="Quit",
}, },
setting_game={ setting_game={

View File

@@ -57,17 +57,20 @@ blockColor={
} }
sfx={ sfx={
"welcome", "welcome",
"error","error_long",
--Stereo sfxs
"button","swipe", "button","swipe",
"ready","start","win","fail","collect", "ready","start","win","fail","collect",
"move","rotate","rotatekick","hold", "move","rotate","rotatekick","hold",
"prerotate","prehold", "prerotate","prehold",
"lock","drop","fall", "lock","drop","fall",
"error","error_long","reach", "reach",
"ren_1","ren_2","ren_3","ren_4","ren_5","ren_6","ren_7","ren_8","ren_9","ren_10","ren_11","ren_mega", "ren_1","ren_2","ren_3","ren_4","ren_5","ren_6","ren_7","ren_8","ren_9","ren_10","ren_11","ren_mega",
"clear_1","clear_2","clear_3","clear_4", "clear_1","clear_2","clear_3","clear_4",
"spin_0","spin_1","spin_2","spin_3", "spin_0","spin_1","spin_2","spin_3",
"emit","blip_1","blip_2", "emit","blip_1","blip_2",
"perfectclear", "perfectclear",
--mono sfxs
} }
bgm={ bgm={
"blank", "blank",
@@ -330,7 +333,7 @@ Widget={
back= newButton(640, 630,230,90, color.white, 45,scene.back), back= newButton(640, 630,230,90, color.white, 45,scene.back),
}, },
music={ music={
bgm= newSlider(760, 80,400,8,40,nil,function()return setting.bgm end,function(i)setting.bgm=i;BGM(bgmPlaying)end), bgm= newSlider(760, 80,400,10,40,nil,function()return setting.bgm end,function(i)setting.bgm=i;BGM(bgmPlaying)end),
up= newButton(1100, 200,120,120,color.white,60,function()love.keypressed("up")end), up= newButton(1100, 200,120,120,color.white,60,function()love.keypressed("up")end),
play= newButton(1100, 340,120,120,color.white,40,function()love.keypressed("space")end,function()return setting.bgm==0 end), play= newButton(1100, 340,120,120,color.white,40,function()love.keypressed("space")end,function()return setting.bgm==0 end),
down= newButton(1100, 480,120,120,color.white,60,function()love.keypressed("down")end), down= newButton(1100, 480,120,120,color.white,60,function()love.keypressed("down")end),
@@ -380,6 +383,10 @@ Widget={
resetGameData() resetGameData()
scene.swapTo("play","none") scene.swapTo("play","none")
end), end),
setting=newButton(1150,80,200,100,color.yellow,45,function()
scene.push()
scene.swapTo("setting_sound")
end),
quit= newButton(640,600,240,100,color.white,50,scene.back), quit= newButton(640,600,240,100,color.white,50,scene.back),
}, },
setting_game={ setting_game={
@@ -445,10 +452,10 @@ Widget={
setting_sound={ setting_sound={
game= newButton(200,80,240,80,color.lightGreen,40,function()scene.swapTo("setting_game")end, nil,"graphic"), game= newButton(200,80,240,80,color.lightGreen,40,function()scene.swapTo("setting_game")end, nil,"graphic"),
graphic=newButton(1080,80,240,80,color.lightGreen,40,function()scene.swapTo("setting_graphic")end, nil,"sfx"), graphic=newButton(1080,80,240,80,color.lightGreen,40,function()scene.swapTo("setting_graphic")end, nil,"sfx"),
sfx=newSlider(180,250,400,8,40,function()SFX("blip_1")end, function()return setting.sfx end,function(i)setting.sfx=i end,nil,"bgm"), sfx=newSlider(180,250,400,10,40,function()SFX("blip_1")end, function()return setting.sfx end,function(i)setting.sfx=i end,nil,"bgm"),
bgm=newSlider(750,250,400,8,40,function()BGM(bgmPlaying or"blank")end, function()return setting.bgm end,function(i)setting.bgm=i end,nil,"vib"), bgm=newSlider(750,250,400,10,40,function()BGM(bgmPlaying or"blank")end, function()return setting.bgm end,function(i)setting.bgm=i end,nil,"vib"),
vib=newSlider(180,440,400,5,40,function()VIB(1)end, function()return setting.vib end,function(i)setting.vib=i end,nil,"voc"), vib=newSlider(180,440,400,5,40,function()VIB(1)end, function()return setting.vib end,function(i)setting.vib=i end,nil,"voc"),
voc=newSlider(750,440,400,8,40,function()VOICE("nya")end, function()return setting.voc end,function(i)setting.voc=i end,nil,"back"), voc=newSlider(750,440,400,10,40,function()VOICE("nya")end, function()return setting.voc end,function(i)setting.voc=i end,nil,"back"),
back=newButton(1160,600,160,160,color.white,55,scene.back,nil,"game"), back=newButton(1160,600,160,160,color.white,55,scene.back,nil,"game"),
}, },
setting_key={ setting_key={

View File

@@ -121,13 +121,15 @@ local function getNewBlock()
return t return t
end end
local function onVirtualkey(x,y) local function onVirtualkey(x,y)
local d1,nearest,distance local dist,nearest=1e15
for K=1,#virtualkey do for K=1,#virtualkey do
local b=virtualkey[K] local b=virtualkey[K]
d1=(x-b.x)^2+(y-b.y)^2 if b.ava then
if d1<b.r^2 then local d1=(x-b.x)^2+(y-b.y)^2
if not nearest or d1<distance then if d1<b.r^2 then
nearest,distance=K,d1 if d1<dist then
nearest,dist=K,d1
end
end end
end end
end end
@@ -930,7 +932,7 @@ function love.update(dt)
end end
end end
Q[1]=L[n] Q[1]=L[n]
Q[1]:setVolume(setting.voc*.125) Q[1]:setVolume(setting.voc*.1)
Q[1]:play() Q[1]:play()
--load voice with string --load voice with string
end end

View File

@@ -11,6 +11,7 @@ local scr=scr--screen camera
local gameEnv0={ local gameEnv0={
das=10,arr=2, das=10,arr=2,
sddas=2,sdarr=2, sddas=2,sdarr=2,
quickR=true,swap=true,
ghost=true,center=true, ghost=true,center=true,
grid=false,swap=true, grid=false,swap=true,
_20G=false,bone=false, _20G=false,bone=false,
@@ -317,7 +318,7 @@ local mesDisp={
mStr("Lines",-82,300) mStr("Lines",-82,300)
mStr("Techrash",-82,420) mStr("Techrash",-82,420)
if curMode.lv==6 then if curMode.lv==6 then
mStr("Point",-82,170) mStr("Grade",-82,170)
setFont(60) setFont(60)
mStr(P.modeData.point*.1,-82,110) mStr(P.modeData.point*.1,-82,110)
end end
@@ -1410,6 +1411,9 @@ local function solid(P,x,y)
if y>#P.field then return false end if y>#P.field then return false end
return P.field[y][x]>0 return P.field[y][x]>0
end end
local function getBlockDirection(P)
return(P.curX+P.sc[2]-6.5)*.15
end
function player:fineError(rate) function player:fineError(rate)
self.stat.extraPiece=self.stat.extraPiece+1 self.stat.extraPiece=self.stat.extraPiece+1
@@ -1697,7 +1701,7 @@ function player:spin(d,ifpre)
self.spinLast=2 self.spinLast=2
self.stat.rotate=self.stat.rotate+1 self.stat.rotate=self.stat.rotate+1
self:freshgho() self:freshgho()
SFX("rotatekick") SFX("rotatekick",nil,getBlockDirection(self))
return return
end end
else else
@@ -1705,7 +1709,7 @@ function player:spin(d,ifpre)
end end
end end
if self.human then if self.human then
SFX(ifpre and"prerotate"or"rotate") SFX(ifpre and"prerotate"or"rotate",nil,getBlockDirection(self))
end end
return return
end end
@@ -1736,9 +1740,8 @@ function player:spin(d,ifpre)
if not ifpre then self:freshgho()end if not ifpre then self:freshgho()end
if self.gameEnv.easyFresh or y0>self.curY then self:freshLockDelay()end if self.gameEnv.easyFresh or y0>self.curY then self:freshLockDelay()end
if self.human then if self.human then
SFX(ifpre and"prerotate"or ifoverlap(self,self.cur.bk,self.curX,self.curY+1)and ifoverlap(self,self.cur.bk,self.curX-1,self.curY)and ifoverlap(self,self.cur.bk,self.curX+1,self.curY)and"rotatekick"or"rotate") SFX(ifpre and"prerotate"or ifoverlap(self,self.cur.bk,self.curX,self.curY+1)and ifoverlap(self,self.cur.bk,self.curX-1,self.curY)and ifoverlap(self,self.cur.bk,self.curX+1,self.curY)and"rotatekick"or"rotate",nil,getBlockDirection(self))
end end
self.ctrlCount=self.ctrlCount+(d==2 and 2 or 1)
self.stat.rotate=self.stat.rotate+1 self.stat.rotate=self.stat.rotate+1
end end
function player:hold(ifpre) function player:hold(ifpre)
@@ -1810,7 +1813,7 @@ function player:resetblock()
self:freshgho() self:freshgho()
if self.keyPressing[6]then self.act.hardDrop(self)self.keyPressing[6]=false end if self.keyPressing[6]then self.act.hardDrop(self)self.keyPressing[6]=false end
end end
function player:drop()--(Place piece) function player:drop()--Place piece
self.dropTime[11]=ins(self.dropTime,1,frame)--update speed dial self.dropTime[11]=ins(self.dropTime,1,frame)--update speed dial
self.waiting=self.gameEnv.wait self.waiting=self.gameEnv.wait
local dospin=0 local dospin=0
@@ -2086,7 +2089,7 @@ function player:drop()--(Place piece)
self:garbageSend(T,send,sendTime,1,self.cur.color,self.lastClear,dospin,mini,self.combo) self:garbageSend(T,send,sendTime,1,self.cur.color,self.lastClear,dospin,mini,self.combo)
end end
self.stat.send=self.stat.send+send self.stat.send=self.stat.send+send
if self.human and send>3 then SFX("emit",min(send,8)*.125)end if self.human and send>3 then SFX("emit",min(send,8)*.1)end
end end
end end
else else
@@ -2111,7 +2114,7 @@ function player:drop()--(Place piece)
self.stat.score=self.stat.score+cscore self.stat.score=self.stat.score+cscore
self.stat.piece,self.stat.row=self.stat.piece+1,self.stat.row+cc self.stat.piece,self.stat.row=self.stat.piece+1,self.stat.row+cc
Event[self.gameEnv.dropPiece](self) Event[self.gameEnv.dropPiece](self)
if self.human then SFX("lock")end if self.human then SFX("lock",nil,getBlockDirection(self))end
end end
function player:pressKey(i) function player:pressKey(i)
self.keyPressing[i]=true self.keyPressing[i]=true
@@ -2136,8 +2139,11 @@ end
-------------------------<Controls>------------------------- -------------------------<Controls>-------------------------
player.act={} player.act={}
function player.act.moveLeft(P,auto) function player.act.moveLeft(P,auto)
if not auto then
P.ctrlCount=P.ctrlCount+1
end
if P.keyPressing[9]then if P.keyPressing[9]then
if setting.swap then if P.gameEnv.swap then
P:changeAtkMode(1) P:changeAtkMode(1)
end end
elseif P.control and P.waiting==-1 then elseif P.control and P.waiting==-1 then
@@ -2150,7 +2156,6 @@ function player.act.moveLeft(P,auto)
P.spinLast=false P.spinLast=false
if not auto then if not auto then
P.moving=-1 P.moving=-1
P.ctrlCount=P.ctrlCount+1
end end
else else
P.moving=-P.gameEnv.das-1 P.moving=-P.gameEnv.das-1
@@ -2160,8 +2165,11 @@ function player.act.moveLeft(P,auto)
end end
end end
function player.act.moveRight(P,auto) function player.act.moveRight(P,auto)
if not auto then
P.ctrlCount=P.ctrlCount+1
end
if P.keyPressing[9]then if P.keyPressing[9]then
if setting.swap then if P.gameEnv.swap then
P:changeAtkMode(2) P:changeAtkMode(2)
end end
elseif P.control and P.waiting==-1 then elseif P.control and P.waiting==-1 then
@@ -2174,7 +2182,6 @@ function player.act.moveRight(P,auto)
P.spinLast=false P.spinLast=false
if not auto then if not auto then
P.moving=1 P.moving=1
P.ctrlCount=P.ctrlCount+1
end end
else else
P.moving=P.gameEnv.das+1 P.moving=P.gameEnv.das+1
@@ -2185,25 +2192,28 @@ function player.act.moveRight(P,auto)
end end
function player.act.rotRight(P) function player.act.rotRight(P)
if P.control and P.waiting==-1 then if P.control and P.waiting==-1 then
P.ctrlCount=P.ctrlCount+1
P:spin(1) P:spin(1)
P.keyPressing[3]=false P.keyPressing[3]=false
end end
end end
function player.act.rotLeft(P) function player.act.rotLeft(P)
if P.control and P.waiting==-1 then if P.control and P.waiting==-1 then
P.ctrlCount=P.ctrlCount+1
P:spin(3) P:spin(3)
P.keyPressing[4]=false P.keyPressing[4]=false
end end
end end
function player.act.rotFlip(P) function player.act.rotFlip(P)
if P.control and P.waiting==-1 then if P.control and P.waiting==-1 then
P.ctrlCount=P.ctrlCount+2
P:spin(2) P:spin(2)
P.keyPressing[5]=false P.keyPressing[5]=false
end end
end end
function player.act.hardDrop(P) function player.act.hardDrop(P)
if P.keyPressing[9]then if P.keyPressing[9]then
if setting.swap then if P.gameEnv.swap then
P:changeAtkMode(3) P:changeAtkMode(3)
end end
P.keyPressing[6]=false P.keyPressing[6]=false
@@ -2220,7 +2230,7 @@ function player.act.hardDrop(P)
P.curY=P.y_img P.curY=P.y_img
P.spinLast=false P.spinLast=false
if P.human then if P.human then
SFX("drop") SFX("drop",nil,getBlockDirection(P))
VIB(1) VIB(1)
end end
end end
@@ -2231,7 +2241,7 @@ function player.act.hardDrop(P)
end end
function player.act.softDrop(P) function player.act.softDrop(P)
if P.keyPressing[9]then if P.keyPressing[9]then
if setting.swap then if P.gameEnv.swap then
P:changeAtkMode(4) P:changeAtkMode(4)
end end
else else
@@ -2253,7 +2263,7 @@ function player.act.func(P)
P.gameEnv.Fkey(P) P.gameEnv.Fkey(P)
end end
function player.act.restart(P) function player.act.restart(P)
if setting.quickR or frame<180 then if P.gameEnv.quickR or frame<180 then
clearTask("play") clearTask("play")
resetPartGameData() resetPartGameData()
end end
@@ -2359,5 +2369,4 @@ function player.act.addRight(P)
P.act.insLeft(P) P.act.insLeft(P)
P.act.hardDrop(P) P.act.hardDrop(P)
end end
-------------------------</Controls>------------------------- -------------------------</Controls>-------------------------

View File

@@ -66,13 +66,23 @@ local sceneInit={
if needResetGameData then if needResetGameData then
resetGameData() resetGameData()
needResetGameData=nil needResetGameData=nil
else
BGM(modeEnv.bgm)
end end
curBG=modeEnv.bg
end, end,
pause=function() pause=function()
curBG=modeEnv.bg
end, end,
setting_game=function() setting_game=function()
curBG="none" curBG="none"
end, end,
setting_graphic=function()
curBG="none"
end,
setting_sound=function()
curBG="none"
end,
setting_key=function() setting_key=function()
curBoard=1 curBoard=1
keyboardSet=1 keyboardSet=1
@@ -170,6 +180,9 @@ function scene.push(tar,style)
scene.seq[m+2]=style or"fade" scene.seq[m+2]=style or"fade"
end end
end end
function scene.pop()
scene.seq={}
end
function scene.swapTo(tar,style) function scene.swapTo(tar,style)
local S=scene.swap local S=scene.swap
if not scene.swapping and tar~=scene.cur then if not scene.swapping and tar~=scene.cur then

View File

@@ -129,19 +129,29 @@ function VIB(t)
love.system.vibrate(vibrateLevel[setting.vib+t]) love.system.vibrate(vibrateLevel[setting.vib+t])
end end
end end
function SFX(s,v) function SFX(s,v,pos)
if setting.sfx>0 then if setting.sfx>0 then
local S=sfx[s]--AU_Queue
local n=1 local n=1
while sfx[s][n]:isPlaying()do while S[n]:isPlaying()do
n=n+1 n=n+1
if not sfx[s][n]then if not S[n]then
sfx[s][n]=sfx[s][n-1]:clone() S[n]=S[n-1]:clone()
sfx[s][n]:seek(0) S[n]:seek(0)
break break
end end
end end
sfx[s][n]:setVolume((v or 1)*setting.sfx*.125) S=S[n]--AU_SRC
sfx[s][n]:play() if S:getChannelCount()==1 then
if pos then
pos=pos*setting.stereo*.1
S:setPosition(pos,1-pos^2,0)
else
S:setPosition(0,0,0)
end
end
S:setVolume((v or 1)*setting.sfx*.1)
S:play()
end end
end end
function getFreeVoiceChannel() function getFreeVoiceChannel()
@@ -182,7 +192,7 @@ function BGM(s)
bgmPlaying=s bgmPlaying=s
else else
if bgmPlaying then if bgmPlaying then
local v=setting.bgm*.125 local v=setting.bgm*.1
bgm[bgmPlaying]:setVolume(v) bgm[bgmPlaying]:setVolume(v)
if v>0 then if v>0 then
bgm[bgmPlaying]:play() bgm[bgmPlaying]:play()
@@ -330,7 +340,7 @@ function resetGameData()
pauseTime=0--Time paused pauseTime=0--Time paused
pauseCount=0--Times paused pauseCount=0--Times paused
destroyPlayers() destroyPlayers()
local E=defaultModeEnv[curMode.id] local E=defModeEnv[curMode.id]
modeEnv=E[curMode.lv]or E[1] modeEnv=E[curMode.lv]or E[1]
loadmode[curMode.id]()--bg/bgm need redefine in custom,so up here loadmode[curMode.id]()--bg/bgm need redefine in custom,so up here
if modeEnv.task then if modeEnv.task then
@@ -436,20 +446,24 @@ function loadSetting()
local p=find(t[i],"=") local p=find(t[i],"=")
if p then if p then
local t,v=sub(t[i],1,p-1),sub(t[i],p+1) local t,v=sub(t[i],1,p-1),sub(t[i],p+1)
if t=="sfx"or t=="bgm"or t=="voc"then if
setting[t]=toN(v:match("[012345678]"))or setting[t] --声音
t=="sfx"or t=="bgm"or t=="voc"or t=="stereo"or
--三个触摸设置项
t=="VKTchW"or t=="VKCurW"or t=="VKAlpha"
then
v=toN(v)
if v==int(v)and v>=0 and v<=10 then
setting[t]=v
end
elseif t=="vib"then elseif t=="vib"then
setting.vib=toN(v:match("[012345]"))or 0 setting.vib=toN(v:match("[012345]"))or 0
elseif t=="fullscreen"then elseif t=="fullscreen"then
setting.fullscreen=v=="true" setting.fullscreen=v=="true"
love.window.setFullscreen(setting.fullscreen) love.window.setFullscreen(setting.fullscreen)
elseif
--三个触摸设置项
t=="VKTchW"or t=="VKCurW"or t=="VKAlpha"
then
setting.VKTchW=min(int(abs(toN(v))),10)
elseif elseif
--开关设置们 --开关设置们
t=="bg"or
t=="ghost"or t=="center"or t=="grid"or t=="swap"or t=="ghost"or t=="center"or t=="grid"or t=="swap"or
t=="quickR"or t=="fine"or t=="bgblock"or t=="smo"or t=="quickR"or t=="fine"or t=="bgblock"or t=="smo"or
t=="VKSwitch"or t=="VKTrack"or t=="VKIcon" t=="VKSwitch"or t=="VKTrack"or t=="VKIcon"
@@ -511,6 +525,7 @@ local saveOpt={
"sfx","bgm", "sfx","bgm",
"vib","voc", "vib","voc",
"stereo",
"VKSwitch", "VKSwitch",
"VKTrack", "VKTrack",

View File

@@ -4,7 +4,6 @@ Patron(rmb10+):
[D*a]? [D*a]?
Future outlook: Future outlook:
Normal Things: Normal Things:
in-game setting(scene-sequence system)
powerinfo switch powerinfo switch
splashing block splashing block
ajustable next count ajustable next count
@@ -24,7 +23,13 @@ Future outlook:
infinite 1v1 infinite 1v1
square mode square mode
more FXs & 3d features & animations more FXs & 3d features & animations
0.7.29: 0.7.31+:
in-game setting
little changes
0.7.31:
stereo system
fixed a problem in finesse calculating
0.7.30:
auto-tracking virtual key,adjustable parameters! auto-tracking virtual key,adjustable parameters!
can switch on/off virtuakeys can switch on/off virtuakeys
add 7 more key add 7 more key