Compare commits
2 Commits
aj_cbrn
...
7c8cd6104b
| Author | SHA1 | Date | |
|---|---|---|---|
|
7c8cd6104b
|
|||
|
7322799b78
|
2
.gitignore
vendored
2
.gitignore
vendored
@@ -2,3 +2,5 @@
|
|||||||
# Notepad++ backups #
|
# Notepad++ backups #
|
||||||
*.bak
|
*.bak
|
||||||
|
|
||||||
|
|
||||||
|
.vscode/
|
||||||
|
|||||||
@@ -1,18 +0,0 @@
|
|||||||
class AJDJ
|
|
||||||
{
|
|
||||||
class CBRN
|
|
||||||
{
|
|
||||||
file = "AJ_CBRN_V2\functions";
|
|
||||||
class zenModules{ postInit = 1; };
|
|
||||||
class createArea{};
|
|
||||||
class chemicalParticleLoop{};
|
|
||||||
class chemicalDamage{};
|
|
||||||
class getProtectionLevel{};
|
|
||||||
class equipMask{};
|
|
||||||
class chemicalInitClient{};
|
|
||||||
class chemicalDetector{};
|
|
||||||
class unconAlarm{};
|
|
||||||
class chemicalAlarm{};
|
|
||||||
class deleteArea{};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
@@ -1,13 +0,0 @@
|
|||||||
|
|
||||||
class chemical_alarm
|
|
||||||
{
|
|
||||||
name = "chemical_alarm";
|
|
||||||
sound[] = {"AJ_CBRN_V2\sounds\AJ_warning_2.ogg", 0.9, 1, 3}; //directory, volume, pitch, range
|
|
||||||
titles[]={};
|
|
||||||
};
|
|
||||||
class uncon_alarm
|
|
||||||
{
|
|
||||||
name = "uncon_alarm";
|
|
||||||
sound[] = {"AJ_CBRN_V2\sounds\AJ_warning_1.ogg", 0.9, 1, 5}; //directory, volume, pitch, range
|
|
||||||
titles[]={};
|
|
||||||
};
|
|
||||||
@@ -1,2 +0,0 @@
|
|||||||
#include "CfgFunctions.hpp"
|
|
||||||
#include "CfgSounds.hpp"
|
|
||||||
@@ -1,12 +0,0 @@
|
|||||||
//chemical detector audible warning of lethal levels of contamianation
|
|
||||||
//gets triggered when activating chemical trigger
|
|
||||||
//turns off when exiting the chemical trigger
|
|
||||||
|
|
||||||
while { true } do {
|
|
||||||
|
|
||||||
if ("ChemicalDetector_01_watch_F" in (assignedItems player)) then {
|
|
||||||
// play the sound
|
|
||||||
playSound "chemical_alarm";
|
|
||||||
};
|
|
||||||
sleep 5;
|
|
||||||
};
|
|
||||||
@@ -1,39 +0,0 @@
|
|||||||
if (!hasInterface) exitWith {};
|
|
||||||
waitUntil {
|
|
||||||
!isNull player
|
|
||||||
};
|
|
||||||
|
|
||||||
params ["_trg"];
|
|
||||||
|
|
||||||
// start the alarm audio script (includes checking for device)
|
|
||||||
private _alarmHandle = ([] spawn AJDJ_fnc_chemicalAlarm);
|
|
||||||
|
|
||||||
// main loop for doing hurty things when in chemical area
|
|
||||||
while { player inArea _trg } do {
|
|
||||||
// check for player protection level
|
|
||||||
private _protectionLevel = call AJDJ_fnc_getProtectionLevel;
|
|
||||||
|
|
||||||
//if the player does not have full protection
|
|
||||||
if !(_protectionLevel == 2) then {
|
|
||||||
//if the player does not have mask protection
|
|
||||||
if (_protectionLevel == 1) then {
|
|
||||||
|
|
||||||
sleep 5.0;
|
|
||||||
|
|
||||||
_limbSelection = selectRandom ["body", "head", "hand_r", "hand_l", "leg_r", "leg_l"];
|
|
||||||
[player, 0.2, _limbSelection, "vehiclecrash"] call ace_medical_fnc_addDamageToUnit;
|
|
||||||
} else {
|
|
||||||
|
|
||||||
// deal the damage
|
|
||||||
_limbSelection = selectRandom ["body", "head", "hand_r", "hand_l", "leg_r", "leg_l"];
|
|
||||||
[player, 0.2, _limbSelection, "vehiclecrash"] call ace_medical_fnc_addDamageToUnit;
|
|
||||||
|
|
||||||
// deal it again for extra speedy killing
|
|
||||||
_limbSelection = selectRandom ["body", "head", "hand_r", "hand_l", "leg_r", "leg_l"];
|
|
||||||
[player, 0.2, _limbSelection, "vehiclecrash"] call ace_medical_fnc_addDamageToUnit;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
sleep 5;
|
|
||||||
};
|
|
||||||
|
|
||||||
terminate _alarmHandle;
|
|
||||||
@@ -1,80 +0,0 @@
|
|||||||
/*
|
|
||||||
Chemical Detector script by Ajdj100
|
|
||||||
Version 1.0.0
|
|
||||||
|
|
||||||
Adds functionality to the chemical detector
|
|
||||||
|
|
||||||
call this script from initPlayerLocal.sqf (example on line 16).
|
|
||||||
|
|
||||||
|
|
||||||
Parameters:
|
|
||||||
0: Array of objects - the sources of contamination. (Required)
|
|
||||||
1: Number - the radius of contamination around the source object(s) in meters. (optional, defaults to 50m)
|
|
||||||
|
|
||||||
|
|
||||||
initPlayerLocal.sqf Example:
|
|
||||||
chemDetector = [[Chemical1], 250] execVM "chemicalDetector.sqf"; (Creates a contamination zone 250m around the location of the Chemical1 object)
|
|
||||||
*/
|
|
||||||
|
|
||||||
// if not a real gamer, exit
|
|
||||||
if (!hasInterface) exitWith {};
|
|
||||||
waitUntil {
|
|
||||||
!isNull player;
|
|
||||||
};
|
|
||||||
|
|
||||||
while { true } do {
|
|
||||||
// get all chemical areas
|
|
||||||
private _sources =+ (missionNamespace getVariable ["chemicalSources", []]);
|
|
||||||
|
|
||||||
// if there are chemical sources present, and the player has a chemical detector
|
|
||||||
if (!(_sources isEqualTo []) && ("ChemicalDetector_01_watch_F" in (assignedItems player))) then {
|
|
||||||
// sort based on distance to chemical source, including radius of chemical
|
|
||||||
private _sortedSources =+ [_sources, [], {
|
|
||||||
(_x distance player) - (_x getVariable "radius")
|
|
||||||
}] call BIS_fnc_sortBy;
|
|
||||||
|
|
||||||
// selects nearest source of chemical
|
|
||||||
private _source = (_sortedSources select 0);
|
|
||||||
|
|
||||||
// global threat variable (for use in audio functions)
|
|
||||||
private _threat = (10 - ((player distance _source) - (_source getVariable "radius")))/3 min 9.99 max 0 toFixed 2;
|
|
||||||
|
|
||||||
// do some stuff for the display
|
|
||||||
"ChemicalDetector" cutRsc ["RscWeaponChemicalDetector", "PLAIN", 1, false];
|
|
||||||
|
|
||||||
private _ui = uiNamespace getVariable "RscWeaponChemicalDetector";
|
|
||||||
if !(isNull _ui) then {
|
|
||||||
private _obj = _ui displayCtrl 101;
|
|
||||||
_obj ctrlAnimateModel ["Threat_Level_Source", parseNumber _threat, true];
|
|
||||||
};
|
|
||||||
|
|
||||||
// if the player is in a chemical zone
|
|
||||||
if ((parseNumber _threat) > 3) then {
|
|
||||||
// if the player is knocked out
|
|
||||||
if ((player getVariable "ACE_isUnconscious")) then {
|
|
||||||
//wait 20 seconds to detect uncon
|
|
||||||
sleep 20;
|
|
||||||
// loop until the player wakes up
|
|
||||||
// if !(player getVariable "ACE_isUnconscious") exitWith {
|
|
||||||
// systemChat "DEBUG unit woke up before alarm";
|
|
||||||
// };
|
|
||||||
waitUntil {
|
|
||||||
sleep 1;
|
|
||||||
[player] remoteExecCall ["AJDJ_fnc_unconAlarm", 0]; //THIS HAS A BUG, IT WONT TURN OFF AFTER ESCAPING THE GAS.
|
|
||||||
!(player getVariable "ACE_isUnconscious"); //THIS NEEDS TO BE SPAWNED AS A SEPERATE
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
} else { //default for if there are no chemical sources present
|
|
||||||
|
|
||||||
"ChemicalDetector" cutRsc ["RscWeaponChemicalDetector", "PLAIN", 1, false];
|
|
||||||
|
|
||||||
private _ui = uiNamespace getVariable "RscWeaponChemicalDetector";
|
|
||||||
if !(isNull _ui) then {
|
|
||||||
private _obj = _ui displayCtrl 101;
|
|
||||||
_obj ctrlAnimateModel ["Threat_Level_Source", 0.00, true];
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
sleep 0.5;
|
|
||||||
};
|
|
||||||
@@ -1,17 +0,0 @@
|
|||||||
/*
|
|
||||||
CBRN Script client side initialization Ajdj100
|
|
||||||
Version 0.1.0
|
|
||||||
|
|
||||||
Adds functionality to a few things for the client
|
|
||||||
Call this script from initPlayerLocal.sqf (example on line 10).
|
|
||||||
|
|
||||||
initPlayerLocal.sqf Example:
|
|
||||||
|
|
||||||
call AJDJ_fnc_chemicalInitClient;
|
|
||||||
*/
|
|
||||||
|
|
||||||
|
|
||||||
aceMask = ["EquipMask","Put on Gas Mask","",{call AJDJ_fnc_equipMask},{true}] call ace_interact_menu_fnc_createAction;
|
|
||||||
[player, 1, ["ACE_SelfActions", "ACE_Equipment"], aceMask] call ace_interact_menu_fnc_addActionToObject;
|
|
||||||
|
|
||||||
call AJDJ_fnc_chemicalDetector;
|
|
||||||
@@ -1,58 +0,0 @@
|
|||||||
/*
|
|
||||||
spawns the visible component of the chemical area
|
|
||||||
|
|
||||||
returns the particle source for use in deletion
|
|
||||||
*/
|
|
||||||
|
|
||||||
if (!hasInterface) exitWith {};
|
|
||||||
|
|
||||||
params ["_location", "_radius"];
|
|
||||||
|
|
||||||
_location set [2, 0];
|
|
||||||
|
|
||||||
private _pSource = ("#particlesource" createVehicleLocal _location);
|
|
||||||
_pSource setParticleParams
|
|
||||||
[
|
|
||||||
["\A3\data_f\ParticleEffects\Universal\Universal", 16, 12, 0, 8],
|
|
||||||
"", "Billboard", 1, 10, // animationName, type, timerPeriod, lifeTime
|
|
||||||
[0,0,-1000], // position relative to referenceObject
|
|
||||||
[0, 0, 0], // velocity
|
|
||||||
0, 0.005, 0.003925, 0.1, [5, 5], // rotation, weight, volume, rubbing, size
|
|
||||||
[[0.6, 0.6, 0.2, 0], [0.6, 0.6, 0.2, 0.7], [0.6, 0.6, 0.2, 0]], // colors
|
|
||||||
[1], // animationPhase
|
|
||||||
0, 0, // randomDirectionPeriod, randomDirectionIntensity
|
|
||||||
"", "", // onTimer, beforeDestroy
|
|
||||||
_pSource, // referenceObject
|
|
||||||
0, false, // angle, bounces
|
|
||||||
-1, [], // bounceOnSurface, emissiveColor
|
|
||||||
[0, 1, 0]// vectorDir - CANNOT be [0, 0, 0]
|
|
||||||
];
|
|
||||||
|
|
||||||
_pSource setDropInterval (0.5/_radius);
|
|
||||||
_pSource setParticleCircle [(_radius/2), [0,1,0]];
|
|
||||||
/*
|
|
||||||
lifeTime,
|
|
||||||
position,
|
|
||||||
moveVelocity,
|
|
||||||
rotationVelocity,
|
|
||||||
size,
|
|
||||||
color,
|
|
||||||
directionPeriod,
|
|
||||||
directionIntensity,
|
|
||||||
angle,
|
|
||||||
bounceOnSurface
|
|
||||||
*/
|
|
||||||
_pSource setParticleRandom
|
|
||||||
[
|
|
||||||
0,
|
|
||||||
[(_radius/2), (_radius/2), 1],
|
|
||||||
[0, 0, 0.5],
|
|
||||||
4,
|
|
||||||
1,
|
|
||||||
[0, 0, 0, 0],
|
|
||||||
0,
|
|
||||||
0
|
|
||||||
];
|
|
||||||
|
|
||||||
//return the particle source
|
|
||||||
_pSource;
|
|
||||||
@@ -1,44 +0,0 @@
|
|||||||
/*
|
|
||||||
creates a new contamination area
|
|
||||||
|
|
||||||
Params:
|
|
||||||
0: Position array OR Object - The source of the contamination
|
|
||||||
1: Radius - the radius of contamination around the object
|
|
||||||
|
|
||||||
Location can be either a position array [x,y,z] or an object
|
|
||||||
[location, radius] call AJDJ_fnc_createArea;
|
|
||||||
*/
|
|
||||||
|
|
||||||
params ["_location", "_radius"];
|
|
||||||
|
|
||||||
//init temp for emitter object
|
|
||||||
private _emitterObject = _location;
|
|
||||||
|
|
||||||
if ("OBJECT" isEqualTo typeName _location) then {
|
|
||||||
_location = getPos _location;
|
|
||||||
} else {
|
|
||||||
_emitterObject = ("Land_GarbageBarrel_02_F" createVehicle _location);
|
|
||||||
};
|
|
||||||
|
|
||||||
//create trigger to control area
|
|
||||||
private _trg = createTrigger ["EmptyDetector", _location, false];
|
|
||||||
_trg setTriggerArea [_radius, _radius, 0, false, (_radius/2)];
|
|
||||||
_trg setTriggerActivation ["ANYPLAYER", "PRESENT", true];
|
|
||||||
_trg setTriggerStatements ["this", "[thisTrigger] spawn AJDJ_fnc_chemicalDamage", ""];
|
|
||||||
|
|
||||||
//start loop for particle effects
|
|
||||||
private _pSource = [_location, _radius, _emitterObject] call AJDJ_fnc_chemicalParticleLoop;
|
|
||||||
|
|
||||||
|
|
||||||
//bind variables
|
|
||||||
_trg setVariable ["pSource", _pSource]; //particle source
|
|
||||||
_trg setVariable ["radius", _radius]; //area of effect (for chemical detector use);
|
|
||||||
|
|
||||||
systemChat str _emitterObject;
|
|
||||||
//store trigger in barrel for deletion
|
|
||||||
_emitterObject setVariable ["trigger", _trg];
|
|
||||||
|
|
||||||
|
|
||||||
private _sources =+ (missionNamespace getVariable ["chemicalSources", []]);
|
|
||||||
_sources pushBack _trg;
|
|
||||||
missionNamespace setVariable ["chemicalSources", _sources];
|
|
||||||
@@ -1,18 +0,0 @@
|
|||||||
params["_target"];
|
|
||||||
|
|
||||||
if (_target isEqualTo objNull) exitWith {};
|
|
||||||
|
|
||||||
private _trg = (_target getVariable "trigger");
|
|
||||||
|
|
||||||
private _sources =+ (missionNamespace getVariable ["chemicalSources", []]);
|
|
||||||
_sources deleteAt (_sources find _trg);
|
|
||||||
missionNamespace setVariable ["chemicalSources", _sources];
|
|
||||||
|
|
||||||
// delete the particle emitter
|
|
||||||
deleteVehicle (_trg getVariable "pSource");
|
|
||||||
|
|
||||||
// set the trigger area to 0 (removes the area of effect)
|
|
||||||
// _trg setTriggerArea [0, 0, 0, false, 0];
|
|
||||||
|
|
||||||
deleteVehicle _trg;
|
|
||||||
deleteVehicle _target;
|
|
||||||
@@ -1,43 +0,0 @@
|
|||||||
/*
|
|
||||||
Gasmask equipping script by Ajdj100
|
|
||||||
Version 0.1.0
|
|
||||||
|
|
||||||
Script to allow players to equip gasmasks via ACE self interact if they are holding one in their inventory.
|
|
||||||
|
|
||||||
PASTE THE FOLLOWING INTO initPlayerLocal.sqf TO INITIALIZE:
|
|
||||||
|
|
||||||
aceMask = ["EquipMask","Put on Gas Mask","",{execVM "scripts\aceGasmask.sqf"},{true}] call ace_interact_menu_fnc_createAction;
|
|
||||||
[player, 1, ["ACE_SelfActions", "ACE_Equipment"], aceMask] call ace_interact_menu_fnc_addActionToObject;
|
|
||||||
*/
|
|
||||||
|
|
||||||
|
|
||||||
//if not a player, exit
|
|
||||||
if (!hasInterface) exitwith {};
|
|
||||||
|
|
||||||
// init lists of masks
|
|
||||||
private _allowedGoggles = [
|
|
||||||
"G_AirPurifyingRespirator_01_F",
|
|
||||||
"G_AirPurifyingRespirator_02_black_F",
|
|
||||||
"G_AirPurifyingRespirator_02_olive_F",
|
|
||||||
"G_AirPurifyingRespirator_02_sand_F"
|
|
||||||
];
|
|
||||||
|
|
||||||
private _items = items player;
|
|
||||||
|
|
||||||
private _availableGoggles = (_items arrayIntersect _allowedGoggles);
|
|
||||||
|
|
||||||
//if the player has a gasmask in their inventory
|
|
||||||
if !(_availableGoggles isEqualTo []) then {
|
|
||||||
|
|
||||||
//temporarily stores faceware
|
|
||||||
private _tempGoggles = goggles player;
|
|
||||||
|
|
||||||
//Swaps mask with current facewear
|
|
||||||
player addGoggles (_availableGoggles select 0);
|
|
||||||
player removeItem (_availableGoggles select 0);
|
|
||||||
player addItem _tempGoggles;
|
|
||||||
|
|
||||||
hint "Added mask"; //debug message
|
|
||||||
} else {
|
|
||||||
hint "No mask in inventory"
|
|
||||||
};
|
|
||||||
@@ -1,51 +0,0 @@
|
|||||||
/*
|
|
||||||
returns protection level of local player
|
|
||||||
*/
|
|
||||||
|
|
||||||
// init lists of protective equiptment
|
|
||||||
private _allowedGoggles = [
|
|
||||||
"G_AirPurifyingRespirator_01_F",
|
|
||||||
"G_AirPurifyingRespirator_02_black_F",
|
|
||||||
"G_AirPurifyingRespirator_02_olive_F",
|
|
||||||
"G_AirPurifyingRespirator_02_sand_F",
|
|
||||||
"G_RegulatorMask_F"
|
|
||||||
];
|
|
||||||
private _allowedUniforms = [
|
|
||||||
"U_B_CBRN_Suit_01_MTP_F",
|
|
||||||
"U_B_CBRN_Suit_01_Tropic_F",
|
|
||||||
"U_B_CBRN_Suit_01_Blue_F",
|
|
||||||
"U_B_CBRN_Suit_01_White_F",
|
|
||||||
"U_B_CBRN_Suit_01_Wdl_F",
|
|
||||||
"U_I_CBRN_Suit_01_AAF_F",
|
|
||||||
"U_I_E_CBRN_Suit_01_EAF_F"
|
|
||||||
];
|
|
||||||
private _allowedVehicles = [
|
|
||||||
"rhsusf_m1a2sep1wd_usarmy",
|
|
||||||
"rhsusf_m1a2sep1tuskiwd_usarmy",
|
|
||||||
"rhsusf_m1a2sep1tuskiiwd_usarmy",
|
|
||||||
"rhsusf_m1a2sep2wd_usarmy",
|
|
||||||
"RHS_M2A3_BUSKIII_wd",
|
|
||||||
"B_APC_Wheeled_01_cannon_F"
|
|
||||||
];
|
|
||||||
|
|
||||||
//init protection level variable
|
|
||||||
private _protectionLevel = 0;
|
|
||||||
|
|
||||||
// if they are wearing a mask
|
|
||||||
if (goggles player in _allowedGoggles) then {
|
|
||||||
// if they are wearing the suit
|
|
||||||
if (uniform player in _allowedUniforms) then {
|
|
||||||
_protectionLevel = 2;
|
|
||||||
} else {
|
|
||||||
_protectionLevel = 1;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
// if the player is in a protected vehicle
|
|
||||||
if (typeOf objectParent player in _allowedVehicles) then {
|
|
||||||
_protectionLevel = 2
|
|
||||||
};
|
|
||||||
|
|
||||||
//return
|
|
||||||
_protectionLevel;
|
|
||||||
@@ -1,8 +0,0 @@
|
|||||||
/*
|
|
||||||
Script to handle the audio alert for going unconsious in gas
|
|
||||||
By Ajdj100
|
|
||||||
|
|
||||||
version 0.1.0
|
|
||||||
*/
|
|
||||||
params ["_unit"];
|
|
||||||
_unit say3D "uncon_alarm";
|
|
||||||
@@ -1,27 +0,0 @@
|
|||||||
["CBRN", "Create Chemical Area",
|
|
||||||
{
|
|
||||||
params ["_position", "_attachedObj"];
|
|
||||||
|
|
||||||
["Chemical Area Option",
|
|
||||||
[[ "SLIDER:RADIUS", "Radius", [0, 500, 50, 0, _position, [1,0,0,1]]]],
|
|
||||||
{
|
|
||||||
params ["_dialog", "_args"];
|
|
||||||
_args params ["_position"];
|
|
||||||
_dialog params ["_radius"];
|
|
||||||
|
|
||||||
[_position, _radius] remoteExec ["AJDJ_fnc_createArea", 0, true];
|
|
||||||
},
|
|
||||||
{},
|
|
||||||
[_position, _attachedObj]
|
|
||||||
] call zen_dialog_fnc_create;
|
|
||||||
}
|
|
||||||
] call zen_custom_modules_fnc_register;
|
|
||||||
|
|
||||||
|
|
||||||
["CBRN", "Delete Chemical Area",
|
|
||||||
{
|
|
||||||
params ["_position", "_attachedObj"];
|
|
||||||
|
|
||||||
[_attachedObj] remoteExec ["AJDJ_fnc_deleteArea", 0, true];
|
|
||||||
}
|
|
||||||
] call zen_custom_modules_fnc_register;
|
|
||||||
@@ -1,43 +0,0 @@
|
|||||||
### How to add to mission:
|
|
||||||
|
|
||||||
Drag the AJ_CBRN_V2 folder into your mission folder and add the following line into class CfgFunctions in description.ext:
|
|
||||||
|
|
||||||
#include "AJ_CBRN_V2\CfgFunctions.hpp"
|
|
||||||
|
|
||||||
Add the following line into CfgSounds in description.ext:
|
|
||||||
|
|
||||||
#include "AJ_CBRN_V2\CfgSounds.hpp"
|
|
||||||
|
|
||||||
lastly, add the following line to initPlayerLocal.sqf:
|
|
||||||
|
|
||||||
call AJDJ_fnc_chemicalInitClient;
|
|
||||||
|
|
||||||
|
|
||||||
### How to use:
|
|
||||||
|
|
||||||
to create and delete a chemical area in zeus, use the modules under the CBRN tab.
|
|
||||||
|
|
||||||
to create a chemical area in editor or through script, use the following line:
|
|
||||||
|
|
||||||
[location, radius] call AJDJ_fnc_createArea;
|
|
||||||
|
|
||||||
location can be either an object, or an array of coordinates. Examples below:
|
|
||||||
|
|
||||||
[myObject, 40] call AJDJ_fnc_createArea;
|
|
||||||
|
|
||||||
[[6113.79,8642.26,0], 10] call AJDJ_fnc_createArea;
|
|
||||||
|
|
||||||
to delete an area through script, use the following line:
|
|
||||||
|
|
||||||
[object] call ["AJDJ_fnc_deleteArea", 0, true];
|
|
||||||
|
|
||||||
|
|
||||||
[IMPORTANT] note that these must be executed globally to function correctly. When using the init field of an object, it will automatically run globally
|
|
||||||
If you are working in an sqf, you will have to use remoteExec
|
|
||||||
|
|
||||||
|
|
||||||
currently all the CBRN equiptment from the contact DLC is supported. It is possible to add your own gear to this, but it involves editing a number of
|
|
||||||
arrays across a number of sqf's. In future I will make it easier to customize what gear provides protection.
|
|
||||||
|
|
||||||
|
|
||||||
Please reach out to me if you have any issues or suggestions at @ajdj100 on discord.
|
|
||||||
Binary file not shown.
Binary file not shown.
8
custom_sounds.hpp
Normal file
8
custom_sounds.hpp
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
|
||||||
|
// EXAMPLE
|
||||||
|
// class uncon_alarm
|
||||||
|
// {
|
||||||
|
// name = "uncon_alarm";
|
||||||
|
// sound[] = {"AJ_CBRN_V2\sounds\AJ_warning_1.ogg", 0.9, 1, 5}; //directory, volume, pitch, range
|
||||||
|
// titles[]={};
|
||||||
|
// };
|
||||||
@@ -84,30 +84,159 @@ class VehicleFlags {
|
|||||||
actionID = "flag_simpleshape";
|
actionID = "flag_simpleshape";
|
||||||
actionTitle = "Simple Shapes";
|
actionTitle = "Simple Shapes";
|
||||||
|
|
||||||
class GreenOctagon {
|
class Blue {
|
||||||
actionID = "flag_simpleshape_greenoctagon";
|
actionID = "flags_simpleshape_blue";
|
||||||
actionTitle = "Green Octagon";
|
actionTitle = "Blue";
|
||||||
texture = "textures\simple_shape\flag_simpleshape_greenoctagon_co.paa";
|
|
||||||
|
class BlueCircle {
|
||||||
|
actionID = "flag_simpleshape_bluecircle";
|
||||||
|
actionTitle = "Blue Circle";
|
||||||
|
texture = "textures\simple_shape\flag_simpleshape_bluecircle_co.paa";
|
||||||
|
};
|
||||||
|
class BlueOctagon {
|
||||||
|
actionID = "flag_simpleshape_blueoctagon";
|
||||||
|
actionTitle = "Blue Octagon";
|
||||||
|
texture = "textures\simple_shape\flag_simpleshape_blueoctagon_co.paa";
|
||||||
|
};
|
||||||
|
class BluePentagon {
|
||||||
|
actionID = "flag_simpleshape_bluepentagon";
|
||||||
|
actionTitle = "Blue Pentagon";
|
||||||
|
texture = "textures\simple_shape\flag_simpleshape_bluepentagon_co.paa";
|
||||||
|
};
|
||||||
|
class BlueSquare {
|
||||||
|
actionID = "flag_simpleshape_bluesquare";
|
||||||
|
actionTitle = "Blue Square";
|
||||||
|
texture = "textures\simple_shape\flag_simpleshape_bluesquare_co.paa";
|
||||||
|
};
|
||||||
|
class BlueTriangle {
|
||||||
|
actionID = "flag_simpleshape_bluetriangle";
|
||||||
|
actionTitle = "Blue Triangle";
|
||||||
|
texture = "textures\simple_shape\flag_simpleshape_bluetriangle_co.paa";
|
||||||
|
};
|
||||||
};
|
};
|
||||||
class BlueCircle {
|
|
||||||
actionID = "flag_simpleshape_bluecircle";
|
class Green {
|
||||||
actionTitle = "Blue Circle";
|
actionID = "flags_simpleshape_green";
|
||||||
texture = "textures\simple_shape\flag_simpleshape_bluecircle_co.paa";
|
actionTitle = "Green";
|
||||||
|
|
||||||
|
class GreenCircle {
|
||||||
|
actionID = "flag_simpleshape_greencircle";
|
||||||
|
actionTitle = "Green Circle";
|
||||||
|
texture = "textures\simple_shape\flag_simpleshape_greencircle_co.paa";
|
||||||
|
};
|
||||||
|
class GreenOctagon {
|
||||||
|
actionID = "flag_simpleshape_greenoctagon";
|
||||||
|
actionTitle = "Green Octagon";
|
||||||
|
texture = "textures\simple_shape\flag_simpleshape_greenoctagon_co.paa";
|
||||||
|
};
|
||||||
|
class GreenPentagon {
|
||||||
|
actionID = "flag_simpleshape_greenpentagon";
|
||||||
|
actionTitle = "Green Pentagon";
|
||||||
|
texture = "textures\simple_shape\flag_simpleshape_greenpentagon_co.paa";
|
||||||
|
};
|
||||||
|
class GreenSquare {
|
||||||
|
actionID = "flag_simpleshape_greensquare";
|
||||||
|
actionTitle = "Green Square";
|
||||||
|
texture = "textures\simple_shape\flag_simpleshape_greensquare_co.paa";
|
||||||
|
};
|
||||||
|
class GreenTriangle {
|
||||||
|
actionID = "flag_simpleshape_greentriangle";
|
||||||
|
actionTitle = "Green Triangle";
|
||||||
|
texture = "textures\simple_shape\flag_simpleshape_greentriangle_co.paa";
|
||||||
|
};
|
||||||
};
|
};
|
||||||
class OrangeSquare {
|
|
||||||
actionID = "flag_simpleshape_orangesquare";
|
class Orange {
|
||||||
actionTitle = "Orange Square";
|
actionID = "flags_simpleshape_orange";
|
||||||
texture = "textures\simple_shape\flag_simpleshape_orangesquare_co.paa";
|
actionTitle = "Orange";
|
||||||
|
|
||||||
|
class OrangeCircle {
|
||||||
|
actionID = "flag_simpleshape_orangecircle";
|
||||||
|
actionTitle = "Orange Circle";
|
||||||
|
texture = "textures\simple_shape\flag_simpleshape_orangecircle_co.paa";
|
||||||
|
};
|
||||||
|
class OrangeOctagon {
|
||||||
|
actionID = "flag_simpleshape_orangeoctagon";
|
||||||
|
actionTitle = "Orange Octagon";
|
||||||
|
texture = "textures\simple_shape\flag_simpleshape_orangeoctagon_co.paa";
|
||||||
|
};
|
||||||
|
class OrangePentagon {
|
||||||
|
actionID = "flag_simpleshape_orangepentagon";
|
||||||
|
actionTitle = "Orange Pentagon";
|
||||||
|
texture = "textures\simple_shape\flag_simpleshape_orangepentagon_co.paa";
|
||||||
|
};
|
||||||
|
class OrangeSquare {
|
||||||
|
actionID = "flag_simpleshape_orangesquare";
|
||||||
|
actionTitle = "Orange Square";
|
||||||
|
texture = "textures\simple_shape\flag_simpleshape_orangesquare_co.paa";
|
||||||
|
};
|
||||||
|
class OrangeTriangle {
|
||||||
|
actionID = "flag_simpleshape_orangetriangle";
|
||||||
|
actionTitle = "Orange Triangle";
|
||||||
|
texture = "textures\simple_shape\flag_simpleshape_orangetriangle_co.paa";
|
||||||
|
};
|
||||||
};
|
};
|
||||||
class PinkTriangle {
|
|
||||||
actionID = "flag_simpleshape_pinktriangle";
|
class Pink {
|
||||||
actionTitle = "Pink Triangle";
|
actionID = "flags_simpleshape_pink";
|
||||||
texture = "textures\simple_shape\flag_simpleshape_pinktriangle_co.paa";
|
actionTitle = "Pink";
|
||||||
|
|
||||||
|
class PinkCircle {
|
||||||
|
actionID = "flag_simpleshape_pinkcircle";
|
||||||
|
actionTitle = "Pink Circle";
|
||||||
|
texture = "textures\simple_shape\flag_simpleshape_pinkcircle_co.paa";
|
||||||
|
};
|
||||||
|
class PinkOctagon {
|
||||||
|
actionID = "flag_simpleshape_pinkoctagon";
|
||||||
|
actionTitle = "Pink Octagon";
|
||||||
|
texture = "textures\simple_shape\flag_simpleshape_pinkoctagon_co.paa";
|
||||||
|
};
|
||||||
|
class PinkPentagon {
|
||||||
|
actionID = "flag_simpleshape_pinkpentagon";
|
||||||
|
actionTitle = "Pink Pentagon";
|
||||||
|
texture = "textures\simple_shape\flag_simpleshape_pinkpentagon_co.paa";
|
||||||
|
};
|
||||||
|
class PinkSquare {
|
||||||
|
actionID = "flag_simpleshape_pinksquare";
|
||||||
|
actionTitle = "Pink Square";
|
||||||
|
texture = "textures\simple_shape\flag_simpleshape_pinksquare_co.paa";
|
||||||
|
};
|
||||||
|
class PinkTriangle {
|
||||||
|
actionID = "flag_simpleshape_pinktriangle";
|
||||||
|
actionTitle = "Pink Triangle";
|
||||||
|
texture = "textures\simple_shape\flag_simpleshape_pinktriangle_co.paa";
|
||||||
|
};
|
||||||
};
|
};
|
||||||
class RedPentagon {
|
|
||||||
actionID = "flag_simpleshape_redpentagon";
|
class Red {
|
||||||
actionTitle = "Red Pentagon";
|
actionID = "flags_simpleshape_red";
|
||||||
texture = "textures\simple_shape\flag_simpleshape_redpentagon_co.paa";
|
actionTitle = "Red";
|
||||||
|
|
||||||
|
class RedCircle {
|
||||||
|
actionID = "flag_simpleshape_redcircle";
|
||||||
|
actionTitle = "Red Circle";
|
||||||
|
texture = "textures\simple_shape\flag_simpleshape_redcircle_co.paa";
|
||||||
|
};
|
||||||
|
class RedOctagon {
|
||||||
|
actionID = "flag_simpleshape_redoctagon";
|
||||||
|
actionTitle = "Red Octagon";
|
||||||
|
texture = "textures\simple_shape\flag_simpleshape_redoctagon_co.paa";
|
||||||
|
};
|
||||||
|
class RedPentagon {
|
||||||
|
actionID = "flag_simpleshape_redpentagon";
|
||||||
|
actionTitle = "Red Pentagon";
|
||||||
|
texture = "textures\simple_shape\flag_simpleshape_redpentagon_co.paa";
|
||||||
|
};
|
||||||
|
class RedSquare {
|
||||||
|
actionID = "flag_simpleshape_redsquare";
|
||||||
|
actionTitle = "Red Square";
|
||||||
|
texture = "textures\simple_shape\flag_simpleshape_redsquare_co.paa";
|
||||||
|
};
|
||||||
|
class RedTriangle {
|
||||||
|
actionID = "flag_simpleshape_redtriangle";
|
||||||
|
actionTitle = "Red Triangle";
|
||||||
|
texture = "textures\simple_shape\flag_simpleshape_redtriangle_co.paa";
|
||||||
|
};
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -94,11 +94,10 @@ class Params {};
|
|||||||
class CfgFunctions {
|
class CfgFunctions {
|
||||||
#include "framework\CfgFunctions.hpp"
|
#include "framework\CfgFunctions.hpp"
|
||||||
#include "custom_scripts.hpp"
|
#include "custom_scripts.hpp"
|
||||||
#include "AJ_CBRN_V2\CfgFunctions.hpp"
|
|
||||||
};
|
};
|
||||||
|
|
||||||
class CfgSounds {
|
class CfgSounds {
|
||||||
#include "AJ_CBRN_V2\CfgSounds.hpp"
|
#include "custom_sounds.hpp"
|
||||||
};
|
};
|
||||||
|
|
||||||
class CfgLeaflets {
|
class CfgLeaflets {
|
||||||
|
|||||||
@@ -175,6 +175,8 @@ class DOUBLES(PREFIX,vehicleFlags) {
|
|||||||
class addFlagActions {};
|
class addFlagActions {};
|
||||||
class draw3D {};
|
class draw3D {};
|
||||||
class getActionsFlagCategories {};
|
class getActionsFlagCategories {};
|
||||||
|
class compileFlagAction {};
|
||||||
|
class compileFlagCategoryAction {};
|
||||||
class getVehicleFlagsCfg {};
|
class getVehicleFlagsCfg {};
|
||||||
class isClassExcluded {};
|
class isClassExcluded {};
|
||||||
};
|
};
|
||||||
|
|||||||
38
framework/vehicleFlags/functions/fn_compileFlagAction.sqf
Normal file
38
framework/vehicleFlags/functions/fn_compileFlagAction.sqf
Normal file
@@ -0,0 +1,38 @@
|
|||||||
|
params ["_target", "_player", "_params", "_flagOptionCfg"];
|
||||||
|
_params params ["_rootActionID", "_flagCategoryActionID", "_flagSubclassesCfgs"];
|
||||||
|
|
||||||
|
private _flagOptionID = getText(_flagOptionCfg >> "actionID");
|
||||||
|
private _flagOptionTitle = getText(_flagOptionCfg >> "actionTitle");
|
||||||
|
private _flagOptionTexture = getText(_flagOptionCfg >> "texture");
|
||||||
|
|
||||||
|
// if the texture doesn't exist at the config path, skip this flag option
|
||||||
|
if (not (fileExists _flagOptionTexture)) then {
|
||||||
|
diag_log format ["WARN: Flag option texture not found: %1", _flagOptionTexture];
|
||||||
|
continue
|
||||||
|
};
|
||||||
|
|
||||||
|
// diag_log format ["NewFlagOption: %1 %2", _flagOptionID, _flagOptionData];
|
||||||
|
|
||||||
|
private _newFlagOption = [
|
||||||
|
|
||||||
|
_rootActionID + "_" + _flagCategoryActionID + "_" + _flagOptionID, // id
|
||||||
|
_flagOptionTitle, // displayed title
|
||||||
|
_flagOptionTexture, // flag icon
|
||||||
|
{
|
||||||
|
params ["_target", "_player", "_params"];
|
||||||
|
_params params ["_flagOptionTexture"];
|
||||||
|
_target forceFlagTexture _flagOptionTexture;
|
||||||
|
}, // statement
|
||||||
|
{
|
||||||
|
params ["_target", "_player", "_params"];
|
||||||
|
alive _target;
|
||||||
|
// true;
|
||||||
|
}, // condition
|
||||||
|
nil, // child code
|
||||||
|
[_flagOptionTexture], // params
|
||||||
|
nil, // position
|
||||||
|
4, // distance
|
||||||
|
[false, false, false, false, false] // other params
|
||||||
|
] call ace_interact_menu_fnc_createAction;
|
||||||
|
|
||||||
|
_newFlagOption;
|
||||||
@@ -0,0 +1,52 @@
|
|||||||
|
// diag_log format ["NewFlagCategory: %1 %2", _flagCategory, _flagOptions];
|
||||||
|
|
||||||
|
params ["_rootActionID", "_flagCategoryCfg"];
|
||||||
|
private _flagCategoryActionID = getText(_flagCategoryCfg >> "actionID");
|
||||||
|
private _flagCategoryTitle = getText(_flagCategoryCfg >> "actionTitle");
|
||||||
|
|
||||||
|
private _flagSubclassesCfgs = _flagCategoryCfg call BIS_fnc_returnChildren;
|
||||||
|
|
||||||
|
private _flagCategoryAction = [
|
||||||
|
_rootActionID + "_" + _flagCategoryActionID, // id
|
||||||
|
_flagCategoryTitle, // displayed title
|
||||||
|
getText((_flagSubclassesCfgs#0) >> "texture"), // flag icon for category - use first flag option
|
||||||
|
{true}, // statement
|
||||||
|
{
|
||||||
|
params ["_target", "_player", "_params"];
|
||||||
|
alive _target;
|
||||||
|
// true;
|
||||||
|
}, // condition
|
||||||
|
{
|
||||||
|
// generate child code under category
|
||||||
|
// this is the level where actual flag options will be displayed
|
||||||
|
params ["_target", "_player", "_params"];
|
||||||
|
// these params are passed from the parent action
|
||||||
|
_params params ["_rootActionID", "_flagCategoryActionID", "_flagSubclassesCfgs"];
|
||||||
|
|
||||||
|
private _individualFlagActions = [];
|
||||||
|
{ // forEach _flagSubclassesCfgs; // we'll generate flag options for each category
|
||||||
|
private _flagOptionCfg = _x;
|
||||||
|
|
||||||
|
// generate flag option for this flag option
|
||||||
|
private _newFlagOption = [
|
||||||
|
_target,
|
||||||
|
_player,
|
||||||
|
_params,
|
||||||
|
_flagOptionCfg
|
||||||
|
] call FUNC(compileFlagAction);
|
||||||
|
|
||||||
|
// add flag option to category subactions
|
||||||
|
_individualFlagActions pushBack [_newFlagOption, [], _target];
|
||||||
|
} forEach _flagSubclassesCfgs;
|
||||||
|
|
||||||
|
// return the generated flag options to the category as child actions
|
||||||
|
_individualFlagActions;
|
||||||
|
}, // child code
|
||||||
|
[_rootActionID, _flagCategoryActionID, _flagSubclassesCfgs], // params
|
||||||
|
nil, // position
|
||||||
|
4, // distance
|
||||||
|
[false, false, false, false, false], // other params
|
||||||
|
nil // modifier function code
|
||||||
|
] call ace_interact_menu_fnc_createAction;
|
||||||
|
|
||||||
|
_flagCategoryAction;
|
||||||
@@ -11,80 +11,18 @@ params ["_rootActionID", "_flagCategoryCfgs"];
|
|||||||
private _allCategoryActions = [];
|
private _allCategoryActions = [];
|
||||||
|
|
||||||
{
|
{
|
||||||
// diag_log format ["NewFlagCategory: %1 %2", _flagCategory, _flagOptions];
|
_flagCategoryActions = [];
|
||||||
|
if (configName _x == "SimpleShapes") then {
|
||||||
private _flagCategoryCfg = _x;
|
|
||||||
private _flagCategoryActionID = getText(_flagCategoryCfg >> "actionID");
|
|
||||||
private _flagCategoryTitle = getText(_flagCategoryCfg >> "actionTitle");
|
|
||||||
|
|
||||||
private _flagSubclassesCfgs = _flagCategoryCfg call BIS_fnc_returnChildren;
|
|
||||||
|
|
||||||
private _flagCategoryAction = [
|
|
||||||
_rootActionID + "_" + _flagCategoryActionID, // id
|
|
||||||
_flagCategoryTitle, // displayed title
|
|
||||||
getText((_flagSubclassesCfgs#0) >> "texture"), // flag icon for category - use first flag option
|
|
||||||
{true}, // statement
|
|
||||||
{
|
{
|
||||||
params ["_target", "_player", "_params"];
|
_flagCategoryActions pushBack ([_rootActionID, _x] call FUNC(compileFlagCategoryAction));
|
||||||
alive _target;
|
} forEach (_x call BIS_fnc_returnChildren);
|
||||||
// true;
|
} else {
|
||||||
}, // condition
|
_flagCategoryActions pushBack (_x call FUNC(compileFlagCategoryAction));
|
||||||
{
|
};
|
||||||
// generate child code under category
|
|
||||||
// this is the level where actual flag options will be displayed
|
|
||||||
params ["_target", "_player", "_params"];
|
|
||||||
_params params ["_rootActionID", "_flagCategoryActionID", "_flagSubclassesCfgs"];
|
|
||||||
|
|
||||||
private _individualFlagActions = [];
|
|
||||||
{ // forEach _flagSubclassesCfgs;
|
|
||||||
private _flagOptionCfg = _x;
|
|
||||||
private _flagOptionID = getText(_flagOptionCfg >> "actionID");
|
|
||||||
private _flagOptionTitle = getText(_flagOptionCfg >> "actionTitle");
|
|
||||||
private _flagOptionTexture = getText(_flagOptionCfg >> "texture");
|
|
||||||
|
|
||||||
// if the texture doesn't exist at the config path, skip this flag option
|
|
||||||
if (not (fileExists _flagOptionTexture)) then {continue};
|
|
||||||
|
|
||||||
// diag_log format ["NewFlagOption: %1 %2", _flagOptionID, _flagOptionData];
|
|
||||||
|
|
||||||
private _newFlagOption = [
|
|
||||||
|
|
||||||
_rootActionID + "_" + _flagCategoryActionID + "_" + _flagOptionID, // id
|
|
||||||
_flagOptionTitle, // displayed title
|
|
||||||
_flagOptionTexture, // flag icon
|
|
||||||
{
|
|
||||||
params ["_target", "_player", "_params"];
|
|
||||||
_params params ["_flagOptionTexture"];
|
|
||||||
_target forceFlagTexture _flagOptionTexture;
|
|
||||||
}, // statement
|
|
||||||
{
|
|
||||||
params ["_target", "_player", "_params"];
|
|
||||||
alive _target;
|
|
||||||
// true;
|
|
||||||
}, // condition
|
|
||||||
nil, // child code
|
|
||||||
[_flagOptionTexture], // params
|
|
||||||
nil, // position
|
|
||||||
4, // distance
|
|
||||||
[false, false, false, false, false] // other params
|
|
||||||
] call ace_interact_menu_fnc_createAction;
|
|
||||||
|
|
||||||
// add flag option to category subactions
|
|
||||||
_individualFlagActions pushBack [_newFlagOption, [], _target];
|
|
||||||
} forEach _flagSubclassesCfgs;
|
|
||||||
|
|
||||||
// return the generated flag options to the category as child actions
|
|
||||||
_individualFlagActions;
|
|
||||||
}, // child code
|
|
||||||
[_rootActionID, _flagCategoryActionID, _flagSubclassesCfgs], // params
|
|
||||||
nil, // position
|
|
||||||
4, // distance
|
|
||||||
[false, false, false, false, false], // other params
|
|
||||||
nil // modifier function code
|
|
||||||
] call ace_interact_menu_fnc_createAction;
|
|
||||||
|
|
||||||
// add category to all category actions array
|
// add category to all category actions array
|
||||||
_allCategoryActions pushBack [_flagCategoryAction, [], _target];
|
{
|
||||||
|
_allCategoryActions pushBack [_x, [], _target];
|
||||||
|
} forEach _flagCategoryActions;
|
||||||
} forEach _flagCategoryCfgs;
|
} forEach _flagCategoryCfgs;
|
||||||
|
|
||||||
_allCategoryActions;
|
_allCategoryActions;
|
||||||
Binary file not shown.
BIN
textures/simple_shape/flag_simpleshape_blueoctagon_co.paa
Normal file
BIN
textures/simple_shape/flag_simpleshape_blueoctagon_co.paa
Normal file
Binary file not shown.
BIN
textures/simple_shape/flag_simpleshape_bluepentagon_co.paa
Normal file
BIN
textures/simple_shape/flag_simpleshape_bluepentagon_co.paa
Normal file
Binary file not shown.
BIN
textures/simple_shape/flag_simpleshape_bluesquare_co.paa
Normal file
BIN
textures/simple_shape/flag_simpleshape_bluesquare_co.paa
Normal file
Binary file not shown.
BIN
textures/simple_shape/flag_simpleshape_bluetriangle_co.paa
Normal file
BIN
textures/simple_shape/flag_simpleshape_bluetriangle_co.paa
Normal file
Binary file not shown.
BIN
textures/simple_shape/flag_simpleshape_greencircle_co.paa
Normal file
BIN
textures/simple_shape/flag_simpleshape_greencircle_co.paa
Normal file
Binary file not shown.
Binary file not shown.
BIN
textures/simple_shape/flag_simpleshape_greenpentagon_co.paa
Normal file
BIN
textures/simple_shape/flag_simpleshape_greenpentagon_co.paa
Normal file
Binary file not shown.
BIN
textures/simple_shape/flag_simpleshape_greensquare_co.paa
Normal file
BIN
textures/simple_shape/flag_simpleshape_greensquare_co.paa
Normal file
Binary file not shown.
BIN
textures/simple_shape/flag_simpleshape_greentriangle_co.paa
Normal file
BIN
textures/simple_shape/flag_simpleshape_greentriangle_co.paa
Normal file
Binary file not shown.
BIN
textures/simple_shape/flag_simpleshape_orangecircle_co.paa
Normal file
BIN
textures/simple_shape/flag_simpleshape_orangecircle_co.paa
Normal file
Binary file not shown.
BIN
textures/simple_shape/flag_simpleshape_orangeoctagon_co.paa
Normal file
BIN
textures/simple_shape/flag_simpleshape_orangeoctagon_co.paa
Normal file
Binary file not shown.
BIN
textures/simple_shape/flag_simpleshape_orangepentagon_co.paa
Normal file
BIN
textures/simple_shape/flag_simpleshape_orangepentagon_co.paa
Normal file
Binary file not shown.
Binary file not shown.
BIN
textures/simple_shape/flag_simpleshape_orangetriangle_co.paa
Normal file
BIN
textures/simple_shape/flag_simpleshape_orangetriangle_co.paa
Normal file
Binary file not shown.
BIN
textures/simple_shape/flag_simpleshape_pinkcircle_co.paa
Normal file
BIN
textures/simple_shape/flag_simpleshape_pinkcircle_co.paa
Normal file
Binary file not shown.
BIN
textures/simple_shape/flag_simpleshape_pinkoctagon_co.paa
Normal file
BIN
textures/simple_shape/flag_simpleshape_pinkoctagon_co.paa
Normal file
Binary file not shown.
BIN
textures/simple_shape/flag_simpleshape_pinkpentagon_co.paa
Normal file
BIN
textures/simple_shape/flag_simpleshape_pinkpentagon_co.paa
Normal file
Binary file not shown.
BIN
textures/simple_shape/flag_simpleshape_pinksquare_co.paa
Normal file
BIN
textures/simple_shape/flag_simpleshape_pinksquare_co.paa
Normal file
Binary file not shown.
Binary file not shown.
BIN
textures/simple_shape/flag_simpleshape_redcircle_co.paa
Normal file
BIN
textures/simple_shape/flag_simpleshape_redcircle_co.paa
Normal file
Binary file not shown.
BIN
textures/simple_shape/flag_simpleshape_redoctagon_co.paa
Normal file
BIN
textures/simple_shape/flag_simpleshape_redoctagon_co.paa
Normal file
Binary file not shown.
Binary file not shown.
BIN
textures/simple_shape/flag_simpleshape_redsquare_co.paa
Normal file
BIN
textures/simple_shape/flag_simpleshape_redsquare_co.paa
Normal file
Binary file not shown.
BIN
textures/simple_shape/flag_simpleshape_redtriangle_co.paa
Normal file
BIN
textures/simple_shape/flag_simpleshape_redtriangle_co.paa
Normal file
Binary file not shown.
Reference in New Issue
Block a user