// Global toggles for caching/logging // #define DISABLE_COMPILE_CACHE // #define DEBUG_MODE_FULL #define DEBUG_SYNCHRONOUS #include "\x\cba\addons\main\script_macros_common.hpp" #include "\x\cba\addons\xeh\script_xeh.hpp" // Functions #define AFUNC(var1,var2) TRIPLES(DOUBLES(ace,var1),fnc,var2) #define BFUNC(var1) TRIPLES(BIS,fnc,var1) #define CFUNC(var1) TRIPLES(CBA,fnc,var1) // Remote Procedure Calls #define CRPC(var1,var2) QUOTE(DOUBLES(DOUBLES(forge_client,var1),var2)) #define SRPC(var1,var2) QUOTE(DOUBLES(DOUBLES(forge_server,var1),var2)) #define SREG(var1,var2) DOUBLES(DOUBLES(forge_server,var1),var2) #define CLASS(var1) DOUBLES(PREFIX,var1) #define QCLASS(var1) QUOTE(DOUBLES(PREFIX,var1)) #define QQUOTE(var1) QUOTE(QUOTE(var1)) // QPATHTOF but without a leading slash #define PATHTOF2(var1) MAINPREFIX\PREFIX\SUBPREFIX\COMPONENT\var1 #define QPATHTOF2(var1) QUOTE(PATHTOF2(var1)) #ifdef SUBCOMPONENT #define SUBADDON DOUBLES(ADDON,SUBCOMPONENT) // Update PATHTO macros to point to subaddon instead #undef PATHTO #define PATHTO(var1) \MAINPREFIX\PREFIX\SUBPREFIX\COMPONENT\SUBCOMPONENT\var1.sqf #undef PATHTOF #define PATHTOF(var1) \MAINPREFIX\PREFIX\SUBPREFIX\COMPONENT\SUBCOMPONENT\var1 #undef PATHTO2 #define PATHTO2(var1) MAINPREFIX\PREFIX\SUBPREFIX\COMPONENT\SUBCOMPONENT\var1.sqf #undef PATHTOF2 #define PATHTOF2(var1) MAINPREFIX\PREFIX\SUBPREFIX\COMPONENT\SUBCOMPONENT\var1 #endif #undef PREP #ifdef DISABLE_COMPILE_CACHE #define LINKFUNC(x) {call FUNC(x)} #define PREP(fncName) FUNC(fncName) = compile preprocessFileLineNumbers QPATHTOF(functions\DOUBLES(fnc,fncName).sqf) #define PREP_RECOMPILE_START if (isNil "forge_client_fnc_recompile") then {forge_client_recompiles = []; forge_client_fnc_recompile = {{call _x} forEach forge_client_recompiles;}}; private _recomp = { #define PREP_RECOMPILE_END }; call _recomp; forge_client_recompiles pushBack _recomp; #else #define LINKFUNC(x) FUNC(x) #define PREP(fncName) [QPATHTOF(functions\DOUBLES(fnc,fncName).sqf), QFUNC(fncName)] call CBA_fnc_compileFunction #define PREP_RECOMPILE_START ; /* disabled */ #define PREP_RECOMPILE_END ; /* disabled */ #endif #define GETVAR_SYS(var1,var2) getVariable [ARR_2(QUOTE(var1),var2)] #define SETVAR_SYS(var1,var2) setVariable [ARR_2(QUOTE(var1),var2)] #define SETPVAR_SYS(var1,var2) setVariable [ARR_3(QUOTE(var1),var2,true)] #undef GETVAR #define GETVAR(var1,var2,var3) (var1 GETVAR_SYS(var2,var3)) #define GETMVAR(var1,var2) (missionNamespace GETVAR_SYS(var1,var2)) #define GETUVAR(var1,var2) (uiNamespace GETVAR_SYS(var1,var2)) #define GETPRVAR(var1,var2) (profileNamespace GETVAR_SYS(var1,var2)) #define GETPAVAR(var1,var2) (parsingNamespace GETVAR_SYS(var1,var2)) #undef SETVAR #define SETVAR(var1,var2,var3) var1 SETVAR_SYS(var2,var3) #define SETPVAR(var1,var2,var3) var1 SETPVAR_SYS(var2,var3) #define SETMVAR(var1,var2) missionNamespace SETVAR_SYS(var1,var2) #define SETUVAR(var1,var2) uiNamespace SETVAR_SYS(var1,var2) #define SETPRVAR(var1,var2) profileNamespace SETVAR_SYS(var1,var2) #define SETPAVAR(var1,var2) parsingNamespace SETVAR_SYS(var1,var2) #define GETGVAR(var1,var2) GETMVAR(GVAR(var1),var2) #define GETEGVAR(var1,var2,var3) GETMVAR(EGVAR(var1,var2),var3) #define WEAP_XX(WEAP, COUNT) class DOUBLES(_xx,WEAP) { \ weapon = QUOTE(WEAP); \ count = COUNT; \ } #define MAG_XX(MAG, COUNT) class DOUBLES(_xx,MAG) { \ magazine = QUOTE(MAG); \ count = COUNT; \ } #define ITEM_XX(ITEM, COUNT) class DOUBLES(_xx,ITEM) { \ name = QUOTE(ITEM); \ count = COUNT; \ } // ACE Cargo #define CARGO_XX(ITEM, COUNT) class ITEM { \ type = QUOTE(ITEM); \ amount = COUNT; \ } #define MAG_CSW(var1,var2) class DOUBLES(var1,csw): var1 { \ scope = var2; \ type = TYPE_MAGAZINE_PRIMARY_AND_THROW; \ } // Debug textures, mainly for testing hiddenSelections #define DBUG_TEX_RED "#(rgb,8,8,3)color(1,0,0,1)" #define DBUG_TEX_GRN "#(rgb,8,8,3)color(0,1,0,1)" #define DBUG_TEX_BLU "#(rgb,8,8,3)color(0,0,1,1)" #define DBUG_TEX_PUR "#(rgb,8,8,3)color(1,0,1,1)" #define DBUG_TEX_YEL "#(rgb,8,8,3)color(1,1,0,1)" // Statements and conditions #define CLAMP(var1,lower,upper) (lower max (var1 min upper)) // Weapon types #define TYPE_WEAPON_PRIMARY 1 #define TYPE_WEAPON_HANDGUN 2 #define TYPE_WEAPON_SECONDARY 4 // Magazine types #define TYPE_MAGAZINE_HANDGUN_AND_GL 16 // mainly #define TYPE_MAGAZINE_PRIMARY_AND_THROW 256 #define TYPE_MAGAZINE_SECONDARY_AND_PUT 512 // mainly #define TYPE_MAGAZINE_MISSILE 768 // More types #define TYPE_BINOCULAR_AND_NVG 4096 #define TYPE_WEAPON_VEHICLE 65536 #define TYPE_ITEM 131072 // Item types #define TYPE_DEFAULT 0 #define TYPE_MUZZLE 101 #define TYPE_OPTICS 201 #define TYPE_FLASHLIGHT 301 #define TYPE_BIPOD 302 #define TYPE_FIRST_AID_KIT 401 #define TYPE_FINS 501 // not implemented #define TYPE_BREATHING_BOMB 601 // not implemented #define TYPE_NVG 602 #define TYPE_GOGGLE 603 #define TYPE_SCUBA 604 // not implemented #define TYPE_HEADGEAR 605 #define TYPE_FACTOR 607 #define TYPE_MAP 608 #define TYPE_COMPASS 609 #define TYPE_WATCH 610 #define TYPE_RADIO 611 #define TYPE_GPS 612 #define TYPE_HMD 616 #define TYPE_BINOCULAR 617 #define TYPE_MEDIKIT 619 #define TYPE_TOOLKIT 620 #define TYPE_UAV_TERMINAL 621 #define TYPE_VEST 701 #define TYPE_UNIFORM 801 #define TYPE_BACKPACK 901