game-source/paroxysm/quake/botliq.qc
2002-02-17 03:18:55 +00:00

127 lines
4 KiB
C++

/*
POX - This file contains a function taken from norse_movetogaol
The ONLY thing I used is norse_waterlevel. All bot movement is
controlled by movetogoal and coffe_move
The Paroxysm progs.dat is bloated due to the new weapons, I couldn't add the
entire norse_movetogoal even if I wanted to (which I don't ;) - I have
enough trouble debugging 50 lines of movement code never mind 2500!)
The Following is the original header from botmove.qc, obviously, not
all of it is relevent anymore.
*/
/*=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=*\
|| norse_movetogoal and related move functions ||
|| by Roscoe A. Sincero ||
|| e-mail: legion@keg.zymurgy.org ||
|| ||
|| Copyright(c) 1997 ||
|| ||
|| Date: June 27, 1997 (v0.30) ||
|| Date: July 03, 1997 (v0.31) ||
|| Date: July 13, 1997 (v0.31.1) ||
|| Date: July 21, 1997 (v0.32.0) ||
|| ||
|| ||
|| Permissions: You are allowed to use these functions ||
|| provided that the original author, ||
|| Roscoe A. Sincero gets credit for coding ||
|| the functions and that your work is ||
|| is publically available to anyone and it ||
|| is *FREE*. ||
\*=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-==-=-=-=-=-=-=-=-=-=*/
/*
If you wish to add this code or portions of it in a commercial
product, you will need to contact me _AND_ the individuals mentioned
in my credits below.
Norse_movetogoal package v0.32 by Roscoe A. Sincero
Additional credits: Cameron Newham for Eliminatorbot v1.4. If it wasn't
for his bot, I would never had tried to create my own movetogoal
function. I had major problems in combining his bot with roambot
and at the time I couldn't figure out why the bot would simply stop
for no reason. So I played around with the FL_ONGROUND flag. From
this, I formed the basis for the movetogoal function. For the curious,
it turns out that my problems were with those nested if-else block
statements and had nothing to do with FL_ONGROUND. The jumping code
and swimming code used in the eliminatorbot formed the basis for the
now complicated swim code and jump code.
Jonathan E. Wright for Cujo v1.4. I used the FINDLEDGE function and
used ideas taken from various other functions related to finding gaps
in the floor.
*/
float (entity me) norse_waterlevel =
{
local float pc;
if (me == world)
return 0;
/*
I originally took the waterlevel code from Jonathan E. Wright's
CUJO_Waterlevel function of Cujo v1.4. It has proven to be unreliable
and more importantly, it is no longer compatible with the move code.
So I made my own.
The variable .watertype2 is used instead of .watertype. The variable
.watertype can be modified by the Quake engine itself. Moreover, it
is also used to produce the unwanted splashing sounds. To remove the
splashing sounds, .watertype is permanently set to zero. .watertype2
is used instead.
*/
me.watertype = 0;
// check at eye level
pc = pointcontents (me.origin + me.view_ofs);
if (pc == CONTENT_WATER || pc == CONTENT_SLIME || pc == CONTENT_LAVA)
{
me.watertype2 = pc;
me.waterlevel = 3;
return 3; // liquid is at eye/head level, above mouth/nose
}
// check at waist level
pc = pointcontents (me.origin + '0 0 6');
if (pc == CONTENT_WATER || pc == CONTENT_SLIME || pc == CONTENT_LAVA)
{
me.watertype2 = pc;
me.waterlevel = 2;
return 2;
}
// check at feet level
pc = pointcontents (me.origin - '0 0 20');
if (pc == CONTENT_WATER || pc == CONTENT_SLIME || pc == CONTENT_LAVA)
{
me.watertype2 = pc;
me.waterlevel = 1;
return 1; // liquid covers legs
}
pc = pointcontents (me.origin - '0 0 24');
if (pc == CONTENT_LAVA || pc == CONTENT_SLIME || pc == CONTENT_WATER)
{
me.watertype2 = pc;
me.waterlevel = 1;
return 1;
}
me.watertype2 = 0;
me.waterlevel = 0;
return 0; // water, if any, is not significant
};