textbox externs

This commit is contained in:
DizzyEggg
2025-10-23 16:43:08 +02:00
parent 4d11518c21
commit 05d70f94ee
11 changed files with 63 additions and 65 deletions

View File

@@ -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);

View File

@@ -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

View File

@@ -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

View File

@@ -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 *);

View File

@@ -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)
{

View File

@@ -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);

View File

@@ -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;
}

View File

@@ -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;

View File

@@ -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;

View File

@@ -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

View File

@@ -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;
}