1 Reclaim Unused Flags
judicornadamsfoster edited this page 2026-05-17 17:56:15 +01:00

Reclaim Unused Flags

There are many flags in the game that are unused but are defined in other places and other files.

This guide will show how to reclaim these flags and give an extra 54 flags and an extra 3 system flags.


#define FLAG_MOSSDEEP_GYM_SWITCH_1 0x64 // Leftover from the RS version of Mossdeep Gym, functionally unused

#define FLAG_MOSSDEEP_GYM_SWITCH_2 0x65 //

#define FLAG_MOSSDEEP_GYM_SWITCH_3 0x66 //

#define FLAG_MOSSDEEP_GYM_SWITCH_4 0x67 //

in data/maps/MossdeepCity/scripts.inc, in section MossdeepCity_OnTransition, delete these 4 lines (lines 6 to 9)

	clearflag FLAG_MOSSDEEP_GYM_SWITCH_1
	clearflag FLAG_MOSSDEEP_GYM_SWITCH_2
	clearflag FLAG_MOSSDEEP_GYM_SWITCH_3
	clearflag FLAG_MOSSDEEP_GYM_SWITCH_4

in 'data/maps/MossdeepCity_Gym/scripts.inc', delete (line 2):

`map_script MAP_SCRIPT_ON_LOAD, MossdeepCity_Gym_OnLoad`

delete entire sections (lines 5 to 49)

from @ NOTE: Mossdeep Gym was redesigned between R/S and E. Leftover (and now functionally unused) scripts are commented below

to MossdeepCity_Gym_EventScript_SetSwitch4Metatiles

delete entire sections (line 112 to 197)

from @ All the below switch scripts are leftover from RS and are functionally unused

to MossdeepCity_Gym_EventScript_ClearSwitch4


#define FLAG_UNUSED_RS_LEGENDARY_BATTLE_DONE 0x71 // Unused Flag. Used in R/S to indicate whether player defeated or caught Groudon/Kyogre in Cave of Origin.

delete this line from all 4 of these files:

call_if_set FLAG_UNUSED_RS_LEGENDARY_BATTLE_DONE, CaveOfOrigin_EventScript_DisableTriggers

data/maps/CaveOfOrigin_1F/scripts.inc
data/maps/CaveOfOrigin_UnusedRubySapphireMap1/scripts.inc
data/maps/CaveOfOrigin_UnusedRubySapphireMap2/scripts.inc
data/maps/CaveOfOrigin_UnusedRubySapphireMap3/scripts.inc

#define FLAG_TRICK_HOUSE_PUZZLE_7_SWITCH_1 0xC2 // Leftover from the RS version of Puzzle Room 7, functionally unused

#define FLAG_TRICK_HOUSE_PUZZLE_7_SWITCH_2 0xC3 //

#define FLAG_TRICK_HOUSE_PUZZLE_7_SWITCH_3 0xC4 //

#define FLAG_TRICK_HOUSE_PUZZLE_7_SWITCH_4 0xC5 //

#define FLAG_TRICK_HOUSE_PUZZLE_7_SWITCH_5 0xC6 //

in data/maps/Route110_TrickHousePuzzle7/scripts.inc

