Wiki

Patch Notes
v2026-06-05-3Features#298

Nuevo hechizo: Llamado a Dragón Blanco (Paladín)

  • [#298] Paladines tienen un hechizo nuevo: "Llamado a Dragón Blanco". Cuesta 620 de maná (vs los 1100 de Llamado a Uhkrul del Mago) e invoca un Dragón Blanco de 250 HP.
  • [#298] El Dragón Blanco es una mascota pesada: ocupa los 3 slots completos del cap de mascotas. Si lo invocás, no podés tener otras pets; si tenés pets activas, no podés invocarlo.
  • [#298] El sistema interno de mascotas ahora soporta "peso" por criatura — futuros pets pueden ser medianos (peso 2) o pesados (peso 3) según diseño.
v2026-06-05-2Features#297

Bardos pueden tocar instrumentos para recuperar maná

  • [#297] Los Laúd / Flauta / Tambor (y sus tiers Mágico y Élfico) ahora son funcionales. Solo Bardos pueden tocarlos haciendo doble-click sobre el item.
  • [#297] Cada toque recupera maná según el tier: 5 (común) · 10 (mágico) · 15 (élfico). Cooldown de 5 segundos para que no se transforme en farmeo de maná infinito.
  • [#297] El sonido del instrumento se escucha en el viewport — todos los chars cerca saben que un Bardo está tocando (útil para identificar Bardos invisibles tocando para recuperar maná).
  • [#297] Antes los 9 instrumentos eran items inertes y los 6 mágicos/élficos estaban mal categorizados internamente como anillos. Bardo ahora es una clase con identidad propia.
v2026-06-05Bug fixes#296

Fix: líneas negras entre tiles al caminar

  • [#296] Algunos usuarios reportaban líneas negras finitas entre tiles cuando el personaje se movía. Era un bug de sub-pixel rendering: el browser dejaba un gap del tamaño de una fracción de pixel entre tiles adyacentes, que se veía negro porque el canvas del fondo estaba en modo opaco.
  • [#296] El fix está activo por default — el render ahora alinea los tiles al pixel exacto y desactiva el suavizado de imagen (pixel art crisp).
  • [#296] Si por alguna razón querés el comportamiento viejo (render con sub-pixel float), podés apagarlo en Configuración → "Bordes nítidos de tiles". El toggle persiste por browser.
v2026-06-04-5Balance#295

Rebalance Elfo Drow: -1 Agilidad / +1 Constitución

  • [#295] Elfo Drow ajustado: pierde 1 punto de Agilidad (21 → 20) y gana 1 punto de Constitución (18 → 19).
  • [#295] Si tu char es Elfo Drow ya creado, la migración aplicó automáticamente en la DB — al volver a entrar vas a ver los nuevos atributos.
  • [#295] HP no cambia: la tabla interna que define cuánto HP sube por nivel da el mismo valor para Constitución 18 y 19 (recién C 20 sube +1 HP por nivel). El cambio solo se va a sentir si más adelante movemos esas tablas o agregamos features que escalen con Constitución.
  • [#295] Para chars nuevos: al crear un Elfo Drow ahora arranca con Agilidad 20 y Constitución 19 (antes 21 y 18).
v2026-06-04-4Balance#294

Sastres ya no venden Teleport Sangre

  • [#294] El Teleport Sangre era un consumible reservado para GMs (lo usan para crear portales `/creartp rojo`). Hasta ahora 5 Sastres lo vendían al público — removido del catálogo de los 5.
  • [#294] Si ya tenés algunos en tu inventario, los conservás — solo se cortó la oferta nueva.
v2026-06-04-3Quality of Life#293

Chat: ahora podés seleccionar texto y mandar links clickeables

  • [#293] El chat console ahora permite seleccionar texto con el mouse — copy/paste de nombres, drops, errores y links funciona normal.
  • [#293] URLs (http/https), www, invitaciones de Discord (discord.gg/...) y aoweb.net se renderean automáticamente como links clickeables.
  • [#293] Click en un link abre en nueva pestaña sin afectar el juego (target=_blank, noopener).
  • [#293] Funciona también dentro de whispers: `/w Asuka mira esto https://discord.gg/YsKZjtVuz8` ahora le manda un link real.
v2026-06-04-2Bug fixes#292

Fix crítico: los keybindings y macros se perdían al deslogear

  • [#292] Bug fix crítico: si cambiabas teclas o macros y deslogeabas, al volver a entrar las tenías perdidas. Causa: el server pisaba en cada save los valores con los del login original.
  • [#292] A partir de ahora los 4 tipos de keybindings (acciones, hechizos, items, macros) persisten correctamente entre sesiones y entre browsers — como debería desde el ticket #281.
  • [#292] Si tenías teclas o macros configurados antes de este patch y las habías 'perdido', ahora podés volver a configurarlas y van a quedar guardadas.
v2026-06-04Bug fixes + GM tools#291

Barcas + comando /tp: atajos para GMs y fix de equipar barca en tierra

  • [#290] Fix: ya no se puede equipar la Barca parado en tierra firme — ahora exige tile de agua adyacente (norte/sur/este/oeste), como en el AO clásico.
  • [#291] Comando GM `/telepme` ahora también responde como `/tp` (alias corto).
  • [#291] `/tp` acepta aliases de ciudad: `/tp ulla`, `/tp nix`, `/tp lindos`, `/tp kamal`, `/tp arkhein`, `/tp arghal`, `/tp bander`. Los mismos que ya soportaba `/creartp`.
  • [#291] Si te teleportás a un tile de agua sin barca equipada, ahora se te equipa automáticamente — evita quedar clavado sin poder moverte.
v2026-06-04Quality of Life#283

Chat con tabs: General / Combate / Chat — leer mensajes sin combat log de fondo

  • El chat console ahora tiene 3 tabs minimalistas: General (todo, default), Combate (daños y status), Chat (whispers, chat público, GM, mensajes del servidor).
  • Tab Chat muestra una burbuja con notificación cuando llega un whisper (lila), un mensaje de GM (verde) o un broadcast del servidor (ámbar) — el color del badge es el del último mensaje recibido.
  • Tab Combate no muestra burbuja — el flujo de daños es continuo y no necesita aviso.
  • Chatbox crecida para mostrar ~5 mensajes sin cortes (antes ~3).
  • Mensajes "Te has escondido", "Tienes la mana al máximo", "Has recuperado X", "Ves a [char]" y similares ahora aparecen en Combate (no en Chat).
  • Nombre del char y los iconitos del HUD reorganizados — iconos arriba a la derecha, nombre alineado a la izquierda.
v2026-06-03Performance#282

Performance: server más liviano en zonas pobladas (~16× speedup en broadcasts)

  • Optimización interna del server: los broadcasts de movimiento, animaciones y acciones a otros jugadores cercanos ahora son ~16× más eficientes.
  • Resultado: el ping debería sentirse más estable cuando hay muchas criaturas o jugadores en la misma zona, y el server tiene mucho más margen para escalar a más usuarios concurrentes.
  • Cero cambio visible al gameplay — solo más fluido bajo carga.
v2026-06-03Quality of Life#281

Keybindings (acciones, hechizos, items) ahora persisten por personaje y entre browsers

  • Antes los keybindings vivían solo en localStorage — si cambiabas de browser o hacías clear storage, los perdías.
  • Ahora cada personaje guarda sus teclas en el server. Login desde otro browser → mismos bindings. Hacer clear storage → siguen ahí al re-loguear.
  • Aplica a las 4 fuentes: macros, acciones del modal de Configuración (W/A/S/D/atacar/etc), teclas asignadas a hechizos, y teclas asignadas a items del inventario.
v2026-06-03Features#280

Pets: nuevo sistema con modo Defensivo / Ofensivo + click despawn

  • Click izquierdo en el buff de la mascota → la pet desaparece. Útil para liberar un slot del cap de 3 e invocar otra.
  • Click derecho en el buff → mini-menu con Defensivo / Ofensivo. Default ahora es Ofensivo (la pet busca enemigos sola en un radio chico — ~6 tiles).
  • Defensivo: la pet solo ataca lo que vos atacaste, o lo que te ataque a vos. Mantiene una cola de targets — si el primero muere, vuelve al siguiente automáticamente.
  • Cuando tu pet ataca a una criatura, esa criatura ahora prioriza pegarle a la pet (no a vos). Útil para tankear.
  • Las pets nunca atacan jugadores reales por iniciativa propia — solo si vos los atacaste o ellos te atacaron primero.
  • Cada tipo de mascota (Lobo, Zombie, Dragón Rojo, Elementales) tiene su propio iconito en el buff. Badge encima del icono: escudo (defensivo) o espadita (ofensivo).
v2026-06-03Bugfixes#279

Hechizos de invocación arreglados: Llamado a la Naturaleza y Llamado Nigromante

  • Llamado a la Naturaleza (Druida, skill 40) ahora invoca correctamente 2 Lobos como mascotas. Antes consumía 120 de mana pero no aparecía nada.
  • Llamado Nigromante (skill 51) ahora invoca correctamente 2 Zombies como mascotas. Antes consumía 400 de mana sin efecto.
  • Funcionan igual que los Elementales del ticket de invocaciones: te siguen, atacan al target que vos ataques, duran 3 minutos, y cuentan hacia el cap de 3 mascotas concurrentes.
  • Si ya tenés 3 mascotas y casteás, no se invocan más y NO se descuenta mana.
v2026-06-02Quality of Life#278

Mapa más simple: ahora M abre directo el mapamundi (sin paso intermedio)

  • Antes apretar M te mostraba primero el mapa de la zona donde estás, y recién al apretar M de nuevo (o right-click) ibas al mapamundi. Ahora M abre directo el mapamundi.
  • Desde el mapamundi: click en cualquier celda para ver ese mapa en detalle. M (o right-click) para cerrar/volver.
  • Se eliminó la feature de mostrar enemigos en el mapa (los puntitos naranjas sobre el mapa) — incluyendo el setting en Configuración para activarla.
v2026-06-02Bugfixes#277

Worldmap: Entrada de Arghal y Ciudad de Arkhein en sus lados correctos

  • Mismo enfoque que los patches anteriores: Entrada de Arghal (mapa 156) ahora aparece junto a la zona de Arghal (al sur del mapamundi) y Ciudad de Arkhein (195) junto a la zona de Arkhein (al norte).
  • Cierra el alineamiento visual de la zona Arghal/Arkhein. Cero impacto al gameplay — sólo cambio visual.
  • Ctrl+Shift+R para refrescar.
v2026-06-02Bugfixes#276

Worldmap: zona Arghal/Arkhein completamente alineada

  • Mismo enfoque que el patch anterior: el mapa 151 (Ciudad de Arghal) y el 196 (Ciudad de Arkhein) aparecían en posiciones del mapamundi que no coincidían con sus conexiones reales.
  • Ahora las 4 ciudades de la zona (Muelle/Ciudad de Arghal + Puerto/Ciudad de Arkhein) tienen ubicaciones visuales coherentes con la navegación in-game.
  • Cero impacto al gameplay. Ctrl+Shift+R para refrescar.
v2026-06-02Bugfixes#275

Worldmap: posición visual de Muelle de Arghal corregida

  • El mapa 150 (Muelle de Arghal) aparecía en una posición del mapamundi que no coincidía con sus conexiones reales. Su vecino oeste decía 151 (Ciudad de Arghal) pero geográficamente el tileExit apuntaba a una zona distinta.
  • Ahora la celda visual de 150 está en la posición que matchea con sus tileExits server-side (vecinos 92/221/223/196).
  • Cero impacto al gameplay — solo se corrigió la visualización. Ctrl+Shift+R para refrescar.
v2026-06-02Bugfixes#274

Mar Oriental: ahora el worldmap refleja correctamente la navegación

  • Antes el mapamundi mostraba al mapa 139 al este del 138, pero en realidad no se podía cruzar entre esos dos. Y al sur, 122 conectaba con 139 pero el mapamundi no lo reflejaba.
  • Ahora el mapamundi está alineado con cómo realmente fluye la navegación: 139 aparece como vecino sur (al este del 122), no al este del 138.
  • Cero impacto al gameplay — solo se corrigió la visualización. No hace falta restart, basta con Ctrl+Shift+R.
v2026-06-02Quality of Life#273

Teclas y macros: ahora podés reasignar libremente

  • Antes si querías ponerle una tecla a una acción/macro/hechizo/item, pero esa tecla ya estaba asignada a otro slot, el juego te rechazaba (te tiraba un alert o un error y te pedía que probaras otra).
  • Ahora simplemente la última asignación gana: ponés la tecla en el nuevo slot y el slot anterior queda libre automáticamente. No más andar buscando dónde estaba.
  • En el modal de macros además ves un hint del estilo "Al guardar, esta tecla se liberará de: Macro 3" antes de confirmar, así sabés exactamente qué se va a desbindear.
  • Funciona en las 4 fuentes: acciones (atacar/equipar/agarrar/etc), macros (slots 1-9), hechizos (right-click → asignar tecla) e inventario (right-click → asignar tecla).
v2026-06-02Balance#272

Golem de Arena: tenés que matar también a los Djinn para que respawnee

  • Antes el Golem de Arena respawneaba al matarlo aunque sus Djinn de Viento siguieran vivos. Eso era farm trivial — matar al Golem solo + ignorar Djinn = exp x 200k cada vez sin riesgo.
  • Ahora el Golem solo respawnea cuando él Y los 3 Djinn estén muertos. Tenés que comprometerte al combate completo.
  • Si matás primero al Golem, queda invisible / inactivo hasta que el último Djinn caiga — recién ahí reaparece en su ruta de patrulla.
  • Cuidado al desengancharte mid-pelea: los Djinn quedan vivos en el mapa esperando — el Golem no va a respawnear hasta que alguien los mate.
v2026-06-02Bugfixes#271

Djinn de Viento ahora caminan por tierra y agua

  • Los Djinn de Viento (los que invoca el Golem de Arena al 50% HP) quedaban inertes cuando aparecían — no se movían ni atacaban.
  • Bug viejo de configuración: eran 'solo agua' por su origen, pero como criaturas espirituales/aéreas deberían poder transitar cualquier terreno.
  • Ahora son anfibios: caminan tanto por tierra como por agua. Si los invoca el Golem en el desierto, te van a perseguir y castear sin problema.
v2026-06-02Features#270

Golem de Arena: nuevo boss en el desierto con patrulla e invocación

  • Apareció el Golem de Arena en el desierto al sur de Ullathorpe — un boss de 35.000 HP que da 200.000 de exp al matarlo.
  • Patrulla una ruta fija cíclica recorriendo el mapa. Cuando no hay nadie cerca, camina entre sus puntos de paso solo.
  • Al bajar al 50% de vida, invoca 3 Djinn de Viento a su alrededor que casteon paralizar y descarga eléctrica. Cuidado con el cambio de fase.
  • Pega 300-600 de daño por ataque — no es para ir solo si vas con poco nivel.
  • Drops como el Golem regular (gemas y oro).
  • Cuando lo matás, respawnea en algún punto al azar de su ruta de patrulla.
v2026-05-31Features#258

Hechizos de invocación: Elementales como mascotas que pelean por vos

  • Los hechizos Invocar Elemental de Fuego/Agua/Tierra ahora funcionan como mascotas reales. Antes no hacían nada útil, y el de Agua incluso hacía daño por bug.
  • Cada Elemental que invoques aparece junto a tu char y te sigue automáticamente.
  • Cuando atacás a una criatura o jugador, tu mascota va a atacar al mismo target con melee. Si cambiás de target, ella cambia también.
  • Podés tener hasta 3 mascotas invocadas al mismo tiempo.
  • Cada mascota dura 3 minutos. El timer se muestra en la barra de buffs arriba a la derecha con un ícono del color del elemento (azul/rojo/marrón).
  • El kill de la mascota cuenta como tuyo: ganás XP, el drop, y el contador de criaturas asesinadas sube.
  • Si te desconectás, cambiás de mapa o morís, tus mascotas desaparecen automáticamente.
v2026-05-31Bugfixes#255

Runa de teletransportación ahora se puede agarrar del suelo

  • Si una Runa de Teletransportación caía al suelo (al morir, al tirarla, drop PvP), no se podía levantar de vuelta — quedaba ahí para siempre.
  • Era un bug heredado de configuración: la Runa tenía un flag interno que la marcaba como 'fija' (mismo flag que usa Árbol, Puerta, Yunque, Fogata), por lo que el server rechazaba el agarre.
  • Ahora cualquier Runa dropeada se levanta normal con la tecla de agarrar.
v2026-05-31Quality of Life#252

Equipar / desequipar items arriba del barco

  • Ahora podés equipar y desequipar armaduras, armas, escudos, cascos y flechas mientras navegás. Antes había que desembarcar para cualquier cambio de loadout.
  • El sprite visible del barco no cambia mientras estás navegando — los testigos siguen viendo la Barca / Galera / Galeón / Fragata Fantasmal igual.
  • Lo que equipaste se aplica visualmente al desembarcar: bajás del barco y el char aparece con el nuevo equipo automáticamente.
  • Restricciones de clase y raza siguen aplicando navegando igual que en tierra (no podés equipar un item que tu clase no puede).
v2026-05-31Balance#251

Morir en el agua ahora también dropea los items

  • Antes, si morías navegando (en cualquier barco), conservabas todo el inventario al revivir — el mar era zona segura de facto contra perder loot.
  • Ahora morir en agua dropea los items igual que morir en tierra. Los items caen en el tile de muerte (puede ser agua) y solo otro char navegando los puede recoger.
  • Si tenías un barco equipado al morir, también cae al agua junto con el resto del inventario — recogible por otro navegante.
  • Items con flag newbie o noSeCae siguen sin dropear (intacto desde siempre).
  • Las zonas seguras (arenas, sparring) siguen siendo safe — morir ahí no dropea nada.
v2026-05-31UX#250

Click sobre personaje: ahora muestra criaturas y kills

  • Al hacer click sobre otro personaje, el tooltip del chat ahora suma dos bloques de estadísticas de combate.
  • Criaturas asesinadas: total de mobs no-player matados por ese char (usaba un contador que ya se persistía pero no se mostraba).
  • Matados: total de PvP kills, desglosado en Ciudadanos vs Criminales (mismo dato del ranking público).
  • Formato: 'Ves a [Nombre] [Clase] [Nivel: X] - Ciudadano [Criaturas asesinadas: 1000] [Matados: 20 | Ciudadanos: 10 | Criminales: 10]'.
  • El bloque [Aciertos | Errados | Porcentaje] queda visible solo para GMs (es una métrica de debug que mide clicks certeros, no skill mágica real).
v2026-05-31Balance#249

Pociones más baratas

  • Bajaron los precios de compra y venta de las 4 pociones de combate. Ahora son más accesibles para el grind temprano y la economía general.
  • Poción Roja (vida): compra de 10 → 5 oro, venta de 6 → 3 oro.
  • Poción Azul (maná): compra de 12 → 6 oro, venta de 8 → 4 oro.
  • Poción Verde (agilidad): compra de 90 → 45 oro, venta de 60 → 30 oro.
  • Poción Amarilla (fuerza): compra de 60 → 30 oro, venta de 40 → 20 oro.
  • Las pociones newbie del starter kit y las pociones Violeta / Negra no se tocaron.
v2026-05-31Features#248

Bichos casteadores: Orco Brujo, Galeón Fantasmal, Djinn de Viento

  • Tres enemigos suman habilidades mágicas a su kit, en línea con Bruja y Medusa que ya casteaban.
  • Orco Brujo: tira Proyectil Mágico (30-35 daño) cada ~12 segundos.
  • Galeón Fantasmal: tira Tormenta de Fuego (45-55 daño) cada ~18 segundos. Cuidado en los combates navales.
  • Djinn de Viento: alterna Paralizar (cada ~20s) y Descarga Eléctrica (55-85 daño, cada ~14s). Dos hechizos con cooldowns independientes.
  • Cada instancia tiene su propio reloj de cooldown — no todos los Orcos Brujos castean al mismo tiempo (los spawns arrancan desfasados).
  • Casco con defensa mágica (Casco Mágico, Yelmo Vikingo) reduce el daño de los spells igual que en PvP.
  • Detalle: el guard de 'no spammear paralizar' solo aplica al Djinn (Paralizar) — los spells de daño se castean igual sobre un target ya paralizado.
v2026-05-31Bugfixes#247

Inspeccionar enemigos: experiencia y oro reales

  • El modal de inspeccionar NPC (click derecho sobre un enemigo) mostraba números que no coincidían con lo que recibías realmente al matarlo: la experiencia aparecía 5× menor que la real y el oro era 0 aunque el bicho dropeara monedas.
  • Ahora el modal muestra los valores efectivos: experiencia post-multiplicador (×5, ×10 con doble exp activo) y oro post-multiplicador (×3, ×6 con doble oro activo). Lo que ves es lo que recibís.
  • Bonus: el evento de doble oro (/dobleoro) antes solo afectaba al kill PvP — los drops de monedas de NPCs no se duplicaban. Ahora se duplican también, consistente con el nombre del evento.
  • Las probabilidades de drop por slot del enemigo (90% / 10% / 1% / 0.1% / 0.01%) no cambiaron — eran correctas, solo no se reflejaban del lado del oro.
v2026-05-31UX#246

Pantalla completa y arrow-keys que no scrollean

  • Nuevo botón de pantalla completa al lado de la tuerca de configuración (parte derecha del HUD). Toggle de fullscreen al instante — ícono cambia entre expandir y contraer según el estado.
  • También sincroniza el ícono si salís de pantalla completa con Esc o F11.
  • Las teclas ↑ y ↓ (caminar) ya no scrollean la página entera cuando el HUD es más alto que el viewport (modales abiertos, browser zoom alto). El personaje camina sin que se mueva la pantalla.
  • Funcionalidad de las flechas dentro de inputs (chat, formularios) intacta — solo se bloquea el scroll cuando el foco está afuera de un campo de texto.
v2026-05-31Quality of Life#244

Mapa 272 más tranquilo + cleanup interno de Ullathorpe

  • El mapa 272 tenía un lobo solitario rondando. Reemplazado por un NPC estático (estilo Fethresor) y se sumó un Sacerdote más como referencia visual. Mapa ahora 100% tranquilo: 1 NPC estático + 3 Sacerdotes.
  • Limpieza interna preventiva del mapa 1 (Ullathorpe): aunque la ciudad ya estaba libre de hostiles desde el patch anterior, restaban 15 celdas con referencias antiguas a Ratas y Orcos. Removidas para evitar que vuelvan si en algún momento se regenera el JSON de NPCs.
v2026-05-31Balance#243

Resucitar: ahora exclusivo de Clérigos y Druidas

  • El hechizo Resucitar queda restringido a las clases sagradas/naturales de AO. Magos, Bardos, Paladines y Asesinos ya no pueden aprenderlo ni comprarlo.
  • Si intentás aprender desde pergamino o comprar el pergamino en una tienda y tu clase no es Clérigo o Druida, el server bloquea con mensaje: 'Solo Clérigos y Druidas pueden aprender este hechizo'.
  • Purga ejecutada: los chars no-Clérigo/Druida que ya tenían Resucitar aprendido fueron despojados del slot. El resto de sus hechizos quedó intacto. (Afectó a 1 personaje.)
  • Si tu clase autorizada ya tiene Resucitar, no cambia nada — seguís pudiendo castearlo igual que antes.
v2026-05-31Quality of Life#242

Cazadores empiezan con 1000 flechas (era 50)

  • Las 50 flechas newbie del starter kit del Cazador se agotaban en pocos minutos de grind temprano. Aumentado a 1000 — alineado con la cantidad de pociones newbie del kit universal (200 c/u).
  • Sigue siendo Flecha Newbie (no dropeable ni tradeable). Aplica a cazadores nuevos — los existentes conservan el stock que tengan en el inv.
v2026-05-30Bugfixes#241

Fix: cadena de mapas al norte de Banderbill

  • Subiendo al norte desde la afuera de Banderbill (171), la cadena correcta es 171 → 257 → 258 → 259 → 260 → 261 (Veril). Pero el mapamundi tenía esas posiciones embarulladas — saltaba entre mapas que no eran vecinos.
  • También había un mapa fantasma 453 que apareció en el grid pero no existe server-side. Removido.
  • Estado del mapamundi en general: el audit completo encontró ~175 inconsistencias entre el mapamundi del cliente y los tile-exits reales del server. Este fix cubre la cadena que reportaste; el resto queda como follow-up grande.
v2026-05-30Quality of Life

Ciudades sin hostiles: Ullathorpe y Lindos limpias

  • Ullathorpe ahora no tiene Ratas Salvajes ni Serpientes patrullando. Los chars nuevos pueden caminar por la capital sin que les coma una serpiente al toque.
  • Lindos también quedó limpio de Cuervos Salvajes y Tortugas Gigantes.
  • Los animales que se quedan (Vaca, Gallo, Cerdo, Conejo, Pato, Gran Águila) no atacan — solo retalían si vos les pegás. Sirven para grind de cazadores y dan ambiente.
  • Arkhein, Fuerte Pretoriano y Aldea Pretoriana se mantienen con sus hostiles — son territorio del Caos y zonas fronterizas, no ciudades 'seguras'.
  • Total: 20 hostiles agresivos removidos de las ciudades amistosas.
v2026-05-30Features

Nueva skill: Ocultarse (tecla O)

  • Nueva habilidad de stealth manual. Apretás la tecla O y tirás un chance de 50% de volverte invisible durante 5 segundos.
  • Spameable: si fallás, podés volver a intentarlo de inmediato (hay un mini-cooldown anti-flood de 600ms).
  • Mientras estás oculto nadie te ve — ni otros jugadores, ni NPCs hostiles. Mismo efecto visual que el hechizo de Invisibilidad, con el ícono de buff y countdown arriba.
  • Se cancela en cuanto hacés algo: atacar (melee, hechizo a otro target, disparar arco), recibir daño (de un jugador o de un NPC), o caminar un solo tile. También se cae sola a los 5 segundos.
  • Pensada para PvP: emboscadas, fuga, reposicionamiento. Si querés moverte invisible necesitás el hechizo (que sigue intacto).
  • Disponible para todas las clases. La tecla es reconfigurable desde el modal de teclas, o podés disparar con /ocultar en el chat.
v2026-05-29Bugfixes

Fix: items invisibles sobre tiles de fuego (Dungeon Inferno)

  • Bug heredado del engine original: si un item caía sobre un tile con animación de fondo (fuego, agua, lava), no se veía visualmente aunque estuviera en el suelo. El click confirmaba el item pero no aparecía dibujado.
  • Pasaba notoriamente en Dungeon Inferno con todos los items single-frame (pociones, oro, armas comunes) sobre los tiles de fuego.
  • Fix: el render de los items ahora va en la misma capa que el fuego, dibujado encima, justo antes de los personajes. Orden correcto: fondo → fuego → item → char → techos.
  • Items en tiles normales siguen exactamente igual.
v2026-05-29UX

Nuevo modal de comerciante — más limpio y moderno

  • Rediseñado todo el modal de los NPC mercaderes. Ahora usa el mismo lenguaje visual que el modal del banco: gradient oscuro, acento dorado tenue, sombras profundas.
  • Preview del item seleccionado arriba: imagen + nombre + info (daño/defensa) + precio.
  • Botones Comprar y Vender ahora se desactivan cuando no tiene sentido la acción (sin selección, sin oro, item equipado) y muestran tooltip explicando por qué.
  • Botones + / − de cantidad funcionan (antes eran decorativos). El input es numérico y no acepta letras.
  • Esc o click afuera del modal lo cierran. Al volver a abrirlo arranca limpio.
  • Performance: el modal solo se redibuja cuando algo de la transacción cambia. Combate o regen de mana en paralelo no lo tocan.
v2026-05-29Bugfixes

Limpieza interna del servidor (crashes-zombi y dead code)

  • Bundle de 3 fixes server-side identificados en un scan de bugs. Ninguno afectaba al gameplay pero saturaban los logs con stacktraces inútiles cuando llegaban packets viejos de chars que ya se habían desconectado.
  • Borrado de una función vieja de validación que tenía 60 líneas de checks comentados y a la que nadie llamaba.
  • Guards defensivos en 3 acciones (toggle seguro, cambio de dirección, equipar item) para que retornen limpio si el char ya se desconectó.
  • Guard en compra a mercaderes para que rechace slots inválidos sin crashear.
v2026-05-29Performance

Packets de comerciante y banco más livianos

  • Misma optimización del banco/inventario de antes, pero ahora aplicada también a abrir un NPC mercader y al modal completo del banco.
  • Antes el server mandaba el nombre completo de cada item como texto al abrir; ahora solo manda el ID y el cliente resuelve el nombre solo.
  • Ahorro estimado: ~200-1300 bytes menos por apertura, dependiendo de cuántos items hay.
  • Abrir un mercader o el banco se siente un toque más snappy en conexiones lentas.
v2026-05-29Performance

Identificadores internos más livianos

  • Los IDs internos de personajes y NPCs cambiaron de un formato grande (8 bytes) a uno chico (4 bytes).
  • Esto reduce a la mitad el peso de muchísimos paquetes del juego: cada movimiento, cada hit, cada efecto visual sobre otro char/NPC.
  • Ahorro estimado: ~3 KB/s/jugador. En zonas pobladas o conexiones lentas se siente más fluido.
  • Cambio invisible al ojo — todo sigue jugándose igual.
v2026-05-29Performance

Render de items del piso optimizado

  • Antes: caminar por una ciudad revisaba ~1000 casillas vacías por frame para ver si había algo en el piso.
  • Ahora: se mantiene una lista chica de las posiciones que tienen items, y solo esas se dibujan.
  • Speedup estimado: 5-10× menos chequeos por frame durante movement. Notable en zonas pobladas (Ullathorpe, Banderbill, dungeons llenas de cofres).
  • Cero glitches visuales: items estáticos (carteles, puertas, cofres) y drops dinámicos (lo que tira un mob al morir, lo que dropea un player) siguen idénticos.
v2026-05-29Performance

Packets de inventario más livianos

  • Antes: el servidor te mandaba el nombre de cada item del inventario como texto en cada login, equip, drop, pickup, depósito y retiro del banco.
  • Ahora: el servidor solo manda el ID del item — el cliente ya tiene el catálogo cargado y resuelve el nombre solo.
  • Ahorro: ~300-500 bytes menos por cada login + cada cambio de inventario. El login en conexiones lentas se siente un poco más snappy.
  • Bonus: arreglado un bug viejo del banco donde el tooltip del lado del inventario decía 'undefined'.
v2026-05-29Performance

HUD más liviano en combate (continuación)

  • Cerramos la última fase del refactor: ahora la caja del inventario y hechizos tampoco se redibuja cuando solo cambia HP/Mana.
  • El HUD queda particionado en 3 islas (Stats, Mapa, Inventario/Hechizos) que reaccionan solo a sus inputs reales.
  • Drag/drop de items, equip/desequip, lanzar y reordenar hechizos: todo funciona igual, pero sin trabajo desperdiciado de render en cada hit del combate.
v2026-05-29Performance

HUD más liviano en combate

  • Antes: en cada hit/heal/regen el HUD entero se redibujaba (HP, Mana, inventario, mapa, hechizos, todo).
  • Ahora: cuando solo cambia HP/Mana, solo la caja de stats se refresca. El minimapa y el resto del HUD ni se enteran.
  • Lo mismo cuando se actualizan los dots del minimapa: solo esa caja reacciona, no el resto.
  • Resultado: peleas largas contra varios enemigos dejan de stutterear; el cliente queda más fluido bajo carga.
  • La caja del inventario y hechizos queda pendiente para una próxima iteración (menos urgente porque no cambia tan seguido).
v2026-05-29Performance

Limpieza interna del servidor

  • El servidor procesaba ciertas tareas (regenerar maná, expirar buffs) sobre jugadores que ya se habían desconectado, hasta por 60 segundos después.
  • Ahora los descarta inmediatamente al cerrar la conexión.
  • Mejora invisible al ojo pero acumula menos trabajo desperdiciado en sesiones con mucha entrada/salida de jugadores.
v2026-05-29Performance

Fix: stall del cliente al cambiar de mapa

  • Tercer y último issue identificado en la investigación de freezes al cambiar de mapa.
  • El refresco automático del minimapa (que dibuja a los enemigos cuando estás idle) corría cada 500ms sin pausa.
  • Si ese refresco caía justo mientras el cliente estaba procesando la ráfaga de paquetes del mapa nuevo, sumaba un spike de trabajo en el peor momento.
  • Fix: el refresco se silencia por 400ms al detectar un cambio de mapa y reanuda solo. Invisible al ojo, gratis para el resto del gameplay.
v2026-05-29Performance

Fix: crash en loop cuando un NPC mata a un user que se acaba de desconectar

  • Race condition: si cerrabas la pestaña justo antes de que un NPC te matara, el server crasheaba en loop intentando dropear tus items al piso.
  • Cada tick del NPC volvía a crashear hasta el cleanup automático de 60s — saturaba los logs y consumía CPU innecesario.
  • Fix: guards defensivos en `tirarItemsUser` y `tirarItem` para retornar limpio si el ws ya no existe.
  • Trade-off: el char no dropea loot al piso si se desconectó justo. Como ya no está en el server, recupera los items al reloguear.
v2026-05-29Performance

Fix: freezes al cambiar de mapas

  • Antes: si el destino de un teletransporte estaba bloqueado (agua, otro player), el server buscaba un tile libre hasta 20.000 veces — congelaba el WS de todos los players online por 50-200ms.
  • Ahora: cap bajado a 500 iteraciones (~2.5ms peor caso) — 40 veces más rápido el peor caso.
  • Si no se encuentra tile libre tras 500 intentos, el char cae en Ullathorpe spawn (1, 50, 50) — en vez de ser kickeado con mensaje agresivo.
  • Cero cambios para los teletransportes que funcionaban bien (la búsqueda válida típica termina en <50 intentos).
v2026-05-29UX

Party en el mapa + tu color por facción

  • Tu punto en el minimapa y mapa grande ahora es AZUL si sos ciudadano, ROJO si sos criminal.
  • Nueva opción en settings: 'Mostrar party en el mapa' (No mostrar / Mostrar). Default: No mostrar.
  • Si lo activás: tus compañeros de party aparecen como dots con su color de facción (no necesariamente el tuyo).
  • En el mapa grande (M): panel 'Party · N' abajo a la izquierda con miembros del mismo mapa y dónde están.
  • En el mapamundi: badge con cantidad de miembros sobre cada mapa donde haya alguien.
  • El servidor manda posiciones live cada 1.5s — bajo costo de red.
v2026-05-29UX

Mostrar enemigos en el mapa — 3 modos

  • En settings (rueda ⚙ caja 4) → 'Mostrar enemigos en el mapa' con 3 opciones: 'No mostrar', 'Solo viewport', 'Todo el mapa'.
  • Solo viewport: enemigos visibles ahora mismo en tu pantalla (live).
  • Todo el mapa: spawn points de todas las criaturas del mapa actual (heurística performante, criaturas errantes pueden estar a 1-3 tiles del spawn).
  • En el mapa grande (M), click en el header 'Enemigos · N' colapsa o expande la lista. Los dots siguen visibles en el mapa igual.
  • Performance: 100% cliente. Lazy-load del catálogo (37KB) solo cuando hace falta.
v2026-05-28UX

Enemigos en el minimapa y mapa grande

  • El minimapa del HUD (esquina derecha) ahora muestra dots naranja para cada enemigo hostil del viewport.
  • Al apretar M, el mapa grande también marca los enemigos y suma un panel abajo a la derecha con la lista (nombre + coords).
  • Los NPCs útiles (Mercader, Gobernador, Sacerdote, Banquero) no se marcan — solo los hostiles.
  • Refresco automático cada 500ms cuando estás idle pero los enemigos se mueven.
  • Cero impacto en performance: solo se renderea lo que el cliente ya conoce del viewport.
v2026-05-28UX

Macros guardados por personaje + cantidad en macroBar

  • Macros ahora se guardan en el personaje (DB), no en el browser. Si entrás desde otra PC tenés los mismos macros.
  • MacroBar muestra la cantidad del item bindeado en tiempo real. Si tenés 696 pociones rojas, ves '696' arriba del slot — baja al usar.
  • Cuenta el total sumando todos los stacks del mismo item (si splitéaste en varios slots).
  • Migración invisible: macros guardados antes en el browser se suben automáticamente al servidor en el próximo login.
  • Icono de Dardo Mágico revertido a la versión original.
v2026-05-28UX

ESC pide confirmación antes de salir

  • Apretar ESC con nada abierto ahora muestra un cartel '¿Salir del juego?' con 'Salir' / 'Cancelar' en vez de tirarte al lobby de una.
  • Salidas accidentales por tocar ESC sin querer mientras caminás: cero.
  • ESC sobre el modal abierto lo cancela. Click en el fondo también cancela.
  • El botón 'Salir' del navbar y el comando /salir en chat siguen saliendo directo — son acciones explícitas que no necesitan confirmación extra.
v2026-05-28UX

Lobby: reordená tus personajes con drag & drop

  • Arrastrá un personaje del lobby a otro slot para intercambiarlos. Solo en la pestaña PvE.
  • El orden queda guardado en tu cuenta — vuelve igual cuando relogueás o entrás desde otro browser.
  • Visual: el char arrastrado se ve semitransparente, el slot destino se ilumina con borde dorado.
  • Los personajes preset de PvP no son reordenables (no son personajes tuyos).
  • Cero impacto en jugabilidad o data de chars — es metadata cosmética del lobby.
v2026-05-28Balance

Paladín y Asesino arrancan con maná

  • Antes: Paladín y Asesino tenían 0 maná en L1 y recién a L2 podían castear. Inconsistente con las otras clases mágicas.
  • Ahora: arrancan con int × 1 (~18-22 según raza), el mismo factor que ya ganaban por nivel.
  • Paladines / Asesinos existentes recibieron +int de maxMana retroactivamente, equivalente al L1 que les faltaba.
  • Sin cambios al per-level scaling — solo se corrigió el mismatch del nivel 1.
v2026-05-28Seguridad

Nombres de personajes case-insensitive

  • Ya no se puede crear 'AtidorFA' si existe 'Atidorfa'. Tampoco 'atidorfa', 'ATIDORFA' ni cualquier variante de mayúsculas/minúsculas.
  • Anti-impersonation: antes un troll podía registrar 'AtidorFA' y hacerse pasar por 'Atidorfa' en chat porque en fuente chica son indistinguibles.
  • El nombre se sigue mostrando con el casing original que tipeás al crear el char. 'AtidorFA' se ve así, no lowercased.
  • Migración de chars existentes ejecutada (24 chars). Un duplicado pre-existente (Herion/HerioN) se resolvió renombrando uno de ellos.
v2026-05-28UX

Movimiento WASD smooth — la última tecla manda

  • Antes: holdear A y apretar W no hacía nada (A siempre ganaba). Ahora la última tecla apretada gana.
  • Soltar la tecla activa cae natural a la previa que sigas holdeando: kitear y esquivar se sienten fluidos.
  • Misma mecánica del AO clásico VB6 — cualquier secuencia de WASD responde sin pisarse.
  • Bonus: si tabeás con una tecla holded, al volver el char no camina solo. Antes había que tocar la tecla de nuevo para destrabarse.
  • Cero impacto en performance: stack máximo 5 entries, sin renders extra.
v2026-05-28UX

Layout del juego responsive + fondo escala bien

  • El HUD de /play ahora se adapta a cualquier tamaño de pantalla.
  • Pantallas chicas: si no entra todo, ahora hay scroll natural (antes el content quedaba recortado sin aviso).
  • Pantallas grandes: el HUD queda alineado arriba con un margen pequeño en lugar de centrado vertical (que dejaba mucho espacio vacío).
  • Imagen de fondo del site escala correctamente a cualquier viewport (antes se quedaba en tamaño natural y dejaba bandas negras).
  • Sumamos una viñeta sutil que oscurece los bordes para dar foco visual al HUD.
  • Las dimensiones internas del juego (canvas, panels, etc.) no cambiaron — solo cómo se posicionan en la página.
v2026-05-28UX

Teclas custom por item de inventario

  • Click derecho sobre un item del inventario → 'Asignar tecla' / 'Quitar tecla'.
  • Pociones, comida, scrolls: la tecla los CONSUME (igual que la tecla Usar).
  • Armas, armaduras, escudos, cascos: la tecla EQUIPA/DESEQUIPA (igual que la tecla Equipar).
  • Badge de la tecla aparece arriba a la derecha del icono del item.
  • Anti-colisión total: la tecla no puede pisar a movement, macros, hechizos o otros items.
  • Binding por item canónico: si movés la poción a otro slot, la tecla la sigue.
v2026-05-28UX

Teclas custom por hechizo

  • Click derecho sobre un hechizo en la lista → opciones 'Asignar tecla' / 'Quitar tecla'.
  • Presioná la tecla que querés y queda bindeada: en combate la presionás y el hechizo entra al modo 'click en target'.
  • Validación anti-colisión: si la tecla ya está usada por movimiento, una acción o un macro, el modal te avisa y pide otra.
  • Badge visual con la tecla asignada al lado del coste de maná en la lista de hechizos.
  • Las teclas se guardan por personaje (no por cuenta). Sirven en el browser y persisten entre sesiones.
  • ESC cancela la captura. La asignación vive en localStorage, no requiere viajar al server.
v2026-05-27Gameplay

Hogar configurable vía Gobernadores

  • Right-click sobre cualquier Gobernador (npcType=11) → opción 'Hogar' en el context menu setea el hogar a tu posición actual.
  • Validación server-side: target debe ser Gobernador, mismo mapa, distancia Chebyshev ≤ 3 tiles, char no muerto ni navegando.
  • 5 Gobernadores disponibles: Ullathorpe, Nix, Banderbill, Lindos, Arghal.
  • Wire protocol bump: npcType (byte) ahora viaja en el packet getNpc; packet nuevo setHogarFromNpc (id 24).
  • Copy de los Gobernadores actualizada: 'Haz click derecho para poner hogar aquí' (antes 'Escribe /Hogar para obtener la ciudadanía').
  • Cierra la Fase 2 pendiente de /hogar que quedó documentada en la sesión 2026-05-26.
v2026-05-27Combat

NPC spell-cast AI: Bruja Inmovilizar + Medusa Paralizar

  • Primer iteración de NPCs que castean spells. Sistema genérico: agregar castSpell + castCooldownMs al NPC en npcs.json y listo.
  • Bruja (npc 550): Inmovilizar (idSpell 24) cada 10 segundos — el user no se mueve pero puede atacar/castear.
  • Medusa (npc 553): Paralizar (idSpell 9) cada 7 segundos — lock total (no atacás, no castás, no te movés).
  • Range del cast = viewportRadius (igual que players). No necesita estar adyacente.
  • Cooldown desincronizado por instance: lastCastTime se inicializa con random offset para que múltiples Brujas no casteen sincrón.
  • No re-cast sobre user ya lockeado: si user.paralizado o user.inmovilizado, el NPC espera a que expire.
  • Polish: NPC gira sprite al target antes de castear. Broadcast de animFX + playSound + dialog (palabras mágicas) a vecinos en viewport.
  • Cancela /hogar y runa de teletransportación: control spell cuenta como daño recibido.
  • Cleanup pasivo intacto (server.js): user.paralizado/inmovilizado se limpian tras vars.timeInmo = 8000ms.
v2026-05-27UX

UX: botón PARTY solo en tab Inventario

  • El botón PARTY al fondo del .body ahora solo se renderea cuando showInventary === true.
  • En el tab Hechizos competía visualmente con la action row de reordenar/favoritos.
v2026-05-26Gameplay

Comando /hogar + tweak portal Dungeon Newbie

  • /hogar (público): cast 5s con countdown, cooldown 5min, teleport al hogar del char (default Ullathorpe 1,50,50).
  • Gating: solo en zona segura O muerto (modo fantasma) + bloqueado si navegando.
  • Cancela el cast si: movimiento del user, daño de NPC o jugador (mele/spell PvP), o desconexión.
  • Schema char extendido con hogarMap/X/Y (Mongoose defaults para chars pre-feature).
  • Fase 2 pendiente: NPCs Gobernadores para asignar otras ciudades como hogar.
  • Portal Dungeon Newbie (mapa 168, tiles 50-51 y=55): destino movido de (1,82,24) a (1,82,25).
v2026-05-26Gameplay

Comando /w (susurros privados entre jugadores)

  • /w Asuka mensaje — susurro 1-a-1 en color #DA6FD1 (rosa púrpura). Formato chat idéntico al público (italic).
  • Comillas para nombres con espacios: /w "j la rata" hola. Parser maneja edge cases con mensajes claros.
  • Solo emisor y receptor reciben los packets — el floating text sobre el emisor también está oculto a terceros.
  • Prefill automático: después de /w Asuka, el siguiente Enter abre el chat con /w Asuka pre-rellenado (se limpia al mandar msg sin /w).
  • Click izquierdo sobre [Nombre] en chat: abre el input con /w <name> pre-rellenado (auto-comillado si nombre con espacios).
  • Bug colateral arreglado: React key collision en writeConsole (+new Date() duplicaba keys → msgs consecutivos del mismo tick se perdían en silencio).
v2026-05-26Combat

Apuñalar: bugs barridos + visual ¡X! crítico

  • apuUser CRIT-58 missing: clamp Math.max(0, hp - tmpDmg) para evitar HP negativo wire-side.
  • apuUser updateHP broadcast missing: barra del target ahora refresca en el mismo tick que el chat 'te ha apuñalado'.
  • Visual ¡X! crítico flotando sobre el char en color #FF2020 (rojo intenso, distinto del rojo común del hit normal).
  • Stash + reverse-order send: apu dialog se manda DESPUÉS del normal hit dialog para sobrescribir (dialogs[id] es last-write-wins en cliente).
  • Chat 'Has apuñalado por X' ahora en #FF2020 (antes rojo plano — distingue del 'Le has pegado').
  • Mecánica intacta: probs por clase, multiplicadores ×1.4/×1.5/×2, lista de armas con apu:1 todo igual.
v2026-05-26Balance

Exp tiers endgame (L25+ grind escalado 2×/3×/4×)

  • Tier 1 (L25-L34): subir cada nivel cuesta 2× la curva original (era 535k @ L25, ahora 1.07M).
  • Tier 2 (L35-L39): cuesta 3× la curva original (era 6.17M @ L35, ahora 18.5M).
  • Tier 3 (L40-L41): cuesta 4× la curva original (era 21.3M @ L41, ahora 85.1M).
  • Multiplicadores ONE-TIME al cruzar boundary (L25/L35/L40) — el base mult propaga la proporción, sin compounding exponencial.
  • Lifetime L1→L42: 110M → 343M exp totales (3,1× más para llegar al cap).
  • Chars existentes no recalculan retroactivamente — solo el próximo level-up usa la curva nueva.
  • Tabla completa OLD vs NEW en BALANCE.md → 'Comparativa OLD XP vs NEW XP'.
v2026-05-26Security

Security audit completo (7 CRITICALs cerrados)

  • PUT /api/character_save: auth gate con token + log de intentos rechazados con IP.
  • tokenAuth hardcoded → INTERNAL_SHARED_SECRET random de 64 bytes (env var via docker-compose).
  • WS handshake con ticket HMAC-SHA256 firmado (TTL 60s) — el atacante ya no puede impersonar via IDs públicos del foro.
  • Cookie session con SESSION_SECRET random + httpOnly + secure + sameSite=lax.
  • NoSQL injection bloqueada: query parser simple + String() coerce explícito.
  • Register validation completa: NAME_REGEX, EMAIL_REGEX, bcrypt cost 10 explícito.
  • Username case drift: unique indexes en nameSanitized/email + findAccountsByNameSanitized.
v2026-05-26Anti-cheat

Anti-cheat gameplay + edge crashes

  • attackSpell/attackRange ahora chequean distancia ≤ viewportRadius (mensaje 'Fuera de alcance' si lejos).
  • attackMele bounds: atacar mirando al borde del mapa ya no crashea el server.
  • eventClick / attackRange / attackSpell: bounds check en el fallback [y+1] para evitar mapData[101] undefined.
  • quitarUserInvItem: clamp cant ≤ item.cant + guards defensivos (item undefined, cant ≤ 0).
  • Paralyze auto-clear pasivo: user idle y NPC sin players cerca ahora se liberan automáticamente.
  • Combat hp clamp Math.max(0, hp-dmg) en 5 sites (melee/spell/apuñalar): no más HP negativo transient.
  • idItemArrow agregado al schema Mongoose (cazadores ahora mantienen arrow equipado entre sesiones).
v2026-05-26Gameplay

Features rotas core funcionales

  • Spell Resucitar (#11) ahora SÍ resucita: nueva rama en userSpellUser + bypass dead-check específico.
  • ESC cascade: cierra modales/aim/menu antes de hacer logout (banco/trade/macro/map/chat input).
  • Items fantasma post-reconnect: reset items/spells antes del poblado en getMyCharacter.
  • NPCs fantasma post-teleport: clear engine.personajes (excepto self) en cambio de mapa.
  • Meditar flag stuck post-muerte: limpia + broadcast animFX(0) en putBodyAndHeadDead.
  • Listener leaks: handlers como this._handler* + cleanup en componentWillUnmount/engine.destroy().
  • Sistema criminal half-baked: documentado pendiente (TODO #30 — fianza no decay todavía).
v2026-05-26UI/UX

UX polish (Bucket 3 quick wins)

  • Reconnect modal: spinner animado + 'Reconectando al servidor' (antes era pantalla negra sin feedback).
  • Click spell no encontrado: writeConsole 'Hechizo no encontrado' (consistente con mana-insuficiente/cooldown).
  • closeForce silent kick: modal warning rojo con lista de razones + botón 'Volver al lobby'.
  • Block-walk feedback: 'No se puede caminar ahí' throttled 1.5s al chocar paredes/árboles.
  • Class/race reject: mensaje en rojo bold con nombre del item ('Tu clase no puede equipar X').
v2026-05-26Bugfix crítico

Bugfixes varios (Bardo Laúd, racial armor, centering)

  • Bardo invisible al crear: workaround removiendo Laúd Mágico del kit (objType=18 mal categorizado en data — TODO docu).
  • Armadura de Cuero Newbie ahora racial: enanos/gnomos reciben 1047 (sprite bajos) en vez de 1046 (sprite altos).
  • Char centrado en viewport: cliente.viewportRadius 13→12 (canvas 21×21 → center pixel 336 alineado).
  • TileBufferSize 3→5: fuente de Ullathorpe y otros sprites grandes ya no desaparecen al borde mid-animation.
  • Crash 'vars.areaNpc[idNpc] is not iterable' en muereNpc: guard contra Set undefined.
  • Pre-warm de páginas al boot: estilos cargan al primer click (era 'Ctrl+Shift+R' para forzar recompile).
  • Mixed Content fix de ws-ticket en prod: API base ahora detecta localhost vs hosted (no más HTTPS→HTTP blocked).
v2026-05-26Branding

Logo Cinzel + home news + foro launch

  • Logo del navbar: Oswald → Cinzel (Trajan-style serif fantasy) con gradient gold metallic via background-clip:text.
  • Layout pasa a 'Argentum Online · Web' en una línea (era 2 líneas), baseline-aligned.
  • Home news con pinning visual (badge 'Fijado' + card Atrium dorado).
  • Compromiso 'ningún personaje será borrado' explícito en la bienvenida + level cap actual = 42.
  • 3 noticias nuevas del 25-May (apertura oficial, banco Ullathorpe, NPCs inteligentes).
  • Enlaces a Facebook removidos. Mención iOS/Android removida (compromiso solo cuando exista).
  • Foro inaugurado con thread sticky de Atidorfa conmemorando el 25 de Mayo.
v2026-05-25Performance

Performance audit Tier 1-3

  • WS setNoDelay(true) — disable Nagle en cada conexión: -20 a -40ms de ping promedio.
  • Pool de ByteBuffer + cache HUD strings + Date.now() cacheado por frame: ~95% menos GC pressure en wire.
  • TileBufferSize 9→3 + viewportRadius centralizado: ~30% menos drawcalls off-screen.
  • visibilitychange listener + cap delta ≤50ms: mata el jank al volver del bg-tab.
  • Audio: cache de localStorage + pool de 3 elements pre-creados por idSound: ~50ms/seg de main thread liberados.
  • areaNpc Array→Set (~40 sitios): operaciones O(N)→O(1).
  • user._invSize counter en hot path: reemplaza 5 Object.keys.length + descubre bug latente (slots 22-24 bloqueados silenciosamente).
  • Mongoose indices + worldSave paralelo (Promise.all): ~30× más rápido con 30 chars conectados.
v2026-05-25Gameplay

Banco Goliath (NPC Banquero funcional)

  • 24 slots de banco persistentes en Mongo (campo bank en characters).
  • Modal Atrium Frame con 2 grids 4×6 (banco | inv), drag-and-drop full.
  • Partial stack split: depositar/retirar N divide stacks; mismo idItem en destino mergea.
  • Wire protocol nuevo: openBank, bankUpdate, depositItem, withdrawItem, swapBankSlots.
  • Anti-cheat: distance check ≤2 tiles al banquero + sesión npcBank activa.
  • Persistencia en worldSave Y disconnect (crítico: sin la del disconnect se perderían depósitos recientes).
v2026-05-25Audio

Combat SFX completo

  • SFX en todos los paths: NPC↔user y PvP — block (escudo), hit (impacto), miss (swing).
  • Broadcast vía loopArea para que chars cercanos escuchen el feedback ambiente.
  • WAV fallback para IDs problemáticos del OGG Vorbis del cliente VB6 (Chrome no decodea).
  • Fix de 3 bugs latentes de client.id undefined en callbacks de loopArea.
v2026-05-25Bugfix crítico

Viewport refactor server↔cliente

  • Bug: chars al borde del viewport se evaporaban mid-step (cliente y server no acordaban en el rango).
  • 4 constantes linkeadas: canvasSize, viewportRadius (cliente), TileBufferSize, viewportRadius (server).
  • ~80 magic numbers refactoreados en game.js, protocol.js, npcs.js, socket.js.
  • Click formula corregida: userCanvasTile = viewportRadius - 1.5 (antes 10.5 hardcoded → off-by-1 al subir radius).
  • Documentación entera en CLAUDE.md con receta para escalar el viewport visible.
v2026-05-25UI/UX

Inventario 8×3 + fixes laterales

  • Layout del inv HUD: 6×4 → 8×3 (mismo count, más horizontal). swapItems server bumpeado 1..21 → 1..24.
  • Botón de ordenamiento de hechizos oculto (display:none) — funcionalidad viva por si vuelve.
  • Chat msg al fallar maná en spell: italic azul (#7AB8F5), throttle 2s per-user.
  • React {0 && <span>} bug en badge 'E' del banco: renderizaba '0' literal. Fix con !! + ternario.
  • meditar:12 agregado a nameKeyCode (warning de React key undefined en modal de teclas).
v2026-05-23Bugfix crítico

Spell cast bug fix (idSpell canónico)

  • Lanzar Celeridad y casteaba Torpeza — slot/idPos drifteaba entre cliente y server.
  • Wire protocol migrado a mandar idSpell canónico (nunca cambia).
  • Server valida que el char conozca el hechizo escaneando user.spells.
  • Inmune a: reordenamiento UI, learn/unlearn mid-action, desync de slots.
v2026-05-23Estética

Rogue Frame en todo el HUD

  • Las 6 cajas del HUD (render, chat, header, body, stats, mapa) comparten exactamente el mismo chrome.
  • Bautizadas tres recetas: Rogue Frame (in-game identidad), Slate Card (datos densos), Atrium Frame (out-of-game).
  • Layout invariants documentados — bottoms de CAJA 1 y CAJA 6/7 alineados; tops de CAJA 2 y CAJA 4 alineados.
v2026-05-23UI/UX

Mapa redesign + plaques

  • Sistema de 4 estados con tecla M: minimapa → currentMap → mapamundi → selectedMap.
  • Plaques papyrus golden con nombre del mapa + coords.
  • Right-click cierra al estado 0.
  • Fix de portal loop infinito en Ullathorpe ↔ mapa 168.
v2026-05-23Gameplay

Balance documentado + Starter Kit

  • HP nivel 1 corregido a 20 para todas las razas y clases.
  • BALANCE.md inaugurado — fórmulas, tablas L1/L15/L25/L35/L42/L50.
  • Starter kit con items auto-equipados (NEWBIE.md).
  • Clases con maná arrancan con Dardo Mágico en slot 1.
v2026-05-23Branding

Identidad de marca

  • Logo ARGENTUMONLINEWEB tricromático: celeste / blanco / naranja.
  • Hover matrix-scan: beam dorado barre L→R en el navbar.
  • Login button + form alineados a la estética elite minimal.
  • Repo reuploadeado a github.com/atidorfa/ARGENTUM con autoría limpia.
v2026-05-23Gameplay

Naves de navegación

  • Cada barco usa su sprite (anim del objeto) en lugar del hardcoded idBody 84.
  • Slot equipped marca E en el inventario mientras navegás.
  • noSeCae=1 en las 4 naves — ninguna se cae al morir navegando.
  • Al morir navegando, sprite cambia a Fragata Fantasmal (idBody 87).
v2026-05-23Infra

Sistema GM documentado

  • Campo privileges: 0=user, 1=GM, 2=Mod.
  • Catálogo completo de comandos en CLAUDE.md.
  • Workflow seguro: stop server → mongosh → start server (evita pisar in-memory).
v2026-05-23Docs

Wiki + Patch Notes inauguration

  • PATCH_NOTES.md inaugurado en el root.
  • WIKI.md actualizada con sección Patch Notes.
  • Nueva página /wiki en el cliente.
Compendio del fork — para detalle completo ver PATCH_NOTES.md / WIKI.md en el repo.