 sreV                prefix z\ace\addons\recoil Mikero DePbo.dll.7.46 version 109e12cc  CfgEventHandlers.hpp            _  CfgMoves.hpp     
       _
  CfgRecoils.hpp     ~)      \~)  config.bin           M_  functions\fnc_camshake.sqf     	       _	  functions\script_component.hpp     4       \4   README.md             _   script_component.hpp            _  XEH_postInit.sqf             _   XEH_preInit.sqf             _   XEH_PREP.hpp             _   XEH_preStart.sqf     <        _<                        
class Extended_PreStart_EventHandlers {
    class ADDON {
        init = QUOTE(call COMPILE_FILE(XEH_preStart));
    };
};

class Extended_PreInit_EventHandlers {
    class ADDON {
        init = QUOTE(call COMPILE_FILE(XEH_preInit));
    };
};

class Extended_PostInit_EventHandlers {
    class ADDON {
        init = QUOTE(call COMPILE_FILE(XEH_postInit));
    };
};

// Completely disable BI's camshake on fire.
#define ACE_CAMSHAKEFIRE_BASE 0
#define ACE_CAMSHAKEFIRE_LESS 0
#define ACE_CAMSHAKEFIRE_MORE 0

// Go through all modes that have a camshakefire defined and change it to ours.
class CfgMovesBasic {
    class Default {
        camShakeFire = ACE_CAMSHAKEFIRE_BASE;
    };
};

class CfgMovesMaleSdr: CfgMovesBasic {
    class States {
        class AmovPercMstpSlowWrflDnon;
        class AmovPknlMstpSlowWrflDnon: AmovPercMstpSlowWrflDnon {
            camShakeFire = ACE_CAMSHAKEFIRE_LESS;
        };

        class AmovPercMstpSrasWrflDnon;
        class AmovPpneMstpSrasWrflDnon: AmovPercMstpSrasWrflDnon {
            camShakeFire = ACE_CAMSHAKEFIRE_LESS;
        };

        class AmovPknlMstpSrasWlnrDnon: Default {
            camShakeFire = ACE_CAMSHAKEFIRE_LESS;
        };

        class AmovPknlMrunSlowWrflDf;
        class AmovPknlMtacSlowWrflDf: AmovPknlMrunSlowWrflDf {
            camShakeFire = ACE_CAMSHAKEFIRE_MORE;
        };

        class AmovPknlMrunSlowWrflDfl;
        class AmovPknlMtacSlowWrflDfl: AmovPknlMrunSlowWrflDfl {
            camShakeFire = ACE_CAMSHAKEFIRE_MORE;
        };

        class AmovPknlMrunSlowWrflDl;
        class AmovPknlMtacSlowWrflDl: AmovPknlMrunSlowWrflDl {
            camShakeFire = ACE_CAMSHAKEFIRE_MORE;
        };

        class AmovPknlMrunSlowWrflDbl;
        class AmovPknlMtacSlowWrflDbl: AmovPknlMrunSlowWrflDbl {
            camShakeFire = ACE_CAMSHAKEFIRE_MORE;
        };

        class AmovPknlMrunSlowWrflDb;
        class AmovPknlMtacSlowWrflDb: AmovPknlMrunSlowWrflDb {
            camShakeFire = ACE_CAMSHAKEFIRE_MORE;
        };

        class AmovPknlMrunSlowWrflDbr;
        class AmovPknlMtacSlowWrflDbr: AmovPknlMrunSlowWrflDbr {
            camShakeFire = ACE_CAMSHAKEFIRE_MORE;
        };

        class AmovPknlMrunSlowWrflDr;
        class AmovPknlMtacSlowWrflDr: AmovPknlMrunSlowWrflDr {
            camShakeFire = ACE_CAMSHAKEFIRE_MORE;
        };

        class AmovPknlMrunSlowWrflDfr;
        class AmovPknlMtacSlowWrflDfr: AmovPknlMrunSlowWrflDfr {
            camShakeFire = ACE_CAMSHAKEFIRE_MORE;
        };

        class AmovPknlMstpSrasWrflDnon;
        class AmovPknlMwlkSrasWrflDf: AmovPknlMstpSrasWrflDnon {
            camShakeFire = ACE_CAMSHAKEFIRE_BASE;
        };

        class AmovPknlMrunSrasWrflDf;
        class AmovPknlMtacSrasWrflDf: AmovPknlMrunSrasWrflDf {
            camShakeFire = ACE_CAMSHAKEFIRE_MORE;
        };

        class AmovPknlMwlkSrasWpstDf;
        class AmovPknlMtacSrasWpstDf: AmovPknlMwlkSrasWpstDf {
            camShakeFire = ACE_CAMSHAKEFIRE_MORE;
        };
    };
};

