mirror of
https://github.com/yquake2/rogue.git
synced 2024-11-29 15:32:33 +00:00
Change show_hostile from int to float and remove unnecessary casts.
In the vanilla code show_hostile was a qboolean what's clearly wrong. For wome reasons I don't remember I changed it to an integer and added the casts. This is problematic because show_hostile is derived from level.time which is a float. The loss in precision broke some corner cases like monsters becoming activated when they shouldn't. Found, analyzed and reported by @BjossiAlfreds in yquake2/yquake2#525.
This commit is contained in:
parent
6fb2d6e4da
commit
f0793d17f8
2 changed files with 5 additions and 5 deletions
|
@ -503,7 +503,7 @@ FoundTarget(edict_t *self)
|
||||||
level.sight_entity->light_level = 128;
|
level.sight_entity->light_level = 128;
|
||||||
}
|
}
|
||||||
|
|
||||||
self->show_hostile = (int)level.time + 1; /* wake up other monsters */
|
self->show_hostile = level.time + 1; /* wake up other monsters */
|
||||||
|
|
||||||
VectorCopy(self->enemy->s.origin, self->monsterinfo.last_sighting);
|
VectorCopy(self->enemy->s.origin, self->monsterinfo.last_sighting);
|
||||||
self->monsterinfo.trail_time = level.time;
|
self->monsterinfo.trail_time = level.time;
|
||||||
|
@ -692,7 +692,7 @@ FindTarget(edict_t *self)
|
||||||
|
|
||||||
if (r == RANGE_NEAR)
|
if (r == RANGE_NEAR)
|
||||||
{
|
{
|
||||||
if ((client->show_hostile < (int)level.time) && !infront(self, client))
|
if ((client->show_hostile < level.time) && !infront(self, client))
|
||||||
{
|
{
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
@ -1199,7 +1199,7 @@ ai_checkattack(edict_t *self, float dist)
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
self->show_hostile = (int)level.time + 1;
|
self->show_hostile = level.time + 1;
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1279,7 +1279,7 @@ ai_checkattack(edict_t *self, float dist)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
self->show_hostile = (int)level.time + 1; /* wake up other monsters */
|
self->show_hostile = level.time + 1; /* wake up other monsters */
|
||||||
|
|
||||||
/* check knowledge of enemy */
|
/* check knowledge of enemy */
|
||||||
enemy_vis = visible(self, self->enemy);
|
enemy_vis = visible(self, self->enemy);
|
||||||
|
|
|
@ -1238,8 +1238,8 @@ struct edict_s
|
||||||
int max_health;
|
int max_health;
|
||||||
int gib_health;
|
int gib_health;
|
||||||
int deadflag;
|
int deadflag;
|
||||||
int show_hostile;
|
|
||||||
|
|
||||||
|
float show_hostile;
|
||||||
float powerarmor_time;
|
float powerarmor_time;
|
||||||
|
|
||||||
char *map; /* target_changelevel */
|
char *map; /* target_changelevel */
|
||||||
|
|
Loading…
Reference in a new issue