lilgotchi 0.0.0-stage → 3.0.2

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 (120) hide show
  1. package/LICENSE.md +21 -0
  2. package/README.md +69 -3
  3. package/dist/LICENSE.md +21 -0
  4. package/dist/README.md +69 -0
  5. package/dist/design/evolution/README.md +7 -0
  6. package/dist/design/evolution/cypunk.js +3 -0
  7. package/dist/design/evolution/cypunk.md +20 -0
  8. package/dist/design/evolution/index.html +20 -0
  9. package/dist/design/evolution/lilgotchi.js +3 -0
  10. package/dist/design/evolution/lilgotchi.md +20 -0
  11. package/dist/design/evolution/preview.css +3 -0
  12. package/dist/design/evolution/preview.js +47 -0
  13. package/dist/design/evolution/slice.js +3 -0
  14. package/dist/design/evolution/slice.md +14 -0
  15. package/dist/design/games/README.md +52 -0
  16. package/dist/design/games/bump.md +23 -0
  17. package/dist/design/games/catalog.md +24 -0
  18. package/dist/design/games/flag.md +19 -0
  19. package/dist/design/games/get.md +21 -0
  20. package/dist/design/games/heading.md +23 -0
  21. package/dist/design/games/hoops.md +17 -0
  22. package/dist/design/games/left-right.md +30 -0
  23. package/dist/design/games/memory.md +21 -0
  24. package/dist/design/games/polish-review.md +11 -0
  25. package/dist/design/games/release-checklist.md +52 -0
  26. package/dist/design/games/sprint.md +21 -0
  27. package/dist/docs/README.md +14 -0
  28. package/dist/docs/care.md +51 -0
  29. package/dist/docs/characters.md +51 -0
  30. package/dist/docs/credits.md +17 -0
  31. package/dist/docs/development.md +87 -0
  32. package/dist/docs/frame-contract.md +38 -0
  33. package/dist/docs/images/cypunk-family.jpg +0 -0
  34. package/dist/docs/images/lilgotchi-family.jpg +0 -0
  35. package/dist/docs/images/original-family.jpg +0 -0
  36. package/dist/docs/images/slice-family.jpg +0 -0
  37. package/dist/docs/install.md +41 -0
  38. package/dist/docs/release-review.md +47 -0
  39. package/dist/embed.js +21 -0
  40. package/dist/examples/cross-origin.html +7 -0
  41. package/dist/examples/curated.html +12 -0
  42. package/dist/examples/duplicate.html +3 -0
  43. package/dist/examples/install.html +11 -0
  44. package/dist/examples/launcher-review.html +23 -0
  45. package/dist/examples/launchers.html +10 -0
  46. package/dist/examples/nested/index.html +6 -0
  47. package/dist/examples/one-line.html +9 -0
  48. package/dist/index.html +100 -0
  49. package/dist/lilgotchi.js +437 -0
  50. package/dist/pets/NOTICE.md +19 -0
  51. package/dist/pets/README.md +7 -0
  52. package/dist/pets/arcade-catalog.js +52 -0
  53. package/dist/pets/arcade-geometry.js +18 -0
  54. package/dist/pets/arcade-opponents.js +16 -0
  55. package/dist/pets/arcade-renderer.js +116 -0
  56. package/dist/pets/arcade-sprites.js +64 -0
  57. package/dist/pets/arcade.js +393 -0
  58. package/dist/pets/away.js +20 -0
  59. package/dist/pets/boot.js +161 -0
  60. package/dist/pets/catalog.js +32 -0
  61. package/dist/pets/celebrations.js +54 -0
  62. package/dist/pets/classic-sprites.js +672 -0
  63. package/dist/pets/clock.js +3 -0
  64. package/dist/pets/colors.js +38 -0
  65. package/dist/pets/constants.js +20 -0
  66. package/dist/pets/custom-themes.css +80 -0
  67. package/dist/pets/cyberpunk-sprites.js +68 -0
  68. package/dist/pets/cypunk-original.js +2 -0
  69. package/dist/pets/embed.css +130 -0
  70. package/dist/pets/engine.js +38 -0
  71. package/dist/pets/evolution.js +46 -0
  72. package/dist/pets/focus.js +27 -0
  73. package/dist/pets/font.js +185 -0
  74. package/dist/pets/game.css +275 -0
  75. package/dist/pets/game.html +148 -0
  76. package/dist/pets/game.js +626 -0
  77. package/dist/pets/layout.js +53 -0
  78. package/dist/pets/lilgotchi-sprites.js +62 -0
  79. package/dist/pets/minigames/bump.js +52 -0
  80. package/dist/pets/minigames/flag.js +87 -0
  81. package/dist/pets/minigames/get.js +59 -0
  82. package/dist/pets/minigames/heading.js +117 -0
  83. package/dist/pets/minigames/hoops.js +96 -0
  84. package/dist/pets/minigames/memory.js +81 -0
  85. package/dist/pets/minigames/model.js +40 -0
  86. package/dist/pets/minigames/sprint.js +103 -0
  87. package/dist/pets/original-roster.js +46 -0
  88. package/dist/pets/original-sprites.js +3861 -0
  89. package/dist/pets/overlay-size.js +13 -0
  90. package/dist/pets/pixel-size.js +6 -0
  91. package/dist/pets/presentation.js +80 -0
  92. package/dist/pets/renderer.js +100 -0
  93. package/dist/pets/scenery.css +24 -0
  94. package/dist/pets/simulation.js +185 -0
  95. package/dist/pets/skins.js +14 -0
  96. package/dist/pets/slice-sprites.js +38 -0
  97. package/dist/pets/sound.js +33 -0
  98. package/dist/pets/status.js +28 -0
  99. package/dist/pets/storage.js +49 -0
  100. package/dist/pets/valid-state.js +26 -0
  101. package/dist/pets/wellbeing.js +73 -0
  102. package/dist/reference/source.json +8 -0
  103. package/dist/version.json +5 -0
  104. package/dist/widget/care-guide.js +50 -0
  105. package/dist/widget/care-monitor.js +52 -0
  106. package/dist/widget/color-controls.js +15 -0
  107. package/dist/widget/configurator.js +24 -0
  108. package/dist/widget/egg.svg +1 -0
  109. package/dist/widget/focus.js +6 -0
  110. package/dist/widget/gallery.js +17 -0
  111. package/dist/widget/inactive.js +24 -0
  112. package/dist/widget/install-snippet.js +14 -0
  113. package/dist/widget/launcher.js +63 -0
  114. package/dist/widget/pet-history.js +57 -0
  115. package/dist/widget/pet-label.js +12 -0
  116. package/dist/widget/save-store.js +198 -0
  117. package/dist/widget/scroll-lock.js +11 -0
  118. package/dist/widget/settings.js +48 -0
  119. package/dist/widget/shell.css +63 -0
  120. package/package.json +43 -6
