g_local.h 29 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139
  1. // Copyright (c) ZeniMax Media Inc.
  2. // Licensed under the GNU General Public License 2.0.
  3. // g_local.h -- local definitions for game module
  4. #include "q_shared.h"
  5. // define GAME_INCLUDE so that game.h does not define the
  6. // short, server-visible gclient_t and edict_t structures,
  7. // because we define the full size ones in this file
  8. #define GAME_INCLUDE
  9. #include "game.h"
  10. // the "gameversion" client command will print this plus compile date
  11. #define GAMEVERSION "baseq2"
  12. // protocol bytes that can be directly added to messages
  13. #define svc_muzzleflash 1
  14. #define svc_muzzleflash2 2
  15. #define svc_temp_entity 3
  16. #define svc_layout 4
  17. #define svc_inventory 5
  18. #define svc_stufftext 11
  19. //==================================================================
  20. // view pitching times
  21. #define DAMAGE_TIME 0.5
  22. #define FALL_TIME 0.3
  23. // edict->spawnflags
  24. // these are set with checkboxes on each entity in the map editor
  25. #define SPAWNFLAG_NOT_EASY 0x00000100
  26. #define SPAWNFLAG_NOT_MEDIUM 0x00000200
  27. #define SPAWNFLAG_NOT_HARD 0x00000400
  28. #define SPAWNFLAG_NOT_DEATHMATCH 0x00000800
  29. #define SPAWNFLAG_NOT_COOP 0x00001000
  30. // edict->flags
  31. #define FL_FLY 0x00000001
  32. #define FL_SWIM 0x00000002 // implied immunity to drowining
  33. #define FL_IMMUNE_LASER 0x00000004
  34. #define FL_INWATER 0x00000008
  35. #define FL_GODMODE 0x00000010
  36. #define FL_NOTARGET 0x00000020
  37. #define FL_IMMUNE_SLIME 0x00000040
  38. #define FL_IMMUNE_LAVA 0x00000080
  39. #define FL_PARTIALGROUND 0x00000100 // not all corners are valid
  40. #define FL_WATERJUMP 0x00000200 // player jumping out of water
  41. #define FL_TEAMSLAVE 0x00000400 // not the first on the team
  42. #define FL_NO_KNOCKBACK 0x00000800
  43. #define FL_POWER_ARMOR 0x00001000 // power armor (if any) is active
  44. #define FL_RESPAWN 0x80000000 // used for item respawning
  45. #define FRAMETIME 0.1
  46. // memory tags to allow dynamic memory to be cleaned up
  47. #define TAG_GAME 765 // clear when unloading the dll
  48. #define TAG_LEVEL 766 // clear when loading a new level
  49. #define MELEE_DISTANCE 80
  50. #define BODY_QUEUE_SIZE 8
  51. typedef enum
  52. {
  53. DAMAGE_NO,
  54. DAMAGE_YES, // will take damage if hit
  55. DAMAGE_AIM // auto targeting recognizes this
  56. } damage_t;
  57. typedef enum
  58. {
  59. WEAPON_READY,
  60. WEAPON_ACTIVATING,
  61. WEAPON_DROPPING,
  62. WEAPON_FIRING
  63. } weaponstate_t;
  64. typedef enum
  65. {
  66. AMMO_BULLETS,
  67. AMMO_SHELLS,
  68. AMMO_ROCKETS,
  69. AMMO_GRENADES,
  70. AMMO_CELLS,
  71. AMMO_SLUGS,
  72. // RAFAEL
  73. AMMO_MAGSLUG,
  74. AMMO_TRAP
  75. } ammo_t;
  76. //deadflag
  77. #define DEAD_NO 0
  78. #define DEAD_DYING 1
  79. #define DEAD_DEAD 2
  80. #define DEAD_RESPAWNABLE 3
  81. //range
  82. #define RANGE_MELEE 0
  83. #define RANGE_NEAR 1
  84. #define RANGE_MID 2
  85. #define RANGE_FAR 3
  86. //gib types
  87. #define GIB_ORGANIC 0
  88. #define GIB_METALLIC 1
  89. //monster ai flags
  90. #define AI_STAND_GROUND 0x00000001
  91. #define AI_TEMP_STAND_GROUND 0x00000002
  92. #define AI_SOUND_TARGET 0x00000004
  93. #define AI_LOST_SIGHT 0x00000008
  94. #define AI_PURSUIT_LAST_SEEN 0x00000010
  95. #define AI_PURSUE_NEXT 0x00000020
  96. #define AI_PURSUE_TEMP 0x00000040
  97. #define AI_HOLD_FRAME 0x00000080
  98. #define AI_GOOD_GUY 0x00000100
  99. #define AI_BRUTAL 0x00000200
  100. #define AI_NOSTEP 0x00000400
  101. #define AI_DUCKED 0x00000800
  102. #define AI_COMBAT_POINT 0x00001000
  103. #define AI_MEDIC 0x00002000
  104. #define AI_RESURRECTING 0x00004000
  105. //monster attack state
  106. #define AS_STRAIGHT 1
  107. #define AS_SLIDING 2
  108. #define AS_MELEE 3
  109. #define AS_MISSILE 4
  110. // armor types
  111. #define ARMOR_NONE 0
  112. #define ARMOR_JACKET 1
  113. #define ARMOR_COMBAT 2
  114. #define ARMOR_BODY 3
  115. #define ARMOR_SHARD 4
  116. // power armor types
  117. #define POWER_ARMOR_NONE 0
  118. #define POWER_ARMOR_SCREEN 1
  119. #define POWER_ARMOR_SHIELD 2
  120. // handedness values
  121. #define RIGHT_HANDED 0
  122. #define LEFT_HANDED 1
  123. #define CENTER_HANDED 2
  124. // game.serverflags values
  125. #define SFL_CROSS_TRIGGER_1 0x00000001
  126. #define SFL_CROSS_TRIGGER_2 0x00000002
  127. #define SFL_CROSS_TRIGGER_3 0x00000004
  128. #define SFL_CROSS_TRIGGER_4 0x00000008
  129. #define SFL_CROSS_TRIGGER_5 0x00000010
  130. #define SFL_CROSS_TRIGGER_6 0x00000020
  131. #define SFL_CROSS_TRIGGER_7 0x00000040
  132. #define SFL_CROSS_TRIGGER_8 0x00000080
  133. #define SFL_CROSS_TRIGGER_MASK 0x000000ff
  134. // noise types for PlayerNoise
  135. #define PNOISE_SELF 0
  136. #define PNOISE_WEAPON 1
  137. #define PNOISE_IMPACT 2
  138. // edict->movetype values
  139. typedef enum
  140. {
  141. MOVETYPE_NONE, // never moves
  142. MOVETYPE_NOCLIP, // origin and angles change with no interaction
  143. MOVETYPE_PUSH, // no clip to world, push on box contact
  144. MOVETYPE_STOP, // no clip to world, stops on box contact
  145. MOVETYPE_WALK, // gravity
  146. MOVETYPE_STEP, // gravity, special edge handling
  147. MOVETYPE_FLY,
  148. MOVETYPE_TOSS, // gravity
  149. MOVETYPE_FLYMISSILE, // extra size to monsters
  150. MOVETYPE_BOUNCE, // added this (the comma at the end of line)
  151. // RAFAEL
  152. MOVETYPE_WALLBOUNCE
  153. } movetype_t;
  154. typedef struct
  155. {
  156. int base_count;
  157. int max_count;
  158. float normal_protection;
  159. float energy_protection;
  160. int armor;
  161. } gitem_armor_t;
  162. // gitem_t->flags
  163. #define IT_WEAPON 1 // use makes active weapon
  164. #define IT_AMMO 2
  165. #define IT_ARMOR 4
  166. #define IT_STAY_COOP 8
  167. #define IT_KEY 16
  168. #define IT_POWERUP 32
  169. // gitem_t->weapmodel for weapons indicates model index
  170. #define WEAP_BLASTER 1
  171. #define WEAP_SHOTGUN 2
  172. #define WEAP_SUPERSHOTGUN 3
  173. #define WEAP_MACHINEGUN 4
  174. #define WEAP_CHAINGUN 5
  175. #define WEAP_GRENADES 6
  176. #define WEAP_GRENADELAUNCHER 7
  177. #define WEAP_ROCKETLAUNCHER 8
  178. #define WEAP_HYPERBLASTER 9
  179. #define WEAP_RAILGUN 10
  180. #define WEAP_BFG 11
  181. #define WEAP_PHALANX 12
  182. #define WEAP_BOOMER 13
  183. typedef struct gitem_s
  184. {
  185. char *classname; // spawning name
  186. qboolean (*pickup)(struct edict_s *ent, struct edict_s *other);
  187. void (*use)(struct edict_s *ent, struct gitem_s *item);
  188. void (*drop)(struct edict_s *ent, struct gitem_s *item);
  189. void (*weaponthink)(struct edict_s *ent);
  190. char *pickup_sound;
  191. char *world_model;
  192. int world_model_flags;
  193. char *view_model;
  194. // client side info
  195. char *icon;
  196. char *pickup_name; // for printing on pickup
  197. int count_width; // number of digits to display by icon
  198. int quantity; // for ammo how much, for weapons how much is used per shot
  199. char *ammo; // for weapons
  200. int flags; // IT_* flags
  201. int weapmodel; // weapon model index (for weapons)
  202. void *info;
  203. int tag;
  204. char *precaches; // string of all models, sounds, and images this item will use
  205. } gitem_t;
  206. //
  207. // this structure is left intact through an entire game
  208. // it should be initialized at dll load time, and read/written to
  209. // the server.ssv file for savegames
  210. //
  211. typedef struct
  212. {
  213. char helpmessage1[512];
  214. char helpmessage2[512];
  215. int helpchanged; // flash F1 icon if non 0, play sound
  216. // and increment only if 1, 2, or 3
  217. gclient_t *clients; // [maxclients]
  218. // can't store spawnpoint in level, because
  219. // it would get overwritten by the savegame restore
  220. char spawnpoint[512]; // needed for coop respawns
  221. // store latched cvars here that we want to get at often
  222. int maxclients;
  223. int maxentities;
  224. // cross level triggers
  225. int serverflags;
  226. // items
  227. int num_items;
  228. qboolean autosaved;
  229. } game_locals_t;
  230. //
  231. // this structure is cleared as each map is entered
  232. // it is read/written to the level.sav file for savegames
  233. //
  234. typedef struct
  235. {
  236. int framenum;
  237. float time;
  238. char level_name[MAX_QPATH]; // the descriptive name (Outer Base, etc)
  239. char mapname[MAX_QPATH]; // the server name (base1, etc)
  240. char nextmap[MAX_QPATH]; // go here when fraglimit is hit
  241. // intermission state
  242. float intermissiontime; // time the intermission was started
  243. char *changemap;
  244. int exitintermission;
  245. vec3_t intermission_origin;
  246. vec3_t intermission_angle;
  247. edict_t *sight_client; // changed once each frame for coop games
  248. edict_t *sight_entity;
  249. int sight_entity_framenum;
  250. edict_t *sound_entity;
  251. int sound_entity_framenum;
  252. edict_t *sound2_entity;
  253. int sound2_entity_framenum;
  254. int pic_health;
  255. int total_secrets;
  256. int found_secrets;
  257. int total_goals;
  258. int found_goals;
  259. int total_monsters;
  260. int killed_monsters;
  261. edict_t *current_entity; // entity running from G_RunFrame
  262. int body_que; // dead bodies
  263. int power_cubes; // ugly necessity for coop
  264. } level_locals_t;
  265. // spawn_temp_t is only used to hold entity field values that
  266. // can be set from the editor, but aren't actualy present
  267. // in edict_t during gameplay
  268. typedef struct
  269. {
  270. // world vars
  271. char *sky;
  272. float skyrotate;
  273. vec3_t skyaxis;
  274. char *nextmap;
  275. int lip;
  276. int distance;
  277. int height;
  278. char *noise;
  279. float pausetime;
  280. char *item;
  281. char *gravity;
  282. float minyaw;
  283. float maxyaw;
  284. float minpitch;
  285. float maxpitch;
  286. } spawn_temp_t;
  287. typedef struct
  288. {
  289. // fixed data
  290. vec3_t start_origin;
  291. vec3_t start_angles;
  292. vec3_t end_origin;
  293. vec3_t end_angles;
  294. int sound_start;
  295. int sound_middle;
  296. int sound_end;
  297. float accel;
  298. float speed;
  299. float decel;
  300. float distance;
  301. float wait;
  302. // state data
  303. int state;
  304. vec3_t dir;
  305. float current_speed;
  306. float move_speed;
  307. float next_speed;
  308. float remaining_distance;
  309. float decel_distance;
  310. void (*endfunc)(edict_t *);
  311. } moveinfo_t;
  312. typedef struct
  313. {
  314. void (*aifunc)(edict_t *self, float dist);
  315. float dist;
  316. void (*thinkfunc)(edict_t *self);
  317. } mframe_t;
  318. typedef struct
  319. {
  320. int firstframe;
  321. int lastframe;
  322. mframe_t *frame;
  323. void (*endfunc)(edict_t *self);
  324. } mmove_t;
  325. typedef struct
  326. {
  327. mmove_t *currentmove;
  328. int aiflags;
  329. int nextframe;
  330. float scale;
  331. void (*stand)(edict_t *self);
  332. void (*idle)(edict_t *self);
  333. void (*search)(edict_t *self);
  334. void (*walk)(edict_t *self);
  335. void (*run)(edict_t *self);
  336. void (*dodge)(edict_t *self, edict_t *other, float eta);
  337. void (*attack)(edict_t *self);
  338. void (*melee)(edict_t *self);
  339. void (*sight)(edict_t *self, edict_t *other);
  340. qboolean (*checkattack)(edict_t *self);
  341. float pausetime;
  342. float attack_finished;
  343. vec3_t saved_goal;
  344. float search_time;
  345. float trail_time;
  346. vec3_t last_sighting;
  347. int attack_state;
  348. int lefty;
  349. float idle_time;
  350. int linkcount;
  351. int power_armor_type;
  352. int power_armor_power;
  353. } monsterinfo_t;
  354. extern game_locals_t game;
  355. extern level_locals_t level;
  356. extern game_import_t gi;
  357. extern game_export_t globals;
  358. extern spawn_temp_t st;
  359. extern int sm_meat_index;
  360. extern int snd_fry;
  361. extern int jacket_armor_index;
  362. extern int combat_armor_index;
  363. extern int body_armor_index;
  364. // means of death
  365. #define MOD_UNKNOWN 0
  366. #define MOD_BLASTER 1
  367. #define MOD_SHOTGUN 2
  368. #define MOD_SSHOTGUN 3
  369. #define MOD_MACHINEGUN 4
  370. #define MOD_CHAINGUN 5
  371. #define MOD_GRENADE 6
  372. #define MOD_G_SPLASH 7
  373. #define MOD_ROCKET 8
  374. #define MOD_R_SPLASH 9
  375. #define MOD_HYPERBLASTER 10
  376. #define MOD_RAILGUN 11
  377. #define MOD_BFG_LASER 12
  378. #define MOD_BFG_BLAST 13
  379. #define MOD_BFG_EFFECT 14
  380. #define MOD_HANDGRENADE 15
  381. #define MOD_HG_SPLASH 16
  382. #define MOD_WATER 17
  383. #define MOD_SLIME 18
  384. #define MOD_LAVA 19
  385. #define MOD_CRUSH 20
  386. #define MOD_TELEFRAG 21
  387. #define MOD_FALLING 22
  388. #define MOD_SUICIDE 23
  389. #define MOD_HELD_GRENADE 24
  390. #define MOD_EXPLOSIVE 25
  391. #define MOD_BARREL 26
  392. #define MOD_BOMB 27
  393. #define MOD_EXIT 28
  394. #define MOD_SPLASH 29
  395. #define MOD_TARGET_LASER 30
  396. #define MOD_TRIGGER_HURT 31
  397. #define MOD_HIT 32
  398. #define MOD_TARGET_BLASTER 33
  399. // RAFAEL 14-APR-98
  400. #define MOD_RIPPER 34
  401. #define MOD_PHALANX 35
  402. #define MOD_BRAINTENTACLE 36
  403. #define MOD_BLASTOFF 37
  404. #define MOD_GEKK 38
  405. #define MOD_TRAP 39
  406. // END 14-APR-98
  407. #define MOD_FRIENDLY_FIRE 0x8000000
  408. extern int meansOfDeath;
  409. extern edict_t *g_edicts;
  410. #define FOFS(x) (int)&(((edict_t *)0)->x)
  411. #define STOFS(x) (int)&(((spawn_temp_t *)0)->x)
  412. #define LLOFS(x) (int)&(((level_locals_t *)0)->x)
  413. #define CLOFS(x) (int)&(((gclient_t *)0)->x)
  414. #define random() ((rand () & 0x7fff) / ((float)0x7fff))
  415. #define crandom() (2.0 * (random() - 0.5))
  416. extern cvar_t *maxentities;
  417. extern cvar_t *deathmatch;
  418. extern cvar_t *coop;
  419. extern cvar_t *dmflags;
  420. extern cvar_t *skill;
  421. extern cvar_t *fraglimit;
  422. extern cvar_t *timelimit;
  423. extern cvar_t *password;
  424. extern cvar_t *spectator_password;
  425. extern cvar_t *g_select_empty;
  426. extern cvar_t *dedicated;
  427. extern cvar_t *filterban;
  428. extern cvar_t *sv_gravity;
  429. extern cvar_t *sv_maxvelocity;
  430. extern cvar_t *gun_x, *gun_y, *gun_z;
  431. extern cvar_t *sv_rollspeed;
  432. extern cvar_t *sv_rollangle;
  433. extern cvar_t *run_pitch;
  434. extern cvar_t *run_roll;
  435. extern cvar_t *bob_up;
  436. extern cvar_t *bob_pitch;
  437. extern cvar_t *bob_roll;
  438. extern cvar_t *sv_cheats;
  439. extern cvar_t *maxclients;
  440. extern cvar_t *maxspectators;
  441. extern cvar_t *flood_msgs;
  442. extern cvar_t *flood_persecond;
  443. extern cvar_t *flood_waitdelay;
  444. extern cvar_t *sv_maplist;
  445. #define world (&g_edicts[0])
  446. // item spawnflags
  447. #define ITEM_TRIGGER_SPAWN 0x00000001
  448. #define ITEM_NO_TOUCH 0x00000002
  449. // 6 bits reserved for editor flags
  450. // 8 bits used as power cube id bits for coop games
  451. #define DROPPED_ITEM 0x00010000
  452. #define DROPPED_PLAYER_ITEM 0x00020000
  453. #define ITEM_TARGETS_USED 0x00040000
  454. //
  455. // fields are needed for spawning from the entity string
  456. // and saving / loading games
  457. //
  458. #define FFL_SPAWNTEMP 1
  459. #define FFL_NOSPAWN 2
  460. typedef enum {
  461. F_INT,
  462. F_FLOAT,
  463. F_LSTRING, // string on disk, pointer in memory, TAG_LEVEL
  464. F_GSTRING, // string on disk, pointer in memory, TAG_GAME
  465. F_VECTOR,
  466. F_ANGLEHACK,
  467. F_EDICT, // index on disk, pointer in memory
  468. F_ITEM, // index on disk, pointer in memory
  469. F_CLIENT, // index on disk, pointer in memory
  470. F_FUNCTION,
  471. F_MMOVE,
  472. F_IGNORE
  473. } fieldtype_t;
  474. typedef struct
  475. {
  476. char *name;
  477. int ofs;
  478. fieldtype_t type;
  479. int flags;
  480. } field_t;
  481. extern field_t fields[];
  482. extern gitem_t itemlist[];
  483. //
  484. // g_cmds.c
  485. //
  486. void Cmd_Help_f (edict_t *ent);
  487. void Cmd_Score_f (edict_t *ent);
  488. //
  489. // g_items.c
  490. //
  491. void PrecacheItem (gitem_t *it);
  492. void InitItems (void);
  493. void SetItemNames (void);
  494. gitem_t *FindItem (char *pickup_name);
  495. gitem_t *FindItemByClassname (char *classname);
  496. #define ITEM_INDEX(x) ((x)-itemlist)
  497. edict_t *Drop_Item (edict_t *ent, gitem_t *item);
  498. void SetRespawn (edict_t *ent, float delay);
  499. void ChangeWeapon (edict_t *ent);
  500. void SpawnItem (edict_t *ent, gitem_t *item);
  501. void Think_Weapon (edict_t *ent);
  502. int ArmorIndex (edict_t *ent);
  503. int PowerArmorType (edict_t *ent);
  504. gitem_t *GetItemByIndex (int index);
  505. qboolean Add_Ammo (edict_t *ent, gitem_t *item, int count);
  506. void Touch_Item (edict_t *ent, edict_t *other, cplane_t *plane, csurface_t *surf);
  507. //
  508. // g_utils.c
  509. //
  510. qboolean KillBox (edict_t *ent);
  511. void G_ProjectSource (vec3_t point, vec3_t distance, vec3_t forward, vec3_t right, vec3_t result);
  512. edict_t *G_Find (edict_t *from, int fieldofs, char *match);
  513. edict_t *findradius (edict_t *from, vec3_t org, float rad);
  514. edict_t *G_PickTarget (char *targetname);
  515. void G_UseTargets (edict_t *ent, edict_t *activator);
  516. void G_SetMovedir (vec3_t angles, vec3_t movedir);
  517. void G_InitEdict (edict_t *e);
  518. edict_t *G_Spawn (void);
  519. void G_FreeEdict (edict_t *e);
  520. void G_TouchTriggers (edict_t *ent);
  521. void G_TouchSolids (edict_t *ent);
  522. char *G_CopyString (char *in);
  523. float *tv (float x, float y, float z);
  524. char *vtos (vec3_t v);
  525. float vectoyaw (vec3_t vec);
  526. void vectoangles (vec3_t vec, vec3_t angles);
  527. //
  528. // g_combat.c
  529. //
  530. qboolean OnSameTeam (edict_t *ent1, edict_t *ent2);
  531. qboolean CanDamage (edict_t *targ, edict_t *inflictor);
  532. void T_Damage (edict_t *targ, edict_t *inflictor, edict_t *attacker, vec3_t dir, vec3_t point, vec3_t normal, int damage, int knockback, int dflags, int mod);
  533. void T_RadiusDamage (edict_t *inflictor, edict_t *attacker, float damage, edict_t *ignore, float radius, int mod);
  534. // damage flags
  535. #define DAMAGE_RADIUS 0x00000001 // damage was indirect
  536. #define DAMAGE_NO_ARMOR 0x00000002 // armour does not protect from this damage
  537. #define DAMAGE_ENERGY 0x00000004 // damage is from an energy based weapon
  538. #define DAMAGE_NO_KNOCKBACK 0x00000008 // do not affect velocity, just view angles
  539. #define DAMAGE_BULLET 0x00000010 // damage is from a bullet (used for ricochets)
  540. #define DAMAGE_NO_PROTECTION 0x00000020 // armor, shields, invulnerability, and godmode have no effect
  541. #define DEFAULT_BULLET_HSPREAD 300
  542. #define DEFAULT_BULLET_VSPREAD 500
  543. #define DEFAULT_SHOTGUN_HSPREAD 1000
  544. #define DEFAULT_SHOTGUN_VSPREAD 500
  545. #define DEFAULT_DEATHMATCH_SHOTGUN_COUNT 12
  546. #define DEFAULT_SHOTGUN_COUNT 12
  547. #define DEFAULT_SSHOTGUN_COUNT 20
  548. //
  549. // g_monster.c
  550. //
  551. void monster_fire_bullet (edict_t *self, vec3_t start, vec3_t dir, int damage, int kick, int hspread, int vspread, int flashtype);
  552. void monster_fire_shotgun (edict_t *self, vec3_t start, vec3_t aimdir, int damage, int kick, int hspread, int vspread, int count, int flashtype);
  553. void monster_fire_blaster (edict_t *self, vec3_t start, vec3_t dir, int damage, int speed, int flashtype, int effect);
  554. void monster_fire_grenade (edict_t *self, vec3_t start, vec3_t aimdir, int damage, int speed, int flashtype);
  555. void monster_fire_rocket (edict_t *self, vec3_t start, vec3_t dir, int damage, int speed, int flashtype);
  556. void monster_fire_railgun (edict_t *self, vec3_t start, vec3_t aimdir, int damage, int kick, int flashtype);
  557. void monster_fire_bfg (edict_t *self, vec3_t start, vec3_t aimdir, int damage, int speed, int kick, float damage_radius, int flashtype);
  558. // RAFAEL
  559. void monster_fire_ionripper (edict_t *self, vec3_t start, vec3_t dir, int damage, int speed, int flashtype, int effect);
  560. void monster_fire_heat (edict_t *self, vec3_t start, vec3_t dir, int damage, int speed, int flashtype);
  561. void monster_dabeam (edict_t *self);
  562. void monster_fire_blueblaster (edict_t *self, vec3_t start, vec3_t dir, int damage, int speed, int flashtype, int effect);
  563. void M_droptofloor (edict_t *ent);
  564. void monster_think (edict_t *self);
  565. void walkmonster_start (edict_t *self);
  566. void swimmonster_start (edict_t *self);
  567. void flymonster_start (edict_t *self);
  568. void AttackFinished (edict_t *self, float time);
  569. void monster_death_use (edict_t *self);
  570. void M_CatagorizePosition (edict_t *ent);
  571. qboolean M_CheckAttack (edict_t *self);
  572. void M_FlyCheck (edict_t *self);
  573. void M_CheckGround (edict_t *ent);
  574. //
  575. // g_misc.c
  576. //
  577. void ThrowHead (edict_t *self, char *gibname, int damage, int type);
  578. void ThrowClientHead (edict_t *self, int damage);
  579. void ThrowGib (edict_t *self, char *gibname, int damage, int type);
  580. void BecomeExplosion1(edict_t *self);
  581. // RAFAEL
  582. void ThrowHeadACID (edict_t *self, char *gibname, int damage, int type);
  583. void ThrowGibACID (edict_t *self, char *gibname, int damage, int type);
  584. //
  585. // g_ai.c
  586. //
  587. void AI_SetSightClient (void);
  588. void ai_stand (edict_t *self, float dist);
  589. void ai_move (edict_t *self, float dist);
  590. void ai_walk (edict_t *self, float dist);
  591. void ai_turn (edict_t *self, float dist);
  592. void ai_run (edict_t *self, float dist);
  593. void ai_charge (edict_t *self, float dist);
  594. int range (edict_t *self, edict_t *other);
  595. void FoundTarget (edict_t *self);
  596. qboolean infront (edict_t *self, edict_t *other);
  597. qboolean visible (edict_t *self, edict_t *other);
  598. qboolean FacingIdeal(edict_t *self);
  599. //
  600. // g_weapon.c
  601. //
  602. void ThrowDebris (edict_t *self, char *modelname, float speed, vec3_t origin);
  603. qboolean fire_hit (edict_t *self, vec3_t aim, int damage, int kick);
  604. void fire_bullet (edict_t *self, vec3_t start, vec3_t aimdir, int damage, int kick, int hspread, int vspread, int mod);
  605. void fire_shotgun (edict_t *self, vec3_t start, vec3_t aimdir, int damage, int kick, int hspread, int vspread, int count, int mod);
  606. void fire_blaster (edict_t *self, vec3_t start, vec3_t aimdir, int damage, int speed, int effect, qboolean hyper);
  607. void fire_grenade (edict_t *self, vec3_t start, vec3_t aimdir, int damage, int speed, float timer, float damage_radius);
  608. void fire_grenade2 (edict_t *self, vec3_t start, vec3_t aimdir, int damage, int speed, float timer, float damage_radius, qboolean held);
  609. void fire_rocket (edict_t *self, vec3_t start, vec3_t dir, int damage, int speed, float damage_radius, int radius_damage);
  610. void fire_rail (edict_t *self, vec3_t start, vec3_t aimdir, int damage, int kick);
  611. void fire_bfg (edict_t *self, vec3_t start, vec3_t dir, int damage, int speed, float damage_radius);
  612. // RAFAEL
  613. void fire_ionripper (edict_t *self, vec3_t start, vec3_t aimdir, int damage, int speed, int effect);
  614. void fire_heat (edict_t *self, vec3_t start, vec3_t dir, int damage, int speed, float damage_radius, int radius_damage);
  615. void fire_blueblaster (edict_t *self, vec3_t start, vec3_t aimdir, int damage, int speed, int effect);
  616. void fire_plasma (edict_t *self, vec3_t start, vec3_t dir, int damage, int speed, float damage_radius, int radius_damage);
  617. void fire_trap (edict_t *self, vec3_t start, vec3_t aimdir, int damage, int speed, float timer, float damage_radius, qboolean held);
  618. //
  619. // g_ptrail.c
  620. //
  621. void PlayerTrail_Init (void);
  622. void PlayerTrail_Add (vec3_t spot);
  623. void PlayerTrail_New (vec3_t spot);
  624. edict_t *PlayerTrail_PickFirst (edict_t *self);
  625. edict_t *PlayerTrail_PickNext (edict_t *self);
  626. edict_t *PlayerTrail_LastSpot (void);
  627. //
  628. // g_client.c
  629. //
  630. void respawn (edict_t *ent);
  631. void BeginIntermission (edict_t *targ);
  632. void PutClientInServer (edict_t *ent);
  633. void InitClientPersistant (gclient_t *client);
  634. void InitClientResp (gclient_t *client);
  635. void InitBodyQue (void);
  636. void ClientBeginServerFrame (edict_t *ent);
  637. //
  638. // g_player.c
  639. //
  640. void player_pain (edict_t *self, edict_t *other, float kick, int damage);
  641. void player_die (edict_t *self, edict_t *inflictor, edict_t *attacker, int damage, vec3_t point);
  642. //
  643. // g_svcmds.c
  644. //
  645. void ServerCommand (void);
  646. qboolean SV_FilterPacket (char *from);
  647. //
  648. // p_view.c
  649. //
  650. void ClientEndServerFrame (edict_t *ent);
  651. //
  652. // p_hud.c
  653. //
  654. void MoveClientToIntermission (edict_t *client);
  655. void G_SetStats (edict_t *ent);
  656. void G_SetSpectatorStats (edict_t *ent);
  657. void G_CheckChaseStats (edict_t *ent);
  658. void ValidateSelectedItem (edict_t *ent);
  659. void DeathmatchScoreboardMessage (edict_t *client, edict_t *killer);
  660. //
  661. // g_pweapon.c
  662. //
  663. void PlayerNoise(edict_t *who, vec3_t where, int type);
  664. //
  665. // m_move.c
  666. //
  667. qboolean M_CheckBottom (edict_t *ent);
  668. qboolean M_walkmove (edict_t *ent, float yaw, float dist);
  669. void M_MoveToGoal (edict_t *ent, float dist);
  670. void M_ChangeYaw (edict_t *ent);
  671. //
  672. // g_phys.c
  673. //
  674. void G_RunEntity (edict_t *ent);
  675. //
  676. // g_main.c
  677. //
  678. void SaveClientData (void);
  679. void FetchClientEntData (edict_t *ent);
  680. //
  681. // g_chase.c
  682. //
  683. void UpdateChaseCam(edict_t *ent);
  684. void ChaseNext(edict_t *ent);
  685. void ChasePrev(edict_t *ent);
  686. void GetChaseTarget(edict_t *ent);
  687. //============================================================================
  688. // client_t->anim_priority
  689. #define ANIM_BASIC 0 // stand / run
  690. #define ANIM_WAVE 1
  691. #define ANIM_JUMP 2
  692. #define ANIM_PAIN 3
  693. #define ANIM_ATTACK 4
  694. #define ANIM_DEATH 5
  695. #define ANIM_REVERSE 6
  696. // client data that stays across multiple level loads
  697. typedef struct
  698. {
  699. char userinfo[MAX_INFO_STRING];
  700. char netname[16];
  701. int hand;
  702. qboolean connected; // a loadgame will leave valid entities that
  703. // just don't have a connection yet
  704. // values saved and restored from edicts when changing levels
  705. int health;
  706. int max_health;
  707. int savedFlags;
  708. int selected_item;
  709. int inventory[MAX_ITEMS];
  710. // ammo capacities
  711. int max_bullets;
  712. int max_shells;
  713. int max_rockets;
  714. int max_grenades;
  715. int max_cells;
  716. int max_slugs;
  717. // RAFAEL
  718. int max_magslug;
  719. int max_trap;
  720. gitem_t *weapon;
  721. gitem_t *lastweapon;
  722. int power_cubes; // used for tracking the cubes in coop games
  723. int score; // for calculating total unit score in coop games
  724. int game_helpchanged;
  725. int helpchanged;
  726. qboolean spectator; // client is a spectator
  727. } client_persistant_t;
  728. // client data that stays across deathmatch respawns
  729. typedef struct
  730. {
  731. client_persistant_t coop_respawn; // what to set client->pers to on a respawn
  732. int enterframe; // level.framenum the client entered the game
  733. int score; // frags, etc
  734. vec3_t cmd_angles; // angles sent over in the last command
  735. qboolean spectator; // client is a spectator
  736. } client_respawn_t;
  737. // this structure is cleared on each PutClientInServer(),
  738. // except for 'client->pers'
  739. struct gclient_s
  740. {
  741. // known to server
  742. player_state_t ps; // communicated by server to clients
  743. int ping;
  744. // private to game
  745. client_persistant_t pers;
  746. client_respawn_t resp;
  747. pmove_state_t old_pmove; // for detecting out-of-pmove changes
  748. qboolean showscores; // set layout stat
  749. qboolean showinventory; // set layout stat
  750. qboolean showhelp;
  751. qboolean showhelpicon;
  752. int ammo_index;
  753. int buttons;
  754. int oldbuttons;
  755. int latched_buttons;
  756. qboolean weapon_thunk;
  757. gitem_t *newweapon;
  758. // sum up damage over an entire frame, so
  759. // shotgun blasts give a single big kick
  760. int damage_armor; // damage absorbed by armor
  761. int damage_parmor; // damage absorbed by power armor
  762. int damage_blood; // damage taken out of health
  763. int damage_knockback; // impact damage
  764. vec3_t damage_from; // origin for vector calculation
  765. float killer_yaw; // when dead, look at killer
  766. weaponstate_t weaponstate;
  767. vec3_t kick_angles; // weapon kicks
  768. vec3_t kick_origin;
  769. float v_dmg_roll, v_dmg_pitch, v_dmg_time; // damage kicks
  770. float fall_time, fall_value; // for view drop on fall
  771. float damage_alpha;
  772. float bonus_alpha;
  773. vec3_t damage_blend;
  774. vec3_t v_angle; // aiming direction
  775. float bobtime; // so off-ground doesn't change it
  776. vec3_t oldviewangles;
  777. vec3_t oldvelocity;
  778. float next_drown_time;
  779. int old_waterlevel;
  780. int breather_sound;
  781. int machinegun_shots; // for weapon raising
  782. // animation vars
  783. int anim_end;
  784. int anim_priority;
  785. qboolean anim_duck;
  786. qboolean anim_run;
  787. // powerup timers
  788. float quad_framenum;
  789. float invincible_framenum;
  790. float breather_framenum;
  791. float enviro_framenum;
  792. qboolean grenade_blew_up;
  793. float grenade_time;
  794. // RAFAEL
  795. float quadfire_framenum;
  796. qboolean trap_blew_up;
  797. float trap_time;
  798. int silencer_shots;
  799. int weapon_sound;
  800. float pickup_msg_time;
  801. float flood_locktill; // locked from talking
  802. float flood_when[10]; // when messages were said
  803. int flood_whenhead; // head pointer for when said
  804. float respawn_time; // can respawn when time > this
  805. edict_t *chase_target; // player we are chasing
  806. qboolean update_chase; // need to update chase info?
  807. };
  808. struct edict_s
  809. {
  810. entity_state_t s;
  811. struct gclient_s *client; // NULL if not a player
  812. // the server expects the first part
  813. // of gclient_s to be a player_state_t
  814. // but the rest of it is opaque
  815. qboolean inuse;
  816. int linkcount;
  817. // FIXME: move these fields to a server private sv_entity_t
  818. link_t area; // linked to a division node or leaf
  819. int num_clusters; // if -1, use headnode instead
  820. int clusternums[MAX_ENT_CLUSTERS];
  821. int headnode; // unused if num_clusters != -1
  822. int areanum, areanum2;
  823. //================================
  824. int svflags;
  825. vec3_t mins, maxs;
  826. vec3_t absmin, absmax, size;
  827. solid_t solid;
  828. int clipmask;
  829. edict_t *owner;
  830. // DO NOT MODIFY ANYTHING ABOVE THIS, THE SERVER
  831. // EXPECTS THE FIELDS IN THAT ORDER!
  832. //================================
  833. int movetype;
  834. int flags;
  835. char *model;
  836. float freetime; // sv.time when the object was freed
  837. //
  838. // only used locally in game, not by server
  839. //
  840. char *message;
  841. char *classname;
  842. int spawnflags;
  843. float timestamp;
  844. float angle; // set in qe3, -1 = up, -2 = down
  845. char *target;
  846. char *targetname;
  847. char *killtarget;
  848. char *team;
  849. char *pathtarget;
  850. char *deathtarget;
  851. char *combattarget;
  852. edict_t *target_ent;
  853. float speed, accel, decel;
  854. vec3_t movedir;
  855. vec3_t pos1, pos2;
  856. vec3_t velocity;
  857. vec3_t avelocity;
  858. int mass;
  859. float air_finished;
  860. float gravity; // per entity gravity multiplier (1.0 is normal)
  861. // use for lowgrav artifact, flares
  862. edict_t *goalentity;
  863. edict_t *movetarget;
  864. float yaw_speed;
  865. float ideal_yaw;
  866. float nextthink;
  867. void (*prethink) (edict_t *ent);
  868. void (*think)(edict_t *self);
  869. void (*blocked)(edict_t *self, edict_t *other); //move to moveinfo?
  870. void (*touch)(edict_t *self, edict_t *other, cplane_t *plane, csurface_t *surf);
  871. void (*use)(edict_t *self, edict_t *other, edict_t *activator);
  872. void (*pain)(edict_t *self, edict_t *other, float kick, int damage);
  873. void (*die)(edict_t *self, edict_t *inflictor, edict_t *attacker, int damage, vec3_t point);
  874. float touch_debounce_time; // are all these legit? do we need more/less of them?
  875. float pain_debounce_time;
  876. float damage_debounce_time;
  877. float fly_sound_debounce_time; //move to clientinfo
  878. float last_move_time;
  879. int health;
  880. int max_health;
  881. int gib_health;
  882. int deadflag;
  883. qboolean show_hostile;
  884. float powerarmor_time;
  885. char *map; // target_changelevel
  886. int viewheight; // height above origin where eyesight is determined
  887. int takedamage;
  888. int dmg;
  889. int radius_dmg;
  890. float dmg_radius;
  891. int sounds; //make this a spawntemp var?
  892. int count;
  893. edict_t *chain;
  894. edict_t *enemy;
  895. edict_t *oldenemy;
  896. edict_t *activator;
  897. edict_t *groundentity;
  898. int groundentity_linkcount;
  899. edict_t *teamchain;
  900. edict_t *teammaster;
  901. edict_t *mynoise; // can go in client only
  902. edict_t *mynoise2;
  903. int noise_index;
  904. int noise_index2;
  905. float volume;
  906. float attenuation;
  907. // timing variables
  908. float wait;
  909. float delay; // before firing targets
  910. float random;
  911. float teleport_time;
  912. int watertype;
  913. int waterlevel;
  914. vec3_t move_origin;
  915. vec3_t move_angles;
  916. // move this to clientinfo?
  917. int light_level;
  918. int style; // also used as areaportal number
  919. gitem_t *item; // for bonus items
  920. // common data blocks
  921. moveinfo_t moveinfo;
  922. monsterinfo_t monsterinfo;
  923. // RAFAEL
  924. int orders;
  925. };