BeamNG.Earth
A 1:1 scale streamed Earth for BeamNG.drive: real elevation and satellite imagery, floating origin, LOD streaming from a companion server
翻译准备中
尚未检测到更新。GitHub 发布版本后会显示在这里。
个人 GitHub 账号下公开仓库的所有者可以登录并验证所有权,自行管理介绍,无需管理员批准。
登录并生成验证文件,在 30 分钟内将其提交到此仓库的默认分支。其他分支或分叉仓库中的文件无效。然后在下方检查文件,即可无需管理员批准直接管理项目。请保留文件以维持管理权限。
如需登录,将前往登录页面。登录后请回到此处,再次点击所选的验证按钮。
在项目文件夹中运行 /nomorevibe verify,即可验证所有权并自行管理介绍。
一分钟完成验证在浏览器中进行足球职业模拟:在 2D 球场上决定关键时刻,从半职业试训到金球奖打造职业生涯,留下传奇。免费,离线可用,程序化 SVG 艺术。
AI 翻译
A football career simulator in your browser: decide the key moments on a 2D pitch, build a career from a semi-pro trial to the Golden Ball, and leave a legacy. Free, offline-ready, procedural SVG art.
取自仓库 README
正在加载完整 README。 以下为已保存的摘录。
A football career, made your own.
Create a teenage footballer, earn a trial at a semi-professional club and take them all the way to the Golden Ball — then retire into the Hall of Fame and carry on as their child. Free in your browser, and playable offline.
Matches play out on a 2D pitch and stop for your decisions. Every choice shows its chance of success and the attributes, traits and fatigue behind it, and every outcome is explained, so the game teaches its own systems.查看完整 README ↗A football career, made your own.
Create a teenage footballer, earn a trial at a semi-professional club and take them all the way to the Golden Ball — then retire into the Hall of Fame and carry on as their child. Free in your browser, and playable offline.
Matches play out on a 2D pitch and stop for your decisions. Every choice shows its chance of success and the attributes, traits and fatigue behind it, and every outcome is explained, so the game teaches its own systems.
The hub puts the next action first. Needs you lists what is waiting, most urgent first: an injury that needs a recovery plan, your match, transfer talks, press questions and sponsor offers before they lapse, then unspent points. Before you continue, the hub says which weeks will be played, where it will stop and which deadlines would pass on the way; afterwards, a short summary reports what actually happened while the world played on. The calendar lays out the whole season week by week, and nothing ever predicts a result or a team selection in advance.
Six real countries — England, France, Spain, Germany, Italy and Portugal — with their real league pyramids: 52 league groups, 959 clubs and 21,098 players, every regional group and promotion or relegation playoff in the first four tiers, and deeper tiers where a semi-professional start needs them. Clubs and competitions are fictional parodies of their real counterparts, in real towns. Every club has its own procedural crest and three kits, every player a face that ages with them, and the whole world simulates every week in a Web Worker: results, transfers, manager sackings, retirements and youth intakes. See national rules and sources.
?); screen-reader labels; text size from 85% to 130%; reduced motion; a simulation-only mode; colour-blind-safe kit choice.flowchart LR
subgraph Browser
UI["React UI<br/>routes, screens, tutorial"]
Store["Zustand store"]
Pixi["PixiJS pitch<br/>(lazy)"]
Audio["Howler.js + synthesiser<br/>(after first gesture)"]
end
subgraph Workers["Web Workers"]
World["World worker<br/>weekly and season simulation"]
Saves["Persistence worker<br/>validation and IndexedDB writes"]
Synth["Audio worker<br/>renders sounds"]
end
Engine[("Pure TypeScript engine<br/>seeded RNG · no browser APIs")]
DB[("IndexedDB<br/>3 save slots")]
UI <--> Store
UI --> Pixi
UI --> Audio
Audio --> Synth
Store <--> World
Store <--> Saves
World --> Engine
Saves --> DB
UI -. "match engine, career actions" .-> Engine
src/engine/: plain, deterministic TypeScript with a seedable RNG and no browser globals or imports (enforced by lint). The same code runs in the UI, in Web Workers and in Node tests, so any career or match replays exactly from its seed.The match engine simulates 10,000 matches in its test suite and checks realistic averages: 2.74 goals per match, a clear home advantage, and upsets that become rarer as the reputation gap grows.
pie showData title Results over 10,000 simulated matches (%)
"Home win" : 44.3
"Draw" : 25.2
"Away win" : 30.5
xychart-beta
title "Lighthouse mobile performance (slow 4G, 4x CPU throttling)"
x-axis ["Title", "Gallery", "Settings", "Moment", "Saves", "World", "Edit", "Wizard", "Career", "Match"]
y-axis "Score" 0 --> 100
bar [95, 94, 94, 95, 95, 93, 92, 91, 88, 86]
| Measure | Result |
|---|---|
| Startup JavaScript | 80 KB gzipped (was 173 KB) |
| Largest route, including the shell | 187 KB gzipped (budget 300 KB) |
| Title page, mid-range phone on slow 4G | interactive in 2.8 s |
| Desktop Lighthouse | performance 100, accessibility 100 |
flowchart LR
Push["Push to main"] --> Build["build (Linux)<br/>typecheck · build · bundle budget"]
Push --> Checks["checks (Linux)<br/>Prettier · ESLint · release notes · one-season soak"]
Push --> Unit["unit tests<br/>(3 Linux machines)"]
Build --> C["Chromium journeys<br/>(2 Windows machines)"]
Build --> F["Firefox journeys<br/>(2 Windows machines)"]
Build --> W["WebKit journeys<br/>(2 Windows machines)"]
Checks --> Deploy["Deploy to<br/>Cloudflare Pages"]
Unit --> Deploy
C --> Deploy
F --> Deploy
W --> Deploy
Every push to main is formatted, linted, unit-tested, type-checked, played for a full simulated season and built, then played through in Chromium, Firefox and WebKit under the production security headers, with an update from one deployed build to the next, before it deploys. Pull requests run the same checks without deploying. Scheduled workflows go further: a nightly five-season soak replayed twice for identical results, a weekly two-generation career, and weekly performance checks on real late-career saves on desktop and throttled phone profiles. Both GitHub Actions and Cloudflare Pages are free for this public repository. See deploying.
| Area | Choice |
|---|---|
| Language and UI | TypeScript (strict), React 18, React Router |
| State | Zustand slices over a framework-free engine |
| Rendering | PixiJS for the pitch, procedural SVG for crests, kits and faces |
| Styling and motion | Tailwind CSS with shared design tokens, Framer Motion |
| Storage | IndexedDB via Dexie, versioned schema and migrations |
| Audio | Howler.js playing sounds synthesised in a Web Worker |
| Testing | Vitest for the engine, Playwright in Chromium, Firefox and WebKit, axe-core |
| Delivery | Vite, PWA with offline precache and update prompt, GitHub Actions, Cloudflare Pages |
Node.js 22.19 or newer (Node 24 recommended):
npm ci
npm run dev # http://127.0.0.1:5173
npm run typecheck
npm run lint
npm test # Vitest: engine, persistence, workers, audio
npm run build # typecheck, production build, per-route bundle budget
npx playwright install chromium firefox webkit
npm run test:e2e # browser journeys under the production headers
npm run audit # Lighthouse quality targets
npm run soak -- --seasons 1 # play a whole career season and check its invariants
Analytics is off unless the build has a PostHog project key: set VITE_POSTHOG_KEY (and optionally VITE_POSTHOG_HOST and VITE_ANALYTICS_ENV) in .env.local, never committed. Automated browsers never send events. npm run analytics:dashboards creates the PostHog dashboards from docs/ANALYTICS.md with a personal API key; run it locally only.
On Windows PowerShell with blocked script shims, use npm.cmd and npx.cmd. Browser tests start a production preview on port 4173; Lighthouse uses 4180. After changing public/share.svg or the icons, run npm run raster to regenerate their PNG copies.
src/
engine/ pure, deterministic simulation: world, match, career, assets
workers/ world simulation and persistence workers
persistence/ save schema, validation, migrations, repositories (loaded on demand)
audio/ synthesiser, rendering worker, Howler player
store/ Zustand slices
screens/ one lazy route per screen
ui/ shell, tutorial, tooltip and shared components
i18n/ every string, English first
platform/ web adapter for files, sharing, storage and more
analytics/ consent, the event allow-list and a small idle-loaded PostHog client
tests/ Vitest suites
e2e/ Playwright journeys and the accessibility sweep
docs/ architecture, decisions, balancing, verification, deployment
public/ icons, share card, production headers
After the web release, a high-value improvements plan comes first:
Architecture · Decisions · Balancing · Match balancing · National rules and sources · Verification · Deploying · Releasing and patch notes · Changelog · Asset provenance · Implementation handoff
Milestone write-ups: match · career player · contracts and transfers · relationships and media · fame and lifestyle · honours and legacy · edit mode, accessibility, tutorial and audio · web release
All artwork is original procedural SVG made in this repository; every sound is synthesised in code. Fonts are self-hosted: Inter and Bebas Neue, both under the SIL Open Font License. Audio playback uses Howler.js (MIT). Details in ASSETS.md.