Skip to content

[Feat] Roguelike wave-run prototype with CTF infrastructure#308

Merged
Mere-Solace merged 15 commits into
devfrom
feat/roguelike-prototype-268
Mar 29, 2026
Merged

[Feat] Roguelike wave-run prototype with CTF infrastructure#308
Mere-Solace merged 15 commits into
devfrom
feat/roguelike-prototype-268

Conversation

@Mere-Solace

Copy link
Copy Markdown
Owner

Summary

This PR implements a complete roguelike wave-run gamemode with capture-the-flag (CTF) infrastructure. The branch brings together 14 commits featuring:

  • Roguelike wave-run system ([Feat] Roguelike instance system — procedural room-based dungeon runs #268): Core prototype with 5-minute timeout and per-mob damage logging
  • CTF full infrastructure ([Feat] Capture the Flag — full gamemode infrastructure #280): Flag entity management, team-based respawn, scoring system, and banner displays
  • Gamemode improvements: Fixed timer (now 1000ms period), null score handling, and friendly fire suppression via scoreboard tags
  • Error handling: New ErrorListener with safe remove and display spawning/removal safeguards
  • Bug fixes: NaN boss bar progress, display group unregister timing, combo registration predicates
  • Menu refactoring: Reorganized dev menus into dedicated /dev folder with stop-run button in MainMenu

Related Issues

Testing

Manual testing via /gradlew runServer — verify:

  • Roguelike wave runs start/end correctly and log mob damage
  • CTF flag picking, dropping, scoring, and team respawn work
  • MainMenu displays stop-run button when roguelike active
  • Display groups unregister without Paper chunk-lock warnings

- RoguelikeRun gamemode: 3-wave PvE (pillagers → wither skeletons → mixed),
  configurable spawn center and radius, TextDisplay reward chest on completion
- Config.Roguelike section: spawn world/X/Y/Z, radius, per-wave enemy counts
- QueueManager: register roguelike queue, start solo run immediately on enqueue
- MainMenu: Wither Skeleton Skull queue button paired with CTF button
- TODO #285: distribute MiscItems once consumable item system is built
- Reduce RoguelikeRun safety cap from 15 min to 5 min (300 s)
- Add DamageEntry record to Hostile tracking attacker UUID, name,
  weapon (SwordItemType), shard damage, and toughness damage
- Override hit() in Hostile to append entries only when the hit
  actually lands (guarded by invulnerability-window check)
# Conflicts:
#	src/main/java/btm/sword/gamemode/QueueManager.java
Add SwordTeam enum (RED/BLUE/GREEN/YELLOW) backed by Bukkit scoreboard
tags. SwordEntity.hit() skips damage when attacker and defender share
a team tag. Assignments: Hostile → RED, SwordPlayer → BLUE,
Passive → GREEN. joinTeam() / getTeam() exposed on SwordEntity.
…, scoring, banner-on-head (#280)

- Config.Ctf: spawn coords, flag return timer, respawn delay, capture threshold, carrier slow config
- CtfTeam enum: RED/BLUE with banner factory (patterned banners), spawn locations from config
- FlagEntity: IDLE/CARRIED/DROPPED state machine, ArmorStand visual at base, banner-on-head carrier effect, auto-return timer
- CaptureTheFlag1v1 rewrite: proper lifecycle, 5s respawn with team-spawn return, first-to-N or timer win, score messaging
- QueueManager: CTF 2-player queue wired, activeMatches map for death routing, startCtfDebug() bypass
- PlayerListener: routes death events to active CTF match for flag drop + respawn scheduling
- CommonConstraints: NOT_CARRYING_FLAG stub (pending global context constraint refactor)
- Prefab.PotionEffects: FLAG_CARRIER_SLOW (config-backed Slowness II applied to flag carriers)
- DevMenu: "Start CTF (Solo Debug)" button — bypasses queue, instant launch for one player
@Mere-Solace Mere-Solace self-assigned this Mar 29, 2026
@Mere-Solace Mere-Solace added type: feat New feature size: l Large, multiple days priority: high High priority status: testing labels Mar 29, 2026
@Mere-Solace Mere-Solace merged commit fda7a6f into dev Mar 29, 2026
1 check passed
@Mere-Solace Mere-Solace deleted the feat/roguelike-prototype-268 branch March 29, 2026 17:22
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

priority: high High priority size: l Large, multiple days status: testing type: feat New feature

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant