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")