Sound has been updated. As a result snares can be collected from a bit further away as it is now harder to tell when you're about to step on it. A few string updates. Mountain terrain added. May require rope for traversal.
This commit is contained in:
@@ -145,6 +145,7 @@ void clear_world_objects() {
|
||||
|
||||
clear_zombies();
|
||||
clear_bandits();
|
||||
clear_mountains();
|
||||
}
|
||||
|
||||
void reset_game_state() {
|
||||
@@ -161,6 +162,13 @@ void reset_game_state() {
|
||||
fall_start_y = 0;
|
||||
sling_charging = false;
|
||||
searching = false;
|
||||
rope_climbing = false;
|
||||
rope_climb_up = true;
|
||||
rope_climb_target_x = 0;
|
||||
rope_climb_target_y = 0;
|
||||
rope_climb_start_y = 0;
|
||||
pending_rope_climb_x = -1;
|
||||
pending_rope_climb_elevation = 0;
|
||||
|
||||
player_health = 10;
|
||||
base_max_health = 10;
|
||||
@@ -302,6 +310,32 @@ string serialize_bandit(Bandit@ bandit) {
|
||||
return bandit.position + "|" + bandit.health + "|" + bandit.weapon_type + "|" + bandit.behavior_state + "|" + bandit.wander_direction + "|" + bandit.move_interval;
|
||||
}
|
||||
|
||||
string serialize_mountain(MountainRange@ mountain) {
|
||||
string result = mountain.start_position + "|" + mountain.end_position + "|";
|
||||
|
||||
// Serialize elevations
|
||||
for (int i = 0; i < int(mountain.elevations.length()); i++) {
|
||||
if (i > 0) result += ",";
|
||||
result += mountain.elevations[i];
|
||||
}
|
||||
result += "|";
|
||||
|
||||
// Serialize terrain types
|
||||
for (int i = 0; i < int(mountain.terrain_types.length()); i++) {
|
||||
if (i > 0) result += ",";
|
||||
result += mountain.terrain_types[i];
|
||||
}
|
||||
result += "|";
|
||||
|
||||
// Serialize stream positions
|
||||
for (uint i = 0; i < mountain.stream_positions.length(); i++) {
|
||||
if (i > 0) result += ",";
|
||||
result += mountain.stream_positions[i];
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
string join_string_array(const string[]@ arr) {
|
||||
if (@arr == null || arr.length() == 0) return "";
|
||||
string result = arr[0];
|
||||
@@ -645,6 +679,12 @@ bool save_game_state() {
|
||||
}
|
||||
saveData.set("bandits_data", join_string_array(banditData));
|
||||
|
||||
string[] mountainData;
|
||||
for (uint i = 0; i < world_mountains.length(); i++) {
|
||||
mountainData.insert_last(serialize_mountain(world_mountains[i]));
|
||||
}
|
||||
saveData.set("mountains_data", join_string_array(mountainData));
|
||||
|
||||
string rawData = saveData.serialize();
|
||||
string encryptedData = encrypt_save_data(rawData);
|
||||
return save_data(SAVE_FILE_PATH, encryptedData);
|
||||
@@ -982,6 +1022,45 @@ bool load_game_state() {
|
||||
bandits.insert_last(b);
|
||||
}
|
||||
|
||||
string[] mountainData = get_string_list_or_split(saveData, "mountains_data");
|
||||
for (uint i = 0; i < mountainData.length(); i++) {
|
||||
string[]@ parts = mountainData[i].split("|");
|
||||
if (parts.length() < 5) continue;
|
||||
|
||||
int start_pos = parse_int(parts[0]);
|
||||
int end_pos = parse_int(parts[1]);
|
||||
int size = end_pos - start_pos + 1;
|
||||
|
||||
// Create mountain with minimal init (we'll override everything)
|
||||
MountainRange@ mountain = MountainRange(start_pos, 1);
|
||||
mountain.start_position = start_pos;
|
||||
mountain.end_position = end_pos;
|
||||
|
||||
// Parse elevations
|
||||
string[]@ elev_parts = parts[2].split(",");
|
||||
mountain.elevations.resize(elev_parts.length());
|
||||
for (uint j = 0; j < elev_parts.length(); j++) {
|
||||
mountain.elevations[j] = parse_int(elev_parts[j]);
|
||||
}
|
||||
|
||||
// Parse terrain types
|
||||
string[]@ terrain_parts = parts[3].split(",");
|
||||
mountain.terrain_types.resize(terrain_parts.length());
|
||||
for (uint j = 0; j < terrain_parts.length(); j++) {
|
||||
mountain.terrain_types[j] = terrain_parts[j];
|
||||
}
|
||||
|
||||
// Parse stream positions
|
||||
if (parts[4].length() > 0) {
|
||||
string[]@ stream_parts = parts[4].split(",");
|
||||
for (uint j = 0; j < stream_parts.length(); j++) {
|
||||
mountain.stream_positions.insert_last(parse_int(stream_parts[j]));
|
||||
}
|
||||
}
|
||||
|
||||
world_mountains.insert_last(mountain);
|
||||
}
|
||||
|
||||
update_ambience(true);
|
||||
return true;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user