(NOTE: doing this will also free up variable VAR_TRICK_HOUSE_PUZZLE_7_STATE_2 0x40B6 // Leftover from RS, never set)

in the map_script header, delete: (lines 2 to 5)

	map_script MAP_SCRIPT_ON_RESUME, Route110_TrickHousePuzzle7_OnResume

	map_script MAP_SCRIPT_ON_TRANSITION, Route110_TrickHousePuzzle7_OnTransition

	map_script MAP_SCRIPT_ON_LOAD, Route110_TrickHousePuzzle7_OnLoad

	map_script MAP_SCRIPT_ON_FRAME_TABLE, Route110_TrickHousePuzzle7_OnFrame

delete lines and entire sections (lines 8 to 96)

	@ Puzzle Room 7 in RSE uses whatever puzzle Mossdeep Gym uses

	@ Because Mossdeep Gym was redesigned for Emerald, theres a good deal of leftover script from the old R/S puzzle

	Route110_TrickHousePuzzle7_OnResume

	Route110_TrickHousePuzzle7_EventScript_UpdateSwitchMetatiles

	@ Leftover from R/S, none of the below metatile scripts are ever called

	Route110_TrickHousePuzzle7_EventScript_SetSwitch1MetatilesOn

	Route110_TrickHousePuzzle7_EventScript_SetSwitch2MetatilesOn

	Route110_TrickHousePuzzle7_EventScript_SetSwitch3MetatilesOn

	Route110_TrickHousePuzzle7_EventScript_SetSwitch4MetatilesOn

	Route110_TrickHousePuzzle7_EventScript_SetSwitch5MetatilesOn

	Route110_TrickHousePuzzle7_EventScript_SetSwitch1MetatilesOff

	Route110_TrickHousePuzzle7_EventScript_SetSwitch2MetatilesOff

	Route110_TrickHousePuzzle7_EventScript_SetSwitch3MetatilesOff

	Route110_TrickHousePuzzle7_EventScript_SetSwitch4MetatilesOff

	Route110_TrickHousePuzzle7_EventScript_SetSwitch5MetatilesOff

	Route110_TrickHousePuzzle7_OnTransition

	Route110_TrickHousePuzzle7_EventScript_TeleportedTransition

	Route110_TrickHousePuzzle7_OnLoad

	Route110_TrickHousePuzzle7_OnFrame

	Route110_TrickHousePuzzle7_EventScript_ClearState2

then delete entire sections (lines 109 to 223)

	@ Unused, leftover from R/S

	Route110_TrickHousePuzzle7_EventScript_TeleportPad

	@ All the below switch scripts are unused leftover from R/S

	Route110_TrickHousePuzzle7_EventScript_Switch1

	Route110_TrickHousePuzzle7_EventScript_Switch2

	Route110_TrickHousePuzzle7_EventScript_Switch3

	Route110_TrickHousePuzzle7_EventScript_Switch4

	Route110_TrickHousePuzzle7_EventScript_Switch5

	@ All the below switch scripts are unused leftover from R/S

	Route110_TrickHousePuzzle7_EventScript_SetSwitch1On

	Route110_TrickHousePuzzle7_EventScript_SetSwitch1Off

	Route110_TrickHousePuzzle7_EventScript_SetSwitch2On

	Route110_TrickHousePuzzle7_EventScript_SetSwitch2Off

	Route110_TrickHousePuzzle7_EventScript_SetSwitch3On

	Route110_TrickHousePuzzle7_EventScript_SetSwitch3Off

	Route110_TrickHousePuzzle7_EventScript_SetSwitch4On

	Route110_TrickHousePuzzle7_EventScript_SetSwitch4Off

	Route110_TrickHousePuzzle7_EventScript_SetSwitch5On

	Route110_TrickHousePuzzle7_EventScript_SetSwitch5Off

#define FLAG_NEVER_SET_0x0DC 0xDC // This flag is read, but never written to

in src/match_call.c, in section static bool32 MapAllowsMatchCall(void)

    if (gMapHeader.regionMapSectionId == MAPSEC_SOOTOPOLIS_CITY
     && FlagGet(FLAG_HIDE_SOOTOPOLIS_CITY_RAYQUAZA) == TRUE
     && FlagGet(FLAG_NEVER_SET_0x0DC) == FALSE)
        return FALSE;

Change this to:

if (gMapHeader.regionMapSectionId == MAPSEC_SOOTOPOLIS_CITY
     && FlagGet(FLAG_HIDE_SOOTOPOLIS_CITY_RAYQUAZA) == TRUE)
        return FALSE;

#define FLAG_CONTEST_SKETCH_CREATED 0x10E // Set but never read

in data/maps/FallarborTown/scripts.inc, delete line 8 clearflag FLAG_CONTEST_SKETCH_CREATED

in data/scripts/contest_hall.inc, delete line 1047 setflag FLAG_CONTEST_SKETCH_CREATED


#define FLAG_WONDER_CARD_UNUSED_1 0x13D // These Wonder Card flags are referenced but never set

to

#define FLAG_WONDER_CARD_UNUSED_17 0x14D

change this line:

#define NUM_WONDER_CARD_FLAGS (1 + FLAG_WONDER_CARD_UNUSED_17 - FLAG_RECEIVED_AURORA_TICKET)

to:

#define NUM_WONDER_CARD_FLAGS (1 + FLAG_RECEIVED_OLD_SEA_MAP - FLAG_RECEIVED_AURORA_TICKET)

in src/mystery_gift.c, in section: static const u16 sReceivedGiftFlags[]

delete the 17 lines that start FLAG_WONDER_CARD_UNUSED (lines 234 to 250)

so the section should be:

static const u16 sReceivedGiftFlags[] =
{
    FLAG_RECEIVED_AURORA_TICKET,
    FLAG_RECEIVED_MYSTIC_TICKET,
    FLAG_RECEIVED_OLD_SEA_MAP,
};

#define FLAG_MYSTERY_GIFT_DONE 0x1E4

I would suggest leaving this one alone, but the following can be removed

#define FLAG_MYSTERY_GIFT_1 0x1E5

to

#define FLAG_MYSTERY_GIFT_15 0x1F3

in src/event_data.c, in section void ClearMysteryGiftFlags(void)

delete lines 115 to 129

    FlagClear(FLAG_MYSTERY_GIFT_1);
    FlagClear(FLAG_MYSTERY_GIFT_2);
    FlagClear(FLAG_MYSTERY_GIFT_3);
    FlagClear(FLAG_MYSTERY_GIFT_4);
    FlagClear(FLAG_MYSTERY_GIFT_5);
    FlagClear(FLAG_MYSTERY_GIFT_6);
    FlagClear(FLAG_MYSTERY_GIFT_7);
    FlagClear(FLAG_MYSTERY_GIFT_8);
    FlagClear(FLAG_MYSTERY_GIFT_9);
    FlagClear(FLAG_MYSTERY_GIFT_10);
    FlagClear(FLAG_MYSTERY_GIFT_11);
    FlagClear(FLAG_MYSTERY_GIFT_12);
    FlagClear(FLAG_MYSTERY_GIFT_13);
    FlagClear(FLAG_MYSTERY_GIFT_14);
    FlagClear(FLAG_MYSTERY_GIFT_15);

so the section should look like:

void ClearMysteryGiftFlags(void)
{
    FlagClear(FLAG_MYSTERY_GIFT_DONE);
}

#define FLAG_UNKNOWN_0x363 0x363 // Set, however has no purpose.

in data/scripts/new_game.inc, delete line 126 setflag FLAG_UNKNOWN_0x363


#define FLAG_UNKNOWN_0x393 0x393 // Set, however has no purpose.

in data/scripts/new_game.inc, delete line 223 setflag FLAG_UNKNOWN_0x393

and in data/maps/MossdeepCity_Gym/scripts.inc, delete line 69 clearflag FLAG_UNKNOWN_0x393


unused flags leftover from R/S

#define FLAG_RECEIVED_CONTEST_PASS 0x96 // Unused, leftover from R/S

#define FLAG_ITEM_ROUTE_123_RARE_CANDY 0x409 // Unused Flag, leftover from R/S. In Emerald this is a hidden item and uses a different flag

#define FLAG_HIDE_LEGEND_MON_CAVE_OF_ORIGIN 0x339 // Unused, leftover from R/S

#define FLAG_ITEM_OLD_MAGMA_HIDEOUT_B1F_MASTER_BALL 0x465 // Unused Flag, leftover from the Ruby Magma hideout

#define FLAG_ITEM_OLD_MAGMA_HIDEOUT_B1F_MAX_ELIXIR 0x466 // Unused Flag, leftover from the Ruby Magma hideout

#define FLAG_ITEM_OLD_MAGMA_HIDEOUT_B2F_NEST_BALL 0x467 // Unused Flag, leftover from the Ruby Magma hideout

#define FLAG_ITEM_MOSSDEEP_STEVENS_HOUSE_HM08 0x46D // Unused Flag, leftover from R/S. HM08 is given to the player directly in Emerald

none of these flags are references anywhere and can just be named


unused system flags leftover from R/S

#define FLAG_SYS_CAVE_SHIP (SYSTEM_FLAGS + 0x37) // Unused Flag, leftover from R/S debug, presumably used by Emerald's debug too

#define FLAG_SYS_CAVE_WONDER (SYSTEM_FLAGS + 0x38) // Unused Flag, same as above

#define FLAG_SYS_CAVE_BATTLE (SYSTEM_FLAGS + 0x39) // Unused Flag, same as above

none of these flags are references anywhere and can just be named