answer the decisions back to the series back to DEFLEKT

CASINO -- BUILD PLAN

APPROVED TO BUILD -- Brandt ruled on all 19 decisions on 2026-09-12 via /game-decisions (Section 2). Nothing is built yet; Phase 2 starts first. Everything below was read from C:\Deflekt\Source\Deflekt\ on 2026-09-12 by a 20-agent audit (14 subsystem reads + 6 adversarial verifications of the claims the plan leans on, 1,280 file reads); every line cite is verified, not inferred, and the eleven cites the plan leans on hardest were re-read by hand before this was written. Where a claim came from the web (ratings, store policy, asset listings) it says so.

Headline numbers up front, because they set every design decision that follows:


0. THE SPEC, IN YOUR WORDS

Dated 2026-09-12. Verbatim where I have it; the flow bullets are your brief as I hold it.

One spelling note: the code and every shipped screen spell the currency DANERRENS (DFKGameState.h:81, DFKHUD.cpp:984). This plan uses the code spelling; the casino will draw whatever the rest of the game draws.


1. THE SIX ANSWERS

  1. What can be reused -- more than expected on the menu/flow side, almost nothing on the interior side. Section 4 is the table. Short form: the title row, the whole loadout screen, the PICK YOUR MUSIC overlay, the DANERRENS wallet and its save, the NOT-ENOUGH dialog, the loading-screen machinery, the ship + follow camera + thruster + engine audio for the flyover, the hangar-pad "near a thing, press Y" pattern, the killcam as the dive template, the staged multi-frame world builder, the PizzaBuildings sci-fi kit and neon glow-map material, the ISM/HISM factory, the pooled particle system and the bought explosion families for win VFX, the ElevenLabs SFX pipeline, the ui_matrix / perf / Doppel rigs, Sentry breadcrumbs.
  2. What must be new -- Section 5. The mode identity and ~20 gates; a walking third-person pilot pawn and camera; a C++ animation driver (no AnimBP allowed); an NPC crowd with seat reservation and collision-aware walking; the slot engine (RNG, paytables, reel presentation, resolve-before-animate); a wallet API (there is none -- every credit is a raw +=); casino audio (the game has never played a sound at a location); the dive cinematic (no fade, no camera blend, no sequencer exists); 3D casino content of every kind (zero slot machines, casino props, neon signs, sit animations or pilot bodies exist anywhere on this machine).
  3. Skills / systems required -- UE5 skeletal animation in pure C++ (UAnimSingleNodeInstance, then possibly an FAnimInstanceProxy graph), ACharacter movement + spring-arm camera, simple crowd steering on an aisle lattice, slot-machine mathematics (RTP, volatility, paytable derivation), Canvas UV-strip rendering for reels, spatialised audio with concurrency caps, editor-side IK retargeting of bought animations, and the house disciplines (1080p pixel-identical HUD gate, staged loads behind bLoadingActive, append-only enums/details, Mac path-case lint, save 3-site pattern).
  4. Tools / assets -- Section 9 is the phase-gated shopping list with links. One new engine module dependency (animation runtime) is needed; no new plugins, no NavMesh/AIModule (a lattice walker keeps the "simple reactive AI" rule and avoids an approval-class install). Everything else is content.
  5. Recommended plan -- Section 8, your 17 phases in your order, each with build / reuse / assets / code / dependencies / problems / tests, with day estimates. Phase 1 (audit) is this document.
  6. Decisions before implementation -- Section 2. Nine of them. Two gate everything: the age-rating question and the art-direction fork. Neither is a code decision.

2. LOCKED DECISIONS -- Brandt, 2026-09-12, via https://deflekt.games.mayd-it.com/game-decisions

CardRulingFollows my recommendation?
D1 ratingGO -- reels and a house edge. Note: "Do whatever is needed. I believe everyone who bought the game is over 18 anyway." Re-confirmed 2026-09-13 04:04Z after a slip to WAIT (card d1-recheck): "just make it anyway and we can just address the steam stuff and disclosures and what not when we deploy to steam."no (I said WAIT) -- his call; the Content Survey + AI disclosure stay Phase 17 owner steps
D2 artGO Synty on the card -- then REFUSED in chat the same evening on seeing the store page: "it doesn't look that good". The low-poly look was the look test and it failed at $0. Replacement route re-asked as card d2-2-art-route -> RULED C, 2026-09-12 22:01Z: SHOW ME FIRST -- one facade made through our Tripo pipeline and one built from a bought realistic kit, both photographed in the district at the real flyover camera, then he picks the route. Nothing is bought before that. -> RULED A - OURS, 2026-09-12 22:59Z (card d2-3-look-pick; note: "The casino looks pretty good with ours. The other one looks like s*"). Every casino piece comes from our own Higgsfield -> Tripo -> UE pipeline**, each approved from a photograph before import; purchases shrink to rigged bodies, seated/idle animations and possibly a props pack. No exterior kit, ever.yes (A was my recommendation on the card)
D3 mode identityB -- a new EDFKMode::Casino valueno -- consequences stated under D3 below
D4 soloYES -- solo onlyyes
D5 walletA -- direct DANERRENS, one confirm at sit-down, none per spinyes
D6 lifetimeYES -- wallet only, rank untouchedyes
D7 pilot bodyA -- one body tinted per pilot, name tag, portrait on the HUDyes
D7b NO PILOTFORCE a real pilot pick before enteringyes
D8 sittingBUY the seated animations -- patrons sityes
D9 packageSTACK -- leave the package aloneno -- consequences under D9
bet ladderAPPROVEyes
reserve floorBET DOWN TO ZERO -- nothing is protected (re-asked as card floor-2 in plain words after the first card confused him; ruled 2026-09-12 21:22Z). The balance can never go below zero either way; no reserve is held back from betting.yes
scopeFULL -- all 17 phasesyes
sixth pillYESyes
badgeBOTH -- CASINO gets NEW, INVASION 2 keeps IN BETA TESTyes
musicKEEP the chosen set, one track per casino enteredyes
difficulty stopHIDE it in the casino loadoutyes
pilot lawCAMPAIGN ownershipyes
six namesAPPROVEyes

The reasoning that was put to him follows, kept as the record of why each option existed. Where a ruling went against my recommendation, what it costs the build is stated under it, once.

D1. Age rating and the Steamworks content survey (decide first, before any code). From web research this session, not the repo: Steam permits simulated gambling with fictional currency. PEGI rates any game containing simulated gambling 18 automatically since 2020, including in-game-currency slot machines, and it is not retroactive -- so the CASINO patch would be the moment DEFLEKT becomes PEGI 18 in PEGI territories. ESRB would add a "Simulated Gambling" descriptor (often Teen). Ratings are mandatory only in Germany and Indonesia; since 2024-11-15 Steam hides unrated games from German customers, and Valve derives the German rating from your Content Survey answers. The repo documents no rating step at all (Steam\STEAM_LAUNCH_RUNBOOK.md:18-21 lists only AI disclosure, OS and controller). Recommendation: open Steamworks -> your app -> Content Survey, read the gambling question, and decide whether a reel-based slot with a house edge is a trade you want for this title. If the answer is no, the honest alternative is a skill-flavoured "arcade" floor (timing-based machines, no reels, no house edge) -- a different game, and I would re-plan.

RULED GO. Reels and a house edge ship. The Steamworks Content Survey gambling question is still his to answer when the casino patch goes up (Phase 17 owner step); Valve derives the German rating from it, and the AI-disclosure paragraph is revised in the same sitting.

