summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--asm/heal_location.s177
-rw-r--r--data/data_835B488.s7
-rw-r--r--include/overworld.h2
-rw-r--r--ld_script.txt1
-rw-r--r--src/heal_location.c88
5 files changed, 90 insertions, 185 deletions
diff --git a/asm/heal_location.s b/asm/heal_location.s
deleted file mode 100644
index d8043acae..000000000
--- a/asm/heal_location.s
+++ /dev/null
@@ -1,177 +0,0 @@
- .include "asm/macros.inc"
- .include "constants/constants.inc"
-
- .syntax unified
-
- .text
-
- thumb_func_start sub_80BFCD0
-sub_80BFCD0: @ 80BFCD0
- push {r4-r6,lr}
- adds r4, r0, 0
- ldr r6, _080BFD24 @ =0x00004082
- adds r0, r6, 0
- bl VarGet
- lsls r0, 16
- lsrs r5, r0, 16
- cmp r5, 0x1
- bne _080BFD38
- ldr r0, _080BFD28 @ =gSaveBlock1Ptr
- ldr r1, [r0]
- ldr r2, _080BFD2C @ =0x00003d34
- adds r0, r1, r2
- ldr r2, [r0]
- lsls r0, r2, 1
- adds r0, r2
- lsls r0, 2
- adds r1, r0
- ldr r0, _080BFD30 @ =0x00003d42
- adds r1, r0
- ldrb r0, [r1]
- lsls r0, 29
- cmp r0, 0
- blt _080BFD0A
- adds r0, r6, 0
- movs r1, 0
- bl VarSet
-_080BFD0A:
- ldr r0, _080BFD34 @ =gSpecialVar_LastTalked
- strh r5, [r0]
- movs r0, 0x4
- strh r0, [r4, 0x4]
- movs r0, 0xB
- strh r0, [r4, 0x6]
- movs r0, 0x2
- strb r0, [r4]
- movs r0, 0xA
- strb r0, [r4, 0x1]
- movs r0, 0xFF
- strb r0, [r4, 0x2]
- b _080BFDFA
- .align 2, 0
-_080BFD24: .4byte 0x00004082
-_080BFD28: .4byte gSaveBlock1Ptr
-_080BFD2C: .4byte 0x00003d34
-_080BFD30: .4byte 0x00003d42
-_080BFD34: .4byte gSpecialVar_LastTalked
-_080BFD38:
- ldr r0, _080BFD7C @ =gSaveBlock1Ptr
- ldr r1, [r0]
- movs r0, 0x1C
- ldrsb r0, [r1, r0]
- lsls r0, 16
- lsrs r0, 16
- ldrb r1, [r1, 0x1D]
- lsls r1, 24
- asrs r1, 24
- lsls r1, 16
- lsrs r1, 16
- bl GetHealLocationIndexFromMapGroupAndNum
- adds r6, r0, 0
- ldr r2, _080BFD80 @ =gUnknown_83EEC98
- subs r0, r6, 0x1
- lsls r0, 2
- adds r1, r0, r2
- ldrh r1, [r1]
- strb r1, [r4]
- adds r2, 0x2
- adds r0, r2
- ldrh r2, [r0]
- strb r2, [r4, 0x1]
- movs r0, 0xFF
- strb r0, [r4, 0x2]
- cmp r1, 0x4
- bne _080BFD84
- cmp r2, 0
- bne _080BFD84
- movs r0, 0x8
- strh r0, [r4, 0x4]
- movs r0, 0x5
- b _080BFDF2
- .align 2, 0
-_080BFD7C: .4byte gSaveBlock1Ptr
-_080BFD80: .4byte gUnknown_83EEC98
-_080BFD84:
- ldr r0, _080BFDA4 @ =gUnknown_83EEC98
- subs r2, r6, 0x1
- lsls r3, r2, 2
- adds r1, r3, r0
- ldrh r1, [r1]
- adds r5, r0, 0
- cmp r1, 0xD
- bne _080BFDA8
- adds r0, r5, 0x2
- adds r0, r3, r0
- ldrh r0, [r0]
- cmp r0, 0
- bne _080BFDA8
- strh r1, [r4, 0x4]
- movs r0, 0xC
- b _080BFDF2
- .align 2, 0
-_080BFDA4: .4byte gUnknown_83EEC98
-_080BFDA8:
- lsls r1, r2, 2
- adds r0, r1, r5
- ldrh r0, [r0]
- cmp r0, 0x20
- bne _080BFDC0
- adds r0, r5, 0x2
- adds r0, r1, r0
- ldrh r0, [r0]
- cmp r0, 0
- bne _080BFDC0
- movs r0, 0x5
- b _080BFDEE
-_080BFDC0:
- lsls r2, 2
- adds r0, r2, r5
- ldrh r0, [r0]
- cmp r0, 0x2
- bne _080BFDEC
- adds r0, r5, 0x2
- adds r0, r2, r0
- ldrh r0, [r0]
- cmp r0, 0xA
- bne _080BFDEC
- movs r0, 0x4
- strh r0, [r4, 0x4]
- movs r0, 0xB
- strh r0, [r4, 0x6]
- ldr r0, _080BFDE8 @ =0x00004082
- movs r1, 0
- bl VarSet
- b _080BFDF4
- .align 2, 0
-_080BFDE8: .4byte 0x00004082
-_080BFDEC:
- movs r0, 0x7
-_080BFDEE:
- strh r0, [r4, 0x4]
- movs r0, 0x4
-_080BFDF2:
- strh r0, [r4, 0x6]
-_080BFDF4:
- adds r0, r6, 0
- bl sub_80BFE00
-_080BFDFA:
- pop {r4-r6}
- pop {r0}
- bx r0
- thumb_func_end sub_80BFCD0
-
- thumb_func_start sub_80BFE00
-sub_80BFE00: @ 80BFE00
- ldr r2, _080BFE10 @ =gSpecialVar_LastTalked
- ldr r1, _080BFE14 @ =gUnknown_83EECE8
- subs r0, 0x1
- adds r0, r1
- ldrb r0, [r0]
- strh r0, [r2]
- bx lr
- .align 2, 0
-_080BFE10: .4byte gSpecialVar_LastTalked
-_080BFE14: .4byte gUnknown_83EECE8
- thumb_func_end sub_80BFE00
-
- .align 2, 0 @ Don't pad with nop.
diff --git a/data/data_835B488.s b/data/data_835B488.s
index 5eee101d9..00f0caecf 100644
--- a/data/data_835B488.s
+++ b/data/data_835B488.s
@@ -1053,13 +1053,6 @@ gUnknown_83EEB68:: @ 83EEB68
.section .rodata.83EEC98
- .align 2
-gUnknown_83EEC98:: @ 83EEC98
- .incbin "baserom.gba", 0x3EEC98, 0x50
-
-gUnknown_83EECE8:: @ 83EECE8
- .incbin "baserom.gba", 0x3EECE8, 0x14
-
.include "data/text/map_section_names.inc"
gUnknown_83EF23C:: @ 83EF23C
diff --git a/include/overworld.h b/include/overworld.h
index f03db2a3a..5c4235b8c 100644
--- a/include/overworld.h
+++ b/include/overworld.h
@@ -29,6 +29,8 @@ extern struct UCoords32 gDirectionToVectors[];
extern struct LinkPlayerMapObject gLinkPlayerMapObjects[4];
extern MainCallback gFieldCallback;
+extern struct WarpData gUnknown_2031DBC;
+
void IncrementGameStat(u8 index);
void Overworld_SetMapObjTemplateCoords(u8, s16, s16);
diff --git a/ld_script.txt b/ld_script.txt
index 163e9ce10..eeb9f6564 100644
--- a/ld_script.txt
+++ b/ld_script.txt
@@ -162,7 +162,6 @@ SECTIONS {
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);
asm/rom6.o(.text);
diff --git a/src/heal_location.c b/src/heal_location.c
index bc8920710..574c126e2 100644
--- a/src/heal_location.c
+++ b/src/heal_location.c
@@ -1,8 +1,12 @@
#include "global.h"
#include "heal_location.h"
+#include "event_data.h"
+#include "constants/vars.h"
#include "constants/maps.h"
#include "constants/spawn_points.h"
+void sub_80BFE00(u32 healLocationIdx);
+
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},
@@ -26,6 +30,33 @@ static const struct HealLocation sSpawnPoints[] = {
{MAP_GROUP(SIX_ISLAND), MAP_NUM(SIX_ISLAND), 0x0b, 0x0c},
};
+const u16 gUnknown_83EEC98[][2] = {
+ {MAP_GROUP(PALLET_TOWN_PLAYERS_HOUSE_1F), MAP_NUM(PALLET_TOWN_PLAYERS_HOUSE_1F)},
+ {MAP_GROUP(VIRIDIAN_CITY_POKEMON_CENTER_1F), MAP_NUM(VIRIDIAN_CITY_POKEMON_CENTER_1F)},
+ {MAP_GROUP(PEWTER_CITY_POKEMON_CENTER_1F), MAP_NUM(PEWTER_CITY_POKEMON_CENTER_1F)},
+ {MAP_GROUP(CERULEAN_CITY_POKEMON_CENTER_1F), MAP_NUM(CERULEAN_CITY_POKEMON_CENTER_1F)},
+ {MAP_GROUP(LAVENDER_TOWN_POKEMON_CENTER_1F), MAP_NUM(LAVENDER_TOWN_POKEMON_CENTER_1F)},
+ {MAP_GROUP(VERMILION_CITY_POKEMON_CENTER_1F), MAP_NUM(VERMILION_CITY_POKEMON_CENTER_1F)},
+ {MAP_GROUP(CELADON_CITY_POKEMON_CENTER_1F), MAP_NUM(CELADON_CITY_POKEMON_CENTER_1F)},
+ {MAP_GROUP(FUCHSIA_CITY_POKEMON_CENTER_1F), MAP_NUM(FUCHSIA_CITY_POKEMON_CENTER_1F)},
+ {MAP_GROUP(CINNABAR_ISLAND_POKEMON_CENTER_1F), MAP_NUM(CINNABAR_ISLAND_POKEMON_CENTER_1F)},
+ {MAP_GROUP(INDIGO_PLATEAU_POKEMON_CENTER_1F), MAP_NUM(INDIGO_PLATEAU_POKEMON_CENTER_1F)},
+ {MAP_GROUP(SAFFRON_CITY_POKEMON_CENTER_1F), MAP_NUM(SAFFRON_CITY_POKEMON_CENTER_1F)},
+ {MAP_GROUP(ROUTE4_POKEMON_CENTER_1F), MAP_NUM(ROUTE4_POKEMON_CENTER_1F)},
+ {MAP_GROUP(ROUTE10_POKEMON_CENTER_1F), MAP_NUM(ROUTE10_POKEMON_CENTER_1F)},
+ {MAP_GROUP(ONE_ISLAND_POKEMON_CENTER_1F), MAP_NUM(ONE_ISLAND_POKEMON_CENTER_1F)},
+ {MAP_GROUP(TWO_ISLAND_POKEMON_CENTER_1F), MAP_NUM(TWO_ISLAND_POKEMON_CENTER_1F)},
+ {MAP_GROUP(THREE_ISLAND_POKEMON_CENTER_1F), MAP_NUM(THREE_ISLAND_POKEMON_CENTER_1F)},
+ {MAP_GROUP(FOUR_ISLAND_POKEMON_CENTER_1F), MAP_NUM(FOUR_ISLAND_POKEMON_CENTER_1F)},
+ {MAP_GROUP(FIVE_ISLAND_POKEMON_CENTER_1F), MAP_NUM(FIVE_ISLAND_POKEMON_CENTER_1F)},
+ {MAP_GROUP(SEVEN_ISLAND_POKEMON_CENTER_1F), MAP_NUM(SEVEN_ISLAND_POKEMON_CENTER_1F)},
+ {MAP_GROUP(SIX_ISLAND_POKEMON_CENTER_1F), MAP_NUM(SIX_ISLAND_POKEMON_CENTER_1F)}
+};
+
+static const u8 gUnknown_83EECE8[] = {
+ 0x01, 0x01, 0x03, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x02, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01
+};
+
u32 GetHealLocationIndexFromMapGroupAndNum(u16 mapGroup, u16 mapNum)
{
u32 i;
@@ -57,3 +88,60 @@ const struct HealLocation * GetHealLocationPointer(u32 idx)
return NULL;
return &sSpawnPoints[idx - 1];
}
+
+void sub_80BFCD0(struct WarpData * warp)
+{
+ u32 healLocationIdx;
+
+ if (VarGet(VAR_0x4082) == 1)
+ {
+ if (!gSaveBlock1Ptr->unkArray[gSaveBlock1Ptr->unkArrayIdx].unkA_2)
+ VarSet(VAR_0x4082, 0);
+ gSpecialVar_LastTalked = 1;
+ warp->x = 4;
+ warp->y = 11;
+ warp->mapGroup = MAP_GROUP(SEVEN_ISLAND_TRAINER_TOWER_LOBBY);
+ warp->mapNum = MAP_NUM(SEVEN_ISLAND_TRAINER_TOWER_LOBBY);
+ warp->warpId = 0xFF;
+ }
+ else
+ {
+ healLocationIdx = GetHealLocationIndexFromMapGroupAndNum(gSaveBlock1Ptr->lastHealLocation.mapGroup, gSaveBlock1Ptr->lastHealLocation.mapNum);
+ warp->mapGroup = gUnknown_83EEC98[healLocationIdx - 1][0];
+ warp->mapNum = gUnknown_83EEC98[healLocationIdx - 1][1];
+ warp->warpId = 0xFF;
+
+ if (gUnknown_83EEC98[healLocationIdx - 1][0] == MAP_GROUP(PALLET_TOWN_PLAYERS_HOUSE_1F) && gUnknown_83EEC98[healLocationIdx - 1][1] == MAP_NUM(PALLET_TOWN_PLAYERS_HOUSE_1F))
+ {
+ warp->x = 8;
+ warp->y = 5;
+ }
+ else if (gUnknown_83EEC98[healLocationIdx - 1][0] == MAP_GROUP(INDIGO_PLATEAU_POKEMON_CENTER_1F) && gUnknown_83EEC98[healLocationIdx - 1][1] == MAP_NUM(INDIGO_PLATEAU_POKEMON_CENTER_1F))
+ {
+ warp->x = 13;
+ warp->y = 12;
+ }
+ else if (gUnknown_83EEC98[healLocationIdx - 1][0] == MAP_GROUP(ONE_ISLAND_POKEMON_CENTER_1F) && gUnknown_83EEC98[healLocationIdx - 1][1] == MAP_NUM(ONE_ISLAND_POKEMON_CENTER_1F))
+ {
+ warp->x = 5;
+ warp->y = 4;
+ }
+ else if (gUnknown_83EEC98[healLocationIdx - 1][0] == MAP_GROUP(SEVEN_ISLAND_TRAINER_TOWER_LOBBY) && gUnknown_83EEC98[healLocationIdx - 1][1] == MAP_NUM(SEVEN_ISLAND_TRAINER_TOWER_LOBBY))
+ {
+ warp->x = 4;
+ warp->y = 11;
+ VarSet(VAR_0x4082, 0);
+ }
+ else
+ {
+ warp->x = 7;
+ warp->y = 4;
+ }
+ sub_80BFE00(healLocationIdx);
+ }
+}
+
+void sub_80BFE00(u32 healLocationIdx)
+{
+ gSpecialVar_LastTalked = gUnknown_83EECE8[healLocationIdx - 1];
+}