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:
parent
d186408279
commit
e730793581
4 changed files with 772 additions and 907 deletions
|
@ -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];
|
||||
|
|
|
@ -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
|
||||
|
|
1348
fbxa/bot_way.qc
1348
fbxa/bot_way.qc
File diff suppressed because it is too large
Load diff
|
@ -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
|
||||
|
|
Loading…
Reference in a new issue