Compare commits
4 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
f82e979f9c | ||
|
|
c9a3e3ce1b | ||
|
|
72dcb84662 | ||
|
|
4af2126254 |
BIN
BGM/end.ogg
Normal file
BIN
BGM/end.ogg
Normal file
Binary file not shown.
BIN
BGM/newera.ogg
BIN
BGM/newera.ogg
Binary file not shown.
BIN
SFX/collect.ogg
Normal file
BIN
SFX/collect.ogg
Normal file
Binary file not shown.
BIN
SFX/drop.ogg
BIN
SFX/drop.ogg
Binary file not shown.
BIN
SFX/lock.ogg
Normal file
BIN
SFX/lock.ogg
Normal file
Binary file not shown.
BIN
SFX/spin.ogg
BIN
SFX/spin.ogg
Binary file not shown.
33
ai.lua
33
ai.lua
@@ -51,7 +51,7 @@ function ifoverlapAI(f,bk,x,y)
|
|||||||
if y<1 then return true end
|
if y<1 then return true end
|
||||||
if y>#f then return end
|
if y>#f then return end
|
||||||
for i=1,#bk do for j=1,#bk[1]do
|
for i=1,#bk do for j=1,#bk[1]do
|
||||||
if f[y+i-1]and bk[i][j]>0 and f[y+i-1][x+j-1]>0 then return true end
|
if f[y+i-1]and bk[i][j]and f[y+i-1][x+j-1]>0 then return true end
|
||||||
end end
|
end end
|
||||||
end
|
end
|
||||||
function resetField(f0,f,start)
|
function resetField(f0,f,start)
|
||||||
@@ -60,7 +60,7 @@ function resetField(f0,f,start)
|
|||||||
goto L
|
goto L
|
||||||
end
|
end
|
||||||
for i=start,#f0 do
|
for i=start,#f0 do
|
||||||
f[i]=getNewRow()
|
f[i]=getNewRow(0)
|
||||||
for j=1,10 do
|
for j=1,10 do
|
||||||
f[i][j]=f0[i][j]
|
f[i][j]=f0[i][j]
|
||||||
end
|
end
|
||||||
@@ -69,19 +69,17 @@ end
|
|||||||
function getScore(field,bn,cb,cx,cy)
|
function getScore(field,bn,cb,cx,cy)
|
||||||
local score=0
|
local score=0
|
||||||
local highest=0
|
local highest=0
|
||||||
local height=getNewRow()
|
local height=getNewRow(0)
|
||||||
local clear=0
|
local clear=0
|
||||||
local hole=0
|
local hole=0
|
||||||
|
|
||||||
for i=cy+#cb-1,cy,-1 do
|
for i=cy+#cb-1,cy,-1 do
|
||||||
local f=true
|
|
||||||
for j=1,10 do
|
for j=1,10 do
|
||||||
if field[i][j]==0 then f=false;break end
|
if field[i][j]==0 then goto L end
|
||||||
end
|
|
||||||
if f then
|
|
||||||
removeRow(field,i)
|
|
||||||
clear=clear+1
|
|
||||||
end
|
end
|
||||||
|
removeRow(field,i)
|
||||||
|
clear=clear+1
|
||||||
|
::L::
|
||||||
end
|
end
|
||||||
if #field==0 then return 9e99 end--PC best
|
if #field==0 then return 9e99 end--PC best
|
||||||
for x=1,10 do
|
for x=1,10 do
|
||||||
@@ -119,21 +117,21 @@ function getScore(field,bn,cb,cx,cy)
|
|||||||
+clearScore[clear]*(8+#field)
|
+clearScore[clear]*(8+#field)
|
||||||
-hole*50
|
-hole*50
|
||||||
if #field>6 then score=score-highest*5 end
|
if #field>6 then score=score-highest*5 end
|
||||||
if mh1>3 then score=score-50-mh1*40 end
|
if mh1>3 then score=score-40-mh1*30 end
|
||||||
return score
|
return score
|
||||||
end
|
end
|
||||||
function AI_getControls(ctrl)
|
function AI_getControls(ctrl)
|
||||||
local Tfield={}--test field
|
local Tfield={}--test field
|
||||||
local field_org=P.field
|
local field_org=P.field
|
||||||
for i=1,#field_org do
|
for i=1,#field_org do
|
||||||
Tfield[i]=getNewRow()
|
Tfield[i]=getNewRow(0)
|
||||||
for j=1,10 do
|
for j=1,10 do
|
||||||
Tfield[i][j]=field_org[i][j]
|
Tfield[i][j]=field_org[i][j]
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
local best={x=1,dir=0,hold=false,score=-9e99}
|
local best={x=1,dir=0,hold=false,score=-9e99}
|
||||||
for ifhold=0,P.gameEnv.hold and 1 or 0 do
|
for ifhold=0,P.gameEnv.hold and 1 or 0 do
|
||||||
local bn=ifhold==0 and P.bid or P.hid>0 and P.hid or P.nxt[1]
|
local bn=ifhold==0 and P.cur.id or P.hold.id>0 and P.hold.id or P.next[1].id
|
||||||
for dir=0,dirCount[bn] do--each dir
|
for dir=0,dirCount[bn] do--each dir
|
||||||
local cb=blocks[bn][dir]
|
local cb=blocks[bn][dir]
|
||||||
for cx=1,11-#cb[1]do--each pos
|
for cx=1,11-#cb[1]do--each pos
|
||||||
@@ -144,9 +142,9 @@ function AI_getControls(ctrl)
|
|||||||
end--move to bottom
|
end--move to bottom
|
||||||
for i=1,#cb do
|
for i=1,#cb do
|
||||||
local y=cy+i-1
|
local y=cy+i-1
|
||||||
if not Tfield[y]then Tfield[y]=getNewRow()end
|
if not Tfield[y]then Tfield[y]=getNewRow(0)end
|
||||||
for j=1,#cb[1]do
|
for j=1,#cb[1]do
|
||||||
if cb[i][j]~=0 then
|
if cb[i][j]then
|
||||||
Tfield[y][cx+j-1]=1
|
Tfield[y][cx+j-1]=1
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
@@ -173,11 +171,4 @@ function AI_getControls(ctrl)
|
|||||||
ins(ctrl,l[i])
|
ins(ctrl,l[i])
|
||||||
end
|
end
|
||||||
ins(ctrl,6)
|
ins(ctrl,6)
|
||||||
|
|
||||||
if rnd()<.1 then
|
|
||||||
if P.atkMode~=4 and P==mostDangerous then
|
|
||||||
ins(P.ai.controls,9)
|
|
||||||
--Smarter AI???
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
513
call&sys.lua
513
call&sys.lua
@@ -1,5 +1,108 @@
|
|||||||
|
local gc,tm=love.graphics,love.timer
|
||||||
|
local ms,kb,tc=love.mouse,love.keyboard,love.touch
|
||||||
|
local wd=love.window
|
||||||
|
local setFont=setFont
|
||||||
|
local Timer=tm.getTime
|
||||||
|
|
||||||
|
local scr=scr
|
||||||
|
local xOy=love.math.newTransform()
|
||||||
|
local focus=true
|
||||||
|
local mx,my,mouseShow=-20,-20,false
|
||||||
|
local touching=nil--1st touching ID
|
||||||
|
|
||||||
|
local sceneInit={
|
||||||
|
load=function()
|
||||||
|
curBG="none"
|
||||||
|
keeprun=true
|
||||||
|
loading=1--Loading mode
|
||||||
|
loadnum=1--Loading counter
|
||||||
|
loadprogress=0--Loading bar(0~1)
|
||||||
|
end,
|
||||||
|
intro=function()
|
||||||
|
curBG="none"
|
||||||
|
count=0
|
||||||
|
keeprun=true
|
||||||
|
end,
|
||||||
|
main=function()
|
||||||
|
curBG="none"
|
||||||
|
keeprun=true
|
||||||
|
collectgarbage()
|
||||||
|
end,
|
||||||
|
mode=function()
|
||||||
|
saveData()
|
||||||
|
modeSel=modeSel or 1
|
||||||
|
levelSel=levelSel or 3
|
||||||
|
curBG="none"
|
||||||
|
keeprun=true
|
||||||
|
end,
|
||||||
|
custom=function()
|
||||||
|
optSel=optSel or 1
|
||||||
|
curBG="matrix"
|
||||||
|
keeprun=true
|
||||||
|
end,
|
||||||
|
draw=function()
|
||||||
|
kb.setKeyRepeat(true)
|
||||||
|
clearSureTime=0
|
||||||
|
pen=1
|
||||||
|
sx,sy=1,1
|
||||||
|
curBG="none"
|
||||||
|
keeprun=true
|
||||||
|
end,
|
||||||
|
play=function()
|
||||||
|
keeprun=false
|
||||||
|
resetGameData()
|
||||||
|
sysSFX("ready")
|
||||||
|
end,
|
||||||
|
setting=function()
|
||||||
|
curBG="none"
|
||||||
|
keeprun=true
|
||||||
|
end,
|
||||||
|
setting2=function()
|
||||||
|
curBG="none"
|
||||||
|
keeprun=true
|
||||||
|
curBoard=1
|
||||||
|
keyboardSet=1
|
||||||
|
joystickSet=1
|
||||||
|
keyboardSetting=false
|
||||||
|
joystickSetting=false
|
||||||
|
end,--Control settings
|
||||||
|
setting3=function()
|
||||||
|
curBG="game1"
|
||||||
|
keeprun=true
|
||||||
|
defaultSel=1
|
||||||
|
sel=nil
|
||||||
|
snapLevel=1
|
||||||
|
end,--Touch setting
|
||||||
|
help=function()
|
||||||
|
curBG="none"
|
||||||
|
keeprun=true
|
||||||
|
end,
|
||||||
|
stat=function()
|
||||||
|
curBG="none"
|
||||||
|
keeprun=true
|
||||||
|
end,
|
||||||
|
quit=function()
|
||||||
|
love.event.quit()
|
||||||
|
end,
|
||||||
|
}
|
||||||
|
|
||||||
|
BGblockList={}for i=1,16 do BGblockList[i]={v=0}end
|
||||||
|
local BGblock={tm=150,next=7,ct=0}
|
||||||
|
local function getNewBlock()
|
||||||
|
BGblock.ct=BGblock.ct+1
|
||||||
|
if BGblock.ct==17 then BGblock.ct=1 end
|
||||||
|
local t=BGblockList[BGblock.ct]
|
||||||
|
t.bn,t.size=BGblock.next,2+3*rnd()
|
||||||
|
t.b=blocks[t.bn][rnd(0,3)]
|
||||||
|
t.x=rnd(-#t.b[1]*t.size*30+100,1180)
|
||||||
|
t.y=-#t.b*30*t.size
|
||||||
|
t.v=t.size*(1+rnd())
|
||||||
|
BGblock.next=BGblock.next%7+1
|
||||||
|
return t
|
||||||
|
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 x,y=xOy:inverseTransformPoint(x,y)
|
|
||||||
local d2,nearest,distance
|
local d2,nearest,distance
|
||||||
for K=1,#virtualkey do
|
for K=1,#virtualkey do
|
||||||
local b=virtualkey[K]
|
local b=virtualkey[K]
|
||||||
@@ -14,37 +117,32 @@ function onVirtualkey(x,y)
|
|||||||
end
|
end
|
||||||
function buttonControl_key(i)
|
function buttonControl_key(i)
|
||||||
if i=="up"or i=="down"or i=="left"or i=="right"then
|
if i=="up"or i=="down"or i=="left"or i=="right"then
|
||||||
if not Buttons.sel then
|
if Buttons.sel then
|
||||||
if Buttons[scene][1]then
|
Buttons.sel=Buttons[scene][Buttons.sel[i]]or Buttons.sel
|
||||||
Buttons.sel=1
|
|
||||||
end
|
|
||||||
else
|
else
|
||||||
Buttons.sel=Buttons[scene][Buttons.sel][i]or Buttons.sel
|
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
|
||||||
local B=Buttons[scene][Buttons.sel]
|
Buttons.sel.alpha=1
|
||||||
B.code()
|
Buttons.sel.code()
|
||||||
B.alpha=1
|
|
||||||
sysSFX("button")
|
sysSFX("button")
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
function buttonControl_gamepad(i)
|
function buttonControl_gamepad(i)
|
||||||
if i=="dpup"or i=="dpdown"or i=="dpleft"or i=="dpright"then
|
if i=="dpup"or i=="dpdown"or i=="dpleft"or i=="dpright"then
|
||||||
if not Buttons.sel then
|
if Buttons.sel then
|
||||||
if Buttons[scene][1]then
|
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=1
|
|
||||||
end
|
|
||||||
mouseShow=false
|
|
||||||
else
|
else
|
||||||
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=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
|
||||||
local B=Buttons[scene][Buttons.sel]
|
Buttons.sel.alpha=1
|
||||||
B.code()
|
Buttons.sel.code()
|
||||||
B.alpha=1
|
|
||||||
sysSFX("button")
|
sysSFX("button")
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
@@ -59,6 +157,122 @@ function mouseDown.intro(x,y,k)
|
|||||||
gotoScene("main")
|
gotoScene("main")
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
function mouseDown.draw(x,y,k)
|
||||||
|
mouseMove.draw(x,y)
|
||||||
|
return sx and sy
|
||||||
|
end
|
||||||
|
function mouseDown.setting3(x,y,k)
|
||||||
|
if k==2 then back()end
|
||||||
|
x,y=xOy:inverseTransformPoint(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
|
||||||
|
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)
|
||||||
|
x,y=xOy:inverseTransformPoint(x,y)
|
||||||
|
dx,dy=dx*scr.k,dy*scr.k
|
||||||
|
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)
|
||||||
|
gotoScene("main")
|
||||||
|
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=dx*scr.k,dy*scr.k
|
||||||
|
if sel then
|
||||||
|
local b=virtualkey[sel]
|
||||||
|
b[1],b[2]=b[1]+dx,b[2]+dy
|
||||||
|
end
|
||||||
|
end
|
||||||
|
function touchMove.play(id,x,y)
|
||||||
|
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={}
|
keyDown={}
|
||||||
function keyDown.intro(key)
|
function keyDown.intro(key)
|
||||||
if key=="escape"then
|
if key=="escape"then
|
||||||
@@ -105,12 +319,40 @@ function keyDown.custom(key)
|
|||||||
optSel=optSel%#customID+1
|
optSel=optSel%#customID+1
|
||||||
elseif key=="up"then
|
elseif key=="up"then
|
||||||
optSel=(optSel-2)%#customID+1
|
optSel=(optSel-2)%#customID+1
|
||||||
|
elseif key=="d"then
|
||||||
|
gotoScene("draw")
|
||||||
elseif key=="return"then
|
elseif key=="return"then
|
||||||
loadGame(0,1)
|
loadGame(0,1)
|
||||||
elseif key=="escape"then
|
elseif key=="escape"then
|
||||||
back()
|
back()
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
function keyDown.draw(key)
|
||||||
|
if key=="delete"then
|
||||||
|
Buttons.draw.clear.code()
|
||||||
|
elseif key=="up"or key=="down"or key=="left"or key=="right"then
|
||||||
|
if not sx then sx=1 end
|
||||||
|
if not sy then sy=1 end
|
||||||
|
if key=="up"and sy<20 then sy=sy+1
|
||||||
|
elseif key=="down"and sy>1 then sy=sy-1
|
||||||
|
elseif key=="left"and sx>1 then sx=sx-1
|
||||||
|
elseif key=="right"and sx<10 then sx=sx+1
|
||||||
|
end
|
||||||
|
if kb.isDown("space")then
|
||||||
|
preField[sy][sx]=pen
|
||||||
|
end
|
||||||
|
elseif key=="space"then
|
||||||
|
if sx and sy then
|
||||||
|
preField[sy][sx]=pen
|
||||||
|
end
|
||||||
|
elseif key=="backspace"then
|
||||||
|
pen=0
|
||||||
|
elseif key=="escape"then
|
||||||
|
back()
|
||||||
|
else
|
||||||
|
pen=find("123qwea#sdzxc",key)or pen
|
||||||
|
end
|
||||||
|
end
|
||||||
function keyDown.setting2(key)
|
function keyDown.setting2(key)
|
||||||
if key=="escape"then
|
if key=="escape"then
|
||||||
if keyboardSetting then
|
if keyboardSetting then
|
||||||
@@ -141,9 +383,9 @@ function keyDown.setting2(key)
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
function keyDown.play(key)
|
function keyDown.play(key)
|
||||||
if key=="escape"then back()return end
|
if key=="escape"then back()end
|
||||||
local m=setting.keyMap
|
local m=setting.keyMap
|
||||||
for p=1,4 do
|
for p=1,human do
|
||||||
local lib=setting.keyLib[p]
|
local lib=setting.keyLib[p]
|
||||||
for s=1,#lib do
|
for s=1,#lib do
|
||||||
for k=1,12 do
|
for k=1,12 do
|
||||||
@@ -158,7 +400,7 @@ end
|
|||||||
keyUp={}
|
keyUp={}
|
||||||
function keyUp.play(key)
|
function keyUp.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]
|
local lib=setting.keyLib[p]
|
||||||
for s=1,#lib do
|
for s=1,#lib do
|
||||||
for k=1,12 do
|
for k=1,12 do
|
||||||
@@ -248,106 +490,82 @@ function gamepadUp.play(key)
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
wheelmoved={}
|
|
||||||
function wheelmoved.mode(x,y)
|
|
||||||
modeSel=min(max(modeSel-sgn(y),1),#modeID)
|
|
||||||
levelSel=ceil(#modeLevel[modeID[modeSel]]*.5)
|
|
||||||
end
|
|
||||||
|
|
||||||
|
|
||||||
|
function love.mousepressed(x,y,k,t,num)
|
||||||
function love.mousemoved(x,y,dx,dy,t)
|
if t then return end
|
||||||
if not t then
|
mouseShow=true
|
||||||
mouseShow=true
|
mx,my=xOy:inverseTransformPoint(x,y)
|
||||||
mx,my=xOy:inverseTransformPoint(x,y)
|
if mouseDown[scene]then
|
||||||
Buttons.sel=nil
|
mouseDown[scene](mx,my,k)
|
||||||
for i=1,#Buttons[scene]do
|
elseif k==2 then
|
||||||
local B=Buttons[scene][i]
|
back()
|
||||||
if not(B.hide and B.hide())then
|
end
|
||||||
if abs(mx-B.x)<B.w*.5 and abs(my-B.y)<B.h*.5 then
|
if k==1 then
|
||||||
Buttons.sel=i
|
if not sceneSwaping and Buttons.sel then
|
||||||
return
|
local B=Buttons.sel
|
||||||
end
|
B.code()
|
||||||
end
|
B.alpha=1
|
||||||
|
Buttons.sel=nil
|
||||||
|
love.mousemoved(x,y,0,0)
|
||||||
|
sysSFX("button")
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
function love.mousepressed(x,y,k,t,num)
|
function love.mousemoved(x,y,dx,dy,t)
|
||||||
if not t then
|
if t then return end
|
||||||
mouseShow=true
|
mouseShow=true
|
||||||
mx,my=xOy:inverseTransformPoint(x,y)
|
mx,my=xOy:inverseTransformPoint(x,y)
|
||||||
if mouseDown[scene]then
|
Buttons.sel=nil
|
||||||
mouseDown[scene](mx,my,k)
|
if mouseMove[scene]then
|
||||||
else
|
mouseMove[scene](mx,my,dx,dy)
|
||||||
if k==1 then
|
end
|
||||||
if not sceneSwaping and Buttons.sel then
|
for N,B in next,Buttons[scene]do
|
||||||
local B=Buttons[scene][Buttons.sel]
|
if not(B.hide and B.hide())then
|
||||||
B.code()
|
if abs(mx-B.x)<B.w*.5 and abs(my-B.y)<B.h*.5 then
|
||||||
B.alpha=1
|
Buttons.sel=B
|
||||||
Buttons.sel=nil
|
return
|
||||||
love.mousemoved(x,y)
|
|
||||||
sysSFX("button")
|
|
||||||
end
|
|
||||||
elseif k==2 then
|
|
||||||
back()
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
function love.mousereleased(x,y,k,t,num)
|
function love.mousereleased(x,y,k,t,num)
|
||||||
|
if t then return end
|
||||||
|
mx,my=xOy:inverseTransformPoint(x,y)
|
||||||
|
if mouseUp[scene]then
|
||||||
|
mouseUp[scene](mx,my,k)
|
||||||
|
end
|
||||||
end
|
end
|
||||||
function love.wheelmoved(x,y)
|
function love.wheelmoved(x,y)
|
||||||
if wheelmoved[scene]then wheelmoved[scene](x,y)end
|
if wheelmoved[scene]then wheelmoved[scene](x,y)end
|
||||||
end
|
end
|
||||||
|
|
||||||
function love.touchpressed(id,x,y)
|
function love.touchpressed(id,x,y)
|
||||||
if not touching then
|
if not touching then
|
||||||
touching=id
|
touching=id
|
||||||
love.mousemoved(x,y)
|
love.mousemoved(x,y)
|
||||||
mouseShow=false
|
mouseShow=false
|
||||||
end
|
end
|
||||||
if scene=="play"then
|
if touchDown[scene]then
|
||||||
if setting.virtualkeySwitch then
|
touchDown[scene](id,xOy:inverseTransformPoint(x,y))
|
||||||
local t=onVirtualkey(x,y)
|
|
||||||
if t then
|
|
||||||
pressKey(t,players[1])
|
|
||||||
end
|
|
||||||
end
|
|
||||||
elseif scene=="setting3"then
|
|
||||||
x,y=xOy:inverseTransformPoint(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
|
|
||||||
elseif scene=="intro"then
|
|
||||||
gotoScene("main")
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
function love.touchreleased(id,x,y)
|
function love.touchreleased(id,x,y)
|
||||||
if id==touching then
|
if id==touching then
|
||||||
touching=nil
|
touching=nil
|
||||||
if Buttons.sel then
|
if Buttons.sel then
|
||||||
local B=Buttons[scene][Buttons.sel]
|
local B=Buttons.sel
|
||||||
B.code()
|
B.code()
|
||||||
B.alpha=1
|
B.alpha=1
|
||||||
Buttons.sel=nil
|
Buttons.sel=nil
|
||||||
|
sysSFX("button")
|
||||||
end
|
end
|
||||||
Buttons.sel=nil
|
Buttons.sel=nil
|
||||||
mouseShow=false
|
mouseShow=false
|
||||||
end
|
end
|
||||||
if scene=="play"and setting.virtualkeySwitch then
|
if touchUp[scene]then
|
||||||
local t=onVirtualkey(x,y)
|
x,y=
|
||||||
if t then
|
touchUp[scene](id,xOy:inverseTransformPoint(x,y))
|
||||||
releaseKey(t,players[1])
|
|
||||||
end
|
|
||||||
elseif scene=="setting3"and 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
|
||||||
end
|
end
|
||||||
function love.touchmoved(id,x,y,dx,dy)
|
function love.touchmoved(id,x,y,dx,dy)
|
||||||
@@ -356,41 +574,26 @@ function love.touchmoved(id,x,y,dx,dy)
|
|||||||
if not Buttons.sel then
|
if not Buttons.sel then
|
||||||
touching=nil
|
touching=nil
|
||||||
end
|
end
|
||||||
if scene=="play"and setting.virtualkeySwitch then
|
if touchMove[scene]then
|
||||||
local l=tc.getTouches()
|
touchMove[scene](id,xOy:inverseTransformPoint(x,y))
|
||||||
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 return end
|
|
||||||
end
|
|
||||||
if P.keyPressing[n]then
|
|
||||||
releaseKey(n,players[1])
|
|
||||||
end
|
|
||||||
end
|
|
||||||
elseif scene=="setting3"then
|
|
||||||
x,y=xOy:inverseTransformPoint(x,y)
|
|
||||||
dx,dy=dx*screenK,dy*screenK
|
|
||||||
if sel then
|
|
||||||
local b=virtualkey[sel]
|
|
||||||
b[1],b[2]=b[1]+dx,b[2]+dy
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
function love.keypressed(i)
|
function love.keypressed(i)
|
||||||
if i=="f12"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()
|
Event_gameover.lose()
|
||||||
|
--Test code here
|
||||||
elseif i=="q"then
|
elseif i=="q"then
|
||||||
for i=1,#Buttons[scene]do
|
for k,B in next,Buttons[scene]do
|
||||||
local B=Buttons[scene][i]
|
|
||||||
print(format("x=%d,y=%d,w=%d,h=%d",B.x,B.y,B.w,B.h))
|
print(format("x=%d,y=%d,w=%d,h=%d",B.x,B.y,B.w,B.h))
|
||||||
end
|
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[scene][Buttons.sel]
|
local B=Buttons.sel
|
||||||
if i=="left"then B.x=B.x-10
|
if i=="left"then B.x=B.x-10
|
||||||
elseif i=="right"then B.x=B.x+10
|
elseif i=="right"then B.x=B.x+10
|
||||||
elseif i=="up"then B.y=B.y-10
|
elseif i=="up"then B.y=B.y-10
|
||||||
@@ -435,8 +638,34 @@ end
|
|||||||
function love.joystickhat(js,hat,dir)
|
function love.joystickhat(js,hat,dir)
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
||||||
|
function love.sendData(data)
|
||||||
|
return
|
||||||
|
end
|
||||||
|
function love.receiveData(id,data)
|
||||||
|
return
|
||||||
|
end
|
||||||
]]
|
]]
|
||||||
|
|
||||||
|
function love.lowmemory()
|
||||||
|
collectgarbage()
|
||||||
|
end
|
||||||
|
function love.resize(w,h)
|
||||||
|
if w>=h then scr.w,scr.h=w,h
|
||||||
|
else scr.w,scr.h=h,w
|
||||||
|
end
|
||||||
|
scr.r=h/w
|
||||||
|
if h/w>=.5625 then
|
||||||
|
scr.k=w/1280
|
||||||
|
scr.x,scr.y=0,(h-w*9/16)*.5
|
||||||
|
else
|
||||||
|
scr.k=h/720
|
||||||
|
scr.x,scr.y=(w-h*16/9)*.5,0
|
||||||
|
end
|
||||||
|
xOy=xOy:setTransformation(w*.5,h*.5,nil,scr.k,nil,640,360)
|
||||||
|
gc.replaceTransform(xOy)
|
||||||
|
collectgarbage()
|
||||||
|
end
|
||||||
function love.update(dt)
|
function love.update(dt)
|
||||||
--[[
|
--[[
|
||||||
if players then
|
if players then
|
||||||
@@ -450,18 +679,18 @@ function love.update(dt)
|
|||||||
if BGblock[i].y>720 then rem(BGblock,i)end
|
if BGblock[i].y>720 then rem(BGblock,i)end
|
||||||
end
|
end
|
||||||
if setting.bgblock then
|
if setting.bgblock then
|
||||||
BGblock.ct=BGblock.ct-1
|
BGblock.tm=BGblock.tm-1
|
||||||
if BGblock.ct==0 then
|
if BGblock.tm==0 then
|
||||||
ins(BGblock,getNewBlock())
|
ins(BGblock,getNewBlock())
|
||||||
BGblock.ct=rnd(20,30)
|
BGblock.tm=rnd(20,30)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
if sceneSwaping then
|
if sceneSwaping then
|
||||||
sceneSwaping.time=sceneSwaping.time-1
|
sceneSwaping.time=sceneSwaping.time-1
|
||||||
if sceneSwaping.time==sceneSwaping.mid then
|
if sceneSwaping.time==sceneSwaping.mid then
|
||||||
for i=1,#Buttons[scene]do
|
for k,B in next,Buttons[scene]do
|
||||||
Buttons[scene][i].alpha=0
|
B.alpha=0
|
||||||
end--Reset buttons' state
|
end--Reset buttons' alpha
|
||||||
scene=sceneSwaping.tar
|
scene=sceneSwaping.tar
|
||||||
BGM("blank")
|
BGM("blank")
|
||||||
sceneInit[scene]()
|
sceneInit[scene]()
|
||||||
@@ -469,26 +698,24 @@ function love.update(dt)
|
|||||||
elseif sceneSwaping.time==0 then
|
elseif sceneSwaping.time==0 then
|
||||||
sceneSwaping=nil
|
sceneSwaping=nil
|
||||||
end
|
end
|
||||||
elseif Tmr[scene]then
|
end
|
||||||
|
if Tmr[scene]then
|
||||||
Tmr[scene](dt)
|
Tmr[scene](dt)
|
||||||
end
|
end
|
||||||
|
for i=#Task,1,-1 do
|
||||||
|
Task[i]:update()
|
||||||
|
end
|
||||||
updateButton()
|
updateButton()
|
||||||
end
|
end
|
||||||
function love.sendData(data)
|
|
||||||
return
|
|
||||||
end
|
|
||||||
function love.receiveData(id,data)
|
|
||||||
return
|
|
||||||
end
|
|
||||||
function love.draw()
|
function love.draw()
|
||||||
gc.clear()
|
gc.discard()
|
||||||
Pnt.BG[curBG]()
|
Pnt.BG[curBG]()
|
||||||
gc.setColor(1,1,1,.3)
|
gc.setColor(1,1,1,.22)
|
||||||
for n=1,#BGblock do
|
for n=1,#BGblock do
|
||||||
local b,img=BGblock[n].b,blockSkin[BGblock[n].bn]
|
local b,img=BGblock[n].b,blockSkin[BGblock[n].bn]
|
||||||
local size=BGblock[n].size
|
local size=BGblock[n].size
|
||||||
for i=1,#b do for j=1,#b[1]do
|
for i=1,#b do for j=1,#b[1]do
|
||||||
if b[i][j]>0 then
|
if b[i][j]then
|
||||||
gc.draw(img,BGblock[n].x+(j-1)*30*size,BGblock[n].y+(i-1)*30*size,nil,size)
|
gc.draw(img,BGblock[n].x+(j-1)*30*size,BGblock[n].y+(i-1)*30*size,nil,size)
|
||||||
end
|
end
|
||||||
end end
|
end end
|
||||||
@@ -499,7 +726,7 @@ function love.draw()
|
|||||||
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][0][2]-.5,#blocks[r][0]-scs[r][0][1]+.5)
|
gc.draw(mouseBlock[r],mx,my,Timer()%pi*4,20,20,scs[r][2]-.5,#blocks[r][0]-scs[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.setColor(1,1,1)
|
||||||
@@ -507,28 +734,24 @@ function love.draw()
|
|||||||
end
|
end
|
||||||
if sceneSwaping then sceneSwaping.draw()end
|
if sceneSwaping then sceneSwaping.draw()end
|
||||||
|
|
||||||
if wh/ww>.5625 then
|
if scr.r==.5625 then goto L end
|
||||||
gc.setColor(0,0,0)
|
if scr.r>.5625 then
|
||||||
gc.rectangle("fill",0,0,1280,ww*9/16-wh)
|
gc.setColor(0,0,0)
|
||||||
gc.rectangle("fill",0,720,1280,wh-ww*9/16)
|
gc.rectangle("fill",0,0,1280,scr.w*9/16-scr.h)
|
||||||
elseif wh/ww<.5625 then
|
gc.rectangle("fill",0,720,1280,scr.h-scr.w*9/16)
|
||||||
gc.setColor(0,0,0)
|
else
|
||||||
gc.rectangle("fill",0,0,wh*16/9-ww,720)
|
gc.setColor(0,0,0)
|
||||||
gc.rectangle("fill",1280,0,ww-wh*16/9,720)
|
gc.rectangle("fill",0,0,scr.h*16/9-scr.w,720)
|
||||||
end
|
gc.rectangle("fill",1280,0,scr.w-scr.h*16/9,720)
|
||||||
|
end
|
||||||
|
::L::
|
||||||
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(gcinfo(),5,680)
|
||||||
gc.print(freeRow and #freeRow or 0,5,660)
|
gc.print(#freeRow or 0,5,660)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
function love.resize(w,h)
|
|
||||||
ww,wh=w,h
|
|
||||||
screenK=h/w>=.5625 and w/1280 or h/720
|
|
||||||
xOy=xOy:setTransformation(w*.5,h*.5,nil,screenK,nil,640,360)
|
|
||||||
gc.replaceTransform(xOy)
|
|
||||||
end
|
|
||||||
function love.run()
|
function love.run()
|
||||||
local frameT=Timer()
|
local frameT=Timer()
|
||||||
local readyDrawFrame=0
|
local readyDrawFrame=0
|
||||||
|
|||||||
44
class.lua
Normal file
44
class.lua
Normal file
@@ -0,0 +1,44 @@
|
|||||||
|
Task={}
|
||||||
|
metatable_task={__index=Task}
|
||||||
|
function newTask(code,P,data)
|
||||||
|
local obj={
|
||||||
|
code=code,
|
||||||
|
P=P,
|
||||||
|
data=data,
|
||||||
|
}
|
||||||
|
setmetatable(obj,metatable_task)
|
||||||
|
ins(Task,obj)
|
||||||
|
end
|
||||||
|
function clearTask(opt)
|
||||||
|
if opt=="all"then
|
||||||
|
while Task[1]do
|
||||||
|
rem(Task,i)
|
||||||
|
end
|
||||||
|
elseif opt=="play"then
|
||||||
|
for i=#Task,1,-1 do
|
||||||
|
if Task[i].P then
|
||||||
|
rem(Task,i)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
else--Player table
|
||||||
|
for i=#Task,1,-1 do
|
||||||
|
if Task[i].P==P then
|
||||||
|
rem(Task,i)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
function Task:update()
|
||||||
|
if self.code(self.P,self.data)then
|
||||||
|
self:destroy()
|
||||||
|
return nil
|
||||||
|
end
|
||||||
|
end
|
||||||
|
function Task:destroy()
|
||||||
|
for i=#Task,1,-1 do
|
||||||
|
if Task[i]==self then
|
||||||
|
rem(Task,i)
|
||||||
|
return nil
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
4
conf.lua
4
conf.lua
@@ -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.10"
|
W.title="Techmino V0.7.14"
|
||||||
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
|
||||||
@@ -17,7 +17,7 @@ function love.conf(t)
|
|||||||
W.resizable=true
|
W.resizable=true
|
||||||
W.fullscreentype="desktop"--Choose between "desktop" fullscreen or "exclusive" fullscreen mode (string)
|
W.fullscreentype="desktop"--Choose between "desktop" fullscreen or "exclusive" fullscreen mode (string)
|
||||||
W.fullscreen=X
|
W.fullscreen=X
|
||||||
W.vsync=X--0 to set ∞fps
|
W.vsync=0--0→∞fps
|
||||||
W.msaa=X--The number of samples to use with multi-sampled antialiasing (number)
|
W.msaa=X--The number of samples to use with multi-sampled antialiasing (number)
|
||||||
W.depth=X--Bits per sample in the depth buffer
|
W.depth=X--Bits per sample in the depth buffer
|
||||||
W.stencil=1--The number of bits per sample in the stencil buffer
|
W.stencil=1--The number of bits per sample in the stencil buffer
|
||||||
|
|||||||
1170
dataList.lua
Normal file
1170
dataList.lua
Normal file
File diff suppressed because it is too large
Load Diff
751
gamefunc.lua
751
gamefunc.lua
File diff suppressed because it is too large
Load Diff
Binary file not shown.
|
Before Width: | Height: | Size: 6.2 KiB After Width: | Height: | Size: 6.5 KiB |
BIN
image/mess/groupcode.png
Normal file
BIN
image/mess/groupcode.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 31 KiB |
BIN
image/mess/light.png
Normal file
BIN
image/mess/light.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 423 B |
BIN
image/mess/lightBulb.png
Normal file
BIN
image/mess/lightBulb.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 421 B |
BIN
image/mess/paycode.png
Normal file
BIN
image/mess/paycode.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 60 KiB |
155
language/chi.lua
155
language/chi.lua
@@ -1,18 +1,17 @@
|
|||||||
return{
|
return{
|
||||||
royale_remain=function(n)
|
atkModeName={"随机","徽章","击杀","反击"},
|
||||||
return "剩余 "..n.." 名玩家"
|
royale_remain=function(n)return"剩余 "..n.." 名玩家"end,
|
||||||
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连击","4连击","5连击","6连击","7连击","8连击","9连击","10连击!","11连击!","12连击!","13连击!","14连击!","15连击!","16连击!","17连击!","18连击!","19连击!","巨型连击"},
|
techrash="Techrash",
|
||||||
techrash="四清",
|
techrashB2B="Techrash B2B",
|
||||||
techrashB2B="满贯 四清",
|
techrashB3B="Techrash B2B2B",
|
||||||
techrashB3B="大满贯 四清",
|
|
||||||
block={"Z","S","L","J","T","O","I"},
|
block={"Z","S","L","J","T","O","I"},
|
||||||
spin={"Z型回旋","S型回旋","L型回旋","J型回旋","T型回旋","O型回旋","I型回旋"},
|
spin={"Z-spin","S-spin","L-spin","J-spin","T-spin","O-spin","I-spin"},
|
||||||
clear={"单清","双清","三清"},
|
clear={" single"," double"," triple"},
|
||||||
b2b="满贯 ",
|
b2b="B2B ",
|
||||||
b3b="大满贯 ",
|
b3b="B2B2B ",
|
||||||
mini="次级",
|
mini="Mini",
|
||||||
PC="场地全清",
|
PC="Perfect Clear",
|
||||||
hold="暂存",
|
hold="暂存",
|
||||||
next="下一个",
|
next="下一个",
|
||||||
|
|
||||||
@@ -45,7 +44,7 @@ return{
|
|||||||
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,"∞"},
|
||||||
freshLimit={0,8,15,"∞"},
|
freshLimit={0,8,15,"∞"},
|
||||||
opponent={"无电脑",1,2,3,4,5,6,7,8,9,10,11},
|
opponent={"无电脑",1,2,3,4,5,6,7,8,9,10,11},
|
||||||
@@ -58,15 +57,16 @@ return{
|
|||||||
setting2Help="方向键选择/翻页,回车修改,esc返回",
|
setting2Help="方向键选择/翻页,回车修改,esc返回",
|
||||||
|
|
||||||
|
|
||||||
actName={"左移:","右移:","顺时针旋转:","顺时针旋转:","180°旋转","硬降:","软降:","暂存:","切换攻击:","重新开始:","左瞬移:","右瞬移:","软降到底:"},
|
actName={"左移:","右移:","顺时针旋转:","逆时针旋转:","180°旋转","硬降:","软降:","暂存:","切换攻击:","重新开始:","左瞬移:","右瞬移:","软降到底:"},
|
||||||
modeName={
|
modeName={
|
||||||
[0]="自定义",
|
[0]="自定义",
|
||||||
"竞速","马拉松","经典","禅","无尽","单挑","仅TSD","隐形","挖掘","生存","科研",
|
"竞速","马拉松","大师","经典","禅","无尽","单挑","仅TSD","隐形","挖掘","生存","科研",
|
||||||
"全清训练","全清挑战","41人混战","99人混战","干旱","多人",
|
"全清训练","全清挑战","41人混战","99人混战","干旱","多人",
|
||||||
},
|
},
|
||||||
modeInfo={
|
modeInfo={
|
||||||
sprint="挑战世界纪录",
|
sprint="挑战世界纪录",
|
||||||
marathon="尝试坚持到最后",
|
marathon="尝试坚持到最后",
|
||||||
|
master="成为方块大师",
|
||||||
classic="高速经典",
|
classic="高速经典",
|
||||||
zen="无重力消除200行",
|
zen="无重力消除200行",
|
||||||
infinite="科研沙盒",
|
infinite="科研沙盒",
|
||||||
@@ -121,71 +121,94 @@ return{
|
|||||||
"特别感谢:Farter,Teatube,196,Flyz,T830,[所有测试人员]和 你!",
|
"特别感谢:Farter,Teatube,196,Flyz,T830,[所有测试人员]和 你!",
|
||||||
"错误或者建议请附带相关信息发送到作者邮箱~",
|
"错误或者建议请附带相关信息发送到作者邮箱~",
|
||||||
},
|
},
|
||||||
|
support="支持作者",
|
||||||
|
group="官方QQ群",
|
||||||
ButtonText={
|
ButtonText={
|
||||||
main={
|
main={
|
||||||
"开始",
|
play="开始",
|
||||||
"设置",
|
setting="设置",
|
||||||
"帮助",
|
stat="统计信息",
|
||||||
"统计信息",
|
help="帮助",
|
||||||
"退出",
|
quit="退出",
|
||||||
},
|
},
|
||||||
mode={
|
mode={
|
||||||
"Λ",
|
up="Λ",
|
||||||
"v",
|
down="v",
|
||||||
"<",
|
left="<",
|
||||||
">",
|
right=">",
|
||||||
"开始",
|
start="开始",
|
||||||
"自定义(C)",
|
custom="自定义(C)",
|
||||||
"返回",
|
back="返回",
|
||||||
},
|
},
|
||||||
custom={
|
custom={
|
||||||
"Λ",
|
up="Λ",
|
||||||
"v",
|
down="v",
|
||||||
"<",
|
left="<",
|
||||||
">",
|
right=">",
|
||||||
"开始",
|
start="开始",
|
||||||
"返回",
|
draw="画图(D)",
|
||||||
|
back="返回",
|
||||||
|
},
|
||||||
|
draw={
|
||||||
|
block1="■",
|
||||||
|
block2="■",
|
||||||
|
block3="■",
|
||||||
|
block4="■",
|
||||||
|
block5="■",
|
||||||
|
block6="■",
|
||||||
|
block7="■",
|
||||||
|
gb1="■",
|
||||||
|
gb2="■",
|
||||||
|
gb3="■",
|
||||||
|
gb4="■",
|
||||||
|
gb5="■",
|
||||||
|
erase="×",
|
||||||
|
clear="清空",
|
||||||
|
back="返回",
|
||||||
|
},
|
||||||
|
play={
|
||||||
|
back="返回",
|
||||||
},
|
},
|
||||||
setting={
|
setting={
|
||||||
function()return setting.ghost and"阴影 开"or"阴影 关"end,
|
ghost=function()return setting.ghost and"阴影:开"or"阴影:关"end,
|
||||||
function()return setting.center 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,
|
||||||
"+",
|
dasD="-",dasU="+",
|
||||||
"-",
|
arrD="-",arrU="+",
|
||||||
"+",
|
sddasD="-",sddasU="+",
|
||||||
"-",
|
sdarrD="-",sdarrU="+",
|
||||||
"+",
|
sfx=function()return setting.sfx and"音效:开"or"音效:关"end,
|
||||||
function()return setting.sfx and"音效 开"or"音效 关"end,
|
bgm=function()return setting.bgm and"音乐:开"or"音乐:关"end,
|
||||||
function()return setting.bgm and"音乐 开"or"音乐 关"end,
|
vib=function()return "震动强度:"..setting.vib end,
|
||||||
function()return "震动强度:"..setting.vib end,
|
fullscreen=function()return setting.fullscreen and"全屏:开"or"全屏:关"end,
|
||||||
function()return setting.fullscreen and"全屏 开"or"全屏 关"end,
|
bgblock=function()return setting.bgblock and"背景动画:开"or"背景动画:关"end,
|
||||||
function()return setting.bgblock and"背景动画 开"or"背景动画 关"end,
|
frame=function()return"绘制帧:"..setting.frameMul.."%"end,
|
||||||
function()return"绘制帧:"..setting.frameMul.."%"end,
|
control="控制设置",
|
||||||
"控制设置",
|
touch="触摸设置",
|
||||||
"触摸设置",
|
lang=function()return langName[setting.lang]end,
|
||||||
function()return langName[setting.lang]end,
|
back="保存&返回",
|
||||||
"保存&返回",
|
|
||||||
},
|
},
|
||||||
setting2={
|
setting2={
|
||||||
"返回",
|
back="返回",
|
||||||
},
|
},
|
||||||
setting3={
|
setting3={
|
||||||
"返回",
|
back="返回",
|
||||||
function()return setting.virtualkeySwitch and"隐藏虚拟按键"or"显示虚拟按键"end,
|
hide=function()return setting.virtualkeySwitch and"隐藏虚拟按键"or"显示虚拟按键"end,
|
||||||
"默认组合",
|
default="默认组合",
|
||||||
function()return text.snapLevelName[snapLevel]end,
|
snap=function()return text.snapLevelName[snapLevel]end,
|
||||||
function()return percent0to5[setting.virtualkeyAlpha]end,
|
alpha=function()return percent0to5[setting.virtualkeyAlpha]end,
|
||||||
"图标",
|
icon="图标",
|
||||||
"大小",
|
size="大小",
|
||||||
},
|
},
|
||||||
help={
|
help={
|
||||||
"返回",
|
back="返回",
|
||||||
"作者QQ",
|
qq="作者QQ",
|
||||||
},
|
},
|
||||||
stat={
|
stat={
|
||||||
"返回",
|
back="返回",
|
||||||
|
path="打开存储目录",
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
}--中文→
|
}--中文■
|
||||||
149
language/eng.lua
149
language/eng.lua
@@ -1,20 +1,19 @@
|
|||||||
return{
|
return{
|
||||||
royale_remain=function(n)
|
atkModeName={"Random","Badges","K.O.s","Counters"},
|
||||||
return n.." Players Remain"
|
royale_remain=function(n)return n.." Players Remain"end,
|
||||||
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="Techrash B2B",
|
||||||
techrashB3B="Techrash B2B2B",
|
techrashB3B="Techrash B2B2B",
|
||||||
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"},
|
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",
|
b2b="B2B ",
|
||||||
b3b=" B2B2B",
|
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",
|
||||||
@@ -43,9 +42,9 @@ return{
|
|||||||
wait=nil,
|
wait=nil,
|
||||||
fall=nil,
|
fall=nil,
|
||||||
next=nil,
|
next=nil,
|
||||||
hold={"on","off"},
|
hold={"ON","OFF"},
|
||||||
sequence={"bag7","his4","random"},
|
sequence={"bag7","his4","random"},
|
||||||
visible={"normal","time","invisible"},
|
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},
|
||||||
@@ -61,12 +60,13 @@ return{
|
|||||||
actName={"Move Left:","Move Right:","Rotate Right:","Rotate Left:","Rotate Flip:","Hard Drop:","Soft Drop:","Hold:","Swap:","Restart:","Instant Left:","Instant Right:","Ins Down:"},
|
actName={"Move Left:","Move Right:","Rotate Right:","Rotate Left:","Rotate Flip:","Hard Drop:","Soft Drop:","Hold:","Swap:","Restart:","Instant Left:","Instant Right:","Ins Down:"},
|
||||||
modeName={
|
modeName={
|
||||||
[0]="Custom",
|
[0]="Custom",
|
||||||
"Sprint","Marathon","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",
|
"PC Train","PC Challenge","Techmino41","Techmino99","Drought","Hotseat",
|
||||||
},
|
},
|
||||||
modeInfo={
|
modeInfo={
|
||||||
sprint="Speed run",
|
sprint="Speed run",
|
||||||
marathon="Survive and reach target",
|
marathon="Survive and reach target",
|
||||||
|
master="To be Grand Master",
|
||||||
classic="Vintage car drag racing",
|
classic="Vintage car drag racing",
|
||||||
zen="Clear 200 Lines without gravity",
|
zen="Clear 200 Lines without gravity",
|
||||||
infinite="Infinite game,infinite happiness",
|
infinite="Infinite game,infinite happiness",
|
||||||
@@ -109,7 +109,7 @@ return{
|
|||||||
"Total spin:",
|
"Total spin:",
|
||||||
},
|
},
|
||||||
help={
|
help={
|
||||||
"I think you don't need \"help\".",
|
"I don't think you need \"help\".",
|
||||||
"THIS IS ONLY A SMALL BLOCK GAME",
|
"THIS IS ONLY A SMALL 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",
|
||||||
@@ -121,71 +121,98 @@ return{
|
|||||||
"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.",
|
||||||
},
|
},
|
||||||
|
support="Support Author",
|
||||||
|
group="Official QQ Group",
|
||||||
ButtonText={
|
ButtonText={
|
||||||
main={
|
main={
|
||||||
"Play",
|
play="Play",
|
||||||
"Settings",
|
setting="Settings",
|
||||||
"Help",
|
stat="Statistics",
|
||||||
"Statistics",
|
help="Help",
|
||||||
"Quit",
|
quit="Quit",
|
||||||
},
|
},
|
||||||
mode={
|
mode={
|
||||||
"Λ",
|
up="Λ",
|
||||||
"v",
|
down="v",
|
||||||
"<",
|
left="<",
|
||||||
">",
|
right=">",
|
||||||
"Start",
|
start="Start",
|
||||||
"Custom(C)",
|
custom="Custom(C)",
|
||||||
"Back",
|
back="Back",
|
||||||
},
|
},
|
||||||
custom={
|
custom={
|
||||||
"Λ",
|
up="Λ",
|
||||||
"v",
|
down="v",
|
||||||
"<",
|
left="<",
|
||||||
">",
|
right=">",
|
||||||
"Start",
|
start="Start",
|
||||||
"Back",
|
draw="Draw(D)",
|
||||||
|
back="Back",
|
||||||
|
},
|
||||||
|
draw={
|
||||||
|
block1="■",
|
||||||
|
block2="■",
|
||||||
|
block3="■",
|
||||||
|
block4="■",
|
||||||
|
block5="■",
|
||||||
|
block6="■",
|
||||||
|
block7="■",
|
||||||
|
gb1="■",
|
||||||
|
gb2="■",
|
||||||
|
gb3="■",
|
||||||
|
gb4="■",
|
||||||
|
gb5="■",
|
||||||
|
erase="×",
|
||||||
|
clear="clear",
|
||||||
|
back="back",
|
||||||
|
},
|
||||||
|
play={
|
||||||
|
back="Back",
|
||||||
},
|
},
|
||||||
setting={
|
setting={
|
||||||
function()return setting.ghost and"Ghost:ON"or"Ghost:OFF"end,
|
ghost=function()return setting.ghost and"Ghost:ON"or"Ghost:OFF"end,
|
||||||
function()return setting.center and"Center:ON"or"Center:OFF"end,
|
center=function()return setting.center and"Center:ON"or"Center:OFF"end,
|
||||||
"-",
|
grid=function()return setting.grid and"Grid:ON"or"Grid:OFF"end,
|
||||||
"+",
|
swap=function()return setting.swap and"Swap:comboKey"or"Swap:loop"end,
|
||||||
"-",
|
fxs=function()return setting.fxs and"FXs:ON"or"FXs:OFF"end,
|
||||||
"+",
|
dasD="-",
|
||||||
"-",
|
dasU="+",
|
||||||
"+",
|
arrD="-",
|
||||||
"-",
|
arrU="+",
|
||||||
"+",
|
sddasD="-",
|
||||||
function()return setting.sfx and"SFX:on"or"SFX:off"end,
|
sddasU="+",
|
||||||
function()return setting.bgm and"BGM:on"or"BGM:off"end,
|
sdarrD="-",
|
||||||
function()return "Vibrate level:"..setting.vib end,
|
sdarrU="+",
|
||||||
function()return setting.fullscreen and"Fullscreen:on"or"Fullscreen:off"end,
|
sfx=function()return setting.sfx and"SFX:ON"or"SFX:OFF"end,
|
||||||
function()return setting.bgblock and"BG animation:on"or"BG animation:off"end,
|
bgm=function()return setting.bgm and"BGM:ON"or"BGM:OFF"end,
|
||||||
function()return"FrameDraw:"..setting.frameMul.."%"end,
|
vib=function()return "Vibrate level:"..setting.vib end,
|
||||||
"Control settings",
|
fullscreen=function()return setting.fullscreen and"Fullscreen:ON"or"Fullscreen:OFF"end,
|
||||||
"Touch settings",
|
bgblock=function()return setting.bgblock and"BG animation:ON"or"BG animation:OFF"end,
|
||||||
function()return langName[setting.lang]end,
|
frame=function()return"FrameDraw:"..setting.frameMul.."%"end,
|
||||||
"Save&Back",
|
control="Control settings",
|
||||||
|
touch="Touch settings",
|
||||||
|
lang=function()return langName[setting.lang]end,
|
||||||
|
back="Save&Back",
|
||||||
},
|
},
|
||||||
setting2={
|
setting2={
|
||||||
"Back",
|
back="Back",
|
||||||
},
|
},
|
||||||
setting3={
|
setting3={
|
||||||
"Back",
|
back="Back",
|
||||||
function()return setting.virtualkeySwitch and"Hide Virtual Key"or"Show Virtual Key"end,
|
hide=function()return setting.virtualkeySwitch and"Hide Virtual Key"or"Show Virtual Key"end,
|
||||||
"Defaults",
|
default="Defaults",
|
||||||
function()return text.snapLevelName[snapLevel]end,
|
snap=function()return text.snapLevelName[snapLevel]end,
|
||||||
function()return percent0to5[setting.virtualkeyAlpha]end,
|
alpha=function()return percent0to5[setting.virtualkeyAlpha]end,
|
||||||
"Icon",
|
icon="Icon",
|
||||||
"Size",
|
size="Size",
|
||||||
},
|
},
|
||||||
help={
|
help={
|
||||||
"Back",
|
back="Back",
|
||||||
"Author's qq",
|
qq="Author's qq",
|
||||||
},
|
},
|
||||||
stat={
|
stat={
|
||||||
"Back",
|
back="Back",
|
||||||
|
path="Open Data Folder",
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
691
main.lua
691
main.lua
@@ -1,39 +1,22 @@
|
|||||||
lib={
|
local gc,tm=love.graphics,love.timer
|
||||||
gc=love.graphics,
|
local ms,kb=love.mouse,love.keyboard
|
||||||
kb=love.keyboard,
|
local fs,sys=love.filesystem,love.system
|
||||||
ms=love.mouse,
|
|
||||||
tc=love.touch,
|
|
||||||
tm=love.timer,
|
|
||||||
fs=love.filesystem,
|
|
||||||
wd=love.window,
|
|
||||||
mt=love.math,
|
|
||||||
sys=love.system,
|
|
||||||
}for k,v in pairs(lib)do _G[k]=v end lib=nil
|
|
||||||
toN,toS=tonumber,tostring
|
|
||||||
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,pi=math.floor,math.ceil,math.abs,math.random,math.max,math.min,math.sin,math.cos,math.atan,math.pi
|
||||||
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,sort=table.insert,table.remove,table.sort
|
||||||
null=function()end
|
null=function()end
|
||||||
|
|
||||||
ww,wh=gc.getWidth(),gc.getHeight()
|
|
||||||
Timer=tm.getTime--Easy&Quick to get time!
|
|
||||||
mx,my,mouseShow=-20,-20,false
|
|
||||||
xOy=love.math.newTransform()
|
|
||||||
focus=true
|
|
||||||
|
|
||||||
system=sys.getOS()
|
system=sys.getOS()
|
||||||
touching=nil--1st touching ID
|
scr={x=0,y=0,w=gc.getWidth(),h=gc.getHeight(),k=1}
|
||||||
|
|
||||||
scene=""
|
scene=""
|
||||||
bgmPlaying=nil
|
bgmPlaying=nil
|
||||||
curBG="none"
|
curBG="none"
|
||||||
BGblock={ct=150,next=7}
|
|
||||||
|
|
||||||
kb.setKeyRepeat(false)
|
kb.setKeyRepeat(false)
|
||||||
kb.setTextInput(false)
|
kb.setTextInput(false)
|
||||||
ms.setVisible(false)
|
ms.setVisible(false)
|
||||||
|
|
||||||
Fonts={}
|
local Fonts={}
|
||||||
function setFont(s)
|
function setFont(s)
|
||||||
if s~=currentFont then
|
if s~=currentFont then
|
||||||
if Fonts[s]then
|
if Fonts[s]then
|
||||||
@@ -45,23 +28,29 @@ function setFont(s)
|
|||||||
end
|
end
|
||||||
currentFont=s
|
currentFont=s
|
||||||
end
|
end
|
||||||
|
return Fonts[s]
|
||||||
end
|
end
|
||||||
|
|
||||||
gameEnv0={
|
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,
|
||||||
|
_20G=false,bone=false,
|
||||||
drop=30,lock=45,
|
drop=30,lock=45,
|
||||||
wait=1,fall=1,
|
wait=0,fall=0,
|
||||||
next=6,hold=true,oncehold=true,
|
next=6,hold=true,oncehold=true,
|
||||||
sequence="bag7",visible=1,
|
|
||||||
_20G=false,target=1e99,
|
keepVisible=true,visible="show",
|
||||||
freshLimit=15,
|
sequence="bag7",
|
||||||
|
block=true,
|
||||||
|
Fkey=false,
|
||||||
ospin=true,
|
ospin=true,
|
||||||
|
freshLimit=1e99,
|
||||||
|
target=1e99,
|
||||||
reach=null,
|
reach=null,
|
||||||
bg="none",
|
bg="none",
|
||||||
bgm="race"
|
bgm="race"
|
||||||
--not all is actually used,some only provide a key
|
|
||||||
}
|
}
|
||||||
customSel={
|
customSel={
|
||||||
drop=20,
|
drop=20,
|
||||||
@@ -76,620 +65,24 @@ customSel={
|
|||||||
freshLimit=3,
|
freshLimit=3,
|
||||||
opponent=1,
|
opponent=1,
|
||||||
}
|
}
|
||||||
loadmode={
|
preField={}for i=1,20 do preField[i]={0,0,0,0,0,0,0,0,0,0}end
|
||||||
sprint=function()
|
freeRow={}
|
||||||
createPlayer(1,340,15)
|
for i=1,40 do
|
||||||
end,
|
freeRow[i]={0,0,0,0,0,0,0,0,0,0}
|
||||||
marathon=function()
|
end
|
||||||
createPlayer(1,340,15)
|
|
||||||
end,
|
|
||||||
classic=function()
|
|
||||||
createPlayer(1,340,15)
|
|
||||||
end,
|
|
||||||
zen=function()
|
|
||||||
createPlayer(1,340,15)
|
|
||||||
end,
|
|
||||||
infinite=function()
|
|
||||||
createPlayer(1,340,15)
|
|
||||||
end,
|
|
||||||
solo=function()
|
|
||||||
createPlayer(1,200,15)
|
|
||||||
createPlayer(2,830,220,.7,customRange.opponent[3*curMode.lv])
|
|
||||||
end,
|
|
||||||
tsd=function()
|
|
||||||
createPlayer(1,340,15)
|
|
||||||
end,
|
|
||||||
blind=function()
|
|
||||||
createPlayer(1,340,15)
|
|
||||||
end,
|
|
||||||
dig=function()
|
|
||||||
createPlayer(1,340,15)
|
|
||||||
local P=players[1]
|
|
||||||
if curMode.lv==1 then
|
|
||||||
ins(players[1].task,Event.task.dig_normal)
|
|
||||||
pushSpeed=1
|
|
||||||
elseif curMode.lv==2 then
|
|
||||||
ins(players[1].task,Event.task.dig_lunatic)
|
|
||||||
pushSpeed=1
|
|
||||||
end
|
|
||||||
end,
|
|
||||||
survivor=function()
|
|
||||||
createPlayer(1,340,15)
|
|
||||||
local P=players[1]
|
|
||||||
ins(players[1].task,Event.task[curMode.lv==1 and"survivor_easy"or curMode.lv==2 and"survivor_normal"or curMode.lv==3 and"survivor_hard"or curMode.lv==4 and"survivor_lunatic"])
|
|
||||||
pushSpeed=curMode.lv>2 and 2 or 1
|
|
||||||
end,
|
|
||||||
tech=function()
|
|
||||||
createPlayer(1,340,15)
|
|
||||||
end,
|
|
||||||
pctrain=function()
|
|
||||||
createPlayer(1,340,15)
|
|
||||||
P=players[1]
|
|
||||||
Event.newPC()
|
|
||||||
P.freshNext()
|
|
||||||
end,
|
|
||||||
pcchallenge=function()
|
|
||||||
createPlayer(1,340,15)
|
|
||||||
end,
|
|
||||||
techmino41=function()
|
|
||||||
createPlayer(1,340,15)--Player
|
|
||||||
if curMode.lv==5 then players[1].gameEnv.drop=15 end
|
|
||||||
local n,min,max=2
|
|
||||||
if curMode.lv==1 then min,max=5,30
|
|
||||||
elseif curMode.lv==2 then min,max=3,25
|
|
||||||
elseif curMode.lv==3 then min,max=2,20
|
|
||||||
elseif curMode.lv==4 then min,max=2,10
|
|
||||||
elseif curMode.lv==5 then min,max=1,6
|
|
||||||
end
|
|
||||||
for i=1,4 do for j=1,5 do
|
|
||||||
createPlayer(n,77*i-55,140*j-125,.2,rnd(min,max))
|
|
||||||
n=n+1
|
|
||||||
end end
|
|
||||||
for i=9,12 do for j=1,5 do
|
|
||||||
createPlayer(n,77*i+275,140*j-125,.2,rnd(min,max))
|
|
||||||
n=n+1
|
|
||||||
end end
|
|
||||||
--AIs
|
|
||||||
|
|
||||||
end,
|
|
||||||
techmino99=function()
|
|
||||||
createPlayer(1,340,15)--Player
|
|
||||||
if curMode.lv==5 then players[1].gameEnv.drop=15 end
|
|
||||||
local n,min,max=2
|
|
||||||
if curMode.lv==1 then min,max=5,32
|
|
||||||
elseif curMode.lv==2 then min,max=3,25
|
|
||||||
elseif curMode.lv==3 then min,max=2,18
|
|
||||||
elseif curMode.lv==4 then min,max=2,12
|
|
||||||
elseif curMode.lv==5 then min,max=1,12
|
|
||||||
end
|
|
||||||
for i=1,7 do for j=1,7 do
|
|
||||||
createPlayer(n,46*i-36,97*j-72,.135,rnd(min,max))
|
|
||||||
n=n+1
|
|
||||||
end end
|
|
||||||
for i=15,21 do for j=1,7 do
|
|
||||||
createPlayer(n,46*i+264,97*j-72,.135,rnd(min,max))
|
|
||||||
n=n+1
|
|
||||||
end end
|
|
||||||
--AIs
|
|
||||||
|
|
||||||
end,
|
|
||||||
drought=function()
|
|
||||||
createPlayer(1,340,15)
|
|
||||||
end,
|
|
||||||
hotseat=function()
|
|
||||||
if curMode.lv==1 then
|
|
||||||
createPlayer(1,20,15)
|
|
||||||
createPlayer(2,650,15)
|
|
||||||
elseif curMode.lv==2 then
|
|
||||||
createPlayer(1,20,100,.65)
|
|
||||||
createPlayer(2,435,100,.65)
|
|
||||||
createPlayer(3,850,100,.65)
|
|
||||||
elseif curMode.lv==3 then
|
|
||||||
createPlayer(1,25,160,.5)
|
|
||||||
createPlayer(2,335,160,.5)
|
|
||||||
createPlayer(3,645,160,.5)
|
|
||||||
createPlayer(4,955,160,.5)
|
|
||||||
end
|
|
||||||
end,
|
|
||||||
custom=function()
|
|
||||||
for i=1,#customID do
|
|
||||||
local k=customID[i]
|
|
||||||
modeEnv[k]=customRange[k][customSel[k]]
|
|
||||||
end
|
|
||||||
modeEnv._20G=modeEnv.drop==-1
|
|
||||||
if modeEnv.opponent==0 then
|
|
||||||
createPlayer(1,340,15)
|
|
||||||
else
|
|
||||||
modeEnv.target=nil
|
|
||||||
createPlayer(1,20,15)
|
|
||||||
createPlayer(2,660,85,.9,modeEnv.opponent)
|
|
||||||
end
|
|
||||||
end,
|
|
||||||
}
|
|
||||||
mesDisp={
|
|
||||||
--Default:font=35,white
|
|
||||||
sprint=function()
|
|
||||||
setFont(70)
|
|
||||||
mStr(max(P.gameEnv.target-P.cstat.row,0),-75,260)
|
|
||||||
end,
|
|
||||||
marathon=function()
|
|
||||||
setFont(50)
|
|
||||||
mStr(P.cstat.row,-75,320)
|
|
||||||
mStr(P.gameEnv.target,-75,370)
|
|
||||||
gc.rectangle("fill",-120,376,90,4)
|
|
||||||
end,
|
|
||||||
classic=function()
|
|
||||||
setFont(80)
|
|
||||||
local r=P.gameEnv.target*.1
|
|
||||||
mStr(r<11 and 19+r or r==11 and"00"or r==12 and"0a"or format("%x",r*10-110),-75,210)
|
|
||||||
setFont(20)
|
|
||||||
mStr("speed level",-75,290)
|
|
||||||
setFont(50)
|
|
||||||
mStr(P.cstat.row,-75,320)
|
|
||||||
mStr(P.gameEnv.target,-75,370)
|
|
||||||
gc.rectangle("fill",-120,376,90,4)
|
|
||||||
end,
|
|
||||||
zen=function()
|
|
||||||
setFont(75)
|
|
||||||
mStr(max(200-P.cstat.row,0),-75,280)
|
|
||||||
end,
|
|
||||||
infinite=function()
|
|
||||||
setFont(50)
|
|
||||||
mStr(P.cstat.atk,-75,310)
|
|
||||||
mStr(format("%.2f",2.5*P.cstat.atk/P.cstat.piece),-75,420)
|
|
||||||
setFont(20)
|
|
||||||
mStr("Attack",-75,363)
|
|
||||||
mStr("Efficiency",-75,475)
|
|
||||||
end,
|
|
||||||
tsd=function()
|
|
||||||
setFont(35)
|
|
||||||
mStr("TSD",-75,405)
|
|
||||||
setFont(80)
|
|
||||||
mStr(P.cstat.event,-75,330)
|
|
||||||
end,
|
|
||||||
blind=function()
|
|
||||||
setFont(25)
|
|
||||||
mStr("Rows",-75,300)
|
|
||||||
mStr("Techrash",-75,420)
|
|
||||||
setFont(80)
|
|
||||||
mStr(P.cstat.row,-75,220)
|
|
||||||
mStr(P.cstat.techrash,-75,340)
|
|
||||||
end,
|
|
||||||
dig=function()
|
|
||||||
setFont(70)
|
|
||||||
mStr(P.cstat.event,-75,310)
|
|
||||||
setFont(30)
|
|
||||||
mStr("Wave",-75,375)
|
|
||||||
end,
|
|
||||||
survivor=function()
|
|
||||||
setFont(70)
|
|
||||||
mStr(P.cstat.event,-75,310)
|
|
||||||
setFont(30)
|
|
||||||
mStr("Wave",-75,375)
|
|
||||||
end,
|
|
||||||
pctrain=function()
|
|
||||||
setFont(25)
|
|
||||||
mStr("Perfect Clear",-75,410)
|
|
||||||
setFont(80)
|
|
||||||
mStr(P.cstat.pc,-75,330)
|
|
||||||
end,
|
|
||||||
pcchallenge=function()
|
|
||||||
setFont(25)
|
|
||||||
mStr("Perfect Clear",-75,430)
|
|
||||||
setFont(80)
|
|
||||||
mStr(P.cstat.pc,-75,350)
|
|
||||||
setFont(50)
|
|
||||||
mStr(max(100-P.cstat.row,0),-75,250)
|
|
||||||
end,
|
|
||||||
techmino41=function()
|
|
||||||
setFont(40)
|
|
||||||
mStr(#players.alive.."/41",-75,175)
|
|
||||||
mStr(P.ko,-60,215)
|
|
||||||
setFont(25)
|
|
||||||
gc.print("KO",-115,225)
|
|
||||||
gc.setColor(1,.5,0,.6)
|
|
||||||
gc.print(P.badge,-35,227)
|
|
||||||
gc.setColor(1,1,1)
|
|
||||||
setFont(30)
|
|
||||||
gc.print(up0to4[P.strength],-125,290)
|
|
||||||
for i=1,P.strength do
|
|
||||||
gc.draw(badgeIcon,16*i-130,260)
|
|
||||||
end
|
|
||||||
end,
|
|
||||||
techmino99=function()
|
|
||||||
setFont(40)
|
|
||||||
mStr(#players.alive.."/99",-75,175)
|
|
||||||
mStr(P.ko,-60,215)
|
|
||||||
setFont(25)
|
|
||||||
gc.print("KO",-115,225)
|
|
||||||
gc.setColor(1,.5,0,.6)
|
|
||||||
gc.print(P.badge,-35,227)
|
|
||||||
gc.setColor(1,1,1)
|
|
||||||
setFont(30)
|
|
||||||
gc.print(up0to4[P.strength],-125,290)
|
|
||||||
for i=1,P.strength do
|
|
||||||
gc.draw(badgeIcon,16*i-130,260)
|
|
||||||
end
|
|
||||||
end,
|
|
||||||
drought=function()
|
|
||||||
setFont(75)
|
|
||||||
mStr(max(100-P.cstat.row,0),-75,280)
|
|
||||||
end,
|
|
||||||
custom=function()
|
|
||||||
if P.gameEnv.target<1e4 then
|
|
||||||
setFont(75)
|
|
||||||
mStr(max(P.gameEnv.target-P.cstat.row,0),-75,280)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
}
|
|
||||||
Event={
|
|
||||||
gameover={
|
|
||||||
win=function()
|
|
||||||
local P=players.alive[1]
|
|
||||||
P.alive=false
|
|
||||||
P.control=false
|
|
||||||
P.timing=false
|
|
||||||
P.waiting=1e99
|
|
||||||
P.b2b=0
|
|
||||||
if modeEnv.royaleMode then
|
|
||||||
P.rank=1
|
|
||||||
P.result="WIN"
|
|
||||||
showText(P,1,"appear",60,120,nil,true)
|
|
||||||
changeAtk(P)
|
|
||||||
end
|
|
||||||
::L::if P.task[1]then
|
|
||||||
rem(P.task)
|
|
||||||
goto L
|
|
||||||
end
|
|
||||||
for i=1,#P.atkBuffer do
|
|
||||||
P.atkBuffer[i].sent=true
|
|
||||||
P.atkBuffer[i].time=0
|
|
||||||
end
|
|
||||||
for i=1,#P.field do
|
|
||||||
for j=1,10 do
|
|
||||||
P.visTime[i][j]=min(P.visTime[i][j],20)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
showText(P,text.win,"beat",90,nil,nil,true)
|
|
||||||
if P.id==1 and players[2]and players[2].ai then SFX("win")end
|
|
||||||
ins(P.task,Event.task.win)
|
|
||||||
end,
|
|
||||||
lose=function()
|
|
||||||
P.alive=false
|
|
||||||
P.control=false
|
|
||||||
P.timing=false
|
|
||||||
P.waiting=1e99
|
|
||||||
P.b2b=0
|
|
||||||
::L::if P.task[1]then
|
|
||||||
rem(P.task)
|
|
||||||
goto L
|
|
||||||
end
|
|
||||||
for i=1,#players.alive do
|
|
||||||
if players.alive[i]==P then
|
|
||||||
rem(players.alive,i)
|
|
||||||
break
|
|
||||||
end
|
|
||||||
end
|
|
||||||
if modeEnv.royaleMode then
|
|
||||||
changeAtk(P)
|
|
||||||
P.result="K.O."
|
|
||||||
P.rank=#players.alive+1
|
|
||||||
showText(P,P.rank,"appear",60,120,nil,true)
|
|
||||||
P.strength=0
|
|
||||||
local A=P
|
|
||||||
::L::
|
|
||||||
A=A.lastRecv
|
|
||||||
if A and not A.alive and A~=P then goto L end
|
|
||||||
if A and A~=P then
|
|
||||||
if P.id==1 or A.id==1 then
|
|
||||||
throwBadge(P,A,P.badge)
|
|
||||||
P.killMark=A.id==1
|
|
||||||
end
|
|
||||||
A.ko,A.badge=A.ko+1,A.badge+P.badge+1
|
|
||||||
for i=A.strength+1,4 do
|
|
||||||
if A.badge>=modeEnv.royalePowerup[i]then
|
|
||||||
A.strength=i
|
|
||||||
end
|
|
||||||
end
|
|
||||||
if P==mostBadge then
|
|
||||||
mostBadge,secBadge=secBadge
|
|
||||||
elseif P==secBadge then
|
|
||||||
secBadge=nil
|
|
||||||
end
|
|
||||||
if mostBadge then
|
|
||||||
if A.badge>mostBadge.badge then
|
|
||||||
if A~=mostBadge then
|
|
||||||
mostBadge,secBadge=A,mostBadge
|
|
||||||
end
|
|
||||||
elseif secBadge then
|
|
||||||
if A.badge>secBadge.badge then
|
|
||||||
secBadge=A
|
|
||||||
end
|
|
||||||
else
|
|
||||||
secBadge=A
|
|
||||||
end
|
|
||||||
else
|
|
||||||
mostBadge=A
|
|
||||||
end
|
|
||||||
end
|
|
||||||
freshMostDangerous()
|
|
||||||
for i=1,#players.alive do
|
|
||||||
if players.alive[i].atking==P then
|
|
||||||
freshTarget(players.alive[i])
|
|
||||||
end
|
|
||||||
end
|
|
||||||
if #players.alive==modeEnv.royaleRemain[gameStage]then
|
|
||||||
royaleLevelup()
|
|
||||||
end
|
|
||||||
end
|
|
||||||
for i=1,#P.atkBuffer do
|
|
||||||
P.atkBuffer[i].sent=true
|
|
||||||
P.atkBuffer[i].time=0
|
|
||||||
end
|
|
||||||
for i=1,#P.field do
|
|
||||||
for j=1,10 do
|
|
||||||
P.visTime[i][j]=min(P.visTime[i][j],20)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
showText(P,text.lose,"appear",90,nil,nil,true)
|
|
||||||
if P.id==1 and players[2]and players[2].ai then SFX("fail")end
|
|
||||||
ins(P.task,Event.task.lose)
|
|
||||||
if #players.alive==1 then
|
|
||||||
local t=P
|
|
||||||
P=players.alive[1]
|
|
||||||
Event.gameover.win()
|
|
||||||
P=t
|
|
||||||
end
|
|
||||||
end,
|
|
||||||
},
|
|
||||||
marathon_reach=function()
|
|
||||||
local s=int(P.cstat.row*.1)
|
|
||||||
if s>=20 then
|
|
||||||
P.cstat.row=200
|
|
||||||
Event.gameover.win()
|
|
||||||
else
|
|
||||||
P.gameEnv.drop=marathon_drop[s]
|
|
||||||
if s==18 then P.gameEnv._20G=true end
|
|
||||||
P.gameEnv.target=s*10+10
|
|
||||||
SFX("reach")
|
|
||||||
end
|
|
||||||
end,
|
|
||||||
marathon_reach_lunatic=function()
|
|
||||||
if P.gameEnv.target==250 then
|
|
||||||
P.cstat.row=250
|
|
||||||
Event.gameover.win()
|
|
||||||
else
|
|
||||||
P.gameEnv.target=P.gameEnv.target+50
|
|
||||||
local t=P.gameEnv.target/50
|
|
||||||
P.gameEnv.lock=rush_lock[t]
|
|
||||||
P.gameEnv.wait=rush_wait[t]
|
|
||||||
P.gameEnv.fall=rush_fall[t]
|
|
||||||
showText(P,text.stage[t],"fly",80,-120)
|
|
||||||
SFX("reach")
|
|
||||||
end
|
|
||||||
end,
|
|
||||||
marathon_reach_ultimate=function()
|
|
||||||
if P.cstat.event==5 then
|
|
||||||
P.cstat.row=250
|
|
||||||
Event.gameover.win()
|
|
||||||
else
|
|
||||||
local t=P.cstat.event+1
|
|
||||||
if t==1 then t=2 end
|
|
||||||
P.gameEnv.target=50*t
|
|
||||||
P.cstat.event=t
|
|
||||||
P.gameEnv.lock=death_lock[t]
|
|
||||||
P.gameEnv.wait=death_wait[t]
|
|
||||||
P.gameEnv.fall=death_fall[t]
|
|
||||||
showText(P,text.stage[t],"fly",80,-120)
|
|
||||||
SFX("reach")
|
|
||||||
end
|
|
||||||
end,
|
|
||||||
classic_reach=function()
|
|
||||||
P.gameEnv.target=P.gameEnv.target+10
|
|
||||||
if P.gameEnv.target==100 then
|
|
||||||
P.gameEnv.drop,P.gameEnv.lock=0,0
|
|
||||||
end
|
|
||||||
SFX("reach")
|
|
||||||
end,
|
|
||||||
tsd_reach=function()
|
|
||||||
if P.lastClear~=52 then
|
|
||||||
Event.gameover.lose()
|
|
||||||
else
|
|
||||||
P.gameEnv.target=P.gameEnv.target+20
|
|
||||||
P.cstat.event=P.cstat.event+1
|
|
||||||
if #P.field>11 and P.cstat.event%5~=1 then
|
|
||||||
ins(P.clearing,1)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end,
|
|
||||||
tech_reach=function()
|
|
||||||
if #P.clearing>0 and P.lastClear<10 then
|
|
||||||
Event.gameover.lose()
|
|
||||||
end
|
|
||||||
end,
|
|
||||||
tech_reach_hard=function()
|
|
||||||
if #P.clearing>0 and P.lastClear<10 or P.lastClear==74 then
|
|
||||||
Event.gameover.lose()
|
|
||||||
end
|
|
||||||
end,
|
|
||||||
newPC=function()
|
|
||||||
local P=players[1]
|
|
||||||
if P.cstat.piece%4==0 then
|
|
||||||
if #P.field==#P.clearing then
|
|
||||||
P.counter=P.cstat.piece==0 and 20 or 0
|
|
||||||
ins(P.task,Event.task.PC)
|
|
||||||
if curMode.lv==2 then
|
|
||||||
local s=P.cstat.pc*.5
|
|
||||||
if int(s)==s and s>0 then
|
|
||||||
P.gameEnv.drop=pc_drop[s]or 10
|
|
||||||
P.gameEnv.lock=pc_lock[s]or 20
|
|
||||||
P.gameEnv.fall=pc_fall[s]or 5
|
|
||||||
if s==10 then
|
|
||||||
showText(P,text.maxspeed,"appear",80,-140)
|
|
||||||
else
|
|
||||||
showText(P,text.speedup,"appear",30,-140)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
else
|
|
||||||
Event.gameover.lose()
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end,
|
|
||||||
task={
|
|
||||||
win=function()
|
|
||||||
P.endCounter=P.endCounter+1
|
|
||||||
if P.endCounter>80 then
|
|
||||||
if P.gameEnv.visible==1 then
|
|
||||||
for i=1,#P.field do
|
|
||||||
for j=1,10 do
|
|
||||||
if P.visTime[i][j]>0 then
|
|
||||||
P.visTime[i][j]=P.visTime[i][j]-1
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
if P.endCounter==100 then
|
|
||||||
for i=1,#P.field do
|
|
||||||
removeRow(P.field)
|
|
||||||
removeRow(P.visTime)
|
|
||||||
end
|
|
||||||
return true
|
|
||||||
end
|
|
||||||
elseif P.endCounter==100 then
|
|
||||||
return true
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end,
|
|
||||||
lose=function()
|
|
||||||
P.endCounter=P.endCounter+1
|
|
||||||
if P.endCounter>80 then
|
|
||||||
if P.gameEnv.visible==1 then
|
|
||||||
for i=1,#P.field do
|
|
||||||
for j=1,10 do
|
|
||||||
if P.visTime[i][j]>0 then
|
|
||||||
P.visTime[i][j]=P.visTime[i][j]-1
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
if P.endCounter==100 then
|
|
||||||
for i=1,#P.field do
|
|
||||||
removeRow(P.field)
|
|
||||||
removeRow(P.visTime)
|
|
||||||
end
|
|
||||||
return true
|
|
||||||
end
|
|
||||||
elseif P.endCounter==100 then
|
|
||||||
return true
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end,
|
|
||||||
dig_normal=function()
|
|
||||||
local P=players[1]
|
|
||||||
P.counter=P.counter+1
|
|
||||||
if #P.clearing==0 and P.counter>=max(90,180-2*P.cstat.event)then
|
|
||||||
ins(P.field,1,getNewRow(13))
|
|
||||||
ins(P.visTime,1,getNewRow(1e99))
|
|
||||||
P.field[1][rnd(10)]=0
|
|
||||||
P.fieldBeneath=P.fieldBeneath+30
|
|
||||||
P.cy,P.y_img=P.cy+1,P.y_img+1
|
|
||||||
P.counter=0
|
|
||||||
P.cstat.event=P.cstat.event+1
|
|
||||||
end
|
|
||||||
end,
|
|
||||||
dig_lunatic=function()
|
|
||||||
local P=players[1]
|
|
||||||
P.counter=P.counter+1
|
|
||||||
if #P.clearing==0 and P.counter>=max(40,60-.5*P.cstat.event)then
|
|
||||||
ins(P.field,1,getNewRow(13))
|
|
||||||
ins(P.visTime,1,getNewRow(1e99))
|
|
||||||
P.field[1][rnd(10)]=0
|
|
||||||
P.fieldBeneath=P.fieldBeneath+30
|
|
||||||
P.cy,P.y_img=P.cy+1,P.y_img+1
|
|
||||||
P.counter=0
|
|
||||||
P.cstat.event=P.cstat.event+1
|
|
||||||
end
|
|
||||||
end,
|
|
||||||
survivor_easy=function()
|
|
||||||
local P=players[1]
|
|
||||||
P.counter=P.counter+1
|
|
||||||
if P.counter==max(60,180-2*P.cstat.event)then
|
|
||||||
ins(P.atkBuffer,{rnd(10),amount=1,countdown=30,cd0=30,time=0,sent=false,lv=1})
|
|
||||||
P.counter=0
|
|
||||||
if P.cstat.event==60 then showText(P,text.maxspeed,"appear",80,-140)end
|
|
||||||
P.cstat.event=P.cstat.event+1
|
|
||||||
end
|
|
||||||
end,
|
|
||||||
survivor_normal=function()
|
|
||||||
local P=players[1]
|
|
||||||
P.counter=P.counter+1
|
|
||||||
if P.counter==max(60,180-2*P.cstat.event)then
|
|
||||||
local d=P.cstat.event+1
|
|
||||||
if d%4==0 then ins (P.atkBuffer,{rnd(10),amount=1,countdown=60,cd0=60,time=0,sent=false,lv=1})
|
|
||||||
elseif d%4==1 then ins(P.atkBuffer,{rnd(10),amount=2,countdown=70,cd0=70,time=0,sent=false,lv=1})
|
|
||||||
elseif d%4==2 then ins(P.atkBuffer,{rnd(10),amount=3,countdown=80,cd0=80,time=0,sent=false,lv=2})
|
|
||||||
elseif d%4==3 then ins(P.atkBuffer,{rnd(10),amount=4,countdown=90,cd0=90,time=0,sent=false,lv=3})
|
|
||||||
end
|
|
||||||
P.counter=0
|
|
||||||
if P.cstat.event==60 then showText(P,text.maxspeed,"appear",80,-140)end
|
|
||||||
P.cstat.event=P.cstat.event+1
|
|
||||||
end
|
|
||||||
end,
|
|
||||||
survivor_hard=function()
|
|
||||||
local P=players[1]
|
|
||||||
P.counter=P.counter+1
|
|
||||||
if P.counter==max(60,180-2*P.cstat.event)then
|
|
||||||
if P.cstat.event%3<2 then
|
|
||||||
ins(P.atkBuffer,{rnd(10),amount=1,countdown=0,cd0=0,time=0,sent=false,lv=1})
|
|
||||||
else
|
|
||||||
ins(P.atkBuffer,{rnd(10),amount=3,countdown=60,cd0=60,time=0,sent=false,lv=2})
|
|
||||||
end
|
|
||||||
P.counter=0
|
|
||||||
if P.cstat.event==45 then showText(P,text.maxspeed,"appear",80,-140)end
|
|
||||||
P.cstat.event=P.cstat.event+1
|
|
||||||
end
|
|
||||||
end,
|
|
||||||
survivor_lunatic=function()
|
|
||||||
local P=players[1]
|
|
||||||
P.counter=P.counter+1
|
|
||||||
if P.counter==max(90,150-P.cstat.event)then
|
|
||||||
local t=max(60,90-P.cstat.event)
|
|
||||||
ins(P.atkBuffer,{rnd(10),amount=4,countdown=t,cd0=t,time=0,sent=false,lv=3})
|
|
||||||
P.counter=0
|
|
||||||
if P.cstat.event==30 then showText(P,text.maxspeed,"appear",80,-140)end
|
|
||||||
P.cstat.event=P.cstat.event+1
|
|
||||||
end
|
|
||||||
end,
|
|
||||||
PC=function()
|
|
||||||
local P=players[1]
|
|
||||||
P.counter=P.counter+1
|
|
||||||
if P.counter==21 then
|
|
||||||
local t=P.cstat.pc%2
|
|
||||||
for i=1,4 do
|
|
||||||
local r=getNewRow()
|
|
||||||
for j=1,10 do
|
|
||||||
r[j]=PCbase[4*t+i][j]
|
|
||||||
end
|
|
||||||
ins(P.field,1,r)
|
|
||||||
ins(P.visTime,1,getNewRow(P.showTime))
|
|
||||||
end
|
|
||||||
P.fieldBeneath=P.fieldBeneath+120
|
|
||||||
-- P.cy=P.cy+4
|
|
||||||
P.y_img=P.y_img+4
|
|
||||||
freshgho()
|
|
||||||
return true
|
|
||||||
end
|
|
||||||
end,
|
|
||||||
},
|
|
||||||
}
|
|
||||||
--Game system Data
|
--Game system Data
|
||||||
setting={
|
setting={
|
||||||
lang=1,
|
ghost=true,center=true,
|
||||||
|
grid=false,swap=true,
|
||||||
|
fxs=true,
|
||||||
|
|
||||||
|
das=10,arr=2,
|
||||||
|
sddas=0,sdarr=2,
|
||||||
|
|
||||||
sfx=true,bgm=true,vib=3,
|
sfx=true,bgm=true,vib=3,
|
||||||
fullscreen=false,
|
fullscreen=false,
|
||||||
bgblock=true,
|
bgblock=true,
|
||||||
das=10,arr=2,
|
lang=1,
|
||||||
sddas=0,sdarr=2,
|
|
||||||
ghost=true,center=true,
|
|
||||||
keyMap={
|
keyMap={
|
||||||
{"left","right","x","z","c","up","down","space","tab","r","","",""},
|
{"left","right","x","z","c","up","down","space","tab","r","","",""},
|
||||||
{"","","","","","","","","","","","",""},
|
{"","","","","","","","","","","","",""},
|
||||||
@@ -763,9 +156,18 @@ virtualkey={
|
|||||||
virtualkeyDown={false,false,false,false,false,false,false,false,false,false,false,false,false}
|
virtualkeyDown={false,false,false,false,false,false,false,false,false,false,false,false,false}
|
||||||
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"
|
||||||
userData=fs.newFile("userdata")
|
require"list"
|
||||||
userSetting=fs.newFile("usersetting")
|
require"class"
|
||||||
|
require"gamefunc"
|
||||||
|
require"ai"
|
||||||
|
require"timer"
|
||||||
|
require"paint"
|
||||||
|
require"call&sys"
|
||||||
|
require"dataList"
|
||||||
|
require"texture"
|
||||||
|
|
||||||
|
userData,userSetting=fs.newFile("userdata"),fs.newFile("usersetting")
|
||||||
if fs.getInfo("userdata")then
|
if fs.getInfo("userdata")then
|
||||||
loadData()
|
loadData()
|
||||||
end
|
end
|
||||||
@@ -773,13 +175,6 @@ 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
|
||||||
end
|
end
|
||||||
|
swapLanguage(setting.lang)
|
||||||
require("gamefunc")
|
|
||||||
require("ai")
|
|
||||||
require("timer")
|
|
||||||
require("paint")
|
|
||||||
require("call&sys")
|
|
||||||
require("list")
|
|
||||||
swapLanguage(setting.lang)
|
|
||||||
require("texture")
|
|
||||||
524
paint.lua
524
paint.lua
@@ -1,40 +1,59 @@
|
|||||||
swapDeck_data={
|
local gc=love.graphics
|
||||||
{4,0,1,1},{6,0,15,1},{5,0,9,1},{6,0,6,1},
|
local mt=love.math
|
||||||
{1,0,3,1},{3,0,12,1},{1,1,8,1},{2,1,4,2},
|
local setFont=setFont
|
||||||
{3,2,13,2},{4,1,12,2},{5,2,1,2},{7,1,11,2},
|
local Timer=love.timer.getTime
|
||||||
{2,1,9,3},{3,0,6,3},{4,2,14,3},{1,0,4,4},
|
|
||||||
{7,1,1,4},{6,0,2,4},{5,2,6,4},{6,0,14,5},
|
local attackColor={
|
||||||
{3,3,15,5},{4,0,7,6},{7,1,10,5},{5,0,2,6},
|
{color.darkGrey,color.white},
|
||||||
{2,1,1,7},{1,0,4,6},{4,1,13,5},{1,1,6,7},
|
{color.grey,color.white},
|
||||||
{5,3,11,5},{3,2,11,7},{6,0,8,7},{4,2,12,8},
|
{color.lightPurple,color.white},
|
||||||
{7,0,8,9},{1,0,2,8},{5,2,4,8},{6,0,15,8},
|
{color.lightRed,color.white},
|
||||||
}--Block id [ZSLJTOI] ,dir,x,y
|
{color.darkGreen,color.cyan},
|
||||||
swap={
|
}
|
||||||
none={2,1,d=function()end},
|
local frameColor={
|
||||||
flash={8,1,d=function()gc.clear(1,1,1)end},
|
[0]=color.white,
|
||||||
deck={50,8,d=function()
|
color.lightGreen,
|
||||||
local t=sceneSwaping.time
|
color.lightBlue,
|
||||||
gc.setColor(1,1,1)
|
color.lightPurple,
|
||||||
if t>8 then
|
color.lightOrange,
|
||||||
local t=max(t,15)
|
}
|
||||||
for i=1,51-t do
|
local modeLevelColor={
|
||||||
local bn=swapDeck_data[i][1]
|
EASY=color.cyan,
|
||||||
local b=blocks[bn][swapDeck_data[i][2]]
|
NORMAL=color.green,
|
||||||
local cx,cy=swapDeck_data[i][3],swapDeck_data[i][4]
|
HARD=color.magenta,
|
||||||
for y=1,#b do for x=1,#b[1]do
|
["HARD+"]=color.darkMagenta,
|
||||||
if b[y][x]>0 then
|
LUNATIC=color.red,
|
||||||
gc.draw(blockSkin[bn],80*(cx+x-2),80*(10-cy-y),nil,8/3)
|
EXTRA=color.lightMagenta,
|
||||||
end
|
ULTIMATE=color.lightYellow,
|
||||||
end end
|
|
||||||
end
|
MESS=color.lightGrey,
|
||||||
end
|
GM=color.blue,
|
||||||
if t<17 then
|
DEATH=color.lightRed,
|
||||||
gc.setColor(1,1,1,(8-abs(t-8))*.125)
|
CTWC=color.lightBlue,
|
||||||
gc.rectangle("fill",0,0,1280,720)
|
["10L"]=color.cyan,
|
||||||
end
|
["20L"]=color.lightBlue,
|
||||||
|
["40L"]=color.green,
|
||||||
|
["100L"]=color.orange,
|
||||||
|
["400L"]=color.red,
|
||||||
|
["1000L"]=color.darkRed,
|
||||||
|
}
|
||||||
|
|
||||||
|
local miniTitle_rect={
|
||||||
|
{2,0,5,1},{4,1,1,6},
|
||||||
|
{9,0,4,1},{9,3,4,1},{9,6,4,1},{8,0,1,7},
|
||||||
|
{15,0,3,1},{15,6,3,1},{14,0,1,7},
|
||||||
|
{19,0,1,7},{23,0,1,7},{20,3,3,1},
|
||||||
|
{0,8,1,6},{6,8,1,6},{1,9,1,1},{2,10,1,1},{3,11,1,1},{4,10,1,1},{5,9,1,1},
|
||||||
|
{8,8,5,1},{8,13,5,1},{10,9,1,4},
|
||||||
|
{14,8,1,6},{19,8,1,6},{15,9,1,1},{16,10,1,1},{17,11,1,1},{18,12,1,1},
|
||||||
|
{21,8,5,1},{21,13,5,1},{21,9,1,4},{25,9,1,4},
|
||||||
|
}
|
||||||
|
local function stencil_miniTitle()
|
||||||
|
for i=1,#miniTitle_rect do
|
||||||
|
gc.rectangle("fill",unpack(miniTitle_rect[i]))
|
||||||
end
|
end
|
||||||
},
|
end
|
||||||
}--Scene swapping animations
|
|
||||||
FX={
|
FX={
|
||||||
flash=0,--Black screen(frame)
|
flash=0,--Black screen(frame)
|
||||||
shake=0,--Screen shake(frame)
|
shake=0,--Screen shake(frame)
|
||||||
@@ -87,7 +106,7 @@ FX={
|
|||||||
zoomout=function(t,a)
|
zoomout=function(t,a)
|
||||||
gc.push("transform")
|
gc.push("transform")
|
||||||
setFont(t.font)
|
setFont(t.font)
|
||||||
local k=t.t^.5*.2+1
|
local k=t.t^.5*.1+1
|
||||||
gc.translate(150,290+t.dy)
|
gc.translate(150,290+t.dy)
|
||||||
gc.scale(k,k)
|
gc.scale(k,k)
|
||||||
gc.setColor(1,1,1,a)
|
gc.setColor(1,1,1,a)
|
||||||
@@ -109,38 +128,35 @@ FX={
|
|||||||
}
|
}
|
||||||
|
|
||||||
function updateButton()
|
function updateButton()
|
||||||
for i=1,#Buttons[scene]do
|
for k,B in next,Buttons[scene]do
|
||||||
local B=Buttons[scene][i]
|
local t=B==Buttons.sel and .4 or 0
|
||||||
local t=i==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
|
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
|
if B.alpha>t then B.alpha=B.alpha-.02 elseif B.alpha<t then B.alpha=B.alpha+.02 end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
function drawButton()
|
function drawButton()
|
||||||
for i=1,#Buttons[scene]do
|
for k,B in next,Buttons[scene]do
|
||||||
local B=Buttons[scene][i]
|
|
||||||
if not(B.hide and B.hide())then
|
if not(B.hide and B.hide())then
|
||||||
local C=B.rgb or color.white
|
local C=B.rgb or color.white
|
||||||
gc.setColor(C[1],C[2],C[3],B.alpha)
|
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.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.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)
|
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 t=B.t
|
||||||
local y0
|
local y0
|
||||||
if t then
|
if t then
|
||||||
if type(t)=="function"then t=t()end
|
if type(t)=="function"then t=t()end
|
||||||
setFont(B.f or 40)
|
setFont(B.f or 40)
|
||||||
y0=B.y-7-currentFont*.5
|
y0=B.y-currentFont*.64
|
||||||
mStr(t,B.x-1,y0)
|
gc.printf(t,B.x-201,y0+2,400,"center")
|
||||||
mStr(t,B.x+1,y0)
|
gc.printf(t,B.x-199,y0+2,400,"center")
|
||||||
mStr(t,B.x-1,y0+2)
|
gc.printf(t,B.x-201,y0,400,"center")
|
||||||
mStr(t,B.x+1,y0+2)
|
gc.printf(t,B.x-199,y0,400,"center")
|
||||||
end
|
gc.setColor(C)
|
||||||
gc.setColor(C)
|
|
||||||
if t then
|
|
||||||
mStr(t,B.x,y0+1)
|
mStr(t,B.x,y0+1)
|
||||||
end
|
end
|
||||||
gc.setLineWidth(3)gc.rectangle("line",B.x-B.w*.5,B.y-B.h*.5,B.w,B.h,4)
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
@@ -151,21 +167,22 @@ function drawDial(x,y,speed)
|
|||||||
gc.setColor(1,1,1,.6)
|
gc.setColor(1,1,1,.6)
|
||||||
gc.draw(dialNeedle,x,y,2.094+(speed<=175 and .02094*speed or 4.712-52.36/(speed-125)),nil,nil,5,4)
|
gc.draw(dialNeedle,x,y,2.094+(speed<=175 and .02094*speed or 4.712-52.36/(speed-125)),nil,nil,5,4)
|
||||||
end
|
end
|
||||||
function drawPixel(y,x,id,alpha)
|
function drawPixel(y,x,id)
|
||||||
gc.setColor(1,1,1,alpha)
|
|
||||||
gc.draw(blockSkin[id],30*x-30,600-30*y)
|
gc.draw(blockSkin[id],30*x-30,600-30*y)
|
||||||
end
|
end
|
||||||
function drawAtkPointer(x,y)
|
function drawAtkPointer(x,y)
|
||||||
gc.setColor(0,.6,1,.35+sin(Timer()*20)*.2)
|
local t=sin(Timer()*20)
|
||||||
|
gc.setColor(.2,.7+t*.2,1,.6+t*.4)
|
||||||
gc.circle("fill",x,y,25,6)
|
gc.circle("fill",x,y,25,6)
|
||||||
local a=Timer()*3%1*.8
|
local a=Timer()*3%1*.8
|
||||||
gc.setColor(0,.6,1,.8-a)
|
gc.setColor(0,.6,1,.8-a)
|
||||||
gc.circle("line",x,y,25*(1+a),6)
|
gc.circle("line",x,y,30*(1+a),6)
|
||||||
end
|
end
|
||||||
|
|
||||||
function VirtualkeyPreview()
|
function VirtualkeyPreview()
|
||||||
for i=1,#virtualkey do
|
for i=1,#virtualkey do
|
||||||
gc.setColor(1,sel==i and .5 or 1,sel==i and .5 or 1,setting.virtualkeyAlpha*.2)
|
local c=sel==i and .8 or 1
|
||||||
|
gc.setColor(c,c,c,setting.virtualkeyAlpha*.2)
|
||||||
local b=virtualkey[i]
|
local b=virtualkey[i]
|
||||||
gc.setLineWidth(b[4]*.07)
|
gc.setLineWidth(b[4]*.07)
|
||||||
gc.circle("line",b[1],b[2],b[4]-5)
|
gc.circle("line",b[1],b[2],b[4]-5)
|
||||||
@@ -176,72 +193,73 @@ function drawVirtualkey()
|
|||||||
local a=setting.virtualkeyAlpha*.2
|
local a=setting.virtualkeyAlpha*.2
|
||||||
local P=players[1]
|
local P=players[1]
|
||||||
for i=1,#virtualkey do
|
for i=1,#virtualkey do
|
||||||
local p,b=virtualkeyDown[i],virtualkey[i]
|
if i~=9 or modeEnv.Fkey then
|
||||||
if p then gc.setColor(.75,.75,.75,a)
|
local p,b=virtualkeyDown[i],virtualkey[i]
|
||||||
else gc.setColor(1,1,1,a)
|
if p then gc.setColor(.7,.7,.7,a)
|
||||||
end
|
else gc.setColor(1,1,1,a)
|
||||||
gc.setLineWidth(b[4]*.07)
|
end
|
||||||
gc.circle("line",b[1],b[2]+virtualkeyPressTime[i],b[4]-5)
|
gc.setLineWidth(b[4]*.07)
|
||||||
if setting.virtualkeyIcon then gc.draw(virtualkeyIcon[i],b[1],b[2]+virtualkeyPressTime[i],nil,b[4]*.025,nil,18,18)end
|
gc.circle("line",b[1],b[2]+virtualkeyPressTime[i],b[4]-5)
|
||||||
if virtualkeyPressTime[i]>0 then
|
if setting.virtualkeyIcon then gc.draw(virtualkeyIcon[i],b[1],b[2]+virtualkeyPressTime[i],nil,b[4]*.025,nil,18,18)end
|
||||||
gc.setColor(1,1,1,a*virtualkeyPressTime[i]*.1)
|
if virtualkeyPressTime[i]>0 then
|
||||||
gc.circle("line",b[1],b[2],b[4]*(1.4-virtualkeyPressTime[i]*.04))
|
gc.setColor(1,1,1,a*virtualkeyPressTime[i]*.1)
|
||||||
|
gc.circle("line",b[1],b[2],b[4]*(1.4-virtualkeyPressTime[i]*.04))
|
||||||
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
Pnt={}
|
Pnt={BG={}}
|
||||||
Pnt.BG={
|
function Pnt.BG.none()
|
||||||
none=function()
|
gc.clear(.15,.15,.15)
|
||||||
gc.clear(.2,.2,.2)
|
end
|
||||||
end,
|
function Pnt.BG.glow()
|
||||||
glow=function()
|
local t=((sin(Timer()*.5)+sin(Timer()*.7)+sin(Timer()*.9+1)+sin(Timer()*1.5)+sin(Timer()*2+3))+5)*.05
|
||||||
local t=((sin(Timer()*.5)+sin(Timer()*.7)+sin(Timer()*.9+1)+sin(Timer()*1.5)+sin(Timer()*2+3))+5)*.05
|
gc.clear(t,t,t)
|
||||||
gc.clear(t,t,t)
|
end
|
||||||
end,
|
function Pnt.BG.game1()
|
||||||
game1=function()
|
gc.setColor(1,1,1)
|
||||||
gc.setColor(1,1,1)
|
gc.draw(background1,640,360,Timer()*.15,12,nil,64,64)
|
||||||
gc.draw(background1,640,360,Timer()*.15,12,nil,64,64)
|
end
|
||||||
end,
|
function Pnt.BG.game2()
|
||||||
game2=function()
|
gc.setColor(1,.5,.5)
|
||||||
gc.setColor(1,.5,.5)
|
gc.draw(background1,640,360,Timer()*.2,12,nil,64,64)
|
||||||
gc.draw(background1,640,360,Timer()*.2,12,nil,64,64)
|
end
|
||||||
end,
|
function Pnt.BG.game3()
|
||||||
game3=function()
|
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.rgb()
|
||||||
rgb=function()
|
gc.clear(
|
||||||
gc.clear(
|
sin(Timer()*1.2)*.15+.5,
|
||||||
sin(Timer()*1.2)*.15+.5,
|
sin(Timer()*1.5)*.15+.5,
|
||||||
sin(Timer()*1.5)*.15+.5,
|
sin(Timer()*1.9)*.15+.5
|
||||||
sin(Timer()*1.9)*.15+.5
|
)
|
||||||
)
|
end
|
||||||
end,
|
function Pnt.BG.strap()
|
||||||
strap=function()
|
gc.setColor(1,1,1)
|
||||||
gc.setColor(1,1,1)
|
local x=Timer()%32*40
|
||||||
local x=Timer()%32*40
|
gc.draw(background2,x,0,nil,10)
|
||||||
gc.draw(background2,x,0,nil,10)
|
gc.draw(background2,x-1280,0,nil,10)
|
||||||
gc.draw(background2,x-1280,0,nil,10)
|
end
|
||||||
end,
|
local matrixT={}for i=0,15 do matrixT[i]={}for j=0,8 do matrixT[i][j]=mt.noise(i,j)+2 end end
|
||||||
matrix=function()
|
function Pnt.BG.matrix()
|
||||||
for i=0,15 do
|
gc.clear(.15,.15,.15)
|
||||||
for j=0,8 do
|
for i=0,15 do
|
||||||
-- local t=sin(Timer()*((2.468*i-1.357*j)%3))*.3
|
for j=0,8 do
|
||||||
local t=(sin((mt.noise(i,j)+2)*Timer())+1)*.2
|
local t=sin(matrixT[i][j]*Timer())*.2+.2
|
||||||
gc.setColor(t,t,t)
|
gc.setColor(1,1,1,t)
|
||||||
gc.rectangle("fill",80*i,80*j,80,80)
|
gc.rectangle("fill",80*i,80*j,80,80)
|
||||||
end
|
|
||||||
end
|
end
|
||||||
end,
|
end
|
||||||
}
|
end
|
||||||
|
|
||||||
function Pnt.load()
|
function Pnt.load()
|
||||||
gc.setLineWidth(4)
|
gc.setLineWidth(4)
|
||||||
gc.setColor(1,1,1,.5)
|
gc.setColor(1,1,1,.5)
|
||||||
gc.rectangle("fill",300,330,loadprogress*680,60)
|
gc.rectangle("fill",300,330,loadprogress*680,60,5)
|
||||||
gc.setColor(1,1,1)
|
gc.setColor(1,1,1)
|
||||||
gc.rectangle("line",300,330,680,60)
|
gc.rectangle("line",300,330,680,60,5)
|
||||||
setFont(40)
|
setFont(40)
|
||||||
mStr(text.load[loading],640,335)
|
mStr(text.load[loading],640,335)
|
||||||
setFont(25)
|
setFont(25)
|
||||||
@@ -256,20 +274,19 @@ function Pnt.intro()
|
|||||||
gc.setColor(1,1,1,min(count,80)*.005)
|
gc.setColor(1,1,1,min(count,80)*.005)
|
||||||
gc.rectangle("fill",0,0,26,14)
|
gc.rectangle("fill",0,0,26,14)
|
||||||
gc.pop()
|
gc.pop()
|
||||||
gc.setColor(1,1,1)
|
gc.setColor(1,1,1,.06)
|
||||||
gc.setColor(1,1,1,.125)
|
for i=41,5,-2 do
|
||||||
for i=19,5,-2 do
|
|
||||||
gc.setLineWidth(i)
|
gc.setLineWidth(i)
|
||||||
gc.line(250+(count-80)*25,150,(count-80)*25-150,570)
|
gc.line(200+(count-80)*25,130,(count-80)*25,590)
|
||||||
end
|
end
|
||||||
gc.setStencilTest()
|
gc.setStencilTest()
|
||||||
end
|
end
|
||||||
function Pnt.main()
|
function Pnt.main()
|
||||||
gc.setColor(1,1,1)
|
gc.setColor(1,1,1)
|
||||||
|
gc.draw(titleImage,300,30)
|
||||||
setFont(30)
|
setFont(30)
|
||||||
gc.print("Alpha V0.7.10",370,140)
|
gc.print("Alpha V0.7.14",290,140)
|
||||||
gc.print(system,530,110)
|
gc.print(system,800,110)
|
||||||
gc.draw(titleImage,30,30)
|
|
||||||
end
|
end
|
||||||
function Pnt.mode()
|
function Pnt.mode()
|
||||||
setFont(40)
|
setFont(40)
|
||||||
@@ -291,23 +308,54 @@ function Pnt.mode()
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
function Pnt.custom()
|
function Pnt.custom()
|
||||||
|
gc.setColor(1,1,1,.3+sin(Timer()*8)*.2)
|
||||||
|
gc.rectangle("fill",25,95+40*optSel,465,40)
|
||||||
setFont(80)
|
setFont(80)
|
||||||
gc.setColor(color.lightGrey)
|
gc.setColor(.8,.8,.8)gc.print(text.custom,20,20)
|
||||||
gc.print(text.custom,20,20)
|
gc.setColor(1,1,1)gc.print(text.custom,22,23)
|
||||||
gc.setColor(color.white)
|
|
||||||
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],50,y,300,"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[k]],350,y)
|
||||||
else
|
else
|
||||||
gc.print(customRange[k][customSel[k]],350,y)
|
gc.print(customRange[k][customSel[k]],350,y)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
gc.print("→",10,90+40*optSel)
|
end
|
||||||
|
function Pnt.draw()
|
||||||
|
gc.translate(200,60)
|
||||||
|
gc.setColor(1,1,1,.2)
|
||||||
|
gc.setLineWidth(1)
|
||||||
|
for x=1,9 do gc.line(30*x,0,30*x,600)end
|
||||||
|
for y=0,19 do gc.line(0,30*y,300,30*y)end
|
||||||
|
gc.setColor(1,1,1)
|
||||||
|
gc.setLineWidth(3)
|
||||||
|
gc.rectangle("line",-2,-2,304,604)
|
||||||
|
for y=1,20 do for x=1,10 do
|
||||||
|
if preField[y][x]>0 then
|
||||||
|
drawPixel(y,x,preField[y][x])
|
||||||
|
end
|
||||||
|
end end
|
||||||
|
if sx and sy then
|
||||||
|
gc.setLineWidth(2)
|
||||||
|
gc.rectangle("line",30*sx-30,600-30*sy,30,30)
|
||||||
|
end
|
||||||
|
gc.translate(-200,-60)
|
||||||
|
if clearSureTime>0 then
|
||||||
|
gc.setColor(1,1,1,clearSureTime*.02)
|
||||||
|
gc.draw(drawableText.question,1100,570)
|
||||||
|
end
|
||||||
|
if pen>0 then
|
||||||
|
gc.setLineWidth(13)
|
||||||
|
gc.setColor(blockColor[pen])
|
||||||
|
gc.rectangle("line",945,605,70,70)
|
||||||
|
else
|
||||||
|
gc.setColor(.8,.8,.8)
|
||||||
|
gc.draw(drawableText.x,950,560)
|
||||||
|
end
|
||||||
end
|
end
|
||||||
function Pnt.play()
|
function Pnt.play()
|
||||||
for p=1,#players do
|
for p=1,#players do
|
||||||
@@ -316,20 +364,22 @@ function Pnt.play()
|
|||||||
gc.push("transform")
|
gc.push("transform")
|
||||||
gc.translate(P.x,P.y)gc.scale(P.size)--Scale
|
gc.translate(P.x,P.y)gc.scale(P.size)--Scale
|
||||||
gc.setColor(0,0,0,.4)gc.rectangle("fill",0,0,60,120)--Black Background
|
gc.setColor(0,0,0,.4)gc.rectangle("fill",0,0,60,120)--Black Background
|
||||||
gc.stencil(stencil_field_small,"replace",1)
|
|
||||||
gc.translate(0,P.fieldBeneath*.2)
|
gc.translate(0,P.fieldBeneath*.2)
|
||||||
gc.setStencilTest("equal",1)
|
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.setColor(1,1,1,P.result and max(20-P.endCounter,0)*.05 or 1)
|
gc.setColor(1,1,1,P.result and max(20-P.endCounter,0)*.05 or 1)
|
||||||
|
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 P.falling<=0 or without(P.clearing,j)then
|
if j==P.clearing[h]and P.falling>-1 then
|
||||||
|
h=h-1
|
||||||
|
else
|
||||||
for i=1,10 do
|
for i=1,10 do
|
||||||
if P.field[j][i]>0 then
|
if P.field[j][i]>0 then
|
||||||
gc.draw(blockSkinmini[P.field[j][i]],6*i-6,120-6*j)
|
gc.draw(blockSkinmini[P.field[j][i]],6*i-6,120-6*j)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end--Field
|
||||||
gc.setStencilTest()--In-playField mask
|
gc.setScissor()
|
||||||
gc.translate(0,-P.fieldBeneath*.2)
|
gc.translate(0,-P.fieldBeneath*.2)
|
||||||
gc.setLineWidth(2)
|
gc.setLineWidth(2)
|
||||||
gc.setColor(frameColor[P.strength])gc.rectangle("line",-1,-1,62,122)--Draw boarder
|
gc.setColor(frameColor[P.strength])gc.rectangle("line",-1,-1,62,122)--Draw boarder
|
||||||
@@ -356,54 +406,81 @@ function Pnt.play()
|
|||||||
gc.setColor(0,0,0,.6)gc.rectangle("fill",0,0,600,690)--Black Background
|
gc.setColor(0,0,0,.6)gc.rectangle("fill",0,0,600,690)--Black 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)--Big frame
|
||||||
gc.stencil(stencil_field,"replace", 1)
|
gc.translate(150,70)
|
||||||
gc.translate(150,70+P.fieldBeneath)
|
if P.gameEnv.grid then
|
||||||
gc.setStencilTest("equal",1)
|
gc.setLineWidth(1)
|
||||||
|
gc.setColor(1,1,1,.2)
|
||||||
|
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
|
||||||
|
end--Grid lines
|
||||||
|
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)
|
||||||
|
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 P.falling<=0 or without(P.clearing,j)then
|
if j==P.clearing[h]and P.falling>-1 then
|
||||||
for i=1,10 do
|
h=h-1
|
||||||
if P.field[j][i]>0 then
|
|
||||||
drawPixel(j,i,P.field[j][i],min(P.visTime[j][i],20)*.05)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
else
|
|
||||||
gc.setColor(1,1,1,P.falling/P.gameEnv.fall)
|
gc.setColor(1,1,1,P.falling/P.gameEnv.fall)
|
||||||
gc.rectangle("fill",0,600-30*j,320,30)
|
gc.rectangle("fill",0,600-30*j,320,30)
|
||||||
|
else
|
||||||
|
for i=1,10 do
|
||||||
|
if P.field[j][i]>0 then
|
||||||
|
gc.setColor(1,1,1,min(P.visTime[j][i]*.05,1))
|
||||||
|
drawPixel(j,i,P.field[j][i])
|
||||||
|
end
|
||||||
|
end
|
||||||
end
|
end
|
||||||
end--Field
|
end--Field
|
||||||
if P.waiting<=0 then
|
for i=1,#P.shade do
|
||||||
|
local S=P.shade[i]
|
||||||
|
gc.setColor(1,1,1,S[1]*.12)
|
||||||
|
for x=S[3],S[5]do
|
||||||
|
for y=S[6],S[4]do
|
||||||
|
drawPixel(y,x,S[2])
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end--shade FX
|
||||||
|
if P.waiting==-1 then
|
||||||
if P.gameEnv.ghost then
|
if P.gameEnv.ghost then
|
||||||
|
gc.setColor(1,1,1,.3)
|
||||||
for i=1,P.r do for j=1,P.c do
|
for i=1,P.r do for j=1,P.c do
|
||||||
if P.cb[i][j]>0 then
|
if P.cur.bk[i][j]then
|
||||||
drawPixel(i+P.y_img-1,j+P.cx-1,P.bc,.3)
|
drawPixel(i+P.y_img-1,j+P.curX-1,P.cur.color)
|
||||||
end
|
end
|
||||||
end end
|
end end
|
||||||
end--Ghost
|
end--Ghost
|
||||||
gc.setColor(1,1,1,P.lockDelay/P.gameEnv.lock)
|
if P.gameEnv.block then
|
||||||
for i=1,P.r do for j=1,P.c do
|
gc.setColor(1,1,1,P.lockDelay/P.gameEnv.lock)
|
||||||
if P.cb[i][j]>0 then
|
for i=1,P.r do for j=1,P.c do
|
||||||
gc.rectangle("fill",30*(j+P.cx-1)-34,596-30*(i+P.cy-1),38,38)
|
if P.cur.bk[i][j]then
|
||||||
end
|
gc.rectangle("fill",30*(j+P.curX-1)-33,597-30*(i+P.curY-1),36,36)
|
||||||
end end--BlockShade(lockdelay indicator)
|
end
|
||||||
for i=1,P.r do for j=1,P.c do
|
end end--BlockShade(lockdelay indicator)
|
||||||
if P.cb[i][j]>0 then
|
gc.setColor(1,1,1)
|
||||||
drawPixel(i+P.cy-1,j+P.cx-1,P.bc,1)
|
for i=1,P.r do for j=1,P.c do
|
||||||
end
|
if P.cur.bk[i][j]then
|
||||||
end end--Block
|
drawPixel(i+P.curY-1,j+P.curX-1,P.cur.color)
|
||||||
|
end
|
||||||
|
end end--Block
|
||||||
|
end
|
||||||
if P.gameEnv.center then
|
if P.gameEnv.center then
|
||||||
local x=30*(P.cx+P.sc[2]-1)-30+15
|
gc.setColor(1,1,1)
|
||||||
gc.draw(spinCenter,x,600-30*(P.cy+P.sc[1]-1)+15,nil,nil,nil,4,4)
|
local x=30*(P.curX+P.sc[2]-1)-30+15
|
||||||
|
gc.draw(spinCenter,x,600-30*(P.curY+P.sc[1]-1)+15,nil,nil,nil,4,4)
|
||||||
gc.setColor(1,1,1,.5)
|
gc.setColor(1,1,1,.5)
|
||||||
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.setColor(1,1,1)
|
||||||
gc.draw(PTC.dust[p])--Draw game field
|
gc.draw(PTC.dust[p])
|
||||||
gc.setStencilTest()--In-playField mask
|
--Draw game field
|
||||||
|
gc.setScissor()--In-playField mask
|
||||||
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.setColor(1,1,1)
|
||||||
|
gc.rectangle("line",-1,-11,302,612)--Draw boarder
|
||||||
|
|
||||||
|
gc.setLineWidth(2)
|
||||||
|
gc.rectangle("line",301,0,16,601.5)--Draw atkBuffer boarder
|
||||||
local h=0
|
local h=0
|
||||||
for i=1,#P.atkBuffer do
|
for i=1,#P.atkBuffer do
|
||||||
local a=P.atkBuffer[i]
|
local a=P.atkBuffer[i]
|
||||||
@@ -416,59 +493,63 @@ function Pnt.play()
|
|||||||
end
|
end
|
||||||
if a.countdown>0 then
|
if a.countdown>0 then
|
||||||
gc.setColor(attackColor[a.lv][1])
|
gc.setColor(attackColor[a.lv][1])
|
||||||
gc.rectangle("fill",304,600-h,12,-bar+3)
|
gc.rectangle("fill",304,599-h,11,-bar+3)
|
||||||
gc.setColor(attackColor[a.lv][2])
|
gc.setColor(attackColor[a.lv][2])
|
||||||
gc.rectangle("fill",304,600-h+(-bar+3),12,-(-bar+3)*(1-a.countdown/a.cd0))
|
gc.rectangle("fill",304,599-h+(-bar+3),11,-(-bar+3)*(1-a.countdown/a.cd0))
|
||||||
--Timing
|
--Timing
|
||||||
else
|
else
|
||||||
attackColor.animate[a.lv]((sin((Timer()-i)*20)+1)*.5)
|
local t=sin((Timer()-i)*30)*.5+.5
|
||||||
gc.rectangle("fill",304,600-h,12,-bar+3)
|
local c1,c2=attackColor[a.lv][1],attackColor[a.lv][2]
|
||||||
|
gc.setColor(c1[1]*t+c2[1]*(1-t),c1[2]*t+c2[2]*(1-t),c1[3]*t+c2[3]*(1-t))
|
||||||
|
gc.rectangle("fill",304,599-h,11,-bar+3)
|
||||||
--Warning
|
--Warning
|
||||||
end
|
end
|
||||||
else
|
else
|
||||||
gc.setColor(attackColor[a.lv][1])
|
gc.setColor(attackColor[a.lv][1])
|
||||||
bar=bar*(20-a.time)*.05
|
bar=bar*(20-a.time)*.05
|
||||||
gc.rectangle("fill",304,600-h,12,-bar+2)
|
gc.rectangle("fill",304,599-h,11,-bar+2)
|
||||||
--Disappear
|
--Disappear
|
||||||
end
|
end
|
||||||
h=h+bar
|
h=h+bar
|
||||||
end--Buffer line
|
end--Buffer line
|
||||||
|
local a,b=P.b2b,P.b2b1 if a>b then a,b=b,a end
|
||||||
gc.setColor(P.b2b<40 and color.white or P.b2b<=480 and color.lightRed or color.lightBlue)
|
gc.setColor(.8,1,.2)
|
||||||
gc.rectangle("fill",-13,600,10,-P.b2b1)
|
gc.rectangle("fill",-15,599.5,11,-b*.5)
|
||||||
gc.setColor(color.red)
|
gc.setColor(P.b2b<40 and color.white or P.b2b<=1e3 and color.lightRed or color.lightBlue)
|
||||||
gc.rectangle("fill",-19,600-40,16,5)
|
gc.rectangle("fill",-15,599.5,11,-a*.5)
|
||||||
gc.setColor(color.blue)
|
gc.setColor(1,1,1,.5+sin(Timer()*30)*.5)
|
||||||
gc.rectangle("fill",-19,600-480,16,5)
|
gc.rectangle("fill",-16,b<40 and 578.5 or 98.5,13,3)
|
||||||
--B2B bar
|
|
||||||
|
|
||||||
setFont(40)
|
|
||||||
gc.setColor(1,1,1)
|
gc.setColor(1,1,1)
|
||||||
|
gc.rectangle("line",-17,-3,16,604.5)--Draw b2b bar boarder
|
||||||
|
--B2B indictator
|
||||||
|
|
||||||
if P.gameEnv.hold then
|
if P.gameEnv.hold then
|
||||||
mStr(text.hold,-75,-10)
|
gc.draw(drawableText.hold,-75-drawableText.hold:getWidth()*.5,-10)
|
||||||
for i=1,#P.hb do
|
gc.setColor(1,1,1)
|
||||||
for j=1,#P.hb[1] do
|
for i=1,#P.hold.bk do
|
||||||
if P.hb[i][j]>0 then
|
for j=1,#P.hold.bk[1] do
|
||||||
drawPixel(i+17.5-#P.hb*.5,j-2.5-#P.hb[1]*.5,P.holded and 13 or P.hc,1)
|
if P.hold.bk[i][j]then
|
||||||
|
drawPixel(i+17.5-#P.hold.bk*.5,j-2.5-#P.hold.bk[1]*.5,P.holded and 9 or P.hold.color)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end--Hold
|
end--Hold
|
||||||
gc.print(text.next,325,-10)
|
gc.draw(drawableText.next,382-drawableText.next:getWidth()*.5,-10)
|
||||||
for N=1,P.gameEnv.next do
|
local N=1
|
||||||
local b=P.nb[N]
|
::L::
|
||||||
for i=1,#b do
|
local b,c=P.next[N].bk,P.next[N].color
|
||||||
for j=1,#b[1] do
|
gc.setColor(1,1,1)
|
||||||
if b[i][j]>0 then
|
for i=1,#b do for j=1,#b[1] do
|
||||||
drawPixel(i+20-2.4*N-#b*.5,j+12.5-#b[1]*.5,P.nxt[N],1)
|
if b[i][j]then
|
||||||
end
|
drawPixel(i+20-2.4*N-#b*.5,j+12.7-#b[1]*.5,c)
|
||||||
end
|
end
|
||||||
end
|
end end
|
||||||
end--Next
|
N=N+1
|
||||||
setFont(30)
|
if N<=P.gameEnv.next and P.next[N]then goto L end
|
||||||
|
--Next
|
||||||
gc.setColor(.8,.8,.8)
|
gc.setColor(.8,.8,.8)
|
||||||
gc.print(curMode.modeName,-135,-65)
|
gc.draw(drawableText.modeName,-135,-65)
|
||||||
gc.printf(curMode.levelName,240,-65,200,"right")
|
gc.draw(drawableText.levelName,437-drawableText.levelName:getWidth(),-65)
|
||||||
if frame<180 then
|
if frame<180 then
|
||||||
local count=179-frame
|
local count=179-frame
|
||||||
gc.push("transform")
|
gc.push("transform")
|
||||||
@@ -489,9 +570,8 @@ function Pnt.play()
|
|||||||
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)
|
||||||
setFont(15)
|
gc.draw(drawableText.bpm,390,490)
|
||||||
gc.print("BPM",390,490)
|
gc.draw(drawableText.kpm,350,583)
|
||||||
gc.print("KPM",350,583)
|
|
||||||
setFont(30)
|
setFont(30)
|
||||||
drawDial(360,520,P.dropSpeed)
|
drawDial(360,520,P.dropSpeed)
|
||||||
drawDial(405,575,P.keySpeed)
|
drawDial(405,575,P.keySpeed)
|
||||||
@@ -508,18 +588,16 @@ function Pnt.play()
|
|||||||
end
|
end
|
||||||
end--Draw players
|
end--Draw players
|
||||||
gc.setColor(1,1,1)
|
gc.setColor(1,1,1)
|
||||||
for i=1,3 do
|
gc.draw(PTC.attack[1])
|
||||||
gc.draw(PTC.attack[i])
|
gc.draw(PTC.attack[2])
|
||||||
end
|
gc.draw(PTC.attack[3])
|
||||||
if setting.virtualkeySwitch then
|
if setting.virtualkeySwitch then drawVirtualkey()end
|
||||||
drawVirtualkey()
|
|
||||||
end
|
|
||||||
if modeEnv.royaleMode then
|
if modeEnv.royaleMode then
|
||||||
for i=1,#FX.badge do
|
for i=1,#FX.badge do
|
||||||
local b=FX.badge[i]
|
local b=FX.badge[i]
|
||||||
local t=b.t<10 and 0 or b.t<50 and(sin(1.5*(b.t/20-1.5))+1)*.5 or 1
|
local t=b.t<10 and 0 or b.t<50 and .5+sin(1.5*(b.t/20-1.5))*.5 or 1
|
||||||
gc.setColor(1,1,1,b.t<10 and b.t*.1 or b.t<50 and 1 or(60-b.t)*.1)
|
gc.setColor(1,1,1,b.t<10 and b.t*.1 or b.t<50 and 1 or(60-b.t)*.1)
|
||||||
gc.draw(badgeIcon,b[1]+(b[3]-b[1])*t,b[2]+(b[4]-b[2])*t,nil,b.size,nil,14,14)
|
gc.draw(badgeIcon,b[1]+(b[3]-b[1])*t,b[2]+(b[4]-b[2])*t,nil,nil,nil,14,14)
|
||||||
end
|
end
|
||||||
P=players[1]
|
P=players[1]
|
||||||
gc.setLineWidth(5)
|
gc.setLineWidth(5)
|
||||||
@@ -541,30 +619,31 @@ 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,288,158)
|
mStr("DAS:"..setting.das,290,278)
|
||||||
mStr("ARR:"..setting.arr,503,158)
|
mStr("ARR:"..setting.arr,506,278)
|
||||||
setFont(18)
|
setFont(18)
|
||||||
mStr(text.softdropdas..setting.sddas,288,249)
|
mStr(text.softdropdas..setting.sddas,290,361)
|
||||||
mStr(text.softdroparr..setting.sdarr,503,249)
|
mStr(text.softdroparr..setting.sdarr,506,361)
|
||||||
end
|
end
|
||||||
function Pnt.setting2()
|
function Pnt.setting2()
|
||||||
|
local a=.3+sin(Timer()*15)*.1
|
||||||
if keyboardSetting then
|
if keyboardSetting then
|
||||||
gc.setColor(1,.5,.5,.2+(sin(Timer()*15)+1)*.1)
|
gc.setColor(1,.5,.5,a)
|
||||||
else
|
else
|
||||||
gc.setColor(.9,.9,.9,.2+(sin(Timer()*15)+1)*.1)
|
gc.setColor(.9,.9,.9,a)
|
||||||
end
|
end
|
||||||
gc.rectangle("fill",240,40*keyboardSet-10,200,40)
|
gc.rectangle("fill",240,40*keyboardSet-10,200,40)
|
||||||
if joystickSetting then
|
if joystickSetting then
|
||||||
gc.setColor(1,.5,.5,.2+(sin(Timer()*15)+1)*.1)
|
gc.setColor(1,.5,.5,a)
|
||||||
else
|
else
|
||||||
gc.setColor(.9,.9,.9,.2+(sin(Timer()*15)+1)*.1)
|
gc.setColor(.9,.9,.9,a)
|
||||||
end
|
end
|
||||||
gc.rectangle("fill",440,40*joystickSet-10,200,40)
|
gc.rectangle("fill",440,40*joystickSet-10,200,40)
|
||||||
|
|
||||||
gc.setColor(1,1,1)
|
gc.setColor(1,1,1)
|
||||||
setFont(25)
|
setFont(25)
|
||||||
for y=1,13 do
|
for y=1,13 do
|
||||||
mStr(text.actName[y],150,40*y)
|
mStr(text.actName[y],150,40*y-5)
|
||||||
for x=1,2 do
|
for x=1,2 do
|
||||||
mStr(setting.keyMap[curBoard+x*8-8][y],200*x+140,40*y-3)
|
mStr(setting.keyMap[curBoard+x*8-8][y],200*x+140,40*y-3)
|
||||||
end
|
end
|
||||||
@@ -574,8 +653,8 @@ 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)
|
||||||
gc.print(text.keyboard,335,1)
|
mStr(text.keyboard,340,0)
|
||||||
gc.print(text.joystick,420,1)
|
mStr(text.joystick,540,0)
|
||||||
gc.print(text.setting2Help,50,620)
|
gc.print(text.setting2Help,50,620)
|
||||||
setFont(40)
|
setFont(40)
|
||||||
gc.print("< P"..curBoard.."/P8 >",430,570)
|
gc.print("< P"..curBoard.."/P8 >",430,570)
|
||||||
@@ -601,17 +680,21 @@ function Pnt.help()
|
|||||||
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,180,600,.2,.7+.05*sin(Timer()*2),nil,140,100)
|
||||||
|
gc.draw(payCode,20,20)
|
||||||
|
gc.draw(groupCode,1080,20)
|
||||||
|
gc.setColor(1,1,1,sin(Timer()*10)*.5+.5)
|
||||||
|
setFont(35)
|
||||||
|
mStr(text.support,150,283)
|
||||||
|
setFont(25)
|
||||||
|
mStr(text.group,1170,210)
|
||||||
end
|
end
|
||||||
function Pnt.stat()
|
function Pnt.stat()
|
||||||
setFont(35)
|
setFont(35)
|
||||||
gc.setColor(1,1,1)
|
gc.setColor(1,1,1)
|
||||||
for i=1,10 do
|
for i=1,10 do gc.print(text.stat[i],350,20+40*i)end
|
||||||
gc.print(text.stat[i],350,20+40*i)
|
|
||||||
end
|
|
||||||
|
|
||||||
gc.print(stat.run,650,60)
|
gc.print(stat.run,650,60)
|
||||||
gc.print(stat.game,650,100)
|
gc.print(stat.game,650,100)
|
||||||
gc.print(format("%0.2f",stat.gametime).."s",650,140)
|
gc.print(format("%0.1fhr",stat.gametime*2.78e-4),650,140)
|
||||||
gc.print(stat.piece,650,180)
|
gc.print(stat.piece,650,180)
|
||||||
gc.print(stat.row,650,220)
|
gc.print(stat.row,650,220)
|
||||||
gc.print(stat.atk,650,260)
|
gc.print(stat.atk,650,260)
|
||||||
@@ -619,6 +702,5 @@ function Pnt.stat()
|
|||||||
gc.print(stat.rotate,650,340)
|
gc.print(stat.rotate,650,340)
|
||||||
gc.print(stat.hold,650,380)
|
gc.print(stat.hold,650,380)
|
||||||
gc.print(stat.spin,650,420)
|
gc.print(stat.spin,650,420)
|
||||||
|
|
||||||
gc.draw(titleImage,260,570,.2+.07*sin(Timer()*3),.8,nil,250,60)
|
gc.draw(titleImage,260,570,.2+.07*sin(Timer()*3),.8,nil,250,60)
|
||||||
end
|
end
|
||||||
112
texture.lua
112
texture.lua
@@ -1,12 +1,13 @@
|
|||||||
local N=gc.newImage
|
local gc=love.graphics
|
||||||
function C(x,y)
|
local N,c=gc.newImage
|
||||||
|
local function T(s,t)return gc.newText(setFont(s),t)end
|
||||||
|
local function C(x,y)
|
||||||
c=gc.newCanvas(x,y)
|
c=gc.newCanvas(x,y)
|
||||||
gc.setCanvas(c)
|
gc.setCanvas(c)
|
||||||
return c
|
return c
|
||||||
end
|
end
|
||||||
|
|
||||||
gc.setDefaultFilter("nearest","nearest")
|
gc.setDefaultFilter("nearest","nearest")
|
||||||
|
|
||||||
local blockImg=N("/image/block/1.png")
|
local blockImg=N("/image/block/1.png")
|
||||||
blockSkin,blockSkinmini={},{}
|
blockSkin,blockSkinmini={},{}
|
||||||
for i=1,13 do
|
for i=1,13 do
|
||||||
@@ -17,21 +18,8 @@ for i=1,13 do
|
|||||||
gc.draw(blockImg,6-6*i,0,nil,.2)
|
gc.draw(blockImg,6-6*i,0,nil,.2)
|
||||||
blockSkinmini[i]=c
|
blockSkinmini[i]=c
|
||||||
end
|
end
|
||||||
for i=1,13 do
|
|
||||||
end
|
|
||||||
blockImg:release()
|
blockImg:release()
|
||||||
|
|
||||||
RCPB={10,33,200,33,105,5,105,60}
|
|
||||||
do royaleCtrlPad=C(300,100)
|
|
||||||
gc.setColor(1,1,1)
|
|
||||||
setFont(25)
|
|
||||||
gc.setLineWidth(2)
|
|
||||||
for i=1,4 do
|
|
||||||
gc.rectangle("line",RCPB[2*i-1],RCPB[2*i],90,35,8,4)
|
|
||||||
mStr(atkModeName[i],RCPB[2*i-1]+45,RCPB[2*i]+3)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
virtualkeyIcon={}
|
virtualkeyIcon={}
|
||||||
for i=1,10 do
|
for i=1,10 do
|
||||||
virtualkeyIcon[i]=N("/image/virtualkey/"..actName[i]..".png")
|
virtualkeyIcon[i]=N("/image/virtualkey/"..actName[i]..".png")
|
||||||
@@ -43,8 +31,8 @@ for i=1,7 do
|
|||||||
local b=blocks[i][0]
|
local b=blocks[i][0]
|
||||||
mouseBlock[i]=C(#b[1],#b)
|
mouseBlock[i]=C(#b[1],#b)
|
||||||
gc.setColor(blockColor[i])
|
gc.setColor(blockColor[i])
|
||||||
for x=1,#b[1]do for y=1,#b do
|
for y=1,#b do for x=1,#b[1]do
|
||||||
if b[y][x]==1 then
|
if b[y][x]then
|
||||||
gc.rectangle("fill",x-1,#b-y,1,1)
|
gc.rectangle("fill",x-1,#b-y,1,1)
|
||||||
end
|
end
|
||||||
end end
|
end end
|
||||||
@@ -87,77 +75,21 @@ dialCircle=N("/image/mess/dialCircle.png")
|
|||||||
dialNeedle=N("/image/mess/dialNeedle.png")
|
dialNeedle=N("/image/mess/dialNeedle.png")
|
||||||
badgeIcon=N("/image/mess/badge.png")
|
badgeIcon=N("/image/mess/badge.png")
|
||||||
spinCenter=N("/image/mess/spinCenter.png")
|
spinCenter=N("/image/mess/spinCenter.png")
|
||||||
|
lightBulb=N("/image/mess/lightBulb.png")
|
||||||
|
light=N("/image/mess/light.png")
|
||||||
|
|
||||||
background1=N("/image/BG/bg1.jpg")
|
background1=N("/image/BG/bg1.jpg")
|
||||||
background2=N("/image/BG/bg2.png")
|
background2=N("/image/BG/bg2.png")
|
||||||
|
groupCode=N("/image/mess/groupcode.png")
|
||||||
c=nil
|
payCode=N("/image/mess/paycode.png")
|
||||||
gc.setCanvas()
|
drawableText={
|
||||||
|
question=T(100,"?"),
|
||||||
sceneInit={
|
x=T(110,"×"),
|
||||||
load=function()
|
bpm=T(15,"BPM"),
|
||||||
curBG="none"
|
kpm=T(15,"KPM"),
|
||||||
keeprun=true
|
modeName=T(30),
|
||||||
loading=1--Loading mode
|
levelName=T(30),
|
||||||
loadnum=1--Loading counter
|
next=T(40),
|
||||||
loadprogress=0--Loading bar(0~1)
|
hold=T(40),
|
||||||
end,
|
}
|
||||||
intro=function()
|
c=gc.setCanvas()
|
||||||
curBG="none"
|
|
||||||
count=0
|
|
||||||
keeprun=true
|
|
||||||
end,
|
|
||||||
main=function()
|
|
||||||
curBG="none"
|
|
||||||
keeprun=true
|
|
||||||
collectgarbage()
|
|
||||||
end,
|
|
||||||
mode=function()
|
|
||||||
saveData()
|
|
||||||
modeSel=modeSel or 1
|
|
||||||
levelSel=levelSel or 3
|
|
||||||
curBG="none"
|
|
||||||
keeprun=true
|
|
||||||
end,
|
|
||||||
custom=function()
|
|
||||||
optSel=optSel or 1
|
|
||||||
curBG="matrix"
|
|
||||||
keeprun=true
|
|
||||||
end,
|
|
||||||
play=function()
|
|
||||||
keeprun=false
|
|
||||||
resetGameData()
|
|
||||||
sysSFX("ready")
|
|
||||||
mouseShow=false
|
|
||||||
end,
|
|
||||||
setting=function()
|
|
||||||
curBG="none"
|
|
||||||
keeprun=true
|
|
||||||
end,
|
|
||||||
setting2=function()
|
|
||||||
curBG="none"
|
|
||||||
keeprun=true
|
|
||||||
curBoard=1
|
|
||||||
keyboardSet=1
|
|
||||||
joystickSet=1
|
|
||||||
keyboardSetting=false
|
|
||||||
joystickSetting=false
|
|
||||||
end,--Control settings
|
|
||||||
setting3=function()
|
|
||||||
curBG="game1"
|
|
||||||
keeprun=true
|
|
||||||
defaultSel=1
|
|
||||||
sel=nil
|
|
||||||
snapLevel=1
|
|
||||||
end,--Touch setting
|
|
||||||
help=function()
|
|
||||||
curBG="none"
|
|
||||||
keeprun=true
|
|
||||||
end,
|
|
||||||
stat=function()
|
|
||||||
curBG="none"
|
|
||||||
keeprun=true
|
|
||||||
end,
|
|
||||||
quit=function()
|
|
||||||
love.event.quit()
|
|
||||||
end,
|
|
||||||
}
|
|
||||||
177
timer.lua
177
timer.lua
@@ -1,10 +1,12 @@
|
|||||||
|
local Timer=love.timer.getTime
|
||||||
|
|
||||||
Tmr={}
|
Tmr={}
|
||||||
function Tmr.load()
|
function Tmr.load()
|
||||||
if loading==1 then
|
if loading==1 then
|
||||||
loadnum=loadnum+1
|
loadnum=loadnum+1
|
||||||
loadprogress=loadnum/10
|
loadprogress=loadnum/10
|
||||||
if loadnum==5 then
|
if loadnum==5 then
|
||||||
--require("load_texture")
|
--require("texture")
|
||||||
elseif loadnum==10 then
|
elseif loadnum==10 then
|
||||||
loadnum=1
|
loadnum=1
|
||||||
loading=2
|
loading=2
|
||||||
@@ -13,6 +15,7 @@ function Tmr.load()
|
|||||||
if loadnum<=#bgm then
|
if loadnum<=#bgm then
|
||||||
bgm[bgm[loadnum]]=love.audio.newSource("/BGM/"..bgm[loadnum]..".ogg","stream")
|
bgm[bgm[loadnum]]=love.audio.newSource("/BGM/"..bgm[loadnum]..".ogg","stream")
|
||||||
bgm[bgm[loadnum]]:setLooping(true)
|
bgm[bgm[loadnum]]:setLooping(true)
|
||||||
|
bgm[bgm[loadnum]]:setVolume(0)
|
||||||
loadprogress=loadnum/#bgm
|
loadprogress=loadnum/#bgm
|
||||||
loadnum=loadnum+1
|
loadnum=loadnum+1
|
||||||
else
|
else
|
||||||
@@ -42,6 +45,9 @@ function Tmr.intro()
|
|||||||
count=count+1
|
count=count+1
|
||||||
if count==200 then count=80 end
|
if count==200 then count=80 end
|
||||||
end
|
end
|
||||||
|
function Tmr.draw()
|
||||||
|
if clearSureTime>0 then clearSureTime=clearSureTime-1 end
|
||||||
|
end
|
||||||
function Tmr.play(dt)
|
function Tmr.play(dt)
|
||||||
frame=frame+1
|
frame=frame+1
|
||||||
stat.gametime=stat.gametime+dt
|
stat.gametime=stat.gametime+dt
|
||||||
@@ -69,10 +75,9 @@ function Tmr.play(dt)
|
|||||||
virtualkeyPressTime[i]=virtualkeyPressTime[i]-1
|
virtualkeyPressTime[i]=virtualkeyPressTime[i]-1
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
for i=1,3 do
|
PTC.attack[1]:update(dt)
|
||||||
PTC.attack[i]:update(dt)
|
PTC.attack[2]:update(dt)
|
||||||
end
|
PTC.attack[3]:update(dt)
|
||||||
|
|
||||||
if frame<180 then
|
if frame<180 then
|
||||||
if frame==179 then
|
if frame==179 then
|
||||||
gameStart()
|
gameStart()
|
||||||
@@ -82,24 +87,33 @@ function Tmr.play(dt)
|
|||||||
for p=1,#players do
|
for p=1,#players do
|
||||||
P=players[p]
|
P=players[p]
|
||||||
if P.keyPressing[1]or P.keyPressing[2]then
|
if P.keyPressing[1]or P.keyPressing[2]then
|
||||||
P.moving=P.moving+sgn(P.moving)
|
P.moving=P.moving+(P.moving>0 and 1 or -1)
|
||||||
else
|
else
|
||||||
P.moving=0
|
P.moving=0
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
return
|
return
|
||||||
end--Counting,include pre-das
|
end--Counting,include pre-das,directy RETURN
|
||||||
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.time=P.time+dt end
|
||||||
if P.alive then
|
if P.alive then
|
||||||
local v=0
|
if not P.small then
|
||||||
for i=2,10 do v=v+i*(i-1)*7.2/(frame-P.keyTime[i])end P.keySpeed=P.keySpeed*.99+v*.1
|
local v=0
|
||||||
v=0
|
for i=2,10 do v=v+i*(i-1)*7.2/(frame-P.keyTime[i])end P.keySpeed=P.keySpeed*.99+v*.1
|
||||||
for i=2,10 do v=v+i*(i-1)*7.2/(frame-P.dropTime[i])end P.dropSpeed=P.dropSpeed*.99+v*.1
|
v=0
|
||||||
--Update speeds
|
for i=2,10 do v=v+i*(i-1)*7.2/(frame-P.dropTime[i])end P.dropSpeed=P.dropSpeed*.99+v*.1
|
||||||
|
--Update speeds
|
||||||
|
if modeEnv.royaleMode then
|
||||||
|
if P.keyPressing[9]then
|
||||||
|
P.swappingAtkMode=min(P.swappingAtkMode+2,30)
|
||||||
|
else
|
||||||
|
P.swappingAtkMode=P.swappingAtkMode+((#P.field>15 and P.swappingAtkMode>4 or P.swappingAtkMode>8)and -1 or 1)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
if P.ai and P.waiting<=0 then
|
if P.ai and P.waiting==-1 then
|
||||||
P.ai.controlDelay=P.ai.controlDelay-1
|
P.ai.controlDelay=P.ai.controlDelay-1
|
||||||
if P.ai.controlDelay==0 then
|
if P.ai.controlDelay==0 then
|
||||||
if #P.ai.controls>0 then
|
if #P.ai.controls>0 then
|
||||||
@@ -110,16 +124,22 @@ 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
|
||||||
|
P.cstat.point=Timer()
|
||||||
|
P.cstat.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)
|
||||||
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
if not P.keepVisible then
|
||||||
|
for j=1,#P.field do for i=1,10 do
|
||||||
|
if P.visTime[j][i]>0 then P.visTime[j][i]=P.visTime[j][i]-1 end
|
||||||
|
end end
|
||||||
|
end--Fresh visible time
|
||||||
|
|
||||||
for j=1,#P.field do for i=1,10 do
|
|
||||||
if P.visTime[j][i]>0 then P.visTime[j][i]=P.visTime[j][i]-1 end
|
|
||||||
end end
|
|
||||||
--Fresh visible time
|
|
||||||
if P.keyPressing[1]or P.keyPressing[2]then
|
if P.keyPressing[1]or P.keyPressing[2]then
|
||||||
P.moving=P.moving+sgn(P.moving)
|
P.moving=P.moving+(P.moving>0 and 1 or -1)
|
||||||
local d=abs(P.moving)-P.gameEnv.das
|
local d=abs(P.moving)-P.gameEnv.das
|
||||||
if d>1 then
|
if d>1 then
|
||||||
if P.gameEnv.arr>0 then
|
if P.gameEnv.arr>0 then
|
||||||
@@ -134,8 +154,8 @@ function Tmr.play(dt)
|
|||||||
P.moving=0
|
P.moving=0
|
||||||
end
|
end
|
||||||
if P.keyPressing[7]and not P.keyPressing[9]then
|
if P.keyPressing[7]and not P.keyPressing[9]then
|
||||||
P.downing=P.downing+1
|
|
||||||
local d=abs(P.downing)-P.gameEnv.sddas
|
local d=abs(P.downing)-P.gameEnv.sddas
|
||||||
|
P.downing=P.downing+1
|
||||||
if d>1 then
|
if d>1 then
|
||||||
if P.gameEnv.sdarr>0 then
|
if P.gameEnv.sdarr>0 then
|
||||||
if d%P.gameEnv.sdarr==0 then
|
if d%P.gameEnv.sdarr==0 then
|
||||||
@@ -148,76 +168,82 @@ function Tmr.play(dt)
|
|||||||
else
|
else
|
||||||
P.downing=0
|
P.downing=0
|
||||||
end
|
end
|
||||||
if modeEnv.royaleMode then
|
if P.falling>=0 then
|
||||||
if P.keyPressing[9]then
|
|
||||||
P.swappingAtkMode=min(P.swappingAtkMode+2,30)
|
|
||||||
else
|
|
||||||
P.swappingAtkMode=P.swappingAtkMode+((#P.field>15 and P.swappingAtkMode>4 or P.swappingAtkMode>8)and -1 or 1)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
if P.falling>0 then
|
|
||||||
P.falling=P.falling-1
|
P.falling=P.falling-1
|
||||||
if P.falling<=0 then
|
if P.falling>=0 then goto stop end
|
||||||
if #P.field>P.clearing[1]then SFX("fall")end
|
if 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])
|
||||||
end
|
|
||||||
::L::if P.clearing[1]then
|
|
||||||
rem(P.clearing)
|
|
||||||
goto L
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
elseif P.waiting>0 then
|
::L::
|
||||||
|
rem(P.clearing)
|
||||||
|
if P.clearing[1]then goto L end
|
||||||
|
end
|
||||||
|
if P.waiting>=0 then
|
||||||
P.waiting=P.waiting-1
|
P.waiting=P.waiting-1
|
||||||
if P.waiting<=0 then
|
if P.waiting==-1 then resetblock()end
|
||||||
resetblock()
|
goto stop
|
||||||
|
end
|
||||||
|
if P.curY~=P.y_img then
|
||||||
|
if P.dropDelay>=0 then
|
||||||
|
P.dropDelay=P.dropDelay-1
|
||||||
|
if P.dropDelay>=0 then goto stop end
|
||||||
|
end
|
||||||
|
drop()
|
||||||
|
P.dropDelay=P.gameEnv.drop
|
||||||
|
if P.freshTime<=P.gameEnv.freshLimit then
|
||||||
|
P.lockDelay=P.gameEnv.lock
|
||||||
end
|
end
|
||||||
else
|
else
|
||||||
if P.cy~=P.y_img then
|
P.lockDelay=P.lockDelay-1
|
||||||
if P.dropDelay>0 then
|
if P.lockDelay>=0 then goto stop end
|
||||||
P.dropDelay=P.dropDelay-1
|
drop()
|
||||||
else
|
end
|
||||||
drop()
|
::stop::
|
||||||
P.dropDelay=P.gameEnv.drop
|
if P.b2b1==P.b2b then
|
||||||
if P.freshTime<=P.gameEnv.freshLimit then
|
elseif P.b2b1<P.b2b then
|
||||||
P.lockDelay=P.gameEnv.lock
|
P.b2b1=min(P.b2b1*.98+P.b2b*.02+.4,P.b2b)
|
||||||
end
|
else
|
||||||
end
|
P.b2b1=max(P.b2b1*.95+P.b2b*.05-.6,P.b2b)
|
||||||
else
|
|
||||||
if P.lockDelay>0 then P.lockDelay=P.lockDelay-1
|
|
||||||
else drop()
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
P.b2b1=P.b2b1*.92+P.b2b*.08
|
|
||||||
--Alive
|
--Alive
|
||||||
else
|
else
|
||||||
P.keySpeed=P.keySpeed*.96+P.cstat.key/P.time*60*.04
|
if not P.small then
|
||||||
P.dropSpeed=P.dropSpeed*.96+P.cstat.piece/P.time*60*.04
|
P.keySpeed=P.keySpeed*.96+P.cstat.key/P.time*60*.04
|
||||||
--Final average speeds
|
P.dropSpeed=P.dropSpeed*.96+P.cstat.piece/P.time*60*.04
|
||||||
if P.falling>0 then
|
--Final average speeds
|
||||||
P.falling=P.falling-1
|
if modeEnv.royaleMode then
|
||||||
if P.falling<=0 then
|
P.swappingAtkMode=min(P.swappingAtkMode+2,30)
|
||||||
if #P.field>P.clearing[1]then
|
|
||||||
SFX("fall")
|
|
||||||
if P.id==1 then VIB(1)end
|
|
||||||
end
|
|
||||||
for i=1,#P.clearing do
|
|
||||||
removeRow(P.field,P.clearing[i])
|
|
||||||
removeRow(P.visTime,P.clearing[i])
|
|
||||||
end
|
|
||||||
P.clearing={}
|
|
||||||
end
|
end
|
||||||
end--Rows cleared drop
|
end
|
||||||
|
if P.falling>=0 then
|
||||||
|
P.falling=P.falling-1
|
||||||
|
if P.falling>=0 then goto stop end
|
||||||
|
if P.gameEnv.fall>0 and #P.field>P.clearing[1]then SFX("fall")end
|
||||||
|
for i=1,#P.clearing do
|
||||||
|
removeRow(P.field,P.clearing[i])
|
||||||
|
removeRow(P.visTime,P.clearing[i])
|
||||||
|
end
|
||||||
|
::L::
|
||||||
|
rem(P.clearing)
|
||||||
|
if P.clearing[1]then goto L end
|
||||||
|
end::stop::
|
||||||
if P.endCounter<40 then
|
if P.endCounter<40 then
|
||||||
for j=1,#P.field do for i=1,10 do
|
for j=1,#P.field do for i=1,10 do
|
||||||
if P.visTime[j][i]<20 then P.visTime[j][i]=P.visTime[j][i]+.5 end
|
if P.visTime[j][i]<20 then P.visTime[j][i]=P.visTime[j][i]+.5 end
|
||||||
end end--Make field visible
|
end end--Make field visible
|
||||||
end
|
end
|
||||||
if P.b2b1>0 then P.b2b1=max(P.b2b1-3,0)end
|
if P.b2b1>0 then P.b2b1=max(0,P.b2b1*.92-1)end
|
||||||
--Dead
|
--Dead
|
||||||
end
|
end
|
||||||
|
for i=#P.shade,1,-1 do
|
||||||
|
local S=P.shade[i]
|
||||||
|
S[1]=S[1]-1
|
||||||
|
if S[1]==0 then
|
||||||
|
rem(P.shade,i)
|
||||||
|
end
|
||||||
|
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
|
||||||
@@ -229,9 +255,6 @@ function Tmr.play(dt)
|
|||||||
if b.t>=60 then rem(P.bonus,i)end
|
if b.t>=60 then rem(P.bonus,i)end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
for i=#P.task,1,-1 do
|
|
||||||
if P.task[i]()then rem(P.task,i)end
|
|
||||||
end
|
|
||||||
for i=#P.atkBuffer,1,-1 do
|
for i=#P.atkBuffer,1,-1 do
|
||||||
local atk=P.atkBuffer[i]
|
local atk=P.atkBuffer[i]
|
||||||
atk.time=atk.time+1
|
atk.time=atk.time+1
|
||||||
@@ -250,5 +273,5 @@ function Tmr.play(dt)
|
|||||||
PTC.dust[p]:update(dt)
|
PTC.dust[p]:update(dt)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
if modeEnv.royaleMode and frame%60==0 then freshMostDangerous()end
|
if modeEnv.royaleMode and frame%120==0 then freshMostDangerous()end
|
||||||
end
|
end
|
||||||
262
toolfunc.lua
262
toolfunc.lua
@@ -1,4 +1,9 @@
|
|||||||
function string.splitS(s,sep)
|
local gc=love.graphics
|
||||||
|
local kb=love.keyboard
|
||||||
|
local setFont=setFont
|
||||||
|
local toN,toS=tonumber,tostring
|
||||||
|
|
||||||
|
local function splitS(s,sep)
|
||||||
local t={}
|
local t={}
|
||||||
::L::
|
::L::
|
||||||
local i=find(s,sep)or #s+1
|
local i=find(s,sep)or #s+1
|
||||||
@@ -7,27 +12,18 @@ function string.splitS(s,sep)
|
|||||||
if #s~=0 then goto L end
|
if #s~=0 then goto L end
|
||||||
return t
|
return t
|
||||||
end
|
end
|
||||||
function sgn(i)return i>0 and 1 or i<0 and -1 or 0 end--Row numbe is A-uth-or's id!
|
|
||||||
function stringPack(s,v)return s..toS(v)end
|
|
||||||
function without(t,v)
|
|
||||||
for i=1,#t do
|
|
||||||
if t[i]==v then return end
|
|
||||||
end
|
|
||||||
return true
|
|
||||||
end
|
|
||||||
function mStr(s,x,y)
|
function mStr(s,x,y)
|
||||||
gc.printf(s,x-300,y,600,"center")
|
gc.printf(s,x-300,y,600,"center")
|
||||||
end
|
end
|
||||||
|
|
||||||
function getNewRow(val)
|
function getNewRow(val)
|
||||||
if not val then val=0 end
|
|
||||||
local t=rem(freeRow)
|
local t=rem(freeRow)
|
||||||
for i=1,10 do
|
for i=1,10 do
|
||||||
t[i]=val or 0
|
t[i]=val
|
||||||
end
|
end
|
||||||
--clear a row and move to active list
|
--clear a row and move to active list
|
||||||
if #freeRow==0 then
|
if #freeRow==0 then
|
||||||
for i=1,20 do
|
for i=1,10 do
|
||||||
ins(freeRow,{0,0,0,0,0,0,0,0,0,0})
|
ins(freeRow,{0,0,0,0,0,0,0,0,0,0})
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
@@ -38,47 +34,38 @@ function removeRow(t,k)
|
|||||||
ins(freeRow,rem(t,k))
|
ins(freeRow,rem(t,k))
|
||||||
end
|
end
|
||||||
|
|
||||||
local count=0
|
|
||||||
BGblockList={}for i=1,16 do BGblockList[i]={v=0}end
|
|
||||||
function getNewBlock()
|
|
||||||
count=count+1
|
|
||||||
if count==17 then count=1 end
|
|
||||||
local t=BGblockList[count]
|
|
||||||
t.bn,t.size=BGblock.next,2+3*rnd()
|
|
||||||
t.b=blocks[t.bn][rnd(0,3)]
|
|
||||||
t.x=rnd(-#t.b[1]*t.size*30+100,1180)
|
|
||||||
t.y=-#t.b*30*t.size
|
|
||||||
t.v=t.size*(1+rnd())
|
|
||||||
BGblock.next=BGblock.next%7+1
|
|
||||||
return t
|
|
||||||
end
|
|
||||||
--Background animation
|
|
||||||
|
|
||||||
function timeSort(a,b)
|
|
||||||
return a.time>b.time
|
|
||||||
end
|
|
||||||
function stencil_miniTitle()
|
|
||||||
for i=1,#miniTitle_rect do
|
|
||||||
gc.rectangle("fill",unpack(miniTitle_rect[i]))
|
|
||||||
end
|
|
||||||
end
|
|
||||||
function stencil_field()
|
|
||||||
gc.rectangle("fill",150,60,300,610)
|
|
||||||
end
|
|
||||||
function stencil_field_small()
|
|
||||||
gc.rectangle("fill",0,0,60,120)
|
|
||||||
end
|
|
||||||
--Single-usage funcs
|
--Single-usage funcs
|
||||||
|
langName={"中文","English"}
|
||||||
|
local langID={"chi","eng"}
|
||||||
function swapLanguage(l)
|
function swapLanguage(l)
|
||||||
text=require("language/"..langID[l])
|
text=require("language/"..langID[l])
|
||||||
Buttons.sel=nil
|
Buttons.sel=nil
|
||||||
for scene,list in pairs(Buttons)do
|
for S,L in next,Buttons do
|
||||||
for num=1,#list do
|
for N,B in next,L do
|
||||||
list[num].alpha=0
|
B.alpha=0
|
||||||
list[num].t=text.ButtonText[scene][num]
|
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.origin()
|
||||||
|
royaleCtrlPad=gc.newCanvas(300,100)
|
||||||
|
gc.setCanvas(royaleCtrlPad)
|
||||||
|
gc.setColor(1,1,1)
|
||||||
|
setFont(25)
|
||||||
|
gc.setLineWidth(2)
|
||||||
|
for i=1,4 do
|
||||||
|
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)
|
||||||
|
end
|
||||||
|
gc.setCanvas()
|
||||||
|
gc.pop()
|
||||||
|
collectgarbage()
|
||||||
end
|
end
|
||||||
|
|
||||||
|
local vibrateLevel={0,0,.03,.04,.05,.07,.9}
|
||||||
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])
|
||||||
@@ -118,14 +105,64 @@ function SFX(s,v)
|
|||||||
end
|
end
|
||||||
function BGM(s)
|
function BGM(s)
|
||||||
if setting.bgm and bgmPlaying~=s then
|
if setting.bgm and bgmPlaying~=s then
|
||||||
for k,v in pairs(bgm)do v:stop()end
|
if bgmPlaying then newTask(Event_task.bgmFadeOut,nil,bgmPlaying)end
|
||||||
if s then bgm[s]:play()end
|
for i=1,#Task do
|
||||||
|
if Task[i].code==Event_task.bgmFadeIn then
|
||||||
|
Task[i].code=Event_task.bgmFadeOut
|
||||||
|
end
|
||||||
|
end
|
||||||
|
if s then
|
||||||
|
newTask(Event_task.bgmFadeIn,nil,s)
|
||||||
|
bgm[s]:play()
|
||||||
|
end
|
||||||
bgmPlaying=s
|
bgmPlaying=s
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
local swapDeck_data={
|
||||||
|
{4,0,1,1},{6,0,15,1},{5,0,9,1},{6,0,6,1},
|
||||||
|
{1,0,3,1},{3,0,12,1},{1,1,8,1},{2,1,4,2},
|
||||||
|
{3,2,13,2},{4,1,12,2},{5,2,1,2},{7,1,11,2},
|
||||||
|
{2,1,9,3},{3,0,6,3},{4,2,14,3},{1,0,4,4},
|
||||||
|
{7,1,1,4},{6,0,2,4},{5,2,6,4},{6,0,14,5},
|
||||||
|
{3,3,15,5},{4,0,7,6},{7,1,10,5},{5,0,2,6},
|
||||||
|
{2,1,1,7},{1,0,4,6},{4,1,13,5},{1,1,6,7},
|
||||||
|
{5,3,11,5},{3,2,11,7},{6,0,8,7},{4,2,12,8},
|
||||||
|
{7,0,8,9},{1,0,2,8},{5,2,4,8},{6,0,15,8},
|
||||||
|
}--Block id [ZSLJTOI] ,dir,x,y
|
||||||
|
local swap={
|
||||||
|
none={2,1,d=function()end},
|
||||||
|
flash={8,1,d=function()gc.clear(1,1,1)end},
|
||||||
|
fade={30,15,d=function()
|
||||||
|
local t=1-abs(sceneSwaping.time*.06667-1)
|
||||||
|
gc.setColor(0,0,0,t)
|
||||||
|
gc.rectangle("fill",0,0,1280,720)
|
||||||
|
end},
|
||||||
|
deck={50,8,d=function()
|
||||||
|
local t=sceneSwaping.time
|
||||||
|
gc.setColor(1,1,1)
|
||||||
|
if t>8 then
|
||||||
|
local t=max(t,15)
|
||||||
|
for i=1,51-t do
|
||||||
|
local bn=swapDeck_data[i][1]
|
||||||
|
local b=blocks[bn][swapDeck_data[i][2]]
|
||||||
|
local cx,cy=swapDeck_data[i][3],swapDeck_data[i][4]
|
||||||
|
for y=1,#b do for x=1,#b[1]do
|
||||||
|
if b[y][x]then
|
||||||
|
gc.draw(blockSkin[bn],80*(cx+x-2),80*(10-cy-y),nil,8/3)
|
||||||
|
end
|
||||||
|
end end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
if t<17 then
|
||||||
|
gc.setColor(1,1,1,(8-abs(t-8))*.125)
|
||||||
|
gc.rectangle("fill",0,0,1280,720)
|
||||||
|
end
|
||||||
|
end},
|
||||||
|
}--Scene swapping animations
|
||||||
function gotoScene(s,style)
|
function gotoScene(s,style)
|
||||||
if not sceneSwaping and s~=scene then
|
if not sceneSwaping and s~=scene then
|
||||||
style=style or"deck"
|
style=style or"fade"
|
||||||
sceneSwaping={
|
sceneSwaping={
|
||||||
tar=s,style=style,
|
tar=s,style=style,
|
||||||
time=swap[style][1],mid=swap[style][2],
|
time=swap[style][1],mid=swap[style][2],
|
||||||
@@ -134,6 +171,30 @@ function gotoScene(s,style)
|
|||||||
Buttons.sel=nil
|
Buttons.sel=nil
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
local prevMenu={
|
||||||
|
load=love.event.quit,
|
||||||
|
intro="quit",
|
||||||
|
main="intro",
|
||||||
|
mode="main",
|
||||||
|
custom="mode",
|
||||||
|
draw=function()
|
||||||
|
kb.setKeyRepeat(false)
|
||||||
|
gotoScene("custom")
|
||||||
|
end,
|
||||||
|
ready="mode",
|
||||||
|
play=function()
|
||||||
|
clearTask("play")
|
||||||
|
gotoScene(curMode.id~="custom"and"mode"or"custom","deck")
|
||||||
|
end,
|
||||||
|
help="main",
|
||||||
|
stat="main",
|
||||||
|
setting=function()
|
||||||
|
saveSetting()
|
||||||
|
gotoScene("main")
|
||||||
|
end,
|
||||||
|
setting2="setting",
|
||||||
|
setting3="setting",
|
||||||
|
}
|
||||||
function back()
|
function back()
|
||||||
local t=prevMenu[scene]
|
local t=prevMenu[scene]
|
||||||
if type(t)=="string"then
|
if type(t)=="string"then
|
||||||
@@ -142,10 +203,46 @@ function back()
|
|||||||
t()
|
t()
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
local dataOpt={
|
||||||
|
"run",
|
||||||
|
"game",
|
||||||
|
"gametime",
|
||||||
|
"piece",
|
||||||
|
"row",
|
||||||
|
"atk",
|
||||||
|
"key",
|
||||||
|
"rotate",
|
||||||
|
"hold",
|
||||||
|
"spin",
|
||||||
|
}
|
||||||
|
local saveOpt={
|
||||||
|
"lang",
|
||||||
|
"ghost",
|
||||||
|
"center",
|
||||||
|
"grid",
|
||||||
|
"swap",
|
||||||
|
"sfx",
|
||||||
|
"bgm",
|
||||||
|
"vib",
|
||||||
|
"fxs",
|
||||||
|
|
||||||
|
"das",
|
||||||
|
"arr",
|
||||||
|
"sddas",
|
||||||
|
"sdarr",
|
||||||
|
|
||||||
|
"fullscreen",
|
||||||
|
"bgblock",
|
||||||
|
"virtualkeyAlpha",
|
||||||
|
"virtualkeyIcon",
|
||||||
|
"virtualkeySwitch",
|
||||||
|
"frameMul",
|
||||||
|
}
|
||||||
function loadData()
|
function loadData()
|
||||||
userData:open("r")
|
userData:open("r")
|
||||||
--local t=string.splitS(love.math.decompress(userdata,"zlib"),"\r\n")
|
--local t=splitS(love.math.decompress(userdata,"zlib"),"\r\n")
|
||||||
local t=string.splitS(userData:read(),"\r\n")
|
local t=splitS(userData:read(),"\r\n")
|
||||||
userData:close()
|
userData:close()
|
||||||
for i=1,#t do
|
for i=1,#t do
|
||||||
local i=t[i]
|
local i=t[i]
|
||||||
@@ -160,18 +257,11 @@ function loadData()
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
function saveData()
|
function saveData()
|
||||||
local t=table.concat({
|
local t={}
|
||||||
stringPack("run=",stat.run),
|
for i=1,#dataOpt do
|
||||||
stringPack("game=",stat.game),
|
ins(t,dataOpt[i].."="..toS(stat[dataOpt[i]]))
|
||||||
stringPack("gametime=",stat.gametime),
|
end
|
||||||
stringPack("piece=",stat.piece),
|
t=table.concat(t,"\r\n")
|
||||||
stringPack("row=",stat.row),
|
|
||||||
stringPack("atk=",stat.atk),
|
|
||||||
stringPack("key=",stat.key),
|
|
||||||
stringPack("rotate=",stat.rotate),
|
|
||||||
stringPack("hold=",stat.hold),
|
|
||||||
stringPack("spin=",stat.spin),
|
|
||||||
},"\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)
|
||||||
@@ -179,8 +269,8 @@ function saveData()
|
|||||||
end
|
end
|
||||||
function loadSetting()
|
function loadSetting()
|
||||||
userSetting:open("r")
|
userSetting:open("r")
|
||||||
--local t=string.splitS(love.math.decompress(userdata,"zlib"),"\r\n")
|
--local t=splitS(love.math.decompress(userdata,"zlib"),"\r\n")
|
||||||
local t=string.splitS(userSetting:read(),"\r\n")
|
local t=splitS(userSetting:read(),"\r\n")
|
||||||
userSetting:close()
|
userSetting:close()
|
||||||
for i=1,#t do
|
for i=1,#t do
|
||||||
local i=t[i]
|
local i=t[i]
|
||||||
@@ -195,17 +285,17 @@ function loadSetting()
|
|||||||
setting.fullscreen=v=="true"
|
setting.fullscreen=v=="true"
|
||||||
love.window.setFullscreen(setting.fullscreen)
|
love.window.setFullscreen(setting.fullscreen)
|
||||||
elseif t=="keymap"then
|
elseif t=="keymap"then
|
||||||
v=string.splitS(v,"/")
|
v=splitS(v,"/")
|
||||||
for i=1,16 do
|
for i=1,16 do
|
||||||
local v1=string.splitS(v[i],",")
|
local v1=splitS(v[i],",")
|
||||||
for j=1,#v1 do
|
for j=1,#v1 do
|
||||||
setting.keyMap[i][j]=v1[j]
|
setting.keyMap[i][j]=v1[j]
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
elseif t=="keylib"then
|
elseif t=="keylib"then
|
||||||
v=string.splitS(v,"/")
|
v=splitS(v,"/")
|
||||||
for i=1,4 do
|
for i=1,4 do
|
||||||
local v1=string.splitS(v[i],",")
|
local v1=splitS(v[i],",")
|
||||||
for j=1,#v1 do
|
for j=1,#v1 do
|
||||||
setting.keyLib[i][j]=toN(v1[j])
|
setting.keyLib[i][j]=toN(v1[j])
|
||||||
end
|
end
|
||||||
@@ -218,10 +308,10 @@ function loadSetting()
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
elseif t=="virtualkey"then
|
elseif t=="virtualkey"then
|
||||||
v=string.splitS(v,"/")
|
v=splitS(v,"/")
|
||||||
for i=1,10 do
|
for i=1,10 do
|
||||||
if not v[i]then goto c end
|
if not v[i]then goto c end
|
||||||
virtualkey[i]=string.splitS(v[i],",")
|
virtualkey[i]=splitS(v[i],",")
|
||||||
for j=1,4 do
|
for j=1,4 do
|
||||||
virtualkey[i][j]=toN(virtualkey[i][j])
|
virtualkey[i][j]=toN(virtualkey[i][j])
|
||||||
end
|
end
|
||||||
@@ -236,7 +326,7 @@ function loadSetting()
|
|||||||
elseif t=="das"or t=="arr"or t=="sddas"or t=="sdarr"then
|
elseif t=="das"or t=="arr"or t=="sddas"or t=="sdarr"then
|
||||||
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
|
||||||
setting[t]=int(v)
|
setting[t]=int(v)
|
||||||
elseif t=="ghost"or t=="center"then
|
elseif t=="ghost"or t=="center"or t=="grid"or t=="swap"or t=="fxs"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("[12]"))or 1
|
||||||
@@ -260,25 +350,15 @@ function saveSetting()
|
|||||||
for i=1,4 do
|
for i=1,4 do
|
||||||
lib[i]=table.concat(setting.keyLib[i],",")
|
lib[i]=table.concat(setting.keyLib[i],",")
|
||||||
end
|
end
|
||||||
local t=table.concat({
|
local t={
|
||||||
stringPack("lang=",setting.lang),
|
"keymap="..toS(table.concat(map,"/")),
|
||||||
stringPack("sfx=",setting.sfx),
|
"keylib="..toS(table.concat(lib,"/")),
|
||||||
stringPack("bgm=",setting.bgm),
|
"virtualkey="..toS(table.concat(vk,"/")),
|
||||||
stringPack("vib=",setting.vib),
|
}
|
||||||
stringPack("fullscreen=",setting.fullscreen),
|
for i=1,#saveOpt do
|
||||||
stringPack("bgblock=",setting.bgblock),
|
ins(t,saveOpt[i].."="..toS(setting[saveOpt[i]]))
|
||||||
stringPack("das=",setting.das),
|
end
|
||||||
stringPack("arr=",setting.arr),
|
t=table.concat(t,"\r\n")
|
||||||
stringPack("sddas=",setting.sddas),
|
|
||||||
stringPack("sdarr=",setting.sdarr),
|
|
||||||
stringPack("keymap=",table.concat(map,"/")),
|
|
||||||
stringPack("keylib=",table.concat(lib,"/")),
|
|
||||||
stringPack("virtualkey=",table.concat(vk,"/")),
|
|
||||||
stringPack("virtualkeyAlpha=",setting.virtualkeyAlpha),
|
|
||||||
stringPack("virtualkeyIcon=",setting.virtualkeyIcon),
|
|
||||||
stringPack("virtualkeySwitch=",setting.virtualkeySwitch),
|
|
||||||
stringPack("frameMul=",setting.frameMul),
|
|
||||||
},"\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)
|
||||||
|
|||||||
Reference in New Issue
Block a user