Tales-of-PKMN/docs/README.md

6 KiB

Tales of Pokémon — Organisation du projet

Jeu 3D développé avec Godot (GDScript). Ce document décrit comment le projet est rangé et les conventions à suivre pour s'y retrouver.

Principe général

  • On range par fonctionnalité, pas par type de fichier : le script d'une scène vit à côté de sa scène.
  • Règle de test : si je supprime la fonctionnalité X, je ne supprime qu'un seul dossier.
  • Les fichiers bruts (images, sons, modèles 3D) sont dans assets/, les ressources de données (.tres) dans data/, le code et les scènes dans game/.

Arborescence

res://
├── addons/                  # plugins (pokeapi_importer, controller_icons) — ne pas modifier à la main
├── assets/                  # fichiers bruts uniquement
│   ├── textures/            # fonds, splash…
│   ├── ui/types/            # symboles des types
│   └── audio/
├── data/                    # ressources .tres (importées ou faites à la main)
│   ├── pokemon/             # fichiers préfixés par l'id (ex. 0025_pikachu.tres)
│   ├── moves/
│   ├── types/
│   ├── items/
│   └── mounts/
├── game/
│   ├── core/                # autoloads : game_data, pokedex, ui_audio
│   ├── player/
│   │   ├── player_character.tscn / .gd
│   │   ├── camera/          # camera_holder
│   │   ├── input/           # input_management_component
│   │   ├── aim/             # aim_target
│   │   └── states/          # state, state_machine, idle_state, walk_state, …
│   ├── pokemon/             # pokemon_instance, pokemon_team, pokemon_nature, move_slot, trainer_data…
│   ├── mount/               # mount_profile, mount_registry
│   ├── storage/             # pokemon_box, pokemon_storage, pc_screen (+ .tscn)
│   ├── ui/
│   │   ├── main_menu/       # scène + script
│   │   ├── pause_menu/      # scène + script + shader
│   │   ├── splash_screen/
│   │   └── hud/
│   └── world/               # main.tscn et futures zones
├── docs/                    # documentation (ce fichier)
├── project.godot
└── icon.svg

Conventions de nommage

Élément Convention Exemple
Fichiers et dossiers snake_case pokemon_team.gd, main_menu.tscn
class_name PascalCase PokemonTeam, AimTarget
Variables et fonctions snake_case move_speed, gravity_apply()
Constantes MAJUSCULES_SNAKE MAX_TEAM_SIZE
Signaux snake_case, verbe au passé transitioned
Ressources de données Pokémon préfixe par l'id 0025_pikachu.tres

Les grands systèmes

Joueur et state machine (game/player/)

Le joueur est un CharacterBody3D piloté par une state machine : le nœud StateMachine contient un nœud enfant par état.

  • Chaque état hérite de State et implémente enter(), exit(), update() et physics_update().
  • Un état demande un changement avec transitioned.emit(self, "NomDuNoeud"). Le nom correspond au nom du nœud enfant dans la scène (insensible à la casse). Si aucun nœud ne porte ce nom, la transition est ignorée sans erreur.
  • États en place ou prévus : Idle, Walk, Run, Jump, Inair, Crouch, Dodge, Aim, Mounted.
  • Les variables partagées entre états (vitesses, cooldowns de saut, walk_or_run…) sont sur PlayerCharacter.

Ajouter un état :

  1. Créer xxx_state.gd dans game/player/states/ (extends State, avec un class_name et un state_name).
  2. Ajouter un nœud enfant sous StateMachine dans player_character.tscn, avec le même nom que celui utilisé dans les transitions, et lui attacher le script.
  3. Ajouter les transitions entrantes et sortantes dans les états concernés.

Visée (game/player/aim/)

AimState fait un auto-lock sur les AimTarget du groupe aim_targets. Les actions d'entrée sont configurables dans l'inspecteur de l'état.

Pokémon, équipe et PC (game/pokemon/, game/storage/)

  • PokemonInstance : un Pokémon concret (capacités débloquées, nature, sans IV ni EV).
  • PokemonTeam : équipe de 6 maximum, utilisée par le joueur et les PNJ.
  • TrainerData / TrainerPartyEntry : équipes des PNJ dresseurs.
  • PokemonStorage / PokemonBox / pc_screen : stockage de type « boîte PC » quand l'équipe est pleine.

Montures (game/mount/ et data/mounts/)

Certains Pokémon peuvent être montés hors combat. Le code est dans game/mount/, les profils de monture (.tres) dans data/mounts/.

Données Pokémon (addons/pokeapi_importer/ et data/)

  • Le plugin d'éditeur pokeapi_importer importe depuis PokeAPI uniquement les Pokémon, capacités et objets choisis, et les écrit en .tres dans data/.
  • Il est autonome (prévu pour un dépôt séparé) : le jeu utilise ses données, mais ne doit pas le modifier.
  • Le Pokedex (autoload) est côté jeu, dans game/core/.

Interfaces

Le jeu est pensé manette d'abord (clavier et souris restent possibles). Toute nouvelle interface doit être entièrement utilisable à la manette, avec un focus initial défini. Les icônes de touches viennent du plugin controller_icons.

Autoloads

Autoload Rôle
game_data Sauvegarde et progression
pokedex Accès aux Pokémon et capacités par id ou nom
ui_audio Sons d'interface

Règles pour garder le projet rangé

  1. Un script et sa scène vont dans le même dossier.
  2. Aucun script dans assets/, aucun gros fichier brut dans game/.
  3. Déplacer et renommer les fichiers depuis le dock FileSystem de Godot, jamais depuis l'explorateur de l'OS.
  4. Après un déplacement, chercher res:// dans le projet : les chemins écrits en chaîne de caractères ne sont pas mis à jour automatiquement.
  5. Ne pas mélanger un renommage et un déplacement dans le même commit Git.
  6. Mettre ce document à jour quand un nouveau dossier ou système apparaît.