mirror of
https://github.com/acemod/ACE3.git
synced 2024-08-30 18:23:18 +00:00
Add AIM-120 with ARH. Change AHR to not always seek all targets
This commit is contained in:
parent
34af87bb07
commit
789ae1cbe4
1
addons/aim120/$PBOPREFIX$
Normal file
1
addons/aim120/$PBOPREFIX$
Normal file
@ -0,0 +1 @@
|
|||||||
|
z\ace\addons\aim120
|
74
addons/aim120/CfgAmmo.hpp
Normal file
74
addons/aim120/CfgAmmo.hpp
Normal file
@ -0,0 +1,74 @@
|
|||||||
|
class CfgAmmo {
|
||||||
|
class ammo_Missile_AMRAAM_C;
|
||||||
|
class GVAR(c): ammo_Missile_AMRAAM_C {
|
||||||
|
author = "Brandon (TCVM)";
|
||||||
|
maneuvrability = 0;
|
||||||
|
class ace_missileguidance {
|
||||||
|
enabled = 1;
|
||||||
|
|
||||||
|
pitchRate = 60; // Minium flap deflection for guidance
|
||||||
|
yawRate = 60; // Maximum flap deflection for guidance
|
||||||
|
|
||||||
|
canVanillaLock = 1; // Can this default vanilla lock? Only applicable to non-cadet mode
|
||||||
|
|
||||||
|
// Guidance type for munitions
|
||||||
|
defaultSeekerType = "ARH";
|
||||||
|
seekerTypes[] = { "ARH" };
|
||||||
|
lockableTypes[] = {"Air"};
|
||||||
|
|
||||||
|
defaultSeekerLockMode = "LOAL";
|
||||||
|
seekerLockModes[] = { "LOAL", "LOBL" };
|
||||||
|
|
||||||
|
defaultNavigationType = "ProportionalNavigation";
|
||||||
|
navigationTypes[] = { "ProportionalNavigation" };
|
||||||
|
|
||||||
|
seekLastTargetPos = 0; // seek last target position [if seeker loses LOS of target, continue to last known pos]
|
||||||
|
seekerAngle = 50; // Angle from the shooter's view that can track the missile
|
||||||
|
seekerAccuracy = 1; // seeker accuracy multiplier
|
||||||
|
|
||||||
|
seekerMinRange = 75;
|
||||||
|
seekerMaxRange = 2500; // Range from the missile which the seeker can visually search
|
||||||
|
|
||||||
|
// Attack profile type selection
|
||||||
|
defaultAttackProfile = "LIN";
|
||||||
|
attackProfiles[] = {"LIN"};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
class ammo_Missile_AMRAAM_D;
|
||||||
|
class GVAR(d): ammo_Missile_AMRAAM_D {
|
||||||
|
author = "Brandon (TCVM)";
|
||||||
|
maneuvrability = 0;
|
||||||
|
class ace_missileguidance {
|
||||||
|
enabled = 1;
|
||||||
|
|
||||||
|
pitchRate = 80; // Minium flap deflection for guidance
|
||||||
|
yawRate = 80; // Maximum flap deflection for guidance
|
||||||
|
|
||||||
|
canVanillaLock = 1; // Can this default vanilla lock? Only applicable to non-cadet mode
|
||||||
|
|
||||||
|
// Guidance type for munitions
|
||||||
|
defaultSeekerType = "ARH";
|
||||||
|
seekerTypes[] = { "ARH" };
|
||||||
|
lockableTypes[] = {"Air"};
|
||||||
|
|
||||||
|
defaultSeekerLockMode = "LOAL";
|
||||||
|
seekerLockModes[] = { "LOAL", "LOBL" };
|
||||||
|
|
||||||
|
defaultNavigationType = "ProportionalNavigation";
|
||||||
|
navigationTypes[] = { "ProportionalNavigation" };
|
||||||
|
|
||||||
|
seekLastTargetPos = 0; // seek last target position [if seeker loses LOS of target, continue to last known pos]
|
||||||
|
seekerAngle = 50; // Angle from the shooter's view that can track the missile
|
||||||
|
seekerAccuracy = 1; // seeker accuracy multiplier
|
||||||
|
|
||||||
|
seekerMinRange = 75;
|
||||||
|
seekerMaxRange = 2500; // Range from the missile which the seeker can visually search
|
||||||
|
|
||||||
|
// Attack profile type selection
|
||||||
|
defaultAttackProfile = "LIN";
|
||||||
|
attackProfiles[] = {"LIN"};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
60
addons/aim120/CfgMagazines.hpp
Normal file
60
addons/aim120/CfgMagazines.hpp
Normal file
@ -0,0 +1,60 @@
|
|||||||
|
class CfgMagazines {
|
||||||
|
class magazine_Missile_AMRAAM_C_x1;
|
||||||
|
class PylonMissile_Missile_AMRAAM_C_x1;
|
||||||
|
class PylonRack_Missile_AMRAAM_C_x1;
|
||||||
|
class PylonRack_Missile_AMRAAM_C_x2;
|
||||||
|
class PylonMissile_Missile_AMRAAM_D_x1;
|
||||||
|
class PylonMissile_Missile_AMRAAM_D_INT_x1;
|
||||||
|
class PylonRack_Missile_AMRAAM_D_x1;
|
||||||
|
class PylonRack_Missile_AMRAAM_D_x2;
|
||||||
|
|
||||||
|
class GVAR(c): magazine_Missile_AMRAAM_C_x1 {
|
||||||
|
author = "Brandon (TCVM)";
|
||||||
|
displayName = "1x AIM-120C [ACE]";
|
||||||
|
ammo = QGVAR(c);
|
||||||
|
};
|
||||||
|
class GVAR(PylonMissile_Missile_c_x1): PylonMissile_Missile_AMRAAM_C_x1 {
|
||||||
|
author = "Brandon (TCVM)";
|
||||||
|
displayName = "1x AIM-120C [ACE]";
|
||||||
|
ammo = QGVAR(c);
|
||||||
|
pylonWeapon = GVAR(aim120Launcher);
|
||||||
|
};
|
||||||
|
class GVAR(PylonRack_Missile_c_x1): PylonRack_Missile_AMRAAM_C_x1 {
|
||||||
|
author = "Brandon (TCVM)";
|
||||||
|
displayName = "1x AIM-120C [ACE]";
|
||||||
|
ammo = QGVAR(c);
|
||||||
|
pylonWeapon = GVAR(aim120Launcher);
|
||||||
|
};
|
||||||
|
class GVAR(PylonRack_Missile_c_x2): PylonRack_Missile_AMRAAM_C_x2 {
|
||||||
|
author = "Brandon (TCVM)";
|
||||||
|
displayName = "2x AIM-120C [ACE]";
|
||||||
|
ammo = QGVAR(c);
|
||||||
|
pylonWeapon = GVAR(aim120Launcher);
|
||||||
|
};
|
||||||
|
|
||||||
|
class GVAR(PylonMissile_Missile_d_x1): PylonMissile_Missile_AMRAAM_D_x1 {
|
||||||
|
author = "Brandon (TCVM)";
|
||||||
|
displayName = "1x AIM-120D [ACE]";
|
||||||
|
ammo = QGVAR(d);
|
||||||
|
pylonWeapon = GVAR(aim120Launcher);
|
||||||
|
};
|
||||||
|
class GVAR(PylonMissile_Missile_d_INT_x1): PylonMissile_Missile_AMRAAM_D_INT_x1 {
|
||||||
|
author = "Brandon (TCVM)";
|
||||||
|
displayName = "1x AIM-120D [ACE]";
|
||||||
|
ammo = QGVAR(d);
|
||||||
|
pylonWeapon = GVAR(aim120Launcher);
|
||||||
|
};
|
||||||
|
class GVAR(PylonRack_Missile_d_x1): PylonRack_Missile_AMRAAM_D_x1 {
|
||||||
|
author = "Brandon (TCVM)";
|
||||||
|
displayName = "1x AIM-120D [ACE]";
|
||||||
|
ammo = QGVAR(d);
|
||||||
|
pylonWeapon = GVAR(aim120Launcher);
|
||||||
|
};
|
||||||
|
class GVAR(PylonRack_Missile_d_x2): PylonRack_Missile_AMRAAM_D_x2 {
|
||||||
|
author = "Brandon (TCVM)";
|
||||||
|
displayName = "2x AIM-120D [ACE]";
|
||||||
|
ammo = QGVAR(d);
|
||||||
|
pylonWeapon = GVAR(aim120Launcher);
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
10
addons/aim120/CfgWeapons.hpp
Normal file
10
addons/aim120/CfgWeapons.hpp
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
class CfgWeapons {
|
||||||
|
class weapon_AMRAAMLauncher;
|
||||||
|
class GVAR(aim120Launcher): weapon_AMRAAMLauncher {
|
||||||
|
author = "Brandon (TCVM)";
|
||||||
|
displayName = "AIM-120 [ACE]";
|
||||||
|
|
||||||
|
magazines[] = { QGVAR(c), QGVAR(PylonMissile_Missile_c_x1), QGVAR(PylonRack_Missile_c_x1), QGVAR(PylonRack_Missile_c_x2), QGVAR(PylonMissile_Missile_d_x1), QGVAR(PylonMissile_Missile_d_INT_x1), QGVAR(PylonRack_Missile_d_x1), QGVAR(PylonRack_Missile_d_x2)};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
12
addons/aim120/README.md
Normal file
12
addons/aim120/README.md
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
ace_aim120
|
||||||
|
===================
|
||||||
|
|
||||||
|
Adds AIM-120, AIM-132, and R-77 AHR missiles
|
||||||
|
|
||||||
|
|
||||||
|
## Maintainers
|
||||||
|
|
||||||
|
The people responsible for merging changes to this component or answering potential questions.
|
||||||
|
|
||||||
|
- [Brandon-TCVM](https://github.com/TheCandianVendingMachine)
|
||||||
|
|
20
addons/aim120/config.cpp
Normal file
20
addons/aim120/config.cpp
Normal file
@ -0,0 +1,20 @@
|
|||||||
|
#include "script_component.hpp"
|
||||||
|
|
||||||
|
class CfgPatches {
|
||||||
|
class ADDON {
|
||||||
|
name = COMPONENT_NAME;
|
||||||
|
units[] = {};
|
||||||
|
weapons[] = {};
|
||||||
|
requiredVersion = REQUIRED_VERSION;
|
||||||
|
requiredAddons[] = {"ace_common","ace_missileguidance"};
|
||||||
|
author = ECSTRING(common,ACETeam);
|
||||||
|
authors[] = {"Brandon (TCVM)"};
|
||||||
|
url = ECSTRING(main,URL);
|
||||||
|
VERSION_CONFIG;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
#include "CfgAmmo.hpp"
|
||||||
|
#include "CfgMagazines.hpp"
|
||||||
|
#include "CfgWeapons.hpp"
|
||||||
|
|
18
addons/aim120/script_component.hpp
Normal file
18
addons/aim120/script_component.hpp
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
#define COMPONENT aim120
|
||||||
|
#define COMPONENT_BEAUTIFIED AIM-120
|
||||||
|
#include "\z\ace\addons\main\script_mod.hpp"
|
||||||
|
|
||||||
|
// #define DEBUG_MODE_FULL
|
||||||
|
// #define DISABLE_COMPILE_CACHE
|
||||||
|
// #define ENABLE_PERFORMANCE_COUNTERS
|
||||||
|
|
||||||
|
#ifdef DEBUG_ENABLED_AIM120
|
||||||
|
#define DEBUG_MODE_FULL
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef DEBUG_SETTINGS_AIM120
|
||||||
|
#define DEBUG_SETTINGS DEBUG_SETTINGS_GBU
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#include "\z\ace\addons\main\script_macros.hpp"
|
||||||
|
|
@ -10,7 +10,7 @@
|
|||||||
#define DEBUG_MODE_FULL
|
#define DEBUG_MODE_FULL
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef DEBUG_SETTINGS_HOT
|
#ifdef DEBUG_SETTINGS_GBU
|
||||||
#define DEBUG_SETTINGS DEBUG_SETTINGS_GBU
|
#define DEBUG_SETTINGS DEBUG_SETTINGS_GBU
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -38,6 +38,8 @@ private _activeRadarDistance = [_config >> "activeRadarEngageDistance", "NUMBER"
|
|||||||
private _projectileThrust = [_projectileConfig >> "thrust", "NUMBER", 0] call CBA_fnc_getConfigEntry;
|
private _projectileThrust = [_projectileConfig >> "thrust", "NUMBER", 0] call CBA_fnc_getConfigEntry;
|
||||||
private _projectileThrustTime = [_projectileConfig >> "thrustTime", "NUMBER", 0] call CBA_fnc_getConfigEntry;
|
private _projectileThrustTime = [_projectileConfig >> "thrustTime", "NUMBER", 0] call CBA_fnc_getConfigEntry;
|
||||||
|
|
||||||
|
private _lockTypes = [_config >> "lockableTypes", "ARRAY", ["Air", "LandVehicle", "Ship"]] call CBA_fnc_getConfigEntry;
|
||||||
|
|
||||||
private _velocityAtImpact = _projectileThrust * _projectileThrustTime;
|
private _velocityAtImpact = _projectileThrust * _projectileThrustTime;
|
||||||
private _timeToActive = 0;
|
private _timeToActive = 0;
|
||||||
if (!isNil "_target" && _velocityAtImpact > 0) then {
|
if (!isNil "_target" && _velocityAtImpact > 0) then {
|
||||||
@ -70,4 +72,5 @@ _seekerStateParams set [6, false];
|
|||||||
_seekerStateParams set [7, [0, 0, 0]];
|
_seekerStateParams set [7, [0, 0, 0]];
|
||||||
_seekerStateParams set [8, CBA_missionTime];
|
_seekerStateParams set [8, CBA_missionTime];
|
||||||
_seekerStateParams set [9, isNull _target];
|
_seekerStateParams set [9, isNull _target];
|
||||||
|
_seekerStateParams set [10, _lockTypes];
|
||||||
|
|
||||||
|
@ -20,7 +20,7 @@ _args params ["_firedEH", "_launchParams", "", "_seekerParams", "_stateParams"];
|
|||||||
_firedEH params ["_shooter","","","","","","_projectile"];
|
_firedEH params ["_shooter","","","","","","_projectile"];
|
||||||
_launchParams params ["_target","","","",""];
|
_launchParams params ["_target","","","",""];
|
||||||
_seekerParams params ["_seekerAngle", "", "_seekerMaxRange"];
|
_seekerParams params ["_seekerAngle", "", "_seekerMaxRange"];
|
||||||
_seekerStateParams params ["_isActive", "_activeRadarEngageDistance", "_timeWhenActive", "_expectedTargetPos", "_lastTargetPollTime", "_shooterHasRadar", "_wasActive", "_lastKnownVelocity", "_lastTimeSeen", "_doesntHaveTarget"];
|
_seekerStateParams params ["_isActive", "_activeRadarEngageDistance", "_timeWhenActive", "_expectedTargetPos", "_lastTargetPollTime", "_shooterHasRadar", "_wasActive", "_lastKnownVelocity", "_lastTimeSeen", "_doesntHaveTarget", "_lockTypes"];
|
||||||
|
|
||||||
if (_isActive || { CBA_missionTime >= _timeWhenActive }) then {
|
if (_isActive || { CBA_missionTime >= _timeWhenActive }) then {
|
||||||
if !(_isActive) then {
|
if !(_isActive) then {
|
||||||
@ -60,7 +60,7 @@ if (_isActive || { CBA_missionTime >= _timeWhenActive }) then {
|
|||||||
_seekerBaseRadiusAdjusted = _seekerBaseRadiusAtGround;
|
_seekerBaseRadiusAdjusted = _seekerBaseRadiusAtGround;
|
||||||
};
|
};
|
||||||
// Look in front of seeker for any targets
|
// Look in front of seeker for any targets
|
||||||
private _nearestObjects = nearestObjects [ASLtoAGL _searchPos, ["Air", "LandVehicle", "Ship"], _seekerBaseRadiusAdjusted, false];
|
private _nearestObjects = nearestObjects [ASLtoAGL _searchPos, _lockTypes, _seekerBaseRadiusAdjusted, false];
|
||||||
_nearestObjects = _nearestObjects apply {
|
_nearestObjects = _nearestObjects apply {
|
||||||
// I check both Line of Sight versions to make sure that a single bush doesnt make the target lock dissapear but at the same time ensure that this can see through smoke. Should work 80% of the time
|
// I check both Line of Sight versions to make sure that a single bush doesnt make the target lock dissapear but at the same time ensure that this can see through smoke. Should work 80% of the time
|
||||||
if ([_projectile, getPosASL _x, _seekerAngle] call FUNC(checkSeekerAngle) && { ([_projectile, _x, true] call FUNC(checkLOS)) || { ([_projectile, _x, false] call FUNC(checkLOS)) } }) then {
|
if ([_projectile, getPosASL _x, _seekerAngle] call FUNC(checkSeekerAngle) && { ([_projectile, _x, true] call FUNC(checkLOS)) || { ([_projectile, _x, false] call FUNC(checkLOS)) } }) then {
|
||||||
|
@ -3,7 +3,7 @@
|
|||||||
#include "\z\ace\addons\main\script_mod.hpp"
|
#include "\z\ace\addons\main\script_mod.hpp"
|
||||||
|
|
||||||
#define DRAW_GUIDANCE_INFO
|
#define DRAW_GUIDANCE_INFO
|
||||||
#define ENABLE_PROJECTILE_CAMERA
|
// #define ENABLE_PROJECTILE_CAMERA
|
||||||
#define DEBUG_MODE_FULL
|
#define DEBUG_MODE_FULL
|
||||||
#define DISABLE_COMPILE_CACHE
|
#define DISABLE_COMPILE_CACHE
|
||||||
// #define ENABLE_PERFORMANCE_COUNTERS
|
// #define ENABLE_PERFORMANCE_COUNTERS
|
||||||
|
@ -29,9 +29,10 @@ Weapon Configs:
|
|||||||
KH-58 - Passive Radar Homing
|
KH-58 - Passive Radar Homing
|
||||||
|
|
||||||
Seeker Types:
|
Seeker Types:
|
||||||
X Laser - causes lots of weapon noise, causing bad guidance
|
X Laser
|
||||||
Optical
|
Optical
|
||||||
Infrared
|
Infrared
|
||||||
|
GPS/INS
|
||||||
|
|
||||||
Navigation Types:
|
Navigation Types:
|
||||||
X GBU-12 - LOS Guidance
|
X GBU-12 - LOS Guidance
|
||||||
|
Loading…
Reference in New Issue
Block a user