Separate projectile struct into monitormount and projectile
This commit is contained in:
parent
7b7631fb43
commit
f9896d6dc4
|
|
@ -2218,8 +2218,8 @@ glabel var7f1a87a8
|
|||
//
|
||||
// prop->flags |= PROPFLAG_ONTHISSCREENTHISTICK | PROPFLAG_ONANYSCREENTHISTICK;
|
||||
//
|
||||
// if (obj->hidden & OBJHFLAG_00000040) {
|
||||
// mtx00015be4(sp104, (Mtxf *)&obj->projectile->speed, &sp80);
|
||||
// if (obj->hidden & OBJHFLAG_HANGINGMONITOR) {
|
||||
// mtx00015be4(sp104, &obj->monitormount->matrix, &sp80);
|
||||
// thing.matrix = &sp80;
|
||||
// } else if (CHRRACE(chr) == RACE_SKEDAR) {
|
||||
// // The skedar hand position is rotated weirdly, so compensate for it
|
||||
|
|
@ -3135,7 +3135,7 @@ void chrDropConcealedItems(struct chrdata *chr)
|
|||
if (prop != chr->weapons_held[2]
|
||||
&& prop != chr->weapons_held[1]
|
||||
&& prop != chr->weapons_held[0]
|
||||
&& (prop->obj->hidden & OBJHFLAG_00000040) == 0
|
||||
&& (prop->obj->hidden & OBJHFLAG_HANGINGMONITOR) == 0
|
||||
&& (prop->obj->flags & OBJFLAG_AIUNDROPPABLE) == 0) {
|
||||
objSetDropped(prop, DROPTYPE_DEFAULT);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -116,7 +116,7 @@ struct hatobj *g_HatSlots;
|
|||
struct ammocrateobj *g_AmmoCrates;
|
||||
struct defaultobj *var8009ce64;
|
||||
struct projectile *g_Projectiles;
|
||||
struct monitorthing *g_MonitorThings;
|
||||
struct monitormount *g_MonitorMounts;
|
||||
|
||||
u32 g_TintedGlassEnabled = 0;
|
||||
s32 g_AlarmTimer = 0;
|
||||
|
|
@ -2145,7 +2145,7 @@ void projectileReset(struct projectile *projectile)
|
|||
projectile->unk018 = 0;
|
||||
projectile->unk01c = 0;
|
||||
|
||||
mtx4LoadIdentity((Mtxf *)&projectile->unk020);
|
||||
mtx4LoadIdentity(&projectile->unk020);
|
||||
|
||||
projectile->unk060 = 1;
|
||||
projectile->ownerprop = NULL;
|
||||
|
|
@ -2175,7 +2175,7 @@ void projectileReset(struct projectile *projectile)
|
|||
projectile->unk0f0 = 0;
|
||||
}
|
||||
|
||||
struct projectile *projectileGetNew(void)
|
||||
struct projectile *projectileAllocate(void)
|
||||
{
|
||||
s32 bestindex = -1;
|
||||
s32 i;
|
||||
|
|
@ -2224,17 +2224,17 @@ void func0f0685e4(struct prop *prop)
|
|||
{
|
||||
struct defaultobj *obj = prop->obj;
|
||||
|
||||
if (obj->hidden & OBJHFLAG_00000040) {
|
||||
if (obj->projectile->unk044) {
|
||||
projectileReset(obj->projectile->unk044);
|
||||
if (obj->hidden & OBJHFLAG_HANGINGMONITOR) {
|
||||
if (obj->monitormount->projectile) {
|
||||
projectileReset(obj->monitormount->projectile);
|
||||
} else {
|
||||
obj->projectile->unk044 = projectileGetNew();
|
||||
obj->monitormount->projectile = projectileAllocate();
|
||||
}
|
||||
} else if ((obj->hidden & OBJHFLAG_AIRBORNE) == 0) {
|
||||
if (obj->projectile) {
|
||||
projectileReset(obj->projectile);
|
||||
} else {
|
||||
obj->projectile = projectileGetNew();
|
||||
obj->projectile = projectileAllocate();
|
||||
}
|
||||
|
||||
if (obj->projectile) {
|
||||
|
|
@ -2248,8 +2248,8 @@ void objSetProjectileFlag4(struct prop *prop)
|
|||
struct defaultobj *obj = prop->obj;
|
||||
struct projectile *projectile = NULL;
|
||||
|
||||
if (obj->hidden & OBJHFLAG_00000040) {
|
||||
projectile = obj->projectile->unk044;
|
||||
if (obj->hidden & OBJHFLAG_HANGINGMONITOR) {
|
||||
projectile = obj->monitormount->projectile;
|
||||
} else if (obj->hidden & OBJHFLAG_AIRBORNE) {
|
||||
projectile = obj->projectile;
|
||||
}
|
||||
|
|
@ -2259,21 +2259,21 @@ void objSetProjectileFlag4(struct prop *prop)
|
|||
}
|
||||
}
|
||||
|
||||
void projectileSetFlag1(struct projectile *projectile)
|
||||
void monitormountFree(struct monitormount *mount)
|
||||
{
|
||||
projectile->flags |= PROJECTILEFLAG_00000001;
|
||||
mount->flags |= MONITORMOUNTFLAG_FREE;
|
||||
}
|
||||
|
||||
struct monitorthing *monitorthingGetNew(void)
|
||||
struct monitormount *monitormountAllocate(void)
|
||||
{
|
||||
s32 i;
|
||||
|
||||
for (i = 0; i < g_MaxMonitorThings; i++) {
|
||||
if (g_MonitorThings[i].flags & 0x00000001) {
|
||||
g_MonitorThings[i].flags = 0;
|
||||
g_MonitorThings[i].unk044 = NULL;
|
||||
if (g_MonitorMounts[i].flags & MONITORMOUNTFLAG_FREE) {
|
||||
g_MonitorMounts[i].flags = 0;
|
||||
g_MonitorMounts[i].projectile = NULL;
|
||||
|
||||
return &g_MonitorThings[i];
|
||||
return &g_MonitorMounts[i];
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -6384,17 +6384,17 @@ void func0f06ac90(struct prop *prop)
|
|||
if (prop && prop->obj) {
|
||||
struct defaultobj *obj = prop->obj;
|
||||
|
||||
if (obj->hidden & OBJHFLAG_00000040) {
|
||||
if (obj->projectile) {
|
||||
if (obj->projectile->unk044) {
|
||||
projectileFree(obj->projectile->unk044);
|
||||
if (obj->hidden & OBJHFLAG_HANGINGMONITOR) {
|
||||
if (obj->monitormount) {
|
||||
if (obj->monitormount->projectile) {
|
||||
projectileFree(obj->monitormount->projectile);
|
||||
}
|
||||
|
||||
projectileSetFlag1(obj->projectile);
|
||||
monitormountFree(obj->monitormount);
|
||||
}
|
||||
|
||||
obj->projectile = NULL;
|
||||
obj->hidden &= ~OBJHFLAG_00000040;
|
||||
obj->monitormount = NULL;
|
||||
obj->hidden &= ~OBJHFLAG_HANGINGMONITOR;
|
||||
} else if (obj->hidden & OBJHFLAG_AIRBORNE) {
|
||||
objEndFlight(obj);
|
||||
}
|
||||
|
|
@ -13692,7 +13692,7 @@ glabel func0f06ef44
|
|||
/* f06ef68: 31f80002 */ andi $t8,$t7,0x2
|
||||
/* f06ef6c: 53000047 */ beqzl $t8,.L0f06f08c
|
||||
/* f06ef70: 00001025 */ or $v0,$zero,$zero
|
||||
/* f06ef74: 0fc1a1bc */ jal monitorthingGetNew
|
||||
/* f06ef74: 0fc1a1bc */ jal monitormountAllocate
|
||||
/* f06ef78: 8c900004 */ lw $s0,0x4($a0)
|
||||
/* f06ef7c: 10400042 */ beqz $v0,.L0f06f088
|
||||
/* f06ef80: ae020048 */ sw $v0,0x48($s0)
|
||||
|
|
@ -14153,7 +14153,7 @@ bool propExplode(struct prop *prop, s32 exptype)
|
|||
func0f065e74(&parent->pos, parent->rooms, &pos, rooms);
|
||||
|
||||
result = explosionCreateComplex(NULL, &pos, rooms, exptype, playernum);
|
||||
} else if ((obj->hidden & (OBJHFLAG_00000040 | OBJHFLAG_AIRBORNE | OBJHFLAG_00020000)) == OBJHFLAG_00020000) {
|
||||
} else if ((obj->hidden & (OBJHFLAG_HANGINGMONITOR | OBJHFLAG_AIRBORNE | OBJHFLAG_00020000)) == OBJHFLAG_00020000) {
|
||||
struct coord sp5c;
|
||||
struct coord sp50;
|
||||
f32 ymin = modelBboxGetYMin(modelFindBboxRodata(obj->model));
|
||||
|
|
@ -17505,7 +17505,7 @@ glabel var7f1aa2c4
|
|||
//
|
||||
// func0f0685e4(prop);
|
||||
//
|
||||
// if (obj->hidden & OBJHFLAG_00000040) {
|
||||
// if (obj->hidden & OBJHFLAG_HANGINGMONITOR) {
|
||||
// projectile = obj->projectile->unk044;
|
||||
// } else if (obj->hidden & OBJHFLAG_AIRBORNE) {
|
||||
// projectile = obj->projectile;
|
||||
|
|
@ -17950,14 +17950,14 @@ void func0f07079c(struct prop *prop, bool fulltick)
|
|||
return;
|
||||
}
|
||||
|
||||
if (model->attachedtonode && (obj->hidden & OBJHFLAG_00000040)) {
|
||||
if (model->attachedtonode && (obj->hidden & OBJHFLAG_HANGINGMONITOR)) {
|
||||
Mtxf *mtx = model0001a5cc(model->attachedtomodel, model->attachedtonode, 0);
|
||||
struct modelrenderdata renderdata = {NULL, true, 3};
|
||||
u32 stack;
|
||||
Mtxf sp30;
|
||||
|
||||
prop->flags |= PROPFLAG_ONTHISSCREENTHISTICK | PROPFLAG_ONANYSCREENTHISTICK;
|
||||
mtx00015be4(mtx, &obj->monitorthing->matrix, &sp30);
|
||||
mtx00015be4(mtx, &obj->monitormount->matrix, &sp30);
|
||||
|
||||
renderdata.unk10 = gfxAllocate(model->filedata->nummatrices * sizeof(Mtxf));
|
||||
renderdata.unk00 = &sp30;
|
||||
|
|
@ -67975,8 +67975,8 @@ void objSetDropped(struct prop *prop, u32 droptype)
|
|||
|
||||
func0f0685e4(prop);
|
||||
|
||||
if ((obj->hidden & OBJHFLAG_00000040) && obj->projectile->unk044) {
|
||||
obj->projectile->unk044->droptype = droptype;
|
||||
if ((obj->hidden & OBJHFLAG_HANGINGMONITOR) && obj->monitormount->projectile) {
|
||||
obj->monitormount->projectile->droptype = droptype;
|
||||
} else if (obj->hidden & OBJHFLAG_AIRBORNE) {
|
||||
obj->projectile->droptype = droptype;
|
||||
}
|
||||
|
|
@ -68856,13 +68856,13 @@ bool objDrop(struct prop *prop, bool lazy)
|
|||
struct coord spe4;
|
||||
s16 rooms[8];
|
||||
|
||||
if ((obj->hidden & OBJHFLAG_00000040) && obj->projectile->unk044) {
|
||||
struct projectile *projectile2 = obj->projectile->unk044;
|
||||
if ((obj->hidden & OBJHFLAG_HANGINGMONITOR) && obj->monitormount->projectile) {
|
||||
struct projectile *projectile2 = obj->monitormount->projectile;
|
||||
|
||||
projectileSetFlag1(obj->projectile);
|
||||
monitormountFree(obj->monitormount);
|
||||
|
||||
obj->projectile = projectile2;
|
||||
obj->hidden &= ~OBJHFLAG_00000040;
|
||||
obj->hidden &= ~OBJHFLAG_HANGINGMONITOR;
|
||||
obj->hidden |= OBJHFLAG_AIRBORNE;
|
||||
}
|
||||
|
||||
|
|
@ -78149,7 +78149,7 @@ struct weaponobj *weaponCreate(bool musthaveprop, bool musthavemodel, struct mod
|
|||
#endif
|
||||
{
|
||||
if (g_WeaponSlots[i].base.prop->parent) {
|
||||
if (g_WeaponSlots[i].base.hidden & OBJHFLAG_00000040) {
|
||||
if (g_WeaponSlots[i].base.hidden & OBJHFLAG_HANGINGMONITOR) {
|
||||
usable = true;
|
||||
}
|
||||
} else {
|
||||
|
|
|
|||
|
|
@ -273,12 +273,12 @@ void propsReset(void)
|
|||
}
|
||||
|
||||
if (g_MaxMonitorThings == 0) {
|
||||
g_MonitorThings = 0;
|
||||
g_MonitorMounts = 0;
|
||||
} else {
|
||||
g_MonitorThings = mempAlloc(ALIGN16(g_MaxMonitorThings * sizeof(struct monitorthing)), MEMPOOL_STAGE);
|
||||
g_MonitorMounts = mempAlloc(ALIGN16(g_MaxMonitorThings * sizeof(struct monitormount)), MEMPOOL_STAGE);
|
||||
|
||||
for (i = 0; i < g_MaxMonitorThings; i++) {
|
||||
g_MonitorThings[i].flags = 0x00000001;
|
||||
g_MonitorMounts[i].flags = 0x00000001;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -1689,8 +1689,9 @@ void setupCreateSingleMonitor(struct singlemonitorobj *monitor, s32 cmdindex)
|
|||
monitor->screen = var8009ce98;
|
||||
tvscreenSetImageByNum(&monitor->screen, monitor->imagenum);
|
||||
|
||||
// The setup files never place any monitors on a -1 pad, so this code is
|
||||
// unreachable. It appears to allow attaching monitors to other objects.
|
||||
// In GE, monitors with a negative pad are hanging TVs which attach to a
|
||||
// hangingmonitors object, which is actually just the mount. In PD, hanging
|
||||
// monitors do not exist in the setup files so this code is unused.
|
||||
if (monitor->base.pad < 0 && (monitor->base.flags & OBJFLAG_INSIDEANOTHEROBJ) == 0) {
|
||||
s32 modelnum = monitor->base.modelnum;
|
||||
struct defaultobj *owner = (struct defaultobj *)setupGetCmdByIndex(cmdindex + monitor->owneroffset);
|
||||
|
|
@ -1709,10 +1710,10 @@ void setupCreateSingleMonitor(struct singlemonitorobj *monitor, s32 cmdindex)
|
|||
}
|
||||
|
||||
prop = objInitWithAutoModel(&monitor->base);
|
||||
monitor->base.monitorthing = monitorthingGetNew();
|
||||
monitor->base.monitormount = monitormountAllocate();
|
||||
|
||||
if (prop && monitor->base.monitorthing) {
|
||||
monitor->base.hidden |= OBJHFLAG_00000040;
|
||||
if (prop && monitor->base.monitormount) {
|
||||
monitor->base.hidden |= OBJHFLAG_HANGINGMONITOR;
|
||||
modelSetScale(monitor->base.model, monitor->base.model->scale * scale);
|
||||
monitor->base.model->attachedtomodel = owner->model;
|
||||
|
||||
|
|
@ -1736,7 +1737,7 @@ void setupCreateSingleMonitor(struct singlemonitorobj *monitor, s32 cmdindex)
|
|||
spa4.z = -spa4.z;
|
||||
|
||||
mtx4LoadTranslation(&spa4, &sp24);
|
||||
mtx00015be4(&sp64, &sp24, &monitor->base.monitorthing->matrix);
|
||||
mtx00015be4(&sp64, &sp24, &monitor->base.monitormount->matrix);
|
||||
}
|
||||
} else {
|
||||
setupCreateObject(&monitor->base, cmdindex);
|
||||
|
|
|
|||
|
|
@ -110,7 +110,7 @@ extern struct hatobj *g_HatSlots;
|
|||
extern struct ammocrateobj *g_AmmoCrates;
|
||||
extern struct defaultobj *var8009ce64;
|
||||
extern struct projectile *g_Projectiles;
|
||||
extern struct monitorthing *g_MonitorThings;
|
||||
extern struct monitormount *g_MonitorMounts;
|
||||
extern u32 var8009ce70;
|
||||
extern u32 var8009ce74;
|
||||
extern u32 var8009ce78[4];
|
||||
|
|
|
|||
|
|
@ -2468,6 +2468,9 @@
|
|||
#define MODFILE_MPSETUP 2
|
||||
#define MODFILE_BOSS 4
|
||||
|
||||
// Might be the same flags as PROJECTILEFLAG
|
||||
#define MONITORMOUNTFLAG_FREE 0x00000001
|
||||
|
||||
#define MOVEMODE_WALK 0
|
||||
#define MOVEMODE_BIKE 3
|
||||
#define MOVEMODE_GRAB 4
|
||||
|
|
@ -3045,7 +3048,7 @@
|
|||
#define OBJHFLAG_ISRETICK 0x00000008
|
||||
#define OBJHFLAG_TAGGED 0x00000010
|
||||
#define OBJHFLAG_00000020 0x00000020 // thrown knife
|
||||
#define OBJHFLAG_00000040 0x00000040
|
||||
#define OBJHFLAG_HANGINGMONITOR 0x00000040
|
||||
#define OBJHFLAG_AIRBORNE 0x00000080
|
||||
#define OBJHFLAG_00000100 0x00000100
|
||||
#define OBJHFLAG_00000200 0x00000200
|
||||
|
|
|
|||
|
|
@ -68,11 +68,11 @@ u32 func0f068218(void);
|
|||
void projectileFree(struct projectile *projectile);
|
||||
void projectilesUnrefOwner(struct prop *owner);
|
||||
void projectileReset(struct projectile *projectile);
|
||||
struct projectile *projectileGetNew(void);
|
||||
struct projectile *projectileAllocate(void);
|
||||
void func0f0685e4(struct prop *prop);
|
||||
void objSetProjectileFlag4(struct prop *prop);
|
||||
void projectileSetFlag1(struct projectile *projectile);
|
||||
struct monitorthing *monitorthingGetNew(void);
|
||||
void monitormountFree(struct monitormount *mount);
|
||||
struct monitormount *monitormountAllocate(void);
|
||||
s32 objGetDestroyedThird(struct defaultobj *obj);
|
||||
s32 objGetDestroyedValue(struct defaultobj *obj);
|
||||
struct modelnode *func0f0687e4(struct model *model);
|
||||
|
|
|
|||
|
|
@ -1471,22 +1471,7 @@ struct projectile {
|
|||
/*0x014*/ f32 unk014;
|
||||
/*0x018*/ f32 unk018;
|
||||
/*0x01c*/ f32 unk01c;
|
||||
/*0x020*/ f32 unk020;
|
||||
/*0x024*/ u32 unk024;
|
||||
/*0x028*/ u32 unk028;
|
||||
/*0x02c*/ u32 unk02c;
|
||||
/*0x030*/ u32 unk030;
|
||||
/*0x034*/ f32 unk034;
|
||||
/*0x038*/ f32 unk038;
|
||||
/*0x03c*/ f32 unk03c;
|
||||
/*0x040*/ u32 unk040;
|
||||
/*0x044*/ struct projectile *unk044;
|
||||
/*0x048*/ u32 unk048;
|
||||
/*0x04c*/ u32 unk04c;
|
||||
/*0x050*/ u32 unk050;
|
||||
/*0x054*/ u32 unk054;
|
||||
/*0x058*/ u32 unk058;
|
||||
/*0x05c*/ u32 unk05c;
|
||||
/*0x020*/ Mtxf unk020;
|
||||
/*0x060*/ f32 unk060;
|
||||
/*0x064*/ u32 unk064;
|
||||
/*0x068*/ u32 unk068;
|
||||
|
|
@ -1530,10 +1515,10 @@ struct projectile {
|
|||
/*0x108*/ struct prop *unk108;
|
||||
};
|
||||
|
||||
struct monitorthing {
|
||||
struct monitormount {
|
||||
/*0x000*/ u32 flags;
|
||||
/*0x004*/ Mtxf matrix;
|
||||
/*0x044*/ struct projectile *unk044;
|
||||
/*0x044*/ struct projectile *projectile;
|
||||
};
|
||||
|
||||
struct tvscreen {
|
||||
|
|
@ -1618,7 +1603,7 @@ struct defaultobj {
|
|||
};
|
||||
union {
|
||||
/*0x48*/ struct projectile *projectile;
|
||||
/*0x48*/ struct monitorthing *monitorthing;
|
||||
/*0x48*/ struct monitormount *monitormount;
|
||||
};
|
||||
/*0x4c*/ s16 damage;
|
||||
/*0x4e*/ s16 maxdamage;
|
||||
|
|
|
|||
Loading…
Reference in New Issue