summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorProjectRevoTPP <projectrevotpp@hotmail.com>2016-10-25 19:11:20 -0400
committerYamaArashi <YamaArashi@users.noreply.github.com>2016-10-25 16:11:20 -0700
commitcfe4a52393bd5d09d78f68ac165406d3e9354706 (patch)
treeb92b61c567865d882d1f6f4d2db359153f55441e
parent427131714c72177bf4480f23a1ee60db6cc5b9ef (diff)
decompile save_menu_util.c (#70)
* decompile save_menu_util.c * rename right align * formatting * whoops
-rw-r--r--Makefile1
-rw-r--r--asm/region_map.s8
-rw-r--r--asm/save_menu_util.s457
-rw-r--r--ld_script.txt2
-rw-r--r--src/save_menu_util.c158
-rw-r--r--src/start_menu.c4
6 files changed, 165 insertions, 465 deletions
diff --git a/Makefile b/Makefile
index ffa74b4aa..a666c12b8 100644
--- a/Makefile
+++ b/Makefile
@@ -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;