diff --git a/src/game/chr/chr.c b/src/game/chr/chr.c index 0043d5920..0dbee9a42 100644 --- a/src/game/chr/chr.c +++ b/src/game/chr/chr.c @@ -55,191 +55,65 @@ const char var7f1a8690[] = "chr/chr.c"; const char var7f1a869c[] = "selectanimnum"; -GLOBAL_ASM( -glabel func0f01e250 -/* f01e250: 27bdffd0 */ addiu $sp,$sp,-48 -/* f01e254: afb40024 */ sw $s4,0x24($sp) -/* f01e258: 3c14800a */ lui $s4,%hi(g_Vars) -/* f01e25c: 26949fc0 */ addiu $s4,$s4,%lo(g_Vars) -/* f01e260: 8e8e006c */ lw $t6,0x6c($s4) -/* f01e264: afbf002c */ sw $ra,0x2c($sp) -/* f01e268: afb50028 */ sw $s5,0x28($sp) -/* f01e26c: afb30020 */ sw $s3,0x20($sp) -/* f01e270: afb2001c */ sw $s2,0x1c($sp) -/* f01e274: afb10018 */ sw $s1,0x18($sp) -/* f01e278: afb00014 */ sw $s0,0x14($sp) -/* f01e27c: 11c00003 */ beqz $t6,.L0f01e28c -/* f01e280: 00003825 */ or $a3,$zero,$zero -/* f01e284: 10000002 */ b .L0f01e290 -/* f01e288: 24060001 */ addiu $a2,$zero,0x1 -.L0f01e28c: -/* f01e28c: 00003025 */ or $a2,$zero,$zero -.L0f01e290: -/* f01e290: 8e8f0068 */ lw $t7,0x68($s4) -/* f01e294: 00002825 */ or $a1,$zero,$zero -/* f01e298: 00002025 */ or $a0,$zero,$zero -/* f01e29c: 11e00003 */ beqz $t7,.L0f01e2ac -/* f01e2a0: 00000000 */ nop -/* f01e2a4: 10000001 */ b .L0f01e2ac -/* f01e2a8: 24050001 */ addiu $a1,$zero,0x1 -.L0f01e2ac: -/* f01e2ac: 8e980064 */ lw $t8,0x64($s4) -/* f01e2b0: 00001025 */ or $v0,$zero,$zero -/* f01e2b4: 00075880 */ sll $t3,$a3,0x2 -/* f01e2b8: 13000003 */ beqz $t8,.L0f01e2c8 -/* f01e2bc: 00000000 */ nop -/* f01e2c0: 10000001 */ b .L0f01e2c8 -/* f01e2c4: 24040001 */ addiu $a0,$zero,0x1 -.L0f01e2c8: -/* f01e2c8: 8e990070 */ lw $t9,0x70($s4) -/* f01e2cc: 13200003 */ beqz $t9,.L0f01e2dc -/* f01e2d0: 00000000 */ nop -/* f01e2d4: 10000001 */ b .L0f01e2dc -/* f01e2d8: 24020001 */ addiu $v0,$zero,0x1 -.L0f01e2dc: -/* f01e2dc: 00444021 */ addu $t0,$v0,$a0 -/* f01e2e0: 01054821 */ addu $t1,$t0,$a1 -/* f01e2e4: 01265021 */ addu $t2,$t1,$a2 -/* f01e2e8: 19400029 */ blez $t2,.L0f01e390 -/* f01e2ec: 00000000 */ nop -/* f01e2f0: 44800000 */ mtc1 $zero,$f0 -/* f01e2f4: 028b1821 */ addu $v1,$s4,$t3 -/* f01e2f8: 8c6c0064 */ lw $t4,0x64($v1) -.L0f01e2fc: -/* f01e2fc: 24e70001 */ addiu $a3,$a3,0x1 -/* f01e300: 24630004 */ addiu $v1,$v1,0x4 -/* f01e304: e5801c44 */ swc1 $f0,0x1c44($t4) -/* f01e308: 8c6d0060 */ lw $t5,0x60($v1) -/* f01e30c: 00003025 */ or $a2,$zero,$zero -/* f01e310: 00002825 */ or $a1,$zero,$zero -/* f01e314: e5a01c48 */ swc1 $f0,0x1c48($t5) -/* f01e318: 8c6e0060 */ lw $t6,0x60($v1) -/* f01e31c: 00002025 */ or $a0,$zero,$zero -/* f01e320: 00001025 */ or $v0,$zero,$zero -/* f01e324: e5c01c4c */ swc1 $f0,0x1c4c($t6) -/* f01e328: 8e8f006c */ lw $t7,0x6c($s4) -/* f01e32c: 11e00003 */ beqz $t7,.L0f01e33c -/* f01e330: 00000000 */ nop -/* f01e334: 10000001 */ b .L0f01e33c -/* f01e338: 24060001 */ addiu $a2,$zero,0x1 -.L0f01e33c: -/* f01e33c: 8e980068 */ lw $t8,0x68($s4) -/* f01e340: 13000003 */ beqz $t8,.L0f01e350 -/* f01e344: 00000000 */ nop -/* f01e348: 10000001 */ b .L0f01e350 -/* f01e34c: 24050001 */ addiu $a1,$zero,0x1 -.L0f01e350: -/* f01e350: 8e990064 */ lw $t9,0x64($s4) -/* f01e354: 13200003 */ beqz $t9,.L0f01e364 -/* f01e358: 00000000 */ nop -/* f01e35c: 10000001 */ b .L0f01e364 -/* f01e360: 24040001 */ addiu $a0,$zero,0x1 -.L0f01e364: -/* f01e364: 8e880070 */ lw $t0,0x70($s4) -/* f01e368: 11000003 */ beqz $t0,.L0f01e378 -/* f01e36c: 00000000 */ nop -/* f01e370: 10000001 */ b .L0f01e378 -/* f01e374: 24020001 */ addiu $v0,$zero,0x1 -.L0f01e378: -/* f01e378: 00444821 */ addu $t1,$v0,$a0 -/* f01e37c: 01255021 */ addu $t2,$t1,$a1 -/* f01e380: 01465821 */ addu $t3,$t2,$a2 -/* f01e384: 00eb082a */ slt $at,$a3,$t3 -/* f01e388: 5420ffdc */ bnezl $at,.L0f01e2fc -/* f01e38c: 8c6c0064 */ lw $t4,0x64($v1) -.L0f01e390: -/* f01e390: 0fc0b26c */ jal func0f02c9b0 -/* f01e394: 00000000 */ nop -/* f01e398: 0fc120e6 */ jal func0f048398 -/* f01e39c: 00000000 */ nop -/* f01e3a0: 8e90033c */ lw $s0,0x33c($s4) -/* f01e3a4: 24150003 */ addiu $s5,$zero,0x3 -.L0f01e3a8: -/* f01e3a8: 8e130020 */ lw $s3,0x20($s0) -/* f01e3ac: 8e8c0354 */ lw $t4,0x354($s4) -/* f01e3b0: 92020000 */ lbu $v0,0x0($s0) -/* f01e3b4: 00002825 */ or $a1,$zero,$zero -/* f01e3b8: 026c9026 */ xor $s2,$s3,$t4 -/* f01e3bc: 16a20005 */ bne $s5,$v0,.L0f01e3d4 -/* f01e3c0: 2e520001 */ sltiu $s2,$s2,0x1 -/* f01e3c4: 0fc08bf8 */ jal propchrDoFireslotThing -/* f01e3c8: 02002025 */ or $a0,$s0,$zero -/* f01e3cc: 10000020 */ b .L0f01e450 -/* f01e3d0: 00402825 */ or $a1,$v0,$zero -.L0f01e3d4: -/* f01e3d4: 24010001 */ addiu $at,$zero,0x1 -/* f01e3d8: 10410005 */ beq $v0,$at,.L0f01e3f0 -/* f01e3dc: 24010004 */ addiu $at,$zero,0x4 -/* f01e3e0: 10410003 */ beq $v0,$at,.L0f01e3f0 -/* f01e3e4: 24010002 */ addiu $at,$zero,0x2 -/* f01e3e8: 54410006 */ bnel $v0,$at,.L0f01e404 -/* f01e3ec: 24010007 */ addiu $at,$zero,0x7 -.L0f01e3f0: -/* f01e3f0: 0fc1f91d */ jal func0f07e474 -/* f01e3f4: 02002025 */ or $a0,$s0,$zero -/* f01e3f8: 10000015 */ b .L0f01e450 -/* f01e3fc: 00402825 */ or $a1,$v0,$zero -/* f01e400: 24010007 */ addiu $at,$zero,0x7 -.L0f01e404: -/* f01e404: 54410006 */ bnel $v0,$at,.L0f01e420 -/* f01e408: 24010008 */ addiu $at,$zero,0x8 -/* f01e40c: 0fc4aef7 */ jal func0f12bbdc -/* f01e410: 02002025 */ or $a0,$s0,$zero -/* f01e414: 1000000e */ b .L0f01e450 -/* f01e418: 00402825 */ or $a1,$v0,$zero -/* f01e41c: 24010008 */ addiu $at,$zero,0x8 -.L0f01e420: -/* f01e420: 54410006 */ bnel $v0,$at,.L0f01e43c -/* f01e424: 24010006 */ addiu $at,$zero,0x6 -/* f01e428: 0fc4ba12 */ jal func0f12e848 -/* f01e42c: 02002025 */ or $a0,$s0,$zero -/* f01e430: 10000007 */ b .L0f01e450 -/* f01e434: 00402825 */ or $a1,$v0,$zero -/* f01e438: 24010006 */ addiu $at,$zero,0x6 -.L0f01e43c: -/* f01e43c: 54410005 */ bnel $v0,$at,.L0f01e454 -/* f01e440: 24010005 */ addiu $at,$zero,0x5 -/* f01e444: 0fc308a3 */ jal func0f0c228c -/* f01e448: 02002025 */ or $a0,$s0,$zero -/* f01e44c: 00402825 */ or $a1,$v0,$zero -.L0f01e450: -/* f01e450: 24010005 */ addiu $at,$zero,0x5 -.L0f01e454: -/* f01e454: 54a10004 */ bnel $a1,$at,.L0f01e468 -/* f01e458: 8e110020 */ lw $s1,0x20($s0) -/* f01e45c: 10000011 */ b .L0f01e4a4 -/* f01e460: 02608825 */ or $s1,$s3,$zero -/* f01e464: 8e110020 */ lw $s1,0x20($s0) -.L0f01e468: -/* f01e468: 8e8d0354 */ lw $t5,0x354($s4) -/* f01e46c: 022d9026 */ xor $s2,$s1,$t5 -/* f01e470: 14b5000a */ bne $a1,$s5,.L0f01e49c -/* f01e474: 2e520001 */ sltiu $s2,$s2,0x1 -/* f01e478: 0fc18171 */ jal func0f0605c4 -/* f01e47c: 02002025 */ or $a0,$s0,$zero -/* f01e480: 0fc1814e */ jal func0f060538 -/* f01e484: 02002025 */ or $a0,$s0,$zero -/* f01e488: 12400006 */ beqz $s2,.L0f01e4a4 -/* f01e48c: 00000000 */ nop -/* f01e490: 02008825 */ or $s1,$s0,$zero -/* f01e494: 10000003 */ b .L0f01e4a4 -/* f01e498: 00009025 */ or $s2,$zero,$zero -.L0f01e49c: -/* f01e49c: 0fc18ad9 */ jal func0f062b64 -/* f01e4a0: 02002025 */ or $a0,$s0,$zero -.L0f01e4a4: -/* f01e4a4: 1240ffc0 */ beqz $s2,.L0f01e3a8 -/* f01e4a8: 02208025 */ or $s0,$s1,$zero -/* f01e4ac: 8fbf002c */ lw $ra,0x2c($sp) -/* f01e4b0: 8fb00014 */ lw $s0,0x14($sp) -/* f01e4b4: 8fb10018 */ lw $s1,0x18($sp) -/* f01e4b8: 8fb2001c */ lw $s2,0x1c($sp) -/* f01e4bc: 8fb30020 */ lw $s3,0x20($sp) -/* f01e4c0: 8fb40024 */ lw $s4,0x24($sp) -/* f01e4c4: 8fb50028 */ lw $s5,0x28($sp) -/* f01e4c8: 03e00008 */ jr $ra -/* f01e4cc: 27bd0030 */ addiu $sp,$sp,0x30 -); +void func0f01e250(void) +{ + s32 i; + struct prop *prop; + struct prop *next; + struct prop *next2; + s32 done; + s32 value; + + for (i = 0; i < PLAYERCOUNT(); i++) { + g_Vars.players[i]->unk1c44 = 0; + g_Vars.players[i]->unk1c48 = 0; + g_Vars.players[i]->unk1c4c = 0; + } + + func0f02c9b0(); + func0f048398(); + + prop = g_Vars.unk00033c; + + do { + next = prop->next; + done = next == g_Vars.unk000354; + value = 0; + + if (prop->type == PROPTYPE_CHR) { + value = propchrDoFireslotThing(prop); + } else if (prop->type == PROPTYPE_OBJ || prop->type == PROPTYPE_WEAPON || prop->type == PROPTYPE_DOOR) { + value = func0f07e474(prop); + } else if (prop->type == PROPTYPE_EXPLOSION) { + value = func0f12bbdc(prop); + } else if (prop->type == PROPTYPE_EFFECT) { + value = func0f12e848(prop); + } else if (prop->type == PROPTYPE_PLAYER) { + value = func0f0c228c(prop); + } + + if (value == 5) { + next2 = next; + } else { + next2 = prop->next; + done = next2 == g_Vars.unk000354; + + if (value == 3) { + func0f0605c4(prop); + func0f060538(prop); + + if (done) { + next2 = prop; + done = false; + } + } else { + func0f062b64(prop, value); + } + } + + prop = next2; + } while (!done); +} s32 getNumChrs(void) { diff --git a/src/include/game/explosion.h b/src/include/game/explosion.h index 8c768bbf0..b28ff5c53 100644 --- a/src/include/game/explosion.h +++ b/src/include/game/explosion.h @@ -13,7 +13,7 @@ bool explosionCreate(struct prop *prop, struct coord *pos, s16 *rooms, s16 type, u32 func0f12acec(void); bool func0f12af5c(struct explosion *exp, struct prop *prop, struct coord *pos1, struct coord *pos2); u32 func0f12b0e0(void); -u32 func0f12bbdc(void); +u32 func0f12bbdc(struct prop *prop); u32 explosionUpdateZ(struct prop *prop); u32 func0f12c654(void); u32 func0f12cd64(void); diff --git a/src/include/game/game_0b63b0.h b/src/include/game/game_0b63b0.h index aef04f4da..2b6308f90 100644 --- a/src/include/game/game_0b63b0.h +++ b/src/include/game/game_0b63b0.h @@ -81,7 +81,7 @@ f32 currentPlayerGetHealth(void); u32 func0f0c21a4(void); void func0f0c2210(f32 shield); s32 getMissionTime(void); -u32 func0f0c228c(void); +u32 func0f0c228c(struct prop *prop); u32 func0f0c2364(void); u32 func0f0c2a58(void); u32 func0f0c32a0(void); diff --git a/src/include/game/propobj.h b/src/include/game/propobj.h index efb25c7bf..48fff37a6 100644 --- a/src/include/game/propobj.h +++ b/src/include/game/propobj.h @@ -188,7 +188,7 @@ u32 func0f07e184(void); u32 func0f07e1fc(void); void func0f07e2cc(struct prop *prop); u32 func0f07e468(void); -u32 func0f07e474(void); +u32 func0f07e474(struct prop *prop); s32 objTick(struct prop *prop); u32 func0f07f6d0(void); u32 func0f07f918(void); diff --git a/src/include/game/smoke.h b/src/include/game/smoke.h index 6c384a0b1..c31a98106 100644 --- a/src/include/game/smoke.h +++ b/src/include/game/smoke.h @@ -11,7 +11,7 @@ void smokeCreateAtProp(struct prop *prop, s16 type); void func0f12e74c(struct prop *prop, struct coord *pos, s16 *rooms, s16 type, u32 arg4); void smokeClearForProp(struct prop *prop); struct smoke *smokeCreateSimple(struct coord *pos, s16 *rooms, s16 type); -u32 func0f12e848(void); +u32 func0f12e848(struct prop *prop); u32 smokeUpdateZ(struct prop *prop); u32 func0f12f230(void); u32 func0f12f5f8(void); diff --git a/src/include/types.h b/src/include/types.h index f3277688b..89bbe0375 100644 --- a/src/include/types.h +++ b/src/include/types.h @@ -2493,9 +2493,9 @@ struct player { /*0x1c38*/ u32 unk1c38; /*0x1c3c*/ u32 unk1c3c; /*0x1c40*/ u32 joybutinhibit; - /*0x1c44*/ u32 unk1c44; - /*0x1c48*/ u32 unk1c48; - /*0x1c4c*/ u32 unk1c4c; + /*0x1c44*/ f32 unk1c44; + /*0x1c48*/ f32 unk1c48; + /*0x1c4c*/ f32 unk1c4c; /*0x1c50*/ u32 unk1c50; /*0x1c54*/ u32 unk1c54; /*0x1c58*/ f32 unk1c58;