Jump to content
Search In
  • More options...
Find results that contain...
Find results in...
entryway

Older Doom versions

Recommended Posts

I've researched some older DOOM EXEs for possible improvement of compatibility with doom 1.2 (-complevel 0) and found a few changes which probably are worth to be mentioned here:
http://doom.wikia.com/wiki/Versions_of_Doom_and_Doom_II

1. Doom 1.4 and earlier versions do not check actor's radius in P_CheckMeleeRange:

static dboolean P_CheckMeleeRange(mobj_t *actor)
{
  mobj_t *pl = actor->target;

  return  // killough 7/18/98: friendly monsters don't attack other friends
    pl && !(actor->flags & pl->flags & MF_FRIEND) &&
    (P_AproxDistance(pl->x-actor->x, pl->y-actor->y) <
     (compatibility_level == doom_12_compatibility ?
      MELEERANGE :
      MELEERANGE - 20*FRACUNIT + pl->info->radius)) &&
    P_CheckSight(actor, actor->target);
}
http://prboom-plus.sf.net/P_CheckMeleeRange_14.png
http://prboom-plus.sf.net/P_CheckMeleeRange_15.png


2. A_SargAttack is completely different in doom 1.4 and earlier versions:
void A_SargAttack(mobj_t *actor)
{
  if (!actor->target)
    return;
  A_FaceTarget(actor);
  if (compatibility_level == doom_12_compatibility)
  {
    int damage = ((P_Random(pr_sargattack)%10)+1)*4;
    P_LineAttack(actor, actor->angle, MELEERANGE, 0, damage);
  }
  else
  {
    if (P_CheckMeleeRange(actor))
    {
      int damage = ((P_Random(pr_sargattack)%10)+1)*4;
      P_DamageMobj(actor->target, actor, actor, damage);
    }
  }
}
http://prboom-plus.sf.net/A_SargAttack_14.png
http://prboom-plus.sf.net/A_SargAttack_15.png

You should interpret (compatibility_level == doom_12_compatibility) as (compatibility_level < doom_15_compatibility)

Share this post


Link to post

Indeed, the original A_Sargattack, being a short range hitscan attack meant Demons could infight with eachother, hurt each other and were affected by the invisibility sphere.

Share this post


Link to post

Versions 1.2 and earlier will need the old version of the line-of-sight checking code which operates more like the bullet tracer code rather than using a BSP crossing algorithm. This code can be found in Heretic, and has that quirk of occasionally allowing monsters to see the player through an arbitrary number of walls which I have dubbed the "Anywhere Moo" bug (because it is most noticeable with Maulotaurs, and in Doom, Cyberdemons).

Share this post


Link to post
Quasar said:

Versions 1.2 and earlier will need the old version of the line-of-sight checking code

Yes, I know.

Share this post


Link to post
Quasar said:

and has that quirk of occasionally allowing monsters to see the player through an arbitrary number of walls



That's a bug, not a quirk. A quirk would be odd behavior in otherwise correct code. This one's clearly broken though.

Share this post


Link to post

Another improvement:

void A_Chase(mobj_t *actor)
{
  if (actor->reactiontime)
    actor->reactiontime--;

  if (actor->threshold) { /* modify target threshold */
    if (compatibility_level == doom_12_compatibility)
    {
      actor->threshold--;
    }
    else
    {
      if (!actor->target || actor->target->health <= 0)
        actor->threshold = 0;
      else
        actor->threshold--;
    }
  }
  ...
All demos by never_again on uac_dead.wad are in sync for now

Share this post


Link to post

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×