File: fb_globals.h

package info (click to toggle)
ktx 1.45-1
  • links: PTS, VCS
  • area: main
  • in suites: sid, trixie
  • size: 7,940 kB
  • sloc: ansic: 76,453; asm: 107; sh: 99; makefile: 4
file content (412 lines) | stat: -rw-r--r-- 14,677 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
// Converted from .qc on 05/02/2016

#ifndef FB_GLOBALS_H
#define FB_GLOBALS_H

#define PATH_SCORE_NULL -1000000

#define FB_OPTION_SHOW_MARKERS			1
#define FB_OPTION_EDITOR_MODE			2
#define FB_OPTION_SHOW_DUEL_LOGIC		4
#define FB_OPTION_SHOW_GOAL_LOGIC		8
#define FB_OPTION_SHOW_ROUTING_LOGIC	16
#define FB_OPTION_SHOW_MOVEMENT_LOGIC	32
#define FB_OPTION_DEMOMARK_ROCKETJUMPS	64
#define FB_OPTION_DEBUG_MOVEMENT		128
#define FB_OPTION_SHOW_THINKING			(FB_OPTION_SHOW_DUEL_LOGIC | FB_OPTION_SHOW_GOAL_LOGIC | FB_OPTION_SHOW_ROUTING_LOGIC | FB_OPTION_SHOW_MOVEMENT_LOGIC)

typedef void (*fb_spawn_funcref_t)(gedict_t *ent);

typedef struct fb_spawn_s
{
	char *name;					// classname
	fb_spawn_funcref_t func;	// initialisation function
} fb_spawn_t;

typedef struct fb_path_eval_s
{
	gedict_t *touch_marker;
	gedict_t *test_marker;
	qbool rocket_alert;
	int description;
	float path_time;
	qbool path_normal;
	vec3_t player_origin;
	gedict_t *goalentity_marker;
	float goal_late_time;
	float lookahead_time_;
	vec3_t player_direction;
	qbool be_quiet;
	gedict_t *player;
} fb_path_eval_t;

// Globals used for general path-finding
extern qbool path_normal;
extern gedict_t *look_marker;
extern gedict_t *from_marker;
extern gedict_t *middle_marker;
extern gedict_t *to_marker;
extern gedict_t *next_marker;
extern gedict_t *prev_marker;
extern float traveltime;
extern float look_traveltime;
extern float zone_time;

// Globals for physics variables
extern float sv_maxspeed;
extern float sv_maxstrafespeed;
extern float sv_maxwaterspeed;
extern float half_sv_maxspeed;
extern float inv_sv_maxspeed;
extern float sv_accelerate;

extern gedict_t *dropper;

// FIXME: A lot of these not used anymore
#define FL_ONGROUND_PARTIALGROUND	(FL_ONGROUND | FL_PARTIALGROUND)
#define IT_EITHER_NAILGUN			(IT_NAILGUN | IT_SUPER_NAILGUN)
#define IT_NAILGUN_ROCKET			(IT_ROCKET_LAUNCHER | IT_SUPER_NAILGUN | IT_NAILGUN)
#define IT_CONTINUOUS				(IT_LIGHTNING | IT_SUPER_NAILGUN | IT_NAILGUN)
#define IT_AXE_SHOTGUN				(IT_AXE | IT_SHOTGUN)
#define IT_ALL_BUT_GRENADE			(IT_AXE | IT_SHOTGUN | IT_SUPER_SHOTGUN | IT_NAILGUN | IT_SUPER_NAILGUN | IT_ROCKET_LAUNCHER | IT_LIGHTNING)
#define IT_ALL						(IT_AXE | IT_SHOTGUN | IT_SUPER_SHOTGUN | IT_NAILGUN | IT_SUPER_NAILGUN | IT_GRENADE_LAUNCHER | IT_ROCKET_LAUNCHER | IT_LIGHTNING)
#define IT_NOT_AMMO					16773375
#define IT_ARMOR					(IT_ARMOR1 | IT_ARMOR2 | IT_ARMOR3)
#define IT_NOT_ARMOR				(~IT_ARMOR)
#define IT_INVULNERABILITY_QUAD		(IT_INVULNERABILITY | IT_QUAD)
#define IT_NOT_INVISIBILITY			(~IT_INVISIBILITY)
#define IT_NOT_INVULNERABILITY		(~IT_INVULNERABILITY)
#define IT_NOT_SUIT					(~IT_SUIT)
#define IT_NOT_QUAD					(~IT_QUAD)
#define ITEM_RUNE_MASK				(CTF_RUNE_RES | CTF_RUNE_STR | CTF_RUNE_HST | CTF_RUNE_RGN)
#define NOT_EF_DIMLIGHT				16777207
#define EF_DIMLIGHT_BLUE			(EF_DIMLIGHT | EF_BLUE)
#define EF_DIMLIGHT_RED				(EF_DIMLIGHT | EF_RED)
#define CLIENTKILL					11

