Skip to content

Commit f4319cf

Browse files
revolucasXottab-DUTY
authored andcommitted
= Improved the 'stalker don't stare through ceiling/floor' feature. Instead of sight towards path, now stalkers have sight towards direction of enemy but maintain looking straight ahead instead of looking straight up or down when enemy is on a different elevation.
1 parent 4e6fee9 commit f4319cf

File tree

1 file changed

+53
-55
lines changed

1 file changed

+53
-55
lines changed

src/xrGame/stalker_combat_actions.cpp

Lines changed: 53 additions & 55 deletions
Original file line numberDiff line numberDiff line change
@@ -434,25 +434,23 @@ void CStalkerActionKillEnemy::execute()
434434
#endif // TEST_MENTAL_STATE
435435

436436
inherited::execute();
437-
//Alundaio
438-
if (object().memory().enemy().selected() && object().memory().enemy().selected()->g_Alive())
439-
{
440-
object().sight().setup(CSightAction(object().memory().enemy().selected(), true, true));
437+
//Alundaio: Prevent Stalkers from shooting at walls for prolonged periods due to kill if not visible
438+
const CEntityAlive* enemy = object().memory().enemy().selected();
439+
if (!enemy || !enemy->g_Alive())
440+
return;
441441

442-
// u32 min_queue_size, max_queue_size, min_queue_interval, max_queue_interval;
443-
// float distance = object().memory().enemy().selected()->Position().distance_to(object().Position());
444-
// select_queue_params(distance,min_queue_size, max_queue_size, min_queue_interval, max_queue_interval);
445-
// object().CObjectHandler::set_goal (eObjectActionFire1,object().best_weapon(),min_queue_size, max_queue_size, min_queue_interval, max_queue_interval);
446-
fire();
442+
CMemoryInfo mem_object = object().memory().memory(enemy);
443+
if (!mem_object.m_object)
444+
return;
447445

448-
CMemoryInfo mem_object = object().memory().memory(object().memory().enemy().selected());
446+
object().best_cover(mem_object.m_object_params.m_position);
449447

450-
if (mem_object.m_object)
451-
object().best_cover(mem_object.m_object_params.m_position);
448+
u32 last_time_seen = object().memory().visual().visible_object_time_last_seen(enemy);
449+
if (last_time_seen != u32(-1) && Device.dwTimeGlobal - last_time_seen <= 2000)
450+
{
451+
object().sight().setup(CSightAction(enemy, true, true));
452+
fire();
452453
}
453-
else
454-
object().sight().setup(CSightAction(SightManager::eSightTypePathDirection, true, true));
455-
456454
//Alundaio: END
457455
}
458456

@@ -505,12 +503,10 @@ void CStalkerActionTakeCover::execute()
505503
inherited::execute();
506504

507505
const CEntityAlive* enemy = object().memory().enemy().selected();
508-
509506
if (!enemy)
510507
return;
511508

512509
CMemoryInfo mem_object = object().memory().memory(enemy);
513-
514510
if (!mem_object.m_object)
515511
return;
516512

@@ -540,13 +536,7 @@ void CStalkerActionTakeCover::execute()
540536
// if (object().memory().visual().visible_now(object().memory().enemy().selected()) && object().can_kill_enemy())
541537
// if (object().memory().visual().visible_now(object().memory().enemy().selected()))
542538

543-
if (object().movement().path_completed())
544-
{// && (object().memory().enemy().selected()->Position().distance_to_sqr(object().Position()) >= 10.f))
545-
object().best_cover_can_try_advance();
546-
m_storage->set_property(eWorldPropertyInCover, true);
547-
}
548-
549-
//Alundaio: Fix CAIStalker shooting at walls or aiming at ceiling or floor during this action
539+
//Alundaio: Fix shooting at walls or aiming at ceiling or floor during this action
550540
u32 last_time_seen = object().memory().visual().visible_object_time_last_seen(enemy);
551541
if (last_time_seen != u32(-1) && Device.dwTimeGlobal - last_time_seen <= 2000 && fire_make_sense())
552542
{
@@ -561,8 +551,11 @@ void CStalkerActionTakeCover::execute()
561551
}
562552
else
563553
{
564-
if (_abs(object().Position().y - enemy->Position().y) > 3.f)
565-
object().sight().setup(CSightAction(SightManager::eSightTypePathDirection));
554+
if (_abs(object().Position().y - mem_object.m_object_params.m_position.y) > 3.f)
555+
{
556+
Fvector3 Vpos = { mem_object.m_object_params.m_position.x, object().Position().y + 1.f, mem_object.m_object_params.m_position.z };
557+
object().sight().setup(CSightAction(SightManager::eSightTypePosition, Vpos, true));
558+
}
566559
else
567560
object().sight().setup(CSightAction(SightManager::eSightTypePosition, mem_object.m_object_params.m_position, true));
568561
}
@@ -634,16 +627,20 @@ void CStalkerActionLookOut::execute()
634627

635628
inherited::execute();
636629

637-
if (!object().memory().enemy().selected())
630+
const CEntityAlive* enemy = object().memory().enemy().selected();
631+
if (!enemy)
638632
return;
639633

