Saltar al contenido principal

Agregar una criatura

Guía para agregar una nueva criatura al juego — desde la definición de entidad hasta las reglas de spawn.


Archivos que vas a tocar

ArchivoQué define
assets/common/entity/wild/Plantilla RON de la criatura
assets/common/abilities/Habilidades que usa en combate
world/src/layer/wildlife.rsReglas de spawn por bioma
assets/world/wildlife/Tablas de spawn en RON

Paso 1: Crear la plantilla de entidad

Las criaturas van en assets/common/entity/wild/ organizadas por tipo:

assets/common/entity/wild/aggressive/cave_troll.ron
assets/common/entity/wild/peaceful/deer.ron

Ejemplo — trol de cueva:

EntityConfig(
name: Name("Trol de Cueva"),
body: Body(
kind: BipedLarge(BipedLargeBody(
species: Troll,
body_type: Male,
)),
),
alignment: Alignment::Enemy,
loot: LootSpec::LootTable(
"common.loot_tables.creatures.biped_large.troll",
),
skillset_asset: Some("common.skillset.biped_large.troll"),
flee_health: 0.1,
idle_wander_factor: 0.5,
aggro_range: 15.0,
)

Ejemplo — ciervo (criatura pacífica):

EntityConfig(
name: Name("Ciervo"),
body: Body(
kind: QuadrupedMedium(QuadrupedMediumBody(
species: Deer,
body_type: Male,
)),
),
alignment: Alignment::Wild,
loot: LootSpec::LootTable(
"common.loot_tables.creatures.quadruped_medium.deer",
),
skillset_asset: None,
flee_health: 0.5,
idle_wander_factor: 1.0,
aggro_range: 0.0,
)

Campos clave

CampoDescripción
alignmentWild (huye), Enemy (ataca), Passive (ignora)
flee_health% de vida al que empieza a huir (0.0 = nunca huye)
aggro_rangeRadio en el que detecta y ataca jugadores
idle_wander_factorQué tanto deambula cuando está en calma
skillset_assetHabilidades de combate. None para criaturas sin ataque

Paso 2: Crear la loot table

Creá la tabla de loot en assets/common/loot_tables/creatures/:

// assets/common/loot_tables/creatures/biped_large/troll.ron
LootSpec::MultiDrop(
drops: [
(1.0, LootSpec::Item("common.items.crafting_ing.stone.granite")),
(0.6, LootSpec::Item("common.items.crafting_ing.leather.tough_leather")),
(0.2, LootSpec::Item("common.items.weapons.hammer.troll_hammer")),
],
)

Paso 3: Definir reglas de spawn

Agregá la criatura a la tabla de wildlife del bioma donde debe aparecer. Las tablas están en assets/world/wildlife/:

// En la tabla del bioma correspondiente (ej. mountains.ron)
SpawnEntry(
name: "cave_troll",
rules: [
SpawnRule(
// spawnea cerca de cuevas y en zonas rocosas
min_time: NoDawn,
max_time: NoDawn,
threshold: 0.3,
group_size: (1, 2),
entity: EntityConfig(
asset: "common.entity.wild.aggressive.cave_troll",
),
),
],
),

Alternativamente, podés registrar el spawn en código en world/src/layer/wildlife.rs si necesitás lógica más compleja (spawn condicional a bioma calculado, densidad variable, etc.).


Paso 4: Asignar habilidades de combate

Si la criatura ataca, creá o reutilizá un skillset en assets/common/skillset/:

// assets/common/skillset/biped_large/troll.ron
SkillSetConfig(
guard_resist: 0.6,
body_size_modifier: 1.5,
primary: Some("common.abilities.biped_large.troll.basic_attack"),
secondary: Some("common.abilities.biped_large.troll.shockwave"),
abilities: [],
)

Y las habilidades individuales en assets/common/abilities/biped_large/troll/:

// basic_attack.ron
BasicMelee(
energy_cost: 0.0,
buildup_duration: 0.6,
swing_duration: 0.2,
recover_duration: 0.5,
melee_constructor: MeleeConstructor(
kind: Bash,
scaled: None,
range: 4.0,
angle: 45.0,
damage: 28.0,
knockback: 15.0,
poise_damage: 50.0,
),
)

Paso 5: Verificar en juego

cargo build
cargo run --bin xindeler-server

Para spawnear la criatura directamente y probarla sin buscarla en el mundo:

/summon common.entity.wild.aggressive.cave_troll

Verificá:

  • Modelo y nombre correcto
  • Comportamiento de combate (aggro, huida)
  • Loot al morir
  • Que no crashee el servidor al morir o al salir del rango de un jugador

Paso 6: Commitear

git add assets/common/entity/wild/aggressive/cave_troll.ron
git add assets/common/loot_tables/creatures/biped_large/troll.ron
git add assets/common/skillset/biped_large/troll.ron
git add assets/common/abilities/biped_large/troll/
git add assets/world/wildlife/mountains.ron # si lo modificaste
git commit -m "feat: add cave troll creature with loot and spawn rules"