#define KICKBACK 1.4

#define MUZZLETEMP 1.2
#define MUZZLEPERM 0.4

#define MUZZLECLIMB_POS 1
#define MUZZLERIGHT_POS 0.2

#define MUZZLECLIMB_MAG 1
#define MUZZLERIGHT_MAG 1

class CfgRecoils {
    class Default {
        // doc: http://forums.bistudio.com/showthread.php?188999-Recoil-Overhaul-Feedback&s=dba8590ec07adb5ffa87f72d38dde6fc&p=2886744&viewfull=1#post2886744
        // {horizontal axis position, vertical axis position, horizontal magnitude, vertical magnitude}
        muzzleOuter[] = {0*MUZZLERIGHT_POS,0.4*MUZZLECLIMB_POS,0.5*MUZZLERIGHT_MAG,0.6*MUZZLECLIMB_MAG};
        // restricted area inside the outer ellipse where the recoil cannot end
        muzzleInner[] = {0,0.05,0.2,0.2};
        // minimum and maximum interval for backward force
        kickBack[] = {0.05*KICKBACK,0.1*KICKBACK};
        permanent = 0.1*MUZZLEPERM;
        temporary = 0.01*MUZZLETEMP;
    };

    class recoil_default: Default {
        muzzleOuter[] = {0.3*MUZZLERIGHT_POS,1*MUZZLECLIMB_POS,0.3*MUZZLERIGHT_MAG,0.2*MUZZLECLIMB_MAG};
        muzzleInner[] = {0,0,0.1,0.1};
        kickBack[] = {0.03*KICKBACK,0.06*KICKBACK};
        permanent = 0.1*MUZZLEPERM;
        temporary = 0.01*MUZZLETEMP;
    };

    class recoil_mk20: recoil_default {
        muzzleOuter[] = {0.2*MUZZLERIGHT_POS,0.6*MUZZLECLIMB_POS,0.2*MUZZLERIGHT_MAG,0.2*MUZZLECLIMB_MAG};
        kickBack[] = {0.01*KICKBACK,0.03*KICKBACK};
        temporary = 0.01*MUZZLETEMP;
    };

    class recoil_mk20c: recoil_default {
        muzzleOuter[] = {0.2*MUZZLERIGHT_POS,0.8*MUZZLECLIMB_POS,0.3*MUZZLERIGHT_MAG,0.2*MUZZLECLIMB_MAG};
        kickBack[] = {0.02*KICKBACK,0.04*KICKBACK};
        temporary = 0.015*MUZZLETEMP;
    };

    class recoil_trg20: recoil_default {
        muzzleOuter[] = {0.2*MUZZLERIGHT_POS,1*MUZZLECLIMB_POS,0.3*MUZZLERIGHT_MAG,0.3*MUZZLECLIMB_MAG};
        kickBack[] = {0.02*KICKBACK,0.04*KICKBACK};
        temporary = 0.015*MUZZLETEMP;
    };

    class recoil_trg21: recoil_default {
        muzzleOuter[] = {0.2*MUZZLERIGHT_POS,0.8*MUZZLECLIMB_POS,0.3*MUZZLERIGHT_MAG,0.2*MUZZLECLIMB_MAG};
        kickBack[] = {0.01*KICKBACK,0.03*KICKBACK};
        temporary = 0.01*MUZZLETEMP;
    };

    class recoil_mx: recoil_default {
        muzzleOuter[] = {0.3*MUZZLERIGHT_POS,1*MUZZLECLIMB_POS,0.4*MUZZLERIGHT_MAG,0.3*MUZZLECLIMB_MAG};
        kickBack[] = {0.02*KICKBACK,0.04*KICKBACK};
        temporary = 0.01*MUZZLETEMP;
    };

    class recoil_mxc: recoil_default {
        muzzleOuter[] = {0.3*MUZZLERIGHT_POS,1.2*MUZZLECLIMB_POS,0.4*MUZZLERIGHT_MAG,0.3*MUZZLECLIMB_MAG};
        kickBack[] = {0.03*KICKBACK,0.06*KICKBACK};
        temporary = 0.015*MUZZLETEMP;
    };

    class recoil_sw: recoil_default {
        muzzleOuter[] = {0.3*MUZZLERIGHT_POS,0.8*MUZZLECLIMB_POS,0.5*MUZZLERIGHT_MAG,0.2*MUZZLECLIMB_MAG};
        kickBack[] = {0.02*KICKBACK,0.04*KICKBACK};
        temporary = 0.01*MUZZLETEMP; //0.005*MUZZLETEMP;
    };

