Giter Site home page Giter Site logo

mechengineer's Introduction

MechEngineer

BattleTech mod that adds engines and other components to mechs based on TT rules.

Download

Downloads of the latest release can be found on github.

Requirements and Installation

install RogueTech for an in-depth MechEngineer experience

or

install BattleTech Advanced for another in-depth MechEngineer experience

or

Warning The HBS BattleTech ModLoader is not supported, as it based on an outdated ModTek (e.g no DLC support).

TODOs and Bug Reporting

Contributors

Maintainer: CptMoore

  • adammartinez271828 - rounding logic
  • Aliencreature - ideas, lore and rules, item variants, testing
  • barak1001 - rules, coding armor maxing, testing
  • bhtail - ideas, testing
  • Colobos - ideas, lore and rules, item and mech balancing, testing
  • CptMoore - ideas, rules, coding, testing, core items
  • CrusherBob - ideas, lore and rules, engine rating to walk/sprint distance conversions
  • Denadan - ideas, CustomComponents, coding
  • Gentleman Reaper - ideas, lore and rules, testing
  • kmission - russian localization support improvements
  • Harkonnen, LadyAlekto, Redbat + RogueTech Team - ideas, lore and rules, lots of testing, items
  • hokvel - Pansar for inspiration of max armor feature
  • TotalMeltdown - ideas, lore and rules

How-to start contributing

MechEngineer uses publicized assemblies, those are .NET dlls whose classes and methods visibility were changed to public.

  1. Install MechEngineer dependencies (ModTek, CustomComponents)
  2. Checkout the MechEngineer repository, for example as BATTLETECH/Mods/MechEngineer/
  3. Copy the Directory.Build.props.template to Directory.Build.props and replace the BattleTechGameDir directory path.
  4. Open the solution in Visual Studio 2022 and compile the MechEngineer.dll .
  5. Start the game.

Features

The current features are always described right within the default settings in Settings.help.json.

Engines

A major feature of MechEngineer is the introduction of engine items. An engine consists of several parts, each representing a CBT variable in regards to engines.

  • Fusion Core (e.g. Core 100): The fusion core rating defines the movement speed, number of jump jets and internal engine heat sinks of a mech. By default the weight of these items assume standard engine shielding.

  • Engine (Shielding) (e.g. Std. Engine): Just called "Engine", it actually represents the shielding of the fusion core. An XL engine is extra-light shielding for the engine. In combination with CC and the Weights feature, shielding differs in size and influences the fusion core weight.

  • Mech Cooling System (e.g. Cooling DHS): When choosing a heat sink system for the mech, in CBT one has to decide between standard and double heat sinks. Since the engine heat sink type is derived from the mechs heat sink system, this is still part of the Engine feature.

  • Engine Cooling System (e.g. E-Cooling + 2): In CBT additional heat sinks can be added to engines for core sizes 275 and higher, this item represents the additional heat sinks added.

mechengineer's People

Contributors

17783 avatar aliencreature avatar barak1001 avatar bhtrail avatar cmission avatar cptmoore avatar crusherbob avatar denadan avatar kmissionx avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

mechengineer's Issues

add gyro crits

Problem here, current engine crits don't invalidate effects etc.. need to check how to do that with gyros.

gyro crit:

  • chance to fall down on critical hit
  • chance to fall down on movement (run, jump but not walk)
    gyro destroyed:
  • mech is downed (just do it once)
  • cant walk, run or jump (mp to 0)
  • but can still shoot (allow to stand up again)

Total Warfare

Gyro (Torso)
The gyroscope is a ’Mech’s most sensitive piece of machinery. It
keeps the ’Mech upright and able to move. The gyro can survive
only one critical hit; the second destroys it.
After the fi rst critical hit to the gyro, the controlling player must
make a Piloting Skill Roll at the end of the phase in which the
critical hit occurred, with a +3 modifi er (in addition to any other
standard modifi ers); see Making Piloting/Driving Skill Rolls, p. 59. In
addition, the player must make a Piloting Skill Roll every time the
damaged ’Mech runs or jumps, with a +3 modifi er; the roll is made
at the end of the ’Mech’s movement.
When a ’Mech’s gyro is destroyed (after a second critical hit), the
’Mech automatically falls and cannot stand up again; the controlling
player makes an immediate Piloting Skill Roll, with a +6 modifi er
for the destroyed gyro (plus any modifi ers for other damage), to
avoid damaging the MechWarrior during the automatic fall.
’Mechs with a destroyed gyro may make weapon attacks per
Firing When Down, p. 113, and may change facing by one hexside
per turn provided they have at least 1 MP available. A ’Mech with
a destroyed gyro is not considered immobile.

