diff options
author | PikalaxALT <pikalaxalt@gmail.com> | 2020-01-17 09:51:32 -0500 |
---|---|---|
committer | PikalaxALT <pikalaxalt@gmail.com> | 2020-01-17 09:51:32 -0500 |
commit | fc9a00848115282ceebd61bfa43e937c1f951bfa (patch) | |
tree | 60d3be786d49684bba5632632346558d9e035a66 | |
parent | 9af01f5fadbc49ed6eb9f6e0d4ff7694e8cb5b15 (diff) |
through sub_80F5334
-rw-r--r-- | asm/save_failed_screen.s | 283 | ||||
-rw-r--r-- | include/strings.h | 5 | ||||
-rw-r--r-- | ld_script.txt | 1 | ||||
-rw-r--r-- | src/save_failed_screen.c | 125 |
4 files changed, 131 insertions, 283 deletions
diff --git a/asm/save_failed_screen.s b/asm/save_failed_screen.s index aa9d375a3..4d95ba17d 100644 --- a/asm/save_failed_screen.s +++ b/asm/save_failed_screen.s @@ -5,289 +5,6 @@ .text - thumb_func_start sub_80F50F4 -sub_80F50F4: @ 80F50F4 - ldr r1, _080F50FC @ =gUnknown_3005430 - movs r0, 0 - str r0, [r1] - bx lr - .align 2, 0 -_080F50FC: .4byte gUnknown_3005430 - thumb_func_end sub_80F50F4 - - thumb_func_start DoSaveFailedScreen -DoSaveFailedScreen: @ 80F5100 - lsls r0, 24 - lsrs r0, 24 - ldr r1, _080F5110 @ =gUnknown_203AB4C - strh r0, [r1] - ldr r1, _080F5114 @ =gUnknown_3005430 - movs r0, 0x1 - str r0, [r1] - bx lr - .align 2, 0 -_080F5110: .4byte gUnknown_203AB4C -_080F5114: .4byte gUnknown_3005430 - thumb_func_end DoSaveFailedScreen - - thumb_func_start sub_80F5118 -sub_80F5118: @ 80F5118 - push {lr} - ldr r0, _080F5130 @ =gUnknown_203AB50 - ldrb r1, [r0] - adds r2, r0, 0 - cmp r1, 0x8 - bls _080F5126 - b _080F52D6 -_080F5126: - lsls r0, r1, 2 - ldr r1, _080F5134 @ =_080F5138 - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_080F5130: .4byte gUnknown_203AB50 -_080F5134: .4byte _080F5138 - .align 2, 0 -_080F5138: - .4byte _080F515C - .4byte _080F5190 - .4byte _080F51B4 - .4byte _080F51E4 - .4byte _080F5204 - .4byte _080F5240 - .4byte _080F5280 - .4byte _080F5298 - .4byte _080F52B4 -_080F515C: - ldr r0, _080F5168 @ =gUnknown_3005430 - ldr r0, [r0] - cmp r0, 0 - bne _080F516C - movs r0, 0 - b _080F52D8 - .align 2, 0 -_080F5168: .4byte gUnknown_3005430 -_080F516C: - ldr r0, _080F5184 @ =gMPlayInfo_BGM - ldr r1, _080F5188 @ =0x0000ffff - movs r2, 0x80 - bl m4aMPlayVolumeControl - bl SaveCallbacks - ldr r1, _080F518C @ =gUnknown_203AB50 - movs r0, 0x1 - strb r0, [r1] - b _080F52D6 - .align 2, 0 -_080F5184: .4byte gMPlayInfo_BGM -_080F5188: .4byte 0x0000ffff -_080F518C: .4byte gUnknown_203AB50 -_080F5190: - bl SaveMapTiles - bl SaveMapGPURegs - bl SaveMapTextColors - bl sub_80F52EC - movs r0, 0 - movs r1, 0 - bl SetGpuReg - ldr r1, _080F51B0 @ =gUnknown_203AB50 - movs r0, 0x2 - strb r0, [r1] - b _080F52D6 - .align 2, 0 -_080F51B0: .4byte gUnknown_203AB50 -_080F51B4: - ldr r1, _080F51D8 @ =0x0600c000 - movs r2, 0x80 - lsls r2, 7 - movs r0, 0 - movs r3, 0 - bl RequestDma3Fill - ldr r0, _080F51DC @ =gUnknown_841EE44 - movs r1, 0xA0 - lsls r1, 19 - movs r2, 0x20 - movs r3, 0 - bl RequestDma3Copy - ldr r1, _080F51E0 @ =gUnknown_203AB50 - movs r0, 0x3 - strb r0, [r1] - b _080F52D6 - .align 2, 0 -_080F51D8: .4byte 0x0600c000 -_080F51DC: .4byte gUnknown_841EE44 -_080F51E0: .4byte gUnknown_203AB50 -_080F51E4: - bl sub_80F53E8 - ldr r0, _080F51FC @ =gUnknown_8418C83 - bl sub_80F5404 - bl sub_80F53CC - ldr r1, _080F5200 @ =gUnknown_203AB50 - movs r0, 0x4 - strb r0, [r1] - b _080F52D6 - .align 2, 0 -_080F51FC: .4byte gUnknown_8418C83 -_080F5200: .4byte gUnknown_203AB50 -_080F5204: - movs r0, 0x50 - movs r1, 0 - bl SetGpuReg - movs r0, 0x10 - movs r1, 0 - bl SetGpuReg - movs r0, 0x12 - movs r1, 0 - bl SetGpuReg - ldr r1, _080F5238 @ =0x00001f0c - movs r0, 0x8 - bl SetGpuReg - movs r1, 0x80 - lsls r1, 1 - movs r0, 0 - bl SetGpuReg - ldr r1, _080F523C @ =gUnknown_203AB50 - movs r0, 0x5 - strb r0, [r1] - b _080F52D6 - .align 2, 0 -_080F5238: .4byte 0x00001f0c -_080F523C: .4byte gUnknown_203AB50 -_080F5240: - bl sub_80F5458 - adds r1, r0, 0 - cmp r1, 0x1 - bne _080F5260 - ldr r0, _080F5258 @ =gSaveSucceeded - strh r1, [r0] - ldr r0, _080F525C @ =gUnknown_8418E09 - bl sub_80F5404 - b _080F526C - .align 2, 0 -_080F5258: .4byte gSaveSucceeded -_080F525C: .4byte gUnknown_8418E09 -_080F5260: - ldr r0, _080F5274 @ =gSaveSucceeded - movs r1, 0xFF - strh r1, [r0] - ldr r0, _080F5278 @ =gUnknown_8418CD9 - bl sub_80F5404 -_080F526C: - ldr r1, _080F527C @ =gUnknown_203AB50 - movs r0, 0x6 - strb r0, [r1] - b _080F52D6 - .align 2, 0 -_080F5274: .4byte gSaveSucceeded -_080F5278: .4byte gUnknown_8418CD9 -_080F527C: .4byte gUnknown_203AB50 -_080F5280: - ldr r0, _080F5294 @ =gMain - ldrh r1, [r0, 0x2E] - movs r0, 0x1 - ands r0, r1 - cmp r0, 0 - beq _080F52D6 - movs r0, 0x7 - strb r0, [r2] - b _080F52D6 - .align 2, 0 -_080F5294: .4byte gMain -_080F5298: - movs r0, 0 - movs r1, 0 - bl SetGpuReg - bl RestoreMapTiles - bl sub_80F52EC - ldr r1, _080F52B0 @ =gUnknown_203AB50 - movs r0, 0x8 - strb r0, [r1] - b _080F52D6 - .align 2, 0 -_080F52B0: .4byte gUnknown_203AB50 -_080F52B4: - ldr r0, _080F52DC @ =gMPlayInfo_BGM - ldr r1, _080F52E0 @ =0x0000ffff - movs r2, 0x80 - lsls r2, 1 - bl m4aMPlayVolumeControl - bl RestoreMapTextColors - bl RestoreGPURegs - bl RestoreCallbacks - ldr r0, _080F52E4 @ =gUnknown_3005430 - movs r1, 0 - str r1, [r0] - ldr r0, _080F52E8 @ =gUnknown_203AB50 - strb r1, [r0] -_080F52D6: - movs r0, 0x1 -_080F52D8: - pop {r1} - bx r1 - .align 2, 0 -_080F52DC: .4byte gMPlayInfo_BGM -_080F52E0: .4byte 0x0000ffff -_080F52E4: .4byte gUnknown_3005430 -_080F52E8: .4byte gUnknown_203AB50 - thumb_func_end sub_80F5118 - - thumb_func_start sub_80F52EC -sub_80F52EC: @ 80F52EC - push {r4,r5,lr} - movs r1, 0 - ldr r5, _080F5310 @ =0x000001ff - movs r4, 0xA0 - lsls r4, 19 - movs r2, 0 - ldr r3, _080F5314 @ =0x05000200 -_080F52FA: - adds r0, r1, r4 - strh r2, [r0] - adds r0, r1, r3 - strh r2, [r0] - adds r1, 0x2 - cmp r1, r5 - ble _080F52FA - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_080F5310: .4byte 0x000001ff -_080F5314: .4byte 0x05000200 - thumb_func_end sub_80F52EC - - thumb_func_start sub_80F5318 -sub_80F5318: @ 80F5318 - push {lr} - ldr r0, _080F532C @ =gDecompressionBuffer + 0x3800 - ldr r1, _080F5330 @ =0x0600f800 - movs r2, 0xA0 - lsls r2, 3 - movs r3, 0 - bl RequestDma3Copy - pop {r0} - bx r0 - .align 2, 0 -_080F532C: .4byte gDecompressionBuffer + 0x3800 -_080F5330: .4byte 0x0600f800 - thumb_func_end sub_80F5318 - - thumb_func_start sub_80F5334 -sub_80F5334: @ 80F5334 - push {lr} - ldr r0, _080F5348 @ =gDecompressionBuffer + 0x020 - ldr r1, _080F534C @ =0x0600c020 - movs r2, 0x8C - lsls r2, 6 - movs r3, 0 - bl RequestDma3Copy - pop {r0} - bx r0 - .align 2, 0 -_080F5348: .4byte gDecompressionBuffer + 0x020 -_080F534C: .4byte 0x0600c020 - thumb_func_end sub_80F5334 - thumb_func_start sub_80F5350 sub_80F5350: @ 80F5350 push {r4-r7,lr} diff --git a/include/strings.h b/include/strings.h index ec8533a54..c463b45b7 100644 --- a/include/strings.h +++ b/include/strings.h @@ -1033,4 +1033,9 @@ extern const u8 gText_RegionMap_AreaDesc_AlteringCave[]; extern const u8 gText_RegionMap_AreaDesc_PatternBush[]; extern const u8 gText_RegionMap_AreaDesc_DottedHole[]; +// save_failed_screen +extern const u8 gUnknown_8418C83[]; +extern const u8 gUnknown_8418CD9[]; +extern const u8 gUnknown_8418E09[]; + #endif //GUARD_STRINGS_H diff --git a/ld_script.txt b/ld_script.txt index d6dec1ea3..8b3da8303 100644 --- a/ld_script.txt +++ b/ld_script.txt @@ -217,6 +217,7 @@ SECTIONS { src/hall_of_fame.o(.text); src/credits.o(.text); src/diploma.o(.text); + src/save_failed_screen.o(.text); asm/save_failed_screen.o(.text); asm/clear_save_data_screen.o(.text); src/evolution_graphics.o(.text); diff --git a/src/save_failed_screen.c b/src/save_failed_screen.c new file mode 100644 index 000000000..dda0515a0 --- /dev/null +++ b/src/save_failed_screen.c @@ -0,0 +1,125 @@ +#include "global.h" +#include "decompress.h" +#include "dma3.h" +#include "gpu_regs.h" +#include "help_system.h" +#include "m4a.h" +#include "save.h" +#include "save_failed_screen.h" +#include "strings.h" + +bool32 gUnknown_3005430; +EWRAM_DATA u16 gUnknown_203AB4C = SAVE_NORMAL; +EWRAM_DATA u8 gUnknown_203AB50 = 0; + +void sub_80F52EC(void); +void sub_80F53CC(void); +void sub_80F53E8(void); +void sub_80F5404(const u8 *a0); +bool32 sub_80F5458(void); + +extern const u16 gUnknown_841EE44[]; + +void sub_80F50F4(void) +{ + gUnknown_3005430 = FALSE; +} + +void DoSaveFailedScreen(u8 saveType) +{ + gUnknown_203AB4C = saveType; + gUnknown_3005430 = TRUE; +} + +bool32 sub_80F5118(void) +{ + switch (gUnknown_203AB50) + { + case 0: + if (!gUnknown_3005430) + return FALSE; + m4aMPlayVolumeControl(&gMPlayInfo_BGM, 0xFFFF, 128); + SaveCallbacks(); + gUnknown_203AB50 = 1; + break; + case 1: + SaveMapTiles(); + SaveMapGPURegs(); + SaveMapTextColors(); + sub_80F52EC(); + SetGpuReg(REG_OFFSET_DISPCNT, 0); + gUnknown_203AB50 = 2; + break; + case 2: + RequestDma3Fill(0, (void *)BG_CHAR_ADDR(3), BG_CHAR_SIZE, 0); + RequestDma3Copy(gUnknown_841EE44, (void *)PLTT, 0x20, 0); + gUnknown_203AB50 = 3; + break; + case 3: + sub_80F53E8(); + sub_80F5404(gUnknown_8418C83); + sub_80F53CC(); + gUnknown_203AB50 = 4; + break; + case 4: + SetGpuReg(REG_OFFSET_BLDCNT, 0); + SetGpuReg(REG_OFFSET_BG0HOFS, 0); + SetGpuReg(REG_OFFSET_BG0VOFS, 0); + SetGpuReg(REG_OFFSET_BG0CNT, BGCNT_PRIORITY(0) | BGCNT_CHARBASE(3) | BGCNT_SCREENBASE(31)); + SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_BG0_ON); + gUnknown_203AB50 = 5; + break; + case 5: + if (sub_80F5458() == TRUE) + { + gSaveSucceeded = SAVE_STATUS_OK; + sub_80F5404(gUnknown_8418E09); + } + else + { + gSaveSucceeded = SAVE_STATUS_ERROR; + sub_80F5404(gUnknown_8418CD9); + } + gUnknown_203AB50 = 6; + break; + case 6: + if (JOY_NEW(A_BUTTON)) + gUnknown_203AB50 = 7; + break; + case 7: + SetGpuReg(REG_OFFSET_DISPCNT, 0); + RestoreMapTiles(); + sub_80F52EC(); + gUnknown_203AB50 = 8; + break; + case 8: + m4aMPlayVolumeControl(&gMPlayInfo_BGM, 0xFFFF, 256); + RestoreMapTextColors(); + RestoreGPURegs(); + RestoreCallbacks(); + gUnknown_3005430 = FALSE; + gUnknown_203AB50 = 0; + break; + } + return TRUE; +} + +void sub_80F52EC(void) +{ + int i; + for (i = 0; i < BG_PLTT_SIZE; i += sizeof(u16)) + { + *((u16 *)(BG_PLTT + i)) = RGB_BLACK; + *((u16 *)(OBJ_PLTT + i)) = RGB_BLACK; + } +} + +void sub_80F5318(void) +{ + RequestDma3Copy(gDecompressionBuffer + 0x3800, (void *)BG_SCREEN_ADDR(31), 0x500, 0); +} + +void sub_80F5334(void) +{ + RequestDma3Copy(gDecompressionBuffer + 0x020, (void *)BG_CHAR_ADDR(3) + 0x20, 0x2300, 0); +} |