    class recoil_mxm: recoil_default {
        muzzleOuter[] = {0.3*MUZZLERIGHT_POS,0.8*MUZZLECLIMB_POS,0.4*MUZZLERIGHT_MAG,0.3*MUZZLECLIMB_MAG};
        kickBack[] = {0.02*KICKBACK,0.04*KICKBACK};
        temporary = 0.01*MUZZLETEMP;
    };

    class recoil_ktb: recoil_default {
        muzzleOuter[] = {0.3*MUZZLERIGHT_POS,1*MUZZLECLIMB_POS,0.3*MUZZLERIGHT_MAG,0.3*MUZZLECLIMB_MAG};
        kickBack[] = {0.02*KICKBACK,0.04*KICKBACK};
        temporary = 0.01*MUZZLETEMP;
    };

    class recoil_ktbc: recoil_default {
        muzzleOuter[] = {0.3*MUZZLERIGHT_POS,1.2*MUZZLECLIMB_POS,0.3*MUZZLERIGHT_MAG,0.3*MUZZLECLIMB_MAG};
        kickBack[] = {0.03*KICKBACK,0.06*KICKBACK};
        temporary = 0.015*MUZZLETEMP;
    };

    class recoil_smg_01: recoil_default {
        muzzleOuter[] = {0.1*MUZZLERIGHT_POS,0.8*MUZZLECLIMB_POS,0.3*MUZZLERIGHT_MAG,0.2*MUZZLECLIMB_MAG};
        kickBack[] = {0.01*KICKBACK,0.03*KICKBACK};
        temporary = 0.015*MUZZLETEMP;
    };

    class recoil_smg_02: recoil_default {
        muzzleOuter[] = {0.1*MUZZLERIGHT_POS,0.6*MUZZLECLIMB_POS,0.2*MUZZLERIGHT_MAG,0.2*MUZZLECLIMB_MAG};
        kickBack[] = {0.01*KICKBACK,0.02*KICKBACK};
        temporary = 0.01*MUZZLETEMP;
    };

    class recoil_pdw: recoil_default {
        muzzleOuter[] = {0.2*MUZZLERIGHT_POS,1*MUZZLECLIMB_POS,0.3*MUZZLERIGHT_MAG,0.3*MUZZLECLIMB_MAG};
        kickBack[] = {0.02*KICKBACK,0.04*KICKBACK};
        temporary = 0.02*MUZZLETEMP;
    };

    class recoil_sdar: recoil_default {
        muzzleOuter[] = {0.2*MUZZLERIGHT_POS,1*MUZZLECLIMB_POS,0.3*MUZZLERIGHT_MAG,0.3*MUZZLECLIMB_MAG};
        kickBack[] = {0.02*KICKBACK,0.04*KICKBACK};
        temporary = 0.01*MUZZLETEMP;
    };

    class recoil_pistol_p07: recoil_default {
        muzzleOuter[] = {0.2*MUZZLERIGHT_POS,1*MUZZLECLIMB_POS,0.2*MUZZLERIGHT_MAG,0.3*MUZZLECLIMB_MAG};
        kickBack[] = {0.03*KICKBACK,0.06*KICKBACK};
        temporary = 0.03*MUZZLETEMP;
    };

    class recoil_pistol_rook40: recoil_default {
        muzzleOuter[] = {0.2*MUZZLERIGHT_POS,1*MUZZLECLIMB_POS,0.2*MUZZLERIGHT_MAG,0.3*MUZZLECLIMB_MAG};
        kickBack[] = {0.03*KICKBACK,0.06*KICKBACK};
        temporary = 0.02*MUZZLETEMP;
    };

    class recoil_pistol_acpc2: recoil_default {
        muzzleOuter[] = {0.2*MUZZLERIGHT_POS,1.5*MUZZLECLIMB_POS,0.2*MUZZLERIGHT_MAG,0.3*MUZZLECLIMB_MAG};
        kickBack[] = {0.04*KICKBACK,0.08*KICKBACK};
        temporary = 0.04*MUZZLETEMP;
    };

    class recoil_pistol_4five: recoil_default {
        muzzleOuter[] = {0.2*MUZZLERIGHT_POS,1.5*MUZZLECLIMB_POS,0.2*MUZZLERIGHT_MAG,0.3*MUZZLECLIMB_MAG};
        kickBack[] = {0.04*KICKBACK,0.08*KICKBACK};
        temporary = 0.06*MUZZLETEMP;
    };

