1class WinScene extends Phaser.Scene { 2 constructor() { 3 super({ key: "WinScene" }); 4 } 5 6 create(data) { 7 const finalScore = data && typeof data.score === "number" ? data.score : 0; 8 9 this.add.rectangle(CW / 2, CH / 2, CW, CH, 0x000000); 10 this.add 11 .text(CW / 2, 86, "Ladies and Gentlemen, we have safely landed.", { 12 fontFamily: '"Press Start 2P"', 13 fontSize: "10px", 14 color: "#FFFFFF", 15 }) 16 .setOrigin(0.5); 17 this.add 18 .text(CW / 2, 132, "DOORS TO MANUAL", { 19 fontFamily: '"Press Start 2P"', 20 fontSize: "22px", 21 color: "#00FF7F", 22 }) 23 .setOrigin(0.5); 24 this.add 25 .text(CW / 2, 178, `FINAL SCORE: ${finalScore}`, { 26 fontFamily: '"Press Start 2P"', 27 fontSize: "12px", 28 color: "#FFFF44", 29 }) 30 .setOrigin(0.5); 31 32 const playAgainY = 226; 33 let didRestart = false; 34 const restartToStart = () => { 35 if (didRestart || !this.scene.isActive("WinScene")) return; 36 didRestart = true; 37 this.scene.start("CharacterSelectScene"); 38 }; 39 40 const playAgain = this.add 41 .text(CW / 2, playAgainY, "PLAY AGAIN", { 42 fontFamily: '"Press Start 2P"', 43 fontSize: "12px", 44 color: "#00FF7F", 45 backgroundColor: "#10251a", 46 padding: { x: 14, y: 10 }, 47 }) 48 .setOrigin(0.5) 49 .setInteractive({ useHandCursor: true }); 50 playAgain.on("pointerup", restartToStart); 51 52 const playAgainZone = this.add 53 .zone(CW / 2, playAgainY, 260, 64) 54 .setOrigin(0.5) 55 .setInteractive({ useHandCursor: true }); 56 playAgainZone.on("pointerup", restartToStart); 57 58 const exitPortal = this.add 59 .text(CW / 2, CH - 100, "ð VIBE JAM PORTAL â", { 60 fontFamily: '"Press Start 2P"', 61 fontSize: "9px", 62 color: "#00FF7F", 63 backgroundColor: "#0a1a0a", 64 padding: { x: 12, y: 8 }, 65 }) 66 .setOrigin(0.5) 67 .setInteractive({ useHandCursor: true }); 68 69 exitPortal.on("pointerdown", () => { 70 window.location.href = 71 "https://vibejam.cc/portal/2026?ref=doors-to-manual.netlify.app"; 72 }); 73 74 this.tweens.add({ 75 targets: exitPortal, 76 alpha: { from: 1, to: 0.5 }, 77 duration: 600, 78 yoyo: true, 79 repeat: -1, 80 }); 81 82 this.input.keyboard.once("keydown-ENTER", restartToStart); 83 this.input.keyboard.once("keydown-SPACE", restartToStart); 84 85 this.cameras.main.fadeIn(900, 0, 0, 0); 86 87 const phaseEl = document.getElementById("hud-phase"); 88 if (phaseEl) phaseEl.textContent = "PHASE: LANDED"; 89 const hintEl = document.getElementById("hint-bar"); 90 if (hintEl) hintEl.textContent = "Welcome to Vibe Jam City."; 91 const armed = document.getElementById("hud-armed"); 92 if (armed) {
93 armed.textContent = "DOORS TO MANUAL"; 94 armed.style.color = "#00FF7F"; 95 } 96 } 97}
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.