Various bug fixes.
This commit is contained in:
@@ -110,6 +110,7 @@ void stop_active_sounds() {
|
||||
p.destroy_sound(sling_sound_handle);
|
||||
sling_sound_handle = -1;
|
||||
}
|
||||
stop_all_weather_sounds();
|
||||
}
|
||||
|
||||
void clear_world_objects() {
|
||||
@@ -494,6 +495,36 @@ bool load_game_state_from_raw(const string&in rawData) {
|
||||
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;
|
||||
@@ -505,9 +536,12 @@ bool load_game_state_from_raw(const string&in rawData) {
|
||||
if (get_raw_number(rawData, "equipment_feet", value)) equipped_feet = value;
|
||||
if (get_raw_number(rawData, "equipment_arms", value)) equipped_arms = value;
|
||||
|
||||
if (equipped_arms != EQUIP_POUCH && equipped_arms != EQUIP_BACKPACK) equipped_arms = EQUIP_NONE;
|
||||
if (equipped_arms == EQUIP_POUCH && inv_skin_pouches <= 0) equipped_arms = EQUIP_NONE;
|
||||
if (equipped_arms == EQUIP_BACKPACK && inv_backpacks <= 0) equipped_arms = EQUIP_NONE;
|
||||
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) {
|
||||
@@ -642,6 +676,18 @@ bool save_game_state() {
|
||||
}
|
||||
saveData.set("runed_items", join_string_array(runed_items_data));
|
||||
|
||||
// Save stored runed items dictionary
|
||||
string[] stored_runed_items_data;
|
||||
string[]@ stored_keys = stored_runed_items.get_keys();
|
||||
for (uint i = 0; i < stored_keys.length(); i++) {
|
||||
string key = stored_keys[i];
|
||||
int count = int(stored_runed_items[key]);
|
||||
if (count > 0) {
|
||||
stored_runed_items_data.insert_last(key + "=" + count);
|
||||
}
|
||||
}
|
||||
saveData.set("stored_runed_items", join_string_array(stored_runed_items_data));
|
||||
|
||||
saveData.set("time_current_hour", current_hour);
|
||||
saveData.set("time_current_day", current_day);
|
||||
saveData.set("time_is_daytime", is_daytime);
|
||||
@@ -923,14 +969,9 @@ bool load_game_state() {
|
||||
equipped_hands = int(get_number(saveData, "equipment_hands", EQUIP_NONE));
|
||||
equipped_legs = int(get_number(saveData, "equipment_legs", EQUIP_NONE));
|
||||
equipped_feet = int(get_number(saveData, "equipment_feet", EQUIP_NONE));
|
||||
if (equipped_head != EQUIP_HAT) equipped_head = EQUIP_NONE;
|
||||
if (equipped_torso != EQUIP_TUNIC) equipped_torso = EQUIP_NONE;
|
||||
if (equipped_hands != EQUIP_GLOVES) equipped_hands = EQUIP_NONE;
|
||||
if (equipped_legs != EQUIP_PANTS) equipped_legs = EQUIP_NONE;
|
||||
if (equipped_feet != EQUIP_MOCCASINS) equipped_feet = EQUIP_NONE;
|
||||
if (equipped_arms != EQUIP_POUCH && equipped_arms != EQUIP_BACKPACK) equipped_arms = EQUIP_NONE;
|
||||
if (equipped_arms == EQUIP_POUCH && inv_skin_pouches <= 0) equipped_arms = EQUIP_NONE;
|
||||
if (equipped_arms == EQUIP_BACKPACK && inv_backpacks <= 0) equipped_arms = 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();
|
||||
@@ -941,7 +982,6 @@ bool load_game_state() {
|
||||
quick_slots[i] = slot_value;
|
||||
}
|
||||
}
|
||||
update_max_health_from_equipment();
|
||||
|
||||
// Load rune system data
|
||||
rune_swiftness_unlocked = get_bool(saveData, "rune_swiftness_unlocked", false);
|
||||
@@ -969,6 +1009,32 @@ bool load_game_state() {
|
||||
}
|
||||
}
|
||||
|
||||
// Load stored runed items dictionary
|
||||
stored_runed_items.delete_all();
|
||||
string[] loaded_stored_runed_items = get_string_list_or_split(saveData, "stored_runed_items");
|
||||
for (uint i = 0; i < loaded_stored_runed_items.length(); i++) {
|
||||
string entry = loaded_stored_runed_items[i];
|
||||
int eq_pos = entry.find("=");
|
||||
if (eq_pos > 0) {
|
||||
string key = entry.substr(0, eq_pos);
|
||||
int count = parse_int(entry.substr(eq_pos + 1));
|
||||
if (count > 0) {
|
||||
stored_runed_items.set(key, count);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Validate equipped items now that runed items are loaded
|
||||
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;
|
||||
|
||||
// Now that both equipment and runes are loaded, update stats
|
||||
update_max_health_from_equipment();
|
||||
|
||||
current_hour = int(get_number(saveData, "time_current_hour", 8));
|
||||
current_day = int(get_number(saveData, "time_current_day", 1));
|
||||
sun_setting_warned = get_bool(saveData, "time_sun_setting_warned", false);
|
||||
@@ -1122,15 +1188,15 @@ bool load_game_state() {
|
||||
b.wander_direction_change_interval = random(BANDIT_WANDER_DIRECTION_CHANGE_MIN, BANDIT_WANDER_DIRECTION_CHANGE_MAX);
|
||||
b.wander_direction_timer.restart();
|
||||
b.move_timer.restart();
|
||||
b.alert_timer.restart();
|
||||
b.attack_timer.restart();
|
||||
|
||||
// Restore alert sound based on weapon type
|
||||
int sound_index = random(0, bandit_sounds.length() - 1);
|
||||
b.alert_sound = bandit_sounds[sound_index];
|
||||
b.next_alert_delay = random(BANDIT_ALERT_MIN_DELAY, BANDIT_ALERT_MAX_DELAY);
|
||||
|
||||
bandits.insert_last(b);
|
||||
// Start looping sound for loaded bandit
|
||||
b.sound_handle = play_1d_with_volume_step(b.alert_sound, x, b.position, true, BANDIT_SOUND_VOLUME_STEP);
|
||||
}
|
||||
|
||||
string[] mountainData = get_string_list_or_split(saveData, "mountains_data");
|
||||
|
||||
Reference in New Issue
Block a user