Move ground map conversion table to C

This commit is contained in:
DizzyEggg
2025-06-16 16:29:20 +02:00
parent 7d4711af82
commit 95babdeda5
18 changed files with 2618 additions and 2358 deletions

View File

@@ -0,0 +1,236 @@
#ifndef GUARD_CONSTANTS_GROUND_MAP_H
#define GUARD_CONSTANTS_GROUND_MAP_H
enum {
MAP_SQUARE,
MAP_POKEMON_SQUARE,
MAP_WHISCASH_POND,
MAP_WHISCASH_POND_OPEN,
MAP_PELIPPER_POST_OFFICE,
MAP_PELIPPER_POST_OFFICE_INSIDE,
MAP_MAKUHITA_DOJO,
MAP_MAKUHITA_DOJO_INSIDE,
MAP_LUMINOUS_CAVE,
MAP_TEAM_BASE_PIKACHU_BASIC,
MAP_TEAM_BASE_PIKACHU_CONSTRUCTION,
MAP_TEAM_BASE_PIKACHU_FINAL,
MAP_TEAM_BASE_INSIDE_PIKACHU_BASIC,
MAP_TEAM_BASE_INSIDE_PIKACHU_CONSTRUCTION,
MAP_TEAM_BASE_INSIDE_PIKACHU_FINAL,
MAP_TEAM_BASE_MEOWTH_BASIC,
MAP_TEAM_BASE_MEOWTH_CONSTRUCTION,
MAP_TEAM_BASE_MEOWTH_FINAL,
MAP_TEAM_BASE_INSIDE_MEOWTH_BASIC,
MAP_TEAM_BASE_INSIDE_MEOWTH_CONSTRUCTION,
MAP_TEAM_BASE_INSIDE_MEOWTH_FINAL,
MAP_TEAM_BASE_EEVEE_BASIC,
MAP_TEAM_BASE_EEVEE_CONSTRUCTION,
MAP_TEAM_BASE_EEVEE_FINAL,
MAP_TEAM_BASE_INSIDE_EEVEE_BASIC,
MAP_TEAM_BASE_INSIDE_EEVEE_CONSTRUCTION,
MAP_TEAM_BASE_INSIDE_EEVEE_FINAL,
MAP_TEAM_BASE_SKITTY_BASIC,
MAP_TEAM_BASE_SKITTY_CONSTRUCTION,
MAP_TEAM_BASE_SKITTY_FINAL,
MAP_TEAM_BASE_INSIDE_SKITTY_BASIC,
MAP_TEAM_BASE_INSIDE_SKITTY_CONSTRUCTION,
MAP_TEAM_BASE_INSIDE_SKITTY_FINAL,
MAP_TEAM_BASE_SQUIRTLE_BASIC,
MAP_TEAM_BASE_SQUIRTLE_CONSTRUCTION,
MAP_TEAM_BASE_SQUIRTLE_FINAL,
MAP_TEAM_BASE_INSIDE_SQUIRTLE_BASIC,
MAP_TEAM_BASE_INSIDE_SQUIRTLE_CONSTRUCTION,
MAP_TEAM_BASE_INSIDE_SQUIRTLE_FINAL,
MAP_TEAM_BASE_TOTODILE_BASIC,
MAP_TEAM_BASE_TOTODILE_CONSTRUCTION,
MAP_TEAM_BASE_TOTODILE_FINAL,
MAP_TEAM_BASE_INSIDE_TOTODILE_BASIC,
MAP_TEAM_BASE_INSIDE_TOTODILE_CONSTRUCTION,
MAP_TEAM_BASE_INSIDE_TOTODILE_FINAL,
MAP_TEAM_BASE_MUDKIP_BASIC,
MAP_TEAM_BASE_MUDKIP_CONSTRUCTION,
MAP_TEAM_BASE_MUDKIP_FINAL,
MAP_TEAM_BASE_INSIDE_MUDKIP_BASIC,
MAP_TEAM_BASE_INSIDE_MUDKIP_CONSTRUCTION,
MAP_TEAM_BASE_INSIDE_MUDKIP_FINAL,
MAP_TEAM_BASE_PSYDUCK_BASIC,
MAP_TEAM_BASE_PSYDUCK_CONSTRUCTION,
MAP_TEAM_BASE_PSYDUCK_FINAL,
MAP_TEAM_BASE_INSIDE_PSYDUCK_BASIC,
MAP_TEAM_BASE_INSIDE_PSYDUCK_CONSTRUCTION,
MAP_TEAM_BASE_INSIDE_PSYDUCK_FINAL,
MAP_TEAM_BASE_CHARMANDER_BASIC,
MAP_TEAM_BASE_CHARMANDER_CONSTRUCTION,
MAP_TEAM_BASE_CHARMANDER_FINAL,
MAP_TEAM_BASE_INSIDE_CHARMANDER_BASIC,
MAP_TEAM_BASE_INSIDE_CHARMANDER_CONSTRUCTION,
MAP_TEAM_BASE_INSIDE_CHARMANDER_FINAL,
MAP_TEAM_BASE_TORCHIC_BASIC,
MAP_TEAM_BASE_TORCHIC_CONSTRUCTION,
MAP_TEAM_BASE_TORCHIC_FINAL,
MAP_TEAM_BASE_INSIDE_TORCHIC_BASIC,
MAP_TEAM_BASE_INSIDE_TORCHIC_CONSTRUCTION,
MAP_TEAM_BASE_INSIDE_TORCHIC_FINAL,
MAP_TEAM_BASE_CYNDAQUIL_BASIC,
MAP_TEAM_BASE_CYNDAQUIL_CONSTRUCTION,
MAP_TEAM_BASE_CYNDAQUIL_FINAL,
MAP_TEAM_BASE_INSIDE_CYNDAQUIL_BASIC,
MAP_TEAM_BASE_INSIDE_CYNDAQUIL_CONSTRUCTION,
MAP_TEAM_BASE_INSIDE_CYNDAQUIL_FINAL,
MAP_TEAM_BASE_CUBONE_BASIC,
MAP_TEAM_BASE_CUBONE_CONSTRUCTION,
MAP_TEAM_BASE_CUBONE_FINAL,
MAP_TEAM_BASE_INSIDE_CUBONE_BASIC,
MAP_TEAM_BASE_INSIDE_CUBONE_CONSTRUCTION,
MAP_TEAM_BASE_INSIDE_CUBONE_FINAL,
MAP_TEAM_BASE_MACHOP_BASIC,
MAP_TEAM_BASE_MACHOP_CONSTRUCTION,
MAP_TEAM_BASE_MACHOP_FINAL,
MAP_TEAM_BASE_INSIDE_MACHOP_BASIC,
MAP_TEAM_BASE_INSIDE_MACHOP_CONSTRUCTION,
MAP_TEAM_BASE_INSIDE_MACHOP_FINAL,
MAP_TEAM_BASE_BULBASAUR_BASIC,
MAP_TEAM_BASE_BULBASAUR_CONSTRUCTION,
MAP_TEAM_BASE_BULBASAUR_FINAL,
MAP_TEAM_BASE_INSIDE_BULBASAUR_BASIC,
MAP_TEAM_BASE_INSIDE_BULBASAUR_CONSTRUCTION,
MAP_TEAM_BASE_INSIDE_BULBASAUR_FINAL,
MAP_TEAM_BASE_CHIKORITA_BASIC,
MAP_TEAM_BASE_CHIKORITA_CONSTRUCTION,
MAP_TEAM_BASE_CHIKORITA_FINAL,
MAP_TEAM_BASE_INSIDE_CHIKORITA_BASIC,
MAP_TEAM_BASE_INSIDE_CHIKORITA_CONSTRUCTION,
MAP_TEAM_BASE_INSIDE_CHIKORITA_FINAL,
MAP_TEAM_BASE_TREECKO_BASIC,
MAP_TEAM_BASE_TREECKO_CONSTRUCTION,
MAP_TEAM_BASE_TREECKO_FINAL,
MAP_TEAM_BASE_INSIDE_TREECKO_BASIC,
MAP_TEAM_BASE_INSIDE_TREECKO_CONSTRUCTION,
MAP_TEAM_BASE_INSIDE_TREECKO_FINAL,
MAP_FRIEND_AREA_BOUNTIFUL_SEA,
MAP_FRIEND_AREA_TREASURE_SEA,
MAP_FRIEND_AREA_SERENE_SEA,
MAP_FRIEND_AREA_DEEP_SEA_FLOOR,
MAP_FRIEND_AREA_DEEP_SEA_CURRENT,
MAP_FRIEND_AREA_SEAFLOOR_CAVE,
MAP_FRIEND_AREA_SHALLOW_BEACH,
MAP_FRIEND_AREA_MT_DEEPGREEN,
MAP_FRIEND_AREA_MT_CLEFT,
MAP_FRIEND_AREA_MT_MOONVIEW,
MAP_FRIEND_AREA_RAINBOW_PEAK,
MAP_FRIEND_AREA_WILD_PLAINS,
MAP_FRIEND_AREA_BEAU_PLAINS,
MAP_FRIEND_AREA_SKY_BLUE_PLAINS,
MAP_FRIEND_AREA_SAFARI,
MAP_FRIEND_AREA_SCORCHED_PLAINS,
MAP_FRIEND_AREA_SACRED_FIELD,
MAP_FRIEND_AREA_MIST_RISE_FOREST,
MAP_FRIEND_AREA_FLYAWAY_FOREST,
MAP_FRIEND_AREA_OVERGROWN_FOREST,
MAP_FRIEND_AREA_ENERGETIC_FOREST,
MAP_FRIEND_AREA_MUSHROOM_FOREST,
MAP_FRIEND_AREA_HEALING_FOREST,
MAP_FRIEND_AREA_TRANSFORM_FOREST,
MAP_FRIEND_AREA_SECRETIVE_FOREST,
MAP_FRIEND_AREA_RUB_A_DUB_RIVER,
MAP_FRIEND_AREA_TADPOLE_POND,
MAP_FRIEND_AREA_TURTLESHELL_POND,
MAP_FRIEND_AREA_MYSTIC_LAKE,
MAP_FRIEND_AREA_WATERFALL_LAKE,
MAP_FRIEND_AREA_PEANUT_SWAMP,
MAP_FRIEND_AREA_POISON_SWAMP,
MAP_FRIEND_AREA_ECHO_CAVE,
MAP_FRIEND_AREA_CRYPTIC_CAVE,
MAP_FRIEND_AREA_DRAGON_CAVE,
MAP_FRIEND_AREA_BOULDER_CAVE,
MAP_FRIEND_AREA_JUNGLE,
MAP_FRIEND_AREA_DECREPIT_LAB,
MAP_FRIEND_AREA_MT_DISCIPLINE,
MAP_FRIEND_AREA_THUNDER_MEADOW,
MAP_FRIEND_AREA_POWER_PLANT,
MAP_FRIEND_AREA_CRATER,
MAP_FRIEND_AREA_FURNACE_DESERT,
MAP_FRIEND_AREA_AGED_CHAMBER_AN,
MAP_FRIEND_AREA_AGED_CHAMBER_O_EXCLAIM,
MAP_FRIEND_AREA_ANCIENT_RELIC,
MAP_FRIEND_AREA_DARKNESS_RIDGE,
MAP_FRIEND_AREA_FRIGID_CAVERN,
MAP_FRIEND_AREA_ICE_FLOE_BEACH,
MAP_FRIEND_AREA_VOLCANIC_PIT,
MAP_FRIEND_AREA_STRATOS_LOOKOUT,
MAP_FRIEND_AREA_RAVAGED_FIELD,
MAP_FRIEND_AREA_MAGNETIC_QUARRY,
MAP_FRIEND_AREA_LEGENDARY_ISLAND,
MAP_FRIEND_AREA_SOUTHERN_ISLAND,
MAP_FRIEND_AREA_ENCLOSED_ISLAND,
MAP_FRIEND_AREA_FINAL_ISLAND,
MAP_PERSONALITY_TEST_CYAN,
MAP_PERSONALITY_TEST_PURPLE,
MAP_FUGITIVES_FISSURE,
MAP_FUGITIVES_FIRE,
MAP_FUGITIVES_LAPIS_CAVE,
MAP_FUGITIVES_VOLCANO,
MAP_FUGITIVES_SNOW_ROAD,
MAP_FUGITIVES_SNOW_FOREST,
MAP_FUGITIVES_BLIZZARD_ROAD,
MAP_SUMMIT_SUNSET,
MAP_SKY_TOWER,
MAP_COMET,
MAP_NIGHTMARE,
MAP_NIGHT_SKY_1,
MAP_NIGHT_SKY_2,
MAP_THE_END,
MAP_TINY_WOODS_ENTRY,
MAP_TINY_WOODS_END,
MAP_THUNDERWAVE_CAVE_ENTRY,
MAP_THUNDERWAVE_CAVE_END,
MAP_MT_STEEL_ENTRY,
MAP_MT_STEEL_END,
MAP_SINISTER_WOODS_ENTRY,
MAP_SINISTER_WOODS_END,
MAP_SILENT_CHASM_ENTRY,
MAP_SILENT_CHASM_END,
MAP_MT_THUNDER_ENTRY,
MAP_MT_THUNDER_MID,
MAP_MT_THUNDER_END,
MAP_GREAT_CANYON_ENTRY,
MAP_HILL_OF_THE_ANCIENTS,
MAP_LAPIS_CAVE_ENTRY,
MAP_LAPIS_CAVE_END,
MAP_MT_BLAZE_ENTRY,
MAP_MT_BLAZE_MID,
MAP_MT_BLAZE_END,
MAP_FROSTY_FOREST_ENTRY,
MAP_FROSTY_FOREST_MID,
MAP_FROSTY_FOREST_END,
MAP_MT_FREEZE_ENTRY,
MAP_MT_FREEZE_MID,
MAP_MT_FREEZE_END,
MAP_MAGMA_CAVERN_ENTRY,
MAP_MAGMA_CAVERN_MID,
MAP_MAGMA_CAVERN_END,
MAP_SKY_TOWER_ENTRY,
MAP_SKY_TOWER_MID,
MAP_SKY_TOWER_END,
MAP_D14,
MAP_D15,
MAP_D16,
MAP_D17,
MAP_D18,
MAP_D19,
MAP_D20,
MAP_D21,
MAP_D22,
MAP_D23,
MAP_D24,
MAP_D25,
MAP_PERSONALITY_TEST_MULTICOLOR,
MAP_TITLE_SCREEN,
MAP_INTRO,
MAP_LOGO_POKEMON_COMPANY,
MAP_LOGO_WARNING,
MAP_TEAM_BASE_WALL_MAP,
MAP_COUNT,
};
#endif // GUARD_CONSTANTS_GROUND_MAP_H

