Bug #664

Heretic Maulotaur attack behaviour incorrect

Added by vermil about 13 years ago. Updated almost 10 years ago.

Target version:
Start date:
% Done:



In Beta6.1 the behaviour of a couple of the Malotaur’s attacks in Heretic (and perhaps the Dark Servant in HeXen) are incorrect. Both of these can be observed using the water pool/ring pedestal on E2M8 of the original game.

Firstly the ground flame attack. The correct behaviour for this attack is that if the Maulotaur tries to spawn it on any liquid (sludge, water and also, strangely, lava), it is instantly destroyed. In Beta6.1 the ground flame is not instantly destroyed if it is spawned on liquid.

Second the charge attack. The Maulotaur should not leave the ground at tall during the attack. In Beta6.1 he briefly lift's off the ground (i.e. he literally bounces like a missile that is affected by gravity) when he goes up a step.

Labels: jHeretic Gameplay


#1 Updated by danij about 13 years ago

Both of these issues are due to bugs in the original Heretic which have only now just come to light.

When an attempt is made to spawn MT_MNTRFX2 (the Maulotaur's ground flame) the z coordinate is set to ONFLOORZ but if the Maulotaur's feet are currently clipped (i.e., it is in a sector whose terrain info is set to clip) then FOOTCLIPSIZE is subtracted from the z coordinate. So when P_SpawnMobj is called, z != ONFLOORZ so rather than being set to the height of the floor it is left at 2146838915 (float: 32758.162).

This in turn means that when P_TryMove() is called (via P_CheckMissileSpawn()), the test which is there to check whether a missile hits an upper sidedef section will return true (ceilingheight - thingz > thingheight). This results in P_ExplodeMissile() being called instantly.

#2 Updated by danij about 13 years ago

The floor fire issue has now been resolved in svn for 1.9.0-beta6.2 (emulate original behaviour by default. Added compatibility option for the fix CVAR "server-game-maulotaur-fixfloorfire".

I am now investigating the Maulotaur charge attack issue.

#3 Updated by vermil about 13 years ago

In Beta6.2 at least, I've got another couple of bugs to throw in here regarding the Maulotaurs ground flame.

The flame is still spawning in sectors where the Maulotaur's feet are clipped, if he is standing on the edge of a foot clipping sector firing into a lower sector. The flame was still destroyed in this case, in the original game.

Also, the flames are now slowly moving eastward when they are spawned, when they should be stationary.

#4 Updated by danij about 13 years ago

Neither of those are bugs.

If the Maulotaur is stood in a sector which is non-solid then the floor fire will spawn, as per the original game.

The floor fire moves in the original game, this is so it stays on the floor.

#5 Updated by vermil about 13 years ago

I'm afraid I must dispute your response.

The floor fire flames do not move/slide eastward on the floor in the original game.

In the original game, if the Maulotaur is standing on the edge of a step and at least one of the floors is footclipping, the floor fire is destroyed as soon as it spawns. In Beta6.2, it isn't.

#6 Updated by danij about 13 years ago

// From the original Heretic source release by raven
void A_MntrFloorFire(mobj_t *actor) {
mobj_t *mo;

actor->z = actor->floorz;
mo = P_SpawnMobj(actor->x+((P_Random()-P_Random())<&lt;10),
actor->y+((P_Random()-P_Random())<&lt;10), ONFLOORZ, MT_MNTRFX3);
mo->target = actor->target;
mo->momx = 1; // Force block checking

As you can see, the floor fire should move east.

#7 Updated by danij about 13 years ago

There is no such logic in the original source release to back up your claim that the Maulotaur's floor fire will not be spawned if it is not currently foot clipped.

This would require a traversal of sectors around the Maulotaur's origin, enabling the foot clip if any non-solid floor was found and the Maulotaur was not in the air and it's z position was within range of the sector floor being checked.

#8 Updated by danij about 13 years ago

After an extended discussion with vermil, the problem he is reporting about the spawning of the floor fire when the Maulotaur's feet are not clipped sounds like it is in fact a symptom of another bug and not a bug in and of itself.

Apparently, the Maulotaur is supposed to stick to the floor at all times. It never falls off ledges, with a period where it is in mid air. It will instantly snap to the height of the new sector floor.

This would explain the behaviour that vermil is reporting.

#9 Updated by vermil about 13 years ago

Indeed, from further discussion with DaniJ, the floor flame does move eastward at a rate of 1 unit every 16 tic's (half a second), in order to keep the flame on the ground. However a typo in the Beta6.2 src means that it is moving eastward considerably faster than 1 unit every 16 tic's.

"In the original game, if the Maulotaur is standing on the edge of a step
and at least one of the floors is footclipping, the floor fire is destroyed
as soon as it spawns. In Beta6.2, it isn't."

Permit me then to present a test wad to yourself. In 1.8.6, the floor fire was destroyed every single time as it should. In Beta6.2, it isn't always. I’ve attached a wad called TEST.WAD below that run's on E1M1.

Try standing just to the side (left or right) of either Maulotaur’s controlled path and reasonably often, the floor fire will spawn when it shouldn't.

#11 Updated by vermil about 13 years ago

Following on from this. Since the destruction of the Maulotaurs floor fire became done by code rather than by an intentionally left bug, the floor fire is sometimes being destroyed when it shouldn't if the player is above or below the Maulotaur.

This is repeatedly testable using the Maulotaur on E3M7 if the player stands on either of the ledges along the left and right of his starting room (i.e. the ledge with the green key on it or the one opposite). But I have also gotten it to happen on the stairs in front of his starting room.

Also available in: Atom PDF