Release v1.5.0
Richard 'CWolf' Griffiths
DeveloperThis release introduces a lot of new features and fixes some important bugs. It adds a lot more content for the existing custom contract types, adds a dialogue system that works with the combat dialogue for much more control and allows player pilots to talk in contracts. One of the main reasons for this release is to prepare the contract type build formats for the upcoming Mission Control Designer.
All website documentation has been updated to reflect all the new additions and changes so check there for specifics.
The full release diff can be at the v1.5.0 pull request.
❗ Custom Contract Build Format Upgrade
As the Mission Control Designer is in a functional state I've been testing the Designer saving out the existing custom contract types (Duels & Blackout). For various reasons related to the Designer the existing custom contract type build files (files that are located under MissionControl/contractTypeBuilds
) require an upgrade.
The upgrade is critical and must be done. - See the below Upgrade instructions on the process
🚀 Features
- Blackout: Added 3 more contracts
- Absent Witness
- Prepared Grounds (written by Vantas Strider)
- A Minor Royal Pain
- Blackout: Added to 3 new maps
- Tyrlon (Highlands Fall biome)
- Central Mountain (Desert Parched biome)
- Lost World (Jungle Tropical biome)
- Solo Duel: Added to 5 new maps
- Big Loch (Highlands Spring biome)
- Red City (Martian Vacuum biome)
- Tide Bay (Jungle Tropical biome)
- City Centre (Urban HighTech biome)
- Taiga River (Trunda Frozen biome)
- Duo Duel: Added to 5 new maps
- Big Loch (Highlands Spring biome)
- Red City (Martian Vacuum biome)
- Tide Bay (Jungle Tropical biome)
- City Centre (Urban HighTech biome)
- Taiga River (Trunda Frozen biome)
- Dialogue: Added a dialogue system on top of the contract dialogue system for Combat
- Dialogue: Player Pilots Can Talk in Contracts
- Anyone interacting with contract dialogue CastDefs /
selectedCastDefId
can now select Player lance pilots to talk - Provided manual (
castDef_TeamPilot_1
), true random (castDef_TeamPilot_Random
) and bound random selection of Player lance pilots (castDef_TeamPilot_Random_1
orcastDef_TeamPilot_Random_BoredPilot
)
- Anyone interacting with contract dialogue CastDefs /
- Dialogue: Commander can be used as a CastDef regardless of if dropped in the Player lance
- Can be used if the Commander is on the dropship or in the Player lance
- Can be used with
castDef_Commander
- Dialogue: Dialogue can reference Commander, Speaker, Bound or Position Player Pilots
- Some pilots can be accessed in the dialogue, e.g. (
{MC.PlayerLance.TeamPilot_Random_2.UnitName}
,{MC.PlayerLance.Speaker.DisplayName}
,{MC.Commander.DisplayName}
)
- Some pilots can be accessed in the dialogue, e.g. (
- Dialogue: Conditional dialogue - the ability to show dialogue on certain conditions
- Supports checks against Employer or Target Faction Type
- Supports checks against Employer or Target Name and Short Name
- Supports tag checks against all tag scopes (
Pilot
,Commander
,Company
,System
) and a new customEncounter
tag scope that is fresh for every contract - Supports multi-conditional checks (
{{condition1} AND {condition2}}
,{{condition1} OR {condition2}}
) - Supports random percentage chance checks
- Dialogue: Modifications - the ability to modify the game
- Supports adding tags to all tag scopes
- Supports removing tags from all tag scopes
- Dialogue: Formatting - the ability to change text style
- Supports formatting text to different cases (
ToUpper
,ToLower
,ToUpperFirst
,ToAlternating
, e.g.[MC.Format.ToUpper.{TEAM_EMP.FactionDef.Name}]
) - Helps fix vanilla BT annoyance with Faction names starting lowercase so faction names can now be correctly used at the start of sentences.
- Supports formatting text to different cases (
- Per-Contract Override - Additional Lances - Support Enabling / Disabling UseDialogue
- Allows modders to remove the Ally mission start dialogue for AL lances at a contract level
- Per-Contract Override - Additional Lances - Support Custom Objective Names
- Allows modders to provide custom names for the Enemy AL lances
- Fewer objective names can be provided than AL lances and if the names aren't enough it fallsback to the default names
- Per-Contract Override - Additional Lances - Support CastDef
- Allows modders to provide a custom CastDef id and that Cast will speak the mission start dialogue for Ally AL lances
- CastDef id can be a Mission Control dynamic CastDef id as mentioned in the new
Dialogue
features
- Per-Contract Override - Additional Lances - Support Custom Dialogue
- Allows modders to provide custom dialogue for the Ally AL lance to speak at the mission start dialogue
- Additional Lances - Code API access
- Allows modders to link against Mission Control and access the Additional Lances feature functionality
- Modders can provide a lance count, list of
LanceOverride
s orMLanceOverride
s and optional objective name overrides - This will override every other AL lance approach
- Usable only for procedural contracts and not available for Flashpoints and Story contracts
- Accessed through
MissionControl.Instance.API
- Metrics
- Added a way for other mods to access some Mission Control data
- Accessed through
MissionControl.Instance.Metrics
- Currently supports Additional Lance counts per encounter/contract
⚡ Improvements
- Custom Contract Types: Build File Format Updated
- The custom contract type build file format is updated as built by the Designer
- Solo & Duo Duel: OpFor Moves To Engage Before Contact
- Previously, the OpFor duelists would sit at their spawn point until contact was made, then they would move to engage the player
- This led to a boring situation where the player would just jump the enemy
- Now the OpFor moves to engage the player similar to how the player would move at the start of the contract
- Extended Boundaries - Support use of only MapId
- Previously, you could provide only
ContractTypeName
or provideContractTypeName
andMapId
but you couldn't only provideMapId
- You can now provide only
MapId
if required
- Previously, you could provide only
- Blackout: Fixed bad turret placement in Phase2 base in Story7 map
- Often the turrets would destroy the buildings they were meant to protect
- Additional Lances: Follow AI is restricted to Additional Lance lances
- Previously, the FollowAI would be injected into the
Core
behaviour tree andFollow
orders would be sent to all lance units that had theEmployer
tag - This correctly didn't affect things like Escort units or Defend Base engineers as they didn't use the
Core
AI behaviour tree - Now, the AI
Follow
order is sent to any lance units that have bothEmployer
andAdditionalLance
tags - so only the AL lances - This change purely keeps Mission Control's Follow AI influence to where it's required
- Previously, the FollowAI would be injected into the
- Data Cleanup: Added new method for cleaning up data from Mission Control
- This new method is now default
- The old method can be turned on instead if there are some unforseen compatibility issues with other mods in the community
- In
settings.json
, there is a new setting underMisc/ContractOverrideDataCleanupMethod
RestoreFromCopy
is the default and the new cleaning method. It takes copies of LanceOverrides and ObjectiveOverrides and restores them after combatScrubData
is the old method. It scans through the contract override and removes anything MC added.
- Contract Type Builder - Added
DurationType
property to OccupyRegion Objective
🔧 Changes
- Contract Type Builder - Refactored
SetStateResult
result toSetStatusResult
- Contract Type Builder - Refactored
SetStateAtRandomResult
result toSetStatusAtRandomResult
🐛 Bug Fixes
- Additional Lances: Ally units Follow AI was breaking after initial contact with enemies
- If an initial encounter was made and at least one enemy unit was destroyed, then contact lost - then the ally AL Follow AI wasn't stripping out dead units for visible/detected enemy checks so the ally AL would always think there were enemies nearby and never return to follow mode
- Now, dead units are not considered valid for visible/detected enemy checks
- Now, ally AL lances will return to follow mode correctly after contact is lost
- Custom Contract Types: Metadata was using wrong heights when plots changed
- Mission Control's custom recalculation of the metadata (based on BT's algorithm) was running before the custom contract type plots were enabled/disabled
- This would cause the metadata heights to not always be correct in plot areas that were different to the existing vanilla metadata
📝 Documentation / Website
- Added a Dialogue System feature page
- Added a Metrics feature page
- Updated Per-Contract Overrides feature section with new Additional Lances settings
- Added
ContractOverrideDataCleanupMethod
to theSettings
feature page - Added Additional Lance API section to the
Additional Lances
feature page - Added information on
MapId
only overrides for theExtended Boundaries
feature page - Fixed incorrect information in
SetTeamByLanceSpawnerResult
andSetTeamByLanceSpawnerGuidResult
result pages - Refactored
SetStateResult
result toSetStatusResult
- Refactored
SetStateAtRandomResult
result toSetStatusAtRandomResult
- Fixed incorrect information in
CompleteObjectiveResult
result page - Fixed incorrect information in
EncounterObjectiveMatchesState
conditional page - Fixed incorrect information in
ObjectiveStatuses
conditional page - Fixed issue with latest LastPass Chrome plugin with the website causing empty space to appear near the top of the page
- Added
DurationType
toOccupyRegion
objective page
🆙 Upgrade Instructions
This update is just a dll and mod.json update.
- If you're using MC without a modpack and none of your own changes, just delete the MC folder and move the new one into your mods folder
- If you're using MC as part of a modpack, let the modpack authors update MC for you (using the below guide)
- If you're using MC without a modpack but you've made some of your own changes to the configs, or you're a modpack author:
- Copy into your Mods/MissionControl folder
- MissionControl.dll
- mod.json
- Copy into your Mods/MissionControl folder
Copy and Overwrite Example Per-Contract Override Files
- Copy and overwrite
config/Contracts
toconfig/Contracts
folder
Copy new CastDefs
- Copy and overwrite
overrides/cast
folder tooverrides/cast
folder
Copy new Blackout contracts
- Copy
overrides/contracts/blackout/Blackout_AMinorRoyalPain.json
tooverrides/contracts/blackout
- Copy
overrides/contracts/blackout/Blackout_AbsentWitness.json
tooverrides/contracts/blackout
- Copy
overrides/contracts/blackout/Blackout_PreparedGrounds.json
tooverrides/contracts/blackout
ContractOverrideDataCleanupMethod
setting to the settings.json
Add - Edit the
Misc
section and add to the bottom of that section:
"ContractOverrideDataCleanupMethod": "RestoreFromCopy"
Copy new portraits
- Copy and overwrite
spirtes/Portraits
folder tospirtes/Portraits
❗ Update Custom Contract Type Build Files
There are many changes within the custom contract type build files and the EncounterLayer files that need to be addressed in this update. I'll explain the easiest method that I recommend.
Easiest (RECOMMENDED) Method
Everyone should use this approach to upgrade the contract type and encounter layer files.
- Delete your
contractTypeBuilds
folder and copy in the new v1.5 releasecontractTypeBuilds
folder - Delete your
overrides/encounterLayers
folder and copy in the new v1.5 releaseoverrides/encounterLayers
folder - (BTA modpack, and any modpack with their own custom contract types) Recreate your Hero Duels (or other custom contract types you've made)
- (Any modpacks that edited the old contract type build files) Remake the old changes to the new contract type build files
Harder (NOT SUPPORTED) Method
If you decide to take this approach it is NOT SUPPORTED by Mission Control (and CWolf). The only reason you'd take this approach is if you made extensive changes to the previous custom contract types and you didn't want to lose these changes. NOT RECOMMENDED.
- Rename all
contractTypeBuilds
in your modpack to be the same as the newcontractTypeBuilds
- Copy over new
contractTypeBuilds
files forSoloDuel
,DuoDuel
,Blackout
into their respective sub-folders - Rename all
overrides/encounterLayers
files to be the same as the newcontractTypeBuilds
NOTE: For any non-MC custom contract types the names of the your own custom encounterLayers must take the same format and link to the contract type build files. The reason for this is for Designer compatibility. The format is:
build file:
[mapname]_[biome].jsonc
, for examplecentralmountain_desertparched.jsonc
andmountainhold_lunarvacuum.jsonc
encounterLayer file:
encounterLayer_[contracttype].[mapname]_[biome].json
, for exampleencounterLayer_blackout.centralmountain_desertparched.json
andencounterLayer_blackout.mountainhold_lunarvacuum.json
Compare each and every contract type build file and apply the diff changes manually (allows you to keep your custom)