THE CUT: two more vessels earn their place, six props do not

The egg bench gets its real ceramic mixing bowl. Everything else in this
pass is subtraction, because a prop that fights the game is worse than
no prop:

- The generated tumbler renders OPAQUE, and that glass exists for one
  reason: watching an egg sink, stand or float in it. A pretty glass you
  cannot see through deletes the float test. Reverted to the see-through
  cylinder.
- Six models (wire basket, raw/cooked wing, raw/golden chip, egg carton)
  were shipping in the bundle unused — 27MB of dead weight served to
  every player for nothing. Deleted, and their lines in gen-assets.sh
  are commented with WHY they were rejected so nobody regenerates them
  by reflex: per-piece food must tint per frame (colour is the verdict),
  and the top-down rack must never occlude the wings.

Verified: eggs still 10.0 with the new bowl, float test still legible.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
type-two 2026-07-26 18:51:57 +10:00
parent 51d55ac231
commit acf9926eaf
9 changed files with 25 additions and 6 deletions

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -196,17 +196,23 @@ do_prep2d() {
do_stations() {
# the air fryer bench
gen_3d air_fryer 241 "a chunky black modern air fryer appliance with a pull out drawer basket and a round dial on top, matte plastic body"
gen_3d wire_basket 243 "a square wire mesh air fryer basket tray with a crumb rack, empty, seen at an angle"
gen_3d chicken_wing 245 "a single raw chicken wing piece, pale pink skin, plump, on nothing"
gen_3d wing_cooked 247 "a single golden crispy fried chicken wing, glistening browned skin"
# REJECTED (the procedural rack reads better from the top-down camera and never occludes the wings):
# gen_3d wire_basket 243 "a square wire mesh air fryer basket tray with a crumb rack, empty, seen at an angle"
# REJECTED (per-piece food stays procedural — its COLOUR is the gameplay read):
# gen_3d chicken_wing 245 "a single raw chicken wing piece, pale pink skin, plump, on nothing"
# REJECTED (same: browning is a live tint, not a second mesh):
# gen_3d wing_cooked 247 "a single golden crispy fried chicken wing, glistening browned skin"
# the deep fryer bench
gen_3d fryer_pot 249 "a deep stainless steel stockpot of golden cooking oil, tall straight sides, no handle visible, seen from a low angle"
gen_3d fryer_basket 251 "a round wire mesh deep fryer basket with a long metal hooked handle, empty"
gen_3d drain_rack 253 "a small rectangular wire cooling rack on short legs over a metal tray, empty"
gen_3d chip_raw 255 "a single thick cut raw potato chip fry baton, pale starchy white"
gen_3d chip_golden 257 "a single thick cut golden fried potato chip, crisp browned edges"
# REJECTED (per-piece food stays procedural — raw-to-golden must tint per frame):
# gen_3d chip_raw 255 "a single thick cut raw potato chip fry baton, pale starchy white"
# REJECTED (same: the gold IS the judgement):
# gen_3d chip_golden 257 "a single thick cut golden fried potato chip, crisp browned edges"
# the egg bench
gen_3d egg_carton 259 "an open cardboard egg carton holding six brown eggs, lid folded back"
# REJECTED (ships with six eggs baked in; that bench is about which eggs are YOURS):
# gen_3d egg_carton 259 "an open cardboard egg carton holding six brown eggs, lid folded back"
gen_3d egg_carton_empty 260 "an open EMPTY cardboard egg carton with six empty moulded hollows, lid folded back, no eggs in it at all"
gen_3d mixing_bowl 261 "a wide shallow white ceramic mixing bowl, empty, seen at a three quarter angle"
gen_3d tall_glass 263 "a plain tall clear drinking glass of water, empty of anything else"

View File

@ -15,6 +15,7 @@ import {
} from '../sim/eggs';
import { el, Panel } from '../ui/hud';
import { loadBackdrop } from './props';
import { loadProp } from './assets';
const BENCH_Y = 0;
@ -113,6 +114,9 @@ export class EggBenchView implements View {
);
this.glass.position.set(2.1, BENCH_Y + 0.45, -0.4);
this.root.add(this.glass);
// ponytail: NO glass prop. The generated tumbler renders opaque, and this
// glass exists solely so you can WATCH an egg sink, stand or float in it.
// A pretty glass you cannot see through deletes the float test.
const water = new THREE.Mesh(
new THREE.CylinderGeometry(0.4, 0.35, 0.62, 20),
new THREE.MeshStandardMaterial({ color: 0x6fa8c4, roughness: 0.15, transparent: true, opacity: 0.5 }),
@ -127,6 +131,15 @@ export class EggBenchView implements View {
);
this.bowl.position.set(0, BENCH_Y + 0.31, 0.55);
this.root.add(this.bowl);
// The cylinder stays as the drop-target geometry the eggs measure against;
// the real bowl just stands where it stands.
void loadProp('/assets/models/mixing_bowl.glb', 1.65)
.then((prop) => {
prop.position.set(0, BENCH_Y - 0.01, 0.55);
this.bowl.visible = false;
this.root.add(prop);
})
.catch(() => undefined);
this.bowlMix = new THREE.Mesh(
new THREE.CylinderGeometry(0.92, 0.92, 0.05, 28),
new THREE.MeshStandardMaterial({ color: 0xf4f0e4, roughness: 0.35, transparent: true, opacity: 0 }),