                               DROP DEAD v106b
                  ADVANCED DEATHMATCH VARIATIONS FOR QUAKE
                               By Walter Lord
                          With Inspirations by Many


PRELUDE:

This is release eleven of a set of alternative Quake source devised to
make deathmatch and teamplay more enjoyable.  It will be updated with new
features and will be recoded as dictated by each new version of Quake.
This version should work fine with the 1.06 and previous releases of
Quake.  Future versions of this set of Quake source will have the
following naming convention:

     DROPDEADqqqv.ZIP

Where DD is the Drop Dead abbreviaion, qqq is the version of Quake for which
it is coded, and v is the version of the source.  The first release could
have been aptly named DROPDEAD101A.ZIP, but I choose DROPDEAD.ZIP to better
attract attention.

A registered version of Quake is required along with the Quake C compiler.
To use Drop Dead features, you must create the following directory structure:

    /QUAKE          - The root Quake directory.
    /QUAKE/DD       - The base directory for Drop Dead files.
    /QUAKE/DD/PROGS - The location of the all Quake and Drop Dead source.

Copy all the Drop Dead source modules into the /QUAKE/DD/PROGS directory.
Be sure to include the new .MDL files in this directory.  Now compile the
Quake source by typing QCCDOS or QCC (depending on whose Quake compiler you
are using).  Drop Dead should now be ready to go.  Simply add "-game dd"
to the command line when you run Quake (i.e. QUAKE -game dd).  When running
an internet server, I request that the server name include Drop Dead or DD
to aid players in identifying use of this program.

To report any bugs, make comments, or provide suggestions, please Email me
at Lord@Brodart.com.


HISTORY:

As much as I love Quake, I was a little disappointed by its Deathmatch /
Teamplay capabilities.  Sure, you no longer get the lockups that were
prevalent in Doom, but I missed the monsters in Deathmatch and found
Teamplay allowed way too much cheating.  I'm sick of some Joe belonging to
the RED team temporarilly changing colors so he slip in amongst the ranks
of the BLUE and then change back to RED and massacre the lot.  Sure the
carnage is neat, but the gameplay sucks!

Then I recently came across some source written by Dennis Noordsij that
offered skin textures for teamplay.  It still linked each team to a color
but definitely made it easier to tell friend from foe.  Included amongst
the textures are Duke 3d, Terminator, Stormtrooper, and about a dozen or so
others.  With keys linked to impulses, a player could select which texture
he or she desired.  Better yet, a player, without the source installed at
his/her end, could still play but would only see the default Quake Guy.

I took off with this concept and have added the features listed below.


PREDEFINED LOCKED TEAMS:

The server can now be easily configured for multi-team play.  Up to four
teams can be defined with each team having its own skin texture and its own
color.  The default teams include RED (Default Quake Skin), YELLOW (Duke 3d),
WHITE (Stormtrooper), and GREEN (Toad Skin).  By adding a line which reads
teamplay followed by a 2, 3, or 4 to the CONFIG.CFG file, the server will
track two to four teams.  This line can also be typed in Quake's console
which is displayed during gameplay by pressing the '~' key.  Better yet,
players CANNOT switch teams!  When a new player enters the server, he is
automatically assigned to the most needy team - the team with the fewest
players.  In case of ties, he is assigned to the team defined first.  Using
this logic, players on a local network can still choose sides.

The default teams can be reconfigured by editing the WEAPONS.QC source -
look for the section near the top dealing with teams.  I pretty much leave
editing the source up to experienced programmers adding that the
actual_teamX variables, the DisplayTeam function, and the ConfigTeam
function need only be changed.  Note that the actual_teamX variables pertain
to the team color plus one.  Also note that there are 19 skins numbered 0
through 18 and listed in the DisplaySkin function.  I would prefer to have
placed all the teams options in variables, but the current version of the
Quake compiler is not happy with string constants.  : (


TEAMMATES NO, SELF YES!

Teamplay has also been slightly altered.  Teammates still cannot be hurt by
other team players.  However, a player can now injure himself - so beware of
grenade and rocket blasts!


GAME OF TAG:

If teamplay is set to -1, Quake takes on a variation of tag.  One player
is IT and the other players must "tag" him.  The player who frags the IT
player gains three frags and becomes IT.  If the IT player can survive, he
will earn a bonus frag for each minute he remains alive.  The IT player
takes on the features (color and skin) of team two while the other players
take on the the features of team one.  By default, the IT player has a
Duke 3d skin - thus everyone is out to get Duke!  : )  However, note that
team damage rules are turned off - any player can hurt any other player.

