Major refactor part 1.
This commit is contained in:
@@ -2,7 +2,7 @@
|
||||
|
||||
const string SAVE_FILE_PATH = "save.dat";
|
||||
const string SAVE_ENCRYPTION_KEY = "draugnorak_save_v1";
|
||||
const int SAVE_VERSION = 1;
|
||||
const int SAVE_VERSION = 2;
|
||||
string last_save_error = "";
|
||||
|
||||
bool has_save_game() {
|
||||
@@ -183,66 +183,13 @@ void reset_game_state() {
|
||||
incense_burning = false;
|
||||
blessing_speed_active = false;
|
||||
|
||||
inv_stones = 0;
|
||||
inv_sticks = 0;
|
||||
inv_vines = 0;
|
||||
inv_reeds = 0;
|
||||
inv_logs = 0;
|
||||
inv_clay = 0;
|
||||
inv_small_game = 0;
|
||||
inv_small_game_types.resize(0);
|
||||
inv_meat = 0;
|
||||
inv_skins = 0;
|
||||
inv_feathers = 0;
|
||||
inv_down = 0;
|
||||
inv_incense = 0;
|
||||
inv_spears = 0;
|
||||
inv_snares = 0;
|
||||
inv_axes = 0;
|
||||
inv_knives = 0;
|
||||
inv_fishing_poles = 0;
|
||||
inv_slings = 0;
|
||||
inv_ropes = 0;
|
||||
inv_reed_baskets = 0;
|
||||
inv_clay_pots = 0;
|
||||
inv_skin_hats = 0;
|
||||
inv_skin_gloves = 0;
|
||||
inv_skin_pants = 0;
|
||||
inv_skin_tunics = 0;
|
||||
inv_moccasins = 0;
|
||||
inv_skin_pouches = 0;
|
||||
storage_stones = 0;
|
||||
storage_sticks = 0;
|
||||
storage_vines = 0;
|
||||
storage_reeds = 0;
|
||||
storage_logs = 0;
|
||||
storage_clay = 0;
|
||||
storage_small_game = 0;
|
||||
storage_small_game_types.resize(0);
|
||||
storage_meat = 0;
|
||||
storage_skins = 0;
|
||||
storage_feathers = 0;
|
||||
storage_down = 0;
|
||||
storage_incense = 0;
|
||||
storage_spears = 0;
|
||||
storage_snares = 0;
|
||||
storage_axes = 0;
|
||||
storage_knives = 0;
|
||||
storage_fishing_poles = 0;
|
||||
storage_slings = 0;
|
||||
storage_ropes = 0;
|
||||
storage_reed_baskets = 0;
|
||||
storage_clay_pots = 0;
|
||||
storage_skin_hats = 0;
|
||||
storage_skin_gloves = 0;
|
||||
storage_skin_pants = 0;
|
||||
storage_skin_tunics = 0;
|
||||
storage_moccasins = 0;
|
||||
storage_skin_pouches = 0;
|
||||
// Reset inventory using the registry system
|
||||
reset_inventory();
|
||||
|
||||
spear_equipped = false;
|
||||
axe_equipped = false;
|
||||
sling_equipped = false;
|
||||
bow_equipped = false;
|
||||
equipped_head = EQUIP_NONE;
|
||||
equipped_torso = EQUIP_NONE;
|
||||
equipped_arms = EQUIP_NONE;
|
||||
@@ -377,192 +324,32 @@ string[] get_string_list_or_split(dictionary@ data, const string&in key) {
|
||||
return result;
|
||||
}
|
||||
|
||||
int get_byte_at(const string&in data, int index) {
|
||||
string single = data.substr(index, 1);
|
||||
return character_to_ascii(single);
|
||||
}
|
||||
|
||||
bool find_raw_key(const string&in rawData, const string&in key, int &out pos_after_key) {
|
||||
int key_len = key.length();
|
||||
if (key_len <= 0 || key_len > 65535) return false;
|
||||
int low = key_len & 0xFF;
|
||||
int high = (key_len >> 8) & 0xFF;
|
||||
int limit = rawData.length() - key_len - 2;
|
||||
for (int i = 0; i <= limit; i++) {
|
||||
if (get_byte_at(rawData, i) != low) continue;
|
||||
if (get_byte_at(rawData, i + 1) != high) continue;
|
||||
if (rawData.substr(i + 2, key_len) == key) {
|
||||
pos_after_key = i + 2 + key_len;
|
||||
return true;
|
||||
}
|
||||
// Serialize inventory array to comma-separated string
|
||||
string serialize_inventory_array(const int[]@ arr) {
|
||||
if (@arr == null || arr.length() == 0) return "";
|
||||
string result = "" + arr[0];
|
||||
for (uint i = 1; i < arr.length(); i++) {
|
||||
result += "," + arr[i];
|
||||
}
|
||||
return false;
|
||||
return result;
|
||||
}
|
||||
|
||||
bool get_raw_number(const string&in rawData, const string&in key, int &out value) {
|
||||
int pos;
|
||||
if (!find_raw_key(rawData, key, pos)) return false;
|
||||
if (pos >= rawData.length()) return false;
|
||||
int type = get_byte_at(rawData, pos);
|
||||
if (type != 2) return false;
|
||||
if (pos + 1 + 8 > rawData.length()) return false;
|
||||
double result = 0;
|
||||
double multiplier = 1;
|
||||
for (int i = 0; i < 8; i++) {
|
||||
result += get_byte_at(rawData, pos + 1 + i) * multiplier;
|
||||
multiplier *= 256;
|
||||
// Deserialize comma-separated string to inventory array
|
||||
void deserialize_inventory_array(const string&in data, int[]@ arr, int expected_size) {
|
||||
arr.resize(expected_size);
|
||||
for (int i = 0; i < expected_size; i++) {
|
||||
arr[i] = 0;
|
||||
}
|
||||
value = int(result);
|
||||
return true;
|
||||
}
|
||||
if (data.length() == 0) return;
|
||||
|
||||
bool get_raw_bool(const string&in rawData, const string&in key, bool &out value) {
|
||||
int pos;
|
||||
if (!find_raw_key(rawData, key, pos)) return false;
|
||||
if (pos >= rawData.length()) return false;
|
||||
int type = get_byte_at(rawData, pos);
|
||||
if (type != 1) return false;
|
||||
if (pos + 1 >= rawData.length()) return false;
|
||||
value = (get_byte_at(rawData, pos + 1) != 0);
|
||||
return true;
|
||||
}
|
||||
|
||||
bool load_game_state_from_raw(const string&in rawData) {
|
||||
reset_game_state();
|
||||
|
||||
int value;
|
||||
bool bool_value;
|
||||
|
||||
if (!get_raw_number(rawData, "player_x", value)) return false;
|
||||
x = value;
|
||||
if (!get_raw_number(rawData, "player_health", value)) return false;
|
||||
player_health = value;
|
||||
if (!get_raw_number(rawData, "time_current_day", value)) return false;
|
||||
current_day = value;
|
||||
|
||||
if (get_raw_number(rawData, "player_y", value)) y = value;
|
||||
if (get_raw_number(rawData, "player_facing", value)) facing = value;
|
||||
if (get_raw_number(rawData, "player_base_health", value)) base_max_health = value;
|
||||
if (get_raw_number(rawData, "player_max_health", value)) max_health = value;
|
||||
if (get_raw_number(rawData, "player_favor", value)) favor = value;
|
||||
if (get_raw_number(rawData, "player_last_adventure_day", value)) last_adventure_day = value;
|
||||
if (get_raw_number(rawData, "incense_hours_remaining", value)) incense_hours_remaining = value;
|
||||
if (get_raw_bool(rawData, "incense_burning", bool_value)) incense_burning = bool_value;
|
||||
if (get_raw_number(rawData, "time_current_hour", value)) current_hour = value;
|
||||
if (get_raw_number(rawData, "world_map_size", value)) MAP_SIZE = value;
|
||||
if (get_raw_number(rawData, "world_expanded_area_start", value)) expanded_area_start = value;
|
||||
if (get_raw_number(rawData, "world_expanded_area_end", value)) expanded_area_end = value;
|
||||
if (get_raw_number(rawData, "world_barricade_health", value)) barricade_health = value;
|
||||
if (get_raw_number(rawData, "world_residents_count", value)) residents_count = value;
|
||||
|
||||
if (get_raw_bool(rawData, "world_barricade_initialized", bool_value)) barricade_initialized = bool_value;
|
||||
if (get_raw_bool(rawData, "time_sun_setting_warned", bool_value)) sun_setting_warned = bool_value;
|
||||
if (get_raw_bool(rawData, "time_sunrise_warned", bool_value)) sunrise_warned = bool_value;
|
||||
if (get_raw_bool(rawData, "time_area_expanded_today", bool_value)) area_expanded_today = bool_value;
|
||||
if (get_raw_bool(rawData, "time_invasion_active", bool_value)) invasion_active = bool_value;
|
||||
if (get_raw_bool(rawData, "time_invasion_triggered_today", bool_value)) invasion_triggered_today = bool_value;
|
||||
if (get_raw_bool(rawData, "time_invasion_roll_done_today", bool_value)) invasion_roll_done_today = bool_value;
|
||||
if (get_raw_bool(rawData, "quest_roll_done_today", bool_value)) quest_roll_done_today = bool_value;
|
||||
|
||||
if (get_raw_number(rawData, "time_invasion_start_hour", value)) invasion_start_hour = value;
|
||||
if (get_raw_number(rawData, "time_invasion_chance", value)) invasion_chance = value;
|
||||
if (get_raw_number(rawData, "time_invasion_scheduled_hour", value)) invasion_scheduled_hour = value;
|
||||
|
||||
if (get_raw_number(rawData, "inventory_stones", value)) inv_stones = value;
|
||||
if (get_raw_number(rawData, "inventory_sticks", value)) inv_sticks = value;
|
||||
if (get_raw_number(rawData, "inventory_vines", value)) inv_vines = value;
|
||||
if (get_raw_number(rawData, "inventory_reeds", value)) inv_reeds = value;
|
||||
if (get_raw_number(rawData, "inventory_logs", value)) inv_logs = value;
|
||||
if (get_raw_number(rawData, "inventory_clay", value)) inv_clay = value;
|
||||
if (get_raw_number(rawData, "inventory_small_game", value)) inv_small_game = value;
|
||||
if (get_raw_number(rawData, "inventory_meat", value)) inv_meat = value;
|
||||
if (get_raw_number(rawData, "inventory_skins", value)) inv_skins = value;
|
||||
if (get_raw_number(rawData, "inventory_feathers", value)) inv_feathers = value;
|
||||
if (get_raw_number(rawData, "inventory_down", value)) inv_down = value;
|
||||
if (get_raw_number(rawData, "inventory_incense", value)) inv_incense = value;
|
||||
if (get_raw_number(rawData, "inventory_spears", value)) inv_spears = value;
|
||||
if (get_raw_number(rawData, "inventory_snares", value)) inv_snares = value;
|
||||
if (get_raw_number(rawData, "inventory_axes", value)) inv_axes = value;
|
||||
if (get_raw_number(rawData, "inventory_knives", value)) inv_knives = value;
|
||||
if (get_raw_number(rawData, "inventory_fishing_poles", value)) inv_fishing_poles = value;
|
||||
if (get_raw_number(rawData, "inventory_slings", value)) inv_slings = value;
|
||||
if (get_raw_number(rawData, "inventory_ropes", value)) inv_ropes = value;
|
||||
if (get_raw_number(rawData, "inventory_reed_baskets", value)) inv_reed_baskets = value;
|
||||
if (get_raw_number(rawData, "inventory_clay_pots", value)) inv_clay_pots = value;
|
||||
if (get_raw_number(rawData, "inventory_skin_hats", value)) inv_skin_hats = value;
|
||||
if (get_raw_number(rawData, "inventory_skin_gloves", value)) inv_skin_gloves = value;
|
||||
if (get_raw_number(rawData, "inventory_skin_pants", value)) inv_skin_pants = value;
|
||||
if (get_raw_number(rawData, "inventory_skin_tunics", value)) inv_skin_tunics = value;
|
||||
if (get_raw_number(rawData, "inventory_moccasins", value)) inv_moccasins = value;
|
||||
if (get_raw_number(rawData, "inventory_skin_pouches", value)) inv_skin_pouches = value;
|
||||
if (get_raw_number(rawData, "inventory_backpacks", value)) inv_backpacks = value;
|
||||
|
||||
if (get_raw_number(rawData, "storage_stones", value)) storage_stones = value;
|
||||
if (get_raw_number(rawData, "storage_sticks", value)) storage_sticks = value;
|
||||
if (get_raw_number(rawData, "storage_vines", value)) storage_vines = value;
|
||||
if (get_raw_number(rawData, "storage_reeds", value)) storage_reeds = value;
|
||||
if (get_raw_number(rawData, "storage_logs", value)) storage_logs = value;
|
||||
if (get_raw_number(rawData, "storage_clay", value)) storage_clay = value;
|
||||
if (get_raw_number(rawData, "storage_small_game", value)) storage_small_game = value;
|
||||
if (get_raw_number(rawData, "storage_meat", value)) storage_meat = value;
|
||||
if (get_raw_number(rawData, "storage_skins", value)) storage_skins = value;
|
||||
if (get_raw_number(rawData, "storage_feathers", value)) storage_feathers = value;
|
||||
if (get_raw_number(rawData, "storage_down", value)) storage_down = value;
|
||||
if (get_raw_number(rawData, "storage_incense", value)) storage_incense = value;
|
||||
if (get_raw_number(rawData, "storage_spears", value)) storage_spears = value;
|
||||
if (get_raw_number(rawData, "storage_snares", value)) storage_snares = value;
|
||||
if (get_raw_number(rawData, "storage_axes", value)) storage_axes = value;
|
||||
if (get_raw_number(rawData, "storage_knives", value)) storage_knives = value;
|
||||
if (get_raw_number(rawData, "storage_fishing_poles", value)) storage_fishing_poles = value;
|
||||
if (get_raw_number(rawData, "storage_slings", value)) storage_slings = value;
|
||||
if (get_raw_number(rawData, "storage_ropes", value)) storage_ropes = value;
|
||||
if (get_raw_number(rawData, "storage_reed_baskets", value)) storage_reed_baskets = value;
|
||||
if (get_raw_number(rawData, "storage_clay_pots", value)) storage_clay_pots = value;
|
||||
if (get_raw_number(rawData, "storage_skin_hats", value)) storage_skin_hats = value;
|
||||
if (get_raw_number(rawData, "storage_skin_gloves", value)) storage_skin_gloves = value;
|
||||
if (get_raw_number(rawData, "storage_skin_pants", value)) storage_skin_pants = value;
|
||||
if (get_raw_number(rawData, "storage_skin_tunics", value)) storage_skin_tunics = value;
|
||||
if (get_raw_number(rawData, "storage_moccasins", value)) storage_moccasins = value;
|
||||
if (get_raw_number(rawData, "storage_skin_pouches", value)) storage_skin_pouches = value;
|
||||
if (get_raw_number(rawData, "storage_backpacks", value)) storage_backpacks = value;
|
||||
|
||||
if (get_raw_bool(rawData, "equipment_spear_equipped", bool_value)) spear_equipped = bool_value;
|
||||
if (get_raw_bool(rawData, "equipment_axe_equipped", bool_value)) axe_equipped = bool_value;
|
||||
if (get_raw_bool(rawData, "equipment_sling_equipped", bool_value)) sling_equipped = bool_value;
|
||||
if (get_raw_number(rawData, "equipment_head", value)) equipped_head = value;
|
||||
if (get_raw_number(rawData, "equipment_torso", value)) equipped_torso = value;
|
||||
if (get_raw_number(rawData, "equipment_hands", value)) equipped_hands = value;
|
||||
if (get_raw_number(rawData, "equipment_legs", value)) equipped_legs = value;
|
||||
if (get_raw_number(rawData, "equipment_feet", value)) equipped_feet = value;
|
||||
if (get_raw_number(rawData, "equipment_arms", value)) equipped_arms = value;
|
||||
|
||||
if (!equipment_available(equipped_head)) equipped_head = EQUIP_NONE;
|
||||
if (!equipment_available(equipped_torso)) equipped_torso = EQUIP_NONE;
|
||||
if (!equipment_available(equipped_hands)) equipped_hands = EQUIP_NONE;
|
||||
if (!equipment_available(equipped_legs)) equipped_legs = EQUIP_NONE;
|
||||
if (!equipment_available(equipped_feet)) equipped_feet = EQUIP_NONE;
|
||||
if (!equipment_available(equipped_arms)) equipped_arms = EQUIP_NONE;
|
||||
if (incense_hours_remaining > 0) incense_burning = true;
|
||||
|
||||
if (inv_small_game_types.length() == 0 && inv_small_game > 0) {
|
||||
for (int i = 0; i < inv_small_game; i++) {
|
||||
inv_small_game_types.insert_last("small game");
|
||||
}
|
||||
string[]@ parts = data.split(",");
|
||||
uint count = parts.length();
|
||||
if (count > uint(expected_size)) count = uint(expected_size);
|
||||
for (uint i = 0; i < count; i++) {
|
||||
arr[i] = parse_int(parts[i]);
|
||||
}
|
||||
|
||||
if (!barricade_initialized) {
|
||||
init_barricade();
|
||||
} else {
|
||||
if (barricade_health < 0) barricade_health = 0;
|
||||
if (barricade_health > BARRICADE_MAX_HEALTH) barricade_health = BARRICADE_MAX_HEALTH;
|
||||
}
|
||||
spawn_trees(5, 19);
|
||||
|
||||
is_daytime = (current_hour >= 6 && current_hour < 19);
|
||||
hour_timer.restart();
|
||||
update_max_health_from_equipment();
|
||||
return true;
|
||||
}
|
||||
|
||||
bool save_game_state() {
|
||||
dictionary saveData;
|
||||
|
||||
@@ -578,69 +365,16 @@ bool save_game_state() {
|
||||
saveData.set("incense_hours_remaining", incense_hours_remaining);
|
||||
saveData.set("incense_burning", incense_burning);
|
||||
|
||||
saveData.set("inventory_stones", inv_stones);
|
||||
saveData.set("inventory_sticks", inv_sticks);
|
||||
saveData.set("inventory_vines", inv_vines);
|
||||
saveData.set("inventory_reeds", inv_reeds);
|
||||
saveData.set("inventory_logs", inv_logs);
|
||||
saveData.set("inventory_clay", inv_clay);
|
||||
saveData.set("inventory_small_game", inv_small_game);
|
||||
saveData.set("inventory_meat", inv_meat);
|
||||
saveData.set("inventory_skins", inv_skins);
|
||||
saveData.set("inventory_feathers", inv_feathers);
|
||||
saveData.set("inventory_down", inv_down);
|
||||
saveData.set("inventory_incense", inv_incense);
|
||||
saveData.set("inventory_spears", inv_spears);
|
||||
saveData.set("inventory_snares", inv_snares);
|
||||
saveData.set("inventory_axes", inv_axes);
|
||||
saveData.set("inventory_knives", inv_knives);
|
||||
saveData.set("inventory_fishing_poles", inv_fishing_poles);
|
||||
saveData.set("inventory_slings", inv_slings);
|
||||
saveData.set("inventory_ropes", inv_ropes);
|
||||
saveData.set("inventory_reed_baskets", inv_reed_baskets);
|
||||
saveData.set("inventory_clay_pots", inv_clay_pots);
|
||||
saveData.set("inventory_skin_hats", inv_skin_hats);
|
||||
saveData.set("inventory_skin_gloves", inv_skin_gloves);
|
||||
saveData.set("inventory_skin_pants", inv_skin_pants);
|
||||
saveData.set("inventory_skin_tunics", inv_skin_tunics);
|
||||
saveData.set("inventory_moccasins", inv_moccasins);
|
||||
saveData.set("inventory_skin_pouches", inv_skin_pouches);
|
||||
saveData.set("inventory_backpacks", inv_backpacks);
|
||||
saveData.set("inventory_small_game_types", join_string_array(inv_small_game_types));
|
||||
|
||||
saveData.set("storage_stones", storage_stones);
|
||||
saveData.set("storage_sticks", storage_sticks);
|
||||
saveData.set("storage_vines", storage_vines);
|
||||
saveData.set("storage_reeds", storage_reeds);
|
||||
saveData.set("storage_logs", storage_logs);
|
||||
saveData.set("storage_clay", storage_clay);
|
||||
saveData.set("storage_small_game", storage_small_game);
|
||||
saveData.set("storage_meat", storage_meat);
|
||||
saveData.set("storage_skins", storage_skins);
|
||||
saveData.set("storage_feathers", storage_feathers);
|
||||
saveData.set("storage_down", storage_down);
|
||||
saveData.set("storage_incense", storage_incense);
|
||||
saveData.set("storage_spears", storage_spears);
|
||||
saveData.set("storage_snares", storage_snares);
|
||||
saveData.set("storage_axes", storage_axes);
|
||||
saveData.set("storage_knives", storage_knives);
|
||||
saveData.set("storage_fishing_poles", storage_fishing_poles);
|
||||
saveData.set("storage_slings", storage_slings);
|
||||
saveData.set("storage_ropes", storage_ropes);
|
||||
saveData.set("storage_reed_baskets", storage_reed_baskets);
|
||||
saveData.set("storage_clay_pots", storage_clay_pots);
|
||||
saveData.set("storage_skin_hats", storage_skin_hats);
|
||||
saveData.set("storage_skin_gloves", storage_skin_gloves);
|
||||
saveData.set("storage_skin_pants", storage_skin_pants);
|
||||
saveData.set("storage_skin_tunics", storage_skin_tunics);
|
||||
saveData.set("storage_moccasins", storage_moccasins);
|
||||
saveData.set("storage_skin_pouches", storage_skin_pouches);
|
||||
saveData.set("storage_backpacks", storage_backpacks);
|
||||
// Save inventory arrays using new compact format
|
||||
saveData.set("personal_inventory", serialize_inventory_array(personal_inventory));
|
||||
saveData.set("storage_inventory", serialize_inventory_array(storage_inventory));
|
||||
saveData.set("personal_small_game_types", join_string_array(personal_small_game_types));
|
||||
saveData.set("storage_small_game_types", join_string_array(storage_small_game_types));
|
||||
|
||||
saveData.set("equipment_spear_equipped", spear_equipped);
|
||||
saveData.set("equipment_axe_equipped", axe_equipped);
|
||||
saveData.set("equipment_sling_equipped", sling_equipped);
|
||||
saveData.set("equipment_bow_equipped", bow_equipped);
|
||||
saveData.set("equipment_head", equipped_head);
|
||||
saveData.set("equipment_torso", equipped_torso);
|
||||
saveData.set("equipment_arms", equipped_arms);
|
||||
@@ -819,9 +553,6 @@ bool load_game_state() {
|
||||
saveData = deserialize(encryptedData);
|
||||
}
|
||||
if (@saveData == null || !dictionary_has_keys(saveData)) {
|
||||
if (load_game_state_from_raw(rawData)) {
|
||||
return true;
|
||||
}
|
||||
last_save_error = "Save file is corrupted or unreadable.";
|
||||
return false;
|
||||
}
|
||||
@@ -875,94 +606,53 @@ bool load_game_state() {
|
||||
if (y < 0) y = 0;
|
||||
if (facing != 0 && facing != 1) facing = 1;
|
||||
|
||||
inv_stones = int(get_number(saveData, "inventory_stones", 0));
|
||||
inv_sticks = int(get_number(saveData, "inventory_sticks", 0));
|
||||
inv_vines = int(get_number(saveData, "inventory_vines", 0));
|
||||
inv_reeds = int(get_number(saveData, "inventory_reeds", 0));
|
||||
inv_logs = int(get_number(saveData, "inventory_logs", 0));
|
||||
inv_clay = int(get_number(saveData, "inventory_clay", 0));
|
||||
inv_small_game = int(get_number(saveData, "inventory_small_game", 0));
|
||||
inv_meat = int(get_number(saveData, "inventory_meat", 0));
|
||||
inv_skins = int(get_number(saveData, "inventory_skins", 0));
|
||||
inv_feathers = int(get_number(saveData, "inventory_feathers", 0));
|
||||
inv_down = int(get_number(saveData, "inventory_down", 0));
|
||||
inv_incense = int(get_number(saveData, "inventory_incense", 0));
|
||||
inv_spears = int(get_number(saveData, "inventory_spears", 0));
|
||||
inv_snares = int(get_number(saveData, "inventory_snares", 0));
|
||||
inv_axes = int(get_number(saveData, "inventory_axes", 0));
|
||||
inv_knives = int(get_number(saveData, "inventory_knives", 0));
|
||||
inv_fishing_poles = int(get_number(saveData, "inventory_fishing_poles", 0));
|
||||
inv_slings = int(get_number(saveData, "inventory_slings", 0));
|
||||
inv_ropes = int(get_number(saveData, "inventory_ropes", 0));
|
||||
inv_reed_baskets = int(get_number(saveData, "inventory_reed_baskets", 0));
|
||||
inv_clay_pots = int(get_number(saveData, "inventory_clay_pots", 0));
|
||||
inv_skin_hats = int(get_number(saveData, "inventory_skin_hats", 0));
|
||||
inv_skin_gloves = int(get_number(saveData, "inventory_skin_gloves", 0));
|
||||
inv_skin_pants = int(get_number(saveData, "inventory_skin_pants", 0));
|
||||
inv_skin_tunics = int(get_number(saveData, "inventory_skin_tunics", 0));
|
||||
inv_moccasins = int(get_number(saveData, "inventory_moccasins", 0));
|
||||
inv_skin_pouches = int(get_number(saveData, "inventory_skin_pouches", 0));
|
||||
inv_backpacks = int(get_number(saveData, "inventory_backpacks", 0));
|
||||
|
||||
string[] loadedSmallGameTypes = get_string_list_or_split(saveData, "inventory_small_game_types");
|
||||
inv_small_game_types.resize(0);
|
||||
for (uint i = 0; i < loadedSmallGameTypes.length(); i++) {
|
||||
inv_small_game_types.insert_last(loadedSmallGameTypes[i]);
|
||||
// Load inventory using new array format
|
||||
string personal_inv_str;
|
||||
if (saveData.get("personal_inventory", personal_inv_str)) {
|
||||
deserialize_inventory_array(personal_inv_str, personal_inventory, ITEM_COUNT);
|
||||
}
|
||||
|
||||
if (inv_small_game_types.length() == 0 && inv_small_game > 0) {
|
||||
for (int i = 0; i < inv_small_game; i++) {
|
||||
inv_small_game_types.insert_last("small game");
|
||||
string storage_inv_str;
|
||||
if (saveData.get("storage_inventory", storage_inv_str)) {
|
||||
deserialize_inventory_array(storage_inv_str, storage_inventory, ITEM_COUNT);
|
||||
}
|
||||
|
||||
// Load small game types
|
||||
string[] loadedSmallGameTypes = get_string_list_or_split(saveData, "personal_small_game_types");
|
||||
personal_small_game_types.resize(0);
|
||||
for (uint i = 0; i < loadedSmallGameTypes.length(); i++) {
|
||||
personal_small_game_types.insert_last(loadedSmallGameTypes[i]);
|
||||
}
|
||||
|
||||
// Sync small game count with types array
|
||||
int small_game_count = get_personal_count(ITEM_SMALL_GAME);
|
||||
if (personal_small_game_types.length() == 0 && small_game_count > 0) {
|
||||
for (int i = 0; i < small_game_count; i++) {
|
||||
personal_small_game_types.insert_last("small game");
|
||||
}
|
||||
} else {
|
||||
inv_small_game = inv_small_game_types.length();
|
||||
set_personal_count(ITEM_SMALL_GAME, int(personal_small_game_types.length()));
|
||||
}
|
||||
|
||||
storage_stones = int(get_number(saveData, "storage_stones", 0));
|
||||
storage_sticks = int(get_number(saveData, "storage_sticks", 0));
|
||||
storage_vines = int(get_number(saveData, "storage_vines", 0));
|
||||
storage_reeds = int(get_number(saveData, "storage_reeds", 0));
|
||||
storage_logs = int(get_number(saveData, "storage_logs", 0));
|
||||
storage_clay = int(get_number(saveData, "storage_clay", 0));
|
||||
storage_small_game = int(get_number(saveData, "storage_small_game", 0));
|
||||
storage_meat = int(get_number(saveData, "storage_meat", 0));
|
||||
storage_skins = int(get_number(saveData, "storage_skins", 0));
|
||||
storage_feathers = int(get_number(saveData, "storage_feathers", 0));
|
||||
storage_down = int(get_number(saveData, "storage_down", 0));
|
||||
storage_incense = int(get_number(saveData, "storage_incense", 0));
|
||||
storage_spears = int(get_number(saveData, "storage_spears", 0));
|
||||
storage_snares = int(get_number(saveData, "storage_snares", 0));
|
||||
storage_axes = int(get_number(saveData, "storage_axes", 0));
|
||||
storage_knives = int(get_number(saveData, "storage_knives", 0));
|
||||
storage_fishing_poles = int(get_number(saveData, "storage_fishing_poles", 0));
|
||||
storage_slings = int(get_number(saveData, "storage_slings", 0));
|
||||
storage_ropes = int(get_number(saveData, "storage_ropes", 0));
|
||||
storage_reed_baskets = int(get_number(saveData, "storage_reed_baskets", 0));
|
||||
storage_clay_pots = int(get_number(saveData, "storage_clay_pots", 0));
|
||||
storage_skin_hats = int(get_number(saveData, "storage_skin_hats", 0));
|
||||
storage_skin_gloves = int(get_number(saveData, "storage_skin_gloves", 0));
|
||||
storage_skin_pants = int(get_number(saveData, "storage_skin_pants", 0));
|
||||
storage_skin_tunics = int(get_number(saveData, "storage_skin_tunics", 0));
|
||||
storage_moccasins = int(get_number(saveData, "storage_moccasins", 0));
|
||||
storage_skin_pouches = int(get_number(saveData, "storage_skin_pouches", 0));
|
||||
storage_backpacks = int(get_number(saveData, "storage_backpacks", 0));
|
||||
|
||||
string[] loadedStorageSmallGameTypes = get_string_list_or_split(saveData, "storage_small_game_types");
|
||||
storage_small_game_types.resize(0);
|
||||
for (uint i = 0; i < loadedStorageSmallGameTypes.length(); i++) {
|
||||
storage_small_game_types.insert_last(loadedStorageSmallGameTypes[i]);
|
||||
}
|
||||
if (storage_small_game_types.length() == 0 && storage_small_game > 0) {
|
||||
for (int i = 0; i < storage_small_game; i++) {
|
||||
|
||||
int storage_small_game_count = get_storage_count(ITEM_SMALL_GAME);
|
||||
if (storage_small_game_types.length() == 0 && storage_small_game_count > 0) {
|
||||
for (int i = 0; i < storage_small_game_count; i++) {
|
||||
storage_small_game_types.insert_last("small game");
|
||||
}
|
||||
} else {
|
||||
storage_small_game = storage_small_game_types.length();
|
||||
set_storage_count(ITEM_SMALL_GAME, int(storage_small_game_types.length()));
|
||||
}
|
||||
|
||||
spear_equipped = get_bool(saveData, "equipment_spear_equipped", false);
|
||||
axe_equipped = get_bool(saveData, "equipment_axe_equipped", false);
|
||||
sling_equipped = get_bool(saveData, "equipment_sling_equipped", false);
|
||||
bow_equipped = get_bool(saveData, "equipment_bow_equipped", false);
|
||||
equipped_head = int(get_number(saveData, "equipment_head", EQUIP_NONE));
|
||||
equipped_torso = int(get_number(saveData, "equipment_torso", EQUIP_NONE));
|
||||
equipped_arms = int(get_number(saveData, "equipment_arms", EQUIP_NONE));
|
||||
@@ -970,8 +660,6 @@ bool load_game_state() {
|
||||
equipped_legs = int(get_number(saveData, "equipment_legs", EQUIP_NONE));
|
||||
equipped_feet = int(get_number(saveData, "equipment_feet", EQUIP_NONE));
|
||||
|
||||
// Note: Equipment validation moved after runed items are loaded (see below)
|
||||
|
||||
reset_quick_slots();
|
||||
string[] loadedQuickSlots = get_string_list_or_split(saveData, "equipment_quick_slots");
|
||||
uint slot_count = loadedQuickSlots.length();
|
||||
|
||||
Reference in New Issue
Block a user