mirror of https://github.com/zeldaret/tmc.git
230 lines
5.2 KiB
C
230 lines
5.2 KiB
C
#include "global.h"
|
|
#include "room.h"
|
|
#include "entity.h"
|
|
#include "functions.h"
|
|
#include "textbox.h"
|
|
#include "structures.h"
|
|
#include "save.h"
|
|
|
|
u32 sub_080564DC(void);
|
|
u32 sub_080564EC(void);
|
|
u32 sub_08056654(void);
|
|
u32 sub_080565B4(void);
|
|
u32 sub_080565F8(void);
|
|
u32 sub_08056640(void);
|
|
|
|
u32 (*const gUnk_08107BC8[])(void) = { sub_080564DC, sub_080564EC, sub_08056654,
|
|
sub_080565B4, sub_080565F8, sub_08056640 };
|
|
|
|
extern u8 gUnk_020227DC, gUnk_020227E8, gUnk_020227F0, gUnk_020227F8, gUnk_02022800;
|
|
u8* const gUnk_08107BE0[] = { &gUnk_020227DC, &gUnk_020227E8, &gUnk_020227F0, &gUnk_020227F8, &gUnk_02022800 };
|
|
|
|
void sub_08056684(struct_02022780*);
|
|
void sub_080566B8(struct_02022780*);
|
|
void sub_08056BA0(struct_02022780*);
|
|
void sub_08056B1C(struct_02022780*);
|
|
void sub_08056B7C(struct_02022780*);
|
|
void sub_080569D4(struct_02022780*);
|
|
|
|
void (*const gUnk_08107BF4[])(struct_02022780*) = { sub_08056684, sub_080566B8, sub_08056BA0,
|
|
sub_08056B1C, sub_08056B7C, sub_080569D4 };
|
|
|
|
extern u32 gUnk_02036A40;
|
|
extern u32 gUnk_02036A38;
|
|
extern u8 gUnk_02024030;
|
|
extern u8 gUnk_020227A0;
|
|
extern u8 gUnk_02000D00;
|
|
|
|
s32 sub_08056338(void) {
|
|
s32 result;
|
|
|
|
result = -1;
|
|
if (((gTextBox.doTextBox & 0x7f) == 0) && (gUnk_02000040.unk_00 == 3))
|
|
result = gUnk_02000040.unk_01;
|
|
return result;
|
|
}
|
|
|
|
void sub_08056360(void) {
|
|
if ((gTextBox.doTextBox & 0x7f) != 0) {
|
|
gTextBox.doTextBox = 0x80 | 0x8;
|
|
}
|
|
}
|
|
|
|
void TextboxNoOverlapFollow(u32 index) {
|
|
if (gRoomControls.cameraTarget != NULL) {
|
|
TextboxNoOverlap(index, gRoomControls.cameraTarget);
|
|
} else {
|
|
ShowTextbox(index);
|
|
}
|
|
}
|
|
|
|
void TextboxNoOverlap(u32 index, Entity* ent) {
|
|
s16 y;
|
|
s16 h;
|
|
|
|
ShowTextbox(index);
|
|
|
|
y = ent->y.HALF.HI;
|
|
h = ent->height.HALF.HI;
|
|
|
|
if (((y + h) - gRoomControls.roomScrollY) > 0x58) {
|
|
gTextBox.textWindowPosY = 1;
|
|
}
|
|
}
|
|
|
|
void sub_080563C8(u32 param_1, u32 param_2) {
|
|
TextboxAtPosition(param_1, 1, param_2);
|
|
}
|
|
|
|
void TextboxAtPosition(u32 index, u32 x, u32 y) {
|
|
ShowTextbox(index);
|
|
gTextBox.textWindowPosX = x;
|
|
gTextBox.textWindowPosY = y;
|
|
}
|
|
|
|
void ShowTextbox(u32 index) {
|
|
_DmaZero(&gTextBox, 32);
|
|
gTextBox.textIndex = index;
|
|
gTextBox.textSpeed = 99;
|
|
gTextBox.textWindowWidth = 26;
|
|
gTextBox.textWindowHeight = 4;
|
|
gTextBox.textWindowPosX = 1;
|
|
gTextBox.textWindowPosY = 12;
|
|
gTextBox.doTextBox = 1;
|
|
}
|
|
|
|
void sub_08056418(void) {
|
|
_DmaZero(&gTextBox, 32);
|
|
_DmaZero(&gUnk_02022780, 168);
|
|
_DmaZero(&gUnk_02036A40, 8);
|
|
_DmaZero(&gUnk_02036A38, 8);
|
|
_DmaZero(&gUnk_02000040, 4);
|
|
}
|
|
|
|
void sub_08056458(void) {
|
|
int iVar1;
|
|
|
|
if (gTextBox.doTextBox == 1) {
|
|
_DmaZero((u32*)&gUnk_02022780, sizeof(gUnk_02022780));
|
|
sub_080564C8(1);
|
|
}
|
|
|
|
if (gUnk_02022780._8a != 0) {
|
|
gUnk_02022780._8a--;
|
|
} else {
|
|
do {
|
|
iVar1 = gUnk_08107BC8[gUnk_02022780._88]();
|
|
} while (iVar1 != 0);
|
|
}
|
|
if (gUnk_02022780._9d != 0) {
|
|
gUnk_02022780._9d = 0;
|
|
sub_08056F70();
|
|
}
|
|
sub_08056C68();
|
|
sub_08056D70();
|
|
}
|
|
|
|
void sub_080564C8(u32 a1) {
|
|
gUnk_02022780._88 = a1;
|
|
gUnk_02022780._89 = 0;
|
|
}
|
|
|
|
u32 sub_080564DC(void) {
|
|
gUnk_02022780._99 = 0;
|
|
return 0;
|
|
}
|
|
|
|
// regalloc in loop
|
|
NONMATCH("asm/non_matching/textbox/sub_080564EC.inc", u32 sub_080564EC(void)) {
|
|
u32 uVar1;
|
|
char* dest;
|
|
u32 i;
|
|
char c;
|
|
|
|
_DmaZero((void*)&gUnk_02036A40, 8);
|
|
_DmaZero((void*)&gUnk_02024030, 0x18);
|
|
_DmaZero((void*)&gUnk_02022780, 0xa8);
|
|
_DmaCopy(&gTextBox, &gUnk_02022780, 32);
|
|
if (gUnk_02022780._2 == 0x63) {
|
|
gUnk_02022780._2 = gUnk_02000000->messageSpeed;
|
|
}
|
|
gUnk_02022780._9c = 0xff;
|
|
sub_0805EEB4(&gUnk_02022780._20, gUnk_02022780._8, 32);
|
|
gUnk_02022780._5c = 2;
|
|
gUnk_02022780._5d = 0xe;
|
|
dest = gUnk_02022780._5e;
|
|
|
|
for (i = 0; i < 6; ++i) {
|
|
c = gSave.playerName[i];
|
|
if (c == '\0')
|
|
break;
|
|
dest[i] = c;
|
|
}
|
|
|
|
dest[0] = 2;
|
|
dest[1] = 15;
|
|
dest[2] = 0;
|
|
sub_08056FBC(&gUnk_02022780);
|
|
gUnk_02022780._2c = &gUnk_08107BE0;
|
|
gUnk_02022780._58 = &gUnk_02000D00;
|
|
gUnk_02022780._54 = 0xd0;
|
|
sub_08056C54(2);
|
|
sub_08056BDC(0);
|
|
sub_080564C8(2);
|
|
return 1;
|
|
}
|
|
END_NONMATCH
|
|
|
|
u32 sub_080565B4(void) {
|
|
if (gUnk_02022780._89 == 0) {
|
|
gUnk_02022780._89 = 1;
|
|
gUnk_02022780._99 = 1;
|
|
sub_08056F88(gUnk_02022780._3[0], gUnk_02022780._53);
|
|
PlaySFX(0x65);
|
|
}
|
|
|
|
if (sub_08056CC0(1)) {
|
|
gUnk_02022780._99 = 2;
|
|
sub_080564C8(2);
|
|
}
|
|
return 0;
|
|
}
|
|
|
|
u32 sub_080565F8(void) {
|
|
if (gUnk_02022780._89 == 0) {
|
|
gUnk_02022780._89 = 1;
|
|
gUnk_02022780._99 = 3;
|
|
sub_08056BDC(0);
|
|
PlaySFX(0x66);
|
|
}
|
|
|
|
if (sub_08056CC0(-1)) {
|
|
gUnk_02022780._99 = 0;
|
|
sub_080564C8(2);
|
|
}
|
|
return 0;
|
|
}
|
|
|
|
u32 sub_08056640() {
|
|
sub_08056C54(0);
|
|
sub_080564C8(0);
|
|
return 0;
|
|
}
|
|
|
|
u32 sub_08056654(void) {
|
|
sub_08056C54(4);
|
|
gUnk_08107BF4[gUnk_02022780._89](&gUnk_02022780);
|
|
sub_08056CC0(0);
|
|
return 0;
|
|
}
|
|
|
|
void sub_08056684(struct_02022780* this) {
|
|
if ((gUnk_02022780._20 & 1) == 0) {
|
|
if (gUnk_02022780._99 == '\0') {
|
|
sub_080564C8(5);
|
|
}
|
|
} else {
|
|
this->_89 = 1;
|
|
}
|
|
}
|