First adventure added. A bit of sound management improvement.

This commit is contained in:
Storm Dragon
2026-01-22 19:51:10 -05:00
parent ab7f3dc899
commit 35e192cb21
26 changed files with 851 additions and 54 deletions

View File

@@ -169,6 +169,7 @@ void reset_game_state() {
rope_climb_target_x = 0;
rope_climb_target_y = 0;
rope_climb_start_y = 0;
rope_climb_sound_handle = -1;
pending_rope_climb_x = -1;
pending_rope_climb_elevation = 0;
@@ -618,6 +619,29 @@ bool save_game_state() {
}
saveData.set("equipment_quick_slots", join_string_array(quickSlotData));
// Rune system data
saveData.set("rune_swiftness_unlocked", rune_swiftness_unlocked);
saveData.set("unicorn_boss_defeated", unicorn_boss_defeated);
saveData.set("equipped_head_rune", equipped_head_rune);
saveData.set("equipped_torso_rune", equipped_torso_rune);
saveData.set("equipped_arms_rune", equipped_arms_rune);
saveData.set("equipped_hands_rune", equipped_hands_rune);
saveData.set("equipped_legs_rune", equipped_legs_rune);
saveData.set("equipped_feet_rune", equipped_feet_rune);
saveData.set("equipped_weapon_rune", equipped_weapon_rune);
// Save runed items dictionary as key:value pairs
string[] runed_items_data;
string[]@ keys = runed_items.get_keys();
for (uint i = 0; i < keys.length(); i++) {
string key = keys[i];
int count = int(runed_items[key]);
if (count > 0) {
runed_items_data.insert_last(key + "=" + count);
}
}
saveData.set("runed_items", join_string_array(runed_items_data));
saveData.set("time_current_hour", current_hour);
saveData.set("time_current_day", current_day);
saveData.set("time_is_daytime", is_daytime);
@@ -919,6 +943,32 @@ bool load_game_state() {
}
update_max_health_from_equipment();
// Load rune system data
rune_swiftness_unlocked = get_bool(saveData, "rune_swiftness_unlocked", false);
unicorn_boss_defeated = get_bool(saveData, "unicorn_boss_defeated", false);
equipped_head_rune = int(get_number(saveData, "equipped_head_rune", RUNE_NONE));
equipped_torso_rune = int(get_number(saveData, "equipped_torso_rune", RUNE_NONE));
equipped_arms_rune = int(get_number(saveData, "equipped_arms_rune", RUNE_NONE));
equipped_hands_rune = int(get_number(saveData, "equipped_hands_rune", RUNE_NONE));
equipped_legs_rune = int(get_number(saveData, "equipped_legs_rune", RUNE_NONE));
equipped_feet_rune = int(get_number(saveData, "equipped_feet_rune", RUNE_NONE));
equipped_weapon_rune = int(get_number(saveData, "equipped_weapon_rune", RUNE_NONE));
// Load runed items dictionary
runed_items.delete_all();
string[] loaded_runed_items = get_string_list_or_split(saveData, "runed_items");
for (uint i = 0; i < loaded_runed_items.length(); i++) {
string entry = loaded_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) {
runed_items.set(key, count);
}
}
}
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);