====== How damage is applied ======
One hit, one chain: the table number goes through fixed stages in a fixed order, every stage multiplies or subtracts, and what is left reaches the shield and the DUR. Every modifier in the game - a module card, a chip, a pilot ability, a piece of armour, a mode rule - sits in exactly one box. **You can move one**: pick another box in its //stage suggested// cell and say why; the picture follows at the next sync, the server at the owner's word.
===== The chain =====
flowchart TB
subgraph r0["the hit"]
direction LR
b0["base"]
b1["part"]
b2["charge"]
b3["range"]
b4["shot gifts
6 modifiers"]
b5["pair hooks"]
b6["attacker sheet (out)
27 modifiers"]
b7["victim sheet (in)
12 modifiers"]
b8["edge"]
b9["cover"]
b0 --> b1 --> b2 --> b3 --> b4 --> b5 --> b6 --> b7 --> b8 --> b9
end
subgraph r1["what it meets"]
direction LR
b10["armour
4 modifiers"]
b11["helmet
3 modifiers"]
b12["carried shield
1 modifier"]
b13["outer shield"]
b14["shield
3 modifiers"]
b15["HP
3 modifiers"]
b10 --> b11 --> b12 --> b13 --> b14 --> b15
end
b9 --> b10
Which boxes a kind of damage runs (battle/damage.KINDS; the part factors sit in the base of a shot or blast; armour, shields and the pools follow for every kind):
^ kind ^ boxes ^
| shot | charge -> range -> shot gifts -> pair hooks -> attacker sheet (out) -> victim sheet (in) |
| blast | range -> shot gifts -> pair hooks -> attacker sheet (out) -> victim sheet (in) -> edge -> cover |
| skill | pair hooks -> attacker sheet (out) -> victim sheet (in) |
| burn | pair hooks -> attacker sheet (out) -> victim sheet (in) |
| poison | the pools only (the circle ignores everything else) |
===== The boxes =====
^ box ^ what happens there ^
| base | the table number: c_gun_data iBasePower, a skill's other_damage, a blast's boom, the circle's tick |
| part | head x2.5 on a pilot (where heads count); a mecha's own head / body / arm / foot factors x the gun's scale |
| charge | the level a charge gun was held to (the ion cannon: x1.8, x2.6) |
| range | range fall-off: full to max_m, a straight line down to the floor at min_m |
| shot gifts | the shooter's shot-wide gifts (a terminal's "+30 % damage") |
| pair hooks | the attacker / victim pair: gifts and module cards that look at who hits whom |
| attacker sheet (out) | the attacker's `damage` stat: module cards, a recipe's "damage x", ACE time, the TDM intruder debuff |
| victim sheet (in) | the victim's `damage_taken` stat: module cards, a recipe's "damage taken x", the TDM pilot reduction |
| edge | a blast's edge fall-off (the direct target takes it whole); the later pairs of a missile salvo |
| cover | the share of the unit a blast sees past walls and mechas |
| armour | the suit takes its share off (15 / 20 / 30 %); the circle ignores it |
| helmet | the helmet takes its share off a MECHA weapon's hit (10 / 15 / 20 %) |
| carried shield | the Gun Shield in hand takes the hit first |
| outer shield | a skill's outer shield (Firefox's dash 420, Lancelot's stomp) takes it first |
| shield | the mecha's shield, with the blast-vs-shield factors |
| HP | what is left reaches the DUR / HP; lifesteal and the "damage dealt -> heal" cards count here |
| not damage | a modifier of something else: magazine, blast radius, max DUR, speed |
Two "+10 %" on one stat multiply to x1.21 (`[damage].stacking = "multiply"`): value = (base + adds) x the product of (1 + p) x the plain multipliers; `set` wins over all. The sheet's stats today: damage, damage_taken, magazine, blast_radius, max_hp, max_shield.
===== Every modifier and its box =====
One row per modifier. **stage** is where the server applies it today; **stage suggested** is yours - a dropdown of the boxes above. A modifier that is not about damage at all (a magazine, a radius) sits in "not damage".
---- struct serial ----
schema: modifier
cols: name, kind, stat, op, value, condition, stage, stage_suggested, note
head: Modifier, Kind, Stat, Op, Value, When, Stage, Stage suggested, Note
sort: order
csv: 0
----
===== Box by box =====
==== base (0) ====
the table number: c_gun_data iBasePower, a skill's other_damage, a blast's boom, the circle's tick
==== part (0) ====
head x2.5 on a pilot (where heads count); a mecha's own head / body / arm / foot factors x the gun's scale
==== charge (0) ====
the level a charge gun was held to (the ion cannon: x1.8, x2.6)
==== range (0) ====
range fall-off: full to max_m, a straight line down to the floor at min_m
==== shot gifts (6) ====
the shooter's shot-wide gifts (a terminal's "+30 % damage")
---- struct serial ----
schema: modifier
cols: name, kind, stat, op, value, condition, stage_suggested, note
head: Modifier, Kind, Stat, Op, Value, When, Stage suggested, Note
sort: order
filter: stage = shot gifts
csv: 0
----
==== pair hooks (0) ====
the attacker / victim pair: gifts and module cards that look at who hits whom
==== attacker sheet (out) (27) ====
the attacker's `damage` stat: module cards, a recipe's "damage x", ACE time, the TDM intruder debuff
---- struct serial ----
schema: modifier
cols: name, kind, stat, op, value, condition, stage_suggested, note
head: Modifier, Kind, Stat, Op, Value, When, Stage suggested, Note
sort: order
filter: stage = attacker sheet (out)
csv: 0
----
==== victim sheet (in) (12) ====
the victim's `damage_taken` stat: module cards, a recipe's "damage taken x", the TDM pilot reduction
---- struct serial ----
schema: modifier
cols: name, kind, stat, op, value, condition, stage_suggested, note
head: Modifier, Kind, Stat, Op, Value, When, Stage suggested, Note
sort: order
filter: stage = victim sheet (in)
csv: 0
----
==== edge (0) ====
a blast's edge fall-off (the direct target takes it whole); the later pairs of a missile salvo
==== cover (0) ====
the share of the unit a blast sees past walls and mechas
==== armour (4) ====
the suit takes its share off (15 / 20 / 30 %); the circle ignores it
---- struct serial ----
schema: modifier
cols: name, kind, stat, op, value, condition, stage_suggested, note
head: Modifier, Kind, Stat, Op, Value, When, Stage suggested, Note
sort: order
filter: stage = armour
csv: 0
----
==== helmet (3) ====
the helmet takes its share off a MECHA weapon's hit (10 / 15 / 20 %)
---- struct serial ----
schema: modifier
cols: name, kind, stat, op, value, condition, stage_suggested, note
head: Modifier, Kind, Stat, Op, Value, When, Stage suggested, Note
sort: order
filter: stage = helmet
csv: 0
----
==== carried shield (1) ====
the Gun Shield in hand takes the hit first
---- struct serial ----
schema: modifier
cols: name, kind, stat, op, value, condition, stage_suggested, note
head: Modifier, Kind, Stat, Op, Value, When, Stage suggested, Note
sort: order
filter: stage = carried shield
csv: 0
----
==== outer shield (0) ====
a skill's outer shield (Firefox's dash 420, Lancelot's stomp) takes it first
==== shield (3) ====
the mecha's shield, with the blast-vs-shield factors
---- struct serial ----
schema: modifier
cols: name, kind, stat, op, value, condition, stage_suggested, note
head: Modifier, Kind, Stat, Op, Value, When, Stage suggested, Note
sort: order
filter: stage = shield
csv: 0
----
==== HP (3) ====
what is left reaches the DUR / HP; lifesteal and the "damage dealt -> heal" cards count here
---- struct serial ----
schema: modifier
cols: name, kind, stat, op, value, condition, stage_suggested, note
head: Modifier, Kind, Stat, Op, Value, When, Stage suggested, Note
sort: order
filter: stage = HP
csv: 0
----
==== not damage (19) ====
a modifier of something else: magazine, blast radius, max DUR, speed
---- struct serial ----
schema: modifier
cols: name, kind, stat, op, value, condition, stage_suggested, note
head: Modifier, Kind, Stat, Op, Value, When, Stage suggested, Note
sort: order
filter: stage = not damage
csv: 0
----
Numbers as the server runs them. [[wiki:sync|How the sync works]].
===== Notes by players =====
Nothing here yet. Log in (type ''!wiki'' in the game's chat for your code) and write what you know: how it plays, what beats it, its story. The numbers above are the server's; correct one by filling its **suggested** cell.