Title    : Kasuha's DeathMatch Camera
Version  : 1.8
Filename : kascam18.zip
Date     : 6 Jul 1997
Author   : Karel Suhajda aka KASUHA
Email    : suhajda@serverpha.czcom.cz

Note     : this patch is based on DMCAM and QCAM patches

Type of Mod
-----------
Progs.dat: yes
Sound    : no
MDL      : no
BSP      : no
QC       : YES!!!

Time spent: don't ask me, I don't know...

--------------------------------------------------------------------------------
* Credits

- Id software for Quake
- Rogier R. Mulhuijzen for DMCAM and its sources
- Paul Jordan for QCAM and its sources
- The NecroRaisers clan for betatesting
- All you who sent me suggestions and help :-)

--------------------------------------------------------------------------------
* Introduction

I have seen some demos done using DMCAM and QCAM and I got the idea to do it
a better way.
Then I have seen some demos taken using KasCam and I got the idea how to do it
even better way...

--------------------------------------------------------------------------------
* Installation

Put the progs.dat in a sub-dir of the server's quake-directory (kascam for
example).

--------------------------------------------------------------------------------
* How to use the patch

Start up the server with -game <kascam's dir>. If you called the dir "kascam"
you would type:

quake -game kascam

Next, change the name of the client you want to use as the camera into
"". You can do it at console typing NAME "".
You can still use old "CamClient" name also, but "" will not appear in the
score table.
When that client connects it is automaticaly turned into the
camera. It is a good idea to run the camera on a listen server.
You can also turn normal player to camera using "IMPULSE 250" command
without renaming.
If you don't want to see CamClient in results table, change its name to ""

Every player can change to camera now! There is no limit on one camera per game!

I don't recommend too many cameras in a game - camera code is highly processor
intensive and you will get a slowdown or even 'runaway loop error'.

--------------------------------------------------------------------------------
* How it works

The player turns to camera-man when his name is "" or "CamClient" during
connect or when he types "impulse 250" on console.

The camera has eight working modes - five automatic and three manual.

o IDLE mode: camera flies randomly in the current room. This mode is used only
  when there is no live player in the level.
  When there appears any live player, camera enters the next mode:

o FLYBY mode: generates in the vicinity of targeted player and
  looks on him until he escapes round a corner or until he is too far
  away. Then a new camera is generated. When a player is near the camera
  (up to 200) and he is facing away, camera enters the next mode:

o FOLLOW mode: follows targeted player everywhere he goes. When the player
  disappears (thru a teleport or under/off water), camera switches to FLYBY.

o FIXED mode: used automatically from FLYBY mode when there is enough players
  visible at the same time. Tries to see as many players as possible, doesn't
  concentrate on single player. When here is less than two players visible
  for more than three seconds, camera searches for a new individual target. 
  If this mode is entered automatically, it lasts no more than 15 seconds.

o DEATH mode: selected automatically when targeted player turns dead. Tracks
  dead body or head and focuses on it. Reports player's name and frag count.
  This mode is not manually selectible.

o HAND mode: camera is unmovable but you can look around using controls.

o FLY mode: 'flying' camera - can't go thru walls. Moves slowly.

o NOCLIP mode: figure yourself.


When a player is targeted, camera shows also his status - weapons, ammo, armor,
health, keys. It doesn't show items which change the view color (biosuit,
pentagram, ring, quad).

Camera reports a new "victim" by its name and frag count. This is reported
to camera only. You can turn it off.

When the camera selects a player, it pursuits him 60 seconds or until death
if it comes sooner :-) Camera swaps FLYBY/FOLLOW mode or can swap to FIXED
mode when there are many players visible. Camera goes to DEATH mode when its
target die.

The selected player is always a live player. Selecting criteria is randomly
selected from following possibilities:
20% most frags
20% most health (max damage player can bear, counting current health and armor)
60% random selection

The CamClient can also control the camera:

