Demoscene Simulator v0.1.0 — initial release
Demoscene Simulator v0.1.0 — initial release
Above: SVG mockup of the in-game CRT demo screen (raster bars, vector cube, sine-scroller, HUD) — a stand-in for v0.1.0. v0.2.0 will replace this with a real PNG screenshot + a 30-second animated GIF of the demo screen playing.
What's shipped in v0.1.0
The initial public release of the Demoscene Simulator — a 1985–2005 life-sim of the demoscene built on a deterministic event-sourced kernel. You pick a crew name, hustle hardware and freelance gigs, ship demos at era-appropriate parties, and watch the scene evolve from C64 cracktros in disk-swapping gymnasiums all the way through the early-2000s 3D-shader revolution.
Highlights
- Three-layer architecture (
/sim,/apps,/packages) — strict rules forbid React/fetch/setStateinside/simand forbid re-declared sim-facing types outside@packages/types. - Event-sourced kernel — discriminated
SimEventunion (now 30 variants), purereduce(state, event) → state, deterministicSimulationLoopwith a StrictMode-safe reset pattern, append-onlyeventStorewithon(type | "*")subscribe. - Deterministic event-sourced economy system — money / hardware / software / freelance jobs / sponsors, with trust-weighted NPC payouts (an NPC
cognitive.trustGraph["__player__"]modulatestemplate.basePaymentbetween 0.85× and 1.35×) and wear-level decay recomputed deterministically in the projection (1 quarter-year per reliability point). Driven by the M1 double-store money-flow pattern — pairedMoneySpent+HardwarePurchaseddispatches instead of a single composed event. MainMenu+ApiKeyBootstrap— splash overlay (New Game / Continue / Load-from-file) plus first-run Gemini API key entry.- Electron + electron-builder — packaged as NSIS installer + portable Windows x64 with auto-update
latest.yml.
New
@packages/types+@packages/utilsshared packages — single source of truth forCharacter,Production,PlatformId,BBSThread, etc.; pure helpers (generateId,simTimestamp,advanceMonths,MONTH_NAMES).- Typed seed data under
sim/data/—HISTORICAL_PLATFORMS,DEMO_EFFECTS,TECHNOLOGY_TREE,INITIAL_NPCS,INITIAL_GROUPS,PARTY_CALENDAR,RIVAL_RELEASES. - Path aliases in lock-step between
tsconfig.jsonandvite.config.ts—@packages/types,@packages/utils,@sim,@sim/data,@sim/events,@sim/engine,@tools,@apps/*. - Economy catalogs: 23 hardware SKUs (C64-era 8-bit through 2005 GeForce 256 / Radeon DDR shader parts), 12 freelance job templates (1985–2005), 12 software offerings (assemblers, trackers, image editors, compressors), 5 late-game sponsor deals keyed off reputation milestones.
- Smoke tests —
dispatchStampedEvent(locks the "neverdispatch(emit.*)/dispatch(appendEvent)" rule),audit-docs(doc-vs-exports parity),loadDuringImport(autosave re-hydration under reload). - Dynamic crew-name propagation in
src/App.tsx— mount-timeuseEffectrewrites BBS reply / recruit / release-flow / party-memory / alliance-message / cognitive-stats UI to use the player's typed crew name. No more"Tricycle Crews"bake when you pick a custom name. - Expanded 1985–2005 demoparty calendar — 13 era-appropriate venues across four eras (crack/C64, Amiga-dominant, 16-bit-peak + early-3D-card, 3D-shader revolution).
<FullscreenDemoView/>(src/components/DemoScreen.tsx) — portal-rendered native-res effects playback. ESC /F/ Exit-button close. NewpaintDemoFramemodule-level helper keeps the inline card and the fullscreen view visually identical without sharing animation state across portals.<EconomyPanel/>(src/components/EconomyPanel.tsx, 705 lines) — live economy UI subscribed toeventStore.on("*")and re-derived each tick purely through theeconomicsViewprojection (noWorldStatemutation, nodispatchfrom inside projections). Renders balance / net-worth / hardware inventory with wear-level decay / freelance job board filtered by year + reputation / available sponsorships / recent ledger entries, and exposes player actions: buy hardware, buy software, take job, sign sponsorship.
Changed
- Party-rivals logic in
App.tsx— typedRIVAL_RELEASESfilter (year / disbanded / focus-band predicates) replaces the inline 4-rival hardcoded array. <DemoScreen/>— inline CRT now delegates every effect (raster bars, starfield, plasma, pixel fire, vector cube / pyramid, tunnel, sine scroller, HUD) to the sharedpaintDemoFramepainter so the inline + fullscreen surfaces stay visually identical without sharing animation state.
Fixed
- BBS reply / recruit, release flow, party memories, alliance messages, cognitive stats UI no longer hardcode
"Tricycle Crews"when a custom crew name is picked. sim/engine/reducer.ts::emptyWorldState.groupNamehardcode flagged with aTODO(dynamic-name)for the eventual event-sourced hydrate path (current UI bypasses this through MainMenu'ssetPlayerGroupName).- EconomyPanel post-launch nit cleanup:
- Force-render setter renamed
setTick→_tick(underscore-prefixed, comment block explains the non-standard role). - Recent-ledger rows now render sim-month labels (
Y1985 M11-style) via a module-levelledgerMonthLabel(ts)helper. Helper math uses((ts - 1) % 12) + 1so theDecember → Januaryboundary does not inflate the displayed year. - SOFTWARE_CATALOG empty-state now distinguishes "catalog itself empty (data missing)" from "filtered to empty for the current year" — the player sees an actionable CTA.
- Force-render setter renamed
Removed
- Stale
"tricycle"sentinel keyword fromsrc/App.tsx::handlePostCustomBbsMessagerecruitKeywords— recruit detection is now purely intent-based. src/data.tsandsrc/types.ts— merged into@sim/dataand@packages/types.
Download options
| File | What it is |
|---|---|
Demoscene Simulator Setup 0.1.0.exe |
NSIS installer (recommended — writes Start Menu + Programs & Features entry). |
Demoscene Simulator-Portable-0.1.0.exe |
Portable — no install, run from any folder. |
Demoscene Simulator Setup 0.1.0.exe.blockmap |
Auto-update blockmap (delta-update metadata for electron-updater). |
latest.yml |
Auto-update channel manifest (consumed by electron-updater). |
preview.svg |
This SVG mockup of the in-game CRT demo screen. Removed in v0.2.0 in favor of a real PNG + GIF. |
Both Windows binaries are signed by electron-builder's default signing identity (no code-signing cert configured). Auto-update will work for users running from the NSIS install path.
*README / GDD / triage: https://github.com/TimoP80/Scene_SImulator · Issues / v0.2.0 planning: https://github.com/TimoP80/Scene_SImulator/issues