Skip to content

Allow the ability for players to requeue before their match ends - #42

Open
crescendo-ss wants to merge 4 commits into
gigamon-dev:masterfrom
crescendo-ss:early-requeue
Open

Allow the ability for players to requeue before their match ends#42
crescendo-ss wants to merge 4 commits into
gigamon-dev:masterfrom
crescendo-ss:early-requeue

Conversation

@crescendo-ss

@crescendo-ss crescendo-ss commented Apr 16, 2026

Copy link
Copy Markdown
Contributor

Sometimes there could be a situation where any number of players (up to 6) could be knocked out in a practice and there's a duel ongoing to decide the victor. In that case the 6 players are sort of locked in a state where they must wait for the duel to conclude before starting a new match, which could hypothetically take 20+ minutes. Instead of that, allow players to requeue after they have been KO'd. But this does not bypass the timeout punishment due to dying out too quickly ("reneg").

There's an option to configure a minimum CooldownPeriod that they must wait after getting eliminated before they can queue in another match.

This change builds upon PR #41

OpenSkill rating updates are applied correctly for any permutation of match ordering finishes in this new scheme.

@crescendo-ss crescendo-ss changed the title Early requeue Allow the ability for players to requeue before their match ends Apr 16, 2026
@crescendo-ss crescendo-ss moved this from Backlog to In progress in Matchmaking, Game Modes, Leagues Apr 16, 2026
@crescendo-ss crescendo-ss moved this from In progress to In review in Matchmaking, Game Modes, Leagues Apr 16, 2026
@gigamon-dev

Copy link
Copy Markdown
Owner

I feel like the goal of this PR is something that will be quite complicated to achieve. Here are some issues, though there are probably more that I haven't thought of:

  1. It's forcing the game mode to release the player. It probably should ask the game mode to release the player. The game mode would then check if the player can be released (match is "In Progress", player's slot is KO'd, etc..). The game mode could also ask advisors if the player can be released. The RecklessPlayPenalty could be one of these advisors. Also, consider if the KoRequeue module really should be calling the IPlayManager.UnsetPlaying* method or if it's the game mode's
    (TeamVersus module's) job? It almost seems like KoRequeue is not required, though TeamVersus is already bloated.

    If a separate module (KoRequeue) needs to ask the the game mode to release the player, instead of IKoEarlyRequeue, consider adding a method to SS.Matchmaking.TeamVersus.IMatchData or SS.Matchmaking.IMatch (if not limiting to TeamVersus).

bool TryReleasePlayer(Player player, StringBuilder? errorMessage);

To implement this method, the TeamVersusMatch.MatchData would need to hold a reference to its parent, TeamVersusMatch.

  1. It's using the TeamVersusMatchPlayerKilledCallback which occurs in the middle of processing a kill. Yes, the timer is an attempt to work around that. However, it probably should be something that happens after the player is changed to spec. So, perhaps a new PlayerKnockedOut callback in (MainloopTimer_ProcessKnockOut)?

  2. How will this affect MatchFocus?

    • If the player is released, the player should no longer be considered "playing" in the match. TeamVersus would need to call the MatchRemovePlayingCallback, which is called when the slot is unassigned. It's a KO'd slot and probably should not be unassigned. Otherwise, a side effect would be that this would remove the player's name from the statbox. So, a separate call to MatchRemovePlayingCallback would probably be needed when the player is released.
    • Should the player continue to receive notifications of the original match? Perhaps just the final chart when the match ends?
  3. Again, like PR Add an option to punish players who die out quickly -- they are put on timeout from queuing #41, the KoRequeue module is arena-based, which places unnecessary limitations. It should be match-based.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

Status: In review

Development

Successfully merging this pull request may close these issues.

2 participants