SHOW:
|
|
- or go back to the newest paste.
1 | diff -r 424c0d946ec9 qblood/progs/client.qc | |
2 | --- a/qblood/progs/client.qc Thu May 09 17:12:34 2013 +0200 | |
3 | - | +++ b/qblood/progs/client.qc Fri Jul 26 23:46:44 2013 -0500 |
3 | + | +++ b/qblood/progs/client.qc Sat Jan 10 03:00:19 2015 +0000 |
4 | @@ -712,7 +712,7 @@ | |
5 | return; | |
6 | ||
7 | bprint3("Kevorkian approves ", self.netname, "!\n"); | |
8 | - sound(self, CHAN_AUTO, "thevoice/vo5.wav", 1, ATTN_NORM); | |
9 | + self.noise1 = "thevoice/vo5.wav"; | |
10 | CTF_PlayerDropFlag(); | |
11 | self.modelindex = modelindex_player; | |
12 | self.health = 0; | |
13 | @@ -1168,7 +1168,7 @@ | |
14 | // Play the obituary sound | |
15 | if (self.noise1) | |
16 | { | |
17 | - sound(self, CHAN_VOICE, self.noise1, 1, ATTN_NORM); | |
18 | + sound(self, CHAN_VOICE, self.noise1, 1, ATTN_NONE); | |
19 | self.noise1 = string_null; | |
20 | } | |
21 | ||
22 | @@ -1643,7 +1643,7 @@ | |
23 | } | |
24 | ||
25 | // If we aren't dead, we can play with our stuff | |
26 | - else | |
27 | + else if (isAlive) | |
28 | { | |
29 | // Weapons | |
30 | if ((self.impulse >= IMP_PITCHFORK && self.impulse <= IMP_VOODOO_DOLL) || | |
31 | @@ -1685,12 +1685,11 @@ | |
32 | // These ones are considered cheats and are only allowed when the "sv_cheats" cvar is set | |
33 | else if (cvar("sv_cheats")) | |
34 | { | |
35 | -#if !defined(NO_FRIKBOT) | |
36 | +#ifndef NO_FRIKBOT | |
37 | if (self.impulse == IMP_BOT_CAM) | |
38 | botcam_u(); | |
39 | else if (self.impulse == IMP_BOT_WAYPT_EDIT) | |
40 | bot_way_edit(); | |
41 | - else | |
42 | #endif | |
43 | } | |
44 | } | |
45 | @@ -1814,7 +1813,17 @@ | |
46 | if (self.player_state >= PS_BOD_FALL && self.player_state <= PS_BOD_SWAY) | |
47 | { | |
48 | if (self.t_length < time) | |
49 | - Player_LiveAgain(); | |
50 | + { | |
51 | + self.health = 0; | |
52 | + self.player_state = PS_BOD_DEATH; | |
53 | + ClientObituary(self.oldenemy); | |
54 | + self.takedamage = DAMAGE_NO; | |
55 | + PlayerDie(); | |
56 | + } | |
57 | + else if (self.t_length-1 <= time) | |
58 | + if (self.button4 && !self.oldbutton4) | |
59 | + if (random() < 0.024) | |
60 | + Player_LiveAgain(); | |
61 | ResetIdle(self); | |
62 | return; | |
63 | } | |
64 | @@ -1851,7 +1860,7 @@ | |
65 | ||
66 | bprint2(self.netname, " entered the game\n"); | |
67 | ||
68 | - sound(self, CHAN_AUTO, "thevoice/vo1.wav", 1, ATTN_NORM); // Let the Bloodbath Begin! | |
69 | + sound(self, CHAN_AUTO, "thevoice/vo1.wav", 1, ATTN_NONE); // Let the Bloodbath Begin! | |
70 | self.do_observer = 1; | |
71 | ||
72 | // Reset the votes | |
73 | @@ -2019,6 +2028,7 @@ | |
74 | // killed self in a dumb fashion | |
75 | Cl_UpdatePlayerFrags(attacker, -1); | |
76 | ||
77 | + if (self.noise1 != "thevoice/vo5.wav") { // Kevorkian | |
78 | if (rnum < 0.33) | |
79 | { | |
80 | deathstring = " receives the Darwin Award\n"; | |
81 | @@ -2036,6 +2046,7 @@ | |
82 | } | |
83 | ||
84 | bprint2(self.netname, deathstring); | |
85 | + } | |
86 | return; | |
87 | } | |
88 | else if (friendlyfire && self.team > 0 && self.team == attacker.team) | |
89 | @@ -2060,14 +2071,14 @@ | |
90 | Cl_UpdatePlayerFrags(attacker, 1); | |
91 | rnum = random()*54; | |
92 | if (rnum <= 1) BuildDeathString2(attacker, "thevoice/vo39.wav", " beat ", " like a cur"); // Beaten like a Cur | |
93 | - else if (rnum <= 2) BuildDeathString(attacker, "thevoice/vo31.wav", " bobbettized "); // Bobbettized! | |
94 | + else if (rnum <= 2) BuildDeathString(attacker, "thevoice/vo31.wav", " bobbittized "); // Bobbettized! | |
95 | else if (rnum <= 3) BuildDeathString(attacker, "thevoice/vo24.wav", " destroyed "); // Destroyed! | |
96 | else if (rnum <= 4) BuildDeathString2(attacker, "thevoice/vo36.wav", " butchered ", " into dog meat"); // Dog meat | |
97 | else if (rnum <= 5) BuildDeathString(attacker, "thevoice/vo44.wav", " showed his excellence to "); // Excellent! | |
98 | else if (rnum <= 6) BuildDeathString(attacker, "thevoice/vo22.wav", " made fine work of "); // Fine work | |
99 | else if (rnum <= 7) BuildDeathString2(attacker, "thevoice/vo20.wav", " showed ", " how good he is"); // Good one | |
100 | else if (rnum <= 8) BuildDeathString(attacker, "thevoice/vo33.wav", " scored on "); // He shoots! He scores! | |
101 | - else if (rnum <= 8) BuildDeathString(attacker, "thevoice/vo25.wav", " hosed "); // Hosed! | |
102 | + else if (rnum <= 9) BuildDeathString(attacker, "thevoice/vo25.wav", " hosed "); // Hosed! | |
103 | else if (rnum <= 10) BuildDeathString(attacker, "thevoice/vo26.wav", " humiliated "); // Humiliated! | |
104 | else if (rnum <= 11) BuildDeathString(attacker, "thevoice/vo21.wav", " made lunch meat with "); // Lunch meat! | |
105 | else if (rnum <= 12) BuildDeathString(attacker, "thevoice/vo29.wav", " passed the chili to "); // Pass the chili! | |
106 | @@ -2075,7 +2086,7 @@ | |
107 | else if (rnum <= 14) BuildDeathString(attacker, "thevoice/vo38.wav", " ripped "); // Ripped 'em loose | |
108 | else if (rnum <= 15) BuildDeathString2(attacker, "thevoice/vo28.wav", " sent ", " to hell!"); // Sent to HELL! | |
109 | else if (rnum <= 16) BuildDeathString(attacker, "thevoice/vo41.wav", " snuffed "); // Snuffed! | |
110 | - else if (rnum <= 17) BuildDeathString2(attacker, "thevoice/vo34.wav", " split ", "'s blood"); // Spillage! | |
111 | + else if (rnum <= 17) BuildDeathString2(attacker, "thevoice/vo34.wav", " spilt ", "'s blood"); // Spillage! | |
112 | else if (rnum <= 18) BuildDeathString(attacker, "thevoice/vo35.wav", " sprayed "); // Sprayed! | |
113 | else if (rnum <= 19) BuildDeathString(attacker, "thevoice/vo32.wav", " stiffed "); // Stiffed! | |
114 | else if (rnum <= 20) BuildDeathString2(attacker, "thevoice/vo19.wav", " dazzled ", " with his talent"); // Talented! | |
115 | @@ -2083,21 +2094,21 @@ | |
116 | else if (rnum <= 22) BuildDeathString(attacker, "thevoice/vo43.wav", " vaporized "); // Vaporized! | |
117 | else if (rnum <= 23) BuildDeathString(attacker, "thevoice/vo23.wav", " did well with "); // Well done! | |
118 | else if (rnum <= 24) BuildDeathString(attacker, "thevoice/vo40.wav", " whipped and creamed "); // Whipped and creamed! | |
119 | - else if (rnum <= 25) BuildDeathString2(attacker, "thevoice/vo9.wav", " made ", " suffer scrotum seperation"); // Scrotum separation | |
120 | + else if (rnum <= 25) BuildDeathString2(attacker, "thevoice/vo9.wav", " made ", " suffer scrotum separation"); // Scrotum separation | |
121 | else if (rnum <= 26) BuildDeathString2(attacker, "thevoice/vo7.wav", " turned ", " into excrement"); // Excrement | |
122 | else if (rnum <= 27) BuildDeathString2(attacker, "thevoice/vo8.wav", " turned ", " into hamburger"); // Hamburger | |
123 | else if (rnum <= 28) BuildDeathString2(attacker, "thevoice/vo42.wav", " vented ", "'s spleen"); //Vented spleen | |
124 | else if (rnum <= 29) BuildDeathString(attacker, "thevoice/vo10.wav", " body bagged "); //Boddy bagged | |
125 | else if (rnum <= 30) BuildDeathString2(attacker, "thevoice/boned.wav", " boned ", " like a fish!"); //Boned | |
126 | else if (rnum <= 31) BuildDeathString2(attacker, "thevoice/justice.wav", " gave ", " Anal Justice!"); //Anal Justice | |
127 | - else if (rnum <= 32) BuildDeathString2(attacker, string_null, " hurt ", " real bad!"); //Hurt them real bad | |
128 | + else if (rnum <= 32) BuildDeathString2(attacker, "thevoice/vo6.wav", " hurt ", " real bad!"); //Hurt them real bad | |
129 | else if (rnum <= 33) BuildDeathString2(attacker, "thevoice/ripped.wav", " ripped ", " a new orifice!"); //Ripped | |
130 | else if (rnum <= 34) BuildDeathString(attacker, "thevoice/castra.wav", " castrated "); //Castrated | |
131 | else if (rnum <= 35) BuildDeathString(attacker, "thevoice/creamed.wav", " creamed "); //Creamed | |
132 | else if (rnum <= 36) BuildDeathString(attacker, "thevoice/decimat.wav", " decimated "); //Decimated | |
133 | else if (rnum <= 37) BuildDeathString(attacker, "thevoice/destro.wav", " destroyed "); //Destroyed | |
134 | else if (rnum <= 38) BuildDeathString(attacker, "thevoice/diced.wav", " diced "); //Diced | |
135 | - else if (rnum <= 39) BuildDeathString(attacker, "thevoice/disembo.wav", " disembowled "); //Disembowled | |
136 | + else if (rnum <= 39) BuildDeathString(attacker, "thevoice/disembo.wav", " disemboweled "); //Disembowled | |
137 | else if (rnum <= 40) BuildDeathString(attacker, "thevoice/flatte.wav", " flattened "); //Flattened | |
138 | else if (rnum <= 41) BuildDeathString(attacker, "thevoice/killed.wav", " killed "); //Killed | |
139 | else if (rnum <= 42) BuildDeathString(attacker, "thevoice/madness.wav", " gave AnAl MaDnEsS to "); //Anal madness | |
140 | @@ -2107,7 +2118,7 @@ | |
141 | else if (rnum <= 46) BuildDeathString(attacker, "thevoice/reamed.wav", " reamed "); //Reamed | |
142 | else if (rnum <= 47) BuildDeathString(attacker, "thevoice/vo14.wav", " shat upon "); //Shat upon | |
143 | else if (rnum <= 48) BuildDeathString(attacker, "thevoice/slaught.wav", " slaughtered "); //Slaughtered | |
144 | - else if (rnum <= 49) BuildDeathString(attacker, "thevoice/cliced.wav", " sliced "); //Sliced | |
145 | + else if (rnum <= 49) BuildDeathString(attacker, "thevoice/sliced.wav", " sliced "); //Sliced | |
146 | else if (rnum <= 50) BuildDeathString(attacker, "thevoice/smashed.wav", " smashed "); //Smashed | |
147 | else if (rnum <= 51) BuildDeathString(attacker, "thevoice/sodomiz.wav", " sodomized "); //Sodomized | |
148 | else if (rnum <= 52) BuildDeathString(attacker, "thevoice/splatt.wav", " splattered "); //Splattered | |
149 | diff -r 424c0d946ec9 qblood/progs/combat.qc | |
150 | --- a/qblood/progs/combat.qc Thu May 09 17:12:34 2013 +0200 | |
151 | - | +++ b/qblood/progs/combat.qc Fri Jul 26 23:46:44 2013 -0500 |
151 | + | +++ b/qblood/progs/combat.qc Sat Jan 10 03:00:19 2015 +0000 |
152 | @@ -78,8 +78,10 @@ | |
153 | oself = self; | |
154 | self = targ; | |
155 | ||
156 | +#if 0 | |
157 | if (self.health < 0) | |
158 | self.health = 0; // Blood had no negative sign, so nothing below 0 | |
159 | +#endif | |
160 | ||
161 | #ifndef NO_FRIKBOT | |
162 | ||
163 | @@ -185,6 +187,7 @@ | |
164 | local float save; | |
165 | local float take; | |
166 | local float protected; // PM: Boolean for invulnerability. | |
167 | + local float bodhealth; | |
168 | ||
169 | if (!targ.takedamage) | |
170 | return; | |
171 | @@ -471,8 +474,12 @@ | |
172 | // Do the damage. | |
173 | targ.health = targ.health - take; | |
174 | ||
175 | + if (cvar("g_instabrink")) | |
176 | + bodhealth = 99; | |
177 | + else | |
178 | + bodhealth = 1; | |
179 | if (targ.health >= -1 && // If a player reaches between -1 and 1 HP (Brink Of Death) | |
180 | - targ.health <= 1 && | |
181 | + targ.health <= bodhealth && | |
182 | targ.classname == "player" && // BOD can only be done player to player | |
183 | attacker.classname == "player" && | |
184 | targ.player_state != PS_BOD_FALL && // If he wasn't already on the Brink Of Death | |
185 | diff -r 424c0d946ec9 qblood/progs/defs.qc | |
186 | --- a/qblood/progs/defs.qc Thu May 09 17:12:34 2013 +0200 | |
187 | - | +++ b/qblood/progs/defs.qc Fri Jul 26 23:46:44 2013 -0500 |
187 | + | +++ b/qblood/progs/defs.qc Sat Jan 10 03:00:19 2015 +0000 |
188 | @@ -352,6 +352,7 @@ | |
189 | .float charge; | |
190 | .float tnt_time; | |
191 | .float tnt_type; | |
192 | +.float remote_type; | |
193 | ||
194 | .float idle_time; | |
195 | .float idle_done; | |
196 | diff -r 424c0d946ec9 qblood/progs/items.qc | |
197 | --- a/qblood/progs/items.qc Thu May 09 17:12:34 2013 +0200 | |
198 | - | +++ b/qblood/progs/items.qc Fri Jul 26 23:46:44 2013 -0500 |
198 | + | +++ b/qblood/progs/items.qc Sat Jan 10 03:00:19 2015 +0000 |
199 | @@ -1439,6 +1439,7 @@ | |
200 | ||
201 | void() precache_flaregun = | |
202 | { | |
203 | + precache_model("models/weapons/objects/muzzle_flare.spr32"); | |
204 | precache_model("models/weapons/v_flare.psk"); | |
205 | precache_model("models/weapons/g_flare.md3"); | |
206 | precache_model("models/weapons/ga_flare.psk"); // akimbo model | |
207 | @@ -1659,6 +1660,7 @@ | |
208 | ||
209 | void() precache_napalmlauncher = | |
210 | { | |
211 | + precache_model("models/weapons/objects/muzzle_napalm_2.spr32"); | |
212 | precache_model("models/weapons/v_napalm.psk"); | |
213 | precache_model("models/weapons/ga_napalm.psk"); | |
214 | precache_model("models/weapons/g_napalm.md3"); | |
215 | diff -r 424c0d946ec9 qblood/progs/player.qc | |
216 | --- a/qblood/progs/player.qc Thu May 09 17:12:34 2013 +0200 | |
217 | - | +++ b/qblood/progs/player.qc Fri Jul 26 23:46:44 2013 -0500 |
217 | + | +++ b/qblood/progs/player.qc Sat Jan 10 03:00:19 2015 +0000 |
218 | @@ -25,6 +25,8 @@ | |
219 | void(float cloneCorpse) respawn; | |
220 | void(entity ent) CloneCorpse; | |
221 | void() Player_Idle; | |
222 | +void() GibPlayerCorpse; | |
223 | +void() FadeAway; | |
224 | ||
225 | /* | |
226 | ============================================================================== | |
227 | @@ -60,9 +62,10 @@ | |
228 | // so that attackers will have the time to stop firing | |
229 | player.takedamage = DAMAGE_NO; | |
230 | ||
231 | - player.t_length = time + 15; // the effect will last 15 sec | |
232 | + player.t_length = time + 5; // the effect will last 5 sec | |
233 | sound(player, CHAN_VOICE, "thevoice/vo15.wav", 1, ATTN_NONE); | |
234 | centerprint(player, "YOU ARE ON THE BRINK OF DEATH!!"); | |
235 | + player.oldenemy = attacker; | |
236 | // If there's a real attacker (not a BOD triggered by cheat code) | |
237 | if (attacker != world) | |
238 | centerprint(attacker, "FINISH HIM!!"); | |
239 | @@ -70,6 +73,7 @@ | |
240 | ||
241 | void() Player_LiveAgain = | |
242 | { | |
243 | + self.takedamage = DAMAGE_AIM; | |
244 | sound(self, CHAN_VOICE, "player/taunts/t1010.wav", 1, ATTN_NORM); // I live ... again! | |
245 | Player_Idle(); | |
246 | W_DrawWeapon(self.weapon); | |
247 | @@ -477,6 +481,7 @@ | |
248 | { | |
249 | self.nextthink = -1; | |
250 | GibPlayer(); | |
251 | + self.health = 0; | |
252 | return; | |
253 | } | |
254 | ||
255 | @@ -488,33 +493,47 @@ | |
256 | // If the player was on the Brink Of Death | |
257 | if (self.player_state >= PS_BOD_FALL && self.player_state <= PS_BOD_SWAY) | |
258 | { | |
259 | +#if 0 | |
260 | // If the head is removed in the process | |
261 | if (self.health < -10) | |
262 | { | |
263 | +#endif | |
264 | // The player entity will be the head, so we must | |
265 | // create a new entity for the corpse | |
266 | player_head = self; | |
267 | self = spawn(); | |
268 | setmodel(self, player_head.model); | |
269 | setorigin(self, player_head.origin); | |
270 | - setsize(self, player_head.mins, player_head.maxs); | |
271 | + setsize(self, '-16 -16 -20', '16 16 -15'); | |
272 | self.angles = player_head.angles; | |
273 | self.frame = player_head.frame; | |
274 | self.skin = player_head.skin; | |
275 | self.colormap = player_head.colormap; | |
276 | - self.movetype = player_head.movetype; | |
277 | + self.movetype = MOVETYPE_TOSS; | |
278 | self.velocity = player_head.velocity; | |
279 | self.player_state = PS_HEADLESS_DEATH; | |
280 | + self.classname = "corpse"; | |
281 | + self.health = 100; | |
282 | + self.th_die = GibPlayerCorpse; | |
283 | + self.solid = SOLID_BBOX; | |
284 | + self.takedamage = DAMAGE_AIM; | |
285 | + self.reset = SUB_Remove; | |
286 | + self.think = player_head.think; | |
287 | + self.nextthink = player_head.nextthink; | |
288 | ||
289 | self = player_head; | |
290 | self.deadflag = DEAD_DEAD; | |
291 | ThrowHead("progs/h_player.mdl", self.health); | |
292 | +#if 0 | |
293 | } | |
294 | else | |
295 | self.player_state = PS_BOD_DEATH; | |
296 | +#endif | |
297 | } | |
298 | else | |
299 | self.player_state = PS_DEATH; | |
300 | + if (self.health < 0) | |
301 | + self.health = 0; | |
302 | }; | |
303 | ||
304 | // used by kill command and disconnect command | |
305 | @@ -714,7 +733,9 @@ | |
306 | { | |
307 | if (self.frame == PLAYER_DEATH_HEADLESS_END) | |
308 | { | |
309 | - self.think = SUB_Remove; | |
310 | + self.nextthink = time + 30; | |
311 | + self.think = FadeAway; | |
312 | + self.oldorigin = self.origin; | |
313 | return; | |
314 | } | |
315 | ||
316 | diff -r 424c0d946ec9 qblood/progs/w_bomb.qc | |
317 | --- a/qblood/progs/w_bomb.qc Thu May 09 17:12:34 2013 +0200 | |
318 | - | +++ b/qblood/progs/w_bomb.qc Fri Jul 26 23:46:44 2013 -0500 |
318 | + | +++ b/qblood/progs/w_bomb.qc Sat Jan 10 03:00:19 2015 +0000 |
319 | @@ -113,6 +113,8 @@ | |
320 | // Don't let grenade explode twice. | |
321 | self.takedamage = DAMAGE_NO; | |
322 | ||
323 | + self.owner = self.enemy; | |
324 | + | |
325 | if (self.netname == "Napalm Ball") | |
326 | { | |
327 | local float radius, damage, burn; | |
328 | diff -r 424c0d946ec9 qblood/progs/w_napalm.qc | |
329 | --- a/qblood/progs/w_napalm.qc Thu May 09 17:12:34 2013 +0200 | |
330 | - | +++ b/qblood/progs/w_napalm.qc Fri Jul 26 23:46:44 2013 -0500 |
330 | + | +++ b/qblood/progs/w_napalm.qc Sat Jan 10 03:00:19 2015 +0000 |
331 | @@ -242,6 +242,8 @@ | |
332 | newmis.reset = SUB_Remove; | |
333 | } | |
334 | muzzleflash(RIGHT); | |
335 | + if (self.owner.items & IT_GUNS_AKIMBO) | |
336 | + muzzleflash(LEFT); | |
337 | if (!(self.owner.flags & FL_INFINATE_AMMO)) | |
338 | self.owner.currentammo = self.owner.ammo_rockets; | |
339 | setorigin(newmis, W_Origin() + v_forward * 18 + v_right * 3 + v_up * -8); | |
340 | diff -r 424c0d946ec9 qblood/progs/w_remote_tnt.qc | |
341 | --- a/qblood/progs/w_remote_tnt.qc Thu May 09 17:12:34 2013 +0200 | |
342 | - | +++ b/qblood/progs/w_remote_tnt.qc Fri Jul 26 23:46:44 2013 -0500 |
342 | + | +++ b/qblood/progs/w_remote_tnt.qc Sat Jan 10 03:00:19 2015 +0000 |
343 | @@ -60,7 +60,7 @@ | |
344 | { | |
345 | if (self.button0) | |
346 | { | |
347 | - if (self.weaponentity.tnt_type) // We only have the remote | |
348 | + if (self.weaponentity.remote_type) // We only have the remote | |
349 | { | |
350 | self.button0 = 0; | |
351 | sound(self, CHAN_WEAPON, "weapons/tnt/remfire.wav", 1, ATTN_NORM); | |
352 | @@ -85,9 +85,9 @@ | |
353 | ShowThrowMeter(); | |
354 | } | |
355 | } | |
356 | - else if (self.button3)// Altfire | |
357 | + else if (self.button3 && self.currentammo > 0)// Altfire | |
358 | { | |
359 | - if (self.weaponentity.tnt_type) // If we only have a remote, draw another bomb | |
360 | + if (self.weaponentity.remote_type) // If we only have a remote, draw another bomb | |
361 | { | |
362 | self.weaponentity.anim_type = HALF_DRAW; | |
363 | self.weaponentity.attack_finished = time + REMOTE_DRAW_TIME; | |
364 | @@ -98,7 +98,7 @@ | |
365 | self.weaponentity.charge = 0; | |
366 | self.weaponentity.attack_finished = time + REMOTE_DROP_TIME; | |
367 | self.weaponentity.anim_type = IDLE_WITH_REMOTE; | |
368 | - self.weaponentity.tnt_type = REMOTE_ONLY; | |
369 | + self.weaponentity.remote_type = REMOTE_ONLY; | |
370 | self.player_state = PS_FIRE; | |
371 | Bomb_Fire(); | |
372 | Bomb_Uncharge(); | |
373 | @@ -122,9 +122,16 @@ | |
374 | Remote_UpdateView(); | |
375 | self.weaponentity.attack_finished = time + REMOTE_DRAW_TIME; | |
376 | self.player_state = PS_DRAW; | |
377 | - self.weaponentity.tnt_type = REMOTE_AND_BOMB; | |
378 | - self.weaponentity.anim_type = DRAW; | |
379 | - self.weaponentity.frame = REMOTE_DRAW_START; | |
380 | + if (self.weaponentity.remote_type) | |
381 | + { | |
382 | + self.weaponentity.anim_type = IDLE_WITH_REMOTE; | |
383 | + self.weaponentity.frame = REMOTE_THROW_END; | |
384 | + } | |
385 | + else | |
386 | + { | |
387 | + self.weaponentity.anim_type = DRAW; | |
388 | + self.weaponentity.frame = REMOTE_DRAW_START; | |
389 | + } | |
390 | self.weaponentity.skin = 1; | |
391 | self.weaponentity.nextthink = time; | |
392 | self.weaponentity.think = remote_animate; | |
393 | @@ -140,7 +147,7 @@ | |
394 | void() Remote_Holster = | |
395 | { | |
396 | self.weaponentity.attack_finished = time + REMOTE_HOLSTER_TIME; | |
397 | - if (self.weaponentity.tnt_type) //Only holding a remote | |
398 | + if (self.weaponentity.remote_type) //Only holding a remote | |
399 | self.weaponentity.anim_type = HALF_HOLSTER; | |
400 | else | |
401 | self.weaponentity.anim_type = HOLSTER; | |
402 | @@ -173,7 +180,7 @@ | |
403 | ||
404 | //self.weaponentity.attack_finished = time + 0.5; // don't throw instantly after detonating. | |
405 | self.owner.button0 = 0; | |
406 | - self.weaponentity.tnt_type = REMOTE_AND_BOMB; | |
407 | + self.weaponentity.remote_type = REMOTE_AND_BOMB; | |
408 | self.weaponentity.charge = 0; | |
409 | ||
410 | self.weaponentity.nextthink = time; | |
411 | @@ -306,13 +313,13 @@ | |
412 | else // ammo_in_chamber == 1 | |
413 | self.weaponentity.skin = self.weaponentity.skin - 1; | |
414 | ||
415 | - if (self.owner.button0 && !self.weaponentity.tnt_type) // we have a bomb in hand and holding fire | |
416 | + if (self.owner.button0 && !self.weaponentity.remote_type) // we have a bomb in hand and holding fire | |
417 | { | |
418 | if (self.weaponentity.charge < 20) | |
419 | self.weaponentity.charge = self.weaponentity.charge + 1; | |
420 | ShowThrowMeter(); | |
421 | } | |
422 | - else if (self.weaponentity.charge && !self.weaponentity.tnt_type) | |
423 | + else if (self.weaponentity.charge && !self.weaponentity.remote_type) | |
424 | { | |
425 | self.weaponentity.anim_type = THROW; | |
426 | self.weaponentity.attack_finished = time + REMOTE_THROW_TIME - 0.4; //- 0.4 so we can det it nearly quickly. | |
427 | @@ -326,7 +333,7 @@ | |
428 | { | |
429 | Bomb_Fire(); | |
430 | Bomb_Uncharge(); | |
431 | - self.weaponentity.tnt_type = REMOTE_ONLY; | |
432 | + self.weaponentity.remote_type = REMOTE_ONLY; | |
433 | } | |
434 | else if (self.weaponentity.frame == REMOTE_THROW_END) | |
435 | self.weaponentity.anim_type = IDLE_WITH_REMOTE; | |
436 | diff -r 424c0d946ec9 qblood/progs/w_shotgun.qc | |
437 | --- a/qblood/progs/w_shotgun.qc Thu May 09 17:12:34 2013 +0200 | |
438 | - | +++ b/qblood/progs/w_shotgun.qc Fri Jul 26 23:46:44 2013 -0500 |
438 | + | +++ b/qblood/progs/w_shotgun.qc Sat Jan 10 03:00:19 2015 +0000 |
439 | @@ -436,12 +436,12 @@ | |
440 | { | |
441 | if (self.weaponentity.frame == SHOTGUN_AKIMBO_FIRE_START) | |
442 | { | |
443 | - muzzleflash(LEFT); | |
444 | + muzzleflash(RIGHT); | |
445 | Shotgun_Fire(); | |
446 | } | |
447 | else if (self.weaponentity.frame == SHOTGUN_AKIMBO_FIRE_START + 2) | |
448 | { | |
449 | - muzzleflash(RIGHT); | |
450 | + muzzleflash(LEFT); | |
451 | Shotgun_Fire(); | |
452 | } | |
453 | else if (self.weaponentity.frame == SHOTGUN_AKIMBO_FIRE_END) | |
454 | @@ -472,7 +472,9 @@ | |
455 | { | |
456 | if (self.weaponentity.frame == SHOTGUN_AKIMBO_ALTFIRE_START) | |
457 | { | |
458 | + muzzleflash(RIGHT); | |
459 | Shotgun_Fire(); | |
460 | + muzzleflash(LEFT); | |
461 | Shotgun_Fire(); | |
462 | } | |
463 | else if (self.weaponentity.frame == SHOTGUN_AKIMBO_ALTFIRE_END) | |
464 | diff -r 424c0d946ec9 qblood/progs/weapons.qc | |
465 | --- a/qblood/progs/weapons.qc Thu May 09 17:12:34 2013 +0200 | |
466 | - | +++ b/qblood/progs/weapons.qc Fri Jul 26 23:46:44 2013 -0500 |
466 | + | +++ b/qblood/progs/weapons.qc Sat Jan 10 03:00:19 2015 +0000 |
467 | @@ -103,14 +103,40 @@ | |
468 | ||
469 | local string sprite; | |
470 | ||
471 | + makevectors(self.v_angle); | |
472 | if (self.owner.weapon == IT_FLAREGUN) | |
473 | { | |
474 | ||
475 | + sprite = "models/weapons/objects/muzzle_flare.spr32"; | |
476 | + setmodel(muzzle, sprite); | |
477 | + muzzle.alpha = 0.7; | |
478 | + if (has_akimbo) | |
479 | + { | |
480 | + muzzle.scale = 0.4; | |
481 | + if (hand == RIGHT) | |
482 | + setorigin(muzzle, self.weaponentity.origin + v_up * -15); | |
483 | + } | |
484 | + else | |
485 | + { | |
486 | + muzzle.scale = 0.6; | |
487 | + setorigin(muzzle, self.weaponentity.origin + v_up * -15); | |
488 | + } | |
489 | + muzzle.frame = 0; | |
490 | + muzzle.nextthink = time + 0.1; | |
491 | + muzzle.think = muzzle_animate; | |
492 | + muzzle.th_die = muzzle_remove; | |
493 | } | |
494 | else if (self.owner.weapon == IT_SAWED_OFF) | |
495 | { | |
496 | if (has_akimbo) | |
497 | { | |
498 | + if (hand == LEFT) | |
499 | + setattachment(muzzle, self.weaponentity, "Muzzle_L"); | |
500 | + else | |
501 | + setattachment(muzzle, self.weaponentity, "Muzzle_R"); | |
502 | + setorigin(muzzle, self.weaponentity.origin + v_right * -13 + v_up * -4); | |
503 | + muzzle.scale = 0.65; | |
504 | +#if 0 | |
505 | sprite = "models/weapons/objects/muzzle_shotgun.spr32"; | |
506 | setmodel(muzzle, sprite); | |
507 | muzzle.scale = 0.45; | |
508 | @@ -119,6 +145,7 @@ | |
509 | muzzle.nextthink = time + 0.1; | |
510 | muzzle.think = muzzle_animate; | |
511 | muzzle.th_die = muzzle_remove; | |
512 | +#endif | |
513 | } | |
514 | else | |
515 | { | |
516 | @@ -133,18 +160,19 @@ | |
517 | if (self.weaponentity.ammo_in_chamber == 2) | |
518 | { | |
519 | setattachment(muzzle, self.weaponentity, "Muzzle_L"); | |
520 | - setorigin(muzzle, '0 0 0' + v_right * -10.6); | |
521 | + setorigin(muzzle, self.weaponentity.origin + v_right * -10.6); | |
522 | } | |
523 | else | |
524 | { | |
525 | setattachment(muzzle, self.weaponentity, "Muzzle_R"); | |
526 | - setorigin(muzzle, '0 0 0' + v_right * -10.4); | |
527 | + setorigin(muzzle, self.weaponentity.origin + v_right * -10.4); | |
528 | } | |
529 | muzzle.scale = 0.45; | |
530 | } | |
531 | } | |
532 | sprite = "models/weapons/objects/muzzle_shotgun.spr32"; | |
533 | setmodel(muzzle, sprite); | |
534 | + muzzle.alpha = 0.6; | |
535 | muzzle.frame = 0; | |
536 | muzzle.anim_end = 1; | |
537 | muzzle.nextthink = time + 0.1; | |
538 | - | @@ -845,6 +873,7 @@ |
538 | + | @@ -175,6 +203,7 @@ |
539 | muzzle.think = muzzle_animate; | |
540 | muzzle.th_die = muzzle_remove; | |
541 | } | |
542 | + else remove(muzzle); | |
543 | //FIXME - add other weapons, and fix shotgun | |
544 | }; | |
545 | ||
546 | - | @@ -1065,6 +1094,13 @@ |
546 | + | @@ -845,6 +874,7 @@ |
547 | ||
548 | /* if you only have a pitchfork drawn, you can draw the Napalm Launcher | |
549 | otherwise it won't draw if you run out of ammo of any other weapon */ | |
550 | + if (self.ammo_rockets >= 1) | |
551 | if (self.weapon == IT_PITCHFORK && it & IT_NAPALM_LAUNCHER) | |
552 | return IT_NAPALM_LAUNCHER; | |
553 | ||
554 | @@ -1065,6 +1095,13 @@ | |
555 | { | |
556 | local float am, newWeapon; | |
557 | ||
558 | + if (!self.weapon) | |
559 | + { | |
560 | - | @@ -1201,7 +1237,7 @@ |
560 | + | |
561 | + W_DrawWeapon(IT_PITCHFORK); | |
562 | + return; | |
563 | + } | |
564 | + | |
565 | newWeapon = self.weapon; | |
566 | ||
567 | // Don't let player change weapons while holding lit dynamite. | |
568 | @@ -1201,7 +1238,7 @@ | |
569 | ||
570 | if (!W_AmmoAvailable() && self.weapon) //self.weapon is a check for dropping your weapons such as TNT self-explosion. | |
571 | - | +++ b/qblood/progs/world.qc Fri Jul 26 23:46:44 2013 -0500 |
571 | + | |
572 | - if ((self.player_state != PS_HOLD_FIRE) && (self.weaponentity.tnt_type != REMOTE_ONLY)) | |
573 | + if ((self.player_state != PS_HOLD_FIRE) && (self.weapon != IT_REMOTE_DETONATOR)) | |
574 | { | |
575 | W_SwitchToWeapon(W_BestWeapon()); | |
576 | return; | |
577 | diff -r 424c0d946ec9 qblood/progs/world.qc | |
578 | --- a/qblood/progs/world.qc Thu May 09 17:12:34 2013 +0200 | |
579 | +++ b/qblood/progs/world.qc Sat Jan 10 03:00:19 2015 +0000 | |
580 | @@ -54,6 +54,12 @@ | |
581 | precache_model("models/objects/m_leg.md3"); | |
582 | precache_model("models/objects/m_eyeball.md3"); | |
583 | precache_model("models/objects/m_hand.md3"); | |
584 | + precache_model("models/objects/glass1.md3"); | |
585 | + precache_model("models/objects/glass2.md3"); | |
586 | + precache_model("models/objects/glass3.md3"); | |
587 | + precache_model("models/objects/rubble1.md3"); | |
588 | + precache_model("models/objects/rubble2.md3"); | |
589 | + precache_model("models/objects/rubble3.md3"); | |
590 | ||
591 | precache_model("progs/s_explod.spr"); // napalm sprite explosion | |
592 | }; | |
593 | @@ -167,6 +173,7 @@ | |
594 | precache_sound("thevoice/vo42.wav"); | |
595 | precache_sound("thevoice/vo43.wav"); | |
596 | precache_sound("thevoice/vo44.wav"); | |
597 | + precache_sound("thevoice/vo6.wav"); | |
598 | precache_sound("thevoice/vo7.wav"); | |
599 | precache_sound("thevoice/vo8.wav"); // Hamburger | |
600 | precache_sound("thevoice/vo9.wav"); | |
601 | @@ -295,6 +302,7 @@ | |
602 | ||
603 | // Create our own cvars as soon as possible | |
604 | registercvar("g_flashyEffects", "0"); | |
605 | + registercvar("g_instabrink", "0"); | |
606 | registercvar("g_lockTeams", "0"); | |
607 | registercvar("g_warmup", "0"); | |
608 | registercvar("g_weaponStay", "0"); |