From e9b4618d6a90a159bfc728aea2944ca459cfd4d9 Mon Sep 17 00:00:00 2001 From: PabstMirror Date: Wed, 21 Sep 2016 01:25:11 -0500 Subject: [PATCH] Pike prototype --- addons/pike/$PBOPREFIX$ | 1 + addons/pike/CfgAmmo.hpp | 58 ++++++++++++++++ addons/pike/CfgEventhandlers.hpp | 18 +++++ addons/pike/CfgMagazines.hpp | 13 ++++ addons/pike/CfgWeapons.hpp | 6 ++ addons/pike/README.md | 11 +++ addons/pike/XEH_PREP.hpp | 1 + addons/pike/XEH_postInit.sqf | 5 ++ addons/pike/XEH_preInit.sqf | 7 ++ addons/pike/XEH_preStart.sqf | 3 + addons/pike/config.cpp | 20 ++++++ addons/pike/functions/fnc_handleFired.sqf | 61 +++++++++++++++++ addons/pike/functions/script_component.hpp | 1 + addons/pike/models/ace_pike_ammo.p3d | Bin 0 -> 20548 bytes addons/pike/models/pike_surface.rvmat | 76 +++++++++++++++++++++ addons/pike/script_component.hpp | 18 +++++ addons/pike/stringtable.xml | 8 +++ 17 files changed, 307 insertions(+) create mode 100644 addons/pike/$PBOPREFIX$ create mode 100644 addons/pike/CfgAmmo.hpp create mode 100644 addons/pike/CfgEventhandlers.hpp create mode 100644 addons/pike/CfgMagazines.hpp create mode 100644 addons/pike/CfgWeapons.hpp create mode 100644 addons/pike/README.md create mode 100644 addons/pike/XEH_PREP.hpp create mode 100644 addons/pike/XEH_postInit.sqf create mode 100644 addons/pike/XEH_preInit.sqf create mode 100644 addons/pike/XEH_preStart.sqf create mode 100644 addons/pike/config.cpp create mode 100644 addons/pike/functions/fnc_handleFired.sqf create mode 100644 addons/pike/functions/script_component.hpp create mode 100644 addons/pike/models/ace_pike_ammo.p3d create mode 100644 addons/pike/models/pike_surface.rvmat create mode 100644 addons/pike/script_component.hpp create mode 100644 addons/pike/stringtable.xml diff --git a/addons/pike/$PBOPREFIX$ b/addons/pike/$PBOPREFIX$ new file mode 100644 index 0000000000..2eefcc6075 --- /dev/null +++ b/addons/pike/$PBOPREFIX$ @@ -0,0 +1 @@ +z\ace\addons\pike \ No newline at end of file diff --git a/addons/pike/CfgAmmo.hpp b/addons/pike/CfgAmmo.hpp new file mode 100644 index 0000000000..69a712252f --- /dev/null +++ b/addons/pike/CfgAmmo.hpp @@ -0,0 +1,58 @@ +class CfgAmmo { + class FlareBase; + class GVAR(ammo_gl): FlareBase { + model = QPATHTOF(models\ace_pike_ammo.p3d); + lightColor[] = {0, 0, 0, 0}; + smokeColor[] = {0, 0, 0, 0}; + timeToLive = 1; + }; + + class M_Titan_AT; + class GVAR(ammo_rocket): M_Titan_AT { + irLock = 0; + laserLock = 0; + airLock = 0; + manualControl = 0; + + timeToLive = 30; + + model = QPATHTOF(models\ace_pike_ammo.p3d); + maxSpeed = 150; + thrust = 30; + thrustTime = 2; + + hit = 100; + indirectHit = 8; + indirectHitRange = 6; + + initTime = 0; + + // Begin ACE guidance Configs + class ace_missileguidance { + enabled = 1; + + minDeflection = 0.0005; // Minium flap deflection for guidance + maxDeflection = 0.0025; // 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 = "SALH"; + seekerTypes[] = {"SALH"}; + + defaultSeekerLockMode = "LOAL"; + seekerLockModes[] = {"LOAL"}; + + seekerAngle = 90; // Angle in front of the missile which can be searched + seekerAccuracy = 1; // seeker accuracy multiplier + + seekerMinRange = 1; + seekerMaxRange = 1000; // Range from the missile which the seeker can visually search + + // Attack profile type selection + defaultAttackProfile = "LIN"; + attackProfiles[] = { "LIN", "DIR", "MID", "HI" }; + }; + }; +}; diff --git a/addons/pike/CfgEventhandlers.hpp b/addons/pike/CfgEventhandlers.hpp new file mode 100644 index 0000000000..5da5fd0dc2 --- /dev/null +++ b/addons/pike/CfgEventhandlers.hpp @@ -0,0 +1,18 @@ + +class Extended_PreStart_EventHandlers { + class ADDON { + init = QUOTE(call COMPILE_FILE(XEH_preStart)); + }; +}; + +class Extended_PreInit_EventHandlers { + class ADDON { + init = QUOTE( call COMPILE_FILE(XEH_preInit) ); + }; +}; + +class Extended_PostInit_EventHandlers { + class ADDON { + init = QUOTE( call COMPILE_FILE(XEH_postInit) ); + }; +}; diff --git a/addons/pike/CfgMagazines.hpp b/addons/pike/CfgMagazines.hpp new file mode 100644 index 0000000000..ef69f81494 --- /dev/null +++ b/addons/pike/CfgMagazines.hpp @@ -0,0 +1,13 @@ +class CfgMagazines { + class 1Rnd_HE_Grenade_shell; + class ACE_40mm_Pike: 1Rnd_HE_Grenade_shell { + displayName = CSTRING(magazine_displayName); + displayNameShort = "Pike SALH"; + descriptionShort = ""; + // picture = QPATHTOF(data\inventory_ca.paa); + ammo = QGVAR(ammo_gl); + model = QPATHTOF(models\ace_pike_ammo.p3d); + initSpeed = 40; + mass = 10; + }; +}; diff --git a/addons/pike/CfgWeapons.hpp b/addons/pike/CfgWeapons.hpp new file mode 100644 index 0000000000..61c2fef5a1 --- /dev/null +++ b/addons/pike/CfgWeapons.hpp @@ -0,0 +1,6 @@ +class CfgWeapons { + class GrenadeLauncher; + class UGL_F: GrenadeLauncher { + magazines[] += {"ACE_40mm_Pike"}; + }; +}; diff --git a/addons/pike/README.md b/addons/pike/README.md new file mode 100644 index 0000000000..1e3424afa4 --- /dev/null +++ b/addons/pike/README.md @@ -0,0 +1,11 @@ +ace_pike +=========== + +Adds 40mm Pike semi-active laser seeking rocket, firable from the M320 or EGLM grenade launcher. + + +## Maintainers + +The people responsible for merging changes to this component or answering potential questions. + +- [PabstMirror](http://github.com/PabstMirror) diff --git a/addons/pike/XEH_PREP.hpp b/addons/pike/XEH_PREP.hpp new file mode 100644 index 0000000000..64eb51ef80 --- /dev/null +++ b/addons/pike/XEH_PREP.hpp @@ -0,0 +1 @@ +PREP(handleFired); diff --git a/addons/pike/XEH_postInit.sqf b/addons/pike/XEH_postInit.sqf new file mode 100644 index 0000000000..7f39382a7e --- /dev/null +++ b/addons/pike/XEH_postInit.sqf @@ -0,0 +1,5 @@ +#include "script_component.hpp" + +if (!hasInterface) exitWith {}; + +["ace_firedPlayer", FUNC(handleFired)] call CBA_fnc_addEventHandler; diff --git a/addons/pike/XEH_preInit.sqf b/addons/pike/XEH_preInit.sqf new file mode 100644 index 0000000000..a7feade1c3 --- /dev/null +++ b/addons/pike/XEH_preInit.sqf @@ -0,0 +1,7 @@ +#include "script_component.hpp" + +ADDON = false; + +#include "XEH_PREP.hpp" + +ADDON = true; diff --git a/addons/pike/XEH_preStart.sqf b/addons/pike/XEH_preStart.sqf new file mode 100644 index 0000000000..022888575e --- /dev/null +++ b/addons/pike/XEH_preStart.sqf @@ -0,0 +1,3 @@ +#include "script_component.hpp" + +#include "XEH_PREP.hpp" diff --git a/addons/pike/config.cpp b/addons/pike/config.cpp new file mode 100644 index 0000000000..0fea333706 --- /dev/null +++ b/addons/pike/config.cpp @@ -0,0 +1,20 @@ +#include "script_component.hpp" + +class CfgPatches { + class ADDON { + name = COMPONENT_NAME; + units[] = {}; + weapons[] = {}; + requiredVersion = REQUIRED_VERSION; + requiredAddons[] = {"ace_common", "ace_laser", "ace_missileguidance"}; + author = ECSTRING(common,ACETeam); + authors[] = {"PabstMirror"}; + url = ECSTRING(main,URL); + VERSION_CONFIG; + }; +}; + +#include "CfgAmmo.hpp" +#include "CfgEventhandlers.hpp" +#include "CfgMagazines.hpp" +#include "CfgWeapons.hpp" diff --git a/addons/pike/functions/fnc_handleFired.sqf b/addons/pike/functions/fnc_handleFired.sqf new file mode 100644 index 0000000000..34b1ee5816 --- /dev/null +++ b/addons/pike/functions/fnc_handleFired.sqf @@ -0,0 +1,61 @@ +/* + * Author: PabstMirror + * Handlese firing the 40mm pike grenade/rocket + * + * Arguments: + * FiredEH + * + * Return Value: + * Nothing + * + * Example: + * [] call ace_pike_fnc_handleFired + * + * Public: No + */ +#include "script_component.hpp" + +//IGNORE_PRIVATE_WARNING ["_unit", "_weapon", "_muzzle", "_mode", "_ammo", "_magazine", "_projectile"]; +TRACE_7("firedEH:",_unit, _weapon, _muzzle, _mode, _ammo, _magazine, _projectile); +if (_ammo != QGVAR(ammo_gl)) exitWith {}; + +[{ + params ["_unit", "_weapon", "_muzzle", "_mode", "_ammo", "_magazine", "_projectile"]; + TRACE_7("rocket stage",_unit, _weapon, _muzzle, _mode, _ammo, _magazine, _projectile); + + //If null (deleted or hit water) exit: + if (isNull _projectile) exitWith {}; + + private _posASL = getPosASL _projectile; + private _vel = velocity _projectile; + + systemChat format ["gl %1 %2",_vel, round vectorMagnitude _vel]; + + deleteVehicle _projectile; + + private _rocket = QGVAR(ammo_rocket) createVehicle (getPosATL _projectile); + + _rocket setPosASL _posASL; + + // Set correct velocity and direction (must set velocity before changeMissileDirection) + _rocket setVelocity _vel; + [_rocket, vectorNormalized _vel] call EFUNC(missileguidance,changeMissileDirection); + + + private _vel = velocity _rocket; + systemChat format ["rocket %1 %2",_vel, round vectorMagnitude _vel]; + + // Start missile guidance + [_unit, _weapon, _muzzle, _mode, QGVAR(ammo_rocket), _magazine, _rocket] call EFUNC(missileguidance,onFired); + + #ifdef DEBUG_MODE_FULL + [{ + params ["_args", "_pfID"]; + _args params [["_rocket", objNull], "_startTime"]; + if (!alive _rocket) exitWith {systemChat "done"; [_pfID] call CBA_fnc_removePerFrameHandler;}; + drawIcon3D ["\a3\ui_f\data\IGUI\Cfg\Cursors\selectover_ca.paa", [1,0,1,1], ASLtoAGL getPosASL _rocket, 0.75, 0.75, 0, "", 1, 0.025, "TahomaB"]; + hintSilent format ["vel %1\n%2 mps\n%3dist %3\ntof %4",velocity _rocket, round vectorMagnitude velocity _rocket, _rocket distance player, time - _startTime]; + }, 0.0, [_rocket, time]] call CBA_fnc_addPerFrameHandler; + #endif + +}, _this, 0.1] call CBA_fnc_waitAndExecute; diff --git a/addons/pike/functions/script_component.hpp b/addons/pike/functions/script_component.hpp new file mode 100644 index 0000000000..85866ed86b --- /dev/null +++ b/addons/pike/functions/script_component.hpp @@ -0,0 +1 @@ +#include "\z\ace\addons\pike\script_component.hpp" \ No newline at end of file diff --git a/addons/pike/models/ace_pike_ammo.p3d b/addons/pike/models/ace_pike_ammo.p3d new file mode 100644 index 0000000000000000000000000000000000000000..c98ca0fff56881a68d586650482b91113042f32e GIT binary patch literal 20548 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 literal 0 HcmV?d00001 diff --git a/addons/pike/models/pike_surface.rvmat b/addons/pike/models/pike_surface.rvmat new file mode 100644 index 0000000000..043d6baa36 --- /dev/null +++ b/addons/pike/models/pike_surface.rvmat @@ -0,0 +1,76 @@ +class StageTI { + texture = "a3\data_f\default_glass_ti_ca.paa"; +}; +ambient[] = {1,1,1,1}; +diffuse[] = {1,1,1,1}; +forcedDiffuse[] = {0,0,0,1}; +emmisive[] = {0,0,0,0}; +specular[] = {0.2,0.2,0.2,1}; +specularPower = 500; +PixelShaderID = "Super"; +VertexShaderID = "Super"; +class Stage1 { + texture="#(argb,8,8,3)color(0.5,0.5,0.5,1)"; + uvSource = "tex"; + class uvTransform { + aside[] = {1,0,0}; + up[] = {0,1,0}; + dir[] = {0,0,1}; + pos[] = {0,0,0}; + }; +}; +class Stage2 { + texture = "#(argb,8,8,3)color(0.5,0.5,0.5,0.5,DT)"; + uvSource = "tex"; + class uvTransform { + aside[] = {1,0,0}; + up[] = {0,1,0}; + dir[] = {0,0,1}; + pos[] = {0,0,0}; + }; +}; +class Stage3 { + texture = "#(argb,8,8,3)color(0,0,0,0,MC)"; + uvSource = "tex"; + class uvTransform { + aside[] = {1,0,0}; + up[] = {0,1,0}; + dir[] = {0,0,1}; + pos[] = {0,0,0}; + }; +}; +class Stage4 { + texture = "#(argb,8,8,3)color(1,1,1,1,AS)"; + uvSource = "tex"; + class uvTransform { + aside[] = {1,0,0}; + up[] = {0,1,0}; + dir[] = {0,0,1}; + pos[] = {0,0,0}; + }; +}; +class Stage5 { + texture = "#(argb,8,8,3)color(0,0.6,1,1,SMDI)"; + uvSource = "tex"; + class uvTransform { + aside[] = {1,0,0}; + up[] = {0,1,0}; + dir[] = {0,0,1}; + pos[] = {0,0,0}; + }; +}; +class Stage6 { + texture = "#(ai,32,128,1)fresnel(1.6,1.4)"; + uvSource="none"; +}; +class Stage7 { + useWorldEnvMap = "true"; + texture = "a3\data_f\env_interier_car_ca.paa"; + uvSource = "tex"; + class uvTransform { + aside[] = {1,0,0}; + up[] = {0,1,0}; + dir[] = {0,0,1}; + pos[] = {0,0,0}; + }; +}; diff --git a/addons/pike/script_component.hpp b/addons/pike/script_component.hpp new file mode 100644 index 0000000000..4b45e277e3 --- /dev/null +++ b/addons/pike/script_component.hpp @@ -0,0 +1,18 @@ +#define COMPONENT pike +#define COMPONENT_BEAUTIFIED Pike +#include "\z\ace\addons\main\script_mod.hpp" + +#define DEBUG_MODE_FULL +#define DISABLE_COMPILE_CACHE +#define CBA_DEBUG_SYNCHRONOUS +#define ENABLE_PERFORMANCE_COUNTERS + +#ifdef DEBUG_ENABLED_PIKE + #define DEBUG_MODE_FULL +#endif + +#ifdef DEBUG_SETTINGS_PIKE + #define DEBUG_SETTINGS DEBUG_SETTINGS_PIKE +#endif + +#include "\z\ace\addons\main\script_macros.hpp" diff --git a/addons/pike/stringtable.xml b/addons/pike/stringtable.xml new file mode 100644 index 0000000000..3ed702fcce --- /dev/null +++ b/addons/pike/stringtable.xml @@ -0,0 +1,8 @@ + + + + + 40mm Pike + + + \ No newline at end of file