Jump to content
🛡️FORUMS ARE IN READ-ONLY MODE Read more... ×

WulfyWulf

Member
  • Content Count

    16
  • Joined

  • Last visited

  • Medals

Community Reputation

10 Good

About WulfyWulf

  • Rank
    Private First Class

Recent Profile Visitors

The recent visitors block is disabled and is not being shown to other users.

  1. For now, I've only added support for the new uniform/vest/backpack inventory system in A3. Before, A2's system (and the most recent version of Murk Spawn) uses the old, generic magazines/items system, so things can be misplaced (an item a unit has in their vest could end up in their uniform, for example). The changes I'm working on ensures that the inventory the soldier has is the same as when he was loaded into the world- particularly anything exported by Virtual Arsenal. There's also some various fixes to stop errors being spammed in the RPT file, but that's not really a functional change. I'm hoping to make the gear handling system in Murk Spawn more robust and take better advantage of A3's additions. Right now, I'm working on a more thorough solution for vehicles and their crews- right now, vehicles use the system present in the last version of Murk Spawn for handling the spawning of vehicles and their crews. To properly answer your question, not a whole lot is changed in my version- just posting a build I'm working on right now to see who else might have interest in working on this again as well.
  2. I feel this best belongs in this original thread, as I feel uncomfortable making a new thread from someone else's work I've altered. I've made some effort at updating and overhauling Murk Spawn to take advantage of the new features of A3 instead of just being a straight compatibility patch, specifically adding support for the correct uniform/vest/backpack belongings. I've also gone through and done my best to correct some RPT errors, but some problems remain (see later). Part of this is because I wanted to make Murk Spawn take advantage of virtual arsenal exported gear, and infantry seems to implemented correctly- the code probably needs refactoring, as the unitInfoArray is getting really cluttered and need to have some checks to not try to add nonexistent uniforms/vests/backpacks if the original unit lacked one (this spams the RPT). I'm posting this mostly to revive work on this useful script as well as to ask for help in continuing from the point I'm at. My current build does not work well with the vehicles- I've tried to clean up what garbled code exists from me trying to mess with it. It would be best if the crews of the vehicles were treated as units in the group and could have their individual loadouts treated like infantry is. Currently, Murk Spawn just creates the type of unit that was in the crew- not ideal with A3's new inventory system. Ideally, we should have the crews separated from the vehicle and have their despawn managed in the same way as infantry, and then crewed back to the spawned vehicle on trigger. This is notably harder to implement than the current system. It might be best to think about redoing the way units are de/respawned, as it segregates infantry and vehicles and doesn't handle crew at all. Here is my working build (!this isn't fully functional!) of my edits to the last update to Murk Spawn: http://pastebin.com/TQZRKrQM // File: murk_spawn.sqf // Function: To allow for simple trigger based spawning using editor placed units and waypoints. The script deletes all units when the mission start and the recreate them on command. // Parameters: // _this select 0: OBJECT - unit name (this) // _this select 1: STRING - spawn type ("once","repeated","wave" and "reset") // _this select 2 (optional): NUMBER - spawn lives (the amount of time the unit respawns, or wave number) // _this select 3 (optional): NUMBER - spawn delay // _this select 4 (optional): STRING - init string called for the leader of the group // _this select 5 (optional): NUMBER- will start removal sequence of all dead group members after X seconds (default 120) // Usage: // Example trigger: Anybody Once (or whatever you want), onActivation: triggername setVariable ["murk_spawn",true,true]; // Unit (leader of group): nul = [this,"SPAWNTYPE",LIVES,DELAY] execVM "murk_spawn.sqf"; // // Example: nul = [this,"once"] execVM "murk_spawn3.sqf"; ---- Will spawn the editor unit once based on the trigger // Example: nul = [this,"repeated",4,30] execVM "murk_spawn.sqf"; ---- Will spawn the editor unit based on the trigger, then respawn it 4 times with a 30 second delay upon death // Example: nul = [this,"wave",5,60] execVM "murk_spawn.sqf"; ---- Will spawn the editor unit once based on the trigger, then respawn the entire group (regardless of deaths) 5 times with 60 seconds between // Example: nul = [this,"reset",5] execVM "murk_spawn.sqf"; ---- Will spawn the editor unit once based on the trigger, then reset the trigger after a preset time (15 seconds default). The unit will be created when trigger is true again, maximum number of lives. // ----------------------------------------------------------------------------------------------------- // V9.? Working Build (Wulfy Wulf) // - Change: unitInfoArray handles uniforms, vests, backpacks, and objects within now // - Fix: Some RPT errors from incorrect conditions not entering or terminating properly // - Fix: Some RPT errors from spawnUnit initializing to Object- uses null now // V9 (Murklor again :p) // - Note: Initial Arma 3 test script. Note that some functionality from V8/V7 has been taken out because my brain is too foggy to understand everything, this is simplified. Sort of. // - Fix: setVehicleInit has been removed from A3, testing another way // - Add: New example mission on Stratis // - Change: The trigger variable is held in the object that is synchronized to the group for improved WYSIWYG. This means that the trigger argument is no longer needed. // - Change: Updated this readme to reflect the changes // V8 (ArmAIIholic) // - Waypoints are also remembered -- no dummy groups at all!!! // - You get the output on Clipboard you can paste and execute. Added loader for Clipboard missions. // V7 (ArmAIIholic) // - Added GameLogic center to reduce number of dummy groups at the beginning, and in modes repeated and reset // - Changed beginning scope to isServer, rather than using exitWith // - Shortened initializing trigger part in init.sqf // - Added original instructions and examples, adapted for v7 // - SQM is from v5 with some groups added // V6 // - See older versions // This script is serverside if(isServer) then { // ------------------- Init ----------------------- // _countThis = count _this; _waitingPeriod = 5; // Waiting period between script refresh // ---------------- Parameters -------------------- // _unit = _this select 0; _spawntype = _this select 1; _spawnlives = if (_countThis >= 3) then { _this select 2; } else { 1 }; // Optional _spawndelay = if (_countThis >= 4) then { _this select 3; } else { 1 }; // Optional _initString = if (_countThis >= 5) then { _this select 4; } else { "" }; // Optional _bodyRemove = if (_countThis >= 6) then { _this select 5; } else { 120 }; // Optional // The object (trigger, whatever) the unit is synchronized to hold the trigger variable _triggerObject = (synchronizedObjects _unit) select 0; _triggerObject setVariable ["murk_spawn",false,false]; // -- Delete the unit (this is always done ASAP) -- // _unitArray = []; _unitGroup = group _unit; _unitsInGroup = units _unitGroup; _unitCount = count _unitsInGroup; _unitsInGroupAdd = []; _side = side _unitGroup; while { count units _unitGroup > 0 } do { // The currently worked on unit _unitsInGroup = units _unitGroup; _unit = _unitsInGroup select 0; _unitCount = count _unitsInGroup; diag_log format["Unit: %1, Units left: %2",_unit,units _unitGroup]; //hint format ["Deleting: %1 - vehicleVarName: %2", _unit, vehicleVarName _unit]; sleep 1; // Check if its a vehicle if ( (vehicle _unit) isKindOf "LandVehicle" OR (vehicle _unit) isKindOf "Air") then { _vcl = vehicle _unit; if (!(_vcl in _unitsInGroupAdd) AND (typeOf _vcl != "")) then { _unitsInGroupAdd set [count _unitsInGroupAdd, _vcl]; _unitCrewArray = []; _crew = crew _vcl; { _unitCrewArray set [count _unitCrewArray, typeOf _x]; } forEach _crew; _unitInfoArray = [ typeOf _vcl, getPos _vcl, getDir _vcl, vehicleVarName _vcl, skill _vcl, rank _vcl, _unitCrewArray, weapons _vcl, assignedItems _vcl, uniform _vcl, uniformItems _vcl, vest _vcl, vestItems _vcl, backpack _vcl, backpackItems _vcl, headgear _vcl, goggles _vcl ]; _unitArray set [count _unitArray, _unitInfoArray]; deleteVehicle _vcl; { deleteVehicle _x; } forEach _crew; }; } // Otherwise its infantry else { _unitInfoArray = [ typeOf _unit, getPos _unit, getDir _unit, vehicleVarName _unit, skill _unit, rank _unit, [], weapons _unit, assignedItems _unit, uniform _unit, uniformItems _unit, vest _unit, vestItems _unit, backpack _unit, backpackItems _unit, headgear _unit, goggles _unit ]; _unitArray set [count _unitArray, _unitInfoArray]; deleteVehicle _unit; }; sleep 0.01; }; // Gathering waypoints _countWaypoints = 0; _waypointsArray = []; _waypointsEntry = []; _countWaypoints = count(waypoints _unitGroup); for [{_i=0}, {_i < _countWaypoints}, {_i=_i+1}] do { _waypointsEntry = []; _wPos = waypointPosition [_unitGroup, _i]; _wHPos = waypointHousePosition [_unitGroup, _i]; _wBih = waypointBehaviour [_unitGroup, _i]; _wCM = waypointCombatMode [_unitGroup, _i]; _wCR = waypointCompletionRadius [_unitGroup, _i]; _wDes = waypointDescription [_unitGroup, _i]; _wForm = waypointFormation [_unitGroup, _i]; _wScr = waypointScript [_unitGroup, _i]; _wShw = waypointShow [_unitGroup, _i]; _wSp = waypointSpeed [_unitGroup, _i]; _wSt = waypointStatements [_unitGroup, _i]; //diag_log _wSt; _wTo = waypointTimeout [_unitGroup, _i]; _wTy = waypointType [_unitGroup, _i]; _waypointsEntry = _waypointsEntry + [_wPos] + [_wHPos] + [_wBih] + [_wCM] + [_wCR] + [_wDes] + [_wForm] + [_wScr] + [_wShw] + [_wSp] + [_wSt] + [_wTo] + [_wTy]; _waypointsArray = _waypointsArray + [_waypointsEntry]; }; //diag_log format ["Waypoints' array : %1",_waypointsArray]; deleteGroup _unitGroup; // ----------------- Functions -------------------- // // *WARNING* BIS FUNCTION RIPOFF - Taken from fn_returnConfigEntry as its needed for turrets and shortened a bit _fnc_returnConfigEntry = { private ["_config", "_entryName","_entry", "_value"]; _config = _this select 0; _entryName = _this select 1; _entry = _config >> _entryName; //If the entry is not found and we are not yet at the config root, explore the class' parent. if (((configName (_config >> _entryName)) == "") && (!((configName _config) in ["CfgVehicles", "CfgWeapons", ""]))) then { [inheritsFrom _config, _entryName] call _fnc_returnConfigEntry; } else { if (isNumber _entry) then { _value = getNumber _entry; } else { if (isText _entry) then { _value = getText _entry; }; }; }; //Make sure returning 'nil' works. if (isNil "_value") exitWith {nil}; _value; }; // *WARNING* BIS FUNCTION RIPOFF - Taken from fn_fnc_returnVehicleTurrets and shortened a bit _fnc_returnVehicleTurrets = { private ["_entry","_turrets", "_turretIndex"]; _entry = _this select 0; _turrets = []; _turretIndex = 0; //Explore all turrets and sub-turrets recursively. for "_i" from 0 to ((count _entry) - 1) do { private ["_subEntry"]; _subEntry = _entry select _i; if (isClass _subEntry) then { private ["_hasGunner"]; _hasGunner = [_subEntry, "hasGunner"] call _fnc_returnConfigEntry; //Make sure the entry was found. if (!(isNil "_hasGunner")) then { if (_hasGunner == 1) then { _turrets = _turrets + [_turretIndex]; //Include sub-turrets, if present. if (isClass (_subEntry >> "Turrets")) then { _turrets = _turrets + [[_subEntry >> "Turrets"] call _fnc_returnVehicleTurrets]; } else { _turrets = _turrets + [[]]; }; }; }; _turretIndex = _turretIndex + 1; }; }; _turrets; }; _fnc_moveInTurrets = { private ["_turrets","_path","_i"]; _turrets = _this select 0; _path = _this select 1; _currentCrewMember = _this select 2; _crew = _this select 3; _spawnUnit = _this select 4; _i = 0; while {_i < (count _turrets) AND _currentCrewMember < count _crew} do { _turretIndex = _turrets select _i; _thisTurret = _path + [_turretIndex]; (_crew select _currentCrewMember) moveInTurret [_spawnUnit, _thisTurret]; _currentCrewMember = _currentCrewMember + 1; //Spawn units into subturrets. [_turrets select (_i + 1), _thisTurret, _currentCrewmember, _crew, _spawnUnit] call _fnc_moveInTurrets; _i = _i + 2; }; }; // This is the general cleanup function running in the background for the group, replaces the removebody eventhandler and delete group in V5 _fnc_cleanGroup = { _group = _this select 0; _unitsGroup = units _group; _sleep = _this select 1; // Hold until the entire group is dead while { ({alive _x} count _unitsGroup) > 0 } do { sleep 5; }; sleep _sleep; { _origPos = getPos _x; _z = _origPos select 2; _desiredPosZ = if ( (vehicle _x) iskindOf "Man") then { (_origPos select 2) - 0.5 } else { (_origPos select 2) - 3 }; if ( vehicle _x == _x ) then { _x enableSimulation false; while { _z > _desiredPosZ } do { _z = _z - 0.01; _x setPos [_origPos select 0, _origPos select 1, _z]; sleep 0.1; }; }; deleteVehicle _x; sleep 5; } forEach _unitsGroup; // Now we know that all units are deleted deleteGroup _group; }; _fnc_spawnUnit = { // We need to pass the old group so we can copy waypoints from it, the rest we already know _oldGroup = _this select 0; _newGroup = createGroup (_this select 1); _waypointsArray = _this select 2; // If the old group doesnt have any units in it its a spawned group rather than respawned if ( count (units _oldGroup) == 0) then { deleteGroup _oldGroup; }; { _spawnUnit = null; _unitType = _x select 0; _unitPos = _x select 1; _unitDir = _x select 2; _unitName = _x select 3; _unitSkill = _x select 4; _unitRank = _x select 5; _unitCrew = _x select 6; // New A3 related gear _unitWeapons = _x select 7; _unitItems = _x select 8; _unitUniform = _x select 9; _unitUniformItems = _x select 10; _unitVest = _x select 11; _unitVestItems = _x select 12; _unitBackpack = _x select 13; _unitBackpackItems = _x select 14; _unitHeadgear = _x select 15; _unitGoggles = _x select 16; // Check if the unit has a crew, if so we know its a vehicle if (count _unitCrew > 0) then { if (_unitPos select 2 >= 10) then { _spawnUnit = createVehicle [_unitType,_unitPos, [], 0, "FLY"]; _spawnUnit setVelocity [50 * (sin _unitDir), 50 * (cos _unitDir), 0]; } else { _spawnUnit = _unitType createVehicle _unitPos; }; // Create the entire crew _crew = []; { _unit = _newGroup createUnit [_x, getPos _spawnUnit, [], 0, "NONE"]; _crew set [count _crew, _unit]; } forEach _unitCrew; // We assume that all vehicles have a driver, the first one of the crew (_crew select 0) moveInDriver _spawnUnit; // Count the turrets and move the men inside _turrets = [configFile >> "CfgVehicles" >> _unitType >> "turrets"] call _fnc_returnVehicleTurrets; [_turrets, [], 1, _crew, _spawnUnit] call _fnc_moveInTurrets; } // Otherwise its infantry else { _spawnUnit = _newGroup createUnit [_unitType,_unitPos, [], 0, "NONE"]; removeAllWeapons _spawnUnit; removeAllItems _spawnUnit; removeAllAssignedItems _spawnUnit; removeUniform _spawnUnit; removeVest _spawnUnit; removeBackpack _spawnUnit; removeHeadgear _spawnUnit; removeGoggles _spawnUnit; _spawnUnit forceAddUniform _unitUniform; {_spawnUnit addItemToUniform _x} forEach _unitUniformItems; _spawnUnit addVest _unitVest; {_spawnUnit addItemToVest _x} forEach _unitVestItems; _spawnUnit addBackpack _unitBackpack; {_spawnUnit addItemToBackpack _x} forEach _unitBackpackItems; _spawnUnit addHeadgear _unitHeadgear; _spawnUnit addGoggles _unitGoggles; {_spawnUnit linkItem _x} forEach _unitItems; {_spawnUnit addWeapon _x} forEach _unitWeapons; _spawnUnit selectWeapon (primaryWeapon _spawnUnit); }; // Set all the things common to the spawned unit _spawnUnit setDir _unitDir; _spawnUnit setSkill _unitSkill; _spawnUnit setUnitRank _unitRank; if (!isNil _unitName AND (_spawntype == "once" OR _spawntype == "repeated")) then { diag_log _unitName; _spawnUnit call compile format ["%1= _this; _this setVehicleVarName '%1'; PublicVariable '%1';",_unitName]; }; } forEach _unitArray; private ["_i"]; _i = 0; //Let's return them their waypoints { //diag_log format ["All data : %1",_x]; _wp = _newGroup addWaypoint [(_x select 0),0,_i]; [_newGroup, _i] setWaypointHousePosition (_x select 1); [_newGroup, _i] setWaypointBehaviour (_x select 2); [_newGroup, _i] setWaypointCombatMode (_x select 3); [_newGroup, _i] setWaypointCompletionRadius (_x select 4); [_newGroup, _i] setWaypointDescription (_x select 5); [_newGroup, _i] setWaypointFormation (_x select 6); [_newGroup, _i] setWaypointScript (_x select 7); [_newGroup, _i] showWaypoint (_x select 8); [_newGroup, _i] setWaypointSpeed (_x select 9); [_newGroup, _i] setWaypointStatements (_x select 10); [_newGroup, _i] setWaypointTimeout (_x select 11); [_newGroup, _i] setWaypointType (_x select 12); _i = _i + 1; } forEach _waypointsArray; (vehicle (leader _newGroup)) call compile format ["%1",_initString]; // hint format ["Created object: %1 - vehicleVarName: %2", (vehicle (leader _newGroup)), vehicleVarName (vehicle (leader _newGroup))]; sleep 1; // Run the cleanup function for this group [_newGroup, _bodyRemove] spawn _fnc_cleanGroup; // Have to return the new group _newGroup; }; // -------------- Waiting period ------------------ // while { !(_triggerObject getVariable "murk_spawn") } do { sleep _waitingPeriod; }; //hint "Triggered spawn!"; // --------------- Spawn Modes ------------------- // // REPEAT MODE, i.e. basic respawn based on lives if (_spawntype == "repeated") then { while { _spawnlives > 0 } do { _unitGroup = [_unitGroup,_side,_waypointsArray] call _fnc_spawnUnit; _spawnLives = _spawnLives - 1; _unitsGroup = units _unitGroup; while { ({alive _x} count _unitsGroup) > 0 } do { sleep 2; }; sleep _spawndelay; }; }; // WAVE MODE, this is fairly simple, just sleep a while then respawn. Spawnlives in this case is number of waves if (_spawntype == "wave") then { while { _spawnlives > 0 } do { _unitGroup = [_unitGroup,_side,_waypointsArray] call _fnc_spawnUnit; _spawnLives = _spawnLives - 1; sleep _spawndelay; }; }; // RESET MODE, sleep a while then set the variable to false (even if you set it like 50 times over). Spawn lives is used to tick how many times its possible to reset. if (_spawntype == "reset") then { while { _spawnlives > 0 } do { _unitGroup = [_unitGroup,_side,_waypointsArray] call _fnc_spawnUnit; _spawnLives = _spawnLives - 1; sleep 15; _triggerObject setVariable ["murk_spawn",false,false]; while { !(_triggerObject getVariable "murk_spawn") } do { sleep _waitingPeriod; }; }; }; // ONCE MODE if (_spawntype == "once") then { _unitGroup = [_unitGroup,_side,_waypointsArray] call _fnc_spawnUnit; }; }; If anyone wants to continue work from this version, please go right ahead (you don't need to credit me for my small changes) or send me a PM if you want to work on this further with me.
  3. Thanks, that second link in particular looks like it'll help. If I get what I described working, I'll report back with some sample code for my implementation.
  4. I'm working on a mission where I want certain objects hidden from a Zeus synced player when he is in the Zeus interface, but visible when he exits the interface and is moving as a normal unit. Is there a way to determine if a unit synced with the Zeus module- and is not in forced interface mode- has the interface open? I was looking in the curator functions, but I didn't see anything that looked like what I was looking for. Side question, is there a way to disable the Zeus remote control as an allowable module for Zeus to use?
  5. WulfyWulf

    Authentic Gameplay Modification

    Can anyone else confirm the following that I'm experiencing? When carrying wounded, it is only possible to load them into land vehicles, it is not possible to load them into helicopters (the interaction menu does not appear on helicopters when carrying wounded, only cars). Similarly, it is impossible to pull unconscious units out of FFV positions, as they get pulled out "onto" the seat and don't seem to be recognized as being in that vehicle slot (only tested this with the MH-9 benches) and are not able to be interacted with/are still attached to that position. Has anyone else run into this? I didn't see an issue related to it on the github. Running v0.94.0, didn't see anything related to this in the 0.94.1 changelog, so I wanted to ask if anyone else was experiencing this. I should also note that I have only tested being unable to pull wounded out of the MH-9 benches with players as the wounded, and not being able to load unconscious into helicopters with AI, but the scope may be beyond these cases? Repro steps using exactly what I've experienced so far: 1: Unable to load unconscious AI into helicopter 1a) Make an AI soldier able to be set unconscious 1b) Drag or carry him next to a helicopter 1c) Attempt to open interaction menu on the helicopter while carrying him- not possible? 2: Unable to pull unconscious player out of MH-9 skids 2a) Have a player sit on the skids of the MH-9 with FFV enabled 2b) Have the player fall unconscious 2c) Attempt to unload him using the interaction menu- he should change to the "on ground" animation but be stuck on the skids, cannot interact with or slide him off the seat? REPRO MISSION EXAMPLE: http://puu.sh/cLAh0/616ab5d99c.rar Included are a friendly and enemy unit who are both unconscious, and playable units on the skids and in the cargo position for player case testing. In the process of making this repro mission, part 2 of this issue seems to apply to AI as well and not just players as described above? I also experienced that if the unit on the skids goes unconscious, the player is unable to move in singleplayer/editor (until they vault?)? Similar but not exact issue: https://github.com/KoffeinFlummi/AGM/issues/1431 AI also seem to be unable to be pulled out of cargo positions, included a case for this in the repro mission.
  6. WulfyWulf

    Authentic Gameplay Modification

    Thanks. Was poking around in the source and figured out the right arguments, works great.
  7. WulfyWulf

    Authentic Gameplay Modification

    Can someone please explain the implementation of a knock-out script for AI units? Specifically for knocking a particular unit out by script. So far, I'm using: this setVariable ["AGM_AllowUnconscious", true]; and I've tried using the following interchangeably: this setVariable ["AGM_Unconscious", true]; [this] call AGM_Medical_fnc_knockOut; But they only put the unit into the unconscious animation- he is unable to be dragged, and diagnosing him lists him as "awake". It is possible to make the AI unconscious by shooting him after using AllowUnconscious, but I'm aiming to make the AI unconscious until called to awaken by script again. I'd like to make it impossible to use Epi on him to wake him up, but that's not the main problem I'm trying to work out right now. EDIT: Sorry for not exploring every option- turns out calling knockOut has to be done after a short delay, otherwise it gets reset after AGM initializes. Is this because of the medical initialization? Is there a variable that can be used to waitUntil rather than sleeping?
  8. WulfyWulf

    The new ARMA 3 DLC system - debate

    These are both excellent summaries of what I feel is wrong with this DLC strategy and the implications it has for A3's future, thank you. I wish I had a better alternative to suggest for BIS to turn to other than the suggested return to the OA DLC, with notifications that a given mission contains free versions of premium content. I think this (premium content in general) is just a very delicate thing to pull off in a sandbox game with so much reliance on user-generated content- I'm not sure there IS a perfect solution. I just hope BIS finds and decides on an optimal one that makes us, as players, and them, as a developer, happy.
  9. WulfyWulf

    The new ARMA 3 DLC system - debate

    The comparison to OA is a good one, as it did polarize the community and had a shaky transition period where people were in two camps- those that immediately jumped on board and those that didn't want to abandon A2 so quickly. What I can say is that OA had much more to offer for its price than the DLCs have been announced to contain- OA had as much content as A2 did on release, could use assets from A2, and was a huge upgrade in stability and engine capability. The Helicopters DLC has been announced to contain two helicopters and some other assorted content (scenarios?). The Marksmen DLC is even more vague as to what it contains. Even when these DLCs are released and their contents are more certain, a significant amount of players are NOT going pay for the privilege to use what content it provides at this price tag- especially when the core, functional aspects of the DLC are free to all. You could argue that OA was worse in this regard than the A3 DLC, because players who wanted the expanded functionality and core improvements HAD to buy it- and it's true, this was a problem in OA's release, and many people were upset about being left behind by BI after supporting A2. You can argue whether OA was a mistake in this regard, but it offered enough over A2 as a standalone expansion to pull enough of the A2 generation of players and content creators to it for it to succeed. OA was a gamble, and it worked because it had so much to offer for its price. OA DLC itself was fairly priced for the large amount of units and scenarios it offered. What's being offered in the A3 DLC so far? "Two helicopters", "new weapons", and "playable content", for 20$ together and a lot more separately (which, given how far apart their release dates are, is an understandable choice for a player to make). You won't be able to play karts with your friends if they don't have them, only you can fly the helicopters you buy, nobody knows yet what restrictions will be on the weapons for non-buyers, and few mission makers will publish missions where any of this limited DLC has any role beyond an optional gimmick. I don't see this standing on its own to warrant a majority of players buying them- people who preorder the bundle will preorder it because they have enough love for BIS to support them. Not because of the promised content to be delivered very far in the future. THIS is the problem with this DLC model- the BUYERS lose in the end, not the non-buyers. With the A3 DLC I just can't see the value in alienating myself from people who won't be buying it. The restriction in multiplayer for the karts is the most obvious problem- I've got the karts, but none of my friends do, and because you have to own the karts to drive them I can't have any fun, silly games with my friends. I can ONLY play with people who own the DLC. It's a cheap price, but my friends aren't going to spend money to play a gimmick mission for fun- that's what someone would download a free addon for. It's not as extreme of a barrier for the helicopter and marksmen DLC, but through this thread we've talked about how this can cause huge problems for mission editors who want to ensure maximum compatibility. For your question about how the restrictions look, does this post answer what you're asking?
  10. WulfyWulf

    The new ARMA 3 DLC system - debate

    That's not really the problem we're concerned about. For example, I already own the DLC, and I'm far more concerned with inconsistent experience with my friends playing the game who don't own the DLC. They won't be able to fly the same helicopters as me, they might not (depending on how they handle the Marksmen DLC limitations) be able to use the same guns as me, so I'm not going to use those assets in my missions. I'm not going to ask my friends to buy DLC just to be able to do the same things as me, I'd rather have them download a free mod that does preforms a role similar to the premium content. People creating scenarios won't be making missions that take advantage of the content from the paid portions of the DLC for the reasons repeated in this thread, either, so this DLC I own is going to have extremely limited application in anything I, as an owner of the DLC, play in. THIS is what creates a split in the community- it's not a matter of non-owners complaining about limited access to premium content, I'm upset at this AS a DLC owner because this content I own is going to waste. THAT is what does not make sense from a business point of view- punishing (as unintentional of a side effect it might be) the people who do buy the DLC. This could be why the LITE solution might not (I'm assuming) be as successful financially- players who want content are fine with using it at reduced quality so long as they CAN use it. Those same people who wouldn't pay to upgrade from the LITE content aren't going to pay to use content when they could be satisfied instead with using free addons. In effect, the new strategy has the potential to not pull in that many more sales but alienate supporters who DO buy the DLC for the reasons above. The former is totally an assumption, but it makes sense given the price tag of the Helicopters and Marksmen DLC, bundled or separate. The amount of content unlocked would have to be massive to justify the cost of buying them for this sales audience BIS is trying to pull in, a significant portion of which would never pay to use addons anyway.
  11. WulfyWulf

    The new ARMA 3 DLC system - debate

    That's the problem at the core of this, though- there won't be other slots because these missions that have DLC specific slots won't exist. Mission editors are shrewd about publishing their work- they understand that they can't lock their missions out to a significant audience by having vehicles (and possibly weapons? No news on this yet) critical to the mission unavailable to non-buyers. This doesn't expand the mission editor's sandbox like the Arma 2 DLC did, rather it makes this DLC content undesirable to have in a mission because it creates a paywall. This idea and the concept of DLC exclusivity does not go together with a sandbox game with open modding development- regardless of how effective or high quality the DLC is, there are free addons that people will make that will fill the same role. I'm sorry to hammer the mission design aspect of this so much (and if I'm misunderstanding what you mean by dominant on the battlefield, please correct me), but no scenario editors are going to make adversarial missions that could give an advantage to one side who has players with DLC vehicles if the other does not. That's more of a mission design concern than a publishing aspect, but it's still important because it will encourage mission creators to omit those vehicles from PvP game types in the interest of balance. Concepts like this can work in free to play games, with premium vehicles, but never in a paid game with a sandbox mission design and free content addons. This is my number one concern; it's even more difficult to find an answer for in a sandbox game like this. If I could add one more aspect, there also needs to be a compromise with which solution provides BIS with fair compensation for their work, too. If LITE was unsuccessful in this regard, this might explain this new strategy? Either way, it's the problem of finding the optimal solution- the best given the need for compromise between damage to the community and compensation for BI. Whether this solution does damage to the community is down to: Which is true, but I hope this gamble doesn't cause lasting damage to the multiplayer community between owners/non-owners if the problems stemming from mission editing are as bad as some of us are worrying about. I've got enough faith in BIS to act on a bad solution and try something different if this does end up causing a rift- they've adapted from the LITE strategy and are taking risks trying something new here, so I'm hoping they continue to look for an optimal solution even after this. I just hope the solution changes from their current strategy before A3's life cycle ends- I should be getting all the DLC as a Supporter Edition owner, but I'm worried I'll never get much chance to play with it with my friends who don't have the DLC, because I don't want to make missions with content they can't enjoy.
  12. WulfyWulf

    The new ARMA 3 DLC system - debate

    This is a really good point, and part of why I think the LITE strategy was replaced. (Most) people want CONTENT above all else, and they can live without paying for the extra graphics if they can at least use the content itself. Again, I'm not sure if the LITE strategy was a financial success or failure, but that is the chief reason I can see why BI would turn to a different solution for their DLC. Problem with this is that is much more of a "hard" barrier to people who don't own the content, and that's a really hard thing to ask when there are quality, community addons that can deliver the same thing for free. I don't think either strategy alone works. Not sure if a compromise is necessary or an entirely different approach should be looked at.
  13. WulfyWulf

    The new ARMA 3 DLC system - debate

    This was my biggest concern when I first saw this announcement and is the core of my argument against this strategy. Arma isn't a game that can sustain itself on official missions or content only, which is the only conceivable way you could have a system with barriers to in-game content like this- Arma is and always will be a game held up by the content creators, and BI knows this with their Make Arma Not War campaign. This undercuts the mission editor's options by forcing him to choose to use content in such a way that is minute enough to the scenario to not impact it if people don't own it, or not use it at all. In either case, the content might as well not even be in the game, which is unfair to the creators of the content and the owners of the content who don't get to make use of their premium content. This was my first thought, too, by combining LITE assets with notifications. One at the start of a mission during briefing, maybe, to notify the non-owner the mission they're playing has content they don't own the full version of, and should expect reduced quality, and maybe another notification (might be too obnoxious?) when they enter or use said content.
  14. WulfyWulf

    The new ARMA 3 DLC system - debate

    I posted my thoughts on this in the Arma 3 Karts DLC thread before I found this thread, but thanks Tonci87 for mirroring them here. I know that the LITE solution isn't perfect, so I'd like to develop an idea for BIS that compromises the visual fidelity concerns they have while still giving them a fair deal for their content. My solution given in my post still has the problems with the visual quality in LITE that BI was concerned about in their strategy reveal, does anyone have any suggestions for a better strategy?
×