- summary: One action played during a fight: who did it, which action it is, and the payload of exactly one action kind (spell cast, damage, movement, death, summon...).
- area: Game.Action
One action played during a fight: who did it, which action it is, and the payload of exactly one action kind (spell cast, damage, movement, death, summon...).
Kind event · Area Game.Action
The building block of fight playback. Each event is ONE action of the fight: a spell
cast, life points lost, a fighter pushed or teleported, a death, a summon, a glyph
set or triggered, a look change... It nearly always arrives between a
SequenceStartEvent and the matching SequenceEndEvent, with the other actions
of the same sequence.
WHAT TO DO WHEN YOU RECEIVE IT
1. Read GameActionFightEvent.source_id: the fighter who performs the action
(the caster, the attacker, the thrower, the killer...).
2. Read GameActionFightEvent.action_id: the effect/action id from the game data
(ActionId). It tells variants of one kind apart: 300 is a spell cast, and the
points-variation and dodge kinds use it to say WHICH points (AP or MP) changed.
3. Exactly one member of the GameActionFightEvent.action oneof is set. Branch on
it and apply that kind (see each member below and its record type).
4. Apply the actions in arrival order: they are the sequence's playback script.
5. SEND NOTHING for this event. Acknowledge the whole sequence once, after
SequenceEndEvent, with GameActionAcknowledgementRequest.
WHAT THE OFFICIAL CLIENT DOES. The fight sequence service switches on the action kind and turns each one into a playback step (a death step, a slide step, a teleport step, a life-change step...) that it queues in the current sequence; the steps then play one after the other (animations, floating numbers, state updates).
CAPTURE (3.7.10.10, 2026-10-14). A spell cast on yourself: action_id 300, source_id
your character, GameActionFightEvent.targeted_ability set (cell 370, target
yourself, spell 12718).
When you may send it
- Requires
character_loadedinferred
Related messages
- Unsolicited - nothing you send causes this observed — the server streams these during the playback of a fight action sequence; no request asks for them
Fields
| # | Field | Type | Meaning | You set it |
|---|---|---|---|---|
| 22 | action_id | int32 | The action's id from the game data (ActionId): which effect this is. 300 is a spell cast. The client converts it to its ActionId type and hands it to the step builders; the points-variation and dodge kinds use it to tell AP from MP. | never |
| 36 | source_id | int64 | The fighter who performs the action (caster, attacker, thrower, killer, summoner...). (fighter (entity) id) | never |
| 1 | change_team | ChangeTeam | The action's source switches to another team (it changes sides): ChangeTeam. | never |
| 2 | targeted_ability | TargetedAbility | A fighter casts a spell or hits with its weapon: TargetedAbility says on which cell and target, and which spell or weapon. | never |
| 3 | death | Death | A fighter dies: Death says which (its summons die with it). The fight log shows ui.fight.isDead. | never |
| 4 | exchange_positions | ExchangePositions | Set when the action's source and another fighter swap places: see ExchangePositions.The client moves both fighters to their new cells in one step. | never |
| 5 | slide | Slide | Set when a fighter is pushed or pulled along a line: see Slide.The client animates the fighter from the start cell to the end cell. | never |
| 6 | modify_effects_duration | ModifyEffectsDuration | The remaining duration of every effect on a fighter changes. See ModifyEffectsDuration.The client shifts the end turn of each of the fighter's buffs by the delta; the fight log prints ui.fight.effectsModifyDuration. | never |
| 7 | spell_remove | SpellRemove | Set when the action ends every effect one spell left on a fighter: see SpellRemove. | never |
| 8 | reflect_damages | ReflectDamages | A fighter sends damage back to its attacker: ReflectDamages. | never |
| 9 | mark_cells | MarkCells | A mark (glyph, trap, wall, portal, rune) is laid on the map: MarkCells. | never |
| 10 | carry_character | CarryCharacter | Set when the action's source picks up another fighter: see CarryCharacter.The client attaches the carried fighter to its carrier until a throw or a drop. | never |
| 11 | reduce_damages | ReduceDamages | A fighter reduced the damage it was about to take. See ReduceDamages.The fight log prints ui.fight.reduceDamages. | never |
| 12 | summons | Summons | Fighters join the fight (summons, invocations, companions): Summons. | never |
| 13 | points_variation | PointsVariation | A fighter's action points (AP) or movement points (MP) change. See PointsVariation.GameActionFightEvent.action_id says which points and how: AP lost / used / won, MP lost / used / won. The fight log prints ui.fight.lostAP, winAP, lostMP or winMP. | never |
| 14 | invisibility | Invisibility | A fighter becomes invisible, detected or visible again: Invisibility. | never |
| 15 | invisible_detected | InvisibleDetected | An invisible fighter is revealed for a moment on a cell (the client shows a ghost there): InvisibleDetected. | never |
| 17 | change_look | ChangeLook | A fighter's appearance changes (transformation, costume): ChangeLook carries the new look. | never |
| 18 | tackled | Tackled | The action's source is tackled while leaving a cell: Tackled. The fight log shows ui.fight.dodgeFailed. | never |
| 19 | remove_hit_box | RemoveHitBox | Set when a fighter's body stops covering a cell: see RemoveHitBox.The client removes the cell from the source fighter's hitbox. | never |
| 20 | teleport_on_same_map | TeleportOnSameMap | Set when a fighter is teleported to another cell of the map: see TeleportOnSameMap.The client moves the fighter to the cell with a teleport step. | never |
| 21 | trigger_glyph_trap | TriggerGlyphTrap | A mark fires on a fighter: TriggerGlyphTrap. | never |
| 23 | dodge_point_loss | DodgePointLoss | A fighter dodged an attempt to remove its AP or MP. See DodgePointLoss.GameActionFightEvent.action_id says whether AP or MP were dodged; the fight log prints ui.fight.dodgeAP or ui.fight.dodgeMP. | never |
| 24 | activate_glyph_trap | ActivateGlyphTrap | A mark is switched on or off: ActivateGlyphTrap. | never |
| 25 | execute_script | ExecuteScript | A spell script plays without a regular cast (a trap or glyph effect, a scripted animation): ExecuteScript. | never |
| 26 | vanish | Vanish | A fighter disappears from the map without dying: Vanish. | never |
| 27 | throw_character | ThrowCharacter | Set when a carrier throws the fighter it carries onto a cell: see ThrowCharacter.The client plays the throw animation, releases the carried fighter and lands it on the cell. | never |
| 28 | reflect_spell | ReflectSpell | A fighter sends a spell back to its caster: ReflectSpell. | never |
| 29 | drop_character | DropCharacter | Set when a carrier puts the fighter it carries down on a cell: see DropCharacter.If the cell is not a valid map cell, the client uses the target cell of the spell being cast instead. | never |
| 30 | unmark_cells | UnmarkCells | A mark is removed from the map: UnmarkCells. | never |
| 31 | effect_remove | EffectRemove | Set when the action ends one effect on a fighter: see EffectRemove.Before 3.4.18.19 (and in beta) this was not a branch of its own: it was the effect_remove alternative inside SpellRemove. | never |
| 33 | spell_immunity | SpellImmunity | A fighter is immune to the spell: SpellImmunity. | never |
| 34 | staging | Staging | A staging (camera / screen effect) sequence plays: Staging. | never |
| 35 | kill | GameActionFightEvent.Kill | The action's source kills a fighter: Kill says which. The fight log shows ui.fight.killed. | never |
| 37 | life_points_lost | LifePointsLost | A fighter loses life points: damage, with the shield points it absorbed. See LifePointsLost.The client queues a shield-loss step when shield points were lost, then a life step; its fight log prints ui.fight.lifeLoss / ui.fight.lostShieldPoints. | never |
| 38 | add_hit_box | AddHitBox | Set when a fighter's body grows to cover one more cell: see AddHitBox.The client adds the cell to the source fighter's hitbox (the cells it occupies). | never |
| 39 | life_points_gain | LifePointsGain | A fighter is healed. See LifePointsGain.The client queues a life step with the gained amount; its fight log prints ui.fight.lifeGain. | never |
| 40 | steal_kama | StealKama | The source fighter steals kamas from another fighter. See StealKama.The fight log prints ui.fight.stealMoney. | never |