diff options
Diffstat (limited to 'src/ap_state.cpp')
-rw-r--r-- | src/ap_state.cpp | 52 |
1 files changed, 52 insertions, 0 deletions
diff --git a/src/ap_state.cpp b/src/ap_state.cpp index 58670e6..aeed914 100644 --- a/src/ap_state.cpp +++ b/src/ap_state.cpp | |||
@@ -64,8 +64,14 @@ struct APState { | |||
64 | LocationChecks location_checks = kNORMAL_LOCATIONS; | 64 | LocationChecks location_checks = kNORMAL_LOCATIONS; |
65 | VictoryCondition victory_condition = kTHE_END; | 65 | VictoryCondition victory_condition = kTHE_END; |
66 | bool early_color_hallways = false; | 66 | bool early_color_hallways = false; |
67 | bool pilgrimage_enabled = false; | ||
68 | bool pilgrimage_allows_roof_access = false; | ||
69 | bool pilgrimage_allows_paintings = false; | ||
70 | SunwarpAccess sunwarp_access = kSUNWARP_ACCESS_NORMAL; | ||
71 | bool sunwarp_shuffle = false; | ||
67 | 72 | ||
68 | std::map<std::string, std::string> painting_mapping; | 73 | std::map<std::string, std::string> painting_mapping; |
74 | std::map<int, SunwarpMapping> sunwarp_mapping; | ||
69 | 75 | ||
70 | void Connect(std::string server, std::string player, std::string password) { | 76 | void Connect(std::string server, std::string player, std::string password) { |
71 | if (!initialized) { | 77 | if (!initialized) { |
@@ -136,6 +142,12 @@ struct APState { | |||
136 | location_checks = kNORMAL_LOCATIONS; | 142 | location_checks = kNORMAL_LOCATIONS; |
137 | victory_condition = kTHE_END; | 143 | victory_condition = kTHE_END; |
138 | early_color_hallways = false; | 144 | early_color_hallways = false; |
145 | pilgrimage_enabled = false; | ||
146 | pilgrimage_allows_roof_access = false; | ||
147 | pilgrimage_allows_paintings = false; | ||
148 | sunwarp_access = kSUNWARP_ACCESS_NORMAL; | ||
149 | sunwarp_shuffle = false; | ||
150 | sunwarp_mapping.clear(); | ||
139 | 151 | ||
140 | connected = false; | 152 | connected = false; |
141 | has_connection_result = false; | 153 | has_connection_result = false; |
@@ -221,6 +233,16 @@ struct APState { | |||
221 | slot_data["victory_condition"].get<VictoryCondition>(); | 233 | slot_data["victory_condition"].get<VictoryCondition>(); |
222 | early_color_hallways = slot_data.contains("early_color_hallways") && | 234 | early_color_hallways = slot_data.contains("early_color_hallways") && |
223 | slot_data["early_color_hallways"].get<int>() == 1; | 235 | slot_data["early_color_hallways"].get<int>() == 1; |
236 | pilgrimage_enabled = slot_data.contains("enable_pilgrimage") && | ||
237 | slot_data["enable_pilgrimage"].get<int>() == 1; | ||
238 | pilgrimage_allows_roof_access = | ||
239 | slot_data.contains("pilgrimage_allows_roof_access") && | ||
240 | slot_data["pilgrimage_allows_roof_access"].get<int>() == 1; | ||
241 | pilgrimage_allows_paintings = | ||
242 | slot_data.contains("pilgrimage_allows_paintings") && | ||
243 | slot_data["pilgrimage_allows_paintings"].get<int>() == 1; | ||
244 | sunwarp_access = slot_data["sunwarp_access"].get<SunwarpAccess>(); | ||
245 | sunwarp_shuffle = slot_data["shuffle_sunwarps"].get<int>() == 1; | ||
224 | 246 | ||
225 | if (painting_shuffle && slot_data.contains("painting_entrance_to_exit")) { | 247 | if (painting_shuffle && slot_data.contains("painting_entrance_to_exit")) { |
226 | painting_mapping.clear(); | 248 | painting_mapping.clear(); |
@@ -231,6 +253,18 @@ struct APState { | |||
231 | } | 253 | } |
232 | } | 254 | } |
233 | 255 | ||
256 | if (sunwarp_shuffle && slot_data.contains("sunwarp_permutation")) { | ||
257 | std::vector<int> inverted_sunwarps; | ||
258 | for (const auto& item : slot_data["sunwarp_permutation"]) { | ||
259 | inverted_sunwarps.push_back(item); | ||
260 | } | ||
261 | |||
262 | for (int i = 0; i < 6; i++) { | ||
263 | sunwarp_mapping[inverted_sunwarps[i]] = SunwarpMapping{ | ||
264 | .dots = i + 1, .exit_index = inverted_sunwarps[i + 6]}; | ||
265 | } | ||
266 | } | ||
267 | |||
234 | connected = true; | 268 | connected = true; |
235 | has_connection_result = true; | 269 | has_connection_result = true; |
236 | 270 | ||
@@ -461,6 +495,24 @@ bool AP_HasAchievement(const std::string& achievement_name) { | |||
461 | 495 | ||
462 | bool AP_HasEarlyColorHallways() { return GetState().early_color_hallways; } | 496 | bool AP_HasEarlyColorHallways() { return GetState().early_color_hallways; } |
463 | 497 | ||
498 | bool AP_IsPilgrimageEnabled() { return GetState().pilgrimage_enabled; } | ||
499 | |||
500 | bool AP_DoesPilgrimageAllowRoofAccess() { | ||
501 | return GetState().pilgrimage_allows_roof_access; | ||
502 | } | ||
503 | |||
504 | bool AP_DoesPilgrimageAllowPaintings() { | ||
505 | return GetState().pilgrimage_allows_paintings; | ||
506 | } | ||
507 | |||
508 | SunwarpAccess AP_GetSunwarpAccess() { return GetState().sunwarp_access; } | ||
509 | |||
510 | bool AP_IsSunwarpShuffle() { return GetState().sunwarp_shuffle; } | ||
511 | |||
512 | const std::map<int, SunwarpMapping>& AP_GetSunwarpMapping() { | ||
513 | return GetState().sunwarp_mapping; | ||
514 | } | ||
515 | |||
464 | bool AP_HasReachedGoal() { return GetState().HasReachedGoal(); } | 516 | bool AP_HasReachedGoal() { return GetState().HasReachedGoal(); } |
465 | 517 | ||
466 | std::optional<std::tuple<int, int>> AP_GetPlayerPosition() { | 518 | std::optional<std::tuple<int, int>> AP_GetPlayerPosition() { |