Ir al contenido
AURUM Documentación
/

Investigación · 01

3 min de lectura 737 palabras 6 secciones

Argentum 20 (ao-org): código, juego y datos convertibles

Investigado 2026-07-25. Fuente: repos públicos de https://github.com/ao-org

Qué es

ao-org es la organización oficial de Argentum 20 (AO20), la continuación viva del Argentum Online original (1999, Pablo "Morgolock" Márquez). Mantenida por Noland Studios. Extremadamente activa: commits en el server el mismo día de esta investigación (2026-07-25). En Steam desde 2022-04-29, con EasyAntiCheat + Epic Online Services.

Repos clave

Repo Tech Notas
argentum-online-server VB6 Server canónico. SQLite+ADO, 50 migraciones SQL, 24 suites de tests, feature flags, rate-limit por paquete
argentum-online-client VB6 + DirectX8 Cliente canónico. Audio BASS, UI mixta VB6 + React embebido (BabelUI/Chromium)
Recursos assets TODO el contenido del juego: 7.535 archivos — 843 mapas .csm, todos los .dat de balance, 2.330 spritesheets, 1.430 oggs
Aurora.Network C++ Networking TCP como COM (reemplazó WinSock/DirectPlay)
ao-ui React UI de login/cuentas/creación de personaje que corre dentro del cliente VB6
forever-client (C#), ao-unity Intentos de rewrite ABANDONADOS (2020/2021); el org decidió evolucionar VB6

El juego (mecánicas núcleo)

  • Mapas 100×100 tiles (32×32 px), movimiento por casillas en 4 direcciones, 210 ms por tile (server-enforced), interpolación suave en cliente.
  • 6 razas (Humano, Elfo, Drow, Enano, Gnomo, Orco) con modificadores de atributos en Balance.dat.
  • 12 clases: Mago, Clérigo, Guerrero, Asesino, Bardo, Druida, Paladín, Cazador, Trabajador, Pirata, Ladrón, Bandido.
  • ~29 skills subidas por uso (Magia, Apuñalar, Ocultarse, Talar, Pescar, Minería, Herrería, Domar, Navegación, Equitación...).
  • 293 hechizos (Hechizos.dat): palabras mágicas, maná+stamina, 12 tipos, FX/partículas.
  • Combate: PoderAtaque vs PoderEvasion, MinHIT/MaxHIT, DEF, apuñalar por clase, estados (parálisis, inmovilizar, ceguera, estupidez), cooldowns separados melee 1165 ms / cast 1230 ms / combo 800 ms.
  • Supervivencia: HP/maná/stamina + hambre y sed, meditación, descanso.
  • PvP y alineación: ciudadano/criminal + facciones (Armada Real vs Legión Oscura), modo seguro, mapas con flag Seguro + bitmask de restricciones (Newbie, SinMagia, NoPKs, SoloClanes, niveles min/max...), 40 tipos de triggers por tile (zona segura, zona pelea, bajo techo, cárcel, autoresu...).
  • Muerte: drop de ítems en mapas con DropItems; fantasma resucita en sacerdotes/tiles AUTORESU/puntos de ciudad.
  • Mundo: 843 mapas, ~11 ciudades (Ullathorpe, Nix, Banderbill...), barcos que navegan entre puertos, día/noche, clima por mapa.
  • Social/economía: clanes con elecciones/alianzas/guerras, parties, comercio NPC + trade seguro + banco + subastas + tiendas de jugador, crafteo (herrería/carpintería/sastrería/alquimia), recolección, doma, monturas, navegación.
  • PvE/endgame: 1.404 NPCs, quests (Quests.DAT 812 KB), invasiones, asedios de castillos, eventos automáticos, battlegrounds instanciados (DeathMatch, HuntNpc, abordaje naval), duelos, torneos, logros.

Arquitectura y protocolo

  • TCP binario little-endian; ~204 tipos de paquete server→client y ~313 client→server (PacketId.bas, Protocol.bas — públicos; solo el generador es privado).
  • Interest management por áreas (ModAreas.bas + particiones) — el server solo manda lo cercano.
  • Tick: loop principal con AI de NPCs cada 150 ms; timers de 1 s/60 s para regen/hambre/clima; cooldowns por usuario contra intervalos.ini (unidad nominal de tick: 40 ms = 25 Hz).
  • Login por cuenta (email+password, 2FA opcional) → lista de personajes → spawn.

Datos convertibles (CRÍTICO para el remake)

Todo abierto y crudo en ao-org/Recursos (nada se retiene):

  • Mapas/Mapa<N>.csm (843 archivos, 80–200 KB): formato binario UN archivo por mapa, layout completo decodificado desde CargarMapaFormatoCSM en Codigo/FileIO.bas (~línea 1525): header de 11 Longs → tamaño → metadata (nombre, restricciones, música, seguro, lluvia/nieve/niebla, salida) → arrays sparse: Bloqueados (con bitmask direccional por lado), Layers 1-4 (piso / overlay-puentes / objetos-árboles / techos, por GrhIndex), Triggers, Partículas, Luces (color+rango), Objetos, spawns de NPCs, TileExits (portales). Agua/lava se detecta por rangos de GrhIndex.
  • Dat/*.dat (texto estilo INI, Latin-1): obj.dat 4.996 ítems (~47 categorías), npcs.dat 1.404 NPCs (stats, drops, hechizos, respawn), Hechizos.dat 293 hechizos bilingües, Balance.dat (razas/clases), Ciudades.Dat (spawns/resurrección), recetas de crafteo, quests, facciones, pesca, tesoros, invasiones.
  • init/graficos.ini: índice de 185.535 grhs en texto plano (Grh<n>=frames-archivo-x-y-w-h) → mapea a los 2.330 spritesheets. Índices de cabezas (757×4 direcciones), cuerpos, cascos, armas, escudos, FXs, minimapas.

Implicación: un conversor programático puede transformar mapas+balance+contenido completo de AO al nuevo motor. Cada GrhIndex de tile/objeto se mapea a un asset low-poly 3D. Heredamos 20+ años de contenido balanceado sin diseñar mapas a mano.

Prior art relevante

  • LambdaClass hizo un rewrite web de AO: server Elixir + cliente TypeScript (Vite/React/Pixi.js) hablando el protocolo AO20 original — https://github.com/lambdaclass/argentum
  • ao-web-client (Pixi.js): https://github.com/ominousg/ao-web-client
  • finisterra (Java/libGDX, ao-libre, dormido desde 2022); argentumonlineweb de dcatanzaro (JS, dormido 2023); argentum-online-lwjgl3 y pyao-server activos 2026.
  • Dentro de ao-org: los rewrites C#/Unity fracasaron; la modernización real fue BabelUI (React embebido) + ingeniería sobre VB6.