Discover more object 3 flags
This commit is contained in:
parent
93acca065d
commit
edebe0b1f0
|
@ -4614,7 +4614,7 @@ void bgunCreateThrownProjectile(s32 handnum, struct gset *gset)
|
|||
weapon->base.projectile->flags |= PROJECTILEFLAG_00000002;
|
||||
weapon->base.projectile->unk08c = 0.1f;
|
||||
weapon->base.projectile->pickuptimer240 = TICKS(240);
|
||||
weapon->base.hidden |= OBJHFLAG_00000020;
|
||||
weapon->base.hidden |= OBJHFLAG_THROWNKNIFE;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -232,7 +232,7 @@ void botSpawn(struct chrdata *chr, u8 respawning)
|
|||
obj = prop->obj;
|
||||
|
||||
if (obj) {
|
||||
obj->hidden |= OBJHFLAG_REAPABLE;
|
||||
obj->hidden |= OBJHFLAG_DELETING;
|
||||
}
|
||||
|
||||
prop = prop->next;
|
||||
|
@ -478,7 +478,7 @@ bool botTestPropForPickup(struct prop *prop, struct chrdata *chr)
|
|||
if (1);
|
||||
|
||||
#if VERSION >= VERSION_NTSC_1_0
|
||||
if ((obj->hidden & OBJHFLAG_REAPABLE) || (obj->flags & OBJFLAG_THROWNLAPTOP)) {
|
||||
if ((obj->hidden & OBJHFLAG_DELETING) || (obj->flags & OBJFLAG_THROWNLAPTOP)) {
|
||||
return false;
|
||||
}
|
||||
#else
|
||||
|
@ -1241,7 +1241,7 @@ void botDisarm(struct chrdata *chr, struct prop *attackerprop)
|
|||
if (chr->weapons_held[HAND_LEFT]) {
|
||||
obj = chr->weapons_held[HAND_LEFT]->obj;
|
||||
|
||||
obj->hidden |= OBJHFLAG_REAPABLE;
|
||||
obj->hidden |= OBJHFLAG_DELETING;
|
||||
chr->weapons_held[HAND_LEFT] = NULL;
|
||||
}
|
||||
|
||||
|
|
|
@ -1060,7 +1060,7 @@ bool botinvSwitchToWeapon(struct chrdata *chr, s32 weaponnum, s32 funcnum)
|
|||
aibot->reaperspeed[i] = 0;
|
||||
|
||||
if (chr->weapons_held[i]) {
|
||||
chr->weapons_held[i]->obj->hidden |= OBJHFLAG_REAPABLE;
|
||||
chr->weapons_held[i]->obj->hidden |= OBJHFLAG_DELETING;
|
||||
chr->weapons_held[i] = NULL;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1944,13 +1944,13 @@ void chr0f022214(struct chrdata *chr, struct prop *prop, bool fulltick)
|
|||
struct prop *child;
|
||||
struct prop *next;
|
||||
|
||||
if (obj->hidden & OBJHFLAG_REAPABLE) {
|
||||
if (obj->hidden & OBJHFLAG_DELETING) {
|
||||
objFree(obj, true, obj->hidden2 & OBJH2FLAG_CANREGEN);
|
||||
return;
|
||||
}
|
||||
|
||||
if (model->attachedtomodel && model->attachedtonode
|
||||
&& (obj->hidden & OBJHFLAG_00000800) == 0
|
||||
&& (obj->hidden & OBJHFLAG_GONE) == 0
|
||||
&& (obj->flags2 & OBJFLAG2_INVISIBLE) == 0) {
|
||||
Mtxf *sp104 = modelFindNodeMtx(model->attachedtomodel, model->attachedtonode, 0);
|
||||
struct modelrenderdata thing = {NULL, 1, 3};
|
||||
|
|
|
@ -7653,7 +7653,7 @@ bool chrConsiderGrenadeThrow(struct chrdata *chr, u32 attackflags, u32 entityid)
|
|||
|
||||
if (prop) {
|
||||
weapon = prop->weapon;
|
||||
weapon->base.hidden |= OBJHFLAG_00000800;
|
||||
weapon->base.hidden |= OBJHFLAG_GONE;
|
||||
chrThrowGrenade(chr, rightprop == NULL ? 0 : 1, true);
|
||||
chr->act_throwgrenade.flags = attackflags;
|
||||
chr->act_throwgrenade.entityid = entityid;
|
||||
|
@ -11304,19 +11304,21 @@ void chrTickThrowGrenade(struct chrdata *chr)
|
|||
|
||||
model = chr->model;
|
||||
frame = modelGetCurAnimFrame(model);
|
||||
hand = model->anim->flip ? 1 : 0;
|
||||
hand = model->anim->flip ? HAND_LEFT : HAND_RIGHT;
|
||||
weaponprop = chrGetHeldProp(chr, hand);
|
||||
|
||||
if ((frame >= 20 && weaponprop && modelGetAnimNum(model) == ANIM_THROWGRENADE_STANDING) ||
|
||||
(frame >= 1 && weaponprop && modelGetAnimNum(model) == ANIM_THROWGRENADE_NOPIN) ||
|
||||
(frame >= 1 && weaponprop && modelGetAnimNum(model) == ANIM_THROWGRENADE_CROUCHING)) {
|
||||
// Decide at which frame the grenade should become visible in the chr's hand
|
||||
if ((frame >= 20 && weaponprop && modelGetAnimNum(model) == ANIM_THROWGRENADE_STANDING)
|
||||
|| (frame >= 1 && weaponprop && modelGetAnimNum(model) == ANIM_THROWGRENADE_NOPIN)
|
||||
|| (frame >= 1 && weaponprop && modelGetAnimNum(model) == ANIM_THROWGRENADE_CROUCHING)) {
|
||||
obj = weaponprop->obj;
|
||||
obj->hidden &= ~OBJHFLAG_00000800;
|
||||
obj->hidden &= ~OBJHFLAG_GONE;
|
||||
}
|
||||
|
||||
if ((frame >= 119 && weaponprop && modelGetAnimNum(model) == ANIM_THROWGRENADE_STANDING) ||
|
||||
(frame >= 57 && weaponprop && modelGetAnimNum(model) == ANIM_THROWGRENADE_NOPIN) ||
|
||||
(frame >= 58 && weaponprop && modelGetAnimNum(model) == ANIM_THROWGRENADE_CROUCHING)) {
|
||||
// Decide at which frame the grenade leaves the chr's hand
|
||||
if ((frame >= 119 && weaponprop && modelGetAnimNum(model) == ANIM_THROWGRENADE_STANDING)
|
||||
|| (frame >= 57 && weaponprop && modelGetAnimNum(model) == ANIM_THROWGRENADE_NOPIN)
|
||||
|| (frame >= 58 && weaponprop && modelGetAnimNum(model) == ANIM_THROWGRENADE_CROUCHING)) {
|
||||
weapon = weaponprop->weapon;
|
||||
objSetDropped(weaponprop, DROPTYPE_THROWGRENADE);
|
||||
chr->hidden |= CHRHFLAG_DROPPINGITEM;
|
||||
|
@ -11328,9 +11330,9 @@ void chrTickThrowGrenade(struct chrdata *chr)
|
|||
if (frame2 >= modelGetAnimEndFrame(model)) {
|
||||
chrStop(chr);
|
||||
} else {
|
||||
if ((frame >= 87 && frame <= 110 && modelGetAnimNum(model) == ANIM_THROWGRENADE_STANDING) ||
|
||||
(frame >= 5 && frame <= 45 && modelGetAnimNum(model) == ANIM_THROWGRENADE_NOPIN) ||
|
||||
((frame >= 20 && frame <= 45 && modelGetAnimNum(model) == ANIM_THROWGRENADE_CROUCHING))) {
|
||||
if ((frame >= 87 && frame <= 110 && modelGetAnimNum(model) == ANIM_THROWGRENADE_STANDING)
|
||||
|| (frame >= 5 && frame <= 45 && modelGetAnimNum(model) == ANIM_THROWGRENADE_NOPIN)
|
||||
|| ((frame >= 20 && frame <= 45 && modelGetAnimNum(model) == ANIM_THROWGRENADE_CROUCHING))) {
|
||||
f32 value = chrGetRangedSpeed(chr, 1, 3.2);
|
||||
chrTurn(chr, 1, 110, value, 0);
|
||||
}
|
||||
|
|
|
@ -1021,7 +1021,7 @@ struct prop *scenarioCreateObj(s32 modelnum, s16 padnum, f32 arg2, u32 flags, u3
|
|||
obj->flags2 = flags2;
|
||||
obj->flags3 = flags3;
|
||||
obj->extrascale = arg2 * 256;
|
||||
obj->hidden2 &= ~OBJHFLAG_REAPABLE;
|
||||
obj->hidden2 &= ~OBJHFLAG_DELETING;
|
||||
|
||||
setupCreateObject(obj, 123);
|
||||
propActivate(obj->prop);
|
||||
|
@ -1137,7 +1137,7 @@ s32 scenarioPickUpBriefcase(struct chrdata *chr, struct prop *prop)
|
|||
setCurrentPlayerNum(prevplayernum);
|
||||
|
||||
if (chr->aibot) {
|
||||
obj->hidden |= OBJHFLAG_REAPABLE;
|
||||
obj->hidden |= OBJHFLAG_DELETING;
|
||||
return TICKOP_NONE;
|
||||
}
|
||||
|
||||
|
@ -1308,7 +1308,7 @@ s32 scenarioPickUpBriefcase(struct chrdata *chr, struct prop *prop)
|
|||
|
||||
if (chr->aibot) {
|
||||
botinvGiveSingleWeapon(chr, WEAPON_BRIEFCASE2);
|
||||
obj->hidden |= OBJHFLAG_REAPABLE;
|
||||
obj->hidden |= OBJHFLAG_DELETING;
|
||||
return TICKOP_NONE;
|
||||
} else {
|
||||
invGiveWeaponsByProp(prop);
|
||||
|
@ -1437,9 +1437,9 @@ s32 scenarioPickUpUplink(struct chrdata *chr, struct prop *prop)
|
|||
chr->aibot->hasuplink = true;
|
||||
|
||||
#if VERSION >= VERSION_NTSC_1_0
|
||||
obj->hidden |= OBJHFLAG_REAPABLE;
|
||||
obj->hidden |= OBJHFLAG_DELETING;
|
||||
#else
|
||||
prop->obj->hidden |= OBJHFLAG_REAPABLE;
|
||||
prop->obj->hidden |= OBJHFLAG_DELETING;
|
||||
#endif
|
||||
|
||||
return TICKOP_NONE;
|
||||
|
|
|
@ -240,7 +240,7 @@ void htbCreateUplink(void)
|
|||
if (count > 0) {
|
||||
count = random() % count;
|
||||
var800869ec = candidates[count];
|
||||
var800869ec->hidden |= OBJHFLAG_REAPABLE;
|
||||
var800869ec->hidden |= OBJHFLAG_DELETING;
|
||||
var800869ec->hidden2 |= OBJH2FLAG_CANREGEN;
|
||||
padnum = var800869ec->pad;
|
||||
} else if (g_ScenarioData.htm.numpads > 0) {
|
||||
|
|
|
@ -158,7 +158,7 @@ void htbRemoveAmmoCrateAtPad(s16 padnum)
|
|||
if (obj->pad == padnum
|
||||
&& (obj->type == OBJTYPE_AMMOCRATE || obj->type == OBJTYPE_MULTIAMMOCRATE)
|
||||
&& obj->modelnum == MODEL_MULTI_AMMO_CRATE) {
|
||||
obj->hidden |= OBJHFLAG_REAPABLE;
|
||||
obj->hidden |= OBJHFLAG_DELETING;
|
||||
obj->hidden2 &= ~OBJH2FLAG_CANREGEN;
|
||||
return;
|
||||
}
|
||||
|
@ -243,7 +243,7 @@ void htbCreateToken(void)
|
|||
count = random() % count;
|
||||
var800869ec = candidates[count];
|
||||
g_ScenarioData.htb.tokenpad = var800869ec->pad;
|
||||
var800869ec->hidden |= OBJHFLAG_REAPABLE;
|
||||
var800869ec->hidden |= OBJHFLAG_DELETING;
|
||||
var800869ec->hidden2 |= OBJH2FLAG_CANREGEN;
|
||||
} else if (g_ScenarioData.htb.nextindex > 0) {
|
||||
g_ScenarioData.htb.tokenpad = g_ScenarioData.htb.padnums[random() % g_ScenarioData.htb.nextindex];
|
||||
|
|
|
@ -500,7 +500,7 @@ void playerStartNewLife(void)
|
|||
struct defaultobj *obj = prop->obj;
|
||||
|
||||
if (obj) {
|
||||
obj->hidden |= OBJHFLAG_REAPABLE;
|
||||
obj->hidden |= OBJHFLAG_DELETING;
|
||||
}
|
||||
|
||||
prop = prop->next;
|
||||
|
@ -5427,11 +5427,11 @@ s32 playerTickThirdPerson(struct prop *prop)
|
|||
chr->sumground = chr->manground * (PAL ? 8.417509f : 9.999998f);
|
||||
|
||||
if (g_Vars.mplayerisrunning) {
|
||||
if (chr->weapons_held[0] && (chr->weapons_held[0]->obj->hidden & OBJHFLAG_REAPABLE)) {
|
||||
if (chr->weapons_held[0] && (chr->weapons_held[0]->obj->hidden & OBJHFLAG_DELETING)) {
|
||||
objFree(chr->weapons_held[0]->obj, true, false);
|
||||
}
|
||||
|
||||
if (chr->weapons_held[1] && (chr->weapons_held[1]->obj->hidden & OBJHFLAG_REAPABLE)) {
|
||||
if (chr->weapons_held[1] && (chr->weapons_held[1]->obj->hidden & OBJHFLAG_DELETING)) {
|
||||
objFree(chr->weapons_held[1]->obj, true, false);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1368,13 +1368,14 @@ void propExecuteTickOperation(struct prop *prop, s32 op)
|
|||
if (op == TICKOP_FREE) {
|
||||
if ((prop->type == PROPTYPE_WEAPON || prop->type == PROPTYPE_OBJ)
|
||||
&& prop->obj && (prop->obj->hidden2 & OBJH2FLAG_CANREGEN)) {
|
||||
// Start the wait timer for regen
|
||||
struct defaultobj *obj = prop->obj;
|
||||
|
||||
prop->timetoregen = TICKS(1200);
|
||||
|
||||
obj->damage = 0;
|
||||
obj->hidden |= OBJHFLAG_00000800;
|
||||
obj->hidden &= ~OBJHFLAG_REAPABLE;
|
||||
obj->hidden |= OBJHFLAG_GONE;
|
||||
obj->hidden &= ~OBJHFLAG_DELETING;
|
||||
obj->hidden2 &= ~OBJH2FLAG_DESTROYED;
|
||||
|
||||
propDeregisterRooms(prop);
|
||||
|
@ -1384,6 +1385,7 @@ void propExecuteTickOperation(struct prop *prop, s32 op)
|
|||
propUnpause(prop);
|
||||
}
|
||||
} else {
|
||||
// Prop doesn't regen, so free it
|
||||
propDeregisterRooms(prop);
|
||||
propDelist(prop);
|
||||
propDisable(prop);
|
||||
|
|
|
@ -269,7 +269,7 @@ void objUpdateLinkedScenery(struct defaultobj *obj, struct prop *prop)
|
|||
objCreateDebris(obj, prop);
|
||||
|
||||
link->trigger->flags2 |= OBJFLAG2_INVISIBLE;
|
||||
link->trigger->hidden |= OBJHFLAG_REAPABLE;
|
||||
link->trigger->hidden |= OBJHFLAG_DELETING;
|
||||
|
||||
if (link->unexp) {
|
||||
link->unexp->flags2 |= OBJFLAG2_INVISIBLE;
|
||||
|
@ -1104,7 +1104,7 @@ struct projectile *projectileAllocate(void)
|
|||
objFreeEmbedmentOrProjectile(g_Projectiles[bestindex].obj->prop);
|
||||
}
|
||||
|
||||
g_Projectiles[bestindex].obj->hidden |= OBJHFLAG_REAPABLE;
|
||||
g_Projectiles[bestindex].obj->hidden |= OBJHFLAG_DELETING;
|
||||
}
|
||||
|
||||
projectileReset(&g_Projectiles[bestindex]);
|
||||
|
@ -3282,7 +3282,7 @@ s32 func0f06cd00(struct defaultobj *obj, struct coord *pos, struct coord *arg2,
|
|||
s0 = false;
|
||||
sparksCreate(prop->rooms[0], prop, &hitthing.unk00, &spa4, &hitthing.unk0c, SPARKTYPE_DEEPWATER);
|
||||
propsnd0f0939f8(0, prop, SFX_HIT_WATER, -1, -1, 1024, 0, 0, 0, -1.0f, 0, -1, -1.0f, -1.0f, -1.0f);
|
||||
obj->hidden |= OBJHFLAG_REAPABLE;
|
||||
obj->hidden |= OBJHFLAG_DELETING;
|
||||
}
|
||||
}
|
||||
} else {
|
||||
|
@ -3876,7 +3876,7 @@ void knifePlayWooshSound(struct defaultobj *obj)
|
|||
if (obj->hidden & OBJHFLAG_PROJECTILE) {
|
||||
if ((obj->projectile->flags & PROJECTILEFLAG_AIRBORNE)
|
||||
&& obj->projectile->bouncecount <= 0
|
||||
&& (obj->hidden & OBJHFLAG_00000020)) {
|
||||
&& (obj->hidden & OBJHFLAG_THROWNKNIFE)) {
|
||||
u16 soundnums[] = { SFX_8074, SFX_8074, SFX_8074 };
|
||||
s32 index = random() % ARRAYCOUNT(soundnums);
|
||||
|
||||
|
@ -3889,7 +3889,7 @@ void knifePlayWooshSound(struct defaultobj *obj)
|
|||
}
|
||||
}
|
||||
} else {
|
||||
obj->hidden &= ~OBJHFLAG_00000020;
|
||||
obj->hidden &= ~OBJHFLAG_THROWNKNIFE;
|
||||
func0f0926bc(obj->prop, 1, 0xffff);
|
||||
}
|
||||
}
|
||||
|
@ -4156,7 +4156,7 @@ void objLand(struct prop *prop, struct coord *arg1, struct coord *arg2, bool *em
|
|||
*embedded = true;
|
||||
}
|
||||
} else {
|
||||
obj->hidden |= OBJHFLAG_REAPABLE;
|
||||
obj->hidden |= OBJHFLAG_DELETING;
|
||||
}
|
||||
} else if (obj->type == OBJTYPE_WEAPON) {
|
||||
struct weaponobj *weapon = (struct weaponobj *)obj;
|
||||
|
@ -4226,7 +4226,7 @@ void ammocrateTick(struct prop *prop)
|
|||
|
||||
if (obj->flags & OBJFLAG_AMMOCRATE_EXPLODENOW) {
|
||||
propExplode(prop, EXPLOSIONTYPE_12);
|
||||
obj->hidden |= OBJHFLAG_REAPABLE;
|
||||
obj->hidden |= OBJHFLAG_DELETING;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -4328,7 +4328,7 @@ void weaponTick(struct prop *prop)
|
|||
propExplode(prop, (obj->flags2 & OBJFLAG2_WEAPON_HUGEEXP) ? EXPLOSIONTYPE_HUGE17 : EXPLOSIONTYPE_ROCKET);
|
||||
}
|
||||
|
||||
obj->hidden |= OBJHFLAG_REAPABLE;
|
||||
obj->hidden |= OBJHFLAG_DELETING;
|
||||
|
||||
#if VERSION >= VERSION_NTSC_1_0
|
||||
{
|
||||
|
@ -4370,7 +4370,7 @@ void weaponTick(struct prop *prop)
|
|||
nbombCreateStorm_hack(&prop->pos, ownerprop, prop);
|
||||
propUnsetDangerous(prop);
|
||||
|
||||
obj->hidden |= OBJHFLAG_REAPABLE;
|
||||
obj->hidden |= OBJHFLAG_DELETING;
|
||||
|
||||
#if VERSION >= VERSION_NTSC_1_0
|
||||
{
|
||||
|
@ -4397,7 +4397,7 @@ void weaponTick(struct prop *prop)
|
|||
if (weapon->timer240 == 0) {
|
||||
propExplode(prop, (obj->flags2 & OBJFLAG2_WEAPON_HUGEEXP) ? EXPLOSIONTYPE_HUGE17 : EXPLOSIONTYPE_ROCKET);
|
||||
|
||||
obj->hidden |= OBJHFLAG_REAPABLE;
|
||||
obj->hidden |= OBJHFLAG_DELETING;
|
||||
|
||||
#if VERSION >= VERSION_NTSC_1_0
|
||||
{
|
||||
|
@ -4424,7 +4424,7 @@ void weaponTick(struct prop *prop)
|
|||
if (weapon->timer240 < 0) {
|
||||
if (propExplode(prop, (obj->flags2 & OBJFLAG2_WEAPON_HUGEEXP) ? EXPLOSIONTYPE_HUGE17 : EXPLOSIONTYPE_ROCKET)) {
|
||||
weapon->timer240 = -1;
|
||||
obj->hidden |= OBJHFLAG_REAPABLE;
|
||||
obj->hidden |= OBJHFLAG_DELETING;
|
||||
}
|
||||
}
|
||||
} else {
|
||||
|
@ -4482,7 +4482,7 @@ void weaponTick(struct prop *prop)
|
|||
|
||||
if (propExplode(prop, exptype)) {
|
||||
weapon->timer240 = -1;
|
||||
obj->hidden |= OBJHFLAG_REAPABLE;
|
||||
obj->hidden |= OBJHFLAG_DELETING;
|
||||
}
|
||||
}
|
||||
} else if (weapon->weaponnum == WEAPON_PROXIMITYMINE
|
||||
|
@ -4528,7 +4528,7 @@ void weaponTick(struct prop *prop)
|
|||
nbombCreateStorm_hack(&prop->pos, ownerprop, prop);
|
||||
propUnsetDangerous(prop);
|
||||
|
||||
obj->hidden |= OBJHFLAG_REAPABLE;
|
||||
obj->hidden |= OBJHFLAG_DELETING;
|
||||
|
||||
#if VERSION >= VERSION_NTSC_1_0
|
||||
{
|
||||
|
@ -4562,7 +4562,7 @@ void weaponTick(struct prop *prop)
|
|||
|
||||
if (propExplode(prop, exptype)) {
|
||||
weapon->timer240 = -1;
|
||||
obj->hidden |= OBJHFLAG_REAPABLE;
|
||||
obj->hidden |= OBJHFLAG_DELETING;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -4682,7 +4682,7 @@ void weaponTick(struct prop *prop)
|
|||
|
||||
if (weapon->fadeouttimer60 <= 0) {
|
||||
weapon->fadeouttimer60 = 0;
|
||||
obj->hidden |= OBJHFLAG_REAPABLE;
|
||||
obj->hidden |= OBJHFLAG_DELETING;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -4727,7 +4727,7 @@ void func0f0706f8(struct prop *prop, bool arg1)
|
|||
struct defaultobj *obj = prop->obj;
|
||||
struct prop *child;
|
||||
|
||||
if (obj->hidden & OBJHFLAG_REAPABLE) {
|
||||
if (obj->hidden & OBJHFLAG_DELETING) {
|
||||
objFree(obj, true, obj->hidden2 & OBJH2FLAG_CANREGEN);
|
||||
} else {
|
||||
prop->flags &= ~PROPFLAG_ONTHISSCREENTHISTICK;
|
||||
|
@ -4751,7 +4751,7 @@ void func0f07079c(struct prop *prop, bool fulltick)
|
|||
struct prop *child;
|
||||
struct prop *next;
|
||||
|
||||
if (obj->hidden & OBJHFLAG_REAPABLE) {
|
||||
if (obj->hidden & OBJHFLAG_DELETING) {
|
||||
objFree(obj, true, obj->hidden2 & OBJH2FLAG_CANREGEN);
|
||||
return;
|
||||
}
|
||||
|
@ -6678,7 +6678,7 @@ s32 projectileTick(struct defaultobj *obj, bool *embedded)
|
|||
|| prop->pos.y < -20000.0f || prop->pos.y > 32000.0f
|
||||
|| prop->pos.x < -32000.0f || prop->pos.x > 32000.0f
|
||||
|| prop->pos.z < -32000.0f || prop->pos.z > 32000.0f) {
|
||||
obj->hidden |= OBJHFLAG_REAPABLE;
|
||||
obj->hidden |= OBJHFLAG_DELETING;
|
||||
}
|
||||
|
||||
projectile->flighttime240 += g_Vars.lvupdate240;
|
||||
|
@ -7215,7 +7215,7 @@ s32 projectileTick(struct defaultobj *obj, bool *embedded)
|
|||
cdresult = CDRESULT_COLLISION;
|
||||
|
||||
if (geoflags & GEOFLAG_DIE) {
|
||||
obj->hidden |= OBJHFLAG_REAPABLE;
|
||||
obj->hidden |= OBJHFLAG_DELETING;
|
||||
}
|
||||
} else {
|
||||
roomnum = cdFindFloorRoomYColourNormalPropAtPos(&prop->pos, prop->rooms, &sp390, &obj->floorcol, &sp380, NULL);
|
||||
|
@ -7304,7 +7304,7 @@ s32 projectileTick(struct defaultobj *obj, bool *embedded)
|
|||
projectile->bounceframe = g_Vars.lvframe60;
|
||||
|
||||
if ((obj->hidden & OBJHFLAG_00010000) == 0) {
|
||||
obj->hidden |= OBJHFLAG_00000100;
|
||||
obj->hidden |= OBJHFLAG_DAMAGEFORBOUNCE;
|
||||
}
|
||||
|
||||
if (sp350) {
|
||||
|
@ -7530,7 +7530,7 @@ s32 projectileTick(struct defaultobj *obj, bool *embedded)
|
|||
|
||||
#if VERSION >= VERSION_NTSC_1_0
|
||||
if (geoflags & GEOFLAG_DIE) {
|
||||
obj->hidden |= OBJHFLAG_REAPABLE;
|
||||
obj->hidden |= OBJHFLAG_DELETING;
|
||||
}
|
||||
#endif
|
||||
} else {
|
||||
|
@ -10026,7 +10026,7 @@ void chopperTickFall(struct prop *chopperprop)
|
|||
// reaped once it reaches the lower barrier
|
||||
if (chopperprop->pos.y < -30000) {
|
||||
func0f0926bc(chopperprop, 1, 0xffff);
|
||||
obj->hidden |= OBJHFLAG_REAPABLE;
|
||||
obj->hidden |= OBJHFLAG_DELETING;
|
||||
} else {
|
||||
chopperIncrementMovement(chopperprop, goalroty, chopper->rotx < 0 ? M_PI : -M_PI, &speed, false);
|
||||
}
|
||||
|
@ -10422,7 +10422,7 @@ void hovercarTick(struct prop *prop)
|
|||
|
||||
func0f0926bc(prop, 1, 0xffff);
|
||||
explosionCreate(NULL, &prop->pos, prop->rooms, EXPLOSIONTYPE_7, g_Vars.currentplayernum, true, &sp1e4, sp1d6, &sp1d8);
|
||||
hovercar->base.hidden |= OBJHFLAG_REAPABLE;
|
||||
hovercar->base.hidden |= OBJHFLAG_DELETING;
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -10881,7 +10881,7 @@ u32 objTick(struct prop *prop)
|
|||
if (obj->flags & OBJFLAG_INSIDEANOTHEROBJ) {
|
||||
propDeregisterRooms(prop);
|
||||
propDelist(prop);
|
||||
obj->hidden &= ~OBJHFLAG_00000800;
|
||||
obj->hidden &= ~OBJHFLAG_GONE;
|
||||
cmdindex = setupGetCmdIndexByProp(prop);
|
||||
|
||||
// Find the parent obj (pad is repurposed here)
|
||||
|
@ -10896,7 +10896,7 @@ u32 objTick(struct prop *prop)
|
|||
} else {
|
||||
propEnable(prop);
|
||||
setup0f0923d4(obj);
|
||||
obj->hidden &= ~OBJHFLAG_00000800;
|
||||
obj->hidden &= ~OBJHFLAG_GONE;
|
||||
}
|
||||
} else {
|
||||
// Object was previously damaged. Maybe glass?
|
||||
|
@ -10975,7 +10975,7 @@ s32 objTickPlayer(struct prop *prop)
|
|||
return TICKOP_RETICK;
|
||||
}
|
||||
|
||||
if (obj->hidden & OBJHFLAG_REAPABLE) {
|
||||
if (obj->hidden & OBJHFLAG_DELETING) {
|
||||
pass = false;
|
||||
|
||||
if (obj->type == OBJTYPE_TINTEDGLASS) {
|
||||
|
@ -11267,7 +11267,7 @@ s32 objTickPlayer(struct prop *prop)
|
|||
pass2 = posIsInDrawDistance(&prop->pos);
|
||||
} else if (obj->flags2 & OBJFLAG2_CANFILLVIEWPORT) {
|
||||
pass2 = posIsInDrawDistance(&prop->pos);
|
||||
} else if ((obj->hidden & OBJHFLAG_00000800) == 0 && (obj->flags2 & OBJFLAG2_INVISIBLE) == 0) {
|
||||
} else if ((obj->hidden & OBJHFLAG_GONE) == 0 && (obj->flags2 & OBJFLAG2_INVISIBLE) == 0) {
|
||||
pass2 = func0f08e8ac(prop, &prop->pos, modelGetEffectiveScale(model), sp564);
|
||||
} else {
|
||||
pass2 = false;
|
||||
|
@ -11324,8 +11324,8 @@ s32 objTickPlayer(struct prop *prop)
|
|||
}
|
||||
}
|
||||
|
||||
if (obj->hidden & OBJHFLAG_00000100) {
|
||||
obj->hidden &= ~OBJHFLAG_00000100;
|
||||
if (obj->hidden & OBJHFLAG_DAMAGEFORBOUNCE) {
|
||||
obj->hidden &= ~OBJHFLAG_DAMAGEFORBOUNCE;
|
||||
objDamage(obj, RANDOMFRAC() * 4.0f + 2.0f, &prop->pos, WEAPON_NONE, (obj->hidden & 0xf0000000) >> 28);
|
||||
}
|
||||
|
||||
|
@ -14723,7 +14723,7 @@ void objCheckDestroyed(struct defaultobj *obj, struct coord *pos, s32 playernum)
|
|||
explosionCreateComplex(prop, pos, rooms, exptype, playernum);
|
||||
|
||||
if (obj->flags2 & OBJFLAG2_REMOVEWHENDESTROYED) {
|
||||
obj->hidden |= OBJHFLAG_REAPABLE;
|
||||
obj->hidden |= OBJHFLAG_DELETING;
|
||||
} else if (obj->type == OBJTYPE_CHOPPER) {
|
||||
struct chopperobj *chopper = (struct chopperobj *)obj;
|
||||
|
||||
|
@ -15115,7 +15115,7 @@ void glassDestroy(struct defaultobj *obj)
|
|||
#endif
|
||||
|
||||
obj->damage = 0;
|
||||
obj->hidden |= OBJHFLAG_REAPABLE;
|
||||
obj->hidden |= OBJHFLAG_DELETING;
|
||||
obj->hidden2 |= OBJH2FLAG_DESTROYED;
|
||||
}
|
||||
|
||||
|
@ -15320,7 +15320,7 @@ void objDamage(struct defaultobj *obj, f32 damage, struct coord *pos, s32 weapon
|
|||
|
||||
if (obj->flags2 & OBJFLAG2_AICANNOTUSE) {
|
||||
propExplode(obj->prop, EXPLOSIONTYPE_12);
|
||||
obj->hidden |= OBJHFLAG_REAPABLE;
|
||||
obj->hidden |= OBJHFLAG_DELETING;
|
||||
}
|
||||
|
||||
// If damaging an explosive item, make it explode immediately by
|
||||
|
@ -15537,7 +15537,7 @@ void func0f0859a0(struct prop *prop, struct shotdata *shotdata)
|
|||
struct coord spd8;
|
||||
f32 spd4;
|
||||
struct modelnode *node2;
|
||||
s32 lVar3;
|
||||
s32 hitpart;
|
||||
bool isnotglass;
|
||||
struct modelnode *node3;
|
||||
struct hitthing hitthing2;
|
||||
|
@ -15564,33 +15564,33 @@ void func0f0859a0(struct prop *prop, struct shotdata *shotdata)
|
|||
}
|
||||
|
||||
if (var8005efc0 > 0.0f) {
|
||||
lVar3 = modelTestForHit(model, &shotdata->unk00, &shotdata->unk0c, &node1);
|
||||
hitpart = modelTestForHit(model, &shotdata->unk00, &shotdata->unk0c, &node1);
|
||||
|
||||
while (lVar3 > 0) {
|
||||
while (hitpart > 0) {
|
||||
if (func0f084594(model, node1, &shotdata->unk00, &shotdata->unk0c, &hitthing1, &spe4, &node2)) {
|
||||
break;
|
||||
}
|
||||
|
||||
lVar3 = modelTestForHit(model, &shotdata->unk00, &shotdata->unk0c, &node1);
|
||||
hitpart = modelTestForHit(model, &shotdata->unk00, &shotdata->unk0c, &node1);
|
||||
}
|
||||
} else {
|
||||
do {
|
||||
lVar3 = modelTestForHit(model, &shotdata->unk00, &shotdata->unk0c, &node1);
|
||||
hitpart = modelTestForHit(model, &shotdata->unk00, &shotdata->unk0c, &node1);
|
||||
|
||||
if (lVar3 > 0 && func0f0849dc(model, node1, &shotdata->unk00, &shotdata->unk0c, &hitthing1, &spe4, &node2)) {
|
||||
if (hitpart > 0 && func0f0849dc(model, node1, &shotdata->unk00, &shotdata->unk0c, &hitthing1, &spe4, &node2)) {
|
||||
break;
|
||||
}
|
||||
} while (lVar3 > 0);
|
||||
} while (hitpart > 0);
|
||||
}
|
||||
|
||||
if (obj->flags3 & OBJFLAG3_HOVERBEDSHIELD) {
|
||||
node3 = modelGetPart(model->definition, MODELPART_0067);
|
||||
|
||||
if (node3 && func0f084594(model, node3, &shotdata->unk00, &shotdata->unk0c, &hitthing2, &sp90, &node4)) {
|
||||
if (lVar3 <= 0 ||
|
||||
if (hitpart <= 0 ||
|
||||
model->matrices[sp90].m[0][2] * hitthing2.unk00.f[0] + model->matrices[sp90].m[1][2] * hitthing2.unk00.f[1] + model->matrices[sp90].m[2][2] * hitthing2.unk00.f[2] >
|
||||
model->matrices[spe4].m[0][2] * hitthing1.unk00.f[0] + model->matrices[spe4].m[1][2] * hitthing1.unk00.f[1] + model->matrices[spe4].m[2][2] * hitthing1.unk00.f[2]) {
|
||||
lVar3 = 1;
|
||||
hitpart = HITPART_LFOOT;
|
||||
hitthing1 = hitthing2;
|
||||
node1 = node3;
|
||||
spe4 = sp90;
|
||||
|
@ -15600,7 +15600,7 @@ void func0f0859a0(struct prop *prop, struct shotdata *shotdata)
|
|||
}
|
||||
}
|
||||
|
||||
if (lVar3 > 0) {
|
||||
if (hitpart > 0) {
|
||||
mtx4TransformVec(&model->matrices[spe4], &hitthing1.unk00, &spd8);
|
||||
spd4 = -spd8.f[2];
|
||||
|
||||
|
@ -15620,7 +15620,7 @@ void func0f0859a0(struct prop *prop, struct shotdata *shotdata)
|
|||
mtx4RotateVec(&model->matrices[spe4], &hitthing1.unk0c, &sp70);
|
||||
mtx4RotateVecInPlace(camGetProjectionMtxF(), &sp70);
|
||||
|
||||
func0f061fa8(shotdata, prop, spd4, lVar3,
|
||||
func0f061fa8(shotdata, prop, spd4, hitpart,
|
||||
node1, &hitthing1, spe4, node2,
|
||||
model, isnotglass && shotdata->gset.weaponnum != WEAPON_FARSIGHT,
|
||||
(obj->flags2 & OBJFLAG2_BULLETPROOF)
|
||||
|
@ -16139,7 +16139,7 @@ bool propobjInteract(struct prop *prop)
|
|||
}
|
||||
|
||||
if (playernum >= 0 && laptop == &g_ThrownLaptops[playernum]) {
|
||||
obj->hidden |= OBJHFLAG_REAPABLE;
|
||||
obj->hidden |= OBJHFLAG_DELETING;
|
||||
invGiveSingleWeapon(WEAPON_LAPTOPGUN);
|
||||
currentPlayerQueuePickupWeaponHudmsg(WEAPON_LAPTOPGUN, false);
|
||||
weaponPlayPickupSound(WEAPON_LAPTOPGUN);
|
||||
|
@ -17399,7 +17399,7 @@ s32 objTestForPickup(struct prop *prop)
|
|||
{
|
||||
struct defaultobj *obj = prop->obj;
|
||||
|
||||
if (obj->hidden & OBJHFLAG_REAPABLE) {
|
||||
if (obj->hidden & OBJHFLAG_DELETING) {
|
||||
return TICKOP_NONE;
|
||||
}
|
||||
|
||||
|
@ -17449,7 +17449,7 @@ s32 objTestForPickup(struct prop *prop)
|
|||
|| weapon->weaponnum == WEAPON_GRENADEROUND
|
||||
|| weapon->weaponnum == WEAPON_NBOMB
|
||||
|| weapon->weaponnum == WEAPON_SKROCKET) {
|
||||
if (weapon->timer240 >= 0 || (obj->hidden & OBJHFLAG_REAPABLE)) {
|
||||
if (weapon->timer240 >= 0 || (obj->hidden & OBJHFLAG_DELETING)) {
|
||||
return TICKOP_NONE;
|
||||
}
|
||||
}
|
||||
|
@ -17462,7 +17462,7 @@ s32 objTestForPickup(struct prop *prop)
|
|||
|| weapon->weaponnum == WEAPON_TARGETAMPLIFIER
|
||||
|| weapon->weaponnum == WEAPON_COMMSRIDER
|
||||
|| weapon->weaponnum == WEAPON_ECMMINE) {
|
||||
if (weapon->timer240 >= 0 || (obj->hidden & OBJHFLAG_REAPABLE)) {
|
||||
if (weapon->timer240 >= 0 || (obj->hidden & OBJHFLAG_DELETING)) {
|
||||
return TICKOP_NONE;
|
||||
}
|
||||
}
|
||||
|
@ -18284,7 +18284,7 @@ bool chrEquipWeapon(struct weaponobj *weapon, struct chrdata *chr)
|
|||
if ((weapon->base.flags & OBJFLAG_WEAPON_AICANNOTUSE) == 0) {
|
||||
if (chr->weapons_held[handnum]) {
|
||||
if (chr->aibot) {
|
||||
chr->weapons_held[handnum]->weapon->base.hidden |= OBJHFLAG_REAPABLE;
|
||||
chr->weapons_held[handnum]->weapon->base.hidden |= OBJHFLAG_DELETING;
|
||||
chr->weapons_held[handnum] = NULL;
|
||||
} else {
|
||||
return false;
|
||||
|
@ -18652,7 +18652,7 @@ void weaponDeleteFromChr(struct chrdata *chr, s32 hand)
|
|||
{
|
||||
if (chr && chr->weapons_held[hand]) {
|
||||
struct defaultobj *obj = chr->weapons_held[hand]->obj;
|
||||
obj->hidden |= OBJHFLAG_REAPABLE;
|
||||
obj->hidden |= OBJHFLAG_DELETING;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -19622,7 +19622,7 @@ void doorPlayClosedSound(s32 soundtype, struct prop *prop)
|
|||
void doorStartOpen(struct doorobj *door)
|
||||
{
|
||||
door->base.flags &= ~OBJFLAG_DOOR_KEEPOPEN;
|
||||
door->base.hidden |= OBJHFLAG_00000200;
|
||||
door->base.hidden |= OBJHFLAG_DOOREVEROPENED;
|
||||
|
||||
doorPlayOpeningSound(door->soundtype, door->base.prop);
|
||||
doorActivatePortal(door);
|
||||
|
|
|
@ -783,7 +783,7 @@ void setupCreateMine(struct mineobj *mine, s32 cmdindex)
|
|||
setupCreateObject(&mine->base, cmdindex);
|
||||
|
||||
if (g_Vars.coopplayernum >= 0 || g_Vars.antiplayernum >= 0) {
|
||||
mine->base.hidden = (mine->base.hidden & 0x0fffffff) | OBJHFLAG_20000000;
|
||||
mine->base.hidden = (mine->base.hidden & 0x0fffffff) | (2 << 28);
|
||||
}
|
||||
|
||||
mine->base.prop->forcetick = true;
|
||||
|
@ -2224,10 +2224,9 @@ void setupCreateProps(s32 stagenum)
|
|||
|
||||
// This gets optimised out but makes v0 unavailable
|
||||
// for storing OBJHFLAG_CONDITIONALSCENERY, which is required
|
||||
// for a match. Any function call would work; I just
|
||||
// copied the one above.
|
||||
// for a match. Any function call would work.
|
||||
if (alwayszero) {
|
||||
setupCreateConditionalScenery(link);
|
||||
random();
|
||||
}
|
||||
|
||||
if (expoffset) {
|
||||
|
@ -2235,7 +2234,7 @@ void setupCreateProps(s32 stagenum)
|
|||
exp->flags2 |= OBJFLAG2_INVISIBLE;
|
||||
}
|
||||
|
||||
if (trigger->hidden & OBJHFLAG_02000000) {
|
||||
if (trigger->hidden & OBJHFLAG_BLOCKEDPATH) {
|
||||
objSetBlockedPathUnblocked(trigger, false);
|
||||
}
|
||||
}
|
||||
|
@ -2252,7 +2251,7 @@ void setupCreateProps(s32 stagenum)
|
|||
|
||||
setupCreateBlockedPath(blockedpath);
|
||||
|
||||
blocker->hidden |= OBJHFLAG_02000000;
|
||||
blocker->hidden |= OBJHFLAG_BLOCKEDPATH;
|
||||
|
||||
if (blocker->hidden & OBJHFLAG_CONDITIONALSCENERY) {
|
||||
objSetBlockedPathUnblocked(blocker, false);
|
||||
|
|
|
@ -3096,16 +3096,16 @@
|
|||
// obj->hidden
|
||||
#define OBJHFLAG_LIFTDOOR 0x00000001
|
||||
#define OBJHFLAG_00000002 0x00000002
|
||||
#define OBJHFLAG_REAPABLE 0x00000004
|
||||
#define OBJHFLAG_DELETING 0x00000004
|
||||
#define OBJHFLAG_ISRETICK 0x00000008
|
||||
#define OBJHFLAG_TAGGED 0x00000010
|
||||
#define OBJHFLAG_00000020 0x00000020 // thrown knife
|
||||
#define OBJHFLAG_THROWNKNIFE 0x00000020 // thrown knife
|
||||
#define OBJHFLAG_EMBEDDED 0x00000040 // obj is embedded in a chr or other obj (eg. knife)
|
||||
#define OBJHFLAG_PROJECTILE 0x00000080 // obj is airborne, sliding or falling
|
||||
#define OBJHFLAG_00000100 0x00000100
|
||||
#define OBJHFLAG_00000200 0x00000200
|
||||
#define OBJHFLAG_DAMAGEFORBOUNCE 0x00000100
|
||||
#define OBJHFLAG_DOOREVEROPENED 0x00000200
|
||||
#define OBJHFLAG_HASTEXTOVERRIDE 0x00000400
|
||||
#define OBJHFLAG_00000800 0x00000800
|
||||
#define OBJHFLAG_GONE 0x00000800 // Waiting to regen in MP, or grenade in chr's hand during throw anim before it becomes visible
|
||||
#define OBJHFLAG_00001000 0x00001000
|
||||
#define OBJHFLAG_PADLOCKEDDOOR 0x00002000
|
||||
#define OBJHFLAG_ACTIVATED_BY_BOND 0x00004000
|
||||
|
@ -3119,10 +3119,9 @@
|
|||
#define OBJHFLAG_PERIMDISABLED 0x00400000
|
||||
#define OBJHFLAG_DOORPERIMDISABLED 0x00800000
|
||||
#define OBJHFLAG_CONDITIONALSCENERY 0x01000000 // Set on triggers, exp and unexp
|
||||
#define OBJHFLAG_02000000 0x02000000
|
||||
#define OBJHFLAG_BLOCKEDPATH 0x02000000
|
||||
#define OBJHFLAG_MOUNTED 0x04000000 // for hoverbike
|
||||
#define OBJHFLAG_GRABBED 0x08000000
|
||||
#define OBJHFLAG_20000000 0x20000000 // upper nibble might be a single 4-bit value
|
||||
|
||||
// obj->hidden2
|
||||
#define OBJH2FLAG_HASOPA 0x01 // obj has opaque polygons (ie. most objects)
|
||||
|
|
|
@ -7,7 +7,7 @@
|
|||
|
||||
void objSetBlockedPathUnblocked(struct defaultobj *blocker, bool unblocked)
|
||||
{
|
||||
if (blocker->hidden & OBJHFLAG_02000000) {
|
||||
if (blocker->hidden & OBJHFLAG_BLOCKEDPATH) {
|
||||
struct blockedpathobj *bp = g_BlockedPaths;
|
||||
|
||||
while (bp) {
|
||||
|
|
Loading…
Reference in New Issue