Skip to content

Instantly share code, notes, and snippets.

@Dobby233Liu
Last active December 26, 2022 22:08
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save Dobby233Liu/0e8a9358118a0b76117b3d414521e14e to your computer and use it in GitHub Desktop.
Save Dobby233Liu/0e8a9358118a0b76117b3d414521e14e to your computer and use it in GitHub Desktop.
Concept for a recipe file for a kinda customizable Undertale mod patcher
{
// Behaviour of the auto-patcher is defined here
// EVERYTHING HERE is subject to change
// Always 1
"APILevel": 1,
"FriendlyName": "My Crappy Mod 2000"
"BasedOn": {
// 1 - Undertale, 2 - Deltarune SURVEY_PROGRAM (unsupported), 3 - Deltarune CH1&2
// always 1 ATM
"Game": 1,
// The patcher has builtin patches to change the version to match the target
// (limited to Mac/Linux DRM -> Windows DRM or Windows DRM-free -> Windows DRM ATM)
"Variant": "Undertale.WindowsSteamDRM",
// Only 1.08 and up are supported
// 1 - 1.08; 2 - 1.09~1.11, upgrade to GMS2 only; 3 - 1.11, full upgrade (unsupported)
"GameVersion": 2
},
"Patches": [
{
"Name": "Core",
// inherits default friendly name and description from the patcher defaults
/*"Required": true,
"CopyFiles": {
// file : dest
},
"CopyFilesBranchOnTarget": {
// target : { file : dest }
// "All": {},
},
"PatchFiles": {
// src : patch
// src supports wildcards
// start path with $ to grab a string from Assets
"game.data": "$Binaries.Mod.Patch"
}*/
},
{
"Name": "BetterMegalovania",
"FriendlyName": "Better MEGALOVANIA",
"Description": "Replaces the song of the funny bone man's fight.",
"CopyFiles": {
"Better ost/mus_zz_megalovania.ogg": "mus_zz_megalovania.ogg"
},
"DeleteFiles": [
"mus_churchbell.ogg"
]
}
],
// Customize stuff in the patcher and localize strings defined in other parts of this recipe here
// This is the language that this recipe is designed for
"TextLanguage": "en",
"Strings": {
// language : { string key : string value }
// Having a language in this list will cause it to appear during initialization, even if there is no strings for the language
"zh_Hans": {
"Mod.FriendlyName": "垃圾模组2000",
"Mod.Patches.BetterMegalovania.FriendlyName": "改进 MEGALOVANIA",
"Mod.Patches.BetterMegalovania.Description": "更改骷髅男战斗的音乐。"
}
},
"Assets": {
// type : { "resource key" : replacement }
// Use paths relative to location of recipe unless specified otherwise
"Graphics": {
// Use png files (ideally)
"Wizard.SidebarImage": "Setup wizard images/sidebar.png",
"Wizard.StepTitleBarImage": "Setup wizard images/title bar.png"
},
"Binaries": {
// Use this to rename built-in patch filenames
// Tip: you can remove files that are not used in your recipe
"Mod.Patch": "mod.xdelta",
"VersionUpdating.Undertale.GMS2Runner.Windows": "PLEASE_RUN_PATCHER.exe",
// Require the user to download SP
"VersionUpdating.Undertale.GMS2Runner.MacOS": null,
"VersionUpdating.Undertale.GMS2Runner.Linux.DownloadURL": "h",
"VersionUpdating.Undertale.GMS2Runner.Linux.Icon": "mod icon.png"
}
},
// Stuff that has defaults not included here
"TargetDeterminationConditions": [
// Attempt to conclude what is the kind of the game we are patching with a few conditions
// Every dictionary in this array contains such conditions and is called a set, if one of the conditions in a set hits, the patcher proceeds to the next set
// In every set one of the conditions with ShouldMatch should hit, otherwise the patching operation will be terminated
// The patcher already has presets for all builtin targets:
// "All", "Windows", "Linux", "MacOS", "Undertale.LinuxSteamDRM", "Undertale.MacOSSteamDRM", "Undertale.WindowsSteamDRM" and "Undertale.WindowsDRMFree"
// You can add extra conditions for those keys if needed
// { target name : { conditions } }
],
"BaseDirectory": {
// One for each target, you can use .. until the true root directory of the game is reached
// The patcher already has presets for all builtin targets
// You can replace the defaults by using those keys if needed
// target : directory
},
"DestinationFilenameAliases": {
// We pretend that a file exists, and when the patch operation require one of these files, operate on the first existing file in the value array instead
// The spoof filename would ideally be a nonexisting file
// The patcher has a default "game.data" that for example leads to data.win for the Windows target
// spoof file name : [ redirect file names ]
},
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment