LethalBreed manuel de siège Meutes Manuel English

Meutes et migration

Les zombies isolés s'agrègent en meutes, les meutes traversent le monde pour leur propre compte, et une meute que personne ne regarde est dématérialisée jusqu'à ce que quelqu'un approche. Rien de tout cela ne vise un joueur : une meute choisit sa destination à partir de son cap et d'une marche aléatoire à graine, jamais à partir de l'endroit où quelqu'un se tient. La règle est tenue par un test, PackNoPlayerAccessTest, qui casse le build si quoi que ce soit sous pack/ touche seulement à une position de joueur.

La conséquence vaut d'être sue avant de lire les nombres : une meute qui arrive sur ta base n'est pas venue pour toi. Elle passait.

Former, tenir, rompre

Un zombie seul n'envisage une meute que s'il a au moins packMinNeighbours voisin, et il prend cette décision une activation sur packDecisionDivisor, en inspectant au plus packScanCap voisins. Ces trois nombres font tout le coût du système dans une horde dense.

Une meute neuve demande 3 zombies dans le voisinage pour apparaître à partir de rien. Une fois qu'elle existe, un zombie la rejoint dès que son barycentre est à moins de 24 blocs, jusqu'à un plafond dur de 24 membres.

Partir est volontairement plus difficile que rejoindre. Un membre doit dériver au-delà de 40 blocs du barycentre, bien plus loin que les 24 auxquels il l'a rejointe, et y rester packStrayActivations activations d'affilée avant de partir vraiment. Sans cette hystérésis, un zombie qui contourne un mur perdrait sa meute. Sous 2 membres une meute se dissout, mais seulement après 200 ticks de grâce.

Fusion

Deux barycentres distants de moins de 32 blocs sont candidats à la fusion, et ils ne fusionnent que si leurs caps s'accordent : le produit scalaire des deux directions doit atteindre packMergeHeadingDot. Sans ce second test, des meutes qui se croisent en sens inverse fusionneraient quand même, et toute la population du monde s'effondre en une seule masse.

Migration

Une meute choisit une destination entre 96 et 384 blocs, en tournant au plus de 45 degrés par rapport à son cap. Borner le virage est ce qui fait lire le trajet comme une migration ; sans borne, il se lit comme un mouvement brownien. Elle se compte arrivée à 8 blocs, puis marque une pause de 200 ticks plus un aléa jusqu'à 100, pour que les meutes ne bougent pas toutes au même pas.

Hors de vue, la meute est simulée grossièrement à packVirtualSpeed, environ 40 pour cent de la vitesse de marche d'un zombie, ce qui rembourse les détours de terrain qu'une ligne droite ne prend jamais. Les membres visent un point de passage à 24 blocs devant le barycentre plutôt que la destination elle-même : le système de niveau de détail classe sur la distance au point visé, donc une destination à des centaines de blocs gèlerait précisément les zombies qu'elle devait faire marcher.

Quand il n'y a tout simplement pas de chemin, packStuckActivations activations sans progresser font renoncer la meute, qui choisit ailleurs. Et par défaut les meutes voyagent de nuit : packMigrateAtDay est désactivé, donc le sommeil diurne du mod l'emporte et une meute ne brûle pas au soleil sous la phase d'immunité.

Hors de vue, dématérialisée

Une meute que personne ne peut voir cesse d'exister comme entités et continue d'exister comme meute. Toutes les 20 ticks, un balayage regarde chaque meute, pas chaque zombie, et une meute trouvée sans tick d'entité pendant 40 balayages consécutifs est dématérialisée. C'est un délai de grâce et pas un minuteur, à dessein : le déchargement de chunk a été mesuré dans ce projet à 2, 35, 272 et une fois plus de 1200 ticks, donc une observation seule ne prouve rien.

À l'approche, les membres reviennent dispersés sur 6 blocs pour que la meute ne réapparaisse pas en colonne, et un membre de retour rejoint la sienne depuis jusqu'à 64 blocs. Un fantôme qui échoue 5 fois à revenir est abandonné.

Son propre interrupteur. packVirtualEnabled est tenu à part de packMigrationEnabled parce que rien d'autre dans le système ne crée ni ne détruit d'entités. Un opérateur qui le soupçonne doit pouvoir l'arrêter seul, sans arrêter aussi la migration. Désactivé, il laisse simplement les meutes matérialisées, ce qui coûte plus cher.

Ce qui survit à un redémarrage

Les meutes sont écrites dans la sauvegarde du monde, à la fermeture comme à chaque sauvegarde automatique, donc une coupure ne les perd plus. Composition, barycentre, cap et destination reviennent tels quels.

Configuration

PackConfig
ChampDescriptionDéfaut
packEnabledInterrupteur maître. Désactivé, aucune meute n'est jamais formée et la décision par zombie retourne aussitôt.true
packCohesionRadius / packBreakRadiusDistance de ralliement au barycentre, et distance bien plus grande qu'un membre doit dépasser avant de commencer à dériver.24.0 / 40.0
packFormMinSize / packMinSize / packMaxSizeZombies nécessaires pour former une meute à partir de rien, effectif sous lequel elle se dissout, plafond dur de membres.3 / 2 / 24
packMinNeighbours / packDecisionDivisor / packScanCapVoisins avant qu'un zombie seul envisage une meute, une décision sur tant d'activations, voisins inspectés par décision.1 / 8 / 16
packStrayActivations / packDissolveGraceTicksActivations hors de portée d'affilée avant qu'un membre parte, et durée pendant laquelle une meute peut rester sous-dimensionnée.3 / 200
packsPerTickMeutes visitées par tick serveur, à tour de rôle : barycentre, sonde de fusion, test de dissolution.4
packMergeRadius / packMergeHeadingDotDistance entre deux barycentres pour être candidats à la fusion, et accord minimal de leurs caps.32.0 / 0.5
packMigrationEnabledDésactivé, les meutes se forment et restent cohésives mais ne choisissent jamais de destination.true
packLegMin / packLegMax / packTurnDegreesPlus courte et plus longue étape de la marche aléatoire, et changement de cap maximal par étape.96 / 384 / 45.0
packVirtualSpeed / packMarchLeadBlocs par tick hors de vue, et distance devant le barycentre où le point de passage commun est planté.0.09 / 24.0
packArriveDistance / packDwellTicks / packDwellJitterTicksDistance qui compte comme arrivée, pause sur place, et aléa appliqué à cette pause.8.0 / 200 / 100
packStuckActivations / packMigrateAtDayActivations sans progresser avant de choisir une nouvelle destination, et migration en plein jour ou non.8 / false
packVirtualEnabled / packMaterializeInterval / packDematGraceTicksDématérialiser les meutes que personne ne voit, ticks entre deux balayages, balayages sans être vue avant de partir.true / 20 / 40
packSpawnSpread / packMaterializeRetries / packRejoinRadiusRayon de dispersion des membres restaurés, échecs de restauration avant d'abandonner un fantôme, distance depuis laquelle un membre de retour peut rejoindre.6 / 5 / 64.0