mirror of
https://github.com/yquake2/rogue.git
synced 2024-11-22 20:31:50 +00:00
Parasite blocked attack bugfix and dead code elimination
This commit is contained in:
parent
ccd16599ef
commit
e04bd67aa3
18 changed files with 37 additions and 179 deletions
|
@ -24,104 +24,8 @@ int num_hint_paths;
|
|||
|
||||
qboolean face_wall(edict_t *self);
|
||||
qboolean monsterlost_checkhint2(edict_t *self);
|
||||
qboolean parasite_drain_attack_ok(vec3_t start, vec3_t end);
|
||||
void HuntTarget(edict_t *self);
|
||||
|
||||
qboolean
|
||||
blocked_checkshot(edict_t *self, float shotChance)
|
||||
{
|
||||
qboolean playerVisible;
|
||||
|
||||
if (!self)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
if (!self->enemy)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
/* blocked checkshot is only against players. this will
|
||||
filter out player sounds and other shit they should
|
||||
not be firing at. */
|
||||
if (!(self->enemy->client))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
if (random() < shotChance)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
if (!strcmp(self->classname, "monster_parasite"))
|
||||
{
|
||||
vec3_t f, r, offset, start, end;
|
||||
trace_t tr;
|
||||
AngleVectors(self->s.angles, f, r, NULL);
|
||||
VectorSet(offset, 24, 0, 6);
|
||||
G_ProjectSource(self->s.origin, offset, f, r, start);
|
||||
|
||||
VectorCopy(self->enemy->s.origin, end);
|
||||
|
||||
if (!parasite_drain_attack_ok(start, end))
|
||||
{
|
||||
end[2] = self->enemy->s.origin[2] + self->enemy->maxs[2] - 8;
|
||||
|
||||
if (!parasite_drain_attack_ok(start, end))
|
||||
{
|
||||
end[2] = self->enemy->s.origin[2] + self->enemy->mins[2] + 8;
|
||||
|
||||
if (!parasite_drain_attack_ok(start, end))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
VectorCopy(self->enemy->s.origin, end);
|
||||
|
||||
tr = gi.trace(start, NULL, NULL, end, self, MASK_SHOT);
|
||||
|
||||
if (tr.ent != self->enemy)
|
||||
{
|
||||
self->monsterinfo.aiflags |= AI_BLOCKED;
|
||||
|
||||
if (self->monsterinfo.attack)
|
||||
{
|
||||
self->monsterinfo.attack(self);
|
||||
}
|
||||
|
||||
self->monsterinfo.aiflags &= ~AI_BLOCKED;
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
playerVisible = visible(self, self->enemy);
|
||||
|
||||
/* always shoot at teslas */
|
||||
if (playerVisible)
|
||||
{
|
||||
if (!strcmp(self->enemy->classname, "tesla"))
|
||||
{
|
||||
/* turn on AI_BLOCKED to let the monster know the attack
|
||||
is being called by the blocked functions... */
|
||||
self->monsterinfo.aiflags |= AI_BLOCKED;
|
||||
|
||||
if (self->monsterinfo.attack)
|
||||
{
|
||||
self->monsterinfo.attack(self);
|
||||
}
|
||||
|
||||
self->monsterinfo.aiflags &= ~AI_BLOCKED;
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
qboolean
|
||||
blocked_checkplat(edict_t *self, float dist)
|
||||
{
|
||||
|
|
|
@ -924,7 +924,6 @@ void fire_tracker(edict_t *self, vec3_t start, vec3_t dir, int damage,
|
|||
int speed, edict_t *enemy);
|
||||
|
||||
/* g_newai.c */
|
||||
qboolean blocked_checkshot(edict_t *self, float shotChance);
|
||||
qboolean blocked_checkplat(edict_t *self, float dist);
|
||||
qboolean blocked_checkjump(edict_t *self, float dist, float maxDown, float maxUp);
|
||||
qboolean blocked_checknewenemy(edict_t *self);
|
||||
|
|
|
@ -977,11 +977,6 @@ chick_blocked(edict_t *self, float dist)
|
|||
return false;
|
||||
}
|
||||
|
||||
if (blocked_checkshot(self, 0.25 + (0.05 * skill->value)))
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
if (blocked_checkplat(self, dist))
|
||||
{
|
||||
return true;
|
||||
|
|
|
@ -804,16 +804,6 @@ floater_die(edict_t *self, edict_t *inflictor /* unused */, edict_t *attacker /*
|
|||
qboolean
|
||||
floater_blocked(edict_t *self, float dist)
|
||||
{
|
||||
if (!self)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
if (blocked_checkshot(self, 0.25 + (0.05 * skill->value)))
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
|
|
|
@ -991,10 +991,6 @@ flyer_blocked(edict_t *self, float dist)
|
|||
}
|
||||
|
||||
/* we're a normal flyer */
|
||||
if (blocked_checkshot(self, 0.25 + (0.05 * skill->value)))
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
|
|
@ -474,11 +474,6 @@ gladiator_blocked(edict_t *self, float dist)
|
|||
return false;
|
||||
}
|
||||
|
||||
if (blocked_checkshot(self, 0.25 + (0.05 * skill->value) ))
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
if (blocked_checkplat(self, dist))
|
||||
{
|
||||
return true;
|
||||
|
|
|
@ -1101,11 +1101,6 @@ gunner_blocked(edict_t *self, float dist)
|
|||
return false;
|
||||
}
|
||||
|
||||
if (blocked_checkshot(self, 0.25 + (0.05 * skill->value)))
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
if (blocked_checkplat(self, dist))
|
||||
{
|
||||
return true;
|
||||
|
|
|
@ -760,16 +760,6 @@ hover_die(edict_t *self, edict_t *inflictor /* unused */, edict_t *attacker /* u
|
|||
qboolean
|
||||
hover_blocked(edict_t *self, float dist)
|
||||
{
|
||||
if (!self)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
if (blocked_checkshot(self, 0.25 + (0.05 * skill->value)))
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
|
|
|
@ -821,11 +821,6 @@ infantry_blocked(edict_t *self, float dist)
|
|||
return false;
|
||||
}
|
||||
|
||||
if (blocked_checkshot(self, 0.25 + (0.05 * skill->value)))
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
if (blocked_checkjump(self, dist, 192, 40))
|
||||
{
|
||||
infantry_jump(self);
|
||||
|
|
|
@ -1866,11 +1866,6 @@ medic_blocked(edict_t *self, float dist)
|
|||
return false;
|
||||
}
|
||||
|
||||
if (blocked_checkshot(self, 0.25 + (0.05 * skill->value)))
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
if (blocked_checkplat(self, dist))
|
||||
{
|
||||
return true;
|
||||
|
|
|
@ -753,10 +753,39 @@ parasite_blocked(edict_t *self, float dist)
|
|||
return false;
|
||||
}
|
||||
|
||||
if (blocked_checkshot(self, 0.25 + (0.05 * skill->value)))
|
||||
if (self->enemy && self->enemy->client && random() >= (0.25 + (0.05 * skill->value)))
|
||||
{
|
||||
vec3_t f, r, offset, start, end;
|
||||
|
||||
AngleVectors(self->s.angles, f, r, NULL);
|
||||
VectorSet(offset, 24, 0, 6);
|
||||
G_ProjectSource(self->s.origin, offset, f, r, start);
|
||||
|
||||
VectorCopy(self->enemy->s.origin, end);
|
||||
|
||||
if (!parasite_drain_attack_ok(start, end))
|
||||
{
|
||||
end[2] = self->enemy->s.origin[2] + self->enemy->maxs[2] - 8;
|
||||
|
||||
if (!parasite_drain_attack_ok(start, end))
|
||||
{
|
||||
end[2] = self->enemy->s.origin[2] + self->enemy->mins[2] + 8;
|
||||
|
||||
if (!parasite_drain_attack_ok(start, end))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
VectorCopy(self->enemy->s.origin, end);
|
||||
|
||||
if (visible(self, self->enemy))
|
||||
{
|
||||
parasite_attack(self);
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
if (blocked_checkjump(self, dist, 256, 68))
|
||||
{
|
||||
|
|
|
@ -1182,11 +1182,6 @@ soldier_blocked(edict_t *self, float dist)
|
|||
return false;
|
||||
}
|
||||
|
||||
if (blocked_checkshot(self, 0.25 + (0.05 * skill->value)))
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
if (blocked_checkplat(self, dist))
|
||||
{
|
||||
return true;
|
||||
|
|
|
@ -1303,11 +1303,6 @@ stalker_blocked(edict_t *self, float dist)
|
|||
|
||||
if (!onCeiling)
|
||||
{
|
||||
if (blocked_checkshot(self, 0.25 + (0.05 * skill->value)))
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
if (visible(self, self->enemy))
|
||||
{
|
||||
stalker_do_pounce(self, self->enemy->s.origin);
|
||||
|
@ -1327,11 +1322,7 @@ stalker_blocked(edict_t *self, float dist)
|
|||
}
|
||||
else
|
||||
{
|
||||
if (blocked_checkshot(self, 0.25 + (0.05 * skill->value)))
|
||||
{
|
||||
return true;
|
||||
}
|
||||
else if (stalker_ok_to_transition(self))
|
||||
if (stalker_ok_to_transition(self))
|
||||
{
|
||||
self->gravityVector[2] = -1;
|
||||
self->s.angles[2] += 180.0;
|
||||
|
|
|
@ -834,11 +834,6 @@ supertank_blocked(edict_t *self, float dist)
|
|||
return false;
|
||||
}
|
||||
|
||||
if (blocked_checkshot(self, 0.25 + (0.05 * skill->value)))
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
if (blocked_checkplat(self, dist))
|
||||
{
|
||||
return true;
|
||||
|
|
|
@ -1178,11 +1178,12 @@ tank_die(edict_t *self, edict_t *inflictor /* unused */, edict_t *attacker /* un
|
|||
self->monsterinfo.currentmove = &tank_move_death;
|
||||
}
|
||||
|
||||
qboolean tank_blocked(edict_t *self, float dist)
|
||||
qboolean
|
||||
tank_blocked(edict_t *self, float dist)
|
||||
{
|
||||
if (blocked_checkshot(self, 0.25 + (0.05 * skill->value) ))
|
||||
if (!self)
|
||||
{
|
||||
return true;
|
||||
return false;
|
||||
}
|
||||
|
||||
if (blocked_checkplat(self, dist))
|
||||
|
|
|
@ -1765,11 +1765,6 @@ widow_blocked(edict_t *self, float dist)
|
|||
return true;
|
||||
}
|
||||
|
||||
if (blocked_checkshot(self, 0.25 + (0.05 * skill->value)))
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
|
|
|
@ -1105,7 +1105,6 @@ extern edict_t * hintpath_findstart ( edict_t * ent ) ;
|
|||
extern qboolean blocked_checknewenemy ( edict_t * self ) ;
|
||||
extern qboolean blocked_checkjump ( edict_t * self , float dist , float maxDown , float maxUp ) ;
|
||||
extern qboolean blocked_checkplat ( edict_t * self , float dist ) ;
|
||||
extern qboolean blocked_checkshot ( edict_t * self , float shotChance ) ;
|
||||
extern void monster_done_dodge ( edict_t * self ) ;
|
||||
extern void stationarymonster_start ( edict_t * self ) ;
|
||||
extern void stationarymonster_start_go ( edict_t * self ) ;
|
||||
|
|
|
@ -1105,7 +1105,6 @@
|
|||
{"blocked_checknewenemy", (byte *)blocked_checknewenemy},
|
||||
{"blocked_checkjump", (byte *)blocked_checkjump},
|
||||
{"blocked_checkplat", (byte *)blocked_checkplat},
|
||||
{"blocked_checkshot", (byte *)blocked_checkshot},
|
||||
{"monster_done_dodge", (byte *)monster_done_dodge},
|
||||
{"stationarymonster_start", (byte *)stationarymonster_start},
|
||||
{"stationarymonster_start_go", (byte *)stationarymonster_start_go},
|
||||
|
|
Loading…
Reference in a new issue