640-
CMemoryInfo mem_object = object().memory().memory(object().memory().enemy().selected());
641-
634+
CMemoryInfo mem_object = object().memory().memory(enemy);
642635
if (!mem_object.m_object)
643636
return;
644-
//Alundaio: Prevent stalkers from staring at ceiling or floor for this action
637+
638+
//Alundaio: Prevent stalkers from staring at floor or ceiling for this action
645639
if (_abs(object().Position().y - mem_object.m_object_params.m_position.y) > 3.f)
646-
object().sight().setup(CSightAction(SightManager::eSightTypePathDirection));
640+
{
641+
Fvector3 Vpos = { mem_object.m_object_params.m_position.x, object().Position().y + 1.f, mem_object.m_object_params.m_position.z };
642+
object().sight().setup(CSightAction(SightManager::eSightTypePosition, Vpos, true));
643+
}
647644
else
648645
object().sight().setup(CSightAction(SightManager::eSightTypePosition, mem_object.m_object_params.m_position, true));
649646
//-Alundaio
@@ -679,15 +676,7 @@ void CStalkerActionLookOut::execute()
679676
// object().movement().set_nearest_accessible_position ();
680677
// }
681678

682-
if (object().memory().enemy().selected())
683-
{
684-
CMemoryInfo mem_object = object().memory().memory(object().memory().enemy().selected());
685-
686-
if (mem_object.m_object)
687-
{
688-
object().best_cover(mem_object.m_object_params.m_position);
689-
}
690-
}
679+
object().best_cover(mem_object.m_object_params.m_position);
691680
}
692681

693682
//////////////////////////////////////////////////////////////////////////
@@ -726,11 +715,11 @@ void CStalkerActionHoldPosition::execute()
726715

727716
inherited::execute();
728717

729-
if (!object().memory().enemy().selected())
718+
const CEntityAlive* enemy = object().memory().enemy().selected();
719+
if (!enemy)
730720
return;
731721

732-
CMemoryInfo mem_object = object().memory().memory(object().memory().enemy().selected());
733-
722+
CMemoryInfo mem_object = object().memory().memory(enemy);
734723
if (!mem_object.m_object)
735724
return;
736725

@@ -739,7 +728,10 @@ void CStalkerActionHoldPosition::execute()
739728

740729
//Alundaio: Prevent stalkers from staring at floor or ceiling for this action
741730
if (_abs(object().Position().y - mem_object.m_object_params.m_position.y) > 3.f)
742-
object().sight().setup(CSightAction(SightManager::eSightTypePathDirection));
731+
{
732+
Fvector3 Vpos = { mem_object.m_object_params.m_position.x, object().Position().y + 1.f, mem_object.m_object_params.m_position.z };
733+
object().sight().setup(CSightAction(SightManager::eSightTypePosition, Vpos, true));
734+
}
743735
else
744736
object().sight().setup(CSightAction(SightManager::eSightTypePosition, mem_object.m_object_params.m_position, true));
745737
//-Alundaio
@@ -832,12 +824,11 @@ void CStalkerActionDetourEnemy::execute()
832824

833825
inherited::execute();
834826

835-
//Alundaio: Sanity
836-
if (!object().memory().enemy().selected())
827+
const CEntityAlive* enemy = object().memory().enemy().selected();
828+
if (!enemy)
837829
return;
838-
//Alundaio: END
839830

840-
CMemoryInfo mem_object = object().memory().memory(object().memory().enemy().selected());
831+
CMemoryInfo mem_object = object().memory().memory(enemy);
841832

842833
if (!mem_object.m_object)
843834
return;
@@ -869,9 +860,12 @@ void CStalkerActionDetourEnemy::execute()
869860
m_storage->set_property(eWorldPropertyEnemyDetoured, true);
870861
}
871862

872-
//Alundaio: Prevent stalkers from looking at ceiling or floor during action
873-
if (_abs(object().Position().y - mem_object.m_object_params.m_position.y) >= 3.f)
874-
object().sight().setup(CSightAction(SightManager::eSightTypePathDirection));
863+
//Alundaio: Prevent stalkers from staring at floor or ceiling for this action
864+
if (_abs(object().Position().y - mem_object.m_object_params.m_position.y) > 3.f)
865+
{
866+
Fvector3 Vpos = { mem_object.m_object_params.m_position.x, object().Position().y + 1.f, mem_object.m_object_params.m_position.z };
867+
object().sight().setup(CSightAction(SightManager::eSightTypePosition, Vpos, true));
868+
}
875869
else
876870
object().sight().setup(CSightAction(SightManager::eSightTypePosition, mem_object.m_object_params.m_position, true));
877871
//-Alundaio
@@ -1054,7 +1048,6 @@ void CStalkerActionSuddenAttack::execute()
10541048
return;
10551049

10561050
CMemoryInfo mem_object = object().memory().memory(enemy);
1057-
10581051
if (!mem_object.m_object)
10591052
return;
10601053

@@ -1065,12 +1058,17 @@ void CStalkerActionSuddenAttack::execute()
10651058
object().sight().setup(CSightAction(enemy, true));
10661059
else
10671060
{
1068-
if (_abs(object().Position().y - enemy->Position().y) >= 3.f)
1069-
object().sight().setup(CSightAction(SightManager::eSightTypePathDirection));
1061+
//Alundaio: Prevent stalkers from staring at floor or ceiling for this action
1062+
if (_abs(object().Position().y - mem_object.m_object_params.m_position.y) > 3.f)
1063+
{
1064+
Fvector3 Vpos = {mem_object.m_object_params.m_position.x, object().Position().y + 1.f, mem_object.m_object_params.m_position.z};
1065+
object().sight().setup(CSightAction(SightManager::eSightTypePosition, Vpos, true));
1066+
}
10701067
else
10711068
object().sight().setup(CSightAction(SightManager::eSightTypePosition, mem_object.m_object_params.m_position, true));
1069+
//-Alundaio
10721070
}
1073-
//-Alundaio
1071+
10741072

10751073
if (object().movement().accessible(mem_object.m_object_params.m_level_vertex_id))
10761074
object().movement().set_level_dest_vertex(mem_object.m_object_params.m_level_vertex_id);

0 commit comments

Comments
 (0)