Skip to content

feat(pass): let players earn and redeem slender passes in the lobby - #435

Merged
theEvilReaper merged 15 commits into
mainfrom
feat/slender-pass
Oct 27, 2026
Merged

theEvilReaper merged 15 commits into
mainfrom
feat/slender-pass

Conversation

@TheMeinerLP

@TheMeinerLP TheMeinerLP commented Oct 27, 2026 •

Copy link
Copy Markdown
Contributor

Proposed changes

Until now the Slender was always drawn at random, so a player who really wanted to hunt could wait many rounds without ever getting the role. Like the traitor passes back in TTT, players can now redeem a slender pass in the lobby and are sure to play the Slender in the next round.

In the lobby a new item shows how many passes a player has. A right click (or /pass) reserves the role, a second click (or /pass cancel) gives it back. Only one player per round can reserve: whoever comes first gets it, everyone else keeps their pass and is told the role is taken. The lobby learns that a pass was redeemed, but not by whom, so the Slender stays a secret. The pass is only spent when the round really starts with that player as the Slender. A player who leaves the lobby or whose round never starts keeps it. If the Slender leaves mid-round, the replacement is still drawn at random.

Players get passes in three ways:

  • Admins (and the console) hand them out with /pass give|take|set <player> <amount> (cygnus.pass.admin), for events, the shop or support.
  • After ten survivor rounds played to the end without being the Slender, a player earns a pass on their own.
  • Ranks can get a monthly quota through the LuckPerms meta cygnus.slender-pass.monthly-quota, credited on the first lobby join of each month.

Earned and quota passes stop at five (pass.max-balance), admin grants do not. Passes are stored in the statistics database next to the yearly statistics, with a ledger of every change. A GDPR deletion removes them too. Without a database the feature stays hidden and /pass says it is unavailable.

Types of changes

What types of changes does your code introduce to this project?
Put an x in the boxes that apply

  • Bugfix (non-breaking change which fixes an issue)
  • New feature (non-breaking change which adds functionality)
  • Breaking change (fix or feature that would cause existing functionality to not work as expected)
  • Documentation Update (if none of the other choices apply)

Checklist

Put an x in the boxes that apply. You can also fill these out after creating the PR. If you're unsure about any of
them, don't hesitate to ask. We're here to help! This is simply a reminder of what we are going to look for before
merging your code.

  • I have read the CONTRIBUTING.md
  • I have added tests that prove my fix is effective or that my feature works
  • I have added necessary documentation (if appropriate)

Further comments

The plan behind this pull request, the OpenSpec changes add-slender-pass (redeeming) and add-slender-pass-earning (earning), is reviewed separately in #436 to keep this diff to the code.

The role is handed out at once when the round starts, and the pass is spent right after in the background, so a slow database never holds up the round start. The only way this spend can fail is an admin taking the last pass in that very moment. The player then keeps the role for that round, and the failure is logged.

Still open: a live test against a real server with PostgreSQL. The admin commands also only find players who are online.

@github-actions github-actions Bot added area: game Everything related to the the game module area: docs Everything related to documentation area: common labels Oct 27, 2026
@github-actions

github-actions Bot commented Oct 27, 2026 •

Copy link
Copy Markdown
Contributor

Test results

  870 files    870 suites   7m 21s ⏱️
2 272 tests 2 270 ✅ 2 💤 0 ❌
6 816 runs  6 809 ✅ 7 💤 0 ❌

Results for commit 34bb1dd.

♻️ This comment has been updated with latest results.

@github-actions

This comment has been minimized.

@github-actions

This comment has been minimized.

@github-actions

This comment has been minimized.

@github-actions

This comment has been minimized.

@github-actions

This comment has been minimized.

@github-actions

This comment has been minimized.

@theEvilReaper
theEvilReaper merged commit 4eaf9cb into main Oct 27, 2026
8 checks passed
@theEvilReaper
theEvilReaper deleted the feat/slender-pass branch October 27, 2026 16:07
@theEvilReaper theEvilReaper added this to the v2.21.0 milestone Oct 27, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

area: common area: docs Everything related to documentation area: game Everything related to the the game module

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants