1 $frame die1 die2 draw duck duckwalk duckjump duckidle idle
2 $frame jump pain1 pain2 shoot taunt run runbackwards
3 $frame strafeleft straferight dead1 dead2 forwardright
4 $frame forwardleft backright backleft
6 // changes by LordHavoc on 03/29/04 and 03/30/04 at Vermeulen's request
7 // merged player_run and player_stand to player_anim
8 // added death animations to player_anim
9 // can now spawn thrown weapons from anywhere, not just from players
10 // thrown weapons now fade out after 20 seconds
11 // created PlayerGib function
12 // PlayerDie no longer uses hitloc or damage
13 // PlayerDie now supports dying animations as well as gibbing
14 // cleaned up PlayerDie a lot
22 self.angles = oldself.angles;
23 self.avelocity = oldself.avelocity;
24 self.classname = "body";
25 self.damageforcescale = oldself.damageforcescale;
26 self.effects = oldself.effects;
27 self.event_damage = oldself.event_damage;
28 self.frame = oldself.frame;
29 self.health = oldself.health;
30 self.model = oldself.model;
31 self.modelindex = oldself.modelindex;
32 self.movetype = oldself.movetype;
33 self.nextthink = oldself.nextthink;
34 self.norespawn = TRUE;
35 self.skin = oldself.skin;
36 self.solid = oldself.solid;
37 self.takedamage = oldself.takedamage;
38 self.think = oldself.think;
39 self.velocity = oldself.velocity;
40 self.weapon = oldself.weapon;
41 setorigin(self, oldself.origin);
42 setsize(self, '-16 -16 -24', '16 16 5');
46 //Begin change by Supajoe on 11:44 PM EST 11/16/03 (Subject: Player animations)
47 // LordHavoc: lots of changes
48 void player_anim (void)
50 if (self.deadflag != DEAD_NO)
52 if (time > self.dead_time)
53 self.frame = self.dead_frame;
55 self.frame = self.die_frame;
56 SUB_SetFade (self, time + 12 + random () * 4);
59 /* LordHavoc: crouching was canceled
63 if (self.movement_x * self.movement_x + self.movement_y * self.movement_y > 20)
64 self.frame = $duckwalk;
66 self.frame = $duckidle;
70 if ((self.movement_x * self.movement_x + self.movement_y * self.movement_y) > 20)
72 if (self.movement_x > 0 && self.movement_y == 0)
74 else if (self.movement_x < 0 && self.movement_y == 0)
75 self.frame = $runbackwards;
76 else if (self.movement_x == 0 && self.movement_y > 0)
77 self.frame = $straferight;
78 else if (self.movement_x == 0 && self.movement_y < 0)
79 self.frame = $strafeleft;
80 else if (self.movement_x > 0 && self.movement_y > 0)
81 self.frame = $forwardright;
82 else if (self.movement_x > 0 && self.movement_y < 0)
83 self.frame = $forwardleft;
84 else if (self.movement_x < 0 && self.movement_y > 0)
85 self.frame = $backright;
86 else if (self.movement_x < 0 && self.movement_y < 0)
87 self.frame = $backleft;
91 else if (self.pain_finished > time)
92 self.frame = self.pain_frame;
93 else if (self.attack_finished > time)
98 //End change by Supajoe on 11:44 PM EST 11/16/03 (Subject: Player animations)
100 void SpawnThrownWeapon (vector org, float w)
102 local entity oldself;
110 setorigin(self, org);
111 self.velocity = randomvec() * 100 + '0 0 200';
113 SUB_SetFade(self, time + 20);
117 else if (w == IT_SHOTGUN)
119 else if (w == IT_GRENADE_LAUNCHER)
120 weapon_grenadelauncher ();
121 else if (w == IT_ELECTRO)
123 else if (w == IT_CRYLINK)
125 else if (w == IT_NEX)
127 else if (w == IT_HAGAR)
129 else //if (w == IT_ROCKET_LAUNCHER)
130 weapon_rocketlauncher ();
135 void PlayerCorpseDamage (vector hitloc, float damage, entity inflictor, entity attacker, float deathtype)
137 te_blood (hitloc, '0 0 20', damage);
138 // damage resistance (ignore most of the damage from a bullet or similar)
139 damage = max(damage - 5, 1);
140 self.health = self.health - damage;
141 self.dmg_take = self.dmg_take + damage;
142 self.dmg_inflictor = inflictor;
143 if (self.health <= -70)
145 // don't use any animations as a gib
149 // view just above the floor
150 self.view_ofs = '0 0 4';
152 te_bloodshower (self.origin + self.mins, self.origin + self.maxs, 600, 500);
154 TossGib (world, "models/gibs/gib1.mdl", self.origin, self.velocity);
155 TossGib (world, "models/gibs/gib2.mdl", self.origin, self.velocity);
156 TossGib (world, "models/gibs/gib3.mdl", self.origin, self.velocity);
157 TossGib (world, "models/gibs/gib4.mdl", self.origin, self.velocity);
158 TossGib (world, "models/gibs/bloodyskull.md3", self.origin, self.velocity);
159 TossGib (self, "models/gibs/eye.md3", self.origin, self.velocity);
163 void PlayerDamage (vector hitloc, float damage, entity inflictor, entity attacker, float deathtype)
165 te_blood (hitloc, '0 0 20', damage);
166 if (self.pain_finished < time) //Don't switch pain sequences like crazy
169 self.pain_frame = $pain1;
171 self.pain_frame = $pain2;
172 self.pain_finished = time + 0.5; //Supajoe
174 self.health = self.health - damage;
175 self.dmg_take = self.dmg_take + damage;
176 self.dmg_inflictor = inflictor;
177 if (self.health <= 0)
179 // print an obituary message
180 Obituary (attacker, self, deathtype);
181 // make the corpse upright (not tilted)
185 self.avelocity = '0 0 0';
186 // no weapon when dead
187 self.weaponmodel = "";
188 // view from the floor
189 self.view_ofs = '0 0 -8';
191 self.movetype = MOVETYPE_TOSS;
193 self.solid = SOLID_CORPSE;
194 // don't stick to the floor
195 self.flags = self.flags - (self.flags & FL_ONGROUND);
197 self.deadflag = DEAD_DYING;
198 // when to allow respawn
199 self.death_time = time + 2;
200 // when to switch to the dead_frame
201 self.dead_time = time + 2;
204 self.die_frame = $die1;
205 self.dead_frame = $dead1;
209 self.die_frame = $die2;
210 self.dead_frame = $dead2;
212 // start the animation
215 SpawnThrownWeapon (self.origin + (self.mins + self.maxs) * 0.5, self.weapon);
216 // set damage function to corpse damage
217 self.event_damage = PlayerCorpseDamage;
218 // call the corpse damage function just in case it wants to gib
219 self.event_damage(hitloc, 0, inflictor, attacker, deathtype);