ArmA 2 Object Compositions
ArmA 2 Forum, ArmA 2 Home, ArmA 2 Config, ArmA 2 File Formats, ArmA 2 Missions, ArmA 2 3D Modeling, ArmA 2 Scripting, ArmA 2 Terrain, ArmA 2 Texturing, ArmA 2 Tools
Introduction
The Dynamic Object module (DynO) was made to make spawning entire sets / templates of objects much easier (e.g. an entire base). It is possible to spawn specific sets of objects or ask a library for a random set matching a list of tags. The system is flexible so that anyone may grab new sets, register them and all systems using the DynO sets will spawn the new sets as well.
How to add bis compositions
To add one of the bis premade compositions simply create a gamelogic and the code below into the init field
_newComp = [(getPos this), (getDir this), "FuelDump1_US"] call (compile (preprocessFileLineNumbers "ca\modules\dyno\data\scripts\objectMapper.sqf"));
Where “FuelDump1_US” is the composition name you want to spawn (check composition library for names of bis compositions). You can also spawn compositions by searching the library for matching tags, for example:
_newComp = [(getPos this), random 360, ["usmc", "medium"]] call (compile (preprocessFileLineNumbers "ca\modules\dyno\data\scripts\objectMapper.sqf"));
Where “usmc” & “medium” are the tags used.
Creating custom compositions
How to create a custom composition:
1) Download the customized (from this post) objectGrabber & objectMapper scripts
2) Open the editor (2d) using the map “Render Island” or another island with some flat space.
3) Create & save a mission. Then put the objectGrabber.sqf script into the mission folder.
4) Place your objects on the map.
5) If you want a custom object init you have to use this format in the initialization field of the object otherwise it wont be grabbed: this setvariable [“VehicleInit”,“<YOUR INITSTRING>;”]
6) Place the player unit in the middle of your composition and put this in its init:
null = [getpos this,200] execVM "objectGrabber.sqf"; // (200 is the radius, adjust when needed).
7) Preview the mission, the objects are now written in arma2.rpt
8) Copy all text between “startgrabbing” and “endgrabbing” (not the ### lines) and paste this in the file composition_template.sqf at the marked area.
9) Remove , at the last line of the copied text.
// Example arma2.rpt: ["MASH",[0,0,0],0,1,0], ["Land_GuardShed",[35.9503,29.7019,0],0,1,0,{}], ["ACamp",[-41.3973,-33.6524,0],0,1,0,{}], // After editing: private ["_objs"]; _objs = [ ["MASH",[0,0,0],0,1,0], ["Land_GuardShed",[35.9503,29.7019,0],0,1,0,{}], ["ACamp",[-41.3973,-33.6524,0],0,1,0,{}] ]; _objs
It should now look like the example in with the scripts
10) Then save the file as “yourCompositionName.sqf”
Spawning custom compositions
To place your custom composition in your mission
1) Place the objectMapper.sqf file into your mission directory.
2) Create a folder called 'compositions' in your mission directory and place the composition there.
3) Place a game logic on the map and put this in the init: null = [“test_comp”, getDir this, getPos this] execVM “objectMapper.sqf (replace “test_comp” with your own compositioname without '.sqf')
4) Preview the mission and your composition is placed (you can place multiple and different compositions at once).
Compositions Library
List of classnames
SmallBase CityBase01 CityBase02 CityBase04 BunkerMedium01 BunkerMedium02 BunkerMedium03 BunkerMedium04 BunkerMedium05 BunkerMedium06 BunkerMedium07 BunkerMedium08 BunkerMedium09 BunkerMedium10 GuardPost_US GuardPost2_US GuardPost3_US GuardPost4_US GuardPost5_US GuardPost6_US GuardPost7_US GuardPost8_US SmallNest_US VehicleShelter_US FuelDepot_US CheckPoint1_US AntiAir1_US Firebase1_US FuelDump1_US RadarSite1_US VehicleParking1_US HeliParking1_US AirplaneParking1_US WeaponsStore1_US Camp1_US Camp2_US Camp3_US MediumTentCamp_RU MediumTentCamp2_RU MediumTentCamp3_RU AntiAir1_RU Firebase1_RU FuelDump1_RU RadarSite1_RU VehicleParking1_RU HeliParking1_RU AirplaneParking1_RU WeaponsStore1_RU Camp1_RU Camp2_RU GuardPost_CDF VehicleShelter_CDF TankDitch_CDF TankDitch2_CDF CityBase03 BunkerSmall01 MediumTentCamp_napa SmallTentCamp_napa SmallTentCamp2_napa Camp1_INS Camp2_INS FiringRange1 FiringRange2 FiringRange3 FiringRange4 FiringRange5 FiringRange6 FiringRange7 FiringRange8 FiringRange9 FiringRange10 FiringRange11 FiringRange_Wreck1 FiringRange_Wreck2 FiringRange_Wreck3 FiringRange_Wreck4 FiringRange_Wreck5 FiringRange_Wreck6 FiringRange_Wreck7 FiringRange_Water1 FiringRange_Water2 List of classnames: OA SmallBase_EP1 CityBase01_EP1 CityBase02_EP1 CityBase04_EP1 BunkerMedium01_EP1 BunkerMedium02_EP1 BunkerMedium03_EP1 BunkerMedium04_EP1 BunkerMedium05_EP1 BunkerMedium06_EP1 BunkerMedium07_EP1 BunkerMedium08_EP1 BunkerMedium09_EP1 BunkerMedium10_EP1 GuardPost_US_EP1 GuardPost2_US_EP1 GuardPost3_US_EP1 GuardPost4_US_EP1 GuardPost5_US_EP1 GuardPost6_US_EP1 GuardPost7_US_EP1 GuardPost8_US_EP1 SmallNest_US_EP1 VehicleShelter_US_EP1 FuelDepot_US_EP1 CheckPoint1_US_EP1 AntiAir1_US_EP1 Firebase1_US_EP1 FuelDump1_US_EP1 RadarSite1_US_EP1 VehicleParking1_US_EP1 HeliParking1_US_EP1 AirplaneParking1_US_EP1 WeaponsStore1_US_EP1 Camp1_US_EP1 Camp2_US_EP1 Camp3_US_EP1 MediumTentCamp_TK_EP1 MediumTentCamp2_TK_EP1 MediumTentCamp3_TK_EP1 AntiAir1_TK_EP1 Firebase1_TK_EP1 FuelDump1_TK_EP1 RadarSite1_TK_EP1 VehicleParking1_TK_EP1 HeliParking1_TK_EP1 AirplaneParking1_TK_EP1 WeaponsStore1_TK_EP1 Camp1_TK_EP1 Camp2_TK_EP1 GuardPost_CZ_EP1 VehicleShelter_CZ_EP1 TankDitch_CZ_EP1 TankDitch2_CZ_EP1 CityBase03_CZ_EP1 BunkerSmall01_CZ_EP1 MediumTentCamp_GUE_EP1 SmallTentCamp_GUE_EP1 SmallTentCamp2_GUE_EP1 Camp1_TKM_EP1 Camp2_TKM_EP1 MPA_infoKiosk1 MPA_infoKiosk2 MPA_infoKiosk3
Example
Code to create all compositions on map with named markers. In editor all you need is a player unit and then the code below into init.sqf. Use ALT-LMB to teleport around.
// init.sqf private["_posX", "_posY", "_i", "_cfg", "_count", "_cfgiName", "_markerName", "_cfgiTags"]; sleep 1; _posX = (getPos player) select 0; _posY = ((getPos player) select 1) + 50; // Read Config File _cfg =(configFile >> "CfgObjectCompositions"); _count = count _cfg; hintSilent "Starting Composition Generation..."; for [{_i = 0}, {_i < _count}, {_i = _i + 1}] do { _cfgiName = configName (_cfg select _i); _cfgiTags = getArray ((_cfg select _i) >> "tags"); // Create Marker _markerName = createMarker["mrk" + _cfgiName, [_posX + (_i%8)*400, _posY + floor(_i/8)*90 + (_i%2)*45]]; _markerName setMarkerShape "ICON"; _markerName setMarkerType "FOB"; _markerName setMarkerText _cfgiName; // Marker Color if ("west" in _cfgiTags) then { _markerName setMarkerColor "ColorBlue"; }; if ("east" in _cfgiTags) then { _markerName setMarkerColor "ColorRed"; }; if ("resistance" in _cfgiTags) then { _markerName setMarkerColor "ColorYellow"; }; // Create Composition _newComp = [(getMarkerPos _markerName), (markerDir _markerName), _cfgiName] call (compile (preprocessFileLineNumbers "ca\modules\dyno\data\scripts\objectMapper.sqf")); }; hintSilent "..done!"; // Teleport with ALT + LMB onMapSingleClick " if ((local player) and _alt) then { (vehicle player) setPos _pos; }";