mirror of https://github.com/zeldaret/tmc.git
Decompile the rest of text.c
This commit is contained in:
parent
495258646f
commit
dc5acb446e
1203
asm/text.s
1203
asm/text.s
File diff suppressed because it is too large
Load Diff
|
@ -390,7 +390,7 @@ gUnk_081091F8:: @ 081091F8
|
|||
gUnk_08109202:: @ 08109202
|
||||
.incbin "data_08108E6C/gUnk_08109202.bin"
|
||||
|
||||
gUnk_08109214:: @ 08109214
|
||||
gTranslations:: @ 08109214
|
||||
.4byte translation
|
||||
.4byte translation
|
||||
.4byte translation
|
||||
|
|
|
@ -23,15 +23,16 @@ static_assert(sizeof(ChooseFileState) == 0x30);
|
|||
// TODO: This occupies the same memory region as gMenu
|
||||
extern ChooseFileState gChooseFileState;
|
||||
|
||||
typedef struct {
|
||||
u8 filler0[0x1];
|
||||
u8 unk1;
|
||||
u8 charColor;
|
||||
u8 bgColor;
|
||||
u16 unk4;
|
||||
u16 unk6;
|
||||
u8* unk8;
|
||||
} struct_02036540;
|
||||
// typedef struct {
|
||||
// u8 unk00 : 4;
|
||||
// u8 unk04 : 4;
|
||||
// u8 unk1;
|
||||
// u8 charColor;
|
||||
// u8 bgColor;
|
||||
// u16 unk4;
|
||||
// u16 unk6;
|
||||
// u8* unk8;
|
||||
// } struct_02036540;
|
||||
|
||||
extern struct_020227E8 gUnk_020227E8[];
|
||||
|
||||
|
@ -51,13 +52,13 @@ extern struct_02019EE0 gMapDataBottomSpecial;
|
|||
// TODO size: 0x8000 from ClearTilemaps?
|
||||
|
||||
extern void sub_08056FEC(u32, struct_020227E8*);
|
||||
extern void sub_0805F46C(u32, Font*);
|
||||
extern u32 sub_0805F46C(u32, Font*);
|
||||
extern void RecoverUI(u32 bottomPt, u32 topPt);
|
||||
extern void ClearTilemaps(void);
|
||||
extern void sub_0805194C(u32);
|
||||
extern struct_02036540* sub_0805F2C8(void);
|
||||
extern void sub_0805F7DC(u32, struct_02036540*);
|
||||
extern void sub_0805F300(struct_02036540*);
|
||||
extern WStruct* sub_0805F2C8(void);
|
||||
extern u32 sub_0805F7DC(u32, WStruct*);
|
||||
extern void sub_0805F300(WStruct*);
|
||||
extern void sub_08050A64(u32);
|
||||
extern void sub_08050AFC(u32);
|
||||
extern void sub_08050384();
|
||||
|
|
|
@ -25,14 +25,17 @@ typedef struct {
|
|||
extern Message gMessage;
|
||||
|
||||
typedef struct {
|
||||
u8 flags;
|
||||
u8 unk00 : 1;
|
||||
u8 unk01 : 4;
|
||||
u8 unk05 : 2;
|
||||
u8 unk06 : 1;
|
||||
u8 code; // first byte read
|
||||
u16 param; // second byte read
|
||||
u16 extended; // ascii adjusted for jp chars
|
||||
u16 _6;
|
||||
u16 textIndex;
|
||||
void* _c;
|
||||
u8 buf[32];
|
||||
const u8* buf[8];
|
||||
} Token;
|
||||
|
||||
typedef struct {
|
||||
|
|
|
@ -222,15 +222,19 @@ extern struct {
|
|||
static_assert(sizeof(gUnk_02034490) == 0x18);
|
||||
|
||||
typedef struct {
|
||||
u8 unk0;
|
||||
u8 unk00 : 1;
|
||||
u8 unk01 : 3;
|
||||
u8 unk04 : 4;
|
||||
u8 unk1;
|
||||
u8 unk2;
|
||||
u8 unk3;
|
||||
u8 charColor;
|
||||
u8 bgColor;
|
||||
u16 unk4;
|
||||
u16 unk6;
|
||||
void* unk8;
|
||||
} WStruct;
|
||||
|
||||
static_assert(sizeof(WStruct) == 12);
|
||||
|
||||
typedef struct {
|
||||
u8 unk0;
|
||||
u8 unk1;
|
||||
|
|
|
@ -501,7 +501,6 @@ SECTIONS {
|
|||
src/manager/manager39.o(.text);
|
||||
src/entity.o(.text);
|
||||
src/code_0805EC04.o(.text); /* objaffine? */
|
||||
asm/text.o(.text);
|
||||
src/text.o(.text);
|
||||
src/debug.o(.text);
|
||||
src/playerItem/playerItem14.o(.text);
|
||||
|
|
|
@ -296,7 +296,7 @@ static void sub_0805066C(void) {
|
|||
void sub_0805070C(void) {
|
||||
u32 i;
|
||||
int j;
|
||||
struct_02036540* var0;
|
||||
WStruct* var0;
|
||||
char* name;
|
||||
|
||||
var0 = sub_0805F2C8();
|
||||
|
@ -322,7 +322,7 @@ void sub_0805070C(void) {
|
|||
|
||||
void sub_08050790(void) {
|
||||
u32 i, j;
|
||||
struct_02036540* var0;
|
||||
WStruct* var0;
|
||||
u32 var1;
|
||||
|
||||
var0 = sub_0805F2C8();
|
||||
|
|
|
@ -15,16 +15,6 @@
|
|||
#include "enemy.h"
|
||||
#include "functions.h"
|
||||
|
||||
typedef struct {
|
||||
u8 filler0[0x1];
|
||||
u8 unk1;
|
||||
u8 charColor;
|
||||
u8 bgColor;
|
||||
u16 unk4;
|
||||
u16 unk6;
|
||||
u8* unk8;
|
||||
} struct_02036540;
|
||||
|
||||
extern u32 sub_08000E44(u32);
|
||||
extern void sub_080A3B74(void);
|
||||
extern s32 sub_080A3B48(void);
|
||||
|
@ -32,9 +22,9 @@ extern void sub_0805ECEC(u32, u32, u32, u32);
|
|||
extern void sub_0801C2F0(u32, u32);
|
||||
extern void sub_0801E6C8(u32);
|
||||
extern void sub_0801E798(u32);
|
||||
extern struct_02036540* sub_0805F2C8(void);
|
||||
extern void sub_0805F300(struct_02036540*);
|
||||
extern u32 sub_0805F76C(u8*, struct_02036540*);
|
||||
extern WStruct* sub_0805F2C8(void);
|
||||
extern void sub_0805F300(WStruct*);
|
||||
extern u32 sub_0805F76C(u8*, WStruct*);
|
||||
|
||||
typedef struct {
|
||||
void* sourceAddress;
|
||||
|
@ -55,7 +45,7 @@ extern const u8 gGlobalGfxAndPalettes[];
|
|||
extern u8 gTextGfxBuffer[];
|
||||
extern u8 gUnk_02002AC0[];
|
||||
|
||||
u32 sub_080A44E0(struct_02036540*, u8*, u32);
|
||||
u32 sub_080A44E0(WStruct*, u8*, u32);
|
||||
u32 sub_080A4418(u32, u32);
|
||||
u32 sub_080A43DC(u32);
|
||||
u32 sub_080A43A8(u32);
|
||||
|
@ -601,7 +591,7 @@ void KinstoneMenu_080A4468(void) {
|
|||
}
|
||||
|
||||
u32 KinstoneMenu_080A4494(void) {
|
||||
struct_02036540* psVar1;
|
||||
WStruct* psVar1;
|
||||
u8* r1;
|
||||
u32 ret;
|
||||
|
||||
|
@ -624,7 +614,7 @@ u32 KinstoneMenu_080A4494(void) {
|
|||
return ret;
|
||||
}
|
||||
|
||||
u32 sub_080A44E0(struct_02036540* param_1, u8* param_2, u32 param_3) {
|
||||
u32 sub_080A44E0(WStruct* param_1, u8* param_2, u32 param_3) {
|
||||
u32 uVar1;
|
||||
u32 size;
|
||||
|
||||
|
|
|
@ -31,17 +31,17 @@ enum {
|
|||
};
|
||||
|
||||
extern void WriteBit(u32*, u32);
|
||||
extern void sub_0805EF40(Token* tok, const u8*);
|
||||
extern bool32 sub_0805EF40(Token* tok, const u8*);
|
||||
extern void RecoverUI(u32 bottomPt, u32 topPt);
|
||||
extern void RefreshUI(void);
|
||||
extern void sub_0805F918(u32, u32, u32);
|
||||
extern void sub_0805F918(u32, u32, void*);
|
||||
extern u32 DecToHex(u32, u8*, u32);
|
||||
|
||||
u32 sub_08056FEC(u32, u8*);
|
||||
u32 GetCharacter(Token* tok);
|
||||
extern void sub_0805EEB4(Token* tok, u32 textIdx);
|
||||
u16 sub_0805F7DC(u32, u8*);
|
||||
u32 GetFontStrWith(u8*, u32);
|
||||
u32 sub_0805F7DC(u32, WStruct*);
|
||||
u32 GetFontStrWith(Token*, u32);
|
||||
|
||||
static void StatusUpdate(u32 status);
|
||||
|
||||
|
@ -270,7 +270,7 @@ END_NONMATCH
|
|||
if (gTextRender.renderStatus == RENDER_INIT) {
|
||||
gTextRender.renderStatus = RENDER_UPDATE;
|
||||
gTextRender._98.bytes.b1 = 1;
|
||||
sub_08056F88(gTextRender.message.unk3, gTextRender._50.unk3);
|
||||
sub_08056F88(gTextRender.message.unk3, gTextRender._50.bgColor);
|
||||
SoundReq(SFX_TEXTBOX_OPEN);
|
||||
}
|
||||
|
||||
|
@ -315,7 +315,7 @@ static u32 MsgUpdate(void) {
|
|||
}
|
||||
|
||||
static void TextDispInit(TextRender* this) {
|
||||
if ((gTextRender.curToken.flags & 1) == 0) {
|
||||
if (gTextRender.curToken.unk00 == 0) {
|
||||
if (gTextRender._98.bytes.b1 == 0) {
|
||||
StatusUpdate(MSG_DIE);
|
||||
}
|
||||
|
@ -398,7 +398,7 @@ NONMATCH("asm/non_matching/textbox/RunTextCommand.inc", /*static*/ u16 RunTextCo
|
|||
StatusUpdate(MSG_CLOSE);
|
||||
break;
|
||||
case 4:
|
||||
this->_50.unk6 += (this->_50.unk4 - this->_50.unk6 - GetFontStrWith(&this->curToken.flags, 0)) / 2;
|
||||
this->_50.unk6 += (this->_50.unk4 - this->_50.unk6 - GetFontStrWith(&this->curToken, 0)) / 2;
|
||||
break;
|
||||
case 5:
|
||||
gMessage.unk = this->curToken.param;
|
||||
|
@ -427,7 +427,7 @@ NONMATCH("asm/non_matching/textbox/RunTextCommand.inc", /*static*/ u16 RunTextCo
|
|||
break;
|
||||
case 9:
|
||||
gTextRender.message.unk3 = this->curToken.param;
|
||||
sub_08056F88(this->curToken.param, this->_50.unk3);
|
||||
sub_08056F88(this->curToken.param, this->_50.bgColor);
|
||||
break;
|
||||
case 10:
|
||||
this->message.textWindowPosY = this->curToken.param;
|
||||
|
@ -488,14 +488,14 @@ NONMATCH("asm/non_matching/textbox/RunTextCommand.inc", /*static*/ u16 RunTextCo
|
|||
PaletteChange(this, palette);
|
||||
}
|
||||
}
|
||||
return sub_0805F7DC(chr, &this->_50.unk0);
|
||||
return sub_0805F7DC(chr, &this->_50);
|
||||
}
|
||||
END_NONMATCH
|
||||
|
||||
/*static*/ void PaletteChange(TextRender* this, u32 id) {
|
||||
u32 temp = id % 8;
|
||||
this->_8f = temp;
|
||||
this->_50.unk2 = temp;
|
||||
this->_50.charColor = temp;
|
||||
}
|
||||
|
||||
const u8 gUnk_08107C0F[] = { 0x8, 0x1e, 0x4, 0x12, 0x0 };
|
||||
|
@ -813,7 +813,7 @@ void sub_08056F88(u32 unk_1, u32 unk_2) {
|
|||
uVar1 = unk_1 << 4 | unk_2;
|
||||
if (gTextRender._9c != uVar1) {
|
||||
gTextRender._9c = uVar1;
|
||||
sub_0805F918(unk_1, unk_2, 0x0600CF60);
|
||||
sub_0805F918(unk_1, unk_2, (void*)0x0600CF60);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
603
src/text.c
603
src/text.c
|
@ -4,6 +4,8 @@
|
|||
#include "functions.h"
|
||||
#include "asm.h"
|
||||
#include "enemy.h"
|
||||
#include "message.h"
|
||||
#include "fileselect.h"
|
||||
|
||||
extern u16 gUnk_081092D4;
|
||||
extern u8 gUnk_081094CE;
|
||||
|
@ -17,6 +19,8 @@ typedef struct {
|
|||
|
||||
extern VStruct gUnk_0810942E[];
|
||||
extern u32 gUnk_0810926C[];
|
||||
extern u32* Translations[];
|
||||
extern u32 gUnk_08109244;
|
||||
|
||||
typedef struct {
|
||||
u8 unk0;
|
||||
|
@ -24,6 +28,599 @@ typedef struct {
|
|||
} UStruct;
|
||||
|
||||
void sub_0805F820(WStruct* r0, u32* r1);
|
||||
bool32 sub_0805EF40(Token* tok, const u8*);
|
||||
void sub_0805F440(Token*, u8*);
|
||||
u32 sub_0805F6A4(Token*, WStruct*);
|
||||
u32 GetCharacter(Token* tok);
|
||||
u32 GetFontStrWith(Token*, u32);
|
||||
int sub_0805F67C(short*, int, int);
|
||||
void sub_0805F918(u32, u32, void*);
|
||||
bool32 sub_0805F5CC(Font*, Token*, WStruct*);
|
||||
void sub_0805EEB4(Token*, u32);
|
||||
u32 sub_0805EF8C(Token*);
|
||||
u32 sub_0805EFB4(Token*);
|
||||
u32 sub_0805F9A0(u32);
|
||||
|
||||
typedef struct {
|
||||
u16 unk0;
|
||||
s8 unk2;
|
||||
s8 unk3;
|
||||
u8 filler[0x4];
|
||||
u16 unk8[4];
|
||||
u16 unk10[4];
|
||||
} struct_gUnk_02034330;
|
||||
|
||||
extern struct_gUnk_02034330 gUnk_02034330;
|
||||
extern WStruct gUnk_02036540[4];
|
||||
extern u32* gUnk_08109248[];
|
||||
extern u8* gUnk_08109230[];
|
||||
extern u32* gTranslations[];
|
||||
extern u32 gUnk_08109244;
|
||||
|
||||
void sub_0805EEB4(Token* token, u32 textIndex) {
|
||||
u32 langIndex;
|
||||
u32* puVar2;
|
||||
u8* puVar5;
|
||||
int iVar3;
|
||||
u32 uVar4;
|
||||
u32 uVar6;
|
||||
u32 uVar7;
|
||||
|
||||
token->textIndex = (u16)textIndex;
|
||||
langIndex = gSaveHeader->language;
|
||||
if (((1 < langIndex) && (textIndex >> 8 == 1)) && (textIndex < 0x119)) {
|
||||
langIndex = 3;
|
||||
}
|
||||
puVar2 = gTranslations[langIndex];
|
||||
iVar3 = puVar2[(u8)(textIndex >> 8)];
|
||||
puVar2 = (u32*)((int)puVar2 + iVar3);
|
||||
iVar3 = puVar2[(u8)textIndex];
|
||||
uVar6 = *(gTranslations[langIndex]) >> 2;
|
||||
uVar7 = *puVar2 >> 2;
|
||||
uVar4 = 0;
|
||||
if (((token->textIndex >> 8) >= uVar6) || ((u8)token->textIndex >= uVar7)) {
|
||||
uVar4 = 1;
|
||||
} else {
|
||||
if (*(char*)((int)puVar2 + iVar3) == 0) {
|
||||
uVar4 = 2;
|
||||
}
|
||||
}
|
||||
switch (uVar4) {
|
||||
case 1:
|
||||
case 2:
|
||||
puVar2 = &gUnk_08109244;
|
||||
iVar3 = 0;
|
||||
break;
|
||||
}
|
||||
puVar2 = (u32*)((int)puVar2 + iVar3);
|
||||
sub_0805EF40(token, (u8*)puVar2);
|
||||
}
|
||||
|
||||
bool32 sub_0805EF40(Token* token, const u8* param_2) {
|
||||
if (token->unk00 != 0) {
|
||||
if (6 < token->unk01) {
|
||||
return 0;
|
||||
}
|
||||
token->unk01++;
|
||||
}
|
||||
token->buf[token->unk01] = param_2;
|
||||
token->unk00 = 1;
|
||||
return 1;
|
||||
}
|
||||
|
||||
u32 sub_0805EF8C(Token* token) {
|
||||
if (token->unk00 == 0) {
|
||||
return 0;
|
||||
}
|
||||
return (token->buf[token->unk01]++)[0];
|
||||
}
|
||||
|
||||
u32 sub_0805EFB4(Token* token) {
|
||||
u32 rv = token->unk01;
|
||||
|
||||
if (token->unk01 != 0) {
|
||||
token->unk01--;
|
||||
} else {
|
||||
token->unk00 = 0;
|
||||
}
|
||||
return rv;
|
||||
}
|
||||
|
||||
u32 GetCharacter(Token* token) {
|
||||
u32 uVar3;
|
||||
u32 code;
|
||||
u32 uVar6;
|
||||
u8** ppuVar7;
|
||||
int iVar8;
|
||||
|
||||
do {
|
||||
code = sub_0805EF8C(token);
|
||||
token->code = (u8)code;
|
||||
iVar8 = 0;
|
||||
switch (code) {
|
||||
case 0:
|
||||
iVar8 = sub_0805EFB4(token);
|
||||
code = 0;
|
||||
break;
|
||||
case 1:
|
||||
uVar6 = sub_0805EF8C(token);
|
||||
token->param = (u16)uVar6;
|
||||
code = 6;
|
||||
if (uVar6 < 0xb) {
|
||||
code = 5;
|
||||
}
|
||||
break;
|
||||
case 2:
|
||||
uVar3 = sub_0805EF8C(token);
|
||||
token->param = uVar3;
|
||||
code = 7;
|
||||
break;
|
||||
case 3:
|
||||
uVar6 = sub_0805EF8C(token) << 8;
|
||||
uVar6 += sub_0805EF8C(token);
|
||||
token->param = uVar6;
|
||||
code = 8;
|
||||
break;
|
||||
case 4:
|
||||
uVar6 = sub_0805EF8C(token);
|
||||
switch (uVar6) {
|
||||
case 0:
|
||||
case 1:
|
||||
case 2:
|
||||
case 3:
|
||||
case 4:
|
||||
case 5:
|
||||
case 6:
|
||||
case 7:
|
||||
case 8:
|
||||
case 9:
|
||||
case 10:
|
||||
case 0xb:
|
||||
case 0xc:
|
||||
case 0xd:
|
||||
case 0xe:
|
||||
case 0xf:
|
||||
code = 9;
|
||||
break;
|
||||
case 0x10:
|
||||
uVar6 = sub_0805EF8C(token);
|
||||
code = 10;
|
||||
break;
|
||||
case 0x11:
|
||||
code = 2;
|
||||
break;
|
||||
case 0x12:
|
||||
code = 3;
|
||||
break;
|
||||
case 0x13:
|
||||
code = 4;
|
||||
break;
|
||||
case 0x14:
|
||||
case 0x15:
|
||||
code = 0xb;
|
||||
// This is a comparison to 0 but couldn't make it do the bit trick
|
||||
uVar6 = (-(uVar6 ^ 0x14) | (uVar6 ^ 0x14)) >> 0x1f;
|
||||
}
|
||||
token->param = (u16)uVar6;
|
||||
break;
|
||||
case 5:
|
||||
uVar6 = sub_0805EF8C(token);
|
||||
if (uVar6 == 0xff) {
|
||||
uVar6 = 0;
|
||||
} else {
|
||||
uVar6 <<= 8;
|
||||
uVar6 += sub_0805EF8C(token);
|
||||
}
|
||||
token->_6 = uVar6;
|
||||
code = 0xc;
|
||||
break;
|
||||
case 6:
|
||||
uVar6 = sub_0805EF8C(token);
|
||||
switch (uVar6) {
|
||||
case 0 ... 4:
|
||||
ppuVar7 = (u8**)token->_c;
|
||||
if (ppuVar7 == NULL) {
|
||||
ppuVar7 = gUnk_08109230;
|
||||
}
|
||||
sub_0805EF40(token, ppuVar7[uVar6]);
|
||||
break;
|
||||
case 5:
|
||||
uVar6 = sub_0805EF8C(token) << 8;
|
||||
uVar6 += sub_0805EF8C(token);
|
||||
sub_0805EEB4(token, uVar6);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
iVar8 = 1;
|
||||
break;
|
||||
case 7:
|
||||
uVar6 = sub_0805EF8C(token) << 8;
|
||||
uVar6 += sub_0805EF8C(token);
|
||||
token->unk00 = 0;
|
||||
token->unk01 = 0;
|
||||
sub_0805EEB4(token, uVar6);
|
||||
iVar8 = 1;
|
||||
break;
|
||||
case 8:
|
||||
uVar3 = sub_0805EF8C(token);
|
||||
token->param = uVar3;
|
||||
code = 0xd;
|
||||
break;
|
||||
case 9:
|
||||
uVar3 = sub_0805EF8C(token);
|
||||
token->param = uVar3;
|
||||
code = 0xe;
|
||||
break;
|
||||
case 10:
|
||||
code = 1;
|
||||
break;
|
||||
case 0xb:
|
||||
code = sub_0805EF8C(token);
|
||||
code |= 0x400;
|
||||
break;
|
||||
case 0xc:
|
||||
code = sub_0805EF8C(token);
|
||||
code |= 0x700;
|
||||
break;
|
||||
case 0xd:
|
||||
code = sub_0805EF8C(token);
|
||||
code |= 0x500;
|
||||
break;
|
||||
case 0xe:
|
||||
code = sub_0805EF8C(token);
|
||||
code |= 0x600;
|
||||
break;
|
||||
case 0xf:
|
||||
code = sub_0805EF8C(token);
|
||||
code |= 0x300;
|
||||
break;
|
||||
default:
|
||||
code += 0x100;
|
||||
break;
|
||||
}
|
||||
} while (iVar8);
|
||||
|
||||
if (code >> 8 != 0) {
|
||||
switch (token->unk05) {
|
||||
case 0:
|
||||
break;
|
||||
case 1:
|
||||
code = sub_0805F9A0(code);
|
||||
break;
|
||||
}
|
||||
token->extended = (u16)code;
|
||||
}
|
||||
return code;
|
||||
}
|
||||
|
||||
u32* sub_0805F25C(u32 param_1) {
|
||||
u32 uVar1;
|
||||
|
||||
uVar1 = param_1 >> 8 & 0xf;
|
||||
param_1 = param_1 & 0xff;
|
||||
switch (uVar1) {
|
||||
case 0:
|
||||
case 1:
|
||||
if (0x7f < param_1 && gSaveHeader->language != 0) {
|
||||
param_1 = param_1 - 0x80;
|
||||
uVar1 = 2;
|
||||
}
|
||||
break;
|
||||
case 2:
|
||||
case 3:
|
||||
case 4:
|
||||
break;
|
||||
case 5:
|
||||
case 6:
|
||||
case 7:
|
||||
case 8:
|
||||
param_1 = param_1 << 1;
|
||||
break;
|
||||
}
|
||||
return gUnk_08109248[uVar1] + param_1 * 0x10;
|
||||
}
|
||||
|
||||
WStruct* sub_0805F2C8(void) {
|
||||
u32 uVar2;
|
||||
|
||||
for (uVar2 = 0; uVar2 < ARRAY_COUNT(gUnk_02036540); uVar2++) {
|
||||
if ((gUnk_02036540[uVar2].unk00) == 0) {
|
||||
MemClear(&gUnk_02036540[uVar2], sizeof(WStruct));
|
||||
gUnk_02036540[uVar2].unk00 = 1;
|
||||
return &gUnk_02036540[uVar2];
|
||||
}
|
||||
}
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
||||
void sub_0805F300(WStruct* param_1) {
|
||||
u32 uVar2;
|
||||
|
||||
for (uVar2 = 0; uVar2 < ARRAY_COUNT(gUnk_02036540); uVar2++) {
|
||||
if (&gUnk_02036540[uVar2] == param_1) {
|
||||
MemClear(&gUnk_02036540[uVar2], sizeof(WStruct));
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
u32 GetFontStrWith(Token* param_1, u32 param_2) {
|
||||
u32 character;
|
||||
u32* puVar2;
|
||||
u32 uVar3;
|
||||
u32 uVar4;
|
||||
u16 uVar5;
|
||||
u32 rv;
|
||||
u32 r9;
|
||||
Token token;
|
||||
int local_28;
|
||||
int local_24;
|
||||
|
||||
MemCopy(param_1, &token, sizeof(Token));
|
||||
local_24 = 0;
|
||||
local_28 = 0;
|
||||
rv = 0;
|
||||
uVar5 = 0;
|
||||
do {
|
||||
uVar4 = 0;
|
||||
r9 = 1;
|
||||
while (r9) {
|
||||
character = GetCharacter(&token);
|
||||
switch (character) {
|
||||
case 0xc:
|
||||
uVar4 += 8;
|
||||
break;
|
||||
case 0xb:
|
||||
uVar5 = token.param;
|
||||
break;
|
||||
case 0:
|
||||
case 1:
|
||||
r9 = 0;
|
||||
break;
|
||||
case 2 ... 10:
|
||||
case 0xd:
|
||||
case 0xe:
|
||||
break;
|
||||
default:
|
||||
if (uVar5 == 0) {
|
||||
puVar2 = (u32*)sub_0805F25C(character);
|
||||
if (4 < character >> 8) {
|
||||
uVar3 = sub_0805F7A0(puVar2[0x10]);
|
||||
uVar4 += (uVar3 >> 8);
|
||||
}
|
||||
uVar3 = sub_0805F7A0(*puVar2);
|
||||
uVar4 += (uVar3 >> 8);
|
||||
} else if (character >> 8 >= 5) {
|
||||
uVar4 += 0x10;
|
||||
} else {
|
||||
uVar4 += 8;
|
||||
}
|
||||
if (token.unk05 == 1 && uVar4 > 1) {
|
||||
uVar4--;
|
||||
}
|
||||
}
|
||||
}
|
||||
if (uVar4 > rv) {
|
||||
rv = uVar4;
|
||||
}
|
||||
if (uVar4 != 0) {
|
||||
local_28++;
|
||||
} else {
|
||||
local_24++;
|
||||
}
|
||||
} while ((param_2 != 0) && (character != 0));
|
||||
|
||||
if (param_2 != 0) {
|
||||
return local_24 << 0x18 | local_28 << 0x10 | rv;
|
||||
}
|
||||
return rv;
|
||||
}
|
||||
|
||||
void sub_0805F440(Token* param_1, u8* param_2) {
|
||||
MemClear(param_1, sizeof(Token));
|
||||
if ((u32)param_2 >= 0x10000) {
|
||||
sub_0805EF40(param_1, param_2);
|
||||
} else {
|
||||
sub_0805EEB4(param_1, (u32)param_2);
|
||||
}
|
||||
}
|
||||
|
||||
u32 sub_0805F46C(u32 param_1, Font* param_2) {
|
||||
u32 uVar1;
|
||||
WStruct* pWVar4;
|
||||
u32 uVar5;
|
||||
u16* puVar6;
|
||||
u32 uVar7;
|
||||
u32 uVar8;
|
||||
u16* puVar9;
|
||||
u32 iVar10;
|
||||
Token token;
|
||||
Font font;
|
||||
u32 fontStr;
|
||||
u32 temp2;
|
||||
u32 temp3;
|
||||
|
||||
pWVar4 = sub_0805F2C8();
|
||||
if (pWVar4 != NULL) {
|
||||
MemCopy(param_2, &font, sizeof(Font));
|
||||
sub_0805F440(&token, (u8*)param_1);
|
||||
token.unk05 = font.stylized & 3;
|
||||
pWVar4->unk04 = font.stylized;
|
||||
pWVar4->unk4 = font.width;
|
||||
pWVar4->unk8 = font.buffer_loc;
|
||||
pWVar4->charColor = font._15;
|
||||
pWVar4->bgColor = font.fill_type;
|
||||
if (font.draw_border) {
|
||||
sub_0805F918(font.border_type, font.fill_type, font.gfx_dest);
|
||||
font.gfx_dest = (void*)((int)font.gfx_dest + 0xe0);
|
||||
fontStr = GetFontStrWith(&token, 1);
|
||||
iVar10 = (fontStr >> 0x18) * (u32)font._16 + ((u8)((int)fontStr >> 0x10) << 1);
|
||||
uVar8 = (u16)fontStr;
|
||||
temp3 = uVar8;
|
||||
if (font.width < (s32)temp3) {
|
||||
temp3 = font.width;
|
||||
}
|
||||
uVar8 = (temp3 + 7);
|
||||
temp2 = ~7;
|
||||
uVar8 = font.sm_border ? uVar8 & temp2 : font.width;
|
||||
|
||||
puVar9 = font.dest;
|
||||
font.dest += 0x20;
|
||||
|
||||
if (font.right_align) {
|
||||
uVar8 = (uVar8 + 0xf) & ~0xf;
|
||||
puVar9 -= (uVar8 >> 4) + 1;
|
||||
} else {
|
||||
font.dest += 1;
|
||||
}
|
||||
uVar8 = uVar8 >> 3;
|
||||
param_1 = font.gfx_src;
|
||||
DispMessageFrame(puVar9, uVar8, iVar10, param_1);
|
||||
puVar9 = puVar9 + 1;
|
||||
font.gfx_src = font.gfx_src + 7;
|
||||
param_1 = font.gfx_src - 1;
|
||||
while (iVar10-- > 0) {
|
||||
puVar9 += 0x20;
|
||||
puVar6 = puVar9;
|
||||
for (uVar5 = uVar8; (int)uVar5-- > 0;) {
|
||||
*puVar6++ = param_1;
|
||||
}
|
||||
}
|
||||
}
|
||||
MemClear(&gUnk_02034330, sizeof(gUnk_02034330));
|
||||
while ((s16)sub_0805F5CC(&font, &token, pWVar4) != 0) {}
|
||||
sub_0805F300(pWVar4);
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
bool32 sub_0805F5CC(Font* param_1, Token* param_2, WStruct* param_3) {
|
||||
u16 uVar2;
|
||||
u32 uVar3;
|
||||
int iVar4;
|
||||
u16* puVar5;
|
||||
u32 fontStr;
|
||||
|
||||
uVar3 = sub_0805F8F8(param_1->fill_type);
|
||||
MemFill32(uVar3, param_1->buffer_loc, ((param_1->width + 7) & 0x1f8) << 3);
|
||||
fontStr = GetFontStrWith(param_2, 0);
|
||||
param_3->unk6 = param_1->right_align ? ((8 - ((fontStr + 1) >> 1)) & 7) : 0;
|
||||
|
||||
puVar5 = (u16*)sub_0805F6A4(param_2, param_3);
|
||||
if (puVar5) {
|
||||
iVar4 = (int)(param_3->unk6 + 7) / 8;
|
||||
puVar5 = param_1->dest;
|
||||
if (param_1->right_align) {
|
||||
puVar5 -= (iVar4 + 1U) >> 1;
|
||||
}
|
||||
param_1->gfx_src = sub_0805F67C(puVar5, param_1->gfx_src, iVar4);
|
||||
param_1->dest += 0x40;
|
||||
iVar4 *= 0x40;
|
||||
MemCopy(param_1->buffer_loc, param_1->gfx_dest, iVar4);
|
||||
param_1->gfx_dest = (void*)((int)param_1->gfx_dest + iVar4);
|
||||
} else {
|
||||
if (param_2->code == 10) {
|
||||
param_1->dest += param_1->_16 * 0x20;
|
||||
}
|
||||
}
|
||||
return param_2->code > 0;
|
||||
}
|
||||
|
||||
int sub_0805F67C(short* param_1, int param_2, int param_3) {
|
||||
for (param_3--; param_3 != -1; param_3--) {
|
||||
param_1[0] = param_2++;
|
||||
param_1[0x20] = param_2++;
|
||||
param_1++;
|
||||
}
|
||||
return param_2;
|
||||
}
|
||||
|
||||
u32 sub_0805F6A4(Token* param_1, WStruct* param_2) {
|
||||
u32 uVar1;
|
||||
u32 uVar3;
|
||||
int iVar4;
|
||||
u32 r7;
|
||||
|
||||
iVar4 = 0;
|
||||
r7 = 1;
|
||||
do {
|
||||
uVar1 = GetCharacter(param_1);
|
||||
r7 = 1;
|
||||
switch (uVar1) {
|
||||
case 7:
|
||||
if (param_1->param < 0xe) {
|
||||
param_2->charColor = param_1->param;
|
||||
}
|
||||
break;
|
||||
case 0:
|
||||
case 1:
|
||||
r7 = 0;
|
||||
break;
|
||||
case 2:
|
||||
case 3:
|
||||
case 4:
|
||||
case 5:
|
||||
case 6:
|
||||
case 8:
|
||||
case 9:
|
||||
case 10:
|
||||
case 0xd:
|
||||
case 0xe:
|
||||
break;
|
||||
|
||||
case 0xc:
|
||||
uVar3 = gUnk_02034330.unk2;
|
||||
if (uVar3 < 4) {
|
||||
gUnk_02034330.unk2 = uVar3 + 1;
|
||||
gUnk_02034330.unk10[uVar3] = param_1->_6;
|
||||
gUnk_02034330.unk8[uVar3] = param_2->unk6;
|
||||
}
|
||||
param_2->unk6 += 8;
|
||||
iVar4 += 8;
|
||||
break;
|
||||
case 0xb:
|
||||
param_2->unk1 = param_1->param;
|
||||
break;
|
||||
default:
|
||||
iVar4 += sub_0805F7DC(uVar1, param_2);
|
||||
if ((param_1->unk05 == 1) && (1 < param_2->unk6)) {
|
||||
iVar4--;
|
||||
param_2->unk6 = param_2->unk6 - 1;
|
||||
}
|
||||
break;
|
||||
}
|
||||
} while (r7);
|
||||
|
||||
return iVar4;
|
||||
}
|
||||
|
||||
u32 sub_0805F76C(u8* param_1, WStruct* param_2) {
|
||||
u32 uVar1;
|
||||
Token local_38;
|
||||
|
||||
sub_0805F440(&local_38, param_1);
|
||||
local_38.unk05 = param_2->unk04 & 3;
|
||||
uVar1 = sub_0805F6A4(&local_38, param_2);
|
||||
return uVar1;
|
||||
}
|
||||
|
||||
u32 sub_0805F7A0(u32 param_1) {
|
||||
u32 uVar1;
|
||||
u32 uVar2;
|
||||
u32 uVar3;
|
||||
|
||||
uVar1 = 0xf;
|
||||
for (uVar2 = 0; uVar2 < 8; uVar2++) {
|
||||
if (uVar1 != (param_1 & uVar1))
|
||||
break;
|
||||
uVar1 <<= 4;
|
||||
}
|
||||
for (uVar3 = uVar2; (uVar2 < 8 && (uVar1 != (param_1 & uVar1))); uVar1 <<= 4, uVar2++) {}
|
||||
uVar2 -= uVar3;
|
||||
return (uVar2 << 8) | uVar3;
|
||||
}
|
||||
|
||||
u32 sub_0805F7DC(u32 r0, WStruct* r1) {
|
||||
u32 temp;
|
||||
|
@ -59,6 +656,7 @@ void sub_0805F820(WStruct* r0, u32* r1) {
|
|||
u8* temp;
|
||||
void* temp2;
|
||||
VStruct* temp3;
|
||||
u32 temp4;
|
||||
|
||||
if (r0->unk4 - r0->unk6 > 0) {
|
||||
sub_08002724(r1, &gUnk_02036A58);
|
||||
|
@ -81,11 +679,12 @@ void sub_0805F820(WStruct* r0, u32* r1) {
|
|||
|
||||
puVar8 = &gUnk_02036A58 + uVar6;
|
||||
temp2 = r0->unk8;
|
||||
temp = gUnk_0810942E[r0->unk3].filler0[r0->unk2 * 2];
|
||||
temp = gUnk_0810942E[r0->bgColor].filler0[r0->charColor * 2];
|
||||
uVar7 = r0->unk6;
|
||||
r0->unk6 += uVar3;
|
||||
|
||||
if (r0->unk0 / 16 != 1) {
|
||||
temp4 = r0->unk04;
|
||||
if (temp4 != 1) {
|
||||
while (uVar3-- > 0) {
|
||||
sub_080026C4(puVar8, temp2, temp, uVar7);
|
||||
puVar8++;
|
||||
|
|
Loading…
Reference in New Issue