• We have updated our Community Code of Conduct. Please read through the new rules for the forum that are an integral part of Paradox Interactive’s User Agreement.
I totally got a Command Console to work. Well, half-working. Being able to drag a second pilot into the 'Mech will require (most likely) actual programming by delving into the CSharp.
Damn, you beat me to it. I have a need for command consoles, I have at least 2 Mechs in my release pack that can use it.
 
Disregard my previous attempt to compare speeds. For some reason I was focused on converting everything to kph. Should have just been, TT Movement Points * 30 = Distance.

Including the Walk, Run, and Sprint from TT.

Code:
TT Hexes   HBS Walk/Sprint   TT Walk/Run/Sprint

2/3        BT 95/165         TT 60/90/120    Urbanmech
3/5        BT 95/165         TT 90/150/180   Atlas
4/6        BT 120/200        TT 120/180/240  Centurion
5/8        BT 140/240        TT 150/240/300  Wolverine
6/9        BT 165/275        TT 180/270/360  Commando
7/11       BT 190/315        TT 210/330/420  Jenner
8/12       BT 210/350        TT 240/360/480  Locust
10/15      BT 260/400        TT 300/450/600  Swiftwind Scout Car

To me it is looking like they based it off of Walk/Run, not Run/Sprint. Then made adjustments from there.
 
How to activate Console and get full combat dump neatly.
Thanks to LordCorvin1 on the Discord channel I was able to get this out.

You can get a neat Combat log but that requires some hoop jumping.

First, you need to mess with your registry, to enable the Console. You do that by saving the following as a .reg file

Code:
Windows Registry Editor Version 5.00

[HKEY_CURRENT_USER\Software\Harebrained Schemes\BATTLETECH]
"last_debug_state_h176629417"=dword:00000001

This will mess with your registry so make sure you are comfortable and able to do it. This will enable you to turn on the console.

You can then start the game. Once you start a Skirmish game -- properly, once you start a CombatGame -- you can bring up the following menu at any time by using LEFT-CTRL+SHIFT+MINUS:

upload_2018-5-3_20-45-0.png


Use the pull down menu to select the Full Details option. Once selected, you can continue to play -- the game will automatically dump out the file at the end of this session.

The game puts it in the following folder:

upload_2018-5-3_20-46-4.png


They have it by date, so it's fairly obvious which is which. Opening the Combat Log will give you this:

upload_2018-5-3_20-46-54.png


Much easier to read.

I'm providing these instructions to help modders analyse their work so that we can get better mods. The console has many capabilities, so please don't abuse.

Also, modifying your registry may result in some other effects, like Steam achievements may not register. If you don't need it, how I get back to normal is simply to run another .reg file as below:

Code:
Windows Registry Editor Version 5.00

[HKEY_CURRENT_USER\Software\Harebrained Schemes\BATTLETECH]
"last_debug_state_h176629417"=dword:00000000

You can save both files and doubleclicking on them in folders will run them.
 
Alright, question time again.

Thanks to earlier suggestions in this thread (to check out the Reddit which so far I did not even realize existed), I managed to get my custom mechwarriors as my starting lance by doign some edits to the milestone files.

I ran into a new problem now, though.

While the custom pilots and their PNG-based portraits work perfectly fine upon starting a new campaign, as soon as I save, leave the game and later load it again, the pilot images/portaits break and display only as a blank white field in the UI. I can start missions and continue to use the pilots, but in missions they all have the standard 3D portrait while in the Leopard/Argo UI (Barracks) the image is, as said, a blank white field.

This "breaking" seems to be triggered by the save/load routine, as if I start a new campaign and then just keep playing without ever loading a save, the portraits don't break.

It really seems to me the campaign game is highly allergic to simple PNG based portraits and heavily favours the 3D ones. :-/

Anybody else notice this behaviour and mayhap know a way around it?
 
A little addendum to my problem two posts up.

