Hola a todos, AL aquí. Bienvenidos al primer vistazo detrás de escena de Mortumus.
Mientras Fin está enterrado en las minas del servidor peleando con bases de datos, suscripciones y toda esa aterradora magia de sistemas distribuidos que mantiene el mundo vivo, yo estoy del otro lado asegurándome de que cada golpe de espada, cada pisada, cada parpadeo de antorcha y cada pieza de armadura realmente se vea y se sienta bien en tu pantalla.
Construir un MMO de fantasía oscura no es algo que puedas armar arrastrando y soltando desde un asset store. La sensación cruda y oldschool que buscamos (el peso del combate, el crujido de tu armadura, el terror de ver a otro jugador en el horizonte) solo aparece cuando las herramientas debajo están construidas específicamente para eso. Así que hoy voy a correr la cortina sobre algunos de los sistemas Unity personalizados que hemos ido armando del lado del cliente: los que nadie va a ver nunca, pero que todos van a sentir.
Vamos a ello.
Visuales, Loot y privacidad en PvP
Si hay una verdad sobre los jugadores de MMO, es esta: amamos el equipo. Y en un juego full loot PvP como Mortumus, el equipo no es solo un chute de dopamina, es información. Lo que alguien lleva puesto te dice lo que puede hacerte.
Guárdalo en secreto, guárdalo seguro: Equipment Visualizer
Temprano nos dimos cuenta de que teníamos un problema que muchos MMOs ignoran en silencio: si el cliente conoce el ID exacto de cada pieza de equipo de cada jugador visible, un tramposo decidido puede sacar eso de la memoria y conocer tus stats exactas antes de decidir emboscarte.
Así que nuestro Equipment Visualizer hace algo un poco paranoico. Para tu propio personaje, lee del servicio de equipo completo: ves todo sobre tu equipo. Pero para cada otro jugador, solo lee un blob de "visuales" recortado que el servidor publica. Ves la espada, no la hoja de stats. Los IDs de ítems de los desconocidos simplemente nunca salen del servidor de Fin.
Es algo pequeño. También hace que los cheats de memory scraping sean mucho menos útiles. Buen trato.
La pila de animaciones
El combate basado en habilidad vive o muere por la animación. Si el windup no se lee bien, no puedes reaccionar. Si el golpe no conecta, el combate se siente sin peso. Si la muerte parece que el modelo simplemente... se apaga, pierdes la mitad de la atmósfera.
Player Animation Coordinator
Empezamos como la mayoría: una clase gigante de controlador de animaciones intentando manejar todo. Movimiento, hechizos, muerte, impactos, idles, todo en el mismo archivo. En unas dos semanas era un desastre.
Así que lo separamos. Ahora el Player Animation Coordinator es un punto de entrada diminuto que levanta una pila de módulos pequeños y especializados: movimiento, rotación, ataque, hechizo, reacciones a impactos, muerte, idles. Cada uno hace un trabajo. Cada uno se lee por sí solo. Los bugs toman minutos en vez de horas para rastrear.
Código más limpio para mí. Combate más ajustado para ti.
Respuesta del combate: Attack Animator & Spell Animator
Aquí está el problema clásico de los MMO: el combate server-authoritative es la única forma de parar las trampas, pero esperar a que el servidor confirme cada cast se siente como melaza.
Nuestro Spell Animator hace un poco de trampa, pero de forma honesta. Cuando presionas tu tecla de hechizo, la animación de cast se reproduce inmediatamente, predicha localmente, para que se sienta instantánea. Luego el servidor de Fin valida si el cast era realmente legal (cooldown pasado, suficiente mana, objetivo válido, etc.). Si lo confirma, nada cambia. Si lo rechaza, salimos limpiamente de la animación.
El Attack Animator hace la misma danza para el cuerpo a cuerpo, e incluso escala la velocidad del swing para coincidir con la cadencia que el servidor indica para tu arma. Tus ojos ven combate responsivo. El servidor ve un mundo al que no se le puede mentir.
Ese punto dulce entre "se siente bien" y "juega limpio" es donde vive todo este juego.
Los sonidos del reino
El audio es el 50% de la atmósfera, y la gente siempre subestima cuánto trabajo lleva.
Estableciendo la atmósfera: Audio Manager & Music Region System
Los juegos tradicionales suelen cambiar la música con un corte brusco cuando cruzas una línea invisible. Es chocante. Nosotros lo hacemos con zonas poligonales 3D. El Music Region System nos deja pintar áreas de forma arbitraria en el mundo (una arboleda embrujada, una capilla maldita, la aproximación a un boss), y conforme entras y sales, el Audio Manager hace crossfade de la banda sonora suavemente. Sin cortes. Sin reiniciar la misma pista si apenas rozas el límite.
Y como todo esto corre a través de fuentes de audio agrupadas con enrutamiento por grupo de mezcla, no cuesta prácticamente nada en presupuesto de frames.
El Character Audio Manager
Cada pisada en Mortumus está conectada a la animación de tu personaje y a la superficie bajo tus pies: la piedra suena a piedra, el barro suena a barro. Los sonidos de hechizos están ligados a la habilidad, los swings de arma al arma. El Character Audio Manager se sienta entre los eventos de animación y el Audio Manager para que podamos cambiar packs de SFX por raza/clase sin tocar código de gameplay.
Cosas pequeñas. Muchas de ellas. Se acumulan.
La orilla del agua
Todo mundo de fantasía oscura tiene agua. Pantanos, ríos, ruinas inundadas, el mar al borde de un cabo maldito. Y el agua es una de esas cosas que se ve falsa muy fácilmente, especialmente donde se encuentra con la tierra. Esa fea línea de agua poligonal donde el mesh cruza el terreno es la marca de un juego que se ve barato.
Nuestra base de agua
No construimos nuestro agua desde cero. Unity en realidad incluye un proyecto demo fantástico llamado Boat Attack que incluye uno de los mejores sistemas de agua URP que existen: reflejos reales, refracciones, flotabilidad, todo el paquete. Así que empezamos con el agua de Boat Attack como base, porque reinventar la rueda nos habría costado meses sin beneficio real.
Pero Boat Attack fue construido para, bueno... botes. Líneas costeras oceánicas bonitas y limpias. El comportamiento costero que se ve genial en una playa de arena se ve terrible alrededor de los cursos de agua fangosos, llenos de juncos e irregulares que realmente queremos en Mortumus. Así que tuvimos que ser quirúrgicos.
El shader personalizado: Water Shoreline
En vez de editar el paquete de Unity directamente (lo cual se habría roto con cada actualización), escribimos un shader personalizado fino "WaterShoreline" que reemplaza solo la pieza del pipeline responsable de la orilla. Todo lo demás (reflejos, flow maps, caustics) viene directo de Boat Attack. Solo sobreescribimos lo que necesitamos.
Los dos grandes cambios:
El corte duro de espuma a 2 metros desapareció. La banda de espuma por defecto de Boat Attack tiene un corte de profundidad fijo, que te da ese "anillo blanco" uniforme alrededor de cada orilla. Lo reemplazamos con un falloff más suave más un campo de ruido que se desplaza, para que la espuma ahora se desvanezca gradualmente y se rompa en lenguas y dedos orgánicos en lugar de una cinta perfecta.
Alpha suave en la orilla. ¿Ese problema de la línea de agua poligonal contra el terreno? Hacemos fade del agua misma hacia transparente en el último medio metro de profundidad. La línea de agua desaparece por completo. El terreno simplemente se oscurece conforme se sumerge, tal como lo hace una orilla mojada real.
Nuestro sistema de ríos
El tema con el agua de Boat Attack es que, de fábrica, maneja los océanos hermosamente, pero realmente no sabe qué es un río. El agua puede ondular en su sitio, pero no puede fluir río abajo y alrededor de una curva como lo hace un río real. Eso es un problema cuando la mitad de tu mundo de fantasía oscura se supone que sea pantanoso, fluvial y empapado.
Así que construimos un sistema de ríos encima.
Un río en Mortumus se crea como un camino de flujo: una simple polilínea de puntos que traza la columna vertebral del río desde la fuente hasta la desembocadura. Los diseñadores colocan los puntos donde quieren que fluya el agua, y el shader hace el resto: para cada pixel de superficie de agua, determina qué segmento del camino de flujo está más cerca y usa la dirección de ese segmento como corriente local. Resultado: el agua cerca de una sección recta fluye recto, el agua en el interior de una curva se curva con la curva, y todo transiciona suavemente entre ambos.
Las texturas, normales y la espuma se desplazan a lo largo de esa dirección de flujo en vez de derivar sin rumbo. Realmente puedes ver hacia dónde va el río.
Todo es ajustable en vivo desde ShoreFoamTuner, un pequeño componente inspector que ponemos en cualquier escena con agua. Sliders para suavidad de la espuma, escala de ruido, intensidad del ruido, velocidad de deriva, falloff de alpha. Cambia la atmósfera de un lago entero sin tocar un material.
Comunidad y trash talk: Chat & Social
Un MMO oldschool es tanto sobre las personas como sobre el juego. Si las herramientas sociales se sienten mal, el mundo se siente vacío.
Overhead Chat System
Texto anclado justo sobre la cabeza de un personaje, siguiéndolo mientras se mueve, desvaneciéndose con la distancia: es un clásico absoluto del género, y algo por lo que vamos a luchar hasta el final.
Convierte a los grupos en conversaciones reales. Te deja hablar basura a alguien en plena pelea. Deja que las últimas palabras de un jugador moribundo sean algo tonto y gracioso en vez de una línea de log del sistema. El Overhead Chat System maneja pooling, culling por distancia y seguimiento de anclaje para que escale incluso cuando veinte personas se gritan entre sí en un calabozo estrecho.
Viéndose bien
Sé honesto: vas a pasar una cantidad vergonzosa de tiempo en la pantalla de personaje. Todos lo hacemos. Es el espejo más bonito del juego.
El sistema de vista previa del personaje
Nuestro paper doll no es un render 2D estático: es una escena 3D en vivo renderizada en una render texture de UI. Iluminación completa, geometría real, cada pieza de equipo en ti en tiempo real. Rótalo, haz zoom, quédate mirándolo. Es el tipo de feature que no cambia nada del gameplay, y cambia absolutamente cómo se siente ser dueño del juego.
Llenando las bolsas: Icon Studio
Aquí va un pequeño secreto sucio del desarrollo de MMOs: los iconos. Necesitas cientos de ellos. Cada espada, cada poción, cada pieza de loot basura que encuentras en un cofre necesita su propio cuadradito de 64x64 que se lea bien en un inventario abarrotado. Y todos necesitan verse como si pertenecieran al mismo juego.
No puedes simplemente hacer un screenshot de un modelo 3D y listo. La iluminación tiene que ser consistente. El ángulo de cámara tiene que ser consistente. Y (esta es la parte que todos subestiman) el encuadre tiene que coincidir con el tamaño de cuadrícula que el ítem ocupará en el inventario. Una daga 1x1 y un espadón 2x3 necesitan composiciones totalmente diferentes o los dos se ven mal.
Nuestra solución: Icon Studio
Icon Studio es una ventana de editor de Unity personalizada que construimos para que una persona (generalmente yo, murmurando) pueda producir cien iconos consistentes sin perder la cordura.
El flujo de trabajo: mete una lista de prefabs de ítems. Dile a la herramienta qué tamaño de cuadrícula ocupa cada uno en el inventario: 1x1, 2x2, 2x3, 1x4, lo que sea. Encuadra la cámara una vez. Guarda el encuadre como preset. Dale a Generar.
La magia es que el tamaño de cuadrícula no es cosmético: controla el render real. Un ítem 2x3 se renderiza a 2x de ancho y 3x de alto (de una base de 512px), así que cuando está en tu inventario las proporciones son correctas, no estiradas. Una espada larga genuinamente llena un slot 1x4 en diagonal. Una botella de poción genuinamente cabe en 1x1. El inventario se siente como si estuvieras organizando objetos reales.
Además de eso, la herramienta maneja: fondos transparentes o personalizados por ítem, captura de bone pose para que ítems basados en esqueleto puedan guardar su pose de exhibición sin alterar el rig de gameplay, y presets para categorías enteras de ítems: todas las hachas se renderizan con la misma cámara, todas las pociones con otra. Consistencia gratis.
El resultado final es que cada icono en el juego (los que se leen bien a 32 pixeles en una cuadrícula de inventario densa) fue renderizado desde el modelo real del juego, con la forma real que el ítem ocupa en tu bolsa. Sin arte 2D tercerizado. Sin iluminación inconsistente. Sin daga que de algún modo se ve más grande que un espadón en la UI.
Es el tipo de herramienta que nadie ve. También es la razón por la que el inventario no parece una bolsa de stock art mezclado.
Hasta la próxima
Ninguno de estos sistemas es un feature estelar de Mortumus. Nadie va a comprar el juego porque las pisadas suenan bien o porque los esqueletos explotan en pedazos con física. Pero estos son los huesos debajo de todo: el trabajo invisible que hace que las cosas grandes se sientan bien cuando se apoyan encima.
Con estas bases en su lugar, Fin y yo podemos construir el verdadero mundo sombrío, brutal y full loot que hemos estado garabateando en cuadernos durante dos años, a un ritmo que no nos haga querer lanzar nuestras computadoras a un río.
— AL