Added

  • Prototype win screen: a prototype can declare a top-level win_state (distinct from per-floor win_conditions) that ends the game when met. The win screen fills the canvas with white full-block tiles running the new gradient_wave color-cycle effect (horizontal red/gold/blue bands scrolling upward) and writes the completion message in letter tiles over it. Terminal — input and turns lock. Demoed on the Combat Arena (arena.html): defeat the Minotaur to win. Designed to display tracked stats (kills, gold, etc.) on the screen later.
  • Reusable gradient_wave effect: a new data-driven effect primitive (in effects.js + data/effects.json) that tints sprites with scrolling horizontal color bands from an arbitrary colors palette (cycled as a ring). Available to any prototype or actor like the other named effects.
  • Roguelike amulet-escape win: the dungeon prototype now has the classic win condition. The Amulet of Yendor spawns on the last floor; carry it back to floor 1 and use the sealed exit to win (“You have escaped with the Amulet of Yendor”). The floor-1 up-stairway is the locked escape exit — bumping it without the amulet rejects you (“The exit is sealed. You need the Amulet of Yendor.”), and an authored up_stairway placed on the map is automatically converted to the sealed exit (locked, solid, and re-skinned to the Sealed Stairs sprite), so designers can position it freely. Implemented as an escape-style win_state (via: "escape"), an extension of the win-screen system above — the escape is triggered deliberately by using the exit, not the instant the amulet is picked up. The dungeon’s old caverns transition is removed; the amulet is now the only way out.

Fixed

  • Silent loading events: events that fire while a level is loading (before the player clicks to start play) no longer leak sounds or messages — fixes the spurious “The Sealed Stairs opens.” that printed at game start for levels with authored locked stairways.
  • Escape exit no longer unlocked by floor win conditions: the dungeon’s floor-1 escape exit is gated solely by the amulet (the prototype win_state), so it is now exempt from the per-floor win-condition lock/unlock system — previously, satisfying floor 1’s (empty) win_conditions by, e.g., killing a monster would wrongly open it. The sealed look and lock also persist correctly when returning to floor 1 after descending.