diff options
author | scnorton <scnorton@biociphers.org> | 2017-10-16 14:12:59 -0400 |
---|---|---|
committer | scnorton <scnorton@biociphers.org> | 2017-10-16 14:12:59 -0400 |
commit | a6d2bfaebd16940fc0ac1be3ca29caf0888296ca (patch) | |
tree | 7ec979bc8481b2c2d55874aef3e9004ddb715781 /src/field/landmark.c | |
parent | 96ebc5d46287e33df7bda74a6fb340281cdaa4c5 (diff) | |
parent | 7d657ef56716fd01bacf4a47df50ad0ec3d03b10 (diff) |
Merge branch 'master' into secret_base
Diffstat (limited to 'src/field/landmark.c')
-rw-r--r-- | src/field/landmark.c | 73 |
1 files changed, 73 insertions, 0 deletions
diff --git a/src/field/landmark.c b/src/field/landmark.c new file mode 100644 index 000000000..6a53716bb --- /dev/null +++ b/src/field/landmark.c @@ -0,0 +1,73 @@ +#include "global.h" +#include "landmark.h" +#include "event_data.h" + +#define MAPSEC_NONE 0x58 + +struct Landmark +{ + u8 *name; + u16 flag; +}; + +struct LandmarkList +{ + u8 mapSection; + u8 id; + const struct Landmark **landmarks; +}; + +extern const struct LandmarkList gLandmarkLists[]; + +static const struct Landmark **GetLandmarks(u8 mapSection, u8 id); + +u8 *GetLandmarkName(u8 mapSection, u8 id, u8 count) +{ + const struct Landmark **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 **GetLandmarks(u8 mapSection, u8 id) +{ + u16 i = 0; + + for (; gLandmarkLists[i].mapSection != MAPSEC_NONE; i++) + { + if (gLandmarkLists[i].mapSection > mapSection) + return NULL; + if (gLandmarkLists[i].mapSection == mapSection) + break; + } + + if (gLandmarkLists[i].mapSection == MAPSEC_NONE) + return NULL; + + for (; gLandmarkLists[i].mapSection == mapSection; i++) + { + if (gLandmarkLists[i].id == id) + return gLandmarkLists[i].landmarks; + } + + return NULL; +} |