Apariencia
Jugabilidad - Documentación Técnica
Esta documentación está dirigida a desarrolladores. Para información sobre el juego dirigida a jugadores, ver Jugabilidad. Para los hechizos disponibles, ver Hechizos.
Networking y Sincronización
Arquitectura de Red
El juego utiliza una arquitectura de servidor autoritativo donde el servidor tiene la última palabra sobre el estado del juego.
Tickrate y Timing
- Tickrate del servidor: 50 Hz (cada 20 ms) —
SERVER_CONFIG.TICK_INTERVAL_MS = 20. - Movimiento por tiles: 1 tile cada 200 ms a velocidad normal (
STEP_DURATION_MS = 200, 10 ticks), escalado por elmoveSpeeddel entity. - Predicción + reconciliación: el cliente predice su propio movimiento y reconcilia con la confirmación del servidor. Ver Movimiento › detalle.
- Sincronización por AOI: solo se sincronizan las entidades cercanas al jugador (Area of Interest), no toda la sala.
Mensajería Cliente-Servidor
Cliente → Servidor:
MOVEcondirectionmientras una tecla está presionada.STOP_MOVEal soltar las teclas de movimiento.ATTACKpara realizar un ataque.CAST_SPELLpara lanzar un hechizo (conspellIdy opcionalmente target).TOGGLE_SPELLpara prender/apagar auras toggle.INTERACT_NPCpara abrir vendor de items o de hechizos.BUY_SPELLpara aprender un hechizo en el maestro.CHATpara enviar mensajes.- Otros comandos según se implementen.
Servidor → Cliente:
- Estado sincronizado de jugadores y NPCs mediante Colyseus Schema.
- Posiciones (
x,y), estados y nombres. - Atributos finales (HP, Mana) incluyendo modificadores de items.
Sincronización de Atributos
- Los atributos (HP, Mana) se sincronizan con los valores finales (incluyendo modificadores de items).
- El servidor calcula los atributos finales en cada tick usando
getFinalAttributes(). - El cliente recibe estos valores y los muestra en el HUD.
- No se sincronizan valores base: Solo los valores finales calculados.
Sincronización de Entidades
Jugadores
- Cuando dos jugadores se conectan a la misma sala:
- Cada uno ve al otro moverse en el mapa en tiempo real.
- El servidor sincroniza las posiciones (
x,y), estados y nombres mediante Colyseus Schema. - Los atributos (HP, Mana) se sincronizan con los valores finales (incluyendo modificadores de items).
- Las posiciones se sincronizan mediante Colyseus Schema.
- El heading (dirección) se actualiza según el último movimiento válido.
NPCs
- Los templates viven en
shared/data/npcs.ts(fuente única de verdad); el placement por mapa va enshared/maps/*.json. - Los NPCs hostiles tienen IA completa: aggro, pathfinding A*, persecución y combate (melee y spells). Ver la guía del jugador en NPCs y criaturas y, para devs, la sección de AI en la documentación del servidor.
- Los NPCs amigables (vendedores, maestros, sacerdote, reclutadores, reyes) responden a la interacción por click.
- Se sincronizan mediante Colyseus Schema igual que los jugadores, filtrados por AOI.
Colyseus Schema
El juego utiliza Colyseus Schema para la sincronización eficiente de estado:
- Ventajas: Solo se envían los cambios (delta compression).
- Estructura: Cada entidad tiene su propio Schema que se sincroniza automáticamente.
- Rendimiento: Optimizado para minimizar el tráfico de red.