Compare commits

...

6 Commits

Author SHA1 Message Date
MrZ_26
b354604c77 Alpha V0.7.21 2020-02-04 19:35:09 +08:00
MrZ_26
5eea97dd8b Alpha V0.7.20 2020-02-04 19:34:54 +08:00
MrZ_26
f0a118e714 Alpha V0.7.19 2020-02-04 19:34:43 +08:00
MrZ_26
3019f83999 Alpha V0.7.18 2020-02-04 19:34:16 +08:00
MrZ_26
438046f77f Alpha V0.7.17 2020-02-04 19:34:07 +08:00
MrZ_26
830f0ffbed Alpha V0.7.16 2020-02-04 19:33:52 +08:00
81 changed files with 1936 additions and 1184 deletions

BIN
BGM/8-bit happiness.ogg Normal file

Binary file not shown.

BIN
SFX/ren_mega.ogg Normal file

Binary file not shown.

BIN
VOICE/I_1.ogg Normal file

Binary file not shown.

BIN
VOICE/I_2.ogg Normal file

Binary file not shown.

BIN
VOICE/J_1.ogg Normal file

Binary file not shown.

BIN
VOICE/J_2.ogg Normal file

Binary file not shown.

BIN
VOICE/L_1.ogg Normal file

Binary file not shown.

BIN
VOICE/L_2.ogg Normal file

Binary file not shown.

BIN
VOICE/O_1.ogg Normal file

Binary file not shown.

BIN
VOICE/O_2.ogg Normal file

Binary file not shown.

BIN
VOICE/PC_1.ogg Normal file

Binary file not shown.

BIN
VOICE/S_1.ogg Normal file

Binary file not shown.

BIN
VOICE/S_2.ogg Normal file

Binary file not shown.

BIN
VOICE/T_1.ogg Normal file

Binary file not shown.

BIN
VOICE/T_2.ogg Normal file

Binary file not shown.

BIN
VOICE/Z_1.ogg Normal file

Binary file not shown.

BIN
VOICE/Z_2.ogg Normal file

Binary file not shown.

BIN
VOICE/b2b_1.ogg Normal file

Binary file not shown.

BIN
VOICE/b2b_2.ogg Normal file

Binary file not shown.

BIN
VOICE/b2b_3.ogg Normal file

Binary file not shown.

BIN
VOICE/b3b_1.ogg Normal file

Binary file not shown.

BIN
VOICE/double_1.ogg Normal file

Binary file not shown.

BIN
VOICE/double_2.ogg Normal file

Binary file not shown.

BIN
VOICE/double_3.ogg Normal file

Binary file not shown.

BIN
VOICE/lose_1.ogg Normal file

Binary file not shown.

BIN
VOICE/lose_2.ogg Normal file

Binary file not shown.

BIN
VOICE/lose_3.ogg Normal file

Binary file not shown.

BIN
VOICE/mini_1.ogg Normal file

Binary file not shown.

BIN
VOICE/nya_1.ogg Normal file

Binary file not shown.

BIN
VOICE/nya_11.ogg Normal file

Binary file not shown.

BIN
VOICE/nya_12.ogg Normal file

Binary file not shown.

BIN
VOICE/nya_13.ogg Normal file

Binary file not shown.

BIN
VOICE/nya_2.ogg Normal file

Binary file not shown.

BIN
VOICE/nya_21.ogg Normal file

Binary file not shown.

BIN
VOICE/nya_22.ogg Normal file

Binary file not shown.

BIN
VOICE/nya_3.ogg Normal file

Binary file not shown.

BIN
VOICE/nya_31.ogg Normal file

Binary file not shown.

BIN
VOICE/nya_4.ogg Normal file

Binary file not shown.

BIN
VOICE/nya_o0.ogg Normal file

Binary file not shown.

BIN
VOICE/nya_o1.ogg Normal file

Binary file not shown.

BIN
VOICE/nya_o2.ogg Normal file

Binary file not shown.

BIN
VOICE/nya_o3.ogg Normal file

Binary file not shown.

BIN
VOICE/nya_o4.ogg Normal file

Binary file not shown.

BIN
VOICE/nya_o5.ogg Normal file

Binary file not shown.

BIN
VOICE/single_1.ogg Normal file

Binary file not shown.

BIN
VOICE/single_2.ogg Normal file

Binary file not shown.

BIN
VOICE/single_3.ogg Normal file

Binary file not shown.

BIN
VOICE/spin-_1.ogg Normal file

Binary file not shown.

BIN
VOICE/spin-_2.ogg Normal file

Binary file not shown.

BIN
VOICE/spin_1.ogg Normal file

Binary file not shown.

BIN
VOICE/spin_2.ogg Normal file

Binary file not shown.

BIN
VOICE/spin_3.ogg Normal file

Binary file not shown.

BIN
VOICE/spin_4.ogg Normal file

Binary file not shown.

BIN
VOICE/spin_5.ogg Normal file

Binary file not shown.

BIN
VOICE/triple_1.ogg Normal file

Binary file not shown.

BIN
VOICE/triple_2.ogg Normal file

Binary file not shown.

BIN
VOICE/tts_1.ogg Normal file

Binary file not shown.

BIN
VOICE/win_1.ogg Normal file

Binary file not shown.

BIN
VOICE/win_2.ogg Normal file

Binary file not shown.

Binary file not shown.

View File

