9front - general discussion about 9front
 help / color / mirror / Atom feed
From: qux <qu7uux@gmail.com>
To: 9front@9front.org
Subject: games/doom: add bug compatibility switches
Date: Wed, 29 Jul 2015 19:08:02 +0300	[thread overview]
Message-ID: <CAAGZaiJMNMEUi2U7LAge6oLW0ywneBWzoJC6E8k8tJ+3PyvznQ@mail.gmail.com> (raw)

games/doom: add bug compatibility switches

these emulate bugs present in select versions of the released doom executables.
they are required to correctly play demos recorded with these but affect the
gameplay, so should be otherwise disabled.

-nobounce: lost souls don't bounce off floors and ceilings like intended due
to a misplaced check; this is fixed from ultimate doom on, but doom and doom2
are still affected.

-noztele: in final doom 1.9, things' altitude was erroneously not set to the
floor's height after teleporting. this was fixed in later versions of the
executables.

examples of desyncing demos:
(plutonia.wad, without -noztele) http://doomedsda.us/lmps/946/2/30pl2646.zip
(doom2.wad, without -nobounce) http://doomedsda.us/lmps/945/3/30nm2939.zip

diff -r aa2b4dca05f1 sys/src/games/doom/d_main.c
--- a/sys/src/games/doom/d_main.c	Wed Jul 29 14:51:00 2015 +0200
+++ b/sys/src/games/doom/d_main.c	Wed Jul 29 17:47:53 2015 +0300
@@ -90,6 +90,9 @@

 boolean		singletics = false; // debug flag to cancel adaptiveness

+/* bug compatibility with various versions of doom */
+boolean		noztele;
+boolean		nobounce;


 //extern int soundVolume;
@@ -736,6 +739,10 @@
     respawnparm = M_CheckParm ("-respawn");
     fastparm = M_CheckParm ("-fast");
     devparm = M_CheckParm ("-devparm");
+    if (M_CheckParm ("-noztele") && gamemode == commercial)
+	noztele = 1;
+    if (M_CheckParm ("-nobounce") && (gamemode == commercial ||
gamemode == registered))
+	nobounce = 1;
     if (M_CheckParm ("-altdeath"))
 	deathmatch = 2;
     else if (M_CheckParm ("-deathmatch"))
diff -r aa2b4dca05f1 sys/src/games/doom/p_local.h
--- a/sys/src/games/doom/p_local.h	Wed Jul 29 14:51:00 2015 +0200
+++ b/sys/src/games/doom/p_local.h	Wed Jul 29 17:47:53 2015 +0300
@@ -60,6 +60,8 @@
 // follow a player exlusively for 3 seconds
 #define	BASETHRESHOLD	 	100

+extern	boolean	noztele;
+extern	boolean	nobounce;


 //
diff -r aa2b4dca05f1 sys/src/games/doom/p_mobj.c
--- a/sys/src/games/doom/p_mobj.c	Wed Jul 29 14:51:00 2015 +0200
+++ b/sys/src/games/doom/p_mobj.c	Wed Jul 29 17:47:53 2015 +0300
@@ -285,10 +285,7 @@
     {
 	// hit the floor

-	// Note (id):
-	//  somebody left this after the setting momz to 0,
-	//  kinda useless there.
-	if (mo->flags & MF_SKULLFLY)
+	if (!nobounce && mo->flags & MF_SKULLFLY)
 	{
 	    // the skull slammed into something
 	    mo->momz = -mo->momz;
@@ -310,6 +307,9 @@
 	}
 	mo->z = mo->floorz;

+	if (nobounce && mo->flags & MF_SKULLFLY)
+	    mo->momz = -mo->momz;
+
 	if ( (mo->flags & MF_MISSILE)
 	     && !(mo->flags & MF_NOCLIP) )
 	{
diff -r aa2b4dca05f1 sys/src/games/doom/p_telept.c
--- a/sys/src/games/doom/p_telept.c	Wed Jul 29 14:51:00 2015 +0200
+++ b/sys/src/games/doom/p_telept.c	Wed Jul 29 17:47:53 2015 +0300
@@ -101,8 +101,9 @@
 				
 		if (!P_TeleportMove (thing, m->x, m->y))
 		    return 0;
-		
-		thing->z = thing->floorz;  //fixme: not needed?
+
+		if(!noztele)
+			thing->z = thing->floorz;
 		if (thing->player)
 		    thing->player->viewz = thing->z+thing->player->viewheight;


                 reply	other threads:[~2015-07-29 16:08 UTC|newest]

Thread overview: [no followups] expand[flat|nested]  mbox.gz  Atom feed

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=CAAGZaiJMNMEUi2U7LAge6oLW0ywneBWzoJC6E8k8tJ+3PyvznQ@mail.gmail.com \
    --to=qu7uux@gmail.com \
    --cc=9front@9front.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).