Crear personajes no controlables
Cualquier unidad que no sea un héroe puede denominarse «personaje no controlable» (o «NPC» a partir de ahora). Ejemplos de NPC son mensajeros, unidades invocadas y guardianes. Hay requisitos específicos para ellos que difieren de los artículos diseñados para héroes. Los artículos para héroes pueden basarse en la jerarquía preexistente de articulaciones, fijaciones, volúmenes de selección y de efectos y animaciones. Los NPC necesitarán que todas esas cosas se adapten a sus necesidades y objetivos. Puedes usar cualquiera de los diversos modelos que ya hemos enviado para ver ejemplos de cómo hemos creado cualquiera de los siguientes de abajo.

Debido a que los NPC son un poco más técnicos que los artículos para héroes, cada categoría de abajo tiene un enlace a más información en la sección de modelado de la wiki de desarrollo de Source.

Descargar el modelo de Burro Mensajero (6,1mb)

Descargar el modelo de Guardián (675 Kb)


Requisitos generales de los NPC

Hay muchas unidades invocadas en el juego que pueden ser reemplazadas por un artículo de economía, y la complejidad de estas puede variar. Un reemplazo para el Jabalí de Beastmaster necesitará animaciones de ataque a diferencia del Guardián Sanador de Juggernaut, pero por lo demás, comparten un conjunto básico idéntico de requisitos. Los NPC que deseen pasar el proceso de aportación deberán cumplir con todos estos requisitos:
  • Los NPC deben tener 2 LoD:
    LoD0 se muestra en el retrato y está limitado a 3500 polígonos.
    LoD1 se usa en cualquier otro lugar y está limitado a 3000 polígonos o menos idealmente.
  • El material está limitado a un tamaño de 512 de alto × 512 de ancho y debe seguir las mismas reglas que los artículos para héroes en lo que respecta a los componentes.
  • Un NPC está limitado a 52 huesos.
  • Debe tener efectos apropiados y cajas de colisión de selección.
  • Los NPC necesitan puntos de «fijación» específicos.
  • Los NPC deben tener animaciones, cuyo número y tipo dependerán de tu tipo de NPC.
    Obtén más información en la sección Modelado de la wiki de desarrollo de Source.

El esqueleto

Cada NPC necesitará al menos un hueso raíz al que no solo aplicaremos la geometría, sino que también lo usaremos como un ancla para las fijaciones y las cajas de colisión. Sin embargo, es muy probable que necesites o quieras usar huesos adicionales. Simplemente recuerda que hay un límite de 52.

Puntos de fijación

Una fijación es un punto con una posición estática y rotación en relación con un hueso en el esqueleto. Usamos puntos de fijación para informar a los efectos de partículas cómo comportarse. Los nombres y la cantidad de archivos adjuntos de tu NPC dependerán de lo que haga tu NPC. Esta es la lista de puntos de fijación que necesitarás y cuándo usarlos. Estos nombres son específicos y distinguen entre mayúsculas y minúsculas.
«attach_hitloc»
Esta fijación es obligatoria para todos los elementos del NPC. «hitloc» significa «ubicación de impacto» y es utilizado por el sistema de partículas para determinar hacia dónde deben viajar los efectos de los proyectiles. Para criaturas u otros NPC orgánicos, el mejor lugar para «attach_hitloc» es un hueso en el área del pecho. Si se coloca en la raíz, que generalmente se encuentra en el área de la cintura, los proyectiles viajan bajo hacia el suelo y es menos atrayente. Para modelos inorgánicos, elige una ubicación que tenga más sentido. Un «attach_hitloc» nunca debe colocarse en el suelo.

«attach_attack1»"
Esta fijación es necesaria para los NPC que pueden atacar o lanzar hechizos. Se usa para determinar desde dónde se crearán y lanzarán los efectos de los proyectiles, pero también se necesita para las unidades cuerpo a cuerpo. Si tu unidad tiene un ataque de proyectil a distancia, coloca la fijación donde desees que se emita el efecto. Para unidades cuerpo a cuerpo, colócala en la «mano» con la que ataca la unidad.

«attach_eye_l» y «attach_eye_r»
Estas fijaciones solo son necesarias para los mensajeros. Úsalos para marcar en qué lugar del mensajero se encuentran sus «ojos». «attach_eye_r» marca el ojo derecho del mensajero, y «eye_l» el izquierdo. Asegúrate de que el eje X apunte en la dirección en que mira el ojo.
Obtén más información en la sección Fijaciones de la wiki de desarrollo de Source.

Cajas de colisión

Las cajas de colisión son volúmenes cúbicos invisibles que se asignan a un hueso. En Dota 2 se utilizan para efectos de partículas, así como para definir la región de selección de un personaje.

