Attempt to implement Random Map Survival Together#155
Attempt to implement Random Map Survival Together#155monsonjeremy wants to merge 11 commits intoGreepTheSheep:mainfrom
Conversation
…andom * 'main' of https://github.com/monsonjeremy/openplanet-MXRandom: Update src/Interface/Views/RMCMenu.as
|
Thank you so much for the PR, I really appreciate it. While I won't be able to fully test it right away due to other projects, I will test it soon and see how well it works and post any issues I find here, if there's any Thanks again! |
Co-authored-by: Philippe <phil.hebert14@gmail.com>
Co-authored-by: Philippe <phil.hebert14@gmail.com>
|
I just tested the mode in a server. It works as expected, but I had an issue where it changed to a new map with only 2 seconds left when the mode was at max timer. I will post a video of it tomorrow, with a review and code suggestions (unrelated to this issue, I don't know the exact cause sadly). As always, appreciate the help! |
Fort-TM
left a comment
There was a problem hiding this comment.
Those are the things I noticed at the moment. If there's anything you are not sure of how to implement, let me know and I can help
I will also upload a video with the issue I mentioned later
There was a problem hiding this comment.
This dialog doesn't seem to be used anywhere
| UI::PushFont(Fonts::Header); | ||
| UI::Text("How RMST works"); | ||
| UI::PopFont(); | ||
| UI::Markdown( | ||
| "**Collaborative Survival:**\n" + | ||
| "- All players share the same timer and work as a team\n" + | ||
| "- When **any player** gets a goal medal, the **entire team** gets +3 minutes\n" + | ||
| "- When **any player** skips a map, the **entire team** loses -1 minute\n" + | ||
| "- The session ends when the shared timer reaches 0\n\n" + | ||
| "**Team Progress Tracking:**\n" + | ||
| "- Team achievements (total medals and skips) are shared\n" + | ||
| "- Individual contributions are tracked for recognition\n" + | ||
| "- MVP is determined by individual goals vs skips ratio\n" + | ||
| "- Real-time team progress updates\n\n" | ||
| ); | ||
| UI::Separator(); |
There was a problem hiding this comment.
I don't think it's necessary to explain how the gamemode works
| UI::Text("Tips for a successful RMST session"); | ||
| UI::PopFont(); | ||
| UI::Markdown( | ||
| "- **True teamwork:** Any team member getting a goal medal helps everyone!\n" + | ||
| "- **Coordinate skips:** Discuss as a team before anyone skips a difficult map\n" + | ||
| "- **Divide and conquer:** Players can focus on different types of maps they're good at\n" + | ||
| "- **Watch the shared timer:** Keep track of team time and plan accordingly\n" + | ||
| "- **Use voice chat:** Communication is crucial for team coordination\n" + | ||
| "- **Celebrate together:** Every goal medal is a team achievement!\n" + | ||
| "- **Support each other:** Help teammates learn difficult sections\n\n" |
|
|
||
| // Handle SurvivalTogether mode separately to avoid conflict with Survival | ||
| if (RMC::selectedGameMode == RMC::GameMode::SurvivalTogether) { | ||
| gameMode = "RMST"; | ||
| } | ||
|
|
There was a problem hiding this comment.
This is not necessary because we don't create save files for online modes. The Start function in GlobalProperties is only called for RMS, RMC, RMO, etc.
|
|
||
| // Handle SurvivalTogether mode separately to avoid conflict with Survival | ||
| if (RMC::selectedGameMode == RMC::GameMode::SurvivalTogether) { | ||
| gameMode = "RMST"; | ||
| } | ||
|
|
| void BetterChatSendLeaderboard() { | ||
| #if DEPENDENCY_BETTERCHAT | ||
| if (m_playerScores.Length == 0) return; | ||
|
|
||
| m_playerScores.SortDesc(); | ||
| string leaderboard = Icons::Users + " RMST Team Results:\n"; | ||
| leaderboard += "Team Achievement: " + tostring(RMC::GoalMedalCount) + " " + tostring(PluginSettings::RMC_GoalMedal) + " medals, " + Skips + " skips\n"; | ||
| leaderboard += "Individual Contributions:\n"; | ||
|
|
||
| for (uint i = 0; i < Math::Min(m_playerScores.Length, 5); i++) { | ||
| RMSTPlayerScore@ player = m_playerScores[i]; | ||
| leaderboard += (i+1) + ". " + player.name + ": " + player.goals + " goals, " + player.skips + " skips\n"; | ||
| } | ||
|
|
||
| BetterChat::SendChatMessage(leaderboard); | ||
| #endif | ||
| } |
| } | ||
| } | ||
|
|
||
| void RenderPlayingButtons() { |
There was a problem hiding this comment.
| void RenderPlayingButtons() { | |
| void RenderPlayingButtons() override { |
| // For now, empty implementation | ||
| } | ||
|
|
||
| void RenderCurrentMap() { |
There was a problem hiding this comment.
| void RenderCurrentMap() { | |
| void RenderCurrentMap() override { |
| #endif | ||
| } | ||
|
|
||
| void RenderCustomSearchWarning() { |
There was a problem hiding this comment.
| void RenderCustomSearchWarning() { | |
| void RenderCustomSearchWarning() override { |
There was a problem hiding this comment.
In general, there's no need to keep track of individual skips, only the host can skip maps
|
And here's the video I promised Trackmania.-.2025-06-07.21-05-19.mp4 |
I used Cursor to do most of the work so I don't know how well it will work to be honest. I'm not an approved developer so i can't test it out, if you want to test it out locally that would be cool.