整理代码
This commit is contained in:
@@ -10,7 +10,7 @@ local function task_PC(P)
|
|||||||
P.modeData.counter=P.modeData.counter+1
|
P.modeData.counter=P.modeData.counter+1
|
||||||
if P.modeData.counter==26 then
|
if P.modeData.counter==26 then
|
||||||
local base=PCbase[P.modeData.type]
|
local base=PCbase[P.modeData.type]
|
||||||
P:pushLine(base[P:RND(#base)],P.modeData.symmetry)
|
P:pushLineList(base[P:RND(#base)],P.modeData.symmetry)
|
||||||
return true
|
return true
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
@@ -28,7 +28,7 @@ local function newPC(P)
|
|||||||
local symmetry=P:RND()>.5
|
local symmetry=P:RND()>.5
|
||||||
P.modeData.type=type
|
P.modeData.type=type
|
||||||
P.modeData.symmetry=symmetry
|
P.modeData.symmetry=symmetry
|
||||||
P:pushNext(L,symmetry)
|
P:pushNextList(L,symmetry)
|
||||||
P.modeData.counter=P.stat.piece==0 and 20 or 0
|
P.modeData.counter=P.stat.piece==0 and 20 or 0
|
||||||
P:newTask(task_PC)
|
P:newTask(task_PC)
|
||||||
|
|
||||||
|
|||||||
@@ -16,7 +16,7 @@ local function task_PC(P)
|
|||||||
P.modeData.counter=P.modeData.counter+1
|
P.modeData.counter=P.modeData.counter+1
|
||||||
if P.modeData.counter==26 then
|
if P.modeData.counter==26 then
|
||||||
local base=PCbase[P.modeData.type]
|
local base=PCbase[P.modeData.type]
|
||||||
P:pushLine(base[P:RND(#base)],P.modeData.symmetry)
|
P:pushLineList(base[P:RND(#base)],P.modeData.symmetry)
|
||||||
return true
|
return true
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
@@ -34,7 +34,7 @@ local function newPC(P)
|
|||||||
local symmetry=P:RND()>.5
|
local symmetry=P:RND()>.5
|
||||||
P.modeData.type=type
|
P.modeData.type=type
|
||||||
P.modeData.symmetry=symmetry
|
P.modeData.symmetry=symmetry
|
||||||
P:pushNext(L,symmetry)
|
P:pushNextList(L,symmetry)
|
||||||
P.modeData.counter=P.stat.piece==0 and 20 or 0
|
P.modeData.counter=P.stat.piece==0 and 20 or 0
|
||||||
P:newTask(task_PC)
|
P:newTask(task_PC)
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -106,14 +106,21 @@ function Player.RND(P,a,b)
|
|||||||
local R=P.randGen
|
local R=P.randGen
|
||||||
return R:random(a,b)
|
return R:random(a,b)
|
||||||
end
|
end
|
||||||
|
function Player.newTask(P,code,data)
|
||||||
|
local L=P.tasks
|
||||||
|
ins(L,{
|
||||||
|
code=code,
|
||||||
|
data=data,
|
||||||
|
})
|
||||||
|
end
|
||||||
|
|
||||||
function Player.set20G(P,if20g,init)
|
function Player.set20G(P,if20g,init)--Only set init=true when initialize CC, do not use it
|
||||||
P._20G=if20g
|
P._20G=if20g
|
||||||
P.keyAvailable[7]=not if20g
|
P.keyAvailable[7]=not if20g
|
||||||
virtualkey[7].ava=not if20g
|
virtualkey[7].ava=not if20g
|
||||||
if init and if20g and P.AI_mode=="CC"then CC.switch20G(P)end
|
if init and if20g and P.AI_mode=="CC"then CC.switch20G(P)end
|
||||||
end
|
end
|
||||||
function Player.setHold(P,count)
|
function Player.setHold(P,count)--Set hold count (false/true as 0/1)
|
||||||
if not count then
|
if not count then
|
||||||
count=0
|
count=0
|
||||||
elseif count==true then
|
elseif count==true then
|
||||||
@@ -132,7 +139,7 @@ function Player.setHold(P,count)
|
|||||||
P.drawHold=PLY.draw.drawHold_multi
|
P.drawHold=PLY.draw.drawHold_multi
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
function Player.setNext(P,next,hidden)
|
function Player.setNext(P,next,hidden)--Set next count (use hidden=true if set env.nextStartPos>1)
|
||||||
P.gameEnv.nextCount=next
|
P.gameEnv.nextCount=next
|
||||||
if next==0 then
|
if next==0 then
|
||||||
P.drawNext=NULL
|
P.drawNext=NULL
|
||||||
@@ -142,7 +149,7 @@ function Player.setNext(P,next,hidden)
|
|||||||
P.drawNext=PLY.draw.drawNext_hidden
|
P.drawNext=PLY.draw.drawNext_hidden
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
function Player.setInvisible(P,time)
|
function Player.setInvisible(P,time)--Time in frames
|
||||||
if time<0 then
|
if time<0 then
|
||||||
P.keepVisible=true
|
P.keepVisible=true
|
||||||
P.showTime=1e99
|
P.showTime=1e99
|
||||||
@@ -155,12 +162,90 @@ function Player.setRS(P,RSname)
|
|||||||
P.RS=kickList[RSname]
|
P.RS=kickList[RSname]
|
||||||
end
|
end
|
||||||
|
|
||||||
function Player.newTask(P,code,data)
|
function Player.getHolePos(P)--Get a good garbage-line hole position
|
||||||
local L=P.tasks
|
if P.garbageBeneath==0 then
|
||||||
ins(L,{
|
return P:RND(10)
|
||||||
code=code,
|
else
|
||||||
data=data,
|
local p=P:RND(10)
|
||||||
})
|
if P.field[1][p]<=0 then
|
||||||
|
return P:RND(10)
|
||||||
|
end
|
||||||
|
return p
|
||||||
|
end
|
||||||
|
end
|
||||||
|
function Player.garbageRelease(P)--Check garbage buffer and try to release them
|
||||||
|
local n,flag=1
|
||||||
|
while true do
|
||||||
|
local A=P.atkBuffer[n]
|
||||||
|
if A and A.countdown<=0 and not A.sent then
|
||||||
|
P:garbageRise(19+A.lv,A.amount,A.pos)
|
||||||
|
P.atkBuffer.sum=P.atkBuffer.sum-A.amount
|
||||||
|
A.sent,A.time=true,0
|
||||||
|
P.stat.pend=P.stat.pend+A.amount
|
||||||
|
n=n+1
|
||||||
|
flag=true
|
||||||
|
else
|
||||||
|
break
|
||||||
|
end
|
||||||
|
end
|
||||||
|
if flag and P.AI_mode=="CC"then CC.updateField(P)end
|
||||||
|
end
|
||||||
|
function Player.garbageRise(P,color,amount,pos)--Release n-lines garbage to field
|
||||||
|
local _
|
||||||
|
local t=P.showTime*2
|
||||||
|
for _=1,amount do
|
||||||
|
ins(P.field,1,FREEROW.get(color,true))
|
||||||
|
ins(P.visTime,1,FREEROW.get(t))
|
||||||
|
P.field[1][pos]=0
|
||||||
|
end
|
||||||
|
P.fieldBeneath=P.fieldBeneath+amount*30
|
||||||
|
if P.cur then
|
||||||
|
P.curY=P.curY+amount
|
||||||
|
P.imgY=P.imgY+amount
|
||||||
|
end
|
||||||
|
P.garbageBeneath=P.garbageBeneath+amount
|
||||||
|
for i=1,#P.clearingRow do
|
||||||
|
P.clearingRow[i]=P.clearingRow[i]+amount
|
||||||
|
end
|
||||||
|
P:freshBlock(false,false)
|
||||||
|
for i=1,#P.lockFX do
|
||||||
|
_=P.lockFX[i]
|
||||||
|
_[2]=_[2]-30*amount--Shift 30px per line cleared
|
||||||
|
end
|
||||||
|
for i=1,#P.dropFX do
|
||||||
|
_=P.dropFX[i]
|
||||||
|
_[3],_[5]=_[3]+amount,_[5]+amount
|
||||||
|
end
|
||||||
|
if #P.field>42 then P:lose()end
|
||||||
|
end
|
||||||
|
|
||||||
|
local invList={2,1,4,3,5,6,7}
|
||||||
|
function Player.pushLineList(P,L,mir)--Push some lines to field
|
||||||
|
local l=#L
|
||||||
|
local S=P.gameEnv.skin
|
||||||
|
for i=1,l do
|
||||||
|
local r=FREEROW.get(0)
|
||||||
|
if not mir then
|
||||||
|
for j=1,10 do
|
||||||
|
r[j]=S[L[i][j]]or 0
|
||||||
|
end
|
||||||
|
else
|
||||||
|
for j=1,10 do
|
||||||
|
r[j]=S[invList[L[i][11-j]]]or 0
|
||||||
|
end
|
||||||
|
end
|
||||||
|
ins(P.field,1,r)
|
||||||
|
ins(P.visTime,1,FREEROW.get(20))
|
||||||
|
end
|
||||||
|
P.fieldBeneath=P.fieldBeneath+30*l
|
||||||
|
P.curY=P.curY+l
|
||||||
|
P.imgY=P.imgY+l
|
||||||
|
P:freshBlock(false,false)
|
||||||
|
end
|
||||||
|
function Player.pushNextList(P,L,mir)--Push some nexts to nextQueue
|
||||||
|
for i=1,#L do
|
||||||
|
P:getNext(mir and invList[L[i]]or L[i])
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
function Player.solid(P,x,y)
|
function Player.solid(P,x,y)
|
||||||
@@ -210,93 +295,6 @@ function Player.attack(P,R,send,time,...)
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
function Player.getHolePos(P)
|
|
||||||
if P.garbageBeneath==0 then
|
|
||||||
return P:RND(10)
|
|
||||||
else
|
|
||||||
local p=P:RND(10)
|
|
||||||
if P.field[1][p]<=0 then
|
|
||||||
return P:RND(10)
|
|
||||||
end
|
|
||||||
return p
|
|
||||||
end
|
|
||||||
end
|
|
||||||
function Player.garbageRelease(P)
|
|
||||||
local n,flag=1
|
|
||||||
while true do
|
|
||||||
local A=P.atkBuffer[n]
|
|
||||||
if A and A.countdown<=0 and not A.sent then
|
|
||||||
P:garbageRise(19+A.lv,A.amount,A.pos)
|
|
||||||
P.atkBuffer.sum=P.atkBuffer.sum-A.amount
|
|
||||||
A.sent,A.time=true,0
|
|
||||||
P.stat.pend=P.stat.pend+A.amount
|
|
||||||
n=n+1
|
|
||||||
flag=true
|
|
||||||
else
|
|
||||||
break
|
|
||||||
end
|
|
||||||
end
|
|
||||||
if flag and P.AI_mode=="CC"then CC.updateField(P)end
|
|
||||||
end
|
|
||||||
function Player.garbageRise(P,color,amount,pos)
|
|
||||||
local _
|
|
||||||
local t=P.showTime*2
|
|
||||||
for _=1,amount do
|
|
||||||
ins(P.field,1,FREEROW.get(color,true))
|
|
||||||
ins(P.visTime,1,FREEROW.get(t))
|
|
||||||
P.field[1][pos]=0
|
|
||||||
end
|
|
||||||
P.fieldBeneath=P.fieldBeneath+amount*30
|
|
||||||
if P.cur then
|
|
||||||
P.curY=P.curY+amount
|
|
||||||
P.imgY=P.imgY+amount
|
|
||||||
end
|
|
||||||
P.garbageBeneath=P.garbageBeneath+amount
|
|
||||||
for i=1,#P.clearingRow do
|
|
||||||
P.clearingRow[i]=P.clearingRow[i]+amount
|
|
||||||
end
|
|
||||||
P:freshBlock(false,false)
|
|
||||||
for i=1,#P.lockFX do
|
|
||||||
_=P.lockFX[i]
|
|
||||||
_[2]=_[2]-30*amount--Shift 30px per line cleared
|
|
||||||
end
|
|
||||||
for i=1,#P.dropFX do
|
|
||||||
_=P.dropFX[i]
|
|
||||||
_[3],_[5]=_[3]+amount,_[5]+amount
|
|
||||||
end
|
|
||||||
if #P.field>42 then P:lose()end
|
|
||||||
end
|
|
||||||
|
|
||||||
local invList={2,1,4,3,5,6,7}
|
|
||||||
function Player.pushLine(P,L,mir)
|
|
||||||
local l=#L
|
|
||||||
local S=P.gameEnv.skin
|
|
||||||
for i=1,l do
|
|
||||||
local r=FREEROW.get(0)
|
|
||||||
if not mir then
|
|
||||||
for j=1,10 do
|
|
||||||
r[j]=S[L[i][j]]or 0
|
|
||||||
end
|
|
||||||
else
|
|
||||||
for j=1,10 do
|
|
||||||
r[j]=S[invList[L[i][11-j]]]or 0
|
|
||||||
end
|
|
||||||
end
|
|
||||||
ins(P.field,1,r)
|
|
||||||
ins(P.visTime,1,FREEROW.get(20))
|
|
||||||
end
|
|
||||||
P.fieldBeneath=P.fieldBeneath+30*l
|
|
||||||
P.curY=P.curY+l
|
|
||||||
P.imgY=P.imgY+l
|
|
||||||
P:freshBlock(false,false)
|
|
||||||
end
|
|
||||||
function Player.pushNext(P,L,mir)
|
|
||||||
for i=1,#L do
|
|
||||||
P:getNext(mir and invList[L[i]]or L[i])
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
function Player.freshTarget(P)
|
function Player.freshTarget(P)
|
||||||
if P.atkMode==1 then
|
if P.atkMode==1 then
|
||||||
if not P.atking or not P.atking.alive or rnd()<.1 then
|
if not P.atking or not P.atking.alive or rnd()<.1 then
|
||||||
@@ -590,11 +588,11 @@ function Player.hold(P,ifpre)
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
function Player.getNext(P,n)
|
function Player.getNext(P,n)--Push a block(id=n) to nextQueue
|
||||||
local E=P.gameEnv
|
local E=P.gameEnv
|
||||||
ins(P.nextQueue,{bk=BLOCKS[n][E.face[n]],id=n,color=E.bone and 17 or E.skin[n],name=n})
|
ins(P.nextQueue,{bk=BLOCKS[n][E.face[n]],id=n,color=E.bone and 17 or E.skin[n],name=n})
|
||||||
end
|
end
|
||||||
function Player.popNext(P)--Pop next queue to hand
|
function Player.popNext(P)--Pop nextQueue to hand
|
||||||
P.holdTime=P.gameEnv.holdCount
|
P.holdTime=P.gameEnv.holdCount
|
||||||
P.spinLast=false
|
P.spinLast=false
|
||||||
P.spinSeq=0
|
P.spinSeq=0
|
||||||
@@ -667,7 +665,7 @@ function Player.cancel(P,N)--Cancel Garbage
|
|||||||
end
|
end
|
||||||
return off
|
return off
|
||||||
end
|
end
|
||||||
do--player:drop()--Place piece
|
do--Player.drop(P)--Place piece
|
||||||
local clearSCR={80,200,400}--Techrash:1K; B2Bmul:1.3/1.8
|
local clearSCR={80,200,400}--Techrash:1K; B2Bmul:1.3/1.8
|
||||||
local spinSCR={
|
local spinSCR={
|
||||||
{200,750,1300,2000},--Z
|
{200,750,1300,2000},--Z
|
||||||
|
|||||||
Reference in New Issue
Block a user