Configuration

Tout se règle depuis un seul fichier, config/oas/vortexdread.json, du côté serveur. Quarante-deux options rangées en cinq groupes, écrites en entier au premier démarrage et réécrites à chaque sauvegarde, de sorte qu'une mise à jour qui ajoute une option la fasse apparaître dans votre fichier plutôt que de vous laisser deviner qu'elle existe. Aucune interface en jeu: un fichier que vous relisez plus tard vaut mieux qu'un écran que vous avez traversé une fois.

Ce qui arrive quand une valeur est fausse

Chaque option numérique porte une plage. Une valeur en dehors est ramenée dans la plage au lieu d'être refusée: quelqu'un qui écrit mille dans un budget de tick veut un budget plus gros, et arrêter le serveur là-dessus n'aide personne. Une clé que cette version ne connaît pas est ignorée avec une ligne dans le journal qui la nomme. Un fichier qui ne se lit pas du tout est déplacé en vortexdread.json.broken et un fichier neuf prend sa place, parce que quelqu'un a passé du temps dedans et que l'écraser en silence est la seule issue dont on ne revient pas.

La commande

/vortex demande le niveau de permission 2, le même que /weather, puisque c'est la même sorte de décision. /vortex spawn fait descendre un entonnoir sous vos pieds, avec une cote et des coordonnées en arguments facultatifs. /vortex list énumère celles qui vivent dans un rayon de 8192 blocs, avec leur stade, leur distance, leur cœur et la part de sol qu'elles portent. /vortex clear les retire, /vortex storms off empêche le ciel d'en refaire, et /vortex compute dit quel périphérique calcule et combien de morceaux sont passés de chaque côté.

Les quarante-deux options

Les valeurs ci-dessous sont celles d'un fichier neuf. La colonne de droite dit ce qui change quand vous les déplacez, pas ce que le nom veut dire.

Groupe storm, le ciel et sa décision
OptionDéfautCe que ça déplace
naturalTornadoestrueÀ faux, le ciel n'en fait plus jamais et seule la commande en produit.
tornadoChancePerMinute0.18Chance, par minute d'orage, qu'une supercellule s'organise. De 0 à 1.
cooldownTicks9600Silence imposé après une dissipation, quoi que disent les probabilités. Huit minutes.
maxConcurrent1Entonnoirs vivants en même temps dans une dimension. Jusqu'à 16.
ratingBias0.0Décale le tirage de la cote, en pas d'EF. Négatif garde le ciel aux tornades faibles.
warningRadius640Distance à laquelle le grondement commence et le ciel se met à tourner.
rebuildStormstrueÀ faux, la météo vanilla reprend son apparence d'origine.
cloudFlashesPerMinute34Éclairs purement visuels tirés dans le nuage, ce qui l'allume de l'intérieur.
funnelFlashesPerMinute9Éclairs tirés dans l'entonnoir lui-même une fois qu'il est au sol.
extraLightningtrueÀ faux, il ne reste que les impacts que vanilla aurait faits.
Groupe tornado, la forme et la vie d'un entonnoir
OptionDéfautCe que ça déplace
coreRadiusAtEf06.0Rayon du cœur de la plus faible. Tout le reste se met à l'échelle là-dessus.
radiusGrowthExponent1.5Vitesse à laquelle le cœur s'élargit quand le vent monte.
lifespanMinTicks2400Vie la plus courte, deux minutes. La plupart ne durent pas davantage.
lifespanMaxTicks14400Vie la plus longue, douze minutes, celle de la rare tornade à longue trace.
travelSpeed8.0Vitesse de déplacement du système sur le sol, en blocs par seconde.
trackWander1.6Écart de cap autorisé, en degrés par seconde. À zéro la trace est une droite.
turbulence0.22Amplitude du bruit qui s'ajoute au champ analytique, en fraction du vent local.
cloudBaseAltitude183.0Altitude de la base nuageuse. C'est là que Photon pose ses cumulus par défaut.
formingFraction0.12Part de la vie passée à descendre avant de toucher le sol.
ropeOutFraction0.18Part de la vie passée à s'étirer en corde et à mourir.
Groupe damage, ce qui casse et ce qui vole
OptionDéfautCe que ça déplace
breakBlockstrueÀ faux, rien ne sort du sol et il ne reste que le vent avec ce qui est déjà en l'air.
blockBudgetPerTick96Blocs examinés par tick, toutes tornades confondues. Tout le coût de la destruction est là.
resistanceScale1.0Multiplie la résistance qu'un bloc doit encaisser. Sous un, les murs tiennent.
dropItemsfalseÀ vrai, un bloc emporté laisse son objet. Par défaut ce que le vent prend est perdu.
maxDebris220Débris lourds portés en même temps par une tornade, chacun étant une vraie entité.
debrisSettlesfalseÀ vrai, un débris repose son bloc là où il tombe et la trace se reconstruit derrière.
damageEntitiestrueÀ faux, le vent et les débris ne blessent plus rien.
damageScale1.0Multiplie chaque point de dégât, celui du vent comme celui des impacts.
liftPlayerstrueÀ faux, les joueurs restent au sol. Les mobs et les objets volent quand même.
liftThreshold18.0Vitesse de vent sous laquelle plus rien n'est soulevé, en blocs par seconde.
Groupe compute, où tournent les maths
OptionDéfautCe que ça déplace
useGputrueInterrupteur d'arrêt. Sans périphérique, le processeur prend le travail sans qu'on touche à rien.
gpuDeviceIndex-1Rang dans la liste plate des périphériques OpenCL. Négatif choisit tout seul.
gpuWorkgroupSize0Taille du groupe de travail. Zéro laisse le pilote décider, ce qui est le bon réglage.
advectionThreads0Fils du pool processeur. Zéro veut dire le nombre de cœurs moins deux.
advectionBatch4096Débris confiés à un envoi. Petit cache la latence, grand amortit le transfert.
Groupe look, côté client uniquement
OptionDéfautCe que ça déplace
funnelSteps40Pas de la traversée du volume. Sous seize, la paroi se met à faire des bandes.
funnelLightSteps6Pas vers la lumière pour l'ombre interne. Zéro aplatit complètement l'entonnoir.
funnelDetail1.8Taille du plus petit filament visible, en blocs. Plus fin demande plus de pas.
funnelRenderDistance1024.0Distance au-delà de laquelle la tempête n'est plus que ciel et son.
screenShaketrueÀ faux, l'écran ne bouge plus quand le vent bouge.
postEffecttrueÀ faux, plus d'assombrissement, plus de traînées, plus de flash.
skyGreen0.55Part du vert que prend la couleur du monde sous une tornade, de 0 à 1.

Cinq groupes, pas cinq fichiers. Le nom d'un groupe dans le JSON vient de la classe qui porte l'option, donc storm, tornado, damage, compute et look. Une option ajoutée au code arrive dans son groupe sans qu'on la câble ailleurs, et une option déplacée d'un groupe à l'autre reste lue: la clé cherchée est le nom de l'option, pas le chemin complet.

Aucune option morte. L'outillage de développement est compilé dans une source à part et ne se trouve pas dans le jar livré. Ce qui apparaît dans le fichier est ce qui pilote vraiment quelque chose, sans vestige laissé là au cas où.