User blog:Sypwn/Mission Editor FAQ

From VTOL VR Wiki
Jump to navigation Jump to search

Also see my Mission Editor tips.

Contents:
Units:
Q: Why won't it let me place multiple player units?
Q: Why won't it let me create a player on Team B?
Q: How do I move a player's spawn point during the mission?
Q: What are alt spawns and how do they work?
Q: How can I synchronize alt spawns for AI units that can't be put in a group?
Q: How do I make a unit respawn when it dies?
Q: How can I spawn in a different number of enemies based on the number of players?
Q: Can I despawn or teleport AI units?
Q: Can I damage a unit with a trigger, or have a unit start damaged?
Q: How do I use the Drone Carrier unit?
Q: Can I change a unit's team mid-mission? (new)
Q: Can I make a unit be a neutral (3rd) faction? (updated)
Q: Can I assign a custom livery to an AI aircraft?

AI Behavior:
Q: How do AI aircraft default behaviors work?
Q: How do AI aircraft behave when taking off and landing?
Q: What is RailPath/Follow/StayInRadius?
Q: Why aren't my units moving in formation?
Q: How do I specify the formation of a unit group?
Q: How do I make infantry board an AV-42C?
Q: What happens if an AV-42C dies while carrying infantry?
Q: How do I make a ground unit follow the road?
Q: What's the range of <some radar>?
Q: Why can't I make an ASF-58 or GAV-25 (or some other aircraft) spawn or land on a carrier?
Q: How do I specify a target for the missile silo?
Q: What is "Allow HOJ"?

Objectives:
Q: What determines when the mission ends?
Q: Why isn't my "Destroy" type objective working correctly?
Q: How do I make an objective for PvP kills?
Q: How can I make an objective that requires being somewhere or doing something for a certain amount of time? (updated)
Q: What is the specific behavior of the Begin/Complete/Fail/Cancel/Reset Objective actions? (new)

Events and Sequences:
Q: Why is my event that fires at the start of the mission not working properly?
Q: Why isn't my Sequence node delay working?
Q: How is an Entry Condition different from an Exit Condition? (updated)
Q: In what order to the components of a sequence node activate?
Q: How do I make a Timed Event or Trigger Event activate more than once?
Q: How do I make an Event Sequence loop or activate more than once?
Q: How do I make a random chance of something happening?
Q: How do I make something happen (or not happen) depending on the state of the mission at that moment?
Q: I've read all of the questions above (and below), but my events still aren't working as expected. How can I troubleshoot them?

Event Conditions:
Q: Why is my condition activating immediately at the start of the mission when it shouldn't?
Q: How can I make a condition to check the distance between two units?
Q: Why are my "Near Waypoint" conditionals behaving strangely?
Q: How do I specify if "Near Waypoint" conditionals spherical distance or ground distance?
Q: How do I make a condition that checks that all present players are doing something, while also allowing for some slots to be empty? (updated)
Q: Why isn't my "Alive" condition working correctly for AI units?
Q: How do "Detected" conditions work and what's the difference between them? (new)

Misc:
Q: How do I make a multiplayer mission?
Q: In what units are distance/altitude/speed measured in the editor?
Q: Why isn't my custom airbase name showing up in the COMMS page?
Q: How do I duplicate a mission within its campaign?
Q: How do I edit a custom map after I've already created a mission with it?
Q: How do the "Wind Variation" and "Gust" settings work?
Q: How do I make the wind randomly cycle between specific directions?
Q: How does reloading work with the "Infinite Ammo" setting?
Q: How do I access the editor without VR?
Q: How do I test my mission without VR?
Q: Can I convert a multiplayer mission back to singleplayer?
Q: What should I know when editing the VTS mission files manually?
Q: How can I edit the default missions that are included with the game?

Workshop:
Q: How do I update a mission (or map, campaign, etc) that I already uploaded to the workshop?
Q: Why am I getting upload error "LimitExceeded" when trying to upload my mission/campaign?
Q: Why am I getting upload error "Fail" when trying to upload my mission/campaign?
Q: Why am I getting upload error "Map must be packed" when trying to upload my mission/campaign?
Q: Why won't Steam let me set my workshop content visibility to "Public"?
Q: Can I edit an existing workshop mission (or map, campaign, etc) that was created by someone else?
Q: I uploaded a mission (or map, campaign, etc) to the workshop, then lost my local copy. Can it be recovered?

Section: Retired questions

Units

Q: Why won't it let me place multiple player units?
Q: Why won't it let me create a player on Team B?

You probably created a standalone singleplayer mission instead of a multiplayer campaign. To convert a singleplayer mission to multiplayer:

  1. Create a new, empty singleplayer campaign, with the vehicle set to match the standalone mission you made.
  2. Use the "Import" button to import your standalone mission.
  3. Use the "Convert to MP" button to convert the campaign to multiplayer.

Q: How do I move a player's spawn point during the mission?

That depends if you're using the "Selectable Alt Spawns" feature described in the next question (which you should be).

No Alt Spawns

Move spawn.png

After selecting this action, move your editor cursor (the yellow thing in the middle) where you want the new spawn point, then press the "Set" button. A faint colored sphere should appear in the new location. Note you have to specify the heading manually. (You can see the current cursor heading at the bottom of the editor.)

Selectable Alt Spawns

You have a couple options. The simplest is to use the Unit -> MP Spawn - Alternate ## -> Move Spawn action on each alt spawn. This will permanently move that alt spawn to a new position.

A more flexible alternative is to create an alt spawn for every combination of vehicle properties + location, and start with only the initial alt spawn location(s) enabled. Then later in the mission, disable the first location's alt spawns and enable the second location's. Or maybe don't even disable the old location if you don't need to. Let the player decide which they want to spawn at!

Either of these options are going to require a lot of actions if the slots have many unique aircraft configurations. But hopefully that can change.

Q: What are alt spawns and how do they work?

For AI Units:

