diff options
-rw-r--r-- | ap_state.cpp | 5 | ||||
-rw-r--r-- | ap_state.h | 2 | ||||
-rwxr-xr-x | assets/areas.yaml | 2 | ||||
-rw-r--r-- | game_data.cpp | 8 | ||||
-rw-r--r-- | game_data.h | 7 | ||||
-rw-r--r-- | tracker_state.cpp | 16 |
6 files changed, 40 insertions, 0 deletions
diff --git a/ap_state.cpp b/ap_state.cpp index c13b87c..70f183e 100644 --- a/ap_state.cpp +++ b/ap_state.cpp | |||
@@ -52,6 +52,7 @@ std::map<int64_t, std::string> progressive_item_by_ap_id; | |||
52 | DoorShuffleMode door_shuffle_mode = kNO_DOORS; | 52 | DoorShuffleMode door_shuffle_mode = kNO_DOORS; |
53 | bool color_shuffle = false; | 53 | bool color_shuffle = false; |
54 | bool painting_shuffle = false; | 54 | bool painting_shuffle = false; |
55 | int mastery_requirement = 21; | ||
55 | 56 | ||
56 | std::map<std::string, std::string> painting_mapping; | 57 | std::map<std::string, std::string> painting_mapping; |
57 | 58 | ||
@@ -116,6 +117,7 @@ void AP_Connect(std::string server, std::string player, std::string password) { | |||
116 | color_shuffle = false; | 117 | color_shuffle = false; |
117 | painting_shuffle = false; | 118 | painting_shuffle = false; |
118 | painting_mapping.clear(); | 119 | painting_mapping.clear(); |
120 | mastery_requirement = 21; | ||
119 | 121 | ||
120 | connected = false; | 122 | connected = false; |
121 | has_connection_result = false; | 123 | has_connection_result = false; |
@@ -166,6 +168,7 @@ void AP_Connect(std::string server, std::string player, std::string password) { | |||
166 | door_shuffle_mode = slot_data["shuffle_doors"].get<DoorShuffleMode>(); | 168 | door_shuffle_mode = slot_data["shuffle_doors"].get<DoorShuffleMode>(); |
167 | color_shuffle = slot_data["shuffle_colors"].get<bool>(); | 169 | color_shuffle = slot_data["shuffle_colors"].get<bool>(); |
168 | painting_shuffle = slot_data["shuffle_paintings"].get<bool>(); | 170 | painting_shuffle = slot_data["shuffle_paintings"].get<bool>(); |
171 | mastery_requirement = slot_data["mastery_achievements"].get<int>(); | ||
169 | 172 | ||
170 | if (painting_shuffle && slot_data.contains("painting_entrance_to_exit")) { | 173 | if (painting_shuffle && slot_data.contains("painting_entrance_to_exit")) { |
171 | painting_mapping.clear(); | 174 | painting_mapping.clear(); |
@@ -321,3 +324,5 @@ bool AP_IsPaintingShuffle() { return painting_shuffle; } | |||
321 | const std::map<std::string, std::string> AP_GetPaintingMapping() { | 324 | const std::map<std::string, std::string> AP_GetPaintingMapping() { |
322 | return painting_mapping; | 325 | return painting_mapping; |
323 | } | 326 | } |
327 | |||
328 | int AP_GetMasteryRequirement() { return mastery_requirement; } | ||
diff --git a/ap_state.h b/ap_state.h index 434b7b2..d880c71 100644 --- a/ap_state.h +++ b/ap_state.h | |||
@@ -28,4 +28,6 @@ bool AP_IsPaintingShuffle(); | |||
28 | 28 | ||
29 | const std::map<std::string, std::string> AP_GetPaintingMapping(); | 29 | const std::map<std::string, std::string> AP_GetPaintingMapping(); |
30 | 30 | ||
31 | int AP_GetMasteryRequirement(); | ||
32 | |||
31 | #endif /* end of include guard: AP_STATE_H_664A4180 */ | 33 | #endif /* end of include guard: AP_STATE_H_664A4180 */ |
diff --git a/assets/areas.yaml b/assets/areas.yaml index fea1529..b2aa69f 100755 --- a/assets/areas.yaml +++ b/assets/areas.yaml | |||
@@ -105,6 +105,8 @@ | |||
105 | map: [908, 1632] | 105 | map: [908, 1632] |
106 | The Wanderer: | 106 | The Wanderer: |
107 | map: [1587, 1765] | 107 | map: [1587, 1765] |
108 | Outside The Wanderer: | ||
109 | fold_into: The Wanderer | ||
108 | Rhyme Room (Smiley): | 110 | Rhyme Room (Smiley): |
109 | fold_into: Rhyme Room | 111 | fold_into: Rhyme Room |
110 | Rhyme Room (Cross): | 112 | Rhyme Room (Cross): |
diff --git a/game_data.cpp b/game_data.cpp index 9b31f89..e15847e 100644 --- a/game_data.cpp +++ b/game_data.cpp | |||
@@ -157,6 +157,14 @@ GameData::GameData() { | |||
157 | panel_obj.check = panel_it.second["check"].as<bool>(); | 157 | panel_obj.check = panel_it.second["check"].as<bool>(); |
158 | } | 158 | } |
159 | 159 | ||
160 | if (panel_it.second["achievement"]) { | ||
161 | panel_obj.achievement = panel_it.second["achievement"].as<bool>(); | ||
162 | |||
163 | if (panel_obj.achievement) { | ||
164 | achievement_panels_.push_back(panel_id); | ||
165 | } | ||
166 | } | ||
167 | |||
160 | if (panel_it.second["exclude_reduce"]) { | 168 | if (panel_it.second["exclude_reduce"]) { |
161 | panel_obj.exclude_reduce = | 169 | panel_obj.exclude_reduce = |
162 | panel_it.second["exclude_reduce"].as<bool>(); | 170 | panel_it.second["exclude_reduce"].as<bool>(); |
diff --git a/game_data.h b/game_data.h index 2df8bc5..0cc7a7b 100644 --- a/game_data.h +++ b/game_data.h | |||
@@ -28,6 +28,7 @@ struct Panel { | |||
28 | std::vector<int> required_doors; | 28 | std::vector<int> required_doors; |
29 | bool check = false; | 29 | bool check = false; |
30 | bool exclude_reduce = false; | 30 | bool exclude_reduce = false; |
31 | bool achievement = false; | ||
31 | }; | 32 | }; |
32 | 33 | ||
33 | struct ProgressiveRequirement { | 34 | struct ProgressiveRequirement { |
@@ -104,6 +105,10 @@ class GameData { | |||
104 | return room_by_painting_.at(painting_id); | 105 | return room_by_painting_.at(painting_id); |
105 | } | 106 | } |
106 | 107 | ||
108 | const std::vector<int>& GetAchievementPanels() const { | ||
109 | return achievement_panels_; | ||
110 | } | ||
111 | |||
107 | private: | 112 | private: |
108 | int AddOrGetRoom(std::string room); | 113 | int AddOrGetRoom(std::string room); |
109 | int AddOrGetDoor(std::string room, std::string door); | 114 | int AddOrGetDoor(std::string room, std::string door); |
@@ -121,6 +126,8 @@ class GameData { | |||
121 | std::map<std::string, int> area_by_id_; | 126 | std::map<std::string, int> area_by_id_; |
122 | 127 | ||
123 | std::map<std::string, int> room_by_painting_; | 128 | std::map<std::string, int> room_by_painting_; |
129 | |||
130 | std::vector<int> achievement_panels_; | ||
124 | }; | 131 | }; |
125 | 132 | ||
126 | const GameData& GetGameData(); | 133 | const GameData& GetGameData(); |
diff --git a/tracker_state.cpp b/tracker_state.cpp index 6eaf87a..858ec3e 100644 --- a/tracker_state.cpp +++ b/tracker_state.cpp | |||
@@ -16,6 +16,22 @@ bool IsPanelReachable_Helper(int panel_id, | |||
16 | return false; | 16 | return false; |
17 | } | 17 | } |
18 | 18 | ||
19 | if (panel_obj.name == "THE MASTER") { | ||
20 | int achievements_accessible = 0; | ||
21 | |||
22 | for (int achieve_id : GetGameData().GetAchievementPanels()) { | ||
23 | if (IsPanelReachable_Helper(achieve_id, reachable_rooms)) { | ||
24 | achievements_accessible++; | ||
25 | |||
26 | if (achievements_accessible >= AP_GetMasteryRequirement()) { | ||
27 | break; | ||
28 | } | ||
29 | } | ||
30 | } | ||
31 | |||
32 | return (achievements_accessible >= AP_GetMasteryRequirement()); | ||
33 | } | ||
34 | |||
19 | for (int room_id : panel_obj.required_rooms) { | 35 | for (int room_id : panel_obj.required_rooms) { |
20 | if (!reachable_rooms.count(room_id)) { | 36 | if (!reachable_rooms.count(room_id)) { |
21 | return false; | 37 | return false; |