Attempt to decompile stageChooseActiveHeads

This commit is contained in:
Ryan Dwyer 2020-12-28 22:23:32 +10:00
parent 68e202010c
commit 9a03dc5281
15 changed files with 219 additions and 116 deletions

View File

@ -25942,7 +25942,7 @@ struct prop *chrSpawnAtCoord(s32 bodynum, s32 headnum, struct coord *pos, s16 *r
if (chrsGetNumFree() > 1) {
if (headnum < 0) {
headnum = bodyGetHead(bodynum);
headnum = bodyChooseHead(bodynum);
}
pos2.x = pos->x;

View File

@ -2487,8 +2487,13 @@ u32 var800616f0 = 0x00000000;
u32 var800616f4 = 0x00000000;
u32 var800616f8 = 0x00000000;
u32 var800616fc = 0x00000000;
u32 var80061700 = 0x2f053504;
u32 var80061704 = 0x19050000;
struct stageheadlimit g_StageHeadLimits[3] = {
{ STAGE_INFILTRATION, 5 },
{ STAGE_RESCUE, 4 },
{ STAGE_ESCAPE, 5 },
};
u32 var80061708 = 0x00000000;
u32 var8006170c = 0x00000000;
u32 var80061710 = 0x00000000;

View File

@ -127,15 +127,15 @@ u32 var80062af4 = 0x00000003;
u32 var80062af8 = 0x00000001;
u32 var80062afc = 0x00000005;
s32 var80062b00 = 0;
s32 var80062b04 = 0;
s32 var80062b08 = 0;
s32 var80062b0c = 0;
s32 var80062b10 = 0;
u32 var80062b14 = 0;
u32 var80062b18 = 0;
s32 g_NumBondBodies = 0;
s32 g_NumMaleGuardHeads = 0;
s32 g_NumFemaleGuardHeads = 0;
s32 g_NumMaleGuardTeamHeads = 0;
s32 g_NumFemaleGuardTeamHeads = 0;
s32 var80062b14 = 0;
s32 var80062b18 = 0;
s32 var80062b1c[] = {
s32 g_BondBodies[] = {
BODY_DJBOND,
BODY_CONNERY,
BODY_DALTON,
@ -143,7 +143,7 @@ s32 var80062b1c[] = {
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
};
s32 var80062b68[] = {
s32 g_MaleGuardHeads[] = {
HEAD_BEAU1,
HEAD_CHRIST,
HEAD_DARLING,
@ -189,7 +189,7 @@ s32 var80062b68[] = {
-1,
};
s32 var80062c14[] = {
s32 g_MaleGuardTeamHeads[] = {
HEAD_BEAU1,
HEAD_CHRIST,
HEAD_DARLING,
@ -209,7 +209,7 @@ s32 var80062c14[] = {
-1,
};
s32 var80062c58[] = {
s32 g_FemaleGuardHeads[] = {
HEAD_LESLIE_S,
HEAD_ANKA,
HEAD_EILEEN_T,
@ -217,7 +217,7 @@ s32 var80062c58[] = {
-1,
};
s32 var80062c6c[] = {
s32 g_FemaleGuardTeamHeads[] = {
HEAD_LESLIE_S,
HEAD_ANKA,
HEAD_EILEEN_T,
@ -226,9 +226,15 @@ s32 var80062c6c[] = {
};
s32 var80062c80 = 0;
u32 g_HeadsAIndex = 0x00000000;
u32 g_HeadsBIndex = 0x00000000;
u32 g_FemaleHeads[3] = {HEAD_ALEX, HEAD_JULIANNE, HEAD_LAURA};
s32 g_ActiveMaleHeadsIndex = 0;
s32 g_ActiveFemaleHeadsIndex = 0;
s32 g_FemGuardHeads[3] = {
HEAD_ALEX,
HEAD_JULIANNE,
HEAD_LAURA,
};
u32 var80062c98 = 0x00000000;
u32 var80062c9c = 0x00000000;
f32 var80062ca0 = 1;

View File

@ -3612,13 +3612,9 @@ struct body g_Bodies[] = {
{ /*0x0094*/ 1, 0x0da8, FILE_CELVISWAISTCOAT, 1, 0.57276993989944, 0, FILE_GHAND_ELVIS },
{ /*0x0095*/ 0, 0x067c, FILE_CDARK_LEATHER, 1, 0.95305162668228, 0, FILE_GHAND_JOFROCK },
{ /*0x0096*/ 0, 0x067c, FILE_CDARK_NEGOTIATOR, 1, 0.95305162668228, 0, FILE_GHAND_JOAF1 },
{ /*0x0097*/ 0, 0x0000, 0, 1, 0, 0, FILE_GCOMBATHANDSLOD },
};
u32 var8007dad0 = 0x00000000;
u32 var8007dad4 = 0x3f800000;
u32 var8007dad8 = 0x00000000;
u32 var8007dadc = 0x00000000;
u32 var8007dae0 = 0x04e50000;
u32 var8007dae4 = 0xbd8ff972;
u32 var8007dae8 = 0x3efbda51;
u32 var8007daec = 0xbf5566cf;

View File

@ -20,34 +20,34 @@ const u32 var7f1a78cc[] = {0x00000000};
void func0f000130(void)
{
var80062b00 = 0;
g_NumBondBodies = 0;
while (var80062b1c[var80062b00] >= 0) {
var80062b00++;
while (g_BondBodies[g_NumBondBodies] >= 0) {
g_NumBondBodies++;
}
var80062b0c = 0;
g_NumMaleGuardTeamHeads = 0;
while (var80062c14[var80062b0c] >= 0) {
var80062b0c++;
while (g_MaleGuardTeamHeads[g_NumMaleGuardTeamHeads] >= 0) {
g_NumMaleGuardTeamHeads++;
}
var80062b10 = 0;
g_NumFemaleGuardTeamHeads = 0;
while (var80062c6c[var80062b10] >= 0) {
var80062b10++;
while (g_FemaleGuardTeamHeads[g_NumFemaleGuardTeamHeads] >= 0) {
g_NumFemaleGuardTeamHeads++;
}
var80062b04 = 0;
g_NumMaleGuardHeads = 0;
while (var80062b68[var80062b04] >= 0) {
var80062b04++;
while (g_MaleGuardHeads[g_NumMaleGuardHeads] >= 0) {
g_NumMaleGuardHeads++;
}
var80062b08 = 0;
g_NumFemaleGuardHeads = 0;
while (var80062c58[var80062b08] >= 0) {
var80062b08++;
while (g_FemaleGuardHeads[g_NumFemaleGuardHeads] >= 0) {
g_NumFemaleGuardHeads++;
}
}

View File

@ -19,7 +19,7 @@
#include "types.h"
GLOBAL_ASM(
glabel func0f00b820
glabel stageChooseActiveHeads
/* f00b820: 27bdffd0 */ addiu $sp,$sp,-48
/* f00b824: 3c0e8008 */ lui $t6,%hi(g_Bodies+0x2)
/* f00b828: 95cecf06 */ lhu $t6,%lo(g_Bodies+0x2)($t6)
@ -45,8 +45,8 @@ glabel func0f00b820
.L0f00b874:
/* f00b874: 0c004b70 */ jal random
/* f00b878: 00000000 */ nop
/* f00b87c: 3c188006 */ lui $t8,%hi(var80062b00)
/* f00b880: 8f182b00 */ lw $t8,%lo(var80062b00)($t8)
/* f00b87c: 3c188006 */ lui $t8,%hi(g_NumBondBodies)
/* f00b880: 8f182b00 */ lw $t8,%lo(g_NumBondBodies)($t8)
/* f00b884: 3c018006 */ lui $at,%hi(var80062c80)
/* f00b888: 3c128006 */ lui $s2,%hi(var80062b14)
/* f00b88c: 0058001b */ divu $zero,$v0,$t8
@ -78,8 +78,8 @@ glabel func0f00b820
/* f00b8ec: 24030001 */ addiu $v1,$zero,0x1
.L0f00b8f0:
/* f00b8f0: 8cca0064 */ lw $t2,0x64($a2)
/* f00b8f4: 3c15800a */ lui $s5,%hi(g_MaxHeadsPerBank)
/* f00b8f8: 26b5cd20 */ addiu $s5,$s5,%lo(g_MaxHeadsPerBank)
/* f00b8f4: 3c15800a */ lui $s5,%hi(g_NumActiveHeadsPerGender)
/* f00b8f8: 26b5cd20 */ addiu $s5,$s5,%lo(g_NumActiveHeadsPerGender)
/* f00b8fc: 11400003 */ beqz $t2,.L0f00b90c
/* f00b900: 24180008 */ addiu $t8,$zero,0x8
/* f00b904: 10000001 */ b .L0f00b90c
@ -87,7 +87,7 @@ glabel func0f00b820
.L0f00b90c:
/* f00b90c: 8ccb0070 */ lw $t3,0x70($a2)
/* f00b910: 240f0004 */ addiu $t7,$zero,0x4
/* f00b914: 3c198006 */ lui $t9,%hi(var80061700)
/* f00b914: 3c198006 */ lui $t9,%hi(g_StageHeadLimits)
/* f00b918: 11600003 */ beqz $t3,.L0f00b928
/* f00b91c: 00000000 */ nop
/* f00b920: 10000001 */ b .L0f00b928
@ -98,9 +98,9 @@ glabel func0f00b820
/* f00b930: 01a57021 */ addu $t6,$t5,$a1
/* f00b934: 29c10002 */ slti $at,$t6,0x2
/* f00b938: 14200005 */ bnez $at,.L0f00b950
/* f00b93c: 27221700 */ addiu $v0,$t9,%lo(var80061700)
/* f00b940: 3c15800a */ lui $s5,%hi(g_MaxHeadsPerBank)
/* f00b944: 26b5cd20 */ addiu $s5,$s5,%lo(g_MaxHeadsPerBank)
/* f00b93c: 27221700 */ addiu $v0,$t9,%lo(g_StageHeadLimits)
/* f00b940: 3c15800a */ lui $s5,%hi(g_NumActiveHeadsPerGender)
/* f00b944: 26b5cd20 */ addiu $s5,$s5,%lo(g_NumActiveHeadsPerGender)
/* f00b948: 1000000d */ b .L0f00b980
/* f00b94c: aeaf0000 */ sw $t7,0x0($s5)
.L0f00b950:
@ -122,20 +122,20 @@ glabel func0f00b820
/* f00b980: 0fc41b99 */ jal cheatIsActive
/* f00b984: 24040010 */ addiu $a0,$zero,0x10
/* f00b988: 10400005 */ beqz $v0,.L0f00b9a0
/* f00b98c: 3c148006 */ lui $s4,%hi(var80062c14)
/* f00b990: 3c138006 */ lui $s3,%hi(var80062b0c)
/* f00b994: 26942c14 */ addiu $s4,$s4,%lo(var80062c14)
/* f00b98c: 3c148006 */ lui $s4,%hi(g_MaleGuardTeamHeads)
/* f00b990: 3c138006 */ lui $s3,%hi(g_NumMaleGuardTeamHeads)
/* f00b994: 26942c14 */ addiu $s4,$s4,%lo(g_MaleGuardTeamHeads)
/* f00b998: 10000005 */ b .L0f00b9b0
/* f00b99c: 8e732b0c */ lw $s3,%lo(var80062b0c)($s3)
/* f00b99c: 8e732b0c */ lw $s3,%lo(g_NumMaleGuardTeamHeads)($s3)
.L0f00b9a0:
/* f00b9a0: 3c148006 */ lui $s4,%hi(var80062b68)
/* f00b9a4: 3c138006 */ lui $s3,%hi(var80062b04)
/* f00b9a8: 26942b68 */ addiu $s4,$s4,%lo(var80062b68)
/* f00b9ac: 8e732b04 */ lw $s3,%lo(var80062b04)($s3)
/* f00b9a0: 3c148006 */ lui $s4,%hi(g_MaleGuardHeads)
/* f00b9a4: 3c138006 */ lui $s3,%hi(g_NumMaleGuardHeads)
/* f00b9a8: 26942b68 */ addiu $s4,$s4,%lo(g_MaleGuardHeads)
/* f00b9ac: 8e732b04 */ lw $s3,%lo(g_NumMaleGuardHeads)($s3)
.L0f00b9b0:
/* f00b9b0: 8eaa0000 */ lw $t2,0x0($s5)
/* f00b9b4: 3c12800a */ lui $s2,%hi(g_HeadsA)
/* f00b9b8: 2652cd28 */ addiu $s2,$s2,%lo(g_HeadsA)
/* f00b9b4: 3c12800a */ lui $s2,%hi(g_ActiveMaleHeads)
/* f00b9b8: 2652cd28 */ addiu $s2,$s2,%lo(g_ActiveMaleHeads)
/* f00b9bc: 19400022 */ blez $t2,.L0f00ba48
/* f00b9c0: 00000000 */ nop
.L0f00b9c4:
@ -156,8 +156,8 @@ glabel func0f00b820
/* f00b9f8: ae4e0000 */ sw $t6,0x0($s2)
/* f00b9fc: 1a20000b */ blez $s1,.L0f00ba2c
/* f00ba00: 00001825 */ or $v1,$zero,$zero
/* f00ba04: 3c02800a */ lui $v0,%hi(g_HeadsA)
/* f00ba08: 2442cd28 */ addiu $v0,$v0,%lo(g_HeadsA)
/* f00ba04: 3c02800a */ lui $v0,%hi(g_ActiveMaleHeads)
/* f00ba08: 2442cd28 */ addiu $v0,$v0,%lo(g_ActiveMaleHeads)
/* f00ba0c: 01c02025 */ or $a0,$t6,$zero
.L0f00ba10:
/* f00ba10: 8c4f0000 */ lw $t7,0x0($v0)
@ -180,20 +180,20 @@ glabel func0f00b820
/* f00ba48: 0fc41b99 */ jal cheatIsActive
/* f00ba4c: 24040010 */ addiu $a0,$zero,0x10
/* f00ba50: 10400006 */ beqz $v0,.L0f00ba6c
/* f00ba54: 3c148006 */ lui $s4,%hi(var80062c58)
/* f00ba58: 3c148006 */ lui $s4,%hi(var80062c6c)
/* f00ba5c: 3c138006 */ lui $s3,%hi(var80062b10)
/* f00ba60: 26942c6c */ addiu $s4,$s4,%lo(var80062c6c)
/* f00ba54: 3c148006 */ lui $s4,%hi(g_FemaleGuardHeads)
/* f00ba58: 3c148006 */ lui $s4,%hi(g_FemaleGuardTeamHeads)
/* f00ba5c: 3c138006 */ lui $s3,%hi(g_NumFemaleGuardTeamHeads)
/* f00ba60: 26942c6c */ addiu $s4,$s4,%lo(g_FemaleGuardTeamHeads)
/* f00ba64: 10000004 */ b .L0f00ba78
/* f00ba68: 8e732b10 */ lw $s3,%lo(var80062b10)($s3)
/* f00ba68: 8e732b10 */ lw $s3,%lo(g_NumFemaleGuardTeamHeads)($s3)
.L0f00ba6c:
/* f00ba6c: 3c138006 */ lui $s3,%hi(var80062b08)
/* f00ba70: 26942c58 */ addiu $s4,$s4,%lo(var80062c58)
/* f00ba74: 8e732b08 */ lw $s3,%lo(var80062b08)($s3)
/* f00ba6c: 3c138006 */ lui $s3,%hi(g_NumFemaleGuardHeads)
/* f00ba70: 26942c58 */ addiu $s4,$s4,%lo(g_FemaleGuardHeads)
/* f00ba74: 8e732b08 */ lw $s3,%lo(g_NumFemaleGuardHeads)($s3)
.L0f00ba78:
/* f00ba78: 8ea50000 */ lw $a1,0x0($s5)
/* f00ba7c: 3c12800a */ lui $s2,%hi(g_HeadsB)
/* f00ba80: 2652cd48 */ addiu $s2,$s2,%lo(g_HeadsB)
/* f00ba7c: 3c12800a */ lui $s2,%hi(g_ActiveFemaleHeads)
/* f00ba80: 2652cd48 */ addiu $s2,$s2,%lo(g_ActiveFemaleHeads)
/* f00ba84: 18a00022 */ blez $a1,.L0f00bb10
/* f00ba88: 00000000 */ nop
.L0f00ba8c:
@ -214,8 +214,8 @@ glabel func0f00b820
/* f00bac0: ae490000 */ sw $t1,0x0($s2)
/* f00bac4: 1a20000b */ blez $s1,.L0f00baf4
/* f00bac8: 00001825 */ or $v1,$zero,$zero
/* f00bacc: 3c02800a */ lui $v0,%hi(g_HeadsB)
/* f00bad0: 2442cd48 */ addiu $v0,$v0,%lo(g_HeadsB)
/* f00bacc: 3c02800a */ lui $v0,%hi(g_ActiveFemaleHeads)
/* f00bad0: 2442cd48 */ addiu $v0,$v0,%lo(g_ActiveFemaleHeads)
/* f00bad4: 01202025 */ or $a0,$t1,$zero
.L0f00bad8:
/* f00bad8: 8c4a0000 */ lw $t2,0x0($v0)
@ -235,11 +235,11 @@ glabel func0f00b820
/* f00bb08: 26520004 */ addiu $s2,$s2,0x4
/* f00bb0c: 00008825 */ or $s1,$zero,$zero
.L0f00bb10:
/* f00bb10: 3c018006 */ lui $at,%hi(g_HeadsAIndex)
/* f00bb14: ac202c84 */ sw $zero,%lo(g_HeadsAIndex)($at)
/* f00bb18: 3c018006 */ lui $at,%hi(g_HeadsBIndex)
/* f00bb10: 3c018006 */ lui $at,%hi(g_ActiveMaleHeadsIndex)
/* f00bb14: ac202c84 */ sw $zero,%lo(g_ActiveMaleHeadsIndex)($at)
/* f00bb18: 3c018006 */ lui $at,%hi(g_ActiveFemaleHeadsIndex)
/* f00bb1c: 18a00006 */ blez $a1,.L0f00bb38
/* f00bb20: ac202c88 */ sw $zero,%lo(g_HeadsBIndex)($at)
/* f00bb20: ac202c88 */ sw $zero,%lo(g_ActiveFemaleHeadsIndex)($at)
/* f00bb24: 26310001 */ addiu $s1,$s1,0x1
.L0f00bb28:
/* f00bb28: 0225082a */ slt $at,$s1,$a1
@ -265,6 +265,95 @@ glabel func0f00b820
/* f00bb6c: 27bd0030 */ addiu $sp,$sp,0x30
);
// Mismatches:
// - Address of var80062b14 Should be loaded to a callee-save register
// - PLAYERCOUNT() calculation is more spread out
// (does other register preparation during calculation)
// - Loop at 950 is calculated differently
//void stageChooseActiveHeads(s32 stagenum)
//{
// s32 *headsavailablelist;
// s32 headsavailablelen;
// bool done;
// s32 i;
// s32 j;
//
// for (i = 0; g_Bodies[i].bodyfileid; i++) {
// g_Bodies[i].unk0c = NULL;
// }
//
// var80062c80 = random() % g_NumBondBodies;
// var80062b14 = 0;
// var80062b18 = 0;
//
// if (PLAYERCOUNT() >= 2) {
// g_NumActiveHeadsPerGender = 4;
// } else {
// // 950
// g_NumActiveHeadsPerGender = 8;
//
// for (i = 0; i < ARRAYCOUNT(g_StageHeadLimits); i++) {
// if (g_StageHeadLimits[i].stagenum == stagenum) {
// g_NumActiveHeadsPerGender = g_StageHeadLimits[i].maxheads;
// }
// }
// }
//
// // Male heads
// if (cheatIsActive(CHEAT_TEAMHEADSONLY)) {
// headsavailablelist = g_MaleGuardTeamHeads;
// headsavailablelen = g_NumMaleGuardTeamHeads;
// } else {
// headsavailablelist = g_MaleGuardHeads;
// headsavailablelen = g_NumMaleGuardHeads;
// }
//
// for (i = 0; i < g_NumActiveHeadsPerGender; i++) {
// do {
// done = true;
// g_ActiveMaleHeads[i] = headsavailablelist[random() % headsavailablelen];
//
// if (headsavailablelen > g_NumActiveHeadsPerGender) {
// for (j = 0; j < i; j++) {
// if (g_ActiveMaleHeads[i] == g_ActiveMaleHeads[j]) {
// done = false;
// }
// }
// }
// } while (!done);
// }
//
// // Female heads
// if (cheatIsActive(CHEAT_TEAMHEADSONLY)) {
// headsavailablelist = g_FemaleGuardTeamHeads;
// headsavailablelen = g_NumFemaleGuardTeamHeads;
// } else {
// headsavailablelist = g_FemaleGuardHeads;
// headsavailablelen = g_NumFemaleGuardHeads;
// }
//
// for (i = 0; i < g_NumActiveHeadsPerGender; i++) {
// do {
// done = true;
// g_ActiveFemaleHeads[i] = headsavailablelist[random() % headsavailablelen];
//
// if (headsavailablelen > g_NumActiveHeadsPerGender) {
// for (j = 0; j < i; j++) {
// if (g_ActiveFemaleHeads[i] == g_ActiveFemaleHeads[j]) {
// done = false;
// }
// }
// }
// } while (!done);
// }
//
// g_ActiveMaleHeadsIndex = 0;
// g_ActiveFemaleHeadsIndex = 0;
//
// for (i = 0; i < g_NumActiveHeadsPerGender; i++);
// for (i = 0; i < g_NumActiveHeadsPerGender; i++);
//}
void resetSomeStageThings(void)
{
s32 i;

View File

@ -429,26 +429,26 @@ struct model *modelAllocateChr(u32 bodynum, u32 headnum, u32 flags)
s32 func0f02d3f8(void)
{
return var80062b1c[var80062c80];
return g_BondBodies[var80062c80];
}
u32 bodyGetHead(u32 bodynum)
s32 bodyChooseHead(s32 bodynum)
{
u32 head;
s32 head;
if (g_Bodies[bodynum].ismale) {
head = g_HeadsA[g_HeadsAIndex++];
head = g_ActiveMaleHeads[g_ActiveMaleHeadsIndex++];
if (g_HeadsAIndex == g_MaxHeadsPerBank) {
g_HeadsAIndex = 0;
if (g_ActiveMaleHeadsIndex == g_NumActiveHeadsPerGender) {
g_ActiveMaleHeadsIndex = 0;
}
} else if (bodynum == BODY_FEM_GUARD) {
head = g_FemaleHeads[random() % 3];
head = g_FemGuardHeads[random() % 3];
} else {
head = g_HeadsB[g_HeadsBIndex++];
head = g_ActiveFemaleHeads[g_ActiveFemaleHeadsIndex++];
if (g_HeadsBIndex == g_MaxHeadsPerBank) {
g_HeadsBIndex = 0;
if (g_ActiveFemaleHeadsIndex == g_NumActiveHeadsPerGender) {
g_ActiveFemaleHeadsIndex = 0;
}
}
@ -564,7 +564,7 @@ glabel chrUnpack
.L0f02d688:
/* f02d688: 15610005 */ bne $t3,$at,.L0f02d6a0
/* f02d68c: 8fa4004c */ lw $a0,0x4c($sp)
/* f02d690: 0fc0b505 */ jal bodyGetHead
/* f02d690: 0fc0b505 */ jal bodyChooseHead
/* f02d694: afa70058 */ sw $a3,0x58($sp)
/* f02d698: 8fa70058 */ lw $a3,0x58($sp)
/* f02d69c: afa20048 */ sw $v0,0x48($sp)

View File

@ -362,7 +362,7 @@ void func0f167e7c(s32 stagenum)
func0f00c240();
func0f00c490();
func0f00b510();
func0f00b820(stagenum);
stageChooseActiveHeads(stagenum);
setupParseObjects(stagenum);
tagsAllocatePtrs();
func0f013010();

View File

@ -14616,10 +14616,10 @@ s32 g_NumChrsC = 0;
s16 *g_ChrnumsC = NULL;
s16 *g_ChrIndexesC = NULL;
u32 var8009cd1c = 0;
u32 g_MaxHeadsPerBank = 0;
s32 g_NumActiveHeadsPerGender = 0;
u32 var8009cd24 = 0;
u32 g_HeadsA[8] = {0};
u32 g_HeadsB[8] = {0};
u32 g_ActiveMaleHeads[8] = {0};
u32 g_ActiveFemaleHeads[8] = {0};
u32 var8009cd68 = 0;
u32 var8009cd6c = 0;
s32 g_RecentQuipsPlayed[] = {0, 0, 0, 0, 0};

View File

@ -217,6 +217,7 @@ extern u32 var80061694;
extern u32 var800616dc;
extern u32 var800616e4;
extern u32 var800616e8;
extern struct stageheadlimit g_StageHeadLimits[3];
extern u32 var80061710;
extern struct monitorscreen var80061a80;
extern struct monitorscreen var80061af4;

View File

@ -109,21 +109,22 @@ extern struct var80062a8c *var80062a8c; // pointer to array
extern s32 var80062a90; // true if var80062a8c has anything in its array
extern u32 var80062a94;
extern u32 var80062aa0;
extern s32 var80062b00;
extern s32 var80062b04;
extern s32 var80062b08;
extern s32 var80062b0c;
extern s32 var80062b10;
extern u32 var80062b14;
extern s32 var80062b1c[];
extern s32 var80062b68[];
extern s32 var80062c14[];
extern s32 var80062c58[];
extern s32 var80062c6c[];
extern s32 g_NumBondBodies;
extern s32 g_NumMaleGuardHeads;
extern s32 g_NumFemaleGuardHeads;
extern s32 g_NumMaleGuardTeamHeads;
extern s32 g_NumFemaleGuardTeamHeads;
extern s32 var80062b14;
extern s32 var80062b18;
extern s32 g_BondBodies[];
extern s32 g_MaleGuardHeads[];
extern s32 g_MaleGuardTeamHeads[];
extern s32 g_FemaleGuardHeads[];
extern s32 g_FemaleGuardTeamHeads[];
extern s32 var80062c80;
extern u32 g_HeadsAIndex;
extern u32 g_HeadsBIndex;
extern u32 g_FemaleHeads[3];
extern s32 g_ActiveMaleHeadsIndex;
extern s32 g_ActiveFemaleHeadsIndex;
extern s32 g_FemGuardHeads[3];
extern f32 var80062ca0;
extern f32 var80062ca4;
extern f32 var80062ca8;

View File

@ -3,7 +3,7 @@
#include <ultra64.h>
#include "types.h"
void func0f00b820(s32 stagenum);
void stageChooseActiveHeads(s32 stagenum);
void resetSomeStageThings(void);
void func0f00bbc8(void);

View File

@ -9,7 +9,7 @@ u32 func0f02ce8c(void);
struct model *func0f02d338(u32 bodynum, u32 headnum, u32 arg2, u32 arg3, bool arg4, u32 arg5);
struct model *modelAllocateChr(u32 bodynum, u32 headnum, u32 flags);
s32 func0f02d3f8(void);
u32 bodyGetHead(u32 bodynum);
s32 bodyChooseHead(s32 bodynum);
void chrUnpack(s32 stagenum, void *cmddata, s32 cmdindex);
struct prop *propAllocateEyespy(struct pad *pad, s16 room);
u32 func0f02ddbc(void);

View File

@ -548,9 +548,9 @@ extern void *var8009ccc0[20];
extern s32 g_NumChrsC;
extern s16 *g_ChrnumsC;
extern s16 *g_ChrIndexesC;
extern u32 g_MaxHeadsPerBank;
extern u32 g_HeadsA[8];
extern u32 g_HeadsB[8];
extern s32 g_NumActiveHeadsPerGender;
extern u32 g_ActiveMaleHeads[8];
extern u32 g_ActiveFemaleHeads[8];
extern s32 g_RecentQuipsPlayed[5];
extern u8 g_RecentQuipsIndex;
extern u32 var8009cda0;

View File

@ -3043,13 +3043,13 @@ struct cheat {
};
struct body {
u16 ismale : 1;
u16 flags_01 : 15;
u16 bodyfileid;
f32 unk04;
f32 unk08;
void *unk0c; // likely a pointer to bodyfile data if loaded
u16 handfileid;
/*0x00*/ u16 ismale : 1;
/*0x00*/ u16 flags_01 : 15;
/*0x02*/ u16 bodyfileid;
/*0x04*/ f32 unk04;
/*0x08*/ f32 unk08;
/*0x0c*/ void *unk0c; // likely a pointer to bodyfile data if loaded
/*0x10*/ u16 handfileid;
};
struct stagetableentry {
@ -6762,4 +6762,9 @@ struct var8007e3d0 {
s32 numallocated;
};
struct stageheadlimit {
u8 stagenum;
u8 maxheads;
};
#endif