IMPULSE 100: Select automatically a new target.
IMPULSE 1xx: Select xx-th player in order they connected. Starts in FLYBY.
             (CamClient is not a player)
             Doesn't switch to a new target if it is dead or dying.
IMPULSE 18x: Store current camera position to memory x (0 to 9).
IMPULSE 19x: Restore camera position from memory x. Works only in
             non-automatic modes.
IMPULSE 200: Force FLYBY mode on current target (may immediately turn to
             FOLLOW) When no target is selected camera chooses a player
             nearest to the screen centre. When here is nobody visible
             nothing happens.
IMPULSE 201: Force FOLLOW mode on current target.
             When no target is selected camera chooses a player nearest to the
             screen centre. When here is nobody visible nothing happens.
IMPULSE 202: Force HAND mode. Also moves camera to the point it is aiming at
             (not if in FLYBY or FIXED mode).
             You can move camera in HAND mode using IMPULSE 202.
IMPULSE 203: Force FLY mode.
IMPULSE 204: Force NOCLIP mode.
IMPULSE 205: Force FIXED mode.
IMPULSE 210: Turn "NOW TAKING" and "R.I.P." messages off/on.
IMPULSE 211: Reports current camera position. Somebody wanted it...
IMPULSE 212: Turn "NOW TAKING" and "R.I.P." messages ON
IMPULSE 213: Turn "NOW TAKING" and "R.I.P." messages OFF
IMPULSE 214: Always force FOLLOW mode - when a new player is selected, camera
             immediately goes to FOLLOW mode.
IMPULSE 215: Stop 'always force FOLLOW' - camera behaves normally from now on.
IMPULSE 216: Lock on current target. No other target is selected until
             IMPULSE 100 or IMPULSE 1xx is used. Designed to take demos
             of individual people (e.g. during a final match :-)
IMPULSE 217: Skip to next player. If the current player is locked using
             IMPULSE 216, lock is moved also. Skips all non-live targets.
             When no target is selected, nothing happens.
IMPULSE 250: Turn to camera if you aren't already.

NOTE: Described IMPULSEs excluding IMPULSE 250 work for camera only.
      IMPULSE 250 works for non-cameras only.
      Standard impulses work for non-cameras only.

------------------------------------------------------------------------------
* Known bugs

- Camera may not have any good spot points in FOLLOW/FLYBY. Then it behaves
  like IDLE though a target is selected. This is *very* unlikely to happen.
- Camera sometimes loses contact with its target on a lift in FLYBY mode.
- Camera doesn't move to intermission spot during intermission.

I am not sure if these can be considered 'bugs'. I call it 'minor problems' ;-)

A real bug:
- Sometimes camera does "automatic centerview". Don't know why it happens.
  A workaround: enter both "+LOOKUP" and "+LOOKDOWN" at the console.
  This may interfere with manual modes.
  Really don't know how to remove this :-(

------------------------------------------------------------------------------
* short FAQ

Q: Can I use KasCam on single computer?
A: No. Well, you can, but you'll have nothing to take. KasCam is one player
   converted to camera so on single computer you'll have nobody to do any
   action. You can only make demo of monsters walking thru corridors :-)

Q: Can I use KasCam take my single-player game?
A: Yes, but you need two computers. One to play on and one for camera. You can
   start in coop and then turn the second player to camera.

Q: How can I remove CamClient from score table?
A: Change its name to "". You can do it both before or after starting the
   camera.

Q: How can I switch to a saved position if I am in automatic mode?
A: Use the following: "IMPULSE 203;WAIT;IMPULSE 19x". It first changes to FLY
   mode (camera doesn't move) and then to your selected saved position.

------------------------------------------------------------------------------
* Copyright and Distribution Permissions (I like these from DMCAM so here goes:)

Authors MAY use these modifications as a basis for other
publically available work, after all, I did.

You may distribute this Quake modification in any free electronic format
as long as this description file remains intact and unmodified and is
retained along with all of the files in the archive.

You may not publish or distribute this Quake modification in a non-free
form without the permission of the author.
