8
8
9
9
#include " pch_script.h"
10
10
#include " stalker_combat_actions.h"
11
- #include " ai/stalker /ai_stalker.h"
11
+ #include " Ai/Stalker /ai_stalker.h"
12
12
#include " script_game_object.h"
13
13
#include " script_game_object_impl.h"
14
14
#include " stalker_decision_space.h"
15
- #include " inventory .h"
15
+ #include " Inventory .h"
16
16
#include " cover_evaluators.h"
17
17
#include " cover_point.h"
18
18
#include " cover_manager.h"
19
- #include " missile .h"
19
+ #include " Missile .h"
20
20
#include " stalker_movement_restriction.h"
21
21
#include " movement_manager_space.h"
22
22
#include " detail_path_manager_space.h"
31
31
#include " agent_member_manager.h"
32
32
#include " agent_location_manager.h"
33
33
#include " danger_cover_location.h"
34
- #include " ai/stalker /ai_stalker_space.h"
35
- #include " weapon .h"
34
+ #include " Ai/Stalker /ai_stalker_space.h"
35
+ #include " Weapon .h"
36
36
#include " danger_manager.h"
37
37
#include " detail_path_manager.h"
38
- #include " weaponmagazined .h"
38
+ #include " WeaponMagazined .h"
39
39
#include " stalker_animation_manager.h"
40
40
#include " hit_memory_manager.h"
41
41
#include " level_path_manager.h"
@@ -504,10 +504,12 @@ void CStalkerActionTakeCover::execute()
504
504
505
505
inherited::execute ();
506
506
507
- if (!object ().memory ().enemy ().selected ())
507
+ const CEntityAlive* enemy = object ().memory ().enemy ().selected ();
508
+
509
+ if (!enemy)
508
510
return ;
509
511
510
- CMemoryInfo mem_object = object ().memory ().memory (object (). memory (). enemy (). selected () );
512
+ CMemoryInfo mem_object = object ().memory ().memory (enemy);
511
513
512
514
if (!mem_object.m_object )
513
515
return ;
@@ -537,26 +539,34 @@ void CStalkerActionTakeCover::execute()
537
539
// . Add fire here
538
540
// if (object().memory().visual().visible_now(object().memory().enemy().selected()) && object().can_kill_enemy())
539
541
// if (object().memory().visual().visible_now(object().memory().enemy().selected()))
540
- if (fire_make_sense ())
541
- {
542
- fire ();
543
- }
544
- else
545
- {
546
- aim_ready ();
547
- }
548
542
549
543
if (object ().movement ().path_completed ())
550
- { // && (object().memory().enemy().selected()->Position().distance_to_sqr(object().Position()) >= 10.f))
544
+ {// && (object().memory().enemy().selected()->Position().distance_to_sqr(object().Position()) >= 10.f))
551
545
object ().best_cover_can_try_advance ();
552
546
m_storage->set_property (eWorldPropertyInCover, true );
553
547
}
554
548
555
- if (object ().memory ().visual ().visible_now (object ().memory ().enemy ().selected ()))
549
+ // Alundaio: Fix CAIStalker shooting at walls or aiming at ceiling or floor during this action
550
+ u32 last_time_seen = object ().memory ().visual ().visible_object_time_last_seen (enemy);
551
+ if (last_time_seen != u32 (-1 ) && Device.dwTimeGlobal - last_time_seen <= 2000 && fire_make_sense ())
552
+ {
553
+ fire ();
554
+ }
555
+ else
556
+ aim_ready ();
557
+
558
+ if (object ().memory ().visual ().visible_now (enemy))
559
+ {
556
560
object ().sight ().setup (CSightAction (object ().memory ().enemy ().selected (), true , true ));
561
+ }
557
562
else
558
- object ().sight ().setup (
559
- CSightAction (SightManager::eSightTypePosition, mem_object.m_object_params .m_position , true ));
563
+ {
564
+ if (_abs (object ().Position ().y - enemy->Position ().y ) > 3 .f )
565
+ object ().sight ().setup (CSightAction (SightManager::eSightTypePathDirection));
566
+ else
567
+ object ().sight ().setup (CSightAction (SightManager::eSightTypePosition, mem_object.m_object_params .m_position , true ));
568
+ }
569
+ // -Alundaio
560
570
}
561
571
562
572
// ////////////////////////////////////////////////////////////////////////
@@ -631,8 +641,12 @@ void CStalkerActionLookOut::execute()
631
641
632
642
if (!mem_object.m_object )
633
643
return ;
634
-
635
- object ().sight ().setup (CSightAction (SightManager::eSightTypePosition, mem_object.m_object_params .m_position , true ));
644
+ // Alundaio: Prevent stalkers from staring at ceiling or floor for this action
645
+ if (_abs (object ().Position ().y - mem_object.m_object_params .m_position .y ) > 3 .f )
646
+ object ().sight ().setup (CSightAction (SightManager::eSightTypePathDirection));
647
+ else
648
+ object ().sight ().setup (CSightAction (SightManager::eSightTypePosition, mem_object.m_object_params .m_position , true ));
649
+ // -Alundaio
636
650
637
651
if (current_cover (m_object) >= 3 .f )
638
652
{
@@ -723,7 +737,12 @@ void CStalkerActionHoldPosition::execute()
723
737
if (current_cover (m_object) < 3 .f )
724
738
m_storage->set_property (eWorldPropertyLookedOut, false );
725
739
726
- object ().sight ().setup (CSightAction (SightManager::eSightTypePosition, mem_object.m_object_params .m_position , true ));
740
+ // Alundaio: Prevent stalkers from staring at floor or ceiling for this action
741
+ if (_abs (object ().Position ().y - mem_object.m_object_params .m_position .y ) > 3 .f )
742
+ object ().sight ().setup (CSightAction (SightManager::eSightTypePathDirection));
743
+ else
744
+ object ().sight ().setup (CSightAction (SightManager::eSightTypePosition, mem_object.m_object_params .m_position , true ));
745
+ // -Alundaio
727
746
728
747
if (completed ())
729
748
{
@@ -850,7 +869,12 @@ void CStalkerActionDetourEnemy::execute()
850
869
m_storage->set_property (eWorldPropertyEnemyDetoured, true );
851
870
}
852
871
853
- object ().sight ().setup (CSightAction (SightManager::eSightTypePosition, mem_object.m_object_params .m_position , true ));
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));
875
+ else
876
+ object ().sight ().setup (CSightAction (SightManager::eSightTypePosition, mem_object.m_object_params .m_position , true ));
877
+ // -Alundaio
854
878
}
855
879
856
880
// ////////////////////////////////////////////////////////////////////////
@@ -869,8 +893,7 @@ void CStalkerActionPostCombatWait::initialize()
869
893
if (object ().movement ().current_params ().cover ())
870
894
return ;
871
895
872
- object ().movement ().set_movement_type (eMovementTypeStand);
873
-
896
+ object ().movement ().set_movement_type (eMovementTypeRun); // Alundaio. Was eMovementTypeStand
874
897
EObjectAction action = eObjectActionAimReady1;
875
898
if (m_storage->property (eWorldPropertyKilledWounded))
876
899
action = eObjectActionIdle;
@@ -1024,22 +1047,30 @@ void CStalkerActionSuddenAttack::execute()
1024
1047
// Alundaio: Removed check to allow stalkers to sneak up on enemy even if they are in a group.
1025
1048
// if (object().agent_manager().member().combat_members().size() > 1)
1026
1049
// m_storage->set_property(eWorldPropertyUseSuddenness, false);
1027
- // Alundaio: END
1050
+ // - Alundaio
1028
1051
1029
- if (!object ().memory ().enemy ().selected ())
1052
+ const CEntityAlive* enemy = object ().memory ().enemy ().selected ();
1053
+ if (!enemy)
1030
1054
return ;
1031
1055
1032
- CMemoryInfo mem_object = object ().memory ().memory (object (). memory (). enemy (). selected () );
1056
+ CMemoryInfo mem_object = object ().memory ().memory (enemy);
1033
1057
1034
1058
if (!mem_object.m_object )
1035
1059
return ;
1036
1060
1037
- bool visible_now = object ().memory ().visual ().visible_now (object ().memory ().enemy ().selected ());
1061
+ // Alundaio: Don't aim at ceiling or floor
1062
+ bool visible_now = object ().memory ().visual ().visible_now (enemy);
1063
+
1038
1064
if (visible_now)
1039
- object ().sight ().setup (CSightAction (object (). memory (). enemy (). selected () , true ));
1065
+ object ().sight ().setup (CSightAction (enemy, true ));
1040
1066
else
1041
- object ().sight ().setup (
1042
- CSightAction (SightManager::eSightTypePosition, mem_object.m_object_params .m_position , true ));
1067
+ {
1068
+ if (_abs (object ().Position ().y - enemy->Position ().y ) >= 3 .f )
1069
+ object ().sight ().setup (CSightAction (SightManager::eSightTypePathDirection));
1070
+ else
1071
+ object ().sight ().setup (CSightAction (SightManager::eSightTypePosition, mem_object.m_object_params .m_position , true ));
1072
+ }
1073
+ // -Alundaio
1043
1074
1044
1075
if (object ().movement ().accessible (mem_object.m_object_params .m_level_vertex_id ))
1045
1076
object ().movement ().set_level_dest_vertex (mem_object.m_object_params .m_level_vertex_id );
@@ -1096,9 +1127,9 @@ void CStalkerActionSuddenAttack::execute()
1096
1127
}
1097
1128
}
1098
1129
1099
- CVisualMemoryManager* visual_memory_manager = object (). memory (). enemy (). selected () ->visual_memory ();
1130
+ CVisualMemoryManager* visual_memory_manager = enemy->visual_memory ();
1100
1131
VERIFY (visual_memory_manager);
1101
- if (object (). memory (). enemy (). selected () ->g_Alive () && !visual_memory_manager->visible_now (&object ()))
1132
+ if (enemy->g_Alive () && !visual_memory_manager->visible_now (&object ()))
1102
1133
return ;
1103
1134
1104
1135
m_storage->set_property (eWorldPropertyUseSuddenness, false );
0 commit comments