2 void CreatureFrame (void)
7 self = findfloat(world, iscreature, TRUE);
10 if (self.movetype != MOVETYPE_NOCLIP)
14 if (!(self.flags & FL_INWATER))
16 //if (self.watertype == CONTENT_LAVA)
17 // sound (self, CHAN_BODY, "player/inlava.wav", 1, ATTN_NORM);
18 //if (self.watertype == CONTENT_WATER)
19 // sound (self, CHAN_BODY, "player/inh2o.wav", 1, ATTN_NORM);
20 //if (self.watertype == CONTENT_SLIME)
21 // sound (self, CHAN_BODY, "player/slimbrn2.wav", 1, ATTN_NORM);
22 self.flags = self.flags + FL_INWATER;
25 if (self.waterlevel != 3)
27 if(self.air_finished < time + 9)
28 PlayerSound(playersound_gasp, 0);
29 self.air_finished = time + 12;
32 else if (self.air_finished < time)
35 if (self.pain_finished < time)
37 Damage (self, world, world, 5, DEATH_DROWN, self.origin, '0 0 0');
38 self.pain_finished = time + 0.5;
41 if (self.dmgtime < time)
43 self.dmgtime = time + 0.1;
44 if (self.watertype == CONTENT_LAVA)
46 if (self.watersound_finished < time)
48 self.watersound_finished = time + 0.5;
49 sound (self, CHAN_BODY, "player/lava.wav", 1, ATTN_NORM);
51 Damage (self, world, world, 6 * self.waterlevel, DEATH_LAVA, self.origin, '0 0 0');
53 else if (self.watertype == CONTENT_SLIME)
55 if (self.watersound_finished < time)
57 self.watersound_finished = time + 0.5;
58 sound (self, CHAN_BODY, "player/slime.wav", 1, ATTN_NORM);
60 Damage (self, world, world, 2 * self.waterlevel, DEATH_SLIME, self.origin, '0 0 0');
66 if (self.flags & FL_INWATER)
68 // play leave water sound
69 self.flags = self.flags - FL_INWATER;
72 self.air_finished = time + 12;
75 // check for falling damage
78 dm = vlen(self.oldvelocity) - vlen(self.velocity); // dm is now the velocity DECREASE. Velocity INCREASE should never cause a sound.
80 dm = (dm - cvar("g_balance_falldamage_deadminspeed")) * cvar("g_balance_falldamage_factor");
82 dm = min((dm - cvar("g_balance_falldamage_minspeed")) * cvar("g_balance_falldamage_factor"), cvar("g_balance_falldamage_maxdamage"));
84 Damage (self, world, world, dm, DEATH_FALL, self.origin, '0 0 0');
85 else if(vlen(self.velocity) > 100000 && cvar("developer"))
87 dprint(strcat(self.netname, " became too fast, please investigate: ", vtos(self.spawnorigin), "\n"));
88 Damage (self, world, world, 50000, DEATH_SHOOTING_STAR, self.origin, '0 0 0');
95 if (self.flags & FL_ONGROUND)
96 if (vlen(self.velocity) > sv_maxspeed * 0.6)
99 if((time > self.nextstep) || (time < (self.nextstep - 10.0)))
101 local float steprandom;
102 self.nextstep = time + 0.3 + random() * 0.1;
103 steprandom = random() * 6;
105 sound (self, CHAN_BODY, "misc/footstep01.wav", 1, ATTN_NORM);
106 else if (steprandom < 2)
107 sound (self, CHAN_BODY, "misc/footstep02.wav", 1, ATTN_NORM);
108 else if (steprandom < 3)
109 sound (self, CHAN_BODY, "misc/footstep03.wav", 1, ATTN_NORM);
110 else if (steprandom < 4)
111 sound (self, CHAN_BODY, "misc/footstep04.wav", 1, ATTN_NORM);
112 else if (steprandom < 5)
113 sound (self, CHAN_BODY, "misc/footstep05.wav", 1, ATTN_NORM);
114 else if (steprandom <= 6)
115 sound (self, CHAN_BODY, "misc/footstep06.wav", 1, ATTN_NORM);
118 self.oldvelocity = self.velocity;
120 self = findfloat(self, iscreature, TRUE);
130 Called before each frame by the server
133 void RuneMatchGivePoints();
134 float RedirectionThink();
135 entity SelectSpawnPoint (float anypoint);
136 void StartFrame (void)
138 dprint_load(); // load dprint status from cvar
140 if(RedirectionThink())
143 sv_maxairspeed = cvar("sv_maxairspeed");
144 sv_maxspeed = cvar ("sv_maxspeed");
145 sv_friction = cvar ("sv_friction");
146 sv_accelerate = cvar ("sv_accelerate");
147 sv_airaccelerate = cvar("sv_airaccelerate");
148 sv_airaccel_sideways_friction = cvar("sv_airaccel_sideways_friction");
149 sv_airaccel_qw = cvar("sv_airaccel_qw");
151 sv_stopspeed = cvar ("sv_stopspeed");
152 teamplay = cvar ("teamplay");
153 skill = cvar("skill");
162 RuneMatchGivePoints();
165 if(cvar("spawn_debugview"))
167 RandomSelection_Init();
168 for(self = world; (self = find(self, classname, "player")); )
169 RandomSelection_Add(self, 0, 1, 0);
170 self = RandomSelection_chosen_ent;