diff options
author | PikalaxALT <pikalaxalt@gmail.com> | 2017-10-24 21:27:46 -0400 |
---|---|---|
committer | PikalaxALT <pikalaxalt@gmail.com> | 2017-10-24 21:27:46 -0400 |
commit | 0b0926f127628105edc65c68ce9015c77b6f6742 (patch) | |
tree | 4a329c52a234fa30f7777a2c6e704b043ea27852 | |
parent | 6558af388b547adf730eacdab4e2fba31e1d548c (diff) |
through sub_80E909C
-rw-r--r-- | asm/secret_base.s | 110 | ||||
-rw-r--r-- | include/field_screen.h | 1 | ||||
-rw-r--r-- | include/overworld.h | 2 | ||||
-rw-r--r-- | src/secret_base.c | 47 |
4 files changed, 50 insertions, 110 deletions
diff --git a/asm/secret_base.s b/asm/secret_base.s index 8c24bc72d..1a0a51b99 100644 --- a/asm/secret_base.s +++ b/asm/secret_base.s @@ -5,116 +5,6 @@ .text - thumb_func_start sub_80E8FD0 -sub_80E8FD0: @ 80E8FD0 - push {r4,lr} - lsls r0, 24 - lsrs r4, r0, 24 - ldr r1, =gTasks - lsls r0, r4, 2 - adds r0, r4 - lsls r0, 3 - adds r2, r0, r1 - movs r1, 0x8 - ldrsh r0, [r2, r1] - cmp r0, 0 - beq _080E8FF4 - cmp r0, 0x1 - beq _080E900C - b _080E904A - .pool -_080E8FF4: - ldr r0, =gPaletteFade - ldrb r1, [r0, 0x7] - movs r0, 0x80 - ands r0, r1 - cmp r0, 0 - bne _080E904A - movs r0, 0x1 - strh r0, [r2, 0x8] - b _080E904A - .pool -_080E900C: - ldr r0, =0x00004054 - bl VarGet - lsls r0, 16 - lsrs r0, 16 - ldr r1, =gSaveBlock1Ptr - ldr r2, [r1] - lsls r1, r0, 2 - adds r1, r0 - lsls r1, 5 - adds r2, r1 - ldr r0, =0x00001aac - adds r2, r0 - ldrb r0, [r2] - cmp r0, 0xFE - bhi _080E9030 - adds r0, 0x1 - strb r0, [r2] -_080E9030: - bl sub_80E8F9C - bl warp_in - ldr r0, =gFieldCallback - ldr r1, =sub_80AF168 - str r1, [r0] - ldr r0, =c2_load_new_map - bl SetMainCallback2 - adds r0, r4, 0 - bl DestroyTask -_080E904A: - pop {r4} - pop {r0} - bx r0 - .pool - thumb_func_end sub_80E8FD0 - - thumb_func_start sub_80E9068 -sub_80E9068: @ 80E9068 - push {lr} - ldr r0, =sub_80E8FD0 - movs r1, 0 - bl CreateTask - movs r0, 0x1 - movs r1, 0 - bl fade_screen - ldr r0, =gSaveBlock1Ptr - ldr r0, [r0] - movs r1, 0x4 - ldrsb r1, [r0, r1] - movs r2, 0x5 - ldrsb r2, [r0, r2] - movs r3, 0x1 - negs r3, r3 - movs r0, 0 - bl saved_warp2_set - pop {r0} - bx r0 - .pool - thumb_func_end sub_80E9068 - - thumb_func_start sub_80E909C -sub_80E909C: @ 80E909C - push {lr} - ldr r0, =gMapHeader - ldrb r0, [r0, 0x17] - cmp r0, 0x9 - bne _080E90C0 - ldr r0, =0x00004097 - bl VarGet - lsls r0, 16 - cmp r0, 0 - bne _080E90C0 - movs r0, 0 - b _080E90C2 - .pool -_080E90C0: - movs r0, 0x1 -_080E90C2: - pop {r1} - bx r1 - thumb_func_end sub_80E909C - thumb_func_start sub_80E90C8 sub_80E90C8: @ 80E90C8 push {r4,lr} diff --git a/include/field_screen.h b/include/field_screen.h index b15fdba7d..089e79cc4 100644 --- a/include/field_screen.h +++ b/include/field_screen.h @@ -8,5 +8,6 @@ // Exported ROM declarations void pal_fill_black(void); bool8 sub_80ABDFC(void); +void sub_80AF168(void); #endif //GUARD_FIELD_SCREEN_H diff --git a/include/overworld.h b/include/overworld.h index 0929aaee8..67fcb88ec 100644 --- a/include/overworld.h +++ b/include/overworld.h @@ -32,6 +32,7 @@ void Overworld_SetMapObjTemplateMovementType(u8, u8); void Overworld_SetWarpDestination(s8 mapGroup, s8 mapNum, s8 warpId, s8 x, s8 y); +void saved_warp2_set(int unused, s8 mapGroup, s8 mapNum, s8 warpId); void saved_warp2_set_2(int unused, s8 mapGroup, s8 mapNum, s8 warpId, s8 x, s8 y); void Overworld_SetHealLocationWarp(u8); void sub_8084DD4(s8 mapGroup, s8 mapNum, s8 warpId, s8 x, s8 y); @@ -60,5 +61,6 @@ bool32 sub_8087598(void); void c2_exit_to_overworld_1_continue_scripts_restart_music(void); void warp_in(void); void warp1_set_2(s8 mapGroup, s8 mapNum, s8 warpNum); +void c2_load_new_map(void); #endif //GUARD_ROM4_H diff --git a/src/secret_base.c b/src/secret_base.c index 2da00067b..190962c51 100644 --- a/src/secret_base.c +++ b/src/secret_base.c @@ -1,6 +1,8 @@ // Includes #include "global.h" +#include "task.h" +#include "palette.h" #include "list_menu.h" #include "map_constants.h" #include "decoration.h" @@ -9,6 +11,8 @@ #include "fieldmap.h" #include "field_camera.h" #include "field_player_avatar.h" +#include "field_screen.h" +#include "field_weather.h" #include "text.h" #include "string_util.h" #include "event_data.h" @@ -256,3 +260,46 @@ void sub_80E8F9C(void) idx = sCurSecretBaseId / 10 * 4; warp1_set_2(MAP_GROUP_SECRET_BASE_RED_CAVE1, gUnknown_0858CFE8[idx], gUnknown_0858CFE8[idx + 1]); } + +void sub_80E8FD0(u8 taskId) +{ + u16 sbrId; + + switch (gTasks[taskId].data[0]) + { + case 0: + if (!gPaletteFade.active) + { + gTasks[taskId].data[0] = 1; + } + break; + case 1: + sbrId = VarGet(VAR_0x4054); + if (gSaveBlock1Ptr->secretBases[sbrId].sbr_field_10 < 255) + { + gSaveBlock1Ptr->secretBases[sbrId].sbr_field_10 ++; + } + sub_80E8F9C(); + warp_in(); + gFieldCallback = sub_80AF168; + SetMainCallback2(c2_load_new_map); + DestroyTask(taskId); + break; + } +} + +void sub_80E9068(void) +{ + CreateTask(sub_80E8FD0, 0); + fade_screen(1, 0); + saved_warp2_set(0, gSaveBlock1Ptr->location.mapGroup, gSaveBlock1Ptr->location.mapNum, -1); +} + +bool8 sub_80E909C(void) +{ + if (gMapHeader.mapType == MAP_TYPE_SECRET_BASE && VarGet(VAR_0x4097) == 0) + { + return FALSE; + } + return TRUE; +} |