mirror of
https://github.com/nzp-team/quakec.git
synced 2024-11-22 20:01:34 +00:00
FTE/SERVER: Fix traceweapons not penetrating multiple enemies
This commit is contained in:
parent
b416568c7c
commit
b4f8a15cc3
2 changed files with 72 additions and 15 deletions
|
@ -783,3 +783,57 @@ void() Do_Zombie_AI = {
|
||||||
self = oself;
|
self = oself;
|
||||||
lastzombie = z;
|
lastzombie = z;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef FTE
|
||||||
|
|
||||||
|
void() AI_SetAllEnemiesBBOX =
|
||||||
|
{
|
||||||
|
entity list;
|
||||||
|
|
||||||
|
// First target zombies
|
||||||
|
list = find(world, classname, "ai_zombie");
|
||||||
|
while (list != world) {
|
||||||
|
list.solid = SOLID_BBOX;
|
||||||
|
|
||||||
|
if (list.head) list.head.solid = SOLID_BBOX;
|
||||||
|
if (list.larm) list.larm.solid = SOLID_BBOX;
|
||||||
|
if (list.rarm) list.rarm.solid = SOLID_BBOX;
|
||||||
|
|
||||||
|
list = find(list, classname, "ai_zombie");
|
||||||
|
}
|
||||||
|
|
||||||
|
// Now Dogs
|
||||||
|
list = find(world, classname, "ai_dog");
|
||||||
|
while (list != world) {
|
||||||
|
list.solid = SOLID_BBOX;
|
||||||
|
|
||||||
|
list = find(list, classname, "ai_dog");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void() AI_SetAllEnemiesCorpse =
|
||||||
|
{
|
||||||
|
entity list;
|
||||||
|
|
||||||
|
// First target zombies
|
||||||
|
list = find(world, classname, "ai_zombie");
|
||||||
|
while (list != world) {
|
||||||
|
list.solid = SOLID_CORPSE;
|
||||||
|
|
||||||
|
if (list.head) list.head.solid = SOLID_CORPSE;
|
||||||
|
if (list.larm) list.larm.solid = SOLID_CORPSE;
|
||||||
|
if (list.rarm) list.rarm.solid = SOLID_CORPSE;
|
||||||
|
|
||||||
|
list = find(list, classname, "ai_zombie");
|
||||||
|
}
|
||||||
|
|
||||||
|
// Now Dogs
|
||||||
|
list = find(world, classname, "ai_dog");
|
||||||
|
while (list != world) {
|
||||||
|
list.solid = SOLID_CORPSE;
|
||||||
|
|
||||||
|
list = find(list, classname, "ai_dog");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif // FTE
|
|
@ -30,6 +30,10 @@ void() W_PutOut;
|
||||||
void(float side) W_Reload;
|
void(float side) W_Reload;
|
||||||
void() GrenadeExplode;
|
void() GrenadeExplode;
|
||||||
void() W_SprintStart;
|
void() W_SprintStart;
|
||||||
|
#ifdef FTE
|
||||||
|
void() AI_SetAllEnemiesBBOX;
|
||||||
|
void() AI_SetAllEnemiesCorpse;
|
||||||
|
#endif // FTE
|
||||||
|
|
||||||
void() ReturnWeaponModel =
|
void() ReturnWeaponModel =
|
||||||
{
|
{
|
||||||
|
@ -991,21 +995,20 @@ void (float shotcount, float sprd, float Damage, float side) FireTrace =
|
||||||
hitent = world;
|
hitent = world;
|
||||||
while (!do_break && random() < getWeaponPenetration(self.weapon, penetration_times))
|
while (!do_break && random() < getWeaponPenetration(self.weapon, penetration_times))
|
||||||
{
|
{
|
||||||
while (1)
|
|
||||||
{
|
#ifdef FTE
|
||||||
traceline (trace_start_org, trace_start_org + dir, MOVE_HITMODEL, trace_ent);
|
|
||||||
|
AI_SetAllEnemiesBBOX();
|
||||||
if (hitent == world)
|
|
||||||
break;
|
#endif // FTE
|
||||||
/*if (hitent.larm == trace_ent || hitent.rarm == trace_ent || hitent.head == trace_ent)
|
|
||||||
{
|
traceline (trace_start_org, trace_start_org + dir, MOVE_HITMODEL, trace_ent);
|
||||||
hitent = trace_ent;
|
|
||||||
trace_start_org = trace_endpos + normalize(dir)*10;
|
#ifdef FTE
|
||||||
//break;
|
|
||||||
}*/
|
AI_SetAllEnemiesCorpse();
|
||||||
else
|
|
||||||
break;
|
#endif // FTE
|
||||||
}
|
|
||||||
|
|
||||||
if (trace_fraction != 1.0)
|
if (trace_fraction != 1.0)
|
||||||
TraceAttack (Damage, dir, trace_endpos, trace_plane_normal, trace_ent, side);
|
TraceAttack (Damage, dir, trace_endpos, trace_plane_normal, trace_ent, side);
|
||||||
|
|
Loading…
Reference in a new issue