D2. Art direction: coherent low-poly (Synty) vs stylised-realistic (Fab), proven for $0 first. The only owned exterior kit is PizzaBuildings, which you rejected as a flown-over city on the planet (DFKPlanet.cpp:28-30). The only owned furniture is Elvish fantasy. The only owned humanoids are grey mannequins. A casino built from owned assets alone is three vendors in one room -- the exact failure Docs\INVASION2-ART-STRATEGY.md:56-63 warns about. Recommendation: one vendor for the whole casino. Synty POLYGON is the only vendor with a casino interior, a cyberpunk city and a character set in one consistent style, it is mobile-safe (no Nanite/Lumen dependency, cheap on the Z1), and it publishes a free Starter Pack. Phase 3 imports the free pack, applies the DEFLEKT glow-map recipe, and photographs it in the district before you spend a dollar (your rule: approve backgrounds before import). If you hate the look, we take the Fab route in Section 9 instead.

RULED, in three steps. GO Synty on the card; refused in chat on seeing the store page ("it doesn't look that good"); re-asked as d2-2-art-route -> SHOW ME FIRST; photographed (Phase 3 look test, one Tripo-made facade beside one kit-bashed facade in the district at the real flyover camera) -> A - OURS. The art direction is therefore MATCH THE GAME: the casino is made the way the fifteen arena dioramas and every boss were made, and it is coherent with them by construction. What that costs: roughly a week more of my time across the asset phases (one concept + one Tripo job + one glow-map import per piece, each photographed for his approval), and no vendor to blame. What it saves: two exterior packs and a casino interior pack that would have arrived as grey shells for code to dress, three vendors in one room, and the Nanite/Lumen/4K screening every realistic pack has failed so far.

D3. Mode identity: append EDFKMode::Casino or run as Solo + a flag (tutorial pattern). The enum is append-only because its ordinal is frozen into Steam leaderboard Details[6] (DFKGameState.h:13; writer DFKLeaderboardSubsystem.cpp:167, reader :496). Appending is serialization-safe -- BUT the verification found ~18 negative-check consumers that treat "not Versus, not Invasion" as CAMPAIGN (run-end DANERRENS DFKGameState.cpp:729-768, campaign boards DFKLeaderboardSubsystem.cpp:272-285, BestScore folds :649/:1169/:1356, volcanoes DFKVolcanoSystem.cpp:225, tornado palette DFKTornado.cpp:98), ~6 Solo-only ternaries that flip to the 2-player path (DFKPlayerController.cpp:1971, 2671, 3153-3155, 3194; DFKHUD.cpp:1892, 2944) so a solo CASINO could never launch, and the title->mode cast is clamped 0..3 (DFKPlayerController.cpp:1783) so a new ordinal is unreachable anyway. The shipped TUTORIAL is the precedent for a side mode: it runs as Solo with bTutorialActive and inherits every "no boards / no meta / no waves" guard by one flag at five sites (DFKArenaDirector.cpp:2762, DFKLeaderboardSubsystem.cpp:137, DFKGameState.cpp:728/773/787). Docs\INVASION2-MODES-PLAN.md:163 already states the law "do not add EDFKMode enumerators". Recommendation: Solo + bCasinoActive + a transient ECasinoPhase {District, Dive, Interior, AtMachine}, exposed as IsCasino() beside IsWild() (DFKGameState.h:668). Casino posts to no leaderboard and has no death bucket, so the enum buys nothing in v1. Recorded as an ADR in Phase 2.

RULED B -- a new enumerator. His call; the build follows it. What B costs, stated once: Casino is appended after Invasion (ordinal 4, DFKGameState.h:13); the title id 14 branch sets Mode = Casino explicitly and the 0..3 clamp at DFKPlayerController.cpp:1783 is never widened; every one of the ~18 negative-check consumers and ~6 Solo ternaries listed above gets an explicit Casino case in Phase 2 (the checklist is the grep for EDFKMode::, 130 hits in 14 files) instead of inheriting the tutorial's guards; the INVASION2-MODES-PLAN law "do not add EDFKMode enumerators" is superseded by this ruling and the ADR records that; leaderboard readers already degrade an ordinal-4 row to absence (ModeTag default at DFKHUD.cpp:641-651, the website's mode filter), so a month-behind Mac client hides rather than mislabels. What B buys: the crash breadcrumb logs the true mode for free, IsCasino() is a one-line Mode == EDFKMode::Casino, and a casino leaderboard or death bucket is possible later without a second migration. Phase 2 grows from 4 to 5 days.

D4. Single-player only. Nothing in the brief has a second pilot in the casino. Solo+flag makes this free: the P2 join branch on the music picker (DFKPlayerController.cpp:1971) and the loadout ghost seat never fire. Recommendation: yes, solo. Add an explicit !bSplitScreenActive guard so co-op can never reach the casino by accident.

D5. Wallet model and your 2026-08-02 "every spend asks first" law (DFKGameState.h:420-423, StageBuyConfirm defaults to NO at DFKPlayerController.cpp:3616-3627). A YES/NO modal on every pull is unplayable; ignoring the law breaks a rule you set. Recommendation: direct DANERRENS as you asked, with one confirm when you sit down ("PLAY THE GOLDEN MANTA? Bets 5-50 DANERRENS. The house keeps 8 %.") and none per spin; the SPIN press is the explicit act. Raising the bet above 25 asks once more. The existing NOT-ENOUGH dialog fires whenever bet > balance (StageBuyDenied, DFKPlayerController.cpp:3604-3614). Alternative kept alive: a per-visit CHIP wallet bought once at a cashier (the Invasion Credits[] precedent, DFKGameState.h:225) -- one confirm, one debit, one credit per visit, and the house edge never touches the pilot fund mid-session.

D6. Casino wins must NOT raise LifetimeDanerrens / Mastery Rank. Every existing earn site increments both (DFKGameState.cpp:739-740, 762-763, 777-778, 1288-1289); LifetimeDanerrens drives the RANK badge on the title (:801-811, DFKHUD.cpp:1990). A gambled LEGEND badge devalues the one career stat the game has. Recommendation: wallet-only. The new CreditDanerrens helper makes this the deliberate exception.

D7. The pilot body. You asked to "walk as your pilot character". Pilots have no 3D form; the Tripo/fal pipeline has only ever produced static meshes; nine bespoke rigged, canon-accurate humanoids are weeks of an asset pipeline this project does not have. Recommendation for v1: one body in the chosen art style, tinted PilotColor(i) (DFKGameState.cpp:898-909), helmet/visor, name tag from PilotName(i), and the portrait on the HUD chip. Nine bespoke bodies go to the V2 backlog. What walks when SelectedPilot == 0 (NO PILOT, DFKGameState.cpp:103) needs your call: force a real pick at the loadout, or an anonymous body.

D8. Sitting. No sit/stand animation exists anywhere; buying one and retargeting it is a phase of work by itself (Section 9, Phase 8). Recommendation: buy it -- but read WHAT I WOULD CUT first, because stand-up cabinets make the whole seated pipeline disappear.

D9. Package ceiling. The casino needs room. Recommendation: never-cook STF (zero references) and CastleofEternalMist except its SkySphere (the one mesh the planet uses, DFKPlanet.cpp:1942), and re-home the mannequins under /Game/Casino/ first. That is a cook + verify + a near-full depot re-upload (Steam\app_build_deflekt.vdf depot replaces recursively). Your call whether to pay that in Phase 2 or stack the casino on 9.88 GB.

RULED STACK. The package is left alone and the casino is added on top. The mannequins therefore stay under the vendor Demo folder; the casino references them by literal path from its single owner file and cook.ps1 gets a $PathLoadedAssets row for them, so any future trim of that pack fails the cook loudly instead of silently deleting the casino's bodies. Every casino asset decision still states its cooked cost.

Smaller rulings the build needs, defaults in brackets: title row gets a 6th pill [yes; logged in INTENTIONAL_1080P_DELTAS.md]; CASINO carries a NEW badge and INVASION 2 keeps IN BETA TEST [badge table generalised]; music = the player's chosen set rotating one level track per casino entered [yes; no new soundtrack]; DIFFICULTY stop on the loadout [hidden in casino]; a minimum reserve below which you cannot bet [none -- losing is the point -- but the first-entry card states the house edge]; pilot law in the casino [campaign ownership, not WILD skins].


