COINFALL
Commits
Every published commit of this world, on every branch, newest first.
7def4b70bdfix(coinfall): the tube looked broken because it was, all the time
The composite bleed sat at 0.65 texels with nothing scaling it, so every edge in
the game carried a red/cyan split from the first frame to the last. That is what
reads as 'the corruption is a rendering bug' - it was never corruption, it was
the baseline, and it never turned off. 0.65 -> 0.12, with glow, scanline and
vignette pulled back to match.
The hall was also too dark to see what is in it. It is dressed with 42 wall
cabinets, 10 bays, a change booth, a patterned carpet and ceiling fixtures, and
at the old gain a player could make out one machine and nothing else - which is
why it read as an empty corridor. Hall gain 1.0 -> 2.4, lamp reach 9 -> 11.962364014btune(coinfall): machine surfaces lit for machine distance, not corridor distance
The cabinet fills the frame from 0.6 m away. Carried over from the hall, whose
lamp gain is aimed at surfaces metres down a corridor, every machine surface
blew out to flat white: the chipped red paint read as fire-engine red and the
worn steel deck as pale yellow. Gain, lamp intensity and range are now set for
the distance the player actually sees these from, and each tint multiplies its
texture down rather than up.f844f334ddfeat(coinfall): one look, every surface textured and on the ps1 shader
The hall was atlas-textured PS1 and the machines were flat untextured PBR, which
is two different games in one frame: the PBR surfaces were lit by scene lights
the PS1 shader does not use, and never dithered, snapped or fogged with anything
around them.
- Nine seamless surface textures generated: cabinet paint, playfield deck,
brass, steel, bone, membrane, chrome, a lit marquee panel and a phosphor
display.
- All eleven machine materials rebound to ps1 with a texture, the hall's
lighting and fog parameters, and a uv_tile suited to the part they cover.
- Every one added to the material drive list. A material left off it is a
surface that never rots, never dims into the fog, and is not lit by the
machine the player is standing at.c3a0419994feat(coinfall): the site's paperwork is the extras, and the tube stops eating it
- EXTRAS now opens on SITE PAPERWORK: six documents, one per cabinet, shown as
the cream sheets they are once recovered and as a dark slug until then. They
are the reason to go deeper — the records are inside the machines.
- The printout's stock is a used cream rather than a fresh sheet: the tube
blooms every bright surface and was eating the small type off it.
- The display chain re-asserts its whole property set for a couple of seconds
after registration. A write landing in the same breath as the registration
does not stick, so every fresh install came up with a black tint and the game
ran invisibly behind it.15fbd15126feat(coinfall): the game opens on a document, and the machines have names
A closing inventory prints itself line by line on continuous-feed paper before
the first machine. The story is the arithmetic between two of its lines -- six
machines on the floor, five accounted for -- and nothing in it explains
anything. It is skippable, and it ends on a shutter.
- cf_lore: one home for the site's paperwork. The opening inventory, a note per
machine recovered by killing it, and the machines' own names and the line the
hall says the first time you stand at one.
- Five new sounds: a tube failing to strike, the print head, something breathing
through a grille, the shutter, and a sub-bass bed under the whole sheet.
- The relic token is re-armed after a missed quota. It was only re-armed on a
BANKED quota, so the pool closed for the rest of the run the first time one
was missed.
- Quota 1 drops 70 -> 52. A full playthrough failed it three times running on
the first machine and died in three minutes.e87dcec397fix(coinfall): the machine feeds the relic token that reaches the relic pool
A relic is offered by pushing a token over the ledge, and nothing but the debug
hook ever put a token on a bed -- so the whole pool was unreachable in a real
run. The live machine now feeds one a few seconds into every quota.3a3b48408ffeat(coinfall): every relic and every machine mechanic proven against the field
Measured, all twelve relics:
- NUDGE moves 247 of 280 coins forward (mean +13.2 mm) against a control of
-0.2 mm with the arm frozen; MAGNET clears a quota from a standing start that
the same frozen arm pays nothing from; SPILL adds ten coins and takes ten from
the hand; HALT freezes the arm and expires; TITHE turns 15 corruption into 51
bank. GREASED SHELF, HEAVY COIN and THIRD HAND reach the machine (payout 1.4x,
mass 2x, two coins per press); IRON LUNG hands its point over on the spot;
DEBT RELIEF lengthens the clock 60 -> 80; SPLIT TONGUE widens the draft 3 -> 4.
Mechanics, per machine:
- THE TITHE takes a share of what crosses its slot rather than all of it.
- THE MAW holds its platform while the throat pulls the bed back. Driving the
platform backwards at the same time crushed the bed against the wall -- 66
coins destroyed against 1 paid -- and is now 6 taken against 23 paid.
- A machine tops its own bed back up as its mechanic eats it.8ee6c6b745fix(coinfall): the pusher pays, on measurements rather than guesses
- Physics.setVelocity applies its vector in the body's own frame (#7618), so
every machine on the left wall was driving itself out of its own cabinet down
the hall. The pusher is driven in its local frame and clamped to its rails.
- The moving platform reached only the back third of the field, so a swept coin
landed on static steel and nothing could move it again. It now runs to within
a few coins of the lip.
- The bed is laid TOUCHING and staggered: at a 6%% pitch the coins sat 2 mm
apart and a push died in the first gap. Measured, 30 coins dropped into that
bed banked exactly zero.
- The bed fills its base layer solid before heaping, and is loaded at the level
the machine holds at rest with the drive stopped -- an overfilled bed shed
most of a quota over the lip before the player touched it.
- Prizes are scattered through the bed rather than parked at the front edge.
- A machine loads its own bed from its update, sweeping orphans a hot reload
left behind: a field written on a component in the frame it was added is
overwritten when the component initialises.
- Pay events are collected and fired after the settle walk. Firing inside it ran
the quota check, which cleared the field the walk was still indexing.
- Quota targets recalibrated against measured throughput.d562145f17fix(coinfall): one measured description of the playfield, and a machine that can be finished
The machine component carried its own copy of the playfield, 90 mm below the
one the cabinet is built from. It drove the pusher a metre into the air and ran
the stroke across the cabinet's width instead of along its depth, so nothing
pushed and the bed drained off the front on its own.
- cf_models.FIELD_METRICS is now derived from cf_pusher.SPEC
- cf_machine rewritten on that spec: it drives the pusher through the module's
own velocity drive, lays the bed and the trinkets through fillBed/layTrinkets,
and each variant runs its own mechanic (tithe slot, maw's inhale, the choir's
live mouth, the last machine's peristaltic wave)
- the run counted the shrine as a clearable machine, so it could never be won
- the CRT wrote no defaults, so an untouched tint multiplied the whole screen
to black
- the key light is a real light again, not a property on materials the machines
do not use
- the audio emitters are adopted by name instead of respawned every hot reload
---
chore(coinfall): drop the pusher validation bench scene
It was scaffolding for measuring the field and never had an entrypoint, a
README or a camera, so it blocked every push.
---
fix(coinfall): pin the coin's token texture by guid
A dotted-path literal does not resolve in the live asset index at publish, so
the whole world refused to push.
---
fix(coinfall): write the coin's texture reference in the resolvable form
A `__ref` with a dotted path is not what the publish gate resolves; a bare
`ref:` guid is.
---
chore(coinfall): stage the field texture the refs module points at
---
chore(coinfall): stage every authored asset so the published tree is complete
The refs module points at meshes, textures and clips that were live in the
engine but had never been recorded, so publish refused on each in turn.f591fc0d75COINFALL: keyboard on every screen, and machines that open loadedca8aff7929COINFALL: set the cabinet in its own arcade and phosphor faces1ed79f1df7COINFALL: the tube covers the world, not the HUDa32df93196COINFALL: open the play chamber and give each machine its own pile
---
COINFALL: carry the key light position as scalars, not a float3
---
COINFALL: re-mint the field atlas so the playfield is not painted blackca0326d895COINFALL: stand the player on a floor that exists, bind the cabinet atlas, answer the menu keyscab975ed99COINFALL: PS1 horror roguelite coin pusher