about summary refs log tree commit diff stats
Commit message (Expand)AuthorAgeFilesLines
* [Client] Changed version formatStar Rauchenberger2025-09-092-2/+3
* [Apworld] Add version numberStar Rauchenberger2025-09-091-0/+3
* [Client] Handle symbol shuffleStar Rauchenberger2025-09-095-0/+159
* Added symbol shuffleStar Rauchenberger2025-09-0914-20/+167
* Merge branch 'main' of fourisland.com:/srv/git/lingo2-archipelagoStar Rauchenberger2025-09-096-4/+32
|\
| * Made sure the apworld unit tests passStar Rauchenberger2025-09-085-4/+20
| * [Apworld] Added item/location groupsStar Rauchenberger2025-09-082-0/+12
* | [Client] Remove door behind X1Star Rauchenberger2025-09-091-0/+5
|/
* Fixed links to repo??Star Rauchenberger2025-09-083-7/+7
* Started writing READMEsStar Rauchenberger2025-09-084-0/+174
* Added godobuf fork to repositoryStar Rauchenberger2025-09-0811-0/+3142
* [Data] Tweak owl logicStar Rauchenberger2025-09-082-10/+35
* Downgrade protobufStar Rauchenberger2025-09-084-6/+5
* [Client] Prevent text client on connection screenStar Rauchenberger2025-09-083-1/+13
* [Client] Handle lavender cubesStar Rauchenberger2025-09-081-1/+4
* Added lavender cubes logicStar Rauchenberger2025-09-0812-16/+53
* [Client] Handle cyan door behaviorStar Rauchenberger2025-09-082-19/+52
* [Data] the_great/BYE is behind a "cyan door"Star Rauchenberger2025-09-083-0/+11
* Add cyan door behavior optionStar Rauchenbergerpre { line-height: 125%; } td.linenos .normal { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; } span.linenos { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; } td.linenos .special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; } span.linenos.special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; } .highlight .hll { background-color: #ffffcc } .highlight .c { color: #888888 } /* Comment */ .highlight .err { color: #a61717; background-color: #e3d2d2 } /* Error */ .highlight .k { color: #008800; font-weight: bold } /* Keyword */ .highlight .ch { color: #888888 } /* Comment.Hashbang */ .highlight .cm { color: #888888 } /* Comment.Multiline */ .highlight .cp { color: #cc0000; font-weight: bold } /* Comment.Preproc */ .highlight .cpf { color: #888888 } /* Comment.PreprocFile */ .highlight .c1 { color: #888888 } /* Comment.Single */ .highlight .cs { color: #cc0000; font-weight: bold; background-color: #fff0f0 } /* Comment.Special */ .highlight .gd { color: #000000; background-color: #ffdddd } /* Generic.Deleted */ .highlight .ge { font-style: italic } /* Generic.Emph */ .highlight .ges { font-weight: bold; font-style: italic } /* Generic.EmphStrong */ .highlight .gr { color: #aa0000 } /* Generic.Error */ .highlight .gh { color: #333333 } /* Generic.Heading */ .highlight .gi { color: #000000; background-color: #ddffdd } /* Generic.Inserted */ .highlight .go { color: #888888 } /* Generic.Output */ .highlight .gp { color: #555555 } /* Generic.Prompt */ .highlight .gs { font-weight: bold } /* Generic.Strong */ .highlight .gu { color: #666666 } /* Generic.Subheading */ .highlight .gt { color: #aa0000 } /* Generic.Traceback */ .highlight .kc { color: #008800; font-weight: bold } /* Keyword.Constant */ .highlight .kd { color: #008800; font-weight: bold } /* Keyword.Declaration */ .highlight .kn {
* [Client] Handle letter shuffleStar Rauchenberger2025-09-069-15/+345
* [Apworld] Added letter shuffleStar Rauchenberger2025-09-065-27/+114
* [Client] Client pause mode?Star Rauchenberger2025-09-051-0/+2
* [Data] Replaced Symbolic Entrance with single doorStar Rauchenberger2025-09-053-45/+19
* [Client] Maybe for real fixed the crash on connectStar Rauchenberger2025-09-051-2/+1
* [Client] Fixed external names in messages popupStar Rauchenberger2025-09-041-8/+8
* [Client] Handle roof access optionStar Rauchenberger2025-09-042-1/+3
* [Data] Strip unnecessary AP IDsStar Rauchenberger2025-09-045-35/+208
* Renamed filler item to "A Job Well Done"Star Rauchenberger2025-09-033-4/+8
* Added option for Daedalus roof access logicStar Rauchenberger2025-09-039-0/+343
* [Client] Handle keyholder sanityStar Rauchenberger2025-09-022-2/+28
* Added keyholder sanityStar Rauchenberger2025-09-0233-8/+183
* [Client] Handle progressive doorsStar Rauchenberger2025-09-017-63/+99
* [Client] Fix intermittent crash on connectStar Rauchenberger2025-09-011-1/+1
* [Data] Question Room What proxies were mislabeledStar Rauchenberger2025-09-011-5/+5
* Added progressive doorsStar Rauchenberger2025-09-0115-38/+219
* [Data] Fixed Rainbow Rooms logicStar Rauchenberger2025-09-012-18/+20
* [Client] Display message when goalingStar Rauchenberger2025-09-011-0/+2
* [Data] Some more double letters fixesStar Rauchenberger2025-09-014-1/+9
* [Client] Handle triggering goalStar Rauchenberger2025-09-015-3/+51
* [Client] Batch sending locations on map loadStar Rauchenberger2025-08-313-1/+27
* [Client] Restrict Daedalus roof accessStar Rauchenberger2025-08-311-0/+50
* [Client] Keyholders in locationsStar Rauchenberger2025-08-311-0/+19
* [Data] Couple of renamesStar Rauchenberger2025-08-314-2/+4
* [Apworld] Added options to slot dataStar Rauchenberger2025-08-311-0/+11
* [Apworld] Better handling of White EndingStar Rauchenberger2025-08-311-2/+14
span>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(STATE_CHANGED, &TrackerFrame::OnStateChanged, this); Bind(STATUS_CHANGED, &TrackerFrame::OnStatusChanged, this); wxChoicebook *choicebook = new wxChoicebook(this, wxID_ANY); achievements_pane_ = new AchievementsPane(this); choicebook->AddPage(achievements_pane_, "Achievements"); tracker_panel_ = new TrackerPanel(this); wxBoxSizer *top_sizer = new wxBoxSizer(wxHORIZONTAL); top_sizer->Add(choicebook, wxSizerFlags().Expand().Proportion(1)); top_sizer->Add(tracker_panel_, wxSizerFlags().Expand().Proportion(3)); SetSizerAndFit(top_sizer); 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::UpdateIndicators() { QueueEvent(new wxCommandEvent(STATE_CHANGED)); } void TrackerFrame::OnAbout(wxCommandEvent &event) { std::ostringstream message_text; message_text << "Lingo Archipelago Tracker " << kTrackerVersion << " by hatkirby"; wxMessageBox(message_text.str(), "About lingo-ap-tracker", wxOK | wxICON_INFORMATION); } void TrackerFrame::OnExit(wxCommandEvent &event) { Close(true); } void TrackerFrame::OnConnect(wxCommandEvent &event) { ConnectionDialog dlg; if (dlg.ShowModal() == wxID_OK) { GetTrackerConfig().ap_server = dlg.GetServerValue(); GetTrackerConfig().ap_player = dlg.GetPlayerValue(); GetTrackerConfig().ap_password = dlg.GetPasswordValue(); 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::OnStateChanged(wxCommandEvent &event) { tracker_panel_->UpdateIndicators(); achievements_pane_->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 << ", and the latest version is " << latest_version << ". 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(); }