]> icculus.org git repositories - divverent/nexuiz.git/blob - data/qcsrc/server/gamec/w_hagar.c
Fixed g_campaign team balance
[divverent/nexuiz.git] / data / qcsrc / server / gamec / w_hagar.c
1 void() hagar_ready_01;
2 void() hagar_fire1_01;
3 void() hagar_fire2_01;
4 void() hagar_deselect_01;
5 void() hagar_select_01;
6
7 float() hagar_check =
8 {
9         if (self.ammo_rockets >= cvar("g_balance_hagar_primary_ammo"))
10                 return TRUE;
11         return FALSE;
12 };
13
14 float() hagar_check2 =
15 {
16         if (self.ammo_rockets >= cvar("g_balance_hagar_secondary_ammo"))
17                 return TRUE;
18         return FALSE;
19 };
20
21 void(float req) w_hagar =
22 {
23         if (req == WR_IDLE)
24                 hagar_ready_01();
25         else if (req == WR_AIM)
26                 self.button0 = bot_aim(cvar("g_balance_hagar_primary_speed"), 0, cvar("g_balance_hagar_primary_lifetime"), FALSE);
27         else if (req == WR_FIRE1)
28                 weapon_prepareattack(hagar_check, hagar_check, hagar_fire1_01, cvar("g_balance_hagar_primary_refire"));
29         else if (req == WR_FIRE2)
30                 weapon_prepareattack(hagar_check, hagar_check, hagar_fire2_01, cvar("g_balance_hagar_secondary_refire"));
31         else if (req == WR_RAISE)
32                 hagar_select_01();
33         else if (req == WR_UPDATECOUNTS)
34                 self.currentammo = self.ammo_rockets;
35         else if (req == WR_DROP)
36                 hagar_deselect_01();
37         else if (req == WR_SETUP)
38                 weapon_setup(WEP_HAGAR, "w_hagar.zym", IT_ROCKETS);
39         else if (req == WR_CHECKAMMO)
40                 weapon_hasammo = hagar_check() + hagar_check2();
41 };
42
43 void W_Hagar_Explode (void)
44 {
45         vector  org2;
46         float b;
47         org2 = findbetterlocation (self.origin, 12);
48         te_explosion (org2);
49         //effect (org2, "models/sprites/hagar.spr", 0, 12, 35);
50         b = crandom();
51         if (b<-0.7)
52                 sound (self, CHAN_BODY, "weapons/hagexp1.ogg", 1, ATTN_NORM);
53         else if (b<0.4)
54                 sound (self, CHAN_BODY, "weapons/hagexp2.ogg", 1, ATTN_NORM);
55         else if (b<1)
56                 sound (self, CHAN_BODY, "weapons/hagexp3.ogg", 1, ATTN_NORM);
57
58         self.event_damage = SUB_Null;
59         RadiusDamage (self, self.owner, cvar("g_balance_hagar_primary_damage"), cvar("g_balance_hagar_primary_edgedamage"), cvar("g_balance_hagar_primary_radius"), world, cvar("g_balance_hagar_primary_force"), IT_HAGAR);
60
61         remove (self);
62 }
63
64 void W_Hagar_Explode2 (void)
65 {
66         vector  org2;
67         float b;
68         org2 = findbetterlocation (self.origin, 12);
69         te_explosion (org2);
70         //effect (org2, "models/sprites/hagar.spr", 0, 12, 35);
71         b = crandom();
72         if (b<-0.7)
73                 sound (self, CHAN_BODY, "weapons/hagexp1.ogg", 1, ATTN_NORM);
74         else if (b<0.4)
75                 sound (self, CHAN_BODY, "weapons/hagexp2.ogg", 1, ATTN_NORM);
76         else if (b<1)
77                 sound (self, CHAN_BODY, "weapons/hagexp3.ogg", 1, ATTN_NORM);
78
79         self.event_damage = SUB_Null;
80         RadiusDamage (self, self.owner, cvar("g_balance_hagar_secondary_damage"), cvar("g_balance_hagar_secondary_edgedamage"), cvar("g_balance_hagar_secondary_radius"), world, cvar("g_balance_hagar_secondary_force"), IT_HAGAR);
81
82         remove (self);
83 }
84
85 void W_Hagar_Touch (void)
86 {
87         if (trace_dphitq3surfaceflags & Q3SURFACEFLAG_NOIMPACT)
88         {
89                 remove(self);
90                 return;
91         }
92         if (other == self.owner)
93                 return;
94
95         self.think ();
96 }
97
98 void W_Hagar_Touch2 (void)
99 {
100         if (trace_dphitq3surfaceflags & Q3SURFACEFLAG_NOIMPACT)
101         {
102                 remove(self);
103                 return;
104         }
105
106         if(self.cnt > 0 || other.takedamage == DAMAGE_AIM) {
107                 self.think();
108         } else {
109                 self.cnt++;
110         }
111 }
112
113 void W_Hagar_Damage (entity inflictor, entity attacker, float damage, float deathtype, vector hitloc, vector force)
114 {
115         self.health = self.health - damage;
116         if (self.health <= 0)
117                 self.think ();
118 }
119
120 void W_Hagar_Attack (void)
121 {
122         local entity missile;
123         local vector org;
124
125         local vector trueaim;
126         trueaim = W_TrueAim();
127
128         sound (self, CHAN_WEAPON, "weapons/hagar_fire.ogg", 1, ATTN_NORM);
129         if (self.items & IT_STRENGTH)
130                 sound (self, CHAN_AUTO, "weapons/strength_fire.ogg", 1, ATTN_NORM);
131
132         if (cvar("g_use_ammunition"))
133                 self.ammo_rockets = self.ammo_rockets - cvar("g_balance_hagar_primary_ammo");
134         self.punchangle_x = -2;
135         org = W_MuzzleOrigin (self, '18 5 -8');
136
137         missile = spawn ();
138         missile.owner = self;
139         missile.classname = "missile";
140         missile.bot_dodge = TRUE;
141         missile.bot_dodgerating = cvar("g_balance_hagar_primary_damage");
142         missile.touch = W_Hagar_Touch;
143         missile.think = W_Hagar_Explode;
144         missile.nextthink = time + cvar("g_balance_hagar_primary_lifetime");
145         missile.solid = SOLID_BBOX;
146         missile.scale = 0.4; // BUG: the model is too big
147         setorigin (missile, org);
148         setmodel (missile, "models/hagarmissile.mdl");
149         setsize (missile, '0 0 0', '0 0 0');
150         //missile.takedamage = DAMAGE_YES;
151         //missile.damageforcescale = 4;
152         //missile.health = 10;
153         //missile.event_damage = W_Hagar_Damage;
154         missile.effects = EF_LOWPRECISION | EF_NOSHADOW | EF_FULLBRIGHT;
155
156         missile.movetype = MOVETYPE_FLY;
157         missile.velocity = (normalize(trueaim - org) + randomvec() * cvar("g_balance_hagar_primary_spread")) * cvar("g_balance_hagar_primary_speed");
158
159         missile.angles = vectoangles (missile.velocity);
160         missile.flags = FL_PROJECTILE;
161 }
162
163 void W_Hagar_Attack2 (void)
164 {
165         local entity missile;
166         local vector org;
167
168         local vector trueaim;
169         trueaim = W_TrueAim();
170
171         sound (self, CHAN_WEAPON, "weapons/hagar_fire.ogg", 1, ATTN_NORM);
172         if (self.items & IT_STRENGTH)
173                 sound (self, CHAN_AUTO, "weapons/strength_fire.ogg", 1, ATTN_NORM);
174
175         if (cvar("g_use_ammunition"))
176                 self.ammo_rockets = self.ammo_rockets - cvar("g_balance_hagar_secondary_ammo");
177         self.punchangle_x = -2;
178         org = W_MuzzleOrigin (self, '18 5 -8');
179
180         missile = spawn ();
181         missile.owner = self;
182         missile.classname = "missile";
183         missile.bot_dodge = TRUE;
184         missile.bot_dodgerating = cvar("g_balance_hagar_secondary_damage");
185         missile.touch = W_Hagar_Touch2;
186         missile.cnt = 0;
187         missile.think = W_Hagar_Explode;
188         missile.nextthink = time + cvar("g_balance_hagar_secondary_lifetime");
189         missile.solid = SOLID_BBOX;
190         missile.scale = 0.4; // BUG: the model is too big
191         setorigin (missile, org);
192         setmodel (missile, "models/hagarmissile.mdl");
193         setsize (missile, '0 0 0', '0 0 0');
194         //missile.takedamage = DAMAGE_YES;
195         //missile.damageforcescale = 4;
196         //missile.health = 10;
197         //missile.event_damage = W_Hagar_Damage;
198         missile.effects = EF_LOWPRECISION | EF_NOSHADOW | EF_FULLBRIGHT;
199
200         missile.movetype = MOVETYPE_BOUNCEMISSILE;
201         missile.velocity = (normalize(trueaim - org) + randomvec() * cvar("g_balance_hagar_secondary_spread")) * cvar("g_balance_hagar_secondary_speed");
202         missile.avelocity = '100 10 10';
203
204         missile.angles = vectoangles (missile.velocity);
205         missile.flags = FL_PROJECTILE;
206 }
207
208 // weapon frames
209 void()  hagar_ready_01 =        {weapon_thinkf(WFRAME_IDLE, 0.1, hagar_ready_01); self.weaponentity.state = WS_READY;};
210 void()  hagar_select_01 =       {weapon_thinkf(-1, cvar("g_balance_weaponswitchdelay"), w_ready); weapon_boblayer1(PLAYER_WEAPONSELECTION_SPEED, '0 0 0');};
211 void()  hagar_deselect_01 =     {weapon_thinkf(-1, cvar("g_balance_weaponswitchdelay"), w_clear); weapon_boblayer1(PLAYER_WEAPONSELECTION_SPEED, PLAYER_WEAPONSELECTION_RANGE);};
212 void()  hagar_fire1_01 =
213 {
214         self.attack_finished = time + cvar("g_balance_hagar_primary_refire");
215         weapon_doattack(hagar_check, hagar_check, W_Hagar_Attack);
216         weapon_thinkf(WFRAME_FIRE1, cvar("g_balance_hagar_primary_refire"), hagar_ready_01);
217 };
218 void()  hagar_fire2_01 =
219 {
220         self.attack_finished = time + cvar("g_balance_hagar_secondary_refire");
221         weapon_doattack(hagar_check2, hagar_check2, W_Hagar_Attack2);
222         weapon_thinkf(WFRAME_FIRE1, cvar("g_balance_hagar_secondary_refire"), hagar_ready_01);
223 };
224