add gyros as full blown components

  • instead of just upgrades, add actual gyros
  • reuse the upgraded one as new gyro ++ while introducing stock gyros
  • there are light and standard gyros

make engine one slot and gyro one
the gyro ++ should take 2 slots (so engine + gyro++ = base game gyro upgrade)

dont forget to add weight calculations dynamically based on max tonnage engine rating

can easily be done:

  • autoconvert existing gryo upgrade to be actual gyros (use jsons to adjust existing gyro descriptions)
  • have 2 different kinds of gyros (easy, just use json and change effects)
  • make gyros dynamically change tonnage based on engine rating

unsure on how to do:

  • make gyros have new gameplay effects (e.g. critted gyro = no JJ or sprint, but those kinda lame, we need new gameplay, not limit existing ones)

engine heatsinks and double heatsinks in general

so we currently add heatsinks into the engine

in crusher bobs overhaul, the amount of heatsinks is not linear to the engine rating up to max 250, that goes against TT rules, do we want that?

also since heatsinks are integrated, there are currently a std single std double xl single xl double engine variants.

I believe that should not be needed, so lets enforce double and single heatsinks on a mech, by default an a std engine uses single heatsinks while an xl engine uses double. if a double heatsink component is mounted on a mech, all heatsinks have to be double (and vice versa). engine integrated heatsinks in mechs are then automatically assumed to be of the type the mech is using.

so remove xl_dhs and xl_shs to be xl again and make heatsink logic work by adding heatsink capabilities through code and what is mounted on a mech.

Jump Jets?

If I understand this mod correctly, someone can use a larger rated engine to increase their mech's speed. Did you also account for the additional jump capacity that would allow?

gameplay balance + pricing + availability

we just copy and paste rules from TT, but how well do they translate to the game mechanics?

availability + pricing

shops

  • not all engines should be stock, only the bare minimum
  • std but different engine ratings can only pop up on manufacturing worlds
  • exotic engines can only pop up on other worlds (comp + light would be research worlds, xl would be former SLDF presence)

salvage

  • this would provide stock engine and what more?

stock mechs

  • SLDF mechs should come with state of the art stuff, endo-steel, xl engine, ferros-fibrous

minimize new json count

since we can't remove items or risk break skirmish mechlab and save games, we should make sure to only add as few items as possible

  • do we really need XL engines? they are complicated to use, should not be available for the timeline anyway. this is basically only for the 2 SLDF mechs you get (and for further modders)
  • do we need that many std engines? this will clutter the equipment screen for selling items
  • remove the test urban mech

Note this issues is in conflict with #5

Tooltip issues with components

  • component not mounted on mech -> nullpointer on hover in mechlab inventory
  • mix match of components tooltip info, calculate bonus based actual component def not on whats found on mech (for structure slots direct, for engine mech.inv comp def != comp def)

add actual gyros

  • auto-convert gyro upgrades
  • make engines 1 slot high
  • don't reduce gyro upgrade size (keep them at 3 again) gyro upgrades are gyros, so have option to shrink or not
  • gyro weight still calculated via engine
  • standard gyro should be 1 slot high

After conversing with TotalMeltdown I think we have enough to make gyros worthwhile, my response to one of his posts:

I've read about gyro crits, basically you are downed and can only turn but not move. I think I can simulate that crit and then it makes sense to have gyro as extra component. if hit your movement speed is 0 and you can basically only turn. probably no JJs either (dont know how to disable those yet though). I'll just add a stock gyro without any stability in mind and a xl variant with more slots.

The tech manual is pretty clear about the costs of a gyro. standard 1.0 ton multi, 4 CBT slots . xl 0.5 ton multi, 6 CBT slots. since 6 CBT slots would mean a full CT a XL gyro actually has to be 3 game slots, so engine + gyro = full CT.

add better tooltips for calculated stats

  • heat is currently invisible except for the moving bar, thats not nice (especially since double vs single heatsinks is unclear)
  • actual speeds are not shown (ok thats a base game problem)

add more engine types

we currently have

  • std
  • xl

we could add

  • compact
  • light

Note this issues is in conflict with #3

add ff armor

requires 14 slots
reduces weight per point by 12%

Rename of the mod or split up

Endo steel, armor, cockput, gyro, maybe more, nothing to do wiith engines.

We need a better name for it than MechEngineMod.

We could also split up stuff into different mods, but thatll reduce my coding time significantly due to overhead in switching between mods and copying code.

