Files
kimi-game/README.md
T
2026-07-21 16:42:16 +02:00

123 lines
5.4 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Outpost Remote
Jeu de gestion / programmation différée pour **LÖVE 2D 11.x**. Sur une planète
distante, les communications en temps réel sont impossibles : chaque matin, vous
préparez le programme de travail de votre robot, puis vous observez la journée
s'exécuter sans pouvoir intervenir.
## Lancer le jeu
```sh
love .
```
Lancer les tests automatisés :
```sh
love . --tests
```
## Boucle de jeu
Chaque journée alterne deux phases :
1. **Planification** — inspectez la carte, placez des plans de construction
(coût prélevé immédiatement), composez la liste ordonnée des tâches du robot,
consultez la météo prévue pour le lendemain.
2. **Exécution** — le robot exécute le programme de façon autonome (A* pour le
pathfinding, coûts de terrain, recalcul si un chemin devient invalide). Vous
pouvez observer, mettre en pause, accélérer, mais **aucune commande directe**
n'est possible avant la prochaine fenêtre de communication.
Les tâches non terminées sont reportées au jour suivant. Une mauvaise
planification (tâches impossibles, énergie insuffisante, tempête ignorée) fait
perdre du temps sans terminer la partie : un robot à court d'énergie est
immobilisé puis dépanné de nuit avec une énergie partielle.
## Objectif
Activer la **balise de communication longue distance** : elle requiert 3 relais
scientifiques construits, 60 minerai, 150 données et une infrastructure
énergétique suffisante (elle consomme 1 énergie/s). Des objectifs
intermédiaires jalonnent la progression (explorer, premier panneau solaire,
extraire du minerai, atelier, 5 bâtiments actifs, 100 données). Après la
victoire, la partie continue en mode bac à sable.
## Contrôles
| Entrée | Action |
|---|---|
| Clic gauche | Sélectionner / appliquer l'outil courant |
| Clic droit glissé / Flèches / ZQSD | Déplacer la caméra |
| Molette | Zoomer / dézoomer (centré sur la souris) |
| `B` puis `Tab` | Outil construction, changer de bâtiment |
| `E` / `H` | Outil exploration / récolte |
| `Échap` | Retour à l'outil sélection |
| `Entrée` | Lancer la journée (phase planification) |
| `Espace` | Pause (phase exécution) |
| `1` / `2` / `3` | Vitesse de simulation ×1 / ×2 / ×4 |
| `F1` | Aide |
| `F5` / `F10` | Sauvegarde rapide / retour au menu |
## Règles principales
- **Terrain** : plaines (coût 1), terrain difficile (coût 3), rochers
infranchissables, gisements de minerai, zones de données. Chaque élément a
une couleur **et** une forme distincte.
- **Robot** : énergie limitée (déplacements et travaux consomment), usure
(ralentit tout, réparable à l'atelier), capacité de transport de 40 minerai —
le minerai récolté à la main doit être ramené à la station via une tâche
*recharge*.
- **Bâtiments** : station (unique, recharge lente, dépôt), panneau solaire
(production réduite à 25 % en tempête), batterie (+100 stockage), extracteur
(sur gisement, consomme de l'énergie), relais scientifique (doit être à ≥ 6
cases d'un autre relais), atelier (répare le robot à proximité), balise
(objectif). Les bâtiments perdent de l'intégrité en tempête et produisent
moins quand ils sont endommagés.
- **Météo** : temps normal, froid intense (consommation du robot ×1.8),
tempête de poussière (solaire réduit, vitesse ×0.6, usure des bâtiments).
Prévision la veille, exacte dans ~85 % des cas, déterministe par graine.
- **Énergie colonie à 0** : extracteurs et relais s'arrêtent de produire.
## Architecture
```
main.lua Entrée LÖVE : menu, boucle, pas de simulation fixe (1/30 s)
conf.lua Configuration de la fenêtre
src/config.lua Toutes les constantes d'équilibrage (moddable)
src/noise.lua Bruit déterministe par hachage (LuaJIT bit)
src/world.lua Monde infini par chunks 16×16 générés à la demande
src/pathfind.lua A* 4-directions avec coûts de terrain
src/buildings.lua Définitions, règles de placement, production
src/robot.lua État du robot, déplacement le long du chemin
src/tasks.lua Liste ordonnée, validation, estimation, sérialisation
src/weather.lua Météo et prévision déterministes
src/game.lua Orchestrateur de simulation (aucun love.graphics)
src/save.lua Sauvegarde/chargement (texte clé=valeur)
src/ui.lua Rendu et entrées (seul module couplé à love.graphics)
tests/run_tests.lua 49 tests de logique pure
tests/runner_love.lua Exécuteur via `love . --tests`
```
La logique de simulation (`world`, `pathfind`, `buildings`, `robot`, `tasks`,
`weather`, `game`, `save`) ne dépend pas de `love.graphics` et est testée sans
affichage.
## Sauvegarde
`F5` en jeu, ou bouton *Charger* au menu. Fichier `savegame.txt` dans le
répertoire de données LÖVE (`~/.local/share/love/outpost_remote/`). Conserve :
graine, jour, zones explorées, bâtiments et plans, ressources, état du robot,
tâches restantes, objectifs.
## Limitations connues
- L'extracteur puise dans une réserve finie de 300 minerai par gisement ; la
récolte manuelle, 60.
- Les gisements épuisés ne sont pas marqués visuellement sur la carte.
- La purge des chunks éloignés est transparente (régénération identique à la
demande), mais les modifications de terrain par le joueur seraient perdues —
il n'y en a actuellement aucune.
- Pas de diagonal movement dans le pathfinding (choix : lisibilité du coût).
- La sauvegarde est un texte non chiffré, facilement éditable.