Merge branch 'windows' into cleanup

This commit is contained in:
Yamagi Burmeister 2012-06-14 12:30:52 +02:00
commit 63cdbff0e3
30 changed files with 282 additions and 195 deletions

79
TODO Normal file
View File

@ -0,0 +1,79 @@
Long term TODO list for Quake II on Windows
-------------------------------------------
1. Test various windows version in different
localizations. At least:
- Windows XP [done]
- Windows XP 64
- Windows 2003
- Windows Vista
- Windows 2008
- Windows 7 [done]
- Windows 8 Preview [done]
2. The "dsound" sound system issue:
By default SDL uses the "waveout" sound driver which
needs to many buffers to be usable with Quake II. There
is no easy way to work around this, we can neither call
the sound system more often nor generate more sound per
call. The short term solution is to force the DirectX 5
based "dsound" driver. But "dsound" is unavailable for
64 bit applications on 64 bit Windows and on Windows 8.
SDL 2.0 has the new DirectX 8 based "directsound" driver
but that would require a port of Yamagi Quake II to the
still unstable SDL 2.0. Another soultion would be a
custom SDL.dll with the new driver backported to SDL
1.2.15. Be aware, that this problem only affects the
SDL sound-backend and not the default OpenAL backend!
3. The keyboard layout issue:
SDL 1.2 has a bug which results in untranslated keycodes
on non qwerty layouts. The consequence is, that Quake II
uses always the english keyboard layout, regardless of it's
real layout and the layout setting in the windows control
pannel. The recommendet work around is to switch SDL into
unicode mode and read unicode characters instead of the
raw keycodes. But implementing this into Quake II would
be a real PITA due to the rather complex differences
between the internal input system and SDL. ioQuake3 uses
unicode input for the console and raw input for the key
bingings, has therefor a correct layout in the console
but an english layout on normal key bindings. Their
implementation is rather invasive into the console
subsystem and I don't think that it's worth the efford.
4. The unicode issue:
Quake II only allows ASCII characters, internally all
characters are represented as "char". But Windows uses
unicode quite often. This may lead to problems. The big
question is: "What happens, if the path to the home dir
contains unicode characters?" At what can we do to prevent
problems without rewriting the whole game to be unicode
aware? This may be a problem on Linux and FreeBSD too,
but at least on FreeBSD unicode characters in the user-
name are a bad idea and for things to work correctly
the homedir-name should be the same as the username...
5. The debug / stdout issue:
At the moment no stdout is readable on windows, the only
way is to scroll in the console. This is a problem, because
without the game output problems are hard to debug. Enabling
the console log by default might migitate the problem, but
the early startup is not convered by it. One solution would
be to redirect stdout into a file (like dhewm). Daniel
suggested to implement a console window like the orginal
Quake III Arena client had.
It would be nice, if the Windows crash handler would be
invoced at every crash and not only sometimes. In theory
the crash handler is able to create crash dumps and send
them to a remore location (only Micorsoft or anybody?).
While I'm not sure that gdb can read Windows crashdumps,
it may be worth to take a deeper look into this.
6. The CR-LF issue:
At the moment all files have LF line endings, which are
incompatible with most Windows software. This isn't a
problem for the code itself (at least with MinGW), but
for the documentation. A possible solution is to use git
to convert the file endings at checkout. This would leave
the repo at LF and enable CR-LF for Windows.

View File

@ -550,6 +550,11 @@ AL_Overwater()
{ {
int i; int i;
if (sound_started != SS_OAL)
{
return;
}
/* Apply to all sources */ /* Apply to all sources */
for (i = 0; i < s_numchannels; i++) for (i = 0; i < s_numchannels; i++)
{ {

View File

@ -167,11 +167,11 @@ ai_stand(edict_t *self, float dist)
if (self->monsterinfo.idle_time) if (self->monsterinfo.idle_time)
{ {
self->monsterinfo.idle(self); self->monsterinfo.idle(self);
self->monsterinfo.idle_time = level.time + 15 + randk() * 15; self->monsterinfo.idle_time = level.time + 15 + random() * 15;
} }
else else
{ {
self->monsterinfo.idle_time = level.time + randk() * 15; self->monsterinfo.idle_time = level.time + random() * 15;
} }
} }
} }
@ -200,11 +200,11 @@ ai_walk(edict_t *self, float dist)
if (self->monsterinfo.idle_time) if (self->monsterinfo.idle_time)
{ {
self->monsterinfo.search(self); self->monsterinfo.search(self);
self->monsterinfo.idle_time = level.time + 15 + randk() * 15; self->monsterinfo.idle_time = level.time + 15 + random() * 15;
} }
else else
{ {
self->monsterinfo.idle_time = level.time + randk() * 15; self->monsterinfo.idle_time = level.time + random() * 15;
} }
} }
} }
@ -829,16 +829,16 @@ M_CheckAttack(edict_t *self)
chance *= 2; chance *= 2;
} }
if (randk() < chance) if (random() < chance)
{ {
self->monsterinfo.attack_state = AS_MISSILE; self->monsterinfo.attack_state = AS_MISSILE;
self->monsterinfo.attack_finished = level.time + 2 * randk(); self->monsterinfo.attack_finished = level.time + 2 * random();
return true; return true;
} }
if (self->flags & FL_FLY) if (self->flags & FL_FLY)
{ {
if (randk() < 0.3) if (random() < 0.3)
{ {
self->monsterinfo.attack_state = AS_SLIDING; self->monsterinfo.attack_state = AS_SLIDING;
} }

View File

@ -2547,7 +2547,7 @@ func_timer_think(edict_t *self)
} }
G_UseTargets(self, self->activator); G_UseTargets(self, self->activator);
self->nextthink = level.time + self->wait + crandk() * self->random; self->nextthink = level.time + self->wait + crandom() * self->random;
} }
void void
@ -2603,7 +2603,7 @@ SP_func_timer(edict_t *self)
if (self->spawnflags & 1) if (self->spawnflags & 1)
{ {
self->nextthink = level.time + 1.0 + st.pausetime + self->delay + self->nextthink = level.time + 1.0 + st.pausetime + self->delay +
self->wait + crandk() * self->random; self->wait + crandom() * self->random;
self->activator = self; self->activator = self;
} }

View File