Alternate Spawns are a way to randomize the location of AI units to make the mission more enjoyable for repeated playthroughs. You access them by clicking the "Alt Spawns" tab on the left side of the Unit Tools dialog. Note that each alt spawn can have entirely different unit properties. This can be used to give AI aircraft randomized loadouts or default behaviors. But be sure to set the unit's base properties properties completely before creating alt spawns, otherwise you'll be forced to make future property changes to each alt spawn individually.

Which alt spawn each unit will use is decided by chance automatically at the start of the mission. It uses a "pulling marbles from a bag" style algorithm. You can set the "number of marbles" for each alt spawn by adjusting their weight property (except the first one which is always 100). For example, if you have 3 alt spawns with weights 100, 200, and 100 respectively, then their probabilities will be 25%, 50%, 25%.

If the units are part of a Unit Group, then you can check the "Sync Group" box to force them to all roll the same alt spawn number (to allow a whole squad spawn together somewhere random.) In this situation, the first member of the Unit Group will decide which spawn number is used for the whole group. If the members of the group do not have the same number of alt spawns when the box is checked, then it will automatically create additional alt spawns until their numbers are in sync, but you must still move all the new alt spawns to their new locations.

There is also a trigger action to "Force Alt Spawn" which can allow for more advanced uses of this feature.

For Multiplayer spawns:

VTOL VR v1.11 added a major new feature for MP Spawns called "Selectable Alt Spawns". Previously (and when this box is left unchecked), MP Alt Spawns work the same as AI Alt Spawns, which really doesn't make sense for players. (Why would you want to spawn players in a random starting location?) Now, by checking the "Selectable Alt Spawns" in each MP Spawn's properties, you can allow the player to select between multiple aircraft and/or spawn locations without having to create a different MP Spawn (slot) for each one!

Individual player alt spawns can have different aircraft type, location, restricted loadout, and other properties. When you check the "Selectable Alt Spawns" box, you'll notice that in the alt spawns sidebar, each one now has a checkbox. Each player alt spawn can be enabled and disabled here, and later with event actions. This is incredibly powerful, but here are some common ideas:

  • Create an alt spawn for each playable aircraft type so the player can choose which aircraft they want to fly.
  • For multiseat aircraft, create separate alt spawns for both Allowed Slots 1 and 2, so the pilot can choose if they want a copilot or solo.
  • Create an alt spawn for each airbase and/or carrier, so the player can choose where they start on the map. (Multiple alt spawns on a single unit can be mapped to the same carrier slot.)
  • As the mission progresses, unlock additional airbases for the player to spawn at, using the Unit -> MP Spawn - Alternate ## -> Set AltSpawn Available event action.
  • If an airbase is lost, disable those alt spawns using the same action.

If you're combining multiple of these, you will need to create an alt spawn for each combination. For example, if you want to have a single slot that lets the player choose between an FA-26 or T-55 (1 or 2 seats), on a carrier or on an airbase, that will require 6 alt spawns:

  1. FA-26 on carrier
  2. T-55 (1 seat) on carrier
  3. T-55 (2 seats) on carrier
  4. FA-26 on airbase
  5. T-55 (1 seat) on airbase
  6. T-55 (2 seats) on airbase

