Sistema de Creación de Mundos en Hytale

Hytale: Guías, Mods, Opiniones | Videojuegos en CIBERED

Hytale permite generar mundos de forma procedural, creando entornos, biomas y estructuras dinámicamente mientras los jugadores exploran.

El sistema de generación de mundos se organiza en tres capas interconectadas:

  • Zones (Zonas) – Regiones a gran escala que definen la estructura general del mundo.
  • Biomes (Biomas) – Características del terreno y el ambiente dentro de cada zona.
  • Caves (Cuevas) – Redes y estructuras subterráneas generadas dentro de las zonas.

Estos sistemas trabajan juntos para crear mundos ricos y variados, con transiciones suaves y coherencia regional.

Explorando el Código de HytaleServer.jar

Conceptos Básicos

  1. Sistema de Zonas – define regiones grandes y diferenciadas.
  2. Sistema de Biomas – controla terreno, vegetación y clima dentro de cada zona.
  3. Sistema de Cuevas – genera estructuras subterráneas y redes de cavernas.

Implementación

Obtener Zonas y Biomas

// Generador de zona
ZonePatternGenerator zoneGen = /* world generator */;
ZoneGeneratorResult zoneResult = zoneGen.generate(seed, x, z);
Zone zone = zoneResult.getZone();

// Obtener bioma dentro de la zona
BiomePatternGenerator biomeGen = zone.biomePatternGenerator();
Biome biome = biomeGen.generateBiomeAt(zoneResult, seed, x, z);

// Verificar cuevas en la zona
CaveGenerator caveGen = zone.caveGenerator();
if (caveGen != null) {
    CaveType[] caveTypes = caveGen.getCaveTypes();
    // Generar cuevas según necesidad
}

Crear una Zona Personalizada

// Configuración de descubrimiento
ZoneDiscoveryConfig discovery = new ZoneDiscoveryConfig(
    true,                           // Mostrar notificación
    "Custom Zone",                  // Nombre visible
    "zone.forest.discover",         // Sonido al descubrir
    "icons/forest.png",             // Icono
    true,                           // Zona importante
    5.0f, 2.0f, 1.5f                // Duración, fade in, fade out
);

// Patrón de biomas
IPointGenerator biomePoints;
IWeightedMap<TileBiome> tileBiomes;
CustomBiome[] customBiomes;

BiomePatternGenerator biomeGen = new BiomePatternGenerator(
    biomePoints,
    tileBiomes,
    customBiomes
);

// Configuración de cuevas
CaveType[] caveTypes; // Definiciones de cuevas
CaveGenerator caveGen = new CaveGenerator(caveTypes);

// Ensamblar la zona
Zone customZone = new Zone(
    100,                    // ID único
    "new_custom_zone",      // Nombre interno
    discovery,              // Configuración de descubrimiento
    caveGen,                // Generador de cuevas
    biomeGen,               // Patrón de biomas
    uniquePrefabs           // Estructuras únicas
);

Integración de Sistemas

Zonas y Biomas

Cada zona define su propio patrón de biomas:

Zone zone = zoneGen.generate(seed, x, z).getZone();
BiomePatternGenerator biomeGen = zone.biomePatternGenerator();
Biome biome = biomeGen.generateBiomeAt(zoneResult, seed, x, z);

Zonas y Cuevas

Cada zona define sus patrones de cuevas:

Zone zone = /* ... */;
CaveGenerator caveGen = zone.caveGenerator();
if (caveGen != null) {
    CaveType[] types = caveGen.getCaveTypes();
}

Biomas y Cuevas

Las cuevas utilizan máscaras de bioma para controlar su ubicación:

Int2FlagsCondition biomeMask = caveType.getBiomeMask();
int biomeId = biome.getId();
int flags = biomeMask.eval(biomeId);

// Verificar si la cueva puede generarse en este bioma
if (CaveBiomeMaskFlags.canGenerate(flags)) {
    // Generar cueva
}

Transiciones de Bordes

Todos los sistemas respetan los límites de la zona:

ZoneGeneratorResult result = zoneGen.generate(seed, x, z);
double borderDistance = result.getBorderDistance();

// Aplicar fade a biomas personalizados cerca de los bordes
if (borderDistance < customBiome.getFadeContainer().getMaskFadeSum()) {
    double factor = customBiome.getFadeContainer().getMaskFactor(result);
    // Aplicar efecto de desvanecimiento
}

Conclusión

Esta guía te proporciona una base sólida para crear zonas, biomas y cuevas personalizadas en Hytale, asegurando que cada capa del mundo procedural se integre correctamente y respete las transiciones naturales entre regiones.