Sculpt natural island edges and deliver alpha.2 with Prism updates
Build Sanctuary / build (push) Canceled after 0s

This commit is contained in:
koka
2026-09-08 12:49:42 +02:00
parent 2932411349
commit ddc43d716b
23 changed files with 1052 additions and 113 deletions
+77 -18
View File
@@ -29,14 +29,17 @@ de test et les sauvegardes personnelles doivent rester distincts.
avec `xz_scale=0.25`, `y_scale=0.25`, `xz_factor=80`, `y_factor=160`, `smear=4`,
ainsi que ses deux gradients verticaux. Reliefs, surplombs, trous et fragments
dépendent donc de la seed Minecraft.
- Une enveloppe limite l'île à un rayon nominal de **256 blocs**. Le bord varie
avec un second bruit lié à la seed, jusqu'à **288 blocs au maximum** pour la
roche. Les arbres peuvent dépasser ce bord de quelques blocs.
- Une masse centrale ellipsoïdale, centrée en `(0, 76, 0)`, garantit du sol
même quand le bruit historique creuse l'origine. Son rayon horizontal est de
96 blocs et son rayon vertical de 42 blocs. Le reste du relief peut monter
au-dessus de cette masse. La géométrie du noyau est volontairement stable.
- La roche se trouve entre `Y=1` et `Y=255` ; il n'y a ni plancher de bedrock,
- Le terrain naturel reste libre de laisser un trou à l'origine, de former des
surplombs ou de se séparer en fragments. **Aucun noyau ellipsoïdal, cylindre ou
plateforme de départ n'est ajouté.** Le centre conserve exactement le champ
historique dans un rayon de 128 blocs, entre `Y=32` et `Y=224`.
- Le pourtour est sculpté par retrait de matière à partir du rayon **128 blocs**.
Le contour de référence de 256 blocs est déformé par les bruits, entre 204 et
288 blocs ; il indique la fin de l'érosion, pas un mur de roche.
La côte réelle apparaît plus tôt, selon la densité du terrain et la seed.
Il reste du vide permanent au-delà de **288 blocs**, sans répétition d'îles.
Les arbres peuvent dépasser la côte rocheuse de quelques blocs.
- La roche disparaît progressivement avant `Y=0` et `Y=256` ; il n'y a ni plancher de bedrock,
ni mer globale, ni reprise du terrain à distance. Le Nether et l'End restent
ceux de Minecraft.
- `sanctuary:starter_forest` reprend végétation, minerais et animaux de la forêt
@@ -52,11 +55,57 @@ complète des ressources de survie et variété de biomes constituent le prochai
ticket de terrain. Les minerais vanilla conservent leurs plages d'altitude ;
leur abondance n'est donc pas encore équilibrée pour une île flottante.
## Sculpture du pourtour — génération v2
La version **0.1.0-alpha.2** retire deux contraintes de la génération v1
(`0.1.0-alpha.1`) : le noyau central qui remplissait les creux du bruit naturel,
et la découpe radiale qui pouvait exposer une tranche verticale à toutes les
altitudes. Les identifiants `sanctuary:*` du preset et de la fonction restent
stables. Il s'agit d'une évolution du terrain, pas d'une migration de sauvegarde.
Trois passes composent désormais la densité finale, après l'interpolation du
champ historique :
1. Un bruit horizontal à grande échelle déforme le contour. Dans la bande
extérieure, large de 128 blocs avant déformation, une érosion progressive
(`2 × t⁴`) augmente le seuil nécessaire pour conserver de la roche. Une
érosion supplémentaire, quadratique selon la hauteur et nulle à l'intérieur,
fait reculer les faces hautes et basses même lorsque le bruit naturel est
saturé dans une grande masse pleine. Elle arrondit le pourtour sans ajouter
de volume au centre.
2. Un bruit **3D**, échantillonné à la hauteur réelle, déplace ce contour et
creuse des renfoncements plus larges. Le bord peut ainsi changer de position
avec l'altitude au lieu de prolonger une ligne verticale.
3. Un second bruit **3D**, plus fin, ajoute de petites irrégularités. Ces deux
passes s'atténuent progressivement vers l'intérieur ; elles ne remplissent
jamais un trou du terrain initial.
Les bruits `island_edge`, `island_sculpt` et `island_detail` sont tous initialisés
avec la seed du monde. Ils utilisent respectivement les octaves de base
`-7`, `-5` et `-3`. Les nouvelles entrées `sculpt` et `detail` du codec sont
optionnelles pour garder les anciennes définitions JSON lisibles ; leur absence
ne rétablit pas le noyau de la génération v1.
L'érosion est toujours soustraite à la densité bornée du terrain. Une densité
nulle ou négative ne peut donc jamais devenir solide. Même avec un terrain
d'entrée maximalement positif, elle est négative dès le rayon 280, avant la
limite de sécurité 288. Deux transitions verticales douces protègent aussi les
bornes de hauteur, sans découper de dalle à `Y=0` ou `Y=256`.
**Tester cette version dans un nouveau monde.** Mettre à jour le pack ne remodèle
pas les chunks enregistrés ; aucun chunk n'est supprimé ou régénéré par le mod.
Continuer à explorer une ancienne sauvegarde avec ce générateur peut juxtaposer
les deux versions du terrain. Aucun contrat de migration n'est livré.
## Apparition commune
Une injection limitée à la création initiale cherche une surface de 3 × 3 blocs
stable, avec deux blocs libres en hauteur, à proximité de l'origine. Elle ne
s'applique qu'à l'Overworld utilisant les paramètres `sanctuary:sanctuary`.
Une injection limitée à la création initiale cherche du sol naturel depuis
l'origine vers l'extérieur, dans toute l'emprise finie de l'île. Elle préfère
une surface stable de 3 × 3 blocs, avec deux blocs libres en hauteur. En
l'absence d'une telle surface, elle retient une colonne de sol praticable ; si
aucun emplacement naturel sûr n'existe, la création signale la seed concernée
plutôt que d'ajouter une plateforme. Elle ne s'applique qu'à l'Overworld
utilisant les paramètres `sanctuary:sanctuary`.
Elle enregistre le spawn partagé dans la sauvegarde et ne le réinitialise pas
au redémarrage : les modifications administratives de `/setworldspawn` restent
conservées. Les lits et la dispersion habituelle du spawn suivent encore les
@@ -78,8 +127,9 @@ maintenant un `DensitySampler`, leurs opérateurs JSON utilisent
surfaces passent par le registre `worldgen/material_rule`. Les données de cette
branche suivent ces formats réels ; copier directement les JSON 26.2 ne suffit
pas. Les bruits utilisent également `base_octave`, `octave_count` et
`amplitude_modifiers`. Le seul opérateur Java ajouté, `sanctuary:main_island`, compose les deux
champs de bruit et impose la limite extérieure après interpolation.
`amplitude_modifiers`. Le seul opérateur Java ajouté, `sanctuary:main_island`,
compose le terrain et les trois champs de sculpture et impose la limite
extérieure après interpolation.
## Vérification
@@ -88,11 +138,14 @@ champs de bruit et impose la limite extérieure après interpolation.
./gradlew :sanctuary:runGameTest
```
Le smoke test vérifie le noyau garanti même avec un bruit entièrement négatif,
le vide dans les quatre directions même avec un bruit entièrement positif, les
limites verticales, la préservation de l'influence du champ de terrain et la
symétrie de l'enveloppe pour des entrées identiques. Les coordonnées testées incluent la limite du monde et
les grands entiers pour détecter débordements et répétitions involontaires.
Le smoke test vérifie qu'aucun sol n'est ajouté, que l'intérieur conserve le champ
naturel et que l'érosion évolue progressivement sur un profil de terrain contrôlé.
Il vérifie aussi qu'un lobe plein recule d'au moins 30 blocs en haut et en bas
par rapport à son milieu, pour éviter une paroi verticale simplement déplacée.
Il couvre aussi l'influence des deux bruits de sculpture, le vide avant les
bornes de sécurité, et le vide dans les quatre directions même avec un bruit
entièrement positif. Les coordonnées testées incluent les limites de Minecraft
et des entiers Java pour détecter débordements et répétitions involontaires.
Les GameTests chargent le preset réel sur un serveur éphémère, vérifient le
spawn après décoration, puis inspectent des chunks complets à distance dans
@@ -102,6 +155,12 @@ JSON invalides et les blocs que des features pourraient ajouter après le calcul
de densité. Les injections du serveur de test sont isolées dans
`src/gametest` et ne sont pas distribuées dans le mod.
Les graines de régression de la génération v2 sont **0**, **42** et **8675309**.
Le serveur de test exporte leurs cartes de hauteur et coupes de densité dans
`mods/sanctuary/build/run/gameTest/diagnostics/`. Ces images permettent de
contrôler le profil des bords et les anciens volumes forcés ; elles ne montrent
pas les arbres ni les matériaux et ne remplacent pas un essai visuel en jeu.
## Contrat du prochain ticket : expansion
Avant de créer des continents, définir une donnée **persistante par monde**