Notes:

  • When unlocking new spawn options later in the mission, if the new ones are strictly better (closer to AO, etc), and you want to leave the old alt spawns enabled, then by default it is still up to the player to change to the new alt spawn when they return to the briefing room. Most players will probably forget or not notice and continue spawning at the previous alt spawn. The solution is that when you unlock a new, better alt spawn, also fire a Unit -> MP Spawn -> Force Alt Spawn action with that new alt spawn index. When "Selectable Alt Spawns" is enabled, that action will make it so the specified alt spawn is selected when the player next returns to the briefing room, or if a new player selects that slot. (If the slot has multiple aircraft configurations and want to be really fancy, you can wrap it in a Conditional Action using a number of Is Using Alt # conditions to have it auto select the new alt spawn that matches their current aircraft selection.)
  • If you ever want to move one or more alt spawns, see the answer to the previous question.

Q: How can I synchronize alt spawns for AI units that can't be put in a group?

Stationary units like SAM radars and launchers cannot be put in a unit group, but you may still want to randomize their locations while keeping them together. The solution is before spawning them, use a Random Event to roll which spawn they should use, then a series of Force Alt Spawn actions to manually sync them together.

Manualsyncaltspawns.png

Yes, it's a lot of tedious clicking. Sorry.

Q: How do I make a unit respawn when it dies?

First, you must check the "Respawnable" box in the unit's properties. Then, you can respawn it any number of times using events, most likely a Sequence.
Here is an example Event Sequence that endlessly respawns a tank, 5 seconds after it dies:

Respawn tank loop.png

If the unit has alt spawns, you should add a Randomize Alt Spawn action inside the "Tank is not alive" node. Otherwise it will respawn in the same place every time.

Note: Any attempts to spawn a unit that is already alive will fail. You cannot spawn multiple copies of a single unit this way.

Q: How can I spawn in a different number of enemies based on the number of players?

Here is a simple example solution to start with:

Countplayers.png

The moment the "Clear skies" objective starts, a Conditional Action is used to look at the number of players currently alive (up to 6 MP slots in this example), and spawn an appropriate number of AI aircraft (up to 9 in this example).

In order to allow for a dynamic number of targets to destroy, we use a Conditional type objective and use a Num Near WP condition as explained here.

Note that you would not want to use a Start Mode: Immediate for an objective like this for the reasons explained here. You need to ensure players are spawned in when the conditional action fires. You can delay the start of the objective by using a Timed Event, or first start with an objective to have all players take off or form up.

The solution pictured does have some limitations. If players join or leave after the objective has started, the new number of players will not be accounted for. It is possible to do so, but that solution is far more complicated and outside the scope of this FAQ.

Q: Can I teleport or despawn AI units?

Not cleanly, but there is a way to kinda fake it:
- Check the "respawnable" box in the unit's properties.
- Give the unit an additional alt-spawn whose location is the teleport destination.
- Set that new alt spawn weight to 0.
Then create an event sequence that:
1. Destroys the unit
2. Forces that new (0 weight) alt-spawn
3. Respawns the unit
Each of these actions should be in a separate sequence node, but with no delay between them.

Teleport units.gif

Unfortunately there will still be an explosion effect, unless the unit is an infantry.

To make the unit disappear instead: move the alt-spawn destination somewhere faaaaaaaaaaar outside the map, and add a 4th sequence node that immediately kills the unit after it's respawned. This particularly useful for infantry, as you can make it appear that they entered a structure or boarded a vehicle or combat aircraft.

Another extension of this trick is to create explosion effects. Spawning in a tent and immediately "teleporting" it away all in the same instant will appear to create a massive explosion out of thin air.

Q: Can I damage a unit with a trigger, or have a unit start damaged?

Generally, no. The only exception is naval units, for which you can use the System -> Units -> Destroy Units action to destroy their subsystems, such as turrets, radars, and launchers.

Q: How do I use the Drone Carrier unit?

You can order the carrier to launch its drones using the Unit -> Drone Carrier -> Launch Drones trigger action. The drones cannot be controlled by triggers, however, you can destroy the drones if desired using the System -> Units -> Destroy Units action, then selecting the drones (which are considered a subsystem of the Drone Carrier).

Q: Can I change a unit's team mid-mission?

No. Adding this feature would "break too many other things."

Q: Can I make a unit be a neutral (3rd) faction?

No. Similar to the above question, too much of the existing game code assumes there are only 2 teams.

Q: Can I assign a custom livery to an AI aircraft?

No. Here is the feature request thread for that. Go state your desire for this feature there, or at least give it an updoot.

AI Behavior

Q: How do AI aircraft default behaviors work?

As I understand it, AI aircraft use essentially a priority system consisting of: Engage -> Path -> Orbit

  • If an AI is personally detecting an enemy, it will move to engage that target. AI aircraft will allegedly also investigate RWR signals, but this behavior isn't terribly consistent.
  • If an AI is not detecting an enemy, and it has a Default Path or path assigned through an action, it will follow that path.
  • If an AI does not have a Default Path, or has reached the end of a non-looping path, it will orbit its Default Orbit Point. If an orbit point was never provided, then it will orbit the position where it originally spawned.

Of course if you order an AI to perform a specific task using an action, it will do so. Then once complete it will revert to the list of actions above.

Q: How do AI aircraft behave when taking off and landing?

AI aircraft will use the ATC and follow its instructions exactly. You can simply place an aircraft on an airbase and order it to take off, and it will taxi appropriately. Once it's airborne, it will revert to its default behavior as described above.

They do appear to support some amount of action queuing. You can give them a "Take off" action immediately followed by another order action and once airborne they seem to perform the second action as desired.

There are obviously a few differences for VTOL aircraft. VTOL aircraft will default to taking off vertically *unless* they are spawned under a tent or in a hanger, or if their TWR is too low. In those cases they will taxi and take off traditionally, unless they are not on an airbase/carrier, in which case they will do nothing when ordered to take off. (There will be an entry in the player.log if a VTOL aircraft is ordered to take off but can't due to TWR.)

Q: What is RailPath/Follow/StayInRadius?

These are broken or deprecated. Do not use them.

Q: Why aren't my units moving in formation?

Units will not move in formation by default. They must be in a group together (Alpha, Bravo, etc), and given a group movement action, such as UnitGroup -> (Name of group) -> Move Path. Actions can be attached to objectives or triggers.

As of VTOL VR v1.8.1, the "Form On Pilot" event action now works in multiplayer missions, and thus can be used to instruct AI aircraft to form up on the player.

Q: How do I specify the formation of a unit group?

All air and sea groups are locked to a Vee formation.
For ground groups, you specify the formation using a trigger action: UnitGroup -> (Name of group) -> Set Formation.

Formation example.png

As seen in the screenshot, the Vee formation has the first unit in the center, and each subsequent unit behind it alternating left-right-left-right.

The order of the units within the formation is determined by the order in which those units are added to the group. You can view this order by clicking on the "Groups" sub-tab within the "Units" tab on the right, as seen in the screenshot above.

To reorder the members of the group:
1) Double click on the group name ("Golf" in this case) to open the bulk group editor
2) Click "None" at the top to remove all members, then re-check whoever you want to be the leader and click "Okay"
3) Re-open the bulk group editor, and re-check each member in the desired order and click "Okay"

Q: How do I make infantry board an AV-42C?

If the AV-42C is piloted by a player, you must create "Pick Up" and "Drop Off" type objectives. The infantry (selected in objective properties) will automatically board when a piloted AV-42C parks near them with doors open, and will depart when it arrives at the objective waypoint.

If the AV-42C is piloted by AI, you must first order it to "Land At Wpt" near the infantry, then order it to "Load Passengers" or "Unload Passengers". This is best handled by an Event Sequence so you can use Entry Conditions to ensure each step of the process is completed before moving to the next. There is no condition to check if the infantry are boarded, but if you give the AV-42 a "Take Off" action immediately after the load/unload action, it will wait for the infantry to board before taking off. Then you can use an "Is Not Landed" condition to advance the next node.

For singleplayer AV-42 missions and for AI AV-42s, you can make the infantry spawn directly into the aircraft by clicking the "Edit Passengers" button at the top of the Player/AV-42 unit's properties. It is not possible to spawn infantry directly into a player's AV-42 in multiplayer missions.

Q: What happens if an AV-42C dies while carrying infantry?

That depends if the infantry were set to be Invincible at the time.

  • If the infantry are invincible, they teleport back to their spawn point. The exact behavior is kinda wonky. In my testing, one of them repeated their last issued order to walk to the pickup point, while the others remained still at their original spawn point. If their pickup point is not also their spawn point, you may need to apply additional mitigations, such as restarting the event sequence that controls them.
  • If not, they die. If enough are dead that the Drop Off objective's Min Required cannot be met, then the objective fails.

Q: How do I make a ground unit follow the road?

By creating a very long path of "Path Mode: Linear", and tediously adding a point every time the road turns, even slightly. Then tell the unit to follow that path.

Yes, this is how everyone else had to do it.