For a different variation of tag, set teamplay to -2.  This variation allows
an IT player to tag another player IT by touch.  Now the IT player can sneak
up on another player, tag him IT, and gib him to earn three frags.  Instead
of fleeing, as in the first tag variation, the IT player tends to actively
pursue.  Note that, after becoming IT, a player cannot tag another for two
seconds.


WE HAVE A WINNER!

For teamplay, at the start of each level, the winning team for the prior
level is displayed.  The winner is determined by a total frag count for
each team.  The team with the greatest total wins.  In case of a tie,
there is no winner.  Should a team member leave before a level is
completed, his or her frags are not included in the total - the moral of
this story is that quitters never win!


DEATHMATCH MONSTERS!

Yes, one thing missing from a Quake deathmatch is monsters.  Now the
deathmatch variable can be set to 3 to indicate play with monsters.  It can
be added to the CONFIG.CFG file or entered at the console.  Note that when
a Quake server is configured from the menu, the deathmatch variable is
ALWAYS reset to 1, so you must then manually rekey it to 3 at the console.
You may also want to key "restart" to respawn the level and add monsters.


SOLID, GIBBABLE CORPSES:

Now anyone or anything that dies (but is not gibbed) can be blasted into
pieces!  This makes for some nice bonus carnage and some interesting piles
of bodies.  The corpses are also solid and serve as speed bumps and
sometimes blockades.  I do not claim to have originally penned this
concept - merely refined it by including player corpses as gibbable and
allowing jumps while standing on corpses.  I also fixed a problem with
corpses becoming suspended in mid-air when corpses beneath it are gibbed.
If this option is not desired, it may be disabled by adding the line
"temp1 4" in the CONFIG.CFG file or entering this line at the console
and restarting the level.


SKIN CHANGES ARE BACK:

Skin changes can now be made on the fly in deathmatch and cooperative
games.  Simply bind a key to impulse 200 / 201 (or type the impulse at
the console) to advance / retreat through the list of skins.  Also an
individual impulse has been added for each skin as follows:

  Default Quake 150    Duke Nukem 3d  151    Toad           152
  Stormtrooper  153    Max            154    Terminator     155
  Judge Dredd   156    Camo'd Soldier 157    Captain Picard 158
  Wizard        159    Predator       160    Skeleton       161
  Wan-Fu        162    Henry Rollins  163    He-Man         164
  Boba          165    Superman       166    Cop            167
  The Flash     168

If you want to automatically be configured for a specific skin, create
a RUN.CFG file and add an impulse for the desired skin.  This file
must reside in the DD directory.  When Quake is started, it will be
executed after the player has fully entered the game.  Other impulses
can also be added to this file.


BING!  BING!  BINNGGG!

Each spike shot from a nailgun or super nailgun can now ricochet off
walls, floors, ceiling, whatever.  That enemy hiding around the corner
can be easily targeted using a little geometry - bing, bing, splat!
Spikes will only ricochet at angles notable lesser or greater than
90 degrees.  Dead on shots will not deflect which helps prevent
"ricochet suicide".  However, each ricochet slows the spike and lessens
its damage.  To enable ricochets, add the line "temp1 1" to the
CONFIG.CFG file or enter the line at the console and restart the level.
To enable the morningstar as well, set temp1 to 3.


BAR-B-QUE?  ANYONE?  ...  BAR-B-QUE ANYONE!!!

Courtesy of Steve Bond (Wedge) at nuc.net, a new weapon has been added to
this version - a flamethrower!  Now you can toggle between the grenade
launcher and the flamethrower with whatever key you have bound to the
launcher (impulse 6).  You can also go directly to the flamethrower with
impulse 50.  It is powered by rocket fuel (rockets/grenades) and chews
them up fairly quickly.  This hardy consumption is counter-balanced by
the fact that it delivers alot of damage and its targets ocassionally
catch on fire!  A lit target will even continue to burn after it
collapses and until it gibs.  How's that for well done!?


MORNINGSTAR:

