From d8ebf8bef1129a4ab49e4bf4bc1c6c73ed1850e0 Mon Sep 17 00:00:00 2001 From: Thomas Kooi Date: Mon, 12 Jan 2015 23:25:47 +0100 Subject: [PATCH] Added cse_sys_equipment source --- TO_MERGE/cse/sys_equipment/CfgAmmo.h | 159 +++++++ .../cse/sys_equipment/CfgFactionClasses.h | 7 + TO_MERGE/cse/sys_equipment/CfgFunctions.h | 49 +++ TO_MERGE/cse/sys_equipment/CfgMovesBasic.h | 277 ++++++++++++ TO_MERGE/cse/sys_equipment/CfgMovesMaleSdr.h | 403 ++++++++++++++++++ TO_MERGE/cse/sys_equipment/CfgSounds.h | 28 ++ TO_MERGE/cse/sys_equipment/CfgVehicles.h | 224 ++++++++++ TO_MERGE/cse/sys_equipment/CfgWeapons.h | 56 +++ .../sys_equipment/Combat_Space_Enhancement.h | 87 ++++ TO_MERGE/cse/sys_equipment/UI.h | 1 + TO_MERGE/cse/sys_equipment/config.cpp | 59 +++ .../fn_areEquipmentOptionsAvailable_EQ.sqf | 19 + .../functions/fn_attachItem_EQ.sqf | 55 +++ .../functions/fn_detachItem_EQ.sqf | 49 +++ .../functions/fn_dropFlare_EQ.sqf | 32 ++ .../fn_getAllEquipmentOptions_EQ.sqf | 22 + .../fn_getPercentageAmmoMagazine_EQ.sqf | 27 ++ .../functions/fn_hasAttachableItem_EQ.sqf | 20 + .../functions/fn_hasFlare_EQ.sqf | 19 + .../functions/fn_hasItemAttached_EQ.sqf | 15 + .../functions/fn_hideUnitInfoAmmo_EQ.sqf | 39 ++ .../functions/fn_isAttachableItem_EQ.sqf | 23 + .../sys_equipment/functions/fn_isFlare_EQ.sqf | 25 ++ .../functions/fn_moduleFlare_EQ.sqf | 39 ++ .../functions/fn_putWeaponOnBack_EQ.sqf | 17 + .../fn_registerNewEquipmentOption_EQ.sqf | 30 ++ .../cse/sys_equipment/init_sys_equipment.sqf | 88 ++++ .../functions/fn_repackMagazines.sqf | 105 +++++ .../functions/fn_repackMagazinesAll.sqf | 20 + .../sound/magrepack_finished.wav | Bin 0 -> 152166 bytes .../magazineRepack/sound/magrepack_single.wav | Bin 0 -> 95466 bytes .../nvg/functions/fn_adjustBrightness_NVG.sqf | 32 ++ .../nvg/init_sys_nightvision.sqf | 51 +++ .../scripts/check_ammo_keybindings.sqf | 17 + .../register_attachable_items_actions.sqf | 45 ++ .../register_magazine_repack_actions.sqf | 59 +++ .../scripts/select_weapon_keybindings.sqf | 28 ++ TO_MERGE/cse/sys_equipment/stringtable.xml | 91 ++++ TO_MERGE/cse/sys_equipment/ui/rscTitles.h | 51 +++ .../weaponresting/data/icons/icon_bipod.paa | Bin 0 -> 5625 bytes .../functions/fn_actionReleaseWeapon_WR.sqf | 13 + .../functions/fn_canDeployBipod_WR.sqf | 46 ++ .../functions/fn_canRestWeapon_WR.sqf | 60 +++ .../functions/fn_deployWeapon_WR.sqf | 39 ++ .../functions/fn_hasBipod_WR.sqf | 17 + .../functions/fn_keyPressed_WR.sqf | 37 ++ .../functions/fn_restWeapon_WR.sqf | 35 ++ .../functions/fn_undeployWeapon_WR.sqf | 21 + .../functions/fn_unrestWeapon_WR.sqf | 21 + .../weaponresting/init_sys_weaponrest.sqf | 9 + .../weaponresting/sound/weaponrest_rest.wav | Bin 0 -> 19866 bytes .../weaponresting/sound/weaponrest_unrest.wav | Bin 0 -> 77354 bytes .../functions/fn_safetyOff_ws.sqf | 18 + .../weaponsafety/functions/fn_safetyOn_ws.sqf | 37 ++ .../weaponsafety/init_sys_weaponsafety.sqf | 20 + 55 files changed, 2741 insertions(+) create mode 100644 TO_MERGE/cse/sys_equipment/CfgAmmo.h create mode 100644 TO_MERGE/cse/sys_equipment/CfgFactionClasses.h create mode 100644 TO_MERGE/cse/sys_equipment/CfgFunctions.h create mode 100644 TO_MERGE/cse/sys_equipment/CfgMovesBasic.h create mode 100644 TO_MERGE/cse/sys_equipment/CfgMovesMaleSdr.h create mode 100644 TO_MERGE/cse/sys_equipment/CfgSounds.h create mode 100644 TO_MERGE/cse/sys_equipment/CfgVehicles.h create mode 100644 TO_MERGE/cse/sys_equipment/CfgWeapons.h create mode 100644 TO_MERGE/cse/sys_equipment/Combat_Space_Enhancement.h create mode 100644 TO_MERGE/cse/sys_equipment/UI.h create mode 100644 TO_MERGE/cse/sys_equipment/config.cpp create mode 100644 TO_MERGE/cse/sys_equipment/functions/fn_areEquipmentOptionsAvailable_EQ.sqf create mode 100644 TO_MERGE/cse/sys_equipment/functions/fn_attachItem_EQ.sqf create mode 100644 TO_MERGE/cse/sys_equipment/functions/fn_detachItem_EQ.sqf create mode 100644 TO_MERGE/cse/sys_equipment/functions/fn_dropFlare_EQ.sqf create mode 100644 TO_MERGE/cse/sys_equipment/functions/fn_getAllEquipmentOptions_EQ.sqf create mode 100644 TO_MERGE/cse/sys_equipment/functions/fn_getPercentageAmmoMagazine_EQ.sqf create mode 100644 TO_MERGE/cse/sys_equipment/functions/fn_hasAttachableItem_EQ.sqf create mode 100644 TO_MERGE/cse/sys_equipment/functions/fn_hasFlare_EQ.sqf create mode 100644 TO_MERGE/cse/sys_equipment/functions/fn_hasItemAttached_EQ.sqf create mode 100644 TO_MERGE/cse/sys_equipment/functions/fn_hideUnitInfoAmmo_EQ.sqf create mode 100644 TO_MERGE/cse/sys_equipment/functions/fn_isAttachableItem_EQ.sqf create mode 100644 TO_MERGE/cse/sys_equipment/functions/fn_isFlare_EQ.sqf create mode 100644 TO_MERGE/cse/sys_equipment/functions/fn_moduleFlare_EQ.sqf create mode 100644 TO_MERGE/cse/sys_equipment/functions/fn_putWeaponOnBack_EQ.sqf create mode 100644 TO_MERGE/cse/sys_equipment/functions/fn_registerNewEquipmentOption_EQ.sqf create mode 100644 TO_MERGE/cse/sys_equipment/init_sys_equipment.sqf create mode 100644 TO_MERGE/cse/sys_equipment/magazineRepack/functions/fn_repackMagazines.sqf create mode 100644 TO_MERGE/cse/sys_equipment/magazineRepack/functions/fn_repackMagazinesAll.sqf create mode 100644 TO_MERGE/cse/sys_equipment/magazineRepack/sound/magrepack_finished.wav create mode 100644 TO_MERGE/cse/sys_equipment/magazineRepack/sound/magrepack_single.wav create mode 100644 TO_MERGE/cse/sys_equipment/nvg/functions/fn_adjustBrightness_NVG.sqf create mode 100644 TO_MERGE/cse/sys_equipment/nvg/init_sys_nightvision.sqf create mode 100644 TO_MERGE/cse/sys_equipment/scripts/check_ammo_keybindings.sqf create mode 100644 TO_MERGE/cse/sys_equipment/scripts/register_attachable_items_actions.sqf create mode 100644 TO_MERGE/cse/sys_equipment/scripts/register_magazine_repack_actions.sqf create mode 100644 TO_MERGE/cse/sys_equipment/scripts/select_weapon_keybindings.sqf create mode 100644 TO_MERGE/cse/sys_equipment/stringtable.xml create mode 100644 TO_MERGE/cse/sys_equipment/ui/rscTitles.h create mode 100644 TO_MERGE/cse/sys_equipment/weaponresting/data/icons/icon_bipod.paa create mode 100644 TO_MERGE/cse/sys_equipment/weaponresting/functions/fn_actionReleaseWeapon_WR.sqf create mode 100644 TO_MERGE/cse/sys_equipment/weaponresting/functions/fn_canDeployBipod_WR.sqf create mode 100644 TO_MERGE/cse/sys_equipment/weaponresting/functions/fn_canRestWeapon_WR.sqf create mode 100644 TO_MERGE/cse/sys_equipment/weaponresting/functions/fn_deployWeapon_WR.sqf create mode 100644 TO_MERGE/cse/sys_equipment/weaponresting/functions/fn_hasBipod_WR.sqf create mode 100644 TO_MERGE/cse/sys_equipment/weaponresting/functions/fn_keyPressed_WR.sqf create mode 100644 TO_MERGE/cse/sys_equipment/weaponresting/functions/fn_restWeapon_WR.sqf create mode 100644 TO_MERGE/cse/sys_equipment/weaponresting/functions/fn_undeployWeapon_WR.sqf create mode 100644 TO_MERGE/cse/sys_equipment/weaponresting/functions/fn_unrestWeapon_WR.sqf create mode 100644 TO_MERGE/cse/sys_equipment/weaponresting/init_sys_weaponrest.sqf create mode 100644 TO_MERGE/cse/sys_equipment/weaponresting/sound/weaponrest_rest.wav create mode 100644 TO_MERGE/cse/sys_equipment/weaponresting/sound/weaponrest_unrest.wav create mode 100644 TO_MERGE/cse/sys_equipment/weaponsafety/functions/fn_safetyOff_ws.sqf create mode 100644 TO_MERGE/cse/sys_equipment/weaponsafety/functions/fn_safetyOn_ws.sqf create mode 100644 TO_MERGE/cse/sys_equipment/weaponsafety/init_sys_weaponsafety.sqf diff --git a/TO_MERGE/cse/sys_equipment/CfgAmmo.h b/TO_MERGE/cse/sys_equipment/CfgAmmo.h new file mode 100644 index 0000000000..f73b099245 --- /dev/null +++ b/TO_MERGE/cse/sys_equipment/CfgAmmo.h @@ -0,0 +1,159 @@ +#define FUSEE_TIME_TO_LIVE 600 +#define FUSEE_FLARE_SIZE 2 +#define FUSEE_INTENSITY 3000 + +#define FLARE_TIME_TO_LIVE 60 +#define FLARE_SIZE 10 +#define FLARE_INTENSITY 4000 + +class cfgAmmo { + class F_20mm_White; + class F_20mm_Red: F_20mm_White {}; + class F_20mm_Yellow: F_20mm_White {}; + class F_20mm_Green: F_20mm_White {}; + + class CSE_FuseeWhite: F_20mm_White { + intensity = FUSEE_INTENSITY; + flareSize = FUSEE_FLARE_SIZE; + timeToLive = FUSEE_TIME_TO_LIVE; + airFriction = -0.0005; + thrust = 210; + thrustTime = 1.5; + }; + class CSE_FuseeRed: F_20mm_Red { + intensity = FUSEE_INTENSITY; + flareSize = FUSEE_FLARE_SIZE; + timeToLive = FUSEE_TIME_TO_LIVE; + airFriction = -0.0005; + thrust = 210; + thrustTime = 1.5; + }; + class CSE_FuseeYellow: F_20mm_Yellow { + intensity = FUSEE_INTENSITY; + flareSize = FUSEE_FLARE_SIZE; + timeToLive = FUSEE_TIME_TO_LIVE; + airFriction = -0.0005; + thrust = 210; + thrustTime = 1.5; + }; + class CSE_FuseeGreen: F_20mm_Green { + intensity = FUSEE_INTENSITY; + flareSize = FUSEE_FLARE_SIZE; + timeToLive = FUSEE_TIME_TO_LIVE; + airFriction = -0.0005; + thrust = 210; + thrustTime = 1.5; + }; + + + class CSE_FlareWhite: F_20mm_White { + intensity = FLARE_INTENSITY; + flareSize = FLARE_SIZE; + timeToLive = FLARE_TIME_TO_LIVE; + airFriction = -0.0005; + thrust = 210; + thrustTime = 1.5; + }; + class CSE_FlareRed: F_20mm_Red { + intensity = FLARE_INTENSITY; + flareSize = FLARE_SIZE; + timeToLive = FLARE_TIME_TO_LIVE; + airFriction = -0.0005; + thrust = 210; + thrustTime = 1.5; + }; + class CSE_FlareYellow: F_20mm_Yellow { + intensity = FLARE_INTENSITY; + flareSize = FLARE_SIZE; + timeToLive = FLARE_TIME_TO_LIVE; + airFriction = -0.0005; + thrust = 210; + thrustTime = 1.5; + }; + class CSE_FlareGreen: F_20mm_Green { + intensity = FLARE_INTENSITY; + flareSize = FLARE_SIZE; + timeToLive = FLARE_TIME_TO_LIVE; + airFriction = -0.0005; + thrust = 210; + thrustTime = 1.5; + }; +}; + + +class CfgMagazines { + class HandGrenade; + class CSE_Flare_Base: HandGrenade { + value = 2; + nameSoundWeapon = "smokeshell"; + nameSound = "smokeshell"; + mass = 4; + initSpeed = 22; + }; + class CSE_FlareWhite: CSE_Flare_Base { + ammo = "CSE_FlareWhite"; + displayname = $STR_CSE_FLARE_WHITE; + descriptionshort = $STR_CSE_FLARE_WHITE; + displayNameShort = $STR_CSE_FLARE_WHITE; + model = "\A3\weapons_f\ammo\flare_white"; + picture = "\A3\Weapons_F\Data\UI\gear_flare_white_ca.paa"; + }; + class CSE_FlareRed: CSE_Flare_Base { + ammo = "CSE_FlareRed"; + displayname = $STR_CSE_FLARE_RED; + descriptionshort = $STR_CSE_FLARE_RED; + displayNameShort = $STR_CSE_FLARE_RED; + model = "\A3\weapons_f\ammo\flare_red"; + picture = "\A3\Weapons_F\Data\UI\gear_flare_red_ca.paa"; + }; + class CSE_FlareYellow: CSE_Flare_Base { + ammo = "CSE_FlareYellow"; + displayname = $STR_CSE_FLARE_YELLOW; + descriptionshort = $STR_CSE_FLARE_YELLOW; + displayNameShort = $STR_CSE_FLARE_YELLOW; + model = "\A3\weapons_f\ammo\flare_yellow"; + picture = "\A3\Weapons_F\Data\UI\gear_flare_yellow_ca.paa"; + }; + class CSE_FlareGreen: CSE_Flare_Base { + ammo = "CSE_FlareGreen"; + displayname = $STR_CSE_FLARE_GREEN; + descriptionshort = $STR_CSE_FLARE_GREEN; + displayNameShort = $STR_CSE_FLARE_GREEN; + model = "\A3\weapons_f\ammo\flare_green"; + picture = "\A3\Weapons_F\Data\UI\gear_flare_green_ca.paa"; + }; + + + class CSE_RoadFlareWhite: CSE_Flare_Base { + ammo = "CSE_FuseeWhite"; + displayname = $STR_CSE_ROAD_FLARE_WHITE; + descriptionshort = $STR_CSE_ROAD_FLARE_WHITE; + displayNameShort = $STR_CSE_ROAD_FLARE_WHITE; + model = "\A3\weapons_f\ammo\flare_white"; + picture = "\A3\Weapons_F\Data\UI\gear_flare_white_ca.paa"; + }; + class CSE_RoadFlareRed: CSE_Flare_Base { + ammo = "CSE_FuseeRed"; + displayname = $STR_CSE_ROAD_FLARE_RED; + descriptionshort = $STR_CSE_ROAD_FLARE_RED; + displayNameShort = $STR_CSE_ROAD_FLARE_RED; + model = "\A3\weapons_f\ammo\flare_red"; + picture = "\A3\Weapons_F\Data\UI\gear_flare_red_ca.paa"; + }; + class CSE_RoadFlareYellow: CSE_Flare_Base { + ammo = "CSE_FuseeYellow"; + displayname = $STR_CSE_ROAD_FLARE_YELLOW; + descriptionshort = $STR_CSE_ROAD_FLARE_YELLOW; + displayNameShort = $STR_CSE_ROAD_FLARE_YELLOW; + model = "\A3\weapons_f\ammo\flare_yellow"; + picture = "\A3\Weapons_F\Data\UI\gear_flare_yellow_ca.paa"; + }; + class CSE_RoadFlareGreen: CSE_Flare_Base { + ammo = "CSE_FuseeGreen"; + displayname = $STR_CSE_ROAD_FLARE_GREEN; + descriptionshort = $STR_CSE_ROAD_FLARE_GREEN; + displayNameShort = $STR_CSE_ROAD_FLARE_GREEN; + model = "\A3\weapons_f\ammo\flare_green"; + picture = "\A3\Weapons_F\Data\UI\gear_flare_green_ca.paa"; + }; +}; \ No newline at end of file diff --git a/TO_MERGE/cse/sys_equipment/CfgFactionClasses.h b/TO_MERGE/cse/sys_equipment/CfgFactionClasses.h new file mode 100644 index 0000000000..3eed8715b8 --- /dev/null +++ b/TO_MERGE/cse/sys_equipment/CfgFactionClasses.h @@ -0,0 +1,7 @@ +class CfgFactionClasses +{ + class NO_CATEGORY; + class cse_equipment: NO_CATEGORY { + displayName = "CSE Equipment"; + }; +}; \ No newline at end of file diff --git a/TO_MERGE/cse/sys_equipment/CfgFunctions.h b/TO_MERGE/cse/sys_equipment/CfgFunctions.h new file mode 100644 index 0000000000..0112eaf16b --- /dev/null +++ b/TO_MERGE/cse/sys_equipment/CfgFunctions.h @@ -0,0 +1,49 @@ +class CfgFunctions { + class CSE { + class Equipment { + file = "cse\cse_sys_equipment\functions"; + class hasAttachableItem_EQ { recompile = 1; }; + class attachItem_EQ { recompile = 1; }; + class detachItem_EQ { recompile = 1; }; + class isAttachableItem_EQ { recompile = 1; }; + class hasItemAttached_EQ { recompile = 1; }; + class getAllEquipmentOptions_EQ { recompile = 1; }; + class registerNewEquipmentOption_EQ { recompile = 1; }; + class areEquipmentOptionsAvailable_EQ { recompile = 1; }; + class dropFlare_EQ { recompile = 1; }; + class moduleFlare_EQ { recompile = 1; }; + class hasFlare_EQ { recompile = 1; }; + class isFlare_EQ { recompile = 1; }; + class putWeaponOnBack_EQ { recompile = 1; }; + class getPercentageAmmoMagazine_EQ { recompile = 1; }; + class hideUnitInfoAmmo_EQ { recompile = 1; }; + }; + class WeaponRest { + file = "cse\cse_sys_equipment\weaponresting\functions"; + class keyPressed_WR { recompile = 1; }; + class canRestWeapon_WR { recompile = 1; }; + class canDeployBipod_WR { recompile = 1; }; + class restWeapon_WR { recompile = 1; }; + class unrestWeapon_WR { recompile = 1; }; + class deployWeapon_WR { recompile = 1; }; + class undeployWeapon_WR { recompile = 1; }; + class actionReleaseWeapon_WR { recompile = 1; }; + class hasBipod_WR { recompile = 1; }; + }; + class WeaponSafety { + file = "cse\cse_sys_equipment\weaponsafety\functions"; + class safetyOff_ws { recompile = 1; }; + class safetyOn_ws { recompile = 1; }; + }; + class nightVisionModule { + file = "cse\cse_sys_equipment\nvg\functions"; + class adjustBrightness_NVG { recompile = 1; }; + }; + + class MagazineRepack { + file = "cse\cse_sys_equipment\magazineRepack\functions"; + class repackMagazines { recompile = 1; }; + class repackMagazinesAll { recompile = 1; }; + }; + }; +}; diff --git a/TO_MERGE/cse/sys_equipment/CfgMovesBasic.h b/TO_MERGE/cse/sys_equipment/CfgMovesBasic.h new file mode 100644 index 0000000000..af719e15fc --- /dev/null +++ b/TO_MERGE/cse/sys_equipment/CfgMovesBasic.h @@ -0,0 +1,277 @@ +// Adpated from: https://github.com/Taosenai/tmr/blob/master/tmr_autorest/config.cpp + +#define CSE_DEPLOYED_TURNSPEED 0.1 + +class CfgMovesBasic { + class Default; + + class Actions { + class RifleStandActions; + class RifleStandActions_cse_deployed : RifleStandActions { + stop = "AmovPercMstpSrasWrflDnon_cse_deployed"; + default = "AmovPercMstpSrasWrflDnon_cse_deployed"; + turnL = "AmovPercMstpSrasWrflDnon_cse_deployed"; + turnR = "AmovPercMstpSrasWrflDnon_cse_deployed"; + turnSpeed = CSE_DEPLOYED_TURNSPEED; + limitFast = 1; + }; + + class RifleAdjustLStandActions; + class RifleAdjustLStandActions_cse_deployed : RifleAdjustLStandActions { + stop = "AadjPercMstpSrasWrflDleft_cse_deployed"; + default = "AadjPercMstpSrasWrflDleft_cse_deployed"; + AdjustL = "AadjPercMstpSrasWrflDleft_cse_deployed"; + turnL = "AadjPercMstpSrasWrflDleft_cse_deployed"; + turnR = "AadjPercMstpSrasWrflDleft_cse_deployed"; + turnSpeed = CSE_DEPLOYED_TURNSPEED; + limitFast = 1; + }; + + class RifleAdjustRStandActions; + class RifleAdjustRStandActions_cse_deployed : RifleAdjustRStandActions { + stop = "AadjPercMstpSrasWrflDright_cse_deployed"; + default = "AadjPercMstpSrasWrflDright_cse_deployed"; + AdjustRight = "AadjPercMstpSrasWrflDright_cse_deployed"; + turnL = "AadjPercMstpSrasWrflDright_cse_deployed"; + turnR = "AadjPercMstpSrasWrflDright_cse_deployed"; + turnSpeed = CSE_DEPLOYED_TURNSPEED; + limitFast = 1; + }; + + class RifleAdjustFStandActions; + class RifleAdjustFStandActions_cse_deployed : RifleAdjustFStandActions { + stop = "AadjPercMstpSrasWrflDup_cse_deployed"; + default = "AadjPercMstpSrasWrflDup_cse_deployed"; + AdjustF = "AadjPercMstpSrasWrflDup_cse_deployed"; + turnL = "AadjPercMstpSrasWrflDup_cse_deployed"; + turnR = "AadjPercMstpSrasWrflDup_cse_deployed"; + turnSpeed = CSE_DEPLOYED_TURNSPEED; + limitFast = 1; + }; + + class RifleAdjustBStandActions; + class RifleAdjustBStandActions_cse_deployed : RifleAdjustBStandActions { + stop = "AadjPercMstpSrasWrflDdown_cse_deployed"; + default = "AadjPercMstpSrasWrflDdown_cse_deployed"; + AdjustB = "AadjPercMstpSrasWrflDdown_cse_deployed"; + turnR = "AadjPercMstpSrasWrflDdown_cse_deployed"; + turnL = "AadjPercMstpSrasWrflDdown_cse_deployed"; + turnSpeed = CSE_DEPLOYED_TURNSPEED; + limitFast = 1; + }; + + class RifleAdjustLKneelActions; + class RifleAdjustLKneelActions_cse_deployed : RifleAdjustLKneelActions { + stop = "AadjPknlMstpSrasWrflDleft_cse_deployed"; + default = "AadjPknlMstpSrasWrflDleft_cse_deployed"; + turnL = "AadjPknlMstpSrasWrflDleft_cse_deployed"; + turnR = "AadjPknlMstpSrasWrflDleft_cse_deployed"; + turnSpeed = CSE_DEPLOYED_TURNSPEED; + limitFast = 1; + }; + + class RifleAdjustRKneelActions; + class RifleAdjustRKneelActions_cse_deployed : RifleAdjustRKneelActions { + stop = "AadjPknlMstpSrasWrflDright_cse_deployed"; + default = "AadjPknlMstpSrasWrflDright_cse_deployed"; + turnL = "AadjPknlMstpSrasWrflDright_cse_deployed"; + turnR = "AadjPknlMstpSrasWrflDright_cse_deployed"; + turnSpeed = CSE_DEPLOYED_TURNSPEED; + limitFast = 1; + }; + + class RifleAdjustFKneelActions; + class RifleAdjustFKneelActions_cse_deployed : RifleAdjustFKneelActions { + stop = "AadjPknlMstpSrasWrflDup_cse_deployed"; + default = "AadjPknlMstpSrasWrflDup_cse_deployed"; + turnL = "AadjPknlMstpSrasWrflDup_cse_deployed"; + turnR = "AadjPknlMstpSrasWrflDup_cse_deployed"; + turnSpeed = CSE_DEPLOYED_TURNSPEED; + limitFast = 1; + }; + + class RifleAdjustBKneelActions; + class RifleAdjustBKneelActions_cse_deployed : RifleAdjustBKneelActions { + stop = "AadjPknlMstpSrasWrflDdown_cse_deployed"; + default = "AadjPknlMstpSrasWrflDdown_cse_deployed"; + turnL = "AadjPknlMstpSrasWrflDdown_cse_deployed"; + turnR = "AadjPknlMstpSrasWrflDdown_cse_deployed"; + turnSpeed = CSE_DEPLOYED_TURNSPEED; + limitFast = 1; + }; + + class RifleKneelActions; + class RifleKneelActions_cse_deployed : RifleKneelActions { + stop = "AmovPknlMstpSrasWrflDnon_cse_deployed"; + default = "AmovPknlMstpSrasWrflDnon_cse_deployed"; + crouch = "AmovPknlMstpSrasWrflDnon_cse_deployed"; + turnL = "AmovPknlMstpSrasWrflDnon_cse_deployed"; + turnR = "AmovPknlMstpSrasWrflDnon_cse_deployed"; + turnSpeed = CSE_DEPLOYED_TURNSPEED; + limitFast = 1; + }; + + class RifleProneActions; + class RifleProneActions_cse_deployed : RifleProneActions { + stop = "AmovPpneMstpSrasWrflDnon_cse_deployed"; + default = "AmovPpneMstpSrasWrflDnon_cse_deployed"; + turnL = "AmovPpneMstpSrasWrflDnon_cse_deployed"; + turnR = "AmovPpneMstpSrasWrflDnon_cse_deployed"; + turnSpeed = CSE_DEPLOYED_TURNSPEED; + limitFast = 1; + }; + + class RifleAdjustFProneActions; + class RifleAdjustFProneActions_cse_deployed : RifleAdjustFProneActions { + stop = "aadjppnemstpsraswrfldup_cse_deployed"; + default = "aadjppnemstpsraswrfldup_cse_deployed"; + turnL = "aadjppnemstpsraswrfldup_cse_deployed"; + turnR = "aadjppnemstpsraswrfldup_cse_deployed"; + turnSpeed = CSE_DEPLOYED_TURNSPEED; + limitFast = 1; + }; + + class RifleStandActions_cse_rested : RifleStandActions { + stop = "AmovPercMstpSrasWrflDnon_cse_rested"; + default = "AmovPercMstpSrasWrflDnon_cse_rested"; + turnL = "AmovPercMstpSrasWrflDnon_cse_rested"; + turnR = "AmovPercMstpSrasWrflDnon_cse_rested"; + turnSpeed = CSE_DEPLOYED_TURNSPEED; + limitFast = 1; + }; + + class RifleAdjustLStandActions_cse_rested : RifleAdjustLStandActions { + stop = "AadjPercMstpSrasWrflDleft_cse_rested"; + default = "AadjPercMstpSrasWrflDleft_cse_rested"; + AdjustL = "AadjPercMstpSrasWrflDleft_cse_rested"; + turnL = "AadjPercMstpSrasWrflDleft_cse_rested"; + turnR = "AadjPercMstpSrasWrflDleft_cse_rested"; + turnSpeed = CSE_DEPLOYED_TURNSPEED; + limitFast = 1; + }; + + class RifleAdjustRStandActions_cse_rested : RifleAdjustRStandActions { + stop = "AadjPercMstpSrasWrflDright_cse_rested"; + default = "AadjPercMstpSrasWrflDright_cse_rested"; + AdjustRight = "AadjPercMstpSrasWrflDright_cse_rested"; + turnL = "AadjPercMstpSrasWrflDright_cse_rested"; + turnR = "AadjPercMstpSrasWrflDright_cse_rested"; + turnSpeed = CSE_DEPLOYED_TURNSPEED; + limitFast = 1; + }; + + class RifleAdjustFStandActions_cse_rested : RifleAdjustFStandActions { + stop = "AadjPercMstpSrasWrflDup_cse_rested"; + default = "AadjPercMstpSrasWrflDup_cse_rested"; + AdjustF = "AadjPercMstpSrasWrflDup_cse_rested"; + turnL = "AadjPercMstpSrasWrflDup_cse_rested"; + turnR = "AadjPercMstpSrasWrflDup_cse_rested"; + turnSpeed = CSE_DEPLOYED_TURNSPEED; + limitFast = 1; + }; + + class RifleAdjustBStandActions_cse_rested : RifleAdjustBStandActions { + stop = "AadjPercMstpSrasWrflDdown_cse_rested"; + default = "AadjPercMstpSrasWrflDdown_cse_rested"; + AdjustB = "AadjPercMstpSrasWrflDdown_cse_rested"; + turnR = "AadjPercMstpSrasWrflDdown_cse_rested"; + turnL = "AadjPercMstpSrasWrflDdown_cse_rested"; + turnSpeed = CSE_DEPLOYED_TURNSPEED; + limitFast = 1; + }; + + class RifleAdjustLKneelActions_cse_rested : RifleAdjustLKneelActions { + stop = "AadjPknlMstpSrasWrflDleft_cse_rested"; + default = "AadjPknlMstpSrasWrflDleft_cse_rested"; + turnL = "AadjPknlMstpSrasWrflDleft_cse_rested"; + turnR = "AadjPknlMstpSrasWrflDleft_cse_rested"; + turnSpeed = CSE_DEPLOYED_TURNSPEED; + limitFast = 1; + }; + + class RifleAdjustRKneelActions_cse_rested : RifleAdjustRKneelActions { + stop = "AadjPknlMstpSrasWrflDright_cse_rested"; + default = "AadjPknlMstpSrasWrflDright_cse_rested"; + turnL = "AadjPknlMstpSrasWrflDright_cse_rested"; + turnR = "AadjPknlMstpSrasWrflDright_cse_rested"; + turnSpeed = CSE_DEPLOYED_TURNSPEED; + limitFast = 1; + }; + + class RifleAdjustFKneelActions_cse_rested : RifleAdjustFKneelActions { + stop = "AadjPknlMstpSrasWrflDup_cse_rested"; + default = "AadjPknlMstpSrasWrflDup_cse_rested"; + turnL = "AadjPknlMstpSrasWrflDup_cse_rested"; + turnR = "AadjPknlMstpSrasWrflDup_cse_rested"; + turnSpeed = CSE_DEPLOYED_TURNSPEED; + limitFast = 1; + }; + + class RifleAdjustBKneelActions_cse_rested : RifleAdjustBKneelActions { + stop = "AadjPknlMstpSrasWrflDdown_cse_rested"; + default = "AadjPknlMstpSrasWrflDdown_cse_rested"; + turnL = "AadjPknlMstpSrasWrflDdown_cse_rested"; + turnR = "AadjPknlMstpSrasWrflDdown_cse_rested"; + turnSpeed = CSE_DEPLOYED_TURNSPEED; + limitFast = 1; + }; + + class RifleKneelActions_cse_rested : RifleKneelActions { + stop = "AmovPknlMstpSrasWrflDnon_cse_rested"; + default = "AmovPknlMstpSrasWrflDnon_cse_rested"; + crouch = "AmovPknlMstpSrasWrflDnon_cse_rested"; + turnL = "AmovPknlMstpSrasWrflDnon_cse_rested"; + turnR = "AmovPknlMstpSrasWrflDnon_cse_rested"; + turnSpeed = CSE_DEPLOYED_TURNSPEED; + limitFast = 1; + }; + + class RifleProneActions_cse_rested : RifleProneActions { + stop = "AmovPpneMstpSrasWrflDnon_cse_rested"; + default = "AmovPpneMstpSrasWrflDnon_cse_rested"; + turnL = "AmovPpneMstpSrasWrflDnon_cse_rested"; + turnR = "AmovPpneMstpSrasWrflDnon_cse_rested"; + turnSpeed = CSE_DEPLOYED_TURNSPEED; + limitFast = 1; + }; + + class RifleAdjustLProneActions; + class RifleAdjustLProneActions_cse_rested : RifleAdjustLProneActions { + stop = "aadjppnemstpsraswrfldleft_cse_rested"; + default = "aadjppnemstpsraswrfldleft_cse_rested"; + turnL = "aadjppnemstpsraswrfldleft_cse_rested"; + turnR = "aadjppnemstpsraswrfldleft_cse_rested"; + turnSpeed = CSE_DEPLOYED_TURNSPEED; + limitFast = 1; + }; + + class RifleAdjustRProneActions; + class RifleAdjustRProneActions_cse_rested : RifleAdjustRProneActions { + stop = "aadjppnemstpsraswrfldright_cse_rested"; + default = "aadjppnemstpsraswrfldright_cse_rested"; + turnL = "aadjppnemstpsraswrfldright_cse_rested"; + turnR = "aadjppnemstpsraswrfldright_cse_rested"; + turnSpeed = CSE_DEPLOYED_TURNSPEED; + limitFast = 1; + }; + + class RifleAdjustBProneActions; + class RifleAdjustBProneActions_cse_rested : RifleAdjustBProneActions { + stop = "aadjppnemstpsraswrflddown_cse_rested"; + default = "aadjppnemstpsraswrflddown_cse_rested"; + turnL = "aadjppnemstpsraswrflddown_cse_rested"; + turnR = "aadjppnemstpsraswrflddown_cse_rested"; + turnSpeed = CSE_DEPLOYED_TURNSPEED; + limitFast = 1; + }; + + class RifleAdjustFProneActions_cse_rested : RifleAdjustFProneActions { + stop = "aadjppnemstpsraswrfldup_cse_rested"; + default = "aadjppnemstpsraswrfldup_cse_rested"; + turnL = "aadjppnemstpsraswrfldup_cse_rested"; + turnR = "aadjppnemstpsraswrfldup_cse_rested"; + turnSpeed = CSE_DEPLOYED_TURNSPEED; + limitFast = 1; + }; + }; +}; diff --git a/TO_MERGE/cse/sys_equipment/CfgMovesMaleSdr.h b/TO_MERGE/cse/sys_equipment/CfgMovesMaleSdr.h new file mode 100644 index 0000000000..207622724a --- /dev/null +++ b/TO_MERGE/cse/sys_equipment/CfgMovesMaleSdr.h @@ -0,0 +1,403 @@ +// Adpated from: https://github.com/Taosenai/tmr/blob/master/tmr_autorest/config.cpp + +#define CSE_SWAY_DEPLOYED 0.06 +#define CSE_SWAY_DEPLOYED_PRONE 0.03 +#define CSE_SWAY_RESTED 0.30 +#define CSE_SWAY_RESTED_PRONE 0.10 + +class CfgMovesMaleSdr : CfgMovesBasic { + class States { + class AmovPercMstpSrasWrflDnon; + class AmovPercMstpSrasWrflDnon_cse_deployed : AmovPercMstpSrasWrflDnon { + aimPrecision = CSE_SWAY_DEPLOYED; + actions = "RifleStandActions_cse_deployed"; + aiming = "aimingLying"; + speed = 0.01; + onLandEnd = true; + onLandBeg = true; + + ConnectTo[] = {"AmovPercMstpSrasWrflDnon_cse_deployed", 0.02}; + ConnectFrom[] = {"AmovPercMstpSrasWrflDnon_cse_deployed", 0.02}; + InterpolateFrom[] = {"AmovPercMstpSrasWrflDnon", 0.02}; + InterpolateTo[] = {"AmovPercMstpSrasWrflDnon", 0.02}; + }; + + class aadjpercmstpsraswrfldup; + class aadjpercmstpsraswrfldup_cse_deployed : aadjpercmstpsraswrfldup { + aimPrecision = CSE_SWAY_DEPLOYED; + actions = "RifleAdjustFStandActions_cse_deployed"; + aiming = "aimingLying"; + speed = 0.01; + onLandEnd = true; + onLandBeg = true; + + ConnectTo[] = {"aadjpercmstpsraswrfldup_cse_deployed", 0.02}; + ConnectFrom[] = {"aadjpercmstpsraswrfldup_cse_deployed", 0.02}; + InterpolateFrom[] = {"aadjpercmstpsraswrfldup", 0.02}; + InterpolateTo[] = {"aadjpercmstpsraswrfldup", 0.02}; + }; + + class aadjpercmstpsraswrflddown; + class aadjpercmstpsraswrflddown_cse_deployed : aadjpercmstpsraswrflddown { + aimPrecision = CSE_SWAY_DEPLOYED; + actions = "RifleAdjustBStandActions_cse_deployed"; + aiming = "aimingLying"; + speed = 0.01; + onLandEnd = true; + onLandBeg = true; + + ConnectTo[] = {"aadjpercmstpsraswrflddown_cse_deployed", 0.02}; + ConnectFrom[] = {"aadjpercmstpsraswrflddown_cse_deployed", 0.02}; + InterpolateFrom[] = {"aadjpercmstpsraswrflddown", 0.02}; + InterpolateTo[] = {"aadjpercmstpsraswrflddown", 0.02}; + }; + + class aadjpercmstpsraswrfldright; + class aadjpercmstpsraswrfldright_cse_deployed : aadjpercmstpsraswrfldright { + aimPrecision = CSE_SWAY_DEPLOYED; + actions = "RifleAdjustRStandActions_cse_deployed"; + aiming = "aimingLying"; + speed = 0.01; + onLandEnd = true; + onLandBeg = true; + + ConnectTo[] = {"aadjpercmstpsraswrfldright_cse_deployed", 0.02}; + ConnectFrom[] = {"aadjpercmstpsraswrfldright_cse_deployed", 0.02}; + InterpolateFrom[] = {"aadjpercmstpsraswrfldright", 0.02}; + InterpolateTo[] = {"aadjpercmstpsraswrfldright", 0.02}; + }; + + class aadjpercmstpsraswrfldleft; + class aadjpercmstpsraswrfldleft_cse_deployed : aadjpercmstpsraswrfldleft { + aimPrecision = CSE_SWAY_DEPLOYED; + actions = "RifleAdjustLStandActions_cse_deployed"; + aiming = "aimingLying"; + speed = 0.01; + onLandEnd = true; + onLandBeg = true; + + ConnectTo[] = {"aadjpercmstpsraswrfldleft_cse_deployed", 0.02}; + ConnectFrom[] = {"aadjpercmstpsraswrfldleft_cse_deployed", 0.02}; + InterpolateFrom[] = {"aadjpercmstpsraswrfldleft", 0.02}; + InterpolateTo[] = {"aadjpercmstpsraswrfldleft", 0.02}; + }; + + class aadjpknlmstpsraswrfldup; + class aadjpknlmstpsraswrfldup_cse_deployed : aadjpknlmstpsraswrfldup { + aimPrecision = CSE_SWAY_DEPLOYED; + actions = "RifleAdjustFKneelActions_cse_deployed"; + aiming = "aimingLying"; + speed = 0.01; + onLandEnd = true; + onLandBeg = true; + + ConnectTo[] = {"aadjpknlmstpsraswrfldup_cse_deployed", 0.02}; + ConnectFrom[] = {"aadjpknlmstpsraswrfldup_cse_deployed", 0.02}; + InterpolateFrom[] = {"aadjpknlmstpsraswrfldup", 0.02}; + InterpolateTo[] = {"aadjpknlmstpsraswrfldup", 0.02}; + }; + + class amovpknlmstpsraswrfldnon; + class amovpknlmstpsraswrfldnon_cse_deployed : amovpknlmstpsraswrfldnon { + aimPrecision = CSE_SWAY_DEPLOYED; + actions = "RifleKneelActions_cse_deployed"; + aiming = "aimingLying"; + speed = 0.01; + onLandEnd = true; + onLandBeg = true; + + ConnectTo[] = {"amovpknlmstpsraswrfldnon_cse_deployed", 0.02}; + ConnectFrom[] = {"amovpknlmstpsraswrfldnon_cse_deployed", 0.02}; + InterpolateFrom[] = {"amovpknlmstpsraswrfldnon", 0.02}; + InterpolateTo[] = {"amovpknlmstpsraswrfldnon", 0.02}; + }; + + class aadjpknlmstpsraswrflddown; + class aadjpknlmstpsraswrflddown_cse_deployed : aadjpknlmstpsraswrflddown { + aimPrecision = CSE_SWAY_DEPLOYED; + actions = "RifleAdjustBKneelActions_cse_deployed"; + aiming = "aimingLying"; + speed = 0.01; + onLandEnd = true; + onLandBeg = true; + + ConnectTo[] = {"aadjpknlmstpsraswrflddown_cse_deployed", 0.02}; + ConnectFrom[] = {"aadjpknlmstpsraswrflddown_cse_deployed", 0.02}; + InterpolateFrom[] = {"aadjpknlmstpsraswrflddown", 0.02}; + InterpolateTo[] = {"aadjpknlmstpsraswrflddown", 0.02}; + }; + + class aadjpknlmstpsraswrfldleft; + class aadjpknlmstpsraswrfldleft_cse_deployed : aadjpknlmstpsraswrfldleft { + aimPrecision = CSE_SWAY_DEPLOYED; + actions = "RifleAdjustLKneelActions_cse_deployed"; + aiming = "aimingLying"; + speed = 0.01; + onLandEnd = true; + onLandBeg = true; + + ConnectTo[] = {"aadjpknlmstpsraswrfldleft_cse_deployed", 0.02}; + ConnectFrom[] = {"aadjpknlmstpsraswrfldleft_cse_deployed", 0.02}; + InterpolateFrom[] = {"aadjpknlmstpsraswrfldleft", 0.02}; + InterpolateTo[] = {"aadjpknlmstpsraswrfldleft", 0.02}; + }; + + class aadjpknlmstpsraswrfldright; + class aadjpknlmstpsraswrfldright_cse_deployed : aadjpknlmstpsraswrfldright { + aimPrecision = CSE_SWAY_DEPLOYED; + actions = "RifleAdjustRKneelActions_cse_deployed"; + aiming = "aimingLying"; + speed = 0.01; + onLandEnd = true; + onLandBeg = true; + + ConnectTo[] = {"aadjpknlmstpsraswrfldright_cse_deployed", 0.02}; + ConnectFrom[] = {"aadjpknlmstpsraswrfldright_cse_deployed", 0.02}; + InterpolateFrom[] = {"aadjpknlmstpsraswrfldright", 0.02}; + InterpolateTo[] = {"aadjpknlmstpsraswrfldright", 0.02}; + }; + + class aadjppnemstpsraswrfldup; + class aadjppnemstpsraswrfldup_cse_deployed : aadjppnemstpsraswrfldup { + aimPrecision = CSE_SWAY_DEPLOYED_PRONE; + actions = "RifleAdjustFProneActions_cse_deployed"; + aiming = "aimingLying"; + speed = 0.01; + onLandEnd = true; + onLandBeg = true; + + ConnectTo[] = {"aadjppnemstpsraswrfldup_cse_deployed", 0.02}; + ConnectFrom[] = {"aadjppnemstpsraswrfldup_cse_deployed", 0.02}; + InterpolateFrom[] = {"aadjppnemstpsraswrfldup", 0.02}; + InterpolateTo[] = {"aadjppnemstpsraswrfldup", 0.02}; + }; + + class amovppnemstpsraswrfldnon; + class amovppnemstpsraswrfldnon_cse_deployed : amovppnemstpsraswrfldnon { + aimPrecision = CSE_SWAY_DEPLOYED_PRONE; + actions = "RifleProneActions_cse_deployed"; + aiming = "aimingLying"; + speed = 0.01; + onLandEnd = true; + onLandBeg = true; + + ConnectTo[] = {"amovppnemstpsraswrfldnon_cse_deployed", 0.02}; + ConnectFrom[] = {"amovppnemstpsraswrfldnon_cse_deployed", 0.02}; + InterpolateFrom[] = {"amovppnemstpsraswrfldnon", 0.02}; + InterpolateTo[] = {"amovppnemstpsraswrfldnon", 0.02}; + }; + + class AmovPercMstpSrasWrflDnon_cse_rested : AmovPercMstpSrasWrflDnon { + aimPrecision = CSE_SWAY_RESTED; + actions = "RifleStandActions_cse_rested"; + aiming = "aimingLying"; + speed = 0.01; + onLandEnd = true; + onLandBeg = true; + + ConnectTo[] = {"AmovPercMstpSrasWrflDnon_cse_rested", 0.02}; + ConnectFrom[] = {"AmovPercMstpSrasWrflDnon_cse_rested", 0.02}; + InterpolateFrom[] = {"AmovPercMstpSrasWrflDnon", 0.02}; + InterpolateTo[] = {"AmovPercMstpSrasWrflDnon", 0.02}; + }; + + class aadjpercmstpsraswrfldup_cse_rested : aadjpercmstpsraswrfldup { + aimPrecision = CSE_SWAY_RESTED; + actions = "RifleAdjustFStandActions_cse_rested"; + aiming = "aimingLying"; + speed = 0.01; + onLandEnd = true; + onLandBeg = true; + + ConnectTo[] = {"aadjpercmstpsraswrfldup_cse_rested", 0.02}; + ConnectFrom[] = {"aadjpercmstpsraswrfldup_cse_rested", 0.02}; + InterpolateFrom[] = {"aadjpercmstpsraswrfldup", 0.02}; + InterpolateTo[] = {"aadjpercmstpsraswrfldup", 0.02}; + }; + + class aadjpercmstpsraswrflddown_cse_rested : aadjpercmstpsraswrflddown { + aimPrecision = CSE_SWAY_RESTED; + actions = "RifleAdjustBStandActions_cse_rested"; + aiming = "aimingLying"; + speed = 0.01; + onLandEnd = true; + onLandBeg = true; + + ConnectTo[] = {"aadjpercmstpsraswrflddown_cse_rested", 0.02}; + ConnectFrom[] = {"aadjpercmstpsraswrflddown_cse_rested", 0.02}; + InterpolateFrom[] = {"aadjpercmstpsraswrflddown", 0.02}; + InterpolateTo[] = {"aadjpercmstpsraswrflddown", 0.02}; + }; + + class aadjpercmstpsraswrfldright_cse_rested : aadjpercmstpsraswrfldright { + aimPrecision = CSE_SWAY_RESTED; + actions = "RifleAdjustRStandActions_cse_rested"; + aiming = "aimingLying"; + speed = 0.01; + onLandEnd = true; + onLandBeg = true; + + ConnectTo[] = {"aadjpercmstpsraswrfldright_cse_rested", 0.02}; + ConnectFrom[] = {"aadjpercmstpsraswrfldright_cse_rested", 0.02}; + InterpolateFrom[] = {"aadjpercmstpsraswrfldright", 0.02}; + InterpolateTo[] = {"aadjpercmstpsraswrfldright", 0.02}; + }; + + class aadjpercmstpsraswrfldleft_cse_rested : aadjpercmstpsraswrfldleft { + aimPrecision = CSE_SWAY_RESTED; + actions = "RifleAdjustLStandActions_cse_rested"; + aiming = "aimingLying"; + speed = 0.01; + onLandEnd = true; + onLandBeg = true; + + ConnectTo[] = {"aadjpercmstpsraswrfldleft_cse_rested", 0.02}; + ConnectFrom[] = {"aadjpercmstpsraswrfldleft_cse_rested", 0.02}; + InterpolateFrom[] = {"aadjpercmstpsraswrfldleft", 0.02}; + InterpolateTo[] = {"aadjpercmstpsraswrfldleft", 0.02}; + }; + + class aadjpknlmstpsraswrfldup_cse_rested : aadjpknlmstpsraswrfldup { + aimPrecision = CSE_SWAY_RESTED; + actions = "RifleAdjustFKneelActions_cse_rested"; + aiming = "aimingLying"; + speed = 0.01; + onLandEnd = true; + onLandBeg = true; + + ConnectTo[] = {"aadjpknlmstpsraswrfldup_cse_rested", 0.02}; + ConnectFrom[] = {"aadjpknlmstpsraswrfldup_cse_rested", 0.02}; + InterpolateFrom[] = {"aadjpknlmstpsraswrfldup", 0.02}; + InterpolateTo[] = {"aadjpknlmstpsraswrfldup", 0.02}; + }; + + class amovpknlmstpsraswrfldnon_cse_rested : amovpknlmstpsraswrfldnon { + aimPrecision = CSE_SWAY_RESTED; + actions = "RifleKneelActions_cse_rested"; + aiming = "aimingLying"; + speed = 0.01; + onLandEnd = true; + onLandBeg = true; + + ConnectTo[] = {"amovpknlmstpsraswrfldnon_cse_rested", 0.02}; + ConnectFrom[] = {"amovpknlmstpsraswrfldnon_cse_rested", 0.02}; + InterpolateFrom[] = {"amovpknlmstpsraswrfldnon", 0.02}; + InterpolateTo[] = {"amovpknlmstpsraswrfldnon", 0.02}; + }; + + class aadjpknlmstpsraswrflddown_cse_rested : aadjpknlmstpsraswrflddown { + aimPrecision = CSE_SWAY_RESTED; + actions = "RifleAdjustBKneelActions_cse_rested"; + aiming = "aimingLying"; + speed = 0.01; + onLandEnd = true; + onLandBeg = true; + + ConnectTo[] = {"aadjpknlmstpsraswrflddown_cse_rested", 0.02}; + ConnectFrom[] = {"aadjpknlmstpsraswrflddown_cse_rested", 0.02}; + InterpolateFrom[] = {"aadjpknlmstpsraswrflddown", 0.02}; + InterpolateTo[] = {"aadjpknlmstpsraswrflddown", 0.02}; + }; + + class aadjpknlmstpsraswrfldleft_cse_rested : aadjpknlmstpsraswrfldleft { + aimPrecision = CSE_SWAY_RESTED; + actions = "RifleAdjustLKneelActions_cse_rested"; + aiming = "aimingLying"; + speed = 0.01; + onLandEnd = true; + onLandBeg = true; + + ConnectTo[] = {"aadjpknlmstpsraswrfldleft_cse_rested", 0.02}; + ConnectFrom[] = {"aadjpknlmstpsraswrfldleft_cse_rested", 0.02}; + InterpolateFrom[] = {"aadjpknlmstpsraswrfldleft", 0.02}; + InterpolateTo[] = {"aadjpknlmstpsraswrfldleft", 0.02}; + }; + + class aadjpknlmstpsraswrfldright_cse_rested : aadjpknlmstpsraswrfldright { + aimPrecision = CSE_SWAY_RESTED; + actions = "RifleAdjustRKneelActions_cse_rested"; + aiming = "aimingLying"; + speed = 0.01; + onLandEnd = true; + onLandBeg = true; + + ConnectTo[] = {"aadjpknlmstpsraswrfldright_cse_rested", 0.02}; + ConnectFrom[] = {"aadjpknlmstpsraswrfldright_cse_rested", 0.02}; + InterpolateFrom[] = {"aadjpknlmstpsraswrfldright", 0.02}; + InterpolateTo[] = {"aadjpknlmstpsraswrfldright", 0.02}; + }; + + class aadjppnemstpsraswrfldup_cse_rested : aadjppnemstpsraswrfldup { + aimPrecision = CSE_SWAY_RESTED_PRONE; + actions = "RifleAdjustFProneActions_cse_rested"; + aiming = "aimingLying"; + speed = 0.01; + onLandEnd = true; + onLandBeg = true; + + ConnectTo[] = {"aadjppnemstpsraswrfldup_cse_rested", 0.02}; + ConnectFrom[] = {"aadjppnemstpsraswrfldup_cse_rested", 0.02}; + InterpolateFrom[] = {"aadjppnemstpsraswrfldup", 0.02}; + InterpolateTo[] = {"aadjppnemstpsraswrfldup", 0.02}; + }; + + class aadjppnemstpsraswrfldleft; + class aadjppnemstpsraswrfldleft_cse_rested : aadjppnemstpsraswrfldleft { + aimPrecision = CSE_SWAY_RESTED_PRONE; + actions = "RifleAdjustLProneActions_cse_rested"; + aiming = "aimingLying"; + speed = 0.01; + onLandEnd = true; + onLandBeg = true; + + ConnectTo[] = {"aadjppnemstpsraswrfldleft_cse_rested", 0.02}; + ConnectFrom[] = {"aadjppnemstpsraswrfldleft_cse_rested", 0.02}; + InterpolateFrom[] = {"aadjppnemstpsraswrfldleft", 0.02}; + InterpolateTo[] = {"aadjppnemstpsraswrfldleft", 0.02}; + }; + + class aadjppnemstpsraswrfldright; + class aadjppnemstpsraswrfldright_cse_rested : aadjppnemstpsraswrfldright { + aimPrecision = CSE_SWAY_RESTED_PRONE; + actions = "RifleAdjustRProneActions_cse_rested"; + aiming = "aimingLying"; + speed = 0.01; + onLandEnd = true; + onLandBeg = true; + + ConnectTo[] = {"aadjppnemstpsraswrfldright_cse_rested", 0.02}; + ConnectFrom[] = {"aadjppnemstpsraswrfldright_cse_rested", 0.02}; + InterpolateFrom[] = {"aadjppnemstpsraswrfldright", 0.02}; + InterpolateTo[] = {"aadjppnemstpsraswrfldright", 0.02}; + }; + + class aadjppnemstpsraswrflddown; + class aadjppnemstpsraswrflddown_cse_rested : aadjppnemstpsraswrflddown { + aimPrecision = CSE_SWAY_RESTED_PRONE; + actions = "RifleAdjustBProneActions_cse_rested"; + aiming = "aimingLying"; + speed = 0.01; + onLandEnd = true; + onLandBeg = true; + + ConnectTo[] = {"aadjppnemstpsraswrflddown_cse_rested", 0.02}; + ConnectFrom[] = {"aadjppnemstpsraswrflddown_cse_rested", 0.02}; + InterpolateFrom[] = {"aadjppnemstpsraswrflddown", 0.02}; + InterpolateTo[] = {"aadjppnemstpsraswrflddown", 0.02}; + }; + + class amovppnemstpsraswrfldnon_cse_rested : amovppnemstpsraswrfldnon { + aimPrecision = CSE_SWAY_RESTED_PRONE; + actions = "RifleProneActions_cse_rested"; + aiming = "aimingLying"; + speed = 0.01; + onLandEnd = true; + onLandBeg = true; + + ConnectTo[] = {"amovppnemstpsraswrfldnon_cse_rested", 0.02}; + ConnectFrom[] = {"amovppnemstpsraswrfldnon_cse_rested", 0.02}; + InterpolateFrom[] = {"amovppnemstpsraswrfldnon", 0.02}; + InterpolateTo[] = {"amovppnemstpsraswrfldnon", 0.02}; + }; + }; +}; \ No newline at end of file diff --git a/TO_MERGE/cse/sys_equipment/CfgSounds.h b/TO_MERGE/cse/sys_equipment/CfgSounds.h new file mode 100644 index 0000000000..87c417cc0e --- /dev/null +++ b/TO_MERGE/cse/sys_equipment/CfgSounds.h @@ -0,0 +1,28 @@ +class CfgSounds +{ + class cse_magrepack_finished + { + name="cse_magrepack_finished"; + sound[]={"\cse\cse_sys_equipment\magazineRepack\sound\magrepack_finished.wav",1,1}; + titles[]={}; + }; + class cse_magrepack_single + { + name="cse_magrepack_single"; + sound[]={"\cse\cse_sys_equipment\magazineRepack\sound\magrepack_single.wav",1,1}; + titles[]={}; + }; + + class cse_weaponrest_rest + { + name="cse_weaponrest_rest"; + sound[]={"\cse\cse_sys_equipment\weaponresting\sound\weaponrest_rest.wav",1,1}; + titles[]={}; + }; + class cse_weaponrest_unrest + { + name="cse_weaponrest_unrest"; + sound[]={"\cse\cse_sys_equipment\weaponresting\sound\weaponrest_unrest.wav",1,1}; + titles[]={}; + }; +}; \ No newline at end of file diff --git a/TO_MERGE/cse/sys_equipment/CfgVehicles.h b/TO_MERGE/cse/sys_equipment/CfgVehicles.h new file mode 100644 index 0000000000..f37c4dd6e9 --- /dev/null +++ b/TO_MERGE/cse/sys_equipment/CfgVehicles.h @@ -0,0 +1,224 @@ +class CfgVehicles +{ + class Land_HelipadEmpty_F; + class cse_LogicDummy: Land_HelipadEmpty_F + { + scope = 1; + slx_xeh_disabled = 1; + class EventHandlers { + init = "(_this select 0) enableSimulation false"; + }; + }; + + class Logic; + class Module_F: Logic { + class ArgumentsBaseUnits { + }; + }; + + class cse_sys_equipment: Module_F { + scope = 2; + displayName = "Equipment Options [CSE]"; + icon = "\cse\cse_main\data\cse_basic_module.paa"; + category = "cse_equipment"; + function = "cse_fnc_initalizeModule_F"; + functionPriority = 1; + isGlobal = 1; + isTriggerActivated = 0; + class Arguments { + class magazineRepack { + displayName = "Magazine Repack"; + description = "Lets players repack their magazines in the field"; + typeName = "BOOL"; + defaultValue = true; + }; + class attachableItems { + displayName = "Attachable Items"; + description = "Allows for attaching chemlights, IR strobes and the like"; + typeName = "BOOL"; + defaultValue = true; + }; + class weaponResting { + displayName = "Weapon Resting"; + description = "Allow players to rest their weapons and deploy bipods."; + typeName = "BOOL"; + defaultValue = true; + }; + class weaponSafety { + displayName = "Weapon Safety"; + description = "Allow players to put their weapons on safe."; + typeName = "BOOL"; + defaultValue = true; + }; + class adjustableNVG { + displayName = "NVG Adjustments"; + description = "Allow players to adjust their NVG brightness"; + typeName = "BOOL"; + defaultValue = true; + }; + class allowWeaponSelect { + displayName = "Weapon selection"; + description = "Allow players to select weapons through keybindings"; + typeName = "BOOL"; + defaultValue = true; + }; + class allowAmmoChecking { + displayName = "Ammo Checking"; + description = "Allow players to check their Ammunition"; + typeName = "BOOL"; + defaultValue = true; + }; + class hideAmmoValues { + displayName = "Hide Ammo"; + description = "Hide the Ammunition counter for players"; + typeName = "NUMBER"; + defaultValue = 0; + class values { + class enable { + name = "Yes"; + value = 1; + }; + class disable { + name = "No"; + value = 0; + default = 1; + }; + }; + }; + }; + class ModuleDescription { + description = "Various actions/equipment settings."; + sync[] = {}; + }; + }; + + // BACKWARDS COMPATABILITY MODULES PRESSENCE + class cse_sys_magazineRepack: Module_F { + scope = 1; // hidden for backwards compatability + displayName = "Magazine Repack [CSE]"; + icon = "\cse\cse_main\data\cse_basic_module.paa"; + category = "cse_equipment"; + function = "cse_fnc_initalizeModule_F"; + functionPriority = 1; + isGlobal = 1; + isTriggerActivated = 0; + class Arguments { + }; + class ModuleDescription { + description = "Lets players repack their magazines in the field"; + sync[] = {}; + }; + }; + class cse_sys_attachableItems: Module_F { + scope = 1; // hidden for backwards compatability + displayName = "Attachable Items [CSE]"; + icon = "\cse\cse_main\data\cse_basic_module.paa"; + category = "cse_equipment"; + function = "cse_fnc_initalizeModule_F"; + functionPriority = 1; + isGlobal = 1; + isTriggerActivated = 0; + class Arguments { + }; + class ModuleDescription { + description = "Allows for attaching chemlights, IR strobes and the like"; + sync[] = {}; + }; + }; + + class cse_sys_weaponrest: Module_F { + scope = 1; // hidden for backwards compatability + displayName = "Weapon Resting [CSE]"; + icon = "\cse\cse_main\data\cse_rifle_module.paa"; + category = "cse_equipment"; + function = "cse_fnc_initalizeModule_F"; + functionPriority = 1; + isGlobal = 1; + isTriggerActivated = 0; + class Arguments + { + + }; + }; + + class cse_sys_weaponsafety: Module_F { + scope = 1; // hidden for backwards compatability + displayName = "Weapon Safety [CSE]"; + icon = "\cse\cse_main\data\cse_rifle_module.paa"; + category = "cse_equipment"; + function = "cse_fnc_initalizeModule_F"; + functionPriority = 1; + isGlobal = 1; + isTriggerActivated = 0; + class Arguments + { + + }; + }; + + class cse_sys_nightvision: Module_F { + scope = 1; // hidden for backwards compatability + displayName = "Night Vision [CSE]"; + icon = "\cse\cse_main\data\cse_nvg_module.paa"; + category = "cse_equipment"; + function = "cse_fnc_initalizeModule_F"; + functionPriority = 1; + isGlobal = 1; + isTriggerActivated = 0; + class Arguments { + }; + }; + // END BACKWARDS COMPATABILITY + + + // curator modules + class cse_moduleGroundFlare_White: Module_F { + scope = 1; + scopeCurator = 2; + displayName = "White Flare (Ground)"; + icon = "\a3\Modules_F_Curator\Data\iconFlare_ca.paa"; + category = "Effects"; + function = "cse_fnc_moduleFlare_EQ"; + functionPriority = 1; + isGlobal = 1; + isTriggerActivated = 0; + author = "Combat Space Enhancement"; + ammo = "CSE_FlareWhite"; + class Arguments { + }; + class ModuleDescription { + description = "Places a white flare on the ground"; + sync[] = {}; + }; + }; + class cse_moduleGroundFlare_Red: cse_moduleGroundFlare_White { + displayName = "Red Flare (Ground)"; + ammo = "CSE_FlareRed"; + class Arguments { + }; + class ModuleDescription { + description = "Places a red flare on the ground"; + sync[] = {}; + }; + }; + class cse_moduleGroundFlare_Yellow: cse_moduleGroundFlare_White { + displayName = "Yellow Flare (Ground)"; + ammo = "CSE_FlareYellow"; + class Arguments { + }; + class ModuleDescription { + description = "Places a yellow flare on the ground"; + sync[] = {}; + }; + }; + class cse_moduleGroundFlare_Green: cse_moduleGroundFlare_White { + displayName = "Green Flare (Ground)"; + ammo = "CSE_FlareGreen"; + class Arguments { + }; + class ModuleDescription { + description = "Places a green flare on the ground"; + sync[] = {}; + }; + }; +}; \ No newline at end of file diff --git a/TO_MERGE/cse/sys_equipment/CfgWeapons.h b/TO_MERGE/cse/sys_equipment/CfgWeapons.h new file mode 100644 index 0000000000..2aa1cb1840 --- /dev/null +++ b/TO_MERGE/cse/sys_equipment/CfgWeapons.h @@ -0,0 +1,56 @@ +class CfgWeapons { + class GrenadeLauncher; + class Throw: GrenadeLauncher { + muzzles[] += {"CSE_FlareWhiteMuzzle", "CSE_FlareRedMuzzle", "CSE_FlareGreenMuzzle", "CSE_FlareYellowMuzzle", "CSE_RoadFlareWhiteMuzzle", "CSE_RoadFlareRedMuzzle", "CSE_RoadFlareGreenMuzzle", "CSE_RoadFlareYellowMuzzle"}; + class ThrowMuzzle; + class CSE_FlareWhiteMuzzle: ThrowMuzzle { + magazines[] = {"CSE_FlareWhite"}; + }; + class CSE_FlareRedMuzzle: ThrowMuzzle { + magazines[] = {"CSE_FlareRed"}; + }; + class CSE_FlareGreenMuzzle: ThrowMuzzle { + magazines[] = {"CSE_FlareGreen"}; + }; + class CSE_FlareYellowMuzzle: ThrowMuzzle { + magazines[] = {"CSE_FlareYellow"}; + }; + + class CSE_RoadFlareWhiteMuzzle: ThrowMuzzle { + magazines[] = {"CSE_RoadFlareWhite"}; + }; + class CSE_RoadFlareRedMuzzle: ThrowMuzzle { + magazines[] = {"CSE_RoadFlareRed"}; + }; + class CSE_RoadFlareGreenMuzzle: ThrowMuzzle { + magazines[] = {"CSE_RoadFlareGreen"}; + }; + class CSE_RoadFlareYellowMuzzle: ThrowMuzzle { + magazines[] = {"CSE_RoadFlareYellow"}; + }; + }; + + class Rifle_Base_F; + class Rifle_Long_Base_F; + class arifle_MX_Base_F; + class arifle_MX_SW_F: arifle_MX_Base_F + { + cse_bipod = 1; + }; + class LMG_Mk200_F: Rifle_Base_F + { + cse_bipod = 1; + }; + class LMG_Zafir_F: Rifle_Base_F + { + cse_bipod = 1; + }; + class LRR_base_F: Rifle_Long_Base_F + { + cse_bipod = 1; + }; + class GM6_base_F: Rifle_Long_Base_F + { + cse_bipod = 1; + }; +}; \ No newline at end of file diff --git a/TO_MERGE/cse/sys_equipment/Combat_Space_Enhancement.h b/TO_MERGE/cse/sys_equipment/Combat_Space_Enhancement.h new file mode 100644 index 0000000000..e1ae338102 --- /dev/null +++ b/TO_MERGE/cse/sys_equipment/Combat_Space_Enhancement.h @@ -0,0 +1,87 @@ +#define MENU_KEYBINDING 1 +#define ACTION_KEYBINDING 2 +#define CLIENT_SETTING 3 + +class Combat_Space_Enhancement { + class EventHandlers { + class PostInit_EventHandlers { + class cse_sys_equipment { + // init = " call compile preprocessFile 'cse\cse_sys_equipment\init_sys_equipment.sqf';"; + }; + }; + }; + class cfgModules { + class cse_sys_equipment { + init = "call compile preprocessFile 'cse\cse_sys_equipment\init_sys_equipment.sqf';"; + name = "Equipment Module"; + class EventHandlers { + class AllVehicles { + GetOut = "if (CSE_HIDE_AMMO_COUNTERS_EQ> 0) then { if (_this select 2 == player) then {0 = [] spawn { waituntil {vehicle player == player}; [true] call cse_fnc_hidEUnitInfoAmmo_EQ;};};};"; + }; + }; + }; + + // BACKWARDS COMPATABILITY MODULES + // Have to stay put, as cse_sys_equipment will make use of them. + // The modules themselves will be hidden. + class cse_sys_magazineRepack { + init = "call compile preprocessFile 'cse\cse_sys_equipment\scripts\register_magazine_repack_actions.sqf';"; + name = "Magazine Repack"; + disableConfigExecution = 1; + }; + class cse_sys_attachableItems { + init = "call compile preprocessFile 'cse\cse_sys_equipment\scripts\register_attachable_items_actions.sqf';"; + name = "Attachable Items"; + disableConfigExecution = 1; + }; + + class cse_sys_weaponrest { + init = "call compile preprocessFile 'cse\cse_sys_equipment\weaponresting\init_sys_weaponrest.sqf';"; + name = "Weapon Resting & Bipods"; + disableConfigExecution = 1; + class Configurations { + class cse_sys_weaponRestAction { + type = ACTION_KEYBINDING; + title = $STR_DEPLOY_WEAPON_REST_TTTLE; + description = $STR_DEPLOY_WEAPON_REST_DESC; + value[] = {56,1,2,2}; + onPressed = "[] call cse_fnc_keyPressed_WR;"; + }; + class cse_sys_weaponUnrestAction { + type = ACTION_KEYBINDING; + title = $STR_DEPLOY_WEAPON_UNREST_TTTLE; + description = $STR_DEPLOY_WEAPON_UNREST_DESC; + value[] = {0,0,0,0}; + onPressed = "[] call cse_fnc_actionReleaseWeapon_WR;"; + }; + }; + }; + class cse_sys_weaponsafety { + init = "call compile preprocessFile 'cse\cse_sys_equipment\weaponsafety\init_sys_weaponsafety.sqf';"; + name = "Weapon Safety"; + disableConfigExecution = 1; + }; + class cse_sys_nightvision { + init = "call compile preprocessFile 'cse\cse_sys_equipment\nvg\init_sys_nightvision.sqf';"; + name = "Night Vision"; + disableConfigExecution = 1; + class Configurations { + class cse_sys_nvgAdjustBrightness_UP { + type = ACTION_KEYBINDING; + title = $STR_INCREASE_NVG_BIRGHTNESS_TITLE; + description = $STR_INCREASE_NVG_BIRGHTNESS_DESC; + value[] = {201,0,0,1}; + onPressed = "[player,0.1] call cse_fnc_adjustBrightness_NVG;"; + }; + class cse_sys_nvgAdjustBrightness_DOWN { + type = ACTION_KEYBINDING; + title = $STR_DECREASE_NVG_BIRGHTNESS_TITLE; + description = $STR_DECREASE_NVG_BIRGHTNESS_DESC; + value[] = {209,0,0,1}; + onPressed = "[player,-0.1] call cse_fnc_adjustBrightness_NVG;"; + }; + }; + }; + + }; +}; \ No newline at end of file diff --git a/TO_MERGE/cse/sys_equipment/UI.h b/TO_MERGE/cse/sys_equipment/UI.h new file mode 100644 index 0000000000..11255d108c --- /dev/null +++ b/TO_MERGE/cse/sys_equipment/UI.h @@ -0,0 +1 @@ +#include "ui\rscTitles.h" \ No newline at end of file diff --git a/TO_MERGE/cse/sys_equipment/config.cpp b/TO_MERGE/cse/sys_equipment/config.cpp new file mode 100644 index 0000000000..106d0e6b37 --- /dev/null +++ b/TO_MERGE/cse/sys_equipment/config.cpp @@ -0,0 +1,59 @@ +class CfgPatches { + class cse_sys_equipment { + units[] = {"cse_moduleGroundFlare_White", "cse_moduleGroundFlare_Red","cse_moduleGroundFlare_Green","cse_moduleGroundFlare_Yellow"}; + weapons[] = {}; + requiredVersion = 0.1; + requiredAddons[] = {"A3_Modules_F", "A3_UI_F", "cse_main", "cse_gui", "cse_f_eh"}; + version = "0.10.0_rc"; + author[] = {"Combat Space Enhancement"}; + website = "csemod.com"; + }; + class cse_sys_magazineRepack { + units[] = {}; + weapons[] = {}; + requiredVersion = 1.0; + requiredAddons[] = {"cse_f_eh","cse_main"}; + versionDesc = "CSE Magazine Repack"; + version = "0.10.0_rc"; + author[] = {"Combat Space Enhancement"}; + authorUrl = "http://csemod.com"; + }; + class cse_sys_weaponrest { + units[] = {}; + weapons[] = {}; + requiredVersion = 1.0; + requiredAddons[] = {"cse_f_eh","cse_main", "A3_Weapons_F", "A3_Weapons_F_Rifles_MX"}; + versionDesc = "CSE Weapon Resting"; + version = "0.10.0_rc"; + author[] = {"Combat Space Enhancement", "Tupolov", "Glowbal"}; + authorUrl = "http://csemod.com"; + }; + class cse_sys_nightvision { + units[] = {}; + weapons[] = {}; + requiredVersion = 1.0; + requiredAddons[] = {"cse_f_eh","cse_main"}; + versionDesc = "CSE Night Vision"; + version = "0.10.0_rc"; + author[] = {"Combat Space Enhancement"}; + authorUrl = "http://csemod.com"; + }; +}; + +class CfgAddons { + class PreloadAddons { + class cse_sys_equipment { + list[] = {"cse_sys_equipment", "cse_sys_magazineRepack", "cse_sys_weaponrest", "cse_sys_nightvision"}; + }; + }; +}; +#include "Combat_Space_Enhancement.h" +#include "CfgFactionClasses.h" +#include "CfgVehicles.h" +#include "CfgFunctions.h" +#include "CfgSounds.h" +#include "CfgAmmo.h" +#include "CfgWeapons.h" +#include "CfgMovesBasic.h" +#include "CfgMovesMaleSdr.h" +#include "UI.h" \ No newline at end of file diff --git a/TO_MERGE/cse/sys_equipment/functions/fn_areEquipmentOptionsAvailable_EQ.sqf b/TO_MERGE/cse/sys_equipment/functions/fn_areEquipmentOptionsAvailable_EQ.sqf new file mode 100644 index 0000000000..4a805582ce --- /dev/null +++ b/TO_MERGE/cse/sys_equipment/functions/fn_areEquipmentOptionsAvailable_EQ.sqf @@ -0,0 +1,19 @@ +/** + * fn_areEquipmentOptionsAvailable_EQ.sqf + * @Descr: N/A + * @Author: Glowbal + * + * @Arguments: [] + * @Return: + * @PublicAPI: false + */ + +private ["_return","_equipOpt"]; +_return = false; +_equipOpt = ([] call cse_fnc_getAllEquipmentOptions_EQ); +{ + if (_this call (_x select 1)) exitwith { + _return = true; + }; +}foreach _equipOpt; +_return \ No newline at end of file diff --git a/TO_MERGE/cse/sys_equipment/functions/fn_attachItem_EQ.sqf b/TO_MERGE/cse/sys_equipment/functions/fn_attachItem_EQ.sqf new file mode 100644 index 0000000000..570bc37d33 --- /dev/null +++ b/TO_MERGE/cse/sys_equipment/functions/fn_attachItem_EQ.sqf @@ -0,0 +1,55 @@ +/** + * fn_attachItem_EQ.sqf + * @Descr: Attach an item of given classname. + * @Author: Glowbal + * + * @Arguments: [unit OBJECT, item STRING (Classname of magazine item)] + * @Return: nil + * @PublicAPI: true + */ + +private ["_unit","_chemlight","_isStrobeLight", "_light"]; +_unit = [_this, 0, objNull, [objNull]] call BIS_fnc_Param; +_item = [_this, 1, "", [""]] call BIS_fnc_Param; + +[format["Attach item: %1",_this]] call cse_fnc_debug; + +if (!isNull(_unit getvariable ["cse_attachedItem_EQ",objNull])) exitwith {}; +if !([_unit,_item] call cse_fnc_hasMagazine) exitwith{}; +if !([_item] call cse_fnc_isAttachableItem_EQ) exitwith{}; + +_unit setvariable ["cse_attachedItemClassName_EQ", _item]; + +_isStrobeLight = switch (_item) do { + case "B_IR_Grenade": {true}; + case "I_IR_Grenade": {true}; + case "O_IR_Grenade": {true}; + default {false}; +}; +if (_isStrobeLight) then { + _light = (toString [(toArray _item) select 0] + "_IRStrobe") createVehicle (getPos _unit); +} else { + _light = _item createVehicle (getPos _unit); +}; + +if (!isNull _light) then { + [_unit,_item] call cse_fnc_useMagazine; + _light attachTo [_unit,[0.1,-0.1,-0.1],"head"]; + _unit setvariable["cse_attachedItem_EQ",_light,true]; +}; + + + +[_unit, _light] spawn { + _unit = _this select 0; + _light = _this select 1; + while {((alive _light) && !isNull(_unit getvariable ["cse_attachedItem_EQ",objNull]) && alive _unit)} do { + if (vehicle _unit != _unit) then { + _positionInWorld = _unit modelToWorld (_unit selectionPosition "head"); + _vehPos = (vehicle _unit) worldToModel _positionInWorld; + _light attachTo [(vehicle _unit),_vehPos]; + } else { + _light attachTo [_unit,[0.1,-0.1,-0.1],"head"]; + }; + }; +}; diff --git a/TO_MERGE/cse/sys_equipment/functions/fn_detachItem_EQ.sqf b/TO_MERGE/cse/sys_equipment/functions/fn_detachItem_EQ.sqf new file mode 100644 index 0000000000..e962f9b2ea --- /dev/null +++ b/TO_MERGE/cse/sys_equipment/functions/fn_detachItem_EQ.sqf @@ -0,0 +1,49 @@ +/** + * fn_detachItem_EQ.sqf + * @Descr: Detach current attached item and add it back to the magazines list of the unit. + * @Author: Glowbal + * + * @Arguments: [unit OBJECT] + * @Return: BOOL True if succesful. + * @PublicAPI: true + */ + +private ["_unit","_chemlight","_isStrobeLight", "_light","_item", "_originalCount"]; +_unit = [_this, 0, objNull, [objNull]] call BIS_fnc_Param; + +_item = _unit getvariable ["cse_attachedItem_EQ",objNull]; +_unit setvariable["cse_attachedItem_EQ",nil,true]; + +if (isNull _item) exitwith {true}; +_isStrobeLight = switch (typeOf _item) do { + case "B_IRStrobe": {true}; + case "I_IRStrobe": {true}; + case "O_IRStrobe": {true}; + default {false}; +}; +if (_isStrobeLight) then { + _light = switch (typeOf _item) do { + case "B_IRStrobe": {"B_IR_Grenade"}; + case "I_IRStrobe": {"I_IR_Grenade"}; + case "O_IRStrobe": {"O_IR_Grenade"}; + }; +} else { + _light = typeOf _item; +}; +[format ["Detaching %1 %2", _unit, _light]] call cse_fnc_debug; + _originalCount = ({_x == _light} count magazines _unit); + +_unit addMagazine [_light, 1]; +if ((_originalCount + 1) < ({_x == _light} count magazines _unit)) then { + _unit removeMagazine _light; +}; +detach _item; + +if (_isStrobeLight) then { + _item setPos [-10000,-10000,-10000]; + + // sleeping to ensure the IR strobe effect is properly gone before we delete the source. + sleep 5; +}; +deleteVehicle _item; +true; \ No newline at end of file diff --git a/TO_MERGE/cse/sys_equipment/functions/fn_dropFlare_EQ.sqf b/TO_MERGE/cse/sys_equipment/functions/fn_dropFlare_EQ.sqf new file mode 100644 index 0000000000..b7e94e91f0 --- /dev/null +++ b/TO_MERGE/cse/sys_equipment/functions/fn_dropFlare_EQ.sqf @@ -0,0 +1,32 @@ +/** + * fn_dropFlare_EQ.sqf + * @Descr: Drop a flare object + * @Author: Glowbal + * + * @Arguments: [unit OBJECT, flare STRING (Classname of the flare or fusee)] + * @Return: OBJECT The created flare. Objnull if failure. + * @PublicAPI: true + */ + +private ["_unit", "_item", "_flareObj"]; +_unit = [_this, 0, objNull, [objNull]] call BIS_fnc_Param; +_item = [_this, 1, "", [""]] call BIS_fnc_Param; + +_continue = switch (_item) do { + case "CSE_FlareWhite": {true}; + case "CSE_FlareRed": {true}; + case "CSE_FlareGreen": {true}; + case "CSE_FlareYellow": {true}; + case "CSE_RoadFlareWhite": {true}; + case "CSE_RoadFlareRed": {true}; + case "CSE_RoadFlareGreen": {true}; + case "CSE_RoadFlareYellow": {true}; + default {false}; +}; +if (!_continue) exitwith {objNull}; +if (_unit isKindof "CAManBAse") then { + [_unit, _item] call cse_fnc_useMagazine; +}; +_flareObj = _item createVehicle getPos _unit; + +_flareObj \ No newline at end of file diff --git a/TO_MERGE/cse/sys_equipment/functions/fn_getAllEquipmentOptions_EQ.sqf b/TO_MERGE/cse/sys_equipment/functions/fn_getAllEquipmentOptions_EQ.sqf new file mode 100644 index 0000000000..ad4d42b68e --- /dev/null +++ b/TO_MERGE/cse/sys_equipment/functions/fn_getAllEquipmentOptions_EQ.sqf @@ -0,0 +1,22 @@ +/** + * fn_getAllEquipmentOptions_EQ.sqf + * @Descr: N/A + * @Author: Glowbal + * + * @Arguments: [] + * @Return: + * @PublicAPI: false + */ + +private["_return"]; +_return = []; +if (isnil "CSE_EQUIPMENT_OPTIONS_EQ") then { + CSE_EQUIPMENT_OPTIONS_EQ = _return; +}; +/* +{ + _return set [count _return, _x]; +}foreach CSE_EQUIPMENT_OPTIONS_EQ; +*/ +_return = + CSE_EQUIPMENT_OPTIONS_EQ; +_return \ No newline at end of file diff --git a/TO_MERGE/cse/sys_equipment/functions/fn_getPercentageAmmoMagazine_EQ.sqf b/TO_MERGE/cse/sys_equipment/functions/fn_getPercentageAmmoMagazine_EQ.sqf new file mode 100644 index 0000000000..46455c4066 --- /dev/null +++ b/TO_MERGE/cse/sys_equipment/functions/fn_getPercentageAmmoMagazine_EQ.sqf @@ -0,0 +1,27 @@ +/** + * fn_getPercentageAmmoMagazine_EQ.sqf + * @Descr: Get percentage of ammo in currentMagazine left. + * @Author: Glowbal + * + * @Arguments: [unit OBJECT] + * @Return: NUMBER A number between 100 and 0, with 100 being a full magazine and 0 being empty (No ammo left). + * @PublicAPI: true + */ + +private ["_unit", "_percentage", "_maxAmmoCount", "_currentAmmoCount"]; +_unit = _this select 0; +_percentage = 0; + +if (currentWeapon _unit != "") then { + { + if (_x select 4 == currentMuzzle _unit) exitWith { + _currentAmmoCount = _x select 1; + _maxAmmoCount = getNumber(configFile >> "CfgMagazines" >> (_x select 0) >> "count"); + if (_maxAmmoCount > 0) then { + _percentage = (_currentAmmoCount / _maxAmmoCount) * 100; + }; + }; + } forEach (magazinesAmmoFull _unit); +}; + +_percentage diff --git a/TO_MERGE/cse/sys_equipment/functions/fn_hasAttachableItem_EQ.sqf b/TO_MERGE/cse/sys_equipment/functions/fn_hasAttachableItem_EQ.sqf new file mode 100644 index 0000000000..a130e32ef6 --- /dev/null +++ b/TO_MERGE/cse/sys_equipment/functions/fn_hasAttachableItem_EQ.sqf @@ -0,0 +1,20 @@ +/** + * fn_hasAttachableItem_EQ.sqf + * @Descr: Check if unit has an attachable Item. + * @Author: Glowbal + * + * @Arguments: [unit OBJECT] + * @Return: BOOL + * @PublicAPI: true + */ + +private ["_unit","_return"]; +_unit = _this select 0; +_return = false; +{ + if ([_x] call cse_fnc_isAttachableItem_EQ) exitwith { + _return = true; + }; +}foreach (magazines _unit); + +_return \ No newline at end of file diff --git a/TO_MERGE/cse/sys_equipment/functions/fn_hasFlare_EQ.sqf b/TO_MERGE/cse/sys_equipment/functions/fn_hasFlare_EQ.sqf new file mode 100644 index 0000000000..f8579d2f97 --- /dev/null +++ b/TO_MERGE/cse/sys_equipment/functions/fn_hasFlare_EQ.sqf @@ -0,0 +1,19 @@ +/** + * fn_hasFlare_EQ.sqf + * @Descr: Check if given unit has a flare. + * @Author: Glowbal + * + * @Arguments: [unit OBJECT] + * @Return: BOOL + * @PublicAPI: true + */ + +private[ "_unit", "_return"]; +_unit = [_this, 0, objNull, [objNull]] call BIS_fnc_Param; +if !(_unit isKindof "CAManBase") exitwith {false}; +_return = false; +{ + if ([_x] call cse_fnc_isFlare_EQ) exitwith {_return = true;}; +}foreach (magazines _unit); + +_return \ No newline at end of file diff --git a/TO_MERGE/cse/sys_equipment/functions/fn_hasItemAttached_EQ.sqf b/TO_MERGE/cse/sys_equipment/functions/fn_hasItemAttached_EQ.sqf new file mode 100644 index 0000000000..2a32cd4d8a --- /dev/null +++ b/TO_MERGE/cse/sys_equipment/functions/fn_hasItemAttached_EQ.sqf @@ -0,0 +1,15 @@ +/** + * fn_hasItemAttached_EQ.sqf + * @Descr: Check if unit has an item attached + * @Author: Glowbal + * + * @Arguments: [unit OBJECT] + * @Return: BOOL + * @PublicAPI: true + */ + +private ["_unit", "_item"]; +_unit = _this select 0; +_item = _unit getvariable ["cse_attachedItem_EQ",objNull]; + +(!isNull _item); \ No newline at end of file diff --git a/TO_MERGE/cse/sys_equipment/functions/fn_hideUnitInfoAmmo_EQ.sqf b/TO_MERGE/cse/sys_equipment/functions/fn_hideUnitInfoAmmo_EQ.sqf new file mode 100644 index 0000000000..233709a562 --- /dev/null +++ b/TO_MERGE/cse/sys_equipment/functions/fn_hideUnitInfoAmmo_EQ.sqf @@ -0,0 +1,39 @@ +/** + * fn_hideUnitInfoAmmo_EQ.sqf + * @Descr: Hide the unitInfo ammo related parts. Credits Vladimir Hynek (BI Dev) for original code from BIS_fnc_showUnitInfo + * @Author: Glowbal + * + * @Arguments: [hide BOOL] + * @Return: nil + * @PublicAPI: true + */ + +private ["_hide"]; +_hide = [_this, 0, true, [true]] call BIS_fnc_param; +[format["Hiding unitAmmoInfo %1", _hide]] call cse_fnc_debug; +disableSerialization; +{ + if((ctrlIDD _x) == 300) then + { + private ["_unitInfoDisplay"]; + _unitInfoDisplay = _x; + + { + if (_x in [184, 185, 151]) then { + private ["_ctrl"]; + _ctrl = _unitInfoDisplay displayCtrl _x; + + if(_hide) then + { + _ctrl ctrlSetFade 1; + } + else + { + _ctrl ctrlSetFade 0; + }; + + _ctrl ctrlCommit 0; + }; + } foreach ([(configfile >> "RscInGameUI" >> "RscUnitInfo"), 0] call bis_fnc_displaycontrols); + }; +} foreach (uinamespace getvariable "IGUI_displays"); //RscUnitInfo can be present several times for some reason diff --git a/TO_MERGE/cse/sys_equipment/functions/fn_isAttachableItem_EQ.sqf b/TO_MERGE/cse/sys_equipment/functions/fn_isAttachableItem_EQ.sqf new file mode 100644 index 0000000000..74bb063199 --- /dev/null +++ b/TO_MERGE/cse/sys_equipment/functions/fn_isAttachableItem_EQ.sqf @@ -0,0 +1,23 @@ +/** + * fn_isAttachableItem_EQ.sqf + * @Descr: Check if item is an attachable Item. + * @Author: Glowbal + * + * @Arguments: [item STRING (Classname of item)] + * @Return: BOOL + * @PublicAPI: false + */ + +private ["_chemlight","_return"]; +_chemlight = _this select 0; +_return = switch (_chemlight) do { + case "Chemlight_blue": {true}; + case "Chemlight_red": {true}; + case "Chemlight_green": {true}; + case "Chemlight_yellow": {true}; + case "B_IR_Grenade": {true}; + case "I_IR_Grenade": {true}; + case "O_IR_Grenade": {true}; + default {false}; +}; +_return \ No newline at end of file diff --git a/TO_MERGE/cse/sys_equipment/functions/fn_isFlare_EQ.sqf b/TO_MERGE/cse/sys_equipment/functions/fn_isFlare_EQ.sqf new file mode 100644 index 0000000000..5445e191be --- /dev/null +++ b/TO_MERGE/cse/sys_equipment/functions/fn_isFlare_EQ.sqf @@ -0,0 +1,25 @@ +/** + * fn_isFlare_EQ.sqf + * @Descr: Check if given classname is a CSE Flare + * @Author: Glowbal + * + * @Arguments: [classname STRING (Magazine classname to check)] + * @Return: BOOL True if classname is a flare. + * @PublicAPI: true + */ + +private ["_classname", "_return"]; +_classname = [_this, 0, "", [""]] call BIS_fnc_Param; +_return = switch (_classname) do { + case "CSE_FlareWhite": {true}; + case "CSE_FlareRed": {true}; + case "CSE_FlareGreen": {true}; + case "CSE_FlareYellow": {true}; + case "CSE_RoadFlareWhite": {true}; + case "CSE_RoadFlareRed": {true}; + case "CSE_RoadFlareGreen": {true}; + case "CSE_RoadFlareYellow": {true}; + default {false}; +}; + +_return \ No newline at end of file diff --git a/TO_MERGE/cse/sys_equipment/functions/fn_moduleFlare_EQ.sqf b/TO_MERGE/cse/sys_equipment/functions/fn_moduleFlare_EQ.sqf new file mode 100644 index 0000000000..82a43966ee --- /dev/null +++ b/TO_MERGE/cse/sys_equipment/functions/fn_moduleFlare_EQ.sqf @@ -0,0 +1,39 @@ +/** + * fn_moduleFlare_EQ.sqf + * @Descr: N/A + * @Author: Glowbal + * + * @Arguments: [] + * @Return: + * @PublicAPI: false + */ + +private ["_logic", "_className", "_cfg", "_ammo", "_flare"]; +_logic = [_this,0,objNull,[objNull]] call BIS_fnc_param; + +if (!isNull _logic) then { + _className = typeOf _logic; + _cfg = (ConfigFile >> "CfgVehicles" >> _className); + _ammo = getText(_cfg >> "ammo"); + if (_ammo != "") then { + _flare = [_logic, _ammo] call cse_fnc_dropFlare_EQ; + if (isnull _flare) then { + deleteVehicle _logic; + deleteVehicle _flare; + } else { + _logic setvariable ["cse_droppedFlare", _flare]; + + { + if !(_x getvariable ["CSE_CURATOR_ADDITIONAL_EQ", false]) then { + _x setvariable ["CSE_CURATOR_ADDITIONAL_EQ", true]; + _X addEventHandler["CuratorObjectDeleted", { + _obj = _this select 1; + if !(isNull (_obj getvariable ["cse_droppedFlare", objNull])) then { + deleteVehicle (_obj getvariable ["cse_droppedFlare", objNull]); + }; + }]; + }; + }foreach objectCurators _logic; + }; + }; +}; \ No newline at end of file diff --git a/TO_MERGE/cse/sys_equipment/functions/fn_putWeaponOnBack_EQ.sqf b/TO_MERGE/cse/sys_equipment/functions/fn_putWeaponOnBack_EQ.sqf new file mode 100644 index 0000000000..63d1af890b --- /dev/null +++ b/TO_MERGE/cse/sys_equipment/functions/fn_putWeaponOnBack_EQ.sqf @@ -0,0 +1,17 @@ +/** + * fn_putWeaponOnBack_EQ.sqf + * @Descr: Put unit weapon on the back. + * @Author: Glowbal + * + * @Arguments: [unit OBJECT] + * @Return: void + * @PublicAPI: true + */ + +#define MUZZLE_INDEX 100 + +private ["_unit"]; +_unit = _this select 0; +_unit action ["SwitchWeapon", _unit, _unit, MUZZLE_INDEX]; + +nil; \ No newline at end of file diff --git a/TO_MERGE/cse/sys_equipment/functions/fn_registerNewEquipmentOption_EQ.sqf b/TO_MERGE/cse/sys_equipment/functions/fn_registerNewEquipmentOption_EQ.sqf new file mode 100644 index 0000000000..8754bbdc24 --- /dev/null +++ b/TO_MERGE/cse/sys_equipment/functions/fn_registerNewEquipmentOption_EQ.sqf @@ -0,0 +1,30 @@ +/** + * fn_registerNewEquipmentOption_EQ.sqf + * @Descr: N/A + * @Author: Glowbal + * + * @Arguments: [] + * @Return: + * @PublicAPI: false + */ + +private ["_name","_condition","_code"]; +_name = _this select 0; +_condition = _this select 1; +_code = _this select 2; + +if (typeName _name != typeName "" || typeName _condition != typeName {} || typeName _code != typeName{}) exitwith {}; + +if (isnil "CSE_REGISTERING_EQUIPMENT_OPTION") then { + CSE_REGISTERING_EQUIPMENT_OPTION = false; +}; +sleep (random(0.5)); +waituntil {!CSE_REGISTERING_EQUIPMENT_OPTION}; +CSE_REGISTERING_EQUIPMENT_OPTION = true; + +if (isnil "CSE_EQUIPMENT_OPTIONS_EQ") then { + CSE_EQUIPMENT_OPTIONS_EQ = []; +}; +CSE_EQUIPMENT_OPTIONS_EQ pushback [_name,_condition,_code]; + +CSE_REGISTERING_EQUIPMENT_OPTION = false; \ No newline at end of file diff --git a/TO_MERGE/cse/sys_equipment/init_sys_equipment.sqf b/TO_MERGE/cse/sys_equipment/init_sys_equipment.sqf new file mode 100644 index 0000000000..a5687141eb --- /dev/null +++ b/TO_MERGE/cse/sys_equipment/init_sys_equipment.sqf @@ -0,0 +1,88 @@ +/* + NAME: init + USAGE: + AUTHOR: Glowbal + RETURN: void + +*/ + +waituntil{!isnil "cse_gui"}; +cse_equip_module = true; +_allowMagazineRepack = true; +_haveAttachableItems = true; +_allowWeaponRest = false; +_allowWeaponSafety = false; +_nvgBrightness = false; +_allowSelectWeaponKeybindings = false; +_allowCheckAmmoKeybindings = false; +CSE_HIDE_AMMO_COUNTERS_EQ = 0; + +_args = _this; +{ + _value = _x select 1; + if (!isnil "_value") then { + _name = _x select 0; + if (_name == "magazineRepack") exitwith { + _allowMagazineRepack = _value; + }; + if (_name == "attachableItems") exitwith { + _haveAttachableItems = _value; + }; + if (_name == "weaponResting") exitwith { + _allowWeaponRest = _value; + }; + if (_name == "weaponSafety") exitwith { + _allowWeaponSafety = _value; + }; + if (_name == "adjustableNVG") exitwith { + _nvgBrightness = _value; + }; + if (_name == "allowWeaponSelect") exitwith { + _allowSelectWeaponKeybindings = _value; + }; + if (_name == "allowAmmoChecking") exitwith { + _allowCheckAmmoKeybindings = _value; + }; + if (_name == "hideAmmoValues") exitwith { + CSE_HIDE_AMMO_COUNTERS_EQ = _value; + }; + }; +}foreach _args; + +if (_allowSelectWeaponKeybindings) then { + #include "scripts\select_weapon_keybindings.sqf" +}; + +if (_allowCheckAmmoKeybindings) then { + #include "scripts\check_ammo_keybindings.sqf" +}; + +if (_haveAttachableItems) then { + #include "scripts\register_attachable_items_actions.sqf" +}; + +if (_allowMagazineRepack) then { + #include "scripts\register_magazine_repack_actions.sqf" +}; + +if (_allowWeaponSafety) then { + ["cse_sys_weaponsafety", []] call cse_fnc_enableModule_f; +}; + +if (_allowWeaponRest) then { + ["cse_sys_weaponrest", []] call cse_fnc_enableModule_f; +}; + +if (_nvgBrightness) then { + ["cse_sys_nightvision", []] call cse_fnc_enableModule_f; +}; + +[format["EQUIP - EQUIPMENT module initialised"],2] call cse_fnc_debug; + +if (CSE_HIDE_AMMO_COUNTERS_EQ > 0) then { + waituntil {!isnil "cse_gui"}; + sleep 0.5; + if (vehicle player == player) then { + [true] call cse_fnc_hideUnitInfoAmmo_EQ; + }; +}; \ No newline at end of file diff --git a/TO_MERGE/cse/sys_equipment/magazineRepack/functions/fn_repackMagazines.sqf b/TO_MERGE/cse/sys_equipment/magazineRepack/functions/fn_repackMagazines.sqf new file mode 100644 index 0000000000..24224a01c7 --- /dev/null +++ b/TO_MERGE/cse/sys_equipment/magazineRepack/functions/fn_repackMagazines.sqf @@ -0,0 +1,105 @@ +/** + * fn_repackMagazines.sqf + * @Descr: Repacks all magazines of given type for a unit + * @Author: Ruthberg + * + * @Arguments: [unit OBJECT, classname STRING] + * @Return: + * @PublicAPI: true + */ + +#define MAGAZINE_ACCESS_DELAY 3.0 +#define AMMO_REPACK_DELAY 2.0 + +private ["_unit", "_className", "_magazineCapacity", "_magazines", "_repackableAmmoCount", "_repackableMagazinesCount", "_repackableMagazinesAmmoCounts", "_magazineClassName", "_magazineAmmoCount", "_amountOfFillableMagazines", "_workLoad", "_totalRepackTime", "_firstIndex", "_lastIndex", "_startTime", "_greatestAmmoCount", "_smallestAmmoCount"]; +_unit = [_this, 0, objNull, [objNull]] call BIS_fnc_param; +_className = [_this, 1, "", [""]] call bis_fnc_param; + +if (isNull _unit || _className == "") exitwith {}; +if (vehicle _unit != _unit && {driver (vehicle _unit) == _unit || commander (vehicle _unit) == _unit || gunner (vehicle _unit) == _unit}) exitWith {}; + +if (vehicle _unit == _unit && currentWeapon _unit != "" && !(weaponLowered _unit) && (stance player != "PRONE")) then { + _unit action ["WeaponOnBack", _unit]; + waitUntil { weaponLowered _unit }; // probably evil +}; + +_magazineCapacity = getNumber(configFile >> "CfgMagazines" >> _className >> "count"); + +_magazines = magazinesAmmo _unit; +_repackableAmmoCount = 0; +_repackableMagazinesCount = 0; +_repackableMagazinesAmmoCounts = []; +{ + _magazineClassName = (_x select 0); + _magazineAmmoCount = (_x select 1); + if (_magazineClassName == _className && _magazineAmmoCount < _magazineCapacity) then { + // sums the amount of remaining ammo in all used magazines + _repackableAmmoCount = _repackableAmmoCount + _magazineAmmoCount; + _repackableMagazinesCount = _repackableMagazinesCount + 1; + _repackableMagazinesAmmoCounts pushBack _magazineAmmoCount; + }; +} forEach _magazines; + +if (_repackableMagazinesCount < 2) exitWith {}; + +[getText(configFile >> "CfgMagazines" >> _className >> "displayName"), ["Starting magazine repack"], 0] call cse_fnc_gui_displayInformation; + +_amountOfFillableMagazines = floor(_repackableAmmoCount / _magazineCapacity); + +_repackableMagazinesAmmoCounts = [_repackableMagazinesAmmoCounts, false] call cse_fnc_insertionSort; + +_workLoad = 0; // amount of ammo that needs to be repacked +for "_i" from 0 to _amountOfFillableMagazines - 1 do { + _workLoad = _workLoad + (_magazineCapacity - (_repackableMagazinesAmmoCounts select _i)); +}; + +CSE_ORIGINAL_POSITION_MAG_REPACK_EQ = getPos _unit; +CSE_CONDITION_MAG_REPACK_EQ = {((vehicle player != player && driver (vehicle player) != player && commander (vehicle player) != player && gunner (vehicle player) != player) || (((getPos player) distance CSE_ORIGINAL_POSITION_MAG_REPACK_EQ) < 1 && (weaponLowered player) || (stance player == "PRONE")))}; +CSE_RUNNING_MAG_REPACK_EQ = true; +_totalRepackTime = MAGAZINE_ACCESS_DELAY * (count _repackableMagazinesAmmoCounts) + AMMO_REPACK_DELAY * _workLoad; +_totalRepackTime spawn { + CSE_RUNNING_MAG_REPACK_EQ = [_this, CSE_CONDITION_MAG_REPACK_EQ] call cse_fnc_gui_loadingBar; +}; + +_startTime = diag_tickTime; waitUntil {diag_tickTime - _startTime > MAGAZINE_ACCESS_DELAY}; +_firstIndex = 0; +_lastIndex = _repackableMagazinesCount - 1; +while {CSE_RUNNING_MAG_REPACK_EQ && _lastIndex > _firstIndex} do { + _greatestAmmoCount = _repackableMagazinesAmmoCounts select _firstIndex; + _smallestAmmoCount = _repackableMagazinesAmmoCounts select _lastIndex; + + _startTime = diag_tickTime; waitUntil {diag_tickTime - _startTime > AMMO_REPACK_DELAY / 2.0}; + if (!CSE_RUNNING_MAG_REPACK_EQ) exitWith {}; + playSound "cse_magrepack_single"; + _repackableMagazinesAmmoCounts set [_lastIndex, _smallestAmmoCount - 1]; + _startTime = diag_tickTime; waitUntil {diag_tickTime - _startTime > AMMO_REPACK_DELAY / 2.0}; + if (!CSE_RUNNING_MAG_REPACK_EQ) exitWith {}; + playSound "cse_magrepack_finished"; + _repackableMagazinesAmmoCounts set [_firstIndex, _greatestAmmoCount + 1]; + + // Skip full magazines + if (_repackableMagazinesAmmoCounts select _firstIndex == _magazineCapacity) then { + _startTime = diag_tickTime; waitUntil {diag_tickTime - _startTime > MAGAZINE_ACCESS_DELAY}; + _firstIndex = _firstIndex + 1; + [getText(configFile >> "CfgMagazines" >> _className >> "displayName"), [format["Finished repacking (%1/%2) magazines", _firstIndex, _amountOfFillableMagazines]], 0] call cse_fnc_gui_displayInformation; + }; + // Skip empty magazines + if (_repackableMagazinesAmmoCounts select _lastIndex == 0) then { + _startTime = diag_tickTime; waitUntil {diag_tickTime - _startTime > MAGAZINE_ACCESS_DELAY}; + _lastIndex = _lastIndex - 1; + }; +}; + +// Apply changes +for "_i" from 1 to _repackableMagazinesCount do { + _unit removeMagazine _className; +}; +for "_i" from 0 to _lastIndex do { + _unit addMagazine [_className, _repackableMagazinesAmmoCounts select _i]; +}; + +if (_firstIndex >= _lastIndex) then { + [getText(configFile >> "CfgMagazines" >> _className >> "displayName"), ["Completed magazine repack"], 0] call cse_fnc_gui_displayInformation; +} else { + [getText(configFile >> "CfgMagazines" >> _className >> "displayName"), ["Aborted magazine repack"], 0] call cse_fnc_gui_displayInformation; +}; diff --git a/TO_MERGE/cse/sys_equipment/magazineRepack/functions/fn_repackMagazinesAll.sqf b/TO_MERGE/cse/sys_equipment/magazineRepack/functions/fn_repackMagazinesAll.sqf new file mode 100644 index 0000000000..5de419f683 --- /dev/null +++ b/TO_MERGE/cse/sys_equipment/magazineRepack/functions/fn_repackMagazinesAll.sqf @@ -0,0 +1,20 @@ +/** + * fn_repackMagazinesAll.sqf + * @Descr: Repacks all magazines of a unit + * @Author: Glowbal, Ruthberg + * + * @Arguments: [unit OBJECT] + * @Return: nil + * @PublicAPI: true + */ + +private ["_unit", "_passedMags"]; +_unit = _this select 0; + +_passedMags = []; +{ + if (!((_x select 0) in _passedMags)) then { + _passedMags pushback (_x select 0); + [_unit, (_x select 0)] call cse_fnc_repackMagazines; + }; +} forEach (magazinesAmmo _unit); diff --git a/TO_MERGE/cse/sys_equipment/magazineRepack/sound/magrepack_finished.wav b/TO_MERGE/cse/sys_equipment/magazineRepack/sound/magrepack_finished.wav new file mode 100644 index 0000000000000000000000000000000000000000..ab73615a558f3aa60f97dfa47d6bd0773e40f4b0 GIT binary patch literal 152166 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 literal 0 HcmV?d00001 diff --git a/TO_MERGE/cse/sys_equipment/magazineRepack/sound/magrepack_single.wav b/TO_MERGE/cse/sys_equipment/magazineRepack/sound/magrepack_single.wav new file mode 100644 index 0000000000000000000000000000000000000000..5d94e215fdf9894487afb000569c829a903484d8 GIT binary patch literal 95466 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 2) then { + _newBrightness = 2; + }; +}; +_unit setVariable ["cse_sys_nightvision_brightness", _newBrightness]; + +if (_newBrightness != _currentBrightness) then { + if (_increase > 0) then { + hintSilent "Increased NVG Brightness"; + } else { + hintSilent "decreased NVG Brightness"; + }; +}; \ No newline at end of file diff --git a/TO_MERGE/cse/sys_equipment/nvg/init_sys_nightvision.sqf b/TO_MERGE/cse/sys_equipment/nvg/init_sys_nightvision.sqf new file mode 100644 index 0000000000..9df0185f27 --- /dev/null +++ b/TO_MERGE/cse/sys_equipment/nvg/init_sys_nightvision.sqf @@ -0,0 +1,51 @@ +#define PP_EFFECT_GRAIN_INTENSITVE 0.25 // 0 to 1 +#define PP_EFFECT_GRAIN_SHARPNESS 1 // 0 to 20 +#define PP_EFFECT_GRAIN_SIZE 2.5 // 1 to 8 +#define PP_EFFECT_GRAIN_INTENSITY_X0 0.2 // float, No range +#define PP_EFFECT_GRAIN_INTENSITY_X1 0.2 // float, No range +#define PP_EFFECT_GRAIN_MONOCHROMATIC false // bool + + +if (!hasInterface) exitwith {}; +CSE_SYS_NVG_GRAIN_EFFECT_DISPLAY = false; +// need to add some key handlers + + waituntil{!isnil "cse_gui" && !isnil "cse_main"}; + ["Enabling CSE NVG systems",2] call cse_fnc_debug; + _ppEffect_NVGAdjustBrightness = ppEffectCreate ["ColorCorrections", 1587]; + _ppEffect_NVGAdjustBrightness ppEffectForceInNVG true; + _ppEffect_NVGAdjustBrightness ppEffectAdjust [1, 1, 0, [0, 0, 0, 0], [0, 0, 0, 1], [0, 0, 0, 1]]; + _ppEffect_NVGAdjustBrightness ppEffectCommit 0; + + + _ppEffect_NVGAdjustEffect = ppEffectCreate ["FilmGrain", 2451]; + _ppEffect_NVGAdjustEffect ppEffectForceInNVG true; + _ppEffect_NVGAdjustEffect ppEffectAdjust [PP_EFFECT_GRAIN_INTENSITVE, PP_EFFECT_GRAIN_SHARPNESS, PP_EFFECT_GRAIN_SIZE, PP_EFFECT_GRAIN_INTENSITY_X0, PP_EFFECT_GRAIN_INTENSITY_X1, PP_EFFECT_GRAIN_MONOCHROMATIC]; + _ppEffect_NVGAdjustEffect ppEffectCommit 0; + + + // Refactor this + ["cse_sys_nightvision", [_ppEffect_NVGAdjustBrightness, _ppEffect_NVGAdjustEffect], { + _ppEffect_NVGAdjustBrightness = _this select 0; + _ppEffect_NVGAdjustEffect = _this select 1; + + if (((currentVisionMode player == 1) || (currentVisionMode (vehicle player) == 1))&& !isNull(findDisplay 46)) then { + _ppEffect_NVGAdjustBrightness ppEffectEnable true; + _newBrightness = player getvariable ["cse_sys_nightvision_brightness", 1]; + _ppEffect_NVGAdjustBrightness ppEffectAdjust [1, _newBrightness, 0, [0, 0, 0, 0], [0, 0, 0, 1], [0, 0, 0, 1]]; + _ppEffect_NVGAdjustBrightness ppEffectCommit 0; + if (CSE_SYS_NVG_GRAIN_EFFECT_DISPLAY) then { + _ppEffect_NVGAdjustEffect ppEffectEnable true; + }; + } else { + _ppEffect_NVGAdjustBrightness ppEffectEnable false; + _ppEffect_NVGAdjustEffect ppEffectEnable false; + }; + + }] call cse_fnc_addTaskToPool_f; + +["cse_sys_nightvision_grain_effect_display", ["Enable", "Disable"], (["cse_sys_nightvision_grain_effect_display", 0] call cse_fnc_getClientSideOptionFromProfile_F), { + CSE_SYS_NVG_GRAIN_EFFECT_DISPLAY = (_this select 1) == 0; +}] call cse_fnc_addClientSideOptions_f; + +["cse_sys_nightvision_grain_effect_display","option","Use Grain effect","Use grain effect for nightvision"] call cse_fnc_settingsDefineDetails_F; diff --git a/TO_MERGE/cse/sys_equipment/scripts/check_ammo_keybindings.sqf b/TO_MERGE/cse/sys_equipment/scripts/check_ammo_keybindings.sqf new file mode 100644 index 0000000000..86483ca444 --- /dev/null +++ b/TO_MERGE/cse/sys_equipment/scripts/check_ammo_keybindings.sqf @@ -0,0 +1,17 @@ +["check_current_magazine_count_eq", (["check_current_magazine_count_eq","action",[0,0,0,0]] call cse_fnc_getKeyBindingFromProfile_F), { + private ["_percentage", "_text"]; + + if (currentWeapon player != "" && currentMagazine player != "") then { + _percentage = [player] call cse_fnc_getPercentageAmmoMagazine_EQ; + _text = switch true do { + case (_percentage >= 75) : { "Heavy weight" }; + case (_percentage >= 35) : { "Medium weight" }; + case (_percentage >= 15) : { "Light weight" }; + case (_percentage >= 0 ) : { "Very light weight" }; + default { "Unknown" }; + }; + ["Magazine weight", [_text], 0] call cse_fnc_gui_displayInformation; + }; + +}] call cse_fnc_addKeyBindingForAction_F; +["check_current_magazine_count_eq","action","Check Ammo","Check your current ammo count"] call cse_fnc_settingsDefineDetails_F; \ No newline at end of file diff --git a/TO_MERGE/cse/sys_equipment/scripts/register_attachable_items_actions.sqf b/TO_MERGE/cse/sys_equipment/scripts/register_attachable_items_actions.sqf new file mode 100644 index 0000000000..c94f70758e --- /dev/null +++ b/TO_MERGE/cse/sys_equipment/scripts/register_attachable_items_actions.sqf @@ -0,0 +1,45 @@ +if (isDedicated) exitwith{}; +CSE_ICON_PATH = "cse\cse_gui\radialmenu\data\icons\"; + +cse_attachMagazinesDisplaySubMenu = { + [_this] call cse_fnc_Debug; + private ["_subMenus","_passedMags","_magsAmmo"]; + _subMenus = []; + _passedMags = []; + _magsAmmo = magazinesAmmo player; + if ([player] call cse_fnc_hasItemAttached_EQ) then { + _subMenus set [ count _subMenus, + call compile format['["Detach", getText(configFile >> "CfgMagazines" >> "%1" >> "picture"), + { + closeDialog 0; + [player,"%1",20] spawn cse_fnc_detachItem_EQ; + }, true, "Detach " + getText(configFile >> "CfgMagazines" >> "%1" >> "displayName") + ]', player getvariable ["cse_attachedItemClassName_EQ", ""]] + ]; + } else { + { + if (!((_x select 0) in _passedMags)) then { + _passedMags set [ count _passedMags, (_x select 0)]; + if ([_x select 0] call cse_fnc_isAttachableItem_EQ) then + { + _subMenus set [ count _subMenus, + call compile format['[getText(configFile >> "CfgMagazines" >> "%1" >> "displayName"), getText(configFile >> "CfgMagazines" >> "%1" >> "picture"), + { + closeDialog 0; + [player, "%1"] call cse_fnc_attachItem_EQ; + }, true, "Attach " + getText(configFile >> "CfgMagazines" >> "%1" >> "displayName") + ]',(_x select 0)] + ]; + }; + }; + }foreach _magsAmmo; + }; + + [ _this select 3, _subMenus, _this select 1, CSE_SELECTED_RADIAL_OPTION_N_GUI, true] call cse_fnc_openRadialSecondRing_GUI; +}; + + +_entries = [ + ["Attach", {(([player] call cse_fnc_hasItemAttached_EQ) || [player] call cse_fnc_hasAttachableItem_EQ)}, CSE_ICON_PATH + "icon_magazines.paa", cse_attachMagazinesDisplaySubMenu, "Attach Item(s)"] +]; +["ActionMenu","equipment", _entries ] call cse_fnc_addMultipleEntriesToRadialCategory_F; \ No newline at end of file diff --git a/TO_MERGE/cse/sys_equipment/scripts/register_magazine_repack_actions.sqf b/TO_MERGE/cse/sys_equipment/scripts/register_magazine_repack_actions.sqf new file mode 100644 index 0000000000..73b2d8ef09 --- /dev/null +++ b/TO_MERGE/cse/sys_equipment/scripts/register_magazine_repack_actions.sqf @@ -0,0 +1,59 @@ +if (isDedicated) exitwith{}; +CSE_ICON_PATH = "cse\cse_gui\radialmenu\data\icons\"; + +cse_fnc_repackableMagazineTypes = { + private ["_magazines", "_repackableMagazines", "_repackableMagazineTypes", "_className", "_magazineAmmoCount", "_magazineCapacity", "_repackableMagazinesOfTypeX", "_result"]; + _magazines = magazinesAmmo player; + _result = []; + _repackableMagazines = []; + _repackableMagazineTypes = []; + { + _className = _x select 0; + _magazineAmmoCount = _x select 1; + _magazineCapacity = getNumber(configFile >> "CfgMagazines" >> _className >> "count"); + if (_magazineCapacity - _magazineAmmoCount > 0) then { + _repackableMagazines pushBack _x; + if (!(_className in _repackableMagazineTypes)) then { + _repackableMagazineTypes pushBack _className; + }; + }; + } forEach _magazines; + + { + _magazineType = _x; + _repackableMagazinesOfTypeX = {_magazineType == (_x select 0)} count _repackableMagazines; + if (_repackableMagazinesOfTypeX > 1) then { + _result pushBack _magazineType; + }; + } forEach _repackableMagazineTypes; + + _result +}; + +cse_repackMagazinesDisplaySubMenu = { + [_this] call cse_fnc_Debug; + + private ["_subMenus", "_repackableMagazineTypes"]; + _subMenus = []; + _repackableMagazineTypes = call cse_fnc_repackableMagazineTypes; + + { + _subMenus pushBack + call compile format['[getText(configFile >> "CfgMagazines" >> "%1" >> "displayName"), getText(configFile >> "CfgMagazines" >> "%1" >> "picture"), + { + closeDialog 0; + [player,"%1",20] spawn cse_fnc_repackMagazines; + }, true, "Repack " + getText(configFile >> "CfgMagazines" >> "%1" >> "displayName") + ]', _x]; + } forEach _repackableMagazineTypes; + + [_this select 3, _subMenus, _this select 1, CSE_SELECTED_RADIAL_OPTION_N_GUI, true] call cse_fnc_openRadialSecondRing_GUI; +}; + + +_entries = [ + ["Repack", {count (call cse_fnc_repackableMagazineTypes) > 0}, CSE_ICON_PATH + "icon_magazines.paa", cse_repackMagazinesDisplaySubMenu, "Show magazines that can be repacked"] +]; +["ActionMenu","equipment", _entries ] call cse_fnc_addMultipleEntriesToRadialCategory_F; + + diff --git a/TO_MERGE/cse/sys_equipment/scripts/select_weapon_keybindings.sqf b/TO_MERGE/cse/sys_equipment/scripts/select_weapon_keybindings.sqf new file mode 100644 index 0000000000..2cb89a7c38 --- /dev/null +++ b/TO_MERGE/cse/sys_equipment/scripts/select_weapon_keybindings.sqf @@ -0,0 +1,28 @@ + +["place_Weapon_onBack", (["place_Weapon_onBack","action",[0,0,0,0]] call cse_fnc_getKeyBindingFromProfile_F), { + if (currentWeapon player != "") then { + [player] call cse_fnc_putWeaponOnBack_EQ; + }; +}] call cse_fnc_addKeyBindingForAction_F; +["place_Weapon_onBack","action","Weapon on Back","Place rifle on back or holster pistol"] call cse_fnc_settingsDefineDetails_F; + +["select_primairy_weapon", (["select_primairy_weapon","action",[0,0,0,0]] call cse_fnc_getKeyBindingFromProfile_F), { + if (primaryWeapon player != "") then { + player selectWeapon primaryWeapon player; + }; +}] call cse_fnc_addKeyBindingForAction_F; +["select_primairy_weapon","action","Select Primairy weapon","Select your primary weapon."] call cse_fnc_settingsDefineDetails_F; + +["select_secondairy_weapon", (["select_secondairy_weapon","action",[0,0,0,0]] call cse_fnc_getKeyBindingFromProfile_F), { + if (secondaryWeapon player != "") then { + player selectWeapon secondaryWeapon player; + }; +}] call cse_fnc_addKeyBindingForAction_F; +["select_secondairy_weapon","action","Select Secondairy Weapon","Select your secondairy weapon."] call cse_fnc_settingsDefineDetails_F; + +["select_handgun_weapon", (["select_handgun_weapon","action",[0,0,0,0]] call cse_fnc_getKeyBindingFromProfile_F), { + if (handgunWeapon player != "") then { + player selectWeapon handgunWeapon player; + }; +}] call cse_fnc_addKeyBindingForAction_F; +["select_handgun_weapon","action","Select handgun","Select your pistol."] call cse_fnc_settingsDefineDetails_F; diff --git a/TO_MERGE/cse/sys_equipment/stringtable.xml b/TO_MERGE/cse/sys_equipment/stringtable.xml new file mode 100644 index 0000000000..dd082b5b55 --- /dev/null +++ b/TO_MERGE/cse/sys_equipment/stringtable.xml @@ -0,0 +1,91 @@ + + + + + + + White Flare + Bengala Blanca + + + Red Flare + Bengala Roja + + + Yellow Flare + Bengala Amarilla + + + Green Flare + Bengala Verde + + + + + White Road Flare + Bengala de Carretera Blanca + + + Red Road Flare + Bengala de Carretera Roja + + + Yellow Road Flare + Bengala de Carretera Amarilla + + + Green Road Flare + Bengala de Carretera Verde + + + + + + + Rest Weapon/Deploy Bipod + Oprzyj broń / rozłóż dwójnóg + Apoyar Arma/Desplegar Bípode + + + Unrest Weapon/Undeploy Bipod + Levantar Arma/Plegar Bípode + + + Lets the player rest his weapon / deploy the bipod. This is part of the 'Weapon Rest [CSE]' module. + Pozwala graczowi oprzeć swoją broń / rozłożyć dwójnóg. Jest to część modułu 'Podpieranie broni [CSE]'. + Permite apoyar el arma / desplegar el bípode. Es parte del módulo "Weapon Rest [CSE]". + + + Lets the player unrest his weapon / undeploy the bipod. This is part of the 'Weapon Rest [CSE]' module. + Permite levantar el arma / plegar el bípode. Es parte del módulo "Weapon Rest [CSE]". + + + + + + + + + Increase NVG Brightness + Zwiększ czułość NVG + Aumentar el brillo de la Visión Nocturna + + + Allows the player to increase the NVG brightness. + Pozwala graczowi zwiększyć czułość noktowizji. + Permite al jugador aumentar el brillo de la Visión Nocturna + + + Decrease NVG Brightness + Zmniejsz czułość NVG + Disminuir el brillo de la Visión Nocturna + + + Allows the player to decrease the NVG brightness. + Pozwala graczowi zmniejszyć czułość noktowizji. + Permite al jugador disminuir el brillo de la Visión Nocturna + + + + + diff --git a/TO_MERGE/cse/sys_equipment/ui/rscTitles.h b/TO_MERGE/cse/sys_equipment/ui/rscTitles.h new file mode 100644 index 0000000000..77fe626e84 --- /dev/null +++ b/TO_MERGE/cse/sys_equipment/ui/rscTitles.h @@ -0,0 +1,51 @@ +class RscControlsGroup; +class RscText; +/* +class RscInGameUI +{ + class RscUnitInfo + { + class WeaponInfoControlsGroupLeft: RscControlsGroup + { + class controls + { + class CA_AmmoCount: RscText + { + sizeEx = 0; + }; + class CA_MagCount: RscText + { + sizeEx = 0; + }; + class GrenadeCount: RscText + { + sizeEx = 0; + }; + }; + }; + }; +};*/ +/* + class RscUnitInfo { + idd = 300; + class WeaponInfoControlsGroupLeft: RscControlsGroup + { + idc = 2302; + class controls + { + class CA_AmmoCount: RscText + { + idc = 184; + }; + class CA_MagCount: RscText + { + idc = 185; + }; + class CA_GrenadeCount: RscText + { + idc = 151; + }; + }; + }; + }; +*/ diff --git a/TO_MERGE/cse/sys_equipment/weaponresting/data/icons/icon_bipod.paa b/TO_MERGE/cse/sys_equipment/weaponresting/data/icons/icon_bipod.paa new file mode 100644 index 0000000000000000000000000000000000000000..c2b6a2fb3e1b92e0b33034dbd7dbffc855baa9e0 GIT binary patch literal 5625 zcmeGg3s6*5^gebU5tF-+Y)U{bilpV3&g7<{?%R~lIx0KGBd0CC*hd+t5= z-1EQZKAuKLTjHif$6K_7kmly*Q4F7DnSnS3Ks?$qJqmFS9>m{>ii#EB|1x;8{0PYo zAY_Aqkkjz=4g?|)0vsMNj3CzBFl(-sQbI&gG-xhLsZR3uK?N5;hQ}L5RhU-hz4}8N z>WfaC(G+-kRR_A4paaOTby8$4VAX)54|Qeh?NvFK%{XrZ0YK4oLpf z5J^E^X+=1b7Zjoq{x%etQoHN7Zdt~0758{z>y*+frQsUdv2N5Wp0f3gEmz4y@-)}ad`^`txhgQnOrn6!cLvS<_BisM-INTQ6Zk>5iE}Tj!2JTpK_*S~YeN(fDyH z{c{qf=W@CcWtMnrXQq78+{N?<^@VsMemH6Q!0|Y16D*d8t+no^dN%BGR8q;|lb@hG z9Js!qvAq!dovF(2e`xs(=Z;jCzqYtI@n(64mRF|NwWf74ZF!zweFj%zyp%wMc%8{%6dVtiO(+3HI(Wa4kNt<;AVag8Xxo>ohn z%N#P(mw>C{L$mlVDwzbnvb4L!?prp-P`|{u^Q3+4Ls?rPu< zz=bxf>pE4a#J``PAcS68y0`k;k8^PUhp#;$11?HQwHI97`4F8v1bjs&rDocEg3{nR zLY^F#2lXi|Ha86AgYtY!yx-H_%{E;v(bwa84)S4O8I{Xua{<}|^?fGm+BWmyv%_&7 zfD2{$xPt8m{Y9_s&A8mPexk_p`jZ!+Iu+3GU9dT<(;mp|D%Z=UihO4W(|kCCSY=+o4E@Rn9@UYrof;>#aQ9Q)<=0ZtGRo)8B?2OW#0Ctn1Z&(E$BoKs)9`Ash%3 zA-2juKA^w*9<KPXDj>g?z5HuGgY|BEO8!GZ^FFsRd$^Puq-ZM|D$cWb zfR{4jzh5tx(>4cUk7GOpPm+?={4+rQjcbA88=vg92V9wI=~aE8yKjaB?47m$r#2EJ zWR=GbfOuLN9J~`A`MZ=_9#hf9(hl-6Yz@@J1+uvs(-xfIe}`lFPW*5$1S33ZX!pcz zE-7_WMjDhsxMsmQL>KZfy(|)s#SL%H*3q*_jmKnuTX?uHG1qVFDjl+PpOO~W6T=8p zx8ski5sdKQJRCzee71@aGiNgL!#02XN9HA_oyxI`2k+3vPruu8FrCc<3r-iW zx9iG?9_ax*1~vk6Kl=~Ql@cT1B*67N^qE77kL($eDIaz76Mzi^BfOE{)QfONo6>8l znS4AyvcY7G{&>*WNblJkXjOXn%fJZl+sUJ8HZ63uHl4>y2y|hbca1~d|80m9udQ$m z@mxFA^?pUBvic^gg43~ zy7HUksAQ+2FDIt#-k#tra$lot*VA03=K`g~AgB~b58E52JM4R_>2U|fgVDrTvzJP* zj`SDKL%e9Md1~7xMmJq^bk{3w6YRzL7w-shW_4Afd_Ax2{k8us`h0#&KLQ4EKaPhs zWp0kAO|D(J3u z4q#ybx97OPy4myJ$(YaNfo7D`k=PaLY1y;;Rrvv121a-zfA7s1X)aR|mdEKX}I1x+y> "CfgWeapons" >> _weapon, "Rifle_Long_Base_F"] call cse_fnc_inheritsFrom; + if (_isLongRifle) then { + _leftHandBipodDistance = LEFT_HAND_BIPOD_DISTANCE_LONG_RIFLE; + }; + + _azimut = (_weaponDirection select 0) atan2 (_weaponDirection select 1); + _elevation = asin(_weaponDirection select 2); + + _bipodTop = _leftHandPosition vectorAdd (_weaponDirection vectorMultiply _leftHandBipodDistance); + _bipodBottom = _bipodTop vectorAdd [sin(_azimut) * sin(_elevation) * BIPOD_HEIGHT, cos(_azimut) * sin(_elevation) * BIPOD_HEIGHT, cos(_elevation) * -BIPOD_HEIGHT]; + + // Bipods can be deployed on ground or objects. + _canDeployBipod = [_bipodTop, _bipodBottom, 0.05] call cse_fnc_getFirstObjectIntersection; + if (_canDeployBipod select 0) exitWith {}; + _canDeployBipod = [_bipodTop, _bipodBottom, 0.05] call cse_fnc_getFirstTerrainIntersection; + if (_canDeployBipod select 0) exitWith {}; +}; + +_canDeployBipod diff --git a/TO_MERGE/cse/sys_equipment/weaponresting/functions/fn_canRestWeapon_WR.sqf b/TO_MERGE/cse/sys_equipment/weaponresting/functions/fn_canRestWeapon_WR.sqf new file mode 100644 index 0000000000..fa5c751d79 --- /dev/null +++ b/TO_MERGE/cse/sys_equipment/weaponresting/functions/fn_canRestWeapon_WR.sqf @@ -0,0 +1,60 @@ +/** + * fn_canRestWeapon_WR.sqf + * @Descr: Check if player can rest weapon. + * @Author: Glowbal, Ruthberg + * + * @Arguments: [] + * @Return: BOOL Can rest weapon. + * @PublicAPI: true + */ + + +#define ALLOWED_ANIMATION_STATES ["amovpercmstpsraswrfldnon","aadjpercmstpsraswrfldup","aadjpercmstpsraswrflddown","aadjpknlmstpsraswrfldup","amovpknlmstpsraswrfldnon","aadjpknlmstpsraswrflddown","aadjppnemstpsraswrfldup","amovppnemstpsraswrfldnon","aadjpknlmstpsraswrfldright","aadjpknlmstpsraswrfldleft","aadjpercmstpsraswrfldright","aadjpercmstpsraswrfldleft","aadjppnemstpsraswrfldright","aadjppnemstpsraswrfldleft","aadjppnemstpsraswrflddown"] +#define MAX_REST_DISTANCE_FORWARD 0.30 +#define MAX_REST_DISTANCE_LEFT 0.40 +#define MAX_REST_DISTANCE_RIGHT 0.30 +#define MAX_REST_DISTANCE_BOTTOM 0.50 +#define MAX_REST_ANGLE 45 + +private ["_weapon", "_canRestWeapon", "_playerAnimationState", "_weaponDirection", "_leftHandPosition", "_rightHandPosition"]; +_weapon = currentWeapon player; +_canRestWeapon = false; +_playerAnimationState = (([animationState player, "_"] call BIS_fnc_splitString) select 0); + +if (_weapon == primaryWeapon player && !(weaponLowered player) && _playerAnimationState in ALLOWED_ANIMATION_STATES) then { + _weaponDirection = player weaponDirection _weapon; + + _leftHandPosition = ATLtoASL (player modelToWorld (player selectionPosition "LeftHand")); + _rightHandPosition = ATLtoASL (player modelToWorld (player selectionPosition "RightHand")); + + // calculate direction for side checks. + _direction = (_weaponDirection select 0) atan2 (_weaponDirection select 1); + + // check left + if (lineIntersects [_rightHandPosition, _rightHandPosition vectorAdd [ + MAX_REST_DISTANCE_LEFT * sin ((_direction) - MAX_REST_ANGLE), + MAX_REST_DISTANCE_LEFT * cos ((_direction) - MAX_REST_ANGLE), + MAX_REST_DISTANCE_LEFT * 0.5 * (_weaponDirection select 2) + ]]) exitWith { _canRestWeapon = true }; + + // check right + if (lineIntersects [_rightHandPosition, _rightHandPosition vectorAdd [ + MAX_REST_DISTANCE_RIGHT * sin ((_direction) + MAX_REST_ANGLE), + MAX_REST_DISTANCE_RIGHT * cos ((_direction) + MAX_REST_ANGLE), + MAX_REST_DISTANCE_RIGHT * 0.5 * (_weaponDirection select 2) + ]]) exitWith { _canRestWeapon = true }; + + // check bottom (object) + if (lineIntersects [ + _rightHandPosition vectorDiff [0, 0, MAX_REST_DISTANCE_BOTTOM], + _leftHandPosition vectorDiff [0, 0, MAX_REST_DISTANCE_BOTTOM] vectorAdd (_weaponDirection vectorMultiply MAX_REST_DISTANCE_FORWARD)] + ) exitWith { _canRestWeapon = true }; + + // check bottom (ground) + if (terrainIntersectASL [ + _rightHandPosition vectorDiff [0, 0, MAX_REST_DISTANCE_BOTTOM], + _leftHandPosition vectorDiff [0, 0, MAX_REST_DISTANCE_BOTTOM] vectorAdd (_weaponDirection vectorMultiply MAX_REST_DISTANCE_FORWARD)] + ) exitWith { _canRestWeapon = true }; +}; + +_canRestWeapon diff --git a/TO_MERGE/cse/sys_equipment/weaponresting/functions/fn_deployWeapon_WR.sqf b/TO_MERGE/cse/sys_equipment/weaponresting/functions/fn_deployWeapon_WR.sqf new file mode 100644 index 0000000000..f33aab832b --- /dev/null +++ b/TO_MERGE/cse/sys_equipment/weaponresting/functions/fn_deployWeapon_WR.sqf @@ -0,0 +1,39 @@ +/** + * fn_deployWeapon_WR.sqf + * @Descr: N/A + * @Author: Ruthberg + * + * @Arguments: [pivotPosition PositionASL] + * @Return: nil + * @PublicAPI: false + */ + + +#define DEPLOYED_RECOIL 0.5 +#define CAM_SHAKE [1.0, 0.5, 6.0] + +private ["_pivotPosition", "_playerAnimationState"]; +_pivotPosition = _this; + +player setVariable ["cse_isWeaponDeployed_WR", true, false]; + +playSound "cse_weaponrest_rest"; +addCamShake CAM_SHAKE; +["cse_bipodDeployed", true, "cse\cse_sys_equipment\weaponresting\data\icons\icon_bipod.paa", [1,1,1,1]] call cse_fnc_gui_displayIcon; + +_playerAnimationState = animationState player; +player switchMove format["%1_cse_deployed", _playerAnimationState]; +player setUnitRecoilCoefficient DEPLOYED_RECOIL; + +// Watcher that undeploys if we rotate/move too much +[_pivotPosition] spawn { + private ["_pivotPosition", "_canDeployBipod"]; + _pivotPosition = _this select 0; + while {player getVariable ["cse_isWeaponDeployed_WR", false]} do { + _canDeployBipod = call cse_fnc_canDeployBipod_WR; + if !(_canDeployBipod select 0) exitWith {}; + if ((_canDeployBipod select 1) vectorDistance _pivotPosition > 0.30) exitWith {}; + sleep 0.1; + }; + call cse_fnc_undeployWeapon_WR; +}; diff --git a/TO_MERGE/cse/sys_equipment/weaponresting/functions/fn_hasBipod_WR.sqf b/TO_MERGE/cse/sys_equipment/weaponresting/functions/fn_hasBipod_WR.sqf new file mode 100644 index 0000000000..1244cad29e --- /dev/null +++ b/TO_MERGE/cse/sys_equipment/weaponresting/functions/fn_hasBipod_WR.sqf @@ -0,0 +1,17 @@ +/** + * fn_hasBipod_WR.sqf + * @Descr: Check if the current weapon has a bipod. + * @Author: Glowbal, Ruthberg + * + * @Arguments: [] + * @Return: BOOL weapon has bipod. + * @PublicAPI: true + */ + + +_cseBipod = getNumber(configFile >> "CfgWeapons" >> primaryWeapon player >> "cse_bipod") == 1; +_weaponModeBipod = ["bipod", currentWeaponMode player, false] call BIS_fnc_inString || ["bp", currentWeaponMode player, false] call BIS_fnc_inString; + +// TODO: Also check for asdg and kao bipods + +_cseBipod || _weaponModeBipod diff --git a/TO_MERGE/cse/sys_equipment/weaponresting/functions/fn_keyPressed_WR.sqf b/TO_MERGE/cse/sys_equipment/weaponresting/functions/fn_keyPressed_WR.sqf new file mode 100644 index 0000000000..f09559f08a --- /dev/null +++ b/TO_MERGE/cse/sys_equipment/weaponresting/functions/fn_keyPressed_WR.sqf @@ -0,0 +1,37 @@ +/** + * fn_keyPressed_WR.sqf + * @Descr: N/A + * @Author: Glowbal, Ruthberg + * + * @Arguments: [] + * @Return: nil + * @PublicAPI: false + */ + + +#define ALLOWED_ANIMATION_STATES ["amovpercmstpsraswrfldnon","aadjpercmstpsraswrfldup","aadjpercmstpsraswrflddown","aadjpknlmstpsraswrfldup","amovpknlmstpsraswrfldnon","aadjpknlmstpsraswrflddown","aadjppnemstpsraswrfldup","amovppnemstpsraswrfldnon","aadjpknlmstpsraswrfldright","aadjpknlmstpsraswrfldleft","aadjpercmstpsraswrfldright","aadjpercmstpsraswrfldleft","aadjppnemstpsraswrfldright","aadjppnemstpsraswrfldleft","aadjppnemstpsraswrflddown"] + +private ["_playerAnimationState", "_canDeployBipod"]; + +if (weaponLowered player) exitWith {}; +if (!([player] call cse_fnc_canInteract)) exitWith {}; +if (player getVariable ["cse_isWeaponDeployed_WR", false]) exitWith {}; + +_playerAnimationState = (([animationState player, "_"] call BIS_fnc_splitString) select 0); +if (!(_playerAnimationState in ALLOWED_ANIMATION_STATES)) exitWith {}; + +// not deployed -> try to deploy now +_canDeployBipod = call cse_fnc_canDeployBipod_WR; +if (_canDeployBipod select 0) then { + if (player getVariable ["cse_isWeaponRested_WR", false]) then { + call cse_fnc_unrestWeapon_WR; + }; + (_canDeployBipod select 1) call cse_fnc_deployWeapon_WR; +}; + +if (!(player getVariable ["cse_isWeaponRested_WR", false]) && !(player getVariable ["cse_isWeaponDeployed_WR", false])) then { + // not deployed and not rested -> try to rest now + if (call cse_fnc_canRestWeapon_WR) then { + call cse_fnc_restWeapon_WR; + }; +}; diff --git a/TO_MERGE/cse/sys_equipment/weaponresting/functions/fn_restWeapon_WR.sqf b/TO_MERGE/cse/sys_equipment/weaponresting/functions/fn_restWeapon_WR.sqf new file mode 100644 index 0000000000..153247076a --- /dev/null +++ b/TO_MERGE/cse/sys_equipment/weaponresting/functions/fn_restWeapon_WR.sqf @@ -0,0 +1,35 @@ +/** + * fn_restWeapon_WR.sqf + * @Descr: N/A + * @Author: Ruthberg + * + * @Arguments: [] + * @Return: nil + * @PublicAPI: false + */ + + +#define RESTED_RECOIL 0.8 +#define CAM_SHAKE [1.0, 0.5, 6.0] + +private ["_playerAnimationState"]; + + +player setVariable ["cse_isWeaponRested_WR", true, false]; + +playSound "cse_weaponrest_rest"; +addCamShake CAM_SHAKE; +["cse_bipodDeployed", true, "cse\cse_sys_equipment\weaponresting\data\icons\icon_bipod.paa", [1,1,1,1]] call cse_fnc_gui_displayIcon; // TODO: Make a separate icon for weapon resting + +_playerAnimationState = animationState player; +player switchMove format["%1_cse_rested", _playerAnimationState]; +player setUnitRecoilCoefficient RESTED_RECOIL; + +// Watcher that unrests if we rotate/move too much +[] spawn { + while {player getVariable ["cse_isWeaponRested_WR", false]} do { + if !(call cse_fnc_canRestWeapon_WR) exitWith {}; + sleep 0.1; + }; + call cse_fnc_unrestWeapon_WR; +}; diff --git a/TO_MERGE/cse/sys_equipment/weaponresting/functions/fn_undeployWeapon_WR.sqf b/TO_MERGE/cse/sys_equipment/weaponresting/functions/fn_undeployWeapon_WR.sqf new file mode 100644 index 0000000000..b953d49792 --- /dev/null +++ b/TO_MERGE/cse/sys_equipment/weaponresting/functions/fn_undeployWeapon_WR.sqf @@ -0,0 +1,21 @@ +/** + * fn_undeployWeapon_WR.sqf + * @Descr: N/A + * @Author: Ruthberg + * + * @Arguments: [] + * @Return: nil + * @PublicAPI: false + */ + + +private ["_playerAnimationState"]; + +_playerAnimationState = animationState player; +player switchMove (([_playerAnimationState, "_"] call BIS_fnc_splitString) select 0); +player setUnitRecoilCoefficient 1; + +player setVariable ["cse_isWeaponDeployed_WR", false, false]; + +playSound "cse_weaponrest_unrest"; +["cse_bipodDeployed", false, "cse\cse_sys_equipment\weaponresting\data\icons\icon_bipod.paa", [1,1,1,1]] call cse_fnc_gui_displayIcon; \ No newline at end of file diff --git a/TO_MERGE/cse/sys_equipment/weaponresting/functions/fn_unrestWeapon_WR.sqf b/TO_MERGE/cse/sys_equipment/weaponresting/functions/fn_unrestWeapon_WR.sqf new file mode 100644 index 0000000000..ca31eec04e --- /dev/null +++ b/TO_MERGE/cse/sys_equipment/weaponresting/functions/fn_unrestWeapon_WR.sqf @@ -0,0 +1,21 @@ +/** + * fn_unrestWeapon_WR.sqf + * @Descr: N/A + * @Author: Ruthberg + * + * @Arguments: [] + * @Return: nil + * @PublicAPI: false + */ + + +private ["_playerAnimationState"]; + +_playerAnimationState = animationState player; +player switchMove (([_playerAnimationState, "_"] call BIS_fnc_splitString) select 0); +player setUnitRecoilCoefficient 1; + +player setVariable ["cse_isWeaponRested_WR", false, false]; + +playSound "cse_weaponrest_unrest"; +["cse_bipodDeployed", false, "cse\cse_sys_equipment\weaponresting\data\icons\icon_bipod.paa", [1,1,1,1]] call cse_fnc_gui_displayIcon; \ No newline at end of file diff --git a/TO_MERGE/cse/sys_equipment/weaponresting/init_sys_weaponrest.sqf b/TO_MERGE/cse/sys_equipment/weaponresting/init_sys_weaponrest.sqf new file mode 100644 index 0000000000..7137b8cbd7 --- /dev/null +++ b/TO_MERGE/cse/sys_equipment/weaponresting/init_sys_weaponrest.sqf @@ -0,0 +1,9 @@ +if (!hasInterface) exitwith {}; +waituntil{!isnil "cse_gui" && !isnil "cse_main"}; + +waitUntil {!isNull player}; + +["cse_isWeaponRested_WR" , false, false, "wr"] call cse_fnc_defineVariable; +["cse_isWeaponDeployed_WR", false, false, "wr"] call cse_fnc_defineVariable; + +cse_sys_weaponRest = true; diff --git a/TO_MERGE/cse/sys_equipment/weaponresting/sound/weaponrest_rest.wav b/TO_MERGE/cse/sys_equipment/weaponresting/sound/weaponrest_rest.wav new file mode 100644 index 0000000000000000000000000000000000000000..fce6386425bc3dec26b8eda01649e9643549e4c8 GIT binary patch literal 19866 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 K8Xg_Z*na^jA(k)z literal 0 HcmV?d00001 diff --git a/TO_MERGE/cse/sys_equipment/weaponresting/sound/weaponrest_unrest.wav b/TO_MERGE/cse/sys_equipment/weaponresting/sound/weaponrest_unrest.wav new file mode 100644 index 0000000000000000000000000000000000000000..72518ddbbf761d6442b8d0c41a05da1c1fbbeae2 GIT binary patch literal 77354 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