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", VOL_BASE, ATTN_NORM);
18 //if (self.watertype == CONTENT_WATER)
19 // sound (self, CHAN_BODY, "player/inh2o.wav", VOL_BASE, ATTN_NORM);
20 //if (self.watertype == CONTENT_SLIME)
21 // sound (self, CHAN_BODY, "player/slimbrn2.wav", VOL_BASE, 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, CHAN_AUTO, 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", VOL_BASE, 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", VOL_BASE, 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 or any damage.
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"));
85 Damage (self, world, world, dm, DEATH_FALL, self.origin, '0 0 0');
87 else if(vlen(self.velocity) > 100000 && cvar("developer"))
89 dprint(strcat(self.netname, " became too fast, please investigate: ", vtos(self.spawnorigin), "\n"));
90 Damage (self, world, world, 50000, DEATH_SHOOTING_STAR, self.origin, '0 0 0');
97 if (self.flags & FL_ONGROUND)
98 if (vlen(self.velocity) > sv_maxspeed * 0.6)
100 if (time < self.lastground + 0.2)
102 if((time > self.nextstep) || (time < (self.nextstep - 10.0)))
104 self.nextstep = time + 0.3 + random() * 0.1;
105 trace_dphitq3surfaceflags = 0;
106 tracebox(self.origin, self.mins, self.maxs, self.origin - '0 0 1', MOVE_NOMONSTERS, self);
107 if(trace_fraction == 1)
110 print(ftos(trace_dphitq3surfaceflags), "\n");
111 if not(trace_dphitq3surfaceflags & Q3SURFACEFLAG_NOSTEPS)
113 if(trace_dphitq3surfaceflags & Q3SURFACEFLAG_METALSTEPS)
114 GlobalSound(globalsound_metalstep, CHAN_AUTO, 0);
116 GlobalSound(globalsound_step, CHAN_AUTO, 0);
120 self.oldvelocity = self.velocity;
122 self = findfloat(self, iscreature, TRUE);
132 Called before each frame by the server
135 void RuneMatchGivePoints();
136 float RedirectionThink();
137 entity SelectSpawnPoint (float anypoint);
138 void StartFrame (void)
140 dprint_load(); // load dprint status from cvar
142 if(RedirectionThink())
145 sv_maxairspeed = cvar("sv_maxairspeed");
146 sv_maxspeed = cvar ("sv_maxspeed");
147 sv_friction = cvar ("sv_friction");
148 sv_accelerate = cvar ("sv_accelerate");
149 sv_airaccelerate = cvar("sv_airaccelerate");
150 sv_airaccel_sideways_friction = cvar("sv_airaccel_sideways_friction");
151 sv_airaccel_qw = cvar("sv_airaccel_qw");
153 sv_stopspeed = cvar ("sv_stopspeed");
154 teamplay = cvar ("teamplay");
155 skill = cvar("skill");
164 RuneMatchGivePoints();
167 if(cvar("spawn_debugview"))
169 RandomSelection_Init();
170 for(self = world; (self = find(self, classname, "player")); )
171 RandomSelection_Add(self, 0, 1, 0);
172 self = RandomSelection_chosen_ent;