Skip to content

Releases: gurrenm3/BTD-Mod-Helper

3.3.4

10 Dec 18:39
Compare
Choose a tag to compare

3.3.3

26 Oct 00:27
Compare
Choose a tag to compare
  • Fixed an issue with downloading new mods from the Mod Browser when the disabled mods folder didn't exist

3.3.2

25 Oct 01:29
Compare
Choose a tag to compare
  • 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

17 Oct 17:16
Compare
Choose a tag to compare
  • 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

09 Oct 05:31
Compare
Choose a tag to compare

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
  • Added a ModRoundSet.Rounds1Index override that changes the behavior of the ModifyRoundModels 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
  • Added TimeHelper class with properties OverrideFastForwardTimeScale and OverrideMaxSimulationStepsPerUpdate

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.
    • 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"

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

03 Sep 16:13
Compare
Choose a tag to compare
  • 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

3.2.0

25 Aug 23:34
Compare
Choose a tag to compare

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
  • 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
  • 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.
  • Added new ModContent.Localize methods that can add new mod specific localizations from variables
    private static readonly string DoTheThing = ModContent.Localize<MyMod>(nameof(DoTheThing), "Do The Thing!");
    Or within any method/constructor that's going to run as the game loads
    var doTheThing = ModContent.Localize(nameof(DoTheThing), "Do The Thing!");
    The result assigned to the DoTheThing is your mod specific localization key, that you can use in a
    ModHelperText.SetText(DoTheThing) directly or as string localizedText = DoTheThing.Localize() otherwise
  • As before, you can still override the RegisterText method in any class that extends NamedModContent to
    directly add extra stuff to the text table
    public 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

08 Aug 18:17
Compare
Choose a tag to compare
  • 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

07 Aug 17:11
Compare
Choose a tag to compare
  • Removed a no longer needed patch that had side effects with X/3+/X Mermonkey damage calculations

3.1.23

02 Aug 20:21
Compare
Choose a tag to compare
  • Fixed ApplyOutlineShader
  • Updated UpgradeTypes and VanillaSprites enums for Mermonkey