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) - * 1: Max Range (meters) - * - * Return Value: - * Target - * - * Example: - * [bob, 5] call ace_javelin_fnc_getTarget - * - * Public: No - */ - -params ["_lastTarget", "_maxRange"]; - -scopeName "main"; - -private _viewASL = AGLtoASL positionCameraToWorld [0,0,0]; -private _viewDir = _viewASL vectorFromTo (AGLtoASL positionCameraToWorld [0,0,1]); - -// Attempt to lock onto current target if it is still valid -if (!isNull _lastTarget) then { - private _aimASL = aimPos _lastTarget; - - if ((_viewASL vectorDistance _aimASL) > _maxRange) exitWith {}; - if ((acos ((_viewASL vectorFromTo _aimASL) vectorDotProduct _viewDir)) > 0.6) exitWith {}; - - private _relAngle = (_lastTarget getRelDir _viewASL); - - for "_xOffset" from -2.5 to 2.5 step 0.5 do { - for "_yOffset" from -2 to 1 step 0.5 do { - // Find test points in the model based on the angle that we are viewing it from (not true 3d projection, but not bad) - private _testPosASL = _lastTarget modelToWorldWorld [_xOffset * - cos _relAngle, _xOffset * sin _relAngle, _yOffset]; - private _intersectionsToCursorTarget = lineIntersectsSurfaces [_viewASL, _testPosASL, ace_player, vehicle ace_player, true, 1]; - // drawIcon3D ["\A3\ui_f\data\map\markers\military\dot_CA.paa", [[0,1,1,1], [1,0,1,1]] select (count _intersectionsToCursorTarget), (ASLtoAGL _testPosASL), 0.25, 0.25, 0, "", 0.5, 0.025, "TahomaB"]; - if (_intersectionsToCursorTarget isNotEqualTo []) then { - (_intersectionsToCursorTarget select 0) params ["", "", "_intersectedObject"]; - if (_intersectedObject isKindOf "AllVehicles") then { - _intersectedObject breakOut "main"; - }; - }; - }; - }; -}; - -// Try cursorObject/Target as they are very fast -if ((cursorObject isKindOf "AllVehicles") && {(cursorObject distance ace_player) < _maxRange}) then { - private _intersectionsToCursorTarget = lineIntersectsSurfaces [_viewASL, aimPos cursorObject, ace_player, cursorObject, true, 1]; - if (_intersectionsToCursorTarget isEqualTo []) then { - cursorObject breakOut "main"; - }; -}; -if ((cursorTarget isKindOf "AllVehicles") && {(cursorObject distance ace_player) < _maxRange}) then { - private _intersectionsToCursorTarget = lineIntersectsSurfaces [_viewASL, aimPos cursorTarget, ace_player, cursorTarget, true, 1]; - if (_intersectionsToCursorTarget isEqualTo []) then { - cursorTarget breakOut "main"; - }; -}; - -// Attempt to scan using multiple rayscasts - This is expensive (n^2) and care should be given to balance accuracy vs speed -for "_xOffset" from -14 to 14 step 2 do { - for "_yOffset" from -12 to 12 step 4 do { - private _testPosASL = AGLtoASL (positionCameraToWorld [_xOffset, _yOffset, _maxRange]); - private _intersectionsToCursorTarget = lineIntersectsSurfaces [_viewASL, _testPosASL, ace_player, vehicle ace_player, true, 1]; - // drawIcon3D ["\A3\ui_f\data\map\markers\military\dot_CA.paa", [[0,1,0,1], [1,0,0,1]] select (count _intersectionsToCursorTarget), (ASLtoAGL _testPosASL), 0.25, 0.25, 0, "", 0.5, 0.025, "TahomaB"]; - if (_intersectionsToCursorTarget isNotEqualTo []) then { - (_intersectionsToCursorTarget select 0) params ["", "", "_intersectedObject"]; - if (_intersectedObject isKindOf "AllVehicles") then { - _intersectedObject breakOut "main"; - }; - }; - }; -}; - -objNull diff --git a/addons/javelin/functions/fnc_mapHelperDraw.sqf b/addons/javelin/functions/fnc_mapHelperDraw.sqf deleted file mode 100644 index 4f7ac84b4a..0000000000 --- a/addons/javelin/functions/fnc_mapHelperDraw.sqf +++ /dev/null @@ -1,51 +0,0 @@ -#include "..\script_component.hpp" -/* - * Author: PabstMirror - * Handles the map helper's draw event - * Resets arguments if not run recently - * And starts a watchdog to detect when weapon display unloaded - * - * Arguments: - * None - * - * Return Value: - * None - * - * Example: - * [] call ace_javelin_fnc_mapHelperDraw - * - * Public: No - */ - -if (isNil QGVAR(arguments)) then { - TRACE_1("Starting optic draw",_this); - - // reset shooter var: - private _currentShooter = if (ACE_player call CBA_fnc_canUseWeapon) then {ACE_player} else {vehicle ACE_player}; - _currentShooter setVariable ["ace_missileguidance_target", nil, false]; - - GVAR(arguments) = [ - diag_frameno, // Last run frame - objNull, // currentTargetObject - 0, // Lock Start Time - 0, // Next Sound timer - -1, // _fireDisabledEH - 0 // _nextTargetScan - ]; - - // Start up a watchdog for when the display is no longer shown (but might not be unloaded or null) - [{ - if (isNull (uiNamespace getVariable ["ACE_RscOptics_javelin", displayNull])) exitWith {true}; - GVAR(arguments) params ["_lastRunFrame"]; - (diag_frameno < _lastRunFrame) || {diag_frameno > (_lastRunFrame + 1)} - }, { - TRACE_1("old/null display - ending optic draw",_this); - private _fireDisabledEH = GVAR(arguments) param [4, -1]; - [_fireDisabledEH] call FUNC(enableFire); - GVAR(arguments) = nil; - }, []] call CBA_fnc_waitUntilAndExecute; -}; - -BEGIN_COUNTER(onOpticDraw); -GVAR(arguments) call FUNC(onOpticDraw); -END_COUNTER(onOpticDraw); diff --git a/addons/javelin/functions/fnc_onOpticDraw.sqf b/addons/javelin/functions/fnc_onOpticDraw.sqf deleted file mode 100644 index aacc4f5fa1..0000000000 --- a/addons/javelin/functions/fnc_onOpticDraw.sqf +++ /dev/null @@ -1,202 +0,0 @@ -#include "..\script_component.hpp" -/* - * Author: jaynus, PabstMirror - * Main loop, handles scaning for targets and drawing the javelin optic - * - * Arguments: - * 0: Last run frame - * 0: Current target (what we locked last run) - * 0: Lock start time (cba mission time) - * 0: Next sound play time (ticktime) - * 0: Next target scan (ticktime) - * - * Return Value: - * None - * - * Example: - * [] call ace_javelin_fnc_onOpticDraw - * - * Public: No - */ - -// TRACE_1("onOpticDraw",diag_frameno); - -#define __TRACKINTERVAL 0 // how frequent the ui update should be. -#define __SCANNTERVAL 0.05 // how frequent the target scan check should be. -#define __LOCKONTIME 3 // Lock on won't occur sooner - -// Pull the arguments -params ["_lastRunFrame", "_currentTarget", "_lockStartTime", "_soundNextPlayTime", "_fireDisabledEH", "_nextTargetScan"]; - -// Get shooter info -private _currentShooter = if (ACE_player call CBA_fnc_canUseWeapon) then {ACE_player} else {vehicle ACE_player}; -private _currentWeapon = currentWeapon _currentShooter; -private _currentMagazine = currentMagazine _currentShooter; - -// Get weapon / ammo configs -private _ammoCount = _currentShooter ammo _currentWeapon; -private _weaponConfig = configProperties [configFile >> "CfgWeapons" >> _currentWeapon, QUOTE(configName _x == QUOTE(QGVAR(enabled))), false]; -private _ammoConfig = if (_currentMagazine != "") then { - private _ammoType = getText (configFile >> "CfgMagazines" >> _currentMagazine >> "ammo"); - configProperties [(configFile >> "CfgAmmo" >> _ammoType), "(configName _x) == 'ace_missileguidance'", false]; -} else { - [] -}; - -// Check if loaded and javelin enabled for wepaon and missile guidance enabled for loaded ammo -if ((_ammoCount == 0) || // No ammo loaded - {(count _weaponConfig) < 1} || {(getNumber (_weaponConfig select 0)) != 1} || // Not enabled for weapon - {(count _ammoConfig) < 1} || {(getNumber ((_ammoConfig select 0) >> "enabled")) != 1} // Not enabled for ammo - ) exitWith { - - __JavelinIGUITargeting ctrlShow false; - __JavelinIGUISeek ctrlSetTextColor __ColorGray; - - _fireDisabledEH = [_fireDisabledEH] call FUNC(enableFire); - _this set [0, diag_frameno]; - _this set [4, _fireDisabledEH]; - - // Fix weapon being in top-attack when loading AP magazine (https://feedback.bistudio.com/T171012) - if ((_currentShooter == ACE_player) && {_currentMagazine == "Titan_AP"} && {currentWeaponMode ACE_player == "TopDown"}) then { - { - _x params ["_xIndex", "", "", "", "_xMode"]; - if (_xMode == "Single") exitWith { - ACE_player action ["SwitchWeapon", _currentShooter, ACE_player, _xIndex]; - __JavelinIGUITop ctrlSetTextColor __ColorGray; - __JavelinIGUIDir ctrlSetTextColor __ColorGreen; - TRACE_2("fix top-attack for AP",weaponState _currentShooter,_x); - }; - } forEach (ACE_player weaponsInfo [_currentWeapon, true]); - }; -}; - - -// Bail on fast movement (keep it steady) -if ((velocity ACE_player) distance [0,0,0] > 0.75 && {cameraView == "GUNNER"} && {cameraOn == ACE_player}) exitWith { - TRACE_1("exiting gunner because movement",velocity ACE_player); - ACE_player switchCamera "INTERNAL"; - if (player != ACE_player) then { - TRACE_2("Zeus, manually reseting RC after switchCamera",player,ACE_player); - player remoteControl ACE_player; - }; -}; - -// Refresh the firemode (top/dir) -[] call FUNC(showFireMode); - -// Get UI constants -private _offsetX = 0.5 * safeZoneW - safeZoneX - 0.5; -private _offsetY = 0.5 * safeZoneH - safeZoneY - 0.5; - -private _newTarget = objNull; -if (GVAR(isLockKeyDown) && {cameraView == "GUNNER"} && {((currentVisionMode ACE_player) == 2) || {missionNamespace getVariable [QGVAR(ignoreVisionMode), false]}}) then { - // Attempting to lock; getTarget can be expensive so it's rate is limited - if (diag_tickTime > _nextTargetScan) then { - BEGIN_COUNTER(getTarget); - _newTarget = [_currentTarget, 2500, 0.6] call FUNC(getTarget); - END_COUNTER(getTarget); - _nextTargetScan = diag_tickTime + __SCANNTERVAL; - } else { - _newTarget = _currentTarget; - }; - - // Show gate box - private _boundsInput = if (_currentTarget isKindOf "CAManBase") then { - [_currentTarget,[-0.5,-0.5,-0.25],[0,0,0]]; - } else { - [_currentTarget,[-1,-1,-1],_currentTarget selectionPosition "zamerny"]; - }; - - private _bpos = _boundsInput call EFUNC(common,worldToScreenBounds); - - private _lockTime = if (isNull _currentTarget) then {0} else {CBA_missionTime - _lockStartTime}; - private _minX = ((linearConversion [1, (__LOCKONTIME - 0.5), _lockTime, 0.5 - 0.075*safeZoneW, (_bpos select 0), true]) + _offsetX) max __ConstraintLeft; - private _minY = ((linearConversion [1, (__LOCKONTIME - 0.5), _lockTime, 0.5 - 0.075*safeZoneH, (_bpos select 1), true]) + _offsetY) max __ConstraintTop; - private _maxX = (((linearConversion [1, (__LOCKONTIME - 0.5), _lockTime, 0.5 + 0.075*safeZoneW, (_bpos select 2), true]) + _offsetX) min __ConstraintRight) - (0.025 * (3 / 4) * safeZoneH); - private _maxY = (((linearConversion [1, (__LOCKONTIME - 0.5), _lockTime, 0.5 + 0.075*safeZoneH, (_bpos select 3), true]) + _offsetY) min __ConstraintBottom) - (0.025 * safeZoneH); - - // TRACE_3("",_boundsInput,_bpos,_lockTime); - // TRACE_4("",_minX,_maxX,_minY,_maxY); - - __JavelinIGUITargetingGateTL ctrlSetPosition [_minX, _minY]; - __JavelinIGUITargetingGateTR ctrlSetPosition [_maxX, _minY]; - __JavelinIGUITargetingGateBL ctrlSetPosition [_minX, _maxY]; - __JavelinIGUITargetingGateBR ctrlSetPosition [_maxX, _maxY]; - {_x ctrlCommit __TRACKINTERVAL} forEach [__JavelinIGUITargetingGateTL, __JavelinIGUITargetingGateTR, __JavelinIGUITargetingGateBL, __JavelinIGUITargetingGateBR]; - - __JavelinIGUITargeting ctrlShow true; - __JavelinIGUITargetingGate ctrlShow true; -} else { - // Not trying to lock - __JavelinIGUITargeting ctrlShow false; - __JavelinIGUITargetingGate ctrlShow false; - __JavelinIGUITargetingLines ctrlShow false; -}; - -if (isNull _newTarget) then { - // No target found - _currentTarget = objNull; - _lockStartTime = 0; - __JavelinIGUISeek ctrlSetTextColor __ColorGray; - _currentShooter setVariable ["ace_missileguidance_target", nil, false]; - - __JavelinIGUITargetingLines ctrlShow false; - - // Disallow fire - _fireDisabledEH = [_fireDisabledEH] call FUNC(disableFire); -} else { - if ((!isNull _newTarget) && {_currentTarget != _newTarget}) then { - TRACE_1("New Target, reseting locking",_newTarget); - _lockStartTime = CBA_missionTime; - _currentTarget = _newTarget; - }; - - if ((CBA_missionTime - _lockStartTime) > __LOCKONTIME) then { // Lock on after 3 seconds - TRACE_2("LOCKED!",_currentTarget,_lockStartTime); - __JavelinIGUISeek ctrlSetTextColor __ColorGreen; - __JavelinIGUITargetingLines ctrlShow true; - - // Move target marker (the crosshair) to aimpoint on the target - private _aimPointOnTarget = _currentTarget selectionPosition (["zamerny", "body"] select (_currentTarget isKindOf "CAManBase")); - (worldToScreen (_currentTarget modelToWorld _aimPointOnTarget)) params [["_aposX", 0.5], ["_aposY", 0.5]]; - private _ctrlPos = ctrlPosition __JavelinIGUITargetingLineV; - _ctrlPos set [0, _aposX + _offsetX]; - __JavelinIGUITargetingLineV ctrlSetPosition _ctrlPos; - __JavelinIGUITargetingLineV ctrlCommit __TRACKINTERVAL; - _ctrlPos = ctrlPosition __JavelinIGUITargetingLineH; - _ctrlPos set [1, _aposY + _offsetY]; - __JavelinIGUITargetingLineH ctrlSetPosition _ctrlPos; - __JavelinIGUITargetingLineH ctrlCommit __TRACKINTERVAL; - - _currentShooter setVariable ["ace_missileguidance_target", _currentTarget, false]; - - // Allow fire - _fireDisabledEH = [_fireDisabledEH] call FUNC(enableFire); - - if (diag_tickTime > _soundNextPlayTime) then { - playSound "ACE_Javelin_Locked"; - _soundNextPlayTime = diag_tickTime + 0.25; - }; - } else { - // Lock in progress - __JavelinIGUISeek ctrlSetTextColor __ColorGray; - __JavelinIGUITargetingLines ctrlShow false; - - _currentShooter setVariable ["ace_missileguidance_target", nil, false]; - - if (diag_tickTime > _soundNextPlayTime) then { - playSound "ACE_Javelin_Locking"; - _soundNextPlayTime = diag_tickTime + 0.25; - }; - // Disallow fire - _fireDisabledEH = [_fireDisabledEH] call FUNC(disableFire); - }; -}; - -// Save arguments for next run -_this set [0, diag_frameno]; -_this set [1, _currentTarget]; -_this set [2, _lockStartTime]; -_this set [3, _soundNextPlayTime]; -_this set [4, _fireDisabledEH]; -_this set [5, _nextTargetScan]; diff --git a/addons/javelin/functions/fnc_showFireMode.sqf b/addons/javelin/functions/fnc_showFireMode.sqf deleted file mode 100644 index 85ed983718..0000000000 --- a/addons/javelin/functions/fnc_showFireMode.sqf +++ /dev/null @@ -1,41 +0,0 @@ -#include "..\script_component.hpp" -/* - * Author: jaynus - * Updates fire mode on javelin display (top/dir) - * - * Arguments: - * None - * - * Return Value: - * None - * - * Example: - * [] call ace_javelin_fnc_showFireMode - * - * Public: No - */ - -(if (((vehicle ACE_player) == ACE_player) || {ACE_player call CBA_fnc_canUseWeapon}) then { - weaponState ACE_player -} else { - _turretPath = if (ACE_player == (driver _currentShooter)) then {[-1]} else {ACE_player call CBA_fnc_turretPath}; - weaponState [vehicle ACE_player, _turretPath] -}) params ["_weapon", "", "_mode"]; - -private _currentFireMode = getText (configFile >> "CfgWeapons" >> _weapon >> _mode >> QEGVAR(missileGuidance,attackProfile)); - -TRACE_3("showFireMode",_weapon,_mode,_currentFireMode); - -if (_currentFireMode == "") then { // backwards compatiblity for addons using ace_javelin (CUP) - private _currentShooter = if (ACE_player call CBA_fnc_canUseWeapon) then {ACE_player} else {vehicle ACE_player}; - _currentFireMode = _currentShooter getVariable ["ace_missileguidance_attackProfile", "JAV_TOP"]; - TRACE_1("using getVar",_currentFireMode); -}; - -if (_currentFireMode == "JAV_TOP") then { - __JavelinIGUITop ctrlSetTextColor __ColorGreen; - __JavelinIGUIDir ctrlSetTextColor __ColorGray; -} else { - __JavelinIGUITop ctrlSetTextColor __ColorGray; - __JavelinIGUIDir ctrlSetTextColor __ColorGreen; -}; diff --git a/addons/javelin/initKeybinds.inc.sqf b/addons/javelin/initKeybinds.inc.sqf deleted file mode 100644 index 7652f2fd57..0000000000 --- a/addons/javelin/initKeybinds.inc.sqf +++ /dev/null @@ -1,20 +0,0 @@ -// by commy2 - -["ACE3 Weapons", QGVAR(lockTarget), localize LSTRING(LockTarget), -{ - if (GETGVAR(isLockKeyDown,false)) exitWith {false}; - - GVAR(isLockKeyDown) = true; - TRACE_1("lock key down",GVAR(isLockKeyDown)); - - // Return false so it doesn't block the rest weapon action - false -}, -{ - // prevent holding down - GVAR(isLockKeyDown) = false; - TRACE_1("lock key up",GVAR(isLockKeyDown)); - - false -}, -[15, [false, false, false]], false] call CBA_fnc_addKeybind; //Tab Key diff --git a/addons/javelin/script_component.hpp b/addons/javelin/script_component.hpp deleted file mode 100644 index 3e9ad4ebfc..0000000000 --- a/addons/javelin/script_component.hpp +++ /dev/null @@ -1,61 +0,0 @@ -#define COMPONENT javelin -#define COMPONENT_BEAUTIFIED Javelin -#include "\z\ace\addons\main\script_mod.hpp" - -// #define DEBUG_MODE_FULL -// #define DISABLE_COMPILE_CACHE -// #define ENABLE_PERFORMANCE_COUNTERS - -#ifdef DEBUG_ENABLED_JAVELIN - #define DEBUG_MODE_FULL -#endif - -#ifdef DEBUG_SETTINGS_JAVELIN - #define DEBUG_SETTINGS DEBUG_SETTINGS_JAVELIN -#endif - -#include "\z\ace\addons\main\script_macros.hpp" - - -// Javelin IGUI defines -#define __JavelinIGUI (uinamespace getVariable "ACE_RscOptics_javelin") - -// Custom controls -#define __JavelinIGUITargeting (__JavelinIGUI displayCtrl 6999) - -#define __JavelinIGUISeek (__JavelinIGUI displayCtrl 699000) -#define __JavelinIGUITop (__JavelinIGUI displayCtrl 699001) -#define __JavelinIGUIDir (__JavelinIGUI displayCtrl 699002) - -// Constrains -#define __JavelinIGUITargetingConstrains (__JavelinIGUI displayCtrl 699100) -#define __JavelinIGUITargetingConstrainTop (__JavelinIGUI displayCtrl 699101) -#define __JavelinIGUITargetingConstrainBottom (__JavelinIGUI displayCtrl 699102) -#define __JavelinIGUITargetingConstrainLeft (__JavelinIGUI displayCtrl 699103) -#define __JavelinIGUITargetingConstrainRight (__JavelinIGUI displayCtrl 699104) - -// Targeting gate -#define __JavelinIGUITargetingGate (__JavelinIGUI displayCtrl 699200) -#define __JavelinIGUITargetingGateTL (__JavelinIGUI displayCtrl 699201) -#define __JavelinIGUITargetingGateTR (__JavelinIGUI displayCtrl 699202) -#define __JavelinIGUITargetingGateBL (__JavelinIGUI displayCtrl 699203) -#define __JavelinIGUITargetingGateBR (__JavelinIGUI displayCtrl 699204) - -// Rangefinder -#define __JavelinIGUIRangefinder (__JavelinIGUI displayCtrl 151) - -// Targeting lines -#define __JavelinIGUITargetingLines (__JavelinIGUI displayCtrl 699300) -#define __JavelinIGUITargetingLineH (__JavelinIGUI displayCtrl 699301) -#define __JavelinIGUITargetingLineV (__JavelinIGUI displayCtrl 699302) - -#define __ConstraintTop (((ctrlPosition __JavelinIGUITargetingConstrainTop) select 1) + ((ctrlPosition (__JavelinIGUITargetingConstrainTop)) select 3)) -#define __ConstraintBottom ((ctrlPosition __JavelinIGUITargetingConstrainBottom) select 1) -#define __ConstraintLeft (((ctrlPosition __JavelinIGUITargetingConstrainLeft) select 0) + ((ctrlPosition (__JavelinIGUITargetingConstrainLeft)) select 2)) -#define __ConstraintRight ((ctrlPosition __JavelinIGUITargetingConstrainRight) select 0) - -// Colors for controls -#define __ColorOrange [0.9255,0.5216,0.1216,1] -#define __ColorGreen [0.2941,0.8745,0.2157,1] -#define __ColorGray [0.2941,0.2941,0.2941,1] -#define __ColorNull [0,0,0,0] diff --git a/addons/javelin/stringtable.xml b/addons/javelin/stringtable.xml deleted file mode 100644 index ab1ff30a10..0000000000 --- a/addons/javelin/stringtable.xml +++ /dev/null @@ -1,22 +0,0 @@ - - - - - Lock Target (Hold) - Ziel aufschalten (Halten) - Захватить цель (удерживать) - Zamknout cíl (držet) - Namierz cel (przytrzymaj) - Javelin - Verrouiller la cible (maintenir) - Célpontra állás (Lenyomva tartott) - Aggangia il bersaglio - Fijar objetivo (Mantener) - Travar Alvo (Segurar) - 目標を捕捉 (長押し) - 표적 획득 (누르기) - 锁定目标(按住) - 鎖定目標 (按住) - Hedefe Kilitlen(Basılı Tut) - - - diff --git a/addons/maverick/ACE_GuidanceConfig.hpp b/addons/maverick/ACE_GuidanceConfig.hpp index 4360bd4a87..948404b7cc 100644 --- a/addons/maverick/ACE_GuidanceConfig.hpp +++ b/addons/maverick/ACE_GuidanceConfig.hpp @@ -2,6 +2,6 @@ class EGVAR(missileguidance,AttackProfiles) { class maverick { name = "LOAL-DIR"; nameLocked = "LOBL-DIR"; - functionName = QEFUNC(missileguidance,attackProfile_LIN); + functionName = QEFUNC(missileguidance,attackProfile_DIR); }; }; diff --git a/addons/maverick/CfgAmmo.hpp b/addons/maverick/CfgAmmo.hpp index 7e66e2edee..654c1fbe80 100644 --- a/addons/maverick/CfgAmmo.hpp +++ b/addons/maverick/CfgAmmo.hpp @@ -5,45 +5,6 @@ class CfgAmmo { }; class Missile_AGM_02_F: MissileBase {}; - class GVAR(D): Missile_AGM_02_F { - author = "Dani (TCVM)"; - missileLockMaxDistance = 14000; - maneuvrability = 0; - class ace_missileguidance { - enabled = 1; - - pitchRate = 15; - yawRate = 15; - - canVanillaLock = 1; - - defaultSeekerType = "Optic"; - seekerTypes[] = {"Optic"}; - - defaultSeekerLockMode = "LOBL"; - seekerLockModes[] = {"LOBL"}; - - defaultNavigationType = "AugmentedProportionalNavigation"; - navigationTypes[] = { "AugmentedProportionalNavigation" }; - - seekLastTargetPos = 1; - seekerAngle = 60; - seekerAccuracy = 1; - - seekerMinRange = 1; - seekerMaxRange = 14000; - - defaultAttackProfile = "maverick"; - attackProfiles[] = {"maverick"}; - }; - }; - - class GVAR(G): GVAR(D) { - class ace_missileguidance: ace_missileguidance { - enabled = 1; - }; - }; - class GVAR(L): Missile_AGM_02_F { author = "xrufix"; autoSeekTarget = 0; @@ -55,8 +16,9 @@ class CfgAmmo { class ace_missileguidance { enabled = 1; - pitchRate = 15; - yawRate = 15; + minDeflection = 0; + maxDeflection = 0.002; + incDeflection = 0.001; canVanillaLock = 0; @@ -66,9 +28,6 @@ class CfgAmmo { defaultSeekerLockMode = "LOAL"; seekerLockModes[] = {"LOAL","LOBL"}; - defaultNavigationType = "AugmentedProportionalNavigation"; - navigationTypes[] = { "AugmentedProportionalNavigation" }; - seekLastTargetPos = 1; seekerAngle = 60; seekerAccuracy = 1; @@ -90,8 +49,9 @@ class CfgAmmo { class ace_missileguidance { enabled = 1; - pitchRate = 20; - yawRate = 20; + minDeflection = 0; + maxDeflection = 0.002; + incDeflection = 0.001; canVanillaLock = 0; @@ -101,9 +61,6 @@ class CfgAmmo { defaultSeekerLockMode = "LOAL"; seekerLockModes[] = {"LOAL"}; - defaultNavigationType = "AugmentedProportionalNavigation"; - navigationTypes[] = { "AugmentedProportionalNavigation" }; - seekLastTargetPos = 1; seekerAngle = 40; seekerAccuracy = 1; diff --git a/addons/maverick/CfgMagazines.hpp b/addons/maverick/CfgMagazines.hpp index 1e51ede8b0..705d52010d 100644 --- a/addons/maverick/CfgMagazines.hpp +++ b/addons/maverick/CfgMagazines.hpp @@ -12,71 +12,7 @@ class CfgMagazines { class PylonRack_Missile_AGM_02_x1: magazine_Missile_AGM_02_x1 {}; class PylonRack_Missile_AGM_02_x2: magazine_Missile_AGM_02_x1 {}; - - // Optical Mavericks - class GVAR(D_magazine): 6Rnd_Missile_AGM_02_F { - ammo = QGVAR(D); - author = "Dani (TCVM)"; - displayName = CSTRING(d_mag_x1); - }; - class GVAR(D_pylonRack_1Rnd): PylonRack_1Rnd_Missile_AGM_02_F { - ammo = QGVAR(D); - author = "Dani (TCVM)"; - displayName = CSTRING(d_mag_x1); - pylonWeapon = QGVAR(D_Launcher); - }; - class GVAR(D_pylonRack_3Rnd): PylonRack_3Rnd_Missile_AGM_02_F { - ammo = QGVAR(D); - author = "Dani (TCVM)"; - displayName = CSTRING(d_mag_x3); - pylonWeapon = QGVAR(D_Launcher); - }; - class GVAR(G_magazine_x1): magazine_Missile_AGM_02_x1 { - ammo = QGVAR(G); - author = "Dani (TCVM)"; - displayName = CSTRING(g_mag_x1); - }; - class GVAR(G_pylonmissile_x1): PylonMissile_Missile_AGM_02_x1 { - ammo = QGVAR(G); - author = "Dani (TCVM)"; - displayName = CSTRING(g_mag_x1); - pylonWeapon = QGVAR(G_Launcher); - }; - class GVAR(G_pylonmissile_x2): PylonMissile_Missile_AGM_02_x2 { - ammo = QGVAR(G); - author = "Dani (TCVM)"; - displayName = CSTRING(g_mag_x2); - pylonWeapon = QGVAR(G_Launcher); - }; - - class GVAR(G_pylonRack_1Rnd): PylonRack_1Rnd_Missile_AGM_02_F { - ammo = QGVAR(G); - author = "Dani (TCVM)"; - displayName = CSTRING(g_mag_x1); - pylonWeapon = QGVAR(G_Launcher); - }; - class GVAR(G_PylonRack_3Rnd): PylonRack_3Rnd_Missile_AGM_02_F { - ammo = QGVAR(G); - author = "Dani (TCVM)"; - displayName = CSTRING(g_mag_x3); - pylonWeapon = QGVAR(G_Launcher); - }; - - class GVAR(G_PylonRack_x1): PylonRack_Missile_AGM_02_x1 { - ammo = QGVAR(G); - author = "Dani (TCVM)"; - displayName = CSTRING(g_mag_x1); - pylonWeapon = QGVAR(G_Launcher); - }; - class GVAR(G_PylonRack_x2): PylonRack_Missile_AGM_02_x2 { - ammo = QGVAR(G); - author = "Dani (TCVM)"; - displayName = CSTRING(g_mag_x2); - pylonWeapon = QGVAR(G_Launcher); - }; - - // Laser Mavericks class GVAR(L_magazine_x1): magazine_Missile_AGM_02_x1 { ammo = QGVAR(L); author = "xrufix"; diff --git a/addons/maverick/CfgWeapons.hpp b/addons/maverick/CfgWeapons.hpp index a60681a3cf..1c0ae744ef 100644 --- a/addons/maverick/CfgWeapons.hpp +++ b/addons/maverick/CfgWeapons.hpp @@ -6,22 +6,6 @@ class CfgWeapons { class MissileLauncher: LauncherCore {}; class Missile_AGM_02_Plane_CAS_01_F: MissileLauncher {}; - class GVAR(D_Launcher): Missile_AGM_02_Plane_CAS_01_F { - author = "Dani (TCVM)"; - displayname = CSTRING(D); - magazines[] = {QGVAR(D_magazine), QGVAR(D_pylonRack_1Rnd), QGVAR(D_pylonRack_3Rnd)}; - weaponLockDelay = 0.1; - weaponLockSystem = 2; - }; - - class GVAR(G_Launcher): weapon_AGM_65Launcher { - author = "Dani (TCVM)"; - displayname = CSTRING(G); - magazines[] = {QGVAR(G_magazine_x1), QGVAR(G_pylonmissile_x1), QGVAR(G_pylonmissile_x2), QGVAR(G_pylonRack_1Rnd), QGVAR(G_PylonRack_3Rnd), QGVAR(G_PylonRack_x1), QGVAR(G_PylonRack_x2)}; - weaponLockDelay = 0.1; - weaponLockSystem = 2; - }; - class GVAR(L_Launcher): weapon_AGM_65Launcher { author = "xrufix"; displayname = CSTRING(L); diff --git a/addons/maverick/config.cpp b/addons/maverick/config.cpp index d25878d004..6d5837f87d 100644 --- a/addons/maverick/config.cpp +++ b/addons/maverick/config.cpp @@ -9,6 +9,10 @@ class CfgPatches { authors[] = {"xrufix"}; url = ECSTRING(main,URL); VERSION_CONFIG; + ammo[] = { + QGVAR(L), + "ace_kh25ml" + }; magazines[] = { QGVAR(L_magazine_x1), QGVAR(L_pylonmissile_x1), diff --git a/addons/maverick/stringtable.xml b/addons/maverick/stringtable.xml index 60af8c830f..e50668ed7b 100644 --- a/addons/maverick/stringtable.xml +++ b/addons/maverick/stringtable.xml @@ -5,7 +5,7 @@ AGM-65 Maverick L, Laser Guided Anti-Ground-Missile AGM-65 Maverick L, lasergelenkte Luft-Boden-Rakete - AGM-65 Maverick L, Missile Aria-Terra Laserguidato + AGM-65 Maverick L, Guida Laser Missile Anti-Terra AGM-65 マーベリック L、レーザー誘導対地ミサイル AGM-65"小牛"飛彈L型,雷射導引對地導彈 AGM-65"小牛"L型激光制导对地导弹 @@ -70,14 +70,12 @@ MAVL MAVL MAVL - MAVL MAVL MAVL MAVL MAVL MAVL MAVL - MAVL Kh-25ML, Laser Guided Air-to-Ground-Missile @@ -86,7 +84,7 @@ Kh-25ML,雷射導引對地導彈 Kh-25ML,激光制导空地导弹 Kh-25ML、レーザー誘導対地ミサイル - Kh-25ML, Missile Aria-Terra Laserguidato + Kh-25ML, a Guida Laser Missile Aria-Terra Kh-25ML, Kierowany laserowo pocisk powietrze-ziemia Х-25МЛ, ракета Воздух-Земля с лазерным наведением Kh-25ML, Míssil Ar para Chão Guiado a Laser @@ -111,27 +109,6 @@ 1x Kh-25ML [ACE] 1x Kh-25ML [ACE] - - AGM-65 Maverick D - - - AGM-65 Maverick G - - - AGM-65 Maverick D [ACE] - - - 3x AGM-65 Maverick D [ACE] - - - AGM-65 Maverick G [ACE] - - - 2x AGM-65 Maverick G [ACE] - - - 3x AGM-65 Maverick G [ACE] - diff --git a/addons/metis/CfgAmmo.hpp b/addons/metis/CfgAmmo.hpp index c070343253..1f613a36b1 100644 --- a/addons/metis/CfgAmmo.hpp +++ b/addons/metis/CfgAmmo.hpp @@ -10,14 +10,12 @@ class CfgAmmo { class ace_missileguidance { enabled = 1; - pitchRate = 50; // Minium flap deflection for guidance - yawRate = 50; // Maximum flap deflection for guidance - initialPitch = 2; + minDeflection = 0; // Minium flap deflection for guidance + maxDeflection = 0.0027; // 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 - showTrail = 1; - // Guidance type for munitions defaultSeekerType = "SACLOS"; seekerTypes[] = { "SACLOS" }; @@ -25,12 +23,6 @@ class CfgAmmo { defaultSeekerLockMode = "LOAL"; seekerLockModes[] = { "LOAL", "LOBL" }; - defaultNavigationType = "Line"; - navigationTypes[] = { "Line" }; - - lineGainP = 10; - lineGainD = 9; - seekLastTargetPos = 0; // seek last target position [if seeker loses LOS of target, continue to last known pos] seekerAngle = 15; // Angle from the shooter's view that can track the missile seekerAccuracy = 1; // seeker accuracy multiplier @@ -38,6 +30,7 @@ class CfgAmmo { seekerMinRange = 80; seekerMaxRange = 2000; // Range from the missile which the seeker can visually search + correctionDistance = 3; // distance from center of crosshair where missile slows down offsetFromCrosshair[] = { 0, 0, 0 }; // where the missile wants to stay in relation to the center of the crosshair. // Attack profile type selection @@ -57,8 +50,9 @@ class CfgAmmo { class ace_missileguidance { enabled = 1; - pitchRate = 25; // Minium flap deflection for guidance - yawRate = 25; // Maximum flap deflection for guidance + minDeflection = 0; // Minium flap deflection for guidance + maxDeflection = 0.0027; // 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 @@ -69,12 +63,6 @@ class CfgAmmo { defaultSeekerLockMode = "LOAL"; seekerLockModes[] = { "LOAL", "LOBL" }; - defaultNavigationType = "Line"; - navigationTypes[] = { "Line" }; - - lineGainP = 21; - lineGainD = 18; - seekLastTargetPos = 0; // seek last target position [if seeker loses LOS of target, continue to last known pos] seekerAngle = 15; // Angle from the shooter's view that can track the missile seekerAccuracy = 1; // seeker accuracy multiplier @@ -82,7 +70,7 @@ class CfgAmmo { seekerMinRange = 80; seekerMaxRange = 2000; // Range from the missile which the seeker can visually search - correctionDistance = 1; // distance from center of crosshair where missile slows down + correctionDistance = 3; // distance from center of crosshair where missile slows down offsetFromCrosshair[] = { 0, 0, 0 }; // where the missile wants to stay in relation to the center of the crosshair. // Attack profile type selection diff --git a/addons/metis/config.cpp b/addons/metis/config.cpp index f16d3c7892..6758b0cc47 100644 --- a/addons/metis/config.cpp +++ b/addons/metis/config.cpp @@ -8,7 +8,7 @@ class CfgPatches { requiredVersion = REQUIRED_VERSION; requiredAddons[] = {"ace_missileguidance"}; author = ECSTRING(common,ACETeam); - authors[] = {"tcvm"}; + authors[] = {"Dani (TCVM)"}; url = ECSTRING(main,URL); VERSION_CONFIG; }; diff --git a/addons/nlaw/ACE_GuidanceConfig.hpp b/addons/nlaw/ACE_GuidanceConfig.hpp index 6003586fe8..e04753d681 100644 --- a/addons/nlaw/ACE_GuidanceConfig.hpp +++ b/addons/nlaw/ACE_GuidanceConfig.hpp @@ -12,9 +12,3 @@ class EGVAR(missileguidance,SeekerTypes) { functionName = QFUNC(seeker); }; }; -class EGVAR(missileguidance,NavigationTypes) { - class GVAR(PLOS) { - functionName = QFUNC(navigation); - onFired = QFUNC(navigation_onFired); - }; -}; diff --git a/addons/nlaw/CfgAmmo.hpp b/addons/nlaw/CfgAmmo.hpp index f572678d20..b579ebeb06 100644 --- a/addons/nlaw/CfgAmmo.hpp +++ b/addons/nlaw/CfgAmmo.hpp @@ -6,8 +6,9 @@ class CfgAmmo { class ace_missileguidance { enabled = 1; - pitchRate = 5; // Minium flap deflection for guidance - yawRate = 10; // Maximum flap deflection for guidance + 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 @@ -18,9 +19,6 @@ class CfgAmmo { defaultSeekerLockMode = "LOBL"; seekerLockModes[] = {"LOBL"}; - defaultNavigationType = QGVAR(PLOS); - navigationTypes[] = { QGVAR(PLOS) }; - seekLastTargetPos = 0; // seek last target position [if seeker loses LOS of target, continue to last known pos] seekerAngle = 45; // Angle in front of the missile which can be searched seekerAccuracy = 1; // seeker accuracy multiplier diff --git a/addons/nlaw/XEH_PREP.hpp b/addons/nlaw/XEH_PREP.hpp index 1cd8dbc3c5..aad1e57efb 100644 --- a/addons/nlaw/XEH_PREP.hpp +++ b/addons/nlaw/XEH_PREP.hpp @@ -4,5 +4,3 @@ PREP(attackProfile); PREP(keyDown); PREP(onFired); PREP(seeker); -PREP(navigation); -PREP(navigation_onFired); diff --git a/addons/nlaw/functions/fnc_attackProfile.sqf b/addons/nlaw/functions/fnc_attackProfile.sqf index f527780835..21f77f0ff5 100644 --- a/addons/nlaw/functions/fnc_attackProfile.sqf +++ b/addons/nlaw/functions/fnc_attackProfile.sqf @@ -1,4 +1,4 @@ -#include "..\script_component.hpp" +#include "script_component.hpp" /* * Author: PabstMirror * NLAW missile guidance attack profile. @@ -18,13 +18,14 @@ */ params ["_seekerTargetPos", "_args", "_attackProfileStateParams"]; - -#ifdef DRAW_NLAW_INFO _args params ["_firedEH", "_launchParams"]; _launchParams params ["","_targetLaunchParams", "", "_attackProfile"]; _targetLaunchParams params ["", "", "_launchPos"]; _firedEH params ["","","","","","","_projectile"]; +// Use seeker (if terminal) +if (_seekerTargetPos isNotEqualTo [0,0,0]) exitWith {_seekerTargetPos}; + _attackProfileStateParams params ["_startTime", "_startLOS", "_yawChange", "_pitchChange"]; (_startLOS call CBA_fnc_vect2Polar) params ["", "_yaw", "_pitch"]; @@ -35,6 +36,14 @@ private _flightTime = CBA_missionTime - _startTime; private _realYaw = _yaw + _yawChange * _flightTime; private _realPitch = _pitch + _pitchChange * _flightTime; +private _returnTargetPos = _launchPos vectorAdd ([_distanceFromLaunch, _realYaw, _realPitch] call CBA_fnc_polar2vect); + +if (_attackProfile == QGVAR(overflyTopAttack)) then { // Add 2m height in OTA attack mode + _returnTargetPos = _returnTargetPos vectorAdd [0,0,2]; +}; + + +#ifdef DRAW_NLAW_INFO drawIcon3D ["\a3\ui_f\data\IGUI\Cfg\Cursors\selectover_ca.paa", [1,0,1,1], ASLtoAGL _launchPos, 0.75, 0.75, 0, "LAUNCH", 1, 0.025, "TahomaB"]; drawIcon3D ["\a3\ui_f\data\IGUI\Cfg\Cursors\selectover_ca.paa", [0,1,1,1], ASLtoAGL (_launchPos vectorAdd (_startLOS vectorMultiply (_distanceFromLaunch + 50))), 0.75, 0.75, 0, "Original LOS", 1, 0.025, "TahomaB"]; drawIcon3D ["\a3\ui_f\data\IGUI\Cfg\Cursors\selectover_ca.paa", [1,1,0,1], ASLtoAGL (_launchPos vectorAdd ([_distanceFromLaunch + 50, _realYaw, _realPitch] call CBA_fnc_polar2vect)), 0.75, 0.75, 0, format ["Predicted @%1sec",(floor(_flightTime * 10)/10)], 1, 0.025, "TahomaB"]; @@ -47,4 +56,5 @@ if ((count _test) > 0) then { }; #endif -[0, 0, 1] +// TRACE_1("Adjusted target position", _returnTargetPos); +_returnTargetPos; diff --git a/addons/nlaw/functions/fnc_keyDown.sqf b/addons/nlaw/functions/fnc_keyDown.sqf index 362313dad2..df8791aa11 100644 --- a/addons/nlaw/functions/fnc_keyDown.sqf +++ b/addons/nlaw/functions/fnc_keyDown.sqf @@ -1,4 +1,4 @@ -#include "..\script_component.hpp" +#include "script_component.hpp" /* * Author: PabstMirror * Handles the track key being held down. @@ -74,7 +74,7 @@ playSound "ACE_Sound_Click"; _args set [1, _yaw]; _args set [2, _pitch]; - #ifdef DRAW_NLAW_INFO + #ifdef DEBUG_MODE_FULL hintSilent format ["Instantaneous\nYaw: %1\n Pitch: %2\nGVAR\nYaw: %3\nPitch: %4", _yawChange, _pitchChange, GVAR(yawChange), GVAR(pitchChange)]; #endif }, .25, [CBA_missionTime, _yaw, _pitch, true]] call CBA_fnc_addPerFrameHandler; diff --git a/addons/nlaw/functions/fnc_navigation.sqf b/addons/nlaw/functions/fnc_navigation.sqf deleted file mode 100644 index ee68be7d4c..0000000000 --- a/addons/nlaw/functions/fnc_navigation.sqf +++ /dev/null @@ -1,79 +0,0 @@ -#include "..\script_component.hpp" -/* - * Author: tcvm - * Attempts to hold angle as fed to by seeker. Does so with a simple proportional controller - * - * Arguments: - * Guidance Arg Array - * - * Return Value: - * Commanded acceleration normal to LOS in world space - * - * Example: - * [] call ace_missileguidance_fnc_navigationType_line - * - * Public: No - */ -// arbitrary constant -#define PROPORTIONALITY_CONSTANT 20 -params ["_args", "_timestep", "_seekerTargetPos", "_profileAdjustedTargetPos", "_targetData", "_navigationParams"]; -_args params ["_firedEH"]; -_firedEH params ["","","","","","","_projectile"]; - -_navigationParams params ["_yawChange", "_pitchChange", "_lastPitch", "_lastYaw", "_initialPitch", "_pitchUp", "_lastYawRateDifference"]; - -// for some reason we need to multiply this. I don't know why, but it just works -_pitchChange = _pitchChange * 1.5; -_yawChange = _yawChange * 1.5; - -((velocity _projectile) call CBA_fnc_vect2polar) params ["", "_currentYaw", "_currentPitch"]; - -private _pitchRate = if (_timestep == 0) then { - 0 -} else { - (_currentPitch - _lastPitch) / _timestep -}; -_navigationParams set [2, _currentPitch]; - -private _pitchModifier = if (_pitchChange == 0) then { - 1 -} else { - abs (_pitchRate / _pitchChange) -}; -private _desiredPitchChange = (_pitchChange - _pitchRate) * PROPORTIONALITY_CONSTANT * _pitchModifier; -_desiredPitchChange = _desiredPitchChange + _pitchUp * (_initialPitch - _currentPitch) * PROPORTIONALITY_CONSTANT * _pitchModifier; - -private _yawRate = if (_timestep == 0) then { - 0 -} else { - (_currentYaw - _lastYaw) / _timestep -}; -_navigationParams set [3, _currentYaw]; - -private _yawModifier = if (_yawChange == 0) then { - 1 -} else { - abs (_yawRate / _yawChange) -}; - -private _yawRateDifference = _yawChange - _yawRate; -private _yawChangeDerivative = if (_timestep == 0) then { - 0 -} else { - (_yawRateDifference - _lastYawRateDifference) / _timestep -}; -_navigationParams set [6, _yawRateDifference]; - -private _desiredYawChange = _yawRateDifference * PROPORTIONALITY_CONSTANT + _yawRateDifference * 2; -systemChat str [_yawChange, _yawRate]; - -#ifdef DRAW_NLAW_INFO -drawIcon3D ["\a3\ui_f\data\IGUI\Cfg\Cursors\selectover_ca.paa", [1,0,1,1], ASLtoAGL getPosASLVisual _projectile, 0.75, 0.75, 0, format ["dP [%1] dY: [%2]", _desiredPitchChange, _desiredYawChange], 1, 0.025, "TahomaB"]; -drawIcon3D ["\a3\ui_f\data\IGUI\Cfg\Cursors\selectover_ca.paa", [1,0,1,1], [0, 0, 1] vectorAdd ASLtoAGL getPosASLVisual _projectile, 0.75, 0.75, 0, format ["pitch proportional [%1] yaw proportional [%2]", _pitchModifier, _yawModifier], 1, 0.025, "TahomaB"]; -#endif - -TRACE_4("nlaw pitch/yaw info",_currentPitch,_lastPitch,_currentYaw,_lastYaw); -TRACE_6("nlaw navigation",_yawChange,_desiredYawChange,_pitchChange,_desiredPitchChange,_yawRate,_pitchRate); - -_projectile vectorModelToWorldVisual [_yawChange + _desiredYawChange, 0, _pitchChange + _desiredPitchChange] - diff --git a/addons/nlaw/functions/fnc_navigation_onFired.sqf b/addons/nlaw/functions/fnc_navigation_onFired.sqf deleted file mode 100644 index 895d5ff78b..0000000000 --- a/addons/nlaw/functions/fnc_navigation_onFired.sqf +++ /dev/null @@ -1,70 +0,0 @@ -#include "..\script_component.hpp" -/* - * Author: PabstMirror - * Sets up missile guidance state arrays (called from missileGuidance's onFired). - * - * Arguments: - * Guidance Arg Array - * - * Return Value: - * Navigation Parameters - * - * Example: - * [] call ace_nlaw_fnc_onFired - * - * Public: No - */ - -params ["_firedEH", "_launchParams", "_flightParams", "_seekerParams", "_stateParams"]; -_firedEH params ["_shooter","","","","","","_projectile"]; -_launchParams params ["","_targetLaunchParams","","_attackProfile"]; -_targetLaunchParams params ["_target"]; -_stateParams params ["", "", "", "", "_navigationParams"]; - -// Reset _launchPos origin as projectile's height instead of player's foot -_targetLaunchParams set [2, getPosASL _projectile]; - -// Get state params: -TRACE_3("start of attack profile",_attackProfile,_shooter,vectorDir _projectile); - -private _firedLOS = _shooter weaponDirection (currentWeapon _shooter); -private _yawChange = 0; -private _pitchChange = 0; - -if (_shooter == ACE_player) then { - TRACE_2("isPlayer",GVAR(yawChange),GVAR(pitchChange)); - _yawChange = GVAR(yawChange); - _pitchChange = GVAR(pitchChange); - TRACE_1("los check",_firedLOS call CBA_fnc_vect2Polar); -} else { - if ((!isNil "_target") && {!isNull _target}) then { - _firedLOS = (getPosASL _projectile) vectorFromTo (aimPos _target); - (((eyePos _shooter) vectorFromTo (aimPos _target)) call CBA_fnc_vect2Polar) params ["", "_startYaw", "_startPitch"]; - // Add some random error to AI's velocity prediction: - private _random = random [(_shooter skillFinal "aimingAccuracy") min 0.9, 1, 2-((_shooter skillFinal "aimingAccuracy") min 0.9)]; - (((eyePos _shooter) vectorFromTo ((aimPos _target) vectorAdd ((velocity _target) vectorMultiply (_random)))) call CBA_fnc_vect2Polar) params ["", "_predictedYaw", "_predictedPitch"]; - _yawChange = ([_predictedYaw - _startYaw] call CBA_fnc_simplifyAngle180); - _pitchChange = ([_predictedPitch - _startPitch] call CBA_fnc_simplifyAngle180); - TRACE_1("AI",_target); - } else { - TRACE_1("AI - no target",_target); - }; -}; - -// Limit Max Deflection -//_yawChange = -10 max _yawChange min 10; -//_pitchChange = -10 max _pitchChange min 10; - -((velocity _projectile) call CBA_fnc_vect2polar) params ["", "_currentYaw", "_currentPitch"]; -((ACE_player weaponDirection (currentWeapon ACE_player)) call CBA_fnc_vect2Polar) params ["", "_yaw", "_pitch"]; - -TRACE_5("attackProfileStateParams",_firedLOS,_yawChange,_pitchChange,_currentPitch,_currentYaw); -_navigationParams set [0, _yawChange]; -_navigationParams set [1, _pitchChange]; -_navigationParams set [2, _currentPitch]; // last pitch -_navigationParams set [3, _currentYaw]; // last yaw -_navigationParams set [4, _pitch]; // initial pitch -_navigationParams set [5, 0]; // whether or not to zero out the pitch -_navigationParams set [6, 0]; -_navigationParams - diff --git a/addons/nlaw/functions/fnc_onFired.sqf b/addons/nlaw/functions/fnc_onFired.sqf index f19aacba75..0552afcd86 100644 --- a/addons/nlaw/functions/fnc_onFired.sqf +++ b/addons/nlaw/functions/fnc_onFired.sqf @@ -1,4 +1,4 @@ -#include "..\script_component.hpp" +#include "script_component.hpp" /* * Author: PabstMirror * Sets up missile guidance state arrays (called from missileGuidance's onFired). @@ -19,7 +19,7 @@ params ["_firedEH", "_launchParams", "_flightParams", "_seekerParams", "_statePa _firedEH params ["_shooter","","","","","","_projectile"]; _launchParams params ["","_targetLaunchParams","","_attackProfile"]; _targetLaunchParams params ["_target"]; -_stateParams params ["", "_seekerStateParams", "_attackProfileStateParams"]; +_stateParams params ["", "", "_attackProfileStateParams"]; // Reset _launchPos origin as projectile's height instead of player's foot _targetLaunchParams set [2, getPosASL _projectile]; @@ -27,7 +27,7 @@ _targetLaunchParams set [2, getPosASL _projectile]; // Get state params: TRACE_3("start of attack profile",_attackProfile,_shooter,vectorDir _projectile); -private _firedLOS = vectorDir _projectile; +private _firedLOS = _shooter weaponDirection (currentWeapon _shooter); private _yawChange = 0; private _pitchChange = 0; @@ -55,10 +55,6 @@ if (_shooter == ACE_player) then { _yawChange = -10 max _yawChange min 10; _pitchChange = -10 max _pitchChange min 10; -_seekerStateParams set [2, _yawChange]; -_seekerStateParams set [3, _pitchChange]; -_seekerStateParams set [4, CBA_missionTime] - TRACE_3("attackProfileStateParams",_firedLOS,_yawChange,_pitchChange); _attackProfileStateParams set [0, CBA_missionTime]; _attackProfileStateParams set [1, _firedLOS]; diff --git a/addons/nlaw/functions/fnc_seeker.sqf b/addons/nlaw/functions/fnc_seeker.sqf index a3a60e94a1..af9b349cc2 100644 --- a/addons/nlaw/functions/fnc_seeker.sqf +++ b/addons/nlaw/functions/fnc_seeker.sqf @@ -1,4 +1,4 @@ -#include "..\script_component.hpp" +#include "script_component.hpp" /* * Author: PabstMirror * Handles the top down attack seeker for missile guidance. @@ -16,27 +16,14 @@ * * Public: No */ -#define PITCH_UP_TIME 1 -params ["", "_args", "_seekerStateParams", "", "", "_targetData"]; +params ["", "_args", "_seekerStateParams"]; _args params ["_firedEH", "_launchParams", "", "_seekerParams", "_stateParams"]; _firedEH params ["","","","","","","_projectile"]; _launchParams params ["", "_targetLaunchParams", "", "_attackProfile"]; _targetLaunchParams params ["", "", "_launchPos"]; -_stateParams params ["", "", "", "", "_navigationParams"]; -if (_attackProfile == QGVAR(directAttack)) exitWith { - _navigationParams set [5, 1]; - [0,0,0] -}; - -_seekerStateParams params ["", "", "", "_originalPitchRate", "_startTime"]; -_navigationParams params ["", "_pitchRate"]; - -// pitch up for the first second of flight to begin an over-fly trajectory -private _pitchChange = linearConversion [0, PITCH_UP_TIME, CBA_missionTime - _startTime, 2, 0, true]; -_navigationParams set [1, _originalPitchRate + _pitchChange]; -_navigationParams set [5, ((CBA_missionTime - _startTime) min PITCH_UP_TIME) / PITCH_UP_TIME]; +if (_attackProfile == QGVAR(directAttack)) exitWith {[0,0,0]}; private _projPos = getPosASL _projectile; diff --git a/addons/nlaw/functions/script_component.hpp b/addons/nlaw/functions/script_component.hpp new file mode 100644 index 0000000000..50d8cac4c1 --- /dev/null +++ b/addons/nlaw/functions/script_component.hpp @@ -0,0 +1 @@ +#include "\z\ace\addons\nlaw\script_component.hpp" diff --git a/addons/nlaw/stringtable.xml b/addons/nlaw/stringtable.xml index 0d2eaca93a..93bd236237 100644 --- a/addons/nlaw/stringtable.xml +++ b/addons/nlaw/stringtable.xml @@ -4,8 +4,8 @@ NLAW Track Target (Hold) NLAW Zielverfolgung - NLAW Traccia Bersaglio (Tieni Premuto) - NLAW 目標追跡 (ホールド) + NLAW Traccia Bersaglio (Mantieni) + NALW 目標の追跡 (押しっぱ) NLAW 追踪目标(按住) 次世代輕型反坦克導彈發射器追蹤目標 (按住) Śledzenie Celu NLAW (Przytrzymaj) @@ -25,7 +25,7 @@ 直射模式 直射模式 Bezpośredni atak - 직사 타격 + 직선 공격 Прямая атака Ataque Direto Attaque directe @@ -41,7 +41,7 @@ 飞越攻顶模式 攻頂模式 Atak z góry - 상부 타격 + 탑어택 Атака сверху Ataque por cima Attaque par le haut