NOTE: This release is only to officially release out the two hotfix files that were in the MC discord for over half a year. If you already have those there is no need for you to download this release.
When Mission Control wasn't running for a contract the data backup wasn't running. When the contract ended the data backup caused an infinite spinner because there was no data to restore and MC errored.
This 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.
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
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 or castDef_TeamPilot_Random_BoredPilot)
Some pilots can be accessed in the dialogue, e.g. ({MC.PlayerLance.TeamPilot_Random_2.UnitName}, {MC.PlayerLance.Speaker.DisplayName}, {MC.Commander.DisplayName})
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
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
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.
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 new contractTypeBuilds
Copy over new contractTypeBuilds files for SoloDuel, DuoDuel, Blackout into their respective sub-folders
Rename all overrides/encounterLayers files to be the same as the new contractTypeBuilds
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 example centralmountain_desertparched.jsonc and mountainhold_lunarvacuum.jsonc
encounterLayer file: encounterLayer_[contracttype].[mapname]_[biome].json, for example encounterLayer_blackout.centralmountain_desertparched.json and encounterLayer_blackout.mountainhold_lunarvacuum.json
Compare each and every contract type build file and apply the diff changes manually (allows you to keep your custom)
As many of the features and fixes are related to EL - I'm drawing attention to it here. Some of the below fixes and improvements for EL v2 are covered below in the main changelog too.
Extended Lances has been given a major upgrade. There were some fundamental issues and limitations with EL that preventing some modders achieving the results they wanted. Now EL should have fewer bugs and more flexibility.
A new settings.json property called ForceLanceOverrideSizeWithTag which controls this behaviour
When a LanceOverride (lance in the contract json) has this tag in its lanceTagSet/tagSetSourceFile then it will force EL to spawn this exact defined lance
lanceTagSet/tagSetSourceFile is not used in BattleTech so it's been adopted for this feature
When EL autofills lances it has to decide how to handle units that are defined as empty (mechDef_None, vehicleDef_None)
A new settings.json property called AutofillType which controls this behaviour and it has two settings:
RespectEmpty is the legacy and still the default behaviour. When a LanceOverride or LanceDef has empty units defined (e.g. mechDef_None, vehicleDef_None) then it will respect those and not autofill them.
FillEmptyis a new autofill behaviour. When a LanceOverride or LanceDef has empty units defined (e.g. mechDef_None, vehicleDef_None) then it will autofill and replace them so units will spawn in those slots.
A new settings.json property under ExtendedLances called AutofillStartingFromContractDifficulty
To aid in a fairer early game, you can now control when Extended Lances autofills units in lances that are below the faction's EL LanceSize by setting a contract difficulty (real difficulty - not UI/visible difficulty) to start autofilling from
This does not affect LanceDefs that fill up to the faction's LanceSize themselves (e.g. modpack Clan LanceDefs up to 5 or 6 etc)
For those who don't want this feature - set it to 1
At times EL needs to copy units to create a varied and interesting lance when autofilling it up to the Faction Size (or any overridden size). In this case EL tries to copy a 'Tagged' lance so to use this tagged UnitSpawnPointOverride and leverage the tags to provide variation. If there are no 'Tagged' lances available to copy it will use the defined behaviour in AutofillUnitCopyType in the settings.json.
A new settings.json property called AutofillUnitCopyType which controls this behaviour and it has two settings:
FirstInLance - The legacy behaviour. It would pick the first unit (index 0) and copy it (giving it new identify/clearing custom names etc)
RandomInLance - The new behaviour and is now the default behaviour. It picks a random unit from the Lance to copy (giving it new identify/clearing custom names etc)
Previously Ambush Convoy boundary increased by 30%. As players sometimes struggle to catch the convoy if the Random Spawn algorithm places them too far away the boundary increase is now reduced slightly to 20%
When BT copies LanceDefs it would never maintain/preserve the tagSetSourceFile property. Since this property is never used in the game it isn't a problem, however, Since ELv2 uses it - it has been fixed
This acts as a middle ground between dynamic AL and custom contract types. You can use a per-contract override for your contract and manually specify the dropping ally and enemy Additional Lances
If a Flashpoint was abandoned then it still remains the ActiveFlashpoint in the game. Due to this an assumption I made causes a crash as an abandoned flashpoint doesn't have any active contracts
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
Edit settings.json (and/or your settings.user.json / settings.modpack.json overrides) with the following:
#Add the following Misc block under the top-level Spawners block
"Misc":{
"LanceSelectionDivergenceOverride":{
"Enable":true,
"Divergence":20
}
}
Specific for RT modpack
For RT modpack authors, or any modpack that uses custom high difficulty value lances like RT, use this block instead (or experiment with much higher divergence values):
A new settings.json property called EnableStoryOverrides exists. When this is enabled MC will look into each settings.json feature section for the EnableForStory property to decide if a feature should be running in Story & Restoration contracts
Incorporated a fix by @mcb5637. Thanks.
Using these features will severly unbalance the Story and I will not provide support
You can now use MC with Skirmish without the debug / quick skirmish rules (this means no longer spawning right next to each other)
A new settings.json property called EnableSkirmishMode which controls if this MC Skirmish ruleset is running
DebugSkirmishMode still exists and will spawn you next to the enemy for tests. It will also show the 'Quick Skirmish' button if enabled, and takes precedent over EnableSkirmishMode
EncounterRules.GetPlayerLanceChunkName() will be removed in the future. Use EncounterRules.GetPlayerLanceChunkGameObject(GameObject encounterLayerGo) instead
EncounterRules.GetPlayerLanceSpawnerName() will be removed in the future. Use EncounterRules.GetPlayerSpawnerGameObject(GameObject chunkPlayerLanceGo) instead
Disables the 'Quick Skirmish' button and disables the debug encounter ruleset that spawns you next to the enemy lance. Ideal use for this is for testing.
"DebugSkirmishMode":false,
#Add the following properties after EnableAdditionalPlayerMechsForFlashpoints
"NeverFailSimGameInFlashpoints":true,
"EnableStoryOverrides":false,
"EnableAdditionalPlayerMechsForStory":false,
#Add EnableForStory in every feature section under EnableForFlashpoints property and set to 'false'
This is the final release of Mission Control by me, CWolf. It was a hard decision to make but after two and a half great years modding BattleTech - I've decided it's time for me to move on. Thank you all for the support and I'm glad you've enjoyed what Mission Control grew into. It's not without its faults but I'm very proud of the work I accomplished here.
Keep enjoying BattleTech and destroying your way through the Inner Sphere! Take care - it's been a pleasure. Signing off.
This allows modders to make use of any custom contract type such as Blackout, Solo Duel and Duo Duel in flashpoints.
Flashpoints & Normal Contracts: Per contract MC feature overrides
This allows modders to specify specific settings (e.g. 2 enemy and 1 ally Additional Lances) per specific contract
Supports both MissionControl/config/Contracts and MissionControl/config/Flashpoints folders for file management for big modpacks. By default only Contracts is used for both.
User & Modpack Settings Overrides
Modpacks can create a settings.modpack.json and players can create a settings.user.json settings file to ease upgrading MC versions.
Load order is settings.json then settings.modpack.json then settings.user.json. With the last values overriding earlier.
Reward Screen Softlock: Fixed a situation where if the player restarted a mission, and the previous attempt had an enemy Additional Lance, when the contract was completed the reward screen would soft lock due to dirty contract data for objectives
Contracts Screen Infinite Load: Fixed another bad vanilla method situation where, in rare situations, the contracts screen would get stuck on the loading screen due to limited selection of biomes/factions/contract types/contracts.
Dynamic Withdraw: Feature was running in situations it shouldn't.
This release fixes a vanilla infinite contracts screen issue relating to original HBS code and restrictive contracts involving lack of faction selection and system restrictions, and a quick skirmish bug.
For upgrade instructions, see below the changelog.
Contracts: Fixed infinite loading screen when faction and system restrictions conflicted with some contract types and contracts (Thanks a lot for the help Pode, Granner and Quiller with debugging this)
Skirmish: Fixed map loading exception when allies dropped with you
This release fixes lots of very important bugs and adds some enhancements to Mission Control. One very important late addition to the patch is that the ally lance Follow AI has been fixed. If you've previously disabled them or not used them because how useless they were - it's time to try them again!
Please take the time to read through the changelog as there's some very good fixes in this patch! Enjoy!
For upgrade instructions, see below the changelog.
Dynamic Withdraw: Reduced the maximum distance the extraction zone can appear from the player lance from ~17 hexes (400 meters) to 12 hexes (288 meters).
Blackout: Decreased event phase 2 turret event trigger wait from 3 rounds to 2 rounds
Blackout: Story Map 7 - Changed event phase 1 ambush camera position from medium to high to better see the droppods arrive
Blackout: Changed the trigger condition for event phase 1 from the whole lance to requiring only 2 lance members
Blackout: Changed contract balance
Assassinate: Assassination target's extraction zone will now always spawn at least 20 hexes (480 meters) away from the target's spawn position
Contracts: Fixed a broken vanilla contract generation method causing custom contract type contract spam
Loading: Fixed MDD SQL error caused by encounter loading which resulted in a frequent black screen on load to main menu for players on HDD drives instead of SSDs.
Blackout: Blackout specific ally lance dialogue didn't play
Blackout: Fixed issue where contracts wouldn't end correctly if the player destroyed the ambush lance before the friendly turrets activated
Blackout: Fixed event phase 2 invading lance not having a random spawn rule set up correctly
Blackout: Story Map 7 - Fixed orientation of event phase 1 invading lance
Blackout: Story Map 7 - Fixed orientation of event phase 2 ambush lance
Additional Lances: Contracts will now not autocomplete when AL lances are still active (except for those specified in the config.
By default DefendBase and FireMission
Additional Lances: Finally fixed comma based locales causing the AL reward to be 100 times expected amount
Logs: RecomputePathing exceptions will no longer appear after a contract has loaded
Solo / Duo Duel: Various spelling mistakes and dialogue tweaks (thanks @CargoVroom)
New Result: TriggerResultAtRandom allows you to specify multiple children results and one will be selected at random when this TriggerResultAtRandom result is triggered
New Result: IgnoreChunks allows you to specify multiple chunk guids. When this result is triggered it will iterate over all chunks specified and set the Chunk to Completed and any objectives as Ignored
This release adds a new custom contract type, 9 new contracts, expands duel contract type biome support and lots of quality of life features and bug fixes.
1.0.0 has been a big release for me. I feel with the maturity of Mission Control it warrants the 1.0.0 versioning. This release contained over 24% of the commits in the entire mod and you'll see why below in the changelog. A huge amount of effort has been put into opening up the contract type system to allow other modders to create new and interesting contract types for the whole community to enjoy. Hopefully people will take advantage of this.
Thanks for staying with me on this journey over the years (first release was on the 18th November 2018 with the first code saved on the 11th September 2018). I know there's still issues with the spawner but I feel, as whole, Mission Control has greatly improved the BattleTech experience. I hope you all feel the same way.
Enjoy and please let me know what you think of Blackout, the new contract type.
For upgrade instructions, see below the changelog.
Heavily expanded the custom contract type builder (check API docs on MC's website)
Contract Types: Added new custom contract type
Blackout - A point of interest of your employer has gone dark and they're sending you in to investigate. A low intel situation with different situations each time you play.
Contains new non-vanilla map logic.
Includes new ally chatter specific to Blackout
Contracts: Added 3 contracts for Blackout
Dug in Deep
Heavy Static
Unknown Cause
Contracts: Added 3 contracts for Solo Duel
All Eyes On
Challenge Accepted
Cornered Revenge
Contracts: Added 3 contracts for Duo Duel
At High Noon
Last Minute Replacements
Yearly Tussle
Maps: Added 4 maps/biomes to Blackout
frostyslopes map on tundra biome
mountainhold map on lunar biome
story2 map on badlands biome
story7 map on lowlands biome
Maps: Added 3 more maps/biomes to Solo Duel and Duo Duel
deathvalley map on desert biome
story3 map on lunar craters biome
story6 map on frozen poles biome
AI: Follow AI - Added alternative pathfinding for 'Follow Player' AI
Configurable in settings.json with the new Alternative being the new default with Original being the v0.4.6 version
Additional Lances: Alternative spawn calculation system
Off by default
Variable enemy/ally lance drops based on player drop skulls/difficulty level
Additional Lances: Option to indepedently disable allies and/or enemy lances
settings.json as DisableAllies and DisableEnemies
Additional Lances: Option to disabe/enable objective markers under certain conditions.
This allows the AL objective to be hidden to make the contract more unpredicable.
settings.json as HideObjective and ForceDisplayOfHiddenObjectiveIfPrimary
Additional Lances: Added a MRB influence for lance selection
For example, MRB_Level:4 to spawn specific lances for MRB level 4
Or, MRB_Rating:200:300, to spawn when MRB rating is between 200 and 300
AI: Follow AI - Fixed broken vanilla method call.
NeutralToAll units (and maybe others) were being identified as enemies for 'Follow AI' pathfinding. This might have caused some situations where the allies stopped following the player.
Random Spawns: Exposed the boundary 'buffer' zone
This is where a lance is allowed to spawn (beyond X and within Y distance) when using the SpawnLanceAtEdgeBounadry spawner profile.
settings.json under the SpawnLanceAtEdgeBoundary section
Extended Lances: Added a system to skip extending a lance by exclude tags
Skip if they have a set tag under their lance lanceExcludedTagSet in the contract override JSON
settings.json as SkipWhenExcludeTagsContain
Extended Lances: Added a system to skip extending a lance by tags
Skip if they have a set tag under their lance lanceTagSet in the contract override JSON
settings.json as SkipWhenTaggedWithAny and SkipWhenTaggedWithAll
Extended Boundaries: Increased the boundary size for SimpleBattle and mapGeneral_desertDam_aDes map
Additional Lances: ExcludeContractTypes didn't work correctly and was using the wrong setting. It was picking up the ExtendedLances one instead.
Additional Lances: Comma based decimal locales caused rewards to be much higher than intended
Random Spawns: Fixed one cause of Defend Base and Destroy Base sometimes spawning you in the wrong location, or in the enemy base
Random Spawns: Added a set distance the player must spawn beyond on Destroy Base (roughly 16 hexes away)
Contract Types: Custom contract types weren't being picked up for ExcludeContractTypes or IncludeContractTypes settings
Droppods: Fixed a vanilla bug where droppod animations and effects sometimes weren't synced up in position to the actual drop pod and landing mech/vehicle
Additional Lances: Added an option (MatchAllyLanceCountToEnemy) to 'match' ally lance count to the rolled enemy lance count. This is off by default but can be turned on in the settings.json.
Additional Lances: Added an option (IsPrimaryObjectiveIn) in the settings.json to specify if the enemy AL lance(s) should be a primary objective or not.
UI: Added an update notification. When a new version of MC is released the Main Menu will show a notification. This can be disabled in the settings.json.
AI: Follow Player - Exposed TargetZoneRadius setting in the settings.json. This specifies the target zone the following mech will try to enter before not following anymore. If this zone is left, they will try to follow again.
Load Times: Decreased on average between 30% - 50%
Additional Lances: Lower tonnage lances can now spawn for higher difficulty contracts (since v0.4.2 only the same class of lance [e.g. heavy, assault] would spawn for the difficulty level).
Additional Lances: Reduced max lances to 1. MC is just too brutal at times. This can be edited back under the configs MissionControl/config/AdditionalLances/ if you want it harder again.
Additional Lances: Substantially increased bonus payout from 20% to 150%. This is to try and offset the huge Company cost to fighting extra lances like the repairs, new mechs and pilot recruitment costs.
Extended Boundaries: Increase specific boundary size for contract type & map combinations
Capture Base with mapGeneral_frigidSteppes_iTnd
Capture Base with mapGeneral_icyOutpost_iGlc
Simple Battle with mapGeneral_highPeak_iGlc
Fire Mission (all of them)
Extended Boundaries: Increase default boundary increase from 20% to 30%
Rescue: Added a minimum distance to objective check for the player lance spawn
Hot Drop Protection: Changed evasion pips from 4 to 6 (effectively a change from 40% to 60% evasion) if the starting drop is within enemy detection range
AI: Follow AI - Reduced 'should sprint' range from 200 to 120 units. This means the following unit should keep up better with the player mechs
Random Spawns: Fixed issue where mechs wouldn't be able to move after spawning (stuck in one place from spawn)
Random Spawns: Fixed issue where mechs would spawn in rocks or buildings
Random Spawns: Fixed a few issues that could cause long loads
Random Spawns: Fixed the Array out of Bounds errors when testing for valid spawn points
Random Spawns: Fixed issue where the map 'plot' (point of interest) could not be found to orientate spawns on for the map mapGeneral_gridLock_uTech (and possibly others who shared the same map set up)
Random Spawns: Fixed issue where the pathfinder mechs would trigger any Region they entered causing an error
Extended Boundaries: Setting the sub-override IncreaseBoundarySizeByPercentage was not read. This is a similar issue as v0.4.2 but for the contract type & map Overrides section instead.
Extended Boundaries: Customised size position can be wrong causing key points outside of boundary (same bug as in v0.4.2). Should be properly fixed now.
Localisation: Fixed a possible issue with locales that don't use period / fullstop for their decimal place. An error would occur when loading a map with an Additional Lance reward
Additional Lances: Fixed issue where if the player restarted a contract 3 or more times then no more AL lances would spawn (friendly or enemy)
Additional Lances: Fixed issue where Heavy Metal campaign contracts would allow Mission Control to run (and Bigger Drops). There's a setting (DisableIfFlashpointContract) in the settings.json to allow for MC to run in flashpoints but it's off by default.
Balanced Additional Lances for every difficulty level.
No enemy lances on very low difficulty contracts
Lances that appear should now be lower than your lance level so to not overload players
Higher levels are roughly the same as before
Default fallback lance is now a light lance instead of a range between light up to assault
Removed example MC lance configs that did nothing but resulted in using the fallback. This could lead to a case where a 1/2 skull contract would give you two enemy assault lances (yikes! sorry guys!)
AI: Follow AI can now be configured.
Can decide the follow logic (HeaviestMech or LanceOrder)
Can decide when to stop using this AI (OnEnemyDetected, OnEnemyVisible, WhenNotNeeded [previous default])
Can decide how far away from the target the AI should only sprint to catch up
Additional Lances: Units used to sometimes spawn inside each other. This was harmless for player units in player units but issues could occur with allies and enemies. If droppods were involved there was often a mess on the floor afterwards and a dead mech
Story / Restoration contracts: MC was running for Restoration contracts since v0.4.0. This has now been prevented and is a similar fix that went in for Story contracts in v0.4.1.
Extended Boundaries: Setting IncreaseBoundarySizeByPercentage was not read. This meant there was no way to manually change the boundary size.
Extended Boundaries: Custom sizes, including the default of 20% increase, caused some contracts to have extraction points and other important locations to fall outside the boundary.
AI: Follow AI has been improved. Now, the Follow AI no longer runs when a condition is met (defaults to OnEnemyDetected). This means the allied units will actually fight instead of ignore combat.
AI: Various contract types were missing Follow AI for important reasons. This could sometimes cause the AI to do nothing. This was reworked to allow the AI to run in all contract types.
Encounters: Fixed the cause of SaveSpawnPositions errors
Unknown contract type fallback ruleset - If an unknown countract type is encountered, a fallback contract type ruleset will be applied so access to the full MC featureset will still work for that contract type
Added IncludeContractTypes and ExcludeContractTypes to RandomSpawns, HotDrop, AdditionalLances, ExtendedLances, ExtendedBoundaries and DynamicWithdraw settings.json options
AI - Friendly turrets will no longer get the 'Follow Heaviest Mech' AI applied to them. This was causing issues where turrets wouldn't fire on the enemy if the player's heaviest mech was too far away. The turrets wanted to sprint after the player.
This release brings in BT 1.8 compatibility and some features and bugfixes. Sadly, I haven't been able to fix the spawn and load issues yet but I am working on it.
Random Spawns: Provided a setting to turn off random spawns for the original map spawns (Additional Lances and Extended Lances will still spawn according to their spawn profile even with this turned to false)
BT 1.7 forced me to release early to bring in BT 1.7 support. Mainly adds support for this, plus some additional features and minor bug fixes. Any remaining v0.3.1 milestone items are pushed to v0.3.2.
Extended Lances - Increase the size of a faction's lances allowing for clan stars (5 mechs) and reinforced lances / comstar demi-lances (6 mechs). Works for vanilla spawns and Mission Control spawns.
Additional Lances Faction Rep - Allow faction reputation range to select which lance to use
Additional Lances Elite Lances - Allow elite lances to be selected if allied or enemy with a faction
Flashpoint options - Allow for disabling Mission Control entirely, or just disabling only Additional Lances for FPs
Additional Lances Skull Lance Difficulty - Added a full initial set of lances to fit different difficulty levels
Ally Lance Combat Dialogue - Added more dialogue than the sample amount in v0.2.0a
Additional Lances Tonnage Restrictions - Ability to disable Additional Lances on various tonnage rules
BT v1.3 / FP Support
Ally Lance Combat Dialogue - Unique dialogue per contract type and MC contract type variations if you have an ally lance dropping with you.
Additional Lances Skull Lance Difficulty - Additional Lances now take into account skull difficulty when selecting lances to drop into a contract.
Additional Lances in Battle are Primary Objectives - This makes a lot of sense for a Battle as the contract sometimes would end seemingly at random when the original targets were destroyed.
Hot Drop Safety Features - When dropping into close proximity of enemies hot drop safety features will take effect. In the settings.json you can modify these. It supports auto-guard, auto-evasion and an option to include the enemies in this protection mode too.