package/LICENSE.md ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Taylor Dorsett
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md CHANGED
@@ -1,3 +1,69 @@
1
- # Temporary Holding Version
2
-
3
- This version is a temporary placeholder for this package. An operational version to replace this has been submitted for review and is awaiting a staged release.
1
+ # <img src="https://raw.githubusercontent.com/TaylorOD/lilgotchi/main/widget/egg.svg" width="24" height="28" alt=""> lilgotchi
2
+
3
+ A little pixel pet for your website. Feed it, play with it, and watch it grow.
4
+
5
+ **[Meet lilgotchi](https://www.taylordorsett.com/lilgotchi/)** · **[Character guide](https://github.com/TaylorOD/lilgotchi/blob/main/docs/characters.md)** · **[Download](https://github.com/TaylorOD/lilgotchi/releases/latest)**
6
+
7
+ <p align="center">
8
+ <a href="https://www.taylordorsett.com/lilgotchi/">
9
+ <img src="https://raw.githubusercontent.com/TaylorOD/lilgotchi/main/pr-screenshots/adult-margherita-readme.jpg" alt="Adult Margherita in the lilgotchi widget" width="320">
10
+ </a>
11
+ </p>
12
+
13
+ ## Five little families
14
+
15
+ | Family | Starts as |
16
+ | --- | --- |
17
+ | Slice | A ball of dough |
18
+ | Cypunk | A binary egg |
19
+ | Lilgotchi | Our little logo egg |
20
+ | Gen 1 | The classic egg |
21
+ | Gen 2 | The second generation egg |
22
+
23
+ Every family starts small and follows its own growth paths. Each keeps a separate save. Gen 1 and Gen 2 include 26 characters across both generations, with source pixel artwork and regional hidden forms.
24
+
25
+ Choose **Start pet** when you are ready. Opening the drawer or switching families does not start a new pet. Each family has its own handheld and screen colors in **Settings**, with a button to return to its defaults.
26
+
27
+ Feed, play, clean up and settle down for a nap. Progress stays in your browser, with file backups in Settings.
28
+
29
+ ## Put one on your website
30
+
31
+ ```html
32
+ <script defer src="https://www.taylordorsett.com/lilgotchi/releases/3.0.2/embed.js"></script>
33
+ ```
34
+
35
+ That’s it. No account, backend or dependencies.
36
+
37
+ Use the [setup tool](https://www.taylordorsett.com/lilgotchi/) to pick your pets and placement. The [install guide](https://github.com/TaylorOD/lilgotchi/blob/main/docs/install.md) covers hosting your own copy.
38
+
39
+ ## Install with npm
40
+
41
+ ```sh
42
+ npm install lilgotchi
43
+ ```
44
+
45
+ Copy the whole `node_modules/lilgotchi/dist` folder into your site's public assets, then load its `embed.js`. Keep the game pages, scripts and styles together. Installing the package alone does not add the widget to your page.
46
+
47
+ [View on npm](https://www.npmjs.com/package/lilgotchi)
48
+
49
+ ## Eight ways to play
50
+
51
+ Catch notes, bump an opponent, head a ball, repeat arrows, follow flags, race and shoot hoops. Or play the original guessing game. [See the games](https://github.com/TaylorOD/lilgotchi/blob/main/design/games/README.md).
52
+
53
+ ## Work on it
54
+
55
+ ```sh
56
+ npm start
57
+ npm test
58
+ npm run build
59
+ ```
60
+
61
+ Open [localhost:4176](http://localhost:4176). The build goes in `dist`.
62
+
63
+ [Development](https://github.com/TaylorOD/lilgotchi/blob/main/docs/development.md) · [Care guide](https://github.com/TaylorOD/lilgotchi/blob/main/docs/care.md) · [Release notes](https://github.com/TaylorOD/lilgotchi/blob/main/docs/release-review.md)
64
+
65
+ ## License
66
+
67
+ [MIT](https://github.com/TaylorOD/lilgotchi/blob/main/LICENSE.md) for the software. The Gen 1 and Gen 2 character artwork is third party material with separate ownership. Keep the license and [required notices](https://github.com/TaylorOD/lilgotchi/blob/main/pets/NOTICE.md) with redistributed copies.
68
+
69
+ [Credits](https://github.com/TaylorOD/lilgotchi/blob/main/docs/credits.md)
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Taylor Dorsett
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/dist/README.md ADDED
@@ -0,0 +1,69 @@
1
+ # <img src="https://raw.githubusercontent.com/TaylorOD/lilgotchi/main/widget/egg.svg" width="24" height="28" alt=""> lilgotchi
2
+
3
+ A little pixel pet for your website. Feed it, play with it, and watch it grow.
4
+
5
+ **[Meet lilgotchi](https://www.taylordorsett.com/lilgotchi/)** · **[Character guide](https://github.com/TaylorOD/lilgotchi/blob/main/docs/characters.md)** · **[Download](https://github.com/TaylorOD/lilgotchi/releases/latest)**
6
+
7
+ <p align="center">
8
+ <a href="https://www.taylordorsett.com/lilgotchi/">
9
+ <img src="https://raw.githubusercontent.com/TaylorOD/lilgotchi/main/pr-screenshots/adult-margherita-readme.jpg" alt="Adult Margherita in the lilgotchi widget" width="320">
10
+ </a>
11
+ </p>
12
+
13
+ ## Five little families
14
+
15
+ | Family | Starts as |
16
+ | --- | --- |
17
+ | Slice | A ball of dough |
18
+ | Cypunk | A binary egg |
19
+ | Lilgotchi | Our little logo egg |
20
+ | Gen 1 | The classic egg |
21
+ | Gen 2 | The second generation egg |
22
+
23
+ Every family starts small and follows its own growth paths. Each keeps a separate save. Gen 1 and Gen 2 include 26 characters across both generations, with source pixel artwork and regional hidden forms.
24
+
25
+ Choose **Start pet** when you are ready. Opening the drawer or switching families does not start a new pet. Each family has its own handheld and screen colors in **Settings**, with a button to return to its defaults.
26
+
27
+ Feed, play, clean up and settle down for a nap. Progress stays in your browser, with file backups in Settings.
28
+
29
+ ## Put one on your website
30
+
31
+ ```html
32
+ <script defer src="https://www.taylordorsett.com/lilgotchi/releases/3.0.2/embed.js"></script>
33
+ ```
34
+
35
+ That’s it. No account, backend or dependencies.
36
+
37
+ Use the [setup tool](https://www.taylordorsett.com/lilgotchi/) to pick your pets and placement. The [install guide](https://github.com/TaylorOD/lilgotchi/blob/main/docs/install.md) covers hosting your own copy.
38
+
39
+ ## Install with npm
40
+
41
+ ```sh
42
+ npm install lilgotchi
43
+ ```
44
+
45
+ Copy the whole `node_modules/lilgotchi/dist` folder into your site's public assets, then load its `embed.js`. Keep the game pages, scripts and styles together. Installing the package alone does not add the widget to your page.
46
+
47
+ [View on npm](https://www.npmjs.com/package/lilgotchi)
48
+
49
+ ## Eight ways to play
50
+
51
+ Catch notes, bump an opponent, head a ball, repeat arrows, follow flags, race and shoot hoops. Or play the original guessing game. [See the games](https://github.com/TaylorOD/lilgotchi/blob/main/design/games/README.md).
52
+
53
+ ## Work on it
54
+
55
+ ```sh
56
+ npm start
57
+ npm test
58
+ npm run build
59
+ ```
60
+
61
+ Open [localhost:4176](http://localhost:4176). The build goes in `dist`.
62
+
63
+ [Development](https://github.com/TaylorOD/lilgotchi/blob/main/docs/development.md) · [Care guide](https://github.com/TaylorOD/lilgotchi/blob/main/docs/care.md) · [Release notes](https://github.com/TaylorOD/lilgotchi/blob/main/docs/release-review.md)
64
+
65
+ ## License
66
+
67
+ [MIT](https://github.com/TaylorOD/lilgotchi/blob/main/LICENSE.md) for the software. The Gen 1 and Gen 2 character artwork is third party material with separate ownership. Keep the license and [required notices](https://github.com/TaylorOD/lilgotchi/blob/main/pets/NOTICE.md) with redistributed copies.
68
+
69
+ [Credits](https://github.com/TaylorOD/lilgotchi/blob/main/docs/credits.md)
@@ -0,0 +1,7 @@
1
+ # Family artwork
2
+
3
+ Run `npm start` and open [the viewer](http://localhost:4176/design/evolution/). Pick a family and expression to see the game sprites.
4
+
5
+ [Slice](slice.md) · [Cypunk](cypunk.md) · [Lilgotchi](lilgotchi.md)
6
+
7
+ The [character guide](../../docs/characters.md) has the full family trees. The [sprite rules](../../docs/frame-contract.md) cover drawing and screen bounds.
@@ -0,0 +1,3 @@
1
+ import { cyberpunkSprites as sprites, cyberpunkPalette as palette, cyberpunkNames as names } from '../../pets/cyberpunk-sprites.js';
2
+ const stages={egg:'egg',babytchi:'baby',marutchi:'child',tamatchi:'teen',kuchitamatchi:'teen'};
3
+ export const proposal={type:'Cypunk',palette,pets:Object.entries(sprites).map(([id,frames])=>({id,name:names[id],stage:stages[id]||'adult',frames}))};
@@ -0,0 +1,20 @@
1
+ # Cypunk artwork
2
+
3
+ Little robots with faces, hands and feet. Binary Seed reads 01. Sentinel uses the original Cypunk adult artwork. Matrix is green with small code lights on its body.
4
+
5
+ | Original identity | Name | Shape and detail |
6
+ | --- | --- | --- |
7
+ | egg | Binary Seed | Rounded cyan seed carrying tiny binary marks |
8
+ | babytchi | Bit | Small digital block with a face and two feet |
9
+ | marutchi | Byte | Wider chip with an antenna and side contacts |
10
+ | tamatchi | Compiler | Upright terminal character with a neat head and body |
11
+ | kuchitamatchi | Syntax Error | Uneven terminal with detached magenta pixels |
12
+ | mametchi | JavaScript | Cyan robot with yellow antenna tips, scarf, hands and feet |
13
+ | ginjirotchi | Sentinel | The original Cypunk adult, with its exact sprite and expressions |
14
+ | maskutchi | Matrix | Green robot with antennae, a face and falling torso lights |
15
+ | kuchipatchi | 404 | Lost little robot with a bent magenta antenna and lowered arms |
16
+ | nyorotchi | MissingNumber | Original asymmetric block creature with broken edges and magenta fragments |
17
+ | tarakotchi | Blue Screen | Wide blue monitor companion with a face, arms and feet |
18
+ | oyajitchi | Glitch Elder | Cyan elder made of separated chunks and magenta fragments |
19
+
20
+ See the [family trees](../../docs/characters.md) for growth paths and the [sprite rules](../../docs/frame-contract.md) for sizes and expressions. The preview reads the same art as the game.
@@ -0,0 +1,20 @@
1
+ <!doctype html>
2
+ <html lang="en">
3
+ <meta charset="utf-8">
4
+ <meta name="viewport" content="width=device-width,initial-scale=1">
5
+ <title>lilgotchi evolution paths</title>
6
+ <link rel="icon" type="image/svg+xml" href="../../widget/egg.svg">
7
+ <link rel="stylesheet" href="preview.css">
8
+ <main>
9
+ <a class="back-home" href="../../"><span aria-hidden="true">&larr;</span> back to main page</a>
10
+ <p class="guide-brand"><img src="../../widget/egg.svg" width="24" height="28" alt=""> lilgotchi</p>
11
+ <p class="eyebrow">character guide</p>
12
+ <h1>A whole little life.</h1>
13
+ <p>The character paths and artwork in lilgotchi.</p>
14
+ <nav aria-label="Pet type"><button data-type="slice" aria-pressed="true">Slice</button><button data-type="cypunk" aria-pressed="false">Cypunk</button><button data-type="lilgotchi" aria-pressed="false">Lilgotchi</button><button data-type="original" aria-pressed="false">Gen 1</button><button data-type="original2" aria-pressed="false">Gen 2</button></nav>
15
+ <label>Expression <select id="expression"><option value="idle1">Idle</option><option value="idle2">Moving</option><option value="happy">Happy</option><option value="sad">Sad</option><option value="eat">Eating</option><option value="sleep">Sleeping</option></select></label>
16
+ <section id="review" aria-live="polite"></section>
17
+ <p class="note">Paths follow the current game code. This is not a claim of exact original hardware accuracy. <a id="details" href="slice.md">Read the full pathways</a>.</p>
18
+ </main>
19
+ <script type="module" src="preview.js"></script>
20
+ </html>
@@ -0,0 +1,3 @@
1
+ import { lilgotchiSprites as sprites, lilgotchiPalette as palette, lilgotchiNames as names } from '../../pets/lilgotchi-sprites.js';
2
+ const stages={egg:'egg',babytchi:'baby',marutchi:'child',tamatchi:'teen',kuchitamatchi:'teen'};
3
+ export const proposal={type:'Lilgotchi',palette,pets:Object.entries(sprites).map(([id,frames])=>({id,name:names[id],stage:stages[id]||'adult',frames}))};
@@ -0,0 +1,20 @@
1
+ # Lilgotchi artwork
2
+
3
+ An egg that stays an egg. Different shells and markings give each adult its own look. Cracked Elder has a missing side piece and a crack running down from it.
4
+
5
+ | Original identity | Proposed egg | Stage | Visual cue |
6
+ | --- | --- | --- | --- |
7
+ | egg | Little Egg | Egg | Small cream shell without eyes |
8
+ | babytchi | Peep Egg | Baby | Small cream shell gains eyes |
9
+ | marutchi | Growing Egg | Child | Taller cream shell |
10
+ | tamatchi | Smooth Egg | Teen | Smooth cream shell with a highlight |
11
+ | kuchitamatchi | Speckled Egg | Teen | Tan shell with a few spots |
12
+ | mametchi | Duck Egg | Adult | Rounded pale green shell |
13
+ | ginjirotchi | Quail Egg | Adult | Smaller tan shell with brown speckles |
14
+ | maskutchi | Goose Egg | Adult | Tall white shell |
15
+ | kuchipatchi | Jumbo Egg | Adult | Broad cream shell |
16
+ | nyorotchi | Golden Egg | Adult | Gold shell with a diagonal shine |
17
+ | tarakotchi | Century Egg | Adult | Dark teal shell and light eyes |
18
+ | oyajitchi | Cracked Elder | Adult elder | White shell with a crack at the top |
19
+
20
+ See the [family trees](../../docs/characters.md) for growth paths and the [sprite rules](../../docs/frame-contract.md) for sizes and expressions. The preview reads the same art as the game.
@@ -0,0 +1,3 @@
1
+ :root{color-scheme:dark;font-family:system-ui,sans-serif;color:#eeeae0;background:#101619}*{box-sizing:border-box}body{margin:0;padding:32px}main{max-width:1050px;margin:auto}h1{font-size:44px;letter-spacing:-.04em;margin:4px 0 10px}h2{font-size:22px;margin:24px 0 12px}p{color:#b4c3c6;line-height:1.5;margin:8px 0}.eyebrow{color:#e3c58a;letter-spacing:.12em;text-transform:uppercase;font-size:12px}nav{display:flex;flex-wrap:wrap;gap:10px;margin:22px 0 16px}button,select{font:inherit;min-height:44px;border:1px solid #4c6068;border-radius:10px;background:#19252b;color:inherit;padding:10px 18px}button{cursor:pointer}button[aria-pressed=true]{background:#e3c58a;color:#162025;border-color:#e3c58a}label{font-size:13px;color:#b4c3c6}select{margin-left:12px;padding:8px 12px}.grid{display:grid;gap:12px}.growing{grid-template-columns:repeat(5,1fr)}.adults{grid-template-columns:repeat(3,1fr)}article{border:1px solid #35464b;border-radius:16px;padding:16px;background:#182126;text-align:center}article svg{width:84px;height:84px;display:block;margin:8px auto 12px;image-rendering:pixelated}h3{margin:8px 0;font-size:17px}.stage{font-size:11px;text-transform:uppercase;color:#e3c58a;letter-spacing:.08em}.route{font-size:12px;min-height:36px}.original{font-size:11px;color:#8fa5ad}.elder{display:flex;align-items:center;gap:24px;text-align:left}.elder svg{margin:0;width:84px;flex-shrink:0}.elder p{max-width:70ch}.note{font-size:12px;margin-top:24px}a{color:#9de4ce}button:focus-visible,select:focus-visible,a:focus-visible{outline:2px solid #9de4ce;outline-offset:3px}@media(max-width:600px){body{padding:22px 16px}h1{font-size:34px}.growing,.adults{grid-template-columns:repeat(2,minmax(0,1fr))}article{padding:12px}.elder{align-items:flex-start;gap:12px}nav{gap:8px}button{padding:10px 14px}}
2
+
3
+ .back-home{display:inline-flex;align-items:center;gap:8px;min-height:44px;margin-bottom:18px;text-decoration:none;font-weight:650}.back-home:hover{text-decoration:underline}.guide-brand{display:flex;align-items:center;gap:8px;font-size:24px;font-weight:750;color:#eeeae0;margin:0 0 18px}.guide-brand img{image-rendering:pixelated;height:1em;width:auto}
@@ -0,0 +1,47 @@
1
+ import {proposal as slice} from './slice.js';
2
+ import {proposal as cypunk} from './cypunk.js';
3
+ import {proposal as lilgotchi} from './lilgotchi.js';
4
+ import {classicSprites} from '../../pets/classic-sprites.js';
5
+ import {originalSprites} from '../../pets/original-sprites.js';
6
+ import {p1Stages,p2Stages} from '../../pets/original-roster.js';
7
+ const original={type:'Gen 1',palette:['','#b4ce83']};
8
+ const original2={type:'Gen 2',palette:['','#b4ce83']};
9
+ const proposals={original,original2,slice,cypunk,lilgotchi};
10
+ let selected=new URLSearchParams(location.search).get('family')||'slice';
11
+ if(!proposals[selected])selected='slice';
12
+ const early=['90 second hatch','Baby','Child','0 or 1 care mistakes','2+ care mistakes'];
13
+ const adultRoutes=[
14
+ 'Smooth teen · ≤2 mistakes + 100% discipline',
15
+ 'Smooth teen · ≤2 mistakes + 75–99% discipline',
16
+ 'Smooth teen · ≤4 mistakes + ≥50% discipline, after earlier checks fail',
17
+ 'Smooth teen · remaining ≥50% discipline. Rough teen · ≥75%',
18
+ 'Smooth teen · 25–49% discipline. Rough teen · 50–74%',
19
+ 'Smooth teen · below 25% discipline. Rough teen · below 50%',
20
+ ];
21
+ function sprite(pet,palette,expression){
22
+ const frame=pet.frames[expression]||pet.frames.idle1;
23
+ return `<svg viewBox="-1 -1 ${frame[0].length+2} ${frame.length+2}" role="img" aria-label="${pet.name}" shape-rendering="crispEdges">${frame.flatMap((row,y)=>row.map((pixel,x)=>pixel?`<rect x="${x}" y="${y}" width="1" height="1" fill="${palette[pixel]}"/>`:'')).join('')}</svg>`;
24
+ }
25
+ function render(){
26
+ const {type,pets,palette}=proposals[selected];
27
+ const expression=document.querySelector('#expression').value;
28
+ if(selected==='original'||selected==='original2'){
29
+ const stages=selected==='original'?p1Stages:p2Stages;
30
+ const hidden=selected==='original'?['oyajitchi','bill']:['sekitoritchi','charitchi','zatchi'];
31
+ const sections=[['growing up',[...stages.egg,...stages.baby,...stages.child,...stages.teen]],['adults',stages.adult.filter(id=>!hidden.includes(id))],['hidden',hidden]];
32
+ document.querySelector('#review').innerHTML=`<h2>${type}: the full lineup</h2><p class="note">Gen 1 and Gen 2 source pixels, including regional characters. Both families use lilgotchi care timing and adapted growth paths.</p>`+sections.map(([stage,ids])=>`<h2>${stage[0].toUpperCase()+stage.slice(1)}</h2><div class="grid adults">${ids.map(id=>{
33
+ const pet={id,name:id==='egg'?'Egg':id[0].toUpperCase()+id.slice(1),frames:originalSprites[id]||classicSprites[id]};
34
+ return `<article><span class="stage">${Object.entries(stages).find(([,ids])=>ids.includes(id))[0]}</span>${sprite(pet,palette,expression)}<h3>${pet.name}</h3><span class="original">${id}</span></article>`;
35
+ }).join('')}</div>`).join('');
36
+ document.querySelector('#details').href='../../docs/characters.md';
37
+ document.querySelectorAll('[data-type]').forEach(button=>button.setAttribute('aria-pressed',String(button.dataset.type===selected)));
38
+ return;
39
+ }
40
+ function card(pet,route){return `<article><span class="stage">${pet.stage}</span>${sprite(pet,palette,expression)}<h3>${pet.name}</h3><p class="route">${route}</p><span class="original">${pet.id}</span></article>`;}
41
+ document.querySelector('#review').innerHTML=`<h2>${type}: growing up</h2><div class="grid growing">${pets.slice(0,5).map((pet,i)=>card(pet,early[i])).join('')}</div><h2>Six adult possibilities</h2><p class="note">“Smooth teen” is ${pets[3].name}. “Rough teen” is ${pets[4].name}. Conditions are checked in order.</p><div class="grid adults">${pets.slice(5,11).map((pet,i)=>card(pet,adultRoutes[i])).join('')}</div><h2>A special elder</h2><article class="elder">${sprite(pets[11],palette,expression)}<div><h3>${pets[7].name} → ${pets[11].name}</h3><p>Age 10 or older, alive and 100% discipline. A 5% chance each eligible simulation tick. Other adults do not take this path.</p><span class="original">maskutchi → oyajitchi</span></div></article>`;
42
+ document.querySelector('#details').href=selected==='original'?'../../docs/characters.md':`${selected}.md`;
43
+ document.querySelectorAll('[data-type]').forEach(button=>button.setAttribute('aria-pressed',String(button.dataset.type===selected)));
44
+ }
45
+ document.querySelectorAll('[data-type]').forEach(button=>button.addEventListener('click',()=>{selected=button.dataset.type;render();}));
46
+ document.querySelector('#expression').addEventListener('change',render);
47
+ render();
@@ -0,0 +1,3 @@
1
+ import { sliceSprites as sprites, slicePalette as palette, sliceNames as names } from '../../pets/slice-sprites.js';
2
+ const stages={egg:'egg',babytchi:'baby',marutchi:'child',tamatchi:'teen',kuchitamatchi:'teen'};
3
+ export const proposal={type:'Slice',palette,pets:Object.entries(sprites).map(([id,frames])=>({id,name:names[id],stage:stages[id]||'adult',frames}))};
@@ -0,0 +1,14 @@
1
+ # Slice artwork
2
+
3
+ Dough grows into a little pizza. Keep the face clear and the toppings easy to see.
4
+
5
+ | Original ID | Proposed pizza | Condition |
6
+ | --- | --- | --- |
7
+ | mametchi | Margherita | At most 2 care mistakes and 100% discipline |
8
+ | ginjirotchi | Pepperoni | At most 2 care mistakes and 75% to 99% discipline |
9
+ | maskutchi | BBQ Chicken | At most 4 care mistakes and at least 50% discipline, after the first two checks fail |
10
+ | kuchipatchi | Meat Lovers | At least 50% discipline, after the earlier checks fail |
11
+ | nyorotchi | Anchovy | 25% to 49% discipline |
12
+ | tarakotchi | Pineapple | Below 25% discipline |
13
+
14
+ See the [family trees](../../docs/characters.md) for growth paths and the [sprite rules](../../docs/frame-contract.md) for sizes and expressions. The preview reads the same art as the game.
@@ -0,0 +1,52 @@
1
+ # More games for lilgotchi
2
+
3
+ 2.0 adds seven games. The timing and scores are our rules, not a claim of exact hardware behavior.
4
+
5
+ ## The guessing game
6
+
7
+ [Left and right](left-right.md) now shows a visible turn in both directions, including symmetrical characters. Its rules and rewards stay the same.
8
+
9
+ ## The 2.0 lineup
10
+
11
+ | Game | What you do |
12
+ | --- | --- |
13
+ | [Get](get.md) | Catch notes and dodge poop |
14
+ | [Bump](bump.md) | Stop a power meter and bump an opponent |
15
+ | [Heading](heading.md) | Move under a ball and head it upward |
16
+ | [Memory](memory.md) | Repeat a growing arrow sequence |
17
+ | [Flag](flag.md) | Follow real cues and ignore fake ones |
18
+ | [Sprint](sprint.md) | Tap or hold to race |
19
+ | [Hoops](hoops.md) | Time basketball shots |
20
+
21
+ The existing guessing game stays. Each new game has its own model and tests. They share controls, pause behavior and care rewards.
22
+
23
+ This is the seven game Connection set, not every game from every Tamagotchi. The [catalog](catalog.md) keeps the wider research backlog separate.
24
+
25
+ ## Keep the widget small
26
+
27
+ Play opens a game picker. Game names, instructions, score, progress, pause and exit sit outside the pixel display. Show one short instruction before Start. The display is for the pet and playfield.
28
+
29
+ Use a 32 by 24 game field and integer pixels. Give each game up to three large touch controls below it, with matching keyboard controls. Do not put a tiny menu or text over the pet. Keep the same layout for all four families.
30
+
31
+ Use the current pet and evolution. Draw new poses when needed. A symmetrical sprite flipped horizontally is not a visible turn. Keep eyes, toppings, antennae, cracks and readable symbols recognizable. Check the largest adult and elder forms before approving the layout.
32
+
33
+ ## Shared game rules
34
+
35
+ The 2.0 contract:
36
+
37
+ 1. Keep the existing play restrictions for eggs, sleeping, sick, dead or vacation pets. Explain unavailable games beside their names. No new stage locks in the first batch.
38
+ 2. Pause the round when the drawer closes or the page hides. On return, offer Resume or Quit. No hidden timers, free points or automatic losses. Care time follows the existing game rules.
39
+ 3. End a run if the pet dies, starts vacation or changes family. Cancel old callbacks so they cannot affect the next pet.
40
+ 4. A win gives one happiness heart, capped at four, once per finished run. A loss or quit gives none. No coins, betting, inventory, new evolution rules or extra weight changes in this first batch. Settle the existing energy effect once per started run, not per tap.
41
+ 5. Keep an unfinished run in memory only. Reloading ends it without a reward. High scores are outside the first batch.
42
+ 6. Keep sound optional. Every sound cue needs a visible cue. Reduced motion removes decoration, not essential game feedback. Pause stays available. Announce instructions, results and discrete cues without reading every animation frame.
43
+
44
+ ## Review notes
45
+
46
+ 2.0 is released. The next polish pass keeps the full current pet in each game, adds room around the controls and makes the cues easier to follow. That pass is still in review. Physical phone playtesting, audio listening, human screen reader checks and longer balance sessions remain unverified. See the [review checklist](release-checklist.md).
47
+
48
+ ## Before shipping
49
+
50
+ Verify input, collisions, scoring, pause, exit, repeat rewards and family switching. Test every hatched sprite against screen bounds. Review the actual games in desktop and mobile browsers, including touch targets, keyboard focus and muted play. Capture screenshots in each PR. For timing games, also review a short recording.
51
+
52
+ Source for the seven Connection games: [Bandai's manual](https://www.bandai.com/amfile/file/download/file/242/product/1304058/). Their controls and objectives are references. The durations and win conditions in these docs are our starting balance choices.
@@ -0,0 +1,23 @@
1
+ # Bump
2
+
3
+ Included in 2.0. Follow the [shared game rules](README.md).
4
+
5
+ Time a power meter to bump another pet over. The [Connection manual](https://www.bandai.com/amfile/file/download/file/242/product/1304058/) describes timing the press for maximum power.
6
+
7
+ ## Our version
8
+
9
+ One Bump button stops a meter that moves up and down. Space does the same. Give a 1.5 second countdown before the meter starts. The meter times out after six seconds, losing that bout. Do not reward repeated tapping.
10
+
11
+ Play three bouts. Each has a clearly marked target region. Stopping inside it wins the bout. Win two bouts to win the run. The inclusive target ranges are 60 to 85, 63 to 82 and 66 to 79 on the 0 to 100 meter. This is a timing challenge with no hidden random loss after a successful stop.
12
+
13
+ ## Screen and art
14
+
15
+ Show the current pet and a local computer opponent facing each other. Put the meter, target marker and bout score below the display. Stop the meter, hold the result, then animate the bump. The loser lands safely inside the screen and gets back up.
16
+
17
+ Two full size elders may not fit side by side in 32 pixels. Give this game purpose drawn compact poses, at most 12 pixels wide per pet, with room between them. Keep identity and expression. Do not squash runtime sprites to make them fit. No networking or second saved pet is needed.
18
+
19
+ ## Check it
20
+
21
+ Test target edges, early presses, repeated taps, timeout and pause while the meter moves. Input timing must be based on elapsed time, not frame count. With reduced motion, use a short pose change instead of a fall. Verify both opponents remain visible.
22
+
23
+ Slower pace doubles the meter cycle to 3.2 seconds. The target regions and six second timeout stay the same.
@@ -0,0 +1,24 @@
1
+ # Games still to cover
2
+
3
+ Research todo. This is not a complete list of every Tamagotchi game.
4
+
5
+ ## Confirmed Connection set
6
+
7
+ The [2024 Bandai manual](https://www.bandai.com/amfile/file/download/file/242/product/1304058/) lists Get, Bump, Flag, Heading, Memory, Sprint and Hoops. It also has connected play using Gotchi points and items. Those multiplayer activities need a separate design if we add them.
8
+
9
+ ## Older versions add more
10
+
11
+ | Device | More names to research |
12
+ | --- | --- |
13
+ | Connection V4 | Jumping Rope, Mimic, Shape, Dance. Flag is already on our list. |
14
+ | Connection V4.5 | Climb, Tug of War, Apple, Shapes, Manhole |
15
+
16
+ These are catalog leads from the community's [V4 page](https://tamagotchi.fandom.com/wiki/Tamagotchi_Connection_Version_4) and [V4.5 page](https://tamagotchi.fandom.com/wiki/Tamagotchi_Connection_Version_4.5). Check the device manuals or captured gameplay before writing exact rules. Shape and Shapes may share a name without sharing a game.
17
+
18
+ ## The full catalog pass
19
+
20
+ Work through Gen 1 and Gen 2 (P1 and P2), Connection V1 through V6 including V4.5 and V5.5, Japanese releases, later color devices, Nano releases and downloadable games. Track school, work, item and connected activities separately. Console, mobile and TamaTown games need an explicit scope decision before treating them as widget games.
21
+
22
+ For each entry, record its device, region, game name, controls, objective and source. Mark reused mechanics so we do not add the same game twice under different names. Separate verified rules from our proposed timing, rewards and screen layout.
23
+
24
+ Every selected game gets its own short design doc before implementation. The seven Connection designs are a starting set, not a claim that the wider catalog is finished.
@@ -0,0 +1,19 @@
1
+ # Flag
2
+
3
+ Included in 2.0. Follow the [shared game rules](README.md).
4
+
5
+ The [Connection manual](https://www.bandai.com/amfile/file/download/file/242/product/1304058/) has the pet raise flags to match arrows while ignoring imitation cues.
6
+
7
+ ## Our version
8
+
9
+ Left and Right raise the matching flag. A Both button handles paired cues on touch. Keyboard players can use Space for Both. When the cue says Fake! Wait, leave all three buttons alone until the next cue. Waiting is the answer. Mark fake cues with a different shape, not color alone.
10
+
11
+ Play 15 cues. Get 12 right to win. Start with a 900 ms preparation beat, then allow 2.4 seconds per cue and a 900 ms rest between cues. Slower mode gives four seconds per cue. No repeated tapping for extra points.
12
+
13
+ ## Screen and art
14
+
15
+ Put the cue above the display. Draw the pet holding lowered, left, right or both flags inside it. Keep the score and response timer below. Flags must fit beside the widest pets. Use the same full pet shown in the care screen.
16
+
17
+ ## Check it
18
+
19
+ Test every cue type, fake cues, input at timeout, held keys and pause. One cue has one result. Do not require simultaneous touch presses. Include a slower mode and spoken cue labels before approving accessibility.
@@ -0,0 +1,21 @@
1
+ # Get
2
+
3
+ Included in 2.0. Follow the [shared game rules](README.md).
4
+
5
+ Catch falling notes. Avoid poop. This is the objective in the [Connection manual](https://www.bandai.com/amfile/file/download/file/242/product/1304058/).
6
+
7
+ ## Our version
8
+
9
+ Left and Right move the pet between three lanes. Use the arrow keys on a keyboard. Holding a direction moves with a capped repeat rate, never faster on a faster device.
10
+
11
+ Run for 30 seconds. A note gives one point. Missing a note costs no life. Catching poop costs one of three lives. Finish with at least 12 notes and a life left to win. Falling speed increases in three gentle steps. These values need playtesting.
12
+
13
+ ## Screen and art
14
+
15
+ Keep the pet at the bottom and the falling objects above it. Use small, distinct note and poop shapes. A hit triggers a brief happy or startled pose. The score, lives and remaining time go below the display.
16
+
17
+ Use the actual pet's bounds for lanes and spawn timing. Leave enough vertical warning for the tallest sprite. Spawn only one object at a time in the first version. Never make a hazard unavoidable. If 32 by 16 is too cramped, revise this layout before implementation rather than hiding part of the pet.
18
+
19
+ ## Check it
20
+
21
+ Test lane boundaries, notes versus poop, missed notes, last life, timeout and pause during a fall. A single collision can score only once. Compare touch and keyboard play, and inspect the largest pets at full scale.
@@ -0,0 +1,23 @@
1
+ # Heading
2
+
3
+ Included in 2.0. Follow the [shared game rules](README.md).
4
+
5
+ Move under the ball and jump to head it back up. This follows the [Connection manual](https://www.bandai.com/amfile/file/download/file/242/product/1304058/).
6
+
7
+ ## Our version
8
+
9
+ Use Left, Jump and Right below the display. Left and Right arrow keys move. Up or Space jumps. The pet can move while a jump is in progress, but cannot jump again until it lands.
10
+
11
+ A successful header adds one point and sends the ball upward. Ten headers win. Three missed balls end the run. After a miss, give a one second countdown before the next ball. Slightly increase speed after every third header. Cap the run at 45 seconds.
12
+
13
+ ## Screen and art
14
+
15
+ Show a small ball, the pet and a ground line. Score and misses sit below the display. Contact follows the occupied pixels in the upper half of the current pet. A rising head can meet a falling ball between frames.
16
+
17
+ Use the full current pet in a 32 by 24 game field, with room for the ball and jump. Keep a bounded arc so the ball never clips at the top. New serves must be reachable from the pet's current position.
18
+
19
+ ## Check it
20
+
21
+ Test edge headers, misses, movement during jumps, repeat input and pause midair. One contact gives one point. Collision results must match at slow and fast frame rates. Review jump timing on touch without requiring simultaneous tiny button presses.
22
+
23
+ Slower pace runs movement at 60% speed and allows 75 seconds. The countdown and jump slow down with the ball. Scoring stays the same.
@@ -0,0 +1,17 @@
1
+ # Hoops
2
+
3
+ Included in 2.0. Follow the [shared game rules](README.md).
4
+
5
+ Time a shot into a basketball hoop, as described in the [Connection manual](https://www.bandai.com/amfile/file/download/file/242/product/1304058/).
6
+
7
+ ## Our version
8
+
9
+ Shoot or Space stops an aim meter. Make the basket when the marker lands in its visible target. Play five shots and score three to win. Narrow the target slightly after each successful shot. Press Shoot once to start the meter, then again to take the shot. The meter travels out and back in 2.4 seconds, or four seconds in slower mode. The ball takes 900 ms to land. Target edges count as a hit.
10
+
11
+ ## Screen and art
12
+
13
+ Pet on the left, hoop on the right, ball between them. Put the meter and shot count below the display. Keep the full current pet visible. A made shot crosses the rim from above, then drops through the net. Early shots fall short and late shots go past the rim. Keep misses inside the canvas too.
14
+
15
+ ## Check it
16
+
17
+ The ball animation must agree with the meter result. Test target boundaries, repeated inputs, pause during aiming and pause during the ball arc. Do not award a basket twice when resuming. Reduced motion can show the release and landing poses without a full arc.
@@ -0,0 +1,30 @@
1
+ # Left and right
2
+
3
+ Added in the patch before 2.0.
4
+
5
+ ## The fix
6
+
7
+ The pet turns toward its answer before showing the happy or sad reaction. Direction text stays visible for the full reveal.
8
+
9
+ ## What should happen
10
+
11
+ Show a neutral pet while waiting. After the player chooses, turn the pet toward the selected game direction. Hold that pose for roughly 700 ms, then show the happy or sad reaction for the rest of the existing 1,200 ms reveal. Keep the direction text visible throughout.
12
+
13
+ Left and right mean the viewer's left and right. The pet turns toward its answer, even when the player guesses wrong. Never reveal the answer early.
14
+
15
+ ## Sprites
16
+
17
+ Add explicit `lookLeft` and `lookRight` frames for every hatched identity in all four families. Give front facing pets an obvious eye, face or body turn. Keep markings such as 404 readable. A small move across the screen or a flipped symmetrical sprite does not count.
18
+
19
+ Fit both poses in the existing 16 by 16 game canvas. Keep the whole pet visible. Review Gen 1, Gen 2, Slice, Cypunk and Lilgotchi from baby through elder.
20
+
21
+ ## Done when
22
+
23
+ 1. Both directions are obvious without reading the result text, including on symmetrical eggs and pizza faces.
24
+ 2. The shown direction always matches the result and scoring, for wins and losses.
25
+ 3. Five rounds, winning odds, rewards and weight changes stay as they are.
26
+ 4. Closing, restarting, switching pets or entering vacation cancels the pending reaction. Old callbacks cannot repaint a new run.
27
+ 5. Reduced motion still shows the directional pose. Text reports the answer for screen readers and muted play.
28
+ 6. Tests cover every directional frame, forced left and right outcomes, both result reactions and stale timers. Browser proof shows both turns at desktop and mobile sizes.
29
+
30
+ [Game plan](README.md)
@@ -0,0 +1,21 @@
1
+ # Memory
2
+
3
+ Included in 2.0. Follow the [shared game rules](README.md).
4
+
5
+ Watch arrows and repeat their order. The [Connection manual](https://www.bandai.com/amfile/file/download/file/242/product/1304058/) uses left, up and right.
6
+
7
+ ## Our version
8
+
9
+ Show a sequence, then let the player repeat it with Left, Up and Right. Match those directions on the keyboard. Start with two arrows and add one each round. Complete five rounds to win. One wrong answer ends the run. No timer during the player's response.
10
+
11
+ Show each cue for 600 ms with a 200 ms gap. Identical consecutive arrows still get a clear gap. Slower playback uses one second cues and 350 ms gaps. Select it before Start. The sequence stays fixed for the run. Show each entered direction for 450 ms. After a correct round, leave that last answer visible before starting the next sequence.
12
+
13
+ ## Screen and art
14
+
15
+ The pet watches during playback and reacts to the player's answer. Put one large arrow at a time in a cue area above the display, with Watch or Your turn beside it. Do not cover the pet with the whole sequence. Put progress below the display.
16
+
17
+ Directional labels and short tones are paired with the arrows. Announce each playback cue, then announce when input opens. Reduced motion uses static arrows with no flashing or bouncing.
18
+
19
+ ## Check it
20
+
21
+ Ignore guesses during playback and ignore held key repeats. Test repeated directions, wrong answers, the fifth round and pause in both phases. Resuming interrupted playback restarts that sequence without changing it. Exiting cancels every queued cue.
@@ -0,0 +1,11 @@
1
+ # Game polish review
2
+
3
+ The game screen is now 32 by 24 pixels. It draws the current pet's full sprite and colors. Opponents stay separate.
4
+
5
+ Finished games show Play again and Back to games. Input controls disappear after the result. Left and right uses the same screen shape and keeps an exit available. Mobile controls fit their columns.
6
+
7
+ Heading checks the visible upper head pixels and accounts for the head rising during a jump. Hoops crosses the rim from above and falls through a visible net. Memory shows cue and answer poses. Flag gives a preparation beat, a longer response window and an X for waiting. Sprint shows red, yellow and green lights.
8
+
9
+ 254 tests pass. The build passes. Browser review used 390 and 320 pixel widths. It covered the picker, guessing result and replay, arcade replay, Memory cue and answer poses, raised flags, Sprint lights, a successful Heading contact and a made Hoops shot. Frozen review scenes use real game models with fixed time inputs. They are not full human playthroughs.
10
+
11
+ Physical phone and longer human balance checks still need doing. These changes are in review, not deployed.