diff --git a/src/game/data/data_020df0.c b/src/game/data/data_020df0.c index adc754e0b..2ab719f8c 100644 --- a/src/game/data/data_020df0.c +++ b/src/game/data/data_020df0.c @@ -12858,18 +12858,18 @@ u32 var8008889c = 0x00000001; u32 var800888a0 = 0x00000000; // 2e8c4 -u32 character_bios[] = { +struct chrbio g_ChrBios[10] = { // name, race, age, profile - /*0x00*/ 0x58db, 0x58dc, 0x58dd, 0x58de, - /*0x01*/ 0x58df, 0x58e0, 0x58e1, 0x58e2, - /*0x02*/ 0x58e3, 0x58e4, 0x58e5, 0x58e6, - /*0x03*/ 0x58e7, 0x58e8, 0x58e9, 0x58ea, - /*0x04*/ 0x58eb, 0x58ec, 0x58ed, 0x58ee, - /*0x05*/ 0x58ef, 0x58f0, 0x58f1, 0x58f2, - /*0x06*/ 0x58f3, 0x58f4, 0x58f5, 0x58f6, - /*0x07*/ 0x58f7, 0x58f8, 0x58f9, 0x58fa, - /*0x08*/ 0x58fb, 0x58fc, 0x58fd, 0x58fe, - /*0x09*/ 0x58ff, 0x5900, 0x5901, 0x5902, + /*0x00*/ { 0x58db, 0x58dc, 0x58dd, 0x58de }, // Joanna Dark + /*0x01*/ { 0x58df, 0x58e0, 0x58e1, 0x58e2 }, // Jonathan + /*0x02*/ { 0x58e3, 0x58e4, 0x58e5, 0x58e6 }, // Daniel Carrington + /*0x03*/ { 0x58e7, 0x58e8, 0x58e9, 0x58ea }, // Cassandra De Vries + /*0x04*/ { 0x58eb, 0x58ec, 0x58ed, 0x58ee }, // Trent Easton + /*0x05*/ { 0x58ef, 0x58f0, 0x58f1, 0x58f2 }, // Dr. Caroll + /*0x06*/ { 0x58f3, 0x58f4, 0x58f5, 0x58f6 }, // Elvis + /*0x07*/ { 0x58f7, 0x58f8, 0x58f9, 0x58fa }, // Mr. Blonde + /*0x08*/ { 0x58fb, 0x58fc, 0x58fd, 0x58fe }, // Mr. Blonde (repeat) + /*0x09*/ { 0x58ff, 0x5900, 0x5901, 0x5902 }, // The U.S. President }; // 2e964 diff --git a/src/game/game_19c990.c b/src/game/game_19c990.c index 2357f8ad3..c8b88ba14 100644 --- a/src/game/game_19c990.c +++ b/src/game/game_19c990.c @@ -308,89 +308,6 @@ const u32 var7f1b95cc[] = {0x7f1a1090}; const u32 var7f1b95d0[] = {0x7f1a1090}; const u32 var7f1b95d4[] = {0x7f1a1090}; const u32 var7f1b95d8[] = {0x7f1a1060}; -const u32 var7f1b95dc[] = {0x7f1a1110}; -const u32 var7f1b95e0[] = {0x7f1a1170}; -const u32 var7f1b95e4[] = {0x7f1a1170}; -const u32 var7f1b95e8[] = {0x7f1a1170}; -const u32 var7f1b95ec[] = {0x7f1a1120}; -const u32 var7f1b95f0[] = {0x7f1a1148}; -const u32 var7f1b95f4[] = {0x7f1a1170}; -const u32 var7f1b95f8[] = {0x7f1a1130}; -const u32 var7f1b95fc[] = {0x7f1a1170}; -const u32 var7f1b9600[] = {0x7f1a1170}; -const u32 var7f1b9604[] = {0x7f1a1170}; -const u32 var7f1b9608[] = {0x7f1a1170}; -const u32 var7f1b960c[] = {0x7f1a1170}; -const u32 var7f1b9610[] = {0x7f1a1170}; -const u32 var7f1b9614[] = {0x7f1a1170}; -const u32 var7f1b9618[] = {0x7f1a1170}; -const u32 var7f1b961c[] = {0x7f1a1128}; -const u32 var7f1b9620[] = {0x7f1a1140}; -const u32 var7f1b9624[] = {0x7f1a1170}; -const u32 var7f1b9628[] = {0x7f1a1170}; -const u32 var7f1b962c[] = {0x7f1a1170}; -const u32 var7f1b9630[] = {0x7f1a1138}; -const u32 var7f1b9634[] = {0x7f1a1170}; -const u32 var7f1b9638[] = {0x7f1a1170}; -const u32 var7f1b963c[] = {0x7f1a1170}; -const u32 var7f1b9640[] = {0x7f1a1170}; -const u32 var7f1b9644[] = {0x7f1a1170}; -const u32 var7f1b9648[] = {0x7f1a1170}; -const u32 var7f1b964c[] = {0x7f1a1170}; -const u32 var7f1b9650[] = {0x7f1a1170}; -const u32 var7f1b9654[] = {0x7f1a1170}; -const u32 var7f1b9658[] = {0x7f1a1170}; -const u32 var7f1b965c[] = {0x7f1a1170}; -const u32 var7f1b9660[] = {0x7f1a1170}; -const u32 var7f1b9664[] = {0x7f1a1170}; -const u32 var7f1b9668[] = {0x7f1a1168}; -const u32 var7f1b966c[] = {0x7f1a1170}; -const u32 var7f1b9670[] = {0x7f1a1170}; -const u32 var7f1b9674[] = {0x7f1a1170}; -const u32 var7f1b9678[] = {0x7f1a1170}; -const u32 var7f1b967c[] = {0x7f1a1170}; -const u32 var7f1b9680[] = {0x7f1a1170}; -const u32 var7f1b9684[] = {0x7f1a1170}; -const u32 var7f1b9688[] = {0x7f1a1170}; -const u32 var7f1b968c[] = {0x7f1a1170}; -const u32 var7f1b9690[] = {0x7f1a1170}; -const u32 var7f1b9694[] = {0x7f1a1170}; -const u32 var7f1b9698[] = {0x7f1a1170}; -const u32 var7f1b969c[] = {0x7f1a1170}; -const u32 var7f1b96a0[] = {0x7f1a1170}; -const u32 var7f1b96a4[] = {0x7f1a1170}; -const u32 var7f1b96a8[] = {0x7f1a1170}; -const u32 var7f1b96ac[] = {0x7f1a1170}; -const u32 var7f1b96b0[] = {0x7f1a1170}; -const u32 var7f1b96b4[] = {0x7f1a1170}; -const u32 var7f1b96b8[] = {0x7f1a1170}; -const u32 var7f1b96bc[] = {0x7f1a1170}; -const u32 var7f1b96c0[] = {0x7f1a1170}; -const u32 var7f1b96c4[] = {0x7f1a1170}; -const u32 var7f1b96c8[] = {0x7f1a1118}; -const u32 var7f1b96cc[] = {0x7f1a1524}; -const u32 var7f1b96d0[] = {0x7f1a152c}; -const u32 var7f1b96d4[] = {0x7f1a1534}; -const u32 var7f1b96d8[] = {0x7f1a153c}; -const u32 var7f1b96dc[] = {0x7f1a1544}; -const u32 var7f1b96e0[] = {0x7f1a154c}; -const u32 var7f1b96e4[] = {0x7f1a1554}; -const u32 var7f1b96e8[] = {0x7f1a155c}; -const u32 var7f1b96ec[] = {0x7f1a1564}; -const u32 var7f1b96f0[] = {0x7f1a156c}; -const u32 var7f1b96f4[] = {0x7f1a1574}; -const u32 var7f1b96f8[] = {0x7f1a157c}; -const u32 var7f1b96fc[] = {0x7f1a1584}; -const u32 var7f1b9700[] = {0x7f1a158c}; -const u32 var7f1b9704[] = {0x7f1a1594}; -const u32 var7f1b9708[] = {0x7f1a159c}; -const u32 var7f1b970c[] = {0x7f1a15a4}; -const u32 var7f1b9710[] = {0x7f1a15ac}; -const u32 var7f1b9714[] = {0x7f1a15b4}; -const u32 var7f1b9718[] = {0x7f1a15bc}; -const u32 var7f1b971c[] = {0x7f1a15c4}; -const u32 var7f1b9720[] = {0x7f1a15cc}; -const u32 var7f1b9724[] = {0x7f1a15d4}; bool ciIsTourDone(void) { @@ -5460,69 +5377,36 @@ glabel func0f1a0fec /* f1a10a0: 00000000 */ sll $zero,$zero,0x0 ); -GLOBAL_ASM( -glabel func0f1a10a4 -/* f1a10a4: 27bdff48 */ addiu $sp,$sp,-184 -/* f1a10a8: 3c0e8009 */ lui $t6,%hi(character_bios) -/* f1a10ac: 27a30018 */ addiu $v1,$sp,0x18 -/* f1a10b0: 25ce88a4 */ addiu $t6,$t6,%lo(character_bios) -/* f1a10b4: afbf0014 */ sw $ra,0x14($sp) -/* f1a10b8: 25d9009c */ addiu $t9,$t6,0x9c -/* f1a10bc: 00604025 */ or $t0,$v1,$zero -.L0f1a10c0: -/* f1a10c0: 8dc10000 */ lw $at,0x0($t6) -/* f1a10c4: 25ce000c */ addiu $t6,$t6,0xc -/* f1a10c8: 2508000c */ addiu $t0,$t0,0xc -/* f1a10cc: ad01fff4 */ sw $at,-0xc($t0) -/* f1a10d0: 8dc1fff8 */ lw $at,-0x8($t6) -/* f1a10d4: ad01fff8 */ sw $at,-0x8($t0) -/* f1a10d8: 8dc1fffc */ lw $at,-0x4($t6) -/* f1a10dc: 15d9fff8 */ bne $t6,$t9,.L0f1a10c0 -/* f1a10e0: ad01fffc */ sw $at,-0x4($t0) -/* f1a10e4: 8dc10000 */ lw $at,0x0($t6) -/* f1a10e8: 2489ffaa */ addiu $t1,$a0,-86 -/* f1a10ec: ad010000 */ sw $at,0x0($t0) -/* f1a10f0: 2d21003c */ sltiu $at,$t1,0x3c -/* f1a10f4: 1020001e */ beqz $at,.L0f1a1170 -/* f1a10f8: 00094880 */ sll $t1,$t1,0x2 -/* f1a10fc: 3c017f1c */ lui $at,%hi(var7f1b95dc) -/* f1a1100: 00290821 */ addu $at,$at,$t1 -/* f1a1104: 8c2995dc */ lw $t1,%lo(var7f1b95dc)($at) -/* f1a1108: 01200008 */ jr $t1 -/* f1a110c: 00000000 */ sll $zero,$zero,0x0 -/* f1a1110: 10000018 */ beqz $zero,.L0f1a1174 -/* f1a1114: 00601025 */ or $v0,$v1,$zero -/* f1a1118: 10000016 */ beqz $zero,.L0f1a1174 -/* f1a111c: 27a20028 */ addiu $v0,$sp,0x28 -/* f1a1120: 10000014 */ beqz $zero,.L0f1a1174 -/* f1a1124: 27a20038 */ addiu $v0,$sp,0x38 -/* f1a1128: 10000012 */ beqz $zero,.L0f1a1174 -/* f1a112c: 27a20048 */ addiu $v0,$sp,0x48 -/* f1a1130: 10000010 */ beqz $zero,.L0f1a1174 -/* f1a1134: 27a20058 */ addiu $v0,$sp,0x58 -/* f1a1138: 1000000e */ beqz $zero,.L0f1a1174 -/* f1a113c: 27a20068 */ addiu $v0,$sp,0x68 -/* f1a1140: 1000000c */ beqz $zero,.L0f1a1174 -/* f1a1144: 27a20078 */ addiu $v0,$sp,0x78 -/* f1a1148: 0fc672e0 */ jal stageIsComplete -/* f1a114c: 2404000b */ addiu $a0,$zero,0xb -/* f1a1150: 10400003 */ beqz $v0,.L0f1a1160 -/* f1a1154: 00000000 */ sll $zero,$zero,0x0 -/* f1a1158: 10000006 */ beqz $zero,.L0f1a1174 -/* f1a115c: 27a20098 */ addiu $v0,$sp,0x98 -.L0f1a1160: -/* f1a1160: 10000004 */ beqz $zero,.L0f1a1174 -/* f1a1164: 27a20088 */ addiu $v0,$sp,0x88 -/* f1a1168: 10000002 */ beqz $zero,.L0f1a1174 -/* f1a116c: 27a200a8 */ addiu $v0,$sp,0xa8 -.L0f1a1170: -/* f1a1170: 00001025 */ or $v0,$zero,$zero -.L0f1a1174: -/* f1a1174: 8fbf0014 */ lw $ra,0x14($sp) -/* f1a1178: 27bd00b8 */ addiu $sp,$sp,0xb8 -/* f1a117c: 03e00008 */ jr $ra -/* f1a1180: 00000000 */ sll $zero,$zero,0x0 -); +struct chrbio *ciGetChrBioByBodynum(u32 bodynum) +{ + struct chrbio bios[10] = g_ChrBios; + + switch (bodynum) { + case BODY_DARK_COMBAT: + return &bios[0]; + case BODY_JONATHAN: + return &bios[1]; + case BODY_CARRINGTON: + return &bios[2]; + case BODY_CASSANDRA: + return &bios[3]; + case BODY_TRENT: + return &bios[4]; + case BODY_DRCAROLL: + return &bios[5]; + case BODY_THEKING: + return &bios[6]; + case BODY_MRBLONDE: + if (stageIsComplete(SOLOSTAGEINDEX_CRASHSITE)) { + return &bios[8]; + } + return &bios[7]; + case BODY_PRESIDENT: + return &bios[9]; + } + + return NULL; +} GLOBAL_ASM( glabel func0f1a1184 @@ -5531,7 +5415,7 @@ glabel func0f1a1184 /* f1a118c: 3c048009 */ lui $a0,%hi(var800888a0) /* f1a1190: 0fc68484 */ jal func0f1a1210 /* f1a1194: 908488a0 */ lbu $a0,%lo(var800888a0)($a0) -/* f1a1198: 0fc68429 */ jal func0f1a10a4 +/* f1a1198: 0fc68429 */ jal ciGetChrBioByBodynum /* f1a119c: 00402025 */ or $a0,$v0,$zero /* f1a11a0: 0fc5b9f1 */ jal langGet /* f1a11a4: 8c44000c */ lw $a0,0xc($v0) @@ -5788,6 +5672,54 @@ glabel func0f1a14a8 GLOBAL_ASM( glabel func0f1a14b4 +.late_rodata +glabel var7f1b96cc +.word 0x7f1a1524 +glabel var7f1b96d0 +.word 0x7f1a152c +glabel var7f1b96d4 +.word 0x7f1a1534 +glabel var7f1b96d8 +.word 0x7f1a153c +glabel var7f1b96dc +.word 0x7f1a1544 +glabel var7f1b96e0 +.word 0x7f1a154c +glabel var7f1b96e4 +.word 0x7f1a1554 +glabel var7f1b96e8 +.word 0x7f1a155c +glabel var7f1b96ec +.word 0x7f1a1564 +glabel var7f1b96f0 +.word 0x7f1a156c +glabel var7f1b96f4 +.word 0x7f1a1574 +glabel var7f1b96f8 +.word 0x7f1a157c +glabel var7f1b96fc +.word 0x7f1a1584 +glabel var7f1b9700 +.word 0x7f1a158c +glabel var7f1b9704 +.word 0x7f1a1594 +glabel var7f1b9708 +.word 0x7f1a159c +glabel var7f1b970c +.word 0x7f1a15a4 +glabel var7f1b9710 +.word 0x7f1a15ac +glabel var7f1b9714 +.word 0x7f1a15b4 +glabel var7f1b9718 +.word 0x7f1a15bc +glabel var7f1b971c +.word 0x7f1a15c4 +glabel var7f1b9720 +.word 0x7f1a15cc +glabel var7f1b9724 +.word 0x7f1a15d4 +.text /* f1a14b4: 27bdfe90 */ addiu $sp,$sp,-368 /* f1a14b8: 3c0e8009 */ lui $t6,%hi(place_bios) /* f1a14bc: 27a30000 */ addiu $v1,$sp,0x0 diff --git a/src/game/game_1a3340.c b/src/game/game_1a3340.c index e3e78ee8f..443187c25 100644 --- a/src/game/game_1a3340.c +++ b/src/game/game_1a3340.c @@ -3081,7 +3081,7 @@ glabel var7f1b9960 /* f1a5e58: 00000000 */ sll $zero,$zero,0x0 /* f1a5e5c: 0fc68484 */ jal func0f1a1210 /* f1a5e60: 00402025 */ or $a0,$v0,$zero -/* f1a5e64: 0fc68429 */ jal func0f1a10a4 +/* f1a5e64: 0fc68429 */ jal ciGetChrBioByBodynum /* f1a5e68: 00402025 */ or $a0,$v0,$zero /* f1a5e6c: 0fc5b9f1 */ jal langGet /* f1a5e70: 8c440000 */ lw $a0,0x0($v0) @@ -3393,7 +3393,7 @@ glabel func0f1a628c /* f1a6298: 3c048009 */ lui $a0,%hi(var800888a0) /* f1a629c: 0fc68484 */ jal func0f1a1210 /* f1a62a0: 908488a0 */ lbu $a0,%lo(var800888a0)($a0) -/* f1a62a4: 0fc68429 */ jal func0f1a10a4 +/* f1a62a4: 0fc68429 */ jal ciGetChrBioByBodynum /* f1a62a8: 00402025 */ or $a0,$v0,$zero /* f1a62ac: 0fc5b9f1 */ jal langGet /* f1a62b0: 8c440000 */ lw $a0,0x0($v0) @@ -3418,7 +3418,7 @@ glabel func0f1a62e0 /* f1a62ec: 3c048009 */ lui $a0,%hi(var800888a0) /* f1a62f0: 0fc68484 */ jal func0f1a1210 /* f1a62f4: 908488a0 */ lbu $a0,%lo(var800888a0)($a0) -/* f1a62f8: 0fc68429 */ jal func0f1a10a4 +/* f1a62f8: 0fc68429 */ jal ciGetChrBioByBodynum /* f1a62fc: 00402025 */ or $a0,$v0,$zero /* f1a6300: 0fc5b9f1 */ jal langGet /* f1a6304: 8c440008 */ lw $a0,0x8($v0) @@ -3443,7 +3443,7 @@ glabel func0f1a6334 /* f1a6340: 3c048009 */ lui $a0,%hi(var800888a0) /* f1a6344: 0fc68484 */ jal func0f1a1210 /* f1a6348: 908488a0 */ lbu $a0,%lo(var800888a0)($a0) -/* f1a634c: 0fc68429 */ jal func0f1a10a4 +/* f1a634c: 0fc68429 */ jal ciGetChrBioByBodynum /* f1a6350: 00402025 */ or $a0,$v0,$zero /* f1a6354: 0fc5b9f1 */ jal langGet /* f1a6358: 8c440004 */ lw $a0,0x4($v0) diff --git a/src/include/game/data/data_020df0.h b/src/include/game/data/data_020df0.h index 6f0439f83..4e122e091 100644 --- a/src/include/game/data/data_020df0.h +++ b/src/include/game/data/data_020df0.h @@ -329,7 +329,7 @@ extern u32 var8008880c; extern u32 var80088810; extern u32 var80088854; extern u32 var800888a0; -extern u32 character_bios[]; +extern struct chrbio g_ChrBios[10]; extern u32 misc_bios[]; extern u32 var80088964; extern u32 place_bios[]; diff --git a/src/include/game/game_19c990.h b/src/include/game/game_19c990.h index 8f0201aeb..18f796ec2 100644 --- a/src/include/game/game_19c990.h +++ b/src/include/game/game_19c990.h @@ -58,7 +58,7 @@ u32 func0f1a0c30(void); u32 func0f1a0cc0(void); u32 func0f1a0fc8(void); u32 func0f1a0fec(void); -u32 func0f1a10a4(void); +struct chrbio *ciGetChrBioByBodynum(u32 bodynum); u32 func0f1a1184(void); u32 func0f1a11b8(void); u32 func0f1a1210(void); diff --git a/src/include/types.h b/src/include/types.h index 3346e5556..5d59b95e0 100644 --- a/src/include/types.h +++ b/src/include/types.h @@ -5243,4 +5243,11 @@ struct var800705c0 { u32 unk28; }; +struct chrbio { + u32 name; + u32 race; + u32 age; + u32 profile; +}; + #endif