                            Film At 11 v0.94beta

                      Copyright 1997, Eric Stern

                        Email: estern@mgl.ca
                        http://www.mgl.ca/~estern


Installation:

 Drop FILMAT11.EXE in your Quake directory. It doesn't have to be, but
 it probably makes the most sense. Create an icon for it on your desktop
 if you feel its needed. Fire it up and set your working directory in
 File/Options. It should be your quake\id1 directory.

A. Introduction

 Film at 11 is a Windows95/NT based Quake Demo file editor. This program
 may be fairly memory intensive. If you have a low memory system (8 megs
 or less), editing large demos might be pretty slow.

 Film at 11 was largely created due to my boredom of watching complete demos.
 My clan (In Praise of Ammo - http://ammo.mgl.ca) is in the midst of an
 inter-clan competition (AmmoWar), for the purposes of fun and skill
 improvement. We basically have 1-on-1 matches, find a nice quiet server,
 first player to 25 frags wins. Demos of these matches are usually recorded.
 Thus, watching these demos (either for fun, or to examine the persons
 performance) has become a common passtime. However, I got bored watching
 them (some went on for in excess of 1 hour!) since the majority of the time
 nothing interesting is happening, the players are just running around
 collecting items. I thought to myself "Self, why couldn't we just remove
 the boring time in between the action?". So, I did some digging into the
 demo format, decided it wasn't too difficult, and wrote an editor.
 During development it occured to me that I could code a routine that would
 *automatically* remove the boring bits, and this goal has been realized in
 the form of the "compression" option in Film At 11.

 My clan is also toying with the idea of making a movie, having been well
 impressed with the work of the Rangers and Clan Undead. I figured a demo
 editor would be very valuable for that as well. As I write this FA11 has
 not yet been used in the creation of a movie. I have put in the features
 that I feel would be required in the process of making a movie. As I get
 feedback I will redesign and/or add features to assist in movie making.

 So, hopefully, this program will be of use to just about about everyone,
 wether they just want to compress a demo of a game they played to show
 off to their friends, right up to some serious movie making.

 --------------------------------------------------------------------------

B. Some background on demo files

 For really complete information about the demo file format (you WILL need
 this if you are going to do hard core demo editing), check out Uwe Girlich's
 incredibly awesome "Quake .DEM specs" at
    http://www.physik.uni-leipzig.de/~girlich/games/doc/dem.html

 FA11 would not have been possible without this document, so many thanks to
 Uwe for his hard work!

 So, a quick overview of the DEM format.

 The Quake server outputs an update at a specific time interval. This is
 generally every 0.05 seconds on a LAN, or 0.1 seconds on an Internet server.
 This update is refered to as a "block". Each block contains 1 or more
 "messages". Each message causes the Quake client to perform some specific
 operation, for example printing some text on the screen, or updating an
 objects position in the world. See the document listed above for a list
 of all the messages and their parameters.

 The first 3 blocks in a demo file contains startup information about the
 level about to be played. You DO NOT want to mess with this stuff. You can
 easily screw up the whole demo by messing with this information.

 Also, the very last block in the file should contain simply a "disconnect"
 message. This will cause the demo to exit gracefully back to the console,
 otherwise you will just get a solid network icon at the top of your screen.
 If you are making/editing a demo and this message is not at the end, its
 not a bad idea to put it in.

 --------------------------------------------------------------------------

C. Menu options

File/Open:
    Open a demo file. Loads it into memory. Duh.


File/Save:
    Saves the currently loaded demo to disk.


File/Split:
 This function will break up a .dem file into a bunch of smaller
 .dem files. The main reason for doing this is that FA11 can only load about
 32500 blocks at a time. So, if you have a long demo, you may have to break
 it up into chunks in order to edit it. If you can think of some other clever
 reason to split up a demo, this function is handy for that too.
 If you aren't sure if a demo is too big or not, just load it up. FA11 will
 tell you if its too big, then you can split it up.
 You can set the # of blocks to be in each fragment in the File/Options menu.

 Note that each fragment created is in itself a complete demo file. You can
 play each back in Quake, no problem. FA11 clones the header blocks from the
 main file into each fragment.
 NOTE: Some of you clever people know WHY it is limited to 32500 blocks.
 Yes, I could have fixed it. But, IMO, due to memory use and loading/saving
 time, 32500 is about the max you'd want to work with at any given time anyways.

 Additionally, if the demo file crosses multiple levels, FA11 will offer to
 let you save the new level in a different file. This is VERY handy since
 anyone who has ever recorded a multi level demo will know that Quake will
 NOT play it back correctly. So this feature will let you recover your
 multi-level demos.


File/Splice: Once you've edited each of your fragments to your satisfaction,
 you'll want to combine the fragments back into one big demo. It will prompt
 you for the list of files to splice back together. ORDER IS IMPORTANT. If
 you get the pieces out of order, the demo will be...strange. Of course, you
 might want to do this on purpose. (Can't imagine why but...)
 Each file you are splicing together must be a complete demo file!
 (FA11's split function makes a complete demo file out of each fragment.)
 FA11 will use the header blocks from the first file as the header for the
 final file, and remove the header blocks from each other piece.


File/Compress: The coolest feature of the program, IMHO. This function allows
 you to remove chunks of time in the demo where nothing "interesting" is
 happening. "Interesting" is defined by you, by selecting the events that
 you consider important with the checkboxes. In general, the defaults selected
 are what you want. By default the process will only keep 6 seconds before
 and 3 seconds after each frag. This is perfect for creating a "highlight"
 demo. No point watching the players running around picking up stuff, right?
 We wanna see death! Play around with this to see what kind of interesting
 things you can get.


File/Options: Bring up the configuration screen.

 Working directory: The default directory to load/save files from.

 Quake directory: Your quake directory (ie C:\quake)

 Split size: When splitting a file, you can tell it how many blocks you
  want to put in each file. Minimum of 4, maximum of 32497.

 Game directory: Same as your -game parameter in quake. Ie if you record
  a CTF demo (on ctf1 say), then set this to "CTF" (assuming you start
  quake with "winquake -game ctf". FA11 uses this when loading files
  for the 3d view.

 Debug mode: If checked, will show some extra information in the Messages
 window. Probably not useful to anyone but me.


File/Information: Displays some interesting stats about the currently
 loaded demo. Might take a while to display on large demos.


File/Exit: Exits FA11. Duh again.


Edit/Copy | Cut | Paste:
 Standard cut/paste operations on blocks or messages. Be careful what you
 are doing. Whichever listbox currently has the "focus" (generally which
 box you last clicked in) gets cut/copied from or pasted into.
 You CAN paste a message into a block, but you cannot paste a block into
 a message (obviously).
 Note: Doing these on LARGE numbers of blocks can take a while.


Edit/Paste Special
 This allows you to paste a message into multiple blocks. Copy the message
 to the clipboard, select Paste Special, and then tell it how many times
 you want to paste, and how many blocks to skip between each paste. Using
 this you could cause it to print the same message every 10 seconds, for
 example.

 Checking the "Paste in reverse order" will cause the blocks to be pasted
 in backwards (if you are pasting multiple blocks). This can make for some
 REALLY funny stuff.

 
Edit/Insert:
 This is a sort of generic command, and its action depends on which window
 is currently active. ie if the Sounds window is active, it will let you
 insert a new sound. If the Messages window is active, you can insert
 a new message. Basically, if a given window will let you insert something
 (not all do), you can do it with this command.


Edit/Delete: Deletes something in the currently selected window. See
 Edit/Insert above.


Edit/Remove: Will remove a certain msg type from all of the selected blocks
  (so select a group of blocks before you use this). It will pop up a dialog
  and you can select the msg type you want to get rid of.
  If you select UpdateEntity then the combo box at the bottom will be enabled
  and you can select the specific entity you wish to remove.
  Using this, you could strip certain players right out of a demo!


Edit/Find: Search for text in the currently loaded demo. This is great if you
 are looking for a specific event in a demo. For example, if you want to find
 the point where you picked up a grenade launcher, you could search on
 "grenade". You can also search on event names, like "centerprint" or
 "updatefrags". A list of events is provided at the bottom of this doc.


Edit/Fix Time: Another nifty function. If you start chopping chunks out of
 a demo file, the time stamps on the blocks will start to have big gaps in
 them. This can cause some unwanted effects. Fix Time allows to to fix this
 up, and play other fun tricks with time.

 I'll explain the 3 modes of operation.

 Standardize: This makes sure every time stamp in the file is exactly the
  same duration. You can select the time base you want the demo to be. In
  general you want this to be the same as the demo was recorded. See FX below.
  ex:
   before: 0 1 5 6 7 8 9 10
   after:  0 1 2 3 4 5 6 7

 Linearize: Puts time in a nice logical progression, but doesn't interfere
  with the time between each block. IF YOU ARE PUTTING SPECIAL TIME EFFECTS
  IN YOUR DEMO, YOU NEED TO USE THIS AND *NOT* STANDARDIZE.
  ex:
   before:  0 1 2 3 9 10 12 14 16 17 18 19
   after:   0 1 2 3 4 5  7  9  11 12 13 14

 Modify: To play tricks with time, select a group of blocks and select this
  function. Give it a wierd time base. Now that group of blocks will have
  a different time base than the rest of the demo. Use this to create slow-mo
  and fast-mo. Its excellent to do a nice slow-mo of that amazing frag you did.


Effects/ReCamera: Allows you to move the camera position in the selected
  group of blocks. So, select a group of blocks. Hit Effects/Recamera.
  Select the entity that you wish to become the camera. Check the checkbox
  and select the entity that you wish to track. Hit ok and it will process
  the demo.


Effects/Fade: Allows fade in/out effects, easily. Select a group of blocks.
  Hit Effect/Fade. Choose wether you want to fade in or out, and to/from
  black or white.


Effects/Slow-Mo: Changes the speed of the selected blocks. Really all it does
  is insert host_framerate commands at the first and last block you select.
  After doing this, you can manually change the host_framerate command to
  tweak the actual speed.


Effects/Fast-mo: Same as slow-mo. See above.


3D View: Controls the 3d view window. Has two settings, Off and Solid.
 Off is self explanatory. Solid will render a view of the level at the
 currently select block. See 3D view below.

Window/*: Your standard MDI window controls. I suggest you Tile your
windows and then manually tweak them into a setup you like.


Help/About: Vanity information about this program.

 --------------------------------------------------------------------------

D. The Windows:

Blocks:
 If you used a previous version of FA11, you'll recognise this. It just
 lists the blocks in the demo. You can select block(s) to cut, paste,
 fix time, and other things. Clicking on a block will cause all the messages
 in that block to be shown in the Messages Window. Also, that block will be
 shown the in 3d View if it is active.

Messages:
 Again, previous users will recognise this. It lists all the messages in
 the current block. Clicking on a message will cause its parameters to be
 displayed in the Edit window (if it is editable).

Edit:
 Shows the parameters for the current block and message. Double click on
 a parmeter to edit it!

Sounds/Models:
 Lists the sounds and models used in this demo. You can add and delete entries
 in these lists. BE VERY CAREFUL when deleting entries. If you delete a sound
 and that sound is still used in the demo, the demo will crash when it tries
 to play the sound. Same goes with models. I only really included the delete
 function so you can delete any items that you add in manually, not for
 deleting stuff that was present in the original demo.
 If you click on an item, it will show the # of that item in the Status bar.
 Just in case you need that info for something.

Entities:
 Just a reference list of entities in the demo. You can't edit this list.
 Players names show up in the proper place.

3D View:
 Yes, its the feature everyone has been asking for! The 3d view of the demo.
 Load up a demo, select 3D View/Solid and your starting position should appear
 in the 3D View window.

 NOTE: 3D View uses OpenGL to render. Thus, you must have the Microsoft (or
 a suitable substitute) OPENGL32.DLL in your \WINDOWS\SYSTEM directory.
 If you have 3d hardware, you can use your vendors OPENGL32.DLL. You CANNOT
 use the 3DFX OPENGL32.DLL for GLQuake.

 Clicking on a block in the Blocks window will move the camera to that block.
 You can also use the VCR controls (stop,play) to play the demo.

 You will notice that the walls are all solid colors. I have not implemented
 texture rendering yet. The 3d View is not meant to replace Quake. It is meant
 to give a rough idea of what is going on in the demo at any given time.
 Thus texturing is not an important feature, and would just slow the rendering
 down (and its none too speedy to begin with). All entities in the demo
 (items, monsters, players, etc) are rendered as red boxes. I will probably
 add textures, and possibly entity rendering in future versions of FA11. For
 now, the 3d view does what it was meant to.

 Pushing the little play button will start playing back the demo at the
 currently selected block. Text messages are printed, and the current
 timestamp is displayed as it is playing back. Playback will stop at the
 end of the demo, or when you hit the stop button.

 Hint: Make the 3d View window as small as you can stand. The smaller it is
  the faster it will render (and thus be more smooth).

 --------------------------------------------------------------------------

E. Misc notes:

1) In general, don't save your modified demo over the original. You might want
   the original again.

2) After you compress a demo, load it in and do a Edit/Fix Time and
   Standardize it. It cleans up some unwanted effects. Make sure you pick
   the right time base!

3) You cannot splice together pieces of demos that were recorded on
   different maps. (Well, you CAN, but the demo will not play back in Quake
   properly.) I also suspect that you cannot splice together pieces of
   seperate demos even if they were recorded on the same map, however I
   haven't tried this yet. It *might* work. Someone try and let me know. :)

 --------------------------------------------------------------------------

F. Known bugs

1) The text descriptions of each message is not always updated correctly
   Save and reload the file to bring it up to date, or edit the message.

 --------------------------------------------------------------------------

G. Credits

    Thanks to Uwe Girlich for the Quake .DEM specs.

    Thanks to id Software for Quake (of course).

    Thanks to the boys in my Clan for testing and ideas. (Oh, and you too
    Lady Death! :) )

    Thanks to Joel Beaudoin for creating QGL (Quake flythrough in OpenGL)
    on which code my 3D view is based.

    Thanks to everyone who emailed in suggestions and praise.


Quake is a copyright of id Software.

Please send any bug reports, ideas or other comments to estern@mgl.ca.
Flames or other nonsense will be cheerfully deleted.

Please, if sending a bug report, try to give me some *information*. Something
like "Your compression thingy doesn't work" is not very helpful. :)
Send along the demo file you are having trouble with if possible. If you are
sending a demo file along, please MAKE SURE ITS ZIPPED first! Thanks.

 --------------------------------------------------------------------------
H. Version History

v0.95beta - Released Junk 12, 1997
  New features
    - wrote my own File History routines (a pox on people releasing little
      components without source!)
    - added wireframe rendering (it was soooooo easy..but kinda useless IMHO)
    - you can now select multiple blocks, and modify the camera angle
      on the whole bunch of them
    - added Edit/Remove (removes a specific type of msg from a group of blocks)
      if removing UpdateEntity msgs, you can specify the entity
    - added Effects menu
        - ReCamera (moves and re-orients the camera in a group of blocks)
        - Fade... ...pretty much self explanatory
        - Slow/Fast Mo ...again, self evident
  Bug fixes
    - fixed pasting msgs into blocks (including Paste Special)
    - fixed incorrect message when pasting blocks
    - fixed spelling of "monster" on Compression dialog
    - linearize time now works properly
    - will not write out 0 length (empty) blocks when saving demo

v0.94beta - Released April 28, 1997
    - revamped the entire program...now an MDI app
    - added 3d preview
    - added windows for Sounds, Models, Entities
    - can insert/delete sounds and models
    - can insert/edit more messages now

v0.93beta - (private) Released March 26, 1997
    - added View/This Block
    - added Edit/Paste Special

v0.92 - Released March 25, 1997
    - Initial release

