diff --git a/src/game/mplayer/scenarios.c b/src/game/mplayer/scenarios.c index 3eb182878..965f4ee95 100644 --- a/src/game/mplayer/scenarios.c +++ b/src/game/mplayer/scenarios.c @@ -4170,7 +4170,7 @@ void func0f182bf4(void) for (i = 0; i < 1; i++) { g_ScenarioData.htm.unk07c[i].unk00 = 0; g_ScenarioData.htm.unk07c[i].prop = NULL; - g_ScenarioData.htm.unk07c[i].unk08 = -1; + g_ScenarioData.htm.unk07c[i].padnum = -1; g_ScenarioData.htm.unk07c[i].unk0a = 0xff; g_ScenarioData.htm.unk07c[i].unk0b = 0xff; } @@ -4574,7 +4574,7 @@ void scenarioHtmReset(void) padnum = data->padnums[rand]; } while (padnum <= 0); - data->unk07c[data->unk002].unk08 = padnum; + data->unk07c[data->unk002].padnum = padnum; data->unk002++; data->padnums[rand] = -1; } @@ -4582,14 +4582,17 @@ void scenarioHtmReset(void) osSyncPrintf("HackThatMacInitProps -> %d/%d Random box pads generated - Listing\n", data->unk002, scenarioHtmCallback08()); for (i = 0; i < data->unk002; i++) { - osSyncPrintf("Pad %d -> Pad Id = %d\n", i, data->unk07c[i].unk08); + osSyncPrintf("Pad %d -> Pad Id = %d\n", i, data->unk07c[i].padnum); } for (i = 0; i < 1; i++) { - data->unk07c[i].prop = func0f186508(MODEL_GOODPC, data->unk07c[i].unk08, 0.2f, 0x420001, 0x204000, 0x12000); + data->unk07c[i].prop = scenarioCreateObj(MODEL_GOODPC, data->unk07c[i].padnum, 0.2f, + OBJFLAG_00000001 | OBJFLAG_INVINCIBLE | OBJFLAG_00400000, + OBJFLAG2_IMMUNETOGUNFIRE | OBJFLAG2_00200000, + OBJFLAG3_HTMTERMINAL | OBJFLAG3_INTERACTABLE); osSyncPrintf("HackThatMacInitProps -> Building and adding custom prop %d - Pad=%d, Ptr=%08x\n", - i, data->unk07c[i].unk08, data->unk07c[i].prop); - scenarioHtmRemoveAmmoCrateAtPad(data->unk07c[i].unk08); + i, data->unk07c[i].padnum, data->unk07c[i].prop); + scenarioHtmRemoveAmmoCrateAtPad(data->unk07c[i].padnum); } var800869ec = NULL; @@ -8086,148 +8089,50 @@ struct menudialog g_MpQuickTeamScenarioMenuDialog = { NULL, }; -u32 var800871fc = 0x01000003; -u32 var80087200 = 0x0020ffff; -u32 var80087204 = 0x00000000; -u32 var80087208 = 0x00000000; -u32 var8008720c = 0x00000000; -u32 var80087210 = 0x00000000; -u32 var80087214 = 0x00000000; -u32 var80087218 = 0x3f800000; -u32 var8008721c = 0x00000000; -u32 var80087220 = 0x00000000; -u32 var80087224 = 0x00000000; -u32 var80087228 = 0x3f800000; -u32 var8008722c = 0x00000000; -u32 var80087230 = 0x00000000; -u32 var80087234 = 0x00000000; -u32 var80087238 = 0x3f800000; -u32 var8008723c = 0x00000000; -u32 var80087240 = 0x00000000; -u32 var80087244 = 0x00000000; -u32 var80087248 = 0x000003e8; -u32 var8008724c = 0xffffff00; -u32 var80087250 = 0xffffff00; -u32 var80087254 = 0x0fff0000; -u32 var80087258 = 0x00000000; -u32 var8008725c = 0x00000000; +struct prop *scenarioCreateObj(s32 modelnum, s16 padnum, f32 arg2, u32 flags, u32 flags2, u32 flags3) +{ + struct defaultobj template = { + 256, // extrascale + 0, // hidden2 + OBJTYPE_BASIC, // type + MODEL_A51_CRATE1, // modelnum + -1, // pad + 0, // flags + 0, // flags2 + 0, // flags3 + NULL, // prop + NULL, // model + 1, 0, 0, // realrot + 0, 1, 0, + 0, 0, 1, + 0, // hidden + NULL, // geo + NULL, // projectile + 0, // damage + 1000, // maxdamage + 0xff, 0xff, 0xff, 0x00, // shadecol + 0xff, 0xff, 0xff, 0x00, // nextcol + 0x0fff, // floorcol + 0, // tiles + }; -GLOBAL_ASM( -glabel func0f186508 -/* f186508: 27bdff88 */ addiu $sp,$sp,-120 -/* f18650c: 3c0f8008 */ lui $t7,%hi(var800871fc) -/* f186510: 25ef71fc */ addiu $t7,$t7,%lo(var800871fc) -/* f186514: afbf0014 */ sw $ra,0x14($sp) -/* f186518: afa40078 */ sw $a0,0x78($sp) -/* f18651c: afa5007c */ sw $a1,0x7c($sp) -/* f186520: afa60080 */ sw $a2,0x80($sp) -/* f186524: afa70084 */ sw $a3,0x84($sp) -/* f186528: 25e80054 */ addiu $t0,$t7,0x54 -/* f18652c: 27ae001c */ addiu $t6,$sp,0x1c -.L0f186530: -/* f186530: 8de10000 */ lw $at,0x0($t7) -/* f186534: 25ef000c */ addiu $t7,$t7,0xc -/* f186538: 25ce000c */ addiu $t6,$t6,0xc -/* f18653c: adc1fff4 */ sw $at,-0xc($t6) -/* f186540: 8de1fff8 */ lw $at,-0x8($t7) -/* f186544: adc1fff8 */ sw $at,-0x8($t6) -/* f186548: 8de1fffc */ lw $at,-0x4($t7) -/* f18654c: 15e8fff8 */ bne $t7,$t0,.L0f186530 -/* f186550: adc1fffc */ sw $at,-0x4($t6) -/* f186554: 8de10000 */ lw $at,0x0($t7) -/* f186558: 8de80004 */ lw $t0,0x4($t7) -/* f18655c: 24040060 */ addiu $a0,$zero,0x60 -/* f186560: 24050004 */ addiu $a1,$zero,0x4 -/* f186564: adc10000 */ sw $at,0x0($t6) -/* f186568: 0c0048f2 */ jal mempAlloc -/* f18656c: adc80004 */ sw $t0,0x4($t6) -/* f186570: 27a9001c */ addiu $t1,$sp,0x1c -/* f186574: afa20018 */ sw $v0,0x18($sp) -/* f186578: 252c0054 */ addiu $t4,$t1,0x54 -/* f18657c: 00406825 */ or $t5,$v0,$zero -.L0f186580: -/* f186580: 8d210000 */ lw $at,0x0($t1) -/* f186584: 2529000c */ addiu $t1,$t1,0xc -/* f186588: 25ad000c */ addiu $t5,$t5,0xc -/* f18658c: ada1fff4 */ sw $at,-0xc($t5) -/* f186590: 8d21fff8 */ lw $at,-0x8($t1) -/* f186594: ada1fff8 */ sw $at,-0x8($t5) -/* f186598: 8d21fffc */ lw $at,-0x4($t1) -/* f18659c: 152cfff8 */ bne $t1,$t4,.L0f186580 -/* f1865a0: ada1fffc */ sw $at,-0x4($t5) -/* f1865a4: 8d210000 */ lw $at,0x0($t1) -/* f1865a8: 240a0001 */ addiu $t2,$zero,0x1 -/* f1865ac: 00402025 */ or $a0,$v0,$zero -/* f1865b0: ada10000 */ sw $at,0x0($t5) -/* f1865b4: 8d2c0004 */ lw $t4,0x4($t1) -/* f1865b8: 3c014380 */ lui $at,0x4380 -/* f1865bc: 44813000 */ mtc1 $at,$f6 -/* f1865c0: adac0004 */ sw $t4,0x4($t5) -/* f1865c4: 8fb90078 */ lw $t9,0x78($sp) -/* f1865c8: 3c014f00 */ lui $at,0x4f00 -/* f1865cc: 2405007b */ addiu $a1,$zero,0x7b -/* f1865d0: a4590004 */ sh $t9,0x4($v0) -/* f1865d4: 87b8007e */ lh $t8,0x7e($sp) -/* f1865d8: a4580006 */ sh $t8,0x6($v0) -/* f1865dc: 8fa80084 */ lw $t0,0x84($sp) -/* f1865e0: ac480008 */ sw $t0,0x8($v0) -/* f1865e4: 8faf0088 */ lw $t7,0x88($sp) -/* f1865e8: ac4f000c */ sw $t7,0xc($v0) -/* f1865ec: 8fae008c */ lw $t6,0x8c($sp) -/* f1865f0: ac4e0010 */ sw $t6,0x10($v0) -/* f1865f4: c7a40080 */ lwc1 $f4,0x80($sp) -/* f1865f8: 46062202 */ mul.s $f8,$f4,$f6 -/* f1865fc: 444bf800 */ cfc1 $t3,$31 -/* f186600: 44caf800 */ ctc1 $t2,$31 -/* f186604: 00000000 */ nop -/* f186608: 460042a4 */ cvt.w.s $f10,$f8 -/* f18660c: 444af800 */ cfc1 $t2,$31 -/* f186610: 00000000 */ nop -/* f186614: 314a0078 */ andi $t2,$t2,0x78 -/* f186618: 51400013 */ beqzl $t2,.L0f186668 -/* f18661c: 440a5000 */ mfc1 $t2,$f10 -/* f186620: 44815000 */ mtc1 $at,$f10 -/* f186624: 240a0001 */ addiu $t2,$zero,0x1 -/* f186628: 460a4281 */ sub.s $f10,$f8,$f10 -/* f18662c: 44caf800 */ ctc1 $t2,$31 -/* f186630: 00000000 */ nop -/* f186634: 460052a4 */ cvt.w.s $f10,$f10 -/* f186638: 444af800 */ cfc1 $t2,$31 -/* f18663c: 00000000 */ nop -/* f186640: 314a0078 */ andi $t2,$t2,0x78 -/* f186644: 15400005 */ bnez $t2,.L0f18665c -/* f186648: 00000000 */ nop -/* f18664c: 440a5000 */ mfc1 $t2,$f10 -/* f186650: 3c018000 */ lui $at,0x8000 -/* f186654: 10000007 */ b .L0f186674 -/* f186658: 01415025 */ or $t2,$t2,$at -.L0f18665c: -/* f18665c: 10000005 */ b .L0f186674 -/* f186660: 240affff */ addiu $t2,$zero,-1 -/* f186664: 440a5000 */ mfc1 $t2,$f10 -.L0f186668: -/* f186668: 00000000 */ nop -/* f18666c: 0540fffb */ bltz $t2,.L0f18665c -/* f186670: 00000000 */ nop -.L0f186674: -/* f186674: 904c0002 */ lbu $t4,0x2($v0) -/* f186678: 44cbf800 */ ctc1 $t3,$31 -/* f18667c: a44a0000 */ sh $t2,0x0($v0) -/* f186680: 3189fffb */ andi $t1,$t4,0xfffb -/* f186684: 0fc033b9 */ jal setupGenericObject -/* f186688: a0490002 */ sb $t1,0x2($v0) -/* f18668c: 8fad0018 */ lw $t5,0x18($sp) -/* f186690: 0fc1812f */ jal propActivate -/* f186694: 8da40014 */ lw $a0,0x14($t5) -/* f186698: 8fb90018 */ lw $t9,0x18($sp) -/* f18669c: 0fc180bc */ jal propEnable -/* f1866a0: 8f240014 */ lw $a0,0x14($t9) -/* f1866a4: 8fb80018 */ lw $t8,0x18($sp) -/* f1866a8: 8fbf0014 */ lw $ra,0x14($sp) -/* f1866ac: 8f020014 */ lw $v0,0x14($t8) -/* f1866b0: 03e00008 */ jr $ra -/* f1866b4: 27bd0078 */ addiu $sp,$sp,0x78 -); + struct defaultobj *obj = mempAlloc(ALIGN16(sizeof(struct defaultobj)), MEMPOOL_STAGE); + *obj = template; + + obj->modelnum = modelnum; + obj->pad = padnum; + obj->flags = flags; + obj->flags2 = flags2; + obj->flags3 = flags3; + obj->extrascale = arg2 * 256; + obj->hidden2 &= ~OBJHFLAG_REAPABLE; + + setupGenericObject(obj, 123); + propActivate(obj->prop); + propEnable(obj->prop); + + return obj->prop; +} void mpCreateScenarioHudmsg(s32 playernum, char *message) { diff --git a/src/include/game/mplayer/setup.h b/src/include/game/mplayer/setup.h index 7d98afc1f..a3d63d922 100644 --- a/src/include/game/mplayer/setup.h +++ b/src/include/game/mplayer/setup.h @@ -109,7 +109,7 @@ Gfx *func0f185774(Gfx *gdl); void scenarioCalculatePlayerScore(struct mpchrconfig *mpchr, s32 chrnum, s32 *arg2, s32 *arg3); bool func0f185e20(struct prop *prop, s32 *arg1); void mpPrepareScenario(void); -struct prop *func0f186508(s32 modelnum, s32 padnum, f32 arg2, u32 arg3, u32 arg4, u32 arg5); +struct prop *scenarioCreateObj(s32 modelnum, s16 padnum, f32 arg2, u32 flags, u32 flags2, u32 flags3); void mpCreateScenarioHudmsg(s32 playernum, char *message); bool mpChrsAreSameTeam(s32 arg0, s32 arg1); u32 chrGiveBriefcase(struct chrdata *chr, struct prop *prop); diff --git a/src/include/types.h b/src/include/types.h index 358956617..32a79b25b 100644 --- a/src/include/types.h +++ b/src/include/types.h @@ -4755,7 +4755,7 @@ struct scenariodata_htb { struct htmthing { u32 unk00; struct prop *prop; - s16 unk08; + s16 padnum; u8 unk0a; u8 unk0b; };