Decompile mpBodyGetHeadIndex

This commit is contained in:
Ryan Dwyer 2020-03-18 18:58:36 +10:00
parent 966dec9403
commit bb371eaa68
9 changed files with 178 additions and 207 deletions

View File

@ -11989,7 +11989,7 @@ struct mphead g_MpBeauHeads[NUM_MPBEAUHEADS] = {
{ HEAD_BEAU6, 0x00 },
};
struct mphead g_MpHeads[NUM_MPHEADS] = {
struct mphead g_MpHeads[75] = {
// head, unlock value
{ /*0x00*/ HEAD_DARK_COMBAT, 0x00 },
{ /*0x01*/ HEAD_DARK_FROCK, 0x41 },
@ -12081,147 +12081,152 @@ u32 table_0x2d678[] = {
// 2d74c
struct mpsimulant g_MpGeneralSimulants[] = {
// type, skill, name, body, unlock value
{ SIMTYPE_GENERAL, 0, 0x5858, 0x001a, 0x00 },
{ SIMTYPE_GENERAL, 1, 0x5859, 0x0019, 0x00 },
{ SIMTYPE_GENERAL, 2, 0x585a, 0x001b, 0x00 },
{ SIMTYPE_GENERAL, 3, 0x585b, 0x0017, 0x19 },
{ SIMTYPE_GENERAL, 4, 0x585c, 0x0029, 0x1a },
{ SIMTYPE_GENERAL, 5, 0x585d, 0x003a, 0x1c },
{ SIMTYPE_GENERAL, 0, L_MISC(88), 0x001a, 0x00 },
{ SIMTYPE_GENERAL, 1, L_MISC(89), 0x0019, 0x00 },
{ SIMTYPE_GENERAL, 2, L_MISC(90), 0x001b, 0x00 },
{ SIMTYPE_GENERAL, 3, L_MISC(91), 0x0017, 0x19 },
{ SIMTYPE_GENERAL, 4, L_MISC(92), 0x0029, 0x1a },
{ SIMTYPE_GENERAL, 5, L_MISC(93), 0x003a, 0x1c },
};
// 2d77c
struct mpsimulant mpspecialsimulants[] = {
{ SIMTYPE_PEACE, 2, 0x585e, 0x002c, 0x00 },
{ SIMTYPE_SHIELD, 2, 0x585f, 0x0022, 0x00 },
{ SIMTYPE_ROCKET, 2, 0x5860, 0x0021, 0x00 },
{ SIMTYPE_KAZE, 2, 0x5861, 0x0035, 0x00 },
{ SIMTYPE_FIST, 2, 0x5862, 0x0037, 0x00 },
{ SIMTYPE_PREY, 2, 0x5863, 0x0017, 0x00 },
{ SIMTYPE_COWARD, 2, 0x5864, 0x0033, 0x00 },
{ SIMTYPE_JUDGE, 2, 0x5865, 0x0030, 0x00 },
{ SIMTYPE_FEUD, 2, 0x5866, 0x0034, 0x00 },
{ SIMTYPE_SPEED, 2, 0x5867, 0x0010, 0x00 },
{ SIMTYPE_TURTLE, 2, 0x5868, 0x000e, 0x00 },
{ SIMTYPE_VENGE, 2, 0x5869, 0x002e, 0x00 },
{ SIMTYPE_PEACE, 2, L_MISC(94), 0x002c, 0x00 },
{ SIMTYPE_SHIELD, 2, L_MISC(95), 0x0022, 0x00 },
{ SIMTYPE_ROCKET, 2, L_MISC(96), 0x0021, 0x00 },
{ SIMTYPE_KAZE, 2, L_MISC(97), 0x0035, 0x00 },
{ SIMTYPE_FIST, 2, L_MISC(98), 0x0037, 0x00 },
{ SIMTYPE_PREY, 2, L_MISC(99), 0x0017, 0x00 },
{ SIMTYPE_COWARD, 2, L_MISC(100), 0x0033, 0x00 },
{ SIMTYPE_JUDGE, 2, L_MISC(101), 0x0030, 0x00 },
{ SIMTYPE_FEUD, 2, L_MISC(102), 0x0034, 0x00 },
{ SIMTYPE_SPEED, 2, L_MISC(103), 0x0010, 0x00 },
{ SIMTYPE_TURTLE, 2, L_MISC(104), 0x000e, 0x00 },
{ SIMTYPE_VENGE, 2, L_MISC(105), 0x002e, 0x00 },
};
// 2d7dc
struct mpbody g_MpBodies[NUM_MPBODIES] = {
// global body ID, name, unk04, unk06
/*0x00*/ { BODY_DARK_COMBAT, 0x5610, 0x0004, 0x00 },
/*0x01*/ { BODY_DARK_TRENCH, 0x5611, 0x0004, 0x46 },
/*0x02*/ { BODY_DARK_FROCK, 0x5612, 0x000c, 0x41 },
/*0x03*/ { BODY_DARK_RIPPED, 0x5613, 0x000c, 0x41 },
/*0x04*/ { BODY_DARK_AF1, 0x5614, 0x0004, 0x3f },
/*0x05*/ { BODY_DARK_LEATHER, 0x549c, 0x0004, 0x37 },
/*0x06*/ { BODY_DARK_NEGOTIATOR, 0x549d, 0x0004, 0x34 },
/*0x07*/ { BODY_DARKWET, 0x5615, 0x002f, 0x45 },
/*0x08*/ { BODY_DARKAQUALUNG, 0x5616, 0x002f, 0x45 },
/*0x09*/ { BODY_DARKSNOW, 0x5617, 0x003c, 0x4a },
/*0x0a*/ { BODY_DARKLAB, 0x5618, 0x0004, 0x3a },
/*0x0b*/ { BODY_THEKING, 0x5619, 0x0005, 0x3d },
/*0x0c*/ { BODY_ELVIS1, 0x561a, 0x0005, 0x3d },
/*0x0d*/ { BODY_ELVISWAISTCOAT, 0x549e, 0x0005, 0x3d },
/*0x0e*/ { BODY_CARRINGTON, 0x561b, 0x0007, 0x00 },
/*0x0f*/ { BODY_CARREVENINGSUIT, 0x561c, 0x0007, 0x41 },
/*0x10*/ { BODY_MRBLONDE, 0x561d, 0x0008, 0x38 },
/*0x11*/ { BODY_CASSANDRA, 0x561e, 0x000e, 0x00 },
/*0x12*/ { BODY_TRENT, 0x561f, 0x0009, 0x35 },
/*0x13*/ { BODY_JONATHAN, 0x5620, 0x0028, 0x4c },
/*0x14*/ { BODY_CILABTECH, 0x5621, 0x03e8, 0x00 },
/*0x15*/ { BODY_CIFEMTECH, 0x5622, 0x03e8, 0x00 },
/*0x16*/ { BODY_CISOLDIER, 0x5623, 0x03e8, 0x00 },
/*0x17*/ { BODY_DDSHOCK, 0x5624, 0x000a, 0x00 },
/*0x18*/ { BODY_FEM_GUARD, 0x5625, 0x03e8, 0x32 },
/*0x19*/ { BODY_DD_SECGUARD, 0x5626, 0x03e8, 0x00 },
/*0x1a*/ { BODY_DD_GUARD, 0x5627, 0x03e8, 0x00 },
/*0x1b*/ { BODY_DD_SHOCK_INF, 0x5628, 0x03e8, 0x00 },
/*0x1c*/ { BODY_SECRETARY, 0x5629, 0x03e8, 0x00 },
/*0x1d*/ { BODY_OFFICEWORKER, 0x562a, 0x03e8, 0x33 },
/*0x1e*/ { BODY_OFFICEWORKER2, 0x562b, 0x03e8, 0x33 },
/*0x1f*/ { BODY_NEGOTIATOR, 0x562c, 0x03e8, 0x34 },
/*0x20*/ { BODY_DDSNIPER, 0x562d, 0x0030, 0x34 },
/*0x21*/ { BODY_G5_GUARD, 0x562e, 0x03e8, 0x37 },
/*0x22*/ { BODY_G5_SWAT_GUARD, 0x562f, 0x03e8, 0x37 },
/*0x23*/ { BODY_CIAGUY, 0x5630, 0x03e8, 0x39 },
/*0x24*/ { BODY_FBIGUY, 0x5631, 0x03e8, 0x39 },
/*0x25*/ { BODY_AREA51GUARD, 0x5632, 0x03e8, 0x3a },
/*0x26*/ { BODY_A51TROOPER, 0x5633, 0x03e8, 0x3a },
/*0x27*/ { BODY_A51AIRMAN, 0x5634, 0x03e8, 0x3a },
/*0x28*/ { BODY_OVERALL, 0x5635, 0x03e8, 0x3a },
/*0x29*/ { BODY_STRIPES, 0x5636, 0x03e8, 0x44 },
/*0x2a*/ { BODY_LABTECH, 0x5637, 0x03e8, 0x3b },
/*0x2b*/ { BODY_FEMLABTECH, 0x5638, 0x03e8, 0x3b },
/*0x2c*/ { BODY_DD_LABTECH, 0x5639, 0x03e8, 0x3b },
/*0x2d*/ { BODY_BIOTECH, 0x563a, 0x001d, 0x3c },
/*0x2e*/ { BODY_ALASKAN_GUARD, 0x563b, 0x03e8, 0x3e },
/*0x2f*/ { BODY_PILOTAF1, 0x563c, 0x03e8, 0x3f },
/*0x30*/ { BODY_STEWARD, 0x563d, 0x03e8, 0x3f },
/*0x31*/ { BODY_STEWARDESS, 0x563e, 0x03e8, 0x3f },
/*0x32*/ { BODY_STEWARDESS_COAT, 0x563f, 0x03e8, 0x3f },
/*0x33*/ { BODY_PRESIDENT, 0x5640, 0x003d, 0x41 },
/*0x34*/ { BODY_NSA_LACKEY, 0x5641, 0x03e8, 0x36 },
/*0x35*/ { BODY_PRES_SECURITY, 0x5642, 0x03e8, 0x43 },
/*0x36*/ { BODY_PRESIDENT_CLONE2, 0x5643, 0x003d, 0x42 },
/*0x37*/ { BODY_PELAGIC_GUARD, 0x5644, 0x03e8, 0x45 },
/*0x38*/ { BODY_MAIAN_SOLDIER, 0x5645, 0x0029, 0x3d },
/*0x39*/ { BODY_CONNERY, 0x5646, 0x03e8, 0x40 },
/*0x3a*/ { BODY_MOORE, 0x5646, 0x03e8, 0x40 },
/*0x3b*/ { BODY_DALTON, 0x5646, 0x03e8, 0x40 },
/*0x3c*/ { BODY_DJBOND, 0x5646, 0x03e8, 0x40 },
// global body ID, name, head, unk06
/*0x00*/ { BODY_DARK_COMBAT, L_OPTIONS(16), HEAD_DARK_COMBAT, 0x00 },
/*0x01*/ { BODY_DARK_TRENCH, L_OPTIONS(17), HEAD_DARK_COMBAT, 0x46 },
/*0x02*/ { BODY_DARK_FROCK, L_OPTIONS(18), HEAD_DARK_FROCK, 0x41 },
/*0x03*/ { BODY_DARK_RIPPED, L_OPTIONS(19), HEAD_DARK_FROCK, 0x41 },
/*0x04*/ { BODY_DARK_AF1, L_OPTIONS(20), HEAD_DARK_COMBAT, 0x3f },
/*0x05*/ { BODY_DARK_LEATHER, L_MPWEAPONS(156), HEAD_DARK_COMBAT, 0x37 },
/*0x06*/ { BODY_DARK_NEGOTIATOR, L_MPWEAPONS(157), HEAD_DARK_COMBAT, 0x34 },
/*0x07*/ { BODY_DARKWET, L_OPTIONS(21), HEAD_DARKAQUA, 0x45 },
/*0x08*/ { BODY_DARKAQUALUNG, L_OPTIONS(22), HEAD_DARKAQUA, 0x45 },
/*0x09*/ { BODY_DARKSNOW, L_OPTIONS(23), HEAD_DARK_SNOW, 0x4a },
/*0x0a*/ { BODY_DARKLAB, L_OPTIONS(24), HEAD_DARK_COMBAT, 0x3a },
/*0x0b*/ { BODY_THEKING, L_OPTIONS(25), HEAD_ELVIS, 0x3d },
/*0x0c*/ { BODY_ELVIS1, L_OPTIONS(26), HEAD_ELVIS, 0x3d },
/*0x0d*/ { BODY_ELVISWAISTCOAT, L_MPWEAPONS(158), HEAD_ELVIS, 0x3d },
/*0x0e*/ { BODY_CARRINGTON, L_OPTIONS(27), HEAD_CARRINGTON, 0x00 },
/*0x0f*/ { BODY_CARREVENINGSUIT, L_OPTIONS(28), HEAD_CARRINGTON, 0x41 },
/*0x10*/ { BODY_MRBLONDE, L_OPTIONS(29), HEAD_MRBLONDE, 0x38 },
/*0x11*/ { BODY_CASSANDRA, L_OPTIONS(30), HEAD_CASSANDRA, 0x00 },
/*0x12*/ { BODY_TRENT, L_OPTIONS(31), HEAD_TRENT, 0x35 },
/*0x13*/ { BODY_JONATHAN, L_OPTIONS(32), HEAD_JONATHAN, 0x4c },
/*0x14*/ { BODY_CILABTECH, L_OPTIONS(33), 1000, 0x00 },
/*0x15*/ { BODY_CIFEMTECH, L_OPTIONS(34), 1000, 0x00 },
/*0x16*/ { BODY_CISOLDIER, L_OPTIONS(35), 1000, 0x00 },
/*0x17*/ { BODY_DDSHOCK, L_OPTIONS(36), HEAD_DDSHOCK, 0x00 },
/*0x18*/ { BODY_FEM_GUARD, L_OPTIONS(37), 1000, 0x32 },
/*0x19*/ { BODY_DD_SECGUARD, L_OPTIONS(38), 1000, 0x00 },
/*0x1a*/ { BODY_DD_GUARD, L_OPTIONS(39), 1000, 0x00 },
/*0x1b*/ { BODY_DD_SHOCK_INF, L_OPTIONS(40), 1000, 0x00 },
/*0x1c*/ { BODY_SECRETARY, L_OPTIONS(41), 1000, 0x00 },
/*0x1d*/ { BODY_OFFICEWORKER, L_OPTIONS(42), 1000, 0x33 },
/*0x1e*/ { BODY_OFFICEWORKER2, L_OPTIONS(43), 1000, 0x33 },
/*0x1f*/ { BODY_NEGOTIATOR, L_OPTIONS(44), 1000, 0x34 },
/*0x20*/ { BODY_DDSNIPER, L_OPTIONS(45), HEAD_DDSNIPER, 0x34 },
/*0x21*/ { BODY_G5_GUARD, L_OPTIONS(46), 1000, 0x37 },
/*0x22*/ { BODY_G5_SWAT_GUARD, L_OPTIONS(47), 1000, 0x37 },
/*0x23*/ { BODY_CIAGUY, L_OPTIONS(48), 1000, 0x39 },
/*0x24*/ { BODY_FBIGUY, L_OPTIONS(49), 1000, 0x39 },
/*0x25*/ { BODY_AREA51GUARD, L_OPTIONS(50), 1000, 0x3a },
/*0x26*/ { BODY_A51TROOPER, L_OPTIONS(51), 1000, 0x3a },
/*0x27*/ { BODY_A51AIRMAN, L_OPTIONS(52), 1000, 0x3a },
/*0x28*/ { BODY_OVERALL, L_OPTIONS(53), 1000, 0x3a },
/*0x29*/ { BODY_STRIPES, L_OPTIONS(54), 1000, 0x44 },
/*0x2a*/ { BODY_LABTECH, L_OPTIONS(55), 1000, 0x3b },
/*0x2b*/ { BODY_FEMLABTECH, L_OPTIONS(56), 1000, 0x3b },
/*0x2c*/ { BODY_DD_LABTECH, L_OPTIONS(57), 1000, 0x3b },
/*0x2d*/ { BODY_BIOTECH, L_OPTIONS(58), HEAD_BIOTECH, 0x3c },
/*0x2e*/ { BODY_ALASKAN_GUARD, L_OPTIONS(59), 1000, 0x3e },
/*0x2f*/ { BODY_PILOTAF1, L_OPTIONS(60), 1000, 0x3f },
/*0x30*/ { BODY_STEWARD, L_OPTIONS(61), 1000, 0x3f },
/*0x31*/ { BODY_STEWARDESS, L_OPTIONS(62), 1000, 0x3f },
/*0x32*/ { BODY_STEWARDESS_COAT, L_OPTIONS(63), 1000, 0x3f },
/*0x33*/ { BODY_PRESIDENT, L_OPTIONS(64), HEAD_PRESIDENT, 0x41 },
/*0x34*/ { BODY_NSA_LACKEY, L_OPTIONS(65), 1000, 0x36 },
/*0x35*/ { BODY_PRES_SECURITY, L_OPTIONS(66), 1000, 0x43 },
/*0x36*/ { BODY_PRESIDENT_CLONE2, L_OPTIONS(67), HEAD_PRESIDENT, 0x42 },
/*0x37*/ { BODY_PELAGIC_GUARD, L_OPTIONS(68), 1000, 0x45 },
/*0x38*/ { BODY_MAIAN_SOLDIER, L_OPTIONS(69), HEAD_MAIAN_S, 0x3d },
/*0x39*/ { BODY_CONNERY, L_OPTIONS(70), 1000, 0x40 },
/*0x3a*/ { BODY_MOORE, L_OPTIONS(70), 1000, 0x40 },
/*0x3b*/ { BODY_DALTON, L_OPTIONS(70), 1000, 0x40 },
/*0x3c*/ { BODY_DJBOND, L_OPTIONS(70), 1000, 0x40 },
};
u32 var800879a4 = 0x00000011;
u32 var800879a8 = 0x00000018;
u32 var800879ac = 0x00000006;
u32 var800879b0 = 0x00000012;
u32 var800879b4 = 0x00000013;
u32 var800879b8 = 0x00000014;
u32 var800879bc = 0x00000016;
u32 var800879c0 = 0x0000001a;
u32 var800879c4 = 0x0000001b;
u32 var800879c8 = 0x0000001c;
u32 var800879cc = 0x00000037;
u32 var800879d0 = 0x0000003b;
u32 var800879d4 = 0x00000042;
u32 var800879d8 = 0x00000043;
u32 var800879dc = 0x00000048;
u32 var800879e0 = 0x00000054;
u32 var800879e4 = 0x0000000b;
u32 var800879e8 = 0x0000001e;
u32 var800879ec = 0x0000002a;
u32 var800879f0 = 0x00000044;
u32 var800879f4 = 0x00000049;
u32 var800879f8 = 0x0000004a;
u32 var800879fc = 0x0000004b;
u32 var80087a00 = 0x0000004c;
u32 var80087a04 = 0x0000004d;
u32 var80087a08 = 0x0000004e;
u32 var80087a0c = 0x0000004f;
u32 var80087a10 = 0x00000050;
u32 var80087a14 = 0x00000051;
u32 var80087a18 = 0x00000052;
u32 var80087a1c = 0x00000053;
u32 var80087a20 = 0x00000055;
u32 var80087a24 = 0x0000001f;
u32 var80087a28 = 0x00000022;
u32 var80087a2c = 0x00000023;
u32 var80087a30 = 0x00000025;
u32 var80087a34 = 0x00000026;
u32 var80087a38 = 0x00000027;
u32 var80087a3c = 0x0000002e;
u32 var80087a40 = 0x00000041;
u32 var80087a44 = 0x0000003f;
u32 var80087a48 = 0x0000002d;
u32 var80087a4c = 0x00000040;
u32 var80087a50 = 0x00000036;
u32 var80087a54 = 0x00000045;
u32 var80087a58 = 0x00000046;
u32 var80087a5c = 0x00000047;
u32 var80087a60 = 0x00000020;
u32 var80087a64 = 0x00000021;
u32 var80087a68 = 0x00000024;
u32 var80087a6c = 0x0000002c;
u32 g_MpMaleHeads[] = {
HEAD_JON,
HEAD_BEAU1,
HEAD_ROSS,
HEAD_MARK2,
HEAD_CHRIST,
HEAD_RUSS,
HEAD_DARLING,
HEAD_BRIAN,
HEAD_JAMIE,
HEAD_DUNCAN2,
HEAD_KEITH,
HEAD_STEVEM,
HEAD_GRANT,
HEAD_PENNY,
HEAD_DAVEC,
HEAD_JONES,
HEAD_GRAHAM,
HEAD_NEIL2,
HEAD_SHAUN,
HEAD_ROBIN,
HEAD_COOK,
HEAD_PRYCE,
HEAD_SILKE,
HEAD_SMITH,
HEAD_GARETH,
HEAD_MURCHIE,
HEAD_WONG,
HEAD_CARTER,
HEAD_TINTIN,
HEAD_MUNTON,
HEAD_STAMPER,
HEAD_PHELPS,
HEAD_EDMCG,
HEAD_MATT_C,
HEAD_PEER_S,
HEAD_ANDY_R,
HEAD_BEN_R,
HEAD_STEVE_K,
HEAD_SANCHEZ,
HEAD_TIM,
HEAD_KEN,
HEAD_SCOTT_H,
HEAD_JOEL,
HEAD_MOTO,
};
u32 g_MpFemaleHeads[] = {
HEAD_ALEX,
HEAD_JULIANNE,
HEAD_LAURA,
HEAD_ANKA,
HEAD_LESLIE_S,
HEAD_EILEEN_T,
HEAD_EILEEN_H,
};
// 2da90
struct mptrack g_MpTracks[NUM_MPTRACKS] = {

View File

@ -466,7 +466,7 @@ u32 bodyGetHead(u32 bodynum)
{
u32 head;
if (g_Bodies[bodynum].headbank) {
if (g_Bodies[bodynum].ismale) {
head = g_HeadsA[g_HeadsAIndex++];
if (g_HeadsAIndex == g_MaxHeadsPerBank) {

View File

@ -1041,7 +1041,7 @@ s32 menuhandlerMpCharacterBody(u32 operation, struct menu_item *item, struct num
case MENUOP_SET:
if (g_MpPlayers[g_MpPlayerNum].base.headnum < mpGetNumHeads()) {
if (!value->text) {
g_MpPlayers[g_MpPlayerNum].base.headnum = func0f18bc9c(value->num);
g_MpPlayers[g_MpPlayerNum].base.headnum = mpBodyGetMpHeadIndex(value->num);
}
}
g_MpPlayers[g_MpPlayerNum].base.bodynum = value->num;

View File

@ -3174,7 +3174,7 @@ glabel var7f1b9978
/* f1a5f6c: 0fc62ef6 */ jal mpGetBodyIndexByBodyId
/* f1a5f70: afa20044 */ sw $v0,0x44($sp)
/* f1a5f74: afa20040 */ sw $v0,0x40($sp)
/* f1a5f78: 0fc62f27 */ jal func0f18bc9c
/* f1a5f78: 0fc62f27 */ jal mpBodyGetMpHeadIndex
/* f1a5f7c: 00402025 */ or $a0,$v0,$zero
/* f1a5f80: 8fa30048 */ lw $v1,0x48($sp)
/* f1a5f84: 24010064 */ addiu $at,$zero,0x64

View File

@ -776,7 +776,7 @@ glabel func0f18800c
.L0f1880a0:
/* f1880a0: a20a0010 */ sb $t2,0x10($s0)
.L0f1880a4:
/* f1880a4: 0fc62f27 */ jal func0f18bc9c
/* f1880a4: 0fc62f27 */ jal mpBodyGetMpHeadIndex
/* f1880a8: 92040010 */ lbu $a0,0x10($s0)
/* f1880ac: 240b000c */ addiu $t3,$zero,0xc
/* f1880b0: a202000f */ sb $v0,0xf($s0)
@ -5064,74 +5064,37 @@ u8 mpGetBodyUnk06(u8 bodynum)
return g_MpBodies[bodynum].unk06;
}
s32 mpBodyGetMpHeadIndex(s32 bodynum)
{
s32 headnum;
s32 index = 0;
s32 i;
if (bodynum >= HEAD_VD) {
bodynum = 0;
}
headnum = g_MpBodies[bodynum].headid;
if (headnum == 1000) {
if (g_Bodies[g_MpBodies[bodynum].bodyid].ismale) {
headnum = g_MpMaleHeads[random() % ARRAYCOUNT(g_MpMaleHeads)];
} else {
headnum = g_MpFemaleHeads[random() % ARRAYCOUNT(g_MpFemaleHeads)];
}
}
for (i = 0; i != ARRAYCOUNT(g_MpHeads); i++) {
if (g_MpHeads[i].headid == headnum) {
index = i;
}
}
return index;
}
GLOBAL_ASM(
glabel func0f18bc9c
/* f18bc9c: 27bdffe0 */ addiu $sp,$sp,-32
/* f18bca0: 2881003e */ slti $at,$a0,0x3e
/* f18bca4: afbf0014 */ sw $ra,0x14($sp)
/* f18bca8: 14200002 */ bnez $at,.L0f18bcb4
/* f18bcac: 00003025 */ or $a2,$zero,$zero
/* f18bcb0: 00002025 */ or $a0,$zero,$zero
.L0f18bcb4:
/* f18bcb4: 3c0f8008 */ lui $t7,%hi(g_MpBodies)
/* f18bcb8: 25ef77bc */ addiu $t7,$t7,%lo(g_MpBodies)
/* f18bcbc: 000470c0 */ sll $t6,$a0,0x3
/* f18bcc0: 01cf1021 */ addu $v0,$t6,$t7
/* f18bcc4: 84450004 */ lh $a1,0x4($v0)
/* f18bcc8: 240103e8 */ addiu $at,$zero,0x3e8
/* f18bccc: 14a10020 */ bne $a1,$at,.L0f18bd50
/* f18bcd0: 00000000 */ sll $zero,$zero,0x0
/* f18bcd4: 84580000 */ lh $t8,0x0($v0)
/* f18bcd8: 3c088008 */ lui $t0,%hi(g_Bodies)
/* f18bcdc: 0018c880 */ sll $t9,$t8,0x2
/* f18bce0: 0338c821 */ addu $t9,$t9,$t8
/* f18bce4: 0019c880 */ sll $t9,$t9,0x2
/* f18bce8: 01194021 */ addu $t0,$t0,$t9
/* f18bcec: 8d08cf04 */ lw $t0,%lo(g_Bodies)($t0)
/* f18bcf0: 00084fc2 */ srl $t1,$t0,0x1f
/* f18bcf4: 1120000c */ beqz $t1,.L0f18bd28
/* f18bcf8: 00000000 */ sll $zero,$zero,0x0
/* f18bcfc: 0c004b70 */ jal random
/* f18bd00: afa60018 */ sw $a2,0x18($sp)
/* f18bd04: 2401002c */ addiu $at,$zero,0x2c
/* f18bd08: 0041001b */ divu $zero,$v0,$at
/* f18bd0c: 00005010 */ mfhi $t2
/* f18bd10: 000a5880 */ sll $t3,$t2,0x2
/* f18bd14: 3c058008 */ lui $a1,%hi(var800879a4)
/* f18bd18: 00ab2821 */ addu $a1,$a1,$t3
/* f18bd1c: 8ca579a4 */ lw $a1,%lo(var800879a4)($a1)
/* f18bd20: 1000000b */ beqz $zero,.L0f18bd50
/* f18bd24: 8fa60018 */ lw $a2,0x18($sp)
.L0f18bd28:
/* f18bd28: 0c004b70 */ jal random
/* f18bd2c: afa60018 */ sw $a2,0x18($sp)
/* f18bd30: 24010007 */ addiu $at,$zero,0x7
/* f18bd34: 0041001b */ divu $zero,$v0,$at
/* f18bd38: 00006010 */ mfhi $t4
/* f18bd3c: 000c6880 */ sll $t5,$t4,0x2
/* f18bd40: 3c058008 */ lui $a1,%hi(var80087a54)
/* f18bd44: 00ad2821 */ addu $a1,$a1,$t5
/* f18bd48: 8ca57a54 */ lw $a1,%lo(var80087a54)($a1)
/* f18bd4c: 8fa60018 */ lw $a2,0x18($sp)
.L0f18bd50:
/* f18bd50: 3c038008 */ lui $v1,%hi(g_MpHeads)
/* f18bd54: 2463752c */ addiu $v1,$v1,%lo(g_MpHeads)
/* f18bd58: 00001025 */ or $v0,$zero,$zero
/* f18bd5c: 2404004b */ addiu $a0,$zero,0x4b
.L0f18bd60:
/* f18bd60: 846e0000 */ lh $t6,0x0($v1)
/* f18bd64: 54ae0003 */ bnel $a1,$t6,.L0f18bd74
/* f18bd68: 24420001 */ addiu $v0,$v0,0x1
/* f18bd6c: 00403025 */ or $a2,$v0,$zero
/* f18bd70: 24420001 */ addiu $v0,$v0,0x1
.L0f18bd74:
/* f18bd74: 1444fffa */ bne $v0,$a0,.L0f18bd60
/* f18bd78: 24630004 */ addiu $v1,$v1,0x4
/* f18bd7c: 8fbf0014 */ lw $ra,0x14($sp)
/* f18bd80: 27bd0020 */ addiu $sp,$sp,0x20
/* f18bd84: 00c01025 */ or $v0,$a2,$zero
/* f18bd88: 03e00008 */ jr $ra
/* f18bd8c: 00000000 */ sll $zero,$zero,0x0
glabel func0f18bd90
/* f18bd90: 27bdffc8 */ addiu $sp,$sp,-56
/* f18bd94: afb50028 */ sw $s5,0x28($sp)
/* f18bd98: afb2001c */ sw $s2,0x1c($sp)

View File

@ -7,6 +7,7 @@
#define true 1
#define ABS(val) (val > 0 ? val : -val)
#define ARRAYCOUNT(a) (sizeof(a) / sizeof(a[0]))
#define CHRRACE(chr) (chr ? chr->race : RACE_HUMAN)
#define FRAMEDURATION (1 / 60.0f)
#define PLAYERCOUNT() ((g_Vars.players[0] ? 1 : 0) + (g_Vars.players[1] ? 1 : 0) + (g_Vars.players[2] ? 1 : 0) + (g_Vars.players[3] ? 1 : 0))

View File

@ -303,11 +303,13 @@ extern u32 var800874c8;
extern u32 var800874cc;
extern u32 var800874f0;
extern struct mphead g_MpBeauHeads[NUM_MPBEAUHEADS];
extern struct mphead g_MpHeads[NUM_MPHEADS];
extern struct mphead g_MpHeads[75];
extern u32 table_0x2d678[];
extern struct mpsimulant g_MpGeneralSimulants[];
extern struct mpsimulant mpspecialsimulants[];
extern struct mpbody g_MpBodies[NUM_MPBODIES];
extern u32 g_MpMaleHeads[44];
extern u32 g_MpFemaleHeads[7];
extern struct mptrack g_MpTracks[NUM_MPTRACKS];
extern struct mppreset g_MpPresets[NUM_MPPRESETS];
extern u32 g_TeamColours[MAX_TEAMS];

View File

@ -55,7 +55,7 @@ s32 mpGetBodyId(u8 bodynum);
s32 mpGetBodyIndexByBodyId(u16 bodyid);
char *mpGetBodyName(u8 bodynum);
u8 mpGetBodyUnk06(u8 bodynum);
s32 func0f18bc9c(s32 arg0);
s32 mpBodyGetMpHeadIndex(s32 bodynum);
u32 func0f18bee8(void);
s32 mpSetLock(s32 arg0, s32 arg1);
u32 mpGetLockType(void);

View File

@ -3034,7 +3034,7 @@ struct cheat {
};
struct body {
u16 headbank : 1;
u16 ismale : 1;
u16 flags_01 : 15;
u16 bodyfileid;
f32 unk04;
@ -3090,7 +3090,7 @@ struct mpsimulant {
struct mpbody {
s16 bodyid;
s16 name;
u16 unk04;
s16 headid;
u8 unk06;
};