Starbound

Starbound

Not enough ratings
Tools what I use for Starbound modding
By FUS
An assortment of programs and web pages what I use to make Starbound mods with.
   
Award
Favorite
Favorited
Unfavorite
The List:
    General Software

  1. 7-Zip: https://www.7-zip.org/ - used to open .zip and .7z archive files;

  2. PaintNET: https://www.getpaint.net/ - for pixel art, while Windows 11's Paint finally has layers implemented decades later, this is the one what I personally use (and I'm not switching to 11);

  3. Pixelorama: https://orama-interactive.itch.io/pixelorama - Also and specifically for pixel art, free on Itch, paid on Steam. Tried this editor out recently, and would honestly recommend you use it instead. Look and feel is closer to that of Photoshop (without eating all your RAM in the process thinking it's Chrome or something), and generally feels much better to work with than PaintNET (eye drop tool and pencil bound to separate mouse buttons by default? How did I managed without this for so long??);

  4. Unpack-Assets script by HyperHamster: https://github.com/HyperHamster/unpack-assets - a bulk mod unpacker script what I wished for years and searched... hours for. Scroll down to the "Options & Switches -A & /A" section to see how to use it as such.

    JSON and .Patch editing

  5. Notepad++: https://notepad-plus-plus.org/ - for JSON editing, invaluable, has many great features such as word highlighting; independent selection, copy-paste and editing on multiple lines at once using Ctrl; batch text replacement, code colour-coding and more;
    JsonToolsNppPlugin: https://github.com/molsonkiko/JsonToolsNppPlugin - actually for JSON editing, an add-on for Notepad++ that allows you to "prettyprint" JSONs, compress them, as well as fix various issues (it even corrects wrong/missing commas for you when you do the prettyprint formatting!);

  6. Kawa's Starbound JSON Lab: https://helmet.kafuka.org/sbmods/json/ - has a lot of info in regards to Starbound's JSON files, also Tools like a JSON Linter, Validator, but most importantly;
    Kawa's Starbound Patcher: https://helmet.kafuka.org/sbmods/json/patch.html - which allows you to get a modified JSON file out of an original + a patch for it and then pressing "Patch", or generate a patch automatically using the original file as an input, and a modified file as the expected output and then pressing "Diff";

  7. RFC 6902 Patch Generator: https://chbrown.github.io/rfc6902/ - linked on the Lab page as well, it can generate a patch automatically using the original file as an input, and a modified file as the expected output, technically redundant due to the previous point, but some might prefer how it writes patches differently compared to Kawa's (you can copy the entire result easily by first selecting/highlighting the top square bracket, and then the bottom one while holding Shift).

  8. Dungeon Patch Cheat Sheet for Every Planet on the Workshop (with .biome files)
_Metadata File Copy&Paste
Taken from the Starbound Wiki[starbounder.org]and added in 2 versions for ease of access.
First one is for common use case - a basic mod what works on it's own and doesn't need any dependencies or priority changes.
And the second one is with all options listed, but probably shouldn't be used just like that, unless you really know what you're doing with the load order.

//Basic version, "Link" and "Steam Content ID" fields are filled out automatically.
//Note: While you can write in the tags maualy, do also remember to check and add them inside the Mod Uploader Tool!
{ "name" : "PlaceHolderSystemName", "friendlyName" : "Place Holder Public-Facing Name", "description" : "Placeholder", "author" : "John P.LaceHolder", "version" : "1.0", "link" : "", "steamContentId" : "", "tags" : "" } //All Parameters Version.
//Note: "Requires" parameter will crash the game with no survivors if it's demands are not fully met, and will not accept if one of the mods (required or the one requiring) is installed locally, while the other is through the Steam Workshop.
{ "name" : "PlaceHolderSystemName", "friendlyName" : "Place Holder Public-Facing Name", "description" : "PlaceHolder", "author" : "John P.LaceHolder", "version" : "1.0", "link" : "", "steamContentId" : "", "tags" : "", "includes" : ["ModSystemName"], "requires" : ["ModSystemName1", "ModSystemName2"], "priority" : 0 }
Modding Tip: Adding Your Dungeons to Lush/Garden Planets
While technically considered off-limits due to story dungeons being there. This actually doesn't stop you from adding-in more dungeons, for example in cases where story content was disabled entirely, or the dungeon limit was simply removed by other mods.

Just add another patch as shown below into your terrestrial_worlds.config.patch, separated by square brakets from the rest of the planetary spawnpools, and your dungeon will appear on Lush planets whenever the limit on them is no longer detected.

[ [ { "op": "test", "path": "/planetTypes/garden/layers/surface/dungeonCountRange", "inverse" : true }, { "op" : "add", "path" : "/planetTypes/garden/layers/surface/dungeons/-", "value" : [1.0, "dungeon name here"] } ], [ { "The rest of the patches start here" } ] ]
On the ("Test",) Parameter:
Often overlooked, but it allows you to probe the target JSON for certain values or paths before applying changes to it, preventing possible crashes or errors in the log to occur needlessly.
Goes without saying that if the test fails, remaining operations what are sharing the same square brackets with it will be aborted.

Here's the 4 basic examples of how you can use it:

[ // An example patch for universe_server.config; // Example 1: Check if the target Path exists, if yes, then remove it. [
{
"op": "test",
"path": "/findStarterWorldParameters/starterWorld/terrestrialSize"
},
{
"op": "remove",
"path": "/findStarterWorldParameters/starterWorld/terrestrialSize"
}
],
// Example 2: Check if the target Value in a certain Path exists, if yes, then replace it with another value. // Sidenote: "Replace" works the same way as doing "Remove" and then "Add" would work, just combined into a single operation. [
{
"op": "test",
"path": "/findStarterWorldParameters/starterWorld/terrestrialBiome",
"value": "garden"
},
{
"op": "replace",
"path": "/findStarterWorldParameters/starterWorld/terrestrialBiome",
"value": "barren"
}
],
// Example 3: Check if the target Path doesn't exist, if so, then add it in, can also be populated in one operation by adding a ("value":) parameter. // Note: While "requiredSystemWorlds" does exist already in the universe_server.config by default, for the sake of this example it is assumed that another patch has removed it. [
{
"op": "test",
"path": "/findStarterWorldParameters/requiredSystemWorlds",
"inverse": true
},
{
"op": "add",
"path": "/findStarterWorldParameters/requiredSystemWorlds",
"value": {
"Forest",
"Desert",
"Snow"
}
}
],
// Example 4: Check if the target Value exists in a certain position (always counting from zero) on the list of values, if yes, then replace it with another value. [
{
"op": "test",
"path": "/findStarterWorldParameters/requiredSystemWorlds/1",
"value": "Desert"
},
{
"op": "replace",
"path": "/findStarterWorldParameters/requiredSystemWorlds/1",
"value": "Savannah"
}
]
]