To make units patrol a city, simply create a single long looping path that navigates the city and tell the units to follow it. They will (usually) join the path at whatever point is closest, not the beginning.

Q: What's the range of <some radar>?

Due to the number of factors involved with radar calculations, it is impossible to even estimate the effective range of a radar. A SAM radar may be able to detect a fully loaded F/A-26B as far as 100km out, while not being able to detect a slick F-45A flying nose-on at only 10km.

If you want to know the maximum range of a SAM launcher, you can click the "Info" button at the top of the Unit Tools dialog to see the engagement range limitations for each missile type. (They will not attempt to lock targets outside that range window.)

If you're trying to finely control the area in which a radar engages, you can use a looping event sequence with Player -> Is Side Of Path or Is X of Path Region conditions to toggle the launchers' "Engage Enemies" status.

Q: Why can't I make an ASF-58 or GAV-25 (or some other aircraft) spawn or land on a carrier?

Some aircraft are simply not carrier capable. They lack a launch bar, landing hook, and folding wings. They cannot be selected to spawn on a carrier, and the AI will ignore orders to land on one. Additionally, the Assault Carrier is even more restrictive on which aircraft can use it.

To quickly see if an AI aircraft can make use of a type of carrier, simply check if it will allow you to assign that aircraft to one of the carrier's spawn points. If not, then that aircraft is not compatible with that carrier.

Q: How do I specify a target for the missile silo?

The Missile Silo's ICBM only goes up, it does not come back down. It will ascend at an angle, and you can specify the heading of that angle as part of the Unit -> Missile Silo -> Begin Launch event action properties, but you cannot make the missile come back down.

Then why does it have an "Engage Enemies" option? I have no idea...

Q: What is "Allow HOJ"?

Home-on-jam. If enabled, and the unit finds itself being radar jammed, it will fire a missile in home-on-jam mode towards the source.

Objectives

Q: What determines when the mission ends?

This is determined by objectives that have the "Required" box checked.

The mission ends in success if both the following conditions are met:

  1. At least one "Required" objective has been started.
  2. There are no currently active "Required" objectives.

The mission ends in failure if any of the following conditions are met:

  • A "Required" objective is failed.
  • (Singleplayer only) The player dies or if the player's vehicle is destroyed.
  • (Multiplayer only) The opposing team has achieved mission success.

Be careful to keep a "Required" objective open at all times until you want the mission to end. The intended method to do this is to use Prerequisite Objective Start Types, so that completing one objective immediately starts another. You can also put an Objective -> Start action inside another objective's Completion and Failed actions section. Or you can have one "Required" objective that sits in the background for the whole mission, and is completed only at the very end.

If you need to further troubleshoot why a mission is ending early, search your player.log for "Final Mission Completion Check Routine". It will list which objectives are active whenever it checks if the mission should end or not.

Q: Why isn't my "Destroy" type objective working correctly?

Destroy type objectives do not count units that have not yet spawned in.

If you don't spawn in at least the Min Required number of units, the objective will be impossible.
If you want to easily make a Destroy-style objective with a dynamic selection of units, change it to a Conditional objective and use the "Num Near Waypoint" workaround. The catch is there will not be a unit counter in the MFD page.

Destroy type objectives do not work correctly when the targets are units that can respawn, such as players or respawnable AI units.

If you're trying to make a basic PvP mission, see Q: How do I make an objective for PvP kills?
If you specifically need to track the number of times a player or respawnable AI unit has died, this is best done by creating a looping event sequence that watches for every time the unit dies, and increments or decrements a Global Value.

Q: How do I make an objective for PvP kills?

The simplest method is to use the Team Score feature. In the Edit -> Scenario Info dialog you can configure how many team points are awarded for kills and deaths. (Kills include AI units. Deaths grant points to the opposing team.) Once you've configured that, create an Objective for each team whose Objective Type is Conditional, and set their Success Condition to MP Team Stats -> Team (A/B) -> Score -> Greater Than -> (some number).

I recommend you set kills to be 0 points and deaths to be 1 point for both teams. This way AI kills don't count (if there are any), and a CFIT will award the other team a point.

Q: How can I make an objective that requires being somewhere or doing something for a certain amount of time?

Here is an example of the logic to make an objective that requires staying in an area for 30 seconds:

Hold objective.png

Note that I use the "Any Near Point" condition, because it allows me to select spherical distance instead of ground distance, the latter of which probably wouldn't make sense for a capture objective.

Anyway, you can tweak the numbers or swap out the condition for something else (such as being alive, locking a target, getting detected, etc)

Q: What is the specific behavior of the Begin/Complete/Fail/Cancel/Reset Objective actions?

An objective can be in one of four states:

  • Hidden: An objective that has not yet been started or has been reset. Does not show up on OBJ MFD page.
  • Active: An objective that is currently active. Will appear on the OBJ MFD page in white. When an objective enters this state, its "Start Event" actions are fired and a HUD popup will appear (after a brief delay.) Meeting the objective's configured success/fail conditions while in this state will cause it to change to the appropriate state below.
  • Completed: An objective that was completed. Will show up on OBJ MFD page in green. When an objective enters this state, its "Completed Event" actions are fired and a HUD popup will appear (after a brief delay.)
  • Failed: An objective that was failed. Will show up on OBJ MFD page in red. When an objective enters this state, its "Failed Event" actions are fired and a HUD popup will appear (after a brief delay.)

Below is a table showing the result of firing any Objective action for every possible state that objective might be in. The boxes tell you what new state the target objective will change to when the listed action fires. If the box for a specific action+state combination is empty, then nothing will happen when that action fires. (It will usually still create an entry in the player.log explaining why.)

Objective state: Hidden Active Completed Failed
"Begin Objective": -> Active
"Complete Objective": -> Completed
"Fail Objective": -> Failed
"Cancel Objective": -> Hidden
"Reset Objective": -> Hidden -> Hidden -> Hidden

Events and Sequences

Q: Why is my event that fires at the start of the mission not working properly?
Q: Why is my condition activating immediately at the start of the mission when it shouldn't?

