Compare commits

...

2 Commits

Author SHA1 Message Date
MrZ_26
849e5b586e Alpha V0.7.15 2020-02-04 19:33:41 +08:00
MrZ_26
f82e979f9c Alpha V0.7.14 2020-02-04 19:33:20 +08:00
18 changed files with 816 additions and 597 deletions

Binary file not shown.

BIN
SFX/swipe.ogg Normal file

Binary file not shown.

8
ai.lua
View File

@@ -60,7 +60,7 @@ function resetField(f0,f,start)
goto L goto L
end end
for i=start,#f0 do for i=start,#f0 do
f[i]=getNewRow() f[i]=getNewRow(0)
for j=1,10 do for j=1,10 do
f[i][j]=f0[i][j] f[i][j]=f0[i][j]
end end
@@ -69,7 +69,7 @@ end
function getScore(field,bn,cb,cx,cy) function getScore(field,bn,cb,cx,cy)
local score=0 local score=0
local highest=0 local highest=0
local height=getNewRow() local height=getNewRow(0)
local clear=0 local clear=0
local hole=0 local hole=0
@@ -124,7 +124,7 @@ function AI_getControls(ctrl)
local Tfield={}--test field local Tfield={}--test field
local field_org=P.field local field_org=P.field
for i=1,#field_org do for i=1,#field_org do
Tfield[i]=getNewRow() Tfield[i]=getNewRow(0)
for j=1,10 do for j=1,10 do
Tfield[i][j]=field_org[i][j] Tfield[i][j]=field_org[i][j]
end end
@@ -142,7 +142,7 @@ function AI_getControls(ctrl)
end--move to bottom end--move to bottom
for i=1,#cb do for i=1,#cb do
local y=cy+i-1 local y=cy+i-1
if not Tfield[y]then Tfield[y]=getNewRow()end if not Tfield[y]then Tfield[y]=getNewRow(0)end
for j=1,#cb[1]do for j=1,#cb[1]do
if cb[i][j]then if cb[i][j]then
Tfield[y][cx+j-1]=1 Tfield[y][cx+j-1]=1

View File

