====== 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.