#define FB_PREFER_ROCKET_LAUNCHER	1
#define FB_PREFER_LIGHTNING_GUN		2

#define GAME_ENABLE_POWERUPS		1
#define GAME_ENABLE_RUNES			2
#define GAME_RUNE_RJ				4
#define GAME_MATCH					64
#define GAME_ENABLE_DROPWEAP		512
#define GAME_ENABLE_AUTOREPORT		1024
#define GAME_ENABLE_AUTOSTEAMS		2048
#define FORWARD						1
#define BACK						2
#define LEFT						4
#define RIGHT						8
#define FORWARD_LEFT				5
#define FORWARD_RIGHT				9
#define BACK_LEFT					6
#define BACK_RIGHT					10
#define UP							16
#define DOWN						32
#define JUMPSPEED					270

// Fall results
#define FALL_FALSE					0
#define FALL_BLOCKED				1
#define FALL_LAND					2
#define FALL_DEATH					3

// Path flags
// NOTE: Editor won't save newly-added flags unless added to EXTERNAL_MARKER_PATH_FLAGS
#define WATERJUMP_					(1 <<  1)
#define DM6_DOOR					(1 <<  8)
#define ROCKET_JUMP					(1 <<  9)
#define JUMP_LEDGE					(1 << 10)	// Implies NO_DODGE
#define VERTICAL_PLATFORM			(1 << 11)
#define BOTPATH_DOOR				(1 << 12)
#define BOTPATH_DOOR_CLOSED			(1 << 13)
#define REVERSIBLE					(1 << 14)	// Set if bi-directional link between markers in the same zone
#define WATER_PATH					(1 << 15)
#define DELIBERATE_AIR				(1 << 17)
#define WAIT_GROUND					(1 << 18)
#define STUCK_PATH					(1 << 19)
#define AIR_ACCELERATION			(1 << 20)
#define NO_DODGE					(1 << 21)
#define DELIBERATE_BACKUP			(1 << 22)
#define BOTPATH_CURLJUMP_HINT		(1 << 23)
#define BOTPATH_FULL_AIRCONTROL		(1 << 24)
#define BOTPATH_RJ_IN_PROGRESS		(1 << 25)
#define DELIBERATE_AIR_WAIT_GROUND	(DELIBERATE_AIR | WAIT_GROUND)
#define SAVED_DESCRIPTION			(DM6_DOOR | ROCKET_JUMP | JUMP_LEDGE | VERTICAL_PLATFORM | BOTPATH_DOOR | BOTPATH_DOOR_CLOSED | NO_DODGE)
#define NOT_ROCKET_JUMP				(~ROCKET_JUMP)

