summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPikalaxALT <pikalaxalt@gmail.com>2019-05-16 14:59:25 -0400
committerPikalaxALT <pikalaxalt@gmail.com>2019-05-16 14:59:25 -0400
commit48986b0c9e9c6eb2960b196db0350288d0d96110 (patch)
tree017856d865adc46483f928006b3c3a6baa019ea2
parentfa52c7fc159a749cb97f4a78d7cf39781b55c62f (diff)
Decompile heal_location common funcs
-rw-r--r--asm/heal_location.s77
-rw-r--r--data/data_835B488.s29
-rw-r--r--ld_script.txt3
-rw-r--r--src/heal_location.c59
4 files changed, 63 insertions, 105 deletions
diff --git a/asm/heal_location.s b/asm/heal_location.s
index bdf12aa5d..d8043acae 100644
--- a/asm/heal_location.s
+++ b/asm/heal_location.s
@@ -5,83 +5,6 @@
.text
- thumb_func_start GetHealLocationIndexFromMapGroupAndNum
-GetHealLocationIndexFromMapGroupAndNum: @ 80BFC50
- push {r4,lr}
- lsls r0, 16
- lsrs r4, r0, 16
- lsls r1, 16
- lsrs r1, 16
- movs r3, 0
- ldr r2, _080BFC74 @ =sSpawnPoints
-_080BFC5E:
- movs r0, 0
- ldrsb r0, [r2, r0]
- cmp r0, r4
- bne _080BFC78
- movs r0, 0x1
- ldrsb r0, [r2, r0]
- cmp r0, r1
- bne _080BFC78
- adds r0, r3, 0x1
- b _080BFC82
- .align 2, 0
-_080BFC74: .4byte sSpawnPoints
-_080BFC78:
- adds r2, 0x8
- adds r3, 0x1
- cmp r3, 0x13
- bls _080BFC5E
- movs r0, 0
-_080BFC82:
- pop {r4}
- pop {r1}
- bx r1
- thumb_func_end GetHealLocationIndexFromMapGroupAndNum
-
- thumb_func_start GetHealLocationPointerFromMapGroupAndNum
-GetHealLocationPointerFromMapGroupAndNum: @ 80BFC88
- push {lr}
- lsls r0, 16
- lsrs r0, 16
- lsls r1, 16
- lsrs r1, 16
- bl GetHealLocationIndexFromMapGroupAndNum
- cmp r0, 0
- beq _080BFCA8
- lsls r0, 3
- ldr r1, _080BFCA4 @ =sSpawnPoints - 8
- adds r0, r1
- b _080BFCAA
- .align 2, 0
-_080BFCA4: .4byte sSpawnPoints - 8
-_080BFCA8:
- movs r0, 0
-_080BFCAA:
- pop {r1}
- bx r1
- thumb_func_end GetHealLocationPointerFromMapGroupAndNum
-
- thumb_func_start GetHealLocationPointer
-GetHealLocationPointer: @ 80BFCB0
- push {lr}
- cmp r0, 0
- beq _080BFCC8
- cmp r0, 0x14
- bhi _080BFCC8
- lsls r0, 3
- ldr r1, _080BFCC4 @ =sSpawnPoints - 8
- adds r0, r1
- b _080BFCCA
- .align 2, 0
-_080BFCC4: .4byte sSpawnPoints - 8
-_080BFCC8:
- movs r0, 0
-_080BFCCA:
- pop {r1}
- bx r1
- thumb_func_end GetHealLocationPointer
-
thumb_func_start sub_80BFCD0
sub_80BFCD0: @ 80BFCD0
push {r4-r6,lr}
diff --git a/data/data_835B488.s b/data/data_835B488.s
index e0212c964..5eee101d9 100644
--- a/data/data_835B488.s
+++ b/data/data_835B488.s
@@ -1051,34 +1051,7 @@ gUnknown_83EEAC4:: @ 83EEAC4
gUnknown_83EEB68:: @ 83EEB68
.incbin "baserom.gba", 0x3EEB68, 0x90
- .macro spawn_point map_id, x, y
- map \map_id
- .2byte \x, \y
- .align 2
- .endm
-
- .align 2
-sSpawnPoints:: @ 83EEBF8
- spawn_point MAP_PALLET_TOWN, 0x06, 0x08
- spawn_point MAP_VIRIDIAN_CITY, 0x1a, 0x1b
- spawn_point MAP_PEWTER_CITY, 0x11, 0x1a
- spawn_point MAP_CERULEAN_CITY, 0x16, 0x14
- spawn_point MAP_LAVENDER_TOWN, 0x06, 0x06
- spawn_point MAP_VERMILION_CITY, 0x0f, 0x07
- spawn_point MAP_CELADON_CITY, 0x30, 0x0c
- spawn_point MAP_FUCHSIA_CITY, 0x19, 0x20
- spawn_point MAP_CINNABAR_ISLAND, 0x0e, 0x0c
- spawn_point MAP_INDIGO_PLATEAU_EXTERIOR, 0x0b, 0x07
- spawn_point MAP_SAFFRON_CITY_DUPLICATE, 0x18, 0x27
- spawn_point MAP_ROUTE4, 0x0c, 0x06
- spawn_point MAP_ROUTE10, 0x0d, 0x15
- spawn_point MAP_ONE_ISLAND, 0x0e, 0x06
- spawn_point MAP_TWO_ISLAND, 0x15, 0x08
- spawn_point MAP_THREE_ISLAND, 0x0e, 0x1c
- spawn_point MAP_FOUR_ISLAND, 0x12, 0x15
- spawn_point MAP_FIVE_ISLAND, 0x12, 0x07
- spawn_point MAP_SEVEN_ISLAND, 0x0c, 0x04
- spawn_point MAP_SIX_ISLAND, 0x0b, 0x0c
+ .section .rodata.83EEC98
.align 2
gUnknown_83EEC98:: @ 83EEC98
diff --git a/ld_script.txt b/ld_script.txt
index 01d2765a7..163e9ce10 100644
--- a/ld_script.txt
+++ b/ld_script.txt
@@ -161,6 +161,7 @@ SECTIONS {
asm/mail.o(.text);
asm/menu_helpers.o(.text);
asm/script_pokemon_util_80BF8FC.o(.text);
+ src/heal_location.o(.text);
asm/heal_location.o(.text);
asm/region_map.o(.text);
src/battle_ai_script_commands.o(.text);
@@ -390,6 +391,8 @@ SECTIONS {
data/title_screen.o(.rodata);
data/field_weather.o(.rodata);
data/data_835B488.o(.rodata);
+ src/heal_location.o(.rodata);
+ data/data_835B488.o(.rodata.83EEC98);
src/battle_ai_script_commands.o(.rodata);
data/data_83F5738.o(.rodata);
src/save.o(.rodata);
diff --git a/src/heal_location.c b/src/heal_location.c
new file mode 100644
index 000000000..bc8920710
--- /dev/null
+++ b/src/heal_location.c
@@ -0,0 +1,59 @@
+#include "global.h"
+#include "heal_location.h"
+#include "constants/maps.h"
+#include "constants/spawn_points.h"
+
+static const struct HealLocation sSpawnPoints[] = {
+ {MAP_GROUP(PALLET_TOWN), MAP_NUM(PALLET_TOWN), 0x06, 0x08},
+ {MAP_GROUP(VIRIDIAN_CITY), MAP_NUM(VIRIDIAN_CITY), 0x1a, 0x1b},
+ {MAP_GROUP(PEWTER_CITY), MAP_NUM(PEWTER_CITY), 0x11, 0x1a},
+ {MAP_GROUP(CERULEAN_CITY), MAP_NUM(CERULEAN_CITY), 0x16, 0x14},
+ {MAP_GROUP(LAVENDER_TOWN), MAP_NUM(LAVENDER_TOWN), 0x06, 0x06},
+ {MAP_GROUP(VERMILION_CITY), MAP_NUM(VERMILION_CITY), 0x0f, 0x07},
+ {MAP_GROUP(CELADON_CITY), MAP_NUM(CELADON_CITY), 0x30, 0x0c},
+ {MAP_GROUP(FUCHSIA_CITY), MAP_NUM(FUCHSIA_CITY), 0x19, 0x20},
+ {MAP_GROUP(CINNABAR_ISLAND), MAP_NUM(CINNABAR_ISLAND), 0x0e, 0x0c},
+ {MAP_GROUP(INDIGO_PLATEAU_EXTERIOR), MAP_NUM(INDIGO_PLATEAU_EXTERIOR), 0x0b, 0x07},
+ {MAP_GROUP(SAFFRON_CITY_DUPLICATE), MAP_NUM(SAFFRON_CITY_DUPLICATE), 0x18, 0x27},
+ {MAP_GROUP(ROUTE4), MAP_NUM(ROUTE4), 0x0c, 0x06},
+ {MAP_GROUP(ROUTE10), MAP_NUM(ROUTE10), 0x0d, 0x15},
+ {MAP_GROUP(ONE_ISLAND), MAP_NUM(ONE_ISLAND), 0x0e, 0x06},
+ {MAP_GROUP(TWO_ISLAND), MAP_NUM(TWO_ISLAND), 0x15, 0x08},
+ {MAP_GROUP(THREE_ISLAND), MAP_NUM(THREE_ISLAND), 0x0e, 0x1c},
+ {MAP_GROUP(FOUR_ISLAND), MAP_NUM(FOUR_ISLAND), 0x12, 0x15},
+ {MAP_GROUP(FIVE_ISLAND), MAP_NUM(FIVE_ISLAND), 0x12, 0x07},
+ {MAP_GROUP(SEVEN_ISLAND), MAP_NUM(SEVEN_ISLAND), 0x0c, 0x04},
+ {MAP_GROUP(SIX_ISLAND), MAP_NUM(SIX_ISLAND), 0x0b, 0x0c},
+};
+
+u32 GetHealLocationIndexFromMapGroupAndNum(u16 mapGroup, u16 mapNum)
+{
+ u32 i;
+
+ for (i = 0; i < NELEMS(sSpawnPoints); i++) {
+ if (sSpawnPoints[i].group == mapGroup && sSpawnPoints[i].map == mapNum)
+ {
+ return i + 1;
+ }
+ }
+
+ return 0;
+}
+
+const struct HealLocation * GetHealLocationPointerFromMapGroupAndNum(u16 mapGroup, u16 mapNum)
+{
+ u32 i = GetHealLocationIndexFromMapGroupAndNum(mapGroup, mapNum);
+ if (i == 0)
+ return NULL;
+
+ return &sSpawnPoints[i - 1];
+}
+
+const struct HealLocation * GetHealLocationPointer(u32 idx)
+{
+ if (idx == 0)
+ return NULL;
+ if (idx > NELEMS(sSpawnPoints))
+ return NULL;
+ return &sSpawnPoints[idx - 1];
+}