1
mission and battle
Bruno Carneiro edited this page 2026-02-13 18:25:50 -03:00

Mission and Battle

Mission scripts derive from AMission and run inside an ABattle. The battle provides GamePlay and Time; missions override virtual methods to react to game events and schedule delayed callbacks with Timeout / DoTimeout.


AMission

Kind: abstract class

Base class for all mission scripts. The game loads a class named Mission that inherits from AMission and calls its virtual methods when battle and game events occur.

Properties

Property Type Description
sPathMyself string Deprecated; path of the mission script. Will be removed.
PathMyself string Path of the mission script.
BaseMissionPath static string Path of the "zero" mission with trailing directory separator.
MissionFileName string Name of the mission file (e.g. for mission code).
ScriptFileName string Name of the script file.
GamePlay IGamePlay Shortcut for Battle.GamePlay. Main API for actors, HUD, triggers, etc.
Time ITime Shortcut for Battle.Time. Game and real time, ticks.
Battle ABattle The battle this mission belongs to.
MissionNumber int This mission's number (set in Init).
MissionNumberListener int Mission number this instance listens to; if < 0, listens to all. Set e.g. in OnBattleStarted.

Static / shared

Member Type Description
DataDictionary Dictionary<string, object> Shared key-value store for mission data.

Methods (virtual; override in your mission)

Lifecycle

Method Description
void Init(ABattle battle, int missionNumber) Called when the mission is attached. Sets Battle, MissionNumber, MissionNumberListener; then calls Inited().
void Inited() Override for one-time setup after Init.
double GetBattleLengthTicks() Default: 4 hours in ticks. Override to define battle length.
bool IsMissionListener(int missionNumber) Default: true if MissionNumberListener < 0, else true when missionNumber == MissionNumberListener.

Battle lifecycle

Method Description
void OnBattleInit() Battle is initializing.
void OnBattleStarted() Battle has started.
void OnBattleStoped() Battle has stopped.

Ticks

Method Description
void OnTickGame() Called each game tick.
void OnTickReal() Called each real-time tick.

Missions and players

Method Description
void OnMissionLoaded(int missionNumber) A mission was loaded.
void OnPlayerConnected(Player player) Player connected.
void OnPlayerDisconnected(Player player, string diagnostic) Player disconnected.
void OnPlayerArmy(Player player, int army) Player selected an army.

Actors (generic)

Method Description
void OnActorCreated(int missionNumber, string shortName, AiActor actor) Actor created.
void OnActorDestroyed(int missionNumber, string shortName, AiActor actor) Actor destroyed.
void OnActorDamaged(... AiActor actor, AiDamageInitiator initiator, NamedDamageTypes damageType) Actor received damage.
void OnActorDead(int missionNumber, string shortName, AiActor actor, List<DamagerScore> damages) Actor killed.
void OnActorTaskCompleted(int missionNumber, string shortName, AiActor actor) Actor task completed.

Triggers

Method Description
void OnTrigger(int missionNumber, string shortName, bool active) Trigger activated or deactivated.

Aircraft

Method Description
void OnAircraftDamaged(... AiAircraft aircraft, AiDamageInitiator initiator, NamedDamageTypes damageType) Aircraft damaged.
void OnAircraftLimbDamaged(... AiAircraft aircraft, AiLimbDamage limbDamage) Aircraft limb damaged.
void OnAircraftCutLimb(... AiAircraft aircraft, AiDamageInitiator initiator, LimbNames limbName) Aircraft limb cut off.
void OnAircraftTookOff(... AiAircraft aircraft) Aircraft took off.
void OnAircraftLanded(... AiAircraft aircraft) Aircraft landed.
void OnAircraftCrashLanded(... AiAircraft aircraft) Aircraft crash-landed.
void OnAircraftKilled(... AiAircraft aircraft) Aircraft killed.

Persons (crew, parachutists)

Method Description
void OnPersonMoved(AiPerson person, AiActor fromCart, int fromPlaceIndex) Person moved to another cart/place.
void OnPersonHealth(AiPerson person, AiDamageInitiator initiator, float deltaHealth) Person health changed.
void OnPersonParachuteLanded(AiPerson person) Person landed by parachute.
void OnPersonParachuteFailed(AiPerson person) Parachute failed.

Places (player entering/leaving vehicles)

Method Description
void OnPlaceEnter(Player player, AiActor actor, int placeIndex) Player entered a place (seat) in an actor.
void OnPlaceLeave(Player player, AiActor actor, int placeIndex) Player left a place.
void OnCarter(AiActor actor, int placeIndex) Carter event.
void OnAutopilotOn(AiActor actor, int placeIndex) Autopilot turned on.
void OnAutopilotOff(AiActor actor, int placeIndex) Autopilot turned off.

Other events

Method Description
void OnAiAirNewEnemy(AiAirEnemyElement element, int army) New air enemy detected.
void OnSingleBattleSuccess(bool success) Single battle success/failure.
void OnOrderMissionMenuSelected(Player player, int ID, int menuItemIndex) Player selected an order mission menu item.
void OnBuildingKilled(string title, GP.Point3d pos, AiDamageInitiator initiator, int eventArgInt) Building destroyed.
void OnStationaryKilled(int missionNumber, GroundStationary _stationary, AiDamageInitiator initiator, int eventArgInt) Stationary object destroyed.
void OnBombExplosion(string title, double mass, GP.Point3d pos, AiDamageInitiator initiator, int eventArgInt) Bomb exploded.
void OnUserCreateUserLabel(GPUserLabel ul) User created a map label.
void OnUserDeleteUserLabel(GPUserLabel ul) User deleted a map label.

Utilities

Method Description
void Timeout(double sec, DoTimeout doTimeout) Schedules doTimeout to be invoked after sec seconds (game time). Forwards to Battle.Timeout.
object[] OnIntraMissionsMessage(string sMsg, object[] args = null) Optional handler for inter-mission messages; default returns null.

Usage

  • Access game state via GamePlay and Time.
  • Override only the On* methods you need; others have empty default implementations.
  • Use MissionNumberListener (e.g. set to -1 in OnBattleStarted to listen to all missions) so your mission receives events for the intended mission number.
  • Use Timeout(seconds, callback) for delayed logic (e.g. spawn after N seconds).

ABattle

Kind: class (implements IBattle)

The battle is the environment where missions run. There is one battle per game session. Missions are registered with the battle and receive events through it.

Properties

Property Type Description
GamePlay IGamePlay Gameplay interface (time, players, actors, HUD, etc.).
Time ITime Time interface (game/real time, ticks).

Methods

Method Return Description
AMission GetBaseMission() AMission or null Returns the first registered mission (mission number 0), or null if none.
void Timeout(double sec, DoTimeout doTimeout) Schedules doTimeout to run after sec seconds of game time.

Mission code typically uses Battle from AMission.Battle and calls Timeout via Mission.Timeout(sec, doTimeout).


IBattle

Kind: interface

Internal interface implemented by ABattle. Mission scripts usually work with ABattle and AMission only.

Methods include: OnTickGame, OnTickReal, OnEventGame, GetEnemyAirGroupIDs, GetDamageVictims, GetDamageInitiators, ComputePlayerScore.


DoTimeout

Kind: delegate

public delegate void DoTimeout();

Callback type for delayed execution. Pass a parameterless method to Timeout(double sec, DoTimeout doTimeout) to run it after sec seconds of game time.

Example

public override void OnBattleStarted()
{
    base.OnBattleStarted();
    Timeout(30.0, () => {
        GamePlay.gpHUDLogCenter("Message after 30 seconds.");
    });
}