Attempt to decompile chopperFireRocket

This commit is contained in:
Ryan Dwyer committed 2020-12-26 12:14:38 +10:00
1 parent 7c67dc4db1
commit 1b9a77e8fe
9 files changed
+81 -62

No files matched your search

+22 -22
View File
@@ -163,7 +163,7 @@ void currentPlayerUpdateHead(f32 arg0, f32 arg1)
func000159b0(&sp40);
sp80.matrix = &sp40;
sp80.model0c = &g_Vars.currentplayer->unk0510;
sp80.unk10 = &g_Vars.currentplayer->unk0510;
func0001cebc(&sp80, &g_Vars.currentplayer->model);
g_Vars.currentplayer->headbodyoffset.x = g_Vars.currentplayer->standbodyoffset.x;
@@ -172,35 +172,35 @@ void currentPlayerUpdateHead(f32 arg0, f32 arg1)
modelGetRootPosition(&g_Vars.currentplayer->model, &modelpos);
modelpos.x -= g_Vars.currentplayer->unk0510.unk30;
modelpos.z -= g_Vars.currentplayer->unk0510.unk38;
modelpos.x -= g_Vars.currentplayer->unk0510.m[3][0];
modelpos.z -= g_Vars.currentplayer->unk0510.m[3][2];
modelSetRootPosition(&g_Vars.currentplayer->model, &modelpos);
}
}
if (animspeed > 0) {
g_Vars.currentplayer->unk0510.unk30 += arg1;
g_Vars.currentplayer->unk0510.unk38 *= arg0;
g_Vars.currentplayer->unk0510.m[3][0] += arg1;
g_Vars.currentplayer->unk0510.m[3][2] *= arg0;
if (g_Vars.lvupdate240 > 0) {
g_Vars.currentplayer->unk0510.unk30 /= g_Vars.lvupdate240freal;
g_Vars.currentplayer->unk0510.unk38 /= g_Vars.lvupdate240freal;
g_Vars.currentplayer->unk0510.m[3][0] /= g_Vars.lvupdate240freal;
g_Vars.currentplayer->unk0510.m[3][2] /= g_Vars.lvupdate240freal;
}
headpos.x = g_Vars.currentplayer->unk0510.unk30 * g_Vars.currentplayer->headamplitude;
headpos.y = (g_Vars.currentplayer->unk0510.unk34 - g_Vars.currentplayer->standheight) *
headpos.x = g_Vars.currentplayer->unk0510.m[3][0] * g_Vars.currentplayer->headamplitude;
headpos.y = (g_Vars.currentplayer->unk0510.m[3][1] - g_Vars.currentplayer->standheight) *
g_Vars.currentplayer->headamplitude + g_Vars.currentplayer->standheight;
headpos.z = g_Vars.currentplayer->unk0510.unk38 * g_Vars.currentplayer->headamplitude;
headpos.z = g_Vars.currentplayer->unk0510.m[3][2] * g_Vars.currentplayer->headamplitude;
if (g_Vars.currentplayer->headanim >= 0) {
lookvel.x = g_Vars.currentplayer->unk0510.unk20 * g_Vars.currentplayer->sideamplitude;
lookvel.y = g_Vars.currentplayer->unk0510.unk24 * g_Vars.currentplayer->headamplitude;
lookvel.z = (g_Vars.currentplayer->unk0510.unk28 - 1.0f) * g_Vars.currentplayer->headamplitude + 1.0f;
lookvel.x = g_Vars.currentplayer->unk0510.m[2][0] * g_Vars.currentplayer->sideamplitude;
lookvel.y = g_Vars.currentplayer->unk0510.m[2][1] * g_Vars.currentplayer->headamplitude;
lookvel.z = (g_Vars.currentplayer->unk0510.m[2][2] - 1.0f) * g_Vars.currentplayer->headamplitude + 1.0f;
upvel.x = g_Vars.currentplayer->unk0510.unk10 * g_Vars.currentplayer->headamplitude;
upvel.y = (g_Vars.currentplayer->unk0510.unk14 - 1.0f) * g_Vars.currentplayer->headamplitude + 1.0f;
upvel.z = g_Vars.currentplayer->unk0510.unk18 * g_Vars.currentplayer->headamplitude;
upvel.x = g_Vars.currentplayer->unk0510.m[1][0] * g_Vars.currentplayer->headamplitude;
upvel.y = (g_Vars.currentplayer->unk0510.m[1][1] - 1.0f) * g_Vars.currentplayer->headamplitude + 1.0f;
upvel.z = g_Vars.currentplayer->unk0510.m[1][2] * g_Vars.currentplayer->headamplitude;
g_Vars.currentplayer->headwalkingtime60 += g_Vars.lvupdate240_60;
@@ -210,13 +210,13 @@ void currentPlayerUpdateHead(f32 arg0, f32 arg1)
currentPlayerSetHeadDamp(0.99748998880386f);
}
} else {
lookvel.x = g_Vars.currentplayer->unk0510.unk20;
lookvel.y = g_Vars.currentplayer->unk0510.unk24;
lookvel.z = g_Vars.currentplayer->unk0510.unk28;
lookvel.x = g_Vars.currentplayer->unk0510.m[2][0];
lookvel.y = g_Vars.currentplayer->unk0510.m[2][1];
lookvel.z = g_Vars.currentplayer->unk0510.m[2][2];
upvel.x = g_Vars.currentplayer->unk0510.unk10;
upvel.y = g_Vars.currentplayer->unk0510.unk14;
upvel.z = g_Vars.currentplayer->unk0510.unk18;
upvel.x = g_Vars.currentplayer->unk0510.m[1][0];
upvel.y = g_Vars.currentplayer->unk0510.m[1][1];
upvel.z = g_Vars.currentplayer->unk0510.m[1][2];
currentPlayerSetHeadDamp(0.96f);
}
+2 -2
View File
@@ -17547,7 +17547,7 @@ glabel func0f041a74
/* f041ac8: afa20014 */ sw $v0,0x14($sp)
/* f041acc: 2606002c */ addiu $a2,$s0,0x2c
/* f041ad0: 26070044 */ addiu $a3,$s0,0x44
/* f041ad4: 0fc244b7 */ jal func0f0912dc
/* f041ad4: 0fc244b7 */ jal projectileCreate
/* f041ad8: afaa0010 */ sw $t2,0x10($sp)
/* f041adc: 3c0b800a */ lui $t3,%hi(g_Vars+0x8)
/* f041ae0: 8d6b9fc8 */ lw $t3,%lo(g_Vars+0x8)($t3)
@@ -17580,7 +17580,7 @@ glabel func0f041a74
/* f041b44: afa20014 */ sw $v0,0x14($sp)
/* f041b48: 26060038 */ addiu $a2,$s0,0x38
/* f041b4c: 26070050 */ addiu $a3,$s0,0x50
/* f041b50: 0fc244b7 */ jal func0f0912dc
/* f041b50: 0fc244b7 */ jal projectileCreate
/* f041b54: afac0010 */ sw $t4,0x10($sp)
/* f041b58: 8e0d034c */ lw $t5,0x34c($s0)
/* f041b5c: 8e0e0348 */ lw $t6,0x348($s0)
+3 -3
View File
@@ -1461,7 +1461,7 @@ void setupSingleMonitor(struct singlemonitorobj *monitor, s32 cmdindex)
f32 scale;
struct coord spa4;
Mtxf sp64;
f32 sp24[16];
Mtxf sp24;
propLoad(modelnum);
@@ -1498,8 +1498,8 @@ void setupSingleMonitor(struct singlemonitorobj *monitor, s32 cmdindex)
spa4.y = -spa4.y;
spa4.z = -spa4.z;
func000166dc(&spa4, sp24);
func00015be4(&sp64, (struct model0c *)sp24, (Mtxf *)&monitor->base.unk48->unk004);
func000166dc(&spa4, &sp24);
func00015be4(&sp64, &sp24, (Mtxf *)&monitor->base.unk48->unk004);
}
} else {
setupGenericObject(&monitor->base, cmdindex);
+2 -2
View File
@@ -1680,8 +1680,8 @@ Gfx *renderFrame(Gfx *gdl)
direction.y = g_Vars.currentplayer->eyespy->look.y;
direction.z = g_Vars.currentplayer->eyespy->look.z;
func0f0912dc(g_Vars.currentplayer->eyespy->prop, 0,
&g_Vars.currentplayer->eyespy->prop->pos, &direction, WEAPON_TRANQUILIZER, 0);
projectileCreate(g_Vars.currentplayer->eyespy->prop, 0,
&g_Vars.currentplayer->eyespy->prop->pos, &direction, WEAPON_TRANQUILIZER, NULL);
} else {
// No dart ammo
audioStart(var80095200, 0x8052, 0, -1, -1, -1, -1, -1);
+44 -6
View File
@@ -24283,7 +24283,7 @@ glabel var7f1aa5d0
/* f07b3c8: 00002825 */ or $a1,$zero,$zero
/* f07b3cc: 27a600b8 */ addiu $a2,$sp,0xb8
/* f07b3d0: 27a700c4 */ addiu $a3,$sp,0xc4
/* f07b3d4: 0fc244b7 */ jal func0f0912dc
/* f07b3d4: 0fc244b7 */ jal projectileCreate
/* f07b3d8: afb10014 */ sw $s1,0x14($sp)
/* f07b3dc: 8fbf0024 */ lw $ra,0x24($sp)
.L0f07b3e0:
@@ -24293,6 +24293,44 @@ glabel var7f1aa5d0
/* f07b3ec: 27bd00d0 */ addiu $sp,$sp,0xd0
);
// Mismatch: Regalloc and swapped lwc1 instructions for second pos calculations
//void chopperFireRocket(struct chopperobj *chopper, bool side)
//{
// if (chopper->ontarget) {
// struct coord direction; // c4
// struct coord pos; // b8
// struct prop *targetprop = chopperGetTargetProp(chopper);
// struct prop *chopperprop = chopper->base.prop;
// u32 stack;
// Mtxf sp6c;
// Mtxf sp2c;
//
// pos.x = side ? -754 : 754;
// pos.y = -400;
// pos.z = -400;
//
// func00015d54(chopper->base.realrot, &sp2c);
// func000166dc(&pos, &sp6c);
// func000159fc(&sp2c, &sp6c);
//
// pos.x = sp6c.m[3][0] + chopperprop->pos.x;
// pos.y = sp6c.m[3][1] + chopperprop->pos.y;
// pos.z = sp6c.m[3][2] + chopperprop->pos.z;
//
// if (1);
//
// direction.x = targetprop->pos.x - pos.x;
// direction.y = targetprop->pos.y - pos.y + (s32)(random() % 100);
// direction.z = targetprop->pos.z - pos.z;
//
// scaleTo1(&direction.x, &direction.y, &direction.z);
//
// smokeCreateSimple(&pos, chopperprop->rooms, SMOKETYPE_3);
//
// projectileCreate(chopperprop, 0, &pos, &direction, WEAPON_ROCKETLAUNCHER, targetprop);
// }
//}
GLOBAL_ASM(
glabel func0f07b3f0
.late_rodata
@@ -24729,7 +24767,7 @@ glabel var7f1aa610
/* f07b9dc: e7a80104 */ swc1 $f8,0x104($sp)
/* f07b9e0: 8e0500e0 */ lw $a1,0xe0($s0)
/* f07b9e4: afab0010 */ sw $t3,0x10($sp)
/* f07b9e8: 0fc244b7 */ jal func0f0912dc
/* f07b9e8: 0fc244b7 */ jal projectileCreate
/* f07b9ec: afac0014 */ sw $t4,0x14($sp)
/* f07b9f0: 8fad00d4 */ lw $t5,0xd4($sp)
/* f07b9f4: 240e0001 */ addiu $t6,$zero,0x1
@@ -28295,7 +28333,7 @@ s32 objTick(struct prop *prop)
}
sp556 = true;
sp476.model0c = gfxAllocate(model->unk08->unk0e * 64);
sp476.unk10 = gfxAllocate(model->unk08->unk0e * sizeof(Mtxf));
sp476.matrix = currentPlayerGetMatrix1740();
func0001cebc(&sp476, model);
@@ -28393,7 +28431,7 @@ s32 objTick(struct prop *prop)
func00015a00(currentPlayerGetMatrix1740(), &sp248, &sp152);
sp556 = true;
sp312.model0c = gfxAllocate(model->unk08->unk0e * 64);
sp312.unk10 = gfxAllocate(model->unk08->unk0e * sizeof(Mtxf));
sp312.matrix = &sp152;
func0001cebc(&sp312, model);
@@ -28551,7 +28589,7 @@ s32 objTick(struct prop *prop)
func0001cb0c(model, model->unk08->rootnode);
}
prop->z = -model->unk0c->unk38;
prop->z = -model->unk0c->m[3][2];
func0f07063c(prop, sp572);
child = prop->child;
@@ -47818,7 +47856,7 @@ glabel func0f091250
);
GLOBAL_ASM(
glabel func0f0912dc
glabel projectileCreate
.late_rodata
glabel var7f1ab20c
.word 0x481c4000
+2 -2
View File
@@ -178,7 +178,7 @@ void chopperRestartTimer(struct chopperobj *obj);
f32 chopperGetTimer(struct chopperobj *heli);
void chopperSetMaxDamage(struct chopperobj *obj, u16 health);
u32 func0f07b164(void);
u32 chopperFireRocket(struct chopperobj *obj, u32 arg1);
void chopperFireRocket(struct chopperobj *chopper, bool side);
u32 func0f07b3f0(void);
void func0f07ba38(struct prop *prop, f32 roty, f32 rotx, struct coord *coord, u32 arg4);
void chopperTickAttackMode2(struct prop *chopper);
@@ -343,7 +343,7 @@ void alarmTick(void);
u32 func0f091030(void);
void func0f0910ac(void);
u32 func0f091250(void);
void func0f0912dc(struct prop *prop, u32 arg1, struct coord *source, struct coord *direction, u32 arg4, u32 arg5);
void projectileCreate(struct prop *fromprop, u32 arg1, struct coord *pos, struct coord *direction, s32 weaponnum, struct prop *targetprop);
void objSetModelPartVisible(struct defaultobj *obj, s32 partnum, bool visible);
#endif
+1 -1
View File
@@ -11,7 +11,7 @@ void func00015b14(Mtxf *matrix, f32 *coord, struct coord *arg2);
void func00015b64(Mtxf *arg0, struct coord *coord);
void func00015b68(Mtxf *matrix, struct coord *arg1, struct coord *arg2);
void func00015be0(Mtxf *matrix1, Mtxf *matrix2);
void func00015be4(Mtxf *arg0, struct model0c *model0c, Mtxf *arg2);
void func00015be4(Mtxf *arg0, Mtxf *arg1, Mtxf *arg2);
void func00015cd8(f32 *arg0, f32 *realrot);
u32 func00015d18(void);
void func00015d54(f32 *realrot, Mtxf *matrix);
+1 -1
View File
@@ -15,7 +15,7 @@ void func00016400(f32 angle, Mtxf *matrix);
void func0001648c(struct coord *coord, Mtxf *dest);
u32 func000165d8(void);
u32 func000166a4(void);
void func000166dc(struct coord *pos, f32 *matrix);
void func000166dc(struct coord *pos, Mtxf *matrix);
u32 func00016710(void);
void func00016748(f32 arg0);
u32 func00016760(void);
+4 -23
View File
@@ -285,31 +285,12 @@ struct model08 { // raw model file data
f32 unk10;
};
struct model0c { // matrix
/*0x00*/ u32 unk00;
/*0x04*/ u32 unk04;
/*0x08*/ u32 unk08;
/*0x0c*/ u32 unk0c;
/*0x10*/ f32 unk10;
/*0x14*/ f32 unk14;
/*0x18*/ f32 unk18;
/*0x1c*/ u32 unk1c;
/*0x20*/ f32 unk20;
/*0x24*/ f32 unk24;
/*0x28*/ f32 unk28;
/*0x2c*/ u32 unk2c;
/*0x30*/ f32 unk30;
/*0x34*/ f32 unk34;
/*0x38*/ f32 unk38;
/*0x3c*/ u32 unk3c;
};
struct model {
/*0x00*/ u8 unk00;
/*0x01*/ u8 unk01;
/*0x04*/ struct chrdata *chr;
/*0x08*/ struct model08 *unk08;
/*0x0c*/ struct model0c *unk0c; // matrix
/*0x0c*/ Mtxf *unk0c;
/*0x10*/ void *datas; // array of pointers to modeldata structs
/*0x14*/ f32 unk14;
/*0x18*/ struct model *attachedto;
@@ -1582,7 +1563,7 @@ struct chopperobj { // objtype 0x39
/*0x88*/ struct path *path;
/*0x8c*/ s32 nextstep;
/*0x90*/ s16 weaponsarmed;
/*0x92*/ u16 ontarget;
/*0x92*/ s16 ontarget;
/*0x94*/ s16 target;
/*0x96*/ u8 attackmode;
/*0x97*/ u8 cw;
@@ -2436,7 +2417,7 @@ struct player {
/*0x0504*/ u32 unk0504;
/*0x0508*/ u32 unk0508;
/*0x050c*/ u32 unk050c;
/*0x0510*/ struct model0c unk0510;
/*0x0510*/ Mtxf unk0510;
/*0x0550*/ u32 unk0550;
/*0x0554*/ u32 unk0554;
/*0x0558*/ u32 unk0558;
@@ -5932,7 +5913,7 @@ struct objticksp476 {
/*0x04*/ u32 unk04;
/*0x08*/ u32 unk08;
/*0x0c*/ u32 unk0c;
/*0x10*/ struct model0c *model0c;
/*0x10*/ Mtxf *unk10;
/*0x14*/ u32 unk14;
/*0x18*/ u32 unk18;
/*0x1c*/ u32 unk1c;