@hypersocial/cli-games 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +661 -0
- package/README.md +100 -0
- package/dist/chunk-AVGB32MC.js +697 -0
- package/dist/chunk-AVGB32MC.js.map +1 -0
- package/dist/cli.js +13694 -0
- package/dist/cli.js.map +1 -0
- package/dist/index.d.ts +695 -0
- package/dist/index.js +13764 -0
- package/dist/index.js.map +1 -0
- package/dist/themes.d.ts +125 -0
- package/dist/themes.js +27 -0
- package/dist/themes.js.map +1 -0
- package/package.json +65 -0
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,695 @@
|
|
|
1
|
+
import * as _xterm_xterm from '@xterm/xterm';
|
|
2
|
+
import { Terminal } from '@xterm/xterm';
|
|
3
|
+
import { PhosphorMode } from './themes.js';
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* Shared utilities for games
|
|
7
|
+
*
|
|
8
|
+
* This module provides theme-aware utilities for games.
|
|
9
|
+
* The theme must be configured by the consuming application via setTheme().
|
|
10
|
+
*/
|
|
11
|
+
|
|
12
|
+
/**
|
|
13
|
+
* Set the current theme mode
|
|
14
|
+
* Call this from your app when the theme changes
|
|
15
|
+
*/
|
|
16
|
+
declare function setTheme(mode: PhosphorMode): void;
|
|
17
|
+
/**
|
|
18
|
+
* Get the current theme mode
|
|
19
|
+
*/
|
|
20
|
+
declare function getTheme(): PhosphorMode;
|
|
21
|
+
/**
|
|
22
|
+
* Check if a terminal is valid and can accept writes
|
|
23
|
+
*/
|
|
24
|
+
declare function isTerminalValid(terminal: Terminal | null | undefined): terminal is Terminal;
|
|
25
|
+
/**
|
|
26
|
+
* Enter alternate screen buffer with state tracking.
|
|
27
|
+
* Safe to call multiple times - will log warning but not double-enter.
|
|
28
|
+
*
|
|
29
|
+
* @param terminal - The xterm terminal instance
|
|
30
|
+
* @param reason - Description of why we're entering (for debugging)
|
|
31
|
+
* @returns true if buffer was entered, false if already in buffer or terminal invalid
|
|
32
|
+
*/
|
|
33
|
+
declare function enterAlternateBuffer(terminal: Terminal, reason: string): boolean;
|
|
34
|
+
/**
|
|
35
|
+
* Exit alternate screen buffer with state tracking.
|
|
36
|
+
* Safe to call multiple times - will log warning but not double-exit.
|
|
37
|
+
*
|
|
38
|
+
* @param terminal - The xterm terminal instance
|
|
39
|
+
* @param reason - Description of why we're exiting (for debugging)
|
|
40
|
+
* @returns true if buffer was exited, false if not in buffer or terminal invalid
|
|
41
|
+
*/
|
|
42
|
+
declare function exitAlternateBuffer(terminal: Terminal, reason: string): boolean;
|
|
43
|
+
/**
|
|
44
|
+
* Check if terminal is currently in alternate buffer
|
|
45
|
+
*/
|
|
46
|
+
declare function isInAlternateBuffer(terminal: Terminal): boolean;
|
|
47
|
+
/**
|
|
48
|
+
* Force exit alternate buffer without state check (for error recovery)
|
|
49
|
+
* Use sparingly - prefer exitAlternateBuffer for normal operations
|
|
50
|
+
*/
|
|
51
|
+
declare function forceExitAlternateBuffer(terminal: Terminal, reason: string): void;
|
|
52
|
+
/**
|
|
53
|
+
* Get theme-appropriate ANSI color escape code
|
|
54
|
+
*/
|
|
55
|
+
declare function getThemeColorCode(mode: PhosphorMode): string;
|
|
56
|
+
/**
|
|
57
|
+
* Get current theme color code
|
|
58
|
+
*/
|
|
59
|
+
declare function getCurrentThemeColor(): string;
|
|
60
|
+
/**
|
|
61
|
+
* Check if current theme is a light theme (needs dark text)
|
|
62
|
+
*/
|
|
63
|
+
declare function isLightTheme(): boolean;
|
|
64
|
+
/**
|
|
65
|
+
* Get a subtle/muted color that blends with the terminal background
|
|
66
|
+
* Useful for background elements like doors, walls, etc.
|
|
67
|
+
*/
|
|
68
|
+
declare function getSubtleBackgroundColor(): string;
|
|
69
|
+
interface VerticalAnchorOptions {
|
|
70
|
+
headerRows?: number;
|
|
71
|
+
footerRows?: number;
|
|
72
|
+
minTop?: number;
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* Compute a vertically-centered top row for content while reserving header/footer space.
|
|
76
|
+
*/
|
|
77
|
+
declare function getVerticalAnchor(terminalRows: number, contentRows: number, options?: VerticalAnchorOptions): number;
|
|
78
|
+
|
|
79
|
+
/**
|
|
80
|
+
* Game Transitions - Centralized hacker-style transition effects
|
|
81
|
+
*
|
|
82
|
+
* Provides cinematic transitions for game entry, exit, and switching.
|
|
83
|
+
* Games don't need to know about these - they just dispatch events.
|
|
84
|
+
*/
|
|
85
|
+
|
|
86
|
+
/**
|
|
87
|
+
* Boot transition - plays before game starts
|
|
88
|
+
*/
|
|
89
|
+
declare function playBootTransition(terminal: Terminal): Promise<void>;
|
|
90
|
+
/**
|
|
91
|
+
* Exit transition - plays when game quits back to shell
|
|
92
|
+
*/
|
|
93
|
+
declare function playExitTransition(terminal: Terminal): Promise<void>;
|
|
94
|
+
/**
|
|
95
|
+
* Switch transition - plays when switching to a new game
|
|
96
|
+
*/
|
|
97
|
+
declare function playSwitchTransition(terminal: Terminal): Promise<void>;
|
|
98
|
+
/**
|
|
99
|
+
* Quick boot - shorter version for game switching (game-to-game)
|
|
100
|
+
*/
|
|
101
|
+
declare function playQuickBoot(terminal: Terminal): Promise<void>;
|
|
102
|
+
/**
|
|
103
|
+
* Select transition - plays when selecting a game from the menu
|
|
104
|
+
* Shows the game name with a cool reveal effect
|
|
105
|
+
*/
|
|
106
|
+
declare function playSelectTransition(terminal: Terminal, gameName: string): Promise<void>;
|
|
107
|
+
declare const GAME_EVENTS: {
|
|
108
|
+
readonly QUIT: "hypersurge:game-quit";
|
|
109
|
+
readonly SWITCH: "hypersurge:random-game";
|
|
110
|
+
readonly GAMES_MENU: "hypersurge:games-menu";
|
|
111
|
+
readonly LAUNCH_GAME: "hypersurge:launch-game";
|
|
112
|
+
};
|
|
113
|
+
/**
|
|
114
|
+
* Helper for games to dispatch quit event
|
|
115
|
+
* This triggers the exit transition before returning to shell
|
|
116
|
+
*/
|
|
117
|
+
declare function dispatchGameQuit(terminal: Terminal): void;
|
|
118
|
+
/**
|
|
119
|
+
* Helper for games to dispatch switch event
|
|
120
|
+
* This triggers the switch transition before loading new game
|
|
121
|
+
*/
|
|
122
|
+
declare function dispatchGameSwitch(terminal: Terminal): void;
|
|
123
|
+
/**
|
|
124
|
+
* Helper for games to dispatch games menu event
|
|
125
|
+
* This triggers the games menu to let user select a game
|
|
126
|
+
*/
|
|
127
|
+
declare function dispatchGamesMenu(terminal: Terminal): void;
|
|
128
|
+
/**
|
|
129
|
+
* Helper to dispatch launch game event
|
|
130
|
+
* This triggers TerminalPool to launch a specific game with proper tracking
|
|
131
|
+
*/
|
|
132
|
+
declare function dispatchLaunchGame(terminal: Terminal, gameId: string): void;
|
|
133
|
+
|
|
134
|
+
/**
|
|
135
|
+
* Shared Menu System for Easter Egg Games
|
|
136
|
+
*
|
|
137
|
+
* Provides consistent menu navigation (arrow keys + Enter/Space)
|
|
138
|
+
* while maintaining keyboard shortcuts for quick access.
|
|
139
|
+
*/
|
|
140
|
+
interface MenuItem {
|
|
141
|
+
label: string;
|
|
142
|
+
shortcut?: string;
|
|
143
|
+
action: () => void;
|
|
144
|
+
}
|
|
145
|
+
interface MenuState {
|
|
146
|
+
selection: number;
|
|
147
|
+
items: MenuItem[];
|
|
148
|
+
}
|
|
149
|
+
/**
|
|
150
|
+
* Create a new menu state
|
|
151
|
+
*/
|
|
152
|
+
declare function createMenuState(items: MenuItem[]): MenuState;
|
|
153
|
+
/**
|
|
154
|
+
* Navigate menu selection up
|
|
155
|
+
*/
|
|
156
|
+
declare function menuUp(state: MenuState): void;
|
|
157
|
+
/**
|
|
158
|
+
* Navigate menu selection down
|
|
159
|
+
*/
|
|
160
|
+
declare function menuDown(state: MenuState): void;
|
|
161
|
+
/**
|
|
162
|
+
* Reset menu selection to top
|
|
163
|
+
*/
|
|
164
|
+
declare function menuReset(state: MenuState): void;
|
|
165
|
+
/**
|
|
166
|
+
* Execute the currently selected menu item
|
|
167
|
+
*/
|
|
168
|
+
declare function menuConfirm(state: MenuState): void;
|
|
169
|
+
/**
|
|
170
|
+
* Handle keyboard input for menu navigation
|
|
171
|
+
* Returns true if the key was handled, false otherwise
|
|
172
|
+
*/
|
|
173
|
+
declare function handleMenuInput(state: MenuState, key: string, domEvent: KeyboardEvent): boolean;
|
|
174
|
+
interface RenderMenuOptions {
|
|
175
|
+
title: string;
|
|
176
|
+
x: number;
|
|
177
|
+
y: number;
|
|
178
|
+
width?: number;
|
|
179
|
+
showShortcuts?: boolean;
|
|
180
|
+
blinkTitle?: boolean;
|
|
181
|
+
}
|
|
182
|
+
/**
|
|
183
|
+
* Render a menu box with highlighted selection
|
|
184
|
+
* Returns ANSI escape sequence string
|
|
185
|
+
*/
|
|
186
|
+
declare function renderMenu(state: MenuState, options: RenderMenuOptions): string;
|
|
187
|
+
/**
|
|
188
|
+
* Standard pause menu items used across most games
|
|
189
|
+
*/
|
|
190
|
+
declare function createPauseMenuItems(callbacks: {
|
|
191
|
+
onResume: () => void;
|
|
192
|
+
onRestart: () => void;
|
|
193
|
+
onQuit: () => void;
|
|
194
|
+
onListGames?: () => void;
|
|
195
|
+
onNextGame?: () => void;
|
|
196
|
+
onHelp?: () => void;
|
|
197
|
+
}): MenuItem[];
|
|
198
|
+
/**
|
|
199
|
+
* Standard game over menu items
|
|
200
|
+
*/
|
|
201
|
+
declare function createGameOverMenuItems(callbacks: {
|
|
202
|
+
onRestart: () => void;
|
|
203
|
+
onQuit: () => void;
|
|
204
|
+
onNextGame?: () => void;
|
|
205
|
+
}): MenuItem[];
|
|
206
|
+
/**
|
|
207
|
+
* Mode selection menu (Tutorial/Play) used by games with tutorials
|
|
208
|
+
*/
|
|
209
|
+
declare function createModeSelectMenuItems(callbacks: {
|
|
210
|
+
onTutorial: () => void;
|
|
211
|
+
onPlay: () => void;
|
|
212
|
+
}): MenuItem[];
|
|
213
|
+
interface SimpleMenuItem {
|
|
214
|
+
label: string;
|
|
215
|
+
shortcut?: string;
|
|
216
|
+
}
|
|
217
|
+
/**
|
|
218
|
+
* Handle menu navigation without callbacks
|
|
219
|
+
* Returns new selection index
|
|
220
|
+
*/
|
|
221
|
+
declare function navigateMenu(currentSelection: number, itemCount: number, key: string, domEvent: KeyboardEvent): {
|
|
222
|
+
newSelection: number;
|
|
223
|
+
confirmed: boolean;
|
|
224
|
+
};
|
|
225
|
+
/**
|
|
226
|
+
* Check if a shortcut key was pressed
|
|
227
|
+
* Returns the index of the matching item, or -1 if no match
|
|
228
|
+
*/
|
|
229
|
+
declare function checkShortcut(items: SimpleMenuItem[], key: string): number;
|
|
230
|
+
/**
|
|
231
|
+
* Render a simple menu (index-based, no callbacks)
|
|
232
|
+
* Returns ANSI escape sequence string
|
|
233
|
+
*/
|
|
234
|
+
declare function renderSimpleMenu(items: SimpleMenuItem[], selection: number, options: {
|
|
235
|
+
centerX: number;
|
|
236
|
+
startY: number;
|
|
237
|
+
showShortcuts?: boolean;
|
|
238
|
+
}): string;
|
|
239
|
+
/**
|
|
240
|
+
* Common pause menu items definition
|
|
241
|
+
*/
|
|
242
|
+
declare const PAUSE_MENU_ITEMS: SimpleMenuItem[];
|
|
243
|
+
/**
|
|
244
|
+
* Common mode select items definition
|
|
245
|
+
*/
|
|
246
|
+
declare const MODE_SELECT_ITEMS: SimpleMenuItem[];
|
|
247
|
+
|
|
248
|
+
/**
|
|
249
|
+
* Hyper 2048
|
|
250
|
+
*
|
|
251
|
+
* Slide and merge DATA PACKETS to reach TERABYTE (2048).
|
|
252
|
+
* Cyberpunk-themed with glitchy effects and theme-aware colors.
|
|
253
|
+
*/
|
|
254
|
+
|
|
255
|
+
/**
|
|
256
|
+
* 2048 Game Controller
|
|
257
|
+
*/
|
|
258
|
+
interface Game2048Controller {
|
|
259
|
+
stop: () => void;
|
|
260
|
+
isRunning: boolean;
|
|
261
|
+
}
|
|
262
|
+
declare function run2048Game(terminal: Terminal): Game2048Controller;
|
|
263
|
+
|
|
264
|
+
/**
|
|
265
|
+
* Hyper Asteroids
|
|
266
|
+
*
|
|
267
|
+
* Classic asteroids with ship rotation, thrust physics, and shooting.
|
|
268
|
+
* Simplified visuals for terminal - single-character asteroids and ship.
|
|
269
|
+
* Features screen wrapping, asteroid splitting, particle effects.
|
|
270
|
+
*/
|
|
271
|
+
|
|
272
|
+
interface AsteroidsController {
|
|
273
|
+
stop: () => void;
|
|
274
|
+
isRunning: boolean;
|
|
275
|
+
}
|
|
276
|
+
declare function runAsteroidsGame(terminal: Terminal): AsteroidsController;
|
|
277
|
+
|
|
278
|
+
/**
|
|
279
|
+
* Hyper Breakout
|
|
280
|
+
*
|
|
281
|
+
* Classic breakout/brick breaker with cyberpunk theme.
|
|
282
|
+
* Paddle at bottom, ball bounces to break bricks at top.
|
|
283
|
+
* Features power-ups, particle explosions, and screen shake.
|
|
284
|
+
*/
|
|
285
|
+
|
|
286
|
+
/**
|
|
287
|
+
* Breakout Game Controller
|
|
288
|
+
*/
|
|
289
|
+
interface BreakoutController {
|
|
290
|
+
stop: () => void;
|
|
291
|
+
isRunning: boolean;
|
|
292
|
+
}
|
|
293
|
+
declare function runBreakoutGame(terminal: Terminal): BreakoutController;
|
|
294
|
+
|
|
295
|
+
/**
|
|
296
|
+
* Hyper Chopper
|
|
297
|
+
*
|
|
298
|
+
* UGH!-inspired 2D physics delivery game.
|
|
299
|
+
* Fly a prehistoric helicopter, pick up passengers,
|
|
300
|
+
* deliver them to platforms. Don't fall in the water!
|
|
301
|
+
*
|
|
302
|
+
* FIXED SCREEN - no scrolling, like Pac-Man
|
|
303
|
+
*/
|
|
304
|
+
|
|
305
|
+
/**
|
|
306
|
+
* Courier Game Controller
|
|
307
|
+
*/
|
|
308
|
+
interface CourierController {
|
|
309
|
+
stop: () => void;
|
|
310
|
+
isRunning: boolean;
|
|
311
|
+
}
|
|
312
|
+
/**
|
|
313
|
+
* Hyper Chopper Game
|
|
314
|
+
*/
|
|
315
|
+
declare function runCourierGame(terminal: Terminal): CourierController;
|
|
316
|
+
|
|
317
|
+
/**
|
|
318
|
+
* Hyper Crack - Terminal Hacking Game
|
|
319
|
+
*
|
|
320
|
+
* Crack passwords to breach security layers before
|
|
321
|
+
* the trace detection catches you. Wordle-style mechanics
|
|
322
|
+
* with cyberpunk hacker aesthetics.
|
|
323
|
+
*/
|
|
324
|
+
|
|
325
|
+
/**
|
|
326
|
+
* Crack Game Controller
|
|
327
|
+
*/
|
|
328
|
+
interface CrackController {
|
|
329
|
+
stop: () => void;
|
|
330
|
+
isRunning: boolean;
|
|
331
|
+
}
|
|
332
|
+
/**
|
|
333
|
+
* Cyberpunk Terminal Hacking Game
|
|
334
|
+
*/
|
|
335
|
+
declare function runCrackGame(terminal: Terminal): CrackController;
|
|
336
|
+
|
|
337
|
+
/**
|
|
338
|
+
* Hyper Frogger
|
|
339
|
+
*
|
|
340
|
+
* Guide your frog across dangerous roads and rivers!
|
|
341
|
+
* - Avoid cars and trucks on the road
|
|
342
|
+
* - Hop on logs and turtles to cross the water
|
|
343
|
+
* - Reach all 5 lily pads to advance
|
|
344
|
+
*
|
|
345
|
+
* Features:
|
|
346
|
+
* - Progressive difficulty (starts easy)
|
|
347
|
+
* - Visual frog character with animation
|
|
348
|
+
* - Better themed obstacles
|
|
349
|
+
* - Lower terminal requirements
|
|
350
|
+
*/
|
|
351
|
+
|
|
352
|
+
interface FroggerController {
|
|
353
|
+
stop: () => void;
|
|
354
|
+
isRunning: boolean;
|
|
355
|
+
}
|
|
356
|
+
declare function runFroggerGame(terminal: Terminal): FroggerController;
|
|
357
|
+
|
|
358
|
+
/**
|
|
359
|
+
* Hyper Hangman
|
|
360
|
+
*
|
|
361
|
+
* Cyberpunk-themed word guessing game with glitchy effects,
|
|
362
|
+
* neon visuals, and theme-aware colors.
|
|
363
|
+
*/
|
|
364
|
+
|
|
365
|
+
/**
|
|
366
|
+
* Hangman Game Controller
|
|
367
|
+
*/
|
|
368
|
+
interface HangmanController {
|
|
369
|
+
stop: () => void;
|
|
370
|
+
isRunning: boolean;
|
|
371
|
+
}
|
|
372
|
+
/**
|
|
373
|
+
* Cyberpunk Hangman Game
|
|
374
|
+
*/
|
|
375
|
+
declare function runHangmanGame(terminal: Terminal): HangmanController;
|
|
376
|
+
|
|
377
|
+
/**
|
|
378
|
+
* Hyper Minesweeper
|
|
379
|
+
*
|
|
380
|
+
* Cyberpunk minesweeper - "defuse the malware grid".
|
|
381
|
+
* Navigate the grid, flag malware, reveal safe sectors.
|
|
382
|
+
* Theme-aware with glitchy effects and particle systems.
|
|
383
|
+
*/
|
|
384
|
+
|
|
385
|
+
/**
|
|
386
|
+
* Minesweeper Game Controller
|
|
387
|
+
*/
|
|
388
|
+
interface MinesweeperController {
|
|
389
|
+
stop: () => void;
|
|
390
|
+
isRunning: boolean;
|
|
391
|
+
}
|
|
392
|
+
declare function runMinesweeperGame(terminal: Terminal): MinesweeperController;
|
|
393
|
+
|
|
394
|
+
/**
|
|
395
|
+
* Hyper Pong
|
|
396
|
+
*
|
|
397
|
+
* Cyberpunk-themed Pong game with glitchy effects,
|
|
398
|
+
* neon visuals, and theme-aware colors.
|
|
399
|
+
* Single player vs AI.
|
|
400
|
+
*/
|
|
401
|
+
|
|
402
|
+
/**
|
|
403
|
+
* Pong Game Controller
|
|
404
|
+
*/
|
|
405
|
+
interface PongController {
|
|
406
|
+
stop: () => void;
|
|
407
|
+
isRunning: boolean;
|
|
408
|
+
}
|
|
409
|
+
/**
|
|
410
|
+
* Cyberpunk Pong Game
|
|
411
|
+
*/
|
|
412
|
+
declare function runPongGame(terminal: Terminal): PongController;
|
|
413
|
+
|
|
414
|
+
/**
|
|
415
|
+
* Hyper Runner
|
|
416
|
+
*
|
|
417
|
+
* Cyberpunk endless runner game - dodge obstacles,
|
|
418
|
+
* collect power-ups, and survive as long as you can.
|
|
419
|
+
* Subway Surfers-style vertical perspective with cyberpunk aesthetics.
|
|
420
|
+
*/
|
|
421
|
+
|
|
422
|
+
/**
|
|
423
|
+
* Runner Game Controller
|
|
424
|
+
*/
|
|
425
|
+
interface RunnerController {
|
|
426
|
+
stop: () => void;
|
|
427
|
+
isRunning: boolean;
|
|
428
|
+
}
|
|
429
|
+
/**
|
|
430
|
+
* Cyberpunk Endless Runner - Vertical perspective
|
|
431
|
+
*/
|
|
432
|
+
declare function runRunnerGame(terminal: Terminal): RunnerController;
|
|
433
|
+
|
|
434
|
+
/**
|
|
435
|
+
* Hyper Simon
|
|
436
|
+
*
|
|
437
|
+
* Cyberpunk memory sequence game - "hack the mainframe" by repeating patterns.
|
|
438
|
+
* Features 4 quadrants (1/2/3/4 or arrow keys), visual flash effects,
|
|
439
|
+
* speed increases, and particle bursts on success.
|
|
440
|
+
*/
|
|
441
|
+
|
|
442
|
+
/**
|
|
443
|
+
* Simon Game Controller
|
|
444
|
+
*/
|
|
445
|
+
interface SimonController {
|
|
446
|
+
stop: () => void;
|
|
447
|
+
isRunning: boolean;
|
|
448
|
+
}
|
|
449
|
+
declare function runSimonGame(terminal: Terminal): SimonController;
|
|
450
|
+
|
|
451
|
+
/**
|
|
452
|
+
* Hyper Snake Game
|
|
453
|
+
*
|
|
454
|
+
* Cyberpunk-themed snake game with glitchy title,
|
|
455
|
+
* neon borders, and theme-aware colors.
|
|
456
|
+
*/
|
|
457
|
+
|
|
458
|
+
/**
|
|
459
|
+
* Snake Game Controller
|
|
460
|
+
*/
|
|
461
|
+
interface SnakeController {
|
|
462
|
+
stop: () => void;
|
|
463
|
+
isRunning: boolean;
|
|
464
|
+
}
|
|
465
|
+
/**
|
|
466
|
+
* Cyberpunk Snake Game
|
|
467
|
+
*/
|
|
468
|
+
declare function runSnakeGame(terminal: Terminal): SnakeController;
|
|
469
|
+
|
|
470
|
+
/**
|
|
471
|
+
* Hyper Space Invaders
|
|
472
|
+
*
|
|
473
|
+
* Cyberpunk-themed Space Invaders with glitchy effects,
|
|
474
|
+
* neon visuals, and theme-aware colors.
|
|
475
|
+
*/
|
|
476
|
+
|
|
477
|
+
/**
|
|
478
|
+
* Space Invaders Game Controller
|
|
479
|
+
*/
|
|
480
|
+
interface SpaceInvadersController {
|
|
481
|
+
stop: () => void;
|
|
482
|
+
isRunning: boolean;
|
|
483
|
+
}
|
|
484
|
+
/**
|
|
485
|
+
* Cyberpunk Space Invaders
|
|
486
|
+
*/
|
|
487
|
+
declare function runSpaceInvadersGame(terminal: Terminal): SpaceInvadersController;
|
|
488
|
+
|
|
489
|
+
/**
|
|
490
|
+
* Hyper Tetris
|
|
491
|
+
*
|
|
492
|
+
* Cyberpunk-themed Tetris with glitchy effects,
|
|
493
|
+
* neon borders, and theme-aware colors.
|
|
494
|
+
*/
|
|
495
|
+
|
|
496
|
+
/**
|
|
497
|
+
* Tetris Game Controller
|
|
498
|
+
*/
|
|
499
|
+
interface TetrisController {
|
|
500
|
+
stop: () => void;
|
|
501
|
+
isRunning: boolean;
|
|
502
|
+
}
|
|
503
|
+
/**
|
|
504
|
+
* Cyberpunk Tetris Game
|
|
505
|
+
*/
|
|
506
|
+
declare function runTetrisGame(terminal: Terminal): TetrisController;
|
|
507
|
+
|
|
508
|
+
/**
|
|
509
|
+
* Hyper Tower
|
|
510
|
+
*
|
|
511
|
+
* Stack falling blocks perfectly to build the tallest tower.
|
|
512
|
+
* Blocks swing left/right - press space to drop.
|
|
513
|
+
* Overhanging parts fall off, making subsequent blocks narrower.
|
|
514
|
+
* Perfect alignments give bonus points and combo multipliers.
|
|
515
|
+
* Cyberpunk-themed with glitchy effects and theme-aware colors.
|
|
516
|
+
*/
|
|
517
|
+
|
|
518
|
+
/**
|
|
519
|
+
* Tower Game Controller
|
|
520
|
+
*/
|
|
521
|
+
interface TowerController {
|
|
522
|
+
stop: () => void;
|
|
523
|
+
isRunning: boolean;
|
|
524
|
+
}
|
|
525
|
+
declare function runTowerGame(terminal: Terminal): TowerController;
|
|
526
|
+
|
|
527
|
+
/**
|
|
528
|
+
* Hyper Tron
|
|
529
|
+
*
|
|
530
|
+
* Light cycles - you vs AI. Don't hit walls or trails.
|
|
531
|
+
* Cyberpunk-themed with glitchy effects and theme-aware colors.
|
|
532
|
+
* Best of 5 rounds, speed increases each round, optional shrinking arena.
|
|
533
|
+
*/
|
|
534
|
+
|
|
535
|
+
/**
|
|
536
|
+
* Tron Game Controller
|
|
537
|
+
*/
|
|
538
|
+
interface TronController {
|
|
539
|
+
stop: () => void;
|
|
540
|
+
isRunning: boolean;
|
|
541
|
+
}
|
|
542
|
+
declare function runTronGame(terminal: Terminal): TronController;
|
|
543
|
+
|
|
544
|
+
/**
|
|
545
|
+
* Hyper Typing Test
|
|
546
|
+
*
|
|
547
|
+
* Cyberpunk-themed typing speed test with glitchy effects,
|
|
548
|
+
* neon visuals, and theme-aware colors.
|
|
549
|
+
* Tests WPM (words per minute) and accuracy.
|
|
550
|
+
*/
|
|
551
|
+
|
|
552
|
+
/**
|
|
553
|
+
* Typing Test Game Controller
|
|
554
|
+
*/
|
|
555
|
+
interface TypingTestController {
|
|
556
|
+
stop: () => void;
|
|
557
|
+
isRunning: boolean;
|
|
558
|
+
}
|
|
559
|
+
/**
|
|
560
|
+
* Cyberpunk Typing Test
|
|
561
|
+
*/
|
|
562
|
+
declare function runTypingTest(terminal: Terminal): TypingTestController;
|
|
563
|
+
|
|
564
|
+
/**
|
|
565
|
+
* Hyper Wordle
|
|
566
|
+
*
|
|
567
|
+
* Classic 5-letter word guessing game with cyberpunk aesthetics.
|
|
568
|
+
* Crack the cipher in 6 attempts. Green = correct, Yellow = wrong position, Gray = absent.
|
|
569
|
+
* Features on-screen keyboard, statistics tracking, and particle celebrations.
|
|
570
|
+
*/
|
|
571
|
+
|
|
572
|
+
/**
|
|
573
|
+
* Wordle Game Controller
|
|
574
|
+
*/
|
|
575
|
+
interface WordleController {
|
|
576
|
+
stop: () => void;
|
|
577
|
+
isRunning: boolean;
|
|
578
|
+
}
|
|
579
|
+
declare function runWordleGame(terminal: Terminal): WordleController;
|
|
580
|
+
|
|
581
|
+
/**
|
|
582
|
+
* Games Menu
|
|
583
|
+
*
|
|
584
|
+
* Interactive game selection menu accessible via ::games command
|
|
585
|
+
* or by pressing L in any game's pause menu.
|
|
586
|
+
*/
|
|
587
|
+
|
|
588
|
+
interface GamesMenuController {
|
|
589
|
+
stop: () => void;
|
|
590
|
+
isRunning: boolean;
|
|
591
|
+
}
|
|
592
|
+
interface GamesMenuOptions {
|
|
593
|
+
onGameSelect?: (gameId: string) => void;
|
|
594
|
+
onQuit?: () => void;
|
|
595
|
+
}
|
|
596
|
+
/**
|
|
597
|
+
* Show interactive games menu
|
|
598
|
+
*/
|
|
599
|
+
declare function showGamesMenu(terminal: Terminal, optionsOrCallback?: GamesMenuOptions | ((gameId: string) => void)): GamesMenuController;
|
|
600
|
+
|
|
601
|
+
/**
|
|
602
|
+
* Matrix Rain Effect
|
|
603
|
+
*
|
|
604
|
+
* Digital rain animation inspired by The Matrix.
|
|
605
|
+
* Shows intro text, then starts the rain on keypress.
|
|
606
|
+
*/
|
|
607
|
+
|
|
608
|
+
/**
|
|
609
|
+
* Matrix controller for managing the animation state
|
|
610
|
+
*/
|
|
611
|
+
interface MatrixController {
|
|
612
|
+
stop: () => void;
|
|
613
|
+
isRunning: boolean;
|
|
614
|
+
}
|
|
615
|
+
/**
|
|
616
|
+
* Get the current matrix controller (if running)
|
|
617
|
+
*/
|
|
618
|
+
declare function getActiveMatrixController(): MatrixController | null;
|
|
619
|
+
/**
|
|
620
|
+
* Execute matrix rain effect - fullscreen, theme-aware, key-to-stop
|
|
621
|
+
*/
|
|
622
|
+
declare function runMatrixEffect(terminal: Terminal): MatrixController;
|
|
623
|
+
/**
|
|
624
|
+
* Start the actual matrix rain (called after intro keypress)
|
|
625
|
+
*/
|
|
626
|
+
declare function startMatrixRain(terminal: Terminal): void;
|
|
627
|
+
/**
|
|
628
|
+
* Check if we're in matrix intro phase
|
|
629
|
+
*/
|
|
630
|
+
declare function isMatrixWaitingForKey(): boolean;
|
|
631
|
+
/**
|
|
632
|
+
* Handle keypress during matrix effect
|
|
633
|
+
*/
|
|
634
|
+
declare function handleMatrixKeypress(_terminal: Terminal): boolean;
|
|
635
|
+
|
|
636
|
+
/**
|
|
637
|
+
* Fake Hacking Animation
|
|
638
|
+
*
|
|
639
|
+
* Displays a fake "hacking" sequence for fun.
|
|
640
|
+
*/
|
|
641
|
+
|
|
642
|
+
interface HackController {
|
|
643
|
+
stop: () => void;
|
|
644
|
+
isRunning: boolean;
|
|
645
|
+
}
|
|
646
|
+
/**
|
|
647
|
+
* Execute fake hacking animation
|
|
648
|
+
*/
|
|
649
|
+
declare function runHackEffect(terminal: Terminal): HackController;
|
|
650
|
+
|
|
651
|
+
/**
|
|
652
|
+
* Fake Reboot Animation
|
|
653
|
+
*
|
|
654
|
+
* Simulates a system reboot sequence.
|
|
655
|
+
*/
|
|
656
|
+
|
|
657
|
+
interface RebootController {
|
|
658
|
+
stop: () => void;
|
|
659
|
+
isRunning: boolean;
|
|
660
|
+
}
|
|
661
|
+
/**
|
|
662
|
+
* Execute fake reboot animation
|
|
663
|
+
*/
|
|
664
|
+
declare function runRebootEffect(terminal: Terminal): RebootController;
|
|
665
|
+
|
|
666
|
+
/**
|
|
667
|
+
* Game registry with metadata
|
|
668
|
+
*/
|
|
669
|
+
interface GameInfo {
|
|
670
|
+
id: string;
|
|
671
|
+
name: string;
|
|
672
|
+
description: string;
|
|
673
|
+
run: (terminal: _xterm_xterm.Terminal) => {
|
|
674
|
+
stop: () => void;
|
|
675
|
+
isRunning: boolean;
|
|
676
|
+
};
|
|
677
|
+
}
|
|
678
|
+
declare const games: GameInfo[];
|
|
679
|
+
/**
|
|
680
|
+
* Get a game by ID
|
|
681
|
+
*/
|
|
682
|
+
declare function getGame(id: string): GameInfo | undefined;
|
|
683
|
+
/**
|
|
684
|
+
* Get a random game
|
|
685
|
+
*/
|
|
686
|
+
declare function getRandomGame(): GameInfo;
|
|
687
|
+
/**
|
|
688
|
+
* Run a game by ID
|
|
689
|
+
*/
|
|
690
|
+
declare function runGame(id: string, terminal: _xterm_xterm.Terminal): {
|
|
691
|
+
stop: () => void;
|
|
692
|
+
isRunning: boolean;
|
|
693
|
+
} | undefined;
|
|
694
|
+
|
|
695
|
+
export { GAME_EVENTS, type GameInfo, type GamesMenuController, type GamesMenuOptions, type HackController, MODE_SELECT_ITEMS, type MatrixController, type MenuItem, type MenuState, PAUSE_MENU_ITEMS, PhosphorMode, type RebootController, type RenderMenuOptions, type SimpleMenuItem, checkShortcut, createGameOverMenuItems, createMenuState, createModeSelectMenuItems, createPauseMenuItems, dispatchGameQuit, dispatchGameSwitch, dispatchGamesMenu, dispatchLaunchGame, enterAlternateBuffer, exitAlternateBuffer, forceExitAlternateBuffer, games, getActiveMatrixController, getCurrentThemeColor, getGame, getRandomGame, getSubtleBackgroundColor, getTheme, getThemeColorCode, getVerticalAnchor, handleMatrixKeypress, handleMenuInput, isInAlternateBuffer, isLightTheme, isMatrixWaitingForKey, isTerminalValid, menuConfirm, menuDown, menuReset, menuUp, navigateMenu, playBootTransition, playExitTransition, playQuickBoot, playSelectTransition, playSwitchTransition, renderMenu, renderSimpleMenu, run2048Game, runAsteroidsGame, runBreakoutGame, runCourierGame, runCrackGame, runFroggerGame, runGame, runHackEffect, runHangmanGame, runMatrixEffect, runMinesweeperGame, runPongGame, runRebootEffect, runRunnerGame, runSimonGame, runSnakeGame, runSpaceInvadersGame, runTetrisGame, runTowerGame, runTronGame, runTypingTest, runWordleGame, setTheme, showGamesMenu, startMatrixRain };
|