diff --git a/src/data/heal_locations.json b/src/data/heal_locations.json index c465ff65c3..3bfa468729 100644 --- a/src/data/heal_locations.json +++ b/src/data/heal_locations.json @@ -4,133 +4,188 @@ "id": "HEAL_LOCATION_LITTLEROOT_TOWN_BRENDANS_HOUSE_2F", "map": "MAP_LITTLEROOT_TOWN_BRENDANS_HOUSE_2F", "x": 4, - "y": 2 + "y": 2, + "respawn_map": "MAP_LITTLEROOT_TOWN_BRENDANS_HOUSE_1F", + "respawn_x": 2, + "respawn_y": 7, + "respawn_npc": "LOCALID_PLAYERS_HOUSE_1F_MOM" }, { "id": "HEAL_LOCATION_LITTLEROOT_TOWN_MAYS_HOUSE_2F", "map": "MAP_LITTLEROOT_TOWN_MAYS_HOUSE_2F", "x": 4, - "y": 2 + "y": 2, + "respawn_map": "MAP_LITTLEROOT_TOWN_MAYS_HOUSE_1F", + "respawn_x": 8, + "respawn_y": 7, + "respawn_npc": "LOCALID_PLAYERS_HOUSE_1F_MOM" }, { "id": "HEAL_LOCATION_PETALBURG_CITY", "map": "MAP_PETALBURG_CITY", "x": 20, - "y": 17 + "y": 17, + "respawn_map": "MAP_PETALBURG_CITY_POKEMON_CENTER_1F", + "respawn_npc": "LOCALID_PETALBURG_NURSE" }, { "id": "HEAL_LOCATION_SLATEPORT_CITY", "map": "MAP_SLATEPORT_CITY", "x": 19, - "y": 20 + "y": 20, + "respawn_map": "MAP_SLATEPORT_CITY_POKEMON_CENTER_1F", + "respawn_npc": "LOCALID_SLATEPORT_NURSE" }, { "id": "HEAL_LOCATION_MAUVILLE_CITY", "map": "MAP_MAUVILLE_CITY", "x": 22, - "y": 6 + "y": 6, + "respawn_map": "MAP_MAUVILLE_CITY_POKEMON_CENTER_1F", + "respawn_npc": "LOCALID_MAUVILLE_NURSE" }, { "id": "HEAL_LOCATION_RUSTBORO_CITY", "map": "MAP_RUSTBORO_CITY", "x": 16, - "y": 39 + "y": 39, + "respawn_map": "MAP_RUSTBORO_CITY_POKEMON_CENTER_1F", + "respawn_npc": "LOCALID_RUSTBORO_NURSE" }, { "id": "HEAL_LOCATION_FORTREE_CITY", "map": "MAP_FORTREE_CITY", "x": 5, - "y": 7 + "y": 7, + "respawn_map": "MAP_FORTREE_CITY_POKEMON_CENTER_1F", + "respawn_npc": "LOCALID_FORTREE_NURSE" }, { "id": "HEAL_LOCATION_LILYCOVE_CITY", "map": "MAP_LILYCOVE_CITY", "x": 24, - "y": 15 + "y": 15, + "respawn_map": "MAP_LILYCOVE_CITY_POKEMON_CENTER_1F", + "respawn_npc": "LOCALID_LILYCOVE_NURSE" }, { "id": "HEAL_LOCATION_MOSSDEEP_CITY", "map": "MAP_MOSSDEEP_CITY", "x": 28, - "y": 17 + "y": 17, + "respawn_map": "MAP_MOSSDEEP_CITY_POKEMON_CENTER_1F", + "respawn_npc": "LOCALID_MOSSDEEP_NURSE" }, { "id": "HEAL_LOCATION_SOOTOPOLIS_CITY", "map": "MAP_SOOTOPOLIS_CITY", "x": 43, - "y": 32 + "y": 32, + "respawn_map": "MAP_SOOTOPOLIS_CITY_POKEMON_CENTER_1F", + "respawn_npc": "LOCALID_SOOTOPOLIS_NURSE" }, { "id": "HEAL_LOCATION_EVER_GRANDE_CITY", "map": "MAP_EVER_GRANDE_CITY", "x": 27, - "y": 49 + "y": 49, + "respawn_map": "MAP_EVER_GRANDE_CITY_POKEMON_CENTER_1F", + "respawn_npc": "LOCALID_EVER_GRANDE_NURSE" }, { "id": "HEAL_LOCATION_LITTLEROOT_TOWN_BRENDANS_HOUSE", "map": "MAP_LITTLEROOT_TOWN", "x": 5, - "y": 9 + "y": 9, + "respawn_map": "MAP_LITTLEROOT_TOWN_BRENDANS_HOUSE_1F", + "respawn_x": 2, + "respawn_y": 7, + "respawn_npc": "LOCALID_PLAYERS_HOUSE_1F_MOM" }, { "id": "HEAL_LOCATION_LITTLEROOT_TOWN_MAYS_HOUSE", "map": "MAP_LITTLEROOT_TOWN", "x": 14, - "y": 9 + "y": 9, + "respawn_map": "MAP_LITTLEROOT_TOWN_MAYS_HOUSE_1F", + "respawn_x": 8, + "respawn_y": 7, + "respawn_npc": "LOCALID_PLAYERS_HOUSE_1F_MOM" }, { "id": "HEAL_LOCATION_OLDALE_TOWN", "map": "MAP_OLDALE_TOWN", "x": 6, - "y": 17 + "y": 17, + "respawn_map": "MAP_OLDALE_TOWN_POKEMON_CENTER_1F", + "respawn_npc": "LOCALID_OLDALE_NURSE" }, { "id": "HEAL_LOCATION_DEWFORD_TOWN", "map": "MAP_DEWFORD_TOWN", "x": 2, - "y": 11 + "y": 11, + "respawn_map": "MAP_DEWFORD_TOWN_POKEMON_CENTER_1F", + "respawn_npc": "LOCALID_DEWFORD_NURSE" }, { "id": "HEAL_LOCATION_LAVARIDGE_TOWN", "map": "MAP_LAVARIDGE_TOWN", "x": 9, - "y": 7 + "y": 7, + "respawn_map": "MAP_LAVARIDGE_TOWN_POKEMON_CENTER_1F", + "respawn_npc": "LOCALID_LAVARIDGE_NURSE" }, { "id": "HEAL_LOCATION_FALLARBOR_TOWN", "map": "MAP_FALLARBOR_TOWN", "x": 14, - "y": 8 + "y": 8, + "respawn_map": "MAP_FALLARBOR_TOWN_POKEMON_CENTER_1F", + "respawn_npc": "LOCALID_FALLARBOR_NURSE" }, { "id": "HEAL_LOCATION_VERDANTURF_TOWN", "map": "MAP_VERDANTURF_TOWN", "x": 16, - "y": 4 + "y": 4, + "respawn_map": "MAP_VERDANTURF_TOWN_POKEMON_CENTER_1F", + "respawn_npc": "LOCALID_VERDANTURF_NURSE" }, { "id": "HEAL_LOCATION_PACIFIDLOG_TOWN", "map": "MAP_PACIFIDLOG_TOWN", "x": 8, - "y": 16 + "y": 16, + "respawn_map": "MAP_PACIFIDLOG_TOWN_POKEMON_CENTER_1F", + "respawn_npc": "LOCALID_PACIFIDLOG_NURSE" }, { "id": "HEAL_LOCATION_EVER_GRANDE_CITY_POKEMON_LEAGUE", "map": "MAP_EVER_GRANDE_CITY", "x": 18, - "y": 6 + "y": 6, + "respawn_map": "MAP_EVER_GRANDE_CITY_POKEMON_LEAGUE_1F", + "respawn_x": 3, + "respawn_y": 4, + "respawn_npc": "LOCALID_LEAGUE_NURSE" }, { "id": "HEAL_LOCATION_SOUTHERN_ISLAND_EXTERIOR", "map": "MAP_SOUTHERN_ISLAND_EXTERIOR", "x": 15, - "y": 20 + "y": 20, + "respawn_map": "MAP_SOUTHERN_ISLAND_EXTERIOR", + "respawn_x": 15, + "respawn_y": 20 }, { "id": "HEAL_LOCATION_BATTLE_FRONTIER_OUTSIDE_EAST", "map": "MAP_BATTLE_FRONTIER_OUTSIDE_EAST", "x": 3, - "y": 52 + "y": 52, + "respawn_map": "MAP_BATTLE_FRONTIER_POKEMON_CENTER_1F", + "respawn_npc": "LOCALID_FRONTIER_NURSE" } ] } diff --git a/src/data/heal_locations.json.txt b/src/data/heal_locations.json.txt index fd63228e33..ca04a98885 100644 --- a/src/data/heal_locations.json.txt +++ b/src/data/heal_locations.json.txt @@ -11,14 +11,20 @@ static const struct HealLocation sHealLocations[NUM_HEAL_LOCATIONS - 1] = { ## endfor }; -static const u16 sWhiteoutRespawnHealCenterMapIdxs[][2] = { +#define DEFAULT_POKEMON_CENTER_X 7 +#define DEFAULT_POKEMON_CENTER_Y 4 + +static const u16 sWhiteoutRespawnHealCenterMapIdxs[][4] = { ## for heal_location in heal_locations {% if existsIn(heal_location, "respawn_map") %} - [{{ heal_location.id }} - 1] = { MAP_GROUP({{ heal_location.respawn_map }}), MAP_NUM({{ heal_location.respawn_map }})}, + [{{ heal_location.id }} - 1] = { MAP_GROUP({{ heal_location.respawn_map }}), MAP_NUM({{ heal_location.respawn_map }}), {% if existsIn(heal_location, "respawn_x") %}{{ heal_location.respawn_x }}{% else %}DEFAULT_POKEMON_CENTER_X{% endif %}, {% if existsIn(heal_location, "respawn_y") %}{{ heal_location.respawn_y }}{% else %}DEFAULT_POKEMON_CENTER_Y{% endif %}}, {% endif %} ## endfor }; +#undef DEFAULT_POKEMON_CENTER_X +#undef DEFAULT_POKEMON_CENTER_Y + static const u8 sWhiteoutRespawnHealerNpcIds[] = { ## for heal_location in heal_locations {% if existsIn(heal_location, "respawn_npc") %} diff --git a/src/data/heal_locations_pkm_center.h b/src/data/heal_locations_pkm_center.h deleted file mode 100644 index 388f77d5ec..0000000000 --- a/src/data/heal_locations_pkm_center.h +++ /dev/null @@ -1,175 +0,0 @@ -#define DEFAULT_POKEMON_CENTER_COORDS .x = 7, .y = 4 - -static const struct HealLocation sHealLocationsPokemonCenter[NUM_HEAL_LOCATIONS - 1] = -{ - [HEAL_LOCATION_LITTLEROOT_TOWN_BRENDANS_HOUSE_2F - 1] = - { - .mapGroup = MAP_GROUP(MAP_LITTLEROOT_TOWN_BRENDANS_HOUSE_1F), - .mapNum = MAP_NUM(MAP_LITTLEROOT_TOWN_BRENDANS_HOUSE_1F), - .x = 2, - .y = 7, - }, - [HEAL_LOCATION_LITTLEROOT_TOWN_MAYS_HOUSE_2F - 1] = - { - .mapGroup = MAP_GROUP(MAP_LITTLEROOT_TOWN_MAYS_HOUSE_1F), - .mapNum = MAP_NUM(MAP_LITTLEROOT_TOWN_MAYS_HOUSE_1F), - .x = 8, - .y = 7, - }, - [HEAL_LOCATION_PETALBURG_CITY - 1] = - { - .mapGroup = MAP_GROUP(MAP_PETALBURG_CITY_POKEMON_CENTER_1F), - .mapNum = MAP_NUM(MAP_PETALBURG_CITY_POKEMON_CENTER_1F), - DEFAULT_POKEMON_CENTER_COORDS, - }, - [HEAL_LOCATION_SLATEPORT_CITY - 1] = - { - .mapGroup = MAP_GROUP(MAP_SLATEPORT_CITY_POKEMON_CENTER_1F), - .mapNum = MAP_NUM(MAP_SLATEPORT_CITY_POKEMON_CENTER_1F), - DEFAULT_POKEMON_CENTER_COORDS, - }, - [HEAL_LOCATION_MAUVILLE_CITY - 1] = - { - .mapGroup = MAP_GROUP(MAP_MAUVILLE_CITY_POKEMON_CENTER_1F), - .mapNum = MAP_NUM(MAP_MAUVILLE_CITY_POKEMON_CENTER_1F), - DEFAULT_POKEMON_CENTER_COORDS, - }, - [HEAL_LOCATION_RUSTBORO_CITY - 1] = - { - .mapGroup = MAP_GROUP(MAP_RUSTBORO_CITY_POKEMON_CENTER_1F), - .mapNum = MAP_NUM(MAP_RUSTBORO_CITY_POKEMON_CENTER_1F), - DEFAULT_POKEMON_CENTER_COORDS, - }, - [HEAL_LOCATION_FORTREE_CITY - 1] = - { - .mapGroup = MAP_GROUP(MAP_FORTREE_CITY_POKEMON_CENTER_1F), - .mapNum = MAP_NUM(MAP_FORTREE_CITY_POKEMON_CENTER_1F), - DEFAULT_POKEMON_CENTER_COORDS, - }, - [HEAL_LOCATION_LILYCOVE_CITY - 1] = - { - .mapGroup = MAP_GROUP(MAP_LILYCOVE_CITY_POKEMON_CENTER_1F), - .mapNum = MAP_NUM(MAP_LILYCOVE_CITY_POKEMON_CENTER_1F), - DEFAULT_POKEMON_CENTER_COORDS, - }, - [HEAL_LOCATION_MOSSDEEP_CITY - 1] = - { - .mapGroup = MAP_GROUP(MAP_MOSSDEEP_CITY_POKEMON_CENTER_1F), - .mapNum = MAP_NUM(MAP_MOSSDEEP_CITY_POKEMON_CENTER_1F), - DEFAULT_POKEMON_CENTER_COORDS, - }, - [HEAL_LOCATION_SOOTOPOLIS_CITY - 1] = - { - .mapGroup = MAP_GROUP(MAP_SOOTOPOLIS_CITY_POKEMON_CENTER_1F), - .mapNum = MAP_NUM(MAP_SOOTOPOLIS_CITY_POKEMON_CENTER_1F), - DEFAULT_POKEMON_CENTER_COORDS, - }, - [HEAL_LOCATION_EVER_GRANDE_CITY - 1] = - { - .mapGroup = MAP_GROUP(MAP_EVER_GRANDE_CITY_POKEMON_CENTER_1F), - .mapNum = MAP_NUM(MAP_EVER_GRANDE_CITY_POKEMON_CENTER_1F), - DEFAULT_POKEMON_CENTER_COORDS, - }, - [HEAL_LOCATION_LITTLEROOT_TOWN_BRENDANS_HOUSE - 1] = - { - .mapGroup = MAP_GROUP(MAP_LITTLEROOT_TOWN_BRENDANS_HOUSE_1F), - .mapNum = MAP_NUM(MAP_LITTLEROOT_TOWN_BRENDANS_HOUSE_1F), - .x = 2, - .y = 7, - }, - [HEAL_LOCATION_LITTLEROOT_TOWN_MAYS_HOUSE - 1] = - { - .mapGroup = MAP_GROUP(MAP_LITTLEROOT_TOWN_MAYS_HOUSE_1F), - .mapNum = MAP_NUM(MAP_LITTLEROOT_TOWN_MAYS_HOUSE_1F), - .x = 8, - .y = 7, - }, - [HEAL_LOCATION_OLDALE_TOWN - 1] = - { - .mapGroup = MAP_GROUP(MAP_OLDALE_TOWN_POKEMON_CENTER_1F), - .mapNum = MAP_NUM(MAP_OLDALE_TOWN_POKEMON_CENTER_1F), - DEFAULT_POKEMON_CENTER_COORDS, - }, - [HEAL_LOCATION_DEWFORD_TOWN - 1] = - { - .mapGroup = MAP_GROUP(MAP_DEWFORD_TOWN_POKEMON_CENTER_1F), - .mapNum = MAP_NUM(MAP_DEWFORD_TOWN_POKEMON_CENTER_1F), - DEFAULT_POKEMON_CENTER_COORDS, - }, - [HEAL_LOCATION_LAVARIDGE_TOWN - 1] = - { - .mapGroup = MAP_GROUP(MAP_LAVARIDGE_TOWN_POKEMON_CENTER_1F), - .mapNum = MAP_NUM(MAP_LAVARIDGE_TOWN_POKEMON_CENTER_1F), - DEFAULT_POKEMON_CENTER_COORDS, - }, - [HEAL_LOCATION_FALLARBOR_TOWN - 1] = - { - .mapGroup = MAP_GROUP(MAP_FALLARBOR_TOWN_POKEMON_CENTER_1F), - .mapNum = MAP_NUM(MAP_FALLARBOR_TOWN_POKEMON_CENTER_1F), - DEFAULT_POKEMON_CENTER_COORDS, - }, - [HEAL_LOCATION_VERDANTURF_TOWN - 1] = - { - .mapGroup = MAP_GROUP(MAP_VERDANTURF_TOWN_POKEMON_CENTER_1F), - .mapNum = MAP_NUM(MAP_VERDANTURF_TOWN_POKEMON_CENTER_1F), - DEFAULT_POKEMON_CENTER_COORDS, - }, - [HEAL_LOCATION_PACIFIDLOG_TOWN - 1] = - { - .mapGroup = MAP_GROUP(MAP_PACIFIDLOG_TOWN_POKEMON_CENTER_1F), - .mapNum = MAP_NUM(MAP_PACIFIDLOG_TOWN_POKEMON_CENTER_1F), - DEFAULT_POKEMON_CENTER_COORDS, - }, - [HEAL_LOCATION_EVER_GRANDE_CITY_POKEMON_LEAGUE - 1] = - { - .mapGroup = MAP_GROUP(MAP_EVER_GRANDE_CITY_POKEMON_LEAGUE_1F), - .mapNum = MAP_NUM(MAP_EVER_GRANDE_CITY_POKEMON_LEAGUE_1F), - .x = 3, - .y = 4, - }, - [HEAL_LOCATION_SOUTHERN_ISLAND_EXTERIOR - 1] = - { - .mapGroup = MAP_GROUP(MAP_SOUTHERN_ISLAND_EXTERIOR), - .mapNum = MAP_NUM(MAP_SOUTHERN_ISLAND_EXTERIOR), - .x = 15, - .y = 20, - }, - [HEAL_LOCATION_BATTLE_FRONTIER_OUTSIDE_EAST - 1] = - { - .mapGroup = MAP_GROUP(MAP_BATTLE_FRONTIER_POKEMON_CENTER_1F), - .mapNum = MAP_NUM(MAP_BATTLE_FRONTIER_POKEMON_CENTER_1F), - DEFAULT_POKEMON_CENTER_COORDS, - }, -}; - -#undef DEFAULT_POKEMON_CENTER_COORDS - -// localIds can be found in the generated events.inc file for the specific heal location map -// e.g. for OldaleTown_PokemonCenter1F/events.inc the following entry gets generated: -// object_event 1, OBJ_EVENT_GFX_NURSE, 7, 2, 3, MOVEMENT_TYPE_FACE_DOWN, 0, 0, TRAINER_TYPE_NONE, 0, OldaleTown_PokemonCenter_1F_EventScript_Nurse, 0 -// In this case the localId is 1. -static const u8 sHealNpcLocalId[NUM_HEAL_LOCATIONS - 1] = -{ - [HEAL_LOCATION_LITTLEROOT_TOWN_BRENDANS_HOUSE_2F - 1] = 1, - [HEAL_LOCATION_LITTLEROOT_TOWN_MAYS_HOUSE_2F - 1] = 1, - [HEAL_LOCATION_PETALBURG_CITY - 1] = 1, - [HEAL_LOCATION_SLATEPORT_CITY - 1] = 1, - [HEAL_LOCATION_MAUVILLE_CITY - 1] = 1, - [HEAL_LOCATION_RUSTBORO_CITY - 1] = 1, - [HEAL_LOCATION_FORTREE_CITY - 1] = 1, - [HEAL_LOCATION_LILYCOVE_CITY - 1] = 1, - [HEAL_LOCATION_MOSSDEEP_CITY - 1] = 1, - [HEAL_LOCATION_SOOTOPOLIS_CITY - 1] = 1, - [HEAL_LOCATION_EVER_GRANDE_CITY - 1] = 1, - [HEAL_LOCATION_LITTLEROOT_TOWN_BRENDANS_HOUSE - 1] = 1, - [HEAL_LOCATION_LITTLEROOT_TOWN_MAYS_HOUSE - 1] = 1, - [HEAL_LOCATION_OLDALE_TOWN - 1] = 1, - [HEAL_LOCATION_DEWFORD_TOWN - 1] = 1, - [HEAL_LOCATION_LAVARIDGE_TOWN - 1] = 1, - [HEAL_LOCATION_FALLARBOR_TOWN - 1] = 1, - [HEAL_LOCATION_VERDANTURF_TOWN - 1] = 1, - [HEAL_LOCATION_PACIFIDLOG_TOWN - 1] = 1, - [HEAL_LOCATION_EVER_GRANDE_CITY_POKEMON_LEAGUE - 1] = 1, - [HEAL_LOCATION_SOUTHERN_ISLAND_EXTERIOR - 1] = 0, // no heal npc - [HEAL_LOCATION_BATTLE_FRONTIER_OUTSIDE_EAST - 1] = 1, -}; diff --git a/src/heal_location.c b/src/heal_location.c index b261fce17d..fd376e71e0 100644 --- a/src/heal_location.c +++ b/src/heal_location.c @@ -1,11 +1,11 @@ #include "global.h" #include "event_data.h" #include "heal_location.h" +#include "constants/event_objects.h" #include "constants/heal_locations.h" #include "constants/maps.h" #include "data/heal_locations.h" -#include "data/heal_locations_pkm_center.h" u32 GetHealLocationIndexByMap(u16 mapGroup, u16 mapNum) { @@ -81,14 +81,13 @@ u32 GetHealNpcLocalId(u32 healLocationId) if (healLocationId == HEAL_LOCATION_NONE || healLocationId >= NUM_HEAL_LOCATIONS) return 0; - return sHealNpcLocalId[healLocationId - 1]; + return sWhiteoutRespawnHealerNpcIds[healLocationId - 1]; } void SetWhiteoutRespawnWarpAndHealerNPC(struct WarpData *warp) { u32 healLocationId = GetHealLocationIndexByWarpData(&gSaveBlock1Ptr->lastHealLocation); u32 healNpcLocalId = GetHealNpcLocalId(healLocationId); - struct HealLocation pkmCenterHealLocation; if (!healNpcLocalId) { @@ -96,11 +95,10 @@ void SetWhiteoutRespawnWarpAndHealerNPC(struct WarpData *warp) return; } - pkmCenterHealLocation = sHealLocationsPokemonCenter[healLocationId - 1]; - warp->mapGroup = pkmCenterHealLocation.mapGroup; - warp->mapNum = pkmCenterHealLocation.mapNum; + warp->mapGroup = sWhiteoutRespawnHealCenterMapIdxs[healLocationId - 1][0]; + warp->mapNum = sWhiteoutRespawnHealCenterMapIdxs[healLocationId - 1][1]; warp->warpId = WARP_ID_NONE; - warp->x = pkmCenterHealLocation.x; - warp->y = pkmCenterHealLocation.y; + warp->x = sWhiteoutRespawnHealCenterMapIdxs[healLocationId - 1][2]; + warp->y = sWhiteoutRespawnHealCenterMapIdxs[healLocationId - 1][3]; gSpecialVar_LastTalked = healNpcLocalId; }