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"); |