diff --git a/src/game/data/data_020df0.c b/src/game/data/data_020df0.c index d6cbe7828..64c3203e0 100644 --- a/src/game/data/data_020df0.c +++ b/src/game/data/data_020df0.c @@ -6953,7 +6953,7 @@ s32 g_ScreenSize = SCREENSIZE_FULL; s32 g_ScreenRatio = SCREENRATIO_NORMAL; u8 g_ScreenSplit = SCREENSPLIT_HORIZONTAL; u32 var8007fabc = 0x00000000; -u32 var8007fac0 = 0x00000001; +s32 var8007fac0 = 0x00000001; u32 var8007fac4 = 0x00000000; u32 var8007fac8 = 0x00000000; u32 var8007facc = 0x00000000; diff --git a/src/game/game_0b63b0.c b/src/game/game_0b63b0.c index 19c48f12d..90e10b0ef 100644 --- a/src/game/game_0b63b0.c +++ b/src/game/game_0b63b0.c @@ -12115,7 +12115,7 @@ void currentPlayerDieByShooter(u32 shooter, bool force) func0f0f8120(); g_MpPlayerNum = prevplayernum; - hudmsgRemoveByPlayer(g_Vars.currentplayernum); + hudmsgRemoveForDeadPlayer(g_Vars.currentplayernum); if (g_Vars.mplayerisrunning) { func0f0b09f4(shooter, g_Vars.currentplayernum); diff --git a/src/game/game_0dcdb0.c b/src/game/game_0dcdb0.c index d4adbd7ae..7cd994a7b 100644 --- a/src/game/game_0dcdb0.c +++ b/src/game/game_0dcdb0.c @@ -1068,8 +1068,8 @@ void func0f0ddd44(s32 value) s32 i; for (i = 0; i < g_NumHudMessages; i++) { - if (g_HudMessages[i].active && g_HudMessages[i].unk1b0 == value) { - g_HudMessages[i].flags |= HUDMSGFLAG_00000002; + if (g_HudMessages[i].state && g_HudMessages[i].unk1b0 == value) { + g_HudMessages[i].flags |= HUDMSGFLAG_2; break; } } @@ -1083,10 +1083,10 @@ void hudmsgSystemInit(void) g_HudMessages = malloc((sizeof(struct hudmessage) * g_NumHudMessages + 0x3f | 0x3f) ^ 0x3f, 4); for (i = 0; i < g_NumHudMessages; i++) { - g_HudMessages[i].active = false; + g_HudMessages[i].state = HUDMSGSTATE_FREE; } - var8009dea0 = 0; + g_NextHudMessageId = 0; } void hudmsgRemoveAll(void) @@ -1094,22 +1094,22 @@ void hudmsgRemoveAll(void) s32 i; for (i = 0; i < g_NumHudMessages; i++) { - g_HudMessages[i].active = false; + g_HudMessages[i].state = HUDMSGSTATE_FREE; } } -s32 func0f0ddeac(s32 arg0) +s32 hudmsgGetNext(s32 refid) { - s32 bestvalue = -1; + s32 bestid = -1; s32 bestindex = -1; s32 i; - // Finding the smallest unk1b8 that is greater than arg0 + // Finding the smallest ID that is greater than refid for (i = 0; i < g_NumHudMessages; i++) { - if (g_HudMessages[i].active && g_HudMessages[i].unk1b8 > arg0) { - if (bestvalue < 0 || g_HudMessages[i].unk1b8 < bestvalue) { + if (g_HudMessages[i].state && g_HudMessages[i].id > refid) { + if (bestid < 0 || g_HudMessages[i].id < bestid) { bestindex = i; - bestvalue = g_HudMessages[i].unk1b8; + bestid = g_HudMessages[i].id; } } } @@ -2280,7 +2280,7 @@ glabel hudmsgCreate .L0f0df03c: /* f0df03c: 2404ffff */ addiu $a0,$zero,-1 .L0f0df040: -/* f0df040: 0fc377ab */ jal func0f0ddeac +/* f0df040: 0fc377ab */ jal hudmsgGetNext /* f0df044: afa901ec */ sw $t1,0x1ec($sp) /* f0df048: 8fa901ec */ lw $t1,0x1ec($sp) /* f0df04c: 0440001d */ bltz $v0,.L0f0df0c4 @@ -2310,7 +2310,7 @@ glabel hudmsgCreate /* f0df0a4: 00007812 */ mflo $t7 /* f0df0a8: 00afc821 */ addu $t9,$a1,$t7 /* f0df0ac: 8f2401b8 */ lw $a0,0x1b8($t9) -/* f0df0b0: 0fc377ab */ jal func0f0ddeac +/* f0df0b0: 0fc377ab */ jal hudmsgGetNext /* f0df0b4: afa901ec */ sw $t1,0x1ec($sp) /* f0df0b8: 8fa901ec */ lw $t1,0x1ec($sp) /* f0df0bc: 0441ffe7 */ bgez $v0,.L0f0df05c @@ -2409,17 +2409,17 @@ glabel hudmsgCreate /* f0df21c: 8fa901ec */ lw $t1,0x1ec($sp) .L0f0df220: /* f0df220: 2406018f */ addiu $a2,$zero,0x18f -/* f0df224: 0c004c72 */ jal func000131c8 +/* f0df224: 0c004c72 */ jal strncpy /* f0df228: afa901ec */ sw $t1,0x1ec($sp) /* f0df22c: 8fa901ec */ lw $t1,0x1ec($sp) /* f0df230: a22001af */ sb $zero,0x1af($s1) .L0f0df234: /* f0df234: 8fae0230 */ lw $t6,0x230($sp) /* f0df238: 3c18800a */ lui $t8,%hi(g_Vars+0x28c) -/* f0df23c: 3c02800a */ lui $v0,%hi(var8009dea0) +/* f0df23c: 3c02800a */ lui $v0,%hi(g_NextHudMessageId) /* f0df240: ae2e01c4 */ sw $t6,0x1c4($s1) /* f0df244: 8f18a24c */ lw $t8,%lo(g_Vars+0x28c)($t8) -/* f0df248: 2442dea0 */ addiu $v0,$v0,%lo(var8009dea0) +/* f0df248: 2442dea0 */ addiu $v0,$v0,%lo(g_NextHudMessageId) /* f0df24c: 240c0001 */ addiu $t4,$zero,0x1 /* f0df250: ae3801c0 */ sw $t8,0x1c0($s1) /* f0df254: 8faf01fc */ lw $t7,0x1fc($sp) @@ -2495,6 +2495,151 @@ glabel hudmsgCreate /* f0df360: 27bd01f8 */ addiu $sp,$sp,0x1f8 ); +// Mismatch due to regalloc in duplicate check near: +// g_HudMessages[index].playernum == g_Vars.currentplayernum +//void hudmsgCreate(char *text, s32 type, s32 conf00, s32 conf01, s32 conf02, +// struct hudmessagething *conf04, struct hudmessagething *conf08, +// u32 textcolour, u32 shadowcolour, +// u32 alignh, s32 conf16, u32 alignv, s32 conf18, s32 arg14, u32 flags) +//{ +// char *pos; +// struct hudmessage *msg; +// s32 hash = 0; +// s32 i; +// s32 index; +// s32 uStack24; +// u32 uStack28; +// u32 uStack32; +// s32 iStack36; +// char stacktext[400]; +// s32 writeindex; +// +// if (type == HUDMSGTYPE_SUBTITLE && !optionsGetInGameSubtitles()) { +// return; +// } +// +// pos = text; +// +// while (*pos) { +// hash = hash + *pos; +// pos++; +// } +// +// if ((flags & HUDMSGFLAG_ONLYIFALIVE) == 0 || !g_Vars.currentplayer->isdead) { +// if ((flags & HUDMSGFLAG_ALLOWDUPES) == 0) { +// // Check for duplicate messages +// s32 dupeofindex = -1; +// +// for (index = 0; index < g_NumHudMessages; index++) { +// if (g_HudMessages[index].state +// && g_HudMessages[index].state != HUDMSGSTATE_ONSCREEN +// && g_HudMessages[index].playernum == g_Vars.currentplayernum +// && g_HudMessages[index].hash == hash) { +// dupeofindex = index; +// } +// } +// +// if (dupeofindex >= 0) { +// return; +// } +// } +// +// var8007fac0 = var800706c8 == 1 ? 2 : 1; +// +// // Find an unused index for the new message +// for (index = 0; index < g_NumHudMessages; index++) { +// if (g_HudMessages[index].state == HUDMSGSTATE_FREE) { +// break; +// } +// } +// +// if (index >= g_NumHudMessages +// && (type == HUDMSGTYPE_OBJECTIVECOMPLETE +// || type == HUDMSGTYPE_OBJECTIVEFAILED +// || type == HUDMSGTYPE_SUBTITLE)) { +// // Out of space - Check if an existing message can be replaced +// index = hudmsgGetNext(-1); +// +// while (index >= 0) { +// if (g_HudMessages[index].state == HUDMSGSTATE_QUEUED) { +// if (g_HudMessages[index].type == HUDMSGTYPE_DEFAULT +// || g_HudMessages[index].type == HUDMSGTYPE_3 +// || g_HudMessages[index].type == HUDMSGTYPE_4) { +// // Good to replace this one +// break; +// } +// } +// +// // Can't replace - try and find another +// index = hudmsgGetNext(g_HudMessages[index].id); +// } +// } +// +// if (index >= 0 && index < g_NumHudMessages) { +// uStack32 = 0; +// msg = &g_HudMessages[index]; +// iStack36 = func0f0ddb1c(&uStack32, conf16); +// func0f1572f8(&uStack28, &uStack24, text, conf04->unk00, conf08->unk00, 0); +// +// if (iStack36 < uStack24) { +// i = 0; +// writeindex = 0; +// +// while (i < 400 && text[i] != '\0') { +// if (text[i] != '\n') { +// stacktext[writeindex++] = text[i]; +// } +// +// i++; +// } +// +// stacktext[writeindex++] = '\n'; +// stacktext[writeindex++] = '\0'; +// +// func0f157520(iStack36, stacktext, msg->text, conf04->unk00, conf08->unk00); +// func0f1572f8(&uStack28, &uStack24, msg->text, conf04->unk00, conf08->unk00, 0); +// } else { +// strncpy(msg->text, text, 399); +// msg->text[399] = '\0'; +// } +// +// msg->flags = flags; +// msg->playernum = g_Vars.currentplayernum; +// msg->type = type; +// msg->id = g_NextHudMessageId++; +// msg->state = HUDMSGSTATE_QUEUED; +// msg->unk006 = 0; +// msg->unk001 = conf00; +// msg->unk002 = conf01; +// msg->unk003 = conf02; +// msg->unk008 = conf04->unk00; +// msg->unk00c = conf08->unk00; +// msg->textcolour = textcolour; +// msg->shadowcolour = shadowcolour; +// msg->alignh = alignh; +// msg->alignv = alignv; +// msg->unk01c = uStack24; +// msg->unk01e = uStack28; +// msg->unk1cc = uStack32; +// msg->unk1d0 = conf16; +// msg->unk1d4 = conf18; +// msg->hash = hash; +// +// func0f0de7fc(msg); +// +// if (flags & HUDMSGFLAG_4) { +// msg->unk1bc = arg14; +// msg->unk1b0 = -1; +// } else { +// msg->unk1bc = g_HudMessageConfigs[type].duration; +// msg->unk1b0 = arg14; +// } +// } +// +// var8007fac0 = 1; +// } +//} + GLOBAL_ASM( glabel func0f0df364 .late_rodata @@ -2606,7 +2751,7 @@ glabel var7f1aded8 /* f0df4b0: 24150004 */ addiu $s5,$zero,0x4 /* f0df4b4: 2414000b */ addiu $s4,$zero,0xb .L0f0df4b8: -/* f0df4b8: 0fc377ab */ jal func0f0ddeac +/* f0df4b8: 0fc377ab */ jal hudmsgGetNext /* f0df4bc: 00000000 */ sll $zero,$zero,0x0 /* f0df4c0: 0440014a */ bltz $v0,.L0f0df9ec /* f0df4c4: 240a00ff */ addiu $t2,$zero,0xff @@ -2988,15 +3133,15 @@ void currentPlayerSetFlag(u32 flag) g_Vars.currentplayer->flags |= flag; } -void hudmsgRemoveByPlayer(s32 playernum) +void hudmsgRemoveForDeadPlayer(s32 playernum) { s32 i; for (i = 0; i < g_NumHudMessages; i++) { - if (g_HudMessages[i].active + if (g_HudMessages[i].state && g_HudMessages[i].playernum == playernum - && (g_HudMessages[i].flags & HUDMSGFLAG_00000001)) { - g_HudMessages[i].active = false; + && (g_HudMessages[i].flags & HUDMSGFLAG_ONLYIFALIVE)) { + g_HudMessages[i].state = HUDMSGSTATE_FREE; g_HudMessages[i].unk006 = 0; } } @@ -3865,6 +4010,6 @@ void hudmsgsReset(void) s32 i; for (i = 0; i < g_NumHudMessages; i++) { - g_HudMessages[i].active = false; + g_HudMessages[i].state = HUDMSGSTATE_FREE; } } diff --git a/src/gvars/gvars.c b/src/gvars/gvars.c index edc7cda28..b1a584eeb 100644 --- a/src/gvars/gvars.c +++ b/src/gvars/gvars.c @@ -16104,7 +16104,7 @@ u32 var8009de90 = 0; u32 var8009de94 = 0; u32 var8009de98 = 0; u32 var8009de9c = 0; -u32 var8009dea0 = 0; +u32 g_NextHudMessageId = 0; u32 var8009dea4 = 0; u32 var8009dea8 = 0; u32 var8009deac = 0; diff --git a/src/include/constants.h b/src/include/constants.h index 46d5ede5a..76ed07d07 100644 --- a/src/include/constants.h +++ b/src/include/constants.h @@ -558,8 +558,21 @@ #define GAILIST_INIT_SEARCH 0x002c // unused #define GAILIST_INVINCIBLE_AND_IDLE 0x002d -#define HUDMSGFLAG_00000001 0x00000001 -#define HUDMSGFLAG_00000002 0x00000002 +#define HUDMSGFLAG_ONLYIFALIVE 0x1 +#define HUDMSGFLAG_2 0x2 +#define HUDMSGFLAG_4 0x4 +#define HUDMSGFLAG_ALLOWDUPES 0x8 + +#define HUDMSGSTATE_FREE 0 +#define HUDMSGSTATE_QUEUED 1 +#define HUDMSGSTATE_ONSCREEN 5 + +#define HUDMSGTYPE_DEFAULT 0 +#define HUDMSGTYPE_OBJECTIVECOMPLETE 1 +#define HUDMSGTYPE_OBJECTIVEFAILED 2 +#define HUDMSGTYPE_3 3 +#define HUDMSGTYPE_4 4 +#define HUDMSGTYPE_SUBTITLE 6 #define IDLEACTION_STANDING 0x01 #define IDLEACTION_SITTING_TYPING 0x02 diff --git a/src/include/game/data/data_020df0.h b/src/include/game/data/data_020df0.h index f71f8752b..9cbb1f766 100644 --- a/src/include/game/data/data_020df0.h +++ b/src/include/game/data/data_020df0.h @@ -152,7 +152,7 @@ extern u8 g_CutsceneSubtitles; extern s32 g_ScreenSize; extern s32 g_ScreenRatio; extern u8 g_ScreenSplit; -extern u32 var8007fac0; +extern s32 var8007fac0; extern u32 var8007fac4; extern u32 var8007facc; extern u32 var8007fad0; diff --git a/src/include/game/game_0dcdb0.h b/src/include/game/game_0dcdb0.h index 599455724..5192a533e 100644 --- a/src/include/game/game_0dcdb0.h +++ b/src/include/game/game_0dcdb0.h @@ -8,24 +8,25 @@ s32 func0f0dcdbc(void); u32 func0f0dcef4(void); u32 func0f0dd2ac(void); u32 func0f0dd848(void); -u32 func0f0ddb1c(void); +s32 func0f0ddb1c(u32 *arg0, u32 arg1); void func0f0ddd44(s32 value); void hudmsgSystemInit(void); void hudmsgRemoveAll(void); -s32 func0f0ddeac(s32 param_1); -void hudmsgCreateViaPreset(char *text, s32 confignum); -void func0f0ddfa4(char *text, s32 confignum, s32 arg2); -void hudmsgCreateViaPresetWithColour(char *text, s32 confignum, u8 colour); -void hudmsgCreateViaStruct(char *text, s32 confignum, struct hudmessageconfig *config, s32 arg3); +s32 hudmsgGetNext(s32 refid); +void hudmsgCreateViaPreset(char *text, s32 type); +void func0f0ddfa4(char *text, s32 type, s32 arg2); +void hudmsgCreateViaPresetWithColour(char *text, s32 type, u8 colour); +void hudmsgCreateViaStruct(char *text, s32 type, struct hudmessageconfig *config, s32 arg3); u32 func0f0de160(void); -u32 func0f0de7fc(void); -u32 hudmsgCreate(char *text, s32 confignum, u8 conf00, u8 conf01, u8 conf02, - void *conf04, void *conf08, u32 colour, u32 conf10, u8 alignh, s16 conf16, - u8 alignv, s16 conf18, s32 arg14, s32 arg15); +void func0f0de7fc(struct hudmessage *msg); +void hudmsgCreate(char *text, s32 type, s32 conf00, s32 conf01, s32 conf02, + struct hudmessagething *conf04, struct hudmessagething *conf08, + u32 textcolour, u32 shadowcolour, + u32 alignh, s32 conf16, u32 alignv, s32 conf18, s32 arg14, u32 flags); void func0f0df364(void); void currentPlayerUnsetFlag(u32 flag); void currentPlayerSetFlag(u32 flag); -void hudmsgRemoveByPlayer(s32 playernum); +void hudmsgRemoveForDeadPlayer(s32 playernum); u32 func0f0dfad0(void); void hudmsgsReset(void); diff --git a/src/include/game/game_1531a0.h b/src/include/game/game_1531a0.h index 3fe4e8e4a..876cb713b 100644 --- a/src/include/game/game_1531a0.h +++ b/src/include/game/game_1531a0.h @@ -44,7 +44,7 @@ u32 func0f156790(void); u32 func0f156a24(void); u32 func0f156e48(void); void func0f1572f8(u32 *arg0, s32 *arg1, char *label, u32 arg3, u32 arg4, u32 arg5); -u32 func0f157520(void); +void func0f157520(s32 arg0, char *arg1, char *arg2, u32 arg3, u32 arg4); u32 func0f1577f0(void); u32 func0f1578c8(void); u32 func0f1579cc(void); diff --git a/src/include/gvars/gvars.h b/src/include/gvars/gvars.h index b9572c750..576f79305 100644 --- a/src/include/gvars/gvars.h +++ b/src/include/gvars/gvars.h @@ -627,7 +627,7 @@ extern s32 g_NumSpawnPoints; extern u32 var8009de78; extern u32 var8009de98; extern u32 var8009de9c; -extern u32 var8009dea0; +extern u32 g_NextHudMessageId; extern u32 var8009deb0; extern char g_CheatMarqueeString[]; extern u32 var8009dfbc; diff --git a/src/include/lib/lib_13130.h b/src/include/lib/lib_13130.h index 1a4599f09..610bd7521 100644 --- a/src/include/lib/lib_13130.h +++ b/src/include/lib/lib_13130.h @@ -4,7 +4,7 @@ #include "types.h" char *strcpy(char *dest, char *src); -u32 func000131c8(void); +char *strncpy(char *dest, char *src, u32 len); u32 strcat(char *dst, char *src); u32 func00013274(void); u32 func00013274(void); diff --git a/src/include/types.h b/src/include/types.h index 1c6eaf4c1..a074b2721 100644 --- a/src/include/types.h +++ b/src/include/types.h @@ -5257,12 +5257,16 @@ struct mpteaminfo { s32 score; }; +struct hudmessagething { + s32 unk00; +}; + struct hudmessageconfig { /*0x00*/ u8 unk00; /*0x01*/ u8 unk01; /*0x02*/ u8 unk02; - /*0x04*/ void *unk04; - /*0x08*/ void *unk08; + /*0x04*/ struct hudmessagething *unk04; + /*0x08*/ struct hudmessagething *unk08; /*0x0c*/ u32 colour; /*0x10*/ u32 unk10; /*0x14*/ u8 alignh; @@ -5273,127 +5277,32 @@ struct hudmessageconfig { }; struct hudmessage { - /*0x000*/ u8 active; - /*0x002*/ u16 unk002; + /*0x000*/ u8 state; + /*0x001*/ u8 unk001; + /*0x002*/ u8 unk002; + /*0x003*/ u8 unk003; /*0x004*/ u16 unk004; /*0x006*/ u16 unk006; /*0x008*/ u32 unk008; /*0x00c*/ u32 unk00c; - /*0x010*/ u32 unk010; - /*0x014*/ u32 unk014; + /*0x010*/ u32 textcolour; + /*0x014*/ u32 shadowcolour; /*0x018*/ u32 unk018; - /*0x01c*/ u32 unk01c; - /*0x020*/ u32 unk020; - /*0x024*/ u32 unk024; - /*0x028*/ u32 unk028; - /*0x02c*/ u32 unk02c; - /*0x030*/ u32 unk030; - /*0x034*/ u32 unk034; - /*0x038*/ u32 unk038; - /*0x03c*/ u32 unk03c; - /*0x040*/ u32 unk040; - /*0x044*/ u32 unk044; - /*0x048*/ u32 unk048; - /*0x04c*/ u32 unk04c; - /*0x050*/ u32 unk050; - /*0x054*/ u32 unk054; - /*0x058*/ u32 unk058; - /*0x05c*/ u32 unk05c; - /*0x060*/ u32 unk060; - /*0x064*/ u32 unk064; - /*0x068*/ u32 unk068; - /*0x06c*/ u32 unk06c; - /*0x070*/ u32 unk070; - /*0x074*/ u32 unk074; - /*0x078*/ u32 unk078; - /*0x07c*/ u32 unk07c; - /*0x080*/ u32 unk080; - /*0x084*/ u32 unk084; - /*0x088*/ u32 unk088; - /*0x08c*/ u32 unk08c; - /*0x090*/ u32 unk090; - /*0x094*/ u32 unk094; - /*0x098*/ u32 unk098; - /*0x09c*/ u32 unk09c; - /*0x0a0*/ u32 unk0a0; - /*0x0a4*/ u32 unk0a4; - /*0x0a8*/ u32 unk0a8; - /*0x0ac*/ u32 unk0ac; - /*0x0b0*/ u32 unk0b0; - /*0x0b4*/ u32 unk0b4; - /*0x0b8*/ u32 unk0b8; - /*0x0bc*/ u32 unk0bc; - /*0x0c0*/ u32 unk0c0; - /*0x0c4*/ u32 unk0c4; - /*0x0c8*/ u32 unk0c8; - /*0x0cc*/ u32 unk0cc; - /*0x0d0*/ u32 unk0d0; - /*0x0d4*/ u32 unk0d4; - /*0x0d8*/ u32 unk0d8; - /*0x0dc*/ u32 unk0dc; - /*0x0e0*/ u32 unk0e0; - /*0x0e4*/ u32 unk0e4; - /*0x0e8*/ u32 unk0e8; - /*0x0ec*/ u32 unk0ec; - /*0x0f0*/ u32 unk0f0; - /*0x0f4*/ u32 unk0f4; - /*0x0f8*/ u32 unk0f8; - /*0x0fc*/ u32 unk0fc; - /*0x100*/ u32 unk100; - /*0x104*/ u32 unk104; - /*0x108*/ u32 unk108; - /*0x10c*/ u32 unk10c; - /*0x110*/ u32 unk110; - /*0x114*/ u32 unk114; - /*0x118*/ u32 unk118; - /*0x11c*/ u32 unk11c; - /*0x120*/ u32 unk120; - /*0x124*/ u32 unk124; - /*0x128*/ u32 unk128; - /*0x12c*/ u32 unk12c; - /*0x130*/ u32 unk130; - /*0x134*/ u32 unk134; - /*0x138*/ u32 unk138; - /*0x13c*/ u32 unk13c; - /*0x140*/ u32 unk140; - /*0x144*/ u32 unk144; - /*0x148*/ u32 unk148; - /*0x14c*/ u32 unk14c; - /*0x150*/ u32 unk150; - /*0x154*/ u32 unk154; - /*0x158*/ u32 unk158; - /*0x15c*/ u32 unk15c; - /*0x160*/ u32 unk160; - /*0x164*/ u32 unk164; - /*0x168*/ u32 unk168; - /*0x16c*/ u32 unk16c; - /*0x170*/ u32 unk170; - /*0x174*/ u32 unk174; - /*0x178*/ u32 unk178; - /*0x17c*/ u32 unk17c; - /*0x180*/ u32 unk180; - /*0x184*/ u32 unk184; - /*0x188*/ u32 unk188; - /*0x18c*/ u32 unk18c; - /*0x190*/ u32 unk190; - /*0x194*/ u32 unk194; - /*0x198*/ u32 unk198; - /*0x19c*/ u32 unk19c; - /*0x1a0*/ u32 unk1a0; - /*0x1a4*/ u32 unk1a4; - /*0x1a8*/ u32 unk1a8; - /*0x1ac*/ u32 unk1ac; - /*0x1b0*/ u32 unk1b0; - /*0x1b4*/ u32 unk1b4; - /*0x1b8*/ s32 unk1b8; - /*0x1bc*/ u32 unk1bc; - /*0x1c0*/ u32 playernum; + /*0x01c*/ u16 unk01c; + /*0x01e*/ u16 unk01e; + /*0x020*/ char text[400]; + /*0x1b0*/ s32 unk1b0; + /*0x1b4*/ u32 type; + /*0x1b8*/ s32 id; + /*0x1bc*/ u32 unk1bc; // duration + /*0x1c0*/ s32 playernum; /*0x1c4*/ u32 flags; - /*0x1c8*/ u32 unk1c8; + /*0x1c8*/ u8 alignh; + /*0x1c9*/ u8 alignv; /*0x1cc*/ u32 unk1cc; /*0x1d0*/ u32 unk1d0; /*0x1d4*/ u32 unk1d4; - /*0x1d8*/ u32 unk1d8; + /*0x1d8*/ u32 hash; }; #endif diff --git a/src/lib/lib_13130.c b/src/lib/lib_13130.c index 14bd77842..8cdab2209 100644 --- a/src/lib/lib_13130.c +++ b/src/lib/lib_13130.c @@ -67,7 +67,7 @@ glabel strcpy ); GLOBAL_ASM( -glabel func000131c8 +glabel strncpy /* 131c8: 90a20000 */ lbu $v0,0x0($a1) /* 131cc: 24830001 */ addiu $v1,$a0,0x1 /* 131d0: 24a50001 */ addiu $a1,$a1,0x1