// Marker flags (FIXME: fb.T?  check.  consistent naming)
// NOTE: Editor won't save newly-added flags unless added to EXTERNAL_MARKER_FLAGS
#define UNREACHABLE					1		// Typically set for markers that are lava, waterlevel 3?  (automate?)
#define T_WATER						2		// Set by server if the marker is in liquid
#define T_NO_AIR					4		// Set by server (means the bot would be trapped underwater - dm3 tunnel for instance)
#define MARKER_IS_DM6_DOOR			8		// Should only be set for DM6 door to LG at the moment (logic needs generalised to all shootable doors)
#define MARKER_BLOCKED_ON_STATE_TOP	16		// If set, door is considered 'closed' when STATE_TOP.
#define MARKER_FIRE_ON_MATCH_START	32		// Used to automatically fire triggers (open secret doors etc).  Ignored if no bots spawned.
#define MARKER_DOOR_TOUCHABLE		64		// If set, door will spawn a touchable marker.  If not set, door shouldn't be in bot path definitions
#define MARKER_ESCAPE_ROUTE			128		// (not currently implemented) bot should head towards marker when in lava or slime (think amphi2/end)
#define MARKER_DYNAMICALLY_ADDED	256		// Added dynamically by server.  Do not include in .bot file generation
#define MARKER_EXPLICIT_VIEWOFFSET	512		// Viewoffset has been set by map definition and should be included in .bot file generation
#define MARKER_NOTOUCH				1024	// Not touchable - used when two markers on top of each other

// Bot flags (FIXME: fb.state?  check.  consistent naming, comment with descriptions)
#define CAMPBOT						1
#define SHOT_FOR_LUCK				2
#define BACKPACK_IS_UNREACHABLE		4
#define NOTARGET_ENEMY				32
#define AWARE_SURROUNDINGS			128
#define HURT_SELF					1024
#define RUNAWAY						4096
#define WAIT						8192
#define NOT_NOTARGET_ENEMY			~(NOTARGET_ENEMY)
#define NOT_AWARE_SURROUNDINGS		~(AWARE_SURROUNDINGS)

#define HELP_TEAMMATE				128	// FIXME: same as AWARE_SURROUNDINGS... deliberate?

qbool ExistsPath(gedict_t *from_marker, gedict_t *to_marker, int *new_path_state);
float boomstick_only(void);

float CountTeams(void);
qbool EnemyDefenceless(gedict_t *self);

qbool enemy_shaft_attack(gedict_t *self, gedict_t *enemy);
float W_BestWeapon(void);

gedict_t* LocateMarker(vec3_t org);
gedict_t* LocateNextMarker(vec3_t org, gedict_t *ignore_ent);
float RankForWeapon(float w);
float WeaponCode(float w);

float crandom(void);

void BotCanRocketJump(gedict_t *self);
qbool VisibleEntity(gedict_t *ent);
gedict_t* IdentifyMostVisibleTeammate(gedict_t *self);
float anglemod(float v);
gedict_t* HelpTeammate(void);
float TotalStrengthAfterDamage(float health, float armorValue, float armorType, float damage);
float TotalStrength(float health, float armorValue, float armorType);

// 
char* BotNameGeneric(int botNumber);
char* BotNameFriendly(int botNumber);
char* BotNameEnemy(int botNumber);

qbool Visible_360(gedict_t *self, gedict_t *visible_object);
qbool Visible_infront(gedict_t *self, gedict_t *visible_object);

// marker_util.qc
void marker_touch(void);
void check_marker(gedict_t *self, gedict_t *other);
void BecomeMarker(gedict_t *marker);

// route_calc.qc
void CheckWaterColumn(gedict_t *m, vec3_t m_pos, vec3_t testplace);

// route_fields.qc
gedict_t* CreateNewMarker(vec3_t origin);

// botwater.qc
void BotWaterMove(gedict_t *self);
void BotWaterJumpFix(void);

// items.qc
float goal_NULL(gedict_t *self, gedict_t *other);

// client.qc
void BotClientEntersEvent(gedict_t *self, gedict_t *spawn_pos);
void BotPreThink(gedict_t *self);
void BotClientConnectedEvent(gedict_t *self);
void BotOutOfWater(gedict_t *self);
void BotSetCommand(gedict_t *self);
void BotsThinkTime(gedict_t *self);

// botphys.qc
void FrogbotPrePhysics1(void);
void FrogbotPrePhysics2(void);

// bothazd.qc
void AvoidHazards(gedict_t *self);
void NewVelocityForArrow(gedict_t *self, vec3_t dir_move, const char *explanation);

