// pendulum.qc $frame frame1 frame2 frame3 frame4 frame5 frame6 frame7 $frame frame8 frame9 frame10 frame11 frame12 frame13 float impactVelocity; //float pend_frame; float PEND_X = 1; float PEND_Y = 2; float PEND_Z = 4; float PEND_TRG = 8; /* void() pend_stand =[ $frame4, pend_stand ] {}; */ void() pend_swing1 =[ $frame1, pend_swing2 ] { //// pend_frame = 1; // 0 -148 88 (center) W 56, H 80 (28,40) if( self.spawnflags & PEND_Y) setsize ( self, '-8 -176 48', '8 -120 128' ); else if ( self.spawnflags & PEND_X ) setsize ( self, '-176 -8 48', '-120 8 128' ); self.nextthink = time + 0.17; impactVelocity = 1; }; void() pend_swing2 =[ $frame2, pend_swing3 ] { //// pend_frame = pend_frame + 1; // 0 -142 50 (center) W 60, H 76 (30, 38) if( self.spawnflags & PEND_Y) setsize ( self, '-8 -172 12', '8 -112 88' ); else if ( self.spawnflags & PEND_X ) setsize ( self, '-172 -8 12', '-112 8 88' ); self.nextthink = time + 0.15; }; void() pend_swing3 =[ $frame3, pend_swing4 ] { //// pend_frame = pend_frame + 1; // 0 -128 14 (center) W 64, H 72 (32, 36) if( self.spawnflags & PEND_Y) setsize ( self, '-8 -160 -22', '8 -96 50' ); else if ( self.spawnflags & PEND_X ) setsize ( self, '-160 -8 -22', '-96 8 50' ); self.nextthink = time + 0.13; }; void() pend_swing4 =[ $frame4, pend_swing5 ] { sound ( self, CHAN_AUTO, "pendulum/swing.wav", 0.5, ATTN_NORM); //// pend_frame = pend_frame + 1; // 0 -104 -17 (center) W 68, H 68 (34, 34) if( self.spawnflags & PEND_Y) setsize ( self, '-8 -138 -51', '8 -70 17' ); else if ( self.spawnflags & PEND_X ) setsize ( self, '-138 -8 -51', '-70 8 17' ); self.nextthink = time + 0.11; }; void() pend_swing5 =[ $frame5, pend_swing6 ] { // pend_frame = pend_frame + 1; // 0 -74 40 (center) W 72, H 64 (36, 32) if( self.spawnflags & PEND_Y) setsize ( self, '-8 -110 -72', '8 -38 -8' ); else if ( self.spawnflags & PEND_X ) setsize ( self, '-110 -8 -72', '-38 8 -8' ); self.nextthink = time + 0.09; }; void() pend_swing6 =[ $frame6, pend_swing7 ] { // pend_frame = pend_frame + 1; // 0 -38 53 (center) W 76, H 60 (38, 30) if( self.spawnflags & PEND_Y) setsize ( self, '-8 -76 -83', '8 0 -23' ); else if ( self.spawnflags & PEND_X ) setsize ( self, '-76 -8 -83', '0 8 -23' ); self.nextthink = time + 0.07; }; void() pend_swing7 =[ $frame7, pend_swing8 ] { // pend_frame = pend_frame + 1; // 0 0 60 (center) W 80, H 56 (40, 28) if( self.spawnflags & PEND_Y) setsize ( self, '-8 -40 -88', '8 40 -32' ); else if ( self.spawnflags & PEND_X ) setsize ( self, '-40 -8 -88', '40 8 -32' ); self.nextthink = time + 0.05; }; void() pend_swing8 =[ $frame8, pend_swing9 ] { // pend_frame = pend_frame + 1; // 0 38 53 (center) W 76, H 60 (38, 30) if( self.spawnflags & PEND_Y) setsize ( self, '-8 0 -83', '8 76 -23' ); else if ( self.spawnflags & PEND_X ) setsize ( self, '0 -8 -83', '76 8 -23' ); self.nextthink = time + 0.07; }; void() pend_swing9 =[ $frame9, pend_swing10 ] { // pend_frame = pend_frame + 1; // 0 74 40 (center) W 72, H 64 (36, 32) if( self.spawnflags & PEND_Y) setsize ( self, '-8 38 -72', '8 100 -8' ); else if ( self.spawnflags & PEND_X ) setsize ( self, '38 -8 -72', '100 8 -8' ); self.nextthink = time + 0.09; }; void() pend_swing10 =[ $frame10, pend_swing11 ] { // pend_frame = pend_frame + 1; // 0 104 17 (center) W 68, H 68 (34, 34) if( self.spawnflags & PEND_Y) setsize ( self, '-8 70 -51', '8 138 17' ); else if ( self.spawnflags & PEND_X ) setsize ( self, '70 -8 -51', '138 8 17' ); self.nextthink = time + 0.11; }; void() pend_swing11 =[ $frame11, pend_swing12 ] { // pend_frame = pend_frame + 1; // 0 128 -14 (center) W 64, H 72 (32, 36) if( self.spawnflags & PEND_Y) setsize ( self, '-8 96 -22', '8 160 50' ); else if ( self.spawnflags & PEND_X ) setsize ( self, '96 -8 -22', '160 8 50' ); self.nextthink = time + 0.13; }; void() pend_swing12 =[ $frame12, pend_swing13 ] { // pend_frame = pend_frame + 1; // 0 142 -50 (center) W 60, H 76 (30, 38) if( self.spawnflags & PEND_Y) setsize ( self, '-8 112 12', '8 172 88' ); else if ( self.spawnflags & PEND_X ) setsize ( self, '112 -8 12', '172 8 88' ); self.nextthink = time + 0.15; }; void() pend_swing13 =[ $frame13, pend_swing14 ] { // pend_frame = pend_frame + 1; // 0 148 -88 (center) W 56, H 80 (28, 40) if( self.spawnflags & PEND_Y) setsize ( self, '-8 120 48', '8 176 128' ); else if ( self.spawnflags & PEND_X ) setsize ( self, '120 -8 48', '176 8 128' ); self.nextthink = time + 0.17; }; void() pend_swing14 =[ $frame13, pend_swing15 ] { // pend_frame = pend_frame + 1; // same frame, same location. no change to bbox. self.nextthink = time + 0.17; }; void() pend_swing15 =[ $frame12, pend_swing16 ] { // pend_frame = pend_frame + 1; // 0 142 -50 (center) W 60, H 76 (30, 38) if( self.spawnflags & PEND_Y) setsize ( self, '-8 112 12', '8 172 88' ); else if ( self.spawnflags & PEND_X ) setsize ( self, '112 -8 12', '172 8 88' ); self.nextthink = time + 0.15; impactVelocity = -1; }; void() pend_swing16 =[ $frame11, pend_swing17 ] { // pend_frame = pend_frame + 1; // 0 128 -14 (center) W 64, H 72 (32, 36) if( self.spawnflags & PEND_Y) setsize ( self, '-8 96 -22', '8 160 50' ); else if ( self.spawnflags & PEND_X ) setsize ( self, '96 -8 -22', '160 8 50' ); self.nextthink = time + 0.13; }; void() pend_swing17 =[ $frame10, pend_swing18 ] { sound ( self, CHAN_AUTO, "pendulum/swing.wav", 0.5, ATTN_NORM); // pend_frame = pend_frame + 1; // 0 104 17 (center) W 68, H 68 (34, 34) if( self.spawnflags & PEND_Y) setsize ( self, '-8 70 -51', '8 138 17' ); else if ( self.spawnflags & PEND_X ) setsize ( self, '70 -8 -51', '138 8 17' ); self.nextthink = time + 0.11; }; void() pend_swing18 =[ $frame9, pend_swing19 ] { // pend_frame = pend_frame + 1; // 0 74 40 (center) W 72, H 64 (36, 32) if( self.spawnflags & PEND_Y) setsize ( self, '-8 38 -72', '8 100 -8' ); else if ( self.spawnflags & PEND_X ) setsize ( self, '38 -8 -72', '100 8 -8' ); self.nextthink = time + 0.09; }; void() pend_swing19 =[ $frame8, pend_swing20 ] { // pend_frame = pend_frame + 1; // 0 38 53 (center) W 76, H 60 (38, 30) if( self.spawnflags & PEND_Y) setsize ( self, '-8 0 -83', '8 76 -23' ); else if ( self.spawnflags & PEND_X ) setsize ( self, '0 -8 -83', '76 8 -23' ); self.nextthink = time + 0.07; }; void() pend_swing20 =[ $frame7, pend_swing21 ] { // pend_frame = pend_frame + 1; // 0 0 60 (center) W 80, H 56 (40, 28) if( self.spawnflags & PEND_Y) setsize ( self, '-8 -40 -88', '8 40 -32' ); else if ( self.spawnflags & PEND_X ) setsize ( self, '-40 -8 -88', '40 8 -32' ); self.nextthink = time + 0.05; }; void() pend_swing21 =[ $frame6, pend_swing22 ] { // pend_frame = pend_frame + 1; // 0 -38 53 (center) W 76, H 60 (38, 30) if( self.spawnflags & PEND_Y) setsize ( self, '-8 -76 -83', '8 0 -23' ); else if ( self.spawnflags & PEND_X ) setsize ( self, '-76 -8 -83', '0 8 -23' ); self.nextthink = time + 0.07; }; void() pend_swing22 =[ $frame5, pend_swing23 ] { // pend_frame = pend_frame + 1; // 0 -74 40 (center) W 72, H 64 (36, 32) if( self.spawnflags & PEND_Y) setsize ( self, '-8 -110 -72', '8 -28 -8' ); else if ( self.spawnflags & PEND_X ) setsize ( self, '-110 -8 -72', '-28 8 -8' ); self.nextthink = time + 0.09; }; void() pend_swing23 =[ $frame4, pend_swing24 ] { // pend_frame = pend_frame + 1; // 0 -104 17 (center) W 68, H 68 (34, 34) if( self.spawnflags & PEND_Y) setsize ( self, '-8 -172 -51', '8 -70 17' ); else if ( self.spawnflags & PEND_X ) setsize ( self, '-172 -8 -51', '-70 8 17' ); self.nextthink = time + 0.11; }; void() pend_swing24 =[ $frame3, pend_swing25 ] { // pend_frame = pend_frame + 1; // 0 -128 -14 (center) W 64, H 72 (32, 36) if( self.spawnflags & PEND_Y) setsize ( self, '-8 -160 -22', '8 -96 50' ); else if ( self.spawnflags & PEND_X ) setsize ( self, '-160 -8 -22', '-96 8 50' ); self.nextthink = time + 0.13; }; void() pend_swing25 =[ $frame2, pend_swing26 ] { // pend_frame = pend_frame + 1; // 0 -142 -50 (center) W 60, H 76 (30, 38) if( self.spawnflags & PEND_Y) setsize ( self, '-8 -172 12', '8 -112 88' ); else if ( self.spawnflags & PEND_X ) setsize ( self, '-172 -8 12', '-112 8 88' ); self.nextthink = time + 0.15; }; void() pend_swing26 =[ $frame1, pend_swing1 ] { // pend_frame = pend_frame + 1; // 0 -148 -88 (center) W 56, H 80 (28,40) if( self.spawnflags & PEND_Y) setsize ( self, '-8 -176 48', '8 -120 128' ); else if ( self.spawnflags & PEND_X ) setsize ( self, '-176 -8 48', '-120 8 128' ); self.nextthink = time + 0.17; }; void() pend_touch = { if (other.health < 1 || other.takedamage == DAMAGE_NO) return; if (self.attack_finished < time) { sound ( self, CHAN_VOICE, "pendulum/hit.wav", 1, ATTN_NORM); self.attack_finished = time + 1; } T_Damage (other, self, self, self.currentammo); // Fling the impactee in the direction the blade was swinging. if (self.spawnflags & PEND_Y) { // other.velocity_y = other.velocity_y - impactVelocity * 250; other.velocity_y = impactVelocity * -250; } else if(self.spawnflags & PEND_X) { // other.velocity_x = other.velocity_x + impactVelocity * 250; other.velocity_x = impactVelocity * 250; } // Fling the impactee up a little bit. // other.velocity_z = other.velocity_z + 200; other.velocity_z = 200; SpawnMeatSpray ( other.origin, other.velocity); }; void() pend_use = { self.nextthink = time + self.delay; self.think = pend_swing1; }; /*QUAKED pendulum (0 .5 .8) (-8 -24 -100) (8 24 100) PEND_X PEND_Y PEND_TRG The Pendulum Values: delay - amount of time (in seconds) before starting swinging. default 1. currentammo - amount of damage for each contact. default 5. Directional Flags: Pendulum swings perpendicular to it's angle. (eg. A pendulum facing east will swing north/south). Default: PEND_Y The pendulum angle is set automatically depending on the PEND_ choice. PEND_X - a pendulum hanging from the ceiling swinging parallel to the X axis. PEND_Y - a pendulum hanging from the ceiling swinging parallel to the Y axis. PEND_TRG - the pendulum must be triggered to start swinging. The delay value still affects the pendulum. */ void() pendulum = { local vector center; precache_model ("progs/pendulum.mdl"); precache_sound ("pendulum/swing.wav"); precache_sound ("pendulum/hit.wav"); setmodel (self, "progs/pendulum.mdl"); if (!self.spawnflags) self.spawnflags = self.spawnflags + PEND_Y; if (self.spawnflags & PEND_Y) { setsize (self, '-8 -24 -100', '8 24 100'); self.angles = '0 0 0'; self.v_angle = '0 0 0'; // if (self.angles_y != 0 ) // self.angles_y = 0; } else if ( self.spawnflags & PEND_X ) { setsize (self, '-24 -8 -100', '24 8 100'); self.angles = '0 270 0'; self.v_angle = '0 270 0'; // if (self.angles_y != 270 ) // self.angles_y = 270; } else error ( "ERROR: Unimplemented Pendulum Type (pendulum.qc)" ); if (!self.currentammo) self.currentammo = 5; if (!self.delay) self.delay = 1; impactVelocity = 0; self.solid = SOLID_TRIGGER; self.takedamage = DAMAGE_NO; self.touch = pend_touch; if (self.spawnflags & PEND_TRG) { self.use = pend_use; } else { self.nextthink = time + self.delay; self.think = pend_swing1; } };