diff --git a/addons/dragon/CfgAmmo.hpp b/addons/dragon/CfgAmmo.hpp
index 22630e03b0..f736e8451b 100644
--- a/addons/dragon/CfgAmmo.hpp
+++ b/addons/dragon/CfgAmmo.hpp
@@ -38,8 +38,9 @@ class CfgAmmo {
EGVAR(vehicle_damage,incendiary) = 1.0;
class ace_missileguidance {
- pitchRate = 0;
- yawRate = 0;
+ minDeflection = 0;
+ maxDeflection = 0;
+ incDeflection = 0;
canVanillaLock = 0;
@@ -50,9 +51,6 @@ class CfgAmmo {
defaultSeekerLockMode = "LOAL";
seekerLockModes[] = { "LOAL", "LOBL" };
- defaultNavigationType = "LineOfSight";
- navigationTypes[] = { "LineOfSight" };
-
seekLastTargetPos = 0;
seekerAngle = 30;
seekerAccuracy = 1;
@@ -84,9 +82,6 @@ class CfgAmmo {
class ace_missileguidance {
enabled = 1;
- pitchRate = 0;
- yawRate = 0;
-
// Guidance type for munitions
defaultSeekerType = "SACLOS";
seekerTypes[] = { "SACLOS" };
diff --git a/addons/dragon/config.cpp b/addons/dragon/config.cpp
index 2acf1e6c70..d43bf90184 100644
--- a/addons/dragon/config.cpp
+++ b/addons/dragon/config.cpp
@@ -8,7 +8,7 @@ class CfgPatches {
requiredVersion = REQUIRED_VERSION;
requiredAddons[] = {"ace_hot","ace_csw"};
author = ECSTRING(common,ACETeam);
- authors[] = {"tcvm"};
+ authors[] = {"Dani (TCVM)"};
url = ECSTRING(main,URL);
VERSION_CONFIG;
};
diff --git a/addons/dragon/functions/fnc_attackProfile_DRAGON.sqf b/addons/dragon/functions/fnc_attackProfile_DRAGON.sqf
index 58e3844c88..99627a632f 100644
--- a/addons/dragon/functions/fnc_attackProfile_DRAGON.sqf
+++ b/addons/dragon/functions/fnc_attackProfile_DRAGON.sqf
@@ -1,6 +1,6 @@
-#include "..\script_component.hpp"
+#include "script_component.hpp"
/*
- * Author: tcvm (Code inspired by NouberNou's Dragon Guidance)
+ * Author: Dani (TCVM) (Code inspired by NouberNou's Dragon Guidance)
* Attack profile: Dragon Guidance
*
* Arguments:
diff --git a/addons/dragon/functions/fnc_canPickupTripod.sqf b/addons/dragon/functions/fnc_canPickupTripod.sqf
index a103277972..936282048b 100644
--- a/addons/dragon/functions/fnc_canPickupTripod.sqf
+++ b/addons/dragon/functions/fnc_canPickupTripod.sqf
@@ -1,6 +1,6 @@
-#include "..\script_component.hpp"
+#include "script_component.hpp"
/*
- * Author: tcvm
+ * Author: Dani (TCVM)
* Determines if you can pick-up the Dragon missile. If the missile was fired you will not be able to pick up the tripod.
*
* Arguments:
@@ -21,4 +21,5 @@ params ["_target", "_unit"];
&& {!alive (gunner _target)}
&& {!(_target getVariable [QGVAR(fired), false])}
&& {!(_target getVariable [QGVAR(sightAttached), ((typeOf _target) == QGVAR(staticAssembled))])}
-&& EFUNC(csw,canPickupTripod)
+&& EFUNC(csw,assemble_canPickupTripod)
+
diff --git a/addons/dragon/functions/fnc_onFired.sqf b/addons/dragon/functions/fnc_onFired.sqf
index 4228f5dff0..5f3dc8d87f 100644
--- a/addons/dragon/functions/fnc_onFired.sqf
+++ b/addons/dragon/functions/fnc_onFired.sqf
@@ -1,6 +1,6 @@
-#include "..\script_component.hpp"
+#include "script_component.hpp"
/*
- * Author: tcvm
+ * Author: Dani (TCVM)
* Runs when Dragon is fired
*
* Arguments:
diff --git a/addons/dragon/functions/fnc_sightAttach.sqf b/addons/dragon/functions/fnc_sightAttach.sqf
index 76ad9c3356..3b93d83fc2 100644
--- a/addons/dragon/functions/fnc_sightAttach.sqf
+++ b/addons/dragon/functions/fnc_sightAttach.sqf
@@ -1,6 +1,6 @@
-#include "..\script_component.hpp"
+#include "script_component.hpp"
/*
- * Author: tcvm
+ * Author: Dani (TCVM)
* Attaches the sighting unit to the Dragon missile.
*
* Arguments:
diff --git a/addons/dragon/functions/fnc_sightCanAttach.sqf b/addons/dragon/functions/fnc_sightCanAttach.sqf
index cce96022b9..3695dc3670 100644
--- a/addons/dragon/functions/fnc_sightCanAttach.sqf
+++ b/addons/dragon/functions/fnc_sightCanAttach.sqf
@@ -1,6 +1,6 @@
-#include "..\script_component.hpp"
+#include "script_component.hpp"
/*
- * Author: tcvm
+ * Author: Dani (TCVM)
* Determines if you can attach the sighting unit to the Dragon missile.
*
* Arguments:
diff --git a/addons/dragon/functions/fnc_sightCanDetach.sqf b/addons/dragon/functions/fnc_sightCanDetach.sqf
index 14659230ed..d5f1d7b9b8 100644
--- a/addons/dragon/functions/fnc_sightCanDetach.sqf
+++ b/addons/dragon/functions/fnc_sightCanDetach.sqf
@@ -1,6 +1,6 @@
-#include "..\script_component.hpp"
+#include "script_component.hpp"
/*
- * Author: tcvm
+ * Author: Dani (TCVM)
* Determines if you can attach the sighting unit to the Dragon missile.
*
* Arguments:
diff --git a/addons/dragon/functions/fnc_sightDetach.sqf b/addons/dragon/functions/fnc_sightDetach.sqf
index c9d03e22e6..444ce19bb7 100644
--- a/addons/dragon/functions/fnc_sightDetach.sqf
+++ b/addons/dragon/functions/fnc_sightDetach.sqf
@@ -1,6 +1,6 @@
-#include "..\script_component.hpp"
+#include "script_component.hpp"
/*
- * Author: tcvm
+ * Author: Dani (TCVM)
* Attaches the sighting unit to the Dragon missile.
*
* Arguments:
diff --git a/addons/dragon/functions/script_component.hpp b/addons/dragon/functions/script_component.hpp
new file mode 100644
index 0000000000..1590d769e8
--- /dev/null
+++ b/addons/dragon/functions/script_component.hpp
@@ -0,0 +1 @@
+#include "\z\ace\addons\dragon\script_component.hpp"
diff --git a/addons/dragon/stringtable.xml b/addons/dragon/stringtable.xml
index d6269eb82b..4170974dc5 100644
--- a/addons/dragon/stringtable.xml
+++ b/addons/dragon/stringtable.xml
@@ -71,7 +71,7 @@
SU-36/P デイサイト
SU-36/P 日間瞄具
SU-36/P 常规瞄具
- SU-36/P Mirino Diurno
+ SU-36/P Daysight
SU-36/P denní puškohled
SU-36/P Celownik dzienny
SU-36/P Daysight
@@ -84,10 +84,10 @@
Ein leichte, billige Visierung for Tageseinsätze. Beinhaltet den Zielsuchcomputer für das ganze System.
Uma mira leve e comum utilizada para operações de dia. Contêm o computador de orientação para todo o sistema.
Un viseur léger et bon marché utilisé pour les opérations de jour.\nContient l'ordinateur de guidage pour tout le système.
- 昼間時に使用される軽量で、低価格の照準器。システム全体の誘導コンピュータを備えている。
+ 昼間時に使用される軽量で、低価格の照準器です。システム全体の誘導コンピュータを備えています。
一個輕量,便宜適合日間行動使用的廉價瞄具。內含全套制導電腦系統
一种用于日间作战的轻型廉价瞄准具。包含整个系统的制导计算机
- Un mirino leggero ed economico usato per le operazioni diurne. Contiene il computer di guida per l'intero sistema.
+ Una luce,un mirino usato per le operazioni diurne.Contiene il computer di guida per l'intero sistema
Lehký a levný puškohled pro použití za denního světla. Obsahuje navigační počítač pro celý systém.
Lekki, tani celownik używany do działania w trakcie dnia. Zawiera komputer naprowadząjący dla całego systemu
Лёгкий дешёвый прицел, используемый для дневных операций. Содержит компьютер для всей системы
@@ -102,7 +102,7 @@
特徴的な飛行特性を持つ、ワイヤ誘導の SACLOS ミサイルです。
一個有線制導半自動指令型飛彈並有著獨特的飛航動作
具有独特飞行特性的线导半自动指令型导弹
- Un missile SACLOS filo-guidato con una caratterisca di volo particolare
+ Un missile SACLOS filo-guidato con uniche caratterische di volo
Drátem naváděná SACLOS raketa s unikátními letovými vlastnostmi
Naprowadzany przewodowo rakietowy pocisk SACLOS o unikalnej charakterystyce lotu
Ракета SACLOS с проводным наведением с уникальной характеристикой полета
diff --git a/addons/hellfire/CfgAmmo.hpp b/addons/hellfire/CfgAmmo.hpp
index 02346deac3..5eef9ad47e 100644
--- a/addons/hellfire/CfgAmmo.hpp
+++ b/addons/hellfire/CfgAmmo.hpp
@@ -26,8 +26,9 @@ class CfgAmmo {
class ace_missileguidance {
enabled = 1;
- pitchRate = 30; // degrees per second
- yawRate = 30;
+ minDeflection = 0.0005; // Minium flap deflection for guidance
+ maxDeflection = 0.01; // Maximum flap deflection for guidance
+ incDeflection = 0.0005; // The incrmeent in which deflection adjusts.
canVanillaLock = 0; // Can this default vanilla lock? Only applicable to non-cadet mode
@@ -38,9 +39,6 @@ class CfgAmmo {
defaultSeekerLockMode = "LOAL";
seekerLockModes[] = { "LOAL", "LOBL" };
- defaultNavigationType = "Direct";
- navigationTypes[] = { "Direct", "ZeroEffortMiss" };
-
seekLastTargetPos = 1; // seek last target position [if seeker loses LOS of target, continue to last known pos]
seekerAngle = 70; // Angle in front of the missile which can be searched
seekerAccuracy = 1; // seeker accuracy multiplier
@@ -51,19 +49,6 @@ class CfgAmmo {
// Attack profile type selection
defaultAttackProfile = "hellfire";
attackProfiles[] = {"hellfire", "hellfire_hi", "hellfire_lo"};
-
- class navigationStates {
- class initial {
- transitionCondition = QFUNC(midCourseTransition);
- navigationType = "Direct";
- };
- class terminal {
- transitionCondition = "";
- navigationType = "ZeroEffortMiss";
- };
- // transitions from initial -> termimal
- states[] = {"initial", "terminal"};
- };
};
};
class ACE_Hellfire_AGM114N: ACE_Hellfire_AGM114K {
@@ -90,8 +75,8 @@ class CfgAmmo {
canVanillaLock = 1;
enabled = 1; // Missile Guidance must be explicitly enabled
seekLastTargetPos = 0;
- defaultSeekerType = "MillimeterWaveRadar";
- seekerTypes[] = { "MillimeterWaveRadar" };
+ defaultSeekerType = "ARH";
+ seekerTypes[] = { "ARH" };
defaultSeekerLockMode = "LOBL";
seekerLockModes[] = { "LOBL" };
diff --git a/addons/hellfire/CfgMagazines.hpp b/addons/hellfire/CfgMagazines.hpp
index 8abf2529b5..eaee714f88 100644
--- a/addons/hellfire/CfgMagazines.hpp
+++ b/addons/hellfire/CfgMagazines.hpp
@@ -16,7 +16,7 @@ class CfgMagazines {
count = 1;
mass = 70;
pylonWeapon = QGVAR(launcher);
- hardpoints[] = {"SCALPEL_1RND", "HellfireRail_MELB"};
+ hardpoints[] = {"SCALPEL_1RND"};
model = "\A3\Weapons_F\DynamicLoadout\PylonMissile_1x_Bomb_04_F.p3d";
};
class PylonRack_1Rnd_ACE_Hellfire_AGM114K: 6Rnd_ACE_Hellfire_AGM114K { // 1x Launcher Support Rack
diff --git a/addons/hellfire/XEH_PREP.hpp b/addons/hellfire/XEH_PREP.hpp
index 011810aa04..f30cf0bffd 100644
--- a/addons/hellfire/XEH_PREP.hpp
+++ b/addons/hellfire/XEH_PREP.hpp
@@ -2,4 +2,3 @@ LOG("prep");
PREP(attackProfile);
PREP(getAttackProfileSettings);
PREP(setupVehicle);
-PREP(midCourseTransition);
diff --git a/addons/hellfire/functions/fnc_attackProfile.sqf b/addons/hellfire/functions/fnc_attackProfile.sqf
index 221d99e7ae..b2a08f24a3 100644
--- a/addons/hellfire/functions/fnc_attackProfile.sqf
+++ b/addons/hellfire/functions/fnc_attackProfile.sqf
@@ -1,4 +1,4 @@
-#include "..\script_component.hpp"
+#include "script_component.hpp"
/*
* Author: PabstMirror
* Hellfire attack profile. Handles all 4 modes LOBL, LOAL-DIR, LOAL-HI, LOAL-LO
@@ -18,99 +18,80 @@
*/
params ["_seekerTargetPos", "_args", "_attackProfileStateParams"];
-_args params ["_firedEH", "_launchParams", "_flightParams", "", "_stateParams"];
+_args params ["_firedEH", "_launchParams", "", "", "_stateParams"];
_stateParams params ["", "_seekerStateParams"];
_launchParams params ["","_targetLaunchParams","_seekerType"];
-_targetLaunchParams params ["", "", "_launchPos", "_launchDir"];
+_targetLaunchParams params ["", "", "_launchPos"];
_firedEH params ["","","","","","","_projectile"];
// Get state params:
if (_attackProfileStateParams isEqualTo []) then {
_this call FUNC(getAttackProfileSettings);
};
-_attackProfileStateParams params ["_attackStage", "_configLaunchHeightClear", "_missileStateData"];
+_attackProfileStateParams params ["_attackStage", "_configLaunchHeightClear"];
+
private _projectilePos = getPosASL _projectile;
private _distanceFromLaunch2d = _launchPos distance2d _projectilePos;
private _heightAboveLaunch = (_projectilePos select 2) - (_launchPos select 2);
// Add height depending on distance for compensate
-private _returnTargetPos = _seekerTargetPos;
-if (_returnTargetPos isEqualTo [0, 0, 0]) then {
- private _initialDistanceToTarget = 8000;
- _returnTargetPos = _launchPos vectorAdd (_launchDir vectorMultiply _initialDistanceToTarget);
-};
-
-private _closingRate = vectorMagnitude velocity _projectile;
-// subtract 500 meters to account for the fact that we don't want to be at the perfect pitch exactly when we cross the target
-// 500 seemed good in testing
-private _timeToGo = ((_projectilePos distance2d _seekerTargetPos) - 500) / _closingRate;
-
-// we could do stuff like desired attack angle, but I'm not going that far today
-private _los = _projectilePos vectorFromTo _seekerTargetPos;
-
-_flightParams params ["_pitchRate", "_yawRate"];
-
-private _angleToTarget = acos ((vectorDir _projectile) vectorCos _los);
-private _atMinRotationAngle = _angleToTarget >= (_pitchRate * _timeToGo);
+private _returnTargetPos = nil;
switch (_attackStage) do {
case STAGE_LAUNCH: { // Gain height quickly to pass terrain mask
- _missileStateData params ["_heightBeforeStateSwitch", "_initialDistanceToTarget"];
-
- _returnTargetPos set [2, _heightBeforeStateSwitch + (_initialDistanceToTarget * sin 20)]; // 100 and 36.4 gives a 20 deg angle
+ _returnTargetPos = _projectilePos getPos [100, getDir _projectile];
+ _returnTargetPos set [2, (_projectilePos select 2) + 36.4]; // 100 and 36.4 gives a 20 deg angle
if (_heightAboveLaunch > _configLaunchHeightClear) then {
_attackProfileStateParams set [0, STAGE_SEEK_CRUISE];
-
- _attackProfileStateParams set [2, [_projectilePos select 2, _seekerTargetPos distance2d _projectilePos]];
TRACE_2("New Stage: STAGE_SEEK_CRUISE",_distanceFromLaunch2d,_heightAboveLaunch);
};
-
- if (_atMinRotationAngle) then {
- _attackProfileStateParams set [0, STAGE_ATTACK_TERMINAL];
-
- _attackProfileStateParams set [2, [_projectilePos select 2, _seekerTargetPos distance2d _projectilePos]];
- TRACE_2("New Stage: STAGE_ATTACK_TERMINAL",_distanceToTarget2d,_currentHeightOverTarget);
- };
};
case STAGE_SEEK_CRUISE: { // Slowly gain altitude while searching for target
- _missileStateData params ["_heightBeforeStateSwitch", "_initialDistanceToTarget"];
-
// Before 4000 cruise at 5.7 degrees up, then level out
- _returnTargetPos set [2, _heightBeforeStateSwitch + (_initialDistanceToTarget * sin 5.7)];
-
+ private _cruiseHeight = linearConversion [3000, 5000, _distanceFromLaunch2d, 10, 0, true];
+
+ _returnTargetPos = _projectilePos getPos [100, getDir _projectile];
+ _returnTargetPos set [2, (_projectilePos select 2) + _cruiseHeight];
+
if (_seekerTargetPos isNotEqualTo [0,0,0]) then {
_attackProfileStateParams set [0, STAGE_ATTACK_CRUISE];
-
- _attackProfileStateParams set [2, [_projectilePos select 2, _seekerTargetPos distance2d _projectilePos]];
TRACE_1("New Stage: STAGE_ATTACK_CRUISE",_distanceFromLaunch2d);
};
};
case STAGE_ATTACK_CRUISE: {
- _missileStateData params ["_heightBeforeStateSwitch", "_initialDistanceToTarget"];
-
private _currentHeightOverTarget = (_projectilePos select 2) - (_seekerTargetPos select 2);
private _distanceToTarget2d = _seekerTargetPos distance2d _projectilePos;
+ private _distToGoRatio = _distanceToTarget2d / (_launchPos distance2d _seekerTargetPos);
- _returnTargetPos set [2, _heightBeforeStateSwitch + (_initialDistanceToTarget * sin 7)];
+ // arcing up at 7 degrees to start until 50% left, then smooth curve to a downward attack
+ private _gainSlope = linearConversion [0.5, 0.1, _distToGoRatio, 7, -7, true];
+ _returnTargetPos = +_seekerTargetPos;
+ _returnTargetPos set [2, ((_projectilePos select 2) + (_distanceToTarget2d * sin _gainSlope)) max (_seekerTargetPos select 2)];
- // if we are at the rotation limit, rotate to target
- if (_atMinRotationAngle || {(_currentHeightOverTarget atan2 _distanceToTarget2d) > 15}) then { // Wait until we can come down at a sharp angle
+ if ((_distanceToTarget2d < 500) || {(_currentHeightOverTarget atan2 _distanceToTarget2d) > 15}) then { // Wait until we can come down at a sharp angle
_attackProfileStateParams set [0, STAGE_ATTACK_TERMINAL];
-
- _attackProfileStateParams set [2, [_projectilePos select 2, _seekerTargetPos distance2d _projectilePos]];
TRACE_2("New Stage: STAGE_ATTACK_TERMINAL",_distanceToTarget2d,_currentHeightOverTarget);
};
};
case STAGE_ATTACK_TERMINAL: {
+ private _distanceToTarget2d = _seekerTargetPos distance2d _projectilePos;
+ _returnTargetPos = _seekerTargetPos vectorAdd [0, 0, _distanceToTarget2d * 0.02];
};
};
-// missile guidance defines this variable in doAttackProfile
-//IGNORE_PRIVATE_WARNING ["_attackProfileName"];
-_attackProfileName = ["na", "hellfire - LAUNCH", "hellfire - SEEK CRUISE", "hellfire - ATTACK CRUISE", "hellfire - TERMINAL"] select _attackStage;
+// Special radar case. Adjust target position such that we are leading it
+if (_attackStage >= 3 && { _seekerType isEqualTo "ARH" }) then {
+ _seekerStateParams params ["", "", "", "", "", "", "", "_lastKnownVelocity"];
+ private _projectileVelocity = velocity _projectile;
+ if (_projectileVelocity#2 < 0) then {
+ private _projectileSpeed = vectorMagnitude _projectileVelocity; // this gives a precise impact time versus using speed _projectile. Dont change
+ private _timeUntilImpact = (_seekerTargetPos distance _projectilePos) / _projectileSpeed;
+ _returnTargetPos = _returnTargetPos vectorAdd (_lastKnownVelocity vectorMultiply _timeUntilImpact);
+ };
+};
-TRACE_1("Adjusted target position",_returnTargetPos);
+// TRACE_1("Adjusted target position", _returnTargetPos);
_returnTargetPos;
diff --git a/addons/hellfire/functions/fnc_getAttackProfileSettings.sqf b/addons/hellfire/functions/fnc_getAttackProfileSettings.sqf
index b032c44d23..066d280d65 100644
--- a/addons/hellfire/functions/fnc_getAttackProfileSettings.sqf
+++ b/addons/hellfire/functions/fnc_getAttackProfileSettings.sqf
@@ -1,4 +1,4 @@
-#include "..\script_component.hpp"
+#include "script_component.hpp"
/*
* Author: PabstMirror
* Gets attack profile parameters for first run of hellfire attack profile function
@@ -27,24 +27,19 @@ private _attackConfig = configFile >> QEGVAR(missileguidance,AttackProfiles) >>
// Launch (clearing terrain mask for LO/HI):
private _configLaunchHeightClear = getNumber (_attackConfig >> QGVAR(launchHeightClear));
-private _projectilePos = getPosASL _projectile;
-
// Get starting stage
private _startingStage = if (_configLaunchHeightClear > 0) then {
STAGE_LAUNCH; // LOAL-HI / LO
} else {
- [
- STAGE_ATTACK_CRUISE,
- STAGE_SEEK_CRUISE
- ] select (_seekerTargetPos isEqualTo [0,0,0]);
+ if (_seekerTargetPos isEqualTo [0,0,0]) then {
+ STAGE_SEEK_CRUISE; // LOAL-DIR
+ } else {
+ STAGE_ATTACK_CRUISE // LOBL
+ };
};
// Set data in param array
_attackProfileStateParams set [0, _startingStage];
_attackProfileStateParams set [1, _configLaunchHeightClear];
-_attackProfileStateParams set [2, [
- _projectilePos select 2,
- _seekerTargetPos distance2d _projectilePos
-]];
TRACE_1("new shot settings",_attackProfileStateParams);
diff --git a/addons/hellfire/functions/fnc_midCourseTransition.sqf b/addons/hellfire/functions/fnc_midCourseTransition.sqf
deleted file mode 100644
index ee56773410..0000000000
--- a/addons/hellfire/functions/fnc_midCourseTransition.sqf
+++ /dev/null
@@ -1,29 +0,0 @@
-#include "..\script_component.hpp"
-/*
- * Author: tcvm
- * Condition to switch to next navigation profile
- *
- * Arguments:
- * Guidance Arg Array
- *
- * Return Value:
- * None
- *
- * Example:
- * [] call ace_hellfire_fnc_midCourseTransition
- *
- * Public: No
- */
-
-_args params ["_firedEH", "_launchParams", "_flightParams", "_seekerParams", "_stateParams", "_targetData", "_navigationStateData"];
-_firedEH params ["_shooter","","","","_ammo","","_projectile"];
-_launchParams params ["_shooter","_targetLaunchParams","_seekerType","_attackProfile","_lockMode","_laserInfo","_navigationType"];
-_targetLaunchParams params ["_target", "_targetPos", "_launchPos", "_launchDir", "_launchTime"];
-_flightParams params ["_pitchRate", "_yawRate", "_isBangBangGuidance"];
-_stateParams params ["_lastRunTime", "_seekerStateParams", "_attackProfileStateParams", "_lastKnownPosState","_navigationParams", "_guidanceParameters"];
-_seekerParams params ["_seekerAngle", "_seekerAccuracy", "_seekerMaxRange", "_seekerMinRange"];
-_targetData params ["_targetDirection", "_attackProfileDirection", "_targetRange", "_targetVelocity", "_targetAcceleration"];
-
-_attackProfileStateParams params ["_state"];
-_state isEqualTo STAGE_ATTACK_TERMINAL;
-
diff --git a/addons/hellfire/functions/fnc_setupVehicle.sqf b/addons/hellfire/functions/fnc_setupVehicle.sqf
index 49eefd8274..9fcd5d8376 100644
--- a/addons/hellfire/functions/fnc_setupVehicle.sqf
+++ b/addons/hellfire/functions/fnc_setupVehicle.sqf
@@ -1,4 +1,4 @@
-#include "..\script_component.hpp"
+#include "script_component.hpp"
/*
* Author: PabstMirror
* Adds interaction menu actions to switch the firemode to a vehicle.
diff --git a/addons/hellfire/functions/script_component.hpp b/addons/hellfire/functions/script_component.hpp
new file mode 100644
index 0000000000..899f29a758
--- /dev/null
+++ b/addons/hellfire/functions/script_component.hpp
@@ -0,0 +1 @@
+#include "\z\ace\addons\hellfire\script_component.hpp"
diff --git a/addons/hellfire/stringtable.xml b/addons/hellfire/stringtable.xml
index 647f349273..df16c00c9f 100644
--- a/addons/hellfire/stringtable.xml
+++ b/addons/hellfire/stringtable.xml
@@ -22,39 +22,33 @@
Самонаводящаяся Ракета с фугасной противотанковой боевой частью и полуактивной лазерной системой наведения
Misil de guiado láser semi-activo con cabeza de alto explosivo anti-tanque
Missile antichar à guidage laser semi-actif (charge HEAT)
- Missile a guida laser semi-attiva con una testata HEAT
セミ アクティブ レーダー誘導の対戦車弾頭
Rakieta naprowadzana laserowo z głowicą przeciwpancerną
Halbaktive Laser-Zielsuchrakete mit HEAT-Gefechtskopf
高爆反坦克弹头半主动激光制导导弹
반능동 레이저 유도미사일로 대전차 고폭 탄두를 탑재하고 있습니다.
- Míssil teleguiado a laser semi-ativo com ogiva antitanque altamente explosiva
Millimeter-wave radar guided missile with high explosive anti-tank warhead
Радиолокационная управляемая ракета миллиметрового диапазона с фугасной противотанковой боевой частью
Misil guiado por radar de onda milimétrica con cabeza de alto explosivo anti-tanque
Missile antichar à guidage radar à ondes courtes (charge HEAT)
- Missile a guida radar con una testata HEAT
ミリ波レーダー誘導の対戦車弾頭
Rakieta namierzana radarowo z głowicą przeciwpancerną
Millimeterwellenradar-Lenkflugkörper mit HEAT-Gefechtskopf
高爆反坦克弹头毫米波雷达制导导弹
밀리미터파 레이더 유도 미사일로 대전차 고폭 탄두를 탑재하고 있습니다.
- Míssil guiado por radar de ondas milimétricas com ogiva antitanque altamente explosiva
Semi-active laser homing missile with metal augmented charge anti-personnel warhead
Самонаводящаяся ракета с металлической увеличенной зарядной противопехотной боевой частью и полуактивной лазерной системой наведения
Misil guiado por láser semi-activo con cabeza de carga de metal aumentada anti-persona
- Missile a guida laser semi-attiva con una testata a frammentazione antiuomo
Missile antipersonnel thermobarique à guidage laser semi-actif
セミ アクティブ レーダー誘導の対人弾
Rakieta naprowadzana laserowo z głowicą odłamkową
Halbaktive Laser-Zielsuchrakete mit metallverstärktem Antipersonen-Gefechtskopf
金属增强人员杀伤弹头半主动激光制导导弹
반능동 레이저 유도 미사일로 대인 금속 강화 탄두가 탑재하고 있습니다.
- Míssil teleguiado a laser semi-ativo com ogiva antipessoal de carga aumentada de metal
diff --git a/addons/hot/$PBOPREFIX$ b/addons/hot/$PBOPREFIX$
new file mode 100644
index 0000000000..291b6fb1a7
--- /dev/null
+++ b/addons/hot/$PBOPREFIX$
@@ -0,0 +1,2 @@
+z\ace\addons\hot
+
diff --git a/addons/hot/CfgAmmo.hpp b/addons/hot/CfgAmmo.hpp
new file mode 100644
index 0000000000..1be8c6067f
--- /dev/null
+++ b/addons/hot/CfgAmmo.hpp
@@ -0,0 +1,141 @@
+class CfgAmmo {
+ class M_Scalpel_AT;
+ class ammo_Penetrator_Base;
+
+ class GVAR(ammo_Penetrator_HOT1): ammo_Penetrator_Base {
+ caliber = 60;
+ warheadName = "HEAT";
+ hit = 720;
+ };
+
+ class GVAR(ammo_Penetrator_HOT2): ammo_Penetrator_Base {
+ caliber = 65;
+ warheadName = "HEAT";
+ hit = 900;
+ };
+
+ class GVAR(ammo_Penetrator_HOT3): ammo_Penetrator_Base {
+ caliber = 80;
+ warheadName = "TandemHEAT";
+ hit = 1000;
+ };
+
+ class GVAR(HOT1): M_Scalpel_AT {
+ aiAmmoUsageFlags = "128+512";
+ model = "\A3\Weapons_F_Tank\Launchers\Vorona\Vorona_missile_heat_fly";
+ proxyShape = "\A3\Weapons_F\Ammo\Missile_AT_03_F";
+ submunitionAmmo = QGVAR(ammo_Penetrator_HOT1);
+ submunitionDirectionType = "SubmunitionModelDirection";
+ submunitionInitSpeed = 1000;
+ submunitionParentSpeedCoef = 0;
+ submunitionInitialOffset[] = { 0, 0, -0.2 };
+ hit = 150;
+ warheadName = "HEAT";
+ indirectHit = 25;
+ indirectHitRange = 3.5;
+ explosive = 0.8;
+
+ displayName = CSTRING(hot1);
+ displayNameShort = CSTRING(hot1);
+ description = CSTRING(missileType_Description);
+ descriptionShort = CSTRING(missileType);
+
+ effectsMissile = "missile2";
+
+ irLock = 0;
+ laserLock = 0;
+ manualControl = 0;
+ maxSpeed = 240;
+
+ thrustTime = 17;
+ thrust = 125;
+ timeToLive = 40;
+ initTime = 0.3;
+
+ EGVAR(rearm,caliber) = 178;
+ EGVAR(vehicle_damage,incendiary) = 1.0;
+
+ class ace_missileguidance {
+ enabled = 1;
+
+ minDeflection = 0; // Minium flap deflection for guidance
+ maxDeflection = 0.0030; // Maximum flap deflection for guidance
+ incDeflection = 0.0005; // The incrmeent in which deflection adjusts.
+
+ canVanillaLock = 0; // Can this default vanilla lock? Only applicable to non-cadet mode
+
+ // Guidance type for munitions
+ defaultSeekerType = "SACLOS";
+ seekerTypes[] = { "SACLOS" };
+
+ defaultSeekerLockMode = "LOAL";
+ seekerLockModes[] = { "LOAL", "LOBL" };
+
+ seekLastTargetPos = 0; // seek last target position [if seeker loses LOS of target, continue to last known pos]
+ seekerAngle = 30; // Angle from the shooter's view that can track the missile
+ seekerAccuracy = 1; // seeker accuracy multiplier
+
+ seekerMinRange = 75;
+ seekerMaxRange = 4000; // Range from the missile which the seeker can visually search
+
+ correctionDistance = 8; // distance from center of crosshair where missile slows down
+ offsetFromCrosshair[] = { 0, 0, 0.5 }; // where the missile wants to stay in relation to the center of the crosshair.
+
+ // Attack profile type selection
+ defaultAttackProfile = "WIRE";
+ attackProfiles[] = {"WIRE"};
+ };
+ };
+
+ class GVAR(HOT2): GVAR(HOT1) {
+ submunitionAmmo = QGVAR(ammo_Penetrator_HOT2);
+ displayName = CSTRING(hot2);
+ displayNameShort = CSTRING(hot2);
+
+ class ace_missileguidance: ace_missileguidance {
+ enabled = 1;
+ };
+ };
+
+ class GVAR(HOT2MP): GVAR(HOT2) {
+ aiAmmoUsageFlags = "64+128";
+ submunitionAmmo = "";
+ warheadName = "HE";
+ allowAgainstInfantry = 1;
+ hit = 200;
+ indirectHit = 200;
+ indirectHitRange = 5;
+ explosionEffects = "BombExplosion";
+ explosive = 0.7;
+
+ EGVAR(frag,enabled) = 1;
+ EGVAR(frag,metal) = 7100; // 1000 steel balls
+ EGVAR(frag,charge) = 4100;
+ EGVAR(frag,gurney_c) = 2700;
+ EGVAR(frag,gurney_k) = "3/5";
+ EGVAR(frag,classes)[] = {"ACE_frag_small"};
+
+ displayName = CSTRING(hot2mp);
+ displayNameShort = CSTRING(hot2mp);
+ description = CSTRING(missileType_Description_AP);
+
+ EGVAR(vehicle_damage,incendiary) = 0.1;
+
+ class ace_missileguidance: ace_missileguidance {
+ enabled = 1;
+ };
+ };
+
+ class GVAR(HOT3): GVAR(HOT2) {
+ submunitionAmmo = QGVAR(ammo_Penetrator_HOT3);
+ warheadName = "TandemHEAT";
+ displayName = CSTRING(hot3);
+ displayNameShort = CSTRING(hot3);
+
+ class ace_missileguidance: ace_missileguidance {
+ enabled = 1;
+ seekerMaxRange = 4300;
+ };
+ };
+};
+
diff --git a/addons/hot/CfgMagazines.hpp b/addons/hot/CfgMagazines.hpp
new file mode 100644
index 0000000000..ab51548f7b
--- /dev/null
+++ b/addons/hot/CfgMagazines.hpp
@@ -0,0 +1,205 @@
+class CfgMagazines {
+ class 12Rnd_PG_missiles;
+
+ // HOT1 - HEAT (anti-tank)
+ class GVAR(1_6Rnd): 12Rnd_PG_missiles { // Old style vehicle magazine
+ count = 6;
+ initSpeed = 100;
+ ammo = QGVAR(HOT1);
+ displayName = CSTRING(hot1);
+ displayNameShort = CSTRING(hot1);
+ descriptionShort = CSTRING(missileType);
+ };
+
+ class GVAR(1_2Rnd): GVAR(1_6Rnd) {
+ count = 2;
+ };
+
+ // 1.70 pylon magazines:
+ class GVAR(1_PylonMissile_1Rnd): GVAR(1_6Rnd) { // Bare missle
+ displayName = CSTRING(hot1_1);
+ count = 1;
+ mass = 70;
+ pylonWeapon = QGVAR(1_launcher);
+ hardpoints[] = {"SCALPEL_1RND"};
+ model = "\A3\Weapons_F\DynamicLoadout\PylonMissile_1x_Bomb_04_F.p3d";
+ };
+ class GVAR(1_PylonRack_1Rnd): GVAR(1_6Rnd) { // 1x Launcher Support Rack
+ displayName = CSTRING(hot1_1);
+ count = 1;
+ mass = 85;
+ pylonWeapon = QGVAR(1_launcher);
+ hardpoints[] = {"B_MISSILE_PYLON", "SCALPEL_1RND_EJECTOR", "B_ASRRAM_EJECTOR", "UNI_SCALPEL", "CUP_NATO_HELO_SMALL", "CUP_NATO_HELO_LARGE", "RHS_HP_MELB"};
+ model = "\A3\Weapons_F\DynamicLoadout\PylonPod_1x_Missile_AA_04_F.p3d";
+ };
+ class GVAR(1_PylonRack_3Rnd): GVAR(1_6Rnd) { // 3x Launcher Support Rack
+ displayName = CSTRING(hot1_3);
+ count = 3;
+ mass = 250;
+ pylonWeapon = QGVAR(1_launcher);
+ hardpoints[] = {"B_MISSILE_PYLON", "UNI_SCALPEL", "CUP_NATO_HELO_LARGE", "RHS_HP_LONGBOW_RACK"};
+ model = "\A3\Weapons_F\DynamicLoadout\PylonPod_3x_Missile_LG_scalpel_F.p3d";
+ mirrorMissilesIndexes[] = {2, 1, 3};
+ };
+ class GVAR(1_PylonRack_4Rnd): GVAR(1_6Rnd) { // 4x Launcher Support Rack
+ displayName = CSTRING(hot1_4);
+ count = 4;
+ mass = 340;
+ pylonWeapon = QGVAR(1_launcher);
+ hardpoints[] = {"UNI_SCALPEL", "CUP_NATO_HELO_LARGE", "RHS_HP_HELLFIRE_RACK", "RHS_HP_LONGBOW_RACK"};
+ model = "\A3\Weapons_F\DynamicLoadout\PylonPod_4x_Missile_LG_scalpel_F.p3d";
+ mirrorMissilesIndexes[] = {2, 1, 4, 3};
+ };
+
+ // HOT2 - HEAT (anti-tank)
+ class GVAR(2_6Rnd): 12Rnd_PG_missiles { // Old style vehicle magazine
+ count = 6;
+ initSpeed = 100;
+ ammo = QGVAR(HOT2);
+ displayName = CSTRING(hot2);
+ displayNameShort = CSTRING(hot2);
+ descriptionShort = CSTRING(missileType);
+ };
+
+ class GVAR(2_2Rnd): GVAR(2_6Rnd) {
+ count = 2;
+ };
+
+ // 1.70 pylon magazines:
+ class GVAR(2_PylonMissile_1Rnd): GVAR(2_6Rnd) { // Bare missle
+ displayName = CSTRING(hot2_1);
+ pylonWeapon = QGVAR(2_launcher);
+ count = 1;
+ mass = 70;
+ hardpoints[] = {"SCALPEL_1RND"};
+ model = "\A3\Weapons_F\DynamicLoadout\PylonMissile_1x_Bomb_04_F.p3d";
+ };
+ class GVAR(2_PylonRack_1Rnd): GVAR(2_6Rnd) { // 1x Launcher Support Rack
+ displayName = CSTRING(hot2_1);
+ pylonWeapon = QGVAR(2_launcher);
+ count = 1;
+ mass = 85;
+ hardpoints[] = {"B_MISSILE_PYLON", "SCALPEL_1RND_EJECTOR", "B_ASRRAM_EJECTOR", "UNI_SCALPEL", "CUP_NATO_HELO_SMALL", "CUP_NATO_HELO_LARGE", "RHS_HP_MELB"};
+ model = "\A3\Weapons_F\DynamicLoadout\PylonPod_1x_Missile_AA_04_F.p3d";
+ };
+ class GVAR(2_PylonRack_3Rnd): GVAR(2_6Rnd) { // 3x Launcher Support Rack
+ displayName = CSTRING(hot2_3);
+ pylonWeapon = QGVAR(2_launcher);
+ count = 3;
+ mass = 250;
+ hardpoints[] = {"B_MISSILE_PYLON", "UNI_SCALPEL", "CUP_NATO_HELO_LARGE", "RHS_HP_LONGBOW_RACK"};
+ model = "\A3\Weapons_F\DynamicLoadout\PylonPod_3x_Missile_LG_scalpel_F.p3d";
+ mirrorMissilesIndexes[] = {2, 1, 3};
+ };
+ class GVAR(2_PylonRack_4Rnd): GVAR(2_6Rnd) { // 4x Launcher Support Rack
+ displayName = CSTRING(hot2_4);
+ pylonWeapon = QGVAR(2_launcher);
+ count = 4;
+ mass = 340;
+ hardpoints[] = {"UNI_SCALPEL", "CUP_NATO_HELO_LARGE", "RHS_HP_HELLFIRE_RACK", "RHS_HP_LONGBOW_RACK"};
+ model = "\A3\Weapons_F\DynamicLoadout\PylonPod_4x_Missile_LG_scalpel_F.p3d";
+ mirrorMissilesIndexes[] = {2, 1, 4, 3};
+ };
+
+ // HOT2MP - HE Anti-Infantry
+ class GVAR(2MP_6Rnd): 12Rnd_PG_missiles { // Old style vehicle magazine
+ count = 6;
+ initSpeed = 100;
+ ammo = QGVAR(HOT2MP);
+ displayName = CSTRING(hot2mp);
+ displayNameShort = CSTRING(hot2mp);
+ descriptionShort = CSTRING(missileType);
+ };
+
+ class GVAR(2MP_2Rnd): GVAR(2MP_6Rnd) {
+ count = 2;
+ };
+
+ // 1.70 pylon magazines:
+ class GVAR(2MP_PylonMissile_1Rnd): GVAR(2MP_6Rnd) { // Bare missle
+ displayName = CSTRING(hot2mp_1);
+ pylonWeapon = QGVAR(2mp_launcher);
+ count = 1;
+ mass = 70;
+ hardpoints[] = {"SCALPEL_1RND"};
+ model = "\A3\Weapons_F\DynamicLoadout\PylonMissile_1x_Bomb_04_F.p3d";
+ };
+ class GVAR(2MP_PylonRack_1Rnd): GVAR(2MP_6Rnd) { // 1x Launcher Support Rack
+ displayName = CSTRING(hot2mp_1);
+ pylonWeapon = QGVAR(2mp_launcher);
+ count = 1;
+ mass = 85;
+ hardpoints[] = {"B_MISSILE_PYLON", "SCALPEL_1RND_EJECTOR", "B_ASRRAM_EJECTOR", "UNI_SCALPEL", "CUP_NATO_HELO_SMALL", "CUP_NATO_HELO_LARGE", "RHS_HP_MELB"};
+ model = "\A3\Weapons_F\DynamicLoadout\PylonPod_1x_Missile_AA_04_F.p3d";
+ };
+ class GVAR(2MP_PylonRack_3Rnd): GVAR(2MP_6Rnd) { // 3x Launcher Support Rack
+ displayName = CSTRING(hot2mp_3);
+ pylonWeapon = QGVAR(2mp_launcher);
+ count = 3;
+ mass = 250;
+ hardpoints[] = {"B_MISSILE_PYLON", "UNI_SCALPEL", "CUP_NATO_HELO_LARGE", "RHS_HP_LONGBOW_RACK"};
+ model = "\A3\Weapons_F\DynamicLoadout\PylonPod_3x_Missile_LG_scalpel_F.p3d";
+ mirrorMissilesIndexes[] = {2, 1, 3};
+ };
+ class GVAR(2MP_PylonRack_4Rnd): GVAR(2MP_6Rnd) { // 4x Launcher Support Rack
+ displayName = CSTRING(hot2mp_4);
+ pylonWeapon = QGVAR(2mp_launcher);
+ count = 4;
+ mass = 340;
+ hardpoints[] = {"UNI_SCALPEL", "CUP_NATO_HELO_LARGE", "RHS_HP_HELLFIRE_RACK", "RHS_HP_LONGBOW_RACK"};
+ model = "\A3\Weapons_F\DynamicLoadout\PylonPod_4x_Missile_LG_scalpel_F.p3d";
+ mirrorMissilesIndexes[] = {2, 1, 4, 3};
+ };
+
+ // HOT3 - tandem shaped charge HEAT (anti-tank)
+ class GVAR(3_6Rnd): 12Rnd_PG_missiles { // Old style vehicle magazine
+ count = 6;
+ initSpeed = 100;
+ ammo = QGVAR(HOT3);
+ displayName = CSTRING(hot3);
+ displayNameShort = CSTRING(hot3);
+ descriptionShort = CSTRING(missileType);
+ };
+
+ class GVAR(3_2Rnd): GVAR(3_6Rnd) { // Old style vehicle magazine
+ count = 2;
+ };
+
+ // 1.70 pylon magazines:
+ class GVAR(3_PylonMissile_1Rnd): GVAR(3_6Rnd) { // Bare missle
+ displayName = CSTRING(hot3_1);
+ pylonWeapon = QGVAR(3_launcher);
+ count = 1;
+ mass = 70;
+ hardpoints[] = {"SCALPEL_1RND"};
+ model = "\A3\Weapons_F\DynamicLoadout\PylonMissile_1x_Bomb_04_F.p3d";
+ };
+
+ class GVAR(3_PylonRack_1Rnd): GVAR(3_6Rnd) { // 1x Launcher Support Rack
+ displayName = CSTRING(hot3_1);
+ pylonWeapon = QGVAR(3_launcher);
+ count = 1;
+ mass = 85;
+ hardpoints[] = {"B_MISSILE_PYLON", "SCALPEL_1RND_EJECTOR", "B_ASRRAM_EJECTOR", "UNI_SCALPEL", "CUP_NATO_HELO_SMALL", "CUP_NATO_HELO_LARGE", "RHS_HP_MELB"};
+ model = "\A3\Weapons_F\DynamicLoadout\PylonPod_1x_Missile_AA_04_F.p3d";
+ };
+ class GVAR(3_PylonRack_3Rnd): GVAR(3_6Rnd) { // 3x Launcher Support Rack
+ displayName = CSTRING(hot3_3);
+ pylonWeapon = QGVAR(3_launcher);
+ count = 3;
+ mass = 250;
+ hardpoints[] = {"B_MISSILE_PYLON", "UNI_SCALPEL", "CUP_NATO_HELO_LARGE", "RHS_HP_LONGBOW_RACK"};
+ model = "\A3\Weapons_F\DynamicLoadout\PylonPod_3x_Missile_LG_scalpel_F.p3d";
+ mirrorMissilesIndexes[] = {2, 1, 3};
+ };
+ class GVAR(3_PylonRack_4Rnd): GVAR(3_6Rnd) { // 4x Launcher Support Rack
+ displayName = CSTRING(hot3_4);
+ pylonWeapon = QGVAR(3_launcher);
+ count = 4;
+ mass = 340;
+ hardpoints[] = {"UNI_SCALPEL", "CUP_NATO_HELO_LARGE", "RHS_HP_HELLFIRE_RACK", "RHS_HP_LONGBOW_RACK"};
+ model = "\A3\Weapons_F\DynamicLoadout\PylonPod_4x_Missile_LG_scalpel_F.p3d";
+ mirrorMissilesIndexes[] = {2, 1, 4, 3};
+ };
+};
+
diff --git a/addons/hot/CfgVehicles.hpp b/addons/hot/CfgVehicles.hpp
new file mode 100644
index 0000000000..db5b8b5262
--- /dev/null
+++ b/addons/hot/CfgVehicles.hpp
@@ -0,0 +1,19 @@
+class CfgVehicles {
+ class Tank;
+ class Tank_F: Tank {
+ class Turrets;
+ };
+ class LT_01_base_F: Tank_F {
+ class Turrets: Turrets {
+ class MainTurret;
+ };
+ };
+ class LT_01_AT_base_F: LT_01_base_F {
+ class Turrets: Turrets {
+ class MainTurret: MainTurret {
+ weapons[] = {"SmokeLauncher","HMG_127",QGVAR(generic_launcher)};
+ magazines[] = {"SmokeLauncherMag",QGVAR(2_2Rnd),QGVAR(2_2Rnd),QGVAR(2_2Rnd),QGVAR(2MP_2Rnd),"100Rnd_127x99_mag_Tracer_Red","100Rnd_127x99_mag_Tracer_Red","100Rnd_127x99_mag_Tracer_Red","100Rnd_127x99_mag_Tracer_Red"};
+ };
+ };
+ };
+};
diff --git a/addons/hot/CfgWeapons.hpp b/addons/hot/CfgWeapons.hpp
new file mode 100644
index 0000000000..d172de7fa1
--- /dev/null
+++ b/addons/hot/CfgWeapons.hpp
@@ -0,0 +1,62 @@
+class CfgWeapons {
+ class RocketPods;
+ class MissileLauncher;
+ class GVAR(1_launcher): RocketPods {
+ displayName = CSTRING(hot1);
+ magazines[] = {QGVAR(1_6Rnd), QGVAR(1_2Rnd), QGVAR(1_PylonMissile_1Rnd), QGVAR(1_PylonRack_1Rnd), QGVAR(1_PylonRack_3Rnd), QGVAR(1_PylonRack_4Rnd)};
+ initSpeed = 100;
+ autoFire = 0;
+ canLock = 0;
+ weaponLockSystem = 0;
+ lockingTargetSound[] = {"",0,1};
+ lockedTargetSound[] = {"",0,1};
+ soundFly[] = {"A3\Sounds_F\weapons\Rockets\rocket_fly_1",1,1.1,700};
+ nameSound = "MissileLauncher";
+ sounds[] = {"StandardSound"};
+ class StandardSound {
+ begin1[] = {"A3\Sounds_F\weapons\Rockets\missile_1",1.12202,1.3,1000};
+ soundBegin[] = {"begin1",1};
+ soundsetshot[] = {"RocketsMedium_Shot_SoundSet"};
+ };
+ cursor = "EmptyCursor";
+ cursorAim = "missile";
+ showAimCursorInternal = 0;
+ };
+ class GVAR(2_launcher): GVAR(1_launcher) {
+ displayName = CSTRING(hot2);
+ magazines[] = {QGVAR(2_6Rnd), QGVAR(2_2Rnd), QGVAR(2_PylonMissile_1Rnd), QGVAR(2_PylonRack_1Rnd), QGVAR(2_PylonRack_3Rnd), QGVAR(2_PylonRack_4Rnd)};
+ };
+ class GVAR(2mp_launcher): GVAR(1_launcher) {
+ displayName = CSTRING(hot2mp);
+ magazines[] = {QGVAR(2MP_6Rnd), QGVAR(2MP_2Rnd), QGVAR(2MP_PylonMissile_1Rnd), QGVAR(2MP_PylonRack_1Rnd), QGVAR(2MP_PylonRack_3Rnd), QGVAR(2MP_PylonRack_4Rnd)};
+ };
+ class GVAR(3_launcher): GVAR(1_launcher) {
+ displayName = CSTRING(hot3);
+ magazines[] = {QGVAR(3_6Rnd), QGVAR(3_2Rnd), QGVAR(3_PylonMissile_1Rnd), QGVAR(3_PylonRack_1Rnd), QGVAR(3_PylonRack_3Rnd), QGVAR(3_PylonRack_4Rnd)};
+ };
+ class GVAR(generic_launcher): MissileLauncher {
+ displayName = CSTRING(hotMissile);
+ magazines[] = {QGVAR(1_6Rnd), QGVAR(1_2Rnd), QGVAR(2_6Rnd), QGVAR(2_2Rnd), QGVAR(2MP_6Rnd), QGVAR(2MP_2Rnd), QGVAR(3_6Rnd), QGVAR(3_2Rnd)};
+ initSpeed = 100;
+ autoFire = 0;
+ canLock = 0;
+ weaponLockSystem = 0;
+ lockingTargetSound[] = {"",0,1};
+ lockedTargetSound[] = {"",0,1};
+ soundFly[] = {"A3\Sounds_F\weapons\Rockets\rocket_fly_1",1,1.1,700};
+ nameSound = "MissileLauncher";
+ sounds[] = {"StandardSound"};
+ class StandardSound {
+ begin1[] = {"A3\Sounds_F\weapons\Rockets\missile_1",1.12202,1.3,1000};
+ soundBegin[] = {"begin1",1};
+ soundsetshot[] = {"RocketsMedium_Shot_SoundSet"};
+ };
+ cursor = "EmptyCursor";
+ cursorAim = "missile";
+ showAimCursorInternal = 0;
+
+ autoReload = 1;
+ magazineReloadTime = 20;
+ };
+};
+
diff --git a/addons/hot/README.md b/addons/hot/README.md
new file mode 100644
index 0000000000..c94e369c7d
--- /dev/null
+++ b/addons/hot/README.md
@@ -0,0 +1,4 @@
+ace_hot
+===================
+
+Adds HOT1/2/3 Missiles
diff --git a/addons/javelin/config.cpp b/addons/hot/config.cpp
similarity index 70%
rename from addons/javelin/config.cpp
rename to addons/hot/config.cpp
index 92f2f2d969..d285b08cfc 100644
--- a/addons/javelin/config.cpp
+++ b/addons/hot/config.cpp
@@ -6,16 +6,16 @@ class CfgPatches {
units[] = {};
weapons[] = {};
requiredVersion = REQUIRED_VERSION;
- requiredAddons[] = {"ace_main", "ace_common", "ace_missileguidance"};
+ requiredAddons[] = {"ace_common","ace_missileguidance"};
author = ECSTRING(common,ACETeam);
+ authors[] = {"Dani (TCVM)"};
url = ECSTRING(main,URL);
VERSION_CONFIG;
};
};
-#include "CfgEventhandlers.hpp"
-#include "RscInGameUI.hpp"
-#include "CfgSounds.hpp"
+#include "CfgAmmo.hpp"
+#include "CfgMagazines.hpp"
#include "CfgWeapons.hpp"
#include "CfgVehicles.hpp"
-#include "CfgMagazines.hpp"
+
diff --git a/addons/hot/script_component.hpp b/addons/hot/script_component.hpp
new file mode 100644
index 0000000000..54cf5ccea1
--- /dev/null
+++ b/addons/hot/script_component.hpp
@@ -0,0 +1,18 @@
+#define COMPONENT hot
+#define COMPONENT_BEAUTIFIED HOT
+#include "\z\ace\addons\main\script_mod.hpp"
+
+// #define DEBUG_MODE_FULL
+// #define DISABLE_COMPILE_CACHE
+// #define ENABLE_PERFORMANCE_COUNTERS
+
+#ifdef DEBUG_ENABLED_HOT
+ #define DEBUG_MODE_FULL
+#endif
+
+#ifdef DEBUG_SETTINGS_HOT
+ #define DEBUG_SETTINGS DEBUG_SETTINGS_HOT
+#endif
+
+#include "\z\ace\addons\main\script_macros.hpp"
+
diff --git a/addons/hot/stringtable.xml b/addons/hot/stringtable.xml
new file mode 100644
index 0000000000..1c0a745a89
--- /dev/null
+++ b/addons/hot/stringtable.xml
@@ -0,0 +1,341 @@
+
+
+
+
+ Wire-Guided
+ Drahtgelenkt
+ Kierowany przewodem
+ Filoguidato
+ ワイヤ有線誘導
+ Проводное управление
+ Guiado por Fio
+ 有線制導
+ 有线制导
+ Filoguidé
+ Drátem naváděné
+ Tel-Güdümlü
+ Guiado por cable
+ 유선 유도
+
+
+ Semi-automatic command to line of sight
+ Halbautomatische Steuerung über Sichtverbindung (SACLOS)
+ Semi-automatyczna komenda do pola widzenia
+ Comando Semi-Automatico via Contatto Visivo(SACLOS)
+ 半自動指令照準線一致誘導方式
+ Полуавтоматическое командное наведение по линии визирования (SACLOS)
+ Comando semi-automático para a linha de visão (SACLOS)
+ 視線內半自動指令
+ 半自动指令到视线(SACLOS)
+ Contrôle semi-automatique par contact visuel (SACLOS)
+ Poloautomatický povelový systém dalkového navedení pro záměrné cíle (SACLOS)
+ Control semi-automático por línea de visión
+ Görüş alanına yarı otomatik komut
+ 반자동 가시선 지령 유도방식
+
+
+ Wire-Guided Missile
+ Drahtgelenkte Rakete
+ Pocisk kierowany przewodowo
+ Missile filoguidato
+ ワイヤ有線誘導ミサイル
+ Ракета с проводным управлением
+ Míssil Guiado por Fio
+ 有線制導飛彈
+ 线导导弹
+ Missile filoguidé
+ Drátem naváděná střela
+ Tel Güdümlü Füze
+ Misil guiado por cable
+ 유선 유도 미사일
+
+
+ HOT Missile
+ Lenkflugkörper
+ Pocisk HOT
+ Missile HOT
+ HOT ミサイル
+ Ракета HOT
+ Míssil HOT
+ 高次音速(HOT)飛彈
+ 高次音速(HOT)导弹
+ Missile HOT
+ HOT Střela
+ HOT Missile
+ Misil HOT
+ HOT 미사일
+
+
+ HOT 1
+ HOT 1
+ HOT 1
+ HOT 1
+ HOT 1
+ HOT 1
+ HOT 1
+ HOT 1
+ HOT 1
+ HOT 1
+ HOT 1
+ HOT 1
+ HOT 1
+ HOT 1
+
+
+ HOT 2
+ HOT 2
+ HOT 2
+ HOT 2
+ HOT 2
+ HOT 2
+ HOT 2
+ HOT 2
+ HOT 2
+ HOT 2
+ HOT 2
+ HOT 2
+ HOT 2
+ HOT 2
+
+
+ HOT 2MP
+ HOT 2MP
+ HOT 2MP
+ HOT 2MP
+ HOT 2MP
+ HOT 2MP
+ HOT 2MP
+ HOT 2MP
+ HOT 2MP
+ HOT 2MP
+ HOT 2MP
+ HOT 2MP
+ HOT 2MP
+ HOT 2MP
+
+
+ HOT 3
+ HOT 3
+ HOT 3
+ HOT 3
+ HOT 3
+ HOT 3
+ HOT 3
+ HOT 3
+ HOT 3
+ HOT 3
+ HOT 3
+ HOT 3
+ HOT 3
+ HOT 3
+
+
+ Wire-Guided Missile (Anti-Personnel)
+ Anti Personen Lenkflugkörper
+ Pocisk kierowany przewodowo (przeciwpiechotny)
+ Missile filoguidato antiuomo
+ ワイヤ有線誘導ミサイル (対人)
+ Ракета с проводным управлением (Противопехотная)
+ Míssil Guiado por Fio (Anti-Pessoal)
+ 有線制導飛彈(反步兵)
+ 线导导弹(反人员)
+ Missile filoguidé (antipersonnel)
+ Drátem naváděná střela (protipěchotní)
+ Tel Güdümlü Füze (Anti-Personelı)
+ Misil guiado por cable (Antipersona)
+ 유선 유도 미사일 (대인)
+
+
+ 1x HOT 1 [ACE]
+ 1x HOT 1 [ACE]
+ 1x HOT 1 [ACE]
+ 1x HOT1 [ACE]
+ 1x HOT 1 [ACE]
+ 1x HOT 1 [ACE]
+ 1x HOT 1 [ACE]
+ 1x HOT 1 [ACE]
+ 1x HOT 1 [ACE]
+ 1x HOT 1 [ACE]
+ 1x HOT 1 [ACE]
+ 1x HOT 1 [ACE]
+ 1x HOT 1 [ACE]
+ 1x HOT 1 [ACE]
+
+
+ 3x HOT 1 [ACE]
+ 3x HOT 1 [ACE]
+ 3x HOT 1 [ACE]
+ 3x HOT 1 [ACE]
+ 3x HOT 1 [ACE]
+ 3x HOT 1 [ACE]
+ 3x HOT 1 [ACE]
+ 3x HOT 1 [ACE]
+ 3x HOT 1 [ACE]
+ 3x HOT 1 [ACE]
+ 3x HOT 1 [ACE]
+ 3x HOT 1 [ACE]
+ 3x HOT 1 [ACE]
+ 3x HOT 1 [ACE]
+
+
+ 4x HOT 1 [ACE]
+ 4x HOT 1 [ACE]
+ 4x HOT 1 [ACE]
+ 4x HOT 1 [ACE]
+ 4x HOT 1 [ACE]
+ 4x HOT 1 [ACE]
+ 4x HOT 1 [ACE]
+ 4x HOT 1 [ACE]
+ 4x HOT 1 [ACE]
+ 4x HOT 1 [ACE]
+ 4x HOT 1 [ACE]
+ 4x HOT 1 [ACE]
+ 4x HOT 1 [ACE]
+ 4x HOT 1 [ACE]
+
+
+ 1x HOT 2 [ACE]
+ 1x HOT 2 [ACE]
+ 1x HOT 2 [ACE]
+ 1x HOT 2 [ACE]
+ 1x HOT 2 [ACE]
+ 1x HOT 2 [ACE]
+ 1x HOT 2 [ACE]
+ 1x HOT 2 [ACE]
+ 1x HOT 2 [ACE]
+ 1x HOT 2 [ACE]
+ 1x HOT 2 [ACE]
+ 1x HOT 2 [ACE]
+ 1x HOT 2 [ACE]
+ 1x HOT 2 [ACE]
+
+
+ 3x HOT 2 [ACE]
+ 3x HOT 2 [ACE]
+ 3x HOT 2 [ACE]
+ 3x HOT 2 [ACE]
+ 3x HOT 2 [ACE]
+ 3x HOT 2 [ACE]
+ 3x HOT 2 [ACE]
+ 3x HOT 2 [ACE]
+ 3x HOT 2 [ACE]
+ 3x HOT 2 [ACE]
+ 3x HOT 2 [ACE]
+ 3x HOT 2 [ACE]
+ 3x HOT 2 [ACE]
+ 3x HOT 2 [ACE]
+
+
+ 4x HOT 2 [ACE]
+ 4x HOT 2 [ACE]
+ 4x HOT 2 [ACE]
+ 4x HOT 2 [ACE]
+ 4x HOT 2 [ACE]
+ 4x HOT 2 [ACE]
+ 4x HOT 2 [ACE]
+ 4x HOT 2 [ACE]
+ 4x HOT 2 [ACE]
+ 4x HOT 2 [ACE]
+ 4x HOT 2 [ACE]
+ 4x HOT 2 [ACE]
+ 4x HOT 2 [ACE]
+ 4x HOT 2 [ACE]
+
+
+ 1x HOT 2MP [ACE]
+ 1x HOT 2MP [ACE]
+ 1x HOT 2MP [ACE]
+ 1x HOT 2MP [ACE]
+ 1x HOT 2MP [ACE]
+ 1x HOT 2MP [ACE]
+ 1x HOT 2MP [ACE]
+ 1x HOT 2MP [ACE]
+ 1x HOT 2MP [ACE]
+ 1x HOT 2MP [ACE]
+ 1x HOT 2MP [ACE]
+ 1x HOT 2MP [ACE]
+ 1x HOT 2MP [ACE]
+ 1x HOT 2MP [ACE]
+
+
+ 3x HOT 2MP [ACE]
+ 3x HOT 2MP [ACE]
+ 3x HOT 2MP [ACE]
+ 3x HOT 2MP [ACE]
+ 3x HOT 2MP [ACE]
+ 3x HOT 2MP [ACE]
+ 3x HOT 2MP [ACE]
+ 3x HOT 2MP [ACE]
+ 3x HOT 2MP [ACE]
+ 3x HOT 2MP [ACE]
+ 3x HOT 2MP [ACE]
+ 3x HOT 2MP [ACE]
+ 3x HOT 2MP [ACE]
+ 3x HOT 2MP [ACE]
+
+
+ 4x HOT 2MP [ACE]
+ 4x HOT 2MP [ACE]
+ 4x HOT 2MP [ACE]
+ 4x HOT 2MP [ACE]
+ 4x HOT 2MP [ACE]
+ 4x HOT 2MP [ACE]
+ 4x HOT 2MP [ACE]
+ 4x HOT 2MP [ACE]
+ 4x HOT 2MP [ACE]
+ 4x HOT 2MP [ACE]
+ 4x HOT 2MP [ACE]
+ 4x HOT 2MP [ACE]
+ 4x HOT 2MP [ACE]
+ 4x HOT 2MP [ACE]
+
+
+ 1x HOT 3 [ACE]
+ 1x HOT 3 [ACE]
+ 1x HOT 3 [ACE]
+ 1x HOT 3 [ACE]
+ 1x HOT 3 [ACE]
+ 1x HOT 3 [ACE]
+ 1x HOT 3 [ACE]
+ 1x HOT 3 [ACE]
+ 1x HOT 3 [ACE]
+ 1x HOT 3 [ACE]
+ 1x HOT 3 [ACE]
+ 1x HOT 3 [ACE]
+ 1x HOT 3 [ACE]
+ 1x HOT 3 [ACE]
+
+
+ 4x HOT 3 [ACE]
+ 4x HOT 3 [ACE]
+ 4x HOT 3 [ACE]
+ 4x HOT 3 [ACE]
+ 4x HOT 3 [ACE]
+ 4x HOT 3 [ACE]
+ 4x HOT 3 [ACE]
+ 4x HOT 3 [ACE]
+ 4x HOT 3 [ACE]
+ 4x HOT 3 [ACE]
+ 4x HOT 3 [ACE]
+ 4x HOT 3 [ACE]
+ 4x HOT 3 [ACE]
+ 4x HOT 3 [ACE]
+
+
+ 3x HOT 3 [ACE]
+ 3x HOT 3 [ACE]
+ 3x HOT 3 [ACE]
+ 3x HOT 3 [ACE]
+ 3x HOT 3 [ACE]
+ 3x HOT 3 [ACE]
+ 3x HOT 3 [ACE]
+ 3x HOT 3 [ACE]
+ 3x HOT 3 [ACE]
+ 3x HOT 3 [ACE]
+ 3x HOT 3 [ACE]
+ 3x HOT 3 [ACE]
+ 3x HOT 3 [ACE]
+ 3x HOT 3 [ACE]
+
+
+
diff --git a/addons/javelin/$PBOPREFIX$ b/addons/javelin/$PBOPREFIX$
deleted file mode 100644
index 3497b9aaf6..0000000000
--- a/addons/javelin/$PBOPREFIX$
+++ /dev/null
@@ -1 +0,0 @@
-z\ace\addons\javelin
\ No newline at end of file
diff --git a/addons/javelin/CfgEventhandlers.hpp b/addons/javelin/CfgEventhandlers.hpp
deleted file mode 100644
index e325095c32..0000000000
--- a/addons/javelin/CfgEventhandlers.hpp
+++ /dev/null
@@ -1,18 +0,0 @@
-
-class Extended_PreStart_EventHandlers {
- class ADDON {
- init = QUOTE(call COMPILE_SCRIPT(XEH_preStart));
- };
-};
-
-class Extended_PreInit_EventHandlers {
- class ADDON {
- init = QUOTE(call COMPILE_SCRIPT(XEH_preInit));
- };
-};
-
-class Extended_PostInit_EventHandlers {
- class ADDON {
- clientInit = QUOTE(call COMPILE_SCRIPT(XEH_clientInit));
- };
-};
diff --git a/addons/javelin/CfgMagazines.hpp b/addons/javelin/CfgMagazines.hpp
deleted file mode 100644
index 80111d9484..0000000000
--- a/addons/javelin/CfgMagazines.hpp
+++ /dev/null
@@ -1,18 +0,0 @@
-class CfgMagazines {
- //Static Titan Magazine
- class 5Rnd_GAT_missiles;
- class 1Rnd_GAT_missiles: 5Rnd_GAT_missiles {
- ammo = "ACE_Javelin_FGM148_static"; //from misssileGuidance, was "M_Titan_AT_static"
- };
-
- //Handheld Titan "AT" Magazine (Locking - "Anti-Tank")
- class Titan_AA;
- class Titan_AT: Titan_AA {
- ammo = "ACE_Javelin_FGM148"; //from misssileGuidance, was "M_Titan_AT"
- };
-
- //Handheld Titan "AP" Magazine (SACLOS? "Anti-personal")
- // class Titan_AP: Titan_AA {
- //???
- // };
-};
diff --git a/addons/javelin/CfgSounds.hpp b/addons/javelin/CfgSounds.hpp
deleted file mode 100644
index 289a571e6e..0000000000
--- a/addons/javelin/CfgSounds.hpp
+++ /dev/null
@@ -1,13 +0,0 @@
-
-class CfgSounds {
- class ACE_Javelin_Locking {
- name = "ACE_Javelin_Locking";
- sound[] = {QPATHTOF(data\sounds\javelin_locking.ogg), "db+0", 1.0};
- titles[] = {};
- };
- class ACE_Javelin_Locked {
- name = "ACE_Javelin_Locked";
- sound[] = {QPATHTOF(data\sounds\javelin_locked.ogg), "db+0", 1.0};
- titles[] = {};
- };
-};
diff --git a/addons/javelin/CfgVehicles.hpp b/addons/javelin/CfgVehicles.hpp
deleted file mode 100644
index cd9f23607b..0000000000
--- a/addons/javelin/CfgVehicles.hpp
+++ /dev/null
@@ -1,86 +0,0 @@
-class CfgVehicles {
- class LandVehicle;
- class StaticWeapon: LandVehicle {
- class Turrets;
- };
-
- class StaticMGWeapon: StaticWeapon {
- class Turrets: Turrets {
- class MainTurret;
- };
- };
- class AT_01_base_F: StaticMGWeapon {};
-
- class B_static_AT_F: AT_01_base_F {
- class Turrets: Turrets {
- class MainTurret: MainTurret {
- weapons[] = { QGVAR(Titan_Static) };
- magazines[] = {"1Rnd_GAT_missiles","1Rnd_GAT_missiles","1Rnd_GAT_missiles","1Rnd_GAT_missiles"};
-
- turretInfoType = "ACE_RscOptics_javelin";
- gunnerOpticsModel = QPATHTOF(data\reticle_titan.p3d);
- opticsZoomMin = 0.08333;
- opticsZoomMax = 0.04167;
- opticsZoomInit = 0.08333;
- opticsPPEffects[] = {"OpticsCHAbera1","OpticsBlur1"};
- opticsFlare = 0;
- discretefov[] = {0.08333,0.04167};
- discreteInitIndex = 0;
- };
- };
- };
- class O_static_AT_F: AT_01_base_F {
- class Turrets: Turrets {
- class MainTurret: MainTurret {
- weapons[] = { QGVAR(Titan_Static) };
- magazines[] = {"1Rnd_GAT_missiles","1Rnd_GAT_missiles","1Rnd_GAT_missiles","1Rnd_GAT_missiles"};
-
- turretInfoType = "ACE_RscOptics_javelin";
- gunnerOpticsModel = QPATHTOF(data\reticle_titan.p3d);
- opticsZoomMin = 0.08333;
- opticsZoomMax = 0.04167;
- opticsZoomInit = 0.08333;
- opticsPPEffects[] = {"OpticsCHAbera1","OpticsBlur1"};
- opticsFlare = 0;
- discretefov[] = {0.08333,0.04167};
- discreteInitIndex = 0;
- };
- };
- };
- class I_static_AT_F: AT_01_base_F {
- class Turrets: Turrets {
- class MainTurret: MainTurret {
- weapons[] = { QGVAR(Titan_Static) };
- magazines[] = {"1Rnd_GAT_missiles","1Rnd_GAT_missiles","1Rnd_GAT_missiles","1Rnd_GAT_missiles"};
-
- turretInfoType = "ACE_RscOptics_javelin";
- gunnerOpticsModel = QPATHTOF(data\reticle_titan.p3d);
- opticsZoomMin = 0.08333;
- opticsZoomMax = 0.04167;
- opticsZoomInit = 0.08333;
- opticsPPEffects[] = {"OpticsCHAbera1","OpticsBlur1"};
- opticsFlare = 0;
- discretefov[] = {0.08333,0.04167};
- discreteInitIndex = 0;
- };
- };
- };
- class Car;
- class Car_F: Car {
- class Turrets {
- class MainTurret;
- };
- };
- class LSV_01_base_F: Car_F {
- class Turrets: Turrets {};
- };
- class LSV_01_AT_base_F: LSV_01_base_F { // Prowler / Polaris DAGOR
- class Turrets: Turrets {
- class TopTurret: MainTurret {
- weapons[] = { QGVAR(Titan_Static) };
- turretInfoType = "ACE_RscOptics_javelin";
- gunnerOpticsModel = QPATHTOF(data\reticle_titan.p3d);
- };
- };
- };
-};
diff --git a/addons/javelin/CfgWeapons.hpp b/addons/javelin/CfgWeapons.hpp
deleted file mode 100644
index e06c6aae0b..0000000000
--- a/addons/javelin/CfgWeapons.hpp
+++ /dev/null
@@ -1,80 +0,0 @@
-class Mode_SemiAuto;
-class CfgWeapons {
- class MissileLauncher;
- class missiles_titan: MissileLauncher {
- class Player: MissileLauncher {
- EGVAR(missileGuidance,attackProfile) = "JAV_DIR";
- };
- class TopDown: Player {
- EGVAR(missileGuidance,attackProfile) = "JAV_TOP";
- };
- };
- class missiles_titan_static: missiles_titan {};
- class GVAR(Titan_Static): missiles_titan_static {
- GVAR(enabled) = 1;
- weaponInfoType = "ACE_RscOptics_javelin";
- modelOptics = QPATHTOF(data\reticle_titan.p3d);
-
- canLock = 0;
- magazines[] = {"1Rnd_GAT_missiles"};
- lockingTargetSound[] = {"",0,1};
- lockedTargetSound[] = {"",0,1};
- };
-
- class Launcher_Base_F;
- class launch_Titan_base: Launcher_Base_F {
- class Single: Mode_SemiAuto {
- EGVAR(missileGuidance,attackProfile) = "JAV_DIR";
- };
- class TopDown: Single {
- EGVAR(missileGuidance,attackProfile) = "JAV_TOP";
- };
- };
- class launch_Titan_short_base: launch_Titan_base {};
- class launch_B_Titan_short_F: launch_Titan_short_base {
- GVAR(enabled) = 1;
- weaponInfoType = "ACE_RscOptics_javelin";
- modelOptics = QPATHTOF(data\reticle_titan.p3d);
-
- canLock = 0;
-
- lockingTargetSound[] = {"",0,1};
- lockedTargetSound[] = {"",0,1};
- };
- class launch_B_Titan_short_tna_F: launch_B_Titan_short_F {
- GVAR(enabled) = 1;
- };
- class launch_I_Titan_short_F: launch_Titan_short_base {
- GVAR(enabled) = 1;
- weaponInfoType = "ACE_RscOptics_javelin";
- modelOptics = QPATHTOF(data\reticle_titan.p3d);
-
- canLock = 0;
-
- lockingTargetSound[] = {"",0,1};
- lockedTargetSound[] = {"",0,1};
- };
- class launch_O_Titan_short_F: launch_Titan_short_base {
- GVAR(enabled) = 1;
- weaponInfoType = "ACE_RscOptics_javelin";
- modelOptics = QPATHTOF(data\reticle_titan.p3d);
-
- canLock = 0;
-
- lockingTargetSound[] = {"",0,1};
- lockedTargetSound[] = {"",0,1};
- };
- class launch_O_Titan_short_ghex_F: launch_O_Titan_short_F {
- GVAR(enabled) = 1;
- };
- class launch_Titan_short_F: launch_Titan_short_base {
- GVAR(enabled) = 1;
- weaponInfoType = "ACE_RscOptics_javelin";
- modelOptics = QPATHTOF(data\reticle_titan.p3d);
-
- canLock = 0;
-
- lockingTargetSound[] = {"",0,1};
- lockedTargetSound[] = {"",0,1};
- };
-};
diff --git a/addons/javelin/README.md b/addons/javelin/README.md
deleted file mode 100644
index cf39b60bd0..0000000000
--- a/addons/javelin/README.md
+++ /dev/null
@@ -1,4 +0,0 @@
-ace_javelin
-===============
-
-Adds the Javelin AT launcher.
diff --git a/addons/javelin/RscInGameUI.hpp b/addons/javelin/RscInGameUI.hpp
deleted file mode 100644
index ce777c2047..0000000000
--- a/addons/javelin/RscInGameUI.hpp
+++ /dev/null
@@ -1,423 +0,0 @@
-class RscOpticsValue;
-class RscControlsGroupNoScrollbars;
-class RscPicture;
-class RscLine;
-class RscMapControl;
-
-
-// Taken from AGM for optics management.
-
-class RscInGameUI {
- class ACE_RscOptics_javelin {
- idd = 300;
- controls[] = { QGVAR(elements_group), "ACE_Targeting", QGVAR(mapHelper) };
- onLoad = QUOTE(with uiNamespace do {ACE_RscOptics_javelin = _this select 0;};);
-
- class GVAR(mapHelper): RscMapControl {
- onDraw = QUOTE(_this call FUNC(mapHelperDraw));
- x = -10;
- y = -10;
- w = 0;
- h = 0;
- };
-
- class GVAR(elements_group): RscControlsGroupNoScrollbars {
- x = "safeZoneX";
- y = "safeZoneY";
- w = "safeZoneW";
- h = "safeZoneH";
- idc = 170;
- class Controls {
- class CA_Distance: RscOpticsValue {
- idc = 151;
- sizeEx = "0";
- colorText[] = {0,0,0,0};
- x = 0;
- y = 0;
- w = 0;
- h = 0;
- };
- class GVAR(Day_mode_off): RscPicture {
- idc = 1001;
- x = "(safeZoneX+(safeZoneW -safeZoneH*3/4)/2)+ (0.03/4)*3*safeZoneH - safeZoneX";
- y = "safeZoneY+safeZoneH*0.031 - safeZoneY";
- w = "0.1045752* (((safeZoneW*3)/4)/safeZoneW)/(1/safeZoneH)";
- h = "safeZoneH*0.1045752";
- colorText[] = {0.2941,0.2941,0.2941,1};
- text = "\A3\ui_f\data\igui\rscingameui\rscoptics_titan\day_co.paa";
- };
- class GVAR(Day_mode): GVAR(Day_mode_off) {
- idc = 160;
- colorText[] = {0.2941,0.8745,0.2157,1};
- };
- class GVAR(WFOV_mode_off): GVAR(Day_mode_off) {
- idc = 1004;
- x = "(safeZoneX+(safeZoneW -safeZoneH*3/4)/2)+ (0.307/4)*3*safeZoneH - safeZoneX";
- text = "\A3\ui_f\data\igui\rscingameui\rscoptics_titan\wfov_co.paa";
- };
- class GVAR(WFOV_mode_group): RscControlsGroupNoScrollbars {
- x = "safeZoneX";
- y = "safeZoneY";
- w = "safeZoneW";
- h = "safeZoneH";
- idc = 163;
- class Controls {
- class GVAR(WFOV_mode_on): GVAR(WFOV_mode_off) {
- idc = -1;
- y = "0.031*SafeZoneH - SafezoneY";
- x = "((SafezoneW -SafezoneH*3/4)/2)+ (0.307/4)*3*SafezoneH - SafezoneX";
- colorText[] = {0.2941,0.8745,0.2157,1};
- };
- class StadiaL: RscLine {
- x = "0.4899*safeZoneW - safeZoneX";
- y = "0.171*safeZoneH - safeZoneY";
- w = 0;
- h = "0.049*safeZoneH";
- colorText[] = {0.2941,0.8745,0.2157,1};
- };
- class StadiaR: RscLine {
- x = "0.5109*safeZoneW- safeZoneX";
- y = "0.171*safeZoneH - safeZoneY";
- w = 0;
- h = "0.049*safeZoneH";
- colorText[] = {0.2941,0.8745,0.2157,1};
- };
- class BracketL: RscLine {
- x = "((safeZoneW -safeZoneH*3/4)/2)+ (0.293/4)*3*safeZoneH - safeZoneX";
- y = "0.4677*safeZoneH - safeZoneY";
- w = 0;
- h = "0.0646*safeZoneH";
- colorText[] = {0.2941,0.8745,0.2157,1};
- };
- class BracketR: RscLine {
- x = "((safeZoneW -safeZoneH*3/4)/2)+ (0.70/4)*3*safeZoneH - safeZoneX";
- y = "0.4677*safeZoneH - safeZoneY";
- w = 0;
- h = "0.0646*safeZoneH";
- colorText[] = {0.2941,0.8745,0.2157,1};
- };
- class BracketT: RscLine {
- x = "((safeZoneW -safeZoneH*3/4)/2)+ (0.467/4)*3*safeZoneH - safeZoneX";
- y = "0.3535*safeZoneH - safeZoneY";
- w = "0.065* (((safeZoneW*3)/4)/safeZoneW)/(1/safeZoneH)";
- h = 0;
- colorText[] = {0.2941,0.8745,0.2157,1};
- };
- class BracketB: RscLine {
- x = "((safeZoneW -safeZoneH*3/4)/2)+ (0.467/4)*3*safeZoneH - safeZoneX";
- y = "0.6465*safeZoneH - safeZoneY";
- w = "0.065* (((safeZoneW*3)/4)/safeZoneW)/(1/safeZoneH)";
- h = 0;
- colorText[] = {0.2941,0.8745,0.2157,1};
- };
-
- };
- };
- class GVAR(NFOV_mode_off): GVAR(Day_mode_off) {
- idc = 1003;
- x = "(safeZoneX+(safeZoneW -safeZoneH*3/4)/2)+ (0.586/4)*3*safeZoneH - safeZoneX";
- text = "\A3\ui_f\data\igui\rscingameui\rscoptics_titan\nfov_co.paa";
- };
- class GVAR(NFOV_mode_group): RscControlsGroupNoScrollbars {
- x = "safeZoneX";
- y = "safeZoneY";
- w = "safeZoneW-safeZoneX";
- h = "safeZoneH-safeZoneY";
- idc = 162;
- class Controls {
- class GVAR(NFOV_mode_on): GVAR(NFOV_mode_off) {
- idc = -1;
- x = "((SafezoneW -SafezoneH*3/4)/2)+ (0.586/4)*3*SafezoneH - SafezoneX";
- y = "0.031*SafeZoneH - SafezoneY";
- colorText[] = {0.2941,0.8745,0.2157,1};
- };
- class StadiaL: RscLine {
- x = "0.4788*safeZoneW - safeZoneX";
- y = "0.171*safeZoneH - safeZoneY";
- w = 0;
- h = "0.049*safeZoneH";
- colorText[] = {0.2941,0.8745,0.2157,1};
- };
- class StadiaR: RscLine {
- x = "0.5212*safeZoneW - safeZoneX";
- y = "0.171*safeZoneH - safeZoneY";
- w = 0;
- h = "0.049*safeZoneH";
- colorText[] = {0.2941,0.8745,0.2157,1};
- };
- class LineHL: RscLine {
- x = "((safeZoneW -safeZoneH*3/4)/2)+ (0.01/4)*3*safeZoneH - safeZoneX";
- y = "safeZoneH*0.5 - safeZoneY";
- w = "0.29* (((safeZoneW*3)/4)/safeZoneW)/(1/safeZoneH)";
- h = "safeZoneH*0.0";
- colorText[] = {0.2941,0.8745,0.2157,1};
- };
- class LineHR: RscLine {
- x = "((safeZoneW -safeZoneH*3/4)/2)+ (0.695/4)*3*safeZoneH - safeZoneX";
- y = "safeZoneH*0.5 - safeZoneY";
- w = "0.29* (((safeZoneW*3)/4)/safeZoneW)/(1/safeZoneH)";
- h = "safeZoneH*0.0";
- colorText[] = {0.2941,0.8745,0.2157,1};
- };
- class LineVT: RscLine {
- x = "0.5*safeZoneW - safeZoneX";
- y = "0.171*safeZoneH - safeZoneY";
- w = 0;
- h = "0.1825*safeZoneH";
- colorText[] = {0.2941,0.8745,0.2157,1};
- };
- class LineVB: RscLine {
- x = "0.5*safeZoneW - safeZoneX";
- y = "0.6465*safeZoneH - safeZoneY";
- w = 0;
- h = "0.1895*safeZoneH";
- colorText[] = {0.2941,0.8745,0.2157,1};
- };
- };
- };
-
- class GVAR(SEEK_off): GVAR(Day_mode_off) {
- idc = 699000;
- x = "(safeZoneX+(safeZoneW -safeZoneH*3/4)/2)+ (0.863/4)*3*safeZoneH - safeZoneX";
- text = "\A3\ui_f\data\igui\rscingameui\rscoptics_titan\seek_co.paa";
- };
- class GVAR(SEEK): GVAR(SEEK_off) {
- idc = 166;
- colorText[] = {0.2941,0.8745,0.2157,0};
- };
- class GVAR(Missle_off): GVAR(Day_mode_off) {
- idc = 1032;
- x = "(safeZoneX+(safeZoneW -safeZoneH*3/4)/2)+ (-0.134/4)*3*safeZoneH - safeZoneX";
- y = "(safeZoneY + 0.208*safeZoneH) - safeZoneY";
- colorText[] = {0.2941,0.2941,0.2941,1};
- text = "\A3\ui_f\data\igui\rscingameui\rscoptics_titan\missle_co.paa";
- };
- class GVAR(Missle): GVAR(Missle_off) {
- idc = 167;
- colorText[] = {0.9255,0.5216,0.1216,0};
- };
- class GVAR(CLU_off): GVAR(Missle_off) {
- idc = 1027;
- y = "(safeZoneY + 0.436*safeZoneH) - safeZoneY";
- text = "\A3\ui_f\data\igui\rscingameui\rscoptics_titan\clu_co.paa";
- };
- class GVAR(HangFire_off): GVAR(Missle_off) {
- idc = 1028;
- y = "(safeZoneY + 0.669*safeZoneH) - safeZoneY";
- text = "\A3\ui_f\data\igui\rscingameui\rscoptics_titan\hangfire_co.paa";
- };
- class GVAR(TOP_off): GVAR(Day_mode_off) {
- idc = 699001;
- x = "(safeZoneX+(safeZoneW -safeZoneH*3/4)/2)+ (1.023/4)*3*safeZoneH - safeZoneX";
- y = "(safeZoneY + 0.208*safeZoneH) - safeZoneY";
- text = "\A3\ui_f\data\igui\rscingameui\rscoptics_titan\top_co.paa";
- colorText[] = {0.2941,0.8745,0.2157,1};
- };
- class GVAR(DIR): GVAR(Day_mode) {
- idc = 699002;
- x = "(safeZoneX+(safeZoneW -safeZoneH*3/4)/2)+ (1.023/4)*3*safeZoneH - safeZoneX";
- y = "(safeZoneY + 0.436*safeZoneH) - safeZoneY";
- text = "\A3\ui_f\data\igui\rscingameui\rscoptics_titan\dir_co.paa";
- colorText[] = {0.2941,0.2941,0.2941,1};
- };
- class GVAR(FLTR_mode_off): GVAR(Day_mode_off) {
- idc = 1002;
- x = "(safeZoneX+(safeZoneW -safeZoneH*3/4)/2)+ (1.023/4)*3*safeZoneH - safeZoneX";
- y = "(safeZoneY + 0.669*safeZoneH) - safeZoneY";
- text = "\A3\ui_f\data\igui\rscingameui\rscoptics_titan\fltr_co.paa";
- };
- class GVAR(FLTR_mode): GVAR(FLTR_mode_off) {
- idc = 161;
- colorText[] = {0.2941,0.8745,0.2157,1};
- };
- };
- };
- class ACE_Targeting: RscControlsGroupNoScrollbars {
- idc = 6999;
- x = "safeZoneX";
- y = "safeZoneY";
- w = "safeZoneW";
- h = "safeZoneH";
- enabled = 0;
- show = 0;
- class Controls {
- class ACE_TargetingConstrains: RscControlsGroupNoScrollbars {
- x = "safeZoneX";
- y = "safeZoneY";
- w = "safeZoneW-safeZoneX";
- h = "safeZoneH-safeZoneY";
-
- enabled = 0;
- class Controls {
- class Top: RscPicture {
- idc = 699101;
- text = "#(argb,8,8,3)color(1,1,1,1)";
- colorText[] = {0.2941,0.2941,0.2941,1};
- x = "((safeZoneW -(3/4)*safeZoneH)/2) - safeZoneX";
- y = "0.15*safeZoneH-safeZoneY";
- w = "(3/4)*safeZoneH";
- h = "0.21*safeZoneH";
- };
- class Bottom: Top {
- idc = 699102;
- y = "0.64*safeZoneH-safeZoneY";
- };
- class Left: Top {
- idc = 699103;
- x = "((safeZoneW -(3/4)*safeZoneH)/2) - safeZoneX";
- y = "0.36*safeZoneH-safeZoneY";
- w = "0.31*(3/4)*safeZoneH";
- h = "0.28*safeZoneH";
- };
- class Right: Left {
- idc = 699104;
- x = "((safeZoneW -(3/4)*safeZoneH)/2)+ 0.69*(3/4)*safeZoneH - safeZoneX";
- };
- class OpticsBorders: RscPicture {
- idc = 699105;
- text = QPATHTOF(data\javelin_ui_border_ca.paa);
- colorText[] = {0,0,0,1};
- x = "((safeZoneW -(3.1/4)*safeZoneH)/2) - safeZoneX";
- y = "0.15*safeZoneH-safeZoneY";
- w = "(3.1/4)*safeZoneH";
- h = "0.7*safeZoneH";
- };
- };
- };
-
- class ACE_TargetingGate: ACE_TargetingConstrains {
- idc = 699200;
- class Controls {
- class TargetingGateTL: ACE_TargetingConstrains {
- x = "((safeZoneW -(3/4)*safeZoneH)/2) - safeZoneX";
- y = "0.15*safeZoneH - safeZoneY";
- idc = 699201;
- class Controls {
- class LineH: RscLine {
- idc = 699210;
- x = "0";
- y = "0";
- w = "0.025*(3/4)*safeZoneH";
- h = "0";
- colorText[] = {0.8745,0.8745,0.8745,1};
- };
- class LineV: LineH {
- idc = 699211;
- w = "0";
- h = "0.025*safeZoneH";
- };
- };
- };
- class TargetingGateTR: TargetingGateTL {
- x = "((safeZoneW -(3/4)*safeZoneH)/2) - safeZoneX + 0.975*(3/4)*safeZoneH";
- y = "0.15*safeZoneH - safeZoneY";
- idc = 699202;
- class Controls {
- class LineH: RscLine {
- idc = 699220;
- x = "0";
- y = "0";
- w = "0.025*(3/4)*safeZoneH";
- h = "0";
- colorText[] = {0.8745,0.8745,0.8745,1};
- };
- class LineV: LineH {
- idc = 699221;
- x = "0.025*(3/4)*safeZoneH";
- w = "0";
- h = "0.025*safeZoneH";
- };
- };
- };
- class TargetingGateBL: TargetingGateTL {
- x = "((safeZoneW -(3/4)*safeZoneH)/2) - safeZoneX";
- y = "0.825*safeZoneH - safeZoneY";
- idc = 699203;
- class Controls {
- class LineH: RscLine {
- x = "0";
- y = "0.025*safeZoneH";
- w = "0.025*(3/4)*safeZoneH";
- h = "0";
- colorText[] = {0.8745,0.8745,0.8745,1};
- };
- class LineV: LineH {
- y = "0";
- w = "0";
- h = "0.025*safeZoneH";
- };
- };
- };
- class TargetingGateBR: TargetingGateBL {
- x = "((safeZoneW -(3/4)*safeZoneH)/2) - safeZoneX + 0.975*(3/4)*safeZoneH";
- y = "0.825*safeZoneH - safeZoneY";
- idc = 699204;
- class Controls {
- class LineH: RscLine {
- x = "0";
- y = "0.025*safeZoneH";
- w = "0.025*(3/4)*safeZoneH";
- h = "0";
- colorText[] = {0.8745,0.8745,0.8745,1};
- };
- class LineV: LineH {
- x = "0.025*(3/4)*safeZoneH";
- y = "0";
- w = "0";
- h = "0.025*safeZoneH";
- };
- };
- };
- };
- };
-
-
- class ACE_TargetingLines: ACE_TargetingConstrains {
- idc = 699300;
- class Controls {
- class LineH: RscLine {
- idc = 699301;
- x = "((safeZoneW -(3/4)*safeZoneH)/2) - safeZoneX";
- y = "0.5*safeZoneH - safeZoneY";
- w = "(3/4)*safeZoneH";
- h = "0";
- colorText[] = {0.8745,0.8745,0.8745,1};
- };
- class LineV: RscLine {
- idc = 699302;
- x = "0.5*safeZoneW - safeZoneX";
- y = "0.15*safeZoneH - safeZoneY";
- w = "0";
- h = "0.7*safeZoneH";
- colorText[] = {0.8745,0.8745,0.8745,1};
- };
- };
- };
- };
- };
- };
-};
-
-// on colorText[] = {0.2941, 0.8745, 0.2157, 1.0};
-// off colorText[] = {0.2941, 0.2941, 0.2941, 1.0};
-// orange colorText[] = {0.9255, 0.5216, 0.1216, 1.0};
-
-/*
-ACE_Titan_elements_group: 170
-ACE_Titan_Day_mode_off: 1001
-ACE_Titan_Day_mode: 160
-ACE_Titan_WFOV_mode_off: 1004
-ACE_Titan_WFOV_mode_group: 163
-ACE_Titan_NFOV_mode_off: 1003
-ACE_Titan_NFOV_mode_group: 162
-ACE_Titan_SEEK_off: 1005 //1001
-ACE_Titan_SEEK: 166
-ACE_Titan_Missle_off: 1032
-ACE_Titan_Missle: 167
-ACE_Titan_CLU_off: 1027
-ACE_Titan_HangFire_off: 1028
-ACE_Titan_TOP_off: 1006
-ACE_Titan_DIR: 1007
-ACE_Titan_FLTR_mode_off: 1002
-ACE_Titan_FLTR_mode: 161
- */
diff --git a/addons/javelin/XEH_PREP.hpp b/addons/javelin/XEH_PREP.hpp
deleted file mode 100644
index 76d658d90d..0000000000
--- a/addons/javelin/XEH_PREP.hpp
+++ /dev/null
@@ -1,5 +0,0 @@
-
-PREP(getTarget);
-PREP(mapHelperDraw);
-PREP(onOpticDraw);
-PREP(showFireMode);
diff --git a/addons/javelin/XEH_clientInit.sqf b/addons/javelin/XEH_clientInit.sqf
deleted file mode 100644
index ecd80fb0ce..0000000000
--- a/addons/javelin/XEH_clientInit.sqf
+++ /dev/null
@@ -1,6 +0,0 @@
-// #define DEBUG_MODE_FULL
-#include "script_component.hpp"
-
-if (!hasInterface) exitWith {};
-
-#include "initKeybinds.inc.sqf"
diff --git a/addons/javelin/XEH_preInit.sqf b/addons/javelin/XEH_preInit.sqf
deleted file mode 100644
index b404d35889..0000000000
--- a/addons/javelin/XEH_preInit.sqf
+++ /dev/null
@@ -1,36 +0,0 @@
-#include "script_component.hpp"
-
-ADDON = false;
-
-PREP_RECOMPILE_START;
-#include "XEH_PREP.hpp"
-PREP_RECOMPILE_END;
-
-GVAR(isLockKeyDown) = false;
-GVAR(pfehID) = -1;
-
-DFUNC(disableFire) = {
- params ["_firedEH"];
-
- if (_firedEH < 0 && {difficulty > 0}) then {
- _firedEH = [ACE_player, "DefaultAction", {true}, {
- private _canFire = (_this select 1) getVariable ["ace_missileguidance_target", nil];
- if (!isNil "_canFire") exitWith { false };
- true
- }] call EFUNC(common,addActionEventHandler);
- TRACE_1("Locking Fire Button",_firedEH);
-
- };
- _firedEH
-};
-DFUNC(enableFire) = {
- params ["_firedEH"];
-
- if (_firedEH >= 0 && {difficulty > 0}) then {
- TRACE_1("Unlocking Fire Button",_firedEH);
- [ACE_player, "DefaultAction", _firedEH] call EFUNC(common,removeActionEventHandler);
- };
- -1
-};
-
-ADDON = true;
diff --git a/addons/javelin/XEH_preStart.sqf b/addons/javelin/XEH_preStart.sqf
deleted file mode 100644
index 022888575e..0000000000
--- a/addons/javelin/XEH_preStart.sqf
+++ /dev/null
@@ -1,3 +0,0 @@
-#include "script_component.hpp"
-
-#include "XEH_PREP.hpp"
diff --git a/addons/javelin/data/jav_disp.paa b/addons/javelin/data/jav_disp.paa
deleted file mode 100644
index fc60af24d5..0000000000
Binary files a/addons/javelin/data/jav_disp.paa and /dev/null differ
diff --git a/addons/javelin/data/jav_ring.paa b/addons/javelin/data/jav_ring.paa
deleted file mode 100644
index 04d23c3910..0000000000
Binary files a/addons/javelin/data/jav_ring.paa and /dev/null differ
diff --git a/addons/javelin/data/javelin_ui_border_ca.paa b/addons/javelin/data/javelin_ui_border_ca.paa
deleted file mode 100644
index 29e9ad6f4b..0000000000
Binary files a/addons/javelin/data/javelin_ui_border_ca.paa and /dev/null differ
diff --git a/addons/javelin/data/reticle_titan.p3d b/addons/javelin/data/reticle_titan.p3d
deleted file mode 100644
index 682296f0c8..0000000000
Binary files a/addons/javelin/data/reticle_titan.p3d and /dev/null differ
diff --git a/addons/javelin/data/sounds/javelin_locked.ogg b/addons/javelin/data/sounds/javelin_locked.ogg
deleted file mode 100644
index 5002405b1a..0000000000
Binary files a/addons/javelin/data/sounds/javelin_locked.ogg and /dev/null differ
diff --git a/addons/javelin/data/sounds/javelin_locking.ogg b/addons/javelin/data/sounds/javelin_locking.ogg
deleted file mode 100644
index dca0ca73b2..0000000000
Binary files a/addons/javelin/data/sounds/javelin_locking.ogg and /dev/null differ
diff --git a/addons/javelin/functions/fnc_getTarget.sqf b/addons/javelin/functions/fnc_getTarget.sqf
deleted file mode 100644
index 6fd4686eb8..0000000000
--- a/addons/javelin/functions/fnc_getTarget.sqf
+++ /dev/null
@@ -1,80 +0,0 @@
-#include "..\script_component.hpp"
-/*
- * Author: PabstMirror
- * Find a target within the optic range
- *
- * Arguments:
- * 0: Last Target (seeds the scan)