var SaveGameVersion = "12A"; var SaveChapter = ""; var SaveScreen = ""; var SaveMaxSlot = 9; // Opens the save menu for a specific chapter function SaveMenu(NextChapter, NextScreen) { SaveChapter = NextChapter; SaveScreen = NextScreen; SetScene("C999_Common", "GameSave"); } // Returns the save state summary function SaveStateGetSummary(SlotNumber) { // Fetch the data var SN = SlotNumber.toString(); var Summary = "@" + GetText("NoSaveOnSlot") + " " + SN; if (localStorage.getItem("SaveGameVersion" + SN)) if (localStorage.getItem("SaveGameVersion" + SN) == SaveGameVersion) { var SaveStatePlayerName = localStorage.getItem("Common_PlayerName" + SN); var SaveStateChapter = localStorage.getItem("CurrentChapter" + SN).substr(1, 3); var SaveStateDateTime = localStorage.getItem("SaveGameDateTime" + SN); while (SaveStateChapter.substr(0, 1) == "0") SaveStateChapter = SaveStateChapter.substr(1, 100); Summary = "@" + SaveStatePlayerName.substr(0, 10) + " - " + GetText("Chapter") + " " + SaveStateChapter + "|" + SaveStateDateTime; } // Returns the summary return Summary; } // Show some info on the slots to load or save function SaveStateSlotSummary() { // If the current stage is loaded if ((CurrentStage != null) && (CurrentText != null)) if (CurrentStage[1][StageInteractionText] == "@Slot 1") { // For each save slots, we load the summary var Slot = 1; while (Slot <= SaveMaxSlot) { CurrentStage[Slot][StageInteractionText] = SaveStateGetSummary(Slot); Slot++; } } } // Save the game state on a specific slot function SaveState(SlotNumber) { // Save the current state of the game and the transitional variables var SN = SlotNumber.toString(); localStorage.setItem("SaveGameVersion" + SN, SaveGameVersion); localStorage.setItem("SaveGameDateTime" + SN, GetFormatDate()); localStorage.setItem("CurrentChapter" + SN, SaveChapter); localStorage.setItem("CurrentScreen" + SN, SaveScreen); localStorage.setItem("Common_PlayerName" + SN, Common_PlayerName); localStorage.setItem("Common_PlayerOwner" + SN, Common_PlayerOwner); localStorage.setItem("Common_PlayerLover" + SN, Common_PlayerLover); localStorage.setItem("Common_PlayerCloth" + SN, Common_PlayerCloth); localStorage.setItem("PlayerInventory" + SN, JSON.stringify(PlayerInventory)); localStorage.setItem("PlayerLockedInventory" + SN, JSON.stringify(PlayerLockedInventory)); localStorage.setItem("PlayerSkill" + SN, JSON.stringify(PlayerSkill)); localStorage.setItem("Actor" + SN, JSON.stringify(Actor)); localStorage.setItem("GameLog" + SN, JSON.stringify(GameLog)); localStorage.setItem("CurrentTime" + SN, CurrentTime.toString()); // Reload the summaries CurrentStage[1][StageInteractionText] = "@Slot 1"; SaveStateSlotSummary(); } // Load the game state on a specific slot function LoadState(SlotNumber) { // If the save file is for the current version, we load var SN = SlotNumber.toString(); if (localStorage.getItem("SaveGameVersion" + SN)) if (localStorage.getItem("SaveGameVersion" + SN) == SaveGameVersion) { // Load the game state CurrentChapter = localStorage.getItem("CurrentChapter" + SN); CurrentScreen = localStorage.getItem("CurrentScreen" + SN); Common_PlayerName = localStorage.getItem("Common_PlayerName" + SN); Common_PlayerOwner = localStorage.getItem("Common_PlayerOwner" + SN); Common_PlayerLover = localStorage.getItem("Common_PlayerLover" + SN); PlayerInventory = JSON.parse(localStorage.getItem("PlayerInventory" + SN)); PlayerLockedInventory = JSON.parse(localStorage.getItem("PlayerLockedInventory" + SN)); Actor = JSON.parse(localStorage.getItem("Actor" + SN)); GameLog = JSON.parse(localStorage.getItem("GameLog" + SN)); PlayerSkill = JSON.parse(localStorage.getItem("PlayerSkill" + SN)); CurrentTime = parseFloat(localStorage.getItem("CurrentTime" + SN)); // Makes sure the owner and lover aren't null from previous saves if (Common_PlayerOwner == null) Common_PlayerOwner = ""; if (Common_PlayerLover == null) Common_PlayerLover = ""; // You can start with different clothes on chapter 12 if (CurrentChapter == "C012_AfterClass") { Common_PlayerCloth = localStorage.getItem("Common_PlayerCloth" + SN); if (Common_PlayerCloth == null) Common_PlayerCloth = "Clothed"; PlayerClothes(Common_PlayerCloth); } // Make sure the actor array is wide enough (to remove when save games will be reset) for (var A = 0; L < Actor.length; A++) if (Actor[L].length < 11) Actor[L] = [Actor[L][0], Actor[L][1], Actor[L][2], Actor[L][3], Actor[L][4], Actor[L][5], Actor[L][6], Actor[L][7], Actor[L][8], false, ""]; // Make sure the game log array is wide enough (to remove when save games will be reset) for (var L = 0; L < GameLog.length; L++) if (GameLog[L].length < 4) GameLog[L] = [GameLog[L][0], GameLog[L][1], GameLog[L][2], 0]; // Starts the game LoadRestrainStatus(); SetScene(CurrentChapter, CurrentScreen); } }