3. LOCKED BY THE CODE

Not opinions. Each is a line that bites if ignored.


4. WHAT IS REUSED

SystemHow the casino uses itCite
Title mode row, pills, click registry6th pill via TitleModeOrder/TitleModeLabel; DrawPlate3D registers the hitDFKGameState.h:262-265, DFKGameState.cpp:282-293, DFKHUD.cpp:2055-2069
INVASION 2's title branchTemplate for a non-0..3 id: if (TitleSelection == 14) { Mode=Solo; bCasinoActive=true; } then EnterShipSelect()DFKPlayerController.cpp:1776-1785
The loadout (pilot + ship select)Unchanged screen; Solo-family so 1P layout and bDone = bP1ShipReady come freeDFKPlayerController.cpp:2656-2711, 2713-2922, 3153
PICK YOUR MUSIC overlayWiden the gate at :3160 to `InvasionIsCasino()`; draw/input/mouse/SaveBest/FinishShipSelect all reused; two hint strings made mode-awareDFKPlayerController.cpp:3160-3167, 1963-2005; DFKHUD.cpp:1684-1739, 1734-1735
FinishShipSelect funnel + loading screenCasino branch raises bLoadingActive like the planet; captions parameterisedDFKPlayerController.cpp:3188-3217; DFKHUD.cpp:290-318
Staged multi-frame world buildDistrict built one stage per frame under the same gate (DONE: TickCasino + ADFKCasinoDistrict::BuildStep)DFKArenaDirector.cpp:3023-3103 (planet), TickCasino near the file's end; DFKPlanet.cpp:233-246
Pause/overlay guardsFree once bLoadingActive is honestDFKPlayerController.cpp:3335; DFKLeaderboardSubsystem.cpp:79-82
Ship pawn, flat follow cam, thrusters, engine audioThe flyover IS the shipped flight model on a flat map with its own extents and blockersDFKPawn.cpp:301-304, 1415-1442; DFKPlayerController.cpp:1204-1306, 1552-1666
Hangar-pad proximity + Y prompt + world-projected plate"Near a casino press Y", "near a machine press E/Y"DFKPawn.cpp:1296-1313, 2096-2102; DFKHUD.cpp:2298-2350, 2764-2766
KillcamShape of the dive: owner flag, real-time tick, VInterpTo, restoreDFKPlayerController.cpp:793-860, 1153-1156
Banner text-cinematic"WELCOME TO THE NEON STRIP" with a casino allowance at the gateDFKArenaDirector.cpp:3427-3432; DFKHUD.cpp:4709-4725
DANERRENS + save + title readoutBalance, mirror, load clamp, SaveBest, HUD pillDFKGameState.h:81-82; DFKGameState.cpp:143, 670; DFKHUD.cpp:980-987
NOT-ENOUGH dialogStageBuyDenied("SPIN", bet, have); host screen calls DrawSpendDialogs() before its returnDFKPlayerController.cpp:3604-3614; DFKHUD.cpp:475-499, 1235
Sound-menu slider rowBet selector (row + bar hit ids, click sets value from rect fraction)DFKHUD.cpp:905-928; DFKPlayerController.cpp:3027-3046
DisplayScore count-up, GAME OVER timed revealWin payout count-up and breakdown revealDFKHUD.cpp:4004-4007, 4769-4793
DrawBriefCardPaytable card and the first-entry "no real money, house keeps X %" cardDFKHUD.cpp:3670-3693
UV sub-rect tile draw (9-slice Slice lambda)Seed of DrawSprite for reel symbol stripsDFKHUD.cpp:194-200
PizzaBuildings kit + ISM skyline + glow-map materialDistrict blocks and interior shell pieces if the Synty route is refusedDFKPlanet.cpp:646-715; Content\Python\make_city_material.py
GetOrCreateHISM, FDFKKitPiece table placement, best-of-N clearanceDistrict buildings, machine layout table, NPC wander targetsDFKPlanet.cpp:1120-1166, 870-883; DFKArenaDirector.cpp:950-1024
SlotTurrets + FindFreeSlotSeat reservation on machinesDFKArenaDirector.cpp:1562-1569
Enemy reactive steering, DemoBot waypoint roamNPC separation and wander constantsDFKEnemyShip.cpp:333-414; DFKPawn.cpp:1705-1725
ADFKFxSystem pooled ISM particles, Sty_Explosions_VFX Cascade families, Flash/Pop/ShockwaveReel-stop flash, payline pop, jackpot burst -- no new VFX packsDFKFxSystem.h:44-61; DFKBoss.cpp:736-756; DFKFlash.cpp:29-57
M_DFK_Neon MIDs on primitives, M_DFK_Particle per-instance colourSignage strokes, floor edging, thousands of neon tubes in one ISMDFKGridFloor.cpp:17-78; make_fx_materials.py:24-39
Sfx() UI pools, engine-loop-on-controller recipe, crossfade engineMenu sounds; crowd bed; jackpot duck as a fourth target termDFKFxSystem.h:58-61; DFKPlayerController.cpp:762-782, 1474-1490
ElevenLabs generate -> loopify -> import pipelineReel/coin/jackpot/crowd soundsSFXCandidates\generate_engine_sfx.py; AudioImport\import_engine_sfx.py
dfk.GrantDanerrens latched dev-cvar patterndfk.CasinoForceOutcome, dfk.CasinoAutoSpin for headless RTP measurementDFKArenaDirector.cpp:2670-2684
dfk.TestMenu, dfk.StartMode, ui_matrix, ui_sheet, ui_diff, perf_planet, freshinstall_check, DoppelEvery casino screen photographed, every soak measuredTools\
TickCrashBreadcrumb + SentryCasino fields (phase, machine, bet, balance, NPC count)DFKGameState.cpp:407-470
GoToMainMenuThe only exit; made mode-aware so it banks no casino scoreDFKPlayerController.cpp:3807-3832

5. WHAT MUST BE NEW


6. THE RULES, WITH NUMBERS

Bet ladder: 5 / 10 / 25 / 50. Max bet 50 = a quarter of one HARD run. Raising past 25 asks once (D5).

Top prize <= 100x = 5,000 DANERRENS at a probability that keeps its expected contribution under 2 % of RTP. That is ~25 runs of income -- a great night, not the catalogue. A 500x jackpot on a 100 bet would pay 50,000 and buy every pilot; that is the number the ladder exists to prevent.

RTP 90-95 % by machine, ~92 % overall. The casino is a net sink on average, which is what keeps the shop's pacing (~85-95 runs to buy everything) intact. Whether a player can gamble a 3,000 pilot fund to zero is D2's reserve question; I recommend yes, stated plainly on the first-entry card.

Eight machine types, a volatility ladder, all DEFLEKT lore, no real-slot iconography (no 7s, bars, cherries, bells):

#MachineSymbols (owned art where possible)RTPMaxVolatility
1FLIGHT CREWthe nine pilot portraits (T_DFK_Pilot1..9, owned)95 %20xlow
2MANTA REELSthe five ship liveries (T_DFK_Ship0..4, owned)94 %25xlow
3DEFLECT LINEbolt colours; three-of-a-colour parries93 %30xlow-mid
4SLIPGATE SPINNERpickup icons; the SLIPGATE CACHE odds precedent (INVASION_MODE_PLAN.md:175-177)92 %40xmid
5BOSS BOUNTYboss silhouettes from capture_boss_ref.ps1 stills92 %50xmid
6TORNADO TWISTERhazard glyphs; a WILD funnel symbol91 %60xmid-high
7VOLCANIC VAULTlava tiers; progressive-feel "heat" meter (cosmetic)90 %80xhigh
8THE ANTIPODEplanet frames; the rarest symbol is the far side of the world90 %100xhigh

