diff --git a/.changeset/pixel-art-feature-and-faces.md b/.changeset/pixel-art-feature-and-faces.md new file mode 100644 index 00000000..553ae510 --- /dev/null +++ b/.changeset/pixel-art-feature-and-faces.md @@ -0,0 +1,5 @@ +--- +"@typeonce/ritmo": patch +--- + +The `ritmo-pixel-art` skill has four new principles from two blind tests: name each kind of piece by one exaggerated feature, starting from what it does in the game; give a solid three tones (top and two sides) chosen per piece, and make a line between parts a choice; draw details on a slanted face flat and lay them on it along the view's slope; and judge a set side by side and in pure black. diff --git a/packages/core/PIXEL-ART.md b/packages/core/PIXEL-ART.md index 1d0d341b..291060a6 100644 --- a/packages/core/PIXEL-ART.md +++ b/packages/core/PIXEL-ART.md @@ -97,6 +97,12 @@ Quotes were checked against the text of the linked page on 2026-11-01. A quote m - Yu ([link][yu]): "A well-defined character has details that do not obscure the basic forms". - **Ritmo:** "the one character with a time motif … Keep the teal/ivory identity that no enemy uses" and "Each one should be identifiable from its silhouette alone" are Still Time directions (reviews 1, 4, and 6); the player's accent color reserved for the player is the maintainer's rule, written as "what the player controls" so that strategy and puzzle games, which have no single hero, are covered. "Every kind" allows the tiers of one enemy as recolors of one shape. +### Name each kind by one feature, from what it does in the game; exaggerate it until it reads + +- Medeiros, "My Thoughts on Very Low Resolution", 2020 ([link][saint-lowres]): "choose what to show and what to leave to the imagination of the viewer" … "taking away every bit of information that it’s not extremely important" … "I focused on his beard and hair because they communicate so much about his personality." +- Mitchell, Francke, Eng ([pdf][tf2-paper]), quoted above: silhouette lines "explicitly designed to give each character a unique silhouette." +- **Ritmo:** from a blind test on 2026-11-11. An agent was given five pieces of a game (a house, a granary, stilts, a quarry, a ruin) by their role in the game and their size only, and told to pick one feature per piece before anything else. The maintainer preferred its set to the game's own pieces, which had been through review rounds and followed a written spec of what each looks like ("their shape is better"). One of the game's earlier notes on its chest was the case the rule answers: "I am not sure really what this is supposed to represent. I want to be clear at a glance." "From what it does in the game" because the test could not separate the method from starting at the role, and both point the same way. One run, one model. + ## One style ### The characters (or the pieces) set the rules, generated assets included; a second style lives in its own area @@ -128,6 +134,17 @@ Quotes were checked against the text of the linked page on 2026-11-01. A quote m - Cure ([link][cure]): "Jaggies occur when a pixel or group of pixels are out of place, interrupting the flow of a line." … "Pillow-shading is bad because it pays no attention to the light source,". - **Ritmo:** `fx check` measures jaggies, doubles, and holes on effects and the `ritmo-fx` skill's Craft explains them with their sources (`FX.md`); `pixel lint` checks none of them on sprites and tiles, so the skill names the rules once and points there. +### A solid shows three tones, chosen per piece; a line between parts is a choice + +- Yu ([link][yu]), quoted above: "By shading, you're not just adding color - you're sculpting out a form." +- **Ritmo:** the game in the 2026-11-11 test writes the rule into its art direction: "Tops lightest, right faces next, left faces darkest." Two agents in two tests that day (an isometric room, and the five pieces of that game) each judged the computed shading of `pixel bake` worse than their own and chose three steps per piece by hand instead; in the first one's bake, a box's top and one side took the same ramp step and read as one flat shape. The maintainer liked both results. Lines between parts: the second agent used one in five pieces ("the eave line I tried on the house left noise"), so the skill makes the line a decision and says what it costs at small sizes. + +### Details on a slanted face are drawn flat, then laid on it along the view's slope + +- Schlitter, "Pixelblog 41: Isometric Pixel Art", 2022 ([link][slynyrd-41]): "isometric pixel art compromises by using the 2:1 line pattern" … "Count pixels and use a 2:1 ruler to make sure things are lined up that are supposed to." +- 夏天 (@xiaoxiatian8), an isometric room's making-of, 2026 ([video][xiaoxiatian]): the bookshelf, sideboard, and clock are drawn as front views in line art first, then turned onto the iso faces. +- **Ritmo:** both agents in the 2026-11-11 tests drew doors, book spines, and a clock's dial as a front view and sheared them onto the face with the camera's slope; the second reported that it "worked for the doors", and that a one-pixel line along a 5:3 slope breaks into single pixels, which is why the rule is about laying a flat drawing on the face and not about drawing at the angle. + ### One light; under engine lighting, assets carry even shades and no strong baked light - Schlitter, "Pixelblog 6: Light and Shadow", 2018 ([link][slynyrd-6]): "A light source should be established at the very start of any illustration." @@ -166,6 +183,12 @@ Quotes were checked against the text of the linked page on 2026-11-01. A quote m - **Ritmo:** every Still Time review was written from phone captures of real rooms, and after lighting shipped the reviewer wrote "Judge your art under it. Append `?nolight` to the URL to compare against the unlit scene." In the `ritmo-prototype` skill one screenshot is the whole check in a round about looks; this skill asks for the same captures before art goes in. "When the target screen is out of reach, say so" is the `ritmo-prototype` rule of reporting what the check did not run. - **Ritmo:** "and so does the review page" is the maintainer's direction for `pixel review` (2026-11-04): an approval on the page is the person's, but the page shows each asset alone, at whole-number zooms over a plain backdrop, so it settles the pixels and not the read; the game capture still does. +### Judge a set together: side by side at display size, and in pure black + +- Medeiros, "Consistency", 2023 ([link][saint-consistency]): "When in doubt, strive for maximum consistency." +- Riot Games ([link][riot-clarity]), quoted above: "Silhouettes are the single most important thing for champion recognition in League." +- **Ritmo:** in the 2026-11-11 test the agent's checks of the five pieces side by side and in black are what changed them: the house gained a chimney and the ruin taller pillars so their silhouettes parted, and the granary's cap was toned down so it stopped shouting over the rest. Each piece alone had passed. + ### A reference is a set of named qualities; change what was asked and nothing else; options at display size and 4× beside it - George, "Crafting the perfect game art brief", Game Developer, 2023 ([link][george]): "provide explanations for each image included in your mood board." … "highlight the areas that you want to emulate." … "Show what you don't want – this can be more helpful than showing what you do want." @@ -207,6 +230,8 @@ The skill says to use `pixel bake` for something with a solid shape, not for cha [slynyrd-23]: https://www.slynyrd.com/blog/2019/11/12/pixelblog-23-parallax-scrolling [slynyrd-31]: https://www.slynyrd.com/blog/2020/12/14/pixelblog-31-shmup-sprite-design [slynyrd-43]: https://slynyrd.com/blog/2023/3/26/pixelblog-43-top-down-tiles-part-2 +[slynyrd-41]: https://www.slynyrd.com/blog/2022/11/28/pixelblog-41-isometric-pixel-art +[xiaoxiatian]: https://x.com/xiaoxiatian8/status/2120085162684035378 [tsugumo-1]: https://web.cs.wpi.edu/~claypool/courses/frontiers-06/samples/pixel-artist/chapter1.htm [tsugumo-2]: https://web.cs.wpi.edu/~claypool/courses/frontiers-06/samples/pixel-artist/chapter2.htm [lospec]: https://lospec.com/palette-list diff --git a/packages/core/skills/ritmo-pixel-art/SKILL.md b/packages/core/skills/ritmo-pixel-art/SKILL.md index bd4c7694..30921901 100644 --- a/packages/core/skills/ritmo-pixel-art/SKILL.md +++ b/packages/core/skills/ritmo-pixel-art/SKILL.md @@ -22,6 +22,7 @@ Pixel art is a decision about the whole game, not one sprite at a time: one grid - **What the player must notice is read first.** Rank what the player needs to play, most urgent first: what can hurt or block them, what they can act on, what they control, then props, and decoration last. Brightness (value) contrast follows that order, with the strongest saturation reserved for the top of it; the backdrop recedes in both. What supports or blocks the player reads clearly against what is only backdrop. No large flat shape or busy texture competes with the top of the order. - **Gameplay signals speak one language, in levels.** One meaning, one look, everywhere in the game: a warning comes before its consequence, and a routine signal is quieter than an urgent one ("could reach you" is dimmer and thinner than "is coming at you now"). If every signal is loud, none is. - **Every kind of character or piece is its silhouette.** Each kind the player must tell apart is identifiable from its shape alone, with no interior shading; details never obscure the basic form. What the player controls is never confused with anything else: its shape and its accent color belong to it alone. +- **Name each kind by one feature.** Start from what the piece does in the game, pick the one feature that says it (a bell on a shrine, a sail on a boat), and exaggerate it until it reads at display size; the rest of the piece stays simple. A faithful model of the real thing is too small to read. ### One style @@ -29,6 +30,8 @@ Pixel art is a decision about the whole game, not one sprite at a time: one grid - **One palette, few colors, ramps that shift hue.** The game's palette holds a few ramps that shift hue as they brighten; each asset pulls its colors from it, and a material is one ramp in different values (a wall, its floor, and its ledges from one stone, not three). Start from an existing palette (`pixel palettes`, or Lospec's list) rather than inventing one. - **Tiles hide the grid, unless the grid is the game.** A base texture that loops on all four sides and stays quiet; a few variants, chosen by hand or by a fixed function of the tile's position; rare details clustered where the world would wear (edges, corners, places that get used); decoration as its own layer. Rare is not none: a scene with every detail removed is a void, a detail on every tile is noise, and a variant is drawn, not recolored. Where the grid is gameplay (tactics, puzzles), it reads evenly and quietly instead. - **Lines and shades follow the pixel craft.** Edges step in even runs, one-pixel lines stay one pixel, and shading follows the form from one light chosen before drawing, never the outline. The `ritmo-fx` skill's Craft lists these rules; `pixel lint` does not check them on sprites and tiles. +- **A solid shows three tones.** A block's top and its two sides each take their own step of the material's ramp, chosen for that piece so it never reads flat, and the top lightest when the light is from above. Where two parts meet (a roof and its walls, a lid and its box), decide whether a dark line, one step darker, or nothing separates them; at small sizes a line between parts is often noise. +- **Details on a slanted face are drawn flat, then laid on it.** Draw a door, a window, or planks as seen from the front, then put it on the face along the view's slope (2 across and 1 down in a 2:1 view), so its steps stay even instead of being drawn at an angle by hand. - **One light.** Every asset is shaded from the same light direction. When the engine lights the scene, assets carry their own few even shades and no strong baked lighting; the engine's light changes with the room, and gameplay signals stay at full brightness under it. ### Motion @@ -38,6 +41,7 @@ Pixel art is a decision about the whole game, not one sprite at a time: one grid ### Judging - **Judge in the game, at display size, on the target screen.** A sprite is one piece of a crowded screen: look at captures of real scenes at display size, on the smallest screen the game targets, under the game's lighting if it has any, still and in motion, before anything goes in. Squint: the shapes that matter must still be there. A zoomed-in canvas shows the pixels, not the read, and so does the review page: an asset the person approved there, alone at whole-number zooms, is still looked at in the game at display size. When the target screen is out of reach, say so; the person who plays judges there. +- **Judge a set together.** Put every kind of piece side by side at display size, and again in pure black: each is told apart from the others by its silhouette alone, and none shouts over the rest. - **A reference is a set of named qualities, not a picture to copy.** Say what the reference gives (scale, proportion, palette, mood, detail level) and what the game keeps regardless; say what is not wanted too. Change what was asked for and nothing else, and show two or three options at display size and zoomed 4× beside the reference and in a game capture before integrating one. - **An exception is a decision, written down.** A second pixel size, a rotating sprite, a smooth parallax, a broken constraint: each is fine when the person chooses it for a reason and the game's design notes say why, and wrong when it happens to one asset. A clean lint, or two agents agreeing, never settles a look; the person who plays does.