I tried using HBS supplied Backer pilots instead of my own custom ones (as the backer pilots also use PNG based icons instead of 3D portraits).
They work and keep working even after many save/load cycles.

So it isn't a problem with PNGs per say, it seems to have to do either with custom pilots and how they are integrated or with the PNG files themselves. (My PNGs are 24bit, while the HBS backer pilot ones all are 32bit, since they all have transparancy, which mine lack.)

I am going to continue investigating into that direction as soon as I have found a way to add an alpha channel to a picture without transparancy. ^_^"
 
I am going to continue investigating into that direction as soon as I have found a way to add an alpha channel to a picture without transparancy. ^_^"
In The Gimp, it's simply a menu option: Layer -> Transparency -> Add Alpha Channel.

Don't know about other drawing programs, but The Gimp is a free download if you get stuck. :)
 
In regards to my custom pilot portrait problem, I seem (emphasis on "seem") to have solved it now.
What I did was 2 things.

1.) I moved the *.png files from my separate mod directory to the .\sprites\Portraits folder where HBS stored all the backer pilot *.pngs. (And updated all the references to them, naturally.)
2.) I added the "pilot_backer" tag to the PilotTags section of the pilot *.json files of my custom tincan cowboys.

After starting yet another new game, it seems one of these two changes has done it. Only tested it briefly, though. Will commence on a test over the weekend to see if it holds.
 
Has anyone had any luck creating new contracts and having them show up in game?
I spent an hour or two tonight trying to add a test contract only for it to never actually show up, I'm wondering if I'm missing something or if anyone has any information about how contracts are selected and chosen from?
Perhaps a list somewhere I'm not adding it to.

My goal is to create a set of new contracts with specific prerequisites that'll use new lances that have the option to contain better equipped mechs. Such as rich Manufacturer worlds opponents having possible access to ++ equipment.
 
Only skimmed over the last couple pages, so apologies if this has been talked about previously - if so, I'd massively appreciate it if someone pointed me in the right direction.

Anyways, been meaning to have the SLDF tech 'Mechs, the GRF-4N, the BL-6b-KNT, the HGN-732b and the AS7-D-HT to enemy lances. From what I understand, the game seems to just draft the OpFor from whatever Mechs fit the specified tags, so setting the tags in the MechDef file of the SLDF Mechs to match their non-LosTech counterparts ought to do the trick, right? Anything I'm missing?
 
So this may be a weird place to put this, but whatever.

In an attempt to mix mods, in this case two mods that both add new items etc. I added this to the version manifest beneath the first mod's.

