summaryrefslogtreecommitdiff
path: root/src/landmark.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/landmark.c')
-rw-r--r--src/landmark.c417
1 files changed, 417 insertions, 0 deletions
diff --git a/src/landmark.c b/src/landmark.c
new file mode 100644
index 000000000..476821ec6
--- /dev/null
+++ b/src/landmark.c
@@ -0,0 +1,417 @@
+#include "global.h"
+#include "landmark.h"
+#include "event_data.h"
+#include "region_map_sections.h"
+
+struct Landmark
+{
+ const u8 *name;
+ u16 flag;
+};
+
+struct LandmarkList
+{
+ u8 mapSection;
+ u8 id;
+ const struct Landmark *const *landmarks;
+};
+
+extern const u8 gLandmarkName_FlowerShop[];
+extern const u8 gLandmarkName_PetalburgWoods[];
+extern const u8 gLandmarkName_MrBrineysCottage[];
+extern const u8 gLandmarkName_AbandonedShip[];
+extern const u8 gLandmarkName_SeashoreHouse[];
+extern const u8 gLandmarkName_SlateportBeach[];
+extern const u8 gLandmarkName_CyclingRoad[];
+extern const u8 gLandmarkName_NewMauville[];
+extern const u8 gLandmarkName_TrickHouse[];
+extern const u8 gLandmarkName_OldLadysRestShop[];
+extern const u8 gLandmarkName_Desert[];
+extern const u8 gLandmarkName_WinstrateFamily[];
+extern const u8 gLandmarkName_CableCar[];
+extern const u8 gLandmarkName_GlassWorkshop[];
+extern const u8 gLandmarkName_WeatherInstitute[];
+extern const u8 gLandmarkName_MeteorFalls[];
+extern const u8 gLandmarkName_TunnelersRestHouse[];
+extern const u8 gLandmarkName_RusturfTunnel[];
+extern const u8 gLandmarkName_PokemonDayCare[];
+extern const u8 gLandmarkName_SafariZoneEntrance[];
+extern const u8 gLandmarkName_MtPyre[];
+extern const u8 gLandmarkName_ShoalCave[];
+extern const u8 gLandmarkName_SeafloorCavern[];
+extern const u8 gLandmarkName_GraniteCave[];
+extern const u8 gLandmarkName_OceanCurrent[];
+extern const u8 gLandmarkName_LanettesHouse[];
+extern const u8 gLandmarkName_FieryPath[];
+extern const u8 gLandmarkName_JaggedPass[];
+extern const u8 gLandmarkName_BerryMastersHouse[];
+extern const u8 gLandmarkName_IslandCave[];
+extern const u8 gLandmarkName_DesertRuins[];
+extern const u8 gLandmarkName_ScorchedSlab[];
+extern const u8 gLandmarkName_AncientTomb[];
+extern const u8 gLandmarkName_SealedChamber[];
+extern const u8 gLandmarkName_FossilManiacsHouse[];
+extern const u8 gLandmarkName_HuntersHouse[];
+extern const u8 gLandmarkName_SkyPillar[];
+
+static const struct Landmark Landmark_FlowerShop = {gLandmarkName_FlowerShop, FLAG_LANDMARK_FLOWER_SHOP};
+static const struct Landmark Landmark_PetalburgWoods = {gLandmarkName_PetalburgWoods, -1};
+static const struct Landmark Landmark_MrBrineysCottage = {gLandmarkName_MrBrineysCottage, FLAG_LANDMARK_MR_BRINEY_HOUSE};
+static const struct Landmark Landmark_AbandonedShip = {gLandmarkName_AbandonedShip, FLAG_LANDMARK_ABANDONED_SHIP};
+static const struct Landmark Landmark_SeashoreHouse = {gLandmarkName_SeashoreHouse, FLAG_LANDMARK_SEASHORE_HOUSE};
+static const struct Landmark Landmark_SlateportBeach = {gLandmarkName_SlateportBeach, -1};
+static const struct Landmark Landmark_CyclingRoad = {gLandmarkName_CyclingRoad, -1};
+static const struct Landmark Landmark_NewMauville = {gLandmarkName_NewMauville, FLAG_LANDMARK_NEW_MAUVILLE};
+static const struct Landmark Landmark_TrickHouse = {gLandmarkName_TrickHouse, FLAG_LANDMARK_TRICK_HOUSE};
+static const struct Landmark Landmark_OldLadysRestShop = {gLandmarkName_OldLadysRestShop, FLAG_LANDMARK_OLD_LADY_REST_SHOP};
+static const struct Landmark Landmark_Desert = {gLandmarkName_Desert, -1};
+static const struct Landmark Landmark_WinstrateFamily = {gLandmarkName_WinstrateFamily, FLAG_LANDMARK_WINSTRATE_FAMILY};
+static const struct Landmark Landmark_CableCar = {gLandmarkName_CableCar, -1};
+static const struct Landmark Landmark_GlassWorkshop = {gLandmarkName_GlassWorkshop, FLAG_LANDMARK_GLASS_WORKSHOP};
+static const struct Landmark Landmark_WeatherInstitute = {gLandmarkName_WeatherInstitute, -1};
+static const struct Landmark Landmark_MeteorFalls = {gLandmarkName_MeteorFalls, -1};
+static const struct Landmark Landmark_TunnelersRestHouse = {gLandmarkName_TunnelersRestHouse, FLAG_LANDMARK_TUNNELERS_REST_HOUSE};
+static const struct Landmark Landmark_RusturfTunnel = {gLandmarkName_RusturfTunnel, -1};
+static const struct Landmark Landmark_PokemonDayCare = {gLandmarkName_PokemonDayCare, FLAG_LANDMARK_POKEMON_DAYCARE};
+static const struct Landmark Landmark_SafariZoneEntrance = {gLandmarkName_SafariZoneEntrance, -1};
+static const struct Landmark Landmark_MtPyre = {gLandmarkName_MtPyre, -1};
+static const struct Landmark Landmark_ShoalCave = {gLandmarkName_ShoalCave, -1};
+static const struct Landmark Landmark_SeafloorCavern = {gLandmarkName_SeafloorCavern, FLAG_LANDMARK_SEAFLOOR_CAVERN};
+static const struct Landmark Landmark_GraniteCave = {gLandmarkName_GraniteCave, -1};
+static const struct Landmark Landmark_OceanCurrent = {gLandmarkName_OceanCurrent, -1};
+static const struct Landmark Landmark_LanettesHouse = {gLandmarkName_LanettesHouse, FLAG_LANDMARK_LANETTES_HOUSE};
+static const struct Landmark Landmark_FieryPath = {gLandmarkName_FieryPath, FLAG_LANDMARK_FIERY_PATH};
+static const struct Landmark Landmark_JaggedPass = {gLandmarkName_JaggedPass, -1};
+static const struct Landmark Landmark_BerryMastersHouse = {gLandmarkName_BerryMastersHouse, FLAG_LANDMARK_BERRY_MASTERS_HOUSE};
+static const struct Landmark Landmark_IslandCave = {gLandmarkName_IslandCave, FLAG_LANDMARK_ISLAND_CAVE};
+static const struct Landmark Landmark_DesertRuins = {gLandmarkName_DesertRuins, FLAG_LANDMARK_DESERT_RUINS};
+static const struct Landmark Landmark_ScorchedSlab = {gLandmarkName_ScorchedSlab, FLAG_LANDMARK_SCORCHED_SLAB};
+static const struct Landmark Landmark_AncientTomb = {gLandmarkName_AncientTomb, FLAG_LANDMARK_ANCIENT_TOMB};
+static const struct Landmark Landmark_SealedChamber = {gLandmarkName_SealedChamber, FLAG_LANDMARK_SEALED_CHAMBER};
+static const struct Landmark Landmark_FossilManiacsHouse = {gLandmarkName_FossilManiacsHouse, FLAG_LANDMARK_FOSSIL_MANIACS_HOUSE};
+static const struct Landmark Landmark_HuntersHouse = {gLandmarkName_HuntersHouse, FLAG_LANDMARK_HUNTERS_HOUSE};
+static const struct Landmark Landmark_SkyPillar = {gLandmarkName_SkyPillar, FLAG_LANDMARK_SKY_PILLAR};
+
+static const struct Landmark *const Landmarks_Route104_0[] =
+{
+ &Landmark_FlowerShop,
+ NULL,
+};
+
+static const struct Landmark *const Landmarks_Route104_1[] =
+{
+ &Landmark_PetalburgWoods,
+ &Landmark_MrBrineysCottage,
+ NULL,
+};
+
+static const struct Landmark *const Landmarks_Route105_0[] =
+{
+ &Landmark_IslandCave,
+ NULL,
+};
+
+static const struct Landmark *const Landmarks_Route106_1[] =
+{
+ &Landmark_GraniteCave,
+ NULL,
+};
+
+static const struct Landmark *const Landmarks_Route108_0[] =
+{
+ &Landmark_AbandonedShip,
+ NULL,
+};
+
+static const struct Landmark *const Landmarks_Route109_0[] =
+{
+ &Landmark_SeashoreHouse,
+ &Landmark_SlateportBeach,
+ NULL,
+};
+
+static const struct Landmark *const Landmarks_Route110_0[] =
+{
+ &Landmark_CyclingRoad,
+ &Landmark_NewMauville,
+ NULL,
+};
+
+static const struct Landmark *const Landmarks_Route110_1[] =
+{
+ &Landmark_CyclingRoad,
+ NULL,
+};
+
+static const struct Landmark *const Landmarks_Route110_2[] =
+{
+ &Landmark_CyclingRoad,
+ &Landmark_TrickHouse,
+ NULL,
+};
+
+static const struct Landmark *const Landmarks_Route111_0[] =
+{
+ &Landmark_OldLadysRestShop,
+ NULL,
+};
+
+static const struct Landmark *const Landmarks_Route111_1[] =
+{
+ &Landmark_Desert,
+ NULL,
+};
+
+static const struct Landmark *const Landmarks_Route111_3[] =
+{
+ &Landmark_DesertRuins,
+ &Landmark_Desert,
+ NULL,
+};
+
+static const struct Landmark *const Landmarks_Route111_4[] =
+{
+ &Landmark_WinstrateFamily,
+ &Landmark_Desert,
+ NULL,
+};
+
+static const struct Landmark *const Landmarks_Route112_0[] =
+{
+ &Landmark_FieryPath,
+ &Landmark_JaggedPass,
+ NULL,
+};
+
+static const struct Landmark *const Landmarks_Route112_1[] =
+{
+ &Landmark_CableCar,
+ &Landmark_FieryPath,
+ NULL,
+};
+
+static const struct Landmark *const Landmarks_Route113_1[] =
+{
+ &Landmark_GlassWorkshop,
+ NULL,
+};
+
+static const struct Landmark *const Landmarks_Route114_1[] =
+{
+ &Landmark_FossilManiacsHouse,
+ NULL,
+};
+
+static const struct Landmark *const Landmarks_Route114_2[] =
+{
+ &Landmark_LanettesHouse,
+ NULL,
+};
+
+static const struct Landmark *const Landmarks_MeteorFalls[] =
+{
+ &Landmark_MeteorFalls,
+ NULL,
+};
+
+static const struct Landmark *const Landmarks_Route116_1[] =
+{
+ &Landmark_TunnelersRestHouse,
+ &Landmark_RusturfTunnel,
+ NULL,
+};
+
+static const struct Landmark *const Landmarks_Route116_2[] =
+{
+ &Landmark_RusturfTunnel,
+ NULL,
+};
+
+static const struct Landmark *const Landmarks_Route117_2[] =
+{
+ &Landmark_PokemonDayCare,
+ NULL,
+};
+
+static const struct Landmark *const Landmarks_Route119_1[] =
+{
+ &Landmark_WeatherInstitute,
+ NULL,
+};
+
+static const struct Landmark *const Landmarks_Route120_0[] =
+{
+ &Landmark_ScorchedSlab,
+ NULL,
+};
+
+static const struct Landmark *const Landmarks_Route120_2[] =
+{
+ &Landmark_AncientTomb,
+ NULL,
+};
+
+static const struct Landmark *const Landmarks_Route121_2[] =
+{
+ &Landmark_SafariZoneEntrance,
+ NULL,
+};
+
+static const struct Landmark *const Landmarks_Route122_0[] =
+{
+ &Landmark_MtPyre,
+ NULL,
+};
+
+static const struct Landmark *const Landmarks_Route123_0[] =
+{
+ &Landmark_BerryMastersHouse,
+ NULL,
+};
+
+static const struct Landmark *const Landmarks_Route124_7[] =
+{
+ &Landmark_HuntersHouse,
+ NULL,
+};
+
+static const struct Landmark *const Landmarks_Route125_2[] =
+{
+ &Landmark_ShoalCave,
+ NULL,
+};
+
+static const struct Landmark *const Landmarks_Route128_1[] =
+{
+ &Landmark_SeafloorCavern,
+ NULL,
+};
+
+static const struct Landmark *const Landmarks_Route131_1[] =
+{
+ &Landmark_SkyPillar,
+ NULL,
+};
+
+static const struct Landmark *const Landmarks_OceanCurrent[] =
+{
+ &Landmark_OceanCurrent,
+ NULL,
+};
+
+static const struct Landmark *const Landmarks_Route134_2[] =
+{
+ &Landmark_SealedChamber,
+ &Landmark_OceanCurrent,
+ NULL,
+};
+
+static const struct Landmark *const Landmarks_MtChimney_2[] =
+{
+ &Landmark_CableCar,
+ &Landmark_JaggedPass,
+ NULL,
+};
+
+static const struct LandmarkList gLandmarkLists[] =
+{
+ {MAPSEC_Route104, 0, Landmarks_Route104_0},
+ {MAPSEC_Route104, 1, Landmarks_Route104_1},
+ {MAPSEC_Route105, 0, Landmarks_Route105_0},
+ {MAPSEC_Route106, 1, Landmarks_Route106_1},
+ {MAPSEC_Route108, 0, Landmarks_Route108_0},
+ {MAPSEC_Route109, 0, Landmarks_Route109_0},
+ {MAPSEC_Route110, 0, Landmarks_Route110_0},
+ {MAPSEC_Route110, 1, Landmarks_Route110_1},
+ {MAPSEC_Route110, 2, Landmarks_Route110_2},
+ {MAPSEC_Route111, 0, Landmarks_Route111_0},
+ {MAPSEC_Route111, 1, Landmarks_Route111_1},
+ {MAPSEC_Route111, 2, Landmarks_Route111_1},
+ {MAPSEC_Route111, 3, Landmarks_Route111_3},
+ {MAPSEC_Route111, 4, Landmarks_Route111_4},
+ {MAPSEC_Route112, 0, Landmarks_Route112_0},
+ {MAPSEC_Route112, 1, Landmarks_Route112_1},
+ {MAPSEC_Route113, 1, Landmarks_Route113_1},
+ {MAPSEC_Route114, 1, Landmarks_Route114_1},
+ {MAPSEC_Route114, 2, Landmarks_Route114_2},
+ {MAPSEC_Route114, 3, Landmarks_MeteorFalls},
+ {MAPSEC_Route115, 0, Landmarks_MeteorFalls},
+ {MAPSEC_Route115, 1, Landmarks_MeteorFalls},
+ {MAPSEC_Route116, 1, Landmarks_Route116_1},
+ {MAPSEC_Route116, 2, Landmarks_Route116_2},
+ {MAPSEC_Route117, 2, Landmarks_Route117_2},
+ {MAPSEC_Route119, 1, Landmarks_Route119_1},
+ {MAPSEC_Route120, 0, Landmarks_Route120_0},
+ {MAPSEC_Route120, 2, Landmarks_Route120_2},
+ {MAPSEC_Route121, 2, Landmarks_Route121_2},
+ {MAPSEC_Route122, 0, Landmarks_Route122_0},
+ {MAPSEC_Route123, 0, Landmarks_Route123_0},
+ {MAPSEC_Route122, 1, Landmarks_Route122_0},
+ {MAPSEC_Route124, 7, Landmarks_Route124_7},
+ {MAPSEC_Route125, 2, Landmarks_Route125_2},
+ {MAPSEC_Route128, 1, Landmarks_Route128_1},
+ {MAPSEC_Route131, 1, Landmarks_Route131_1},
+ {MAPSEC_Route132, 0, Landmarks_OceanCurrent},
+ {MAPSEC_Route132, 1, Landmarks_OceanCurrent},
+ {MAPSEC_Route133, 0, Landmarks_OceanCurrent},
+ {MAPSEC_Route133, 1, Landmarks_OceanCurrent},
+ {MAPSEC_Route133, 2, Landmarks_OceanCurrent},
+ {MAPSEC_Route134, 0, Landmarks_OceanCurrent},
+ {MAPSEC_Route134, 1, Landmarks_OceanCurrent},
+ {MAPSEC_Route134, 2, Landmarks_Route134_2},
+ {MAPSEC_MtChimney, 2, Landmarks_MtChimney_2},
+ {MAPSEC_Nothing, 0, NULL},
+};
+
+static const struct Landmark *const *GetLandmarks(u8 mapSection, u8 id);
+
+const u8 *GetLandmarkName(u8 mapSection, u8 id, u8 count)
+{
+ const struct Landmark *const *landmarks = GetLandmarks(mapSection, id);
+
+ if (!landmarks)
+ return NULL;
+
+ while (1)
+ {
+ const struct Landmark *landmark = *landmarks;
+
+ if (landmark->flag == 0xFFFF || FlagGet(landmark->flag) == TRUE)
+ {
+ if (count == 0)
+ break;
+ else
+ count--;
+ }
+
+ landmarks++;
+ if (!*landmarks)
+ return NULL;
+ }
+
+ return (*landmarks)->name;
+}
+
+static const struct Landmark *const *GetLandmarks(u8 mapSection, u8 id)
+{
+ u16 i = 0;
+
+ for (; gLandmarkLists[i].mapSection != MAPSEC_Nothing; i++)
+ {
+ if (gLandmarkLists[i].mapSection > mapSection)
+ return NULL;
+ if (gLandmarkLists[i].mapSection == mapSection)
+ break;
+ }
+
+ if (gLandmarkLists[i].mapSection == MAPSEC_Nothing)
+ return NULL;
+
+ for (; gLandmarkLists[i].mapSection == mapSection; i++)
+ {
+ if (gLandmarkLists[i].id == id)
+ return gLandmarkLists[i].landmarks;
+ }
+
+ return NULL;
+}