Compare commits

...
Author SHA1 Message Date
koka 35103a7ea8 Add connected edge highlights and stable shadow projection for beta.129
Build Sanctuary / build (push) Canceled after 0s
2026-09-17 19:11:11 +02:00
koka 6502883cc4 Document verified beta.128 publication and Prism synchronization
Build Sanctuary / build (push) Canceled after 0s
2026-09-17 18:34:55 +02:00
koka a4e96c0d99 Stabilize pixel shadows and add moonlight and foliage for beta.128
Build Sanctuary / build (push) Canceled after 0s
2026-09-17 18:33:07 +02:00
koka 7c63865157 Document verified beta.127 shader release and instance synchronization
Build Sanctuary / build (push) Canceled after 0s
2026-09-17 17:53:16 +02:00
koka 00be1eb0d0 Integrate native pixel shadows over beta.126 for beta.127
Build Sanctuary / build (push) Canceled after 0s
2026-09-17 17:51:19 +02:00
koka adde24aa7e Document verified beta.126 release and instance synchronization
Build Sanctuary / build (push) Canceled after 0s
2026-09-17 17:11:59 +02:00
koka 99860af312 Add Sanctuary gems, original clay colors and shared discovery commands for beta.126
Build Sanctuary / build (push) Canceled after 0s
2026-09-17 17:10:15 +02:00
koka 1547396c06 Document verified beta.125 release and instance synchronization
Build Sanctuary / build (push) Canceled after 0s
2026-09-17 16:37:18 +02:00
koka 4ec5b0d028 Add sculpture corner and height placement, voxel chips and discovered workshop models
Build Sanctuary / build (push) Canceled after 0s
2026-09-17 16:35:46 +02:00
koka 67e6e7c4f2 Record beta.124 publication and preserved Prism synchronization
Build Sanctuary / build (push) Canceled after 0s
2026-09-17 16:02:47 +02:00
koka 00179e30ef Use one cached bounding box per sculpture (beta.124)
Build Sanctuary / build (push) Canceled after 0s
2026-09-17 16:00:52 +02:00
koka 87f823af67 Record beta.123 publication and preserved Prism synchronization
Build Sanctuary / build (push) Canceled after 0s
2026-09-17 15:30:04 +02:00
koka 4552cc347b Separate safe golden rotations from Steve wrench powers (beta.123)
Build Sanctuary / build (push) Canceled after 0s
2026-09-17 15:28:06 +02:00
koka 49131b4c53 Record beta.122 publication and preserved Prism sync
Build Sanctuary / build (push) Canceled after 0s
2026-09-17 15:04:59 +02:00
koka edc7fc3dfb Match sculpture collisions to voxels and fix light occlusion (beta.122)
Build Sanctuary / build (push) Canceled after 0s
2026-09-17 15:02:05 +02:00
koka 9b0104d27a Record beta.121 publication and preserved Prism sync
Build Sanctuary / build (push) Canceled after 0s
2026-09-17 14:11:39 +02:00
koka d9b3dd6bed Add editable Sanctuary resource template and new wrench texture (beta.121)
Build Sanctuary / build (push) Canceled after 0s
2026-09-17 14:09:11 +02:00
koka e732da8800 Record beta.120 publication and verified Prism synchronization
Build Sanctuary / build (push) Canceled after 0s
2026-09-17 13:44:30 +02:00
koka 248dff47b7 Extend golden wrench to native block states and persistent texture rotation (beta.120)
Build Sanctuary / build (push) Canceled after 0s
2026-09-17 13:43:02 +02:00
koka 6aaabf1cb9 Normalize sculpture delivery note formatting
Build Sanctuary / build (push) Canceled after 0s
2026-09-17 13:16:24 +02:00
koka 72e9263339 Record beta.119 release and verified Prism synchronization
Build Sanctuary / build (push) Canceled after 0s
2026-09-17 13:16:12 +02:00
koka 3fd64e1f2a Center sculptures on aimed block middle without half-voxel offsets (beta.119)
Build Sanctuary / build (push) Canceled after 0s
2026-09-17 13:14:54 +02:00
koka 8af406a028 Record verified beta.118 publication and Prism update
Build Sanctuary / build (push) Canceled after 0s
2026-09-17 13:05:40 +02:00
koka 0a81b3c147 Add sixteen native colored brick walls (beta.118)
Build Sanctuary / build (push) Canceled after 0s
2026-09-17 13:03:18 +02:00
koka 68fd97d287 Record verified beta.117 publication and Prism update
Build Sanctuary / build (push) Canceled after 0s
2026-09-17 12:19:54 +02:00
koka 0f1efdec83 Sample texture grain for sculptures and preserve worn models (beta.117)
Build Sanctuary / build (push) Canceled after 0s
2026-09-17 12:18:10 +02:00
koka 5c666a4ebc Record verified beta.116 publication and Prism synchronization
Build Sanctuary / build (push) Canceled after 0s
2026-09-17 07:50:34 +02:00
koka e3ca9fcd63 Apply block texture palettes to workshop sculptures (beta.116)
Build Sanctuary / build (push) Canceled after 0s
2026-09-17 07:49:00 +02:00
koka 22e58b4b91 Fix multiblock furnace slot mapping and explain shared cooking (beta.115)
Build Sanctuary / build (push) Canceled after 0s
2026-09-17 07:28:40 +02:00
koka ed0e0b26aa Document beta.114 release and verified instance update
Build Sanctuary / build (push) Canceled after 0s
2026-09-17 06:59:17 +02:00
koka 21845bd736 Add chaotic flight when carried flying animals are struck (beta.114)
Build Sanctuary / build (push) Canceled after 0s
2026-09-17 06:57:34 +02:00
koka 4a6f63c52d Document beta.113 publication and verified Prism update
Build Sanctuary / build (push) Canceled after 0s
2026-09-17 06:39:24 +02:00
koka 6166d0aa9e Snap clay sculptures to aimed block edges on the voxel grid (beta.113)
Build Sanctuary / build (push) Canceled after 0s
2026-09-17 06:38:04 +02:00
koka 064701f210 Document beta.112 publication and verified Prism update
Build Sanctuary / build (push) Canceled after 0s
2026-09-17 04:01:02 +02:00
koka 1eaa976ecf Use only the active hotbar in the clay workshop for beta.112
Build Sanctuary / build (push) Canceled after 0s
2026-09-17 03:59:13 +02:00
koka 8c0020c774 Document verified beta.111 publication and Prism update
Build Sanctuary / build (push) Canceled after 0s
2026-09-17 03:45:23 +02:00
koka 289697becf Refine clay workshop and orient statues on placement for beta.111
Build Sanctuary / build (push) Canceled after 0s
2026-09-17 03:43:36 +02:00
koka e38f6cbdbe Record beta.110 publication and verified Prism synchronization
Build Sanctuary / build (push) Canceled after 0s
2026-09-17 03:15:20 +02:00
koka 2090380712 Allow the indexed pack icon in packwiz channel publication
Build Sanctuary / build (push) Canceled after 0s
2026-09-17 03:12:24 +02:00
koka 468743bfe7 Integrate verified Sanctuary beta.110 with clay workshop, eggs and seasonal snow
Build Sanctuary / build (push) Canceled after 0s
2026-09-17 03:10:39 +02:00
koka 49feb5a376 Synchronize verified Sanctuary beta.092 sources and release documentation
Build Sanctuary / build (push) Canceled after 0s
2026-09-16 11:41:27 +02:00
koka 85e062ed91 Version Sanctuary resource pack beta.070 2026-09-15 17:24:31 +02:00
koka c8b0684460 Record completed beta.061 release and finish Git synchronization
Build Sanctuary / build (push) Canceled after 0s
2026-09-15 09:31:32 +02:00
koka e13f3cc1b8 Record Sanctuary sources through beta.060 and Git validation
Build Sanctuary / build (push) Canceled after 0s
2026-09-15 09:29:11 +02:00
koka 1490fb2a80 Record verified alpha.30.7 release, atlas and Prism synchronization
Build Sanctuary / build (push) Canceled after 0s
2026-09-12 20:35:09 +02:00
koka 9a65e96061 Keep full title margins in installation atlas exports
Build Sanctuary / build (push) Canceled after 0s
2026-09-12 20:30:26 +02:00
koka d5cd895403 Finish alpha.30.7 with natural island treasures, direct rails and dry ruins
Build Sanctuary / build (push) Canceled after 0s
2026-09-12 20:29:32 +02:00
koka 0b7e0c6717 Record alpha.30.6 publication and verified Prism update
Build Sanctuary / build (push) Canceled after 0s
2026-09-12 19:07:46 +02:00
koka fbd870a4e3 Add underground village, branched rails and upper terrain for alpha.30.6
Build Sanctuary / build (push) Canceled after 0s
2026-09-12 19:04:57 +02:00
koka 16e480bfd0 Record alpha.30.5 publication, scientific atlas and Prism verification
Build Sanctuary / build (push) Canceled after 0s
2026-09-12 17:02:52 +02:00
koka 7f81bf35a0 Restore native plateaus and archive terrain comparisons for alpha.30.5
Build Sanctuary / build (push) Canceled after 0s
2026-09-12 16:58:14 +02:00
koka e400f1e2c1 Record verified alpha30.4 publication and Prism synchronization
Build Sanctuary / build (push) Canceled after 0s
2026-09-12 15:58:33 +02:00
koka 2dc70fe905 Refine high plateaus and extend Sanctuary build height for alpha30.4
Build Sanctuary / build (push) Canceled after 0s
2026-09-12 15:56:31 +02:00
koka a49dfa5337 docs: record alpha30.3 publication and Prism synchronization
Build Sanctuary / build (push) Canceled after 0s
2026-09-12 13:34:14 +02:00
koka 076c9a6c16 feat: balance native plateaus and 3D mountains for alpha30.3
Build Sanctuary / build (push) Canceled after 0s
2026-09-12 13:31:08 +02:00
koka 2a5b4cb51b docs: record alpha30.2 publication and preserved Prism instance
Build Sanctuary / build (push) Canceled after 0s
2026-09-12 12:39:18 +02:00
koka c5381b939a feat(worldgen): irregular ledges and detached-rock filtering in alpha30.2
Build Sanctuary / build (push) Canceled after 0s
2026-09-12 12:37:01 +02:00
koka a20d84811f docs: record verified alpha30.1 publication and Prism sync
Build Sanctuary / build (push) Canceled after 0s
2026-09-12 11:48:38 +02:00
koka cccb89150e fix(worldgen): restore curved rivers and global relief in alpha30.1
Build Sanctuary / build (push) Canceled after 0s
2026-09-12 11:47:00 +02:00
koka 071a8c062d Record verified alpha.30 publication and Prism synchronization
Build Sanctuary / build (push) Canceled after 0s
2026-09-12 10:38:52 +02:00
koka bf327b75d4 Deliver alpha.30 plateaus, open river banks and underground routes
Build Sanctuary / build (push) Canceled after 0s
2026-09-12 10:36:55 +02:00
koka 8c90c61c53 Checkpoint alpha29 terrain ledges, transit and native mineshaft corrections 2026-09-12 09:44:30 +02:00
koka 9f82577927 docs: record verified alpha28 publication and Prism update
Build Sanctuary / build (push) Canceled after 0s
2026-09-12 01:38:21 +02:00
koka 79d3185cba feat(worldgen): add volumetric caves and nearby aerial sites for alpha28
Build Sanctuary / build (push) Canceled after 0s
2026-09-12 01:36:05 +02:00
koka ad234a808f docs: record verified alpha27 publication and Prism update
Build Sanctuary / build (push) Canceled after 0s
2026-09-12 00:37:49 +02:00
koka 392ade0b7e Release alpha27 from alpha24 terrain with cave swamps and restored vanilla ships
Build Sanctuary / build (push) Canceled after 0s
2026-09-12 00:36:17 +02:00
koka e7d1f298b9 docs: record verified alpha.24 release and Prism synchronization
Build Sanctuary / build (push) Canceled after 0s
2026-09-11 18:33:26 +02:00
koka 27d7cba93f feat(worldgen): add persistent aerial Sanctuary sites for alpha.24
Build Sanctuary / build (push) Canceled after 0s
2026-09-11 18:29:38 +02:00
koka fbefb2e6d6 feat: natural Sanctuary secrets and guaranteed expansions for alpha23.1 2026-09-11 15:41:07 +02:00
koka e654d565f6 feat: add native Blocodex and material census for alpha23 2026-09-10 19:28:18 +02:00
koka c9d9dab1b5 docs: define isolated Sanctuary landmarks before implementation 2026-09-10 18:15:52 +02:00
koka a633d4cac9 docs: record verified alpha22 release and Prism update
Build Sanctuary / build (push) Canceled after 0s
2026-09-10 11:54:17 +02:00
koka d6e0c144d0 feat: selective surface placement and independent underground core for alpha22
Build Sanctuary / build (push) Canceled after 0s
2026-09-10 11:52:24 +02:00
koka d462f01e2b docs: record verified alpha21 release and Prism update
Build Sanctuary / build (push) Canceled after 0s
2026-09-10 10:08:01 +02:00
koka bb63fab388 worldgen: sober palettes and connected industrial galleries for alpha21
Build Sanctuary / build (push) Canceled after 0s
2026-09-10 10:03:30 +02:00
koka ae4c6200db docs: record verified alpha20 release and Prism update
Build Sanctuary / build (push) Canceled after 0s
2026-09-10 01:21:33 +02:00
koka 0edac29dd8 feat: add detailed architecture for Sanctuary alpha20
Build Sanctuary / build (push) Canceled after 0s
2026-09-10 01:18:31 +02:00
koka 2facf6f722 docs: record verified alpha19 release and Prism update
Build Sanctuary / build (push) Canceled after 0s
2026-09-09 22:49:20 +02:00
koka c23e72b8e6 feat(worldgen): add reversible alpha19 heritage structures and routes
Build Sanctuary / build (push) Canceled after 0s
2026-09-09 22:42:32 +02:00
koka f2da922bad Document structure ideas and abandoned island routes
Build Sanctuary / build (push) Canceled after 0s
2026-09-09 20:03:42 +02:00
koka c049e0f2ce Record alpha.17 publication and preserved Prism instance
Build Sanctuary / build (push) Canceled after 0s
2026-09-09 19:16:07 +02:00
koka 0969ed52da Add alpha.17 experimental forgotten structure networks
Build Sanctuary / build (push) Canceled after 0s
2026-09-09 19:14:09 +02:00
koka 1a64fbe5b9 Record alpha16 release and existing Prism synchronization
Build Sanctuary / build (push) Canceled after 0s
2026-09-09 18:14:22 +02:00
koka 98fc13cf0a Add alpha16 inhabited ruins and deep city infrastructure
Build Sanctuary / build (push) Canceled after 0s
2026-09-09 18:12:06 +02:00
koka 71d5cf7906 Record alpha.15 release and existing Prism synchronization
Build Sanctuary / build (push) Canceled after 0s
2026-09-09 16:43:25 +02:00
koka dd9c795695 Add alpha.15 compact Lost City and detailed utility networks
Build Sanctuary / build (push) Canceled after 0s
2026-09-09 16:40:26 +02:00
koka c576d655ae Record alpha.14 release and existing Prism update
Build Sanctuary / build (push) Canceled after 0s
2026-09-09 14:02:47 +02:00
koka 1c5c2c2c7e Add alpha.14 Lost City and nearby certified expansions
Build Sanctuary / build (push) Canceled after 0s
2026-09-09 14:00:20 +02:00
koka 3a6a895874 Record alpha.13.1 release and existing Prism update
Build Sanctuary / build (push) Canceled after 0s
2026-09-09 12:40:27 +02:00
koka b19e93dd21 Fix Windows expansion journal persistence in alpha.13.1
Build Sanctuary / build (push) Canceled after 0s
2026-09-09 12:37:36 +02:00
koka 3569cf1f5f docs(release): record alpha.13 publication and Prism update
Build Sanctuary / build (push) Canceled after 0s
2026-09-09 11:15:51 +02:00
koka 78b63be8e1 feat(worldgen): unify Sanctuary and native size options for alpha.13
Build Sanctuary / build (push) Canceled after 0s
2026-09-09 11:13:24 +02:00
koka 818c6753f9 docs: record alpha.12.1 release and preserved Prism update
Build Sanctuary / build (push) Canceled after 0s
2026-09-09 08:57:40 +02:00
koka 332d60be96 fix: search farther for expansion space and accept a minimum distance
Build Sanctuary / build (push) Canceled after 0s
2026-09-09 08:55:29 +02:00
koka 40a86588b5 docs: record alpha.12 packwiz publication and Prism update
Build Sanctuary / build (push) Canceled after 0s
2026-09-09 08:33:43 +02:00
koka cdfbba0089 feat: add alpha.12 branching expansion laboratory
Build Sanctuary / build (push) Canceled after 0s
2026-09-09 07:07:04 +02:00
koka f816ffc640 Record alpha.11 publication and verified Prism update
Build Sanctuary / build (push) Canceled after 0s
2026-09-09 06:19:35 +02:00
koka f30a350240 Add Small and Large islands and accelerate exact world generation
Build Sanctuary / build (push) Canceled after 0s
2026-09-09 06:17:52 +02:00
koka a26b72fabd Record alpha.10 publication and verified Prism update
Build Sanctuary / build (push) Canceled after 0s
2026-09-09 04:17:42 +02:00
koka ef5d1eaad9 Add persistent island sizes for 5, 20 and 100 players
Build Sanctuary / build (push) Canceled after 0s
Default new Sanctuary worlds to the 20-player profile and keep legacy world generation isolated. Validate all three capacities progressively with real generation, fluid ticks and saved settings.
2026-09-09 04:14:18 +02:00
koka 0a0034dd42 Record alpha.9 publication and verified Prism update
Build Sanctuary / build (push) Canceled after 0s
2026-09-09 02:20:41 +02:00
koka 40b655517e Add living caverns and connected water terraces for alpha.9
Build Sanctuary / build (push) Canceled after 0s
2026-09-09 02:18:35 +02:00
koka bf84b37ea7 Record alpha.8 publication and verified Prism synchronization
Build Sanctuary / build (push) Canceled after 0s
2026-09-09 00:31:21 +02:00
koka 80e78e0421 Add rifts, river basins and stratified depths for alpha.8
Build Sanctuary / build (push) Canceled after 0s
2026-09-09 00:29:34 +02:00
3904 changed files with 273192 additions and 215 deletions
+3
View File
@@ -15,3 +15,6 @@ screenshots/
.env
.env.*
!.env.example
__pycache__/
/archives/web/snapshots/
/ressources-pack/*.zip
+1 -1
View File
@@ -12,7 +12,7 @@ La vision est dans `docs/vision.md` ; elle décrit aussi des fonctionnalités fu
- Garder les identifiants `sanctuary:*` stables et documenter toute évolution de la génération avec graine et version.
- Ajouter les libellés FR/EN des nouvelles interfaces. Vérifier les dépendances pour la version Minecraft exacte ; aucune compatibilité supposée à partir du nom d'un mod.
- Lancer `./gradlew check build` pour livrer du code, et `./gradlew assemblePack` si la distribution change. Ajouter seulement les tests utiles au comportement touché.
- Pour chaque nouvelle livraison du mod, incrémenter `mod_version` et `pack_version` dans `gradle.properties`, synchroniser `packwiz/pack.toml` et documenter le changement. Une simple modification documentaire n'incrémente pas les binaires.
- Pour chaque nouvelle livraison du mod, incrémenter le compteur `beta.xxx` (départ `beta.001`) dans `mod_version` et `pack_version` de `gradle.properties`, synchroniser `packwiz/pack.toml` et documenter le changement. Le tag reprend cette version exacte, sans préfixe `v` ; voir `docs/versioning.md`. Une simple modification documentaire n'incrémente pas les binaires.
- Le pack Beta suit un canal packwiz stable et une seule instance Prism. Pour une mise à jour demandée, suivre `docs/packwiz.md` : publier un artefact vérifié et immuable, avancer le canal, puis synchroniser l'instance existante en conservant ses sauvegardes et réglages.
- Ne pas versionner de secrets, mondes, JAR générés ou dépendances téléchargées. Le wrapper Gradle fait exception.
- Ne pas déployer dans une installation de jeu ou un serveur personnel sans demande correspondante. Les serveurs de test restent dans les dossiers de développement ignorés.
+1329
View File
File diff suppressed because it is too large Load Diff
+5
View File
@@ -27,6 +27,11 @@ Les nombres, ressources et interfaces encore incertains peuvent rester des hypot
Les commandes exactes de développement vivent dans le [README](README.md), afin de ne pas maintenir deux listes divergentes.
Les livraisons du mod et du pack partagent le compteur `beta.xxx`,
à partir de `beta.001`. Incrémenter les deux propriétés et le manifeste
packwiz ensemble ; le tag reprend cette version exacte, sans `v`. Une modification
documentaire seule ne consomme pas de numéro. Voir [Versionnement](docs/versioning.md).
## Vérifier la génération du monde
Utiliser une sauvegarde de développement dédiée et conserver la seed des observations. Les vérifications pertinentes comprennent le spawn, les limites de l'île, le vide, les jointures de chunks, le comportement de l'eau, le redémarrage et l'arrivée de plusieurs joueurs.
+2167 -39
View File
File diff suppressed because it is too large Load Diff
+107
View File
@@ -4,6 +4,18 @@ Le code Sanctuary est distribué sous GPL-3.0-or-later, comme la version 26.2 do
la génération est reprise. Voir `LICENSE` et `docs/migration-26.2.md` pour la
provenance détaillée et le périmètre du portage.
Le minage groupé beta.008 reprend les paliers, la sélection par faces et le
contour de sélection de Sanctuary 26.2 (GPL-3.0-or-later, même dépôt historique
en lecture seule). Le service de progression, le contrôle des gestes et le
calcul de durée sont adaptés à la bêta et aux API Minecraft 26.3-pre-2.
Voir `docs/mining-beta008.md` ; aucun mod externe de minage n'est embarqué.
Construction beta.009 adapte le plan orienté `SanctuaryBuildPlane` et les
principes de sélection/session de `gameplay/building` dans le même Sanctuary
26.2, GPL-3.0-or-later. Les contextes de placement, permissions, gestes et
migrations sont adaptés à la bêta et testés sur Minecraft 26.3-pre-2.
Voir `docs/building-beta009.md`.
Minecraft appartient à Mojang Studios / Microsoft. Sanctuary est un projet
communautaire indépendant. Le dépôt ne redistribue pas le jeu.
@@ -21,6 +33,16 @@ Fabric Loader : Apache-2.0. Fabric API : Apache-2.0. Fabric Loom et le wrapper
Gradle : Apache-2.0. Ces projets conservent leurs auteurs, notices et licences.
Les dépendances sont résolues depuis leurs distributions officielles.
Les six icônes de compétences dans
`assets/sanctuary/textures/gui/progression/` ont été fournies par le créateur
le 13 septembre 2026. Depuis beta.015, elles utilisent ses nouveaux fichiers
`progression_heart.png`, `progression_food.png`, `progression_mining.png`,
`progression_building.png`, `progression_breath.png` et `progression_inventory.png`.
Les PNG 9×9 sont conservés octet pour octet, y compris leur transparence.
Les noms de ressources restent stables : `food` correspond à `hunger`,
`breath` à `breathing`, et le préfixe `progression_` est retiré.
Les mêmes PNG sont préparés dans `ressources-pack/sanctuary/` pour le resource pack.
Le fichier préexistant `ressources-pack/helloworld/assets/minecraft_title.png`
est conservé comme source graphique fournie par le propriétaire du dépôt.
Il n'est pas encore installé dans le pack généré. Sa provenance et son adaptation
@@ -29,3 +51,88 @@ Il n'est pas encore installé dans le pack généré. Sa provenance et son adapt
Les resource packs, shaders et mods communautaires envisagés dans la vision
ne sont pas inclus automatiquement. Chaque ajout aura une version, une source,
un hash et les crédits de sa distribution.
Demeure est embarqué comme mod autonome, sous GPL-3.0-or-later. Son modèle
provient des sources de KOKA99CAB dans `Structures/demeure`, référencées par
linventaire 26.2, et a été adapté à Minecraft 26.3-pre-2. Voir
`mods/demeure/PROVENANCE.md` pour les empreintes et les différences du port.
Le JAR Demeure contient sa licence et ce document de provenance.
## Inventaire beta.010
Les interfaces, algorithmes de transfert et PNG d'inventaire proviennent de
`../26.2/sanctuary`, projet Sanctuary de Koka sous GPL-3.0-or-later. Le portage
conserve les six variantes personnelles, la barre rapide et sa sélection,
les panneaux des conteneurs natifs et leurs fonds supérieurs. Les PNG sont
copiés sans retouche dans le namespace `sanctuary` ; le serveur 26.2 et ses
sauvegardes ne sont pas modifiés. Cape, œuf de compagnon et moteur Aircraft
ne font pas partie de ce lot.
## Équipement beta.018
Les repères de cases vides `egg.png`, `cape.png` et `cosmetics.png` (16 × 16)
proviennent des fichiers fournis par le créateur le 13 septembre 2026 dans
`../textures/`. Ils sont conservés octet pour octet dans le mod et le resource pack.
Cape Zéro utilise temporairement le visuel **Vanilla Cape** de Mojang/Microsoft,
téléchargé depuis le serveur officiel de textures Minecraft :
https://textures.minecraft.net/texture/f9a76537647989f9a0b6d001e320dac591c359e9e61a31f4ce11c88f207f0ad4
SHA-256 : `f9a76537647989f9a0b6d001e320dac591c359e9e61a31f4ce11c88f207f0ad4`.
Présentation originale : https://www.minecraft.net/en-us/article/introducing-vanilla-cape
Licône dobjet correspondante provient de `../26.2/sanctuary`
(`textures/item/cape/vanilla_cape.png`). Ces images sont un placeholder de test,
restent la propriété de leurs auteurs et ne sont pas placées sous la licence
du code Sanctuary. Il ne sagit pas dune cape officielle accordée au compte.
Les familiers utilisent les modèles et textures résolus par Minecraft installé ;
aucune copie des textures de mobs ni aucun ancien pouvoir nest embarqué.
## JEI beta.024
Just Enough Items, mezz, MIT : fork source de la branche 26.2, commit
`aae2dfcfb82e6b5bce787ba72bb2eda7339b274f`, adapté à Minecraft 26.3-pre-2.
Le JAR contient la licence dorigine et [la provenance du portage](mods/jei/PROVENANCE.md).
Les patches et la reconstruction sont fournis ; les téléchargements restent ignorés.
Baked Substring Index 0.1.0 (MIT, James Mitchell) et Suffix Tree 1.1.0
(Apache-2.0, Alessandro Bahgat Shehata) sont inclus avec leurs licences.
## Références solaires beta.037
Les villes de référence et leurs coordonnées publiques proviennent de `zone.tab`
et les alias de `backward`, dans IANA tzdata **2026d** (domaine public).
Archive : https://data.iana.org/time-zones/releases/tzdata2026d.tar.gz
SHA-256 : `0cb2aa8e333c3dc049badc42a0c61f21987b8cd44e107fa900bad764aacc7767`.
Licence : https://data.iana.org/time-zones/tzdb/LICENSE
Le script `scripts/compile_solar_references.py` produit les 549 références/alias
embarqués. Le jeu ne télécharge ni ces données ni une position utilisateur.
Les équations saisonnières approximatives suivent la fiche publique NOAA :
https://gml.noaa.gov/grad/solcalc/solareqns.PDF
## Informations alimentaires beta.038 — AppleSkin
Lasset `assets/sanctuary/textures/gui/food_details.png` est une copie intacte
de `resources/assets/appleskin/textures/icons.png` par squeek502 et contributeurs,
[AppleSkin, branche 26.2-fabric](https://github.com/squeek502/AppleSkin/tree/62513191f6a3497447595c2215d466ad1d2bdb92),
commit `62513191f6a3497447595c2215d466ad1d2bdb92`, sous Unlicense.
Le comportement des contours et leurs coordonnées datlas suivent cette source ;
lintégration, la synchronisation et le calcul de capacité sont propres à Sanctuary.
Texte de licence : [Unlicense amont](https://github.com/squeek502/AppleSkin/blob/62513191f6a3497447595c2215d466ad1d2bdb92/LICENSE).
## Briques et argile beta.102
Les seize textures de blocs de briques ont été fournies par le créateur de
Sanctuary. Les variantes dargile, de boule dargile et de brique sont des
recolorations des textures Minecraft 26.3 de Mojang/Microsoft. Les ressources
de modèles, butin et états reprennent leurs équivalents natifs 26.3.
`tools/generate-colored-bricks.py` documente cette transformation ;
`tools/colored-bricks-palette.json` conserve couleurs et empreintes des PNG fournis.
Ces ressources dérivées ne sont pas présentées comme des créations originales.
## Clé dorée beta.121
Le PNG 16 × 16 `golden_wrench.png` a été fourni par le créateur de Sanctuary
le 17 septembre 2026. Il est conservé octet pour octet dans le mod, le pack
intégré et le template personnel (SHA-256
`a97570908db75caf8e6fc2f5ecabf12c54fd99bfea7be634df66c4310dca22af`).
Le template regroupe les ressources client déjà distribuées par Sanctuary ;
leurs crédits et conditions respectives restent applicables.
+50
View File
@@ -0,0 +1,50 @@
# Archives pour le site Sanctuary
Ce dossier conserve les références réutilisables pour le site et le Galactium.
Il est indépendant de `build` : nettoyer les builds ne supprime pas les
collections placées ici. Aucun contenu n'est publié automatiquement.
- [Maquette Blocodex autonome](blocodex-navigation-v1/index.html) : ouvrir
ce fichier dans un navigateur, même hors ligne. Copier son dossier suffit.
- [Source de la maquette](blocodex-navigation-v1/fragment.html) et
[guide de réutilisation](blocodex-navigation-v1/README.md).
- [ZIP léger de la maquette](snapshots/Sanctuary-Blocodex-2026-09-13-v1.zip)
(10 188 octets), avec HTML autonome et source éditable.
- [Collection du 13 septembre 2026](snapshots/2026-09-13-web-v1/index.html) :
catalogue des images, PDF, documents, atlas et maquette.
- [Archive ZIP complète](snapshots/Sanctuary-Web-Archive-2026-09-13-v1.zip).
- [Inventaire et empreintes](catalog-2026-09-13-web-v1.json).
Collection initiale : **782 fichiers**, ZIP de **196 242 020 octets**.
Copie vérifiée par SHA-256, intégrité ZIP et empreintes de chaque membre
contrôlées ; les trois manifestes originaux des atlas passent également.
Reçu : [receipt-2026-09-13-web-v1.json](receipt-2026-09-13-web-v1.json).
Les collections volumineuses et ZIP sont conservés localement dans
`snapshots/`, ignoré par Git. Les sources de la maquette, les notices, le
script et le catalogue peuvent être versionnés. Une copie locale durable
ne remplace pas une sauvegarde sur un autre support.
Le fonds alpha réunit les images et PDF retrouvés dans les sorties du dépôt
jusqu'à alpha.30.7 et les trois atlas complets alpha.30.5, 30.6 et 30.7.
Leur provenance distingue artefacts livrés, essais intermédiaires et documents
de conception. Une image de recherche n'est pas une preuve de fonctionnalité
livrée. Les sources originales restent intactes et les doublons conservent
leurs chemins pour ne pas perdre leur contexte.
La collection inclut aussi les captures beta.003/004, les six icônes de
compétences et la maquette validée du Blocodex, dans des catégories séparées.
Les documents sont une photographie au jour de l'archivage ; les archives
atlas originales conservent en plus leur documentation historique exacte.
Une version de collection est immuable : le script refuse de l'écraser.
Pour une nouvelle collecte, choisir un autre identifiant :
```sh
python3 scripts/archive_web_assets.py --id AAAA-MM-JJ-web-v2
```
Le catalogue JSON contient les chemins relatifs, sources, catégories, versions
déduites des noms, tailles et SHA-256, pour une future ingestion par le site.
La présence d'un fichier dans l'archive ne change pas sa licence : conserver
les notices et les crédits, notamment pour les contenus issus de Minecraft.
@@ -0,0 +1,30 @@
# Blocodex — référence interactive v1
Conception et navigation approuvées par le créateur le 13 septembre 2026,
après beta.004. La maquette contient des données fictives.
Ouvrir `index.html` dans un navigateur. Elle fonctionne sans Codex, sans
serveur, sans compte, sans connexion et sans dépendance téléchargée.
Les interactions sont en mémoire : recharger revient à l'état initial.
Le délai de 24 heures est illustré, pas appliqué à un véritable habitant.
La vue opérateur est une simulation d'interface, pas une permission réelle.
`fragment.html` conserve exactement la source affichée dans la conversation.
`index.html` l'encapsule dans une page française autonome, avec ses styles
et son JavaScript. Le sélecteur de variante Tweak est facultatif et reste
inactif hors Codex ; aucune fonction de la navigation n'en dépend.
Pour le site, copier le dossier ou intégrer le fragment dans un composant
isolé. Conserver l'identifiant racine unique et exécuter le script après le
montage ; prévoir une instance par page. Les données et actions réelles
seront raccordées ultérieurement aux services Sanctuary.
L'export standard Visualize a été produit avant l'encapsulation hors ligne.
L'archive réutilisable garde uniquement la maquette et son code, sans le
runtime d'aperçu, ses bibliothèques CDN ou un appel aux API de l'application.
Origine : discussion Sanctuary / Blocodex du 13 septembre 2026.
La mise en page a été créée pour ce projet ; aucun sprite Minecraft ou police
propriétaire n'est embarqué dans cette maquette. Les polices sont système.
Le cadrage est conservé dans `references/docs/blocodex-navigation.md` au sein
de la collection complète. Le code du jeu reste en beta.004 à cet archivage.
@@ -0,0 +1,124 @@
<div id="sanctuary-navigation" aria-label="Proposition de navigation du Blocodex">
<style>
#sanctuary-navigation {font:14px/1.5 ui-monospace,SFMono-Regular,Consolas,monospace;color:#ededed;color-scheme:dark;}
#sanctuary-navigation * {box-sizing:border-box;}
#sanctuary-navigation .mc-window {background:#232820;border:2px solid #121411;}
#sanctuary-navigation .mc-head {padding:14px 12px 10px;background:#20261e;border-bottom:2px solid #747b6e;}
#sanctuary-navigation .mc-title {text-align:center;font-size:20px;text-shadow:2px 2px #111;margin-bottom:12px;}
#sanctuary-navigation .mc-nav {display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:5px;}
#sanctuary-navigation button {font:inherit;color:#f2f2f2;cursor:pointer;background:#626262;border:2px solid #121212;box-shadow:inset 2px 2px #9b9b9b,inset -2px -2px #373737;border-radius:0;padding:7px 9px;min-width:0;text-shadow:1px 1px #242424;}
#sanctuary-navigation button:hover {background:#787878;}
#sanctuary-navigation button[aria-pressed="true"] {background:#32382f;box-shadow:inset 1px 1px #192015;color:#b7d7a4;}
#sanctuary-navigation button:disabled {background:#343434;box-shadow:none;color:#aaa;cursor:default;}
#sanctuary-navigation .mc-preview {display:flex;align-items:center;justify-content:space-between;gap:8px;flex-wrap:wrap;padding:10px 12px;background:#171b16;color:#c6cdc1;font-size:12px;}
#sanctuary-navigation select {font:inherit;background:#30362b;color:#fff;border:1px solid #92998c;border-radius:0;padding:5px;max-width:100%;}
#sanctuary-navigation .mc-local {display:flex;gap:5px;flex-wrap:wrap;padding:10px 12px 0;}
#sanctuary-navigation .mc-local button {padding:4px 9px;}
#sanctuary-navigation .mc-main {padding:18px 16px;min-height:300px;}
#sanctuary-navigation .mc-two {display:grid;grid-template-columns:1fr 1fr;gap:20px;}
#sanctuary-navigation .mc-heading {font-size:16px;margin:0 0 10px;color:#b7d7a4;font-weight:400;}
#sanctuary-navigation .mc-caption {color:#c2c8be;font-size:12px;margin:5px 0 12px;}
#sanctuary-navigation .mc-name {font-size:21px;color:#87c7f0;}
#sanctuary-navigation .mc-list {display:grid;gap:6px;margin-bottom:12px;}
#sanctuary-navigation .mc-row {display:flex;justify-content:space-between;align-items:center;gap:14px;padding:8px 0;border-bottom:1px solid #444b3e;}
#sanctuary-navigation .mc-row span:last-child {text-align:right;color:#c4cec1;font-size:12px;}
#sanctuary-navigation .mc-choice {display:block;margin:0 0 14px;}
#sanctuary-navigation .mc-choice select {display:block;width:100%;margin-top:5px;}
#sanctuary-navigation .mc-main p {margin:0 0 12px;}
#sanctuary-navigation .mc-link {width:100%;text-align:left;}
#sanctuary-navigation .mc-op {color:#f1cd82;border-bottom:1px solid #9c8150;padding:0 0 12px;margin-bottom:14px;}
#sanctuary-navigation .mc-footer {padding:14px;text-align:center;border-top:2px solid #747b6e;background:#20261e;}
#sanctuary-navigation .mc-footer button {width:min(240px,100%);}
#sanctuary-navigation .mc-detail {padding:12px;background:#181d16;border-left:2px solid #8aa579;}
#sanctuary-navigation .mc-lock {display:grid;gap:8px;max-width:360px;margin:25px auto;text-align:center;}
#sanctuary-navigation .mc-badge {color:#e2ce88;}
#sanctuary-navigation .mc-status {color:#b7d7a4;font-size:12px;}
@media(max-width:500px) {
#sanctuary-navigation .mc-nav {grid-template-columns:repeat(2,minmax(0,1fr));}
#sanctuary-navigation .mc-two {grid-template-columns:1fr;gap:16px;}
#sanctuary-navigation .mc-main {padding:14px 12px;min-height:280px;}
#sanctuary-navigation .mc-row {gap:8px;}
}
@media(pointer:coarse) {#sanctuary-navigation button {min-height:44px;}}
</style>
<div class="mc-window">
<div class="mc-preview">
<span>Maquette · données fictives</span>
<label>Vue dessai <select data-role aria-label="Profil simulé"><option value="player">Joueur</option><option value="operator">Opérateur</option></select></label>
</div>
<div class="mc-head">
<div class="mc-title">Blocodex</div>
<nav class="mc-nav" aria-label="Rubriques du Blocodex">
<button type="button" data-tab="discovery" aria-pressed="false">Découvertes</button>
<button type="button" data-tab="progress" aria-pressed="false">Progression</button>
<button type="button" data-tab="world" aria-pressed="false">Monde</button>
<button type="button" data-tab="inhabitant" aria-pressed="true">Habitant</button>
</nav>
</div>
<nav class="mc-local" aria-label="Sous-rubriques"></nav>
<div class="mc-main" aria-live="polite"></div>
<div class="mc-footer"><button type="button" data-done>Terminé</button></div>
</div>
<script>
(() => {
const root=document.getElementById('sanctuary-navigation');
const content=root.querySelector('.mc-main');
const local=root.querySelector('.mc-local');
const nav=root.querySelector('.mc-nav');
const state={tab:'inhabitant',page:'',role:'player',favorite:'Loup',changed:false,trophy:'Des diamants !',constellation:'La Traversée',detail:'',worldLabel:'Monde'};
const pages={discovery:['Blocs','Objets','Créatures','Recettes'],progress:['Capacités','Exploits','Statistiques'],world:['Atlas','Constructions','Histoire'],inhabitant:[]};
const knowledge={Blocs:[['Pierre','Roche minée et déjà possédée.',true],['Bûche de chêne','Bois observé et récolté.',true],['Terre','Bloc observé et déjà possédé.',true],['Débris antiques','Aucune découverte personnelle.',false]],Objets:[['Pomme','Objet ramassé. Sa fiche décrit ses usages connus.',true],['Pioche en pierre','Outil fabriqué et déjà possédé.',true],['Élytre','Aucune découverte personnelle.',false]],Créatures:[['Loup','Créature observée. Peut être choisie comme favorite.',true],['Chat','Créature observée. Peut être choisie comme favorite.',true],['Renard','Aucune découverte personnelle.',false]]};
const esc=value=>String(value).replace(/[&<>"']/g,c=>({'&':'&amp;','<':'&lt;','>':'&gt;','"':'&quot;',"'":'&#39;'}[c]));
const row=(a,b)=>`<div class="mc-row"><span>${esc(a)}</span><span>${esc(b)}</span></div>`;
const button=(label,action)=>`<button type="button" data-action="${action}">${label}</button>`;
function go(tab,page=''){state.tab=tab;state.page=page||pages[tab][0]||'';state.detail='';render();}
function render(){
root.querySelector('[data-tab="world"]').textContent=state.worldLabel;
nav.querySelectorAll('button').forEach(b=>b.setAttribute('aria-pressed',String(b.dataset.tab===state.tab)));
local.innerHTML=pages[state.tab].map(p=>`<button type="button" data-page="${p}" aria-pressed="${p===state.page}">${p}</button>`).join('');
local.hidden=!pages[state.tab].length;
const op=state.role==='operator'?'<div class="mc-op">Vue opérateur · inspection sans découverte automatique</div>':'';
let body='';
if(state.tab==='inhabitant'){
body=`<div class="mc-two"><section><div class="mc-name">poupoutain</div><p class="mc-caption">Habitant de Sanctuary</p><p>Je construis des passages entre les îles.</p><div class="mc-heading">À lhonneur</div><div class="mc-detail"><span class="mc-badge">★ ${esc(state.trophy)}</span><div class="mc-caption">Exploit Minecraft accompli</div>${button('Choisir un exploit','achievements')}</div></section><section><label class="mc-choice">Constellation favorite<select data-constellation><option${state.constellation==='La Traversée'?' selected':''}>La Traversée</option><option${state.constellation==='Le Refuge'?' selected':''}>Le Refuge</option></select></label><label class="mc-choice">Créature favorite<select data-favorite ${state.changed?'disabled':''}><option${state.favorite==='Loup'?' selected':''}>Loup</option><option${state.favorite==='Chat'?' selected':''}>Chat</option></select></label><div class="mc-caption">Choix parmi les créatures découvertes.</div><p class="mc-status">${state.changed?'Favori modifié · prochain changement dans 24 h':'Changement disponible'}</p>${button('Ouvrir le bestiaire','creatures')}</section></div>`;
} else if(state.tab==='discovery'){
if(state.page==='Recettes') body=`<div class="mc-heading">Recettes révélées</div>${row('Pioche en pierre','Consultable')}${row('Planches de chêne','Consultable')}<p class="mc-caption">La fabrication manuelle reste libre.</p>`;
else {
const entries=knowledge[state.page];
const visible=entries.filter(e=>e[2]||state.role==='operator');
body=`${op}<div class="mc-heading">${state.page} · ${visible.length} ${state.role==='operator'?'entrées':'découvertes'}</div><div class="mc-two"><div class="mc-list">${visible.map(e=>`<button type="button" class="mc-link" data-entry="${esc(e[0])}">${esc(e[0])}${e[2]?'':' · Non découvert'}</button>`).join('')}</div><div class="mc-detail">${state.detail?esc(state.detail):'Sélectionner une découverte'}</div></div>`;
}
} else if(state.tab==='progress'){
if(state.page==='Capacités') body=`<div class="mc-two"><section><div class="mc-heading">Compétences</div>${row('Vie','3')}${row('Faim','3')}${row('Minage','À venir')}${row('Construction','À venir')}${row('Souffle','3')}${row('Inventaire','À venir')}</section><section><div class="mc-heading">Aptitudes</div>${row('Noms des mobs','Acquis')}${row('Minimap','À acquérir')}${row('Grande carte','À acquérir')}${row('Marqueurs','À acquérir')}</section></div>`;
if(state.page==='Exploits') body=`<div class="mc-heading">Minecraft</div><div class="mc-list"><button type="button" class="mc-link" data-trophy="Des diamants !">★ Des diamants ! · Épingler au passeport</button><button type="button" class="mc-link" data-trophy="L’âge de pierre">★ L’âge de pierre · Épingler au passeport</button></div><div class="mc-heading">Sanctuary · accomplissements du serveur</div><div class="mc-caption">Objectifs collectifs et ouvertures dexpansions.</div>`;
if(state.page==='Statistiques') body=`<div class="mc-heading">Mes statistiques Minecraft</div>${row('Blocs minés','248')}${row('Distance parcourue','3,2 km')}${row('Temps de jeu','2 h 14 min')}<div class="mc-caption">Accès aux compteurs vanilla depuis la progression.</div>`;
} else if(state.tab==='world'){
if(state.page==='Atlas') body=`<div class="mc-lock"><div class="mc-heading">Grande carte</div><p>Aptitude à acquérir</p>${button('Voir dans Progression','abilities')}<div class="mc-caption">Minimap, grande carte et marqueurs se débloquent séparément.</div></div>`;
if(state.page==='Constructions') body=`<div class="mc-heading">Mes plans</div><div class="mc-detail"><p>Passerelle en bois</p>${row('Planches de chêne','64')}${row('Barrières de chêne','24')}<div class="mc-caption">Plan dexemple · matériaux déjà connus</div><button type="button" disabled>Projection Litematica · intégration à venir</button></div>`;
if(state.page==='Histoire') body=`<div class="mc-heading">Histoire du monde</div>${row('Chronique','Événements et découvertes')}${row('Gazette','Nouvelles et courrier')}${row('Archives','Documents révélés du Galactium')}<div class="mc-caption">Seules les histoires révélées apparaissent.</div>`;
}
content.innerHTML=body;
}
root.addEventListener('click',event=>{
const b=event.target.closest('button');if(!b||b.disabled)return;
if(b.dataset.tab){go(b.dataset.tab);return;}
if(b.dataset.page){go(state.tab,b.dataset.page);return;}
if(b.dataset.trophy){state.trophy=b.dataset.trophy;go('inhabitant');return;}
if(b.dataset.entry){const e=knowledge[state.page].find(e=>e[0]===b.dataset.entry);state.detail=e[0]+' — '+e[1];render();return;}
if(b.dataset.action==='achievements')go('progress','Exploits');
if(b.dataset.action==='creatures')go('discovery','Créatures');
if(b.dataset.action==='abilities')go('progress','Capacités');
if(b.hasAttribute('data-done')){content.innerHTML='<div class="mc-lock">Retour au jeu</div>';local.hidden=true;b.textContent='Rouvrir le Blocodex';b.removeAttribute('data-done');b.setAttribute('data-reopen','');}
else if(b.hasAttribute('data-reopen')){b.textContent='Terminé';b.removeAttribute('data-reopen');b.setAttribute('data-done','');render();}
});
root.addEventListener('change',event=>{
const e=event.target;
if(e.hasAttribute('data-role')){state.role=e.value;state.detail='';render();}
if(e.hasAttribute('data-favorite')&&!state.changed){state.favorite=e.value;state.changed=true;render();}
if(e.hasAttribute('data-constellation')){state.constellation=e.value;render();}
});
render();
if(globalThis.Tweak){const tweak=new Tweak({container:root,onChange:render});tweak.addSelect(state,'worldLabel',{label:'Nom de la troisième rubrique',options:['Monde','Histoire']});}
})();
</script>
</div>
@@ -0,0 +1,138 @@
<!doctype html>
<html lang="fr">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta name="referrer" content="no-referrer">
<meta http-equiv="Content-Security-Policy" content="default-src 'none'; script-src 'unsafe-inline'; style-src 'unsafe-inline'; img-src data:; connect-src 'none'; base-uri 'none'; form-action 'none'">
<title>Sanctuary — Blocodex, référence interactive</title>
<style>html{background:#171b16;color-scheme:dark}body{margin:0;padding:16px;max-width:1024px;margin-inline:auto}button,select{font-family:inherit}</style>
</head>
<body>
<div id="sanctuary-navigation" aria-label="Proposition de navigation du Blocodex">
<style>
#sanctuary-navigation {font:14px/1.5 ui-monospace,SFMono-Regular,Consolas,monospace;color:#ededed;color-scheme:dark;}
#sanctuary-navigation * {box-sizing:border-box;}
#sanctuary-navigation .mc-window {background:#232820;border:2px solid #121411;}
#sanctuary-navigation .mc-head {padding:14px 12px 10px;background:#20261e;border-bottom:2px solid #747b6e;}
#sanctuary-navigation .mc-title {text-align:center;font-size:20px;text-shadow:2px 2px #111;margin-bottom:12px;}
#sanctuary-navigation .mc-nav {display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:5px;}
#sanctuary-navigation button {font:inherit;color:#f2f2f2;cursor:pointer;background:#626262;border:2px solid #121212;box-shadow:inset 2px 2px #9b9b9b,inset -2px -2px #373737;border-radius:0;padding:7px 9px;min-width:0;text-shadow:1px 1px #242424;}
#sanctuary-navigation button:hover {background:#787878;}
#sanctuary-navigation button[aria-pressed="true"] {background:#32382f;box-shadow:inset 1px 1px #192015;color:#b7d7a4;}
#sanctuary-navigation button:disabled {background:#343434;box-shadow:none;color:#aaa;cursor:default;}
#sanctuary-navigation .mc-preview {display:flex;align-items:center;justify-content:space-between;gap:8px;flex-wrap:wrap;padding:10px 12px;background:#171b16;color:#c6cdc1;font-size:12px;}
#sanctuary-navigation select {font:inherit;background:#30362b;color:#fff;border:1px solid #92998c;border-radius:0;padding:5px;max-width:100%;}
#sanctuary-navigation .mc-local {display:flex;gap:5px;flex-wrap:wrap;padding:10px 12px 0;}
#sanctuary-navigation .mc-local button {padding:4px 9px;}
#sanctuary-navigation .mc-main {padding:18px 16px;min-height:300px;}
#sanctuary-navigation .mc-two {display:grid;grid-template-columns:1fr 1fr;gap:20px;}
#sanctuary-navigation .mc-heading {font-size:16px;margin:0 0 10px;color:#b7d7a4;font-weight:400;}
#sanctuary-navigation .mc-caption {color:#c2c8be;font-size:12px;margin:5px 0 12px;}
#sanctuary-navigation .mc-name {font-size:21px;color:#87c7f0;}
#sanctuary-navigation .mc-list {display:grid;gap:6px;margin-bottom:12px;}
#sanctuary-navigation .mc-row {display:flex;justify-content:space-between;align-items:center;gap:14px;padding:8px 0;border-bottom:1px solid #444b3e;}
#sanctuary-navigation .mc-row span:last-child {text-align:right;color:#c4cec1;font-size:12px;}
#sanctuary-navigation .mc-choice {display:block;margin:0 0 14px;}
#sanctuary-navigation .mc-choice select {display:block;width:100%;margin-top:5px;}
#sanctuary-navigation .mc-main p {margin:0 0 12px;}
#sanctuary-navigation .mc-link {width:100%;text-align:left;}
#sanctuary-navigation .mc-op {color:#f1cd82;border-bottom:1px solid #9c8150;padding:0 0 12px;margin-bottom:14px;}
#sanctuary-navigation .mc-footer {padding:14px;text-align:center;border-top:2px solid #747b6e;background:#20261e;}
#sanctuary-navigation .mc-footer button {width:min(240px,100%);}
#sanctuary-navigation .mc-detail {padding:12px;background:#181d16;border-left:2px solid #8aa579;}
#sanctuary-navigation .mc-lock {display:grid;gap:8px;max-width:360px;margin:25px auto;text-align:center;}
#sanctuary-navigation .mc-badge {color:#e2ce88;}
#sanctuary-navigation .mc-status {color:#b7d7a4;font-size:12px;}
@media(max-width:500px) {
#sanctuary-navigation .mc-nav {grid-template-columns:repeat(2,minmax(0,1fr));}
#sanctuary-navigation .mc-two {grid-template-columns:1fr;gap:16px;}
#sanctuary-navigation .mc-main {padding:14px 12px;min-height:280px;}
#sanctuary-navigation .mc-row {gap:8px;}
}
@media(pointer:coarse) {#sanctuary-navigation button {min-height:44px;}}
</style>
<div class="mc-window">
<div class="mc-preview">
<span>Maquette · données fictives</span>
<label>Vue dessai <select data-role aria-label="Profil simulé"><option value="player">Joueur</option><option value="operator">Opérateur</option></select></label>
</div>
<div class="mc-head">
<div class="mc-title">Blocodex</div>
<nav class="mc-nav" aria-label="Rubriques du Blocodex">
<button type="button" data-tab="discovery" aria-pressed="false">Découvertes</button>
<button type="button" data-tab="progress" aria-pressed="false">Progression</button>
<button type="button" data-tab="world" aria-pressed="false">Monde</button>
<button type="button" data-tab="inhabitant" aria-pressed="true">Habitant</button>
</nav>
</div>
<nav class="mc-local" aria-label="Sous-rubriques"></nav>
<div class="mc-main" aria-live="polite"></div>
<div class="mc-footer"><button type="button" data-done>Terminé</button></div>
</div>
<script>
(() => {
const root=document.getElementById('sanctuary-navigation');
const content=root.querySelector('.mc-main');
const local=root.querySelector('.mc-local');
const nav=root.querySelector('.mc-nav');
const state={tab:'inhabitant',page:'',role:'player',favorite:'Loup',changed:false,trophy:'Des diamants !',constellation:'La Traversée',detail:'',worldLabel:'Monde'};
const pages={discovery:['Blocs','Objets','Créatures','Recettes'],progress:['Capacités','Exploits','Statistiques'],world:['Atlas','Constructions','Histoire'],inhabitant:[]};
const knowledge={Blocs:[['Pierre','Roche minée et déjà possédée.',true],['Bûche de chêne','Bois observé et récolté.',true],['Terre','Bloc observé et déjà possédé.',true],['Débris antiques','Aucune découverte personnelle.',false]],Objets:[['Pomme','Objet ramassé. Sa fiche décrit ses usages connus.',true],['Pioche en pierre','Outil fabriqué et déjà possédé.',true],['Élytre','Aucune découverte personnelle.',false]],Créatures:[['Loup','Créature observée. Peut être choisie comme favorite.',true],['Chat','Créature observée. Peut être choisie comme favorite.',true],['Renard','Aucune découverte personnelle.',false]]};
const esc=value=>String(value).replace(/[&<>"']/g,c=>({'&':'&amp;','<':'&lt;','>':'&gt;','"':'&quot;',"'":'&#39;'}[c]));
const row=(a,b)=>`<div class="mc-row"><span>${esc(a)}</span><span>${esc(b)}</span></div>`;
const button=(label,action)=>`<button type="button" data-action="${action}">${label}</button>`;
function go(tab,page=''){state.tab=tab;state.page=page||pages[tab][0]||'';state.detail='';render();}
function render(){
root.querySelector('[data-tab="world"]').textContent=state.worldLabel;
nav.querySelectorAll('button').forEach(b=>b.setAttribute('aria-pressed',String(b.dataset.tab===state.tab)));
local.innerHTML=pages[state.tab].map(p=>`<button type="button" data-page="${p}" aria-pressed="${p===state.page}">${p}</button>`).join('');
local.hidden=!pages[state.tab].length;
const op=state.role==='operator'?'<div class="mc-op">Vue opérateur · inspection sans découverte automatique</div>':'';
let body='';
if(state.tab==='inhabitant'){
body=`<div class="mc-two"><section><div class="mc-name">poupoutain</div><p class="mc-caption">Habitant de Sanctuary</p><p>Je construis des passages entre les îles.</p><div class="mc-heading">À lhonneur</div><div class="mc-detail"><span class="mc-badge">★ ${esc(state.trophy)}</span><div class="mc-caption">Exploit Minecraft accompli</div>${button('Choisir un exploit','achievements')}</div></section><section><label class="mc-choice">Constellation favorite<select data-constellation><option${state.constellation==='La Traversée'?' selected':''}>La Traversée</option><option${state.constellation==='Le Refuge'?' selected':''}>Le Refuge</option></select></label><label class="mc-choice">Créature favorite<select data-favorite ${state.changed?'disabled':''}><option${state.favorite==='Loup'?' selected':''}>Loup</option><option${state.favorite==='Chat'?' selected':''}>Chat</option></select></label><div class="mc-caption">Choix parmi les créatures découvertes.</div><p class="mc-status">${state.changed?'Favori modifié · prochain changement dans 24 h':'Changement disponible'}</p>${button('Ouvrir le bestiaire','creatures')}</section></div>`;
} else if(state.tab==='discovery'){
if(state.page==='Recettes') body=`<div class="mc-heading">Recettes révélées</div>${row('Pioche en pierre','Consultable')}${row('Planches de chêne','Consultable')}<p class="mc-caption">La fabrication manuelle reste libre.</p>`;
else {
const entries=knowledge[state.page];
const visible=entries.filter(e=>e[2]||state.role==='operator');
body=`${op}<div class="mc-heading">${state.page} · ${visible.length} ${state.role==='operator'?'entrées':'découvertes'}</div><div class="mc-two"><div class="mc-list">${visible.map(e=>`<button type="button" class="mc-link" data-entry="${esc(e[0])}">${esc(e[0])}${e[2]?'':' · Non découvert'}</button>`).join('')}</div><div class="mc-detail">${state.detail?esc(state.detail):'Sélectionner une découverte'}</div></div>`;
}
} else if(state.tab==='progress'){
if(state.page==='Capacités') body=`<div class="mc-two"><section><div class="mc-heading">Compétences</div>${row('Vie','3')}${row('Faim','3')}${row('Minage','À venir')}${row('Construction','À venir')}${row('Souffle','3')}${row('Inventaire','À venir')}</section><section><div class="mc-heading">Aptitudes</div>${row('Noms des mobs','Acquis')}${row('Minimap','À acquérir')}${row('Grande carte','À acquérir')}${row('Marqueurs','À acquérir')}</section></div>`;
if(state.page==='Exploits') body=`<div class="mc-heading">Minecraft</div><div class="mc-list"><button type="button" class="mc-link" data-trophy="Des diamants !">★ Des diamants ! · Épingler au passeport</button><button type="button" class="mc-link" data-trophy="L’âge de pierre">★ L’âge de pierre · Épingler au passeport</button></div><div class="mc-heading">Sanctuary · accomplissements du serveur</div><div class="mc-caption">Objectifs collectifs et ouvertures dexpansions.</div>`;
if(state.page==='Statistiques') body=`<div class="mc-heading">Mes statistiques Minecraft</div>${row('Blocs minés','248')}${row('Distance parcourue','3,2 km')}${row('Temps de jeu','2 h 14 min')}<div class="mc-caption">Accès aux compteurs vanilla depuis la progression.</div>`;
} else if(state.tab==='world'){
if(state.page==='Atlas') body=`<div class="mc-lock"><div class="mc-heading">Grande carte</div><p>Aptitude à acquérir</p>${button('Voir dans Progression','abilities')}<div class="mc-caption">Minimap, grande carte et marqueurs se débloquent séparément.</div></div>`;
if(state.page==='Constructions') body=`<div class="mc-heading">Mes plans</div><div class="mc-detail"><p>Passerelle en bois</p>${row('Planches de chêne','64')}${row('Barrières de chêne','24')}<div class="mc-caption">Plan dexemple · matériaux déjà connus</div><button type="button" disabled>Projection Litematica · intégration à venir</button></div>`;
if(state.page==='Histoire') body=`<div class="mc-heading">Histoire du monde</div>${row('Chronique','Événements et découvertes')}${row('Gazette','Nouvelles et courrier')}${row('Archives','Documents révélés du Galactium')}<div class="mc-caption">Seules les histoires révélées apparaissent.</div>`;
}
content.innerHTML=body;
}
root.addEventListener('click',event=>{
const b=event.target.closest('button');if(!b||b.disabled)return;
if(b.dataset.tab){go(b.dataset.tab);return;}
if(b.dataset.page){go(state.tab,b.dataset.page);return;}
if(b.dataset.trophy){state.trophy=b.dataset.trophy;go('inhabitant');return;}
if(b.dataset.entry){const e=knowledge[state.page].find(e=>e[0]===b.dataset.entry);state.detail=e[0]+' — '+e[1];render();return;}
if(b.dataset.action==='achievements')go('progress','Exploits');
if(b.dataset.action==='creatures')go('discovery','Créatures');
if(b.dataset.action==='abilities')go('progress','Capacités');
if(b.hasAttribute('data-done')){content.innerHTML='<div class="mc-lock">Retour au jeu</div>';local.hidden=true;b.textContent='Rouvrir le Blocodex';b.removeAttribute('data-done');b.setAttribute('data-reopen','');}
else if(b.hasAttribute('data-reopen')){b.textContent='Terminé';b.removeAttribute('data-reopen');b.setAttribute('data-done','');render();}
});
root.addEventListener('change',event=>{
const e=event.target;
if(e.hasAttribute('data-role')){state.role=e.value;state.detail='';render();}
if(e.hasAttribute('data-favorite')&&!state.changed){state.favorite=e.value;state.changed=true;render();}
if(e.hasAttribute('data-constellation')){state.constellation=e.value;render();}
});
render();
if(globalThis.Tweak){const tweak=new Tweak({container:root,onChange:render});tweak.addSelect(state,'worldLabel',{label:'Nom de la troisième rubrique',options:['Monde','Histoire']});}
})();
</script>
</div>
</body>
</html>
File diff suppressed because it is too large Load Diff
@@ -0,0 +1,28 @@
{
"id": "2026-09-13-web-v1",
"zip": "snapshots/Sanctuary-Web-Archive-2026-09-13-v1.zip",
"zip_bytes": 196242020,
"zip_sha256": "5e6277942e791a928b70c2b11490d5367f6b10a4b6d3b196c9cef703b1e431d5",
"manifest_sha256": "735e08a304a398fdb3d95c73c9c8f95c87027ae9d0459f708cfac044dd837622",
"file_count": 782,
"counts": {
"alpha-figures": 13,
"alpha-research": 406,
"alpha-atlas": 248,
"beta-previews": 17,
"creator-icons": 6,
"title-reference": 1,
"alpha-release-atlas": 3,
"blocodex-concept": 3,
"documentation": 74,
"integration-intake": 2,
"reproduction-script": 6,
"archive-index": 2
},
"checks": [
"copies_sha256",
"three_original_atlas_manifests",
"zip_crc",
"zip_members_sha256"
]
}
@@ -0,0 +1,584 @@
{
"checked_at": "2026-09-13",
"target": "26.3-pre-2",
"projects": [
{
"slug": "simple-atlas",
"title": "Simple Atlas",
"license": {
"id": "MIT",
"name": "MIT License",
"url": null
},
"source_url": "https://github.com/RubberToe-06/simple_atlas",
"description": "A no-nonsense Vanilla+ Atlas for all your mapping needs! Heavily inspired by Map Atlases by Pepperoni-Jabroni",
"fabric_latest": [
{
"id": "6Hy4rXil",
"version_number": "1.2.0",
"date_published": "2026-06-18T20:58:16.322322Z",
"game_versions": [
"26.2"
],
"loaders": [
"fabric",
"quilt"
],
"dependencies": [
{
"version_id": "Nv3xnWXd",
"project_id": "9s6osm5g",
"file_name": null,
"dependency_type": "required"
}
]
}
],
"fabric_26_2": [
{
"id": "6Hy4rXil",
"version_number": "1.2.0",
"date_published": "2026-06-18T20:58:16.322322Z",
"game_versions": [
"26.2"
],
"loaders": [
"fabric",
"quilt"
],
"dependencies": [
{
"version_id": "Nv3xnWXd",
"project_id": "9s6osm5g",
"file_name": null,
"dependency_type": "required"
}
]
}
],
"fabric_target": []
},
{
"slug": "improved-maps",
"title": "Improved Maps",
"license": {
"id": "MIT",
"name": "MIT License",
"url": null
},
"source_url": "https://github.com/craftycorvid/ImprovedMaps",
"description": "Server-side mod (with optional client-side features) implementing Atlases and other map features",
"fabric_latest": [
{
"id": "kS9puVhR",
"version_number": "1.0",
"date_published": "2026-08-21T22:56:45.560111Z",
"game_versions": [
"26.2"
],
"loaders": [
"fabric"
],
"dependencies": [
{
"version_id": null,
"project_id": "mOgUt4GM",
"file_name": null,
"dependency_type": "optional"
},
{
"version_id": null,
"project_id": "xGdtZczs",
"file_name": null,
"dependency_type": "required"
},
{
"version_id": null,
"project_id": "1eAoo2KR",
"file_name": null,
"dependency_type": "optional"
},
{
"version_id": null,
"project_id": "P7dR8mSH",
"file_name": null,
"dependency_type": "required"
}
]
}
],
"fabric_26_2": [
{
"id": "kS9puVhR",
"version_number": "1.0",
"date_published": "2026-08-21T22:56:45.560111Z",
"game_versions": [
"26.2"
],
"loaders": [
"fabric"
],
"dependencies": [
{
"version_id": null,
"project_id": "mOgUt4GM",
"file_name": null,
"dependency_type": "optional"
},
{
"version_id": null,
"project_id": "xGdtZczs",
"file_name": null,
"dependency_type": "required"
},
{
"version_id": null,
"project_id": "1eAoo2KR",
"file_name": null,
"dependency_type": "optional"
},
{
"version_id": null,
"project_id": "P7dR8mSH",
"file_name": null,
"dependency_type": "required"
}
]
}
],
"fabric_target": []
},
{
"slug": "ultimate_map_atlases",
"title": "Ultimate Map Atlases",
"license": {
"id": "GPL-3.0-only",
"name": "GNU General Public License v3.0 only",
"url": null
},
"source_url": "https://github.com/nanakytim/Ultimate_Map_Atlases",
"description": "Atlases can be crafted and store Maps, making exploration easier and more fun! Works in tandem with a Compass.",
"fabric_latest": [
{
"id": "bgd39YOI",
"version_number": "26.2",
"date_published": "2026-06-17T13:27:13.516403Z",
"game_versions": [
"26.2"
],
"loaders": [
"fabric"
],
"dependencies": []
}
],
"fabric_26_2": [
{
"id": "bgd39YOI",
"version_number": "26.2",
"date_published": "2026-06-17T13:27:13.516403Z",
"game_versions": [
"26.2"
],
"loaders": [
"fabric"
],
"dependencies": []
}
],
"fabric_target": []
},
{
"slug": "bluemap",
"title": "BlueMap",
"license": {
"id": "MIT",
"name": "MIT License",
"url": "https://github.com/BlueMap-Minecraft/BlueMap/blob/master/LICENSE"
},
"source_url": "https://github.com/BlueMap-Minecraft/BlueMap",
"description": "A Minecraft mapping tool that creates 3D models of your Minecraft worlds and displays them in a web viewer.",
"fabric_latest": [
{
"id": "xvccCRD9",
"version_number": "5.24-fabric",
"date_published": "2026-09-10T15:38:16.522019Z",
"game_versions": [
"26.1",
"26.1.1",
"26.1.2",
"26.2"
],
"loaders": [
"fabric"
],
"dependencies": [
{
"version_id": null,
"project_id": "P7dR8mSH",
"file_name": null,
"dependency_type": "required"
}
]
}
],
"fabric_26_2": [
{
"id": "xvccCRD9",
"version_number": "5.24-fabric",
"date_published": "2026-09-10T15:38:16.522019Z",
"game_versions": [
"26.1",
"26.1.1",
"26.1.2",
"26.2"
],
"loaders": [
"fabric"
],
"dependencies": [
{
"version_id": null,
"project_id": "P7dR8mSH",
"file_name": null,
"dependency_type": "required"
}
]
}
],
"fabric_target": []
},
{
"slug": "map-atlases-forge",
"title": "Map Atlases [Forge]",
"license": {
"id": "GPL-3.0-only",
"name": "GNU General Public License v3.0 only",
"url": null
},
"source_url": "https://github.com/MehVahdJukaar/mapatlases-neoforge",
"description": "A world map/mini map mod based on vanilla Maps!",
"fabric_latest": [],
"fabric_26_2": [],
"fabric_target": []
},
{
"slug": "antique-atlas",
"title": "Antique Atlas",
"license": {
"id": "GPL-3.0-only",
"name": "GNU General Public License v3.0 only",
"url": null
},
"source_url": "https://github.com/AntiqueAtlasTeam/AntiqueAtlas",
"description": "Antique Atlas is a craftable item that enables a special map screen.",
"fabric_latest": [
{
"id": "BTztSCC6",
"version_number": "7.1.1-fabric-mc1.18.2",
"date_published": "2023-03-30T19:15:50.719038Z",
"game_versions": [
"1.18.2"
],
"loaders": [
"fabric"
],
"dependencies": [
{
"version_id": "j5zDzQqi",
"project_id": "lhGA9TYQ",
"file_name": null,
"dependency_type": "required"
},
{
"version_id": "BLMp2TRt",
"project_id": "9s6osm5g",
"file_name": null,
"dependency_type": "required"
},
{
"version_id": "95QMsRyb",
"project_id": "P7dR8mSH",
"file_name": null,
"dependency_type": "required"
}
]
}
],
"fabric_26_2": [],
"fabric_target": []
},
{
"slug": "antique-atlas-4",
"title": "Antique Atlas 4",
"license": {
"id": "LGPL-3.0-or-later",
"name": "GNU Lesser General Public License v3.0 or later",
"url": null
},
"source_url": "https://github.com/sisby-folk/antique-atlas",
"description": "A hand-drawn clientside world map, with map sharing, structure discovery, and less!\nA map frontend for Surveyor based on hunternif's Antique Atlas.",
"fabric_latest": [
{
"id": "2sDsTAId",
"version_number": "3.1.2+1.21",
"date_published": "2026-01-05T08:52:18.929507Z",
"game_versions": [
"1.21.1"
],
"loaders": [
"fabric",
"neoforge",
"quilt"
],
"dependencies": [
{
"version_id": null,
"project_id": "tNmWwdI2",
"file_name": null,
"dependency_type": "required"
},
{
"version_id": "4AkOEqGy",
"project_id": "P7dR8mSH",
"file_name": null,
"dependency_type": "required"
},
{
"version_id": "iLOZqG06",
"project_id": "4KjqhPc9",
"file_name": null,
"dependency_type": "required"
}
]
}
],
"fabric_26_2": [],
"fabric_target": []
},
{
"slug": "surveyor",
"title": "Surveyor Map Framework",
"license": {
"id": "LGPL-3.0-or-later",
"name": "GNU Lesser General Public License v3.0 or later",
"url": null
},
"source_url": "https://github.com/sisby-folk/surveyor",
"description": "Maps with friends! A world map backend with multiplayer sharing, automatic structure/POI marking, and unified mod compatibility.",
"fabric_latest": [
{
"id": "V7SEIRs6",
"version_number": "1.2.4+26.1",
"date_published": "2026-05-10T08:39:52.185927Z",
"game_versions": [
"26.1.2"
],
"loaders": [
"fabric"
],
"dependencies": [
{
"version_id": null,
"project_id": "tNmWwdI2",
"file_name": null,
"dependency_type": "required"
},
{
"version_id": "mmmOfXE7",
"project_id": "P7dR8mSH",
"file_name": null,
"dependency_type": "required"
}
]
}
],
"fabric_26_2": [],
"fabric_target": []
},
{
"slug": "voxelmap-updated",
"title": "VoxelMap-Updated",
"license": {
"id": "LicenseRef-All-Rights-Reserved",
"name": "",
"url": null
},
"source_url": "https://github.com/fantahund/VoxelMap",
"description": "Minimap and Worldmap. Have an overview of your surroundings, or view the entire world. Create waypoints.",
"fabric_latest": [
{
"id": "BjsGekii",
"version_number": "26.2-1.16.10",
"date_published": "2026-08-30T03:23:58.999214Z",
"game_versions": [
"26.2"
],
"loaders": [
"fabric"
],
"dependencies": [
{
"version_id": null,
"project_id": "P7dR8mSH",
"file_name": null,
"dependency_type": "required"
}
]
}
],
"fabric_26_2": [
{
"id": "BjsGekii",
"version_number": "26.2-1.16.10",
"date_published": "2026-08-30T03:23:58.999214Z",
"game_versions": [
"26.2"
],
"loaders": [
"fabric"
],
"dependencies": [
{
"version_id": null,
"project_id": "P7dR8mSH",
"file_name": null,
"dependency_type": "required"
}
]
}
],
"fabric_target": []
},
{
"slug": "xaeroplus",
"title": "XaeroPlus",
"license": {
"id": "MIT",
"name": "MIT License",
"url": null
},
"source_url": "https://github.com/rfresh2/XaeroPlus/",
"description": "Xaero WorldMap / Minimap Extra Features",
"fabric_latest": [
{
"id": "kbQweqjZ",
"version_number": "2.36.1+fabric-1.21.11",
"date_published": "2026-09-10T21:10:52.358083Z",
"game_versions": [
"1.21.11"
],
"loaders": [
"fabric",
"quilt"
],
"dependencies": [
{
"version_id": null,
"project_id": "P7dR8mSH",
"file_name": null,
"dependency_type": "required"
},
{
"version_id": null,
"project_id": "FlFKBOIX",
"file_name": null,
"dependency_type": "optional"
},
{
"version_id": null,
"project_id": "1bokaNcj",
"file_name": null,
"dependency_type": "required"
},
{
"version_id": null,
"project_id": "NcUtCpym",
"file_name": null,
"dependency_type": "required"
}
]
}
],
"fabric_26_2": [
{
"id": "Ts3KSCxm",
"version_number": "2.36.1+fabric-26.2",
"date_published": "2026-09-10T21:07:47.448275Z",
"game_versions": [
"26.2"
],
"loaders": [
"fabric",
"quilt"
],
"dependencies": [
{
"version_id": null,
"project_id": "1bokaNcj",
"file_name": null,
"dependency_type": "required"
},
{
"version_id": null,
"project_id": "NcUtCpym",
"file_name": null,
"dependency_type": "required"
},
{
"version_id": null,
"project_id": "FlFKBOIX",
"file_name": null,
"dependency_type": "optional"
},
{
"version_id": null,
"project_id": "P7dR8mSH",
"file_name": null,
"dependency_type": "required"
}
]
}
],
"fabric_target": []
}
],
"licenses_verified_in_source": [
{
"repository": "craftycorvid/ImprovedMaps",
"default_branch": "main",
"license_spdx": "MIT",
"license_url": "https://github.com/craftycorvid/ImprovedMaps/blob/main/LICENSE",
"license_git_sha": "e67ce634ddce2140ca1546d2e5beb1c04859f60f",
"license_sha256": "a566859281767627d275c468319d0713d86f317b6f798ba9bf48d6da07991b32",
"archived": false
},
{
"repository": "RubberToe-06/simple_atlas",
"default_branch": "master",
"license_spdx": "MIT",
"license_url": "https://github.com/RubberToe-06/simple_atlas/blob/master/LICENSE",
"license_git_sha": "705cd5167be9a1045008e89018f67e9e501b272f",
"license_sha256": "9766022d74839286286f97d9f3928033bd15445605bdaab4ff4806b434c08c67",
"archived": false
},
{
"repository": "nanakytim/Ultimate_Map_Atlases",
"default_branch": "main",
"license_spdx": "GPL-3.0",
"license_url": "https://github.com/nanakytim/Ultimate_Map_Atlases/blob/main/LICENSE",
"license_git_sha": "f288702d2fa16d3cdf0035b15a9fcbc552cd88e7",
"license_sha256": "3972dc9744f6499f0f9b2dbf76696f2ae7ad8af9b23dde66d6af86c9dfb36986",
"archived": false
},
{
"repository": "BlueMap-Minecraft/BlueMap",
"default_branch": "master",
"license_spdx": "MIT",
"license_url": "https://github.com/BlueMap-Minecraft/BlueMap/blob/master/LICENSE",
"license_git_sha": "0a98021f607f47cc173f081a768e99e12bd2f6a3",
"license_sha256": "f1c190d4a1ff29606cbed7a0d97fc7b7117cc2e1169e19caa753198957dbbfd6",
"archived": false
}
]
}
@@ -0,0 +1,116 @@
{
"checked_at": "2026-09-13",
"target": "26.3-pre-2",
"projects": [
{
"project": "xaeros-minimap",
"license": {
"id": "LicenseRef-All-Rights-Reserved",
"name": "",
"url": null
},
"source_url": null,
"versions": {
"26.2": {
"count": 9,
"latest": [
{
"id": "tBIPWIKW",
"version_number": "fabric-26.2-26.5.0",
"date_published": "2026-09-10T11:44:27.035690Z",
"version_type": "release",
"dependencies": [
{
"version_id": null,
"project_id": "P7dR8mSH",
"file_name": null,
"dependency_type": "required"
},
{
"version_id": null,
"project_id": "gF3BGWvG",
"file_name": null,
"dependency_type": "optional"
}
],
"files": [
{
"id": "MR2dtOXn",
"hashes": {
"sha1": "40282debf4cd8e91712ba26d90e78f2e3eb067e1",
"sha512": "b00df8bb410fae12b08788044f2f03cec34bfc4506da419d11d364e2f229b814dbb272d297fbe4b0cdfac18beeeed4dc8f1bdfc96fb113867857527e31965049"
},
"url": "https://cdn.modrinth.com/data/1bokaNcj/versions/tBIPWIKW/xaerominimap-fabric-26.2-26.5.0.jar",
"filename": "xaerominimap-fabric-26.2-26.5.0.jar",
"primary": true,
"size": 2221887,
"file_type": null
}
]
}
]
},
"26.3-pre-2": {
"count": 0,
"latest": []
}
},
"metadata_source": "https://api.modrinth.com/v2/project/xaeros-minimap"
},
{
"project": "xaeros-world-map",
"license": {
"id": "LicenseRef-All-Rights-Reserved",
"name": "",
"url": null
},
"source_url": null,
"versions": {
"26.2": {
"count": 10,
"latest": [
{
"id": "DxU1zijU",
"version_number": "fabric-26.2-1.46.0",
"date_published": "2026-09-10T11:32:01.420372Z",
"version_type": "release",
"dependencies": [
{
"version_id": null,
"project_id": "gF3BGWvG",
"file_name": null,
"dependency_type": "optional"
},
{
"version_id": null,
"project_id": "P7dR8mSH",
"file_name": null,
"dependency_type": "required"
}
],
"files": [
{
"id": "Acre79W6",
"hashes": {
"sha512": "37284868eed7bb105362ba1df3da38e860a0f889e50dcae43ddaf167c33817b8ece289770f89b138e327b145d15ae36a4df850202770236a4eefd7b413158438",
"sha1": "1056e2f81860045a8c1fb1d6823ca3f4c832dc60"
},
"url": "https://cdn.modrinth.com/data/NcUtCpym/versions/DxU1zijU/xaeroworldmap-fabric-26.2-1.46.0.jar",
"filename": "xaeroworldmap-fabric-26.2-1.46.0.jar",
"primary": true,
"size": 1477476,
"file_type": null
}
]
}
]
},
"26.3-pre-2": {
"count": 0,
"latest": []
}
},
"metadata_source": "https://api.modrinth.com/v2/project/xaeros-world-map"
}
]
}
+49 -3
View File
@@ -3,8 +3,8 @@ plugins {
id 'net.fabricmc.fabric-loom' version "${loom_version}" apply false
}
tasks.named('build') { dependsOn(':sanctuary:build') }
tasks.named('check') { dependsOn(':sanctuary:check', 'verifyPack') }
tasks.named('build') { dependsOn(':sanctuary:build', ':demeure:build', ':jei:build', ':sanctuary-test:build') }
tasks.named('check') { dependsOn(':sanctuary:check', ':demeure:check', ':jei:check', ':sanctuary-test:check', 'verifyPack') }
tasks.register('verifyPack', Exec) {
group = 'verification'
@@ -15,6 +15,52 @@ tasks.register('verifyPack', Exec) {
tasks.register('assemblePack', Exec) {
group = 'distribution'
description = 'Assemble a local packwiz pack including the built Sanctuary mod.'
dependsOn(':sanctuary:build', 'verifyPack')
dependsOn(':sanctuary:build', 'verifyPack', 'assembleResourcePack', 'assembleResourceTemplate')
commandLine('python3', 'scripts/pack.py', 'assemble')
}
tasks.register('verifyResourcePack', Exec) {
group = 'verification'
description = 'Verify the versioned Sanctuary texture sources and their release hashes.'
commandLine('python3', 'scripts/resource_pack.py')
}
tasks.named('check') { dependsOn('verifyResourcePack') }
tasks.register('assembleResourcePack', Zip) {
group = 'distribution'
description = 'Export the same textures as the built-in resource pack for standalone use.'
dependsOn('verifyResourcePack')
from('ressources-pack/sanctuary') {
include 'assets/**', 'pack.mcmeta', 'pack.png'
exclude '**/.DS_Store'
}
destinationDirectory = layout.buildDirectory
archiveFileName = "Sanctuary-Resource-Pack-${resource_pack_version}.zip"
preserveFileTimestamps = false
reproducibleFileOrder = true
}
tasks.register('assembleTestPack', Exec) {
group = 'distribution'
description = 'Stage the separate flat-world Sanctuary Test profile.'
dependsOn('assemblePack', ':sanctuary-test:build')
commandLine('python3', 'scripts/test_pack.py')
}
tasks.register('assembleResourceTemplate', Zip) {
group = 'distribution'
description = 'Export all Sanctuary client assets as an editable personal resource pack.'
dependsOn(':sanctuary:processResources', 'verifyResourcePack')
def resources = project(':sanctuary').layout.buildDirectory.dir('resources/main')
// Same precedence as the native exporter: built-in textures override mod defaults.
duplicatesStrategy = DuplicatesStrategy.EXCLUDE
from(resources.map { it.dir('resourcepacks/textures/assets') }) { into 'assets' }
from(resources.map { it.dir('assets') }) { into 'assets' }
from(resources.map { it.dir('resourcepacks/template') })
from(resources.map { it.file('resourcepacks/textures/pack.png') })
exclude '**/.DS_Store'
destinationDirectory = layout.buildDirectory
archiveFileName = "Sanctuary-Template-${mod_version}.zip"
preserveFileTimestamps = false
reproducibleFileOrder = true
}
+190
View File
@@ -0,0 +1,190 @@
# Alpha.12 — laboratoire dexpansion
Ticket local **WG-13**, branche `codex/expansion-lab`. Contrat du laboratoire et guide
dessai. Cette livraison reste une alpha ; le canal distribué est suivi séparément
dans [Distribution](packwiz.md).
## Décisions de conception
La direction géographique et le climat deviennent deux choix distincts. La
boussole nord froid / sud chaud / ouest sec / est humide reste un raccourci
facultatif. Une île peut prolonger le climat de son parent ou ouvrir une branche
vers un autre climat. Les parents et les coordonnées forment un graphe persistant,
permettant plusieurs couronnes autour de Sanctuary. Les recherches, leurs coûts,
les boîtes aux lettres et les boîtes de dépôt sont planifiés pour plus tard.
Cette alpha fournit des commandes opérateur : créer, suivre, lister et visiter
les expansions. Les tailles nominales des nouvelles îles sont 64, 128, 256 et
512 blocs. Les reliefs de laboratoire sappliquent aussi à l’île initiale, dans
un nouveau preset expérimental. Les structures vanilla compatibles sont admises
après contrôle de leur emprise et de leur support. Une absence reste possible.
Lalpha sert à éprouver les outils et les paysages. Le passage en bêta se fera
après définition du périmètre de la vision et de la progression jouable ; ce
numéro ne désigne pas une progression collective déjà livrée.
## Contrat de sauvegarde et douverture v1
- Activation exclusivement dans un **nouveau monde du laboratoire alpha.12**.
Les anciens presets, leurs paramètres, leurs chunks et leurs sauvegardes ne
sont pas convertis. Il nexiste pas de commande de migration ou de régénération.
- Un journal serveur propre au monde enregistre graine, version, origine,
identifiant, parent, direction, climat, relief, diamètre, centre et statut.
Les paramètres dune île sont immuables après réservation.
- Toute la réservation inclut terrain, décorations et halo moteur. Les régions
déjà présentes sur disque, chargées ou en cours de déchargement sont refusées,
même si leurs blocs sont tous vides. Une erreur de lecture interdit louverture.
- Le journal est écrit atomiquement et relu avant de publier le nouveau plan au
générateur. Un journal existant absent ou corrompu nest jamais remis à zéro.
- La génération travaille uniquement dans la région nouvelle. Les chunks voisins
nécessaires au moteur restent dans son halo. Aucun bloc dune ancienne région
nest remplacé. Les références et le placement des structures utilisent le moteur.
- Une réservation interrompue conserve son identité et sa graine. La préparation
peut reprendre, sans double île ni nouveau tirage, jusquau statut prêt.
- Les commandes exigent la permission opérateur. Être en créatif seul ne confère
aucun droit sur le serveur. Une opération ne téléporte personne implicitement.
- Le refuge Void et le déplacement collectif des joueurs restent un système
distinct à concevoir. Ils ne servent pas de mécanisme de protection des chunks.
Le halo impose une distance supplémentaire dans cette première version. Le placer
au plus proche ne permet pas de réutiliser silencieusement du vide déjà généré.
Les points dorigine enregistrés ne suivent pas les changements de lit ou de spawn.
## Commandes et palette
Créer un **nouveau monde**, type **Sanctuary — Laboratoire**, avec les commandes
activées. Pour un serveur neuf, utiliser `level-type=sanctuary:expansion_lab`
et un nouveau `level-name`. La graine `42` fournit un cas reproductible observé
avec un camp abandonné ; aucune structure nest garantie sur chaque graine.
```text
/sanctuary expansion quick north autumn 128 peaks
/sanctuary expansion list
/sanctuary expansion visit island_1
/sanctuary expansion create oasis island_1 east arid 64 natural
/sanctuary expansion preview glacier sanctuary south glacial 256 canyon
```
`quick` part toujours de Sanctuary et attribue un identifiant `island_N`.
`create <id> <parent> <direction> <climate> <diameter> <relief> [distance]` ouvre une branche
nommée depuis nimporte quelle île prête. `preview` emploie les mêmes paramètres ;
il propose des coordonnées mais ne valide ni loccupation des chunks ni le sol.
Répéter un `create` identique rend la même réservation ; un autre profil sous
le même identifiant est refusé. `resume <id>` reprend une préparation interrompue.
Après une erreur du journal, il faut rétablir le stockage puis recharger le monde.
Depuis l**alpha.12.1**, `quick`, `create` et `preview` acceptent une distance
minimale facultative à la fin, de 0 à 100 000 blocs. Elle mesure la distance
entre les centres du parent et de lenfant, y compris en diagonale. Lalignement
des chunks et les marges du terrain peuvent éloigner légèrement le résultat.
Une valeur de 0, ou son omission, laisse le placement automatique.
```text
/sanctuary expansion quick north autumn 128 peaks 2048
/sanctuary expansion create desert sanctuary east arid 128 natural 4096
/sanctuary expansion preview glacier sanctuary northeast glacial 256 canyon 2048
```
Si une zone est déjà générée, `create` et `quick` essaient plus loin dans la
même direction, sur 32 positions maximum avec un budget total de lecture de
30 secondes. Le climat, le relief et la graine restent ceux de la demande.
`preview` propose seulement le premier emplacement géométrique ; le résultat
réel peut être plus loin. Les erreurs de lecture interrompent la recherche.
Les anciens appels restent valides. Un identifiant déjà créé garde sa position ;
demander sous le même nom une distance supérieure à sa distance réelle est refusé.
Cette correction utilise le même journal v1 et les mêmes descripteurs de
génération 12 : le monde laboratoire alpha.12 actuel peut être conservé. Aucun
ancien chunk nest régénéré ; la recherche réserve uniquement une nouvelle zone.
| Profil de commande | Surface recherchée |
| --- | --- |
| `temperate` | Chênes, bouleaux, clairières et fleurs |
| `boreal` | Taïga, bosquets et neige en hauteur |
| `glacial` | Plaines enneigées, pics gelés et pointes de glace |
| `cold_humid` | Vieilles taïgas et bosquets froids |
| `humid` | Forêt sombre, marécages et Pale Garden ponctuel |
| `tropical` | Jungle, bambous et mangrove basse |
| `warm` | Savane et plateaux |
| `arid` | Désert, badlands et cheminées érodées |
| `dry` | Prairies exposées et reliefs pierreux |
| `cold_dry` | Neige, gravier et sommets gelés |
| `autumn` | Dappled Forest, prairies et bouleaux ponctuels |
| `cherry` | Cerisiers, prairies et bosquets en hauteur |
La sélection dépend de la graine, de laltitude et de variations locales ; une
petite île naffiche pas nécessairement tous les biomes de son profil. Des poches
luxuriantes, à spéléothèmes ou soufrées diversifient les étages inférieurs.
Les reliefs `natural`, `peaks`, `canyon` et `volcano` sont indépendants du climat.
Le volcan déforme et creuse la matière existante ; il ne garantit pas un cône
plein ni un lac de lave lorsque la géométrie centrale est ajourée.
Les valeurs par défaut de `quick` suivent la boussole décrite dans
[Expansion](expansion.md), avec diamètre 128 et relief naturel. Les directions
acceptées sont `north`, `northeast`, `east`, `southeast`, `south`, `southwest`,
`west`, `northwest`. Lautocomplétion fournit les paramètres disponibles.
## Portée technique et limites
Le codec `sanctuary:expansion_lab` enregistre le générateur ; le journal conserve
les descripteurs de génération **12**. Chaque île emploie sa propre graine dérivée
de la graine du monde et de son identifiant. Changer didentifiant change donc
le tirage. Les instances de bruit sont propres aux îles, y compris après reload.
Les 34 biomes vanilla sont déclarés avant la première expansion.
La densité flottante existante sert de base. Le laboratoire ajoute les
transformations des reliefs hauts et utilise les matériaux et décorations natifs.
Ses carvers vanilla sont désactivés pour conserver les supports prospectés.
Les grandes rivières et terrasses hydrologiques alpha.11 ne sont pas transférées
dans ce prototype : les anciens presets les conservent. Le laboratoire essaie
seulement de petites sources facultatives sur support rocheux fermé.
Les structures autorisées sont les villages (diamètre au moins 256), pyramides
du désert et de jungle, cabanes de marais et camps abandonnés. Les starts natifs
sont acceptés après vérification de leur emprise et de leurs fondations ; le
moteur place les pièces, références et butins. Leur grille de sélection diffère
de celle de `/locate` vanilla : cette commande nest pas un outil fiable pour
les retrouver dans le laboratoire. La preuve actuelle porte sur un camp ; elle
ne valide pas visuellement chaque type de village ou de temple.
La réservation ajoute 32 blocs de décoration et 176 blocs de halo moteur autour
de lenveloppe de terrain. Les petites îles sont donc encore assez éloignées :
le test de diamètre 64 place une première île à 800 blocs du centre de Sanctuary,
puis une branche à 544 blocs de son parent. Un emplacement déjà exploré est
écarté ; depuis lalpha.12.1, la recherche continue plus loin sans réécrire ce vide.
Il existe une limite de 64 régions, origine comprise, et de ±100 000 blocs pour
leurs centres. La vérification initiale doccupation est synchrone et peut
suspendre brièvement le serveur pendant les lectures disque ; la préparation
suivante avance chunk par chunk.
Les bateaux volants, montgolfières, panthéons, îles uniques en béton coloré,
océans coralliens, recherches, coûts et boîtes de dépôt restent dans la vision.
Aucun command block, transfert collectif au Void ou reset global nest nécessaire
pour utiliser ces commandes.
## Observations reproductibles
Sur la graine **42**, le scénario moteur a ouvert une île tropicale de 64 blocs
au nord, puis une île aride de 64 blocs à lest de celle-ci. Chaque préparation
a atteint 100 chunks FULL. Les biomes sauvegardés, les points darrivée sur sol
réel, les permissions du dispatcher, le refus des doublons incohérents, la
conservation dun bloc témoin sur Sanctuary et le refus du vide déjà chargé
ont été vérifiés. Un camp abandonné possède un tonneau placé avec sa table de
butin vanilla. Sur la graine **0**, ces expansions fonctionnent mais aucun des
11 sites de structure candidats na passé les conditions de terrain ; le test
exigeant une preuve de butin a donc échoué sur cette graine.
Un second processus Java a rouvert le monde de développement de graine 42 et
retrouvé les trois régions prêtes, le bloc dor écrit avant larrêt, les colonnes
de blocs, biomes, densités et le tonneau. Le codec sauvegardé a aussi été décodé.
Le framework GameTest reconstruit ses réglages depuis le preset : ce contrôle
ne remplace pas un essai du parcours normal de chargement dans le client.
La reprise dun journal réservé est contrôlée séparément par le smoke ; un
crash forcé en pleine génération, les téléportations de vrais joueurs et la
charge multijoueur ne sont pas simulés.
Les smokes parcourent cinq graines, les quatre tailles et les quatre reliefs :
transformation verticale monotone, dessous de lorigine conservé, canyon retirant
de la matière et couronne volcanique. Ce sont des contrôles géométriques ; les
profils 128/256/512 et les quatre reliefs demandent encore une appréciation
visuelle en jeu. Voir [Validation](testing.md) pour les commandes et preuves.
+212
View File
@@ -0,0 +1,212 @@
# Alpha.13 — un monde Sanctuary unifié
**Publiée et synchronisée dans la même instance Prism.** Cette version réunit l’île de départ complète et les outils
dexpansion du laboratoire.
[Validation](testing.md) décrit les preuves disponibles et
[Distribution](packwiz.md) indique la version effectivement publiée.
La cible reste **Minecraft 26.3-pre-2 / Fabric**. Ce guide concerne un nouveau
monde alpha.13. Les anciens mondes conservent leur génération.
## Créer son monde
1. Créer un **nouveau monde**, puis sélectionner le type **Sanctuary**.
2. Ouvrir le bouton natif **Personnaliser**.
3. Choisir la taille, puis cliquer sur **Terminé** avant de créer le monde.
| Taille | Diamètre nominal de l’île initiale |
| --- | --- |
| Petit | 512 blocs |
| Moyen, choix par défaut | 724 blocs |
| Grand | 1 024 blocs |
**Annuler** revient sans appliquer le changement. La hauteur reste de 384 blocs,
de `Y=0` à `Y=383`. Le diamètre est une référence pour la forme : trous, surplombs,
fragments et contour irrégulier dépendent de la graine. Il ne mesure pas une
surface entièrement constructible et ne fixe pas un nombre de joueurs.
La liste des types de monde contient un seul choix Sanctuary ; les types
Minecraft habituels restent disponibles. Petit, Moyen et Grand sont des
réglages de ce même choix. Lancien Grand alpha.11, de 724 blocs, correspond
au diamètre nominal du nouveau Moyen.
Sur un serveur neuf, le preset suivant crée un monde de taille Moyen :
```properties
level-type=sanctuary:sanctuary
level-name=sanctuary-dev
level-seed=42
```
Choisir un dossier de monde neuf pour un essai. Le bouton **Personnaliser**
configure la création en solo ; il ne modifie pas les fichiers dun serveur
existant. Installer le mod ou changer `level-type` ne transforme pas une partie.
## L’île de départ
Le nouveau monde reprend le générateur complet de l’île initiale : forêts de
chênes et de bouleaux, clairières, affleurements, strates rocheuses et corniches
intérieures. Son relief flottant conserve les trous et les surplombs, sans
ajouter de noyau cylindrique pour garantir un terrain à lorigine.
Les plans hydrologiques de Population sont repris : étangs et lacs, recherche
de rivière, bassins étagés et leurs débordements, sources et cascades, poche et
coulées de lave. Le placement dépend des supports réellement présents dans la
roche. Un plan qui ne trouve pas de site admissible reste absent ; aucune
rivière, terrasse ou ressource nest garantie sur chaque graine. Les eaux en
terrasses permettent la nage verticale sans ajouter de culture de riz.
Les poches souterraines natives du laboratoire rejoignent cette île : cavités
luxuriantes, à spéléothèmes ou soufrées, avec leurs décorations Minecraft.
Il sagit toujours des profondeurs de lOverworld, pas de la dimension des
cavernes prévue dans la vision. L’île garde sa palette tempérée en surface ;
Dappled Forest reste disponible dans les expansions au climat automnal.
Lintégration protège les volumes déclarés par les plans deau et de lave
contre les écritures de décoration suivantes. Cette protection concerne les
plans de génération, sans mettre les blocs à labri des actions des joueurs.
Les preuves moteur et leurs limites sont suivies dans [Validation](testing.md).
## Ajouter une île
Les commandes demandent les commandes autorisées en solo ou la permission
opérateur sur le serveur. Elles reprennent les outils alpha.12.1 dans le nouveau
monde Sanctuary. L’économie, les recherches et les contributions collectives
ne conditionnent pas encore leur utilisation.
```text
/sanctuary expansion quick north autumn 128 peaks
/sanctuary expansion list
/sanctuary expansion visit island_1
/sanctuary expansion create oasis island_1 east arid 64 natural 2048
```
`quick` ouvre une île depuis Sanctuary et lui attribue un identifiant `island_N`.
Lexemple de visite suppose quil sagit de la première réservation ; `list`
indique lidentifiant et l’état réels. La visite attend que l’île soit prête.
`create` choisit un nom et un parent déjà prêt pour prolonger une branche.
La création ne téléporte personne implicitement.
Les nouveaux continents choisissent leur propre direction, climat, diamètre
**64/128/256/512** et relief **natural/peaks/canyon/volcano**. La direction ne
contraint pas le climat. Lautocomplétion fournit les huit directions et les
douze profils : `temperate`, `boreal`, `glacial`, `cold_humid`, `humid`, `tropical`,
`warm`, `arid`, `dry`, `cold_dry`, `autumn`, `cherry`.
Le dernier nombre facultatif est une **distance minimale entre les centres**
du parent et de lenfant, entre 0 et 100 000 blocs. Une valeur de 0 ou son
omission laisse le placement automatique. Les marges et lalignement sur les
chunks peuvent éloigner le centre retenu.
Si le premier site est occupé, la recherche continue plus loin dans la même
direction : au plus 32 positions et 30 secondes de lecture au total. Même du
vide déjà généré compte comme occupé. Une erreur disque arrête la demande ;
elle nautorise pas à remplacer les chunks concernés.
```text
/sanctuary expansion preview glacier sanctuary northeast glacial 256 canyon 2048
/sanctuary expansion resume island_1
```
`preview` calcule une proposition géométrique sans activer l’île et sans vérifier
loccupation ou les fondations. `resume` reprend une réservation interrompue,
avec sa graine et ses paramètres conservés. Le système ne fournit aucune commande
de régénération des régions déjà créées.
Les îles ajoutées gardent la génération dexpansion alpha.12 : leurs climats,
reliefs, décorations et structures compatibles. Elles ne reçoivent pas
systématiquement la grande rivière ou les terrasses de l’île initiale. Villages,
temples, cabanes de marais et camps abandonnés dépendent du biome, du diamètre
et des fondations ; aucune présence nest garantie. Les règles de progression
futures restent décrites dans [Expansion](expansion.md).
## Correctif alpha.13.1 — expansions sous Windows
Lerreur `AccessDeniedException` visant le **dossier**
`data/sanctuary-world-v13`, depuis `ExpansionJournal.persist`, vient de la
synchronisation du répertoire après l’écriture du journal. Java sous Windows
ne permet pas cette ouverture avec `FileChannel` ; ce message ne signifie pas
à lui seul que le joueur manque de droits sur sa sauvegarde.
1. Fermer Minecraft pour arrêter la session dont les expansions sont bloquées.
2. Mettre linstance Prism existante à jour vers **0.1.0-alpha.13.1** via son
canal packwiz, puis relancer le jeu.
3. Rouvrir **le même monde** et consulter `/sanctuary expansion list`.
Si linstance Windows a été importée depuis le MRpack sans auto-update, fermer
Minecraft puis remplacer seulement `sanctuary-0.1.0-alpha.13.jar` par le JAR
`sanctuary-0.1.0-alpha.13.1.jar` de la release dans son dossier `mods`.
Conserver un seul JAR Sanctuary actif ; les autres mods et les sauvegardes
restent dans la même instance. Le raccordement au canal stable est décrit dans
[Distribution](packwiz.md#raccorder-linstance-prism-existante).
Le remplacement du journal ayant précédé cette erreur, lexpansion demandée
peut déjà être enregistrée comme `reserved`. Au chargement, les réservations
valides reprennent automatiquement avec leur identifiant, leur graine et leur
position. Il nest pas nécessaire de recréer le monde ou de supprimer le dossier
du journal. La commande `resume` seule ne débloque pas une session dont le
journal a été déclaré indisponible : sa relecture exige de rouvrir le monde.
Le correctif conserve le format et le contenu du journal existant ; il ne
migre ni ne régénère les chunks. La [validation ciblée](testing.md#correctif-alpha131--journal-dexpansion-sous-windows)
distingue les contrôles locaux de lessai Windows natif restant à effectuer.
## Paramètres et sauvegardes
Le preset public `sanctuary:sanctuary` utilise le nouveau codec de générateur
`sanctuary:island_v13`. Sa source de biomes est également enregistrée sous
`sanctuary:island_v13`. Le générateur sérialise `initial_diameter`, limité à
512, 724 ou 1 024 ; une valeur absente prend 724. Ce champ appartient à la
sauvegarde créée, et ne suit pas les changements ultérieurs de défaut du pack.
Pour l’île initiale, les réglages internes `sanctuary:unified_5`,
`sanctuary:unified_10` et `sanctuary:unified_20` correspondent respectivement
aux diamètres 512, 724 et 1 024. Les suffixes sont des références de calcul,
pas des capacités affichées. Ils reprennent la densité Population et son
hydrologie avec le générateur et le `RandomState` propres à lorigine.
La source combine la palette Population de départ et le sélecteur de cavités
natives du laboratoire, avec les mêmes conditions de sélection de ces poches.
Les îles enfants conservent le sélecteur climatique du laboratoire. Les 34
biomes natifs de cette palette et les dix biomes Population sont déclarés
avant la première expansion ; TerraMix nest pas une dépendance téléchargée.
Le nouveau journal est enregistré dans le dossier du monde :
```text
data/sanctuary-world-v13/expansions.json
```
Son schéma reste **1**, avec une racine de **génération 13** et des extensions
de **génération 12**. Les identifiants, parents, graines, paramètres, positions
et états douverture sont conservés côté serveur. La racine et le diamètre
initial ne sont pas modifiables par une commande dexpansion.
Les mondes du laboratoire alpha.12/12.1 gardent leur codec et leur journal
`data/sanctuary-expansion-v1/expansions.json`. Les générations Population et
les autres générations antérieures gardent leurs paramètres enregistrés.
Les presets historiques sont conservés mais cachés dans la création publique.
**Aucun monde nest converti, agrandi, réduit ou régénéré par lalpha.13.**
Le [guide alpha.12](alpha12-laboratory.md) est une référence historique, pas une
instruction de sélectionner à nouveau le laboratoire pour cette version.
## Contrôles de développement
`./gradlew check build assemblePack` et `:sanctuary:runGameTest` sélectionnent
par défaut la suite unifiée. Son diamètre de test se choisit avec
`-PsanctuaryTestDiameter=512`, `724` ou `1024` ; il ne change pas le défaut public.
Les suites Population historiques demandent `-PsanctuaryUnifiedTests=false`,
avec leur profil `-PsanctuaryTestPlayers=5`, `10`, `20` ou `100`. Les essais du
laboratoire historique utilisent aussi ce drapeau, avec
`-PsanctuaryExpansionTests=true`. Ces processus travaillent dans les dossiers
de développement ignorés, jamais dans les sauvegardes personnelles.
Les validations et mesures des alpha.11, .12 et .12.1 restent historiques.
Elles ne prouvent ni les temps de chargement ni le rendu de cette intégration.
Les trois tailles, linterface native et les expansions/rechargements passent
les contrôles alpha.13. Moyen atteint 63,66 s pour créer le monde puis charger
289 chunks FULL sur la graine 0 ; voir [Validation](testing.md) pour le protocole
et ses limites. La release, le MRpack et le canal packwiz sont publiés ; deux
synchronisations dans la même instance Prism conservent les 601 fichiers
personnels et réglages suivis. Voir [Distribution](packwiz.md).
+115
View File
@@ -0,0 +1,115 @@
# Architecture de lalpha.20
Cette passe donne une identité visuelle aux lieux déjà planifiés : volumes,
façades, sols, plafonds et mobilier. Elle réutilise les emprises et les accès
certifiés des générations précédentes. Les bâtiments de ville et les sites
expérimentaux restent inscrits dans leurs parcelles de 17 × 17 blocs ; leurs
corniches et leurs retraits restent à lintérieur de cette limite.
Les nouveaux rendus demandent un **nouveau monde de génération 20**. Les mondes
19 et antérieurs conservent leurs bâtiments, y compris dans les futurs chunks.
Le bouton **Personnaliser**, les trois tailles et loption **Structures
expérimentales** restent disponibles. Le catalogue nimpose pas que chaque lieu
apparaisse sur chaque île.
![Sélection darchitectures produites par les rendus de lalpha.20](images/architecture20-overview.png)
*Vues des blocs réellement émis par les générateurs, affichés avec les modèles
Minecraft, sans terrain. Ce montage est une prévisualisation géométrique, pas
une capture du client en jeu ; il montre une sélection du catalogue.*
## Les six bâtiments de Lost City
Les étages conservent leurs plans alternés, leurs pièces et leurs escaliers.
Les sanitaires sont clos, les lits adossés à de vrais murs, et les lampes
reposent sur des blocs complets. Les aménagements de toit décrits ci-dessous
possèdent des points daccès vérifiés par le smoke du renderer.
| Fonction | Forme et façade | Espaces et détails construits |
| --- | --- | --- |
| Immeuble | Angles avant coupés, baies en saillie, montants de chêne écorcé et bandeaux de tuf. | Parquets alternant chêne et bouleau, logements avec cuisine et chambre ; jardinières, portique de bois et table sur le toit. |
| Hôtel | Portique et travées encadrées de diorite polie, garde-corps et bandeaux en bouleau ; pavillon de toit en retrait. | Réception, chambres, salons, sanitaires et buanderie ; petit local de linge et bancs sur le toit. |
| Bibliothèque | Grandes baies, angles coupés et lames verticales en bouleau écorcé ; lanterneau vitré avec ouverture à travers le toit et le plafond du dernier étage. | Rayonnages, archives, tables et lutrins ; sols délimitant les espaces de lecture et terrasse de lecture sur le toit. |
| Restaurant | Encadrements de granit poli, vitrines et auvents associant chêne et bouleau. | Salles à manger et cuisines réparties par étage, garde-manger et sanitaires ; tables sur le toit et sorties dextraction maçonnées. |
| Caserne | Piles épaisses de briques de tuf, soubassements ciselés et fenêtres grillagées. | Dortoirs, bureau de service, réserves d’équipement et sanitaires ; cage descalier coiffée dun pavillon accessible. |
| Hall | Travées monumentales, piliers ciselés, corniches de diorite et fronton de toit en gradins. | Billetterie, bureaux, salle avec scène sur deux niveaux, galerie protégée, salles de réunion et archives. |
## Les quatorze anciennes infrastructures
Chaque site conserve ses seuils, son accès de service et son coffre de découverte.
Les fonctions ci-dessous sont exprimées par les pièces et les blocs vanilla
présents ; elles ne constituent pas de nouveaux systèmes de progression.
| Lieu | Architecture et usage visibles |
| --- | --- |
| Gare de fret | Halle aux angles coupés, lanterneau vitré et long auvent de quai en chêne ; voie, salle dattente et petit bureau de signalisation. |
| Poste et centre de tri | Façade de granit, accents de diorite et toiture en retrait ; guichet, rangées de tonneaux, passage de tri et bureau. |
| Dépôt communal | Grand entrepôt nervuré de pierre, toiture industrielle à trois travées vitrées en dents de scie ; rails, chargement, caisses et mezzanine dinventaire. |
| Cartothèque dexpédition | Corps en bouleau, petites ailes différenciées et balcon arrière abrité ; table de cartographie, lutrin, archives et réserve. |
| Observatoire et météo | Tour à pans coupés, contreforts de diorite et couronne ouverte portée par des nervures ; deux volées descalier, salle dinstruments et plateforme dobservation. |
| Atelier ferroviaire | Large couverture à nervures et vitrages, piles de granit ; deux voies, fosse dentretien avec escalier, établi, fourneau, meule et petite réserve. |
| Station de pompage et château deau | Bâtiment bas, conduites figurées par des grilles et murets, cuve haute sur quatre piles ciselées ; galerie dentretien et réserve sèche. Leau reste dans la cuve. |
| Sous-station | Cour clôturée, supports et grilles autour des équipements, locaux bas à toiture nervurée ; commandes vanilla et tranchée dentretien accessible. |
| Serre et graineterie | Verrière haute rythmée par des nervures de bouleau ; cultures, deux points dirrigation contenus, allée de tuf et remise de rempotage. |
| Quai sur le vide | Platelage en chêne, garde-corps à piliers sculptés, abris bas et grue de bois à chaîne ; attente, débarcadère et réserve. |
| Relais radio et maison du gardien | Petite maison de chêne avec toiture à deux matières et cheminée ; antenne haute à traverses, plateforme accessible et chambre du gardien. |
| Club photo et chambre noire | Façade claire de diorite, corniche sculptée et toiture arrière en retrait ; salle du club, chambre noire, bacs et espace de séchage à chaînes. |
| Vestiaires et salles étranges | Entrée basse et étroite suivie dune salle haute à colonnes répétées ; casiers, sols carrelés, alcôve et petite pièce de service. |
| Refuge de chantier | Cabane surélevée sur piles ciselées, toiture inclinée et ossature inachevée ; couchage, établi, escalier extérieur et trappe avec échelle vers la réserve inférieure. |
Les voies de fret gardent leur ballast, leurs traverses, leurs courbes et leurs
rails manquants. Les chemins reçoivent des bordures de briques de tuf et des
accents ciselés ; leurs pentes et leurs destinations restent celles du plan
sauvegardé.
## Espaces publics et équipements extérieurs
| Espace | Détails présents en génération 20 |
| --- | --- |
| Rues et ponts | Chaussée dandésite polie, bordures de tuf poli, bandes de briques de tuf ponctuées de blocs ciselés ; marches sur les pentes, piles de garde-corps et grilles sur les ponts. Les tabliers najoutent pas de colonnes vers le vide. |
| Parc arboré | Allées en croix, bancs de chêne à accoudoirs minéraux, lampadaires et petite couronne de bouleau à côté des arbres existants. |
| Jardin | Quatre parterres bordés de diorite, angles de tuf sculpté, portique de bois et promenade centrale. |
| Aire de jeux | Bac à sable bordé de bouleau, portique de balançoire, plateforme de jeu avec marches et garde-corps, bancs et éclairage. |
| Place | Sol organisé en couronnes de diorite, granit et tuf ; fontaine sèche à coupe basse et piédestal sculpté. |
| Mémorial | Sol minéral à lignes de tuf, marches autour du socle, colonne mêlant tuf et briques de pierre sculptées. |
| Marché | Croisement piéton, quatre étals avec pieds ciselés, poteaux de chêne et couvertures alternant dalles de chêne et de bouleau. |
| Parking | Rampe et stationnements conservés ; piliers dandésite, assises ciselées, bandeau en tuf, grilles de ventilation et lampes de plafond. Il reste enterré seulement lorsque le sol est certifié. |
| Piscine extérieure | Bassin et marches immergées conservés, margelles de diorite, chaises longues et auvent de bouleau près des bacs de douche. |
| Excavation | Escalier central vers la fosse, barrières, piles sculptées, poutre sur appuis, établi et meule ; le chantier reste limité à la roche certifiée. |
## Sous la ville et réseaux oubliés
| Ensemble | Traitement architectural |
| --- | --- |
| Grande piscine couverte | Bassin, escaliers et colonnade conservés ; parois de calcite, bandeaux de diorite, chapiteaux ciselés et nervures hautes répétées. |
| Parkings souterrains | Plateformes et rampes conservées ; fondations maçonnées et bandeaux de tuf ponctués de motifs ciselés. |
| Grande salle sèche | Boiseries de chêne, assises de tuf, murs clairs, corniches et bancs de chêne ; le socle central reste sans machine de progression. |
| Égouts et sorties deau | Briques de tuf, motifs ciselés et corniches hautes ; les canaux, passerelles et écoulements existants sont conservés. |
| Passages et accès | Liserés de granit ou de tuf, seuils et accès verticaux conservés. |
| Mines, ateliers et réserves oubliés | Poutres de chêne, tuf, sols bordés de granit, établi et outillage vanilla ; rails, réserves et plateforme de travaux interrompus. |
| Archives et salles étranges | Parquets de bouleau, boiseries, rayonnages ; ailleurs, carrelages de calcite et diorite, colonnes et niches répétées. |
| Salles techniques oubliées | Nervures minérales, corniches et encadrements ciselés autour des seuils ; pompes figurées, grilles et postes de commande vanilla. |
## Matériaux et raccords
Les fondations des nouveaux bâtiments et chemins sont en **briques de pierre**.
La stone et la smooth stone restent présentes ; landésite, la diorite et le
granit différencient les sols et les usages. Le tuf existe brut, poli, en
briques et sous ses deux formes ciselées. Les dalles, escaliers inversés,
murets, grilles et trappes donnent de l’épaisseur aux corniches, aux appuis de
fenêtre et aux équipements. Le chêne et le bouleau apparaissent comme poteaux,
boiseries, parquets, charpentes et couvertures selon les lieux.
Le rendu 20 calcule les raccords des vitres, barreaux, clôtures, murets et
angles descaliers à partir de tous les blocs de la pièce, après sa rotation
et avant son découpage entre chunks. Une fenêtre peut ainsi rejoindre son
véritable encadrement, même lorsque le chargement découpe le bâtiment.
Les smokes des bâtiments de ville et des espaces extérieurs passent, notamment
pour les accès, les sanitaires, les lits, les lampes, les rampes et les bassins.
Les essais natifs de création et de réouverture de la ville et des infrastructures
passent ; leurs résultats et les contrôles de compatibilité sont suivis dans [les essais alpha.20](testing-alpha20.md).
Aucune caméra, mailbox, machine dexpansion ou production électrique dédiée
nest ajoutée par cette passe. Les meubles utilisables restent les blocs
vanilla, et les butins de découverte restent partagés et non renouvelés.
+24
View File
@@ -0,0 +1,24 @@
# Alpha.21 — palettes et couvertures
La ville revient à une base commune : pierre lisse, pierre, briques de pierre,
andésite et chêne. Les façades, seuils, corniches et verrières gardent leurs
formes ; les pièces conservent leurs fonctions et leur circulation. La serre
emploie le bouleau comme bois propre. Le tuf accompagne les routes et les
parties souterraines.
![Modèles des bâtiments alpha.21](images/architecture-alpha21-overview.png)
Ces vues sont calculées depuis les blocs produits par les renderers21 et les
modèles/textures de Minecraft 26.3-pre-2. Elles montrent des variantes choisies,
sans terrain, éclairage ni végétation de la partie. Ce ne sont pas des captures
du client et elles ne prouvent pas les raccords avec le relief.
Les couvertures de latelier, du dépôt, de la serre, du relais radio et du refuge
reposent sur des murs ou charpentes. Lancien plafond opaque sous leur nouvelle
couverture est retiré. Les vérifications contrôlent aussi les petits appuis des
excavations, piscines, rampes de garage et ornements.
![Coupe des couvertures](images/architecture-alpha21-roofs.png)
La seconde planche coupe volontairement les murs pour voir les dessous des toits.
Les détails de validation et la graine dessai sont dans [le protocole](testing-alpha21.md).
+172
View File
@@ -0,0 +1,172 @@
# ARENA-01 — duels publics, arènes et paris — beta.073
Branche `codex/familiar-arenas-beta073`. Ticket du 15 septembre 2026.
**Implémenté, client natif, compilation et archives locales vérifiés.**
## Parcours en jeu
**Pause → Progression → Duels et arènes** ouvre la liste publique. Le même
accès figure dans le menu Duel historique. Aucune aptitude de familier ni
prestige n'est requis pour organiser un combat entre joueurs.
1. Créer un **duel** (deux inscrits) ou une **arène** (sans plafond de
participants), à l'emplacement de l'organisateur dans sa dimension.
2. Choisir **familiers seuls**, **joueurs seuls**, ou **joueurs avec familiers**.
Choisir un rayon de 24, 48 ou 96 blocs, une durée de 3, 5 ou 10 minutes,
et l'autorisation de la nourriture, des potions et des perles. Les armes,
boucliers et munitions restent utilisables. Les familiers gardent leurs
statistiques, personnalités, ressources et recharges réelles.
3. Choisir l'objet commun dans l'inventaire débloqué, et une mise d'entrée
de 0 à 64 objets. Zéro signifie gratuit. Par défaut, l'objet est l'émeraude.
Les composants natifs doivent correspondre : un objet renommé ou un
contenant rempli n'est pas équivalent à sa version vierge. La création
inscrit l'organisateur et prélève sa mise après validation serveur.
4. Les autres joueurs consultent les règles, viennent dans le périmètre et
s'inscrivent. Chacun valide **Prêt**. Tout changement de la liste invalide
les validations. L'organisateur lance quand tous sont présents et prêts.
5. **Dix secondes de préparation**, puis chacun pour soi. Les inscriptions
et les paris sont fermés dès le lancement de la préparation.
La liste présente les coordonnées, la dimension, les inscrits, les pots et
l'état du combat. Elle contient aussi les duels historiques à invitation,
qui gardent leurs deux mises libres et leur double validation. Pour ces seuls
duels historiques, le marché des spectateurs utilise des émeraudes ; les mises
historiques des deux adversaires restent dans leur menu existant.
Les annonces d'ouverture, de lancement et de résultat vont dans le chat du
serveur. Les combats terminés restent affichés cinq minutes. Les mises dues
restent disponibles aussi longtemps que nécessaire. La consultation se fait
par pages de douze entrées ; la pagination ne limite pas les inscriptions.
Il n'y a ni téléportation de spectateur, ni création automatique de terrain :
la carte de playtest se prépare normalement à côté.
## Combat et règles du monde
- **Joueurs : morts réelles**, selon le choix du créateur. Aucune santé
artificielle à la fin, aucun inventaire restauré par l'arène. Inventaire,
perte d'expérience, règles de conservation et tête-tombe suivent Sanctuary
et les règles effectives du monde. La mort élimine après le chemin natif
de création de la tombe.
- **Familiers : K.-O. existant**, santé persistante et récupération habituelle.
En mode mixte, le K.-O. du familier laisse son joueur combattre. La mort du
joueur élimine son camp. En mode familiers seuls, les propriétaires ne sont
pas des cibles et ne frappent pas directement les familiers adverses.
- Le dernier camp encore en lice gagne. Abandon, déconnexion pendant le
combat, changement d'individu, rappel du familier, sortie du périmètre ou
passage en créatif/spectateur éliminent. Le rayon est une distance 3D au
centre annoncé : l'altitude compte également.
- Une interruption du serveur, un rechargement du catalogue, l'expiration des
inscriptions ou une durée écoulée sans vainqueur rembourse les mises.
Un joueur déjà éliminé qui se déconnecte ne termine pas le combat des autres.
- Avant départ, se désinscrire rembourse son entrée et les paris placés sur
soi. Les autres inscriptions restent ouvertes. Le départ de l'organisateur
annule l'événement entier. Les duels historiques gardent leur contrat
d'interruption/refund antérieur.
- La permission PvP du combat ne vise que les adversaires inscrits en lice,
même si le PvP général est désactivé ou s'ils sont de la même faction.
Les dégâts directs ne franchissent pas cette frontière ; les familiers
hors combat n'apportent pas leur assistance aux combattants.
- Pose, utilisation et casse de blocs par les combattants sont désactivées,
y compris les gestes de minage/construction groupés déjà commencés.
Cela ne transforme pas le périmètre en claim : les mécanismes du monde,
cosmétiques, pièges ou interventions d'opérateurs restent ceux de la map.
## Paris en objets
La mise d'inscription est identique pour tous ; son pot revient au vainqueur.
Les spectateurs choisissent un inscrit et déposent une quantité libre de
l'objet commun, jusqu'à 3 456 unités par geste et dans la limite de leur
inventaire débloqué. Plusieurs gestes sont possibles avant le lancement.
Il n'y a pas de commission.
Le pot des spectateurs est partagé **au prorata des mises gagnantes**. Les
unités indivisibles restantes sont réparties dans l'ordre stable des UUID.
Exemple : 4 objets sur A, 2 autres sur A et 3 sur B ; si A gagne, les deux
parieurs gagnants récupèrent respectivement 6 et 3 objets. Si personne n'avait
misé sur le vainqueur, les paris sont remboursés.
Un inscrit ne peut pas parier sur son combat. Un parieur ne peut plus s'y
inscrire. Les boutons utilisent des identifiants et des révisions contrôlés
par le serveur ; aucune pile fournie par le client ne sert de preuve de fonds.
Les fonds sont pris uniquement dans les rangées réellement débloquées.
Les gains se récupèrent dans **Duels et arènes**. Un inventaire plein conserve
le solde dans le registre ; libérer même une partie d'une pile permet de le
récupérer progressivement. Aucun paiement ne tombe au sol et un joueur mort
ne peut pas encaisser dans l'inventaire en cours de remplacement.
## Contrat de sauvegarde additif
Aucun registre historique, identifiant d'objet, génération ou monde personnel
n'est converti. Nouveau fichier séparé :
`sanctuary/arena-stakes-v1.json`, schéma 1. Nouveau reçu joueur persistant et
copié à la mort : `sanctuary:arena_receipt`.
Chaque dépôt est écrit avant le débit, puis l'inventaire natif et son reçu sont
sauvegardés ensemble dans `playerdata` et relus. Le journal confirme ensuite
le débit. Chaque résultat répartit la totalité des fonds en une écriture
atomique avant le paiement. Chaque paiement sauvegarde de même l'inventaire
et son reçu avant de retirer la dette du journal. Une collecte partielle garde
le reste et ne repaie pas une tranche déjà reçue.
Au redémarrage, les combats vivants ne reprennent pas : les mises réellement
débitées sont remboursées. Un résultat déjà réparti conserve ses destinataires.
Les dépôts inachevés sont résolus à la reconnexion du payeur d'après son reçu,
sans inventer de crédit. Une erreur disque, un schéma inconnu ou un journal
invalide préserve les fichiers et suspend les transactions.
Le journal a une borne de lecture/écriture de 32 Mio pour détecter les états
anormaux. C'est une limite de stockage des opérations en attente, pas un nombre
maximum de participants. Avant un retour à une ancienne version, terminer
les événements et récupérer les soldes ; sinon restaurer une sauvegarde
complète cohérente, jamais un seul registre ou un seul fichier joueur.
## Vérifications et limites
Minecraft **26.3-pre-2**, Java 25, Fabric API **0.160.0+26.3**.
`Arena073ClientChecks` utilise un client intégré et des joueurs serveur
synthétiques avec connexions natives, dans un monde plat de développement.
Aucun serveur personnel ni EULA de serveur dédié n'est modifié.
La validation couvre trois familiers en combat autonome, des joueurs avec
morts réelles, le mode mixte, les permissions PvP, les paris, le partage exact,
les remboursements, l'inventaire plein et les composants de contenants. Une
arène de 25 inscrits vérifie la pagination sans plafond de participants.
Les menus FR/EN et l'aller-retour réseau du bouton de création sont contrôlés.
Résultat client : **réussi**, `ARENA073_PASS`, 1 min 52 s. Les tests
`Duel054Checks` sont rejoués dans la même session : validation mutuelle, anciennes
mises, projectiles natifs, K.-O., refus dun projectile tardif et remboursements
passent aussi. La mort pendant les inscriptions libère linscription sans
annuler les autres. Le journal est éprouvé avant débit, après sauvegarde du
débit, après sauvegarde du paiement et avec un schéma inconnu. Les essais
conservent les quantités exactes et refusent le schéma inconnu sans réécriture.
Journal client : `build/arena073-workspace/build/arena073-client.log`.
Captures copiées dans `build/arena073-evidence/`.
`./gradlew check build assemblePack assembleTestPack -x :sanctuary:runGameTest`
réussit en **2 min 56 s**, 124 tâches (108 exécutées). Les GameTests serveur
dédiés sont exclus conformément au refus d'accepter leur EULA ; les scénarios
multijoueurs de ce ticket tournent dans le serveur intégré du client natif.
Les **1 689 classes** compilées, les ressources et les sources Java correspondent
aux archives. Par rapport à beta.072, seules les classes de ce ticket et les
métadonnées de version évoluent ; les ressources existantes, les 88 profils et
le resource pack beta.070 restent identiques. Les **79 nouvelles clés FR/EN**
sont présentes dans les deux langues. Les archives beta.070 à beta.072 restent
inchangées.
- [Pack normal](../build/Sanctuary-beta.073.mrpack) : 9 592 283 octets.
- [Pack Test, monde plat rapide](../build/Sanctuary-Test-beta.073.mrpack) :
9 611 218 octets.
- [Reçu des artefacts et SHA-256](../build/arena073-artifact.json).
La livraison a été construite dans `build/arena073-workspace`, copie isolée
incluant la version beta.072 vérifiée, puis les seuls changements de ce ticket
ont été réintégrés dans les sources partagées. Aucun canal distant, serveur
personnel ou instance Prism n'est mis à jour.
Ce ticket fournit un outil de playtest. Il ne constitue pas une validation
exhaustive de l'équilibrage des 88 espèces, un benchmark de très grand serveur,
ni une protection compétitive contre les complicités et abandons arrangés.
Les tests de reprise ne simulent pas une panne physique du disque.
+79
View File
@@ -0,0 +1,79 @@
# beta.061 — musique d'arrivée et taille des familiers portés
Branche `codex/intro-familiar-mount-beta061`.
Contrat : lancer la musique Minecraft au dévoilement du portail (23,5 s),
puis conserver ce même morceau pendant le flash blanc et le passage au monde.
Les lettres gardent leurs ambiances sans musique. Le menu est arrêté une fois
à l'ouverture de l'introduction ; le gestionnaire attend le portail. Le lancement
se fait une seule fois, y compris après un redimensionnement. Passer avant le
portail ne force pas de morceau ; passer après conserve le morceau commencé.
Les sons de la cinématique gardent leur propre nettoyage ; les volumes choisis par le joueur restent respectés.
Le portage des familiers utilise la taille déjà enregistrée dans l'œuf :
minuscule sans pénalité, petit avec une pénalité légère, ordinaire à 75 %
de vitesse à la taille 1, puis de plus en plus lourd jusqu'à 25 % à la limite.
Un colossal (taille ≥ 2,5) ne peut plus être porté. Maj + clic droit à main
vide sur son familier colossal permet de monter dessus ; relâcher Maj puis
appuyer à nouveau fait descendre. Les touches de déplacement le dirigent,
Espace saute au sol ou monte en vol/nage ; regarder vers le bas en avançant
permet de descendre en vol/nage. Les aquatiques restent lents hors de l'eau.
Le propriétaire dirige sa monture côté serveur. Les commandes de combat
autonomes ne détournent pas le déplacement tant qu'il est dessus. L'équipement
sur la tête du mob conserve la priorité du geste (récupérer son chapeau avant
de monter). Les animaux natifs bébés restent sans poids, les piles de joueurs
et leur interaction avec Force gardent leurs règles.
La monte occupe une place pour le propriétaire, sans autre passager porté.
Les duels conservent leur combat autonome et font descendre le cavalier.
Les relations de monture sont temporaires. Retrait de l'œuf, K.-O., déconnexion
ou changement de dimension interrompent la monte. Aucun nouveau format de
sauvegarde : `sanctuary:familiar_size` schéma 1 et tous les autres composants
de l'œuf restent inchangés. Les œufs sans taille valide gardent le poids
ordinaire et ne deviennent pas des montures. Aucun monde existant n'est modifié.
## Vérifications
`ArrivalMount061ClientChecks` passe sur le client natif Minecraft 26.3-pre-2,
avec un monde plat de développement neuf et une vraie introduction complète :
- absence de musique Minecraft pendant les lettres, lancement au portail,
même instance sonore active jusque deux secondes après la fin du flash ;
- portage vache bébé / dragon miniature sur sept tailles, suppression du
ralentissement à la dépose, exemption conservée pour un bébé natif ;
- Maj + clic droit réellement envoyé au serveur, monte d'une vache colossale,
déplacement par les touches du client et orientation du cavalier ;
- maintien pendant le premier appui sur Maj, démontage après relâchement,
nouvelle monte puis retrait de l'œuf sans cavalier orphelin ;
- allay colossal : montée, descente et collision du cavalier sous un plafond ;
- morue colossale : mouvement lent à terre, puis vraie nage verticale dans
un bassin fermé ; arrêt sonore explicite encore fonctionnel hors arrivée.
Journal : `build/arrival-mount061-client.log`, **1 min 32 s**.
Marqueurs `ARRIVAL061_MUSIC_PASS` et `ARRIVAL_MOUNT061_PASS`.
La capture de la vache montée est inspectée dans
`build/arrival-mount061-evidence/`. Les mêmes règles et modèles natifs couvrent
les autres espèces, mais leur placement visuel individuel n'a pas été vérifié
pour chacune des 88 espèces. Les grands familiers ont besoin d'un espace libre
adapté à leur volume. Aucun essai avec deux clients humains n'est revendiqué.
`./gradlew check build assemblePack assembleTestPack -x :sanctuary:runGameTest
-PsanctuaryClientTests=true -PsanctuaryArrivalMount061ClientTests=true
-PsanctuaryQuickTests=true` réussit : **122 tâches**, **3 min 14 s**.
Le parcours client est exécuté séparément par `:sanctuary:runClientGameTest`
avec les mêmes propriétés. Aucun EULA de serveur dédié n'a été accepté.
## Archives locales
- [Pack normal](../build/Sanctuary-beta.061.mrpack), 5676845 octets.
SHA-256 : `c97424d94b2e2960c071795670cbc1300cf5a805c4dadbfa5dad33fccb79edbb`.
- [Monde plat rapide](../build/Sanctuary-Test-beta.061.mrpack), 5695778 octets.
SHA-256 : `2c3a9c3cfa849a3f24c38ceaf112ef4a96f6b182faa99d1eb78f00f8f2293c63`.
Les **1623 classes** du mod embarqué sont conformes au build. Le reçu
`build/arrival-mount061-artifact.json` vérifie les ressources, les dépendances
imbriquées, les différences ciblées avec beta.060 et la conservation des
archives précédentes. JEI et les ressources de génération restent identiques.
Aucun canal publié, instance personnelle ou monde existant n'est modifié.
+96
View File
@@ -0,0 +1,96 @@
# beta.058 — altitude de la carte
Ticket `codex/atlas-altitude-beta058`.
## Contrat avant implémentation
Deux boutons ↑ / ↓ sous Recentrer et le zoom choisissent les plafonds
0, 140, 280, 420, 560 et 640. La carte ouvre à 640 (surface habituelle) ;
chaque plafond montre le premier bloc coloré situé à cette altitude ou plus
bas. C'est une coupe horizontale : une roche coupée reste visible, sans
chercher automatiquement une grotte. Le dernier pas fait 80 blocs.
La position et le zoom ne changent pas. Les extrémités désactivent leur bouton.
Chunks et Demeure sont désactivés par défaut, réactivables par leurs boutons.
Le cadre central et ses quatre panneaux assombris sont retirés. Le nord
conserve son emplacement.
Les relevés restent personnels et utilisent le même masque d'exploration
horizontal qu'auparavant. Les six plafonds sont relevés lors des nouvelles
visites, même avant l'achat de Grande carte. Aucun chunk distant n'est chargé
ou généré. La vue opérateur inspecte seulement les chunks chargés et n'inscrit
pas ses consultations dans les découvertes personnelles.
## Contrat de données additif
Le fichier existant `data/sanctuary-atlas/<UUID>.json` et son schéma 2 restent
la référence de la surface à 640. Aucune conversion ni réinterprétation des
anciens pixels. Les cinq autres plafonds utilisent le même format dans des
fichiers distincts `data/sanctuary-atlas/layers/<UUID>/<altitude>.json`.
Les anciens relevés de surface ne permettent pas d'inventer leurs couleurs
inférieures : ces dernières apparaissent lors des revisites. Un retour à
beta.057 ignore simplement les fichiers supplémentaires ; la surface reste
lisible. Aucun monde personnel n'est ouvert ou modifié pendant le travail.
Chaque plafond conserve la limite de 16 384 chunks. Le client ne garde que
la couche affichée ; le token réseau change avec l'altitude, empêchant les
anciens paquets de repeindre une autre couche. Le protocole `atlas_request`
ajoute un plafond validé : client et serveur doivent avoir la même version.
Le serveur relève un chunk à la fois et saute les sections entièrement vides.
Les sauvegardes périodiques des couches sont étalées dans le temps.
## Vérifications
Le parcours natif `Atlas058ClientChecks` réussit sur la version finale en **1 min 44 s**, avec un
vrai monde de développement Sanctuary de 640 blocs de haut :
- couleurs différentes aux six plafonds, coupe inclusive, verre transparent,
colonne vide, accord entre le relevé d'une couche et celui des six couches ;
- absence de chargement d'un chunk distant et masque d'exploration conservé ;
- clics réels sur les boutons, limites 0/640, changement rapide, rejet des
anciens paquets terrain et Demeure, cadrage/zoom stables après rafraîchissement ;
- relecture des six fichiers, absence de réécriture quand rien ne change,
achat de Grande carte après relevé, refus d'une requête opérateur non autorisée ;
- codec réseau, refus des altitudes invalides, libellés FR/EN, petite interface ;
- Chunks/Demeure désactivés à l'ouverture mais réactivables, absence du cadre
assombri et emplacement du nord conservé (captures inspectées).
Commande :
```sh
./gradlew :sanctuary:runClientGameTest -x :sanctuary:runGameTest \
-PsanctuaryClientTests=true -PsanctuaryAtlas058ClientTests=true \
-PsanctuaryQuickTests=true
```
Journal : `build/atlas058-client.log`, marqueur `ATLAS058_PASS`.
Captures inspectées : `build/atlas058-evidence/`.
Le brouillard reste horizontal, comme dans les cartes existantes : ce lot
n'introduit pas de visibilité optique ni de journal de découverte par caverne.
Demeure reste une empreinte de chunk, sans séparation verticale des bâtiments.
Au plafond maximal, les pixels de surface restent compatibles ; les anciens
parcours ne sont pas reconstruits aux autres altitudes sans revisite.
La charge d'un serveur rempli pendant une saison n'a pas été mesurée. Le
plafond théorique est de 24 Mio de couleurs brutes par joueur pour six couches
pleines, hors index et sérialisation, contre 4 Mio pour la surface seule.
Chaque fichier reste borné à 12 Mio ; un fichier invalide est préservé et
suspend l'atlas du joueur concerné. Les sauvegardes tournent sur les six
couches toutes les 12 secondes, puis sont vidées à la déconnexion/fermeture.
Aucun serveur dédié démarré, aucune EULA acceptée.
## Livraison vérifiée
`check build assemblePack assembleTestPack`, avec compilation des tests client
et exclusion du serveur dédié `runGameTest`, réussit en **2 min 23 s**
(`build/atlas058-check.log`). 1 601 classes du JAR correspondent au build.
ZIP, versions, ressources, isolation du mod de test et JAR embarqués contrôlés.
JEI et le code Demeure sont inchangés. Les archives beta.057 restent intactes.
- Pack normal : `build/Sanctuary-beta.058.mrpack`, 5627223 octets ;
SHA-256 `bc9af60be020fd32f99a173638e9006cab128cf942df666e34e03824bac6f892`.
- Pack de test : `build/Sanctuary-Test-beta.058.mrpack`, 5646157 octets ;
SHA-256 `010eb08df83117669d2f13d3c2e8641c965fac3ddec11fbab419f01a9cb94942`.
- Reçu : `build/atlas058-artifact.json`.
Aucune publication de canal ni synchronisation d'instance personnelle.
+118
View File
@@ -0,0 +1,118 @@
# MAP-01 — carte Sanctuary native, beta.005
Ticket autorisé le 13 septembre 2026, branche `codex/native-map-beta005`.
Carte de dessus écrite dans Sanctuary, inspirée des interactions de Xaero
(glisser, zoomer, se recentrer). Aucun code, asset ou dépendance Xaero repris.
## Comportement livré
Le Blocodex ouvre une carte de surface de l'Overworld : nord en haut, terrain
coloré, position et orientation de l'habitant, déplacement, zoom, recentrage.
L'aptitude **Grande carte** coûte provisoirement 4 niveaux, configurables.
L'exploration commence avant cet achat, conformément au choix du créateur.
La mini-carte, les marqueurs et le partage volontaire entre habitants restent
des tickets distincts. Aucun partage automatique de découvertes.
La vue habitant affiche ses propres relevés. La vue opérateur est un choix
explicite contrôlé par le serveur (`COMMANDS_GAMEMASTER`, commandes autorisées
en solo). Elle peut inspecter les chunks déjà chargés, sans les inscrire dans
les découvertes personnelles et sans charger/générer de terrain supplémentaire.
La carte représente la surface supérieure, sans carte des grottes ni radar.
Les couleurs de création d'habitant affichent des noms FR/EN (Azur,
Pamplemousse, Sauge…) associés à leur teinte, en caractères Minecraft normaux.
Les boutons et leur texte coloré restent natifs ; l'attribution RGB ne change
pas. Les longs noms disposent du défilement et de l'infobulle vanilla.
La carte laisse le monde évoluer pendant sa consultation, y compris en solo.
## Contrat de sauvegarde et migration, écrit avant le code
Les identifiants, chunks, graines et contrats de génération sont inchangés.
Seuls les mondes dont la progression Sanctuary est déjà active participent.
L'attachement `sanctuary:progression` passe du schéma 1 au schéma 2 : ajout du
booléen `atlas`, initialement faux. Le lecteur valide les anciens champs et
l'historique puis les conserve ; un prochain achat écrit le schéma 2. Les rangs,
l'aptitude Noms, les coûts déjà payés et dates ne changent pas. Les morts et
reconnexions conservent l'achat de Grande carte. Aucun prestige introduit.
`progression.json` schéma 1 reste accepté sans réécriture : `atlasCost` vaut 4
par défaut. Les nouvelles configurations utilisent le schéma 2 et ce champ.
Pour régler le prix dans un ancien fichier, passer `schema` à 2 et ajouter
`"atlasCost": 4` (ou le prix voulu), en conservant les autres valeurs.
Des fichiers additifs `data/sanctuary-atlas/<UUID>.json` (schéma 1) conservent
les relevés de surface de l'Overworld, liés à l'UUID et à la graine. Une tuile
contient 16×16 couleurs de carte vanilla. Les relevés portent sur les chunks
chargés dans un rayon de deux chunks autour de l'habitant, progressivement.
Il s'agit d'une proximité cartographiée, pas d'une visibilité optique exacte.
Les revisites actualisent le terrain ; les zones lointaines restent le dernier
relevé. Les parcours antérieurs à beta.005 ne peuvent pas être reconstitués.
Écriture atomique périodique et à la déconnexion/fermeture ; les derniers relevés
peuvent être perdus lors d'un arrêt brutal. Une limite de 16 384 chunks par
habitant borne ce premier lot ; une carte pleine reste consultable et signale
qu'elle ne peut plus ajouter de zones. Un fichier invalide est conservé et
désactive la carte concernée, sans effacer les données ni bloquer les autres.
Avant une utilisation dans une sauvegarde personnelle, conserver une sauvegarde
complète. Un retour à beta.004 exige la copie antérieure à la migration : son
lecteur de progression ne connaît pas les achats `atlas`. Aucun monde personnel
n'est ouvert par ce ticket, les essais utilisent des mondes de développement.
## Vérification
- `./gradlew check build -PsanctuaryFocusedTests=progression,map` : contrats
de progression et de relevés, et **7/7 tests natifs serveur** réussis.
- `./gradlew :sanctuary:runClientGameTest -PsanctuaryClientTests=true
-PsanctuaryProgressionClientTests=true` : réussi, **1 min 46 s**. Vrai client,
création avant spawn, noms de couleurs FR, achat réel de Grande carte,
relevés antérieurs à l'achat, zoom/glisser/recentrer, GUI 320×240 et autres
tailles, commandes désactivées puis activées, inspection explicite,
révocation et effacement des tuiles opérateur, retour au menu pause,
mort et redémarrage du même monde de test.
- La maquette archivée et les packs beta.003/004 restent immuables.
- Captures : `build/beta005-preview/`. Logs : `build/beta005-client.log`,
`build/beta005-check-build.log`, `build/beta005-delivery.log`.
Les essais ne mesurent pas encore une charge de 30 joueurs ni la durée d'une
saison complète. La suite générale garde les deux assertions worldgen
historiques signalées en beta.004 (hauteur 384 attendue contre 640 et support
de sédiment seed 0) ; ce lot n'a pas modifié la génération.
## Tester
Installer le pack beta.005 côté client et la même version côté serveur.
Dans le Blocodex (**B** ou **Échap**), acheter **Grande carte** dans Progression,
puis ouvrir **Monde → Grande carte**. Glisser pour déplacer, molette ou boutons
pour zoomer, Recentrer ou Début pour revenir au joueur. Les flèches déplacent
la vue. Une zone noire n'est pas encore relevée ; le vide relevé est bleu sombre.
Le relevé complet des environs immédiats prend environ cinq secondes.
Avec les commandes autorisées en solo ou les droits opérateur, ouvrir la même
carte puis choisir **Vue opérateur**. Cet accès ne nécessite pas l'achat de
l'aptitude ; revenir à **Vue habitant** retrouve ses seuls relevés et l'exigence
de l'aptitude. L'inspection ne charge pas de terrain distant : une zone absente
peut simplement ne plus être chargée côté serveur.
Les relevés couvrent l'Overworld supérieur, par proximité de deux chunks, sans
reconstituer les parcours antérieurs à beta.005. Les marqueurs, mini-carte,
partages, grottes, statistiques/advancements dans le Blocodex, filtrage des blocs
inconnus et vitrines/favoris de l'habitant restent les prochains tickets.
## Livraison locale vérifiée
`./gradlew check build assemblePack -PsanctuaryFocusedTests=progression,map`
réussit en 4 min 09 s ; **7/7 tests natifs serveur**. Export packwiz puis
vérification du ZIP, JAR embarqué, versions internes, dépendance Fabric API,
index packwiz, libellés FR/EN, six icônes originales et absence du mod de test.
- MRpack : `build/Sanctuary-beta.005.mrpack`, 2 248 215 octets.
- SHA-256 : `4a71465349af334b5bdeed4b0cc42dbef55de94e6acb7f0ab798cda477e6dc0e`.
- Reçu : `build/atlas005-artifact.json`.
- JAR : `mods/sanctuary/build/libs/sanctuary-beta.005.jar`.
Les empreintes des MRpacks beta.003/004 et des deux ZIP d'archives Web v1 sont
inchangées. Aucune publication distante, synchronisation Prism ou installation
sur un serveur personnel n'a été effectuée.
+82
View File
@@ -0,0 +1,82 @@
# MAP-03 — Carte immersive — beta.007
Branche : `codex/atlas-immersive`. Cible : Minecraft **26.3-pre-2**, Fabric
Loader **0.19.5**, Fabric API **0.160.0+26.3**. Livraison locale d'essai.
## Résultat
**B → Monde → Grande carte** utilise toute la surface de l'écran. La carte
continue sous les onglets, les commandes et le pied de page. Le carré central
reste clair ; les abords sont assombris par des panneaux translucides. Le carré
ne limite ni le terrain ni les gestes de navigation.
Journal, recentrage et zoom sont superposés à gauche ; vue habitant/opérateur,
grille de chunks et empreintes Demeure à droite. Le titre et les onglets natifs
restent en haut, **Done / Terminé** en bas. Les coordonnées sous le pointeur,
le zoom et la vue active sont affichés en bas à gauche sur un fond contrasté.
Les autres écrans du Blocodex gardent leur cadre.
Le glisser-déplacer et la molette fonctionnent sur les zones sombres jusqu'aux
bords de l'écran. Les boutons gardent la priorité sur la carte, même lorsqu'ils
sont désactivés. Grille, empreintes et indicateur du joueur utilisent les mêmes
coordonnées que le terrain. Le zoom minimal s'adapte à la taille du GUI pour
préserver la couverture de la fenêtre cartographique de 1 024 × 1 024 blocs.
## Transparence et données
L'inconnu et le vide observé sont transparents dans la texture ; le fond natif
du jeu reste visible derrière. Leurs états restent distincts dans les relevés.
La grille peut traverser une zone transparente lorsqu'elle est activée ; les
empreintes ne peignent que les pixels de terrain effectivement connus.
Les relevés personnels, l'exploration avant l'achat de Grande carte et le
brouillard de beta.006 sont conservés. La vue opérateur reste une action
explicite vérifiée par le serveur. Un changement de vue ou une révocation
efface l'image précédente avant son prochain rendu.
Ce ticket modifie le rendu et les entrées client. Il ne change ni les formats
de sauvegarde, ni le protocole des relevés, ni le terrain ou les expansions.
Demeure garde son rôle d'empreinte, sans réservation ni protection. Mini-carte,
marqueurs et partage restent dans leurs tickets respectifs.
## Vérifications et artefact
- Client Minecraft natif :
`./gradlew :sanctuary:runClientGameTest -PsanctuaryClientTests=true -PsanctuaryProgressionClientTests=true`
réussi en **1 min 51 s**. Paquets réels, achat de Grande carte, texture alpha,
molette et gestes via `MouseHandler`, glissements successifs et dans les quatre
marges, priorité des boutons, recentrage, grille, empreintes, changement de
rôle, révocation, fermeture native et retour au Blocodex vérifiés.
- Captures inspectées à **640×480**, **1280×720** (GUI automatique),
**1920×1080** (échelles 1 et 3), ainsi qu'en français. Les boutons ne se
chevauchent pas. La vue opérateur montre le terrain continu derrière le
haut, le bas et les côtés. Captures conservées dans `build/beta007-preview/`.
- Un premier passage a détecté que `AbstractWidget.isMouseOver` ignore les
boutons désactivés : leur zone laissait passer la molette. Le calcul utilise
désormais les limites du bouton visible ; le parcours complet a été relancé
avec succès. Journaux `build/beta007-client.log` (diagnostic) et
`build/beta007-client-final.log` (validation).
- `./gradlew check build assemblePack -PsanctuaryFocusedTests=progression,map,demeure`
réussi en **4 min 4 s**, dont **8/8 tests natifs serveur**. Les contrôles de
contrats Atlas/Demeure et de progression passent également. La sélection
native est ciblée ; les deux assertions worldgen générales déjà connues en
beta.003/005 ne sont pas revendiquées corrigées. Journal :
`build/beta007-delivery.log`.
- MRpack exporté avec packwiz puis vérifié : CRC ZIP, contenu exact, identité
des JAR construits, versions internes, dépendance Fabric API, index packwiz,
notices et licence Demeure, 378 clés FR/EN alignées et six icônes originales.
Les exports beta.003, .004, .005 et .006 conservent leurs empreintes.
## Artefact d'essai
[Sanctuary-beta.007.mrpack](../build/Sanctuary-beta.007.mrpack), **2 299 820 octets**.
Demeure reste embarqué dans le JAR Sanctuary ; aucun ajout manuel nécessaire.
- SHA-256 MRpack : `bc082e9143e15aea8f231b1205ed5e27cd9bf7b4e6a81d4895f69ff2a11e660d`.
- SHA-256 Sanctuary : `7d14d6019176f0d413dfe27a2b0e9a8fe419ed88aad812d9c045dfb13f809752`.
- SHA-256 Demeure : `70108b80df46e4dbcf2540b7a260b1c247bb8ea28db684f49b15b407d8853e43`.
Reçu : `build/atlas007-artifact.json` ; vérificateur :
`build/verify-beta007-pack.py`. Export local uniquement. Aucun monde personnel,
canal de publication ou instance Prism n'a été modifié.
+85
View File
@@ -0,0 +1,85 @@
# beta.059 — bannières et cartes au trésor
Ticket `codex/atlas-markers-beta059`. Prolonge les altitudes et l'affichage
sans cadre de beta.058.
## Contrat avant implémentation
- Un clic droit sur une bannière, main vide ou avec une carte remplie, ajoute
son repère personnel à l'atlas. Le même geste le retire ; la couleur et le
nom renommé sont repris. Une carte native tenue continue aussi son propre
enregistrement vanilla. Aucun achat supplémentaire : l'observation peut
précéder l'aptitude Grande carte, qui reste nécessaire pour ouvrir l'atlas.
- Utiliser une carte au trésor remplie importe ses repères dans la World Map.
La carte physique reste disponible pour être partagée. Les cartes natives
d'exploration et leurs bannières sont prises en charge ; leur terrain n'est
pas copié dans le brouillard personnel.
- Les trésors des îlots miniers sont lus dans le plan aérien déjà chargé et
sauvegardé, sans nouvelle recherche ni génération. Les opérateurs les voient
automatiquement. Un client normal ne reçoit jamais les coordonnées des
trésors qu'il n'a pas importés depuis une carte.
- Les deux navires fournissent des cartes vers les premiers îlots miniers.
Les coffres miniers peuvent donner la carte de l'îlot suivant, notamment
le troisième des mondes Grand. Ce sont des cartes Minecraft remplies avec
le marqueur de trésor natif, sans nouvel objet ni texture.
- Les repères utilisent les sprites de carte Minecraft. Les bannières nommées
ont leur texte ; le survol donne le nom et les coordonnées. Un point dont
l'altitude est connue disparaît sous un plafond inférieur à ce point.
Les cartes natives sans altitude restent visibles sur tous les plafonds.
## Données et mondes existants
Fichier personnel additif `data/sanctuary-atlas/markers/<UUID>.json`, schéma 1,
lié à l'UUID et à la graine. Les journaux de terrain, couches, monde et plans
restent inchangés. Limite de 512 repères ; écritures atomiques et conservation
d'un fichier invalide. Reconnexion et prestige ne suppriment pas les repères.
Un retour à beta.058 ignore ce fichier sans conversion.
Les trois tables de butin aériennes conservent leurs objets et les quantités
qu'elles déclarent, et ajoutent une carte. Leurs anciens champs `functions`
/ `function`, ignorés dans cette version, sont adaptés en `modifier` / `type`
pour appliquer effectivement ces quantités et la création de la carte.
Seuls les coffres dont le butin n'a pas encore été généré utilisent ces tables ;
aucun coffre déjà ouvert n'est rempli, aucun contenu existant n'est réécrit.
Les coffres et positions sont ceux des plans d'origine, sans migration de
structures, de chunks ou de graine. Les tests ne touchent que des mondes de
laboratoire. Aucune publication ou installation personnelle implicite.
## Vérifications
- `atlas059Smoke` : persistance Unicode, isolation UUID/graine, limite de
512 repères, suppression, absence de réécriture sans changement, filtrage
du cadrage et de l'altitude, conservation des fichiers corrompus.
- Parcours client Minecraft 26.3-pre-2 sur un monde Sanctuary de laboratoire,
graine 42, taille moyenne, structures activées : clic droit réel sur une
bannière renommée, retrait et ajout, changement de nom, import depuis une
carte en main gauche, lecture des trois tables de butin natives, quantités
conservées, cartes dirigées vers les deux coffres du plan, utilisation
physique de la carte au trésor, conservation de l'objet et absence de doublon.
- Le client normal reçoit uniquement le trésor découvert. Le mode opérateur
montre les deux sans les enregistrer ; sa désactivation et un paquet tardif
ne rétablissent pas les coordonnées cachées. Suppression d'une bannière
chargée, relecture du journal, codec avec altitude inconnue et libellés FR/EN
vérifiés. Sprites natifs contrôlés et captures inspectées.
- `:sanctuary:atlas059Smoke :sanctuary:runClientGameTest` réussi en 2 min 57 s,
avec `-PsanctuaryClientTests=true -PsanctuaryAtlas059ClientTests=true
-PsanctuaryQuickTests=true`. Journal : `build/atlas059-client.log`, marqueur
`ATLAS059_PASS`.
- `./gradlew check build assemblePack assembleTestPack` réussi en 2 min 9 s,
122 tâches, avec les mêmes propriétés et `-x :sanctuary:runGameTest`.
Journal : `build/atlas059-check.log`. Aucun serveur dédié ni acceptation
d'EULA ; les tests natifs utilisent le serveur intégré de développement.
- Les deux exports packwiz sont vérifiés par `build/verify-atlas059.py` :
1 607 classes conformes au build, changements limités aux classes prévues,
ressources existantes préservées hors libellés et trois tables documentées,
JEI inchangé et archives beta.058 intactes.
Archives locales : [pack normal](../build/Sanctuary-beta.059.mrpack) et
[monde plat rapide](../build/Sanctuary-Test-beta.059.mrpack).
Reçu détaillé : `build/atlas059-artifact.json` ; captures dans
`build/atlas059-evidence/`.
Le parcours natif couvre les deux trésors du monde moyen. Le troisième îlot
du monde Grand suit le même plan et la même règle de carte suivante, mais n'a
pas fait l'objet d'un second monde de test. Aucun essai avec plusieurs clients
humains simultanés ni mesure de FPS n'est revendiqué ici.
+1643 -6
View File
File diff suppressed because it is too large Load Diff
+378
View File
@@ -0,0 +1,378 @@
# BR-01 — Explorer les Backrooms alimentées par le ballast
**Ticket local préparé le 15 septembre 2026. Statut : à implémenter après la
livraison et la validation du suivi du ballast.** Cette préparation est
documentaire ; elle n'active aucune dimension ni aucun transfert en jeu.
- Branche documentaire : `codex/backrooms-ticket`.
- Branche prévue pour l'implémentation : `codex/backrooms-generation`.
- Livraison `beta.xxx` : numéro à attribuer au moment de la livraison du code.
- Cible relevée dans `gradle.properties` : Minecraft **26.3-pre-2**, Java 25.
Vérifier les API et dépendances de la version effectivement ciblée au démarrage.
- Prérequis bloquant : **suivi du ballast livré**, avec contrat de données et
preuves de reprise. Référence du ticket amont à ajouter lorsqu'il sera créé ;
aucun ticket dédié à ce suivi n'est identifié dans le backlog à cette date.
## 1. Résultat attendu
Un joueur termine son sommeil dans son lit de l'Overworld et rejoint sa salle
personnelle, un Indoor de protection situé dans les Backrooms communes. Un
tableau cache une porte ouverte donnant sur le réseau. Le joueur explore des
couloirs, salles, bassins et infrastructures, peut rencontrer un autre joueur
ou découvrir sa salle, puis dort dans un lit trouvé sur place pour revenir à
son propre lit d'origine dans l'Overworld.
Les nouvelles régions portent l'empreinte du ballast réellement suivi dans
Sanctuary. Les régions déjà planifiées conservent leur génération ; les lieux
visités, les constructions et les cartes dessinées par les joueurs restent
utiles après changement de période, reconnexion et redémarrage.
## 2. Décisions du créateur à respecter
Ces règles proviennent de la discussion de conception et priment sur les
anciennes intentions d'accès encore ouvertes dans la vision et la cosmologie.
- Les Backrooms sont le dysfonctionnement d'Indoors interconnectés. Le ballast
du monde y est redirigé et alimente leur croissance procédurale.
- Steve a aménagé un refuge de protection associé au renoncement à poursuivre
ce chemin. Il a caché le passage avec **un tableau devant une porte ouverte**.
Ce geste simple ne fait pas de Steve l'ingénieur de toute l'infrastructure.
- Chaque joueur dispose d'une salle stable, liée à son identité et intégrée
physiquement à la génération des Backrooms. Le lit est son accès personnel.
- Un autre joueur peut découvrir cette salle à pied et y entrer. Son propre lit
ne lui permet pas de choisir la salle d'autrui comme destination.
- Le sommeil complet déclenche le passage ; il ne fait pas passer la nuit.
- Dans les Backrooms, **n'importe quel lit utilisable permet de revenir à son
propre lit d'origine dans l'Overworld**. Son propriétaire ou sa proximité
d'une salle personnelle ne change pas la destination.
- Les Backrooms ne présentent pas de coordonnées aux joueurs. Chacun construit
sa connaissance des trajets et sa cartographie.
- Couloirs et salles doivent former des lieux explorables avec des ambiances
dreamcore, poolrooms et des matériaux liés à l'activité des joueurs, dont
la cobblestone (« cobble »).
Les modalités des sections suivantes sont des **choix proposés pour réaliser
ce premier lot**. Elles ne sont pas des fonctionnalités déjà livrées.
## 3. Condition de démarrage : le ballast doit être exploitable
Le suivi amont doit fournir et documenter :
1. Les opérations qui produisent du ballast, leurs unités, matériaux, quantités,
dates/périodes et périmètres d'origine. Distinguer événement terminé, tentative
refusée et données absentes. Un zéro enregistré n'est pas une panne de collecte.
2. Une identité stable des événements ou lots et une reprise sans double compte.
Une relecture après arrêt ne produit pas un nouvel apport de matière.
3. Des instantanés immuables et versionnés, identifiables par période et révision,
dont la lecture ne modifie pas le registre économique. Leur archivage doit
permettre de comprendre l'origine d'un secteur après évolution du suivi.
4. La nature du ballast : matière comptable, empreinte d'une opération, ou les
deux. Fixer les règles de réservation, de consommation et de récupération
lorsque des blocs générés représentent une quantité économique extractible.
5. Le traitement des actions réalisées dans les Backrooms. Générer un bloc,
rejouer un événement ou recycler un matériau ne doit pas alimenter une boucle
de création non prévue par le contrat amont.
6. Les contrôles de sauvegarde, de restauration et de conservation des données,
ainsi qu'au moins un parcours réel allant d'une opération au lot enregistré.
Le socle [d'activité datée](blocodex.md#relevés-datés--portée-de-lalpha23)
observe déjà minage, pose, fabrication, ramassage et jet volontaire. Ces agrégats
ne prouvent ni consommation ni perte ; ils ne distinguent actuellement ni
joueur ni dimension. **Ils ne remplacent pas le prérequis ballast.**
BR-01 consomme l'interface du suivi livré. Il ne crée pas les producteurs
économiques futurs et ne reconstitue pas fictivement leurs transactions.
Les données synthétiques servent aux tests, sans devenir l'historique du serveur.
## 4. Sommeil, salle personnelle et retour
### Parcours nominal
| Situation | Comportement attendu |
| --- | --- |
| Sommeil complet dans le lit personnel validé de l'Overworld | Le serveur prépare la destination, mémorise le retour, puis transfère le joueur dans sa salle. |
| Premier voyage | Une seule salle est réservée pour l'identité du joueur ; son arrivée et ses raccords sont prêts avant le transfert. |
| Voyages suivants, y compris après déplacement du lit personnel | Le joueur retrouve la même salle. Le retour est ancré au lit d'origine de ce nouveau voyage. |
| Réveil volontaire avant la fin du sommeil | Aucun transfert, aucune nouvelle salle créée par le simple début de la pose. |
| Sommeil dans un lit des Backrooms | Retour au lit d'origine enregistré pour ce joueur ; aucune modification de l'ancrage vers le lit utilisé sur place. |
| Deux joueurs utilisent successivement le même lit des Backrooms | Chacun revient dans son Overworld à son propre point de retour. |
| Découverte de la salle d'autrui à pied | Entrée possible ; la salle conserve son identité et son lien au propriétaire. |
Proposition d'interaction : une durée de sommeil individuelle de **100 ticks**
(environ cinq secondes à 20 ticks/s), à éprouver en jeu. Elle ne dépend pas du
nombre de joueurs couchés. Permettre le parcours de jour comme de nuit dans les
mondes Sanctuary où la fonction est activée, sans saut d'heure ni de météo.
Les lits des Backrooms doivent fonctionner sans explosion.
Réutiliser la règle du lit personnel unique et vérifier son implémentation au
démarrage : un point de réapparition ne prouve pas à lui seul la propriété d'un
lit. Si cette association manque, la liaison minimale joueur/lit fait partie
du parcours BR-01 ; la politique de remplacement doit préserver les lits déjà
posés. Les lits portés comme accessoires décoratifs ne sont pas des accès.
### Conservation et incidents
- Le lien à la salle repose sur l'identité persistante, jamais sur le pseudo,
le nom d'un lit, un prestige ou les coordonnées du lit extérieur.
- Enregistrer le retour avant le départ. Un transfert a une identité et un état
persistants ; interruption, nouvelle requête ou reprise ne créent pas une
seconde salle et ne dupliquent pas l'inventaire.
- Si la destination n'est pas prête, maintenir le joueur en sécurité à la source
et permettre d'annuler. Ne pas transférer dans un chunk incomplet.
- Déconnexion avant transfert : annuler le sommeil. Déconnexion après transfert :
reprendre à la dernière position sûre sauvegardée dans les Backrooms, avec
le même retour. Un redémarrage n'impose pas un réveil dans l'Overworld.
- Lit d'origine détruit ou arrivée obstruée : proposer un retour à une position
sûre proche de l'ancrage, recherchée dans un rayon borné ; à défaut, utiliser
l'arrivée sûre de l'Overworld. Signaler ce secours en FR/EN. Ne pas recréer le
lit, modifier le terrain ni rediriger vers la salle d'un autre joueur.
- Mort : retour proposé dans l'Overworld selon cet ancrage et ce secours ;
conserver les règles Sanctuary existantes de mort, d'XP, d'inventaire et de
tombe. Une tombe éventuelle reste à son emplacement et ne révèle pas ses
coordonnées dans les interfaces joueur. Aucun système de restitution nouvelle
des objets perdus n'est ajouté par BR-01.
- Pour le premier lot, la protection de la salle signifie une arrivée sûre et
l'absence d'apparition naturelle de monstres à l'intérieur. Elle ne crée pas
implicitement de claim, de verrou de visite ou de règle d'invulnérabilité.
Les droits existants s'appliquent aux modifications ; les changements permis
aux joueurs persistent, y compris si le tableau ou la porte est retiré.
## 5. Monde partagé et génération progressive
### Hébergement proposé
Utiliser une dimension technique commune, avec l'identifiant proposé
`sanctuary:backrooms`, à vérifier libre avant enregistrement puis à conserver.
Les salles personnelles sont des emplacements dans ce monde partagé. Les trajets
du premier lot sont physiques, continus et stables ; le lit assure les transferts
vers et depuis l'Overworld.
Un **secteur** est un ensemble de salles et de circulations planifié comme une
unité. Son plan contient les emprises, niveaux, raccords aux secteurs voisins,
réservations de salles personnelles et données de génération.
### Ordre de génération
1. Réserver un secteur libre et ses raccords. Associer un instantané de ballast,
une graine dérivée, une version de générateur et une version de recettes.
2. Produire le réseau des pièces : couloirs, embranchements, boucles, impasses
lisibles, différences de hauteur et espaces que l'on aperçoit avant d'y accéder.
3. Attribuer fonctions et ambiances aux ensembles de pièces. Prévoir les
transitions et les emplacements stables des refuges personnels.
4. Construire sols, enveloppes, plafonds, supports, portes, escaliers et bassins.
Valider passage à hauteur de joueur, raccords et confinement de l'eau.
5. Appliquer les matériaux par rôle, puis le mobilier, les lumières et les repères.
6. Rendre les portions prêtes accessibles à mesure de l'exploration, en respectant
un budget borné de travail et de génération anticipée.
Les portes de liaison aux secteurs futurs sont prévues dès le plan initial.
Une nouvelle salle personnelle occupe une réservation libre ou un nouveau
secteur raccordé ; elle n'écrase pas une pièce ni une construction existante.
Le plan garantit un chemin vers le réseau commun et évite les poches isolées.
Les raccords partagés utilisent une convention déterministe conservée côté
serveur, indépendante de l'ordre de chargement des chunks. Deux joueurs qui
approchent par des côtés différents réutilisent la même réservation. Le ballast
ne doit jamais être relu en direct pour changer un raccord pendant sa construction.
La planification réserve une géométrie ; elle ne garde pas tout le monde chargé.
Bornes de secteur, anticipation, tâches par tick et file d'attente seront
configurables. Une file saturée ralentit la préparation et maintient les accès
non prêts fermés de manière sûre. Mesurer les coûts sur le serveur de test.
## 6. Architecture, ambiances et matière
Les plans varient leurs proportions et leurs connexions. Des éléments composés
à la main peuvent fournir portes, éclairages ou mobilier ; ils ne doivent pas
imposer une unique salle répétée à chaque tirage.
| Famille du premier lot | Formes et usages | Repères et transitions |
| --- | --- | --- |
| Habitation | Chambre, dortoir, salon, couloir étroit | Mobilier, changements de hauteur, ouvertures vers d'autres pièces. |
| Poolrooms | Bassins, arches, passerelles, vestiaires, douches | Rigoles et zones humides annoncent les bassins ; un chemin praticable permet de progresser. |
| Infrastructure minérale | Réserves, fondations, soutènements, galeries de maintenance | Cobble, pierre et réparations visibles derrière les enveloppes aménagées. |
| Traitement dreamcore transversal | Jardin enfermé, lumière évoquant le jour, fenêtre intérieure, volume disproportionné | Étrangeté obtenue d'abord par proportions, répétitions et vues ; aucun portail à rendu spécial requis. |
La relation au ballast agit sur les familles de volumes, les proportions de
matériaux et leurs rôles. Exemples de recettes proposées :
- Pierre/cobble : épaissir les fondations et favoriser les galeries techniques.
- Bois travaillé : favoriser cloisons, chambres, réserves et passerelles.
- Verre : favoriser serres, espaces d'observation et séparations transparentes.
- Cuivre : favoriser des équipements et architectures techniques ou hydrauliques.
Conserver des palettes par fonction : une poolroom garde son identité même si
le ballast minéral domine. Les pondérations plafonnées ou à croissance ralentie
évitent que les matériaux les plus abondants effacent toutes les autres familles.
Ces transformations de poids n'altèrent jamais les quantités du registre source.
La relation à l'action n'est utilisée que si le suivi la fournit explicitement :
du cuivre observé ne prouve pas à lui seul qu'une usine a été construite.
### Périodes et ressources
- Associer chaque secteur à une période/révision au moment de sa réservation et
conserver les données suffisantes pour reproduire ce plan. Le changement de
période influence uniquement de nouvelles réservations.
- Fournir une base architecturale ancienne pour un serveur au ballast enregistré
nul. L'identifier comme héritage fictionnel ; ne pas inventer d'activité passée.
- En cas d'indisponibilité du suivi, continuer à charger les secteurs connus et
les retours sûrs ; suspendre la réservation de nouveaux secteurs. Une panne
ne doit pas devenir silencieusement une période de ballast nul.
- Distinguer l'influence visuelle de la matière comptable récupérable. Avant de
rendre des blocs issus du ballast extractibles, appliquer le contrat amont de
débit/réservation et de reprise, sans double attribution entre secteurs.
La minabilité et les drops du décor doivent être fixés et testés avant livraison.
Aucun coffre ne copie automatiquement les objets des joueurs.
## 7. Orientation et intégration au client
- Masquer les positions numériques des surfaces fournies par Sanctuary et du
client pris en charge dans cette dimension : F3, HUD, Atlas, marqueurs,
Demeure, fiches de lieux, notifications, tombe et messages de transfert.
- Suspendre le relevé et l'affichage automatiques de la carte/mini-carte pour les
Backrooms. Préserver les cartes déjà enregistrées pour les autres dimensions.
Vérifier aussi les fonctions natives de carte qui pourraient contourner ce
parcours dans le client distribué.
- Préserver les moyens manuels existants : noms, panneaux, livres, croquis et
repères construits. Un éditeur de carte manuelle est hors de ce ticket.
- Ne pas diffuser un annuaire des salles personnelles ni leurs positions.
La découverte physique reste possible, sans autorisation du propriétaire.
- Les coordonnées restent utilisables dans des diagnostics opérateur explicites
et les preuves de test. L'absence de coordonnées est une règle d'interface et
de jeu, pas une promesse de cacher la position à un client modifié.
- Tous les nouveaux messages et libellés sont fournis en français et en anglais.
## 8. Persistance, migration et version de génération
Avant le code qui écrit des données, documenter les schémas et transitions :
- par joueur : identité, identifiant stable de salle, ancrage de retour et état
d'un éventuel transfert ;
- par secteur : identifiant/emprise, voisins et raccords, état de préparation,
graine, versions, instantané de ballast et réservations de refuges ;
- pour la reprise : étapes déjà enregistrées, réservations de matière lorsque
nécessaires, traitement d'une interruption entre planification et disponibilité.
Conserver les chunks Minecraft comme état construit et modifiable. Le plan
sert à produire les portions neuves ; il ne repeint pas les chunks sauvegardés.
Une donnée invalide est signalée et conservée, sans recréation silencieuse de
salle ou de registre vide. Une mise à jour ne réinterprète pas les secteurs
anciens avec de nouvelles recettes.
Développer d'abord sur des mondes neufs dans les dossiers ignorés. Avant toute
activation sur une sauvegarde existante, livrer un contrat d'adoption explicite :
ajout de la dimension et des registres, initialisation des liaisons aux lits,
conservation de l'Overworld, retour des joueurs présents dans les Backrooms lors
d'une désactivation et limites d'un retour de version. Une désactivation ne
supprime jamais les secteurs ni le ballast. Aucun déploiement personnel n'est
inclus dans la rédaction ou l'implémentation de ce ticket.
## 9. Étapes de réalisation du premier lot
Les étapes composent un seul parcours livrable. Les prototypes intermédiaires
restent dans les mondes de développement jusqu'à satisfaction des critères.
1. **Contrats et intégration** : vérifier la livraison ballast, fixer son
adaptateur, les schémas, la minabilité du décor et la règle du lit unique.
2. **Aller-retour** : dimension commune, deux salles distinctes, tableau et porte,
sommeil serveur, persistance et retours ordinaires/de secours.
3. **Réseau procédural** : secteur d'essai d'environ 12 à 20 pièces, au moins
une boucle et deux altitudes, habitation → poolrooms → infrastructure ;
une scène dreamcore et des repères reconnaissables. Les nombres sont des
objectifs de prototype, pas des tailles universelles du monde.
4. **Ballast et extension** : relier les recettes aux instantanés réels, comparer
plusieurs profils, prolonger vers un autre secteur et éprouver les reprises.
5. **Parcours client et livraison** : orientation manuelle, FR/EN, multijoueur,
performances, sauvegardes et preuves des critères ci-dessous.
## 10. Critères d'acceptation
Toutes les cases décrivent des vérifications futures ; aucune n'est validée par
la préparation de ce document.
- [ ] **Prérequis** : contrat/version du suivi ballast référencés ; une opération
réelle alimente un lot puis un nouveau secteur sans transaction inventée.
- [ ] **Accès** : sommeil complet individuel, de jour et de nuit, déclenchant
exactement un départ ; réveil anticipé sans départ ; temps et météo conservés.
- [ ] **Identité et visite** : A et B ont deux salles persistantes dans le même
réseau ; A rejoint celle de B à pied et y entre ; chaque lit extérieur mène
exclusivement à la salle de son joueur.
- [ ] **Retour** : A et B utilisent successivement un même lit des Backrooms,
dont celui d'une salle tierce, et rentrent chacun à leur origine. Tester lit
d'origine détruit, obstruction, remplacement et lit des Backrooms retiré
pendant le sommeil. Aucun transfert ne place le joueur dans le vide ou un mur.
- [ ] **Interruption et mort** : reconnexion, redémarrage et arrêt à chaque étape
du transfert conservent une salle et un inventaire uniques ; mort/tombe suivent
le contrat existant et le secours reste praticable.
- [ ] **Géométrie** : sur les graines `0`, `42` et `20260915`, démontrer deux
refuges raccordés, une boucle, deux altitudes, des passages praticables,
des bassins contenus et aucun raccord involontaire vers le vide.
- [ ] **Identité des lieux** : parcours client montrant habitation, poolrooms,
infrastructure en cobble et au moins une scène dreamcore ; repères suffisants
pour refaire un trajet sans coordonnées. Une validation visuelle accompagne
les contrôles géométriques.
- [ ] **Empreinte matérielle** : à graine et recettes égales, trois instantanés
contrôlés pierre/cobble, bois et verre/cuivre produisent des différences
vérifiables de matériaux/rôles tout en préservant le parcours et les ambiances.
- [ ] **Histoire conservée** : un nouvel apport affecte un nouveau secteur ;
plan, constructions, contenus et blocs déjà générés du premier restent
inchangés. Une période nulle et des données manquantes suivent deux traitements
distincts. Les éventuelles quantités extractibles ne sont attribuées qu'une fois.
- [ ] **Concurrence et reprise** : charger un plan par plusieurs ordres de chunks,
puis par deux explorateurs simultanés ; obtenir les mêmes raccords. Interrompre
la création d'un secteur et reprendre sans double réservation ni réécriture
de portions déjà disponibles aux joueurs.
- [ ] **Orientation** : aucun affichage de coordonnées ni cartographie automatique
des Backrooms dans les surfaces prises en charge ; cartes de l'Overworld
conservées, diagnostics opérateur explicites, messages et parcours FR/EN testés.
- [ ] **Charge et adoption** : file de génération bornée, arrivée sûre même en
retard de préparation, absence de blocage serveur ; fournir budget retenu,
mesures de temps de génération/tick/mémoire et configuration de la machine.
Vérifier le contrat d'adoption et le retour avant désactivation sur une copie
de développement, sans régénérer l'Overworld.
### Vérifications et preuves à produire lors de l'implémentation
- Tests purs du plan : raccords, accessibilité, recettes et reproductibilité.
- GameTests serveur ciblés : sommeil, identité, retours, persistance, fluides,
ballast et absence de doubles effets. Essais à deux clients pour le parcours
complet et ses rendus ; un test serveur seul ne valide pas le masquage client.
- `./gradlew check build`, puis `./gradlew assemblePack` si la distribution change.
- Rapports avec version Minecraft/mod/générateur, graines, instantanés de ballast,
coordonnées opérateur, configuration et captures. Conserver mondes et artefacts
dans les dossiers de développement ignorés ; résumer les preuves dans le ticket.
- À la livraison du mod, synchroniser `mod_version`, `pack_version` et
`packwiz/pack.toml` avec le prochain `beta.xxx`, conformément au
[versionnement](versioning.md). Ce document seul n'incrémente aucun binaire.
## 11. Hors périmètre et décisions de démarrage
Hors lot : système d'affinités/némésis, nouveaux pouvoirs, générateur général
d'Indoors achetables, mailbox, shop, objets perdus restitués, quêtes/boss de
Backrooms, portails à rendu transparent, géométrie qui se reboucle par
téléportation, évolution des pièces déjà construites et éditeur de cartes.
À fixer dans la première étape à partir du suivi livré : référence du prérequis,
unités et périodes du ballast, droits d'extraction/drops, dimensions des secteurs,
budgets de génération et détails de migration. Les réglages proposés de sommeil
et de secours sont à éprouver. Ces décisions ne rouvrent pas les règles d'accès,
de visite et de retour confirmées par le créateur.
## 12. Références
- [ANO-01 — doubles de Steve](steve-anomalies.md) prépare la suite : Herobrine
dans les Backrooms, mineur fantôme dans l'Overworld et les Backrooms, Steve
bugué persistant et transportable. Ces anomalies ont leurs lots propres et
ne bloquent pas la livraison du réseau BR-01. Leurs futures modifications
de blocs seront des actions de gameplay sauvegardées, jamais une régénération
implicite des secteurs existants.
- [Cosmologie : matière, espaces et mémoire](cosmologie.md).
- [Vision : dimensions et espaces](vision.md#dimensions-et-espaces).
- [Blocodex : portée des relevés disponibles](blocodex.md).
- [Temps réel : sommeil et horloges](realtime-beta037.md).
- [Règles de contribution](../CONTRIBUTING.md) et
[modèle Fonctionnalité](../.gitea/ISSUE_TEMPLATE/feature.md).
Le document conceptuel « Système des Habitants, Affinités et Anomalies » a nourri
la discussion ; ses autres mécanismes ne sont pas des dépendances de BR-01.
+654
View File
@@ -0,0 +1,654 @@
{
"ticket": "WG-12",
"version": "0.1.0-alpha.11",
"date": "2026-09-09",
"protocol": {
"machine": "Apple M1, 8 GiB RAM, macOS",
"minecraft": "26.3-pre-2",
"fabric_loader": "0.19.5",
"fabric_api": "0.160.0+26.3",
"baseline_source_commit": "a26b72f",
"production_files_changed_in_baseline": 0,
"runs_per_configuration": 1,
"world": "fresh ignored development world per run",
"workload": "289 synchronous FULL chunks in concentric rings around natural spawn, then 80 FULL chunks in an eastward corridor. Minecraft world creation timed separately from startup log.",
"scope": "Server generation up to FULL. Does not establish ticking readiness, postprocessing completion, client rendering, FPS, multiplayer capacity or a guaranteed user loading time.",
"baseline_scope_correction": "The raw alpha.10 report incorrectly says postprocessing is included; FULL alone does not guarantee this. Workload code is identical; alpha.11 corrects only that explanatory string.",
"build_time_excluded": true,
"comparison": "Only legacy20 versus legacy20 measures the algorithm gain. Grand10 changes geometry; its exploration timing cannot be used for that comparison.",
"frozen_runtime_files": 272,
"frozen_runtime_manifest_sha256": "1c2b433417a5d9e6a219e9ee19781574538d2167c774e14ed2bf254d277d4482",
"baseline_runtime_manifest_sha256": "d4860072d1896f0dfd784a5876f1253367b7818a2023f1910ba1612b6f0e7103",
"benchmark_source_sha256": "408711c97d65de63af4e0a1eac90e6edb5bf2df2b70c43772a3fdef7347d75d1"
},
"runs": {
"alpha10_legacy20": {
"version": "0.1.0-alpha.10",
"players": 20,
"seed": 0,
"spawn": [
0,
252,
0
],
"java": "25.0.3",
"processors": 8,
"max_heap_bytes": 2147483648,
"spawn_area_ms": 310664.163542,
"spawn_area_full_chunks": 289,
"spawn_area_nonempty_chunks": 289,
"rings": [
{
"elapsed_ms": 2.609,
"cumulative_chunks": 1,
"radius": 0
},
{
"elapsed_ms": 5468.709333,
"cumulative_chunks": 9,
"radius": 1
},
{
"elapsed_ms": 17601.560917,
"cumulative_chunks": 25,
"radius": 2
},
{
"elapsed_ms": 27397.566458,
"cumulative_chunks": 49,
"radius": 3
},
{
"elapsed_ms": 36562.853333,
"cumulative_chunks": 81,
"radius": 4
},
{
"elapsed_ms": 44462.775334,
"cumulative_chunks": 121,
"radius": 5
},
{
"elapsed_ms": 52423.80275,
"cumulative_chunks": 169,
"radius": 6
},
{
"elapsed_ms": 60416.705916,
"cumulative_chunks": 225,
"radius": 7
},
{
"elapsed_ms": 66303.128125,
"cumulative_chunks": 289,
"radius": 8
}
],
"spawn_area_chunk_latency_ms": {
"median": 993.3335,
"p95": 1392.158958,
"max": 2560.16575
},
"exploration_ms": 103141.834334,
"exploration_full_chunks": 80,
"exploration_steps": [
{
"elapsed_ms": 5146.88675,
"chunk_x": 9
},
{
"elapsed_ms": 5087.495583,
"chunk_x": 10
},
{
"elapsed_ms": 5229.782834,
"chunk_x": 11
},
{
"elapsed_ms": 5046.559,
"chunk_x": 12
},
{
"elapsed_ms": 4810.5415,
"chunk_x": 13
},
{
"elapsed_ms": 28755.95025,
"chunk_x": 14
},
{
"elapsed_ms": 4763.415834,
"chunk_x": 15
},
{
"elapsed_ms": 4772.209166,
"chunk_x": 16
},
{
"elapsed_ms": 4826.460208,
"chunk_x": 17
},
{
"elapsed_ms": 4857.054416,
"chunk_x": 18
},
{
"elapsed_ms": 4947.188167,
"chunk_x": 19
},
{
"elapsed_ms": 5168.714916,
"chunk_x": 20
},
{
"elapsed_ms": 4897.048167,
"chunk_x": 21
},
{
"elapsed_ms": 5286.23025,
"chunk_x": 22
},
{
"elapsed_ms": 4865.694458,
"chunk_x": 23
},
{
"elapsed_ms": 4661.793875,
"chunk_x": 24
}
],
"exploration_chunk_latency_ms": {
"median": 925.461875,
"p95": 1273.829625,
"max": 25131.068417
},
"regions_cached": 2,
"passed": true,
"world_creation_ms": 96766,
"world_creation_plus_spawn_area_ms": 407430.163542,
"raw_report_sha256": "d70c4ac49f37470d4db15b9200e26da8ac9d4d3b1b008e7ec03e67deafcc0f93",
"log_sha256": "5b1df55f7a167003c089e80fe1fb824d087c137e3662bac84af3ae0b325b8392"
},
"alpha11_legacy20": {
"version": "0.1.0-alpha.11",
"players": 20,
"seed": 0,
"spawn": [
0,
252,
0
],
"java": "25.0.3",
"processors": 8,
"max_heap_bytes": 2147483648,
"spawn_area_ms": 43647.054375,
"spawn_area_full_chunks": 289,
"spawn_area_nonempty_chunks": 289,
"rings": [
{
"cumulative_chunks": 1,
"elapsed_ms": 1.965667,
"radius": 0
},
{
"cumulative_chunks": 9,
"elapsed_ms": 870.4725,
"radius": 1
},
{
"cumulative_chunks": 25,
"elapsed_ms": 2972.902334,
"radius": 2
},
{
"cumulative_chunks": 49,
"elapsed_ms": 4480.355667,
"radius": 3
},
{
"cumulative_chunks": 81,
"elapsed_ms": 5120.230375,
"radius": 4
},
{
"cumulative_chunks": 121,
"elapsed_ms": 6290.425208,
"radius": 5
},
{
"cumulative_chunks": 169,
"elapsed_ms": 7381.384417,
"radius": 6
},
{
"cumulative_chunks": 225,
"elapsed_ms": 7839.425333,
"radius": 7
},
{
"cumulative_chunks": 289,
"elapsed_ms": 8677.269209,
"radius": 8
}
],
"spawn_area_chunk_latency_ms": {
"p95": 280.6,
"median": 135.289625,
"max": 699.612708
},
"exploration_ms": 14051.250167,
"exploration_full_chunks": 80,
"exploration_steps": [
{
"chunk_x": 9,
"elapsed_ms": 750.152875
},
{
"chunk_x": 10,
"elapsed_ms": 680.650584
},
{
"chunk_x": 11,
"elapsed_ms": 729.180958
},
{
"chunk_x": 12,
"elapsed_ms": 725.223
},
{
"chunk_x": 13,
"elapsed_ms": 540.200125
},
{
"chunk_x": 14,
"elapsed_ms": 5554.177667
},
{
"chunk_x": 15,
"elapsed_ms": 473.982208
},
{
"chunk_x": 16,
"elapsed_ms": 471.05575
},
{
"chunk_x": 17,
"elapsed_ms": 513.109667
},
{
"chunk_x": 18,
"elapsed_ms": 533.284292
},
{
"chunk_x": 19,
"elapsed_ms": 503.983917
},
{
"chunk_x": 20,
"elapsed_ms": 513.126292
},
{
"chunk_x": 21,
"elapsed_ms": 508.7555
},
{
"chunk_x": 22,
"elapsed_ms": 587.331416
},
{
"chunk_x": 23,
"elapsed_ms": 467.628834
},
{
"chunk_x": 24,
"elapsed_ms": 494.771375
}
],
"exploration_chunk_latency_ms": {
"p95": 186.482333,
"median": 103.648708,
"max": 5153.6295
},
"regions_cached": 2,
"passed": true,
"world_creation_ms": 18888,
"world_creation_plus_spawn_area_ms": 62535.054375,
"raw_report_sha256": "4799180bd61ec4ffc93d6a1a7ccb5440eb880f7dc08a345429b77db10cc17ab0",
"log_sha256": "a9347297608528e719d6780f3dd2f2588bb516e06ab771ca6da6ffdda404f7a4"
},
"alpha11_grand10": {
"version": "0.1.0-alpha.11",
"players": 10,
"seed": 0,
"spawn": [
0,
252,
0
],
"java": "25.0.3",
"processors": 8,
"max_heap_bytes": 2147483648,
"spawn_area_ms": 44291.159875,
"spawn_area_full_chunks": 289,
"spawn_area_nonempty_chunks": 289,
"rings": [
{
"radius": 0,
"cumulative_chunks": 1,
"elapsed_ms": 42.387459
},
{
"radius": 1,
"cumulative_chunks": 9,
"elapsed_ms": 1474.290584
},
{
"radius": 2,
"cumulative_chunks": 25,
"elapsed_ms": 3180.279791
},
{
"radius": 3,
"cumulative_chunks": 49,
"elapsed_ms": 4474.062208
},
{
"radius": 4,
"cumulative_chunks": 81,
"elapsed_ms": 5043.704042
},
{
"radius": 5,
"cumulative_chunks": 121,
"elapsed_ms": 6367.417708
},
{
"radius": 6,
"cumulative_chunks": 169,
"elapsed_ms": 7285.252542
},
{
"radius": 7,
"cumulative_chunks": 225,
"elapsed_ms": 7824.965875
},
{
"radius": 8,
"cumulative_chunks": 289,
"elapsed_ms": 8577.641208
}
],
"spawn_area_chunk_latency_ms": {
"max": 665.612875,
"p95": 274.9215,
"median": 136.067375
},
"exploration_ms": 7684.81575,
"exploration_full_chunks": 80,
"exploration_steps": [
{
"elapsed_ms": 739.863,
"chunk_x": 9
},
{
"elapsed_ms": 724.49625,
"chunk_x": 10
},
{
"elapsed_ms": 720.754584,
"chunk_x": 11
},
{
"elapsed_ms": 695.608958,
"chunk_x": 12
},
{
"elapsed_ms": 522.1695,
"chunk_x": 13
},
{
"elapsed_ms": 1112.798042,
"chunk_x": 14
},
{
"elapsed_ms": 430.820667,
"chunk_x": 15
},
{
"elapsed_ms": 416.082834,
"chunk_x": 16
},
{
"elapsed_ms": 400.90425,
"chunk_x": 17
},
{
"elapsed_ms": 414.387708,
"chunk_x": 18
},
{
"elapsed_ms": 394.878458,
"chunk_x": 19
},
{
"elapsed_ms": 393.643834,
"chunk_x": 20
},
{
"elapsed_ms": 391.553625,
"chunk_x": 21
},
{
"elapsed_ms": 279.306334,
"chunk_x": 22
},
{
"elapsed_ms": 25.634541,
"chunk_x": 23
},
{
"elapsed_ms": 18.210167,
"chunk_x": 24
}
],
"exploration_chunk_latency_ms": {
"max": 760.323917,
"p95": 198.353916,
"median": 85.88425
},
"regions_cached": 2,
"passed": true,
"world_creation_ms": 18376,
"world_creation_plus_spawn_area_ms": 62667.159875,
"raw_report_sha256": "5284e0ef88217f01d51f9040bf13f652de8276dc3f9844dc14569848b227d05a",
"log_sha256": "3a4c84bb6ea1614f8fc9c85f472612750149996e2f7658c83afe398b43afe5f6"
}
},
"same_geometry_reduction_percent": {
"world_creation_plus_spawn_area_ms": 84.65134396742975,
"spawn_area_ms": 85.95040577665497,
"exploration_ms": 86.37676917641545
},
"targets": {
"minimum_reduction_percent": 30,
"grand_creation_plus_spawn_area_max_ms": 120000,
"same_geometry_reduction_passed": true,
"grand_generation_proxy_passed": true
},
"density_equivalence": {
"comparison": "Float.floatToRawIntBits; no tolerance",
"reference_commit": "a26b72f",
"scope": "Real compiled scalar/bulk densities, 4 capacities x 3 seeds (5/20/100 compatibility and new10 using the same parameterized algorithm), signed coordinates, region/coast/height boundaries, context switches and concurrency; no block changes",
"reference_source_sha256": "fcc5a8a39b7c4d181d74ce4f9183a1ca93646137955ac64bab9d22e6db0752a1",
"profiles": [
{
"seed": 0,
"bitwise_comparisons": 255678,
"players": 5,
"optimized_path_supported": true,
"reference_density_digest": "28ec59cba36174fd"
},
{
"seed": 42,
"bitwise_comparisons": 255678,
"players": 5,
"optimized_path_supported": true,
"reference_density_digest": "efd1e8084800ed5c"
},
{
"seed": 8675309,
"bitwise_comparisons": 255678,
"players": 5,
"optimized_path_supported": true,
"reference_density_digest": "91bea1db755d9aca"
},
{
"seed": 0,
"bitwise_comparisons": 255678,
"players": 10,
"optimized_path_supported": true,
"reference_density_digest": "b7bab667baf73361"
},
{
"seed": 42,
"bitwise_comparisons": 255678,
"players": 10,
"optimized_path_supported": true,
"reference_density_digest": "42aeaf160360e41c"
},
{
"seed": 8675309,
"bitwise_comparisons": 255678,
"players": 10,
"optimized_path_supported": true,
"reference_density_digest": "cb85f95333e040c0"
},
{
"seed": 0,
"bitwise_comparisons": 255678,
"players": 20,
"optimized_path_supported": true,
"reference_density_digest": "175524360755dd88"
},
{
"seed": 42,
"bitwise_comparisons": 255678,
"players": 20,
"optimized_path_supported": true,
"reference_density_digest": "4cc8aec467a2d164"
},
{
"seed": 8675309,
"bitwise_comparisons": 255678,
"players": 20,
"optimized_path_supported": true,
"reference_density_digest": "5a3f16e426e5a64e"
},
{
"seed": 0,
"bitwise_comparisons": 255678,
"players": 100,
"optimized_path_supported": true,
"reference_density_digest": "83cda17336772fa7"
},
{
"seed": 42,
"bitwise_comparisons": 255678,
"players": 100,
"optimized_path_supported": true,
"reference_density_digest": "e7aa7f52022cc6aa"
},
{
"seed": 8675309,
"bitwise_comparisons": 255678,
"players": 100,
"optimized_path_supported": true,
"reference_density_digest": "de4b8f52d249a9bd"
}
],
"concurrent_workers": 3,
"concurrent_comparisons": 115668,
"passed": true,
"adversarial": {
"aligned_scalar_path_preserved": true,
"passed": true,
"bitwise_comparisons": 122528,
"concurrent_workers": 3,
"repeated_cell_corner_batches": 1
}
},
"persistence": {
"default_players": 10,
"profiles": [
{
"restored_settings": "sanctuary:population_5",
"players": 5,
"disk_round_trip": true,
"preset": "sanctuary:sanctuary_5"
},
{
"restored_settings": "sanctuary:population_10",
"players": 10,
"disk_round_trip": true,
"preset": "sanctuary:sanctuary"
},
{
"restored_settings": "sanctuary:population_20",
"players": 20,
"disk_round_trip": true,
"preset": "sanctuary:sanctuary_20"
},
{
"restored_settings": "sanctuary:population_100",
"players": 100,
"disk_round_trip": true,
"preset": "sanctuary:sanctuary_100"
}
],
"passed": true,
"visible_presets": [
"sanctuary:sanctuary_5",
"sanctuary:sanctuary"
],
"seed": 0,
"legacy_settings_preserved": "sanctuary:sanctuary_cavern",
"omitted_density_capacity_preserved": 20
},
"limits": [
"Single seed and one timed run per configuration; repeat to estimate variance.",
"A new cold region still has a synchronous planning cost; observed legacy20 maximum exploration chunk latency is about 5.15 s.",
"No personal saved world was opened or regenerated."
],
"engine_checks": {
"5": {
"mod_version": "0.1.0-alpha.11",
"seed": 0,
"settings": "sanctuary:population_5",
"inspected_full_chunks": 110,
"retained_water_blocks": 5656,
"fluid_ticks": 1800,
"tested_springs": 1,
"tested_spills": 1,
"tested_lava_falls": 1,
"postprocessing_reentry_witnesses": 3,
"passed": true,
"scope": "Selected basins, terraces, springs and ecology patches in explicit regions; no whole-island inventory or multiplayer load test",
"raw_report_sha256": "cfaa0a532b50399ab28808f51a871363b198a67d8c096ac13f7a011bd87ff9d0"
},
"10": {
"mod_version": "0.1.0-alpha.11",
"seed": 0,
"settings": "sanctuary:population_10",
"inspected_full_chunks": 125,
"retained_water_blocks": 5923,
"fluid_ticks": 1800,
"tested_springs": 1,
"tested_spills": 1,
"tested_lava_falls": 1,
"postprocessing_reentry_witnesses": 3,
"passed": true,
"scope": "Selected basins, terraces, springs and ecology patches in explicit regions; no whole-island inventory or multiplayer load test",
"raw_report_sha256": "aaed5b38821197c479a8acb7f2a201c64f290666c039d0b15047340e403e028c"
}
}
}
+314
View File
@@ -0,0 +1,314 @@
{
"version": "0.1.0-alpha.12",
"date": "2026-09-09",
"minecraft": "26.3-pre-2",
"java": 25,
"generation": 12,
"source_base_commit": "f816ffc6402fe31789f9677c2ee94328b3181329",
"scope": "Local development tests only; no personal worlds, client rendering, live player teleport or multiplayer load.",
"normalization": "world_directory fields replaced with <development_game_test_world>; all other diagnostic fields retained.",
"artifact": {
"path": "mods/sanctuary/build/libs/sanctuary-0.1.0-alpha.12.jar",
"sha256": "f2ac2462a03a39ef330cc52143f9753ac5908b606cfe1dd1388ad5caae15e6e9",
"staged_pack_jar_identical": true,
"contains_gametest_classes": false
},
"build": {
"command": "./gradlew check build assemblePack",
"passed": true,
"legacy_profile": 10,
"legacy_seed": 0,
"required_engine_tests": 12,
"fluid_ticks": 1800,
"log_sha256": "dfedc75558596ce4413bd0466ec03645b2fa6853165510e9b8db0406d0958eb8"
},
"first_process_diagnostic_sha256": "90872c801cb04e3f0c78b47e0d38a0b45dd5d3e6d1e33ccc53c4359e4b407238",
"reload_diagnostic_sha256": "1efe055e1179ce60741a0d8546618807fc136c0de77f9aff6a979cf88b2b1cdd",
"fresh_world": {
"seed": 42,
"process_id": 2892,
"generator_version": 12,
"islands": [
{
"upper_biome": "minecraft:jungle",
"climate": "tropical",
"landing": [
0,
202,
-800
],
"landing_biome": "minecraft:jungle",
"parent": "sanctuary",
"id": "alpha",
"centre": [
0,
-800
],
"diameter": 64
},
{
"upper_biome": "minecraft:desert",
"climate": "arid",
"landing": [
544,
198,
-800
],
"landing_biome": "minecraft:desert",
"parent": "alpha",
"id": "beta",
"centre": [
544,
-800
],
"diameter": 64
}
],
"scope": "Fresh laboratory world; real FULL chunks and native structure loot, asynchronous activation, branching, journal re-read and loaded void admission refusal. Journal re-read is not a process restart. The parent block witness represents a player edit; no player teleport, multiplayer or client rendering is simulated.",
"registered_command_permission_checks": true,
"parent_witness": [
-16,
248,
-16
],
"root_landing": [
-16,
242,
-16
],
"journal_reloaded_regions": 3,
"visited_void_refusal": {
"chunk": [
-50,
50
],
"reason": "Expansion intersects a loaded or unloading chunk: [-61, 39]"
},
"native_structure": {
"full_chunks": 12,
"placed_block": "Block{minecraft:barrel}[facing=south,open=false]",
"structure": "minecraft:abandoned_camp_forest",
"mode": "natural candidate accepted by production ExpansionStructures, native decoration",
"container": [
28,
247,
73
],
"loot_table": "minecraft:barrels/abandoned_camp_barrel"
},
"restart_snapshot": {
"world_directory": "<development_game_test_world>",
"gold_witness": [
544,
204,
-800
],
"journal_sha256": "d7de79838744624e98ce26997ddc1daecb7bd3334bd9bf0e1ad31aa5eb7e27c3",
"islands": [
{
"id": "sanctuary",
"parent": "sanctuary",
"direction": "north",
"climate": "temperate",
"diameter": 512,
"center_x": 0,
"center_z": 0,
"seed": 42,
"relief": "natural",
"status": "ready",
"generation": 12
},
{
"id": "alpha",
"parent": "sanctuary",
"direction": "north",
"climate": "tropical",
"diameter": 64,
"center_x": 0,
"center_z": -800,
"seed": 390175152143173586,
"relief": "natural",
"status": "ready",
"generation": 12
},
{
"id": "beta",
"parent": "alpha",
"direction": "east",
"climate": "arid",
"diameter": 64,
"center_x": 544,
"center_z": -800,
"seed": 6281303726624369227,
"relief": "natural",
"status": "ready",
"generation": 12
}
],
"generator_codec": {
"biome_source": {
"biomes": [
"minecraft:the_void",
"minecraft:forest",
"minecraft:birch_forest",
"minecraft:flower_forest",
"minecraft:plains",
"minecraft:meadow",
"minecraft:taiga",
"minecraft:snowy_taiga",
"minecraft:snowy_plains",
"minecraft:grove",
"minecraft:ice_spikes",
"minecraft:frozen_peaks",
"minecraft:old_growth_spruce_taiga",
"minecraft:dark_forest",
"minecraft:swamp",
"minecraft:pale_garden",
"minecraft:jungle",
"minecraft:sparse_jungle",
"minecraft:bamboo_jungle",
"minecraft:mangrove_swamp",
"minecraft:savanna",
"minecraft:savanna_plateau",
"minecraft:desert",
"minecraft:badlands",
"minecraft:eroded_badlands",
"minecraft:wooded_badlands",
"minecraft:windswept_hills",
"minecraft:windswept_gravelly_hills",
"minecraft:stony_peaks",
"minecraft:dappled_forest",
"minecraft:cherry_grove",
"minecraft:lush_caves",
"minecraft:dripstone_caves",
"minecraft:sulfur_caves"
]
},
"type": "sanctuary:expansion_lab"
},
"samples": [
{
"stored_biomes_sha256": "65db6d2cde63dee7b60bc74aec702aae61f558c3878b8c8efaf0cc75d6066485",
"point": [
-16,
242,
-16
],
"id": "sanctuary",
"stored_column_sha256": "a291039b2ed502c828b4f1ec97fe111f49f62e69b5589e05116d9b1931f461a4",
"resolved_biomes_sha256": "65db6d2cde63dee7b60bc74aec702aae61f558c3878b8c8efaf0cc75d6066485",
"base_column_sha256": "646af3da3a327ab15d229b7fe2c328cc10eae7fce31d6b24c60f3be643bc1095",
"base_height": 242
},
{
"stored_biomes_sha256": "dfda92ebd5677b8ea4fcd3b02ba029a898b22a8f640a71b520bab9783695eb1b",
"point": [
0,
202,
-800
],
"id": "alpha",
"stored_column_sha256": "0debd009e711898fe64573f31a77f03f03d680be7398918b126004fcee3cfb1c",
"resolved_biomes_sha256": "dfda92ebd5677b8ea4fcd3b02ba029a898b22a8f640a71b520bab9783695eb1b",
"base_column_sha256": "9269110205d64e1f72d9c44591a825d66fff3a4278fb835e5b4f2627b01a1db5",
"base_height": 202
},
{
"stored_biomes_sha256": "7233e9fb21f196866122679eec5cabf39d383b8a26fff0848ff6700d1c9fab60",
"point": [
544,
198,
-800
],
"id": "beta",
"stored_column_sha256": "73f7b445475a80b951f05d0c5fb6fd2eca2cf7519cd6ac5d64c7fe9dac53fa23",
"resolved_biomes_sha256": "7233e9fb21f196866122679eec5cabf39d383b8a26fff0848ff6700d1c9fab60",
"base_column_sha256": "4df3dd476f41a8c6b0e0273b9ebe5cbba4dec6cb22001c553c15d4f6b255c555",
"base_height": 198
}
],
"world_flushed_before_shutdown": true
},
"native_structure_starts_seen": 1,
"structure_start_chunks_inspected": 106,
"ticks": 1390,
"elapsed_ms": 43123.278916,
"passed": true
},
"reloaded_world": {
"seed": 42,
"process_id": 2975,
"scope": "A second Java process opens the same saved development chunks and expansion journal, and verifies a gold block written and flushed before the first shutdown. GameTestServer reconstructs its world settings from the preset; the prior generator codec is decoded separately here and its base columns are compared. This is not a normal-client world-selection test or a multiplayer/teleportation test.",
"previous_process_id": 2892,
"world_directory": "<development_game_test_world>",
"gold_witness": [
544,
204,
-800
],
"samples": [
{
"point": [
-16,
242,
-16
],
"id": "sanctuary",
"stored_column_sha256": "a291039b2ed502c828b4f1ec97fe111f49f62e69b5589e05116d9b1931f461a4",
"resolved_biomes_sha256": "65db6d2cde63dee7b60bc74aec702aae61f558c3878b8c8efaf0cc75d6066485",
"base_column_sha256": "646af3da3a327ab15d229b7fe2c328cc10eae7fce31d6b24c60f3be643bc1095",
"base_height": 242,
"stored_biomes_sha256": "65db6d2cde63dee7b60bc74aec702aae61f558c3878b8c8efaf0cc75d6066485"
},
{
"point": [
0,
202,
-800
],
"id": "alpha",
"stored_column_sha256": "0debd009e711898fe64573f31a77f03f03d680be7398918b126004fcee3cfb1c",
"resolved_biomes_sha256": "dfda92ebd5677b8ea4fcd3b02ba029a898b22a8f640a71b520bab9783695eb1b",
"base_column_sha256": "9269110205d64e1f72d9c44591a825d66fff3a4278fb835e5b4f2627b01a1db5",
"base_height": 202,
"stored_biomes_sha256": "dfda92ebd5677b8ea4fcd3b02ba029a898b22a8f640a71b520bab9783695eb1b"
},
{
"point": [
544,
198,
-800
],
"id": "beta",
"stored_column_sha256": "73f7b445475a80b951f05d0c5fb6fd2eca2cf7519cd6ac5d64c7fe9dac53fa23",
"resolved_biomes_sha256": "7233e9fb21f196866122679eec5cabf39d383b8a26fff0848ff6700d1c9fab60",
"base_column_sha256": "4df3dd476f41a8c6b0e0273b9ebe5cbba4dec6cb22001c553c15d4f6b255c555",
"base_height": 198,
"stored_biomes_sha256": "7233e9fb21f196866122679eec5cabf39d383b8a26fff0848ff6700d1c9fab60"
}
],
"regions": 3,
"native_container": [
28,
247,
73
],
"saved_generator_codec_decoded": true,
"passed": true
},
"earlier_seed_0_attempt": {
"scope": "Earlier development run before final cache and error-message fixes. Expansion phases completed; positive loot witness failed.",
"native_candidate_sites": 11,
"no_surface": 9,
"insufficient_foundation": 2,
"accepted_structures": 0,
"structure_proof_passed": false
},
"unverified": [
"Forced crash during chunk preparation",
"Normal client world selection and rendering",
"Real player teleports and multiplayer",
"Visual quality of every climate/relief and 128/256/512 formats",
"Every village and temple variant"
]
}
+408
View File
@@ -0,0 +1,408 @@
{
"version": "0.1.0-alpha.12.1",
"date": "2026-09-09",
"minecraft": "26.3-pre-2",
"java": 25,
"generation": 12,
"journal_schema": 1,
"base_commit": "40a86588b5f83fbc7bd2728eb9b439baa1fc9ba5",
"scope": "Development-world engine tests; no personal world, live player teleportation or client rendering. Process timings are not performance benchmarks.",
"normalization": "world_directory fields replaced with <development_game_test_world>; other diagnostic fields unchanged.",
"build": {
"command": "./gradlew check build assemblePack",
"passed": true,
"required_historical_engine_tests": 12,
"seed": 0,
"profile": 10,
"log_sha256": "72f2173023e5407391d7e0e528012fcda9a314c981acfea462918c36ffa7bf90"
},
"artifact": {
"path": "mods/sanctuary/build/libs/sanctuary-0.1.0-alpha.12.1.jar",
"sha256": "c9df4da956cfa54581b3fde21de006bf8ac3ec025b8dd0daa5d060bcb70aabd4"
},
"first_process_diagnostic_sha256": "3ef35faf09130409135879ad3a4be4ceba4f5644a57ae9cdcec4cd4d6e84c06a",
"reload_diagnostic_sha256": "401f2e6739de9efd3668aa27c5ef45a6e81e1acfde44442bf101e5ac6397074a",
"fresh_world": {
"seed": 42,
"process_id": 5743,
"generator_version": 12,
"islands": [
{
"centre": [
0,
-1600
],
"diameter": 64,
"upper_biome": "minecraft:jungle",
"climate": "tropical",
"landing": [
-4,
171,
-1604
],
"landing_biome": "minecraft:jungle",
"parent": "sanctuary",
"id": "alpha"
},
{
"centre": [
2048,
-1600
],
"diameter": 64,
"upper_biome": "minecraft:desert",
"climate": "arid",
"landing": [
2048,
198,
-1600
],
"landing_biome": "minecraft:desert",
"parent": "alpha",
"id": "beta"
}
],
"scope": "Fresh laboratory world; real FULL chunks and native structure loot, asynchronous activation, branching, journal re-read and loaded void admission refusal. Journal re-read is not a process restart. The parent block witness represents a player edit; no player teleport, multiplayer or client rendering is simulated.",
"registered_command_permission_checks": true,
"parent_witness": [
-16,
248,
-16
],
"root_landing": [
-16,
242,
-16
],
"initial_occupied_directions": 8,
"journal_reloaded_regions": 3,
"native_structure": {
"container": [
28,
247,
73
],
"loot_table": "minecraft:barrels/abandoned_camp_barrel",
"full_chunks": 12,
"placed_block": "Block{minecraft:barrel}[facing=south,open=false]",
"structure": "minecraft:abandoned_camp_forest",
"mode": "natural candidate accepted by production ExpansionStructures, native decoration"
},
"restart_snapshot": {
"world_directory": "<development_game_test_world>",
"gold_witness": [
2048,
204,
-1600
],
"journal_sha256": "21136a5e8f1857b10ef5673281c8a3a4568ae032641995c206ed2031e112aa5b",
"islands": [
{
"id": "sanctuary",
"parent": "sanctuary",
"direction": "north",
"climate": "temperate",
"diameter": 512,
"center_x": 0,
"center_z": 0,
"seed": 42,
"relief": "natural",
"status": "ready",
"generation": 12
},
{
"id": "alpha",
"parent": "sanctuary",
"direction": "north",
"climate": "tropical",
"diameter": 64,
"center_x": 0,
"center_z": -1600,
"seed": 390175152143173586,
"relief": "natural",
"status": "ready",
"generation": 12
},
{
"id": "beta",
"parent": "alpha",
"direction": "east",
"climate": "arid",
"diameter": 64,
"center_x": 2048,
"center_z": -1600,
"seed": 6281303726624369227,
"relief": "natural",
"status": "ready",
"generation": 12
}
],
"generator_codec": {
"biome_source": {
"biomes": [
"minecraft:the_void",
"minecraft:forest",
"minecraft:birch_forest",
"minecraft:flower_forest",
"minecraft:plains",
"minecraft:meadow",
"minecraft:taiga",
"minecraft:snowy_taiga",
"minecraft:snowy_plains",
"minecraft:grove",
"minecraft:ice_spikes",
"minecraft:frozen_peaks",
"minecraft:old_growth_spruce_taiga",
"minecraft:dark_forest",
"minecraft:swamp",
"minecraft:pale_garden",
"minecraft:jungle",
"minecraft:sparse_jungle",
"minecraft:bamboo_jungle",
"minecraft:mangrove_swamp",
"minecraft:savanna",
"minecraft:savanna_plateau",
"minecraft:desert",
"minecraft:badlands",
"minecraft:eroded_badlands",
"minecraft:wooded_badlands",
"minecraft:windswept_hills",
"minecraft:windswept_gravelly_hills",
"minecraft:stony_peaks",
"minecraft:dappled_forest",
"minecraft:cherry_grove",
"minecraft:lush_caves",
"minecraft:dripstone_caves",
"minecraft:sulfur_caves"
]
},
"type": "sanctuary:expansion_lab"
},
"blocked_sites": [
{
"id": "blocked_north",
"parent": "sanctuary",
"direction": "north",
"climate": "boreal",
"diameter": 64,
"center_x": 0,
"center_z": -800,
"seed": 6170446579001265223,
"relief": "natural",
"status": "reserved",
"generation": 12
},
{
"id": "blocked_northeast",
"parent": "sanctuary",
"direction": "northeast",
"climate": "boreal",
"diameter": 64,
"center_x": 800,
"center_z": -800,
"seed": 2312608842580142629,
"relief": "natural",
"status": "reserved",
"generation": 12
},
{
"id": "blocked_east",
"parent": "sanctuary",
"direction": "east",
"climate": "boreal",
"diameter": 64,
"center_x": 800,
"center_z": 0,
"seed": -5785143794938635053,
"relief": "natural",
"status": "reserved",
"generation": 12
},
{
"id": "blocked_southeast",
"parent": "sanctuary",
"direction": "southeast",
"climate": "boreal",
"diameter": 64,
"center_x": 800,
"center_z": 800,
"seed": 6543995692374257629,
"relief": "natural",
"status": "reserved",
"generation": 12
},
{
"id": "blocked_south",
"parent": "sanctuary",
"direction": "south",
"climate": "boreal",
"diameter": 64,
"center_x": 0,
"center_z": 800,
"seed": 9109857537375437182,
"relief": "natural",
"status": "reserved",
"generation": 12
},
{
"id": "blocked_southwest",
"parent": "sanctuary",
"direction": "southwest",
"climate": "boreal",
"diameter": 64,
"center_x": -800,
"center_z": 800,
"seed": 7977138842745944844,
"relief": "natural",
"status": "reserved",
"generation": 12
},
{
"id": "blocked_west",
"parent": "sanctuary",
"direction": "west",
"climate": "boreal",
"diameter": 64,
"center_x": -800,
"center_z": 0,
"seed": 8731833603567083481,
"relief": "natural",
"status": "reserved",
"generation": 12
},
{
"id": "blocked_northwest",
"parent": "sanctuary",
"direction": "northwest",
"climate": "boreal",
"diameter": 64,
"center_x": -800,
"center_z": -800,
"seed": 6470159394492078415,
"relief": "natural",
"status": "reserved",
"generation": 12
}
],
"samples": [
{
"resolved_biomes_sha256": "65db6d2cde63dee7b60bc74aec702aae61f558c3878b8c8efaf0cc75d6066485",
"base_column_sha256": "646af3da3a327ab15d229b7fe2c328cc10eae7fce31d6b24c60f3be643bc1095",
"base_height": 242,
"stored_biomes_sha256": "65db6d2cde63dee7b60bc74aec702aae61f558c3878b8c8efaf0cc75d6066485",
"point": [
-16,
242,
-16
],
"id": "sanctuary",
"stored_column_sha256": "a291039b2ed502c828b4f1ec97fe111f49f62e69b5589e05116d9b1931f461a4"
},
{
"resolved_biomes_sha256": "dfda92ebd5677b8ea4fcd3b02ba029a898b22a8f640a71b520bab9783695eb1b",
"base_column_sha256": "4ec4238d357426e34a1decfd817fc96c6b596758e98ffc1d98906a1db8d5b707",
"base_height": 204,
"stored_biomes_sha256": "dfda92ebd5677b8ea4fcd3b02ba029a898b22a8f640a71b520bab9783695eb1b",
"point": [
-4,
171,
-1604
],
"id": "alpha",
"stored_column_sha256": "9866d275b53719e434d20996e2c061f4342e431c41d671216781d1f00c204ff1"
},
{
"resolved_biomes_sha256": "7233e9fb21f196866122679eec5cabf39d383b8a26fff0848ff6700d1c9fab60",
"base_column_sha256": "4df3dd476f41a8c6b0e0273b9ebe5cbba4dec6cb22001c553c15d4f6b255c555",
"base_height": 198,
"stored_biomes_sha256": "7233e9fb21f196866122679eec5cabf39d383b8a26fff0848ff6700d1c9fab60",
"point": [
2048,
198,
-1600
],
"id": "beta",
"stored_column_sha256": "246bc9b1827effb58159dbc540c655f2d218079a49263d19ac786cf116557093"
}
],
"world_flushed_before_shutdown": true
},
"native_structure_starts_seen": 1,
"structure_start_chunks_inspected": 106,
"ticks": 1470,
"elapsed_ms": 41563.165541,
"passed": true
},
"reloaded_world": {
"seed": 42,
"process_id": 5830,
"scope": "A second Java process opens the same saved development chunks and expansion journal, and verifies a gold block written and flushed before the first shutdown. GameTestServer reconstructs its world settings from the preset; the prior generator codec is decoded separately here and its base columns are compared. This is not a normal-client world-selection test or a multiplayer/teleportation test.",
"saved_only_collision_refusals": 8,
"previous_process_id": 5743,
"world_directory": "<development_game_test_world>",
"gold_witness": [
2048,
204,
-1600
],
"samples": [
{
"stored_biomes_sha256": "65db6d2cde63dee7b60bc74aec702aae61f558c3878b8c8efaf0cc75d6066485",
"point": [
-16,
242,
-16
],
"id": "sanctuary",
"stored_column_sha256": "a291039b2ed502c828b4f1ec97fe111f49f62e69b5589e05116d9b1931f461a4",
"resolved_biomes_sha256": "65db6d2cde63dee7b60bc74aec702aae61f558c3878b8c8efaf0cc75d6066485",
"base_column_sha256": "646af3da3a327ab15d229b7fe2c328cc10eae7fce31d6b24c60f3be643bc1095",
"base_height": 242
},
{
"stored_biomes_sha256": "dfda92ebd5677b8ea4fcd3b02ba029a898b22a8f640a71b520bab9783695eb1b",
"point": [
-4,
171,
-1604
],
"id": "alpha",
"stored_column_sha256": "9866d275b53719e434d20996e2c061f4342e431c41d671216781d1f00c204ff1",
"resolved_biomes_sha256": "dfda92ebd5677b8ea4fcd3b02ba029a898b22a8f640a71b520bab9783695eb1b",
"base_column_sha256": "4ec4238d357426e34a1decfd817fc96c6b596758e98ffc1d98906a1db8d5b707",
"base_height": 204
},
{
"stored_biomes_sha256": "7233e9fb21f196866122679eec5cabf39d383b8a26fff0848ff6700d1c9fab60",
"point": [
2048,
198,
-1600
],
"id": "beta",
"stored_column_sha256": "246bc9b1827effb58159dbc540c655f2d218079a49263d19ac786cf116557093",
"resolved_biomes_sha256": "7233e9fb21f196866122679eec5cabf39d383b8a26fff0848ff6700d1c9fab60",
"base_column_sha256": "4df3dd476f41a8c6b0e0273b9ebe5cbba4dec6cb22001c553c15d4f6b255c555",
"base_height": 198
}
],
"regions": 3,
"native_container": [
28,
247,
73
],
"saved_generator_codec_decoded": true,
"after_reload_expansion": [
0,
1600
],
"after_reload_landing": [
-4,
153,
1596
],
"final_regions": 4,
"passed": true
}
}
File diff suppressed because it is too large Load Diff
+115
View File
@@ -0,0 +1,115 @@
{
"version": "0.1.0-alpha.13.1",
"date": "2026-09-09",
"minecraft": "26.3-pre-2",
"java": 25,
"host_os": "macOS",
"windows_native_tested": false,
"windows_policy_tested_by_injection": true,
"journal_contracts": [
"Windows policy skips only directory channel",
"file force and atomic replacement and strict read-back remain required",
"supported directory AccessDenied propagates after replacement",
"failed session refuses further writes",
"verified reload recovers persisted reservation",
"post-replacement corruption fails closed"
],
"jar_sha256": "b340dfc58f3d2d1a2a375dc527ac6721c61430600622046db26228e0da46061b",
"logs": {
"journal-smoke": {
"path": "build/alpha131-journal-smoke.log",
"sha256": "c02e94713cf3f9a3c76674700cc5c800aecd84b213b2be9ed53629f8eb9cd3d0",
"passed": true,
"required_game_tests": null
},
"check": {
"path": "build/alpha131-check.log",
"sha256": "68f6cb97e2f80669d39e37623076229e030a0d9826c13e9420f51f6ba23885bd",
"passed": true,
"required_game_tests": 8
},
"expansion-create": {
"path": "build/alpha131-expansion-create.log",
"sha256": "61fa4513aef71290a1419c3425a329047c8fe623a561544c6a8d916fe50e226c",
"passed": true,
"required_game_tests": 2
},
"expansion-reload": {
"path": "build/alpha131-expansion-reload.log",
"sha256": "44fafb4636ff90707a068f325a245dbf9820ccb1bdf785c912f7e636fe7cfa43",
"passed": true,
"required_game_tests": 2
}
},
"binary_comparison": {
"base_version": "0.1.0-alpha.13",
"version": "0.1.0-alpha.13.1",
"added": [
"fr/koka/sanctuary/expansion/ExpansionJournal$DirectorySync.class"
],
"removed": [],
"changed": [
"fabric.mod.json",
"fr/koka/sanctuary/expansion/ExpansionJournal$1.class",
"fr/koka/sanctuary/expansion/ExpansionJournal.class"
],
"synthetic_switch_instructions_identical": true,
"all_other_entries_identical": true
},
"expansion": {
"seed": 42,
"initial_diameter": 724,
"generation": 13,
"creation_process": 13148,
"reload_process": 13279,
"creation_passed": true,
"reload_passed": true,
"creation_islands": [
{
"landing_biome": "minecraft:jungle",
"landing": [
0,
202,
-1792
],
"climate": "tropical",
"upper_biome": "minecraft:jungle",
"diameter": 64,
"centre": [
0,
-1792
],
"id": "alpha",
"parent": "sanctuary"
},
{
"landing_biome": "minecraft:desert",
"landing": [
2048,
198,
-1792
],
"climate": "arid",
"upper_biome": "minecraft:desert",
"diameter": 64,
"centre": [
2048,
-1792
],
"id": "beta",
"parent": "alpha"
}
],
"reloaded_regions": 3,
"saved_generator_codec_decoded": true,
"after_reload_expansion": [
0,
1792
],
"final_regions": 4,
"native_structure_status": "not_observed_after_complete_scan",
"native_structure_witness_required": false,
"limitation": "Optional native camp witness absent after complete search on seed 42, as in alpha.13; no new structures claim."
},
"scope": "No generation or journal schema change. Test worlds only; no personal world opened or regenerated. Windows native runtime and power-loss durability not tested."
}
+95
View File
@@ -0,0 +1,95 @@
# UI-01 — cadre natif du Blocodex et seuil de sprint
Demande du 13 septembre 2026, branche `codex/blocodex-layout-beta004`.
Livraison locale d'essai : `beta.004`, après l'export immuable de beta.003.
## Résultat attendu
Le titre Blocodex et les onglets restent en haut de l'écran, comme les menus
Minecraft. Le bouton natif **Done / Terminé** reste centré en bas. Le corps
utilise la largeur et la hauteur disponibles à l'échelle de GUI choisie.
Ordre : **Discovery, Progression, Story, Inhabitant** ; traductions françaises
**Découvertes, Progression, Histoire, Habitant**. Inhabitant conserve la fiche
comme quatrième onglet. Discovery ouvre les connaissances de blocs existantes.
La navigation garde le même cadre et Done revient à l'écran qui a ouvert le
Blocodex, sans empiler les onglets comme des sous-menus.
Compétences à gauche, aptitudes défilantes à droite. Les six compétences
restent visibles ; Minage, Construction et Inventaire restent « À venir ».
La fiche et l'histoire doivent rester entièrement lisibles par défilement,
sans couper la biographie ni les libellés des événements.
Les six PNG 9×9 fournis le 13 septembre sont utilisés sans modification :
heart → Vie, hunger → Faim, mining → Minage, building → Construction,
breathing → Souffle, inventory → Inventaire. La taille suit l'échelle entière
du GUI ; une infobulle donne le nom de chaque compétence. À l'échelle minimale,
la colonne gauche dispose de plus de place pour conserver icône et libellé.
## Périmètre et validation
Le retour du créateur ajoute la correction de la faim : beta.003 autorisait
le sprint avec trois icônes pleines à cause d'un seuil relatif à la capacité.
beta.004 restaure le seuil vanilla **strictement supérieur à 6 points**.
Acheter le premier rang de Faim augmente la capacité mais ne remplit pas la
barre ; manger au-delà de trois icônes permet ensuite de courir. Le serveur
refuse un démarrage invalide et arrête un sprint quand la faim redescend à 6.
Les exceptions vanilla du vol créatif et des montures sont conservées.
Aucun prix, identifiant de sauvegarde ou terrain ne change. Les mondes et
profils beta.003 restent lisibles sans migration. Aucun déploiement personnel.
Vérifier en client natif : les quatre onglets, titre et Done ancrés, navigation
par clavier et souris, fermeture vers le jeu et vers Échap, défilement,
recherche et pagination de Discovery, tailles et échelles GUI natives.
Vérifier le seuil de sprint avant/après le premier achat de Faim, la baisse
de nourriture, la prédiction d'alimentation et l'exception créative.
Exécuter `check build` avec les GameTests de progression ciblés, puis assembler
et vérifier le MRpack beta.004.
## Vérifications effectuées
Sur macOS / Java 25, Minecraft `26.3-pre-2`, Fabric Loader `0.19.5`, Fabric API
`0.160.0+26.3`, exclusivement dans les dossiers de développement ignorés :
- `./gradlew check build -PsanctuaryFocusedTests=progression` réussit en
**4 min 8 s**. Les contrôles purs passent ainsi que **5/5 tests natifs**
exécutés par le serveur ciblé. Le scénario des capacités vérifie les seuils
de faim 6/7, l'achat qui ne nourrit pas, l'arrêt d'un sprint après baisse de
faim et l'exception du vol créatif. Les achats, respawn, données, noms et
position assise restent vérifiés par les scénarios de progression.
- Le parcours client final passe les quatre onglets dans huit
configurations de fenêtre/échelle : fenêtres 854×480 et 960×720, options
GUI 1, 2, 3 et automatique. Les dimensions logiques obtenues vont de
**320×240 à 960×720**. Titre, onglets ordonnés et Done ancrés sont contrôlés,
ainsi que recherche et pagination sur le vrai catalogue serveur,
navigation clavier et retour vers le jeu ou le menu Échap. Les six icônes
sont présentes en 9×9 dans chaque configuration.
- `./gradlew :sanctuary:runClientGameTest -PsanctuaryClientTests=true
-PsanctuaryProgressionClientTests=true` réussit en **1 min 37 s** sur le code
final : seuil client et prédiction d'alimentation, achats, mort et
redémarrage, navigation des quatre onglets. Les captures françaises au GUI
minimal et la progression à grande taille ont été inspectées : les icônes
sont nettes, associées aux bonnes compétences, sans chevauchement des libellés.
- `./gradlew assemblePack -x check` réussit après les contrôles précédents,
sans les relancer pendant l'assemblage. L'export packwiz est vérifié : CRC
ZIP, versions interne/externe, JAR embarqué identique au build, cadre et
mixin de sprint présents, ressources JSON et clés FR/EN, empreinte Fabric
API, index packwiz, six PNG identiques aux originaux et empreinte beta.003
antérieure conservée.
## Export local
**[Sanctuary-beta.004.mrpack](../build/Sanctuary-beta.004.mrpack)**,
2 214 350 octets. Minecraft et les dépendances restent inchangés.
La sauvegarde beta.003 peut être conservée ; un nouveau monde n'est pas requis.
SHA-256 MRpack : `aee4fdebd48d6719f85d2477fbefe90e12ae38313cc107615fa6105c0c57d475`.
SHA-256 JAR : `3a8c26105121340a41644c817533bff59f519d7f02837efe570511568eba98a6`.
Reçu : `build/blocodex004-artifact.json`. Aucun canal public ou installation
Prism personnelle n'est modifié.
Logs : `build/beta004-check-build.log`, `build/beta004-assemble-pack.log` et
`build/beta004-client-final.log`. Captures finales : `build/beta004-preview/`.
Les deux assertions worldgen historiques
signalées en beta.003 ne font pas partie de la sélection native de ce ticket
et ne sont pas présentées comme corrigées. Aucun essai Windows n'est revendiqué.
+175
View File
@@ -0,0 +1,175 @@
# Blocodex — navigation, découvertes et vitrine de l'habitant
Discussion du 13 septembre 2026, après l'essai de beta.004.
Branche de conception : `codex/blocodex-navigation`.
**Cadrage uniquement : les comportements ci-dessous ne sont pas encore livrés.**
Le pack beta.004 reste inchangé ; cette note ne modifie aucune sauvegarde.
## Décisions exprimées par le créateur
- Conserver le rendu Minecraft, le titre en haut et le bouton Terminé en bas.
- Réunir statistiques, advancements, carte, descriptions et constructions
dans la navigation du Blocodex.
- Cacher les entrées non découvertes aux joueurs ; permettre leur inspection
aux opérateurs. Distinguer explicitement les essais joueur et opérateur.
- Retirer S'asseoir des aptitudes et du passeport. La faculté de s'asseoir
reste disponible dès le début ; seul son emplacement dans ces menus change.
- Faire du passeport une fiche dont on peut être fier : exploits accomplis,
constellation favorite, type de créature favori.
- Un favori doit être découvert. Le type de créature favori peut changer une
fois toutes les **24 heures réelles** et donne une influence légère, notamment sur l'apprivoisement
et le butin. Le choix quotidien de différents types est volontairement permis.
- Intégrer les plans de construction avec Litematica.
- Le créateur valide la maquette comme référence à conserver et réutiliser
pour le site, avec le fonds d'images et de documents jusqu'à alpha.30.7.
- Priorité suivante : carte native Sanctuary inspirée de Xaero, puis Demeure,
factions et claims, New Game Plus et prestiges. Lexploration précède le
déblocage de Grande carte. Voir [MAP-01](atlas-beta005.md).
## Organisation proposée
Quatre rubriques principales stables, puis une navigation locale. L'accès à
une fonction est retrouvé par sa place et son nom, quelle que soit la touche
qui a ouvert le Blocodex. À petite échelle, les sous-rubriques passent sur
plusieurs lignes ; le corps défile sans déplacer l'en-tête ni le pied de page.
| Rubrique FR / EN | Sous-rubriques proposées | Rôle |
| --- | --- | --- |
| Découvertes / Discovery | Blocs, Objets, Créatures, Recettes | Ce que je connais, avec description et actions contextuelles. |
| Progression / Progression | Capacités, Exploits, Statistiques | Compétences à gauche et aptitudes à droite ; advancements Minecraft en priorité, accomplissements Sanctuary séparés ; compteurs vanilla. |
| Monde / World | Atlas, Constructions, Histoire | Cartes et marqueurs ; plans et matériaux ; événements, Gazette, archives et liens avec le Galactium lorsqu'ils seront disponibles. |
| Habitant / Inhabitant | Passeport et vitrine sur la même page | Identité, exploits épinglés, constellation favorite et créature favorite. |
La maquette approuvée utilise **Monde** à la place de Story pour accueillir
la carte et les constructions en plus de l'histoire. La référence archivée
est dans [archives/web](../archives/web/README.md) ; son statut reste une
conception validée, sans implémentation supplémentaire dans beta.004.
Les boutons Statistiques et Advancements peuvent d'abord ouvrir les écrans
natifs depuis Progression et revenir au Blocodex. Il n'est pas nécessaire de
réécrire leurs données ou leur rendu pour unifier l'accès. Le cadre reste
identique pour les pages Sanctuary ; les écrans communautaires peuvent garder
leur présentation avec un retour au bon écran parent.
L'item description devient le contenu de la fiche d'un objet découvert,
pas une rubrique de plus. Depuis une recette : ouvrir l'objet connu ; depuis
un exploit accompli : l'épingler dans le passeport ; depuis un favori : ouvrir
sa fiche ; depuis un plan : consulter les matériaux connus.
## Découvertes et droit de fabrication
Le socle actuel ne suit que les blocs. Il transmet leur catalogue complet,
et affiche aussi les noms inconnus : voir `BlockKnowledgeNetworking` et
`SanctuaryBlocodexScreen`. Les objets indépendants et créatures exigent un
contrat de découverte supplémentaire avant leur intégration réelle.
Pour la nouvelle vue joueur, une entrée inconnue ne produit aucune ligne,
silhouette, nom, description, résultat de recherche ou liste de favoris.
Afficher le nombre découvert, sans total de registre révélant les manques.
Les éventuelles pistes viendront de quêtes ou conversations, sans exposer
automatiquement le catalogue secret.
Filtrer la réponse Sanctuary côté serveur et les vues côté client. Une
navigation depuis une recette, un plan ou une recherche ne doit pas révéler
indirectement les noms et descriptions masqués. Ne pas considérer le registre
Minecraft, nécessaire au client, comme un secret cryptographiquement caché.
Conserver trois décisions distinctes : découverte de l'objet, accès à
l'outil de consultation des recettes, révélation d'une recette particulière.
**La fabrication manuelle reste libre**, même si la recette n'est pas révélée.
Les écrans vanilla conservent leurs règles de visibilité d'advancements ; on
ne cache pas un objectif Minecraft normal simplement parce qu'il est inachevé.
## Opérateur et essais
En solo, Autoriser les commandes permet d'accéder aux outils opérateur selon
les permissions réellement accordées. En multijoueur, le serveur décide des
droits du joueur ; le mode créatif seul n'est pas une preuve d'autorisation.
Utiliser le niveau des commandes Sanctuary existantes comme référence.
Un opérateur peut ouvrir une **Vue opérateur** explicitement marquée, avec
catalogue complet et états de découverte. La vue joueur reste disponible
pour tester le parcours ordinaire. Inspecter un contenu ne le marque pas
découvert et n'accorde aucun exploit, XP, favori ou aptitude.
La vue joueur d'un opérateur sert à vérifier l'affichage. Elle ne transforme
pas ses permissions : les tests d'autorité exigent aussi un vrai joueur sans
droits. Séparer les actions de diagnostic des actions qui modifient l'état.
Toute révocation de droits invalide la vue opérateur et son cache.
Matrice minimale du futur ticket :
- Solo sans commandes et client non-opérateur : inconnus absents, recherches
et chemins indirects filtrés, aucun accès aux outils opérateur.
- Solo avec commandes et opérateur serveur : inspection complète possible,
marquée comme telle ; aucune découverte enregistrée par cette inspection.
- Opérateur en vue joueur : mêmes lignes visibles que selon ses découvertes.
- Retrait des droits avec une page ouverte : retour à la vue autorisée.
- Découverte réelle, mort et reconnexion : mise à jour puis conservation.
- Carte verrouillée : raccourcis, menus et autres points d'entrée respectent
le même droit ; minimap, grande carte et marqueurs restent trois aptitudes.
## Passeport et affinité
Proposition : trois emplacements d'exploits Minecraft déjà obtenus, une
constellation connue et un type de créature découvert. Le nombre de trophées
et le moyen de partager le passeport restent à confirmer. Les identifiants
référencent les sources de vérité ; épingler n'accorde pas l'accomplissement.
La constellation favorite nécessite le futur système du ciel : aucune liste
fictive ne doit devenir un catalogue réel dans le mod.
Pour la créature, le créateur confirme un délai de **24 heures réelles depuis le dernier
changement**, calculé côté serveur et conservé après mort, déconnexion et
redémarrage. Il ne s'agit pas d'une remise à zéro à minuit.
Seul le favori courant donne un léger bonus, sans cumul permanent des anciens
choix. Les animaux déjà apprivoisés restent apprivoisés. Ne pas inventer
l'apprivoisement d'une espèce qui n'a pas cette mécanique : chaque type doit
avoir un effet adapté ou ne recevoir aucun effet mécanique.
Restent à régler avant le code : coefficient, types éligibles, variante ou
type entier, attribution du butin en coopération, et portée du bonus de butin
(mort de l'animal, productions comme laine/œufs, ou les deux). Un bonus à la
mort encourage à chasser son favori ; un bonus aux productions encourage à
s'en occuper. Le profil peut rester discret sans afficher un pourcentage.
Le contrat de persistance des favoris doit être écrit avant d'ajouter des
données aux habitants. Préférer un ajout versionné avec absence interprétée
comme aucun favori, sans réécriture silencieuse des profils beta.003/004.
## Carte et constructions
Sanctuary développe désormais sa cartographie native ; le partage futur
des découvertes reste de joueur à joueur. Litematica conserve la gestion de schémas, les projections et les
listes de matériaux : [documentation de l'auteur](https://github.com/maruohon/litematica/wiki/Frequently-Asked-Questions).
Sanctuary fournit le point d'entrée, les droits et les liens vers ses données.
Un plan reçu ne constitue pas automatiquement une découverte de ses matériaux.
Préciser le filtrage de la projection et de la liste avant l'intégration pour
éviter de révéler des matériaux inconnus par ces écrans.
Aucune compatibilité Minecraft 26.3-pre-2 de Xaero, JEI ou Litematica n'est
établie par cette note, et aucun de ces mods n'est ajouté au pack. Vérifier
version exacte, dépendances, API et distribution au ticket de chaque adaptateur.
Le collage créatif d'un schéma ne doit pas devenir une fonction de construction
accessible par la seule découverte d'un plan.
## Découpage proposé
L'ordre historique était carte native, puis Demeure, factions/claims,
New Game Plus et prestiges. Après beta.006, le créateur demande la carte
immersive et l'achèvement des six compétences avant le New Game+ ; les factions
sont conçues avec le cycle. Les [prochains tickets](prochains-tickets.md) font
foi pour cet ordre actualisé. Les lots d'interface ci-dessous restent identifiés.
1. **UI-02** : retirer S'asseoir de ces deux pages, filtrer le catalogue actuel
selon les droits et découvertes, ajouter les accès natifs Statistiques et
Advancements. Tests joueur/opérateur et retour des écrans. Aucun favori,
nouveau format de sauvegarde ou mod communautaire nécessaire.
2. **KNOW-02 / PROFILE-02** : découverte des objets et créatures, épinglage
des exploits et contrat des favoris. Effets d'affinité dans un lot séparé
une fois les règles chiffrées arrêtées ; le délai de 24 heures est confirmé.
3. **MAP-01 / CONNECT-01** : carte native, puis adaptateurs recettes et plans sur des versions
vérifiées ; réutiliser les mêmes contrôles de découverte et d'aptitudes.
La maquette de discussion illustre la navigation avec des données fictives.
Elle ne démontre ni l'intégration des mods ni l'application des permissions.
+255
View File
@@ -0,0 +1,255 @@
# Blocodex natif — connaissances, matière et stocks
Ticket META-01, branche `codex/blocodex-natif`, cible Minecraft **26.3-pre-2**.
Le Blocodex appartient au mod Sanctuary. Il est disponible sans appareil,
recette ni déblocage. La mémoire personnelle, le recensement du terrain et
celui des stocks forment un socle commun aux futures palettes de structures,
règles dexpansion et règles du shop. Les relevés datés ajoutent la temporalité
nécessaire à une future lecture de lhistoire économique du serveur.
## Contrat des informations
La mémoire est personnelle : une identité de joueur (UUID), dans une sauvegarde
de serveur, partagée entre ses dimensions. Les indicateurs sont indépendants.
| Information | Sens |
| --- | --- |
| Inconnu | Aucune observation, possession, pose ni statistique de minage ou de jet. C'est un état calculé, pas une étape enregistrée. |
| Vu | Le premier bloc rencontré par le regard du joueur, à au plus 32 blocs, observé côté serveur tous les 5 ticks. Les obstacles arrêtent le rayon ; les chunks absents ne sont pas chargés. Ce relevé ne couvre pas chaque pixel du champ de vision. |
| Miné | Compteur vanilla `mined` du bloc. Ses règles sont conservées : notamment pas de minage créatif, ni de minage sans l'outil requis. |
| Déjà possédé | Le bloc, sous forme d'item, a été présent dans l'inventaire personnel ou sur le curseur d'un menu. Les statistiques vanilla de ramassage et de jet prouvent aussi une possession passée. |
| Jeté | Compteur vanilla `dropped` de l'item du bloc. Il compte les unités volontairement jetées, pas les objets éjectés à la mort ni le butin produit par le bloc cassé. |
| Posé | Nombre de placements réussis par le joueur avec un item de bloc, y compris en créatif. Une tentative refusée, une interaction ou un placement par commande ne compte pas. |
| En inventaire | Quantité actuellement dans l'inventaire personnel, équipement et curseur compris. Les coffres ouverts, ender chests et contenus imbriqués des boîtes ne sont pas inclus. |
Les blocs sont identifiés par leur identifiant de registre ; les propriétés
d'état (orientation, humidité, etc.) ne créent pas une nouvelle fiche. Deux
identifiants restent distincts : une torche murale peut être vue et posée tandis
que l'item possédé correspond à la torche debout. Les noms des blocs inconnus
restent consultables, comme un catalogue ; cette version ne décide pas d'une
politique de secrets ou de verrouillage des recettes.
L'inventaire est observé chaque tick serveur, après les transactions de menus
et avant la consommation d'un item placé. Les statistiques de ramassage/jet
complètent ce relevé. Une mutation d'inventaire entièrement réalisée entre ces
points par un autre mod ne peut pas être reconstruite après coup.
Les spectateurs ne découvrent pas de blocs par le regard.
## Persistance et arrivée dans une sauvegarde antérieure
Contrat additif v1 : fichiers `data/sanctuary-blocodex/<uuid>.json`, enveloppe
avec `schema: 1` et UUID, puis observations, possessions et poses par identifiant.
Les statistiques vanilla restent dans leurs propres fichiers et sont seulement
lues. Aucune conversion du terrain, des paramètres de génération, des chunks,
du journal d'expansion ou des statistiques existantes n'est effectuée.
Sans fichier Blocodex, les observations et poses commencent vides. Le minage,
le jet et les preuves de possession sont disponibles depuis les statistiques
vanilla déjà présentes. On n'invente pas les observations ni les poses passées
à partir de `used`, qui compte aussi d'autres usages.
Les changements sont sauvegardés tous les 600 ticks, lors de la sauvegarde du
serveur, à la déconnexion et à l'arrêt. Un crash peut perdre les dernières
observations ou poses non sauvegardées. Un fichier invalide ou d'une version
inconnue désactive la mémoire concernée et n'est jamais remplacé silencieusement.
Les identifiants de mods absents sont conservés sur disque. Les anciennes
versions de Sanctuary ignorent ce répertoire additionnel ; les poses réalisées
pendant un retour à une ancienne version ne peuvent pas être récupérées.
## Réutilisation
`BlockKnowledgeService.knowledge(player, block)` et `snapshot(player)` renvoient
des valeurs immuables calculées côté serveur. Le service expose aussi sa santé ;
un consommateur doit refuser une condition de progression si la mémoire est
indisponible, plutôt que d'interpréter une panne comme une découverte vierge.
`BlockKnowledgeEvents.CHANGED` permet de réagir aux observations, possessions,
poses et changements de statistiques. Les écouteurs s'exécutent sur le thread
serveur ; ils ne constituent pas un journal transactionnel de récompenses.
Cette livraison ne verrouille aucune recette et n'accorde aucune récompense.
Palettes disponibles, recherches, progression et structures pourront ensuite
définir leurs propres conditions en utilisant cette API commune.
### Palettes de structures
`BlockKnowledgeService.palette(player, condition, tag)` croise les connaissances
du joueur avec une famille de matériaux. Les critères `BlockKnowledgeFacet`
sont combinables avec `and` et `or` : vus **ou** déjà possédés, minés **et**
actuellement portés, etc. Le résultat immuable garde les identifiants triés et
les quantités réellement portées.
```java
var candidates = BlockKnowledgeService.palette(player,
BlockKnowledgeFacet.SEEN.or(BlockKnowledgeFacet.POSSESSED),
BlockKnowledgeService.NATURAL_STRUCTURE_MATERIALS);
```
Le tag `sanctuary:structure_palette/natural` fournit une première famille de
pierres, terres, bois, feuilles et autres matériaux naturels, modifiable par
datapack. D'autres tags pourront définir des palettes minérales, végétales ou
propres à un biome. Le choix des couleurs, les contraintes physiques des blocs,
les quantités nécessaires et la construction de la structure appartiendront au
moteur de structures : une sélection de palette ne réserve aucun stock et ne
place aucun bloc.
## Recensement du terrain chargé
`TerrainCensus.snapshot(server)` expose une distribution des blocs par dimension ;
`TerrainCensus.chunkSnapshot(level, pos)` fournit le détail dun chunk déjà
chargé. Ces lectures se font sur le thread serveur et renvoient des valeurs
immuables. Elles parcourent les chunks `FULL` déjà accessibles, sans charger
de chunk absent ni attendre la fin dune génération.
Le comptage utilise les palettes des sections de 16 × 16 × 16 blocs. Il regroupe
les orientations et autres propriétés sous lidentifiant du bloc. Les blocs
dair sont exclus ; leau et la lave conservent leurs identifiants de blocs.
Le budget est de **16 sections non vides par tick serveur**, partagé entre les
dimensions et les demandes du même tick. Une section entièrement vide est
reconnue par ses métadonnées, sans parcourir sa palette.
Le relevé est progressif. Une section modifiée est retirée des totaux dès que
sa révision change, puis remise dans la file de comptage. Les sections et
chunks déchargés sortent du relevé. Un consommateur dispose, par dimension ou
chunk, du nombre de sections chargées et comptées, du tick de capture, du tick
du dernier comptage effectué et de l’âge de la plus ancienne attente.
`complete()` et `coverage()` décrivent la couverture **des zones chargées**.
Une couverture de 100 % ne signifie jamais que toute la sauvegarde a été lue.
Pendant un rattrapage, zéro bloc compté ne prouve donc pas labsence de ce bloc.
Les futures règles dexpansion devront fixer leur couverture minimale et leur
zone d’étude avant de prendre une décision. Les résultats en mémoire sont
reconstruits après redémarrage ; ce service n’écrit pas dans les chunks et ne
modifie pas leur génération.
## Recensement des stocks présents
`StockCensus.snapshot(server)` photographie les objets accessibles au tick de
la demande, sur le thread serveur. Le parcours des slots et des entités chargées
est effectué à la demande ; aucun abonnement ne le relance à chaque tick.
Les quantités sont des unités ditems, tous
types confondus : un lingot, un outil ou une graine sont comptés même sils ne
correspondent pas à un bloc. Les composants, lusure et les enchantements ne
créent pas de nouveaux identifiants de stock dans cette version.
| Catégorie | Couverture |
| --- | --- |
| `playerItems` | Joueurs connectés : inventaire personnel, équipement et curseur du menu. Le contenu du menu ouvert nest pas additionné. |
| `blockContainerItems` | Entités de blocs déjà instanciées dans les chunks chargés, qui exposent linterface `Container` : coffres, hoppers, fours, pots décorés, etc. Chaque moitié dun double coffre est comptée une fois. |
| `entityContainerItems` | Entités chargées qui exposent `Container`, notamment les wagonnets et bateaux à coffre. |
| `groundItems` | Quantités des `ItemEntity` chargées et encore présentes au sol. |
Le relevé ne déballe **aucune table de butin**. Tout conteneur dont la table
reste à résoudre est ignoré avant la lecture de ses slots ; son existence
augmente `pendingLootContainers`. Les entités de blocs encore stockées sous
forme de NBT et non instanciées sont également laissées intactes, avec leur
nombre dans `pendingBlockEntities`. Leur contenu nest pas remplacé par une
estimation.
La couverture exclut les joueurs hors ligne, les chunks et entités déchargés,
les ender chests, le contenu imbriqué des shulker boxes et bundles, les grilles
de fabrication en cours dans linventaire ou l’établi (`menuInputsIncluded()`
est faux), les inventaires et équipements des créatures. Le résultat de
fabrication affiché avant validation ne constitue pas un stock supplémentaire.
Elle exclut aussi les objets internes
des entités de blocs qui nexposent pas `Container`, comme les aliments dun feu
de camp ou le livre dun pupitre. Une shulker box portée compte comme un item ;
une shulker box posée et chargée expose son conteneur. Les exclusions figurent
dans le contrat de couverture ; `partial()` reste vrai.
Ce relevé indique où se trouvent les unités observées. Il ne les réserve pas,
ne les transfère pas et n’évalue pas leur prix. Ajouter le terrain aux stocks
ne donne pas une quantité immédiatement vendable : une roche dans un chunk
reste différente dun item dans un coffre.
## Consultation et futurs consommateurs communs
`WorldCensusService.capture(server)` rassemble les deux relevés pour une même
lecture côté serveur. Le consommateur réutilise cet instantané pendant son
calcul et conserve ses informations de couverture. Le shop et les expansions
pourront ainsi consulter la même base, avec leurs propres règles de fraîcheur,
de portée géographique, de prix, de consommation et de réservation.
Les diagnostics suivants sont réservés aux opérateurs :
```text
/sanctuary census
/sanctuary census block minecraft:stone
/sanctuary census item minecraft:gold_ingot
```
Le résumé présente la couverture du terrain par dimension, les quatre catégories
de stocks et les conteneurs au butin encore indéterminé. Le Blocodex personnel
accessible par **B** conserve les données du joueur ; ces diagnostics ne diffusent
pas les inventaires agrégés aux autres joueurs.
## Relevés datés — portée de lalpha.23
La collecte regroupe les activités observées par **jour civil UTC**, pour
lensemble du serveur, sans attribution à un UUID ou à une dimension :
| Action | Registre et unité |
| --- | --- |
| `mined` | `block` : nombre de blocs minés, selon les règles des statistiques vanilla. |
| `placed` | `block` : placements réussis par le joueur, créatif inclus et spectateurs exclus. |
| `picked_up` | `item` : unités ramassées observées par les statistiques vanilla. |
| `dropped` | `item` : unités volontairement jetées observées par les statistiques vanilla. |
| `crafted` | `item` : unités fabriquées créditées au joueur par les statistiques vanilla. |
Chaque combinaison conserve son action, son registre, son identifiant et une
quantité entière sur 64 bits, saturée à la valeur maximale en cas de dépassement.
Un compteur de minage nest pas transformé en nombre ditems produits. Les actions
antérieures à linstallation ne sont pas réparties artificiellement entre des
dates à partir des statistiques cumulées de Minecraft.
`MaterialActivityHistory.snapshot(server, day)` expose un instantané immuable
avec le jour, les compteurs, `recorded` et `unsaved`. Un jour sans données
enregistrées demeure inconnu ; il ne constitue pas un historique dactivité nulle.
Les opérateurs peuvent consulter `/sanctuary history` ou préciser une date avec
`/sanctuary history 2026-09-10`. La commande affiche au plus les 16 lignes aux
quantités les plus élevées et indique combien ont été omises ; lAPI conserve
lensemble des compteurs du jour.
La persistance additionnelle utilise `data/sanctuary-activity/YYYY-MM-DD.json`,
avec un schéma 1 et des dates UTC. Elle est séparée de la mémoire personnelle
et des chunks. Les écritures ont lieu tous les **600 ticks**, à la sauvegarde
et à larrêt du serveur, ainsi quau changement de jour observé par le service.
Un crash peut perdre les derniers relevés non sauvegardés, soit normalement
jusqu’à 30 secondes de jeu à 20 ticks par seconde. Le fichier conserve les
identifiants de mods absents ; il refuse les schémas inconnus, doublons,
compteurs invalides et changements externes. Une erreur arrête la collecte et
rend le service indisponible jusqu’à réparation puis redémarrage, en conservant
le fichier en cause. Les limites sont de 100 000 tuples et 16 Mio par jour.
Ces relevés permettent de distinguer des périodes dactivité. Ils ne conservent
pas dhistorique des instantanés de stocks, ne couvrent pas la fabrication automatique des
machines et n’établissent ni consommation, ni perte, ni destination des objets.
Ils ne retracent pas chaque transfert entre coffres ou chaque changement de propriétaire, et
ne constituent pas un journal transactionnel dachats, de récompenses ou de
réservations. Le **ballast**, ses unités, ses conversions et sa traduction en
géologie restent à concevoir dans le [cahier de cosmologie](cosmologie.md).
Aucun objet nest consommé et aucune Backroom nest générée par ces mesures.
## Référence WSMC retrouvée
La recherche locale a retrouvé une partie du travail précédent dans
`/Users/koka/Documents/sanctuary/Gameplay/blocodex` :
`ClientVoxelProjectBuilder` convertit des apparences de blocs et ditems en
volumes/couches de blocs ; `BlocodexStudioPalettes` sélectionne des matériaux
opaques appris. Le projet conserve aussi un instantané WSMC de 1 881 entrées
(1 168 blocs, 490 items, 223 mobs), issu de Minecraft 1.21.11.
Cette référence reste historique. La nouvelle API fournit la connaissance et
les candidats de palette ; la traduction de modèles dentités en structures
(visage de creeper, squelette géant, etc.) reste un chantier distinct. Aucun
générateur dentités ni import de ce snapshot ancien nest ajouté au registre
de Minecraft 26.3 par le socle méta.
## Validation
Validation locale du 10 septembre 2026 : `./gradlew check build assemblePack`
passe, avec **24 GameTests natifs réussis**. Le client graphique vérifie les
widgets et les messages réels dans un nouveau monde intégré, avec B sans droit
opérateur, observation serveur et possession conservée après retrait du stock.
Les tests de stockage passent. Les [preuves et limites](testing-alpha23.md)
détaillent le protocole, lartefact et son empreinte. Alpha.23 assemblée localement ;
publication du MRpack et mise à jour du canal demandées, en préparation.
+100
View File
@@ -0,0 +1,100 @@
# beta.065 — collisions des bateaux collectifs
Branche `codex/boat-collisions-beta065`.
## Problème et portée
Les huit formes de bateaux et radeaux collectifs utilisent le déplacement natif
côté serveur. Leurs anciennes limites étaient fondées sur une tuile carrée de
1,375 bloc, alors que les modèles ont une longueur de 28 pixels par module.
La coque visible dépassait donc sa collision dans le sens longitudinal. Un
virage agrandissait aussi directement les limites sans vérifier le terrain ;
après cette intrusion, le déplacement natif pouvait traverser le mur.
Les limites couvrent désormais les coques complètes, et le volume balayé
par chaque virage est contrôlé avant le déplacement. Le mouvement natif reste utilisé pour
les translations, lappui au sol et sur leau, les formes de blocs et les
collisions avec les autres véhicules. Les sièges, les commandes partagées,
les moteurs, les vitesses et les règles de chute des piles restent inchangés.
Les modèles et les textures ne changent pas. Les bateaux simples Minecraft
conservent leur comportement. Aucune modification de chunk, de recette, de
journal ou de format de sauvegarde ; les identifiants existants restent stables.
Les positions enregistrées des anciens bateaux ne sont pas déplacées par la
mise à jour : seule leur collision utilise les dimensions corrigées.
## Collision de la coque
Les huit formes sont couvertes : 1 × 2, 2 × 1, 1 × 3, 3 × 1, 2 × 2,
2 × 3, 3 × 2 et 3 × 3, sur les onze bois. Largeur et longueur de la coque :
- Bois : `colonnes + 0,25` × `rangées × 1,75 + 0,25` blocs, rebords compris.
- Bambou : `colonnes × 1,25` × `rangées × 1,75` blocs.
Comme dans le moteur natif, la collision est une boîte alignée sur les axes ;
elle englobe la coque orientée. Les rames animées restent décoratives. Un virage
vérifie aussi les extrema entre ses deux orientations, pour quun coin ne
traverse pas un mur avant de revenir dans une position libre. Au contact,
linertie de rotation sarrête ; le recul et le glissement le long du mur restent
résolus par Minecraft. Les rotations de placement ou de téléportation ne sont
pas remplacées par des tentatives de conduite.
## Vérification
Client Minecraft 26.3-pre-2 et serveur intégré de développement, monde plat
neuf de graine `65`. Le test avant correction traverse effectivement le mur
situé en X=8 : après quinze mouvements avec virage, le centre atteint X=12,55.
Ce même cas passe après correction.
- **88 variantes** : **3 168 déplacements** contre des murs dans les deux sens
de X et Z, huit orientations, diagonales et déplacements de vingt blocs en
un appel ; collision native détectée et recul libre de 1,5 bloc.
- **440 virages** : contact et tentative de déplacement dans le mur, virages
libres, puis cas où les orientations de départ et darrivée sont libres
mais où le milieu du virage heurterait le mur. Ce dernier cas est refusé.
- **128 passages** contre les formes natives minces des barrières et vitres,
sur bateaux et radeaux, sans traversée ni recouvrement des blocs.
- **704 modèles orientés** : les sommets réels des fonds et rebords sont inclus
dans les collisions, côté client. Les rames sont explicitement exclues.
- **16 parcours pilotés avec les vraies touches**, huit formes en chêne et en
bambou, répartis entre eau et vol avec Allay et les quatre directions :
avancer contre le mur, maintenir le virage, reculer. Les limites serveur et
client restent à lintérieur des murs, le pilote reste assis et le recul
déplace effectivement le bateau. Deux captures de contact ont été relues.
Journaux locaux : `build/boat065-before.log`,
`build/boat065-control-before.log`, `build/boat065-fixed-probe.log`,
`build/boat065-client.log`. Captures : `build/boat065-evidence/`.
Le parcours complet passe en **1 min 59 s**.
```sh
./gradlew :sanctuary:runClientGameTest -x :sanctuary:runGameTest \
-PsanctuaryClientTests=true -PsanctuaryBoat065ClientTests=true \
-PsanctuaryQuickTests=true -PsanctuaryClientNoVsync=true
```
Les essais utilisent le serveur intégré ; aucun serveur dédié ni EULA acceptée.
Le test client couvre la synchronisation locale ; une session avec plusieurs
clients distants et latence na pas été relancée pour ce correctif.
## Livraison locale
`./gradlew check build assemblePack assembleTestPack` réussi en **2 min 8 s**,
**122 tâches**, avec `-x :sanctuary:runGameTest -PsanctuaryClientTests=true
-PsanctuaryQuickTests=true`. Les essais serveur intégrés ci-dessus remplacent
les tests dédiés exclus conformément au refus antérieur daccepter leur EULA.
Les archives normal/Test sont vérifiées : **1 645 classes** conformes à la
compilation, aucune classe de test embarquée, mêmes ressources et dépendances
quen beta.064. Seule la source principale `CrewBoat` change, en plus des
métadonnées de version. Modèles, textures, recettes, sièges, moteurs et autres
systèmes restent conservés. Les anciennes archives beta.064 sont intactes.
- [Pack normal beta.065](../build/Sanctuary-beta.065.mrpack), 5721084 octets.
SHA-256 : `71ff1736817e2953f88a8afda5858b2e7ae23c360efdb7e25f149cbff049d764`.
- [Monde plat rapide beta.065](../build/Sanctuary-Test-beta.065.mrpack), 5740018 octets.
SHA-256 : `4c4931146a05d6f57e9abf2303b039ab7a7bc16471a0b864873b86bef297431d`.
Reçu `build/boat065-artifact.json`, build `build/boat065-check.log`.
Aucun canal publié, instance Prism ou monde personnel modifié.
+74
View File
@@ -0,0 +1,74 @@
# beta.091 — Interagir avec les animaux embarqués
Branche `codex/boat-passenger-interactions-beta091`, Minecraft 26.3.
## Contrat
Depuis un bateau, viser un mob directement installé sur un siège permet les
interactions habituelles : clic gauche pour le frapper, clic droit pour utiliser
son objet de tête ou son interaction native. Cela couvre les bateaux/radeaux
Minecraft et tous les formats Sanctuary. Les coups sur les animaux ordinaires
infligent leurs dégâts habituels ; les familiers conservent leur réaction sans
blessure hors des combats prévus, avec déclenchement de leur équipement.
Le ciblage natif excluait les entités partageant le véhicule racine du joueur.
L'exception est limitée au curseur du joueur et aux mobs assis directement dans
son bateau. Portée, obstacles et choix de la cible la plus proche restent ceux
de Minecraft. Les collisions des projectiles ne sont pas modifiées.
Le bateau limite aussi normalement le regard à ±105 degrés. Avec un mob à bord,
les joueurs peuvent désormais regarder autour deux à 360 degrés, notamment
vers le siège arrière. Les commandes de déplacement et la rotation du bateau
restent indépendantes du regard ; les mobs gardent leur orientation native.
La protection de portage des familiers distingue désormais un siège de bateau
d'un familier porté sur la tête ou monté. Les protections entre joueurs portés
restent en place. Les dégâts et interactions continuent à être validés côté
serveur ; aucun nouveau paquet, inventaire, identifiant ou format de sauvegarde.
Aucune modification des mondes existants ni de la génération.
## Vérifications
Le parcours `BoatPassengers091ClientChecks` crée un monde plat de développement,
graine 42, et utilise le curseur natif et les vrais clics souris. Il teste un
coffre porté puis un distributeur chargé sur une poule embarquée.
Le parcours natif passe en **1 min 13 s** sur Minecraft 26.3/macOS :
- 13 cas : bateau et radeau vanilla, les huit formats Sanctuary, radeau 3 × 3,
poule bébé et familier installé comme passager pour vérifier sa protection.
- Vrai ciblage du corps depuis le siège, y compris vers larrière ; aucun
remplacement artificiel du résultat de visée dans le test.
- Clic droit : ouverture du coffre natif contenant les sept diamants attendus.
- Clic gauche : perte de vie de la poule, une flèche consommée et un projectile
réel créé par le distributeur, sans éjection de lanimal.
- Familier : même tir au toucher, vie inchangée. Une fois porté sur la tête,
protection symétrique conservée et aucun nouveau déclenchement au toucher.
```sh
./gradlew :sanctuary:runClientGameTest -x :sanctuary:runGameTest \
-PsanctuaryClientTests=true -PsanctuaryBoatPassengers091ClientTests=true \
-PsanctuaryQuickTests=true -PsanctuaryClientNoVsync=true
```
Journal : `build/boat091-client.log`, marqueur `BOAT091_PASS`.
## Livraison
`./gradlew check build assemblePack assembleTestPack -x :sanctuary:runGameTest`
passe en **2 min 20 s**, 124 tâches. Journal : `build/boat091-check.log`.
Les deux exports sont vérifiés contre les JAR et leurs sources. Les textures,
modèles, données et JEI restent identiques à beta.090 ; ses archives sont intactes.
Le reçu local est `build/boat091-artifact.json`.
- [Pack normal](../build/Sanctuary-beta.091.mrpack), SHA-256
`0d0e847e5b8f22637b6e280d0694ab5a2cdb8cb01a47442d92c5103e3e3f53ac`.
- [Pack Test](../build/Sanctuary-Test-beta.091.mrpack), SHA-256
`392773b8e5fc8948cdb5ea9cd7e8cc8cd97ed43bdc5fe413fef32b05758f8edc`.
## Limites
Les essais utilisent un client natif et son serveur intégré de développement ;
pas de session LAN à deux clients pour cette livraison. Les tests dédiés restent
exclus et aucune EULA nest acceptée. Aucun déploiement dans une instance
personnelle ni publication du canal packwiz.
+82
View File
@@ -0,0 +1,82 @@
# beta.049 — bateaux rectangulaires et blocs portés
Branche `codex/rectangular-boats-beta049`.
## Contrat
Quatre formats supplémentaires, largeur × longueur : 3 × 1, 1 × 3,
2 × 3 et 3 × 2. Les recettes reprennent exactement cette disposition dans
l'établi, avec uniquement des bateaux ordinaires identiques du même bois.
Les onze bois natifs sont couverts : 44 variantes ajoutées, 66 au total.
Les noms reprennent le bois suivi des dimensions, en français et en anglais.
Les plans rejoignent aussi une collection Bateaux et radeaux déjà acquise.
Chaque module accueille deux passagers, joueur ou animal. On remplit d'abord
les places principales de tous les modules, puis leurs places secondaires.
Cela donne 6 places en 3 × 1 et 1 × 3, 8 en 2 × 2, 12 en 2 × 3 et 3 × 2,
et 18 en 3 × 3. Les deux sièges sont décalés de 0,8 bloc dans le même module.
Les fonds natifs sont répétés, avec rebords uniquement
à l'extérieur et deux rames. Les commandes, moteurs et piles de beta.048 sont
conservés. Le supplément de masse est `(largeur + longueur 2) × 0,25` :
les carrés conservent exactement leur équilibre, et tourner une recette
rectangulaire ne change pas sa puissance. Les limites de collision des nouveaux
rectangles suivent leur orientation.
## Blocs sur la tête
- Les sons natifs incluent le joueur qui actionne le bloc, le porteur et les
joueurs proches. Une seule diffusion serveur ; les blocs posés conservent
leur mécanisme de prédiction habituel.
- L'apparence reçoit l'état natif du bloc et les informations visibles du feu
de camp, du pupitre et du pot décoré. Les aliments en cuisson deviennent
visibles. Les événements d'ouverture et de fermeture des coffres sont transmis.
- Les modèles natifs des blocs avec rendu spécial sont utilisés. Les bateaux
ordinaires et collectifs disposent aussi de leur modèle 3D comme chapeau.
- Les façades des fours et les têtes sont tournées vers l'avant du personnage.
La transformation commune conserve le haut des modèles vers le haut.
- Un coup infligeant des dégâts produit dix ticks de signal redstone local.
Distributeurs, droppers, lampes et autres récepteurs natifs réagissent à ce
signal. Une trémie respecte sa règle native : un signal la verrouille
temporairement. Le piston s'étend et se rétracte localement, sans pousser le
terrain. La TNT garde son amorçage réel déjà existant.
Les cosmétiques bateaux restent des modèles portés ; ce ticket ne crée pas un
second véhicule pilotable sur la tête. Les conditions des blocs fonctionnels
et les règles de restitution de beta.043 restent applicables.
## Données et limites
Les anciens identifiants, bateaux et formats de sauvegarde restent stables.
La forme des nouveaux bateaux est portée par leur identifiant enregistré.
Les informations de rendu passent dans la synchronisation d'apparence existante,
pas dans une copie récupérable de l'inventaire. Les coffres et les fours ne
transmettent pas leur stockage à tous les observateurs. Aucun monde personnel
ni chunk existant n'est modifié par cette livraison.
Les animations de rendu sont limitées aux fonctions de présentation natives ;
un modèle client ne simule pas un second bloc fonctionnel. Les sources d'énergie
et les circuits environnants ne deviennent pas un réseau mobile de redstone.
## Vérification
`./gradlew check build :sanctuary:runGameTest assemblePack assembleTestPack`
réussit avec les groupes `boatshead,poultry,headblocks,cosmetics` : **35 tests
serveur**. Les 66 recettes sont fabriquées, leurs ingrédients mixtes refusés,
les capacités complètes et les passagers sauvegardés/rechargés. Les sièges
principaux précèdent les secondaires. Les paquets natifs de son contiennent
une diffusion sans exclusion pour la trappe portée, tout en gardant l'exclusion
vanilla sur un bloc normal. Les aliments, états, retrait des inventaires,
impulsions, extinction de lampe et amorçage unique de TNT sont contrôlés.
Le parcours client natif FR/EN passe : 66 modèles par tuiles, vol des quatre
rectangles via les touches réelles, aliments du feu de camp, ouverture/fermeture
de coffre et Shulker, animation de cloche avec fin, et bateaux comme chapeaux.
Les captures des têtes et fours ont été relues : façades vers l'avant, haut des
modèles conservé. Preuves dans `build/boats049-evidence/` ; logs
`build/boats049-delivery.log` et `build/boats049-client-final.log`.
Le reçu `build/boats049-artifact.json` atteste 1 529 classes et leurs ressources
conformes au build, les deux MRpacks, JEI et les textures conservées. Les archives
beta.048 sont inchangées. Aucun déploiement personnel ni publication du canal.
Une session avec deux clients distants n'a pas été relancée : le son a été
vérifié au niveau de sa diffusion serveur native, puis le rendu en client local.
+85
View File
@@ -0,0 +1,85 @@
# beta.080 — portée de Construction et progression de Minage
Branche `codex/build-mining-balance-beta080`, Minecraft 26.3-pre-2, textures beta.070.
Construction augmente la distance de pose. Minage augmente indépendamment
la distance et la vitesse de casse. Le départ est inférieur au vanilla ;
les derniers paliers le dépassent modérément. Les coûts, sept achats par
compétence et tailles des groupes restent ceux du système existant.
| Rang | Vitesse de minage, référence vanilla | Portée de minage | Portée de pose |
| --- | --- | --- | --- |
| 0 | 75 % | 3 blocs | 3 blocs |
| 1 | 85 % | 3,5 blocs | 3,5 blocs |
| 2 | 95 % | 4 blocs | 4 blocs |
| 3 | 100 % | 4,5 blocs | 4,5 blocs |
| 4 | 107,5 % | 4,75 blocs | 4,75 blocs |
| 5 | 115 % | 5 blocs | 5 blocs |
| 6 | 122,5 % | 5,25 blocs | 5,25 blocs |
| 7 | 130 % | 5,5 blocs | 5,5 blocs |
Chaque colonne dépend de sa propre compétence. La vitesse sapplique via
lattribut natif de casse, avec les outils, enchantements et autres effets.
Les portées préservent les bonus externes de lattribut dinteraction ;
les valeurs du tableau supposent cet attribut à sa valeur survival de base.
Créatif, spectateur et joueurs sans progression Sanctuary conservent leur
portée native. Les infobulles FR/EN affichent le palier actuel et le suivant.
La visée peut sélectionner le plus éloigné des gestes disponibles ; les
validations de chaque action appliquent ensuite sa propre portée. Ainsi,
voir le contour dun bloc naccorde pas forcément la portée pour le miner
ou y poser un bloc : le même contour sert aux interactions ordinaires.
La portée des coffres, autres interactions et attaques naugmente pas.
Un coffre hors de portée native peut servir de support de construction,
sans souvrir à distance. La main gauche et les plantes aquatiques suivent
la portée de Construction.
Les deux sélections groupées vérifient leur ancre avec leur compétence.
Le plan et la veine verrouillés conservent leur contrat : les cellules du
groupe peuvent dépasser la portée de lancre. Les droits, protections,
collisions, stock, conditions de pose et chunks chargés restent vérifiés.
La validation réseau conserve la tolérance native de distance à lentrée
des paquets ; la pose vérifie aussi la distance du point cliqué côté serveur.
Aucun identifiant, schéma de sauvegarde ni terrain modifié. Les anciens
rangs reçoivent les nouvelles valeurs à leur application habituelle ; un
reset ou prestige revient aux valeurs de départ.
## Vérification
`Balance080ClientChecks` réussit en **1 min 03 s**, dans un monde plat solo
jetable, avec les gestes natifs et les paquets réels client/serveur :
- Les huit rangs, vitesse native de casse dun bloc et composition des bonus.
- Pose proche au rang zéro, refus de la pose lointaine sans perte de stock.
- Minage et pose au-delà de la portée vanilla ; indépendance des deux compétences.
- Pose en main gauche et refus serveur dun paquet visant trop loin.
- Coffre lointain utilisable comme support sans ouvrir son inventaire ; un
briquet en main principale ne profite pas de la portée du bloc en main gauche.
- Construction dun plan complet de neuf blocs à la nouvelle portée.
- Vein mining de neuf blocs à cette portée, regard détourné après verrouillage.
- Pose dun nénuphar, retour aux rangs zéro, créatif et joueur sans progression.
Journal : `build/balance080-client.log`. Les interactions des blocs portés
sur la tête ont également été relues : elles passent par leur contexte
propre, sans la pose de bloc interceptée ici.
`check build assemblePack assembleTestPack` réussit en **2 min 27 s**,
124 tâches (104 exécutées, 20 à jour), avec `-x :sanctuary:runGameTest`.
Journal : `build/balance080-check.log`.
Les **1 700 classes** du JAR correspondent aux fichiers compilés. Les 17
classes ajoutées ou modifiées par rapport à beta.079 concernent uniquement
ce ticket ; quatre libellés évoluent par langue. Sources et ressources
vérifiées, textures beta.070 identiques, même JAR intégré aux deux packs.
Les archives beta.079 sont conservées à lidentique.
Reçu : `build/balance080-artifact.json`. Aucun déploiement personnel.
Le serveur dédié reste exclu conformément au refus de son EULA ; le test
natif ci-dessus utilise le serveur intégré.
## Archives
- [Sanctuary-beta.080.mrpack](../build/Sanctuary-beta.080.mrpack).
SHA-256 : `feb20b882442149789ed6d90e32073aa6201314a57782105a0330394c76e796d`.
- [Sanctuary-Test-beta.080.mrpack](../build/Sanctuary-Test-beta.080.mrpack).
SHA-256 : `fc277f081f160ae8ae835501cddddd572cdffe4749454e1652a080a117bfb941`.
+43
View File
@@ -0,0 +1,43 @@
# beta.081 — portée de pose jusqu’à six blocs
Branche `codex/build-reach-six-beta081`, Minecraft 26.3-pre-2, textures beta.070.
À la demande du joueur, Construction atteint maintenant **six blocs**.
Les portées des rangs 0 à 7 sont : **3 ; 3,5 ; 4 ; 4,5 ; 4,75 ; 5 ; 5,5 ; 6**.
Le rang 6 est également ajusté pour terminer par deux gains dun demi-bloc.
La référence reste lattribut dinteraction vanilla sans bonus externe.
Le minage conserve sa portée maximale de 5,5 blocs et sa vitesse de 130 %.
Le contrat client/serveur, la pose en main gauche, les plans groupés et les
infobulles FR/EN utilisent déjà la même source des valeurs. Aucun changement
des coûts, identifiants, sauvegardes ou mondes ; les archives beta.080 restent
immuables.
## Vérification
Le scénario natif `Balance080ClientChecks`, ajusté à cette courbe, réussit
en **1 min 21 s** dans un monde solo jetable : pose réelle à 5,75 blocs,
refus serveur dun clic à 6,25 blocs sans perte de stock, et régression des
huit rangs, du minage indépendant, de la main gauche, des groupes, des
nénuphars, du créatif et des bonus externes.
Journal : `build/reach081-client.log`.
`check build assemblePack assembleTestPack` réussit en **2 min 30 s**,
124 tâches (103 exécutées, 21 à jour), avec `-x :sanctuary:runGameTest`.
Journal : `build/reach081-check.log`.
Les 1 700 classes et les sources correspondent aux fichiers compilés :
seule `BuildingLimits` change par rapport à beta.080. Ressources et textures
identiques, même JAR dans les deux packs, archives beta.080 préservées.
Reçu : `build/reach081-artifact.json`.
Le serveur dédié reste exclu
conformément au refus de son EULA ; le test utilise le serveur intégré.
Aucun déploiement personnel.
## Archives
- [Sanctuary-beta.081.mrpack](../build/Sanctuary-beta.081.mrpack).
SHA-256 : `7f789522eaa4a2574cc9bee4a4def7862a4893c8f462e88502ca858440c8ee02`.
- [Sanctuary-Test-beta.081.mrpack](../build/Sanctuary-Test-beta.081.mrpack).
SHA-256 : `7811cdc47ab4a8af2fc6ccd530775eb4a239f18894965362a1c57a5e0f12ded5`.
+108
View File
@@ -0,0 +1,108 @@
# PROG-02B — Construction et vein building — beta.009
Branche : `codex/progression-vein-building`. Implémentation et export local
vérifiés le 13 septembre 2026 ; parcours graphique encore non validé, voir
ci-dessous. Cible : Minecraft 26.3-pre-2, Fabric et Java 25.
## Contrat préalable de migration
La progression personnelle passe du schéma 3 au schéma 4, en ajoutant
`building: 0`. Les schémas 1 et 2 passent d'abord par leurs migrations strictes
existantes. Les rangs, achats, dates, coûts, aptitudes et révisions sont
conservés sans achat fictif. L'historique accepte sept achats Construction
supplémentaires, soit 37 événements maximum ; chaque rang doit correspondre
exactement à ses achats. Les données invalides sont refusées sans remise à zéro.
La migration est idempotente et conserve l'identifiant `sanctuary:progression`.
La restauration réattache la représentation canonique, ensuite enregistrée par
la sauvegarde Minecraft normale. Mort, reconnexion et redémarrage conservent
les rangs. Aucun New Game+ n'est activé.
Les fichiers de configuration restent au schéma 2 : Construction utilise les
sept `statCosts`, par défaut 1, 2, 4, 8, 16, 32 et 64 niveaux. Aucun changement
des profils, couleurs, Atlas, Demeure, inventaire, génération ou chunks existants.
Client et serveur doivent utiliser beta.009 ensemble. Les versions antérieures
ne lisent pas le schéma 4 ; revenir en arrière exige une sauvegarde antérieure
des données de joueur. Aucun monde personnel n'est ouvert ou modifié ici.
## Contrat de jeu et valeurs d'essai
- Rang 0 : pose Minecraft individuelle. Sept achats débloquent les diamètres
3, 5, 7, 9, 11, 13 et 15 (jusqu'à 225 emplacements dans un plan).
- La portée de visée et d'attaque reste celle de Minecraft. Seul le plan autour
du point de départ s'agrandit ; aucune portée d'attaque supplémentaire.
- Une pose tous les deux ticks en survie ; lots bornés en créatif. Le statut
opérateur en survie n'accorde ni matériaux gratuits ni cadence créative.
- R est la touche commune configurable : avec un bloc en main, aperçu de
construction ; R + clic droit maintenus posent, R + molette règle le diamètre.
R + clic gauche reste le minage. B reste le Blocodex.
- Plan déterminé par la face visée et l'orientation du joueur, ordre du centre
vers l'extérieur. Le serveur recalcule et revalide les cibles, le stock et les
permissions. Relâcher, changer d'objet, ouvrir un menu, mourir, s'éloigner ou
perdre la connexion arrête le geste ; les poses déjà effectuées restent.
- Les poses passent par le placement natif pour les orientations, supports,
collisions, contenus d'objets, consommation, statistiques et traces Demeure.
Aucune récompense pour l'aperçu ou une pose refusée. Les surfaces ne remplacent
pas les blocs occupés et n'ouvrent pas les contenants servant de support.
Une dalle peut être fusionnée par son contexte Minecraft natif.
- Le plan couvre les emplacements dont le support existe déjà, comme le Builder
historique. L'aperçu ne dessine que les poses valides ; il ne coûte aucun objet.
La pile tenue fournit les matériaux, sans réapprovisionnement automatique.
- Portes, lits et plantes doubles gardent la pose individuelle, pour ne pas
modifier une seconde case hors du plan validé. Échafaudages et nénuphars aussi :
leurs placements natifs recherchent une autre cible. Les contextes déplacés
et chunks non chargés sont refusés avant tout placement groupé.
## Vérifications
- `./gradlew :sanctuary:compileGametestJava check build assemblePack -PsanctuaryFocusedTests=progression,map,demeure,mining,building`
**réussi en 3 min 55 s**, avec **28 tests serveur natifs obligatoires réussis**,
dont dix scénarios Construction. Journal : `build/beta009-delivery-complete.log`.
- Les contrôles purs relisent les schémas 1, 2 et 3 et vérifient l'idempotence,
les dates/coûts/rangs conservés, sept achats Construction, plafond et refus
d'un rang sans historique. La configuration reste au schéma 2.
- Les tests serveur vérifient le passage par le placement natif, les six faces,
les quatre orientations, les plans de 225 cases sans doublon, les coûts,
l'absence d'extension de portée, les stocks courts, le créatif, les dalles
simples/doubles/hautes et les escaliers. Les collisions avec un animal,
contenants occupés, droits Fabric, mutation pendant un callback, concurrence,
interruption et expiration du maintien sont couverts. Les statistiques,
Blocodex et contributions Demeure proviennent des poses confirmées.
- Le test de progression sauvegarde/recharge le joueur et copie ses achats,
dont Construction, lors d'une mort ordinaire. Le contrat de reprise est
contrôlé sans ouvrir un monde personnel.
- Le parcours client `Building009ClientChecks` est écrit et compilé : achats
par clic, aperçus 25/9, molette, arrêt, consommation, une seule couche par
geste, reconfiguration et interruption par le Blocodex. **Son exécution
reste non validée** : les deux lancements se sont bloqués avant le monde
dans `Minecraft.<init>` / `SDL_GL_SwapWindow`. Le contrôle de bureau a
confirmé que le Mac était verrouillé. Aucun résultat graphique beta.009
ni capture en jeu n'est revendiqué. Les processus de test ont été arrêtés ;
la valeur VSync du dossier de développement a été remise à sa valeur initiale.
Journaux : `build/beta009-client.log`, `build/beta009-client-retry.log` ;
piles : `build/beta009-client-threads.txt`, `build/beta009-client-retry-threads.txt`.
La sélection des tests serveur est limitée à
`progression,map,demeure,mining,building` ; ce ticket ne revendique pas la
correction des deux anciennes assertions de génération générales.
Référence historique en lecture seule : sélection, plan et session de
construction dans `../26.2/sanctuary`, GPL-3.0-or-later. Les appels natifs sont
vérifiés dans les classes de Minecraft 26.3-pre-2, dont `BlockItem.place`,
`ItemStack.useOn` et `ServerPlayerGameMode.useItemOn`. Le mixin commun contourne
seulement l'interaction du support comme le fait la pose accroupie ; les hooks
Fabric, le placement, les contenus d'objets, coûts et critères Minecraft restent
actifs. La revalidation a lieu après les callbacks et avant l'usage de l'objet.
## Artefact local
- [Sanctuary-beta.009.mrpack](../build/Sanctuary-beta.009.mrpack), **2 360 956 octets**.
- SHA-256 : `efa1ac7974b16e2f6169149518e08ed2bca4371b386b3413850b08618392da21`.
- Reçu : `build/building009-artifact.json` ; somme séparée :
`build/Sanctuary-beta.009.mrpack.sha256`.
- ZIP et JSON vérifiés, identité du JAR construit et du JAR Demeure embarqué,
versions internes, classes/mixins Construction, traductions FR/EN, six icônes
originales, hash Fabric API et index packwiz. Aucune classe de test embarquée.
Les exports beta.003 à beta.008 sont restés strictement identiques.
L'artefact est disponible pour essai local. Le canal packwiz n'a pas été publié
et aucune instance personnelle n'a été synchronisée.
+205
View File
@@ -0,0 +1,205 @@
# CAPE-01 — Des capes rares aux pouvoirs durables
**Ticket local rédigé le 15 septembre 2026 — à arbitrer, puis à implémenter.**
Cette livraison prépare le ticket ; les effets et l'acquisition décrits ci-dessous
ne sont pas implémentés.
- Branche documentaire réservée : `codex/capes-ticket`.
- Branche d'implémentation prévue : `codex/capes-gameplay`.
- Aucun numéro `beta.xxx` réservé pour cette préparation documentaire.
## Ce que le joueur doit pouvoir faire
Trouver une cape Sanctuary doit être un événement : un objet très rare,
reconnaissable et désirable, que l'on a envie de porter pour son pouvoir.
Les capes donnent généralement un **bonus passif permanent**. Certaines peuvent
offrir un pouvoir exceptionnel, voire volontairement « cheaté », si son impact
reste acceptable dans la partie collective.
Un catalogue riche est souhaitable : il peut contenir beaucoup de modèles,
y compris plusieurs capes très puissantes. La diversité du catalogue et le
nombre d'exemplaires en circulation sont deux choix distincts.
### Intentions exprimées par le créateur
- Privilégier les bonus durables et l'envie d'utiliser les capes.
- Faire des capes des objets très rares.
- Garder ouverte la possibilité de malus ou de contreparties.
- Accepter des pouvoirs très forts ; leur puissance seule ne les exclut pas.
- Examiner leurs conséquences réelles sur le gameplay et les autres joueurs.
- Envisager la rareté et des périodes de fonctionnement comme moyens
d'équilibrage, sans rendre toutes les capes temporaires.
### Interprétation proposée de « permanent »
Le pouvoir reste disponible **tant que la cape est équipée dans sa case dédiée**,
sans renouveler une potion ou appuyer régulièrement sur une touche. Posséder
la cape dans un coffre ou l'inventaire n'accorde rien. Le retrait arrête son
effet ; découvrir plusieurs capes ne donne pas plusieurs bonus permanents au
personnage. Cette interprétation reste à confirmer avant le code.
Les exceptions temporaires sont annoncées cape par cape. Proposition : la cape
reste un objet de collection après sa période active ; c'est son pouvoir qui
s'endort. Une cape consommable ou détruite à l'expiration serait un autre choix,
à expliciter, pas une conséquence implicite du mot « temporaire ».
## État réel du socle
La [beta.018](companions-cosmetics-beta018.md) a livré la case cape, les gestes
d'équipement, la sauvegarde et le rendu partagé. Le code consulté contient une
seule cape, `sanctuary:zero_cape`, disponible en créatif ou par `/give`.
**Cape Zéro est actuellement visuelle : aucun bonus de gameplay n'est appliqué
par son service.** Son apparence est provisoire. Le filtre d'équipement et le
rendu reconnaissent explicitement cet objet ; un catalogue demande leur extension.
Les [lootboxes de capes](vision.md#panneaux-et-lootboxes) appartiennent à la vision.
Elles ne constituent pas une acquisition en survie déjà livrée. Les familiers,
la progression, le portage, les bateaux et le temps réel existent et devront
être pris en compte lors des essais des effets retenus.
## Périmètre proposé pour un premier lot jouable
Livrer **trois capes aux usages distincts**, leur description FR/EN, leur effet
serveur et une première voie d'obtention rare effectivement jouable. Le choix
des trois capes ci-dessous est une proposition de prototype, pas un catalogue
approuvé. Les autres modèles pourront suivre par petits lots.
| Piste FR / EN | Pouvoir envisagé | Point d'équilibrage à éprouver |
| --- | --- | --- |
| **Cape de la Brise / Breeze Cape** | Bonus permanent de vitesse de déplacement au sol. | Utilité quotidienne ; cumul avec Sprint, potions, familiers et ralentissement du portage. Un bonus simple peut rester sans malus. |
| **Cape du Brasier / Ember Cape** | Forte augmentation des dégâts de mêlée ; réduction de la vie maximale comme contrepartie possible. | Gain offensif réellement sensible ; risque assumé et lisible. Vérifier si le malus influe sur les combats ou s'annule facilement par une combinaison. |
| **Cape de l'Éclipse / Eclipse Cape** | Vol libre pendant une courte fenêtre récurrente, pouvoir volontairement exceptionnel. | Accès entre îles, exploration, transport et sortie de fenêtre en plein vol. Durée, fréquence et éventuelles restrictions à décider après essai. |
Pour chaque cape sélectionnée, renseigner avant implémentation : nom FR/EN,
identifiant stable, visuel et provenance, effet chiffré, conditions, éventuel
malus, cumuls, acquisition, fréquence d'obtention et règle temporelle complète.
Le devenir de Cape Zéro reste une décision distincte : ne pas attribuer
automatiquement un nouveau pouvoir aux exemplaires existants.
Ce lot réutilise la case existante. Il ne nécessite ni nouveau monde, ni nouvelle
génération, ni économie complète, ni système général de quêtes ou de lootboxes.
La source de récompense doit être choisie parmi les mécanismes effectivement
disponibles au démarrage ; si elle exige un chantier autonome, la référencer
comme dépendance. Un prototype accessible uniquement par `/give` valide les
pouvoirs, mais ne clôt pas le résultat « trouver une cape rare en survie ».
## Équilibrage : mesurer ce que la cape change
**La rareté ne suffit pas à prouver l'équilibre.** Une cape obtenue une seule fois
peut servir quotidiennement, être prêtée à tout un groupe ou aider son détenteur
à en obtenir d'autres. Une faible probabilité répétable peut finir par produire
beaucoup d'exemplaires. À l'inverse, une cape très forte dans un contexte précis
peut créer un moment mémorable sans dominer toute la progression.
L'objectif proposé est que plusieurs capes aient des usages désirables, tout en
gardant un parcours intéressant sans cape. Les exceptions qui court-circuitent
une étape doivent être identifiées et assumées dans leur fiche.
| Axe | Essai à réaliser et décision à en tirer |
| --- | --- |
| **Exploration et vide** | Comparer un trajet entre îles sans cape, avec cape et avec moyens de transport existants. Identifier les risques supprimés, les accès anticipés et l'utilité restante des infrastructures. |
| **Combat PvE et PvP** | Mesurer dégâts, survie et possibilité de réponse à équipement comparable, puis en combinaison forte. Décider explicitement du traitement PvP ; ne pas le désactiver par défaut dans la conception. |
| **Progression et production** | Relever temps gagné, ressources et XP obtenues. Vérifier si une cape rend superflus une compétence, une potion, un familier ou une étape collective. |
| **Cumuls et coopération** | Éprouver cape + familier + équipement + potions, portage et prêt entre joueurs. Une seule case cape ne limite pas les autres sources de bonus. |
| **Rareté dans le temps** | Estimer les exemplaires et détenteurs après une semaine et un mois, pour un joueur occasionnel, un joueur intensif et un groupe qui mutualise les récompenses. |
| **Plaisir et choix** | Observer si les joueurs veulent réellement porter chaque cape, changent selon l'activité ou choisissent toujours la même. Un malus qui conduit à tout laisser au coffre rate l'intention. |
Ajuster en priorité le contexte d'utilité, les cumuls, l'acquisition ou la période
active lorsqu'ils permettent de conserver un pouvoir spectaculaire. Réduire
la puissance ou ajouter un malus reste possible, sans imposer une pénalité à
chaque cape. Une cape maudite à malus seul reste une piste à arbitrer.
### Rareté et circulation
- Fixer la source, les joueurs éligibles, la fréquence des tentatives, le taux
ou quota éventuel et la possibilité de renouveler la récompense.
- Distinguer rareté d'un modèle et rareté de l'ensemble : beaucoup de modèles
très rares peuvent rendre l'obtention d'une cape quelconque fréquente.
- Examiner les prêts, échanges, doublons, récompenses rejouées et New Game+.
Liaison au joueur et exemplaire unique au serveur sont des options, pas des
règles acquises. Les nouveaux arrivants doivent être inclus dans l'essai.
- Documenter les hypothèses de calcul et confronter la rareté attendue à des
essais. Un taux de butin bas, seul, n'est pas un critère d'acceptation suffisant.
### Périodes d'activité des capes exceptionnelles
Choisir, pour chaque cape concernée, **un modèle temporel explicite** : fenêtre
commune récurrente, durée depuis l'obtention, ou budget de temps d'utilisation.
Une période d'obtention limitée et une période d'effet limitée sont distinctes.
Le contrat précise l'horloge utilisée, début, fin, fréquence, temps hors ligne,
arrêts serveur et effet des changements de mode Vanilla/Real Time. Une fenêtre
liée à une heure réelle doit aussi être essayée du point de vue des joueurs
qui ne peuvent pas se connecter à cette heure.
Le serveur fait autorité. Retirer, rééquiper, prêter, mourir, se reconnecter ou
redémarrer ne doit pas réinitialiser involontairement une durée ou une recharge.
L'interface indique l'état actif/dormant, le temps restant et la prochaine
occasion lorsqu'elle est prévisible. Prévoir l'avertissement et la transition
de fin : pour le vol, définir une sortie praticable, sans mort surprise ni
prolongation illimitée par rééquipement.
## Contrat technique à écrire avant le code
- Une seule cape active par joueur ; effets et conditions calculés côté serveur.
Une préférence visuelle ne peut pas accorder ou prolonger un pouvoir.
- Appliquer et retirer uniquement la contribution de la cape. Préserver un
effet identique venant d'une potion ou d'un familier ; préciser addition,
multiplication, priorité ou plafond pour chaque cumul pertinent.
- Traiter changement de cape, mort, tombe, `keepInventory`, changement de
dimension, reconnexion et New Game+ avec les règles d'inventaire existantes.
Définir aussi le retrait d'un bonus de vie ou d'un malus de vie maximale,
sans soin gratuit par alternance de capes.
- Conserver `sanctuary:zero_cape` et les emplacements existants. Tout ajout de
données persistantes, notamment temporelles, exige un contrat de migration
explicite et des essais sur des copies de sauvegardes de développement.
- Décrire en FR/EN bonus, contrepartie, conditions et durée avant équipement.
Vérifier le rendu porté et les élytres sur la version Minecraft exacte du lot.
## Critères d'acceptation de la future livraison
- [ ] Les trois fiches sont complètes ; valeurs, obtention, cumuls et traitement
temporel sont fixés, avec les conséquences fortes assumées par la conception.
- [ ] Un joueur peut obtenir une cape par la voie de survie retenue, l'équiper,
comprendre son pouvoir et constater son effet réel. Une récompense unique
ne peut pas être réclamée plusieurs fois par reconnexion.
- [ ] Le bonus permanent reste actif au-delà de la durée d'une potion ordinaire
tant que la cape est portée. Stockage et retrait ne laissent aucun bonus indu.
- [ ] Deux joueurs voient un équipement cohérent ; changement rapide de cape,
effet concurrent et prêt ne produisent ni cumul résiduel ni duplication.
- [ ] Les limites de période fonctionnent avant, pendant et après la fenêtre,
y compris après arrêt/reprise et transfert ; la sortie d'un pouvoir dangereux
respecte la transition annoncée.
- [ ] Mort/tombe, `keepInventory`, dimension, reconnexion, redémarrage et
New Game+ conservent les objets et durées selon le contrat de migration.
- [ ] Un compte rendu compare sans cape, chaque cape seule et les combinaisons
les plus fortes, en début et en fin de progression, en solo et à 24 joueurs.
Il relève gains, abus possibles, circulation attendue et ajustements retenus.
- [ ] Aucun pouvoir n'est déclaré équilibré sur la seule base de sa rareté ou
d'un build réussi ; les limites de l'essai sont documentées.
- [ ] `./gradlew check build` passe avec les tests utiles aux effets retenus ;
`./gradlew assemblePack` vérifie la distribution. Versions et note de livraison
suivent [le compteur bêta](versioning.md). Parcours client FR/EN vérifié.
## Décisions encore ouvertes
1. Confirmer « permanent tant que porté » et le rôle des capes à malus seul.
2. Choisir les trois premières capes, leurs valeurs et le devenir de Cape Zéro.
3. Choisir la première acquisition jouable et la rareté visée, puis décider
des échanges et des éventuels quotas.
4. Choisir la règle temporelle des exceptions, leurs cumuls, leur traitement
PvP et les étapes de progression qu'elles peuvent volontairement dépasser.
## Références vérifiées pour cette préparation
- [Vision : progression](vision.md#inventaire-prestige-et-déblocages) et
[récompenses](vision.md#panneaux-et-lootboxes).
- [Service actuel des accessoires](../mods/sanctuary/src/main/java/fr/koka/sanctuary/cosmetics/AccessoryService.java),
[filtre et stockage](../mods/sanctuary/src/main/java/fr/koka/sanctuary/inventory/AccessoryContainer.java)
et [rendu](../mods/sanctuary/src/main/java/fr/koka/sanctuary/mixin/client/AccessoryAvatarRendererMixin.java).
- [Catalogue des familiers beta.032](spawn-eggs-v2-catalogue-beta032.md), à
confronter au code courant lors des essais de cumul.
Validation de ce ticket : lecture du socle, vérification des références locales
et relecture du diff documentaire. Aucun essai de gameplay ni build exécuté
pour cette rédaction ; les critères ci-dessus concernent la future implémentation.
+91
View File
@@ -0,0 +1,91 @@
# CARRY-08 — Fuite des animaux volants portés — beta.114
Contrat du 17 septembre 2026, branche `codex/carried-flight-panic-beta114`.
Un coup reçu par un animal volant porté sur la tête déclenche une fuite de
40 à 60 ticks : il entraîne son porteur vers le haut, dans une direction
aléatoire, avec des embardées. Le serveur choisit le départ et la trajectoire,
transmis au client pour la physique native. Les touches de déplacement et le
regard ne pilotent pas cette brève fuite. La caméra reste libre. Un nouveau coup peut relancer la fuite avec un autre
cap après dix ticks, sans cumuler les vitesses.
Le porteur peut viser et frapper son animal volant. Les animaux ordinaires
reçoivent les dégâts habituels ; le familier conserve son coup amical sans
perte de santé. Les attaques extérieures acceptées déclenchent aussi la fuite.
Les autres protections entre passagers et porteurs restent en place.
Les espèces reprennent le groupe déjà utilisé pour planer, poule comprise.
La vitesse reste bornée, les collisions sont natives et aucun bloc nest
traversé ni déplacé. Déposer lanimal (Maj + clic droit), le perdre, mourir,
se déconnecter ou changer de dimension arrête la propulsion. Immersion,
mode spectateur, vol créatif, élytres et porteur lui-même passager linhibent.
La fin de fuite rend le contrôle au joueur et conserve le planeur existant
si lanimal reste porté. Les montures colossales gardent leur pilotage actuel.
L’état de fuite est temporaire, synchronisé et non sauvegardé. Aucun format
persistant, identifiant existant ou monde personnel nest modifié. Les nouveaux
retours dinterface sont traduits FR/EN. Client et serveur utilisent beta.114.
## Vérifications natives
`CarryPanic114ClientChecks` passe en **56 secondes** avec un serveur intégré
Minecraft 26.3 et un monde plat jetable de graine 114 :
- Véritable ciblage du perroquet sur la tête et frappe avec la touche native,
perte de santé de lanimal ordinaire, décollage et déplacement du joueur.
- Trajectoire synchronisée et priorité sur les touches avant/droite/saut et
le regard ; comparaison exacte avec la vitesse du tick de physique.
- Expiration, suppression de l’état temporaire et retour au planeur normal.
- 32 trajectoires tirées côté serveur couvrent les quatre quadrants, toutes
dans les bornes de durée et de vitesse ; Maj + clic droit natif interrompt.
- Sept espèces ordinaires : poule, chauve-souris, abeille, allay, perroquet,
blaze et breeze. Une vache portée reste protégée et ne déclenche aucun vol.
- Attaque extérieure, mort, activation du vol créatif et détachement arrêtent
ou déclenchent la réaction selon le contrat.
- Plafond bas : aucune traversée ; le passager bloqué est déposé par les
contrôles de place existants et la propulsion sinterrompt.
- Véritable coup amical sur un familier perroquet : lancement sans perte de
santé, puis arrêt immédiat lors du détachement.
```sh
./gradlew :sanctuary:runClientGameTest \
-PsanctuaryClientTests=true -PsanctuaryCarryPanic114ClientTests=true \
-PsanctuaryClientNoVsync=true -PsanctuaryQuickTests=true
```
Marqueurs `CARRY114_NATIVE_FLIGHT_PASS` et `CARRY114_PASS` dans
`build/carry-panic114-client.log`. Capture en jeu relue dans
`build/carry-panic114-evidence/`. Le GameTest dédié reste exclu conformément
au refus antérieur de son EULA. Pas de test Windows, de réseau distant ou de
latence simulée ; aucun monde personnel na été ouvert.
## Livraison
`./gradlew check build assemblePack assembleTestPack -x :sanctuary:runGameTest`
passe en **2 min 22 s**, 125 tâches. Les sources JAR correspondent exactement
aux sources du dépôt. Les classes et ressources hors de ce ticket restent
identiques à beta.113, notamment les sculptures dargile. Les deux packs
contiennent le même JAR, sans monde, GLB ni classes de test.
- Sanctuary-beta.114.mrpack : 10179428 octets, SHA-256
`92aac61c2c00a2206f3f5ac3d170ab058f6765526cf5a2a64c5336261db3f5bf`.
- Sanctuary-Test-beta.114.mrpack : 10198350 octets, SHA-256
`5e8ec1f18e34ca51e09e2738f2b04f9a1bbac5d14c7a7c2d766218a4cff6021f`.
- JAR Sanctuary : SHA-256
`18105b76f63008210c62d5728f999c7abc083a861ecc1de2c7ee87262dde5a40`.
Reçu local : `build/carry-panic114-artifact.json`.
## Publication et installation
La [release beta.114](https://git.botsu.net/koka/sanctuary-beta/releases/tag/beta.114)
est publiée depuis `21845bd7367a260ee6a3d189417a8620aa5bf738`. Le tag exact
et les artefacts sont immuables ; les téléchargements publics sont vérifiés.
Le canal packwiz avance à `c26f3bb59491c9bb4bbdd27f59571ef84f417f7b`.
Deux synchronisations isolées puis deux passages dans **Sanctuary Beta** ont
réussi. Un seul JAR Sanctuary beta.114 est actif, et le second passage conserve
les mêmes hashes. Les **923 fichiers personnels et réglages suivis** restent
identiques. Aucun monde personnel na été ouvert. La sauvegarde ciblée est
`sanctuary-backups/before-beta.114/` dans linstance existante. Reçus locaux :
`build/carry-panic114-isolated.json` et `build/carry-panic114-prism.json`.
+42
View File
@@ -0,0 +1,42 @@
# beta.041 — bébés portés sans ralentissement
Branche `codex/carry-babies-beta041`. Règle retenue : porter un bébé mob ne
ralentit pas le porteur. La précision demandée à l'utilisateur reste ouverte ;
cette interprétation est annoncée pendant le travail.
Les bébés natifs ne contribuent plus au poids de la pile. Les autres passagers
gardent un facteur de 0,75 chacun, avec le plancher global existant de 25 %.
Un joueur portant un bébé compte toujours lui-même lorsqu'il monte sur un
autre joueur. Le bébé ne rajoute pas une seconde pénalité au joueur du bas.
Les familiers utilisent l'âge de leur modèle natif : si celui-ci peut être
affiché en bébé, le familier bénéficie de la même exemption. Une petite taille
aléatoire ou un modèle adulte réduit ne suffit pas à devenir un bébé.
La vérification réutilise le modèle natif déjà mis en cache pour les sons ;
aucune entité supplémentaire n'est ajoutée au monde ou animée côté serveur.
Le calcul reste côté serveur et se remet à jour au prochain tick lorsqu'un
animal grandit sur la tête. Prendre et déposer applique le changement
immédiatement. Le portage, les collisions, le plané et les interactions gardent
leurs règles existantes. Aucun identifiant, attachement ou format de sauvegarde
n'est modifié.
## Validation
`./gradlew check build assemblePack assembleTestPack
-PsanctuaryFocusedTests=carry,familiar,movement,corrections,familiarhit` réussit,
avec **43 tests serveur natifs**. Les scénarios couvrent le bébé dans une pile
de joueurs, la croissance sans dépose, le retour au statut bébé, les familiers
vache/zombie et le dragon adulte réduit ; les anciens tests de poids, cumul de
modificateurs, démontage, plané et réaction aux coups passent également.
Les deux MRpacks correspondent aux 1 441 classes compilées. Seules les classes
de CarryService et FamiliarEntity diffèrent de beta.040 ; les 173 PNG et les
ressources client sont identiques. Aucun nouveau parcours graphique ou test de
connexion réseau dédié : les résultats client de beta.040 restent consignés
dans son reçu. Aucune acceptation d'EULA, installation personnelle ou
publication du canal. Les exports beta.039 et beta.040 restent immuables.
Exports : [pack normal](../build/Sanctuary-beta.041.mrpack) ·
[profil plat rapide](../build/Sanctuary-Test-beta.041.mrpack).
Preuves locales : `build/carry041-check.log`, `build/carry041-artifact.json`.
+73
View File
@@ -0,0 +1,73 @@
# Cartographie — pistes MIT et GPLv3
Relevé du 13 septembre 2026, demandé après la décision d'attendre Xaero.
Sources : métadonnées et versions officielles Modrinth, README et fichiers
LICENSE des dépôts liés par les auteurs. **Aucun mod installé, forké, compilé
ou testé en jeu pendant cette étude.**
## Pistes retenues pour comparaison
| Projet | Licence du projet vérifiée dans les sources | Version Fabric 26.2 identifiée | Intérêt pour Sanctuary |
| --- | --- | --- | --- |
| [Improved Maps](https://modrinth.com/mod/improved-maps) | [MIT](https://github.com/craftycorvid/ImprovedMaps/blob/main/LICENSE) | `1.0`, ID `kS9puVhR`, 21 août 2026 | Atlas géré côté serveur, copie des cartes pour les transmettre ; minimap et grand atlas avec le complément client. |
| [Simple Atlas](https://modrinth.com/mod/simple-atlas) | [MIT](https://github.com/RubberToe-06/simple_atlas/blob/master/LICENSE) | `1.2.0`, ID `6Hy4rXil`, 18 juin 2026 | Grande carte interactive, marqueurs, dimensions et fusion/copie d'atlas ; pas de minimap HUD annoncée dans les fonctions consultées. |
| [Ultimate Map Atlases](https://modrinth.com/mod/ultimate_map_atlases) | [GPLv3](https://github.com/nanakytim/Ultimate_Map_Atlases/blob/main/LICENSE), Modrinth : `GPL-3.0-only` | `26.2`, ID `bgd39YOI`, 17 juin 2026 | Minimap et carte fondées sur les cartes vanilla, atlas ouvrable/fermable et boussole influençant son affichage. |
| [BlueMap](https://modrinth.com/plugin/bluemap) | [MIT](https://github.com/BlueMap-Minecraft/BlueMap/blob/master/LICENSE) | `5.24-fabric`, ID `xvccCRD9`, 10 septembre 2026 | Carte 3D pour navigateur et site ; composant complémentaire, pas une minimap de jeu. |
Pour **chacun de ces quatre projets**, le filtrage des versions publiées par
Fabric + Minecraft `26.3-pre-2` renvoie **zéro version déclarée** au moment du
relevé. Une build 26.2 ne constitue pas une preuve de fonctionnement sur la
cible actuelle. Les pages générales peuvent décrire des fonctionnalités plus
récentes que certains binaires : vérifier le tag et le JAR retenus avant code.
## Lecture pour Sanctuary
**Improved Maps est la première piste à étudier si nous revenons à un fork
libre** : il réunit déjà minimap, grand atlas et cartes transmissibles. C'est
une appréciation de conception fondée sur les fonctions annoncées, pas un
résultat de test. Ses états sont liés à un objet atlas et aux cartes vanilla,
pas encore à l'identité et aux aptitudes Sanctuary. Les marqueurs personnels,
la séparation des trois aptitudes et l'ouverture sans objet depuis le Blocodex
restent à vérifier ou développer.
Simple Atlas est intéressant pour les marqueurs et la circulation de cartes.
Ultimate Map Atlases est une autre base possible pour une approche diégétique
où l'atlas s'ouvre et se ferme. Dans les deux cas, distinguer les découvertes
du joueur des cartes contenues dans un item partagé.
Ces trois solutions reposent sur les cartes vanilla : vérifier le rendu des
îles flottantes, surfaces superposées, dimensions, performances et niveaux de
zoom avant de les choisir comme remplaçant de Xaero. Leur licence principale
ne suffit pas à valider toute la pile : Improved Maps annonce Polymer (LGPLv3)
et Fabric API, Simple Atlas déclare Cloth Config (LGPLv3) dans sa version
26.2 ; Ultimate Map Atlases ne déclare pas de dépendance dans cette fiche
de version, ce qui ne prouve pas qu'il n'en a aucune à l'exécution.
BlueMap peut alimenter le futur site/Galactium avec des vues 3D. Il lit les
données du monde ; ses cartes ne sont donc pas automatiquement limitées aux
découvertes individuelles. Définir les zones et informations publiables avant
tout raccordement aux secrets et à la progression. Aucun rendu de monde ni
serveur web BlueMap n'a été lancé ici.
## Faux équivalents écartés du filtre strict
- **XaeroPlus** est MIT, mais requiert Minimap et World Map, qui restent
All Rights Reserved. Il ne remplace pas leurs moteurs.
- **VoxelMap-Updated** expose un dépôt source, mais le projet Modrinth
déclare All Rights Reserved : il ne répond pas au filtre MIT/GPLv3.
- **Antique Atlas 4** et **Surveyor** sont annoncés sous LGPL-3.0-or-later.
Ce sont des pistes libres, mais distinctes de GPLv3 et hors du filtre exact
demandé. La branche récente d'Antique Atlas 4 ne doit pas être confondue
avec l'ancien **Antique Atlas**, GPLv3, dont la dernière build Fabric
identifiée est `7.1.1-fabric-mc1.18.2`.
- **Map Atlases [Forge]** est GPLv3 mais le relevé ne contient pas de build
Fabric ; ne pas le confondre avec les ports ou variantes portant un nom proche.
## Preuves conservées
`archives/web/references/open-maps-intake-2026-09-13.json` contient les projets,
leurs licences déclarées, URLs des sources, IDs et dépendances des versions,
résultats du filtre exact et empreintes des fichiers LICENSE vérifiés dans
les quatre dépôts retenus. Le créateur a ensuite choisi une carte native Sanctuary :
voir [MAP-01](atlas-beta005.md). Ce relevé reste une référence historique,
sans substitution automatique dans Sanctuary.
+127
View File
@@ -0,0 +1,127 @@
# beta.099 — Progression, catalogue du Métabli et gestes K
Contrat de réalisation, 16 septembre 2026. Branche `codex/catalogue-progression-beta099`.
- Compétences en haut de la colonne gauche, arbre des progrès Minecraft intégré
dessous ; aptitudes à droite. Prestige et historique sous larbre.
- Catalogue visuel natif : trois derniers plans terminés en accueil, statues,
machines, bâtiments, infrastructures, décoration et bibliothèque. Même format
de fiches (aperçu, nom, dimensions, description et sélection).
- Historique personnel local de trois plans terminés, sans autorité sur le monde :
aucun choix de plan nest compté comme construction et chaque placement reste
contrôlé par le serveur. Le stockage est distinct des sauvegardes Minecraft.
- Palette de statue étendue aux blocs ayant un objet utilisable, échantillonnée
depuis le pack actif. Pas de blocs techniques sans objet ni de commandes.
- Clé dorée : modèle plat doutil Minecraft. Texture provisoire vanilla, à
remplacer par la texture que le créateur fournira ; aucune texture dessinée
à sa place.
- K bref ancre au bloc visé ; rappuyer sur le même point tourne de 90 degrés.
K maintenu ouvre le cockpit. Viser le vide ne repositionne pas le projet.
## Contrat de génération et de compatibilité
Le module EXPANSION_HALL conserve sa géométrie, ses appuis, son piédestal et son
identifiant. Les nouvelles pièces natives de la salle indépendante portent un
champ optionnel `SanctuaryMetatable099=true` : neuf parties de Métabli assemblées
sont posées au centre, un bloc au-dessus du piédestal. Une pièce enregistrée sans
ce champ conserve son comportement ancien (aucun ajout), même si un de ses chunks
n’était pas encore décoré. Le champ ne modifie ni le journal ni la graine ni les
identifiants de génération. Aucune régénération ou écriture dans un monde
personnel existant. Les nouvelles salles générées après cette version reçoivent
lexemple ; les salles déjà enregistrées ne sont pas modifiées.
Une fois généré, le Métabli suit les règles normales : le casser le désassemble,
et le reconstruire exige la clé dorée. Pas de réparation automatique au chargement.
Vérification prévue sur nouvelles sauvegardes de développement et round-trip NBT
avec et sans le champ optionnel, génération en plusieurs ordres de chunks.
## Validation
Deux essais natifs sur Minecraft **26.3 finale**, nouveaux mondes de développement :
- `Catalogue099ClientChecks` : **réussi en 1 min 33 s**. Génération et construction
dune statue de Creeper de 32 blocs (1 542 cellules) avec la palette étendue ;
construction des plans Fourneau et Abri, confirmation/annulation, retrait du
créatif pendant la confirmation et refus dun envoi falsifié en survie. Pose
manuelle via le contrôleur Minecraft consommant exactement un bloc. Trois plans
terminés mémorisés, conservés au changement de monde, écrits sur disque et
décodés. Catalogue physique, catégories, aperçus, import/export, abandon et
destruction du Métabli ; K bref/rotation/visée vide/maintien. Arbre des progrès
sous les compétences, clic droit passant par l’écran et activant réellement le
suivi. Interfaces FR/EN, échelles 2 et 3, petite fenêtre et fenêtre 1280 × 800.
- `Temple097ClientChecks`, étendu à la salle : **réussi en 4 min 48 s**, graine
**-4700804240597771092**, génération racine `sanctuary:island_v24`. Origine des
neuf parties du Métabli : **(-56, 169, -117)**, sur le piédestal de pierre lisse.
Les neuf états `part=0..8` sont présents après génération puis après sauvegarde
et réouverture du monde de développement. Aller-retour NBT du nouveau champ ;
ancien tag sans champ restant sans champ. Régression des deux temples natifs,
coffres, pièges et cache de planification réussie.
Les captures dinterface vérifiées sont dans `build/catalog099-evidence/`.
Journaux : `build/catalog099-client.log` et `build/catalog099-hall.log`.
La capture de la salle prise immédiatement après téléportation précédait le
rendu des chunks et nest pas utilisée comme preuve visuelle ; les assertions
sur les blocs, appuis et sauvegardes constituent la validation de sa génération.
Les premiers passages ont détecté deux problèmes corrigés : les petits blocs
(fleurs) favorisés par une comparaison de couleur seule, et la protection native
des vestiges refusant lajout du Métabli hors de leur contexte de génération.
Des clics automatisés immédiatement après redimensionnement donnaient aussi un
rayon de caméra périmé : les interactions physiques répétées du test passent
maintenant par le contrôleur client Minecraft et son protocole normal, avec
contrôle serveur de la consommation et de louverture. Les gestes K et le suivi
des progrès restent testés par les événements dentrée natifs.
`check build assemblePack assembleTestPack` : **réussi en 3 min 7 s**, 124 tâches.
Le GameTest sur serveur dédié est exclu ; les tests client natifs ci-dessus
utilisent uniquement les mondes de développement.
Les deux exports packwiz sont vérifiés : version, sources Java, contenu du JAR,
absence des classes de test et conservation des archives beta.098. Reçu complet :
`build/beta099-artifact.json`.
| Archive | Octets | SHA-256 |
| --- | ---: | --- |
| `Sanctuary-beta.099.mrpack` | 9 908 941 | `9722e2410e18bba34cf5db835facec4bb29fc3bd7f071942e7c8321a60d955ed` |
| `Sanctuary-Test-beta.099.mrpack` | 9 927 866 | `7ce02718c2e4c780197f9984b1ac7bc7a443f78eaa3e7d8ea248aa6b2e75745a` |
Aucune publication du canal ni installation personnelle effectuée.
## Détails du catalogue
Les vignettes de plans utilisent les quads, UV et textures du pack actif.
Les blocs rendus par un moteur spécial sans quads (certains conteneurs) ont une
silhouette issue de leur forme. Les vignettes sont mises en cache (48 au maximum),
invalidées lors dun rechargement du pack. Les échantillons sont bornés à 64 × 64
par texture et prennent la première image des textures animées.
Les statues du catalogue affichent le modèle natif adulte ; le choix ouvre les
réglages de hauteur et de palette avant génération. Sur les petites fenêtres,
la description et les dimensions passent dans linfobulle pour garder le choix
visible sous la vignette.
La palette « Tous les blocs » parcourt les blocs enregistrés ayant un objet,
sans inclure les blocs techniques sans objet ou les blocs de commande. La
comparaison de couleur utilise Oklab ; un coût de forme favorise les volumes
pleins, et les blocs soumis à la gravité sont moins favorisés. Les feuilles
utilisent leur état persistant, comme après une pose par un joueur. Les palettes
mixte, laine et béton restent disponibles.
Lhistorique `schematics/sanctuary/recent-completed.nbt` contient au maximum
trois plans distincts, écrits atomiquement hors du fil de rendu. Il enregistre
une transition dincomplet à complet observée dans le monde, en créatif ou en
survie. Sélectionner un plan, lapercevoir ou lenvoyer au serveur ne suffit pas.
Il sagit dun historique personnel de cette installation, pas dun catalogue
partagé par le serveur. Aucun inventaire ou entité nest enregistré.
K bref utilise un rayon de 96 blocs sur les blocs du monde. La case adjacente à
la face visée sert de centre dancrage horizontal. Une seconde pression sur ce
même point tourne autour de cet ancrage ; déplacer le regard vers un autre
point déplace le plan. Le maintien de 10 ticks ouvre les commandes sans exécuter
le geste bref à la relâche. Les raccourcis remappés utilisent la même logique.
## Texture de la clé
Le modèle est `minecraft:item/handheld` ; la texture provisoire est une copie
de la pioche dorée vanilla. Le créateur pourra remplacer uniquement
`mods/sanctuary/src/main/resources/assets/sanctuary/textures/item/golden_wrench.png`
par son propre PNG. Aucune illustration personnalisée na été créée à sa place.
+40
View File
@@ -0,0 +1,40 @@
# beta.104 — Contraste des argiles grise et noire
Branche `codex/clay-contrast-beta104`, Minecraft 26.3.
Le gris devient plus soutenu et le noir plus sombre, pour distinguer clairement
les trois argiles gris clair/gris/noir. Les nuances du dessin vanilla sont
renforcées : facteur 1,35 au lieu de 0,85. Le mélange conserve davantage de la
couleur des briques fournies (80 % pour le gris, 90 % pour le noir).
Les textures de bloc et de boule dargile sont accordées, toujours en 16 × 16
avec les silhouettes et transparences vanilla. La recoloration exacte par
script reste la méthode choisie par le créateur. Les quatorze autres couleurs
et toutes les briques restent identiques. Le rangement beta.103 est conservé.
[Aperçu avant/après](../build/clay-contrast-beta104-preview.png).
Le générateur écrit désormais son aperçu au nom de la version courante,
pour préserver les aperçus historiques.
## Validation et livraison
`check build assemblePack assembleTestPack -x :sanctuary:runGameTest` réussi
en 2 min 22 s (124 tâches). Comparaison visuelle avant/après effectuée.
Pas de nouvelle session Minecraft pour cette modification de textures.
La vérification des archives confirme exactement quatre textures modifiées :
blocs et boules dargile gris/noir. Toutes les classes Java, recettes, modèles,
autres assets et anciennes archives beta.103 sont inchangés.
Les images conservent leur taille 16 × 16 et leur transparence pixel par pixel.
Le contraste mesuré augmente de plus de 40 % sur chacune des quatre textures.
Luminance moyenne des blocs : gris clair 168,4 ; gris 118,0 ; noir 68,4.
Sources, métadonnées et contenu des packs vérifiés ; `git diff --check` réussi.
Reçu : `build/beta104-artifact.json`.
- [Pack normal](../build/Sanctuary-beta.104.mrpack), SHA-256 :
`83f087cce41316eed620e9764ff0b643c3d5af40fa5b4cebdff5720740708631`.
- [Pack de test](../build/Sanctuary-Test-beta.104.mrpack), SHA-256 :
`adbaad161550ab80dcbc88c27d760e2f735eef9a69ba3f9e2e69bbd25e895147`.
Les GameTests dédiés restent exclus. Aucun monde, canal ou installation
personnelle modifié ; archives locales uniquement.
+90
View File
@@ -0,0 +1,90 @@
# STAT-04 — Sculptures dargile et accroche au bord — beta.113
Contrat du 17 septembre 2026, branche `codex/clay-sculpture-grid-beta113`.
Les miniatures de latelier deviennent des « sculptures dargile » / « Clay
sculptures ». Le nom du modèle reste dans leur infobulle. Les statues en blocs
du Métabli restent une catégorie distincte.
À la pose, le bord horizontal le plus proche du point visé accueille la
sculpture. Lautre axe est centré au pixel entier le plus proche, sur la grille
de 1/16 de bloc. Sur une face latérale, elle touche le bord du bloc support.
À égalité exacte entre deux bords, laxe Z départage ; au centre exact,
le bord côté joueur est retenu. Lorientation suit toujours le regard.
Le bouton Tourner prépare le modèle avant fabrication. Les marges horizontales vides du modèle ne créent pas de décalage au bord.
Tous les sommets restent
sur la grille entière, même avec des dimensions impaires et après rotation.
## Compatibilité préalable
La propriété native additive `anchor` du bloc `sanctuary:statuary` mémorise
`center`, `north`, `south`, `east` ou `west`. Un ancien état sans cette propriété
prend `center` : il reste centré, avec la correction visuelle du demi-voxel.
Le schéma 1, les voxels, noms de modèles et identifiants ne changent pas.
Il ny a aucun parcours ni réécriture de chunks existants. La sauvegarde native
conserve laccroche ; les rotations et miroirs de structures la transforment.
Casser et reposer choisit une nouvelle accroche sans modifier le modèle.
Les nouveaux objets emploient le nom traduit de leur type ; les noms déjà
enregistrés et les noms personnalisés restent conservés. La collision cubique
et la limite dune sculpture par bloc restent inchangées. Client et serveur
doivent utiliser ensemble beta.113.
## Vérifications natives
Le parcours `Statuary106ClientChecks`, étendu par `Sculpture113ClientChecks`,
passe en **1 min 25 s**, sur Minecraft 26.3 et un monde plat jetable de graine 106 :
- 5 120 combinaisons de largeur/profondeur, orientation et accroche : contrôle
de la géométrie émise, grille exacte de 1/16 et absence de dépassement du bloc.
- Modèles avec marges transparentes, repères colorés pour vérifier le sens du
rendu et égalité de la géométrie centrée entre lobjet et le bloc.
- Vrais clics de pose sur les quatre bords : orientation, bord côté serveur,
réception côté client, butin/repose et conservation après reconnexion.
- Contextes natifs de pose sur les faces latérales et coordonnées négatives.
- Rotation/miroir de chaque combinaison daccroche et dorientation ; lecture
des anciens états sans `anchor`, avec et sans `facing`.
- Noms français/anglais des objets fabriqués, menu aux échelles 2 et 3,
fabrication payée, Maj-clic limité à la hotbar et régression Métabli.
```sh
./gradlew :sanctuary:runClientGameTest \
-PsanctuaryClientTests=true -PsanctuaryStatuary106ClientTests=true \
-PsanctuaryClientNoVsync=true -PsanctuaryQuickTests=true
```
Marqueurs `STATUARY113_PASS` et `SCULPTURE113_GEOMETRY_PASS` dans
`build/clay-grid113-client.log`. Captures relues dans
`build/clay-grid113-evidence/`. Le GameTest dédié reste exclu conformément au
refus antérieur de son EULA ; ces essais utilisent le serveur intégré macOS.
Pas de validation Windows ni depuis deux ordinateurs. Aucun monde personnel
na été ouvert.
## Livraison
`./gradlew check build assemblePack assembleTestPack -x :sanctuary:runGameTest`
passe en **3 min 11 s**, 125 tâches. Les sources JAR correspondent exactement
aux sources du dépôt. Les classes et ressources hors du ticket sont identiques
à beta.112. Les deux packs contiennent le même JAR, sans monde, GLB ni test.
- Sanctuary-beta.113.mrpack : 10173807 octets, SHA-256
`ed082ff29a0e9a70fd6786bc024241b276cb516bc09fb5151d6cb324604429bb`.
- Sanctuary-Test-beta.113.mrpack : 10192733 octets, SHA-256
`387f54dc77884a9c9bccdcc1904778ca7f0b2fbda126754fdc49b10a492e4602`.
- JAR Sanctuary : SHA-256
`e242d9fd2edeede922a72a10e988e29c2b49dea52105cfc9fc8573154849ead3`.
Reçu local : `build/clay-grid113-artifact.json`.
## Publication et installation
La [release beta.113](https://git.botsu.net/koka/sanctuary-beta/releases/tag/beta.113)
est publiée depuis `6166d0aa9eba3c3dd84b8b9f1501e3346231ac82`. Le tag exact
et les artefacts sont immuables ; les téléchargements publics sont vérifiés.
Le canal packwiz avance à `e4c16d517bfda4f2b688604cc61945a46a4513a9`.
Deux synchronisations isolées puis deux passages dans **Sanctuary Beta** ont
réussi. Un seul JAR Sanctuary beta.113 est actif, et le second passage conserve
les mêmes hashes. Les **923 fichiers personnels et réglages suivis** restent
identiques. Aucun monde personnel na été ouvert. La sauvegarde ciblée est
`sanctuary-backups/before-beta.113/` dans linstance existante. Reçus locaux :
`build/clay-grid113-isolated.json` et `build/clay-grid113-prism.json`.
+79
View File
@@ -0,0 +1,79 @@
# STAT-03 — Atelier dargile limité à la hotbar — beta.112
Contrat du 17 septembre 2026, branche `codex/clay-workshop-hotbar-beta112`.
Le menu utilise uniquement les neuf cases de la hotbar active du joueur,
avec les deux emplacements de fabrication. Les rangées de réserve, y compris
les extensions Sanctuary, ne sont ni ajoutées au menu ni utilisées par ses
transferts. La rangée choisie avant louverture reste la hotbar courante.
La touche Tab retrouve la navigation des boutons dans ce menu.
Le cadre nine-slice tient dans une hauteur fixe de 202 pixels dinterface.
Il ne grandit plus avec la capacité de linventaire. Le Maj-clic du résultat
cherche uniquement une place dans la hotbar ; sans place, il ne consomme pas
dargile. Les touches 19 restent utilisables, pas l’échange avec la seconde
main. À la fermeture, la restitution native des objets restants est conservée.
Les identifiants, sauvegardes, données de sculpture et orientations beta.111
restent inchangés. Aucun monde existant nest ouvert ou réécrit. Client et
serveur doivent utiliser ensemble beta.112 pour les nouveaux indices du menu
temporaire (11 cases au total).
## Vérifications natives
Le parcours `Statuary106ClientChecks`, étendu à beta.112, passe en **1 min 13 s**
sur Minecraft 26.3 avec serveur intégré et monde plat jetable de graine 106 :
- Menu FR/EN aux échelles 2 et 3 : hauteur fixe, neuf cases de hotbar native,
deux cases de fabrication et absence de panneau dinventaire évolutif.
- Fabrication par Maj-clic depuis la hotbar, avec de largile aussi présente
dans la réserve, lextension et la seconde main : ces stocks restent intacts.
- Rejet des indices de cases absents et de l’échange avec la seconde main.
- Hotbar remplie de neuf piles : Maj-clic sans fabrication ni consommation.
- Une seule place dans une pile de 63 statuaires : production dun seul objet,
coût dune argile, aucune statue transférée dans une case cachée.
- Restitution de largile restante à la fermeture, seize teintes, quatre
orientations, butin/repose et sauvegarde/reconnexion sans fichier GLB.
- Régression du Métabli et annulation dimport conservées.
```sh
./gradlew :sanctuary:runClientGameTest \
-PsanctuaryClientTests=true -PsanctuaryStatuary106ClientTests=true \
-PsanctuaryClientNoVsync=true -PsanctuaryQuickTests=true
```
Marqueur `STATUARY112_PASS` dans `build/clay-hotbar112-client.log` ; captures
relues dans `build/clay-hotbar112-evidence/`. Le GameTest dédié reste exclu
conformément au refus antérieur de son EULA. Pas de test Windows ni depuis
deux ordinateurs ; aucun monde personnel na été ouvert.
## Livraison vérifiée
`./gradlew check build assemblePack assembleTestPack -x :sanctuary:runGameTest`
passe en **3 min 6 s**, 125 tâches. Les sources JAR correspondent aux sources
Java du dépôt. Les classes et ressources hors de ce ticket sont identiques
à beta.111, notamment les données et le rendu orienté des statuaires.
Les deux packs contiennent le même JAR, sans monde, GLB ni classes de tests.
- Pack normal : 10 169 337 octets, SHA-256
`55723a5d7cb99e350ad8fe150e92e0567430b5261ca4685abd900be34068658f`.
- Pack Test : 10 188 262 octets, SHA-256
`987818bf817ad80fd055b97e84bf4775fca54820d7c3055d6fd4089dc7a5a3c0`.
- JAR : SHA-256
`9007a770bbe69db5846f93140d910514f10839cc34ec7c6315a9381d8850adaa`.
Reçu local : `build/clay-hotbar112-artifact.json`.
## Publication et installation
La [release beta.112](https://git.botsu.net/koka/sanctuary-beta/releases/tag/beta.112)
est publiée depuis `1eaa976ecf328c6c20afe5e4eb67c48118f87f95`. Le tag exact
et les artefacts sont immuables ; les téléchargements publics sont vérifiés.
Le canal packwiz avance à `573c5b0d84fcb3e9fec7cc8a83981cf35eaa1ead`.
Deux synchronisations isolées puis deux passages dans **Sanctuary Beta** ont
réussi. Un seul JAR Sanctuary beta.112 est actif, et le second passage conserve
les mêmes hashes. Les **923 fichiers personnels et réglages suivis** restent
identiques. Aucun monde personnel na été ouvert. La sauvegarde ciblée est
`sanctuary-backups/before-beta.112/` dans linstance existante. Reçus locaux :
`build/clay-hotbar112-isolated.json` et `build/clay-hotbar112-prism.json`.
+128
View File
@@ -0,0 +1,128 @@
# INTEGRATE-110 — Atelier d'argile dans la version complète
Demande du 17 septembre 2026 : inclure le Clay Workshop dans la version avec
la fonte saisonnière. Branche `codex/clay-workshop-integration-beta110`.
État : version commune vérifiée, publiée et synchronisée dans Sanctuary Beta.
## Périmètre et compatibilité
La beta.110 réunit le Clay Workshop / atelier d'argile, le Statuaire et l'import
GLB de beta.106 avec les œufs de beta.107, la neige en volume de beta.108 et
la fonte saisonnière de beta.109. Aucune fonction retirée de ces livraisons.
Le Métabli conserve son import de modèles 3D en plans de construction.
Les sources du dossier principal correspondent déjà à cette union : les
30 fichiers de production du Statuaire sont ceux de la livraison beta.106 ;
les traductions FR/EN et listes de mixins sont la réunion exacte des deux bases,
sans conflit de valeur ni doublon. Les autres sources restent celles de beta.109.
Les fichiers Finder `.DS_Store` sont exclus par la configuration Gradle existante.
Les identifiants et contrats de données restent ceux des tickets existants :
[Statuaire](statuary-beta106.md), [œufs](spawn-eggs-acquisition-beta107.md),
[accumulation](snow-accumulation-beta108.md),
[fonte](seasonal-snow-melt-beta109.md). Aucun format changé, aucune migration,
aucune génération ou expansion activée. Les tests créent des mondes de
laboratoire et rouvrent seulement leurs propres sauvegardes jetables.
Les compteurs `mod_version`, `pack_version` et le manifeste packwiz passent
ensemble à beta.110. Les archives beta.106 à beta.109 restent immuables.
Le créateur a ensuite demandé de tout mettre à jour : publication de la
version vérifiée sur le canal stable puis synchronisation de linstance
Sanctuary Beta existante, après sauvegarde des fichiers gérés.
## Validation exécutée
Réutilisation des essais natifs de l'atelier (fabrication, rendu, Métabli et
sauvegarde/rechargement), des œufs (reproduction, éclosion et générateurs), et
de la neige (accumulation et fonte selon les saisons, provenance et rechargement)
sur les mêmes sources réunies. Puis `check build assemblePack assembleTestPack`.
Le GameTest dédié reste exclu conformément au refus antérieur de son EULA ;
les tests natifs tournent avec le serveur intégré.
## Contrat de mise à jour de l'instance existante
Cible unique : `Sanctuary-0.1.0-alpha.1`, nom affiché **Sanctuary Beta**, déjà
reliée au canal `sanctuary-beta/packwiz`. Les instances historiques 26.2 et les
instances importées séparément restent hors de cette synchronisation.
Minecraft 26.3-pre-2 passe à 26.3 finale, Fabric Loader reste en 0.19.5,
Fabric API passe de 0.160.0+26.3 à 0.160.5+26.3 ; Java 25 est déjà configuré.
L'installateur packwiz est chargé de remplacer les deux JAR suivis et d'ajuster
les composants de lancement. Sauvegarde préalable des JAR gérés, du suivi
packwiz, de `instance.cfg` et de `mmc-pack.json` hors de `mods/`.
Aucun monde personnel ne sera ouvert, converti, régénéré ou exploré pendant
l'opération. Les fichiers de sauvegarde, réglages, captures et packs personnels
sont comparés par empreintes avant/après. Seuls les composants gérés du pack et
la version du lanceur changent. Les anciennes règles de génération enregistrées
dans les mondes restent intactes ; aucune promesse de migration automatique de
sauvegarde entre versions Minecraft n'est déduite de la mise à jour des fichiers.
Le canal est publié avec un artefact immuable et testé deux fois dans une
installation isolée avant les deux synchronisations de l'instance existante.
## Résultats de la version commune
Tous les parcours sont exécutés sur les mêmes sources beta.110, sous Java 25,
Minecraft 26.3 et Fabric API 0.160.5+26.3 :
- Atelier d'argile : **1 min 6 s**, `STATUARY106_PASS` et import Khronos indépendant.
Fabrication payante, 16 argiles, placement, butin, Métabli et rechargement sans
le fichier source. Captures relues dans `build/integration110-evidence/`.
- Œufs : **29 s**, `EGGS107_NATIVE_PASS` ; reproduction, variantes, œufs utilisés
et distribués, générateurs et monde sans règles Sanctuary.
- Neige : **42 s**, `SNOW108_NATIVE_PASS` et `MELT109_NATIVE_PASS` ; limite de
deux blocs, saisons, protection des constructions et sauvegarde/rechargement.
- `./gradlew check build assemblePack assembleTestPack -x :sanctuary:runGameTest` :
**2 min 20 s**, **125 tâches**, réussite.
Le JAR est comparé à l'union exacte des classes et ressources des deux livraisons
immuables beta.106 et beta.109. Les traductions et mixins réunissent tous les
éléments, sans doublon. Les sources JAR correspondent aux fichiers Java locaux.
Aucun GLB de test, classe de test, monde ou fichier Finder embarqué.
[Pack normal](../build/Sanctuary-beta.110.mrpack) ·
[Pack Test](../build/Sanctuary-Test-beta.110.mrpack).
| Artefact | SHA-256 |
| --- | --- |
| Normal | `12a7b7279e831bf5d3489d033b875437ad9e8ba1e8cbecc6107a890d312e3029` |
| Test | `ffed5e4fcd32ca32ac96186da8e987905cd7fc4de792afe61aca9ad064895e0b` |
| JAR Sanctuary | `7cb121a6e208cdd184d80ebe61f8bc52b6703b1c1d7611eeeb700aa88d158b46` |
Reçu : `build/integration110-artifact.json`, manifeste des sources :
`build/integration110-source-manifest.json`. Journaux :
`build/integration110-{statuary,eggs,snow,check-build}.log`.
Les essais natifs sont macOS avec serveur intégré ; pas de test Windows ni
connexion depuis un second ordinateur. La neige antérieure non suivie garde
la limite de fonte documentée dans beta.109.
Le script de publication a été corrigé pour autoriser uniquement `icon.png`
en plus des manifestes TOML, après contrôle de l'index et comparaison à l'icône
source. Les JAR restent exclusivement des pièces jointes de release. Cette
correction de distribution ne change aucun binaire ni le tag source beta.110.
## Publication et installation terminées
[Release beta.110](https://git.botsu.net/koka/sanctuary-beta/releases/tag/beta.110),
tag source `468743bfe75087ecb0160b85a0864fa81bcdded5`. Les sources cumulatives
depuis beta.092 sont enregistrées ; les anciens tags et artefacts sont conservés.
Les corrections du script de distribution et ce reçu complètent la branche
source sans déplacer ce tag ni remplacer les binaires.
Canal packwiz : `828353a6e2bd747f4f473ae9fb9e965d38032419`. Chaque manifeste et
l'icône publiés correspondent aux fichiers validés localement. JAR, archives
normale/Test et ZIP d'amorçage Prism sont disponibles dans la release.
Deux synchronisations de l'installateur packwiz dans un dossier neuf, puis deux
dans la même instance **Sanctuary Beta**, ont réussi. Le second passage ne
change aucun fichier géré. Un seul JAR Sanctuary beta.110 est actif, Fabric API
0.160.5+26.3 est installé, Minecraft est réglé sur 26.3 et Loader sur 0.19.5.
L'icône déclarée dans le pack est ajoutée. `instance.cfg` et les **923 fichiers
personnels et réglages suivis** conservent leurs empreintes. Aucun monde ouvert,
converti ou régénéré ; aucune autre instance ni serveur personnel modifié.
Sauvegarde ciblée dans l'instance : `sanctuary-backups/before-beta.110/`.
Reçus ignorés : `build/integration110-publication.json`,
`build/integration110-isolated.json`, `build/integration110-prism.json`.
Les journaux de chaque synchronisation et les listes d'empreintes avant/après
sont conservés dans le dossier de développement et dans la sauvegarde ciblée.
+99
View File
@@ -0,0 +1,99 @@
# STAT-02 — Atelier dargile et orientation — beta.111
Contrat du 17 septembre 2026, branche `codex/clay-workshop-ui-beta111`.
## Résultat attendu
Le menu utilise le cadre `task_frame_unobtained.png` fourni par le créateur,
sans retouche, comme sprite Sanctuary avec les métadonnées nine-slice natives
de Minecraft. Les coins restent à leur taille dorigine. Catalogue, aperçu,
fabrication, explications et inventaire évolutif tiennent dans ce cadre.
La texture reste remplaçable par un pack de ressources.
La pose dun statuaire suit le regard horizontal du joueur, dans les quatre
directions. Le bouton Tourner règle toujours lorientation du modèle importé.
Le placement ajoute ensuite lorientation du bloc sans réécrire ses voxels.
## Contrat de compatibilité préalable
Ajout de la propriété native `facing` au bloc `sanctuary:statuary`, avec `south`
par défaut : cette orientation correspond au rendu historique, sans rotation.
Les anciens états sans propriété prennent cette valeur à la lecture et gardent
leur apparence. Aucun parcours ni réécriture des anciens chunks nest effectué.
Le schéma 1 de la sculpture, ses voxels, ses identifiants et les données des
objets restent identiques. Casser puis reposer utilise le nouveau regard,
sans cumuler les orientations précédentes. Rotation et miroir de structures
transforment l’état du bloc. La collision cubique reste celle déjà livrée.
## Texture
Le fichier fourni, 26 × 26 pixels, est conservé octet pour octet sous
`assets/sanctuary/textures/gui/sprites/container/clay_workshop/frame.png`.
Le fichier adjacent `.png.mcmeta` utilise le moteur `nine_slice` de Minecraft
avec une bordure fixe de quatre pixels et un centre extensible. Lidentifiant
du sprite est `sanctuary:container/clay_workshop/frame` ; aucun sprite global
Minecraft nest remplacé. Les emplacements utilisent `minecraft:container/slot`.
## Vérifications natives
`Statuary106ClientChecks`, étendu aux cas beta.111, passe en **1 min 3 s** sur
Minecraft 26.3, avec serveur intégré et monde plat jetable de graine 106 :
- Fabrication payée, restitutions, Maj-clic et teintes des seize argiles.
- Menu FR/EN aux échelles 2 et 3, cases et actions contenues dans le cadre.
- Six rangées dinventaire à l’échelle 3 : affichage borné et défilement.
- Vrais clics de pose aux quatre points cardinaux : état côté serveur,
transmission au client et rotation du rendu alignés sur le regard.
- Rotation et miroir de structures ; lecture dun ancien état sans `facing`.
- Butin dune statue orientée au nord puis repose vers louest : nouvelle
orientation, mêmes voxels. Sauvegarde/réouverture et transmission sans GLB.
- Conversion au Métabli et annulation dimport conservées.
Commande :
```sh
./gradlew :sanctuary:runClientGameTest \
-PsanctuaryClientTests=true -PsanctuaryStatuary106ClientTests=true \
-PsanctuaryClientNoVsync=true -PsanctuaryQuickTests=true
```
Marqueurs `STATUARY106_PASS`, `STATUARY106_INTEROP_PASS` et `STATUARY111_PASS`
dans `build/clay-ui111-client.log`. Captures dans `build/clay-ui111-evidence/`,
dont les menus français et anglais relus visuellement.
Le GameTest dédié reste exclu conformément au refus antérieur de son EULA.
Les essais tournent sur macOS avec serveur intégré ; pas de validation depuis
deux ordinateurs ni sur Windows. Aucun monde personnel nest ouvert.
## Livraison vérifiée
`./gradlew check build assemblePack assembleTestPack -x :sanctuary:runGameTest`
passe en **2 min 33 s**, 125 tâches. Les sources JAR correspondent exactement
aux fichiers Java du dépôt. Le contenu du mod hors classes et ressources de
ce ticket est identique à beta.110 ; œufs, neige et fonte restent inclus.
Les deux MRpack contiennent le même JAR vérifié, sans monde, GLB ni classe de test.
- Pack normal : `build/Sanctuary-beta.111.mrpack`, 10 169 372 octets,
SHA-256 `f83098f80ac2edb8e32877bf8d5a362cd75f2fa9020593c2c7e4f9abe8b3e9f6`.
- Pack Test : `build/Sanctuary-Test-beta.111.mrpack`, 10 188 298 octets,
SHA-256 `1234b10eb4685d99aa7421de46bc54fd114b791f1b4d63803a09afc926d2c9d9`.
- JAR Sanctuary : SHA-256
`b3e967db7b336b970e4121981e3ef8140fe90f0ecc5850ce90a70caaf3772684`.
Reçu local : `build/clay-ui111-artifact.json`.
## Publication et installation
La [release beta.111](https://git.botsu.net/koka/sanctuary-beta/releases/tag/beta.111)
est publiée depuis le commit source `289697becf19db4acf50d224b1dd3d753eff1153`.
Le tag exact et les artefacts sont immuables ; leurs téléchargements publics
ont été vérifiés. Le canal packwiz avance au commit
`87c9f81761309316c601ed32fa922c1a5893952c`.
Deux synchronisations isolées puis deux passages dans linstance existante
**Sanctuary Beta** ont réussi. Un seul JAR Sanctuary beta.111 est actif ; le
second passage conserve les mêmes hashes. Les **923 fichiers personnels et
réglages suivis** restent identiques. Aucun monde personnel na été ouvert.
La sauvegarde ciblée est dans `sanctuary-backups/before-beta.111/` de cette
instance. Reçus : `build/clay-ui111-isolated.json` et
`build/clay-ui111-prism.json`.
+49
View File
@@ -0,0 +1,49 @@
# beta.077 — tourbillon de nuages au-dessus du vide
Branche `codex/cloud-vortex-beta077`. Minecraft 26.3-pre-2, textures beta.070.
La dernière précision du créateur fixe la couche à **Y = 0**, et non 64.
Les nuages supérieurs restent présents. Un tourbillon continu tourne autour
du centre de l’île de Sanctuary ; son diamètre vaut deux fois celui de l’île
(1 448 blocs / environ 91 chunks pour l’île habituelle de 724 blocs).
Une révolution dure 20 minutes de simulation. Le style garde les cellules de
12 blocs, l’épaisseur de 4 blocs et l’éclairage des nuages Minecraft.
Le serveur transmet uniquement le centre et le diamètre déjà définis par le
générateur. Aucun chunk, bloc, sauvegarde ou génération nest modifié. Les
mondes classiques/plats et les autres dimensions ne reçoivent pas de couche.
Les réglages de nuages désactivés/rapides/détaillés sont respectés.
La géométrie est calculée une fois puis conservée sur le GPU. La rotation et
la couleur passent par les uniforms natifs, sans remaillage à chaque mouvement
de caméra. Les passes normales et de transparence Fabulous réutilisent les
pipelines de nuages du jeu. Les buffers sont libérés à la déconnexion.
Cette livraison inclut les [correctifs de menus beta.076](menu-navigation-beta076.md)
et le retrait du lien web de la [bibliothèque beta.075](plans-library-beta075.md).
## Vérifications
Parcours client natif réussi en 1 min 8 s : formes connectées pour les îles de
512, 724 et 1 024 blocs ; rendu rapide/détaillé/Fabulous (passages OIT réellement
exécutés), rotation, vues au-dessus/dessous/dans la couche, désactivation et
extension finie. Une seule construction de géométrie pendant les mouvements
et changements de qualité. 5 888 cellules pour l’île habituelle.
Captures : `build/cloud077-evidence/`.
`check build assemblePack assembleTestPack` réussit en 3 min 22 s (124 tâches),
avec le serveur dédié exclu conformément au refus de son EULA.
Les 1 693 classes et les sources du JAR correspondent au build ; seuls les
menus et le nouveau rendu changent depuis beta.075. Les textures, données de
jeu et le resource pack restent identiques. Les onze libellés sont présents
en FR/EN. Les deux packs sont vérifiés et 155 archives précédentes restent
identiques. Reçu : `build/cloud077-artifact.json`.
Pas de déploiement dans une installation personnelle ni de serveur dédié.
Les shaders externes qui remplacent entièrement le rendu des nuages restent
à vérifier séparément ; aucune compatibilité non testée nest promise.
## Archives
- [Sanctuary-beta.077.mrpack](../build/Sanctuary-beta.077.mrpack), 9608669 octets.
SHA-256 : `1c3839f086e9545c920e4ebfc13f99a25d0684fa6f2dc8e1b2a842a8e7044045`.
- [Sanctuary-Test-beta.077.mrpack](../build/Sanctuary-Test-beta.077.mrpack), 9627602 octets.
SHA-256 : `1b0c302b9d4d5f59d5e954adbecde4acbacd9409c8cd6a743ccbe116826d7c0a`.
+115
View File
@@ -0,0 +1,115 @@
# RECIPES-035 — collections Minecraft jouables
Branche `codex/collections-beta035`, base beta.034. Contrat tiré des
[67 collections](collections-minecraft.md) et de leur
[inventaire exhaustif](collections-minecraft-inventaire.md).
## Contrat et reprise des habitants
Les **2 042 recettes natives de Minecraft 26.3-pre-2** ont chacune leur collection
principale. Les **126 advancements** ouvrent les familles du tableau : chaque
advancement configuré suffit, sans achat du catalogue ni possession des ingrédients.
Les collections de survie souvrent également à la découverte dun membre admissible
ou dune amorce. Comme depuis beta.024, « découverte » utilise les connaissances
existantes : observation réelle dun bloc, objet connu, inventaire ou statistiques
natives. La lecture dun plan ne crée jamais une découverte de son résultat ou de
ses ingrédients. La fabrication manuelle reste libre.
66 familles de survie et une référence technique sont livrées. La référence
`sanctuary:technical_catalogue` na aucun déclencheur de survie et ne sajoute pas
au carnet personnel, même avec un œuf de familier. Les blocs sans objet et les
blocs non récupérables (bedrock, générateurs, cadres de portail, etc.) ne sont pas
transformés en amorces dinventaire. Les familles sans recette peuvent être
connues sans produire un faux gain de plans.
**Migration additive sans changement de format :** la pièce jointe
`sanctuary:recipe_knowledge` reste en schéma 1 ; aucun champ de sauvegarde nest
ajouté, supprimé ou réinterprété. Au prochain chargement de leur carnet, les
habitants reçoivent les compléments correspondant à leurs collections déjà
ouvertes, objets connus et advancements déjà accomplis. Tous les identifiants et
recettes déjà appris restent conservés, même absents des nouvelles données.
Aucun monde existant nest ouvert ou réécrit par la livraison.
`sanctuary:basic_wood` et `sanctuary:brewing` restent stables. Le bois conserve son
ancien tag `minecraft:planks` et **40 recettes complémentaires** de bateaux et
menuiseries du Nether ; les 170 recettes primaires restent classées séparément.
Lalchimie conserve le sélecteur `minecraft:brewing`, y compris les recettes de ce
type ajoutées par un datapack ou un mod, en plus de ses 286 recettes primaires.
Cette compatibilité ne révèle pas les pistons ou les boucliers avec une planche.
Lachat unique du catalogue reste à **4 niveaux**.
## Données et consultation
Les 67 JSON sont dans `data/sanctuary/sanctuary_recipe_collections/`. `recipes`
contient le classement principal ; `additional_recipes` préserve les accès
historiques. `items`, `item_tags` et `advancements` sont des portes alternatives.
`members.blocks` / `members.items` conservent le classement exact des identifiants
pour les futures fiches ; ces listes ne constituent pas des possessions requises.
`operator_only` empêche une définition technique de devenir un déblocage personnel.
Le chargement indexe objets, tags et advancements une fois par rechargement de
ressources. Une collection déjà enseignée ne reparcourt pas ses recettes à chaque
actualisation dhabitant. `/reload` renouvelle cet index et réconcilie une fois
les carnets ; aucune recette déjà apprise nest retirée.
**Discovery → Recettes** affiche les noms FR/EN des collections connues. Laccès
au catalogue reste en haut, avant la liste, afin que les nouvelles collections
ne repoussent pas le bouton douverture. Les notifications beta.034 signalent
les collections nouvellement ouvertes et regroupent les lots ; les reconnexions
ne rejouent pas lhistorique.
Les fiches détaillées dobtention, le musée visuel de tous les blocs, les gestes
sans recette (commerce, oxydation, croissance…), quêtes et bounties restent à
concevoir. Aucune recette artificielle ni expansion de dimension nest ajoutée.
## Compléter le catalogue
Modifier les deux documents de référence, puis exécuter :
```sh
python3 scripts/compile_collections.py --write
python3 scripts/compile_collections.py
```
Le contrôle compare les deux directions advancement/collection, les 2 042 recettes
uniques, les 1 815 identifiants distincts, les amorces, les définitions serveur et
les noms FR/EN. Il est intégré à `check` ; les tests Minecraft confrontent ensuite
ces identifiants aux registres et recettes réellement chargés. Le générateur ne
télécharge rien et ne modifie ni les recettes natives ni les documents sources.
## Vérifications et livraison
`./gradlew check build assemblePack assembleTestPack` avec les suites
`collections,recipes,notifications,progression,cycle` réussit : **28 tests serveur**.
La matrice exerce les **126 advancements**, les 66 voies de découverte des familles,
les identifiants des registres réellement chargés, les limites bois/machines,
les amorces du lit, de lalambic, du fabricateur et de la brosse, lisolation des
habitants et la reprise des carnets beta.034. Les 2 042 recettes primaires sont
comparées à lensemble des recettes vanilla chargées, sans identifiant manquant.
Le parcours client natif final réussit sur le profil plat : achat réel du
catalogue, familles enseignées par advancement sans ingrédients, consultation
effective des plans de Shulker, transfert depuis la sixième rangée, vue opérateur
et révocation, notifications, rendu FR/EN après rechargement terminé, puis
véritables New Game+, mort/respawn et redémarrage du serveur. Les nouvelles
collections et le reçu du catalogue sont conservés dans ces trois passages.
Les captures sont dans `build/collections035-evidence`.
Lassemblage final après les vérifications client utilise `assemblePack
assembleTestPack -x check`, sans répéter les tests serveur déjà passés. Les classes
du moteur serveur correspondent à celles vérifiées ; ZIP, 1 322 classes Sanctuary,
67 définitions, traductions, dépendances imbriquées et profil facultatif ont été
comparés aux builds. JEI conserve exactement son binaire `30.32.0-sanctuary.2`.
- [Sanctuary-beta.035.mrpack](../build/Sanctuary-beta.035.mrpack), pack normal.
- [Sanctuary-Test-beta.035.mrpack](../build/Sanctuary-Test-beta.035.mrpack), profil plat rapide.
SHA-256 normal : `dfcf5927eaef183fe582b95454480849a08353561cb66d83a514d8a0274b5c60`.
SHA-256 test : `f94f216b5b09c7ebeafea45a8d735978a4efc354aa245ffbfd993ee7e6db2b24`.
Reçu : `build/collections035-artifact.json`. Journaux :
`build/collections035-check.log`, `build/collections035-client-final.log` et
`build/collections035-assemble-final.log`.
Client et serveur beta.035 ensemble, sur Minecraft 26.3-pre-2 / Loader 0.19.5 /
Fabric API 0.160.0+26.3. Les exports antérieurs sont inchangés. Aucun canal de
distribution, instance Prism personnelle ou monde existant na été modifié.
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
+83
View File
@@ -0,0 +1,83 @@
# beta.118 — Murets en briques de couleur
Ticket sur `codex/colored-brick-walls-beta118`, Minecraft 26.3.
Les seize familles de briques reçoivent un muret natif `WallBlock`, sous
l'identifiant `sanctuary:<couleur>_brick_wall`. Chaque muret réutilise la texture
de briques fournie de sa couleur, sans nouvelle image ni recoloration.
Les murets forment une série de seize dans **Blocs colorés**, après les dalles
et avant les argiles, dans l'ordre des couleurs vanilla retenu en beta.103.
Les libellés sont traduits FR/EN.
Recettes : six briques de même couleur, en deux rangées de trois, donnent six
murets ; le tailleur de pierre donne un muret par bloc de briques. Les deux
recettes par couleur rejoignent la collection Argile et briques et leurs
déblocages. Totaux des ajouts colorés : 80 blocs, 112 objets dont ces blocs,
224 recettes. Les recettes et identifiants préexistants sont conservés.
Piliers, raccords entre couleurs et aux murets vanilla, côtés hauts/bas,
collisions et immersion dans l'eau viennent du jeu. Tags natifs `walls`
pour blocs et objets, pioche et butin de la bonne couleur. États, modèles
multipart et butins sont repris des ressources exactes Minecraft 26.3.
La génération reste reproductible dans `tools/generate-colored-bricks.py` ;
elle conserve les ajouts externes à ses briques, notamment la recette du
Clay Workshop et les membres Sculpture/Atelier. Le compilateur des collections
reste leur seul générateur. Aucun ajout au
terrain, changement de format ou migration de sauvegarde. Les dépendances
et le pack de textures intégré beta.090 restent inchangés.
## Vérifications et livraison
Le scénario natif `Bricks102ClientChecks`, complété par `Walls118Checks`,
passe en **38 secondes** sur un nouveau monde plat de graine 102 avec serveur
intégré Minecraft 26.3 :
- Seize murets réellement posés, dont une seconde série dans l'eau.
- Recette de six murets et tailleur de pierre pour chaque couleur ; les
anciennes recettes de briques, dalles, escaliers et argiles passent aussi.
- Raccords entre couleurs et au muret vanilla, retrait des piliers intermédiaires,
côtés relevés sous un bloc plein, collisions identiques au muret vanilla.
- Eau conservée, pioche, butin de la bonne couleur, collection et recettes
découvertes, recette du Clay Workshop toujours découverte, série créative
de seize dans l'ordre natif.
- États et modèles de tous les blocs de la famille vérifiés, sans texture
manquante ; sauvegarde et reconnexion conservent les murets et leur eau.
Log : `build/walls118-client.log`, marqueur `WALLS118_PASS`. Capture de la
galerie relue dans `build/walls118-evidence/`. Aucun essai Windows ou LAN ;
GameTest dédié exclu selon le refus antérieur de son EULA. Aucun monde personnel
ouvert. La régénération finale conserve à l'identique 2 024 fichiers de
ressources et métadonnées.
`check build assemblePack assembleTestPack -x :sanctuary:runGameTest` réussit
en **2 min 5 s**, 125 tâches dont 101 exécutées. Sources et JAR concordants,
intégrité ZIP, versions, modèles natifs, recettes et empreintes vérifiés.
La comparaison avec beta.117 limite les changements de classes à
`ColoredBricks` et ses classes internes ; les sculptures et chapeaux restent
identiques. Les textures existantes sont toutes conservées octet pour octet.
- `Sanctuary-beta.118.mrpack` : 10216437 octets, SHA-256
`75bb04aad981644888690aaeda9a293a94c5d32f6439ca24613365a41aba1b6b`.
- `Sanctuary-Test-beta.118.mrpack` : 10235359 octets, SHA-256
`f7f0a177b8472f0e8c34ad99a1ccef5d61396014017d260e934e910c4e6eb00f`.
- JAR Sanctuary :
`fc6edf4046a8ace357d561ed942213a22c7a27164fa160cdb4316f72ec302575`.
Reçu : `build/walls118-artifact.json`.
## Publication et instance
La [release beta.118](https://git.botsu.net/koka/sanctuary-beta/releases/tag/beta.118)
est publiée : JAR, MRpack normal/Test et amorçage Prism, téléchargements publics
et empreintes vérifiés. Le tag immuable désigne
`0a81b3c1471c43d705eec4e31a8f6f1820049ca8`. Le canal packwiz avance au commit
`e6bab433bea9528f67d39af0d6c7bcb6443e4817`.
Deux synchronisations isolées puis deux dans l'unique instance **Sanctuary
Beta** réussissent, la seconde passe laissant les fichiers gérés identiques.
Un seul JAR Sanctuary beta.118 est actif. Les 923 fichiers personnels et
réglages suivis sont inchangés ; aucun monde personnel n'a été ouvert.
Copie préalable des fichiers remplacés dans `sanctuary-backups/before-beta.118/`.
Reçus : `build/walls118-isolated.json`, `build/walls118-prism.json`.
+73
View File
@@ -0,0 +1,73 @@
# beta.102 — Briques et argile de couleur
Branche `codex/colored-bricks-beta102`, Minecraft 26.3.
## Contrat
Les seize PNG de briques fournis sont présents. Ils sont intégrés sans altération.
Par couleur : bloc de briques, dalle, escalier, bloc dargile pastel, boule dargile
et brique (items). Les 64 blocs apparaissent dans longlet natif des blocs colorés,
les 32 items dans les ingrédients. Les composants ont des identifiants stables
`sanctuary:<couleur>_*` et des libellés français et anglais.
La recoloration exacte par script a été choisie explicitement par le créateur.
Les silhouettes, la transparence et les nuances des textures vanilla 16 × 16
sont conservées ; les couleurs proviennent des PNG fournis. Aucun dessin IA.
Recettes natives : teinture de largile et des briques, assemblage des blocs,
cuisson de largile en briques, argile colorée en terre cuite vanilla de même
couleur, fabrication des dalles/escaliers et tailleur de pierre. Les recettes
rejoignent la collection existante argile/briques et les découvertes Sanctuary.
Dalles doubles, escaliers connectés, orientation, eau, outils et butin utilisent
les mécanismes natifs. Les blocs ne sont pas ajoutés à la génération du terrain.
Aucune migration de sauvegarde et aucune modification dun monde existant.
## Génération reproductible
`tools/generate-colored-bricks.py --minecraft-jar <minecraft-client.jar 26.3>`
requiert Python avec Pillow. Les briques sources sont conservées dans les assets
et les couleurs/empreintes sont consignées dans `tools/colored-bricks-palette.json`.
Les extensions de collection sont compilées par `scripts/compile_collections.py`
depuis `scripts/data/collections-sanctuary.json` ; le recensement vanilla reste intact.
## Validation native
`Bricks102ClientChecks` sur Minecraft 26.3, monde plat neuf avec serveur intégré :
- 16 familles, 64 blocs et 96 entrées ditems (dont 64 BlockItems).
- 192 recettes chargées ; fabrications, teintures, cuissons et tailleur exécutés.
- Butin des briques et escaliers ; dalle simple/double ; argile normale et Toucher de soie.
- Tags pioche/pelle et états immergés des dalles/escaliers.
- Onglets natifs : 64 blocs colorés, 32 ingrédients.
- Tous les états des 64 blocs possèdent des modèles cuits sans texture manquante.
- Découverte de largile : la collection ajoute les nouvelles recettes.
- Sauvegarde/réouverture du monde neuf : blocs et état de dalle haute conservés.
Parcours final réussi en 41 s, `build/bricks102-client.log`.
[Aperçu des textures](../build/colored-bricks-beta102-preview.png) ·
[Capture Minecraft](../build/bricks102-game.png).
La vérification du rendu utilise le client natif local. Aucun test multijoueur
distant nest revendiqué, aucune sauvegarde personnelle ni installation modifiée.
## Livraison
`check build assemblePack assembleTestPack -x :sanctuary:runGameTest` réussi
en 2 min 19 s (124 tâches). Les GameTests du serveur dédié restent exclus ;
le parcours client/serveur intégré décrit ci-dessus a été exécuté séparément.
`git diff --check` et la régénération identique octet pour octet sont vérifiés.
Les archives, sources, 192 recettes, 192 progrès de recettes, 96 libellés FR/EN,
les seize PNG fournis et les transparences vanilla ont été contrôlés.
La comparaison avec beta.101 ne trouve aucune autre classe de jeu modifiée
que linitialisation Sanctuary et les trois nouvelles classes ColoredBricks.
Les archives beta.101 conservent leurs empreintes.
Reçu : `build/beta102-artifact.json`.
- [Pack normal](../build/Sanctuary-beta.102.mrpack), 10 052 986 octets.
SHA-256 : `f324db41e9992df0635d870a766ec9c486167d7fc2e1ed5080f05deaf824d3c4`.
- [Pack de test](../build/Sanctuary-Test-beta.102.mrpack), 10 071 908 octets.
SHA-256 : `bf6b4a207f6b952295c01d59e788eb742d7dbee18ff5e0ad1e61ba78078348fb`.
Livraison locale, sans publication de canal, tag ou déploiement Prism.
+33
View File
@@ -0,0 +1,33 @@
# beta.103 — Rangement des blocs colorés
Branche `codex/colored-bricks-order-beta103`, Minecraft 26.3.
Dans Blocs colorés, les ajouts sont regroupés par type : les 16 blocs de briques,
puis les 16 escaliers, les 16 dalles, les 16 blocs dargile. Dans Ingrédients :
les 16 boules dargile, puis les 16 briques.
Chaque série suit lordre de couleurs de longlet natif Minecraft 26.3,
vérifié dans `CreativeModeTabs.bootstrap` : blanc, gris clair, gris, noir,
marron, rouge, orange, jaune, vert clair, vert, cyan, bleu clair, bleu, violet,
magenta, rose. Lordre denregistrement des blocs/items reste stable.
Les identifiants, recettes, textures et sauvegardes sont inchangés.
## Validation et livraison
`check build assemblePack assembleTestPack -x :sanctuary:runGameTest` réussi
en 2 min 41 s, 124 tâches. `git diff --check` réussi. Pas de nouveau test
ni de nouvelle session graphique pour ce changement limité au rangement.
Les sources et les deux archives ont été vérifiées. Les textures, recettes,
modèles et autres données sont identiques à beta.102, dont les archives sont
conservées. Seul le comportement de `ColoredBricks` change ; la classe interne
Stairs conserve exactement son code exécutable (seuls les numéros de lignes
de débogage changent). Reçu : `build/beta103-artifact.json`.
- [Pack normal](../build/Sanctuary-beta.103.mrpack), SHA-256 :
`5c0b475410c7586275a59a8b14ac1770648f8196983e62c85a98dcd0fa5a1207`.
- [Pack de test](../build/Sanctuary-Test-beta.103.mrpack), SHA-256 :
`222765733711a08861e25db94ae12a4a6483bc11dbfdcaf54930786c10511d0e`.
Les GameTests du serveur dédié restent exclus. Aucun monde personnel,
aucune installation ni aucun canal de distribution modifié.
+36
View File
@@ -0,0 +1,36 @@
# beta.078 — Combats / Battles
Branche `codex/battle-menu-beta078`. Minecraft 26.3-pre-2 ; textures beta.070.
Le bouton et le titre « Duels et arènes » deviennent **Combats** en français
et **Battles** en anglais. Le lien depuis les duels de familiers utilise
également ce libellé. Les annonces dinscription indiquent le menu pause,
et les résultats renvoient au nouveau nom pour récupérer les gains.
Le [plan des menus](menu-architecture.md) conserve cette appellation. Le reste
de cette réorganisation reste une proposition ; l’économie est différée.
Aucune règle de combat, sauvegarde ou transaction nest modifiée.
## Vérification
`check build assemblePack assembleTestPack` réussi en 2 min 33 s, avec le
serveur dédié exclu conformément au refus de son EULA. Après la précision
du créateur sur le pluriel, les ressources et packs sont reconstruits en
8 s ; vérification finale des quatre traductions par langue et de leurs
paramètres de formatage.
Les 1 693 classes du JAR sont identiques à beta.077. Les textures, données
de jeu et le resource pack restent inchangés. Les deux archives embarquent
le JAR vérifié ; les archives beta.077 sont conservées à lidentique.
Reçu : `build/battle078-artifact.json`. Journaux : `build/battle078-check.log`
et `build/battle078-assemble.log`.
Pas de nouveau parcours client graphique pour ce changement de libellés.
Aucun déploiement dans une installation personnelle.
## Archives
- [Sanctuary-beta.078.mrpack](../build/Sanctuary-beta.078.mrpack).
SHA-256 : `9adfa5b5b8d49ed10943121ac2a2561d880886925a5f76db5ba98f0377d8d7e3`.
- [Sanctuary-Test-beta.078.mrpack](../build/Sanctuary-Test-beta.078.mrpack).
SHA-256 : `92bc1d59723546c31a6e7476dd9f53225c7957e5180091dfeaeade69ff265a86`.
+351
View File
@@ -0,0 +1,351 @@
# Familiers — proposition d’équilibrage v1
Une [proposition v2 du 14 septembre 2026](spawn-eggs-refonte-v2.md) reprend
la fréquence dusage, la complémentarité avec les potions et les combinaisons
libres entre joueurs. Elle reste documentaire et non implémentée ; cette v1
conserve son rôle de référence de la première implémentation.
Passe de conception du 13 septembre 2026, pour les **88 œufs Minecraft de
26.3-pre-2** présents dans Sanctuary. Les cinq raretés sont : **commun, peu
commun, rare, extraordinaire, légendaire**.
**Première implémentation dans [beta.019](companion-powers-beta019.md), à éprouver.**
Les [ajustements beta.020](familiar-interactions-beta020.md) remplacent les limites
v1 de perception et de téléportation à travers les murs, et corrigent le freinage
des chutes. Cette proposition reste la référence initiale pour les essais ;
elle ne constitue pas un équilibrage déjà démontré. Les pouvoirs restent désactivés
dans beta.018. L[inventaire historique](companion-powers-inventory.md) conserve
les anciennes définitions de 26.2 ; ce document propose de les remplacer.
Les 25 anciennes variantes ItsAlive restent hors de cette première passe :
elles ne font pas partie du pack actuel.
## Intention
Chaque familier donne **un passif identifiable et un actif qui change un geste
de jeu**. Un œuf commun doit pouvoir rester un choix de fin de partie. La rareté
décrit la difficulté dobtention et lampleur de lintervention ; elle ne doit pas
devenir un multiplicateur général de dégâts, de vie ou de rendement.
On part de trois cœurs, trois barres de faim et trois bulles de respiration.
Les familiers complètent les compétences et les aptitudes. Ils ne donnent pas
de rang dinventaire, de tri gratuit, de nage rapide sans Nage, de carte complète,
de recettes inconnues, de minage groupé au-delà du rang acheté ou de vol permanent.
Les anciens bonus permanents Force II, Résistance II, respiration aquatique
illimitée, régénération gratuite et trêve générale avec les monstres disparaissent.
| Rareté | Place dans le jeu | Obtention proposée | Recharge habituelle |
|---|---|---|---|
| Commun | Un geste quotidien devient plus agréable ; une petite manœuvre utile. | Découverte et premier objectif lié à lespèce. | 2060 s |
| Peu commun | Une spécialité nette : potager, plongée, troupeau, déplacement, protection. | Quelques objectifs différents et une offrande adaptée. | 3075 s |
| Rare | Un véritable outil de métier ou une action tactique marquante. | Expédition, maîtrise dune activité ou petite quête propre au mob. | 40100 s |
| Extraordinaire | Une capacité qui transforme brièvement une situation, parfois en groupe. | Défi important, lieu spécifique et composant difficile à obtenir. | 60150 s |
| Légendaire | Un moment exceptionnel, visible et préparé, avec une identité forte. | Aboutissement dune grande aventure ; déblocage collectif puis épreuve personnelle. | 180 s |
Les chiffres de recharge ci-dessous priment sur ces fourchettes. La rareté de
l’œuf est indépendante de la fréquence dapparition naturelle du mob : un
Creeper peut être courant dans le monde et son lien de familier être rare.
La répartition couvre **22 communs, 22 peu communs, 25 rares, 16 extraordinaires
et 3 légendaires**. Ces nombres ne sont pas des probabilités de tirage :
lobtention proposée passe par des objectifs identifiés, pas par une loterie.
## Règles communes proposées
### Équipement, coût et rythme
- Un seul familier équipé, donc un seul passif et un seul actif. Le passif prend
effet après 10 secondes avec le même œuf. Les améliorations temporaires quil
donne cessent au déséquipement ; cela ne supprime pas les objets déjà déplacés
ou les blocs déjà construits légitimement.
- Une aptitude générale **Lien actif**, proposée à **4 niveaux**, ouvre la touche
de pouvoir configurable. Les passifs viennent avec le familier. La rareté
najoute pas une série de taxes en XP. Ce nom et ce prix sont implémentés dans beta.019 ; G est proposé par défaut
et reste reconfigurable.
- La recharge appartient au joueur et au slot de familier : utiliser un actif
bloque tous les autres jusqu’à la fin de cette recharge. Changer d’œuf, mourir,
se reconnecter ou passer en New Game+ ne la réinitialise pas. Les échéances
utilisent le temps réel du serveur et sont conservées ; le temps hors ligne
peut s’écouler normalement. Les effets actifs, eux, ne travaillent pas hors ligne.
- Pas de barre de mana supplémentaire ni de coût de faim uniforme. Les dépenses
sont indiquées : ingrédients, lait, munition, durabilité ou faim pour un soin.
Une action impossible ne consomme rien et ne lance pas la recharge. Une action
réellement déclenchée, même esquivée, dépense ses ressources et sa recharge.
- Aucun bonus de vie maximale, de faim maximale ou de taille de groupe miné/posé.
Les soins ne dépassent jamais la vie maximale. **Un cœur = 2 points de vie
(PV)** ; une demi-barre de faim = 1 point de nourriture.
- Les bonus de vitesse continus et temporaires dun même familier ne se cumulent
pas : prendre le plus fort. Une impulsion ponctuelle reste limitée par sa
distance annoncée. Une plateforme ou suspension de familier ne constitue pas
un nouvel appui pour relancer un pouvoir aérien.
- Un bonus de respiration ralentit la consommation dair, sans remplir la jauge.
Une réserve dair active ajoute seulement la quantité annoncée, plafonnée à
la capacité achetée. Les déplacements aquatiques restent lents sans Nage.
- Un déplacement respecte les collisions et les zones autorisées. Pas de traversée
dune paroi, de porte fermée ou dun accès réservé. Une capacité de sauvetage
nimmunise pas contre la lave, le vide ou une chute ultérieure.
### Production, progression et informations
- Le compagnon invincible reste sans collision et nest pas une cible qui absorbe
les attaques. Il ne combat, ne récolte, ne pond, ne se reproduit et ne produit
aucune ressource de manière autonome.
- Un actif de récolte transforme ou ramasse uniquement des ressources réelles.
Plantation, construction et carburant utilisent le stock du joueur ; les outils
perdent leur durabilité. Une case dinventaire verrouillée reste inutilisable.
- Les plafonds de récolte ne cumulent pas un deuxième groupe avec le vein mining.
Un actif exécute soit son geste spécialisé, soit le geste groupé normal. Les
outils requis, protections, portées et limites de compétences restent applicables.
- Les gains de rendement plafonnent à **+10 % au total**, y compris le favori et
les autres futurs systèmes. Pas de bonus aux minerais, au butin de mort, à lXP,
aux charges de faction, aux monnaies rares ou aux probabilités d’œufs.
- Un bonus de production se valide sur un cycle complet avec le même propriétaire
et le même familier. Un seul bonus par culture, animal ou machine et par cycle :
équiper au moment de récolter, multiplier les joueurs ou casser/reposer ne crée
pas de nouveau droit. Chaque cycle reste traçable côté serveur.
- Un repérage aide à chercher dans les chunks déjà chargés ; il ne charge pas de
terrain distant. Il ne révèle ni coffres privés, ni contenu de coffres fermés,
ni identité ou position précise dun joueur caché, ni secret du scénario. Les marqueurs temporaires de pouvoir
restent locaux au monde : ils ne débloquent aucune fonction de lAtlas.
- Les filtres par objet ou espèce ne proposent que les découvertes personnelles.
Un sonar peut signaler une présence anonyme, sans révéler son nom ou compléter
une entrée du Blockodex à travers un mur.
### Combat et coopération
- Les dégâts annoncés sont **par cible, avant protection, en PvE**. Les coups
respectent les immunités et fenêtres dinvulnérabilité natives : pas de double
impact caché par tick. Les dégâts viennent du joueur, jamais dune IA invincible.
- Les bonus offensifs passifs concernent les monstres, pas les autres joueurs.
En PvP, les interventions offensives viennent des actifs annoncés ci-dessous.
- En PvP, les dégâts additionnels de familier sont plafonnés à **2 PV par cible
pour toute lactivation**, y compris projectiles, zones, poison et dégâts différés.
Les dégâts dune arme utilisée normalement restent ceux de larme ; seul son
supplément de familier entre dans ce plafond. Aucune pénétration darmure en PvP.
- La visibilité et les droits du joueur sont vérifiés au déclenchement et à
limpact. Pas dexplosion qui casse le terrain, dincendie propagé, dattaque à
travers une paroi ou de commande opérateur. Les boss résistent aux déplacements
forcés et aux entraves, mais prennent les dégâts permis par leurs règles natives.
- Les ralentissements PvP sont limités à **20 % et 2 secondes** ; pas dimmobilisation
ni daveuglement dun joueur. Après une entrave de familier, une cible est protégée
des nouvelles entraves de familiers pendant 6 secondes. Les déplacements forcés
dun joueur ne dépassent pas 1 bloc ; leurs dégâts de chute attribuables au pouvoir
entrent dans le plafond PvP. À défaut de cette attribution fiable, on désactive
la poussée PvP au premier portage.
- Les tirs et charges ont un signal perceptible dau moins 0,5 seconde ; les actifs
légendaires annoncent leur départ durant 1,5 à 2 secondes. On peut esquiver,
interrompre une canalisation en blessant son auteur ou se mettre à couvert.
- Les soins et déplacements de groupe concernent le propriétaire et des alliés
consentants, jamais des inconnus déplacés de force. Un même buff ne se cumule pas
entre familiers. Un soin, rechargement ou suspension de consommation dair impose à son bénéficiaire une
récupération égale à la recharge du pouvoir reçu, pour empêcher les rotations
de soigneurs et les échanges entre espèces. Cette récupération est commune à
tous les familiers pour chaque famille deffet : soin dun côté, air de lautre.
Elle est conservée à la reconnexion et au prestige. Les bonus de réduction de dégâts venant des familiers plafonnent à
25 %, sauf le coup unique explicitement protégé par une garde.
- Les effets de peur ne fonctionnent que sur les petits monstres ordinaires,
pendant au plus 2 secondes sur un monstre déjà engagé. Aucun raid ou boss ne se
désactive. Une cible effrayée bénéficie ensuite de 10 secondes de répit.
## Commun — gestes quotidiens et premières aventures
| Familier | Passif | Actif proposé | Recharge |
|---|---|---|---|
| Chauve-souris (`bat`) | **Adaptation obscure** : après 3 s immobile dans lobscurité, les surfaces visibles s’éclaircissent légèrement ; aucune vision à travers la roche. | **Écho** : pendant 6 s, indique la direction de trois présences vivantes maximum à 12 blocs ; aucune identité ni position précise derrière une paroi. | 30 s |
| Chat (`cat`) | **Pattes de velours** : 20 % de dégâts de chute. | **Feulement** : repousse jusqu’à trois Creepers ou Phantoms à moins de 5 blocs et les fait hésiter 2 s ; aucune immunité ensuite. | 45 s |
| Poule (`chicken`) | **Petites ailes** : la distance de chute tolérée augmente de 1 bloc. | **Battement** : ralentit la descente pendant 2 s, sans remonter et sans effacer la chute déjà accumulée. | 30 s |
| Morue (`cod`) | **Petites branchies** : lair diminue 10 % moins vite. | **Dernière bulle** : rend une bulle dair ; utilisable seulement dans leau, sans dépasser la capacité achetée. | 45 s |
| Vache (`cow`) | **Lait sélectif** : boire du lait conserve les effets bénéfiques. | **Lait partagé** : consomme un seau de lait, rend le seau vide et retire Poison/Faim au porteur et à deux alliés consentants à 3 blocs. | 60 s |
| Âne (`donkey`) | **Pas chargé** : 10 % d’épuisement dû au sprint. | **Déchargement** : transfère au plus 18 piles existantes vers le coffre visé à portée normale, seulement des types déjà présents ; hotbar et équipement exclus. | 30 s |
| Renard (`fox`) | **Approche discrète** : 15 % de distance de détection initiale par les animaux sauvages fuyants. | **Plongeon** : petit bond horizontal de 3 blocs, puis ramasse une pile visible à larrivée si une case est disponible. | 25 s |
| Grenouille (`frog`) | **Berges faciles** : se déplacer au sol dans un bloc deau peu profonde est 10 % plus rapide ; ne débloque pas la nage. | **Langue** : attire une pile dobjets visible à 6 blocs ; peut aussi attirer dun bloc un petit monstre ordinaire, sans dégâts. | 20 s |
| Cheval (`horse`) | **Cavalier** : +10 % de vitesse à une monture terrestre réellement chevauchée, sans améliorer son saut. | **Galop** : +25 % de vitesse terrestre pendant 4 s, monté ou à pied ; exige la faim nécessaire au sprint. | 35 s |
| Lama (`llama`) | **Caravanier** : les laisses du joueur tolèrent 2 blocs supplémentaires avant rupture. | **Crachat** : projectile à 10 blocs, 1 PV et ralentissement de 15 % pendant 2 s ; une seule cible. | 25 s |
| Mule (`mule`) | **Sentier sûr** : 20 % de recul reçu en chevauchant une monture. | **Chargement** : transfère au plus 9 piles de stockage vers linventaire de sa monture visée, à 3 blocs ; aucune case ni capacité ajoutée. | 30 s |
| Cochon (`pig`) | **Bon appétit** : +10 % de saturation obtenue avec carottes, betteraves et pommes de terre cuites ; aucun point de faim supplémentaire. | **Fouille** : indique durant 10 s jusqu’à trois végétaux récoltables déjà connus à 16 blocs, sans générer de truffe ou de butin. | 40 s |
| Lapin (`rabbit`) | **Pied léger** : +10 % de vitesse en position accroupie. | **Bond** : saut dirigé jusqu’à 2 blocs de haut ou 3 blocs de long ; aucun enchaînement aérien. | 25 s |
| Saumon (`salmon`) | **À contre-courant** : 25 % de poussée subie par leau courante. | **Remontée** : impulsion verticale jusqu’à 3 blocs dans leau ; ne donne pas dair et respecte le plafond de la surface. | 30 s |
| Mouton (`sheep`) | **Laine isolante** : le gel de la neige poudreuse saccumule 20 % moins vite. | **Coussin** : consomme une laine pour réduire de 50 % les dégâts du prochain atterrissage dans les 8 s ; réduction plafonnée à 2 PV. | 45 s |
| Squelette (`skeleton`) | **Main stable** : larc reste précis en déplacement lent, avec dispersion réduite de 15 %, sans accélérer sa charge. | **Tir repère** : la prochaine flèche tirée dans les 8 s marque sa cible 6 s pour le tireur ; dégâts normaux, munition consommée, joueurs visibles seulement en ligne de vue. | 35 s |
| Slime (`slime`) | **Souplesse** : 15 % de dégâts de chute et 15 % de ralentissement dans les blocs de miel. | **Rebond** : réduit de 50 % un atterrissage imminent, au plus 2 PV, puis rebondit de 2 blocs maximum ; expire après 4 s, une seule fois. | 40 s |
| Araignée (`spider`) | **Prise ferme** : +15 % de vitesse sur les échelles et les lianes. | **Accroche** : adhère à la paroi visée pendant 4 s et peut y grimper de 2 blocs maximum ; pas descalade permanente ni de plafond franchi. | 35 s |
| Poulpe (`squid`) | **Eau claire** : réduit légèrement le voile sous-marin, sans voir plus loin que les chunks chargés. | **Nuage dencre** : échappe 2 s à la détection de monstres aquatiques non-boss à 4 blocs ; contre des joueurs, produit uniquement un nuage de particules lisible. | 45 s |
| Têtard (`tadpole`) | **Reprendre haleine** : la jauge dair se recharge 20 % plus vite à la surface, sans augmenter sa capacité. | **Retour à la rive** : indique pendant 10 s la berge praticable la plus proche dans un rayon de 16 blocs ; pas de téléportation. | 30 s |
| Poisson tropical (`tropical_fish`) | **Œil du récif** : les coraux et herbiers déjà découverts contrastent mieux sous leau à moins de 8 blocs. | **Palette vivante** : repère durant 10 s jusqu’à trois variantes de coraux ou poissons déjà connues dans un rayon de 16 blocs, sans dévoiler les inconnues. | 40 s |
| Zombie (`zombie`) | **Tenace** : lorsque la vie est sous 30 %, le recul reçu diminue de 20 %. | **Second souffle** : transforme 1 point de nourriture en 1 PV sur 5 s ; dégâts reçus ou attaque interrompent le soin, la nourriture est déjà dépensée. | 60 s |
## Peu commun — une spécialité affirmée
| Familier | Passif | Actif proposé | Recharge |
|---|---|---|---|
| Tatou (`armadillo`) | **Carapace réflexe** : après 5 s accroupi, le prochain projectile inflige 15 % de dégâts en moins ; le bénéfice expire dès la fin de laccroupissement. | **En boule** : garde immobile de 3 s, 40 % sur le premier coup uniquement, réduction plafonnée à 2 PV ; attaquer ou bouger la rompt. | 45 s |
| Abeille (`bee`) | **Pollinisateur** : +10 % de progression naturelle des cultures proches à 4 blocs, seulement durant la présence active du joueur. | **Butinage** : consomme jusqu’à 4 poudres dos pour traiter jusqu’à 4 plantes accessibles distinctes ; chaque plante reçoit une application native, sans garantie de maturité. | 45 s |
| Dromadaire (`camel`) | **Endurance du désert** : 15 % d’épuisement du sprint sur sable et sable rouge. | **Grande enjambée** : franchit un intervalle horizontal jusqu’à 5 blocs, depuis un sol stable ; pas de charge infinie au-dessus du vide. | 40 s |
| Araignée venimeuse (`cave_spider`) | **Habitué au venin** : 20 % de durée des nouveaux poisons reçus. | **Morsure** : la prochaine frappe de mêlée dans les 6 s ajoute jusqu’à 2 PV de poison sur 4 s ; poison non létal. | 45 s |
| Golem de cuivre (`copper_golem`) | **Lecture du circuit** : affiche le niveau de signal du composant de redstone directement visé à portée normale. | **Diagnostic** : pendant 10 s, colore les états alimentés de 32 composants maximum appartenant au circuit exposé visé, dans un rayon de 8 blocs ; aucun signal modifié. | 40 s |
| Dauphin (`dolphin`) | **Nage accompagnée** : +10 % de vitesse de nage, uniquement avec laptitude Nage et la faim requise. | **Sillage** : laisse pendant 5 s un courant de vitesse +20 % pour le porteur et deux nageurs consentants à 4 blocs ; ne fournit pas dair. | 50 s |
| Noyé (`drowned`) | **Main sous leau** : réduit de 10 % la pénalité de vitesse de minage sous-marin, sans supprimer la pénalité ni modifier les groupes. | **Ancrage** : reste stable dans leau pendant 6 s malgré les courants ; peut miner à portée habituelle et continue à consommer de lair. | 40 s |
| Poulpe luisant (`glow_squid`) | **Lueur douce** : éclairage personnel des surfaces visibles à 4 blocs sous leau ; aucun changement du niveau lumineux serveur. | **Balise vivante** : pose pour 20 s une balise lumineuse non solide à un point visible à 8 blocs, partagée avec le groupe ; pas de découverte ou waypoint permanent. | 45 s |
| Chèvre (`goat`) | **Sabots** : réduit de 20 % les glissades sur glace quand on est accroupi. | **Coup de corne** : charge de 3 blocs, inflige 2 PV à la première cible et la pousse de 2 blocs maximum en PvE ; collisions respectées. | 40 s |
| Momifié (`husk`) | **Marche aride** : les effets de Faim reçus durent 20 % moins longtemps. | **Poussière** : une zone de 3 blocs gêne 3 monstres maximum, ralentis de 20 % pendant 3 s ; aucun aveuglement de joueur. | 50 s |
| Ocelot (`ocelot`) | **Sous-bois** : +10 % de vitesse en position accroupie dans une végétation dense, sans traverser les feuilles solides. | **Esquive** : pas latéral de 3 blocs ; aucun instant dinvulnérabilité ni passage à travers une entité solide. | 30 s |
| Panda (`panda`) | **Gourmandise ciblée** : manger une part de gâteau donne 10 % de saturation supplémentaire. | **Culbute** : roulade de 3 blocs sur terrain libre ; réduit de 25 % le premier dégât reçu durant la seconde du mouvement, au plus 1 PV. | 40 s |
| Perroquet (`parrot`) | **Sentinelle** : imite un monstre découvert et visible qui entre dans les 10 blocs, avec au moins 15 s entre alertes. | **Imitation** : attire lattention de trois monstres ordinaires non engagés vers un point visible à 8 blocs pendant 4 s ; aucune cible invincible persistante. | 45 s |
| Poisson-globe (`pufferfish`) | **Immunité partielle** : 20 % de dégâts de poison, sans supprimer les autres effets. | **Hérissement** : pendant 5 s, la première attaque de mêlée reçue applique à son auteur 2 PV de poison maximum sur 4 s, non létal ; nannule pas le coup reçu. | 50 s |
| Ours blanc (`polar_bear`) | **Pelage polaire** : 20 % de dégâts de gel. | **Protection du petit** : pendant 5 s, le porteur ou un allié consentant à 4 blocs subit 25 % de dégâts de mêlée en moins ; un seul bénéficiaire. | 60 s |
| Golem de neige (`snow_golem`) | **Pas dhiver** : le joueur ne senfonce plus pendant la première seconde dun contact avec la neige poudreuse ; le gel reste possible. | **Bourrasque** : lance trois boules de neige en éventail, ralentissement 20 % pendant 2 s au plus une fois par cible ; consomme trois boules de neige, dégâts natifs. | 35 s |
| Arpenteur (`strider`) | **Pieds chauds** : 20 % de dégâts de contact avec le magma, aucune immunité à la lave. | **Pas de braise** : pendant 3 s, permet de marcher sur la surface de lave sur 5 blocs maximum ; ne protège pas une immersion ni la fin de leffet. | 60 s |
| Tortue (`turtle`) | **Apnée tranquille** : lair diminue 15 % moins vite quand le joueur reste presque immobile dans leau. | **Abri** : garde de 4 s, 40 % sur le premier projectile reçu, réduction plafonnée à 2 PV ; déplacement ralenti de 30 %, attaque impossible pendant la garde. | 50 s |
| Villageois (`villager`) | **Carnet du voisinage** : mémorise les offres déjà consultées, leurs prix et lheure de consultation ; nactualise pas un marchand éloigné. | **Commande groupée** : exécute jusqu’à trois échanges dune offre choisie en un geste, au prix et dans le stock actuels, puis place les résultats dans les cases libres. Fournitures réelles, aucune réservation de case verrouillée, aucun bonus dXP par échange. | 45 s |
| Loup (`wolf`) | **Riposte de meute** : +10 % de dégâts de mêlée contre le dernier monstre qui a blessé le porteur, durant 6 s. | **Cible de meute** : désigne un monstre visible à 12 blocs pendant 8 s ; les animaux déjà apprivoisés et réellement présents du porteur le priorisent, sans bonus de dégâts ou dinvincibilité. Ne déclenche pas une attaque collective contre un joueur. | 45 s |
| Embourbé (`bogged`) | **Pied de marais** : +10 % de vitesse sur boue et dans leau peu profonde, sans nage rapide. | **Flèche des marais** : la prochaine flèche dans les 8 s porte 2 PV de poison non létal maximum sur 4 s ; utilise une flèche et larc normalement. | 50 s |
| Desséché (`parched`) | **Habitué à l’épuisement** : les nouveaux effets de Faiblesse durent 20 % moins longtemps. | **Trait épuisant** : la prochaine flèche dans les 8 s réduit de 15 % les dégâts de mêlée de sa cible pendant 4 s ; ne détruit pas sa nourriture. | 50 s |
## Rare — des outils de métier et de vraies manœuvres
| Familier | Passif | Actif proposé | Recharge |
|---|---|---|---|
| Allay (`allay`) | **Ramasseur choisi** : rayon de ramassage de 4 blocs pour le seul type dobjet tenu en main secondaire ; objets libres et accessibles seulement. | **Récolte musicale** : attire pendant 8 s jusqu’à 16 piles libres du type choisi à 8 blocs, autour du joueur ou dun bloc musical visé ; aucun accès aux conteneurs. | 45 s |
| Axolotl (`axolotl`) | **Convalescence aquatique** : les dégâts reçus de monstres aquatiques diminuent de 10 %. | **Soin de rive** : au contact de leau, consomme 1 point de nourriture pour rendre 1 PV au porteur ou à un allié consentant à 4 blocs, sur 4 s ; interruption aux dégâts. | 60 s |
| Blaze (`blaze`) | **Chaleur entretenue** : +10 % de progression de cuisson dun four déjà allumé à 4 blocs ; consomme le carburant 10 % plus vite, sans multiplier lXP par objet cuit. | **Salve ardente** : trois projectiles esquivables répartissant au plus 4 PV par cible, portée 16 blocs ; pas de feu au sol ni de brûlure supplémentaire. | 60 s |
| Breeze (`breeze`) | **Lecture du vent** : les charges de vent personnelles produisent 15 % de recul en moins sur le porteur ; pas de réduction générale des explosions. | **Pas de vent** : impulsion de 5 blocs horizontalement ou 3 blocs verticalement depuis un appui, puis 1 s de descente ralentie ; une seule impulsion. | 40 s |
| Dromadaire momifié (`camel_husk`) | **Caravane nocturne** : 15 % d’épuisement dû au sprint la nuit sur terrain sec. | **Traversée** : ruée horizontale de 6 blocs depuis le sol, sans dégâts ; le ralentissement de terrain est ignoré 2 s, mais les collisions restent actives. | 50 s |
| Creeper (`creeper`) | **Mèche sensible** : alerte sonore lorsquune TNT amorcée ou un Creeper en amorçage est visible à 8 blocs ; ne désamorce rien. | **Détonation maîtrisée** : après 1 s dannonce, souffle de rayon 3 blocs, jusqu’à 4 cibles, 4 PV chacune et petit recul ; aucun bloc détruit ni explosion à la mort. | 75 s |
| Endermite (`endermite`) | **Récupération de perle** : 20 % de dégâts subis lors dune téléportation par perle dEnder. | **Petit décalage** : téléportation de 3 blocs maximum vers un sol visible et libre ; ne franchit pas de paroi, aucune annulation dune chute engagée. | 45 s |
| Gardien (`guardian`) | **Écailles** : 10 % de dégâts de projectiles reçus sous leau. | **Rayon** : verrouillage visible de 1,5 s, puis 4 PV à une cible à 12 blocs ; couper la ligne de vue ou blesser le lanceur interrompt le tir. | 60 s |
| Hoglin (`hoglin`) | **Carrure** : 20 % de recul en mêlée. | **Percussion** : charge de 4 blocs, 4 PV à la première cible, recul PvE de 2 blocs ; sarrête contre un obstacle. | 55 s |
| Cube de magma (`magma_cube`) | **Peau chaude** : les embrasements reçus durent 20 % moins longtemps, sans protéger de la lave. | **Bond brûlant** : saut de 3 blocs maximum ; latterrissage dans les 3 s produit une onde de rayon 2 blocs, 3 PV, trois cibles maximum, sans incendie. | 55 s |
| Mooshroom (`mooshroom`) | **Cuisine fongique** : les ragoûts aux champignons consommés donnent 10 % de saturation supplémentaire. | **Bouillon réconfortant** : consomme un ragoût aux champignons et rend son bol ; le porteur et deux alliés consentants à 4 blocs récupèrent chacun 1 PV sur 5 s. Un dégât interrompt le soin du bénéficiaire concerné ; aucune nourriture ajoutée. | 90 s |
| Nautile (`nautilus`) | **Réserve mesurée** : lair diminue 15 % moins vite pendant un déplacement lent. | **Cloche de plongée** : suspend la consommation dair pendant 6 s pour le porteur immobile sous leau ; ne remplit pas sa jauge, bouger ou attaquer interrompt leffet. | 75 s |
| Phantom (`phantom`) | **Vol de nuit** : 20 % de dégâts de chute pendant la nuit. | **Glissade nocturne** : plane en descente durant 4 s maximum, sans gain daltitude ; lusage nocturne porte la durée à 6 s. | 65 s |
| Piglin (`piglin`) | **Habitué du troc** : mémorise la liste des résultats de troc déjà obtenus ; les résultats inconnus restent masqués. | **Choix du marchand** : pour un seul prochain troc dans les 20 s, consomme deux lingots dor et propose deux tirages natifs ; garde un résultat et abandonne lautre. Pas damélioration des poids de rareté. | 90 s |
| Pillard (`pillager`) | **Arbalétrier** : 10 % de temps de chargement de larbalète, sans modifier les munitions ou lenchantement Charge rapide. | **Tir de couverture** : le prochain projectile darbalète dans les 8 s crée à limpact une zone dhésitation de 2 blocs pendant 3 s ; trois monstres maximum ralentis de 20 %, dégâts du projectile normaux. | 50 s |
| Poisson dargent (`silverfish`) | **Lecture de la pierre** : après avoir visé 2 s un bloc de pierre à portée, signale sil est infesté ; aucun minerai révélé. | **Fissure témoin** : montre pendant 8 s les faces de cavité directement derrière le bloc visé, profondeur 2 blocs maximum ; ne révèle ni contenu, ni minerai, ni structure protégée. | 50 s |
| Cube de soufre (`sulfur_cube`) | **Décontamination** : les nouveaux effets de Poison et de Faiblesse durent 10 % moins longtemps. | **Projection corrosive** : projectile à 10 blocs, 3 PV et dégâts de mêlée de la cible réduits de 15 % pendant 4 s ; aucune armure détruite, aucune corrosion de blocs. | 60 s |
| Lama de marchand (`trader_llama`) | **Inventaire de caravane** : affiche les places libres des montures du joueur réellement présentes à 8 blocs. | **Convoi** : rappelle jusqu’à trois de ses montures à 12 blocs vers une place visible proche ; elles marchent, ne se téléportent pas et ne traversent pas les obstacles. | 60 s |
| Marchand ambulant (`wandering_trader`) | **Carnet de voyage** : garde les offres et emplacements de marchands déjà rencontrés, avec date ; aucune actualisation distante ou garantie de présence. | **Étal partagé** : pendant 30 s, un allié consentant à 16 blocs peut consulter et effectuer une transaction du marchand devant le porteur avec ses propres ressources ; les deux joueurs restent proches, le prix et le stock sont inchangés. | 90 s |
| Cheval-zombie (`zombie_horse`) | **Longue route** : la monture terrestre réellement contrôlée subit 20 % de dégâts de chute en moins ; le familier lui-même ne sert pas de monture. | **Endurance morte-vivante** : pendant 6 s, la monture et son cavalier reçoivent 20 % de recul en moins et traversent leau peu profonde 15 % plus vite ; pas de respiration offerte. | 60 s |
| Zombie-villageois (`zombie_villager`) | **Médecin de campagne** : affiche lavancement estimé dune guérison de zombie-villageois visible à 6 blocs. | **Veille** : canalise 8 s près dun zombie-villageois déjà en guérison pour avancer de 20 s son temps restant ; une seule application de familier par guérison, pas dingrédient économisé. | 90 s |
| Piglin zombifié (`zombified_piglin`) | **Retenue** : raccourcit de 20 % la colère individuelle dun Piglin zombifié, sans prévenir lalerte de groupe ou pardonner une nouvelle attaque. | **Offrande dapaisement** : consomme un lingot dor pour interrompre 2 s la poursuite de trois Piglins zombifiés ordinaires à 5 blocs ; la colère reste enregistrée. | 75 s |
| Vagabond (`stray`) | **Tireur du froid** : 20 % de glissade sur glace pendant la visée à larc. | **Trait givrant** : la prochaine flèche dans les 8 s ralentit de 20 % pendant 3 s ; munition et dégâts natifs, aucune glace placée. | 50 s |
| Vindicateur (`vindicator`) | **Bûcheron précis** : 10 % de durée de casse des bûches à la hache, dans les limites normales du minage acheté. | **Brise-garde** : la prochaine frappe de hache dans les 6 s prolonge de 1 s une désactivation de bouclier réussie ; pas de dégâts supplémentaires. En PvP, prolongation plafonnée à 0,5 s. | 60 s |
| Zoglin (`zoglin`) | **Instinct de survie** : 15 % de recul lorsque la vie est sous 50 %. | **Ruée furieuse** : charge de 5 blocs sans changement de direction après départ, 4 PV à la première cible ; annonce de 0,75 s qui permet lesquive. | 60 s |
## Extraordinaire — transformer une situation
| Familier | Passif | Actif proposé | Recharge |
|---|---|---|---|
| Grinceur (`creaking`) | **Écorce** : après 3 s immobile au sol, 15 % de dégâts tant quon reste immobile ; attaquer interrompt ce passif. | **Enracinement** : pendant 6 s, immobile et sans attaquer, réduit les dégâts de 25 % et le recul de 50 % ; jusqu’à trois alliés consentants à 3 blocs reçoivent 10 % de dégâts tant quils restent proches. | 100 s |
| Grand gardien (`elder_guardian`) | **Bâtisseur immergé** : 15 % de pénalité de minage sous-marin, sans supprimer lexigence dair, doutil ou de rang. | **Sanctuaire marin** : zone de rayon 4 blocs pendant 8 s, centrée au lancement ; le porteur et trois alliés consentants suspendent leur consommation dair et subissent 15 % de dégâts en moins tant quils y restent. | 120 s |
| Enderman (`enderman`) | **Calme du regard** : croiser brièvement le regard dun Enderman donne 1 s supplémentaire avant son agression ; une attaque ne bénéficie daucune tolérance. | **Pas de lEnd** : téléportation jusqu’à 8 blocs sur un appui visible et libre, après 0,75 s de préparation ; ne traverse aucune paroi, porte fermée ou zone interdite. | 75 s |
| Évocateur (`evoker`) | **Étude des maléfices** : les nouveaux effets de Faiblesse et de Lenteur durent 15 % moins longtemps. | **Ligne de crocs** : après 1 s dannonce, dessine une ligne de 8 blocs sur un sol continu visible ; 5 PV par cible au maximum, trois cibles maximum, aucun croc derrière un mur. | 90 s |
| Ghast (`ghast`) | **Artillerie aérienne** : les projectiles renvoyés par le joueur ont 10 % de vitesse supplémentaire, sans bonus de dégâts. | **Boulet spectral** : projectile lent et renvoyable, portée 24 blocs, explosion de rayon 2 blocs pour 5 PV, quatre cibles maximum ; terrain et feu inchangés. | 90 s |
| Ghast joyeux (`happy_ghast`) | **Main du bâtisseur** : tient la position 0,5 s après avoir quitté accidentellement un bord en mode accroupi ; une fois par appui stable de 2 s, aucun escalier dans le vide. | **Plateforme de nuage** : crée à côté dun bloc dappui visible une plateforme personnelle de 3 × 3 pour 8 s, dans la portée de pose ; aucun objet ou bloc ne peut y être construit, elle ne porte ni passager ni mécanisme et avertit avant de disparaître. | 120 s |
| Golem de fer (`iron_golem`) | **Présence protectrice** : le premier coup de mêlée reçu après 10 s sans dégâts inflige 15 % de dégâts en moins. | **Interposition** : pendant 5 s, le porteur et deux alliés consentants à 3 blocs réduisent les dégâts de mêlée de 25 % et ne sont pas projetés en lair ; le porteur avance 20 % moins vite. | 90 s |
| Piglin barbare (`piglin_brute`) | **Garde dor** : porter au moins une pièce darmure dor réduit le recul de mêlée de 15 % ; aucune trêve avec les brutes. | **Contre brutal** : fenêtre de parade frontale de 1 s avec arme de mêlée ; si un coup est paré, réduit ses dégâts de 40 %, au plus 2 PV, puis la prochaine frappe dans les 3 s ajoute 2 PV en PvE. | 75 s |
| Ravageur (`ravager`) | **Masse** : 25 % de recul terrestre, sans bonus de dégâts permanent. | **Percée** : charge annoncée de 6 blocs, heurte jusqu’à trois cibles, 5 PV chacune ; sarrête devant le premier bloc solide et ne casse aucune culture. | 90 s |
| Shulker (`shulker`) | **Prudence verticale** : 20 % de durée de Lévitation reçue. | **Ancrage de chantier** : reste suspendu à sa position actuelle pendant 6 s maximum, à moins de 4 blocs dun appui solide ; peut poser à portée normale, sans ascension. Se déplacer annule leffet, avertissement avant la chute. | 100 s |
| Cheval-squelette (`skeleton_horse`) | **Cavalier des fonds** : lair du cavalier diminue 15 % moins vite lorsquil est sur une monture immergée. | **Traversée des eaux** : le cavalier et sa monture marchent sur leau pendant 6 s et 10 blocs au maximum ; aucun effet sur la lave, aucune protection après expiration. | 90 s |
| Renifleur (`sniffer`) | **Mémoire botanique** : en visant une plante connue, indique ses conditions de croissance manquantes observables : lumière, substrat ou eau, selon son espèce. | **Piste ancienne** : pendant 15 s, indique une direction approximative vers du sable ou du gravier suspect à 24 blocs, types déjà découverts et chunks déjà chargés ; ne lit pas le butin, ne détecte pas une salle fermée ou un lieu réservé au scénario. | 120 s |
| Vex (`vex`) | **Esprit agile** : 20 % de durée de ralentissement dû aux effets reçus, sans traversée des collisions. | **Main spectrale** : atteint un bloc de construction visible 2 blocs au-delà de la portée habituelle pour une seule pose ou récupération autorisée ; exige outil, matériaux et rang, jamais de coffre ou mécanisme distant. | 60 s |
| Sorcière (`witch`) | **Dosage précis** : les potions bues par le porteur durent 10 % plus longtemps ; aucune amplification de niveau ni changement des effets instantanés. | **Fiole partagée** : consomme une potion buvable choisie et transmet à deux alliés consentants à 4 blocs sa moitié de durée, ou sa moitié de soin instantané, chacun ; ne transforme pas une potion en objet revendable. | 100 s |
| Wither squelette (`wither_skeleton`) | **Os calcinés** : les nouveaux effets de Wither durent 20 % moins longtemps. | **Entaille sombre** : la prochaine frappe de mêlée dans les 6 s applique au plus 3 PV de flétrissement sur 4 s et réduit les soins reçus de 20 % pendant 4 s ; soin réduit de 10 % et durée 2 s en PvP. | 75 s |
| Nautile-zombie (`zombie_nautilus`) | **Sang-froid abyssal** : à moins dun tiers dair, le recul reçu sous leau diminue de 25 %, sans restaurer dair. | **Sauvetage** : propulse vers le haut, sur 6 blocs maximum, le porteur et un allié immergé consentant à 3 blocs ; rend une bulle à chacun, sans dépasser leur capacité. Plafonds et obstacles arrêtent la remontée. | 120 s |
## Légendaire — trois moments exceptionnels
| Familier | Passif | Actif proposé | Recharge |
|---|---|---|---|
| Ender Dragon (`ender_dragon`) | **Maîtrise du ciel** : 20 % de dégâts de collision en élytres et de projectiles reçus en lair ; aucune armure supplémentaire au sol. | **Essor draconique** : après 2 s dannonce au sol, soulève de 8 blocs le porteur et trois alliés consentants à 4 blocs, puis permet 10 s de vol plané, déplacement total plafonné à 40 blocs. Aucun maintien daltitude, aucune deuxième impulsion ; descente signalée, pas dimmunité à larrivée. | 180 s |
| Warden (`warden`) | **Écoute profonde** : perçoit la direction de vibrations à 8 blocs, sans nom, silhouette ou coordonnées exactes ; les joueurs accroupis ne sont pas révélés. | **Onde sonique** : après 2 s de canalisation sonore, frappe dans une ligne de 12 blocs jusqu’à trois cibles visibles pour 10 PV chacune en PvE, interrompt leur attaque si elle est interruptible et détruit les projectiles hostiles rencontrés. Pas de dégâts à travers un mur, ni de pénétration darmure en PvP. | 180 s |
| Wither (`wither`) | **Volonté funèbre** : quand la vie passe sous 30 %, les nouveaux ralentissements durent 25 % moins longtemps ; aucune résurrection ni explosion à la mort. | **Moisson des ombres** : après 1,5 s dannonce, tire trois crânes lents et esquivables vers les cibles visées à 16 blocs, au maximum 12 PV par cible et trois cibles au total. Les dégâts réellement infligés rendent 10 % de leur valeur au porteur, plafonnés au plus petit de 2 PV ou 20 % de sa vie maximale. Aucun vol de vie sur alliés, familiers, animaux apprivoisés ou cibles invulnérables ; aucun terrain détruit. | 180 s |
## Obtenir les œufs sans transformer les animaux en distributeurs
**Toute cette acquisition est proposée : beta.018 ne la contient pas.**
1. Découvrir personnellement lespèce en jeu ouvre sa fiche de lien dans le
Blockodex. Observer ne donne pas directement un œuf ou une série dXP.
2. Réussir un objectif approprié débloque une première essence : soccuper dun
animal, réaliser une production variée, accomplir une exploration ou maîtriser
une interaction avec un monstre. Pas de « tuer 500 exemplaires » ni de minuterie
AFK pour les obtenir.
3. Loffrande fournit le coût matériel. Les objectifs et leurs récompenses sont
enregistrés par habitant et monde ; New Game+ ne distribue pas à nouveau les
premières récompenses. Les duplicatas éventuels demandent une recette ou un
échange explicite, pas une nouvelle validation de la même découverte.
4. Le familier peut être conservé au prestige. Sa puissance naugmente pas avec
le chiffre romain, et ses réserves respectent toujours les compétences du
personnage courant. Aucun prestige supplémentaire nest requis pour rééquiper
un familier déjà acquis.
Exemples de pistes dobtention, à transformer ensuite en vrais objectifs :
| Œuf | Objectif proposé |
|---|---|
| Poule — commun | Découvrir, nourrir et accompagner la croissance dune poule réelle. |
| Squelette — commun | Observer son arc et bloquer un tir avec un bouclier ; aucune ferme à kills requise. |
| Abeille — peu commun | Installer un rucher et récolter miel puis cire en préservant ses habitantes. |
| Golem de cuivre — peu commun | Construire puis diagnostiquer un premier circuit fonctionnel. |
| Allay — rare | Rencontrer un Allay, lui confier un objet et organiser une collecte près dun bloc musical. |
| Piglin — rare | Découvrir plusieurs résultats de troc distincts ; pas acheter cent fois le même résultat. |
| Golem de fer — extraordinaire | Participer à la défense dun village puis à sa remise en état, avec des objectifs vérifiables. |
| Renifleur — extraordinaire | Mener une séquence darchéologie, faire éclore un véritable renifleur et cultiver ses plantes. |
| Ender Dragon — légendaire | Lachèvement collectif de laventure de lEnd ouvre le lien ; chaque habitant réalise ensuite son épreuve dexploration. |
| Warden — légendaire | Réussir une expédition de discrétion dans les profondeurs et rapporter une archive ; tuer le Warden nest pas le passage obligé. |
| Wither — légendaire | Participer au défi du Wither puis à la construction dune balise utile à la communauté ; pas recevoir un œuf à chaque boss farmé. |
Le déblocage collectif ne remet pas automatiquement un légendaire à tous les
comptes. La contribution personnelle doit rester accessible aux nouveaux venus
après l’événement, par une épreuve rejouable dont la récompense est unique pour
chaque habitant. Les noms d’épreuves ci-dessus sont des intentions, pas des
advancements déjà présents.
Lobjet obtenu en survie devra être un **œuf de familier inerte** : même apparence
despèce et même slot, mais impossible à utiliser comme œuf dapparition vanilla
dans le monde ou dans un distributeur. Sans cette distinction, lobtention dun
œuf de Wither, de villageois ou de renifleur ferait aussi apparaître des entités
et casserait l’équilibre de production. Il faudra spécifier le contrat dobjet,
sa provenance serveur et la migration des œufs de test avant tout portage ;
aucune transformation des objets actuels nest faite ici.
Les règles actuelles de mort restent la référence : l’œuf équipé tombe si
keepInventory est désactivé. Une récupération/recréation dessence perdue et un
éventuel commerce de familiers demandent leurs propres règles avant ouverture en
survie. En première expérimentation, proposer le lien comme personnel et les
objets de test comme opérateur évite de décider silencieusement de cette économie.
## Première série de tests d’équilibrage
Commencer par **Poule, Vache, Âne, Abeille, Golem de cuivre, Axolotl, Creeper,
Enderman et Shulker**. Ce petit ensemble couvre chute, soin, transfert, production,
information, dégâts, téléportation et construction. Il vérifie les règles communes
avant de multiplier les effets. Les légendaires viennent après cette mesure.
| Situation | Ce quil faut vérifier |
|---|---|
| Nouveau personnage à 333 | Aucun passif ne permet dignorer durablement faim, air ou chute ; un actif utile ne suppose pas un inventaire rempli de potions. |
| Compétences maximales | Un commun est encore utile pour un métier ; il nest pas remplacé automatiquement par un légendaire. |
| Après New Game+ | Les réserves dair, les soins et la portée groupée se bornent aux nouveaux rangs ; aucun coût ou délai réinitialisé. |
| PvP à trois cœurs | Au plus un cœur de dégâts additionnels par activation et par cible, y compris poison, feu, impacts multiples et chute attribuable ; annonce et esquive réelles. |
| 30 joueurs réunis | Pas de chaîne de peur, de boucliers ou de bulles dair infinie ; pas de cumul de bonus de production et pas de recherche de chunks distants. |
| Échanges et déséquipement | Aucun buff stocké en changeant d’œuf, aucune potion/munition/ressource dupliquée, une seule recharge commune persistante. |
| Claims et lieux à secrets | Téléportations, silhouettes, main spectrale et plateformes respectent les accès ; les pouvoirs ne court-circuitent pas une salle fermée. |
| Ergonomie | Prévisualiser la portée, lappui, les bénéficiaires, les matériaux et la recharge ; un refus explique ce qui manque sans consommer laction. |
Mesurer le temps gagné sur une vraie tâche, le taux de survie et la fréquence
dutilisation. Un passif constamment équipé dans tous les contextes est suspect ;
un actif jamais utilisé malgré sa disponibilité doit être renforcé ou remplacé.
Les +10 % ne sont pas une garantie : les pouvoirs de construction et dinformation
peuvent gagner bien plus de temps quun petit bonus de dégâts.
## Points à résoudre avant implémentation
- Les bonus permanents de vitesse de production, les échanges à distance et les
plateformes demandent un état serveur dédié : ce
sont des contrats à écrire, pas de simples effets de potion à importer.
- Le Renifleur ne génère aucun site ni butin. Le filtre excluant lieux protégés
et salles fermées doit être fiable avant dactiver sa recherche.
- La main spectrale du Vex étend uniquement un geste de construction explicite ;
son interaction avec les structures protégées devra être testée avant activation.
- Le premier ticket de pouvoirs inclura configuration serveur, libellés FR/EN,
attribution PvP et contrat de sauvegarde des recharges. Cette passe documentaire
ne modifie ni version, ni monde, ni binaire.
+107
View File
@@ -0,0 +1,107 @@
# beta.019 — couverture des familiers
Les 88 passifs et 88 actifs disposent dun chemin dexécution. Les chiffres et
conditions de chaque pouvoir restent détaillés dans la [proposition v1](companion-powers-balance-proposal.md).
La suite client extrait les **88 modèles natifs**, à deux instants, en contrôlant
leur éclairage et leur échelle. Cela ne constitue pas 88 essais manuels de pouvoirs.
Le tableau distingue les contrôles comportementaux propres à une espèce des
contrats communs (achat, persistance, coûts, portées, consentement et interruptions).
La balance en partie réelle reste à éprouver ; « modèle seulement » signifie
que le gameplay de cette espèce ne possède pas encore de scénario automatique dédié.
Points dentrée : `CompanionPassives` et les mixins `Companion*` pour les passifs ;
`CompanionActions`, `CompanionWork`, `CompanionQueries`, `CompanionTrades`,
`CompanionPlatform` et `CompanionProjectiles` pour les actifs. Les tests sont dans
`Companion019GameTests`, `Companion019ClientChecks` et `Companion019Smoke`.
| Familier | Passif implémenté | Actif implémenté | Vérification spécifique |
| --- | --- | --- | --- |
| Chauve-souris (`bat`) | Adaptation obscure | Écho (30 s) | Modèle natif ; essais gameplay spécifiques à poursuivre. |
| Chat (`cat`) | Pattes de velours | Feulement (45 s) | Attribut de chute et suppression au changement d’œuf ; consentement. |
| Poule (`chicken`) | Petites ailes | Battement (30 s) | Modèle natif ; essais gameplay spécifiques à poursuivre. |
| Morue (`cod`) | Petites branchies | Dernière bulle (45 s) | Ajout dair plafonné à trois bulles et récupération du bénéficiaire. |
| Vache (`cow`) | Lait sélectif | Lait partagé (60 s) | Nettoyage natif du lait, conservation des effets bénéfiques, seau consommé/rendu. |
| Âne (`donkey`) | Pas chargé | Déchargement (30 s) | Modèle natif ; essais gameplay spécifiques à poursuivre. |
| Renard (`fox`) | Approche discrète | Plongeon (25 s) | Modèle natif ; essais gameplay spécifiques à poursuivre. |
| Grenouille (`frog`) | Berges faciles | Langue (20 s) | Modèle natif ; essais gameplay spécifiques à poursuivre. |
| Cheval (`horse`) | Cavalier | Galop (35 s) | Modèle natif ; essais gameplay spécifiques à poursuivre. |
| Lama (`llama`) | Caravanier | Crachat (25 s) | Modèle natif ; essais gameplay spécifiques à poursuivre. |
| Mule (`mule`) | Sentier sûr | Chargement (30 s) | Modèle natif ; essais gameplay spécifiques à poursuivre. |
| Cochon (`pig`) | Bon appétit | Fouille (40 s) | Modèle natif ; essais gameplay spécifiques à poursuivre. |
| Lapin (`rabbit`) | Pied léger | Bond (25 s) | Modèle natif ; essais gameplay spécifiques à poursuivre. |
| Saumon (`salmon`) | À contre-courant | Remontée (30 s) | Navigation aquatique après le déplacement laborieux au sol. |
| Mouton (`sheep`) | Laine isolante | Coussin (45 s) | Consommation dans les seules cases ouvertes ; coussin limité et utilisé une fois. |
| Squelette (`skeleton`) | Main stable | Tir repère (35 s) | Modèle natif ; essais gameplay spécifiques à poursuivre. |
| Slime (`slime`) | Souplesse | Rebond (40 s) | Modèle natif ; essais gameplay spécifiques à poursuivre. |
| Araignée (`spider`) | Prise ferme | Accroche (35 s) | Modèle natif ; essais gameplay spécifiques à poursuivre. |
| Poulpe (`squid`) | Eau claire | Nuage dencre (45 s) | Modèle natif ; essais gameplay spécifiques à poursuivre. |
| Têtard (`tadpole`) | Reprendre haleine | Retour à la rive (30 s) | Modèle natif ; essais gameplay spécifiques à poursuivre. |
| Poisson tropical (`tropical_fish`) | Œil du récif | Palette vivante (40 s) | Modèle natif ; essais gameplay spécifiques à poursuivre. |
| Zombie (`zombie`) | Tenace | Second souffle (60 s) | Achat, persistance de recharge, soin progressif payé en faim et interrompu par dégâts. |
| Tatou (`armadillo`) | Carapace réflexe | En boule (45 s) | Modèle natif ; essais gameplay spécifiques à poursuivre. |
| Abeille (`bee`) | Pollinisateur | Butinage (45 s) | Propriétaire du cycle de culture, interruption sans crédit récupérable. |
| Dromadaire (`camel`) | Endurance du désert | Grande enjambée (40 s) | Modèle natif ; essais gameplay spécifiques à poursuivre. |
| Araignée venimeuse (`cave_spider`) | Habitué au venin | Morsure (45 s) | Réduction native de durée du poison. |
| Golem de cuivre (`copper_golem`) | Lecture du circuit | Diagnostic (40 s) | Modèle natif ; essais gameplay spécifiques à poursuivre. |
| Dauphin (`dolphin`) | Nage accompagnée | Sillage (50 s) | Modèle natif ; essais gameplay spécifiques à poursuivre. |
| Noyé (`drowned`) | Main sous leau | Ancrage (40 s) | Modèle natif ; essais gameplay spécifiques à poursuivre. |
| Poulpe luisant (`glow_squid`) | Lueur douce | Balise vivante (45 s) | Modèle natif ; essais gameplay spécifiques à poursuivre. |
| Chèvre (`goat`) | Sabots | Coup de corne (40 s) | Modèle natif ; essais gameplay spécifiques à poursuivre. |
| Momifié (`husk`) | Marche aride | Poussière (50 s) | Modèle natif ; essais gameplay spécifiques à poursuivre. |
| Ocelot (`ocelot`) | Sous-bois | Esquive (30 s) | Modèle natif ; essais gameplay spécifiques à poursuivre. |
| Panda (`panda`) | Gourmandise ciblée | Culbute (40 s) | Modèle natif ; essais gameplay spécifiques à poursuivre. |
| Perroquet (`parrot`) | Sentinelle | Imitation (45 s) | Modèle natif ; essais gameplay spécifiques à poursuivre. |
| Poisson-globe (`pufferfish`) | Immunité partielle | Hérissement (50 s) | Modèle natif ; essais gameplay spécifiques à poursuivre. |
| Ours blanc (`polar_bear`) | Pelage polaire | Protection du petit (60 s) | Révocation immédiate dun effet allié. |
| Golem de neige (`snow_golem`) | Pas dhiver | Bourrasque (35 s) | Modèle natif ; essais gameplay spécifiques à poursuivre. |
| Arpenteur (`strider`) | Pieds chauds | Pas de braise (60 s) | Modèle natif ; essais gameplay spécifiques à poursuivre. |
| Tortue (`turtle`) | Apnée tranquille | Abri (50 s) | Modèle natif ; essais gameplay spécifiques à poursuivre. |
| Villageois (`villager`) | Carnet du voisinage | Commande groupée (45 s) | Coûts natifs, limites de stock, objets produits et rejet du rejeu du devis. |
| Loup (`wolf`) | Riposte de meute | Cible de meute (45 s) | Modèle natif ; essais gameplay spécifiques à poursuivre. |
| Embourbé (`bogged`) | Pied de marais | Flèche des marais (50 s) | Modèle natif ; essais gameplay spécifiques à poursuivre. |
| Desséché (`parched`) | Habitué à l’épuisement | Trait épuisant (50 s) | Modèle natif ; essais gameplay spécifiques à poursuivre. |
| Allay (`allay`) | Ramasseur choisi | Récolte musicale (45 s) | Modèle natif ; essais gameplay spécifiques à poursuivre. |
| Axolotl (`axolotl`) | Convalescence aquatique | Soin de rive (60 s) | Modèle natif ; essais gameplay spécifiques à poursuivre. |
| Blaze (`blaze`) | Chaleur entretenue | Salve ardente (60 s) | Progression réelle du four, carburant accéléré et sortie unique. |
| Breeze (`breeze`) | Lecture du vent | Pas de vent (40 s) | Modèle natif ; essais gameplay spécifiques à poursuivre. |
| Dromadaire momifié (`camel_husk`) | Caravane nocturne | Traversée (50 s) | Modèle natif ; essais gameplay spécifiques à poursuivre. |
| Creeper (`creeper`) | Mèche sensible | Détonation maîtrisée (75 s) | Modèle natif ; essais gameplay spécifiques à poursuivre. |
| Endermite (`endermite`) | Récupération de perle | Petit décalage (45 s) | Modèle natif ; essais gameplay spécifiques à poursuivre. |
| Gardien (`guardian`) | Écailles | Rayon (60 s) | Modèle natif ; essais gameplay spécifiques à poursuivre. |
| Hoglin (`hoglin`) | Carrure | Percussion (55 s) | Modèle natif ; essais gameplay spécifiques à poursuivre. |
| Cube de magma (`magma_cube`) | Peau chaude | Bond brûlant (55 s) | Modèle natif ; essais gameplay spécifiques à poursuivre. |
| Mooshroom (`mooshroom`) | Cuisine fongique | Bouillon réconfortant (90 s) | Modèle natif ; essais gameplay spécifiques à poursuivre. |
| Nautile (`nautilus`) | Réserve mesurée | Cloche de plongée (75 s) | Modèle natif ; essais gameplay spécifiques à poursuivre. |
| Phantom (`phantom`) | Vol de nuit | Glissade nocturne (65 s) | Modèle natif ; essais gameplay spécifiques à poursuivre. |
| Piglin (`piglin`) | Habitué du troc | Choix du marchand (90 s) | Modèle natif ; essais gameplay spécifiques à poursuivre. |
| Pillard (`pillager`) | Arbalétrier | Tir de couverture (50 s) | Modèle natif ; essais gameplay spécifiques à poursuivre. |
| Poisson dargent (`silverfish`) | Lecture de la pierre | Fissure témoin (50 s) | Modèle natif ; essais gameplay spécifiques à poursuivre. |
| Cube de soufre (`sulfur_cube`) | Décontamination | Projection corrosive (60 s) | Modèle natif ; essais gameplay spécifiques à poursuivre. |
| Lama de marchand (`trader_llama`) | Inventaire de caravane | Convoi (60 s) | Modèle natif ; essais gameplay spécifiques à poursuivre. |
| Marchand ambulant (`wandering_trader`) | Carnet de voyage | Étal partagé (90 s) | Modèle natif ; essais gameplay spécifiques à poursuivre. |
| Cheval-zombie (`zombie_horse`) | Longue route | Endurance morte-vivante (60 s) | Modèle natif ; essais gameplay spécifiques à poursuivre. |
| Zombie-villageois (`zombie_villager`) | Médecin de campagne | Veille (90 s) | Modèle natif ; essais gameplay spécifiques à poursuivre. |
| Piglin zombifié (`zombified_piglin`) | Retenue | Offrande dapaisement (75 s) | Modèle natif ; essais gameplay spécifiques à poursuivre. |
| Vagabond (`stray`) | Tireur du froid | Trait givrant (50 s) | Modèle natif ; essais gameplay spécifiques à poursuivre. |
| Vindicateur (`vindicator`) | Bûcheron précis | Brise-garde (60 s) | Modèle natif ; essais gameplay spécifiques à poursuivre. |
| Zoglin (`zoglin`) | Instinct de survie | Ruée furieuse (60 s) | Modèle natif ; essais gameplay spécifiques à poursuivre. |
| Grinceur (`creaking`) | Écorce | Enracinement (100 s) | Déplacement annule racines et résistance liée. |
| Grand gardien (`elder_guardian`) | Bâtisseur immergé | Sanctuaire marin (120 s) | Modèle natif ; essais gameplay spécifiques à poursuivre. |
| Enderman (`enderman`) | Calme du regard | Pas de lEnd (75 s) | Modèle natif ; essais gameplay spécifiques à poursuivre. |
| Évocateur (`evoker`) | Étude des maléfices | Ligne de crocs (90 s) | Crocs visuels temporaires exclus des sauvegardes. |
| Ghast (`ghast`) | Artillerie aérienne | Boulet spectral (90 s) | Vol ; rendu client. |
| Ghast joyeux (`happy_ghast`) | Main du bâtisseur | Plateforme de nuage (120 s) | Modèle natif ; essais gameplay spécifiques à poursuivre. |
| Golem de fer (`iron_golem`) | Présence protectrice | Interposition (90 s) | Modèle natif ; essais gameplay spécifiques à poursuivre. |
| Piglin barbare (`piglin_brute`) | Garde dor | Contre brutal (75 s) | Modèle natif ; essais gameplay spécifiques à poursuivre. |
| Ravageur (`ravager`) | Masse | Percée (90 s) | Modèle natif ; essais gameplay spécifiques à poursuivre. |
| Shulker (`shulker`) | Prudence verticale | Ancrage de chantier (100 s) | Destruction du support arrête la suspension. |
| Cheval-squelette (`skeleton_horse`) | Cavalier des fonds | Traversée des eaux (90 s) | Modèle natif ; essais gameplay spécifiques à poursuivre. |
| Renifleur (`sniffer`) | Mémoire botanique | Piste ancienne (120 s) | Modèle natif ; essais gameplay spécifiques à poursuivre. |
| Vex (`vex`) | Esprit agile | Main spectrale (60 s) | Modèle natif ; essais gameplay spécifiques à poursuivre. |
| Sorcière (`witch`) | Dosage précis | Fiole partagée (100 s) | Potion réelle partagée, demi-durée, maintien dune potion ordinaire ultérieure. |
| Wither squelette (`wither_skeleton`) | Os calcinés | Entaille sombre (75 s) | Modèle natif ; essais gameplay spécifiques à poursuivre. |
| Nautile-zombie (`zombie_nautilus`) | Sang-froid abyssal | Sauvetage (120 s) | Modèle natif ; essais gameplay spécifiques à poursuivre. |
| Ender Dragon (`ender_dragon`) | Maîtrise du ciel | Essor draconique (180 s) | Déplacement aérien effectif, espace libre ; rendu client. |
| Warden (`warden`) | Écoute profonde | Onde sonique (180 s) | Modèle natif ; essais gameplay spécifiques à poursuivre. |
| Wither (`wither`) | Volonté funèbre | Moisson des ombres (180 s) | Plafonds PvE/PvP partagés, exclusion des apprivoisés ; vol. |
+152
View File
@@ -0,0 +1,152 @@
# beta.019 — pouvoirs des 88 familiers
Ticket ouvert le 13 septembre 2026, branche `codex/companion-powers-beta019`.
### États ajoutés et déplacements
La livraison inclut les déplacements propres aux familles : vol orbital du
Dragon, vol du Wither et des Ghasts, nage et difficultés des aquatiques hors de
leau. Le familier reste temporaire, invincible et sans combat autonome.
Les cycles de culture et de four utilisent de nouvelles pièces jointes JSON
versionnées `sanctuary:companion_crop_cycles` sur le niveau et
`sanctuary:companion_furnace_cycle` sur le four. Absence : aucun cycle antérieur
crédité. Un cycle déjà entamé ne gagne pas de propriétaire rétroactivement.
La présence continue, le même propriétaire et le même équipement sont vérifiés ;
quitter la zone, changer de lien ou arrêter le serveur invalide le cycle en cours.
Les fractions ne sont jamais transférées à un nouveau cycle. Aucun objet,
résultat, carburant, niveau dXP ou bloc de sauvegarde existant nest converti.
Un JSON invalide ou dune version future est conservé et bloque seulement ce
bonus. Les nouveaux tags peuvent être ignorés lors dun retour à beta.018.
La guérison du zombie-villageois reçoit un booléen persistant indépendant,
`sanctuary:companion_cure_used`, absent par défaut, limitant Veille à une fois.
Les devis, choix de troc et plateformes sont temporaires et ne survivent pas à
une déconnexion. Un choix de troc abandonné perd ses deux lingots déjà offerts ;
il ne fournit aucun des deux résultats.
**Livraison locale beta.019 vérifiée — 13 septembre 2026.**
Le créateur autorise limplémentation des 88 passifs et 88 actifs de la
[proposition v1](companion-powers-balance-proposal.md), et la correction du rendu
noirci des compagnons. Les rangs IIII, les soins faisant évoluer le lien et les
œufs Anomaly à contreparties sont explicitement reportés au prochain ticket.
Aucun malus solaire ou autre malus historique nest ajouté aux œufs ordinaires.
## Contrat de stockage et de migration
Les accessoires beta.018 et leurs identifiants restent inchangés. Aucun monde,
chunk ou objet dune installation personnelle nest converti par les outils de
développement. Les nouvelles données se créent uniquement quand le serveur du
mod exécutera les nouvelles fonctionnalités.
Le lien actif et les délais des pouvoirs utilisent un état joueur indépendant,
versionné et persistant, copié à la mort et conservé au New Game+. Labsence de
cet état signifie lien non acheté, aucune recharge. Une version inconnue ou des
données invalides désactivent les pouvoirs de ce joueur sans effacer son état.
Lachat utilise les niveaux réellement disponibles côté serveur. Les identifiants
et achats des anciennes aptitudes ne sont pas renommés et leur stockage nest
pas réécrit pour ajouter ce lien indépendant.
Les recharges reposent sur les échéances du serveur et sont communes au slot.
Le déséquipement interrompt les améliorations temporaires. Reconnexion, mort et
prestige ne donnent pas de nouvelle charge. Les améliorations de soin et dair
possèdent aussi leur récupération par bénéficiaire.
La configuration dédiée `config/sanctuary/companion-powers.json` propose les
valeurs v1, les cinq raretés et les réglages serveur. Les clients reçoivent une
vue bornée de leur propre état. Les cibles, ressources, droits, dégâts et
transactions sont contrôlés côté serveur. Le consentement aux effets alliés
est explicite et révocable ; lappartenance à une faction ne le remplace pas.
Les œufs natifs restent les objets de test déjà utilisés en beta.018.
Lobtention des essences en survie et leur forme inerte sont un chantier distinct
de lactivation des pouvoirs demandée ici : aucun œuf natif nest distribué par
un advancement et aucune récompense dacquisition nest inventée.
## Livraison et vérifications
La livraison comprend une interface FR/EN lisible pour le lien actif,
le familier équipé, sa rareté, ses deux effets, sa recharge et son raccourci.
Le rendu est contrôlé dans le client avec les modèles natifs et leur lumière
ambiante ; la couverture des scénarios est détaillée ci-dessous. Les vérifications couvrent les transactions, les interruptions,
le PvP, les portées, labsence de chargement distant, les capacités initiales et
maximales, les échanges d’œufs, la mort et le prestige.
Les pouvoirs et leurs vérifications sont [recensés individuellement](companion-powers-beta019-coverage.md). Une
déclaration de registre ou une description affichée ne prouve pas à elle seule
que son effet fonctionne. `check build` et `assemblePack` sont exécutés pour
la livraison locale beta.019. Le canal packwiz et Prism ne sont pas modifiés
sans demande de mise à jour correspondante.
## Utilisation de la version dessai
Équiper un œuf dans sa case de familier. Son passif sactive après **10 secondes**
avec le même œuf. **B → Progression → Aptitudes → Lien actif** coûte **4 niveaux**
par défaut ; **G**, configurable dans Contrôles, déclenche le pouvoir.
Le panneau **Familier** indique la rareté, le passif, lactif, les conditions et
la recharge. Il contient le consentement aux effets alliés et un bouton opérateur
pour préparer un nouvel essai. Les achats, temps de recharge et récupérations
soin/air sont stockés séparément des compétences et conservés à la mort et au prestige.
Viser ce sur quoi agir : coffre, monstre, villageois ou surface. Les objets
nécessaires se prennent dans les rangées ouvertes. Le villageois ouvre un devis
aux prix et stocks natifs ; le Piglin offre deux tirages après paiement. Un choix
en attente peut être rouvert dans le panneau Familier, par exemple après avoir
libéré une case. Les relevés marchands saffichent dans le carnet.
Les équipes Minecraft et les membres dune même faction Sanctuary sont exclus
des cibles offensives. Recevoir les aides reste un consentement personnel,
indépendant de la faction. Les poussées offensives PvP sont désactivées dans ce
premier portage, comme prévu par la proposition.
Les familiers utilisent des navigations terrestres, volantes ou aquatiques ;
le Dragon décrit une orbite, le Wither et les Ghasts restent en vol. Poissons,
calmars, gardiens, dauphins et nautiles nagent dans leau et se débattent au sol.
Grenouilles, lapins et cubes bondissent ; les amphibies peuvent aussi nager.
Ces déplacements sont propres au compagnon : aucune IA hostile native nest importée.
Le rendu réutilise les modèles et animations natifs, avec l’éclairage calculé à
la position réelle du petit compagnon. Les anciens proxys non tickés conservaient
une position précédente à lorigine, ce qui faussait l’échantillonnage de lumière.
## Limites de cette première implémentation
Les rangs IIII, œufs Anomaly, malus et évolution par les soins restent au prochain
ticket. Lobtention des œufs en survie reste à concevoir. Aucun équilibrage de
partie à 30 joueurs ni comportement de chaque actif en toutes circonstances
nest revendiqué. La [couverture](companion-powers-beta019-coverage.md) distingue
les scénarios vérifiés des essais à poursuivre.
La lumière du calmar luisant est une indication visuelle personnelle sur les
surfaces cubiques exposées, sans modifier la lumière du monde ni les règles de
spawn. Les signaux redstone sont un relevé du circuit au déclenchement. Les
variantes de poissons tropicaux doivent avoir été observées personnellement ;
leur mémoire utilise une note `seen_fish_v1` bornée, dérivée des identifiants
natifs de motif et de couleurs. Ces indices ne révèlent aucune entrée via lAtlas.
Les permissions passent par les règles natives et le point dintégration
`CompanionWorld.ALLOW` ; les futurs claims devront sy raccorder.
## Proximité du joueur et transparence
Les familiers volants passent progressivement de transparents à opaques entre
**0,6 et 3,5 blocs** du regard du joueur. La distance à la caméra est également
prise en compte en troisième personne. La courbe est continue et adoucie aux
extrémités : aucun changement brutal dopacité au seuil. Le corps et les couches
des yeux partagent ce fondu, y compris pour le Dragon et le Wither.
Le fondu appartient uniquement au rendu du familier volant. Il nagit ni sur
les monstres du monde ni sur les collisions, pouvoirs ou déplacements. La
couleur et le matériau translucide sont inscrits dans chaque modèle envoyé au
rendu différé ; lopacité ne reste jamais active pour lentité suivante.
## Vérifications de livraison
- `./gradlew check build assemblePack -PsanctuaryFocusedTests=companions,accessories,movement,progression,cycle,mining,building,inventory,inventoryflow,sorting,tutorial` : contrôles purs et **91 tests serveur réussis**.
- Parcours client natif sur un nouveau monde Sanctuary de développement, graine 42 : achat à quatre niveaux, consentement, interface aux échelles 2/3/4, touche G et recharge après changement d’œuf, puis devis de villageois avec paiement réel.
- Extraction des 88 modèles natifs à deux instants ; éclairage et échelle contrôlés. Pour chaque volant, vérification du matériau translucide et de lalpha des couches du corps et des yeux, sans effet sur lentité suivante. Captures de proximité à 4 / 2 / 0,8 blocs.
- Le catalogue ne constitue pas une validation exhaustive du gameplay des 88 paires. Voir la [couverture par espèce](companion-powers-beta019-coverage.md).
- MRpack contrôlé : CRC, versions, JAR embarqué identique au build, Demeure imbriqué identique, FR/EN, 88 passifs et 88 actifs, absence de tests. Les PNG existants et lexport beta.018 gardent leurs empreintes.
Export : [Sanctuary-beta.019.mrpack](../build/Sanctuary-beta.019.mrpack).
Reçu : `build/companion019-artifact.json`.
SHA-256 MRpack : `ba3a7a0ceb1a9a71c135cdb5ddeacb431969eb2e8fd32d8bfaf5fab0e34d3bd3`.
SHA-256 JAR : `e27cb61fdb1d55fec88f86cb8e9696eca6ca12a923129843208afbff6a6efc71`.
+242
View File
@@ -0,0 +1,242 @@
# Inventaire des pouvoirs de familiers — référence 26.2
Relevé du 13 septembre 2026 pour préparer le ticket de validation des pouvoirs.
**Aucun de ces pouvoirs nest activé dans Sanctuary beta.018.** L’œuf y fournit
uniquement lapparence du compagnon, son suivi et les particules de caresse.
La [proposition d’équilibrage v1](companion-powers-balance-proposal.md) classe
les 88 œufs actuels en commun, peu commun, rare, extraordinaire et légendaire,
avec de nouveaux passifs, actifs, coûts et recharges. Cest une proposition
de remplacement ; le présent document reste le relevé historique de la 26.2.
Le code historique contient **88 essences Minecraft** : elles correspondent
exactement aux **88 fichiers d’œufs de Minecraft 26.3-pre-2**, version du pack.
Il définit aussi **25 overrides ItsAlive**, absents du pack beta.018 actuel.
Ce document décrit les branches du code, pas des comportements déjà testés en bêta.
Les effets sans chiffre sont de niveau I. Les passifs concernent le joueur portant
l’œuf. La recharge concerne lactif, en secondes à 20 ticks/s. Chaque utilisation
réussie ajoute **0,45 point d’épuisement**, et non 0,45 barre de faim. Lancien
actif exige laptitude COMPANION_ACTIVE_POWER ; son raccourci était G, configurable.
Les cooldowns sont communs au joueur : changer d’œuf ne les annule pas.
## Les 88 œufs Minecraft de notre version
| Mob / œuf | Passifs et contreparties | Actif | Recharge |
|---|---|---|---|
| Abeille (`bee`) | Chute lente | Pollinisation | 12 s |
| Allay (`allay`) | Chance | Aimant à objets | 8 s |
| Âne (`donkey`) | Résistance | Aimant à objets | 10 s |
| Araignée (`spider`) | Vision nocturne ; Escalade des murs | Langue agrippante | 8 s |
| Araignée venimeuse (`cave_spider`) | Vision nocturne ; Escalade des murs | Poison | 8 s |
| Arpenteur (`strider`) | Résistance au feu ; Faiblesse à leau/pluie | Ruée | 6 s |
| Axolotl (`axolotl`) | Respiration aquatique | Soin | 14 s |
| Blaze (`blaze`) | Résistance au feu ; Faiblesse à leau/pluie | Petite boule de feu | 8 s |
| Breeze (`breeze`) | Chute lente | Ruée aérienne | 4 s |
| Chat (`cat`) | Vitesse ; Apaise les Creepers ; Apaise les Phantoms | Effroi | 12 s |
| Chauve-souris (`bat`) | Vision nocturne ; Chute lente | Sonar des entités | 10 s |
| Cheval (`horse`) | Vitesse II | Ruée | 5 s |
| Cheval-squelette (`skeleton_horse`) | Respiration aquatique ; Vision nocturne ; Trêve morts-vivants | Ruée | 7 s |
| Cheval-zombie (`zombie_horse`) | Vitesse II ; Brûle au soleil ; Trêve morts-vivants | Ruée | 7 s |
| Chèvre (`goat`) | Sauts améliorés ; Résistance | Charge | 7 s |
| Cochon (`pig`) | Aucun | Repérage du butin | 14 s |
| Creeper (`creeper`) | Explosion à la mort sans dégâts au terrain | Détonation | 16 s |
| Cube de magma (`magma_cube`) | Résistance au feu ; Sauts améliorés II ; Faiblesse à leau/pluie | Bond | 5 s |
| Cube de soufre (`sulfur_cube`) | Résistance au feu ; Faiblesse à leau/pluie | Acide | 9 s |
| Dauphin (`dolphin`) | Respiration aquatique ; Grâce du dauphin | Sonar des entités | 9 s |
| Desséché (`parched`) | Résistance au feu ; Faiblesse à leau/pluie ; Trêve morts-vivants | Acide | 10 s |
| Dromadaire (`camel`) | Vitesse | Ruée | 6 s |
| Dromadaire momifié (`camel_husk`) | Vitesse ; Trêve morts-vivants | Charge | 8 s |
| Embourbé (`bogged`) | Vision nocturne ; Trêve morts-vivants | Poison | 10 s |
| Ender Dragon (`ender_dragon`) | Chute lente ; Résistance II | Souffle du dragon | 20 s |
| Enderman (`enderman`) | Force ; Faiblesse à leau/pluie | Téléportation | 6 s |
| Endermite (`endermite`) | Vitesse II | Téléportation | 4 s |
| Évocateur (`evoker`) | Chance | Crocs d’évocateur | 14 s |
| Gardien (`guardian`) | Respiration aquatique | Rayon gardien | 10 s |
| Ghast (`ghast`) | Chute lente ; Faiblesse à leau/pluie | Boule de feu explosive | 12 s |
| Ghast joyeux (`happy_ghast`) | Chute lente | Flottement | 6 s |
| Golem de cuivre (`copper_golem`) | Célérité | Sonar des entités | 10 s |
| Golem de fer (`iron_golem`) | Résistance II | Frappe au sol | 12 s |
| Golem de neige (`snow_golem`) | Aucun | Rafale de neige | 7 s |
| Grand gardien (`elder_guardian`) | Respiration aquatique ; Force de conduit | Rayon gardien | 16 s |
| Grenouille (`frog`) | Sauts améliorés II | Langue agrippante | 6 s |
| Grinceur (`creaking`) | Vision nocturne ; Résistance III immobile | Enracinement | 14 s |
| Hoglin (`hoglin`) | Force | Charge | 9 s |
| Lama (`llama`) | Aucun | Crachat ciblé | 6 s |
| Lama de marchand (`trader_llama`) | Chance | Troc chanceux | 14 s |
| Lapin (`rabbit`) | Vitesse II ; Sauts améliorés II | Bond | 4 s |
| Loup (`wolf`) | Force | Rugissement | 10 s |
| Marchand ambulant (`wandering_trader`) | Chance II | Sonar des entités | 16 s |
| Momifié (`husk`) | Force ; Trêve morts-vivants | Festin | 12 s |
| Mooshroom (`mooshroom`) | Régénération | Festin | 12 s |
| Morue (`cod`) | Respiration aquatique | Bulle protectrice | 12 s |
| Mouton (`sheep`) | Chute lente ; Résistance | Flottement | 8 s |
| Mule (`mule`) | Vitesse ; Résistance | Ruée | 7 s |
| Nautile (`nautilus`) | Respiration aquatique ; Souffle du Nautile | Bulle protectrice | 8 s |
| Nautile-zombie (`zombie_nautilus`) | Respiration aquatique ; Brûle au soleil ; Trêve morts-vivants | Bulle protectrice | 9 s |
| Noyé (`drowned`) | Respiration aquatique ; Brûle au soleil ; Trêve morts-vivants | Crachat ciblé | 9 s |
| Ocelot (`ocelot`) | Vitesse II ; Vision nocturne | Roulade | 5 s |
| Ours blanc (`polar_bear`) | Résistance ; Respiration aquatique | Rugissement | 12 s |
| Panda (`panda`) | Résistance | Roulade | 8 s |
| Perroquet (`parrot`) | Chute lente | Sonar des entités | 8 s |
| Phantom (`phantom`) | Vision nocturne ; Chute lente ; Brûle au soleil ; Trêve morts-vivants | Flottement | 6 s |
| Piglin (`piglin`) | Chance ; Trêve Piglins | Troc chanceux | 16 s |
| Piglin barbare (`piglin_brute`) | Force II ; Trêve Piglins | Frappe au sol | 10 s |
| Piglin zombifié (`zombified_piglin`) | Résistance au feu ; Trêve morts-vivants ; Trêve Piglins | Troc chanceux | 14 s |
| Pillard (`pillager`) | Chance | Crachat ciblé | 7 s |
| Poisson d'argent (`silverfish`) | Célérité II | Téléportation | 5 s |
| Poisson tropical (`tropical_fish`) | Respiration aquatique ; Vision nocturne | Bulle protectrice | 10 s |
| Poisson-globe (`pufferfish`) | Respiration aquatique | Poison | 9 s |
| Poule (`chicken`) | Chute lente | Flottement | 5 s |
| Poulpe (`squid`) | Respiration aquatique | Encre | 9 s |
| Poulpe luisant (`glow_squid`) | Respiration aquatique ; Vision nocturne | Encre | 10 s |
| Ravageur (`ravager`) | Force II ; Résistance | Charge | 12 s |
| Renard (`fox`) | Vitesse ; Vision nocturne | Roulade | 5 s |
| Renifleur (`sniffer`) | Chance II | Repérage du butin | 12 s |
| Saumon (`salmon`) | Respiration aquatique ; Grâce du dauphin | Ruée | 5 s |
| Shulker (`shulker`) | Résistance ; Résistance III immobile | Lévitation | 10 s |
| Slime (`slime`) | Sauts améliorés II ; Chute lente | Bond | 4 s |
| Sorcière (`witch`) | Chance | Potion de soutien | 14 s |
| Squelette (`skeleton`) | Vision nocturne ; Brûle au soleil ; Trêve morts-vivants | Crachat ciblé | 7 s |
| Tatou (`armadillo`) | Aucun | Carapace | 12 s |
| Têtard (`tadpole`) | Respiration aquatique ; Sauts améliorés | Bond | 5 s |
| Tortue (`turtle`) | Respiration aquatique ; Résistance | Carapace | 10 s |
| Vache (`cow`) | Aucun | Purification | 14 s |
| Vagabond (`stray`) | Vision nocturne ; Brûle au soleil ; Trêve morts-vivants | Gel | 9 s |
| Vex (`vex`) | Chute lente ; Vitesse | Téléportation | 5 s |
| Villageois (`villager`) | Héros du village | Faveur villageoise | 18 s |
| Vindicateur (`vindicator`) | Force II | Frappe au sol | 9 s |
| Warden (`warden`) | Vision nocturne ; Résistance II | Onde sonique | 20 s |
| Wither (`wither`) | Chute lente ; Résistance II ; Trêve morts-vivants | Flétrissement | 20 s |
| Wither squelette (`wither_skeleton`) | Résistance au feu ; Trêve morts-vivants | Flétrissement | 12 s |
| Zoglin (`zoglin`) | Force II ; Trêve morts-vivants | Charge | 10 s |
| Zombie (`zombie`) | Force ; Brûle au soleil ; Trêve morts-vivants | Rugissement | 12 s |
| Zombie-villageois (`zombie_villager`) | Chance ; Brûle au soleil ; Trêve morts-vivants | Faveur villageoise | 18 s |
## Détail des traits passifs
- **Trêve** : toutes les 10 ticks, efface la cible des mobs concernés qui visent
le propriétaire, dans une boîte de 24 blocs autour de lui. Ce nest pas une
invulnérabilité. Le chat utilise ce même mécanisme pour Creepers et Phantoms.
- **Morts-vivants reconnus par la trêve** : bogged, camel_husk, drowned, husk,
parched, phantom, skeleton, skeleton_horse, stray, wither_skeleton, zoglin,
zombie, zombie_horse, zombie_nautilus, zombie_villager, zombified_piglin.
Le boss Wither ne figure pas dans cette liste de cibles pacifiées.
- **Faiblesse à leau/pluie** : Faiblesse II et Lenteur I tant que le joueur
est dans leau ou sous la pluie ; ce trait ne code pas de dégât direct.
- **Soleil** : applique 45 ticks de feu chaque seconde si le ciel est lumineux,
visible au-dessus du joueur, sans eau/pluie. Aucun test de casque ici.
- **Défense immobile** : Résistance III si la vitesse horizontale au carré est
inférieure à 0,0025. Le contrôle ne porte pas sur la vitesse verticale.
- **Escalade** : pousse la vitesse verticale à au moins 0,18 contre un mur et
réinitialise la chute.
- **Explosion à la mort** : puissance 3, sans feu ni destruction de blocs.
- Les effets passifs ordinaires sont renouvelés toutes les 10 ticks pour 35 ticks.
Retirer l’œuf arrête leur renouvellement ; les dernières durées peuvent subsister.
## Ce que font réellement les actifs
Les dégâts indiqués sont des points de vie : **2 points = 1 cœur**, avant les
réductions natives éventuelles. Les zones sont des boîtes autour du joueur,
pas un rayon sphérique strict. Elles excluent le propriétaire et les familiers,
mais peuvent inclure dautres joueurs. Les actifs ciblés choisissent la créature
vivante la plus proche dans un cône jusqu’à 24 blocs ; la fonction ne vérifie
pas la ligne de vue. Ces points devront être testés et arbitrés avant portage.
| Actif | Comportement du code historique |
|---|---|
| Acide (`ACID`) | Poison II et Lenteur II pendant 7 s sur la cible. |
| Aimant à objets (`MAGNET`) | Attire les objets au sol dans une zone de 12 blocs autour du joueur, impulsion de 0,45 vers ses yeux. |
| Bond (`BOUNCE`) | Vitesse verticale relevée au minimum à 1,05 ; distance de chute réinitialisée. |
| Bond du chasseur (`POUNCE`) | Impulsion force 2,15, minimum vertical 0,65 ; si une cible existe, Lenteur V pendant 2,5 s. |
| Boule de feu explosive (`FIREBALL`) | Lance une véritable LargeFireball native, puissance dexplosion 1. Les effets sur le terrain suivent le projectile natif. |
| Bulle protectrice (`BUBBLE`) | Respiration aquatique pendant 15 s et Absorption I pendant 10 s. |
| Carapace (`SHELL`) | Résistance IV et Lenteur II pendant 5 s. |
| Charge (`CHARGE`) | Impulsion force 2,35, minimum vertical 0,15 ; Résistance II pendant 3 s. Aucun dégât de contact spécifique codé ici. |
| Crachat ciblé (`SPIT`) | 3 dégâts dattaque et recul sur la cible. Le code applique directement les dégâts : il ne crée pas de projectile de crachat ou de flèche. |
| Crocs d’évocateur (`FANGS`) | Fait apparaître huit crocs natifs en ligne, espacés de 1,35 bloc dans la direction du regard. |
| Détonation (`DETONATE`) | Explosion de puissance 2,25 centrée sur le joueur, sans feu ni destruction du terrain. |
| Effroi (`SCARE`) | Même effet codé que Rugissement : 2 dégâts, recul, Faiblesse I pendant 4 s dans une zone de 11 blocs. |
| Encre (`INK`) | Invisibilité 5 s pour le joueur ; Cécité 4 s aux autres entités vivantes proches, zone de 9 blocs. |
| Enracinement (`ROOT`) | Résistance IV, Absorption II et Lenteur IV pendant 6 s. |
| Faveur villageoise (`TRADE`) | Héros du village II pendant 15 s. |
| Festin (`FEAST`) | Rend 3 points de vie, soit 1,5 cœur, et donne Absorption I pendant 10 s. Ne remplit pas la faim. |
| Floraison (`BLOOM`) | Même effet codé que Pollinisation : Régénération I et Célérité I pendant 6 s aux autres entités vivantes proches, zone de 7 blocs. |
| Flottement (`FLOAT`) | Ajoute une impulsion de 0,45 dans le regard et 0,55 vers le haut ; Chute lente pendant 8 s ; distance de chute réinitialisée. |
| Flétrissement (`WITHER`) | Wither II pendant 7 s et 5 dégâts magiques sur la cible. |
| Frappe au sol (`SLAM`) | 7 dégâts, recul et Faiblesse I pendant 4 s aux autres entités vivantes dans une zone de 8 blocs ; efface leur cible si elle était le propriétaire. |
| Gel (`FREEZE`) | Lenteur IV et Faiblesse I pendant 8 s sur la cible ; ne crée pas de glace. |
| Langue agrippante (`TONGUE`) | Attire la cible vers le joueur avec une impulsion horizontale et une composante verticale de 0,25. |
| Lévitation (`LEVITATE`) | Lévitation I pendant 5 s sur la cible. |
| Onde sonique (`SONIC`) | 10 dégâts de type sonicBoom et recul sur la cible. |
| Petite boule de feu (`SMALL_FIREBALL`) | Lance une véritable SmallFireball native dans la direction regardée. |
| Poison (`POISON`) | Poison I pendant 7 s sur la cible. |
| Pollinisation (`POLLINATE`) | Régénération I et Célérité I pendant 6 s aux autres entités vivantes proches, zone de 7 blocs. Le propriétaire est exclu ; aucune pousse de cultures dans cette fonction. |
| Potion de soutien (`POTION`) | Purification, Régénération II et Résistance I pendant 8 s. Cette potion est fixe, malgré lancien libellé « aléatoire ». |
| Purification (`CLEANSE`) | Retire Lenteur, Fatigue de minage, Nausée, Cécité, Faim, Faiblesse, Poison, Wither et Obscurité. Ne retire pas indistinctement tous les effets. |
| Rafale de neige (`SNOW`) | Même effet codé que Gel : Lenteur IV et Faiblesse I pendant 8 s ; pas de boule de neige native créée. |
| Rayon gardien (`BEAM`) | 6 dégâts magiques et Surbrillance 5 s sur la cible. |
| Repérage du butin (`TRUFFLE`) | Rend lumineux les objets déjà au sol dans une zone de 18 blocs et donne Chance II pendant 12 s. Ne génère aucun trésor ; le marquage des objets na pas de minuterie de retrait ici. |
| Roulade (`ROLL`) | Impulsion force 1,35, minimum vertical 0,08 ; Résistance III pendant 1,5 s. |
| Rugissement (`ROAR`) | 2 dégâts, recul et Faiblesse I pendant 4 s aux autres entités vivantes dans une zone de 11 blocs ; efface leur cible si elle était le propriétaire. |
| Ruée (`DASH`) | Impulsion selon le regard : force 1,8, minimum vertical 0,12 ; distance de chute réinitialisée. |
| Ruée aérienne (`AIR_DASH`) | Impulsion selon le regard : force 1,45, minimum vertical 0,45 ; distance de chute réinitialisée. |
| Soin (`HEAL`) | Rend 6 points de vie, soit 3 cœurs. |
| Sonar des entités (`SONAR`) | Applique Surbrillance pendant 10 s aux autres entités vivantes proches, zone de 28 blocs. Ne détecte ni minerais ni redstone. |
| Souffle du dragon (`DRAGON_BREATH`) | Lance une véritable DragonFireball native. |
| Troc chanceux (`BARTER`) | Chance III et Héros du village I pendant 12 s. Ne produit aucun échange ou objet à lui seul. |
| Téléportation (`TELEPORT`) | Cherche une destination sans collision de 12 à 2 blocs devant le joueur, par pas de 0,5. Se téléporte à la première trouvée et réinitialise la chute. |
| Vomi (`VOMIT`) | Cécité 6 s, Surbrillance 12 s et Faim II pendant 8 s sur la cible. Aucune attraction de horde codée dans cette fonction. |
## Les 25 œufs ItsAlive historiques
Ils sont résolus par lidentifiant de lobjet œuf, pour distinguer notamment les
Mooblooms qui partagent un type dentité. Ils ne sont pas distribués en beta.018.
| Mob / œuf | Passifs et contreparties | Actif | Recharge |
|---|---|---|---|
| Œuf d'apparition d'infecté (`infected`) | Vitesse II à 40 % de vie ou moins ; Trêve Infectés | Rugissement | 10 s |
| Œuf d'apparition de chargeur (`charger`) | Résistance ; Trêve Infectés | Charge | 9 s |
| Œuf d'apparition de cracheur (`spitter`) | Trêve Infectés | Acide | 9 s |
| Œuf d'apparition de Hunter (`hunter`) | Vitesse ; Trêve Infectés | Bond du chasseur | 7 s |
| Œuf d'apparition de Moobloom allium (`allium_moobloom`) | Régénération | Purification | 12 s |
| Œuf d'apparition de Moobloom bleuet (`cornflower_moobloom`) | Chance II | Troc chanceux | 16 s |
| Œuf d'apparition de Moobloom coquelicot (`poppy_moobloom`) | Bonus de vie | Soin | 12 s |
| Œuf d'apparition de Moobloom hibiscus (`hibiscus_moobloom`) | Régénération | Floraison | 14 s |
| Œuf d'apparition de Moobloom houstonie bleue (`azure_bluet_moobloom`) | Célérité | Ruée | 7 s |
| Œuf d'apparition de Moobloom lilas (`lilac_moobloom`) | Vitesse II | Ruée | 7 s |
| Œuf d'apparition de Moobloom marguerite (`oxeye_daisy_moobloom`) | Aucun | Purification | 12 s |
| Œuf d'apparition de Moobloom muguet (`lily_of_the_valley_moobloom`) | Aucun | Poison | 10 s |
| Œuf d'apparition de Moobloom narcisse (`narcissus_moobloom`) | Absorption | Bulle protectrice | 14 s |
| Œuf d'apparition de Moobloom orchidée bleue (`blue_orchid_moobloom`) | Respiration aquatique | Bulle protectrice | 12 s |
| Œuf d'apparition de Moobloom pissenlit (`dandelion_moobloom`) | Chute lente | Flottement | 7 s |
| Œuf d'apparition de Moobloom tournesol (`sunflower_moobloom`) | Célérité | Floraison | 10 s |
| Œuf d'apparition de Moobloom tulipe blanche (`white_tulip_moobloom`) | Résistance | Carapace | 12 s |
| Œuf d'apparition de Moobloom tulipe orange (`orange_tulip_moobloom`) | Résistance au feu | Floraison | 14 s |
| Œuf d'apparition de Moobloom tulipe rose (`pink_tulip_moobloom`) | Régénération | Soin | 12 s |
| Œuf d'apparition de Moobloom tulipe rouge (`red_tulip_moobloom`) | Force | Floraison | 14 s |
| Œuf d'apparition de vomiteur (`vomiter`) | Trêve Infectés | Vomi | 12 s |
| Œuf dapparition de baleine volante (`flying_whale`) | Chute lente ; Respiration aquatique | Bulle protectrice | 10 s |
| Œuf dapparition de Bracken (`bracken`) | Vision nocturne ; Vitesse | Effroi | 12 s |
| Œuf dapparition de fantôme (`ghost`) | Invisibilité ; Chute lente | Téléportation | 7 s |
| Œuf dapparition de papillon (`papillon`) | Chute lente ; Sauts améliorés | Pollinisation | 8 s |
## Sources et points à reprendre
- [Registre et exécution historiques](../../26.2/sanctuary/src/main/java/fr/koka99cab/sanctuary26/sanctuary/gameplay/SanctuaryCompanionPowers.java) : registre vanilla ligne 827, ItsAlive ligne 918 ; passifs ligne 222, actifs ligne 286.
- SHA-256 du Java consulté : `0b3ea8571161fe8eccb059ca2d5ca12f8351c80ad7cd5a81556e199175ebeea5`.
- [Ancien résumé alpha.96](../../26.2/sanctuary/COMPANION_POWERS.md), conservé en lecture seule.
- Œufs présents : fichiers `assets/minecraft/items/*_spawn_egg.json` du JAR
Minecraft 26.3-pre-2 ; noms FR issus de son index dassets local.
- [Contrat beta.018](companions-cosmetics-beta018.md) : pouvoirs expressément exclus du portage actuel.
Le présent relevé corrige des imprécisions du résumé historique : le sonar du
golem de cuivre est le sonar générique dentités ; le chat possède aussi Vitesse ;
lEmbourbé, lAraignée venimeuse et le Grinceur ont Vision nocturne ; le dromadaire
momifié a Vitesse ; le Nautile a aussi Respiration aquatique ; le Phantom a aussi
la trêve. Potion nest pas aléatoire, Festin ne nourrit pas, et les « projections »
de squelette, noyé et pillard appliquent des dégâts ciblés sans projectile natif.
Les seuls projectiles natifs créés dans le registre actif sont les boules de feu
et le souffle du dragon ; les crocs sont leurs propres entités.
Aucun effet, identifiant, réglage, monde ou binaire na été modifié pour ce relevé.
+153
View File
@@ -0,0 +1,153 @@
# beta.018 — cases de familier, cape et cosmétique de tête
Ticket du 13 septembre 2026, branche `codex/companions-cosmetics-beta018`.
Contrat écrit avant les changements de stockage. Référence 26.2 consultée en
lecture seule ; aucun pouvoir passif ou actif de familier n'est porté ici,
sur décision explicite du créateur. Leur validation aura son ticket dédié.
## Interface et objets
L'en-tête de l'inventaire indique uniquement Inventaire / Inventory, sans
compteur de rangées. La capacité reste lisible dans Progression et par les cases.
Trois cases d'équipement distinctes rejoignent le panneau personnel, toujours
disponibles : un œuf de familier, une cape, un objet cosmétique sur la tête.
Chaque case contient un vrai objet, limité à une unité. Les clics et Maj-clics
utilisent les menus synchronisés et respectent les rangées débloquées.
De haut en bas : cosmétique de tête, cape, œuf de familier, main secondaire.
Cet ordre est visuel ; les identifiants de stockage familier/cape/tête restent fixes.
Maj-clic équipe automatiquement œufs et capes ; le cosmétique se place à la main.
Le tri et le changement de hotbar ne déplacent pas cet équipement.
Maj + clic gauche maintenu permet de parcourir les cases et dexécuter leur
Maj-clic natif successivement. Le geste part dune case avec le curseur vide ;
chaque case est visitée une seule fois, y compris lors dun mouvement rapide.
Relâcher le clic ou Maj termine le geste. Coffres, fours et autres conteneurs
gardent leurs destinations et restrictions natives. Le catalogue créatif garde
ses gestes dorigine ; linventaire personnel Sanctuary utilise ce raccourci.
La touche de rangée fonctionne également en jeu sans écran : Tab avance,
Maj + Tab recule. Elle reste configurable et garde la même sélection de rangée
à la réouverture de linventaire. Seules les rangées débloquées sont parcourues.
Une commutation interrompt lutilisation de lobjet tenu, comme un changement
de case de hotbar natif, et reste validée par le serveur.
Les trois PNG fournis dans `../textures/{egg,cape,cosmetics}.png` sont copiés sans
retouche dans le mod et dans les sources du resource pack.
Un œuf d'apparition de mob équipé fait apparaître un petit compagnon temporaire
qui se déplace réellement : navigation autour des obstacles, promenade proche
et téléportation vers une place libre s'il est trop loin ou bloqué. Le suivi par
apparition à côté du joueur de la 26.2 est remplacé. Le retirer le fait disparaître.
Il est invincible et ne collisionne pas avec les autres entités. Le clic droit
du propriétaire le caresse et émet des particules aux couleurs de son œuf.
Une entité de familier dédiée utilise l'apparence du mob, afin de ne pas hériter
de ses attaques ou comportements destructeurs. Les animations restent visuelles.
Le familier n'est pas une source renouvelable de butin, d'XP ou de produits.
Ses pouvoirs ne sont pas activés. Les œufs natifs restent disponibles pour les
tests opérateur ; leur acquisition en survie n'est pas inventée dans ce ticket.
`sanctuary:zero_cape` est une première cape de test, libellée Cape Zéro / Zero Cape,
avec un visuel provisoire trouvé en ligne et une provenance documentée. Elle se
teste depuis le créatif ou `/give`. Elle utilise le mouvement de cape natif ;
elle ne modifie ni les élytres ni le compte Minecraft.
Le cosmétique accepte tout objet/bloc. Il ne remplace pas le casque serveur et
ne donne ni protection, ni effet, ni déclenchement d'objet. Les propriétés d'état
de bloc sont utilisées pour le rendu lorsque possible. Un piston porté sur la
tête s'étend brièvement quand le joueur reçoit des dégâts, uniquement en rendu :
aucun bloc placé ou déplacé, aucun signal de redstone.
## Sauvegarde, mort et New Game+
Ajout d'un champ joueur `sanctuary:accessories`, schéma 1, contenant trois piles
optionnelles dans l'ordre familier/cape/tête. Un ancien joueur beta.017 commence
avec trois cases vides ; aucun déplacement ni changement des 54 cases existantes,
du journal de progression ou de cycle. Les données inconnues/corrompues sont
conservées et rendues non modifiables, sans remplacement silencieux.
Les objets suivent la mort native : ils tombent si keepInventory est désactivé,
sont conservés sinon. Le New Game+ les garde comme le reste de l'inventaire.
La créature temporaire n'est jamais sauvegardée dans les chunks ; elle est
recréée depuis l'œuf après reconnexion/changement de dimension, sans doublon.
Les apparences cape/tête sont synchronisées par le serveur aux observateurs,
y compris lors de l'arrivée d'un nouveau joueur. Aucun bonus serveur ne dépend
de ces apparences. Nouveau contrat réseau `sanctuary:accessories_v1` : client et
serveur beta.018 ensemble. Aucun monde personnel ou installation n'est modifié.
## Sallonger et se reposer
W est un geste de base gratuit. Sallonger disparaît des aptitudes achetables.
Maj + W conserve le déblocage Se reposer et son coût. Le repos utilise le rendu
natif de sommeil au lit, orienté selon le joueur, distinct de la posture mobile.
Il ne déclenche pas le sommeil serveur, ne fixe pas de point de réapparition et
ne fait pas avancer le temps. Les anciens champs et preuves dachat `lying`
sont conservés pour lire les sauvegardes beta.017 ; aucun nouvel achat nest
accepté et `lyingCost` devient un champ historique sans effet.
## Validation
### Sélections de minage et de construction
Le retour dessai ajouté pendant ce ticket fixe le groupe au premier clic
maintenu avec R. Le client conserve lorigine, les cases et le palier ; le
serveur valide la visée au démarrage puis poursuit le même travail sans exiger
de regarder encore lorigine. Tourner la caméra ou bouger en restant à portée
ne remet pas la charge à zéro. La construction garde son plan, sa face et ses
directions de pose initiales, y compris pour les escaliers. Le contexte de pose
est figé sans modifier la caméra ou la position réelle du joueur.
La molette règle le palier avant le clic. Pendant le maintien, le groupe reste
fixe, même après sa fin : il faut relâcher avant den choisir un autre. Les
interruptions par changement doutil, portée, menu, mort, droits, matériaux ou
perte de maintien restent actives. Les interactions natives, durées, coûts et
limites de blocs restent inchangés. Aucun nouveau format de sauvegarde ou paquet
réseau nest introduit pour ce verrouillage ; son état est temporaire.
### Parcours client
Le parcours automatisé du client Minecraft 26.3-pre-2, sur un monde de
développement neuf de graine 42, passe avec le vrai clavier et la vraie souris :
- Emplacements synchronisés et ordre visuel, inventaire à 1 et 6 rangées, FR/EN.
- Maj-clic œuf/cape, placement manuel du cosmétique, piston avant/après un dégât
serveur et rendu d’épée, tête de joueur, coffre et piston.
- Suivi vivant et caresse ; rendus loup, vache, perroquet, creeper, morue et ghast.
- W gratuit, achat du repos, rendu de sommeil distinct et arrêt par déplacement.
- Tab en jeu, Maj inverse, maintien sans répétition, autre touche configurée,
conservation des 54 positions visibles et de la colonne sélectionnée.
- Balayage rapide dans les deux sens dun coffre, destination pleine, une seule
visite par case, tri ingrédient/combustible du four, arrêt au relâchement de Maj,
équipement automatique œuf/cape et absence de cosmétique automatique.
- Veine de huit blocs entièrement cassée après changement de visée et déplacement
à portée ; cible voisine conservée pendant le maintien, puis minée après
relâchement et nouveau clic. Molette sans effet sur la sélection verrouillée.
- Surface de 25 escaliers terminée en regardant ailleurs et en bougeant, avec
orientation initiale et consommation exacte ; aucune nouvelle surface après
la fin tant que le clic est maintenu.
Les captures sont dans `mods/sanctuary/build/run/clientGameTest/screenshots/` ;
le journal complet final est `build/group-lock018-client.log` (1 min 46 s).
`build/cosmetics018-client.log` conserve le premier parcours des accessoires
et raccourcis, également réussi avant lajout des sélections verrouillées.
Limites : les essais ne constituent pas une validation de toutes les espèces,
de tous les modèles spéciaux dobjets/blocs, ni dune session multijoueur sous
latence. Le déplacement du compagnon reste terrestre, même pour une apparence
aquatique ou volante. Les pouvoirs de familiers attendent leur ticket dédié.
### Serveur et distribution
`./gradlew check build assemblePack -PsanctuaryFocusedTests=accessories,progression,movement,inventory,inventoryflow,sorting,cycle,mining,building`
passe en **4 min 51 s**, avec **67 tests serveur obligatoires réussis**, ainsi
que les contrôles purs du dépôt. Journal : `build/cosmetics018-check-build.log`.
Les tests couvrent les six capacités dinventaire, équipement typé, destination
pleine, mort, sauvegarde/rechargement, conservation au prestige, données futures
préservées, navigation et invincibilité du familier, interruption de larc lors
dun changement de rangée, protections et coûts natifs du minage/construction.
La durée de minage reste identique entre une caméra fixe et une caméra qui
tourne ; le contexte de construction figé ne fuit pas dans la pose individuelle.
Export local : [Sanctuary-beta.018.mrpack](../build/Sanctuary-beta.018.mrpack),
**2 617 278 octets**. SHA-256 :
`06997ae60f3306b9b973c4b5e83894ca302905fbdd337e1d0c36abf0fa4d9aba`.
Reçu : `build/cosmetics018-artifact.json`. ZIP, versions, JAR Sanctuary et Demeure
embarqués, ressources, libellés, index packwiz et dépendance Fabric API vérifiés.
Les exports beta.003 à beta.017 restent identiques ; aucune installation
personnelle ni canal publié na été modifié.
+187
View File
@@ -0,0 +1,187 @@
# Sanctuary — analyse de la vision et préparation de la consultation
**14 septembre 2026 · Ticket documentaire local CONSULT-01 · Branche `codex/consultation-discord`.**
Livrable associé : **[120 posts Discord prêts à copier](consultation-discord-posts.md)**. Ils couvrent les décisions de jeu, les retours sur les mécaniques actuelles et les besoins de communauté déduits de lanalyse. Ils nont pas été publiés. Aucun vote, témoignage ou accord danciens joueurs na été inventé.
Un **[extrait des 12 premiers posts](consultation-discord-premiere-serie.md)** permet de lancer la discussion sans parcourir toute la banque.
## 1. Ce que lanalyse fait ressortir
**Sanctuary dispose déjà dune progression personnelle documentée, mais sa promesse centrale — transformer ensemble un monde grâce à ses activités — demande encore sa boucle de jeu collective.** On peut développer son personnage, explorer, construire, recommencer et créer une faction. Les recherches et contributions ouvrant un continent, l’économie, les protections territoriales, les quêtes et la grande histoire ne sont pas encore reliées en un parcours jouable documenté.
La vision est cohérente autour de trois expériences : devenir capable de choses nouvelles ; rendre le monde habitable avec dautres ; laisser une histoire visible dans les lieux et le ciel. Ses inconnues les plus importantes portent sur **qui peut agir, à quel rythme, avec quelles conséquences pour les autres et pour ceux qui arrivent plus tard**. Choisir dabord les objets, leurs recettes ou leurs prix laisserait ces problèmes sans réponse.
Les anciens joueurs peuvent particulièrement bien éclairer les moments qui rassemblaient, les contraintes qui décourageaient, le plaisir des pouvoirs et la manière dont les voisinages fonctionnaient. La documentation ne contient pas un corpus de leurs retours permettant de présumer ces préférences. Les deux premières questions sont donc libres et précèdent les listes de fonctionnalités.
## 2. Périmètre et méthode
La base est l**état local de travail**, qui comportait de nombreuses modifications et additions avant cette tâche, sur `codex/realtime-tracking-beta037`. La configuration indique `mod_version=beta.037` et `pack_version=beta.037`. Les notes décrivent des exports locaux ; cela ne prouve pas que les anciens joueurs disposent de cette version ni quelle est installée sur un serveur public.
Le corpus inventorié comprend les **102 fichiers Markdown alors présents dans `docs/`**, le README, le changelog, les consignes de contribution et de versionnement, les notices et guides du pack, les README des modules et les archives documentaires pertinentes. La vision, les cahiers de cosmologie, structures, expansion et progression ont été examinés pour leurs décisions ; les contrats de versions pertinentes ont été croisés pour actualiser les statuts. Les historiques de terrain et de validation ont été parcourus par leur structure, leurs états et leurs limites. Les grands inventaires de recettes servent à vérifier la couverture des familles, pas à voter ligne par ligne sur des milliers de recettes.
Il sagit dun **audit documentaire de conception**, pas dun nouvel audit exhaustif du code, dune vérification de toutes les preuves historiques ni dun essai multijoueur. « Livré » ci-dessous signifie **décrit comme livré et accompagné de vérifications dans le contrat concerné**. Aucun test Minecraft na été exécuté pour cette tâche documentaire et aucune compatibilité externe nest extrapolée depuis une ancienne étude.
Ordre de lecture retenu en cas de divergence : décision explicite récente pour lintention ; contrat de livraison le plus récent sur la mécanique pour l’état documenté ; proposition datée pour les possibilités ; référence alpha ou 26.2 pour lhistorique. Un document récent ne remplace un ancien contrat que sur les sujets quil traite.
Les posts portent quatre statuts :
- **Souvenir** : information à recueillir, absente des sources.
- **Choix ouvert** : décision explicitement laissée à concevoir ou à équilibrer.
- **Retour sur lexistant** : une règle existe ; on évalue son effet sans la présenter comme indécise à lorigine.
- **Question déduite** : conséquence ou besoin identifié par lanalyse, à confirmer auprès des joueurs.
## 3. Ce qui est déjà fixé ou documenté comme jouable
| Sujet | Point de départ à conserver dans les discussions | Sources |
| --- | --- | --- |
| Monde | Un monde flottant commun ; Petit 512, Moyen 724, Grand 1 024 de diamètre nominal. Chantier de terrain clôturé par le créateur sur alpha.30.7. | [Vision](vision.md), [alpha.30.7](generation-alpha30.7.md) |
| Expéditions | Quatre régions de 512 blocs déjà ouvertes dans les nouveaux mondes concernés. La révision beta.002 retient nord boréal, est tropical/volcan, sud aride/canyon, ouest humide/océan ; les futures ouvertures collectives restent absentes. | [beta.001](expeditions-beta001.md), [beta.002](expeditions-beta002.md), [expansion](expansion.md) |
| Arrivée | Fiche dhabitant et couleur, accueil, cinématique de 29,5 secondes que lon peut passer. Départ 3/3/3. | [Progression](progression-beta003-contract.md), [introduction](introduction-beta031.md) |
| Compétences | Six compétences fonctionnelles. Minage individuel à vitesse native au départ, jusqu’à 200 % et veines de 256 blocs ; construction jusquaux plans 15×15 ; inventaire de 9 à 54 cases, hotbar comprise. | [Minage](mining-beta008.md), [construction](building-beta009.md), [inventaire](inventory-beta010.md) |
| Coûts et amorce | Courbe par défaut 1, 2, 4, 8, 16, 32, 48 niveaux ; inventaire sur les cinq premiers achats. Cinq étapes de premiers gestes, 8 points dXP chacune, une fois par habitant et monde. Équilibrage à éprouver. | [beta.013](progression-inline-beta013.md), [tutoriel](tutorial-xp-beta016.md) |
| Mort | Compétences et aptitudes conservées. Sans keepInventory, 70 % des points dXP non investis laissés en orbes récupérables par tous ; objets selon les règles de mort applicables. | [Contrat initial](progression-beta003-contract.md), [inventaire](inventory-beta010.md) |
| New Game+ | Volontaire après les six compétences au maximum, sans exiger toutes les aptitudes. Compétences et XP remises à zéro par défaut ; aptitudes, objets, connaissances, monde et affiliations conservés. Objets des rangées verrouillées retirables. | [Cycles](cycle-factions-beta011.md) |
| Factions | Une affiliation à la fois. Un cycle donne un prestige et une charge ; une charge fonde deux places, une charge ajoute une place. Invitations, départ, exclusion, transfert et dissolution existent. Aucun claim nen découle. | [Cycles et factions](cycle-factions-beta011.md) |
| Demeure | Mesure des empreintes dhabitation dans les zones connues ; la décroissance après absence ne constitue pas un droit de reprise de propriété. | [Demeure](demeure-beta006.md), [module](../mods/demeure/README.md) |
| Connaissances et carte | Carte native personnelle de surface, exploration mémorisée avant achat, absence de partage automatique ; filtres Discovery des entrées connues. Bestiaire complet, minimap, marqueurs et partage restent des sujets distincts. | [Atlas](atlas-beta005.md), [menus beta.033](menus-discovery-beta033.md), [navigation](blocodex-navigation.md) |
| Recettes | Catalogue JEI porté, connaissances distinctes de la possession, fabrication manuelle libre. 67 collections dont une technique ; 2 042 recettes classées et 126 advancements associés. Fiches détaillées dobtention et musée encore futurs. | [Recettes](recipes-jei-beta024.md), [collections beta.035](collections-beta035.md) |
| Familiers | 88 paires de pouvoirs révisées, recharges et budgets partagés, nom et taille persistants, interactions. Acquisition de survie, rangs IIII et Anomaly non livrés. | [beta.020](familiar-interactions-beta020.md), [beta.032](spawn-eggs-v2-beta032.md), [catalogue](spawn-eggs-v2-catalogue-beta032.md) |
| Gestes et visuels | Portage et piles de joueurs, plongeon, posture allongée, plané avec animal volant porté, cosmétiques interactifs et lumières dynamiques. La TNT portée est une vraie exception avec dégâts. | [Accessoires](companions-cosmetics-beta018.md), [TNT](head-cosmetics-beta021.md), [lumières](dynamic-lights-beta030.md), [beta.036](corrections-beta036.md) |
| Temps et objectifs | Temps réel saisonnier, choix serveur, sommeil sans saut de nuit, phantoms naturels dinsomnie désactivés en temps réel. Suivi commun avec trois objectifs épinglés au maximum ; quêtes non livrées. | [beta.037](realtime-beta037.md) |
| Canon | Neuf anciens personnages, ruines comme traces danciennes solutions, Indoors contrôlés et Backrooms orphelins. Le canon et les identités retenus ne deviennent pas un sondage de popularité. | [Cosmologie](cosmologie.md) |
## 4. Les tensions de design à résoudre en priorité
| Tension | Pourquoi elle change réellement la partie | Décision ou essai utile |
| --- | --- | --- |
| Coopération / passage obligé par le prestige | Un groupe damis peut vouloir se structurer avant quun membre ait maximisé six compétences. Les places financées par répétition de cycles peuvent faire du groupe une récompense de grind. | P06, P07, P10P12, puis essai de fondation à plusieurs. |
| Départ fragile / joueur occasionnel | Trois cœurs et neuf cases peuvent créer de lentraide ou décourager avant la première relation sociale. Les premiers gestes donnent déjà de lXP : il faut mesurer le départ actuel. | P04, P08, P09, P15 et une heure sans commandes. |
| Exploration / stocks disponibles | Quatre îles sont déjà ouvertes, et certains îlots aériens de la fin alpha sont volontairement riches. « Ressources rares » nest pas une preuve de besoin dexpansion. | P19, P23, P26P27 ; relever les ressources effectivement accessibles pendant une partie. |
| Initiative / décision commune | Ouvrir une île modifie durablement le monde de tous. Le financeur, le constructeur de la machine et les futurs usagers ne sont pas forcément les mêmes. | P21P25 ; préciser aussi la décision de lancement et lannulation avant consommation. |
| Progression / économie de lXP | Capacités, enchantements, transports et futurs gestes créatifs peuvent se concurrencer. Une source dXP dominante peut décider du rythme de tous les autres systèmes. | P09P10, P18, P29 ; mesurer les budgets par activité avant de choisir les prix. |
| Habiter / combattre / plaisanter | Factions, Demeure, braquages, téléportations, TNT et lucky blocks ne partagent pas encore un contrat de protection. Un geste amusant pour lun peut détruire le projet dun autre. | P31P40, P114, P102 ; tester des situations aux frontières des permissions. |
| Monde permanent / pression horaire | Temps réel, offres horaires, dimanche, quotas et production peuvent favoriser une disponibilité que les anciens nont plus. | P04P06, P49, P52, P54P55, P58, P100, P113. |
| Découverte / connaissance extérieure | Les joueurs connaissent déjà Minecraft et peuvent consulter un wiki. Le secret du catalogue ne doit pas devenir une obligation dignorer ce quils savent. | Garder la fabrication libre ; P63P67 et un parcours dinformation volontaire. |
| Attachement / objet échangeable | Un compagnon nommé et singulier peut aussi être perdu, vendu, prêté ou remplacé par un plus rare. Ces intentions produisent des relations très différentes. | P71P75 ; fixer lacquisition et la récupération avant un marché des œufs. |
| Histoire commune / événements manqués | Boss uniques, reliques et révélations peuvent laisser les absents sans rôle. Le ciel et les archives peuvent valoriser une première victoire sans rendre les suivants inutiles. | P06P07, P82P86, P107P108, P116. |
| Ballast / conservation économique | Une trace narrative nest ni un prélèvement autorisé ni un stock restituable. Rendre le ballast exploitable peut créer une nouvelle source de monnaie ou de matériaux. | P92P93, P117 ; un cas complet dopération → trace → lieu → récupération. |
| Proximité du créatif / avenir de la survie | Les possibilités créatives changent la valeur de la production, des objets rares et du commerce. Les droits opérateur ne sont pas une récompense de gameplay implicite. | P18 et P85 avant de définir la récompense des sept boules. |
## 5. Carte complète des décisions restantes
Les plages renvoient aux identifiants du [document de posts](consultation-discord-posts.md). La colonne finale conserve les détails à spécifier après la consultation : les joueurs choisissent une expérience, puis le ticket en fait une règle testable. Aucun de ces détails nest marqué comme implémenté par ce document.
| Domaine | Décisions de jeu encore ouvertes ou à réévaluer | Posts | Détails à arrêter au ticket |
| --- | --- | --- | --- |
| Identité du projet | Souvenirs à retrouver, irritants, priorité des piliers, durée des sessions et des aventures. | P01P05 | Population et rythme de test visés ; distinguer monde permanent et futurs départs saisonniers. Aucun effacement décidé. |
| Accueil et inclusion | Place des nouveaux, absents, non-combattants, autonomie des premières heures. | P06P09, P111P112 | Aides, jalons, lisibilité de la fiche et de lintroduction, accès sans vocal, besoins de clavier et de lecture. |
| Progression | Temps du premier cycle, sources dXP, intérêt du prestige, confort achetable et plafond dinventaire. | P09P16 | Prix et courbes après mesures ; ne pas récompenser de nouveau une découverte déjà payée ; traitement des futurs plafonds sans altérer les cycles archivés. |
| Mort | XP publique ou réservée, pertes ordinaires et objets personnels, effort de récupération. | P13P14, P73, P90P91 | Expiration, décès répété, vide, lave, déconnexion, keepInventory et garanties contre les doubles restitutions. |
| Factions | Moment de fondation, charges et capacité, délégation et responsable absent. | P11P12, P35 | Rôles fins, seuils, invitations, règles de trésorerie future et sort des dépenses au départ ; ne pas confondre couleur dhabitant et identité collective. |
| Claims et voisinages | Protection personnelle avant faction, agrandissement, visiteurs, abandon, visibilité Demeure. | P31P36 | Emprise verticale, sous-sols, limites de chunk, espaces publics, accès aux animaux et coffres, chevauchements, alertes et contestations. Demeure reste une mesure sauf nouveau contrat explicite. |
| Conflit et risques | PvP, conditions des braquages, enjeu volable, présence des défenseurs, dégâts collatéraux. | P37P40, P114 | Fenêtres, cooldowns, avertissements, attribution dune attaque, usages du foret, sanctions et réparation dincidents. Les dates dabsence ne valent pas consentement. |
| Expansion collective | Motivation après les quatre îles initiales, cadence, décideurs, formes de contribution et coûts. | P19P23 | Population de référence, progression des prix, plusieurs projets simultanés, annulation, remboursement, droit de lancer et usage public de la nouvelle terre. |
| Recherches et machine | Informations accessibles avant engagement, apprentissage, montage et programmation. | P24P25, P60 | Rôles de lassembleur, contrôleur, terminal, dépôt et ancre ; connexions, recettes, autorisations ; distinction mailbox / dépôt collectif / dépôt de machine. |
| Territoire et ressources | Préservation de l’île, carrière, pénurie bloquante, ressources exclusives, identité des futurs biomes. | P19, P26P27, P118 | Relevés après génération, ressources finies/renouvelables, emprises et accessibilité ; nouveau biome et palette sur graines versionnées, sans rouvrir implicitement le chantier alpha. |
| Ruines | Utilité immédiate, indices, réappropriation, lien avec les machines et les personnages. | P78P79, P84 | Pour chaque lieu : ancien usage, plan, accès, butin, état, exceptions collectives, présence garantie/facultative et répétition. Relire les versions plus récentes avant de reprendre WG-26. |
| Donjon majeur | Blocage quil lève, nature du défi, bénéficiaires, répétition, usage après victoire. | P80P84 | Identité et comportements du boss, objet installé/consommé/conservé, site indispensable accessible, objet perdu, participants tardifs, spawners et récompenses personnelles. |
| Transport | Première traversée, priorité des moyens, coût et place des réseaux publics. | P28P29, P119 | Waystones horizontales connues et ascenseurs, rayon et arrivée approximative du téléporteur, temps dactivation, accès, capacités et vitesses ; ziplines, leads consommés par grappin, bateau/poule, biplan, Happy Ghast, taille de Magic Carpet. |
| Monnaies | Rôle pratique des trois gemmes, convertibilité, production et usages de dépense. | P42P45, P48 | Origine et génération des rubis/saphirs, recettes, taux, frais, quantités, sinks et effets des fermes. Les valeurs de ponte de la vision demandent un essai d’économie. |
| Boutique et marché | Lieu, stock réel ou apport du serveur, prix, échanges entre joueurs et renouvellement des offres. | P41P46, P113 | Nombre et prix des neuf emplacements envisagés, durée dune offre, frais dannonce, réservation, transfert de propriété, livraison échouée et stockage plein. |
| Catalogue et courrier | Signification exacte dune réserve en saphirs, garantie apportée, livraison et délégation. | P45, P47, P49 | Limites par objet, dépôt ou assurance, propriétaire de la mailbox, récupération de laccès, boîte pleine et envoi annulé ; éviter toute création illimitée par réservation. |
| Navets et loterie | Achat dominical accessible, place du hasard, exclusivités et attentes des absents. | P49P50 | Cours, fréquence, péremption éventuelle non décidée, ticket gagné/comment, probabilités, plafond, financement et règles des futurs casinos événementiels. |
| Quêtes et événements | Activités utiles, quotas, partage des récompenses, rendez-vous libres ou programmés. | P51P54 | Trois difficultés/gemmes, acceptation, abandon, expiration, dépôts, attribution XP/butins ; auteur des panneaux, inscriptions, anniversaires, visiteurs, concours et Gazette. |
| Villageois et automatisation | Premières tâches, personnes autorisées, production en labsence des joueurs. | P56P58 | Rayon des cloches, bannières en conflit, salaires et entretien, stocks sources/destinations, métier, refus, capture/changement d’équipe ; différences ticks chargés / heures réelles. |
| Machines de production | Convoyeurs, ordinateur, terminal commun et chargement de chunk. | P56, P58P60 | Six ports, langage et exemples, stockage jusqu’à 128 coffres envisagés, connexion/permissions, périmètre et durée des clés de chunk, limites de charge serveur. |
| Construction avancée | Plans guidés ou automatisés, circulation des schémas, utilité des prefabs. | P17, P61 | Attribution de lauteur, partage/vente, matériaux inconnus, vraie consommation, permissions, supports, annulation ; vérifier Litematica sur la version exacte au ticket. Voxelier reste non prioritaire. |
| Cartographie | Transmission volontaire, niveau dinformation de la minimap, reliefs superposés, marqueurs. | P62P64 | Copie ponctuelle ou mise à jour, périmètre du partage, provenance, carte de faction, limites du brouillard et de lexport Web ; autres dimensions et cartes souterraines. |
| Découvertes | Critères du bestiaire, fiches dobtention, niveau de guidage, alchimie par familles. | P65P67, P115 | Vue/possession/fabrication distinctes, variantes despèces, gestes sans recette, encyclopédie technique, musée et récompenses éventuelles de collection ; contenu déjà connu conservé. |
| Profil et affinités | Vitrine, favoris, effet sur apprivoisement, production ou chasse, consultation dautrui. | P68P69, P115, P120 | Nombre de trophées ; type/variante favori ; petit coefficient et bénéficiaire du butin ; délai de 24 h déjà retenu ; gestes et portée de lecture des PV. |
| Familiers | Acquisition, hasard/objectif choisi, marché, perte, rangs et nature dAnomaly. | P71P76 | Contrat d’œuf de survie inerte à décider avant distribution ; duplication et première récompense ; sort des œufs de test, familles rares, découverte et stabilisation ; essais solo puis coop. |
| Capes et objets exceptionnels | Valeur de souvenir, mérite, appartenance ou collection ; puissance des anomalies. | P50, P75, P77 | Visuel original de Cape Zéro, modes dobtention des capes, tables des quatre familles de lootboxes, équipement titane indestructible et enchantements, rareté qui reste désirable sans remplacer tout le reste. |
| Cosmologie et récit | Manière de raconter, rôle des joueurs dans lissue, trois épreuves manquantes. | P78, P85P86 | Nature exacte de la découverte, rôle encore vague de Zuri, liens dAlex, journaux des neuf personnages, apparitions, dénouement ; ces révélations peuvent rester un atelier dauteur séparé. |
| Fin et après-fin | Réussite commune, droits créatifs de gameplay, poursuite du monde. | P05, P18, P85P86 | Sept objets et leur réunion, seuil de fortune, cauchemar, rencontre dAlpha, nécromancien, conséquences de victoire, nouveaux arrivants et nouveaux cycles. |
| Dimensions | Priorité et rôle distinct des Cavernes, Alpha, Backrooms et Indoors. | P30, P87, P94 | Accès Nether/End existants ou à relier au parcours, ressources des Cavernes, cité ancienne et boss, apparence Alpha limitée à sa dimension ; conservation des régions exploitées. |
| Backrooms | Accès, retour, récupération de biens perdus, propriété et rétention. | P88P91 | Lumière et niveau de danger, lieu darrivée, mort/déconnexion, secours, distinction objet identifié / ressource de décor / résidu. Aucun espace réel ne devient sans référence de sauvegarde. |
| Ballast et géologie | Trace gratuite, coût, conséquence contrôlable, lecture des périodes, extraction. | P92P93, P117 | Opérations contributrices, unités, conservation ou transformation, provenance, période, moment de génération, strates des anciens, bornes ; préserver les lieux déjà explorés. |
| Indoors | Usages, géométrie, propriété partagée et accès de remplacement. | P94P97 | Tailles 5³ à 100³ indicatives, transfert/vente, déconnexion, visiteurs coincés, fermeture et devenir du contenu ; dimension technique ou régions dun espace partagé à choisir par les développeurs. |
| Cuisine et cultures | Complexité, terroirs, serres, transmission du savoir et temporalité alimentaire. | P98P101 | Premier catalogue dingrédients/plats, ustensiles, étapes, nature de la « poudre », maturation du vin/fromage/saucisson, pages de Steve et pages secrètes ; rôle nutritionnel à mesurer avec Faim/Repos/familiers. |
| Faune et végétation | Utilité et attachement aux rares, nouveaux environnements, productions localisées. | P48, P99, P106, P118 | Tables dapparition, ponte non reproductible, armures de poule, variantes Moobloom, fleurs et bois lavande/ébène/mossy/blueberry ; formes, noms FR/EN et identifiants à stabiliser. |
| Humour et danger | Limites dOnly Fun, événements absurdes, proximité des nouveaux hostiles. | P40, P102P103, P106 | Portée des interactions, consentement, baleine fantôme et Happy Creeper, classes de zombies, fréquence, raids éventuels, distances aux refuges et comportement des boss. |
| Armes et petits objets | Place des armes à feu, objets dactivité et écoute de musique. | P104P105, P110 | Munitions pépites/lingots/minerais, argent/titane, creeper lock/mining rifle, enchantements, Weather/Fragment/Randomizer/Mega TNT ; format caméra/cartes, particuleur, référence du disque et lecture audiovisuelle. |
| Ciel et calendrier | Organisation des étoiles, constellations, droits de dessin, cycles et datation visible. | P107P109, P116 | Géométrie selon le point de vue, noms et longue-vue, étoiles adjacentes, coût point/segment, cycle stellaire de sept jours, origine et relation au soleil ; étoiles des absents et densité à long terme. |
| Site et histoire | Gazette, activités entre connexions, publication volontaire et portée des découvertes. | P70, P120 | Identités partagées, événements personnels/collectifs, spoilers, causalité, exports et actions Web validées serveur ; journal fonctionnant sans site. Les agrégats matériels ne suffisent pas à reconstruire cette histoire. |
| Pack et exploitation | Accessibilité, performances et format des essais ; besoin réel des intégrations. | P111P112 | Contrôles sans bouton latéral, lisibilité, effets et sons réglables ; matrice de versions/licences, machines cibles, support Mac/Windows, rollback et canal. Master Key : rôles de maintenance, journal des réparations et diagnostics, distincts des pouvoirs de jeu. |
## 6. Incohérences et formulations documentaires à corriger
Ces points sont relevés pour un futur entretien documentaire ; les fichiers sources existants nont pas été réécrits dans cette tâche.
| Passage pouvant induire en erreur | Lecture actualisée | Correction documentaire proposée |
| --- | --- | --- |
| [README](../README.md) : nouveautés beta.037, tableau de version et exemple de JAR encore beta.036. | Les deux propriétés sont beta.037 ; [la livraison](realtime-beta037.md) est locale. | Une courte fiche de version actuelle, puis un historique daté. Ne pas déduire l’état du canal depuis la version de travail. |
| [Vision](vision.md) : progression décrite comme future dans « Périmètre de départ », conclusion invitant encore à obtenir le premier monde stable. | Des compétences, cycles et factions sont décrits comme livrés ; worldgen clôturé sur alpha.30.7. | Marquer ces paragraphes comme cadrage initial et ajouter l’état actuel en tête. |
| Vision : tous commencent isolés avant louverture progressive des continents. | [beta.001002](expeditions-beta002.md) ouvre déjà quatre anciennes expéditions dans les nouveaux mondes concernés. | Distinguer les terres héritées de celles que les joueurs créeront ensuite. |
| Vision/expansion : boussole froid/chaud/sec/humide. | Convention facultative ; les îles initiales ont une répartition spécifique confirmée, dont ouest humide et est tropical. | Ne pas transformer la convention climatique en loi des quatre expéditions. |
| Vision et ancienne présentation worldgen : monde de 384 blocs. | [alpha.30.4](generation-alpha30.4.md) documente Y0639 constructibles ; alpha.30.7 conserve le plafond Y640. | Distinguer hauteur constructible actuelle, volume du terrain et configurations historiques. |
| Vision : minage très lent, place de la hotbar à préciser, taux de perte XP et charges encore ouverts. | [Minage](mining-beta008.md) démarre à 100 % ; [inventaire](inventory-beta010.md) inclut la hotbar ; [mort](progression-beta003-contract.md) et [cycles](cycle-factions-beta011.md) fixent des valeurs configurables. | Conserver ces mentions comme anciennes intentions, lier les contrats courants. Poser un retour dessai, pas une question dimplémentation initiale. |
| [Prochains tickets](prochains-tickets.md) et plusieurs sections du backlog gardent de longues questions désormais résolues en beta.011. | Le bandeau de statut est à jour, le corps conserve le cadrage dorigine. | Séparer « contrat final », « limites encore ouvertes » et « discussion historique ». |
| [Backlog](backlog.md) : REALTIME « à cadrer » sous TIME-037 livré ; quêtes prévues en haut à gauche. | [beta.037](realtime-beta037.md) livre lhorloge et impose le même moteur et placement que les autres objectifs, sans second HUD. | Retirer ces deux entrées des prochaines décisions actives ou les marquer remplacées. |
| [beta.034](notifications-beta034.md) : bas à droite et suivi automatique ; beta.033 : Factions/History dans Échap. | [beta.036](corrections-beta036.md) retient haut à droite par défaut et suivi choisi ; beta.034 déplace Factions/History dans Prestige. | Garder chaque contrat daté ; une notice joueur actuelle doit décrire seulement les accès actuels. |
| [Navigation Blocodex](blocodex-navigation.md) : tout est encore présenté comme conception et les inconnus sont décrits visibles dans le socle. | Recettes, objets connus, filtrage et accès ont progressé en beta.024036 ; vitrine/favoris et bestiaire restent à distinguer. | Une matrice par fonction évitera « tout livré » et « tout absent ». |
| [Collections](collections-minecraft.md) : définitions intégrées en tête, puis « futur ticket » et ancienne séquence de livraison dans le corps ; README beta.024 encore « proposition non active ». | [beta.035](collections-beta035.md) matérialise les 67 collections. Les fiches dobtention et le musée restent futurs. | Séparer les données livrées des extensions de présentation, conserver le prototype JSON comme exemple historique. |
| [Familiers v1](companion-powers-balance-proposal.md), [v2](spawn-eggs-refonte-v2.md) : couches de propositions avec états à dates différentes. | [beta.032](spawn-eggs-v2-beta032.md) et son catalogue décrivent les 88 pouvoirs ; acquisition, rangs et Anomaly restent ouverts. | Présenter une source des valeurs courantes et une liste distincte des hypothèses dacquisition. |
| [Structures-conception](structures-conception.md) : « alpha.22 reste la version publiée », petite sélection de lieux, rôles des personnages encore largement ouverts. | Les versions [alpha.30.6](generation-alpha30.6.md), [alpha.30.7](generation-alpha30.7.md) et [cosmologie](cosmologie.md) décrivent des évolutions ultérieures. | Ne pas appliquer toute la liste WG-26 comme un prochain chantier. Réconcilier chaque lieu et son rôle avec la génération finale et le canon. |
| Formules générales sur « Fabric API seule dépendance de gameplay » dans le README et les guides de pack. | Demeure et un fork JEI sont embarqués ; Fabric API reste la dépendance externe distincte décrite par le pack. | Distinguer dépendances externes, modules embarqués et intégrations envisagées. |
| Anciennes notes : contrôles visuels en attente, versions suivantes : parcours clients réussis. | Une validation ultérieure ciblée nest pas automatiquement celle de tous les anciens scénarios ni un test d’équilibre. | Une matrice consolidée « comportement / dernière preuve / essai restant » ferait gagner plus quune nouvelle accumulation de totaux de tests. |
Le défaut principal de la documentation est donc **laccumulation de lhistorique dans les pages dorientation**. Elle conserve utilement les décisions et les limites, mais le lecteur doit reconstruire lui-même ce qui fait encore débat. Une future page « état actuel et décisions ouvertes » reliée aux contrats éviterait de transformer les anciens « reste à faire » en nouveau backlog.
## 7. Comment utiliser les réponses
### Premier tour : choisir ce quon veut vivre
Commencer par **P01 et P02**, sans afficher dabord toutes les fonctionnalités possibles : on recueille les souvenirs spontanés. Continuer avec **P03, P06, P08, P12, P19, P21, P31, P37, P71, P85**. Cette série de douze questions fixe les priorités, le rythme social, la protection et les grandes récompenses.
Lire les commentaires avant de conclure avec un pourcentage. Une préférence majoritaire pour le conflit peut aussi révéler quune partie du groupe ne reviendrait pas avec cette règle. Conserver séparément avis sur une ancienne version, préférence théorique et observation sur une bêta précise. La taille des groupes de répondants ne permet pas de présumer lopinion de tous les anciens.
### Deuxième tour : préciser seulement les branches retenues
- Si le groupe veut des territoires durables : P32P36, puis les accès et limites des protections.
- Si le braquage est accepté : P39 et P114. Si le groupe choisit de le réserver aux donjons, ces questions deviennent inutiles.
- Si lexpansion collective motive : P20, P22P27, P119, puis le rôle du donjon P80.
- Si les familiers comptent : P72P75 et P76 sur des usages réels, sans mettre 88 fiches au vote dun coup.
- Si l’économie est prioritaire : P41P50, P58, P113 ; vérifier ensemble sources de ressources, dépenses et disponibilité horaire.
- Si les mystères attirent : P78P86. Proposer P92P93 et P117 dans un espace volontaire si lon veut garder cette idée secrète pour le reste des joueurs.
Les autres thèmes gardent leur série indépendante. Une préférence pour la cuisine nimpose pas immédiatement toute sa liste dingrédients ; on peut choisir une chaîne complète, par exemple récolter → transformer → préparer → partager.
### Troisième tour : convertir les avis en petits essais
| Essai proposé | Matériel déjà documenté | Observation attendue |
| --- | --- | --- |
| Une heure darrivée en survie | Profil normal, premiers gestes, compétences, inventaire. | Premier achat, premières morts, incompréhensions, moment où lon veut aider quelquun ou demander de laide. |
| Une tâche avec quelques familiers | Pouvoirs beta.032 ; œufs fournis dans un monde de test puisque lacquisition nexiste pas. | Fréquence dusage, effets compréhensibles, tâches rendues possibles, comparaison seul/à plusieurs et compagnon que lon veut garder. |
| Une expédition avec chantier | Quatre régions ouvertes, carte personnelle, gestes de construction. | Temps et difficulté de traversée, manque réel de ressources, besoin de transport et intérêt dune future expansion. |
| Un atelier de règles de voisinage | Situations discutées ou simulées ; ne pas prétendre que les claims sont actifs. | Visiteur, accident, stock commun, absence, reprise, personne hors faction ; règles contradictoires repérées avant le code. |
Une décision exploitable contient : **règle provisoire, raison exprimée, personnes affectées, situation testée et critère qui conduirait à la revoir**. Le modèle de retour à la fin des posts rend cette décision visible sans la confondre avec une fonctionnalité livrée.
## 8. Ce qui reste de la responsabilité de conception et de développement
Certaines inconnues demandent un atelier dauteur ou une preuve technique, plutôt quun vote Discord :
- **Équilibrage chiffré** : coefficients des 88 familiers, coûts exacts, taux de change, tables de butin, quotas, courbes de prix, fréquences de ponte et de spawn. Les avis donnent le ressenti visé ; les parties et mesures fixent les valeurs dessai.
- **Contrats de données** : identités stables, achats non répétés, objets uniques, panne entre paiement et livraison, copie des cartes, restauration, fermeture dIndoor et journal transactionnel du ballast. Un choix de joueur ne dispense pas de ces garanties.
- **Sauvegardes et génération** : toute nouvelle version de terrain, dimension, extension ou récupération exige son périmètre et, si nécessaire, un contrat de migration. Aucun sondage nautorise à effacer ou régénérer une partie existante.
- **Intégrations** : disponibilité, licence, dépendances et comportement réel de Sodium, Iris, Simple Voice Chat, Litematica, Golden Days ou autres pistes sur la version exacte. Le besoin peut être voté ; la compatibilité se vérifie au moment du ticket.
- **Canon et révélations** : nature de lancienne découverte, sacrifice et dénouement, détail des journaux et énigmes. On peut coécrire avec des volontaires avertis, sans dévoiler les réponses à tous pour choisir leur mode de découverte.
- **Direction artistique** : formes darbres, silhouettes de lieux, variantes de Moobloom, graphismes de Cape Zéro, vocabulaire FR/EN et palette du pack. Après les attentes dusage, présenter quelques exemples concrets permettra de décider plus utilement que des noms seuls.
- **Exploitation et Master Key** : rôles de maintenance, diagnostics, réparation et journalisation ; état du canal de distribution, compatibilité client/serveur et limites de performances. Ladministrateur doit pouvoir réparer un incident sans transformer les récompenses de jeu en droits opérateur.
## 9. Livraison de cette analyse
Trois fichiers documentaires ajoutés : analyse, banque complète et extrait de démarrage. Les changements préexistants ont été conservés ; aucun code, version binaire, manifeste, monde, serveur, canal packwiz ou instance Prism na été modifié par cette tâche. La branche documentaire conserve l’état de travail déjà présent ; elle ne constitue pas un commit isolé de lensemble des modifications antérieures.
La vérification de livraison porte sur les **120 identifiants uniques**, les blocs à copier, leur longueur, les liens locaux et la couverture des familles de la vision. Les hypothèses sont signalées et les propositions de réponse ne valent ni résultats de sondage ni décisions validées. Une modification documentaire seule ne nécessite ni incrément beta ni construction Gradle.
File diff suppressed because it is too large Load Diff
+181
View File
@@ -0,0 +1,181 @@
# Sanctuary — les 12 premiers posts Discord
Extrait préparé le 14 septembre 2026. Copier uniquement les blocs de texte. Publier les deux souvenirs en premier, puis avancer avec un ou deux sujets ouverts à la fois. Les numéros renvoient à la [banque complète de 120 posts](consultation-discord-posts.md).
L[analyse documentaire](consultation-discord-analyse.md) donne les sources, les décisions encore ouvertes et les points déjà réglés dans la bêta. Aucun message na été publié.
## Message douverture
```text
Jaimerais construire la suite de Sanctuary avec les personnes qui y ont joué.
Je vais poster des questions petit à petit. Certaines parlent de vos souvenirs ; dautres présentent une mécanique envisagée pour la suite. Quand quelque chose existe déjà dans la bêta, je le préciserai.
Vous pouvez répondre avec une lettre, proposer autre chose ou raconter une situation vécue. « Je ne sais pas » et « ça ne mintéresse pas » sont aussi utiles. Si vous parlez dune ancienne partie, indiquez laquelle si vous vous en souvenez.
Ce qui maide le plus : votre préférence et ce quelle changerait dans votre façon de jouer. Les votes me guideront ; les désaccords et les essais en jeu compteront aussi.
```
### P01 — Le souvenir à retrouver
Souvenir libre · À publier avant les sondages de fonctionnalités.
```text
Quel moment vécu sur Sanctuary aimerais-tu pouvoir revivre dans la nouvelle version ?
Raconte une scène précise : ce que tu faisais, avec qui, et ce qui la rendue mémorable. Ça peut être une construction, une découverte, un accident, une rencontre ou un truc complètement idiot.
```
### P02 — Ce qui te faisait décrocher
Souvenir libre.
```text
Quest-ce qui ta déjà fait perdre lenvie de te connecter à Sanctuary ?
Une situation concrète maidera plus quune liste de fonctionnalités manquantes. Ça peut venir du jeu, du rythme du serveur ou de la vie du groupe. Pas besoin de nommer quelquun.
```
### P03 — La priorité à protéger
Question déduite · Arbitrage entre les piliers de la vision.
```text
Si je dois protéger une seule qualité de Sanctuary dans les prochains développements, laquelle doit passer en premier ?
A — Lexploration et les découvertes surprenantes.
B — La construction et les grands projets communs.
C — La progression, la production et les échanges.
D — La vie du groupe, les rencontres et les moments absurdes.
```
### P06 — Revenir après une absence
Question déduite · À traiter avant les coûts collectifs et le calendrier.
```text
Si tu reviens après deux semaines dabsence et que les autres ont beaucoup avancé, quest-ce qui taiderait le plus à reprendre ?
A — Profiter immédiatement des infrastructures et des accès ouverts par le serveur.
B — Avoir un parcours personnel de rattrapage plus court.
C — Retrouver des activités utiles au groupe dès mon niveau actuel.
D — Rejouer les grandes étapes manquées avec dautres volontaires.
```
### P08 — Le départ fragile
Retour sur lexistant · Ne propose pas de rétablir lancien minage ralenti.
```text
Dans la bêta, on commence avec 3 cœurs, une petite réserve de faim et dair, et 9 cases dinventaire. Le minage de départ garde la vitesse Minecraft normale ; les premiers gestes donnent un peu dXP.
Quel ressenti voudrais-tu pendant la première heure ?
A — Une vraie fragilité qui rend lentraide nécessaire.
B — Un départ exigeant, avec un abri et les premiers progrès rapidement accessibles.
C — Une mise en route assez confortable ; le danger vient ensuite de lexploration.
D — Il me faut un essai de cette bêta pour me prononcer.
```
### P12 — Fonder une faction avant le prestige
Retour sur une règle livrée · Une évolution demanderait une décision explicite.
```text
Aujourdhui, fonder une faction demande une charge gagnée en terminant un cycle. La faction commence à deux places ; ses invités nont pas besoin de prestige.
À quel moment voudrais-tu pouvoir créer ton groupe officiel ?
A — Dès larrivée ; le prestige servirait ensuite à le développer.
B — Après un petit objectif collectif accessible en début de partie.
C — Après le premier cycle, comme dans la bêta actuelle.
D — Les groupes informels me suffisent ; la faction peut rester tardive.
```
### P19 — Ce que doit apporter une nouvelle île
Choix ouvert · Distinction essentielle avec les quatre expéditions déjà ouvertes.
```text
Les nouveaux mondes ont déjà quatre îles dexpédition accessibles : boréale au nord, tropicale à lest, aride au sud et océanique à louest. Leur accès ne demande pas de déblocage collectif.
Quest-ce qui justifierait le mieux de financer ensuite un nouveau continent ?
A — Des ressources impossibles à trouver ailleurs.
B — Un lieu de mystère, un donjon ou une nouvelle étape de lhistoire.
C — Un nouveau territoire pour construire et sinstaller.
D — Un environnement qui permet de nouvelles cultures et productions.
```
### P21 — Qui choisit lexpansion
Choix ouvert · Gouvernance à fixer avant les dépenses collectives.
```text
Une future installation permettra aux joueurs douvrir un continent. Qui devrait décider du projet à financer ?
A — Lensemble du serveur, par un vote ouvert.
B — Les personnes qui contribuent à ce projet.
C — Chaque faction, pour ses propres expéditions.
D — Nimporte quel groupe qui construit linstallation et réunit les moyens.
```
### P31 — Une maison sans faction
Choix ouvert · Demeure nest actuellement pas une protection.
```text
La bêta sait montrer les lieux habités avec Demeure, mais ne protège pas encore les constructions par des claims.
Comment voudrais-tu protéger ta première maison ?
A — Un petit terrain personnel gratuit dès larrivée.
B — Un terrain personnel gagné après quelques activités de début de partie.
C — Une protection fournie par une faction que je rejoins.
D — Des règles de voisinage et une intervention humaine en cas de problème.
```
### P37 — La place du PvP
Choix ouvert · À trancher avant armes, familiers et braquages.
```text
Quelle place voudrais-tu donner aux combats entre joueurs dans Sanctuary ?
A — Des duels acceptés par les deux personnes.
B — Des arènes ou événements annoncés.
C — Des conflits de factions déclarés, dans des zones et périodes précises.
D — Un danger possible dans les territoires sauvages, avec des refuges protégés.
```
### P71 — Obtenir son premier familier
Choix explicitement ouvert · Les pouvoirs sont livrés, leur acquisition normale en survie reste à concevoir.
```text
La bêta possède déjà les pouvoirs de 88 familiers, mais leur obtention en survie reste à construire.
Comment voudrais-tu obtenir ton premier œuf de familier ?
A — En prenant soin dun animal ou en réussissant une interaction avec son espèce.
B — En terminant une petite quête dont la récompense est connue.
C — En découvrant un lieu ou un coffre, avec une part de surprise.
D — En choisissant un compagnon de départ, puis en recherchant les suivants.
```
### P85 — Une réussite collective
Choix ouvert · Ne révèle pas le dénouement narratif.
```text
Quel accomplissement te ferait dire « on a vraiment réussi cette aventure Sanctuary ensemble » ?
A — Avoir transformé les îles en un monde habité et relié.
B — Avoir résolu le grand mystère de ce monde.
C — Avoir rendu possibles des constructions et techniques extraordinaires.
D — Avoir créé une communauté dont les projets continuent sans objectif final imposé.
```
## Après ces premiers retours
Choisir la prochaine série selon les réponses : progression, voisinage, expansion, familiers ou récit. Le [modèle de retour sur une discussion](consultation-discord-posts.md) permet ensuite dannoncer une règle provisoire et lessai qui servira à la vérifier.
+121
View File
@@ -0,0 +1,121 @@
# HUD-036 — notifications choisies, vol porté et discrétion
Branche `codex/hud-gliding-stealth-beta036`, base beta.035.
Cible inchangée : Minecraft 26.3-pre-2, Java 25.
## Contrat jouable
Les notifications démarrent **en haut à droite**. Options → Notifications propose
les neuf ancrages : quatre coins, quatre milieux de bord et centre. La préférence
locale existante est conservée ; les fichiers antérieurs sans position prennent
le nouveau défaut. Aucun réglage de quête nest ajouté.
Les colonnes F3 et les annonces natives réservent leur surface réelle, mesurée
sur la même image, y compris avec une échelle F3 différente. Le fil reste dans
la colonne choisie, se place dans une zone libre et réduit le nombre de lignes
si nécessaire. Barres de boss, sous-titres et ensemble vie/XP/hotbar réservent aussi
leur place. Quand aucun emplacement lisible ne reste, les messages attendent ;
le profiler circulaire et la visualisation de chunks suspendent le fil. F1, les
menus et les écrans de chargement le masquent également.
Un advancement commencé ne reste **plus suivi automatiquement à vie**. Ses
nouveaux progrès seffacent comme les découvertes (durée réglable 315 secondes,
5 par défaut, plus deux secondes pour les progrès). Un état inchangé ne relance
pas le délai. La mort et la réapparition effacent le fil temporaire sans rejouer
les anciens critères ni les découvertes.
Dans **Advancements**, cliquer sur une icône visible et incomplète l’épingle ;
cliquer à nouveau retire le suivi. Un `+` doré marque licône et une indication
FR/EN explique le geste. Glisser la carte de larbre ne bascule jamais le suivi.
Jusqu’à **trois objectifs** sont choisis ; un quatrième remplace le plus ancien.
Les critères reçus du serveur alimentent les jauges, même avant le premier
critère réussi. Une réussite complète retire automatiquement l’épingle.
Le choix survit à la mort et à la reconnexion, séparément pour chaque compte
et monde local ou adresse de serveur. Les préférences restent uniquement dans
`config/sanctuary-notifications.json` ; les clés de contexte sont hachées.
Loption Objectifs épinglés masque ces suivis sans oublier la sélection.
Les progrès récents non épinglés gardent leur bref affichage temporaire.
## Déplacements
Porter un animal volant sur sa tête permet de **planer automatiquement pendant
la descente** : vitesse verticale plafonnée à 0,12 bloc/tick, sans impulsion vers
le haut. Les poules comptent parmi les oiseaux qui amortissent la chute. Les
familiers utilisent lespèce de leur œuf. Le compagnon doit réellement être porté ;
un animal proche ou simplement suiveur ne suffit pas. Le ralentissement dû au
portage reste appliqué. Le vol créatif, les élytres, leau et la lave conservent
leur fonctionnement. Une pile de joueurs ne transmet pas ce pouvoir à son socle.
La distance de chute accumulée est effacée pendant le plané. Relâcher lanimal
rétablit immédiatement la gravité et laccumulation dune nouvelle chute : aucune
potion persistante ni immunité générale aux dégâts.
Allongé ou au repos **au sol**, le joueur réduit de moitié sa visibilité dans
les tests natifs de détection des mobs. Leffet se combine avec les règles
Minecraft déjà présentes. À proximité, les mobs peuvent encore détecter et
frapper. Le plongeon, la nage et le vol ne procurent pas ce bonus. Les cibles
existantes ne sont pas effacées de force. La petite silhouette native demeure,
y compris son intérêt face aux flèches ; aucun changement de visée des squelettes.
## Compatibilité
Aucun changement de schéma des sauvegardes serveur, des identifiants de jeu, des
récompenses, des recettes, des générations ou des expansions. Les deux préférences
client nouvelles et le suivi restent hors des mondes. Aucune installation de jeu
personnelle nest mise à jour par ce ticket.
## Suite, non implémentée ici
- Quêtes en haut à gauche : après les blocs rubis/saphir et leur contrat serveur.
- Temps réel : horloge et fuseau système automatiques en solo ; fuseau choisi
dans la configuration serveur en multijoueur. Une région solaire approximative
choisie séparément doit déterminer latitude/saison/date, lever et coucher du
soleil. Le fuseau seul ne suffit pas à déterminer la géographie. Ne pas demander
dadresse personnelle, ne pas collecter la géolocalisation ni publier une position
précise. Définir avant implémentation le profil solaire de secours en solo,
les changements dheure, le passage de minuit et la migration du temps des mondes.
## Vérifications
`./gradlew check build assemblePack assembleTestPack` réussi avec les suites
ciblées `corrections,notifications,carry,movement,progression,recipes,collections` :
**36 tests serveur**, dont la matrice des 126 advancements de collections.
Le contrôle de géométrie couvre 180 combinaisons et les collisions F3/toasts/boss/HUD.
Deux parcours client natifs réussissent sur des mondes plats de développement :
- « A Balanced Diet » après rotten flesh expire ; clic/re-clic/glissement de
larbre, épingle conservée après respawn et retirée après réussite.
- 36 combinaisons GUI/position avec F3, son échelle indépendante, boss, hotbar,
réglages enregistrés et écrans FR/EN inspectés visuellement.
- Vraie descente du joueur avec un perroquet porté et atterrissage sans dégâts.
- Sorties des collections Archery, Woodworking, Boats and Rafts et Books and
Storage trouvées dans le filtre JEI ; ouverture des vraies recettes arc,
établi, bateau et livre sans possession préalable, avec inconnus préservés.
La persistance du choix est contrôlée dans le fichier client ; la mort/respawn
est exercée en jeu. La conservation à la reconnexion utilise ce même contexte
chargé au retour, sans parcours supplémentaire de redémarrage pour ce ticket.
La discrétion est contrôlée par les tests de détection natifs côté serveur ;
l’équilibre face à plusieurs mobs en partie reste à apprécier.
Exports locaux vérifiés : [normal](../build/Sanctuary-beta.036.mrpack) et
[monde plat rapide](../build/Sanctuary-Test-beta.036.mrpack). Les 1 335 classes du
mod, les trois classes du module de test, les JAR imbriqués et les ressources
correspondent au build. Les collections et générations restent identiques ;
les packs beta.034/beta.035 sont inchangés.
Reçu : `build/corrections036-artifact.json` ; captures :
`build/corrections036-evidence/`. Logs : `build/corrections036-check-final.log`,
`build/corrections036-client-options-final.log`, `build/blueprint036-client.log`.
## Retour JEI intégré
Une collection pouvait enseigner ses recettes tout en laissant leurs sorties
masquées dans le catalogue dobjets de JEI. La recherche de larc, dun bateau ou
dun livre restait donc impossible tant que le joueur ne lavait pas possédé.
Les sorties des recettes connues deviennent désormais consultables dans JEI.
Leur index se reconstruit sur changement du carnet ou du runtime, pas à chaque
image. Cela najoute aucune possession au carnet Discovery, ne révèle pas les
matières premières inconnues et ne débloque aucune autre recette. Laptitude
Catalogue reste nécessaire. Les définitions de collections côté serveur,
récompenses et format de carnet restent inchangés ; pas de changement du fork JEI.
+338
View File
@@ -0,0 +1,338 @@
# Sanctuary — matière, espaces et mémoire
**Cahier de conception issu du texte de lauteur.** Il prolonge
[la vision](vision.md) et [la conception des lieux](structures-conception.md).
Les citations conservent les formulations fournies ; les points à préciser
sont identifiés comme tels. Ce document ne livre aucun générateur ni système
économique. **Backrooms, Indoors, shop et ballast ne sont pas implémentés.**
Le Blocodex natif de lalpha.23 locale fournit un premier socle de données
pour des mécaniques futures, avec les limites décrites dans [son contrat](blocodex.md).
## Minecraft comme archéologie dun autre Minecraft
Steve, Ari, Sunny, Kai, Zuri, Alex, Efe, Makena et Noor sont les neuf personnages
disparus de la partie. Ils ont découvert quelque chose de révolutionnaire et ont
continué parce que ça marchait. Jusquau moment où ça na plus marché.
> Ils nont pas ouvert quelque chose quils nauraient pas dû ouvrir. Ils ont
> construit quelque chose quils ne savaient plus refermer.
Lhistoire part de quelque chose qui a fonctionné : des besoins satisfaits, des
lieux devenus utilisables, des opérations répétées et des installations agrandies.
Une ruine doit permettre de retrouver cette ancienne solution. Ses circulations,
ses raccords, ses réparations et ses extensions racontent un fonctionnement avant
de raconter son interruption.
> Chaque ruine de sanctuary doit être une trace dune ancienne solution pas
> seulement la trace dun problème.
Le dialogue fourni par le créateur pour la bêta.001 précise leurs rôles.
Il emploie **Efe**, retenu ici à la place du « Mefe » de la première note.
Kai et Efe sont jumeaux ; Steve et ses amis sont des héros trans. Cette dimension
doit rester présente avec naturel, dans leurs relations et leurs actes.
| Personnage | Rôle ou lien retenu dans les notes |
| --- | --- |
| Makena | Cuisine |
| Sunny | Redstone |
| Kai et Efe | Construction |
| Zuri | « Exploitation », dont le sens et les limites restent à préciser |
| Ari | Villageois |
| Noor | Aventure |
| Alex | Lien avec Steve, à développer |
| Steve | Sacrifice et protection des joueurs |
Dans cette fiction, Steve a contenu Notch en senfermant avec lui. Le
**Galactium**, vide qui structure les mécaniques de Minecraft, est envisagé
comme le lieu de son isolement. Alpha, Backrooms et un double laissé derrière
lui participent aux pistes de dissimulation. Les compagnons disparus pourraient
subsister comme apparitions et interlocuteurs de marchés particuliers.
Des pages de journaux propres à chaque personnage permettraient de rapprocher
des récits incomplets : leur lecture collective ferait comprendre lhistoire.
Le retour de Steve, la transformation ou la défaite de Notch et les conséquences
pour les joueurs restent des questions ouvertes. Les discussions autour du
créatif ou dun nouveau cycle ne fixent pas encore une fin de partie.
Ces éléments concernent les personnages de la fiction Sanctuary.
Les [quatre anciennes expéditions](expeditions-beta001.md) reprennent pour leurs
noms Noor, Makena, Kai et Efe, Ari. Cela nattribue pas automatiquement à chacun
une machine, une gemme ou une quête. Les journaux à collecter, apparitions, boss
et pouvoirs décrits ici ne sont pas implémentés dans ce ticket.
## Les doubles de Steve — conception du 15 septembre 2026
Les [trois doubles décrits dans ANO-01](steve-anomalies.md) sont des anomalies
de Sanctuary. **Ils ne sont pas encore implémentés.** Leur origine détaillée
reste à découvrir au fil de l'histoire.
- **Herobrine** se cache dans les Backrooms. Il peut frapper, poser des blocs,
enfermer un joueur, avancer ou attendre derrière lui qu'il se retourne.
Au moment où le joueur le voit, il disparaît.
- **Le mineur fantôme** creuse des galeries dans l'Overworld **et** les Backrooms,
surtout dans les chunks les moins marqués par Demeure. De face comme de dos,
on voit l'arrière de sa tête.
- **Le Steve bugué** est extrêmement rare, en T-pose avec des UV mal placés.
Une fois trouvé, il reste ; on peut l'embarquer dans un bateau et le déplacer.
Cette présence durable constitue une preuve que Steve existe. Ses lieux
d'apparition restent à définir.
Herobrine laisse des effets puis disparaît ; le mineur laisse des galeries ;
le Steve bugué peut être conservé et montré aux autres. Ces comportements
n'attribuent pas d'avance à l'un des doubles l'identité du Steve originel.
ANO-01 distingue les décisions du créateur des modalités techniques proposées.
## Deux devenirs de la même technologie
Les Indoors et les Backrooms appartiennent à la même logique de fabrication des
espaces. Ce qui les distingue est leur relation à une intention et à une
référence : sait-on encore pourquoi cet espace existe et comment le retrouver ?
| Espace | Direction donnée par lauteur | Conséquence pour la conception |
| --- | --- | --- |
| **Indoor** | « espace artificiel référencé et contrôlé » | Un intérieur est produit intentionnellement et reste associé à son accès et à son usage. Une porte peut mener à un espace dix fois plus grand que le bâtiment extérieur. |
| **Backroom** | « espace artificiel orphelin » | Un espace demeure alors que sa destination ou sa raison d’être a disparu. Sa forme peut conserver les restes dune fonction sans retrouver lensemble auquel elle appartenait. |
Lauteur décrit chaque Indoor comme une petite dimension instanciée. Les
computers utilisent **probablement** cette technologie pour leurs expériences :
cette relation est une piste forte, sans avoir encore de protocole ni de machine
définitivement assignée.
Les Backrooms, dans cette cosmologie, ne sont pas une destination demandée au
même titre quun monde. Elles sont ce que la machine produit lorsquelle ne sait
pas où mettre quelque chose :
- un espace généré puis annulé ;
- une expérience interrompue ;
- deux règles demandant deux états incompatibles ;
- une room qui nest plus référencée ;
- une coordonnée quaucun monde ne revendique.
> La machine ne détruit pas parfaitement les espaces. Elle les laisse derrière.
> Backrooms.
Limage du « garbage collector raté de Minecraft » exprime cette accumulation.
Larborescence proposée par lauteur la représente ainsi :
```text
WORLD
├── overworld
├── caverns
├── nether
├── end
├── sanctuary
└── /unreferenced/
└── backrooms
```
Cest une représentation narrative, pas une arborescence de fichiers ni la
liste des dimensions actuellement enregistrées par le mod. **Lespace orphelin
est une fiction à mettre en scène.** Une réalisation Minecraft devra conserver
des espaces correctement sauvegardés, identifiés et référencés côté serveur.
Le choix entre dimensions techniques et régions dun espace partagé reste à
concevoir. Rien ici ne prévoit de perdre de vraies références de sauvegarde,
de supprimer des chunks ou de provoquer leur corruption pour obtenir cet effet.
## De la matière sans contexte
Le système reçoit des matériaux et tente de les réorganiser en espace valide :
```text
stone stone dirt copper oak_planks iron stone glass ...
```
Il possède de la matière, mais aucune destination na été demandée. Il tente
alors de lencoder sous forme de chunks : un couloir, une salle, encore une
salle, un plafond, une porte donnant sur rien, une plomberie sans bâtiment,
un entrepôt infini.
> Les Backrooms sont la tentative du générateur de Minecraft de faire quelque
> chose avec de la matière sans contexte.
La **matière** donne une palette et une présence physique. Le **contexte** lui
donnait un usage, des dimensions, des voisins, un accès ou une destination.
Cette distinction permet de dessiner un lieu dont les parties sont intelligibles
alors que leur assemblage ne retrouve plus son intention : une plomberie garde
sa logique de raccord, mais le bâtiment quelle devait desservir nest plus là.
Elle ne justifie pas de remplacer la conception par des blocs placés au hasard.
Il reste à définir ce que la machine conserve de ce contexte : seulement les
matériaux, des fragments de plans, des types de pièces, des relations entre
espaces ou des traces dopérations. Aucun catalogue de rooms ni algorithme de
recomposition nest arrêté. Les palettes limitées et le futur moteur de
traduction en structures peuvent servir cette direction ; le moteur nest pas
créé par ce document.
## Le ballast de l’économie
La direction fournie relie directement cette cosmologie aux actions des joueurs.
Utiliser le shop, téléporter, ouvrir des Indoors, déplacer de la matière ou
expandre le monde produit du **ballast**. Plus ces opérations se multiplient,
plus les Backrooms se remplissent. Elles deviennent lexternalité du système
économique de Sanctuary : une activité visible laisse ailleurs des conséquences
que ses utilisateurs pourront découvrir beaucoup plus tard.
Le ballast relie donc production, échanges et géographie. Un objet déplacé ne
change pas seulement de propriétaire ou de position dans cette vision ; son
passage par ces technologies peut laisser une empreinte dans le monde.
La forme de cette empreinte reste à décider pour chaque opération.
| Opération envisagée | Articulation à définir avant de limplémenter |
| --- | --- |
| Shop et échanges | Quel événement produit du ballast : vente, achat, consommation par un service, autre opération ? Quelle matière lui correspond et à quel moment l’échange est-il terminé ? |
| Téléportation | Que laisse le déplacement : trace de matière transportée, coût matériel ou autre résidu à choisir ? Les types de téléportation partagent-ils cette règle ? |
| Ouverture dun Indoor | Que produit la création dun espace contrôlé ? Que deviennent ensuite une fermeture, un transfert daccès ou une expérience interrompue ? |
| Déplacement de matière | Quelles opérations participent à cette économie ? Un transport manuel, un convoyeur, un stockage ou une transformation ne sont pas encore déclarés équivalents. |
| Expansion | Comment la préparation et la création dun continent se rattachent-elles aux matériaux engagés et aux espaces laissés derrière ? |
« Ballast » ne fixe pas encore une quantité, une unité, un coût ou une monnaie.
Il faut notamment décider sil représente une matière effectivement retirée,
une trace de son traitement ou les deux selon les opérations. Aucun taux de
conversion ni conservation quantitative stricte nest établi. Le document
nautorise donc pas à prélever des objets dans les inventaires ou à les dupliquer
dans des coffres au nom de cette cosmologie.
## Lire lhistoire économique dans la géologie
La génération doit dépendre du comportement réel des joueurs. Lauteur donne
trois exemples qui fixent la direction sans constituer des recettes de génération :
| Histoire du serveur | Trace possible dans les Backrooms |
| --- | --- |
| Le serveur consomme énormément de pierre. | Les premières couches deviennent minérales. |
| Une phase dindustrialisation utilise beaucoup de cuivre. | Des zones techniques apparaissent. |
| Des tonnes de bois sont sacrifiées. | Un gigantesque Indoor abandonné peut émerger. |
Des mois après, les joueurs peuvent descendre et reconnaître dans les lieux
traversés une période de lhistoire du serveur. Le choix des matériaux doit
pouvoir conserver une différence entre une phase minérale, une phase industrielle
et dautres formes de production, au lieu de tout réduire à la dernière palette
dominante.
Cette intention demande une temporalité explicite. Deux histoires se rencontrent :
celle des neuf personnages, antérieure à larrivée des joueurs, et celle que le
serveur écrit pendant la partie. La première fournit les vestiges dun autre
Minecraft ; la seconde peut produire de nouveaux dépôts et de nouvelles traces.
La présence de strates initiales issues de lancienne partie, leur contenu et
leur articulation avec les apports actuels restent à décider.
Il faut encore choisir la durée des périodes observées, ce qui forme un dépôt,
le moment où un dépôt devient un lieu et la manière dont les périodes se
succèdent dans lespace. Une couche nest pas nécessairement un niveau vertical :
la géographie de cette chronologie reste à dessiner. La règle devra préserver
les espaces déjà visités et construits ; changer les statistiques actuelles ne
doit pas devenir une régénération implicite danciens chunks.
## Ce que le socle méta peut fournir
Le Blocodex appartient à Sanctuary et peut être consulté par plusieurs mécaniques.
Il distingue actuellement connaissance, observation, minage, possession passée,
jet, pose et stock porté. Les critères de connaissance et les familles de
matériaux peuvent aider un futur moteur à constituer une palette utilisable.
Ces informations personnelles ne suffisent cependant pas à décrire lhistoire économique :
- **miné** ne veut pas dire consommé par le shop ou engagé dans une machine ;
- **jeté** compte les jets volontaires vanilla, pas les objets brûlés ou perdus
dans le vide ;
- **déjà possédé** est une preuve persistante, pas un stock encore disponible ;
- **posé** ne fournit pas à lui seul le plan dune construction ni sa date ;
- le stock personnel ne recense pas tous les coffres et réseaux du serveur.
Le socle méta distingue maintenant trois relevés :
| Relevé | Ce quil permet de connaître |
| --- | --- |
| Mémoire personnelle | Ce quun joueur a vu, miné, possédé, jeté ou posé ; des critères pour ses palettes. |
| Distribution actuelle | Les blocs du terrain chargé et les stocks accessibles, comptés séparément avec leur couverture. |
| Activité datée du serveur | Les quantités minées, posées, ramassées, jetées et fabriquées, agrégées par jour UTC depuis linstallation. |
Le troisième relevé conserve une trace des périodes dactivité après le
déplacement des stocks. Il peut montrer une période de minage intense de cuivre,
mais ne prouve pas que ce cuivre a été sacrifié à une machine. Il ne reconstruit
pas les mois précédant son installation et ne calcule aucun ballast. Les limites
de persistance et de couverture figurent dans le [contrat méta](blocodex.md).
Avant la génération historique, il faudra donc définir quels faits les systèmes
économiques enregistrent : action réalisée, matériau, quantité, moment ou période,
origine et destination utiles à cette action. Leur traitement devra distinguer
une opération terminée dune tentative refusée et éviter de compter plusieurs
fois la même opération après reprise. La granularité, la conservation et le
format de ces transactions restent à concevoir dans un contrat propre. Les
agrégats journaliers déjà disponibles ne sont pas un journal transactionnel :
ils ne doivent autoriser ni prélèvement, ni récompense, ni restitution dobjet.
## Machines, références et anciennes solutions
Les computers pourraient expérimenter dans les Indoors parce quils offrent
des espaces contrôlés. Il reste à préciser ce quils demandent à un espace et
comment cette demande le rattache à une installation, une porte ou un usage.
La cause dun orphelin dans la fiction devra être compréhensible sans demander
au joueur de connaître les fichiers de sauvegarde.
Lassembleur, le contrôleur, le terminal, le dépôt et lancre spatiale restent
des concepts en discussion dans [le cahier des machines](structures-conception.md#ordinateurs-et-installation-dexpansion).
Les questions communes sont maintenant plus précises : qui formule la demande
despace, qui fournit sa matière, qui conserve sa référence, qui présente son
état, et comment une fermeture ou une interruption est représentée ? Cette liste
ne répartit pas arbitrairement cinq fonctions entre cinq blocs.
Les ruines peuvent rendre ces questions visibles par leurs usages passés.
Lobservatoire, la salle dexpansion rééquipable, latelier caché et la grande
traversée restent la sélection de conception actuelle. Pour chacun, il faut
retrouver ce qui y était observé, préparé, fabriqué ou relié, puis montrer les
extensions et le travail interrompu. Ce sont des questions de fiche de lieu,
pas la confirmation de machines présentes ni dun accès aux Backrooms dans
chaque ruine. Le donjon majeur conserve son boss et son objet de quête à définir ;
il nest pas automatiquement identifié au réacteur ou à lorigine de la panne.
La même ligne relie le passé et la partie actuelle :
> une infrastructure dont lauteur a progressivement disparu derrière son
> fonctionnement.
## Accès, retour et récupération : règles encore ouvertes
**Décisions du 15 septembre 2026 :** le [ticket BR-01](backrooms-implementation.md)
fixe désormais le parcours des salles personnelles : sommeil complet depuis son
lit de l'Overworld, arrivée dans un Indoor de protection intégré aux Backrooms,
passage caché par Steve derrière un tableau et une porte ouverte. Les Indoors
interconnectés forment le dysfonctionnement où le ballast du monde est redirigé.
Chaque salle est liée à un joueur et peut être découverte et visitée à pied par
les autres. Tout lit utilisable dans les Backrooms ramène chaque joueur à son
propre lit d'origine dans l'Overworld. Les lieux se cartographient manuellement,
sans coordonnées affichées. **Implémentation prévue seulement après le suivi
du ballast.** Les règles d'accès ci-dessous sont le cadrage antérieur ; BR-01
les précise pour ce parcours. Récupération d'objets perdus, économie et Indoors
généraux conservent leurs contrats à établir.
La vision antérieure envisage le lit pour entrer dans les Backrooms, des sources
de lumière pour les explorer et des coffres recueillant des objets perdus dans
le vide ou brûlés. Elle prévoit aussi des accès dIndoors liés à la mailbox de
leur propriétaire. Ces intentions doivent être raccordées à la cosmologie du
ballast ; elles ne définissent pas encore un parcours complet.
Avant un ticket jouable, il faut notamment arrêter :
1. Les moyens dentrer, les destinations darrivée, le retour et le comportement
lors dune mort ou dune déconnexion.
2. La propriété et le partage des Indoors, la perte de leur objet daccès, leur
fermeture et la distinction entre un accès absent et un espace fictionnellement
devenu orphelin.
3. Le rapport entre ballast, géologie et objets récupérables : quelle part fait
décor ou ressource, quelle part demeure un objet identifiable, et comment sa
récupération évite une restitution multiple.
4. Les opérations qui alimentent réellement les dépôts, leurs unités, leur
cadence et les limites de stockage et de génération.
5. Les indices permettant de lire une période économique ou une ancienne solution,
sans attribuer davance une cause à tous les lieux et aux neuf disparus.
Les pool rooms et salles étranges physiques sous l’île restent des structures
de lOverworld. Leur ressemblance éventuelle avec les Backrooms ne les transforme
pas automatiquement en espaces orphelins. Les passages entre ces lieux, les
Indoors et les Backrooms devront être décidés explicitement.
La prochaine étape de conception peut prendre un seul cas complet : une
opération économique réelle, la trace quelle conserve, son dépôt, puis le lieu
que ce dépôt permettrait de générer et dexplorer. Ce cas permettrait de fixer un
premier contrat vérifiable sans prétendre que toute la cosmologie est déjà jouable.
+74
View File
@@ -0,0 +1,74 @@
# beta.098 — Construire le plan en créatif
Ticket CONSTRUCTION-098, branche `codex/creative-construction-beta098`.
À la demande du créateur, le parcours manuel du Métabli est complété par une
construction immédiate réservée au mode créatif.
## Parcours
Choisir une statue, une machine, un bâtiment ou un plan importé au Métabli.
Positionner et orienter laperçu avec K. Le bouton **Construire le plan…**
apparaît sous les coordonnées en créatif seulement. La confirmation indique
le nombre de blocs, lorigine et le fait que le plan entier sera construit,
même si une seule couche est affichée. Annuler revient aux réglages.
Confirmer pose les blocs sans consommer de matériaux, via le protocole serveur
existant. Le plan garde son origine, son orientation et son suivi davancement.
Les machines reçoivent leurs composants natifs : la clé dorée reste nécessaire
pour assembler le multibloc fonctionnel. Les inventaires et entités ne sont
pas copiés depuis les fichiers de plans.
Le bouton disparaît si le mode de jeu change. Une confirmation devenue périmée
(changement de plan, position, monde ou perte du créatif) ne lance rien.
Lenvoi en cours désactive le bouton et ne peut pas être remplacé par un second.
En survie, la construction reste manuelle et le serveur refuse toujours les
envois fabriqués sans passer par linterface.
Les validations serveur existantes restent applicables : cases libres ou déjà
conformes, zone chargée, hauteur et bordure du monde, distance de 192 blocs,
absence dentité à lemplacement, permissions et interdiction des blocs
techniques sans objet. Aucun changement de génération ni format de sauvegarde.
## Vérifications
Suite native `Plans072ClientChecks`, Minecraft 26.3, nouveau monde plat de
développement, graine 72 : **réussie en 47 secondes**.
- Bouton créatif visible et confirmation inspectés en capture native.
- Annulation sans placement ; statue de Creeper de 32 blocs de haut, 1 542
cellules, construite avec vérification de chaque matériau côté serveur.
- Fourneau et abri choisis dans le catalogue physique, rotation, filtre sur
une seule couche : le bouton construit bien toutes les couches du plan.
- Perte du créatif pendant la confirmation : aucun bloc posé, bouton absent.
- Envoi falsifié en survie refusé ; pose manuelle consommant exactement un bloc.
- Régression des 88 modèles natifs, export, matériaux et interfaces FR/EN.
Le premier passage enchaînait les plans en moins dune seconde et rencontrait
la limite denvoi serveur existante. Le test attend désormais 25 ticks entre
constructions ; aucun changement de cette limite na été nécessaire.
Le test Métabli conserve son assertion dabsence de catalogue à distance,
mais ne considère plus le nouveau bouton créatif comme interdit.
Captures dans `build/creative098-evidence/`, journal
`build/creative098-client.log`.
`./gradlew check build assemblePack assembleTestPack -x :sanctuary:runGameTest`
réussi en **2 min 7 s**, 124 tâches. Les GameTests sur serveur dédié restent
exclus conformément au refus antérieur daccepter son EULA. Aucun serveur
dédié lancé ; essais uniquement sur un nouveau monde client de développement.
Les archives ont été vérifiées : version Minecraft 26.3 et compteur beta.098,
JAR sources identiques aux fichiers de travail, aucun test embarqué. Par
rapport à beta.097, seules les classes PlanClient/PlansScreen et trois libellés
FR/EN changent dans Sanctuary. Textures, données, resource pack et archives
beta.097 conservés. Reçu : `build/beta098-artifact.json`.
## Livraison locale
- `build/Sanctuary-beta.098.mrpack`, 9 880 395 octets ; SHA-256
`f06d0cc0256c6c55b1081019d0f00d2f9d29963cbf06d63b8cf1d9b303970f7a`.
- `build/Sanctuary-Test-beta.098.mrpack`, 9 899 316 octets ; SHA-256
`f2424a39b6b96076bdff8ac2a93e74ce83d77f453aa9bfbdd18a5fa17444f573`.
Aucun déploiement dans une instance personnelle, aucune sauvegarde personnelle
ouverte ou modifiée, aucun avancement du canal packwiz.
+172
View File
@@ -0,0 +1,172 @@
# CYCLE-01 · PROG-03 · FACTION-01 · NGP-01 — beta.011
Contrat commun établi avant l'évolution des sauvegardes. Branche :
`codex/factions-new-game-plus`. Minecraft reste **26.3-pre-2**.
> Historique beta.011. Depuis [beta.038](graves-food-beta038.md), la fondation
> coûte 10 niveaux et crée une seule place, sans prestige ; les charges servent
> aux places supplémentaires. Les anciennes fondations restent inchangées.
## Règles de cette livraison
Un cycle est personnel. Le premier porte le numéro 1. Seul un habitant vivant
ayant les **six compétences au maximum** peut confirmer son New Game+.
Les aptitudes ne conditionnent pas ce passage. Une mort ordinaire ne termine
jamais un cycle et ne distribue aucune récompense de prestige.
Valeurs initiales de `config/sanctuary/cycle-factions.json` : chaque passage
accorde **1 prestige et 1 charge personnelle**. Créer une faction coûte
**1 charge**, donne **2 places**, fondateur compris. Chaque membre peut payer
**1 charge pour ajouter 1 place**. Le plafond de cette première version est
100 membres. Le prestige compte les cycles achevés ; ce n'est pas une monnaie.
Les charges inutilisées appartiennent à l'habitant. Les places financées
appartiennent à la faction et restent après un départ ou un New Game+.
Aucun remboursement lors d'une dissolution. Les règles monétaires sont
configurables au redémarrage, mais ne recalculent jamais les anciens événements.
Une personne appartient à une seule faction à la fois. Le propriétaire invite,
révoque les invitations, exclut, transmet la responsabilité et dissout.
Les invitations durent 7 jours réels ; elles ne réservent pas de place.
L'acceptation revalide place, invitation et absence d'autre faction. Les membres
peuvent partir ; le propriétaire doit transmettre ou dissoudre. Son absence
ne transfère pas automatiquement la propriété. Le changement de propriétaire
annule les invitations en cours. La couleur de faction est copiée de celle du fondateur à sa création ;
la couleur personnelle reste indépendante.
Les factions n'accordent encore ni claims ni protection de blocs.
## Matrice du New Game+
| Donnée | Traitement |
| --- | --- |
| Six compétences | Rang zéro : 3 cœurs, 3 nourritures, 3 bulles, gestes individuels, 9 cases |
| XP non dépensée | Remise à zéro par défaut ; option serveur `keepXp` |
| Identité, UUID, pseudo enregistré, bio, couleur | Conservés |
| Aptitudes et preuves de leurs achats | Conservées |
| Achats du cycle terminé | Archivés intégralement, coûts et dates compris |
| Objets, équipement, main secondaire, coffre de l'Ender | Conservés, sans déplacement |
| Rangées d'inventaire redevenues verrouillées | Occupées et visibles en récupération : retrait autorisé, nouveau dépôt interdit |
| Recettes, découvertes, Atlas personnel, statistiques et advancements | Conservés |
| Demeure, faction, rôle, invitations encore valides | Conservés |
| Prestige et charges personnelles | Conservés, puis récompense du cycle ajoutée une seule fois |
| Monde, constructions, coordonnées du joueur | Conservés ; aucune régénération ou téléportation |
| Santé, faim, air courants | Bornés aux nouvelles capacités, sans soin gratuit |
| Argent, coffre-fort, favoris, mémoire Web | Systèmes futurs ; ce ticket ne crée ni ne migre de données fictives |
Exemple : Alice termine son premier cycle, obtient prestige 1 / charge 1 et
fonde une faction de deux places. Bob la rejoint sans payer. Son propre premier
New Game+ lui donne une charge : il l'investit et la faction passe à trois
places. Au deuxième New Game+ d'Alice, son prestige devient 2 ; sa nouvelle
charge reste personnelle et son rôle de propriétaire demeure. Ses 54 cases
pleines ne sont ni effacées ni jetées : les 45 cases désormais verrouillées
restent retirables jusqu'à leur prochain déblocage.
## Contrat de migration et reprise
L'adoption des progressions beta.003010 est additive : schémas 15 vers
**schéma 6**, avec `cycle: 0` (zéro cycle terminé). Aucun achat n'est perdu.
La révision réseau vaut `cycle * 64 + nombre d'achats actifs`, empêchant qu'un
ancien clic d'achat soit accepté après remise à zéro. Les identifiants existants
restent stables. La capacité de configuration `sanctuary:cycle_factions_v1`
exige la mise à jour des deux côtés avant de rejoindre.
Le nouveau fichier `data/sanctuary-cycle-factions.json` est un journal de monde
versionné (schéma 1), lié à la graine, contenant UUID de monde et événements
datés identifiables. Il reconstruit soldes, factions et fins de cycle. Chaque
mutation est validée sur une copie, écrite par remplacement atomique puis
publiée en mémoire. Une erreur ou un fichier modifié extérieurement bloque les
mutations ; aucune remise à zéro silencieuse.
Un New Game+ écrit **d'abord** sa fin de cycle et sa récompense dans ce journal,
puis applique la nouvelle progression au joueur. Au prochain chargement, si
le journal a un cycle d'avance, sa décision est rejouée sur le joueur (avec
sa politique XP enregistrée). Si les numéros concordent, rien n'est réinitialisé.
Un joueur en avance sur le journal, ou en retard de plus dun cycle, est
refusé, ce qui détecte une restauration partielle incompatible. Le délai entre clics utilise une horloge monotone réelle (250 ms), indépendante
des ticks suspendus dans le menu pause solo. Lire une page ne consomme pas
le délai réservé à une mutation. Le solde dXP est envoyé explicitement avec
la progression pour rester exact pendant cette pause. Les tentatives répétées d'un même cycle ne donnent
pas de charge supplémentaire. La sauvegarde vanilla conserve les objets et
la progression dans le même fichier joueur, comme en beta.010. Les acquisitions
dobjets entre deux sauvegardes restent soumises à lautosauvegarde Minecraft :
ce journal ne remplace pas la sauvegarde générale du monde.
Faire une copie complète du monde arrêté avant adoption ; restaurer ensemble
le journal, les fichiers des joueurs et les autres données du monde. Le retour
aux anciens binaires après adoption n'est pas supporté. Ce contrat autorise
l'évolution du code de lecture/écriture ; aucun monde personnel n'est modifié
par les travaux de développement.
## Livraison et vérifications
Les contrôles du contrat pur passent : reprise beta.010, cinq/six compétences,
conservation des aptitudes, deux cycles successifs, double requête, dépenses,
propriétaire absent, invitations concurrentes, expiration exacte à sept jours,
transmission, dissolution, relecture du journal et refus d'une écriture après
corruption ou modification externe.
Les sept scénarios natifs propres à beta.011 passent (8/8 avec l'admission
Fabric), puis la suite progression/carte/Demeure/minage/construction/inventaire/
cycles passe à **45/45**. Ils couvrent notamment :
- Inventaire réellement rempli de 54 piles avant passage ; récupération dans
le menu natif, équipement et coffre de l'Ender conservés.
- Retour à 3/3/3 sans soin offert, XP zéro, nouvel achat possible et ancien
paquet d'achat refusé grâce à la révision de cycle.
- Identité, statistiques, observations Atlas et influence Demeure conservées.
- Décision de fin écrite puis relecture d'un ancien fichier joueur ; après une
seconde sauvegarde, l'XP et les achats du nouveau cycle ne sont plus remis
à zéro. L'option de conservation XP est prise dans la décision enregistrée.
- Mort ordinaire après New Game+ : même progression, prestige et faction.
- Création, invitations par pseudo/UUID, contribution d'un membre, changement
de responsable, conteneurs ouverts et mode spectateur refusés.
Le test de reprise a d'abord détecté un problème de fixture : chaque joueur
simulé possède un nouveau profil d'authentification, que Minecraft rétablit au
chargement. La fixture de reconnexion utilise maintenant le même UUID.
Le parcours client natif `Cycle011ClientChecks` est compilé : ouvert depuis
le menu pause, cycle verrouillé, aperçu/annulation, passage confirmé, création
et journal, à deux échelles GUI. **Il n'a pas été exécuté graphiquement : le
Mac est verrouillé. Aucun rendu beta.011 n'est déclaré vérifié.**
La commande de livraison est :
```sh
JAVA_HOME=/Users/koka/Library/Java/JavaVirtualMachines/temurin-25.jdk/Contents/Home \
./gradlew check build assemblePack \
-PsanctuaryFocusedTests=progression,map,demeure,mining,building,inventory,cycle
```
Les logs restent ignorés dans `build/cycle011-delivery-final.log`,
`build/cycle011-smoke.log` et `build/cycle011-client-final-compile.log`.
La commande finale réussit en **3 min 55 s**, avec les 45 tests natifs et
les contrôles purs. Le reçu `build/cycle011-artifact.json` confirme l'intégrité
ZIP, l'identité des JAR compilés et embarqués, les versions beta.011, les
87 libellés FR/EN des cycles, les dépendances exactes et les assets conservés.
Les exports beta.003010 gardent leurs empreintes précédentes.
Artefact local : `build/Sanctuary-beta.011.mrpack` — 2 479 614 octets.
SHA-256 : `dae0d1fbd8f410fd73b2d3053ef0f17539e24639c3d338ce84dbfca6e4f43ec0`.
L'export local ne publie pas le canal packwiz et ne modifie aucune instance Prism.
## Essai en jeu
Installer la même beta.011 côté client et serveur. Dans un monde de test,
`/experience add @s 1000 levels` permet à un opérateur de tester les achats
sans attendre. Acheter les quarante rangs des six compétences dans le Blocodex,
puis ouvrir **Progression → Cycle**. Acheter les aptitudes reste facultatif.
Remplir aussi les dernières rangées avant de confirmer pour vérifier leur
récupération. Un second joueur peut rejoindre la faction via son invitation
sans avoir lui-même fait de New Game+.
Les invitations et les actions de faction se trouvent dans **Monde → Factions**,
l'historique dans **Monde → Journal des cycles et factions**. Les montants
s'éditent dans `config/sanctuary/cycle-factions.json`, serveur arrêté : `reward`,
`creationCost`, `initialCapacity`, `expansionCost`, `maxMembers`, `keepXp`.
Le prestige reste toujours le nombre de cycles terminés. Le journal est borné
à 100 000 événements / 16 Mio ; il refuse d'effacer les anciennes archives
pour faire de la place. Une future rotation nécessitera son propre contrat.
Le journal fournit une ontologie locale (`sanctuary:cycle_completed`, `sanctuary:faction_*`) ; aucune
connexion au site ni distribution de droits opérateur n'est incluse.
+119
View File
@@ -0,0 +1,119 @@
# beta.057 — météo quotidienne Sanctuary
Branche `codex/daily-weather-beta057`. Contrat avant implémentation : une météo
commune par date civile du monde, en réutilisant le fuseau du système Real Time.
La météo est indépendante du mode du soleil : `vanilla` rend le cycle à
Minecraft ; `realtime` conserve le profil choisi pour la journée. Les profils
pluie et orage sont continus ; le profil averses alterne pluie et pauses sèches.
Le tirage local est déterministe selon la graine du monde et la date, sans
réseau ni géolocalisation. Les proportions de départ configurables sont :
65 % beau temps, 15 % ciel gris, 5 % brouillard, 10 % averses, 3 % pluie
continue et 2 % orage continu. Ce sont des probabilités par journée.
Les proportions se règlent dans `config/sanctuary/weather.json` ; la prévision
déjà enregistrée pour aujourd'hui ne change pas lors d'un rechargement.
Les transitions d'intensité, sons, neige par biome et éclairs restent natifs.
Le profil averses place une pluie de 35 à 75 minutes dans chaque tranche de
3 heures réelles, avec des pauses sèches. La position de chaque passage est
calculée depuis la graine/date/tranche ; une reconnexion ne la déplace pas.
Les tranches comptent le temps réellement écoulé depuis le minuit local,
y compris lors des journées de 23 ou 25 heures au changement d'heure.
Le ciel gris et les averses atténuent les couleurs du ciel et la lumière solaire
sans transformer artificiellement l'état sec en pluie. Le brouillard utilise
les distances natives (fin atmosphérique 80 blocs, ciel 120, nuages 96) et se
compose avec le réglage Vanilla Light. La transition des ambiances prend environ
10 secondes de jeu. Eau, lave, cécité et obscurité gardent leurs attributs natifs.
La présentation se branche sur les couches d'environnement de Minecraft :
pas de nouvelle passe shader, texture de bruit, reconstruction des chunks ni
rechargement des shaders. Les moteurs de shaders externes restent à vérifier.
Le serveur transmet le profil aux clients à la connexion et lors de ses
changements, y compris le retour à Vanilla. La pluie et l'orage utilisent leurs
paquets natifs. Le calcul météo se fait une fois par seconde ; l'écriture du
journal n'a lieu qu'au changement de date ou de mode.
## Contrat de sauvegarde et de retour
Un fichier additif `data/sanctuary-weather.json`, schéma 1, conserve le mode,
la date civile et sa prévision. Il est écrit atomiquement avant toute action
météorologique. Aucun ancien schéma ni paramètre de génération n'est modifié.
Un document invalide est conservé ; le chargement refuse la prise de contrôle.
Le mode quotidien est activé par défaut seulement dans les mondes Sanctuary
et Sanctuary Test. Un monde vanilla ordinaire garde son comportement natif.
Les jours manqués ne sont pas simulés. La reconnexion et le redémarrage gardent
le profil du jour ; un nouveau profil est choisi à minuit dans le fuseau du
serveur intégré ou dédié, et non à chaque journée Minecraft.
Le cycle aléatoire et l'effacement de la pluie par le sommeil sont suspendus
uniquement quand cette météo contrôle le monde. Les règles de jeu sauvegardées
ne sont pas modifiées. Le retour à Vanilla reprend les durées natives depuis
l'état météo courant, sans conserver une durée de 24 heures en ticks.
Sans le mod, Minecraft peut reprendre ses durées usuelles. Les autres systèmes
de simulation et les dimensions sans météo restent natifs.
## Commandes et extension future
Configuration serveur `config/sanctuary/weather.json` :
```json
{
"enabled": true,
"overcastPercent": 15,
"fogPercent": 5,
"showersPercent": 10,
"rainPercent": 3,
"thunderPercent": 2
}
```
Le beau temps représente le reste jusqu'à 100 %. Une somme supérieure à
100 %, un entier négatif ou fractionnaire et un document invalide sont refusés.
Les nouveaux poids s'appliquent au prochain jour ; `enabled: false` rend
immédiatement la météo au moteur après rechargement. Le retour explicite
à Vanilla dans un monde est conservé même après réactivation globale.
- `/sanctuary weather` : consulter le mode, la prévision et sa date/fuseau.
- `/sanctuary weather realtime` : activer le mode quotidien (opérateur).
- `/sanctuary weather vanilla` : reprendre le cycle Minecraft (opérateur).
- `/sanctuary weather reload` : recharger les proportions/configuration (opérateur).
En Real Time, `/weather` indique comment reprendre le mode Vanilla pour
changer la météo librement. Les mutations passent par l'autorité serveur.
La Weather TNT qui force ou arrête la pluie appartient au prochain ticket ;
aucun nouveau bloc, explosif ni recette n'est ajouté ici.
## Vérifications
Le contrôle `weather057Smoke`, intégré à `check`, passe 222 058 assertions :
50 000 tirages quotidiens, proportions, bornes, persistance, rechargement,
refus des données invalides, retours de mode et absence de rattrapage hors ligne.
Il vérifie aussi les tranches d'averses, leurs pauses sèches, les journées de
23/25 heures et le 29 février. Les proportions observées sont respectivement
32 451 / 7 558 / 2 478 / 4 914 / 1 522 / 1 077 jours pour beau temps / gris /
brouillard / averses / pluie / orage.
Le client intégré `Weather057ClientChecks` vérifie les six profils natifs,
les paquets de pluie/orage et du nouveau profil, le brouillard réellement
utilisé par le rendu, l'absence de pluie en gris/brouillard, l'alternance humide
et sèche pendant une même journée d'averses, et les passages de date.
Les durées aléatoires sont suspendues sans modifier la règle de jeu ; le reset
météo utilisé par le sommeil est bloqué en Real Time et disponible en Vanilla.
Les commandes, leurs permissions, l'indépendance du soleil, les configurations
invalides, les retours Vanilla et les libellés FR/EN sont vérifiés.
`./gradlew check build assemblePack assembleTestPack -x :sanctuary:runGameTest`
réussit sur Minecraft 26.3-pre-2 avec Java 25. Les essais natifs utilisent
`-PsanctuaryClientTests=true -PsanctuaryWeather057ClientTests=true
-PsanctuaryQuickTests=true`. Aucun serveur dédié ni EULA supplémentaire accepté.
Les frontières horaires sont simulées avec une horloge injectée dans le monde
de test ; plusieurs journées d'hébergement réel ne sont pas revendiquées.
Aucun monde personnel, canal public ou instance de jeu n'est modifié.
Logs : `build/weather057-check.log`, `build/weather057-client.log`.
Captures : `build/weather057-evidence/`. La confirmation d'intégrité des exports
est consignée dans `build/weather057-artifact.json`.
[Pack normal](../build/Sanctuary-beta.057.mrpack) ·
[Monde plat rapide](../build/Sanctuary-Test-beta.057.mrpack).
+41
View File
@@ -0,0 +1,41 @@
# Ticket beta.006 — Atlas exploré et premières empreintes Demeure
Résultat livré localement : déplacer la carte par glisser-déposer répété, découvrir un paysage progressivement, afficher une grille de chunks et consulter les empreintes d'habitation. L'utilisateur a choisi les empreintes et la grille ; réservation, factions et protection des chunks restent au prochain ticket.
## Source et périmètre
La référence signalée par l'inventaire 26.2 se trouve dans `../Structures/demeure` (sources ciblant Minecraft 26.1.2, auteur KOKA99CAB, GPL-3.0-or-later). Aucun changement dans ces dépôts historiques. Demeure reste un mod autonome sous `mods/demeure`, embarqué dans Sanctuary et adapté aux API exactes de 26.3-pre-2. Il fournit les empreintes, Sanctuary décide de l'accès à leur représentation dans l'Atlas.
Ce premier port reprend les influences par chunk, la nature initiale, les états neutre/sauvage/habité/partagé/contesté/dominé/abandonné et les traces des déplacements, de l'activité, des blocs réellement posés ou cassés, des récoltes, du sommeil et des morts. La présence animale, villageoise et hostile est agrégée autour des habitants actifs. Nourrissage, naissance, cuisson, propriété animale individuelle et commandes historiques attendent leurs hooks de réussite et leur ticket. Aucun clic infructueux n'est crédité, aucune XP n'est distribuée par Demeure.
## Contrat de migration et de confidentialité
- Aucun changement de génération, de graine, de chunks, d'expansion, de progression ou d'identité d'habitant.
- L'Atlas passe du schéma JSON 1 au schéma 2 lors de sa prochaine sauvegarde. Les 256 pixels de chaque ancien chunk restent connus. Dans le même tableau de couleurs, 0 signifie désormais inconnu, 1 représente le vide effectivement observé, 4..255 conservent les couleurs Minecraft. Les anciens pixels 0..3 sont convertis en 1. Cette conversion est idempotente et ne peut révéler aucun nouveau chunk. Les lecteurs beta.005 refusent le schéma 2 : retour arrière exige de restaurer une sauvegarde préalable.
- Les nouveaux relevés découvrent les pixels dans un rayon de 32 blocs avec une bordure tramée, en lisant uniquement les chunks déjà chargés. L'union des observations est conservée dès l'arrivée, même avant l'aptitude Grande carte. Une absence de couleur n'efface jamais une ancienne découverte. Il s'agit d'une révélation cartographique de surface, pas d'un calcul de visibilité optique.
- Les identifiants et le format des paquets `sanctuary:atlas_request` / `sanctuary:atlas_response` restent stables. Les empreintes utilisent un nouveau paquet séparé et borné. Le client et le serveur doivent utiliser le même pack pour la nouvelle interprétation du pixel inconnu.
- Demeure crée un fichier distinct `data/demeure/footprints-v1.json`, indexé par dimension et chunk, lié à la graine. Aucun ancien fichier Demeure n'est importé ni modifié. Les premiers scores commencent à zéro lors du portage.
- Les jours sont des jours UTC réels (horloge serveur), indépendants de `/time`. Une interruption ne simule pas d'activité. La décroissance après 14 jours d'absence est appliquée avant toute nouvelle contribution ; revenir ne ressuscite pas les anciens scores. Un recul d'horloge ne crée ni nouvelle journée ni nouveau budget.
- Les contributions par sujet et chunk sont plafonnées à 8 par jour réel, conservées avec leur budget et date. Maximum 16 384 chunks, 32 influences par chunk, fichier limité à 64 Mio. Aucun effacement silencieux en cas de limite ou de corruption ; le service refuse d'écraser un fichier corrompu ou modifié extérieurement.
- Une grille géométrique peut couvrir le brouillard ; aucun état Demeure n'est transmis pour un chunk inconnu. Le survol d'un pixel inconnu ne révèle pas l'empreinte. Une empreinte ne constitue ni propriété ni protection et ne dit pas qu'un chunk est juridiquement réservable.
- La vue opérateur demeure explicite et vérifiée sur le serveur ; elle n'ajoute aucune découverte personnelle. Changement de rôle, de dimension ou de permission efface les données de la vue précédente.
## Validation effectuée
- `./gradlew check build assemblePack -PsanctuaryFocusedTests=progression,map,demeure` : réussi en 4 minutes, **8/8 tests natifs serveur**. Le test Demeure vérifie les placements réussis/refusés, la destruction native, l'aptitude carte, les chunks inconnus, les permissions opérateur et les spectateurs. Un premier lancement avait échoué dans le montage du faux joueur spectateur (connexion absente) ; ce montage a été corrigé puis les huit tests ont été relancés avec succès.
- `./gradlew :sanctuary:runClientGameTest -PsanctuaryClientTests=true -PsanctuaryProgressionClientTests=true` : réussi en 1 min 37 s. Les glissements passent par `MouseHandler.onButton/onMove`, avec les constantes SDL de Minecraft, et non par des appels directs au gestionnaire de la carte. Plusieurs gestes, relâchement hors carte, zoom natif, nouvelle requête, rafraîchissement, deux tailles de fenêtre, activation de la grille, vrais paquets Demeure, inspection opérateur et révocation sont vérifiés.
- Les tests de contrats vérifient les anciens pixels de vide conservés, la migration idempotente, l'union de visites, les pixels inconnus, les fichiers corrompus, la capacité et l'isolation. Demeure vérifie aussi le budget après rechargement, le recul d'horloge, la décroissance avant retour, les états du territoire et les dimensions distinctes.
- Les fichiers produits par le client natif contiennent **16 chunks / 2 913 pixels connus** dans l'Atlas schéma 2, et un chunk Demeure schéma 1. La sauvegarde est constatée dans le monde de développement ; aucun monde personnel n'a été ouvert.
- Captures inspectées dans `build/beta006-preview/`, notamment les interfaces à 640 et 1280 pixels, le brouillard et la carte verrouillée. FR/EN alignés ; aucun changement aux icônes ni aux noms de couleurs approuvés.
- La sélection native cible ce ticket et la progression. Les deux assertions worldgen générales déjà connues en beta.003/005 ne sont pas revendiquées corrigées. Réservation/protection des claims, factions et port complet des interactions Demeure restent hors de cette livraison.
## Artefact d'essai
[Sanctuary-beta.006.mrpack](../build/Sanctuary-beta.006.mrpack), **2 298 722 octets**.
Le mod Demeure autonome est inclus dans le JAR Sanctuary via la déclaration Fabric `jars` ; l'assemblage contrôle son identité et sa licence. Aucun second fichier n'est à installer manuellement.
- SHA-256 MRpack : `ef8499de78461e7eab7bafe3d1ccf38a2d06ec3a0e0884e8e10ffe30fc63071f`.
- SHA-256 Sanctuary : `40f674ca491c1f7e12c0d5dd8994e01e7f998a079fa1853960cfc609c5d0fec6`.
- SHA-256 Demeure : `8993d777ca47f0a7a7a9425532606f772dfdb5db07d400c2adb4207346acd674`.
ZIP, versions internes, dépendances exactes, JAR imbriqué identique au build, notices, ressources et index packwiz vérifiés. Les MRpacks beta.003, .004 et .005 gardent leurs empreintes. Reçu `build/demeure006-artifact.json` ; journaux `build/beta006-delivery-final.log` et `build/beta006-client.log`. Export local uniquement : aucune publication de canal ni synchronisation Prism.
+72
View File
@@ -0,0 +1,72 @@
# beta.026 — affichage Demeure sans recalcul par image
Ticket sur `codex/demeure-map-performance-beta026`.
## Diagnostic et contrat
La couche Demeure parcourait ses chunks puis les 256 blocs de chaque chunk
visible à chaque image. Chaque bloc connu produisait un rectangle GUI distinct,
y compris quand rien ne changeait. Le nombre de dessins dépendait donc de la
surface explorée visible ; le bouton Demeure désactivait ce travail.
La correction prépare une texture transparente de 1 024 × 1 024 pixels, alignée
sur celle du terrain. Son rendu demande un seul dessin. Seuls les chunks dont
les pixels connus ou la couleur Demeure changent sont repeints. Déplacer ou
zoomer transforme limage existante ; changer la fenêtre de chunks la reprojette.
Les lots réseau identiques ne doivent provoquer ni effacement, ni nouvel envoi
de texture au GPU. Une empreinte absente du lot suivant doit disparaître.
Demeure reste activé par défaut. Ses règles serveur, contributions, scores,
dates et sauvegardes restent inchangés. Aucun format de sauvegarde ou protocole
ne change, aucun chunk nest généré ou modifié par ce ticket. Les zones inconnues
et le vide restent transparents, le changement de vue/dimension et la révocation
des droits effacent également la couche Demeure. Les textures sont libérées à
la fermeture de l’écran. Mémoire supplémentaire bornée : 4 Mio de pixels côté
CPU et une texture RGBA8 de 4 Mio côté GPU.
## Vérifications et limites
Mesure native avant/après avec une même surface de 256 chunks de laboratoire,
en comptant les rectangles, les transferts de textures et le temps CPU de
soumission de la couche. Cas fixes, déplacement maintenu, couche masquée/réactivée,
lots identiques et modifiés, brouillard, permissions, redimensionnement et fermeture.
Les mesures de soumission ne sont pas une promesse de FPS sur chaque machine.
`./gradlew check build assemblePack -PsanctuaryClientTests=true
-PsanctuaryMapPerfClientTests=true -PsanctuaryFocusedTests=progression,map,demeure`
réussit : **9 tests natifs serveur**, contrôles de contrats, compilation du
parcours graphique et assemblage du pack. Journal : `build/atlas026-check.log`.
Le parcours graphique préparé sexécute avec :
```sh
./gradlew :sanctuary:runClientGameTest -PsanctuaryClientTests=true \
-PsanctuaryMapPerfClientTests=true
```
Il **reste à exécuter sur une session macOS déverrouillée**. Les essais de
référence ont été interrompus au démarrage graphique, avant les mesures ;
`IOConsoleLocked` était vrai. Aucun gain chiffré de FPS, temps CPU mesuré ou
résultat graphique nest revendiqué pour cette livraison. Le code Atlas de
référence a été contrôlé identique au JAR beta.025 et conservé dans
`build/atlas026-before.class` pour une comparaison ultérieure ; les autres
contrôles serveur ne dépendent pas de laffichage.
La couche réutilise les mêmes couleurs et alpha par pixel : 0 pour linconnu
et le vide, `0xA0` au bord des chunks, `0x25` à lintérieur. Un changement de
métadonnées sans changement de couleur met à jour le survol sans repeindre.
Les paquets terrain et Demeure sont appariés dans lordre déjà garanti par
`AtlasService.reply` ; le résumé Demeure, même vide, clôt son lot terrain.
Le lot en attente est borné à 16 chunks et annulé au changement de requête.
## Artefact local
[Sanctuary-beta.026.mrpack](../build/Sanctuary-beta.026.mrpack), **4 766 675 octets**.
SHA-256 : `f564aabbee977d48e8f3d0d2ea4178b23b18f33f42110ab0dba733f2ae008fbb`.
Reçu : `build/atlas026-artifact.json`.
ZIP, version, 1 253 classes Sanctuary, absence de tests embarqués et identité
des JAR Demeure/JEI vérifiés. Seule la classe de l’écran Atlas diffère dans le
code compilé Sanctuary par rapport à beta.025 ; les classes du module Demeure
sont identiques. Lexport beta.025 conserve son empreinte. Aucun canal, instance
Prism ou monde personnel na été modifié.
+42
View File
@@ -0,0 +1,42 @@
# beta.028 — plongeon jusqu’à collision
## Contrat
Un saut en sprint suivi de **Sallonger** (W par défaut, touche configurable)
déclenche toujours une seule impulsion vers lavant. La posture de plongeon
reste active jusquau contact du sol, dun mur, dun plafond ou à lentrée dans
leau ou la lave. La limite automatique de 30 ticks (1,5 seconde) est retirée.
Relâcher ou réappuyer sur la touche, utiliser Maj ou tourner la caméra ne fait
pas sortir de la posture en plein vol. Le serveur décide de sa fin.
La gravité, les dégâts de chute et les règles de nage restent natifs. Le
plongeon ne permet pas une nouvelle impulsion après avoir touché un mur :
il faut à nouveau partir dun saut en sprint depuis le sol. Mort, vol, monture
et autres états incompatibles interrompent toujours la posture. Les règles
de collision natives empêchent de se relever à travers un plafond trop bas.
Le même attachement temporaire `sanctuary:lying` et la même valeur 3 sont
réutilisés. Aucun nouveau format de sauvegarde, aucune migration et aucun
changement des mondes. Client et serveur beta.028 ensemble.
## Vérifications
**32 tests serveur natifs réussis**, dont 5 nouveaux tests : maintien pendant
240 ticks avec posture native et demandes répétées,
collisions réelles via le moteur (mur, plafond, sol), redépart après un nouveau
saut, arrêt dans leau et conservation de la nage verrouillée, mort et vol.
Régressions familiers, repos et piles de joueurs incluses.
`./gradlew check build assemblePack -PsanctuaryFocusedTests=carry,familiar,movement`
réussit en 3 min 47 s. La vérification visuelle reste à confirmer : session Mac
verrouillée pendant cette livraison.
Export local vérifié : [Sanctuary-beta.028.mrpack](../build/Sanctuary-beta.028.mrpack).
Versions, intégrité ZIP, 1 253 classes compilées et JAR imbriqués vérifiés.
Seuls DiveService, LyingService et LyingClient (et leurs classes internes)
changent dans le code du jeu ; les aides FR/EN sont actualisées. Le portage,
la carte et les autres systèmes conservent leur code beta.027.
Lexport beta.027 reste intact. Aucun déploiement effectué.
SHA-256 MRpack : `531386776236e08cbeef8a26b77ccaf04533cce6bb47f695777190d0e94e5793`.
Reçu : `build/dive028-artifact.json` ; vérificateur : `build/verify-dive028.py`.
+107
View File
@@ -0,0 +1,107 @@
# LIGHT-01 — éclairage dynamique, beta.030
## Contrat
Les objets lumineux tenus en main principale ou secondaire, les cosmétiques de
tête et les objets jetés éclairent le décor et les entités. Les autres joueurs
sont des sources au même titre que soi. Un gâteau coiffé d'une bougie n'éclaire
que si sa bougie est allumée ; les états des blocs font autorité.
L'effet est visuel côté client, sans bloc artificiel, modification de sauvegarde
ou changement des règles de spawn. La lumière utilise la teinte native de la
lightmap ; ce ticket ne crée pas de lumière colorée ni d'ombres dynamiques.
Les objets jetés dans une cellule de 4 × 4 × 4 blocs partagent une source :
l'objet le plus lumineux la représente, à une position arrondie au demi-bloc.
Les quantités des piles ne multiplient pas la lumière. Les sources immobiles
ne provoquent pas de reconstructions répétées du terrain. Les calculs utilisent
un instantané immuable indexé par section et une file de sections dédupliquée,
traitée avec un budget par tick, sans chargement de chunks.
## Utilisation et réglages
L'effet est activé de base, sans aptitude. Il suit aussi les objets lumineux
tenus par les créatures, leurs équipements de tête et les entités en feu.
Les inventaires fermés, coffres et rangées non sélectionnées ne sont pas des
sources. Les spectateurs n'éclairent pas les autres joueurs.
`config/sanctuary-dynamic-lights.json` est créé localement au premier lancement.
Le redémarrage du client applique les changements :
| Réglage | Valeur initiale | Rôle |
| --- | ---: | --- |
| `enabled` | `true` | Active l'éclairage visuel |
| `updateIntervalTicks` | 4 | Collecte des objets cinq fois par seconde à 20 TPS client |
| `dropClusterSize` | 4 | Taille des cellules de regroupement des objets jetés |
| `maxSources` | 32 | Sources les plus proches ; celle du joueur local est prioritaire |
| `range` | 48 | Distance maximale de collecte autour de la caméra, en blocs |
| `sectionUpdatesPerTick` | 12 | Maximum de sections marquées à mettre à jour par tick |
| `itemOverrides` | `{}` | Intensité 015 par identifiant d'objet, par exemple `"mod:lampe": 12` |
Les réglages numériques sont bornés pour éviter un coût accidentel démesuré.
Contrôles → Sanctuary propose également « Activer / désactiver les lumières
dynamiques », sans touche attribuée par défaut. Ce raccourci agit pour la session.
Une désactivation éteint aussi les sections précédemment éclairées.
Les objets-blocs utilisent leur émission native et leur composant `BLOCK_STATE`.
Les bougies colorées et les gâteaux composites utilisent exactement l'état
synchronisé du cosmétique. Hors blocs, le seau de lave émet 15, bâton/poudre de
Blaze 10, poudre lumineuse/baies lumineuses 8, poche d'encre luisante/cadre
luminescent 6. Une surcharge d'objet remplace explicitement ce comportement,
y compris son état allumé/éteint ; 0 permet d'exclure un objet.
## Portée technique
Le rendu natif de Minecraft **26.3-pre-2** reçoit des coordonnées de lightmap
enrichies : terrain et occlusion ambiante, eau, particules, blocs-entités et
entités. La lumière du ciel et les surfaces déjà lumineuses sont préservées.
Les tâches de reconstruction reçoivent chacune un instantané immuable.
Les changements de monde et déconnexions abandonnent les sources précédentes.
La décroissance est radiale, avec la lightmap habituelle de Minecraft : elle
ne calcule pas d'occultation par les murs ni de couleur propre à chaque lampe.
Les sources distantes au-delà du rayon ou du budget sont ignorées ; beaucoup
de sources mobiles peuvent rendre leur suivi plus progressif. Un mouvement
de caméra seul ne change pas la position d'une lampe portée.
## Vérifications
- Contrôles CPU : 10 000 objets dans une même cellule donnent une seule source,
plafonnement des sources, priorité locale, coordonnées négatives, sections
dédupliquées, budget strict, aucune invalidation après 500 mises à jour
immobiles, déplacement, suppression et conservation des instantanés des workers.
- 100 000 requêtes d'éclairage comparées à une référence brute sans index :
mêmes résultats. Sur ce Mac M1, un million de requêtes sur l'index de stress
prennent 2026 ms sur les exécutions de vérification ; c'est une mesure CPU
isolée, pas un résultat FPS.
- Client natif réussi (`build/dynamic030-client-final.log`) : pièce fermée
sombre, torche principale, lanterne des âmes secondaire, bloc lumineux sur
la tête, gâteau allumé puis éteint, autre joueur avec lanterne, déplacement
du porteur et suppression des objets. Les coordonnées de lumière du moteur
de monde restent à zéro alors que le maillage et les entités s'éclairent.
- 200 torches jetées fusionnent naturellement en quatre piles, toutes servies
par une seule source. Le courant déplace les objets ; l'éclairage les suit.
Après leur retrait, l'image redevient sombre. Neuf captures sont conservées
dans `build/dynamic030-evidence/`.
- `./gradlew check build assemblePack -PsanctuaryFocusedTests=lights,cosmetics,familiarhit -PsanctuaryExpansionReload=true`
réussit : **21 tests serveur**, dont le registre complet des objets-blocs,
les états de bougies, le gâteau manipulé par un habitant et sa synchronisation.
Les régressions des cosmétiques et réactions des familiers passent également.
Log : `build/dynamic030-check.log`.
- Le client natif est lancé avec `./gradlew :sanctuary:runClientGameTest
-PsanctuaryClientTests=true -PsanctuaryLightsClientTests=true
-PsanctuaryFocusedTests=lights`. Le dernier parcours complet réussit.
## Livraison locale
[Sanctuary-beta.030.mrpack](../build/Sanctuary-beta.030.mrpack), 4 792 058 octets.
Version interne `beta.030`. Les 1 269 classes compilées correspondent au JAR
embarqué ; aucune classe de test n'est distribuée. Le JAR JEI et les classes
Demeure sont identiques à beta.029. Les classes existantes de Sanctuary restent
identiques, hors l'initialiseur qui enregistre l'éclairage. L'archive beta.029
est préservée.
SHA-256 : `7942c661cbb01b5d0e4b6a59d9839e450223ab57aa3d45297c6816e884d70e80`.
Reçu : `build/dynamic030-artifact.json`. Export local vérifié, sans publication
du canal ni installation dans Prism.
+112 -32
View File
@@ -1,15 +1,72 @@
# Climats, expansion et ressources
Ce document fixe les décisions de conception pour la suite de Sanctuary. Le
registre persistant des continents, leur déblocage et leur génération dans les
huit directions restent à implémenter. Le relevé de ressources décrit plus bas
est un outil de développement séparé, exécuté dans le monde jetable des GameTests.
Ce document distingue les outils de génération et la progression collective
encore à construire. Lalpha.13 réunit l’île de départ et
les commandes dexpansion dans le choix public **Sanctuary**. Le
[guide alpha.13](alpha13-worldgen.md) décrit leur utilisation. Les versions
alpha.12/12.1 et leur [laboratoire](alpha12-laboratory.md) restent historiques.
Le déblocage par recherches, XP et contributions nest pas encore implémenté.
## Les huit directions climatiques
## beta.001 — anciennes expéditions proches
Les nouveaux mondes bêta commencent avec Sanctuary et quatre régions ouvertes
de 512 blocs : nord glacial/Peaks, est tropical/Volcan, sud aride/Canyon et
ouest humide/Océan. Leur [contrat de création](expeditions-beta001.md) est
distinct de celui des anciennes sauvegardes.
Dans ces mondes, les commandes cherchent au plus près sur laxe choisi, par
pas de 16 blocs, en conservant les marges écrites et les contrôles doccupation.
Le dernier argument `distance` reste une distance minimale **entre centres** ;
`0` demande le placement automatique le plus proche admissible. Les commandes
dans les mondes alpha conservent le placement précédent et son secteur aléatoire.
Les quatre régions initiales se génèrent à lexploration, comme Sanctuary ;
les futures régions créées par commande gardent la préparation progressive.
Avec les permissions opérateur : `/sanctuary expansion list` affiche les noms
et identifiants ; `/sanctuary expansion visit noor_vigil` visite la région du
nord. Les autres identifiants sont `makena_embers`, `kai_efe_rift` et `ari_waters`.
## Taille initiale et extensions — alpha.13
Le bouton natif **Personnaliser** propose **Petit** (512 blocs de diamètre
nominal), **Moyen** (724, par défaut) et **Grand** (1 024). La hauteur reste de
384 blocs. Ce choix configure un nouveau monde ; il ne promet ni nombre de
joueurs, ni quantité de ressources, ni aire entièrement constructible.
L’île initiale reprend le relief, les forêts et lhydrologie de Population,
avec les poches de cavités natives issues du laboratoire. Les îles ajoutées
conservent les tailles **64/128/256/512**, les douze profils climatiques et les
quatre reliefs dexpansion. Leur génération ne reprend pas automatiquement
la grande rivière et les terrasses de l’île initiale.
Les commandes opérateur `quick`, `create`, `preview`, `list`, `visit` et
`resume` reprennent le fonctionnement alpha.12.1. Le paramètre final de distance
est facultatif ; les sites occupés sont écartés en cherchant plus loin dans la
même direction. Même un chunk de vide déjà généré est protégé. Les recherches
collectives et les objets de déblocage ne sont pas nécessaires à ces outils.
La racine alpha.13 est de génération 13 ; les extensions restent de génération
12, dans le journal `data/sanctuary-world-v13/expansions.json` du nouveau monde.
Les anciens mondes gardent leurs codecs, leurs paramètres et leur journal.
Les choix séparés Petit/Grand et Laboratoire sont désormais cachés à la
création. Aucun monde existant nest converti ou redimensionné.
## Tailles et mesures historiques
Lalpha.11 proposait Petit (512) et Grand (724), avec Grand par défaut ; ses
repères internes 5/10 ne correspondaient pas à une capacité multijoueur promise.
Les références `population_5/10/20/100` restent celles des sauvegardes historiques.
Les mesures alpha.3 à alpha.11 conservées ci-dessous décrivent uniquement les
versions et les emprises observées à leur date. Les contrôles de lalpha.13,
les rechargements et le benchmark Moyen sont consignés dans [Validation](testing.md).
## Les huit directions et les branches climatiques
Sanctuary Island constitue le point de départ **tempéré, légèrement humide**.
Le nord conduit vers le froid, le sud vers le chaud, l'ouest vers le sec et
l'est vers l'humide. Les diagonales combinent ces tendances.
La boussole climatique est une convention facultative : nord froid, sud chaud,
ouest sec et est humide. Les diagonales combinent ces tendances. **La direction
géographique ne contraint plus le climat.** Les joueurs pourront choisir de
prolonger une voie climatique ou de bifurquer vers dautres découvertes.
| Direction | Axe Minecraft depuis Sanctuary | Tendance climatique |
| --- | --- | --- |
@@ -22,7 +79,11 @@ l'est vers l'humide. Les diagonales combinent ces tendances.
| Ouest | `X` | Sec |
| Nord-ouest | `X, Z` | Froid et sec |
Ces directions définissent des familles de climats, pas huit biomes uniformes.
Ces associations sont les raccourcis par défaut, pas une loi du monde.
Une branche conserve son parent, sa direction et son climat explicite. Plusieurs
couronnes peuvent donc proposer des biomes nouveaux au nord comme au sud.
Le point dorigine reste enregistré même si un joueur déplace son lit ou le spawn.
Les familles de climats ne sont pas des biomes uniformes.
Le relief, l'altitude, les variations locales et la graine doivent conserver
des géographies distinctes à l'intérieur de chaque continent. Les amplitudes
de température et d'humidité, leur évolution avec la distance et les seuils
@@ -109,12 +170,15 @@ Une graine peut donc manquer dune ressource ; la présence de tout le parcour
Minecraft nest pas garantie. Les structures donnant accès à lEnd et leur lien
avec lexpansion restent à concevoir.
## Relevé de développement disponible
## Relevé de développement — générateurs historiques
`ResourceSurveyDiagnostics`, dans `src/gametest`, lit les chunks au statut
`FULL`, après le terrain, les matériaux et les décorations. Il ne figure pas
dans le JAR Sanctuary distribué et n'ajoute aucune commande joueur ou admin.
La tâche repart d'un monde GameTest neuf, jamais d'une sauvegarde personnelle.
Depuis lalpha.13, `runGameTest` et `check` sélectionnent la suite unifiée par
défaut. Les commandes ci-dessous demandent explicitement une suite historique ;
elles ne constituent pas un relevé du nouveau monde unifié.
Le relevé standard inspecte **neuf chunks**, soit un carré de 48×48 blocs autour
du chunk du spawn naturel, sur toute la hauteur de la dimension. Il prépare
@@ -125,26 +189,42 @@ n'est inclus dans ces comptes de blocs.
```sh
# Contrôle standard : neuf chunks inspectés, total local uniquement.
./gradlew :sanctuary:runGameTest -PsanctuaryResourceSurvey=sample --console=plain
./gradlew :sanctuary:runGameTest -PsanctuaryUnifiedTests=false -PsanctuaryResourceSurvey=sample --console=plain
# Relevé de toute l'enveloppe déclarée de Sanctuary, sur un monde jetable neuf.
./gradlew :sanctuary:runGameTest -PsanctuaryTestSeed=0 -PsanctuaryResourceSurvey=island --console=plain
./gradlew :sanctuary:runGameTest -PsanctuaryUnifiedTests=false -PsanctuaryTestSeed=0 -PsanctuaryResourceSurvey=island --console=plain
# Désactiver seulement le relevé pour un autre diagnostic.
./gradlew :sanctuary:runGameTest -PsanctuaryResourceSurvey=off --console=plain
./gradlew :sanctuary:runGameTest -PsanctuaryUnifiedTests=false -PsanctuaryResourceSurvey=off --console=plain
```
Les modes sont transmis à la propriété JVM de test
`sanctuary.test.resourceSurvey`. Le mode `island` couvre **1 444 chunks** :
`X` et `Z` de **304 inclus à 304 exclu**, correspondant à l'enveloppe de terrain
de rayon 288 et une marge de décoration de 16 blocs. Un halo d'un chunk porte
la préparation à **1 600 chunks FULL** ; seuls les 1 444 chunks demandés sont
comptés. Ce relevé complet est plus coûteux et ne s'exécute pas par défaut.
La marge devra être revue si une future génération peut produire des structures
ou décorations au-delà de cette enveloppe.
`sanctuary.test.resourceSurvey`. La propriété Gradle `-PsanctuaryTestPlayers`
choisit le profil interne. Lalpha.11 utilise `5` pour Petit et `10` pour Grand,
ce dernier par défaut ; `20` et `100` servent à la compatibilité historique.
Le mode `island` calcule lenveloppe du profil actif, avec 16 blocs de marge de
décoration et un halo de préparation dun chunk. Les valeurs ci-dessous sont
les bornes calculées lors de lalpha.10, pas des relevés exécutés ni un nombre
de chunks déjà validé pour lancien Grand alpha.11 :
| Profil | Chunks comptés par `island` | Chunks FULL préparés avec halo |
| --- | --- | --- |
| 5 | 1 444 | 1 600 |
| 20 | 4 900 | 5 184 |
| 100 | 22 500 | 23 104 |
Un relevé de toute lemprise peut être très coûteux et ne sexécute pas par
défaut. La marge devra être revue si une future génération produit des
structures ou décorations qui la dépassent. Les diagnostics alpha.10 courants
restent des inspections ciblées ; leurs nombres de minerais ne sont pas ceux
dun relevé `island` complet.
Les nouveaux fichiers sont nommés
`mods/sanctuary/build/run/gameTest/diagnostics/resource-survey-players-<capacité>-seed-<graine>-<mode>.json`.
Sur un générateur historique, le nom émis par loutil actuel porte `legacy`.
Les anciens chemins `resource-survey-seed-…` cités plus bas désignent uniquement
les relevés archivés de leurs versions respectives.
Le JSON est écrit dans
`mods/sanctuary/build/run/gameTest/diagnostics/resource-survey-seed-<graine>-<mode>.json`.
Il contient :
- La graine, la version Minecraft, le preset et les réglages de génération,
@@ -220,16 +300,16 @@ essai client concurrent pendant environ 23 secondes. Elle décrit une machine
chargée et cette exécution, pas une performance garantie sur d'autres machines.
Le temps de préparation est distinct du coût du comptage par palettes.
## Contrat du prochain ticket d'expansion
## Contrat de progression collective restant à construire
Avant toute activation de continent, enregistrer côté serveur son identifiant,
sa direction parmi les huit, son centre, son emprise, sa graine dérivée, sa
version de génération, son profil climatique et son état de déblocage.
Le relevé des ressources intervient après la génération effective de sa région,
avec une complétude explicite, indépendamment des contributions qui l'ont ouverte.
Le registre et la réservation des alpha.12/12.1 sont repris dans lalpha.13 :
identifiant, parent, direction, centre, emprise, graine, génération, climat et
statut sont enregistrés côté serveur. Les chunks existants, y compris le vide,
sont protégés pendant la recherche dune nouvelle région.
Les zones déjà explorées dans le vide peuvent contenir des chunks sauvegardés
ou des constructions. L'activation exige donc un contrat de réservation ou de
matérialisation qui les protège ; elle ne peut pas régénérer silencieusement
les chunks existants. Les règles de contribution, distances, tailles,
réservations, migrations et prix ne sont pas décidées par ce diagnostic.
Le prochain travail de progression doit relier ces ouvertures aux recherches,
aux contributions et à leurs coûts. Un éventuel relevé de ressources intervient
après la génération réelle, avec une complétude explicite ; il ne choisit pas
une graine pour remplir un stock attendu. Les prix, les objets de déblocage et
les règles de contribution restent à concevoir. Aucun contrat de migration
ou de régénération danciennes parties nest fourni par ce diagnostic.
+155
View File
@@ -0,0 +1,155 @@
# beta.001 — les quatre anciennes expéditions
Ticket local **EXP-01**, branche `codex/ancient-expeditions-beta001`. Ce contrat
décrit la création des quatre anciennes expéditions. La préparation de versionnement BETA-01 est conservée
dans cette première bêta, encore non publiée.
## Les régions
Répartition confirmée par le créateur :
| Direction | Nom | Climat | Relief |
| --- | --- | --- | --- |
| Nord | La Veille de Noor / Noors Vigil | glacial | peaks |
| Est | Les Braises de Makena / Makenas Embers | tropical | volcano |
| Sud | La Faille de Kai et Efe / Kai and Efes Rift | arid | canyon |
| Ouest | Les Eaux dAri / Aris Waters | humid | ocean |
Ces régions sont les traces dexpéditions des anciens personnages, ouvertes
avant larrivée des joueurs actuels. Le relief de Sanctuary reste celui de
lalpha.30.7 ; les quatre régions utilisent les générateurs dexpansion existants.
Leur diamètre nominal est **512 blocs chacune**, confirmé par le créateur.
## Contrat de création et de sauvegarde
- Réserver les quatre régions ensemble lors de la création dun **nouveau
monde Sanctuary bêta**, avant de publier les régions au générateur.
- Enregistrer leur identité, graine dérivée, direction, climat, relief, taille
et position. Les îles sont ouvertes dès le départ ; leurs chunks se génèrent
à lexploration, comme ceux de l’île initiale. Elles ne demandent pas de coût
ni de déblocage par les joueurs.
- Distinguer ce contrat dans les paramètres du nouveau monde. Labsence du
paramètre `ancient_expeditions` conserve le contrat alpha.24/30.7 ; aucune ancienne sauvegarde ne
reçoit automatiquement les quatre îles.
- Utiliser un journal bêta distinct, versionné, vérifié et atomique. Aucun
journal existant nest converti : `data/sanctuary-world-beta001/expansions.json`,
schéma `3`, disposition `expedition_layout=1`. En cas de journal incomplet ou invalide,
arrêter avec une erreur au lieu de recréer les régions.
- Conserver les identifiants des codecs et du terrain existants. Le nouveau
paramètre doit survivre à Personnaliser, à l’écriture du monde et au rechargement.
- Une sauvegarde bêta nest pas rétrocompatible avec les binaires alpha :
ne pas la rouvrir avec eux. Les mondes alpha restent sur leur ancien contrat.
## Placement proche
Chercher dabord la position admissible la plus proche sur laxe cardinal,
sans l’écart supplémentaire ni le décalage aléatoire des anciennes commandes.
Conserver les emprises écrites, la marge de décoration et la séparation des
chunks ; les bateaux et autres réservations aériennes restent prioritaires.
Avancer par pas dun chunk si une réservation interdit la première position.
La distance entre centres comprend les rayons des deux îles : ce nest pas
la longueur du vide à traverser entre leurs rivages.
Le même placement proche est disponible pour les nouvelles demandes dexpansion
dans les mondes bêta. Les contrôles doccupation et de reprise du vide certifié
restent obligatoires ; une distance `0` ne donne aucune permission d’écraser
un chunk existant. Les positions et règles des mondes alpha sont conservées.
Le plan utilise les identifiants stables `noor_vigil`, `makena_embers`,
`kai_efe_rift`, `ari_waters`. Leurs noms FR/EN sont affichés dans la liste
opérateur ; les identifiants restent présents pour les commandes. Les structures
vanilla suivent les possibilités naturelles de chaque région : les quatre
ouvertures initiales nimposent pas un bâtiment particulier. Les futures
expansions par commande gardent leur précontrôle de structure existant.
## Périmètre narratif
Le lore fourni associe Noor à laventure, Makena à la cuisine, Kai et Efe à la
construction et Ari aux villageois. Les noms des expéditions prolongent ces rôles.
Steve et ses amis sont des héros trans de cette fiction. Steve sest sacrifié
pour contenir Notch ; Galactium, Alpha, Backrooms et les récits fragmentaires
des personnages nourrissent la suite. Le dénouement et les pouvoirs restent à
définir. Ces éléments ne décrivent pas des mécaniques déjà livrées : aucun boss,
pouvoir, journal à collecter ou déblocage créatif nest ajouté par ce ticket.
## Essai local
Importer `build/Sanctuary-beta.001.mrpack` dans le lanceur, puis créer
un **nouveau monde de type Sanctuary**. Pour une visite rapide, choisir Créatif
et autoriser les commandes. La graine `0`, taille Moyen (724), permet de retrouver
les mesures natives ci-dessous.
`/sanctuary expansion list` affiche les cinq régions et les noms localisés.
Les commandes de visite sont :
```text
/sanctuary expansion visit noor_vigil
/sanctuary expansion visit makena_embers
/sanctuary expansion visit kai_efe_rift
/sanctuary expansion visit ari_waters
```
Le pack cible Minecraft `26.3-pre-2`, Fabric Loader `0.19.5` et Fabric API
`0.160.0+26.3`, avec Java 25. Cet export local navance pas le canal packwiz
publié et ninstalle rien dans une instance personnelle.
## Vérifications
Plans déterministes sur les trois tailles et les graines `0`, `42` et
`-7228211907433324401` ; quatre directions exactes, identités et profils attendus,
emprises distinctes, réservations aériennes respectées et distances mesurées.
La suite pure `ancientExpeditions001Smoke` passe : persistance des cinq régions,
reprise, refus de corruption et dun bootstrap interrompu, ajout dune expansion
ultérieure et ancien journal alpha inchangé octet pour octet. Les neuf plans
utilisent un ciel vide ; un cas supplémentaire impose de vraies réservations
de bateaux de fixture et vérifie leur priorité.
`./gradlew assemblePack -x :sanctuary:check` réussit. Lexport packwiz/Modrinth
est vérifié : versions, index et empreintes, intégrité des deux archives,
JAR embarqué identique au JAR construit et activation des expéditions dans
le preset. Le reçu est dans `build/expeditions001-artifact.json` (ignoré).
`./gradlew check build -PsanctuaryFocusedTests=expeditions` réussit en 4 min 29 s :
tous les contrôles purs du cycle et les **3 GameTests ciblés** passent sur
Moyen 724, graine `0`. Les quatre régions génèrent leurs vrais chunks, leurs
biomes correspondent aux climats attendus, locéan contient un bassin deau,
et chaque visite trouve un point darrivée sûr. Un premier lancement avait
expiré à cause dun callback de test qui se replanifiait sous la même clé ;
le scénario corrigé passe sans modifier le code de jeu.
La seconde exécution, avec `-PsanctuaryExpansionReload=true`, réussit en
1 min 40 s (**3/3**) : mêmes régions et codec, journal inchangé, et quatre
blocs témoins posés lors du premier processus toujours présents après reprise.
Les paramètres des trois tailles et des deux états de structures expérimentales
passent aussi une écriture/lecture native sur disque ; un codec alpha sans
le nouveau paramètre conserve son ancien journal.
Mesures sur Moyen 724, graine `0`, disposition `1` :
| Région | Centre X/Z | Ancienne distance entre centres | Nouvelle distance | Écart estimé de terrain sur laxe |
| --- | --- | --- | --- | --- |
| Noor | 0 / -784 | 933 | 784 | 416 |
| Makena | 784 / 0 | 1 076 | 784 | 360 |
| Kai et Efe | 0 / 784 | 1 013 | 784 | 404 |
| Ari | -784 / 0 | 1 096 | 784 | 348 |
Distances en blocs. Le dernier relevé échantillonne les hauteurs du générateur
tous les quatre blocs sur laxe des centres ; ce nest pas la distance minimale
entre deux rivages ni un tracé de pont. Le placement gagne ici 149 à 312 blocs
entre centres, mais les emprises conservées et la forme réelle des paysages
laissent encore un vide important. Un rapprochement supplémentaire qui ferait
se chevaucher leurs chunks demanderait une évolution du contrat de propriété.
Après ces essais, la version interne a été simplifiée à `beta.001` à la demande
du créateur. `./gradlew build assemblePack -x :sanctuary:check` réussit en 7 s.
Le JAR final est identique au JAR testé, sauf le champ `version` de
`fabric.mod.json`. Les 12 contrôles du nouveau format passent ; le MRpack
final contient uniquement `sanctuary-beta.001.jar` comme JAR Sanctuary.
Les preuves ignorées sont dans `build/expeditions001-check-build-retry.log`,
`build/expeditions001-reload.log`, `build/beta001-clean-naming-assemble.log`,
`build/expeditions001-artifact.json` et
`mods/sanctuary/build/run/gameTest/diagnostics/expeditions001/724-0-{native,reload}.json`.
Ce ciblage ne revendique pas la réussite de toute la suite native générale :
les deux assertions déjà relevées pendant [BETA-01](versioning.md) restent
ouvertes. Les chunks natifs sont vérifiés sur Moyen/graine `0` ; linspection
visuelle client et les essais Windows restent à effectuer.
+106
View File
@@ -0,0 +1,106 @@
# beta.002 — climats et temples des expéditions
Ticket local **EXP-02**, branche `codex/expedition-biomes-temples-beta002`.
Le créateur a validé visuellement la génération de beta.001 et demande :
- Nord : boréal/Peaks, avec taïga, neige et biomes de glace dans la palette boréale.
- Ouest : conserver l’île océanique humide, avec un bassin `warm_ocean` et du corail vivant.
- Sud : une pyramide du désert sur l’île aride/Canyon.
- Est : un temple de la jungle dans l’île tropicale/Volcan, à une position qui varie avec la graine.
Les quatre noms, directions, diamètres de 512 blocs et règles de rapprochement
de beta.001 sont conservés. Les deux bâtiments utilisent les structures vanilla,
avec leurs coffres, pièges, sauvegarde et localisation natives.
## Contrat des nouveaux mondes
Les nouveaux mondes enregistrent `ancient_expeditions=true` et
`expedition_revision=2` dans le générateur. Labsence de révision reste `1`
pour beta.001 ; labsence dexpéditions garde le contrat alpha. Le journal
beta.002 utilise `data/sanctuary-world-beta002/expansions.json`, schéma `3`,
`expedition_layout=2`. Aucun ancien journal nest converti et aucun chunk
dune sauvegarde jouée nest régénéré.
Les nouveaux biomes ne sappliquent qu’à cette révision. Les deux temples sont
planifiés avant lexploration, à partir de la graine et du terrain, puis leurs
starts sont enregistrés par Minecraft lors de la génération des chunks.
Ils respectent loption vanilla de génération des structures. La disposition
et ses règles restent versionnées pour éviter de déplacer un site au rechargement.
## Placement des temples
**Évolution beta.097** : le refus bloquant décrit dans cette version historique
est remplacé par une recherche de secours, puis un placement garanti des pièces
vanilla avec fondation si nécessaire. Les sites historiques admissibles restent
prioritaires. Voir le [contrat du correctif](temple-crash-beta097.md).
Les candidats sont des chunks de lintérieur de chaque île, à au moins 48 blocs
de son centre, ordonnés par un tirage déterministe. La recherche filtre le type
voulu, puis conserve les conditions natives de biome, de pente et de fondation.
Elle ne modifie pas le relief pour imposer un bâtiment. Elle partage un cache
borné à 32 768 colonnes par temple. Si aucun site admissible nest trouvé dans
ce budget, la création refuse explicitement cette disposition au lieu dannoncer
un temple absent. Les essais de graines ci-dessous donnent le périmètre vérifié.
Les starts utilisent `minecraft:desert_pyramid` et `minecraft:jungle_pyramid`.
Ils sont connus de `/locate structure` et sauvegardés au format natif. Leur
réservation protège aussi les salles enfouies, les coffres et les pièges contre
les structures voisines et la décoration ultérieure. Seules les pièces du
temple concerné peuvent écrire dans son volume protégé pendant sa génération.
Le bassin dAri conserve ses contours, profondeur et eau de beta.001 ; son
biome chaud active les véritables features de récif vanilla. Aucune décoration
artificielle de corail mort ne remplace ce récif.
## Vérifications
Sur macOS / Java 25, avec les mêmes dépendances Minecraft `26.3-pre-2`,
Fabric Loader `0.19.5` et Fabric API `0.160.0+26.3` :
- `./gradlew check build -PsanctuaryFocusedTests=expeditions` réussit en
4 min 38 s : contrôles purs du cycle et **4/4 GameTests ciblés**.
- Les plans des trois tailles sur les graines `0`, `42` et
`-7228211907433324401` conservent les centres et les graines des quatre îles.
Les journaux des deux révisions sont testés : relecture, refus de migration
implicite et octets beta.001 conservés. Les réglages beta.001 sans révision
explicite gardent leur valeur `1` ; les réglages beta.002 survivent à
Personnaliser et à une vraie sauvegarde/relecture des trois tailles.
- Sur Moyen 724 / graine `0`, les chunks des deux temples sont générés et
inspectés, leurs starts passent un aller-retour NBT et `/locate` les trouve.
La pyramide possède **4 coffres et 9 TNT**, le temple de jungle **2 coffres
et 2 distributeurs**. La palette boréale échantillonnée contient les six
biomes : taiga, grove, snowy_taiga, snowy_plains, ice_spikes et frozen_peaks.
**69 blocs de corail vivant** sont comptés dans les trois premiers chunks
océaniques inspectés ; ce nombre nest pas un inventaire de toute l’île.
- La reprise dans un deuxième processus réussit, **4/4**, en 1 min 56 s.
Les rapports des temples/récif avant et après reprise sont identiques ;
le journal, les paramètres et les quatre blocs témoins des joueurs sont
conservés. Le refus de chevauchement inclut les chambres enfouies des temples.
- Un nouveau monde Moyen 724 / graine `42` passe aussi **4/4**, en 2 min 15 s,
avec les six biomes boréaux et 178 blocs de corail vivant dans les trois
chunks inspectés. Les deux sites diffèrent de ceux de la graine `0` :
pyramide au chunk `[3, 48]` au lieu de `[2, 46]`, temple au chunk `[50, -7]`
au lieu de `[56, -3]`. Les coffres et pièges attendus sont présents.
- `./gradlew assemblePack -x :sanctuary:check` réussit en 6 s après les
contrôles. Lexport `build/Sanctuary-beta.002.mrpack` est vérifié : intégrité
ZIP, versions et dépendances, index packwiz, JAR embarqué identique au JAR
construit, révision `2` du nouveau preset et présence du lecteur beta.001.
Le reçu est dans `build/expeditions002-artifact.json`.
MRpack SHA-256 : `8a7f956b554385362f70a6b535504ecf5223d3ee86bf3c81bce2913060c104ca`.
JAR SHA-256 : `1d7ff72567aa6d9807332917368a13c1e72bcbb3b6d6620c4a0f72907978b4fb`.
Importer **`Sanctuary-beta.002.mrpack`**, puis créer un nouveau monde de type
**Sanctuary**, avec les structures activées pour visiter les temples. Les
commandes `/sanctuary expansion visit kai_efe_rift` et
`/sanctuary expansion visit makena_embers` amènent sur les îles concernées ;
`/locate structure minecraft:desert_pyramid` et
`/locate structure minecraft:jungle_pyramid` localisent les bâtiments natifs.
Les logs ignorés sont dans `build/expeditions002-check-build.log`,
`build/expeditions002-reload-0.log` et `build/expeditions002-native-42.log`.
Les relevés détaillés sont dans
`mods/sanctuary/build/run/gameTest/diagnostics/expeditions002/`.
La suite native générale garde les deux assertions historiques décrites dans
`docs/versioning.md` ; cette livraison ne les présente pas comme corrigées.
Linspection graphique du nouveau pack et les essais Windows restent à faire.
+85
View File
@@ -0,0 +1,85 @@
# beta.100 — Statues découvertes et promenade des familiers
Branche `codex/exploration-familiers-beta100`. Minecraft 26.3.
## Contrat
Le catalogue des statues et son sélecteur ne proposent que les espèces
observées, tuées ou ayant tué le joueur. Le Métabli envoie une liste calculée
par le serveur à partir des notes `seen_mobs` et des statistiques natives.
Le champ didentifiant et la capture de cible respectent aussi cette liste.
Les plans déjà construits/importés restent des plans de blocs ordinaires.
Aucun nouveau format de sauvegarde, aucune migration ni changement de terrain.
Les familiers au repos choisissent une destination atteignable puis font une
pause. Le tempérament existant règle leur rayon, leur allure et leurs pauses :
curieux explorateur, joueur plus vif, calme plus posé. Les protecteurs restent
près du point gardé. Les déplacements dattaque, la fuite, les ordres, le portage
et les montures gardent la priorité. Les volants ne suivent plus une orbite
perpétuellement recalculée. Les chemins ratés sont abandonnés et les recherches
restent bornées dans les chunks chargés. Les identités et caractères existants
ne sont pas retirés au sort.
## Validation
`Exploration100ClientChecks` : **réussi en 4 min 37 s**. Nouveau monde plat
avec serveur intégré, sans serveur dédié :
- Une vache réellement visée débloque sa statue. Les statistiques natives
tué/par-qui-tué ajoutent zombie et squelette. Un œuf de cochon porté ne suffit
pas. Le client reçoit la liste du serveur ; une génération de cochon reste
refusée même en créatif. Capture du catalogue inspectée.
- Douze promenades réelles : loup, poule, slime, chauve-souris, chacun calme,
curieux et joueur. Plusieurs cases traversées, pauses, maintien près du joueur.
Le tempérament calme est testé avec personnalité protectrice, les deux autres
avec pacifiste pour isoler le déplacement au repos.
- Régression `Autonomy074ClientChecks` complète : quatre personnalités,
déplacements et dégâts réels, garde, cibles neutres, permissions, obstacles,
mode travail, ordres H bref/maintenu et touche reconfigurée.
- `.schem` Sponge v2/v3 : renommage natif ancien `grass` vers `short_grass`,
conservation exacte du fichier source et refus explicite dun bloc de mod absent.
Journal : `build/exploration100-client.log`. Captures :
`build/exploration100-evidence/`. La matrice ne constitue pas un nouveau playtest
visuel de toutes les espèces, ni une validation à plusieurs clients distants.
`Schematics100ClientChecks` : **réussi en 1 min 2 s**. Le client refuse un
fichier incompatible dans le Métabli sans fermer le menu, affiche son identifiant
fautif, puis importe un `.schem` valide. Fermeture, réouverture de la même
sauvegarde et ouverture dun deuxième monde passent, avec conservation de la
structure et remise à zéro du plan/de la session datelier. Le fichier rejeté
reste identique. Journal : `build/schematics100-client.log`.
Ces essais macOS ne reproduisent pas le crash Windows rapporté ; ils ne
constituent pas une correction démontrée de cet incident. `check build assemblePack assembleTestPack` réussit en **2 min 17 s**,
124 tâches, avec `-x :sanctuary:runGameTest` (serveur dédié exclu conformément
au refus de son EULA). Les deux packs sont vérifiés : même JAR testé, sources
correspondantes, libellés FR/EN, textures et archives beta.099 conservées.
Reçu : `build/beta100-artifact.json`. Aucun déploiement personnel ni publication
du canal packwiz.
## Import `.schem` et incident Windows signalé
Les palettes Sponge v2/v3 utilisent maintenant le convertisseur natif
`References.BLOCK_STATE` quand leur `DataVersion` est connue et antérieure.
Seule une copie de palette en mémoire est convertie ; le fichier importé et
les sauvegardes ne sont jamais réécrits par cette opération. Une version
future, un bloc de mod absent ou une propriété réellement incompatible restent
refusés. Sans version source, le parseur reste strict et ne devine pas une
conversion. Le message dimport indique le bloc/état fautif.
Le signalement Windows décrit un échec douverture, un monde absent de la liste
puis une fermeture du client lors du choix dun autre monde. Aucun journal ni
fichier précis nest disponible. Linspection ne trouve aucun accès de suppression
des mondes dans limporteur ; les plans actifs sont effacés en mémoire lors des
changements de connexion. Cela ne prouve pas la cause du signalement : sa
reproduction et le diagnostic Windows restent ouverts. Les fichiers utiles sont
`logs/latest.log` et, sil existe, le rapport daté de `crash-reports/` dans le
dossier Minecraft de linstance concernée. Ne pas supprimer ni convertir les
sauvegardes pour tenter de résoudre cet incident.
## Archives locales
- [Sanctuary-beta.100.mrpack](../build/Sanctuary-beta.100.mrpack), 9914561 octets.
SHA-256 : `7e24ba5e77c7fbb88cfadb55b3e373ad7e998381fd1c56e431aa79b4619a8075`.
- [Sanctuary-Test-beta.100.mrpack](../build/Sanctuary-Test-beta.100.mrpack), 9933483 octets.
SHA-256 : `a43bf61dc38c3c91f4cb09022040099ee1ca9274a6b00751178c80ee204dd944`.
+46
View File
@@ -0,0 +1,46 @@
# FACTION-046 — deux places dès la fondation
Branche `codex/sky-flight-zoom-beta046`, à partir de beta.045.
## Contrat
Une nouvelle faction coûte toujours dix niveaux par défaut, sans prestige.
Elle dispose de deux places : le fondateur responsable et un invité, qui rejoint
sans payer et sans prestige. La troisième place et les suivantes demandent une
charge de prestige chacune par défaut. Le serveur revalide la capacité à chaque
acceptation : deux invitations simultanées ne permettent pas de dépasser la limite.
## Migration
La configuration `config/sanctuary/cycle-factions.json` passe au schéma 3.
Les schémas 1 et 2 sont lus puis convertis une seule fois au chargement :
`initialCapacity` devient 2 ; un ancien `maxMembers: 1` devient 2. Les prix,
récompenses, autres plafonds et le réglage de conservation d'XP sont préservés
(la conversion historique de `creationCost` vers dix niveaux reste applicable
au schéma 1). Cette règle vaut uniquement pour les fondations futures.
Le journal `data/sanctuary-cycle-factions.json` accepte les schémas 1, 2 et 3.
La lecture ne réécrit pas les anciens événements : capacités, membres, dépenses,
charges et prestiges existants restent identiques. La prochaine mutation écrit
le schéma 3 avec l'historique conservé. Les créations anciennes à une place
restent valides, les nouvelles créations en proposent deux. Les identifiants
d'événements et de sauvegarde ne changent pas. Ne pas faire relire un journal
schéma 3 par un ancien binaire ; restaurer ensemble journal et joueurs pour
revenir en arrière. Aucun monde personnel n'est modifié pendant ce ticket.
Le marqueur réseau additif `sanctuary:faction_founding_pair_v1` évite qu'un
ancien client lise une configuration qu'il ne reconnaît pas. Les libellés FR/EN
présentent les deux places, dont une pour le fondateur.
## Vérifications et livraison
Le test de contrat `cycle011Smoke` passe : conversion des configurations
schémas 1/2, idempotence, conservation dune ancienne faction à une place,
fondation à deux places, invitation immédiate et écritures interrompues.
Les scénarios natifs font partie des 20 GameTests serveur ciblés réussis :
un invité rejoint sans prestige, un troisième membre est refusé jusquau
financement dune place, puis peut rejoindre. Les nouveaux instantanés client
reflètent la capacité et les dépenses exactes.
Build, exports et parcours client sont décrits dans
[le ticket beta.046](sky-flight-zoom-beta046.md) et [Distribution](packwiz.md).
+98
View File
@@ -0,0 +1,98 @@
# beta.074 — autonomie et ordres des familiers
Branche `codex/familiar-autonomy-beta074`. Implémentation et parcours client natif vérifiés.
## Comportements
| Personnalité | Décision autonome |
| --- | --- |
| Agressif | Engage les monstres quil voit à 12 blocs du joueur, accompagne ses attaques et riposte. |
| Protecteur | Garde 6 blocs autour du joueur, intercepte en priorité les monstres qui le ciblent, défend le joueur et lui-même. Abandonne la poursuite au-delà de 10 blocs du point gardé. |
| Passif | Nengage pas de combat spontanément ; défend le joueur attaqué et riposte sil est frappé. |
| Pacifiste | Évite le combat et s’écarte dun agresseur. Attend un ordre dattaque ou de garde. |
La vue est celle du familier : son propriétaire na pas besoin de voir le
monstre ou de le viser. Les animaux paisibles, les monstres neutres non engagés,
les alliés et les autres joueurs ne sont pas attaqués par la détection de
proximité. La riposte PvP et les ordres conservent les permissions du monde,
les factions et les règles des duels/arènes.
Un ordre dattaque prime sur la personnalité et les autres menaces. « Protéger »
ordonne explicitement de garder un allié visé, soi-même par défaut, ou le point
visé en maintenant Maj. Même un pacifiste peut exécuter cette garde demandée.
Pendant une poursuite spontanée, le protecteur peut changer de cible pour
intercepter une menace qui commence à viser son joueur ou lallié gardé.
Une cible morte laisse place à une nouvelle décision, au plus tard lors du
prochain balayage. Le protecteur revient près de son point de garde.
Les espèces de soutien disposent du coup de défense lorsquelles sengagent ;
leurs signatures, leurs dégâts existants et leurs coûts en fournitures restent inchangés.
## Commandes
H bref : attaquer lennemi visé, ou revenir au suivi sil ny a pas de cible.
H maintenu environ 0,4 seconde : ouvrir le menu dordres. La touche reste
configurable ; F échange les mains, G déclenche la technique. Relâcher après
louverture du menu ne lance pas dattaque. Les messages brefs confirment
lordre. « Suivre » suspend les réactions spontanées pendant cinq secondes.
## Exécution et conservation
Une recherche dentités chargées par seconde, décalée entre les familiers.
Aucun chargement de chunk ; chemins demandés au maximum toutes les dix ticks.
Une cible autonome perdue de vue cinq secondes, ou sans progression six
secondes, est écartée temporairement pendant dix secondes. Les commandes
explicites peuvent la désigner de nouveau. Les montures, familiers portés,
œufs rappelés et mode travail nentament pas de recherche autonome.
Le tirage de personnalité, les UUID, les 88 profils, la santé, lXP et les
souvenirs sont conservés. Aucun format de sauvegarde, terrain ni journal de
mise ne change. Les règles de combat des arènes restent prioritaires.
Textures beta.070, Minecraft 26.3-pre-2 et dépendances identiques.
## Vérifications
Le parcours `Autonomy074ClientChecks` réussit en **1 min 44 s** avec un
client et son serveur intégré, dans un nouveau monde plat de développement :
- Les quatre personnalités : recherche à 12/6 blocs, attaque du propriétaire,
dégâts réellement reçus par le joueur et déplacement jusqu’à la cible.
- Protecteur villageois : interruption dune poursuite pour une menace visant
le joueur, dégâts sans bouclier, cible suivante et retour dans la zone.
- Abeille neutre paisible puis agressive, garde explicitement demandée à un
pacifiste et priorité dune cible ordonnée.
- Vue propre au familier, obstacle opaque, cible enfermée, permissions,
mode travail, suspension puis reprise après Suivre.
- Événements clavier natifs : H bref/maintenu, reconfiguration sur Y,
absence dattaque au relâchement du menu, F natif ; fiches FR/EN.
La régression `Familiar071ClientChecks` réussit en **1 min 50 s** :
352 000 identités sur les 88 profils, réactions, dégâts, araignées montées,
Strider sur lave et les deux Nautilus aux tailles 2 500 et 6 000 ‰.
La fermeture/réouverture du monde conserve lUUID et le caractère.
Journaux : `build/autonomy074-client.log`, `build/autonomy074-mounts.log`.
Captures de la fiche actuelle et des montures : `build/autonomy074-evidence/`.
`Arena073ClientChecks` et la régression `Duel054Checks` passent en
**1 min 10 s** : arènes de familiers/joueurs/mixtes, 25 inscrits simulés,
consentement PvP, K.-O., morts réelles, mises, remboursements et récupération
après interruption. Journal : `build/autonomy074-arenas.log`.
`check build assemblePack assembleTestPack` réussit en **3 min 6 s**
(124 tâches). Les deux exports packwiz sont vérifiés : **1 689 classes**
comparées au JAR, sources testées identiques, huit libellés FR/EN mis à jour,
ressources et textures beta.070 intactes. Seules les quatre classes sources
prévues changent par rapport à beta.073. Les neuf archives précédentes
beta.070 à beta.073 restent strictement identiques.
Reçu : `build/autonomy074-artifact.json`.
Ces essais couvrent lIA commune ; ils ne constituent pas un nouveau playtest
des 88 techniques ni un test à plusieurs clients distants. Le serveur dédié
reste exclu (`-x :sanctuary:runGameTest`) conformément au refus daccepter
son EULA ; les essais natifs utilisent le serveur intégré.
Aucun monde personnel ni déploiement Prism.
## Archives locales
- [Sanctuary-beta.074.mrpack](../build/Sanctuary-beta.074.mrpack), 9595113 octets.
SHA-256 : `cc73e93c2ae17d6b52b6c8dd53639771645c5e5becd848e2c76765e32c919c5d`.
- [Sanctuary-Test-beta.074.mrpack](../build/Sanctuary-Test-beta.074.mrpack), 9614048 octets.
SHA-256 : `0851e10350788b76efa96ec1a50db951a74200213399e2a4216f8d5b1b8fafcb`.
+180
View File
@@ -0,0 +1,180 @@
# beta.054 — familiers de combat, duels et mises
Branche `codex/familiar-combat-beta054`. Cette version ajoute le combat physique,
les profils des 88 espèces, les ordres et les duels avec mises en objets. Le
catalogue de conception reste [la refonte](familiar-combat-design.md). La
validation des duels ci-dessous ne constitue pas une validation exhaustive de
chacun des comportements et services de vie commune des 88 fiches.
## Compatibilité et migration additive
- Les identifiants d'objets, d'entités, d'aptitudes et de sauvegardes existants
restent stables. Aucun monde personnel n'est ouvert ou modifié par les tests.
- Un ancien œuf équipé reçoit une identité individuelle au premier usage du
nouveau système. Son objet, son nom, sa taille et ses autres composants sont
conservés. Les œufs non utilisés ne sont pas réécrits.
- L'identité utilise une entrée séparée de `custom_data` ; la santé, le K.-O.,
les techniques et souvenirs utilisent un registre versionné séparé du monde.
Les registres historiques de progression et de pouvoirs restent lisibles.
- Un identifiant ou schéma inconnu est conservé et désactivé, jamais converti
silencieusement en un nouveau compagnon. Une copie du même œuf représente le
même individu ; elle ne crée pas une réserve de santé supplémentaire.
- Retrait, transfert, mort, prestige et reconnexion ne réinitialisent ni la vie
ni les délais. Un seul exemplaire d'un individu peut être actif sur le serveur.
- Les futures espèces disposent de profils nommés et versionnés ; leur retrait
temporaire conserve les données de leurs individus pour une réinstallation.
- Revenir à beta.053 masque les données nouvelles sans les supprimer. Les
modifications faites avec une ancienne version ne sont pas une synchronisation
inverse du combat : sauvegarder le monde avant tout retour de version.
## Règles de cette livraison
Un compagnon actif, combat en temps réel, actions émises depuis sa position.
Suivre, engager, protéger et rappeler ; G lance la technique équipée et une
touche configurable ouvre les ordres. Les signatures sont immédiatement
accessibles ; le Lien actif déjà acheté garde sa valeur pour les variantes.
Les nouveaux menus réutilisent les contrôles et textures natifs.
Le combat termine après une période sans engagement réel. Rappeler reste
possible immédiatement ; changer d'individu attend la fin de cette période.
Les dégâts ennemis peuvent provoquer un K.-O., jamais détruire l'œuf. Les
caresses et coups amicaux gardent leur retour visuel et sonore sans dégâts.
Les soins utilisent des ressources réelles et le repos hors combat.
Les attaques autonomes et les nouvelles techniques de combat préservent le
terrain. Les anciens usages de travail, dont démolition et allumage, sont
séparés et explicitement sélectionnés hors combat ; leurs droits et ressources
restent applicables. Les anciens bonus de combat ne s'ajoutent pas aux nouveaux.
Le consentement allié, les factions et le réglage PvP s'appliquent côté serveur.
## Duels entre joueurs
### Duels et mises — contrat ajouté le 15 septembre
Les deux joueurs acceptent une invitation locale, puis valident chacun les deux
mises affichées. Une mise est facultative et contient au plus une pile d'objets,
avec ses composants natifs. Les cases de l'inventaire débloqué servent à choisir
la pile (clic) ou un objet (clic droit). L'emplacement de mise est un aperçu :
les objets restent dans l'inventaire jusqu'à la double validation. Toute
modification annule les validations ; une ancienne révision ne peut accepter
une nouvelle offre. Les quantités sont revérifiées et retirées côté serveur.
Trois secondes de préparation, trois minutes de combat maximum. Les permissions
du duel concernent exclusivement les deux familiers, même entre alliés ou quand
le PvP général est désactivé. Les propriétaires peuvent donner les ordres et
utiliser leurs techniques, mais ne frappent pas directement le familier adverse.
Le terrain reste soumis au contrat du combat. Pas d'apprentissage par duels.
Vie et recharges réelles persistent après le résultat ; aucune guérison de duel.
K.-O., abandon explicite, rappel, changement d'individu ou sortie du périmètre
de 24 blocs donnent la victoire à l'adversaire. Une interruption technique,
déconnexion ou expiration sans gagnant restitue les mises. Le résultat indique
les dégâts, impacts et techniques pour faciliter les essais. Une déconnexion
volontaire reste indistinguable d'une coupure réseau : ces paris amicaux ne
constituent pas un classement compétitif résistant à ce comportement.
Le gagnant reçoit les deux mises. Un inventaire plein conserve le paiement dans
le registre, accessible depuis Duel. Aucun gain n'est lâché au sol. Le nouveau
fichier `sanctuary/familiar-stakes-v1.json` et le reçu joueur additif
`sanctuary:familiar_duel_receipt` forment le contrat de transaction : journal
écrit avant le débit, inventaire et reçu sauvegardés ensemble, résultat écrit
avant paiement, puis accusé de réception sauvegardé avant purge du journal.
Dans 26.3-pre-2, l'hôte solo est lui aussi sauvegardé dans `playerdata` ;
`level.dat` conserve son `singleplayer_uuid`, pas son inventaire.
La reprise d'un journal encore actif restitue les objets réellement débités ;
un résultat déjà enregistré conserve son gagnant. Une erreur ou un schéma
inconnu désactive les paris et préserve les données pour récupération.
Retour à beta.053 : ne pas jouer avec des mises en attente. Terminer les duels
et récupérer tous les objets avant un retour de version ; sinon restaurer la
sauvegarde complète correspondante, jamais uniquement le journal ou un joueur.
Ces ajouts ne réécrivent aucun monde historique hors de la migration paresseuse
explicitée plus haut. Les tests utilisent exclusivement des mondes de développement.
## Niveaux stockés — contrat du 15 septembre
La fiche du familier permet de déposer ou retirer l'XP hors combat et hors
invitation/duel. Les montants sont des points d'XP exacts : un cran correspond
à la prochaine frontière de niveau du familier au dépôt et au niveau entier
inférieur au retrait, suivant la courbe Minecraft.
« Tout déposer » et « Tout retirer » conservent également les points partiels.
Le niveau est attaché à l'individu dans l'œuf et suit les échanges, jamais au
joueur. Chaque niveau donne +2,5 % de vie maximale et +1,25 % de dégâts,
sans plafond de progression de jeu. La rareté monte d'un palier tous les dix
niveaux, jusqu'à légendaire ; les statistiques continuent ensuite à progresser.
Changer la charge conserve la vie courante absolue (bornée par le nouveau
maximum) et ne soigne pas. Les délais et souvenirs sont conservés.
Migration additive explicite : les individus de schéma 1 se lisent avec zéro
XP ; leur prochaine écriture produit le schéma 2 avec `storedXp`. Le registre
extérieur reste `familiars-v1.json`. Les schémas inconnus restent préservés.
Un nouveau journal `sanctuary/familiar-xp-v1.json` contient uniquement les
transferts en attente. Le reçu joueur `sanctuary:familiar_xp_receipt` est
sauvegardé avec l'XP native avant de valider la nouvelle charge du familier.
Une reprise termine uniquement une opération dont ce reçu existe ; autrement,
elle l'annule sans crédit. Un individu avec transfert non résolu est gelé
jusqu'à la reconnexion du joueur concerné. Une erreur conserve le journal et
désactive les transferts. Le compteur utilise des entiers 64 bits ; une
opération dépassant la représentation native du joueur est refusée sans perte.
Les copies d'un œuf partagent le même solde serveur. Avant un retour à une
ancienne version, retirer l'XP et terminer tous les transferts ; restaurer une
sauvegarde complète plutôt que des fichiers individuels.
Les points de vie sont conservés dans les unités du profil de base, puis
convertis en réserve effective pour les dégâts et les affichages Sanctuary.
Cela permet de dépasser la limite de l'attribut natif de santé, sans introduire
un plafond caché à la progression. Les soins et le repos restaurent la même
fraction de la réserve qu'avant cette extension.
## Vérifications
Sur Minecraft 26.3-pre-2, Java 25, dans un monde plat de développement :
- `Combat054ClientChecks` : chargement des 88 profils, attaque autonome du loup
depuis son entité physique, blessure persistante, sauvegarde et vraie
reconnexion ; menus FR/EN.
- `Duel054Checks` : deux entités `ServerPlayer`, invitation, double validation,
changement de mise et refus d'une ancienne validation, refus d'une case
verrouillée, aucun débit avant consentement mutuel.
- Combat autonome, adversaire limité au familier, absence d'aide du rival,
dégâts directs du propriétaire refusés, K.-O., paiement exact, réclamation
répétée sans duplication et absence d'apprentissage par duel.
- Duel sans mise, projectile natif, projectile non sauvegardable, abandon,
blessure conservée et refus d'un projectile arrivé après la fin du duel.
- Clic natif sur la mise dans le menu, aller-retour réseau et mise effacée
côté serveur ; affichage et commandes FR/EN.
- Inventaire plein, gain conservé, récupération ultérieure, reprise du journal
interrompu, restitution sans double paiement, coffre renommé avec contenu
natif conservé après le transit.
Les tests serveur ci-dessus tournent dans le client intégré, sans accepter
l'EULA d'un serveur dédié. Ils ne remplacent pas une session de charge avec
deux clients réseau indépendants. Captures : `build/combat054-evidence/` ; journal
client : `build/combat054-final-client-pack.log`.
`Experience054Checks` vérifie également les frontières de la courbe XP native,
les allers-retours d'XP même après une dépense de niveaux, les points partiels,
le refus d'une requête périmée, le gel dès l'invitation de duel et pendant un
combat. Un familier de niveau 120 inflige les dégâts supplémentaires réels ;
sa réserve de santé reçoit les dégâts en unités effectives. Dépôt et retrait
ne restaurent pas sa vie. La migration de schéma 1 conserve les inconnus.
La reprise est testée avant débit, après reçu joueur et après écriture du
familier ; les tentatives répétées ne multiplient pas les crédits. Un échange entre deux
joueurs conserve la charge, permet au nouveau propriétaire de la retirer et
refuse qu'une copie conservée par l'ancien propriétaire serve à la voler. Les boutons
natifs, la rareté légendaire de l'œuf et une nouvelle ouverture du monde avec
l'XP stockée sont vérifiés. Ce ne sont pas des tests d'arrachement physique du
disque ou de panne électrique.
## Limites de la refonte à vérifier par espèce
La validation exhaustive conserve comme critères : comportement favorable et refus utile pour chaque espèce,
munitions/consommables conservés, origine des attaques, protections finies,
K.-O./soins, rappel/changement/transfert/reconnexion, PvP et factions, absence de
destruction autonome, menus FR/EN et conservation des fonctionnalités historiques.
Les valeurs restent des valeurs de test. Certains services de vie commune et certaines variantes utilisent encore des
comportements génériques : plateforme commune pour plusieurs espèces,
ancrage par ralentissement, suivi de cible simple et protection sans renvoi
réel de projectile. Leur fidélité au catalogue reste à finaliser. Les duels
rendent les essais possibles ; cette livraison ne constitue pas la finition
exhaustive des 88 fiches ni la fin de leur équilibrage.
+405
View File
@@ -0,0 +1,405 @@
# Les 88 familiers — combattre et vivre ensemble
**Proposition de conception du 15 septembre 2026. Aucun de ces changements n'est implémenté par ce document.**
Ticket documentaire **FAM-DESIGN-03**, branche `codex/familiar-combat-design`.
Référence du dépôt : **beta.052**, Minecraft **26.3-pre-2**. Catalogue fermé sur les
88 entrées de [CompanionType.java](../mods/sanctuary/src/main/java/fr/koka/sanctuary/companion/CompanionType.java).
Les raretés existantes sont conservées : **22 / 22 / 25 / 16 / 3**.
## 1. Direction et portée
Le créateur demande d'explorer le combat avec son familier, avec Pokémon comme
point de départ modifiable, puis d'établir le rôle des 88 espèces. Cette proposition
retient le **combat en temps réel en duo** : le joueur combat avec ses armes,
ses outils et le terrain ; son compagnon agit physiquement à ses côtés.
L'objectif est de pouvoir raconter « il m'a couvert pendant que je rechargeais »
ou « je suis revenu le chercher », puis de retrouver ce même compagnon dans la
vie quotidienne. Son rôle, ses initiatives et ses réactions doivent être visibles.
État actuel : les [pouvoirs beta.044](spawn-eggs-catalogue-beta044.md) sont surtout
déclenchés par le joueur ; les familiers sont invincibles et sans combat autonome.
Le [nom, la taille et les interactions](familiar-interactions-beta020.md), ainsi que
le [nom à l'arrivée](starter-name-beta052.md), constituent des bases déjà livrées.
La présente proposition introduit un autre fonctionnement ; les anciens pouvoirs,
bonus et dégâts natifs ne s'additionnent pas automatiquement à ces nouvelles fiches.
Le catalogue beta.044 continue de décrire le jeu livré tant qu'un ticket de code
n'a pas remplacé explicitement chaque comportement concerné.
Les noms français ci-dessous servent la lecture du document ; les identifiants
entre parenthèses font autorité. Une future interface devra avoir ses libellés FR/EN.
## 2. Règles communes proposées
### Un partenaire, quelques ordres
- **Un seul compagnon actif par joueur.** Un combat engage ce duo. Remplacer le
compagnon attend la sortie de combat ; le rappeler reste possible immédiatement.
- **Suivre** : accompagne, signale les menaces, attend l'engagement du joueur.
**Engager** : poursuit la cible désignée dans un périmètre local.
**Protéger** : reste près d'une personne ou d'un point désigné et intercepte.
**Rappeler** : abandonne son action et revient ; l'ordre peut aussi le ranger.
- En défense, il réagit à une agression subie par le duo. Il ne choisit pas tout
seul des animaux neutres ou des inconnus comme ennemis et ne poursuit pas hors
du périmètre. Une cible perdue conduit au retour, avec un signal compréhensible.
- **G déclenche une technique équipée**, choisie parmi la signature et une variante
apprise. Un sélecteur d'ordres configurable donne accès aux consignes. Les gestes
précis devront être essayés avec les raccourcis déjà présents dans Sanctuary.
- L'initiative de chaque fiche est l'action de base autonome, répétée à cadence
mesurée tant que l'ordre le permet. La technique G demande un choix du joueur.
Les signatures sont accessibles dès le début de la relation ; le premier combat
doit enseigner leur usage. L'articulation avec l'achat actuel du Lien actif reste
à traiter explicitement dans le ticket de progression.
### Des corps présents dans le combat
- Attaques, écrans et aides partent **du compagnon**. Son trajet, sa position, sa
préparation et sa récupération comptent. Les animations accompagnent la réponse
sans imposer un long déplacement à chaque geste d'urgence.
- Les cibles peuvent l'attaquer et interrompre ses actions annoncées. Les attaques
lourdes laissent le temps de s'écarter. La puissance dépend du rôle et de ces
fenêtres, jamais simplement de la rareté ou de la taille visuelle de l'œuf.
- Les familiers gardent une circulation confortable autour des alliés. Une garde
intercepte les attaques dans son volume d'effet ; elle n'exige pas de bloquer
physiquement les portes avec le corps du compagnon.
- Les poissons et autres aquatiques portent sur terre une **petite enveloppe d'eau
magique**, proche du sol, qui autorise leurs actions courtes. Elle ne crée pas
d'eau, ne permet pas de voler avec le joueur et ne le fait pas respirer. Dans
l'eau réelle, ces compagnons gagnent surtout de la liberté de mouvement. Tous
doivent avoir au moins un service de combat utilisable sur Sanctuary Island.
- Un cheval familier reste un petit esprit compagnon. Les aides de déplacement
sont brèves ; les chevaux et bateaux réels gardent leur rôle de transport.
- Les familiers morts-vivants restent utilisables en journée. Les propriétés des
mobs sauvages ne s'appliquent que lorsqu'elles servent un comportement prévu
dans la fiche. Ni combustion solaire ni mort de l'abeille après une piqûre ici.
### Se protéger mutuellement
- Chaque compagnon aurait sa propre vie et pourrait **tomber K.-O.** Il se replie
dans son œuf. Le combat continue avec le joueur encore debout.
- Le repos hors combat permet sa récupération ; nourriture et soins réels peuvent
aider pendant une expédition. Le délai et les quantités restent à régler en
prototype. L'absence du joueur ne dégrade jamais la relation.
- Rappel, changement d'œuf, déconnexion ou mort du joueur ne rendent pas gratuitement
la vie et les techniques. Blessures et récupération suivent le même individu.
- Le K.-O. du compagnon ne détruit pas son œuf. La perte éventuelle de l'objet à la
mort du joueur reste un sujet distinct, selon les règles d'inventaire existantes.
Conserver une mémoire ne promet pas de recréer un œuf perdu ou détruit.
- Le joueur peut continuer ses activités avec un compagnon au repos. Aucun métier
ni accès à la progression n'exige d'avoir un compagnon disponible en permanence.
### Des règles qui permettent de combiner les espèces
- Les provocations, leurres et déplacements d'ennemis concernent d'abord les
**monstres ordinaires**. Ils n'imposent jamais une visée ou un déplacement à un
joueur. Boss, grosses créatures et cibles immunisées ont une résistance adaptée.
Les protections, frappes et repères restent utiles contre eux.
- Une entrave est courte, puis la cible bénéficie d'une résistance commune aux
nouvelles entraves. Alterner 30 familiers ne doit pas immobiliser une cible à vie.
- Les gardes ont une capacité d'absorption finie et des angles lisibles. Une même
attaque ne peut pas être annulée successivement par une chaîne de familiers.
- Les soins et l'air ont un budget commun **par bénéficiaire**. Tous les soins
rendent des PV réels, bornés par sa capacité. Ils consomment la ressource annoncée
et ne peuvent pas être multipliés en changeant de compagnon ou en traversant
plusieurs fois la même zone. Les recettes d'alchimie conservent leur intérêt.
- Les armes de tir matérielles utilisent de vraies munitions préparées par le
joueur. Les projectiles intrinsèques, comme les crachats et rayons, restent des
effets sans butin récupérable. Les capacités n'ajoutent aucun inventaire général :
les livraisons déplacent des objets existants et accessibles. Échec de livraison :
retour au stock d'origine, ou dépôt réel récupérable si ce retour est impossible.
- Les fournitures viennent des cases débloquées ou d'un stockage explicitement
autorisé et proche. Le compagnon n'ouvre pas des coffres distants ou inconnus.
Un joueur reçoit manuellement les potions et aliments livrés ; leur consommation
automatique est limitée aux compagnons alliés auxquels le soin est destiné.
- Le PvE est la cible du premier prototype. En multijoueur, aides et déplacements
alliés respectent le consentement existant ; les attaques respectent les factions,
les permissions et le réglage PvP. Les chiffres PvP demanderont leurs essais.
- **Terrain : décision proposée pour ce futur système** : les attaques autonomes
de combat n'endommagent pas les constructions. Démolition et allumage existent
comme ordres de travail explicites, avec leurs ressources et droits. Cela change
les explosions natives livrées en beta.044 ; ce changement devra être nommé dans
le futur ticket et sa migration, et n'est pas actif aujourd'hui.
- Les repères utilisent des cibles ou indices locaux et une mémoire autorisée.
Un familier ne révèle ni une carte entière ni le contenu d'un coffre fermé.
### Apprentissage et attachement
Chaque fiche donne une **signature initiale** et une **variante à apprendre**.
On en équipe une à la fois, hors combat. La variante propose une autre façon
d'aider ; elle ne s'ajoute pas comme un second bouton obligatoire. Le comportement
de base reste disponible avec l'une ou l'autre.
La confiance grandit par des expériences variées et utiles : aider réellement,
explorer, se protéger, se reposer ensemble. Temps AFK, ennemis invoqués pour farm,
coups volontaires sur ses alliés et répétition de caresses ne font pas progresser
la maîtrise. Les premiers apprentissages doivent être accessibles rapidement.
Les petits gestes des fiches sont des **expressions possibles de l'espèce**.
Chaque individu aurait un tempérament stable qui choisit leur fréquence et leur
forme sans rendre un compagnon moins fiable. Il conserve son nom, sa taille,
ses apprentissages et quelques souvenirs attestés : lieu de rencontre, expédition,
secours réel, retour au foyer, prestige vécu. La fiche Habitant porterait cette
mémoire ; la relation se manifesterait surtout dans le monde.
Le têtard et la grenouille, ainsi que les variantes mortes-vivantes, restent ici
des espèces distinctes. Une évolution ou une transformation serait une décision
séparée, jamais une conversion automatique d'un individu auquel on s'est attaché.
## 3. Catalogue complet
Les actions ci-dessous sont des comportements proposés. Les mots « court »,
« proche », « quelques » décrivent l'intention avant mesure. Les dégâts, PV,
portées, recharges et coûts définitifs seront établis par famille de comportement,
puis vérifiés par espèce. Aucun équilibrage chiffré des 88 n'est revendiqué.
### Communs — 22
| Nº · Familier | Rôle et initiative autonome | G · Signature | Variante à apprendre | Vie commune : service et petit geste |
| --- | --- | --- | --- | --- |
| 01 · Chauve-souris (`bat`) | **Éclaireuse.** Tourne à distance des coups et signale l'ennemi qui approche derrière le joueur. | **Écholocalisation** : une pulsation révèle brièvement les créatures proches qui bougent, avec des repères directionnels. | **Diversion** : passe devant une cible pour attirer brièvement son attention, puis revient se mettre à l'abri. | Guide vers une ouverture proche déjà détectée ; se suspend au plafond au repos. |
| 02 · Chat (`cat`) | **Garde rapprochée.** Reste près du joueur et griffe les petits ennemis qui franchissent sa garde. | **Dos rond** : s'interpose et fait hésiter ou reculer les petits monstres devant lui. | **Patte vive** : bondit sur l'assaillant désigné pour interrompre une préparation interruptible. | Avertit des Creepers proches ; choisit un endroit chaud pour se coucher. |
| 03 · Poule (`chicken`) | **Gêne de proximité.** Picore une cible engagée, recule et oblige les monstres ordinaires à se retourner. | **Grand battement** : une bourrasque courte écarte les petits ennemis autour du joueur. | **Réception** : rejoint un allié qui chute et freine une descente, puis doit se reposer. | Aide les petits franchissements et les réceptions de chantier ; accourt lorsqu'on sort des graines. |
| 04 · Morue (`cod`) | **Secours individuel.** Suit le duo à couvert ; lance une petite giclée défensive sur l'ennemi qui s'approche. | **Bulle de secours** : apporte à une personne ou un familier une bulle qui éteint une brûlure ; sous l'eau, elle rend aussi un peu d'air. | **Éclaboussure** : projette un jet bref qui repousse une petite cible et mouille localement les créatures touchées. | Repère une poche d'air proche ; dessine un petit cercle autour du plongeur revenu à la surface. |
| 05 · Vache (`cow`) | **Protectrice de contact.** Se place de côté devant son maître et donne un coup de tête à l'assaillant proche. | **Lait de secours** : apporte une dose du lait fourni pour retirer Poison et Faim à un bénéficiaire. | **Épaule solide** : encaisse une partie d'un prochain impact destiné à un allié, avec sa propre vie. | Transporte un seau préparé sur une courte distance ; vient frotter son front après un secours. |
| 06 · Âne (`donkey`) | **Ravitailleur de position.** Reste derrière le duo, lui apporte ses munitions disponibles et rue sur ceux qui le poursuivent. | **Point de ravitaillement** : dépose près de lui un petit lot choisi du stock du joueur pour les alliés qui viennent le prendre. | **Dégage !** : une ruade repousse l'ennemi le plus proche et lui ouvre un trajet de retour. | Aide au rangement dans un coffre désigné ; attend patiemment au point de livraison. |
| 07 · Renard (`fox`) | **Opportuniste.** Contourne une cible occupée par le joueur, mord puis se retire. | **Chapardage** : file chercher un objet au sol désigné, même près des ennemis, et le rapporte. | **Feinte** : fait mine d'engager une cible, l'attire de quelques pas puis esquive de côté. | Récupère les récoltes tombées ; rapporte fièrement un objet dans sa gueule. |
| 08 · Grenouille (`frog`) | **Contrôle précis.** Bondit entre les appuis et frappe à courte portée avec sa langue. | **Coup de langue** : tire vers elle un objet ou un petit ennemi désigné. | **À la rescousse** : ramène un allié consentant vers son appui proche et sûr. | Récupère des objets tombés au bord de l'eau ; coasse après un saut réussi. |
| 09 · Cheval (`horse`) | **Attaquant mobile.** Charge une cible isolée, frappe puis prend de la distance pour revenir. | **Percée** : traverse une courte ligne et heurte le premier ennemi, en conservant une sortie libre. | **Ouvrir la route** : passe devant le joueur et lui donne un bref sillage de déplacement au sol. | Accompagne les trajets entre lieux connus ; hennit en reconnaissant le point de départ. |
| 10 · Lama (`llama`) | **Tireur défensif.** Garde sa distance et crache sur la cible désignée. | **Crachat d'arrêt** : un crachat appuyé interrompt une préparation légère et repousse peu. | **Volée** : répartit trois crachats entre les ennemis proches, avec moins d'effet par cible. | Aide à tenir une petite caravane regroupée ; relève la tête après un tir réussi. |
| 11 · Mule (`mule`) | **Messagère mobile.** Circule derrière les alliés, avec une ruade de défense si son trajet est coupé. | **Livraison urgente** : apporte directement l'objet préparé au bénéficiaire désigné. | **Relais** : reprend chez un allié consentant un lot qu'il lui confie et le ramène au propriétaire. | Transporte un lot entre deux personnes ou stockages proches autorisés ; annonce son arrivée d'un bref cri. |
| 12 · Cochon (`pig`) | **Débusqueur.** Flanque la cible et la bouscule du groin lorsqu'elle se cache derrière un petit obstacle. | **Truffe au sol** : suit l'odeur récente d'une cible observée et révèle sa dernière direction à proximité. | **Bousculade** : pousse de côté une petite cible pour l'exposer à la ligne de tir du joueur. | Cherche des plantes déjà connues ; s'assoit près du repas sans le consommer. |
| 13 · Lapin (`rabbit`) | **Leurre agile.** Harcèle par de petits coups puis bondit hors de portée de mêlée. | **Fausse piste** : attire un monstre ordinaire vers le point proche choisi par le joueur, avec un trajet d'évasion. | **Bond complice** : rejoint le joueur puis accompagne un court franchissement dirigé, une fois par vol. | Aide à franchir un petit écart ; bondit de joie lorsque le joueur le rejoint. |
| 14 · Saumon (`salmon`) | **Intercepteur linéaire.** Prend son élan et heurte une cible dans un passage court. | **Contre-courant** : un jet linéaire repousse les ennemis qui avancent face à lui. | **Sillage** : trace un passage bref que les alliés peuvent suivre pour se déplacer ; plus libre dans l'eau. | Guide une traversée aquatique locale ; saute à la sortie du courant. |
| 15 · Mouton (`sheep`) | **Amortisseur.** Reste près d'un allié et absorbe une part limitée d'un contact avec sa toison, puis doit récupérer. | **Cocon de laine** : se blottit contre un bénéficiaire pour amortir le prochain impact, au prix de sa garde. | **Coussin** : utilise une laine fournie pour préparer une petite réception temporaire au sol. | Sécurise une réception de chantier ; se secoue après avoir protégé quelqu'un. |
| 16 · Squelette (`skeleton`) | **Archer précis.** Tire des flèches fournies, depuis un angle dégagé, et recule si un ennemi l'approche. | **Tir visé** : prépare un tir précis sur une cible, annoncé et interrompu si elle casse la ligne de vue. | **Tir de couverture** : tire pour gêner brièvement la progression d'un monstre dans un passage. | Montre si sa ligne de tir est dégagée ; redresse sa posture après une bonne flèche. |
| 17 · Slime (`slime`) | **Contrôle élastique.** Bondit contre les ennemis proches et les écarte légèrement. | **Rebond** : se comprime puis projette une petite cible dans une direction annoncée. | **Tremplin** : se place sur un appui et fournit un rebond au prochain allié consentant ; capacité finie. | Sert d'appui de chantier temporaire ; imite les sauts du joueur au repos. |
| 18 · Araignée (`spider`) | **Attaquante verticale.** Grimpe les surfaces pour contourner une défense et mord au contact. | **Fil tendu** : pose entre deux appuis proches un fil temporaire qui freine le premier ennemi le traversant. | **Descente surprise** : depuis un vrai appui en hauteur, se laisse tomber sur la cible désignée. | Repère un parcours grimpable proche ; attend suspendue pendant les pauses. |
| 19 · Calmar (`squid`) | **Protection de retraite.** Reste entre le joueur et ses poursuivants, donnant de petits coups de tentacule. | **Écran d'encre** : masque brièvement une zone et gêne le suivi visuel des monstres ordinaires. | **Jet arrière** : se propulse et repousse un poursuivant proche pour ouvrir une retraite. | Aide à repérer un objet dans l'eau proche ; s'étale calmement dans son enveloppe au repos. |
| 20 · Têtard (`tadpole`) | **Guetteur de secours.** Reste à couvert et signale l'allié proche qui manque d'air ou n'a plus de sortie dégagée. | **Issue !** : rejoint et indique un petit passage local praticable pour la retraite du duo. | **Bulle de garde** : apporte un écran d'eau qui absorbe une petite attaque frontale puis éclate. | Guide vers une berge accessible ; revient vérifier que le joueur le suit. |
| 21 · Poisson tropical (`tropical_fish`) | **Marqueur mobile.** Tourne autour d'une cible désignée à distance et maintient son repère tant qu'il la voit. | **Éclat coloré** : marque les ennemis visibles d'une petite zone pour coordonner les tirs. | **Fausse cible** : laisse un reflet coloré fragile qui attire brièvement un monstre ordinaire. | Pose un repère visuel local pour une expédition ; montre ses couleurs en retrouvant son propriétaire. |
| 22 · Zombie (`zombie`) | **Combattant d'endurance.** Avance lentement, frappe régulièrement et garde sa cible au contact. | **S'accrocher** : retient brièvement une petite cible avec ses bras, en restant lui-même exposé. | **Second souffle** : recule auprès du joueur et consomme une nourriture fournie pour récupérer lentement sa propre vie. | Pousse un objet tombé hors d'un coin accessible ; lève les bras pour demander une caresse. |
### Peu communs — 22
| Nº · Familier | Rôle et initiative autonome | G · Signature | Variante à apprendre | Vie commune : service et petit geste |
| --- | --- | --- | --- | --- |
| 23 · Tatou (`armadillo`) | **Intercepteur compact.** Suit l'allié protégé et se met en boule sur le trajet d'un petit projectile ; sa garde s'épuise. | **Bouclier roulant** : roule jusqu'au point désigné et y absorbe quelques impacts frontaux, immobile. | **Ricochet** : roule contre une cible puis rebondit vers le joueur ; faible frappe de dégagement. | Inspecte un passage étroit praticable ; se déroule prudemment après le danger. |
| 24 · Abeille (`bee`) | **Harcèlement aérien.** Pique puis se retire ; poison bref limité, sans cumul de doses. | **Pollen** : marque une cible visible d'un nuage qui permet de suivre son déplacement proche. | **Dard précis** : prépare une piqûre unique plus engagée, puis reste brièvement vulnérable au retour. | Replante une récolte désignée avec les graines du joueur ; se pose sur une fleur pendant les pauses. |
| 25 · Dromadaire (`camel`) | **Franchisseur.** Frappe au contact et passe les petits obstacles pour rejoindre les alliés. | **Enjambée** : déplace brièvement un allié consentant par-dessus un obstacle bas, vers un appui visible. | **Rempart haut** : se campe devant un allié et encaisse une part limitée des coups venant de face. | Aide à franchir un fossé court ; s'agenouille près du lieu de repos. |
| 26 · Araignée venimeuse (`cave_spider`) | **Assaillante de recoin.** Passe par les petits espaces et applique un poison bref par morsure. | **Morsure tenace** : reste un instant accrochée à une cible pour délivrer une seule dose, exposée aux coups. | **Nid de fils** : crée une petite zone temporaire qui freine les premiers monstres la traversant. | Inspecte un interstice proche sans casser la paroi ; se recroqueville après une caresse. |
| 27 · Golem de cuivre (`copper_golem`) | **Auxiliaire mécanique.** Reste près des dispositifs du joueur et repousse d'un coup de bras un ennemi approchant. | **Déclencheur** : rejoint puis actionne une commande redstone autorisée et désignée, permettant d'utiliser un piège préparé. | **Parade de cuivre** : intercepte un projectile pour l'allié choisi, même en terrain sans installation. | Trie un lot dans des rangements proches appris ; tapote un coffre une fois sa livraison terminée. |
| 28 · Dauphin (`dolphin`) | **Escorte rapide.** Frappe en passant et revient se placer entre un poursuivant et l'allié escorté. | **Sillage d'évacuation** : entraîne un allié consentant sur un court trajet dégagé ; nage dans l'eau, glissade brève au sol. | **Sauvetage** : rejoint un allié dans l'eau et l'accompagne vers une surface libre proche. | Guide les nageurs entre deux points locaux ; joue avec un objet qu'on lui lance. |
| 29 · Noyé (`drowned`) | **Combattant d'ancrage.** Reste sur son appui, frappe au contact et résiste aux petits déplacements. | **Agrippe** : tient brièvement une cible proche pour empêcher qu'elle s'éloigne, tout en restant attaquable. | **Ancrage partagé** : protège un petit point des poussées et courants pour les alliés qui y prennent position. | Stabilise une courte séance de travail sous l'eau ; examine les objets ramenés du fond. |
| 30 · Poulpe luisant (`glow_squid`) | **Éclaireur de cible.** Éclaire les silhouettes déjà visibles près du duo et tient ses distances. | **Encre lumineuse** : touche une cible d'une marque brillante persistante quelques instants, même si elle se cache à proximité. | **Signal de regroupement** : pose un halo au sol autour de lui qui indique un point sûr choisi, sans soin ni invulnérabilité. | Balise un chantier sombre ; pulse doucement lorsque le joueur revient. |
| 31 · Chèvre (`goat`) | **Brise-position.** Cherche un angle latéral et donne des coups de corne brefs. | **Coup de boutoir** : charge un ennemi pour le déloger de son appui ; préparation visible et collision réelle. | **Contre-charge** : attend une attaque de mêlée annoncée et percute l'assaillant au moment de son entrée. | Repère un chemin de petits appuis ; gratte le sol avant de bondir. |
| 32 · Zombie momifié (`husk`) | **Pression de proximité.** Avance avec constance et frappe les cibles qui restent dans sa portée. | **Poussière** : soulève un écran au sol qui gêne la poursuite des monstres ordinaires et se déplace avec le vent. | **Poigne sèche** : une frappe préparée applique une brève Faiblesse, puis le laisse récupérer. | Signale un abri proche déjà aperçu ; s'époussette à la fin d'une traversée. |
| 33 · Ocelot (`ocelot`) | **Chasseur isolant.** Approche une cible par un flanc dégagé et revient après une griffe. | **Embuscade** : bondit depuis un couvert réel sur une cible qui regarde ailleurs ; engagement risqué. | **Pas de côté** : esquive l'attaque annoncée d'une cible puis riposte si elle reste à portée. | Suit la piste locale d'un animal observé ; s'approche lentement lorsqu'on s'accroupit. |
| 34 · Panda (`panda`) | **Garde de zone proche.** Frappe lentement les ennemis autour de lui, avec une bonne tenue au sol. | **Roulade** : roule dans un passage, écarte de petits ennemis puis doit se relever. | **Assise solide** : s'assoit devant un allié et forme une garde courte, robuste mais immobile. | Aide à pousser un lot tombé vers un point de collecte ; s'assoit pour regarder le joueur manger. |
| 35 · Perroquet (`parrot`) | **Sentinelle sonore.** Signale les préparations des ennemis proches avec un cri dirigé vers leur position. | **Imitation** : place un leurre sonore à un point visible pour détourner un monstre ordinaire. | **Alerte ciblée** : surveille une cible et annonce ses préparations pendant une courte fenêtre. | Reconnaît certains sons de dangers déjà rencontrés ; danse près d'une musique. |
| 36 · Poisson-globe (`pufferfish`) | **Défense de contact.** Se place près d'un allié et pique les ennemis qui le touchent lorsqu'il est gonflé. | **Hérisson** : se gonfle sur place pour fermer un petit passage par des représailles de poison limitées. | **Gonflement brusque** : une expansion unique repousse les petits ennemis proches, puis le laisse dégonflé. | Signale les créatures qui s'approchent dans l'eau ; se gonfle de surprise devant un objet nouveau. |
| 37 · Ours polaire (`polar_bear`) | **Protecteur d'un allié.** Se maintient entre la personne protégée et son dernier agresseur, frappant lourdement à courte portée. | **Couvre-moi** : accompagne la retraite d'un allié en interceptant une quantité limitée de dégâts de mêlée. | **Coup de patte** : large frappe de dégagement devant lui, avec une récupération exposée. | Escorte les trajets dans les reliefs enneigés ; s'allonge tout près du compagnon protégé. |
| 38 · Golem de neige (`snow_golem`) | **Tireur de gêne.** Lance des boules de neige fournies : faibles impacts réguliers et gêne brève des monstres ordinaires. | **Bourrasque neigeuse** : consomme plusieurs boules pour couvrir un passage de tirs successifs. | **Refroidissement** : projette sa neige sur une petite zone pour éteindre les créatures en feu ; pas de soin. | Éteint de petits départs de feu explicitement visés avec le stock fourni ; penche sa tête après le dernier lancer. |
| 39 · Arpenteur (`strider`) | **Escorte thermique.** Reste près du joueur sur terrain chaud et frappe à courte portée sans brûler le sol. | **Passage brûlant** : guide un allié consentant sur une courte surface de lave vers un appui sûr. | **Évacuation** : rejoint le point sûr désigné et aide un allié proche à quitter la zone en feu, même sans lave. | Sécurise une courte traversée au-dessus de lave ; tremblote près du froid puis se détend à la chaleur. |
| 40 · Tortue (`turtle`) | **Garde directionnelle.** Avance lentement devant l'allié protégé et intercepte avec sa carapace une part limitée des attaques frontales. | **Carapace avancée** : maintient un écran mobile frontal pendant une retraite ou une approche. | **Verrou** : se campe dans un passage et gagne en garde au prix de toute mobilité. | Sert de repère stable pour une plongée ; enfouit légèrement ses pattes sur son lieu de repos. |
| 41 · Villageois (`villager`) | **Intendant de combat.** Reste à couvert et présente les fournitures préparées aux alliés qui se rapprochent. | **Abri de fortune** : déploie un bouclier fourni en garde fixe, protégeant brièvement un angle pendant un soin manuel. | **Distribution** : remet à plusieurs alliés proches une portion de nourriture fournie par personne ; les joueurs choisissent de la manger. | Mémorise les offres consultées et aide les échanges de proximité ; acquiesce après une tâche réussie. |
| 42 · Loup (`wolf`) | **Partenaire de mêlée.** Contourne l'ennemi engagé par le joueur, mord et reste attentif aux attaques sur son maître. | **Interception** : bondit sur une menace approchante et interrompt une préparation légère. | **Poursuite** : rejoint rapidement une cible qui s'éloigne puis la frappe, au risque de quitter sa protection. | Suit la piste d'une créature observée ; vient se frotter au joueur après un combat difficile. |
| 43 · Embourbé (`bogged`) | **Archer d'usure.** Tire des flèches fournies depuis un couvert ; se déplace peu entre deux tirs. | **Flèche empoisonnée** : prépare une dose de poison sur une seule flèche ; l'immunité et les budgets d'effets s'appliquent. | **Tir rasant** : projette avec une flèche une petite éclaboussure de boue temporaire qui ralentit un passage. | Reconnaît les appuis dans un marais proche ; secoue ses champignons après la pluie. |
| 44 · Squelette desséché (`parched`) | **Archer d'affaiblissement.** Tire des flèches fournies et privilégie la cible la plus proche de l'allié protégé. | **Trait épuisant** : une flèche préparée inflige une brève Faiblesse à une cible. | **Réserve de tir** : attend derrière l'allié et tire sur son assaillant à la première ouverture, puis se replie. | Observe les approches dégagées autour d'un camp ; se range dans l'ombre auprès du joueur. |
### Rares — 25
| Nº · Familier | Rôle et initiative autonome | G · Signature | Variante à apprendre | Vie commune : service et petit geste |
| --- | --- | --- | --- | --- |
| 45 · Allay (`allay`) | **Secours aérien.** Récupère un objet préparé ou correspondant à la consigne et le rapporte en évitant la mêlée ; fragile et limité à un petit lot. | **Livraison par les airs** : apporte une potion ou un aliment réel à un allié par un trajet aérien court, puis revient. | **Récupération** : va chercher un lot d'objets tombés dans une zone dangereuse désignée et les ramène. | Ramasse les objets du type montré ; danse au retour d'une livraison. |
| 46 · Axolotl (`axolotl`) | **Combattant de secours.** Mord une cible proche puis se retire auprès d'un allié blessé. | **Faire le mort** : tombe immobile, poussant un monstre ordinaire à changer de cible ; reste vulnérable aux attaques de zone. | **Convalescence** : consomme une nourriture fournie et accompagne une récupération lente d'un compagnon allié au repos, interrompue par les coups. | Escorte les plongées et se pose près d'un blessé ; agite ses branchies après une caresse. |
| 47 · Blaze (`blaze`) | **Tireur incendiaire.** Tire une petite flamme annoncée à cadence modérée, puis se décale. | **Salve** : prépare trois petites boules de feu vers une cible, avec des fenêtres d'esquive entre les tirs. | **Rideau de chaleur** : maintient devant lui un cône court qui brûle les ennemis traversant son approche. | Allume un foyer désigné par un ordre de travail explicite ; fait tourner ses bâtons lorsqu'il est content. |
| 48 · Breeze (`breeze`) | **Manipulateur de trajectoires.** Bondit de côté et frappe d'une petite poussée à distance. | **Rafale** : déplace les créatures légères et les nuages mobiles dans la direction visée, sans renouveler leur contenu. | **Déviation** : prépare une rafale courte qui détourne un projectile compatible, une seule fois et sans augmenter ses dégâts. | Déplace des lots au sol et aide un court saut consenti ; tourne sur lui-même après une combinaison réussie. |
| 49 · Dromadaire momifié (`camel_husk`) | **Escorte de percée.** Avance droit au contact et garde son cap malgré les petites poussées. | **Traversée poussiéreuse** : parcourt une ligne courte et laisse derrière lui un écran mobile qui couvre la progression des alliés. | **Extraction** : rejoint un allié consentant puis le guide vers un appui proche hors de la mêlée. | Ouvre un trajet dans les reliefs secs ; secoue une poussière visuelle après le voyage. |
| 50 · Creeper (`creeper`) | **Menace de proximité.** S'approche prudemment et bouscule d'un petit coup de tête ; attend un ordre pour s'amorcer. | **Détonation** : annonce sa mèche, explose au point atteint, puis recule épuisé ; dégâts de zone, terrain protégé dans cette proposition. | **Embuscade** : attend sur un point désigné ; le joueur déclenche sa mèche lorsque des ennemis sont bien placés. | Signale les amorçages proches ; un ordre de démolition distinct pourrait réutiliser son explosion avec droits et coût. Se détend après la fin de sa mèche. |
| 51 · Endermite (`endermite`) | **Perturbatrice de courte portée.** Effectue de petits déplacements instantanés entre deux morsures, avec récupération visible. | **Interversion** : échange sa place avec celle de son propriétaire consentant à très courte portée, si les deux arrivées sont sûres et autorisées. | **Détour** : passe de l'autre côté d'un petit obstacle autorisé pour attaquer une cible, puis revient par son trajet possible. | Inspecte une arrivée de l'autre côté d'une mince paroi autorisée ; se rapproche par de petits bonds quand on l'appelle. |
| 52 · Gardien (`guardian`) | **Tireur à verrouillage.** Suit une cible du regard et lance des impulsions faibles en gardant sa ligne de vue. | **Rayon concentré** : canalise un tir puissant sur une cible ; le rayon visible annonce l'impact, et un obstacle ou un coup peut l'interrompre. | **Balayage** : fait pivoter lentement un rayon moins puissant sur un arc court pour contrôler une approche. | Inspecte une ligne sous l'eau sans révéler les blocs cachés ; replie ses pointes au repos. |
| 53 · Hoglin (`hoglin`) | **Percuteur frontal.** Frappe lourdement avec ses défenses et pousse légèrement la cible qui lui fait face. | **Encornement** : une courte charge soulève un monstre ordinaire et le rejette derrière son point d'impact. | **Barrage** : reste sur une ligne et repousse les premiers ennemis qui tentent de la franchir. | Dégage un chemin parmi des objets au sol sans casser le terrain ; gratte le sol avant le départ. |
| 54 · Cube de magma (`magma_cube`) | **Contrôle des appuis.** Bondit au contact et délivre un bref choc chaud à sa réception. | **Réception brûlante** : saute sur un point visible et produit une petite zone chaude temporaire qui gêne l'occupation de l'appui. | **Cœur chaud** : reste au sol et protège son voisinage par des impulsions courtes, au prix de sa mobilité. | Allume un foyer sur ordre explicite ; rougeoit doucement quand on se repose près de lui. |
| 55 · Champimeuh (`mooshroom`) | **Soutien de repas.** Reste près des alliés et repousse d'un coup de tête les ennemis qui approchent du groupe. | **Soupe commune** : distribue les portions de soupe réellement préparées aux alliés proches ; faim et effets de l'aliment s'appliquent normalement. | **Voile de spores** : forme autour d'elle un nuage mobile qui gêne la vue des monstres ordinaires pendant une pause de soin. | Sert les repas préparés ; laisse tomber quelques spores visuelles en se secouant. |
| 56 · Nautile (`nautilus`) | **Point de respiration.** Suit l'allié protégé et garde une courte impulsion d'eau pour écarter un assaillant. | **Cloche d'air** : maintient une petite poche d'air pour plusieurs bénéficiaires dans l'eau, tant que leur budget le permet. | **Coquille partagée** : crée un écran circulaire de faible capacité autour de lui, utile aussi sur terre. | Prépare une pause de plongée ; rentre un instant dans sa coquille après une caresse. |
| 57 · Phantom (`phantom`) | **Attaquant en piqué.** Décrit une orbite basse, plonge sur une cible puis doit reprendre son élan. | **Piqué** : un long passage annoncé frappe une cible exposée et se termine par une remontée vulnérable. | **Aile de secours** : rejoint un allié en chute et accompagne une descente contrôlée vers un appui accessible. | Escorte les passages en hauteur ; vient se poser à proximité quand le joueur se couche. |
| 58 · Piglin (`piglin`) | **Duelliste adaptable.** Utilise l'arme réelle confiée pour cette mission, mêlée ou arbalète, en privilégiant une cible isolée. | **Feinte armée** : simule une approche puis frappe ou tire lorsque la cible se découvre ; consomme sa munition si nécessaire. | **Repli couvert** : recule vers le joueur en maintenant une menace de tir, ou en parant avec son arme de mêlée. | Assiste les trocs avec les ressources du joueur ; examine un lingot montré sans le voler. |
| 59 · Pillard (`pillager`) | **Arbalétrier de position.** Recharge à couvert et tire des carreaux fournis depuis un angle choisi. | **Couverture** : dépense plusieurs munitions pour battre un passage par des tirs successifs. | **Tir croisé** : rejoint un second angle visible, puis attend le signal pour tirer sur la cible du joueur. | Aide à préparer une position de tir et annonce quand il est prêt ; vérifie son arbalète pendant les pauses. |
| 60 · Poisson d'argent (`silverfish`) | **Assaillant des interstices.** Se faufile par les passages disponibles au ras du sol et mord les pieds d'une cible. | **Accroche** : gêne brièvement le déplacement d'une petite cible en restant au contact, exposé aux coups. | **Sonde de paroi** : détecte une cavité immédiatement derrière une face proche et indique un autre angle d'approche possible. | Inspecte les infestations et cavités locales ; vient se cacher près des bottes du joueur. |
| 61 · Cube de soufre (`sulfur_cube`) | **Contrôle corrosif.** Bondit à courte portée et projette une goutte acide intrinsèque sur sa cible. | **Flaque acide** : couvre un petit appui d'une zone de dégâts temporaires ; aucun bloc ni objet n'est dissous. | **Éclaboussure** : remplace la zone persistante par un cône court de gouttelettes, plus mobile mais moins durable. | Aide à nettoyer l'oxydation d'un cuivre désigné avec la vraie hache et les droits du joueur ; frémit et fait des bulles visuelles au repos. |
| 62 · Lama de marchand (`trader_llama`) | **Garde de convoi.** Reste près de la personne ou de la monture escortée et crache sur ses poursuivants. | **Cercle de garde** : se déplace autour du bénéficiaire et répartit ses crachats entre les menaces qui approchent. | **Rassemblement** : rappelle vers lui les montures possédées et compagnons alliés consentants en désengagement, par des trajets praticables. | Regroupe une caravane ; compte visuellement ses compagnons de route en tournant la tête. |
| 63 · Marchand ambulant (`wandering_trader`) | **Auxiliaire d'évacuation.** Reste mobile entre les couverts et indique une position locale de repli. | **Échappée discrète** : utilise une vraie potion d'invisibilité préparée sur lui-même et mène le duo vers le repli ; le joueur conserve sa visibilité normale. | **Cache de secours** : apporte puis pose un lot réel de fournitures au repli choisi pour le récupérer après la fuite. | Partage les lieux d'approvisionnement déjà rencontrés ; déplie un petit geste de présentation lorsqu'il arrive. |
| 64 · Cheval-zombie (`zombie_horse`) | **Escorte tenace.** Avance au contact, frappe d'une ruade et résiste aux petites poussées pendant son déplacement. | **Route obstinée** : accompagne un allié consentant sur un court trajet au sol en l'aidant à résister au recul ; conserve murs et dangers. | **Ruade de retour** : revient vers son propriétaire et repousse le poursuivant qui lui coupe l'accès. | Escorte les trajets accidentés, de jour comme de nuit ; attend sans bouger au lieu convenu. |
| 65 · Zombie-villageois (`zombie_villager`) | **Secouriste exposé.** Reste derrière le duo, repousse une menace au contact et rejoint un compagnon allié blessé sur ordre. | **Veille** : consomme une nourriture fournie et canalise un soin lent sur un compagnon allié ; les dégâts interrompent. | **Relève** : aide un compagnon K.-O. à récupérer plus vite lors d'un vrai repos hors combat, avec une ration ; aucun retour immédiat en plein combat. | Accompagne une guérison native engagée avec ses ingrédients ; reste assis à côté du convalescent. |
| 66 · Piglin zombifié (`zombified_piglin`) | **Vengeur protecteur.** Garde un allié et riposte au contact contre son dernier agresseur, sans appeler de mobs sauvages. | **Désignation** : marque cet agresseur pour le groupe et se place entre lui et le bénéficiaire. | **Riposte commune** : attend un coup reçu par l'allié puis frappe une fois si l'agresseur est à portée ; pas de multiplication des dégâts alliés. | Alerte d'une colère proche observée ; se calme et baisse son arme au retour du joueur. |
| 67 · Vagabond (`stray`) | **Archer de poursuite.** Tire des flèches fournies et cherche un angle pour gêner les ennemis qui s'éloignent. | **Flèche froide** : une flèche préparée ralentit brièvement une cible, sans immobilisation en chaîne. | **Ligne de givre** : frappe avec une munition un petit passage au sol, dont le givre visuel temporaire gêne les traversées ennemies. | Indique les appuis glissants proches ; laisse un souffle froid discret en attendant. |
| 68 · Vindicateur (`vindicator`) | **Frappeur d'ouverture.** Attaque à la hache au contact, avec une préparation plus lisible qu'un loup. | **Fendre** : une frappe lourde balaie un petit arc et atteint plusieurs ennemis serrés. | **Brise-garde** : vise une garde frontale pour en réduire la capacité, avec un long geste esquivable. | Travaille une coupe de bois désignée avec le vrai outil et les droits du joueur ; plante symboliquement sa hache au repos. |
| 69 · Zoglin (`zoglin`) | **Percuteur de groupe.** Enchaîne de courtes frappes devant lui et peine à tourner vite. | **Charge continue** : traverse un court groupe d'ennemis ordinaires en ligne droite, puis reste essoufflé. | **Retournement** : pivote lourdement et balaie les ennemis proches qui l'ont entouré. | Pousse un lot encombrant au sol sur ordre ; tourne sur place avant de s'allonger. |
### Extraordinaires — 16
| Nº · Familier | Rôle et initiative autonome | G · Signature | Variante à apprendre | Vie commune : service et petit geste |
| --- | --- | --- | --- | --- |
| 70 · Creaking (`creaking`) | **Gardien de regard.** Se déplace et frappe quand sa cible regarde ailleurs ; observé, il s'immobilise et durcit sa garde limitée. | **Enracinement** : même observé, projette des racines temporaires autour de lui qui retiennent brièvement les monstres ordinaires. | **Sentinelle** : reste au point choisi et signale les passages ; reprend la garde de proximité lorsqu'un ennemi arrive. | Veille près d'une entrée et signale une intrusion observable ; incline lentement sa tête vers son propriétaire. |
| 71 · Grand gardien (`elder_guardian`) | **Ancre de groupe.** Tient sa position et lance de lentes impulsions défensives sur les ennemis proches. | **Sanctuaire** : maintient autour de lui une zone de garde partagée, de capacité finie, pendant que les alliés y restent. | **Onde de recul** : libère une impulsion large qui éloigne les petits ennemis ; abandonne sa garde pour l'émettre. | Sert de poste de rassemblement sous l'eau ; replie ses pointes lorsque tous sont revenus. |
| 72 · Enderman (`enderman`) | **Duelliste de placement.** Frappe au contact puis change brièvement d'angle entre des arrivées libres autorisées. | **Extraction** : rejoint un allié consentant et le ramène vers le point de repli préparé, à portée locale. | **Passage** : maintient un court passage entre deux appuis autorisés pour un nombre limité d'alliés consentants. | Pose un bloc fourni à portée de travail et selon les droits acquis ; présente parfois son bloc au joueur. |
| 73 · Évocateur (`evoker`) | **Mage de sol.** Fait surgir un croc faible et annoncé sous une cible proche, en restant derrière le duo. | **Mâchoires** : une ligne de crocs parcourt le sol jusqu'à un obstacle ; forte préparation, dégâts plafonnés par cible. | **Cercle de crocs** : prépare un cercle autour de sa position pour couvrir un allié encerclé, puis reste vulnérable. | Actionne un mécanisme de sol explicitement désigné et compatible, à portée normale ; referme les mains à la fin du rituel. |
| 74 · Ghast (`ghast`) | **Bombardier lent.** Cherche une ligne aérienne dégagée et lance des projectiles lents, annoncés et renvoyables. | **Boule explosive** : prépare un projectile de zone puissant ; la cible a le temps de l'éviter ou de le renvoyer. | **Tir de barrage** : répartit quelques impacts plus faibles dans une zone annoncée pour en chasser les occupants. | Une démolition distante pourrait être un ordre de travail distinct avec droits et coût ; descend près du joueur pour recevoir une caresse. |
| 75 · Ghast joyeux (`happy_ghast`) | **Protecteur aérien.** Se place au-dessus d'un allié et intercepte une quantité limitée d'attaques plongeantes ou de projectiles. | **Hissage** : soulève brièvement un allié consentant vers un appui proche, en restant exposé pendant le transport. | **Palier** : reste sur un point et offre un bref appui suspendu partagé, de capacité finie. | Aide à une mise en place en hauteur ; s'abaisse spontanément lors d'une pause pour se laisser approcher. |
| 76 · Golem de fer (`iron_golem`) | **Défenseur de première ligne.** S'interpose contre une menace proche et frappe lentement au contact. | **Interposition** : traverse quelques pas pour encaisser avec sa vie une attaque destinée à l'allié choisi. | **Uppercut** : prépare une frappe qui soulève une cible ordinaire et la sépare brièvement du groupe. | Aide à organiser un point de garde ou de collecte ; offre une fleur visuelle après une action protectrice. |
| 77 · Piglin barbare (`piglin_brute`) | **Duelliste de parade.** Reste face à sa cible et alterne garde courte et frappe lourde. | **Parade-riposte** : attend un impact frontal dans une fenêtre brève puis répond s'il l'a réellement bloqué. | **Défi** : attire l'attention d'un monstre ordinaire proche et le combat sur place ; les autres ennemis peuvent le contourner. | Garde un coffre ou une entrée sans contrôler les droits d'accès ; s'assoit à côté du joueur en gardant son arme près de lui. |
| 78 · Ravageur (`ravager`) | **Briseur de formation.** Avance lentement et frappe en arc court, avec des préparations très lisibles. | **Bélier** : charge jusqu'au premier obstacle ou ennemi lourd, puis délivre un choc frontal ; récupération longue. | **Piétinement** : reste sur place et produit une onde courte qui écarte les petits ennemis autour de lui. | Dégage une zone d'objets tombés vers un point de travail, sans piétiner les cultures ; souffle doucement au repos. |
| 79 · Shulker (`shulker`) | **Tourelle repliable.** Se fixe sur une surface autorisée, s'ouvre pour un petit tir et referme sa coque entre les attaques. | **Balle ascendante** : tire un projectile guidé destructible qui provoque une Lévitation brève, avec résistance aux contrôles successifs. | **Coque** : renonce au tir pour former une garde fixe de capacité limitée autour de son point d'ancrage. | Marque un appui de chantier et montre son orientation ; ouvre à peine sa coque pour saluer le joueur. |
| 80 · Cheval-squelette (`skeleton_horse`) | **Escorte amphibie.** Frappe puis se déplace avec aisance entre rive et eau peu profonde. | **Traversée spectrale** : guide un allié consentant sur une courte surface d'eau vers une rive, sans permettre l'arrêt au milieu. | **Relais de rive** : attend à un appui accessible et aide à extraire un allié proche de l'eau ou d'une mêlée sur terre. | Accompagne les itinéraires mêlant berges et eau ; fait résonner brièvement ses sabots au retour. |
| 81 · Renifleur (`sniffer`) | **Lecteur du terrain.** Signale les traces et déplacements proches au sol ; repousse du museau une cible qui l'approche. | **Labour défensif** : projette terre et racines visuelles sur un arc court, freinant les approches sans modifier le terrain sauvegardé. | **Flair** : localise brièvement une menace proche grâce à des traces récentes ; distingue position attestée et dernière piste. | Recherche les plantes et sites d'archéologie déjà connus ; se roule dans la végétation après une découverte. |
| 82 · Vex (`vex`) | **Assaillant de traversée.** Effectue de courts passages au contact ; sa traversée autorisée des parois exige une récupération avant de recommencer. | **Percée spectrale** : traverse une mince paroi autorisée et frappe une cible déjà désignée, puis doit ressortir dans un espace libre. | **Retour-éclair** : abandonne l'engagement et revient vers le joueur en frappant une seule cible qui coupe sa trajectoire. | Exécute un geste de construction ou de minage avec les outils, ressources et droits acquis ; tourne autour de la main qui le caresse. |
| 83 · Sorcière (`witch`) | **Alchimiste de terrain.** Reste à couvert et distribue ou lance les potions explicitement préparées, en évitant les alliés. | **Lancer précis** : utilise une vraie potion jetable sur la cible ou le point choisi ; son contenu réel détermine l'effet. | **Brume** : transforme une dose réelle compatible en petite brume mobile, avec quantité finie et attribution conservée. | Prépare une distribution de potions déjà fabriquées ; fait tinter doucement ses flacons au repos. |
| 84 · Wither squelette (`wither_skeleton`) | **Duelliste d'attrition.** Frappe lentement à l'épée et tient sa portée, sans Wither permanent sur chaque coup de base. | **Entaille funèbre** : une attaque annoncée applique une dose limitée de Wither à sa cible. | **Garde funèbre** : renonce à avancer pour couvrir un allié et préparer une riposte contre le premier assaillant à portée. | Aide une tâche de coupe désignée avec le vrai outil ; abaisse son arme et incline la tête après un retour. |
| 85 · Nautile-zombie (`zombie_nautilus`) | **Extracteur ancré.** Reste proche d'un allié et résiste aux courants ; donne un choc de coquille au poursuivant. | **Remontée** : accompagne un allié consentant vers une eau libre plus haute et proche, en restant exposé au trajet. | **Amarre** : forme entre lui et un allié consentant un lien court qui aide à résister aux poussées ; se rompt si l'un quitte sa portée. | Stabilise une récupération d'objets sous l'eau ; s'immobilise contre son propriétaire après un sauvetage. |
### Légendaires — 3
| Nº · Familier | Rôle et initiative autonome | G · Signature | Variante à apprendre | Vie commune : service et petit geste |
| --- | --- | --- | --- | --- |
| 86 · Ender Dragon (`ender_dragon`) | **Contrôle aérien de zone.** Effectue de larges passages avec une frappe de contact mesurée ; tourne difficilement dans un lieu étroit. | **Souffle draconique** : prépare un souffle au sol qui crée une zone dangereuse annoncée, dont les occupants peuvent sortir. | **Ailes protectrices** : descend devant un groupe et souffle pour écarter les petites menaces et certaines brumes ; s'expose en couvrant la retraite. | Observe un trajet déjà reconnu depuis les airs, sans découverte distante gratuite ; vient poser sa tête près du joueur au repos. |
| 87 · Warden (`warden`) | **Sentinelle des vibrations.** Localise les mouvements proches puis frappe lourdement ; une cible immobile peut lui faire perdre sa piste. | **Onde sonique** : charge une attaque dirigée vers une position récemment localisée ; avertissement clair, portée locale et interruption possible. | **Écoute profonde** : s'immobilise et partage les vibrations locales pour préparer une interception, au prix de son offensive. | Signale les pas proches et certains dangers vibrants ; se calme en reconnaissant les déplacements de son propriétaire. |
| 88 · Wither (`wither`) | **Pression répartie.** Ses têtes surveillent plusieurs angles ; ses petits tirs se partagent un seul budget offensif total. | **Trois crânes** : prépare une salve répartie entre plusieurs cibles ou concentrée sur une seule, avec dégâts et Wither bornés. | **Moisson** : canalise un tir unique ; une part des dégâts réellement infligés restaure sa propre vie dans une limite stricte. | Aide à une démolition explicitement préparée, si cette fonction est retenue avec ses droits et coûts ; les trois têtes se tournent vers le joueur à son retour. |
## 4. Distinguer les voisins
| Famille proche | Différence de jeu recherchée |
| --- | --- |
| Chat / loup / renard / ocelot | Le chat défend la proximité ; le loup intervient sur une menace ; le renard récupère et attire ; l'ocelot exploite un angle et se retire. |
| Âne / mule / Allay | L'âne ravitaille un point ; la mule assure des échanges au sol et se défend ; l'Allay livre un petit lot par les airs mais reste fragile. |
| Cheval / dromadaire / cheval-zombie / cheval-squelette | Le cheval perce une ligne ; le dromadaire franchit un obstacle ; le cheval-zombie résiste aux poussées pendant une escorte ; le cheval-squelette relie les rives. |
| Dromadaire / dromadaire momifié | Le premier franchit et couvre à l'arrêt ; le second ouvre une traversée par la poussière et l'extraction. |
| Squelette / embourbé / desséché / vagabond / pillard | Précision sur une cible / usure par poison / réduction temporaire de sa force / gêne de poursuite / tirs successifs sur un passage. Leurs flèches et recharges sont des coûts réels. |
| Slime / cube de magma / cube de soufre | Repositionner et rebondir / occuper un appui par la chaleur / interdire temporairement un petit espace par l'acide. |
| Mouton / tatou / tortue / golem de fer | Amortir un impact / intercepter ponctuellement un projectile / couvrir un angle en avançant / encaisser personnellement pour un allié. |
| Hoglin / zoglin / ravageur | Soulever une cible / traverser un petit groupe / provoquer un choc frontal large au prix d'une longue préparation. |
| Gardien / grand gardien / Warden | Rayon visuel sur une cible / protection de position partagée / lecture des vibrations et onde annoncée. |
| Morue / têtard / nautile / nautile-zombie | Secours d'air individuel / recherche d'issue et petite garde / pause respiratoire de groupe / extraction et ancrage. |
| Saumon / dauphin | Le saumon impose une direction par un jet ; le dauphin escorte un bénéficiaire et revient le chercher. |
| Calmar / poulpe luisant / poisson tropical | Masquer une retraite / conserver une marque sur une cible / coordonner plusieurs cibles visibles ou fournir un reflet-leurre. |
| Vache / champimeuh / villageois / zombie-villageois / sorcière | Retirer des états par du lait / distribuer les soupes / organiser un ravitaillement abrité / soigner lentement un compagnon / employer l'alchimie préparée. |
| Araignée / araignée venimeuse / poisson d'argent / Vex | Utiliser la hauteur / maintenir un contact venimeux / exploiter les interstices au sol / traverser ponctuellement une paroi autorisée. |
| Piglin / piglin zombifié / piglin barbare / vindicateur | Adapter son arme et feinter / répondre à une agression / parer en duel / ouvrir une garde ou un groupe. |
| Lama / lama de marchand | Le premier interrompt une cible par ses crachats ; le second organise la défense mobile d'un convoi. |
| Creeper / Ghast / Wither | Risquer une approche pour une détonation / annoncer un bombardement distant renvoyable / répartir une pression entre plusieurs angles. |
Les légendaires ajoutent une échelle ou une préparation particulière. Ils doivent
perdre des occasions que les petits compagnons saisissent facilement : tourner
dans un passage, rejoindre vite un allié, intervenir sans longue charge. Le même
budget de performance doit garder un commun désirable à progression comparable.
## 5. Exemples de combats à deux ou plusieurs
Les combinaisons viennent des propriétés des actions et des objets. Elles
fonctionnent aussi avec les outils du joueur ; aucun bonus secret n'exige une
paire d'espèces nommée dans le code.
- **Loup et bouclier du joueur** : le joueur tient l'ennemi de face, le loup
intercepte son attaque puis le joueur profite de l'ouverture.
- **Renard et Creeper de deux joueurs** : le renard attire un petit groupe vers
un point choisi ; le second joueur ordonne la détonation au bon moment.
- **Tortue et squelette** : la garde protège une approche frontale ; l'archer
change d'angle pour ne pas tirer dans la garde et utilise ses vraies flèches.
- **Breeze et sorcière** : une rafale déplace une brume préparée en conservant
sa dose, ses bénéficiaires déjà servis et sa durée restante.
- **Grenouille et magma** : la langue déplace un petit ennemi vers un appui
chaud déjà préparé ; sa résistance empêche de répéter indéfiniment l'entrave.
- **Allay et joueur alchimiste** : l'Allay apporte la potion préparée pendant
que le joueur garde son arme en main ; le joueur choisit le moment de la boire.
- **Nautile et dauphin** : le nautile prépare une pause respiratoire ; le dauphin
accompagne l'allié consentant jusqu'à ce point en restant attaquable.
- **Araignée et arc du joueur** : l'araignée ferme une issue par son fil ; le
joueur vise le trajet encore libre. L'ennemi peut détruire ou contourner le fil.
- **Golem de cuivre et installation** : le joueur attire une cible dans un
couloir ; le golem rejoint le bouton autorisé et déclenche le piège préparé.
- **Mouton et construction** : le mouton prépare une réception avec une laine ;
le joueur choisit alors un saut de travail plus engagé.
## 6. Premier prototype et critères de réussite
### FAM-COMBAT-01 — Loup, Slime, tortue
Résultat attendu : une petite rencontre PvE jouable avec engagement, protection,
G, rappel, dégâts sur le compagnon et K.-O. Une technique par espèce suffit
d'abord ; les variantes attendent que le trio soit agréable à diriger.
Scénarios : une route dégagée, un passage étroit, un archer en hauteur et un
duo de monstres. Essais solo puis deux joueurs, à capacités et équipement égaux.
Les personnages Sanctuary débutants à trois cœurs font partie des essais.
À vérifier en partie :
1. Le joueur comprend où est son compagnon, qui il vise et quand il faut le
rappeler. Un ordre impossible explique son refus sans bloquer le compagnon.
2. Le loup crée une interception, le Slime déplace une cible, la tortue couvre
effectivement une retraite. Le changement de compagnon change les décisions.
3. Le joueur doit encore se déplacer, viser et se défendre. Laisser tourner le
compagnon seul ne devient pas la manière optimale de combattre ou de produire.
4. Il existe une occasion identifiable de sauver son compagnon et une occasion
où le compagnon aide le joueur. Le K.-O. laisse une suite jouable à la sortie.
5. Un rappel, un changement d'œuf ou une reconnexion ne restaure pas la santé,
ne réarme pas un pouvoir et ne duplique aucun compagnon ni objet.
6. Les protections et déplacements respectent leurs angles, leur capacité et
les collisions. L'ennemi peut agir entre deux entraves successives.
7. Un combat à deux reste lisible et évite les collisions frustrantes entre alliés.
### FAM-COMBAT-02 — Vérifier les familles difficiles
Ajouter ensuite **squelette, Allay, morue, Creeper et sorcière** pour éprouver
les munitions réelles, livraisons, aquatiques à terre, explosions et consommables.
Tester aussi les 22 communs du Hello World : chaque choix doit offrir une aide
perceptible dans les premières rencontres, sans dépendre d'une ressource avancée.
### FAM-BOND-01 — Apprentissage et mémoire
Après le premier trio : variante de technique, tempérament et quelques souvenirs
attestés. Les noms et tailles acquis continuent d'appartenir au même individu.
Tester les parcours de soin, repos, reconnexion et prestige avant généralisation.
### FAM-CATALOG-07 — Généraliser aux 88
Implémenter par familles de comportements, puis vérifier chaque espèce dans au
moins une situation favorable et une situation défavorable. Inclure les arènes
aquatiques, le relief, les lieux étroits, le jour et la nuit. Mesurer ensuite les
rencontres à plusieurs joueurs et les cas de foule avant de conclure à l'équilibre.
## 7. Décisions restant à chiffrer ou à contractualiser
- Vie, cadence des initiatives, dégâts, garde, portées, durée des entraves,
récupération des signatures et prix des soins. Commencer par des profils de
rôle comparables, puis ajuster les espèces à partir des essais.
- Conditions exactes d'entrée et sortie de combat, récupération après K.-O.,
rappel sous pression et traitement d'un compagnon tombant dans le vide.
Un retour automatique de confort ne doit pas donner de soin ni d'invulnérabilité.
- Obtention des œufs après le familier de départ, apprentissage des variantes,
lien avec les aptitudes achetées et droit de transférer un compagnon.
- Place des anciens passifs utilitaires : une partie devient des gestes du
compagnon ; chaque suppression ou conservation devra être explicitement recensée.
- Différences entre PvE, duel volontaire et autres règles PvP ; attribution des
éliminations et du butin, prévention du farm autonome, charge serveur mesurée.
- Sort exact des explosions et des allumages en mode travail, avec coûts, droits,
aperçu et limites. Le comportement beta.044 reste inchangé en attendant ce contrat.
- **Contrat de migration indispensable avant du code de persistance** : identité
de l'individu, santé, K.-O., techniques, souvenirs, échange de l'œuf, mort,
déconnexion, prestige et données inconnues. Préserver noms, tailles, achats et
identifiants existants ; aucune réécriture d'un monde n'est demandée ici.
## 8. Vérification du document
La livraison de ce ticket est documentaire : catalogue proposé, règles communes,
différences entre espèces et parcours de prototype.
Contrôle local effectué le 15 septembre 2026 par lecture du registre Java et du
Markdown : **88 identifiants uniques, 88/88 conformes, numéros 0188 continus** ;
les groupes contiennent respectivement **22, 22, 25, 16 et 3** espèces, toutes
dans leur rareté actuelle. Chaque fiche a son initiative, sa signature, sa
variante et sa vie commune. Les liens locaux du document sont valides.
Les versions binaires, le manifeste packwiz et les installations de jeu ne sont
pas modifiés par ce ticket. Les commandes Gradle et les essais de gameplay
concernent les futurs tickets de code ; ils ne valident pas une proposition écrite.
+80
View File
@@ -0,0 +1,80 @@
# beta.067 — touche du familier et dragon volant
Branche `codex/familiar-controls-beta067`.
## Contrat
La touche des ordres du familier passe de H à F. La touche G de technique
reste indépendante. Le réglage H hérité est déplacé une seule fois vers F
au démarrage ; les autres touches personnalisées restent conservées. Un
marqueur local `config/sanctuary-familiar-key-v1.txt` permet ensuite de choisir
à nouveau H sans être remappé au démarrage suivant. L'action reste configurable.
Pendant le jeu Sanctuary, ouvrir les ordres avec F ne déclenche plus l'échange
des objets des deux mains. Le raccourci natif garde son comportement dans les
inventaires et hors Sanctuary ; réassigner les ordres libère également F.
Le modèle natif du dragon utilise un axe avant opposé aux modèles vivants
ordinaires. Son historique de vol reçoit cette correction d'orientation ;
la direction physique du familier et des attaques reste inchangée.
Le petit dragon porté utilise le planeur existant : descente bornée à
0,12 bloc par tick, distance de chute accumulée effacée. Le grand dragon porté
(taille existante > 1 200 et < 2 500 millièmes) permet une montée maintenue avec
la touche de saut, bornée à 0,18 bloc par tick. Relâcher reprend la descente
planée. Le seuil colossal de 2 500 reste une monture sur laquelle le joueur
s'assoit ; il ne peut pas être porté sur la tête. Seul le dragon reçoit la
montée lorsqu'il est porté ; les autres petits animaux volants gardent leur
plané et les montures colossales leur pilotage existant.
La physique du joueur reste native avec collisions. Le serveur n'exempte du
contrôle d'immobilité aérienne que la montée réellement soutenue par un grand
dragon porté et la touche de saut reçue. Retrait du familier, immersion,
déconnexion et perte du portage interrompent l'assistance. Les règles
existantes de collision du passager s'appliquent au dragon sur la tête.
Aucun changement du format des œufs, des sauvegardes ou de la génération.
Les indications de montée dans l'infobulle utilisent la touche de saut
configurée, avec libellés FR/EN.
## Vérification
`Familiar067ClientChecks` réussit en 55 secondes sur un monde plat de
développement avec serveur intégré :
- F ouvre réellement les ordres sans changer les objets des deux mains ; H
ne les ouvre plus. Réassigner sur K fonctionne et libère l'échange natif F.
- La position de la tête dans le modèle de dragon soumis au rendu est devant
le corps pour quatre directions cardinales, pas derrière.
- Dragons de tailles 350 et 650 : Maj + clic droit natif, passager synchronisé,
descente bornée côté client, distance de chute effacée des deux côtés ;
Espace ne permet pas de monter avec ces petits.
- Taille 1 500 : montée de plus de huit blocs en maintenant Espace pendant
cent ticks, connexion maintenue, reprise du plané au relâchement, collision
au plafond sans traversée du joueur.
- Taille 3 500 : le joueur monte sur le dragon, puis décolle avec Espace.
Le plané des petits existait déjà : le parcours le confirme sur le dragon.
Le nouveau comportement de montée concerne la catégorie « grand » portée.
La transparence de proximité existante reste conservée.
Journaux : `build/familiar067-client.log` et `build/familiar067-check.log`.
L'attente initiale de tous les chunks du rayon échouait dans le parcours ;
le test attend désormais la partie jouable et utilise sa zone de test locale.
`./gradlew check build assemblePack assembleTestPack` réussit en 2 min 12 s
avec `-x :sanctuary:runGameTest -PsanctuaryClientTests=true
-PsanctuaryQuickTests=true`. Le parcours natif est lancé séparément avec
`-PsanctuaryFamiliar067ClientTests=true -PsanctuaryClientNoVsync=true`.
Les deux MRpacks contiennent les 1 646 classes compilées et leurs ressources
vérifiées. Les différences avec beta.066 se limitent aux cinq classes du
correctif, au mixin enregistré, à l'indication FR/EN et aux versions des mods.
JEI, les textures, les données de génération et les archives beta.066 restent
identiques. Reçu : `build/familiar067-artifact.json`.
[Pack normal](../build/Sanctuary-beta.067.mrpack) ·
[Monde plat rapide](../build/Sanctuary-Test-beta.067.mrpack).
Validation en client natif avec serveur intégré, sans serveur dédié ni essai
à plusieurs clients distants. Aucun canal publié, instance personnelle ou
monde existant modifié.
+46
View File
@@ -0,0 +1,46 @@
# beta.029 — réaction des familiers aux coups
## Contrat
Un clic gauche sur un familier provoque son animation de blessure, son cri natif
et un recul à lopposé de lattaquant. Le recul utilise la physique Minecraft
(force 0,4), avec une petite impulsion vers le haut lorsquil est au sol.
Le suivi et les déplacements autonomes cèdent la place pendant 8 ticks (0,4 s),
puis reprennent. Le mouvement respecte les blocs ; le familier garde son retour
automatique près du propriétaire sil s’éloigne ou se retrouve bloqué.
La voix vient du mob associé à l’œuf, avec son volume, sa catégorie sonore et
la hauteur de sa voix bébé lorsquil dispose dun bébé. Le gardien utilise son
cri terrestre ou aquatique selon l’état du familier. Les espèces silencieuses
et le drapeau natif Silent restent silencieux. Le son est envoyé par le serveur
aux joueurs proches. Le modèle utilisé pour lire la voix nest jamais ajouté
au monde et ne reçoit aucun tick ni comportement autonome.
Le délai de lanimation existante (10 ticks) évite de cumuler les impulsions et
les cris à chaque clic. Aucun dégât, usure, enchantement offensif, butin, XP ou
cible hostile nest créé par ce geste. Les protections entre membres dune même
pile restent applicables, y compris au familier porté. La caresse reste au clic
droit, avec ses cœurs. Aucune modification de sauvegarde ni migration.
## Vérifications
**38 tests serveur natifs réussis**, dont 6 nouveaux scénarios : paquets sonores
des 88 types d’œufs, voix de bébé, variantes du
gardien, Silent, recul dans les quatre directions, délai anti-cumul, mouvement
réel au sol/en vol/du poisson, collisions avec les murs, reprise du suivi,
invulnérabilité, arme intacte et protections du portage.
`./gradlew check build assemblePack -PsanctuaryFocusedTests=carry,familiar,movement,familiarhit`
réussit en 3 min 42 s. Les paquets sonores réels sont capturés sur une connexion
Minecraft de test ; le mouvement passe par les ticks communs et physiques natifs.
Les suites familiers, mouvements et piles de joueurs passent ensemble.
L’écoute et lobservation graphique restent à confirmer : session Mac verrouillée.
Export local : [Sanctuary-beta.029.mrpack](../build/Sanctuary-beta.029.mrpack).
Client et serveur beta.029 ensemble. Versions, ZIP, 1 256 classes compilées et
JAR imbriqués vérifiés. Seuls FamiliarEntity et les accès aux propriétés vocales
natives changent ; la carte, le portage, le plongeon et JEI conservent leur code.
Lexport beta.028 reste intact. Aucun déploiement effectué.
SHA-256 MRpack : `b545dac3970b971f96cd56e6539451edfc265ec93c206029a97571b304c2d885`.
Reçu : `build/familiar029-artifact.json` ; vérificateur : `build/verify-familiar029.py`.
+128
View File
@@ -0,0 +1,128 @@
# beta.020 — interactions, lecture des œufs et plongeon
Ticket du 13 septembre 2026, branche `codex/familiar-interactions-beta020`.
**Livraison locale beta.020 vérifiée — 13 septembre 2026.**
## Demande retenue
- Maj + clic droit sur un joueur : monter sur sa tête. Sur un animal : le porter,
puis refaire le geste pour le déposer. Le porteur est ralenti et les coups entre
porteur et passager sont interdits. Une seule place, sans empilement dans beta.020 ; les piles sont ajoutées par
[beta.027](player-stacks-beta027.md).
- Caresser le familier ne produit que des cœurs. Le clic gauche provoque une
réaction visuelle de coup sans retirer de vie. Préférer son modèle bébé natif.
[beta.029](familiar-hit-feedback-beta029.md) ajoute le cri de lespèce et le recul.
- Nommer l’œuf à lenclume ou utiliser une étiquette sur son propre familier.
Le nom appartient à l’œuf ; déséquiper l’œuf fait disparaître le compagnon.
- Nom de l’œuf coloré par rareté : blanc, jaune, vert, bleu, violet.
Linfobulle présente les noms cryptiques du passif et de lactif. Laptitude
**Étude des familiers**, à quatre niveaux, révèle les explications.
- Retirer l’écran Familier des aptitudes et le bouton dactivation du pouvoir.
Les réglages et le carnet rejoignent Habitant. Les aides alliées sont acceptées
par défaut ; leur réglage reste personnel.
- Saut en sprint, puis touche Sallonger en vol : plongeon vers lavant, une
impulsion par saut. Larrivée au sol ou dans leau termine cette posture.
[beta.028](dive-until-collision-beta028.md) retire ensuite la limite de durée
et ajoute explicitement les collisions au plafond.
- Taille aléatoire propre à chaque œuf, avec des familiers minuscules ou géants.
## Contrat de données
Les pièces jointes existantes, leurs schémas et les identifiants des œufs restent
stables. Un nouveau reçu indépendant `sanctuary:companion_study`, schéma 1,
conserve lachat de laptitude après mort et prestige. Absent : aptitude verrouillée.
Invalide ou version inconnue : reçu conservé, achat et révélation refusés.
Les choix daide déjà enregistrés sont conservés ; labsence d’état utilise
le nouveau défaut accepté. Les noms utilisent le composant natif `CUSTOM_NAME`.
Le portage et le plongeon sont temporaires. Aucun animal nest converti en objet,
dupliqué ou remplacé : son UUID, ses équipements et ses données restent ceux de
lentité native. Les animaux portés sont sauvegardés comme entités indépendantes,
sans enregistrer le portage dans les données dun joueur. Une déconnexion, mort
ou transition de dimension termine le portage. Aucun monde personnel nest
modifié par les outils de développement.
Client et serveur beta.020 doivent être installés ensemble. Cette livraison
conserve les prix et recharges des 88 pouvoirs et les règles dobtention des œufs.
Le premier équipement dun œuf sans taille ajoute au composant natif
`minecraft:custom_data` une entrée `sanctuary:familiar_size`, composée de
`schema: 1` et `per_mille: 120..6000`. Les autres données de lobjet restent
intactes. Les anciens œufs reçoivent ce trait lorsquils sont équipés, sans
parcours des mondes ni conversion des inventaires existants. Un œuf équipé
occupe une case unique ; les œufs dune pile sont individualisés lors de leur
équipement. Une copie de l’œuf déjà individualisé garde sa taille.
Le trait voyage avec lobjet lors dun don, dun renommage, dune mort ou dun
prestige, et survit à la sauvegarde/reconnexion. Une entrée inconnue ou invalide
est conservée telle quelle ; le rendu utilise alors la taille ordinaire.
## Pouvoirs de perception et téléportations
Les détections de blocs connus, le sonar, les circuits et les marques restent
visibles derrière les parois. Les téléportations Endermite / Enderman peuvent
traverser les murs ; le point darrivée reste libre et soutenu, dans la portée
et les zones autorisées. Le freinage dune chute efface sa distance accumulée :
un atterrissage après le ralentissement ne réapplique pas les dégâts antérieurs.
Une nouvelle chute après la fin du pouvoir accumule à nouveau sa propre distance.
## Gestes dans le jeu
Maj + clic droit prend un animal ou monte sur un joueur. Un nouveau Maj + clic
droit dépose le passager même avec la main vide, sans devoir viser au-dessus de
sa propre tête. Le joueur porté relâche Maj puis appuie de nouveau pour descendre.
Le porteur se déplace 25 % moins vite ; la réduction disparaît dès quil est libre.
Les chats, loups et perroquets utilisent une pose assise ; les autres animaux
reposent au-dessus de la tête. Lespace occupé est vérifié avant de les porter.
Les noms utilisent l’œuf et l’étiquette natifs. Les modèles bébés sont choisis
lorsquun modèle bébé existe dans Minecraft ; aucune intelligence hostile nest
appliquée au familier. La caresse garde uniquement les cœurs. Le coup léger est
une animation, sans dégâts, enchantement offensif ni usure de larme.
Linfobulle native affiche la rareté et deux noms deffets. **Progression → Étude
des familiers** coûte 4 niveaux et ajoute les explications aux infobulles. Aucun
mod Item Description supplémentaire nest nécessaire pour cet affichage.
**Habitant** contient le choix daide alliée et le carnet. **G** reste la touche
reconfigurable du pouvoir ; aucun bouton dactivation dans ces menus.
## Tailles des familiers
La taille est tirée par le serveur une seule fois, indépendamment de lespèce et
de la rareté. Elle multiplie le modèle réduit du familier, bébé lorsque possible :
| Fréquence | Multiplicateur visuel |
| --- | --- |
| 90 % | ×0,65 à ×1,50 |
| 5 % | ×0,12 à ×0,35 |
| 5 % | ×2,50 à ×6,00 |
Linfobulle indique Minuscule, Petit, Ordinaire, Grand ou Colossal après le
premier équipement. Le nom affiché suit la hauteur du modèle et les volants
géants sestompent en fonction de leur encombrement visuel. Les pouvoirs,
la vitesse et le corps utilisé pour la navigation restent identiques : la
taille visuelle ne bloque pas le compagnon dans une porte et ne modifie pas
l’équilibrage de son œuf. La zone dinteraction reste celle du familier mobile.
## Vérifications de livraison
- `./gradlew check build assemblePack -PsanctuaryFocusedTests=familiar,companions,accessories,movement,progression,cycle,mining,building,inventory,inventoryflow,sorting,tutorial` : contrôles purs et **104 tests serveur réussis**.
- Portage joueur/animal, position sur la tête, coups interdits, ralentissement, sauvegarde native sans duplication ni véhicule-joueur enregistré, dépose et conflit avec double-Maj.
- Achat de l’Étude facturé une fois, sauvegarde/rechargement, mort et prestige réel ; données invalides conservées et refus historique des aides maintenu.
- Taille tirée une fois, distribution bornée, données étrangères conservées, sauvegarde et transfert de l’œuf à un autre habitant sans changement de taille.
- Plongeon autorisé après départ en sprint, sans deuxième impulsion en vol ; sortie dans leau sans déverrouiller Nage. Poule freinant une chute déjà accumulée, nouvelle chute native ; sonar derrière un mur et téléportation au travers vers un espace libre.
- Deux parcours client natifs dans de nouveaux mondes de développement, graine 42 : achat et infobulles, Habitant aux échelles 2/3/4, Maj + clic droit réel pour porter/déposer, chat bébé assis, plongeon avec une touche reconfigurée et rendu horizontal, synchronisation de taille et captures des extrêmes.
- Les 88 modèles sont extraits à deux instants, puis aux multiplicateurs ×0,12 et ×6. Éclairage, fondu du corps et des yeux des volants, activation réelle avec G, recharge commune et échange de villageois restent validés.
- Le MRpack et les JAR sont contrôlés : CRC, versions exactes, identité du mod embarqué et de Demeure imbriqué, FR/EN, 88 passifs/actifs et leurs noms cryptiques, absence de code de test, sources identiques à celles du build. Les anciens PNG et lexport beta.019 restent inchangés.
Ces essais ne remplacent pas un équilibrage collectif des 88 paires de pouvoirs.
Le rendu et les gestes de portage ont été observés sur un client intégré ; les
interactions entre deux joueurs sont couvertes côté serveur, sans essai visuel
à deux clients. Lobtention des œufs, les rangs IIII et Anomaly restent à définir.
Aucune installation personnelle ni aucun canal de mise à jour na été modifié.
Export : [Sanctuary-beta.020.mrpack](../build/Sanctuary-beta.020.mrpack).
Reçu : `build/familiar020-artifact.json` ; captures : `build/familiar020-evidence/`.
SHA-256 MRpack : `98d1cdb8aa5b7b5249a4e23eabea963aff394cb416d8d78f7bc1bf49450c9e78`.
SHA-256 JAR : `3ec020eb381653f4cc53dad719338db9ec534c83f1c1a8552f0c77d42d3e739b`.
+55
View File
@@ -0,0 +1,55 @@
# beta.069 — retour des ordres du familier sur H
Branche `codex/familiar-orders-h-beta069`.
Les ordres du familier reviennent sur **H**. **F** conserve l’échange natif des
objets entre les mains ; **G** reste la technique du familier. Les touches
restent configurables dans les options et les libellés FR/EN existants suivent
le raccourci assigné.
Le remplacement introduit en beta.067/.068 est annulé au premier démarrage :
une ancienne affectation F des ordres devient H. Les autres touches
personnalisées sont conservées. Le nouveau marqueur local
`config/sanctuary-familiar-key-v2.txt` rend cette opération unique, même si le
marqueur v1 existe déjà. Les modifications manuelles ultérieures ne sont pas
réécrites. Le filtrage qui consommait les actions du raccourci d’échange des
mains est supprimé. Aucun changement du serveur ou des sauvegardes.
## Vérifications natives
Le parcours `Familiar067ClientChecks`, actualisé pour le retour sur H, réussit
en **1 min 7 s** : H ouvre les ordres sans échanger les mains ; F échange un
diamant et un lingot dor dans les deux sens sans ouvrir de menu ; G conserve
son affectation par défaut ; une personnalisation des ordres sur K fonctionne.
Le reste de ce parcours existant (orientation, plané et vol du dragon) passe
également. Le test utilise un monde plat de développement et un serveur intégré.
Après le parcours, les options enregistrées sont bien H/F/G et le marqueur v2
contient beta.069 (`build/familiar069-controls.json`). Le lanceur réinitialise
la configuration de test ; ce parcours ne prétend donc pas valider la mise à
jour complète dune ancienne installation. La conversion conditionnelle F→H
et le garde par marqueur ont été vérifiés dans le code ; la configuration
personnelle de Prism na pas été modifiée.
Journal : `build/familiar069-client.log`. Le sélecteur de ce parcours reste
`-PsanctuaryFamiliar067ClientTests=true`, avec `-PsanctuaryClientTests=true
-PsanctuaryQuickTests=true -PsanctuaryClientNoVsync=true`.
## Livraison locale
`check build assemblePack assembleTestPack` réussi en **2 min 13 s**, 122 tâches,
avec exclusion du serveur
dédié (`-x :sanctuary:runGameTest`) et les profils client/test rapide.
Voir `build/familiar069-check.log`. Aucun serveur dédié ni acceptation dEULA.
Les 1 647 classes du mod correspondent à la compilation. Seule la classe
`FamiliarClient` change par rapport à beta.068 ; textures, traductions,
chargement, dragon et JEI restent identiques. Les archives beta.068 gardent
leurs empreintes. Reçu : `build/familiar069-artifact.json`.
- [Pack normal](../build/Sanctuary-beta.069.mrpack), 5726225 octets.
SHA-256 : `1c923452ff4d5d186309390fac3306b8e05162143c852619b7519741002aa165`.
- [Monde plat rapide](../build/Sanctuary-Test-beta.069.mrpack), 5745158 octets.
SHA-256 : `bed499fa29f4247a9e321207df503b3147b8b4fc8c8541d817cdfe2a2db9a945`.
Aucune instance personnelle ni canal public modifié.
+169
View File
@@ -0,0 +1,169 @@
# beta.071 — personnalité et engagement des familiers
Branche `codex/familiar-personality-beta071`.
## Comportement
Chaque œuf individualisé possède une personnalité de combat, visible dans
son infobulle et sa fiche de familier. Les ordres restent sur H, la technique
sur G et l’échange des mains sur F.
| Personnalité | Réaction spontanée | Poursuite | Cadence dinitiative |
| --- | --- | --- | --- |
| Agressif | Engage les monstres proches, accompagne les attaques et riposte | ×1,55 | délai ×0,90 |
| Protecteur | Accompagne les attaques et défend le joueur, lallié protégé et lui-même | ×1,45 | délai habituel |
| Passif | Riposte seulement lorsquil est frappé | ×1,35 | délai ×1,05 |
| Pacifiste | S’éloigne du danger, sans attaque automatique | ×1,35 sur ordre | délai habituel |
**Tous obéissent à un ordre explicite dattaque**, y compris le pacifiste.
Une autre menace ne remplace pas une cible désignée tant quelle reste valide.
Un Enderman ou un Piglin zombifié non engagé est laissé tranquille ; les
familiers et les joueurs ne déclenchent pas cette recherche de proximité. Le PvP conserve ses règles et les
duels leur consentement. Suivre suspend les réactions automatiques cinq
secondes ; Rappeler ou le mode travail interrompent lengagement spontané.
Les vitesses sont des multiplicateurs de navigation : la poursuite utilisait
auparavant ×1,15. Lapproche gagne donc environ 17 à 35 % selon le caractère,
sans changer la vitesse de promenade, celle des montures ni les dégâts.
Les attaques à distance gardent leur distance utile. Les feintes au contact
cessent suffisamment tôt pour entrer réellement à portée. Les préparations
dattaque restent lisibles : leurs durées ne sont pas raccourcies.
Les espèces de soutien conservent leurs techniques signature. Un villageois
agressif, ou un soutien explicitement envoyé attaquer, dispose dun coup au
contact (2 dégâts de base, préparation 0,25 s, intervalle 2 s), sans exiger un
bouclier dans linventaire du joueur. Les techniques offensives natives des
espèces restent utilisées.
## Individus et tendances
Le tirage utilise lUUID déjà enregistré et lidentifiant despèce. Sa fonction
et son sel sont figés dans `FamiliarPersonality`. Il ne dépend ni du nom, ni
de la taille, ni de lXP, ni du propriétaire ou de la reconnexion. Les anciens
œufs identifiés reçoivent donc un caractère stable sans conversion de fichier.
Un œuf sans identité le découvre à sa première individualisation habituelle.
| Tendance despèce | Agressif | Protecteur | Passif | Pacifiste |
| --- | --- | --- | --- | --- |
| Vindicateur et espèces farouches listées dans le code | 70 % | 20 % | 7 % | 3 % |
| Villageois et espèces paisibles listées dans le code | 5 % | 15 % | 25 % | 55 % |
| Autres espèces et futurs profils sans règle spécifique | 25 % | 40 % | 25 % | 10 % |
Toutes gardent des exceptions. Le tempérament historique hors combat
(curieux, calme, joueur), les souvenirs, les identifiants, les 88 profils et
les schémas de sauvegarde restent intacts. Changer ces seuils ultérieurement
changerait le caractère d’œufs existants : cela demanderait un contrat de
migration, pas une simple retouche d’équilibrage.
## Araignées
Laraignée et laraignée venimeuse utilisent la navigation descalade native.
En monture colossale, avancer contre une paroi les fait grimper à environ
quatre blocs par seconde. Relâcher ou s’écarter permet de redescendre. La
vérification porte sur le corps de laraignée : un plafond touché par le joueur
ne déclenche pas une ascension. Les collisions du corps et de la tête du
cavalier restent actives. Un espace vide nautorise aucune montée.
L’éligibilité à la monte reste celle des familiers colossaux ; les petits
familiers se portent selon les règles existantes.
## Effets des montures natives
Audit du code de Minecraft **26.3-pre-2** : `AbstractHorse` et ses variantes,
`Camel`/`CamelHusk`, `Pig`, `Strider`, `HappyGhast` et
`AbstractNautilus`/`Nautilus`/`ZombieNautilus`. Les sources de comparaison
sont extraites du JAR utilisé par le build dans `build/native071-source/`.
| Espèces natives pouvant recevoir un cavalier | Effet transmis au cavalier | Trait de déplacement |
| --- | --- | --- |
| Cheval, âne, mule, cheval squelette, cheval zombie | Aucun effet d’état natif | Déplacement et saut terrestres |
| Lama, lama de marchand | Aucun | Montables, mais pas pilotables en vanilla |
| Dromadaire, dromadaire momifié | Aucun | Déplacement terrestre ; dash natif distinct dun effet d’état |
| Cochon | Aucun | Direction à la carotte sur bâton en vanilla |
| Strider | Aucun bonus de résistance au feu au joueur | Appui à la surface de la lave |
| Ghast joyeux | Aucun | Vol |
| Nautilus, Nautilus zombie | **Souffle du Nautilus** | Nage et dash natifs |
Le Souffle du Nautilus est ajouté au moment de monter et entretenu tant que
le joueur reste sur son Nautilus colossal. Il utilise leffet Minecraft
original : durée de 60 ticks, renouvellement toutes les 40 ticks, niveau zéro.
Lair restant est figé sous leau, sans être rempli comme avec une potion.
Après la descente, leffet expire naturellement sous trois secondes ; il
nest pas supprimé brutalement au risque deffacer une autre source.
Il fonctionne pour les deux espèces, sur toute la plage colossale existante
(2 500 à 6 000 ‰, y compris les plus grands « titans »), sans achat de
technique ou condition de personnalité. Porter simplement l’œuf ou le petit
familier sur sa tête ne donne pas cet effet de **cavalier**.
Le Strider retrouve le support de collision de lave et la remontée natifs,
avec une infobulle dédiée. Il maintient son cavalier au-dessus de la surface ;
ce nest pas une immunité personnelle à la lave après avoir sauté du Strider.
Les autres espèces nappliquent pas de potion native à leur cavalier : aucune
na été inventée. Les commandes Sanctuary de ces montures restent communes,
comme demandé lors de leur introduction. Cet audit des traits ne porte pas
les selles, harnais, coffres d’équidés, sièges supplémentaires, charges de saut
ou commandes de dash propres aux interfaces natives. Les pouvoirs familiers
existants restent disponibles selon leurs règles.
## Coût et validation
La recherche agressive est locale, dans les entités déjà chargées à huit
blocs du propriétaire, une fois par seconde, décalée entre familiers. Aucun
chargement de chunk. La navigation reste limitée à une demande de chemin
par dix ticks. Les décisions et les dégâts font autorité côté serveur.
Le parcours `Familiar071ClientChecks` réussit en **2 min 23 s** dans un
nouveau monde plat de développement, avec le client et son serveur intégré :
- 352 000 UUID répartis entre les 88 espèces ; quatre caractères possibles,
tendances villageois/vindicateur, stabilité après changement dXP et de souvenirs.
- Quatre personnalités de loups : réactions aux événements, ordre explicite,
navigation jusqu’à la cible et dégâts réels. Verrouillage de combat maintenu
même pour un familier qui refuse lengagement spontané.
- Villageois agressif : initiative spontanée et dégâts sans bouclier ; la cible
manuelle garde sa priorité. Fiche FR/EN et nom du familier inspectés.
- Araignée et araignée venimeuse colossales : touches natives, ascension du mur,
collision du cavalier avec le plafond et absence de montée dans lespace vide.
- Strider colossal : déplacement avec les touches natives à la surface dun
bassin de lave, cavalier hors de la lave et sans potion de résistance au feu.
- Nautilus et Nautilus zombie : tailles 2 500 et 6 000 ‰, cavalier effectivement
immergé, air figé à 40 pendant 90 ticks, renouvellement de leffet, expiration
et reprise de la consommation après la descente. Équiper l’œuf seul ne le donne pas.
- Fermeture puis réouverture réelle du monde : même UUID et même personnalité.
Les captures sont dans `build/familiar071-evidence/`, le journal dans
`build/familiar071-client.log`. La matrice de personnalité couvre les 88
profils ; elle ne constitue pas un nouveau playtest de toutes leurs techniques.
Pas de validation à deux clients distants ou sur serveur dédié dans cette passe.
La construction de la distribution est effectuée dans
`build/familiar071-workspace/` : les sources de la release beta.070, puis les
changements ciblés de la 71. Cette copie évite de compiler les fichiers de
statues de la beta.072 ajoutés simultanément dans le dossier partagé.
`build/familiar071-source-snapshot.json` fixe les empreintes de cette copie.
Les sources courantes du familier conservent les mêmes changements.
`check build assemblePack assembleTestPack` réussit en **5 min 50 s**,
124 tâches (108 exécutées, 16 à jour), dans cette copie isolée. Le serveur
dédié `:sanctuary:runGameTest` reste exclu conformément au refus daccepter
son EULA ; le parcours natif utilise uniquement le serveur intégré du client.
Les deux exports MRpack sont vérifiés : version exacte, dépendances figées,
JAR comparé aux **1 651 classes compilées** et aux ressources traitées,
égalité normal/Test sauf module de test, absence de classes de test dans le
mod livré. Seuls les neuf fichiers Java prévus et douze libellés par langue
changent par rapport à beta.070 ; les schémas, le catalogue, JEI, le code de
Demeure et les 150 fichiers du resource pack restent identiques. Le manifeste
de Demeure suit seulement le nouveau numéro du pack.
Reçu et empreintes : `build/familiar071-artifact.json`.
- [Pack normal](../build/Sanctuary-beta.071.mrpack), 9 462 323 octets.
SHA-256 : `1ab36663fe24313597c5328170a3eb2ca2e33bfdfc4c6fbc85c1f5c03102628c`.
- [Monde plat rapide](../build/Sanctuary-Test-beta.071.mrpack), 9 481 258 octets.
SHA-256 : `06309f4cd382053fb42d80c3f131152932e07523ace799c50d1d899026029a92`.
Le resource pack demeure beta.070, actif par défaut et désactivable. Aucun
monde personnel, aucune instance Prism et aucun canal public ne sont modifiés.
+67
View File
@@ -0,0 +1,67 @@
# beta.079 — ordres et défense des familiers en solo
Branche `codex/familiar-solo-beta079`, Minecraft 26.3-pre-2, textures beta.070.
Signalement : les familiers paraissent passifs en solo ; H ouvre le menu,
mais les ordres ne semblent pas exécutés. Espèces citées : slime, loup, poule.
## Causes reproduites
Louverture du menu H envoie `refresh`. Cette lecture consommait la même
limite de fréquence que les ordres : un clic immédiatement après louverture
était rejeté sans message. La mise à jour possède désormais sa propre limite,
sans affaiblir celle des actions. Le test natif échouait sur Rappeler avant
cette correction et réussit ce passage après séparation des requêtes.
Suivre suspendait pendant cinq secondes toutes les réactions automatiques,
y compris la défense du joueur attaqué. Le délai ne concerne désormais que
les initiatives spontanées. Une personnalité qui défend son propriétaire
ou riposte peut réagir immédiatement aux dégâts. Le pacifiste conserve son
comportement ; lordre explicite de protection reste prioritaire.
Les ordres du menu confirment leur réception : suivi, attaque, protection
ou rappel. Une attaque sans familier disponible, sur une cible refusée ou
avec un familier porté/monté donne une explication au lieu dune confirmation
dattaque inexécutable. FR/EN disponibles. H bref et H maintenu sont conservés.
Le mode utilitaire continue de suspendre les attaques autonomes. La santé,
les UUID, les personnalités, les capacités et les sauvegardes sont conservés.
Les nouveaux compteurs de requêtes sont temporaires côté serveur ; aucune
migration ni modification dun monde personnel.
## Vérification
Deux reproductions natives avant correction : rejet de Rappeler juste après
louverture de H ; absence de défense dun loup passif juste après Suivre.
Le scénario utilise un nouveau monde plat solo de développement, sans
commandes, sans droits opérateur et sans achat du Lien actif.
`Solo079ClientChecks` réussit en **1 min 53 s** : rappel immédiatement après
louverture de H, retour au suivi, garde du joueur, attaques ordonnées et
défense immédiate après Suivre pour le loup, le slime et la poule. Les tests
attendent le déplacement et la frappe, contrôlent la baisse de santé et
identifient le familier comme auteur du dégât, pour exclure le soleil ou les
autres dégâts environnementaux. Les confirmations sont reçues côté client.
`Autonomy074ClientChecks` réussit en **1 min 58 s** : quatre personnalités,
garde, vue et obstacles, cibles neutres, priorité des ordres, permissions,
mode utilitaire, délai avant les poursuites spontanées, H bref/maintenu,
touche reconfigurée et échange des mains avec F. Fiches FR/EN vérifiées.
Journaux : `build/solo079-client-final.log`, `build/solo079-regression.log`.
Captures : `build/solo079-evidence/`.
`check build assemblePack assembleTestPack` réussit en **2 min 21 s**,
124 tâches, avec `-x :sanctuary:runGameTest` conformément au refus du serveur
dédié. Les 1 693 classes du JAR correspondent au build ; seules
`FamiliarBattle` et son état temporaire changent par rapport à beta.078.
Deux nouveaux libellés par langue, ressources et textures inchangées.
Sources vérifiées, même JAR embarqué dans les deux packs ; archives beta.078
conservées à lidentique. Reçu : `build/solo079-artifact.json`.
Aucun déploiement personnel ; les essais utilisent le serveur intégré.
## Archives
- [Sanctuary-beta.079.mrpack](../build/Sanctuary-beta.079.mrpack).
SHA-256 : `7df042d720e2511310387183efcc432cafec4786623e530e5552fd2ba36ca7db`.
- [Sanctuary-Test-beta.079.mrpack](../build/Sanctuary-Test-beta.079.mrpack).
SHA-256 : `0ca193b2918c7d650503c2ce2fa97d2b3c626fee5ddd99df0cf51ea05a2bb82e`.
+81
View File
@@ -0,0 +1,81 @@
# beta.062 — soleil et chapeaux des familiers
Branche `codex/familiar-sunlight-beta062`.
Le familier reprend la sensibilité solaire du type natif de son œuf : tag
`minecraft:burn_in_daylight`, avec respect de l'immunité native au feu. La
vérification utilise le moteur Minecraft 26.3-pre-2 : lumière, ciel dégagé,
eau/pluie/neige poudreuse et attribut environnemental `MONSTERS_BURN`.
Les bébés familiers concernés brûlent aussi. Les autres espèces conservent
leur comportement actuel.
Tout objet équipé dans l'emplacement de tête Sanctuary protège des nouvelles
inflammations solaires, sur un mob ordinaire comme sur un familier. Maj + clic
droit avec un objet l'équipe ; Maj + clic droit à main vide le récupère.
L'armure de tête native conserve sa protection et son usure habituelles quand
aucun chapeau Sanctuary n'est équipé. Un chapeau ne rend pas résistant au feu :
une flamme déjà allumée termine sa durée native, ou s'éteint dans l'eau.
Les familiers sensibles perdent leur santé de combat en brûlant, jusqu'au K.-O.
habituel, sans détruire l'œuf. Leur feu reste dangereux pendant un duel ; les
attaques extérieures au duel restent exclues. Les flammes suivent la taille
visible du compagnon. Une indication FR/EN sur les œufs concernés explique le
besoin d'un chapeau, sans achat préalable d'une aptitude.
Aucun identifiant ni format de sauvegarde ne change. Le chapeau utilise
l'équipement existant : il est rendu au sol quand le familier disparaît et
n'est pas stocké dans son œuf. Aucun monde existant ni canal n'est modifié.
## Vérifications
`Sunlight062ClientChecks` passe dans le client natif 26.3-pre-2, sur un monde
plat de développement neuf :
- 88 œufs exposés au moteur solaire natif : zombies, villageois zombies,
noyés, chevaux zombies, nautiles zombies, squelettes, vagabonds, embourbés
et phantoms brûlent ; les autres conservent leur immunité, dont le Wither
squelette naturellement résistant au feu ;
- mob ordinaire avec pierre, diamant, bâton et torche en chapeau, protection
et usure du casque natif conservées, reprise du feu après retrait ;
- vrai paquet Maj + clic droit pour équiper puis retirer un diamant de la
tête du familier, synchronisation de l'objet sur son modèle côté client ;
- santé persistée qui baisse sur les vrais ticks de feu, feu déjà allumé qui
expire sous un chapeau, absence de nouvelle inflammation ;
- toit, nuit, pluie et immersion ; l'eau éteint aussi les flammes existantes ;
- K.-O. déclenché par un tick natif de brûlure, identité et œuf conservés ;
- brûlure et fin normale d'un duel au K.-O., refus des coups directs d'un
joueur extérieur et des autres dégâts environnementaux pendant le duel ;
- flammes synchronisées aux dimensions visibles du familier bébé, capture
inspectée dans `build/sun062-evidence/sunburn.png`, indication FR/EN.
Journal `build/sun062-client.log` : **55 s**, marqueurs
`SUNLIGHT062_SPECIES_PASS` et `SUNLIGHT062_PASS`. La première tentative de
lancement a été arrêtée au blocage OpenGL de synchronisation verticale ;
le parcours réussi utilise `-PsanctuaryClientNoVsync=true` et le réglage VSync
uniquement dans le dossier du client de développement.
L'essai de duel utilise deux entités serveur avec une connexion simulée pour
la seconde ; aucun essai avec deux clients humains n'est revendiqué. La
capture inspectée est celle du zombie bébé ; le rendu individuel des huit
autres espèces sensibles n'a pas été revu visuellement.
`./gradlew check build assemblePack assembleTestPack -x :sanctuary:runGameTest
-PsanctuaryClientTests=true -PsanctuarySunlight062ClientTests=true
-PsanctuaryQuickTests=true` réussit : **122 tâches**, **2 min 10 s**.
Le parcours client est exécuté séparément par `:sanctuary:runClientGameTest`
avec les mêmes propriétés et `-PsanctuaryClientNoVsync=true`.
Aucun EULA de serveur dédié n'a été accepté.
## Archives locales
- [Pack normal](../build/Sanctuary-beta.062.mrpack), 5678508 octets.
SHA-256 : `3eb3729023bcb1f6931198d50694ecac1fee1c660aeb0cf1edc9776aebbfe2fa`.
- [Monde plat rapide](../build/Sanctuary-Test-beta.062.mrpack), 5697441 octets.
SHA-256 : `f71dd47ef228d2acab99fe9b7b58e11d4f39234f926d7a313956bdd69e9cd2b6`.
Les **1624 classes** embarquées correspondent au build. Le reçu
`build/sun062-artifact.json` vérifie le contenu des archives, les différences
ciblées avec beta.061, les dépendances imbriquées et la conservation des
archives précédentes. JEI, la génération et les autres ressources du pack
restent identiques. Aucun canal publié, instance personnelle ni monde
existant n'est modifié.
+58
View File
@@ -0,0 +1,58 @@
# beta.101 — Atterrissage des familiers volants
Branche `codex/flying-landing-beta101`, Minecraft 26.3.
Le profil de vol du familier doit désactiver laccumulation et le traitement des
chutes de son entité commune. Une descente pilotée, autonome ou un contact avec
le sol ne doit causer ni dégâts, ni animation/son de coup, ni entrée en combat.
Les vraies attaques et les chutes des familiers terrestres gardent leurs règles.
Aucun changement de navigation, de sauvegarde, de texture ou de terrain.
## Cause et correction
Lentité Sanctuary commune hérite de `PathfinderMob`. Son contrôle de vol et
labsence de gravité ne remplacent pas les méthodes natives de chute. Ces
méthodes pouvaient appeler `FamiliarBattle.hurt`, produire son animation/son de
coup, interrompre une technique et enregistrer du combat.
`checkFallDamage` remet maintenant la distance à zéro pour les profils volants.
`causeFallDamage` refuse aussi un appel avec une distance déjà calculée, avant
les sons et les dégâts natifs. Les autres profils délèguent toujours au code
Minecraft. Les sources de dégâts ordinaires ne sont pas filtrées.
## Validation
Reproduction native sur beta.100 : le perroquet accepte le callback de chute,
et lassertion « Flying familiar rejects native fall callback » échoue.
Journal conservé : `build/landing101-before.log`.
`Landing101ClientChecks` réussit après correction en **1 min 5 s**, dans un
nouveau monde plat de développement avec le serveur intégré :
- Les douze espèces du registre ayant un profil volant : perroquet,
chauve-souris, abeille, allay, Wither, breeze, phantom, vex, blaze, ghast,
ghast joyeux et dragon.
- Callback natif de chute à sept blocs, descente à 0,25 bloc par tick jusquau
contact réel avec le sol, puis mouvement rapide vers le sol.
- Santé inchangée, distance de chute nulle et absence de mise à jour de
`lastHurt`, donc pas de passage dans la branche qui diffuse le faux coup.
- Une attaque de zombie reste acceptée et enlève de la santé pour chaque espèce.
- Un loup terrestre conserve les dégâts de sa chute.
Les descentes sont pilotées par le test via les collisions natives ; ce nest
pas un nouveau playtest de tous les trajets autonomes ou un essai multiclient.
Journal : `build/landing101-client.log`. Aucun monde personnel nest utilisé.
`check build assemblePack assembleTestPack` réussit en **2 min 22 s**,
124 tâches, avec le serveur dédié exclu (`-x :sanctuary:runGameTest`).
Les archives normal/Test embarquent le même JAR vérifié et ses sources exactes.
Seul `FamiliarEntity` et les numéros de ligne de deux classes internes changent
par rapport à beta.100. Les ressources, textures et archives beta.100 sont
conservées. Reçu : `build/beta101-artifact.json`. Aucun déploiement personnel
ni publication du canal packwiz.
## Archives
- [Sanctuary-beta.101.mrpack](../build/Sanctuary-beta.101.mrpack), 9914792 octets.
SHA-256 : `3008127d2bb09556c4997c00350e82ff26af5402b69bc7c09c822b24ff4bfe74`.
- [Sanctuary-Test-beta.101.mrpack](../build/Sanctuary-Test-beta.101.mrpack), 9933717 octets.
SHA-256 : `854a8b6a42ac7ca0236e0c19b9000808535df273911b9c6a72844097a49358a0`.
+66
View File
@@ -0,0 +1,66 @@
# beta.039 — connaissance alimentaire, panoramas et têtes numérotées
Contrat établi avant modification. Branche `codex/food-knowledge-beta039`.
Minecraft 26.3-pre-2 ; les autres travaux présents dans le dépôt sont conservés.
## Connaissance alimentaire
Laptitude « Connaissance alimentaire » coûte quatre niveaux dXP. Elle révèle
les apports avant dégustation. Sans elle, finir de consommer un aliment apprend
ses valeurs ; le tenir, le fabriquer, le planter, le donner à un animal ou
interrompre la consommation ne suffit pas. Les infobulles et les aperçus du HUD
suivent la même règle. Les réserves actuelles de faim et saturation restent
visibles. Les recettes et le droit de manger restent libres.
Un attachement serveur additif `sanctuary:food_knowledge`, schéma 1, mémorise
les identifiants goûtés et le reçu dachat. Il se sauvegarde avec lXP, se copie
à la mort et reste au New Game+. Aucun changement du schéma de progression ni
des anciens achats. À la première lecture, les critères réussis de ladvancement
Minecraft « Une alimentation équilibrée » peuvent attester une consommation,
uniquement si leur prédicat correspond à un seul type daliment. Une donnée
invalide est conservée et bloque l’écriture. Aucune sauvegarde personnelle
nest modifiée pendant les travaux.
## Captures de panorama
Une option de capture permet dutiliser la touche de screenshot pour produire
les six faces `panorama_0.png` à `panorama_5.png`, à 90° selon lordre Minecraft.
Chaque capture utilise un nouveau dossier, sans écraser dimages. Le mode normal
reste celui par défaut. Export complémentaire demandé : profondeur et masque de
brume reconstitué, avec paramètres de projection/fog pour rendre le calcul
explicite. Le moteur ne possède pas de texture de fog indépendante.
## Têtes numérotées et skin
Une nouvelle tête porte le pseudo suivi du numéro de mort, depuis le compteur
Minecraft `deaths` : première mort « Poupoutain 1 ». Lindice est figé au décès,
conservé au transport et au vidage. Les morts antérieures comptent ; le prestige
ne remet pas ce compteur à zéro. Les anciennes têtes sans indice affichent leur
nom sans inventer de numéro rétroactif. Le champ `death_number` est additif au
marqueur de tombe schéma 1. Les informations de mort et le retrait seul restent.
Le rendu cosmétique utilise le renderer natif des têtes, son cache de skins et
le profil stocké sur la tête.
## Validation
`./gradlew check build assemblePack assembleTestPack` passe, avec **68 tests
serveur** ciblant laccueil, la connaissance alimentaire, les tombes, la
progression, les inventaires, les accessoires, le cycle, les recettes et le temps
réel. Les 14 784 comparaisons entre aperçu alimentaire et consommation native
restent valides.
Le parcours client natif vérifie les infobulles cachées/apprises, un véritable
achat à quatre niveaux, le renderer de tête lié au cache du propriétaire,
louverture des options et deux captures successives de six faces à 256×256.
Chaque face fournit couleur PNG, profondeur PNG 16 bits, profondeur brute
float32 little-endian (`depth_N.f32`) et brume PNG 16 bits. `capture.json` décrit
lordre des faces, les matrices, la convention de profondeur inversée et les
paramètres du brouillard. Le test vérifie la profondeur des surfaces, la
projection, la restauration de la caméra/fenêtre/FOV et le screenshot normal.
Résolutions proposées : 256, 512, 1 024 (défaut), 2 048 pixels par face.
Le masque reconstruit la brume du terrain à partir de sa profondeur : transparence,
nuages, particules et shaders externes peuvent différer du rendu final. Il ne
constitue pas un buffer de fog natif séparé. Les six vues conservent la brume
visible. Captures et exports vérifiés dans `build/food039-evidence/release/`.
Pas de déploiement dans une installation personnelle.
+79
View File
@@ -0,0 +1,79 @@
# beta.094 — Foyers allumés du Fourneau
La chaleur partagée allume toute la façade du Fourneau, y compris si la cuisson
se déroule dans une case intérieure. Les deux ouvertures reçoivent des braises
orange et jaunes. La pierre et les trois textures originales sont conservées.
Quand la chaleur est épuisée, la façade reprend son aspect éteint.
Les 27 sources de particules des fours composants sont remplacées par une seule
animation de façade : une flamme et une fumée dans chacun des deux foyers.
Leurs positions correspondent aux pixels des ouvertures, à 0,02 bloc devant la
face, dans les quatre orientations. Un four isolé garde son animation native.
La dissociation rétablit l'état lumineux individuel des fours.
## Assets et rendu
- Original inchangé : `assets/sanctuary/textures/block/fourneau/front.png`.
- Variante de feu : `assets/sanctuary/textures/block/fourneau/front_on.png`.
- `tools/fourneau-embers.json` délimite les bandes des ouvertures à illuminer.
- `python3 tools/generate-fourneau-models.py` régénère les modèles éteints/allumés.
La variante a été créée avec l'outil intégré **imagegen**, puis réduite en
48 × 48 par échantillonnage au plus proche pour la densité native du modèle.
La génération ayant aussi redessiné la pierre, le rendu prélève uniquement les
pixels de feu dans les ouvertures ; tout le reste utilise l'image originale.
Les fines faces de braises sont décalées de 0,002 pixel pour éviter le z-fighting.
Prompt retenu : « Edit the provided 48 by 48 pixel Minecraft furnace facade
texture. Create its LIT variant. Preserve the pixel-art grid, grey stone, mortar,
arches, outer edges and dimensions. Change only the black/dark interiors of the
two arched openings to Minecraft-style orange, red and yellow embers/fire pixels,
bright yellow near the bottom, orange above. Flames stay inside the holes.
No perspective, border, labels or new elements. »
Le choix du modèle utilise l'état `LIT` natif. Les snapshots d'assemblage, leurs
paquets réseau et le schéma de sauvegarde restent identiques. Aucun paquet de
particules n'est envoyé par le serveur. Aucun monde personnel n'est modifié.
Le pack de textures intégré reste à son édition beta.090 ; ces assets sont ceux
du mod beta.094.
## Vérifications
Le test client natif avec serveur intégré est passé sur un nouveau monde plat de
développement, graine 85 (`build/fourneau094-client.log`, 1 min 5 s) :
- 27 composants synchronisés à cheval sur quatre chunks, quatre orientations.
- Chauffe réelle depuis une case intérieure, façade entière allumée puis éteinte.
- 800 émissions interceptées à la sortie de l'animation native : coordonnées
devant la façade, sur un pixel de feu situé dans une ouverture sombre originale.
- Aucune nouvelle particule à froid ; particules natives d'un four isolé conservées.
- Rechargement des ressources, départ/retour dans les chunks, dissociation,
reconstruction et destruction ; conservation du contenu d'origine.
- Captures allumé/éteint inspectées dans `build/fourneau094-evidence/`.
Commande du test :
```sh
./gradlew :sanctuary:runClientGameTest -x :sanctuary:runGameTest \
-PsanctuaryClientTests=true -PsanctuaryFourneau085ClientTests=true \
-PsanctuaryQuickTests=true -PsanctuaryClientNoVsync=true
```
Les particules déjà émises finissent naturellement leur durée de vie après
l'extinction, comme celles des fours Minecraft. Test natif macOS ; pas de test
avec shaders tiers ni de session LAN à deux clients pour cette livraison.
Le serveur dédié de GameTest est exclu, conformément au refus antérieur de son
EULA. Aucun déploiement personnel ou changement de sauvegarde.
`check build assemblePack assembleTestPack -x :sanctuary:runGameTest` : réussi
en 2 min 31 s, 124 tâches (`build/fourneau094-check.log`). La régénération des
216 modèles est reproductible. `git diff --check` passe.
Les archives normal/Test ont été exportées et vérifiées : Minecraft 26.3,
version beta.094, même JAR Sanctuary intégré aux deux packs, sondes de test
absentes. Les assets existants, JEI et les archives beta.093 sont inchangés.
Le reçu `build/fourneau094-artifact.json` conserve les empreintes SHA-256 ;
`build/verify-fourneau094.py` reproduit ces contrôles.
- [Pack normal](../build/Sanctuary-beta.094.mrpack).
- [Pack de test plat](../build/Sanctuary-Test-beta.094.mrpack).
+60
View File
@@ -0,0 +1,60 @@
# beta.085 — textures du Fourneau
Les trois images originales de 48 × 48 pixels fournies par le créateur sont
conservées, octet pour octet, dans `assets/sanctuary/textures/block/fourneau/`.
Chaque image couvre une face entière du cube de trois blocs de côté. Les UV
des 27 composants prélèvent chacun un tiers de l'image, à la densité native
de 16 pixels par bloc. Façade dans l'orientation choisie à l'assemblage ;
côtés et arrière avec `side`, dessus et dessous avec `top`.
## Contrat de compatibilité
Aucun changement au schéma 1 de `sanctuary:multiblocks`, aux identifiants des
blocs ou aux données de leurs inventaires. Les assemblages beta.084 utilisent
leur orientation déjà enregistrée. Un four isolé garde le modèle de son pack
de ressources. Les nouveaux modèles ne s'appliquent qu'aux fours assemblés.
Dissocier ou casser un composant rétablit les modèles ordinaires ; cuisson,
combustible et objets restent dans les BlockEntities vanilla.
Le serveur transmet seulement l'apparence des machines dans les chunks
suivis par le joueur : à l'envoi natif du chunk, à l'assemblage et à la
dissociation. Aucun paquet par tick de cuisson. Le client invalide les
sections concernées et utilise les modèles de blocs natifs via Fabric,
avec éclairage, occultation des faces et destruction habituels. Il efface
son cache au déchargement d'un chunk, au changement de monde et à la
déconnexion. Les modèles sont rebâtis lors du rechargement des ressources.
Les modèles JSON se régénèrent avec `python3 tools/generate-fourneau-models.py`.
Les textures originales ne sont pas générées. Le pack intégré beta.070
reste inchangé : ces nouveaux assets appartiennent au mod beta.085.
## Limites visuelles
Aucune variante allumée n'a été fournie : l'image reste celle du créateur,
y compris pendant la cuisson. L'état lumineux natif du Fourneau est conservé.
Le Fût conserve son apparence de barils dans cette livraison.
## Vérifications et livraison
- `check build assemblePack assembleTestPack` : tâches réussies dans
`build/fourneau085-check.log`. La première extension du test visuel de chauffe
surveillait par erreur la case de diamants, qui ne cuit pas ; son attente a
échoué après les tâches de construction. Le scénario a été corrigé pour
observer le compartiment contenant le minerai, sans changement du code livré.
- `Fourneau085ClientChecks` relancé avec succès : nouveau monde plat intégré,
quatre orientations, 27 modèles répartis sur quatre chunks, état allumé,
rechargement des ressources, rejet d'un paquet d'une autre dimension,
déchargement réel puis retour, dissociation, casse et conservation des
17 diamants stockés. Journal final : `build/fourneau085-client-final.log`.
- Contrôle des trois PNG à l'octet près, des 108 modèles et de leurs UV,
des sources embarquées, des archives et de la préservation des assets
antérieurs. Reçu : `build/fourneau085-artifact.json`.
- Captures natives : `build/fourneau085-screenshots/`, dont
`0001_fourneau085-north.png` et `0006_fourneau085-lit.png`.
Archives locales vérifiées : `build/Sanctuary-beta.085.mrpack` et
`build/Sanctuary-Test-beta.085.mrpack`. Les archives beta.084 restent inchangées.
Le canal packwiz et l'instance Prism n'ont pas été déployés. Aucun monde
personnel modifié, aucune EULA acceptée, aucun serveur dédié lancé : le test
utilise uniquement le serveur intégré au client. Le rendu avec deux clients
LAN distincts et avec un moteur de shaders tiers reste à éprouver séparément.
+74
View File
@@ -0,0 +1,74 @@
# beta.115 — Dépôts et chauffe du Fourneau
Ticket sur `codex/fourneau-transfers-beta115`, après le signalement de piles
qui se réalignent pendant les dépôts rapides avec Maj, dans Ingrédients et
Combustibles, et d'une chauffe difficile à comprendre.
## Diagnostic
La méthode `mayPlace` de la case serveur utilisait `index`, masqué par le
champ hérité `Slot.index` (position affichée). Elle validait donc successivement
une entrée, un combustible et une sortie, au lieu des 27 entrées ou des
27 combustibles. Le client acceptait le dépôt puis le serveur le refusait.
Le test reproduit le refus dun déplacement de la case 1 vers la case 23.
Le correctif utilise explicitement `physicalIndex` pour la validation.
## Comportement
Les transferts Maj dans les vues complètes du Fourneau sont anticipés sur le
client, avec les mêmes destinations et règles de combustible que le serveur.
Les cases se remplissent dans l'ordre, après fusion des piles compatibles.
Un dépôt manuel conserve la case choisie ; aucun tri périodique des ingrédients
n'est ajouté. Les recherches masquent une partie du stock : leurs transferts
entrants continuent d'attendre la réponse du serveur, qui connaît tout le stock.
La chauffe emprunte du combustible à une autre case uniquement pendant le tick
natif. La pile non brûlée retourne immédiatement à sa case d'origine, avec tous
ses composants. Les restes natifs restent associés à leur cuisson : un seau de
lave devient un seau, puis un seau d'eau avec une éponge mouillée.
Les 27 entrées ont chacune une barre et une infobulle : cuisson en cours,
manque de combustible avec progression conservée, résultat bloqué, absence de
recette. Le panneau indique le nombre de cuissons et la réserve allumée en
secondes de travail cumulées. Ce n'est pas une durée réelle restante : les
cuissons parallèles se partagent la réserve. « Fonctionnement » explique les
onglets, les gestes et le rendement normal du combustible en FR/EN.
Les recettes, résultats, expérience et règles de trémies restent natifs.
Aucun changement de format, de monde ou de génération ; les 27 fours physiques
conservent l'unique copie des objets et de leurs temps de chauffe.
## Vérifications
Le test natif `Furnace115ClientChecks` passe avec un serveur intégré, sur un
nouveau monde plat de graine 115 : vrai glisser avec Maj sur neuf piles nommées,
remplissage consécutif, déplacement manuel vers la case 23 et répartition native
sur six cases de colonnes différentes. Les 27 cases de chaque onglet valident
leur rôle physique. Le combustible nommé conserve sa position et ses composants.
La cuisson parallèle, ses états synchronisés, la progression conservée à court
de combustible, les 27 cuissons ravitaillées, le seau de lave et l'éponge,
l'extraction des résultats et la sauvegarde native passent. Captures FR/EN
relues dans `build/furnace115-evidence/`. Marqueur `FURNACE115_PASS` dans
`build/furnace115-client.log`.
`check build assemblePack assembleTestPack -x :sanctuary:runGameTest` réussit
en 2 min 29 s, 125 tâches. Le panneau d'aide reçoit ensuite une dernière
vérification client et une reconstruction ; la livraison commune beta.116
repasse les contrôles complets en 2 min 23 s et le scénario Fourneau en 42 s.
Le GameTest dédié reste exclu conformément au refus antérieur de son EULA.
Pas d'essai Windows ou de réseau distant avec latence simulée. Aucun monde
personnel ouvert. Cette étape reste locale et rejoint la livraison commune
avec les matériaux de sculpture : [beta.116](sculpture-materials-beta116.md).
Archives locales vérifiées (même JAR Sanctuary, sources concordantes, aucune
classe de test ni changement de production extérieur au ticket) :
- `Sanctuary-beta.115.mrpack` : 10184430 octets, SHA-256
`8fcac63b1bf5a01f680fb46666924705db3a2675e102037278e9d650d04cbf22`.
- `Sanctuary-Test-beta.115.mrpack` : 10203354 octets, SHA-256
`5b98fdb8842690158a20b422d6aa5496d74e572b3429498ffb25476d24e87f8a`.
- JAR Sanctuary : `2066d3191d7ee27904927fab269d8160136f048742c3223713e8ed4fe90dd8f5`.
Reçu : `build/furnace115-artifact.json`.
+80
View File
@@ -0,0 +1,80 @@
# beta.043 — blocs portés fonctionnels
Branche `codex/functional-head-blocks-beta043`.
## Contrat demandé
Un bloc utilisable porté dans le slot cosmétique reprend ses interactions
Minecraft. Clic droit par un autre habitant ; clic droit sur le slot pour le
porteur. Les inventaires sont publics. Les recettes, combustibles, distances,
permissions et conditions environnementales restent celles du serveur.
Retirer un bloc ordinaire ferme ses menus et rend son contenu, comme sa casse,
sans supprimer les objets. Une Shulker conserve son contenu ; le coffre de
l'End ouvre le stockage personnel du visiteur. Les contenus ne doivent jamais
être copiés à la fois dans l'objet retiré et dans les objets rendus.
Les formes cosmétiques restent sans collision. Aucun bloc temporaire ne doit
être placé dans le terrain ni remplacer un bloc du monde.
## Contrat de données additif
Les trois accessoires gardent `sanctuary:accessories`, schéma 1. Un champ voisin
`sanctuary:head_block` contient l'état natif du bloc pendant son équipement,
avec un schéma et l'identifiant du bloc. Il n'appartient pas à l'item ordinaire :
copier celui-ci ne copie pas un stockage. Le retrait détruit cette session
après restitution. Les anciennes sauvegardes sans ce champ ouvrent un bloc vide.
Les données Shulker restent dans les composants natifs de l'item.
Ce ticket ne migre aucun chunk, aucune génération ni aucun identifiant existant.
Les changements de dimension ferment les visiteurs ; les traitements reprennent
près du porteur. Déconnexion et sauvegarde gardent le bloc équipé.
## Périmètre livré
Les interactions natives sont dispatchées pour 117 familles de blocs : menus de
travail et de stockage, cuissons, infusion, livres, disques, pots, chaudrons,
leviers, boutons, portes, lits et interfaces techniques. Les signes, bougies,
gâteaux avec bougie et statues gardent leurs gestes Sanctuary existants.
Le son du jukebox suit le porteur. Les éditeurs de blocs techniques restent
réservés au mode opérateur et nécessitent de rester dans la même case pendant
l'édition. Le coffre de l'End demeure personnel à chaque visiteur.
Les lits portés sont utilisables par un autre habitant ; pour dormir dans son
propre lit, il faut le poser. Le lit conserve les conditions natives et le point
de réapparition à sa position lors de l'utilisation : déplacer le porteur ne
transforme pas ce point en destination mobile.
Cette adaptation ne simule pas un chunk autour de la tête : les pistons ne
poussent pas le terrain depuis le cosmétique, les cultures ne reçoivent pas de
random ticks et un bloc suspendu ne remplace pas les fondations d'une balise,
un réseau de redstone ou un portail. Les conditions natives restent requises.
## Icône officielle
Le fichier fourni `sanctuary_icon-export.png` est repris sans modification dans
`assets/sanctuary/icon.png` et `packwiz/icon.png`. SHA-256 :
`6214b44ad058b2ec43d46e8d3d8c33ae0862ae616a7373d7a1b0edd5c415f8b5`.
L'icône est déclarée dans Fabric, incluse dans les overrides du MRpack et dans
le modèle Prism sous la clé stable `sanctuary-beta`. L'import local de Prism
recherche l'icône du pack dans ces overrides
([code officiel](https://github.com/PrismLauncher/PrismLauncher/blob/develop/launcher/InstanceImportTask.cpp)).
Aucune instance personnelle n'est modifiée par l'assemblage.
## Vérifications
`check build assemblePack assembleTestPack` et **41 tests serveur** passent.
22 menus natifs, 117 familles avec usage main vide, stockage public partagé,
shift-click, retrait, mort/tombe, cuissons, sauvegarde, bouton temporisé après
rechargement, Shulker et coffre de lEnd ont été vérifiés.
Complément de validation sous beta.044 : le parcours client natif passe après
désactivation de VSync dans les seuls réglages du client de développement.
Le coffre porté affiche ses trois rangées et les six rangées du joueur ;
le shift-click est attesté côté serveur, le retrait ferme le menu, puis le
four et l'éditeur opérateur natifs s'ouvrent. Log : build/egg044-client1.log.
La capture du coffre a été relue. L'artefact beta.043 reste immuable.
Aucun EULA accepté, aucun serveur réseau dédié démarré et aucune installation
personnelle déployée.
+60
View File
@@ -0,0 +1,60 @@
# beta.088 — Navigation du Fût sans recentrage de souris
Branche : `codex/fut-navigation-beta088`.
## Problème et correction ciblée
Changer de page ou appliquer une recherche remplaçait le menu serveur via
`openMenu`. Minecraft envoyait d'abord une fermeture au client, puis une
ouverture. Cette fermeture reprenait la souris pour le jeu et la recentrait,
obligeant à revenir sur le bouton à chaque clic.
La transition nettoie désormais l'ancien menu côté serveur avec
`doCloseContainer`, sans envoyer l'écran de fermeture intermédiaire. Le
nouveau menu est ensuite ouvert normalement : la souris reste libérée et
conserve sa position. Cela concerne la pagination et la recherche du Fût,
ainsi que les onglets du Fourneau qui utilisent la même navigation.
Chaque page garde un nouvel identifiant de menu : les paquets de clics ou de
navigation de la page précédente sont toujours rejetés. Les contrôles de
portée, d'accès, de structure, d'objet porté au curseur et la limite de
fréquence restent en place. La fermeture réelle du coffre reste native.
Aucun changement de stockage, de sauvegarde, de textures ou de libellés.
## Vérifications
Le parcours natif existant a été étendu avec un contrôle des paquets réseau
sur un second joueur de test : sans correction, la navigation envoie un
`ClientboundContainerClosePacket` et le test échoue. Avec la correction,
aucune fermeture intermédiaire, et une fermeture réelle envoie toujours
son paquet. Ce contrôle reste valable si la fenêtre de test est inactive.
Côté client, le test place réellement le curseur sur le bouton puis clique
trois fois sur Suivant et deux fois sur Précédent sans le déplacer. Sa
position est vérifiée après chaque page, après une recherche localisée en
français et après chacun des trois onglets du Fourneau. Échap ferme le menu
normalement côté client et côté serveur.
Les essais existants passent également : 729 cases, deux joueurs utilisant
le même stock, objets au curseur, identifiants périmés, transfert rapide,
hoppers, démontage, casse, persistance et cuisson native partagée.
Aucun serveur dédié lancé, aucune EULA acceptée, aucun monde personnel touché.
Journaux : `build/fut088-before-client.log` (régression reproduite) et
`build/fut088-client.log` (succès en 39 secondes). Le parcours reste activé
par `-PsanctuaryMultiblocks084ClientTests=true` avec
`-PsanctuaryClientTests=true -PsanctuaryQuickTests=true`.
`check build assemblePack assembleTestPack` réussit en 2 min 23 s
(124 tâches, 103 exécutées), avec le GameTest dédié explicitement exclu.
Journal : `build/fut088-check.log`. Le reçu `build/fut088-artifact.json`
vérifie les sources, le JAR, les archives normal/Test et la conservation de
tous les assets beta.087. Seules `MultiblockMenu` et sa classe interne de
transfert changent dans les classes compilées (décalage des lignes de debug
pour cette dernière).
Livraison locale : `build/Sanctuary-beta.088.mrpack` et
`build/Sanctuary-Test-beta.088.mrpack`. Les archives beta.087 restent intactes.
Aucun déploiement dans l'instance Prism ni sur le canal publié. Un essai LAN
avec deux clients distincts reste à réaliser ; le test d'accès partagé utilise
un second joueur serveur dans le client de développement.
+51
View File
@@ -0,0 +1,51 @@
# beta.086 — textures du Fût
Le Fût assemblé reçoit les trois images originales de 48 × 48 pixels :
côtés, dessus et dessous. Chacune couvre une face entière de trois blocs
sur trois, avec 16 pixels par bloc et sans retouche de l'image.
## Contrat avant implémentation
Aucun changement de sauvegarde : les 27 barils et leurs 729 cases restent
vanilla, avec le même registre d'appartenance et les mêmes données. Seul le
modèle affiché change quand le Fût est assemblé. Les barils indépendants
conservent le modèle du pack de ressources actif. Dissociation et casse
rétablissent leur apparence. Les textures du Fourneau beta.085 sont conservées.
Le Fût ajoute un paquet client `sanctuary:fut_appearance_v1` ; le paquet
du Fourneau reste inchangé. Les deux utilisent la même mise en cache visuelle
par chunk et le même rendu natif. Aucun paquet supplémentaire par tick,
aucun stockage parallèle d'objets. Le pack intégré beta.070 reste inchangé ;
les textures du Fût appartiennent aux assets du mod beta.086.
## Rendu et vérifications
Les modèles JSON se régénèrent avec `python3 tools/generate-fut-models.py`.
Les PNG sources sont conservés dans `assets/sanctuary/textures/block/fut/`.
Aucune variante ouverte n'a été fournie : le Fût conserve le même dessus
pendant l'accès à son inventaire.
`Fut086ClientChecks` a réussi dans un nouveau monde plat intégré : Fût et
Fourneau voisins, modèles distincts, raccords des côtés/dessus/dessous,
ouverture et prélèvement dans les 729 cases, rechargement des ressources,
déchargement réel puis retour dans quatre chunks, dissociation et casse.
Les objets conservés restent dans les mêmes barils physiques ; retirer la
façade du Fût ne retire pas celle du Fourneau voisin.
Journal du client : `build/fut086-client.log`. Captures natives :
`build/fut086-screenshots/`, notamment `0001_fut086-top-side.png` et
`0002_fut086-bottom-side.png`. Le Fût est suspendu dans cette scène de test
pour que le dessous puisse être inspecté.
`check build assemblePack assembleTestPack` a réussi en 2 min 36 s
(124 tâches, 104 exécutées), sans serveur dédié ; journal
`build/fut086-check.log`. Le reçu `build/fut086-artifact.json` vérifie
l'identité des PNG, les 27 modèles, les sources embarquées et les archives,
ainsi que la conservation de tous les assets beta.085 du Fourneau.
Livraison locale : `build/Sanctuary-beta.086.mrpack` et
`build/Sanctuary-Test-beta.086.mrpack`. Les archives beta.085 restent
immuables. Aucun déploiement sur Prism ou sur le canal publié, aucun monde
personnel modifié, aucune EULA acceptée. Les vérifications multijoueur
avec deux clients distincts et avec un moteur de shaders tiers restent
à effectuer séparément.
+152
View File
@@ -0,0 +1,152 @@
# GEM-01 — Gemmes, argile et découvertes — beta.126
Contrat du 17 septembre 2026, branche `codex/gems-beta126`, Minecraft 26.3.
Deux gemmes natives complètent l'émeraude : `sanctuary:ruby` et
`sanctuary:sapphire`. Chaque famille comprend un bloc de stockage, un minerai
ordinaire et un minerai des abîmes. Les huit PNG du créateur sont copiés à
l'identique ; leurs empreintes figurent dans `tools/gems-textures-beta126.json`.
Les noms des fichiers français `saphir` sont associés aux identifiants anglais
stables `sapphire`, sans modifier les pixels. Les deux items utilisent les fichiers de remplacement
`Desktop/ruby.png` et `Desktop/saphir.png` fournis en fin de livraison.
L'ordre créatif est émeraude, rubis, saphir : ingrédients, blocs de stockage,
minerais ordinaires et minerais des abîmes dans leurs onglets natifs respectifs.
Minage à la pioche de fer ou mieux, résistance et expérience comme l'émeraude,
Fortune, Toucher de soie, cuisson/four à fusion et conversion 9 gemmes ↔ 1 bloc.
Les blocs peuvent former un socle de balise et les gemmes servir de paiement.
Les recettes rejoignent la collection actuelle de l'émeraude, sans ajouter de
transactions de villageois. Libellés français et anglais, tags communs `c:`.
## Génération procédurale et contrat de compatibilité
Profil initial **gemmes 1 / beta.126** : quatre tentatives par chunk et par
gemme, filons natifs de taille 3, hauteur uniforme Y0256, probabilité de rejet
au contact de l'air de 0,25. Ces nombres sont un réglage initial à équilibrer
lors de la future refonte ; aucun quota de gemmes par chunk n'est garanti.
Les variantes ordinaires remplacent les roches du tag vanilla
`stone_ore_replaceables`, les variantes des abîmes celles de
`deepslate_ore_replaceables`.
Les fichiers `worldgen/feature/ore_<gemme>.json`,
`worldgen/placed_feature/ore_<gemme>.json` et les tags de biomes
`has_ore/<gemme>` séparent les cibles, la forme, la fréquence, la hauteur et
les régions. Un datapack peut les remplacer sans recompiler le mod. Le code
réutilise `OreFeature` et le hasard natif issu de la graine ; il limite ces
filons aux mondes utilisant `SanctuaryChunkGenerator`. Les biomes vanilla
partagés avec Sanctuary restent compatibles sans ajouter les gemmes aux
mondes vanilla, au Nether ou à l'End.
Cette évolution additive est autorisée pour les **nouveaux chunks uniquement**.
Aucun remplissage rétrospectif, aucune régénération, aucun remplacement de chunk
sauvegardé ni activation d'expansion. Les codecs du relief, les dimensions et
le format des sauvegardes restent inchangés. Les filons suivent les protections
existantes de la décoration native. Les anciens profils expérimentaux précédant
le générateur Sanctuary unifié ne sont pas étendus.
## Argile spéciale dans le Clay Workshop
Le bloc d'argile vanilla conserve les couleurs échantillonnées sur le modèle
original, animal découvert ou import GLB. Les argiles colorées et les autres
blocs continuent à transférer leur palette de texture. Une même règle est
appliquée à l'aperçu client et au résultat serveur. Le changement de matériau
invalide le résultat même si les deux palettes sont identiques. Le texte de
l'atelier explique l'exception en français et en anglais.
Une sculpture coûte toujours un bloc ; aucune recette, découverte, donnée de
sculpture déjà fabriquée ni règle de placement n'est modifiée.
## Commande de découverte commune
`/sanctuary discovery all` découvre tous les blocs, objets et espèces enregistrés.
Les variantes `blocks all`, `items all` et `mobs all` ciblent une catégorie ;
`block <identifiant>`, `item <identifiant>` et `mob <identifiant>` ciblent une
entrée avec la complétion native. Un sélecteur de joueurs en fin de commande
est facultatif ; sans cible, elle s'applique au joueur qui l'exécute.
Exemples :
```mcfunction
/sanctuary discovery all
/sanctuary discovery mobs all
/sanctuary discovery block minecraft:stone
/sanctuary discovery item minecraft:diamond
/sanctuary discovery mob minecraft:cow
/sanctuary discovery all @a
```
La permission suit « Autoriser les commandes » en solo et les droits opérateur
sur serveur. La console doit préciser la cible. Les identifiants invalides,
l'air et les types d'entités sans espèce découvrable sont refusés.
Les blocs passent par le registre de découvertes et son événement existant ;
les objets passent par `RecipeService.discover`. Les collections et recettes
sont ensuite recalculées normalement. Les espèces rejoignent `seen_mobs`,
la même donnée que l'observation naturelle, consommée par les familiers,
le Métabli et le Clay Workshop. Il n'existe aucun drapeau de déblocage parallèle.
Les catalogues déjà ouverts sont à rouvrir après la commande.
La commande conserve les quantités possédées et les compteurs de combat,
minage, pose et fabrication. Elle ne donne pas d'objets, n'achète pas les skills
et n'attribue pas d'advancements. Les recettes réservées aux opérateurs gardent
leurs règles. Les historiques personnels sont enrichis sans changer leur
schéma ; la commande refuse les données illisibles plutôt que les remplacer.
## Vérifications
Client natif Minecraft 26.3 / Java 25, `Gems126ClientChecks`, réussi en
1 min 08 s. Les mondes sont jetables, sans sauvegarde personnelle ouverte :
- Les huit items et six blocs sont présents, avec les huit textures exactes.
Quatre groupes créatifs respectent émeraude → rubis → saphir, sans doublons.
- Douze recettes natives, découverte du bloc de stockage, outil fer minimum,
Fortune III, Toucher de soie et balises passent les contrôles serveur.
- Graine **126**, profil gemmes 1, 81 chunks autour de l'origine : 7 rubis dans
la pierre et 8 dans la roche des abîmes ; 15 saphirs dans la pierre et 10 dans
la roche des abîmes. La génération est refusée dans le monde plat vanilla.
Les minerais persistent à la reconnexion, et un minerai retiré ne réapparaît pas.
- L'argile conserve exactement les couleurs des voxels d'une vache et d'un GLB
texturé. Bois et argile colorée transfèrent toujours leur palette. Le retour
à l'argile, l'égalité aperçu/résultat et le coût d'un bloc en survie sont vérifiés.
- La commande native respecte « Autoriser les commandes », accepte une cible
et la console, refuse les identifiants invalides et permet une espèce, un
bloc, un objet, toutes les espèces ou tout le contenu. Les recettes liées
sont recalculées. La répétition est idempotente et les découvertes survivent
à la reconnexion sans inventer de compteurs de combat ou de possession.
Logs et captures dans `build/gems126-client.log` et
`mods/sanctuary/build/run/clientGameTest/screenshots/`. Le GameTest dédié
reste exclu conformément au refus antérieur de son EULA. Le build complet et
les archives sont vérifiés séparément avant publication.
Build final `./gradlew check build assemblePack assembleTestPack
-x :sanctuary:runGameTest` réussi en **2 min 10 s**, 126 tâches. Les contrôles
natifs de gameplay précèdent uniquement le remplacement final des deux PNG
d'items ; les huit fichiers livrés sont vérifiés à l'octet près contre les
sources, tous en 16 × 16. Les JAR de sources correspondent aux sources courantes.
L'audit entre les binaires beta.125 et beta.126 ne trouve que les 112 entrées
de production prévues. Les archives normal/Test contiennent le même mod et
le template reproduit exactement ses ressources exportables.
| Artefact | SHA-256 |
| --- | --- |
| `Sanctuary-beta.126.mrpack` | `716221ce24549781ab91f5437ad2310497b198a4b61c43c40c67a27984365ae5` |
| `Sanctuary-Test-beta.126.mrpack` | `bbf22d7dd72e6746538b4ec28686f699225d4a59372304e5db42140a80e88bd1` |
| `sanctuary-beta.126.jar` | `85dbe1b41d98751029bb62e87d259522f8609758896c797b1e02fa7656ec0342` |
## Publication et synchronisation
[Release beta.126](https://git.botsu.net/koka/sanctuary-beta/releases/tag/beta.126)
publiée depuis `99860af312a1737d938812f3515fcc4acb4291b2` ; artefacts
immuables retéléchargés et vérifiés. Canal packwiz : `31749b95d21ce5bced6b9e5759499da6f8a67e6e`.
Deux synchronisations isolées, puis deux synchronisations de l'instance existante
**Sanctuary Beta** ont réussi. Un seul JAR Sanctuary beta.126, correspondant
à l'empreinte ci-dessus. Les **923 fichiers personnels** suivis sont conservés,
sauvegardes restées fermées ; copie préalable dans
`sanctuary-backups/before-beta.126/`.
Packs normal/Test et template copiés et vérifiés dans
`sanctuary-beta/build/`. Reçus locaux : `build/gems126-artifact.json`,
`build/gems126-isolated.json`, `build/gems126-prism.json` et
`build/gems126-publication.log`.

Some files were not shown because too many files have changed in this diff Show More