From 05d70f94ee75804f3b307dc0c3a2cc2104ad6783 Mon Sep 17 00:00:00 2001 From: DizzyEggg Date: Thu, 23 Oct 2025 16:43:08 +0200 Subject: [PATCH] textbox externs --- include/memory.h | 2 +- include/naming_screen.h | 2 +- include/textbox.h | 20 ++++++++++++++ src/ground_lives.c | 2 +- src/ground_lives_helper.c | 2 +- src/ground_main.c | 5 ---- src/ground_script.c | 28 +++---------------- src/memory.c | 6 ++--- src/naming_screen.c | 2 +- src/script_item.c | 2 +- src/textbox.c | 57 ++++++++++++++++++++------------------- 11 files changed, 63 insertions(+), 65 deletions(-) diff --git a/include/memory.h b/include/memory.h index ca1b4baca..da84ee09e 100644 --- a/include/memory.h +++ b/include/memory.h @@ -7,7 +7,7 @@ void MemoryClear8(void *dest, s32 size); void MemoryClear16(u16 *dest, s32 size); void MemoryFill8(void *dest, u8 value, s32 size); void MemoryFill16(u16 *dest, u16 value, s32 size); -void MemoryCopy8(void *dest, void *src, s32 size); +void MemoryCopy8(void *dest, const void *src, s32 size); void MemoryCopy32(u32 *dest, const u32 *src, s32 size); void *MemoryAlloc(s32 size, s32 group); diff --git a/include/naming_screen.h b/include/naming_screen.h index b8a70ee79..4a965e610 100644 --- a/include/naming_screen.h +++ b/include/naming_screen.h @@ -4,7 +4,7 @@ u32 NamingScreen_Init(u32 type, u8 *defaultText); u32 NamingScreen_HandleInput(void); void NamingScreen_Free(void); -s32 GetStrWidth(u8 *buffer, s32 size); +s32 GetStrWidth(const u8 *buffer, s32 size); s32 GetMaxPokeNameWidth(void); #endif diff --git a/include/textbox.h b/include/textbox.h index 20bae4349..0328e8e36 100644 --- a/include/textbox.h +++ b/include/textbox.h @@ -2,6 +2,7 @@ #define GUARD_TEXTBOX_H #include "structs/str_position.h" +#include "structs/menu.h" enum { @@ -15,16 +16,35 @@ enum void TextboxInit(void); void TextboxFree(void); void TextboxResetAll(void); +void sub_809A6E4(u16 r0); +void sub_809A6F8(u16 r0); void SetAutoPressTextboxFrames(s32 frames); void SetAutoPressTextboxMidEndMsgFrames(s32 endMsgFrames, s32 midMsgFrames); +bool8 IsTextboxOpen_809A750(void); +bool8 sub_809A768(void); bool8 ScriptClearTextbox(void); bool8 ScriptClearTextbox2(void); void ResetTextboxPortrait(s16 id_); +bool8 sub_809AB4C(s32 a0_, s32 a1_); +bool8 sub_809ABB4(s32 id_, s32 a1_); +bool8 sub_809AC18(s32 a0_, s32 a1_); bool8 ScriptSetPortraitInfo(s32 portraitId_, s32 spriteId_, s32 placementId_); bool8 ScriptSetPortraitPosDelta(s32 portraitId_, PixelPos *newPosDelta); bool8 ScriptPrintText(s32 scriptMsgType, s32 speakerId_, const char *text); bool8 ScriptPrintTextOnBg(const char *text); bool8 ScriptPrintTextOnBg2(const char *text); bool8 ScriptPrintTextOnBgAuto(s32 unused, const char *text); +bool8 sub_809AFAC(void); +void sub_809AFC8(s32 a0_, s32 a1, s32 a2_, const char *text); +bool8 sub_809AFFC(u8 *a0); +void sub_809B028(const MenuItem * menuItems, s32 a1_, s32 a2, s32 a3, s32 a4_, const char *text); +bool8 sub_809B18C(s32 *sp); +bool8 sub_809B1C0(s32 a0, u32 kind, void *a2); +bool8 sub_809B1D4(s32 a0, u32 kind, s32 a2, void *a3); +bool8 sub_809B260(s32 *a0); +void sub_809B474(void); +void sub_809B57C(void); +void sub_809B614(void); +void sub_809B638(void); #endif // GUARD_WONDER_MAIL_H diff --git a/src/ground_lives.c b/src/ground_lives.c index a5ab5cd25..0589dd29b 100644 --- a/src/ground_lives.c +++ b/src/ground_lives.c @@ -20,6 +20,7 @@ #include "ground_sprite_monster.h" #include "ground_object.h" #include "ground_map.h" +#include "textbox.h" #include "code_809D148.h" struct GroundLivesMeta_Sub1 @@ -109,7 +110,6 @@ extern s32 sub_8002984(s32 _direction1, u32 caseID); extern bool8 sub_80A66F8(struct UnkGroundSpriteStruct *ptr); extern bool8 sub_80A671C(struct UnkGroundSpriteStruct *ptr); extern PixelPos SetVecFromDirectionSpeed(s32 r1, u32 r2); -extern bool8 sub_809B1C0(s32 a0, u32 kind, Pokemon *a2); extern Pokemon *sub_80A8D54(s32); extern const struct GroundScriptHeader *GetGroundScript(s16 a0, const DebugLocation *); diff --git a/src/ground_lives_helper.c b/src/ground_lives_helper.c index a4b1386d4..b7f62c7c7 100644 --- a/src/ground_lives_helper.c +++ b/src/ground_lives_helper.c @@ -7,10 +7,10 @@ #include "ground_main.h" #include "ground_script.h" #include "ground_map.h" +#include "textbox.h" extern void nullsub_104(void); extern void sub_809C6CC(u16 param_1); -extern bool8 sub_809B260(s32 *a0); void nullsub_117(void) { diff --git a/src/ground_main.c b/src/ground_main.c index 3ffde5ae8..bcf6247c8 100644 --- a/src/ground_main.c +++ b/src/ground_main.c @@ -50,7 +50,6 @@ EWRAM_DATA u8 gUnknown_2039950 = 0; EWRAM_INIT bool8 gUnknown_203B49C = {0}; EWRAM_INIT u8 gUnknown_203B49D = {0}; -extern void sub_809B57C(); extern void sub_809D25C(); extern void sub_809CA20(); extern void sub_80A6E80(); @@ -64,19 +63,15 @@ extern u16 gUnknown_2026E4E; // TODO: Move these externs to headers extern s16 sub_80A2654(s16 r0); -extern bool8 sub_809AFAC(void); extern bool8 sub_80048BC(void); extern u8 sub_80023E4(u32); extern bool8 sub_8099B94(void); extern void sub_8099768(void); extern void sub_809975C(void); -extern void sub_809B474(void); -extern void sub_809B614(void); extern void sub_8099BE4(void); extern void sub_8099744(void); extern void WaitForNextFrameAndAdvanceRNG(void); extern void LoadBufferedInputs(void); -extern void sub_809B638(void); extern void sub_8099750(void); extern void nullsub_16(void); extern void UpdateAdventureAchievements(void); diff --git a/src/ground_script.c b/src/ground_script.c index 9898f766f..3a25886fc 100644 --- a/src/ground_script.c +++ b/src/ground_script.c @@ -59,32 +59,12 @@ // The return values are almost certainly NOT correct and will need to be rechecked when moving to header files char sub_8002984(s32, u8); bool8 sub_802FCF0(void); - - void sub_809733C(s16, bool8); void sub_80973A8(s16, bool8); void sub_80975A8(s16, bool8); -u32 sub_809A6E4(); -u32 sub_809A6F8(); -u32 sub_809A768(); -void sub_809AFC8(bool8, s32, s32, const char*); -u32 sub_809B028(const MenuItem *, s32 a1_, s32 a2, s32 a3, s32 a4_, const char *text); -bool8 sub_809B1C0(s32, s32, char[12]); -void sub_809B1D4(u8, s32, s32, const char*); void GroundScriptLockJumpZero(s16); bool8 sub_8099B94(void); PixelPos SetVecFromDirectionSpeed(s8, s32); - - -bool8 sub_809B260(void *dst); -bool8 sub_809B18C(s32 *sp); -bool8 sub_809AFFC(u8 *); - -extern u8 IsTextboxOpen_809A750(void); -extern void sub_809AB4C(s32, s32); -extern void sub_809ABB4(s32, s32); -extern void sub_809AC18(s32, s32); - bool8 sub_80961D8(void); void ResetMailbox(void); void sub_80963FC(void); @@ -1372,7 +1352,7 @@ static s32 ExecuteScriptCommand(Action *action) } case 0x04: { if (curCmd.arg1 == -1) { - if (!(u8)sub_802FCF0() && (u8)sub_809B1C0(12,0,0)) { + if (!(u8)sub_802FCF0() && sub_809B1C0(12,0,NULL)) { sub_80A87AC(0, 11); action->scriptData.branchDiscriminant = 0; } else { @@ -1388,7 +1368,7 @@ static s32 ExecuteScriptCommand(Action *action) } case 0x06: { if (curCmd.arg1 == -1) { - if ((s8)sub_809B1C0(36, 0, 0)) { + if (sub_809B1C0(36, 0, NULL)) { sub_80A87AC(0, 11); action->scriptData.branchDiscriminant = 0; return 2; @@ -1769,7 +1749,7 @@ static s32 ExecuteScriptCommand(Action *action) break; } case 0x2c: { - if (!(s8)sub_809A768()) break; + if (!sub_809A768()) break; sub_80A87AC(0, 10); if (GroundScriptCheckLockCondition(action, 0)) return 2; break; @@ -1900,7 +1880,7 @@ static s32 ExecuteScriptCommand(Action *action) break; } case 0x3c: { - sub_809B1D4(curCmd.argByte, curCmd.arg1, curCmd.arg2, curCmd.argPtr); + sub_809B1D4(curCmd.argByte, curCmd.arg1, curCmd.arg2, (void *) curCmd.argPtr); sub_80A87AC(0, 11); return 2; } diff --git a/src/memory.c b/src/memory.c index 796870090..94f448b4c 100644 --- a/src/memory.c +++ b/src/memory.c @@ -130,10 +130,10 @@ UNUSED static void MemoryFill32(u32 *dest, u32 value, s32 size) #endif // arm9.bin::02010BB4 -void MemoryCopy8(void *dest, void *src, s32 size) +void MemoryCopy8(void *dest, const void *src, s32 size) { u8 *dCur = dest; - u8 *sCur = src; + const u8 *sCur = src; while (size > 0) { size -= 1; @@ -141,7 +141,7 @@ void MemoryCopy8(void *dest, void *src, s32 size) } } -UNUSED static void MemoryCopy16(u16 *dest, u16 *src, s32 size) +UNUSED static void MemoryCopy16(u16 *dest, const u16 *src, s32 size) { while (size > 0) { size -= 2; diff --git a/src/naming_screen.c b/src/naming_screen.c index c61b00c99..1b0f7c4ed 100644 --- a/src/naming_screen.c +++ b/src/naming_screen.c @@ -873,7 +873,7 @@ static void UpdateLetterWidths(void) } } -s32 GetStrWidth(u8 *buffer, s32 size) +s32 GetStrWidth(const u8 *buffer, s32 size) { s32 i; s32 width = 0; diff --git a/src/script_item.c b/src/script_item.c index 8db7a8480..14d6ee4dc 100644 --- a/src/script_item.c +++ b/src/script_item.c @@ -7,9 +7,9 @@ #include "memory.h" #include "string_format.h" #include "code_800D090.h" +#include "textbox.h" extern bool8 ScriptPrintText(s32 a0, s32 a1_, const char *text); -extern u8 IsTextboxOpen_809A750(void); // These are only written to. struct ScriptItemsData diff --git a/src/textbox.c b/src/textbox.c index 710d348f4..13f6d33f3 100644 --- a/src/textbox.c +++ b/src/textbox.c @@ -90,6 +90,12 @@ enum { TEXTBOX_TYPE_ON_BG_AUTO, // Prints text on a bg, waits 32 frames and then fades out the text }; +union MonOrStringPtr +{ + u8 *str; + Pokemon *mon; +}; + struct Textbox { // size: 0x5A8 @@ -103,7 +109,7 @@ struct Textbox u32 unk420; u32 unk424; u32 unk428; - u8 *unk42C; + union MonOrStringPtr unk42C; s32 unk430; s32 unk434; u32 fill438; @@ -114,7 +120,6 @@ struct Textbox static IWRAM_INIT struct Textbox *sTextbox = { NULL }; extern bool8 sub_802FCF0(void); -bool8 IsTextboxOpen_809B40C(struct TextboxText *); void sub_809B028(const MenuItem *, s32 a1_, s32 a2, s32 a3, s32 a4_, const char *text); bool8 sub_809B18C(s32 *sp); @@ -150,11 +155,6 @@ extern u32 ThankYouMailPelipperCallback(void); extern u32 HelperPelipperCallback(void); extern u32 sub_802E890(void); extern u32 sub_802DFD8(void); -void sub_809B57C(void); -bool8 sub_809B1D4(s32 a0, u32 kind, s32 a2, u8 *a3); - -u8 *sub_809B428(u8 *a0, s32 a1, u8 *a2); -bool8 sub_809B648(void); #define TEXTBOX_FLAG_UNUSED_x2 0x2 // Unused, but set for almost all flag sets #define TEXTBOX_FLAG_INSTANT_TEXT 0x20 @@ -241,6 +241,9 @@ static void ResetAllTextboxPortraits(void); static bool8 ScriptPrintTextInternal(struct TextboxText *ptr, u32 flags_, s32 a2_, const char *text); static u32 SetTextboxType(u32 textboxType, bool8 unused); static void ResetTextbox(void); +static bool8 IsTextboxOpen_809B40C(struct TextboxText *a0); +static u8 *sub_809B428(u8 *a0, s32 a1, u8 *a2); +static bool8 sub_809B648(void); static void sub_809C39C(void); static void sub_809C3D8(void); static void sub_809C504(void); @@ -269,7 +272,7 @@ void TextboxInit(void) sTextbox->unk420 = 0; sTextbox->unk424 = 0; sTextbox->unk428 = 0; - sTextbox->unk42C = NULL; + sTextbox->unk42C.str = NULL; sTextbox->unk430 = -1; sTextbox->unk434 = -1; ResetAllTextboxPortraits(); @@ -336,7 +339,7 @@ void sub_809A6F8(u16 r0) gUnknown_20399DC &= ~r0; } -u16 sub_809A70C(u16 r0) +UNUSED static u16 sub_809A70C(u16 r0) { return gUnknown_20399DC; } @@ -359,14 +362,14 @@ void SetAutoPressTextboxMidEndMsgFrames(s32 endMsgFrames, s32 midMsgFrames) SetDialogueBoxAutoPressFrames(endMsgFrames, midMsgFrames); } -u8 IsTextboxOpen_809A750(void) +bool8 IsTextboxOpen_809A750(void) { return IsTextboxOpen_809B40C(&sTextbox->text); } -u32 sub_809A768(void) +bool8 sub_809A768(void) { - return 0; + return FALSE; } // I think these two functions are functionally equivalent. @@ -860,12 +863,12 @@ bool8 sub_809B18C(s32 *sp) return (sTextbox->unk420 == 3); } -bool8 sub_809B1C0(s32 a0, u32 kind, u8 *a2) +bool8 sub_809B1C0(s32 a0, u32 kind, void *a2) { return sub_809B1D4(a0, kind, 0, a2); } -bool8 sub_809B1D4(s32 a0, u32 kind, s32 a2, u8 *a3) +bool8 sub_809B1D4(s32 a0, u32 kind, s32 a2, void *a3) { switch (a0) { case 0xB: @@ -888,7 +891,7 @@ bool8 sub_809B1D4(s32 a0, u32 kind, s32 a2, u8 *a3) sTextbox->unk420 = 1; sTextbox->unk424 = kind; sTextbox->unk428 = a2; - sTextbox->unk42C = a3; + sTextbox->unk42C.str = a3; sTextbox->unk430 = -1; return TRUE; } @@ -959,7 +962,7 @@ static bool8 ScriptPrintTextInternal(struct TextboxText *textboxText, u32 flags_ return TRUE; } -bool8 IsTextboxOpen_809B40C(struct TextboxText *a0) +static bool8 IsTextboxOpen_809B40C(struct TextboxText *a0) { switch (a0->unk4) { case 0: @@ -971,7 +974,7 @@ bool8 IsTextboxOpen_809B40C(struct TextboxText *a0) } // It seems this function is effectively unused. It could be different in Blue however. The u8 * arguments most likely are pointers to some text drawing structures. -u8 *sub_809B428(u8 *a0, s32 a1, u8 *a2) +static u8 *sub_809B428(u8 *a0, s32 a1, u8 *a2) { switch (a0[2]) { case 0x49: @@ -1102,7 +1105,7 @@ void sub_809B638(void) xxx_call_update_bg_vram(); } -void nullsub_210(void) +UNUSED static void nullsub_210(void) { } @@ -1300,7 +1303,7 @@ static const struct unkStruct_3001B64_unk418 gUnknown_8116318 = .unkC = sub_801B6AC, }; -bool8 sub_809B648(void) +static bool8 sub_809B648(void) { switch (sTextbox->unk414) { case 2: @@ -1339,10 +1342,10 @@ bool8 sub_809B648(void) if (sTextbox->unk420 == 1) { ResetTextbox(); if (sTextbox->unk424 == 0) { - CreateConfirmNameMenu(0, sTextbox->unk42C); + CreateConfirmNameMenu(0, sTextbox->unk42C.str); } else { - CreateConfirmNameMenu(2, sTextbox->unk42C); + CreateConfirmNameMenu(2, sTextbox->unk42C.str); } return 1; } @@ -1368,7 +1371,7 @@ bool8 sub_809B648(void) case 5: if (sTextbox->unk420 == 1) { ResetTextbox(); - CreateConfirmNameMenu(1, sTextbox->unk42C); + CreateConfirmNameMenu(1, sTextbox->unk42C.str); } else { s32 var = sub_8016080(); @@ -1390,7 +1393,7 @@ bool8 sub_809B648(void) case 6: if (sTextbox->unk420 == 1) { ResetTextbox(); - NamingScreen_Init(4,sTextbox->unk42C); + NamingScreen_Init(4,sTextbox->unk42C.str); } else { s32 var = NamingScreen_HandleInput(); @@ -1412,12 +1415,12 @@ bool8 sub_809B648(void) } return 1; case 7: - sub_801D014((void *) sTextbox->unk42C); + sub_801D014(sTextbox->unk42C.mon); sTextbox->unk418 = &gUnknown_81161A8; PlayMenuSoundEffect(4); return 1; case 8: - sub_801D014((void *) sTextbox->unk42C); + sub_801D014(sTextbox->unk42C.mon); sTextbox->unk418 = &gUnknown_81161B8; PlayMenuSoundEffect(4); return 1; @@ -1425,7 +1428,7 @@ bool8 sub_809B648(void) ResetTextbox(); if (sTextbox->unk420 == 1) { ResetTextbox(); - if (!sub_8015080(sTextbox->unk42C, gUnknown_811610C)) { + if (!sub_8015080(sTextbox->unk42C.str, gUnknown_811610C)) { sTextbox->unk430 = -1; return 0; } @@ -1449,7 +1452,7 @@ bool8 sub_809B648(void) ResetTextbox(); if (sTextbox->unk420 == 1) { ResetTextbox(); - if (!sub_8015080(sTextbox->unk42C, sEmptyMenuItems)) { + if (!sub_8015080(sTextbox->unk42C.str, sEmptyMenuItems)) { sTextbox->unk430 = -1; return 0; }