Current Candidates:
MechEngineer
MechInternals
Mechlab+
MechEngineer++!
MechTuneUps
PimpMyMech
MechEngineerRedux | KER
MechInternalRevamp | MIR
RealMechInsides | RMI
MechR&D
MechWorkshop
MechPartsExpansion
MooreMechOptions
MechMoore
MechTek

improve engine tooltip visuals

while endo-steel and ferro-fibrous are easy to show stats for, engines are another beast

currently showing this:

            tooltip.detailText.text = "walkSpeed=" + walkSpeed + "\r\n"
                                      + "runSpeed=" + runSpeed + "\r\n"
                                      + "TTwalkSpeed=" + TTwalkSpeed + "\r\n"
                                      + "minHeatSinks=" + minHeatSinks + "\r\n"
                                      + "maxHeatSinks=" + maxHeatSinks + "\r\n"
                                      + "dhs=" + engineRef.IsDHS + "\r\n"
                                      + "dhsSinks=" + engineRef.AdditionalDHSCount + "\r\n"
                                      + "shsSinks=" + engineRef.AdditionalSHSCount + "\r\n"
                                      + "engineWeight=" + engineWeight + "\r\n"
                                      + "gyroWeight=" + gyroWeight + "\r\n"
                                      + "------- \r\n";

should be reduced to an absolute minimum, and only additional to the detail text of an engine.

TODOs for first version

@CrusherBob I have done some extensive changes to the mod (see commits).

we now have std engines, xl engines, endo steel and ferros fibrous.

what do you think is still necessary in order to release a first version?

TODO list from my point of view:

  • adding engines to all player stock mechs (we need to be able to modify only the center torso of mechs, have to write a patch for modtek to make it possible, will do that though)
  • add more xl engines or reduce them to only what the 4 stock SLDF mechs would be using. also add endo steel and ferros fibrous to those SLDF mechs if possible
  • figure out a solution where and how to put all our new components on display (stock mechs, shops, salvage, etc.. )

other TODOs?

endo-steel support

works using critical slots

using one critical slot component flags the mech to now be endo-steel supported

can't save mech loadout until all 14 endo-steel slots are put on the mech (or all are removed)

add icons to components

  • engine std
  • engine xl
  • engine slots
  • endo steel parts

right now they display the default heat sink icon

how to extract heatsinks from engines

in order to remove added heatsinks from an engine, one has to dismount the whole engine.
however in order to dismount an engine, one has to mount another engine in first.
thats kinda excessive for removing heatsinks.

add reactive, reflective and hardened armor

reactive, reflective and hardened armor have properties that have to be coded in, but the actual problem is that they don't use up slots, so you can't detect them being enabled.

the idea is to add a special slot to all mech locations that can only be used for armor selection.

  • standard
  • ff
  • reactive
  • reflective
  • hardened

either make sure to add and filter those things properly (and ignore crits like endo-steel slots), or make it more like regular components you have to scavenge for.

add autofix torso/leg inventory slots

  • add a new setting that auto fixes bad critical slot distribution on the mech
  • add 2 slots to each torso side
  • remove 2 slots from each leg

that way people can decide if they want a fix or not!

after a conversation with TotalMeltdown, my response:

I wont change the 3 xl torso slots to 1, I'll just add 2 torso slots each and remove the ones from the legs and ignore the visual artifacts. I'll just make it dynamically via an autofix setting that applies to all chassis when loading up.

Game stuck on infinite load after updating to the new Modtek and MechEngineMod versions

output_log mechengine.txt

Running the current versions of BTML, ModTek, DynModLib. I first noticed this after updating everything today, but I reinstalled the Battletech modding tools on a clean mod folder with only the default mods and the MechEngineMod. After pressing new game, it is stuck on an infinite loading screen before the character creation kicks in. Removing the MechEngineMod folder fixes the issue both on my usual mod folder and on the clean install.

improve tooltip, item label and description texts

I'm not fond of the way the items are called and how they display information

  • gyro is fine for a name and icon, but its 0 tonnage
  • XL Engine implies that the thats the whole engine, but we have so many parts to it now.. left, right, center and the actual core. need better naming for those.
  • all those engine parts except for the core also are empty shells that satisfy requirements, but they don't have any meaning beyond that. no gameplay information displayed on them. the descriptions are nice but still 0 tonnage etc..

Ideas

split tonnage used between items

  • gyro
  • fusion core
  • shielding

since shielding can reduce by half.. core is like 25% and shielding 75% for std?

requires an abstraction of the tooltip patch

move tonnage information to shielding component

we don't know how much tonnage to calculate until that component is in the mech, so would make sense right?

requires rewrite and restructuring of engineCoreRef

find a better name for "Engine" and "RT" "LT"

  • XL Engine RT
  • XL Engine LT
  • XL Engine
  • Fusion Core

