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.cpp55
1 files changed, 55 insertions, 0 deletions
diff --git a/src/ap_state.cpp b/src/ap_state.cpp index 62c9f3f..4fd241a 100644 --- a/src/ap_state.cpp +++ b/src/ap_state.cpp
@@ -65,8 +65,14 @@ struct APState {
65 LocationChecks location_checks = kNORMAL_LOCATIONS; 65 LocationChecks location_checks = kNORMAL_LOCATIONS;
66 VictoryCondition victory_condition = kTHE_END; 66 VictoryCondition victory_condition = kTHE_END;
67 bool early_color_hallways = false; 67 bool early_color_hallways = false;
68 bool pilgrimage_enabled = false;
69 bool pilgrimage_allows_roof_access = false;
70 bool pilgrimage_allows_paintings = false;
71 SunwarpAccess sunwarp_access = kSUNWARP_ACCESS_NORMAL;
72 bool sunwarp_shuffle = false;
68 73
69 std::map<std::string, std::string> painting_mapping; 74 std::map<std::string, std::string> painting_mapping;
75 std::map<int, SunwarpMapping> sunwarp_mapping;
70 76
71 void Connect(std::string server, std::string player, std::string password) { 77 void Connect(std::string server, std::string player, std::string password) {
72 if (!initialized) { 78 if (!initialized) {
@@ -138,6 +144,12 @@ struct APState {
138 location_checks = kNORMAL_LOCATIONS; 144 location_checks = kNORMAL_LOCATIONS;
139 victory_condition = kTHE_END; 145 victory_condition = kTHE_END;
140 early_color_hallways = false; 146 early_color_hallways = false;
147 pilgrimage_enabled = false;
148 pilgrimage_allows_roof_access = false;
149 pilgrimage_allows_paintings = false;
150 sunwarp_access = kSUNWARP_ACCESS_NORMAL;
151 sunwarp_shuffle = false;
152 sunwarp_mapping.clear();
141 153
142 connected = false; 154 connected = false;
143 has_connection_result = false; 155 has_connection_result = false;
@@ -234,6 +246,19 @@ struct APState {
234 slot_data["victory_condition"].get<VictoryCondition>(); 246 slot_data["victory_condition"].get<VictoryCondition>();
235 early_color_hallways = slot_data.contains("early_color_hallways") && 247 early_color_hallways = slot_data.contains("early_color_hallways") &&
236 slot_data["early_color_hallways"].get<int>() == 1; 248 slot_data["early_color_hallways"].get<int>() == 1;
249 pilgrimage_enabled = slot_data.contains("enable_pilgrimage") &&
250 slot_data["enable_pilgrimage"].get<int>() == 1;
251 pilgrimage_allows_roof_access =
252 slot_data.contains("pilgrimage_allows_roof_access") &&
253 slot_data["pilgrimage_allows_roof_access"].get<int>() == 1;
254 pilgrimage_allows_paintings =
255 slot_data.contains("pilgrimage_allows_paintings") &&
256 slot_data["pilgrimage_allows_paintings"].get<int>() == 1;
257 sunwarp_access = slot_data.contains("sunwarp_access")
258 ? slot_data["sunwarp_access"].get<SunwarpAccess>()
259 : kSUNWARP_ACCESS_NORMAL;
260 sunwarp_shuffle = slot_data.contains("shuffle_sunwarps") &&
261 slot_data["shuffle_sunwarps"].get<int>() == 1;
237 262
238 if (painting_shuffle && slot_data.contains("painting_entrance_to_exit")) { 263 if (painting_shuffle && slot_data.contains("painting_entrance_to_exit")) {
239 painting_mapping.clear(); 264 painting_mapping.clear();
@@ -244,6 +269,18 @@ struct APState {
244 } 269 }
245 } 270 }
246 271
272 if (sunwarp_shuffle && slot_data.contains("sunwarp_permutation")) {
273 std::vector<int> inverted_sunwarps;
274 for (const auto& item : slot_data["sunwarp_permutation"]) {
275 inverted_sunwarps.push_back(item);
276 }
277
278 for (int i = 0; i < 6; i++) {
279 sunwarp_mapping[inverted_sunwarps[i]] = SunwarpMapping{
280 .dots = i + 1, .exit_index = inverted_sunwarps[i + 6]};
281 }
282 }
283
247 connected = true; 284 connected = true;
248 has_connection_result = true; 285 has_connection_result = true;
249 286
@@ -476,6 +513,24 @@ bool AP_HasAchievement(const std::string& achievement_name) {
476 513
477bool AP_HasEarlyColorHallways() { return GetState().early_color_hallways; } 514bool AP_HasEarlyColorHallways() { return GetState().early_color_hallways; }
478 515
516bool AP_IsPilgrimageEnabled() { return GetState().pilgrimage_enabled; }
517
518bool AP_DoesPilgrimageAllowRoofAccess() {
519 return GetState().pilgrimage_allows_roof_access;
520}
521
522bool AP_DoesPilgrimageAllowPaintings() {
523 return GetState().pilgrimage_allows_paintings;
524}
525
526SunwarpAccess AP_GetSunwarpAccess() { return GetState().sunwarp_access; }
527
528bool AP_IsSunwarpShuffle() { return GetState().sunwarp_shuffle; }
529
530const std::map<int, SunwarpMapping>& AP_GetSunwarpMapping() {
531 return GetState().sunwarp_mapping;
532}
533
479bool AP_HasReachedGoal() { return GetState().HasReachedGoal(); } 534bool AP_HasReachedGoal() { return GetState().HasReachedGoal(); }
480 535
481std::optional<std::tuple<int, int>> AP_GetPlayerPosition() { 536std::optional<std::tuple<int, int>> AP_GetPlayerPosition() {