@@ -12,55 +12,54 @@ local touching=nil--1st touching ID
local sceneInit={ local sceneInit={
load=function() load=function()
curBG="none"
loading=1--Loading mode loading=1--Loading mode
loadnum=1--Loading counter loadnum=1--Loading counter
loadprogress=0--Loading bar(0~1) loadprogress=0--Loading bar(0~1)
loadTip=text.tips[rnd(#text.tips)] loadTip=text.tips[rnd(#text.tips)]
end, end,
intro=function() intro=function()
curBG="none"
count=0 count=0
BGM("blank") BGM("blank")
end, end,
main=function() main=function()
curBG="none" BGM("blank")
collectgarbage() collectgarbage()
end, end,
music=function()
sel=1
BGM()
end,
mode=function() mode=function()
curBG="none"
saveData() saveData()
modeSel=modeSel or 1 modeSel=modeSel or 1
levelSel=levelSel or 3 levelSel=levelSel or 3
curBG="none"
BGM("blank") BGM("blank")
end, end,
custom=function() custom=function()
optSel=optSel or 1 optSel=optSel or 1
curBG="matrix" curBG=customRange.bg[customSel[12]]
BGM("blank") BGM(customRange.bgm[customSel[13]])
end, end,
draw=function() draw=function()
curBG="none"
kb.setKeyRepeat(true) kb.setKeyRepeat(true)
clearSureTime=0 clearSureTime=0
pen=1 pen,sx,sy=1,1,1
sx,sy=1,1
curBG="none"
end, end,
play=function() play=function()
restartCount=0
if needResetGameData then if needResetGameData then
resetGameData() resetGameData()
needResetGameData=nil needResetGameData=nil
end end
sysSFX("ready")
end, end,
pause=function() pause=function()
pauseTime=0
end, end,
setting=function() setting=function()
curBG="none" curBG="none"
end, end,
setting2=function() setting2=function()
curBG="none"
curBoard=1 curBoard=1
keyboardSet=1 keyboardSet=1
joystickSet=1 joystickSet=1
@@ -74,10 +73,8 @@ local sceneInit={
snapLevel=1 snapLevel=1
end,--Touch setting end,--Touch setting
help=function() help=function()
curBG="none"
end, end,
stat=function() stat=function()
curBG="none"
end, end,
quit=function() quit=function()
love.event.quit() love.event.quit()
@@ -98,7 +95,6 @@ local function getNewBlock()
BGblock.next=BGblock.next%7+1 BGblock.next=BGblock.next%7+1
return t return t
end end
local scs={{1,2},nil,nil,nil,nil,{1.5,1.5},{0.5,2.5}}for i=2,5 do scs[i]=scs[1]end
function onVirtualkey(x,y) function onVirtualkey(x,y)
local d2,nearest,distance local d2,nearest,distance
@@ -119,13 +115,13 @@ function buttonControl_key(i)
Buttons.sel=Buttons[scene][Buttons.sel[i]]or Buttons.sel Buttons.sel=Buttons[scene][Buttons.sel[i]]or Buttons.sel
else else
Buttons.sel=select(2,next(Buttons[scene])) Buttons.sel=select(2,next(Buttons[scene]))
mouseShow=false
end end
elseif i=="space"or i=="return"then elseif i=="space"or i=="return"then
if not sceneSwaping and Buttons.sel then if not sceneSwaping and Buttons.sel then
Buttons.sel.alpha=1 Buttons.sel.alpha=1
Buttons.sel.code() Buttons.sel.code()
sysSFX("button") SFX("button")
VOICE("nya")
end end
end end
end end
@@ -135,19 +131,21 @@ function buttonControl_gamepad(i)
Buttons.sel=Buttons[scene][Buttons.sel[i=="dpup"and"up"or i=="dpdown"and"down"or i=="dpleft"and"left"or"right"]]or Buttons.sel Buttons.sel=Buttons[scene][Buttons.sel[i=="dpup"and"up"or i=="dpdown"and"down"or i=="dpleft"and"left"or"right"]]or Buttons.sel
else else
Buttons.sel=select(2,next(Buttons[scene])) Buttons.sel=select(2,next(Buttons[scene]))
mouseShow=false
end end
elseif i=="start"then elseif i=="start"then
if not sceneSwaping and Buttons.sel then if not sceneSwaping and Buttons.sel then
Buttons.sel.alpha=1 Buttons.sel.alpha=1
Buttons.sel.code() Buttons.sel.code()
sysSFX("button") SFX("button")
VOICE("nya")
end end
end end
mouseShow=false
end end
mouseDown={} local mouseDown,mouseMove,mouseUp,wheelmoved={},{},{},{}
local touchDown,touchUp,touchMove={},{},{}
local keyDown,keyUp={},{}
local gamepadDown,gamepadUp={},{}
function mouseDown.intro(x,y,k) function mouseDown.intro(x,y,k)
if k==2 then if k==2 then
back() back()
@@ -155,127 +153,9 @@ function mouseDown.intro(x,y,k)
gotoScene("main") gotoScene("main")
end end
end end
function mouseDown.draw(x,y,k)
mouseMove.draw(x,y)
end
function mouseDown.setting3(x,y,k)
if k==2 then back()end
sel=nil
for K=1,#virtualkey do
local b=virtualkey[K]
if (x-b[1])^2+(y-b[2])^2<b[3]then
sel=K
end
end
end
mouseMove={}
function mouseMove.draw(x,y,dx,dy)
sx,sy=int((x-200)/30)+1,20-int((y-60)/30)
if sx<1 or sx>10 then sx=nil end
if sy<1 or sy>20 then sy=nil end
if sx and sy and ms.isDown(1,2)then
preField[sy][sx]=ms.isDown(1)and pen or 0
end
end
function mouseMove.setting3(x,y,dx,dy)
if sel and ms.isDown(1)then
local b=virtualkey[sel]
b[1],b[2]=b[1]+dx,b[2]+dy
end
end
mouseUp={}
function mouseUp.setting3(x,y,k)
if sel then
local b=virtualkey[sel]
local k=snapLevelValue[snapLevel]
b[1],b[2]=int(b[1]/k+.5)*k,int(b[2]/k+.5)*k
end
end
wheelmoved={}
function wheelmoved.draw(x,y)
if y<0 then
pen=pen+1
if pen==8 then pen=9 elseif pen==14 then pen=0 end
else
pen=pen-1
if pen==8 then pen=7 elseif pen==-1 then pen=13 end
end
end
function wheelmoved.mode(x,y)
modeSel=min(max(modeSel+(y>0 and -1 or 1),1),#modeID)
levelSel=ceil(#modeLevel[modeID[modeSel]]*.5)
end
touchDown={}
function touchDown.intro(id,x,y) function touchDown.intro(id,x,y)
gotoScene("main") gotoScene("main")
end end
function touchDown.draw(id,x,y)
end
function touchDown.setting3(id,x,y)
for K=1,#virtualkey do
local b=virtualkey[K]
if (x-b[1])^2+(y-b[2])^2<b[3]then
sel=K
end
end
end
function touchDown.play(id,x,y)
if setting.virtualkeySwitch then
local t=onVirtualkey(x,y)
if t then
pressKey(t,players[1])
end
end
end
touchUp={}
function touchUp.setting3(id,x,y)
if sel then
x,y=xOy:inverseTransformPoint(x,y)
if sel then
local b=virtualkey[sel]
local k=snapLevelValue[snapLevel]
b[1],b[2]=int(b[1]/k+.5)*k,int(b[2]/k+.5)*k
end
end
end
function touchUp.play(id,x,y)
if setting.virtualkeySwitch then
local t=onVirtualkey(x,y)
if t then
releaseKey(t,players[1])
end
end
end
touchMove={}
function touchMove.setting3(id,x,y,dx,dy)
if sel then
local b=virtualkey[sel]
b[1],b[2]=b[1]+dx,b[2]+dy
end
end
function touchMove.draw(id,x,y,dx,dy)
sx,sy=int((x-200)/30)+1,20-int((y-60)/30)
if sx<1 or sx>10 then sx=nil end
if sy<1 or sy>20 then sy=nil end
if sx and sy then
preField[sy][sx]=pen
end
end
function touchMove.play(id,x,y,dx,dy)
if setting.virtualkeySwitch then
local l=tc.getTouches()
for n=1,#virtualkey do
local b=virtualkey[n]
for i=1,#l do
local x,y=xOy:inverseTransformPoint(tc.getPosition(l[i]))
if(x-b[1])^2+(y-b[2])^2<=b[3]then goto L end
end
releaseKey(n,players[1])
::L::
end
end
end
keyDown={}
function keyDown.intro(key) function keyDown.intro(key)
if key=="escape"then if key=="escape"then
back() back()
@@ -283,6 +163,18 @@ function keyDown.intro(key)
gotoScene("main") gotoScene("main")
end end
end end
function gamepadDown.intro(key)
if key=="back"then
back()
else
gotoScene("main")
end
end
function wheelmoved.mode(x,y)
modeSel=min(max(modeSel+(y>0 and -1 or 1),1),#modeID)
levelSel=ceil(#modeLevel[modeID[modeSel]]*.5)
end
function keyDown.mode(key) function keyDown.mode(key)
if key=="down"then if key=="down"then
if modeSel<#modeID then if modeSel<#modeID then
@@ -310,13 +202,45 @@ function keyDown.mode(key)
back() back()
end end
end end
function gamepadDown.mode(key)
if key=="dpdown"then
if modeSel<#modeID then modeSel=modeSel+1 end
elseif key=="dpup"then
if modeSel>1 then modeSel=modeSel-1 end
elseif key=="start"then
loadGame(modeSel,levelSel)
elseif key=="back"then
back()
end
end
function keyDown.music(key)
if key=="down"then
sel=sel%#musicID+1
elseif key=="up"then
sel=(sel-2)%#musicID+1
elseif key=="return"or key=="space"then
BGM(musicID[sel])
elseif key=="escape"then
back()
end
end
function keyDown.custom(key) function keyDown.custom(key)
if key=="left"then if key=="left"then
local k=customID[optSel] customSel[optSel]=(customSel[optSel]-2)%#customRange[customID[optSel]]+1
customSel[k]=(customSel[k]-2)%#customRange[k]+1 if optSel==12 then
curBG=customRange.bg[customSel[12]]
elseif optSel==13 then
BGM(customRange.bgm[customSel[13]])
end
elseif key=="right"then elseif key=="right"then
local k=customID[optSel] customSel[optSel]=customSel[optSel]%#customRange[customID[optSel]]+1
customSel[k]=customSel[k]%#customRange[k]+1 if optSel==12 then
curBG=customRange.bg[customSel[optSel]]
elseif optSel==13 then
BGM(customRange.bgm[customSel[optSel]])
end
elseif key=="down"then elseif key=="down"then
optSel=optSel%#customID+1 optSel=optSel%#customID+1
elseif key=="up"then elseif key=="up"then
@@ -331,6 +255,37 @@ function keyDown.custom(key)
back() back()
end end
end end
function mouseDown.draw(x,y,k)
mouseMove.draw(x,y)
end
function mouseMove.draw(x,y,dx,dy)
sx,sy=int((x-200)/30)+1,20-int((y-60)/30)
if sx<1 or sx>10 then sx=nil end
if sy<1 or sy>20 then sy=nil end
if sx and sy and ms.isDown(1,2,3)then
preField[sy][sx]=ms.isDown(1)and pen or ms.isDown(2)and 0 or -1
end
end
function wheelmoved.draw(x,y)
if y<0 then
pen=pen+1
if pen==8 then pen=9 elseif pen==14 then pen=0 end
else
pen=pen-1
if pen==8 then pen=7 elseif pen==-1 then pen=13 end
end
end
function touchDown.draw(id,x,y)
end
function touchMove.draw(id,x,y,dx,dy)
sx,sy=int((x-200)/30)+1,20-int((y-60)/30)
if sx<1 or sx>10 then sx=nil end
if sy<1 or sy>20 then sy=nil end
if sx and sy then
preField[sy][sx]=pen
end
end
function keyDown.draw(key) function keyDown.draw(key)
if key=="delete"then if key=="delete"then
Buttons.draw.clear.code() Buttons.draw.clear.code()
@@ -349,6 +304,8 @@ function keyDown.draw(key)
if sx and sy then if sx and sy then
preField[sy][sx]=pen preField[sy][sx]=pen
end end
elseif key=="tab"then
pen=-1
elseif key=="backspace"then elseif key=="backspace"then
pen=0 pen=0
elseif key=="escape"then elseif key=="escape"then
@@ -357,6 +314,7 @@ function keyDown.draw(key)
pen=find("123qwea#sdzxc",key)or pen pen=find("123qwea#sdzxc",key)or pen
end end
end end
function keyDown.setting2(key) function keyDown.setting2(key)
if key=="escape"then if key=="escape"then
if keyboardSetting then if keyboardSetting then
@@ -386,62 +344,6 @@ function keyDown.setting2(key)
curBoard=min(curBoard+1,8) curBoard=min(curBoard+1,8)
end end
end end
function keyDown.play(key)
if key=="escape"then pauseGame()end
local m=setting.keyMap
for p=1,human do
local lib=setting.keyLib[p]
for s=1,#lib do
for k=1,12 do
if key==m[lib[s]][k]then
pressKey(k,players[p])
return
end
end
end
end
end
function keyDown.pause(key)
if key=="escape"then
back()
elseif key=="return"or key=="space"then
resumeGame()
end
end
keyUp={}
function keyUp.play(key)
local m=setting.keyMap
for p=1,human do
local lib=setting.keyLib[p]
for s=1,#lib do
for k=1,12 do
if key==m[lib[s]][k]then
releaseKey(k,players[p])
return
end
end
end
end
end
gamepadDown={}
function gamepadDown.intro(key)
if key=="back"then
back()
else
gotoScene("main")
end
end
function gamepadDown.mode(key)
if key=="dpdown"then
if modeSel<#modeID then modeSel=modeSel+1 end
elseif key=="dpup"then
if modeSel>1 then modeSel=modeSel-1 end
elseif key=="start"then
loadGame(modeSel,levelSel)
elseif key=="back"then
back()
end
end
function gamepadDown.setting2(key) function gamepadDown.setting2(key)
if key=="back"then if key=="back"then
if joystickSetting then if joystickSetting then
@@ -471,38 +373,144 @@ function gamepadDown.setting2(key)
curBoard=min(curBoard+1,8) curBoard=min(curBoard+1,8)
end end
end end
function mouseDown.setting3(x,y,k)
if k==2 then back()end
for K=1,#virtualkey do
local b=virtualkey[K]
if (x-b[1])^2+(y-b[2])^2<b[3]then
sel=K
end
end
end
function mouseMove.setting3(x,y,dx,dy)
if sel and ms.isDown(1)then
local b=virtualkey[sel]
b[1],b[2]=b[1]+dx,b[2]+dy
end
end
function mouseUp.setting3(x,y,k)
if sel then
local b=virtualkey[sel]
local k=snapLevelValue[snapLevel]
b[1],b[2]=int(b[1]/k+.5)*k,int(b[2]/k+.5)*k
end
end
function touchDown.setting3(id,x,y)
for K=1,#virtualkey do
local b=virtualkey[K]
if (x-b[1])^2+(y-b[2])^2<b[3]then
sel=K
end
end
end
function touchUp.setting3(id,x,y)
if sel then
x,y=xOy:inverseTransformPoint(x,y)
if sel then
local b=virtualkey[sel]
local k=snapLevelValue[snapLevel]
b[1],b[2]=int(b[1]/k+.5)*k,int(b[2]/k+.5)*k
end
end
end
function touchMove.setting3(id,x,y,dx,dy)
if sel then
local b=virtualkey[sel]
b[1],b[2]=b[1]+dx,b[2]+dy
end
end
function keyDown.pause(key)
if key=="escape"then
back()
elseif key=="return"or key=="space"then
resumeGame()
end
end
function touchDown.play(id,x,y)
if setting.virtualkeySwitch then
local t=onVirtualkey(x,y)
if t then
pressKey(t,players[1])
end
end
end
function touchUp.play(id,x,y)
if setting.virtualkeySwitch then
local t=onVirtualkey(x,y)
if t then
releaseKey(t,players[1])
end
end
end
function touchMove.play(id,x,y,dx,dy)
if setting.virtualkeySwitch then
local l=tc.getTouches()
for n=1,#virtualkey do
local b=virtualkey[n]
for i=1,#l do
local x,y=xOy:inverseTransformPoint(tc.getPosition(l[i]))
if(x-b[1])^2+(y-b[2])^2<=b[3]then goto L end
end
releaseKey(n,players[1])
::L::
end
end
end
function keyDown.play(key)
if key=="escape"and not sceneSwaping then
return(frame<180 and back or pauseGame)()
end
local m=setting.keyMap
for p=1,human do
for k=1,12 do
if key==m[2*p-1][k]or key==m[2*p][k]then
pressKey(k,players[p])
return
end
end
end
end
function keyUp.play(key)
local m=setting.keyMap
for p=1,human do
for k=1,12 do
if key==m[2*p-1][k]or key==m[2*p][k]then
releaseKey(k,players[p])
return
end
end
end
end
function gamepadDown.play(key) function gamepadDown.play(key)
if key=="back"then back()return end if key=="back"then back()return end
local m=setting.keyMap local m=setting.keyMap
for p=1,4 do for p=1,human do
local lib=setting.keyLib[p] for k=1,12 do
for s=1,#lib do if key==m[2*p+7][k]or key==m[2*p+8][k]then
for k=1,12 do pressKey(k,players[p])
if key==m[8+lib[s]][k]then return
pressKey(k,players[p])
return
end
end end
end end
end end
end end
gamepadUp={}
function gamepadUp.play(key) function gamepadUp.play(key)
local m=setting.keyMap local m=setting.keyMap
for p=1,4 do for p=1,human do
local lib=setting.keyLib[p] for k=1,12 do
for s=1,#lib do if key==m[2*p+7][k]or key==m[2*p+8][k]then
for k=1,12 do releaseKey(k,players[p])
if key==m[8+lib[s]][k]then return
releaseKey(k,players[p])
return
end
end end
end end
end end
end end
function love.mousepressed(x,y,k,t,num) function love.mousepressed(x,y,k,t,num)
if t then return end if t then return end
mouseShow=true mouseShow=true
@@ -519,7 +527,9 @@ function love.mousepressed(x,y,k,t,num)
B.alpha=1 B.alpha=1
Buttons.sel=nil Buttons.sel=nil
love.mousemoved(x,y,0,0) love.mousemoved(x,y,0,0)
sysSFX("button") SFX("button")
VOICE("nya")
VIB(1)
end end
end end
end end
@@ -552,10 +562,10 @@ function love.wheelmoved(x,y)
end end
function love.touchpressed(id,x,y) function love.touchpressed(id,x,y)
mouseShow=false
if not touching then if not touching then
touching=id touching=id
love.mousemoved(x,y,0,0) love.touchmoved(id,x,y,0,0)
mouseShow=false
end end
if touchDown[scene]then if touchDown[scene]then
touchDown[scene](id,xOy:inverseTransformPoint(x,y)) touchDown[scene](id,xOy:inverseTransformPoint(x,y))
@@ -569,23 +579,22 @@ function love.touchreleased(id,x,y)
B.code() B.code()
B.alpha=1 B.alpha=1
Buttons.sel=nil Buttons.sel=nil
sysSFX("button") SFX("button")
VOICE("nya")
VIB(1)
end end
Buttons.sel=nil Buttons.sel=nil
mouseShow=false
end end
if touchUp[scene]then if touchUp[scene]then
touchUp[scene](id,xOy:inverseTransformPoint(x,y)) touchUp[scene](id,xOy:inverseTransformPoint(x,y))
end end
end end
function love.touchmoved(id,x,y,dx,dy) function love.touchmoved(id,x,y,dx,dy)
if not Buttons.sel then
touching=nil
end
x,y=xOy:inverseTransformPoint(x,y) x,y=xOy:inverseTransformPoint(x,y)
if touchMove[scene]then if touchMove[scene]then
touchMove[scene](id,x,y,dx/scr.k,dy/scr.k) touchMove[scene](id,x,y,dx/scr.k,dy/scr.k)
end end
Buttons.sel=nil
for _,B in next,Buttons[scene]do for _,B in next,Buttons[scene]do
if not(B.hide and B.hide())then if not(B.hide and B.hide())then
if abs(x-B.x)<B.w*.5 and abs(y-B.y)<B.h*.5 then if abs(x-B.x)<B.w*.5 and abs(y-B.y)<B.h*.5 then
@@ -594,21 +603,22 @@ function love.touchmoved(id,x,y,dx,dy)
end end
end end
end end
if not Buttons.sel then
touching=nil
end
end end
function love.keypressed(i) function love.keypressed(i)
mouseShow=false
if i=="f8"then devMode=not devMode end if i=="f8"then devMode=not devMode end
if devMode then if devMode then
if i=="k"then if i=="k"then
P=players.alive[rnd(#players.alive)] P=players.alive[rnd(#players.alive)]
Event_gameover.lose() P.lastRecv=players[1]
Event.lose()
--Test code here --Test code here
elseif i=="q"then elseif i=="q"then
for k,B in next,Buttons[scene]do local B=Buttons.sel if B then print(format("x=%d,y=%d,w=%d,h=%d",B.x,B.y,B.w,B.h))end
print(format("x=%d,y=%d,w=%d,h=%d",B.x,B.y,B.w,B.h))
end
elseif i=="s"then
print(scr.x,scr.y,scr.w,scr.h,scr.k)
elseif Buttons.sel then elseif Buttons.sel then
local B=Buttons.sel local B=Buttons.sel
if i=="left"then B.x=B.x-10 if i=="left"then B.x=B.x-10
@@ -627,7 +637,6 @@ function love.keypressed(i)
else buttonControl_key(i) else buttonControl_key(i)
end end
end end
mouseShow=false
end end
function love.keyreleased(i) function love.keyreleased(i)
if keyUp[scene]then keyUp[scene](i) if keyUp[scene]then keyUp[scene](i)
@@ -635,11 +644,11 @@ function love.keyreleased(i)
end end
function love.gamepadpressed(joystick,i) function love.gamepadpressed(joystick,i)
mouseShow=false
if gamepadDown[scene]then return gamepadDown[scene](i) if gamepadDown[scene]then return gamepadDown[scene](i)
elseif i=="back"then back() elseif i=="back"then back()
else buttonControl_gamepad(i) else buttonControl_gamepad(i)
end end
mouseShow=false
end end
function love.gamepadreleased(joystick,i) function love.gamepadreleased(joystick,i)
if gamepadUp[scene]then gamepadUp[scene](i) if gamepadUp[scene]then gamepadUp[scene](i)
@@ -656,32 +665,26 @@ function love.lowmemory()
collectgarbage() collectgarbage()
end end
function love.resize(w,h) function love.resize(w,h)
if w>=h then scr.w,scr.h=w,h scr.w,scr.h,scr.r=w,h,h/w
else scr.w,scr.h=h,w if scr.r>=.5625 then
end
scr.r=h/w
if h/w>=.5625 then
scr.k=w/1280 scr.k=w/1280
scr.x,scr.y=0,(h-w*9/16)*.5 scr.x,scr.y=0,(h-w*9/16)*.5
else else
scr.k=h/720 scr.k=h/720
scr.x,scr.y=(w-h*16/9)*.5,0 scr.x,scr.y=(w-h*16/9)*.5,0
end end
gc.origin()
xOy=xOy:setTransformation(w*.5,h*.5,nil,scr.k,nil,640,360) xOy=xOy:setTransformation(w*.5,h*.5,nil,scr.k,nil,640,360)
gc.replaceTransform(xOy) gc.replaceTransform(xOy)
collectgarbage() collectgarbage()
end end
function love.focus(f) function love.focus(f)
if not f and scene=="play"then pauseGame()end if system~="Android" and not f and scene=="play"then pauseGame()end
end end
function love.update(dt) function love.update(dt)
--[[ -- if players then for k,v in pairs(players[1])do
if players then -- if rawget(_G,k)and k~="next"and k~="hold"and k~="stat"then print(k,_G[v])end
for k,v in pairs(players[1])do -- end end--check player data flew(debugging)
if rawget(_G,k)then print(k)end
end
end--check player data flew(debugging)
]]
for i=#BGblock,1,-1 do for i=#BGblock,1,-1 do
BGblock[i].y=BGblock[i].y+BGblock[i].v BGblock[i].y=BGblock[i].y+BGblock[i].v
if BGblock[i].y>720 then rem(BGblock,i)end if BGblock[i].y>720 then rem(BGblock,i)end
@@ -699,9 +702,9 @@ function love.update(dt)
for k,B in next,Buttons[scene]do for k,B in next,Buttons[scene]do
B.alpha=0 B.alpha=0
end--Reset buttons' alpha end--Reset buttons' alpha
Buttons.sel=nil
scene=sceneSwaping.tar scene=sceneSwaping.tar
sceneInit[scene]() sceneInit[scene]()
Buttons.sel=nil
elseif sceneSwaping.time==0 then elseif sceneSwaping.time==0 then
sceneSwaping=nil sceneSwaping=nil
end end
@@ -712,8 +715,19 @@ function love.update(dt)
for i=#Task,1,-1 do for i=#Task,1,-1 do
Task[i]:update() Task[i]:update()
end end
updateButton() if voicePlaying[1]then
if not voicePlaying[1]:isPlaying()then
rem(voicePlaying,1)
end
if voicePlaying[1] and not voicePlaying[1]:isPlaying()then voicePlaying[1]:play()end
end
for k,B in next,Buttons[scene]do
local t=B==Buttons.sel and .4 or 0
B.alpha=abs(B.alpha-t)>.02 and(B.alpha+(B.alpha<t and .02 or -.02))or t
if B.alpha>t then B.alpha=B.alpha-.02 elseif B.alpha<t then B.alpha=B.alpha+.02 end
end--update Buttons
end end
local scs={1,2,1,2,1,2,1,2,1,2,1.5,1.5,.5,2.5}
function love.draw() function love.draw()
gc.discard()--SPEED UPUPUP! gc.discard()--SPEED UPUPUP!
Pnt.BG[setting.bg and curBG or"grey"]() Pnt.BG[setting.bg and curBG or"grey"]()
@@ -728,59 +742,83 @@ function love.draw()
end end end end
end end
if Pnt[scene]then Pnt[scene]()end if Pnt[scene]then Pnt[scene]()end
drawButton() for k,B in next,Buttons[scene]do
if not(B.hide and B.hide())then
local C=B.rgb or color.white
gc.setColor(C[1],C[2],C[3],B.alpha)
gc.rectangle("fill",B.x-B.w*.5,B.y-B.h*.5,B.w,B.h)
gc.setColor(C)
gc.setLineWidth(3)gc.rectangle("line",B.x-B.w*.5,B.y-B.h*.5,B.w,B.h,4)
gc.setColor(C[1],C[2],C[3],.3)
gc.setLineWidth(5)gc.rectangle("line",B.x-B.w*.5,B.y-B.h*.5,B.w,B.h,4)
local t=B.t
local y0
if t then
if type(t)=="function"then t=t()end
setFont(B.f or 40)
y0=B.y-currentFont*.64
gc.printf(t,B.x-201,y0+2,400,"center")
gc.printf(t,B.x-199,y0+2,400,"center")
gc.printf(t,B.x-201,y0,400,"center")
gc.printf(t,B.x-199,y0,400,"center")
gc.setColor(C)
mStr(t,B.x,y0+1)
end
end
end--Draw buttons
if mouseShow and not touching then if mouseShow and not touching then
local r=Timer()*.5 local r=Timer()*.5
gc.setColor(1,1,1,min(1-abs(1-r%1*2),.3)) gc.setColor(1,1,1,min(1-abs(1-r%1*2),.3))
r=int(r)%7+1 r=int(r)%7+1
gc.draw(mouseBlock[r],mx,my,Timer()%pi*4,20,20,scs[r][2]-.5,#blocks[r][0]-scs[r][1]+.5) gc.draw(mouseBlock[r],mx,my,Timer()%3.1416*4,20,20,scs[2*r]-.5,#blocks[r][0]-scs[2*r-1]+.5)
gc.setColor(1,1,1,.5) gc.setColor(1,1,1,.5)gc.circle("fill",mx,my,5)
gc.circle("fill",mx,my,5) gc.setColor(1,1,1)gc.circle("fill",mx,my,3)
gc.setColor(1,1,1) end--Awesome mouse!
gc.circle("fill",mx,my,3) if sceneSwaping then sceneSwaping.draw()end--Swaping animation
end if scr.r~=.5625 then
if sceneSwaping then sceneSwaping.draw()end gc.setColor(0,0,0)
if scr.r==.5625 then goto L end
if scr.r>.5625 then if scr.r>.5625 then
gc.setColor(0,0,0) local d=(scr.h-scr.w*9/16)*.5/scr.k
gc.rectangle("fill",0,0,1280,scr.w*9/16-scr.h) gc.rectangle("fill",0,0,1280,-d)
gc.rectangle("fill",0,720,1280,scr.h-scr.w*9/16) gc.rectangle("fill",0,720,1280,d)
else else--high
gc.setColor(0,0,0) local d=(scr.w-scr.h*16/9)*.5/scr.k
gc.rectangle("fill",0,0,scr.h*16/9-scr.w,720) gc.rectangle("fill",0,0,-d,720)
gc.rectangle("fill",1280,0,scr.w-scr.h*16/9,720) gc.rectangle("fill",1280,0,d,720)
end end--wide
::L:: end--Black side
setFont(20)gc.setColor(1,1,1) setFont(20)gc.setColor(1,1,1)
gc.print(tm.getFPS(),5,700) gc.print(tm.getFPS(),5,700)
if devMode then if devMode then
gc.print(gcinfo(),5,680) gc.print(mx.." "..my,5,640)
gc.print(#freeRow or 0,5,660) gc.print(#freeRow or 0,5,660)
gc.print(gcinfo(),5,680)
end end
end end
function love.run() function love.run()
local frameT=Timer() local frameT=Timer()
local readyDrawFrame=0 local readyDrawFrame=0
local PUMP,POLL=love.event.pump,love.event.poll
love.resize(gc.getWidth(),gc.getHeight()) love.resize(gc.getWidth(),gc.getHeight())
scene="load"sceneInit.load()--System Launch scene="load"sceneInit.load()--System Launch
return function() return function()
love.event.pump() PUMP()
for name,a,b,c,d,e,f in love.event.poll()do for N,a,b,c,d,e in POLL()do
if name=="quit"then return 0 end if N=="quit"then return 0
if love[name]then love[name](a,b,c,d,e,f)end elseif love[N]then love[N](a,b,c,d,e)end
end end
tm.step() tm.step()
-- love.receiveData(id,data)
love.update(tm.getDelta()) love.update(tm.getDelta())
readyDrawFrame=readyDrawFrame+setting.frameMul if not wd.isMinimized()then
if readyDrawFrame>=100 then readyDrawFrame=readyDrawFrame+setting.frameMul
readyDrawFrame=readyDrawFrame-100 if readyDrawFrame>=100 then
gc.clear() readyDrawFrame=readyDrawFrame-100
love.draw() love.draw()
gc.present() gc.present()
end
end end
::L::if Timer()-frameT<1/60 then goto L end ::L::if Timer()-frameT<1/60 then goto L end
frameT=Timer() frameT=Timer()
tm.sleep(.001)
end end
end end

View File

@@ -29,16 +29,9 @@ function clearTask(opt)
end end
end end
function Task:update() function Task:update()
if self.code(self.P,self.data)then if(not self.P or self.P and scene=="play")and self:code(self.P,self.data)then
self:destroy() for i=#Task,1,-1 do
return nil if Task[i]==self then rem(Task,i)return end
end end--Destroy
end
function Task:destroy()
for i=#Task,1,-1 do
if Task[i]==self then
rem(Task,i)
return nil
end
end end
end end

View File

@@ -9,7 +9,7 @@ function love.conf(t)
t.audio.mixwithsystem=true--Switch on to keep sysBGM t.audio.mixwithsystem=true--Switch on to keep sysBGM
local W=t.window local W=t.window
W.title="Techmino V0.7.15" W.title="Techmino V0.7.21"
W.icon="/image/icon.png" W.icon="/image/icon.png"
W.width,W.height=1280,720 W.width,W.height=1280,720
W.minwidth,W.minheight=640,360 W.minwidth,W.minheight=640,360

File diff suppressed because it is too large Load Diff

BIN
font.ttf

Binary file not shown.

View File

@@ -1,3 +1,4 @@
local gc=love.graphics
local blockPos={4,4,4,4,4,5,4} local blockPos={4,4,4,4,4,5,4}
local renATK={[0]=0,0,0,1,1,2,2,3,3,4,4}--3 else local renATK={[0]=0,0,0,1,1,2,2,3,3,4,4}--3 else
local b2bPoint={50,100,180} local b2bPoint={50,100,180}
@@ -6,7 +7,9 @@ local testScore={[-1]=1,[-2]=0,[-3]=1,2,2,2}
local visible_opt={show=1e99,time=300,fast=20,none=5} local visible_opt={show=1e99,time=300,fast=20,none=5}
local reAtk={0,0,1,1,1,2,2,3,3} local reAtk={0,0,1,1,1,2,2,3,3}
local reDef={0,1,1,2,3,3,4,4,5} local reDef={0,1,1,2,3,3,4,4,5}
local spin_n={"spin_1","spin_2","spin_3"} local blockName={"Z","S","L","J","T","O","I"}
local clearName={"single","double","triple"}
local spin_n={[0]="spin_0","spin_1","spin_2","spin_3"}
local clear_n={"clear_1","clear_2","clear_3","clear_4"} local clear_n={"clear_1","clear_2","clear_3","clear_4"}
local ren_n={}for i=1,11 do ren_n[i]="ren_"..i end local ren_n={}for i=1,11 do ren_n[i]="ren_"..i end
@@ -105,9 +108,9 @@ local freshMethod={
newNext(i) newNext(i)
end,--random end,--random
pc=function() pc=function()
if P.cstat.piece%4==0 then if P.stat.piece%4==0 then
local r=rnd(#PClist) local r=rnd(#PClist)
local f=P.cstat.event==1 local f=P.modeData.event==1
for i=1,4 do for i=1,4 do
local b=PClist[r][i] local b=PClist[r][i]
if f then if f then
@@ -117,7 +120,7 @@ local freshMethod={
end end
newNext(b) newNext(b)
end end
P.cstat.event=(P.cstat.event+1)%2 P.modeData.event=(P.modeData.event+1)%2
end end
end, end,
drought1=function() drought1=function()
@@ -130,7 +133,7 @@ local freshMethod={
end, end,
drought2=function() drought2=function()
if #P.next<6 then if #P.next<6 then
local bag={1,1,1,2,2,2,3,3,3,4,4,4,6,6,6,5,7} local bag={1,1,1,1,2,2,2,2,6,6,6,6,3,3,4,4,5,7}
::L:: ::L::
newNext(rem(bag,rnd(#bag))) newNext(rem(bag,rnd(#bag)))
if bag[1]then goto L end if bag[1]then goto L end
@@ -147,7 +150,7 @@ local shadeColor={
{0,1,1,.3}, {0,1,1,.3},
} }
local function createShade(x1,y1,x2,y2)--x1<x2,y1>y2 local function createShade(x1,y1,x2,y2)--x1<x2,y1>y2
if not P.small and P.showTime>=20 and setting.fxs and y1>=y2 then if P.gameEnv.block and y1>=y2 then
ins(P.shade,{5,P.cur.color,x1,y1,x2,y2}) ins(P.shade,{5,P.cur.color,x1,y1,x2,y2})
end end
end end
@@ -160,10 +163,35 @@ function loadGame(mode,level)
needResetGameData=true needResetGameData=true
gotoScene("play","deck") gotoScene("play","deck")
end end
function resetPartGameData()
frame=30
if players then
for _,P in next,players do if P.id then
while P.field[1]do
removeRow(P.field)
removeRow(P.visTime)
end
end end
end
players={alive={}}human=0
loadmode[curMode.id]()
if modeEnv.royaleMode then
for i=1,#players do
changeAtk(players[i],randomTarget(players[i]))
end
end
for i=1,#virtualkey do
virtualkey[i].press=false
end
collectgarbage()
end
function resetGameData() function resetGameData()
gamefinished=false
frame=0 frame=0
garbageSpeed=1 garbageSpeed=1
pushSpeed=3 pushSpeed=3
pauseTime=0--Time paused
pauseCount=0--Times paused
if players then if players then
for _,P in next,players do if P.id then for _,P in next,players do if P.id then
while P.field[1]do while P.field[1]do
@@ -179,7 +207,7 @@ function resetGameData()
BGM(modeEnv.bgm) BGM(modeEnv.bgm)
FX.beam={} FX.beam={}
for k,v in pairs(PTC.dust)do for _,v in next,PTC.dust do
v:release() v:release()
end end
for i=1,#players do for i=1,#players do
@@ -205,10 +233,11 @@ function resetGameData()
while freeRow[p]do while freeRow[p]do
rem(freeRow) rem(freeRow)
end end
SFX("ready")
collectgarbage() collectgarbage()
end end
function gameStart() function gameStart()
sysSFX("start") SFX("start")
for P=1,#players do for P=1,#players do
P=players[P] P=players[P]
_G.P=P _G.P=P
@@ -225,13 +254,16 @@ function createPlayer(id,x,y,size,AIspeed,data)
ins(players.alive,P) ins(players.alive,P)
P.index={__index=P} P.index={__index=P}
P.x,P.y,P.size=x,y,size or 1 P.x,P.y,P.size=x,y,size or 1
P.small=P.size<.3 P.fieldOffX,P.fieldOffY=0,0
P.small=P.size<.1
if P.small then if P.small then
P.centerX,P.centerY=P.x+150*P.size,P.y+300*P.size P.centerX,P.centerY=P.x+300*P.size,P.y+600*P.size
P.size=P.size*5 P.canvas=gc.newCanvas(60,120)
P.frameWait=rnd(30,120)
else else
P.centerX,P.centerY=P.x+300*P.size,P.y+670*P.size P.centerX,P.centerY=P.x+300*P.size,P.y+670*P.size
P.absFieldPos={P.x+150*P.size,P.y+60*P.size} P.absFieldX=P.x+150*P.size
P.absFieldY=P.y+60*P.size
end end
if AIspeed then if AIspeed then
@@ -241,18 +273,22 @@ function createPlayer(id,x,y,size,AIspeed,data)
controlDelay0=AIspeed, controlDelay0=AIspeed,
} }
else else
P.human=true
human=human+1 human=human+1
end end
P.alive=true P.alive=true
P.control=false P.control=false
P.timing=false P.timing=false
P.time=0 P.stat={
P.cstat={ time=0,
key=0,piece=0,row=0,atk=0, key=0,rotate=0,hold=0,piece=0,row=0,
techrash=0,pc=0, atk=0,send=0,recv=0,pend=0,
point=0,event=0 clear_1=0,clear_2=0,clear_3=0,clear_4=0,
spin_0=0,spin_1=0,spin_2=0,spin_3=0,
pc=0,b2b=0,b3b=0,
}--Current gamestat }--Current gamestat
P.modeData={point=0,event=0}--data use by mode
P.keyTime={}for i=1,10 do P.keyTime[i]=-1e5 end P.keySpeed=0 P.keyTime={}for i=1,10 do P.keyTime[i]=-1e5 end P.keySpeed=0
P.dropTime={}for i=1,10 do P.dropTime[i]=-1e5 end P.dropSpeed=0 P.dropTime={}for i=1,10 do P.dropTime[i]=-1e5 end P.dropSpeed=0
@@ -353,7 +389,10 @@ function garbageSend(S,R,send,time)
sent=false, sent=false,
lv=min(int(send^.69),5), lv=min(int(send^.69),5),
}) })
if R.id==1 then sysSFX(send<4 and "blip_1"or"blip_2",min(send+1,5)*.1)end R.stat.recv=R.stat.recv+send
if R.human then
SFX(send<4 and "blip_1"or"blip_2",min(send+1,5)*.1)
end
end end
end end
function garbageRelease() function garbageRelease()
@@ -362,6 +401,7 @@ function garbageRelease()
if not A.sent and A.countdown<=0 then if not A.sent and A.countdown<=0 then
garbageRise(8+A.lv,A.amount,A.pos) garbageRise(8+A.lv,A.amount,A.pos)
P.atkBuffer.sum=P.atkBuffer.sum-A.amount P.atkBuffer.sum=P.atkBuffer.sum-A.amount
P.stat.pend=P.stat.pend+A.amount
A.sent=true A.sent=true
A.time=0 A.time=0
end end
@@ -375,11 +415,12 @@ function garbageRise(color,amount,pos)
P.field[1][pos]=0 P.field[1][pos]=0
end end
P.fieldBeneath=P.fieldBeneath+amount*30 P.fieldBeneath=P.fieldBeneath+amount*30
P.curY,P.y_img=P.curY+amount,P.y_img+amount P.curY=P.curY+amount
freshgho()
for i=1,#P.clearing do for i=1,#P.clearing do
P.clearing[i]=P.clearing[i]+amount P.clearing[i]=P.clearing[i]+amount
end end
if #P.field>40 then Event_gameover.lose()end if #P.field>40 then Event.lose()end
end end
function createBeam(S,R,lv)--Player id function createBeam(S,R,lv)--Player id
local x1,y1,x2,y2 local x1,y1,x2,y2
@@ -389,23 +430,23 @@ function createBeam(S,R,lv)--Player id
x1,y1=S.x+(30*(P.curX+P.sc[2]-1)-30+15+150)*S.size,S.y+(600-30*(P.curY+P.sc[1]-1)+15+70)*S.size x1,y1=S.x+(30*(P.curX+P.sc[2]-1)-30+15+150)*S.size,S.y+(600-30*(P.curY+P.sc[1]-1)+15+70)*S.size
end end
if R.small then if R.small then
x2,y2=R.x+150*R.size*.2,R.y+300*R.size*.2 x2,y2=R.centerX,R.centerY
else else
x2,y2=R.x+308*R.size,R.y+450*R.size x2,y2=R.x+308*R.size,R.y+450*R.size
end end
ins(FX.beam,{x1,y1,x2,y2,t=0,lv=lv}) ins(FX.beam,{x1,y1,x2,y2,t=0,lv=lv})
end end
function throwBadge(S,R)--Player id function throwBadge(S,R)--Sender/Receiver
local x1,y1,x2,y2 local x1,y1,x2,y2
if S.small then if S.small then
x1,y1=S.x+30*S.size,S.y+60*S.size x1,y1=S.centerX,S.centerY
else else
x1,y1=S.x+308*S.size,S.y+450*S.size x1,y1=S.x+308*S.size,S.y+450*S.size
end end
if R.small then if R.small then
x2,y2=R.x+30*R.size,R.y+60*R.size x2,y2=R.centerX,R.centerY
else else
x2,y2=R.x+73*R.size,R.y+345*R.size x2,y2=R.x+70*R.size,R.y+344*R.size
end end
ins(FX.badge,{x1,y1,x2,y2,t=0}) ins(FX.badge,{x1,y1,x2,y2,t=0})
end end
@@ -539,7 +580,10 @@ function freshgho()
goto L goto L
end end
if P.curY>P.y_img then if P.curY>P.y_img then
createShade(P.curX,P.curY+1,P.curX+P.c-1,P.y_img+P.r-1) if P.human and setting.fxs then
createShade(P.curX,P.curY+1,P.curX+P.c-1,P.y_img+P.r-1)
P.fieldOffY=4
end
P.curY=P.y_img P.curY=P.y_img
end end
else else
@@ -611,7 +655,7 @@ function resetblock()
P.curX=P.curX+(P.moving>0 and 1 or -1) P.curX=P.curX+(P.moving>0 and 1 or -1)
end--Initial SYSs end--Initial SYSs
if ifoverlap(P.cur.bk,P.curX,P.curY)then lock()Event_gameover.lose()end if ifoverlap(P.cur.bk,P.curX,P.curY)then lock()Event.lose()end
freshgho() freshgho()
if P.keyPressing[6]then act.hardDrop()P.keyPressing[6]=false end if P.keyPressing[6]then act.hardDrop()P.keyPressing[6]=false end
end end
@@ -619,7 +663,9 @@ function spin(d,ifpre)
local idir=(P.dir+d)%4 local idir=(P.dir+d)%4
if P.cur.id==6 then if P.cur.id==6 then
freshLockDelay() freshLockDelay()
SFX(ifpre and"prerotate"or"rotate") if P.human then
SFX(ifpre and"prerotate"or"rotate")
end
if P.gameEnv.ospin and P.freshTime>10 then if P.gameEnv.ospin and P.freshTime>10 then
if d==1 then if d==1 then
if P.curY==P.y_img and solid(P.curX+2,P.curY+1)and solid(P.curX+2,P.curY)and solid(P.curX-1,P.curY+1)and not solid(P.curX-1,P.curY)then if P.curY==P.y_img and solid(P.curX+2,P.curY+1)and solid(P.curX+2,P.curY)and solid(P.curX-1,P.curY+1)and not solid(P.curX-1,P.curY)then
@@ -643,24 +689,24 @@ function spin(d,ifpre)
P.curX=P.curX-1 P.curX=P.curX-1
goto I goto I
end end
goto E goto quit
::T:: ::T::
P.cur.id=5 P.cur.id=5
P.cur.bk=blocks[5][0] P.cur.bk=blocks[5][0]
P.sc=scs[5][0] P.sc=scs[5][0]
P.r,P.c,P.dir=2,3,0 P.r,P.c,P.dir=2,3,0
P.spinLast=3 P.spinLast=3
if P.id==1 then stat.rotate=stat.rotate+1 end P.stat.rotate=P.stat.rotate+1
goto E goto quit
::I:: ::I::
P.cur.id=7 P.cur.id=7
P.cur.bk=blocks[7][2] P.cur.bk=blocks[7][2]
P.sc=scs[7][2] P.sc=scs[7][2]
P.r,P.c,P.dir=1,4,2 P.r,P.c,P.dir=1,4,2
P.spinLast=3 P.spinLast=3
if P.id==1 then stat.rotate=stat.rotate+1 end P.stat.rotate=P.stat.rotate+1
end end
::E::return goto quit
end end
local icb=blocks[P.cur.id][idir] local icb=blocks[P.cur.id][idir]
local isc=scs[P.cur.id][idir] local isc=scs[P.cur.id][idir]
@@ -675,20 +721,22 @@ function spin(d,ifpre)
goto spin goto spin
end end
end end
goto fail goto quit
::spin:: ::spin::
createShade(P.curX,P.curY+P.r-1,P.curX+P.c-1,P.curY) if P.human and setting.fxs then
createShade(P.curX,P.curY+P.r-1,P.curX+P.c-1,P.curY)
end
P.curX,P.curY,P.dir=ix,iy,idir P.curX,P.curY,P.dir=ix,iy,idir
P.sc,P.cur.bk=scs[P.cur.id][idir],icb P.sc,P.cur.bk=scs[P.cur.id][idir],icb
P.r,P.c=ir,ic P.r,P.c=ir,ic
P.spinLast=t==2 and testScore[-d]or 2 P.spinLast=t==2 and testScore[-d]or 2
freshgho() freshgho()
freshLockDelay() freshLockDelay()
SFX(ifpre and"prerotate"or ifoverlap(P.cur.bk,P.curX,P.curY+1)and ifoverlap(P.cur.bk,P.curX-1,P.curY)and ifoverlap(P.cur.bk,P.curX+1,P.curY)and"rotatekick"or"rotate") if P.human then
if P.id==1 then SFX(ifpre and"prerotate"or ifoverlap(P.cur.bk,P.curX,P.curY+1)and ifoverlap(P.cur.bk,P.curX-1,P.curY)and ifoverlap(P.cur.bk,P.curX+1,P.curY)and"rotatekick"or"rotate")
stat.rotate=stat.rotate+1
end end
::fail:: P.stat.rotate=P.stat.rotate+1
::quit::
end end
function hold(ifpre) function hold(ifpre)
if not P.holded and P.waiting==-1 and P.gameEnv.hold then if not P.holded and P.waiting==-1 and P.gameEnv.hold then
@@ -709,12 +757,12 @@ function hold(ifpre)
freshgho() freshgho()
P.dropDelay,P.lockDelay,P.freshTime=P.gameEnv.drop,P.gameEnv.lock,max(P.freshTime-5,0) P.dropDelay,P.lockDelay,P.freshTime=P.gameEnv.drop,P.gameEnv.lock,max(P.freshTime-5,0)
if ifoverlap(P.cur.bk,P.curX,P.curY)then lock()Event_gameover.lose()end if ifoverlap(P.cur.bk,P.curX,P.curY)then lock()Event.lose()end
SFX(ifpre and"prehold"or"hold") if P.human then
if P.id==1 then SFX(ifpre and"prehold"or"hold")
stat.hold=stat.hold+1
end end
P.stat.hold=P.stat.hold+1
end end
end end
function drop() function drop()
@@ -739,7 +787,7 @@ function drop()
end--Immobile end--Immobile
end end
lock() lock()
local cc,csend,exblock,sendTime=checkrow(P.curY,P.r),0,0,0--Currect clear&send&sendTime local cc,send,exblock,sendTime=checkrow(P.curY,P.r),0,0,0--Currect clear&send&sendTime
local mini local mini
if P.spinLast and cc>0 and dospin>0 then if P.spinLast and cc>0 and dospin>0 then
dospin=dospin+P.spinLast dospin=dospin+P.spinLast
@@ -760,114 +808,151 @@ function drop()
if cc==4 then if cc==4 then
if P.b2b>1000 then if P.b2b>1000 then
showText(P,text.techrashB3B,"fly",80,-30) showText(P,text.techrashB3B,"fly",80,-30)
csend=6 send=6
sendTime=100 sendTime=100
exblock=exblock+1 exblock=exblock+1
P.stat.b3b=P.stat.b3b+1
if P.human then
VOICE("b3b")
end
elseif P.b2b>=40 then elseif P.b2b>=40 then
showText(P,text.techrashB2B,"drive",80,-30) showText(P,text.techrashB2B,"drive",80,-30)
sendTime=80 sendTime=80
csend=5 send=5
P.stat.b2b=P.stat.b2b+1
if P.human then
VOICE("b2b")
end
else else
showText(P,text.techrash,"stretch",80,-30) showText(P,text.techrash,"stretch",80,-30)
sendTime=60 sendTime=60
csend=4 send=4
end end
P.b2b=P.b2b+120 P.b2b=P.b2b+120
P.lastClear=74 P.lastClear=74
P.cstat.techrash=P.cstat.techrash+1 P.stat.clear_4=P.stat.clear_4+1
if P.human then
VOICE("tts")
end
elseif cc>0 then elseif cc>0 then
local clearKey=clear_n
if dospin then if dospin then
if P.b2b>1000 then if P.b2b>1000 then
showText(P,text.b3b..text.spin[P.cur.name]..text.clear[cc],"spin",40,-30) showText(P,text.b3b..text.spin[P.cur.name]..text.clear[cc],"spin",40,-30)
csend=b2bATK[cc]+1 send=b2bATK[cc]+1
exblock=exblock+1 exblock=exblock+1
P.stat.b3b=P.stat.b3b+1
if P.human then
VOICE("b3b")
end
elseif P.b2b>=40 then elseif P.b2b>=40 then
showText(P,text.b2b..text.spin[P.cur.name]..text.clear[cc],"spin",40,-30) showText(P,text.b2b..text.spin[P.cur.name]..text.clear[cc],"spin",40,-30)
csend=b2bATK[cc] send=b2bATK[cc]
P.stat.b2b=P.stat.b2b+1
if P.human then
VOICE("b2b")
end
else else
showText(P,text.spin[P.cur.name]..text.clear[cc],"spin",50,-30) showText(P,text.spin[P.cur.name]..text.clear[cc],"spin",50,-30)
csend=2*cc send=2*cc
end end
sendTime=20+csend*20 sendTime=20+send*20
if mini then if mini then
showText(P,text.mini,"appear",40,-80) showText(P,text.mini,"appear",40,-80)
csend=ceil(csend*.5) send=ceil(send*.5)
sendTime=sendTime+60 sendTime=sendTime+60
P.b2b=P.b2b+b2bPoint[cc]*.8 P.b2b=P.b2b+b2bPoint[cc]*.8
if P.human then
VOICE("mini")
end
else else
P.b2b=P.b2b+b2bPoint[cc] P.b2b=P.b2b+b2bPoint[cc]
end end
P.lastClear=P.cur.id*10+cc P.lastClear=P.cur.id*10+cc
if P.id==1 then clearKey=spin_n
stat.spin=stat.spin+1 if P.human then
SFX(spin_n[cc])
VOICE(blockName[P.cur.name])
VOICE("spin_")
end end
SFX(spin_n[cc])
elseif #P.clearing<#P.field then elseif #P.clearing<#P.field then
P.b2b=max(P.b2b-250,0) P.b2b=max(P.b2b-250,0)
showText(P,text.clear[cc],"appear",32+cc*3,-30,(8-cc)*.3) showText(P,text.clear[cc],"appear",32+cc*3,-30,(8-cc)*.3)
csend=cc-1 send=cc-1
sendTime=20+csend*20 sendTime=20+send*20
P.lastClear=cc P.lastClear=cc
end end
P.stat[clearKey[cc]]=P.stat[clearKey[cc]]+1
if P.human then
VOICE(clearName[cc])
end
else else
P.combo=0 P.combo=0
if dospin then if dospin then
showText(P,text.spin[P.cur.name],"appear",50,-30) showText(P,text.spin[P.cur.name],"appear",50,-30)
SFX("spin_0")
P.b2b=P.b2b+20 P.b2b=P.b2b+20
P.stat.spin_0=P.stat.spin_0+1
if P.human then
SFX("spin_0")
VOICE(blockName[P.cur.name])
VOICE("spin")
end
end end
end end
csend=csend+(renATK[P.combo]or 4) send=send+(renATK[P.combo]or 4)
if #P.clearing==#P.field then if #P.clearing==#P.field then
showText(P,text.PC,"flicker",70,-80) showText(P,text.PC,"flicker",70,-80)
csend=min(csend,4)+min(6+P.cstat.pc,10) send=min(send,4)+min(6+P.stat.pc,10)
exblock=exblock+2 exblock=exblock+2
sendTime=sendTime+60 sendTime=sendTime+60
if P.cstat.row>4 then P.b2b=1200 end if P.stat.row>4 then P.b2b=1200 end
P.cstat.pc=P.cstat.pc+1 P.stat.pc=P.stat.pc+1
P.lastClear=P.cur.id*10+5 P.lastClear=P.cur.id*10+5
SFX("perfectclear") if P.human then
SFX("perfectclear")
VOICE("pc")
end
end end
if P.combo>2 then if P.combo>2 then
showText(P,text.cmb[min(P.combo,20)],P.combo<10 and"appear"or"flicker",20+P.combo*3,60) showText(P,text.cmb[min(P.combo,20)],P.combo<10 and"appear"or"flicker",20+min(P.combo,25)*3,60)
end end
sendTime=sendTime+20*P.combo sendTime=sendTime+20*P.combo
if cc>0 then if P.human and cc>0 then
SFX(clear_n[cc]) SFX(clear_n[cc])
SFX(ren_n[min(P.combo,11)]) SFX(ren_n[min(P.combo,11)])
if P.id==1 then VIB(cc<3 and 1 or cc-1)end if P.combo>14 then SFX("ren_mega",(P.combo-10)*.1)end
VIB(cc)
end end
if P.b2b>1200 then P.b2b=1200 end if P.b2b>1200 then P.b2b=1200 end
if cc>0 and modeEnv.royaleMode then if cc>0 and modeEnv.royaleMode then
local i=min(#P.atker,9) local i=min(#P.atker,9)
if i>1 then if i>1 then
csend=csend+reAtk[i] send=send+reAtk[i]
exblock=exblock+reDef[i] exblock=exblock+reDef[i]
end end
end end
if csend>0 then if send>0 then
if exblock then exblock=int(exblock*(1+P.strength*.25))end if exblock then exblock=int(exblock*(1+P.strength*.25))end
csend=csend*(1+P.strength*.25) send=send*(1+P.strength*.25)
if mini then csend=csend end if mini then send=send end
csend=int(csend) send=int(send)
--Badge Buff --Badge Buff
P.cstat.atk=P.cstat.atk+csend P.stat.atk=P.stat.atk+send
if P.id==1 then stat.atk=stat.atk+csend end
--ATK statistics --ATK statistics
if csend==0 then goto L end if send==0 then goto L end
showText(P,csend,"zoomout",40,70) showText(P,send,"zoomout",40,70)
if exblock==0 then goto L end if exblock==0 then goto L end
showText(P,exblock,"zoomout",20,115) showText(P,exblock,"zoomout",20,115)
::L:: ::L::
if csend>0 and P.atkBuffer[1]then if send>0 and P.atkBuffer[1]then
if exblock>0 then if exblock>0 then
exblock=exblock-1 exblock=exblock-1
else else
csend=csend-1 send=send-1
end end
P.atkBuffer[1].amount=P.atkBuffer[1].amount-1 P.atkBuffer[1].amount=P.atkBuffer[1].amount-1
P.atkBuffer.sum=P.atkBuffer.sum-1 P.atkBuffer.sum=P.atkBuffer.sum-1
@@ -876,24 +961,25 @@ function drop()
end end
goto L goto L
end end
if csend>0 then if send>0 then
if modeEnv.royaleMode then if modeEnv.royaleMode then
if P.atkMode==4 then if P.atkMode==4 then
if #P.atker>0 then if #P.atker>0 then
for i=1,#P.atker do for i=1,#P.atker do
garbageSend(P,P.atker[i],csend,sendTime) garbageSend(P,P.atker[i],send,sendTime)
end end
else else
garbageSend(P,randomTarget(P),csend,sendTime) garbageSend(P,randomTarget(P),send,sendTime)
end end
else else
freshTarget(P) freshTarget(P)
garbageSend(P,P.atking,csend,sendTime) garbageSend(P,P.atking,send,sendTime)
end end
elseif #players.alive>1 then elseif #players.alive>1 then
garbageSend(P,randomTarget(P),csend,sendTime) garbageSend(P,randomTarget(P),send,sendTime)
end end
if P.id==1 and csend>3 then sysSFX("emit",min(csend,8)*.125)end P.stat.send=P.stat.send+send
if P.human and send>3 then SFX("emit",min(send,8)*.125)end
end end
elseif cc==0 then elseif cc==0 then
if P.b2b>1000 then if P.b2b>1000 then
@@ -901,15 +987,14 @@ function drop()
end end
garbageRelease() garbageRelease()
end end
if P.id==1 then P.stat.piece,P.stat.row=P.stat.piece+1,P.stat.row+cc
stat.piece,stat.row=stat.piece+1,stat.row+cc if P.stat.row>=P.gameEnv.target then
end
P.cstat.piece,P.cstat.row=P.cstat.piece+1,P.cstat.row+cc
if P.cstat.row>=P.gameEnv.target then
P.gameEnv.reach() P.gameEnv.reach()
end end
P.spinLast=dospin and cc>0 P.spinLast=dospin and cc>0
SFX("lock") if P.human then
SFX("lock")
end
else else
P.curY=P.curY-1 P.curY=P.curY-1
P.spinLast=false P.spinLast=false
@@ -930,7 +1015,7 @@ end
function pressKey(i,p) function pressKey(i,p)
P=p P=p
P.keyPressing[i]=true P.keyPressing[i]=true
if P.id==1 then if P.human then
virtualkeyDown[i]=true virtualkeyDown[i]=true
virtualkeyPressTime[i]=10 virtualkeyPressTime[i]=10
end end
@@ -961,8 +1046,7 @@ function pressKey(i,p)
end end
end end
ins(P.keyTime,1,frame)rem(P.keyTime,11) ins(P.keyTime,1,frame)rem(P.keyTime,11)
P.cstat.key=P.cstat.key+1 P.stat.key=P.stat.key+1
if P.id==1 then stat.key=stat.key+1 end
end end
--ins(rec,{i,frame}) --ins(rec,{i,frame})
end end
@@ -983,7 +1067,7 @@ act={
P.curX=P.curX-1 P.curX=P.curX-1
freshgho() freshgho()
freshLockDelay() freshLockDelay()
if P.curY==P.y_img then SFX("move")end if P.human and P.curY==P.y_img then SFX("move")end
P.spinLast=false P.spinLast=false
end end
end end
@@ -999,7 +1083,7 @@ act={
P.curX=P.curX+1 P.curX=P.curX+1
freshgho() freshgho()
freshLockDelay() freshLockDelay()
if P.curY==P.y_img then SFX("move")end if P.human and P.curY==P.y_img then SFX("move")end
P.spinLast=false P.spinLast=false
end end
end end
@@ -1012,12 +1096,17 @@ act={
changeAtkMode(3) changeAtkMode(3)
else else
if P.waiting==-1 then if P.waiting==-1 then
if P.curY-P.y_img>0 then if P.curY~=P.y_img then
createShade(P.curX,P.curY+1,P.curX+P.c-1,P.y_img+P.r-1) if P.human and setting.fxs then
createShade(P.curX,P.curY+1,P.curX+P.c-1,P.y_img+P.r-1)
P.fieldOffY=5
end
P.curY=P.y_img P.curY=P.y_img
P.spinLast=false P.spinLast=false
SFX("drop") if P.human then
if P.id==1 then VIB(1)end SFX("drop")
VIB(0)
end
end end
P.lockDelay=-1 P.lockDelay=-1
drop() drop()
@@ -1051,46 +1140,71 @@ act={
P.swappingAtkMode=30 P.swappingAtkMode=30
end end
end end
if curMode.id=="custom"and curMode.lv==2 and#P.field>0 then if curMode.id=="custom"and curMode.lv==2 and P.stat.row>0 then
for y=1,#P.field do for y=1,20 do
local L=P.field[y]
for x=1,10 do for x=1,10 do
if P.field[y][x]~=preField[y][x]then return end local a,b=preField[y][x],L and L[x]or 0
if a~=-1 and(a==0 and b>0 or a<8 and a~=b or a>7 and b==0)then goto change end
end end
end end
Event_gameover.win() P.modeData.event=0
Event.win()
::change::
P.modeData.event=1-P.modeData.event
end end
end end
end, end,
restart=function() restart=function()
clearTask("play") if frame<180 then
resetGameData() clearTask("play")
frame=30 resetPartGameData()
end
end, end,
insDown=function() insDown=function()
if P.curY~=P.y_img then if P.curY~=P.y_img then
createShade(P.curX,P.curY+1,P.curX+P.c-1,P.y_img+P.r-1) if P.human and setting.fxs then
createShade(P.curX,P.curY+1,P.curX+P.c-1,P.y_img+P.r-1)
end
P.curY,P.lockDelay,P.spinLast=P.y_img,P.gameEnv.lock,false P.curY,P.lockDelay,P.spinLast=P.y_img,P.gameEnv.lock,false
if P.human and setting.fxs then
P.fieldOffY=4
end
end end
end, end,
insLeft=function() insLeft=function()
local x0=cx local x0=P.curX
::L::if not ifoverlap(P.cur.bk,P.curX-1,P.curY)then ::L::if not ifoverlap(P.cur.bk,P.curX-1,P.curY)then
P.curX=P.curX-1 P.curX=P.curX-1
createShade(P.curX+1,P.curY+P.r-1,P.curX+P.c-1,P.curY) if P.human and setting.fxs then
createShade(P.curX+1,P.curY+P.r-1,P.curX+1,P.curY)
end
freshgho() freshgho()
goto L goto L
end end
if x0~=cx then freshLockDelay()end if x0~=P.curX then
if P.human and setting.fxs and P.curX==1 then
P.fieldOffX=-4
end
freshLockDelay()
end
end, end,
insRight=function() insRight=function()
local x0=cx local x0=P.curX
::L::if not ifoverlap(P.cur.bk,P.curX+1,P.curY)then ::L::if not ifoverlap(P.cur.bk,P.curX+1,P.curY)then
P.curX=P.curX+1 P.curX=P.curX+1
createShade(P.curX-1,P.curY+P.r-1,P.curX+P.c-1,P.curY) if P.human and setting.fxs then
createShade(P.curX+P.c-1,P.curY+P.r-1,P.curX+P.c-1,P.curY)
end
freshgho() freshgho()
goto L goto L
end end
if x0~=cx then freshLockDelay()end if x0~=P.curX then
if P.human and setting.fxs and P.curX+P.c==11 then
P.fieldOffX=4
end
freshLockDelay()
end
end, end,
down1=function() down1=function()
if P.curY~=P.y_img then if P.curY~=P.y_img then
@@ -1108,6 +1222,6 @@ act={
end end
end end
end, end,
quit=function()Event_gameover.lose()end, quit=function()Event.lose()end,
--System movements --System movements
} }

BIN
image/block.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 24 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 60 KiB

After

Width:  |  Height:  |  Size: 60 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 44 KiB

After

Width:  |  Height:  |  Size: 972 B

BIN
image/mess/title_old.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 44 KiB

View File

@@ -3,17 +3,15 @@ return{
royale_remain=function(n)return"剩余 "..n.." 名玩家"end, royale_remain=function(n)return"剩余 "..n.." 名玩家"end,
cmb={nil,nil,"3 Combo","4 Combo","5 Combo","6 Combo","7 Combo","8 Combo","9 Combo","10 Combo!","11 Combo!","12 Combo!","13 Combo!","14 Combo!","15 Combo!","16 Combo!","17 Combo!","18 Combo!","19 Combo!","MEGACMB"}, cmb={nil,nil,"3 Combo","4 Combo","5 Combo","6 Combo","7 Combo","8 Combo","9 Combo","10 Combo!","11 Combo!","12 Combo!","13 Combo!","14 Combo!","15 Combo!","16 Combo!","17 Combo!","18 Combo!","19 Combo!","MEGACMB"},
techrash="Techrash", techrash="Techrash",
techrashB2B="Techrash B2B", techrashB2B="B2B Techrash",
techrashB3B="Techrash B2B2B", techrashB3B="B2B2B Techrash",
block={"Z","S","L","J","T","O","I"}, block={"Z","S","L","J","T","O","I"},
spin={"Z-spin","S-spin","L-spin","J-spin","T-spin","O-spin","I-spin"},
clear={" single"," double"," triple"}, clear={" single"," double"," triple"},
b2b="B2B ", spin={"Z-spin","S-spin","L-spin","J-spin","T-spin","O-spin","I-spin"},
b3b="B2B2B ", b2b="B2B ",b3b="B2B2B ",
mini="Mini", mini="Mini",
PC="Perfect Clear", PC="Perfect Clear",
hold="暂存", hold="暂存",next="下一个",
next="下一个",
stage={"关卡 1","关卡 2","关卡 3","关卡 4","关卡 5",}, stage={"关卡 1","关卡 2","关卡 3","关卡 4","关卡 5",},
maxspeed="最高速度", maxspeed="最高速度",
@@ -22,6 +20,8 @@ return{
win="胜利", win="胜利",
lose="失败", lose="失败",
pause="暂停", pause="暂停",
finish="结束",
pauseTime="暂停时间",
custom="自定义游戏", custom="自定义游戏",
customOption={ customOption={
@@ -36,6 +36,8 @@ return{
target="目标行数:", target="目标行数:",
freshLimit="锁延刷新次数:", freshLimit="锁延刷新次数:",
opponent="对手速度等级:", opponent="对手速度等级:",
bg="背景:",
bgm="背景音乐:",
}, },
customVal={ customVal={
drop={0,1,2,3,4,5,6,7,8,9,10,12,14,16,18,20,25,30,40,60,180,"","[20G]"}, drop={0,1,2,3,4,5,6,7,8,9,10,12,14,16,18,20,25,30,40,60,180,"","[20G]"},
@@ -43,7 +45,7 @@ return{
wait=nil, wait=nil,
fall=nil, fall=nil,
next=nil, next=nil,
hold={"",""}, hold={"","","无限"},
sequence={"bag7","his4","随机"}, sequence={"bag7","his4","随机"},
visible={"可见","半隐","全隐","瞬隐"}, visible={"可见","半隐","全隐","瞬隐"},
target={10,20,40,100,200,500,1000,""}, target={10,20,40,100,200,500,1000,""},
@@ -56,13 +58,14 @@ return{
keyboard="键盘",joystick="手柄", keyboard="键盘",joystick="手柄",
space="空格",enter="回车", space="空格",enter="回车",
setting2Help="方向键选择/翻页,回车修改,esc返回", setting2Help="方向键选择/翻页,回车修改,esc返回",
musicRoom="音乐室",
nowPlaying="正在播放:",
actName={"左移:","右移:","顺时针旋转:","逆时针旋转:","180°旋转","硬降:","软降:","暂存:","功能键:","重新开始:","左瞬移:","右瞬移:","软降到底:"}, actName={"左移:","右移:","顺时针旋转:","逆时针旋转:","180°旋转","硬降:","软降:","暂存:","功能键:","重新开始:","左瞬移:","右瞬移:","软降到底:"},
modeName={ modeName={
[0]="自定义", [0]="自定义",
"竞速","马拉松","大师","经典","","无尽","单挑","仅TSD","隐形","挖掘","生存","科研", "竞速","马拉松","大师","经典","","无尽","单挑","仅TSD","隐形","挖掘","生存","科研",
"全清训练","全清挑战","41人混战","99人混战","干旱","多人", "C4W练习","全清训练","全清挑战","49人混战","99人混战","干旱","多人",
}, },
modeInfo={ modeInfo={
sprint="挑战世界纪录", sprint="挑战世界纪录",
@@ -72,45 +75,63 @@ return{
zen="无重力消除200行", zen="无重力消除200行",
infinite="科研沙盒", infinite="科研沙盒",
solo="打败AI", solo="打败AI",
tsd="尽可能做T旋消2", tsd="尽可能做TSD",
blind="最强大脑", blind="最强大脑",
dig="核能挖掘机", dig="核能挖掘机",
survivor="防守练习", survivor="防守练习",
tech="ALLSPIN练习", tech="尽可能不要普通消除",
c4wtrain="无 限 连 击",
pctrain="熟悉全清定式的组合", pctrain="熟悉全清定式的组合",
pcchallenge="100行内尽可能多全清", pcchallenge="100行内尽可能多PC",
techmino41="41人混战", techmino49="49人混战",
techmino99="99人混战", techmino99="99人混战",
drought="异常序列", drought="异常序列",
hotseat="友尽模式", hotseat="友尽模式",
}, },
load={"加载材质ing","加载音乐ing","加载音效ing","加载完成",}, load={"加载语音ing","加载音乐ing","加载音效ing","加载完成",},
tips={ tips={
"不是动画真的在加载!", "不是动画,真的在加载!",
"整个游戏都是MrZ完成的!", "整个游戏都是MrZ完成的!",
"大满贯10连击消四全清!", "大满贯10连击消四全清!",
"方块研究所有一个Nspire-CX版本!", "<方块研究所>有一个Nspire-CX版本!",
"B2B2B2B存在吗?", "B2B2B2B存在吗?",
"MrZ旋转消5!",
"MEGACMB!", "MEGACMB!",
"ALLSPIN!", "ALLSPIN!",
"O型回旋三清?", "O型回旋三清?",
"只用一个输入设备就可以玩游戏啦~", "只用一个输入设备就可以游玩了",
"Miya:喵!", "Miya:喵!",
"225238922,哔哩哔哩 干杯~", "225238922,哔哩哔哩 干杯~",
"适度游戏益脑,沉迷游戏伤身,合理安排时间,享受健康生活",
"合群了就会消失,但是消失不代表没有意义",
"学会使用两个旋转键,三个更好",
"更小的DAS和ARR拥有更高的操作上限",
"注意到\"旋转\"到底对方块做了些什么吗?",
"20G是一套全新的游戏规则",
"不要在上课时玩游戏!",
"本游戏难度上限很高,做好心理准备",
"方块可以不是个休闲游戏",
"调到特殊的日期也不会发生什么的",
"[随机文本]",
}, },
stat={ stat={
"游戏运行次数:", "游戏运行次数:",
"游戏局数:", "游戏局数:",
"游戏时间:", "游戏时间:",
"总方块使用:", "按键数:",
"总消行数:", "旋转数:",
"总攻击行数:", "Hold次数:",
"总按键数:", "方块使用数:",
"总旋转数:", "消行数:",
"暂存次数:", "攻击数:",
"总旋转消行数:", "发送数:",
"接收数:",
"上涨数:",
"消除数:",
"Spin数:",
"B2B数:",
"PC数:",
"效率:",
}, },
help={ help={
"好像也没啥好帮助的吧?就当是关于了", "好像也没啥好帮助的吧?就当是关于了",
@@ -120,9 +141,9 @@ return{
"", "",
"使用LOVE2D引擎", "使用LOVE2D引擎",
"作者:MrZ 邮箱:1046101471@qq.com", "作者:MrZ 邮箱:1046101471@qq.com",
"程序:MrZ 美术:MrZ 音乐:MrZ 音效:MrZ", "程序:MrZ 美术:MrZ 音乐:MrZ 音效:MrZ 语音:Miya",
"使用工具:VScode,GFIE,Beepbox,Goldwave", "使用工具:VScode,GFIE,Beepbox,Goldwave",
"特别感谢:Farter,Teatube,196,Flyz,T830,[所有测试人员]和 你!", "特别感谢:Farter,196,Teatube,Flyz,T830,[所有测试人员]和 你!",
"错误或者建议请附带相关信息发送到作者邮箱~", "错误或者建议请附带相关信息发送到作者邮箱~",
}, },
support="支持作者", support="支持作者",
@@ -131,30 +152,43 @@ return{
main={ main={
play="开始", play="开始",
setting="设置", setting="设置",
music="音乐室",
stat="统计信息", stat="统计信息",
help="帮助", help="帮助",
quit="退出", quit="退出",
}, },
mode={ mode={
up="Λ", up="",
down="v", down="",
left="<", left="",
right=">", right="",
start="开始", start="开始",
custom="自定义(C)", custom="自定义(C)",
back="返回", back="返回",
}, },
music={
up="",
play="播放",
down="",
back="返回",
},
custom={ custom={
up="Λ", up="",
down="v", down="",
left="<", left="",
right=">", right="",
start1="消除开始", start1="消除开始",
start2="拼图开始", start2="拼图开始",
draw="画图(D)", draw="画图(D)",
set1="40行",
set2="1v1",
set3="无尽",
set4="隐形",
set5="极限",
back="返回", back="返回",
}, },
draw={ draw={
any="不定",
block1="", block1="",
block2="", block2="",
block3="", block3="",
@@ -167,7 +201,7 @@ return{
gb3="", gb3="",
gb4="", gb4="",
gb5="", gb5="",
erase="×", space="×",
clear="清空", clear="清空",
back="返回", back="返回",
}, },
@@ -189,15 +223,17 @@ return{
arrD="-",arrU="+", arrD="-",arrU="+",
sddasD="-",sddasU="+", sddasD="-",sddasU="+",
sdarrD="-",sdarrU="+", sdarrD="-",sdarrU="+",
ctrl="控制设置",
touch="触摸设置",
lang=function()return langName[setting.lang]end,
sfx=function()return setting.sfx and"音效:开"or"音效:关"end, sfx=function()return setting.sfx and"音效:开"or"音效:关"end,
bgm=function()return setting.bgm and"音乐:开"or"音乐:关"end, bgm=function()return setting.bgm and"音乐:开"or"音乐:关"end,
vib=function()return "震动强度:"..setting.vib end, vib=function()return "震动:"..setting.vib end,
voc=function()return setting.voc and"语音:开"or"语音:关"end,
fullscreen=function()return setting.fullscreen and"全屏:开"or"全屏:关"end, fullscreen=function()return setting.fullscreen and"全屏:开"or"全屏:关"end,
bgblock=function()return setting.bgblock and"背景动画:开"or"背景动画:关"end, bgblock=function()return setting.bgblock and"背景动画:开"or"背景动画:关"end,
frame=function()return"绘制帧:"..setting.frameMul.."%"end, frame=function()return"绘制帧:"..setting.frameMul.."%"end,
control="控制设置", skin="切换方块皮肤",
touch="触摸设置",
lang=function()return langName[setting.lang]end,
back="保存&返回", back="保存&返回",
}, },
setting2={ setting2={
@@ -221,4 +257,4 @@ return{
path="打开存储目录", path="打开存储目录",
}, },
}, },
}--中文 }

260
language/chi_full.lua Normal file
View File

@@ -0,0 +1,260 @@
return{
atkModeName={"随机","徽章","击杀","反击"},
royale_remain=function(n)return"剩余 "..n.." 名玩家"end,
cmb={nil,nil,"3 Combo","4 Combo","5 Combo","6 Combo","7 Combo","8 Combo","9 Combo","10 Combo!","11 Combo!","12 Combo!","13 Combo!","14 Combo!","15 Combo!","16 Combo!","17 Combo!","18 Combo!","19 Combo!","MEGACMB"},
techrash="四清",
techrashB2B="满贯 四清",
techrashB3B="大满贯 四清",
block={"Z","S","L","J","T","O","I"},
clear={"单清","双清","三清"},
spin={"Z型回旋","S型回旋","L型回旋","J型回旋","T型回旋","O型回旋","I型回旋"},
b2b="满贯",b3b="大满贯",
mini="迷你",
PC="场地全清",
hold="暂存",next="下一个",
stage={"关卡 1","关卡 2","关卡 3","关卡 4","关卡 5",},
maxspeed="最高速度",
speedup="速度加快",
win="胜利",
lose="失败",
pause="暂停",
finish="结束",
pauseTime="暂停时间",
custom="自定义游戏",
customOption={
drop="下落延迟:",
lock="锁定延迟:",
wait="放块延迟:",
fall="消行延迟:",
next="序列数量:",
hold="暂存:",
sequence="序列:",
visible="可见性:",
target="目标行数:",
freshLimit="锁延刷新次数:",
opponent="对手速度等级:",
bg="背景:",
bgm="背景音乐:",
},
customVal={
drop={0,1,2,3,4,5,6,7,8,9,10,12,14,16,18,20,25,30,40,60,180,"","[20G]"},
lock={0,1,2,3,4,5,6,7,8,9,10,12,14,16,18,20,25,30,40,60,180,""},
wait=nil,
fall=nil,
next=nil,
hold={"","","无限"},
sequence={"bag7","his4","随机"},
visible={"可见","半隐","全隐","瞬隐"},
target={10,20,40,100,200,500,1000,""},
freshLimit={0,8,15,""},
opponent={"无电脑",1,2,3,4,5,6,7,8,9,10,11},
},
softdropdas="软降DAS:",
softdroparr="软降ARR:",
snapLevelName={"任意摆放","10px吸附","20px吸附","40px吸附","60px吸附","80px吸附"},
keyboard="键盘",joystick="手柄",
space="空格",enter="回车",
setting2Help="方向键选择/翻页,回车修改,esc返回",
musicRoom="音乐室",
nowPlaying="正在播放:",
actName={"左移:","右移:","顺时针旋转:","逆时针旋转:","180°旋转","硬降:","软降:","暂存:","功能键:","重新开始:","左瞬移:","右瞬移:","软降到底:"},
modeName={
[0]="自定义",
"竞速","马拉松","大师","经典","","无尽","单挑","仅TSD","隐形","挖掘","生存","科研",
"C4W练习","全清训练","全清挑战","49人混战","99人混战","干旱","多人",
},
modeInfo={
sprint="挑战世界纪录",
marathon="尝试坚持到最后",
master="成为方块大师",
classic="高速经典",
zen="无重力消除200行",
infinite="科研沙盒",
solo="打败AI",
tsd="尽可能做T旋双清",
blind="最强大脑",
dig="核能挖掘机",
survivor="防守练习",
tech="尽可能不要普通消除!",
c4wtrain="无 限 连 击",
pctrain="熟悉全清定式的组合",
pcchallenge="100行内尽可能多全清",
techmino49="49人混战",
techmino99="99人混战",
drought="异常序列",
hotseat="友尽模式",
},
load={"加载语音ing","加载音乐ing","加载音效ing","加载完成",},
tips={
"不是动画,真的在加载!",
"整个游戏都是MrZ完成的!",
"大满贯10连击消四全清!",
"<方块研究所>有一个Nspire-CX版本!",
"B2B2B2B存在吗?",
"MEGACMB!",
"ALLSPIN!",
"O型回旋三清?",
"只用一个输入设备就可以游玩了",
"Miya:喵!",
"225238922,哔哩哔哩 干杯~",
"适度游戏益脑,沉迷游戏伤身,合理安排时间,享受健康生活",
"合群了就会消失,但是消失不代表没有意义",
"学会使用两个旋转键,三个更好",
"更小的DAS和ARR拥有更高的操作上限",
"注意到\"旋转\"到底对方块做了些什么吗?",
"20G是一套全新的游戏规则",
"不要在上课时玩游戏!",
"本游戏难度上限很高,做好心理准备",
"方块可以不是个休闲游戏",
"调到特殊的日期也不会发生什么的",
"[随机文本]",
},
stat={
"游戏运行次数:",
"游戏局数:",
"游戏时间:",
"按键数:",
"旋转数:",
"暂存次数:",
"方块使用:",
"消行数:",
"攻击行数:",
"发送数:",
"接收数:",
"上涨数:",
"消除数:",
"旋转消行数:",
"满贯数:",
"全清数:",
"效率:",
},
help={
"好像也没啥好帮助的吧?就当是关于了",
"这只是一个方块游戏,请勿过度解读和随意联想",
"不过就当成TOP/C2/KOS/TGM3/JS玩好了",
"游戏还在测试阶段,请 勿 外 传",
"",
"使用LOVE2D引擎",
"作者:MrZ 邮箱:1046101471@qq.com",
"程序:MrZ 美术:MrZ 音乐:MrZ 音效:MrZ 语音:Miya",
"使用工具:VScode,GFIE,Beepbox,Goldwave",
"特别感谢:Farter,Teatube,196,Flyz,T830,[所有测试人员]和 你!",
"错误或者建议请附带相关信息发送到作者邮箱~",
},
support="支持作者",
group="官方QQ群",
ButtonText={
main={
play="开始",
setting="设置",
music="音乐室",
stat="统计信息",
help="帮助",
quit="退出",
},
mode={
up="",
down="",
left="",
right="",
start="开始",
custom="自定义(C)",
back="返回",
},
music={
up="",
play="播放",
down="",
back="返回",
},
custom={
up="",
down="",
left="",
right="",
start1="消除开始",
start2="拼图开始",
draw="画图(D)",
set1="40行",
set2="1v1",
set3="无尽",
set4="隐形",
set5="极限",
back="返回",
},
draw={
any="不定",
block1="",
block2="",
block3="",
block4="",
block5="",
block6="",
block7="",
gb1="",
gb2="",
gb3="",
gb4="",
gb5="",
space="×",
clear="清空",
back="返回",
},
play={
pause="暂停",
},
pause={
resume="继续",
quit="退出",
},
setting={
ghost=function()return setting.ghost and"阴影:开"or"阴影:关"end,
center=function()return setting.center and"旋转中心:开"or"旋转中心:关"end,
grid=function()return setting.grid and"网格:开"or"网格:关"end,
swap=function()return setting.swap and"目标选择:组合键"or"目标选择:循环"end,
fxs=function()return setting.fxs and"特效:开"or"特效:关"end,
bg=function()return setting.bg and"背景:开"or"背景:关"end,
dasD="-",dasU="+",
arrD="-",arrU="+",
sddasD="-",sddasU="+",
sdarrD="-",sdarrU="+",
ctrl="控制设置",
touch="触摸设置",
lang=function()return langName[setting.lang]end,
sfx=function()return setting.sfx and"音效:开"or"音效:关"end,
bgm=function()return setting.bgm and"音乐:开"or"音乐:关"end,
vib=function()return "震动:"..setting.vib end,
voc=function()return setting.voc and"语音:开"or"语音:关"end,
fullscreen=function()return setting.fullscreen and"全屏:开"or"全屏:关"end,
bgblock=function()return setting.bgblock and"背景动画:开"or"背景动画:关"end,
frame=function()return"绘制帧:"..setting.frameMul.."%"end,
skin="切换方块皮肤",
back="保存&返回",
},
setting2={
back="返回",
},
setting3={
back="返回",
hide=function()return setting.virtualkeySwitch and"隐藏虚拟按键"or"显示虚拟按键"end,
default="默认组合",
snap=function()return text.snapLevelName[snapLevel]end,
alpha=function()return percent0to5[setting.virtualkeyAlpha]end,
icon="图标",
size="大小",
},
help={
back="返回",
qq="作者QQ",
},
stat={
back="返回",
path="打开存储目录",
},
},
}

View File

@@ -3,17 +3,15 @@ return{
royale_remain=function(n)return n.." Players Remain"end, royale_remain=function(n)return n.." Players Remain"end,
cmb={nil,nil,"3 Combo","4 Combo","5 Combo","6 Combo","7 Combo","8 Combo","9 Combo","10 Combo!","11 Combo!","12 Combo!","13 Combo!","14 Combo!","15 Combo!","16 Combo!","17 Combo!","18 Combo!","19 Combo!","MEGACMB"}, cmb={nil,nil,"3 Combo","4 Combo","5 Combo","6 Combo","7 Combo","8 Combo","9 Combo","10 Combo!","11 Combo!","12 Combo!","13 Combo!","14 Combo!","15 Combo!","16 Combo!","17 Combo!","18 Combo!","19 Combo!","MEGACMB"},
techrash="Techrash", techrash="Techrash",
techrashB2B="Techrash B2B", techrashB2B="B2B Techrash",
techrashB3B="Techrash B2B2B", techrashB3B="B2B2B Techrash",
block={"Z","S","L","J","T","O","I"}, block={"Z","S","L","J","T","O","I"},
spin={"Z-spin","S-spin","L-spin","J-spin","T-spin","O-spin","I-spin"},
clear={" single"," double"," triple"}, clear={" single"," double"," triple"},
b2b="B2B ", spin={"Z-spin","S-spin","L-spin","J-spin","T-spin","O-spin","I-spin"},
b3b="B2B2B ", b2b="B2B ",b3b="B2B2B ",
mini="Mini", mini="Mini",
PC="Perfect Clear", PC="Perfect Clear",
hold="Hold", hold="Hold",next="Next",
next="Next",
stage={"STAGE 1","STAGE 2","STAGE 3","STAGE 4","STAGE 5",}, stage={"STAGE 1","STAGE 2","STAGE 3","STAGE 4","STAGE 5",},
maxspeed="Max speed", maxspeed="Max speed",
@@ -22,7 +20,9 @@ return{
win="WIN", win="WIN",
lose="LOSE", lose="LOSE",
pause="PAUSE", pause="PAUSE",
finish="FINISH",
pauseTime="Pause time",
custom="Custom Game", custom="Custom Game",
customOption={ customOption={
drop="Drop delay:", drop="Drop delay:",
@@ -36,6 +36,8 @@ return{
target="Line limit:", target="Line limit:",
freshLimit="Lock fresh limit:", freshLimit="Lock fresh limit:",
opponent="Opponent speed:", opponent="Opponent speed:",
bg="Background:",
bgm="BGM:",
}, },
customVal={ customVal={
drop={0,1,2,3,4,5,6,7,8,9,10,12,14,16,18,20,25,30,40,60,180,"","[20G]"}, drop={0,1,2,3,4,5,6,7,8,9,10,12,14,16,18,20,25,30,40,60,180,"","[20G]"},
@@ -43,26 +45,27 @@ return{
wait=nil, wait=nil,
fall=nil, fall=nil,
next=nil, next=nil,
hold={"ON","OFF"}, hold={"ON","OFF","FREE"},
sequence={"bag7","his4","random"}, sequence={"bag7","his4","random"},
visible={"normal","time","invisible","sudden"}, visible={"normal","time","invisible","sudden"},
target={10,20,40,100,200,500,1000,""}, target={10,20,40,100,200,500,1000,""},
freshLimit={0,8,15,""}, freshLimit={0,8,15,""},
opponent={"No CPU",1,2,3,4,5,6,7,8,9,10,11}, opponent={"No CPU",1,2,3,4,5,6,7,8,9,10,11},
}, },
softdropdas="softdropDAS:", softdropdas="Down DAS:",
softdroparr="softdropARR:", softdroparr="Down ARR:",
snapLevelName={"Free pos","Snap-10","Snap-20","Snap-40","Snap-60","Snap-80"}, snapLevelName={"Free pos","Snap-10","Snap-20","Snap-40","Snap-60","Snap-80"},
keyboard="Keyboard",joystick="Joystick", keyboard="Keyboard",joystick="Joystick",
space="Space",enter="Enter", space="Space",enter="Enter",
setting2Help="Arrowkey to select/change slot,Enter to change,Esc back", setting2Help="Arrowkey to select/change slot,Enter to change,Esc back",
musicRoom="Music Room",
nowPlaying="Now Playing:",
actName={"Move Left:","Move Right:","Rotate Right:","Rotate Left:","Rotate Flip:","Hard Drop:","Soft Drop:","Hold:","Function:","Restart:","Instant Left:","Instant Right:","Ins Down:"}, actName={"Move Left:","Move Right:","Rotate Right:","Rotate Left:","Rotate Flip:","Hard Drop:","Soft Drop:","Hold:","Function:","Restart:","Instant Left:","Instant Right:","Ins Down:"},
modeName={ modeName={
[0]="Custom", [0]="Custom",
"Sprint","Marathon","Master","Classic","Zen","Infinite","1v1","TSD-only","Blind","Dig","Survivor","Tech", "Sprint","Marathon","Master","Classic","Zen","Infinite","1v1","TSD-only","Blind","Dig","Survivor","Tech",
"PC Train","PC Challenge","Techmino41","Techmino99","Drought","Hotseat", "C4W Train","PC Train","PC Challenge","Techmino49","Techmino99","Drought","Hotseat",
}, },
modeInfo={ modeInfo={
sprint="Speed run", sprint="Speed run",
@@ -76,51 +79,69 @@ return{
blind="Invisible board", blind="Invisible board",
dig="Downstack!", dig="Downstack!",
survivor="Hand them!", survivor="Hand them!",
tech="Techniques practice", tech="Don't do normal clear",
c4wtrain="Infinite combo",
pctrain="Let's learn some PCs", pctrain="Let's learn some PCs",
pcchallenge="Make PCs in 100 Lines", pcchallenge="Make PCs in 100 Lines",
techmino41="Melee fight with 40 AIs", techmino49="Melee fight with 48 AIs",
techmino99="Melee fight with 98 AIs", techmino99="Melee fight with 98 AIs",
drought="ERRSEQ flood attack", drought="ERRSEQ flood attack",
hotseat="", hotseat="",
}, },
load={"Loading textures","Loading BGM","Loading SFX","Finished",}, load={"Loading VOICE","Loading BGM","Loading SFX","Finished",},
tips={ tips={
"Not animation,real loading!", "Not animation,real loading!",
"The WHOLE game is made by MrZ!", "The WHOLE game is made by MrZ!",
"Back to Back 10 combo Techrash PC!", "Back to Back 10 combo Techrash PC!",
"Techmino has a Nspire-CX edition!", "Techmino has a Nspire-CX edition!",
"Is B2B2B2B possible?", "Is B2B2B2B possible?",
"MrZ spin Penta!",
"MEGACMB!", "MEGACMB!",
"ALLSPIN!", "ALLSPIN!",
"O spin triple?", "O spin triple?",
"You can play with any input device!", "You can play with any input device!",
"Miya:Nya!", "Miya:Nya!",
"225238922,Bilibili cheers!", "225238922,Bilibili cheers!",
"Playing too much = taking drugs",
"Disappearing doesn't mean useless",
"Try to use two rotate button,three better",
"Small DAS&ARR can make you faster,if you can adapt to it",
"Have you noticed what does \"rotating\" do to block?",
"20G is a brand new game rule",
"Do not play game in class!",
"This game can be very hard,be mentally perpared",
"This in not a casual game",
"Nothing will happen when some special day come",
"[random text]",
}, },
stat={ stat={
"Games run:", "Games run:",
"Games played:", "Games played:",
"Game time:", "Game time:",
"Total block used:", "Key pressed:",
"Total rows cleared:", "Rotate:",
"Total lines sent:", "Hold:",
"Total key pressed:", "Block used:",
"Total rotate:", "Rows cleared:",
"Total hold:", "Attack:",
"Total spin:", "Sent:",
"Receive:",
"Pend:",
"Clear:",
"Spin:",
"B2B:",
"PC:",
"Efficiency:",
}, },
help={ help={
"I don't think you need \"help\".", "I don't think you need \"help\".",
"THIS IS ONLY A SMALL BLOCK GAME", "THIS IS ONLY A BLOCK GAME",
"But just play like playing TOP/C2/KOS/TGM3", "But just play like playing TOP/C2/KOS/TGM3",
"Game is not public now,so DO NOT DISTIRBUTE", "Game is not public now,so DO NOT DISTIRBUTE",
"", "",
"Powered by LOVE2D", "Powered by LOVE2D",
"Author:MrZ E-mail:1046101471@qq.com", "Author:MrZ E-mail:1046101471@qq.com",
"Programe:MrZ Art:MrZ Music:MrZ SFX:MrZ", "Programe:MrZ Art:MrZ Music:MrZ SFX:MrZ VOICE:Miya",
"Tool used:VScode,GFIE,Beepbox,Goldwave", "Tool used:VScode,GFIE,Beepbox,Goldwave",
"Special thanks:Farter,Teatube,196,Flyz,T830,[all test staff] and YOU!", "Special thanks:Farter,Teatube,196,Flyz,T830,[all test staff] and YOU!",
"Any bugs/suggestions to my E-mail.", "Any bugs/suggestions to my E-mail.",
@@ -131,30 +152,43 @@ return{
main={ main={
play="Play", play="Play",
setting="Settings", setting="Settings",
music="Music room",
stat="Statistics", stat="Statistics",
help="Help", help="Help",
quit="Quit", quit="Quit",
}, },
mode={ mode={
up="Λ", up="",
down="v", down="",
left="<", left="",
right=">", right="",
start="Start", start="Start",
custom="Custom(C)", custom="Custom(C)",
back="Back", back="Back",
}, },
music={
up="",
play="Play",
down="",
back="Back",
},
custom={ custom={
up="Λ", up="",
down="v", down="",
left="<", left="",
right=">", right="",
start1="Clear Start", start1="Clear Start",
start2="Puzzle Start", start2="Puzzle Start",
draw="Draw(D)", draw="Draw(D)",
set1="40L",
set2="1v1",
set3="infinite",
set4="blind",
set5="classic",
back="Back", back="Back",
}, },
draw={ draw={
any="ANY",
block1="", block1="",
block2="", block2="",
block3="", block3="",
@@ -167,8 +201,8 @@ return{
gb3="", gb3="",
gb4="", gb4="",
gb5="", gb5="",
erase="×", space="×",
clear="Clear", clear="CLEAR",
back="Back", back="Back",
}, },
play={ play={
@@ -189,15 +223,17 @@ return{
arrD="-",arrU="+", arrD="-",arrU="+",
sddasD="-",sddasU="+", sddasD="-",sddasU="+",
sdarrD="-",sdarrU="+", sdarrD="-",sdarrU="+",
ctrl="Control settings",
touch="Touch settings",
lang=function()return langName[setting.lang]end,
sfx=function()return setting.sfx and"SFX:ON"or"SFX:OFF"end, sfx=function()return setting.sfx and"SFX:ON"or"SFX:OFF"end,
bgm=function()return setting.bgm and"BGM:ON"or"BGM:OFF"end, bgm=function()return setting.bgm and"BGM:ON"or"BGM:OFF"end,
vib=function()return "Vibrate level:"..setting.vib end, voc=function()return setting.voc and"VOC:ON"or"VOC:OFF"end,
vib=function()return "VIB:"..setting.vib end,
fullscreen=function()return setting.fullscreen and"Fullscreen:ON"or"Fullscreen:OFF"end, fullscreen=function()return setting.fullscreen and"Fullscreen:ON"or"Fullscreen:OFF"end,
bgblock=function()return setting.bgblock and"BG animation:ON"or"BG animation:OFF"end, bgblock=function()return setting.bgblock and"BG animation:ON"or"BG animation:OFF"end,
frame=function()return"FrameDraw:"..setting.frameMul.."%"end, frame=function()return"FrameDraw:"..setting.frameMul.."%"end,
control="Control settings", skin="Change Block Skin",
touch="Touch settings",
lang=function()return langName[setting.lang]end,
back="Save&Back", back="Save&Back",
}, },
setting2={ setting2={

221
list.lua
View File

@@ -1,4 +1,5 @@
local gc=love.graphics local gc=love.graphics
local tc,kb=love.touch,love.keyboard
local sys=love.system local sys=love.system
local fs=love.filesystem local fs=love.filesystem
actName={"moveLeft","moveRight","rotRight","rotLeft","rotFlip","hardDrop","softDrop","hold","func","restart","insLeft","insRight","insDown"} actName={"moveLeft","moveRight","rotRight","rotLeft","rotFlip","hardDrop","softDrop","hold","func","restart","insLeft","insRight","insDown"}
@@ -51,13 +52,12 @@ blockColor={
} }
sfx={ sfx={
"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",
"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_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",
@@ -76,21 +76,65 @@ bgm={
"secret7th", "secret7th",
"secret8th", "secret8th",
"rockblock", "rockblock",
"8-bit happiness",
"end", "end",
} }
voiceList={
"Z","S","L","J","T","O","I",
"single","double","triple","tts",
"spin","spin_","mini","b2b","b3b","pc",
"win","lose","voc_nya","nya",
}
voiceBank={}
voice={
Z={"Z_1","Z_2"},
S={"S_1","S_2"},
J={"J_1","J_2"},
L={"L_1","L_2"},
T={"T_1","T_2"},
O={"O_1","O_2"},
I={"I_1","I_2"},
single={"single_1","single_2","single_3"},
double={"double_1","double_2","double_3"},
triple={"triple_1","triple_2"},
tts={"tts_1"},
spin={"spin_1","spin_2","spin_3","spin_4","spin_5"},
spin_={"spin-_1","spin-_2"},
mini={"mini_1"},
b2b={"b2b_1","b2b_2"},
b3b={"b3b_1"},
pc={"PC_1"},
win={"win_1","win_2"},
lose={"lose_1","lose_2","lose_3"},
voc_nya={"nya_11","nya_12","nya_13","nya_21","nya_22"},
nya={"nya_1","nya_2","nya_3","nya_4"},
}
musicID={
"blank",
"way",
"race",
"newera",
"push",
"reason",
"infinite",
"cruelty",
"final",
"secret7th",
"secret8th",
"rockblock",
"8-bit happiness",
"end",
}
customID={ customID={
"drop", "drop","lock",
"lock", "wait","fall",
"wait", "next","hold",
"fall", "sequence","visible",
"next",
"hold",
"sequence",
"visible",
"target", "target",
"freshLimit", "freshLimit",
"opponent", "opponent",
"bg","bgm",
} }
customRange={ customRange={
drop={0,1,2,3,4,5,6,7,8,9,10,12,14,16,18,20,25,30,40,60,180,1e99,-1}, drop={0,1,2,3,4,5,6,7,8,9,10,12,14,16,18,20,25,30,40,60,180,1e99,-1},
@@ -104,6 +148,8 @@ customRange={
target={10,20,40,100,200,500,1000,1e99}, target={10,20,40,100,200,500,1000,1e99},
freshLimit={0,8,15,1e99}, freshLimit={0,8,15,1e99},
opponent={0,60,30,20,15,10,7,5,4,3,2,1}, opponent={0,60,30,20,15,10,7,5,4,3,2,1},
bg={"none","game1","game2","game3","strap","rgb","glow","matrix"},
bgm={"blank","way","race","newera","push","reason","infinite","secret7th","secret8th","rockblock"},
} }
RCPB={10,33,200,33,105,5,105,60} RCPB={10,33,200,33,105,5,105,60}
@@ -114,7 +160,7 @@ percent0to5={[0]="0%","20%","40%","60%","80%","100%",}
modeID={ modeID={
[0]="custom", [0]="custom",
"sprint","marathon","master","classic","zen","infinite","solo","tsd","blind","dig","survivor","tech", "sprint","marathon","master","classic","zen","infinite","solo","tsd","blind","dig","survivor","tech",
"pctrain","pcchallenge","techmino41","techmino99","drought","hotseat", "c4wtrain","pctrain","pcchallenge","techmino49","techmino99","drought","hotseat",
} }
modeLevel={ modeLevel={
sprint={"10L","20L","40L","100L","400L","1000L"}, sprint={"10L","20L","40L","100L","400L","1000L"},
@@ -122,30 +168,31 @@ modeLevel={
master={"LUNATIC","ULTIMATE"}, master={"LUNATIC","ULTIMATE"},
classic={"CTWC"}, classic={"CTWC"},
zen={"NORMAL"}, zen={"NORMAL"},
infinite={"NORMAL"}, infinite={"NORMAL","EXTRA"},
solo={"EASY","NORMAL","HARD","LUNATIC"}, solo={"EASY","NORMAL","HARD","LUNATIC"},
tsd={"NORMAL","HARD"}, tsd={"NORMAL","HARD"},
blind={"EASY","HARD","HARD+","LUNATIC","ULTIMATE","GM"}, blind={"EASY","HARD","HARD+","LUNATIC","ULTIMATE","GM"},
dig={"NORMAL","LUNATIC"}, dig={"NORMAL","LUNATIC"},
survivor={"EASY","NORMAL","HARD","LUNATIC","ULTIMATE"}, survivor={"EASY","NORMAL","HARD","LUNATIC","ULTIMATE"},
tech={"EASY","NORMAL","HARD","LUNATIC","ULTIMATE"}, tech={"NORMAL","NORMAL+","HARD","LUNATIC","ULTIMATE"},
c4wtrain={"NORMAL","LUNATIC"},
pctrain={"NORMAL","EXTRA"}, pctrain={"NORMAL","EXTRA"},
pcchallenge={"NORMAL","HARD","LUNATIC"}, pcchallenge={"NORMAL","HARD","LUNATIC"},
techmino41={"EASY","NORMAL","HARD","LUNATIC","ULTIMATE"}, techmino49={"EASY","NORMAL","HARD","LUNATIC","ULTIMATE"},
techmino99={"EASY","NORMAL","HARD","LUNATIC","ULTIMATE"}, techmino99={"EASY","NORMAL","HARD","LUNATIC","ULTIMATE"},
drought={"NORMAL","MESS"}, drought={"NORMAL","MESS"},
hotseat={"2P","3P","4P",}, hotseat={"2P","3P","4P",},
custom={"Normal","Puzzle"}, custom={"Normal","Puzzle"},
} }
local t,f=true,false local O,_=true,false
blocks={ blocks={
{[0]={{f,t,t},{t,t,f}},{{t,f},{t,t},{f,t}}}, {[0]={{_,O,O},{O,O,_}},{{O,_},{O,O},{_,O}}},
{[0]={{t,t,f},{f,t,t}},{{f,t},{t,t},{t,f}}}, {[0]={{O,O,_},{_,O,O}},{{_,O},{O,O},{O,_}}},
{[0]={{t,t,t},{f,f,t}},{{t,t},{t,f},{t,f}},{{t,f,f},{t,t,t}},{{f,t},{f,t},{t,t}}}, {[0]={{O,O,O},{_,_,O}},{{O,O},{O,_},{O,_}},{{O,_,_},{O,O,O}},{{_,O},{_,O},{O,O}}},
{[0]={{t,t,t},{t,f,f}},{{t,f},{t,f},{t,t}},{{f,f,t},{t,t,t}},{{t,t},{f,t},{f,t}}}, {[0]={{O,O,O},{O,_,_}},{{O,_},{O,_},{O,O}},{{_,_,O},{O,O,O}},{{O,O},{_,O},{_,O}}},
{[0]={{t,t,t},{f,t,f}},{{t,f},{t,t},{t,f}},{{f,t,f},{t,t,t}},{{f,t},{t,t},{f,t}}}, {[0]={{O,O,O},{_,O,_}},{{O,_},{O,O},{O,_}},{{_,O,_},{O,O,O}},{{_,O},{O,O},{_,O}}},
{[0]={{t,t},{t,t}},{{t,t},{t,t}}}, {[0]={{O,O},{O,O}},{{O,O},{O,O}}},
{[0]={{t,t,t,t}},{{t},{t},{t},{t}}}, {[0]={{O,O,O,O}},{{O},{O},{O},{O}}},
} }
local l={1,2,6,7}for i=1,4 do blocks[l[i]][2],blocks[l[i]][3]=blocks[l[i]][0],blocks[l[i]][1]end local l={1,2,6,7}for i=1,4 do blocks[l[i]][2],blocks[l[i]][3]=blocks[l[i]][0],blocks[l[i]][1]end
for i=1,7 do blocks[i+7]=blocks[i]end for i=1,7 do blocks[i+7]=blocks[i]end
@@ -200,49 +247,76 @@ local virtualkeySet={
{80,320,6400,80},--restart {80,320,6400,80},--restart
},--Keyboard set },--Keyboard set
{ {
{1200-360,40,1600,40},--moveLeft {1200-370,40,1600,40},--moveLeft
{1200-280,40,1600,40},--moveRight {1200-280,40,1600,40},--moveRight
{1200-520,40,1600,40},--rotRight {1200-530,40,1600,40},--rotRight
{1200-600,40,1600,40},--rotLeft {1200-610,40,1600,40},--rotLeft
{1200-440,40,1600,40},--rotFlip {1200-450,40,1600,40},--rotFlip
{1200-40,40,1600,40},--hardDrop {1200-50,40,1600,40},--hardDrop
{1200-120,40,1600,40},--softDrop {1200-130,40,1600,40},--softDrop
{1200-200,40,1600,40},--hold {1200-210,40,1600,40},--hold
{1200-680,40,1600,40},--func {1200-690,40,1600,40},--func
{1200-760,40,1600,40},--restart {1200-770,40,1600,40},--restart
},--PC key feedback },--PC key feedback
} }
local customSet={
{20,20,1,1,7,1,1,1,3,4,1,3,3},
{18,20,1,1,7,1,1,1,8,3,8,3,3},
{22,22,1,1,7,3,1,3,8,4,1,8,7},
{20,20,1,1,7,1,1,3,8,3,1,7,8},
{23,11,8,11,4,1,2,1,8,3,1,4,9},
}
local function useDefaultSet(n)
for i=1,#customSet[n]do
customSel[i]=customSet[n][i]
end
curBG=customRange.bg[customSel[12]]
BGM(customRange.bgm[customSel[13]])
end
Buttons={ Buttons={
load={}, load={},
intro={}, intro={},
main={ main={
play= {x=380,y=300,w=240,h=240,rgb=color.red,f=70,code=function()gotoScene("mode")end,down="stat",right="setting"}, play= {x=380,y=300,w=240, h=240,rgb=color.red, f=70,code=function()gotoScene("mode")end,down="stat",right="setting"},
setting={x=640,y=300,w=240,h=240,rgb=color.lightBlue,f=55,code=function()gotoScene("setting")end,down="stat",left="play",right="help"}, setting={x=640,y=300,w=240, h=240,rgb=color.lightBlue, f=55,code=function()gotoScene("setting")end,down="stat",left="play",right="music"},
stat= {x=640,y=560,w=240,h=240,rgb=color.cyan,f=55,code=function()gotoScene("stat")end,up="setting",left="play",right="help"}, music= {x=900,y=300,w=240, h=240,rgb=color.lightCyan, f=42,code=function()gotoScene("music")end,down="help",left="setting",right="quit"},
help= {x=900,y=560,w=240,h=240,rgb=color.yellow,f=55,code=function()gotoScene("help")end,up="setting",left="stat",right="quit"}, stat= {x=640,y=560,w=240, h=240,rgb=color.cyan, f=55,code=function()gotoScene("stat")end,up="setting",left="play",right="help"},
quit= {x=1180,y=620,w=120,h=120,rgb=color.lightGrey,f=50,code=function()gotoScene("quit")end,up="setting",left="help"}, help= {x=900,y=560,w=240, h=240,rgb=color.yellow, f=55,code=function()gotoScene("help")end,up="music",left="stat",right="quit"},
quit= {x=1180,y=620,w=120,h=120,rgb=color.lightGrey, f=50,code=function()gotoScene("quit")end,up="setting",left="help"},
}, },
mode={ mode={
up= {x=1000,y=210,w=200,h=140, rgb=color.white, f=64, code=function()keyDown.mode("up")end, hide=function()return modeSel==1 end,}, up= {x=1000,y=210,w=200,h=140, rgb=color.white, f=80, code=function()love.keypressed("up")end, hide=function()return modeSel==1 end,},
down= {x=1000,y=430,w=200,h=140, rgb=color.white, f=80, code=function()keyDown.mode("down")end, hide=function()return modeSel==#modeID end,}, down= {x=1000,y=430,w=200,h=140, rgb=color.white, f=80, code=function()love.keypressed("down")end, hide=function()return modeSel==#modeID end,},
left= {x=190, y=160,w=100,h=80, rgb=color.white, code=function()keyDown.mode("left")end, hide=function()return levelSel==1 end,}, left= {x=190, y=160,w=100,h=80, rgb=color.white, code=function()love.keypressed("left")end, hide=function()return levelSel==1 end,},
right= {x=350, y=160,w=100,h=80, rgb=color.white, code=function()keyDown.mode("right")end,hide=function()return levelSel==#modeLevel[modeID[modeSel]]end,}, right= {x=350, y=160,w=100,h=80, rgb=color.white, code=function()love.keypressed("right")end,hide=function()return levelSel==#modeLevel[modeID[modeSel]]end,},
start={ x=1000, y=600,w=250,h=100, rgb=color.green, f=50, code=function() start= {x=1000,y=600,w=250,h=100, rgb=color.green, f=50, code=function()
loadGame(modeSel,levelSel)end}, loadGame(modeSel,levelSel)end},
custom= {x=275, y=420,w=200,h=90, rgb=color.yellow, code=function()gotoScene("custom")end}, custom= {x=275, y=420,w=200,h=90, rgb=color.yellow, code=function()gotoScene("custom")end},
back= {x=640, y=630,w=230,h=90, rgb=color.white, f=45, code=back}, back= {x=640, y=630,w=230,h=90, rgb=color.white, f=45, code=back},
}, },
music={
up= {x=1100,y=200,w=120,h=120, rgb=color.white,f=40,code=function()sel=(sel-2)%#musicID+1 end},
play= {x=1100,y=340,w=120,h=120, rgb=color.white,f=40,code=function()BGM(musicID[sel])end},
down= {x=1100,y=480,w=120,h=120, rgb=color.white,f=50,code=function()sel=sel%#musicID+1 end},
back= {x=640, y=630,w=230,h=90, rgb=color.white,f=45,code=back},
},
custom={ custom={
up= {x=1000,y=220, w=100, h=100, rgb=color.white, code=function()optSel=(optSel-2)%#customID+1 end}, up= {x=1000,y=220, w=100,h=100, rgb=color.white,f=50, code=function()optSel=(optSel-2)%#customID+1 end},
down= {x=1000,y=460, w=100, h=100, rgb=color.white,f=50, code=function()optSel=optSel%#customID+1 end}, down= {x=1000,y=460, w=100,h=100, rgb=color.white,f=50, code=function()optSel=optSel%#customID+1 end},
left= {x=880, y=340, w=100, h=100, rgb=color.white,f=50, code=function()local k=customID[optSel]customSel[k]=(customSel[k]-2)%#customRange[k]+1 end}, left= {x=880, y=340, w=100,h=100, rgb=color.white,f=50, code=function()customSel[optSel]=(customSel[optSel]-2)%#customRange[customID[optSel]]+1 end},
right= {x=1120,y=340, w=100, h=100, rgb=color.white,f=50, code=function()local k=customID[optSel]customSel[k]=customSel[k]%#customRange[k]+1 end}, right= {x=1120,y=340, w=100,h=100, rgb=color.white,f=50, code=function()customSel[optSel]=customSel[optSel]%#customRange[customID[optSel]]+1 end},
start1= {x=880, y=580, w=220, h=70, rgb=color.green, code=function()loadGame(0,1)end}, start1= {x=880, y=580, w=220,h=70, rgb=color.green, code=function()loadGame(0,1)end},
start2= {x=1120,y=580, w=220, h=70, rgb=color.lightPurple, code=function()loadGame(0,2)end}, start2= {x=1120,y=580, w=220,h=70, rgb=color.lightPurple, code=function()loadGame(0,2)end},
draw= {x=1000,y=90, w=190, h=85, rgb=color.cyan, code=function()gotoScene("draw")end}, draw= {x=1000,y=90, w=190,h=85, rgb=color.cyan, code=function()gotoScene("draw")end},
back= {x=640, y=630 ,w=180, h=60, rgb=color.white, code=back}, set1= {x=640, y=160, w=240,h=75, rgb=color.lightRed, code=function()useDefaultSet(1)end},
set2= {x=640, y=250, w=240,h=75, rgb=color.lightRed, code=function()useDefaultSet(2)end},
set3= {x=640, y=340, w=240,h=75, rgb=color.lightRed, code=function()useDefaultSet(3)end},
set4= {x=640, y=430, w=240,h=75, rgb=color.lightRed, code=function()useDefaultSet(4)end},
set5= {x=640, y=520, w=240,h=75, rgb=color.lightRed, code=function()useDefaultSet(5)end},
back= {x=640, y=630, w=180,h=60, rgb=color.white, code=back},
}, },
draw={ draw={
any= {x=700, y=80,w=120,h=120, f=45, rgb=color.lightGrey,code=function()pen=-1 end},
block1= {x=840, y=80,w=120,h=120, f=65, rgb=color.red, code=function()pen=1 end}, block1= {x=840, y=80,w=120,h=120, f=65, rgb=color.red, code=function()pen=1 end},
block2= {x=980, y=80,w=120,h=120, f=65, rgb=color.green, code=function()pen=2 end}, block2= {x=980, y=80,w=120,h=120, f=65, rgb=color.green, code=function()pen=2 end},
block3= {x=1120,y=80,w=120,h=120, f=65, rgb=color.orange, code=function()pen=3 end}, block3= {x=1120,y=80,w=120,h=120, f=65, rgb=color.orange, code=function()pen=3 end},
@@ -255,8 +329,8 @@ Buttons={
gb3= {x=840, y=500,w=120,h=120, f=65, rgb=color.darkPurple,code=function()pen=11 end}, gb3= {x=840, y=500,w=120,h=120, f=65, rgb=color.darkPurple,code=function()pen=11 end},
gb4= {x=980, y=500,w=120,h=120, f=65, rgb=color.darkRed, code=function()pen=12 end}, gb4= {x=980, y=500,w=120,h=120, f=65, rgb=color.darkRed, code=function()pen=12 end},
gb5= {x=1120,y=500,w=120,h=120, f=65, rgb=color.darkGreen,code=function()pen=13 end}, gb5= {x=1120,y=500,w=120,h=120, f=65, rgb=color.darkGreen,code=function()pen=13 end},
erase= {x=840, y=640,w=120,h=120, f=70, rgb=color.grey, code=function()pen=0 end}, space= {x=840, y=640,w=120,h=120, f=70, rgb=color.grey, code=function()pen=0 end},
clear= {x=1120,y=640,w=120,h=120, rgb=color.white, code=function() clear= {x=1120,y=640,w=120,h=120, f=45, rgb=color.white, code=function()
if clearSureTime>0 then if clearSureTime>0 then
for y=1,20 do for x=1,10 do preField[y][x]=0 end end for y=1,20 do for x=1,10 do preField[y][x]=0 end end
clearSureTime=0 clearSureTime=0
@@ -280,26 +354,37 @@ Buttons={
swap= {x=505, y=160, w=210, h=60,f=28, rgb=color.white,code=function()setting.swap=not setting.swap end,up="center",down="bg",left="grid",right="vib"}, swap= {x=505, y=160, w=210, h=60,f=28, rgb=color.white,code=function()setting.swap=not setting.swap end,up="center",down="bg",left="grid",right="vib"},
fxs= {x=290, y=230, w=210, h=60, rgb=color.white,code=function()setting.fxs=not setting.fxs end,up="grid",down="dasU",right="bg"}, fxs= {x=290, y=230, w=210, h=60, rgb=color.white,code=function()setting.fxs=not setting.fxs end,up="grid",down="dasU",right="bg"},
bg= {x=505, y=230, w=210, h=60, rgb=color.white,code=function()setting.bg=not setting.bg end,up="swap",down="arrD",right="fullscreen"}, bg= {x=505, y=230, w=210, h=60, rgb=color.white,code=function()setting.bg=not setting.bg end,up="swap",down="arrD",right="fullscreen"},
dasD= {x=210, y=300, w=50, h=50, rgb=color.white,code=function()setting.das=(setting.das-1)%31 end,up="fxs",down="sddasD",right="dasU"}, dasD= {x=210, y=300, w=50, h=50, rgb=color.white,code=function()setting.das=(setting.das-1)%31 end,up="fxs",down="sddasD",right="dasU"},
dasU= {x=370, y=300, w=50, h=50, rgb=color.white,code=function()setting.das=(setting.das+1)%31 end,up="fxs",down="sddasU",left="dasD",right="arrD"}, dasU= {x=370, y=300, w=50, h=50, rgb=color.white,code=function()setting.das=(setting.das+1)%31 end,up="fxs",down="sddasU",left="dasD",right="arrD"},
arrD= {x=425, y=300, w=50, h=50, rgb=color.white,code=function()setting.arr=(setting.arr-1)%16 end,up="bg",down="sdarrD",left="dasU",right="arrU"}, arrD= {x=425, y=300, w=50, h=50, rgb=color.white,code=function()setting.arr=(setting.arr-1)%16 end,up="bg",down="sdarrD",left="dasU",right="arrU"},
arrU= {x=585, y=300, w=50, h=50, rgb=color.white,code=function()setting.arr=(setting.arr+1)%16 end,up="bg",down="sdarrU",left="arrD",right="bgblock"},--3~6 arrU= {x=585, y=300, w=50, h=50, rgb=color.white,code=function()setting.arr=(setting.arr+1)%16 end,up="bg",down="sdarrU",left="arrD",right="bgblock"},--3~6
sddasD= {x=210, y=370, w=50, h=50, rgb=color.white,code=function()setting.sddas=(setting.sddas-1)%11 end,up="dasD",down="lang",right="sddasU"}, sddasD= {x=210, y=370, w=50, h=50, rgb=color.white,code=function()setting.sddas=(setting.sddas-1)%11 end,up="dasD",down="ctrl",right="sddasU"},
sddasU= {x=370, y=370, w=50, h=50, rgb=color.white,code=function()setting.sddas=(setting.sddas+1)%11 end,up="dasU",down="lang",left="sddasD",right="sdarrD"}, sddasU= {x=370, y=370, w=50, h=50, rgb=color.white,code=function()setting.sddas=(setting.sddas+1)%11 end,up="dasU",down="ctrl",left="sddasD",right="sdarrD"},
sdarrD= {x=425, y=370, w=50, h=50, rgb=color.white,code=function()setting.sdarr=(setting.sdarr-1)%4 end,up="arrD",down="lang",left="sddasU",right="sdarrU"}, sdarrD= {x=425, y=370, w=50, h=50, rgb=color.white,code=function()setting.sdarr=(setting.sdarr-1)%4 end,up="arrD",down="ctrl",left="sddasU",right="sdarrU"},
sdarrU= {x=585, y=370, w=50, h=50, rgb=color.white,code=function()setting.sdarr=(setting.sdarr+1)%4 end,up="arrU",down="lang",left="sdarrD",right="frame"}, sdarrU= {x=585, y=370, w=50, h=50, rgb=color.white,code=function()setting.sdarr=(setting.sdarr+1)%4 end,up="arrU",down="ctrl",left="sdarrD",right="frame"},
ctrl= {x=340,y=440, w=310,h=60,rgb=color.green, code=function()gotoScene("setting2")end,up="sddasU",down="touch",left="lang",right="skin"},
touch= {x=340,y=510, w=310,h=60,rgb=color.yellow,code=function()gotoScene("setting3")end,up="ctrl",down="back",right="lang"},
lang= {x=580,y=510, w=150,h=60,rgb=color.red, code=function()
setting.lang=setting.lang%#langName+1
swapLanguage(setting.lang)
end,up="sdarrU",down="back",left="touch",right="skin"},
sfx= {x=760,y=90, w=160, h=60, rgb=color.white,code=function()setting.sfx=not setting.sfx end,down="vib",left="center",right="bgm"}, sfx= {x=760,y=90, w=160, h=60, rgb=color.white,code=function()setting.sfx=not setting.sfx end,down="vib",left="center",right="bgm"},
bgm= {x=940,y=90, w=160, h=60, rgb=color.white,code=function() bgm= {x=940,y=90, w=160, h=60, rgb=color.white,code=function()
BGM() BGM()
setting.bgm=not setting.bgm setting.bgm=not setting.bgm
BGM("blank") BGM("blank")
end,down="vib",left="sfx"}, end,down="voc",left="sfx"},
vib= {x=850,y=160, w=340,h=60,rgb=color.white, code=function() vib= {x=760,y=160, w=160, h=60,rgb=color.white, code=function()
setting.vib=(setting.vib+1)%5 setting.vib=(setting.vib+1)%6
VIB(2) VIB(1)
end,up="sfx",down="fullscreen",left="swap"}, end,up="sfx",down="fullscreen",left="swap",right="voc"},
voc= {x=940,y=160, w=160, h=60,rgb=color.white,
hide=function()return true end,
code=function()
setting.voc=not setting.voc
end,up="sfx",down="fullscreen",left="vib"},
fullscreen= {x=850,y=230, w=340,h=60,rgb=color.white, code=function() fullscreen= {x=850,y=230, w=340,h=60,rgb=color.white, code=function()
setting.fullscreen=not setting.fullscreen setting.fullscreen=not setting.fullscreen
love.window.setFullscreen(setting.fullscreen) love.window.setFullscreen(setting.fullscreen)
@@ -318,14 +403,12 @@ Buttons={
frame= {x=850,y=370, w=340,h=60,rgb=color.white, code=function() frame= {x=850,y=370, w=340,h=60,rgb=color.white, code=function()
setting.frameMul=setting.frameMul+(setting.frameMul<50 and 5 or 10) setting.frameMul=setting.frameMul+(setting.frameMul<50 and 5 or 10)
if setting.frameMul>100 then setting.frameMul=25 end if setting.frameMul>100 then setting.frameMul=25 end
end,up="bgblock",down="control",left="sdarrU"}, end,up="bgblock",down="skin",left="sdarrU"},
control={x=850,y=440, w=340,h=60,rgb=color.green, code=function()gotoScene("setting2")end,up="frame",down="touch",left="lang"}, skin= {x=850,y=440, w=340,h=60,rgb=color.white, code=function()
touch= {x=850,y=510, w=340,h=60,rgb=color.yellow,code=function()gotoScene("setting3")end,up="control",down="back",left="lang"}, setting.skin=setting.skin%6+1
lang= {x=280,y=510, w=200,h=60,rgb=color.red, code=function() changeBlockSkin(setting.skin)
setting.lang=setting.lang%#langName+1 end,up="frame",down="back",left="ctrl"},
swapLanguage(setting.lang) back= {x=640,y=620, w=300,h=70,rgb=color.white, code=back,up="lang"},
end,up="sddasD",down="back",right="touch"},
back= {x=640,y=620, w=300,h=70,rgb=color.white, code=back,up="touch"},
}, },
setting2={--Control setting setting2={--Control setting
back={x=840,y=630,w=180,h=60,rgb=color.white,code=back}, back={x=840,y=630,w=180,h=60,rgb=color.white,code=back},

102
main.lua
View File

@@ -1,9 +1,10 @@
local gc,tm=love.graphics,love.timer local gc,tm=love.graphics,love.timer
local ms,kb=love.mouse,love.keyboard local ms,kb=love.mouse,love.keyboard
local fs,sys=love.filesystem,love.system local fs,sys=love.filesystem,love.system
int,ceil,abs,rnd,max,min,sin,cos,atan,pi=math.floor,math.ceil,math.abs,math.random,math.max,math.min,math.sin,math.cos,math.atan,math.pi int,ceil,abs,rnd,max,min,sin,cos,atan=math.floor,math.ceil,math.abs,math.random,math.max,math.min,math.sin,math.cos,math.atan
sub,gsub,find,format,byte,char=string.sub,string.gsub,string.find,string.format,string.byte,string.char sub,gsub,find,format,byte,char=string.sub,string.gsub,string.find,string.format,string.byte,string.char
ins,rem,sort=table.insert,table.remove,table.sort ins,rem,concat=table.insert,table.remove,table.concat
-- sort=table.sort
math.randomseed(os.time()*626) math.randomseed(os.time()*626)
null=function()end null=function()end
@@ -12,10 +13,12 @@ scr={x=0,y=0,w=gc.getWidth(),h=gc.getHeight(),k=1}
scene="" scene=""
bgmPlaying=nil bgmPlaying=nil
curBG="none" curBG="none"
voicePlaying={}
kb.setKeyRepeat(false) local F=false
kb.setTextInput(false) kb.setKeyRepeat(F)
ms.setVisible(false) kb.setTextInput(F)
ms.setVisible(F)
local Fonts={} local Fonts={}
function setFont(s) function setFont(s)
@@ -36,8 +39,8 @@ gameEnv0={
das=10,arr=2, das=10,arr=2,
sddas=0,sdarr=2, sddas=0,sdarr=2,
ghost=true,center=true, ghost=true,center=true,
grid=false,swap=true, grid=F,swap=true,
_20G=false,bone=false, _20G=F,bone=F,
drop=30,lock=45, drop=30,lock=45,
wait=0,fall=0, wait=0,fall=0,
next=6,hold=true,oncehold=true, next=6,hold=true,oncehold=true,
@@ -45,24 +48,14 @@ gameEnv0={
block=true, block=true,
keepVisible=true,visible="show", keepVisible=true,visible="show",
Fkey=false,puzzle=false,ospin=true, Fkey=F,puzzle=F,ospin=true,
freshLimit=1e99,target=1e99,reach=null, freshLimit=1e99,target=1e99,reach=null,
bg="none",bgm="race" bg="none",bgm="race"
} }
customSel={ customSel={22,22,1,1,7,3,1,1,8,4,1,1,1}
drop=20, preField={h=20}
lock=20, for i=1,18 do preField[i]={0,0,0,0,0,0,0,0,0,0}end
wait=1, for i=19,20 do preField[i]={-1,-1,-1,-1,-1,-1,-1,-1,-1,-1}end
fall=1,
next=7,
hold=1,
sequence=1,
visible=1,
target=4,
freshLimit=3,
opponent=1,
}
preField={}for i=1,20 do preField[i]={0,0,0,0,0,0,0,0,0,0}end
freeRow={} freeRow={}
for i=1,40 do for i=1,40 do
freeRow[i]={0,0,0,0,0,0,0,0,0,0} freeRow[i]={0,0,0,0,0,0,0,0,0,0}
@@ -70,16 +63,17 @@ end
--Game system Data --Game system Data
setting={ setting={
ghost=true,center=true, ghost=true,center=true,
grid=false,swap=true, grid=F,swap=true,
fxs=true,bg=true, fxs=true,bg=true,
das=10,arr=2, das=10,arr=2,
sddas=0,sdarr=2, sddas=0,sdarr=2,
sfx=true,bgm=true,vib=3,
fullscreen=false,
bgblock=true,
lang=1, lang=1,
sfx=true,bgm=true,
vib=3,voc=false,
fullscreen=F,
bgblock=true,
skin=1,
keyMap={ keyMap={
{"left","right","x","z","c","up","down","space","tab","r","","",""}, {"left","right","x","z","c","up","down","space","tab","r","","",""},
{"","","","","","","","","","","","",""}, {"","","","","","","","","","","","",""},
@@ -98,12 +92,6 @@ setting={
{"","","","","","","","","","","","",""}, {"","","","","","","","","","","","",""},
{"","","","","","","","","","","","",""}, {"","","","","","","","","","","","",""},
},--keyboard & joystick },--keyboard & joystick
keyLib={
{1},
{2},
{3},
{4},
},--Players' key setting(s)
virtualkey={ virtualkey={
{80,720-80,6400,80},--moveLeft {80,720-80,6400,80},--moveLeft
{240,720-80,6400,80},--moveRight {240,720-80,6400,80},--moveRight
@@ -117,20 +105,16 @@ setting={
}, },
virtualkeyAlpha=3, virtualkeyAlpha=3,
virtualkeyIcon=true, virtualkeyIcon=true,
virtualkeySwitch=false, virtualkeySwitch=F,
frameMul=100, frameMul=100,
} }
stat={ stat={
run=0, run=0,game=0,time=0,
game=0, key=0,rotate=0,hold=0,piece=0,row=0,
gametime=0, atk=0,send=0,recv=0,pend=0,
piece=0, clear_1=0,clear_2=0,clear_3=0,clear_4=0,
row=0, spin_0=0,spin_1=0,spin_2=0,spin_3=0,
atk=0, b2b=0,b3b=0,pc=0,
key=0,
hold=0,
rotate=0,
spin=0,
} }
virtualkey={ virtualkey={
{80,720-80,6400,80},--moveLeft {80,720-80,6400,80},--moveLeft
@@ -150,19 +134,19 @@ virtualkey={
]] ]]
} }
virtualkeyDown={false,false,false,false,false,false,false,false,false,false,false,false,false} virtualkeyDown={F,F,F,F,F,F,F,F,F,F,F,F,F}
virtualkeyPressTime={0,0,0,0,0,0,0,0,0,0,0,0,0} virtualkeyPressTime={0,0,0,0,0,0,0,0,0,0,0,0,0}
--User Data&User Setting --User Data&User Setting
require"toolfunc" require("toolfunc")
require"list" require("list")
require"class" require("class")
require"gamefunc" require("gamefunc")
require"ai" require("ai")
require"timer" require("timer")
require"paint" require("paint")
require"call&sys" require("call&sys")
require"dataList" require("dataList")
require"texture" require("texture")
userData,userSetting=fs.newFile("userdata"),fs.newFile("usersetting") userData,userSetting=fs.newFile("userdata"),fs.newFile("usersetting")
if fs.getInfo("userdata")then if fs.getInfo("userdata")then
@@ -172,6 +156,8 @@ if fs.getInfo("usersetting")then
loadSetting() loadSetting()
elseif system=="Android" or system=="iOS"then elseif system=="Android" or system=="iOS"then
setting.virtualkeySwitch=true setting.virtualkeySwitch=true
setting.swap=false setting.swap=F
end end
swapLanguage(setting.lang)
swapLanguage(setting.lang)
changeBlockSkin(setting.skin)

318
paint.lua
View File

@@ -20,6 +20,7 @@ local frameColor={
local modeLevelColor={ local modeLevelColor={
EASY=color.cyan, EASY=color.cyan,
NORMAL=color.green, NORMAL=color.green,
["NORMAL+"]=color.darkGreen,
HARD=color.magenta, HARD=color.magenta,
["HARD+"]=color.darkMagenta, ["HARD+"]=color.darkMagenta,
LUNATIC=color.red, LUNATIC=color.red,
@@ -37,7 +38,51 @@ local modeLevelColor={
["400L"]=color.red, ["400L"]=color.red,
["1000L"]=color.darkRed, ["1000L"]=color.darkRed,
} }
local dataOptL={"key","rotate","hold",nil,nil,nil,"send","recv","pend"}
local function dataOpt(i)
local stat=players[1].stat
if i==4 then
return stat.piece.." "..(int(stat.piece/stat.time*100)*.01).."PPS"
elseif i==5 then
return stat.row.." "..(int(stat.row/stat.time*600)*.1).."LPM"
elseif i==6 then
return stat.atk.." "..(int(stat.atk/stat.time*600)*.1).."APM"
elseif i<10 then
return stat[dataOptL[i]]
elseif i==10 then
return stat.clear_1.."/"..stat.clear_2.."/"..stat.clear_3.."/"..stat.clear_4
elseif i==11 then
return "["..stat.spin_0.."]/"..stat.spin_1.."/"..stat.spin_2.."/"..stat.spin_3
elseif i==12 then
return stat.b2b.."[+"..stat.b3b.."]"
elseif i==13 then
return stat.pc
elseif i==14 then
return format("%0.2f",stat.atk/stat.row)
end
end
local statOptL={
"run","game",nil,
"key","rotate","hold","piece","row",
"atk","send","recv","pend",
}
local function statOpt(i)
if i<13 and i~=3 then
return stat[statOptL[i]]
elseif i==3 then
return format("%0.1fHr",stat.time*2.78e-4)
elseif i==13 then
return stat.clear_1.."/"..stat.clear_2.."/"..stat.clear_3.."/"..stat.clear_4
elseif i==14 then
return "["..stat.spin_0.."]/"..stat.spin_1.."/"..stat.spin_2.."/"..stat.spin_3
elseif i==15 then
return stat.b2b.."[+"..stat.b3b.."]"
elseif i==16 then
return stat.pc
elseif i==17 then
return format("%0.2f",stat.atk/stat.row)
end
end
local miniTitle_rect={ local miniTitle_rect={
{2,0,5,1},{4,1,1,6}, {2,0,5,1},{4,1,1,6},
{9,0,4,1},{9,3,4,1},{9,6,4,1},{8,0,1,7}, {9,0,4,1},{9,3,4,1},{9,6,4,1},{8,0,1,7},
@@ -127,39 +172,6 @@ FX={
end, end,
} }
function updateButton()
for k,B in next,Buttons[scene]do
local t=B==Buttons.sel and .4 or 0
B.alpha=abs(B.alpha-t)>.02 and(B.alpha+(B.alpha<t and .02 or -.02))or t
if B.alpha>t then B.alpha=B.alpha-.02 elseif B.alpha<t then B.alpha=B.alpha+.02 end
end
end
function drawButton()
for k,B in next,Buttons[scene]do
if not(B.hide and B.hide())then
local C=B.rgb or color.white
gc.setColor(C[1],C[2],C[3],B.alpha)
gc.rectangle("fill",B.x-B.w*.5,B.y-B.h*.5,B.w,B.h)
gc.setColor(C)
gc.setLineWidth(3)gc.rectangle("line",B.x-B.w*.5,B.y-B.h*.5,B.w,B.h,4)
gc.setColor(C[1],C[2],C[3],.3)
gc.setLineWidth(5)gc.rectangle("line",B.x-B.w*.5,B.y-B.h*.5,B.w,B.h,4)
local t=B.t
local y0
if t then
if type(t)=="function"then t=t()end
setFont(B.f or 40)
y0=B.y-currentFont*.64
gc.printf(t,B.x-201,y0+2,400,"center")
gc.printf(t,B.x-199,y0+2,400,"center")
gc.printf(t,B.x-201,y0,400,"center")
gc.printf(t,B.x-199,y0,400,"center")
gc.setColor(C)
mStr(t,B.x,y0+1)
end
end
end
end
function drawDial(x,y,speed) function drawDial(x,y,speed)
gc.setColor(1,1,1) gc.setColor(1,1,1)
mStr(int(speed),x,y-18) mStr(int(speed),x,y-18)
@@ -232,6 +244,28 @@ function Pnt.BG.game3()
gc.setColor(.6,.6,1) gc.setColor(.6,.6,1)
gc.draw(background1,640,360,Timer()*.25,12,nil,64,64) gc.draw(background1,640,360,Timer()*.25,12,nil,64,64)
end end
function Pnt.BG.game4()
gc.setColor(.1,.5,.5)
local x=Timer()%4*320
gc.draw(background2,x,0,nil,10)
gc.draw(background2,x-1280,0,nil,10)
end
function Pnt.BG.game5()
local t=2.5-Timer()%20%6%2.5
if t<.5 then gc.clear(t,t,t)
else gc.clear(0,0,0)
end
end
local scs={{1,2},nil,nil,nil,nil,{1.5,1.5},{0.5,2.5}}for i=2,5 do scs[i]=scs[1]end
function Pnt.BG.game6()
local t=1.2-Timer()%10%3%1.2
if t<.5 then gc.clear(t,t,t)
else gc.clear(0,0,0)
end
gc.setColor(.3,.3,.3)
local r=7-int(Timer()*.5)%7
gc.draw(mouseBlock[r],640,360,Timer()%3.1416*6,400,400,scs[r][2]-.5,#blocks[r][0]-scs[r][1]+.5)
end
function Pnt.BG.rgb() function Pnt.BG.rgb()
gc.clear( gc.clear(
sin(Timer()*1.2)*.15+.5, sin(Timer()*1.2)*.15+.5,
@@ -286,12 +320,14 @@ function Pnt.intro()
end end
function Pnt.main() function Pnt.main()
gc.setColor(1,1,1) gc.setColor(1,1,1)
gc.draw(titleImage,300,30) gc.draw(titleImage,280,30,nil,1.3)
setFont(30) setFont(30)
gc.print("Alpha V0.7.15",290,140) gc.print("Alpha V0.7.21",290,125)
gc.print(system,800,110) gc.print(system,845,95)
end end
function Pnt.mode() function Pnt.mode()
gc.setColor(1,1,1)
gc.draw(titleImage,830,30)
setFont(40) setFont(40)
gc.setColor(modeLevelColor[modeLevel[modeID[modeSel]][levelSel]]or color.white) gc.setColor(modeLevelColor[modeLevel[modeID[modeSel]][levelSel]]or color.white)
mStr(modeLevel[modeID[modeSel]][levelSel],270,215) mStr(modeLevel[modeID[modeSel]][levelSel],270,215)
@@ -310,21 +346,36 @@ function Pnt.mode()
end end
end end
end end
function Pnt.music()
gc.setColor(1,1,1,.3+sin(Timer()*5)*.2)
gc.rectangle("fill",45,98+30*sel,237,30)
gc.setColor(.8,.8,.8)
gc.draw(drawableText.musicRoom,20,20)
gc.setColor(1,1,1)
gc.draw(drawableText.musicRoom,22,23)
gc.draw(drawableText.nowPlaying,520,83)
setFont(35)
for i=1,#musicID do
gc.print(musicID[i],50,90+30*i)
end
setFont(50)
gc.setColor(sin(Timer()*.5)*.2+.8,sin(Timer()*.7)*.2+.8,sin(Timer())*.2+.8)
gc.print(bgmPlaying or"",600,140)
end
function Pnt.custom() function Pnt.custom()
gc.setColor(1,1,1,.3+sin(Timer()*8)*.2) gc.setColor(1,1,1,.3+sin(Timer()*8)*.2)
gc.rectangle("fill",25,95+40*optSel,465,40) gc.rectangle("fill",25,95+40*optSel,465,40)
setFont(80) gc.setColor(.8,.8,.8)gc.draw(drawableText.custom,20,20)
gc.setColor(.8,.8,.8)gc.print(text.custom,20,20) gc.setColor(1,1,1)gc.draw(drawableText.custom,22,23)
gc.setColor(1,1,1)gc.print(text.custom,22,23)
setFont(40) setFont(40)
for i=1,#customID do for i=1,#customID do
local k=customID[i] local k=customID[i]
local y=90+40*i local y=90+40*i
gc.printf(text.customOption[k],30,y,320,"right") gc.printf(text.customOption[k],30,y,320,"right")
if text.customVal[k]then if text.customVal[k]then
gc.print(text.customVal[k][customSel[k]],350,y) gc.print(text.customVal[k][customSel[i]],350,y)
else else
gc.print(customRange[k][customSel[k]],350,y) gc.print(customRange[k][customSel[i]],350,y)
end end
end end
end end
@@ -337,9 +388,14 @@ function Pnt.draw()
gc.setColor(1,1,1) gc.setColor(1,1,1)
gc.setLineWidth(3) gc.setLineWidth(3)
gc.rectangle("line",-2,-2,304,604) gc.rectangle("line",-2,-2,304,604)
gc.setLineWidth(2)
for y=1,20 do for x=1,10 do for y=1,20 do for x=1,10 do
if preField[y][x]>0 then local B=preField[y][x]
drawPixel(y,x,preField[y][x]) if B>0 then
drawPixel(y,x,B)
elseif B==0 then
gc.line(30*x-25,605-30*y,30*x-5,625-30*y)
gc.line(30*x-25,625-30*y,30*x-5,605-30*y)
end end
end end end end
if sx and sy then if sx and sy then
@@ -355,69 +411,84 @@ function Pnt.draw()
gc.setLineWidth(13) gc.setLineWidth(13)
gc.setColor(blockColor[pen]) gc.setColor(blockColor[pen])
gc.rectangle("line",945,605,70,70) gc.rectangle("line",945,605,70,70)
else elseif pen==0 then
gc.setColor(.8,.8,.8) gc.setLineWidth(5)
gc.draw(drawableText.x,950,560) gc.setColor(.9,.9,.9)
gc.line(960,620,1000,660)
gc.line(960,660,1000,620)
end end
end end
function Pnt.play() function Pnt.play()
for p=1,#players do for p=1,#players do
P=players[p] P=players[p]
if P.small then if P.small then
gc.push("transform") P.frameWait=P.frameWait-1
gc.translate(P.x,P.y)gc.scale(P.size)--Position if P.frameWait==0 then
gc.setColor(0,0,0,.4)gc.rectangle("fill",0,0,60,120)--Background P.frameWait=8
gc.translate(0,P.fieldBeneath*.2) gc.setCanvas(P.canvas)
gc.setScissor(scr.x+P.x*scr.k,scr.y+P.y*scr.k,60*P.size*scr.k,120*P.size*scr.k) gc.clear(0,0,0,.4)
gc.setColor(1,1,1,P.result and max(20-P.endCounter,0)*.05 or 1) gc.push("transform")
local h=#P.clearing gc.origin()
for j=int(P.fieldBeneath/30+1),#P.field do gc.setColor(1,1,1,P.result and max(20-P.endCounter,0)*.05 or 1)
if j==P.clearing[h]and P.falling>-1 then local h=#P.clearing
h=h-1 local F=P.field
else for j=1,#F do
for i=1,10 do if j==P.clearing[h]and P.falling>-1 then
if P.field[j][i]>0 then h=h-1
gc.draw(blockSkinmini[P.field[j][i]],6*i-6,120-6*j) else
for i=1,10 do
if F[j][i]>0 then
gc.draw(blockSkinmini[F[j][i]],6*i-6,120-6*j)
end
end end
end end
end--Field
if P.alive then
gc.setLineWidth(2)
gc.setColor(frameColor[P.strength])gc.rectangle("line",1,1,58,118)
end--Draw boarder
if modeEnv.royaleMode then
gc.setColor(1,1,1)
for i=1,P.strength do
gc.draw(badgeIcon,12*i-7,4,nil,.5)
end
end end
end--Field if P.result then
gc.setScissor() gc.setColor(1,1,1,min(P.endCounter,60)*.01)
gc.translate(0,-P.fieldBeneath*.2) setFont(22)mStr(P.result,32,47)
gc.setLineWidth(2) setFont(20)mStr(P.rank,30,82)
gc.setColor(frameColor[P.strength])gc.rectangle("line",-1,-1,62,122)--Draw boarder
if modeEnv.royaleMode then
gc.setColor(1,1,1)
for i=1,P.strength do
gc.draw(badgeIcon,12*i-7,4,nil,.5)
end end
gc.pop()
gc.setCanvas()
end end
if P.result then gc.setColor(1,1,1)
gc.setColor(1,1,1,min(P.endCounter,60)*.01) gc.draw(P.canvas,P.x,P.y,nil,P.size*10)
setFont(22)mStr(P.result,32,47) if P.killMark then
setFont(20)mStr(P.rank,30,82) gc.setLineWidth(3)
if P.killMark then gc.setColor(1,0,0,min(P.endCounter,25)*.04)
gc.setLineWidth(4) gc.circle("line",P.centerX,P.centerY,(840-20*min(P.endCounter,30))*P.size)
gc.setColor(1,0,0,min(P.endCounter,25)*.04)
gc.circle("line",31,60,84-2*min(P.endCounter,30))
end
end end
gc.pop()
else else
gc.push("transform") gc.push("transform")
gc.translate(P.x,P.y)gc.scale(P.size)--Position gc.translate(P.x,P.y)gc.scale(P.size)--Position
gc.setColor(0,0,0,.6)gc.rectangle("fill",0,0,600,690)--Background gc.setColor(0,0,0,.6)gc.rectangle("fill",0,0,600,690)--Background
gc.setLineWidth(7) gc.setLineWidth(7)
gc.setColor(frameColor[P.strength])gc.rectangle("line",0,0,600,690)--Big frame gc.setColor(frameColor[P.strength])gc.rectangle("line",0,0,600,690,3)--Big frame
gc.translate(150,70) gc.translate(150+P.fieldOffX,70+P.fieldOffY)
if P.gameEnv.grid then if P.gameEnv.grid then
gc.setLineWidth(1) gc.setLineWidth(1)
gc.setColor(1,1,1,.2) gc.setColor(1,1,1,.2)
for x=1,9 do gc.line(30*x,-10,30*x,600)end for x=1,9 do gc.line(30*x,-10,30*x,600)end
for y=0,19 do gc.line(0,30*y,300,30*y)end for y=0,19 do
y=30*y+P.fieldBeneath
gc.line(0,y,300,y)
end
if P.fieldBeneath>20 then
gc.line(0,P.fieldBeneath-30,300,P.fieldBeneath-30)
end
end--Grid lines end--Grid lines
gc.translate(0,P.fieldBeneath) gc.translate(0,P.fieldBeneath)
gc.setScissor(scr.x+P.absFieldPos[1]*scr.k,scr.y+P.absFieldPos[2]*scr.k,300*P.size*scr.k,610*P.size*scr.k) gc.setScissor(scr.x+P.absFieldX*scr.k,scr.y+P.absFieldY*scr.k,300*P.size*scr.k,610*P.size*scr.k)
local h=#P.clearing local h=#P.clearing
for j=int(P.fieldBeneath/30+1),#P.field do for j=int(P.fieldBeneath/30+1),#P.field do
if j==P.clearing[h]and P.falling>-1 then if j==P.clearing[h]and P.falling>-1 then
@@ -473,13 +544,12 @@ function Pnt.play()
gc.draw(spinCenter,x,600-30*(P.y_img+P.sc[1]-1)+15,nil,nil,nil,4,4) gc.draw(spinCenter,x,600-30*(P.y_img+P.sc[1]-1)+15,nil,nil,nil,4,4)
end--Rotate center end--Rotate center
end end
gc.setColor(1,1,1)
gc.draw(PTC.dust[p])
--Draw game field --Draw game field
gc.setScissor()--In-playField mask gc.setScissor()--In-playField mask
gc.setColor(1,1,1)
gc.draw(PTC.dust[p])
gc.translate(0,-P.fieldBeneath) gc.translate(0,-P.fieldBeneath)
gc.setLineWidth(3) gc.setLineWidth(3)
gc.setColor(1,1,1)
gc.rectangle("line",-1,-11,302,612)--Draw boarder gc.rectangle("line",-1,-11,302,612)--Draw boarder
gc.setLineWidth(2) gc.setLineWidth(2)
@@ -525,10 +595,11 @@ function Pnt.play()
gc.setColor(1,1,1) gc.setColor(1,1,1)
gc.rectangle("line",-17,-3,16,604.5)--Draw b2b bar boarder gc.rectangle("line",-17,-3,16,604.5)--Draw b2b bar boarder
--B2B indictator --B2B indictator
gc.translate(-P.fieldOffX,-P.fieldOffY)
if P.gameEnv.hold then if P.gameEnv.hold then
gc.setColor(1,1,1) gc.setColor(1,1,1)
gc.draw(drawableText.hold,-124,-10) mDraw(drawableText.hold,-82,-10)
for i=1,#P.hold.bk do for i=1,#P.hold.bk do
for j=1,#P.hold.bk[1] do for j=1,#P.hold.bk[1] do
if P.hold.bk[i][j]then if P.hold.bk[i][j]then
@@ -537,7 +608,7 @@ function Pnt.play()
end end
end end
end--Hold end--Hold
gc.draw(drawableText.next,340,-10) mDraw(drawableText.next,381,-10)
local N=1 local N=1
::L:: ::L::
local b,c=P.next[N].bk,P.next[N].color local b,c=P.next[N].bk,P.next[N].color
@@ -569,7 +640,7 @@ function Pnt.play()
gc.setColor(1,1,1) gc.setColor(1,1,1)
setFont(35) setFont(35)
mStr(format("%.2f",P.time),-82,520)--Draw time mStr(format("%.2f",P.stat.time),-82,520)--Draw time
if mesDisp[curMode.id]then mesDisp[curMode.id]()end--Draw other message if mesDisp[curMode.id]then mesDisp[curMode.id]()end--Draw other message
gc.setColor(1,1,1) gc.setColor(1,1,1)
@@ -618,28 +689,44 @@ function Pnt.play()
end end
end end
end end
if restartCount>0 then
gc.setColor(0,0,0,restartCount/17)
gc.rectangle("fill",0,0,1280,720)
end
end end
function Pnt.pause() function Pnt.pause()
gc.setColor(0,0,0,pauseTime*.015) Pnt.play()
gc.setColor(0,0,0,pauseTimer*.015)
gc.rectangle("fill",0,0,1280,720) gc.rectangle("fill",0,0,1280,720)
gc.setColor(1,1,1,pauseTimer*.02)
setFont(30)
if pauseCount>0 then
gc.print(text.pauseTime..":["..pauseCount.."] "..format("%0.2f",pauseTime).."s",110,150)
end
for i=1,7 do
gc.print(text.stat[i+3],110,30*i+270)
gc.print(dataOpt(i),305,30*i+270)
end
for i=8,14 do
gc.print(text.stat[i+3],860,30*i+60)
gc.print(dataOpt(i),1000,30*i+60)
end
setFont(40)
if system~="Android"then if system~="Android"then
setFont(40)
gc.setColor(1,1,1,pauseTime*.02)
mStr(text.space.."/"..text.enter,640,300) mStr(text.space.."/"..text.enter,640,300)
gc.print("ESC",610,598) gc.print("ESC",610,598)
end end
setFont(120) mDraw(gamefinished and drawableText.finish or drawableText.pause,640,140-12*(5-pauseTimer*.1)^2)
gc.setColor(1,1,1)
mStr(text.pause,640,140-12*(5-pauseTime*.1)^2)
end end
function Pnt.setting() function Pnt.setting()
gc.setColor(1,1,1) gc.setColor(1,1,1)
setFont(35) setFont(35)
mStr("DAS:"..setting.das,290,278) mStr("DAS:"..setting.das,290,278)
mStr("ARR:"..setting.arr,506,278) mStr("ARR:"..setting.arr,506,278)
setFont(18) setFont(21)
mStr(text.softdropdas..setting.sddas,290,361) mStr(text.softdropdas..setting.sddas,290,357)
mStr(text.softdroparr..setting.sdarr,506,361) mStr(text.softdroparr..setting.sdarr,506,357)
gc.draw(blockSkin[7-int(Timer()*2)%7],820,480,nil,2)
end end
function Pnt.setting2() function Pnt.setting2()
local a=.3+sin(Timer()*15)*.1 local a=.3+sin(Timer()*15)*.1
@@ -669,11 +756,12 @@ function Pnt.setting2()
gc.line(200*x-160,30,200*x-160,550) gc.line(200*x-160,30,200*x-160,550)
end end
gc.line(40,550,640,550) gc.line(40,550,640,550)
mStr(text.keyboard,340,0) mDraw(drawableText.keyboard,340,0)
mStr(text.joystick,540,0) mDraw(drawableText.joystick,540,0)
gc.print(text.setting2Help,50,620) gc.draw(drawableText.setting2Help,50,620)
setFont(40) setFont(40)
gc.print("< P"..curBoard.."/P8 >",430,570) gc.print("P"..int(curBoard*.5+.5).."/P4",420,560)
gc.print(curBoard.."/8",580,560)
end end
function Pnt.setting3() function Pnt.setting3()
VirtualkeyPreview() VirtualkeyPreview()
@@ -695,7 +783,10 @@ function Pnt.help()
for i=1,11 do for i=1,11 do
gc.printf(text.help[i],140,15+43*i,1000,"center") gc.printf(text.help[i],140,15+43*i,1000,"center")
end end
gc.draw(titleImage,180,600,.2,.7+.05*sin(Timer()*2),nil,140,100) gc.draw(titleImage,250,600,.2,1+.05*sin(Timer()*2),nil,212,35)
gc.setLineWidth(5)
gc.rectangle("line",17,17,260,260)
gc.rectangle("line",1077,17,186,186)
gc.draw(payCode,20,20) gc.draw(payCode,20,20)
gc.draw(groupCode,1080,20) gc.draw(groupCode,1080,20)
gc.setColor(1,1,1,sin(Timer()*10)*.5+.5) gc.setColor(1,1,1,sin(Timer()*10)*.5+.5)
@@ -705,18 +796,11 @@ function Pnt.help()
mStr(text.group,1170,210) mStr(text.group,1170,210)
end end
function Pnt.stat() function Pnt.stat()
setFont(35) setFont(28)
gc.setColor(1,1,1) gc.setColor(1,1,1)
for i=1,10 do gc.print(text.stat[i],350,20+40*i)end for i=1,17 do
gc.print(stat.run,650,60) gc.print(text.stat[i],400,30*i-5)
gc.print(stat.game,650,100) gc.print(statOpt(i),720,30*i-5)
gc.print(format("%0.1fhr",stat.gametime*2.78e-4),650,140) end
gc.print(stat.piece,650,180) gc.draw(titleImage,260,600,.2+.07*sin(Timer()*3),nil,nil,212,35)
gc.print(stat.row,650,220)
gc.print(stat.atk,650,260)
gc.print(stat.key,650,300)
gc.print(stat.rotate,650,340)
gc.print(stat.hold,650,380)
gc.print(stat.spin,650,420)
gc.draw(titleImage,260,570,.2+.07*sin(Timer()*3),.8,nil,250,60)
end end

View File

@@ -8,17 +8,12 @@ local function C(x,y)
end end
gc.setDefaultFilter("nearest","nearest") gc.setDefaultFilter("nearest","nearest")
local blockImg=N("/image/block/1.png") blockImg=N("/image/block.png")
blockSkin,blockSkinmini={},{} blockSkin,blockSkinmini={},{}
for i=1,13 do for i=1,13 do
C(30,30) blockSkin[i]=C(30,30)
gc.draw(blockImg,30-30*i,0) blockSkinmini[i]=C(6,6)
blockSkin[i]=c
C(6,6)
gc.draw(blockImg,6-6*i,0,nil,.2)
blockSkinmini[i]=c
end end
blockImg:release()
virtualkeyIcon={} virtualkeyIcon={}
for i=1,10 do for i=1,10 do
@@ -84,12 +79,17 @@ groupCode=N("/image/mess/groupcode.png")
payCode=N("/image/mess/paycode.png") payCode=N("/image/mess/paycode.png")
drawableText={ drawableText={
question=T(100,"?"), question=T(100,"?"),
x=T(110,"×"),
bpm=T(15,"BPM"), bpm=T(15,"BPM"),
kpm=T(15,"KPM"), kpm=T(15,"KPM"),
modeName=T(30),
levelName=T(30), modeName=T(30),levelName=T(30),
next=T(40), next=T(40),hold=T(40),
hold=T(40), pause=T(120),
finish=T(120),
custom=T(80),
keyboard=T(25),joystick=T(25),
setting2Help=T(25),
musicRoom=T(80),
nowPlaying=T(50),
} }
c=gc.setCanvas() c=gc.setCanvas()

View File

@@ -1,21 +1,28 @@
local wd=love.window
local Timer=love.timer.getTime local Timer=love.timer.getTime
Tmr={} Tmr={}
function Tmr.load() function Tmr.load()
local t=Timer()
::R::
if loading==1 then if loading==1 then
loadnum=loadnum+1 if loadnum<=#voiceList then
loadprogress=loadnum/10 local N=voiceList[loadnum]
if loadnum==5 then for i=1,#voice[N]do
--require("texture") voice[N][i]=love.audio.newSource("VOICE/"..voice[N][i]..".ogg","static")
elseif loadnum==10 then end
loadnum=1 loadprogress=loadnum/#voiceList
loadnum=loadnum+1
else
loading=2 loading=2
loadnum=1
end end
elseif loading==2 then elseif loading==2 then
if loadnum<=#bgm then if loadnum<=#bgm then
bgm[bgm[loadnum]]=love.audio.newSource("/BGM/"..bgm[loadnum]..".ogg","stream") local N=bgm[loadnum]
bgm[bgm[loadnum]]:setLooping(true) bgm[N]=love.audio.newSource("/BGM/"..N..".ogg","stream")
bgm[bgm[loadnum]]:setVolume(0) bgm[N]:setLooping(true)
bgm[N]:setVolume(0)
loadprogress=loadnum/#bgm loadprogress=loadnum/#bgm
loadnum=loadnum+1 loadnum=loadnum+1
else else
@@ -31,7 +38,7 @@ function Tmr.load()
else else
for i=1,#sfx do sfx[i]=nil end for i=1,#sfx do sfx[i]=nil end
loading=4 loading=4
loadnum=0 loadnum=1
end end
elseif loading==4 then elseif loading==4 then
loadnum=loadnum+1 loadnum=loadnum+1
@@ -50,8 +57,7 @@ function Tmr.draw()
end end
function Tmr.play(dt) function Tmr.play(dt)
frame=frame+1 frame=frame+1
stat.gametime=stat.gametime+dt stat.time=stat.time+dt
for i=#FX.beam,1,-1 do for i=#FX.beam,1,-1 do
local b=FX.beam[i] local b=FX.beam[i]
b.t=b.t+1 b.t=b.t+1
@@ -82,7 +88,7 @@ function Tmr.play(dt)
if frame==179 then if frame==179 then
gameStart() gameStart()
elseif frame%60==0 then elseif frame%60==0 then
sysSFX("ready") SFX("ready")
end end
for p=1,#players do for p=1,#players do
P=players[p] P=players[p]
@@ -92,11 +98,21 @@ function Tmr.play(dt)
P.moving=0 P.moving=0
end end
end end
if restartCount>0 then restartCount=restartCount-1 end
return return
end--Counting,include pre-das,directy RETURN elseif players[1].keyPressing[10]then
restartCount=restartCount+1
if restartCount>17 then
clearTask("play")
updateStat()
resetGameData()
end
elseif restartCount>0 then
restartCount=max(restartCount-2,0)
end--Counting,include pre-das,directy RETURN,or restart counting
for p=1,#players do for p=1,#players do
P=players[p] P=players[p]
if P.timing then P.time=P.time+dt end if P.timing then P.stat.time=P.stat.time+dt end
if P.alive then if P.alive then
if not P.small then if not P.small then
local v=0 local v=0
@@ -124,9 +140,9 @@ function Tmr.play(dt)
else else
AI_getControls(P.ai.controls) AI_getControls(P.ai.controls)
P.ai.controlDelay=P.ai.controlDelay0+2 P.ai.controlDelay=P.ai.controlDelay0+2
if Timer()-P.cstat.point>P.cstat.event then if Timer()-P.modeData.point>P.modeData.event then
P.cstat.point=Timer() P.modeData.point=Timer()
P.cstat.event=P.ai.controlDelay0+rnd(2,10) P.modeData.event=P.ai.controlDelay0+rnd(2,10)
changeAtkMode(rnd()<.85 and 1 or #P.atker>3 and 4 or rnd()<.35 and 2 or 3) changeAtkMode(rnd()<.85 and 1 or #P.atker>3 and 4 or rnd()<.35 and 2 or 3)
end end
end end
@@ -171,7 +187,7 @@ function Tmr.play(dt)
if P.falling>=0 then if P.falling>=0 then
P.falling=P.falling-1 P.falling=P.falling-1
if P.falling>=0 then goto stop end if P.falling>=0 then goto stop end
if P.gameEnv.fall>0 and #P.field>P.clearing[1]then SFX("fall")end if P.human and P.gameEnv.fall>0 and #P.field>P.clearing[1]then SFX("fall")end
for i=1,#P.clearing do for i=1,#P.clearing do
removeRow(P.field,P.clearing[i]) removeRow(P.field,P.clearing[i])
removeRow(P.visTime,P.clearing[i]) removeRow(P.visTime,P.clearing[i])
@@ -210,8 +226,8 @@ function Tmr.play(dt)
--Alive --Alive
else else
if not P.small then if not P.small then
P.keySpeed=P.keySpeed*.96+P.cstat.key/P.time*60*.04 P.keySpeed=P.keySpeed*.96+P.stat.key/P.stat.time*60*.04
P.dropSpeed=P.dropSpeed*.96+P.cstat.piece/P.time*60*.04 P.dropSpeed=P.dropSpeed*.96+P.stat.piece/P.stat.time*60*.04
--Final average speeds --Final average speeds
if modeEnv.royaleMode then if modeEnv.royaleMode then
P.swappingAtkMode=min(P.swappingAtkMode+2,30) P.swappingAtkMode=min(P.swappingAtkMode+2,30)
@@ -220,7 +236,7 @@ function Tmr.play(dt)
if P.falling>=0 then if P.falling>=0 then
P.falling=P.falling-1 P.falling=P.falling-1
if P.falling>=0 then goto stop end if P.falling>=0 then goto stop end
if P.gameEnv.fall>0 and #P.field>P.clearing[1]then SFX("fall")end if P.human and P.gameEnv.fall>0 and #P.field>P.clearing[1]then SFX("fall")end
for i=1,#P.clearing do for i=1,#P.clearing do
removeRow(P.field,P.clearing[i]) removeRow(P.field,P.clearing[i])
removeRow(P.visTime,P.clearing[i]) removeRow(P.visTime,P.clearing[i])
@@ -244,6 +260,12 @@ function Tmr.play(dt)
rem(P.shade,i) rem(P.shade,i)
end end
end end
if P.fieldOffY>0 then
P.fieldOffY=P.fieldOffY-(P.fieldOffY>3 and 2 or 1)
end
if P.fieldOffX~=0 then
P.fieldOffX=P.fieldOffX-(P.fieldOffX>0 and 1 or -1)
end
for i=#P.bonus,1,-1 do for i=#P.bonus,1,-1 do
local b=P.bonus[i] local b=P.bonus[i]
if b.inf then if b.inf then
@@ -276,7 +298,10 @@ function Tmr.play(dt)
if modeEnv.royaleMode and frame%120==0 then freshMostDangerous()end if modeEnv.royaleMode and frame%120==0 then freshMostDangerous()end
end end
function Tmr.pause(dt) function Tmr.pause(dt)
if pauseTime<50 then if not gamefinished then
pauseTime=pauseTime+1 pauseTime=pauseTime+dt
end
if pauseTimer<50 and not wd.isMinimized()then
pauseTimer=pauseTimer+1
end end
end end

View File

@@ -14,7 +14,10 @@ local function splitS(s,sep)
return t return t
end end
function mStr(s,x,y) function mStr(s,x,y)
gc.printf(s,x-300,y,600,"center") gc.printf(s,x-320,y,640,"center")
end
function mDraw(s,x,y)
gc.draw(s,x-s:getWidth()*.5,y)
end end
function getNewRow(val) function getNewRow(val)
@@ -36,8 +39,20 @@ function removeRow(t,k)
end end
--Single-usage funcs --Single-usage funcs
langName={"中文","English"} langName={"中文","全中文","English"}
local langID={"chi","eng"} local langID={"chi","chi_full","eng"}
local drawableTextLoad={
"next",
"hold",
"pause",
"finish",
"custom",
"keyboard",
"joystick",
"setting2Help",
"musicRoom",
"nowPlaying",
}
function swapLanguage(l) function swapLanguage(l)
text=require("language/"..langID[l]) text=require("language/"..langID[l])
Buttons.sel=nil Buttons.sel=nil
@@ -47,9 +62,6 @@ function swapLanguage(l)
B.t=text.ButtonText[S][N] B.t=text.ButtonText[S][N]
end end
end end
drawableText.next:set(text.next)
drawableText.hold:set(text.hold)
if royaleCtrlPad then royaleCtrlPad:release()end
gc.push("transform") gc.push("transform")
gc.origin() gc.origin()
royaleCtrlPad=gc.newCanvas(300,100) royaleCtrlPad=gc.newCanvas(300,100)
@@ -61,18 +73,34 @@ function swapLanguage(l)
gc.rectangle("line",RCPB[2*i-1],RCPB[2*i],90,35,8,4) gc.rectangle("line",RCPB[2*i-1],RCPB[2*i],90,35,8,4)
mStr(text.atkModeName[i],RCPB[2*i-1]+45,RCPB[2*i]+3) mStr(text.atkModeName[i],RCPB[2*i-1]+45,RCPB[2*i]+3)
end end
gc.setCanvas()
gc.pop() gc.pop()
gc.setCanvas()
for _,s in next,drawableTextLoad do
drawableText[s]:set(text[s])
end
collectgarbage() collectgarbage()
end end
function changeBlockSkin(n)
n=n-1
gc.push("transform")
gc.origin()
for i=1,13 do
gc.setCanvas(blockSkin[i])
gc.draw(blockImg,30-30*i,-30*n)
gc.setCanvas(blockSkinmini[i])
gc.draw(blockImg,6-6*i,-6*n,nil,.2)
end
gc.pop()
gc.setCanvas()
end
local vibrateLevel={0,0,.03,.04,.05,.07,.9} local vibrateLevel={0,.02,.03,.04,.05,.06,.07,.08}
function VIB(t) function VIB(t)
if setting.vib>0 then if setting.vib>0 then
love.system.vibrate(vibrateLevel[setting.vib+t]) love.system.vibrate(vibrateLevel[setting.vib+t])
end end
end end
function sysSFX(s,v) function SFX(s,v)
if setting.sfx then if setting.sfx then
local n=1 local n=1
::L::if sfx[s][n]:isPlaying()then ::L::if sfx[s][n]:isPlaying()then
@@ -88,28 +116,23 @@ function sysSFX(s,v)
sfx[s][n]:play() sfx[s][n]:play()
end end
end end
function SFX(s,v) function VOICE(s,n)
if setting.sfx and not P.ai then if setting.voc then
local n=1 ins(voicePlaying,voice[s][n or rnd(#voice[s])])
::L::if sfx[s][n]:isPlaying()then if #voicePlaying==1 then
n=n+1 voicePlaying[1]:play()
if not sfx[s][n]then end
sfx[s][n]=sfx[s][n-1]:clone()
sfx[s][n]:seek(0)
goto quit
end
goto L
end::quit::
sfx[s][n]:setVolume(v or 1)
sfx[s][n]:play()
end end
end end
function BGM(s) function BGM(s)
if setting.bgm and bgmPlaying~=s then if setting.bgm and bgmPlaying~=s then
if bgmPlaying then newTask(Event_task.bgmFadeOut,nil,bgmPlaying)end if bgmPlaying then newTask(Event_task.bgmFadeOut,nil,bgmPlaying)end
for i=1,#Task do for i=#Task,1,-1 do
if Task[i].code==Event_task.bgmFadeIn then local T=Task[i]
Task[i].code=Event_task.bgmFadeOut if T.code==Event_task.bgmFadeIn then
T.code=Event_task.bgmFadeOut
elseif T.code==Event_task.bgmFadeOut and T.data==s then
rem(Task,i)
end end
end end
if s then if s then
@@ -171,38 +194,41 @@ function gotoScene(s,style)
} }
Buttons.sel=nil Buttons.sel=nil
if style~="none"then if style~="none"then
sysSFX("swipe") SFX("swipe")
end end
end end
end end
function updateStat()
for k,v in next,players[1].stat do
stat[k]=stat[k]+v
end
end
local prevMenu={ local prevMenu={
load=love.event.quit, load=love.event.quit,
intro="quit", intro="quit",
main="intro", main="intro",
music="main",
mode="main", mode="main",
custom="mode", custom="mode",
draw=function() draw=function()
kb.setKeyRepeat(false) kb.setKeyRepeat(false)
gotoScene("custom") gotoScene("custom")
end, end,
ready="mode",
play=function() play=function()
updateStat()
clearTask("play") clearTask("play")
gotoScene(curMode.id~="custom"and"mode"or"custom","deck") gotoScene(curMode.id~="custom"and"mode"or"custom","deck")
end, end,
pause=function() pause=nil,
clearTask("play")
gotoScene(curMode.id~="custom"and"mode"or"custom","deck")
end,
help="main",
stat="main",
setting=function() setting=function()
saveSetting() saveSetting()
gotoScene("main") gotoScene("main")
end, end,
setting2="setting", setting2="setting",
setting3="setting", setting3="setting",
} help="main",
stat="main",
}prevMenu.pause=prevMenu.play
function back() function back()
local t=prevMenu[scene] local t=prevMenu[scene]
if type(t)=="string"then if type(t)=="string"then
@@ -212,7 +238,11 @@ function back()
end end
end end
function pauseGame() function pauseGame()
if bgmPlaying then bgm[bgmPlaying]:pause()end pauseTimer=0--Pause timer for animation
if not gamefinished then
pauseCount=pauseCount+1
if bgmPlaying then bgm[bgmPlaying]:pause()end
end
for i=1,#players.alive do for i=1,#players.alive do
local l=players.alive[i].keyPressing local l=players.alive[i].keyPressing
for j=1,#l do for j=1,#l do
@@ -228,35 +258,12 @@ function resumeGame()
gotoScene("play","fade") gotoScene("play","fade")
end end
local dataOpt={ local dataOpt={
"run", "run","game","time",
"game", "key","rotate","hold","piece","row",
"gametime", "atk","send","recv","pend",
"piece", "clear_1","clear_2","clear_3","clear_4",
"row", "spin_0","spin_1","spin_2","spin_3",
"atk", "b2b","b3b","pc",
"key",
"rotate",
"hold",
"spin",
}
local saveOpt={
"ghost","center",
"grid","swap",
"fxs","bg",
"das","arr",
"sddas","sdarr",
"lang",
"sfx","bgm",
"vib",
"fullscreen",
"bgblock",
"virtualkeyAlpha",
"virtualkeyIcon",
"virtualkeySwitch",
"frameMul",
} }
function loadData() function loadData()
userData:open("r") userData:open("r")
@@ -268,10 +275,15 @@ function loadData()
if find(i,"=")then if find(i,"=")then
local t=sub(i,1,find(i,"=")-1) local t=sub(i,1,find(i,"=")-1)
local v=sub(i,find(i,"=")+1) local v=sub(i,find(i,"=")+1)
if t=="run"or t=="game"or t=="gametime"or t=="piece"or t=="row"or t=="atk"or t=="key"or t=="rotate"or t=="hold"or t=="spin"then if t=="gametime"then t="time"end
for i=1,#dataOpt do
if t==dataOpt[i]then goto L end
end
goto E
::L::
v=toN(v)if not v or v<0 then v=0 end v=toN(v)if not v or v<0 then v=0 end
stat[t]=v stat[t]=v
end ::E::
end end
end end
end end
@@ -280,7 +292,7 @@ function saveData()
for i=1,#dataOpt do for i=1,#dataOpt do
ins(t,dataOpt[i].."="..toS(stat[dataOpt[i]])) ins(t,dataOpt[i].."="..toS(stat[dataOpt[i]]))
end end
t=table.concat(t,"\r\n") t=concat(t,"\r\n")
--t=love.math.compress(t,"zlib"):getString() --t=love.math.compress(t,"zlib"):getString()
userData:open("w") userData:open("w")
userData:write(t) userData:write(t)
@@ -296,10 +308,10 @@ function loadSetting()
if find(i,"=")then if find(i,"=")then
local t=sub(i,1,find(i,"=")-1) local t=sub(i,1,find(i,"=")-1)
local v=sub(i,find(i,"=")+1) local v=sub(i,find(i,"=")+1)
if t=="sfx"or t=="bgm"or t=="bgblock"then if t=="sfx"or t=="bgm"or t=="bgblock"or t=="voc"then
setting[t]=v=="true" setting[t]=v=="true"
elseif t=="vib"then elseif t=="vib"then
setting.vib=toN(v:match("[01234]"))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)
@@ -311,21 +323,6 @@ function loadSetting()
setting.keyMap[i][j]=v1[j] setting.keyMap[i][j]=v1[j]
end end
end end
elseif t=="keylib"then
v=splitS(v,"/")
for i=1,4 do
local v1=splitS(v[i],",")
for j=1,#v1 do
setting.keyLib[i][j]=toN(v1[j])
end
for j=1,#setting.keyLib[i]do
local v=setting.keyLib[i][j]
if int(v)~=v or v>=9 or v<=0 then
setting.keyLib[i]={i}
break
end
end
end
elseif t=="virtualkey"then elseif t=="virtualkey"then
v=splitS(v,"/") v=splitS(v,"/")
for i=1,10 do for i=1,10 do
@@ -348,36 +345,51 @@ function loadSetting()
elseif t=="ghost"or t=="center"or t=="grid"or t=="swap"or t=="fxs"or t=="bg"then elseif t=="ghost"or t=="center"or t=="grid"or t=="swap"or t=="fxs"or t=="bg"then
setting[t]=v=="true" setting[t]=v=="true"
elseif t=="lang"then elseif t=="lang"then
setting[t]=toN(v:match("[12]"))or 1 setting[t]=toN(v:match("[123]"))or 1
elseif t=="skin"then
setting[t]=toN(v:match("[123456]"))or 1
end end
end end
end end
end end
local saveOpt={
"ghost","center",
"grid","swap",
"fxs","bg",
"das","arr",
"sddas","sdarr",
"lang",
"sfx","bgm",
"vib","voc",
"fullscreen",
"bgblock",
"skin",
"virtualkeyAlpha",
"virtualkeyIcon",
"virtualkeySwitch",
"frameMul",
}
function saveSetting() function saveSetting()
local vk={} local vk={}
for i=1,10 do for i=1,10 do
for j=1,4 do for j=1,4 do
virtualkey[i][j]=int(virtualkey[i][j]+.5) virtualkey[i][j]=int(virtualkey[i][j]+.5)
end--Saving a integer is better? end--Saving a integer is better?
vk[i]=table.concat(virtualkey[i],",") vk[i]=concat(virtualkey[i],",")
end--pre-pack virtualkey setting end--pre-pack virtualkey setting
local map={} local map={}
for i=1,16 do for i=1,16 do
map[i]=table.concat(setting.keyMap[i],",") map[i]=concat(setting.keyMap[i],",")
end
local lib={}
for i=1,4 do
lib[i]=table.concat(setting.keyLib[i],",")
end end
local t={ local t={
"keymap="..toS(table.concat(map,"/")), "keymap="..toS(concat(map,"/")),
"keylib="..toS(table.concat(lib,"/")), "virtualkey="..toS(concat(vk,"/")),
"virtualkey="..toS(table.concat(vk,"/")),
} }
for i=1,#saveOpt do for i=1,#saveOpt do
ins(t,saveOpt[i].."="..toS(setting[saveOpt[i]])) ins(t,saveOpt[i].."="..toS(setting[saveOpt[i]]))
end end
t=table.concat(t,"\r\n") t=concat(t,"\r\n")
--t=love.math.compress(t,"zlib"):getString() --t=love.math.compress(t,"zlib"):getString()
userSetting:open("w") userSetting:open("w")
userSetting:write(t) userSetting:write(t)