Fusion core is ok
RT and LT have to be used to fit space wise or word wrapping happens.
So replace "Engine" with "Shielding"?

XL Shielding, kinda long and not entirely accurate. Lore wise other components are part of an engine too.
XL Components is way to long.
XL Materials, is long but sounds cool, but could also refer to Endo-Steel or FF though
XL Parts, same issue as Materials
XL Assembly, same issue as Materials
XL Case, unfortunately CASE is already reserved
XL Confinement, kinda long
XL Reactor ?!

Maybe I should just rename Fusion Core to "Engine Core" and be done with it,

allow an advanced package for enthusiasts

since the game does not support large amounts of components (see #38), we should only provide a small number of components with the mod.

some advanced users want to play around with more engines so we still should package in more options.

@Aliencreature did add the more advanced variants.

Exotic errors with new version

When the enthusiast package is active, mechs do not automatically receive engines, gyros and cockpits and the mod's log shows errors. Placing the engines manually works normally.

MechEngineMod [LOG] DynModLib: found up-to-date assembly D:\Battletech\Mods\MechEngineMod\MechEngineMod.dll
MechEngineMod [LOG] Loaded MechEngineMod
MechEngineMod [ERROR] System.FormatException: Input string was not in the correct format
at System.Int32.Parse (System.String s) [0x00000] in :0
at MechEngineMod.EngineCoreDef..ctor (BattleTech.MechComponentDef componentDef) [0x00000] in :0
at MechEngineMod.Extensions.GetEngineCoreDef (BattleTech.MechComponentDef this) [0x00000] in :0
at MechEngineMod.EngineMisc.AddEngineIfPossible (BattleTech.MechDef mechDef) [0x00000] in :0
at MechEngineMod.MechDefMods.PostProcessAfterLoading (BattleTech.Data.DataManager dataManager) [0x00000] in :0
at MechEngineMod.SkirmishMechBayPanelLanceConfiguratorDataLoadedPatch.Prefix (BattleTech.UI.SkirmishMechBayPanel __instance) [0x00000] in :0
MechEngineMod [ERROR] System.FormatException: Input string was not in the correct format
at System.Int32.Parse (System.String s) [0x00000] in :0
at MechEngineMod.EngineCoreDef..ctor (BattleTech.MechComponentDef componentDef) [0x00000] in :0
at MechEngineMod.Extensions.GetEngineCoreDef (BattleTech.MechComponentDef this) [0x00000] in :0
at MechEngineMod.EngineMisc.RefreshAvailability (BattleTech.UI.MechLabInventoryWidget widget, Single tonnage) [0x00000] in :0
at MechEngineMod.MechLabInventoryWidgetRefreshJumpJetOptionsPatch.Postfix (BattleTech.UI.MechLabInventoryWidget __instance, Single ___mechTonnage) [0x00000] in :0
MechEngineMod [ERROR] System.FormatException: Input string was not in the correct format
at System.Int32.Parse (System.String s) [0x00000] in :0
at MechEngineMod.EngineCoreDef..ctor (BattleTech.MechComponentDef componentDef) [0x00000] in :0
at MechEngineMod.Extensions.GetEngineCoreDef (BattleTech.MechComponentDef this) [0x00000] in :0
at MechEngineMod.EngineMisc.RefreshAvailability (BattleTech.UI.MechLabInventoryWidget widget, Single tonnage) [0x00000] in :0
at MechEngineMod.MechLabInventoryWidgetRefreshJumpJetOptionsPatch.Postfix (BattleTech.UI.MechLabInventoryWidget __instance, Single ___mechTonnage) [0x00000] in :0
MechEngineMod [ERROR] System.FormatException: Input string was not in the correct format
at System.Int32.Parse (System.String s) [0x00000] in :0
at MechEngineMod.EngineCoreDef..ctor (BattleTech.MechComponentDef componentDef) [0x00000] in :0
at MechEngineMod.Extensions.GetEngineCoreDef (BattleTech.MechComponentDef this) [0x00000] in :0
at MechEngineMod.EngineMisc.RefreshAvailability (BattleTech.UI.MechLabInventoryWidget widget, Single tonnage) [0x00000] in :0
at MechEngineMod.MechLabInventoryWidgetRefreshJumpJetOptionsPatch.Postfix (BattleTech.UI.MechLabInventoryWidget __instance, Single ___mechTonnage) [0x00000] in :0
MechEngineMod [ERROR] System.FormatException: Input string was not in the correct format
at System.Int32.Parse (System.String s) [0x00000] in :0
at MechEngineMod.EngineCoreDef..ctor (BattleTech.MechComponentDef componentDef) [0x00000] in :0
at MechEngineMod.Extensions.GetEngineCoreDef (BattleTech.MechComponentDef this) [0x00000] in :0
at MechEngineMod.EngineTooltip.AdjustTooltip (MechEngineMod.TooltipPrefab_EquipmentAdapter tooltip, BattleTech.UI.MechLabPanel panel, BattleTech.MechComponentDef mechComponentDef) [0x00000] in :0
at MechEngineMod.TooltipPrefab_EquipmentSetDataPatch.Postfix (BattleTech.UI.Tooltips.TooltipPrefab_Equipment __instance, System.Object data) [0x00000] in :0
MechEngineMod [ERROR] System.FormatException: Input string was not in the correct format
at System.Int32.Parse (System.String s) [0x00000] in :0
at MechEngineMod.EngineCoreDef..ctor (BattleTech.MechComponentDef componentDef) [0x00000] in :0
at MechEngineMod.Extensions.GetEngineCoreDef (BattleTech.MechComponentDef this) [0x00000] in :0
at MechEngineMod.EngineTooltip.AdjustTooltip (MechEngineMod.TooltipPrefab_EquipmentAdapter tooltip, BattleTech.UI.MechLabPanel panel, BattleTech.MechComponentDef mechComponentDef) [0x00000] in :0
at MechEngineMod.TooltipPrefab_EquipmentSetDataPatch.Postfix (BattleTech.UI.Tooltips.TooltipPrefab_Equipment __instance, System.Object data) [0x00000] in :0
MechEngineMod [ERROR] System.FormatException: Input string was not in the correct format
at System.Int32.Parse (System.String s) [0x00000] in :0
at MechEngineMod.EngineCoreDef..ctor (BattleTech.MechComponentDef componentDef) [0x00000] in :0
at MechEngineMod.Extensions.GetEngineCoreDef (BattleTech.MechComponentDef this) [0x00000] in :0
at MechEngineMod.EngineTooltip.AdjustTooltip (MechEngineMod.TooltipPrefab_EquipmentAdapter tooltip, BattleTech.UI.MechLabPanel panel, BattleTech.MechComponentDef mechComponentDef) [0x00000] in :0
at MechEngineMod.TooltipPrefab_EquipmentSetDataPatch.Postfix (BattleTech.UI.Tooltips.TooltipPrefab_Equipment __instance, System.Object data) [0x00000] in :0
MechEngineMod [ERROR] System.FormatException: Input string was not in the correct format
at System.Int32.Parse (System.String s) [0x00000] in :0
at MechEngineMod.EngineCoreDef..ctor (BattleTech.MechComponentDef componentDef) [0x00000] in :0
at MechEngineMod.Extensions.GetEngineCoreDef (BattleTech.MechComponentDef this) [0x00000] in :0
at MechEngineMod.EngineMisc.RefreshAvailability (BattleTech.UI.MechLabInventoryWidget widget, Single tonnage) [0x00000] in :0
at MechEngineMod.MechLabInventoryWidgetRefreshJumpJetOptionsPatch.Postfix (BattleTech.UI.MechLabInventoryWidget __instance, Single ___mechTonnage) [0x00000] in :0
MechEngineMod [ERROR] System.FormatException: Input string was not in the correct format
at System.Int32.Parse (System.String s) [0x00000] in :0
at MechEngineMod.EngineCoreDef..ctor (BattleTech.MechComponentDef componentDef) [0x00000] in :0
at MechEngineMod.Extensions.GetEngineCoreDef (BattleTech.MechComponentDef this) [0x00000] in :0
at MechEngineMod.EngineMisc.RefreshAvailability (BattleTech.UI.MechLabInventoryWidget widget, Single tonnage) [0x00000] in :0
at MechEngineMod.MechLabInventoryWidgetRefreshJumpJetOptionsPatch.Postfix (BattleTech.UI.MechLabInventoryWidget __instance, Single ___mechTonnage) [0x00000] in :0
MechEngineMod [ERROR] System.FormatException: Input string was not in the correct format
at System.Int32.Parse (System.String s) [0x00000] in :0
at MechEngineMod.EngineCoreDef..ctor (BattleTech.MechComponentDef componentDef) [0x00000] in :0
at MechEngineMod.Extensions.GetEngineCoreDef (BattleTech.MechComponentDef this) [0x00000] in :0
at MechEngineMod.EngineTooltip.AdjustTooltip (MechEngineMod.TooltipPrefab_EquipmentAdapter tooltip, BattleTech.UI.MechLabPanel panel, BattleTech.MechComponentDef mechComponentDef) [0x00000] in :0
at MechEngineMod.TooltipPrefab_EquipmentSetDataPatch.Postfix (BattleTech.UI.Tooltips.TooltipPrefab_Equipment __instance, System.Object data) [0x00000] in :0
MechEngineMod [ERROR] System.FormatException: Input string was not in the correct format
at System.Int32.Parse (System.String s) [0x00000] in :0
at MechEngineMod.EngineCoreDef..ctor (BattleTech.MechComponentDef componentDef) [0x00000] in :0
at MechEngineMod.Extensions.GetEngineCoreDef (BattleTech.MechComponentDef this) [0x00000] in :0
at MechEngineMod.EngineTooltip.AdjustTooltip (MechEngineMod.TooltipPrefab_EquipmentAdapter tooltip, BattleTech.UI.MechLabPanel panel, BattleTech.MechComponentDef mechComponentDef) [0x00000] in :0
at MechEngineMod.TooltipPrefab_EquipmentSetDataPatch.Postfix (BattleTech.UI.Tooltips.TooltipPrefab_Equipment __instance, System.Object data) [0x00000] in :0
MechEngineMod [ERROR] System.FormatException: Input string was not in the correct format
at System.Int32.Parse (System.String s) [0x00000] in :0
at MechEngineMod.EngineCoreDef..ctor (BattleTech.MechComponentDef componentDef) [0x00000] in :0
at MechEngineMod.Extensions.GetEngineCoreDef (BattleTech.MechComponentDef this) [0x00000] in :0
at MechEngineMod.EngineTooltip.AdjustTooltip (MechEngineMod.TooltipPrefab_EquipmentAdapter tooltip, BattleTech.UI.MechLabPanel panel, BattleTech.MechComponentDef mechComponentDef) [0x00000] in :0
at MechEngineMod.TooltipPrefab_EquipmentSetDataPatch.Postfix (BattleTech.UI.Tooltips.TooltipPrefab_Equipment __instance, System.Object data) [0x00000] in :0
MechEngineMod [ERROR] System.FormatException: Input string was not in the correct format
at System.Int32.Parse (System.String s) [0x00000] in :0
at MechEngineMod.EngineCoreDef..ctor (BattleTech.MechComponentDef componentDef) [0x00000] in :0
at MechEngineMod.Extensions.GetEngineCoreDef (BattleTech.MechComponentDef this) [0x00000] in :0
at MechEngineMod.EngineTooltip.AdjustTooltip (MechEngineMod.TooltipPrefab_EquipmentAdapter tooltip, BattleTech.UI.MechLabPanel panel, BattleTech.MechComponentDef mechComponentDef) [0x00000] in :0
at MechEngineMod.TooltipPrefab_EquipmentSetDataPatch.Postfix (BattleTech.UI.Tooltips.TooltipPrefab_Equipment __instance, System.Object data) [0x00000] in :0
MechEngineMod [ERROR] System.FormatException: Input string was not in the correct format
at System.Int32.Parse (System.String s) [0x00000] in :0
at MechEngineMod.EngineCoreDef..ctor (BattleTech.MechComponentDef componentDef) [0x00000] in :0
at MechEngineMod.Extensions.GetEngineCoreDef (BattleTech.MechComponentDef this) [0x00000] in :0
at MechEngineMod.EngineTooltip.AdjustTooltip (MechEngineMod.TooltipPrefab_EquipmentAdapter tooltip, BattleTech.UI.MechLabPanel panel, BattleTech.MechComponentDef mechComponentDef) [0x00000] in :0
at MechEngineMod.TooltipPrefab_EquipmentSetDataPatch.Postfix (BattleTech.UI.Tooltips.TooltipPrefab_Equipment __instance, System.Object data) [0x00000] in :0
MechEngineMod [ERROR] System.FormatException: Input string was not in the correct format
at System.Int32.Parse (System.String s) [0x00000] in :0
at MechEngineMod.EngineCoreDef..ctor (BattleTech.MechComponentDef componentDef) [0x00000] in :0
at MechEngineMod.Extensions.GetEngineCoreDef (BattleTech.MechComponentDef this) [0x00000] in :0
at MechEngineMod.EngineTooltip.AdjustTooltip (MechEngineMod.TooltipPrefab_EquipmentAdapter tooltip, BattleTech.UI.MechLabPanel panel, BattleTech.MechComponentDef mechComponentDef) [0x00000] in :0
at MechEngineMod.TooltipPrefab_EquipmentSetDataPatch.Postfix (BattleTech.UI.Tooltips.TooltipPrefab_Equipment __instance, System.Object data) [0x00000] in :0
MechEngineMod [ERROR] System.FormatException: Input string was not in the correct format
at System.Int32.Parse (System.String s) [0x00000] in :0
at MechEngineMod.EngineCoreDef..ctor (BattleTech.MechComponentDef componentDef) [0x00000] in :0
at MechEngineMod.Extensions.GetEngineCoreDef (BattleTech.MechComponentDef this) [0x00000] in :0
at MechEngineMod.EngineTooltip.AdjustTooltip (MechEngineMod.TooltipPrefab_EquipmentAdapter tooltip, BattleTech.UI.MechLabPanel panel, BattleTech.MechComponentDef mechComponentDef) [0x00000] in :0
at MechEngineMod.TooltipPrefab_EquipmentSetDataPatch.Postfix (BattleTech.UI.Tooltips.TooltipPrefab_Equipment __instance, System.Object data) [0x00000] in :0
MechEngineMod [ERROR] System.FormatException: Input string was not in the correct format
at System.Int32.Parse (System.String s) [0x00000] in :0
at MechEngineMod.EngineCoreDef..ctor (BattleTech.MechComponentDef componentDef) [0x00000] in :0
at MechEngineMod.Extensions.GetEngineCoreDef (BattleTech.MechComponentDef this) [0x00000] in :0
at MechEngineMod.EngineTooltip.AdjustTooltip (MechEngineMod.TooltipPrefab_EquipmentAdapter tooltip, BattleTech.UI.MechLabPanel panel, BattleTech.MechComponentDef mechComponentDef) [0x00000] in :0
at MechEngineMod.TooltipPrefab_EquipmentSetDataPatch.Postfix (BattleTech.UI.Tooltips.TooltipPrefab_Equipment __instance, System.Object data) [0x00000] in :0
MechEngineMod [ERROR] System.FormatException: Input string was not in the correct format
at System.Int32.Parse (System.String s) [0x00000] in :0
at MechEngineMod.EngineCoreDef..ctor (BattleTech.MechComponentDef componentDef) [0x00000] in :0
at MechEngineMod.Extensions.GetEngineCoreDef (BattleTech.MechComponentDef this) [0x00000] in :0
at MechEngineMod.EngineMisc.RefreshAvailability (BattleTech.UI.MechLabInventoryWidget widget, Single tonnage) [0x00000] in :0
at MechEngineMod.MechLabInventoryWidgetRefreshJumpJetOptionsPatch.Postfix (BattleTech.UI.MechLabInventoryWidget __instance, Single ___mechTonnage) [0x00000] in :0

gyro upgrades

modify the remaining gyro upgrades to be 1 slot high. best do it through code as otherwise new modded content can't be added to center torso.

add leg actuators

legs:
Hip
Upper Leg
Lower Leg
Foot

arm:
Shoulder
Upper Arm (?)
Lower Arm (optional)
Hand (optional)

http://www.ci-n.com/~jcampbel/rpgs/battletech/FASA/3025/CPLT-C1-Catapult-stats.html
http://www.ci-n.com/~jcampbel/rpgs/battletech/FASA/3025/ON1-K-Orion-stats.html
http://www.ci-n.com/~jcampbel/rpgs/battletech/FASA/3025/GHR-5H-Grasshopper-stats.html

how does DFA upgrades work? -> what kind of actuator replacements? all 4?
how do the melee upgrades work? -> each chassis does supports different number of upgrades / actuators.

Engine DHS can not be used in skirmish

Attempting to use the DHS conversion kit in the Skirmish mechlab produces the same error as trying to put DHS on an already installed engine in sandbox (that the engine must not already be installed).

make engines and components available

shops

  • not all engines should be stock, only the bare minimum
  • std but different engine ratings can only pop up on manufacturing worlds
  • exotic engines can only pop up on other worlds (comp + light would be research worlds, xl would be former SLDF presence)

salvage

  • this would provide stock engine and what more?

stock mechs

  • SLDF mechs should come with state of the art stuff, endo-steel, xl engine, ferros-fibrous

engine heatsink changes and improvements

Current Idea

expand saving and loading of MechComponentRefs/BaseComponentRefs (only for engines though)

  • for json reuse SimGameUID (skirmish mechlab)
  • for .sav files, SimGameUID is already saved and loaded properly.

SimGameUID would be null/"" or "/dhs+5dhs" indicating if shs engine or dhs engine with how many additional heat sinks that were added after the free heatsinks one gets. shs with 3 additionals would be "+3shs". since we allow mixed if configured, "dhs+2dhs+1shs" should be possible.

have an extra item called "DHS Engine Kit" that converts an engine to double heat sinks, it should be worth 10 DHS items.

when dragging and dropping the kit or heat sinks to center torso, try to integrate those into the engine first. Items in engines can only be removed by dismounting the engine. Add the "DHS Engine Kit" back to inventory including all user added dhs.

engines always come with all free shs installed by default.

tech and cbill costs for engine handling

  • adding and removing heatsinks to/from engines should cost time and money
  • installing higher rated engines on larger chassis should cost more time and money

is a bit more complicated due to how workorders work, the various inventories that exist and all the possible transitions between them.

add LICENSE to repo

I would like this source code to have a specific license, I changed all my repos to be UNLICENSE (a.k.a. public domain) but since this also contains crusher bobs work, I would like his permission first.

Ferro Fibrous armor produces excessive savings

As the title says, Ferrofibrous armor produces savings equal to 1/1.12 (~90%) of armor tonnage, allowing some quite strange builds . I was able to replicate this on both a Locust (4 tons saved) and a Cataphract (~11 tons saved). I was able to correct it by changing:

    public float FerrosFibrousArmorWeightSavingsFactor = 1f / 1.12f;

to

    public float FerrosFibrousArmorWeightSavingsFactor = 0.12f;

Apologies if I'm budging in uninvited, but I have been watching this mod for a while and I love toying around with it!

add real cockpits

we need 3 head slots

small cockpits would use 1 but have neg effects
standard cockpits take 2 slots, that leaves one head slot empty

move existing cockpit upgrades to actual cockpits that are standard size, leave them with a ++ modifier in the name

dont forget to add weight

can easily be done:

  • expand head to 3
  • introduce new cockpits
  • require the mech to mount a cockpit or be invalid
  • have different sizes and weights for cockpits (use json, no coding necessary)

unsure on how to do:

  • visually extend the head slots to 3
  • make cockpits have cool new gameplay effects that weren't possible before
    • like adding more ++ variants
    • add more gameplay effects (e.g. crit. cockpit does no protection and gives aiming malus, cockpit with autopunchout support, small cockpits are cramped and mech warrior doesnt want to sprint at full speed in such a cockpit etc..)

ShutdownCausesInjury

Reuse that code to implement Overheat causes

wait for #64 to be implemented, then add new stat OverheatCausesInjury

see Mech.CheckForHeatDamage on where to patch
see MechShutdownSequence.CheckForHeatDamage on injury code

Performance improvements

Cache engine def lookups
Cache engine, structure and armor types lookup

Test if more components hurt or are ok. Maybe allow factional engine tonnage calculations and make xl, lfe, etc just simple kits. Dewcriptions should dynamically change then during tooltips.

Mechs with stock DHS receive SHS internal sinks

This is most prominent in custom variants such as those introduced by RogueTech, but I have a hunch that it affects the SLDF variants already in the story (like the SLDF Black Knight). Upon receiving these mechs, they have double heat sinks with an SHS engine, leading them to be unusable.

Proposed fix: modify the engine fix code to check if there are any DHS on the stock design, and then decide if it should convert the internal sinks to double.

switches for heat sinks and endo-steel

allow mixed heat sinks

assume engine is DHS if just a single DHS is found

allow partial endo-steel

this will count each endo steel critical slot and reduce the tonnage per item

automatically set initial tonnage

I think I can generically integrate endo-steel into the engine mod.

  • have endo-steel critical slot items
  • get 50% less initial tonnage when adding x of those items

Torso Cockpits

Sarna

Torso Cockpits weigh 4 tons and replace the standard Cockpit. Torso Cockpits occupy two spaces in the Center Torso, one for the cockpit and one sensor package. The head mounted Life Support systems are moved to the side torsos. This leaves four critical slots open in the 'Mech's head.[1] The cramped conditions impose a 1 point penalty on all Piloting skill rolls. When the first sensor system is destroyed, add a 2 point penalty on all to-hit rolls. After the second sensor system is destroyed, impose a 4 point to-hit penalty. (If the destroyed sensor systems are both in the head, the 'Mech is effectively blinded and the penalty applies to Piloting skill rolls and physical attacks as well.) If all three sensor systems are destroyed, the 'Mech is completely blind and cannot make weapon attacks as well as suffering a 4 point penalty to Piloting skill rolls.[2]

The proximity to the engine makes a MechWarrior's life difficult as well. The torso mounted life support systems are critical to the operation of the 'Mech. If one Life Support system is destroyed, the MechWarrior will take a point of damage each turn a Torso Cockpit equipped 'Mech is overheated by 1 to 14 points on the 'Mech heat scale. If the 'Mech is overheated by 15 points or more and a Life Support system is destroyed, the MechWarrior will take 2 points of damage.[3]

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.