about summary refs log tree commit diff stats
path: root/data/maps/the_tower/doors.txtpb
blob: ccd731b97b0ec62904d48f944042a3efe59a0f68 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
doors {
  name: "First Floor Puzzles"
  type: LOCATION_ONLY
  panels { room: "First Floor" name: "RIDE" }
  panels { room: "First Floor" name: "PROD" }
  panels { room: "First Floor" name: "WARM" }
  panels { room: "First Floor" name: "COLLEGE" }
  panels { room: "First Floor" name: "HER" }
  panels { room: "First Floor" name: "CRAM" }
  panels { room: "First Floor" name: "CUP" }
  panels { room: "First Floor" name: "IRONY" }
  panels { room: "First Floor" name: "IRE" }
  panels { room: "First Floor" name: "ADULT" }
  panels { room: "First Floor" name: "CALF" }
  panels { room: "First Floor" name: "BUTTER" }
  location_room: "First Floor"
}
doors {
  name: "First Floor Door"
  type: ITEM_ONLY
  receivers: "Components/Doors/entry_1"
  panels { room: "First Floor" name: "RIDE" }
  panels { room: "First Floor" name: "PROD" }
  panels { room: "First Floor" name: "WARM" }
  panels { room: "First Floor" name: "COLLEGE" }
  panels { room: "First Floor" name: "HER" }
  panels { room: "First Floor" name: "CRAM" }
  panels { room: "First Floor" name: "CUP" }
  panels { room: "First Floor" name: "IRONY" }
  panels { room: "First Floor" name: "IRE" }
  panels { room: "First Floor" name: "ADULT" }
  panels { room: "First Floor" name: "CALF" }
  panels { room: "First Floor" name: "BUTTER" }
  complete_at: 1
}
doors {
  name: "Second Floor Puzzles"
  type: LOCATION_ONLY
  panels { room: "Tower" name: "RHINO" }
  panels { room: "Tower" name: "FISH" }
  panels { room: "Tower" name: "LINEAGE" }
  panels { room: "Tower" name: "GRUMPY" }
  panels { room: "Tower" name: "ZEBRA" }
  panels { room: "Tower" name: "SLID" }
  panels { room: "Tower" name: "FUEL" }
  panels { room: "Tower" name: "DOUGH" }
  panels { room: "Tower" name: "LIQUID" }
  panels { room: "Tower" name: "ICE" }
  panels { room: "Tower" name: "FLEECE" }
  panels { room: "Tower" name: "NEED" }
  panels { room: "Tower" name: "ANNOY (1)" }
  panels { room: "Tower" name: "ANNOY (2)" }
  panels { room: "Tower" name: "GIGGLING" }
  location_room: "Tower"
}
doors {
  name: "Third Floor Puzzles"
  type: LOCATION_ONLY
  panels { room: "Tower" name: "MINUSCULE" }
  panels { room: "Tower" name: "TYPEWRITER" }
  panels { room: "Tower" name: "READJUST" }
  panels { room: "Tower" name: "REINDICT" }
  panels { room: "Tower" name: "COPYRIGHT" }
  panels { room: "Tower" name: "CONTINENT" }
  panels { room: "Tower" name: "FOOT" }
  panels { room: "Tower" name: "EYE" }
  panels { room: "Tower" name: "RIVER" }
  panels { room: "Tower" name: "NUCLEUS" }
  panels { room: "Tower" name: "MIX (1)" }
  panels { room: "Tower" name: "HEAL" }
  panels { room: "Tower" name: "SCREW" }
  panels { room: "Tower" name: "FLY" }
  panels { room: "Tower" name: "MIX (2)" }
  location_room: "Tower"
}
doors {
  name: "Fourth Floor Puzzles"
  type: LOCATION_ONLY
  panels { room: "Tower" name: "BARE" }
  panels { room: "Tower" name: "CANON" }
  panels { room: "Tower" name: "DUCTS" }
  panels { room: "Tower" name: "COY" }
  panels { room: "Tower" name: "LYNX" }
  panels { room: "Tower" name: "SCENTS (1)" }
  panels { room: "Tower" name: "SCENTS (2)" }
  panels { room: "Tower" name: "SEIZE (1)" }
  panels { room: "Tower" name: "SEIZE (2)" }
  panels { room: "Tower" name: "THROWN" }
  location_room: "Tower"
}
doors {
  name: "Fifth Floor Puzzles"
  type: LOCATION_ONLY
  panels { room: "Tower" name: "FUND" }
  panels { room: "Tower" name: "ENVELOPE" }
  panels { room: "Tower" name: "ROTE" }
  panels { room: "Tower" name: "ENVELOPES" }
  panels { room: "Tower" name: "ERECTS" }
  panels { room: "Tower" name: "HIDE (1)" }
  panels { room: "Tower" name: "HUE" }
  panels { room: "Tower" name: "CRUST" }
  panels { room: "Tower" name: "HIDE (2)" }
  panels { room: "Tower" name: "BETTER" }
  location_room: "Tower"
}
doors {
  name: "Colors Panel"
  type: EVENT
  panels { room: "First Floor" name: "RIDE" }
  panels { room: "First Floor" name: "PROD" }
  panels { room: "First Floor" name: "WARM" }
  panels { room: "First Floor" name: "COLLEGE" }
  panels { room: "First Floor" name: "HER" }
  panels { room: "First Floor" name: "CRAM" }
  panels { room: "First Floor" name: "CUP" }
  panels { room: "First Floor" name: "IRONY" }
  panels { room: "First Floor" name: "IRE" }
  panels { room: "First Floor" name: "ADULT" }
  panels { room: "First Floor" name: "CALF" }
  panels { room: "First Floor" name: "BUTTER" }
  panels { room: "Tower" name: "RHINO" }
  panels { room: "Tower" name: "FISH" }
  panels { room: "Tower" name: "LINEAGE" }
  panels { room: "Tower" name: "GRUMPY" }
  panels { room: "Tower" name: "ZEBRA" }
  panels { room: "Tower" name: "SLID" }
  panels { room: "Tower" name: "FUEL" }
  panels { room: "Tower" name: "DOUGH" }
  panels { room: "Tower" name: "LIQUID" }
  panels { room: "Tower" name: "ICE" }
  panels { room: "Tower" name: "FLEECE" }
  panels { room: "Tower" name: "NEED" }
  panels { room: "Tower" name: "ANNOY (1)" }
  panels { room: "Tower" name: "ANNOY (2)" }
  panels { room: "Tower" name: "GIGGLING" }
  panels { room: "Tower" name: "MINUSCULE" }
  panels { room: "Tower" name: "TYPEWRITER" }
  panels { room: "Tower" name: "READJUST" }
  panels { room: "Tower" name: "REINDICT" }
  panels { room: "Tower" name: "COPYRIGHT" }
  panels { room: "Tower" name: "CONTINENT" }
  panels { room: "Tower" name: "FOOT" }
  panels { room: "Tower" name: "EYE" }
  panels { room: "Tower" name: "RIVER" }
  panels { room: "Tower" name: "NUCLEUS" }
  panels { room: "Tower" name: "MIX (1)" }
  panels { room: "Tower" name: "HEAL" }
  panels { room: "Tower" name: "SCREW" }
  panels { room: "Tower" name: "FLY" }
  panels { room: "Tower" name: "MIX (2)" }
  panels { room: "Tower" name: "BARE" }
  panels { room: "Tower" name: "CANON" }
  panels { room: "Tower" name: "DUCTS" }
  panels { room: "Tower" name: "COY" }
  panels { room: "Tower" name: "LYNX" }
  panels { room: "Tower" name: "SCENTS (1)" }
  panels { room: "Tower" name: "SCENTS (2)" }
  panels { room: "Tower" name: "SEIZE (1)" }
  panels { room: "Tower" name: "SEIZE (2)" }
  panels { room: "Tower" name: "THROWN" }
  panels { room: "Tower" name: "FUND" }
  panels { room: "Tower" name: "ENVELOPE" }
  panels { room: "Tower" name: "ROTE" }
  panels { room: "Tower" name: "ENVELOPES" }
  panels { room: "Tower" name: "ERECTS" }
  panels { room: "Tower" name: "HIDE (1)" }
  panels { room: "Tower" name: "HUE" }
  panels { room: "Tower" name: "CRUST" }
  panels { room: "Tower" name: "HIDE (2)" }
  panels { room: "Tower" name: "BETTER" }
}
doors {
  name: "Context Panel"
  type: EVENT
  panels { room: "Tower" name: "Colors" }
}
doors {
  name: "Ending"
  type: EVENT
  panels { room: "Tower" name: "Context" }
}
>false); wxMenu *menuHelp = new wxMenu(); menuHelp->Append(wxID_ABOUT); menuHelp->Append(ID_CHECK_FOR_UPDATES, "Check for Updates"); wxMenuBar *menuBar = new wxMenuBar(); menuBar->Append(menuFile, "&File"); menuBar->Append(menuView, "&View"); menuBar->Append(menuHelp, "&Help"); SetMenuBar(menuBar); CreateStatusBar(); SetStatusText("Not connected to Archipelago."); Bind(wxEVT_MENU, &TrackerFrame::OnAbout, this, wxID_ABOUT); Bind(wxEVT_MENU, &TrackerFrame::OnExit, this, wxID_EXIT); Bind(wxEVT_MENU, &TrackerFrame::OnConnect, this, ID_CONNECT); Bind(wxEVT_MENU, &TrackerFrame::OnSettings, this, ID_SETTINGS); Bind(wxEVT_MENU, &TrackerFrame::OnCheckForUpdates, this, ID_CHECK_FOR_UPDATES); Bind(wxEVT_MENU, &TrackerFrame::OnZoomIn, this, ID_ZOOM_IN); Bind(wxEVT_MENU, &TrackerFrame::OnZoomOut, this, ID_ZOOM_OUT); Bind(wxEVT_NOTEBOOK_PAGE_CHANGED, &TrackerFrame::OnChangePage, this); Bind(STATE_RESET, &TrackerFrame::OnStateReset, this); Bind(STATE_CHANGED, &TrackerFrame::OnStateChanged, this); Bind(STATUS_CHANGED, &TrackerFrame::OnStatusChanged, this); achievements_pane_ = new AchievementsPane(this); wxChoicebook *choicebook = new wxChoicebook(this, wxID_ANY); choicebook->AddPage(achievements_pane_, "Achievements"); notebook_ = new wxNotebook(this, wxID_ANY); tracker_panel_ = new TrackerPanel(notebook_); subway_map_ = new SubwayMap(notebook_); notebook_->AddPage(tracker_panel_, "Map"); notebook_->AddPage(subway_map_, "Subway"); wxBoxSizer *top_sizer = new wxBoxSizer(wxHORIZONTAL); top_sizer->Add(choicebook, wxSizerFlags().Expand().Proportion(1)); top_sizer->Add(notebook_, wxSizerFlags().Expand().Proportion(3)); SetSizerAndFit(top_sizer); SetSize(1280, 728); if (!GetTrackerConfig().asked_to_check_for_updates) { GetTrackerConfig().asked_to_check_for_updates = true; if (wxMessageBox( "Check for updates automatically when the tracker is opened?", "Lingo AP Tracker", wxYES_NO) == wxYES) { GetTrackerConfig().should_check_for_updates = true; } else { GetTrackerConfig().should_check_for_updates = false; } GetTrackerConfig().Save(); } if (GetTrackerConfig().should_check_for_updates) { CheckForUpdates(/*manual=*/false); } } void TrackerFrame::SetStatusMessage(std::string message) { wxCommandEvent *event = new wxCommandEvent(STATUS_CHANGED); event->SetString(message.c_str()); QueueEvent(event); } void TrackerFrame::ResetIndicators() { QueueEvent(new wxCommandEvent(STATE_RESET)); } void TrackerFrame::UpdateIndicators() { QueueEvent(new wxCommandEvent(STATE_CHANGED)); } void TrackerFrame::OnAbout(wxCommandEvent &event) { wxAboutDialogInfo about_info; about_info.SetName("Lingo Archipelago Tracker"); about_info.SetVersion(kTrackerVersion.ToString()); about_info.AddDeveloper("hatkirby"); about_info.AddArtist("Brenton Wildes"); about_info.AddArtist("kinrah"); wxAboutBox(about_info); } void TrackerFrame::OnExit(wxCommandEvent &event) { Close(true); } void TrackerFrame::OnConnect(wxCommandEvent &event) { ConnectionDialog dlg; if (dlg.ShowModal() == wxID_OK) { GetTrackerConfig().connection_details.ap_server = dlg.GetServerValue(); GetTrackerConfig().connection_details.ap_player = dlg.GetPlayerValue(); GetTrackerConfig().connection_details.ap_password = dlg.GetPasswordValue(); std::deque<ConnectionDetails> new_history; new_history.push_back(GetTrackerConfig().connection_details); for (const ConnectionDetails &details : GetTrackerConfig().connection_history) { if (details != GetTrackerConfig().connection_details) { new_history.push_back(details); } } while (new_history.size() > 5) { new_history.pop_back(); } GetTrackerConfig().connection_history = std::move(new_history); GetTrackerConfig().Save(); AP_Connect(dlg.GetServerValue(), dlg.GetPlayerValue(), dlg.GetPasswordValue()); } } void TrackerFrame::OnSettings(wxCommandEvent &event) { SettingsDialog dlg; if (dlg.ShowModal() == wxID_OK) { GetTrackerConfig().should_check_for_updates = dlg.GetShouldCheckForUpdates(); GetTrackerConfig().hybrid_areas = dlg.GetHybridAreas(); GetTrackerConfig().show_hunt_panels = dlg.GetShowHuntPanels(); GetTrackerConfig().Save(); UpdateIndicators(); } } void TrackerFrame::OnCheckForUpdates(wxCommandEvent &event) { CheckForUpdates(/*manual=*/true); } void TrackerFrame::OnZoomIn(wxCommandEvent &event) { if (notebook_->GetSelection() == 1) { subway_map_->Zoom(true); } } void TrackerFrame::OnZoomOut(wxCommandEvent& event) { if (notebook_->GetSelection() == 1) { subway_map_->Zoom(false); } } void TrackerFrame::OnChangePage(wxBookCtrlEvent &event) { zoom_in_menu_item_->Enable(event.GetSelection() == 1); zoom_out_menu_item_->Enable(event.GetSelection() == 1); } void TrackerFrame::OnStateReset(wxCommandEvent& event) { tracker_panel_->UpdateIndicators(); achievements_pane_->UpdateIndicators(); subway_map_->OnConnect(); Refresh(); } void TrackerFrame::OnStateChanged(wxCommandEvent &event) { tracker_panel_->UpdateIndicators(); achievements_pane_->UpdateIndicators(); subway_map_->UpdateIndicators(); Refresh(); } void TrackerFrame::OnStatusChanged(wxCommandEvent &event) { SetStatusText(event.GetString()); } void TrackerFrame::CheckForUpdates(bool manual) { wxWebRequest request = wxWebSession::GetDefault().CreateRequest( this, "https://code.fourisland.com/lingo-ap-tracker/plain/VERSION"); if (!request.IsOk()) { if (manual) { wxMessageBox("Could not check for updates.", "Error", wxOK | wxICON_ERROR); } else { SetStatusText("Could not check for updates."); } return; } Bind(wxEVT_WEBREQUEST_STATE, [this, manual](wxWebRequestEvent &evt) { if (evt.GetState() == wxWebRequest::State_Completed) { std::string response = evt.GetResponse().AsString().ToStdString(); Version latest_version(response); if (kTrackerVersion < latest_version) { std::ostringstream message_text; message_text << "There is a newer version of Lingo AP Tracker " "available. You have " << kTrackerVersion.ToString() << ", and the latest version is " << latest_version.ToString() << ". Would you like to update?"; if (wxMessageBox(message_text.str(), "Update available", wxYES_NO) == wxYES) { wxLaunchDefaultBrowser( "https://code.fourisland.com/lingo-ap-tracker/about/" "CHANGELOG.md"); } } else if (manual) { wxMessageBox("Lingo AP Tracker is up to date!", "Lingo AP Tracker", wxOK); } } else if (evt.GetState() == wxWebRequest::State_Failed) { if (manual) { wxMessageBox("Could not check for updates.", "Error", wxOK | wxICON_ERROR); } else { SetStatusText("Could not check for updates."); } } }); request.Start(); }