diff --git a/src/game/bondgun.c b/src/game/bondgun.c index 19a6ad137..c0894fa37 100644 --- a/src/game/bondgun.c +++ b/src/game/bondgun.c @@ -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; } } } diff --git a/src/game/bot.c b/src/game/bot.c index 3122894c4..2aa7028de 100644 --- a/src/game/bot.c +++ b/src/game/bot.c @@ -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; } diff --git a/src/game/botinv.c b/src/game/botinv.c index 5902e0b2d..46f8b0e0b 100644 --- a/src/game/botinv.c +++ b/src/game/botinv.c @@ -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; } } diff --git a/src/game/chr.c b/src/game/chr.c index 358675d81..ff57d9e8d 100644 --- a/src/game/chr.c +++ b/src/game/chr.c @@ -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}; diff --git a/src/game/chraction.c b/src/game/chraction.c index 13698fc4c..b75bc1b7f 100644 --- a/src/game/chraction.c +++ b/src/game/chraction.c @@ -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); } diff --git a/src/game/mplayer/scenarios.c b/src/game/mplayer/scenarios.c index 8606250f6..1a1275514 100644 --- a/src/game/mplayer/scenarios.c +++ b/src/game/mplayer/scenarios.c @@ -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; diff --git a/src/game/mplayer/scenarios/hackthatmac.inc b/src/game/mplayer/scenarios/hackthatmac.inc index 55a5e2e2f..2c9a0cf1b 100644 --- a/src/game/mplayer/scenarios/hackthatmac.inc +++ b/src/game/mplayer/scenarios/hackthatmac.inc @@ -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) { diff --git a/src/game/mplayer/scenarios/holdthebriefcase.inc b/src/game/mplayer/scenarios/holdthebriefcase.inc index 9218043ab..69772670c 100644 --- a/src/game/mplayer/scenarios/holdthebriefcase.inc +++ b/src/game/mplayer/scenarios/holdthebriefcase.inc @@ -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]; diff --git a/src/game/player.c b/src/game/player.c index 3bb100f4d..1fef1b016 100644 --- a/src/game/player.c +++ b/src/game/player.c @@ -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); } } diff --git a/src/game/prop.c b/src/game/prop.c index ba681323e..18e5b4f96 100644 --- a/src/game/prop.c +++ b/src/game/prop.c @@ -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); diff --git a/src/game/propobj.c b/src/game/propobj.c index 48c7151e7..4702ee276 100644 --- a/src/game/propobj.c +++ b/src/game/propobj.c @@ -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); diff --git a/src/game/setup.c b/src/game/setup.c index ee5b57a3b..0be64d53a 100644 --- a/src/game/setup.c +++ b/src/game/setup.c @@ -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); diff --git a/src/include/constants.h b/src/include/constants.h index 8d9072b12..b5a4b4fe6 100644 --- a/src/include/constants.h +++ b/src/include/constants.h @@ -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) diff --git a/src/lib/path.c b/src/lib/path.c index 6e1e64e3c..e61881128 100644 --- a/src/lib/path.c +++ b/src/lib/path.c @@ -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) {