// route_lookup.qc
gedict_t* SightMarker(gedict_t *from_marker, gedict_t *to_marker, float max_distance,
						float min_height_diff);
gedict_t* HigherSightFromFunction(gedict_t *from_marker, gedict_t *to_marker);
gedict_t* SightFromMarkerFunction(gedict_t *from_marker, gedict_t *to_marker);
gedict_t* SubZoneNextPathMarker(gedict_t *from_marker, gedict_t *to_marker);
float SubZoneArrivalTime(float zone_time, gedict_t *middle_marker, gedict_t *to_marker,
							qbool rl_routes);
float SightFromTime(gedict_t *from_marker, gedict_t *to_marker);
void ZoneMarker(gedict_t *from_marker, gedict_t *to_marker, qbool path_normal, qbool rj_routes);
gedict_t* ZonePathMarker(gedict_t *from_marker, gedict_t *to_marker, qbool path_normal,
							qbool rl_jump_routes);

// botweap.qc
void FrogbotSetFirepower(gedict_t *self);
void SelectWeapon(void);
void SetFireButton(gedict_t *self, vec3_t rel_pos, float rel_dist);
void FrogbotWeaponFiredEvent(gedict_t *self);
void FindRocketExplosionPoint(vec3_t player_origin, vec3_t player_angles, vec3_t output,
								float *distance_frac);
qbool AttackFinished(gedict_t *self);

// marker_util.qc
void AssignVirtualGoal(gedict_t *item);
void AssignVirtualGoal_apply(gedict_t *marker_);
void adjust_view_ofs_z(gedict_t *ent);

// botenemy.qc
void ClearLookObject(gedict_t *client);
void LookEnemy(gedict_t *player, gedict_t *enemy);
qbool BotsPickBestEnemy(gedict_t *self);
void BotDamageInflictedEvent(gedict_t *attacker, gedict_t *targ);

// botjump.qc
void CheckCombatJump(gedict_t *self);
//void BotInLava(void);
void BotPerformRocketJump(gedict_t *self);

// botgoal.qc
void UpdateGoal(gedict_t *self);

// botpath.qc
void ProcessNewLinkedMarker(gedict_t *self);

// marker_load.qc
gedict_t* CreateMarker(float x, float y, float z);
void AllMarkersLoaded(void);

void SetZone(int zone_number, int marker_number);
void SetMarkerFlag(int marker_number, int flags);
void SetMarkerFixedSize(int marker_number, int size_x, int size_y, int size_z);
void AddToQue(gedict_t *ent);
void SetGoal(int goal, int marker_number);
void SetGoalForMarker(int goal, gedict_t *marker);
void SetMarkerPathFlags(int marker_number, int path_index, int flags);
void SetMarkerPath(int source_marker, int path_index, int next_marker);
void SetMarkerViewOffset(int marker, float zOffset);

#define FROGBOT_PATH_FLAG_OPTIONS "w6rjva"
#define FROGBOT_MARKER_FLAG_OPTIONS "u6fbte"

// added for ktx
qbool fb_lg_disabled(void);
//void StartItems(void);

// maps
void LoadMap(void);
qbool FrogbotsCheckMapSupport(void);

// 
float pr1_rint(float f);

// 
void BotEvadeLogic(gedict_t *self);
qbool SameTeam(gedict_t *p1, gedict_t *p2);

// botstat.qc
void FrogbotSetHealthArmour(gedict_t *client);
void UpdateGoalEntity(gedict_t *item, gedict_t *taker);

// bot_client.qc
void BotPlayerDeathEvent(gedict_t *self);
qbool BotUsingCorrectWeapon(gedict_t *self);

// bot_items.qc
int ItemSpawnFunctionCount(void);
void StartItemFB(gedict_t *ent);
qbool NoItemTouch(gedict_t *self, gedict_t *other);
qbool BotsPreTeleport(gedict_t *self, gedict_t *other);

// FBCA code just set nextthink to 0 when item respawned...
qbool WaitingToRespawn(gedict_t *ent);

