Compare commits
4 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
c9a3e3ce1b | ||
|
|
72dcb84662 | ||
|
|
4af2126254 | ||
|
|
42d7b1be94 |
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
BGM/rockblock.ogg
Normal file
BIN
BGM/rockblock.ogg
Normal file
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.
25
ai.lua
25
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)
|
||||||
@@ -74,14 +74,12 @@ function getScore(field,bn,cb,cx,cy)
|
|||||||
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,7 +117,7 @@ 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)
|
||||||
@@ -133,7 +131,7 @@ function AI_getControls(ctrl)
|
|||||||
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
|
||||||
@@ -146,7 +144,7 @@ function AI_getControls(ctrl)
|
|||||||
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()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
|
||||||
256
call&sys.lua
256
call&sys.lua
@@ -1,3 +1,99 @@
|
|||||||
|
local gc=love.graphics
|
||||||
|
local tm=love.timer
|
||||||
|
local ms=love.mouse
|
||||||
|
local tc=love.touch
|
||||||
|
local wd=love.window
|
||||||
|
local setFont=setFont
|
||||||
|
local Timer=tm.getTime
|
||||||
|
|
||||||
|
local ww,wh=gc.getWidth(),gc.getHeight()
|
||||||
|
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,
|
||||||
|
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},{1,2},{1,2},{1,2},{1,2},{1.5,1.5},{0.5,2.5}}
|
||||||
|
|
||||||
function onVirtualkey(x,y)
|
function onVirtualkey(x,y)
|
||||||
local x,y=xOy:inverseTransformPoint(x,y)
|
local x,y=xOy:inverseTransformPoint(x,y)
|
||||||
local d2,nearest,distance
|
local d2,nearest,distance
|
||||||
@@ -14,37 +110,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 +150,11 @@ function mouseDown.intro(x,y,k)
|
|||||||
gotoScene("main")
|
gotoScene("main")
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
wheelmoved={}
|
||||||
|
function wheelmoved.mode(x,y)
|
||||||
|
modeSel=min(max(modeSel+(y>0 and -1 or 1),1),#modeID)
|
||||||
|
levelSel=ceil(#modeLevel[modeID[modeSel]]*.5)
|
||||||
|
end
|
||||||
keyDown={}
|
keyDown={}
|
||||||
function keyDown.intro(key)
|
function keyDown.intro(key)
|
||||||
if key=="escape"then
|
if key=="escape"then
|
||||||
@@ -143,7 +239,7 @@ end
|
|||||||
function keyDown.play(key)
|
function keyDown.play(key)
|
||||||
if key=="escape"then back()return end
|
if key=="escape"then back()return end
|
||||||
local m=setting.keyMap
|
local m=setting.keyMap
|
||||||
for p=1,4 do
|
for p=1,human do
|
||||||
local lib=setting.keyLib[p]
|
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 +254,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,49 +344,41 @@ 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.mousemoved(x,y,dx,dy,t)
|
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)
|
||||||
Buttons.sel=nil
|
Buttons.sel=nil
|
||||||
for i=1,#Buttons[scene]do
|
for N,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
|
if abs(mx-B.x)<B.w*.5 and abs(my-B.y)<B.h*.5 then
|
||||||
if abs(mx-B.x)<B.w*.5 and abs(my-B.y)<B.h*.5 then
|
Buttons.sel=B
|
||||||
Buttons.sel=i
|
return
|
||||||
return
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
function love.mousepressed(x,y,k,t,num)
|
function love.mousepressed(x,y,k,t,num)
|
||||||
if 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
|
if mouseDown[scene]then
|
||||||
mouseDown[scene](mx,my,k)
|
mouseDown[scene](mx,my,k)
|
||||||
else
|
else
|
||||||
if k==1 then
|
if k==1 then
|
||||||
if not sceneSwaping and Buttons.sel then
|
if not sceneSwaping and 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
|
||||||
love.mousemoved(x,y)
|
love.mousemoved(x,y)
|
||||||
sysSFX("button")
|
sysSFX("button")
|
||||||
end
|
|
||||||
elseif k==2 then
|
|
||||||
back()
|
|
||||||
end
|
end
|
||||||
|
elseif k==2 then
|
||||||
|
back()
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
@@ -299,6 +387,7 @@ 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
|
||||||
@@ -328,10 +417,11 @@ 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
|
||||||
@@ -362,11 +452,10 @@ function love.touchmoved(id,x,y,dx,dy)
|
|||||||
local b=virtualkey[n]
|
local b=virtualkey[n]
|
||||||
for i=1,#l do
|
for i=1,#l do
|
||||||
local x,y=xOy:inverseTransformPoint(tc.getPosition(l[i]))
|
local x,y=xOy:inverseTransformPoint(tc.getPosition(l[i]))
|
||||||
if(x-b[1])^2+(y-b[2])^2<=b[3]then return end
|
if(x-b[1])^2+(y-b[2])^2<=b[3]then goto L end
|
||||||
end
|
|
||||||
if P.keyPressing[n]then
|
|
||||||
releaseKey(n,players[1])
|
|
||||||
end
|
end
|
||||||
|
releaseKey(n,players[1])
|
||||||
|
::L::
|
||||||
end
|
end
|
||||||
elseif scene=="setting3"then
|
elseif scene=="setting3"then
|
||||||
x,y=xOy:inverseTransformPoint(x,y)
|
x,y=xOy:inverseTransformPoint(x,y)
|
||||||
@@ -379,18 +468,18 @@ function love.touchmoved(id,x,y,dx,dy)
|
|||||||
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 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,6 +524,13 @@ 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.update(dt)
|
function love.update(dt)
|
||||||
@@ -450,18 +546,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 +565,23 @@ 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()
|
|
||||||
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 +592,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)
|
||||||
@@ -524,10 +617,13 @@ function love.draw()
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
function love.resize(w,h)
|
function love.resize(w,h)
|
||||||
ww,wh=w,h
|
if w>=h then ww,wh=w,h
|
||||||
|
else ww,wh=h,w
|
||||||
|
end
|
||||||
screenK=h/w>=.5625 and w/1280 or h/720
|
screenK=h/w>=.5625 and w/1280 or h/720
|
||||||
xOy=xOy:setTransformation(w*.5,h*.5,nil,screenK,nil,640,360)
|
xOy=xOy:setTransformation(w*.5,h*.5,nil,screenK,nil,640,360)
|
||||||
gc.replaceTransform(xOy)
|
gc.replaceTransform(xOy)
|
||||||
|
collectgarbage()
|
||||||
end
|
end
|
||||||
function love.run()
|
function love.run()
|
||||||
local frameT=Timer()
|
local frameT=Timer()
|
||||||
|
|||||||
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.9"
|
W.title="Techmino V0.7.13+"
|
||||||
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
|
||||||
|
|||||||
1153
dataList.lua
Normal file
1153
dataList.lua
Normal file
File diff suppressed because it is too large
Load Diff
Binary file not shown.
735
gamefunc.lua
735
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 |
167
language/chi.lua
167
language/chi.lua
@@ -1,18 +1,19 @@
|
|||||||
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="四清 B2B",
|
techrashB3B="Techrash B2B2B",
|
||||||
techrashB3B="四清 B2B2B",
|
|
||||||
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="B2B ",
|
||||||
b3b="B2B2B",
|
b3b="B2B2B ",
|
||||||
mini="次级",
|
mini="Mini",
|
||||||
PC="场地全清",
|
PC="Perfect Clear",
|
||||||
|
hold="暂存",
|
||||||
|
next="下一个",
|
||||||
|
|
||||||
stage={"关卡 1","关卡 2","关卡 3","关卡 4","关卡 5",},
|
stage={"关卡 1","关卡 2","关卡 3","关卡 4","关卡 5",},
|
||||||
maxspeed="最高速度",
|
maxspeed="最高速度",
|
||||||
@@ -22,22 +23,51 @@ return{
|
|||||||
lose="失败",
|
lose="失败",
|
||||||
|
|
||||||
custom="自定义游戏",
|
custom="自定义游戏",
|
||||||
|
customOption={
|
||||||
|
drop="下落延迟:",
|
||||||
|
lock="锁定延迟:",
|
||||||
|
wait="放块延迟:",
|
||||||
|
fall="消行延迟:",
|
||||||
|
next="序列数量:",
|
||||||
|
hold="暂存:",
|
||||||
|
sequence="序列:",
|
||||||
|
visible="可见性:",
|
||||||
|
target="目标行数:",
|
||||||
|
freshLimit="锁延刷新次数:",
|
||||||
|
opponent="对手速度等级:",
|
||||||
|
},
|
||||||
|
customVal={
|
||||||
|
drop={0,1,2,3,4,5,6,7,8,9,10,12,14,16,18,20,25,30,40,60,180,"∞","[20G]"},
|
||||||
|
lock={0,1,2,3,4,5,6,7,8,9,10,12,14,16,18,20,25,30,40,60,180,"∞"},
|
||||||
|
wait=nil,
|
||||||
|
fall=nil,
|
||||||
|
next=nil,
|
||||||
|
hold={"开","关"},
|
||||||
|
sequence={"bag7","his4","随机"},
|
||||||
|
visible={"可见","半隐","全隐","瞬隐"},
|
||||||
|
target={10,20,40,100,200,500,1000,"∞"},
|
||||||
|
freshLimit={0,8,15,"∞"},
|
||||||
|
opponent={"无电脑",1,2,3,4,5,6,7,8,9,10,11},
|
||||||
|
},
|
||||||
softdropdas="软降DAS:",
|
softdropdas="软降DAS:",
|
||||||
softdroparr="软降ARR:",
|
softdroparr="软降ARR:",
|
||||||
|
snapLevelName={"任意摆放","10px吸附","20px吸附","40px吸附","60px吸附","80px吸附"},
|
||||||
keyboard="键盘",
|
keyboard="键盘",
|
||||||
joystick="手柄",
|
joystick="手柄",
|
||||||
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="高速经典",
|
||||||
zen="无重力消除200行",
|
zen="无重力消除200行",
|
||||||
infinite="科研沙盒",
|
infinite="科研沙盒",
|
||||||
solo="打败AI",
|
solo="打败AI",
|
||||||
@@ -81,7 +111,7 @@ return{
|
|||||||
help={
|
help={
|
||||||
"好像也没啥好帮助的吧?就当是关于了",
|
"好像也没啥好帮助的吧?就当是关于了",
|
||||||
"这只是一个方块游戏,请勿过度解读和随意联想",
|
"这只是一个方块游戏,请勿过度解读和随意联想",
|
||||||
"不过就当成TOP/C2/KOS/TGM3玩好了",
|
"不过就当成TOP/C2/KOS/TGM3/JS玩好了",
|
||||||
"游戏还在测试阶段,请 勿 外 传",
|
"游戏还在测试阶段,请 勿 外 传",
|
||||||
"",
|
"",
|
||||||
"使用LOVE2D引擎",
|
"使用LOVE2D引擎",
|
||||||
@@ -91,71 +121,76 @@ 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="开始",
|
||||||
"返回",
|
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 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="打开存储目录",
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
}--中文→
|
}--中文
|
||||||
151
language/eng.lua
151
language/eng.lua
@@ -1,18 +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",
|
||||||
|
next="Next",
|
||||||
|
|
||||||
stage={"STAGE 1","STAGE 2","STAGE 3","STAGE 4","STAGE 5",},
|
stage={"STAGE 1","STAGE 2","STAGE 3","STAGE 4","STAGE 5",},
|
||||||
maxspeed="Max speed",
|
maxspeed="Max speed",
|
||||||
@@ -22,8 +23,35 @@ return{
|
|||||||
lose="LOSE",
|
lose="LOSE",
|
||||||
|
|
||||||
custom="Custom Game",
|
custom="Custom Game",
|
||||||
|
customOption={
|
||||||
|
drop="Drop delay:",
|
||||||
|
lock="Lock delay:",
|
||||||
|
wait="Next piece delay:",
|
||||||
|
fall="Clear row delay:",
|
||||||
|
next="Next count:",
|
||||||
|
hold="Hold:",
|
||||||
|
sequence="Sequence:",
|
||||||
|
visible="Visible:",
|
||||||
|
target="Line limit:",
|
||||||
|
freshLimit="Lock fresh limit:",
|
||||||
|
opponent="Opponent speed:",
|
||||||
|
},
|
||||||
|
customVal={
|
||||||
|
drop={0,1,2,3,4,5,6,7,8,9,10,12,14,16,18,20,25,30,40,60,180,"∞","[20G]"},
|
||||||
|
lock={0,1,2,3,4,5,6,7,8,9,10,12,14,16,18,20,25,30,40,60,180,"∞"},
|
||||||
|
wait=nil,
|
||||||
|
fall=nil,
|
||||||
|
next=nil,
|
||||||
|
hold={"ON","OFF"},
|
||||||
|
sequence={"bag7","his4","random"},
|
||||||
|
visible={"normal","time","invisible","sudden"},
|
||||||
|
target={10,20,40,100,200,500,1000,"∞"},
|
||||||
|
freshLimit={0,8,15,"∞"},
|
||||||
|
opponent={"No CPU",1,2,3,4,5,6,7,8,9,10,11},
|
||||||
|
},
|
||||||
softdropdas="softdropDAS:",
|
softdropdas="softdropDAS:",
|
||||||
softdroparr="softdropARR:",
|
softdroparr="softdropARR:",
|
||||||
|
snapLevelName={"Free pos","Snap-10","Snap-20","Snap-40","Snap-60","Snap-80"},
|
||||||
keyboard="Keyboard",
|
keyboard="Keyboard",
|
||||||
joystick="Joystick",
|
joystick="Joystick",
|
||||||
setting2Help="Arrowkey to select/change slot,Enter to change,Esc back",
|
setting2Help="Arrowkey to select/change slot,Enter to change,Esc back",
|
||||||
@@ -32,12 +60,14 @@ 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","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",
|
||||||
zen="Clear 200 Lines without gravity",
|
zen="Clear 200 Lines without gravity",
|
||||||
infinite="Infinite game,infinite happiness",
|
infinite="Infinite game,infinite happiness",
|
||||||
solo="Beat AI",
|
solo="Beat AI",
|
||||||
@@ -91,71 +121,80 @@ 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",
|
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 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",
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
666
main.lua
666
main.lua
@@ -1,67 +1,55 @@
|
|||||||
lib={
|
local gc=love.graphics
|
||||||
gc=love.graphics,
|
local tm=love.timer
|
||||||
kb=love.keyboard,
|
local ms,kb=love.mouse,love.keyboard
|
||||||
ms=love.mouse,
|
local fs,sys=love.filesystem,love.system
|
||||||
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
|
|
||||||
|
|
||||||
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
|
||||||
gc.setFont(Fonts[s])
|
gc.setFont(Fonts[s])
|
||||||
else
|
else
|
||||||
local t=gc.setNewFont("allph.ttf",s-5)
|
local t=gc.setNewFont("font.ttf",s-5)
|
||||||
Fonts[s]=t
|
Fonts[s]=t
|
||||||
gc.setFont(t)
|
gc.setFont(t)
|
||||||
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,
|
||||||
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,599 +64,19 @@ customSel={
|
|||||||
freshLimit=3,
|
freshLimit=3,
|
||||||
opponent=1,
|
opponent=1,
|
||||||
}
|
}
|
||||||
loadmode={
|
|
||||||
sprint=function()
|
|
||||||
createPlayer(1,340,15)
|
|
||||||
end,
|
|
||||||
marathon=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,
|
|
||||||
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,
|
|
||||||
marathon=function()
|
|
||||||
setFont(50)
|
|
||||||
mStr(P.cstat.row,-75,320)
|
|
||||||
mStr(P.gameEnv.target,-75,370)
|
|
||||||
gc.rectangle("fill",-120,376,90,4)
|
|
||||||
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,
|
|
||||||
tsd_reach=function()
|
|
||||||
if P.lastClear~=52 then
|
|
||||||
Event.gameover.lose()
|
|
||||||
else
|
|
||||||
P.gameEnv.target=P.gameEnv.target+2
|
|
||||||
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","","",""},
|
||||||
{"","","","","","","","","","","","",""},
|
{"","","","","","","","","","","","",""},
|
||||||
@@ -742,9 +150,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
|
||||||
@@ -752,13 +169,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")
|
|
||||||
461
paint.lua
461
paint.lua
@@ -1,40 +1,65 @@
|
|||||||
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
|
local function stencil_field()
|
||||||
|
gc.rectangle("fill",0,-10,300,610)
|
||||||
|
end
|
||||||
|
local function stencil_field_small()
|
||||||
|
gc.rectangle("fill",0,0,60,120)
|
||||||
|
end
|
||||||
|
|
||||||
FX={
|
FX={
|
||||||
flash=0,--Black screen(frame)
|
flash=0,--Black screen(frame)
|
||||||
shake=0,--Screen shake(frame)
|
shake=0,--Screen shake(frame)
|
||||||
@@ -87,7 +112,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 +134,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,16 +173,16 @@ 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()
|
||||||
@@ -177,7 +199,7 @@ function drawVirtualkey()
|
|||||||
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]
|
local p,b=virtualkeyDown[i],virtualkey[i]
|
||||||
if p then gc.setColor(.75,.75,.75,a)
|
if p then gc.setColor(.7,.7,.7,a)
|
||||||
else gc.setColor(1,1,1,a)
|
else gc.setColor(1,1,1,a)
|
||||||
end
|
end
|
||||||
gc.setLineWidth(b[4]*.07)
|
gc.setLineWidth(b[4]*.07)
|
||||||
@@ -190,58 +212,56 @@ function drawVirtualkey()
|
|||||||
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
|
for i=0,15 do
|
||||||
for j=0,8 do
|
for j=0,8 do
|
||||||
-- local t=sin(Timer()*((2.468*i-1.357*j)%3))*.3
|
local t=sin(matrixT[i][j]*Timer())*.2+.2
|
||||||
local t=(sin((mt.noise(i,j)+2)*Timer())+1)*.2
|
gc.setColor(1,1,1,t)
|
||||||
gc.setColor(t,t,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 +276,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.9",370,140)
|
gc.print("Alpha V0.7.13+",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 +310,22 @@ 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.print(customOption[k],50,y)
|
gc.printf(text.customOption[k],30,y,320,"right")
|
||||||
if customVal[k]then
|
if text.customVal[k]then
|
||||||
gc.print(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
|
end
|
||||||
function Pnt.play()
|
function Pnt.play()
|
||||||
for p=1,#players do
|
for p=1,#players do
|
||||||
@@ -356,54 +374,82 @@ 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.translate(150,70)
|
||||||
|
if P.gameEnv.grid then
|
||||||
|
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
|
||||||
gc.stencil(stencil_field,"replace", 1)
|
gc.stencil(stencil_field,"replace", 1)
|
||||||
gc.translate(150,70+P.fieldBeneath)
|
gc.translate(0,P.fieldBeneath)
|
||||||
gc.setStencilTest("equal",1)
|
gc.setStencilTest("equal",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
|
||||||
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],20)*.05)
|
||||||
|
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,.15+S[1]*.08)
|
||||||
|
for x=S[3],S[5]do
|
||||||
|
for y=S[6],S[4]do
|
||||||
|
drawPixel(y,x,S[2])
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
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])
|
||||||
|
--Draw game field
|
||||||
gc.setStencilTest()--In-playField mask
|
gc.setStencilTest()--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 +462,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
|
||||||
gc.print("Hold",-115,-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.hid,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("Next",336,-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 +539,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 +557,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 +588,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 +622,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 +649,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 +671,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
|
||||||
116
texture.lua
116
texture.lua
@@ -1,5 +1,7 @@
|
|||||||
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
|
||||||
@@ -17,34 +19,30 @@ 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")
|
||||||
end
|
end
|
||||||
|
|
||||||
|
local blockColor={
|
||||||
|
color.red,
|
||||||
|
color.green,
|
||||||
|
color.orange,
|
||||||
|
color.blue,
|
||||||
|
color.magenta,
|
||||||
|
color.yellow,
|
||||||
|
color.cyan,
|
||||||
|
}
|
||||||
gc.setColor(1,1,1)
|
gc.setColor(1,1,1)
|
||||||
mouseBlock={}
|
mouseBlock={}
|
||||||
for i=1,7 do
|
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 +85,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")
|
||||||
|
payCode=N("/image/mess/paycode.png")
|
||||||
|
|
||||||
c=nil
|
drawableText={
|
||||||
gc.setCanvas()
|
bpm=T(15,"BPM"),
|
||||||
|
kpm=T(15,"KPM"),
|
||||||
|
modeName=T(30),
|
||||||
|
levelName=T(30),
|
||||||
|
next=T(40),
|
||||||
|
hold=T(40),
|
||||||
|
}
|
||||||
|
|
||||||
sceneInit={
|
c=gc.setCanvas()
|
||||||
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,
|
|
||||||
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,
|
|
||||||
}
|
|
||||||
174
timer.lua
174
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
|
||||||
@@ -69,10 +72,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 +84,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 +121,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 +151,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 +165,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 +252,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 +270,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
|
||||||
247
toolfunc.lua
247
toolfunc.lua
@@ -1,4 +1,8 @@
|
|||||||
function string.splitS(s,sep)
|
local gc=love.graphics
|
||||||
|
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,8 +11,6 @@ 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)
|
function without(t,v)
|
||||||
for i=1,#t do
|
for i=1,#t do
|
||||||
if t[i]==v then return end
|
if t[i]==v then return end
|
||||||
@@ -38,47 +40,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 +111,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 +177,27 @@ 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",
|
||||||
|
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 +206,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 +260,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 +272,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 +288,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 +311,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 +329,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 +353,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