From 22c9f89fa4d51895a3ba4c24364ffb6ed8807d5f Mon Sep 17 00:00:00 2001 From: MokhaLeee Date: Tue, 18 Jun 2024 18:22:42 +0800 Subject: [PATCH] savedraw in process --- FireEmblem7J.lds | 3 + asm/code_080AB6FC.s | 4 +- asm/savedraw.s | 127 ++-------------------------------- asm/savemenu.s | 16 ++--- asm/savemenu_difficulty.s | 8 +-- data/const_data_0842D270.s | 4 +- data/data_08DAD284.s | 12 ---- data/savemenu.s | 14 +++- include/gbafe.h | 2 +- include/gbafe/bonusclaim.h | 13 ++++ include/gbafe/global.h | 2 + include/gbafe/hardware.h | 28 +++++--- include/gbafe/mu.h | 2 +- include/gbafe/savemenu.h | 30 ++++++++ include/gbafe/unk-data.h | 29 ++------ include/gbafe/unk-functions.h | 1 - src/savedraw.c | 35 ++++++++++ src/savemenu.c | 7 ++ 18 files changed, 147 insertions(+), 190 deletions(-) create mode 100644 include/gbafe/bonusclaim.h create mode 100644 src/savedraw.c diff --git a/FireEmblem7J.lds b/FireEmblem7J.lds index d6ee8bf..34624a8 100644 --- a/FireEmblem7J.lds +++ b/FireEmblem7J.lds @@ -12,6 +12,7 @@ SECTIONS . = __ewram_overlay_beg; ewram_overlay_0 (NOLOAD) : ALIGN(4) { + . = 0x0000F4; gBonusClaimData = .; . = 0x00310C; gStatScreenSt = .; . = 0x00323C; gUiTmScratchA = .; . = 0x00373C; gUiTmScratchB = .; @@ -267,6 +268,7 @@ SECTIONS asm/save.o(.text); src/savemenu.o(.text); asm/savemenu.o(.text); + src/savedraw.o(.text); asm/savedraw.o(.text); src/savedrawfx.o(.text); asm/savedrawfx.o(.text); @@ -359,6 +361,7 @@ SECTIONS . = ALIGN(4); data/data_08D8A368.o(.data) . = ALIGN(4); src/save_core.o(.data) . = ALIGN(4); data/data_08DAD284.o(.data) + . = ALIGN(4); src/savemenu.o(.data) . = ALIGN(4); data/savemenu.o(.data) . = ALIGN(4); src/savedrawfx.o(.data) . = ALIGN(4); data/savedrawfx.o(.data) diff --git a/asm/code_080AB6FC.s b/asm/code_080AB6FC.s index 79c9422..0db9e81 100644 --- a/asm/code_080AB6FC.s +++ b/asm/code_080AB6FC.s @@ -3989,7 +3989,7 @@ sub_80AD818: @ 0x080AD818 adds r0, r4, #0 bl Decompress ldr r0, _080AD908 @ =gBg3Tm - ldr r1, _080AD90C @ =TsaDirect_SpinRotation + ldr r1, _080AD90C @ =Tsa_SpinRotation movs r2, #0 movs r3, #5 bl sub_8001F14 @@ -4046,7 +4046,7 @@ _080AD8FC: .4byte 0x06013800 _080AD900: .4byte sub_80AD778 _080AD904: .4byte Img_SpinRotation _080AD908: .4byte gBg3Tm -_080AD90C: .4byte TsaDirect_SpinRotation +_080AD90C: .4byte Tsa_SpinRotation _080AD910: .4byte gDispIo thumb_func_start sub_80AD914 diff --git a/asm/savedraw.s b/asm/savedraw.s index ca6f131..221e19a 100644 --- a/asm/savedraw.s +++ b/asm/savedraw.s @@ -1,125 +1,6 @@ .include "macro.inc" .syntax unified - thumb_func_start sub_80A5B44 -sub_80A5B44: @ 0x080A5B44 - push {r4, r5, lr} - ldr r0, _080A5C2C @ =gUnk_08DAD33C - bl InitBgs - ldr r4, _080A5C30 @ =gDispIo - movs r0, #8 - rsbs r0, r0, #0 - ldrb r1, [r4] - ands r0, r1 - movs r1, #1 - orrs r0, r1 - strb r0, [r4] - movs r0, #0x3f - ldrb r2, [r4, #0x15] - ands r0, r2 - movs r1, #0x40 - orrs r0, r1 - movs r1, #0x21 - rsbs r1, r1, #0 - ands r0, r1 - strb r0, [r4, #0x15] - movs r0, #3 - ldrb r1, [r4, #0xc] - orrs r0, r1 - strb r0, [r4, #0xc] - movs r1, #4 - rsbs r1, r1, #0 - adds r0, r1, #0 - ldrb r2, [r4, #0x10] - ands r0, r2 - strb r0, [r4, #0x10] - adds r0, r1, #0 - ldrb r2, [r4, #0x14] - ands r0, r2 - movs r2, #2 - orrs r0, r2 - strb r0, [r4, #0x14] - ldrb r0, [r4, #0x18] - ands r1, r0 - orrs r1, r2 - strb r1, [r4, #0x18] - bl EndAllMus - movs r0, #2 - rsbs r0, r0, #0 - ldrb r1, [r4, #1] - ands r0, r1 - movs r1, #3 - rsbs r1, r1, #0 - ands r0, r1 - subs r1, #2 - ands r0, r1 - subs r1, #4 - ands r0, r1 - subs r1, #8 - ands r0, r1 - strb r0, [r4, #1] - ldr r1, _080A5C34 @ =0x02000001 - movs r0, #0xa - strb r0, [r1] - ldr r1, _080A5C38 @ =gAnims - movs r0, #0x64 - strb r0, [r1] - ldr r0, _080A5C3C @ =SaveMenuOnHBlank - bl SetOnHBlankA - ldr r0, _080A5C40 @ =Pal_SaveMenuWindow - movs r1, #0x88 - lsls r1, r1, #2 - movs r2, #0x80 - lsls r2, r2, #1 - bl ApplyPaletteExt - ldr r0, _080A5C44 @ =Pal_SaveMenuBackground - movs r1, #0 - movs r2, #0x60 - bl ApplyPaletteExt - ldr r4, _080A5C48 @ =Img_MuralBackground - movs r0, #0 - bl GetBgChrOffset - adds r1, r0, #0 - movs r5, #0xc0 - lsls r5, r5, #0x13 - adds r1, r1, r5 - adds r0, r4, #0 - bl Decompress - ldr r0, _080A5C4C @ =gBg0Tm - ldr r1, _080A5C50 @ =Tsa_SaveMenuBackground - movs r2, #0 - bl TmApplyTsa_thm - ldr r4, _080A5C54 @ =Img_SpinRotation - movs r0, #2 - bl GetBgChrOffset - adds r1, r0, #0 - adds r1, r1, r5 - adds r0, r4, #0 - bl Decompress - ldr r0, _080A5C58 @ =gBg3Tm - ldr r1, _080A5C5C @ =TsaDirect_SpinRotation - movs r2, #0 - movs r3, #5 - bl sub_8001F14 - movs r0, #8 - bl EnableBgSync - pop {r4, r5} - pop {r0} - bx r0 - .align 2, 0 -_080A5C2C: .4byte gUnk_08DAD33C -_080A5C30: .4byte gDispIo -_080A5C34: .4byte 0x02000001 -_080A5C38: .4byte gAnims -_080A5C3C: .4byte SaveMenuOnHBlank -_080A5C40: .4byte Pal_SaveMenuWindow -_080A5C44: .4byte Pal_SaveMenuBackground -_080A5C48: .4byte Img_MuralBackground -_080A5C4C: .4byte gBg0Tm -_080A5C50: .4byte Tsa_SaveMenuBackground -_080A5C54: .4byte Img_SpinRotation -_080A5C58: .4byte gBg3Tm -_080A5C5C: .4byte TsaDirect_SpinRotation thumb_func_start sub_80A5C60 sub_80A5C60: @ 0x080A5C60 @@ -132,7 +13,7 @@ sub_80A5C60: @ 0x080A5C60 mov r1, sp movs r0, #0 strh r0, [r1] - ldr r4, _080A5D00 @ =gUnk_08DAD844 + ldr r4, _080A5D00 @ =gpBonusClaimData ldr r1, [r4] ldr r2, _080A5D04 @ =0x01000142 mov r0, sp @@ -203,7 +84,7 @@ _080A5CF6: bl Proc_Goto b _080A5D10 .align 2, 0 -_080A5D00: .4byte gUnk_08DAD844 +_080A5D00: .4byte gpBonusClaimData _080A5D04: .4byte 0x01000142 _080A5D08: ldr r0, _080A5D20 @ =0x06013800 @@ -326,13 +207,13 @@ _080A5DE8: thumb_func_start sub_80A5DF0 sub_80A5DF0: @ 0x080A5DF0 push {lr} - ldr r0, _080A5E00 @ =gUnk_08DAD844 + ldr r0, _080A5E00 @ =gpBonusClaimData ldr r0, [r0] bl SaveBonusContentData pop {r0} bx r0 .align 2, 0 -_080A5E00: .4byte gUnk_08DAD844 +_080A5E00: .4byte gpBonusClaimData thumb_func_start sub_80A5E04 sub_80A5E04: @ 0x080A5E04 diff --git a/asm/savemenu.s b/asm/savemenu.s index b85a373..4b36042 100644 --- a/asm/savemenu.s +++ b/asm/savemenu.s @@ -234,7 +234,7 @@ _080A4296: thumb_func_start SaveMenu_Init SaveMenu_Init: @ 0x080A42A8 push {lr} - ldr r0, _080A4318 @ =gUnk_08DAD33C + ldr r0, _080A4318 @ =BgConfig_SaveMenu bl InitBgs ldr r2, _080A431C @ =gDispIo movs r0, #2 @@ -289,7 +289,7 @@ SaveMenu_Init: @ 0x080A42A8 pop {r0} bx r0 .align 2, 0 -_080A4318: .4byte gUnk_08DAD33C +_080A4318: .4byte BgConfig_SaveMenu _080A431C: .4byte gDispIo thumb_func_start ProcSaveMenu_InitScreen @@ -434,7 +434,7 @@ _080A43D2: ldr r1, _080A4530 @ =gAnims movs r0, #0x64 strb r0, [r1] - ldr r1, _080A4534 @ =0x02000001 + ldr r1, _080A4534 @ =gUnk_Savemenu_02000001 movs r0, #0xa strb r0, [r1] ldr r0, _080A4538 @ =SaveMenuOnHBlank @@ -449,7 +449,7 @@ _080A43D2: adds r0, r4, #0 bl Decompress ldr r0, _080A4540 @ =gBg3Tm - ldr r1, _080A4544 @ =TsaDirect_SpinRotation + ldr r1, _080A4544 @ =Tsa_SpinRotation movs r2, #0 movs r3, #5 bl sub_8001F14 @@ -519,11 +519,11 @@ _080A4524: .4byte 0x06010800 _080A4528: .4byte gSinLut _080A452C: .4byte gCosLut _080A4530: .4byte gAnims -_080A4534: .4byte 0x02000001 +_080A4534: .4byte gUnk_Savemenu_02000001 _080A4538: .4byte SaveMenuOnHBlank _080A453C: .4byte Img_SpinRotation _080A4540: .4byte gBg3Tm -_080A4544: .4byte TsaDirect_SpinRotation +_080A4544: .4byte Tsa_SpinRotation _080A4548: .4byte gPal thumb_func_start SaveMenu_LoadExtraMenuGraphics @@ -3136,7 +3136,7 @@ sub_80A5980: @ 0x080A5980 ldr r1, _080A5A38 @ =gAnims movs r0, #0x64 strb r0, [r1] - ldr r1, _080A5A3C @ =0x02000001 + ldr r1, _080A5A3C @ =gUnk_Savemenu_02000001 movs r0, #0xa strb r0, [r1] bl sub_80A6BB0 @@ -3178,7 +3178,7 @@ _080A5A2C: .4byte 0x06010800 _080A5A30: .4byte gBg0Tm _080A5A34: .4byte Tsa_SaveMenuBackground _080A5A38: .4byte gAnims -_080A5A3C: .4byte 0x02000001 +_080A5A3C: .4byte gUnk_Savemenu_02000001 thumb_func_start sub_80A5A40 sub_80A5A40: @ 0x080A5A40 diff --git a/asm/savemenu_difficulty.s b/asm/savemenu_difficulty.s index 2be27a6..3c707c3 100644 --- a/asm/savemenu_difficulty.s +++ b/asm/savemenu_difficulty.s @@ -2887,7 +2887,7 @@ sub_80A87A4: @ 0x080A87A4 ble _080A87B8 movs r4, #0x40 _080A87B8: - ldr r0, _080A87F0 @ =0x02000001 + ldr r0, _080A87F0 @ =gUnk_Savemenu_02000001 ldrb r0, [r0] subs r0, #0xa lsls r0, r0, #1 @@ -2917,7 +2917,7 @@ _080A87E6: b _080A87FA .align 2, 0 _080A87EC: .4byte gPal + 0x202 -_080A87F0: .4byte 0x02000001 +_080A87F0: .4byte gUnk_Savemenu_02000001 _080A87F4: .4byte 0x0201E9F4 _080A87F8: movs r1, #0x1f @@ -3124,7 +3124,7 @@ _080A893E: movs r0, #2 movs r3, #0x4c bl BgAffinAnchoring - ldr r4, _080A89AC @ =0x02000001 + ldr r4, _080A89AC @ =gUnk_Savemenu_02000001 ldr r0, [r5, #0x48] str r0, [sp] movs r0, #8 @@ -3149,7 +3149,7 @@ _080A893E: .align 2, 0 _080A89A4: .4byte gSinLut _080A89A8: .4byte 0x0201E8D4 -_080A89AC: .4byte 0x02000001 +_080A89AC: .4byte gUnk_Savemenu_02000001 _080A89B0: .4byte 0x000003FF _080A89B4: ldr r0, [r5, #0x48] diff --git a/data/const_data_0842D270.s b/data/const_data_0842D270.s index 56ae855..ead80d3 100644 --- a/data/const_data_0842D270.s +++ b/data/const_data_0842D270.s @@ -44,8 +44,8 @@ Tsa_SaveMenuBackground: @ 0x0842D860 Img_SpinRotation: @ 0x0842DD14 .incbin "FireEmblem7J.base.gba", 0x42DD14, 0x42FD94 - 0x42DD14 - .global TsaDirect_SpinRotation -TsaDirect_SpinRotation: @ 0x0842FD94 + .global Tsa_SpinRotation +Tsa_SpinRotation: @ 0x0842FD94 .incbin "FireEmblem7J.base.gba", 0x42FD94, 0x42FF00 - 0x42FD94 .global Img_SaveMenuSprits diff --git a/data/data_08DAD284.s b/data/data_08DAD284.s index 7dec678..84814c2 100644 --- a/data/data_08DAD284.s +++ b/data/data_08DAD284.s @@ -15,15 +15,3 @@ gExtraMapInfo: @ 0x08DAD298 .global gUnk_08DAD29C gUnk_08DAD29C: @ 0x08DAD29C .incbin "FireEmblem7J.base.gba", 0xDAD29C, 0xDAD33C - 0xDAD29C - - .global gUnk_08DAD33C -gUnk_08DAD33C: @ 0x08DAD33C - .incbin "FireEmblem7J.base.gba", 0xDAD33C, 0xDAD354 - 0xDAD33C - - .global gUnk_08DAD354 -gUnk_08DAD354: @ 0x08DAD354 - .incbin "FireEmblem7J.base.gba", 0xDAD354, 0xDAD384 - 0xDAD354 - - .global gUnk_08DAD384 -gUnk_08DAD384: @ 0x08DAD384 - .incbin "FireEmblem7J.base.gba", 0xDAD384, 0xDAD3A4 - 0xDAD384 diff --git a/data/savemenu.s b/data/savemenu.s index 54b332c..399a144 100644 --- a/data/savemenu.s +++ b/data/savemenu.s @@ -1,5 +1,13 @@ .section .data + .global gUnk_08DAD354 +gUnk_08DAD354: @ 0x08DAD354 + .incbin "FireEmblem7J.base.gba", 0xDAD354, 0xDAD384 - 0xDAD354 + + .global gUnk_08DAD384 +gUnk_08DAD384: @ 0x08DAD384 + .incbin "FireEmblem7J.base.gba", 0xDAD384, 0xDAD3A4 - 0xDAD384 + .global ProcScr_SaveMenu ProcScr_SaveMenu: @ 0x08DAD3A4 @ PROC_19 @@ -281,9 +289,9 @@ gUnk_08DAD674: @ 0x08DAD674 gUnk_08DAD784: @ 0x08DAD784 .incbin "FireEmblem7J.base.gba", 0xDAD784, 0xDAD844 - 0xDAD784 - .global gUnk_08DAD844 -gUnk_08DAD844: @ 0x08DAD844 - .incbin "FireEmblem7J.base.gba", 0xDAD844, 0xDAD848 - 0xDAD844 + .global gpBonusClaimData +gpBonusClaimData: @ 0x08DAD844 + .4byte gBonusClaimData .global gUnk_08DAD848 gUnk_08DAD848: @ 0x08DAD848 diff --git a/include/gbafe.h b/include/gbafe.h index f4b7034..004bd3b 100644 --- a/include/gbafe.h +++ b/include/gbafe.h @@ -1,6 +1,5 @@ #pragma once -#include "gba/gba.h" #include "gbafe/global.h" #include "constants/terrains.h" @@ -57,3 +56,4 @@ #include "gbafe/bmio.h" #include "gbafe/ai.h" #include "gbafe/scrolling_util.h" +#include "gbafe/bonusclaim.h" diff --git a/include/gbafe/bonusclaim.h b/include/gbafe/bonusclaim.h new file mode 100644 index 0000000..4d66477 --- /dev/null +++ b/include/gbafe/bonusclaim.h @@ -0,0 +1,13 @@ +#pragma once + +#include "global.h" + +struct BonusClaimEnt { + /* 00 */ u8 unseen; + /* 01 */ u8 kind; + /* 02 */ u8 itemId; + /* 03 */ char str[0x11]; // Only used in FE8 +}; + +extern struct BonusClaimEnt gBonusClaimData[]; +extern CONST_DATA struct BonusClaimEnt * gpBonusClaimData; diff --git a/include/gbafe/global.h b/include/gbafe/global.h index b092f43..e3b0cfa 100644 --- a/include/gbafe/global.h +++ b/include/gbafe/global.h @@ -3,6 +3,8 @@ #include #include +#include "../gba/gba.h" + #include "types.h" #include "unk-types.h" #include "unk-functions.h" diff --git a/include/gbafe/hardware.h b/include/gbafe/hardware.h index 9845b70..eb08e7f 100644 --- a/include/gbafe/hardware.h +++ b/include/gbafe/hardware.h @@ -12,6 +12,16 @@ enum { /* DispCnt::obj_mapping */ OBJ_MAPPING_2D = 0, OBJ_MAPPING_1D = 1, + + /* BgCnt::size */ + BGCNT_SIZE_TXT256x256 = BGCNT_TXT256x256 >> 14, + BGCNT_SIZE_TXT512x256 = BGCNT_TXT512x256 >> 14, + BGCNT_SIZE_TXT256x512 = BGCNT_TXT256x512 >> 14, + BGCNT_SIZE_TXT512x512 = BGCNT_TXT512x512 >> 14, + BGCNT_SIZE_AFF128x128 = BGCNT_AFF128x128 >> 14, + BGCNT_SIZE_AFF256x256 = BGCNT_AFF256x256 >> 14, + BGCNT_SIZE_AFF512x512 = BGCNT_AFF512x512 >> 14, + BGCNT_SIZE_AFF1024x1024 = BGCNT_AFF1024x1024 >> 14, }; #if MODERN @@ -411,15 +421,15 @@ void RefreshKeySt(struct KeySt * keySt); void ClearKeySt(struct KeySt * keySt); void InitKeySt(struct KeySt * keySt); void SetBgOffset(u16 bgid, u16 x_offset, u16 y_offset); -void func_fe6_08001AE4(void); -void func_fe6_08001B18(u8 a, u8 b); -void func_fe6_08001B4C(u16 * a, u16 * b); -void func_fe6_08001B8C(void * tm, void const * in_data, u8 base, u8 linebits); -void func_fe6_08001C68(u16 * tm, short const * in_data, int unused); +void sub_8001E6C(void); +void sub_8001EA0(u8 a, u8 b); +void sub_8001ED4(u16 *dst, u16 *src); +void sub_8001F14(void *tm, void const *in_data, u8 base, u8 linebits); +void sub_8001FF0(u16 * tm, short const * in_data, int unused); void ColorFadeInit(void); -void func_fe6_08001D44(u16 const * in_pal, int bank, int count, int unk); -void func_fe6_08001E68(int a, int b, int c, int d); -void func_fe6_08001F88(int a, int b, int c); +void sub_80020CC(u16 const * in_pal, int bank, int count, int unk); +void sub_80021F0(int a, int b, int c, int d); +void sub_8002310(int a, int b, int c); void ColorFadeSetupFromColorToBlack(s8 component_step); void ColorFadeSetupFromBlack(s8 component_step); void ColorFadeSetupFromColorToWhite(s8 component_step); @@ -428,7 +438,7 @@ void ColorFadeTick2(void); void InitBgs(u16 const * config); u16 * GetBgTilemap(int bg); void SoftResetIfKeyCombo(void); -void func_fe6_0800285C(int unk); +void sub_8002C24(int unk); void SetOnHBlankA(Func func); void SetOnHBlankB(Func func); int GetBgFromPtr(u16 *ptr); diff --git a/include/gbafe/mu.h b/include/gbafe/mu.h index 76a2bb7..e2ad523 100644 --- a/include/gbafe/mu.h +++ b/include/gbafe/mu.h @@ -107,7 +107,7 @@ struct MuProc * StartUiMu(struct Unit * unit, int x, int y); // sub_806D2E4 // sub_806D3F8 // sub_806D47C -// EndAllMus +void EndAllMus(void); // sub_806D4BC // sub_806D4D4 // sub_806D4EC diff --git a/include/gbafe/savemenu.h b/include/gbafe/savemenu.h index 0ddb530..296ca87 100644 --- a/include/gbafe/savemenu.h +++ b/include/gbafe/savemenu.h @@ -5,6 +5,12 @@ #define REG_BLDY_16 (*(u16 volatile *) ®_BLDY) +enum videoalloc_savemenu { + BGPAL_SAVEMENU_BG = 0, + + OBJPAL_SAVEMENU_WINDOW = 1, +}; + enum save_menu_action_flag_bitfile { SAVEMENU_ACTION_BITFILE_0 = 1 << 0, SAVEMENU_ACTION_BITFILE_1 = 1 << 1, @@ -259,3 +265,27 @@ ProcPtr StartSpinRotation(ProcPtr parent); // ??? sub_80A9538 // ??? sub_80A9578 // ??? StartDrawDifficultyMenuSprites + +/* savemenu */ +extern CONST_DATA u16 BgConfig_SaveMenu[]; +// ??? gUnk_08DAD354 +// ??? gUnk_08DAD384 +// ??? ProcScr_SaveMenu +// ??? gUnk_08DAD674 +// ??? gUnk_08DAD784 +// ??? gpBonusClaimData +// ??? gUnk_08DAD848 +// ??? gUnk_08DAD8A8 +// ??? gUnk_08DAD8C2 +// ??? gUnk_08DAD8FC +// ??? gUnk_08DAD904 +// ??? gUnk_08DAD90C +// ??? gUnk_08DAD9D6 +// ??? gUnk_08DAD9E4 +// ??? gUnk_08DADA10 +// ??? ProcScr_SaveDraw +// ??? ProcScr_SpinRotation +// ??? ProcScr_SaveDrawCursor +// ??? gUnk_08DADAAC +// ??? gUnk_08DADAC8 +// ??? ProcScr_SaveBgUp diff --git a/include/gbafe/unk-data.h b/include/gbafe/unk-data.h index 0cb8155..cc49d2a 100644 --- a/include/gbafe/unk-data.h +++ b/include/gbafe/unk-data.h @@ -168,8 +168,8 @@ extern u8 Tsa_QuintessenceFx[]; // ??? gUnk_0842D7E4 extern u16 Pal_SaveMenuBackground[]; extern u8 Tsa_SaveMenuBackground[]; // uncompressed TSA -// ??? Img_SpinRotation -// ??? TsaDirect_SpinRotation +extern u8 Img_SpinRotation[]; +extern u8 Tsa_SpinRotation[]; // uncompressed TSA extern u8 Img_SaveMenuSprits[]; // ??? gUnk_0843165C extern u16 Pal_SaveMenuWindow[]; @@ -1965,28 +1965,9 @@ extern struct ProcCmd ProcScr_PrepItemUseScreen[]; // ??? gpSramExtraData // ??? gExtraMapInfo // ??? gUnk_08DAD29C -// ??? gUnk_08DAD33C -// ??? gUnk_08DAD354 -// ??? gUnk_08DAD384 -// ??? ProcScr_SaveMenu -// ??? gUnk_08DAD674 -// ??? gUnk_08DAD784 -// ??? gUnk_08DAD844 -// ??? gUnk_08DAD848 -// ??? gUnk_08DAD8A8 -// ??? gUnk_08DAD8C2 -// ??? gUnk_08DAD8FC -// ??? gUnk_08DAD904 -// ??? gUnk_08DAD90C -// ??? gUnk_08DAD9D6 -// ??? gUnk_08DAD9E4 -// ??? gUnk_08DADA10 -// ??? ProcScr_SaveDraw -// ??? ProcScr_SpinRotation -// ??? ProcScr_SaveDrawCursor -// ??? gUnk_08DADAAC -// ??? gUnk_08DADAC8 -// ??? ProcScr_SaveBgUp + +/* savemenu.h */ + // ??? gUnk_08DADD34 // ??? gUnk_08DADD50 // ??? gUnk_08DADD78 diff --git a/include/gbafe/unk-functions.h b/include/gbafe/unk-functions.h index 71302f3..ce53d2f 100644 --- a/include/gbafe/unk-functions.h +++ b/include/gbafe/unk-functions.h @@ -33,7 +33,6 @@ int GetUnitSupportBonuses(struct Unit * unit, struct SupportBonuses * bonuses); bool sub_8028620(struct Unit * unit); void PidStatsAddExpGained(u8 pid, int expGain); int GetMapChangeIdAt(int x, int y); -void EndAllMus(void); void StartBattleManim(void); void WriteSuspendSave(int slot); void StartBgmVolumeChange(int volume_from, int volume_to, int duration, ProcPtr parent); diff --git a/src/savedraw.c b/src/savedraw.c new file mode 100644 index 0000000..fe9b894 --- /dev/null +++ b/src/savedraw.c @@ -0,0 +1,35 @@ +#include "gbafe.h" + +void sub_80A5B44(void) +{ + InitBgs(BgConfig_SaveMenu); + + gDispIo.disp_ct.mode = DISPCNT_MODE_1; + gDispIo.bg2_ct.size = BGCNT_SIZE_AFF256x256; /* in mode1, bg2 is not reg but *aff* */ + gDispIo.bg2_ct.wrap = false; + + gDispIo.bg0_ct.priority = 3; + gDispIo.bg1_ct.priority = 0; + gDispIo.bg2_ct.priority = 2; + gDispIo.bg3_ct.priority = 2; + + EndAllMus(); + + SetDispEnable(0, 0, 0, 0, 0); + + gUnk_Savemenu_02000001 = 10; + gUnk_Savemenu_02000000 = 100; + + SetOnHBlankA(SaveMenuOnHBlank); + + ApplyPalettes(Pal_SaveMenuWindow, OBJPAL_SAVEMENU_WINDOW + 0x10, 8); + ApplyPalettes(Pal_SaveMenuBackground, BGPAL_SAVEMENU_BG, 3); + + Decompress(Img_MuralBackground, (void *)BG_VRAM + GetBgChrOffset(BG_0)); + TmApplyTsa(gBg0Tm, Tsa_SaveMenuBackground, 0); + + Decompress(Img_SpinRotation, (void *)BG_VRAM + GetBgChrOffset(BG_2)); + sub_8001F14(gBg3Tm, Tsa_SpinRotation, 0, 5); + + EnableBgSync(BG3_SYNC_BIT); +} diff --git a/src/savemenu.c b/src/savemenu.c index e2cc380..a8175fb 100644 --- a/src/savemenu.c +++ b/src/savemenu.c @@ -3,6 +3,13 @@ EWRAM_OVERLAY(savemenu) u8 gUnk_Savemenu_02000000 = 0; EWRAM_OVERLAY(savemenu) u8 gUnk_Savemenu_02000001 = 0; +CONST_DATA u16 BgConfig_SaveMenu[] = { + 0x0000, 0x6000, 0x0000, + 0xC000, 0x6800, 0x0000, + 0x8000, 0x7800, 0x0000, + 0x8000, 0x7800, 0x0000, +}; + void SaveMenuOnHBlank(void) { int ret;