SOURCE / PINNED RELEASE
Made of little things.
Pickle Rustlers
- Release
- 039e51f55e34…
- Author-recorded commit
- 40608586a8a1…
- License
- LICENSE
- Author’s source reference
- nostr://npub12lm3rxsva8kfempyjkxupt09e02n3fezurkyadyqfejdc5e0r2kscqty6r/wss%3A%2F%2Fgit.napplet.soy%2F/n-bad44e7ab35
Archive hash verified: f38e99afa0992052…. The source-to-build association is the author’s claim; it has not been independently rebuilt.
# Pickle Rustlers: design brief
```
d-tag / deployment name: pickle-rustlers
new build or port: new build
single-purpose job: a low-poly 3D western arcade game. Lasso runaway pickles and
drag them into the Giant Pickle Jar before sundown.
must-have flows: ride a horse, lasso pickles, deliver them to the jar, shotgun the
onion outlaws, commandeer the Abrams tank, survive the days
optional flows: best score saved through NAP storage; sound/shake settings through
NAP config; shell-remappable shoot/lasso/pause through NAP keys;
shell-mediated controllers through optional NAP-GAMEPAD; after a win,
a signed-in viewer can post a PNG score card (NAP-UPLOAD image +
NAP-OUTBOX kind 1 note)
visual direction: "sunset diorama western" (see below)
form factor: any size from 200x160 to full screen; keyboard, touch and gamepad
target runtime: WebGL in an allow-scripts iframe; no network
known gaps: every capability is optional and degrades locally. See docs/keyboard.md
for NAP-KEYS limits. Hosts without NAP-GAMEPAD (soyLI 0.31 included)
fall back to the browser Gamepad API; see docs/gamepad-plan.md. The
soyLI host currently denies kind 1 outbox publishing, so there the
score card uploads and the post reports the refusal.
```
## The game
The cosmic Pickle Jar has tipped over and the pickles have run off into the desert.
You are the last cowboy in Brine Gulch. Each day you have until sundown to rope a
quota of pickles and drag them back to the Giant Pickle Jar in the middle of the
valley.
- **Pickles** wander and hop away from you. Golden dills are worth 3.
- **Ropes:** throw a lasso (E / Shift / LASSO button). You can tow up to 3 pickles at once.
Ride up to the jar and they jump in.
- **Onions:** onion outlaws in cowboy hats come in from the hills. They steal free and
roped pickles and make you cry when they touch you. Five tears and you're done.
- **Shotgun:** two shells, then a short reload. Each blast peels a layer off an onion,
and big onions split into smaller ones.
- **Horses:** you ride one. Turn with A/D, speed up with W, slow down with S.
- **M1A1 Abrams tank:** one shows up somewhere every day. Drive into it to climb in for
20 seconds. You flatten onions, fire the cannon, and still tow your pickles. From
day 3 the onions bring a purple tank of their own.
- **Cowboys:** you, and every onion outlaw wears a ten-gallon hat.
- **Two extra items:**
1. **The Giant Pickle Jar**, the goal. It fills with brine and pickles as you deliver them.
2. **Hot Sauce**, a pickup. The horse runs much faster for 6 seconds and leaves a
fire trail that burns onions. The Abrams can drive over a bottle too: it speeds
up, trails fire from both tracks and shoots a flamethrower from the barrel.
Score: 100 per pickle (300 per golden dill), 25 per onion layer, 500 per onion tank,
1000 for the Onion King, and 10 per second of daylight left when you make quota.
## Campaign
Five days, defined in `src/game/levels.ts`. Each opens with a banner naming the day
and its twist, and the day-end poster previews the next one.
| Day | Name | Quota | Twist |
| --- | --- | --- | --- |
| 1 | High Noon | 6 | A gentle start with few, slow onions. |
| 2 | Onion Stampede | 8 | Many more onions, arriving faster and walking faster. |
| 3 | Iron Onion | 9 | The purple onion tank joins and lobs shells at red warning rings. |
| 4 | Dust Devil | 10 | A dust storm closes the fog in. Jar and tank beams ignore fog, so you can steer home by them. More golden dills. |
| 5 | The Onion King | 8 | Boss: a giant crowned onion with 30 layers (health bar) hunts you and summons guards. You must peel him **and** make quota. When he falls, his guards pop. |
Beating day 5 opens the victory screen: fireworks over the jar, pickles dancing
around it, and a "THE WEST IS BRINED" poster with run totals. **Ride again** starts
over; **Keep riding** continues into endless "Encore" days that keep ramping up.
Progress (best bounty and how many times you won) is saved with optional NAP storage.
**Post score card** appears on the victory poster only when identity, upload and
outbox are all injected and identity reports a signed-in pubkey (it appears or
disappears live on sign-in changes). It draws a 1200x675 PNG, a wanted poster with
the run totals and the viewer's profile name pinned over a snapshot of the
fireworks, and opens a composer with a preview and an editable note. **Post**
uploads the PNG (host approval), then publishes a kind 1 note with the image URL,
an `imeta` tag and `#picklerustlers` (host approval). A failed publish can be
retried without uploading again; a posted or partly posted note cannot be resent.
Play aids: a ring marks the pickle your lasso will grab, a green arrow over the
rider points to the jar while you tow, and the screen edges flash blue when you
cry. A sleep between days dries up to two tears. Gallop into a small rock and the
horse leaps it; big rocks, cacti and mesas still block you, and the tank bumps into rocks.
## Visual direction
- **Character:** a toy diorama of a western valley at golden hour. The sun really
goes down as the day timer runs out, so the light itself is the clock.
- **Main surface:** flat-shaded low-poly terrain in sand and terracotta, ringed by
layered mesas, saguaros and rolling tumbleweeds. One warm key light casts the
shadows and turns orange, then purple, as sundown nears. Every model is built from
a few primitives with flat shading.
- **Semantic colors (always app-owned):** pickle green = collect, gold = bonus dill,
onion purple/pink = enemy, hot-sauce red = power-up, desert tan = your tank,
purple = enemy tank. These do not change with the host theme.
- **Interface:** "wanted poster" HUD. Cream paper badges with dark-brown ink, a slab
serif face (Rockwell, falling back to Georgia), dashed rope borders, chunky round
touch buttons that look like brass buttons. Toasts are stamped in at a slight angle.
- **Theme policy:** fully app-owned. `FOLLOW_HOST_THEME` stays false. The scene and
HUD keep their colors in light and dark hosts and without the theme domain.
- **Proof:** the cover shot is the horse towing two pickles past the jar while an
onion pops nearby. Check sizes 200x160 (HUD reduced to counters), 320x560 portrait
(the camera pulls up and back), 900x600, full screen, and touch portrait/landscape
with the joystick and two buttons.
## Keyboard integration
NAP-KEYS optionally owns discrete shoot/confirm, lasso and pause bindings. Held
WASD/arrows remain local because the draft has no action-release operation.
Without keys (or for failed registrations), original local action aliases remain
available. Successfully registered actions follow the shell even when left
unbound; old aliases do not bypass remapping. Touch and gamepad remain available.
The wanted-poster instructions label defaults because the current SDK offers no
public live binding-change subscription. See [keyboard verification](keyboard.md).