    class recoil_pistol_zubr: recoil_default {
        muzzleOuter[] = {0.2*MUZZLERIGHT_POS,1.5*MUZZLECLIMB_POS,0.2*MUZZLERIGHT_MAG,0.3*MUZZLECLIMB_MAG};
        kickBack[] = {0.04*KICKBACK,0.08*KICKBACK};
        temporary = 0.08*MUZZLETEMP;
    };

    class recoil_pistol_signal: recoil_default {
        muzzleOuter[] = {0.2*MUZZLERIGHT_POS,1.5*MUZZLECLIMB_POS,0.2*MUZZLERIGHT_MAG,0.3*MUZZLECLIMB_MAG};
        kickBack[] = {0.02*KICKBACK,0.04*KICKBACK};
        temporary = 0.02*MUZZLETEMP;
    };

    class recoil_rpg: recoil_default {
        muzzleOuter[] = {2*MUZZLERIGHT_POS,3*MUZZLECLIMB_POS,1*MUZZLERIGHT_MAG,0.5*MUZZLECLIMB_MAG};
        kickBack[] = {0.08*KICKBACK,0.1*KICKBACK};
        temporary = 0.1*MUZZLETEMP;
    };

    class recoil_nlaw: recoil_default {
        muzzleOuter[] = {2*MUZZLERIGHT_POS,3*MUZZLECLIMB_POS,1*MUZZLERIGHT_MAG,0.5*MUZZLECLIMB_MAG};
        kickBack[] = {0.06*KICKBACK,0.08*KICKBACK};
        temporary = 0.08*MUZZLETEMP;
    };

    class recoil_titan_long: recoil_default {
        muzzleOuter[] = {2*MUZZLERIGHT_POS,3*MUZZLECLIMB_POS,1*MUZZLERIGHT_MAG,0.5*MUZZLECLIMB_MAG};
        kickBack[] = {0.1*KICKBACK,0.12*KICKBACK};
        temporary = 0.15*MUZZLETEMP;
    };

    class recoil_titan_short: recoil_default {
        muzzleOuter[] = {2*MUZZLERIGHT_POS,3*MUZZLECLIMB_POS,1*MUZZLERIGHT_MAG,0.5*MUZZLECLIMB_MAG};
        kickBack[] = {0.1*KICKBACK,0.12*KICKBACK};
        temporary = 0.12*MUZZLETEMP;
    };

    class recoil_mk200: recoil_default {
        muzzleOuter[] = {0.4*MUZZLERIGHT_POS,0.6*MUZZLECLIMB_POS,0.6*MUZZLERIGHT_MAG,0.2*MUZZLECLIMB_MAG};
        kickBack[] = {0.03*KICKBACK,0.06*KICKBACK};
        temporary = 0.01*MUZZLETEMP; //0.005*MUZZLETEMP;
    };

    class recoil_zafir: recoil_default {
        muzzleOuter[] = {0.5*MUZZLERIGHT_POS,1*MUZZLECLIMB_POS,0.7*MUZZLERIGHT_MAG,0.3*MUZZLECLIMB_MAG};
        kickBack[] = {0.02*KICKBACK,0.08*KICKBACK};
        temporary = 0.01*MUZZLETEMP; //0.005*MUZZLETEMP;
    };

    class recoil_m320: recoil_default {
        muzzleOuter[] = {1*MUZZLERIGHT_POS,3*MUZZLECLIMB_POS,0.5*MUZZLERIGHT_MAG,0.6*MUZZLECLIMB_MAG};
        kickBack[] = {0.08*KICKBACK,0.1*KICKBACK};
        temporary = 0.02*MUZZLETEMP;
    };

    class recoil_gm6: recoil_default {
        muzzleOuter[] = {1.4*MUZZLERIGHT_POS,3.5*MUZZLECLIMB_POS,0.7*MUZZLERIGHT_MAG,0.8*MUZZLECLIMB_MAG};
        kickBack[] = {0.1*KICKBACK,0.12*KICKBACK};
        temporary = 0.025*MUZZLETEMP;
    };

    class recoil_ebr: recoil_default {
        muzzleOuter[] = {0.4*MUZZLERIGHT_POS,1.5*MUZZLECLIMB_POS,0.6*MUZZLERIGHT_MAG,0.4*MUZZLECLIMB_MAG};
        kickBack[] = {0.04*KICKBACK,0.07*KICKBACK};
        temporary = 0.01*MUZZLETEMP;
    };

    class recoil_dmr_01: recoil_default {
        muzzleOuter[] = {0.5*MUZZLERIGHT_POS,2*MUZZLECLIMB_POS,0.5*MUZZLERIGHT_MAG,0.5*MUZZLECLIMB_MAG};
        kickBack[] = {0.03*KICKBACK,0.08*KICKBACK};
        temporary = 0.015*MUZZLETEMP;
    };