View File

@@ -40,14 +40,14 @@ static inline s16 Self_s16(s16 a)
}
// Needed to match a couple of functions.
static inline void InlineStrcpy(u8 *dst, const u8 *src)
static inline u8 *InlineStrcpy(u8 *dst, const u8 *src)
{
strcpy(dst, src);
return strcpy(dst, src);
}
static inline void InlineStrncpy(u8 *dst, const u8 *src, s32 n)
static inline u8 *InlineStrncpy(u8 *dst, const u8 *src, s32 n)
{
strncpy(dst, src, n);
return strncpy(dst, src, n);
}
static inline bool8 AreStringsDifferent(const u8 *str1, const u8 *str2)

View File

@@ -4,16 +4,6 @@
#include "structs/str_pokemon.h"
#include "structs/str_wonder_mail.h"
// size: 0xC
typedef struct GroundConversionStruct
{
s16 unk0;
s16 unk2;
s16 unk4;
s16 unk6;
/* 0x8 */ u8 *text;
} GroundConversionStruct;
bool8 sub_8098F88(void);
const char *GetCurrentGroundPlaceName(void);
@@ -25,6 +15,4 @@ bool8 sub_8098D80(u32 speed);
bool8 sub_80992E0(s16 *param_1, s16 *param_2);
bool8 sub_8099328(u8 *);
extern GroundConversionStruct gGroundConversion_811BAF4[10];
#endif // GUARD_GROUND_MAIN_H

