summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorfl4shk <fl4shk@users.noreply.github.com>2016-11-04 21:50:44 -0700
committerYamaArashi <shadow962@live.com>2016-11-05 10:29:27 -0700
commitbb020226fcf8f06258aaada4b39b61fb0f9f9d93 (patch)
treef9f1d0a59d9b650550622ed894f275f901fb427a
parent356e04a104f3ac8db482cfeb511dacfa7bde5e53 (diff)
heal_location.c and landmark.c
-rw-r--r--asm/heal_location.s86
-rw-r--r--asm/landmark.s132
-rw-r--r--ld_script.txt4
-rw-r--r--src/heal_location.c59
-rw-r--r--src/landmark.c127
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;
+}
+