GithubHelp home page GithubHelp logo

johndoe31415 / dspbptk Goto Github PK

View Code? Open in Web Editor NEW
36.0 4.0 9.0 38 KB

Dyson Sphere Program Blueprint Toolkit

License: GNU General Public License v3.0

Python 100.00%
dyson-sphere-program blueprint

dspbptk's Introduction

dspbptk

This is dspbptk, the Dyson Sphere Program Blueprint toolkit. Dyson Sphere Program is an amazing factory-building game by the incredibly talented indie-dev Youthcat Studio. It allows blueprinting files to disk and then reusing them in other parts of your game.

There are some cool things that could be done with this import/export functionality, and what I had in mind was something like:

  • Editing blueprints outside the game, using maybe other/better tools
  • Automatic upgrade/downgrade of blueprints, e.g., upgrading belts Mk1 to Mk2 or Mk3. This would allow easy generation of a template book (where you could e.g., create a set of Mk3 balancers and then automatically create the books for Mk1/Mk2 balancers)
  • Automatic parametrization of blueprints, e.g., you have a smelter blueprint that requests Titanium ore via an Interstellar Logistics Station, smelts them and returns Titanium Ingots. You could update automatically generate the same blueprint for iron/copper/silicon/steel so that you don't have to manually change the request, assign the Logistics output and change the smelter recipes all in one go.
  • Parametric generation of blueprints, e.g., automatically generate a row of 1, 2, 4, 8, 10 Energy Exchangers/etc.
  • Plot blueprints outside the game, e.g., to generate "birds eye view" of the blueprints for library organization.

The possibilities are endless!

Now, all of this can obviously done in the game. So there are two possible solutions that you could take:

  1. Spend some time to do this by hand.
  2. Spends hours reverse engineering DSP and implementing the necessary bits

Obviously, I prefer option (2).

Why is this difficult?

Dyson Sphere Program kindof "authenticates" blueprints. Essentially, the blueprint strings are Base64-encoded, gzipped binary data that are also hashed. This hash function is key: while initially my assumption was that this is MD5, none of the combinations I tried actually yielded the correct result. So I reverse engineered the code and found out that actually they do use a proprietary, modified variant of MD5 that produces completely different results. They call this algorithm MD5F in their code. There's also a variant with even other constants, called MD5FC, which I don't know what it is used for. But it's implemented too.

So essentially, there are two pieces to this puzzle:

  1. Reverse engineer the hash function (done)
  2. Reverse engineer the internal format of the blueprint binary (done)

If anyone from Youthcat Studio reads this: Pleeeease don't make it more difficult to mod your game. It's fun reversing it and whatnot, but it's also ultra cool to have a command line tool interface with your game.

How to use it?

Right now, very little functionality is implemented. But you can kind of see how it works in the code. For example, there is a command that lets you see what's in a blueprint:

$ ./dspbptk dump "bps/Processor Factory.txt"
Name: Processor Factory
Total building count: 1149
  879  ConveyorBeltMKIII
  183  SorterMKIII
   61  AssemblingMachineMkI
   23  TeslaTower
    2  PlanetaryLogisticsStation
    1  Splitter

You can also convert the blueprint to JSON (so you have a very clear idea of the internal structure of the file). Note that reverse conversion is not implemented (yet):

$ ./dspbptk json --pretty-print "bps/Processor Factory.txt" procfac.json
$ cat procfac.json
[...]
            {
                "area_index": 0,
                "filter_id": 0,
                "index": 16,
                "input_from_slot": 0,
                "input_object_index": 4294967295,
                "input_offset": 0,
                "input_to_slot": 1,
                "item_id": "ConveyorBeltMKIII",
                "local_offset_x": 69.99999237060547,
                "local_offset_x2": 69.99999237060547,
                "local_offset_y": 25.000001907348633,
                "local_offset_y2": 25.000001907348633,
                "local_offset_z": -2.2910537609277526e-06,
                "local_offset_z2": -2.2910537609277526e-06,
                "model_index": 37,
                "output_from_slot": 0,
                "output_object_index": 12,
                "output_offset": 0,
                "output_to_slot": 1,
                "parameter_count": 0,
                "parameters": [],
                "recipe_id": 0,
                "yaw": 315.07470703125,
                "yaw2": 315.07470703125
            },
[...]

And there is some example code that edits blueprints, although the only thing it can do right now is edit the short text. It's mainly to demonstrate that I can correctly put a blueprint file back together and recompute the correct hash so that it's accepted in DSP:

$ ./dspbptk edit --short-desc "New description" "bps/Processor Factory.txt" new.txt

Thanks

Thanks to Youthcat Studio for an incredible game. You are absolutely fantastic and your game is ridiculously good and addictive.

License

GNU GPL-3.

dspbptk's People

Contributors

johndoe31415 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar

dspbptk's Issues

PLS only reads 3 out of 4 items

I have this

Blueprint with 4 PLSs each with 4 items set ``` BLUEPRINT:0,10,40001,0,0,0,0,0,638451488482413844,0.10.29.21950,PlsSorter1,"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"FB09C8A5B4DB2C146B27AE1BF5B27B40 ```

But the resulting JSON shows each PLS as only having 3 items set.

            {
                "index": 54,
                "area_index": 0,
                "local_offset_x": 46.0,
                "local_offset_y": 5.000001907348633,
                "local_offset_z": -2.2910537609277526e-06,
                "local_offset_x2": 46.0,
                "local_offset_y2": 5.000001907348633,
                "local_offset_z2": -2.2910537609277526e-06,
                "yaw": 0.0,
                "yaw2": 0.0,
                "item_id": "PlanetaryLogisticsStation",
                "model_index": 49,
                "output_object_index": 4294967295,
                "input_object_index": 4294967295,
                "output_to_slot": 0,
                "input_from_slot": 0,
                "output_from_slot": 0,
                "input_to_slot": 0,
                "output_offset": 0,
                "input_offset": 0,
                "recipe_id": 0,
                "filter_id": 0,
                "parameter_count": 2048,
                "parameters": {
                    "storage": [
                        {
                            "item_id": 1105,
                            "local_logic": 1,
                            "remote_logic": 0,
                            "max_count": 5000
                        },
                        {
                            "item_id": 1106,
                            "local_logic": 1,
                            "remote_logic": 0,
                            "max_count": 5000
                        },
                        {
                            "item_id": 1109,
                            "local_logic": 1,
                            "remote_logic": 0,
                            "max_count": 5000
                        }
                    ],
                    "slots": [
                        {
                            "direction": 2,
                            "storage_index": 2
                        },
                        null,
                        {
                            "direction": 2,
                            "storage_index": 1
                        },
                        null,
                        null,
                        null,
                        {
                            "direction": 2,
                            "storage_index": 4
                        },
                        null,
                        {
                            "direction": 2,
                            "storage_index": 3
                        },
                        null,
                        null,
                        null
                    ],
                    "parameters": {
                        "work_energy": 200000,
                        "drone_range": 4194967296,
                        "vessel_range": 240000000,
                        "orbital_collector": true,
                        "warp_distance": 480000,
                        "equip_warper": true,
                        "drone_count": 10,
                        "vessel_count": 100
                    }
                }
            },

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.