# Artwork Every sprite in `sprites/`, plus `backdrop.png`, is generated by `make_art.py` from `reference/moodboard.png`, and `font.png` is generated by `make_font.py`. **The scripts are the source of truth, not the PNGs** -- to change the art, edit a crop box or a glyph and re-run: ```bash python3 art/make_art.py python3 art/make_font.py ``` ## The mood board `reference/moodboard.png` is the approved look-and-feel sheet for the game. It is a render *of* pixel art rather than pixel art itself -- about 188,000 unique colours and no clean pixel grid -- so nothing is used from it directly. See the docstring in `make_art.py` for how it is converted into real sprites. The board is kept in the repo because it is the only record of what the art is supposed to look like, and because every crop box in `make_art.py` is meaningless without it. ## Trademarks The board as generated carried marks that are not this project's to ship: a title block set in the original arcade logo's lettering, and Audi wordmarks and four-ring devices on the cars. Audi, Quattro and the four-ring device are Audi AG's marks; the arcade logo is Bandai Namco's. They are cleared in two places, because they sit in two kinds of place. **On the board**, `scrub_board.py` clears seventeen regions: the title block, the four-ring devices on the two side-view rally cars and on the five top-down cars, the "Audi" ovals on those same five, the wordmark on the car in the gameplay mockup, and the "Audi quattro" wordmarks on the three rear-view player cars' boot lids. It works *in place* at the board's original 1536x1024, so every crop box keeps its coordinates. Cropping the board would have shifted every box. The title block is flat-filled, since it sat on empty board. The badges are *healed* -- each rect is rebuilt by interpolating the bodywork either side of it, so the door lines and bonnet stripes carry straight through and the cars stay usable as reference rather than acquiring grey patches. The script is idempotent and prints every region it clears: ```bash python3 art/scrub_board.py ``` **On the sprite too**, belt and braces: the boot-lid wordmark fell *inside* the player car's crop boxes, so `make_art.py` also overwrites those rows on the output -- the `scrub` rects in `SPRITES`. The board heal and the output scrub cover the same mark, so neither has to be perfect for the shipped sprite to be clean. What ships is a white Group-B-shaped rally car carrying no marks at all, generated from a board that carries none either. The game itself is an original work in the style of a 1982 arcade racer. *Pole Position* is a trademark of Bandai Namco and is used nowhere in this repo, in the same spirit as the `OMA-BOB` naming decision. ## The Sunset horizon Every other backdrop is cut from the mood board. Sunset's is **drawn**, by `make_art.py`, because a tiling strip cannot hold what that circuit needs: a huge low sun banded by cloud, under a graded sky, behind layered ridges. A tiling sun is two suns, and a flat sky uniform cannot be a gradient. So it ships as three pieces the renderer layers -- a gradient sky, one sun sprite that parallaxes but never tiles, and a mirrored strip of clouds and three ridge layers drawn over it. Its ten colours were sampled from a reference image, and the reference is not in this repo and is not redistributed: what is committed is generated from those ten values alone. The generator is seeded, so it produces identical PNGs on every machine and every run. ## The gantry, and the Omarchy wordmark `sprites/gantry.png` is the sponsor arch that spans the road. Like the Sunset horizon it is **drawn** by `make_art.py` rather than cut from the board, and it could not be otherwise: the board is a set of views *along* the road, and the arch is the one piece of furniture that crosses it. Its two sizes are derived, not chosen. 208 art pixels is 2704 world units, which spans the 2000-unit road and stands the legs out past the kerb; 120 is 1560 units, which is just over the camera's own eye height of 1500 and is what makes the banner cross the horizon and pass overhead instead of reading as a hoarding beside the road. **The banner carries the Omarchy wordmark**, which is Omarchy's mark and not this project's. It is used here to identify the platform this plugin is built for -- the arch is a sponsor board and Omarchy is the sponsor. It is reproduced faithfully in its own colours (`#9ece6a` on `#1a1b26`) rather than restyled or recoloured per course, and it is the only third-party mark in this repo. If Omarchy would rather it were not shipped, `OMARCHY_LOGO` is one array in `make_art.py` and the arch works with anything else in it. The mark is stored as a text bitmap (`OMARCHY_LOGO`, 81x19) rather than as a PNG, so this file stays the source of truth for the art. It was traced from the official logo by fitting the block grid numerically -- the source is an upscale, so the 14.877px cell was solved for by minimising the difference between the trace painted back at source scale and the source itself, rather than by eye. It round-trips to within the upscale's own soft edges. `sprites/gantry_finish.png` is the same arch carrying a different board: FINISH between two rows of chequers, standing over the line the road shader paints in the same two-deep pattern. That one is **set in the game's own 5x7 font**, which is the opposite call to the sponsor banner and right for the opposite reason -- a logo is a specific drawn thing and has to be reproduced, while "FINISH" is a word on a race board and belongs in the face the rest of the cabinet already speaks in. The sponsor banner previously spelled "OMARCHY" in that same font. That was legible and was not the logo: the real mark is drawn, with bevelled corners, a spike over the M and a descender on the R, and none of that survives being set in a generic face. ## The Seaside horizon Also **drawn**, and for the same reason Sunset's is: the board's coastal tile is a green field with mountains behind it, which is not a sea. It is open water with headlands at three depths standing out of it. The profiles are summed sines at **integer** frequencies across the strip's own width, so the value at one edge equals the value at the other and three copies laid side by side tile without a join. The cut strip it replaced does not have that property and has a visible seam down it. ## Font `font.png` is a 5x7 bitmap font hand-authored in `make_font.py` -- not a converted typeface. It carries no licence obligations and renders identically on every machine, which a font resolved through the system stack does not.