Paytables are derived, not guessed: for each machine, symbol weights per reel are chosen, the hit frequency of every line is computed, and the multipliers are solved so the sum of (probability x multiplier) lands on the target RTP. The derivation is written into Docs\CASINO-ECONOMY.md in Phase 9, and dfk.CasinoAutoSpin 100000 on a scratch save proves each machine's measured RTP within +-0.5 % before it ships. Numbers in the table are targets until that harness runs.

Persistence cadence: one SaveBest() per resolved spin, after debit + credit + stats are applied together (a crash between them would eat a bet or grant a free spin). The game already saves on every volume tick, so one write per spin is within tolerance; per-reel is not.

Six casinos in the district, all fictional, all ours: THE GOLDEN MANTA, SLIPGATE PALACE, THE DEFLECTOR ROOM, HOLLY JO'S, GRID CITY GRAND, THE ANTIPODE CLUB. v1 opens one interior (the others are facades with a "COMING SOON" marquee and no ENTER); each later casino is a re-skin of the interior with a different machine mix. Names are suggestions; they are strings.

District scale: flat play box +-12,000 uu (twice the arena), casinos 6-8 s apart at cruise 1,550 uu/s, fixed-bearing -70 follow cam (your 2026-08-07 verdict against a chase cam stands, DFKPlayerController.cpp:94-103), casino footprints registered as solid blockers so the ship flies around them (DFKPawn.cpp:1427-1442 pattern). Interior built at world offset X = +400,000, resident and dormant from mode start so the dive is a pure camera move.


6b. WHAT MAKES IT WORTH SITTING DOWN -- the design verdict, 2026-09-13

Brandt, 2026-09-13: "when you sit down on the machine it will then just show the slot game. So it is ok that it is not perfect here but we will need to think about how we can make our slot machines addicting and fun. For example you can get bonuses and jackpots and all sorts of stuff."

Two consequences. First, the 3D cabinets are set dressing from here: the screen is the product, and cabinet polish stops (Phase 5 is closed at its current look). Second, the question above got a real design pass rather than my opinion -- five independent designers and three scoring lenses, briefed with every locked number in Section 6 and the hard no-real-money rules. This section is what they agreed on and what is left for Brandt to rule.

THE PROBLEM THEY WERE POINTED AT

The stake here is soft. DANERRENS are earned by playing arena runs (~200 a HARD run), the house keeps 8 %, so spinning is a -8 % trade against an income the player controls. A rational player concludes that flying beats spinning and never comes back. Bonuses and jackpots are the right instinct but they do not answer it on their own: a bigger pile of a currency you can always earn is not a prize.

THE THREE ANSWERS, WHICH COMPOSE

1. The house must pay in things the shop cannot sell. This is the Borderlands move: its slot machines paid out GUNS, not money. A 5,000 DANERREN top prize is inert for exactly the player most likely to hit it -- the one who has already bought out the shop. Casino-exclusive liveries, cabinet colourways, a lobby plaque with your pilot's name, the other five casinos opening: none of these touch RTP, because they are awarded on events rather than payouts. The player's FELT return climbs well above 100 % while the monetary return stays exactly 92 %. That is the structural trick and it is free.

2. A meter that only goes up while the money goes down. Four of the five designers invented this independently, under four names, which is the strongest signal in the whole exercise. A bar that fills one notch per spin REGARDLESS OF BET, is saved forever, and guarantees that machine's feature when it fills. It makes a losing session visibly productive, it makes thirty cabinets mean something instead of being one cabinet thirty times, it is the honest version of what a bonus-buy button promises (the feature is paid for in time, not currency, so a bigger bet can never rush it), and it is the reason Phase 6's walking pilot exists at all -- you walk the floor to pick the chair that is nearly full.

3. DEFLEKT's one button, inside the reels. The single most on-brand idea produced, and the thing a player would describe to someone else. A timed deflect on the reel screen, the same window and the same press the game spent forty hours teaching. Whether it is allowed to CHANGE a payout is a ruling (below); if it is not, it still belongs as an EV-neutral double-or-nothing after a win.

THE HOUSE RULES -- what this mode will never ship

Unanimous across all three judging lenses. These go in Docs\CASINO-ECONOMY.md and an ADR with their reasons, not in a code comment, because the failure mode is a future "juice it up" pass quietly adding one.

BUILDABILITY -- the three calls that are day-one or never

From the cost lens, which read the repo. Each is cheap now and a rewrite later touching the resolver, the HUD, the input handler, the harness and the save at once.

  1. FDFKSessionState as an argument to ResolveSpin, with bNextSpinFree, StripSet and the multiplier stack present even while all three are inert. A stateless ResolveSpin(Machine, Bet) makes free spins, respins, sticky wilds and hold-and-spin each a special case welded into the call site.
  2. Physical reel strips as the authority (uint8 Strip[5][64]), with per-reel independent stop control and more than one strip SET per theme -- not weight vectors. Weights round when they expand, and without a per-reel lock mask you cannot hold a reel, which kills every respin feature.
  3. Every paytable entry authored as a whole number of DANERRENS at bet 5, so Pay = PayAt5 * (Bet/5) with 5/10/25/50 dividing to 1/2/5/10. The entire pay path is exact integers with zero rounding, and RTP is provably identical at every bet -- a real fairness property, and free.

Also flagged, and it corrects this plan: the Phase 9 verification gate of 100,000 spins at +-0.5 % is statistically wrong. That tolerance is several times tighter than the sampling error at that N, so it will fail CORRECT high-volatility tables and invite a tuning pass that corrupts them. Replace with an offline exact solver that generates the table header (the gen_asm_header.py / DFKAssemblies.table.h precedent), plus a fixed-seed 10,000,000-spin harness gated on exact equality against the solver's number, a chi-square on the stop histogram, and four asserted invariants: balance never negative, LifetimeDanerrens unchanged, GS->Score never written, no win above the cap.

Two things that sound like variety and are a second renderer: any grid that is not 5x3, and cascading/tumbling reels -- cascades destroy the closed-form RTP solve permanently and tax every machine the project ever adds. Volatility comes from strips and paytables. The grid stays 5x3 forever.

RULED -- Brandt, 2026-09-13 21:34-21:38Z

CardRulingFollows my recommendation?
F1 what the house pays inKEEP IT SIMPLE -- DANERRENS only, nothing elseno (I said cosmetics + casinos)
F2 skill in the reelsNO -- keep the reels pureno (I said yes, on one machine)
F3 the persistent meterNO -- no meter, keep the machines statelessno (I said yes, per machine type)
F4 the house rulesAPPROVE -- these are the house rulesyes

Three NOs pointing the same way, and read together they are not three rejections but one instruction: the fun comes from inside the spin, or it does not come. He asked for "bonuses and jackpots"; the panel answered with meta-progression, a walk-away currency and a skill minigame -- scaffolding AROUND the machine rather than a better machine. He does not want scaffolding. That is a coherent position and it is the simpler one, so the design above narrows to what survives it.

WHAT SURVIVES, and now carries the whole mode. The highest-scoring design of the five (24/30, the anticipation-and-pacing one) is also the only one untouched by these rulings, because all of it lives inside the machine:

WHAT THE RULINGS COST, stated once and not re-argued. Nothing now distinguishes one cabinet from another of the same type, so the thirty-machine floor is atmosphere and the machine TYPE is the entire unit of content -- which raises the bar on the eight being genuinely different games rather than eight skins. And a losing session now produces nothing at all except the session itself. That makes hit frequency load-bearing: the base game has to pay something often enough that losing still feels like playing. Hit frequency therefore becomes a SECOND TARGET on the paytable solver alongside RTP (roughly 42 % down to 12 % across the ladder), not a number that falls out of it. That is the single most important consequence of these three NOs and it goes into the solver from day one.