Las cajas de colisión utilizadas para los efectos deben abarcar una geometría de NPC con un poco de espacio libre. Si son demasiado pequeñas o apenas se ajustan, la mayoría de los efectos estarán ocultos a la vista. Las cajas de colisión de efectos también deben dividirse en diferentes conjuntos de cajas de colisión que se utilizan para diferentes tipos de efectos de juego. No se crean diferentes conjuntos de cajas de colisión excluyendo a otros. Deberías tener un caja de colisión predeterminada Y una de cabeza alrededor de la geometría de la cabeza, por ejemplo. Los nombres de los conjuntos que necesitarás no se pueden cambiar y son:
default
Las cajas de colisión «default» (predeterminadas) se utilizan para representar la mayoría de los efectos que los héroes pueden lanzar sobre una unidad. Casi todos los huesos de tu NPC deberían tener una caja de colisión predeterminada adjunta que rodee la geometría asociada con ese hueso. La única vez que un hueso no debería tener una caja de colisión predeterminada es si la geometría aplicada a ese hueso puede cubrirse fácilmente con la caja de colisión de otra articulación. Un ejemplo de esto se puede ver en las espinas dorsales de los héroes. Los huesos son pequeños, están muy juntos y no giran mucho individualmente. Por lo tanto, aunque puede haber 4 de ellos, podemos cubrir el torso de un héroe con solo 2 cajas de colisión que aún representan la forma formada por la geometría sin importar la orientación.

head
La caja de colisión «head» debe cubrir la cabeza. Sin embargo, si tu NPC tiene elementos de la geometría de su cabeza que se extienden lejos del elemento principal (por ejemplo, cuernos largos) puedes dejar que se extiendan fuera de la caja de colisión de la cabeza.

hands
Esas van en las manos de un NPC y se usan para efectos relacionados con la velocidad de ataque.

feet
Estas deben abarcar los pies y se utilizan para efectos relacionados con la velocidad de movimiento.

weapon
Si tu NPC tiene un arma, rodéala con una caja de colisión con este nombre de conjunto.

select_low
Esta caja de colisión debe estar asociada con el hueso raíz de los NPC. «select_low» se refiere a una caja de colisión para selección con baja fidelidad. Se usa para determinar el área que un jugador puede usar para seleccionar la unidad cuando no está cerca de ninguna otra unidad. Esta única caja debería abarcar generosamente todo el modelo. Aproximadamente un otro 1/2 ancho del modelo en todos los sentidos. Sin embargo, ten cuidado con lo alto que lo haces o puede comenzar a superponerse a otros modelos de manera indeseable. Por lo general, es seguro trucar la parte superior de esta caja en particular un poco más abajo de la altura real de las geometrías.

select_high
Nuevamente, todas las cajas de colisión de este conjunto deben estar vinculadas al hueso raíz de los NPC. Esta vez, sin embargo, se crean muy ajustadas al modelo, incluso solamente del área principal del "torso". Esta(s) caja(s) debe(n) ajustarse al modelo justo en su centro y se utilizan cuando se superponen 2 unidades de cajas «select_low». De esta forma, cuando 2 o más unidades se acerquen mucho para el combate cuerpo a cuerpo, se puede garantizar que un jugador seleccione la unidad deseada haciendo clic en el centro de la misma.

custom
Las cajas de colisión «custom» (personalizadas) se utilizan en caso de que quieras crear tu propio efecto único y asignarlo a un área de tu NPC.
Obtén más información en la sección Cajas de colisión de la wiki de desarrollo de Source.

Animación

Los NPC necesitarán al menos 1 de cada una de las siguientes animaciones. Puedes realizar cualquier número de variaciones para estas categorías. La lista de abajo es de los nombres de «actividad» con los que necesitarás etiquetar tus secuencias de animación. El nombre de la secuencia que creas puede ser el que quieras; sin embargo, debe tener adjunto el nombre de la actividad correspondiente. Las animaciones son:
ACT_DOTA_SPAWN
Las animaciones de aparición se reproducen cuando se crea un NPC por primera vez. Esta animación debe ser breve, de 30 fotogramas como máximo. La razón de esto es que si el NPC recibe una orden inmediatamente después, la animación de ese comportamiento pisará la aparición. Por lo tanto, una animación de 3 segundos de tu NPC surgiendo del suelo probablemente se cortaría de inmediato.

ACT_DOTA_IDLE
Esta actividad debería de asignarse a cualquier animación que tu NPC reproducirá mientras esté inactivo, esperando algo que hacer.

ACT_DOTA_RUN
Esta actividad es para la animación que usará tu NPC cuando se mueva entre 2 ubicaciones. La animación debe avanzar a una velocidad de su velocidad de movimiento cada 30 fotogramas. Luego debería de ser «extraída de movimiento» a lo largo de su eje de movimiento hacia adelante. Consulta la wiki de desarrollo para obtener más información sobre la extracción de movimiento.

ACT_DOTA_DIE
Esta animación se usa cuando se mata al NPC.

ACT_DOTA_CAPTURE
Esta es la animación que se reproducirá en el marco del retrato. Aquí en Valve, esto generalmente comienza como la animación de inactividad, pero a menudo la inactividad puede moverse demasiado dramáticamente para el marco de retrato pequeño. Así que suavizamos la inactividad y luego creamos animaciones alternativas con menos peso de actividad para que se reproduzcan con menos frecuencia. Estas animaciones alternativas más cortas ayudan a romper la sensación del retrato y lo hacen menos estático.

