feat(worldgen): unify Sanctuary and native size options for alpha.13
Build Sanctuary / build (push) Canceled after 0s

This commit is contained in:
koka
2026-09-09 11:13:24 +02:00
parent 818c6753f9
commit 78b63be8e1
52 changed files with 4204 additions and 240 deletions
+120 -2
View File
@@ -19,6 +19,124 @@ Pour générer de vrais chunks et vérifier le spawn sur d'autres graines :
La propriété ne s'applique qu'au mod de test, jamais au mod distribué ni à une
sauvegarde de joueur. Chaque commande repart d'un monde de développement neuf.
## Alpha.13 — génération unifiée
`check build assemblePack` passe, y compris le monde Moyen de graine 0 et les
smokes. Les preuves exportées, journaux, paramètres, mesures et hashes figurent
dans [le rapport alpha.13](benchmarks/alpha13-worldgen.json).
Le test courant charge `sanctuary:sanctuary`, puis règle son vrai générateur
`sanctuary:island_v13` comme le fait la personnalisation. Les suites historiques
restent accessibles avec `-PsanctuaryUnifiedTests=false`.
Les trois tailles passent les huit tests moteur sur la graine **42**, avec
1 800 ticks de fluides. Chaque inspection des cavités utilise au plus 27 chunks
FULL, choisis sur des sols et plafonds naturels ; les contrôles dhydrologie
emploient un autre échantillon borné. Ces volumes ne sont pas un inventaire de
l’île et ne mesurent pas le rendu du client.
| Taille | Chunks FULL du diagnostic deau | Blocs deau retenus après 1 800 ticks | Pilier de spéléothèmes dans lair naturel |
| --- | ---: | ---: | ---: |
| Petit, 512 | 116 | 4 722 | 25 blocs |
| Moyen, 724 | 80 | 1 196 | 18 blocs |
| Grand, 1 024 | 136 | 1 434 | 18 blocs |
Les trois cavités natives sont réellement décorées dans chacun de ces mondes :
mousse et lianes récoltables pour le luxuriant, pointes et piliers pour les
spéléothèmes, roche soufrée et pointes pour le soufre. Musiques, brouillard et
table du `sulfur_cube` restent ceux des biomes Minecraft. La graine 0 présente
seulement du luxuriant dans le raster naturel inspecté ; elle ne justifie pas
de forcer les deux autres biomes dans la roche. Une livraison exige les preuves
cumulées des trois types, pas leur présence sur toute graine.
Le garde-fou est exercé par une vraie écriture `WorldGenRegion` : eau, lit,
parois naturelles, sources et sorties sont protégés. Quatre témoins de berge
appartiennent à un chunk voisin de leur cellule deau. Une écriture hors volume
reste possible. Le test utilise une vue modifiable de chunk dédiée, car les
holders FULL exposent normalement une vue de génération en lecture seule.
Les blocs témoins temporaires sont restaurés dans le monde de développement.
Lessai client ouvre le bouton natif **Personnaliser**, parcourt les trois
tailles et vérifie Terminé, Annuler, Échap, réouverture et rafraîchissement des
réglages. L’écriture/relecture réelle des paramètres conserve la taille, la
graine, les options, le Nether et lEnd. Les anciens générateurs ne deviennent
pas personnalisables par erreur ; l’éditeur Superflat vanilla reste disponible.
Une capture confirme la lisibilité de l’écran. Cet essai ne constitue pas une
visite graphique de l’île.
```sh
./gradlew :sanctuary:runGameTest -PsanctuaryTestDiameter=512 -PsanctuaryTestSeed=42 -PsanctuaryResourceSurvey=off -PsanctuaryDensityMaps=false
./gradlew :sanctuary:runGameTest -PsanctuaryTestDiameter=724 -PsanctuaryTestSeed=42 -PsanctuaryResourceSurvey=off -PsanctuaryDensityMaps=false
./gradlew :sanctuary:runGameTest -PsanctuaryTestDiameter=1024 -PsanctuaryTestSeed=42 -PsanctuaryResourceSurvey=off -PsanctuaryDensityMaps=false
./gradlew :sanctuary:runClientGameTest -PsanctuaryClientTests=true
```
Les diagnostics détaillés restent dans le dossier ignoré
`mods/sanctuary/build/run/gameTest/diagnostics/unified-<diamètre>-seed-<graine>-*.json`.
Les anciennes mesures alpha.11 ci-dessous ne sont pas des mesures alpha.13.
### Mesure alpha.13 de Moyen
Sur le Mac M1 à 8 Go, Java 25.0.3 et heap de 2 Gio, graine 0, un seul processus
de jeu actif : la création initiale prend **17,65 s**, puis 289 chunks FULL autour
du spawn **46,01 s**, soit **63,66 s** cumulées. Le couloir suivant de 80 chunks
FULL prend **7,82 s**. Le maximum observé pour une requête de chunk est de 1,30 s
autour du spawn et de 0,79 s dans ce couloir.
Le protocole conserve les anneaux 17 × 17 et le couloir est de lalpha.11.
Lancien Grand et le nouveau Moyen ont le même diamètre nominal de 724 blocs,
mais la décoration et le spawn peuvent différer : ce nest pas une mesure
d’équivalence de génération. Le résultat de départ reste proche des 62,67 s
mesurées pour lalpha.11. Un seul passage par version, sans mesure du GPU,
des FPS, du réseau, de la disponibilité des chunks pour les ticks ou dune
charge multijoueur. Grand na pas de benchmark complet 289 + 80 dans cette
livraison ; ses tests moteur ci-dessus ont une autre charge de travail.
```sh
./gradlew :sanctuary:runGameTest -PsanctuaryBenchmark=true -PsanctuaryTestDiameter=724 -PsanctuaryTestSeed=0 -PsanctuaryResourceSurvey=off -PsanctuaryDensityMaps=false
```
Rapport local : `diagnostics/generation-performance-unified-724-seed-0.json`,
log `build/alpha13-benchmark-medium.log`.
### Expansions et rechargement alpha.13
Sur le monde unifié Moyen de graine 42, les deux processus réussissent :
refus des huit premiers sites occupés, tropicale plus loin au nord, branche
aride à au moins 2 048 blocs de son parent, relecture du journal et des blocs
témoins, puis nouvelle expansion après redémarrage. Les colonnes de terrain
et les biomes enregistrés restent identiques après décodage du générateur.
Le framework reconstruit les paramètres actifs depuis le preset ; le test
vérifie séparément le codec sauvegardé et les fichiers réellement rechargés.
Aucun camp admissible na été observé sur lorigine unifiée des graines 42 et
8 675 309 : les fondations naturelles ou la protection hydrologique écartent
les candidats. Les essais stricts y échouent donc sur la preuve de structure.
La paire unifiée validée utilise explicitement un témoin de structure
facultatif, seulement après inspection complète des candidats. Ses rapports
indiquent `native_structure_observed=false` et ne constituent aucune preuve
positive de placement ou de butin dans lorigine alpha.13. Les critères de
fondation et la génération ne sont pas assouplis pour faire passer un test.
Exécuter les deux commandes sans lancer un autre GameTest entre elles :
```sh
./gradlew :sanctuary:runGameTest -PsanctuaryExpansionTests=true -PsanctuaryOptionalStructureWitness=true -PsanctuaryTestDiameter=724 -PsanctuaryTestSeed=42 -PsanctuaryResourceSurvey=off -PsanctuaryDensityMaps=false
./gradlew :sanctuary:runGameTest -PsanctuaryExpansionTests=true -PsanctuaryExpansionReload=true -PsanctuaryOptionalStructureWitness=true -PsanctuaryTestDiameter=724 -PsanctuaryTestSeed=42 -PsanctuaryResourceSurvey=off -PsanctuaryDensityMaps=false
```
Sans ce drapeau explicite, le scénario exige toujours une vraie structure avec
son conteneur et sa table de butin native. La réouverture vérifie toujours ces
trois éléments lorsquils ont été observés dans le premier processus.
La paire historique, rejouée avec le binaire alpha.13, réussit sur la graine
42 sans rendre le témoin facultatif : camp abandonné de forêt, bloc du
conteneur et table de butin native retrouvés après redémarrage. Cela valide
la chaîne génération 12 conservée ; ce résultat ne vaut pas comme preuve
dun camp dans lorigine unifiée. Le smoke du journal teste aussi une origine
13 de diamètre 1 024 avec un enfant 12, le schéma 1 et le refus dune lecture
avec une autre génération ou taille, sans modifier les octets enregistrés.
## Correctif alpha.12.1 — tous les premiers emplacements occupés
Le scénario laboratoire utilise les mêmes commandes Gradle ci-dessous. Il
@@ -52,8 +170,8 @@ Le laboratoire possède un scénario moteur distinct, à lancer puis à rouvrir
**dans cet ordre**, sans autre GameTest entre les deux :
```sh
./gradlew :sanctuary:runGameTest -PsanctuaryExpansionTests=true -PsanctuaryTestSeed=42 -PsanctuaryResourceSurvey=off -PsanctuaryDensityMaps=false
./gradlew :sanctuary:runGameTest -PsanctuaryExpansionTests=true -PsanctuaryExpansionReload=true -PsanctuaryTestSeed=42 -PsanctuaryResourceSurvey=off -PsanctuaryDensityMaps=false
./gradlew :sanctuary:runGameTest -PsanctuaryUnifiedTests=false -PsanctuaryExpansionTests=true -PsanctuaryTestSeed=42 -PsanctuaryResourceSurvey=off -PsanctuaryDensityMaps=false
./gradlew :sanctuary:runGameTest -PsanctuaryUnifiedTests=false -PsanctuaryExpansionTests=true -PsanctuaryExpansionReload=true -PsanctuaryTestSeed=42 -PsanctuaryResourceSurvey=off -PsanctuaryDensityMaps=false
```
Le premier passage crée le monde jetable. Le second saute volontairement