    class recoil_dmr_02: recoil_default {
        muzzleOuter[] = {0.5*MUZZLERIGHT_POS,2.5*MUZZLECLIMB_POS,0.6*MUZZLERIGHT_MAG,0.5*MUZZLECLIMB_MAG};
        kickBack[] = {0.06*KICKBACK,0.08*KICKBACK};
        temporary = 0.01*MUZZLETEMP;
    };

    class recoil_dmr_03: recoil_default {
        muzzleOuter[] = {0.3*MUZZLERIGHT_POS,1.5*MUZZLECLIMB_POS,0.5*MUZZLERIGHT_MAG,0.4*MUZZLECLIMB_MAG};
        kickBack[] = {0.03*KICKBACK,0.06*KICKBACK};
        temporary = 0.005*MUZZLETEMP;
    };

    class recoil_dmr_04: recoil_default {
        muzzleOuter[] = {0.4*MUZZLERIGHT_POS,1.5*MUZZLECLIMB_POS,0.5*MUZZLERIGHT_MAG,0.4*MUZZLECLIMB_MAG};
        kickBack[] = {0.02*KICKBACK,0.04*KICKBACK};
        temporary = 0.015*MUZZLETEMP;
    };

    class recoil_dmr_05: recoil_default {
        muzzleOuter[] = {0.5*MUZZLERIGHT_POS,2.5*MUZZLECLIMB_POS,0.8*MUZZLERIGHT_MAG,0.6*MUZZLECLIMB_MAG};
        kickBack[] = {0.08*KICKBACK,0.1*KICKBACK};
        temporary = 0.01*MUZZLETEMP;
    };

    class recoil_dmr_06: recoil_default {
        muzzleOuter[] = {0.5*MUZZLERIGHT_POS,2*MUZZLECLIMB_POS,0.7*MUZZLERIGHT_MAG,0.5*MUZZLECLIMB_MAG};
        kickBack[] = {0.05*KICKBACK,0.1*KICKBACK};
        temporary = 0.01*MUZZLETEMP;
    };

    class recoil_mmg_01: recoil_default {
        muzzleOuter[] = {0.6*MUZZLERIGHT_POS,1.5*MUZZLECLIMB_POS,0.8*MUZZLERIGHT_MAG,0.3*MUZZLECLIMB_MAG};
        kickBack[] = {0.02*KICKBACK,0.08*KICKBACK};
        temporary = 0.01*MUZZLETEMP; //0.005*MUZZLETEMP;
    };

