zx-kit 0.31.2 → 0.32.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/README.md CHANGED
@@ -42,9 +42,9 @@ zx-kit captures that aesthetic in TypeScript. You get the Spectrum's palette, RO
42
42
 
43
43
  ---
44
44
 
45
- ## Spectrum-inspired, not hardware-accurate
45
+ ## Spectrum-inspired, not hardware-accurate by default
46
46
 
47
- zx-kit is not a ZX Spectrum emulator. It does not model the hardware attribute clash (where every 8×8 cell can hold only one ink/paper pair), the ULA timing, or the Z80 memory layout.
47
+ zx-kit is not a ZX Spectrum emulator, and the **default** renderer does not model the hardware attribute clash (where every 8×8 cell can hold only one ink/paper pair), the ULA timing, or the Z80 memory layout. The default path composites in full colour, so sprites keep their own colours and never bleed into the background.
48
48
 
49
49
  What it does model is the **aesthetic discipline** of the Spectrum:
50
50
 
@@ -56,9 +56,15 @@ What it does model is the **aesthetic discipline** of the Spectrum:
56
56
  - Beeper-style 1-bit SFX
57
57
  - AY-3-8912-style three-channel chiptune audio
58
58
 
59
- **What this means in practice:** sprites drawn with `drawBitmapAttrs()` keep their own per-cell colors. A white hero walking past a green plant won't turn green — both objects render independently. This is a deliberate choice that makes zx-kit closer to a *Speccy-flavoured fantasy console* than to the original machine.
59
+ **Want the real thing?** Three opt-in rendering paths cover the spectrum from fantasy to faithful:
60
60
 
61
- If you want a stricter hardware-inspired look, use `drawBitmapAttrs()` with paper fills — see the [renderer docs](#rendererts--canvas-renderer) for per-cell attribute styling patterns.
61
+ | Path | Module | Look |
62
+ |------|--------|------|
63
+ | **Fantasy** (default) | `renderer` | Full-colour compositing — sprites keep their colours, no bleed. Best for readability. |
64
+ | **Authentic clash** | `attrscreen` | 1-bit pixels + a 32×24 ink/paper grid: real per-cell colour bleed when a sprite and the background share an 8×8 cell. |
65
+ | **Anti-clash** | `monoscreen` | One ink/paper for the whole playfield — clash-proof monochrome action, with a colourful HUD around it. |
66
+
67
+ A white hero walking past a green plant stays white under the **default** renderer, bleeds the shared cell under **`attrscreen`**, and is a clean silhouette under **`monoscreen`** — your choice, per game or per in-game toggle.
62
68
 
63
69
  ---
64
70
 
@@ -227,7 +233,7 @@ Open `package.json` and replace it with the following. The two key additions are
227
233
  "build": "vite build"
228
234
  },
229
235
  "dependencies": {
230
- "zx-kit": "^0.25.0"
236
+ "zx-kit": "^0.31.1"
231
237
  },