View File

@@ -0,0 +1,18 @@
#ifndef GUARD_GROUND_MAP_CONVERSION_TABLE_H
#define GUARD_GROUND_MAP_CONVERSION_TABLE_H
#include "constants/ground_map.h"
// size: 0xC
typedef struct GroundConversionStruct
{
s16 unk0;
s16 groundPlaceId;
s16 mapFileTableId;
s16 unk6;
/* 0x8 */ const u8 *text;
} GroundConversionStruct;
extern const GroundConversionStruct gGroundMapConversionTable[MAP_COUNT + 1];
#endif // GUARD_GROUND_MAP_CONVERSION_TABLE_H

View File

@@ -1,6 +1,49 @@
#ifndef GUARD_GROUND_PLACE_H
#define GUARD_GROUND_PLACE_H
// Duplicate entries are most likely outdoors vs indoors. To verify which are which
enum GroundPlace {
GROUND_PLACE_SQUARE,
GROUND_PLACE_SQUARE_2,
GROUND_PLACE_POKEMON_SQUARE,
GROUND_PLACE_WHISCASH_POND,
GROUND_PLACE_PELIPPER_POST_OFFICE,
GROUND_PLACE_PELIPPER_POST_OFFICE_INSIDE,
GROUND_PLACE_MAKUHITA_DOJO,
GROUND_PLACE_MAKUHITA_DOJO_INSIDE, // unused
GROUND_PLACE_LUMINOUS_CAVE,
GROUND_PLACE_FRIEND_AREAS,
GROUND_PLACE_TEAM_BASE,
GROUND_PLACE_TEAM_BASE_INSIDE,
GROUND_PLACE_DUNGEON,
GROUND_PLACE_TINY_WOODS,
GROUND_PLACE_THUNDERWAVE_CAVE,
GROUND_PLACE_MT_STEEL,
GROUND_PLACE_SINISTER_WOODS,
GROUND_PLACE_SILENT_CHASM,
GROUND_PLACE_MT_THUNDER,
GROUND_PLACE_MT_THUNDER_MID,
GROUND_PLACE_GREAT_CANYON,
GROUND_PLACE_HILL_OF_THE_ANCIENTS,
GROUND_PLACE_LAPIS_CAVE,
GROUND_PLACE_LAPIS_CAVE_EXIT,
GROUND_PLACE_MT_BLAZE,
GROUND_PLACE_MT_BLAZE_MID,
GROUND_PLACE_FROSTY_FOREST,
GROUND_PLACE_FROSTY_CLEARING,
GROUND_PLACE_MT_FREEZE,
GROUND_PLACE_MT_FREEZE_MID,
GROUND_PLACE_MAGMA_CAVERN,
GROUND_PLACE_MAGMA_CAVERN_MID,
GROUND_PLACE_SKY_TOWER,
GROUND_PLACE_SKY_TOWER_MID,
GROUND_PLACE_WESTERN_CAVE,
GROUND_PLACE_DIRECTION, // Similarly to GROUND_PLACE_SCENE, used in the conversion table for bgs which are not maps.
GROUND_PLACE_NEW_GAME,
GROUND_PLACE_SCENE, // For all maps that aren't really maps, for example warning screen, personality test background, etc.
GROUND_PLACE_INVALIDITY, // Probably marks the last entry, not used in-game.
};
const u8 *GetGroundPlaceName(s16 id);
#endif // GUARD_GROUND_PLACE_H

View File

@@ -4,12 +4,13 @@
// size: 0x1C
struct unkStruct_81188F0
{
/* 0x0 */ const u8 *text1;
/* 0x4 */ const u8 *text2;
/* 0x8 */ const u8 *text3;
/* 0xC */ const u8 *text4[2];
/* 0x14 */ u32 unk2;
/* 0x18 */ u32 unk3;
/* 0x0 */ const u8 *fileName1;
/* 0x4 */ const u8 *fileName2;
/* 0x8 */ const u8 *fileName3;
/* 0xC */ const u8 *fileName4[2];
// Unused, always NULL
/* 0x14 */ const u8 *unusedFileName5;
/* 0x18 */ const u8 *unusedFileName6;
};
extern const struct unkStruct_81188F0 gUnknown_81188F0[];