Is there any way I can unlock all scans for use in the Pixel Printer?

Solution 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.