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 desdeCargarMapaFormatoCSMenCodigo/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.dat4.996 ítems (~47 categorías),npcs.dat1.404 NPCs (stats, drops, hechizos, respawn),Hechizos.dat293 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.