quake/articles/1996/art-648
Path: mantis!not-for-mail
From: dtebben@alumnae.caltech.edu (Dirk Tebben)
Newsgroups: rec.games.computer.quake.announce
Subject: DemoCam v0.8
Date: 18 Oct 1996 19:27:28 +0100
Organization: Caltech Alumni Association
Lines: 221
Sender: tony@mantis.co.uk
Approved: quake@mantis.co.uk
Message-ID: <5474f8$le6@gap.cco.caltech.edu>
I just uploaded DemoCam v0.8 to ftp.cdrom.com, ftp.stomped.com, and
alt.binaries.games.quake. It lets you mess with the camera's POV in
demos. Description follows.
DemoCam v0.8
by
Harlequin
(dtebben@alumni.caltech.edu)
Operating Systems Supported
---------------------------
Definitely DOS/Win95, probably Linux (can't think why not).
How It Works
------------
DemoCam is a patch for QuakeC that allows you to play back demos from
a different viewpoint than you recorded them with. For example, you
can record a demo in the first person as normal, then convert it to
play back from a chase camera located above & behind your character.
The bad news is that of the 3 playback modes I originally intended to
support, only the chase cam works well. See Known Bugs, below.
How To Use It
-------------
First you need to compile the mod using QCC. Get a version suitable
for your OS from ftp.cdrom.com or http://www.stomped.com. After you
install QCC, copy all the files from V101QC (a subdir of QCC) into a
new, empty subdir named "democam" off of your Quake directory. Now
unzip democam.zip into the democam subdirectory, answering "yes" to
any queries about overwriting files. Run QCC in that directory and
it will generate a file called progs.dat.
Now start up Quake with the command-line argument "-game democam" and
start recording a demo (syntax is "record
At some point during the demo, issue the command "impulse 16" from the
console, or bind impulse 16 to a key and press it. You'll notice that
you character's weaponmodel (the weapon at the bottom of the screen)
has vanished. Run around a while, finish recording by typing "stop" at
the console, and quit from the game. Here comes the tricky part.
Fire up your favorite text editor/word processor/file viewer (Win95's
Wordpad works fine), and load the .dem file you just recorded. It
will largely be a bunch of meaningless junk, but search for a part
that reads "alias disconnect". There should be two of them almost in
a row, looking something like this:
****A* alias disconnect ****** alias disconnect
There may be some carriage returns, etc. in there. "*" are all the same
character, but may appear different depending on your editor; they're
not important. What is important is the "A". It may or may not be an
A, it may not even be a standard ASCII printable (in which case you'll
have to copy and paste it). Whatever it is, it will always be the
next-to-last character in a string of otherwise identical ones. What
you have to do is replace the "alias disconnect" bits with this:
****A* alias disconnect ****A* alias disconnect
Note that you are changing ONLY ONE CHARACTER, the next-to-last non-
space letter before the second "alias disconnect". Replace it with
whatever the corresponding character in front of the first "alias
disconnect" is, in this case "A". Assuming that you only pressed
impulse 16 once, you will only have to make this one alteration in the
file.
The demo is now ready for viewing. Go back into Quake and run it
with "playdemo
will have switched to a chase camera and stayed there until the end
of the demo.
If all this isn't clear, don't despair. I included two demos in the
.zip that show how it should be done. Their names are "1stper.dem",
a normal demo in the first person, and "3rdper.dem", which is played
from a chase cam. The only difference between these two files is one
byte. Examine them a little and you'll see how to do it. If all
else fails, email me.
I strongly suggest backing up your demos before altering them.
Impulse Commands & Other Docs
-----------------------------
You can use the following impulse commands in DemoCam:
-- impulse 15: toggle show/hide weaponmodels while recording
-- impulse 16: start a demo chase cam on yourself
-- impulse 17: start the Top Dog Chase Cam (see Known Bugs)
-- impulse 18: start the Intermission Cam (see Known Bugs)
-- impulse 19: stop your current chase cam from recording
-- impulse 20: toggle your view between your character and your
currently active Demo Cam
Of these 6, only impulses 15 and 20 have any effect on the game as
it is being played. The rest only affect the playback of the demo.
The weaponmodel toggle is so that they don't show up in the demo.
Personally I don't mind having it not there in the game, but if you
really feel you need it you can turn it on. (I play with crosshairs
and use them for aiming anyway). For a really clean look when playing
demos, max out the screen size and turn off the crosshairs.
It's possible to activate multiple cameras in succession in a single
demo. Every time you activate a camera or use impulse 20 to switch
*back from* (not *to*) your demo camera view during the game, two more
"alias disconnect" markers will be inserted into the .dem file and you
will have to make the appropriate changes for the demo to turn out
properly (see How To Use It, above).
The model I used for the camera is a bubble, like those that spawn
when you drown. There is no "null" model in Quake, so it had to be
something. If you want you can change the model to "null.spr", a
blank model file that I got from Eli's Kuaqe2 mod; just be aware that
anyone who doesn't have the file won't be able to play the demo. You
have to uncomment two lines and recompile to do this: one at the
beginning of weapons.qc (in the precache functions), and one in
democam.qc. Both should be fairly obvious.
Why "alias disconnect"? Well, it's one of two console commands I
know of that does absolutely nothing, and doesn't interfere with the
user's config in any way. (The other is "alias quit").
If you want to, you can delete the centerprinted messages from the
demo. Just be sure to get rid of the message text *only*. I suggest
you replace it with spaces rather than actually removing it and thus
changing the size of the file; you never know what might happen.
Known Bugs
----------
-- Unfortunately, it is not possible (AFAIK) for anyone other than the
server to record a demo in Quake. This means that you can only record
a demo if you are running a listen server or playing single-player.
Maybe this will be fixed in QuakeWorld (maybe it'll bring world peace
too :-) ).
-- There may be some places on levels where cameras don't work right
(all the SetViewPort network command stuff is a little wonky). The only
place I know of is the single-player start room of e4m7, but there could
be others. Be careful, and back up your demos!
-- It is not possible for DemoCam recordings to persist between levels.
If not turned off, the demo will simply record a blank screen for all
levels past the first. Therefore I have set the mod to automatically
stop recording when the level changes.
-- In coding mods, there are two brick walls that I have run into time
and time again.
1) If a client's viewport gets too far away from the client,
the viewport hangs (i.e. stops updating). This is seemingly
determined by some property of the level, because I have played
on homebrewed maps where it is not a problem. On id's levels
it is chronic.
2) The viewport facing is always determined by the client's
facing. I suspect there is a way around this, because during
the intermission the client's view is frozen in place (of course
he is also paralyzed). The problem is that you can't be facing
one way and "looking" another, which is bad news if your camera
is facing a different direction.
If anyone figures out a way around either of these, *please* tell
me! I've seen the 1st one circumvented by creating a "doppleganger"
of the client that moves and takes damage while the "real" client
is off being something else, e.g. a guided missile. This is
unworkable in DemoCam because both the camera and player need to
have updating displays.
-- The Top Dog Chase Cam was originally meant to be a chase camera that
would follow whoever had the highest current frag count. This would be
great if it worked, but it falls foul of the two problems listed above.
If the camera is too far away from its owner, the view never updates;
also, the camera angle is determined by the owner's facing, which creates
weird, frustrating, and unwatchable demos.
-- Likewise the bugs kill the Intermission Cam, which would have been
a camera that warped around to the most active intermission sites to
observe deathmatches in progress. You can still use it with impulse 18.
Note that it can only be activated if there is a player in line-of-sight
with an intermission spot. This prevents the view from screwing up, as
it occasionally will if there are no players around when it switches.
So the upshot is that the only thing you can really do with this mod
(at present) is convert first-person demos to a third-person chase cam.
Hopefully in future versions some of these bugs will be fixed, or
someone will come up with a cooler implementation. I think it's an idea
with potential, and I'm releasing it so others can improve on it.
Copyright and Distribution Information
--------------------------------------
This program is free software; you can redistribute it and/or modify it
under the terms of the GNU General Public License as published by the Free
Software Foundation; either version 2 of the License, or (at your option)
any later version.
This program is distributed in the hope that it will be useful, but
WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
for more details.
For a copy of the GNU General Public License, write to the Free Software
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
Credits
-------
id Software, for...well, you know why :-).
Eli (apathas@mailhost.primenet.com) for the chasecam tracking code from
his Kuaqe2 mod.
--
[ "Don't be misled! Look directly! What is this?" --Bassui ]
[ "I'm not a cat. I'm a little psycho kitten." --Mioawara Shiro ]
[ Here Lies One Whose Name Was Writ in Water --John Keats' Epitaph ]
[ Dirk Tebben Disclaimer: I have no one else's opinion to use. ]