super-patience 1.2.4

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.
Files changed (83) hide show
  1. package/dist/package-lock.json +1356 -0
  2. package/dist/package.json +63 -0
  3. package/dist/public/atlas.webp +0 -0
  4. package/dist/public/favicon/favicon16.webp +0 -0
  5. package/dist/public/favicon/favicon192.webp +0 -0
  6. package/dist/public/favicon/favicon32.webp +0 -0
  7. package/dist/public/favicon/favicon48.webp +0 -0
  8. package/dist/public/favicon/favicon64.webp +0 -0
  9. package/dist/public/index.js +101 -0
  10. package/dist/public/index.js.map +7 -0
  11. package/dist/public/super-patience-v1.2.4+20251227.9c5b3f4.html +114 -0
  12. package/dist/src/assets/manifest.json +41 -0
  13. package/dist/src/assets/void.game.json +540 -0
  14. package/dist/src/ents/board.d.ts +7 -0
  15. package/dist/src/ents/board.d.ts.map +1 -0
  16. package/dist/src/ents/board.js +124 -0
  17. package/dist/src/ents/board.js.map +1 -0
  18. package/dist/src/ents/cam.d.ts +7 -0
  19. package/dist/src/ents/cam.d.ts.map +1 -0
  20. package/dist/src/ents/cam.js +9 -0
  21. package/dist/src/ents/cam.js.map +1 -0
  22. package/dist/src/ents/draw.d.ts +7 -0
  23. package/dist/src/ents/draw.d.ts.map +1 -0
  24. package/dist/src/ents/draw.js +12 -0
  25. package/dist/src/ents/draw.js.map +1 -0
  26. package/dist/src/ents/ent.d.ts +32 -0
  27. package/dist/src/ents/ent.d.ts.map +1 -0
  28. package/dist/src/ents/ent.js +2 -0
  29. package/dist/src/ents/ent.js.map +1 -0
  30. package/dist/src/ents/loader.d.ts +6 -0
  31. package/dist/src/ents/loader.d.ts.map +1 -0
  32. package/dist/src/ents/loader.js +43 -0
  33. package/dist/src/ents/loader.js.map +1 -0
  34. package/dist/src/ents/patience-the-demon.d.ts +7 -0
  35. package/dist/src/ents/patience-the-demon.d.ts.map +1 -0
  36. package/dist/src/ents/patience-the-demon.js +39 -0
  37. package/dist/src/ents/patience-the-demon.js.map +1 -0
  38. package/dist/src/ents/pile-hitbox.d.ts +8 -0
  39. package/dist/src/ents/pile-hitbox.d.ts.map +1 -0
  40. package/dist/src/ents/pile-hitbox.js +29 -0
  41. package/dist/src/ents/pile-hitbox.js.map +1 -0
  42. package/dist/src/ents/tally.d.ts +7 -0
  43. package/dist/src/ents/tally.d.ts.map +1 -0
  44. package/dist/src/ents/tally.js +11 -0
  45. package/dist/src/ents/tally.js.map +1 -0
  46. package/dist/src/ents/vacant-stock.d.ts +7 -0
  47. package/dist/src/ents/vacant-stock.d.ts.map +1 -0
  48. package/dist/src/ents/vacant-stock.js +15 -0
  49. package/dist/src/ents/vacant-stock.js.map +1 -0
  50. package/dist/src/index.d.ts +2 -0
  51. package/dist/src/index.d.ts.map +1 -0
  52. package/dist/src/index.js +26 -0
  53. package/dist/src/index.js.map +1 -0
  54. package/dist/src/level/ent-factory.d.ts +4 -0
  55. package/dist/src/level/ent-factory.d.ts.map +1 -0
  56. package/dist/src/level/ent-factory.js +91 -0
  57. package/dist/src/level/ent-factory.js.map +1 -0
  58. package/dist/src/level/level-file.json +58 -0
  59. package/dist/src/level/level-parser.d.ts +5 -0
  60. package/dist/src/level/level-parser.d.ts.map +1 -0
  61. package/dist/src/level/level-parser.js +24 -0
  62. package/dist/src/level/level-parser.js.map +1 -0
  63. package/dist/src/level/level-schema.d.ts +6 -0
  64. package/dist/src/level/level-schema.d.ts.map +1 -0
  65. package/dist/src/level/level-schema.js +2 -0
  66. package/dist/src/level/level-schema.js.map +1 -0
  67. package/dist/src/level/level.d.ts +11 -0
  68. package/dist/src/level/level.d.ts.map +1 -0
  69. package/dist/src/level/level.js +102 -0
  70. package/dist/src/level/level.js.map +1 -0
  71. package/dist/src/types/decl.d.ts +31 -0
  72. package/dist/src/types/decl.d.ts.map +1 -0
  73. package/dist/src/types/decl.js +2 -0
  74. package/dist/src/types/decl.js.map +1 -0
  75. package/dist/src/types/save.d.ts +5 -0
  76. package/dist/src/types/save.d.ts.map +1 -0
  77. package/dist/src/types/save.js +2 -0
  78. package/dist/src/types/save.js.map +1 -0
  79. package/dist/tsconfig.json +47 -0
  80. package/dist/void.json +13 -0
  81. package/license.text +661 -0
  82. package/package.json +63 -0
  83. package/readme.md +30 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"board.js","sourceRoot":"","sources":["../../../src/ents/board.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ import type * as V from '@oidoid/void';
2
+ export type CamEnt = V.SysEnt<CamSys>;
3
+ export declare class CamSys implements V.Sys {
4
+ readonly query = "cam";
5
+ update(_ent: CamEnt, v: V.Void): void;
6
+ }
7
+ //# sourceMappingURL=cam.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cam.d.ts","sourceRoot":"","sources":["../../../src/ents/cam.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,CAAC,MAAM,cAAc,CAAA;AAEtC,MAAM,MAAM,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAA;AAErC,qBAAa,MAAO,YAAW,CAAC,CAAC,GAAG;IAClC,QAAQ,CAAC,KAAK,SAAQ;IAEtB,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC,CAAC,IAAI,GAAG,IAAI;CAKtC"}
@@ -0,0 +1,9 @@
1
+ export class CamSys {
2
+ query = 'cam';
3
+ update(_ent, v) {
4
+ v.cam.update(v.canvas);
5
+ const camOffsetX = Math.trunc((v.cam.w - v.cam.minWH.w) / 2);
6
+ v.cam.x = -camOffsetX + (camOffsetX % 8);
7
+ }
8
+ }
9
+ //# sourceMappingURL=cam.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cam.js","sourceRoot":"","sources":["../../../src/ents/cam.ts"],"names":[],"mappings":"AAIA,MAAM,OAAO,MAAM;IACR,KAAK,GAAG,KAAK,CAAA;IAEtB,MAAM,CAAC,IAAY,EAAE,CAAS;QAC5B,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAA;QACtB,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAA;QAC5D,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,UAAU,GAAG,CAAC,UAAU,GAAG,CAAC,CAAC,CAAA;IAC1C,CAAC;CACF"}
@@ -0,0 +1,7 @@
1
+ import type * as V from '@oidoid/void';
2
+ export type DrawEnt = V.SysEnt<DrawSys>;
3
+ export declare class DrawSys implements V.Sys {
4
+ readonly query = "draw";
5
+ update(_ent: DrawEnt, v: V.Void): void;
6
+ }
7
+ //# sourceMappingURL=draw.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"draw.d.ts","sourceRoot":"","sources":["../../../src/ents/draw.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,CAAC,MAAM,cAAc,CAAA;AAEtC,MAAM,MAAM,OAAO,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAA;AAEvC,qBAAa,OAAQ,YAAW,CAAC,CAAC,GAAG;IACnC,QAAQ,CAAC,KAAK,UAAS;IAEvB,MAAM,CAAC,IAAI,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,CAAC,IAAI,GAAG,IAAI;CAOvC"}
@@ -0,0 +1,12 @@
1
+ export class DrawSys {
2
+ query = 'draw';
3
+ update(_ent, v) {
4
+ if (!v.invalid)
5
+ return;
6
+ v.renderer.clear(v.backgroundRGBA);
7
+ v.renderer.predraw(v.cam);
8
+ v.renderer.setDepth(true);
9
+ v.renderer.draw(v.pool.default);
10
+ }
11
+ }
12
+ //# sourceMappingURL=draw.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"draw.js","sourceRoot":"","sources":["../../../src/ents/draw.ts"],"names":[],"mappings":"AAIA,MAAM,OAAO,OAAO;IACT,KAAK,GAAG,MAAM,CAAA;IAEvB,MAAM,CAAC,IAAa,EAAE,CAAS;QAC7B,IAAI,CAAC,CAAC,CAAC,OAAO;YAAE,OAAM;QACtB,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,cAAc,CAAC,CAAA;QAClC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAA;QACzB,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAA;QACzB,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;IACjC,CAAC;CACF"}
@@ -0,0 +1,32 @@
1
+ import * as V from '@oidoid/void';
2
+ import type { Suit } from 'klondike-solitaire';
3
+ import type { VacantStockEnt } from './vacant-stock.ts';
4
+ export type Board = {
5
+ cards: CardEnt[] | undefined;
6
+ selected: PickState;
7
+ piles: PileEnt[] | undefined;
8
+ vacantStock: VacantStockEnt | undefined;
9
+ };
10
+ export type CardEnt = V.QueryEnt<'card & sprite'>;
11
+ export type PatienceTheDemon = object;
12
+ export type PickState = {
13
+ sprite: V.Sprite;
14
+ /** the adjustment to offset future pick inputs by. */
15
+ offset: Readonly<V.XY>;
16
+ }[];
17
+ export type Pile = {
18
+ type: 'Foundation';
19
+ suit: Suit;
20
+ } | {
21
+ type: 'Tableau';
22
+ x: number;
23
+ } | {
24
+ type: 'Waste';
25
+ };
26
+ export type PileEnt = V.QueryEnt<'pile & sprite'>;
27
+ export type PileType = 'Foundation' | 'Tableau' | 'Waste';
28
+ export type Tally = {
29
+ tens: number;
30
+ };
31
+ export type VacantStock = object;
32
+ //# sourceMappingURL=ent.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ent.d.ts","sourceRoot":"","sources":["../../../src/ents/ent.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,cAAc,CAAA;AACjC,OAAO,KAAK,EAAC,IAAI,EAAC,MAAM,oBAAoB,CAAA;AAC5C,OAAO,KAAK,EAAC,cAAc,EAAC,MAAM,mBAAmB,CAAA;AAErD,MAAM,MAAM,KAAK,GAAG;IAClB,KAAK,EAAE,OAAO,EAAE,GAAG,SAAS,CAAA;IAC5B,QAAQ,EAAE,SAAS,CAAA;IACnB,KAAK,EAAE,OAAO,EAAE,GAAG,SAAS,CAAA;IAC5B,WAAW,EAAE,cAAc,GAAG,SAAS,CAAA;CACxC,CAAA;AACD,MAAM,MAAM,OAAO,GAAG,CAAC,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAA;AACjD,MAAM,MAAM,gBAAgB,GAAG,MAAM,CAAA;AACrC,MAAM,MAAM,SAAS,GAAG;IACtB,MAAM,EAAE,CAAC,CAAC,MAAM,CAAA;IAChB,sDAAsD;IACtD,MAAM,EAAE,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,CAAA;CACvB,EAAE,CAAA;AACH,MAAM,MAAM,IAAI,GACZ;IAAC,IAAI,EAAE,YAAY,CAAC;IAAC,IAAI,EAAE,IAAI,CAAA;CAAC,GAChC;IAAC,IAAI,EAAE,SAAS,CAAC;IAAC,CAAC,EAAE,MAAM,CAAA;CAAC,GAC5B;IAAC,IAAI,EAAE,OAAO,CAAA;CAAC,CAAA;AACnB,MAAM,MAAM,OAAO,GAAG,CAAC,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAA;AAEjD,MAAM,MAAM,QAAQ,GAAG,YAAY,GAAG,SAAS,GAAG,OAAO,CAAA;AACzD,MAAM,MAAM,KAAK,GAAG;IAAC,IAAI,EAAE,MAAM,CAAA;CAAC,CAAA;AAClC,MAAM,MAAM,WAAW,GAAG,MAAM,CAAA"}
@@ -0,0 +1,2 @@
1
+ import * as V from '@oidoid/void';
2
+ //# sourceMappingURL=ent.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ent.js","sourceRoot":"","sources":["../../../src/ents/ent.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,cAAc,CAAA"}
@@ -0,0 +1,6 @@
1
+ import type * as V from '@oidoid/void';
2
+ export declare class LoaderSys implements V.Sys {
3
+ readonly query = "loader";
4
+ update(ent: V.LoaderEnt, v: V.Void): void;
5
+ }
6
+ //# sourceMappingURL=loader.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"loader.d.ts","sourceRoot":"","sources":["../../../src/ents/loader.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,CAAC,MAAM,cAAc,CAAA;AAYtC,qBAAa,SAAU,YAAW,CAAC,CAAC,GAAG;IACrC,QAAQ,CAAC,KAAK,YAAW;IAEzB,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC,SAAS,EAAE,CAAC,EAAE,CAAC,CAAC,IAAI,GAAG,IAAI;CAY1C"}
@@ -0,0 +1,43 @@
1
+ import levelJSON from '../assets/init.level.jsonc' with { type: 'json' };
2
+ import { newLevelComponents } from "../level/ent-factory.js";
3
+ import { parseLevel } from "../level/level-parser.js";
4
+ import { CamSys } from "./cam.js";
5
+ import { BoardSystem } from "./board.js";
6
+ import { DrawSys } from "./draw.js";
7
+ import { PatienceTheDemonSystem } from "./patience-the-demon.js";
8
+ import { PileHitboxSystem } from "./pile-hitbox.js";
9
+ import { TallySystem } from "./tally.js";
10
+ import { VacantStockSystem } from "./vacant-stock.js";
11
+ export class LoaderSys {
12
+ query = 'loader';
13
+ update(ent, v) {
14
+ switch (ent.loader.level) {
15
+ case undefined: {
16
+ init(ent, v);
17
+ return;
18
+ }
19
+ case 'Init':
20
+ return;
21
+ default:
22
+ ent.loader.level;
23
+ }
24
+ }
25
+ }
26
+ function init(ent, v) {
27
+ v.zoo.addDefaultSystems();
28
+ const level = parseLevel(levelJSON, v.pool, v.preload);
29
+ v.zoo.add(...level.ents, ...newLevelComponents(v), { draw: {} }); // to-do: support ent ordering. can't put this in level file right now.
30
+ v.spriteByCard = new Map([...v.zoo.query('card & sprite')].map(ent => [ent.card, ent.sprite]));
31
+ v.zoo.addSystem({
32
+ board: new BoardSystem(),
33
+ cam: new CamSys(),
34
+ draw: new DrawSys(),
35
+ patienceTheDemon: new PatienceTheDemonSystem(),
36
+ pile: new PileHitboxSystem(),
37
+ tally: new TallySystem(),
38
+ vacantStock: new VacantStockSystem()
39
+ });
40
+ // to-do: validate all ents on a system add.
41
+ ent.loader.level = 'Init';
42
+ }
43
+ //# sourceMappingURL=loader.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"loader.js","sourceRoot":"","sources":["../../../src/ents/loader.ts"],"names":[],"mappings":"AACA,OAAO,SAAS,MAAM,4BAA4B,CAAC,OAAM,IAAI,EAAE,MAAM,EAAC,CAAA;AACtE,OAAO,EAAC,kBAAkB,EAAC,MAAM,yBAAyB,CAAA;AAC1D,OAAO,EAAC,UAAU,EAAC,MAAM,0BAA0B,CAAA;AACnD,OAAO,EAAC,MAAM,EAAC,MAAM,UAAU,CAAA;AAC/B,OAAO,EAAC,WAAW,EAAC,MAAM,YAAY,CAAA;AACtC,OAAO,EAAC,OAAO,EAAC,MAAM,WAAW,CAAA;AACjC,OAAO,EAAC,sBAAsB,EAAC,MAAM,yBAAyB,CAAA;AAC9D,OAAO,EAAC,gBAAgB,EAAC,MAAM,kBAAkB,CAAA;AACjD,OAAO,EAAC,WAAW,EAAC,MAAM,YAAY,CAAA;AACtC,OAAO,EAAC,iBAAiB,EAAC,MAAM,mBAAmB,CAAA;AAEnD,MAAM,OAAO,SAAS;IACX,KAAK,GAAG,QAAQ,CAAA;IAEzB,MAAM,CAAC,GAAgB,EAAE,CAAS;QAChC,QAAQ,GAAG,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;YACzB,KAAK,SAAS,CAAC,CAAC,CAAC;gBACf,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAA;gBACZ,OAAM;YACR,CAAC;YACD,KAAK,MAAM;gBACT,OAAM;YACR;gBACE,GAAG,CAAC,MAAM,CAAC,KAAqB,CAAA;QACpC,CAAC;IACH,CAAC;CACF;AAED,SAAS,IAAI,CAAC,GAAgB,EAAE,CAAS;IACvC,CAAC,CAAC,GAAG,CAAC,iBAAiB,EAAE,CAAA;IACzB,MAAM,KAAK,GAAG,UAAU,CAAC,SAAS,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,CAAA;IACtD,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,IAAI,EAAE,GAAG,kBAAkB,CAAC,CAAC,CAAC,EAAE,EAAC,IAAI,EAAE,EAAE,EAAC,CAAC,CAAA,CAAC,uEAAuE;IACtI,CAAC,CAAC,YAAY,GAAG,IAAI,GAAG,CACtB,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC,CACrE,CAAA;IACD,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC;QACd,KAAK,EAAE,IAAI,WAAW,EAAE;QACxB,GAAG,EAAE,IAAI,MAAM,EAAE;QACjB,IAAI,EAAE,IAAI,OAAO,EAAE;QACnB,gBAAgB,EAAE,IAAI,sBAAsB,EAAE;QAC9C,IAAI,EAAE,IAAI,gBAAgB,EAAE;QAC5B,KAAK,EAAE,IAAI,WAAW,EAAE;QACxB,WAAW,EAAE,IAAI,iBAAiB,EAAE;KACrC,CAAC,CAAA;IACF,4CAA4C;IAC5C,GAAG,CAAC,MAAM,CAAC,KAAK,GAAG,MAAM,CAAA;AAC3B,CAAC"}
@@ -0,0 +1,7 @@
1
+ import * as V from '@oidoid/void';
2
+ export type PatienceTheDemonEnt = V.SysEnt<PatienceTheDemonSystem>;
3
+ export declare class PatienceTheDemonSystem implements V.Sys {
4
+ readonly query = "patienceTheDemon & sprite";
5
+ update(ent: PatienceTheDemonEnt, v: V.Void): void;
6
+ }
7
+ //# sourceMappingURL=patience-the-demon.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"patience-the-demon.d.ts","sourceRoot":"","sources":["../../../src/ents/patience-the-demon.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,cAAc,CAAA;AAKjC,MAAM,MAAM,mBAAmB,GAAG,CAAC,CAAC,MAAM,CAAC,sBAAsB,CAAC,CAAA;AAElE,qBAAa,sBAAuB,YAAW,CAAC,CAAC,GAAG;IAClD,QAAQ,CAAC,KAAK,+BAA8B;IAC5C,MAAM,CAAC,GAAG,EAAE,mBAAmB,EAAE,CAAC,EAAE,CAAC,CAAC,IAAI,GAAG,IAAI;CA6BlD"}
@@ -0,0 +1,39 @@
1
+ import * as V from '@oidoid/void';
2
+ import { solitaireReset } from 'klondike-solitaire';
3
+ import { saveKey } from '../types/save.js';
4
+ import { invalidateSolitaireSprites } from '../level/level.js';
5
+ export class PatienceTheDemonSystem {
6
+ query = 'patienceTheDemon & sprite';
7
+ update(ent, v) {
8
+ const millis = Date.now() % 60000;
9
+ const blink = millis < 59700 ? '' : 'Blink';
10
+ const good = ent.sprite.tag.includes('Good');
11
+ const align = v.input.isOffStart('A')
12
+ ? good
13
+ ? 'Evil'
14
+ : 'Good'
15
+ : good
16
+ ? 'Good'
17
+ : 'Evil';
18
+ const tag = `patience-the-demon--${align}${blink}`;
19
+ if (ent.sprite.tag !== tag) {
20
+ ent.sprite.tag = tag;
21
+ ent.invalid = true;
22
+ }
23
+ if (!v.input.isOffStart('A'))
24
+ return;
25
+ if (v.zoo.cursor?.sprite.hitsZ(ent.sprite, v.cam)) {
26
+ // tail.
27
+ v.input.handled = true;
28
+ ent.invalid = true;
29
+ }
30
+ else if (v.zoo.cursor && ent.sprite.hitsZ(v.zoo.cursor.sprite, v.cam)) {
31
+ // anywhere else.
32
+ v.input.handled = true;
33
+ solitaireReset(v.solitaire);
34
+ V.saveJSON(saveKey, { wins: v.solitaire.wins });
35
+ invalidateSolitaireSprites(v);
36
+ }
37
+ }
38
+ }
39
+ //# sourceMappingURL=patience-the-demon.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"patience-the-demon.js","sourceRoot":"","sources":["../../../src/ents/patience-the-demon.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,cAAc,CAAA;AACjC,OAAO,EAAC,cAAc,EAAC,MAAM,oBAAoB,CAAA;AACjD,OAAO,EAAY,OAAO,EAAC,MAAM,kBAAkB,CAAA;AACnD,OAAO,EAAC,0BAA0B,EAAC,MAAM,mBAAmB,CAAA;AAI5D,MAAM,OAAO,sBAAsB;IACxB,KAAK,GAAG,2BAA2B,CAAA;IAC5C,MAAM,CAAC,GAAwB,EAAE,CAAS;QACxC,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK,CAAA;QACjC,MAAM,KAAK,GAAG,MAAM,GAAG,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAA;QAC3C,MAAM,IAAI,GAAG,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAA;QAC5C,MAAM,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC;YACnC,CAAC,CAAC,IAAI;gBACJ,CAAC,CAAC,MAAM;gBACR,CAAC,CAAC,MAAM;YACV,CAAC,CAAC,IAAI;gBACJ,CAAC,CAAC,MAAM;gBACR,CAAC,CAAC,MAAM,CAAA;QACZ,MAAM,GAAG,GAAG,uBAAuB,KAAK,GAAG,KAAK,EAAW,CAAA;QAC3D,IAAI,GAAG,CAAC,MAAM,CAAC,GAAG,KAAK,GAAG,EAAE,CAAC;YAC3B,GAAG,CAAC,MAAM,CAAC,GAAG,GAAG,GAAG,CAAA;YACpB,GAAG,CAAC,OAAO,GAAG,IAAI,CAAA;QACpB,CAAC;QACD,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC;YAAE,OAAM;QACpC,IAAI,CAAC,CAAC,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC;YAClD,QAAQ;YACR,CAAC,CAAC,KAAK,CAAC,OAAO,GAAG,IAAI,CAAA;YACtB,GAAG,CAAC,OAAO,GAAG,IAAI,CAAA;QACpB,CAAC;aAAM,IAAI,CAAC,CAAC,GAAG,CAAC,MAAM,IAAI,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC;YACxE,iBAAiB;YACjB,CAAC,CAAC,KAAK,CAAC,OAAO,GAAG,IAAI,CAAA;YACtB,cAAc,CAAC,CAAC,CAAC,SAAS,CAAC,CAAA;YAC3B,CAAC,CAAC,QAAQ,CAAO,OAAO,EAAE,EAAC,IAAI,EAAE,CAAC,CAAC,SAAS,CAAC,IAAI,EAAC,CAAC,CAAA;YACnD,0BAA0B,CAAC,CAAC,CAAC,CAAA;QAC/B,CAAC;IACH,CAAC;CACF"}
@@ -0,0 +1,8 @@
1
+ import type * as V from '@oidoid/void';
2
+ export type PileHitboxEnt = V.SysEnt<PileHitboxSystem>;
3
+ /** size the pile's hitbox. */
4
+ export declare class PileHitboxSystem implements V.Sys {
5
+ readonly query = "pile & sprite";
6
+ update(ent: PileHitboxEnt, v: V.Void): void;
7
+ }
8
+ //# sourceMappingURL=pile-hitbox.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pile-hitbox.d.ts","sourceRoot":"","sources":["../../../src/ents/pile-hitbox.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,CAAC,MAAM,cAAc,CAAA;AAQtC,MAAM,MAAM,aAAa,GAAG,CAAC,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAAA;AAEtD,8BAA8B;AAC9B,qBAAa,gBAAiB,YAAW,CAAC,CAAC,GAAG;IAC5C,QAAQ,CAAC,KAAK,mBAAkB;IAChC,MAAM,CAAC,GAAG,EAAE,aAAa,EAAE,CAAC,EAAE,CAAC,CAAC,IAAI,GAAG,IAAI;CAwB5C"}
@@ -0,0 +1,29 @@
1
+ import { cardWH, getFoundationCardXY, getTableauCardXY, mod } from "../level/level.js";
2
+ /** size the pile's hitbox. */
3
+ export class PileHitboxSystem {
4
+ query = 'pile & sprite';
5
+ update(ent, v) {
6
+ // to-do: why isn't this in the invalidateSolitaireSprites() fn? Seems like it
7
+ // only applies to those sprite queries. Or vice-versa. Why can't those be
8
+ // systems.
9
+ const { pile, sprite } = ent;
10
+ const xy = pile.type === 'Waste'
11
+ ? { x: sprite.x + mod - 1, y: sprite.y + mod - 1 }
12
+ : pile.type === 'Tableau'
13
+ ? getTableauCardXY(v.preload, pile.x, 0)
14
+ : getFoundationCardXY(v.preload, pile.suit);
15
+ sprite.x = xy.x - mod + 1;
16
+ sprite.y = xy.y - mod + 1;
17
+ sprite.w = cardWH.w + mod * 2 - 1;
18
+ sprite.h =
19
+ cardWH.h +
20
+ (pile.type === 'Waste'
21
+ ? (v.solitaire.waste.length > 0 ? v.solitaire.drawSize - 1 : 0) * mod
22
+ : pile.type === 'Tableau'
23
+ ? ((v.solitaire.tableau[pile.x]?.length ?? 1) - 1) * mod
24
+ : 0) +
25
+ mod * 2 -
26
+ 1;
27
+ }
28
+ }
29
+ //# sourceMappingURL=pile-hitbox.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pile-hitbox.js","sourceRoot":"","sources":["../../../src/ents/pile-hitbox.ts"],"names":[],"mappings":"AACA,OAAO,EACL,MAAM,EACN,mBAAmB,EACnB,gBAAgB,EAChB,GAAG,EACJ,MAAM,mBAAmB,CAAA;AAI1B,8BAA8B;AAC9B,MAAM,OAAO,gBAAgB;IAClB,KAAK,GAAG,eAAe,CAAA;IAChC,MAAM,CAAC,GAAkB,EAAE,CAAS;QAClC,8EAA8E;QAC9E,0EAA0E;QAC1E,WAAW;QACX,MAAM,EAAC,IAAI,EAAE,MAAM,EAAC,GAAG,GAAG,CAAA;QAC1B,MAAM,EAAE,GACN,IAAI,CAAC,IAAI,KAAK,OAAO;YACnB,CAAC,CAAC,EAAC,CAAC,EAAE,MAAM,CAAC,CAAC,GAAG,GAAG,GAAG,CAAC,EAAE,CAAC,EAAE,MAAM,CAAC,CAAC,GAAG,GAAG,GAAG,CAAC,EAAC;YAChD,CAAC,CAAC,IAAI,CAAC,IAAI,KAAK,SAAS;gBACvB,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC;gBACxC,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC,OAAO,EAAE,IAAI,CAAC,IAAI,CAAC,CAAA;QACjD,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,GAAG,GAAG,GAAG,CAAC,CAAA;QACzB,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,GAAG,GAAG,GAAG,CAAC,CAAA;QACzB,MAAM,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,GAAG,GAAG,GAAG,CAAC,GAAG,CAAC,CAAA;QACjC,MAAM,CAAC,CAAC;YACN,MAAM,CAAC,CAAC;gBACR,CAAC,IAAI,CAAC,IAAI,KAAK,OAAO;oBACpB,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG;oBACrE,CAAC,CAAC,IAAI,CAAC,IAAI,KAAK,SAAS;wBACvB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,MAAM,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,GAAG;wBACxD,CAAC,CAAC,CAAC,CAAC;gBACR,GAAG,GAAG,CAAC;gBACP,CAAC,CAAA;IACL,CAAC;CACF"}
@@ -0,0 +1,7 @@
1
+ import type * as V from '@oidoid/void';
2
+ export type TallyEnt = V.SysEnt<TallySystem>;
3
+ export declare class TallySystem implements V.Sys {
4
+ readonly query = "sprite & tally";
5
+ update(ent: TallyEnt, v: V.Void): void;
6
+ }
7
+ //# sourceMappingURL=tally.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tally.d.ts","sourceRoot":"","sources":["../../../src/ents/tally.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,CAAC,MAAM,cAAc,CAAA;AAOtC,MAAM,MAAM,QAAQ,GAAG,CAAC,CAAC,MAAM,CAAC,WAAW,CAAC,CAAA;AAE5C,qBAAa,WAAY,YAAW,CAAC,CAAC,GAAG;IACvC,QAAQ,CAAC,KAAK,oBAAmB;IACjC,MAAM,CAAC,GAAG,EAAE,QAAQ,EAAE,CAAC,EAAE,CAAC,CAAC,IAAI,GAAG,IAAI;CAYvC"}
@@ -0,0 +1,11 @@
1
+ import { maxTallies } from "../level/ent-factory.js";
2
+ export class TallySystem {
3
+ query = 'sprite & tally';
4
+ update(ent, v) {
5
+ const max = maxTallies * 10;
6
+ const wins = (Math.min(10, Math.max(0, v.solitaire.wins - ent.tally.tens * 10)) +
7
+ Math.min(10, Math.max(0, v.solitaire.wins - max - ent.tally.tens * 10)));
8
+ ent.sprite.tag = `tally--${wins}`;
9
+ }
10
+ }
11
+ //# sourceMappingURL=tally.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tally.js","sourceRoot":"","sources":["../../../src/ents/tally.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,UAAU,EAAC,MAAM,yBAAyB,CAAA;AAQlD,MAAM,OAAO,WAAW;IACb,KAAK,GAAG,gBAAgB,CAAA;IACjC,MAAM,CAAC,GAAa,EAAE,CAAS;QAC7B,MAAM,GAAG,GAAG,UAAU,GAAG,EAAE,CAAA;QAC3B,MAAM,IAAI,GAAG,CAAC,IAAI,CAAC,GAAG,CACpB,EAAE,EACF,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,SAAS,CAAC,IAAI,GAAG,GAAG,CAAC,KAAK,CAAC,IAAI,GAAG,EAAE,CAAC,CACpD;YACC,IAAI,CAAC,GAAG,CACN,EAAE,EACF,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,SAAS,CAAC,IAAI,GAAG,GAAG,GAAG,GAAG,CAAC,KAAK,CAAC,IAAI,GAAG,EAAE,CAAC,CAC1D,CAAiB,CAAA;QACpB,GAAG,CAAC,MAAM,CAAC,GAAG,GAAG,UAAU,IAAI,EAAE,CAAA;IACnC,CAAC;CACF"}
@@ -0,0 +1,7 @@
1
+ import type * as V from '@oidoid/void';
2
+ export type VacantStockEnt = V.SysEnt<VacantStockSystem>;
3
+ export declare class VacantStockSystem implements V.Sys {
4
+ readonly query = "sprite & vacantStock";
5
+ update(ent: VacantStockEnt, v: V.Void): void;
6
+ }
7
+ //# sourceMappingURL=vacant-stock.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vacant-stock.d.ts","sourceRoot":"","sources":["../../../src/ents/vacant-stock.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,CAAC,MAAM,cAAc,CAAA;AAItC,MAAM,MAAM,cAAc,GAAG,CAAC,CAAC,MAAM,CAAC,iBAAiB,CAAC,CAAA;AAExD,qBAAa,iBAAkB,YAAW,CAAC,CAAC,GAAG;IAC7C,QAAQ,CAAC,KAAK,0BAAyB;IACvC,MAAM,CAAC,GAAG,EAAE,cAAc,EAAE,CAAC,EAAE,CAAC,CAAC,IAAI,GAAG,IAAI;CAO7C"}
@@ -0,0 +1,15 @@
1
+ import { solitaireDeal } from 'klondike-solitaire';
2
+ import { invalidateSolitaireSprites } from "../level/level.js";
3
+ export class VacantStockSystem {
4
+ query = 'sprite & vacantStock';
5
+ update(ent, v) {
6
+ if (!v.input.isOffStart('A'))
7
+ return;
8
+ if (!v.zoo.cursor?.sprite.hitsZ(ent.sprite, v.cam))
9
+ return;
10
+ v.input.handled = true;
11
+ solitaireDeal(v.solitaire);
12
+ invalidateSolitaireSprites(v);
13
+ }
14
+ }
15
+ //# sourceMappingURL=vacant-stock.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vacant-stock.js","sourceRoot":"","sources":["../../../src/ents/vacant-stock.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,aAAa,EAAC,MAAM,oBAAoB,CAAA;AAChD,OAAO,EAAC,0BAA0B,EAAC,MAAM,mBAAmB,CAAA;AAI5D,MAAM,OAAO,iBAAiB;IACnB,KAAK,GAAG,sBAAsB,CAAA;IACvC,MAAM,CAAC,GAAmB,EAAE,CAAS;QACnC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC;YAAE,OAAM;QACpC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC,GAAG,CAAC;YAAE,OAAM;QAC1D,CAAC,CAAC,KAAK,CAAC,OAAO,GAAG,IAAI,CAAA;QACtB,aAAa,CAAC,CAAC,CAAC,SAAS,CAAC,CAAA;QAC1B,0BAA0B,CAAC,CAAC,CAAC,CAAA;IAC/B,CAAC;CACF"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":""}
@@ -0,0 +1,26 @@
1
+ import * as V from '@oidoid/void';
2
+ import { Solitaire } from 'klondike-solitaire';
3
+ import { description } from './assets/manifest.json'; // non-standard import to treeshake.
4
+ import config from './assets/void.game.json' with { type: 'json' };
5
+ import { LoaderSys } from "./ents/loader.js";
6
+ import { saveKey } from "./types/save.js";
7
+ console.debug(`Super Patience v${V.bundle.version}+${V.bundle.published}.${V.bundle.hash} ───oidoid>°──`);
8
+ const v = new V.Void({
9
+ config: config,
10
+ description,
11
+ preloadAtlas: document.querySelector('#atlas'),
12
+ loader: { loader: { level: undefined } },
13
+ loaderSys: new LoaderSys()
14
+ });
15
+ v.setPoller(60_000, () => V.millisUntilNext(new Date(), 'Min'));
16
+ setTimeout(() => {
17
+ v.requestFrame('Force');
18
+ setInterval(() => v.requestFrame('Force'), 60_000);
19
+ }, V.mod(V.millisUntilNext(new Date(), 'Min') + 59700, 60_000));
20
+ // h = 2 (border) + 71 (offset) + 8 * 7 (initial stack with a king on top) + 11 * 7 (Q-2) + (A) 32 - (dont care) 24 = 214
21
+ const save = V.loadJSON(saveKey) ?? { wins: 0 };
22
+ v.solitaire = Solitaire(() => v.random.num, save.wins);
23
+ await v.register('add');
24
+ if (V.debug)
25
+ globalThis.v = v;
26
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,cAAc,CAAA;AACjC,OAAO,EAAC,SAAS,EAAC,MAAM,oBAAoB,CAAA;AAC5C,OAAO,EAAC,WAAW,EAAC,MAAM,wBAAwB,CAAA,CAAC,oCAAoC;AACvF,OAAO,MAAM,MAAM,yBAAyB,CAAC,OAAM,IAAI,EAAE,MAAM,EAAC,CAAA;AAChE,OAAO,EAAC,SAAS,EAAC,MAAM,kBAAkB,CAAA;AAC1C,OAAO,EAAY,OAAO,EAAC,MAAM,iBAAiB,CAAA;AAElD,OAAO,CAAC,KAAK,CACX,mBAAmB,CAAC,CAAC,MAAM,CAAC,OAAO,IAAI,CAAC,CAAC,MAAM,CAAC,SAAS,IAAI,CAAC,CAAC,MAAM,CAAC,IAAI,gBAAgB,CAC3F,CAAA;AAED,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC,IAAI,CAAC;IACnB,MAAM,EAAE,MAAsB;IAC9B,WAAW;IACX,YAAY,EAAE,QAAQ,CAAC,aAAa,CAAmB,QAAQ,CAAC;IAChE,MAAM,EAAE,EAAC,MAAM,EAAE,EAAC,KAAK,EAAE,SAAS,EAAC,EAAC;IACpC,SAAS,EAAE,IAAI,SAAS,EAAE;CAC3B,CAAC,CAAA;AACF,CAAC,CAAC,SAAS,CAAC,MAAkB,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,eAAe,CAAC,IAAI,IAAI,EAAE,EAAE,KAAK,CAAC,CAAC,CAAA;AAC3E,UAAU,CACR,GAAG,EAAE;IACH,CAAC,CAAC,YAAY,CAAC,OAAO,CAAC,CAAA;IACvB,WAAW,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,YAAY,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC,CAAA;AACpD,CAAC,EACD,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,eAAe,CAAC,IAAI,IAAI,EAAE,EAAE,KAAK,CAAC,GAAG,KAAK,EAAE,MAAM,CAAC,CAC5D,CAAA;AACD,yHAAyH;AACzH,MAAM,IAAI,GAAG,CAAC,CAAC,QAAQ,CAAO,OAAO,CAAC,IAAI,EAAC,IAAI,EAAE,CAAC,EAAC,CAAA;AACnD,CAAC,CAAC,SAAS,GAAG,SAAS,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,EAAE,IAAI,CAAC,IAAI,CAAC,CAAA;AACtD,MAAM,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAA;AACvB,IAAI,CAAC,CAAC,KAAK;IAAG,UAA2B,CAAC,CAAC,GAAG,CAAC,CAAA"}
@@ -0,0 +1,4 @@
1
+ import * as V from '@oidoid/void';
2
+ export declare const maxTallies: number;
3
+ export declare function newLevelComponents(v: V.Void): IterableIterator<V.Ent>;
4
+ //# sourceMappingURL=ent-factory.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ent-factory.d.ts","sourceRoot":"","sources":["../../../src/level/ent-factory.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,cAAc,CAAA;AAcjC,eAAO,MAAM,UAAU,EAAE,MAAW,CAAA;AAMpC,wBAAiB,kBAAkB,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,GAAG,gBAAgB,CAAC,CAAC,CAAC,GAAG,CAAC,CAMtE"}
@@ -0,0 +1,91 @@
1
+ import * as V from '@oidoid/void';
2
+ import { SuitSet } from 'klondike-solitaire';
3
+ import { getCardTag, getFoundationCardXY, getStockXY, getTableauCardXY, getWasteXY, mod } from "./level.js";
4
+ export const maxTallies = 26;
5
+ // these are dynamic ents based on the solitaire and tally models. it'd be neat
6
+ // to explore extending the parser and generating `EntSchema` below but it'd
7
+ // need to sync references to the `v.solitaire` model.
8
+ export function* newLevelComponents(v) {
9
+ yield* newTallies(v);
10
+ yield* newFoundation(v);
11
+ yield* newStock(v);
12
+ yield* newTableau(v);
13
+ yield* newWaste(v);
14
+ }
15
+ function CardEnt(v, card, xy) {
16
+ const sprite = v.pool.default.alloc();
17
+ sprite.tag = getCardTag(card);
18
+ sprite.x = xy.x;
19
+ sprite.y = xy.y;
20
+ sprite.z = card.direction === 'Up' ? V.Layer.F : V.Layer.E;
21
+ return { sprite, card };
22
+ }
23
+ function* newFoundation(v) {
24
+ for (const suit of SuitSet) {
25
+ const vacant = v.pool.default.alloc();
26
+ vacant.tag = `card--Vacant${suit}`;
27
+ const xy = getFoundationCardXY(v.preload, suit);
28
+ vacant.x = xy.x;
29
+ vacant.y = xy.y;
30
+ vacant.z = V.Layer.D;
31
+ yield { sprite: vacant };
32
+ const palette = v.pool.default.alloc();
33
+ palette.tag = 'palette--Light';
34
+ palette.x = xy.x;
35
+ palette.y = xy.y;
36
+ palette.z = V.Layer.C;
37
+ yield { sprite: palette, pile: { type: 'Foundation', suit } };
38
+ }
39
+ }
40
+ function* newStock(v) {
41
+ const vacant = v.pool.default.alloc();
42
+ vacant.tag = 'card--VacantStock';
43
+ vacant.z = V.Layer.C;
44
+ const xy = getStockXY(v.solitaire, v.solitaire.stock.length - 1);
45
+ vacant.x = xy.x;
46
+ vacant.y = xy.y;
47
+ yield { id: 'VacantStock', sprite: vacant, vacantStock: {} };
48
+ for (const [i, card] of v.solitaire.stock.entries())
49
+ yield CardEnt(v, card, getStockXY(v.solitaire, i));
50
+ }
51
+ function* newTableau(v) {
52
+ for (const [iX, pile] of v.solitaire.tableau.entries()) {
53
+ const x = iX;
54
+ const palette = v.pool.default.alloc();
55
+ palette.tag = 'palette--Light';
56
+ palette.z = V.Layer.C;
57
+ const xy = getTableauCardXY(v.preload, x, 0);
58
+ palette.x = xy.x;
59
+ palette.y = xy.y;
60
+ yield { sprite: palette, pile: { type: 'Tableau', x } };
61
+ const vacant = v.pool.default.alloc();
62
+ vacant.tag = 'card--VacantPile';
63
+ vacant.z = V.Layer.D;
64
+ vacant.x = xy.x;
65
+ vacant.y = xy.y;
66
+ yield { sprite: vacant };
67
+ for (const [iY, card] of pile.entries())
68
+ yield CardEnt(v, card, getTableauCardXY(v.preload, x, iY));
69
+ }
70
+ }
71
+ function* newTallies(v) {
72
+ for (let i = 0; i < maxTallies; i++) {
73
+ const sprite = v.pool.default.alloc();
74
+ sprite.tag = 'tally--0';
75
+ sprite.z = V.Layer.D;
76
+ yield {
77
+ sprite,
78
+ tally: { tens: i },
79
+ hud: {
80
+ modulo: { x: mod, y: mod },
81
+ origin: 'NE',
82
+ margin: { n: 8 + i * 8, s: 8 + i * 8, w: 0, e: 0 }
83
+ }
84
+ };
85
+ }
86
+ }
87
+ function* newWaste(v) {
88
+ for (const [i, card] of v.solitaire.waste.entries())
89
+ yield CardEnt(v, card, getWasteXY(v.solitaire, i));
90
+ }
91
+ //# sourceMappingURL=ent-factory.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ent-factory.js","sourceRoot":"","sources":["../../../src/level/ent-factory.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,58 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "$id": "https://raw.githubusercontent.com/oidoid/super-patience/refs/heads/main/src/level/level-file.json",
4
+ "allOf": [{ "$ref": "https://oidoid.github.io/void/level-file.v0.json" }],
5
+ "$defs": {
6
+ "Board": { "type": "object", "description": "board config." },
7
+ "Ent": {
8
+ "allOf": [
9
+ { "$ref": "https://oidoid.github.io/void/level-file.v0.json#/$defs/Ent" },
10
+ {
11
+ "type": "object",
12
+ "properties": {
13
+ "board": { "$ref": "#/$defs/Board", "unevaluatedProperties": false },
14
+ "patienceTheDemon": {
15
+ "$ref": "#/$defs/PatienceTheDemon",
16
+ "unevaluatedProperties": false
17
+ },
18
+ "pile": { "$ref": "#/$defs/Pile", "unevaluatedProperties": false },
19
+ "tally": { "$ref": "#/$defs/Tally", "unevaluatedProperties": false }
20
+ }
21
+ }
22
+ ],
23
+ "$comment": "to-do: `\"$dynamicAnchor\": \"Ent\"`."
24
+ },
25
+ "Pile": {
26
+ "type": "object",
27
+ "description": "pile config.",
28
+ "properties": {
29
+ "type": { "description": "pile type.", "enum": ["Waste"] }
30
+ }
31
+ },
32
+ "PatienceTheDemon": {
33
+ "type": "object",
34
+ "description": "Patience the Demon config."
35
+ },
36
+ "Tag": {
37
+ "$ref": "https://oidoid.github.io/void/level-file.v0.json#/$defs/Tag",
38
+ "$comment": "to-do: `\"$dynamicAnchor\": \"Tag\"` and populate tags from tools/void.ts."
39
+ },
40
+ "Tally": { "type": "object", "description": "tally config." }
41
+ },
42
+ "unevaluatedProperties": false,
43
+ "properties": {
44
+ "ents": {
45
+ "allOf": [
46
+ {
47
+ "$ref": "https://oidoid.github.io/void/level-file.v0.json#/properties/ents"
48
+ }
49
+ ],
50
+ "items": {
51
+ "$dynamicRef": "#Ent",
52
+ "$ref": "#/$defs/Ent",
53
+ "$comment": "to-do: delete root properties once dynamic refs are supported.",
54
+ "unevaluatedProperties": false
55
+ }
56
+ }
57
+ }
58
+ }
@@ -0,0 +1,5 @@
1
+ import * as V from '@oidoid/void';
2
+ export declare function parseLevel(json: Readonly<V.LevelSchema>, pools: Readonly<V.PoolMap>, atlas: Readonly<V.Atlas>): V.Level;
3
+ /** @internal */
4
+ export declare const parseComponent: V.ComponentHook;
5
+ //# sourceMappingURL=level-parser.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"level-parser.d.ts","sourceRoot":"","sources":["../../../src/level/level-parser.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,cAAc,CAAA;AAEjC,wBAAgB,UAAU,CACxB,IAAI,EAAE,QAAQ,CAAC,CAAC,CAAC,WAAW,CAAC,EAC7B,KAAK,EAAE,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,EAC1B,KAAK,EAAE,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,GACvB,CAAC,CAAC,KAAK,CAET;AAED,gBAAgB;AAChB,eAAO,MAAM,cAAc,EAAE,CAAC,CAAC,aAiB9B,CAAA"}
@@ -0,0 +1,24 @@
1
+ import * as V from '@oidoid/void';
2
+ export function parseLevel(json, pools, atlas) {
3
+ return V.parseLevel(json, pools, parseComponent, atlas);
4
+ }
5
+ /** @internal */
6
+ export const parseComponent = (_ent, json, k) => {
7
+ if (json[k] == null)
8
+ throw Error('no component val');
9
+ switch (k) {
10
+ case 'cam':
11
+ case 'draw':
12
+ case 'patienceTheDemon':
13
+ case 'pile':
14
+ return json[k];
15
+ case 'board':
16
+ return {
17
+ cards: undefined,
18
+ piles: undefined,
19
+ selected: [],
20
+ vacantStock: undefined
21
+ };
22
+ }
23
+ };
24
+ //# sourceMappingURL=level-parser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"level-parser.js","sourceRoot":"","sources":["../../../src/level/level-parser.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,cAAc,CAAA;AAEjC,MAAM,UAAU,UAAU,CACxB,IAA6B,EAC7B,KAA0B,EAC1B,KAAwB;IAExB,OAAO,CAAC,CAAC,UAAU,CAAC,IAAI,EAAE,KAAK,EAAE,cAAc,EAAE,KAAK,CAAC,CAAA;AACzD,CAAC;AAED,gBAAgB;AAChB,MAAM,CAAC,MAAM,cAAc,GAAoB,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,EAAE,EAAE;IAC/D,IAAI,IAAI,CAAC,CAAC,CAAC,IAAI,IAAI;QAAE,MAAM,KAAK,CAAC,kBAAkB,CAAC,CAAA;IACpD,QAAQ,CAAC,EAAE,CAAC;QACV,KAAK,KAAK,CAAC;QACX,KAAK,MAAM,CAAC;QACZ,KAAK,kBAAkB,CAAC;QACxB,KAAK,MAAM;YACT,OAAO,IAAI,CAAC,CAAC,CAA2B,CAAA;QAE1C,KAAK,OAAO;YACV,OAAO;gBACL,KAAK,EAAE,SAAS;gBAChB,KAAK,EAAE,SAAS;gBAChB,QAAQ,EAAE,EAAE;gBACZ,WAAW,EAAE,SAAS;aACG,CAAA;IAC/B,CAAC;AACH,CAAC,CAAA"}
@@ -0,0 +1,6 @@
1
+ export type BoardSchema = object;
2
+ export type PatienceTheDemonSchema = object;
3
+ export type PileSchema = {
4
+ type: 'Waste';
5
+ };
6
+ //# sourceMappingURL=level-schema.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"level-schema.d.ts","sourceRoot":"","sources":["../../../src/level/level-schema.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,WAAW,GAAG,MAAM,CAAA;AAChC,MAAM,MAAM,sBAAsB,GAAG,MAAM,CAAA;AAC3C,MAAM,MAAM,UAAU,GAAG;IAAC,IAAI,EAAE,OAAO,CAAA;CAAC,CAAA"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=level-schema.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"level-schema.js","sourceRoot":"","sources":["../../../src/level/level-schema.ts"],"names":[],"mappings":""}