Files
gen1recomp/tests/engine
Shane McGovern b84c2c1511 Port FireRed wild encounter grace period
Gen3 (FireRed) had no cooldown between wild battles, so every step on an
encounter tile rolled at the area's full rate -- Route 1 (~21%) landed a
battle on roughly one step in five. Gen2 already had this via
World:wildCooldownStep(); game3 never did.

Port pret/pokefirered wild_encounter.c:

- GetMapBaseEncounterCooldown -> Encounters.mapBaseCooldown: steps of
  immunity derived from the area's own rate (rate >= 80 -> none, < 10 ->
  8, else 8 - rate/10).
- HandleWildEncounterCooldown -> Encounters.handleCooldown: a soft floor,
  not a hard gate -- once the minimum elapses a 5%/step leak lets a battle
  through anyway. Includes the White/Black Flute, Cleanse Tag, Stench and
  Illuminate modifiers in pret's application order (Cleanse Tag before the
  ability mod, which changes the result).
- ResetEncounterRateModifiers -> Encounters.resetRateModifiers, wired to
  the two places pret resets: map load (Map.load, including seamless
  connection crossings) and battle start (BattleBridge.startWild). The
  latter is the bug-#1229 class -- scripted battles and fishing re-arm the
  grace period even though no step rolled.

Measured on Route 1 over 4000 steps: 843 encounters before, 397 after;
first encounter never lands before step 7.

Not ported (makes encounters more likely, so it does not affect the
reported symptom): the encounterRateBuff anti-frustration ramp and the
Mach/Acro bike rate modifier.

tests/engine/wild_encounter_cooldown.lua covers the cooldown golden table,
the counter/leak mechanics, all five modifiers, both re-arm paths and the
end-to-end step count.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
2026-09-19 09:46:02 +01:00
..
2026-08-28 10:14:44 -04:00
2026-08-18 09:51:22 -04:00
2026-08-18 09:20:07 -04:00
2026-08-18 09:20:07 -04:00
2026-08-18 09:20:07 -04:00
2026-08-24 07:52:05 -04:00
2026-08-24 07:52:05 -04:00
2026-08-24 07:52:05 -04:00
2026-08-24 09:02:56 -04:00
2026-08-28 10:14:44 -04:00
2026-08-31 08:41:02 -04:00
2026-07-19 16:18:18 -04:00
2026-09-02 10:02:32 -04:00
2026-09-11 09:11:34 -04:00
2026-07-19 16:18:18 -04:00
2026-08-28 10:14:44 -04:00
2026-09-18 17:19:05 -04:00
2026-08-11 11:53:30 -04:00
2026-09-18 15:42:32 -04:00
2026-09-18 15:42:32 -04:00
2026-07-19 16:18:18 -04:00
2026-09-18 15:42:32 -04:00
2026-07-19 16:18:18 -04:00
2026-08-28 10:14:44 -04:00
2026-08-31 07:56:27 -04:00
2026-08-28 10:14:44 -04:00
2026-09-11 09:11:34 -04:00
2026-09-18 15:42:32 -04:00
2026-08-06 09:57:31 -04:00
2026-07-30 11:35:57 -04:00
2026-08-28 10:14:44 -04:00
2026-09-09 12:23:55 -04:00
2026-08-25 09:21:33 -04:00
2026-08-06 09:57:31 -04:00
2026-08-21 14:03:25 -04:00
2026-08-28 10:14:44 -04:00
2026-08-24 07:52:05 -04:00
2026-08-28 10:14:44 -04:00
2026-09-03 07:11:31 -04:00
2026-09-16 16:42:59 -04:00
2026-09-18 17:19:05 -04:00
2026-09-18 15:42:32 -04:00
2026-08-18 11:29:50 -04:00
2026-08-18 09:51:22 -04:00
2026-08-10 14:27:00 -04:00
2026-08-28 10:14:44 -04:00
2026-08-28 10:14:44 -04:00
2026-08-28 10:14:44 -04:00
2026-08-28 10:14:44 -04:00
2026-08-26 12:04:06 -04:00
2026-07-25 15:21:49 -04:00
2026-07-25 15:21:49 -04:00
2026-08-24 07:52:05 -04:00
2026-08-11 16:55:06 +02:00
2026-08-12 11:38:17 +02:00
2026-08-24 13:07:11 -04:00
2026-08-06 14:36:01 -04:00
2026-08-25 09:16:59 -04:00
2026-08-19 06:41:10 -04:00
2026-08-21 16:36:55 -04:00
2026-08-21 14:38:54 -04:00
2026-08-21 16:36:55 -04:00
2026-09-16 16:42:59 -04:00
2026-08-18 09:20:07 -04:00
2026-09-09 09:46:27 -04:00
2026-08-20 20:36:23 -04:00
2026-09-09 09:46:27 -04:00
2026-09-09 09:46:27 -04:00
2026-08-20 20:07:10 -04:00
2026-07-31 10:45:12 -04:00
2026-08-14 17:07:06 -04:00
2026-08-20 20:07:10 -04:00
2026-08-26 12:04:06 -04:00