diff options
-rw-r--r-- | asm/heal_location.s | 177 | ||||
-rw-r--r-- | data/data_835B488.s | 7 | ||||
-rw-r--r-- | include/overworld.h | 2 | ||||
-rw-r--r-- | ld_script.txt | 1 | ||||
-rw-r--r-- | src/heal_location.c | 88 |
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]; +} |