mirror of
https://github.com/id-Software/quake-rerelease-qc.git
synced 2026-03-19 16:39:51 +01:00
Initial commit of Update 3 QuakeC
This commit is contained in:
410
quakec_rogue/pendulum.qc
Normal file
410
quakec_rogue/pendulum.qc
Normal file
@@ -0,0 +1,410 @@
|
||||
/* Copyright (C) 1996-2022 id Software LLC
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 2 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program; if not, write to the Free Software
|
||||
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
|
||||
See file, 'COPYING', for details.
|
||||
*/
|
||||
|
||||
// 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;
|
||||
}
|
||||
};
|
||||
Reference in New Issue
Block a user