Alpha V0.7.8

This commit is contained in:
MrZ_26
2020-02-04 19:31:31 +08:00
parent c35152cf6e
commit 75c7955bb5
18 changed files with 395 additions and 360 deletions

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

BIN
BGM/newera.ogg Normal file

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

16
ai.lua
View File

@@ -49,14 +49,15 @@ FCL[5]=FCL[3]
clearScore={[0]=0,0,2,4,12} clearScore={[0]=0,0,2,4,12}
function ifoverlapAI(f,bk,x,y) 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 nil 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]>0 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)
while f[start]do ::L::if f[start]then
removeRow(f,start) removeRow(f,start)
goto L
end end
for i=start,#f0 do for i=start,#f0 do
f[i]=getNewRow() f[i]=getNewRow()
@@ -85,8 +86,9 @@ function getScore(field,bn,cb,cx,cy)
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
local h=#field local h=#field
while field[h][x]==0 and h>1 do ::L::if field[h][x]==0 and h>1 then
h=h-1 h=h-1
goto L
end end
height[x]=h height[x]=h
if x>3 and x<8 and h>highest then highest=h end if x>3 and x<8 and h>highest then highest=h end
@@ -136,8 +138,9 @@ function AI_getControls(ctrl)
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
local cy=#Tfield+1 local cy=#Tfield+1
while not ifoverlapAI(Tfield,cb,cx,cy-1)do ::L::if not ifoverlapAI(Tfield,cb,cx,cy-1)then
cy=cy-1 cy=cy-1
goto L
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
@@ -156,8 +159,11 @@ function AI_getControls(ctrl)
end end
end end
end end
while #Tfield>0 do
::L::
if #Tfield>0 then
removeRow(Tfield,1) removeRow(Tfield,1)
goto L
end--Release cache end--Release cache
if best.hold then if best.hold then
ins(ctrl,8) ins(ctrl,8)

View File

