Skip to content

Add Popup Siege as a Desktop Mode game extension - #450

Merged
AllTerrainDeveloper merged 2 commits into
WordPress:trunkfrom
nickhamze:feat/popup-siege-game
Jul 31, 2026
Merged

Add Popup Siege as a Desktop Mode game extension#450
AllTerrainDeveloper merged 2 commits into
WordPress:trunkfrom
nickhamze:feat/popup-siege-game

Conversation

@nickhamze

Copy link
Copy Markdown
Collaborator

Summary

  • adds Popup Siege 0.7.0 as the standalone desktop-mode-popup-siege companion plugin
  • registers it through the public Desktop Mode Games API with unified leaderboard, play-time, and score-to-beat challenge support
  • preserves the deterministic runtime, release tests, generated-art provenance, and native-size presentation evidence from the finished OpenStation build
  • adds a focused production zip, Playground staging, and CI coverage for the extension

Popup Siege playing in its supported desktop layout

Why

Popup Siege was complete as an OpenStation Game Lab release, but it was still wrapped in the broader lab plugin. This packages the exact game as an independently installable Desktop Mode extension and uses the current public game contract rather than carrying the old lab compatibility layer.

Implementation notes

  • The PHP manifest registers discovery and scoreboard metadata on init; the adapter and game runtime remain lazy until the player presses Play.
  • The adapter uses Desktop Mode’s shared PixiJS module, owns a fresh mount per launch, pauses for hidden/minimized windows, submits one frozen terminal payload, and tears down its observers, listeners, game controller, and audio owner on every close path.
  • Server validation requires the exact 20-key rules-v3 terminal schema and recomputes popup identity/order, objectives, restoration, bonuses, terminal invariants, and final score.
  • The released adapter, deterministic runtime, top-level stylesheet, and generated art are hash-pinned. The runtime rebuilds deterministically from 21 versioned inputs.
  • .distignore keeps tests, build inputs, and evidence in the repository while producing a 1.4 MB installable zip containing only runtime files. bin/package-extensions.sh now accepts an optional extension slug so CI can package and inspect that exact artifact without fetching unrelated extension vendors.
  • The Playground blueprint enables Games and stages Popup Siege automatically after merge.

Testing

  • npm run build
  • npm run lint
  • npx tsc --noEmit
  • npm run test:js — 2,499 passed
  • npm --prefix extensions/desktop-mode-popup-siege run check — deterministic rebuild, pinned hashes, and JS syntax passed
  • node --test extensions/desktop-mode-popup-siege/tests/*.test.js — 41 passed
  • php extensions/desktop-mode-popup-siege/tests/registration-smoke.php — passed
  • Popup Siege PHPCS ruleset — clean
  • npm run test:php — 1,678 passed, 4,295 assertions, 3 expected skips
  • packaged with ./bin/package-extensions.sh <out> desktop-mode-popup-siege; zip integrity and production inventory checked
  • installed and activated the packaged zip in WordPress; confirmed popup-siege, five score columns, asset version 0.7.0, and lazy script registration without eager enqueue
  • WordPress Plugin Check 2.0.0 on the packaged plugin — no errors

Reviewer QA

  1. Run ./bin/package-extensions.sh /tmp/popup-siege-pr desktop-mode-popup-siege.
  2. Install and activate Desktop Mode plus /tmp/popup-siege-pr/desktop-mode-popup-siege.zip.
  3. Enable Games in OS Settings → Features → Extended options.
  4. Open Games → Popup Siege and verify a Free Play run loads only on Play, pauses while minimized, reaches Results, and saves to the unified scoreboard.
  5. Launch an accepted score challenge and verify the target appears, tie copy is strict, one result is submitted, and replay is hidden after the challenge run.
  6. Close during Menu, Play, Pause, and Results and confirm no audio or animation continues after the window closes.

Evidence boundary

The preserved native approval covers one 1536×960 playing-state frame: hierarchy, alignment, legibility, clipping, overlap, and target priority. It does not prove responsive layouts, alternate states, interaction, animation, audio quality, or fun. Fresh unfamiliar-player fun testing and a human audio-listening pass remain explicitly pending.

@AllTerrainDeveloper AllTerrainDeveloper left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It works nicely, but I love this kind of game in the past (Arkanoid 2 fan here) and I remember the bounce of the ball was predictable, it was a calculation of the direction of the ball and where hit in the pad.

Image

@AllTerrainDeveloper
AllTerrainDeveloper merged commit 34cc720 into WordPress:trunk Jul 31, 2026
6 checks passed
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.

2 participants