Gear_PartialWing_Generic_Standard,JumpJetDef,mods/PartialWingSystem/Gear_PartialWing_Generic_Standard.json,15,2018-02-27T00:45:28.3055231Z,2018-04-05T01:11:44.4005746Z,,,False,0,False
Gear_PartialWing_Generic_Heavy,JumpJetDef,mods/PartialWingSystem/Gear_PartialWing_Generic_Heavy.json,15,2018-02-27T00:45:28.3055231Z,2018-04-05T01:11:44.4005746Z,,,False,0,False
Gear_PartialWing_Generic_Assault,JumpJetDef,mods/PartialWingSystem/Gear_PartialWing_Generic_Assault.json,15,2018-02-27T00:45:28.3055231Z,2018-04-05T01:11:44.4005746Z,,,False,0,False
Gear_PartialWing_Generic_Standard25,JumpJetDef,mods/PartialWingSystem/Gear_PartialWing_Generic_Standard25.json,15,2018-02-27T00:45:28.3055231Z,2018-04-05T01:11:44.4005746Z,,,False,0,False
Gear_PartialWing_Generic_Standard30,JumpJetDef,mods/PartialWingSystem/Gear_PartialWing_Generic_Standard30.json,15,2018-02-27T00:45:28.3055231Z,2018-04-05T01:11:44.4005746Z,,,False,0,False
Gear_PartialWing_Generic_Standard40,JumpJetDef,mods/PartialWingSystem/Gear_PartialWing_Generic_Standard40.json,15,2018-02-27T00:45:28.3055231Z,2018-04-05T01:11:44.4005746Z,,,False,0,False
Gear_PartialWing_Generic_Standard45,JumpJetDef,mods/PartialWingSystem/Gear_PartialWing_Generic_Standard45.json,15,2018-02-27T00:45:28.3055231Z,2018-04-05T01:11:44.4005746Z,,,False,0,False
Gear_PartialWing_Generic_Standard55,JumpJetDef,mods/PartialWingSystem/Gear_PartialWing_Generic_Standard55.json,15,2018-02-27T00:45:28.3055231Z,2018-04-05T01:11:44.4005746Z,,,False,0,False
Gear_PartialWing_Generic_Heavy65,JumpJetDef,mods/PartialWingSystem/Gear_PartialWing_Generic_Heavy65.json,15,2018-02-27T00:45:28.3055231Z,2018-04-05T01:11:44.4005746Z,,,False,0,False
Gear_PartialWing_Generic_Heavy75,JumpJetDef,mods/PartialWingSystem/Gear_PartialWing_Generic_Heavy75.json,15,2018-02-27T00:45:28.3055231Z,2018-04-05T01:11:44.4005746Z,,,False,0,False
Gear_PartialWing_Generic_Heavy80,JumpJetDef,mods/PartialWingSystem/Gear_PartialWing_Generic_Heavy80.json,15,2018-02-27T00:45:28.3055231Z,2018-04-05T01:11:44.4005746Z,,,False,0,False
Gear_PartialWing_Generic_Assault95,JumpJetDef,mods/PartialWingSystem/Gear_PartialWing_Generic_Assault95.json,15,2018-02-27T00:45:28.3055231Z,2018-04-05T01:11:44.4005746Z,,,False,0,False
shopdef_PartialWing_all,ShopDef,mods/PartialWingSystem/shopdef_PartialWing_all.json,8,2018-02-27T00:45:28.7315252Z,2018-04-05T01:11:45.0426105Z,,,False,0,False

But afterloading I got the FPS Blackscreen, so I looked at the output log and this is what I got.

Unloading 5 Unused Serialized files (Serialized files now loaded: 1)
ArgumentException: SetFieldValues fields11:values12 count mismatch
at HBS.Util.CSVSerializationUtility.SetFieldValues[VersionManifestEntry] (System.Collections.Generic.List`1 fieldNames, System.Collections.Generic.List`1 fieldValues, BattleTech.VersionManifestEntry target, BindingFlags flags) [0x00000] in <filename unknown>:0
at BattleTech.VersionManifestBase.LoadFromCSV (.CSVReader reader) [0x00000] in <filename unknown>:0
at BattleTech.VersionManifestAddendum.LoadFromCSV (.CSVReader reader) [0x00000] in <filename unknown>:0
at BattleTech.VersionManifest.LoadFromCSV (.CSVReader reader) [0x00000] in <filename unknown>:0
at BattleTech.VersionManifestUtilities.ManifestFromCSV (System.String path) [0x00000] in <filename unknown>:0
at BattleTech.VersionManifestUtilities.LoadDefaultManifest () [0x00000] in <filename unknown>:0
at BattleTech.BattleTechResourceLocator..ctor () [0x00000] in <filename unknown>:0
at BattleTech.Data.DataManager..ctor (.MessageCenter messageCenter) [0x00000] in <filename unknown>:0
at BattleTech.GameInstance..ctor () [0x00000] in <filename unknown>:0
at BattleTech.UnityGameInstance.Reset () [0x00000] in <filename unknown>:0
at BattleTech.UnityGameInstance.Awake () [0x00000] in <filename unknown>:0
UnityEngine.GameObject:SetActive(Boolean)
ActivateAfterInit:ActivateAndClose()
ActivateAfterInit:Start()

(Filename: Line: -1)


Unloading 3 unused Assets to reduce memory usage. Loaded Objects now: 11162.
Total: 26.431202 ms (FindLiveObjects: 0.442026 ms CreateObjectMapping: 0.627004 ms MarkObjects: 25.315628 ms DeleteObjects: 0.046244 ms)

NullReferenceException: Object reference not set to an instance of an object
at BattleTech.UI.UIModule.Init () [0x00000] in <filename unknown>:0
at BattleTech.UI.DebugHUD.Init () [0x00000] in <filename unknown>:0
at BattleTech.UI.UIManager+UINode.Init () [0x00000] in <filename unknown>:0
at BattleTech.UI.UIManager.Awake () [0x00000] in <filename unknown>:0
UnityEngine.GameObject:SetActive(Boolean)
ActivateAfterInit:ActivateAndClose()
ActivateAfterInit:Update()

(Filename: Line: -1)

Unloading 3 Unused Serialized files (Serialized files now loaded: 1)
NullReferenceException: Object reference not set to an instance of an object
at BattleTech.LevelLoadRequestListener.Start () [0x00000] in <filename unknown>:0

(Filename: Line: -1)

System.NullReferenceException: Object reference not set to an instance of an object
at BattleTech.UnityGameInstance.<OnInternetConnectivityResult>m__1 (Boolean callbackSuccess, System.Net.IPAddress ipAddress) [0x00000] in <filename unknown>:0
at BattleTech.Network.NetworkUtilities+<GetExternalIPAddressRoutine>c__Iterator0.MoveNext () [0x00000] in <filename unknown>:0

(Filename: C:/buildslave/unity/build/artifacts/generated/common/runtime/DebugBindings.gen.cpp Line: 51)

UnloadTime: 1.381332 ms
Setting up 3 worker threads for Enlighten.
Thread -> id: 1230 -> priority: 1
Thread -> id: fd0 -> priority: 1
Thread -> id: 1354 -> priority: 1

Unloading 3 unused Assets to reduce memory usage. Loaded Objects now: 10933.
Total: 25.558561 ms (FindLiveObjects: 0.543224 ms CreateObjectMapping: 0.721295 ms MarkObjects: 24.246895 ms DeleteObjects: 0.046544 ms)

Unloading 2 Unused Serialized files (Serialized files now loaded: 1)
UnloadTime: 0.353741 ms

Unloading 1 unused Assets to reduce memory usage. Loaded Objects now: 10929.
Total: 25.517120 ms (FindLiveObjects: 0.467551 ms CreateObjectMapping: 0.451035 ms MarkObjects: 24.567905 ms DeleteObjects: 0.030028 ms)

Unloading 0 Unused Serialized files (Serialized files now loaded: 1)

Unloading 0 unused Assets to reduce memory usage. Loaded Objects now: 10929.
Total: 25.776270 ms (FindLiveObjects: 0.436321 ms CreateObjectMapping: 0.354041 ms MarkObjects: 24.966991 ms DeleteObjects: 0.018317 ms)

Unloading 3 Unused Serialized files (Serialized files now loaded: 1)
UnloadTime: 0.321009 ms
NullReferenceException: Object reference not set to an instance of an object
at BattleTech.UI.UIManager.GetOrCreateAtNode (System.Type moduleType, System.String prefabName, BattleTech.UI.UINode node, Boolean tryGet, Boolean resort) [0x00000] in <filename unknown>:0
at BattleTech.UI.UIManager.CreateUIModule (System.Type moduleType, System.String prefabOverride, Boolean resort) [0x00000] in <filename unknown>:0
at BattleTech.UI.ModuleAutoLauncher.Launch () [0x00000] in <filename unknown>:0
at BattleTech.UI.ModuleAutoLauncher+<Start>c__Iterator0.MoveNext () [0x00000] in <filename unknown>:0
at UnityEngine.SetupCoroutine.InvokeMoveNext (IEnumerator enumerator, IntPtr returnValueAddress) [0x00000] in <filename unknown>:0