WHAT THE RULINGS BUY. They cut real scope and real risk. No reward plumbing reaching into the shop or INVASION 2 (F1). No skill input path through the resolver, and the solver targets one distribution instead of two (F2). No new save fields for meters, so save v5 stays exactly as Phase 11 already plans it and the hard deadline in F3 is gone (F3). Phase 10 shrinks to eight themes, eight strip sets, eight paytables and eight second acts.

F4 APPROVED, so the never-ship list above is law: it is written into Docs\CASINO-ECONOMY.md and Docs\ADR\0002-casino-house-rules.md with its reasons, where it outlives anyone forgetting.

WHAT WAS ASKED -- the four cards, kept as the record of why each option existed

#RulingDeadlineWhy it cannot be deferred past that
F1What does the house pay in? DANERRENS only, plus casino-exclusive cosmetics, or plus real power (a pilot signature SPECIAL, a HANGAR EPIC, once per save).Phase 10 scopingThe strongest hook in the set, and the only one that reaches into INVASION 2's progression curve and the shop's 85-95-run pacing.
F2May skill change a payout? The one-button deflect inside the reels: real stakes, or EV-neutral flavour.Phase 9 startDecides whether the solver targets AVERAGE play or perfect play, and whether this is DEFLEKT's casino or a slot wearing its art.
F3One persistent meter -- which, and does a non-purchasable second currency exist?Phase 11, hardPhase 11 fixes the save v5 layout. A field decided now costs ten minutes; the same field decided later is a v6 migration, and a missed load site is silently wiped by the first-frame SaveBest.
F4Approve the house rules above as a standing law for the mode.Phase 9 startSo it survives contact with a later playtest that says a machine feels flat.

Deliberately NOT reopened: the walking interior (Phases 6 and 8). The contrarian designer argued hard for cutting it to a flyover kiosk on cost -- roughly 16 days plus a greenfield skeletal-animation and crowd pipeline in a codebase with zero skeletal meshes. Brandt's brief has always had him walking as his pilot among patrons, and 2026-09-13's message ("when you sit down on the machine") assumes it. It stays. Recorded here so the argument is not re-made.


7. THE BUILD

Seventeen phases, your names, your order. Each ends in a Photograph or a VERIFY line naming the rig. Effort is my honest estimate in working days assuming the usual build-cook-verify loop and not counting asset lead time or your feel passes. Every phase carries STATUS: PLANNED.

Phase 1 -- Project audit (0 days remaining)

This document. The 20 per-area reports are on disk at ...\scratchpad\casino_audit\*.md (14 audits, 6 verifications) if you want the long form.

STATUS: DONE (2026-09-12)

Phase 2 -- Architecture (5 days) -- ships alone as a no-visible-change patch

STATUS: BUILT 2026-09-12 (b90bd42 on casino/phase-2-architecture) -- the evening the rulings landed. Verified: Development build clean, mac_lint 12/12, 37 matrix captures reviewed by eye (six-pill title at 720p/1080p/4K with both badges; one-seat casino loadout, no DIFFICULTY, pill reads ENTER; picker verb ENTER THE CASINO; casino in-game frame carries the corner logo only), ui_diff musicpick 1080p GATE HELD against the 2026-09-09 baseline, INVASION 2 planet still builds headlessly. Two extra casino gates the first capture demanded (the controls primer and the five-second how-to band, both about bolts and turrets) and one pre-existing 720p title defect (option column sized for the retired ninth row) were fixed on the way. Not yet cooked or merged: the branch merges to main with Phase 3, when there is something a player can see.

Phase 3 -- Casino world: the district (5 days)

