Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Explosives - Improve AT/SLAM, Frag from Claymore and Bounding Mines #10105

Merged
merged 10 commits into from
Sep 30, 2024
36 changes: 29 additions & 7 deletions addons/explosives/CfgAmmo.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -8,20 +8,33 @@ class CfgAmmo {

// GVAR(size) = 0; is small size
// GVAR(size) = 1; is large size
class DirectionalBombBase;
class ClaymoreDirectionalMine_Remote_Ammo: DirectionalBombBase {
class ClaymoreDirectionalMine_Remote_Ammo;
class ACE_ClaymoreDirectionalMine_Remote_Ammo: ClaymoreDirectionalMine_Remote_Ammo { // Wrapper class to avoid unintentional changes to third-party mods. Ref #10105
GVAR(magazine) = "ClaymoreDirectionalMine_Remote_Mag";
GVAR(size) = 0;
GVAR(defuseObjectPosition)[] = {0, 0, 0.038};
soundActivation[] = {"", 0, 0, 0};
soundDeactivation[] = {"", 0, 0, 0};

// Reduce vanilla damage, so that it doesn't destroy buildings
hit = 10;
indirectHit = 10;
};

class DirectionalBombBase;
class APERSTripMine_Wire_Ammo: DirectionalBombBase {
GVAR(defuseObjectPosition)[] = {-1.415, 0, 0.12};
GVAR(size) = 0;
};

class APERSBoundingMine_Range_Ammo;
class ACE_APERSBoundingMine_Range_Ammo: APERSBoundingMine_Range_Ammo {
// Reduce vanilla damage, so that it doesn't destroy buildings
hit = 10;
indirectHit = 10;
mrschick marked this conversation as resolved.
Show resolved Hide resolved
CraterEffects = "MineCrater";
};

class ACE_FlareTripMine_Wire_Ammo: APERSTripMine_Wire_Ammo {
SoundSetExplosion[] = {};
defaultMagazine = "ACE_FlareTripMine_Mag"; // Mag that gets dropped after defuse
Expand All @@ -46,9 +59,16 @@ class CfgAmmo {
GVAR(size) = 0;
};

// More sensitive pressure-fuze for the Vanilla AT Mine.
class MineBase;
class ATMine_Range_Ammo: MineBase {
mineTrigger = "ACE_TankTriggerLight";
};

// "The SLAM has an anti-tamper feature that is only active in the bottom- and side-attack modes."
class SLAMDirectionalMine_Wire_Ammo: DirectionalBombBase {
indirectHitRange = 20;
explosionAngle = 60;
GVAR(explodeOnDefuseChance) = 1;
GVAR(magazine) = "SLAMDirectionalMine_Wire_Mag";
GVAR(size) = 0;
Expand All @@ -64,14 +84,16 @@ class CfgAmmo {
class ACE_SLAMDirectionalMine_Magnetic_Ammo: SLAMDirectionalMine_Wire_Ammo {
mineTrigger = "ACE_MagneticTrigger";
GVAR(explodeOnDefuseChance) = 1;
explosionAngle = 360;
indirectHitRange = 1;
explosionAngle = 60;
hit = 3000;
indirectHit = 3000;
indirectHitRange = 10;
mineInconspicuousness = 25;
icon = "iconExplosiveGP";
};

class PipeBombBase;
class DemoCharge_Remote_Ammo: PipeBombBase {
class DemoCharge_Remote_Ammo;
class ACE_DemoCharge_Remote_Ammo: DemoCharge_Remote_Ammo {
GVAR(magazine) = "DemoCharge_Remote_Mag";
GVAR(size) = 0;
GVAR(defuseObjectPosition)[] = {0.07, 0, 0.055};
Expand All @@ -81,6 +103,7 @@ class CfgAmmo {
indirectHit = 500;
indirectHitRange = 7;
};
class PipeBombBase;
class SatchelCharge_Remote_Ammo: PipeBombBase {
GVAR(magazine) = "SatchelCharge_Remote_Mag";
GVAR(size) = 0;
Expand Down Expand Up @@ -157,7 +180,6 @@ class CfgAmmo {
GVAR(size) = 0;
GVAR(defuseObjectPosition)[] = {0, 0, 0.15};
};
class MineBase;
class UnderwaterMine_Range_Ammo: MineBase {
GVAR(size) = 1;
};
Expand Down
5 changes: 5 additions & 0 deletions addons/explosives/CfgEventHandlers.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -44,4 +44,9 @@ class Extended_Init_EventHandlers {
class ACE_Explosives_Place_SLAM {
ADDON = QUOTE(params ['_mine']; if (local _mine) then {_mine setCenterOfMass [ARR_3(0,-0.035,0.05)]; _mine setMass 5});
};
class ACE_ModuleMine_SLAMBottomMine {
class ADDON {
init = QUOTE(params ['_mine']; if (local _mine) then { [ARR_2({_this call CALLSTACK(BIS_fnc_setPitchBank)},[ARR_3(_mine,MINE_PITCH_UP,0)])] call CBA_fnc_execNextFrame });
};
};
};
2 changes: 1 addition & 1 deletion addons/explosives/CfgMagazines.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -87,7 +87,7 @@ class CfgMagazines {
displayName = CSTRING(SLAME_Magnetic);
digDistance = 0;
ammo = "ACE_SLAMDirectionalMine_Magnetic_Ammo";
pitch = 90;
pitch = MINE_PITCH_UP;
};
class IRSensor {
displayName = CSTRING(SLAME_IRSensor);
Expand Down
13 changes: 12 additions & 1 deletion addons/explosives/CfgVehicles.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -364,7 +364,6 @@ class CfgVehicles {
author = ECSTRING(common,aceteam);
ammo = "ACE_SLAMDirectionalMine_Magnetic_Ammo";
displayName = CSTRING(Module_SLAMBottomAttack_DisplayName);
// TODO: Find a way to place the mine laying down instead of standing up
};

class APERSTripMine: MineBase {};
Expand All @@ -374,6 +373,18 @@ class CfgVehicles {
displayName = CSTRING(TripFlare_Name);
};

class Claymore_F: MineBase {
ammo = "ACE_ClaymoreDirectionalMine_Remote_Ammo";
};

class APERSBoundingMine: MineBase {
ammo = "ACE_APERSBoundingMine_Range_Ammo";
};

class DemoCharge_F: MineBase {
ammo = "ACE_DemoCharge_Remote_Ammo";
};

class IEDUrbanBig_F;
class ACE_IEDUrbanBig_Range: IEDUrbanBig_F {
author = ECSTRING(common,aceteam);
Expand Down
8 changes: 8 additions & 0 deletions addons/explosives/XEH_postInit.sqf
Original file line number Diff line number Diff line change
Expand Up @@ -53,6 +53,14 @@ if (isServer) then {
TRACE_1("Knocked Out, Doing Deadman",_unit);
[_unit] call FUNC(onIncapacitated);
}] call CBA_fnc_addEventHandler;

// Orient all Editor-placed SLAM (Bottom attack) mines facing upward
{
private _mine = _x;
if (typeOf _mine == "ACE_SLAMDirectionalMine_Magnetic_Ammo") then {
[_mine, MINE_PITCH_UP, 0] call CALLSTACK(BIS_fnc_setPitchBank);
};
} forEach allMines;
};

if (!hasInterface) exitWith {};
Expand Down
14 changes: 10 additions & 4 deletions addons/explosives/config.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -54,9 +54,15 @@ class CfgActions {
};

class CfgMineTriggers {
class RangeTrigger;
class ACE_MagneticTrigger: RangeTrigger {
mineMagnetic = 1;
mineTriggerRange = 1;
class IRTrigger;
class ACE_MagneticTrigger: IRTrigger {
mineWireEnd[] = {0,0.1,0.5};
};

class TankTriggerMagnetic;
class ACE_TankTriggerLight: TankTriggerMagnetic {
// Reduce mass needed to trigger vanilla AT Mine to realistic levels (https://en.wikipedia.org/wiki/M15_mine#Specifications).
// Will now trigger for any vehicle heavier than the Vanilla ATV (280kg)
mineTriggerMass = 300; // Default: 7000
};
};
2 changes: 2 additions & 0 deletions addons/explosives/script_component.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -34,3 +34,5 @@
#define PLACE_WAITING -1
#define PLACE_CANCEL 0
#define PLACE_APPROVE 1

#define MINE_PITCH_UP 90
13 changes: 10 additions & 3 deletions addons/frag/CfgAmmoFragParameters.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -242,7 +242,7 @@ class ATMine_Range_Ammo: MineBase {

class APERSMine_Range_Ammo: MineBase { // VS-50
GVAR(skip) = 0;
GVAR(force) = 0;
GVAR(force) = 1;
GVAR(classes)[] = {QGVAR(tiny_HD), QGVAR(tiny_HD), QGVAR(small_HD)};
GVAR(metal) = 100;
GVAR(charge) = 50;
Expand All @@ -251,7 +251,7 @@ class APERSMine_Range_Ammo: MineBase { // VS-50
};

class APERSBoundingMine_Range_Ammo: BoundingMineBase {
GVAR(skip) = 1;
GVAR(skip) = 0;
GVAR(force) = 0;
GVAR(classes)[] = {QGVAR(tiny_HD)};
GVAR(metal) = 80;
Expand Down Expand Up @@ -336,7 +336,14 @@ class APERSMineDispenser_Mine_Ammo: APERSMine_Range_Ammo {
class UXO_deploy_base_f: SubmunitionBase {};

class ClaymoreDirectionalMine_Remote_Ammo: DirectionalBombBase {
GVAR(skip) = 1;
GVAR(skip) = 0;
GVAR(force) = 0;
GVAR(classes)[] = {QGVAR(tiny), QGVAR(small)};
GVAR(fragCount) = 700;
GVAR(metal) = 700;
GVAR(charge) = 680;
GVAR(gurney_c) = 2700;
GVAR(gurney_k) = "3/5";
};

class SatchelCharge_Remote_Ammo: PipeBombBase {
Expand Down