@ -65,9 +65,9 @@ SP_func_areaportal(edict_t *ent)
void void
VelocityForDamage(int damage, vec3_t v) VelocityForDamage(int damage, vec3_t v)
{ {
v[0] = 100.0 * crandk(); v[0] = 100.0 * crandom();
v[1] = 100.0 * crandk(); v[1] = 100.0 * crandom();
v[2] = 200.0 + 100.0 * randk(); v[2] = 200.0 + 100.0 * random();
if (damage < 50) if (damage < 50)
{ {
@ -131,7 +131,7 @@ gib_think(edict_t *self)
if (self->s.frame == 10) if (self->s.frame == 10)
{ {
self->think = G_FreeEdict; self->think = G_FreeEdict;
self->nextthink = level.time + 8 + randk() * 10; self->nextthink = level.time + 8 + random() * 10;
} }
} }
@ -213,9 +213,9 @@ ThrowGib(edict_t *self, char *gibname, int damage, int type)
VectorScale(self->size, 0.5, size); VectorScale(self->size, 0.5, size);
VectorAdd(self->absmin, size, origin); VectorAdd(self->absmin, size, origin);
gib->s.origin[0] = origin[0] + crandk() * size[0]; gib->s.origin[0] = origin[0] + crandom() * size[0];
gib->s.origin[1] = origin[1] + crandk() * size[1]; gib->s.origin[1] = origin[1] + crandom() * size[1];
gib->s.origin[2] = origin[2] + crandk() * size[2]; gib->s.origin[2] = origin[2] + crandom() * size[2];
gi.setmodel(gib, gibname); gi.setmodel(gib, gibname);
gib->solid = SOLID_NOT; gib->solid = SOLID_NOT;
@ -239,12 +239,12 @@ ThrowGib(edict_t *self, char *gibname, int damage, int type)
VelocityForDamage(damage, vd); VelocityForDamage(damage, vd);
VectorMA(self->velocity, vscale, vd, gib->velocity); VectorMA(self->velocity, vscale, vd, gib->velocity);
ClipGibVelocity(gib); ClipGibVelocity(gib);
gib->avelocity[0] = randk() * 600; gib->avelocity[0] = random() * 600;
gib->avelocity[1] = randk() * 600; gib->avelocity[1] = random() * 600;
gib->avelocity[2] = randk() * 600; gib->avelocity[2] = random() * 600;
gib->think = G_FreeEdict; gib->think = G_FreeEdict;
gib->nextthink = level.time + 10 + randk() * 10; gib->nextthink = level.time + 10 + random() * 10;
gi.linkentity(gib); gi.linkentity(gib);
} }
@ -293,10 +293,10 @@ ThrowHead(edict_t *self, char *gibname, int damage, int type)
VectorMA(self->velocity, vscale, vd, self->velocity); VectorMA(self->velocity, vscale, vd, self->velocity);
ClipGibVelocity(self); ClipGibVelocity(self);
self->avelocity[YAW] = crandk() * 600; self->avelocity[YAW] = crandom() * 600;
self->think = G_FreeEdict; self->think = G_FreeEdict;
self->nextthink = level.time + 10 + randk() * 10; self->nextthink = level.time + 10 + random() * 10;
gi.linkentity(self); gi.linkentity(self);
} }
@ -394,17 +394,17 @@ ThrowDebris(edict_t *self, char *modelname, float speed, vec3_t origin)
chunk = G_Spawn(); chunk = G_Spawn();
VectorCopy(origin, chunk->s.origin); VectorCopy(origin, chunk->s.origin);
gi.setmodel(chunk, modelname); gi.setmodel(chunk, modelname);
v[0] = 100 * crandk(); v[0] = 100 * crandom();
v[1] = 100 * crandk(); v[1] = 100 * crandom();
v[2] = 100 + 100 * crandk(); v[2] = 100 + 100 * crandom();
VectorMA(self->velocity, speed, v, chunk->velocity); VectorMA(self->velocity, speed, v, chunk->velocity);
chunk->movetype = MOVETYPE_BOUNCE; chunk->movetype = MOVETYPE_BOUNCE;
chunk->solid = SOLID_NOT; chunk->solid = SOLID_NOT;
chunk->avelocity[0] = randk() * 600; chunk->avelocity[0] = random() * 600;
chunk->avelocity[1] = randk() * 600; chunk->avelocity[1] = random() * 600;
chunk->avelocity[2] = randk() * 600; chunk->avelocity[2] = random() * 600;
chunk->think = G_FreeEdict; chunk->think = G_FreeEdict;
chunk->nextthink = level.time + 5 + randk() * 5; chunk->nextthink = level.time + 5 + random() * 5;
chunk->s.frame = 0; chunk->s.frame = 0;
chunk->flags = 0; chunk->flags = 0;
chunk->classname = "debris"; chunk->classname = "debris";
@ -1076,9 +1076,9 @@ func_explosive_explode(edict_t *self, edict_t *inflictor, edict_t *attacker,
while (count--) while (count--)
{ {
chunkorigin[0] = origin[0] + crandk() * size[0]; chunkorigin[0] = origin[0] + crandom() * size[0];
chunkorigin[1] = origin[1] + crandk() * size[1]; chunkorigin[1] = origin[1] + crandom() * size[1];
chunkorigin[2] = origin[2] + crandk() * size[2]; chunkorigin[2] = origin[2] + crandom() * size[2];
ThrowDebris(self, "models/objects/debris1/tris.md2", 1, chunkorigin); ThrowDebris(self, "models/objects/debris1/tris.md2", 1, chunkorigin);
} }
} }
@ -1093,9 +1093,9 @@ func_explosive_explode(edict_t *self, edict_t *inflictor, edict_t *attacker,
while (count--) while (count--)
{ {
chunkorigin[0] = origin[0] + crandk() * size[0]; chunkorigin[0] = origin[0] + crandom() * size[0];
chunkorigin[1] = origin[1] + crandk() * size[1]; chunkorigin[1] = origin[1] + crandom() * size[1];
chunkorigin[2] = origin[2] + crandk() * size[2]; chunkorigin[2] = origin[2] + crandom() * size[2];
ThrowDebris(self, "models/objects/debris2/tris.md2", 2, chunkorigin); ThrowDebris(self, "models/objects/debris2/tris.md2", 2, chunkorigin);
} }
@ -1237,13 +1237,13 @@ barrel_explode(edict_t *self)
/* a few big chunks */ /* a few big chunks */
spd = 1.5 * (float)self->dmg / 200.0; spd = 1.5 * (float)self->dmg / 200.0;
org[0] = self->s.origin[0] + crandk() * self->size[0]; org[0] = self->s.origin[0] + crandom() * self->size[0];
org[1] = self->s.origin[1] + crandk() * self->size[1]; org[1] = self->s.origin[1] + crandom() * self->size[1];
org[2] = self->s.origin[2] + crandk() * self->size[2]; org[2] = self->s.origin[2] + crandom() * self->size[2];
ThrowDebris(self, "models/objects/debris1/tris.md2", spd, org); ThrowDebris(self, "models/objects/debris1/tris.md2", spd, org);
org[0] = self->s.origin[0] + crandk() * self->size[0]; org[0] = self->s.origin[0] + crandom() * self->size[0];
org[1] = self->s.origin[1] + crandk() * self->size[1]; org[1] = self->s.origin[1] + crandom() * self->size[1];
org[2] = self->s.origin[2] + crandk() * self->size[2]; org[2] = self->s.origin[2] + crandom() * self->size[2];
ThrowDebris(self, "models/objects/debris1/tris.md2", spd, org); ThrowDebris(self, "models/objects/debris1/tris.md2", spd, org);
/* bottom corners */ /* bottom corners */
@ -1263,37 +1263,37 @@ barrel_explode(edict_t *self)
/* a bunch of little chunks */ /* a bunch of little chunks */
spd = 2 * self->dmg / 200; spd = 2 * self->dmg / 200;
org[0] = self->s.origin[0] + crandk() * self->size[0]; org[0] = self->s.origin[0] + crandom() * self->size[0];
org[1] = self->s.origin[1] + crandk() * self->size[1]; org[1] = self->s.origin[1] + crandom() * self->size[1];
org[2] = self->s.origin[2] + crandk() * self->size[2]; org[2] = self->s.origin[2] + crandom() * self->size[2];
ThrowDebris(self, "models/objects/debris2/tris.md2", spd, org); ThrowDebris(self, "models/objects/debris2/tris.md2", spd, org);
org[0] = self->s.origin[0] + crandk() * self->size[0]; org[0] = self->s.origin[0] + crandom() * self->size[0];
org[1] = self->s.origin[1] + crandk() * self->size[1]; org[1] = self->s.origin[1] + crandom() * self->size[1];
org[2] = self->s.origin[2] + crandk() * self->size[2]; org[2] = self->s.origin[2] + crandom() * self->size[2];
ThrowDebris(self, "models/objects/debris2/tris.md2", spd, org); ThrowDebris(self, "models/objects/debris2/tris.md2", spd, org);
org[0] = self->s.origin[0] + crandk() * self->size[0]; org[0] = self->s.origin[0] + crandom() * self->size[0];
org[1] = self->s.origin[1] + crandk() * self->size[1]; org[1] = self->s.origin[1] + crandom() * self->size[1];
org[2] = self->s.origin[2] + crandk() * self->size[2]; org[2] = self->s.origin[2] + crandom() * self->size[2];
ThrowDebris(self, "models/objects/debris2/tris.md2", spd, org); ThrowDebris(self, "models/objects/debris2/tris.md2", spd, org);
org[0] = self->s.origin[0] + crandk() * self->size[0]; org[0] = self->s.origin[0] + crandom() * self->size[0];
org[1] = self->s.origin[1] + crandk() * self->size[1]; org[1] = self->s.origin[1] + crandom() * self->size[1];
org[2] = self->s.origin[2] + crandk() * self->size[2]; org[2] = self->s.origin[2] + crandom() * self->size[2];
ThrowDebris(self, "models/objects/debris2/tris.md2", spd, org); ThrowDebris(self, "models/objects/debris2/tris.md2", spd, org);
org[0] = self->s.origin[0] + crandk() * self->size[0]; org[0] = self->s.origin[0] + crandom() * self->size[0];
org[1] = self->s.origin[1] + crandk() * self->size[1]; org[1] = self->s.origin[1] + crandom() * self->size[1];
org[2] = self->s.origin[2] + crandk() * self->size[2]; org[2] = self->s.origin[2] + crandom() * self->size[2];
ThrowDebris(self, "models/objects/debris2/tris.md2", spd, org); ThrowDebris(self, "models/objects/debris2/tris.md2", spd, org);
org[0] = self->s.origin[0] + crandk() * self->size[0]; org[0] = self->s.origin[0] + crandom() * self->size[0];
org[1] = self->s.origin[1] + crandk() * self->size[1]; org[1] = self->s.origin[1] + crandom() * self->size[1];
org[2] = self->s.origin[2] + crandk() * self->size[2]; org[2] = self->s.origin[2] + crandom() * self->size[2];
ThrowDebris(self, "models/objects/debris2/tris.md2", spd, org); ThrowDebris(self, "models/objects/debris2/tris.md2", spd, org);
org[0] = self->s.origin[0] + crandk() * self->size[0]; org[0] = self->s.origin[0] + crandom() * self->size[0];
org[1] = self->s.origin[1] + crandk() * self->size[1]; org[1] = self->s.origin[1] + crandom() * self->size[1];
org[2] = self->s.origin[2] + crandk() * self->size[2]; org[2] = self->s.origin[2] + crandom() * self->size[2];
ThrowDebris(self, "models/objects/debris2/tris.md2", spd, org); ThrowDebris(self, "models/objects/debris2/tris.md2", spd, org);
org[0] = self->s.origin[0] + crandk() * self->size[0]; org[0] = self->s.origin[0] + crandom() * self->size[0];
org[1] = self->s.origin[1] + crandk() * self->size[1]; org[1] = self->s.origin[1] + crandom() * self->size[1];
org[2] = self->s.origin[2] + crandk() * self->size[2]; org[2] = self->s.origin[2] + crandom() * self->size[2];
ThrowDebris(self, "models/objects/debris2/tris.md2", spd, org); ThrowDebris(self, "models/objects/debris2/tris.md2", spd, org);
VectorCopy(save, self->s.origin); VectorCopy(save, self->s.origin);
@ -2134,9 +2134,9 @@ SP_misc_gib_arm(edict_t *ent)
ent->movetype = MOVETYPE_TOSS; ent->movetype = MOVETYPE_TOSS;
ent->svflags |= SVF_MONSTER; ent->svflags |= SVF_MONSTER;
ent->deadflag = DEAD_DEAD; ent->deadflag = DEAD_DEAD;
ent->avelocity[0] = randk() * 200; ent->avelocity[0] = random() * 200;
ent->avelocity[1] = randk() * 200; ent->avelocity[1] = random() * 200;
ent->avelocity[2] = randk() * 200; ent->avelocity[2] = random() * 200;
ent->think = G_FreeEdict; ent->think = G_FreeEdict;
ent->nextthink = level.time + 30; ent->nextthink = level.time + 30;
gi.linkentity(ent); gi.linkentity(ent);
@ -2162,9 +2162,9 @@ SP_misc_gib_leg(edict_t *ent)
ent->movetype = MOVETYPE_TOSS; ent->movetype = MOVETYPE_TOSS;
ent->svflags |= SVF_MONSTER; ent->svflags |= SVF_MONSTER;
ent->deadflag = DEAD_DEAD; ent->deadflag = DEAD_DEAD;
ent->avelocity[0] = randk() * 200; ent->avelocity[0] = random() * 200;
ent->avelocity[1] = randk() * 200; ent->avelocity[1] = random() * 200;
ent->avelocity[2] = randk() * 200; ent->avelocity[2] = random() * 200;
ent->think = G_FreeEdict; ent->think = G_FreeEdict;
ent->nextthink = level.time + 30; ent->nextthink = level.time + 30;
gi.linkentity(ent); gi.linkentity(ent);
@ -2190,9 +2190,9 @@ SP_misc_gib_head(edict_t *ent)
ent->movetype = MOVETYPE_TOSS; ent->movetype = MOVETYPE_TOSS;
ent->svflags |= SVF_MONSTER; ent->svflags |= SVF_MONSTER;
ent->deadflag = DEAD_DEAD; ent->deadflag = DEAD_DEAD;
ent->avelocity[0] = randk() * 200; ent->avelocity[0] = random() * 200;
ent->avelocity[1] = randk() * 200; ent->avelocity[1] = random() * 200;
ent->avelocity[2] = randk() * 200; ent->avelocity[2] = random() * 200;
ent->think = G_FreeEdict; ent->think = G_FreeEdict;
ent->nextthink = level.time + 30; ent->nextthink = level.time + 30;
gi.linkentity(ent); gi.linkentity(ent);

View File

@ -199,13 +199,13 @@ M_FlyCheck(edict_t *self)
return; return;
} }
if (randk() > 0.5) if (random() > 0.5)
{ {
return; return;
} }
self->think = M_FliesOn; self->think = M_FliesOn;
self->nextthink = level.time + 5 + 10 * randk(); self->nextthink = level.time + 5 + 10 * random();
} }
void void
@ -415,7 +415,7 @@ M_WorldEffects(edict_t *ent)
{ {
if (ent->watertype & CONTENTS_LAVA) if (ent->watertype & CONTENTS_LAVA)
{ {
if (randk() <= 0.5) if (random() <= 0.5)
{ {
gi.sound(ent, CHAN_BODY, gi.soundindex( gi.sound(ent, CHAN_BODY, gi.soundindex(
"player/lava1.wav"), 1, ATTN_NORM, 0); "player/lava1.wav"), 1, ATTN_NORM, 0);

View File

@ -1174,8 +1174,8 @@ target_earthquake_think(edict_t *self)
} }
e->groundentity = NULL; e->groundentity = NULL;
e->velocity[0] += crandk() * 150; e->velocity[0] += crandom() * 150;
e->velocity[1] += crandk() * 150; e->velocity[1] += crandom() * 150;
e->velocity[2] = self->speed * (100.0 / e->mass); e->velocity[2] = self->speed * (100.0 / e->mass);
} }

View File

@ -133,7 +133,7 @@ turret_breach_fire(edict_t *self)
VectorMA(start, self->move_origin[1], r, start); VectorMA(start, self->move_origin[1], r, start);
VectorMA(start, self->move_origin[2], u, start); VectorMA(start, self->move_origin[2], u, start);
damage = 100 + randk() * 50; damage = 100 + random() * 50;
speed = 550 + 50 * skill->value; speed = 550 + 50 * skill->value;
fire_rocket(self->teammaster->owner, start, f, damage, speed, 150, damage); fire_rocket(self->teammaster->owner, start, f, damage, speed, 150, damage);
gi.positioned_sound(start, self, CHAN_WEAPON, gi.positioned_sound(start, self, CHAN_WEAPON,

View File

@ -47,7 +47,7 @@ check_dodge(edict_t *self, vec3_t start, vec3_t dir, int speed)
/* easy mode only ducks one quarter the time */ /* easy mode only ducks one quarter the time */
if (skill->value == 0) if (skill->value == 0)
{ {
if (randk() > 0.25) if (random() > 0.25)
{ {
return; return;
} }
@ -196,8 +196,8 @@ fire_lead(edict_t *self, vec3_t start, vec3_t aimdir, int damage, int kick,
vectoangles(aimdir, dir); vectoangles(aimdir, dir);
AngleVectors(dir, forward, right, up); AngleVectors(dir, forward, right, up);
r = crandk() * hspread; r = crandom() * hspread;
u = crandk() * vspread; u = crandom() * vspread;
VectorMA(start, 8192, forward, end); VectorMA(start, 8192, forward, end);
VectorMA(end, r, right, end); VectorMA(end, r, right, end);
VectorMA(end, u, up, end); VectorMA(end, u, up, end);
@ -260,8 +260,8 @@ fire_lead(edict_t *self, vec3_t start, vec3_t aimdir, int damage, int kick,
VectorSubtract(end, start, dir); VectorSubtract(end, start, dir);
vectoangles(dir, dir); vectoangles(dir, dir);
AngleVectors(dir, forward, right, up); AngleVectors(dir, forward, right, up);
r = crandk() * hspread * 2; r = crandom() * hspread * 2;
u = crandk() * vspread * 2; u = crandom() * vspread * 2;
VectorMA(water_start, 8192, forward, end); VectorMA(water_start, 8192, forward, end);
VectorMA(end, r, right, end); VectorMA(end, r, right, end);
VectorMA(end, u, up, end); VectorMA(end, u, up, end);
@ -611,7 +611,7 @@ Grenade_Touch(edict_t *ent, edict_t *other, cplane_t *plane /* unused */, csurfa
{ {
if (ent->spawnflags & 1) if (ent->spawnflags & 1)
{ {
if (randk() > 0.5) if (random() > 0.5)
{ {
gi.sound(ent, CHAN_VOICE, gi.soundindex( gi.sound(ent, CHAN_VOICE, gi.soundindex(
"weapons/hgrenb1a.wav"), 1, ATTN_NORM, 0); "weapons/hgrenb1a.wav"), 1, ATTN_NORM, 0);
@ -654,8 +654,8 @@ fire_grenade(edict_t *self, vec3_t start, vec3_t aimdir, int damage, int speed,
grenade = G_Spawn(); grenade = G_Spawn();
VectorCopy(start, grenade->s.origin); VectorCopy(start, grenade->s.origin);
VectorScale(aimdir, speed, grenade->velocity); VectorScale(aimdir, speed, grenade->velocity);
VectorMA(grenade->velocity, 200 + crandk() * 10.0, up, grenade->velocity); VectorMA(grenade->velocity, 200 + crandom() * 10.0, up, grenade->velocity);
VectorMA(grenade->velocity, crandk() * 10.0, right, grenade->velocity); VectorMA(grenade->velocity, crandom() * 10.0, right, grenade->velocity);
VectorSet(grenade->avelocity, 300, 300, 300); VectorSet(grenade->avelocity, 300, 300, 300);
grenade->movetype = MOVETYPE_BOUNCE; grenade->movetype = MOVETYPE_BOUNCE;
grenade->clipmask = MASK_SHOT; grenade->clipmask = MASK_SHOT;
@ -694,8 +694,8 @@ fire_grenade2(edict_t *self, vec3_t start, vec3_t aimdir, int damage,
grenade = G_Spawn(); grenade = G_Spawn();
VectorCopy(start, grenade->s.origin); VectorCopy(start, grenade->s.origin);
VectorScale(aimdir, speed, grenade->velocity); VectorScale(aimdir, speed, grenade->velocity);
VectorMA(grenade->velocity, 200 + crandk() * 10.0, up, grenade->velocity); VectorMA(grenade->velocity, 200 + crandom() * 10.0, up, grenade->velocity);
VectorMA(grenade->velocity, crandk() * 10.0, right, grenade->velocity); VectorMA(grenade->velocity, crandom() * 10.0, right, grenade->velocity);
VectorSet(grenade->avelocity, 300, 300, 300); VectorSet(grenade->avelocity, 300, 300, 300);
grenade->movetype = MOVETYPE_BOUNCE; grenade->movetype = MOVETYPE_BOUNCE;
grenade->clipmask = MASK_SHOT; grenade->clipmask = MASK_SHOT;

View File

@ -487,6 +487,9 @@ extern edict_t *g_edicts;
#define LLOFS(x) (size_t)&(((level_locals_t *)NULL)->x) #define LLOFS(x) (size_t)&(((level_locals_t *)NULL)->x)
#define CLOFS(x) (size_t)&(((gclient_t *)NULL)->x) #define CLOFS(x) (size_t)&(((gclient_t *)NULL)->x)
#define random() ((randk() & 0x7fff) / ((float)0x7fff))
#define crandom() (2.0 * (random() - 0.5))
extern cvar_t *maxentities; extern cvar_t *maxentities;
extern cvar_t *deathmatch; extern cvar_t *deathmatch;
extern cvar_t *coop; extern cvar_t *coop;

View File

@ -128,7 +128,7 @@ berserk_fidget(edict_t *self)
return; return;
} }
if (randk() > 0.15) if (random() > 0.15)
{ {
return; return;
} }
@ -407,7 +407,7 @@ berserk_pain(edict_t *self, edict_t *other /* unused */,
return; /* no pain anims in nightmare */ return; /* no pain anims in nightmare */
} }
if ((damage < 20) || (randk() < 0.5)) if ((damage < 20) || (random() < 0.5))
{ {
self->monsterinfo.currentmove = &berserk_move_pain1; self->monsterinfo.currentmove = &berserk_move_pain1;
} }

View File

@ -45,7 +45,7 @@ boss2_search(edict_t *self)
return; return;
} }
if (randk() < 0.5) if (random() < 0.5)
{ {
gi.sound(self, CHAN_VOICE, sound_search1, 1, ATTN_NONE, 0); gi.sound(self, CHAN_VOICE, sound_search1, 1, ATTN_NONE, 0);
} }
@ -549,7 +549,7 @@ boss2_attack(edict_t *self)
} }
else else
{ {
if (randk() <= 0.6) if (random() <= 0.6)
{ {
self->monsterinfo.currentmove = &boss2_move_attack_pre_mg; self->monsterinfo.currentmove = &boss2_move_attack_pre_mg;
} }
@ -581,7 +581,7 @@ boss2_reattack_mg(edict_t *self)
if (infront(self, self->enemy)) if (infront(self, self->enemy))
{ {
if (randk() <= 0.7) if (random() <= 0.7)
{ {
self->monsterinfo.currentmove = &boss2_move_attack_mg; self->monsterinfo.currentmove = &boss2_move_attack_mg;
} }
@ -759,16 +759,16 @@ Boss2_CheckAttack(edict_t *self)
return false; return false;
} }
if (randk() < chance) if (random() < chance)
{ {
self->monsterinfo.attack_state = AS_MISSILE; self->monsterinfo.attack_state = AS_MISSILE;
self->monsterinfo.attack_finished = level.time + 2 * randk(); self->monsterinfo.attack_finished = level.time + 2 * random();
return true; return true;
} }
if (self->flags & FL_FLY) if (self->flags & FL_FLY)
{ {
if (randk() < 0.3) if (random() < 0.3)
{ {
self->monsterinfo.attack_state = AS_SLIDING; self->monsterinfo.attack_state = AS_SLIDING;
} }

View File

@ -58,7 +58,7 @@ jorg_search(edict_t *self)
return; return;
} }
r = randk(); r = random();
if (r <= 0.3) if (r <= 0.3)
{ {
@ -524,7 +524,7 @@ jorg_reattack1(edict_t *self)
if (visible(self, self->enemy)) if (visible(self, self->enemy))
{ {
if (randk() < 0.9) if (random() < 0.9)
{ {
self->monsterinfo.currentmove = &jorg_move_attack1; self->monsterinfo.currentmove = &jorg_move_attack1;
} }
@ -577,7 +577,7 @@ jorg_pain(edict_t *self, edict_t *other /* unused */,
pain frames if he takes little damage */ pain frames if he takes little damage */
if (damage <= 40) if (damage <= 40)
{ {
if (randk() <= 0.6) if (random() <= 0.6)
{ {
return; return;
} }
@ -587,7 +587,7 @@ jorg_pain(edict_t *self, edict_t *other /* unused */,
lessen the chance of him going into pain */ lessen the chance of him going into pain */
if ((self->s.frame >= FRAME_attak101) && (self->s.frame <= FRAME_attak108)) if ((self->s.frame >= FRAME_attak101) && (self->s.frame <= FRAME_attak108))
{ {
if (randk() <= 0.005) if (random() <= 0.005)
{ {
return; return;
} }
@ -595,7 +595,7 @@ jorg_pain(edict_t *self, edict_t *other /* unused */,
if ((self->s.frame >= FRAME_attak109) && (self->s.frame <= FRAME_attak114)) if ((self->s.frame >= FRAME_attak109) && (self->s.frame <= FRAME_attak114))
{ {
if (randk() <= 0.00005) if (random() <= 0.00005)
{ {
return; return;
} }
@ -603,7 +603,7 @@ jorg_pain(edict_t *self, edict_t *other /* unused */,
if ((self->s.frame >= FRAME_attak201) && (self->s.frame <= FRAME_attak208)) if ((self->s.frame >= FRAME_attak201) && (self->s.frame <= FRAME_attak208))
{ {
if (randk() <= 0.005) if (random() <= 0.005)
{ {
return; return;
} }
@ -628,7 +628,7 @@ jorg_pain(edict_t *self, edict_t *other /* unused */,
} }
else else
{ {
if (randk() <= 0.3) if (random() <= 0.3)
{ {
gi.sound(self, CHAN_VOICE, sound_pain3, 1, ATTN_NORM, 0); gi.sound(self, CHAN_VOICE, sound_pain3, 1, ATTN_NORM, 0);
self->monsterinfo.currentmove = &jorg_move_pain3; self->monsterinfo.currentmove = &jorg_move_pain3;
@ -731,7 +731,7 @@ jorg_attack(edict_t *self)
return; return;
} }
if (randk() <= 0.75) if (random() <= 0.75)
{ {
gi.sound(self, CHAN_VOICE, sound_attack1, 1, ATTN_NORM, 0); gi.sound(self, CHAN_VOICE, sound_attack1, 1, ATTN_NORM, 0);
self->s.sound = gi.soundindex("boss3/w_loop.wav"); self->s.sound = gi.soundindex("boss3/w_loop.wav");
@ -859,16 +859,16 @@ Jorg_CheckAttack(edict_t *self)
return false; return false;
} }
if (randk() < chance) if (random() < chance)
{ {
self->monsterinfo.attack_state = AS_MISSILE; self->monsterinfo.attack_state = AS_MISSILE;
self->monsterinfo.attack_finished = level.time + 2 * randk(); self->monsterinfo.attack_finished = level.time + 2 * random();
return true; return true;
} }
if (self->flags & FL_FLY) if (self->flags & FL_FLY)
{ {
if (randk() < 0.3) if (random() < 0.3)
{ {
self->monsterinfo.attack_state = AS_SLIDING; self->monsterinfo.attack_state = AS_SLIDING;
} }

View File

@ -62,7 +62,7 @@ makron_taunt(edict_t *self)
return; return;
} }
r = randk(); r = random();
if (r <= 0.3) if (r <= 0.3)
{ {
@ -741,7 +741,7 @@ makron_pain(edict_t *self, edict_t *other /* unused */,
/* Lessen the chance of him going into his pain frames */ /* Lessen the chance of him going into his pain frames */
if (damage <= 25) if (damage <= 25)
{ {
if (randk() < 0.2) if (random() < 0.2)
{ {
return; return;
} }
@ -768,13 +768,13 @@ makron_pain(edict_t *self, edict_t *other /* unused */,
{ {
if (damage <= 150) if (damage <= 150)
{ {
if (randk() <= 0.45) if (random() <= 0.45)
{ {
gi.sound(self, CHAN_VOICE, sound_pain6, 1, ATTN_NONE, 0); gi.sound(self, CHAN_VOICE, sound_pain6, 1, ATTN_NONE, 0);
self->monsterinfo.currentmove = &makron_move_pain6; self->monsterinfo.currentmove = &makron_move_pain6;
} }
else else
if (randk() <= 0.35) if (random() <= 0.35)
{ {
gi.sound(self, CHAN_VOICE, sound_pain6, 1, ATTN_NONE, 0); gi.sound(self, CHAN_VOICE, sound_pain6, 1, ATTN_NONE, 0);
self->monsterinfo.currentmove = &makron_move_pain6; self->monsterinfo.currentmove = &makron_move_pain6;
@ -804,7 +804,7 @@ makron_attack(edict_t *self)
return; return;
} }
r = randk(); r = random();
if (r <= 0.3) if (r <= 0.3)
{ {
@ -1026,16 +1026,16 @@ Makron_CheckAttack(edict_t *self)
return false; return false;
} }
if (randk() < chance) if (random() < chance)
{ {
self->monsterinfo.attack_state = AS_MISSILE; self->monsterinfo.attack_state = AS_MISSILE;
self->monsterinfo.attack_finished = level.time + 2 * randk(); self->monsterinfo.attack_finished = level.time + 2 * random();
return true; return true;
} }
if (self->flags & FL_FLY) if (self->flags & FL_FLY)
{ {
if (randk() < 0.3) if (random() < 0.3)
{ {
self->monsterinfo.attack_state = AS_SLIDING; self->monsterinfo.attack_state = AS_SLIDING;
} }

View File

@ -375,7 +375,7 @@ brain_dodge(edict_t *self, edict_t *attacker, float eta)
return; return;
} }
if (randk() > 0.25) if (random() > 0.25)
{ {
return; return;
} }
@ -607,7 +607,7 @@ brain_melee(edict_t *self)
return; return;
} }
if (randk() <= 0.5) if (random() <= 0.5)
{ {
self->monsterinfo.currentmove = &brain_move_attack1; self->monsterinfo.currentmove = &brain_move_attack1;
} }
@ -687,7 +687,7 @@ brain_pain(edict_t *self, edict_t *other /* unused */,
return; /* no pain anims in nightmare */ return; /* no pain anims in nightmare */
} }
r = randk(); r = random();
if (r < 0.33) if (r < 0.33)
{ {
@ -769,7 +769,7 @@ brain_die(edict_t *self, edict_t *inflictor /* unused */, edict_t *attacker /* u
self->deadflag = DEAD_DEAD; self->deadflag = DEAD_DEAD;
self->takedamage = DAMAGE_YES; self->takedamage = DAMAGE_YES;
if (randk() <= 0.5) if (random() <= 0.5)
{ {
self->monsterinfo.currentmove = &brain_move_death1; self->monsterinfo.currentmove = &brain_move_death1;
} }

View File

@ -59,7 +59,7 @@ ChickMoan(edict_t *self)
return; return;
} }
if (randk() < 0.5) if (random() < 0.5)
{ {
gi.sound(self, CHAN_VOICE, sound_idle1, 1, ATTN_IDLE, 0); gi.sound(self, CHAN_VOICE, sound_idle1, 1, ATTN_IDLE, 0);
} }
@ -123,7 +123,7 @@ chick_fidget(edict_t *self)
return; return;
} }
if (randk() <= 0.3) if (random() <= 0.3)
{ {
self->monsterinfo.currentmove = &chick_move_fidget; self->monsterinfo.currentmove = &chick_move_fidget;
} }
@ -367,7 +367,7 @@ chick_pain(edict_t *self, edict_t *other /* unused */,
self->pain_debounce_time = level.time + 3; self->pain_debounce_time = level.time + 3;
r = randk(); r = random();
if (r < 0.33) if (r < 0.33)
{ {
@ -610,7 +610,7 @@ chick_dodge(edict_t *self, edict_t *attacker, float eta /* unused */)
return; return;
} }
if (randk() > 0.25) if (random() > 0.25)
{ {
return; return;
} }
@ -763,7 +763,7 @@ chick_rerocket(edict_t *self)
{ {
if (visible(self, self->enemy)) if (visible(self, self->enemy))
{ {
if (randk() <= 0.6) if (random() <= 0.6)
{ {
self->monsterinfo.currentmove = &chick_move_attack1; self->monsterinfo.currentmove = &chick_move_attack1;
return; return;
@ -833,7 +833,7 @@ chick_reslash(edict_t *self)
{ {
if (range(self, self->enemy) == RANGE_MELEE) if (range(self, self->enemy) == RANGE_MELEE)
{ {
if (randk() <= 0.9) if (random() <= 0.9)
{ {
self->monsterinfo.currentmove = &chick_move_slash; self->monsterinfo.currentmove = &chick_move_slash;
return; return;

View File

@ -232,7 +232,7 @@ floater_stand(edict_t *self)
return; return;
} }
if (randk() <= 0.5) if (random() <= 0.5)
{ {
self->monsterinfo.currentmove = &floater_move_stand1; self->monsterinfo.currentmove = &floater_move_stand1;
} }
@ -689,7 +689,7 @@ floater_melee(edict_t *self)
return; return;
} }
if (randk() < 0.5) if (random() < 0.5)
{ {
self->monsterinfo.currentmove = &floater_move_attack3; self->monsterinfo.currentmove = &floater_move_attack3;
} }
@ -822,7 +822,7 @@ SP_monster_floater(edict_t *self)
gi.linkentity(self); gi.linkentity(self);
if (randk() <= 0.5) if (random() <= 0.5)
{ {
self->monsterinfo.currentmove = &floater_move_stand1; self->monsterinfo.currentmove = &floater_move_stand1;
} }

View File

@ -734,7 +734,7 @@ flyer_check_melee(edict_t *self)
if (range(self, self->enemy) == RANGE_MELEE) if (range(self, self->enemy) == RANGE_MELEE)
{ {
if (randk() <= 0.8) if (random() <= 0.8)
{ {
self->monsterinfo.currentmove = &flyer_move_loop_melee; self->monsterinfo.currentmove = &flyer_move_loop_melee;
} }

View File

@ -381,7 +381,7 @@ gladiator_pain(edict_t *self, edict_t *other /* unused */,
self->pain_debounce_time = level.time + 3; self->pain_debounce_time = level.time + 3;
if (randk() < 0.5) if (random() < 0.5)
{ {
gi.sound(self, CHAN_VOICE, sound_pain1, 1, ATTN_NORM, 0); gi.sound(self, CHAN_VOICE, sound_pain1, 1, ATTN_NORM, 0);
} }

View File

@ -153,7 +153,7 @@ gunner_fidget(edict_t *self)
return; return;
} }
if (randk() <= 0.05) if (random() <= 0.05)
{ {
self->monsterinfo.currentmove = &gunner_move_fidget; self->monsterinfo.currentmove = &gunner_move_fidget;
} }
@ -531,7 +531,7 @@ gunner_duck_down(edict_t *self)
if (skill->value >= 2) if (skill->value >= 2)
{ {
if (randk() > 0.5) if (random() > 0.5)
{ {
GunnerGrenade(self); GunnerGrenade(self);
} }
@ -602,7 +602,7 @@ gunner_dodge(edict_t *self, edict_t *attacker, float eta /* unused */)
return; return;
} }
if (randk() > 0.25) if (random() > 0.25)
{ {
return; return;
} }
@ -798,7 +798,7 @@ gunner_attack(edict_t *self)
} }
else else
{ {
if (randk() <= 0.5) if (random() <= 0.5)
{ {
self->monsterinfo.currentmove = &gunner_move_attack_grenade; self->monsterinfo.currentmove = &gunner_move_attack_grenade;
} }
@ -832,7 +832,7 @@ gunner_refire_chain(edict_t *self)
{ {
if (visible(self, self->enemy)) if (visible(self, self->enemy))
{ {
if (randk() <= 0.5) if (random() <= 0.5)
{ {
self->monsterinfo.currentmove = &gunner_move_fire_chain; self->monsterinfo.currentmove = &gunner_move_fire_chain;
return; return;

View File

@ -52,7 +52,7 @@ void
hover_search(edict_t *self) hover_search(edict_t *self)
{ {
if (randk() < 0.5) if (random() < 0.5)
{ {
gi.sound(self, CHAN_VOICE, sound_search1, 1, ATTN_NORM, 0); gi.sound(self, CHAN_VOICE, sound_search1, 1, ATTN_NORM, 0);
} }
@ -534,7 +534,7 @@ hover_reattack(edict_t *self)
{ {
if (visible(self, self->enemy)) if (visible(self, self->enemy))
{ {
if (randk() <= 0.6) if (random() <= 0.6)
{ {
self->monsterinfo.currentmove = &hover_move_attack1; self->monsterinfo.currentmove = &hover_move_attack1;
return; return;
@ -669,7 +669,7 @@ hover_pain(edict_t *self, edict_t *other /* unused */,
if (damage <= 25) if (damage <= 25)
{ {
if (randk() < 0.5) if (random() < 0.5)
{ {
gi.sound(self, CHAN_VOICE, sound_pain1, 1, ATTN_NORM, 0); gi.sound(self, CHAN_VOICE, sound_pain1, 1, ATTN_NORM, 0);
self->monsterinfo.currentmove = &hover_move_pain3; self->monsterinfo.currentmove = &hover_move_pain3;
@ -769,7 +769,7 @@ hover_die(edict_t *self, edict_t *inflictor /* unused */,
} }
/* regular death */ /* regular death */
if (randk() < 0.5) if (random() < 0.5)
{ {
gi.sound(self, CHAN_VOICE, sound_death1, 1, ATTN_NORM, 0); gi.sound(self, CHAN_VOICE, sound_death1, 1, ATTN_NORM, 0);
} }

View File

@ -628,7 +628,7 @@ infantry_dodge(edict_t *self, edict_t *attacker, float eta /* unused */)
return; return;
} }
if (randk() > 0.25) if (random() > 0.25)
{ {
return; return;
} }

View File

@ -567,7 +567,7 @@ insane_cross(edict_t *self)
return; return;
} }
if (randk() < 0.8) if (random() < 0.8)
{ {
self->monsterinfo.currentmove = &insane_move_cross; self->monsterinfo.currentmove = &insane_move_cross;
} }
@ -599,7 +599,7 @@ insane_walk(edict_t *self)
self->monsterinfo.currentmove = &insane_move_crawl; self->monsterinfo.currentmove = &insane_move_crawl;
} }
else else
if (randk() <= 0.5) if (random() <= 0.5)
{ {
self->monsterinfo.currentmove = &insane_move_walk_normal; self->monsterinfo.currentmove = &insane_move_walk_normal;
} }
@ -632,7 +632,7 @@ insane_run(edict_t *self)
} }
else else
if (randk() <= 0.5) /* Else, mix it up */ if (random() <= 0.5) /* Else, mix it up */
{ {
self->monsterinfo.currentmove = &insane_move_run_normal; self->monsterinfo.currentmove = &insane_move_run_normal;
} }
@ -731,9 +731,9 @@ insane_checkdown(edict_t *self)
return; return;
} }
if (randk() < 0.3) if (random() < 0.3)
{ {
if (randk() < 0.5) if (random() < 0.5)
{ {
self->monsterinfo.currentmove = &insane_move_uptodown; self->monsterinfo.currentmove = &insane_move_uptodown;
} }
@ -758,7 +758,7 @@ insane_checkup(edict_t *self)
return; return;
} }
if (randk() < 0.5) if (random() < 0.5)
{ {
self->monsterinfo.currentmove = &insane_move_downtoup; self->monsterinfo.currentmove = &insane_move_downtoup;
} }
@ -783,7 +783,7 @@ insane_stand(edict_t *self)
self->monsterinfo.currentmove = &insane_move_down; self->monsterinfo.currentmove = &insane_move_down;
} }
else else
if (randk() < 0.5) if (random() < 0.5)
{ {
self->monsterinfo.currentmove = &insane_move_stand_normal; self->monsterinfo.currentmove = &insane_move_stand_normal;
} }

View File

@ -435,7 +435,7 @@ medic_pain(edict_t *self, edict_t *other /* unused */,
return; /* no pain anims in nightmare */ return; /* no pain anims in nightmare */
} }
if (randk() < 0.5) if (random() < 0.5)
{ {
self->monsterinfo.currentmove = &medic_move_pain1; self->monsterinfo.currentmove = &medic_move_pain1;
gi.sound(self, CHAN_VOICE, sound_pain1, 1, ATTN_NORM, 0); gi.sound(self, CHAN_VOICE, sound_pain1, 1, ATTN_NORM, 0);
@ -681,7 +681,7 @@ mmove_t medic_move_duck =
void void
medic_dodge(edict_t *self, edict_t *attacker, float eta) medic_dodge(edict_t *self, edict_t *attacker, float eta)
{ {
if (randk() > 0.25) if (random() > 0.25)
{ {
return; return;
} }
@ -731,7 +731,7 @@ medic_continue(edict_t *self)
if (visible(self, self->enemy)) if (visible(self, self->enemy))
{ {
if (randk() <= 0.95) if (random() <= 0.95)
{ {
self->monsterinfo.currentmove = &medic_move_attackHyperBlaster; self->monsterinfo.currentmove = &medic_move_attackHyperBlaster;
} }

View File

@ -180,7 +180,7 @@ mutant_idle_loop(edict_t *self)
return; return;
} }
if (randk() < 0.75) if (random() < 0.75)
{ {
self->monsterinfo.nextframe = FRAME_stand155; self->monsterinfo.nextframe = FRAME_stand155;
} }
@ -377,7 +377,7 @@ mutant_check_refire(edict_t *self)
} }
if (((skill->value == 3) && if (((skill->value == 3) &&
(randk() < 0.5)) || (range(self, self->enemy) == RANGE_MELEE)) (random() < 0.5)) || (range(self, self->enemy) == RANGE_MELEE))
{ {
self->monsterinfo.nextframe = FRAME_attack09; self->monsterinfo.nextframe = FRAME_attack09;
} }
@ -438,7 +438,7 @@ mutant_jump_touch(edict_t *self, edict_t *other,
VectorCopy(self->velocity, normal); VectorCopy(self->velocity, normal);
VectorNormalize(normal); VectorNormalize(normal);
VectorMA(self->s.origin, self->maxs[0], normal, point); VectorMA(self->s.origin, self->maxs[0], normal, point);
damage = 40 + 10 * randk(); damage = 40 + 10 * random();
T_Damage(other, self, self, self->velocity, point, T_Damage(other, self, self, self->velocity, point,
normal, damage, damage, 0, MOD_UNKNOWN); normal, damage, damage, 0, MOD_UNKNOWN);
} }
@ -584,7 +584,7 @@ mutant_check_jump(edict_t *self)
if (distance > 100) if (distance > 100)
{ {
if (randk() < 0.9) if (random() < 0.9)
{ {
return false; return false;
} }
@ -699,7 +699,7 @@ mutant_pain(edict_t *self, edict_t *other /* unused */,
return; /* no pain anims in nightmare */ return; /* no pain anims in nightmare */
} }
r = randk(); r = random();
if (r < 0.33) if (r < 0.33)
{ {
@ -820,7 +820,7 @@ mutant_die(edict_t *self, edict_t *inflictor /* unused */,
self->takedamage = DAMAGE_YES; self->takedamage = DAMAGE_YES;
self->s.skinnum = 1; self->s.skinnum = 1;
if (randk() < 0.5) if (random() < 0.5)
{ {
self->monsterinfo.currentmove = &mutant_move_death1; self->monsterinfo.currentmove = &mutant_move_death1;
} }

View File

@ -195,7 +195,7 @@ parasite_refidget(edict_t *self)
return; return;
} }
if (randk() <= 0.8) if (random() <= 0.8)
{ {
self->monsterinfo.currentmove = &parasite_move_fidget; self->monsterinfo.currentmove = &parasite_move_fidget;
} }
@ -457,7 +457,7 @@ parasite_pain(edict_t *self, edict_t *other /* unused */,
return; /* no pain anims in nightmare */ return; /* no pain anims in nightmare */
} }
if (randk() < 0.5) if (random() < 0.5)
{ {
gi.sound(self, CHAN_VOICE, sound_pain1, 1, ATTN_NORM, 0); gi.sound(self, CHAN_VOICE, sound_pain1, 1, ATTN_NORM, 0);
} }

View File

@ -48,7 +48,7 @@ soldier_idle(edict_t *self)
return; return;
} }
if (randk() > 0.8) if (random() > 0.8)
{ {
gi.sound(self, CHAN_VOICE, sound_idle, 1, ATTN_IDLE, 0); gi.sound(self, CHAN_VOICE, sound_idle, 1, ATTN_IDLE, 0);
} }
@ -179,7 +179,7 @@ soldier_stand(edict_t *self)
} }
if ((self->monsterinfo.currentmove == &soldier_move_stand3) || if ((self->monsterinfo.currentmove == &soldier_move_stand3) ||
(randk() < 0.8)) (random() < 0.8))
{ {
self->monsterinfo.currentmove = &soldier_move_stand1; self->monsterinfo.currentmove = &soldier_move_stand1;
} }
@ -197,7 +197,7 @@ soldier_walk1_random(edict_t *self)
return; return;
} }
if (randk() > 0.1) if (random() > 0.1)
{ {
self->monsterinfo.nextframe = FRAME_walk101; self->monsterinfo.nextframe = FRAME_walk101;
} }
@ -276,7 +276,7 @@ soldier_walk(edict_t *self)
return; return;
} }
if (randk() < 0.5) if (random() < 0.5)
{ {
self->monsterinfo.currentmove = &soldier_move_walk1; self->monsterinfo.currentmove = &soldier_move_walk1;
} }
@ -493,7 +493,7 @@ soldier_pain(edict_t *self, edict_t *other /* unused */,
return; /* no pain anims in nightmare */ return; /* no pain anims in nightmare */
} }
r = randk(); r = random();
if (r < 0.33) if (r < 0.33)
{ {
@ -590,8 +590,8 @@ soldier_fire(edict_t *self, int flash_number)
vectoangles(aim, dir); vectoangles(aim, dir);
AngleVectors(dir, forward, right, up); AngleVectors(dir, forward, right, up);
r = crandk() * 1000; r = crandom() * 1000;
u = crandk() * 500; u = crandom() * 500;
VectorMA(start, 8192, forward, end); VectorMA(start, 8192, forward, end);
VectorMA(end, r, right, end); VectorMA(end, r, right, end);
VectorMA(end, u, up, end); VectorMA(end, u, up, end);
@ -663,7 +663,7 @@ soldier_attack1_refire1(edict_t *self)
} }
if (((skill->value == 3) && if (((skill->value == 3) &&
(randk() < 0.5)) || (range(self, self->enemy) == RANGE_MELEE)) (random() < 0.5)) || (range(self, self->enemy) == RANGE_MELEE))
{ {
self->monsterinfo.nextframe = FRAME_attak102; self->monsterinfo.nextframe = FRAME_attak102;
} }
@ -692,7 +692,7 @@ soldier_attack1_refire2(edict_t *self)
} }
if (((skill->value == 3) && if (((skill->value == 3) &&
(randk() < 0.5)) || (range(self, self->enemy) == RANGE_MELEE)) (random() < 0.5)) || (range(self, self->enemy) == RANGE_MELEE))
{ {
self->monsterinfo.nextframe = FRAME_attak102; self->monsterinfo.nextframe = FRAME_attak102;
} }
@ -752,7 +752,7 @@ soldier_attack2_refire1(edict_t *self)
} }
if (((skill->value == 3) && if (((skill->value == 3) &&
(randk() < 0.5)) || (range(self, self->enemy) == RANGE_MELEE)) (random() < 0.5)) || (range(self, self->enemy) == RANGE_MELEE))
{ {
self->monsterinfo.nextframe = FRAME_attak204; self->monsterinfo.nextframe = FRAME_attak204;
} }
@ -781,7 +781,7 @@ soldier_attack2_refire2(edict_t *self)
} }
if (((skill->value == 3) && if (((skill->value == 3) &&
(randk() < 0.5)) || (range(self, self->enemy) == RANGE_MELEE)) (random() < 0.5)) || (range(self, self->enemy) == RANGE_MELEE))
{ {
self->monsterinfo.nextframe = FRAME_attak204; self->monsterinfo.nextframe = FRAME_attak204;
} }
@ -997,7 +997,7 @@ soldier_attack(edict_t *self)
if (self->s.skinnum < 4) if (self->s.skinnum < 4)
{ {
if (randk() < 0.5) if (random() < 0.5)
{ {
self->monsterinfo.currentmove = &soldier_move_attack1; self->monsterinfo.currentmove = &soldier_move_attack1;
} }
@ -1020,7 +1020,7 @@ soldier_sight(edict_t *self, edict_t *other /* unused */)
return; return;
} }
if (randk() < 0.5) if (random() < 0.5)
{ {
gi.sound(self, CHAN_VOICE, sound_sight1, 1, ATTN_NORM, 0); gi.sound(self, CHAN_VOICE, sound_sight1, 1, ATTN_NORM, 0);
} }
@ -1031,7 +1031,7 @@ soldier_sight(edict_t *self, edict_t *other /* unused */)
if ((skill->value > 0) && (range(self, self->enemy) >= RANGE_MID)) if ((skill->value > 0) && (range(self, self->enemy) >= RANGE_MID))
{ {
if (randk() > 0.5) if (random() > 0.5)
{ {
self->monsterinfo.currentmove = &soldier_move_attack6; self->monsterinfo.currentmove = &soldier_move_attack6;
} }
@ -1082,7 +1082,7 @@ soldier_dodge(edict_t *self, edict_t *attacker, float eta)
return; return;
} }
r = randk(); r = random();
if (r > 0.25) if (r > 0.25)
{ {
@ -1101,7 +1101,7 @@ soldier_dodge(edict_t *self, edict_t *attacker, float eta)
} }
self->monsterinfo.pausetime = level.time + eta + 0.3; self->monsterinfo.pausetime = level.time + eta + 0.3;
r = randk(); r = random();
if (skill->value == 1) if (skill->value == 1)
{ {

View File

@ -59,7 +59,7 @@ supertank_search(edict_t *self)
return; return;
} }
if (randk() < 0.5) if (random() < 0.5)
{ {
gi.sound(self, CHAN_VOICE, sound_search1, 1, ATTN_NORM, 0); gi.sound(self, CHAN_VOICE, sound_search1, 1, ATTN_NORM, 0);
} }
@ -566,7 +566,7 @@ supertank_reattack1(edict_t *self)
if (visible(self, self->enemy)) if (visible(self, self->enemy))
{ {
if (randk() < 0.9) if (random() < 0.9)
{ {
self->monsterinfo.currentmove = &supertank_move_attack1; self->monsterinfo.currentmove = &supertank_move_attack1;
} }
@ -603,7 +603,7 @@ supertank_pain(edict_t *self, edict_t *other /* unused */,
/* Lessen the chance of him going into his pain frames */ /* Lessen the chance of him going into his pain frames */
if (damage <= 25) if (damage <= 25)
{ {
if (randk() < 0.2) if (random() < 0.2)
{ {
return; return;
} }
@ -741,7 +741,7 @@ supertank_attack(edict_t *self)
else else
{ {
/* fire rockets more often at distance */ /* fire rockets more often at distance */
if (randk() < 0.3) if (random() < 0.3)
{ {
self->monsterinfo.currentmove = &supertank_move_attack1; self->monsterinfo.currentmove = &supertank_move_attack1;
} }

View File

@ -396,7 +396,7 @@ tank_pain(edict_t *self, edict_t *other /* other */,
if (damage <= 30) if (damage <= 30)
{ {
if (randk() > 0.2) if (random() > 0.2)
{ {
return; return;
} }
@ -649,7 +649,7 @@ tank_reattack_blaster(edict_t *self)
{ {
if (self->enemy->health > 0) if (self->enemy->health > 0)
{ {
if (randk() <= 0.6) if (random() <= 0.6)
{ {
self->monsterinfo.currentmove = &tank_move_reattack_blast; self->monsterinfo.currentmove = &tank_move_reattack_blast;
return; return;
@ -867,7 +867,7 @@ tank_refire_rocket(edict_t *self)
{ {
if (visible(self, self->enemy)) if (visible(self, self->enemy))
{ {
if (randk() <= 0.4) if (random() <= 0.4)
{ {
self->monsterinfo.currentmove = self->monsterinfo.currentmove =
&tank_move_attack_fire_rocket; &tank_move_attack_fire_rocket;
@ -913,7 +913,7 @@ tank_attack(edict_t *self)
VectorSubtract(self->enemy->s.origin, self->s.origin, vec); VectorSubtract(self->enemy->s.origin, self->s.origin, vec);
range = VectorLength(vec); range = VectorLength(vec);
r = randk(); r = random();
if (range <= 125) if (range <= 125)
{ {

View File

@ -907,7 +907,7 @@ Weapon_RocketLauncher_Fire(edict_t *ent)
return; return;
} }
damage = 100 + (int)(randk() * 20.0); damage = 100 + (int)(random() * 20.0);
radius_damage = 120; radius_damage = 120;
damage_radius = 120; damage_radius = 120;
@ -1210,11 +1210,11 @@ Machinegun_Fire(edict_t *ent)
for (i = 1; i < 3; i++) for (i = 1; i < 3; i++)
{ {
ent->client->kick_origin[i] = crandk() * 0.35; ent->client->kick_origin[i] = crandom() * 0.35;
ent->client->kick_angles[i] = crandk() * 0.7; ent->client->kick_angles[i] = crandom() * 0.7;
} }
ent->client->kick_origin[0] = crandk() * 0.35; ent->client->kick_origin[0] = crandom() * 0.35;
ent->client->kick_angles[0] = ent->client->machinegun_shots * -1.5; ent->client->kick_angles[0] = ent->client->machinegun_shots * -1.5;
/* raise the gun as it is firing */ /* raise the gun as it is firing */
@ -1252,12 +1252,12 @@ Machinegun_Fire(edict_t *ent)
if (ent->client->ps.pmove.pm_flags & PMF_DUCKED) if (ent->client->ps.pmove.pm_flags & PMF_DUCKED)
{ {
ent->s.frame = FRAME_crattak1 - (int)(randk() + 0.25); ent->s.frame = FRAME_crattak1 - (int)(random() + 0.25);
ent->client->anim_end = FRAME_crattak9; ent->client->anim_end = FRAME_crattak9;
} }
else else
{ {
ent->s.frame = FRAME_attack1 - (int)(randk() + 0.25); ent->s.frame = FRAME_attack1 - (int)(random() + 0.25);
ent->client->anim_end = FRAME_attack8; ent->client->anim_end = FRAME_attack8;
} }
} }
@ -1397,16 +1397,16 @@ Chaingun_Fire(edict_t *ent)
for (i = 0; i < 3; i++) for (i = 0; i < 3; i++)
{ {
ent->client->kick_origin[i] = crandk() * 0.35; ent->client->kick_origin[i] = crandom() * 0.35;
ent->client->kick_angles[i] = crandk() * 0.7; ent->client->kick_angles[i] = crandom() * 0.7;
} }
for (i = 0; i < shots; i++) for (i = 0; i < shots; i++)
{ {
/* get start / end positions */ /* get start / end positions */
AngleVectors(ent->client->v_angle, forward, right, up); AngleVectors(ent->client->v_angle, forward, right, up);
r = 7 + crandk() * 4; r = 7 + crandom() * 4;
u = crandk() * 4; u = crandom() * 4;
VectorSet(offset, 0, r, u + ent->viewheight - 8); VectorSet(offset, 0, r, u + ent->viewheight - 8);
P_ProjectSource(ent->client, ent->s.origin, offset, P_ProjectSource(ent->client, ent->s.origin, offset,
forward, right, start); forward, right, start);
@ -1731,7 +1731,7 @@ weapon_bfg_fire(edict_t *ent)
/* make a big pitch kick with an inverse fall */ /* make a big pitch kick with an inverse fall */
ent->client->v_dmg_pitch = -40; ent->client->v_dmg_pitch = -40;
ent->client->v_dmg_roll = crandk() * 8; ent->client->v_dmg_roll = crandom() * 8;
ent->client->v_dmg_time = level.time + DAMAGE_TIME; ent->client->v_dmg_time = level.time + DAMAGE_TIME;
VectorSet(offset, 8, 8, ent->viewheight - 8); VectorSet(offset, 8, 8, ent->viewheight - 8);