@@ -12,7 +12,6 @@ function onVirtualkey(x,y)
end end
return nearest return nearest
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 not Buttons.sel then
@@ -142,7 +141,7 @@ function keyDown.setting2(key)
end end
end end
function keyDown.play(key) function keyDown.play(key)
if key=="escape"then back()return nil end if key=="escape"then back()return end
local m=setting.keyMap local m=setting.keyMap
for p=1,4 do for p=1,4 do
local lib=setting.keyLib[p] local lib=setting.keyLib[p]
@@ -150,7 +149,7 @@ function keyDown.play(key)
for k=1,12 do for k=1,12 do
if key==m[lib[s]][k]then if key==m[lib[s]][k]then
pressKey(k,players[p]) pressKey(k,players[p])
return nil return
end end
end end
end end
@@ -165,7 +164,7 @@ function keyUp.play(key)
for k=1,12 do for k=1,12 do
if key==m[lib[s]][k]then if key==m[lib[s]][k]then
releaseKey(k,players[p]) releaseKey(k,players[p])
return nil return
end end
end end
end end
@@ -220,7 +219,7 @@ function gamepadDown.setting2(key)
end end
end end
function gamepadDown.play(key) function gamepadDown.play(key)
if key=="back"then back()return nil end if key=="back"then back()return end
local m=setting.keyMap local m=setting.keyMap
for p=1,4 do for p=1,4 do
local lib=setting.keyLib[p] local lib=setting.keyLib[p]
@@ -228,7 +227,7 @@ function gamepadDown.play(key)
for k=1,12 do for k=1,12 do
if key==m[8+lib[s]][k]then if key==m[8+lib[s]][k]then
pressKey(k,players[p]) pressKey(k,players[p])
return nil return
end end
end end
end end
@@ -243,7 +242,7 @@ function gamepadUp.play(key)
for k=1,12 do for k=1,12 do
if key==m[8+lib[s]][k]then if key==m[8+lib[s]][k]then
releaseKey(k,players[p]) releaseKey(k,players[p])
return nil return
end end
end end
end end
@@ -254,7 +253,7 @@ function wheelmoved.mode(x,y)
modeSel=min(max(modeSel-sgn(y),1),#modeID) modeSel=min(max(modeSel-sgn(y),1),#modeID)
levelSel=ceil(#modeLevel[modeID[modeSel]]*.5) levelSel=ceil(#modeLevel[modeID[modeSel]]*.5)
end end
--Warning,these are not system callbacks!
function love.mousemoved(x,y,dx,dy,t) function love.mousemoved(x,y,dx,dy,t)
@@ -267,7 +266,7 @@ function love.mousemoved(x,y,dx,dy,t)
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=i Buttons.sel=i
return nil return
end end
end end
end end
@@ -297,6 +296,9 @@ function love.mousepressed(x,y,k,t,num)
end end
function love.mousereleased(x,y,k,t,num) function love.mousereleased(x,y,k,t,num)
end end
function love.wheelmoved(x,y)
if wheelmoved[scene]then wheelmoved[scene](x,y)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
@@ -358,15 +360,11 @@ function love.touchmoved(id,x,y,dx,dy)
local l=tc.getTouches() local l=tc.getTouches()
for n=1,#virtualkey do for n=1,#virtualkey do
local b=virtualkey[n] local b=virtualkey[n]
local p=false
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 if(x-b[1])^2+(y-b[2])^2<=b[3]then return end
p=true
break
end
end end
if not p and players[1].isKeyDown then if players[1].isKeyDown[n]then
releaseKey(n,players[1]) releaseKey(n,players[1])
end end
end end
@@ -383,31 +381,22 @@ end
function love.keypressed(i) function love.keypressed(i)
if i=="f12"then devMode=not devMode end if i=="f12"then devMode=not devMode end
if devMode then if devMode then
if Buttons.sel then
local B=Buttons[scene][Buttons.sel]
if i=="left"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=="down"then
B.y=B.y+10
elseif i==","then
B.w=B.w-10
elseif i=="."then
B.w=B.w+10
elseif i=="/"then
B.h=B.h-10
elseif i=="'"then
B.h=B.h+10
end
end
if i=="q"then if i=="q"then
for i=1,#Buttons[scene]do for i=1,#Buttons[scene]do
local B=Buttons[scene][i] 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
local B=Buttons[scene][Buttons.sel]
if i=="left"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=="down"then B.y=B.y+10
elseif i==","then B.w=B.w-10
elseif i=="."then B.w=B.w+10
elseif i=="/"then B.h=B.h-10
elseif i=="'"then B.h=B.h+10
end
end end
else else
if keyDown[scene]then keyDown[scene](i) if keyDown[scene]then keyDown[scene](i)
@@ -444,9 +433,6 @@ function love.joystickhat(js,hat,dir)
end end
]] ]]
function love.wheelmoved(x,y)
if wheelmoved[scene]then wheelmoved[scene](x,y)end
end
function love.update(dt) function love.update(dt)
--[[ --[[
@@ -484,10 +470,10 @@ function love.update(dt)
updateButton() updateButton()
end end
function love.sendData(data) function love.sendData(data)
return nil return
end end
function love.receiveData(id,data) function love.receiveData(id,data)
return nil return
end end
function love.draw() function love.draw()
gc.clear() gc.clear()
@@ -567,7 +553,7 @@ function love.run()
if bgmPlaying then bgm[bgmPlaying]:pause()end if bgmPlaying then bgm[bgmPlaying]:pause()end
if scene=="play"then if scene=="play"then
for i=1,#players.alive do for i=1,#players.alive do
local l=players.alive[i].isKeyDown local l=players.alive[i].keyPressing
for j=1,#l do for j=1,#l do
if l[j]then if l[j]then
releaseKey(j,players.alive[i]) releaseKey(j,players.alive[i])
@@ -585,7 +571,7 @@ function love.run()
if bgmPlaying then bgm[bgmPlaying]:play()end if bgmPlaying then bgm[bgmPlaying]:play()end
end end
end end
while Timer()-frameT<1/60 do end ::L::if Timer()-frameT<1/60 then goto L end
frameT=Timer() frameT=Timer()
end end
end end

View File

@@ -9,12 +9,12 @@ 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.7" W.title="Techmino V0.7.8"
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.borderless=X W.borderless=X
W.resizable=true W.resizable=true
W.minwidth,W.minheight=640,360
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=X--0 to set ∞fps

View File

@@ -1,6 +1,5 @@
function loadGame(mode,level) function loadGame(mode,level)
--rec={} --rec={}
print(mode)
curMode={id=modeID[mode],lv=level,modeName=modeName[mode],levelName=modeLevel[modeID[mode]][level]} curMode={id=modeID[mode],lv=level,modeName=modeName[mode],levelName=modeLevel[modeID[mode]][level]}
gotoScene("play") gotoScene("play")
end end
@@ -12,6 +11,7 @@ function resetGameData()
players={alive={}} players={alive={}}
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]()
BGM(modeEnv.bgm)
FX.beam={} FX.beam={}
for k,v in pairs(PTC.dust)do for k,v in pairs(PTC.dust)do
@@ -63,6 +63,7 @@ function createPlayer(id,x,y,size,AIspeed,data)
P.small=P.size<.3 P.small=P.size<.3
if P.small then if P.small then
P.centerX,P.centerY=P.x+150*P.size,P.y+300*P.size P.centerX,P.centerY=P.x+150*P.size,P.y+300*P.size
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
end end
@@ -109,30 +110,31 @@ function createPlayer(id,x,y,size,AIspeed,data)
P.dropDelay,P.lockDelay=P.gameEnv.drop,P.gameEnv.lock P.dropDelay,P.lockDelay=P.gameEnv.drop,P.gameEnv.lock
P.freshTime=0 P.freshTime=0
P.spinLast,P.lastClear=nil P.spinLast,P.lastClear=nil
if P.gameEnv.sequence<3 then local s=P.gameEnv.sequence
if s=="bag7"or s=="his4"then
local bag1={1,2,3,4,5,6,7} local bag1={1,2,3,4,5,6,7}
for i=1,7 do for i=1,7 do
P.nxt[i]=rem(bag1,rnd(#bag1)) P.nxt[i]=rem(bag1,rnd(#bag1))
P.nb[i]=blocks[P.nxt[i]][0] P.nb[i]=blocks[P.nxt[i]][0]
end end
elseif P.gameEnv.sequence==3 then elseif s=="rnd"then
for i=1,6 do for i=1,6 do
local r=rnd(7) local r=rnd(7)
P.nxt[i]=r P.nxt[i]=r
P.nb[i]=blocks[r][0] P.nb[i]=blocks[r][0]
end end
elseif P.gameEnv.sequence==5 then elseif s=="drought1"then
local bag1={1,2,3,4,5,6} local bag1={1,2,3,4,5,6}
for i=1,6 do for i=1,6 do
P.nxt[i]=rem(bag1,rnd(#bag1)) P.nxt[i]=rem(bag1,rnd(#bag1))
P.nb[i]=blocks[P.nxt[i]][0] P.nb[i]=blocks[P.nxt[i]][0]
end--First bag end
elseif P.gameEnv.sequence==6 then elseif s=="drought2"then
local bag1={1,2,3,4,6,7} local bag1={1,2,3,4,6,7}
for i=1,6 do for i=1,6 do
P.nxt[i]=rem(bag1,rnd(#bag1)) P.nxt[i]=rem(bag1,rnd(#bag1))
P.nb[i]=blocks[P.nxt[i]][0] P.nb[i]=blocks[P.nxt[i]][0]
end--First bag end
end end
P.freshNext=freshMethod[P.gameEnv.sequence] P.freshNext=freshMethod[P.gameEnv.sequence]
@@ -143,7 +145,7 @@ function createPlayer(id,x,y,size,AIspeed,data)
P.showTime=P.gameEnv.visible==1 and 1e99 or P.gameEnv.visible==2 and 300 or 20 P.showTime=P.gameEnv.visible==1 and 1e99 or P.gameEnv.visible==2 and 300 or 20
P.cb,P.sc,P.bn,P.r,P.c,P.cx,P.cy,P.dir,P.y_img={{}},{0,0},1,0,0,0,0,0,0 P.cb,P.sc,P.bn,P.r,P.c,P.cx,P.cy,P.dir,P.y_img={{}},{0,0},1,0,0,0,0,0,0
P.keyPressing,P.isKeyDown={},{}for i=1,12 do P.keyPressing[i],P.isKeyDown[i]=false,false end P.keyPressing={}for i=1,12 do P.keyPressing[i]=false end
P.moving,P.downing=0,0 P.moving,P.downing=0,0
P.waiting,P.falling=0,0 P.waiting,P.falling=0,0
P.clearing={} P.clearing={}
@@ -164,15 +166,45 @@ function showText(P,text,type,font,dy,spd,inf)
ins(P.bonus,{t=0,text=text,draw=FX[type],font=font,dy=dy or 0,speed=spd or 1,inf=inf}) ins(P.bonus,{t=0,text=text,draw=FX[type],font=font,dy=dy or 0,speed=spd or 1,inf=inf})
end end
end end
function garbageSend(S,R,send,time)
local pos=rnd(10)
createBeam(S,R,send<4 and 1 or send<7 and 2 or 3)
R.lastRecv=S
if R.atkBuffer.sum<20 then
send=min(send,20-R.atkBuffer.sum)
R.atkBuffer.sum=R.atkBuffer.sum+send
ins(R.atkBuffer,{pos,amount=send,countdown=time,cd0=time,time=0,sent=false,lv=send<4 and 1 or send<7 and 2 or 3})
if R.id==1 then sysSFX(send<4 and "blip_1"or"blip_2",min(send+1,5)*.1)end
end
end
function garbageRelease()
local t=P.showTime*2
for i=1,#P.atkBuffer do
local atk=P.atkBuffer[i]
if not atk.sent and atk.countdown<=0 then
for j=1,atk.amount do
ins(P.field,1,getNewRow(13))
ins(P.visTime,1,getNewRow(t))
for k=1,#atk do
P.field[1][atk[k]]=0
end
end
P.atkBuffer.sum=P.atkBuffer.sum-atk.amount
atk.sent=true
atk.time=0
P.fieldBeneath=P.fieldBeneath+atk.amount*30
end
end
end
function createBeam(S,R,lv)--Player id function createBeam(S,R,lv)--Player id
local x1,y1,x2,y2 local x1,y1,x2,y2
if S.small then if S.small then
x1,y1=S.x+(30*(P.cx+P.sc[2]-1)+15)*S.size,S.y+(600-30*(P.cy+P.sc[1]-1)+15)*S.size x1,y1=S.centerX,S.centerY
else else
x1,y1=S.x+(30*(P.cx+P.sc[2]-1)-30+15+150)*S.size,S.y+(600-30*(P.cy+P.sc[1]-1)+15+70)*S.size x1,y1=S.x+(30*(P.cx+P.sc[2]-1)-30+15+150)*S.size,S.y+(600-30*(P.cy+P.sc[1]-1)+15+70)*S.size
end end
if R.small then if R.small then
x2,y2=R.x+150*R.size,R.y+300*R.size x2,y2=R.x+150*R.size*.2,R.y+300*R.size*.2
else else
x2,y2=R.x+308*R.size,R.y+450*R.size x2,y2=R.x+308*R.size,R.y+450*R.size
end end
@@ -181,12 +213,12 @@ end
function throwBadge(S,R,amount)--Player id function throwBadge(S,R,amount)--Player id
local x1,y1,x2,y2 local x1,y1,x2,y2
if S.small then if S.small then
x1,y1=S.x+150*S.size,S.y+300*S.size x1,y1=S.x+30*S.size,S.y+60*S.size
else else
x1,y1=S.x+308*S.size,S.y+450*S.size x1,y1=S.x+308*S.size,S.y+450*S.size
end end
if R.small then if R.small then
x2,y2=R.x+150*R.size,R.y+300*R.size x2,y2=R.x+30*R.size,R.y+60*R.size
else else
x2,y2=R.x+73*R.size,R.y+360*R.size x2,y2=R.x+73*R.size,R.y+360*R.size
end end
@@ -195,9 +227,9 @@ end
function randomTarget(p) function randomTarget(p)
if #players.alive>1 then if #players.alive>1 then
local r local r
repeat ::L::
r=players.alive[rnd(#players.alive)] r=players.alive[rnd(#players.alive)]
until r~=p if r==p then goto L end
return r return r
end end
end end
@@ -214,7 +246,7 @@ function freshTarget(P)
for i=1,#P.atker do for i=1,#P.atker do
if not P.atker[i].alive then if not P.atker[i].alive then
rem(P.atker,i) rem(P.atker,i)
break return
end end
end end
end end
@@ -292,50 +324,55 @@ function royaleLevelup()
end end
function freshgho() function freshgho()
if P.gameEnv._20G or P.keyPressing[7]and P.gameEnv.sdarr==0 then if P.gameEnv._20G or P.keyPressing[7]and P.gameEnv.sdarr==0 then
while not ifoverlap(P.cb,P.cx,P.cy-1)do ::L::if not ifoverlap(P.cb,P.cx,P.cy-1)then
P.cy=P.cy-1 P.cy=P.cy-1
P.spinLast=false P.spinLast=false
goto L
end end
P.y_img=P.cy P.y_img=P.cy
else else
P.y_img=P.cy>#P.field+1 and #P.field+1 or P.cy P.y_img=P.cy>#P.field+1 and #P.field+1 or P.cy
while not ifoverlap(P.cb,P.cx,P.y_img-1)do ::L::if not ifoverlap(P.cb,P.cx,P.y_img-1)then
P.y_img=P.y_img-1 P.y_img=P.y_img-1
goto L
end end
end end
end end
function freshLockDelay() function freshLockDelay()
if P.lockDelay<P.gameEnv.lock and P.freshTime<=P.gameEnv.freshLimit then if P.lockDelay<P.gameEnv.lock then
P.lockDelay=P.gameEnv.lock if P.freshTime<=P.gameEnv.freshLimit then
P.lockDelay=P.gameEnv.lock
end
P.freshTime=P.freshTime+1 P.freshTime=P.freshTime+1
end end
end end
function ifoverlap(bk,x,y) function ifoverlap(bk,x,y)
if x<1 or x+#bk[1]>11 or y<1 then return true end if x<1 or x+#bk[1]>11 or y<1 then return true end
if y>#P.field then return nil end if y>#P.field 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 P.field[y+i-1]and bk[i][j]>0 and P.field[y+i-1][x+j-1]>0 then return true end if P.field[y+i-1]and bk[i][j]>0 and P.field[y+i-1][x+j-1]>0 then return true end
end end end end
end end
function ckfull(i) function ckfull(i)
for j=1,10 do if P.field[i][j]==0 then return nil end end for j=1,10 do if P.field[i][j]==0 then return end end
return true return true
end end
function checkrow(s,num)--(cy,r) function checkrow(start,height)--(cy,r)
local c=0--rows cleared local c=0
for i=s,s+num-1 do for i=start,start+height-1 do
if ckfull(i)then if ckfull(i)then
ins(P.clearing,1,i) ins(P.clearing,1,i)
P.falling=P.gameEnv.fall c=c+1
c=c+1--row cleared+1
if not P.small then if not P.small then
for k=1,250 do local S=PTC.dust[P.id]
PTC.dust[P.id]:setPosition(rnd(300),600-30*i+rnd(30)) for k=1,100 do
PTC.dust[P.id]:emit(1) S:setPosition(rnd(300),600-30*i+rnd(30))
S:emit(3)
end end
end end
end end
end end
if c>0 then P.falling=P.gameEnv.fall end
return c return c
end end
function solid(x,y) function solid(x,y)
@@ -346,6 +383,7 @@ end
function resetblock() function resetblock()
P.holded=false P.holded=false
P.spinLast=false P.spinLast=false
P.bn,P.cb=rem(P.nxt,1),rem(P.nb,1)
P.freshNext() P.freshNext()
P.sc,P.dir=scs[P.bn][0],0 P.sc,P.dir=scs[P.bn][0],0
P.r,P.c=#P.cb,#P.cb[1] P.r,P.c=#P.cb,#P.cb[1]
@@ -369,7 +407,10 @@ end
function pressKey(i,p) function pressKey(i,p)
P=p P=p
P.keyPressing[i]=true P.keyPressing[i]=true
P.isKeyDown[i]=true if P.id==1 then
virtualkeyDown[i]=true
virtualkeyPressTime[i]=10
end
if i==10 then if i==10 then
act.restart() act.restart()
elseif P.alive then elseif P.alive then
@@ -402,8 +443,8 @@ function pressKey(i,p)
end end
function releaseKey(i,p) function releaseKey(i,p)
p.keyPressing[i]=false p.keyPressing[i]=false
p.isKeyDown[i]=false if p.id==1 then virtualkeyDown[i]=false end
-- if playmode=="recording"then ins(rec,{-i,frame})end -- if recording then ins(rec,{-i,frame})end
end end
function spin(d,ifpre) function spin(d,ifpre)
local idir=(P.dir+d)%4 local idir=(P.dir+d)%4
@@ -413,7 +454,7 @@ function spin(d,ifpre)
if P.id==1 then if P.id==1 then
stat.rotate=stat.rotate+1 stat.rotate=stat.rotate+1
end end
return nil return
end end
local icb=blocks[P.bn][idir] local icb=blocks[P.bn][idir]
local isc=scs[P.bn][idir] local isc=scs[P.bn][idir]
@@ -446,7 +487,7 @@ function hold(ifpre)
P.hn,P.bn=P.bn,P.hn P.hn,P.bn=P.bn,P.hn
P.hb,P.cb=blocks[P.hn][0],P.hb P.hb,P.cb=blocks[P.hn][0],P.hb
if P.bn==0 then P.freshNext()end if P.bn==0 then P.bn,P.cb=rem(P.nxt,1),rem(P.nb,1)P.freshNext()end
P.sc,P.dir=scs[P.bn][0],0 P.sc,P.dir=scs[P.bn][0],0
P.r,P.c=#P.cb,#P.cb[1] P.r,P.c=#P.cb,#P.cb[1]
P.cx,P.cy=blockPos[P.bn],21+ceil(P.fieldBeneath/30)-P.r+min(int(#P.field*.2),2) P.cx,P.cy=blockPos[P.bn],21+ceil(P.fieldBeneath/30)-P.r+min(int(#P.field*.2),2)
@@ -513,11 +554,11 @@ function drop()
if P.b2b>480 then if P.b2b>480 then
showText(P,"Techrash B2B2B","fly",70) showText(P,"Techrash B2B2B","fly",70)
csend=6 csend=6
sendTime=80 sendTime=100
exblock=exblock+1 exblock=exblock+1
elseif P.b2b>=30 then elseif P.b2b>=30 then
showText(P,"Techrash B2B","drive",70) showText(P,"Techrash B2B","drive",70)
sendTime=70 sendTime=80
csend=5 csend=5
else else
showText(P,"Techrash","stretch",80) showText(P,"Techrash","stretch",80)
@@ -619,7 +660,8 @@ function drop()
showText(P,exblock,"zoomout",10,70) showText(P,exblock,"zoomout",10,70)
end end
end end
while csend>0 and P.atkBuffer[1]do ::L::
if csend>0 and P.atkBuffer[1]then
if exblock>0 then if exblock>0 then
exblock=exblock-1 exblock=exblock-1
else else
@@ -630,6 +672,7 @@ function drop()
if P.atkBuffer[1].amount==0 then if P.atkBuffer[1].amount==0 then
rem(P.atkBuffer,1) rem(P.atkBuffer,1)
end end
goto L
end end
if csend>0 then if csend>0 then
if modeEnv.royaleMode then if modeEnv.royaleMode then
@@ -681,36 +724,6 @@ function lock()
end end
end end
end end
function garbageSend(S,R,send,time)
local pos=rnd(10)
createBeam(S,R,send<4 and 1 or send<7 and 2 or 3)
R.lastRecv=S
if R.atkBuffer.sum<20 then
send=min(send,20-R.atkBuffer.sum)
R.atkBuffer.sum=R.atkBuffer.sum+send
ins(R.atkBuffer,{pos,amount=send,countdown=time,cd0=time,time=0,sent=false,lv=send<4 and 1 or send<7 and 2 or 3})
if R.id==1 then sysSFX(send<4 and "blip_1"or"blip_2",min(send+1,5)*.1)end
end
end
function garbageRelease()
local t=P.showTime*2
for i=1,#P.atkBuffer do
local atk=P.atkBuffer[i]
if not atk.sent and atk.countdown<=0 then
for j=1,atk.amount do
ins(P.field,1,getNewRow(13))
ins(P.visTime,1,getNewRow(t))
for k=1,#atk do
P.field[1][atk[k]]=0
end
end
P.atkBuffer.sum=P.atkBuffer.sum-atk.amount
atk.sent=true
atk.time=0
P.fieldBeneath=P.fieldBeneath+atk.amount*30
end
end
end
act={ act={
moveLeft=function(auto) moveLeft=function(auto)
if P.keyPressing[9]then if P.keyPressing[9]then
@@ -735,7 +748,7 @@ act={
if P.keyPressing[9]then if P.keyPressing[9]then
if P.atkMode~=2 then if P.atkMode~=2 then
P.atkMode=2 P.atkMode=2
changeAtk(P,P~=mostBadge and mostBadge or secBadge or randomTarget(P)) freshTarget(P)
end end
else else
if not auto then if not auto then
@@ -757,7 +770,7 @@ act={
if P.keyPressing[9]then if P.keyPressing[9]then
if P.atkMode~=3 then if P.atkMode~=3 then
P.atkMode=3 P.atkMode=3
changeAtk(P,P~=mostDangerous and mostDangerous or secDangerous or randomTarget(P)) freshTarget(P)
end end
else else
if P.waiting<=0 then if P.waiting<=0 then
@@ -805,15 +818,17 @@ act={
end, end,
insDown=function()if P.cy~=P.y_img then P.cy,P.lockDelay,P.spinLast=P.y_img,P.gameEnv.lock,false end end, insDown=function()if P.cy~=P.y_img then P.cy,P.lockDelay,P.spinLast=P.y_img,P.gameEnv.lock,false end end,
insLeft=function() insLeft=function()
while not ifoverlap(P.cb,P.cx-1,P.cy)do ::L::if not ifoverlap(P.cb,P.cx-1,P.cy)then
P.cx,P.lockDelay=P.cx-1,P.gameEnv.lock P.cx,P.lockDelay=P.cx-1,P.gameEnv.lock
freshgho() freshgho()
goto L
end end
end, end,
insRight=function() insRight=function()
while not ifoverlap(P.cb,P.cx+1,P.cy)do ::L::if not ifoverlap(P.cb,P.cx+1,P.cy)then
P.cx,P.lockDelay=P.cx+1,P.gameEnv.lock P.cx,P.lockDelay=P.cx+1,P.gameEnv.lock
freshgho() freshgho()
goto L
end end
end, end,
down1=function() down1=function()

200
list.lua
View File

@@ -29,7 +29,7 @@ PClist={--ZSLJTOI
{7,3,2,5},{7,4,6,5},{7,5,2,3},{7,3,5,7},{7,3,2,5},{7,3,5,1},{7,5,2,3},{3,6,2,5}, {7,3,2,5},{7,4,6,5},{7,5,2,3},{7,3,5,7},{7,3,2,5},{7,3,5,1},{7,5,2,3},{3,6,2,5},
{3,1,2,5},{3,1,1,5},{3,1,5,2},{3,1,5,1},{3,5,1,2},{4,5,3,2},{4,2,6,5},{6,5,3,2}, {3,1,2,5},{3,1,1,5},{3,1,5,2},{3,1,5,1},{3,5,1,2},{4,5,3,2},{4,2,6,5},{6,5,3,2},
{1,4,2,5},{1,5,3,6},{5,2,6,3},{5,2,1,3},{5,2,7,4},{2,4,1,5},{2,4,5,1},{2,1,4,5}, {1,4,2,5},{1,5,3,6},{5,2,6,3},{5,2,1,3},{5,2,7,4},{2,4,1,5},{2,4,5,1},{2,1,4,5},
{2,5,4,3},{2,5,6,7},{7,5,4,2}, {2,5,4,3},{2,5,6,7},{7,5,4,2},{4,5,3,5},
} }
color={ color={
red={1,0,0}, red={1,0,0},
@@ -68,7 +68,7 @@ attackColor={
gc.setColor(1,t,0) gc.setColor(1,t,0)
end, end,
function(t) function(t)
gc.setColor(1,.4,.3+t*.7) gc.setColor(1,.5+t*.5,.5+t*.5)
end, end,
function(t) function(t)
gc.setColor(.2+t*.8,.2+t*.8,1) gc.setColor(.2+t*.8,.2+t*.8,1)
@@ -94,15 +94,15 @@ blockColor={
} }
clearName={"Single","Double","Triple"} clearName={"Single","Double","Triple"}
spinName={[0]={}} spinName={[0]={}}
for j=1,7 do
spinName[0][j]=blockName[j].." spin"
end
for i=1,3 do for i=1,3 do
spinName[i]={} spinName[i]={}
for j=1,7 do for j=1,7 do
spinName[i][j]=blockName[j].." spin "..clearName[i] spinName[i][j]=blockName[j].." spin "..clearName[i]
end end
end end
for j=1,7 do
spinName[0][j]=blockName[j].." spin"
end
miniTitle_rect={ miniTitle_rect={
{2,0,5,1},{4,1,1,6}, {2,0,5,1},{4,1,1,6},
@@ -132,6 +132,7 @@ bgm={
"blank", "blank",
"way", "way",
"race", "race",
"newera",
"push", "push",
"reason", "reason",
"infinite", "infinite",
@@ -205,7 +206,7 @@ customRange={
fall={1,3,5,7,10,15,20,30,60}, fall={1,3,5,7,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},
sequence={1,2,3}, sequence={"bag7","his4","rnd"},
visible={1,2,3}, visible={1,2,3},
target={10,20,40,100,200,500,1000,1e99}, target={10,20,40,100,200,500,1000,1e99},
freshLimit={0,8,15,1e99}, freshLimit={0,8,15,1e99},
@@ -234,6 +235,9 @@ reAtk={0,0,1,1,1,2,2,3,3}
reDef={0,1,1,2,3,3,4,4,5} reDef={0,1,1,2,3,3,4,4,5}
marathon_drop={[0]=60,48,40,30,24,18,15,12,10,8,7,6,5,4,3,2,1,1,0,0} marathon_drop={[0]=60,48,40,30,24,18,15,12,10,8,7,6,5,4,3,2,1,1,0,0}
rush_lock={20,18,16,14,12}
rush_wait={12,10,9,8,7}
rush_fall={12,11,10,9,8}
death_lock={12,11,10,9,8} death_lock={12,11,10,9,8}
death_wait={9,8,7,6,5} death_wait={9,8,7,6,5}
death_fall={10,9,8,7,6} death_fall={10,9,8,7,6}
@@ -247,31 +251,37 @@ defaultModeEnv={
drop=60, drop=60,
target=10, target=10,
reach=Event.gameover.win, reach=Event.gameover.win,
bgm="race",
}, },
{ {
drop=60, drop=60,
target=20, target=20,
reach=Event.gameover.win, reach=Event.gameover.win,
bgm="race",
}, },
{ {
drop=60, drop=60,
target=40, target=40,
reach=Event.gameover.win, reach=Event.gameover.win,
bgm="race",
}, },
{ {
drop=60, drop=60,
target=100, target=100,
reach=Event.gameover.win, reach=Event.gameover.win,
bgm="race",
}, },
{ {
drop=60, drop=60,
target=400, target=400,
reach=Event.gameover.win, reach=Event.gameover.win,
bgm="push",
}, },
{ {
drop=60, drop=60,
target=1000, target=1000,
reach=Event.gameover.win, reach=Event.gameover.win,
bgm="push",
}, },
}, },
marathon={ marathon={
@@ -280,18 +290,32 @@ defaultModeEnv={
lock=1e99, lock=1e99,
target=200, target=200,
reach=Event.marathon_reach, reach=Event.marathon_reach,
bgm="way",
}, },
{ {
drop=60, drop=60,
fall=20, fall=20,
target=10, target=10,
reach=Event.marathon_reach, reach=Event.marathon_reach,
bgm="way",
}, },
{ {
_20G=true, _20G=true,
fall=20, fall=20,
target=200, target=200,
reach=Event.marathon_reach, reach=Event.marathon_reach,
bgm="newera",
},
{
_20G=true,
drop=0,
lock=rush_lock[1],
wait=rush_wait[1],
fall=rush_fall[1],
target=50,
reach=Event.marathon_reach_lunatic,
arr=2,
bgm="race",
}, },
{ {
_20G=true, _20G=true,
@@ -300,8 +324,9 @@ defaultModeEnv={
wait=death_wait[1], wait=death_wait[1],
fall=death_fall[1], fall=death_fall[1],
target=50, target=50,
reach=Event.marathon_reach_lunatic, reach=Event.marathon_reach_ultimete,
arr=1, arr=1,
bgm="push",
}, },
}, },
zen={ zen={
@@ -310,6 +335,7 @@ defaultModeEnv={
lock=1e99, lock=1e99,
target=200, target=200,
reach=Event.gameover.win, reach=Event.gameover.win,
bgm="infinite",
}, },
}, },
infinite={ infinite={
@@ -317,10 +343,13 @@ defaultModeEnv={
drop=1e99, drop=1e99,
lock=1e99, lock=1e99,
oncehold=false, oncehold=false,
bgm="infinite",
}, },
}, },
solo={ solo={
{}, {
bgm="race",
},
}, },
tsd={ tsd={
{ {
@@ -329,12 +358,14 @@ defaultModeEnv={
lock=1e99, lock=1e99,
target=1, target=1,
reach=Event.tsd_reach, reach=Event.tsd_reach,
bgm="reason",
}, },
{ {
drop=60, drop=60,
lock=60, lock=60,
target=1, target=1,
reach=Event.tsd_reach, reach=Event.tsd_reach,
bgm="reason",
}, },
}, },
blind={ blind={
@@ -342,18 +373,21 @@ defaultModeEnv={
drop=30, drop=30,
lock=60, lock=60,
visible=2, visible=2,
bgm="newera",
}, },
{ {
drop=15, drop=15,
lock=30, lock=60,
visible=0, visible=0,
freshLimit=10, freshLimit=10,
bgm="reason",
}, },
{ {
_20G=true, _20G=true,
lock=60, lock=60,
visible=0, visible=0,
freshLimit=15, freshLimit=15,
bgm="reason",
}, },
{ {
_20G=true, _20G=true,
@@ -363,6 +397,7 @@ defaultModeEnv={
fall=15, fall=15,
visible=0, visible=0,
arr=1, arr=1,
bgm="push",
}, },
}, },
dig={ dig={
@@ -370,10 +405,12 @@ defaultModeEnv={
drop=60, drop=60,
lock=120, lock=120,
fall=20, fall=20,
bgm="push",
}, },
{ {
drop=10, drop=10,
lock=30, lock=30,
bgm="push",
}, },
}, },
survivor={ survivor={
@@ -381,21 +418,25 @@ defaultModeEnv={
drop=60, drop=60,
lock=120, lock=120,
fall=30, fall=30,
bgm="push",
}, },
{ {
drop=30, drop=30,
lock=60, lock=60,
fall=20, fall=20,
bgm="newera",
}, },
{ {
drop=10, drop=10,
lock=20, lock=60,
fall=15, fall=15,
bgm="race",
}, },
{ {
drop=5, drop=5,
lock=15, lock=60,
fall=10, fall=10,
bgm="push",
}, },
}, },
sudden={ sudden={
@@ -405,24 +446,28 @@ defaultModeEnv={
lock=1e99, lock=1e99,
target=0, target=0,
reach=Event.sudden_reach, reach=Event.sudden_reach,
bgm="way",
}, },
{ {
drop=30, drop=30,
lock=60, lock=60,
target=0, target=0,
reach=Event.sudden_reach, reach=Event.sudden_reach,
bgm="way",
}, },
{ {
drop=15, drop=15,
lock=60, lock=60,
target=0, target=0,
reach=Event.sudden_reach_hard, reach=Event.sudden_reach_hard,
bgm="way",
}, },
{ {
drop=5, drop=5,
lock=20, lock=40,
target=0, target=0,
reach=Event.sudden_reach_hard, reach=Event.sudden_reach_hard,
bgm="way",
}, },
}, },
pctrain={ pctrain={
@@ -432,20 +477,22 @@ defaultModeEnv={
drop=120, drop=120,
lock=120, lock=120,
fall=20, fall=20,
sequence=4, sequence="pc",
target=0, target=0,
freshLimit=1e99, freshLimit=1e99,
reach=Event.newPC, reach=Event.newPC,
bgm="newera",
}, },
{ {
next=4, next=4,
hold=false, hold=false,
drop=60, drop=60,
lock=60, lock=60,
fall=15, fall=20,
sequence=4, sequence="pc",
target=0, target=0,
reach=Event.newPC, reach=Event.newPC,
bgm="newera",
}, },
}, },
pcchallenge={ pcchallenge={
@@ -453,26 +500,26 @@ defaultModeEnv={
oncehold=false, oncehold=false,
drop=300, drop=300,
lock=1e99, lock=1e99,
sequence=1,
target=100, target=100,
reach=Event.gameover.win, reach=Event.gameover.win,
freshLimit=1e99, freshLimit=1e99,
bgm="newera",
}, },
{ {
drop=60, drop=60,
lock=120, lock=120,
fall=10, fall=10,
sequence=1,
target=100, target=100,
reach=Event.gameover.win, reach=Event.gameover.win,
bgm="infinite",
}, },
{ {
drop=20, drop=20,
lock=60, lock=60,
fall=20, fall=20,
sequence=1,
target=100, target=100,
reach=Event.gameover.win, reach=Event.gameover.win,
bgm="infinite",
}, },
}, },
techmino41={ techmino41={
@@ -482,6 +529,7 @@ defaultModeEnv={
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,
bgm="race",
}, },
}, },
techmino99={ techmino99={
@@ -491,36 +539,42 @@ defaultModeEnv={
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,
bgm="race",
}, },
}, },
drought={ drought={
{ {
drop=20, drop=20,
lock=30, lock=60,
sequence=5, sequence=drought1,
target=100, target=100,
reach=Event.gameover.win, reach=Event.gameover.win,
bgm="reason",
}, },
{ {
drop=20, drop=20,
lock=30, lock=60,
sequence=6, sequence=drought2,
target=100, target=100,
reach=Event.gameover.win, reach=Event.gameover.win,
bgm="reason",
}, },
}, },
hotseat={ hotseat={
{}, {
bgm="way",
},
}, },
custom={ custom={
{ {
reach=Event.gameover.win bgm="reason",
reach=Event.gameover.win,
}, },
}, },
} }
modeLevel={ modeLevel={
sprint={"10L","20L","40L","100L","400L","1000L"}, sprint={"10L","20L","40L","100L","400L","1000L"},
marathon={"EASY","NORMAL","EXTRA","DEATH"}, marathon={"EASY","NORMAL","HARD","LUNATIC","ULTIMATE"},
zen={"NORMAL"}, zen={"NORMAL"},
infinite={"NORMAL"}, infinite={"NORMAL"},
solo={"EASY","NORMAL","HARD","LUNATIC"}, solo={"EASY","NORMAL","HARD","LUNATIC"},
@@ -529,7 +583,7 @@ modeLevel={
dig={"NORMAL","LUNATIC"}, dig={"NORMAL","LUNATIC"},
survivor={"EASY","NORMAL","HARD","LUNATIC"}, survivor={"EASY","NORMAL","HARD","LUNATIC"},
sudden={"EASY","NORMAL","HARD","LUNATIC"}, sudden={"EASY","NORMAL","HARD","LUNATIC"},
pctrain={"HARD","LUNATIC"}, pctrain={"NORMAL","LUNATIC"},
pcchallenge={"NORMAL","HARD","LUNATIC"}, pcchallenge={"NORMAL","HARD","LUNATIC"},
techmino41={"EASY","NORMAL","HARD","LUNATIC","ULTIMATE"}, techmino41={"EASY","NORMAL","HARD","LUNATIC","ULTIMATE"},
techmino99={"EASY","NORMAL","HARD","LUNATIC","ULTIMATE"}, techmino99={"EASY","NORMAL","HARD","LUNATIC","ULTIMATE"},
@@ -585,8 +639,7 @@ modeInfo={
} }
freshMethod={ freshMethod={
function() bag7=function()
P.bn,P.cb=rem(P.nxt,1),rem(P.nb,1)
if #P.nxt<6 then if #P.nxt<6 then
local bag={1,2,3,4,5,6,7} local bag={1,2,3,4,5,6,7}
for i=1,7 do for i=1,7 do
@@ -595,26 +648,41 @@ freshMethod={
end end
end end
end, end,
function() his4=function()
P.bn,P.cb=rem(P.nxt,1),rem(P.nb,1) if #P.nxt<6 then
local i,j=nil,0 local j,i=0
repeat ::L::
i,j=rnd(7),j+1 i,j=rnd(7),j+1
until not(i==P.his[1]or i==P.his[2]or i==P.his[3]or i==P.his[4]) if(i==P.his[1]or i==P.his[2]or i==P.his[3]or i==P.his[4])then goto L end
P.nxt[6],P.nb[6]=i,blocks[i][0]
rem(P.his,1)ins(P.his,i)
end
end,
rnd=function()
local i
::L::
i=rnd(7)
if i==P.nxt[5]then goto L end
P.nxt[6],P.nb[6]=i,blocks[i][0] P.nxt[6],P.nb[6]=i,blocks[i][0]
rem(P.his,1)ins(P.his,i) end,--random
pc=function()
if P.cstat.piece%4==0 then
local r=rnd(#PClist)
local f=P.cstat.event==1
for i=1,4 do
local b=PClist[r][i]
if f then
if b<3 then b=3-b
elseif b<5 then b=7-b
end
end
ins(P.nxt,b)
ins(P.nb,blocks[b][0])
end
P.cstat.event=(P.cstat.event+1)%2
end
end, end,
function() drought1=function()
P.bn,P.cb=rem(P.nxt,1),rem(P.nb,1)
repeat i=rnd(7)until i~=P.nxt[5]
P.nxt[6],P.nb[6]=i,blocks[i][0]
end,
function()
P.bn,P.cb=rem(P.nxt,1),rem(P.nb,1)
--generate in newPC
end,
function()
P.bn,P.cb=rem(P.nxt,1),rem(P.nb,1)
if #P.nxt<6 then if #P.nxt<6 then
local bag={1,2,3,4,5,6} local bag={1,2,3,4,5,6}
for i=1,6 do for i=1,6 do
@@ -623,14 +691,13 @@ freshMethod={
end end
end end
end, end,
function() drought2=function()
P.bn,P.cb=rem(P.nxt,1),rem(P.nb,1)
if #P.nxt<6 then if #P.nxt<6 then
local bag={1,1,1,2,2,2,3,3,3,4,4,4,6,6,6,5,7} local bag={1,1,1,2,2,2,3,3,3,4,4,4,6,6,6,5,7}
repeat ::L::
ins(P.nxt,rem(bag,rnd(#bag))) ins(P.nxt,rem(bag,rnd(#bag)))
ins(P.nb,blocks[P.nxt[#P.nxt]][0]) ins(P.nb,blocks[P.nxt[#P.nxt]][0])
until not bag[1] if bag[1]then goto L end
end end
end, end,
} }
@@ -697,17 +764,17 @@ TRS={
}, },
[7]={ [7]={
[01]={{0,0},{1,0},{-2,0},{-2,-1},{1,2}}, [01]={{0,0},{1,0},{-2,0},{-2,-1},{1,2}},
[10]={{0,0},{2,0},{-1,0},{2,1},{-1,-2}}, [03]={{0,0},{-1,0},{2,0},{2,-1},{-1,2}},
[10]={{0,0},{2,0},{-1,0},{-1,-2},{2,1},{0,2}},
[30]={{0,0},{-2,0},{1,0},{1,-2},{-2,1},{0,2}},
[12]={{0,0},{-1,0},{2,0},{-1,2},{2,-1}}, [12]={{0,0},{-1,0},{2,0},{-1,2},{2,-1}},
[32]={{0,0},{1,0},{-2,0},{1,-2},{-2,-1}},
[21]={{0,0},{-2,0},{1,0},{1,-2},{-2,1}}, [21]={{0,0},{-2,0},{1,0},{1,-2},{-2,1}},
[23]={{0,0},{2,0},{-1,0},{-1,-2},{2,1}}, [23]={{0,0},{2,0},{-1,0},{-1,-2},{2,1}},
[32]={{0,0},{-2,0},{1,0},{-2,-1},{1,2}},
[30]={{0,0},{1,0},{-2,0},{1,-2},{-2,1}},
[03]={{0,0},{-1,0},{2,0},{2,-1},{-1,2}},
[02]={{0,0},{-1,0},{1,0},{0,-1},{0,1}}, [02]={{0,0},{-1,0},{1,0},{0,-1},{0,1}},
[20]={{0,0},{1,0},{-1,0},{0,1},{0,-1}}, [20]={{0,0},{1,0},{-1,0},{0,1},{0,-1}},
[13]={{0,0},{0,-1},{-1,0},{1,0},{0,1}}, [13]={{0,0},{0,-1},{-1,0},{1,0},{0,1}},
[31]={{0,0},{0,-1},{1,0},{-1,0},{0,1}}, [31]={{0,0},{0,1},{1,0},{-1,0},{0,1}},
} }
}TRS[3],TRS[4]=TRS[2],TRS[1] }TRS[3],TRS[4]=TRS[2],TRS[1]
@@ -861,7 +928,10 @@ virtualkey={
{x=0,y=0,r=0},--toRight {x=0,y=0,r=0},--toRight
{x=0,y=0,r=0},--toDown {x=0,y=0,r=0},--toDown
]] ]]
} }
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}
virtualkeySet={ virtualkeySet={
{ {
{80,720-200,6400,80},--moveLeft {80,720-200,6400,80},--moveLeft
@@ -912,16 +982,16 @@ virtualkeySet={
{80,320,6400,80},--restart {80,320,6400,80},--restart
},--Keyboard set },--Keyboard set
{ {
{1280-360,40,1600,40},--moveLeft {1280-360,40,0,40},--moveLeft
{1280-280,40,1600,40},--moveRight {1280-280,40,0,40},--moveRight
{1280-520,40,1600,40},--rotRight {1280-520,40,0,40},--rotRight
{1280-600,40,1600,40},--rotLeft {1280-600,40,0,40},--rotLeft
{1280-440,40,1600,40},--rotFlip {1280-440,40,0,40},--rotFlip
{1280-40,40,1600,40},--hardDrop {1280-40,40,0,40},--hardDrop
{1280-120,40,1600,40},--softDrop {1280-120,40,0,40},--softDrop
{1280-200,40,1600,40},--hold {1280-200,40,0,40},--hold
{1280-680,40,1600,40},--swap {1280-680,40,0,40},--swap
{-10,-10,0,0},--restart {1280-760,40,0,40},--restart
},--PC key feedback },--PC key feedback
} }

201
main.lua
View File

@@ -54,11 +54,12 @@ gameEnv0={
drop=30,lock=45, drop=30,lock=45,
wait=1,fall=1, wait=1,fall=1,
next=6,hold=true,oncehold=true, next=6,hold=true,oncehold=true,
sequence=1,visible=1, sequence="bag7",visible=1,
_20G=false,target=1e99, _20G=false,target=1e99,
freshLimit=15, freshLimit=15,
virtualkey={}, virtualkey={},
reach=null, reach=null,
bgm="race"
--not all is actually used,some only provide a key --not all is actually used,some only provide a key
} }
customSel={ customSel={
@@ -78,28 +79,23 @@ loadmode={
sprint=function() sprint=function()
createPlayer(1,340,15) createPlayer(1,340,15)
curBG="game1" curBG="game1"
BGM("race")
end, end,
marathon=function() marathon=function()
createPlayer(1,340,15) createPlayer(1,340,15)
curBG="strap" curBG="strap"
BGM("way")
end, end,
zen=function() zen=function()
createPlayer(1,340,15) createPlayer(1,340,15)
curBG="strap" curBG="strap"
BGM("infinite")
end, end,
infinite=function() infinite=function()
createPlayer(1,340,15) createPlayer(1,340,15)
curBG="glow" curBG="glow"
BGM("infinite")
end, end,
solo=function() solo=function()
createPlayer(1,20,15)--Player createPlayer(1,20,15)--Player
createPlayer(2,660,85,.9,customRange.opponent[3*curMode.lv])--AI createPlayer(2,660,85,.9,customRange.opponent[3*curMode.lv])--AI
curBG="game2" curBG="game2"
BGM("race")
end, end,
death=function() death=function()
createPlayer(1,340,15) createPlayer(1,340,15)
@@ -109,12 +105,10 @@ loadmode={
tsd=function() tsd=function()
createPlayer(1,340,15) createPlayer(1,340,15)
curBG="matrix" curBG="matrix"
BGM("reason")
end, end,
blind=function() blind=function()
createPlayer(1,340,15) createPlayer(1,340,15)
curBG="glow" curBG="glow"
BGM("push")
end, end,
dig=function() dig=function()
createPlayer(1,340,15) createPlayer(1,340,15)
@@ -127,121 +121,76 @@ loadmode={
pushSpeed=1 pushSpeed=1
end end
curBG="game2" curBG="game2"
BGM("push")
end, end,
survivor=function() survivor=function()
createPlayer(1,340,15) createPlayer(1,340,15)
local P=players[1] local P=players[1]
if curMode.lv==1 then 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"])
ins(players[1].task,Event.task.survivor_easy) pushSpeed=curMode.lv>2 and 2 or 1
pushSpeed=1
elseif curMode.lv==2 then
ins(players[1].task,Event.task.survivor_normal)
pushSpeed=1
elseif curMode.lv==3 then
ins(players[1].task,Event.task.survivor_hard)
pushSpeed=2
elseif curMode.lv==4 then
ins(players[1].task,Event.task.survivor_lunatic)
pushSpeed=2
end
curBG="game2" curBG="game2"
BGM("push")
end, end,
sudden=function() sudden=function()
createPlayer(1,340,15) createPlayer(1,340,15)
curBG="matrix" curBG="matrix"
BGM("way")
end, end,
pctrain=function() pctrain=function()
createPlayer(1,340,15) createPlayer(1,340,15)
local r=rnd(#PClist) P=players[1]
local P=players[1]
for i=1,4 do
local b=PClist[r][i]
ins(P.nxt,b)
ins(P.nb,blocks[b][0])
end
Event.newPC() Event.newPC()
P.freshNext()
curBG="matrix" curBG="matrix"
BGM("infinite")
end, end,
pcchallenge=function() pcchallenge=function()
createPlayer(1,340,15) createPlayer(1,340,15)
curBG="matrix" curBG="matrix"
BGM("infinite")
end, end,
techmino41=function() techmino41=function()
createPlayer(1,340,15)--Player createPlayer(1,340,15)--Player
if curMode.lv==5 then players[1].gameEnv.drop=15 end if curMode.lv==5 then players[1].gameEnv.drop=15 end
local n,min,max=2 local n,min,max=2
if curMode.lv==1 then if curMode.lv==1 then min,max=5,30
min,max=5,30 elseif curMode.lv==2 then min,max=3,25
elseif curMode.lv==2 then elseif curMode.lv==3 then min,max=2,20
min,max=3,25 elseif curMode.lv==4 then min,max=2,10
elseif curMode.lv==3 then elseif curMode.lv==5 then min,max=1,6
min,max=2,20
elseif curMode.lv==4 then
min,max=2,10
elseif curMode.lv==5 then
min,max=1,6
end end
for i=1,4 do for i=1,4 do for j=1,5 do
for j=1,5 do createPlayer(n,77*i-55,140*j-125,.2,rnd(min,max))
createPlayer(n,77*i-55,140*j-125,.2,rnd(min,max)) n=n+1
n=n+1 end end
end for i=9,12 do for j=1,5 do
end createPlayer(n,77*i+275,140*j-125,.2,rnd(min,max))
for i=9,12 do n=n+1
for j=1,5 do end end
createPlayer(n,77*i+275,140*j-125,.2,rnd(min,max)) --AIs
n=n+1
end
end--AIs
curBG="game3" curBG="game3"
BGM("race")
end, end,
techmino99=function() techmino99=function()
createPlayer(1,340,15)--Player createPlayer(1,340,15)--Player
if curMode.lv==5 then players[1].gameEnv.drop=15 end if curMode.lv==5 then players[1].gameEnv.drop=15 end
local n,min,max=2 local n,min,max=2
if curMode.lv==1 then if curMode.lv==1 then min,max=5,32
min,max=5,32 elseif curMode.lv==2 then min,max=3,25
elseif curMode.lv==2 then elseif curMode.lv==3 then min,max=2,18
min,max=3,25 elseif curMode.lv==4 then min,max=2,12
elseif curMode.lv==3 then elseif curMode.lv==5 then min,max=1,12
min,max=2,18
elseif curMode.lv==4 then
min,max=2,12
elseif curMode.lv==5 then
min,max=1,12
end end
for i=1,7 do for i=1,7 do for j=1,7 do
for j=1,7 do createPlayer(n,46*i-36,97*j-72,.135,rnd(min,max))
createPlayer(n,46*i-36,97*j-72,.135,rnd(min,max)) n=n+1
n=n+1 end end
end for i=15,21 do for j=1,7 do
end createPlayer(n,46*i+264,97*j-72,.135,rnd(min,max))
for i=15,21 do n=n+1
for j=1,7 do end end
createPlayer(n,46*i+264,97*j-72,.135,rnd(min,max)) --AIs
n=n+1
end
end--AIs
curBG="game3" curBG="game3"
BGM("race")
end, end,
drought=function() drought=function()
createPlayer(1,340,15) createPlayer(1,340,15)
curBG="strap" curBG="strap"
BGM("reason")
end,
gmroll=function()
createPlayer(1,340,15)
curBG="glow"
BGM("push")
end, end,
hotseat=function() hotseat=function()
if curMode.lv==1 then if curMode.lv==1 then
@@ -258,10 +207,8 @@ loadmode={
createPlayer(4,955,160,.5) createPlayer(4,955,160,.5)
end end
curBG="game2" curBG="game2"
BGM("way")
end, end,
custom=function() custom=function()
modeEnv={}
for i=1,#customID do for i=1,#customID do
local k=customID[i] local k=customID[i]
modeEnv[k]=customRange[k][customSel[k]] modeEnv[k]=customRange[k][customSel[k]]
@@ -275,7 +222,6 @@ loadmode={
createPlayer(2,660,85,.9,modeEnv.opponent) createPlayer(2,660,85,.9,modeEnv.opponent)
end end
curBG="matrix" curBG="matrix"
BGM("reason")
end, end,
} }
mesDisp={ mesDisp={
@@ -386,18 +332,20 @@ mesDisp={
Event={ Event={
gameover={ gameover={
win=function() win=function()
local P=players.alive[1]
P.alive=false P.alive=false
P.control=false P.control=false
P.timing=false P.timing=false
P.waiting=1e99 P.waiting=1e99
P.b2b=0 P.b2b=0
if modeEnv.royaleMode then if modeEnv.royaleMode then
P.rank=#players.alive P.rank=1
P.result="WIN" P.result="WIN"
changeAtk(P) changeAtk(P)
end end
while P.task[1]do ::L::if P.task[1]then
rem(P.task) rem(P.task)
goto L
end end
for i=1,#P.atkBuffer do for i=1,#P.atkBuffer do
P.atkBuffer[i].sent=true P.atkBuffer[i].sent=true
@@ -418,8 +366,9 @@ Event={
P.timing=false P.timing=false
P.waiting=1e99 P.waiting=1e99
P.b2b=0 P.b2b=0
while P.task[1]do ::L::if P.task[1]then
rem(P.task) rem(P.task)
goto L
end end
for i=1,#players.alive do for i=1,#players.alive do
if players.alive[i]==P then if players.alive[i]==P then
@@ -430,10 +379,13 @@ Event={
if modeEnv.royaleMode then if modeEnv.royaleMode then
changeAtk(P) changeAtk(P)
P.result="K.O." P.result="K.O."
P.rank=#players.alive P.rank=#players.alive+1
P.strength=0 P.strength=0
if P.lastRecv and P.lastRecv.alive then local A=P
local A=P.lastRecv ::L::
A=A.lastRecv
if A and not A.alive then goto L end
if A and A~=P then
if P.id==1 or A.id==1 then if P.id==1 or A.id==1 then
throwBadge(P,A,P.badge) throwBadge(P,A,P.badge)
P.killMark=A.id==1 P.killMark=A.id==1
@@ -468,13 +420,17 @@ Event={
if P.id==1 and players[2]and players[2].ai then SFX("fail")end if P.id==1 and players[2]and players[2].ai then SFX("fail")end
ins(P.task,Event.task.lose) ins(P.task,Event.task.lose)
if #players.alive==1 then if #players.alive==1 then
ins(players.alive[1].task,Event.task.winTrigger) local t=P
P=players.alive[1]
Event.gameover.win()
P=t
end end
end, end,
}, },
marathon_reach=function() marathon_reach=function()
local s=int(P.cstat.row*.1) local s=int(P.cstat.row*.1)
if s>=20 then if s>=20 then
P.cstat.row=200
Event.gameover.win() Event.gameover.win()
else else
P.gameEnv.drop=marathon_drop[s] P.gameEnv.drop=marathon_drop[s]
@@ -485,6 +441,21 @@ Event={
end, end,
marathon_reach_lunatic=function() marathon_reach_lunatic=function()
if P.gameEnv.target==250 then 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,"STAGE "..t,"fly",80,-120)
SFX("reach")
end
end,
marathon_reach_ultimate=function()
if P.gameEnv.target==250 then
P.cstat.row=250
Event.gameover.win() Event.gameover.win()
else else
P.gameEnv.target=P.gameEnv.target+50 P.gameEnv.target=P.gameEnv.target+50
@@ -492,7 +463,7 @@ Event={
P.gameEnv.lock=death_lock[t] P.gameEnv.lock=death_lock[t]
P.gameEnv.wait=death_wait[t] P.gameEnv.wait=death_wait[t]
P.gameEnv.fall=death_fall[t] P.gameEnv.fall=death_fall[t]
showText(P,"STAGE "..t,"fly",80,-120) showText(P,"STAGE "..t,"beat",80,-120)
SFX("reach") SFX("reach")
end end
end, end,
@@ -520,7 +491,7 @@ Event={
local P=players[1] local P=players[1]
if P.cstat.piece%4==0 then if P.cstat.piece%4==0 then
if #P.field==#P.clearing then if #P.field==#P.clearing then
P.counter=P.cstat.piece==0 and 19 or 0 P.counter=P.cstat.piece==0 and 20 or 0
ins(P.task,Event.task.PC) ins(P.task,Event.task.PC)
if curMode.lv==2 then if curMode.lv==2 then
local s=P.cstat.pc*.5 local s=P.cstat.pc*.5
@@ -535,28 +506,12 @@ Event={
end end
end end
end end
local r=rnd(#PClist)
local f=P.cstat.pc%2==0
for i=1,4 do
local b=PClist[r][i]
if f then
if b<3 then b=3-b
elseif b<5 then b=7-b
end
end
ins(P.nxt,b)
ins(P.nb,blocks[b][0])
end
else else
Event.gameover.lose() Event.gameover.lose()
end end
end end
end, end,
task={ task={
winTrigger=function()
Event.gameover.win()
return true
end,
win=function() win=function()
P.endCounter=P.endCounter+1 P.endCounter=P.endCounter+1
if P.endCounter>80 then if P.endCounter>80 then
@@ -633,7 +588,7 @@ Event={
local P=players[1] local P=players[1]
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
ins(P.atkBuffer,{rnd(10),amount=1,countdown=0,cd0=0,time=0,sent=false,lv=1}) ins(P.atkBuffer,{rnd(10),amount=1,countdown=30,cd0=30,time=0,sent=false,lv=1})
P.counter=0 P.counter=0
P.cstat.event=P.cstat.event+1 P.cstat.event=P.cstat.event+1
end end
@@ -642,15 +597,11 @@ Event={
local P=players[1] local P=players[1]
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
local d=P.cstat.event local d=P.cstat.event+1
if rnd()<.33 then if d%4==0 then ins (P.atkBuffer,{rnd(10),amount=1,countdown=60,cd0=60,time=0,sent=false,lv=1})
ins(P.atkBuffer,{rnd(10),amount=1,countdown=20,cd0=20,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 rnd()<.33 then elseif d%4==2 then ins(P.atkBuffer,{rnd(10),amount=3,countdown=80,cd0=80,time=0,sent=false,lv=2})
ins(P.atkBuffer,{rnd(10),amount=2,countdown=40,cd0=40,time=0,sent=false,lv=1}) elseif d%4==3 then ins(P.atkBuffer,{rnd(10),amount=4,countdown=90,cd0=90,time=0,sent=false,lv=3})
elseif rnd()<.5 then
ins(P.atkBuffer,{rnd(10),amount=3,countdown=60,cd0=60,time=0,sent=false,lv=2})
else
ins(P.atkBuffer,{rnd(10),amount=4,countdown=90,cd0=90,time=0,sent=false,lv=3})
end end
P.counter=0 P.counter=0
P.cstat.event=P.cstat.event+1 P.cstat.event=P.cstat.event+1
@@ -661,9 +612,9 @@ Event={
P.counter=P.counter+1 P.counter=P.counter+1
if P.counter==max(80,150-2*P.cstat.event)then if P.counter==max(80,150-2*P.cstat.event)then
if rnd()<.33 then if rnd()<.33 then
ins(P.atkBuffer,{rnd(10),amount=1,countdown=0,cd0=0,time=0,sent=false,lv=1}) ins(P.atkBuffer,{rnd(10),amount=1,countdown=20,cd0=20,time=0,sent=false,lv=1})
else else
ins(P.atkBuffer,{rnd(10),amount=3,countdown=0,cd0=0,time=0,sent=false,lv=1}) ins(P.atkBuffer,{rnd(10),amount=3,countdown=40,cd0=40,time=0,sent=false,lv=2})
end end
P.counter=0 P.counter=0
P.cstat.event=P.cstat.event+1 P.cstat.event=P.cstat.event+1

View File

@@ -99,7 +99,7 @@ FX={
setFont(t.font) setFont(t.font)
gc.translate(150,290+t.dy) gc.translate(150,290+t.dy)
if t.t<20 then if t.t<20 then
local k=.2*(5+(25-t.t)^.5)-.5 local k=.2*(5+(25-t.t)^.5)-.45
gc.scale(k,k) gc.scale(k,k)
end end
gc.setColor(1,1,1,a) gc.setColor(1,1,1,a)
@@ -156,31 +156,32 @@ function drawPixel(y,x,id,alpha)
gc.draw(blockSkin[id],30*x-30,600-30*y) gc.draw(blockSkin[id],30*x-30,600-30*y)
end end
function drawPixelmini(y,x,id) function drawPixelmini(y,x,id)
gc.draw(blockSkinmini[id],30*x-30,600-30*y,nil,5)
end end
function VirtualkeyPreview() function VirtualkeyPreview()
for i=1,#virtualkey do for i=1,#virtualkey do
gc.setColor(1,sel==i and .5 or 1,sel==i and .5 or 1,setting.virtualkeyAlpha*.2) gc.setColor(1,sel==i and .5 or 1,sel==i and .5 or 1,setting.virtualkeyAlpha*.2)
local b=virtualkey[i] local b=virtualkey[i]
gc.setLineWidth(b[4]*.08) 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)
if setting.virtualkeyIcon then gc.draw(virtualkeyIcon[i],b[1],b[2],nil,2*b[4]*.0125,nil,18,18)end if setting.virtualkeyIcon then gc.draw(virtualkeyIcon[i],b[1],b[2],nil,b[4]*.025,nil,18,18)end
end end
end end
function drawVirtualkey() 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=P.isKeyDown[i] local p,b=virtualkeyDown[i],virtualkey[i]
local b=virtualkey[i] if p then gc.setColor(.75,.75,.75,a)
if p then else gc.setColor(1,1,1,a)
gc.setColor(.75,.75,1,a) end
else gc.setLineWidth(b[4]*.07)
gc.setColor(1,1,1,a) gc.circle("line",b[1],b[2]+virtualkeyPressTime[i],b[4]-5)
if setting.virtualkeyIcon then gc.draw(virtualkeyIcon[i],b[1],b[2]+virtualkeyPressTime[i],nil,b[4]*.025,nil,18,18)end
if virtualkeyPressTime[i]>0 then
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
gc.setLineWidth(b[4]*.08)
gc.circle("line",b[1],p and b[2]+15 or b[2],b[4]-5)
if setting.virtualkeyIcon then gc.draw(virtualkeyIcon[i],b[1],p and b[2]+15 or b[2],nil,b[4]*.025,nil,18,18)end
end end
end end
@@ -261,7 +262,7 @@ end
function Pnt.main() function Pnt.main()
gc.setColor(1,1,1) gc.setColor(1,1,1)
setFont(30) setFont(30)
gc.print("Alpha V0.7.7",370,140) gc.print("Alpha V0.7.8",370,140)
gc.print(system,530,110) gc.print(system,530,110)
gc.draw(titleImage,30,30) gc.draw(titleImage,30,30)
end end
@@ -309,38 +310,38 @@ function Pnt.play()
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)--Scale
gc.setColor(0,0,0,.4)gc.rectangle("fill",0,0,300,600)--Black Background gc.setColor(0,0,0,.4)gc.rectangle("fill",0,0,60,120)--Black Background
gc.setLineWidth(13)
gc.stencil(stencil_field_small,"replace",1) gc.stencil(stencil_field_small,"replace",1)
gc.translate(0,P.fieldBeneath) gc.translate(0,P.fieldBeneath*.2)
gc.setStencilTest("equal",1) gc.setStencilTest("equal",1)
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)
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 P.falling<=0 or without(P.clearing,j)then
for i=1,10 do for i=1,10 do
if P.field[j][i]>0 then if P.field[j][i]>0 then
drawPixelmini(j,i,P.field[j][i]) gc.draw(blockSkinmini[P.field[j][i]],6*i-6,120-6*j)
end end
end end
end end
end end
gc.setStencilTest()--In-playField mask gc.setStencilTest()--In-playField mask
gc.translate(0,-P.fieldBeneath) gc.translate(0,-P.fieldBeneath*.2)
gc.setColor(frameColor[P.strength])gc.rectangle("line",-7,-7,314,614)--Draw boarder gc.setLineWidth(2)
gc.setColor(frameColor[P.strength])gc.rectangle("line",-1,-1,62,122)--Draw boarder
if modeEnv.royaleMode then if modeEnv.royaleMode then
gc.setColor(1,1,1) gc.setColor(1,1,1)
for i=1,P.strength do for i=1,P.strength do
gc.draw(badgeIcon,61*i-47,15,nil,3) gc.draw(badgeIcon,12*i-7,4,nil,.5)
end end
end end
if P.result then if P.result then
gc.setColor(1,1,1,min(P.endCounter,60)*.01) gc.setColor(1,1,1,min(P.endCounter,60)*.01)
setFont(100) setFont(22)mStr(P.result,32,47)
mStr(P.result,150,235) setFont(20)mStr(P.rank,30,82)
if P.killMark then if P.killMark then
gc.setLineWidth(20) gc.setLineWidth(4)
gc.setColor(1,0,0,min(P.endCounter,25)*.04) gc.setColor(1,0,0,min(P.endCounter,25)*.04)
gc.circle("line",150,300,420-10*min(P.endCounter,30)) gc.circle("line",31,60,84-2*min(P.endCounter,30))
end end
end end
gc.pop() gc.pop()
@@ -395,8 +396,8 @@ function Pnt.play()
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(5) gc.setLineWidth(3)
gc.setColor(1,1,1)gc.rectangle("line",-2,-12,304,614)--Draw boarder gc.setColor(1,1,1)gc.rectangle("line",-1,-11,302,612)--Draw boarder
local h=0 local h=0
for i=1,#P.atkBuffer do for i=1,#P.atkBuffer do
@@ -410,30 +411,30 @@ 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",307,600-h,12,-bar+5) gc.rectangle("fill",304,600-h,12,-bar+3)
gc.setColor(attackColor[a.lv][2]) gc.setColor(attackColor[a.lv][2])
gc.rectangle("fill",307,600-h+(-bar+5),12,-(-bar+5)*(1-a.countdown/a.cd0)) gc.rectangle("fill",304,600-h+(-bar+3),12,-(-bar+3)*(1-a.countdown/a.cd0))
--Timing --Timing
else else
attackColor.animate[a.lv]((sin((Timer()-i)*20)+1)*.5) attackColor.animate[a.lv]((sin((Timer()-i)*20)+1)*.5)
gc.rectangle("fill",307,600-h,12,-bar+5) gc.rectangle("fill",304,600-h,12,-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",307,600-h,12,-bar+3) gc.rectangle("fill",304,600-h,12,-bar+2)
--Disappear --Disappear
end end
h=h+bar h=h+bar
end--Buffer line end--Buffer line
gc.setColor(P.b2b<40 and color.white or P.b2b<=480 and color.lightRed or color.lightBlue) gc.setColor(P.b2b<40 and color.white or P.b2b<=480 and color.lightRed or color.lightBlue)
gc.rectangle("fill",-17,600,10,-P.b2b1) gc.rectangle("fill",-13,600,10,-P.b2b1)
gc.setColor(color.red) gc.setColor(color.red)
gc.rectangle("fill",-23,600-40,16,5) gc.rectangle("fill",-19,600-40,16,5)
gc.setColor(color.blue) gc.setColor(color.blue)
gc.rectangle("fill",-23,600-480,16,5) gc.rectangle("fill",-19,600-480,16,5)
--B2B bar --B2B bar
setFont(40) setFont(40)

View File

@@ -64,6 +64,11 @@ function Tmr.play(dt)
rem(FX.badge,i) rem(FX.badge,i)
end end
end end
for i=1,#virtualkey do
if virtualkeyPressTime[i]>0 then
virtualkeyPressTime[i]=virtualkeyPressTime[i]-1
end
end
for i=1,3 do for i=1,3 do
PTC.attack[i]:update(dt) PTC.attack[i]:update(dt)
end end
@@ -83,7 +88,7 @@ function Tmr.play(dt)
P.moving=0 P.moving=0
end end
end end
return nil return
end--Counting,include pre-das end--Counting,include pre-das
for p=1,#players do for p=1,#players do
P=players[p] P=players[p]
@@ -159,8 +164,9 @@ function Tmr.play(dt)
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 end
while P.clearing[1]do ::L::if P.clearing[1]then
rem(P.clearing) rem(P.clearing)
goto L
end end
end end
elseif P.waiting>0 then elseif P.waiting>0 then
@@ -245,7 +251,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 if modeEnv.royaleMode and frame%60==0 then freshMostDangerous()end
freshMostDangerous()
end
end end

View File

@@ -1,22 +1,22 @@
function string.splitS(s,sep) function string.splitS(s,sep)
local t={} local t={}
repeat ::L::
local i=find(s,sep)or #s+1 local i=find(s,sep)or #s+1
ins(t,sub(s,1,i-1)) ins(t,sub(s,1,i-1))
s=sub(s,i+#sep) s=sub(s,i+#sep)
until #s==0 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 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 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 nil end if t[i]==v then return end
end end
return true return true
end end
function mStr(s,x,y) function mStr(s,x,y)
gc.printf(s,x-250,y,500,"center") gc.printf(s,x-300,y,600,"center")
end end
function getNewRow(val) function getNewRow(val)
@@ -66,7 +66,7 @@ function stencil_field()
gc.rectangle("fill",150,60,300,610) gc.rectangle("fill",150,60,300,610)
end end
function stencil_field_small() function stencil_field_small()
gc.rectangle("fill",0,0,300,600) gc.rectangle("fill",0,0,60,120)
end end
--Single-usage funcs --Single-usage funcs
@@ -78,14 +78,15 @@ end
function sysSFX(s,v) function sysSFX(s,v)
if setting.sfx then if setting.sfx then
local n=1 local n=1
while sfx[s][n]:isPlaying()do ::L::if sfx[s][n]:isPlaying()then
n=n+1 n=n+1
if not sfx[s][n]then if not sfx[s][n]then
sfx[s][n]=sfx[s][n-1]:clone() sfx[s][n]=sfx[s][n-1]:clone()
sfx[s][n]:seek(0) sfx[s][n]:seek(0)
break goto quit
end end
end goto L
end::quit::
sfx[s][n]:setVolume(v or 1) sfx[s][n]:setVolume(v or 1)
sfx[s][n]:play() sfx[s][n]:play()
end end
@@ -93,14 +94,15 @@ end
function SFX(s,v) function SFX(s,v)
if setting.sfx and not P.ai then if setting.sfx and not P.ai then
local n=1 local n=1
while sfx[s][n]:isPlaying()do ::L::if sfx[s][n]:isPlaying()then
n=n+1 n=n+1
if not sfx[s][n]then if not sfx[s][n]then
sfx[s][n]=sfx[s][n-1]:clone() sfx[s][n]=sfx[s][n-1]:clone()
sfx[s][n]:seek(0) sfx[s][n]:seek(0)
break goto quit
end end
end goto L
end::quit::
sfx[s][n]:setVolume(v or 1) sfx[s][n]:setVolume(v or 1)
sfx[s][n]:play() sfx[s][n]:play()
end end