(Filename: Line: -1)

NullReferenceException: Object reference not set to an instance of an object
at BattleTech.UI.UIManager.GetOrCreateAtNode (System.Type moduleType, System.String prefabName, BattleTech.UI.UINode node, Boolean tryGet, Boolean resort) [0x00000] in <filename unknown>:0
at BattleTech.UI.UIManager.CreateUIModule (System.Type moduleType, System.String prefabOverride, Boolean resort) [0x00000] in <filename unknown>:0
at BattleTech.UI.ModuleAutoLauncher.Launch () [0x00000] in <filename unknown>:0
at BattleTech.UI.ModuleAutoLauncher+<Start>c__Iterator0.MoveNext () [0x00000] in <filename unknown>:0
at UnityEngine.SetupCoroutine.InvokeMoveNext (IEnumerator enumerator, IntPtr returnValueAddress) [0x00000] in <filename unknown>:0

(Filename: Line: -1)

NullReferenceException: Object reference not set to an instance of an object
at BattleTech.UI.UIManager.GetOrCreateAtNode (System.Type moduleType, System.String prefabName, BattleTech.UI.UINode node, Boolean tryGet, Boolean resort) [0x00000] in <filename unknown>:0
at BattleTech.UI.UIManager.CreatePopupModule (System.Type moduleType, System.String prefabOverride, Boolean resort) [0x00000] in <filename unknown>:0
at BattleTech.UI.ModuleAutoLauncher.Launch () [0x00000] in <filename unknown>:0
at BattleTech.UI.ModuleAutoLauncher+<Start>c__Iterator0.MoveNext () [0x00000] in <filename unknown>:0
at UnityEngine.SetupCoroutine.InvokeMoveNext (IEnumerator enumerator, IntPtr returnValueAddress) [0x00000] in <filename unknown>:0

(Filename: Line: -1)


Unloading 1 unused Assets to reduce memory usage. Loaded Objects now: 10974.
Total: 26.062748 ms (FindLiveObjects: 0.443227 ms CreateObjectMapping: 0.516798 ms MarkObjects: 25.075094 ms DeleteObjects: 0.027026 ms)

NullReferenceException: Object reference not set to an instance of an object
at BattleTech.LevelLoader+<Load>c__Iterator0.MoveNext () [0x00000] in <filename unknown>:0
at UnityEngine.SetupCoroutine.InvokeMoveNext (IEnumerator enumerator, IntPtr returnValueAddress) [0x00000] in <filename unknown>:0

(Filename: Line: -1)

NullReferenceException: Object reference not set to an instance of an object
at BattleTech.UnityGameInstance.ShutdownGame () [0x00000] in <filename unknown>:0
at BattleTech.OnGameShutdown.OnQuit () [0x00000] in <filename unknown>:0
at BattleTech.OnGameShutdown.OnApplicationQuit () [0x00000] in <filename unknown>:0

(Filename: Line: -1)

NullReferenceException: Object reference not set to an instance of an object
at BattleTech.UnityGameInstance.ShutdownGame () [0x00000] in <filename unknown>:0
at BattleTech.OnGameShutdown.OnQuit () [0x00000] in <filename unknown>:0
at BattleTech.OnGameShutdown.OnDestroy () [0x00000] in <filename unknown>:0

(Filename: Line: -1)

Now I have no idea what this means, but I noticed with other mods it starts with id,type,path,version,addedOn,updatedOn, ETC while this one doesn't.
Would that effect it?
 
In an attempt to mix mods, in this case two mods that both add new items etc. I added this to the version manifest beneath the first mod's.

But afterloading I got the FPS Blackscreen, so I looked at the output log and this is what I got.

