From a8a0d6a7a747d2601441d45c4ea0dcb711b042c1 Mon Sep 17 00:00:00 2001 From: "theo@manjaro" Date: Wed, 7 Jun 2023 17:09:59 +0200 Subject: [PATCH] Lighter save system --- main.lua | 22 +++++++++++++++++----- metadata.xml | 2 +- save.lua | 29 +++++++++++++++++++++++++++++ workshop/deadgodhelpericon.png | Bin 8428 -> 10334 bytes 4 files changed, 47 insertions(+), 6 deletions(-) diff --git a/main.lua b/main.lua index 0e2f9b7..399e859 100644 --- a/main.lua +++ b/main.lua @@ -1,12 +1,16 @@ local modname = "DeadGod Helper" local mod = RegisterMod(modname, 1) -local json = require("json") local math = require("math") mod.print = Isaac.ConsoleOutput mod.game = Game() local save = include("save"):new() if mod:HasData() then - save = json.decode(mod:LoadData()) + save:load(mod:LoadData()) + local c = 0 + for i,v in ipairs(save.seen) do + if v then c = c+1 end + end + mod.print(modname.." Loaded, "..c.." items seen\n") end mod.font = Font() @@ -30,7 +34,8 @@ function mod.registerTouched(id) end -- Save - mod:SaveData(json.encode(save)) + mod:RemoveData() + mod:SaveData(save:dump()) end -- Used to check if EID's description should be modified @@ -64,10 +69,10 @@ function mod:update() if player:GetCollectibleNum(data._deadgodlastid)>data._deadgodlastcount then -- Have it on me -- Then I just picked it up, yay mod.registerTouched(data._deadgodlastid) + mod.print("> "..tostring(data._deadgodlastid).."\n") data._deadgodlastid = 0 data._deadgodlastcount = 0 - end - end + end end end if item and item:IsCollectible() then data._deadgodlastid = item.ID @@ -88,6 +93,13 @@ function mod:PickupDrawCallback(pickupEntity, _) end end +function mod:preGameExit() + mod:RemoveData() + mod:SaveData(save:dump()) +end + +mod:AddCallback(ModCallbacks.MC_PRE_GAME_EXIT, mod.preGameExit) + mod:AddCallback(ModCallbacks.MC_POST_UPDATE, mod.update) mod:AddCallback(ModCallbacks.MC_POST_PICKUP_RENDER, mod.PickupDrawCallback) diff --git a/metadata.xml b/metadata.xml index 85a278f..56d8559 100644 --- a/metadata.xml +++ b/metadata.xml @@ -4,7 +4,7 @@ deadgod helper 2985754961 - 1.1 + 1.3 Private diff --git a/save.lua b/save.lua index caf45a1..c6ee6be 100644 --- a/save.lua +++ b/save.lua @@ -19,6 +19,35 @@ function savegen:new() self.seen[id] = true end + function save:dump() + -- Returns a string representation of the save + -- Bool to symbol + local f = function(x) return (x and "1") or "0" end + local result = f(self.settings.eid)..f(self.settings.visual)..f(self.settings.showonblind) + for i=1, save.settings.maxid do + result = result..f(save.seen[i]) + end + return result + end + + function save:load(text) + -- Change attributes based on the text + -- Symbol to bool + local f = function(x, i) + return x:sub(i,i)=="1" + end + if (#text>=3) then + -- First 3 are the settings + self.settings.eid = f(text,1) + self.settings.visual = f(text,2) + self.settings.showonblind = f(text,3) + end + local offset = 3 + for id=1, self.settings.maxid do + self.seen[id] = f(text,offset+id) + end + end + return save end diff --git a/workshop/deadgodhelpericon.png b/workshop/deadgodhelpericon.png index 45a6384f0fb6bcab2fe5cd77d99379e6b5a0fa49..3de606706d191244d23655062c680861d2a1ae0f 100644 GIT binary patch literal 10334 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%0DWxrD7e2%>$B}rRsymV-Pu!zEiQq}_sK{gZ0CUW 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 O0000