Savegame: Difference between revisions

From CrossCode Wiki
Jump to navigation Jump to search
m (fix slot number)
m (Editor URL fixed)
Line 116: Line 116:
|-
|-
| <code>Editor from Omegalink12</code>
| <code>Editor from Omegalink12</code>
| [http://htmlpreview.github.io/?https://github.com/omegalink12/save/blob/gh-pages/index.html Online Editor] ([https://github.com/omegalink12/save Sourcecode])
| [https://omegalink12.github.io/save/ Online Editor] ([https://github.com/omegalink12/save Sourcecode])
|-
|-
| <code>Editor from Streetclaw</code>
| <code>Editor from Streetclaw</code>

Revision as of 02:02, 7 May 2017

CrossCode has two save systems. The old system (before 0.8.2) stores all Saves in localstorage. Due to size limitations this was chnaged to a file based save system. This new System stores save data in the cc.save file.

0.8.2 has a savegame bug on MacOS and Linux. The Windows exclusive Environment variable appdata is used. Version 0.8.2-2 replaced this with nw.App.dataPath.

Location

Save File (since 0.8.2-2)

System Path
Windows %LOCALAPPDATA%\CrossCode\cc.save
Linux ~/.config/CrossCode/Default/cc.save
MacOS ~/Library/Application Support/CrossCode/Default/cc.save

Localstorage saves

System Path
Windows %LOCALAPPDATA%\CrossCode\Local Storage\
Linux ~/.config/CrossCode/Default/Local Storage/
MacOS ~/Library/Application Support/CrossCode/Default/Local Storage/

Savefile and Localstorage format

The format of the Save storage is a JSON:

Format overview:

{
  "slots": [
    {savestring_slot1},
    {savestring_slot2},
    ...,
    {savestring_slotX}
  ],
  "autoSlot": {savestring},
  "globals": {savestring},
  "lastSlot": {slot_number}
}
Element Description
"slots" Array (List) containing all saves, starting with Slot 1
"autoSlot" Containing the Autosave
"globals" Containing all global data
"lastSlot"

Example:

{
  "slots": [
    "[-!_0_!-]U2FsdGVkX1+K8a2HlAKS...5329sQ69bTU5quQ0UGjIt6DG45kxwJZD",
    "[-!_0_!-]U2FsdGVkX1/sl4dQyBgHx...jbIn4tmVHPt0ZCxi9ElniMHI13xGxQk",
    "[-!_0_!-]U2FsdGVkX19zOTWR9ynkq...HZczzbAOZZuyviB4nzTKAdqYcaBEbIU"
  ],
  "autoSlot": "[-!_0_!-]U2FsdGVkX19qIZAUL2kZ...Ox8t/0yfkRouUdgaCFWrMT8jup",
  "globals": "[-!_0_!-]U2FsdGVkX19YItQieykUU...xuFzHg4oeyhlJRR5/CRA/NBE8o",
  "lastSlot": 0
}

Savestring

A savestring containing the acctual save data. Every String starts with [-!_0_!-] and is base64 encoded. The decoded result is a AES-256 (CBC mode) encrypted JSON. The password that is used to encypt and decrypt the data is already known since May 2016.

The game is using CryptoJS to encrypt and decrypt the data.

There are multiple ways to decrypt a Savestring:

Method Info
Openssl Remove [-!_0_!-] from the String

Encrypt: openssl enc -e -base64 -A -aes-256-cbc -pass pass:"{password}"

Decrypt: openssl enc -d -base64 -A -aes-256-cbc -pass pass:"{password}"

CryptoJS Remove [-!_0_!-] from the String

Encrypt: CryptoJS.AES.encrypt({savejson},{password})

Decrypt: CryptoJS.AES.decrypt({savestring},{password})

Editor from Omegalink12 Online Editor (Sourcecode)
Editor from Streetclaw Download (savegameEdit.html)

Import and Export Savestrings

The Menu to Import and Export Savestrings can be opend by pressing F10. Imported Saves will be stored on the last savegame slot.

Decrypted Savestring (JSON)

Savegame

Element Description
"map" Current Map
"vars" Map, Game and Event Storage
"position"
"bgm" Background Music
"gui"
"version" Game version
"saveVersion" Savegame version
"timers" Timer data
"playtime" Full playtime in seconds
"stats" Game stats
"message" Last messages
"message" Last messages
"options" (empty)
"area" Area (Load- / Savescreen)
"floor" Floor (Load- / Savescreen)
"specialMap" Special Map (Load- / Savescreen)
"visitedAreas" Visited Areas
"landmarks" Reached Landmarks
"lories" Lore marker
"tradersFound" Trader found
"menuNewEntries" Tracks new menu entries
"logs" Game log
"drops" Botanic data
"player" Player data
"saveBlock" Save disabled
"forceCombatMode" Combat mode
"highscore"
"highscore-obs"
"permaTask" Current Main Task
"quests" Quests
"party" Party / Contact data
"commonEvents" Event data (Combat Art tutorial flags)

Global

Element Description
"feats"
"options" Game options