Underground 2 Revived
Play Need for Speed: Underground 2 (2004) in Chrome and Firefox with WebGPU graphics, Web Audio, up to 120 fps widescreen, controller support, free roam and Online races with friends. Fan project, not
翻譯準備中
尚未偵測到更新。GitHub 發布版本後會顯示在這裡。
個人 GitHub 帳號下公開儲存庫的擁有者可以登入並驗證所有權,自行管理介紹,無需管理員核准。
登入並產生驗證檔案,在 30 分鐘內將其提交至此儲存庫的預設分支。其他分支或分叉儲存庫中的檔案無效。然後在下方檢查檔案,即可無需管理員核准直接管理專案。請保留檔案以維持管理權限。
如需登入,將前往登入頁面。登入後請回到此處,再次點擊所選的驗證按鈕。
在專案資料夾中執行 /nomorevibe verify,即可驗證所有權並自行管理介紹。
一分鐘完成驗證Node editor for Factorio production chains. An LP solver keeps every rate consistent as you edit; share the result as a URL.
翻譯準備中
取自儲存庫 README
正在載入完整 README。 以下為已儲存的摘錄。
A node editor for Factorio production chains. Nodes are recipe steps, edges are item
flows, and a linear-programming solver keeps every rate consistent as you edit. The
result is a ratio sheet you can read spatially and share as a URL.
Static site, no backend. Factorio 2.0 base + Space Age.
npm test covers everything that is a pure function. npm run smoke covers what
is not: port-to-port drags, the drop-on-empty-canvas search, click-to-select,
the clipboard, a real file download and re-import, auto-layout, switching
between saved plans, and the reduced-motion path. Both run in CI.檢視完整 README ↗A node editor for Factorio production chains. Nodes are recipe steps, edges are item flows, and a linear-programming solver keeps every rate consistent as you edit. The result is a ratio sheet you can read spatially and share as a URL.
Static site, no backend. Factorio 2.0 base + Space Age.
npm install
npm run dev # http://localhost:5173
npm run build # type-check and build to dist/
npm test # unit tests: solver, store, serializer, library, layout, data
npm run smoke # drives the built app in a real browser (needs `build` first)
npm run check # lint + test + build + smoke, what CI runs
npm run shot -- name # screenshot the built app into shots/
npm test covers everything that is a pure function. npm run smoke covers what
is not: port-to-port drags, the drop-on-empty-canvas search, click-to-select,
the clipboard, a real file download and re-import, auto-layout, switching
between saved plans, and the reduced-motion path. Both run in CI.
To poke at a specific graph, npx tsx scripts/make-fixture.ts <name> prints a
share hash you can paste after the # — green-circuits, unbalanced,
saturated-belt, over-belt, blocks, kovarex, tangle, beacons,
no-constraint.
Recipe data is vendored, not fetched at runtime. To move to a newer game version:
npm run data:fetch # download FactorioLab's raw data set into vendor/
npm run data:import # transform it into public/data/2x1.json + public/sprites/2x1.webp
vendor/ is gitignored; the committed artefacts are the two scripts and their output.
The importer validates its own output against src/data/schema.ts and fails loudly if a
recipe references a machine or item that is not in the set.
The build is a static site. base comes from the BASE_PATH environment variable, so a
GitHub Pages project site works with BASE_PATH=/factory-graph/ npm run build.
.github/workflows/deploy.yml does exactly that on a push to main.
npm run check:base serves that build from a sub-path and asserts the app boots, the
fonts and sprite sheet load, and nothing 404s — the failure it exists to catch is an
asset referenced from the site root, which works locally at / and breaks the moment
the site lives at /<repo>/. CHECK_BASE_PATH=/factory-graph/staging points it at a
staging build.
The staging branch is a preview of the next release, at
basta.github.io/factory-graph/staging.
Push to staging to update it; merge into main to ship it.
Pages holds one artifact for the whole site, so every deploy builds both branches —
main at the root, staging under /staging/. A push to staging runs the checks and
then asks main to redeploy, because the Pages environment takes deploys from the default
branch only.
Staging shares an origin, and so localStorage, with the live site. It is built with
VITE_CHANNEL=staging, which gives it its own storage keys: on first visit it starts
from a copy of the live site's plans, and nothing it saves ever reaches them. The header
and the tab title both say Staging.
src/
data/ GameData types, zod schema, loader, sprite lookup
solver/ rates.ts (formulas), lp.ts (LP build), index.ts (solve), tests
graph/ zustand store, history, serializer, url, saved-plan library
canvas/ React Flow setup and custom nodes, edges, handles, grid
ui/ Header, Inspector, Search, Toast, ShortcutsOverlay
tokens.css
scripts/ data fetch, data import, screenshots
public/ data/, sprites/, fonts/
DESIGN.md is the visual brief. NOTES.md is the running log of what each screenshot
showed and what changed because of it.
The application code is MIT licensed — see LICENSE.
Recipe data and the icon sprite sheet under public/ are derived from
FactorioLab, which is MIT licensed.
The icons themselves are game assets belonging to
Wube Software; they are used here the way every community
calculator uses them, and are not covered by this project's licence. Factorio is
a trademark of Wube Software. This project is not affiliated with Wube or with
FactorioLab.