Skip to content
RemiPellouxPublic

About

A simple text RPG

Resources

Contributing

Stars

0 stars

Watchers

1 watching

Forks

Repository files navigation

TextRPG — Le monde est mystérieux. Le monde est dangereux. Tu as une épée.

CI Version 1.2.0 Next.js 16 PWA installable Tests Français et anglais

Un RPG de dark fantasy qui se joue au texte, dans le navigateur ou installé sur ton téléphone.
Chasse, loot à la Diablo, donjons, quêtes et classes, en sessions courtes rythmées par l'énergie.

Jouer en local · Le jeu · Direction artistique · Sous le capot · Documentation

✦ En mouvement

L'écran titre animé : étoiles, lune, brume, puis la création du héros et l'arrivée au camp
L'arrivée. La lune respire, la brume dérive, la cape flotte. Un nom, et te voilà au camp.
Un combat contre un orc sous la lune de sang, jusqu'à la victoire et au butin
Le combat. La chronique raconte chaque coup, les dégâts s'envolent, le butin tombe.

Écran titre Le camp et son feu Combat sous la lune de sang

Le camp sur ordinateur, avec la navigation, la scène illustrée et la chronique

⚔ Le jeu

Combat Tour par tour : initiative par la vitesse, critiques liés à la chance, esquive, garde, coups télégraphés des boss, effets d'état (poison, brûlure, saignement, étourdissement…), mode automatique. Une chronique raconte chaque coup.
Loot à la Diablo Raretés Commun → Magique → Rare → Légendaire → Set → Ancestral, 30 affixes à 5 paliers, objets non identifiés, protection contre la malchance, probabilités affichées.
Objets infinis Chaque objet est unique : matière, qualité, numéro de série, provenance (« Arraché à Grakthor l'Orc »), 17 pouvoirs générés, légendaires procéduraux avec nom et légende, en plus de 13 légendaires et 4 sets faits main.
Sceaux et Cube 9 sceaux (sets procéduraux) dont les bonus démarrent à 2 pièces dès le niveau 1. Le Cube : transmuter, enchanter (1 parmi 3), infuser un sceau, reforger, extraire le pouvoir d'un légendaire.
Progression Niveaux 1 → 20, 3 classes au niveau 5 (Guerrier, Rôdeur, Occultiste), compétences, talents, puis Parangon à l'infini et 10 Tourments.
Monde Le Camp et son feu (repos quotidien, flamme de série), 4 difficultés de chasse dont l'Enfer, la lune de sang du samedi, le boss de la semaine, les Profondeurs (étages, portes, événements, gardiens, butin perdu si tu meurs).
Quêtes L'Acte I en 10 chapitres jusqu'au Roi Creux, un tableau d'annonces, 3 quêtes du jour.
Économie Marché renouvelé chaque jour, forge (+10, relance d'affixe, recyclage), alchimiste, pêche, bâtiments du camp.
Social Défi quotidien (mêmes ennemis pour tous), classements, succès, codex.
Plateforme PWA installable, mobile → desktop, consultation hors ligne, notifications opt-in, FR/EN, son synthétisé, accessibilité (mouvement réduit, contraste élevé, taille du texte).
Fiabilité Le serveur décide de tout (énergie, loot, combats) : pas de triche en changeant l'heure. Sauvegarde versionnée, verrou optimiste, équilibrage vérifié par des bots qui jouent des semaines.

☾ Direction artistique — Nuit dorée

Un royaume la nuit, éclairé par l'or et le feu. Il fait sombre, ça brille là où c'est précieux, et chaque écran est une scène.

Les Profondeurs sous une lune dorée

  • Chaque écran est illustré : ciel, lune, château, forêt, feu et brume sont dessinés en vectoriel dans Scenes.tsx. Quelques kilo-octets, nets à toute taille, animés en CSS.
  • L'or signale le précieux : cadres dorés à coins ornés, boutons-lingots avec reflet, portrait du héros dans un médaillon teinté par sa classe.
  • Le feu et la lune donnent le ton : lune dorée d'ordinaire, rouge les soirs de lune de sang et face aux boss.
  • Rien n'est figé : étoiles qui scintillent, lune qui respire, braises qui montent, bannière au vent, monstre qui flotte, butin qui se retourne. Tout se fige en « mouvement réduit ».
  • Typographie : Cinzel pour les titres et les boutons, EB Garamond pour le récit.
Nuit Panneau Or Or clair Texte Sang Énergie

Le détail est dans docs/web/ART_DIRECTION.md.

▶ Jouer en local

Prérequis : Node 22+, pnpm 10, Postgres 16 (ou Docker).

git clone https://github.com/RemiPelloux/TextRPG.git
cd TextRPG
pnpm install
pnpm db:up                  # Postgres via Docker (ou ton propre Postgres)
cp apps/web/.env.example apps/web/.env.local
pnpm db:migrate
pnpm dev                    # http://localhost:3000

Aucune inscription : un compte invité est créé à la première partie, que tu peux sauvegarder avec un e-mail plus tard (écran Compte). Sur téléphone, « Ajouter à l'écran d'accueil » installe le jeu comme une application.

⚙ Sous le capot

flowchart LR
  P([Joueur]) -->|clic| UI[apps/web<br/>Next.js 16 · React 19]
  UI -->|Server Action| S[packages/server<br/>service de jeu autoritaire]
  S -->|apply state, action| E[packages/engine<br/>moteur pur · RNG seedé]
  E -->|lit| C[(packages/content<br/>JSON validé par Zod)]
  S <-->|sauvegarde versionnée| DB[(packages/db<br/>Postgres · Drizzle)]
  E -->|events| UI
  T[tools/simulate<br/>bots · bench · charge] --> E
Loading

Le jeu entier tient dans une fonction pure, apply(state, action) → { state, events }. Le serveur la rejoue avec un RNG seedé : ce que le joueur voit est ce que le serveur a décidé, et les simulateurs font jouer des bots pendant des semaines pour vérifier l'équilibrage.

apps/web/            Next.js 16 (App Router) : écrans, Server Actions, PWA, illustrations
packages/engine/     le jeu : combat, loot, progression, quêtes, Profondeurs
packages/content/    tout le contenu en JSON (objets, ennemis, sceaux, quêtes…)
packages/db/         schéma Postgres, migrations, requêtes
packages/server/     comptes, service de jeu, validation des actions
tools/simulate/      simulateurs : combats, bots de progression, bench, test de charge
legacy/python/       la version Python v0.2 (et le prototype de 2022 dans l'historique git)

Développer

pnpm test           # contenu + moteur + interface (unitaires)
pnpm test:server    # service de jeu contre Postgres
pnpm e2e            # Playwright, mobile et desktop (après `pnpm build`)
pnpm lint && pnpm format:check && pnpm typecheck
pnpm simulate       # victoires par niveau et difficulté
pnpm simulate:progression 30 6 --check   # des bots jouent 30 jours, cibles de docs/BALANCE.md
pnpm simulate:bench # coût du moteur par action
pnpm --filter @textrpg/web icons         # régénère le jeu d'icônes après en avoir ajouté

Deux agents Claude Code sont fournis dans .claude/agents/ : balance-keeper (mesure et retouche l'équilibrage) et loot-smith (butin, sceaux, pouvoirs). Le workflow Balance les complète chaque lundi.

❧ Documentation

Document Contenu
ARCHITECTURE Comment le jeu est construit, et comment ajouter du contenu
DEPLOY Mettre le jeu en ligne (Vercel + Neon), notifications, cron
GAME_DESIGN Boucles de jeu, combat, loot, rétention éthique
ART_DIRECTION La direction artistique Nuit dorée
BALANCE Cibles d'équilibrage, leviers, méthode
SCALABILITY Mesures de charge et prochains paliers
ROADMAP La suite : Acte II, saisons, multijoueur asynchrone…
PLAN Le plan de refonte et les décisions prises en chemin
CONTRIBUTING Conventions et workflow
CHANGELOG L'histoire du projet, de 2022 à la v1.2

Crédits

Icônes : game-icons.net (CC BY 3.0) — Lorc, Delapouite et contributeurs. Polices : Cinzel, Cinzel Decorative, EB Garamond (SIL Open Font License). Illustrations : dessinées en SVG pour le jeu.

Le feu crépite. Tu peux te reposer une fois aujourd'hui.

About

A simple text RPG

Resources

Contributing

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages