id Software's Usenet Group Posts Archive!

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 ". If you did everything right, your view


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. ]