diff options
author | fl4shk <fl4shk@users.noreply.github.com> | 2016-11-04 21:50:44 -0700 |
---|---|---|
committer | YamaArashi <shadow962@live.com> | 2016-11-05 10:29:27 -0700 |
commit | bb020226fcf8f06258aaada4b39b61fb0f9f9d93 (patch) | |
tree | f9f1d0a59d9b650550622ed894f275f901fb427a /src | |
parent | 356e04a104f3ac8db482cfeb511dacfa7bde5e53 (diff) |
heal_location.c and landmark.c
Diffstat (limited to 'src')
-rw-r--r-- | src/heal_location.c | 59 | ||||
-rw-r--r-- | src/landmark.c | 127 |
2 files changed, 186 insertions, 0 deletions
diff --git a/src/heal_location.c b/src/heal_location.c new file mode 100644 index 000000000..8975898f3 --- /dev/null +++ b/src/heal_location.c @@ -0,0 +1,59 @@ +#include "global.h" + +extern s8 gHealLocations[]; + + +u32 GetHealLocationIndexByMap(u16 arg_0, u16 arg_1) +{ + u32 i = 0; + + s8 *temp = &(gHealLocations[0]); + + for ( ; i<=0x15; i++) + { + if (temp[0] != arg_0) + { + temp += 8; + } + else if (temp[1] != arg_1) + { + temp += 8; + } + else + { + return i + 1; + } + } + + return 0; +} + +u32 GetHealLocationByMap(u16 arg_0, u16 arg_1) +{ + int temp = GetHealLocationIndexByMap(arg_0, arg_1); + + if (!temp) + { + return 0; + } + else + { + return (u32)(gHealLocations - 8 + (temp << 3)); + } +} + +u32 GetHealLocation(u32 arg_0) +{ + if (arg_0 == 0) + { + return 0; + } + else if (arg_0 > 0x16) + { + return 0; + } + else + { + return (u32)(gHealLocations - 8 + (arg_0 << 3)); + } +} diff --git a/src/landmark.c b/src/landmark.c new file mode 100644 index 000000000..a343cecac --- /dev/null +++ b/src/landmark.c @@ -0,0 +1,127 @@ +#include "global.h" + +struct Landmark +{ + u8 *name; + u16 flag_id; +}; + +struct LandmarkList +{ + u8 field_0; + u8 field_1; + u16 field_2; + + struct Landmark **landmark_list; +}; + +extern const struct LandmarkList gLandmarkLists[]; + +const struct Landmark **GetLandmarkList(u8 arg_0, u8 arg_1); + +u8 *GetLandmarkName(u8 arg_0, u8 arg_1, u8 count) +{ + register struct Landmark **landmark_list asm("r4") + = GetLandmarkList(arg_0, arg_1); + + if (landmark_list == NULL) + { + return NULL; + } + + while (1) + { + register struct Landmark *landmark asm("r1") = *landmark_list; + + u16 temp_flag_id = landmark->flag_id; + + if (temp_flag_id != 0xFFFF) + { + bool8 temp_flag = FlagGet(temp_flag_id); + + if (temp_flag == TRUE) + { + if (count == 0) + { + break; + } + else + { + count--; + goto _0811A8F6; + } + } + else + { + goto _0811A8F6; + } + } + else + { + if (count == 0) + { + break; + } + else + { + count--; + goto _0811A8F6; + } + } + + continue; + + _0811A8F6: + landmark_list++; + + if (*landmark_list == NULL) + { + return NULL; + } + } + + return (*landmark_list)->name; + +} + + +const struct Landmark **GetLandmarkList(u8 arg_0, u8 arg_1) +{ + u16 i; + + i = 0; + + if (gLandmarkLists[0].field_0 == 0x58) + { + return NULL; + } + + + for (; gLandmarkLists[i].field_0 != 0x58; i++) + { + if (gLandmarkLists[i].field_0 > arg_0) + { + return NULL; + } + if (gLandmarkLists[i].field_0 == arg_0) + { + break; + } + } + + if (gLandmarkLists[i].field_0 == 0x58) + { + return NULL; + } + + for (; gLandmarkLists[i].field_0 == arg_0; i++) + { + if (gLandmarkLists[i].field_1 == arg_1) + { + return gLandmarkLists[i].landmark_list; + } + } + + return 0; +} + |