START WITH SOME LEGALESE:

Please distribute this code only in accordance with Id's license.  Since it
is a modified version of a part of Registered Quake, this means there are
certain things you can't do with it.  But using it with your copy of
Registered Quake is one of the things that is allowed.  (While not exactly a
custom level or level editor software, id has implied that this sort of thing
is an acceptable derivative work by releasing qcc.)


WHAT THIS IS:

This is the fourth release of my altered QuakeC system.  Child of SOLIDDOG,
SOLIDMON, and SOLIDMN2, it's changed its name to JEFFQC in order to reflect
the fact that it's more than just solid monsters now.

Solid monsters:

I've seen people complain on rec.games.computer.quake.* that the monsters
become ghostlike after death -- You can walk right through them, can't
shoot them, etc.  This annoyed me too.  So, I wrote spent this first day
after the release of QuakeC changing this.

When a monster dies, it falls down, may discharge some ammo, and lays
there.  Now, the laying monster can be hit, and eventually it gibs.  To
make this even more satisfying, I added a flesh-impact sound to the axe
chop (really a zombie sound) -- Kill that shambler and then hack it to
bits!  Or tear into a dead body with the super perforator and watch the
gibs fly.  (This is impressive, but not quite believeable)

When playing in God mode, I saw a shambler get mad at a scrag.  He killed
it, and then proceeded to hack the body to death before going on to his
next assailant.  This was pretty cool to watch.

Shamblers, demons and dogs will rip at dead bodies till they gib.  I should
change it so they only do this until they have a better target (ie someone
shoots them -- OTOH, this way it's cool to lure the shambler into killing a
scrag on E1L3 and then tearing into him with no fear while he works on the
corpse)

I haven't added pushable corpses, because I'm just plain lazy.

Friends/Helpers/Assistants:

The second biggest requested feature is a monster who goes along with you
and beats up on your enemies.  I've added that in this release of my QuakeC
programs.  As shipped, dogs and monsters with FL_FRIENDLY (8192) are
friendly to whatever player they see first.  Just fire up quake with this
progs.dat and enter e1m1.  In the "room" with the bridge, stand and let the
grunt fire at you.  The dog will notice that you're in danger and leap at
the grunt, usually managing to kill him.  Your friends will follow you
around, and can be pushed out of the way. (though not off the edge of
platforms)

Just because they're your friends doesn't mean they're any smarter than
regular monsters.  I've seen one dog eat right through another to get to
the enemy it was looking for.  They also don't get mad at you, even if you
take the axe to them.

WHAT STILL NEEDS TO BE DONE:

The dead monsters may need their bounding boxes changed -- I just shortened
them some, so that most monster bodies can merely be walked across.
Unfortunately, it's more of a glide across.  I don't know if this can be
fixed..

I haven't tackled the player object.  I was also thinking of adding a
gib-and-teleport effect when a player gets his new body.  But I don't dm
much, and am afraid of breaking something.

The fish and tarbaby are just like before.  They don't have gib animations 
and are written a little different.  Besides, I haven't played far enough
to run into them yet.

The bodies themselves stay the same between death and gibbed-to-pieces.
It'll be this way unless somebody designs models with arms, legs, etc
chopped off.  A tall order.

Steal the ideas from other people's solid monster code.

HOW TO TRY THIS OUT:

I've enclosed a PROGS.DAT file generated from my modified .qc files, as
well as the whole .qc source.  (Ah, if only this were unix .. I'd give you
diff -u format instead)

IF YOU WANT TO MAKE THE PROGS.DAT YOURSELF:

Get quakec from ftp://ftp.idsoftware.com/idstuff/source/qcc.tar.gz
You can use winzip to open it up, or unix tar and gzip.  There are also
versions of gzip (different from pkzip and info-zip) and tar for dos, look
around on ftp://oak.oakland.edu/pub/simtelnet/msdos for one.  Someone will
probably package qccdos.exe and the .qc source files by themselves soon.

Run QCCDOS from the directory where you put my qc files.  You'll end up with
PROGS.DAT in the directory where QCCDOS.EXE resides.  Now continue on
below.

IF YOU WANT TO JUST USE MY PROGS.DAT:

Make a directory in your quake registered directory (For instance,
C:\GAMES\QUAKE) called SOLID.  Then copy the PROGS.DAT file into SOLID.

Run quake with
 QUAKE -game solid
and go play with the nice little doggies who live on that level.


ABOUT MY CODE:

I modified the various <monster>.qc files, the weapons.qc file, and added
jsubs.qc.  The idea is this:

When a monster dies, don't set it "SOLID_NOT".  Instead, set all its
actions to nothing, assign a new health number and a new death function
that gibs the creature.  You now have a creature that's solid and
destroyable after death.  Turn off its FL_CREATURE flag so its death isn't
counted twice.

In each case, the code added to *_die is about the same for each monster,
and the code in *_really_die is very similar to the gib code that was
formerly inside _die.

I discovered a really neat way to make a monster invincible:  Set it
DAMAGE_NO.  Imagine a monster that's only vulnerable at certain moments,
such as when it's about to fire at you ...

Quake C seems to not be too difficult to program (though I don't think I
can create entities from scratch just yet) and it seems pretty powerful.
Having played with this, I just got a lot more impressed about the
possibilities Quake should offer those who are working to extend it with
their own ideas.



THANKS TO

id, for the game and all the openness about it.  Now, hurry up with the
linux version! (If you care too, mail johnc@idsoftware.com about it)

My girlfriend, for patiently ignoring me when I tried to explain how cool
it was to hack up dead bodies.


GIVE ME FEEDBACK:

Please mail me with your thoughts about this quick quake hack. (try saying
that three times fast!)  It may not be as glamorous as level editing, but
I like it.

Jeff Epler
(jepler@inetnebr.com, Synger on IRC (linuxnet and undernet, primarily))
30 July 1996
