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.