NetroScript/Graveyard-Keeper-Savefile-Editor

[Suggestion] Add support for rearranging Alchemy recipes?

Closed this issue · 1 comments

It's just one of those things about the game that really irks me, that being that once you learn or discover a new recipe at the alchemy workbench, they're recorded in the order you found them rather than in any sort of alphabetical or logical order. Could you please add support for rearranging the alchemy recipes we've unlocked at the workbench (individually for I and II) in the editor?

Preferably letting the user rearrange them however they like rather than just brute forcing it with a single button press to have the whole list unlocked in alphabetical order.

Or, honestly, an option to simply erase the list of discovered formulae so you can redo it yourself in-game. Though that would require testing to make sure the game will actually record the recipes again (and a fix for that problem if it arises).

This is a very specific feature you are asking for.

For one I don't think really many people would care for it, for the other, it would be difficult to implement in a nice visual way, because crafting recipes contain no data besides the name. The editor doesn't have icons for them (and not all have icons), the internal names used for them don't really tell the user much (or would you directly know what for example mix:mf_alchemy_craft_03:alchemy_1_brown:alchemy_2_yellow:alchemy_3_brown: means?) .

For those two reasons I personally won't implement it.

Although if that is really something so important for you, you can change it manually by using the exported JSON save files.


If you export a save as JSON, select HTML in the file drop down.

Open this generated HTML file in a browser. Open the console of your browser (f.e. F12 for Chromium based browsers).

The Array gameSave.savedata.completed_one_time_crafts.v which you can access in the console contains all your previously crafted objects (which decides the order of the crafts).

By using

copy(JSON.stringify(gameSave.savedata.completed_one_time_crafts.v, null, 4))

you could copy a formatted list of all those objects which you can paste in a text editor. In this text editor you can then rearrange the items, and then assign the values again like:

gameSave.savedata.completed_one_time_crafts.v = <Your Array which you just changed>

If you know some JavaScript, you can even simplify the ordering of your list, by first separating the crafts into multiple groups and only specifically editing one.

The following code for example give you an array of all crafts which either include alch or mix as a substring:

gameSave.savedata.completed_one_time_crafts.v.filter(
	entry => 

	typeof entry.v == "string" ? 
		/alch|mix/.test(entry.v) :
		/alch|mix/.test(entry.v.string)
)

Where the result might look like the following for example:

Click to expand
[
    {
        "v": "mix:mf_alchemy_craft_03:alchemy_1_d_blue:alchemy_2_violet:blood:",
        "type": 9
    },
    {
        "v": "surv:alchemy_2_violet",
        "type": 10
    },
    {
        "v": "surv:alchemy_1_d_blue",
        "type": 10
    },
    {
        "v": "alch:mf_distcube_2_cuprum:heart",
        "type": 9
    },
    {
        "v": "alch:mf_alchemy_stirrer_01:brain",
        "type": 9
    },
    {
        "v": "alch:mf_alchemy_mill:intestine",
        "type": 10
    },
    {
        "v": "mix:mf_alchemy_craft_03:alchemy_1_red:alchemy_2_violet:alchemy_3_red:",
        "type": 9
    },
    {
        "v": "surv:alchemy_1_yellow",
        "type": 10
    },
    {
        "v": "surv:alchemy_2_yellow",
        "type": 10
    },
    {
        "v": "surv:alchemy_3_yellow",
        "type": 10
    },
    {
        "v": "alch:mf_alchemy_stirrer_01:bee",
        "type": 10
    },
    <more elements>
]