Now I have no idea what this means, but I noticed with other mods it starts with id,type,path,version,addedOn,updatedOn, ETC while this one doesn't.
Would that effect it?
It depends on where you add the lines. If you add it after the comma, yes, the starting line is important (as is the line above that is a section header, in my case:

Code:
THI_SSW_Mod
id,type,path,version,addedOn,updatedOn,removedOn,assetBundleName,assetBundlePersistent,assetBundleCRC,addendum

If you add it before the comma (but remember to keep it at the last line), then it shouldn't quite matter.
 
Bit of a heads up on modding the starting lance and its in turn game difficulty.

I skipped the tutorial. For the starting mechs I used a Panther (MC), Commando 2D (Behemoth), Jenner (Glitch), Spider (Dekker), and same starting Locust. I would recommend starting with at least a single medium mech to make the first story mission doable at any time. Though I wanted a least a medium to even things out, the first story mission may be doable with 4 lights. I was regularly doing 1 skull missions without any issues.

While it is completely viable for half and 1 skull missions, and is actually more fun doing them. It does become a bit tedious, or grindy, trying to find a medium mech before the first story mission. The only missions available with medium mech salvage in the beginning 4 systems are Assassinate Missions. Collecting enough parts to complete one mech took me about 3 years game time ;) traveling back and forth.

To make things worse it seemed that I was getting a different enemy medium mech every time I took an Assassinate Mission. I had parts from 2 different models of Centurions, Cicadas, Shadow Hawks, and Wolverines, plus parts from a Blackjack, a Vindicator, an Enforcer, and a Hunchback before I had enough parts to build a Cicada 3C. Then shorty after that for a Wolverine 6K.
 
Last edited:
It depends on where you add the lines. If you add it after the comma, yes, the starting line is important (as is the line above that is a section header, in my case:

Code:
THI_SSW_Mod
id,type,path,version,addedOn,updatedOn,removedOn,assetBundleName,assetBundlePersistent,assetBundleCRC,addendum

If you add it before the comma (but remember to keep it at the last line), then it shouldn't quite matter.

Thanks, it was the comma that was messing things up, this game is very finicky, and likes to break over the smallest things.
 
Has anyone had any luck creating new contracts and having them show up in game?
I spent an hour or two tonight trying to add a test contract only for it to never actually show up, I'm wondering if I'm missing something or if anyone has any information about how contracts are selected and chosen from?
Perhaps a list somewhere I'm not adding it to.

My goal is to create a set of new contracts with specific prerequisites that'll use new lances that have the option to contain better equipped mechs. Such as rich Manufacturer worlds opponents having possible access to ++ equipment.

The only list i've seen is in VersionManifest.csv


Only skimmed over the last couple pages, so apologies if this has been talked about previously - if so, I'd massively appreciate it if someone pointed me in the right direction.

Anyways, been meaning to have the SLDF tech 'Mechs, the GRF-4N, the BL-6b-KNT, the HGN-732b and the AS7-D-HT to enemy lances. From what I understand, the game seems to just draft the OpFor from whatever Mechs fit the specified tags, so setting the tags in the MechDef file of the SLDF Mechs to match their non-LosTech counterparts ought to do the trick, right? Anything I'm missing?
IIRC u can just remove BLACKLISTED tag from SLDF versions. Rarity better be set in line with base model
 
IIRC u can just remove BLACKLISTED tag from SLDF versions. Rarity better be set in line with base model

I haven't tested it in that direction, but adding "BLACKLISTED" as the last line does not keep mechs from appearing in procedurally generated missions. I'm hoping Justin Kase's tests will reveal a way to eliminate certain mechs if so desired.
 
Anyone knows whether it is possible to "unlock" the hard limit of injuries per round of fire? So if you get lucky/unlucky and everything blows up and you even fall down you can lose the pilot in one single awesome volley.

I have a feeling this might not be moddable but hardcoded but if there is a slight chance this could be changed, where should one look for it?