entryway Posted October 28, 2010 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) 1 Share this post Link to post
Vermil Posted October 28, 2010 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. 0 Share this post Link to post
RjY Posted October 28, 2010 I saw these patches go in yesterday. :) Nice work! 0 Share this post Link to post
entryway Posted October 28, 2010 4mer said:Great job. Only one demo is fixed after these changes for -complevel 0 ret12na.lmp @ return01.wad 0 Share this post Link to post
Quasar Posted October 28, 2010 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). 0 Share this post Link to post
entryway Posted October 28, 2010 Quasar said:Versions 1.2 and earlier will need the old version of the line-of-sight checking code Yes, I know. 0 Share this post Link to post
Graf Zahl Posted October 28, 2010 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. 0 Share this post Link to post
entryway Posted October 28, 2010 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 0 Share this post Link to post