summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--asm/save_failed_screen.s283
-rw-r--r--include/strings.h5
-rw-r--r--ld_script.txt1
-rw-r--r--src/save_failed_screen.c125
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);
+}