Overriding move skill for pawns - AUTOMATIC1111/IntoTheBreachLua GitHub Wiki
This is a proposed addition to mod loader that lets mod developer override movement skill for pawns.
local originalGetTargetArea = Move.GetTargetArea
function Move:GetTargetArea(point)
local moveSkill = _G[Pawn:GetType()].MoveSkill
if moveSkill ~= nil and moveSkill.GetTargetArea ~= nil then
return moveSkill:GetTargetArea(point)
end
return originalGetTargetArea(self, point)
end
local originalGetSkillEffect = Move.GetSkillEffect
function Move:GetSkillEffect(p1, p2)
local moveSkill = _G[Pawn:GetType()].MoveSkill
if moveSkill ~= nil and moveSkill.GetSkillEffect ~= nil then
return moveSkill:GetSkillEffect(p1, p2)
end
return originalGetSkillEffect(self, p1, p2)
end
Mod developer can override the movement skill for his pawn by adding a MoveSkill field to his pawn class - an object with GetTargetArea and/or GetSkillEffect functions, which will be called for him by the mod loader instead of original implementations.
Example:
Chess_Knight_Move = {}
function Chess_Knight_Move:GetTargetArea(p1)
local ret = PointList()
for dir = DIR_START, DIR_END do
for d = 1, 3, 2 do
local point = p1 + DIR_VECTORS[dir] * 2 + DIR_VECTORS[(dir + d) % 4]
if Board:IsValid(point) and not Board:IsBlocked(point, PATH_FLYER) then
ret:push_back(point)
end
end
end
return ret
end
Chess_Knight = Pawn:new {
Name = "Knight Mech",
Class = "Brute",
Health = 4,
Image = "Chess_Knight",
ImageOffset = 3,
MoveSpeed = 3,
SkillList = { "..." },
MoveSkill = Chess_Knight_Move,
Massive = true
}
AddPawn("Chess_Knight")