@@ -1,32 +1,30 @@
local gc=love.graphics local gc,tm=love.graphics,love.timer
local tm=love.timer local ms,kb,tc=love.mouse,love.keyboard,love.touch
local ms=love.mouse
local tc=love.touch
local wd=love.window local wd=love.window
local setFont=setFont local setFont=setFont
local Timer=tm.getTime local Timer=tm.getTime
local ww,wh=gc.getWidth(),gc.getHeight() local scr=scr
local xOy=love.math.newTransform() local xOy=love.math.newTransform()
local focus=true local focus=true
local mx,my,mouseShow=-20,-20,false local mx,my,mouseShow=-20,-20,false
local touching=nil--1st touching ID local touching=nil--1st touching ID
local sceneInit={ local sceneInit={
load=function() load=function()
curBG="none" curBG="none"
keeprun=true
loading=1--Loading mode loading=1--Loading mode
loadnum=1--Loading counter loadnum=1--Loading counter
loadprogress=0--Loading bar(0~1) loadprogress=0--Loading bar(0~1)
loadTip=text.tips[rnd(#text.tips)]
end, end,
intro=function() intro=function()
curBG="none" curBG="none"
count=0 count=0
keeprun=true BGM("blank")
end, end,
main=function() main=function()
curBG="none" curBG="none"
keeprun=true
collectgarbage() collectgarbage()
end, end,
mode=function() mode=function()
@@ -34,50 +32,58 @@ local sceneInit={
modeSel=modeSel or 1 modeSel=modeSel or 1
levelSel=levelSel or 3 levelSel=levelSel or 3
curBG="none" curBG="none"
keeprun=true BGM("blank")
end, end,
custom=function() custom=function()
optSel=optSel or 1 optSel=optSel or 1
curBG="matrix" curBG="matrix"
keeprun=true BGM("blank")
end,
draw=function()
kb.setKeyRepeat(true)
clearSureTime=0
pen=1
sx,sy=1,1
curBG="none"
end, end,
play=function() play=function()
keeprun=false if needResetGameData then
resetGameData() resetGameData()
needResetGameData=nil
end
sysSFX("ready") sysSFX("ready")
end, end,
pause=function()
pauseTime=0
end,
setting=function() setting=function()
curBG="none" curBG="none"
keeprun=true
end, end,
setting2=function() setting2=function()
curBG="none" curBG="none"
keeprun=true curBoard=1
curBoard=1 keyboardSet=1
keyboardSet=1 joystickSet=1
joystickSet=1 keyboardSetting=false
keyboardSetting=false joystickSetting=false
joystickSetting=false
end,--Control settings end,--Control settings
setting3=function() setting3=function()
curBG="game1" curBG="game1"
keeprun=true
defaultSel=1 defaultSel=1
sel=nil sel=nil
snapLevel=1 snapLevel=1
end,--Touch setting end,--Touch setting
help=function() help=function()
curBG="none" curBG="none"
keeprun=true
end, end,
stat=function() stat=function()
curBG="none" curBG="none"
keeprun=true
end, end,
quit=function() quit=function()
love.event.quit() love.event.quit()
end, end,
} }
BGblockList={}for i=1,16 do BGblockList[i]={v=0}end BGblockList={}for i=1,16 do BGblockList[i]={v=0}end
local BGblock={tm=150,next=7,ct=0} local BGblock={tm=150,next=7,ct=0}
local function getNewBlock() local function getNewBlock()
@@ -92,10 +98,9 @@ local function getNewBlock()
BGblock.next=BGblock.next%7+1 BGblock.next=BGblock.next%7+1
return t return t
end end
local scs={{1,2},{1,2},{1,2},{1,2},{1,2},{1.5,1.5},{0.5,2.5}} local scs={{1,2},nil,nil,nil,nil,{1.5,1.5},{0.5,2.5}}for i=2,5 do scs[i]=scs[1]end
function onVirtualkey(x,y) function onVirtualkey(x,y)
local x,y=xOy:inverseTransformPoint(x,y)
local d2,nearest,distance local d2,nearest,distance
for K=1,#virtualkey do for K=1,#virtualkey do
local b=virtualkey[K] local b=virtualkey[K]
@@ -150,11 +155,126 @@ function mouseDown.intro(x,y,k)
gotoScene("main") gotoScene("main")
end end
end end
function mouseDown.draw(x,y,k)
mouseMove.draw(x,y)
end
function mouseDown.setting3(x,y,k)
if k==2 then back()end
sel=nil
for K=1,#virtualkey do
local b=virtualkey[K]
if (x-b[1])^2+(y-b[2])^2<b[3]then
sel=K
end
end
end
mouseMove={}
function mouseMove.draw(x,y,dx,dy)
sx,sy=int((x-200)/30)+1,20-int((y-60)/30)
if sx<1 or sx>10 then sx=nil end
if sy<1 or sy>20 then sy=nil end
if sx and sy and ms.isDown(1,2)then
preField[sy][sx]=ms.isDown(1)and pen or 0
end
end
function mouseMove.setting3(x,y,dx,dy)
if sel and ms.isDown(1)then
local b=virtualkey[sel]
b[1],b[2]=b[1]+dx,b[2]+dy
end
end
mouseUp={}
function mouseUp.setting3(x,y,k)
if sel then
local b=virtualkey[sel]
local k=snapLevelValue[snapLevel]
b[1],b[2]=int(b[1]/k+.5)*k,int(b[2]/k+.5)*k
end
end
wheelmoved={} wheelmoved={}
function wheelmoved.draw(x,y)
if y<0 then
pen=pen+1
if pen==8 then pen=9 elseif pen==14 then pen=0 end
else
pen=pen-1
if pen==8 then pen=7 elseif pen==-1 then pen=13 end
end
end
function wheelmoved.mode(x,y) function wheelmoved.mode(x,y)
modeSel=min(max(modeSel+(y>0 and -1 or 1),1),#modeID) modeSel=min(max(modeSel+(y>0 and -1 or 1),1),#modeID)
levelSel=ceil(#modeLevel[modeID[modeSel]]*.5) levelSel=ceil(#modeLevel[modeID[modeSel]]*.5)
end end
touchDown={}
function touchDown.intro(id,x,y)
gotoScene("main")
end
function touchDown.draw(id,x,y)
end
function touchDown.setting3(id,x,y)
for K=1,#virtualkey do
local b=virtualkey[K]
if (x-b[1])^2+(y-b[2])^2<b[3]then
sel=K
end
end
end
function touchDown.play(id,x,y)
if setting.virtualkeySwitch then
local t=onVirtualkey(x,y)
if t then
pressKey(t,players[1])
end
end
end
touchUp={}
function touchUp.setting3(id,x,y)
if sel then
x,y=xOy:inverseTransformPoint(x,y)
if sel then
local b=virtualkey[sel]
local k=snapLevelValue[snapLevel]
b[1],b[2]=int(b[1]/k+.5)*k,int(b[2]/k+.5)*k
end
end
end
function touchUp.play(id,x,y)
if setting.virtualkeySwitch then
local t=onVirtualkey(x,y)
if t then
releaseKey(t,players[1])
end
end
end
touchMove={}
function touchMove.setting3(id,x,y,dx,dy)
if sel then
local b=virtualkey[sel]
b[1],b[2]=b[1]+dx,b[2]+dy
end
end
function touchMove.draw(id,x,y,dx,dy)
sx,sy=int((x-200)/30)+1,20-int((y-60)/30)
if sx<1 or sx>10 then sx=nil end
if sy<1 or sy>20 then sy=nil end
if sx and sy then
preField[sy][sx]=pen
end
end
function touchMove.play(id,x,y,dx,dy)
if setting.virtualkeySwitch then
local l=tc.getTouches()
for n=1,#virtualkey do
local b=virtualkey[n]
for i=1,#l do
local x,y=xOy:inverseTransformPoint(tc.getPosition(l[i]))
if(x-b[1])^2+(y-b[2])^2<=b[3]then goto L end
end
releaseKey(n,players[1])
::L::
end
end
end
keyDown={} keyDown={}
function keyDown.intro(key) function keyDown.intro(key)
if key=="escape"then if key=="escape"then
@@ -201,12 +321,42 @@ function keyDown.custom(key)
optSel=optSel%#customID+1 optSel=optSel%#customID+1
elseif key=="up"then elseif key=="up"then
optSel=(optSel-2)%#customID+1 optSel=(optSel-2)%#customID+1
elseif key=="d"then
gotoScene("draw")
elseif key=="return"then elseif key=="return"then
loadGame(0,1) loadGame(0,1)
elseif key=="space"then
loadGame(0,2)
elseif key=="escape"then elseif key=="escape"then
back() back()
end end
end end
function keyDown.draw(key)
if key=="delete"then
Buttons.draw.clear.code()
elseif key=="up"or key=="down"or key=="left"or key=="right"then
if not sx then sx=1 end
if not sy then sy=1 end
if key=="up"and sy<20 then sy=sy+1
elseif key=="down"and sy>1 then sy=sy-1
elseif key=="left"and sx>1 then sx=sx-1
elseif key=="right"and sx<10 then sx=sx+1
end
if kb.isDown("space")then
preField[sy][sx]=pen
end
elseif key=="space"then
if sx and sy then
preField[sy][sx]=pen
end
elseif key=="backspace"then
pen=0
elseif key=="escape"then
back()
else
pen=find("123qwea#sdzxc",key)or pen
end
end
function keyDown.setting2(key) function keyDown.setting2(key)
if key=="escape"then if key=="escape"then
if keyboardSetting then if keyboardSetting then
@@ -237,7 +387,7 @@ function keyDown.setting2(key)
end end
end end
function keyDown.play(key) function keyDown.play(key)
if key=="escape"then back()return end if key=="escape"then pauseGame()end
local m=setting.keyMap local m=setting.keyMap
for p=1,human do for p=1,human do
local lib=setting.keyLib[p] local lib=setting.keyLib[p]
@@ -251,6 +401,13 @@ function keyDown.play(key)
end end
end end
end end
function keyDown.pause(key)
if key=="escape"then
back()
elseif key=="return"or key=="space"then
resumeGame()
end
end
keyUp={} keyUp={}
function keyUp.play(key) function keyUp.play(key)
local m=setting.keyMap local m=setting.keyMap
@@ -346,13 +503,35 @@ function gamepadUp.play(key)
end end
function love.mousepressed(x,y,k,t,num)
if t then return end
mouseShow=true
mx,my=xOy:inverseTransformPoint(x,y)
if mouseDown[scene]then
mouseDown[scene](mx,my,k)
elseif k==2 then
back()
end
if k==1 then
if not sceneSwaping and Buttons.sel then
local B=Buttons.sel
B.code()
B.alpha=1
Buttons.sel=nil
love.mousemoved(x,y,0,0)
sysSFX("button")
end
end
end
function love.mousemoved(x,y,dx,dy,t) function love.mousemoved(x,y,dx,dy,t)
if t then return end 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 N,B in next,Buttons[scene]do if mouseMove[scene]then
mouseMove[scene](mx,my,dx/scr.k,dy/scr.k)
end
for _,B in next,Buttons[scene]do
if not(B.hide and B.hide())then if not(B.hide and B.hide())then
if abs(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=B
@@ -361,28 +540,12 @@ function love.mousemoved(x,y,dx,dy,t)
end end
end end
end end
function love.mousepressed(x,y,k,t,num)
if t then return end
mouseShow=true
mx,my=xOy:inverseTransformPoint(x,y)
if mouseDown[scene]then
mouseDown[scene](mx,my,k)
else
if k==1 then
if not sceneSwaping and Buttons.sel then
local B=Buttons.sel
B.code()
B.alpha=1
Buttons.sel=nil
love.mousemoved(x,y)
sysSFX("button")
end
elseif k==2 then
back()
end
end
end
function love.mousereleased(x,y,k,t,num) function love.mousereleased(x,y,k,t,num)
if t then return end
mx,my=xOy:inverseTransformPoint(x,y)
if mouseUp[scene]then
mouseUp[scene](mx,my,k)
end
end end
function love.wheelmoved(x,y) function love.wheelmoved(x,y)
if wheelmoved[scene]then wheelmoved[scene](x,y)end if wheelmoved[scene]then wheelmoved[scene](x,y)end
@@ -391,26 +554,11 @@ end
function love.touchpressed(id,x,y) function love.touchpressed(id,x,y)
if not touching then if not touching then
touching=id touching=id
love.mousemoved(x,y) love.mousemoved(x,y,0,0)
mouseShow=false mouseShow=false
end end
if scene=="play"then if touchDown[scene]then
if setting.virtualkeySwitch then touchDown[scene](id,xOy:inverseTransformPoint(x,y))
local t=onVirtualkey(x,y)
if t then
pressKey(t,players[1])
end
end
elseif scene=="setting3"then
x,y=xOy:inverseTransformPoint(x,y)
for K=1,#virtualkey do
local b=virtualkey[K]
if (x-b[1])^2+(y-b[2])^2<b[3]then
sel=K
end
end
elseif scene=="intro"then
gotoScene("main")
end end
end end
function love.touchreleased(id,x,y) function love.touchreleased(id,x,y)
@@ -426,43 +574,24 @@ function love.touchreleased(id,x,y)
Buttons.sel=nil Buttons.sel=nil
mouseShow=false mouseShow=false
end end
if scene=="play"and setting.virtualkeySwitch then if touchUp[scene]then
local t=onVirtualkey(x,y) touchUp[scene](id,xOy:inverseTransformPoint(x,y))
if t then
releaseKey(t,players[1])
end
elseif scene=="setting3"and sel then
x,y=xOy:inverseTransformPoint(x,y)
if sel then
local b=virtualkey[sel]
local k=snapLevelValue[snapLevel]
b[1],b[2]=int(b[1]/k+.5)*k,int(b[2]/k+.5)*k
end
end end
end end
function love.touchmoved(id,x,y,dx,dy) function love.touchmoved(id,x,y,dx,dy)
love.mousemoved(x,y)
mouseShow=false
if not Buttons.sel then if not Buttons.sel then
touching=nil touching=nil
end end
if scene=="play"and setting.virtualkeySwitch then x,y=xOy:inverseTransformPoint(x,y)
local l=tc.getTouches() if touchMove[scene]then
for n=1,#virtualkey do touchMove[scene](id,x,y,dx/scr.k,dy/scr.k)
local b=virtualkey[n] end
for i=1,#l do for _,B in next,Buttons[scene]do
local x,y=xOy:inverseTransformPoint(tc.getPosition(l[i])) if not(B.hide and B.hide())then
if(x-b[1])^2+(y-b[2])^2<=b[3]then goto L end if abs(x-B.x)<B.w*.5 and abs(y-B.y)<B.h*.5 then
Buttons.sel=B
return
end end
releaseKey(n,players[1])
::L::
end
elseif scene=="setting3"then
x,y=xOy:inverseTransformPoint(x,y)
dx,dy=dx*screenK,dy*screenK
if sel then
local b=virtualkey[sel]
b[1],b[2]=b[1]+dx,b[2]+dy
end end
end end
end end
@@ -478,6 +607,8 @@ function love.keypressed(i)
for k,B in next,Buttons[scene]do for k,B in next,Buttons[scene]do
print(format("x=%d,y=%d,w=%d,h=%d",B.x,B.y,B.w,B.h)) print(format("x=%d,y=%d,w=%d,h=%d",B.x,B.y,B.w,B.h))
end end
elseif i=="s"then
print(scr.x,scr.y,scr.w,scr.h,scr.k)
elseif Buttons.sel then elseif Buttons.sel then
local B=Buttons.sel local B=Buttons.sel
if i=="left"then B.x=B.x-10 if i=="left"then B.x=B.x-10
@@ -515,24 +646,34 @@ function love.gamepadreleased(joystick,i)
end end
end end
--[[ --[[
function love.joystickpressed(js,k) function love.joystickpressed(js,k)end
function love.joystickaxis(js,axis,valend
end function love.joystickhat(js,hat,dirend
function love.joystickaxis(js,axis,val) function love.sendData(data)end
function love.receiveData(id,data)end
end
function love.joystickhat(js,hat,dir)
end
function love.sendData(data)
return
end
function love.receiveData(id,data)
return
end
]] ]]
function love.lowmemory()
collectgarbage()
end
function love.resize(w,h)
if w>=h then scr.w,scr.h=w,h
else scr.w,scr.h=h,w
end
scr.r=h/w
if h/w>=.5625 then
scr.k=w/1280
scr.x,scr.y=0,(h-w*9/16)*.5
else
scr.k=h/720
scr.x,scr.y=(w-h*16/9)*.5,0
end
xOy=xOy:setTransformation(w*.5,h*.5,nil,scr.k,nil,640,360)
gc.replaceTransform(xOy)
collectgarbage()
end
function love.focus(f)
if not f and scene=="play"then pauseGame()end
end
function love.update(dt) function love.update(dt)
--[[ --[[
if players then if players then
@@ -559,7 +700,6 @@ function love.update(dt)
B.alpha=0 B.alpha=0
end--Reset buttons' alpha end--Reset buttons' alpha
scene=sceneSwaping.tar scene=sceneSwaping.tar
BGM("blank")
sceneInit[scene]() sceneInit[scene]()
Buttons.sel=nil Buttons.sel=nil
elseif sceneSwaping.time==0 then elseif sceneSwaping.time==0 then
@@ -575,8 +715,9 @@ function love.update(dt)
updateButton() updateButton()
end end
function love.draw() function love.draw()
Pnt.BG[curBG]() gc.discard()--SPEED UPUPUP!
gc.setColor(1,1,1,.22) Pnt.BG[setting.bg and curBG or"grey"]()
gc.setColor(1,1,1,.2)
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
@@ -600,77 +741,44 @@ function love.draw()
end end
if sceneSwaping then sceneSwaping.draw()end if sceneSwaping then sceneSwaping.draw()end
if wh/ww>.5625 then if scr.r==.5625 then goto L end
gc.setColor(0,0,0) if scr.r>.5625 then
gc.rectangle("fill",0,0,1280,ww*9/16-wh) gc.setColor(0,0,0)
gc.rectangle("fill",0,720,1280,wh-ww*9/16) gc.rectangle("fill",0,0,1280,scr.w*9/16-scr.h)
elseif wh/ww<.5625 then gc.rectangle("fill",0,720,1280,scr.h-scr.w*9/16)
gc.setColor(0,0,0) else
gc.rectangle("fill",0,0,wh*16/9-ww,720) gc.setColor(0,0,0)
gc.rectangle("fill",1280,0,ww-wh*16/9,720) gc.rectangle("fill",0,0,scr.h*16/9-scr.w,720)
end gc.rectangle("fill",1280,0,scr.w-scr.h*16/9,720)
end
::L::
setFont(20)gc.setColor(1,1,1) setFont(20)gc.setColor(1,1,1)
gc.print(tm.getFPS(),5,700) gc.print(tm.getFPS(),5,700)
if devMode then if devMode then
gc.print(gcinfo(),5,680) gc.print(gcinfo(),5,680)
gc.print(freeRow and #freeRow or 0,5,660) gc.print(#freeRow or 0,5,660)
end end
end end
function love.resize(w,h)
if w>=h then ww,wh=w,h
else ww,wh=h,w
end
screenK=h/w>=.5625 and w/1280 or h/720
xOy=xOy:setTransformation(w*.5,h*.5,nil,screenK,nil,640,360)
gc.replaceTransform(xOy)
collectgarbage()
end
function love.run() function love.run()
local frameT=Timer() local frameT=Timer()
local readyDrawFrame=0 local readyDrawFrame=0
love.resize(gc.getWidth(),gc.getHeight()) love.resize(gc.getWidth(),gc.getHeight())
scene="load"sceneInit.load()--System Launch scene="load"sceneInit.load()--System Launch
math.randomseed(os.time()*626)
return function() return function()
love.event.pump() love.event.pump()
for name,a,b,c,d,e,f in love.event.poll()do for name,a,b,c,d,e,f in love.event.poll()do
if name=="quit"then return 0 end if name=="quit"then return 0 end
love.handlers[name](a,b,c,d,e,f) if love[name]then love[name](a,b,c,d,e,f)end
end end
if focus then tm.step()
tm.step() -- love.receiveData(id,data)
-- love.receiveData(id,data) love.update(tm.getDelta())
love.update(tm.getDelta()) readyDrawFrame=readyDrawFrame+setting.frameMul
readyDrawFrame=readyDrawFrame+setting.frameMul if readyDrawFrame>=100 then
if readyDrawFrame>=100 then readyDrawFrame=readyDrawFrame-100
readyDrawFrame=readyDrawFrame-100 gc.clear()
gc.clear() love.draw()
love.draw() gc.present()
gc.present()
end
if not(wd.hasFocus()or keeprun)then
focus=false
ms.setVisible(true)
if bgmPlaying then bgm[bgmPlaying]:pause()end
if scene=="play"then
for i=1,#players.alive do
local l=players.alive[i].keyPressing
for j=1,#l do
if l[j]then
releaseKey(j,players.alive[i])
end
end
end
end
end
else
tm.sleep(.5)
if wd.hasFocus()then
tm.step()
focus=true
ms.setVisible(false)
if bgmPlaying then bgm[bgmPlaying]:play()end
end
end end
::L::if Timer()-frameT<1/60 then goto L end ::L::if Timer()-frameT<1/60 then goto L end
frameT=Timer() frameT=Timer()

View File

@@ -9,7 +9,7 @@ function love.conf(t)
t.audio.mixwithsystem=true--Switch on to keep sysBGM t.audio.mixwithsystem=true--Switch on to keep sysBGM
local W=t.window local W=t.window
W.title="Techmino V0.7.13+" W.title="Techmino V0.7.15"
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

View File

@@ -149,13 +149,30 @@ loadmode={
modeEnv[k]=customRange[k][customSel[k]] modeEnv[k]=customRange[k][customSel[k]]
end end
modeEnv._20G=modeEnv.drop==-1 modeEnv._20G=modeEnv.drop==-1
createPlayer(1,340,15)
if modeEnv.opponent==0 then if modeEnv.opponent==0 then
createPlayer(1,340,15)
else else
modeEnv.target=nil modeEnv.target=nil
createPlayer(1,340,15)
createPlayer(2,965,360,.5,modeEnv.opponent) createPlayer(2,965,360,.5,modeEnv.opponent)
end end
if curMode.lv==1 then
local h=20
::R::
for i=1,10 do
if preField[h][i]>0 then goto L end
end
h=h-1
if h>0 then goto R end
::L::
for _,P in next,players.alive do
local t=P.showTime*3
for y=1,h do
P.field[y]=getNewRow(0)
P.visTime[y]=getNewRow(t)
for x=1,10 do P.field[y][x]=preField[y][x]end
end
end
end
end, end,
} }
mesDisp={ mesDisp={
@@ -221,7 +238,7 @@ mesDisp={
end, end,
dig=function() dig=function()
setFont(70) setFont(70)
mStr(P.cstat.event,-82,310) mStr(P.cstat.event-20,-82,310)
setFont(30) setFont(30)
mStr("Wave",-82,375) mStr("Wave",-82,375)
end, end,
@@ -257,7 +274,7 @@ mesDisp={
setFont(30) setFont(30)
gc.print(up0to4[P.strength],-132,290) gc.print(up0to4[P.strength],-132,290)
for i=1,P.strength do for i=1,P.strength do
gc.draw(badgeIcon,16*i-142,260) gc.draw(badgeIcon,16*i-138,260)
end end
end, end,
techmino99=function() techmino99=function()
@@ -272,7 +289,7 @@ mesDisp={
setFont(30) setFont(30)
gc.print(up0to4[P.strength],-132,290) gc.print(up0to4[P.strength],-132,290)
for i=1,P.strength do for i=1,P.strength do
gc.draw(badgeIcon,16*i-142,260) gc.draw(badgeIcon,16*i-138,260)
end end
end, end,
drought=function() drought=function()
@@ -284,6 +301,15 @@ mesDisp={
setFont(75) setFont(75)
mStr(max(P.gameEnv.target-P.cstat.row,0),-82,280) mStr(max(P.gameEnv.target-P.cstat.row,0),-82,280)
end end
if curMode.lv==2 and(P.keyPressing[9]or frame<180)then
gc.setLineWidth(3)
for y=1,20 do for x=1,10 do
if preField[y][x]>0 then
gc.setColor(blockColor[preField[y][x]])
gc.rectangle("line",30*x-25,605-30*y,20,20)
end
end end
end
end end
} }
Event={ Event={
@@ -432,8 +458,7 @@ Event_gameover={
end end
end end
showText(P,text.win,"beat",90,nil,nil,true) showText(P,text.win,"beat",90,nil,nil,true)
if P.id==1 and players[2]and players[2].ai then SFX("win")BGM()end SFX("win")
newTask(Event_task.win,P)
end, end,
lose=function() lose=function()
P.alive=false P.alive=false
@@ -505,58 +530,33 @@ Event_gameover={
BGM("end") BGM("end")
end end
end end
newTask(Event_task.lose,P)
if #players.alive==1 then if #players.alive==1 then
local t=P local t=P
P=players.alive[1] P=players.alive[1]
Event_gameover.win() Event_gameover.win()
P=t P=t
end end
if #players>1 then
newTask(Event_task.lose,P)
end
end, end,
} }
Event_task={ Event_task={
win=function(P)
P.endCounter=P.endCounter+1
if P.endCounter>80 then
if P.gameEnv.visible=="show"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) lose=function(P)
P.endCounter=P.endCounter+1 P.endCounter=P.endCounter+1
if P.endCounter>80 then if P.endCounter>80 then
if P.gameEnv.visible=="show"then for i=1,#P.field do
for i=1,#P.field do for j=1,10 do
for j=1,10 do if P.visTime[i][j]>0 then
if P.visTime[i][j]>0 then P.visTime[i][j]=P.visTime[i][j]-1
P.visTime[i][j]=P.visTime[i][j]-1
end
end end
end end
if P.endCounter==100 then end
for i=1,#P.field do if P.endCounter==100 then
removeRow(P.field) while P.field[1]do
removeRow(P.visTime) removeRow(P.field)
end removeRow(P.visTime)
return true
end end
elseif P.endCounter==100 then
return true return true
end end
end end
@@ -574,7 +574,7 @@ Event_task={
dig_normal=function(P) dig_normal=function(P)
if not P.control then return end if not P.control then return end
P.counter=P.counter+1 P.counter=P.counter+1
if #P.clearing==0 and P.counter>=max(90,180-2*P.cstat.event)then if P.counter>=max(90,180-2*P.cstat.event)then
garbageRise(10,1,rnd(10)) garbageRise(10,1,rnd(10))
P.counter=0 P.counter=0
P.cstat.event=P.cstat.event+1 P.cstat.event=P.cstat.event+1
@@ -583,7 +583,7 @@ Event_task={
dig_lunatic=function(P) dig_lunatic=function(P)
if not P.control then return end if not P.control then return end
P.counter=P.counter+1 P.counter=P.counter+1
if #P.clearing==0 and P.counter>=max(45,80-.4*P.cstat.event)then if P.counter>=max(45,80-.4*P.cstat.event)then
garbageRise(11+P.cstat.event%3,1,rnd(10)) garbageRise(11+P.cstat.event%3,1,rnd(10))
P.counter=0 P.counter=0
P.cstat.event=P.cstat.event+1 P.cstat.event=P.cstat.event+1
@@ -592,7 +592,7 @@ Event_task={
survivor_easy=function(P) survivor_easy=function(P)
if not P.control then return end if not P.control then return end
P.counter=P.counter+1 P.counter=P.counter+1
if P.counter==max(60,150-2*P.cstat.event)then if P.counter>=max(60,150-2*P.cstat.event)then
ins(P.atkBuffer,{pos=rnd(10),amount=1,countdown=30,cd0=30,time=0,sent=false,lv=1}) ins(P.atkBuffer,{pos=rnd(10),amount=1,countdown=30,cd0=30,time=0,sent=false,lv=1})
P.counter=0 P.counter=0
if P.cstat.event==45 then showText(P,text.maxspeed,"appear",80,-140)end if P.cstat.event==45 then showText(P,text.maxspeed,"appear",80,-140)end
@@ -602,7 +602,7 @@ Event_task={
survivor_normal=function(P) survivor_normal=function(P)
if not P.control then return end if not P.control then return end
P.counter=P.counter+1 P.counter=P.counter+1
if P.counter==max(90,180-2*P.cstat.event)then if P.counter>=max(90,180-2*P.cstat.event)then
local d=P.cstat.event+1 local d=P.cstat.event+1
if d%4==0 then ins(P.atkBuffer,{pos=rnd(10),amount=1,countdown=60,cd0=60,time=0,sent=false,lv=1}) if d%4==0 then ins(P.atkBuffer,{pos=rnd(10),amount=1,countdown=60,cd0=60,time=0,sent=false,lv=1})
elseif d%4==1 then ins(P.atkBuffer,{pos=rnd(10),amount=2,countdown=70,cd0=70,time=0,sent=false,lv=1}) elseif d%4==1 then ins(P.atkBuffer,{pos=rnd(10),amount=2,countdown=70,cd0=70,time=0,sent=false,lv=1})
@@ -619,7 +619,7 @@ Event_task={
survivor_hard=function(P) survivor_hard=function(P)
if not P.control then return end if not P.control then return end
P.counter=P.counter+1 P.counter=P.counter+1
if P.counter==max(60,180-2*P.cstat.event)then if P.counter>=max(60,180-2*P.cstat.event)then
if P.cstat.event%3<2 then if P.cstat.event%3<2 then
ins(P.atkBuffer,{pos=rnd(10),amount=1,countdown=0,cd0=0,time=0,sent=false,lv=1}) ins(P.atkBuffer,{pos=rnd(10),amount=1,countdown=0,cd0=0,time=0,sent=false,lv=1})
else else
@@ -635,7 +635,7 @@ Event_task={
survivor_lunatic=function(P) survivor_lunatic=function(P)
if not P.control then return end if not P.control then return end
P.counter=P.counter+1 P.counter=P.counter+1
if P.counter==max(60,150-P.cstat.event)then if P.counter>=max(60,150-P.cstat.event)then
local t=max(60,90-P.cstat.event) local t=max(60,90-P.cstat.event)
ins(P.atkBuffer,{pos=rnd(10),amount=4,countdown=t,cd0=t,time=0,sent=false,lv=3}) ins(P.atkBuffer,{pos=rnd(10),amount=4,countdown=t,cd0=t,time=0,sent=false,lv=3})
P.atkBuffer.sum=P.atkBuffer.sum+4 P.atkBuffer.sum=P.atkBuffer.sum+4
@@ -648,7 +648,7 @@ Event_task={
survivor_ultimate=function(P) survivor_ultimate=function(P)
if not P.control then return end if not P.control then return end
P.counter=P.counter+1 P.counter=P.counter+1
if P.counter==max(300,600-10*P.cstat.event)then if P.counter>=max(300,600-10*P.cstat.event)then
local t=max(300,480-12*P.cstat.event) local t=max(300,480-12*P.cstat.event)
ins(P.atkBuffer,{pos=rnd(10),amount=4,countdown=t,cd0=t,time=0,sent=false,lv=2}) ins(P.atkBuffer,{pos=rnd(10),amount=4,countdown=t,cd0=t,time=0,sent=false,lv=2})
ins(P.atkBuffer,{pos=rnd(10),amount=4,countdown=t,cd0=t,time=0,sent=false,lv=3}) ins(P.atkBuffer,{pos=rnd(10),amount=4,countdown=t,cd0=t,time=0,sent=false,lv=3})
@@ -666,7 +666,7 @@ Event_task={
if P.counter==21 then if P.counter==21 then
local t=P.cstat.pc%2 local t=P.cstat.pc%2
for i=1,4 do for i=1,4 do
local r=getNewRow() local r=getNewRow(0)
for j=1,10 do for j=1,10 do
r[j]=PCbase[4*t+i][j] r[j]=PCbase[4*t+i][j]
end end
@@ -699,98 +699,84 @@ defaultModeEnv={
drop=60, drop=60,
target=10, target=10,
reach=Event_gameover.win, reach=Event_gameover.win,
bg="strap", bg="strap",bgm="race",
bgm="race",
}, },
{ {
drop=60, drop=60,
target=20, target=20,
reach=Event_gameover.win, reach=Event_gameover.win,
bg="strap", bg="strap",bgm="race",
bgm="race",
}, },
{ {
drop=60, drop=60,
target=40, target=40,
reach=Event_gameover.win, reach=Event_gameover.win,
bg="strap", bg="strap",bgm="race",
bgm="race",
}, },
{ {
drop=60, drop=60,
target=100, target=100,
reach=Event_gameover.win, reach=Event_gameover.win,
bg="strap", bg="strap",bgm="race",
bgm="race",
}, },
{ {
drop=60, drop=60,
target=400, target=400,
reach=Event_gameover.win, reach=Event_gameover.win,
bg="strap", bg="strap",bgm="push",
bgm="push",
}, },
{ {
drop=60, drop=60,
target=1000, target=1000,
reach=Event_gameover.win, reach=Event_gameover.win,
bg="strap", bg="strap",bgm="push",
bgm="push",
}, },
}, },
marathon={ marathon={
{ {
drop=60, drop=60,lock=60,
lock=60,
fall=30, fall=30,
target=200, target=200,
reach=Event.marathon_reach, reach=Event.marathon_reach,
bg="strap", bg="strap",bgm="way",
bgm="way",
}, },
{ {
drop=60, drop=60,
fall=20, fall=20,
target=10, target=10,
reach=Event.marathon_reach, reach=Event.marathon_reach,
bg="strap", bg="strap",bgm="way",
bgm="way",
}, },
{ {
_20G=true, _20G=true,
fall=15, fall=15,
target=200, target=200,
reach=Event.marathon_reach, reach=Event.marathon_reach,
bg="strap", bg="strap",bgm="race",
bgm="race",
}, },
}, },
master={ master={
{ {
_20G=true, _20G=true,
drop=0, drop=0,lock=rush_lock[1],
lock=rush_lock[1],
wait=rush_wait[1], wait=rush_wait[1],
fall=rush_fall[1], fall=rush_fall[1],
target=0, target=0,
reach=Event.master_reach_lunatic, reach=Event.master_reach_lunatic,
das=9,arr=3, das=9,arr=3,
freshLimit=15, freshLimit=15,
bg="game2", bg="game2",bgm="secret8th",
bgm="secret8th",
}, },
{ {
_20G=true, _20G=true,
drop=0, drop=0,lock=death_lock[1],
lock=death_lock[1],
wait=death_wait[1], wait=death_wait[1],
fall=death_fall[1], fall=death_fall[1],
target=0, target=0,
reach=Event.master_reach_ultimate, reach=Event.master_reach_ultimate,
das=6,arr=1, das=6,arr=1,
freshLimit=15, freshLimit=15,
bg="game2", bg="game2",bgm="secret7th",
bgm="secret7th",
}, },
}, },
classic={ classic={
@@ -805,349 +791,292 @@ defaultModeEnv={
freshLimit=0, freshLimit=0,
target=10, target=10,
reach=Event.classic_reach, reach=Event.classic_reach,
bg="rgb", bg="rgb",bgm="rockblock",
bgm="rockblock",
}, },
}, },
zen={ zen={
{ {
drop=1e99, drop=1e99,lock=1e99,
lock=1e99,
oncehold=false, oncehold=false,
target=200, target=200,
reach=Event_gameover.win, reach=Event_gameover.win,
bg="strap", bg="strap",bgm="infinite",
bgm="infinite",
}, },
}, },
infinite={ infinite={
{ {
drop=1e99, drop=1e99,lock=1e99,
lock=1e99,
oncehold=false, oncehold=false,
bg="glow", bg="glow",bgm="infinite",
bgm="infinite",
}, },
}, },
solo={ solo={
{ {
freshLimit=15, freshLimit=15,
bg="game2", bg="game2",bgm="race",
bgm="race",
}, },
}, },
tsd={ tsd={
{ {
oncehold=false, oncehold=false,
drop=1e99, drop=1e99,lock=1e99,
lock=1e99,
freshLimit=15, freshLimit=15,
target=1, target=1,
reach=Event.tsd_reach, reach=Event.tsd_reach,
ospin=false, ospin=false,
bg="matrix", bg="matrix",bgm="reason",
bgm="reason",
}, },
{ {
drop=60, drop=60,lock=60,
lock=60,
freshLimit=15, freshLimit=15,
target=1, target=1,
reach=Event.tsd_reach, reach=Event.tsd_reach,
ospin=false, ospin=false,
bg="matrix", bg="matrix",bgm="reason",
bgm="reason",
}, },
}, },
blind={ blind={
{ {
drop=30, drop=30,lock=60,
lock=60,
freshLimit=15, freshLimit=15,
visible="time", visible="time",
bg="glow", bg="glow",bgm="newera",
bgm="newera",
}, },
{ {
drop=15, drop=15,lock=60,
lock=60,
freshLimit=15, freshLimit=15,
visible="fast", visible="fast",
freshLimit=10, freshLimit=10,
bg="glow", bg="glow",bgm="reason",
bgm="reason",
}, },
{ {
fall=10, fall=10,lock=60,
lock=60,
center=false, center=false,
ghost=false, ghost=false,
visible="none", visible="none",
freshLimit=15, freshLimit=15,
bg="rgb", bg="rgb",bgm="secret7th",
bgm="secret7th",
}, },
{ {
fall=5, fall=5,lock=60,
lock=60,
center=false, center=false,
visible="none", visible="none",
freshLimit=15, freshLimit=15,
bg="rgb", bg="rgb",bgm="secret8th",
bgm="secret8th",
}, },
{ {
fall=5, fall=5,lock=60,
lock=60,
block=false, block=false,
center=false, center=false,
ghost=false, ghost=false,
visible="none", visible="none",
freshLimit=15, freshLimit=15,
bg="rgb", bg="rgb",bgm="secret7th",
bgm="secret7th",
}, },
{ {
_20G=true, _20G=true,
drop=0, drop=0,lock=15,
lock=15,
wait=10, wait=10,
fall=15, fall=15,
visible="fast", visible="fast",
freshLimit=15, freshLimit=15,
arr=1, arr=1,
bg="game3", bg="game3",bgm="secret8th",
bgm="secret8th",
}, },
}, },
dig={ dig={
{ {
drop=60, drop=60,lock=120,
lock=120,
fall=20, fall=20,
freshLimit=15, freshLimit=15,
bg="game2", bg="game2",bgm="push",
bgm="push",
}, },
{ {
drop=10, drop=10,lock=30,
lock=30,
freshLimit=15, freshLimit=15,
bg="game2", bg="game2",bgm="secret7th",
bgm="secret7th",
}, },
}, },
survivor={ survivor={
{ {
drop=60, drop=60,lock=120,
lock=120,
fall=30, fall=30,
freshLimit=15, freshLimit=15,
bg="game2", bg="game2",bgm="push",
bgm="push",
}, },
{ {
drop=30, drop=30,lock=60,
lock=60,
fall=20, fall=20,
freshLimit=15, freshLimit=15,
bg="game2", bg="game2",bgm="newera",
bgm="newera",
}, },
{ {
drop=10, drop=10,lock=60,
lock=60,
fall=15, fall=15,
freshLimit=15, freshLimit=15,
bg="game2", bg="game2",bgm="secret8th",
bgm="secret8th",
}, },
{ {
drop=5, drop=5,lock=60,
lock=60,
fall=10, fall=10,
freshLimit=15, freshLimit=15,
bg="game3", bg="game3",bgm="secret7th",
bgm="secret7th",
}, },
{ {
drop=5, drop=5,lock=60,
lock=60,
fall=10, fall=10,
freshLimit=15, freshLimit=15,
bg="rgb", bg="rgb",bgm="secret7th",
bgm="secret7th",
}, },
}, },
tech={ tech={
{ {
oncehold=false, oncehold=false,
drop=1e99, drop=1e99,lock=1e99,
lock=1e99,
target=0, target=0,
reach=Event.tech_reach, reach=Event.tech_reach,
bg="matrix", bg="matrix",bgm="way",
bgm="way",
}, },
{ {
drop=30, drop=30,lock=60,
lock=60,
target=0, target=0,
reach=Event.tech_reach, reach=Event.tech_reach,
bg="matrix", bg="matrix",bgm="way",
bgm="way",
}, },
{ {
drop=15, drop=15,lock=60,
lock=60,
target=0, target=0,
reach=Event.tech_reach_hard, reach=Event.tech_reach_hard,
freshLimit=15, freshLimit=15,
bg="matrix", bg="matrix",bgm="way",
bgm="way",
}, },
{ {
drop=5, drop=5,lock=40,
lock=40,
target=0, target=0,
freshLimit=15, freshLimit=15,
reach=Event.tech_reach_hard, reach=Event.tech_reach_hard,
bg="matrix", bg="matrix",bgm="way",
bgm="way",
}, },
{ {
drop=1, drop=1,lock=40,
lock=40,
target=0, target=0,
freshLimit=15, freshLimit=15,
reach=Event.tech_reach_hard, reach=Event.tech_reach_hard,
bg="matrix", bg="matrix",bgm="secret7th",
bgm="secret7th",
}, },
}, },
pctrain={ pctrain={
{ {
next=4, next=4,
hold=false, hold=false,
drop=120, drop=120,lock=120,
lock=120,
fall=20, fall=20,
sequence="pc", sequence="pc",
target=0, target=0,
reach=Event.newPC, reach=Event.newPC,
ospin=false, ospin=false,
bg="rgb", bg="rgb",bgm="newera",
bgm="newera",
}, },
{ {
next=4, next=4,
hold=false, hold=false,
drop=60, drop=60,lock=60,
lock=60,
fall=20, fall=20,
sequence="pc", sequence="pc",
target=0, target=0,
freshLimit=15, freshLimit=15,
reach=Event.newPC, reach=Event.newPC,
ospin=false, ospin=false,
bg="rgb", bg="rgb",bgm="newera",
bgm="newera",
}, },
}, },
pcchallenge={ pcchallenge={
{ {
oncehold=false, oncehold=false,
drop=300, drop=300,lock=1e99,
lock=1e99,
target=100, target=100,
reach=Event_gameover.win, reach=Event_gameover.win,
ospin=false, ospin=false,
bg="rgb", bg="rgb",bgm="newera",
bgm="newera",
}, },
{ {
drop=60, drop=60,lock=120,
lock=120,
fall=10, fall=10,
target=100, target=100,
reach=Event_gameover.win, reach=Event_gameover.win,
freshLimit=15, freshLimit=15,
ospin=false, ospin=false,
bg="rgb", bg="rgb",bgm="infinite",
bgm="infinite",
}, },
{ {
drop=20, drop=20,lock=60,
lock=60,
fall=20, fall=20,
target=100, target=100,
reach=Event_gameover.win, reach=Event_gameover.win,
freshLimit=15, freshLimit=15,
ospin=false, ospin=false,
bg="rgb", bg="rgb",bgm="infinite",
bgm="infinite",
}, },
}, },
techmino41={ techmino41={
{ {
fall=20, fall=20,
royaleMode=true, royaleMode=true,
Fkey=true,
royalePowerup={2,5,10,20}, royalePowerup={2,5,10,20},
royaleRemain={30,20,15,10,5}, royaleRemain={30,20,15,10,5},
pushSpeed=2, pushSpeed=2,
freshLimit=15, freshLimit=15,
bg="game3", bg="game3",bgm="rockblock",
bgm="rockblock",
}, },
}, },
techmino99={ techmino99={
{ {
fall=20, fall=20,
royaleMode=true, royaleMode=true,
Fkey=true,
royalePowerup={2,6,14,30}, royalePowerup={2,6,14,30},
royaleRemain={75,50,35,20,10}, royaleRemain={75,50,35,20,10},
pushSpeed=2, pushSpeed=2,
freshLimit=15, freshLimit=15,
bg="game3", bg="game3",bgm="rockblock",
bgm="rockblock",
}, },
}, },
drought={ drought={
{ {
drop=20, drop=20,lock=60,
lock=60,
sequence="drought1", sequence="drought1",
target=100, target=100,
reach=Event_gameover.win, reach=Event_gameover.win,
ospin=false, ospin=false,
freshLimit=15, freshLimit=15,
bg="glow", bg="glow",bgm="reason",
bgm="reason",
}, },
{ {
drop=20, drop=20,lock=60,
lock=60,
sequence="drought2", sequence="drought2",
target=100, target=100,
reach=Event_gameover.win, reach=Event_gameover.win,
ospin=false, ospin=false,
freshLimit=15, freshLimit=15,
bg="glow", bg="glow",bgm="reason",
bgm="reason",
}, },
}, },
hotseat={ hotseat={
{ {
freshLimit=15, freshLimit=15,
bg="none", bg="none",bgm="way",
bgm="way",
}, },
}, },
custom={ custom={
{ {
bg="none",
bgm="reason",
reach=Event_gameover.win, reach=Event_gameover.win,
bg="none",bgm="reason",
},
{
Fkey=true,
reach=Event_gameover.win,
bg="none",bgm="reason",
}, },
}, },
} }

BIN
font.ttf

Binary file not shown.

View File

@@ -157,13 +157,21 @@ function loadGame(mode,level)
PTC.attack[1]:reset()PTC.attack[2]:reset()PTC.attack[3]:reset() PTC.attack[1]:reset()PTC.attack[2]:reset()PTC.attack[3]:reset()
drawableText.modeName:set(text.modeName[mode]) drawableText.modeName:set(text.modeName[mode])
drawableText.levelName:set(modeLevel[modeID[mode]][level]) drawableText.levelName:set(modeLevel[modeID[mode]][level])
needResetGameData=true
gotoScene("play","deck") gotoScene("play","deck")
end end
function resetGameData() function resetGameData()
frame=0 frame=0
garbageSpeed=1 garbageSpeed=1
pushSpeed=3 pushSpeed=3
if players then
for _,P in next,players do if P.id then
while P.field[1]do
removeRow(P.field)
removeRow(P.visTime)
end
end end
end
players={alive={}}human=0 players={alive={}}human=0
modeEnv=defaultModeEnv[curMode.id][curMode.lv]or defaultModeEnv[curMode.id][1] modeEnv=defaultModeEnv[curMode.id][curMode.lv]or defaultModeEnv[curMode.id][1]
loadmode[curMode.id]() loadmode[curMode.id]()
@@ -193,12 +201,11 @@ function resetGameData()
virtualkey[i].press=false virtualkey[i].press=false
end end
stat.game=stat.game+1 stat.game=stat.game+1
local p=60*#players
freeRow={} while freeRow[p]do
collectgarbage() rem(freeRow)
for i=1,30*#players do
freeRow[i]={0,0,0,0,0,0,0,0,0,0}
end end
collectgarbage()
end end
function gameStart() function gameStart()
sysSFX("start") sysSFX("start")
@@ -224,6 +231,7 @@ function createPlayer(id,x,y,size,AIspeed,data)
P.size=P.size*5 P.size=P.size*5
else else
P.centerX,P.centerY=P.x+300*P.size,P.y+670*P.size P.centerX,P.centerY=P.x+300*P.size,P.y+670*P.size
P.absFieldPos={P.x+150*P.size,P.y+60*P.size}
end end
if AIspeed then if AIspeed then
@@ -368,6 +376,9 @@ function garbageRise(color,amount,pos)
end end
P.fieldBeneath=P.fieldBeneath+amount*30 P.fieldBeneath=P.fieldBeneath+amount*30
P.curY,P.y_img=P.curY+amount,P.y_img+amount P.curY,P.y_img=P.curY+amount,P.y_img+amount
for i=1,#P.clearing do
P.clearing[i]=P.clearing[i]+amount
end
if #P.field>40 then Event_gameover.lose()end if #P.field>40 then Event_gameover.lose()end
end end
function createBeam(S,R,lv)--Player id function createBeam(S,R,lv)--Player id
@@ -666,6 +677,7 @@ function spin(d,ifpre)
end end
goto fail goto fail
::spin:: ::spin::
createShade(P.curX,P.curY+P.r-1,P.curX+P.c-1,P.curY)
P.curX,P.curY,P.dir=ix,iy,idir P.curX,P.curY,P.dir=ix,iy,idir
P.sc,P.cur.bk=scs[P.cur.id][idir],icb P.sc,P.cur.bk=scs[P.cur.id][idir],icb
P.r,P.c=ir,ic P.r,P.c=ir,ic
@@ -673,7 +685,7 @@ function spin(d,ifpre)
freshgho() freshgho()
freshLockDelay() freshLockDelay()
SFX(ifpre and"prerotate"or ifoverlap(P.cur.bk,P.curX,P.curY+1)and ifoverlap(P.cur.bk,P.curX-1,P.curY)and ifoverlap(P.cur.bk,P.curX+1,P.curY)and"rotatekick"or"rotate") SFX(ifpre and"prerotate"or ifoverlap(P.cur.bk,P.curX,P.curY+1)and ifoverlap(P.cur.bk,P.curX-1,P.curY)and ifoverlap(P.cur.bk,P.curX+1,P.curY)and"rotatekick"or"rotate")
if id==1 then if P.id==1 then
stat.rotate=stat.rotate+1 stat.rotate=stat.rotate+1
end end
::fail:: ::fail::
@@ -805,18 +817,17 @@ function drop()
P.b2b=P.b2b+20 P.b2b=P.b2b+20
end end
end end
csend=csend+(renATK[P.combo]or 4)
if #P.clearing==#P.field then if #P.clearing==#P.field then
showText(P,text.PC,"flicker",70,-80) showText(P,text.PC,"flicker",70,-80)
csend=csend+min(6+P.cstat.pc,10) csend=min(csend,4)+min(6+P.cstat.pc,10)
exblock=exblock+2 exblock=exblock+2
sendTime=sendTime+30 sendTime=sendTime+60
if P.cstat.row>4 then P.b2b=1200 end if P.cstat.row>4 then P.b2b=1200 end
P.cstat.pc=P.cstat.pc+1 P.cstat.pc=P.cstat.pc+1
P.lastClear=P.cur.id*10+5 P.lastClear=P.cur.id*10+5
SFX("perfectclear") SFX("perfectclear")
end end
csend=csend+(renATK[P.combo]or 4)
if P.combo>2 then if P.combo>2 then
showText(P,text.cmb[min(P.combo,20)],P.combo<10 and"appear"or"flicker",20+P.combo*3,60) showText(P,text.cmb[min(P.combo,20)],P.combo<10 and"appear"or"flicker",20+P.combo*3,60)
end end
@@ -907,7 +918,7 @@ end
function lock() function lock()
for i=1,P.r do for i=1,P.r do
local y=P.curY+i-1 local y=P.curY+i-1
if not P.field[y]then P.field[y],P.visTime[y]=getNewRow(),getNewRow()end if not P.field[y]then P.field[y],P.visTime[y]=getNewRow(0),getNewRow(0)end
for j=1,P.c do for j=1,P.c do
if P.cur.bk[i][j]then if P.cur.bk[i][j]then
P.field[y][P.curX+j-1]=P.cur.color P.field[y][P.curX+j-1]=P.cur.color
@@ -994,7 +1005,7 @@ act={
end end
end, end,
rotRight=function()spin(1)end, rotRight=function()spin(1)end,
rotLeft=function()spin(3)end, rotLeft=function()spin(-1)end,
rotFlip=function()spin(2)end, rotFlip=function()spin(2)end,
hardDrop=function() hardDrop=function()
if P.keyPressing[9]and setting.swap then if P.keyPressing[9]and setting.swap then
@@ -1025,21 +1036,29 @@ act={
end end
end, end,
hold=function()hold()end, hold=function()hold()end,
swap=function() func=function()
if modeEnv.royaleMode then if modeEnv.Fkey then
for i=1,#P.keyPressing do if modeEnv.royaleMode then
if P.keyPressing[i]then for i=1,#P.keyPressing do
P.keyPressing[i]=false if P.keyPressing[i]then
P.keyPressing[i]=false
end
end
if setting.swap then
P.keyPressing[9]=true
else
changeAtkMode(P.atkMode<3 and P.atkMode+2 or 5-P.atkMode)
P.swappingAtkMode=30
end end
end end
if setting.swap then if curMode.id=="custom"and curMode.lv==2 and#P.field>0 then
P.keyPressing[9]=true for y=1,#P.field do
else for x=1,10 do
changeAtkMode(P.atkMode<3 and P.atkMode+2 or 5-P.atkMode) if P.field[y][x]~=preField[y][x]then return end
P.swappingAtkMode=30 end
end
Event_gameover.win()
end end
else
P.keyPressing[9]=false
end end
end, end,
restart=function() restart=function()
@@ -1057,7 +1076,7 @@ act={
local x0=cx local x0=cx
::L::if not ifoverlap(P.cur.bk,P.curX-1,P.curY)then ::L::if not ifoverlap(P.cur.bk,P.curX-1,P.curY)then
P.curX=P.curX-1 P.curX=P.curX-1
createShade(P.curX-1,P.curY+P.r-1,P.curX+P.c-1,P.curY) createShade(P.curX+1,P.curY+P.r-1,P.curX+P.c-1,P.curY)
freshgho() freshgho()
goto L goto L
end end
@@ -1067,7 +1086,7 @@ act={
local x0=cx local x0=cx
::L::if not ifoverlap(P.cur.bk,P.curX+1,P.curY)then ::L::if not ifoverlap(P.cur.bk,P.curX+1,P.curY)then
P.curX=P.curX+1 P.curX=P.curX+1
createShade(P.curX,P.curY+P.r-1,P.curX+P.c-1,P.curY) createShade(P.curX-1,P.curY+P.r-1,P.curX+P.c-1,P.curY)
freshgho() freshgho()
goto L goto L
end end

BIN
image/virtualkey/func.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 370 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 300 B

View File

@@ -21,6 +21,7 @@ return{
win="胜利", win="胜利",
lose="失败", lose="失败",
pause="暂停",
custom="自定义游戏", custom="自定义游戏",
customOption={ customOption={
@@ -52,12 +53,12 @@ return{
softdropdas="软降DAS:", softdropdas="软降DAS:",
softdroparr="软降ARR:", softdroparr="软降ARR:",
snapLevelName={"任意摆放","10px吸附","20px吸附","40px吸附","60px吸附","80px吸附"}, snapLevelName={"任意摆放","10px吸附","20px吸附","40px吸附","60px吸附","80px吸附"},
keyboard="键盘", keyboard="键盘",joystick="手柄",
joystick="手柄", space="空格",enter="回车",
setting2Help="方向键选择/翻页,回车修改,esc返回", setting2Help="方向键选择/翻页,回车修改,esc返回",
actName={"左移:","右移:","顺时针旋转:","逆时针旋转:","180°旋转","硬降:","软降:","暂存:","切换攻击:","重新开始:","左瞬移:","右瞬移:","软降到底:"}, actName={"左移:","右移:","顺时针旋转:","逆时针旋转:","180°旋转","硬降:","软降:","暂存:","功能键:","重新开始:","左瞬移:","右瞬移:","软降到底:"},
modeName={ modeName={
[0]="自定义", [0]="自定义",
"竞速","马拉松","大师","经典","","无尽","单挑","仅TSD","隐形","挖掘","生存","科研", "竞速","马拉松","大师","经典","","无尽","单挑","仅TSD","隐形","挖掘","生存","科研",
@@ -84,17 +85,20 @@ return{
hotseat="友尽模式", hotseat="友尽模式",
}, },
loadTip="真在加载,不只是动画!",
load={"加载材质ing","加载音乐ing","加载音效ing","加载完成",}, load={"加载材质ing","加载音乐ing","加载音效ing","加载完成",},
tips={ tips={
"The whole game is made by MrZ!", "不是动画,真的在加载!",
"Back to Back 10 combo Techrash PC!", "整个游戏都是MrZ完成的!",
"Techmino has a Nspire-CX edition!", "大满贯10连击消四全清!",
"Is B2B2B2B possible?", "方块研究所有一个Nspire-CX版本!",
"MrZ spin Penta!", "B2B2B2B存在吗?",
"MrZ旋转消5!",
"MEGACMB!", "MEGACMB!",
"ALLSPIN!", "ALLSPIN!",
"O spin Techrash?" "O型回旋三清?",
"只用一个输入设备就可以玩游戏啦~",
"Miya:喵!",
"225238922,哔哩哔哩 干杯~",
}, },
stat={ stat={
"游戏运行次数:", "游戏运行次数:",
@@ -145,11 +149,34 @@ return{
down="v", down="v",
left="<", left="<",
right=">", right=">",
start="开始", start1="消除开始",
start2="拼图开始",
draw="画图(D)",
back="返回",
},
draw={
block1="",
block2="",
block3="",
block4="",
block5="",
block6="",
block7="",
gb1="",
gb2="",
gb3="",
gb4="",
gb5="",
erase="×",
clear="清空",
back="返回", back="返回",
}, },
play={ play={
back="返回", pause="暂停",
},
pause={
resume="继续",
quit="退出",
}, },
setting={ setting={
ghost=function()return setting.ghost and"阴影:开"or"阴影:关"end, ghost=function()return setting.ghost and"阴影:开"or"阴影:关"end,
@@ -157,6 +184,7 @@ return{
grid=function()return setting.grid and"网格:开"or"网格:关"end, grid=function()return setting.grid and"网格:开"or"网格:关"end,
swap=function()return setting.swap and"目标选择:组合键"or"目标选择:循环"end, swap=function()return setting.swap and"目标选择:组合键"or"目标选择:循环"end,
fxs=function()return setting.fxs and"特效:开"or"特效:关"end, fxs=function()return setting.fxs and"特效:开"or"特效:关"end,
bg=function()return setting.bg and"背景:开"or"背景:关"end,
dasD="-",dasU="+", dasD="-",dasU="+",
arrD="-",arrU="+", arrD="-",arrU="+",
sddasD="-",sddasU="+", sddasD="-",sddasU="+",

View File

@@ -21,6 +21,7 @@ return{
win="WIN", win="WIN",
lose="LOSE", lose="LOSE",
pause="PAUSE",
custom="Custom Game", custom="Custom Game",
customOption={ customOption={
@@ -52,12 +53,12 @@ return{
softdropdas="softdropDAS:", softdropdas="softdropDAS:",
softdroparr="softdropARR:", softdroparr="softdropARR:",
snapLevelName={"Free pos","Snap-10","Snap-20","Snap-40","Snap-60","Snap-80"}, snapLevelName={"Free pos","Snap-10","Snap-20","Snap-40","Snap-60","Snap-80"},
keyboard="Keyboard", keyboard="Keyboard",joystick="Joystick",
joystick="Joystick", space="Space",enter="Enter",
setting2Help="Arrowkey to select/change slot,Enter to change,Esc back", setting2Help="Arrowkey to select/change slot,Enter to change,Esc back",
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:","Function:","Restart:","Instant Left:","Instant Right:","Ins Down:"},
modeName={ modeName={
[0]="Custom", [0]="Custom",
"Sprint","Marathon","Master","Classic","Zen","Infinite","1v1","TSD-only","Blind","Dig","Survivor","Tech", "Sprint","Marathon","Master","Classic","Zen","Infinite","1v1","TSD-only","Blind","Dig","Survivor","Tech",
@@ -84,17 +85,20 @@ return{
hotseat="", hotseat="",
}, },
loadTip="not animation,real loading!",
load={"Loading textures","Loading BGM","Loading SFX","Finished",}, load={"Loading textures","Loading BGM","Loading SFX","Finished",},
tips={ tips={
"The whole game is made by MrZ!", "Not animation,real loading!",
"The WHOLE game is made by MrZ!",
"Back to Back 10 combo Techrash PC!", "Back to Back 10 combo Techrash PC!",
"Techmino has a Nspire-CX edition!", "Techmino has a Nspire-CX edition!",
"Is B2B2B2B possible?", "Is B2B2B2B possible?",
"MrZ spin Penta!", "MrZ spin Penta!",
"MEGACMB!", "MEGACMB!",
"ALLSPIN!", "ALLSPIN!",
"O spin Techrash?" "O spin triple?",
"You can play with any input device!",
"Miya:Nya!",
"225238922,Bilibili cheers!",
}, },
stat={ stat={
"Games run:", "Games run:",
@@ -109,7 +113,7 @@ return{
"Total spin:", "Total spin:",
}, },
help={ help={
"I think you don't need \"help\".", "I don't think you need \"help\".",
"THIS IS ONLY A SMALL BLOCK GAME", "THIS IS ONLY A SMALL BLOCK GAME",
"But just play like playing TOP/C2/KOS/TGM3", "But just play like playing TOP/C2/KOS/TGM3",
"Game is not public now,so DO NOT DISTIRBUTE", "Game is not public now,so DO NOT DISTIRBUTE",
@@ -145,11 +149,34 @@ return{
down="v", down="v",
left="<", left="<",
right=">", right=">",
start="Start", start1="Clear Start",
start2="Puzzle Start",
draw="Draw(D)",
back="Back",
},
draw={
block1="",
block2="",
block3="",
block4="",
block5="",
block6="",
block7="",
gb1="",
gb2="",
gb3="",
gb4="",
gb5="",
erase="×",
clear="Clear",
back="Back", back="Back",
}, },
play={ play={
back="Back", pause="Pause",
},
pause={
resume="Resume",
quit="Quit",
}, },
setting={ setting={
ghost=function()return setting.ghost and"Ghost:ON"or"Ghost:OFF"end, ghost=function()return setting.ghost and"Ghost:ON"or"Ghost:OFF"end,
@@ -157,14 +184,11 @@ return{
grid=function()return setting.grid and"Grid:ON"or"Grid: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, swap=function()return setting.swap and"Swap:comboKey"or"Swap:loop"end,
fxs=function()return setting.fxs and"FXs:ON"or"FXs:OFF"end, fxs=function()return setting.fxs and"FXs:ON"or"FXs:OFF"end,
dasD="-", bg=function()return setting.bg and"BG:ON"or"BG:OFF"end,
dasU="+", dasD="-",dasU="+",
arrD="-", arrD="-",arrU="+",
arrU="+", sddasD="-",sddasU="+",
sddasD="-", sdarrD="-",sdarrU="+",
sddasU="+",
sdarrD="-",
sdarrU="+",
sfx=function()return setting.sfx and"SFX:ON"or"SFX:OFF"end, sfx=function()return setting.sfx and"SFX:ON"or"SFX:OFF"end,
bgm=function()return setting.bgm and"BGM:ON"or"BGM:OFF"end, bgm=function()return setting.bgm and"BGM:ON"or"BGM:OFF"end,
vib=function()return "Vibrate level:"..setting.vib end, vib=function()return "Vibrate level:"..setting.vib end,

183
list.lua
View File

@@ -1,7 +1,7 @@
local gc=love.graphics local gc=love.graphics
local sys=love.system local sys=love.system
local fs=love.filesystem
actName={"moveLeft","moveRight","rotRight","rotLeft","rotFlip","hardDrop","softDrop","hold","swap","restart","insLeft","insRight","insDown"} actName={"moveLeft","moveRight","rotRight","rotLeft","rotFlip","hardDrop","softDrop","hold","func","restart","insLeft","insRight","insDown"}
color={ color={
red={1,0,0}, red={1,0,0},
green={0,1,0}, green={0,1,0},
@@ -31,11 +31,27 @@ color={
orange={1,.6,0}, orange={1,.6,0},
lightOrange={1,.7,.3}, lightOrange={1,.7,.3},
purple={.5,0,1}, purple={.5,0,1},
lightPurple={.7,.3,1}, lightPurple={.8,.4,1},
darkPurple={.3,0,.6},
}
blockColor={
color.red,
color.green,
color.orange,
color.blue,
color.magenta,
color.yellow,
color.cyan,
color.darkGreen,
color.darkGrey,
color.grey,
color.darkPurple,
color.darkRed,
color.darkGreen,
} }
sfx={ sfx={
"button", "button","swipe",
"ready","start","win","fail","collect", "ready","start","win","fail","collect",
"move","rotate","rotatekick","hold", "move","rotate","rotatekick","hold",
"prerotate","prehold", "prerotate","prehold",
@@ -82,7 +98,7 @@ customRange={
wait={0,1,2,3,4,5,6,7,8,10,15,20,30,60}, wait={0,1,2,3,4,5,6,7,8,10,15,20,30,60},
fall={0,1,2,3,4,5,6,7,8,10,15,20,30,60}, fall={0,1,2,3,4,5,6,7,8,10,15,20,30,60},
next={0,1,2,3,4,5,6}, next={0,1,2,3,4,5,6},
hold={true,false}, hold={true,false,true},
sequence={"bag7","his4","rnd"}, sequence={"bag7","his4","rnd"},
visible={"show","time","fast","none"}, visible={"show","time","fast","none"},
target={10,20,40,100,200,500,1000,1e99}, target={10,20,40,100,200,500,1000,1e99},
@@ -90,9 +106,8 @@ customRange={
opponent={0,60,30,20,15,10,7,5,4,3,2,1}, opponent={0,60,30,20,15,10,7,5,4,3,2,1},
} }
snapLevelValue={1,10,20,40,60,80}
RCPB={10,33,200,33,105,5,105,60} RCPB={10,33,200,33,105,5,105,60}
snapLevelValue={1,10,20,40,60,80}
up0to4={[0]="000%UP","025%UP","050%UP","075%UP","100%UP",} up0to4={[0]="000%UP","025%UP","050%UP","075%UP","100%UP",}
percent0to5={[0]="0%","20%","40%","60%","80%","100%",} percent0to5={[0]="0%","20%","40%","60%","80%","100%",}
@@ -120,7 +135,7 @@ modeLevel={
techmino99={"EASY","NORMAL","HARD","LUNATIC","ULTIMATE"}, techmino99={"EASY","NORMAL","HARD","LUNATIC","ULTIMATE"},
drought={"NORMAL","MESS"}, drought={"NORMAL","MESS"},
hotseat={"2P","3P","4P",}, hotseat={"2P","3P","4P",},
custom={""}, custom={"Normal","Puzzle"},
} }
local t,f=true,false local t,f=true,false
blocks={ blocks={
@@ -145,7 +160,7 @@ local virtualkeySet={
{200,720-320,6400,80},--hardDrop {200,720-320,6400,80},--hardDrop
{200,720-80,6400,80},--softDrop {200,720-80,6400,80},--softDrop
{1280-320,720-200,6400,80},--hold {1280-320,720-200,6400,80},--hold
{1280-80,280,6400,80},--swap {1280-80,280,6400,80},--func
{80,280,6400,80},--restart {80,280,6400,80},--restart
},--Farter's set 3 },--Farter's set 3
{ {
@@ -157,7 +172,7 @@ local virtualkeySet={
{1280-200,720-320,6400,80},--hardDrop {1280-200,720-320,6400,80},--hardDrop
{1280-200,720-80,6400,80},--softDrop {1280-200,720-80,6400,80},--softDrop
{320,720-200,6400,80},--hold {320,720-200,6400,80},--hold
{80,280,6400,80},--swap {80,280,6400,80},--func
{1280-80,280,6400,80},--restart {1280-80,280,6400,80},--restart
},--Mirrored farter's set 3 },--Mirrored farter's set 3
{ {
@@ -169,7 +184,7 @@ local virtualkeySet={
{1280-80,720-80,6400,80},--hardDrop {1280-80,720-80,6400,80},--hardDrop
{1280-80,720-240,6400,80},--softDrop {1280-80,720-240,6400,80},--softDrop
{1280-80,720-400,6400,80},--hold {1280-80,720-400,6400,80},--hold
{80,360,6400,80},--swap {80,360,6400,80},--func
{80,80,6400,80},--restart {80,80,6400,80},--restart
},--Author's set },--Author's set
{ {
@@ -181,104 +196,136 @@ local virtualkeySet={
{1280-240,720-240,6400,80},--hardDrop {1280-240,720-240,6400,80},--hardDrop
{1280-240,720-80,6400,80},--softDrop {1280-240,720-80,6400,80},--softDrop
{1280-80,720-240,6400,80},--hold {1280-80,720-240,6400,80},--hold
{80,720-240,6400,80},--swap {80,720-240,6400,80},--func
{80,320,6400,80},--restart {80,320,6400,80},--restart
},--Keyboard set },--Keyboard set
{ {
{1200-360,40,0,40},--moveLeft {1200-360,40,1600,40},--moveLeft
{1200-280,40,0,40},--moveRight {1200-280,40,1600,40},--moveRight
{1200-520,40,0,40},--rotRight {1200-520,40,1600,40},--rotRight
{1200-600,40,0,40},--rotLeft {1200-600,40,1600,40},--rotLeft
{1200-440,40,0,40},--rotFlip {1200-440,40,1600,40},--rotFlip
{1200-40,40,0,40},--hardDrop {1200-40,40,1600,40},--hardDrop
{1200-120,40,0,40},--softDrop {1200-120,40,1600,40},--softDrop
{1200-200,40,0,40},--hold {1200-200,40,1600,40},--hold
{1200-680,40,0,40},--swap {1200-680,40,1600,40},--func
{1200-760,40,0,40},--restart {1200-760,40,1600,40},--restart
},--PC key feedback },--PC key feedback
} }
Buttons={ Buttons={
load={}, load={},
intro={}, intro={},
main={ main={
play={x=380,y=300,w=240,h=240,rgb=color.red,f=70,code=function()gotoScene("mode")end,down="stat",right="setting"}, play= {x=380,y=300,w=240,h=240,rgb=color.red,f=70,code=function()gotoScene("mode")end,down="stat",right="setting"},
setting={x=640,y=300,w=240,h=240,rgb=color.lightBlue,f=55,code=function()gotoScene("setting")end,down="stat",left="play",right="help"}, setting={x=640,y=300,w=240,h=240,rgb=color.lightBlue,f=55,code=function()gotoScene("setting")end,down="stat",left="play",right="help"},
stat={x=640,y=560,w=240,h=240,rgb=color.cyan,f=55,code=function()gotoScene("stat")end,up="setting",left="play",right="help"}, stat= {x=640,y=560,w=240,h=240,rgb=color.cyan,f=55,code=function()gotoScene("stat")end,up="setting",left="play",right="help"},
help={x=900,y=560,w=240,h=240,rgb=color.yellow,f=55,code=function()gotoScene("help")end,up="setting",left="stat",right="quit"}, help= {x=900,y=560,w=240,h=240,rgb=color.yellow,f=55,code=function()gotoScene("help")end,up="setting",left="stat",right="quit"},
quit={x=1180,y=620,w=120,h=120,rgb=color.lightGrey,f=50,code=function()gotoScene("quit")end,up="setting",left="help"}, quit= {x=1180,y=620,w=120,h=120,rgb=color.lightGrey,f=50,code=function()gotoScene("quit")end,up="setting",left="help"},
}, },
mode={ mode={
up={x=1000,y=210,w=200,h=140,rgb=color.white,hide=function()return modeSel==1 end,f=64,code=function()keyDown.mode("up")end}, up= {x=1000,y=210,w=200,h=140, rgb=color.white, f=64, code=function()keyDown.mode("up")end, hide=function()return modeSel==1 end,},
down={x=1000,y=430,w=200,h=140,rgb=color.white,hide=function()return modeSel==#modeID end,f=80,code=function()keyDown.mode("down")end}, down= {x=1000,y=430,w=200,h=140, rgb=color.white, f=80, code=function()keyDown.mode("down")end, hide=function()return modeSel==#modeID end,},
left={x=190,y=160,w=100,h=80,rgb=color.white,hide=function()return levelSel==1 end,code=function()keyDown.mode("left")end}, left= {x=190, y=160,w=100,h=80, rgb=color.white, code=function()keyDown.mode("left")end, hide=function()return levelSel==1 end,},
right={x=350,y=160,w=100,h=80,rgb=color.white,hide=function()return levelSel==#modeLevel[modeID[modeSel]] end,code=function()keyDown.mode("right")end}, right= {x=350, y=160,w=100,h=80, rgb=color.white, code=function()keyDown.mode("right")end,hide=function()return levelSel==#modeLevel[modeID[modeSel]]end,},
start={x=1000,y=600,w=250,h=100,rgb=color.green,f=50,code=function()loadGame(modeSel,levelSel)end}, start={ x=1000, y=600,w=250,h=100, rgb=color.green, f=50, code=function()
custom={x=270,y=540,w=190,h=85,rgb=color.yellow,code=function()gotoScene("custom")end}, loadGame(modeSel,levelSel)end},
back={x=640,y=630,w=230,h=90,rgb=color.white,f=45,code=back}, custom= {x=275, y=420,w=200,h=90, rgb=color.yellow, code=function()gotoScene("custom")end},
back= {x=640, y=630,w=230,h=90, rgb=color.white, f=45, code=back},
}, },
custom={ custom={
up={x=1000,y=200,w=100,h=100,rgb=color.white,code=function()optSel=(optSel-2)%#customID+1 end}, up= {x=1000,y=220, w=100, h=100, rgb=color.white, code=function()optSel=(optSel-2)%#customID+1 end},
down={x=1000,y=440,w=100,h=100,rgb=color.white,f=50,code=function()optSel=optSel%#customID+1 end}, down= {x=1000,y=460, w=100, h=100, rgb=color.white,f=50, code=function()optSel=optSel%#customID+1 end},
left={x=880,y=320,w=100,h=100,rgb=color.white,f=50,code=function()local k=customID[optSel]customSel[k]=(customSel[k]-2)%#customRange[k]+1 end}, left= {x=880, y=340, w=100, h=100, rgb=color.white,f=50, code=function()local k=customID[optSel]customSel[k]=(customSel[k]-2)%#customRange[k]+1 end},
right={x=1120,y=320,w=100,h=100,rgb=color.white,f=50,code=function()local k=customID[optSel]customSel[k]=customSel[k]%#customRange[k]+1 end}, right= {x=1120,y=340, w=100, h=100, rgb=color.white,f=50, code=function()local k=customID[optSel]customSel[k]=customSel[k]%#customRange[k]+1 end},
start={x=1000,y=580,w=180,h=80,rgb=color.green,code=function()loadGame(0,1)end}, start1= {x=880, y=580, w=220, h=70, rgb=color.green, code=function()loadGame(0,1)end},
back={x=640,y=630,w=180,h=60,rgb=color.white,code=back}, start2= {x=1120,y=580, w=220, h=70, rgb=color.lightPurple, code=function()loadGame(0,2)end},
draw= {x=1000,y=90, w=190, h=85, rgb=color.cyan, code=function()gotoScene("draw")end},
back= {x=640, y=630 ,w=180, h=60, rgb=color.white, code=back},
},
draw={
block1= {x=840, y=80,w=120,h=120, f=65, rgb=color.red, code=function()pen=1 end},
block2= {x=980, y=80,w=120,h=120, f=65, rgb=color.green, code=function()pen=2 end},
block3= {x=1120,y=80,w=120,h=120, f=65, rgb=color.orange, code=function()pen=3 end},
block4= {x=840, y=220,w=120,h=120, f=65, rgb=color.blue, code=function()pen=4 end},
block5= {x=980, y=220,w=120,h=120, f=65, rgb=color.magenta, code=function()pen=5 end},
block6= {x=1120,y=220,w=120,h=120, f=65, rgb=color.yellow, code=function()pen=6 end},
block7= {x=840, y=360,w=120,h=120, f=65, rgb=color.cyan, code=function()pen=7 end},
gb1= {x=980, y=360,w=120,h=120, f=65, rgb=color.darkGrey, code=function()pen=9 end},
gb2= {x=1120,y=360,w=120,h=120, f=65, rgb=color.grey, code=function()pen=10 end},
gb3= {x=840, y=500,w=120,h=120, f=65, rgb=color.darkPurple,code=function()pen=11 end},
gb4= {x=980, y=500,w=120,h=120, f=65, rgb=color.darkRed, code=function()pen=12 end},
gb5= {x=1120,y=500,w=120,h=120, f=65, rgb=color.darkGreen,code=function()pen=13 end},
erase= {x=840, y=640,w=120,h=120, f=70, rgb=color.grey, code=function()pen=0 end},
clear= {x=1120,y=640,w=120,h=120, rgb=color.white, code=function()
if clearSureTime>0 then
for y=1,20 do for x=1,10 do preField[y][x]=0 end end
clearSureTime=0
else
clearSureTime=50
end
end},
back= {x=1235,y=45,w=80,h=80, f=35, rgb=color.white, code=back},
}, },
play={ play={
back={x=1235,y=45,w=80,h=80,rgb=color.white,code=back,f=35}, pause={x=1235,y=45,w=80,h=80,rgb=color.white,f=30,code=pauseGame},
},
pause={
resume= {x=640,y=400,w=240,h=100, rgb=color.white,f=50,code=resumeGame},
quit= {x=640,y=550,w=240,h=100, rgb=color.white,f=50,code=back},
}, },
setting={--Normal setting setting={--Normal setting
ghost= {x=290, y=90, w=210, h=60, rgb=color.white, code=function()setting.ghost=not setting.ghost end,down="grid",right="center"}, ghost= {x=290, y=90, w=210, h=60, rgb=color.white,code=function()setting.ghost=not setting.ghost end,down="grid",right="center"},
center= {x=505, y=90, w=210, h=60, rgb=color.white, code=function()setting.center=not setting.center end,down="swap",left="ghost",right="sfx"}, center= {x=505, y=90, w=210, h=60, rgb=color.white,code=function()setting.center=not setting.center end,down="swap",left="ghost",right="sfx"},
grid= {x=290, y=160, w=210, h=60, rgb=color.white, code=function()setting.grid=not setting.grid end,up="ghost",down="fxs",right="swap"}, grid= {x=290, y=160, w=210, h=60, rgb=color.white,code=function()setting.grid=not setting.grid end,up="ghost",down="fxs",right="swap"},
swap= {x=505, y=160, w=210, h=60,f=28, rgb=color.white, code=function()setting.swap=not setting.swap end,up="center",down="arrD",left="grid",right="vib"}, swap= {x=505, y=160, w=210, h=60,f=28, rgb=color.white,code=function()setting.swap=not setting.swap end,up="center",down="bg",left="grid",right="vib"},
fxs= {x=290, y=230, w=210, h=60, rgb=color.white, code=function()setting.fxs=not setting.fxs end,up="grid",down="dasU",right="fullscreen"}, fxs= {x=290, y=230, w=210, h=60, rgb=color.white,code=function()setting.fxs=not setting.fxs end,up="grid",down="dasU",right="bg"},
bg= {x=505, y=230, w=210, h=60, rgb=color.white,code=function()setting.bg=not setting.bg end,up="swap",down="arrD",right="fullscreen"},
dasD= {x=210, y=300, w=50, h=50, rgb=color.white, code=function()setting.das=(setting.das-1)%31 end,up="fxs",down="sddasD",right="dasU"}, dasD= {x=210, y=300, w=50, h=50, rgb=color.white,code=function()setting.das=(setting.das-1)%31 end,up="fxs",down="sddasD",right="dasU"},
dasU= {x=370, y=300, w=50, h=50, rgb=color.white, code=function()setting.das=(setting.das+1)%31 end,up="fxs",down="sddasU",left="dasD",right="arrD"}, dasU= {x=370, y=300, w=50, h=50, rgb=color.white,code=function()setting.das=(setting.das+1)%31 end,up="fxs",down="sddasU",left="dasD",right="arrD"},
arrD= {x=425, y=300, w=50, h=50, rgb=color.white, code=function()setting.arr=(setting.arr-1)%16 end,up="swap",down="sdarrD",left="dasU",right="arrU"}, arrD= {x=425, y=300, w=50, h=50, rgb=color.white,code=function()setting.arr=(setting.arr-1)%16 end,up="bg",down="sdarrD",left="dasU",right="arrU"},
arrU= {x=585, y=300, w=50, h=50, rgb=color.white, code=function()setting.arr=(setting.arr+1)%16 end,up="swap",down="sdarrU",left="arrD",right="bgblock"},--3~6 arrU= {x=585, y=300, w=50, h=50, rgb=color.white,code=function()setting.arr=(setting.arr+1)%16 end,up="bg",down="sdarrU",left="arrD",right="bgblock"},--3~6
sddasD= {x=210, y=370, w=50, h=50, rgb=color.white, code=function()setting.sddas=(setting.sddas-1)%11 end,up="dasD",down="lang",right="sddasU"}, sddasD= {x=210, y=370, w=50, h=50, rgb=color.white,code=function()setting.sddas=(setting.sddas-1)%11 end,up="dasD",down="lang",right="sddasU"},
sddasU= {x=370, y=370, w=50, h=50, rgb=color.white, code=function()setting.sddas=(setting.sddas+1)%11 end,up="dasU",down="lang",left="sddasD",right="sdarrD"}, sddasU= {x=370, y=370, w=50, h=50, rgb=color.white,code=function()setting.sddas=(setting.sddas+1)%11 end,up="dasU",down="lang",left="sddasD",right="sdarrD"},
sdarrD= {x=425, y=370, w=50, h=50, rgb=color.white, code=function()setting.sdarr=(setting.sdarr-1)%4 end,up="arrD",down="lang",left="sddasU",right="sdarrU"}, sdarrD= {x=425, y=370, w=50, h=50, rgb=color.white,code=function()setting.sdarr=(setting.sdarr-1)%4 end,up="arrD",down="lang",left="sddasU",right="sdarrU"},
sdarrU= {x=585, y=370, w=50, h=50, rgb=color.white, code=function()setting.sdarr=(setting.sdarr+1)%4 end,up="arrU",down="lang",left="sdarrD",right="frame"}, sdarrU= {x=585, y=370, w=50, h=50, rgb=color.white,code=function()setting.sdarr=(setting.sdarr+1)%4 end,up="arrU",down="lang",left="sdarrD",right="frame"},
sfx= {x=760, y=90, w=160, h=60, rgb=color.white, code=function()setting.sfx=not setting.sfx end,down="vib",left="center",right="bgm"}, sfx= {x=760,y=90, w=160, h=60, rgb=color.white,code=function()setting.sfx=not setting.sfx end,down="vib",left="center",right="bgm"},
bgm= {x=940, y=90, w=160, h=60, rgb=color.white, code=function() bgm= {x=940,y=90, w=160, h=60, rgb=color.white,code=function()
BGM() BGM()
setting.bgm=not setting.bgm setting.bgm=not setting.bgm
BGM("blank") BGM("blank")
end,down="vib",left="sfx"}, end,down="vib",left="sfx"},
vib= {x=850, y=160, w=340, h=60, rgb=color.white, code=function() vib= {x=850,y=160, w=340,h=60,rgb=color.white, code=function()
setting.vib=(setting.vib+1)%5 setting.vib=(setting.vib+1)%5
VIB(2) VIB(2)
end,up="sfx",down="fullscreen",left="swap"}, end,up="sfx",down="fullscreen",left="swap"},
fullscreen= {x=850, y=230, w=340, h=60, rgb=color.white, code=function() fullscreen= {x=850,y=230, w=340,h=60,rgb=color.white, code=function()
setting.fullscreen=not setting.fullscreen setting.fullscreen=not setting.fullscreen
love.window.setFullscreen(setting.fullscreen) love.window.setFullscreen(setting.fullscreen)
if not setting.fullscreen then if not setting.fullscreen then
love.resize(gc.getWidth(),gc.getHeight()) love.resize(gc.getWidth(),gc.getHeight())
end end
end,up="vib",down="bgblock",left="arrU"}, end,up="vib",down="bgblock",left="bg"},
bgblock= {x=850, y=300, w=340, h=60, rgb=color.white, code=function() bgblock={x=850,y=300, w=340,h=60,rgb=color.white, code=function()
setting.bgblock=not setting.bgblock setting.bgblock=not setting.bgblock
if not setting.bgblock then if not setting.bgblock then
for i=1,16 do for i=1,16 do
BGblockList[i].v=3*BGblockList[i].v BGblockList[i].v=3*BGblockList[i].v
end end
end end
end,up="fullscreen",down="frame",left="sdarrU"}, end,up="fullscreen",down="frame",left="arrU"},
frame= {x=850, y=370, w=340, h=60, rgb=color.white, code=function() frame= {x=850,y=370, w=340,h=60,rgb=color.white, code=function()
setting.frameMul=setting.frameMul+(setting.frameMul<50 and 5 or 10) setting.frameMul=setting.frameMul+(setting.frameMul<50 and 5 or 10)
if setting.frameMul>100 then setting.frameMul=25 end if setting.frameMul>100 then setting.frameMul=25 end
end,up="bgblock",down="control",left="sdarrU"}, end,up="bgblock",down="control",left="sdarrU"},
control= {x=850, y=440, w=340, h=60, rgb=color.green, code=function()gotoScene("setting2")end,up="frame",down="touch",left="lang"}, control={x=850,y=440, w=340,h=60,rgb=color.green, code=function()gotoScene("setting2")end,up="frame",down="touch",left="lang"},
touch= {x=850, y=510, w=340, h=60, rgb=color.yellow, code=function()gotoScene("setting3")end,up="control",down="back",left="lang"}, touch= {x=850,y=510, w=340,h=60,rgb=color.yellow,code=function()gotoScene("setting3")end,up="control",down="back",left="lang"},
lang= {x=280, y=510, w=200, h=60, rgb=color.red, code=function() lang= {x=280,y=510, w=200,h=60,rgb=color.red, code=function()
setting.lang=setting.lang%#langName+1 setting.lang=setting.lang%#langName+1
swapLanguage(setting.lang) swapLanguage(setting.lang)
end,up="sddasD",down="back",right="touch"}, end,up="sddasD",down="back",right="touch"},
back= {x=640, y=620, w=300, h=70, rgb=color.white, code=back,up="touch"}, back= {x=640,y=620, w=300,h=70,rgb=color.white, code=back,up="touch"},
}, },
setting2={--Control setting setting2={--Control setting
back={x=840,y=630,w=180,h=60,rgb=color.white,code=back}, back={x=840,y=630,w=180,h=60,rgb=color.white,code=back},
@@ -317,11 +364,11 @@ Buttons={
}, },
help={ help={
back={x=640,y=590,w=180,h=60,rgb=color.white,code=back,right="qq"}, back={x=640,y=590,w=180,h=60,rgb=color.white,code=back,right="qq"},
qq={x=980,y=590,w=230,h=60,rgb=color.white,code=function()sys.openURL("tencent://message/?uin=1046101471&Site=&Menu=yes")end,left="back"}, qq={x=980,y=590,w=230,h=60,hide=function()return system=="Android"end,rgb=color.white,code=function()sys.openURL("tencent://message/?uin=1046101471&Site=&Menu=yes")end,left="back"},
}, },
stat={ stat={
back={x=640,y=590,w=180,h=60,rgb=color.white,code=back,right="path"}, back={x=640,y=590,w=180,h=60,rgb=color.white,code=back,right="path"},
path={x=980,y=590,w=250,h=60,f=30,rgb=color.white,code=function()sys.openURL("C:/Users/MrZ/AppData/Roaming/LOVE/Techmino")end,left="back"}, path={x=980,y=590,w=250,h=60,f=30,hide=function()return system=="Android"end,rgb=color.white,code=function()sys.openURL(fs.getSaveDirectory())end,left="back"},
}, },
sel=nil,--selected button id(integer) sel=nil,--selected button id(integer)
} }

View File

@@ -1,13 +1,14 @@
local gc=love.graphics local gc,tm=love.graphics,love.timer
local tm=love.timer
local ms,kb=love.mouse,love.keyboard local ms,kb=love.mouse,love.keyboard
local fs,sys=love.filesystem,love.system local fs,sys=love.filesystem,love.system
int,ceil,abs,rnd,max,min,sin,cos,atan,pi=math.floor,math.ceil,math.abs,math.random,math.max,math.min,math.sin,math.cos,math.atan,math.pi int,ceil,abs,rnd,max,min,sin,cos,atan,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
math.randomseed(os.time()*626)
null=function()end null=function()end
system=sys.getOS() system=sys.getOS()
scr={x=0,y=0,w=gc.getWidth(),h=gc.getHeight(),k=1}
scene="" scene=""
bgmPlaying=nil bgmPlaying=nil
curBG="none" curBG="none"
@@ -40,16 +41,13 @@ gameEnv0={
drop=30,lock=45, drop=30,lock=45,
wait=0,fall=0, wait=0,fall=0,
next=6,hold=true,oncehold=true, next=6,hold=true,oncehold=true,
keepVisible=true,visible="show",
sequence="bag7", sequence="bag7",
block=true, block=true,
ospin=true, keepVisible=true,visible="show",
freshLimit=1e99, Fkey=false,puzzle=false,ospin=true,
target=1e99, freshLimit=1e99,target=1e99,reach=null,
reach=null, bg="none",bgm="race"
bg="none",
bgm="race"
} }
customSel={ customSel={
drop=20, drop=20,
@@ -64,11 +62,16 @@ customSel={
freshLimit=3, freshLimit=3,
opponent=1, opponent=1,
} }
preField={}for i=1,20 do preField[i]={0,0,0,0,0,0,0,0,0,0}end
freeRow={}
for i=1,40 do
freeRow[i]={0,0,0,0,0,0,0,0,0,0}
end
--Game system Data --Game system Data
setting={ setting={
ghost=true,center=true, ghost=true,center=true,
grid=false,swap=true, grid=false,swap=true,
fxs=true, fxs=true,bg=true,
das=10,arr=2, das=10,arr=2,
sddas=0,sdarr=2, sddas=0,sdarr=2,
@@ -138,7 +141,7 @@ virtualkey={
{1280-80,720-80,6400,80},--hardDrop {1280-80,720-80,6400,80},--hardDrop
{1280-80,720-240,6400,80},--softDrop {1280-80,720-240,6400,80},--softDrop
{1280-80,720-400,6400,80},--hold {1280-80,720-400,6400,80},--hold
{80,360,6400,80},--swap {80,360,6400,80},--func
{80,80,6400,80},--restart {80,80,6400,80},--restart
--[[ --[[
{x=0,y=0,r=0},--toLeft {x=0,y=0,r=0},--toLeft

127
paint.lua
View File

@@ -53,12 +53,6 @@ local function stencil_miniTitle()
gc.rectangle("fill",unpack(miniTitle_rect[i])) gc.rectangle("fill",unpack(miniTitle_rect[i]))
end end
end end
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)
@@ -187,7 +181,8 @@ end
function VirtualkeyPreview() function VirtualkeyPreview()
for i=1,#virtualkey do for i=1,#virtualkey do
gc.setColor(1,sel==i and .5 or 1,sel==i and .5 or 1,setting.virtualkeyAlpha*.2) local c=sel==i and .8 or 1
gc.setColor(c,c,c,setting.virtualkeyAlpha*.2)
local b=virtualkey[i] local b=virtualkey[i]
gc.setLineWidth(b[4]*.07) gc.setLineWidth(b[4]*.07)
gc.circle("line",b[1],b[2],b[4]-5) gc.circle("line",b[1],b[2],b[4]-5)
@@ -198,16 +193,18 @@ function drawVirtualkey()
local a=setting.virtualkeyAlpha*.2 local a=setting.virtualkeyAlpha*.2
local P=players[1] local P=players[1]
for i=1,#virtualkey do for i=1,#virtualkey do
local p,b=virtualkeyDown[i],virtualkey[i] if i~=9 or modeEnv.Fkey then
if p then gc.setColor(.7,.7,.7,a) local p,b=virtualkeyDown[i],virtualkey[i]
else gc.setColor(1,1,1,a) if p then gc.setColor(.7,.7,.7,a)
end else gc.setColor(1,1,1,a)
gc.setLineWidth(b[4]*.07) end
gc.circle("line",b[1],b[2]+virtualkeyPressTime[i],b[4]-5) gc.setLineWidth(b[4]*.07)
if setting.virtualkeyIcon then gc.draw(virtualkeyIcon[i],b[1],b[2]+virtualkeyPressTime[i],nil,b[4]*.025,nil,18,18)end gc.circle("line",b[1],b[2]+virtualkeyPressTime[i],b[4]-5)
if virtualkeyPressTime[i]>0 then if setting.virtualkeyIcon then gc.draw(virtualkeyIcon[i],b[1],b[2]+virtualkeyPressTime[i],nil,b[4]*.025,nil,18,18)end
gc.setColor(1,1,1,a*virtualkeyPressTime[i]*.1) if virtualkeyPressTime[i]>0 then
gc.circle("line",b[1],b[2],b[4]*(1.4-virtualkeyPressTime[i]*.04)) gc.setColor(1,1,1,a*virtualkeyPressTime[i]*.1)
gc.circle("line",b[1],b[2],b[4]*(1.4-virtualkeyPressTime[i]*.04))
end
end end
end end
end end
@@ -216,6 +213,9 @@ Pnt={BG={}}
function Pnt.BG.none() function Pnt.BG.none()
gc.clear(.15,.15,.15) gc.clear(.15,.15,.15)
end end
function Pnt.BG.grey()
gc.clear(.3,.3,.3)
end
function Pnt.BG.glow() function Pnt.BG.glow()
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)
@@ -247,6 +247,7 @@ function Pnt.BG.strap()
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 local matrixT={}for i=0,15 do matrixT[i]={}for j=0,8 do matrixT[i][j]=mt.noise(i,j)+2 end end
function Pnt.BG.matrix() function Pnt.BG.matrix()
gc.clear(.15,.15,.15)
for i=0,15 do for i=0,15 do
for j=0,8 do for j=0,8 do
local t=sin(matrixT[i][j]*Timer())*.2+.2 local t=sin(matrixT[i][j]*Timer())*.2+.2
@@ -264,8 +265,8 @@ function Pnt.load()
gc.rectangle("line",300,330,680,60,5) 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(30)
mStr(text.loadTip,640,400) mStr(loadTip,640,400)
end end
function Pnt.intro() function Pnt.intro()
gc.push() gc.push()
@@ -287,7 +288,7 @@ function Pnt.main()
gc.setColor(1,1,1) gc.setColor(1,1,1)
gc.draw(titleImage,300,30) gc.draw(titleImage,300,30)
setFont(30) setFont(30)
gc.print("Alpha V0.7.13+",290,140) gc.print("Alpha V0.7.15",290,140)
gc.print(system,800,110) gc.print(system,800,110)
end end
function Pnt.mode() function Pnt.mode()
@@ -327,27 +328,61 @@ function Pnt.custom()
end end
end end
end end
function Pnt.draw()
gc.translate(200,60)
gc.setColor(1,1,1,.2)
gc.setLineWidth(1)
for x=1,9 do gc.line(30*x,0,30*x,600)end
for y=0,19 do gc.line(0,30*y,300,30*y)end
gc.setColor(1,1,1)
gc.setLineWidth(3)
gc.rectangle("line",-2,-2,304,604)
for y=1,20 do for x=1,10 do
if preField[y][x]>0 then
drawPixel(y,x,preField[y][x])
end
end end
if sx and sy then
gc.setLineWidth(2)
gc.rectangle("line",30*sx-30,600-30*sy,30,30)
end
gc.translate(-200,-60)
if clearSureTime>0 then
gc.setColor(1,1,1,clearSureTime*.02)
gc.draw(drawableText.question,1100,570)
end
if pen>0 then
gc.setLineWidth(13)
gc.setColor(blockColor[pen])
gc.rectangle("line",945,605,70,70)
else
gc.setColor(.8,.8,.8)
gc.draw(drawableText.x,950,560)
end
end
function Pnt.play() function Pnt.play()
for p=1,#players do for p=1,#players do
P=players[p] P=players[p]
if P.small then if P.small then
gc.push("transform") gc.push("transform")
gc.translate(P.x,P.y)gc.scale(P.size)--Scale gc.translate(P.x,P.y)gc.scale(P.size)--Position
gc.setColor(0,0,0,.4)gc.rectangle("fill",0,0,60,120)--Black Background gc.setColor(0,0,0,.4)gc.rectangle("fill",0,0,60,120)--Background
gc.stencil(stencil_field_small,"replace",1)
gc.translate(0,P.fieldBeneath*.2) gc.translate(0,P.fieldBeneath*.2)
gc.setStencilTest("equal",1) gc.setScissor(scr.x+P.x*scr.k,scr.y+P.y*scr.k,60*P.size*scr.k,120*P.size*scr.k)
gc.setColor(1,1,1,P.result and max(20-P.endCounter,0)*.05 or 1) gc.setColor(1,1,1,P.result and max(20-P.endCounter,0)*.05 or 1)
local h=#P.clearing
for j=int(P.fieldBeneath/30+1),#P.field do for j=int(P.fieldBeneath/30+1),#P.field do
if P.falling<=0 or without(P.clearing,j)then if j==P.clearing[h]and P.falling>-1 then
h=h-1
else
for i=1,10 do for i=1,10 do
if P.field[j][i]>0 then if P.field[j][i]>0 then
gc.draw(blockSkinmini[P.field[j][i]],6*i-6,120-6*j) gc.draw(blockSkinmini[P.field[j][i]],6*i-6,120-6*j)
end end
end end
end end
end end--Field
gc.setStencilTest()--In-playField mask gc.setScissor()
gc.translate(0,-P.fieldBeneath*.2) gc.translate(0,-P.fieldBeneath*.2)
gc.setLineWidth(2) gc.setLineWidth(2)
gc.setColor(frameColor[P.strength])gc.rectangle("line",-1,-1,62,122)--Draw boarder gc.setColor(frameColor[P.strength])gc.rectangle("line",-1,-1,62,122)--Draw boarder
@@ -370,8 +405,8 @@ function Pnt.play()
gc.pop() gc.pop()
else else
gc.push("transform") gc.push("transform")
gc.translate(P.x,P.y)gc.scale(P.size) gc.translate(P.x,P.y)gc.scale(P.size)--Position
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)--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) gc.translate(150,70)
@@ -380,10 +415,9 @@ function Pnt.play()
gc.setColor(1,1,1,.2) gc.setColor(1,1,1,.2)
for x=1,9 do gc.line(30*x,-10,30*x,600)end for x=1,9 do gc.line(30*x,-10,30*x,600)end
for y=0,19 do gc.line(0,30*y,300,30*y)end for y=0,19 do gc.line(0,30*y,300,30*y)end
end end--Grid lines
gc.stencil(stencil_field,"replace", 1)
gc.translate(0,P.fieldBeneath) gc.translate(0,P.fieldBeneath)
gc.setStencilTest("equal",1) gc.setScissor(scr.x+P.absFieldPos[1]*scr.k,scr.y+P.absFieldPos[2]*scr.k,300*P.size*scr.k,610*P.size*scr.k)
local h=#P.clearing local h=#P.clearing
for j=int(P.fieldBeneath/30+1),#P.field do for j=int(P.fieldBeneath/30+1),#P.field do
if j==P.clearing[h]and P.falling>-1 then if j==P.clearing[h]and P.falling>-1 then
@@ -393,7 +427,7 @@ function Pnt.play()
else else
for i=1,10 do for i=1,10 do
if P.field[j][i]>0 then if P.field[j][i]>0 then
gc.setColor(1,1,1,min(P.visTime[j][i],20)*.05) gc.setColor(1,1,1,min(P.visTime[j][i]*.05,1))
drawPixel(j,i,P.field[j][i]) drawPixel(j,i,P.field[j][i])
end end
end end
@@ -401,13 +435,13 @@ function Pnt.play()
end--Field end--Field
for i=1,#P.shade do for i=1,#P.shade do
local S=P.shade[i] local S=P.shade[i]
gc.setColor(1,1,1,.15+S[1]*.08) gc.setColor(1,1,1,S[1]*.12)
for x=S[3],S[5]do for x=S[3],S[5]do
for y=S[6],S[4]do for y=S[6],S[4]do
drawPixel(y,x,S[2]) drawPixel(y,x,S[2])
end end
end end
end end--shade FX
if P.waiting==-1 then if P.waiting==-1 then
if P.gameEnv.ghost then if P.gameEnv.ghost then
gc.setColor(1,1,1,.3) gc.setColor(1,1,1,.3)
@@ -442,7 +476,7 @@ function Pnt.play()
gc.setColor(1,1,1) gc.setColor(1,1,1)
gc.draw(PTC.dust[p]) gc.draw(PTC.dust[p])
--Draw game field --Draw game field
gc.setStencilTest()--In-playField mask gc.setScissor()--In-playField mask
gc.translate(0,-P.fieldBeneath) gc.translate(0,-P.fieldBeneath)
gc.setLineWidth(3) gc.setLineWidth(3)
gc.setColor(1,1,1) gc.setColor(1,1,1)
@@ -493,17 +527,17 @@ function Pnt.play()
--B2B indictator --B2B indictator
if P.gameEnv.hold then if P.gameEnv.hold then
gc.draw(drawableText.hold,-75-drawableText.hold:getWidth()*.5,-10)
gc.setColor(1,1,1) gc.setColor(1,1,1)
gc.draw(drawableText.hold,-124,-10)
for i=1,#P.hold.bk do for i=1,#P.hold.bk do
for j=1,#P.hold.bk[1] do for j=1,#P.hold.bk[1] do
if P.hold.bk[i][j]then if P.hold.bk[i][j]then
drawPixel(i+17.5-#P.hold.bk*.5,j-2.5-#P.hold.bk[1]*.5,P.holded and 9 or P.hold.color) drawPixel(i+17.5-#P.hold.bk*.5,j-2.7-#P.hold.bk[1]*.5,P.holded and 9 or P.hold.color)
end end
end end
end end
end--Hold end--Hold
gc.draw(drawableText.next,382-drawableText.next:getWidth()*.5,-10) gc.draw(drawableText.next,340,-10)
local N=1 local N=1
::L:: ::L::
local b,c=P.next[N].bk,P.next[N].color local b,c=P.next[N].bk,P.next[N].color
@@ -535,7 +569,7 @@ function Pnt.play()
gc.setColor(1,1,1) gc.setColor(1,1,1)
setFont(35) setFont(35)
mStr(format("%.2f",P.time),-75,520)--Draw time mStr(format("%.2f",P.time),-82,520)--Draw time
if mesDisp[curMode.id]then mesDisp[curMode.id]()end--Draw other message if mesDisp[curMode.id]then mesDisp[curMode.id]()end--Draw other message
gc.setColor(1,1,1) gc.setColor(1,1,1)
@@ -585,6 +619,19 @@ function Pnt.play()
end end
end end
end end
function Pnt.pause()
gc.setColor(0,0,0,pauseTime*.015)
gc.rectangle("fill",0,0,1280,720)
if system~="Android"then
setFont(40)
gc.setColor(1,1,1,pauseTime*.02)
mStr(text.space.."/"..text.enter,640,300)
gc.print("ESC",610,598)
end
setFont(120)
gc.setColor(1,1,1)
mStr(text.pause,640,140-12*(5-pauseTime*.1)^2)
end
function Pnt.setting() function Pnt.setting()
gc.setColor(1,1,1) gc.setColor(1,1,1)
setFont(35) setFont(35)

View File

@@ -8,7 +8,6 @@ local function C(x,y)
end end
gc.setDefaultFilter("nearest","nearest") gc.setDefaultFilter("nearest","nearest")
local blockImg=N("/image/block/1.png") local blockImg=N("/image/block/1.png")
blockSkin,blockSkinmini={},{} blockSkin,blockSkinmini={},{}
for i=1,13 do for i=1,13 do
@@ -26,15 +25,6 @@ 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
@@ -92,8 +82,9 @@ background1=N("/image/BG/bg1.jpg")
background2=N("/image/BG/bg2.png") background2=N("/image/BG/bg2.png")
groupCode=N("/image/mess/groupcode.png") groupCode=N("/image/mess/groupcode.png")
payCode=N("/image/mess/paycode.png") payCode=N("/image/mess/paycode.png")
drawableText={ drawableText={
question=T(100,"?"),
x=T(110,"×"),
bpm=T(15,"BPM"), bpm=T(15,"BPM"),
kpm=T(15,"KPM"), kpm=T(15,"KPM"),
modeName=T(30), modeName=T(30),
@@ -101,5 +92,4 @@ drawableText={
next=T(40), next=T(40),
hold=T(40), hold=T(40),
} }
c=gc.setCanvas() c=gc.setCanvas()

View File

@@ -45,6 +45,9 @@ function Tmr.intro()
count=count+1 count=count+1
if count==200 then count=80 end if count==200 then count=80 end
end end
function Tmr.draw()
if clearSureTime>0 then clearSureTime=clearSureTime-1 end
end
function Tmr.play(dt) function Tmr.play(dt)
frame=frame+1 frame=frame+1
stat.gametime=stat.gametime+dt stat.gametime=stat.gametime+dt
@@ -271,4 +274,9 @@ function Tmr.play(dt)
end end
end end
if modeEnv.royaleMode and frame%120==0 then freshMostDangerous()end if modeEnv.royaleMode and frame%120==0 then freshMostDangerous()end
end
function Tmr.pause(dt)
if pauseTime<50 then
pauseTime=pauseTime+1
end
end end

View File

@@ -1,4 +1,6 @@
local tm=love.timer
local gc=love.graphics local gc=love.graphics
local kb=love.keyboard
local setFont=setFont local setFont=setFont
local toN,toS=tonumber,tostring local toN,toS=tonumber,tostring
@@ -11,25 +13,18 @@ local function splitS(s,sep)
if #s~=0 then goto L end if #s~=0 then goto L end
return t return t
end end
function without(t,v)
for i=1,#t do
if t[i]==v then return end
end
return true
end
function mStr(s,x,y) function mStr(s,x,y)
gc.printf(s,x-300,y,600,"center") gc.printf(s,x-300,y,600,"center")
end end
function getNewRow(val) function getNewRow(val)
if not val then val=0 end
local t=rem(freeRow) local t=rem(freeRow)
for i=1,10 do for i=1,10 do
t[i]=val or 0 t[i]=val
end end
--clear a row and move to active list --clear a row and move to active list
if #freeRow==0 then if #freeRow==0 then
for i=1,20 do for i=1,10 do
ins(freeRow,{0,0,0,0,0,0,0,0,0,0}) ins(freeRow,{0,0,0,0,0,0,0,0,0,0})
end end
end end
@@ -175,20 +170,30 @@ function gotoScene(s,style)
draw=swap[style].d draw=swap[style].d
} }
Buttons.sel=nil Buttons.sel=nil
if style~="none"then
sysSFX("swipe")
end
end end
end end
local prevMenu={ local prevMenu={
load=love.event.quit, load=love.event.quit,
intro="quit", intro="quit",
main="intro", main="intro",
mode="main", mode="main",
custom="mode", custom="mode",
draw=function()
kb.setKeyRepeat(false)
gotoScene("custom")
end,
ready="mode", ready="mode",
play=function() play=function()
clearTask("play") clearTask("play")
gotoScene(curMode.id~="custom"and"mode"or"custom","deck") gotoScene(curMode.id~="custom"and"mode"or"custom","deck")
end, end,
pause=function()
clearTask("play")
gotoScene(curMode.id~="custom"and"mode"or"custom","deck")
end,
help="main", help="main",
stat="main", stat="main",
setting=function() setting=function()
@@ -206,7 +211,22 @@ function back()
t() t()
end end
end end
function pauseGame()
if bgmPlaying then bgm[bgmPlaying]:pause()end
for i=1,#players.alive do
local l=players.alive[i].keyPressing
for j=1,#l do
if l[j]then
releaseKey(j,players.alive[i])
end
end
end
gotoScene("pause","none")
end
function resumeGame()
if bgmPlaying then bgm[bgmPlaying]:play()end
gotoScene("play","fade")
end
local dataOpt={ local dataOpt={
"run", "run",
"game", "game",
@@ -220,21 +240,17 @@ local dataOpt={
"spin", "spin",
} }
local saveOpt={ local saveOpt={
"ghost","center",
"grid","swap",
"fxs","bg",
"das","arr",
"sddas","sdarr",
"lang", "lang",
"ghost",
"center", "sfx","bgm",
"grid",
"swap",
"sfx",
"bgm",
"vib", "vib",
"fxs",
"das",
"arr",
"sddas",
"sdarr",
"fullscreen", "fullscreen",
"bgblock", "bgblock",
"virtualkeyAlpha", "virtualkeyAlpha",
@@ -329,7 +345,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"or t=="grid"or t=="swap"or t=="fxs"then elseif t=="ghost"or t=="center"or t=="grid"or t=="swap"or t=="fxs"or t=="bg"then
setting[t]=v=="true" setting[t]=v=="true"
elseif t=="lang"then elseif t=="lang"then
setting[t]=toN(v:match("[12]"))or 1 setting[t]=toN(v:match("[12]"))or 1