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 /
selectedCastDefIdcan 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_1orcastDef_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 customEncountertag 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
Dialoguefeatures
- 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
LanceOverrides orMLanceOverrides 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
ContractTypeNameor provideContractTypeNameandMapIdbut you couldn't only provideMapId - You can now provide only
MapIdif 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
Corebehaviour tree andFolloworders would be sent to all lance units that had theEmployertag - This correctly didn't affect things like Escort units or Defend Base engineers as they didn't use the
CoreAI behaviour tree - Now, the AI
Followorder is sent to any lance units that have bothEmployerandAdditionalLancetags - 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/ContractOverrideDataCleanupMethodRestoreFromCopyis the default and the new cleaning method. It takes copies of LanceOverrides and ObjectiveOverrides and restores them after combatScrubDatais the old method. It scans through the contract override and removes anything MC added.
- Contract Type Builder - Added
DurationTypeproperty to OccupyRegion Objective
๐ง Changes
- Contract Type Builder - Refactored
SetStateResultresult toSetStatusResult - Contract Type Builder - Refactored
SetStateAtRandomResultresult 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
ContractOverrideDataCleanupMethodto theSettingsfeature page - Added Additional Lance API section to the
Additional Lancesfeature page - Added information on
MapIdonly overrides for theExtended Boundariesfeature page - Fixed incorrect information in
SetTeamByLanceSpawnerResultandSetTeamByLanceSpawnerGuidResultresult pages - Refactored
SetStateResultresult toSetStatusResult - Refactored
SetStateAtRandomResultresult toSetStatusAtRandomResult - Fixed incorrect information in
CompleteObjectiveResultresult page - Fixed incorrect information in
EncounterObjectiveMatchesStateconditional page - Fixed incorrect information in
ObjectiveStatusesconditional page - Fixed issue with latest LastPass Chrome plugin with the website causing empty space to appear near the top of the page
- Added
DurationTypetoOccupyRegionobjective 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/Contractstoconfig/Contractsfolder
Copy new CastDefs
- Copy and overwrite
overrides/castfolder tooverrides/castfolder
Copy new Blackout contracts
- Copy
overrides/contracts/blackout/Blackout_AMinorRoyalPain.jsontooverrides/contracts/blackout - Copy
overrides/contracts/blackout/Blackout_AbsentWitness.jsontooverrides/contracts/blackout - Copy
overrides/contracts/blackout/Blackout_PreparedGrounds.jsontooverrides/contracts/blackout
Add ContractOverrideDataCleanupMethod setting to the settings.json
- Edit the
Miscsection and add to the bottom of that section:
"ContractOverrideDataCleanupMethod": "RestoreFromCopy"
Copy new portraits
- Copy and overwrite
spirtes/Portraitsfolder 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
contractTypeBuildsfolder and copy in the new v1.5 releasecontractTypeBuildsfolder - Delete your
overrides/encounterLayersfolder and copy in the new v1.5 releaseoverrides/encounterLayersfolder - (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
contractTypeBuildsin your modpack to be the same as the newcontractTypeBuilds - Copy over new
contractTypeBuildsfiles forSoloDuel,DuoDuel,Blackoutinto their respective sub-folders - Rename all
overrides/encounterLayersfiles 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.jsoncandmountainhold_lunarvacuum.jsoncencounterLayer file:
encounterLayer_[contracttype].[mapname]_[biome].json, for exampleencounterLayer_blackout.centralmountain_desertparched.jsonandencounterLayer_blackout.mountainhold_lunarvacuum.jsonCompare each and every contract type build file and apply the diff changes manually (allows you to keep your custom)