3

I like making new characters in Starbound from time to time, but it becomes a real chore trying to re-scan absolutely everything just to be able to print it with the Pixel Printer. Is there any way to unlock everything all at once, without needing to resort to scavenging the whole galaxy or enabling /admin mode?

The closest thing I can find is manually using /spawnitem to cheat an item in, scan it, and subsequently destroy it, but this is an awful lot of busywork, since I need to do it with every single printable item. I’d like to find a way to unlock everything at once.

Obviously, doing this is “cheating”, so I don’t particularly care what the method is, as long as it isn’t too laborious. An in-game command to run, a mod to install, or even a particular file to edit would all be acceptable solutions. That said, I don’t consider /admin mode an acceptable solution, since I don’t want to be in /admin mode! I want to still play the game and be able to take damage and consume energy, I just want to skip the grind (that I’ve already done before).

1

I am a former developer of Starbound.

Not without save hacking.

The list of scanned objects is saved to your player file.

First, a little bit on how player files are structured. They are custom serialized binary data that when expanded becomes a JSON file. The actual structure of the file is not fresh in my memory, and it may have changed since I last had access to the game. There may be save editing utilities for Starbound out already, I would suggest checking if those exist.

The data you want to modify is located under the "log" object in a list of strings named "scannedObjects".

The entries in this list are objectNames. You can find each one you want by unpacking the assets.pak file and browsing through the .object files within. The "objectName" string is the string you want to use. For instance, this is the apexaquarium2.object:

{
  "objectName" : "apexaquarium2",
  "colonyTags" : ["apex","apexvillage","pretty"],
  "rarity" : "Common",
  "category" : "Decorative",
  "price" : 60,

  "description" : "An empty aquarium. How lonely.",
  "shortdescription" : "Empty Wooden Aquarium",
  "race" : "apex",

  "apexDescription" : "An Apex may only replace his fish once every 3 years.",
  "avianDescription" : "This fish has flown the nest.",
  "floranDescription" : "Ssssomeone got here firsst.",
  "glitchDescription" : "Neutral. An empty tank.",
  "humanDescription" : "I wonder what happened to the fish...",
  "hylotlDescription" : "Memories of home wash over me.",
  "novakidDescription" : "It's for keepin fish. But there ain't no fish in it.",

  "inventoryIcon" : "apexaquarium2icon.png",
  "orientations" : [
    {
      "dualImage" : "apexaquarium2.png:<color>.<frame>",
      "imagePosition" : [-16, 0],
      "frames" : 8,
      "animationCycle" : 1.0,

      "spaceScan" : 0.1,
      "anchors" : [ "bottom" ],
      "collision" : "platform"

    }
  ],

  "soundEffect" : "/sfx/objects/aquarium1.ogg"

}                                                                                                                                                                   

By convention, we've tried to make the file name the same as the objectName, but there's no enforcement of this convention by the game engine.

Alternatively, you could enable admin only to print objects and then turn it right back off again when you're done. If you really, really care, you can buy it with admin, scan it, throw it away, and then buy it again legit.

While annoying, both of these options seem somewhat easier than attempting to hack your player file.

If you really want to get your arms dirty, you may be able to perform this action via the lua scripting engine using a custom mod. The .player file is what is known as a versionedJson internally. There is a lua command called loadVersionedJson and another called makeCurrentVersionedJson. Hopefully, your task is as simple as making a mod that calls a lua function that loads a copy of your character's player file, modifies it by iterating over all the objects and adding it to the log.scannedObjects key, then stores it back to another file. Then you can move that file to your regular player file, and Bob's your uncle.

You may have to play around with various lua contexts to find one where both of these commands are available though.

| improve this answer | |
  • 2
    “I am a former developer of Starbound.” Well! This answer is a little unfortunate, but I can’t claim it isn’t authoritative. I am lucky enough to be a programmer professionally, so this is helpful enough to theoretically get me there, but I’m not sure it’s so worth it to me that I am willing to sink in the time—as you say, just giving up and temporarily using /admin is probably less work. Still, if I do end up looking into the Lua approach (which seems more pleasant than trying to figure out a proprietary binary format?) and manage to get something working, I’ll add another answer here. – Alexis King Mar 2 '18 at 2:29
  • I hope you get it working. If you need help, I think the freenode IRC channel #starbound-modding is still somewhat active. – OmnipotentEntity Mar 2 '18 at 2:30

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.