Weather system added, mostly decoration. Some tweaks to residents. Moved altar to its own menu, s for sacrifice. You can no longer burn incense outside the base.
This commit is contained in:
@@ -145,7 +145,9 @@ void clear_world_objects() {
|
||||
|
||||
clear_zombies();
|
||||
clear_bandits();
|
||||
clear_flying_creatures();
|
||||
clear_mountains();
|
||||
clear_world_drops();
|
||||
}
|
||||
|
||||
void reset_game_state() {
|
||||
@@ -174,6 +176,8 @@ void reset_game_state() {
|
||||
base_max_health = 10;
|
||||
max_health = 10;
|
||||
favor = 0.0;
|
||||
incense_hours_remaining = 0;
|
||||
incense_burning = false;
|
||||
blessing_speed_active = false;
|
||||
|
||||
inv_stones = 0;
|
||||
@@ -186,6 +190,9 @@ void reset_game_state() {
|
||||
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;
|
||||
@@ -211,6 +218,9 @@ void reset_game_state() {
|
||||
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;
|
||||
@@ -283,6 +293,7 @@ void start_new_game() {
|
||||
spawn_trees(5, 19);
|
||||
init_barricade();
|
||||
init_time();
|
||||
init_weather();
|
||||
save_game_state();
|
||||
}
|
||||
|
||||
@@ -430,6 +441,8 @@ bool load_game_state_from_raw(const string&in rawData) {
|
||||
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, "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;
|
||||
@@ -459,6 +472,9 @@ bool load_game_state_from_raw(const string&in rawData) {
|
||||
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;
|
||||
@@ -487,6 +503,7 @@ bool load_game_state_from_raw(const string&in rawData) {
|
||||
|
||||
if (equipped_arms != EQUIP_POUCH) equipped_arms = EQUIP_NONE;
|
||||
if (equipped_arms == EQUIP_POUCH && inv_skin_pouches <= 0) 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++) {
|
||||
@@ -518,6 +535,8 @@ bool save_game_state() {
|
||||
saveData.set("player_base_health", base_max_health);
|
||||
saveData.set("player_max_health", max_health);
|
||||
saveData.set("player_favor", favor);
|
||||
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);
|
||||
@@ -528,6 +547,9 @@ bool save_game_state() {
|
||||
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);
|
||||
@@ -554,6 +576,9 @@ bool save_game_state() {
|
||||
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);
|
||||
@@ -605,6 +630,8 @@ bool save_game_state() {
|
||||
}
|
||||
saveData.set("quest_queue", join_string_array(questData));
|
||||
|
||||
saveData.set("weather_data", serialize_weather());
|
||||
|
||||
saveData.set("world_map_size", MAP_SIZE);
|
||||
saveData.set("world_expanded_area_start", expanded_area_start);
|
||||
saveData.set("world_expanded_area_end", expanded_area_end);
|
||||
@@ -685,6 +712,12 @@ bool save_game_state() {
|
||||
}
|
||||
saveData.set("mountains_data", join_string_array(mountainData));
|
||||
|
||||
string[] dropData;
|
||||
for (uint i = 0; i < world_drops.length(); i++) {
|
||||
dropData.insert_last(world_drops[i].position + "|" + world_drops[i].type);
|
||||
}
|
||||
saveData.set("drops_data", join_string_array(dropData));
|
||||
|
||||
string rawData = saveData.serialize();
|
||||
string encryptedData = encrypt_save_data(rawData);
|
||||
return save_data(SAVE_FILE_PATH, encryptedData);
|
||||
@@ -755,6 +788,9 @@ bool load_game_state() {
|
||||
max_health = int(get_number(saveData, "player_max_health", 10));
|
||||
base_max_health = int(get_number(saveData, "player_base_health", max_health));
|
||||
favor = get_number(saveData, "player_favor", 0.0);
|
||||
incense_hours_remaining = int(get_number(saveData, "incense_hours_remaining", 0));
|
||||
incense_burning = get_bool(saveData, "incense_burning", false);
|
||||
if (incense_hours_remaining > 0) incense_burning = true;
|
||||
|
||||
if (x < 0) x = 0;
|
||||
if (x >= MAP_SIZE) x = MAP_SIZE - 1;
|
||||
@@ -770,6 +806,9 @@ bool load_game_state() {
|
||||
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));
|
||||
@@ -809,6 +848,9 @@ bool load_game_state() {
|
||||
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));
|
||||
@@ -900,6 +942,13 @@ bool load_game_state() {
|
||||
is_daytime = (current_hour >= 6 && current_hour < 19);
|
||||
hour_timer.restart();
|
||||
|
||||
string weather_data;
|
||||
if (saveData.get("weather_data", weather_data) && weather_data.length() > 0) {
|
||||
deserialize_weather(weather_data);
|
||||
} else {
|
||||
init_weather();
|
||||
}
|
||||
|
||||
string[] treeData = get_string_list_or_split(saveData, "trees_data");
|
||||
for (uint i = 0; i < treeData.length(); i++) {
|
||||
string[]@ parts = treeData[i].split("|");
|
||||
@@ -1061,6 +1110,13 @@ bool load_game_state() {
|
||||
world_mountains.insert_last(mountain);
|
||||
}
|
||||
|
||||
string[] dropData = get_string_list_or_split(saveData, "drops_data");
|
||||
for (uint i = 0; i < dropData.length(); i++) {
|
||||
string[]@ parts = dropData[i].split("|");
|
||||
if (parts.length() < 2) continue;
|
||||
add_world_drop(parse_int(parts[0]), parts[1]);
|
||||
}
|
||||
|
||||
update_ambience(true);
|
||||
return true;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user