When the host presses "Start mission", all players will actually spend about 3 seconds fading out from the briefing room. During this time, the mission clock has already started, and events will fire accordingly. Actions that only apply to players that are spawned in (such as text popups, audio cues, and GPS waypoints) will thus have no effect. Additionally, any conditions that happen to be TRUE when there are 0 players alive will also fire immediately.

The simplest fix is to add roughly a 5sec initial delay to any events that fire at mission start. However, it's also possible for the host to click "Start mission" without anyone selecting a slot, which again starts the timer immediately, and means players could take much longer than 5s to spawn in. Also, some players may spawn in late because they spent extra time setting up their equips. Therefore, the best solution is to wait for all players to spawn in (or take off, or group up, or approach the AO, etc) before sending essential info such as audio cues or GPS waypoints.

Q: Why isn't my Sequence node delay working?
Q: How is an Entry Condition different from an Exit Condition?
Q: In what order to the components of a sequence node activate?

An event sequence node has 3 main components:

  • Delay: The sequence pauses for this many seconds before continuing into the node.
  • Entry Condition and Exit Condition: If this condition is False, the sequence will pause and wait for it to be True before continuing.
  • Actions: These are actions to be fired. None of them can cause the sequence to pause.
Sequence order.png

This shows the order that the components activate.

A few things to note:

  • Entry Conditions pause after the node's delay, while Exit Conditions effectively pause before the next node's delay. So if you want to add a wait condition followed by a delay, you should add that condition as an Exit Condition to a node before it.
  • Actions in the same sequence node are fired consecutively (7a -> 7b). Attempting to perform multiple complex actions (mainly spawning units) within a single node can cause unreliable behavior, especially if there's other lag at the time. If you ever need to spawn units, then perform further actions that depend on them being alive (giving them orders, or spawning aircraft on the deck of a newly spawned carrier), then it's best to separate these actions across multiple sequence nodes, because...
  • Only one sequence node is evaluated per game tick (frame). A sequence node with a 0sec delay will sill incur a 1-frame interruption. This is helpful to spread actions over time to keep the game running smoothly, but may cause race conditions if multiple sequences or events are attempting to manipulate a unit or GV at the same time and don't account for this.

Confusing? I agree. I submitted a suggestion to redesign event sequences to be simpler and more efficient while just as powerful. Leave a comment in that thread if you approve.

Q: How do I make a Timed Event or Trigger Event activate more than once?

You can't make either of these types of events repeat. However, any Timed Event or Trigger Event can instead be created as an Event Sequence, which can be repeated. (See next question.)

Q: How do I make an Event Sequence loop or activate more than once?

At the end of your sequence, add an Event Sequences -> (current sequence) -> Restart action. Ensure your Sequence includes a delay somewhere, or else a continually looping sequence can create lag. For an example, see Q: How do I make a unit respawn when it dies?

Q: How do I make a random chance of something happening?

VTOL VR v1.11 added a new action specifically for this. It's in the Event Action Browser under System -> System -> Fire Random Event.

After creating the Fire Random Event action, click the "None" button to open the Random Event Editor. From here you click the "+Add Event" button for however many possible outcomes you want. For its most basic usage, you can ignore all the settings under each Random Event block. All you need is to create at least one action inside each Random Event block's action block ("New Action" button) to fire in case that outcome is rolled.

By default, it will have an equal chance of rolling each outcome. To skew the probabilities, you would tweak the Weight values. They work the same as AI Alt Spawn weights. That is, it uses a "pulling marbles from a bag" style algorithm. By changing each Random Event block's Weight, you change the "number of marbles in the bag" for that possibility. For example, if you have 3 Random Events blocks with weights 100, 200, and 100 respectively, then their probabilities will be 25%, 50%, 25%.

If you need to fire this Random Event multiple times (inside a looping Event Sequence), then that's where the Optional Condition button becomes useful. Without it, it could reroll the same result multiple times and you may not want that. For example, if you're using a Random Event to roll a random objective to start, you don't want it to roll an objective that's already active. When you assign an optional condition to a random event, that outcome is only added to the pool (marbles added to the bag) if the condition resolves True at that moment. Thus, in the example of rolling random objectives, for each one you would assign a condition that resolves __False__ if the objective is already active, thus preventing it from being rolled again. (If an optional condition is not provided, it is treated as True.)

And finally, the GV Weight option allows you to assign a random event's weight value to the current value of a GV, instead of a static number. If that didn't make sense to you, don't worry about this feature. It's very niche, only useful for the creation of incredibly complex mission flow.

Q: How do I make something happen (or not happen) depending on the state of the mission at that moment?

When using Conditions in Trigger Events, Sequences, Objectives, etc, these are all designed to wait for the condition to be true. You may encounter a situation where instead of waiting, an event needs to check if one (or more) conditions are true at that moment and change the outcome depending on the result. This is done using Conditional Actions, which can be found in the Event Action Browser under System -> System -> Fire Conditional Action.

After creating the Fire Conditional Action action, click the "Edit action..." button to open the Conditional Action Editor.

  • If you want something to happen if the condition is true, otherwise nothing, then you only need to fill out that first IF condition, and the actions block right below it. Leave the ELSE actions block empty. If the IF condition resolves True at the moment the Conditional Action fires, it will fire the actions in that first action block. Otherwise nothing.
  • If you want one thing to happen if the condition is true, otherwise a different thing happens, then follow the same steps above, and put the alternate actions inside the ELSE action block. Those actions will fire if the IF condition resolves False.
  • If you want to see which of many possible conditions is met, that's where the "+Else If" button comes in. You can add as many ELSE IF conditions as you want for it to check, each one having a separate corresponding action block to fire. NOTE: Only the first (closest to the top) condition that resolves True will have its actions fire, regardless of how many other ELSE IF conditions also resolve True. If you need to potentially fire multiple sets of actions, then each one will have to be a separate Conditional Action.

