123 lines
5.4 KiB
Markdown
123 lines
5.4 KiB
Markdown
# 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.
|