diff options
author | ProjectRevoTPP <projectrevotpp@hotmail.com> | 2016-10-25 19:11:20 -0400 |
---|---|---|
committer | YamaArashi <YamaArashi@users.noreply.github.com> | 2016-10-25 16:11:20 -0700 |
commit | cfe4a52393bd5d09d78f68ac165406d3e9354706 (patch) | |
tree | b92b61c567865d882d1f6f4d2db359153f55441e | |
parent | 427131714c72177bf4480f23a1ee60db6cc5b9ef (diff) |
decompile save_menu_util.c (#70)
* decompile save_menu_util.c
* rename right align
* formatting
* whoops
-rw-r--r-- | Makefile | 1 | ||||
-rw-r--r-- | asm/region_map.s | 8 | ||||
-rw-r--r-- | asm/save_menu_util.s | 457 | ||||
-rw-r--r-- | ld_script.txt | 2 | ||||
-rw-r--r-- | src/save_menu_util.c | 158 | ||||
-rw-r--r-- | src/start_menu.c | 4 |
6 files changed, 165 insertions, 465 deletions
@@ -78,7 +78,6 @@ asm/field_effect.o \ asm/rom_80859BC.o \ asm/pokedex.o \ asm/trainer_card.o \ -asm/save_menu_util.o \ asm/rom_8094928.o \ asm/item_menu.o \ asm/battle_anim_80A7E7C.o \ diff --git a/asm/region_map.s b/asm/region_map.s index c02ded1cc..d56811e20 100644 --- a/asm/region_map.s +++ b/asm/region_map.s @@ -3006,8 +3006,8 @@ _080FBFF2: bx r1 thumb_func_end sub_80FBFB4 - thumb_func_start sub_80FBFF8 -sub_80FBFF8: @ 80FBFF8 + thumb_func_start CopyMapName +CopyMapName: @ 80FBFF8 push {lr} lsls r1, 16 lsrs r1, 16 @@ -3032,7 +3032,7 @@ _080FC020: _080FC026: pop {r1} bx r1 - thumb_func_end sub_80FBFF8 + thumb_func_end CopyMapName thumb_func_start sub_80FC02C sub_80FC02C: @ 80FC02C @@ -3041,7 +3041,7 @@ sub_80FC02C: @ 80FC02C lsrs r1, 16 cmp r1, 0x42 beq _080FC03C - bl sub_80FBFF8 + bl CopyMapName b _080FC042 _080FC03C: ldr r1, _080FC048 @ =gOtherText_Hideout diff --git a/asm/save_menu_util.s b/asm/save_menu_util.s deleted file mode 100644 index 5f092c135..000000000 --- a/asm/save_menu_util.s +++ /dev/null @@ -1,457 +0,0 @@ - .include "constants/gba_constants.s" - .include "constants/species_constants.s" - .include "asm/macros.s" - - .syntax unified - - .text - - thumb_func_start sub_80945C0 -sub_80945C0: @ 80945C0 - push {r4-r6,lr} - lsls r0, 16 - lsrs r5, r0, 16 - lsls r1, 16 - lsrs r4, r1, 16 - movs r6, 0xC - bl sub_809473C - lsls r0, 24 - cmp r0, 0 - beq _080945D8 - movs r6, 0xD -_080945D8: - ldr r0, _08094658 @ =0x00000801 - bl FlagGet - lsls r0, 24 - cmp r0, 0 - beq _0809465C - lsls r0, r5, 24 - lsrs r0, 24 - lsls r1, r4, 24 - lsrs r1, 24 - adds r2, r5, r6 - lsls r2, 24 - lsrs r2, 24 - adds r3, r4, 0 - adds r3, 0xB - lsls r3, 24 - lsrs r3, 24 - bl MenuDrawTextWindow - lsls r0, r5, 16 - movs r1, 0x80 - lsls r1, 9 - adds r0, r1 - lsrs r5, r0, 16 - asrs r0, 16 - lsls r1, r4, 16 - movs r2, 0x80 - lsls r2, 9 - adds r1, r2 - lsrs r4, r1, 16 - asrs r1, 16 - bl sub_8094778 - lsls r5, 16 - asrs r5, 16 - lsls r1, r4, 16 - asrs r4, r1, 16 - movs r0, 0x80 - lsls r0, 10 - adds r1, r0 - asrs r1, 16 - adds r0, r5, 0 - bl sub_8094740 - adds r1, r4, 0x4 - lsls r1, 16 - asrs r1, 16 - adds r0, r5, 0 - bl sub_80947B0 - adds r1, r4, 0x6 - lsls r1, 16 - asrs r1, 16 - adds r0, r5, 0 - bl sub_80947F8 - adds r4, 0x8 - lsls r4, 16 - asrs r4, 16 - adds r0, r5, 0 - adds r1, r4, 0 - bl sub_8094844 - b _080946C2 - .align 2, 0 -_08094658: .4byte 0x00000801 -_0809465C: - lsls r0, r5, 24 - lsrs r0, 24 - lsls r1, r4, 24 - lsrs r1, 24 - adds r2, r5, r6 - lsls r2, 24 - lsrs r2, 24 - adds r3, r4, 0 - adds r3, 0x9 - lsls r3, 24 - lsrs r3, 24 - bl MenuDrawTextWindow - lsls r0, r5, 16 - movs r1, 0x80 - lsls r1, 9 - adds r0, r1 - lsrs r5, r0, 16 - asrs r0, 16 - lsls r1, r4, 16 - movs r2, 0x80 - lsls r2, 9 - adds r1, r2 - lsrs r4, r1, 16 - asrs r1, 16 - bl sub_8094778 - lsls r5, 16 - asrs r5, 16 - lsls r1, r4, 16 - asrs r4, r1, 16 - movs r0, 0x80 - lsls r0, 10 - adds r1, r0 - asrs r1, 16 - adds r0, r5, 0 - bl sub_8094740 - adds r1, r4, 0x4 - lsls r1, 16 - asrs r1, 16 - adds r0, r5, 0 - bl sub_80947B0 - adds r4, 0x6 - lsls r4, 16 - asrs r4, 16 - adds r0, r5, 0 - adds r1, r4, 0 - bl sub_8094844 -_080946C2: - pop {r4-r6} - pop {r0} - bx r0 - thumb_func_end sub_80945C0 - - thumb_func_start sub_80946C8 -sub_80946C8: @ 80946C8 - push {r4-r7,lr} - mov r7, r8 - push {r7} - lsls r0, 16 - lsrs r4, r0, 16 - adds r7, r4, 0 - lsls r1, 16 - lsrs r5, r1, 16 - mov r8, r5 - movs r6, 0xC - bl sub_809473C - lsls r0, 24 - cmp r0, 0 - beq _080946E8 - movs r6, 0xD -_080946E8: - ldr r0, _08094710 @ =0x00000801 - bl FlagGet - lsls r0, 24 - cmp r0, 0 - beq _08094714 - lsls r0, r4, 24 - lsrs r0, 24 - lsls r1, r5, 24 - lsrs r1, 24 - adds r2, r4, r6 - lsls r2, 24 - lsrs r2, 24 - adds r3, r5, 0 - adds r3, 0xB - lsls r3, 24 - lsrs r3, 24 - bl MenuZeroFillWindowRect - b _08094730 - .align 2, 0 -_08094710: .4byte 0x00000801 -_08094714: - lsls r0, r7, 24 - lsrs r0, 24 - mov r2, r8 - lsls r1, r2, 24 - lsrs r1, 24 - adds r2, r7, r6 - lsls r2, 24 - lsrs r2, 24 - mov r3, r8 - adds r3, 0x9 - lsls r3, 24 - lsrs r3, 24 - bl MenuZeroFillWindowRect -_08094730: - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r0} - bx r0 - thumb_func_end sub_80946C8 - - thumb_func_start sub_809473C -sub_809473C: @ 809473C - movs r0, 0x1 - bx lr - thumb_func_end sub_809473C - - thumb_func_start sub_8094740 -sub_8094740: @ 8094740 - push {r4,r5,lr} - adds r4, r0, 0 - adds r5, r1, 0 - lsls r4, 16 - lsrs r4, 16 - ldr r0, _08094770 @ =gOtherText_Player - lsls r1, r4, 24 - lsrs r1, 24 - lsls r5, 24 - lsrs r5, 24 - adds r2, r5, 0 - bl MenuPrint - ldr r0, _08094774 @ =gSaveBlock2 - adds r4, 0xC - lsls r4, 24 - lsrs r4, 24 - adds r1, r4, 0 - adds r2, r5, 0 - bl MenuPrint_RightAligned - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_08094770: .4byte gOtherText_Player -_08094774: .4byte gSaveBlock2 - thumb_func_end sub_8094740 - - thumb_func_start sub_8094778 -sub_8094778: @ 8094778 - push {r4,r5,lr} - sub sp, 0x20 - adds r4, r0, 0 - adds r5, r1, 0 - lsls r4, 16 - lsrs r4, 16 - lsls r5, 16 - lsrs r5, 16 - ldr r0, _080947AC @ =gMapHeader - ldrb r1, [r0, 0x14] - mov r0, sp - bl sub_80FBFF8 - lsls r4, 24 - lsrs r4, 24 - lsls r5, 24 - lsrs r5, 24 - mov r0, sp - adds r1, r4, 0 - adds r2, r5, 0 - bl MenuPrint - add sp, 0x20 - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_080947AC: .4byte gMapHeader - thumb_func_end sub_8094778 - - thumb_func_start sub_80947B0 -sub_80947B0: @ 80947B0 - push {r4,r5,lr} - sub sp, 0x10 - adds r4, r0, 0 - adds r5, r1, 0 - lsls r4, 16 - lsrs r4, 16 - ldr r0, _080947F4 @ =gOtherText_Badges - lsls r1, r4, 24 - lsrs r1, 24 - lsls r5, 24 - lsrs r5, 24 - adds r2, r5, 0 - bl MenuPrint - bl GetBadgeCount - adds r1, r0, 0 - lsls r1, 24 - lsrs r1, 24 - mov r0, sp - bl ConvertIntToDecimalString - adds r4, 0xC - lsls r4, 24 - lsrs r4, 24 - mov r0, sp - adds r1, r4, 0 - adds r2, r5, 0 - bl MenuPrint_RightAligned - add sp, 0x10 - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_080947F4: .4byte gOtherText_Badges - thumb_func_end sub_80947B0 - - thumb_func_start sub_80947F8 -sub_80947F8: @ 80947F8 - push {r4,r5,lr} - sub sp, 0x10 - adds r4, r0, 0 - adds r5, r1, 0 - lsls r4, 16 - lsrs r4, 16 - ldr r0, _08094840 @ =gOtherText_Pokedex - lsls r1, r4, 24 - lsrs r1, 24 - lsls r5, 24 - lsrs r5, 24 - adds r2, r5, 0 - bl MenuPrint - bl GetPokedexSeenCount - adds r1, r0, 0 - lsls r1, 16 - lsrs r1, 16 - mov r0, sp - movs r2, 0x1 - movs r3, 0x3 - bl ConvertIntToDecimalStringN - adds r4, 0xC - lsls r4, 24 - lsrs r4, 24 - mov r0, sp - adds r1, r4, 0 - adds r2, r5, 0 - bl MenuPrint_RightAligned - add sp, 0x10 - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_08094840: .4byte gOtherText_Pokedex - thumb_func_end sub_80947F8 - - thumb_func_start sub_8094844 -sub_8094844: @ 8094844 - push {r4,r5,lr} - sub sp, 0x10 - adds r4, r0, 0 - adds r5, r1, 0 - lsls r4, 16 - lsrs r4, 16 - ldr r0, _08094888 @ =gOtherText_PlayTime - lsls r1, r4, 24 - lsrs r1, 24 - lsls r5, 24 - lsrs r5, 24 - adds r2, r5, 0 - bl MenuPrint - ldr r0, _0809488C @ =gSaveBlock2 - ldrh r1, [r0, 0xE] - ldrb r2, [r0, 0x10] - mov r0, sp - movs r3, 0x1 - bl FormatPlayTime - adds r4, 0xC - lsls r4, 24 - lsrs r4, 24 - mov r0, sp - adds r1, r4, 0 - adds r2, r5, 0 - bl MenuPrint_RightAligned - add sp, 0x10 - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_08094888: .4byte gOtherText_PlayTime -_0809488C: .4byte gSaveBlock2 - thumb_func_end sub_8094844 - - thumb_func_start GetBadgeCount -GetBadgeCount: @ 8094890 - push {r4,r5,lr} - movs r5, 0 - ldr r4, _080948BC @ =0x00000807 -_08094896: - lsls r0, r4, 16 - lsrs r0, 16 - bl FlagGet - lsls r0, 24 - cmp r0, 0 - beq _080948AA - adds r0, r5, 0x1 - lsls r0, 24 - lsrs r5, r0, 24 -_080948AA: - adds r4, 0x1 - ldr r0, _080948C0 @ =0x0000080e - cmp r4, r0 - ble _08094896 - adds r0, r5, 0 - pop {r4,r5} - pop {r1} - bx r1 - .align 2, 0 -_080948BC: .4byte 0x00000807 -_080948C0: .4byte 0x0000080e - thumb_func_end GetBadgeCount - - thumb_func_start GetPokedexSeenCount -GetPokedexSeenCount: @ 80948C4 - push {lr} - bl sub_806912C - cmp r0, 0 - beq _080948D6 - movs r0, 0x1 - bl pokedex_count - b _080948DC -_080948D6: - movs r0, 0x1 - bl sub_8090F68 -_080948DC: - lsls r0, 16 - lsrs r0, 16 - pop {r1} - bx r1 - thumb_func_end GetPokedexSeenCount - - thumb_func_start FormatPlayTime -FormatPlayTime: @ 80948E4 - push {r4-r6,lr} - adds r5, r0, 0 - adds r4, r3, 0 - lsls r1, 16 - lsrs r1, 16 - lsls r2, 16 - lsrs r6, r2, 16 - lsls r4, 16 - lsrs r4, 16 - bl ConvertIntToDecimalString - adds r5, r0, 0 - movs r0, 0 - strb r0, [r5] - lsls r4, 16 - asrs r4, 16 - cmp r4, 0 - beq _0809490E - movs r0, 0xF0 - strb r0, [r5, 0x1] - b _08094910 -_0809490E: - strb r4, [r5, 0x1] -_08094910: - movs r0, 0 - strb r0, [r5, 0x2] - adds r5, 0x3 - adds r0, r5, 0 - adds r1, r6, 0 - movs r2, 0x2 - movs r3, 0x2 - bl ConvertIntToDecimalStringN - pop {r4-r6} - pop {r0} - bx r0 - thumb_func_end FormatPlayTime - - .align 2, 0 @ Don't pad with nop. diff --git a/ld_script.txt b/ld_script.txt index 0ce9fe21d..9031badf6 100644 --- a/ld_script.txt +++ b/ld_script.txt @@ -100,7 +100,7 @@ SECTIONS { src/pokedex.o(.text); asm/pokedex.o(.text); asm/trainer_card.o(.text); - asm/save_menu_util.o(.text); + src/save_menu_util.o(.text); asm/rom_8094928.o(.text); asm/item_menu.o(.text); asm/battle_anim_80A7E7C.o(.text); diff --git a/src/save_menu_util.c b/src/save_menu_util.c new file mode 100644 index 000000000..d7c07673f --- /dev/null +++ b/src/save_menu_util.c @@ -0,0 +1,158 @@ +#include "global.h" +#include "menu.h" + +extern u8 FlagGet(u16); +extern u8 gOtherText_Player[]; +extern u8 gOtherText_Badges[]; +extern u8 gOtherText_Pokedex[]; +extern u8 gOtherText_PlayTime[]; + +extern void ConvertIntToDecimalStringN(u8 *dest, u32 value, int mode, u8 n); + +u8 sub_809473C(void); +u8 GetBadgeCount(void); + +void PrintSavePlayerName(s16 x, s16 y); +void PrintSaveMapName(s16 x, s16 y); +void PrintSaveBadges(s16 x, s16 y); +void PrintSavePokedexCount(s16 x, s16 y); +void PrintSavePlayTime(s16 x, s16 y); + +void HandleDrawSaveWindowInfo(s16 left, s16 top) +{ + u32 width = 12; + + if (sub_809473C()) + width = 13; + + if (FlagGet(2049)) // player has Pokédex? + { + // print info + dex information. + MenuDrawTextWindow(left, top, left + width, top + 11); + PrintSaveMapName(++left, ++top); // MAP NAME + PrintSavePlayerName(left, top + 2); // PLAYER + PrintSaveBadges(left, top + 4); // BADGES + PrintSavePokedexCount(left, top + 6); // POKEDEX + PrintSavePlayTime(left, top + 8); // PLAY TIME + } + else + { + // print everything besides dex. + MenuDrawTextWindow(left, top, left + width, top + 9); + PrintSaveMapName(++left, ++top); // MAP NAME + PrintSavePlayerName(left, top + 2); // PLAYER + PrintSaveBadges(left, top + 4); // BADGES + PrintSavePlayTime(left, top + 6); // PLAY TIME + } +} + +void sub_80946C8(u16 left, u16 top) +{ + u32 width = 12; + + if (sub_809473C()) + width = 13; + + if (FlagGet(2049)) // player has Pokédex? + MenuZeroFillWindowRect(left, top, left + width, top + 11); + else + MenuZeroFillWindowRect(left, top, left + width, top + 9); +} + +u8 sub_809473C() +{ + return 1; +} + +void PrintSavePlayerName(s16 x, s16 y) +{ + MenuPrint(gOtherText_Player, x, y); + MenuPrint_RightAligned(gSaveBlock2.playerName, x + 12, y); +} + +void PrintSaveMapName(s16 x, s16 y) +{ + char name[32]; + + CopyMapName(name, gMapHeader.name); + MenuPrint(name, x, y); +} + +void PrintSaveBadges(s16 x, s16 y) +{ + char badges[16]; + u8 badgeCount; + + MenuPrint(gOtherText_Badges, x, y); + badgeCount = GetBadgeCount(); + ConvertIntToDecimalString(badges, badgeCount); + MenuPrint_RightAligned(badges, x + 12, y); +} + +void PrintSavePokedexCount(s16 x, s16 y) +{ + char pokedex[16]; + u16 pokedexCount; + + MenuPrint(gOtherText_Pokedex, x, y); + pokedexCount = GetPokedexSeenCount(); + ConvertIntToDecimalStringN(pokedex, pokedexCount, 1, 3); + MenuPrint_RightAligned(pokedex, x + 12, y); +} + +void PrintSavePlayTime(s16 x, s16 y) +{ + char playtime[16]; + + MenuPrint(gOtherText_PlayTime, x, y); + FormatPlayTime(playtime, gSaveBlock2.playTimeHours, gSaveBlock2.playTimeMinutes, 1); + MenuPrint_RightAligned(playtime, x + 12, y); +} + +u8 GetBadgeCount(void) +{ + u8 badgeCount = 0; + int badgeFlag = 0x807; // first badge flag is located here. + + for(;badgeFlag <= 0x80E; badgeFlag++) + { + if ( FlagGet(badgeFlag) ) + badgeCount++; + } + + return badgeCount; +} + +u16 GetPokedexSeenCount() +{ + u16 pokedexSeenCount; + + if ( sub_806912C() ) // national dex check? + pokedexSeenCount = pokedex_count(1); + else + pokedexSeenCount = sub_8090F68(1); + + return pokedexSeenCount; +} + +void FormatPlayTime(char *playtime, u16 hours, u16 minutes, u16 unk) +{ + s16 colon = unk; + playtime = ConvertIntToDecimalString(playtime, hours); + + // playtime[0] is hours. + // playtime[1] is the character to render between hours and minutes. + // playtime[2] is minutes. + + playtime[0] = 0; + + if (colon) + playtime[1] = 0xF0; // set middle character to ":" + else + playtime[1] = 0; + + playtime[2] = 0; + playtime += 3; + + ConvertIntToDecimalStringN(playtime, minutes, 2, 2); +} diff --git a/src/start_menu.c b/src/start_menu.c index 979199c0b..b3a0fe4c6 100644 --- a/src/start_menu.c +++ b/src/start_menu.c @@ -20,7 +20,7 @@ extern void remove_some_task(void); extern void dp12_8087EA4(void); extern void sav12_xor_increment(u8 index); extern bool8 sub_8125D44(u8); //Saving related -extern void sub_80945C0(u8, u8); +extern void HandleDrawSaveWindowInfo(u8, u8); extern void sub_80946C8(u8, u8); extern void save_serialize_map(void); extern void PlayRainSoundEffect(void); @@ -603,7 +603,7 @@ static bool8 SaveDialogCheckForTimeoutAndKeypress(void) static u8 SaveDialogCB_DisplayConfirmMessage(void) { MenuZeroFillScreen(); - sub_80945C0(0, 0); + HandleDrawSaveWindowInfo(0, 0); //"Would you like to save the game?" DisplaySaveMessageWithCallback(gSaveText_WouldYouLikeToSave, SaveDialogCB_DisplayConfirmYesNoMenu); return SAVE_IN_PROGRESS; |