STATUS: BUILT 2026-09-12 (29fff44); photographed; RULED CHANGE 2026-09-13 00:14Z. His note, verbatim: "I think it's okay but the building should be way bigger and the road may be a little bit smaller and actually look like a road where you can land on. I don't know what all the other little buildings are next to the big buildings, but maybe we look at those and see if we can make them look better. I don't know, but let's first focus on adding all the buildings in the spots and making them bigger because the one you have looks fine as you can enter it in a certain way. Maybe you have a landing pad or something like that?" Read as four orders, in his priority: (1) all six facades on their lots (he picked A for every casino, cards f-*, 00:11-00:12Z) and WAY bigger (frontage 2600 -> 5200, lots moved out to Y +/-6000); (2) the road narrower (kerbs +/-3300 -> +/-2200) and a real road surface with a centre line; (3) a landing pad at every door (the plaza disc becomes a pad: ring + centre mark, lit gold when open); (4) the fill blocks read as unexplained clutter -- second pass, after the buildings; first pass here makes them a regular lattice of city blocks beyond the lots instead of scattered props. The first version's record: a new ADFKCasinoDistrict actor (the planet's shape: spawned by TickCasino behind the loading gate, BuildStep(0..2) one stage per frame -- DIMMING THE CITY 1 ms, RAISING THE SKYLINE 93 ms, PAVING THE STRIP 16 ms -- GS->CasinoDistrict is the one switch) owning the night pass, a +/-90000 dark ground, 7 tower ISMs (two rectangular rings just past the +/-12000 box plus ~320 low fill blocks the ship flies over), the boulevard kerbs and cross streets, six lots (the manta's facade on lot 0; dim tinted footprints + outline + gold plaza disc on the rest) and the blackboard it publishes: GS->CasinoLots (FDFKCasinoLot: Pos, Yaw, Frontage, Enter/ExitRadius, Door, Name, bOpen -- the ONE copy of a casino's identity) and GS->CasinoBlockers. GS->ArenaHalfX/Y = CasinoHalfExtent (12000) on the spawn frame; the pawn clamp reads runtime extents through UsesRuntimeExtents() (Invasion or Casino) and pushes out of CasinoBlockers through the same lambda as the cones; the casino is admitted to the follow camera (bFollow); the pawn publishes NearCasino (enter/exit hysteresis) and NearestCasino; the HUD draws the balance chip (the UPGRADES pill) and the name tag under the ship (COMING SOON for closed lots) as a sibling block after the combat tail. Dev lever dfk.GotoCasino N. The facade moved to /Game/Casino/Facades/SM_CasinoFacade_Manta (production, cooked); MeshImport/import_casino_facade.py takes DFK_FACADE_GLB / DFK_FACADE_NAME from the environment. Photographs: Docs/casino-look/district_p3_spawn.png, district_p3_manta.png. The look test below is the record of how the art ruling was reached; its code is gone (commit history keeps it). Ruling d2-2 = SHOW ME FIRST. Two gates, not one: the district skeleton is MODE-gated (every casino entry builds it; it compiles into Shipping, where the closed title door keeps it unreachable -- and StartSelectedMode now refuses id 14 outright when the door is closed, so the ini-settable dev launch levers cannot open it either); only the two candidate lots are behind dfk.CasinoLook 1 inside !UE_BUILD_SHIPPING, and facade A's path has no default in the binary (the rig passes dfk.CasinoLookA <package>.<asset>), because /Game/Casino/LookTest is never-cooked while the door is closed and cook.ps1 fails on any Source literal into a never-cook folder. The skeleton: boot dressing and torch glows torn down, the ancient-city floor hidden, night lighting (sun 0.30x cool, no dynamic shadows, sky violet at the level's own intensity), a ring of 40 owned sci-fi towers at 11000-16000 uu plus a 14-tower far-edge row at X 6200-7400 whose bases stand inside the visible ground (a row at 8600+ photographed as nothing: the -70 camera's horizon is above the frame, so anything tall at the top edge extends up and out of it) -- and two candidate facades on the lots ahead of the ship. A = Higgsfield concept -> Tripo H3.1 image-to-3D (Saved/CasinoLook/facade_a.glb, 56 MB) -> MeshImport/import_casino_look.py -> /Game/Casino/LookTest/SM_CasinoFacade_A with an MI off M_DFK_CityBuilding (its own base colour as the glow map, EmissiveBoost 3). B = SM_Skyscraper_Module14 from the owned PizzaBuildings pack, footprint scaled to the 2600 uu frontage and height capped separately (a uniform cap shrank it to a thin tower on a plaza), M_DFK_Neon roof bars on the WORLD bounds (local extents about the actor put them in a small square off one corner) and a gold roof disc (a standing marquee photographs as a sliver from -70), plaza slab in front, four lamps. Photograph and card pictures are TRACKED in Docs/casino-look/ (the frame district_test3_1080p.png, the labelled frame, the two equal crops and the side-by-side, cut by Tools/casino_look_sheet.py). Review of the diff (three lenses, twelve refuters) found one real defect, fixed before commit: the pause menu's RESTART RUN reached ResetArena -> EnterPhase(Intro) -> SetFloorTint, whose only latch was bInvasionMapBuilt, so dfk.EnvMode 2 re-spawned the level-1 diorama (SM_BG01 at +/-6400) in the middle of the strip and flashed LEVEL 1. SetFloorTint now latches on bCasinoDistrictBuilt too and the Intro banner is skipped in the casino; RESTART re-seats the ship and nothing else. TRAP for every later phase: any path that reaches EnterPhase/ResetArena is a campaign path until it is given a casino answer. Three capture windows were needed, one wasted: Git Bash rewrote /Game/Maps/Arena into a Windows path (run the editor with MSYS2_ARG_CONV_EXCL="*" or from PowerShell). Synty is out (refused on look). Nothing bought.

Phase 4 -- Buildings (4 days + asset lead time)

STATUS: BUILT + APPROVED 2026-09-13 04:02Z with the third district pass ("Yup looks good"). PHASE 4 CLOSED -- all six facades stand on their lots at frontage 5200; no purchase was needed (ruling A). His five A picks went Tripo H3.1 -> import_facades_batch.py -> /Game/Casino/Facades/SM_CasinoFacade_{Slipgate,Deflector,HollyJos,GridCity,Antipode} (native sizes 98x93x41, 98x84x62, 98x98x52, 96x92x84, 98x96x68; roofs at 5200 wide: 2194 / 3265 / 2733 / 4539 / 3611 uu, the manta 1895). Each casino is SOLID (blocker r 2300 covers the body; roofs stand above PlayHeight 1400) with a landing pad at its door on the road's edge (gold and lit for the open manta, dim grey for the five COMING SOON). Photographs Docs/casino-look/district_p3b_{spawn,manta,far}.png. RULED CHANGE 2026-09-13 00:45Z: "So this looks almost perfect. The only thing I would say is that the landing strip on some of the buildings is too close to the building so it kind of covers it ... maybe you need just a little bit more room and you should be good." Cause: pads, outlines and blockers were sized from the ASSUMED footprint (0.8 x frontage deep) while HOLLY JO'S and THE ANTIPODE CLUB are near-square scans (5200 deep), so their faces stood 520 past the assumed line and over the pad. Third pass BUILT + photographed (Docs/casino-look/district_p3c_{spawn,holly}.png): lots at Y +/-6600, and every lot's pad, outline and blocker read from the building's REAL placed bounds -- footprints measured 5200 x 4363 (manta), 4941 x 5200, 4425 x 5200, 5182 x 5200, 4997 x 5200, 5085 x 5200; pads 180-598 uu clear of the kerb; blockers r 2332 /

fine, just make it anyway and we can just address the steam stuff and disclosures and what not when we deploy to steam") -- the Content Survey answer and the AI-disclosure revision are Phase 17 owner steps, as already planned; the d1-rating card itself still shows WAIT in the store from the slip and is superseded by d1-recheck. (The same sitting he also re-pressed D1 to WAIT with the old GO note still attached -- flagged to him; nothing in Phases 3-5 depends on it.) Still owed from his note: a second look at the low fill blocks with him (now a regular lattice, not scattered), and the skyline ring photographs pale under the 0.30x sun -- a lighting pass when the interior's look is set. Five facade concepts x two variants generated from the manta's prompt template (gpt_image_2_5, Docs/casino-look/concepts/), reviewed by me against the manta (same backdrop, light, gold windows, four lamps, carpet, emblem not lettering, roof carries the identity) and put on /game-decisions as cards f-slipgate-palace, f-deflector-room, f-holly-jos, f-grid-city-grand, f-antipode-club (group 6). His pick feeds Tripo H3.1 -> import_casino_look.py (to be generalised to a table) -> a photograph on its lot -> kept. NEITHER regenerates from his note. Started ahead of Phase 3 proper because the approval loop is the long lead item; the district code runs in parallel.

  1. APPROVED 2026-09-13 04:02Z ("Yup looks good"). PHASE 3 CLOSED. D1 recheck 04:04Z: GO stands ("I think we are

Phase 5 -- Interior (5 days + asset lead time)

STATUS: APPROVED 2026-09-13 ("So the room looks fine ... the room size is fine"), with three notes acted on in a 5b dressing pass (card p5b-dressing). His notes were: refine the slot machines, "chandeliers or lights from the ceiling", and "make it look like the casino carpet floor". Built: the carpet -- our own tiling pattern through the facades' route (Higgsfield -> T_CasinoCarpet -> M_DFK_CasinoCarpet, a Tiling vector parameter and a Brightness scalar, laid on a single plane and repeated every 1.6 m because a 1 m repeat moired down the room); six chandeliers, one over each aisle, each a dark rod and three neon tiers with six drops, carrying that aisle's coloured fill so the light has a visible source (tiers at 1.3 intensity: at 2.5 the nearest disc clipped to flat white and lost its colour); seven-part cabinets -- plinth, body, angled button deck, screen bezel, screen, name plate, neon cap -- because a plain box read as a filing cabinet. Photographs Docs/casino-look/interior_p5b_{aisle,corner}.png + carpet_tile.png. Interior stages now 34 ms / 19 ms, 101 interior actors. Cabinets, plinths, decks and pillars cast into the key's shadow map; nothing else does.

BUILT 2026-09-13 ~04:30Z. What exists: ADFKCasinoInterior (its own actor at ADFKGameState::CasinoInteriorX = 400,000, GS->CasinoInterior the one switch; two stages RAISING THE HALL 7 ms / SEATING THE MACHINES 12 ms appended to the district's three through one running CasinoBuildStep with the bar's slope 0.72 / Total); the shell (2600 x 3200 clear x 700 high, floor at Z 1200 above the fog's dense layer, a 320-wide doorway on -X) from the shared kit DFKCasinoBuild (SpawnMesh / NeonBox / NeonDisc / DarkBox / SpawnPointLight / SpawnSpotLight -- the district now calls the same kit); every interior mesh and light on lighting channel 1, which stops the dimmed level SUNS (channel 0) but not the sky light -- a skylight is not channel-gated in UE 5.8, so the strip's violet ambient is this room's base light by design and re-tuning it re-lights both (measured in the engine shaders 2026-09-13; the header and the district's skylight block both say so); one shadow-casting spot key (480 cd, warm, with the cabinets and pillars as its casters) + six unshadowed cyan/magenta fills (80 cd) hung at head height IN the aisles -- at ceiling height they lit the ceiling 60x harder than the floor -- + a gold emblem wash; neon trim (cyan floor line, gold ceiling line, split around the doorway), four pillars, the manta emblem disc; the floor, walls and pillars COLLIDE, so Phase 6's pilot has a room to walk in rather than a picture of one; 30 ADFKSlotMachine actors (cabinet 60 x 70 x 170, screen at 125, theme-coloured cap, UBoxComponent blocker, SeatPos 95 in front) in three double-sided banks at Y -1000/0/+1000, published as GS->CasinoMachines (FDFKSlotMachine). Camera: ADFKPlayerController::ApplyNeonPost() is now the ONE copy of the flyover's post block; dfk.CasinoTeleport 1|2 stands CasinoInteriorCam in the entrance aisle / far corner with two interior deltas (BloomThreshold 1.15, MotionBlur 0.10) and sets GS->bCasinoCamOwned, the yield the arena camera tick honours beside bKillcamActive (and UpdatePlanetCameraLate). Interior HUD block keyed on CasinoPhase == Interior (chip, casino name via GS->CasinoInsideLot, machine count). Breadcrumb gained cas= (CasinoPhase). Photos Docs/casino-look/interior_p5_{aisle,corner}.png. Measured lesson: a 1400 cd key under locked exposure turned the near-black cabinets tan; 480 is a presence, not a sun. No purchase (ruling A): the shell is primitives + our materials.

Phase 6 -- Pilot gameplay: walking (8 days)

Phase 7 -- Interaction (4 days)

Phase 8 -- NPC population (8 days + asset lead time)

Phase 9 -- Slot framework (6 days)

Phase 10 -- Eight slot types (8 days + asset lead time)

Phase 11 -- Danarren integration (3 days)

Phase 12 -- UI (5 days)

Phase 13 -- Audio / VFX (5 days)

Phase 14 -- Transitions / cinematics (4 days)

Phase 15 -- Optimisation (5 days)

Phase 16 -- Testing (4 days)

Phase 17 -- Polish (4 days)

Total honest effort: ~83 working days (5 + 5 + 4 + 5 + 8 + 4 + 8 + 6 + 8 + 3 + 5 + 5 + 4 + 5 + 4 + 4), plus asset lead time and your feel gates. Call it four months of patches, not a weekend.


8. SHOPPING LIST -- PHASE-GATED, LINKS, WHAT I VERIFY BEFORE YOU PAY

Nothing is bought before its phase. Every entry states the mechanic it serves and the asset type that mechanic needs (static vs skeletal-on-which-skeleton), because a pack that fails that test is a pack we own and cannot use. Before each purchase I check the listing for the five-rule spec (Docs\INVASION2-ART-STRATEGY.md:72-80): supported UE version reaches 5.x (5.8 import is then proven on the free pack), Mac listed, mobile listed (= no Nanite/Lumen dependency), "asset package" not "complete project", no VDB/Alembic. Prices are from listings read this session where stated; the listing is authoritative.

Route A (RULED 2026-09-12) -- our own pipeline for every casino piece; buy only what it cannot make

PhaseItemServesType neededLinkNotes
4, 5, 10facades, interior shell, signs, eight cabinetseverything the player sees of the casinostatic, made in-house (Higgsfield -> Tripo H3.1 -> glow-map import), photographed and approved per piece--$0 in assets; Higgsfield credits (standing authorisation)
5Casino Props Pack (optional)tables, chairs, bar, cage -- only if the in-house route is slower than a week for propsstatic PBRhttps://www.unrealengine.com/marketplace/en-US/product/casino-props-packcheck texture sizes (<= 2K); buy only if asked for
6, 8Sci-fi Trooper (Slayver; 3 characters x 3 skins, modular, rifle)pilot body + patronsskeletal on UE5 Manny ("100% compatible with UE5 Epic Skeleton (Manny) animation packs")https://www.fab.com/listings/0da771d2-b2a4-4ca5-8e9d-dddc48d26788VERIFIED 2026-09-13 in the listing: UE 5.0-5.5 (5.8 import to prove on arrival; refund if it fails), Windows + Mac + Android/iOS (= no Nanite/Lumen dependency), asset package, 12-16.5k verts, 26 materials, 67 textures at 2048. Its demo uses Animation Blueprints (tag) -- we drive the skeletal meshes from C++, the ABPs stay unused. $32.99 Personal / $69.99 Professional; Fab's Personal tier covers a company under $100k revenue in the trailing 12 months, which is Mayd It LLC. No rating yet.
6, 8Sci-fi Modular Military (Slayver) -- the VARIETY option he asked for ("more options for the sci-fi people", 2026-09-13)a whole crowd: 14 ready characters + 6 modular, 132 parts x 8-12 skinsUE5 Manny ("100% compatible with UE5 Epic Skeleton (Manny) animation packs")https://www.fab.com/listings/94b43bfc-4f89-4424-bb12-844d6e4c4642VERIFIED: UE 5.0-5.6, Windows + Mac + Android + iOS, asset package, rating 5.0 (4), updated 2025-08. $59.99 Personal / $149.99 Professional. Same maker and style family as the Trooper.
6, 8SciFi Character PILOT MALE PACK Vol.1 (DMD Hangar) -- the ON-THEME option3 modular spacesuit pilots (MK I-III); SUPER PACK adds 3 women at $189.99"standard Unreal Engine 5 skeleton"https://www.fab.com/listings/cb8e2caa-d356-4c8e-8950-a19e8093ffd1VERIFIED: UE 5.0-5.8, Mac listed, rating 5.0 (6), updated 2026-08. BUT: distribution = COMPLETE PROJECT (migrate the skeletal meshes/textures out of their demo project -- half a day) and textures up to 4K (downsize to 2K). Its demo needs Enhanced Input + Animation Warping plugins; we use none of that. $99.99 Personal / $399.99 Professional.
--~~Cyberpunk - Crowd Characters~~ (BigMediumSmall, $99.99)--POSED, NOT RIGGED, "not optimized for games"https://www.fab.com/listings/cc22cecb-212e-4e63-9156-d1b5e2771a02Rejected on the listing's own words.
--~~Sci-FI Troopers Collection~~ (ProMaxx, $59.99, 4.7/54) and ~~Sci-Fi Characters (Pack)~~ (Bugrimov, $62.99, 5.0/10)--skeleton not stated (2021-2023 packs: likely the UE4 mannequin)https://www.fab.com/listings/10933425-2373-49cc-9eab-1adf1c11e238 , https://www.fab.com/listings/2079cbeb-ec9f-425e-b5c9-feb92d96321cNot offered: a UE4 skeleton means an IK retarget of every bought animation. ProMaxx's free "Sci-FI Trooper Man v.3" (5.0/18) could test their skeleton at $0 if he likes the look.
8Sitting Animations Small Pack (RBStudio) -- RECOMMENDEDseated patrons: seated idles, eating, phone, reading, laptop, TV; one style each for Manny and QuinnUE5 Manny + Quinnhttps://www.fab.com/listings/ff255240-68e9-40fb-8346-cdb65353eaf9VERIFIED: UE 5.0-5.5, Windows + Mac, asset package, $16.99. Seated ONLY -- patrons do not sit down or stand up on camera; Phase 8's FSM fades them in and out of seats with the neon puff instead (the cheaper design).
8MC Seated Animation Pack (MoCap Central) -- the UPGRADEsit-down, stand-up, 250+ seated behaviours, rigged chairs with alignment markersUE5 Mannequinhttps://www.fab.com/listings/7c1ac5c5-9da0-4e47-b7a5-36ce1b55a21dVERIFIED: UE 5.0-5.8, Windows + Mac, asset package, rating 5.0 (5), updated 2026-06. $74.99 Personal / $219.99 Professional. Buy INSTEAD of the small pack only if patrons must visibly sit down and stand up.
8~~Idle Animation Pack (Misery Studio)~~ -- NOT recommendedstanding idles / fidgetsUE5 Manny/Quinn, 107 sequences, UE 5.0-5.7https://www.fab.com/listings/5682c883-b779-461c-87ec-a2ccd3b401ddRating 1.5 (2), published 2026-03. The free mannequin idle (Content/CastleofEternalMist Demo, shipped) covers standing NPCs; buy a variety pack later only if the floor looks stiff. $21.99-$31.99 if ever.

The two tables below are kept as the record of the routes he was offered. Route S is dead (Synty refused on look, nothing downloaded). Route F's exterior and interior rows are dead (ruling A); its Phase 8 rows moved into Route A above.

Route S (DEAD -- refused on look 2026-09-12) -- one vendor, Synty POLYGON

PhaseItemServesType neededLinkPrice seen
3POLYGON Starter Pack (FREE)the $0 look test in the districtstatichttps://syntystore.com/products/polygon-starter-packfree
4POLYGON Sci-Fi Cyber Citydistrict blocks, facades, street kit, 19 rigged charactersstatic kit + skeletal chars (Synty/UE4-compatible skeleton)https://syntystore.com/products/polygon-sci-fi-cyber-city$199.99 (UE listing shows 4.25-5.3; 5.8 import proven on the free pack first)
5POLYGON Casinointerior shell, ~860 props incl. slot cabinets, furniture, 18 charactersstatic + skeletal charshttps://syntystore.com/products/polygon-casino$149.99 (earlier research; confirm on listing)
8POLYGON City Characters (optional variety)crowd variety, 19 characters x coloursskeletal, no animations includedhttps://syntystore.com/products/polygon-city-characters-pack$29.99 (earlier research)
8MC Seated Animation Packseated play, sit-down, stand-upanimations on the UE5 Manny skeleton -> one editor retarget to the Synty skeletonhttps://www.fab.com/listings/7c1ac5c5-9da0-4e47-b7a5-36ce1b55a21dsee listing
8Idle Animation Pack (2026)standing idles for NPCs and the pilotUE5 Manny/Quinnhttps://www.fab.com/listings/5682c883-b779-461c-87ec-a2ccd3b401ddsee listing
8Sitting Animations Small Pack (cheaper alternative to MC Seated if patrons never stand up)seated decoration onlyManny + Quinnhttps://www.fab.com/listings/ff255240-68e9-40fb-8346-cdb65353eaf9see listing
10cabinets come from POLYGON Casino; symbol art via Higgsfield------$0 extra

Synty also sells a subscription from $30/month that unlocks the whole library; whether assets downloaded during a subscription may ship in a game after cancelling is a licence question I have not verified -- worth one read of their terms before buying two packs outright.

Route F (exterior/interior rows DEAD by ruling A; Phase 8 rows live in Route A) -- Fab stylised-realistic

PhaseItemServesType neededLinkNotes
4PizzaBuildings (owned, cooked)district blocksstatic--$0 but you rejected this skyline on the planet
4Cyberpunk Billboards / Signs Set (35)marquees, casino namesstatic + emissivehttps://www.fab.com/listings/144f3c4d-c130-4bb7-a461-a40eb46d55a1check SM5
4CyberPunk Neon Signs (10)signagestatic, animated emissivehttps://www.fab.com/listings/06e605fa-48de-44d2-8e81-28376218bd14listing says Lumen 5.4+ -- must render without Lumen; verify
4Neon City (Cyberpunk)districtstatichttps://www.fab.com/listings/ce3a6fb7-d28a-41e7-91f4-5270e1f5e478Nanite + Lumen -- fallback LODs only on our cook; likely reject
5Casino Props Packslot machines, tables, bar, cagestatic PBRhttps://www.unrealengine.com/marketplace/en-US/product/casino-props-packcheck texture sizes (<= 2K)
5Small casino - interior and propsshell + 3 slot machines + tablesstatichttps://unrealengine.com/marketplace/en-US/product/small-casino-interior-and-propssmall; interior only
8Sci-fi Trooper (modular, UE5 Manny)pilot body + patronsskeletal on UE5 Manny -- the MC Seated / Idle packs play with no retargethttps://www.fab.com/listings/0da771d2-b2a4-4ca5-8e9d-dddc48d26788realistic style
8Sci-fi characters pack (4, Epic skeleton)crowdskeletal, Epic skeletonhttps://www.fab.com/listings/7d6cd7be-6b75-48d0-9acf-fa41477f86f3check UE4 vs UE5 skeleton
8MC Seated / Idle packs as above--UE5 Mannyas aboveno retarget on Route F

Explicitly NOT recommended: any "Slot Machine Blueprint / Slot Machine Game" listing -- the logic is Blueprint and unusable here; we only ever buy meshes, textures and animations. Any pack whose hero shots depend on Lumen (our SM5/DX11 cook cannot reproduce them; DefaultEngine.ini:13-22).

New tooling: one engine module dependency (AnimGraphRuntime in Deflekt.Build.cs) for the animation driver. No new plugins, no installs, no services.


9. RISKS AND TRAPS


10. WHAT I WOULD CUT

In order of what it saves, without touching the loop you asked for (fly -> dive -> walk -> play -> win/lose -> return):

  1. Stand-up cabinets instead of seated play. Removes the seated animation pack, the retarget, the sit/stand transitions and the seat-position authoring. ~3 days and one purchase. Patrons stand at machines; the brief's "sit at" becomes "stand at".
  2. One pilot body, tinted, instead of nine. Already the v1 recommendation (D7). Saves weeks and a pipeline that does not exist.
  3. Neon silhouette crowd (one ISM, pure C++, ADFKFxSystem pattern) instead of skeletal patrons. Zero animation pipeline, one draw call, arguably more DEFLEKT than grey humans. Saves ~6 days and the largest perf risk. Silhouettes still walk (transforms) and "sit" (pose swap). I would hold this as the fallback if the Phase 8 handheld soak fails, not choose it up front.
  4. Four machine types with two skins each instead of eight. ~4 days of art and tuning. Personality comes from the paytable and sounds, which stay distinct.
  5. Sixteen machines instead of thirty. Cheaper floor, cheaper soak, the room still reads full with 24 patrons.
  6. 2D audio with a nearest-machine distance volume instead of the first spatialised audio in the codebase. ~2 days; the floor reads flatter.

Minimum worth shipping ("the kiosk"): Phases 2, 3, 4, 7, 9, 10 (four types), 11, 12 and a shortened 14 -- fly the district, press Y at a casino, the slot screen opens over the flyover, play, leave. No interior, no walking, no NPCs. ~35 days. The whole economy loop and the district are real; the interior becomes the next patch. Your spec is what ships unless you say otherwise; this is here because you asked for honest options.

If everything is too big, ship Phase 2 alone. It fixes a live title-row bug, unifies three copies of the modal dialog, gives the wallet an API, and changes nothing a player can see.


11. V2 BACKLOG


12. OWNER STEPS -- BRANDT

  1. ~~D1~~ RULED GO 2026-09-12. The Content Survey question moves to step 6, ship time.
  2. ~~D2-D9~~ ALL RULED 2026-09-12 (Section 2 table). One card is still open: the reserve floor -- re-asked in chat in plain words.
  3. Download the free Synty POLYGON Starter Pack (Unreal version) from https://syntystore.com/products/polygon-starter-pack and drop the zip in C:\Deflekt\_Incoming\ -- their store needs an account/checkout even at $0, which is yours to do. Phase 3 cannot start its look test without it. Then approve or refuse the photograph.
  4. Purchases -- per phase, from Section 8, after my listing check comes back clean.
  5. Feel gates -- Phase 6 walk camera, Phase 14 dive, Phase 17 reel rhythm. Your hands, not a bot.
  6. AI disclosure -- paste the revised paragraph (Phase 17 drafts it) into Steamworks; the current text (Steam\STEAM_LAUNCH_RUNBOOK.md:45-53) does not cover characters, slot art or district geometry.
  7. Upload and one real-Steam launch into CASINO with the overlay opened mid-load and mid-dive.

13. TERRAIN NOTES -- LIVE DEFECTS THE AUDIT FOUND (unrelated to the casino, fix in Phase 2)