]> de.git.xonotic.org Git - xonotic/xonotic-data.pk3dir.git/blob - qcsrc/common/turrets/turret.qh
Merge branch 'master' into terencehill/bot_waypoints
[xonotic/xonotic-data.pk3dir.git] / qcsrc / common / turrets / turret.qh
1 #pragma once
2
3 #include <common/weapons/_all.qh>
4
5 CLASS(Turret, Object)
6     ATTRIB(Turret, m_id, int, 0);
7
8     /** short name */
9     ATTRIB(Turret, netname, string);
10     /** human readable name */
11     ATTRIB(Turret, turret_name, string, _("Turret"));
12     /** currently a copy of the model */
13     ATTRIB(Turret, mdl, string);
14     /** full name of model */
15     ATTRIB(Turret, model, string);
16     /** full name of tur_head model */
17     ATTRIB(Turret, head_model, string);
18
19     ATTRIB(Turret, spawnflags, int, 0);
20     /** turret hitbox size */
21     ATTRIB(Turret, m_mins, vector, '-0 -0 -0');
22     /** turret hitbox size */
23     ATTRIB(Turret, m_maxs, vector, '0 0 0');
24
25     METHOD(Turret, display, void(Turret this, void(string name, string icon) returns)) {
26         returns(this.turret_name, string_null);
27     }
28     /** (BOTH) setup turret data */
29     METHOD(Turret, tr_setup, void(Turret this, entity it)) {
30
31     }
32     /** (SERVER) logic to run every frame */
33     METHOD(Turret, tr_think, void(Turret this, entity it)) {
34
35     }
36     /** (SERVER) called when turret dies */
37     METHOD(Turret, tr_death, void(Turret this, entity it)) {
38
39     }
40     /** (BOTH) precaches models/sounds used by this turret */
41     METHOD(Turret, tr_precache, void(Turret this)) {
42
43     }
44     ATTRIB(Turret, m_weapon, Weapon);
45 #ifdef SVQC
46     /** (SERVER) called when turret attacks */
47     METHOD(Turret, tr_attack, void(Turret this, entity it)) {
48         Weapon w = this.m_weapon;
49         .entity weaponentity = weaponentities[0];
50         w.wr_think(w, it, weaponentity, 1);
51     }
52 #endif
53     /** (ALL) */
54     METHOD(Turret, tr_config, void(Turret this)) {
55         // TODO
56     }
57 ENDCLASS(Turret)
58
59 // fields:
60 .entity tur_head;
61
62 // target selection flags
63 .int target_select_flags;
64 .int target_validate_flags;
65 const int TFL_TARGETSELECT_NO = 2; // don't automatically find targets
66 const int TFL_TARGETSELECT_LOS = 4; // require line of sight to find targets
67 const int TFL_TARGETSELECT_PLAYERS = 8; // target players
68 const int TFL_TARGETSELECT_MISSILES = 16; // target projectiles
69 const int TFL_TARGETSELECT_TRIGGERTARGET = 32; // respond to turret_trigger_target events
70 const int TFL_TARGETSELECT_ANGLELIMITS = 64; // apply extra angular limits to target selection
71 const int TFL_TARGETSELECT_RANGELIMITS = 128; // limit target selection range
72 const int TFL_TARGETSELECT_TEAMCHECK = 256; // don't attack teammates
73 const int TFL_TARGETSELECT_NOBUILTIN = 512; // only attack targets when triggered
74 const int TFL_TARGETSELECT_OWNTEAM = 1024; // only attack teammates
75 const int TFL_TARGETSELECT_NOTURRETS = 2048; // don't attack other turrets
76 const int TFL_TARGETSELECT_FOV = 4096; // extra limits to attack range
77 const int TFL_TARGETSELECT_MISSILESONLY = 8192; // only attack missiles
78
79 // aim flags
80 .int aim_flags;
81 const int TFL_AIM_NO = 1; // no aiming
82 const int TFL_AIM_SPLASH = 2; // aim for ground around the target's feet
83 const int TFL_AIM_LEAD = 4; // try to predict target movement
84 const int TFL_AIM_SHOTTIMECOMPENSATE = 8; // compensate for shot traveltime when leading
85 const int TFL_AIM_ZPREDICT = 16; // predict target's z position at impact
86 const int TFL_AIM_SIMPLE = 32; // aim at player's current location
87
88 // tracking flags
89 .int track_flags;
90 const int TFL_TRACK_NO = 2; // don't move head
91 const int TFL_TRACK_PITCH = 4; // pitch head
92 const int TFL_TRACK_ROTATE = 8; // rotate head
93
94 // prefire checks
95 .int firecheck_flags;
96 const int TFL_FIRECHECK_DEAD = 4; // don't attack dead targets (zombies?)
97 const int TFL_FIRECHECK_DISTANCES = 8; // another range check
98 const int TFL_FIRECHECK_LOS = 16; // line of sight
99 const int TFL_FIRECHECK_AIMDIST = 32; // consider distance impactpoint<->aimspot
100 const int TFL_FIRECHECK_REALDIST = 64; // consider enemy origin<->impactpoint
101 const int TFL_FIRECHECK_ANGLEDIST = 128; // consider angular diff head<->aimspot
102 const int TFL_FIRECHECK_TEAMCHECK = 256; // don't attack teammates
103 const int TFL_FIRECHECK_AFF = 512; // try to avoid any friendly fire
104 const int TFL_FIRECHECK_AMMO_OWN = 1024; // own ammo needs to be larger than damage dealt
105 const int TFL_FIRECHECK_AMMO_OTHER = 2048; // target's ammo needs to be less than max
106 const int TFL_FIRECHECK_REFIRE = 4096; // check single attack finished delays
107 const int TFL_FIRECHECK_NO = 16384; // no prefire checks
108
109 // attack flags
110 .int shoot_flags;
111 const int TFL_SHOOT_NO = 64; // no attacking
112 const int TFL_SHOOT_VOLLY = 2; // fire in vollies
113 const int TFL_SHOOT_VOLLYALWAYS = 4; // always do a full volly, even if target is lost
114 const int TFL_SHOOT_HITALLVALID = 8; // loop through all valid targets
115 const int TFL_SHOOT_CLEARTARGET = 16; // lose target after attack (after volly is done if in volly mode)
116 const int TFL_SHOOT_CUSTOM = 32; // custom attacking
117
118 // turret capabilities
119 .int turret_flags;
120 const int TUR_FLAG_NONE = 0; // no abilities
121 const int TUR_FLAG_SNIPER = 2; // sniping turret
122 const int TUR_FLAG_SPLASH = 4; // can deal splash damage
123 const int TUR_FLAG_HITSCAN = 8; // hit scan
124 const int TUR_FLAG_MULTIGUN = 16; // multiple guns
125 const int TUR_FLAG_GUIDED = 32; // laser guided projectiles
126 const int TUR_FLAG_SLOWPROJ = 64; // turret fires slow projectiles
127 const int TUR_FLAG_MEDPROJ = 128; // turret fires medium projectiles
128 const int TUR_FLAG_FASTPROJ = 256; // turret fires fast projectiles
129 const int TUR_FLAG_PLAYER = 512; // can damage players
130 const int TUR_FLAG_MISSILE = 1024; // can damage missiles
131 const int TUR_FLAG_SUPPORT = 2048; // supports other units
132 const int TUR_FLAG_AMMOSOURCE = 4096; // can provide ammunition
133 const int TUR_FLAG_RECIEVETARGETS = 8192; // can recieve targets from external sources
134 const int TUR_FLAG_MOVE = 16384; // can move
135 const int TUR_FLAG_ROAM = 32768; // roams around if not attacking
136 const int TUR_FLAG_ISTURRET = 65536; // identifies this unit as a turret
137
138 // ammo types
139 #define ammo_flags currentammo
140 const int TFL_AMMO_NONE = 64; // doesn't use ammo
141 const int TFL_AMMO_ENERGY = 2; // uses power
142 const int TFL_AMMO_BULLETS = 4; // uses bullets
143 const int TFL_AMMO_ROCKETS = 8; // uses explosives
144 const int TFL_AMMO_RECHARGE = 16; // regenerates ammo
145 const int TFL_AMMO_RECIEVE = 32; // can recieve ammo from support units
146
147 // damage flags
148 .int damage_flags;
149 const int TFL_DMG_NO = 256; // doesn't take damage
150 const int TFL_DMG_YES = 2; // can be damaged
151 const int TFL_DMG_TEAM = 4; // can be damaged by teammates
152 const int TFL_DMG_RETALIATE = 8; // target attackers
153 const int TFL_DMG_RETALIATE_TEAM = 16; // target attackers, even if on same team
154 const int TFL_DMG_TARGETLOSS = 32; // loses target when damaged
155 const int TFL_DMG_AIMSHAKE = 64; // damage throws off aim
156 const int TFL_DMG_HEADSHAKE = 128; // damage shakes head
157 const int TFL_DMG_DEATH_NORESPAWN = 256; // no re-spawning
158
159 // spawn flags
160 const int TSF_SUSPENDED = 1;
161 const int TSF_TERRAINBASE = 2; // currently unused
162 const int TSF_NO_AMMO_REGEN = 4; // disable builtin ammo regeneration
163 const int TSF_NO_PATHBREAK = 8; // don't break path to chase enemies, will still fire at them if possible
164 const int TSL_NO_RESPAWN = 16; // don't re-spawn
165 const int TSL_ROAM = 32; // roam while idle
166
167 // send flags
168 const int TNSF_UPDATE       = 2;
169 const int TNSF_STATUS       = 4;
170 const int TNSF_SETUP        = 8;
171 const int TNSF_ANG          = 16;
172 const int TNSF_AVEL         = 32;
173 const int TNSF_MOVE         = 64;
174 .float anim_start_time;
175 const int TNSF_ANIM         = 128;
176
177 const int TNSF_FULL_UPDATE  = 16777215;