MiscApi Documentation
A (hopefully) complete JS API for interacting with my save editor’s general branch programatically (wow fancy words I totally didnt look up :>). This documentation is up to date with API v1.1 and below.
- How do you use the API?
- Follow this doc (XD), and paste the code into the JS console once your save file is loaded :>
Quick Start
const api = new MiscApi();
console.log(api.listFields()); // See all the available fields (WOW)
Methods
Core Data Methods
get(fieldName)
Retrieves a formatted value from the save file.
Parameters:
fieldName(string): Name of the field to retrieve
Returns:
- For bit arrays (chest, weatherevent, trophy): Array of 0s and 1s
- For other fields: Formatted value (string, number, etc.)
- If the save file has been loaded but the processing failed i.e. the save data is just
0A, this returnsUncaught TypeError: node is null
Examples:
api.get('Money'); // Returns something like 50000 ($500/£500/€500/50000yen etc)
api.get('Location'); // Returns an area i.e. "Uptown Springdale"
api.get('Weather Events Active'); // Returns an array of numbers (why not boolean? idk just easier for me to implement): [1, 0, 1, 0, 0, 0, 0, 0]
api.get('Treasure Chests Opened'); // Returns something like: [0, 1, 1, 0, ...]
set(fieldName, value)
Sets a formatted value in the save file.
Parameters:
fieldName(string): Name of the field to setvalue: Value to set (type depends on field format)
Returns: true on success
Examples:
// Numbers
api.set('Money', 999999); // the max aka 999999yen/$9999.99/£9999.99/€9999.99
// Strings (enum values)
api.set('Location', 'Downtown Springdale');
api.set('Friends App - Icon', 'Pandle'); // Uses in-game name
// Bit arrays (0s and 1s)
api.set('Weather Events Active', [1, 0, 1, 0, 0, 0, 0, 0]);
api.set('Treasure Chests Opened', [0, 1, 1, 0, ...]); // Can be shorter than full length but it causes the unspecified ones to be set to 0 (unchecked)
// Partial arrays (will warn but will work setting the unspecified ones to 0 aka unchecked)
api.set('Weather Events Active', [1, 0, 1]); // Warns: only 3/8 elements provided
getRaw(fieldName)
Gets the raw hex bytes for a field.
Parameters:
fieldName(string): Name of the field
Returns: Hex string (uppercase)
Example:
api.getRaw('Money'); // Returns: "7F96"
setRaw(fieldName, hexValue)
Sets raw hex bytes for a field.
Parameters:
fieldName(string): Name of the fieldhexValue(string): Hex string (case insensitive, spaces/formatting ignored)
Returns: true on success
Example:
api.setRaw('Money', 'ff FF'); // Sets money to 65535 the case dosen't matter
Information Methods
listFields()
Lists all available fields in the save file.
Returns: Array of field objects with properties:
name(string): Field nameformat(string): Data formatsize(number): Size in bytesdescription(string): Field description
Example:
api.listFields();
Returns: [
{
"name": "Location",
"format": "location",
"size": 4,
"description": "Current location in the game"
},
{
"name": "XPos",
"format": "float32",
"size": 4,
"description": "Current X Coordinate in the game"
},
{
"name": "YPos",
"format": "float32",
"size": 4,
"description": "Current Y Coordinate in the game"
},
{
"name": "ZPos",
"format": "float32",
"size": 4,
"description": "Current Z Coordinate in the game"
}, ... ]
getAvailableValues(fieldName)
Gets available values for enum-type fields.
Parameters:
fieldName(string): Name of the field
Returns: Array of available values, or null for non-enum fields
Examples:
api.getAvailableValues('Location'); // Returns: ["Springdale Hot Springs Lobby", "Old Springdale", "Cicada Canyon", ...]
api.getAvailableValues('Friends App - Icon'); // Returns: ["Not set.", "Grumples", "Eyeclone", "Chirpster", "Kelpacabana", ...]
api.getAvailableValues('Weather Events Active'); // Returns: ["<unknown>", "<unknown>", "Yo-kai Advisory", "Yo-kai Warning", "Tripping Advisory", "Bugs: Swarming!", "Fish: Good fishing!", "<unknown>"]
api.getAvailableValues('Money'); // Returns: null (not an enum)
api.getAvailableValues('thisdosentexist'); // Throws the error: Uncaught Error: Field 'thisdosentexist' not found. Available fields: Location, ...
getSaveHex()
Exports the entire save file as a hex string.
Returns: Uppercase hex string of the complete save file
Example:
api.getSaveHex(); // Returns: "4A6F686E00000000FF7F..."
getVersion()
Returns the current API version as a number (NOT the save editer version. I considered making this a BigInt or even a Symbol to troll)
Returns: Number corresponding to API Version
Example:
api.getVersion() // Returns: [Version]
function code() {
if(api.getVersion() < 1.1) {
throw Error("This Plugin requires API v1.1 or later - please download the latest release of the save editor.")
}
// do stuff here like actual code
}
code()
syncSave(hex = getSaveHex())
Changes the save file to match the input - by default the normal save fetched from the API (wow the API uses the API)
Returns: undefined
Example:
d = api.getSaveHex()
d = doStuff(d); // im lazy ok
api.syncSave(d)
Notes:
- The input is hex, whitespace is ignored, and it is case-insensitive. It automatically strips whitespace, adds a space every byte, and capitises letters
- TL;DR requirements are lax, it internally rearranges it to my preferences :»»
Data Types
Note: This is not up-to-date. After the next major update, API docs will be cleaned up.
Numbers
uint8: 0-255 (0x00-0xFF)uint16: 0-65,535 (0x00-0xFFFF)uint24: 0-16,777,215 (0x00-0xFFFFFF)uint32: 0-4,294,967,295 (0x00-0xFFFFFFFF)float32: 32-bit floating point number (0x00-0xFFFFFFFF)
Enums
String values from predefined lists:
location: Game locationswallpaper: Available wallpapersbicycle: Bicycle typesbell: Bell soundsficon: Friend icons (uses in-game names)hq: Headquartersjob: Jobshobby: Hobbiesambit: Ambitions
Bit Arrays
Arrays of 0s and 1s representing boolean flags:
chest: 144 elements (treasure chests collected)weatherevent: 8 elements (weather event flags)trophy: 96 elements (trophies collected)
Raw Data
hex: Raw hex string data
Error Handling
The API throws descriptive errors for common issues:
try {
api.set('invalidField', 'value');
} catch (error) {
console.error(error.message); // "Field 'invalidField' not found..."
}
try {
api.set('Friends App - Icon', 'Invalid Icon');
} catch (error) {
console.error(error.message); // "Friends App - Icon 'Invalid Icon' not found..."
}
Bit Array Behavior
For bit array fields (fields of type: chest, weatherevent, trophy etc):
Getting Values
api.get('Weather Events Active'); // Returns: [1, 0, 1, 0, 0, 0, 0, 0]
Setting Values
// Full array
api.set('Weather Events Active', [1, 0, 1, 0, 0, 0, 0, 0]);
// Partial array (warns but works)
api.set('Weather Events Active', [1, 0, 1]); // Missing elements become 0
// Console: "Weather event array has 3 elements, expected 8. Missing elements will be set to 0."
// Boolean values also work
api.set('Weather Events Active', [true, false, true, false]);
Field Format Reference
| Format | Description | Example Input | Example Output | |
|---|---|---|---|---|
uint8 | 8-bit integer | 255 | 255 | |
uint24 | 24-bit integer | 1000000 | 1000000 | |
uint32 | 32-bit integer | 4000000 | 4000000 | |
float32 | 32-bit float | 123.45 | 123.45 | |
location | Location name | "Uptown Springdale" | "Uptown Springdale" | |
ficon | Friend icon name | "Pandle" | "Pandle" | |
weatherevent | Weather flags | [1,0,1,0,0,0,0,0] | [1,0,1,0,0,0,0,0] | |
chest | Chest collection | [0,1,1,0,...] | [0,1,1,0,...] | |
trophy | Trophy collection | [1,1,0,1,...] | [1,1,0,1,...] | |
hex | Raw hex data | "deadbeef" | "deadbeef" |
Integration
The API automatically updates the UI when values change:
- Calls
updateOutput()to refresh the save file - Calls
renderFields()to update the display (unless in dev mode)