add game version specific differences

This implements the subtle differences found in the three variants
of DOOM.EXE version 1.9. The code was taken from PrBoom+ and
Chocolate Doom, respectively. I decided to go without the original
comments, the code has been commented well enough in other source
ports. @fragglet Do you think these are all the relevant differences?
This commit is contained in:
Fabian Greffrath 2020-01-18 15:29:47 +01:00
parent 5ce7ef8211
commit 7e6ff37fdb
3 changed files with 26 additions and 1 deletions

View File

@ -2133,6 +2133,16 @@ void A_BossDeath(mobj_t *mo)
}
else
{
// [FG] game version specific differences
if (demo_compatibility && gameversion < exe_ultimate)
{
if (gamemap != 8)
return;
if (mo->type == MT_BRUISER && gameepisode != 1)
return;
}
else
switch(gameepisode)
{
case 1:

View File

@ -469,8 +469,13 @@ floater:
{
// hit the floor
if (mo->flags & MF_SKULLFLY)
// [FG] game version specific differences
int correct_lost_soul_bounce = !demo_compatibility || gameversion >= exe_ultimate;
if (correct_lost_soul_bounce && mo->flags & MF_SKULLFLY)
{
mo->momz = -mo->momz; // the skull slammed into something
}
if (mo->momz < 0)
{
@ -496,6 +501,12 @@ floater:
mo->z = mo->floorz;
// [FG] game version specific differences
if (!correct_lost_soul_bounce && mo->flags & MF_SKULLFLY)
{
mo->momz = -mo->momz;
}
if (!((mo->flags ^ MF_MISSILE) & (MF_MISSILE | MF_NOCLIP)))
{
P_ExplodeMissile (mo);

View File

@ -72,7 +72,11 @@ int EV_Teleport(line_t *line, int side, mobj_t *thing)
if (!P_TeleportMove(thing, m->x, m->y, false)) // killough 8/9/98
return 0;
// [FG] game version specific differences
if (demo_compatibility && gameversion != exe_final)
{
thing->z = thing->floorz;
}
if (player)
player->viewz = thing->z + player->viewheight;