232
238
  "devDependencies": {
233
239
  "vite": "^6.0.0"
package/dist/index.d.ts CHANGED
@@ -21,4 +21,5 @@ export * from './cache.js';
21
21
  export * from './attrscreen.js';
22
22
  export * from './monoscreen.js';
23
23
  export * from './music.js';
24
+ export * from './presentation.js';
24
25
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,cAAc,CAAA;AAC5B,cAAc,SAAS,CAAA;AACvB,cAAc,WAAW,CAAA;AACzB,cAAc,eAAe,CAAA;AAC7B,cAAc,YAAY,CAAA;AAC1B,cAAc,YAAY,CAAA;AAC1B,cAAc,SAAS,CAAA;AACvB,cAAc,cAAc,CAAA;AAC5B,cAAc,iBAAiB,CAAA;AAC/B,cAAc,aAAa,CAAA;AAC3B,cAAc,gBAAgB,CAAA;AAC9B,cAAc,gBAAgB,CAAA;AAC9B,cAAc,UAAU,CAAA;AACxB,cAAc,gBAAgB,CAAA;AAC9B,cAAc,aAAa,CAAA;AAC3B,cAAc,YAAY,CAAA;AAC1B,cAAc,WAAW,CAAA;AACzB,cAAc,WAAW,CAAA;AACzB,cAAc,eAAe,CAAA;AAC7B,cAAc,YAAY,CAAA;AAC1B,cAAc,iBAAiB,CAAA;AAC/B,cAAc,iBAAiB,CAAA;AAC/B,cAAc,YAAY,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,cAAc,CAAA;AAC5B,cAAc,SAAS,CAAA;AACvB,cAAc,WAAW,CAAA;AACzB,cAAc,eAAe,CAAA;AAC7B,cAAc,YAAY,CAAA;AAC1B,cAAc,YAAY,CAAA;AAC1B,cAAc,SAAS,CAAA;AACvB,cAAc,cAAc,CAAA;AAC5B,cAAc,iBAAiB,CAAA;AAC/B,cAAc,aAAa,CAAA;AAC3B,cAAc,gBAAgB,CAAA;AAC9B,cAAc,gBAAgB,CAAA;AAC9B,cAAc,UAAU,CAAA;AACxB,cAAc,gBAAgB,CAAA;AAC9B,cAAc,aAAa,CAAA;AAC3B,cAAc,YAAY,CAAA;AAC1B,cAAc,WAAW,CAAA;AACzB,cAAc,WAAW,CAAA;AACzB,cAAc,eAAe,CAAA;AAC7B,cAAc,YAAY,CAAA;AAC1B,cAAc,iBAAiB,CAAA;AAC/B,cAAc,iBAAiB,CAAA;AAC/B,cAAc,YAAY,CAAA;AAC1B,cAAc,mBAAmB,CAAA"}
package/dist/index.js CHANGED
@@ -21,4 +21,5 @@ export * from './cache.js';
21
21
  export * from './attrscreen.js';
22
22
  export * from './monoscreen.js';
23
23
  export * from './music.js';
24
+ export * from './presentation.js';
24
25
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,cAAc,CAAA;AAC5B,cAAc,SAAS,CAAA;AACvB,cAAc,WAAW,CAAA;AACzB,cAAc,eAAe,CAAA;AAC7B,cAAc,YAAY,CAAA;AAC1B,cAAc,YAAY,CAAA;AAC1B,cAAc,SAAS,CAAA;AACvB,cAAc,cAAc,CAAA;AAC5B,cAAc,iBAAiB,CAAA;AAC/B,cAAc,aAAa,CAAA;AAC3B,cAAc,gBAAgB,CAAA;AAC9B,cAAc,gBAAgB,CAAA;AAC9B,cAAc,UAAU,CAAA;AACxB,cAAc,gBAAgB,CAAA;AAC9B,cAAc,aAAa,CAAA;AAC3B,cAAc,YAAY,CAAA;AAC1B,cAAc,WAAW,CAAA;AACzB,cAAc,WAAW,CAAA;AACzB,cAAc,eAAe,CAAA;AAC7B,cAAc,YAAY,CAAA;AAC1B,cAAc,iBAAiB,CAAA;AAC/B,cAAc,iBAAiB,CAAA;AAC/B,cAAc,YAAY,CAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,cAAc,CAAA;AAC5B,cAAc,SAAS,CAAA;AACvB,cAAc,WAAW,CAAA;AACzB,cAAc,eAAe,CAAA;AAC7B,cAAc,YAAY,CAAA;AAC1B,cAAc,YAAY,CAAA;AAC1B,cAAc,SAAS,CAAA;AACvB,cAAc,cAAc,CAAA;AAC5B,cAAc,iBAAiB,CAAA;AAC/B,cAAc,aAAa,CAAA;AAC3B,cAAc,gBAAgB,CAAA;AAC9B,cAAc,gBAAgB,CAAA;AAC9B,cAAc,UAAU,CAAA;AACxB,cAAc,gBAAgB,CAAA;AAC9B,cAAc,aAAa,CAAA;AAC3B,cAAc,YAAY,CAAA;AAC1B,cAAc,WAAW,CAAA;AACzB,cAAc,WAAW,CAAA;AACzB,cAAc,eAAe,CAAA;AAC7B,cAAc,YAAY,CAAA;AAC1B,cAAc,iBAAiB,CAAA;AAC/B,cAAc,iBAAiB,CAAA;AAC/B,cAAc,YAAY,CAAA;AAC1B,cAAc,mBAAmB,CAAA"}
@@ -0,0 +1,75 @@
1
+ /**
2
+ * @module presentation
3
+ *
4
+ * Small **8-bit title / loading-screen helpers** — the iconic ZX "PRESS ANY KEY"
5
+ * blink, tape-loading border stripes, and a title menu. These are tiny, composable
6
+ * functions over the renderer + palette (in the spirit of {@link "renderer" | drawScanlines}
7
+ * and {@link "renderer" | drawText}), **not** a framework: a game wires its own title
8
+ * or loading screen from them.
9
+ *
10
+ * Everything draws in **game pixels** (rely on the `setupCanvas` scale), so these
11
+ * compose freely with `drawText`, sprites, and tiles.
12
+ *
13
+ * @example
14
+ * ```ts
15
+ * // A loading screen, composed from the pieces (no built-in "title screen"):
16
+ * drawTapeStripes(ctx, now, { side: 'border' })
17
+ * drawTextCentered(ctx, 'LOADING CHAOSBUNNY', 80, 32, C.B_WHITE)
18
+ * drawBlinkingText(ctx, 'PRESS ANY KEY', 96, 120, now, C.B_YELLOW)
19
+ * ```
20
+ */
21
+ import { type SpectrumColor } from './palette.js';
22
+ /**
23
+ * `true` for the lit half of each blink cycle — a pure, time-driven toggle (no
24
+ * state). Gate any flashing element with it.
25
+ *
26
+ * @example
27
+ * if (blinkVisible(now)) drawText(ctx, 'INSERT COIN', x, y, C.B_WHITE)
28
+ */
29
+ export declare function blinkVisible(now: number, intervalMs?: number): boolean;
30
+ /**
31
+ * Draws `text` only on the visible half of the blink cycle — the classic flashing
32
+ * "PRESS ANY KEY" / "PRESS FIRE" prompt. Same args as {@link drawText} plus `now`.
33
+ */
34
+ export declare function drawBlinkingText(ctx: CanvasRenderingContext2D, text: string, x: number, y: number, now: number, ink?: SpectrumColor, paper?: SpectrumColor, intervalMs?: number): void;
35
+ /** Options for {@link drawTapeStripes}. */
36
+ export interface TapeStripesOptions {
37
+ /** Colours cycled down the screen. Default: the classic loader red / cyan. */
38
+ colors?: readonly SpectrumColor[];
39
+ /** Stripe thickness in game px (default `2`). */
40
+ stripeHeight?: number;
41
+ /** Scroll speed in px/second (default `24`) — animates the loading shimmer. */
42
+ speed?: number;
43
+ /** `'full'` stripes the whole screen; `'border'` stripes only a frame. Default `'full'`. */
44
+ side?: 'full' | 'border';
45
+ /** Border band thickness in px when `side: 'border'` (default `CELL`). */
46
+ band?: number;
47
+ /** Screen size in game px (default 256×192 — the ZX canvas). */
48
+ width?: number;
49
+ height?: number;
50
+ }
51
+ /**
52
+ * Draws animated ZX **tape-loading stripes** — the shimmering coloured bands of a
53
+ * cassette load. `'full'` paints the whole screen; `'border'` paints only a frame
54
+ * (leaving the middle for your title art). Call before your title/logo each frame.
55
+ */
56
+ export declare function drawTapeStripes(ctx: CanvasRenderingContext2D, now: number, options?: TapeStripesOptions): void;
57
+ /** Options for {@link drawMenuOptions}. */
58
+ export interface MenuOptionsConfig {
59
+ /** Ink for unselected options (default `C.WHITE`). */
60
+ ink?: SpectrumColor;
61
+ /** Ink for the selected option (default `C.B_YELLOW`). */
62
+ selectedInk?: SpectrumColor;
63
+ /** Optional paper behind each line. */
64
+ paper?: SpectrumColor;
65
+ /** Extra px between rows on top of the 8px line height (default `2`). */
66
+ gap?: number;
67
+ /** Marker before the selected option; others are padded to align (default `'> '`). */
68
+ prefix?: string;
69
+ }
70
+ /**
71
+ * Draws a vertical **title menu** at `(x, y)`. The selected option is highlighted
72
+ * with `selectedInk` and the `prefix` marker; the rest are padded to stay aligned.
73
+ */
74
+ export declare function drawMenuOptions(ctx: CanvasRenderingContext2D, options: readonly string[], selectedIndex: number, x: number, y: number, config?: MenuOptionsConfig): void;
75
+ //# sourceMappingURL=presentation.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"presentation.d.ts","sourceRoot":"","sources":["../src/presentation.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AACH,OAAO,EAAW,KAAK,aAAa,EAAE,MAAM,cAAc,CAAA;AAG1D;;;;;;GAMG;AACH,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,EAAE,UAAU,SAAM,GAAG,OAAO,CAEnE;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAC9B,GAAG,EAAE,wBAAwB,EAC7B,IAAI,EAAE,MAAM,EACZ,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EACpB,GAAG,EAAE,MAAM,EACX,GAAG,GAAE,aAAyB,EAC9B,KAAK,CAAC,EAAE,aAAa,EACrB,UAAU,SAAM,GACf,IAAI,CAEN;AAED,2CAA2C;AAC3C,MAAM,WAAW,kBAAkB;IACjC,8EAA8E;IAC9E,MAAM,CAAC,EAAE,SAAS,aAAa,EAAE,CAAA;IACjC,iDAAiD;IACjD,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,+EAA+E;IAC/E,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,4FAA4F;IAC5F,IAAI,CAAC,EAAE,MAAM,GAAG,QAAQ,CAAA;IACxB,0EAA0E;IAC1E,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,gEAAgE;IAChE,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,MAAM,CAAC,EAAE,MAAM,CAAA;CAChB;AAED;;;;GAIG;AACH,wBAAgB,eAAe,CAC7B,GAAG,EAAE,wBAAwB,EAC7B,GAAG,EAAE,MAAM,EACX,OAAO,GAAE,kBAAuB,GAC/B,IAAI,CAwBN;AAED,2CAA2C;AAC3C,MAAM,WAAW,iBAAiB;IAChC,sDAAsD;IACtD,GAAG,CAAC,EAAE,aAAa,CAAA;IACnB,0DAA0D;IAC1D,WAAW,CAAC,EAAE,aAAa,CAAA;IAC3B,uCAAuC;IACvC,KAAK,CAAC,EAAE,aAAa,CAAA;IACrB,yEAAyE;IACzE,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,sFAAsF;IACtF,MAAM,CAAC,EAAE,MAAM,CAAA;CAChB;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAC7B,GAAG,EAAE,wBAAwB,EAC7B,OAAO,EAAE,SAAS,MAAM,EAAE,EAC1B,aAAa,EAAE,MAAM,EACrB,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EACpB,MAAM,GAAE,iBAAsB,GAC7B,IAAI,CAQN"}
@@ -0,0 +1,78 @@
1
+ /**
2
+ * @module presentation
3
+ *
4
+ * Small **8-bit title / loading-screen helpers** — the iconic ZX "PRESS ANY KEY"
5
+ * blink, tape-loading border stripes, and a title menu. These are tiny, composable
6
+ * functions over the renderer + palette (in the spirit of {@link "renderer" | drawScanlines}
7
+ * and {@link "renderer" | drawText}), **not** a framework: a game wires its own title
8
+ * or loading screen from them.
9
+ *
10
+ * Everything draws in **game pixels** (rely on the `setupCanvas` scale), so these
11
+ * compose freely with `drawText`, sprites, and tiles.
12
+ *
13
+ * @example
14
+ * ```ts
15
+ * // A loading screen, composed from the pieces (no built-in "title screen"):
16
+ * drawTapeStripes(ctx, now, { side: 'border' })
17
+ * drawTextCentered(ctx, 'LOADING CHAOSBUNNY', 80, 32, C.B_WHITE)
18
+ * drawBlinkingText(ctx, 'PRESS ANY KEY', 96, 120, now, C.B_YELLOW)
19
+ * ```
20
+ */
21
+ import { C, CELL } from './palette.js';
22
+ import { drawText } from './renderer.js';
23
+ /**
24
+ * `true` for the lit half of each blink cycle — a pure, time-driven toggle (no
25
+ * state). Gate any flashing element with it.
26
+ *
27
+ * @example
28
+ * if (blinkVisible(now)) drawText(ctx, 'INSERT COIN', x, y, C.B_WHITE)
29
+ */
30
+ export function blinkVisible(now, intervalMs = 500) {
31
+ return Math.floor(now / intervalMs) % 2 === 0;
32
+ }
33
+ /**
34
+ * Draws `text` only on the visible half of the blink cycle — the classic flashing
35
+ * "PRESS ANY KEY" / "PRESS FIRE" prompt. Same args as {@link drawText} plus `now`.
36
+ */
37
+ export function drawBlinkingText(ctx, text, x, y, now, ink = C.B_WHITE, paper, intervalMs = 500) {
38
+ if (blinkVisible(now, intervalMs))
39
+ drawText(ctx, text, x, y, ink, paper);
40
+ }
41
+ /**
42
+ * Draws animated ZX **tape-loading stripes** — the shimmering coloured bands of a
43
+ * cassette load. `'full'` paints the whole screen; `'border'` paints only a frame
44
+ * (leaving the middle for your title art). Call before your title/logo each frame.
45
+ */
46
+ export function drawTapeStripes(ctx, now, options = {}) {
47
+ const { colors = [C.B_RED, C.B_CYAN], stripeHeight = 2, speed = 24, side = 'full', band = CELL, width = 256, height = 192, } = options;
48
+ const n = colors.length;
49
+ if (n === 0 || stripeHeight <= 0)
50
+ return;
51
+ const offset = Math.floor((now / 1000) * speed);
52
+ for (let y = 0; y < height; y += stripeHeight) {
53
+ const i = Math.floor((y - offset) / stripeHeight);
54
+ ctx.fillStyle = colors[((i % n) + n) % n];
55
+ const h = Math.min(stripeHeight, height - y);
56
+ if (side === 'full' || y < band || y >= height - band) {
57
+ ctx.fillRect(0, y, width, h); // full row (whole screen, or top/bottom band)
58
+ }
59
+ else {
60
+ ctx.fillRect(0, y, band, h); // left band
61
+ ctx.fillRect(width - band, y, band, h); // right band
62
+ }
63
+ }
64
+ }
65
+ /**
66
+ * Draws a vertical **title menu** at `(x, y)`. The selected option is highlighted
67
+ * with `selectedInk` and the `prefix` marker; the rest are padded to stay aligned.
68
+ */
69
+ export function drawMenuOptions(ctx, options, selectedIndex, x, y, config = {}) {
70
+ const { ink = C.WHITE, selectedInk = C.B_YELLOW, paper, gap = 2, prefix = '> ' } = config;
71
+ const pad = ' '.repeat(prefix.length);
72
+ const lineH = CELL + gap;
73
+ for (let i = 0; i < options.length; i++) {
74
+ const selected = i === selectedIndex;
75
+ drawText(ctx, (selected ? prefix : pad) + options[i], x, y + i * lineH, selected ? selectedInk : ink, paper);
76
+ }
77
+ }
78
+ //# sourceMappingURL=presentation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"presentation.js","sourceRoot":"","sources":["../src/presentation.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "zx-kit",
3
- "version": "0.31.2",
3
+ "version": "0.32.0",
4
4
  "repository": {
5
5
  "type": "git",
6
6
  "url": "https://github.com/zrebec/zx-kit.git"