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,即可驗證所有權並自行管理介紹。
一分鐘完成驗證Jeu de rôle sur table original et ses outils : moteur de combat TypeScript (planificateurs ou agents llm, tests Jest) et site de règles Next.js 16 / React 19.
翻譯準備中
取自儲存庫 README
正在載入完整 README。 以下為已儲存的摘錄。
Jeu de rôle sur table original, dans le monde d'Aeonir. Quadrature est un JdR maison construit autour d'un système de dés singulier (quatre dés numérotés 0–5, score final 0–20) et d'un univers à forte identité : une planète quasi-verrouillée à son étoile, dont le terminateur — la frontière jour/nuit — dérive lentement, façonnant quatre peuples. Ce dépôt regroupe à la fois les règles, le site de lecture, un simulateur de combat et les outils de worldbuilding. 🚧 En développement actif. Voir l'état du projet.檢視完整 README ↗
Jeu de rôle sur table original, dans le monde d'Aeonir.
Quadrature est un JdR maison construit autour d'un système de dés singulier (quatre dés numérotés 0–5, score final 0–20) et d'un univers à forte identité : une planète quasi-verrouillée à son étoile, dont le terminateur — la frontière jour/nuit — dérive lentement, façonnant quatre peuples. Ce dépôt regroupe à la fois les règles, le site de lecture, un simulateur de combat et les outils de worldbuilding.
🚧 En développement actif. Voir l'état du projet.
Ce dépôt mêle trois natures d'œuvre, qui n'appellent pas la même licence. La règle qui les départage est simple : la licence suit la provenance, pas l'emplacement du fichier.
| Ce qui est couvert | Où | Licence |
|---|---|---|
| Code — site, moteur de combat, outils | web/, simulator/, tools/, geo/ | MIT |
| Contenu du jeu — règles, univers, données | rules/, data/ | CC BY-NC-SA 4.0 |
| Illustrations générées par IA | registre data/illustrations.yaml | CC0 1.0 |
Les fichiers situés hors de ces répertoires suivent la nature de leur contenu,
pas leur emplacement : le contenu de jeu sous web/public/ relève de la licence
du contenu, bien qu'il vive dans un dossier de code. Pour les images, c'est le
registre qui fait foi, image par image — ni le dossier ni l'extension.
Concrètement : réutilisez le code comme bon vous semble, y compris commercialement. Les illustrations générées sont dans le domaine public, sans condition ni attribution exigée — l'auteur ne revendique rien de ce qu'un modèle a produit. Pour le contenu du jeu, vous pouvez le partager et l'adapter — scénarios, aides de jeu, extensions — à condition de citer la source, de ne pas en faire un usage commercial et de partager vos adaptations sous la même licence. Jouer, en parler ou en diffuser des extraits dans le cadre d'une partie ou d'une critique n'a jamais demandé d'autorisation. Pour un usage commercial : [email protected].
Le raisonnement qui mène à ces trois régimes — et ce que l'IA fait, ou ne fait pas, dans la fabrication du jeu — est dans la charte d'usage de l'IA.
| Dossier | Rôle | Stack |
|---|---|---|
rules/ | Vault Obsidian — source de vérité des règles et de l'univers | Markdown / Obsidian |
web/ | Site de lecture (livre paginé + PDF), cartes d'action, feuille de personnage | Next.js 16 · React 19 · Tailwind v4 |
simulator/ | Moteur de combat avec agents (scriptés et LLM) | TypeScript · Jest |
tools/ | Calculateur astronomique + cladogramme du bestiaire | Python · Node |
1 meilleur 🟦 + 2 meilleurs 🟨 + 1 aléa, soit 0 à 20.Détail complet : ouvrir le vault rules/ (entrée fr/_index.md)
ou lire le site (web/).
Planète quasi-verrouillée (rotation ≈ période orbitale) : le Soleil se déplace
très lentement dans le ciel, et le terminateur mobile traverse les terres au fil
des siècles. Quatre peuples (Cimes, Neiges, Pluies, Vents) s'y sont adaptés. La
physique du monde n'est pas qu'évoquée : elle est calculée par tools/astronomy.py
(quasi-verrouillage, lune-horloge, saisons polaires asymétriques, gravité 0,75 g…).
Aeonir possède aussi une langue rituelle ancienne (rules/fr/univers/language.md) :
une phonologie à deux registres — voix de pierre (minérale, gutturale) et voix de sève
(vivante, chantante) — où l'inversion sonore encode les antonymes (un contre-sort renverse
l'incantation). Elle outille la génération de noms propres, toponymes, créatures et incantations,
et nomme les quatre peuples : Syldor (Cimes), Vaedor (Vents), Lumidor (Pluies), Sahgdor (Neiges).
Dépôt unique (monorepo) à la racine. Chaque sous-projet reste autonome mais partage le même historique git.
Quadrature/
├── rules/ # Vault Obsidian (core/, disciplines/, univers/, cartes/…) — SOURCE DE VÉRITÉ des règles
│ └── fr/ # entrée : _index.md
├── data/ # Données structurées — SOURCE DE VÉRITÉ des données de jeu
│ # actions, traits, gardes, équipement, disciplines,
│ # cladogramme, mutations, bestiaire — lues par web/, simulator/ & tools/
├── web/ # Site Next.js (lit rules/fr/ + data/ au build)
├── simulator/ # Moteur de combat TypeScript
├── tools/ # astronomy.py · cladogram.ts · consolidate-bestiary.ts
├── images/ # Illustrations et concept art
├── CHARTE-IA.md # Usage de l'IA dans le projet — et licence des images générées
├── README.md · Roadmap.md · CHANGELOG.md
└── rapport_avancement_*.md # revues d'avancement ponctuelles
La source de vérité des règles est
rules/fr/. Les exports legacy à la racine (Quadrature_latest.md…) sont conservés hors versionnement et ne font plus foi.
Prérequis : Node 20+ (web, simulator, tools/cladogram.ts), Python 3 (tools/astronomy.py), Obsidian (rules).
rules/)Ouvrir le dossier rules/ comme vault Obsidian ; commencer par
fr/_index.md. Aucune installation.
web/)cd web
npm install
npm run dev # serveur de dev sur http://localhost:3000
npm run build # build serveur (.next/) ; servir via `npm run start`
npm run generate-pdf # génère le PDF du livre (Puppeteer + pdf-lib)
Rubriques notables : /fr (accueil), /fr/volumen/<livre> (lecture paginée),
/fr/cartes (cartes d'action imprimables), /fr/traits (traits de compétence),
/fr/equipement (catalogue d'objets), /fr/adversaires (fiches de bestiaire),
/fr/evolution (cladogramme), /fr/personnage (feuille de personnage interactive :
édition, sauvegarde locale multi-personnages, export/import JSON, impression PDF).
Les rubriques /fr/traits et /fr/equipement lisent data/*.yaml — la même
source que le simulateur — et affichent donc l'état réel du branchement
moteur, trous compris : une mécanique décrite dans les règles mais que le moteur
n'applique pas encore y est signalée comme telle.
Toutes les rubriques partagent le même chrome (components/TopBar.tsx puis
components/ToolBar.tsx) : la TopBar dit où l'on est — identité, rubrique,
retour à l'accueil, langue — et la ToolBar ce qu'on peut y faire — filtrer,
rechercher, zoomer. Une barre d'outils ne porte donc ni titre de page ni lien de
retour, et le sélecteur de langue est toujours le dernier élément de la TopBar.
Chaque rubrique suit le même gabarit de mise en page : hauteur figée, barres
fixes, un seul bloc défilant en dessous.
/fr/encounters est un outil local de mise au point : il rejoue un rapport du
simulateur manche par manche (plateau et trajectoires, log par bandes façon
chat, dés et effets, vitaux physique/mental). Les rapports vivant dans
simulator/combatReports/ (non versionné), la rubrique reste vide sur un build
déployé et n'apparaît pas dans la navigation publique.
simulator/)cd simulator
npm install
npx jest --no-coverage # suite de tests
npx ts-node src/simulate.ts encounters/duel-arme.yaml 400 --quiet
npx ts-node src/simulate.ts encounters/approche-faucheur.yaml # 1 run AVEC plateau (approche + charge)
npx ts-node src/simulate.ts encounters/tir-vs-faucheur.yaml 100 --quiet # tirailleur qui kite (recul + tir)
npx ts-node src/optimize.ts # équilibrage (grid search)
Un run unique écrit un rapport rejouable dans combatReports/ (rejouable dans
/fr/combat) ; un run multiple (… 400) écrit un rapport agrégé *.batch.json
réservé aux statistiques. Une rencontre peut déclarer un board et des pos
de départ : le combat se joue alors sur une grille (déplacements, portées,
attaques à distance). Les agents scriptés décident par espérance d'utilité
(actions, garde, positionnement — approche, kiting, tenir).
Les agents pilotés par LLM utilisent l'API Mistral — renseigner MISTRAL_API_KEY
dans un .env (cf. .env.example). Les agents scriptés n'en ont pas besoin.
tools/)Astronomie — modèle physique d'Aeonir :
python tools/astronomy.py # régénère tools/aeonir_astronomy.md
Cladogramme du bestiaire — data/cladogram.yaml (l'arbre) et
data/mutations.yaml (les mutations : label, description, kit de combat)
sont la source de vérité de l'arbre phylogénétique de la faune d'Aeonir (clades, mutations,
biomes, statut). On les édite via l'utilitaire tools/cladogram.ts plutôt qu'à la main : il
préserve le style de l'arbre et valide après chaque opération.
# nécessite js-yaml — lancer `npm install` dans web/ au préalable
node tools/cladogram.ts validate # contrôle (clés inconnues, mutations non placées)
node tools/cladogram.ts print # arbre indenté + label de chaque mutation
node tools/cladogram.ts node-mut "Faucheurs" sickleClaws # pose une mutation (référencée par CLÉ)
node tools/cladogram.ts node-status "Faucheurs" done # marque une espèce comme peuplée
node tools/cladogram.ts mut-add maCle "Label fr" "Description fr"
# autres : node-cd · node-ref · node-rename · node-clear-mut · mut-relabel · mut-describe
Les mutations (data/mutations.yaml) forment un dictionnaire clé → { label, description, kit? }
(chaînes Locale) ; les nœuds de l'arbre y réfèrent par clé (champ mut) et chacun porte un
uid stable. Le kit décrit la brique de fiche d'adversaire conférée par la mutation
(cf. rules/fr/adversaires/). La numérotation d'affichage est calculée côté front. Une
insertion de nœud (qui ré-indente le sous-arbre) se fait en important la lib
(import { loadRaw, save, findAny } from "./cladogram.ts") dans un petit script ponctuel.
Bestiaire d'adversaires — data/bestiary/ relie le cladogramme aux fiches de monstres :
les sources species/<id>.yaml (stats propres + from: = uid d'une espèce du cladogramme) sont
consolidées en fiches cards/<id>.card.yaml par tools/consolidate-bestiary.ts.
Chaque mutation de l'ascendance apporte sa brique (kit : parties du corps, cartes, traits ;
Speed/Fatigue dérivés) → ce que la créature EST découle de ses mutations. Les fiches (anglais + Locale)
alimentent la rubrique web /adversaires.
node tools/consolidate-bestiary.ts # régénère data/bestiary/cards/*.card.yaml
Système jouable et chaîne de publication fonctionnelle ; le projet a dépassé le prototype. Chantiers en cours côté cohérence des règles, resynchronisation du lore et complétion des disciplines.
rapport_avancement_2026-06-10.mdRoadmap.mdCHANGELOG.md{ fr: … }).feat:, fix:, chore:, refactor:…).rules/fr/ (pas les exports legacy de la racine).Œuvre originale d'Ewen Maréchal, sous double licence : code en MIT, contenu du jeu en CC BY-NC-SA 4.0. Détail en tête de ce fichier : Licence.