cc techmino-alize 2
- builtin b2b gauge, attack and extra block systen - builtin spawn position integration
This commit is contained in:
@@ -7,18 +7,36 @@ local pcall=pcall
|
|||||||
local ins,rem=table.insert,table.remove
|
local ins,rem=table.insert,table.remove
|
||||||
local yield=coroutine.yield
|
local yield=coroutine.yield
|
||||||
local bot_cc={}
|
local bot_cc={}
|
||||||
function bot_cc:checkDest()
|
function bot_cc:checkDest(b2b,atk,exblock,yomi)
|
||||||
local dest=self.P.destFX
|
local dest=self.P.destFX
|
||||||
if not dest then return end
|
if not dest then return end
|
||||||
|
if not (dest.b2b==b2b and dest.attack==atk and dest.extra==exblock) then
|
||||||
|
print('hope: '..dest.b2b..' '..dest.attack..' '..dest.extra)
|
||||||
|
print('real: '..b2b..' '..atk..' '..exblock)
|
||||||
|
print(yomi)
|
||||||
|
self:lockWrongPlace()
|
||||||
|
self.P.destFX=nil
|
||||||
|
return
|
||||||
|
end
|
||||||
local CB=self.P.cur.bk
|
local CB=self.P.cur.bk
|
||||||
for k=1,#dest,2 do
|
for k=1,#dest,2 do
|
||||||
local r=CB[dest[k+1]-self.P.curY+2]
|
local r=CB[dest[k+1]-self.P.curY+2]
|
||||||
if not r or not r[dest[k]-self.P.curX+2]then
|
if not r or not r[dest[k]-self.P.curX+2]then
|
||||||
|
print('wrong place')
|
||||||
self:lockWrongPlace()
|
self:lockWrongPlace()
|
||||||
self.P.destFX=nil
|
self.P.destFX=nil
|
||||||
return
|
return
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
local should_spawn = self.P:getNextSpawn() - 1
|
||||||
|
if dest.spawn ~= should_spawn then
|
||||||
|
assert(dest.spawn > should_spawn)
|
||||||
|
print('wrong spawn: should be '..dest.spawn..' but '..should_spawn)
|
||||||
|
print('-- should only happen when camera is going down')
|
||||||
|
self:lockWrongPlace()
|
||||||
|
self.P.destFX=nil
|
||||||
|
return
|
||||||
|
end
|
||||||
end
|
end
|
||||||
function bot_cc:revive()
|
function bot_cc:revive()
|
||||||
TABLE.cut(self.P.holdQueue)
|
TABLE.cut(self.P.holdQueue)
|
||||||
@@ -37,10 +55,10 @@ function bot_cc:thread()
|
|||||||
ccBot:think()
|
ccBot:think()
|
||||||
|
|
||||||
--Poll keys
|
--Poll keys
|
||||||
local success,result,dest,hold,move
|
local success,result,dest,hold,move,b2b,attack,extra,spawn
|
||||||
repeat
|
repeat
|
||||||
yield()
|
yield()
|
||||||
success,result,dest,hold,move=pcall(ccBot.getMove,ccBot)
|
success,result,dest,hold,move,b2b,attack,extra,spawn=pcall(ccBot.getMove,ccBot)
|
||||||
until not success or result==0 or result==2
|
until not success or result==0 or result==2
|
||||||
if not success then break end
|
if not success then break end
|
||||||
if result==2 then
|
if result==2 then
|
||||||
@@ -50,6 +68,10 @@ function bot_cc:thread()
|
|||||||
dest[7],dest[8]=dest[2][1],dest[2][2]
|
dest[7],dest[8]=dest[2][1],dest[2][2]
|
||||||
dest[1],dest[2]=dest[3][1],dest[3][2]
|
dest[1],dest[2]=dest[3][1],dest[3][2]
|
||||||
dest[3],dest[4]=dest[4][1],dest[4][2]
|
dest[3],dest[4]=dest[4][1],dest[4][2]
|
||||||
|
dest.b2b = b2b
|
||||||
|
dest.attack = attack
|
||||||
|
dest.extra = extra
|
||||||
|
dest.spawn = spawn
|
||||||
P.destFX=dest
|
P.destFX=dest
|
||||||
if hold then--Hold
|
if hold then--Hold
|
||||||
keys[1]=8
|
keys[1]=8
|
||||||
@@ -82,8 +104,16 @@ function bot_cc:updateField()
|
|||||||
F[i],i=F0[y][x]>0,i+1
|
F[i],i=F0[y][x]>0,i+1
|
||||||
end end
|
end end
|
||||||
while i<=400 do F[i],i=false,i+1 end
|
while i<=400 do F[i],i=false,i+1 end
|
||||||
if not pcall(self.ccBot.reset,self.ccBot,F,P.b2b>=100,P.combo)then
|
local y = P:getNextSpawn()-1
|
||||||
|
if not pcall(self.ccBot.reset,self.ccBot,F,P.b2b,P.combo,P.stat.pc,P.stat.row,y)then
|
||||||
print("CC is dead ("..P.id..")","error")
|
print("CC is dead ("..P.id..")","error")
|
||||||
|
for y=#F0,1,-1 do
|
||||||
|
local s=""
|
||||||
|
for x=1,10 do
|
||||||
|
s=s..(F[(y-1)*10+x] and "[]" or "..")
|
||||||
|
end
|
||||||
|
print(s)
|
||||||
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
function bot_cc:switch20G()
|
function bot_cc:switch20G()
|
||||||
|
|||||||
@@ -681,7 +681,7 @@ function Player:getHolePos()--Get a good garbage-line hole position
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
function Player:garbageRelease()--Check garbage buffer and try to release them
|
function Player:garbageRelease()--Check garbage buffer and try to release them
|
||||||
local n,flag=1
|
local n=1
|
||||||
while true do
|
while true do
|
||||||
local A=self.atkBuffer[n]
|
local A=self.atkBuffer[n]
|
||||||
if A and A.countdown<=0 and not A.sent then
|
if A and A.countdown<=0 and not A.sent then
|
||||||
@@ -690,14 +690,10 @@ function Player:garbageRelease()--Check garbage buffer and try to release them
|
|||||||
A.sent,A.time=true,0
|
A.sent,A.time=true,0
|
||||||
self.stat.pend=self.stat.pend+A.amount
|
self.stat.pend=self.stat.pend+A.amount
|
||||||
n=n+1
|
n=n+1
|
||||||
flag=true
|
|
||||||
else
|
else
|
||||||
break
|
break
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
if flag and self.bot then
|
|
||||||
self.bot:updateField()
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
function Player:garbageRise(color,amount,line)--Release n-lines garbage to field
|
function Player:garbageRise(color,amount,line)--Release n-lines garbage to field
|
||||||
local _
|
local _
|
||||||
@@ -1160,6 +1156,11 @@ function Player:resetBlock()--Reset Block's position and execute I*S
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
function Player:getNextSpawn()
|
||||||
|
local cur = self.nextQueue[1]
|
||||||
|
return int(self.gameEnv.fieldH+1-modf(cur.RS.centerPos[cur.id][cur.dir][1]))+ceil(self.fieldBeneath/30)
|
||||||
|
end
|
||||||
|
|
||||||
function Player:spin(d,ifpre)
|
function Player:spin(d,ifpre)
|
||||||
local C=self.cur
|
local C=self.cur
|
||||||
local sc=C.RS.centerPos[C.id][C.dir]
|
local sc=C.RS.centerPos[C.id][C.dir]
|
||||||
@@ -1721,6 +1722,8 @@ do
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
local yomi = ""
|
||||||
|
|
||||||
piece.spin,piece.mini=dospin,false
|
piece.spin,piece.mini=dospin,false
|
||||||
piece.pc,piece.hpc=false,false
|
piece.pc,piece.hpc=false,false
|
||||||
piece.special=false
|
piece.special=false
|
||||||
@@ -1730,6 +1733,7 @@ do
|
|||||||
cscore=(spinSCR[C.name]or spinSCR[8])[cc]
|
cscore=(spinSCR[C.name]or spinSCR[8])[cc]
|
||||||
if self.b2b>800 then
|
if self.b2b>800 then
|
||||||
self:showText(text.b3b..text.block[C.name]..text.spin.." "..text.clear[cc],0,-30,35,'stretch')
|
self:showText(text.b3b..text.block[C.name]..text.spin.." "..text.clear[cc],0,-30,35,'stretch')
|
||||||
|
yomi = yomi..text.b3b..text.block[C.name]..text.spin.." "..text.clear[cc]
|
||||||
atk=b2bATK[cc]+cc*.5
|
atk=b2bATK[cc]+cc*.5
|
||||||
exblock=exblock+1
|
exblock=exblock+1
|
||||||
cscore=cscore*2
|
cscore=cscore*2
|
||||||
@@ -1739,6 +1743,7 @@ do
|
|||||||
end
|
end
|
||||||
elseif self.b2b>=50 then
|
elseif self.b2b>=50 then
|
||||||
self:showText(text.b2b..text.block[C.name]..text.spin.." "..text.clear[cc],0,-30,35,'spin')
|
self:showText(text.b2b..text.block[C.name]..text.spin.." "..text.clear[cc],0,-30,35,'spin')
|
||||||
|
yomi = yomi..text.b2b..text.block[C.name]..text.spin.." "..text.clear[cc]
|
||||||
atk=b2bATK[cc]
|
atk=b2bATK[cc]
|
||||||
cscore=cscore*1.2
|
cscore=cscore*1.2
|
||||||
Stat.b2b=Stat.b2b+1
|
Stat.b2b=Stat.b2b+1
|
||||||
@@ -1747,11 +1752,13 @@ do
|
|||||||
end
|
end
|
||||||
else
|
else
|
||||||
self:showText(text.block[C.name]..text.spin.." "..text.clear[cc],0,-30,45,'spin')
|
self:showText(text.block[C.name]..text.spin.." "..text.clear[cc],0,-30,45,'spin')
|
||||||
|
yomi = yomi..text.block[C.name]..text.spin.." "..text.clear[cc]
|
||||||
atk=2*cc
|
atk=2*cc
|
||||||
end
|
end
|
||||||
sendTime=20+atk*20
|
sendTime=20+atk*20
|
||||||
if mini then
|
if mini then
|
||||||
self:showText(text.mini,0,-80,35,'appear')
|
self:showText(text.mini,0,-80,35,'appear')
|
||||||
|
yomi = text.mini..' '..yomi
|
||||||
atk=atk*.25
|
atk=atk*.25
|
||||||
sendTime=sendTime+60
|
sendTime=sendTime+60
|
||||||
cscore=cscore*.5
|
cscore=cscore*.5
|
||||||
@@ -1772,6 +1779,7 @@ do
|
|||||||
cscore=clearSCR[cc]
|
cscore=clearSCR[cc]
|
||||||
if self.b2b>800 then
|
if self.b2b>800 then
|
||||||
self:showText(text.b3b..text.clear[cc],0,-30,50,'fly')
|
self:showText(text.b3b..text.clear[cc],0,-30,50,'fly')
|
||||||
|
yomi = text.b3b..text.clear[cc]..yomi
|
||||||
atk=4*cc-10
|
atk=4*cc-10
|
||||||
sendTime=100
|
sendTime=100
|
||||||
exblock=exblock+1
|
exblock=exblock+1
|
||||||
@@ -1782,6 +1790,7 @@ do
|
|||||||
end
|
end
|
||||||
elseif self.b2b>=50 then
|
elseif self.b2b>=50 then
|
||||||
self:showText(text.b2b..text.clear[cc],0,-30,50,'drive')
|
self:showText(text.b2b..text.clear[cc],0,-30,50,'drive')
|
||||||
|
yomi = text.b2b..text.clear[cc]..yomi
|
||||||
sendTime=80
|
sendTime=80
|
||||||
atk=3*cc-7
|
atk=3*cc-7
|
||||||
cscore=cscore*1.3
|
cscore=cscore*1.3
|
||||||
@@ -1791,6 +1800,7 @@ do
|
|||||||
end
|
end
|
||||||
else
|
else
|
||||||
self:showText(text.clear[cc],0,-30,70,'stretch')
|
self:showText(text.clear[cc],0,-30,70,'stretch')
|
||||||
|
yomi = text.clear[cc]..yomi
|
||||||
sendTime=60
|
sendTime=60
|
||||||
atk=2*cc-4
|
atk=2*cc-4
|
||||||
end
|
end
|
||||||
@@ -1798,6 +1808,7 @@ do
|
|||||||
piece.special=true
|
piece.special=true
|
||||||
else
|
else
|
||||||
self:showText(text.clear[cc],0,-30,35,'appear',(8-cc)*.3)
|
self:showText(text.clear[cc],0,-30,35,'appear',(8-cc)*.3)
|
||||||
|
yomi = text.clear[cc]..yomi
|
||||||
atk=cc-.5
|
atk=cc-.5
|
||||||
sendTime=20+int(atk*20)
|
sendTime=20+int(atk*20)
|
||||||
cscore=cscore+clearSCR[cc]
|
cscore=cscore+clearSCR[cc]
|
||||||
@@ -1816,6 +1827,7 @@ do
|
|||||||
atk=atk+1
|
atk=atk+1
|
||||||
end
|
end
|
||||||
self:showText(text.cmb[min(cmb,21)],0,25,15+min(cmb,15)*5,cmb<10 and'appear'or'flicker')
|
self:showText(text.cmb[min(cmb,21)],0,25,15+min(cmb,15)*5,cmb<10 and'appear'or'flicker')
|
||||||
|
yomi = yomi..' '..text.cmb[min(cmb,21)]
|
||||||
cscore=cscore+min(50*cmb,500)*(2*cc-1)
|
cscore=cscore+min(50*cmb,500)*(2*cc-1)
|
||||||
end
|
end
|
||||||
|
|
||||||
@@ -2007,7 +2019,7 @@ do
|
|||||||
|
|
||||||
--Check bot things
|
--Check bot things
|
||||||
if self.bot then
|
if self.bot then
|
||||||
self.bot:checkDest()
|
self.bot:checkDest(self.b2b,atk,exblock,yomi)
|
||||||
self.bot:updateB2B(self.b2b)
|
self.bot:updateB2B(self.b2b)
|
||||||
self.bot:updateCombo(self.combo)
|
self.bot:updateCombo(self.combo)
|
||||||
end
|
end
|
||||||
|
|||||||
Reference in New Issue
Block a user