Files
Techmino/parts/modes/custom_puzzle.lua
Fuwuwuwu 1963dc9fb9 Fix the issue of AI passing Hold parameters in custom mode (#1163)
* 自定义游戏传递hold开关的问题

表现:即使holdCount为0,CC依旧会开启hold,导致无法预期运行,场地逐渐混乱
原因:传递了错误的类型(boolean->number)

* 非正常hold模式时,AI不启用hold

相关问题#1106
2024-10-29 08:24:10 +08:00

81 lines
2.7 KiB
Lua

local gc_setColor,gc_draw=love.graphics.setColor,love.graphics.draw
local ply_applyField=PLY.draw.applyField
require'parts.scenes.customGame'.initialize()
return {
env={
fkey1=function(P) P.modeData.showMark=1-P.modeData.showMark end,
hook_drop=function(P)
local D=P.modeData
local F=FIELD[D.finished+1]
for y=1,#F do
local L=P.field[y]
for x=1,10 do
local a,b=F[y][x],L and L[x] or 0
if a~=0 then
if a==-1 then if b>0 then return end
elseif a<12 then if a~=b then return end
elseif a>7 then if b==0 then return end
end
end
end
end
D.finished=D.finished+1
if FIELD[D.finished+1] then
P.waiting=26
for _=#P.field,1,-1 do
P.field[_],P.visTime[_]=nil
end
SYSFX.newShade(1.4,P.absFieldX,P.absFieldY,300*P.size,610*P.size,.3,1,.3)
SFX.play('reach')
D.showMark=0
else
D.showMark=1
P:win('finish')
end
end,
mesDisp=function(P)
ply_applyField(P)
if P.modeData.showMark==0 then
local mark=TEXTURE.puzzleMark
local F=FIELD[P.modeData.finished+1]
gc_setColor(1,1,1)
for y=1,#F do for x=1,10 do
local T=F[y][x]
if T~=0 then
gc_draw(mark[T],30*x-30,600-30*y)
end
end end
end
PLY.draw.cancelField()
end,
},
load=function()
applyCustomGame()
local AItype=GAME.modeEnv.opponent:sub(1,2)
local AIlevel=tonumber(GAME.modeEnv.opponent:sub(-1))
PLY.newPlayer(1)
local useHold=GAME.modeEnv.holdCount>0 and GAME.modeEnv.holdMode=='hold'
if AItype=='9S' then
PLY.newAIPlayer(2,BOT.template{type='9S',speedLV=2*AIlevel,hold=useHold})
elseif AItype=='CC' then
PLY.newAIPlayer(2,BOT.template{type='CC',speedLV=2*AIlevel-1,next=math.floor(AIlevel*.5+1),hold=useHold,node=20000+5000*AIlevel})
end
end,
savePrivate=function()
return {
FIELD=FIELD,
BAG=BAG,
MISSION=MISSION,
CUSTOMENV=CUSTOMENV,
}
end,
loadPrivate=function(private)
FIELD=private.FIELD
BAG=private.BAG
MISSION=private.MISSION
CUSTOMENV=private.CUSTOMENV
end,
}