|
JustAnotherDnDGame 0.1.0
Jeu de rôle tactique au d20, vue de dessus, en C++/Qt
|
Espace de noms du moteur et de la logique de jeu. More...
Classes | |
| struct | ExplorationSnapshot |
| L'état d'exploration mis de côté le temps d'un combat. More... | |
| struct | EncounterRun |
| Une rencontre engagée : ce qu'on restituera, et ce qu'une victoire acquerra. More... | |
| struct | EncounterTrigger |
| Un déclencheur de rencontre relevé sur la carte : quoi engager, où, et ce qu'une victoire acquerra. More... | |
| struct | EncounterCombatant |
| Un combattant d'une rencontre : une créature du bestiaire, et sa case de départ. More... | |
| struct | Encounter |
| Une rencontre, telle que la donnée la décrit. More... | |
| struct | EncounterCatalog |
| Le catalogue des rencontres, et ce qui n'a pas pu être lu. More... | |
| struct | CombatantPlacement |
| Un combattant placé : sa créature, et sa case sur la carte. More... | |
| class | Engine |
| Fournit les informations globales du moteur. More... | |
| struct | TextPosition |
| Position d'un octet dans un texte, en ligne et colonne comptées à partir de 1. More... | |
| struct | JsonDocument |
| Résultat de la lecture de l'enveloppe commune d'un document JSON. More... | |
| class | ConsoleLogSink |
| Sink qui écrit les messages sur la sortie standard et, sous Windows, vers le débogueur. More... | |
| class | FileLogSink |
| Sink qui écrit chaque message dans un fichier, ligne par ligne. More... | |
| class | ILogSink |
| Destination vers laquelle un Logger diffuse ses messages. More... | |
| class | Logger |
| Filtre les messages par niveau minimal et les diffuse aux sinks enregistrés. More... | |
| class | MemoryLogSink |
| Sink de test : mémorise les messages reçus pour inspection. More... | |
| class | ScopedLogLevel |
Relève le niveau minimal de logger à au moins floor pour la durée de vie de l'objet, et restaure le niveau précédent à la destruction. More... | |
| struct | AnimationClip |
| Clip d'animation : une suite d'images, une durée par image, une manière de finir. More... | |
| class | ClipSet |
| Ensemble nommé de clips, adressable par nom — l'unité que décrit un fichier nom-asset.anim.json (LOT-46 TACHE-03). More... | |
| class | IComponentPool |
| Interface type-effacée d'une pool de composants. More... | |
| class | ComponentPool |
| Stockage dense des composants d'un type T, indexé par entité (sparse set). More... | |
| struct | Actor |
| Marque une entité acteur — un personnage qui occupe une case et se déplace — et porte ce que ce déplacement laisse derrière lui : son orientation et sa masse. More... | |
| struct | Animation |
| État d'animation courant d'une entité : quel jeu de clips, quel clip, quelle image, depuis combien de temps. More... | |
| struct | Collider |
| Étendue physique d'une entité pour la collision : une boîte alignée aux axes (AABB). More... | |
| struct | Interactable |
| Marque une entité comme cible d'interaction et porte de quoi la désigner. More... | |
| struct | Particle |
| Particule visuelle pure : position, vitesse, durée de vie – aucun effet de gameplay (EX-ARCH-012). More... | |
| struct | RpgActor |
| Marque une entité comme acteur de jeu de rôle et la relie à sa fiche. More... | |
| struct | AtlasRegion |
| Région source dans l'atlas de textures, en pixels (origine haut-gauche). More... | |
| struct | Color |
| Couleur RVBA à composantes flottantes dans l'intervalle [0, 1]. More... | |
| struct | Sprite |
| Apparence 2D d'une entité : quelle région de l'atlas dessiner, dans quelle couche et avec quelle teinte. More... | |
| struct | Transform |
| Position, échelle et rotation d'une entité, en unités monde (EX-ARCH-020). More... | |
| struct | Velocity |
| Vitesse linéaire d'une entité, en unités monde par seconde. More... | |
| struct | Entity |
| Handle générationnel identifiant une entité de l'ECS. More... | |
| class | EntityManager |
| Crée, détruit et valide les entités de l'ECS. More... | |
| class | ISystem |
| Interface d'un système : porte la logique itérant sur les composants. More... | |
| class | AnimationSystem |
| Fait progresser l'animation de toute entité portant core::Animation, et projette l'état physique du personnage sur son clip cible. More... | |
| class | MovementSystem |
| Fait avancer chaque entité mobile selon sa vitesse, au pas de temps fixe. More... | |
| struct | ParticleEffect |
| Données décrivant un effet de particules : combien, à quelle vitesse, pendant combien de temps, avec quelle dispersion angulaire – en constantes nommées côté appelant, jamais de nombres magiques dispersés dans le code (LOT-53 TACHE-01). More... | |
| class | ParticleSystem |
| Émet et simule des particules visuelles au pas fixe, strictement déterministe. More... | |
| class | View |
| Sélection en lecture-écriture des entités possédant tous les composants demandés. More... | |
| class | World |
| Point d'entrée unique de la simulation : possède les entités, les composants et les systèmes. More... | |
| struct | InteractionCandidate |
| Une cible candidate : son composant et l'entité qui la porte. More... | |
| struct | InteractionTarget |
| Ce que la désignation a trouvé. More... | |
| struct | InteractionOutcome |
| Ce qu'une interaction a produit. More... | |
| struct | InteractableKind |
| Les types d'entité que ce lot sait rendre interactifs, et ce qu'ils consomment. More... | |
| struct | TriggerWeight |
| Poids posé sur un déclencheur par autre chose que le personnage (EX-GP-025, LOT-65 TACHE-06). More... | |
| class | MechanismController |
| Fait vivre les mécanismes interrupteur/plaque ↔ porte d'un niveau (EX-GP-020, EX-GP-021, EX-GP-025). More... | |
| class | WorldFlags |
| L'ensemble des faits acquis d'une partie : coffres ouverts, quêtes franchies, portes déverrouillées. More... | |
| struct | CameraZone |
| Rectangle de caméra dessiné à la main par le level designer (mode par salle), en cases. More... | |
| struct | CameraFramingConfig |
| Cadrage de caméra résolu d'un niveau : le mode retenu et ses paramètres. More... | |
| struct | GridPosition |
| Position d'une case dans la grille d'un niveau, en coordonnées entières. More... | |
| struct | Mechanism |
| Liaison d'un interrupteur à une porte, par positions résolues. More... | |
| struct | TileTextureOverride |
| Texture assignée explicitement à une case précise, prioritaire sur le skin de son type (EX-EDIT-043, LOT-42). More... | |
| struct | LevelData |
| Niveau complet en mémoire : nom, grille de tuiles, entrée/sortie et mécanismes. More... | |
| class | Level |
| class | LevelDraft |
| Niveau mutable en cours d'édition, distinct de Level (immuable, LOT-07). More... | |
| struct | LevelLoadResult |
| Résultat d'un chargement de niveau : soit un Level, soit une erreur décrite. More... | |
| class | LevelLoader |
| Charge un niveau au format JSON (objet {name, width, height, tiles} où tiles est une liste d'objets {x, y, type, …}), EX-LVL-001/EX-LVL-003. More... | |
| class | LevelWriter |
| Sérialise un niveau vers le format JSON défini par EX-LVL-003. More... | |
| struct | MapEntity |
| Une entité de carte — ce qui n'est pas une tuile. More... | |
| struct | Plane |
| Plan pictural : image couvrant tout le niveau, avec sa densité, sa parallaxe et sa profondeur (EX-DEC-040 à EX-DEC-043). More... | |
| struct | TileLayer |
| Une couche de tuiles : son rôle, sa grille, et ses propriétés libres. More... | |
| class | TileMap |
| Grille dense de tuiles typées (EX-GP-001), origine haut-gauche. More... | |
| class | DeterministicRandom |
| Générateur pseudo-aléatoire léger (SplitMix64), à graine explicite. More... | |
| struct | Rect |
| Rectangle aligné sur les axes (AABB) en unités monde. More... | |
| struct | Vector2 |
| Vecteur bidimensionnel en coordonnées monde (composantes float). More... | |
| struct | Aabb |
| Rectangle aligné aux axes, décrit par ses coins min (haut-gauche) et max (bas-droite), en unités monde (origine haut-gauche, y vers le bas). More... | |
| struct | PhysicsConfig |
| Paramètres réglables de la physique du personnage, regroupés pour faciliter le tuning. More... | |
| struct | PlayerInput |
| Intention de déplacement transmise à la physique, dissociée de toute touche. More... | |
| struct | SweepResult |
| Résultat d'un balayage : où la boîte s'arrête et sur quels axes elle a été bloquée. More... | |
| struct | TopDownConfig |
| Paramètres réglables du déplacement top-down, regroupés pour faciliter le tuning. More... | |
| struct | AssetFamilyDefinition |
| Une famille d'assets d'entité : ce qu'elle illustre, et le contrat de dimensions. More... | |
| struct | AssetFamilyTable |
| La table des familles, et ce qui n'a pas pu être lu. More... | |
| struct | AssetKey |
| Une clé d'asset décomposée : sa famille, et ce qu'elle désigne dedans. More... | |
| struct | ExpectedAssetKey |
| Une clé attendue par le manifeste : ce qu'elle illustre, et d'où elle vient. More... | |
| struct | MarkerColor |
| Une couleur RVBA, sans dépendance au rendu — Core ne connaît ni Qt ni GPU (EX-ARCH-001). More... | |
| struct | MarkerImage |
| Les pixels d'un marqueur, en RVBA, ligne par ligne depuis le haut. More... | |
| struct | CreatureTrait |
| Un trait de créature : un nom et sa description, tels que le livre les écrit. More... | |
| struct | CreatureAction |
| Une action de créature, et ce que le moteur sait en jouer. More... | |
| struct | CreatureSpeed |
| Vitesses de déplacement d'une créature, en mètres. walk est toujours renseignée. More... | |
| struct | Creature |
| Un bloc de statistiques : ce que creature.schema.json décrit. More... | |
| struct | Bestiary |
| Le catalogue chargé, et ce qui n'a pas pu l'être. More... | |
| struct | NamedTrait |
| Un trait nommé, tel que le livre l'écrit — d'espèce ou d'historique. More... | |
| struct | ProvisionalStatus |
| Le statut provisoire d'une donnée (EX-CNT-032). More... | |
| struct | Species |
| Une espèce jouable : ce que species.schema.json décrit. More... | |
| struct | Background |
| Un historique : maîtrises, langues accordées et capacité. More... | |
| struct | ClassLevel |
| Une ligne de table de progression : ce qu'un niveau apporte. More... | |
| struct | PlayableClass |
| Une classe jouable et sa table de progression. More... | |
| struct | CharacterOptions |
| Les trois catalogues chargés, et ce qui n'a pas pu l'être. More... | |
| struct | ExperienceLevel |
| Une ligne de la table d'expérience : le seuil d'un niveau et son bonus de maîtrise. More... | |
| struct | ExperienceTable |
| La table d'expérience, du niveau 1 au niveau 20. More... | |
| struct | CharacterCreationRules |
| Les deux constantes de règle qu'une fiche emploie, lues dans la donnée. More... | |
| struct | CharacterSheet |
| La fiche d'une créature jouable ou non : héros, PNJ, ennemi. More... | |
| struct | LevelUpResult |
| Ce qu'une montée de niveau a produit — de quoi le dire au joueur (EX-DND-003). More... | |
| struct | LoadedCharacterSheet |
| Une fiche chargée depuis un fichier, et ce qui n'a pas pu l'être. More... | |
| struct | SkillCheckModifier |
| Le modificateur d'un jet de compétence. More... | |
| struct | Modifier |
| Un modificateur, avec son origine — sans quoi le jet n'est pas restituable. More... | |
| struct | CheckResult |
| Le résultat complet d'un jet, et de quoi le reconstituer (EX-DND-003). More... | |
| struct | Dice |
| Une expression de dés analysée : 2d6+3, 1d8, 4. More... | |
| struct | DiceRoll |
| Le détail d'un lancer, pour que le joueur puisse le reconstituer (EX-DND-003). More... | |
| struct | Armor |
| Une armure ou un bouclier du catalogue. More... | |
| struct | Weapon |
| Une arme du catalogue. More... | |
| struct | EquipmentCatalog |
| Les deux catalogues chargés, et ce qui n'a pas pu l'être. More... | |
| struct | InventoryEntry |
| Une ligne d'inventaire : un objet et sa quantité. More... | |
| struct | Item |
| Un objet du catalogue qui n'est ni une arme ni une armure : matériel, outil, monture, marchandise, babiole, objet magique. More... | |
| struct | ItemCatalog |
| Le catalogue d'objets, et ce qui n'a pas pu être lu. More... | |
| struct | EncumbranceRules |
| Les bornes de charge, lues dans la donnée (rules/encumbrance.json). More... | |
| struct | InventoryStack |
| Une ligne du sac : un identifiant de catalogue et une quantité. More... | |
| struct | Inventory |
| Ce qu'un personnage porte : son sac, et ce qu'il a sur lui. More... | |
| struct | ItemLookup |
| Les trois catalogues qu'un inventaire consulte pour peser et pour dériver. More... | |
| struct | DerivedStats |
| Ce que l'équipement porté produit — recalculé, jamais accumulé. More... | |
| struct | SkillDefinition |
| Une compétence et la caractéristique dont elle dépend. More... | |
| struct | SkillCatalog |
| Les compétences chargées, et ce qui n'a pas pu l'être. More... | |
| class | FixedTimestep |
| Convertit un temps réel écoulé variable en un nombre de pas de simulation fixes. More... | |
| struct | RegionAppraisal |
| Une appréciation d'un axe : une note, et la portée où elle vaut. More... | |
| struct | RegionStatistic |
| Un axe de statistique régionale : une ou plusieurs appréciations (EX-CNT-061). More... | |
| struct | RegionSpeciesShare |
| La part d'une espèce dans la population d'une région. More... | |
| struct | RegionPopulation |
| La population d'une région. More... | |
| struct | Location |
| Un lieu nommé d'une région : un nœud terminal du graphe, une carte à créer. More... | |
| struct | Region |
| Une région : un nœud du graphe de cartes. More... | |
| struct | Atlas |
| L'atlas chargé, et ce qui n'a pas pu l'être. More... | |
| class | GridDistanceField |
| Distance de plus court chemin en nombre de cases (4-connexité, respectant les cases statiquement solides d'un core::TileMap), pré-calculée une fois par BFS multi-source depuis une case cible. More... | |
Typedefs | |
| using | AssertionHandler |
| Signature d'un gestionnaire d'échec d'assertion. | |
| using | PropertyValue = std::variant<bool, std::int64_t, double, std::string> |
| Valeur d'une propriété libre : booléen, entier, réel ou chaîne. | |
| using | PropertyMap = std::map<std::string, PropertyValue> |
| Propriétés libres, indexées par nom. | |
Enumerations | |
| enum class | CombatOutcome { Victory , Flight , Defeat } |
| Comment un combat se termine. More... | |
| enum class | JsonReadError { None , FileNotFound , ParseError , UnsupportedVersion , MalformedStructure } |
| Catégorie d'échec de lecture d'un document JSON. More... | |
| enum class | LogLevel { Trace , Info , Warning , Error } |
| Niveau d'un message de journalisation (ordre croissant de gravité). More... | |
| enum class | ClipEndMode { Loop , OneShot } |
| Manière dont un clip se termine à la dernière image. More... | |
| enum class | ParticleKind { DashTrail , LandingDust , Death } |
| Effet visuel à l'origine d'une particule – tag opaque pour Core, exploité par le rendu (HMI) pour choisir calque, teinte et texture (LOT-53 TACHE-03), sans que Core n'ait à connaître ces notions de présentation (EX-NFR-011). More... | |
| enum class | CameraFramingMode { WholeLevel , PerRoom , Follow } |
| Mode de cadrage de caméra d'un niveau (EX-REN-016) : décision de conception, pas une règle déduite de ses dimensions. More... | |
| enum class | LevelValidationError { None , ParseError , UnknownTileType , OutOfBounds , DuplicatePosition , MissingSwitchId , DuplicateSwitchId , InvalidEntryCount , InvalidExitCount , UnresolvedMechanism , FileNotFound , UnsupportedFormatVersion , InvalidCameraFraming } |
| Catégorie d'échec de chargement/validation d'un niveau (LOT-15, EX-EDIT-012). More... | |
| enum class | LevelOutcome { Playing , Won , Lost } |
| Issue courante d'un niveau, déduite de la position du personnage. More... | |
| enum class | PlaneDepth { Behind , Front } |
| Position d'un plan dans l'ordonnancement de rendu, relativement au personnage (EX-DEC-042). More... | |
| enum class | LayerKind { Ground , Decor , Collision , Legacy } |
| Rôle d'une couche de tuiles dans une carte. More... | |
| enum class | TileType { Empty , Solid , Danger , Entry , Exit , Switch , Door , PressurePlate , Block , Key , LockedDoor , Grass , Dirt , Sand , Water , DeepWater , Wall , Cliff , Bridge , Stairs } |
| Type d'une tuile de la grille d'une carte (EX-GP-001). More... | |
| enum class | Ability { Strength , Dexterity , Constitution , Intelligence , Wisdom , Charisma } |
| Une des six caractéristiques d'un personnage ou d'une créature (EX-DND-010). More... | |
| enum class | RollStance { Normal , Advantage , Disadvantage } |
| Comment le d20 est lancé. More... | |
| enum class | ArmorCategory { Light , Medium , Heavy , Shield } |
| Catégorie d'armure. Ensemble fermé : le livre n'en connaît pas d'autre. More... | |
| enum class | EncumbranceLevel { Unencumbered , Encumbered , HeavilyEncumbered , OverCapacity } |
| État de charge d'un personnage, dans l'ordre croissant de gêne. More... | |
| enum class | EquipmentSlot { Head , Neck , Cloak , Torso , Belt , Hands , RingLeft , RingRight , MainHand , OffHand , Ranged , Ammunition , Feet , Bracers , Pouch , Trinket } |
| Les seize emplacements d'équipement de la planche 2 du corpus. More... | |
| enum class | CasterProgression { None , Third , Half , Full , Pact } |
| Rythme auquel une classe fait progresser le niveau de lanceur. More... | |
| enum class | DamageType { Acid , Bludgeoning , Cold , Fire , Force , Lightning , Necrotic , Piercing , Poison , Psychic , Radiant , Slashing , Thunder } |
| Type de dégâts infligés (EX-CBT-032, EX-CNT-011). More... | |
| enum class | Condition { Blinded , Charmed , Deafened , Exhaustion , Frightened , Grappled , Incapacitated , Invisible , Paralyzed , Petrified , Poisoned , Prone , Restrained , Stunned , Unconscious } |
| État affectant une créature (EX-DND-040, EX-CNT-011). More... | |
| enum class | MagicSchool { Abjuration , Conjuration , Divination , Enchantment , Evocation , Illusion , Necromancy , Transmutation } |
| École de magie d'un sort (EX-CNT-011). More... | |
| enum class | CreatureSize { Tiny , Small , Medium , Large , Huge , Gargantuan } |
| Catégorie de taille d'une créature (EX-CNT-011). More... | |
| enum class | RegionGrade : std::uint8_t { VeryLow = 0 , Low , Normal , High , VeryHigh } |
| Les cinq notes de l'encart « Regional Statistics » (EX-CNT-060). More... | |
| enum class | RegionAxis : std::uint8_t { CitizenFreedom = 0 , CrimeAndViolence , EconomicProsperity , GovernmentCorruption , MagicAccess , MonsterPresence , PoliticalStability } |
| Les sept axes, dans l'ordre où le livre les imprime. More... | |
Functions | |
| EncounterRun | beginEncounter (const Encounter &encounter, const ExplorationSnapshot &exploration, GridPosition trigger, std::string defeatFlagKey) |
Engage encounter au point trigger, en mettant exploration de côté. | |
| ExplorationSnapshot | endEncounter (const EncounterRun &run, CombatOutcome outcome, WorldFlags &flags) |
Termine run, et rend l'état d'exploration à restituer. | |
| bool | encounterAlreadyCleared (const WorldFlags &flags, std::string_view defeatFlagKey) |
| Vrai si cette rencontre a déjà été gagnée, et ne doit donc pas se redéclencher. | |
| std::optional< EncounterTrigger > | encounterTriggerFor (const MapEntity &entity, std::string_view mapName) |
Lit entity comme un déclencheur de rencontre, s'il en est un. | |
| EncounterCatalog | loadEncounters (const std::filesystem::path &encountersDir) |
| Charge les rencontres depuis leur dossier (Rpg/encounters/). | |
| std::vector< CombatantPlacement > | placeCombatants (const Encounter &encounter, GridPosition trigger) |
Place les combattants d'une rencontre autour de trigger. | |
| TextPosition | positionOf (std::string_view text, std::size_t byteOffset) |
| Convertit un décalage en octets en ligne et colonne. | |
| JsonDocument | readJsonObject (std::string_view json, int supportedVersion, std::string_view origin={}, std::string_view versionField="version") |
| Lit l'enveloppe commune d'un catalogue : JSON bien formé, racine objet, garde de version. | |
| JsonDocument | readJsonObjectFromFile (const std::filesystem::path &path, int supportedVersion, std::string_view versionField="version") |
| Comme readJsonObject, en lisant d'abord le fichier. | |
| void | setAssertionHandler (AssertionHandler handler) |
| Remplace le gestionnaire d'échec d'assertion (utile pour les tests). | |
| void | handleAssertionFailure (const char *condition, const char *message, const char *file, int line) |
| Invoque le gestionnaire d'échec d'assertion courant. | |
| std::string_view | fileName (std::string_view path) |
| Réduit un chemin source à son seul nom de fichier. | |
| std::string | formatLogLine (std::string_view timestamp, LogLevel level, std::string_view category, std::string_view file, int line, std::string_view message) |
| Compose une ligne de journalisation. | |
| std::string | currentTimestamp () |
| Horodatage courant local, au format "HH:MM:SS". | |
| Logger & | defaultLogger () |
| Journaliseur global de l'application (utilisé par les macros de log). | |
| constexpr const char * | toString (LogLevel level) |
| Convertit un niveau en libellé lisible. | |
| std::optional< LogLevel > | parseLogLevel (std::string_view text) |
| Convertit une chaîne en niveau de log (insensible à la casse). | |
| std::shared_ptr< const ClipSet > | playerClipSet () |
| Jeu de clips du personnage, migré tel quel depuis l'ancien dispositif figé (LOT-18), étendu aux états aériens/dash livrés par LOT-10/LOT-11 (LOT-48 TACHE-02). | |
| void | advanceAnimation (Animation &animation, float fixedDelta) |
| Fait progresser une seule animation d'un pas fixe (image courante, bouclage/bascule). | |
| void | updateTopDownMovement (World &world, Entity actor, const PlayerInput &input, const TileMap &collision, const TopDownConfig &config, float fixedDelta) |
| Avance un acteur d'un pas fixe : intention → vitesse → balayage → position. | |
| GridPosition | aimedCell (GridPosition from, Vector2 facing) |
| La case que vise un personnage, d'après son orientation. | |
| InteractionTarget | findInteractionTarget (GridPosition from, Vector2 facing, const TileMap &map, const std::vector< InteractionCandidate > &candidates, const WorldFlags &flags) |
| Désigne la cible d'interaction d'un personnage. | |
| InteractionOutcome | interact (const InteractionTarget &target, WorldFlags &flags) |
| Résout une interaction sur une cible désignée, en levant son drapeau s'il y a lieu. | |
| const std::vector< InteractableKind > & | knownInteractableKinds () |
| Les familles connues de ce lot. Le LOT-15 et le LOT-09 en ajouteront. | |
| std::size_t | spawnMapEntities (World &world, const Level &level, std::string_view mapName, const std::function< void(Entity, const MapEntity &)> &onEntity={}) |
| Peuple un World d'une entité par objet de la couche objects. | |
| std::string | keyForEntity (std::string_view mapName, std::string_view entityType, int column, int row) |
| La clé de drapeau d'une entité de carte : "<carte>/<type>@<colonne>,<ligne>". | |
| std::string_view | cameraFramingModeName (CameraFramingMode mode) noexcept |
| Nom JSON du mode (symétrique à parseCameraFramingMode), pour la sérialisation. | |
| std::optional< CameraFramingMode > | parseCameraFramingMode (std::string_view name) noexcept |
| Reconnaît le nom JSON d'un mode ; std::nullopt si non reconnu (mode inconnu, EX-LVL-004). | |
| CameraFramingConfig | resolveCameraFraming (const std::optional< CameraFramingConfig > &declared, int levelWidth, int levelHeight) noexcept |
| Résout le cadrage effectif d'un niveau à partir du champ déclaré (peut être absent). | |
| std::optional< std::string > | validateCameraFramingConfig (const CameraFramingConfig &config, int levelWidth, int levelHeight) |
| Valide un cadrage déclaré (EX-LVL-004) : taille de vue nulle/négative ou supérieure au niveau, zone hors bornes ou de taille nulle, ou paramètre étranger au mode retenu (roomWidthTiles/roomHeightTiles hors PerRoom/Follow, zones hors PerRoom). | |
| constexpr bool | operator== (GridPosition left, GridPosition right) noexcept |
| constexpr bool | operator!= (GridPosition left, GridPosition right) noexcept |
| LevelOutcome | evaluateOutcome (const Aabb &playerBox, const Level &level, const std::vector< Aabb > &extraDangerBoxes={}) |
| Détermine l'issue du niveau à partir de la boîte du personnage. | |
| void | buildLevelScene (World &world, const Level &level, const std::function< AtlasRegion(TileType)> ®ionForTile, const std::function< void(Entity, LayerKind, TileType, int, int)> &onTileEntity={}) |
| Peuple un World d'une entité par tuile non vide du niveau. | |
| constexpr bool | isValidPlaneDensity (int pixelsPerUnit) noexcept |
| Densité acceptée pour un plan (EX-DEC-041). | |
| constexpr const char * | layerKindName (LayerKind kind) noexcept |
| Nom JSON d'un rôle de couche. | |
| constexpr bool | isSolid (TileType type) noexcept |
| Indique si un type de tuile bloque le déplacement de manière statique. | |
| std::string | tileTypeName (TileType type) |
| Convertit un type de tuile en son nom textuel. | |
| std::optional< TileType > | parseTileType (std::string_view name) |
| Convertit un nom textuel en type de tuile. | |
| constexpr std::uint64_t | splitMix64 (std::uint64_t value) noexcept |
| Mélange (SplitMix64) un entier 64 bits en une valeur bien distribuée. | |
| constexpr std::uint64_t | deriveSeed (std::uint64_t baseSeed, std::uint64_t step, std::uint64_t entityId) noexcept |
| Combine une graine de base, un numéro de pas et un identifiant reproductible en une graine unique, propre à ce triplet (LOT-53 TACHE-01). | |
| bool | approximatelyEqual (float lhs, float rhs, float tolerance=EPSILON) |
| Compare deux flottants à une tolérance relative-absolue près. | |
| Vector2 | operator+ (const Vector2 &lhs, const Vector2 &rhs) |
| Vector2 | operator- (const Vector2 &lhs, const Vector2 &rhs) |
| Vector2 | operator* (const Vector2 &vector, float scalar) |
| Vector2 | operator* (float scalar, const Vector2 &vector) |
| Vector2 | operator/ (const Vector2 &vector, float scalar) |
| Vector2 | operator- (const Vector2 &vector) |
| bool | operator== (const Vector2 &lhs, const Vector2 &rhs) |
| Égalité approchée entre deux vecteurs (comparaison par tolérance). | |
| bool | operator!= (const Vector2 &lhs, const Vector2 &rhs) |
| SweepResult | sweepAabbVsAabb (const Aabb &box, const Vector2 &delta, const Aabb &obstacle) noexcept |
Déplace box de delta en s'arrêtant au premier contact avec obstacle, une boîte fixe unique (pas une grille), puis en glissant le long de sa surface pour le déplacement résiduel. | |
| Vector2 | playerSize () |
| Vector2 | playerSpawnPosition (int column, int row) |
Coin haut-gauche du personnage centré dans la tuile (column, row). | |
| SweepResult | sweepAabb (const Aabb &box, const Vector2 &delta, const TileMap &tiles) |
Déplace box de delta en s'arrêtant au premier contact avec une tuile solide, puis en glissant le long de la surface pour le déplacement résiduel. | |
| bool | isValidAssetKey (std::string_view key) |
Vrai si key respecte la syntaxe d'une clé d'asset. | |
| std::optional< AssetKey > | parseAssetKey (std::string_view key) |
Décompose key. std::nullopt si elle est malformée — jamais devinée. | |
| std::string | defaultAssetKeyFor (std::string_view family, std::string_view id) |
| La clé par défaut d'une entrée : famille/identifiant. | |
| AssetFamilyTable | loadAssetFamilies (const std::filesystem::path &familiesFile) |
| Charge la table des familles depuis Assets/Entities/families.json. | |
| std::vector< ExpectedAssetKey > | expectedAssetKeys (const std::filesystem::path &rpgDir, const AssetFamilyTable &families, std::vector< std::string > &errors) |
Énumère les clés qu'attendent les catalogues de rpgDir, selon families. | |
| std::uint32_t | stableAssetHash (std::string_view key) |
| Le hachage stable dont assetMarker tire sa teinte. | |
| MarkerImage | assetMarker (std::string_view key, int width, int height) |
| Peint le marqueur d'une clé d'asset. | |
| std::string_view | abilityName (Ability ability) noexcept |
| Nom textuel d'une caractéristique, tel que les données l'écrivent. | |
| std::optional< Ability > | parseAbility (std::string_view name) noexcept |
| Inverse d'abilityName. std::nullopt si le nom est inconnu — jamais deviné. | |
| std::span< const Ability > | allAbilities () noexcept |
| Les six caractéristiques, dans l'ordre de la fiche. | |
| constexpr int | abilityModifier (int score) noexcept |
| Modificateur d'une valeur de caractéristique : (score - 10) / 2, arrondi vers le bas. | |
| Bestiary | loadBestiary (const std::filesystem::path &directory) |
| Charge toutes les créatures d'un dossier — un fichier JSON par créature. | |
| int | abilityScoreWith (const Species &species, Ability which, int baseScore, int maximumScore) |
| Applique les augmentations d'une espèce à une valeur de caractéristique. | |
| CharacterOptions | loadCharacterOptions (const std::filesystem::path &speciesDir, const std::filesystem::path &backgroundsDir, const std::filesystem::path &classesDir) |
| Charge les trois catalogues depuis leurs dossiers. | |
| CharacterCreationRules | loadCharacterCreationRules (const std::filesystem::path &path) |
| Charge les constantes depuis Source/Elements/Rpg/rules/character-creation.json. | |
| ExperienceTable | loadExperienceTable (const std::filesystem::path &path) |
| Charge la table d'expérience depuis Source/Elements/Rpg/rules/experience.json. | |
| LoadedCharacterSheet | loadCharacterSheet (const std::filesystem::path &path, const CharacterOptions &options, const CharacterCreationRules &rules, const ExperienceTable &table) |
| Charge un personnage depuis son fichier JSON (Source/Elements/Rpg/characters/, schéma character.schema.json) et construit sa fiche. | |
| int | proficiencyBonus (const CharacterSheet &sheet, const ExperienceTable &table) |
| Le bonus de maîtrise de la fiche, lu dans la table au niveau courant. | |
| int | savingThrowModifier (const CharacterSheet &sheet, const ExperienceTable &table, Ability which) |
| Le modificateur d'un jet de sauvegarde : caractéristique, plus la maîtrise si elle s'applique. | |
| SkillCheckModifier | skillModifier (const CharacterSheet &sheet, const ExperienceTable &table, const SkillCatalog &catalog, std::string_view skillId) |
| int | maximumHitPointsFor (int hitDie, int level, int constitutionModifier) |
| Les points de vie d'un niveau, selon la règle du livre. | |
| LevelUpResult | gainExperience (CharacterSheet &sheet, const ExperienceTable &table, int hitDie, int amount) |
| Ajoute des points d'expérience et applique la montée de niveau qui en découle. | |
| CharacterSheet | buildCharacterSheet (std::string name, const std::array< int, 6 > &baseAbilities, const Species *species, const PlayableClass *playableClass, const Background *background, const CharacterCreationRules &rules, const ExperienceTable &table) |
| Construit une fiche depuis une espèce, une classe et un historique. | |
| CheckResult | rollCheck (int target, std::span< const Modifier > modifiers, RollStance stance, DeterministicRandom &random) |
| Lance un d20 contre un seuil. | |
| std::string_view | rollStanceName (RollStance stance) noexcept |
| Nom textuel d'une posture, pour les journaux et la restitution. | |
| constexpr RollStance | rollStance (int advantageSources, int disadvantageSources) noexcept |
| Détermine la posture depuis le nombre de sources de chaque type (EX-DND-002). | |
| std::optional< Dice > | parseDice (std::string_view notation) |
| Analyse une notation NdF, NdF+M, NdF-M ou une valeur fixe. | |
| std::string | formatDice (const Dice &dice) |
| Réécrit une expression en notation canonique (2d6+3, 1d8, 4). | |
| DiceRoll | rollDice (const Dice &dice, DeterministicRandom &random) |
| Lance une expression avec un générateur déterministe. | |
| std::string_view | armorCategoryName (ArmorCategory category) |
| Nom textuel d'une catégorie d'armure, tel que la donnée l'écrit. | |
| std::optional< ArmorCategory > | parseArmorCategory (std::string_view name) |
| Inverse d'armorCategoryName. std::nullopt si le nom est inconnu — jamais deviné. | |
| EquipmentCatalog | loadEquipment (const std::filesystem::path &weaponsDir, const std::filesystem::path &armorsDir) |
| Charge les armes et les armures depuis leurs dossiers. | |
| int | armorClassFor (const CharacterSheet &sheet, const CharacterCreationRules &rules, const Armor *armor, const Armor *shield) |
| La classe d'armure d'un personnage, armure et bouclier compris. | |
| int | totalWeightGrams (const std::vector< InventoryEntry > &entries) |
| Le poids total d'un inventaire, en grammes. | |
| std::string_view | equipmentSlotName (EquipmentSlot slot) |
| Nom textuel d'un emplacement, tel que la donnée et les clés de traduction l'écrivent. | |
| std::optional< EquipmentSlot > | parseEquipmentSlot (std::string_view name) |
| Inverse d'equipmentSlotName. std::nullopt si le nom est inconnu — jamais deviné. | |
| ItemCatalog | loadItems (const std::filesystem::path &itemsDir) |
| Charge les objets depuis leur dossier (Rpg/items/). | |
| EncumbranceRules | loadEncumbranceRules (const std::filesystem::path &rulesFile) |
| Charge les bornes de charge depuis rules/encumbrance.json. | |
| std::string | equip (Inventory &inventory, EquipmentSlot slot, std::string itemId) |
Équipe itemId à slot, et rend ce que l'emplacement portait. | |
| std::string | unequip (Inventory &inventory, EquipmentSlot slot) |
Retire ce que slot porte. | |
| void | addToBackpack (Inventory &inventory, const std::string &itemId, int quantity=1) |
Ajoute quantity exemplaires de itemId au sac, en empilant si la ligne existe déjà. | |
| int | removeFromBackpack (Inventory &inventory, const std::string &itemId, int quantity=1) |
Retire quantity exemplaires de itemId. | |
| int | carriedWeightGrams (const Inventory &inventory, const ItemLookup &lookup) |
| Le poids total porté, sac et équipement compris, en grammes. | |
| std::vector< std::string > | unknownIds (const Inventory &inventory, const ItemLookup &lookup) |
| Les identifiants que les catalogues ne portent pas — un sac qui en contient ne pèse pas ce qu'il devrait, et le dire vaut mieux que de peser faux en silence. | |
| DerivedStats | derivedStatsFor (const CharacterSheet &sheet, const Inventory &inventory, const ItemLookup &lookup, const CharacterCreationRules &creation, const EncumbranceRules &carrying) |
| Calcule tout ce que l'équipement porté produit, depuis la fiche et les catalogues. | |
| int | multiclassCasterLevel (std::span< const ClassLevel > classes) |
| Niveau de lanceur cumulé d'un personnage multiclassé. | |
| std::string_view | casterProgressionName (CasterProgression progression) |
| Nom textuel d'une progression, tel que multiclassing.json l'écrit. | |
| std::optional< CasterProgression > | parseCasterProgression (std::string_view name) |
| Convertit le nom d'une progression, tel que la donnée l'écrit, en valeur. | |
| constexpr float | tilesFromMeters (float meters) noexcept |
| Convertit une distance en mètres — telle que le corpus l'écrit — en nombre de cases. | |
| constexpr float | metersFromTiles (float tiles) noexcept |
| Convertit un nombre de cases en mètres, pour l'affichage et les infobulles. | |
| SkillCatalog | loadSkills (const std::filesystem::path &directory) |
| Charge le catalogue des compétences depuis son dossier. | |
| std::string_view | regionGradeName (RegionGrade grade) |
| Le nom d'une note, tel que le schéma l'écrit (veryLow, normal, …). | |
| std::optional< RegionGrade > | regionGradeFromName (std::string_view name) |
| La note portant ce nom de schéma, ou std::nullopt. | |
| std::string_view | regionAxisName (RegionAxis axis) |
| Le nom d'un axe, tel que le schéma l'écrit (citizenFreedom, …). | |
| Atlas | loadAtlas (const std::filesystem::path &directory) |
| Charge l'atlas — regions/ et locations/ sous le dossier donné. | |
Noms textuels | |
Point unique de vérité de la correspondance valeur ↔ nom, partagé par les catalogues de données (Source/Elements/Rpg/), leurs schémas JSON et le moteur. Deux tables distinctes divergeraient au premier type ajouté — et le scénario qu'EX-CNT-011 décrit se produirait : la donnée déclare un type que le moteur ne connaît pas, la valeur tombe dans un cas par défaut, et le sort cesse de faire des dégâts sans que rien ne l'annonce. Chaque switch est exhaustif et sans default : ajouter une valeur à une énumération sans lui donner de nom devient une erreur de compilation (/W4 /WX), jamais un nom faux. Les noms sont ceux du lexique de traduction (LOT-30) : ce sont les termes anglais que la table d'autorité porte sous les catégories type de dégâts, état et école de magie. | |
| std::string | damageTypeName (DamageType type) |
| std::string | conditionName (Condition condition) |
| std::string | magicSchoolName (MagicSchool school) |
| std::string | creatureSizeName (CreatureSize size) |
Analyse d'un nom | |
Inverses exacts des fonctions ci-dessus : tout nom qu'elles produisent est accepté ici, et réciproquement. Un nom inconnu renvoie std::nullopt — c'est une donnée invalide à signaler, jamais une valeur devinée. | |
| std::optional< DamageType > | parseDamageType (std::string_view name) |
| std::optional< Condition > | parseCondition (std::string_view name) |
| std::optional< MagicSchool > | parseMagicSchool (std::string_view name) |
| std::optional< CreatureSize > | parseCreatureSize (std::string_view name) |
Énumération complète | |
Les valeurs de chaque énumération, dans l'ordre de déclaration. Ce sont ces vues qui permettent à un test de balayer une énumération sans coder en dur sa dernière valeur : la borne d'un parcours écrite à la main est la première chose qui vieillit, et un type ajouté après elle échapperait en silence à tous les contrôles. | |
| std::span< const DamageType > | allDamageTypes () |
| std::span< const Condition > | allConditions () |
| std::span< const MagicSchool > | allMagicSchools () |
| std::span< const CreatureSize > | allCreatureSizes () |
Variables | |
| constexpr bool | DEVELOPER_BUILD = true |
| Vrai dans les builds de développement (Debug), faux en Release. | |
| constexpr std::string_view | ENCOUNTER_ENTITY_TYPE = "encounter" |
| Type de la couche objects qui déclenche une rencontre. | |
| constexpr Entity | INVALID_ENTITY {Entity::INVALID_INDEX, 0} |
| Entité invalide conventionnelle : ne désigne jamais une entité vivante. | |
| constexpr int | PLAYER_CLIP_IDLE = 0 |
| Index du clip « idle » dans core::playerClipSet() — ordre stable, seule source de vérité partagée avec hmi::TextureAtlas::playerFrameRegion (traduction en région d'atlas, LOT-46 TACHE-04) : ne pas réordonner sans mettre à jour HMI en conséquence. | |
| constexpr int | PLAYER_CLIP_RUN = 1 |
| Index du clip « run » dans core::playerClipSet() (voir PLAYER_CLIP_IDLE). | |
| constexpr int | PLAYER_CLIP_JUMP = 2 |
| Index du clip « jump » dans core::playerClipSet() (voir PLAYER_CLIP_IDLE). | |
| constexpr int | PLAYER_CLIP_FALL = 3 |
| Index du clip « fall » (chute, distincte du saut, LOT-48) dans core::playerClipSet(). | |
| constexpr int | PLAYER_CLIP_LAND = 4 |
| Index du clip « land » (atterrissage, transition jouée une fois, LOT-48) dans core::playerClipSet(). | |
| constexpr int | PLAYER_CLIP_WALLSLIDE = 5 |
| Index du clip « wallslide » (glissade murale, LOT-48) dans core::playerClipSet(). | |
| constexpr int | PLAYER_CLIP_DASH = 6 |
| Index du clip « dash » dans core::playerClipSet() (voir PLAYER_CLIP_IDLE). | |
| constexpr std::uint64_t | DEFAULT_PARTICLE_SEED = 0x504152544943454CULL |
| Graine par défaut de core::ParticleSystem – fixe et documentée, jamais l'horloge système (EX-NFR-002) : deux sessions démarrées avec cette graine et soumises à la même séquence d'entrées produisent exactement les mêmes particules. | |
| constexpr int | MAX_PARTICLES = 256 |
| Nombre maximal de particules simultanément vivantes (EX-NFR-005) : au-delà, spawn() recycle les plus anciennes plutôt que d'allouer sans borne. | |
| constexpr float | LANDING_MIN_IMPACT_SPEED = 4.0f |
| Vitesse d'impact (LOT-53 TACHE-02) en-dessous de laquelle un atterrissage ne produit aucune poussière – sans ce seuil, chaque petit pas en émettrait. | |
| constexpr float | LANDING_MAX_IMPACT_SPEED = 14.0f |
| Vitesse d'impact au-delà de laquelle l'intensité de la poussière plafonne (LANDING_DUST_MAX_
COUNT) : une chute extrême ne produit pas un nuage toujours plus dense. | |
| constexpr int | LANDING_DUST_MIN_COUNT = 3 |
| Nombre de particules de poussière au seuil LANDING_MIN_IMPACT_SPEED (intensité minimale). | |
| constexpr int | LANDING_DUST_MAX_COUNT = 10 |
| Nombre de particules de poussière au plafond LANDING_MAX_IMPACT_SPEED (intensité maximale). | |
| constexpr int | DEFAULT_ROOM_WIDTH_TILES = 24 |
| Taille de salle par défaut du mode par salle, en cases. | |
| constexpr int | DEFAULT_ROOM_HEIGHT_TILES = 14 |
| constexpr int | LEVEL_FORMAT_VERSION = 3 |
| Version courante du format de niveau JSON (EX-LVL-005). | |
| constexpr int | PLANE_NATIVE_PIXELS_PER_UNIT = 16 |
| Densité native d'un plan, en pixels par unité monde — même valeur que l'échelle de rendu (hmi::Camera2D::PIXELS_PER_UNIT), que Core ne peut pas inclure (EX-NFR-011). | |
| constexpr std::size_t | MAX_PLANES_PER_LEVEL = 16 |
| Nombre maximal de plans par niveau (EX-DEC-044) : borne le coût dans le format, plutôt que de le laisser à l'usage. | |
| constexpr int | MAX_PLANE_TEXTURE_EXTENT = 16384 |
| Dimension maximale, en pixels, d'une texture de plan sur un axe (EX-DEC-044) — limite de Direct3D 11 au feature level 11. | |
| constexpr int | LAYER_KIND_COUNT = static_cast<int>(LayerKind::Legacy) + 1 |
| Nombre de valeurs de core::LayerKind — même convention que core::TILE_TYPE_COUNT : toute valeur ajoutée doit l'être avant le dernier énumérateur. | |
| constexpr int | TILE_TYPE_COUNT = static_cast<int>(TileType::Stairs) + 1 |
| Nombre de valeurs de core::TileType — seule source de vérité de la fin de l'énumération (LOT-74 TACHE-02). | |
| constexpr float | EPSILON = 1e-5f |
| Tolérance par défaut pour les comparaisons de flottants issus de calculs. | |
| constexpr float | COLLISION_SKIN = 1e-4F |
| Tolérance géométrique des routines de balayage, en unités monde. | |
| constexpr float | PLAYER_WIDTH = 0.4f |
| Largeur du personnage, en unités monde (une tuile = 1 unité). | |
| constexpr float | PLAYER_HEIGHT = 0.8f |
| Hauteur du personnage, en unités monde. | |
| constexpr int | D20_FACES = 20 |
| Nombre de faces du dé de résolution. Le d20 est la mécanique centrale du jeu. | |
| constexpr std::size_t | EQUIPMENT_SLOT_COUNT = 16 |
| Nombre d'emplacements, pour dimensionner les tableaux qui les indexent. | |
| constexpr float | METERS_PER_TILE = 1.5f |
| Côté d'une case de la grille tactique, en mètres. | |
| constexpr std::size_t | kRegionGradeCount = 5 |
| Nombre de notes — pour les parcours exhaustifs et les contrôles de couverture. | |
| constexpr std::size_t | kRegionAxisCount = 7 |
| Nombre d'axes. | |
Espace de noms du moteur et de la logique de jeu.
| using core::AssertionHandler |
Signature d'un gestionnaire d'échec d'assertion.
| using core::PropertyMap = std::map<std::string, PropertyValue> |
Propriétés libres, indexées par nom.
C'est le mécanisme qui évite un version: 4. Un besoin découvert plus tard — terrain difficile, couverture, hauteur, dialogue d'un PNJ — s'exprime comme une propriété, jamais comme un nouveau champ du format. Le chargeur y range en outre toute clé qu'il ne reconnaît pas, et l'écrivain les réémet : un fichier produit par une version ultérieure de l'éditeur traverse donc une version antérieure sans rien perdre.
std::map (ordonné) et non unordered_map : l'écriture doit être déterministe, faute de quoi deux enregistrements du même niveau produiraient des fichiers différents et pollueraient chaque diff.
| using core::PropertyValue = std::variant<bool, std::int64_t, double, std::string> |
Valeur d'une propriété libre : booléen, entier, réel ou chaîne.
Volontairement un type de Core, jamais un nlohmann::json : Core ne connaît pas le format de fichier (EX-ARCH-001), et la bibliothèque JSON lui est liée en PRIVATE — l'exposer dans un en-tête la propagerait à tous ses consommateurs.
|
strong |
Une des six caractéristiques d'un personnage ou d'une créature (EX-DND-010).
Ensemble fermé : six valeurs, fixées par les règles. Les noms textuels sont ceux du lexique (LOT-30) et de common.schema.json, et scripts/check_rpg_data.py vérifie que les trois listes coïncident.
| Enumerator | |
|---|---|
| Strength | |
| Dexterity | |
| Constitution | |
| Intelligence | |
| Wisdom | |
| Charisma | |
|
strong |
Catégorie d'armure. Ensemble fermé : le livre n'en connaît pas d'autre.
|
strong |
Mode de cadrage de caméra d'un niveau (EX-REN-016) : décision de conception, pas une règle déduite de ses dimensions.
|
strong |
Rythme auquel une classe fait progresser le niveau de lanceur.
Les valeurs viennent d'une phrase du Manuel des Joueurs (p. 166), citée mot pour mot dans scripts/sourcebook/options.py : « additionnez tous les niveaux dans vos classes de barde, de druide, de clerc, d'ensorceleur et de magicien, la moitié de vos niveaux (arrondis à l'entier inférieur) dans les classes de paladin et rôdeur, et un tiers de vos niveaux de guerrier et de roublard (arrondis à l'entier inférieur) si vous avez choisi l'archétype de chevalier occulte ou d'arnaqueur arcanique. »
La correspondance classe → progression est une donnée (Source/Elements/Rpg/rules/multiclassing.json) ; ce type n'en porte que le vocabulaire.
|
strong |
Manière dont un clip se termine à la dernière image.
| Enumerator | |
|---|---|
| Loop | Revient à la première image et continue (comportement historique, EX-REN-012). |
| OneShot | S'arrête à la dernière image puis bascule sur AnimationClip::nextClip (LOT-47). |
|
strong |
|
strong |
État affectant une créature (EX-DND-040, EX-CNT-011).
Ensemble fermé : quinze valeurs. Exhaustion est la seule à ne pas être binaire — elle se mesure en six niveaux — mais elle reste une condition, et l'omettre de cette liste (comme le glossaire du corpus l'omettait de sa catégorie) reviendrait à la rendre invisible au moteur.
| Enumerator | |
|---|---|
| Blinded | |
| Charmed | |
| Deafened | |
| Exhaustion | |
| Frightened | |
| Grappled | |
| Incapacitated | |
| Invisible | |
| Paralyzed | |
| Petrified | |
| Poisoned | |
| Prone | |
| Restrained | |
| Stunned | |
| Unconscious | |
|
strong |
Catégorie de taille d'une créature (EX-CNT-011).
Ensemble fermé : six valeurs, fixées par les règles. Ce n'est pas une donnée décorative — la taille détermine l'emprise sur la grille tactique (LOT-19) et ce qu'une créature peut agripper ou engloutir.
| Enumerator | |
|---|---|
| Tiny | |
| Small | |
| Medium | |
| Large | |
| Huge | |
| Gargantuan | |
|
strong |
Type de dégâts infligés (EX-CBT-032, EX-CNT-011).
Ensemble fermé : treize valeurs, fixées par les règles et non par le corpus. Les trois premières sont les dégâts physiques — contondant, perforant, tranchant — dont dépend la résistance des créatures aux armes non magiques ; les dix autres sont élémentaires ou surnaturels. Un type inconnu du moteur ne doit jamais tomber dans un cas par défaut silencieux (EX-CBT-032) — d'où le switch exhaustif de Core/Rpg/RpgEnumNames.h.
Les noms textuels sont ceux du lexique de traduction (LOT-30), catégorie type de dégâts : scripts/check_rpg_data.py vérifie que les treize valeurs de cette énumération sont exactement les treize termes anglais que le lexique porte sous cette catégorie. Le moteur, les schémas et la table d'autorité de traduction disent donc le même mot pour la même chose, ou la CI échoue.
| Enumerator | |
|---|---|
| Acid | |
| Bludgeoning | |
| Cold | |
| Fire | |
| Force | |
| Lightning | |
| Necrotic | |
| Piercing | |
| Poison | |
| Psychic | |
| Radiant | |
| Slashing | |
| Thunder | |
|
strong |
État de charge d'un personnage, dans l'ordre croissant de gêne.
|
strong |
Les seize emplacements d'équipement de la planche 2 du corpus.
L'ordre est celui de la feuille, colonne gauche puis colonne droite, et il est relevé et non choisi : c'est celui que l'écran d'inventaire suit pour poser ses lignes.
| Enumerator | |
|---|---|
| Head | |
| Neck | |
| Cloak | |
| Torso | |
| Belt | |
| Hands | |
| RingLeft | |
| RingRight | |
| MainHand | |
| OffHand | |
| Ranged | |
| Ammunition | |
| Feet | |
| Bracers | |
| Pouch | |
| Trinket | |
|
strong |
Catégorie d'échec de lecture d'un document JSON.
Les cinq catégories que les six lecteurs du dépôt avaient chacun redéfinies pour leur compte (hmi::SkinCatalogError, hmi::SoundCatalogError, hmi::AnimationCatalogError…). Elles sont ici une seule fois : deux définitions de « version non gérée » finissent par diverger sur ce qu'elles recouvrent.
|
strong |
Rôle d'une couche de tuiles dans une carte.
Un RPG en vue de dessus a besoin d'au moins trois couches là où un jeu de plateforme se contentait d'une grille unique :
Legacy désigne la grille unique d'une carte au format version: 2, promue telle quelle au chargement : elle vaut à la fois décor et collision, comme dans le format d'origine.
| Enumerator | |
|---|---|
| Ground | |
| Decor | |
| Collision | |
| Legacy | |
|
strong |
|
strong |
Catégorie d'échec de chargement/validation d'un niveau (LOT-15, EX-EDIT-012).
Complète le message technique (LevelLoadResult::error) d'un code programmatique, pour qu'un appelant (l'éditeur) puisse traduire une erreur en message non-codeur sans dépendre du texte exact du message — une correspondance de sous-chaînes s'y casserait silencieusement au moindre changement de formulation.
|
strong |
|
strong |
|
strong |
Effet visuel à l'origine d'une particule – tag opaque pour Core, exploité par le rendu (HMI) pour choisir calque, teinte et texture (LOT-53 TACHE-03), sans que Core n'ait à connaître ces notions de présentation (EX-NFR-011).
| Enumerator | |
|---|---|
| DashTrail | Traînée continue émise pendant un dash (LOT-53 TACHE-02). |
| LandingDust | Bouffée de poussière à l'atterrissage. |
| Death | Éclatement à la mort du personnage. |
|
strong |
Position d'un plan dans l'ordonnancement de rendu, relativement au personnage (EX-DEC-042).
Deux valeurs, pas trois. Le système de décors qu'il remplace en déclarait trois (Background, Decor, Foreground) mais la projection vers les calques de rendu en écrasait déjà deux sur la même : les trois couches de conception n'exprimaient que deux intentions de superposition. On acte la simplification plutôt que de la reproduire.
Core ne connaît pas hmi::RenderLayer (EX-NFR-011) : la projection vers les calques de rendu est le travail de HMI.
| Enumerator | |
|---|---|
| Behind | Derrière les tuiles physiques. |
| Front | Devant le personnage (EX-DEC-042) : c'est le moyen de lecture qui distingue d'un coup d'œil le décor traversable du décor physique. |
|
strong |
|
strong |
Les cinq notes de l'encart « Regional Statistics » (EX-CNT-060).
Fermée, et ordonnée du plus bas au plus haut : une note se compare, et c'est tout l'intérêt de la typer. monsterPresence >= RegionGrade::High doit vouloir dire quelque chose, sinon autant garder la chaîne du livre.
Les valeurs coïncident avec l'énumération de region.schema.json ; test_atlas.cpp le vérifie (EX-CNT-011).
| Enumerator | |
|---|---|
| VeryLow | |
| Low | |
| Normal | |
| High | |
| VeryHigh | |
|
strong |
Comment le d20 est lancé.
Advantage et Disadvantage ne se cumulent pas (EX-DND-002) : plusieurs sources d'avantage donnent un avantage, et une source de chaque s'annule entièrement. C'est rollStance qui applique cette règle, à partir du décompte des sources — jamais l'appelant, qui aurait à arbitrer une pile de bonus contre toutes les autres à chaque capacité ajoutée.
| Enumerator | |
|---|---|
| Normal | |
| Advantage | |
| Disadvantage | |
|
strong |
Type d'une tuile de la grille d'une carte (EX-GP-001).
Empty est la case traversable par défaut ; Solid bloque le déplacement ; Danger provoque l'échec au contact ; Entry/Exit sont l'apparition et la sortie. Switch, PressurePlate et Door sont les mécanismes classiques — l'interrupteur bascule au contact, la plaque reste active tant qu'un poids y repose, les deux ouvrant une porte liée. Key/LockedDoor sont la seconde paire déclencheur↔cible, la clé ouvrant sa porte définitivement. Block est un bloc poussable.
Le LOT-08 y ajoute le vocabulaire du terrain en vue de dessus (EX-EXP-005) : Grass, Dirt, Sand, Water et DeepWater (sols, les quatre premiers traversables), Wall et Cliff (obstacles), Bridge et Stairs (passages). Il ajoute sans rien remplacer : le vocabulaire de puzzle hérité sert tel quel au RPG.
| Enumerator | |
|---|---|
| Empty | |
| Solid | |
| Danger | |
| Entry | |
| Exit | |
| Switch | |
| Door | |
| PressurePlate | |
| Block | |
| Key | |
| LockedDoor | |
| Grass | Herbe : le sol par défaut d'une carte extérieure. |
| Dirt | Terre battue : chemins, cours, sols d'intérieur sommaires. |
| Sand | Sable : plages et déserts. Traversable, comme l'herbe et la terre. |
| Water | Eau peu profonde : traversable — on y patauge. Sa distinction d'avec DeepWater est la seule chose qui permette à une rive d'exister. |
| DeepWater | Eau profonde : infranchissable tant qu'aucune règle de nage n'existe (isSolid). |
| Wall | Mur : la matière pleine bâtie, distincte de Solid (matière générique du socle) parce que l'éditeur et l'habillage doivent pouvoir les vêtir différemment. |
| Cliff | Falaise : rupture de relief infranchissable, l'obstacle naturel du décor extérieur. |
| Bridge | Pont : franchit l'eau ou un ravin. Traversable, et c'est tout son intérêt. |
| Stairs | Escalier : liaison verticale d'une carte à l'autre, traversable. Ce qu'il relie est une donnée du graphe de cartes (LOT-09), jamais du type de tuile. |
|
nodiscardconstexprnoexcept |
Modificateur d'une valeur de caractéristique : (score - 10) / 2, arrondi vers le bas.
L'arrondi est le piège de cette fonction, et il ne se voit que sur les scores impairs inférieurs à 10. En C++, la division entière tronque vers zéro : (7 - 10) / 2 vaut -1, alors que la règle donne -2. Un personnage avec 7 en Force serait donc moins pénalisé qu'il ne doit l'être, sur chacun de ses jets, pendant toute la partie — et le défaut est invisible à la lecture puisque la formule a l'air juste.
L'implémentation décale donc de 1 vers le bas avant de diviser, ce qui revient au plancher pour les valeurs négatives comme positives.
| score | Valeur de caractéristique, typiquement dans [1, 30]. |
|
nodiscardnoexcept |
Nom textuel d'une caractéristique, tel que les données l'écrivent.
|
nodiscard |
Applique les augmentations d'une espèce à une valeur de caractéristique.
La seule opération que le moteur ait à faire sur une espèce, et elle est ici pour ne pas être réécrite à chaque écran qui affiche une fiche.
maximumScore est un paramètre et non une constante (EX-VIS-007) : le plafond vient de rules/character-creation.json, où il est extrait de la phrase qui l'atteste — « Vous ne pouvez pas augmenter une valeur de caractéristique au-delà de 20 », Basic Rules p. 11. Écrit ici, il ferait d'un ajustement d'équilibrage une recompilation.
| void core::addToBackpack | ( | Inventory & | inventory, |
| const std::string & | itemId, | ||
| int | quantity ) |
Ajoute quantity exemplaires de itemId au sac, en empilant si la ligne existe déjà.
| void core::advanceAnimation | ( | Animation & | animation, |
| float | fixedDelta ) |
Fait progresser une seule animation d'un pas fixe (image courante, bouclage/bascule).
Extrait de AnimationSystem::update pour être réutilisable hors ECS : LOT-46 TACHE-05 anime des tuiles partageant un même asset (eau, lave) via une horloge unique par asset plutôt qu'une entité par case, précisément pour éviter de répéter cette progression une fois par case. Sans effet si animation.clips est nul ou vide (EX-NFR-040).
| animation | État d'animation à faire progresser. |
| fixedDelta | Durée du pas de simulation, en secondes. |
|
nodiscard |
La case que vise un personnage, d'après son orientation.
L'orientation est un vecteur libre (core::Actor::facing) et la case visée est la voisine dans la direction dominante — jamais une diagonale. Un personnage qui regarde à 30° vise la case de droite, pas celle du coin : viser en diagonale rendrait la cible imprévisible sur une manette analogique, alors que le joueur doit savoir ce qu'il désigne avant d'appuyer.
Une orientation nulle ne vise rien et renvoie la case du personnage lui-même : c'est le cas d'un facing non initialisé, et rendre une voisine arbitraire ferait ouvrir un coffre que le joueur ne regarde pas.
|
nodiscardnoexcept |
Les six caractéristiques, dans l'ordre de la fiche.
|
nodiscard |
|
nodiscard |
|
nodiscard |
|
nodiscard |
|
inlinenodiscard |
Compare deux flottants à une tolérance relative-absolue près.
Évite les faux négatifs des comparaisons == brutes sur des résultats calculés, tout en restant robuste pour les grandes magnitudes (tolérance mise à l'échelle par le plus grand opérande).
| lhs | Premier opérande. |
| rhs | Second opérande. |
| tolerance | Tolérance de base (défaut : core::EPSILON). |
|
nodiscard |
Nom textuel d'une catégorie d'armure, tel que la donnée l'écrit.
|
nodiscard |
La classe d'armure d'un personnage, armure et bouclier compris.
Les trois formes de la table du livre disent trois règles différentes, et les réduire à leur premier nombre est la faute qui ne se voit pas :
Appliquer la Dextérité au harnois rendrait le personnage plus résistant, jamais moins : le défaut ne provoque aucune erreur et passe pour de l'équilibrage.
Sans armure, la base vient de la donnée (rules/character-creation.json, LOT-13) et non d'un 10 écrit ici (EX-VIS-007).
| sheet | La fiche, pour son modificateur de Dextérité. |
| rules | Les constantes de création, pour la base sans armure. |
| armor | L'armure portée, ou nullptr. |
| shield | Le bouclier porté, ou nullptr. |
|
nodiscard |
Peint le marqueur d'une clé d'asset.
EX-CNT-041 : le jeu doit tourner complet avant qu'aucune illustration ne soit produite. Sans marqueur, trois cents entrées s'afficheraient comme des trous, la production graphique deviendrait un préalable bloquant, et rien ne pourrait être joué ni relu avant elle. Avec, elle devient un remplacement progressif : on remplace un marqueur par une image, une à la fois, et le jeu ne cesse jamais d'être jouable.
La même clé donne toujours le même marqueur — même teinte, même figure. Un marqueur tiré au hasard changerait à chaque lancement : le loup ne serait plus reconnaissable d'une partie à l'autre, deux captures d'écran du même combat différeraient, et un test ne pourrait rien en dire. La teinte est donc dérivée de la clé elle-même, par un hachage stable écrit ici plutôt qu'emprunté à std::hash, dont la valeur n'est pas garantie d'une plateforme ou d'une version de bibliothèque à l'autre.
Le marqueur reste manifestement un marqueur : deux diagonales barrent la vignette, de sorte qu'on ne le prenne jamais pour une illustration définitive livrée un peu vite.
| key | La clé, famille/identifiant. Une clé malformée rend une image vide. |
| width | Largeur voulue, celle que la famille attend. |
| height | Hauteur voulue. |
|
nodiscard |
Engage encounter au point trigger, en mettant exploration de côté.
| encounter | La rencontre, telle que la donnée la décrit. |
| exploration | L'état d'exploration à retrouver ensuite. |
| trigger | La case du déclencheur : les combattants s'y placent relativement. |
| defeatFlagKey | Le drapeau qu'une victoire acquerra, ou une chaîne vide. |
|
nodiscard |
Construit une fiche depuis une espèce, une classe et un historique.
Les trois catalogues du LOT-36 deviennent ici une fiche jouable : les augmentations de l'espèce s'appliquent aux valeurs de base, la classe donne le dé de vie et les jets de sauvegarde, l'historique les compétences maîtrisées.
| name | Le nom du personnage, tel qu'il s'affichera. |
| baseAbilities | Les six valeurs avant augmentation d'espèce, dans l'ordre de core::Ability. |
| species | Peut être nullptr — une créature sans espèce est légitime. |
| playableClass | Peut être nullptr, auquel cause la fiche n'a ni dé de vie ni sauvegardes. |
| background | Peut être nullptr. |
| rules | Les constantes de création, lues dans la donnée. |
| table | La table d'expérience, pour le seuil du niveau de départ. |
| void core::buildLevelScene | ( | World & | world, |
| const Level & | level, | ||
| const std::function< AtlasRegion(TileType)> & | regionForTile, | ||
| const std::function< void(Entity, LayerKind, TileType, int, int)> & | onTileEntity = {} ) |
Peuple un World d'une entité par tuile non vide du niveau.
Chaque tuile non Empty devient une entité portant un Transform (position = colonne, ligne en unités monde) et un Sprite (couche 0, région fournie par regionForTile). Logique pure, indépendante du rendu (EX-ARCH-011) : la correspondance type de tuile → région d'atlas est injectée, ce qui rend la projection testable sans GPU (une fausse correspondance suffit).
| world | Monde à peupler. |
| level | Niveau source. |
| regionForTile | Correspondance type de tuile → région d'atlas (dépendance de rendu injectée). |
| onTileEntity | Rappel invoqué après la création de chaque entité tuile, avec le rôle de sa couche, son type et sa case. Permet à la couche de présentation d'y attacher ses propres composants (hmi::TileSkinTag, LOT-42, et depuis le LOT-07 le calque de dessin d'une tuile de décor) sans que Core connaisse ni l'habillage ni les calques (EX-NFR-011) — même principe d'injection que regionForTile. Vide par défaut. |
Le rôle est passé plutôt que l'indice de couche : ce qui décide de la présentation d'une tuile, c'est ce qu'elle est (un sol, un décor), pas son rang dans une liste que l'auteur de la carte peut réordonner.
Ne peuple que les tuiles. Les plans picturaux (EX-DEC-040, LOT-69) qui ont remplacé les décors-sprites ne sont pas des entités : ce sont des données d'habillage du niveau, composées directement par HMI sans passer par l'ECS.
|
nodiscardnoexcept |
Nom JSON du mode (symétrique à parseCameraFramingMode), pour la sérialisation.
|
nodiscard |
Le poids total porté, sac et équipement compris, en grammes.
|
nodiscard |
Nom textuel d'une progression, tel que multiclassing.json l'écrit.
|
nodiscard |
|
nodiscard |
|
nodiscard |
Horodatage courant local, au format "HH:MM:SS".
|
nodiscard |
|
nodiscard |
La clé par défaut d'une entrée : famille/identifiant.
Une donnée n'a pas à écrire sa clé quand celle-ci se déduit : trois cents entrées porteraient alors trois cents lignes recopiées, et la première faute de frappe donnerait une créature sans image sans que rien ne l'explique. Le champ asset d'une donnée sert donc à déroger — deux entrées qui partagent une illustration —, pas à répéter.
family ou id ne respecte pas la syntaxe.
|
nodiscard |
Journaliseur global de l'application (utilisé par les macros de log).
|
nodiscard |
Calcule tout ce que l'équipement porté produit, depuis la fiche et les catalogues.
| sheet | La fiche, pour ses caractéristiques et sa vitesse de base. |
| inventory | Ce qui est porté. |
| lookup | Les catalogues. |
| creation | Les constantes de création, pour la CA sans armure. |
| carrying | Les bornes de charge. Non chargées, la charge reste Unencumbered et la capacité vaut zéro : la fiche ne prétend pas connaître une règle qui manque. |
|
nodiscardconstexprnoexcept |
Combine une graine de base, un numéro de pas et un identifiant reproductible en une graine unique, propre à ce triplet (LOT-53 TACHE-01).
Reproductible quel que soit l'ordre ou le nombre d'appels : deux tirages faits pour le même triplet (graine, pas, identifiant) produisent toujours la même graine dérivée, jamais dépendante d'un compteur mutable partagé entre appels.
| baseSeed | Graine de base, explicite. |
| step | Numéro de pas de simulation courant. |
| entityId | Identifiant reproductible (core::Entity::index, par exemple). |
|
nodiscard |
Vrai si cette rencontre a déjà été gagnée, et ne doit donc pas se redéclencher.
Une clé vide n'est jamais acquise : c'est le cas d'une zone de rencontre, qui se redéclenche par construction. Répondre « déjà nettoyée » pour une clé vide désactiverait toutes les zones du jeu dès le premier combat gagné.
|
nodiscard |
Lit entity comme un déclencheur de rencontre, s'il en est un.
Deux natures de déclencheur, distinguées par la donnée et non par le type d'entité :
Confondre les deux se paierait dans les deux sens : un ennemi sans clé réapparaîtrait à chaque passage, et une zone avec clé s'éteindrait au premier combat gagné.
| entity | L'entité de la couche objects. |
| mapName | Le nom de la carte, qui ouvre la clé de drapeau — deux cartes ne se marchent jamais dessus. |
|
nodiscard |
Termine run, et rend l'état d'exploration à restituer.
Seule une victoire acquiert le drapeau. Une fuite ramène à l'exploration sans marquer l'ennemi vaincu — sans quoi fuir suffirait à nettoyer une carte —, et une défaite non plus : le groupe est tombé, l'ennemi est toujours là.
| run | La rencontre engagée. |
| outcome | Comment elle s'est terminée. |
| flags | Les drapeaux de monde, où une victoire écrit. |
| std::string core::equip | ( | Inventory & | inventory, |
| EquipmentSlot | slot, | ||
| std::string | itemId ) |
Équipe itemId à slot, et rend ce que l'emplacement portait.
Aucune règle de compatibilité n'est appliquée ici : ranger une armure à l'emplacement de tête est une question de donnée et d'interface, pas de cette fonction. Ce qu'elle garantit est plus étroit et plus utile : l'emplacement ne porte jamais deux choses, et ce qui en sort est rendu à l'appelant plutôt que perdu.
|
nodiscard |
Nom textuel d'un emplacement, tel que la donnée et les clés de traduction l'écrivent.
|
nodiscard |
Détermine l'issue du niveau à partir de la boîte du personnage.
Fonction pure d'observation (ne modifie rien) : elle classe l'état courant, sans déclencher de transition (le retour au menu ou le redémarrage relèvent de l'intégration). Priorité déterministe en cas de recouvrement simultané : l'échec l'emporte sur le succès.
Les dangers statiques (Danger, DangerUp/DangerDown/DangerLeft/DangerRight, EX-GP-050) sont résolus directement depuis la grille du niveau (via core::dangerHitbox) : ce module (Core/Levels) n'a pas de dépendance vers Core/Gameplay, donc pas de connaissance des contrôleurs qui font vivre les dangers à état (mobile, commuté, temporisé — EX-GP-051/ 052/053). Leurs boîtes actuellement mortelles, calculées par l'appelant (core::DangerController, core::MechanismController) qui possède déjà cet état, sont passées via extraDangerBoxes plutôt que dupliquées ici.
| playerBox | Boîte englobante du personnage, en unités monde. |
| level | Niveau courant (sortie, tuiles de danger statique, limites de la grille). |
| extraDangerBoxes | Boîtes mortelles supplémentaires, hors grille statique (dangers mobile/ commuté/temporisé actuellement actifs) ; vide par défaut (niveaux sans danger à état, ou appelants qui ignorent ces variantes). |
extraDangerBoxes) ou sortie par le bas ; sinon Won si la sortie est recouverte ; sinon Playing.
|
nodiscard |
Énumère les clés qu'attendent les catalogues de rpgDir, selon families.
Le manifeste est dérivé, jamais tenu à la main : un fichier de manifeste commité divergerait du catalogue au premier ajout de créature, et c'est la copie oubliée qu'on lit six mois plus tard. Le dériver à chaque appel coûte un balayage de dossier et ne peut pas mentir.
| rpgDir | Racine des catalogues (Source/Elements/Rpg). |
| families | La table des familles. |
| errors | Reçoit les clés orphelines : une dérogation malformée, ou qui nomme une famille inconnue. C'est le seul cas qui doit faire échouer une vérification — une clé sans image, elle, est un état d'avancement (EX-CNT-041). |
|
nodiscard |
Réduit un chemin source à son seul nom de fichier.
| path | Chemin complet (tel que fourni par __FILE__). |
|
nodiscard |
Désigne la cible d'interaction d'un personnage.
Trois règles, et chacune répond à un critère d'acceptation du lot :
Une cible dont le drapeau de consommation est déjà levé n'est pas retenue : un coffre vidé n'est plus une cible, et continuer à l'afficher comme telle promettrait au joueur quelque chose qui n'arrivera pas.
| from | Case du personnage. |
| facing | Orientation du personnage. |
| map | La carte, pour la règle du mur. |
| candidates | Les entités interactives de la carte. |
| flags | Les drapeaux de monde, pour écarter ce qui est déjà consommé. |
|
nodiscard |
Réécrit une expression en notation canonique (2d6+3, 1d8, 4).
|
nodiscard |
Compose une ligne de journalisation.
| timestamp | Horodatage déjà formaté (injecté, pour rester testable). |
| level | Niveau du message. |
| category | Catégorie / sous-système émetteur (ex. "HMI"). |
| file | Fichier source (le nom seul est conservé dans la ligne). |
| line | Ligne source à l'origine du message. |
| message | Texte du message. |
| LevelUpResult core::gainExperience | ( | CharacterSheet & | sheet, |
| const ExperienceTable & | table, | ||
| int | hitDie, | ||
| int | amount ) |
Ajoute des points d'expérience et applique la montée de niveau qui en découle.
Reproductible : aucune part de hasard, et le résultat ne dépend que de la fiche, de la table et du montant. Le franchissement de plusieurs seuils d'un coup est traité comme le livre le décrit — le personnage atteint le niveau que son total lui donne, pas le suivant.
| sheet | La fiche, modifiée sur place. |
| table | La table d'expérience. |
| hitDie | Le dé de vie de la classe, pour recalculer les points de vie. |
| amount | Les points gagnés. Un montant négatif est ignoré : perdre de l'expérience n'est pas une règle de ce jeu, et l'accepter en silence ferait descendre un personnage de niveau sans que rien ne l'annonce. |
| void core::handleAssertionFailure | ( | const char * | condition, |
| const char * | message, | ||
| const char * | file, | ||
| int | line ) |
Invoque le gestionnaire d'échec d'assertion courant.
| condition | Texte de la condition ayant échoué. |
| message | Message explicatif. |
| file | Fichier source. |
| line | Ligne source. |
| InteractionOutcome core::interact | ( | const InteractionTarget & | target, |
| WorldFlags & | flags ) |
Résout une interaction sur une cible désignée, en levant son drapeau s'il y a lieu.
C'est ici que « deux fois ne donne qu'une fois » se joue. Le drapeau est levé et sa valeur de retour dit s'il était neuf ; l'appelant n'a pas à demander d'abord puis à écrire ensuite, séquence dans laquelle un second appel pourrait se glisser.
|
nodiscardconstexprnoexcept |
Indique si un type de tuile bloque le déplacement de manière statique.
| type | Type de tuile. |
|
nodiscard |
Vrai si key respecte la syntaxe d'une clé d'asset.
famille/identifiant, en minuscules, chiffres et tirets simples — la même expression que celle du schéma JSON (common.schema.json, $defs/assetKey), pour que la donnée refusée à la validation soit exactement celle que le moteur refuse.
Ce n'est jamais un chemin de fichier (EX-CNT-040) : un chemin dans une donnée de règle lie le catalogue à l'arborescence du disque, et tout déplacement de dossier casse alors des créatures. La clé, elle, survit à n'importe quel rangement.
|
nodiscardconstexprnoexcept |
Densité acceptée pour un plan (EX-DEC-041).
pixelsPerUnit est un entier et non une énumération : il sert directement au calcul des dimensions attendues (width * pixelsPerUnit), et une énumération imposerait une table de conversion à chaque site d'appel. La contrainte est donc validée au chargement, pas portée par le type.
| pixelsPerUnit | Densité à vérifier. |
|
nodiscard |
La clé de drapeau d'une entité de carte : "<carte>/<type>@<colonne>,<ligne>".
Fabriquée, jamais écrite à la main. Deux coffres d'une même carte se distinguent par leur case ; deux cartes différentes ne se marchent pas dessus parce que le nom de carte ouvre la clé. Laisser l'auteur de la carte nommer le drapeau produirait tôt ou tard deux coffres partageant la même clé — et le second serait vide dès sa première ouverture, sans que rien ne l'explique.
La position sert d'identité parce que c'est la seule chose qu'une entité de carte possède en propre et qui ne bouge pas. Corollaire assumé : déplacer un coffre dans l'éditeur le remet à neuf pour une partie déjà commencée. C'est le bon compromis — l'inverse demanderait un identifiant stable écrit dans le fichier de carte, que le LOT-11 devrait générer et maintenir unique.
|
nodiscard |
Les familles connues de ce lot. Le LOT-15 et le LOT-09 en ajouteront.
|
nodiscardconstexprnoexcept |
Nom JSON d'un rôle de couche.
Déclaré ici, et non dans le chargeur ou l'écrivain, parce que les deux en ont besoin et qu'un rôle nommé différemment de part et d'autre casserait l'aller-retour sans qu'aucun test unitaire de l'un ou de l'autre pris isolément ne le voie. Le switch est exhaustif et sans default : un rôle ajouté sans nom ne compile pas, plutôt que de retomber silencieusement sur une valeur arbitraire.
|
nodiscard |
Charge la table des familles depuis Assets/Entities/families.json.
|
nodiscard |
Charge l'atlas — regions/ et locations/ sous le dossier donné.
Les deux dossiers sont balayés, jamais énumérés dans le code : le LOT-80 ajoutera des lieux, et une liste écrite ici les rendrait invisibles.
| directory | Dossier de l'atlas (Source/Elements/World). |
|
nodiscard |
Charge toutes les créatures d'un dossier — un fichier JSON par créature.
Le dossier est balayé, jamais énuméré dans le code : une liste de quatre-vingt-quatorze noms écrite en C++ serait une seconde source de vérité, et la première créature ajoutée par le LOT-46 en sortirait invisible.
| directory | Dossier des créatures (Source/Elements/Rpg/creatures). |
|
nodiscard |
Charge les constantes depuis Source/Elements/Rpg/rules/character-creation.json.
|
nodiscard |
Charge les trois catalogues depuis leurs dossiers.
Chaque dossier est balayé, jamais énuméré dans le code : une liste de noms écrite en C++ serait une seconde source de vérité, et la première espèce ajoutée par un lot suivant en sortirait invisible.
| speciesDir | Dossier des espèces (Source/Elements/Rpg/species). |
| backgroundsDir | Dossier des historiques. |
| classesDir | Dossier des classes. |
|
nodiscard |
Charge un personnage depuis son fichier JSON (Source/Elements/Rpg/characters/, schéma character.schema.json) et construit sa fiche.
Le fichier ne porte que des choix — espèce, classe, historique, valeurs de caractéristique avant augmentation, niveau visé. Tout le reste est dérivé ici par buildCharacterSheet et par la montée en expérience : points de vie, classe d'armure, valeurs finales, bonus de maîtrise. Écrire ces valeurs dans le fichier en ferait une seconde source, qui différerait de la première au premier ajustement de règle — et personne ne saurait laquelle croit.
Le niveau s'atteint par gain d'expérience, le même chemin qu'une partie empruntera : donc les mêmes points de vie qu'un personnage monté en jouant, et non une variante propre au chargement.
Ne lève jamais (EX-NFR-040) : un fichier absent, mal formé ou référençant un identifiant inconnu rend une fiche partielle et une erreur nommée (EX-CNT-010).
|
nodiscard |
Charge les rencontres depuis leur dossier (Rpg/encounters/).
|
nodiscard |
Charge les bornes de charge depuis rules/encumbrance.json.
|
nodiscard |
Charge les armes et les armures depuis leurs dossiers.
|
nodiscard |
Charge la table d'expérience depuis Source/Elements/Rpg/rules/experience.json.
|
nodiscard |
Charge les objets depuis leur dossier (Rpg/items/).
|
nodiscard |
Charge le catalogue des compétences depuis son dossier.
| directory | Source/Elements/Rpg/skills. |
|
nodiscard |
|
nodiscard |
Les points de vie d'un niveau, selon la règle du livre.
« Vous pouvez aussi choisir d'utiliser la valeur fixe indiquée dans la description de votre classe, qui se trouve être la valeur moyenne (arrondie au supérieur) du dé » — Basic Rules p. 11. C'est la voie déterministe, et c'est celle que le moteur emploie : des points de vie tirés au dé rendraient une partie irrejouable, ce qu'EX-NFR-002 interdit.
Le niveau 1 reçoit le maximum du dé ; chaque niveau suivant sa moyenne arrondie au supérieur. Le modificateur de Constitution s'ajoute à chaque niveau, et le gain d'un niveau vaut au minimum 1 : un personnage à la Constitution désastreuse gagne peu de points de vie, il n'en perd pas.
| hitDie | Le dé de vie de la classe, lu dans sa donnée (hitDie du catalogue). |
| level | Le niveau atteint, à partir de 1. |
| constitutionModifier | Le modificateur de Constitution. |
|
nodiscardconstexprnoexcept |
Convertit un nombre de cases en mètres, pour l'affichage et les infobulles.
|
nodiscard |
Niveau de lanceur cumulé d'un personnage multiclassé.
La règle qu'il est le plus facile d'implémenter de travers (EX-RPG-041), pour deux raisons qui se cumulent :
Un lanceur multiclassé mal calculé reste jouable, simplement faux : c'est pourquoi cette fonction est vérifiée contre l'exemple travaillé du livre lui-même — un rôdeur 4/magicien 3 est « considéré comme un personnage de niveau 5 ».
| classes | Les niveaux pris dans chaque classe. Une classe absente n'apporte rien. |
|
nodiscardconstexprnoexcept |
Égalité approchée entre deux vecteurs (comparaison par tolérance).
| lhs | Premier opérande. |
| rhs | Second opérande. |
|
nodiscardconstexprnoexcept |
|
nodiscardnoexcept |
Inverse d'abilityName. std::nullopt si le nom est inconnu — jamais deviné.
|
nodiscard |
Inverse d'armorCategoryName. std::nullopt si le nom est inconnu — jamais deviné.
|
nodiscard |
Décompose key. std::nullopt si elle est malformée — jamais devinée.
|
nodiscardnoexcept |
Reconnaît le nom JSON d'un mode ; std::nullopt si non reconnu (mode inconnu, EX-LVL-004).
|
nodiscard |
Convertit le nom d'une progression, tel que la donnée l'écrit, en valeur.
Inverse de casterProgressionName. Un nom inconnu renvoie std::nullopt : c'est une donnée invalide à signaler, jamais une progression devinée — deviner None ferait taire un lanceur.
|
nodiscard |
|
nodiscard |
|
nodiscard |
|
nodiscard |
Analyse une notation NdF, NdF+M, NdF-M ou une valeur fixe.
| notation | La notation, sans espace. La casse du d est indifférente. |
|
nodiscard |
Inverse d'equipmentSlotName. std::nullopt si le nom est inconnu — jamais deviné.
|
inlinenodiscard |
Convertit une chaîne en niveau de log (insensible à la casse).
| text | Nom du niveau : « trace », « info », « warning » (ou « warn »), « error ». |
|
nodiscard |
|
nodiscard |
Convertit un nom textuel en type de tuile.
Inverse exact de core::tileTypeName : tout nom qu'il produit est accepté ici, et réciproquement (propriété vérifiée par test sur les trente types).
| name | Nom textuel, tel qu'écrit dans un fichier. |
|
nodiscard |
Place les combattants d'une rencontre autour de trigger.
Fonction pure : aucune carte, aucun monde ECS, aucune collision. Ce qu'elle produit est une liste de cases voulues — c'est au montage de la rencontre de refuser celles qui tombent dans un mur, et il ne peut le faire que s'il les reçoit toutes.
|
nodiscard |
Jeu de clips du personnage, migré tel quel depuis l'ancien dispositif figé (LOT-18), étendu aux états aériens/dash livrés par LOT-10/LOT-11 (LOT-48 TACHE-02).
Sept clips nommés : « idle », « run », « jump » (mêmes durées/nombres d'images qu'avant LOT-46, LOT-46 TACHE-04), plus « fall », « land », « wallslide », « dash » (LOT-48). Ces quatre nouveaux clips n'ont pas de pose procédurale dédiée (hmi::PlayerClipKind reste limité à trois poses) : c'est HMI (hmi::resolveDeclaredPlayerClip) qui les fait retomber sur le clip le plus proche déclaré, aussi bien pour l'atlas procédural que pour une spritesheet externe partielle — Core n'a pas à le savoir (EX-ARCH-012).
Instance partagée (même shared_ptr renvoyé à chaque appel) : tous les personnages d'une session utilisent le même jeu de clips, immuable.
|
inlinenodiscard |
|
inlinenodiscard |
Coin haut-gauche du personnage centré dans la tuile (column, row).
Marges symétriques : la boîte 0,4 × 0,8 est centrée dans la tuile 1×1 (repère haut-gauche, y vers le bas). Évite de faire apparaître le personnage collé à un bord de la tuile.
|
nodiscard |
Convertit un décalage en octets en ligne et colonne.
| text | Le texte d'origine. |
| byteOffset | Décalage, tel que rapporté par nlohmann::json::parse_error::byte. |
|
nodiscard |
Le bonus de maîtrise de la fiche, lu dans la table au niveau courant.
|
nodiscard |
Lit l'enveloppe commune d'un catalogue : JSON bien formé, racine objet, garde de version.
C'est la routine que les six lecteurs du dépôt réimplémentaient à l'identique. Le champ de version absent vaut 1 — un catalogue écrit avant que le format ne se versionne reste lisible ; une version supérieure à supportedVersion est refusée explicitement, jamais lue au mieux : un fichier plus récent que le jeu contient par définition ce que le jeu ne sait pas interpréter.
| json | Contenu JSON. |
| supportedVersion | Version la plus élevée que le lecteur sait lire. 0 désactive la garde : l'appelant porte alors sa propre catégorie d'échec de version, ce qui est le cas du chargeur de niveaux (core::LevelValidationError::UnsupportedFormatVersion). |
| origin | Nom à faire figurer dans les messages (« sounds.json »). Facultatif. |
| versionField | Nom du champ de version. Vaut "version" par défaut. |
|
nodiscard |
Comme readJsonObject, en lisant d'abord le fichier.
Un fichier absent produit FileNotFound plutôt qu'un document vide : c'est à l'appelant de décider qu'un catalogue absent est un état de départ légitime, et cette décision ne peut pas être prise ici.
| path | Chemin du fichier. |
| supportedVersion | Version la plus élevée que le lecteur sait lire. |
| versionField | Nom du champ de version. |
|
nodiscard |
Le nom d'un axe, tel que le schéma l'écrit (citizenFreedom, …).
|
nodiscard |
La note portant ce nom de schéma, ou std::nullopt.
|
nodiscard |
Le nom d'une note, tel que le schéma l'écrit (veryLow, normal, …).
| int core::removeFromBackpack | ( | Inventory & | inventory, |
| const std::string & | itemId, | ||
| int | quantity = 1 ) |
Retire quantity exemplaires de itemId.
|
nodiscardnoexcept |
Résout le cadrage effectif d'un niveau à partir du champ déclaré (peut être absent).
Unique endroit incarnant la règle de repli (EX-LVL-006) : un niveau sans mode déclaré est cadré sur le niveau entier s'il tient dans une salle de taille par défaut, et par salle sinon. Un mode déclaré explicitement est retourné tel quel, sans substitution.
| declared | Cadrage déclaré dans le fichier, ou std::nullopt si le champ est absent. |
| levelWidth | Largeur du niveau, en cases (> 0). |
| levelHeight | Hauteur du niveau, en cases (> 0). |
|
nodiscard |
Lance un d20 contre un seuil.
| target | Seuil visé : un degré de difficulté (Source/Elements/Rpg/rules/difficulty.json) ou une classe d'armure. Jamais un littéral dans le code appelant (EX-DND-021) : un nombre nu dans un if ne dit pas ce qu'il représente, et régler l'équilibre du jeu ne doit pas demander de recompiler. |
| modifiers | Les modificateurs, avec leur origine. |
| stance | Avantage, désavantage, ou ni l'un ni l'autre — voir rollStance. |
| random | Générateur déterministe (EX-NFR-002). |
|
nodiscard |
Lance une expression avec un générateur déterministe.
Le déterminisme n'est pas un confort : sans lui, aucun test de combat n'est écrivable (EX-NFR-002). Le générateur est passé par référence et jamais créé ici, pour que l'appelant reste maître de la graine et de la position dans la suite.
|
nodiscardconstexprnoexcept |
Détermine la posture depuis le nombre de sources de chaque type (EX-DND-002).
Deux avantages et un désavantage donnent Normal, pas Advantage : la règle annule, elle ne compte pas. C'est contre-intuitif la première fois, et c'est précisément pour cela que la décision vit ici, à un seul endroit.
|
nodiscardnoexcept |
Nom textuel d'une posture, pour les journaux et la restitution.
|
nodiscard |
Le modificateur d'un jet de sauvegarde : caractéristique, plus la maîtrise si elle s'applique.
| void core::setAssertionHandler | ( | AssertionHandler | handler | ) |
Remplace le gestionnaire d'échec d'assertion (utile pour les tests).
| handler | Nouveau gestionnaire ; un gestionnaire nul rend l'échec silencieux. |
|
nodiscard |
| std::size_t core::spawnMapEntities | ( | World & | world, |
| const Level & | level, | ||
| std::string_view | mapName, | ||
| const std::function< void(Entity, const MapEntity &)> & | onEntity = {} ) |
Peuple un World d'une entité par objet de la couche objects.
Chaque core::MapEntity devient une entité portant un Transform (sa case, en unités monde) et, si son type est connu, un Interactable. Un type inconnu produit tout de même une entité : c'est une erreur de conception tolérée, pas une carte invalide (EX-NFR-040), et la refuser ferait disparaître un objet de la carte sans que l'auteur comprenne pourquoi.
Le nom de carte entre dans la clé de drapeau de chaque entité consommable : deux cartes peuvent porter un coffre à la même case sans se marcher dessus.
| world | Monde à peupler. |
| level | Niveau source. |
| mapName | Nom de la carte, pour les clés de drapeau. |
| onEntity | Rappel invoqué après chaque création, avec l'entité et l'objet dont elle vient. Permet à la présentation d'y attacher ses propres composants sans que Core connaisse l'habillage (EX-NFR-011) — même principe d'injection que buildLevelScene. |
|
nodiscardconstexprnoexcept |
Mélange (SplitMix64) un entier 64 bits en une valeur bien distribuée.
Fonction pure et sans état : sert à combiner plusieurs valeurs reproductibles (graine de base, numéro de pas, identifiant d'entité) en une graine unique par tirage, sans jamais lire l'horloge système ni un générateur par défaut (EX-NFR-002).
| value | Valeur à mélanger. |
|
nodiscard |
Le hachage stable dont assetMarker tire sa teinte.
Exposé pour être testé : c'est lui qui garantit qu'une clé donne toujours le même marqueur.
|
nodiscard |
Déplace box de delta en s'arrêtant au premier contact avec une tuile solide, puis en glissant le long de la surface pour le déplacement résiduel.
Collision continue (EX-GP-014) : quelle que soit la vitesse, la boîte ne traverse jamais une tuile solide sur un pas. Méthode : balayage par axe (X puis Y), chaque axe parcourant toutes les cellules entre la position courante et la cible (donc aucun tunneling), puis calant la position sur la coordonnée exacte du mur (clamp direct, sans dérive flottante). La passe Y part de la position X déjà résolue, ce qui produit le glissement le long des murs. Ordre X→Y conventionnel et déterministe (EX-NFR-002). Fonction pure : aucun état, aucun aléatoire.
Précondition : box ne chevauche aucune tuile solide au départ (état non pénétrant) — la physique appelante garantit cet invariant pas après pas.
| box | Boîte mobile avant déplacement (coin haut-gauche = position de l'entité). |
| delta | Déplacement voulu sur le pas, en unités monde (velocity * dt). |
| tiles | Grille de collision : tiles.isSolid(colonne, ligne) désigne les tuiles bloquantes. |
|
nodiscardnoexcept |
Déplace box de delta en s'arrêtant au premier contact avec obstacle, une boîte fixe unique (pas une grille), puis en glissant le long de sa surface pour le déplacement résiduel.
Complément de core::sweepAabb (SweptCollision.h), pas une extension : sweepAabb résout la collision sur la grille (murs, sols, blocs pleins — solide/vide par case entière) ; sweepAabbVsAabb résout la collision contre un obstacle dont la boîte réelle est plus petite qu'une case (les blocs réduits TileType::BlockHalf/BlockQuarter, core::BlockController) et ne peut donc pas être représentée sur la grille sans bloquer à tort l'espace vide qui l'entoure. Un appelant qui doit composer les deux (hmi::GameSession) applique sweepAabb puis, sur le déplacement réellement obtenu, sweepAabbVsAabb pour chaque bloc réduit concerné — la restriction la plus stricte des deux l'emporte, par construction (chaque passe ne peut que réduire encore le déplacement, jamais l'étendre).
Même méthode que sweepX/sweepY : résolution par axe, et clamp direct sur la coordonnée de contact plutôt qu'une interpolation position + delta * t — une position résolue est donc une coordonnée exacte, jamais un résultat d'interpolation, et aucune dérive flottante ne peut s'y accumuler (voir Physique du personnage). L'axe X est résolu en premier à partir de la position de départ, puis l'axe Y à partir de la position déjà résolue en X — ce qui produit le même glissement le long de l'obstacle qu'un mur classique.
Précondition : box ne chevauche pas obstacle au départ (état non pénétrant), comme pour sweepAabb.
| box | Boîte mobile avant déplacement (coin haut-gauche = position de l'entité). |
| delta | Déplacement voulu sur le pas, en unités monde. |
| obstacle | Boîte fixe contre laquelle résoudre la collision (déjà réduite/centrée si pertinent — cette fonction ne connaît ni les tuiles ni les blocs, une boîte quelconque suffit). |
|
nodiscardconstexprnoexcept |
Convertit une distance en mètres — telle que le corpus l'écrit — en nombre de cases.
|
nodiscard |
Convertit un type de tuile en son nom textuel.
Point unique de vérité de la correspondance type ↔ nom, partagé par le format de niveau (core::LevelWriter, core::LevelLoader) et par les configurations de présentation qui désignent des types de tuiles (hmi::SkinCatalog, EX-EDIT-042). Deux tables distinctes divergeraient au premier type ajouté : un niveau écrit avec un nom qu'un autre lecteur ne reconnaîtrait pas.
Le switch est exhaustif et sans default : ajouter une valeur à core::TileType sans lui donner de nom devient une erreur de compilation (/W4 /WX), et non un nom silencieusement faux.
| type | Type de tuile. |
|
nodiscardconstexpr |
Convertit un niveau en libellé lisible.
| level | Niveau à convertir. |
|
nodiscard |
Le poids total d'un inventaire, en grammes.
Une seule unité, et c'est la raison d'être de cette fonction : le livre écrit des kilogrammes et des grammes dans la même table — « 6,5 kg », « 500 g » —, et mélanger les deux dans un total donnerait un sac de cinq cents kilos pour une poignée de fléchettes. La conversion est faite à l'extraction ; ici tout est déjà en grammes.
| std::string core::unequip | ( | Inventory & | inventory, |
| EquipmentSlot | slot ) |
Retire ce que slot porte.
|
nodiscard |
Les identifiants que les catalogues ne portent pas — un sac qui en contient ne pèse pas ce qu'il devrait, et le dire vaut mieux que de peser faux en silence.
| void core::updateTopDownMovement | ( | World & | world, |
| Entity | actor, | ||
| const PlayerInput & | input, | ||
| const TileMap & | collision, | ||
| const TopDownConfig & | config, | ||
| float | fixedDelta ) |
Avance un acteur d'un pas fixe : intention → vitesse → balayage → position.
Referme la parenthèse ouverte par le LOT-01, où la physique de plateforme a été retirée sans remplaçant. Sans gravité : aucun axe n'est privilégié, x et y sont traités exactement de la même façon — c'est toute la différence avec le contrôleur qu'il remplace.
L'entité doit porter Transform, Velocity, Collider et Actor ; les autres sont ignorées. Le déplacement passe par core::sweepAabb, balayage continu contre la grille : quelle que soit la vitesse, la boîte ne traverse jamais une tuile solide, et le résidu d'un axe bloqué glisse le long du mur (EX-EXP-002, EX-EXP-003).
Fonction pure au sens du déterminisme (EX-NFR-002) : mêmes entrées, mêmes positions, sans aléatoire ni horloge. Testable sans fenêtre ni GPU (EX-ARCH-001).
| world | Monde ECS contenant l'acteur. |
| actor | Entité à déplacer. |
| input | Intention de ce pas (moveX/moveY, chacun dans [-1, 1]). |
| collision | Grille de collision de la carte (Level::tileMap, EX-LVL-016). |
| config | Réglages de vitesse, d'accélération et de friction. |
| fixedDelta | Durée du pas fixe, en secondes. |
|
nodiscard |
Valide un cadrage déclaré (EX-LVL-004) : taille de vue nulle/négative ou supérieure au niveau, zone hors bornes ou de taille nulle, ou paramètre étranger au mode retenu (roomWidthTiles/roomHeightTiles hors PerRoom/Follow, zones hors PerRoom).
| config | Cadrage déclaré à valider. |
| levelWidth | Largeur du niveau, en cases. |
| levelHeight | Hauteur du niveau, en cases. |
|
inlineconstexpr |
Tolérance géométrique des routines de balayage, en unités monde.
Empêche qu'un simple effleurement de frontière — un bord exactement posé sur une limite de case — compte comme un chevauchement. Partagée par sweepX/sweepY (SweptCollision) et par la résolution AABB/AABB : les deux doivent s'accorder sur ce qu'est un contact, sans quoi une même position serait bloquante pour l'une et libre pour l'autre. Ce n'est pas un réglage de ressenti, d'où sa place ici et non dans PhysicsConfig : la modifier ne change pas le jeu, elle change la définition du contact.
|
inlineconstexpr |
Nombre de faces du dé de résolution. Le d20 est la mécanique centrale du jeu.
|
inlineconstexpr |
Graine par défaut de core::ParticleSystem – fixe et documentée, jamais l'horloge système (EX-NFR-002) : deux sessions démarrées avec cette graine et soumises à la même séquence d'entrées produisent exactement les mêmes particules.
|
inlineconstexpr |
|
inlineconstexpr |
Taille de salle par défaut du mode par salle, en cases.
Mêmes valeurs historiques que hmi::RoomGrid (LOT-32), désormais une valeur par défaut plutôt que la seule vérité (tache-01) : un niveau peut la personnaliser. Dupliquées ici plutôt que lues depuis hmi::RoomGrid : Core ne dépend jamais de HMI (EX-ARCH-011).
|
inlineconstexpr |
Vrai dans les builds de développement (Debug), faux en Release.
S'appuie sur NDEBUG (défini par le compilateur en Release). Sert à n'inclure que dans les builds de développement des éléments d'outillage (par exemple des boutons de débogage de l'interface), à utiliser de préférence avec if constexpr pour éliminer le code en Release.
|
inlineconstexpr |
Type de la couche objects qui déclenche une rencontre.
|
inlineconstexpr |
Tolérance par défaut pour les comparaisons de flottants issus de calculs.
|
inlineconstexpr |
Nombre d'emplacements, pour dimensionner les tableaux qui les indexent.
|
inlineconstexpr |
Entité invalide conventionnelle : ne désigne jamais une entité vivante.
|
inlineconstexpr |
Nombre d'axes.
|
inlineconstexpr |
Nombre de notes — pour les parcours exhaustifs et les contrôles de couverture.
|
inlineconstexpr |
Nombre de particules de poussière au plafond LANDING_MAX_IMPACT_SPEED (intensité maximale).
|
inlineconstexpr |
Nombre de particules de poussière au seuil LANDING_MIN_IMPACT_SPEED (intensité minimale).
|
inlineconstexpr |
Vitesse d'impact au-delà de laquelle l'intensité de la poussière plafonne (LANDING_DUST_MAX_ COUNT) : une chute extrême ne produit pas un nuage toujours plus dense.
|
inlineconstexpr |
Vitesse d'impact (LOT-53 TACHE-02) en-dessous de laquelle un atterrissage ne produit aucune poussière – sans ce seuil, chaque petit pas en émettrait.
|
inlineconstexpr |
Nombre de valeurs de core::LayerKind — même convention que core::TILE_TYPE_COUNT : toute valeur ajoutée doit l'être avant le dernier énumérateur.
|
inlineconstexpr |
Version courante du format de niveau JSON (EX-LVL-005).
Écrite par LevelWriter dans le champ racine "version". Un fichier sans ce champ est lu comme la version initiale (0), sans erreur ni avertissement — rétrocompatibilité des niveaux antérieurs à ce champ (LOT-44). Une version supérieure à celle-ci est une erreur exploitable (LevelValidationError::UnsupportedFormatVersion), pas une lecture au mieux.
Version 2 (LOT-64) : ajout du champ optionnel "cameraFraming" (EX-LVL-006). Un fichier de version antérieure, sans ce champ, se charge sans erreur – la règle de repli (core::resolveCameraFraming) reproduit exactement le comportement historique.
Version 3 (LOT-04) : couches de tuiles ("layers", core::TileLayer) et entités ("entities", core::MapEntity), les deux optionnels. "layers" ne porte que les couches visibles (sol, décor) : la grille de collision d'une carte est son tableau racine "tiles", celui qui porte déjà l'entrée, la sortie et les mécanismes — une couche "collision" déclarée est refusée (EX-LVL-016). Cette grille racine est promue en couche de tête, de rôle LayerKind::Collision, ou LayerKind::Legacy quand la carte ne déclare aucune couche : aucun fichier existant n'a besoin d'être touché, et rien de son comportement ne change.
Toute clé non reconnue dans une couche ou une entité est rangée dans ses propriétés libres (core::PropertyMap) et réémise à l'écriture : un fichier produit par une version ultérieure de l'éditeur traverse une version antérieure sans rien perdre.
|
inlineconstexpr |
Nombre maximal de particules simultanément vivantes (EX-NFR-005) : au-delà, spawn() recycle les plus anciennes plutôt que d'allouer sans borne.
|
inlineconstexpr |
Dimension maximale, en pixels, d'une texture de plan sur un axe (EX-DEC-044) — limite de Direct3D 11 au feature level 11.
|
inlineconstexpr |
Nombre maximal de plans par niveau (EX-DEC-044) : borne le coût dans le format, plutôt que de le laisser à l'usage.
|
inlineconstexpr |
Côté d'une case de la grille tactique, en mètres.
Décision de cadrage, figée ici et nulle part ailleurs. Toutes les portées et vitesses du corpus sont exprimées en mètres — « allonge 1,50 m », « vitesse 9 m », « portée 6 m/18 m » — et la grille tactique du LOT-19 compte en cases. La conversion se fait donc quelque part, et le seul choix ouvert est : à un endroit, ou à trente.
À trente endroits, il suffit qu'un seul emploie 1,5 quand un autre emploie 1,52 (les cinq pieds d'origine) pour qu'une portée de six cases devienne cinq à un endroit du jeu et six ailleurs — et c'est le genre d'écart qu'on ne diagnostique qu'après l'avoir cherché longtemps.
Consommée par les LOT-19 (déplacement) et LOT-22 (portée, ligne de vue, zones d'effet).
|
inlineconstexpr |
Densité native d'un plan, en pixels par unité monde — même valeur que l'échelle de rendu (hmi::Camera2D::PIXELS_PER_UNIT), que Core ne peut pas inclure (EX-NFR-011).
|
constexpr |
Index du clip « dash » dans core::playerClipSet() (voir PLAYER_CLIP_IDLE).
|
constexpr |
Index du clip « fall » (chute, distincte du saut, LOT-48) dans core::playerClipSet().
|
constexpr |
Index du clip « idle » dans core::playerClipSet() — ordre stable, seule source de vérité partagée avec hmi::TextureAtlas::playerFrameRegion (traduction en région d'atlas, LOT-46 TACHE-04) : ne pas réordonner sans mettre à jour HMI en conséquence.
|
constexpr |
Index du clip « jump » dans core::playerClipSet() (voir PLAYER_CLIP_IDLE).
|
constexpr |
Index du clip « land » (atterrissage, transition jouée une fois, LOT-48) dans core::playerClipSet().
|
constexpr |
Index du clip « run » dans core::playerClipSet() (voir PLAYER_CLIP_IDLE).
|
constexpr |
Index du clip « wallslide » (glissade murale, LOT-48) dans core::playerClipSet().
|
inlineconstexpr |
Hauteur du personnage, en unités monde.
|
inlineconstexpr |
Largeur du personnage, en unités monde (une tuile = 1 unité).
|
inlineconstexpr |
Nombre de valeurs de core::TileType — seule source de vérité de la fin de l'énumération (LOT-74 TACHE-02).
Ajouter un type ne demande rien d'autre que de l'ajouter ci-dessus, avant le dernier énumérateur : cette constante suit, et ses consommateurs avec elle. L'ajouter en fin de liste, comme l'a fait le LOT-08, demande en plus de re-pointer cette seule ligne — c'est le prix d'un vocabulaire qui se lit dans son ordre d'apparition plutôt qu'en désordre.
Volontairement une constante libre plutôt qu'un énumérateur Count : les switch sur TileType du projet sont exhaustifs et sans default (c'est ce qui fait que le compilateur désigne lui-même les points à mettre à jour), et un énumérateur sentinelle les obligerait tous à traiter un cas qui ne décrit aucune tuile.