Ever wish you could climb to the top of a teleporter and wait to frag an
opponent attempting to leave the level?  With the morningstar patch
written by Mike (amichael@asu.alasu.edu), now you can!  Simply select the
morningstar by toggling the axe (impulse 1) or pressing a key bound to
impulse 51, and then press the fire button.  A spiked iron ball with a
trailing chain shoots forth and plants itself in the selected target.
Keep the fire button pressed, and you will be pulled to the ball.  Select
another weapon and you can actually attack while hanging suspended.  With
the morningstar selected, release the fire button and you will be dropped
to the ground.  The morningstar also makes a decent weapon.  It does half
the damage of an axe, but it can be thrown.  However, unlike the original
patch, the star will not stick in its target and continue to do damage.
This was just far too nasty for deathmatch.  There is one flaw with this
weapon: It will often allow its user to pull himself up to the sky.  In
defense of the author, the patch code is not flawed but rather the
Quake code for determining the content location of a point is. :(
Hopefully the brain trust at id will cure this soon.  To enable the
morningstar, include the line "temp1 2" in the CONFIG.CFG file, or enter
the line at the console and restart the level.


I HEAR YOU!

Now monsters won't stand around with their fingers up their asses while
the sounds of combat resonate in the next room.  They will respond to the
sounds of weapon fire and will move to join the fray!  Some weapons are
also louder than others and will tend to attract more attention.  For
instance, a rocket being fired will certainly attract a mob more quickly
than an axe thunking off some poor grunt's head.  Also the higher the
skill level the better the monsters' hearing.  Please note that this
source change does not take echoes into account.  It does however
attempt to consider walls, floors, ceiling, etc which tend to muffle the
sound accordingly.


KNOWN "BUGS":

Currently, the only known bug is the occasional stuck fire button.  This
appears to take place when DD is doing a player color change, such as when
assigning teams or when an IT player is tagging another player, and a
weapon is being fired the exact same time.  As soon as the fire button is
pressed again, the stuck condition is relieved.  I've spent a good deal of
time trying to remedy this condition, and I've concluded that it is an
internal problem in Quake and NOT my code.  It appears that when a color
change takes place Quake momentarily stops monitoring the fire button and
sometimes loses the button state.  It does not happen often, so the game
play is rarely interrupted, but if anyone has a solution for this problem,
I would like to hear from you.  Please Email me at lord@brodart.com.

A bug with morningstar allows its user to "kiss the sky".  This is a Quake
flaw that hopefully the id brain trust will soon solve.


REVISION HISTORY:

The games of tag are now turned on by setting teamplay to -1 or -2 instead
of 5 or 6.  This allows easier configuration of more than four teams.

The suspended corpse problem was readdressed and corrected.  It seems that
the builtin function droptofloor() does not properly discern between a body
and the ground, so when it lands, it always returns true.

Sound effects were added for the bouncing gibbed head.

Crucified zombies are no longer mere wall decorations.

A player can change his skin during deathmatch by using impulse 200 /
impulse 201 to advance / retreat through the skin list.

Backpacks can be targeted.  If destroyed and containing grenades...  Boom!
Also backpacks should never fall through the floor again.

Nails can be optionally set up to ricochet.  Bing!  Bing!  Binnggg!

Bar-b-que?  Anyone?  Bar-b-que anyone!!!  The first new weapon has been
added courtesy of Steve Bond (wedge@nuc.net) - a flamethrower!

For teamplay, at the start of a new level, the winning team is reported
for the prior level.

During teamplay, a player gets no frags for telefragging a teammate.  The
teammate, however, does still die. :)

Admire the new sound effects of a burning victim.

Added a more balanced variation of the morningstar weapon patch written
by Mike (amichael@asu.alasu.edu).

Made dead monster corpses shut up once and for all!  Also solid corpses
can now be disabled.

Fixed a bug that sometimes left two players with the same IT color.
However, now when an IT player dies, he keeps the IT color until he
respawns.

Improved spike ricochets.  Now shots hitting a wall at a near
perpendicular angle will not deflect.  This lowers the odds of
ricochet suicides.

Monsters can now hear!  This means that nearby sounds of battle will
alert them to the intruder(s).

In cooperative games, players can now change skins.

A RUN.CFG file is executed AFTER a player has completely entered a
game.  Thus any impulses included in this file will be processed -
A player's skin can be automatically set with an impulse!

DD has been updated with all the 1.06 source changes except the
teamplay 2 option which conflicts with a DD option.

In a game of tag, sometimes players would maintain the IT color
despite no longer being it.

If ammo picked up for current weapon, it wasn't added to the
displayed ammo total.


A FINAL NOTE:

To use this DD source, the server should be version 1.06 Quake or
previous.  Future versions may work with this source, but then again...
The Quake compiler should be intended for the version of Quake being used.
I do not know the memory requirements caused by the addition of several
player skins, but I venture to guess that 10 MBs may be in order.  If
people report memory problems, I may simply reduce the number of available
skins or may make a generic MDL and and extended MDL (a superset of the
generic).

Other than altering teams, I do not recommend changing the layout of the
team code.  Quake is rather particular about when certain functions and
code can and can't be performed - especially during the think processes
and level changes.  I've taken alot of care and time in laying out this
code.  If you see any necessary improvements, have any useful suggestions,
or find any bugs, please contact me (Walt) at lord@brodart.com.