Dependiendo del NPC que estés reemplazando, es posible que también necesites animaciones del siguiente tipo, etiquetadas de la siguiente manera:
ACT_DOTA_ATTACK
Si tu NPC puede atacar a otra unidad, necesitará al menos una de estas.

ACT_DOTA_CAST_ABILITY_#
Si tu NPC tiene habilidades activas que puede lanzar, deberás etiquetarlo con esta actividad. El «#» debe ser reemplazado por el número entero de la habilidad asociada. Entonces, si miras la unidad en el juego, el # es qué habilidad es, comenzando con 1 a la izquierda.

También puedes optar por agregar estas animaciones, pero no son obligatorias:
ACT_DOTA_IDLE_RARE
Esta(s) animación(es) se reproducirá(n) aleatoriamente si tu NPC ha permanecido inactivo sin órdenes durante un tiempo.
Obtén más información en la sección $sequence de la wiki de desarrollo de Source.

Mensajeros

Todo lo anterior se aplica a la creación de un mensajero, pero los mensajeros tienen algunos requisitos adicionales.

En primer lugar, deben enviarse con un modelo terrestre y otro volador. Ambos modelos deben compartir la misma textura de 512 de alto × 512 de ancho. El mensajero terrestre se mueve a una velocidad de 300 unidades por segundo. La versión voladora se mueve a 350, pero puede moverse hasta a 522 si se le da un subidón de velocidad.

La animación del mensajero terrestre es sencilla, sin embargo, deberías animar la versión voladora como si estuviera volando sobre el suelo en todo menos en la animación de muerte. Esto es necesario porque el mensajero se eleva del suelo a través del código en 160 unidades. Entonces, si deseas que tu unidad se estrelle contra el suelo, deberías finalizar la animación de muerte con la raíz del modelo -160 unidades en el eje vertical desde donde comienza la inactividad.

Hay otro requisito para los mensajeros voladores que caen al suelo al morir: tendrás que animar al mensajero volador muerto hundiéndose en el suelo. Una vez que el mensajero se haya estrellado y se haya quedado quieto en el suelo, mantenlo allí durante dos segundos y luego húndelo muy por debajo del suelo en el transcurso de dos segundos más. El hundimiento en el suelo no ocurre automáticamente para los mensajeros voladores porque algunos de ellos vuelan hacia el cielo al morir.

Para ayudar a mantener las cosas organizadas, mantén nuestra estructura de archivos:
  • El contenido de origen del modelo reside en \content\dota\models\courier\courier_name\maya\
  • El contenido de origen de la animación reside en \content\dota\models\courier\courier_name\maya\animation\
  • El contenido del modelo exportado reside en \content\dota\models\courier\courier_name\smd\
  • El contenido del modelo exportado reside en \content\dota\models\courier\courier_name\smd\animation\
  • Los binarios de modelos compilados pertenecen a \game\dota\models\courier\courier_name\
  • El contenido de origen del material reside en \content\dota\materialsrc\models\courier_name\
  • Los binarios de materiales compilados y .vmt pertenecen a \game\dota\materials\models\courier\courier_name\ y deben tener el mismo nombre que el modelo

Dentro del archivo zip del mensajero encontrarás un archivo .qc de muestra que te ayudará a comenzar. Hay muchos comentarios dentro del archivo .qc (indicados por // al comienzo de una línea) que explican su contenido, y también puedes consultar la documentación de archivos .qc de la wiki de desarrollo de Source para más información.

Guardianes

Puedes pensar en los guardianes como NPC muy simples. Tienen una composición de geometría de 1500 triángulos y necesitan algo de animación, pero no una animación de correr, que suele ser la que consume más tiempo y es más difícil.

Sin embargo, requieren varias máscaras. Una utilizado para el guardián observador y otro para el guardián centinela. Dentro del archivo .qc encontrarás instrucciones sobre cómo realizarlo.

Para ayudarte a mantener las cosas organizadas, mantén nuestra estructura de archivos:
  • El contenido de origen del modelo reside en \content\dota\models\items\wards\ward_name\maya\
  • El contenido de origen de la animación reside en \content\dota\models\items\wards\ward_name\maya\animation\
  • El contenido del modelo exportado reside en \content\dota\models\items\wards\ward_name\smd\
  • El contenido del modelo exportado reside en \content\dota\models\items\wards\ward_name\smd\animation\
  • Los binarios del modelo compilado pertenecen a \game\dota\models\items\wards\ward_name\
  • El contenido de origen del material reside en \content\dota\materialsrc\items\wards\ward_name\
  • Los binarios de materiales compilados y .vmt pertenecen a \game\dota\materials\models\items\wards\ward_name\ y deben tener el mismo nombre que el modelo.

Dentro del archivo zip del guardián encontrarás un archivo .qc de muestra que te ayudará a comenzar. Hay muchos comentarios dentro del archivo .qc (indicados por // al comienzo de una línea) que explican su contenido, y también puedes consultar la documentación sobre archivos .qc de la wiki de desarrollo de Source para más información.