The game separates attacks made by characters from hazards made by the world and by boss set pieces. The hazards come in two kinds that are stored in two tables. A trick is an instant or short-lived area attack (a fireball landing, a rolling boulder, wall spikes, a light pillar). A trap is a zone that stays on the ground and applies a status effect to everyone standing in it. A trick can leave a trap behind. This article lists both, explains how their damage is worked out and which journey tier they use. For the general rules of the world see World mechanics; for the status effects themselves see Status effects and Damage formula.
Traps (lingering zones)#
Eight traps exist. Each has a circular zone, a lifetime and one or two statuses. Names below are translations of the internal Chinese names (inferred).
| Trap id | Name (inferred) | Logic type | Radius | Duration | Status 1 / 2 | Param1 | Damage journey 1-4 | Start delay | Interval |
|---|---|---|---|---|---|---|---|---|---|
| 10001 | Poison | 101 | 3.5 | 1.8 s | 10002 / 0 | 0 | 100 / 125 / 150 / 175 | 0.2 s | 1 s |
| 10002 | Chapter 2 boss corrosion | 102 | 5.5 | 10 s | 10003 / 0 | 0.7 | 100 / 125 / 150 / 175 | 0.2 s | 1 s |
| 10003 | Chapter 2 boss corrosion that ignites | 101 | 5.5 | 10 s | 10008 / 0 | 0 | 100 / 125 / 150 / 175 | 0.2 s | 1 s |
| 10004 | Chapter 2 boss skyward corrosion | 102 | 3.5 | 10 s | 10008 / 0 | 0.7 | 100 / 125 / 150 / 175 | 0.2 s | 1 s |
| 10005 | Chapter 4 boss rain | 101 | 3.5 | 8 s | 10002 / 10040 | 0.7 | 100 / 125 / 150 / 175 | 0.2 s | 1 s |
| 10006 | Chapter 4 boss corroded ground | 101 | 3.5 | until cleared | 10002 / 10040 | 0.7 | 100 / 125 / 150 / 175 | 0.2 s | 1 s |
| 10007 | Monster lure | 103 | 12 | 5 s | 10105 / 0 | 0 | 0 / 0 / 0 / 0 | 0.5 s | 1 s |
| 10008 | Stun smoke bomb | 101 | 5.5 | 10 s | 10112 / 0 | 0 | 0 / 0 / 0 / 0 | 0.2 s | 1 s |
Status ids as named in the status data: 10002 Poison, 10003 Corrosion (defence down), 10008 Burn, 10040 Sanity Loss, 10105 Lured (Soul River water), 10112 Stun (Black Sprite King). See Poison, Corrosion, Burn, Stun and Sanity loss (status).
How a trap works#
- Zone test. Every frame a character counts as inside when the horizontal distance is less than the radius and the height difference is less than the trap's height (1 unit for all eight). Leaving removes the character from the zone at once.
- Who is affected.
TargetTypeis 1 (Enemy) for all traps: the trap hits characters whose team differs from the team that created it. The trap remembers its owner, so a trap created by you affects the other team and not you (inferred for the smoke bomb and lure, whose creators are not in the data). - Status timing. The first status is applied after the start delay (0.2 s, 0.5 s for the lure) of standing inside, then again every time more than the interval (1 s) has passed since the last application. Each application re-adds the status, so a long stay refreshes it.
- The "Damage" number is not damage. The journey-selected value (
Damage_1toDamage_4) is handed to the status as its power parameter. The trap itself never subtracts HP. Poison zones therefore get stronger in later journeys (100, 125, 150, 175), and the lure and smoke have 0 because stun and lure do not use it. - Lifetime. A time of 10 means the zone is removed after 10 seconds. A time of -1 (trap 10006) means it stays until the game clears all traps (area change or reload).
- Logic types. Type 101 is a plain status zone. Type 102 also forces everyone inside to walk only and cuts their dodge movement to
Param1(0.7) of normal; trap 10002 and 10004, the chapter 2 boss corrosion, are of this type. Type 103 pulls monsters towards the centre of the zone for as long as the zone exists (monster brains are set to "attracted").
The same walk-only rule is used for slow mud and poison mud ground, but with a dodge factor of 0.4. Poison mud also applies status 10029 (a piercing damage-over-time status, not the Poison status) constantly while you stand on it. Having the Slow status (10076) triggers the same rule even on dry ground, and a story section can force walking with the same 0.4 dodge factor.
Tricks (hazard attacks)#
Sixty tricks exist. A trick hits when its attack collider touches a character, and it keeps a list of who it has already hit during one play. Most belong to bosses and set pieces; tricks 10033-10036, 10038, 10039 and 10058 are neutral environmental hazards (team 0, 999 toughness damage) that hurt everyone.
Damage of a trick#
For an instant hit the game computes:
damage = ceil( D x (1 - R / (R + 100)) )
where D is the trick's damage for the current journey tier and R is the victim's maximum value of the matching resistance (the trick's defence type: 1 Physical, 2 Fire, 3 Poison, 4 Arcane, 5 Dark, 6 Pierce). This is the same curve as the main combat formula, see Damage types and resistances.
Then:
- Casual difficulty multiplies damage on the player by 0.65 (0.5 in a cloud demo build). See Difficulty.
- Owning the "noob" help item multiplies it by 0.5.
- If you are Norwood in a non-normal sanity state, every non-Physical resistance is halved (sanity resist penalty 500 permille) before the formula runs; a matching talent can lower that penalty.
- Period (continuous) tricks deal D per second, multiplied by the frame time each frame, with no rounding.
- A trick with the lethal flag (10030 and 10045) tags the damage as "must death": it deals 99999 and is flagged so it cannot be survived by effects that prevent a normal death. Trick 10048 (blood mist) also does 99999, without the flag.
Worked example: Fireball (trick 10001) in journey 1 deals 400 fire damage. With 100 fire resistance the factor is 1 - 100/200 = 0.5, so the hit does 200. In journey 4 the base is 700, so 350.
Hits also drain toughness (100 for most, 999 for the environmental ones, so they always stagger) and Weakness (10). Characters may block a trick only if its HitHandEnable flag is set (27 of the 60 tricks) and they are in a move with the defensive hand frame and have skill energy. A blocked trick compares your guard strength G with the trick's GuardBreak value B: the difference ratio is r = (B - G) / G (with no guard the ratio is fixed at 2.5). If B is 0 and you have any guard, r = -1 and the hit does no damage. If r is 0 or below the hit is absorbed. If r is above 0 the damage is multiplied by min(1, hero guard ratio x r), so a stronger trick gets through more. At r of 2.5 or more the block is marked as failed; at r of 1 or more, or when your skill energy or Weakness is empty, it is marked as broken and the hero's higher guard-break ratio is used. Blocking also costs energy: damage x the hero's GuardEnergyRatio x (1 + r), capped at 45 % of your maximum energy.
Taking a trick hit does not add Rage here: the code computes a Rage amount but never applies it (inferred from the function; it is a leftover).
Which journey is used#
The Damage_n column that is active depends on where you are:
| Where | Column used |
|---|---|
| Story, any area | New Game Plus journey 1 to 4 (journey 5 and above is capped at 4) |
| Arcade | Always journey 1 |
| Deep into the Dark Mist (maze) | Maze level 1-7 = journey 1, 8-14 = journey 2, 15-21 = journey 3, 22 and above = journey 4 |
Setting the story journey also switches the loop columns of enemy shells (projectiles), item drops, scene items and shop data; the maze tier switch changes only traps and tricks. See New Game Plus.
All tricks#
Names are translated from the internal Chinese names (inferred). "Neutral" tricks have team 0.
| Trick id | Name (translated from internal name, inferred) | Damage type | Journey 1 | Journey 2 | Journey 3 | Journey 4 | Notes |
|---|---|---|---|---|---|---|---|
| 10001 | Fireball | Fire | 400 | 500 | 600 | 700 | leaves trap 10004 |
| 10002 | Tornado | Fire | 500 | 625 | 750 | 875 | |
| 10003 | Tidal wave | Fire | 900 | 1125 | 900 | 900 | guard break 150 |
| 10004 | Giant hand | Physical | 800 | 1000 | 1200 | 1400 | |
| 10005 | Ice spike | Fire | 400 | 400 | 400 | 400 | |
| 10006 | Acid rain | Poison | 700 | 700 | 700 | 700 | blockable, leaves trap 10005 |
| 10007 | Tentacle 1 | Dark | 125 | 125 | 125 | 125 | |
| 10008 | Ground laser 1 | Arcane | 550 | 650 | 750 | 850 | guard break 150 |
| 10009 | Enchant 9 (part 1) | Dark | 300 | 375 | 450 | 525 | blockable |
| 10010 | Enchant 9 (part 2) | Dark | 300 | 375 | 450 | 525 | blockable |
| 10011 | Enchant 10 (part 1) | Dark | 300 | 375 | 450 | 525 | blockable |
| 10012 | Enchant 10 (part 2) | Dark | 300 | 375 | 450 | 525 | blockable |
| 10013 | Enchant 11 (part 1) | Dark | 300 | 375 | 450 | 525 | blockable |
| 10014 | Enchant 11 (part 2) | Dark | 300 | 375 | 450 | 525 | blockable |
| 10015 | Enchant 12 ground burst | Dark | 500 | 675 | 800 | 925 | blockable |
| 10016 | Enchant 13 dark-art path | Dark | 500 | 675 | 800 | 925 | blockable |
| 10017 | Enchant 16 dark-art circle | Dark | 120 | 160 | 200 | 240 | blockable, status 10078 |
| 10018 | Purple fire ring | Arcane | 600 | 750 | 900 | 1050 | guard break 150 |
| 10019 | Black hole | Arcane | 200 | 250 | 300 | 350 | |
| 10020 | Sword planted in ground | Arcane | 800 | 1000 | 1200 | 1400 | |
| 10021 | Water splash | Arcane | 600 | 750 | 900 | 1050 | |
| 10022 | Lightning around the body | Dark | 800 | 1000 | 1200 | 1400 | blockable |
| 10023 | Lightning pillars spinning outward | Dark | 700 | 875 | 1050 | 1225 | blockable |
| 10024 | Two lightning bolts | Dark | 600 | 750 | 900 | 1050 | blockable |
| 10025 | Fan-shaped shockwave | Dark | 700 | 875 | 1050 | 1225 | blockable |
| 10026 | Crows gather and dive | Dark | 800 | 1000 | 1200 | 1400 | blockable |
| 10027 | Crows chase and rise | Dark | 100 | 125 | 150 | 175 | blockable |
| 10028 | Black mist rain | Dark | 700 | 875 | 1050 | 1225 | blockable |
| 10029 | Black-feather ground spikes | Dark | 700 | 875 | 1050 | 1225 | blockable |
| 10030 | Crows burst out of a fallen body | Dark | 99999 | 99999 | 99999 | 99999 | lethal flag, blockable |
| 10031 | Small colossus ground burst | Dark | 900 | 1125 | 1350 | 1575 | blockable, status 10010 |
| 10032 | Ground flames after sword plant | Fire | 100 | 125 | 150 | 175 | guard break 150, status 10037 |
| 10033 | Rolling boulder | Physical | 650 | 860 | 1070 | 1280 | neutral (team 0), toughness 999 |
| 10034 | Wall spikes A | Physical | 600 | 800 | 1000 | 1200 | neutral (team 0), toughness 999 |
| 10035 | Wall spikes B | Physical | 600 | 800 | 1000 | 1200 | neutral (team 0), toughness 999 |
| 10036 | Wall spikes C | Physical | 600 | 800 | 1000 | 1200 | neutral (team 0), toughness 999 |
| 10037 | Stage 5 boss trailing wake | Dark | 100 | 100 | 100 | 100 | blockable |
| 10038 | Floor spikes A | Physical | 600 | 800 | 1000 | 1200 | neutral (team 0), toughness 999 |
| 10039 | Floor spikes B | Physical | 600 | 800 | 1000 | 1200 | neutral (team 0), toughness 999 |
| 10040 | Enchant 20 (part 1) | Dark | 120 | 160 | 200 | 240 | blockable |
| 10041 | (none) | - | 0 | 0 | 0 | 0 | |
| 10042 | Crow bullet spread | Dark | 600 | 750 | 900 | 1050 | blockable |
| 10043 | Rising ground pillar of light | Fire | 1200 | 1200 | 1200 | 1200 | |
| 10044 | Light pillars around the body | Fire | 1500 | 1500 | 1500 | 1500 | |
| 10045 | Black circle instant kill | Fire | 99999 | 99999 | 99999 | 99999 | lethal flag |
| 10046 | Thunder hammer | Fire | 1000 | 1000 | 1000 | 1000 | guard break 150 |
| 10047 | Sword slam AOE | Dark | 600 | 800 | 1000 | 1200 | blockable, guard break 150 |
| 10048 | Blood mist | Dark | 99999 | 99999 | 99999 | 99999 | blockable |
| 10049 | Fixed pull-in | Fire | 125 | 140 | 155 | 170 | status 10042 |
| 10050 | Following pull-in | Fire | 125 | 140 | 155 | 170 | status 10042 |
| 10051 | Electric wave | Fire | 1000 | 1000 | 1000 | 1000 | |
| 10052 | Bomber 1 | Fire | 125 | 800 | 1000 | 1200 | status 10042 |
| 10053 | Bomber 2 | Fire | 125 | 800 | 1000 | 1200 | status 10042 |
| 10054 | Bomber 3 | Fire | 125 | 800 | 1000 | 1200 | status 10042 |
| 10055 | Sword wall 1 | Dark | 600 | 800 | 1000 | 1200 | blockable |
| 10056 | Black Sprite King barrel | Fire | 800 | 1000 | 1200 | 1400 | |
| 10057 | Sword wall 2 | Dark | 600 | 800 | 1000 | 1200 | blockable |
| 10058 | Snowball | Fire | 650 | 860 | 1070 | 1280 | neutral (team 0), toughness 999 |
| 10059 | Barrel bomb | Fire | 600 | 800 | 1000 | 1200 | |
| 10060 | Signal flare | - | 0 | 0 | 0 | 0 |
Notes on the data:
- Tidal wave (10003) is higher in journey 2 (1125) than in journeys 3 and 4 (900). That looks like a data slip, but it is what the table says.
- Bomber 1-3 (10052-10054) have journey 1 damage of only 125 but 800 or more from journey 2 on.
- Tricks 10049, 10050, 10052-10054 apply status 10042, a fast-building poison. Trick 10017 applies Burn from the tower boss (10078), 10032 a strong Burn (10037), 10031 a silent stun (10010).
- Trick 10041 ("none") and 10060 (signal flare) have no damage; they exist as hooks.
- Two tricks leave a trap on the ground when they land: Fireball (10001, trap 10004) and Acid rain (10006, trap 10005).
Hidden mechanics#
- A trap's "Damage" column powers its status; it is not HP damage.
- Walk-only zones also shrink your dodge roll to 70 % (boss corrosion) or 40 % (mud).
- A trap affects every character whose team differs from the team that created it, so the lure and the stun smoke bomb hit the other side (stun smoke: 5.5 radius for 10 s).
- Maze depth silently raises the damage of every trick and trap in steps at levels 8, 15 and 22.
- The environmental spikes and boulders ignore team and hit for 999 toughness, so they always stagger heroes and monsters alike.
Sources#
logic/trap/trapbase.lua1-197 (zone test, status timing, lifetime);trap101.lua,trap102.lua(walk-only and dodge factor),trap103.lua(attract).structdata/ms_trapdata.lua,structdata/ms_trickdata.lua(SetLooppicksDamage_n,DurabilitySub_n);structdata/fs_savestory.lua1952-1975 (SetLoop, GetLogicLoop, loop cap 4 fromBattleData.GameLoopMax);controller/controllermain.lua4864-4885 (SetMazeTrapAndTrickData: levels under 8, 15, 22).logic/playervalue/animalbase_value.lua1812-1830 (defence base), 1915-2050 (DamageTrickCommon: formula, casual, noob, guard, lethal flag);logic/player/animalbase.lua4876-4886 (IsHitHandTrick), 8135-8190 (trick hit reaction), 5704-5720 and 12675-12700 (logic rules, mud), 15108-15112 (DodgeClose factor).- Constants:
gamedata/playerdefine/animalbase_value_define.lua(RageHitRate 0.15, CasualDamageRatio 0.65, NoobItemDamageRatio 0.5),animalbase_define.lua239-241 (BlockEnergyRateMax 0.45, BlockGuardLevelHigh 2.5, BlockGuardLevelLow 1),scenebase.lua85-86 (mud dodge 0.4),controllerstorymode.lua202 (StoryWalkDodge 0.4). - Tables: TrapData rows 1-8 (ES_TrapData), TrickData rows 1-60 (ES_TrickData). Data extracts:
build/wiki/data/world_mech/traps_table.md,tricks_table.md.