about summary refs log tree commit diff stats
path: root/src/ap_state.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/ap_state.cpp')
-rw-r--r--src/ap_state.cpp57
1 files changed, 56 insertions, 1 deletions
diff --git a/src/ap_state.cpp b/src/ap_state.cpp index 58670e6..8feb78b 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,19 @@ 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.contains("sunwarp_access")
245 ? slot_data["sunwarp_access"].get<SunwarpAccess>()
246 : kSUNWARP_ACCESS_NORMAL;
247 sunwarp_shuffle = slot_data.contains("shuffle_sunwarps") &&
248 slot_data["shuffle_sunwarps"].get<int>() == 1;
224 249
225 if (painting_shuffle && slot_data.contains("painting_entrance_to_exit")) { 250 if (painting_shuffle && slot_data.contains("painting_entrance_to_exit")) {
226 painting_mapping.clear(); 251 painting_mapping.clear();
@@ -231,6 +256,18 @@ struct APState {
231 } 256 }
232 } 257 }
233 258
259 if (sunwarp_shuffle && slot_data.contains("sunwarp_permutation")) {
260 std::vector<int> inverted_sunwarps;
261 for (const auto& item : slot_data["sunwarp_permutation"]) {
262 inverted_sunwarps.push_back(item);
263 }
264
265 for (int i = 0; i < 6; i++) {
266 sunwarp_mapping[inverted_sunwarps[i]] = SunwarpMapping{
267 .dots = i + 1, .exit_index = inverted_sunwarps[i + 6]};
268 }
269 }
270
234 connected = true; 271 connected = true;
235 has_connection_result = true; 272 has_connection_result = true;
236 273
@@ -346,7 +383,7 @@ struct APState {
346 } else { 383 } else {
347 data_storage.erase(key); 384 data_storage.erase(key);
348 } 385 }
349 386
350 TrackerLog("Data storage " + key + " retrieved as null"); 387 TrackerLog("Data storage " + key + " retrieved as null");
351 } 388 }
352 } 389 }
@@ -461,6 +498,24 @@ bool AP_HasAchievement(const std::string& achievement_name) {
461 498
462bool AP_HasEarlyColorHallways() { return GetState().early_color_hallways; } 499bool AP_HasEarlyColorHallways() { return GetState().early_color_hallways; }
463 500
501bool AP_IsPilgrimageEnabled() { return GetState().pilgrimage_enabled; }
502
503bool AP_DoesPilgrimageAllowRoofAccess() {
504 return GetState().pilgrimage_allows_roof_access;
505}
506
507bool AP_DoesPilgrimageAllowPaintings() {
508 return GetState().pilgrimage_allows_paintings;
509}
510
511SunwarpAccess AP_GetSunwarpAccess() { return GetState().sunwarp_access; }
512
513bool AP_IsSunwarpShuffle() { return GetState().sunwarp_shuffle; }
514
515const std::map<int, SunwarpMapping>& AP_GetSunwarpMapping() {
516 return GetState().sunwarp_mapping;
517}
518
464bool AP_HasReachedGoal() { return GetState().HasReachedGoal(); } 519bool AP_HasReachedGoal() { return GetState().HasReachedGoal(); }
465 520
466std::optional<std::tuple<int, int>> AP_GetPlayerPosition() { 521std::optional<std::tuple<int, int>> AP_GetPlayerPosition() {