int NumberOfClients(void);
qbool TimeTrigger(float *next_time, float time_increment);

qbool IsMarkerFrame(void);
qbool IsHazardFrame(void);

// fb_globals.c
gedict_t* FirstZoneMarker(int zone);
void AddZoneMarker(gedict_t *marker);

void ResetGoalEntity(gedict_t *self);

// bot_commands.qc
void SetLinkedMarker(gedict_t *player, gedict_t *marker, char *explanation);
void SetJumpFlag(gedict_t *player, qbool jumping, const char *explanation);

// bot_routing.qc
void PathScoringLogic(float goal_respawn_time, qbool be_quiet, float lookahead_time,
						qbool path_normal, vec3_t player_origin, vec3_t player_direction,
						gedict_t *touch_marker_, gedict_t *goalentity_marker, qbool rocket_alert,
						qbool rocket_jump_routes_allowed, qbool trace_bprint, gedict_t *player,
						float *best_score, gedict_t **linked_marker_, int *new_path_state,
						int *new_angle_hint, int *new_rj_frame_delay, float new_rj_angles[2]);

int BotVersionNumber(void);
qbool FrogbotOptionEnabled(int option);
qbool FrogbotShowMarkerIndicators(void);

void SetDirectionMove(gedict_t *self, vec3_t dir_move, const char *explanation);

void BotEventPlatformHitTop(gedict_t *self);
void BotEventPlatformHitBottom(gedict_t *self);
void BotEventDoorHitTop(gedict_t *self);
void BotEventDoorHitBottom(gedict_t *self);
void BotPlatformTouched(gedict_t *platform, gedict_t *player);

void BotsBackpackTouchedNonPlayer(gedict_t *backpack, gedict_t *entity);
void BotsMatchStart(void);
void BotsAssignTeamFlags(void);
qbool HasWeapon(gedict_t *player, int weapon);
int FrogbotSkillLevel(void);
int FrogbotHealth(void);
int FrogbotWeapon(void);
int FrogbotQuadMultiplier(void);

// botthink.qc
void SetMarker(gedict_t *client, gedict_t *marker);

#define PAST(x) (g_globalvars.time >= self->fb.x)
#define FUTURE(x) (g_globalvars.time < self->fb.x)

#define MIN_FROGBOT_SKILL      0
#define MAX_FROGBOT_SKILL     20
#define MAX_FROGBOT_AIM_SKILL 20

#define PASSINTVEC3(x) ((int)x[0]),((int)x[1]),((int)x[2])
#define PASSINTVEC2(x) ((int)x[0]),((int)x[1])
#define PASSSCALEDINTVEC3(x,y) ((int)(x[0]*y)),((int)(x[1]*y)),((int)(x[2]*y))

#define FB_MAPDEATHHEIGHT_DEFAULT -9999999

int MapDeathHeight(void);
void SetMapDeathHeight(int height);

// debugging
void RunRandomTrials(float min, float max, float mult);

// editor
qbool HasSavedMarker(void);

#define FB_CVAR_ENABLED         "k_fb_enabled"
#define FB_CVAR_OPTIONS         "k_fb_options"
#define FB_CVAR_AUTOADD_LIMIT   "k_fb_autoadd_limit"
#define FB_CVAR_AUTOREMOVE_AT   "k_fb_autoremove_at"
#define FB_CVAR_AUTO_DELAY      "k_fb_auto_delay"
#define FB_CVAR_SKILL           "k_fb_skill"
#define FB_CVAR_DEBUG           "k_fb_debug"
#define FB_CVAR_ADMIN_ONLY      "k_fb_admin_only"
#define FB_CVAR_FREEZE_PREWAR   "k_fb_freeze_prewar"
#define FB_CVAR_HEALTH          "k_fb_health"
#define FB_CVAR_WEAPON          "k_fb_weapon"
#define FB_CVAR_BREAK_ON_DEATH  "k_fb_break_on_death"
#define FB_CVAR_QUAD_MULTIPLIER "k_fb_quad_multiplier"

void BotsFireLogic(void);

#endif // ifdef(FB_GLOBALS_H)