diff options
-rw-r--r-- | asm/heal_location.s | 86 | ||||
-rw-r--r-- | asm/landmark.s | 132 | ||||
-rw-r--r-- | ld_script.txt | 4 | ||||
-rw-r--r-- | src/heal_location.c | 59 | ||||
-rw-r--r-- | src/landmark.c | 127 |
5 files changed, 188 insertions, 220 deletions
diff --git a/asm/heal_location.s b/asm/heal_location.s deleted file mode 100644 index bc156678f..000000000 --- a/asm/heal_location.s +++ /dev/null @@ -1,86 +0,0 @@ - .include "constants/gba_constants.inc" - .include "constants/species_constants.inc" - .include "asm/macros.inc" - - .syntax unified - - .text - - thumb_func_start GetHealLocationIndexByMap -GetHealLocationIndexByMap: @ 80FA86C - push {r4,lr} - lsls r0, 16 - lsrs r4, r0, 16 - lsls r1, 16 - lsrs r1, 16 - movs r3, 0 - ldr r2, _080FA890 @ =gHealLocations -_080FA87A: - movs r0, 0 - ldrsb r0, [r2, r0] - cmp r0, r4 - bne _080FA894 - movs r0, 0x1 - ldrsb r0, [r2, r0] - cmp r0, r1 - bne _080FA894 - adds r0, r3, 0x1 - b _080FA89E - .align 2, 0 -_080FA890: .4byte gHealLocations -_080FA894: - adds r2, 0x8 - adds r3, 0x1 - cmp r3, 0x15 - bls _080FA87A - movs r0, 0 -_080FA89E: - pop {r4} - pop {r1} - bx r1 - thumb_func_end GetHealLocationIndexByMap - - thumb_func_start GetHealLocationByMap -GetHealLocationByMap: @ 80FA8A4 - push {lr} - lsls r0, 16 - lsrs r0, 16 - lsls r1, 16 - lsrs r1, 16 - bl GetHealLocationIndexByMap - cmp r0, 0 - beq _080FA8C4 - lsls r0, 3 - ldr r1, _080FA8C0 @ =gHealLocations - 0x8 - adds r0, r1 - b _080FA8C6 - .align 2, 0 -_080FA8C0: .4byte gHealLocations - 0x8 -_080FA8C4: - movs r0, 0 -_080FA8C6: - pop {r1} - bx r1 - thumb_func_end GetHealLocationByMap - - thumb_func_start GetHealLocation -GetHealLocation: @ 80FA8CC - push {lr} - cmp r0, 0 - beq _080FA8E4 - cmp r0, 0x16 - bhi _080FA8E4 - lsls r0, 3 - ldr r1, _080FA8E0 @ =gHealLocations - 0x8 - adds r0, r1 - b _080FA8E6 - .align 2, 0 -_080FA8E0: .4byte gHealLocations - 0x8 -_080FA8E4: - movs r0, 0 -_080FA8E6: - pop {r1} - bx r1 - thumb_func_end GetHealLocation - - .align 2, 0 @ Don't pad with nop. diff --git a/asm/landmark.s b/asm/landmark.s deleted file mode 100644 index 9e74feadd..000000000 --- a/asm/landmark.s +++ /dev/null @@ -1,132 +0,0 @@ - .include "constants/gba_constants.inc" - .include "constants/species_constants.inc" - .include "asm/macros.inc" - - .syntax unified - - .text - - thumb_func_start GetLandmarkName -GetLandmarkName: @ 811A8CC - push {r4-r6,lr} - lsls r0, 24 - lsrs r0, 24 - lsls r1, 24 - lsrs r1, 24 - lsls r2, 24 - lsrs r5, r2, 24 - bl GetLandmarkList - adds r4, r0, 0 - cmp r4, 0 - bne _0811A8E8 -_0811A8E4: - movs r0, 0 - b _0811A91A -_0811A8E8: - ldr r6, _0811A8EC @ =0x0000ffff - b _0811A8FE - .align 2, 0 -_0811A8EC: .4byte 0x0000ffff -_0811A8F0: - subs r0, r5, 0x1 - lsls r0, 24 - lsrs r5, r0, 24 -_0811A8F6: - adds r4, 0x4 - ldr r0, [r4] - cmp r0, 0 - beq _0811A8E4 -_0811A8FE: - ldr r1, [r4] - ldrh r0, [r1, 0x4] - cmp r0, r6 - beq _0811A912 - bl FlagGet - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - bne _0811A8F6 -_0811A912: - cmp r5, 0 - bne _0811A8F0 - ldr r0, [r4] - ldr r0, [r0] -_0811A91A: - pop {r4-r6} - pop {r1} - bx r1 - thumb_func_end GetLandmarkName - - thumb_func_start GetLandmarkList -GetLandmarkList: @ 811A920 - push {r4-r6,lr} - lsls r0, 24 - lsrs r3, r0, 24 - lsls r1, 24 - lsrs r6, r1, 24 - movs r2, 0 - ldr r0, _0811A964 @ =gLandmarkLists - ldrb r1, [r0] - adds r4, r0, 0 - cmp r1, 0x58 - beq _0811A990 - adds r1, r4, 0 -_0811A938: - lsls r0, r2, 3 - adds r0, r1 - ldrb r0, [r0] - cmp r0, r3 - bhi _0811A990 - cmp r0, r3 - beq _0811A956 - adds r0, r2, 0x1 - lsls r0, 16 - lsrs r2, r0, 16 - lsls r0, r2, 3 - adds r0, r1 - ldrb r0, [r0] - cmp r0, 0x58 - bne _0811A938 -_0811A956: - lsls r0, r2, 3 - adds r0, r1 - ldrb r0, [r0] - cmp r0, 0x58 - bne _0811A970 - b _0811A990 - .align 2, 0 -_0811A964: .4byte gLandmarkLists -_0811A968: - adds r0, r4, 0x4 - adds r0, r1, r0 - ldr r0, [r0] - b _0811A992 -_0811A970: - cmp r0, r3 - bne _0811A990 - ldr r5, _0811A998 @ =gLandmarkLists -_0811A976: - lsls r1, r2, 3 - adds r0, r1, r5 - ldrb r0, [r0, 0x1] - cmp r0, r6 - beq _0811A968 - adds r0, r2, 0x1 - lsls r0, 16 - lsrs r2, r0, 16 - lsls r0, r2, 3 - adds r0, r4 - ldrb r0, [r0] - cmp r0, r3 - beq _0811A976 -_0811A990: - movs r0, 0 -_0811A992: - pop {r4-r6} - pop {r1} - bx r1 - .align 2, 0 -_0811A998: .4byte gLandmarkLists - thumb_func_end GetLandmarkList - - .align 2, 0 @ Don't pad with nop. diff --git a/ld_script.txt b/ld_script.txt index fce9bea7b..c161a6daf 100644 --- a/ld_script.txt +++ b/ld_script.txt @@ -148,7 +148,7 @@ SECTIONS { asm/menu_helpers.o(.text); asm/script_pokemon_util_80F99CC.o(.text); src/dewford_trend.o(.text); - asm/heal_location.o(.text); + src/heal_location.o(.text); asm/region_map.o(.text); asm/cute_sketch.o(.text); asm/decoration.o(.text); @@ -165,7 +165,7 @@ SECTIONS { asm/roulette.o(.text); asm/pokedex_cry_screen.o(.text); src/coins.o(.text); - asm/landmark.o(.text); + src/landmark.o(.text); asm/fldeff_strength.o(.text); asm/battle_transition.o(.text); asm/battle_811DA74.o(.text); 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; +} + |