mirror of
https://github.com/acemod/ACE3.git
synced 2024-08-30 18:23:18 +00:00
Port AGM_Recoil
This commit is contained in:
parent
3a44b58b5f
commit
ccc3b9d076
@ -1,366 +0,0 @@
|
|||||||
// SEE LICENSE.TXT FOR LICENSING INFORMATION
|
|
||||||
|
|
||||||
class CfgPatches {
|
|
||||||
class AGM_Recoil {
|
|
||||||
units[] = {};
|
|
||||||
weapons[] = {};
|
|
||||||
requiredVersion = 0.60;
|
|
||||||
requiredAddons[] = {AGM_Core};
|
|
||||||
version = "0.95";
|
|
||||||
versionStr = "0.95";
|
|
||||||
versionAr[] = {0,95,0};
|
|
||||||
author[] = {"KoffeinFlummi", "TaoSensai", "commy2"};
|
|
||||||
authorUrl = "https://github.com/Taosenai/tmr";
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
class CfgFunctions {
|
|
||||||
class AGM_Recoil {
|
|
||||||
class AGM_Recoil {
|
|
||||||
file = "\AGM_Recoil\functions";
|
|
||||||
class burstDispersion;
|
|
||||||
class camshake;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
class Extended_FiredBis_EventHandlers {
|
|
||||||
class CAManBase {
|
|
||||||
class AGM_Recoil_CamShake {
|
|
||||||
clientFiredBis = "if (_this select 0 == AGM_player) then {_this call AGM_Recoil_fnc_camshake; _this call AGM_Recoil_fnc_burstDispersion;};";
|
|
||||||
};
|
|
||||||
};
|
|
||||||
class Tank {
|
|
||||||
class AGM_Recoil_CamShake {
|
|
||||||
clientFiredBis = "if (_this select 0 == vehicle AGM_player) then {_this call AGM_Recoil_fnc_camshake;};";
|
|
||||||
};
|
|
||||||
};
|
|
||||||
class Car {
|
|
||||||
class AGM_Recoil_CamShake {
|
|
||||||
clientFiredBis = "if (_this select 0 == vehicle AGM_player) then {_this call AGM_Recoil_fnc_camshake;};";
|
|
||||||
};
|
|
||||||
};
|
|
||||||
class Helicopter {
|
|
||||||
class AGM_Recoil_CamShake {
|
|
||||||
clientFiredBis = "if (_this select 0 == vehicle AGM_player) then {_this call AGM_Recoil_fnc_camshake;};";
|
|
||||||
};
|
|
||||||
};
|
|
||||||
class Plane {
|
|
||||||
class AGM_Recoil_CamShake {
|
|
||||||
clientFiredBis = "if (_this select 0 == vehicle AGM_player) then {_this call AGM_Recoil_fnc_camshake;};";
|
|
||||||
};
|
|
||||||
};
|
|
||||||
class Ship_F {
|
|
||||||
class AGM_Recoil_CamShake {
|
|
||||||
clientFiredBis = "if (_this select 0 == vehicle AGM_player) then {_this call AGM_Recoil_fnc_camshake;};";
|
|
||||||
};
|
|
||||||
};
|
|
||||||
class StaticWeapon {
|
|
||||||
class AGM_Recoil_CamShake {
|
|
||||||
clientFiredBis = "if (_this select 0 == vehicle AGM_player) then {_this call AGM_Recoil_fnc_camshake;};";
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
// DOC: http://forums.bistudio.com/showthread.php?94464-explaining-the-cfgRecoils-array
|
|
||||||
class CfgRecoils {
|
|
||||||
#define KICKBACK 0.07
|
|
||||||
#define KICKBACKPRONE 0.05
|
|
||||||
|
|
||||||
#define MUZZLECLIMB 0.01
|
|
||||||
#define MUZZLERECOVERY -0.004
|
|
||||||
|
|
||||||
// BASE RECOILS
|
|
||||||
pistolBase[] = {0,0.8*KICKBACK,0.9*MUZZLECLIMB, 0.12,0,0, 0.15,0,0.9*MUZZLERECOVERY, 0.3,0,0};
|
|
||||||
subMachineGunBase[] = {0,0.5*KICKBACK,0.5*MUZZLECLIMB, 0.12,0,0, 0.15,0,0.5*MUZZLERECOVERY, 0.3,0,0};
|
|
||||||
assaultRifleBase[] = {0,1*KICKBACK,1*MUZZLECLIMB, 0.12,0,0, 0.15,0,1*MUZZLERECOVERY, 0.3,0,0};
|
|
||||||
machinegunBase[] = {0,1*KICKBACK,1*MUZZLECLIMB, 0.12,0,0, 0.15,0,1*MUZZLERECOVERY, 0.3,0,0};
|
|
||||||
launcherBase[] = {0,0,0};
|
|
||||||
|
|
||||||
// PISTOLS
|
|
||||||
recoil_pistol_light[] = {0,0.8*KICKBACK,0.9*MUZZLECLIMB, 0.12,0,0, 0.15,0,0.9*MUZZLERECOVERY, 0.3,0,0};
|
|
||||||
recoil_pistol_heavy[] = {0,1.1*KICKBACK,1.4*MUZZLECLIMB, 0.12,0,0, 0.15,0,1.4*MUZZLERECOVERY, 0.3,0,0};
|
|
||||||
recoil_prone_pistol_light[] = {0,0.8*KICKBACKPRONE,0.9*MUZZLECLIMB, 0.12,0,0, 0.15,0,0.9*MUZZLERECOVERY, 0.3,0,0};
|
|
||||||
recoil_prone_pistol_heavy[] = {0,1.1*KICKBACKPRONE,1.4*MUZZLECLIMB, 0.12,0,0, 0.15,0,1.4*MUZZLERECOVERY, 0.3,0,0};
|
|
||||||
|
|
||||||
// SUBMACHINE GUNS
|
|
||||||
recoil_single_smg_01[] = {0,0.5*KICKBACK,0.5*MUZZLECLIMB, 0.12,0,0, 0.15,0,0.5*MUZZLERECOVERY, 0.3,0,0};
|
|
||||||
recoil_burst_smg_01[] = {0,0.5*KICKBACK,0.5*MUZZLECLIMB, 0.12,0,0, 0.15,0,0.5*MUZZLERECOVERY, 0.3,0,0};
|
|
||||||
recoil_auto_smg_01[] = {0,0.5*KICKBACK,0.5*MUZZLECLIMB, 0.12,0,0, 0.15,0,0.5*MUZZLERECOVERY, 0.3,0,0};
|
|
||||||
recoil_single_prone_smg_01[] = {0,0.5*KICKBACKPRONE,0.5*MUZZLECLIMB, 0.12,0,0, 0.15,0,0.5*MUZZLERECOVERY, 0.3,0,0};
|
|
||||||
recoil_burst_prone_smg_01[] = {0,0.5*KICKBACKPRONE,0.5*MUZZLECLIMB, 0.12,0,0, 0.15,0,0.5*MUZZLERECOVERY, 0.3,0,0};
|
|
||||||
recoil_auto_prone_smg_01[] = {0,0.5*KICKBACKPRONE,0.5*MUZZLECLIMB, 0.12,0,0, 0.15,0,0.5*MUZZLERECOVERY, 0.3,0,0};
|
|
||||||
|
|
||||||
recoil_single_smg_02[] = {0,0.5*KICKBACK,0.5*MUZZLECLIMB, 0.12,0,0, 0.15,0,0.5*MUZZLERECOVERY, 0.3,0,0};
|
|
||||||
recoil_burst_smg_02[] = {0,0.5*KICKBACK,0.5*MUZZLECLIMB, 0.12,0,0, 0.15,0,0.5*MUZZLERECOVERY, 0.3,0,0};
|
|
||||||
recoil_auto_smg_02[] = {0,0.5*KICKBACK,0.5*MUZZLECLIMB, 0.12,0,0, 0.15,0,0.5*MUZZLERECOVERY, 0.3,0,0};
|
|
||||||
recoil_single_prone_smg_02[] = {0,0.5*KICKBACKPRONE,0.5*MUZZLECLIMB, 0.12,0,0, 0.15,0,0.5*MUZZLERECOVERY, 0.3,0,0};
|
|
||||||
recoil_burst_prone_smg_02[] = {0,0.5*KICKBACKPRONE,0.5*MUZZLECLIMB, 0.12,0,0, 0.15,0,0.5*MUZZLERECOVERY, 0.3,0,0};
|
|
||||||
recoil_auto_prone_smg_02[] = {0,0.5*KICKBACKPRONE,0.5*MUZZLECLIMB, 0.12,0,0, 0.15,0,0.5*MUZZLERECOVERY, 0.3,0,0};
|
|
||||||
|
|
||||||
recoil_single_pdw[] = {0,0.5*KICKBACK,0.5*MUZZLECLIMB, 0.12,0,0, 0.15,0,0.5*MUZZLERECOVERY, 0.3,0,0};
|
|
||||||
recoil_burst_pdw[] = {0,0.5*KICKBACK,0.5*MUZZLECLIMB, 0.12,0,0, 0.15,0,0.5*MUZZLERECOVERY, 0.3,0,0};
|
|
||||||
recoil_auto_pdw[] = {0,0.5*KICKBACK,0.5*MUZZLECLIMB, 0.12,0,0, 0.15,0,0.5*MUZZLERECOVERY, 0.3,0,0};
|
|
||||||
recoil_single_prone_pdw[] = {0,0.5*KICKBACKPRONE,0.5*MUZZLECLIMB, 0.12,0,0, 0.15,0,0.5*MUZZLERECOVERY, 0.3,0,0};
|
|
||||||
recoil_burst_prone_pdw[] = {0,0.5*KICKBACKPRONE,0.5*MUZZLECLIMB, 0.12,0,0, 0.15,0,0.5*MUZZLERECOVERY, 0.3,0,0};
|
|
||||||
recoil_auto_prone_pdw[] = {0,0.5*KICKBACKPRONE,0.5*MUZZLECLIMB, 0.12,0,0, 0.15,0,0.5*MUZZLERECOVERY, 0.3,0,0};
|
|
||||||
|
|
||||||
// ASSAULT RIFLES
|
|
||||||
recoil_single_mx[] = {0,1*KICKBACK,1*MUZZLECLIMB, 0.12,0,0, 0.15,0,1*MUZZLERECOVERY, 0.3,0,0};
|
|
||||||
recoil_auto_mx[] = {0,1*KICKBACK,1*MUZZLECLIMB, 0.12,0,0, 0.15,0,1*MUZZLERECOVERY, 0.3,0,0};
|
|
||||||
recoil_single_prone_mx[] = {0,1*KICKBACKPRONE,1*MUZZLECLIMB, 0.12,0,0, 0.15,0,1*MUZZLERECOVERY, 0.3,0,0};
|
|
||||||
recoil_auto_prone_mx[] = {0,1*KICKBACKPRONE,1*MUZZLECLIMB, 0.12,0,0, 0.15,0,1*MUZZLERECOVERY, 0.3,0,0};
|
|
||||||
|
|
||||||
recoil_single_ktb[] = {0,1*KICKBACK,1*MUZZLECLIMB, 0.12,0,0, 0.15,0,1*MUZZLERECOVERY, 0.3,0,0};
|
|
||||||
recoil_auto_ktb[] = {0,1*KICKBACK,1*MUZZLECLIMB, 0.12,0,0, 0.15,0,1*MUZZLERECOVERY, 0.3,0,0};
|
|
||||||
recoil_single_prone_ktb[] = {0,1*KICKBACKPRONE,1*MUZZLECLIMB, 0.12,0,0, 0.15,0,1*MUZZLERECOVERY, 0.3,0,0};
|
|
||||||
recoil_auto_prone_ktb[] = {0,1*KICKBACKPRONE,1*MUZZLECLIMB, 0.12,0,0, 0.15,0,1*MUZZLERECOVERY, 0.3,0,0};
|
|
||||||
|
|
||||||
recoil_single_mk20[] = {0,0.8*KICKBACK,0.8*MUZZLECLIMB, 0.12,0,0, 0.15,0,0.8*MUZZLERECOVERY, 0.3,0,0};
|
|
||||||
recoil_auto_mk20[] = {0,0.8*KICKBACK,0.8*MUZZLECLIMB, 0.12,0,0, 0.15,0,0.8*MUZZLERECOVERY, 0.3,0,0};
|
|
||||||
recoil_single_prone_mk20[] = {0,0.8*KICKBACKPRONE,0.8*MUZZLECLIMB, 0.12,0,0, 0.15,0,0.8*MUZZLERECOVERY, 0.3,0,0};
|
|
||||||
recoil_auto_prone_mk20[] = {0,0.8*KICKBACKPRONE,0.8*MUZZLECLIMB, 0.12,0,0, 0.15,0,0.8*MUZZLERECOVERY, 0.3,0,0};
|
|
||||||
|
|
||||||
recoil_single_trg[] = {0,0.8*KICKBACK,0.8*MUZZLECLIMB, 0.12,0,0, 0.15,0,0.8*MUZZLERECOVERY, 0.3,0,0};
|
|
||||||
recoil_auto_trg[] = {0,0.8*KICKBACK,0.8*MUZZLECLIMB, 0.12,0,0, 0.15,0,0.8*MUZZLERECOVERY, 0.3,0,0};
|
|
||||||
recoil_single_prone_trg[] = {0,0.8*KICKBACKPRONE,0.8*MUZZLECLIMB, 0.12,0,0, 0.15,0,0.8*MUZZLERECOVERY, 0.3,0,0};
|
|
||||||
recoil_auto_prone_trg[] = {0,0.8*KICKBACKPRONE,0.8*MUZZLECLIMB, 0.12,0,0, 0.15,0,0.8*MUZZLERECOVERY, 0.3,0,0};
|
|
||||||
|
|
||||||
recoil_single_sdar[] = {0,0.8*KICKBACK,0.8*MUZZLECLIMB, 0.12,0,0, 0.15,0,0.8*MUZZLERECOVERY, 0.3,0,0};
|
|
||||||
recoil_auto_sdar[] = {0,0.8*KICKBACK,0.8*MUZZLECLIMB, 0.12,0,0, 0.15,0,0.8*MUZZLERECOVERY, 0.3,0,0};
|
|
||||||
recoil_single_prone_sdar[] = {0,0.8*KICKBACKPRONE,0.8*MUZZLECLIMB, 0.12,0,0, 0.15,0,0.8*MUZZLERECOVERY, 0.3,0,0};
|
|
||||||
recoil_auto_prone_sdar[] = {0,0.8*KICKBACKPRONE,0.8*MUZZLECLIMB, 0.12,0,0, 0.15,0,0.8*MUZZLERECOVERY, 0.3,0,0};
|
|
||||||
|
|
||||||
// MACHINE GUNS
|
|
||||||
recoil_single_mk200[] = {0,1*KICKBACK,1*MUZZLECLIMB, 0.12,0,0, 0.15,0,1*MUZZLERECOVERY, 0.3,0,0};
|
|
||||||
recoil_auto_mk200[] = {0,1*KICKBACK,1*MUZZLECLIMB, 0.12,0,0, 0.15,0,1*MUZZLERECOVERY, 0.3,0,0};
|
|
||||||
recoil_single_prone_mk200[] = {0,1*KICKBACKPRONE,1*MUZZLECLIMB, 0.12,0,0, 0.15,0,1*MUZZLERECOVERY, 0.3,0,0};
|
|
||||||
recoil_auto_prone_mk200[] = {0,1*KICKBACKPRONE,1*MUZZLECLIMB, 0.12,0,0, 0.15,0,1*MUZZLERECOVERY, 0.3,0,0};
|
|
||||||
|
|
||||||
recoil_single_zafir[] = {0,1.5*KICKBACK,1.5*MUZZLECLIMB, 0.12,0,0, 0.15,0,1.5*MUZZLERECOVERY, 0.3,0,0};
|
|
||||||
recoil_auto_zafir[] = {0,1.5*KICKBACK,1.5*MUZZLECLIMB, 0.12,0,0, 0.15,0,1.5*MUZZLERECOVERY, 0.3,0,0};
|
|
||||||
recoil_single_prone_zafir[] = {0,1.5*KICKBACKPRONE,1.5*MUZZLECLIMB, 0.12,0,0, 0.15,0,1.5*MUZZLERECOVERY, 0.3,0,0};
|
|
||||||
recoil_auto_prone_zafir[] = {0,1.5*KICKBACKPRONE,1.5*MUZZLECLIMB, 0.12,0,0, 0.15,0,1.5*MUZZLERECOVERY, 0.3,0,0};
|
|
||||||
|
|
||||||
// PRECISION RIFLES
|
|
||||||
recoil_single_dmr[] = {0,1.5*KICKBACK,1.5*MUZZLECLIMB, 0.12,0,0, 0.15,0,1.5*MUZZLERECOVERY, 0.3,0,0};
|
|
||||||
recoil_auto_dmr[] = {0,1.5*KICKBACK,1.5*MUZZLECLIMB, 0.12,0,0, 0.15,0,1.5*MUZZLERECOVERY, 0.3,0,0};
|
|
||||||
recoil_single_prone_dmr[] = {0,1.5*KICKBACKPRONE,1.5*MUZZLECLIMB, 0.12,0,0, 0.15,0,1.5*MUZZLERECOVERY, 0.3,0,0};
|
|
||||||
recoil_auto_prone_dmr[] = {0,1.5*KICKBACKPRONE,1.5*MUZZLECLIMB, 0.12,0,0, 0.15,0,1.5*MUZZLERECOVERY, 0.3,0,0};
|
|
||||||
|
|
||||||
recoil_single_ebr[] = {0,1.5*KICKBACK,1.5*MUZZLECLIMB, 0.12,0,0, 0.15,0,1.5*MUZZLERECOVERY, 0.3,0,0};
|
|
||||||
recoil_auto_ebr[] = {0,1.5*KICKBACK,1.5*MUZZLECLIMB, 0.12,0,0, 0.15,0,1.5*MUZZLERECOVERY, 0.3,0,0};
|
|
||||||
recoil_single_prone_ebr[] = {0,1.5*KICKBACKPRONE,1.5*MUZZLECLIMB, 0.12,0,0, 0.15,0,1.5*MUZZLERECOVERY, 0.3,0,0};
|
|
||||||
recoil_auto_prone_ebr[] = {0,1.5*KICKBACKPRONE,1.5*MUZZLECLIMB, 0.12,0,0, 0.15,0,1.5*MUZZLERECOVERY, 0.3,0,0};
|
|
||||||
|
|
||||||
recoil_single_gm6[] = {0,2.5*KICKBACK,2.5*MUZZLECLIMB, 0.12,0,0, 0.15,0,2.5*MUZZLERECOVERY, 0.3,0,0};
|
|
||||||
recoil_single_prone_gm6[] = {0,2.5*KICKBACKPRONE,2.5*MUZZLECLIMB, 0.12,0,0, 0.15,0,2.5*MUZZLERECOVERY, 0.3,0,0};
|
|
||||||
|
|
||||||
// LAUNCHERS
|
|
||||||
recoil_single_law[] = {0,0,0};
|
|
||||||
recoil_single_nlaw[] = {0,0,0};
|
|
||||||
recoil_single_titan[] = {0,0,0};
|
|
||||||
};
|
|
||||||
|
|
||||||
class CfgCameraShake {
|
|
||||||
// What does this do, really? It seems like the engine no longer respects it.
|
|
||||||
defaultCaliberCoefWeaponFire = 0;
|
|
||||||
};
|
|
||||||
|
|
||||||
// Completely disable BI's camshake on fire.
|
|
||||||
#define AGM_CAMSHAKEFIRE_BASE 0
|
|
||||||
#define AGM_CAMSHAKEFIRE_LESS 0
|
|
||||||
#define AGM_CAMSHAKEFIRE_MORE 0
|
|
||||||
|
|
||||||
// Go through all modes that have a camshakefire defined and change it to ours.
|
|
||||||
class CfgMovesBasic {
|
|
||||||
class Default {
|
|
||||||
camShakeFire = AGM_CAMSHAKEFIRE_BASE;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
class CfgMovesMaleSdr : CfgMovesBasic {
|
|
||||||
class States {
|
|
||||||
class AmovPercMstpSlowWrflDnon;
|
|
||||||
class AmovPknlMstpSlowWrflDnon : AmovPercMstpSlowWrflDnon {
|
|
||||||
camShakeFire = AGM_CAMSHAKEFIRE_LESS;
|
|
||||||
};
|
|
||||||
class AmovPercMstpSrasWrflDnon;
|
|
||||||
class AmovPpneMstpSrasWrflDnon : AmovPercMstpSrasWrflDnon {
|
|
||||||
camShakeFire = AGM_CAMSHAKEFIRE_LESS;
|
|
||||||
};
|
|
||||||
class AmovPknlMstpSrasWlnrDnon : Default {
|
|
||||||
camShakeFire = AGM_CAMSHAKEFIRE_LESS;
|
|
||||||
};
|
|
||||||
class AmovPknlMrunSlowWrflDf;
|
|
||||||
class AmovPknlMtacSlowWrflDf : AmovPknlMrunSlowWrflDf {
|
|
||||||
camShakeFire = AGM_CAMSHAKEFIRE_MORE;
|
|
||||||
};
|
|
||||||
class AmovPknlMrunSlowWrflDfl;
|
|
||||||
class AmovPknlMtacSlowWrflDfl : AmovPknlMrunSlowWrflDfl {
|
|
||||||
camShakeFire = AGM_CAMSHAKEFIRE_MORE;
|
|
||||||
};
|
|
||||||
class AmovPknlMrunSlowWrflDl;
|
|
||||||
class AmovPknlMtacSlowWrflDl : AmovPknlMrunSlowWrflDl {
|
|
||||||
camShakeFire = AGM_CAMSHAKEFIRE_MORE;
|
|
||||||
};
|
|
||||||
class AmovPknlMrunSlowWrflDbl;
|
|
||||||
class AmovPknlMtacSlowWrflDbl : AmovPknlMrunSlowWrflDbl {
|
|
||||||
camShakeFire = AGM_CAMSHAKEFIRE_MORE;
|
|
||||||
};
|
|
||||||
class AmovPknlMrunSlowWrflDb;
|
|
||||||
class AmovPknlMtacSlowWrflDb : AmovPknlMrunSlowWrflDb {
|
|
||||||
camShakeFire = AGM_CAMSHAKEFIRE_MORE;
|
|
||||||
};
|
|
||||||
class AmovPknlMrunSlowWrflDbr;
|
|
||||||
class AmovPknlMtacSlowWrflDbr : AmovPknlMrunSlowWrflDbr {
|
|
||||||
camShakeFire = AGM_CAMSHAKEFIRE_MORE;
|
|
||||||
};
|
|
||||||
class AmovPknlMrunSlowWrflDr;
|
|
||||||
class AmovPknlMtacSlowWrflDr : AmovPknlMrunSlowWrflDr {
|
|
||||||
camShakeFire = AGM_CAMSHAKEFIRE_MORE;
|
|
||||||
};
|
|
||||||
class AmovPknlMrunSlowWrflDfr;
|
|
||||||
class AmovPknlMtacSlowWrflDfr : AmovPknlMrunSlowWrflDfr {
|
|
||||||
camShakeFire = AGM_CAMSHAKEFIRE_MORE;
|
|
||||||
};
|
|
||||||
class AmovPknlMstpSrasWrflDnon;
|
|
||||||
class AmovPknlMwlkSrasWrflDf : AmovPknlMstpSrasWrflDnon {
|
|
||||||
camShakeFire = AGM_CAMSHAKEFIRE_BASE;
|
|
||||||
};
|
|
||||||
class AmovPknlMrunSrasWrflDf;
|
|
||||||
class AmovPknlMtacSrasWrflDf : AmovPknlMrunSrasWrflDf {
|
|
||||||
camShakeFire = AGM_CAMSHAKEFIRE_MORE;
|
|
||||||
};
|
|
||||||
class AmovPknlMwlkSrasWpstDf;
|
|
||||||
class AmovPknlMtacSrasWpstDf : AmovPknlMwlkSrasWpstDf {
|
|
||||||
camShakeFire = AGM_CAMSHAKEFIRE_MORE;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
// Ammo
|
|
||||||
class CfgAmmo {
|
|
||||||
class MissileCore;
|
|
||||||
class MissileBase: MissileCore {
|
|
||||||
AGM_Recoil_shakeMultiplier = 2;
|
|
||||||
};
|
|
||||||
|
|
||||||
class BombCore;
|
|
||||||
class LaserBombCore: BombCore {
|
|
||||||
AGM_Recoil_shakeMultiplier = 2;
|
|
||||||
};
|
|
||||||
class Bo_Mk82: BombCore {
|
|
||||||
AGM_Recoil_shakeMultiplier = 2;
|
|
||||||
};
|
|
||||||
|
|
||||||
class RocketCore;
|
|
||||||
class ArtilleryRocketCore: RocketCore {
|
|
||||||
AGM_Recoil_shakeMultiplier = 1.4;
|
|
||||||
};
|
|
||||||
class RocketBase: RocketCore {
|
|
||||||
AGM_Recoil_shakeMultiplier = 1.4;
|
|
||||||
};
|
|
||||||
|
|
||||||
class BulletCore;
|
|
||||||
class BulletBase: BulletCore {
|
|
||||||
AGM_Recoil_shakeMultiplier = 1;
|
|
||||||
};
|
|
||||||
|
|
||||||
class ShotgunCore;
|
|
||||||
class ShotgunBase: ShotgunCore {
|
|
||||||
AGM_Recoil_shakeMultiplier = 1.1;
|
|
||||||
};
|
|
||||||
|
|
||||||
class ShellCore;
|
|
||||||
class ShellBase: ShellCore {
|
|
||||||
AGM_Recoil_shakeMultiplier = 3;
|
|
||||||
};
|
|
||||||
|
|
||||||
class SubmunitionCore;
|
|
||||||
class SubmunitionBase: SubmunitionCore {
|
|
||||||
AGM_Recoil_shakeMultiplier = 3;
|
|
||||||
};
|
|
||||||
|
|
||||||
class ShotDeployCore;
|
|
||||||
class ShotDeployBase: ShotDeployCore {
|
|
||||||
AGM_Recoil_shakeMultiplier = 3;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
// Weapons
|
|
||||||
// 1. Set the recoil profiles for all fire modes.
|
|
||||||
// 2. Set the shake multiplier. This determines the camshake for the weapon.
|
|
||||||
// Ex: agm_recoil_shakeMultiplier = 1;
|
|
||||||
|
|
||||||
// disabled currently
|
|
||||||
#define SHAKEMULTIPLIER_BASE 0
|
|
||||||
|
|
||||||
class CfgWeapons {
|
|
||||||
class CannonCore;
|
|
||||||
class autocannon_Base_F: CannonCore {
|
|
||||||
agm_recoil_shakeMultiplier = SHAKEMULTIPLIER_BASE;
|
|
||||||
};
|
|
||||||
class autocannon_35mm: CannonCore {
|
|
||||||
agm_recoil_shakeMultiplier = SHAKEMULTIPLIER_BASE;
|
|
||||||
};
|
|
||||||
class cannon_120mm: CannonCore {
|
|
||||||
agm_recoil_shakeMultiplier = SHAKEMULTIPLIER_BASE;
|
|
||||||
};
|
|
||||||
class mortar_155mm_AMOS: CannonCore {
|
|
||||||
agm_recoil_shakeMultiplier = SHAKEMULTIPLIER_BASE;
|
|
||||||
};
|
|
||||||
class mortar_82mm: CannonCore {
|
|
||||||
agm_recoil_shakeMultiplier = SHAKEMULTIPLIER_BASE;
|
|
||||||
};
|
|
||||||
|
|
||||||
// No camshake for gatlings
|
|
||||||
class gatling_20mm: CannonCore {
|
|
||||||
agm_recoil_shakeMultiplier = 0;
|
|
||||||
};
|
|
||||||
class gatling_25mm: CannonCore {
|
|
||||||
agm_recoil_shakeMultiplier = 0;
|
|
||||||
};
|
|
||||||
class gatling_30mm: CannonCore {
|
|
||||||
agm_recoil_shakeMultiplier = 0;
|
|
||||||
};
|
|
||||||
|
|
||||||
class MGunCore;
|
|
||||||
class MGun: MGunCore {
|
|
||||||
agm_recoil_shakeMultiplier = SHAKEMULTIPLIER_BASE;
|
|
||||||
};
|
|
||||||
// No camshake for smoke launchers
|
|
||||||
class SmokeLauncher: MGun {
|
|
||||||
agm_recoil_shakeMultiplier = 0;
|
|
||||||
};
|
|
||||||
|
|
||||||
// No camshake for coax machine guns
|
|
||||||
class LMG_RCWS;
|
|
||||||
class LMG_M200: LMG_RCWS {
|
|
||||||
agm_recoil_shakeMultiplier = 0;
|
|
||||||
};
|
|
||||||
class LMG_coax: LMG_RCWS {
|
|
||||||
agm_recoil_shakeMultiplier = 0;
|
|
||||||
};
|
|
||||||
class LMG_Minigun: LMG_RCWS {
|
|
||||||
agm_recoil_shakeMultiplier = 0;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
// Vehicles
|
|
||||||
class CfgVehicles {
|
|
||||||
class LandVehicle;
|
|
||||||
class Tank: LandVehicle {
|
|
||||||
AGM_enableCamshake = 1;
|
|
||||||
};
|
|
||||||
class Car: LandVehicle {
|
|
||||||
AGM_enableCamshake = 1;
|
|
||||||
};
|
|
||||||
class StaticWeapon: LandVehicle {
|
|
||||||
AGM_enableCamshake = 1;
|
|
||||||
};
|
|
||||||
|
|
||||||
class Allvehicles;
|
|
||||||
class Air: Allvehicles {
|
|
||||||
AGM_enableCamshake = 1;
|
|
||||||
};
|
|
||||||
};
|
|
1
addons/recoil/$PBOPREFIX$
Normal file
1
addons/recoil/$PBOPREFIX$
Normal file
@ -0,0 +1 @@
|
|||||||
|
z\ace\addons\recoil
|
43
addons/recoil/CfgEventHandlers.hpp
Normal file
43
addons/recoil/CfgEventHandlers.hpp
Normal file
@ -0,0 +1,43 @@
|
|||||||
|
class Extended_PreInit_EventHandlers {
|
||||||
|
class ADDON {
|
||||||
|
init = QUOTE(call COMPILE_FILE(XEH_preInit) );
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
class Extended_FiredBis_EventHandlers {
|
||||||
|
class CAManBase {
|
||||||
|
class ADDON {
|
||||||
|
clientFiredBis = QUOTE(if (_this select 0 == ACE_player) then {_this call FUNC(camShake); _this call FUNC(burstDispersion);};);
|
||||||
|
};
|
||||||
|
};
|
||||||
|
class Tank {
|
||||||
|
class ADDON {
|
||||||
|
clientFiredBis = QUOTE(if (_this select 0 == vehicle ACE_player) then {_this call FUNC(camShake);};);
|
||||||
|
};
|
||||||
|
};
|
||||||
|
class Car {
|
||||||
|
class ADDON {
|
||||||
|
clientFiredBis = QUOTE(if (_this select 0 == vehicle ACE_player) then {_this call FUNC(camShake);};);
|
||||||
|
};
|
||||||
|
};
|
||||||
|
class Helicopter {
|
||||||
|
class ADDON {
|
||||||
|
clientFiredBis = QUOTE(if (_this select 0 == vehicle ACE_player) then {_this call FUNC(camShake);};);
|
||||||
|
};
|
||||||
|
};
|
||||||
|
class Plane {
|
||||||
|
class ADDON {
|
||||||
|
clientFiredBis = QUOTE(if (_this select 0 == vehicle ACE_player) then {_this call FUNC(camShake);};);
|
||||||
|
};
|
||||||
|
};
|
||||||
|
class Ship_F {
|
||||||
|
class ADDON {
|
||||||
|
clientFiredBis = QUOTE(if (_this select 0 == vehicle ACE_player) then {_this call FUNC(camShake);};);
|
||||||
|
};
|
||||||
|
};
|
||||||
|
class StaticWeapon {
|
||||||
|
class ADDON {
|
||||||
|
clientFiredBis = QUOTE(if (_this select 0 == vehicle ACE_player) then {_this call FUNC(camShake);};);
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
4
addons/recoil/XEH_preInit.sqf
Normal file
4
addons/recoil/XEH_preInit.sqf
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
#include "script_component.hpp"
|
||||||
|
|
||||||
|
PREP(burstDispersion);
|
||||||
|
PREP(camShake);
|
312
addons/recoil/config.cpp
Normal file
312
addons/recoil/config.cpp
Normal file
@ -0,0 +1,312 @@
|
|||||||
|
#include "script_component.hpp"
|
||||||
|
|
||||||
|
class CfgPatches {
|
||||||
|
class ADDON {
|
||||||
|
units[] = {};
|
||||||
|
weapons[] = {};
|
||||||
|
requiredVersion = 0.60;
|
||||||
|
requiredAddons[] = {ace_common};
|
||||||
|
version = QUOTE(VERSION);
|
||||||
|
versionStr = QUOTE(VERSION);
|
||||||
|
versionAr[] = {VERSION_AR};
|
||||||
|
author[] = {"KoffeinFlummi", "TaoSensai", "commy2"};
|
||||||
|
authorUrl = "https://github.com/Taosenai/tmr";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
#include "CfgEventHandlers.hpp"
|
||||||
|
|
||||||
|
// DOC: http://forums.bistudio.com/showthread.php?94464-explaining-the-cfgRecoils-array
|
||||||
|
class CfgRecoils {
|
||||||
|
#define KICKBACK 0.07
|
||||||
|
#define KICKBACKPRONE 0.05
|
||||||
|
|
||||||
|
#define MUZZLECLIMB 0.01
|
||||||
|
#define MUZZLERECOVERY -0.004
|
||||||
|
|
||||||
|
// BASE RECOILS
|
||||||
|
pistolBase[] = {0,0.8*KICKBACK,0.9*MUZZLECLIMB, 0.12,0,0, 0.15,0,0.9*MUZZLERECOVERY, 0.3,0,0};
|
||||||
|
subMachineGunBase[] = {0,0.5*KICKBACK,0.5*MUZZLECLIMB, 0.12,0,0, 0.15,0,0.5*MUZZLERECOVERY, 0.3,0,0};
|
||||||
|
assaultRifleBase[] = {0,1*KICKBACK,1*MUZZLECLIMB, 0.12,0,0, 0.15,0,1*MUZZLERECOVERY, 0.3,0,0};
|
||||||
|
machinegunBase[] = {0,1*KICKBACK,1*MUZZLECLIMB, 0.12,0,0, 0.15,0,1*MUZZLERECOVERY, 0.3,0,0};
|
||||||
|
launcherBase[] = {0,0,0};
|
||||||
|
|
||||||
|
// PISTOLS
|
||||||
|
recoil_pistol_light[] = {0,0.8*KICKBACK,0.9*MUZZLECLIMB, 0.12,0,0, 0.15,0,0.9*MUZZLERECOVERY, 0.3,0,0};
|
||||||
|
recoil_pistol_heavy[] = {0,1.1*KICKBACK,1.4*MUZZLECLIMB, 0.12,0,0, 0.15,0,1.4*MUZZLERECOVERY, 0.3,0,0};
|
||||||
|
recoil_prone_pistol_light[] = {0,0.8*KICKBACKPRONE,0.9*MUZZLECLIMB, 0.12,0,0, 0.15,0,0.9*MUZZLERECOVERY, 0.3,0,0};
|
||||||
|
recoil_prone_pistol_heavy[] = {0,1.1*KICKBACKPRONE,1.4*MUZZLECLIMB, 0.12,0,0, 0.15,0,1.4*MUZZLERECOVERY, 0.3,0,0};
|
||||||
|
|
||||||
|
// SUBMACHINE GUNS
|
||||||
|
recoil_single_smg_01[] = {0,0.5*KICKBACK,0.5*MUZZLECLIMB, 0.12,0,0, 0.15,0,0.5*MUZZLERECOVERY, 0.3,0,0};
|
||||||
|
recoil_burst_smg_01[] = {0,0.5*KICKBACK,0.5*MUZZLECLIMB, 0.12,0,0, 0.15,0,0.5*MUZZLERECOVERY, 0.3,0,0};
|
||||||
|
recoil_auto_smg_01[] = {0,0.5*KICKBACK,0.5*MUZZLECLIMB, 0.12,0,0, 0.15,0,0.5*MUZZLERECOVERY, 0.3,0,0};
|
||||||
|
recoil_single_prone_smg_01[] = {0,0.5*KICKBACKPRONE,0.5*MUZZLECLIMB, 0.12,0,0, 0.15,0,0.5*MUZZLERECOVERY, 0.3,0,0};
|
||||||
|
recoil_burst_prone_smg_01[] = {0,0.5*KICKBACKPRONE,0.5*MUZZLECLIMB, 0.12,0,0, 0.15,0,0.5*MUZZLERECOVERY, 0.3,0,0};
|
||||||
|
recoil_auto_prone_smg_01[] = {0,0.5*KICKBACKPRONE,0.5*MUZZLECLIMB, 0.12,0,0, 0.15,0,0.5*MUZZLERECOVERY, 0.3,0,0};
|
||||||
|
|
||||||
|
recoil_single_smg_02[] = {0,0.5*KICKBACK,0.5*MUZZLECLIMB, 0.12,0,0, 0.15,0,0.5*MUZZLERECOVERY, 0.3,0,0};
|
||||||
|
recoil_burst_smg_02[] = {0,0.5*KICKBACK,0.5*MUZZLECLIMB, 0.12,0,0, 0.15,0,0.5*MUZZLERECOVERY, 0.3,0,0};
|
||||||
|
recoil_auto_smg_02[] = {0,0.5*KICKBACK,0.5*MUZZLECLIMB, 0.12,0,0, 0.15,0,0.5*MUZZLERECOVERY, 0.3,0,0};
|
||||||
|
recoil_single_prone_smg_02[] = {0,0.5*KICKBACKPRONE,0.5*MUZZLECLIMB, 0.12,0,0, 0.15,0,0.5*MUZZLERECOVERY, 0.3,0,0};
|
||||||
|
recoil_burst_prone_smg_02[] = {0,0.5*KICKBACKPRONE,0.5*MUZZLECLIMB, 0.12,0,0, 0.15,0,0.5*MUZZLERECOVERY, 0.3,0,0};
|
||||||
|
recoil_auto_prone_smg_02[] = {0,0.5*KICKBACKPRONE,0.5*MUZZLECLIMB, 0.12,0,0, 0.15,0,0.5*MUZZLERECOVERY, 0.3,0,0};
|
||||||
|
|
||||||
|
recoil_single_pdw[] = {0,0.5*KICKBACK,0.5*MUZZLECLIMB, 0.12,0,0, 0.15,0,0.5*MUZZLERECOVERY, 0.3,0,0};
|
||||||
|
recoil_burst_pdw[] = {0,0.5*KICKBACK,0.5*MUZZLECLIMB, 0.12,0,0, 0.15,0,0.5*MUZZLERECOVERY, 0.3,0,0};
|
||||||
|
recoil_auto_pdw[] = {0,0.5*KICKBACK,0.5*MUZZLECLIMB, 0.12,0,0, 0.15,0,0.5*MUZZLERECOVERY, 0.3,0,0};
|
||||||
|
recoil_single_prone_pdw[] = {0,0.5*KICKBACKPRONE,0.5*MUZZLECLIMB, 0.12,0,0, 0.15,0,0.5*MUZZLERECOVERY, 0.3,0,0};
|
||||||
|
recoil_burst_prone_pdw[] = {0,0.5*KICKBACKPRONE,0.5*MUZZLECLIMB, 0.12,0,0, 0.15,0,0.5*MUZZLERECOVERY, 0.3,0,0};
|
||||||
|
recoil_auto_prone_pdw[] = {0,0.5*KICKBACKPRONE,0.5*MUZZLECLIMB, 0.12,0,0, 0.15,0,0.5*MUZZLERECOVERY, 0.3,0,0};
|
||||||
|
|
||||||
|
// ASSAULT RIFLES
|
||||||
|
recoil_single_mx[] = {0,1*KICKBACK,1*MUZZLECLIMB, 0.12,0,0, 0.15,0,1*MUZZLERECOVERY, 0.3,0,0};
|
||||||
|
recoil_auto_mx[] = {0,1*KICKBACK,1*MUZZLECLIMB, 0.12,0,0, 0.15,0,1*MUZZLERECOVERY, 0.3,0,0};
|
||||||
|
recoil_single_prone_mx[] = {0,1*KICKBACKPRONE,1*MUZZLECLIMB, 0.12,0,0, 0.15,0,1*MUZZLERECOVERY, 0.3,0,0};
|
||||||
|
recoil_auto_prone_mx[] = {0,1*KICKBACKPRONE,1*MUZZLECLIMB, 0.12,0,0, 0.15,0,1*MUZZLERECOVERY, 0.3,0,0};
|
||||||
|
|
||||||
|
recoil_single_ktb[] = {0,1*KICKBACK,1*MUZZLECLIMB, 0.12,0,0, 0.15,0,1*MUZZLERECOVERY, 0.3,0,0};
|
||||||
|
recoil_auto_ktb[] = {0,1*KICKBACK,1*MUZZLECLIMB, 0.12,0,0, 0.15,0,1*MUZZLERECOVERY, 0.3,0,0};
|
||||||
|
recoil_single_prone_ktb[] = {0,1*KICKBACKPRONE,1*MUZZLECLIMB, 0.12,0,0, 0.15,0,1*MUZZLERECOVERY, 0.3,0,0};
|
||||||
|
recoil_auto_prone_ktb[] = {0,1*KICKBACKPRONE,1*MUZZLECLIMB, 0.12,0,0, 0.15,0,1*MUZZLERECOVERY, 0.3,0,0};
|
||||||
|
|
||||||
|
recoil_single_mk20[] = {0,0.8*KICKBACK,0.8*MUZZLECLIMB, 0.12,0,0, 0.15,0,0.8*MUZZLERECOVERY, 0.3,0,0};
|
||||||
|
recoil_auto_mk20[] = {0,0.8*KICKBACK,0.8*MUZZLECLIMB, 0.12,0,0, 0.15,0,0.8*MUZZLERECOVERY, 0.3,0,0};
|
||||||
|
recoil_single_prone_mk20[] = {0,0.8*KICKBACKPRONE,0.8*MUZZLECLIMB, 0.12,0,0, 0.15,0,0.8*MUZZLERECOVERY, 0.3,0,0};
|
||||||
|
recoil_auto_prone_mk20[] = {0,0.8*KICKBACKPRONE,0.8*MUZZLECLIMB, 0.12,0,0, 0.15,0,0.8*MUZZLERECOVERY, 0.3,0,0};
|
||||||
|
|
||||||
|
recoil_single_trg[] = {0,0.8*KICKBACK,0.8*MUZZLECLIMB, 0.12,0,0, 0.15,0,0.8*MUZZLERECOVERY, 0.3,0,0};
|
||||||
|
recoil_auto_trg[] = {0,0.8*KICKBACK,0.8*MUZZLECLIMB, 0.12,0,0, 0.15,0,0.8*MUZZLERECOVERY, 0.3,0,0};
|
||||||
|
recoil_single_prone_trg[] = {0,0.8*KICKBACKPRONE,0.8*MUZZLECLIMB, 0.12,0,0, 0.15,0,0.8*MUZZLERECOVERY, 0.3,0,0};
|
||||||
|
recoil_auto_prone_trg[] = {0,0.8*KICKBACKPRONE,0.8*MUZZLECLIMB, 0.12,0,0, 0.15,0,0.8*MUZZLERECOVERY, 0.3,0,0};
|
||||||
|
|
||||||
|
recoil_single_sdar[] = {0,0.8*KICKBACK,0.8*MUZZLECLIMB, 0.12,0,0, 0.15,0,0.8*MUZZLERECOVERY, 0.3,0,0};
|
||||||
|
recoil_auto_sdar[] = {0,0.8*KICKBACK,0.8*MUZZLECLIMB, 0.12,0,0, 0.15,0,0.8*MUZZLERECOVERY, 0.3,0,0};
|
||||||
|
recoil_single_prone_sdar[] = {0,0.8*KICKBACKPRONE,0.8*MUZZLECLIMB, 0.12,0,0, 0.15,0,0.8*MUZZLERECOVERY, 0.3,0,0};
|
||||||
|
recoil_auto_prone_sdar[] = {0,0.8*KICKBACKPRONE,0.8*MUZZLECLIMB, 0.12,0,0, 0.15,0,0.8*MUZZLERECOVERY, 0.3,0,0};
|
||||||
|
|
||||||
|
// MACHINE GUNS
|
||||||
|
recoil_single_mk200[] = {0,1*KICKBACK,1*MUZZLECLIMB, 0.12,0,0, 0.15,0,1*MUZZLERECOVERY, 0.3,0,0};
|
||||||
|
recoil_auto_mk200[] = {0,1*KICKBACK,1*MUZZLECLIMB, 0.12,0,0, 0.15,0,1*MUZZLERECOVERY, 0.3,0,0};
|
||||||
|
recoil_single_prone_mk200[] = {0,1*KICKBACKPRONE,1*MUZZLECLIMB, 0.12,0,0, 0.15,0,1*MUZZLERECOVERY, 0.3,0,0};
|
||||||
|
recoil_auto_prone_mk200[] = {0,1*KICKBACKPRONE,1*MUZZLECLIMB, 0.12,0,0, 0.15,0,1*MUZZLERECOVERY, 0.3,0,0};
|
||||||
|
|
||||||
|
recoil_single_zafir[] = {0,1.5*KICKBACK,1.5*MUZZLECLIMB, 0.12,0,0, 0.15,0,1.5*MUZZLERECOVERY, 0.3,0,0};
|
||||||
|
recoil_auto_zafir[] = {0,1.5*KICKBACK,1.5*MUZZLECLIMB, 0.12,0,0, 0.15,0,1.5*MUZZLERECOVERY, 0.3,0,0};
|
||||||
|
recoil_single_prone_zafir[] = {0,1.5*KICKBACKPRONE,1.5*MUZZLECLIMB, 0.12,0,0, 0.15,0,1.5*MUZZLERECOVERY, 0.3,0,0};
|
||||||
|
recoil_auto_prone_zafir[] = {0,1.5*KICKBACKPRONE,1.5*MUZZLECLIMB, 0.12,0,0, 0.15,0,1.5*MUZZLERECOVERY, 0.3,0,0};
|
||||||
|
|
||||||
|
// PRECISION RIFLES
|
||||||
|
recoil_single_dmr[] = {0,1.5*KICKBACK,1.5*MUZZLECLIMB, 0.12,0,0, 0.15,0,1.5*MUZZLERECOVERY, 0.3,0,0};
|
||||||
|
recoil_auto_dmr[] = {0,1.5*KICKBACK,1.5*MUZZLECLIMB, 0.12,0,0, 0.15,0,1.5*MUZZLERECOVERY, 0.3,0,0};
|
||||||
|
recoil_single_prone_dmr[] = {0,1.5*KICKBACKPRONE,1.5*MUZZLECLIMB, 0.12,0,0, 0.15,0,1.5*MUZZLERECOVERY, 0.3,0,0};
|
||||||
|
recoil_auto_prone_dmr[] = {0,1.5*KICKBACKPRONE,1.5*MUZZLECLIMB, 0.12,0,0, 0.15,0,1.5*MUZZLERECOVERY, 0.3,0,0};
|
||||||
|
|
||||||
|
recoil_single_ebr[] = {0,1.5*KICKBACK,1.5*MUZZLECLIMB, 0.12,0,0, 0.15,0,1.5*MUZZLERECOVERY, 0.3,0,0};
|
||||||
|
recoil_auto_ebr[] = {0,1.5*KICKBACK,1.5*MUZZLECLIMB, 0.12,0,0, 0.15,0,1.5*MUZZLERECOVERY, 0.3,0,0};
|
||||||
|
recoil_single_prone_ebr[] = {0,1.5*KICKBACKPRONE,1.5*MUZZLECLIMB, 0.12,0,0, 0.15,0,1.5*MUZZLERECOVERY, 0.3,0,0};
|
||||||
|
recoil_auto_prone_ebr[] = {0,1.5*KICKBACKPRONE,1.5*MUZZLECLIMB, 0.12,0,0, 0.15,0,1.5*MUZZLERECOVERY, 0.3,0,0};
|
||||||
|
|
||||||
|
recoil_single_gm6[] = {0,2.5*KICKBACK,2.5*MUZZLECLIMB, 0.12,0,0, 0.15,0,2.5*MUZZLERECOVERY, 0.3,0,0};
|
||||||
|
recoil_single_prone_gm6[] = {0,2.5*KICKBACKPRONE,2.5*MUZZLECLIMB, 0.12,0,0, 0.15,0,2.5*MUZZLERECOVERY, 0.3,0,0};
|
||||||
|
|
||||||
|
// LAUNCHERS
|
||||||
|
recoil_single_law[] = {0,0,0};
|
||||||
|
recoil_single_nlaw[] = {0,0,0};
|
||||||
|
recoil_single_titan[] = {0,0,0};
|
||||||
|
};
|
||||||
|
|
||||||
|
class CfgCameraShake {
|
||||||
|
// Seems to be ignored by Arma
|
||||||
|
defaultCaliberCoefWeaponFire = 0;
|
||||||
|
};
|
||||||
|
|
||||||
|
// Completely disable BI's camshake on fire.
|
||||||
|
class CfgMovesBasic {
|
||||||
|
class Default {
|
||||||
|
camShakeFire = 0;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
class CfgMovesMaleSdr : CfgMovesBasic {
|
||||||
|
class States {
|
||||||
|
class AmovPercMstpSlowWrflDnon;
|
||||||
|
class AmovPknlMstpSlowWrflDnon : AmovPercMstpSlowWrflDnon {
|
||||||
|
camShakeFire = 0;
|
||||||
|
};
|
||||||
|
class AmovPercMstpSrasWrflDnon;
|
||||||
|
class AmovPpneMstpSrasWrflDnon : AmovPercMstpSrasWrflDnon {
|
||||||
|
camShakeFire = 0;
|
||||||
|
};
|
||||||
|
class AmovPknlMstpSrasWlnrDnon : Default {
|
||||||
|
camShakeFire = 0;
|
||||||
|
};
|
||||||
|
class AmovPknlMrunSlowWrflDf;
|
||||||
|
class AmovPknlMtacSlowWrflDf : AmovPknlMrunSlowWrflDf {
|
||||||
|
camShakeFire = 0;
|
||||||
|
};
|
||||||
|
class AmovPknlMrunSlowWrflDfl;
|
||||||
|
class AmovPknlMtacSlowWrflDfl : AmovPknlMrunSlowWrflDfl {
|
||||||
|
camShakeFire = 0;
|
||||||
|
};
|
||||||
|
class AmovPknlMrunSlowWrflDl;
|
||||||
|
class AmovPknlMtacSlowWrflDl : AmovPknlMrunSlowWrflDl {
|
||||||
|
camShakeFire = 0;
|
||||||
|
};
|
||||||
|
class AmovPknlMrunSlowWrflDbl;
|
||||||
|
class AmovPknlMtacSlowWrflDbl : AmovPknlMrunSlowWrflDbl {
|
||||||
|
camShakeFire = 0;
|
||||||
|
};
|
||||||
|
class AmovPknlMrunSlowWrflDb;
|
||||||
|
class AmovPknlMtacSlowWrflDb : AmovPknlMrunSlowWrflDb {
|
||||||
|
camShakeFire = 0;
|
||||||
|
};
|
||||||
|
class AmovPknlMrunSlowWrflDbr;
|
||||||
|
class AmovPknlMtacSlowWrflDbr : AmovPknlMrunSlowWrflDbr {
|
||||||
|
camShakeFire = 0;
|
||||||
|
};
|
||||||
|
class AmovPknlMrunSlowWrflDr;
|
||||||
|
class AmovPknlMtacSlowWrflDr : AmovPknlMrunSlowWrflDr {
|
||||||
|
camShakeFire = 0;
|
||||||
|
};
|
||||||
|
class AmovPknlMrunSlowWrflDfr;
|
||||||
|
class AmovPknlMtacSlowWrflDfr : AmovPknlMrunSlowWrflDfr {
|
||||||
|
camShakeFire = 0;
|
||||||
|
};
|
||||||
|
class AmovPknlMstpSrasWrflDnon;
|
||||||
|
class AmovPknlMwlkSrasWrflDf : AmovPknlMstpSrasWrflDnon {
|
||||||
|
camShakeFire = 0;
|
||||||
|
};
|
||||||
|
class AmovPknlMrunSrasWrflDf;
|
||||||
|
class AmovPknlMtacSrasWrflDf : AmovPknlMrunSrasWrflDf {
|
||||||
|
camShakeFire = 0;
|
||||||
|
};
|
||||||
|
class AmovPknlMwlkSrasWpstDf;
|
||||||
|
class AmovPknlMtacSrasWpstDf : AmovPknlMwlkSrasWpstDf {
|
||||||
|
camShakeFire = 0;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
// Ammo
|
||||||
|
class CfgAmmo {
|
||||||
|
class MissileCore;
|
||||||
|
class MissileBase: MissileCore {
|
||||||
|
GVAR(shakeMultiplier) = 2;
|
||||||
|
};
|
||||||
|
|
||||||
|
class BombCore;
|
||||||
|
class LaserBombCore: BombCore {
|
||||||
|
GVAR(shakeMultiplier) = 2;
|
||||||
|
};
|
||||||
|
class Bo_Mk82: BombCore {
|
||||||
|
GVAR(shakeMultiplier) = 2;
|
||||||
|
};
|
||||||
|
|
||||||
|
class RocketCore;
|
||||||
|
class ArtilleryRocketCore: RocketCore {
|
||||||
|
GVAR(shakeMultiplier) = 1.4;
|
||||||
|
};
|
||||||
|
class RocketBase: RocketCore {
|
||||||
|
GVAR(shakeMultiplier) = 1.4;
|
||||||
|
};
|
||||||
|
|
||||||
|
class BulletCore;
|
||||||
|
class BulletBase: BulletCore {
|
||||||
|
GVAR(shakeMultiplier) = 1;
|
||||||
|
};
|
||||||
|
|
||||||
|
class ShotgunCore;
|
||||||
|
class ShotgunBase: ShotgunCore {
|
||||||
|
GVAR(shakeMultiplier) = 1.1;
|
||||||
|
};
|
||||||
|
|
||||||
|
class ShellCore;
|
||||||
|
class ShellBase: ShellCore {
|
||||||
|
GVAR(shakeMultiplier) = 3;
|
||||||
|
};
|
||||||
|
|
||||||
|
class SubmunitionCore;
|
||||||
|
class SubmunitionBase: SubmunitionCore {
|
||||||
|
GVAR(shakeMultiplier) = 3;
|
||||||
|
};
|
||||||
|
|
||||||
|
class ShotDeployCore;
|
||||||
|
class ShotDeployBase: ShotDeployCore {
|
||||||
|
GVAR(shakeMultiplier) = 3;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
// Weapons
|
||||||
|
// 1. Set the recoil profiles for all fire modes.
|
||||||
|
// 2. Set the shake multiplier. This determines the camshake for the weapon.
|
||||||
|
// Ex: GVAR(shakeMultiplier) = 1; (disabled currently)
|
||||||
|
|
||||||
|
class CfgWeapons {
|
||||||
|
class CannonCore;
|
||||||
|
class autocannon_Base_F: CannonCore {
|
||||||
|
GVAR(shakeMultiplier) = 0;
|
||||||
|
};
|
||||||
|
class autocannon_35mm: CannonCore {
|
||||||
|
GVAR(shakeMultiplier) = 0;
|
||||||
|
};
|
||||||
|
class cannon_120mm: CannonCore {
|
||||||
|
GVAR(shakeMultiplier) = 0;
|
||||||
|
};
|
||||||
|
class mortar_155mm_AMOS: CannonCore {
|
||||||
|
GVAR(shakeMultiplier) = 0;
|
||||||
|
};
|
||||||
|
class mortar_82mm: CannonCore {
|
||||||
|
GVAR(shakeMultiplier) = 0;
|
||||||
|
};
|
||||||
|
|
||||||
|
// No camshake for gatlings
|
||||||
|
class gatling_20mm: CannonCore {
|
||||||
|
GVAR(shakeMultiplier) = 0;
|
||||||
|
};
|
||||||
|
class gatling_25mm: CannonCore {
|
||||||
|
GVAR(shakeMultiplier) = 0;
|
||||||
|
};
|
||||||
|
class gatling_30mm: CannonCore {
|
||||||
|
GVAR(shakeMultiplier) = 0;
|
||||||
|
};
|
||||||
|
|
||||||
|
class MGunCore;
|
||||||
|
class MGun: MGunCore {
|
||||||
|
GVAR(shakeMultiplier) = 0;
|
||||||
|
};
|
||||||
|
// No camshake for smoke launchers
|
||||||
|
class SmokeLauncher: MGun {
|
||||||
|
GVAR(shakeMultiplier) = 0;
|
||||||
|
};
|
||||||
|
|
||||||
|
// No camshake for coax machine guns
|
||||||
|
class LMG_RCWS;
|
||||||
|
class LMG_M200: LMG_RCWS {
|
||||||
|
GVAR(shakeMultiplier) = 0;
|
||||||
|
};
|
||||||
|
class LMG_coax: LMG_RCWS {
|
||||||
|
GVAR(shakeMultiplier) = 0;
|
||||||
|
};
|
||||||
|
class LMG_Minigun: LMG_RCWS {
|
||||||
|
GVAR(shakeMultiplier) = 0;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
// Vehicles
|
||||||
|
class CfgVehicles {
|
||||||
|
class LandVehicle;
|
||||||
|
class Tank: LandVehicle {
|
||||||
|
GVAR(enableCamshake) = 1;
|
||||||
|
};
|
||||||
|
class Car: LandVehicle {
|
||||||
|
GVAR(enableCamshake) = 1;
|
||||||
|
};
|
||||||
|
class StaticWeapon: LandVehicle {
|
||||||
|
GVAR(enableCamshake) = 1;
|
||||||
|
};
|
||||||
|
|
||||||
|
class Allvehicles;
|
||||||
|
class Air: Allvehicles {
|
||||||
|
GVAR(enableCamshake) = 1;
|
||||||
|
};
|
||||||
|
};
|
@ -1,8 +1,10 @@
|
|||||||
// TMR: Small Arms - Recoil initialization and functions
|
// TMR: Small Arms - Recoil initialization and functions
|
||||||
// (C) 2013 Ryan Schultz. See LICENSE.
|
// (C) 2013 Ryan Schultz. See LICENSE.
|
||||||
// Edited prefixes for compatability in AGM_Realism by KoffeinFlummi
|
// Edited for compatability in ACE by KoffeinFlummi
|
||||||
// Edited by commy2
|
// Edited by commy2
|
||||||
|
|
||||||
|
#include "script_component.hpp"
|
||||||
|
|
||||||
private ["_unit", "_weapon", "_projectile"];
|
private ["_unit", "_weapon", "_projectile"];
|
||||||
|
|
||||||
_unit = _this select 0;
|
_unit = _this select 0;
|
||||||
@ -13,13 +15,13 @@ if (_weapon in ["Throw", "Put"]) exitWith {};
|
|||||||
|
|
||||||
private ["_lastFired", "_burst"];
|
private ["_lastFired", "_burst"];
|
||||||
|
|
||||||
_lastFired = _unit getVariable ["AGM_Recoil_lastFired", -1];
|
_lastFired = _unit getVariable [QUOTE(GVAR(lastFired)), -1];
|
||||||
_burst = _unit getVariable ["AGM_Recoil_Burst", 0];
|
_burst = _unit getVariable [QUOTE(GVAR(burst)), 0];
|
||||||
|
|
||||||
if (time - _lastFired < 0.45) then {
|
if (time - _lastFired < 0.45) then {
|
||||||
private "_startDisperse";
|
private "_startDisperse";
|
||||||
_burst = _burst + 1;
|
_burst = _burst + 1;
|
||||||
_unit setVariable ["AGM_Recoil_Burst", _burst, false];
|
_unit setVariable [QUOTE(GVAR(burst)), _burst, false];
|
||||||
|
|
||||||
_startDisperse = [1, 3] select (cameraView == "GUNNER");
|
_startDisperse = [1, 3] select (cameraView == "GUNNER");
|
||||||
|
|
||||||
@ -39,8 +41,8 @@ if (time - _lastFired < 0.45) then {
|
|||||||
// Maximum possible dispersion (without _sightsBurst mod)
|
// Maximum possible dispersion (without _sightsBurst mod)
|
||||||
_maxBurst = 50;
|
_maxBurst = 50;
|
||||||
|
|
||||||
if (_unit getVariable ["AGM_weaponRested", false]) then {_maxBurst = 25};
|
if (_unit getVariable [QUOTE(EGVAR(resting,weaponRested)), false]) then {_maxBurst = 25};
|
||||||
if (_unit getVariable ["AGM_bipodDeployed", false]) then {_maxBurst = 18};
|
if (_unit getVariable [QUOTE(EGVAR(resting,bipodDeployed)), false]) then {_maxBurst = 18};
|
||||||
|
|
||||||
// Cap the dispersion
|
// Cap the dispersion
|
||||||
_burst = (_burst min _maxBurst) + _sightsBurst;
|
_burst = (_burst min _maxBurst) + _sightsBurst;
|
||||||
@ -49,14 +51,12 @@ if (time - _lastFired < 0.45) then {
|
|||||||
_elevAngle = (_burst / 300) - random (_burst / 300) * 2;
|
_elevAngle = (_burst / 300) - random (_burst / 300) * 2;
|
||||||
_travAngle = (_burst / 260) - random (_burst / 260) * 2;
|
_travAngle = (_burst / 260) - random (_burst / 260) * 2;
|
||||||
|
|
||||||
["Burst", [_travAngle, _elevAngle]] call AGM_Debug_fnc_log;
|
[_projectile, _travAngle, _elevAngle] call EFUNC(common,changeProjectileDirection);
|
||||||
|
|
||||||
[_projectile, _travAngle, _elevAngle] call AGM_Core_fnc_changeProjectileDirection;
|
|
||||||
};
|
};
|
||||||
} else {
|
} else {
|
||||||
|
|
||||||
// Long enough delay, reset burst
|
// Long enough delay, reset burst
|
||||||
_unit setVariable ["AGM_Recoil_Burst", 0, false];
|
_unit setVariable [QUOTE(GVAR(burst)), 0, false];
|
||||||
};
|
};
|
||||||
|
|
||||||
_unit setVariable ["AGM_Recoil_lastFired", time, false];
|
_unit setVariable [QUOTE(GVAR(lastFired)), time, false];
|
@ -1,8 +1,10 @@
|
|||||||
// TMR: Small Arms - Recoil initialization and functions
|
// TMR: Small Arms - Recoil initialization and functions
|
||||||
// (C) 2013 Ryan Schultz. See LICENSE.
|
// (C) 2013 Ryan Schultz. See LICENSE.
|
||||||
// Edited prefixes for compatability in AGM_Realism by KoffeinFlummi
|
// Edited for compatability in ACE by KoffeinFlummi
|
||||||
// Edited by commy2
|
// Edited by commy2
|
||||||
|
|
||||||
|
#include "script_component.hpp"
|
||||||
|
|
||||||
#define BASE_POWER 0.40
|
#define BASE_POWER 0.40
|
||||||
#define BASE_TIME 0.19
|
#define BASE_TIME 0.19
|
||||||
#define BASE_FREQ 13
|
#define BASE_FREQ 13
|
||||||
@ -25,8 +27,8 @@ _freqMod = 0;
|
|||||||
|
|
||||||
_powerCoef = 0;
|
_powerCoef = 0;
|
||||||
if (_unit != vehicle _unit) then {
|
if (_unit != vehicle _unit) then {
|
||||||
_powerCoef = getNumber (configFile >> "CfgWeapons" >> _weapon >> "AGM_Recoil_shakeMultiplier");
|
_powerCoef = getNumber (configFile >> "CfgWeapons" >> _weapon >> QUOTE(GVAR(shakeMultiplier)));
|
||||||
_powerCoef = _powerCoef * getNumber (configFile >> "CfgAmmo" >> _ammo >> "AGM_Recoil_shakeMultiplier");
|
_powerCoef = _powerCoef * getNumber (configFile >> "CfgAmmo" >> _ammo >> QUOTE(GVAR(shakeMultiplier)));
|
||||||
} else {
|
} else {
|
||||||
private ["_type", "_config", "_recoil"];
|
private ["_type", "_config", "_recoil"];
|
||||||
|
|
||||||
@ -46,8 +48,8 @@ if (_unit != vehicle _unit) then {
|
|||||||
_powerCoef = (call compile format ["%1", _powerCoef]) * RECOIL_COEF;
|
_powerCoef = (call compile format ["%1", _powerCoef]) * RECOIL_COEF;
|
||||||
};
|
};
|
||||||
|
|
||||||
if (_unit getVariable ["AGM_weaponRested", false]) then {_powerMod = _powerMod - 0.07};
|
if (_unit getVariable [QUOTE(EGVAR(resting,weaponRested)), false]) then {_powerMod = _powerMod - 0.07};
|
||||||
if (_unit getVariable ["AGM_bipodDeployed", false]) then {_powerMod = _powerMod - 0.11};
|
if (_unit getVariable [QUOTE(EGVAR(resting,bipodDeployed)), false]) then {_powerMod = _powerMod - 0.11};
|
||||||
|
|
||||||
private "_camshake";
|
private "_camshake";
|
||||||
_camshake = [
|
_camshake = [
|
||||||
@ -56,6 +58,4 @@ _camshake = [
|
|||||||
BASE_FREQ + _freqMod max 0
|
BASE_FREQ + _freqMod max 0
|
||||||
];
|
];
|
||||||
|
|
||||||
["CamShake", _camshake, {copyToClipboard format ["addCamShake %1;", _this]; _this}] call AGM_Debug_fnc_log;
|
|
||||||
|
|
||||||
addCamShake _camshake;
|
addCamShake _camshake;
|
12
addons/recoil/functions/script_component.hpp
Normal file
12
addons/recoil/functions/script_component.hpp
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
#define COMPONENT recoil
|
||||||
|
#include "\z\ace\Addons\main\script_mod.hpp"
|
||||||
|
|
||||||
|
#ifdef DEBUG_ENABLED_RECOIL
|
||||||
|
#define DEBUG_MODE_FULL
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef DEBUG_SETTINGS_RECOIL
|
||||||
|
#define DEBUG_SETTINGS DEBUG_SETTINGS_RECOIL
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#include "\z\ace\Addons\main\script_macros.hpp"
|
12
addons/recoil/script_component.hpp
Normal file
12
addons/recoil/script_component.hpp
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
#define COMPONENT recoil
|
||||||
|
#include "\z\ace\Addons\main\script_mod.hpp"
|
||||||
|
|
||||||
|
#ifdef DEBUG_ENABLED_RECOIL
|
||||||
|
#define DEBUG_MODE_FULL
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef DEBUG_SETTINGS_RECOIL
|
||||||
|
#define DEBUG_SETTINGS DEBUG_SETTINGS_RECOIL
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#include "\z\ace\Addons\main\script_macros.hpp"
|
Loading…
Reference in New Issue
Block a user