    class recoil_mmg_02: recoil_default {
        muzzleOuter[] = {0.5*MUZZLERIGHT_POS,1.5*MUZZLECLIMB_POS,0.6*MUZZLERIGHT_MAG,0.4*MUZZLECLIMB_MAG};
        kickBack[] = {0.04*KICKBACK,0.08*KICKBACK};
        temporary = 0.01*MUZZLETEMP; //0.005*MUZZLETEMP;
    };
};
 raP           CfgPatches     Extended_PreStart_EventHandlers    Extended_PreInit_EventHandlers X   Extended_PostInit_EventHandlers    CfgMovesBasic ;   CfgMovesMaleSdr g   CfgRecoils    CfgCameraShake       ace_recoil        name ACE3 - Recoil units  weapons  requiredVersion    @requiredAddons  ace_common  author $STR_ace_common_ACETeam authors  commy2  url $STR_ace_main_URL version QH@ versionStr 3.13.5.57 versionAr          9       ace_recoil   X    init call compile preprocessFileLineNumbers '\z\ace\addons\recoil\XEH_preStart.sqf' X    ace_recoil n      init call compile preprocessFileLineNumbers '\z\ace\addons\recoil\XEH_preInit.sqf'     ace_recoil   ;    init call compile preprocessFileLineNumbers '\z\ace\addons\recoil\XEH_postInit.sqf' ;    Default N  g   camShakeFire     g  CfgMovesBasic  States      AmovPercMstpSlowWrflDnon  AmovPknlMstpSlowWrflDnon `  AmovPercMstpSrasWrflDnon  AmovPpneMstpSrasWrflDnon    AmovPknlMstpSrasWlnrDnon   AmovPknlMrunSlowWrflDf  AmovPknlMtacSlowWrflDf   AmovPknlMrunSlowWrflDfl  AmovPknlMtacSlowWrflDfl   AmovPknlMrunSlowWrflDl  AmovPknlMtacSlowWrflDl A  AmovPknlMrunSlowWrflDbl  AmovPknlMtacSlowWrflDbl p  AmovPknlMrunSlowWrflDb  AmovPknlMtacSlowWrflDb   AmovPknlMrunSlowWrflDbr  AmovPknlMtacSlowWrflDbr   AmovPknlMrunSlowWrflDr  AmovPknlMtacSlowWrflDr   AmovPknlMrunSlowWrflDfr  AmovPknlMtacSlowWrflDfr .  AmovPknlMstpSrasWrflDnon  AmovPknlMwlkSrasWrflDf ^  AmovPknlMrunSrasWrflDf  AmovPknlMtacSrasWrflDf   AmovPknlMwlkSrasWpstDf  AmovPknlMtacSrasWpstDf     AmovPercMstpSlowWrflDnon camShakeFire       AmovPercMstpSrasWrflDnon camShakeFire       Default camShakeFire       AmovPknlMrunSlowWrflDf camShakeFire       AmovPknlMrunSlowWrflDfl camShakeFire     A  AmovPknlMrunSlowWrflDl camShakeFire     p  AmovPknlMrunSlowWrflDbl camShakeFire       AmovPknlMrunSlowWrflDb camShakeFire       AmovPknlMrunSlowWrflDbr camShakeFire       AmovPknlMrunSlowWrflDr camShakeFire     .  AmovPknlMrunSlowWrflDfr camShakeFire     ^  AmovPknlMstpSrasWrflDnon camShakeFire       AmovPknlMrunSrasWrflDf camShakeFire       AmovPknlMwlkSrasWpstDf camShakeFire        ' Default    recoil_default l   recoil_mk20    recoil_mk20c    recoil_trg20    recoil_trg21 i   recoil_mx    recoil_mxc O   recoil_sw    recoil_mxm 8   recoil_ktb    recoil_ktbc    recoil_smg_01    recoil_smg_02    recoil_pdw |   recoil_sdar    recoil_pistol_p07 `   recoil_pistol_rook40    recoil_pistol_acpc2 D   recoil_pistol_4five    recoil_pistol_zubr ,   recoil_pistol_signal    recoil_rpg    recoil_nlaw    recoil_titan_long    recoil_titan_short [   recoil_mk200    recoil_zafir <   recoil_m320    recoil_gm6    recoil_ebr    recoil_dmr_01    recoil_dmr_02 x   recoil_dmr_03    recoil_dmr_04 a   recoil_dmr_05    recoil_dmr_06 I   recoil_mmg_01    recoil_mmg_02 .     muzzleOuter  0*0.2  0.4*1  0.5*1  0.6*1 muzzleInner     L=L>L>kickBack  0.05*1.4  0.1*1.4  permanent 0.1*0.4  temporary 0.01*1.2 l  Default muzzleOuter  0.3*0.2  1*1  0.3*1  0.2*1 muzzleInner         ==kickBack  0.03*1.4  0.06*1.4  permanent 0.1*0.4  temporary 0.01*1.2   recoil_default muzzleOuter  0.2*0.2  0.6*1  0.2*1  0.2*1 kickBack  0.01*1.4  0.03*1.4  temporary 0.01*1.2   recoil_default muzzleOuter  0.2*0.2  0.8*1  0.3*1  0.2*1 kickBack  0.02*1.4  0.04*1.4  temporary 0.015*1.2   recoil_default muzzleOuter  0.2*0.2  1*1  0.3*1  0.3*1 kickBack  0.02*1.4  0.04*1.4  temporary 0.015*1.2 i  recoil_default muzzleOuter  0.2*0.2  0.8*1  0.3*1  0.2*1 kickBack  0.01*1.4  0.03*1.4  temporary 0.01*1.2   recoil_default muzzleOuter  0.3*0.2  1*1  0.4*1  0.3*1 kickBack  0.02*1.4  0.04*1.4  temporary 0.01*1.2 O  recoil_default muzzleOuter  0.3*0.2  1.2*1  0.4*1  0.3*1 kickBack  0.03*1.4  0.06*1.4  temporary 0.015*1.2   recoil_default muzzleOuter  0.3*0.2  0.8*1  0.5*1  0.2*1 kickBack  0.02*1.4  0.04*1.4  temporary 0.01*1.2 8  recoil_default muzzleOuter  0.3*0.2  0.8*1  0.4*1  0.3*1 kickBack  0.02*1.4  0.04*1.4  temporary 0.01*1.2   recoil_default muzzleOuter  0.3*0.2  1*1  0.3*1  0.3*1 kickBack  0.02*1.4  0.04*1.4  temporary 0.01*1.2   recoil_default muzzleOuter  0.3*0.2  1.2*1  0.3*1  0.3*1 kickBack  0.03*1.4  0.06*1.4  temporary 0.015*1.2   recoil_default muzzleOuter  0.1*0.2  0.8*1  0.3*1  0.2*1 kickBack  0.01*1.4  0.03*1.4  temporary 0.015*1.2   recoil_default muzzleOuter  0.1*0.2  0.6*1  0.2*1  0.2*1 kickBack  0.01*1.4  0.02*1.4  temporary 0.01*1.2 |  recoil_default muzzleOuter  0.2*0.2  1*1  0.3*1  0.3*1 kickBack  0.02*1.4  0.04*1.4  temporary 0.02*1.2   recoil_default muzzleOuter  0.2*0.2  1*1  0.3*1  0.3*1 kickBack  0.02*1.4  0.04*1.4  temporary 0.01*1.2 `  recoil_default muzzleOuter  0.2*0.2  1*1  0.2*1  0.3*1 kickBack  0.03*1.4  0.06*1.4  temporary 0.03*1.2   recoil_default muzzleOuter  0.2*0.2  1*1  0.2*1  0.3*1 kickBack  0.03*1.4  0.06*1.4  temporary 0.02*1.2 D  recoil_default muzzleOuter  0.2*0.2  1.5*1  0.2*1  0.3*1 kickBack  0.04*1.4  0.08*1.4  temporary 0.04*1.2   recoil_default muzzleOuter  0.2*0.2  1.5*1  0.2*1  0.3*1 kickBack  0.04*1.4  0.08*1.4  temporary 0.06*1.2 ,  recoil_default muzzleOuter  0.2*0.2  1.5*1  0.2*1  0.3*1 kickBack  0.04*1.4  0.08*1.4  temporary 0.08*1.2   recoil_default muzzleOuter  0.2*0.2  1.5*1  0.2*1  0.3*1 kickBack  0.02*1.4  0.04*1.4  temporary 0.02*1.2   recoil_default muzzleOuter  2*0.2  3*1  1*1  0.5*1 kickBack  0.08*1.4  0.1*1.4  temporary 0.1*1.2   recoil_default muzzleOuter  2*0.2  3*1  1*1  0.5*1 kickBack  0.06*1.4  0.08*1.4  temporary 0.08*1.2   recoil_default muzzleOuter  2*0.2  3*1  1*1  0.5*1 kickBack  0.1*1.4  0.12*1.4  temporary 0.15*1.2 [  recoil_default muzzleOuter  2*0.2  3*1  1*1  0.5*1 kickBack  0.1*1.4  0.12*1.4  temporary 0.12*1.2   recoil_default muzzleOuter  0.4*0.2  0.6*1  0.6*1  0.2*1 kickBack  0.03*1.4  0.06*1.4  temporary 0.01*1.2 <  recoil_default muzzleOuter  0.5*0.2  1*1  0.7*1  0.3*1 kickBack  0.02*1.4  0.08*1.4  temporary 0.01*1.2   recoil_default muzzleOuter  1*0.2  3*1  0.5*1  0.6*1 kickBack  0.08*1.4  0.1*1.4  temporary 0.02*1.2   recoil_default muzzleOuter  1.4*0.2  3.5*1  0.7*1  0.8*1 kickBack  0.1*1.4  0.12*1.4  temporary 0.025*1.2   recoil_default muzzleOuter  0.4*0.2  1.5*1  0.6*1  0.4*1 kickBack  0.04*1.4  0.07*1.4  temporary 0.01*1.2   recoil_default muzzleOuter  0.5*0.2  2*1  0.5*1  0.5*1 kickBack  0.03*1.4  0.08*1.4  temporary 0.015*1.2 x  recoil_default muzzleOuter  0.5*0.2  2.5*1  0.6*1  0.5*1 kickBack  0.06*1.4  0.08*1.4  temporary 0.01*1.2   recoil_default muzzleOuter  0.3*0.2  1.5*1  0.5*1  0.4*1 kickBack  0.03*1.4  0.06*1.4  temporary 0.005*1.2 a  recoil_default muzzleOuter  0.4*0.2  1.5*1  0.5*1  0.4*1 kickBack  0.02*1.4  0.04*1.4  temporary 0.015*1.2   recoil_default muzzleOuter  0.5*0.2  2.5*1  0.8*1  0.6*1 kickBack  0.08*1.4  0.1*1.4  temporary 0.01*1.2 I  recoil_default muzzleOuter  0.5*0.2  2*1  0.7*1  0.5*1 kickBack  0.05*1.4  0.1*1.4  temporary 0.01*1.2   recoil_default muzzleOuter  0.6*0.2  1.5*1  0.8*1  0.3*1 kickBack  0.02*1.4  0.08*1.4  temporary 0.01*1.2 .  recoil_default muzzleOuter  0.5*0.2  1.5*1  0.6*1  0.4*1 kickBack  0.04*1.4  0.08*1.4  temporary 0.01*1.2    defaultCaliberCoefWeaponFire           #include "script_component.hpp"
/*
 * Author: Orginal by Ryan Schultz, edited by KoffeinFlummi, commy2
 * Adds camera shake when firing. Called from the unified fired EH only for the local player.
 * From TMR: Small Arms
 *
 * Arguments:
 * None. Parameters inherited from EFUNC(common,firedEH)
 *
 * Return Value:
 * None
 *
 * Example:
 * [player, (currentWeapon player), (currentMuzzle player)] call ace_recoil_fnc_camshake;
 *
 * Public: No
 */

//IGNORE_PRIVATE_WARNING ["_unit", "_weapon", "_muzzle", "_mode", "_ammo", "_magazine", "_projectile", "_vehicle", "_gunner", "_turret"];
TRACE_10("firedEH:",_unit, _weapon, _muzzle, _mode, _ammo, _magazine, _projectile, _vehicle, _gunner, _turret);

#define BASE_POWER 0.40
#define BASE_TIME 0.19
#define BASE_FREQ 13
#define RECOIL_COEF 40

if (toLower _weapon in ["throw", "put"]) exitWith {};

private _powerMod = ([0, -0.1, -0.1, 0, -0.2] select (["STAND", "CROUCH", "PRONE", "UNDEFINED", ""] find stance _unit)) + ([0, -1, 0, -1] select (["INTERNAL", "EXTERNAL", "GUNNER", "GROUP"] find cameraView));

// to get camshake read kickback
private _recoil = missionNamespace getVariable format [QGVAR(%1-%2), _weapon, _muzzle];

if (isNil "_recoil") then {
    private _config = configFile >> "CfgWeapons" >> _weapon;

    if (_muzzle == _weapon) then {
        _recoil = getText (_config >> "recoil")
    } else {
        _recoil = getText (_config >> _muzzle >> "recoil")
    };

    if (isClass (configFile >> "CfgRecoils" >> _recoil)) then {
        _recoil = getArray (configFile >> "CfgRecoils" >> _recoil >> "kickBack");
        if (count _recoil < 2) then {
            _recoil = [0, 0];
        };
    } else {
        _recoil = [0, 0];
    };

    TRACE_3("Caching Recoil config",_weapon,_muzzle,_recoil);

    // parse numbers
    _recoil set [0, call compile format ["%1", _recoil select 0]];
    _recoil set [1, call compile format ["%1", _recoil select 1]];

    missionNamespace setVariable [format [QGVAR(%1-%2), _weapon, _muzzle], _recoil];
};

private _powerCoef = RECOIL_COEF * linearConversion [0, 1, random 1, _recoil select 0, _recoil select 1, false];

if (isWeaponRested _unit) then {_powerMod = _powerMod - 0.07};
if (isWeaponDeployed _unit) then {_powerMod = _powerMod - 0.11};

private _camshake = [
    _powerCoef * (BASE_POWER + _powerMod) max 0,
    BASE_TIME,
    BASE_FREQ
];

TRACE_4("addCamShake",_recoil,_powerCoef,_powerMod,_camshake);

addCamShake _camshake;
#include "\z\ace\addons\recoil\script_component.hpp"ace_recoil
===========

Tweaks weapon recoils and adds camera shake.


## Maintainers

The people responsible for merging changes to this component or answering potential questions.

- [commy2](https://github.com/commy2)
#define COMPONENT recoil
#define COMPONENT_BEAUTIFIED Recoil
#include "\z\ace\addons\main\script_mod.hpp"

// #define DEBUG_MODE_FULL
// #define DISABLE_COMPILE_CACHE
// #define ENABLE_PERFORMANCE_COUNTERS

#ifdef DEBUG_ENABLED_RECOIL
    #define DEBUG_MODE_FULL
#endif

#ifdef DEBUG_ENABLED_RECOIL
    #define DEBUG_SETTINGS DEBUG_ENABLED_RECOIL
#endif

#include "\z\ace\addons\main\script_macros.hpp"
#include "script_component.hpp"

// Register fire event handler
["ace_firedPlayer", DFUNC(camShake)] call CBA_fnc_addEventHandler;
// by commy2
#include "script_component.hpp"

ADDON = false;

PREP_RECOMPILE_START;
#include "XEH_PREP.hpp"
PREP_RECOMPILE_END;

ADDON = true;

PREP(camshake);
#include "script_component.hpp"

#include "XEH_PREP.hpp"
 !*Yttn#L64