Skip to content

Net victory screen + Cliffs teleport pads in networked matches - #262

Merged
Vodkadav merged 2 commits into
mainfrom
feat/net-teleport-pads
Jul 17, 2026
Merged

Net victory screen + Cliffs teleport pads in networked matches#262
Vodkadav merged 2 commits into
mainfrom
feat/net-teleport-pads

Conversation

@Vodkadav

Copy link
Copy Markdown
Owner

Two stacked slices from the 2026-07-17 parallel batch (the teleport-pads branch is based on feat/net-victory-screen, so this PR carries both; squash-merging it closes both items and feat/net-victory-screen needs no separate PR).

Net victory screen (8c57885)

  • Networked matches now end with the real victory screen v2 on BOTH host and guest — standing (survivors first, then reverse elimination), damage-taken (ascending), and repairs sheets, champion ribbon, Rematch (lobby host) / Leave buttons.
  • Zero wire-protocol change: new pure-C# NetMatchStats books per-tank hp identically on each peer (host from world tanks, guest from snapshots), so rankings agree everywhere. Worker untouched.
  • Solo screen extracted into a shared VictoryScreen component (Arena3DScene −399 lines).

Cliffs teleport pads online (6ef28e7)

  • Root cause: host tanks were never given a teleporter: — pads simply did not exist in the authoritative net world. New shared AuthoredTeleporter derivation used by solo and net scenes.
  • Warps ride the existing TankState X/Y/Layer — zero wire change. PredictedTank reconciliation handles the jump natively (characterised by a new test); fixed a real guest bug where the local view-model never synced Layer (own cross-layer warp rendered at valley elevation).
  • Pad rings render on both roles. Generated/non-authored net maps still have no pads (gameplay decision, deferred).

Verified independently: xUnit 14/69/562/54; headless GoDotTest 193 passed / 0 failed (S2 alone: 190/0).

🤖 Generated with Claude Code

Daniel Machado and others added 2 commits July 17, 2026 07:55
…hange

Networked matches now end with the victory screen v2 instead of just the
winner banner, on host and guest alike:

- VictoryScreen: the solo arena's screen extracted into one reusable
  component (ribbon + IS VICTORIOUS!, nav-switched ranking sheets on the
  plaque, styled button bar); Arena3DScene now feeds it its BattleStats
  sheets and buttons — same nodes, same look.
- NetMatchStats (pure C#, TDD): both roles book the same per-tank hp
  stream (host from its world each tick, guest from every snapshot), so
  final standing, damage taken and repairs derive identically on every
  peer — zero protocol change, no stats bytes on the wire.
- NetArena3DScene: on round decide both roles raise the screen ranked
  from that book; the card carries the online affordances (lobby host:
  Rematch sending the same lobby command; everyone: Leave) and the corner
  buttons hide beneath it. Return-to-room on the rematch reset unchanged.
- Locale: stats.standing + net.team_label (EN/ES/DK).
- Tests: 6 xUnit NetMatchStats + 3 GoDotTest end-of-match scene tests;
  full suites green (xUnit 695, GoDotTest 190).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
The net arena never gave its host tanks a teleporter, so pads that work
in solo play were inert cabling in a networked match. Now:

- AuthoredTeleporter (GameLogic): the shared pad derivation — authored
  cell links + grid layers -> world-space Teleporter pads — used by both
  Arena3DScene (refactored, no behaviour change) and NetArena3DScene, so
  every peer derives identical pads from the shared map resolution.
  ZERO wire change: warps ride the existing snapshot position/layer.
- NetArena3DScene: host tanks get the teleporter (warps resolve inside
  the authoritative World.Step), pad cooldowns age per fixed tick, both
  roles render the pad rings, and SyncLocalFromPrediction now copies the
  predicted Layer so a guest's own cross-layer warp lifts its tank view.
- Guest prediction needs no fix: Reconcile hard-snaps to authority and
  replays unacked inputs from the destination, so a teleport-sized jump
  lands cleanly (characterised in PredictedTankTests).

Tests: xUnit AuthoredTeleporterTests (3) + PredictedTank teleport-jump
reconcile; GoDotTest: net Cliffs pad rings, end-to-end relayed-tank
warp across the map and up a layer, guest own-layer sync.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Vodkadav pushed a commit that referenced this pull request Jul 17, 2026
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@Vodkadav
Vodkadav merged commit 76eafee into main Jul 17, 2026
8 checks passed
@Vodkadav
Vodkadav deleted the feat/net-teleport-pads branch July 17, 2026 07:25
Vodkadav added a commit that referenced this pull request Jul 17, 2026
* PROGRESS: record 2026-07-17 parallel batch (SFX overhaul, net victory screen, net teleport pads, perf check)

Three branches pushed pending owner merge + SFX ear-check; perf verdict recorded.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

* PROGRESS: cite PRs #261/#262 for the 2026-07-17 batch

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

---------

Co-authored-by: Daniel Machado <au280502@uni.au.dk>
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant