0
0
Fork 0
mirror of https://git.code.sf.net/p/quake/game-source synced 2025-04-25 16:50:58 +00:00

even more break^Wprogress :)

This commit is contained in:
Bill Currie 2003-07-24 08:25:04 +00:00
parent d186408279
commit e730793581
4 changed files with 772 additions and 907 deletions

View file

@ -144,35 +144,37 @@ Bot has lost its target.
-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
*/
-(void)lost:(entity)targ :(integer)success
-(void)lost:(WayPoint)targ :(integer)success
{
if (!targ)
return;
[self target_drop:targ];
if (targ.classname == "waypoint")
if (targ.ent.classname == "waypoint")
targ.b_sound &= ~(ClientBitFlag (b_clientno));
// find a new route
if (!success) {
targets[0] = targets[1] = targets[2] = targets[3] = NIL;
last_way = FindWayPoint (current_way);
ClearMyRoute ();
last_way = [self findWayPoint:current_way];
[WayPoint clearMyRoute:self];
b_aiflags = 0;
} else {
if (targ.classname == "item_artifact_invisibility")
if (targ.ent.classname == "item_artifact_invisibility")
if (ent.items & 524288)
bot_start_topic (3);
if (targ.flags & FL_ITEM) {
if (!targ.model)
targ._last = NIL;
/*XXX
if (targ.ent.flags & FL_ITEM) {
if (!targ.ent.model)
targ.prev = NIL;
else
targ._last = ent;
targ.prev = ent;
}
*/
}
if (targ.classname != "player")
if (targ.ent.classname != "player")
targ.search_time = time + 5;
}
@ -186,23 +188,23 @@ removed.
-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
*/
-(void)check_lost:(entity)targ
-(void)check_lost:(WayPoint)targ
{
local vector dist;
dist = realorigin (targ) - ent.origin;
dist = realorigin (targ.ent) - ent.origin;
dist_z = 0;
if (targ == NIL)
return;
// waypoints and items are lost if you get close enough to them
if (targ.flags & FL_ITEM) {
if (vlen (targ.origin - ent.origin) < 32)
if (targ.ent.flags & FL_ITEM) {
if (vlen (targ.ent.origin - ent.origin) < 32)
[self lost:targ :TRUE];
else if (!targ.model)
else if (!targ.ent.model)
[self lost:targ :TRUE];
} else if (targ.classname == "waypoint") {
} else if (targ.ent.classname == "waypoint") {
if (!(b_aiflags & (AI_SNIPER | AI_AMBUSH))) {
if (b_aiflags & AI_RIDE_TRAIN) {
if (vlen (targ.origin - ent.origin) < 48)
@ -213,17 +215,17 @@ removed.
} else if (vlen (targ.origin - ent.origin) < 32)
[self lost:targ :TRUE];
}
} else if (targ.classname == "temp_waypoint") {
} else if (targ.ent.classname == "temp_waypoint") {
if (vlen (targ.origin - ent.origin) < 32)
[self lost:targ :TRUE];
} else if (targ.classname == "player") {
if (targ.health <= 0)
} else if (targ.ent.classname == "player") {
if (targ.ent.health <= 0)
[self lost:targ :TRUE];
else if ((coop) || (teamplay && targ.team == ent.team)) {
if (targ.target1.classname == "player") {
if (!targ.target1.ishuman)
else if ((coop) || (teamplay && targ.ent.team == ent.team)) {
if (targ.targets[0].ent.classname == "player") {
//XXX if (!targ.targets[0].ishuman)
[self lost:targ :TRUE];
} else if (targ.teleport_time > time) {
} else if (targ.ent.teleport_time > time) {
// try not to telefrag teammates
keys &= 960;
} else if (vlen (targ.origin - ent.origin) < 128) {
@ -419,7 +421,8 @@ confused
-(void)path
{
local entity jj, tele;
local WayPoint jj, tele;
local entity e;
[self check_lost:targets[0]];
if (!targets[0]) {
@ -432,11 +435,13 @@ confused
jj = FindRoute (last_way);
if (!jj) {
// this is an ugly hack
/*XXX
if (targets[0].current_way != last_way) {
if (targets[0].classname != "temp_waypoint")
if (targets[0].classname != "player")
[self lost:targets[0] :FALSE];
}
*/
return;
}
@ -446,12 +451,12 @@ confused
// Readahed types are AI conditions to perform while heading to a waypoint
// point types are AI flags that should be executed once reaching a waypoint
b_aiflags = (jj.b_aiflags & AI_READAHEAD_TYPES) | (last_way.b_aiflags & AI_POINT_TYPES);
b_aiflags = (jj.flags & AI_READAHEAD_TYPES) | (last_way.flags & AI_POINT_TYPES);
[self target_add:jj];
if (last_way) {
if (CheckLinked (last_way, jj) == 2) {
if ([last_way isLinkedTo:jj] == 2) {
// waypoints are telelinked
tele = FindThing (ent, "trigger_teleport"); // this is probbly the teleport responsible
tele = FindThing (ent, "trigger_teleport").@this; // this is probbly the teleport responsible
[self target_add:tele];
}
traceline (last_way.origin, jj.origin, FALSE, ent); // check for blockage
@ -466,13 +471,13 @@ confused
[self weapon_switch:1];
b_aiflags = b_aiflags | AI_BLIND; // nick knack paddy hack
} else if (trace_ent.targetname) {
tele = find (NIL, target, trace_ent.targetname);
if (tele.health > 0) {
ent.enemy = tele;
e = find (NIL, target, trace_ent.targetname);
if (e.health > 0) {
ent.enemy = e;
[self weapon_switch:1];
} else {
// target_drop (jj);
[self target_add:tele];
[self target_add:e];
// bot_get_path (tele, TRUE);
b_aiflags |= AI_BLIND; // give a bot a bone
return;
@ -767,7 +772,7 @@ frame, the ai_time limits it's actual updating
// target1 is like goalentity in normal Quake monster AI.
// it's the bot's most immediate target
if (route_table == ent) {
if (route_table == self) {
if (busy_waypoints <= 0) {
if (waypoint_mode < WM_EDITOR)
[self look_for_crap:TRUE];

View file

@ -554,33 +554,6 @@ fisible =
return FALSE;
};
/*
Wisible
goes through movable brushes/entities, used
for waypoints
*/
// this is used for waypoint stuff....
float (entity targ1, entity targ2)
wisible =
{
local entity ignore;
local vector spot1, spot2;
spot1 = targ1.origin;
spot2 = realorigin (targ2);
ignore = self;
do {
traceline (spot1, spot2, TRUE, ignore);
spot1 = realorigin(trace_ent);
ignore = trace_ent;
} while ((trace_ent != NIL) && (trace_fraction != 1));
if (trace_endpos == spot2)
return TRUE;
else
return FALSE;
};
/*
sisible

File diff suppressed because it is too large Load diff

View file

@ -1,7 +1,48 @@
#include "Entity.h"
@class Bot;
@interface WayPoint: Entity
{
@public
WayPoint [4] targets;
WayPoint next, prev;
integer flags;
vector origin;
integer count;
integer b_pants, b_skill, b_shirt, b_frags, b_sound;
integer keys;
float items;
WayPoint enemy;
float search_time;
}
+(void)clearAll;
+(WayPoint)waypointForNum:(integer)num;
+(void)fixWaypoints;
+(void)clearRouteTable;
+(void)clearMyRoute:(Bot) bot;
-(void)fix;
//-(id)init;
-(id)initAt:(vector)org;
-(id)initFromEntity:(entity)ent;
-(integer)isLinkedTo:(WayPoint)way;
-(integer)linkWay:(WayPoint)way;
-(integer)teleLinkWay:(WayPoint)way;
-(void)unlinkWay:(WayPoint)way;
-(void)followLink:(WayPoint)e2 :(integer)b_bit;
-(void)waypointThink;
-(integer)canSee:(WayPoint)way ignoring:(entity)ignore;
@end
@interface Bot: Entity
{
@public
//model modelindex
//frame angles colormap effects
//owner
@ -30,8 +71,9 @@
float b_entertime;
float b_menu, b_menu_time, b_menu_value;
integer route_failed;
integer dyn_flags, dyn_time, dyn_plat;
entity temp_way, last_way, current_way;
integer dyn_flags, dyn_plat;
float dyn_time;
WayPoint temp_way, last_way, current_way;
entity [4] targets;
entity avoid;
entity _next, _last;
@ -39,6 +81,8 @@
vector b_dir;
vector dyn_dest;
vector punchangle;
float teleport_time, portal_time;
}
- (id) init;
- (id) initWithEntity: (entity) e;
@ -65,8 +109,8 @@
-(integer)target_onstack:(entity)scot;
-(void)target_add:(entity)e;
-(void)target_drop:(entity)e;
-(void)lost:(entity)targ :(integer)success;
-(void)check_lost:(entity)targ;
-(void)lost:(WayPoint)targ :(integer)success;
-(void)check_lost:(WayPoint)targ;
-(void)handle_ai;
-(void)path;
-(float)priority_for_thing:(entity)thing;
@ -83,152 +127,21 @@
-(void)fight_style;
@end
@interface Bot (Way)
-(WayPoint)findWayPoint:(WayPoint)start;
-(void)deleteWaypoint:(WayPoint)what;
-(entity)findThing:(string)s;
-(WayPoint)findRoute:(WayPoint)lastone;
-(void)mark_path:(entity)this;
-(void)get_path:(WayPoint)this :(integer)direct;
-(integer)begin_route;
-(void)spawnTempWaypoint:(vector)org;
-(void)dynamicWaypoint;
@end
#define FALSE 0
#define TRUE 1
// ----- entity fields ---
/* wallhug
* bot follow walls on left (false) or right (true)
*/
@extern .float wallhug;
/* keys
* wp if true, waypoint isn't busy (?)
* bot key press states for emulating a keyboard player
*/
@extern .float keys;
/* oldkeys
* bot used for checking for keystate changes
*/
@extern .float oldkeys;
/* ishuman
* bot 0 = bot, 1 = human, 2 = bot spawning (moves to 0)
*/
@extern .float ishuman;
/* b_frags
* wp target4 waypoint number
* bot previous frag count. used for detecting suicides
*/
@extern .float b_frags;
/* b_clientno
* bot client number (1-32)
*/
@extern .integer b_clientno;
/* b_shirt
* wp target3 waypoint number
* bot shirt color
*/
@extern .float b_shirt;
/* b_pants
* wp target1 waypoint number
* bot pants color
*/
@extern .float b_pants;
/* ai_time
* bot ai thinking framerate control
*/
@extern .float ai_time;
/* b_sound
* wp if this waypoint is on a bot's route, the bit corresponding to the bot
* client number will be set
* bot end time of current playing sound (for bots hearing enemies)
*/
@extern .float b_sound;
/* missile_speed
* ? ?
*/
@extern .float missile_speed;
/* portal_time
* ? dynamic waypoints?
*/
@extern .float portal_time;
/* b_skill
* wp target2 waypoint number
* bot skill level: 0 = easy, 3 = nightmare
*/
@extern .integer b_skill;
/* switch_wallhug
* bot client linking stuff (bad name!!)
*/
@extern .float switch_wallhug;
/* b_aiflags
* wp
* bot
*/
@extern .integer b_aiflags;
/* b_num
* bot bot number
*/
@extern .integer b_num;
/* b_chattime
* bot control of bot chatting and movement (can't talk and walk:)
*/
@extern .float b_chattime;
/* b_entertime
* bot used for keeping track of bot play time
*/
@extern .float b_entertime;
/* b_menu, b_menu_time, b_menu_value
* ? waypoint editing stuff
*/
@extern .float b_menu, b_menu_time, b_menu_value;
/* route_failed
* bot if waypoint routing fails, go into roam mode
*/
@extern .float route_failed;
/* dyn_flags, dyn_time, dyn_plat
* ? dynamic waypoint stuff
*/
@extern .float dyn_flags, dyn_time, dyn_plat;
/* temp_way
* bot roam mode stuff
*/
@extern .entity temp_way;
/* last_way
* bot previous waypoint ?
*/
@extern .entity last_way;
/* phys_obj
* bot actual physical entity of bot
*/
@extern .entity phys_obj;
/* targetN
* bot LIFO stack of goals for the bot to achieve
*/
@extern .entity target1, target2, target3, target4;
/* _next, _last
* wp linked list of waypoints
* bot linked list of possible foes
*/
@extern .entity _next, _last;
/* current_way
* wp ?
* bot currently saught waypoint?
*/
@extern .entity current_way;
/* b_angle
* bot desired view angle
*/
@extern .vector b_angle;
/* mouse_emu
* bot mouse movement emulation for mousing bots :)
*/
@extern .vector mouse_emu;
/* obs_dir
* bot obstruction direction?
*/
@extern .vector obs_dir;
/* movevect
* bot desired motion vector
*/
@extern .vector movevect;
/* b_dir
* bot direction to waypoint
*/
@extern .vector b_dir;
/* dyn_dest
* ? dynamic waypoint stuff
*/
@extern .vector dyn_dest;
/* punchangle
* bot fake kick?
*/
@ -302,13 +215,14 @@
@extern float real_frametime;
@extern float bot_count, b_options, lasttime;
@extern float waypoint_mode, dump_mode;
@extern float waypoints, direct_route, userid;
@extern integer waypoints;
@extern float direct_route, userid;
@extern float sv_friction, sv_gravity;
@extern float sv_accelerate, sv_maxspeed, sv_stopspeed;
@extern entity fixer;
@extern entity route_table;
@extern Bot route_table;
@extern entity b_temp1, b_temp2, b_temp3;
@extern entity way_head;
@extern WayPoint way_head;
@extern float busy_waypoints;
@extern float coop;
@ -321,27 +235,14 @@
// rankings
@extern integer (entity e) ClientNumber;
@extern float(integer clientno) ClientBitFlag;
@extern integer(integer clientno) ClientBitFlag;
@extern integer() ClientNextAvailable;
@extern void(integer whatbot, integer whatskill) BotConnect;
@extern void(entity bot) BotDisconnect;
@extern void(float clientno) BotInvalidClientNo;
@extern void(entity who) UpdateClient;
// waypointing
@extern void() DynamicWaypoint;
@extern entity(vector org) make_waypoint;
@extern void() ClearAllWays;
@extern void() FixWaypoints;
@extern float() begin_route;
@extern void(entity this, float direct) bot_get_path;
@extern void() WaypointThink;
@extern entity(entity start) FindWayPoint;
@extern void() ClearMyRoute;
@extern entity(entity lastone) FindRoute;
@extern float (entity e1, entity e2) CheckLinked;
@extern void(vector org) SpawnTempWaypoint;
@extern void(vector org, vector bit1, float bit4, float flargs) make_way;
@extern void(vector org, vector bit1, integer bit4, integer flargs) make_way;
@extern void () map_dm1;
@extern void () map_dm2;
@ -354,14 +255,12 @@
@extern void() SV_Physics_Client;
@extern void() SV_ClientThink;
@extern void() CL_KeyMove;
@extern entity(entity ent, string s) FindThing;
// ai & misc
@extern void() BotAI;
@extern string() PickARandomName;
@extern float(entity targ) fov;
@extern float(float y1, float y2) angcomp;
@extern float(entity targ1, entity targ2) wisible;
@extern float(entity targ) sisible;
@extern float(entity targ) fisible;
@extern vector(entity ent) realorigin;
@ -376,7 +275,7 @@
@extern void() BotSayInit;
@extern void(string h) BotSay2;
@extern void(string h) BotSayTeam;
@extern void(entity e1, entity e2, float flag) DeveloperLightning;
@extern void(WayPoint e1, WayPoint e2, integer flag) DeveloperLightning;
/*
angles is pitch yaw roll