Overworld Speedup

Last branch update: 17th January 2025 Speed levels: 1x, 2x, 4x, or 8x Files changed: 4

What It Does

Adds a speed multiplier to the overworld loop with four levels: 1x, 2x, 4x, and 8x, using VAR_OVERWORLD_SPEEDUP to control which level is active. The speedup runs additional iterations of AnimateSprites(), CameraUpdate(), and UpdateCameraPanning() within the normal OverworldBasic() call, resulting in 0, 1, 3, or 7 extra iterations respectively. Collision detection, script execution, and input handling are not re-run in the extra iterations, so the game logic stays consistent while movement and animation run faster.

The speedup can be disabled on the fly by holding R, or blocked entirely with FLAG_PREVENT_OVERWORLD_SPEEDUP, useful for cutscenes or specific areas where running at full speed would break something.

How It’s Implemented

Four files changed: include/overworld.h (speed constants and the function declaration), src/overworld.c (OverworldSpeedup_AdditionalIterations() implementation and the hook into CB2_Overworld()), include/constants/flags.h (FLAG_PREVENT_OVERWORLD_SPEEDUP), and include/constants/vars.h (VAR_OVERWORLD_SPEEDUP).

Both the flag and VAR constants are set to 0 as placeholders — any ROM hack using this branch needs to assign real slot values in flags.h and vars.h. The flag guard in the source is written specifically so that a value of 0 makes the prevention check dead code by default, which is a safe no-op until real slots are assigned.

One practical note from testing: the difference between 8x and 16x is not noticeably meaningful, and 32x starts to produce visible performance issues, so 8x is a reasonable ceiling for the speed levels.

Installation

The diff for this feature can be used to add these changes. A full step-by-step tutorial is also available on the Team Aqua’s Asset Repo wiki, which covers porting to pret/pokefirered and RHH/pokeemerald-expansion as well.

Why It’s In Ikigai

When playing on an emulator, players tend to use speedup. In games with custom music, such as Pokémon Ikigai, emulator speedup will cause it to be inaudible, or players may even breeze past important story elements. Adding a controllable speedup option, even just 2x makes a noticeable difference to how the game feels to navigate without making it feel out of control.