Q: I've read all of the questions above (and below), but my events still aren't working as expected. How can I troubleshoot them?

  1. If you're using Event Sequences (as you should be), go in and give each node a unique name (instead of "New Node").
  2. Save, close, and restart VTOL VR. (You can skip this step once you get more familiar reading the log file.)
  3. Re-test the mission, getting to the point where the triggers misbehave.
  4. Return to the mission editor. (Protip: Mash the "Delete" key on your keyboard a few times)
  5. Open an advanced text editor. For these instructions I will use Notepad++.
  6. Select File->Open, then in the File name field, paste %userprofile%\AppData\LocalLow\Boundless Dynamics, LLC\VTOLVR\player.log and press Enter
  7. From the top menu, select Search->Find. Type the name of your event sequence into the "Find what" box, then click "Find All in Current Document"

A sidebar should appear with search results that look something like this:

    Line 2187: Beginning event sequence My Event Sequence
    Line 2188: Beginning sequence node My Event Sequence : Takeoff, delay(0)
    Line 2218: Sequence node My Event Sequence : Takeoff awaiting conditional.
    Line 2323: Firing actions for sequence node My Event Sequence : Takeoff
    Line 2325: Beginning sequence node My Event Sequence : Form up, delay(0)
    Line 2329: Sequence node My Event Sequence : Form up awaiting conditional.
    Line 2330: Firing actions for sequence node My Event Sequence : Form up
    Line 2332: Beginning sequence node My Event Sequence : Enemies spotted, delay(0)
    Line 2333: Sequence node My Event Sequence : Enemies spotted awaiting conditional.

Here you can see that every step of the event sequence has been logged. First, there is an entry indicating that the sequence started. Then for each sequence node, it waits for the delay (even if set to 0), then waits for the entry condition (if present), then fires the actions for that node, then waits for the exit condition (if present), then moves onto the next node. Looking at the last line, we can see it got hung in the "Enemies spotted" node, waiting for the entry condition to be satisfied. Thus if I was expecting it to progress past that point, I would know to look into that entry condition for a possible mistake.

When troubleshooting actions and AI behavior, double-click on one of the "Firing actions for" lines and it will jump you to that part of the log. If something went wrong while executing those actions, it might say something relevant in the lines right below.

Trigger Events are also logged similarly. Simply search for its name and if it was triggered, there should be a "Firing trigger event: My Trigger Event" entry.

Timed Events firings also logged with a "Firing timed event" entry, but it does not include the name of the timed event group. It only includes the names of the individual timed event nodes (which default to "New Timed Event"). Yet another reason to use Event Sequences instead of Timed Events.

Objectives are logged as well, but not quite as clearly. There will be a "Setting up objective" entry, followed by the output of any Start Event actions. For completions there is a "FlightLogger: Completed objective" entry, but this actually gets logged later in the frame. To find the output for the Completed Event actions, you'll have to look somewhere above that entry. Try to find the entry that resulted in the completion of that objective. (For example, if it was a Destroy objective, then there should be a "was killed by" somewhere above, and any Completed Event action outputs will be somewhere between those two entries.)

Event Conditions

Q: How can I make a condition to check the distance between two units?

The various "Near Waypoint" conditions allow you to select a unit instead of a waypoint. But keep in mind the answer to the next question...

Q: Why are my "Near Waypoint" conditionals behaving strangely?
Q: How do I specify if "Near Waypoint" conditionals spherical distance or ground distance?

UPDATE: After skimming the decompiled code for these conditions (as part of another project), I noticed that some aspects did not match what is stated below. Further research is required. However, it may be moot for some thanks to the new Any Near Point condition, which allows you to select Spherical or not. (Now if only we could get a Num Near Point condition.)

The [Unit][Near Waypoint] condition measures spherical distance, while the [Unit Group / Unit List][Any Near Waypoint / Num Near WP] conditionals measure ground distance. A unit that is exactly 500m above and 200m East of a waypoint would be considered 539m away when checking spherical distance, but only 200m away when checking ground distance (because altitude is ignored).

Conditional distance.png

You can always use a [Unit List][1 Selected][Any Near Waypoint] conditional when you need to check ground distance of a single unit.

Q: How do I make a condition that checks that all present players are doing something, while also allowing for some slots to be empty?

VTOL VR v1.6 added new Unit Group conditions for this:

  • To check if a group of players are all spawned in (no one still waiting in the briefing room), use the Unit Group: <All Present Players Alive> condition.
  • To check if a group of players are all near a waypoint, use the Unit Group <All Live Players Near Waypoint> condition.
  • To check if a group of players are all airborne, use Unit Group: <Num Landed> <Equals> <0> and AND that with Unit Group: <All Present Players Alive>*.
  • To check if a group of players are all landed, use Unit Group: <Num Airborne> <Equals> <0> and AND that with Unit Group: <All Present Players Alive>*.

* for the latter two, you can use Unit Group: <Num Alive> <Greater than> 0 instead of Unit Group: <All Present Players Alive>, but you must use either one of these or else it may trigger prematurely.

Each of these conditions can only check for one Unit Group (Alpha, Bravo, Charlie, etc) at a time. If your players are split across multiple Unit Groups, you'll have to make matching conditions for each and AND them all together.

Q: Why isn't my "Alive" condition working correctly for AI units?

The "Alive" conditions are poorly worded. AI units that have not spawned in are still considered "alive". A more accurate name for the "Is Alive" condition would be "Is Not Dead". Respawnable units make this even more confusing. Here is a timeline of events in the form of a table, showing the "Is Alive" state for an example unit:

Unit state: Not spawned Spawned Dead Respawned
"Is Alive": true true false true

If you're trying to check how many AI units are actually alive in an area, but you don't know which units were spawned in, then you can use the "Num Near Waypoint" condition instead. Just make a waypoint in the middle of the mission area, and set the condition's distance to the maximum (200,000m). Unlike "Alive" conditions, "Near Waypoint" conditions will only consider units that are presently spawned in.

And finally, "Alive" conditions work differently for MP Spawns. A player spawn is only considered "Alive" if they are actually alive and spawned in, as you would expect. A player that has not spawned in is not considered to be alive.

Q: How do "Detected" conditions work and what's the difference between them?

