using System.IO; using System.Numerics; using Newtonsoft.Json; using Newtonsoft.Json.Linq; using UnityEngine; public class BazookaManager : MonoBehaviour { public static BazookaManager Instance; private bool firstLoadDone = false; public JObject saveFile = new(); void Awake() { if (Instance == null) { Instance = this; DontDestroyOnLoad(gameObject); if (!firstLoadDone) { firstLoadDone = true; Load(); } } else { Destroy(gameObject); } } void OnApplicationQuit() { Save(); } void OnApplicationPause(bool pause) { if (pause) { Save(); } } public void Load() { string path = Path.Join(Application.persistentDataPath, "BazookaManager.dat"); if (!File.Exists(path)) { File.Create(path).Dispose(); } else { try { var tempSaveFile = JObject.Parse(SensitiveInfo.DecryptRaw(File.ReadAllBytes(path), SensitiveInfo.BAZOOKA_MANAGER_KEY)); if (tempSaveFile != null) saveFile = tempSaveFile; } catch { Debug.LogWarning("Failed to load save file"); } } } public void Save() { #if UNITY_EDITOR return; #else string path = Path.Join(Application.persistentDataPath, "BazookaManager.dat"); var encoded = SensitiveInfo.EncryptRaw(saveFile.ToString(Formatting.None), SensitiveInfo.BAZOOKA_MANAGER_KEY); if (encoded == null) return; using var fileStream = new FileStream(path, FileMode.Create, FileAccess.Write, FileShare.None); fileStream.Write(encoded, 0, encoded.Length); fileStream.Flush(true); #endif } //Bird stuff public void SetBirdIcon(int value) { if (saveFile["bird"] == null) saveFile["bird"] = new JObject(); saveFile["bird"]["icon"] = value; } public void UnsetBirdIcon() { if (saveFile["bird"] == null) return; if (saveFile["bird"]["icon"] == null) return; (saveFile["bird"] as JObject)?.Remove("icon"); } public int GetBirdIcon() { if (saveFile["bird"] == null) return 1; if (saveFile["bird"]["icon"] == null) return 1; return int.Parse(saveFile["bird"]["icon"].ToString()); } public void SetBirdOverlay(int value) { if (saveFile["bird"] == null) saveFile["bird"] = new JObject(); saveFile["bird"]["overlay"] = value; } public void UnsetBirdOverlay() { if (saveFile["bird"] == null) return; if (saveFile["bird"]["overlay"] == null) return; (saveFile["bird"] as JObject)?.Remove("overlay"); } public int GetBirdOverlay() { if (saveFile["bird"] == null) return 0; if (saveFile["bird"]["overlay"] == null) return 0; return int.Parse(saveFile["bird"]["overlay"].ToString()); } public void SetBirdPastOverlay(int value) { if (saveFile["bird"] == null) saveFile["bird"] = new JObject(); saveFile["bird"]["pastOverlay"] = value; } public void UnsetBirdPastOverlay() { if (saveFile["bird"] == null) return; if (saveFile["bird"]["pastOverlay"] == null) return; (saveFile["bird"] as JObject)?.Remove("pastOverlay"); } public int GetBirdPastOverlay() { if (saveFile["bird"] == null) return 0; if (saveFile["bird"]["pastOverlay"] == null) return 0; return int.Parse(saveFile["bird"]["pastOverlay"].ToString()); } public void SetCustomBirdIconData(JObject value) { if (saveFile["bird"] == null) saveFile["bird"] = new JObject(); saveFile["bird"]["customIcon"] = value; } public void UnsetCustomBirdIconData() { if (saveFile["bird"] == null) return; if (saveFile["bird"]["customIcon"] == null) return; (saveFile["bird"] as JObject)?.Remove("customIcon"); } public JObject GetCustomBirdIconData() { if (saveFile["bird"] == null) return null; if (saveFile["bird"]["customIcon"] == null) return null; return saveFile["bird"]["customIcon"] as JObject; } //Settings stuff public void SetSettingFullScreen(bool value) { if (saveFile["settings"] == null) saveFile["settings"] = new JObject(); saveFile["settings"]["fullScreen"] = value; } public bool? GetSettingFullScreen() { if (saveFile["settings"] == null) return null; if (saveFile["settings"]["fullScreen"] == null) return null; return bool.Parse(saveFile["settings"]["fullScreen"].ToString()); } public void SetSettingShowFPS(bool value) { if (saveFile["settings"] == null) saveFile["settings"] = new JObject(); saveFile["settings"]["showFps"] = value; } public bool GetSettingShowFPS() { if (saveFile["settings"] == null) return false; if (saveFile["settings"]["showFps"] == null) return false; return bool.Parse(saveFile["settings"]["showFps"].ToString()); } public void SetSettingVsync(bool value) { if (saveFile["settings"] == null) saveFile["settings"] = new JObject(); saveFile["settings"]["vsync"] = value; } public bool? GetSettingVsync() { if (saveFile["settings"] == null) return null; if (saveFile["settings"]["vsync"] == null) return null; return bool.Parse(saveFile["settings"]["vsync"].ToString()); } public void SetSettingHideSocials(bool value) { if (saveFile["settings"] == null) saveFile["settings"] = new JObject(); saveFile["settings"]["hideSocials"] = value; } public bool? GetSettingHideSocials() { if (saveFile["settings"] == null) return null; if (saveFile["settings"]["hideSocials"] == null) return null; return bool.Parse(saveFile["settings"]["hideSocials"].ToString()); } public void SetSettingMusicVolume(float value) { if (saveFile["settings"] == null) saveFile["settings"] = new JObject(); saveFile["settings"]["musicVolume"] = value; } public float GetSettingMusicVolume() { if (saveFile["settings"] == null) return 1f; if (saveFile["settings"]["musicVolume"] == null) return 1f; return float.Parse(saveFile["settings"]["musicVolume"].ToString()); } public void SetSettingSFXVolume(float value) { if (saveFile["settings"] == null) saveFile["settings"] = new JObject(); saveFile["settings"]["sfxVolume"] = value; } public float GetSettingSFXVolume() { if (saveFile["settings"] == null) return 1f; if (saveFile["settings"]["sfxVolume"] == null) return 1f; return float.Parse(saveFile["settings"]["sfxVolume"].ToString()); } public void SetColorSettingBackground(JArray value) { if (saveFile["settings"] == null) saveFile["settings"] = new JObject(); if (saveFile["settings"]["colors"] == null) saveFile["settings"]["colors"] = new JObject(); saveFile["settings"]["colors"]["background"] = value; } public JArray GetColorSettingBackground() { if (saveFile["settings"] == null) return new JArray(58, 58, 58); if (saveFile["settings"]["colors"] == null) return new JArray(58, 58, 58); if (saveFile["settings"]["colors"]["background"] == null) return new JArray(58, 58, 58); return JArray.Parse(saveFile["settings"]["colors"]["background"].ToString()); } public void SetColorSettingIcon(JArray value) { if (saveFile["settings"] == null) saveFile["settings"] = new JObject(); if (saveFile["settings"]["colors"] == null) saveFile["settings"]["colors"] = new JObject(); saveFile["settings"]["colors"]["icon"] = value; } public JArray GetColorSettingIcon() { if (saveFile["settings"] == null) return new JArray(255, 255, 255); if (saveFile["settings"]["colors"] == null) return new JArray(255, 255, 255); if (saveFile["settings"]["colors"]["icon"] == null) return new JArray(255, 255, 255); return JArray.Parse(saveFile["settings"]["colors"]["icon"].ToString()); } public void UnsetColorSettingIcon() { if (saveFile["settings"] == null) return; if (saveFile["settings"]["colors"] == null) return; if (saveFile["settings"]["colors"]["icon"] == null) return; (saveFile["settings"]["colors"] as JObject)?.Remove("icon"); } public void SetColorSettingOverlay(JArray value) { if (saveFile["settings"] == null) saveFile["settings"] = new JObject(); if (saveFile["settings"]["colors"] == null) saveFile["settings"]["colors"] = new JObject(); saveFile["settings"]["colors"]["overlay"] = value; } public JArray GetColorSettingOverlay() { if (saveFile["settings"] == null) return new JArray(255, 255, 255); if (saveFile["settings"]["colors"] == null) return new JArray(255, 255, 255); if (saveFile["settings"]["colors"]["overlay"] == null) return new JArray(255, 255, 255); return JArray.Parse(saveFile["settings"]["colors"]["overlay"].ToString()); } public void UnsetColorSettingOverlay() { if (saveFile["settings"] == null) return; if (saveFile["settings"]["colors"] == null) return; if (saveFile["settings"]["colors"]["overlay"] == null) return; (saveFile["settings"]["colors"] as JObject)?.Remove("overlay"); } //Account stuff public void SetAccountSession(string value) { if (saveFile["account"] == null) saveFile["account"] = new JObject(); saveFile["account"]["session"] = value; } public string GetAccountSession() { if (saveFile["account"] == null) return null; if (saveFile["account"]["session"] == null) return null; return saveFile["account"]["session"].ToString(); } public void UnsetAccountSession() { if (saveFile["account"] == null) return; (saveFile["account"] as JObject)?.Remove("session"); } public void SetAccountName(string value) { if (saveFile["account"] == null) saveFile["account"] = new JObject(); saveFile["account"]["name"] = value; } public string GetAccountName() { if (saveFile["account"] == null) return null; if (saveFile["account"]["name"] == null) return null; return saveFile["account"]["name"].ToString(); } public void UnsetAccountName() { if (saveFile["account"] == null) return; (saveFile["account"] as JObject)?.Remove("name"); } public void SetAccountID(BigInteger value) { if (saveFile["account"] == null) saveFile["account"] = new JObject(); saveFile["account"]["id"] = value.ToString(); } public BigInteger? GetAccountID() { if (saveFile["account"] == null) return null; if (saveFile["account"]["id"] == null) return null; return BigInteger.Parse(saveFile["account"]["id"].ToString()); } public void UnsetAccountID() { if (saveFile["account"] == null) return; (saveFile["account"] as JObject)?.Remove("id"); } //Game store stuff public void SetGameStoreHighScore(BigInteger value) { if (saveFile["gameStore"] == null) saveFile["gameStore"] = new JObject(); saveFile["gameStore"]["highScore"] = value.ToString(); } public BigInteger GetGameStoreHighScore() { if (saveFile["gameStore"] == null) return 0; if (saveFile["gameStore"]["highScore"] == null) return 0; return BigInteger.Parse(saveFile["gameStore"]["highScore"].ToString()); } public void UnsetGameStoreHighScore() { if (saveFile["gameStore"] == null) return; (saveFile["gameStore"] as JObject)?.Remove("highScore"); } public void SetGameStoreTotalAttepts(BigInteger value) { if (saveFile["gameStore"] == null) saveFile["gameStore"] = new JObject(); saveFile["gameStore"]["totalAttempts"] = value.ToString(); } public BigInteger GetGameStoreTotalAttepts() { if (saveFile["gameStore"] == null) return 0; if (saveFile["gameStore"]["totalAttempts"] == null) return 0; return BigInteger.Parse(saveFile["gameStore"]["totalAttempts"].ToString()); } public void UnsetGameStoreTotalAttepts() { if (saveFile["gameStore"] == null) return; (saveFile["gameStore"] as JObject)?.Remove("totalAttempts"); } public void SetGameStoreTotalNormalBerries(BigInteger value) { if (saveFile["gameStore"] == null) saveFile["gameStore"] = new JObject(); saveFile["gameStore"]["totalNormalBerries"] = value.ToString(); } public BigInteger GetGameStoreTotalNormalBerries() { if (saveFile["gameStore"] == null) return 0; if (saveFile["gameStore"]["totalNormalBerries"] == null) return 0; return BigInteger.Parse(saveFile["gameStore"]["totalNormalBerries"].ToString()); } public void UnsetGameStoreTotalNormalBerries() { if (saveFile["gameStore"] == null) return; (saveFile["gameStore"] as JObject)?.Remove("totalNormalBerries"); } public void SetGameStoreTotalPoisonBerries(BigInteger value) { if (saveFile["gameStore"] == null) saveFile["gameStore"] = new JObject(); saveFile["gameStore"]["totalPoisonBerries"] = value.ToString(); } public BigInteger GetGameStoreTotalPoisonBerries() { if (saveFile["gameStore"] == null) return 0; if (saveFile["gameStore"]["totalPoisonBerries"] == null) return 0; return BigInteger.Parse(saveFile["gameStore"]["totalPoisonBerries"].ToString()); } public void UnsetGameStoreTotalPoisonBerries() { if (saveFile["gameStore"] == null) return; (saveFile["gameStore"] as JObject)?.Remove("totalPoisonBerries"); } public void SetGameStoreTotalSlowBerries(BigInteger value) { if (saveFile["gameStore"] == null) saveFile["gameStore"] = new JObject(); saveFile["gameStore"]["totalSlowBerries"] = value.ToString(); } public BigInteger GetGameStoreTotalSlowBerries() { if (saveFile["gameStore"] == null) return 0; if (saveFile["gameStore"]["totalSlowBerries"] == null) return 0; return BigInteger.Parse(saveFile["gameStore"]["totalSlowBerries"].ToString()); } public void UnsetGameStoreTotalSlowBerries() { if (saveFile["gameStore"] == null) return; (saveFile["gameStore"] as JObject)?.Remove("totalSlowBerries"); } public void SetGameStoreTotalUltraBerries(BigInteger value) { if (saveFile["gameStore"] == null) saveFile["gameStore"] = new JObject(); saveFile["gameStore"]["totalUltraBerries"] = value.ToString(); } public BigInteger GetGameStoreTotalUltraBerries() { if (saveFile["gameStore"] == null) return 0; if (saveFile["gameStore"]["totalUltraBerries"] == null) return 0; return BigInteger.Parse(saveFile["gameStore"]["totalUltraBerries"].ToString()); } public void UnsetGameStoreTotalUltraBerries() { if (saveFile["gameStore"] == null) return; (saveFile["gameStore"] as JObject)?.Remove("totalUltraBerries"); } public void SetGameStoreTotalSpeedyBerries(BigInteger value) { if (saveFile["gameStore"] == null) saveFile["gameStore"] = new JObject(); saveFile["gameStore"]["totalSpeedyBerries"] = value.ToString(); } public BigInteger GetGameStoreTotalSpeedyBerries() { if (saveFile["gameStore"] == null) return 0; if (saveFile["gameStore"]["totalSpeedyBerries"] == null) return 0; return BigInteger.Parse(saveFile["gameStore"]["totalSpeedyBerries"].ToString()); } public void UnsetGameStoreTotalSpeedyBerries() { if (saveFile["gameStore"] == null) return; (saveFile["gameStore"] as JObject)?.Remove("totalSpeedyBerries"); } public void SetGameStoreTotalCoinBerries(BigInteger value) { if (saveFile["gameStore"] == null) saveFile["gameStore"] = new JObject(); saveFile["gameStore"]["totalCoinBerries"] = value.ToString(); } public BigInteger GetGameStoreTotalCoinBerries() { if (saveFile["gameStore"] == null) return 0; if (saveFile["gameStore"]["totalCoinBerries"] == null) return 0; return BigInteger.Parse(saveFile["gameStore"]["totalCoinBerries"].ToString()); } public void UnsetGameStoreTotalCoinBerries() { if (saveFile["gameStore"] == null) return; (saveFile["gameStore"] as JObject)?.Remove("totalCoinBerries"); } }