fangflecked-old

old project. ive since repurposed the name
git clone git://moonbender.net/fangflecked-old
Log | Files | Refs | README

player.qc (5698B)


      1 //
      2 //	Player.qc - Various stuff done for the player, including per-frame functions like PlayerPreThink and PlayerPostThink, also client specific stuff like PutClientInServer etc.
      3 //
      4 
      5 void() PlayerJump =
      6 {
      7 	if (!(self.flags & FL_ONGROUND))
      8 		return;
      9 
     10 	if ( !(self.flags & FL_JUMPRELEASED) )
     11 		return;
     12 			
     13 	self.flags = self.flags - (self.flags & FL_JUMPRELEASED);
     14 	sound(self, CHAN_VOICE, "sounds/ouch.wav", 1, 1.75);
     15 	self.button2 = 0;
     16 }
     17 
     18 void() CheckImpulses =
     19 {
     20 	if(self.impulse == 1)
     21 		SwitchWeapon(IT_PISTOL);
     22 	else if(self.impulse == 2)
     23 		SwitchWeapon(IT_MG);
     24 	
     25 	self.impulse = 0;
     26 }
     27 
     28 void() PlayerPreThink =
     29 {
     30 	if(self.isspec != 0)
     31 	{
     32 		if(self.button0 && time > self.ready)
     33 		{
     34 			self.aiment = find(self.aiment, classname, "player");
     35 			if(self.aiment != world)
     36 			{
     37 				sprint(self, PRINT_HIGH, "Now spectating ");
     38 				sprint(self, PRINT_HIGH, self.aiment.netname);
     39 				sprint(self, PRINT_HIGH, "\n");
     40 				
     41 				self.solid = SOLID_NOT;
     42 				self.movetype = MOVETYPE_NONE;
     43 			}
     44 			else
     45 			{
     46 				sprint(self, PRINT_HIGH, "Freefly spectate\n");
     47 				self.movetype = MOVETYPE_FLY;
     48 			}
     49 			self.ready = time + 0.5;
     50 		}
     51 		if(self.aiment != world)
     52 		{
     53 			self.origin = self.aiment.origin;
     54 			self.angles = self.aiment.v_angle;
     55 			self.velocity = self.aiment.velocity;
     56 			self.fixangle = TRUE;
     57 		}
     58 		return;
     59 	}
     60 	
     61 	CheckImpulses();
     62 	
     63 	if(self.button0)
     64 	{
     65 		FireWeapon();
     66 	}
     67 	else
     68 	{
     69 		if(time > self.ready)
     70 		{
     71 			self.readystate = READY;
     72 		}
     73 		else if(self.readystate == FIRING_SEMI)
     74 		{
     75 			self.readystate = FIRING;
     76 		}
     77 	}
     78 	if(self.button2)
     79 	{
     80 		PlayerJump ();
     81 	}
     82 	else
     83 		self.flags = self.flags | FL_JUMPRELEASED;
     84 };
     85 
     86 void() PlayerPostThink =
     87 {
     88 	if(self.isspec)
     89 		return;
     90 	
     91 	//landsound
     92 	if((self.oldvelocity_z < -10) && (self.flags & FL_ONGROUND))
     93 	{
     94 		if(self.oldvelocity_z < -270)
     95 			sound(self, CHAN_BODY, "sounds/PHfootstep2.wav", 1, 1.75);
     96 		self.lastsound_time = time - 0.15;
     97 	}
     98 	
     99 	//footsteps
    100 	if((vlen(self.velocity) > 315) &&( time - self.lastsound_time > 0.3) && (self.flags & FL_ONGROUND))
    101 	{
    102 		local float movelen = vlen(input_movevalues);
    103 		if(movelen > 300)
    104 		{
    105 			local float ran = random();
    106 			if(ran > 0.5)
    107 				sound(self, CHAN_BODY, "sounds/PHfootstep1.wav", 0.01, 2.5);
    108 			else
    109 				sound(self, CHAN_BODY, "sounds/PHfootstep1.wav", 0.01, 2.5);
    110 			self.lastsound_time = time;
    111 		}
    112 	}
    113 	
    114 	self.oldvelocity = self.velocity;
    115 };
    116 
    117 void() ClientKill =
    118 {
    119 };
    120 
    121 //called when a client connects to the server
    122 void(optional float csqcactive) ClientConnect =
    123 {
    124 	bprint(PRINT_HIGH, self.netname); //print player name
    125 	bprint(PRINT_HIGH, " connected.\n");
    126 	
    127 	if (!world.strack)
    128 		return;
    129 
    130 	//TODO: Make it so you don't need to add 
    131 	//"sound/.." to the beginning of the 
    132 	//strack string
    133 	sound(self, CHAN_AUTO, world.strack, 0.4, ATTN_NONE);
    134 };
    135 
    136 void(entity attacker, float damage) PlayerPain =
    137 {
    138 	local float rs;
    139 	
    140 	if (damage > 40)
    141 	{
    142 		sound (self, CHAN_VOICE, "sounds/hurtbad.wav", 1, ATTN_NORM);
    143 	}
    144 	else
    145 	{	
    146 	rs = rint((random() * 2) + 1);
    147 	
    148 	if (rs == 1)
    149 		sound (self, CHAN_VOICE, "sounds/ouch.wav", 1, ATTN_NORM);
    150 	else
    151 		sound (self, CHAN_VOICE, "sounds/ouch2.wav", 1, ATTN_NORM);
    152 	}	
    153 }
    154 
    155 void() PlayerDie =
    156 { 
    157 //	self.view_ofs = '0 0 -8';
    158 //	self.deadflag = DEAD_DYING;
    159 	self.solid = SOLID_NOT;
    160 	self.flags = self.flags - (self.flags & FL_ONGROUND);
    161 	self.movetype = MOVETYPE_TOSS;
    162 	sound(self, CHAN_VOICE, "sounds/death.wav", 1, ATTN_NONE);
    163 	
    164 	WriteByte(MSG_MULTICAST, SVC_CGAMEPACKET);
    165 	WriteByte(MSG_MULTICAST, EVENT_PLAYERDEATH);
    166 	multicast(self.origin, MULTICAST_ONE);
    167 	
    168 	self.nextthink = -1;
    169 //	self.deadflag = DEAD_DEAD;
    170 //	bprint(PRINT_HIGH, "PlayerDie called\n");
    171 }
    172 
    173 void() PlayerSpawn =
    174 {
    175 	local entity spawnpoint;
    176 	spawnpoint = find(world, classname, "info_player_start");
    177 	
    178 	self.isspec = FALSE;
    179 	self.classname = "player";
    180 	self.solid = SOLID_SLIDEBOX;
    181 	setmodel(self, "models/pmodel.iqm");
    182 	self.movetype = MOVETYPE_WALK;
    183 	self.health = 100;
    184 	self.takedamage = DAMAGE_AIM;
    185 	self.origin = spawnpoint.origin + [0,0,1];
    186 	self.fixangle = TRUE;
    187 	setsize(self, [-16, -16, -24], [16, 16, 32]);
    188 //	self.view_ofs = '0 0 22';
    189 	self.ammo_pistol = 50;
    190 	self.items = IT_PISTOL;
    191 	self.ready = 0;
    192 	self.readystate = READY;
    193 	self.mapend = 0;
    194 	SwitchWeapon(IT_PISTOL);
    195 	stuffcmd(self, "cl_gunx 8;cl_guny 16;cl_gunz 25\n");
    196 	
    197 //	self.attack_finished = time;
    198 	self.th_die = PlayerDie;
    199 	self.th_pain = PlayerPain;
    200 	self.deadflag = DEAD_NO;
    201 };
    202 
    203 void() SpectatorSpawn =
    204 {
    205 	local entity spawnpoint;
    206 	spawnpoint = find(world, classname, "info_player_start");
    207 	
    208 	self.isspec = TRUE;
    209 	self.classname = "spectator";
    210 	self.solid = SOLID_NOT;
    211 	setmodel(self, "");
    212 	self.movetype = MOVETYPE_FLY;
    213 	self.origin = spawnpoint.origin + [0,0,1];
    214 	self.fixangle = TRUE;
    215 	setsize(self, [-16, -16, -24], [16, 16, 32]);
    216 	self.view_ofs = '0 0 22';
    217 	self.aiment = world;
    218 };
    219 
    220 //called when a client loads a map
    221 void() PutClientInServer =
    222 {
    223 	stuffcmd(self, "promptjoin\n");
    224 	SpectatorSpawn();
    225 };
    226 
    227 //called when client disconnects from the server
    228 void() ClientDisconnect =
    229 {
    230 	bprint(PRINT_HIGH, self.netname);
    231 	bprint(PRINT_HIGH, " has left the game.\n");
    232 	remove(self);
    233 };
    234 
    235 
    236 void() SetNewParms =
    237 {
    238 };
    239 
    240 void() SetChangeParms =
    241 {
    242 };
    243 
    244 void() info_player_start =
    245 {
    246 	
    247 };
    248 
    249 void(string com) SV_ParseClientCommand =
    250 {
    251 	if(com == "joingame")
    252 	{
    253 		if(self.isspec)
    254 		{
    255 			bprint(PRINT_HIGH, self.netname);
    256 			bprint(PRINT_HIGH, " has joined the game.\n");
    257 			PlayerSpawn();
    258 		}
    259 		else
    260 			sprint(self, PRINT_HIGH, "You're already in game!\n");
    261 	}
    262 	else if(com == "specgame")
    263 	{
    264 		if(self.isspec)
    265 			return;
    266 		else
    267 		{
    268 			SpectatorSpawn();
    269 			bprint(PRINT_HIGH, self.netname); //print player name
    270 			bprint(PRINT_HIGH, " has joined the spectators.\n");
    271 		}
    272 	}
    273 };
    274 
    275 void() SV_RunClientCommand =
    276 {
    277 	runstandardplayerphysics(self);
    278 }