Releases: gurrenm3/BTD-Mod-Helper
Releases · gurrenm3/BTD-Mod-Helper
3.3.4
- Fixed for BTD6 v46 (thanks @GrahamKracker !)
3.3.3
- Fixed an issue with downloading new mods from the Mod Browser when the disabled mods folder didn't exist
3.3.2
- Fixed an issue that made embedded audio clips be loaded with extra silence at the end of them
- Added a
ModBloonOverlay
class for making custom Bloon Overlays- NOTE: Due to a MelonLoader bug, these won't display correctly on ML 0.6.5, but work again starting with 0.6.6 / nightly versions
- Added a
Sprite.TrySaveToPNG()
extension like the one for Textures except accounting for the Sprite's position and size within its texture atlas - Added
export image
console command that exports all UI images underneath your mouse cursor to png files
3.3.1
- Fixed a TimeManager patch for BTD6 v45.2 (fixes Faster Forward)
- Made some methods in ResourceHandler public
- Fixed a bug with the Shift+Shift to open console setting
3.3.0
NOTE: BTD6 v45 will require MelonLoader v0.6.5 to work
- Fixed for BTD6 v45.0
- Fixed a performance issue with the background Task Scheduler
- Also added new
ScheduleType.WaitForSecondsScaled
that is affected by fast-forward mode
- Also added new
- Added a
ModRoundSet.Rounds1Index
override that changes the behavior of theModifyRoundModels
methods to match the
player facing 1, 2, 3 and not the internal 0, 1, 2.- This will become the default in a later Mod Helper update
- Updated the way VanillaSprites.cs is generated, so it no longer includes some duplicates and many "false positives" of
Sprites that have GUIDs but aren't properly able to be loaded on demand - Added a Renderer extension
.ReplaceColor(Color targetColor, Color replacementColor, float threshold)
that
replaces all the colors in the main texture within a certain threshold of the target with a new color. - Added a Renderer extension
.AdjustHSV(float hueAdjust, float saturationAdjust, float valueAdjust)
that edits
the Hue/Saturation/Value of the main texture.- Can also do
.AdjustHSV(float hueAdjust, float saturationAdjust, float valueAdjust, Color targetColor, float threshold)
to only
apply the adjustment to certain colors in the texture
- Can also do
- Added
TimeHelper
class with propertiesOverrideFastForwardTimeScale
andOverrideMaxSimulationStepsPerUpdate
Custom Jukebox Tracks
- Added a
ModJukeboxTrack
class that lets you easily add your own jukebox music from custom audio - Also updated resource embedding behavior to also automatically embed .mp3 files in your project in addition to .wav
files - See the wiki page for more info
Model Serialize / Tower Quick Edit
- Added a new
ModelSerializer
that's better at serializing and deserializing things like TowerModels to/from JSON (
sadly still not perfect) - Making use of the above, added a new "Tower Quick Edit" functionality that can let you try out changes to TowerModels
from within a Sandbox game- When activated (default hotkey Shift + Backslash) with a tower selected in Sandbox mode, a text editor will open up
and let you edit the TowerModel as JSON. When you close the file, it will apply the changes back to the tower.- By default, it changes the "root" model of the tower, which is before any Mutators have been applied. If you
instead want to see/edit the full tower model (e.g. one that has Paths++ mutators applied),
use the "Quick Edit Mutated Model" hotkey (default Alt + Backslash)
NOTE: This can have the side effect of stacking / reapplying mutators on the tower.
- By default, it changes the "root" model of the tower, which is before any Mutators have been applied. If you
- The default editor it opens with is Notepad
- To make it edit with VsCode, change the "Quick Edit Program" mod helper setting to "code -w -n"
- To make it edit with JetBrains Rider, change it to "%LOCALAPPDATA%\Programs\Rider\bin\rider64.exe --wait"
- When activated (default hotkey Shift + Backslash) with a tower selected in Sandbox mode, a text editor will open up
Developer Console
- Simple CLI-style interface that modders can add commands to that can be run in game
- Mainly an alternative to adding miscellaneous hotkeys or buttons for infrequently used actions
- Default hotkey is F8 (can be changed in settings under "Mod Making")
- There's also a Mod Setting you can opt in to that make pressing Shift twice in a row activate it
- Define commands by creating classes that extend
ModCommand
, see here for Mod Helper's examples
3.2.1
- Pause Screen Mods Button now shows number of active mods
- Updated icon for Pause Screen mods button
- Made it less likely for other mods to have errors if they tried to use file/folder picker popups outside standard mod settings
- Apopalypse Mode is now correctly affected by the Round Set changer
- Made the Round Changer button also show up in the Challenge Editor Play screen
- Note: The Round Set Changer would always technically apply to challenges, this is just making it clearer and easier
to change without going back to the normal map play screens
- Note: The Round Set Changer would always technically apply to challenges, this is just making it clearer and easier
3.2.0
Misc Updates
- Added a button that lets you open the Mods Menu from the In Game Pause Screen
- This includes opening Mod Settings menus, but not many settings yet will probably live update in a game
- Added a button in the Mods Menu that can display the SHA 256 hashes of active mods
- Added a new
ModTower.IncludeInMonkeyTeams
override - Fixed some inconsistencies where some simulation behavior extensions would throw exceptions instead of just returning null
- ModHelperData now supports multiline raw strings for descriptions, example
Localization Updates
General
- Added a new button in the Mods Menu to export a mod's localization to a json file, which can be edited to change its
supported displayed text for your language- This goes to a newly added subfolder
Mods/BloonsTD6 Mod Helper/Localization/[Language]
- Edits to files here should refresh the text without requiring a game restart
- This goes to a newly added subfolder
- Added a new Translation Tool page on the website that can
easily put Localization files through Google translate for individual or all supported languages- Using this tool, Mod Helper now contains Localizations for all supported BTD6 language. If you see a way that
one/many of the Google Translations could be improved for your language, you can help out by submitting edits to
the corresponding Language file through GitHub
- Using this tool, Mod Helper now contains Localizations for all supported BTD6 language. If you see a way that
- The text in mods that should be automatically supported for localization editing includes
- Names and Descriptions for Towers, Upgrades, Heroes, Bloons etc
- Names and Descriptions for Mod Settings
- General mod info like the description
For Modders
- The standard btd6.targets import will now automatically embed
/Localization/[Language].json
files in your mod
project- Use the Localization Button on your own mod with active language English to get a starter .json for your mod
- If you paste in the .json content on the website and press the "Translate All" button it will create a .zip file
with all the correctly named .json files you'd need for your mod
- ModHelperText and ModHelperDropdown components now Localize their texts by default
- For Localization Entries, putting text within [Square Brackets] will make it try to fetch existing localization for
that key- e.g.
The description is [DartMonkey Description]
->
The description is Throws a single dart at nearby Bloons. Short range and low pierce but cheap.
- e.g.
- Added new
ModContent.Localize
methods that can add new mod specific localizations from variablesOr within any method/constructor that's going to run as the game loadsprivate static readonly string DoTheThing = ModContent.Localize<MyMod>(nameof(DoTheThing), "Do The Thing!");
The result assigned to thevar doTheThing = ModContent.Localize(nameof(DoTheThing), "Do The Thing!");
DoTheThing
is your mod specific localization key, that you can use in a
ModHelperText.SetText(DoTheThing)
directly or asstring localizedText = DoTheThing.Localize()
otherwise - As before, you can still override the
RegisterText
method in any class that extendsNamedModContent
to
directly add extra stuff to the text tablepublic override void RegisterText(Il2CppSystem.Collections.Generic.Dictionary<string, string> textTable) { base.RegisterText(textTable); // Call the base to still register DisplayName / Description textTable[Id + " Long Description"] = LongDescription; // More specific stuff to your ModContent }
3.1.25
- An error indicator will now show on the main menu Mods Button if any mods have load errors
- Added a new load error for not being on MelonLoader 0.6.1
- Fixed unneeded errors on Epic about Il2CppFacepunch.Steamworks
3.1.24
- Removed a no longer needed patch that had side effects with X/3+/X Mermonkey damage calculations
3.1.23
- Fixed ApplyOutlineShader
- Updated UpgradeTypes and VanillaSprites enums for Mermonkey