First, you must understand that every unit has an internal "Detected" state for each team. By default, all Team A ("Allied") units start Detected by Team A, and all Team B ("Enemy") units start Detected by Team B. (The "Force Detected" unit property changes this behavior.)

When a unit is detected another unit's sensors, it sets the target's Detected state to true for the appropriate team. This Detected state remains true, even when the unit is no longer being actively detected. (I believe even after it fades off NAV, and it only resets on death, but I haven't tested in a while.)

  • Unit -> SP Player -> Was Ever Detected, Unit -> AI unit -> Detected By, and Unit List -> Any/All Units Detected all do the exact same thing. They check if the unit's Detected state (as described above) is true for the selected team. This means they all effectively act as a "Was Ever Detected" check.
  • Unit -> SP Player/MP Spawn -> Gets Detected Now is entirely different. This condition is only true when the player in question is being detected by an opposing team's sensor at that specific moment, completely ignoring their Detected state.

Misc

Q: How do I make a multiplayer mission?

A multiplayer mission must be part of a multiplayer campaign. Simply create a new campaign and check the "Multiplayer" box.

If you already created a singleplayer campaign, there is an option in the campaign editor to convert it to multiplayer.
If you already created a singleplayer standalone mission, you can create a singleplayer campaign, then import the standalone mission, then convert the campaign to multiplayer.

Q: In what units are distance/altitude/speed/time measured in the editor?

Units in editor are always in meters for altitude & distance, meters/second for speed, seconds for time, and degrees (0 = North, 90 = East) for heading.

You can toggle the editor cursor's altitude between meters and feet by clicking the word "Altitude" in the bottom right corner of the screen. This only affects the cursor altitude indicator in the bottom right corner. There is no way to change the measurement units used triggers, objectives, or unit properties.

Q: Why isn't my custom airbase name showing up in the COMMS page?

For some reason, the COMMS page looks at the airbase name that is defined in the map, not the one defined by the mission. You'll need to go back into the map editor, give the airbase a name there, then repack the map.

Q: How do I duplicate a mission within its campaign?

File -> Save As...
(You're obviously not the first person to miss this.)

Q: How do I edit a custom map after I've already created a mission with it?

After making changes in the Map Editor, you must manually apply those updates to any missions that used that map. To do so, select Tools -> Repack Map from the top bar of the Mission Editor. This will fetch the latest version of that custom map and apply it to the current mission.

NOTE: If multiple missions in the same campaign use the same map, repacking the map for one mission will update it for all missions in that campaign that use that map.

Q: How do the "Wind Variation" and "Gust" settings work?

The "Wind Variation" setting is a value in m/s that sets the maximum additional wind that can be randomly applied in any direction. The actual applied amount and direction will smoothly change over time, the exact rate at which it changes cannot be controlled. The wind variation is uniform. That is, it applies the same wind offset to the entire map.

The "Gusts" setting is the same as Variation, but with two differences: the change is less smooth and more rapid, and gusts are local (not uniform). Gusts are currently the only way for wind to be different in different parts of the map, and cannot be finely controlled.

For more info, see this video where BahamutoD explains and visualizes the various wind settings.

Q: How do I make the wind randomly cycle between specific directions?

Randomwind2.png

Unlike the previous (pre-v1.11) solution, this one should be relatively self explanatory, but I'll break it down anyway.

  • The "Wind Timer" Global Value tracks how many minutes until the wind should change next. Its initial value is 0, which means it will roll a random wind setting as soon as the mission starts.
  • The Randomize Wind first waits 60 seconds, then it fires a conditional action. If the wind timer has not yet expired, it subtracts 1 from it. Otherwise, it fires two Random Events.
  • The "Roll new wind" random event will roll between blowing directly North, South, East, or West (cut off in the pic). You can change all of the wind transition settings here however you want, and add as many possibilities as you want.
  • The "Roll wind timer" random event will randomly reset the timer to 1, 4, 9, or 14 minutes before the next wind change event. Of course you can change these values as well.
  • And finally, the event sequence restarts itself. Combined with the 60s delay, this means the conditional action will run every minute.

Q: How does reloading work with the "Infinite Ammo" setting?

Each hardpoint will start a reload timer (based on the "Infinite Reload Delay" setting) when that hardpoint is empty. For example:

  • The gun will start its reload timer when the bullets reach 0.
  • A rocket pod will start its reload timer when all the rockets in that pod have been fired.
  • A hardpoint containing a single AIM-120 rail (such as mounted on the wings of the F-45A) will start its reload timer when that one missile is fired.
  • A hardpoint containing 2x AIM-120s (such as in the F-45A's internal bays) will start its reload timer when both missiles from that hardpoint have been fired.

Q: How do I access the editor without VR?

If you have previously played the game with VR on this computer, simply launch the game and look for the "Map Editor" and "Mission Editor" buttons in the bottom right of the game window.

If this computer has never had VR, then you will first need to accept the EULA. You can do this by manually editing the file at "C:\Users\%username%\AppData\Roaming\Boundless Dynamics, LLC\VTOLVR\SaveData\gameSettings.cfg" and adding the following lines:

EULA_AGREED = 1
EULA_NOTIF = True

If you want to prevent SteamVR from starting up when you launch the game, use the "Oculus" launch option. This will prevent SteamVR from starting, even if you don't have Oculus hardware.

Q: How do I test my mission without VR?

If it's a multiplayer mission, you can't. VR is required to get past the slot selection screen.

If it's a singleplayer mission, click File -> Scenario Info and ensure the following items are configured:

Equipment:
 Configurable is UNCHECKED
 Force Equips is CHECKED
Environment:
 Optional Env is UNCHECKED

Then save and test the mission. Press "R" on your keyboard to dismiss the ready room. Now you can use the developer camera to observe the mission.

Q: Can I convert a multiplayer mission back to singleplayer?

It's certainly possible, if your patient enough to figure it out.

  1. Read the entirety of the answer right below this one about VTS editing
  2. Create a test SP mission (including a Player spawn)
  3. Convert the test mission to MP
  4. Inspect both files and make note of everything that changed
  5. Copy your MP mission into a SP campaign, and apply the reverse of everything that was changed in the SP-to-MP conversion.

Of course any MP specific features will be broken, and might prevent the mission from loading or launching correctly.

Q: What should I know when editing the VTS mission files manually?

(Most of these rules apply for all VTOL VR .vt* files, not just .vts)

  1. MAKE A BACKUP FIRST. Personally I have my entire CustomScenarios directory sync to OneDrive using a symbolic link so I can always roll back changes.
  2. Use a source code editor such as Notepad++, Sublime, or VS Code. If you use a basic text editor like Windows Notepad it will clobber the EOL/whitespace and cause problems that are incredibly hard to troubleshoot.
  3. The best way to learn what each property does is to make changes in the mission and watch how those changes show up in the file. If you can't figure things like this out yourself, then you probably shouldn't be messing with the VTS file.
  4. After saving changes to the VTS file, you can apply them using the File->Revert option in the mission editor. (The Map Editor does not yet have this feature.)
  5. After loading an externally modified VTS file, be sure to inspect all aspects of the mission and ensure everything is there. Units, triggers, waypoints, objectives, briefings etc. When the game encounters a syntax error, it will sometimes stop parsing the rest of the mission file, but still load into the editor with whatever it did parse. Things might seem normal at first, but stuff like events or objectives or briefing pages are empty. If you re-save while in this corrupt state, and you don't have a backup, then all that missing data is now gone forever.

The most common uses of VTS editing are bulk editing (find-replace unit properties) and cloning of data (copying event actions or sequences). It also allows you to do a some things that the editor doesn't allow or expose, such as placing units underground, adjusting the initial pitch of an aircraft spawn, or creating hurricane winds. However I will not provide step-by-step instructions for any of this because of what I said in point #2.

Q: How can I edit the default missions that are included with the game?

Short answer

You probably can't.

Long answer

  1. Extract the game assets with AssetRipper.
  2. Locate the .asset files that contain the various map, mission, and campaign data you're looking for. (Hint: \Assets\Resources\campaigns\)
  3. Extract that data into their appropriate .vt* files. The whitespace, EOL, and escaped slashes must all be converted to the standard ConfigNode format.
  4. Locate all the various resources (heightmaps, images, audio files) for that campaign, putting them and the .vt* files in the correct directory structure for a custom campaign.
  5. Manually correct all the resource paths in the .vt* files

Sounds complicated? It is. It requires strong familiarity with the VT* (ConfigNode) format, and the internal structure of custom maps/missions/campaigns. No there isn't a more detailed tutorial. No one can send you the converted files either, as that is against the EULA.

Workshop

Q: How do I update a mission (or map, campaign, etc) that I already uploaded to the workshop?

Simply upload it again after you've made your changes. In the upload settings dialog you should see an "Update Notes" section, confirming you are in fact updating the existing workshop content instead of creating a new one.

Q: Why am I getting upload error "LimitExceeded" when trying to upload my mission/campaign?

This occurs when the primary image for your campaign or standalone mission is greater than 1MB.
If it's a campaign, convert your campaign image to JPEG and ensure it's under 1MB. Then re-select it in the Campaign Info panel and save, and upload again.
If it's a standalone mission, convert your mission image to JPEG and ensure it's under 1MB. Then reselect it in the Scenario Info dialog and save, and upload again.

Q: Why am I getting upload error "Fail" when trying to upload my mission/campaign?

Steam is rejecting your upload without providing any reason as to why. This is known to happen if you do not own VTOL VR in your current account, and are instead playing it through Family Sharing. You must switch to the account that owns VTOL VR in order to upload content to the workshop.

If you are uploading from an account that owns VTOL VR and are still getting this error, please reboot your computer and try again.

Q: Why am I getting upload error "Map must be packed" when trying to upload my mission/campaign?

This can occasionally happen when using maps from the workshop, although the exact causes aren't fully known.

Try loading into the mission that's listed in the error message, then immediately save the mission, then try to upload it again.

Q: Why won't Steam let me set my workshop content visibility to "Public"?

Enable Steam Guard for your account, then try again.

Q: Can I edit an existing workshop mission (or map, campaign, etc) that was created by someone else?

Content on the workshop is encrypted to prevent stealing. You must ask the original creator to share their files with you for editing.

Q: I uploaded a mission (or map, campaign, etc) to the workshop, then lost my local copy. Can it be recovered?

Content on the workshop is encrypted to prevent stealing. If you have content that you created on the workshop and need to recover an unencrypted version for editing:

1. Join the official VTOL VR Discord server (if you aren't already).
2. Ensure your Steam account is linked to your Discord account and visible in your Discord profile (for verification).
3. Post links to the content you need recovered in the appropriate channel (#mission_editor, #map_editor, #vtol-liveries).
4. If no one replies within an hour or so, you can ping @moderator for assistance.

Retired Questions

These questions were previously part of this FAQ, but pertained to missing features or game bugs. VTOL VR updates have made them obsolete. They are preserved here for reference along with a brief explanation.

  • Q: Why isn't my "Unit Group" condition working correctly?
    Previously, Unit Group conditionals did not work correctly for groups that contained MP Spawns. This was fixed in VTOL VR v1.6.0.
  • Q: How can I re-roll new alt spawn locations when I respawn units?
    VTOL VR v1.6.0 added a Randomize Alt Spawn action. Previously, this had to be done manually with conditional actions.
  • Q: Why aren't my ground units moving?
    Q: Why aren't my sea units following orders?
    Previously, Ground and Sea units ignored some actions if they were part of a Unit Group. This was fixed in VTOL VR v1.6.6.
  • Q: How do I enable the second seat on the T-55/AH-94/EF-24G?
    Previously, creating an MP Spawn with a multi-seat vehicle defaulted to only 1 seat enabled, and the slider to change it was confusingly just called "Slots". Both of these were corrected in VTOL VR v1.12.0.
  • Q: The units available to each team are different. Can I force a unit to be on the other team?
    Previously, each unit type was hardcoded to be on a specific team and could not be reassigned. The "Switch Team" button for AI units was added in VTOL VR 1.12.0.