by Gez » Sun Feb 14, 2010 3:53 pm
Enjay wrote:Is it the circling projectiles that cause this A_CustomMissile problem?
In this present case, no. It's the HellFire, HellFire1 and HellFire2 actors that do not work anymore.
The culprit in this case is
void P_ZMovement (AActor *mo, fixed_t oldfloorz). Specifically, here:
Code: Select all
if (mo->z <= mo->floorz)
{
// old code for boss cube disabled
//if ((mo->flags & MF_MISSILE) && (!(gameinfo.gametype & GAME_DoomChex) || !(mo->flags & MF_NOCLIP)))
if (mo->flags & MF_MISSILE)
{
mo->z = mo->floorz;
if (mo->BounceFlags & BOUNCE_Floors)
{
mo->FloorBounceMissile (mo->floorsector->floorplane);
/* if (!(mo->flags6 & MF6_CANJUMP)) */ return;
}
else if (mo->flags3 & MF3_NOEXPLODEFLOOR)
{
P_HitFloor (mo);
mo->velz = 0;
return;
}
else if (mo->flags3 & MF3_FLOORHUGGER)
{ // Floor huggers can go up steps
return;
}
else
{
if (mo->floorpic == skyflatnum && !(mo->flags3 & MF3_SKYEXPLODE))
{
// [RH] Just remove the missile without exploding it
// if this is a sky floor.
mo->Destroy ();
return;
}
P_HitFloor (mo);
P_ExplodeMissile (mo, NULL, NULL);
return;
Because of this code, the missiles are exploded prematurely. Given that all these actors have the NOCLIP flag, I'm not sure if subjecting them to this collision check is a good idea... Adding a !(mo->flags & MF_NOCLIP) condition repairs the afrit's floor fire; but I haven't investigated side effects with other mods.
[quote="Enjay"]Is it the circling projectiles that cause this A_CustomMissile problem?[/quote]
In this present case, no. It's the HellFire, HellFire1 and HellFire2 actors that do not work anymore.
The culprit in this case is [b]void P_ZMovement (AActor *mo, fixed_t oldfloorz)[/b]. Specifically, here:
[code] if (mo->z <= mo->floorz)
{
// old code for boss cube disabled
//if ((mo->flags & MF_MISSILE) && (!(gameinfo.gametype & GAME_DoomChex) || !(mo->flags & MF_NOCLIP)))
if (mo->flags & MF_MISSILE)
{
mo->z = mo->floorz;
if (mo->BounceFlags & BOUNCE_Floors)
{
mo->FloorBounceMissile (mo->floorsector->floorplane);
/* if (!(mo->flags6 & MF6_CANJUMP)) */ return;
}
else if (mo->flags3 & MF3_NOEXPLODEFLOOR)
{
P_HitFloor (mo);
mo->velz = 0;
return;
}
else if (mo->flags3 & MF3_FLOORHUGGER)
{ // Floor huggers can go up steps
return;
}
else
{
if (mo->floorpic == skyflatnum && !(mo->flags3 & MF3_SKYEXPLODE))
{
// [RH] Just remove the missile without exploding it
// if this is a sky floor.
mo->Destroy ();
return;
}
P_HitFloor (mo);
P_ExplodeMissile (mo, NULL, NULL);
return;
[/code]
Because of this code, the missiles are exploded prematurely. Given that all these actors have the NOCLIP flag, I'm not sure if subjecting them to this collision check is a good idea... Adding a !(mo->flags & MF_NOCLIP) condition repairs the afrit's floor fire; but I haven't investigated side effects with other mods.