Skip to content

Instantly share code, notes, and snippets.

@Tarmean
Last active March 3, 2018 14:53
Show Gist options
  • Select an option

  • Save Tarmean/d484da8a66ec445ae1e12ca030cf3949 to your computer and use it in GitHub Desktop.

Select an option

Save Tarmean/d484da8a66ec445ae1e12ca030cf3949 to your computer and use it in GitHub Desktop.
function SerializePawn(pawn)
-- Used in scripts
-- GetType(), GetId(), IsFrozen(), SetFrozen(bool), IsFire(), SetFire(bool),
-- SetPowered(bool), IsActive(), SetActive(bool), SetNeutral(bool),
-- SetCustomAnim(string), FlyAway(), Move(Point),
-- Retreat(), SetPriorityTarget(Point), GetTarget(), FireWeapon(Point (offset), 1),
-- SetMoveSpeed(int), GetMoveSpeed(), SetMech(), IsBusy(), IsUndoPossible()
-- IsWeaponArmed(), GetArmedWeaponId(), IsSelected(), SetHealth(int),
-- GetHealth() SetMissionCritical(bool), SetAcid(bool), IsAcid(),
-- SpawnAnimation(), GetSpace(), SetSpace(Point)
-- SetTeam(TEAM_PLAYER|TEAM_ENEMY|...), GetTeam(), Board:AddPawn(Pawn, Point),
-- Board:GetPawn(pawn_id), Board:RemovePawn(pawn_id),
-- Board:IsPawnAlive(pawn_id), Board:GetPawnSpace(pawn_id),
-- Board:IsPowered(Point)
-- Similar names in executable that seem to work:
-- IsShield, SetShield GetSelectedWeapon AddWeapon IsWeaponArmed IsDead
-- AddMoveBonus SetPowered IsGrappled IsGuarding Fall IsFlying IsRanged
-- SetMutation SetInvisible IsPlayer IsEnemy GetDamage GetMechName
local ret = {}
-- Debug stuff:
ret.Type = pawn:GetType()
ret.Id = pawn:GetId()
ret.IsUndoPossible = pawn:IsUndoPossible()
ret.IsBusy = pawn:IsBusy()
ret.IsJumper = pawn:IsJumper()
ret.IsTeleporter = pawn:IsTeleporter()
ret.Team = pawn:GetTeam()
ret.Space = pawn:GetSpace()
ret.Target = pawn:GetTarget()
ret.Health = pawn:GetHealth()
ret.IsFrozen = pawn:IsFrozen()
ret.IsFire = pawn:IsFire()
ret.IsAcid = pawn:IsAcid()
ret.IsActive = pawn:IsActive()
ret.MoveSpeed = pawn:GetMoveSpeed()
ret.IsWeaponArmed = pawn:IsWeaponArmed()
ret.ArmedWeaponId = pawn:GetArmedWeaponId()
ret.PathProf = pawn:GetPathProf()
ret.IsPawnAlive = Board:IsPawnAlive(ret.Id)
-- -- Only for rockets in satellite mission I think
ret.IsPowered = Board:IsPowered(ret.Space)
ret.IsShield = pawn:IsShield()
ret.IsWeaponArmed = pawn:IsWeaponArmed()
ret.IsDead = pawn:IsDead()
ret.IsGrappled = pawn:IsGrappled()
ret.IsGuarding = pawn:IsGuarding()
ret.IsFlying = pawn:IsFlying()
ret.IsRanged = pawn:IsRanged()
ret.IsPlayer = pawn:IsPlayer()
ret.IsEnemy = pawn:IsEnemy()
ret.SelectedWeapon = pawn:GetSelectedWeapon()
ret.MechName = pawn:GetMechName()
return ret
end
ModHelper = {}
ModHelper.ObjectiveCallbacks = {}
local oldBaseObjectives = Mission.BaseObjectives
function ModHelper:OnObjective(callback)
self.ObjectiveCallbacks[#self.ObjectiveCallbacks+1] = callback
end
function Mission:BaseObjectives()
oldBaseObjectives(self)
for _, v in ipairs(ModHelper.ObjectiveCallbacks) do
v()
end
end
function ShowSelectedPawn()
local pawn_ids = extract_table(Board:GetPawns(TEAM_NONE))
for _, pawn_id in ipairs(pawn_ids) do
local pawn = Board:GetPawn(pawn_id)
if pawn:IsSelected() then
local serialized = save_table(SerializePawn(pawn))
Game:AddObjective(serialized, OBJ_STANDARD)
end
end
end
ModHelper:OnObjective(ShowSelectedPawn)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment