goro

command module
v0.12.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Sep 10, 2026 License: MIT Imports: 6 Imported by: 0

README

goro

goro is an open Ragnarok Online client recreation implemented in Go.

The runtime uses GoGPU/wgpu for the window and presentation path, with a modern GPU pipeline and Vulkan support. Built 100% in Go without CGO, it is fully statically compiled and can be easily deployed.

This project wouldn't be possible without the existence of other open source clients like ROBrowser Legacy and Open Midgard and their reverse engineering efforts.

goro screenshot

Visit the project website or see Goro in action on this YouTube playlist.

Project Goals

  • Faithfully reimplement the original Ragnarok Online client.
  • Focus on the pre-renewal 2008 experience first.
  • Stay pure Go, without CGO, so cross-compilation and deployment stay simple on many platforms.
  • Aim for simple, readable, hackable codebase.
  • Use a modern GPU pipeline through GoGPU, including Vulkan and Wayland support.
  • Deliver good performance, including support for high-refresh-rate displays.
  • Provide a modernized, neat themeable UI built with gogpu/ui.
  • Keep the engine reusable for creating new MMORPGs.
  • Become a drop-in replacement for Ragexe and Sakexe.
Stretch goals:
  • Provide GRF tooling.
  • Provide map, sprite, and model viewers.
  • Support more Ragnarok Online client versions.
  • Support optional anti-cheat and security features.

Build and Run

CGO_ENABLED=0 go build -tags nofakecgo .
./goro

Configuration is loaded from goro.ini in the current directory when the file exists. Pass another file with --config:

data_dir = /home/kivutar/Téléchargements/OldRO

[window]
width = 1280
height = 720
fullscreen = false

[packet]
client_date = 20080910
profile = 23

[audio]
bgm = true
bgm_volume = 0.55

[render]
graphics_api = vulkan
vsync = true

[network]
trace = false

Command-line options override the ini file:

CGO_ENABLED=0 go run -tags nofakecgo . --data-dir ~/kRO --fullscreen
CGO_ENABLED=0 go run -tags nofakecgo . --config ./goro.ini --bgm=false --graphics-api vulkan

Useful options:

--net-trace
--packet-client-date 20211103 # only when rAthena is rebuilt for that packetver
--fullscreen
--bgm=false
--bgm-volume 0.35
--no-audio # disable BGM and SFX output entirely (useful for profiling)
--graphics-api gles # fallback if Vulkan is unavailable
--vsync=false # unlock fps
--username <username> # prefill the username in login window
--password <password> # same for password
--autologin=true # perform server connection and login on startup
--force-user-ai=true # start homunculus and mercenary in USER_AI custom mode
--script <path> # run an optional Lua character-control script in game

Getting Started

These are tutorials on how to setup a development environment.

Runtime data is discovered from, in order:

  • --data-dir
  • data_dir in goro.ini
  • current working directory

The resource manager currently looks for loose files such as:

  • data/clientinfo.xml
  • data/sclientinfo.xml
  • clientinfo.xml
  • sclientinfo.xml
  • System/clientinfo.xml
  • System/sclientinfo.xml

Current Scope

Currently implemented (not a claim of complete reference-client parity):

  • Login
  • Character selection
  • Character creation
  • Character deletion
  • Maps display
    • Water
    • Map sounds
    • Lightmaps
    • RSW fog with reference-client near/far behavior
    • Animated models
    • Weather effects
    • Map-specific effects such as Yuno clouds, pillars, and fireworks
    • Indoors
    • Granny 3D NPC models
    • Black-covered map loading with first-frame prewarming and fade-in
  • Camera
    • Smooth character following and zoom
    • Rotation and bounded outdoor tilt
    • Indoor and map-authored viewpoint locks
    • Outdoor zoom and rotation restoration after locked maps
  • Battle and Gameplay
    • Enemies
    • Classic PvP map targeting and rank counter
    • War of Emperium (2008 FE/SE client behavior)
    • Path finding
    • Continuous held-click walking
    • Drops
    • Playable characters animation chain
    • Attack-ready stance
    • Jobs
      • Novice
      • Super Novice
      • First jobs
        • Swordman
        • Magician
        • Archer
        • Acolyte
        • Thief
        • Merchant
      • Second jobs
        • Knight and Crusader
        • Wizard and Sage
        • Hunter, Bard, and Dancer
        • Priest and Monk
        • Blacksmith and Alchemist
        • Assassin and Rogue
      • Transcendent jobs
        • Lord Knight and Paladin
        • High Wizard and Professor
        • Sniper, Clown, and Gypsy
        • High Priest and Champion
        • Whitesmith and Creator
        • Assassin Cross and Stalker
      • Expanded jobs, including baby variants
        • Taekwon, Star Gladiator, and Soul Linker
        • Gunslinger and Ninja
    • Skill effects
      • Ground skill units and cast markers
      • Song and dance effects
    • Skill casting
    • Walk cancellation
    • Casting cancellation
    • Cursor snap
    • Noshift
    • Noctrl
    • Item drops
    • Item identification
    • Card composition
    • Trading
    • Vending
    • Legacy mail with item and Zeny attachments
    • Show equipment
    • Alchemist crafting
    • Blacksmith repair and weapon refinement
    • Guilds
      • Creation and invitations
      • Member and position management
      • Leaving, member expulsion, and guild disbanding
      • Guild skills
      • Notices and expulsion history
      • Emblem selection
    • Pets
      • Capture slot machine
      • Egg hatching
      • Feeding
      • Status window and rename
      • Accessory equip/unequip
      • Performance actions
      • Emotes and talk bubbles
      • Feeding emotion reactions
      • Familiarity-gated client-side talk triggers
    • Companions
      • Homunculi
        • Status, skills, feeding, renaming, and deletion
        • Movement, combat, and skill commands
        • Default and custom USER_AI support
      • Mercenaries
        • Status and skill management
        • Movement, combat, and skill commands
        • Default and custom USER_AI support
      • Falcons
    • Friends
    • Parties
    • Whispers
    • Chat rooms
    • Character presentation
      • Item-specific weapon sprites
      • Mounts
      • Wedding sprites
      • Level 99 aura
  • UI
    • Overlapping windows with focus-to-front ordering and stable dragging
    • Basic information
    • Button bar
    • Multi-row shortcuts bar with classic key bindings
    • Console
    • Minimap with player, NPC, party, and guild markers
    • Items with vertical category tabs
    • Equipment
    • Option
      • Settings
    • Friends
    • Party & party settings
    • Guild management
    • Chat rooms
    • Stats
    • Skills with class-level vertical tabs
    • Homunculus and mercenary status and skill windows
    • Emote window
    • Cart Storage
    • Kafra Storage with vertical category tabs
    • Teleport skill modal
    • Warp skill modal
    • Cart appearance modal
    • Trade window
    • Vending windows
    • Legacy mailbox, read-mail window, and multiline composer
    • Card composition and full card illustration windows
    • Show-equipment window
    • Alchemist crafting window
    • Blacksmith repair and refinement windows
    • Item pickup notifications
    • Item and skill tooltips
    • Status icons with roBrowser-sourced metadata
  • Emotes
  • Overlay text
    • FPS meter
    • Character names and HP/SP bars
    • Speech bubbles
  • Optional Lua character scripting
    • Player, enemy, nearby-player, companion, floor-item, and inventory state
    • Walking, stopping, attacking, looting, item use, chat, and targeted skills
    • Layout-independent physical keyboard input and text input
    • Lua-defined keyboard controls for movement, combat, looting, and skill target cycling
  • Tools
    • GRF packing and extraction

Documentation

Overview

Package main wires configuration, the application model, and the renderer. Runtime state belongs in app, game, world, or session rather than here.

Directories

Path Synopsis
Package app owns the high-level client object that connects configuration, resources, networking, audio, session state, and the active game mode.
Package app owns the high-level client object that connects configuration, resources, networking, audio, session state, and the active game mode.
Package audio plays BGM and sound effects.
Package audio plays BGM and sound effects.
Package client defines the runtime context shared by game orchestration and UI.
Package client defines the runtime context shared by game orchestration and UI.
cmd
grf-extract command
grf-pack command
Package config loads user configuration from defaults, goro.ini, environment, and command-line flags.
Package config loads user configuration from defaults, goro.ini, environment, and command-line flags.
Package db contains static Ragnarok Online client tables adapted from robr's DB directory.
Package db contains static Ragnarok Online client tables adapted from robr's DB directory.
Package game orchestrates client behavior: map input, network reactions, skill commands, local effects, and calls into render, audio, network, world, and ui.
Package game orchestrates client behavior: map input, network reactions, skill commands, local effects, and calls into render, audio, network, world, and ui.
Package input defines backend-neutral input snapshots and events consumed by game.
Package input defines backend-neutral input snapshots and events consumed by game.
internal
appicon
Package appicon provides Goro's embedded application icon.
Package appicon provides Goro's embedded application icon.
Package network encodes and decodes Ragnarok Online packets and manages socket I/O. It should expose parsed protocol facts without making UI or gameplay policy decisions.
Package network encodes and decodes Ragnarok Online packets and manages socket I/O. It should expose parsed protocol facts without making UI or gameplay policy decisions.
Package render wraps the gogpu backend and provides drawing primitives used by game.
Package render wraps the gogpu backend and provides drawing primitives used by game.
Package res loads and decodes Ragnarok client resources such as GRF, GND, GAT, RSW, RSM, sprites, palettes, tables, and message strings.
Package res loads and decodes Ragnarok client resources such as GRF, GND, GAT, RSW, RSM, sprites, palettes, tables, and message strings.
Package session stores account, character, and player-session values shared across login, character selection, map transitions, and game UI.
Package session stores account, character, and player-session values shared across login, character selection, map transitions, and game UI.
ui
Package ui contains client UI composition, modal/menu/window state, and reusable skinning primitives.
Package ui contains client UI composition, modal/menu/window state, and reusable skinning primitives.
rotheme
Package rotheme centralizes the Ragnarok-style gogpu/ui theme values.
Package rotheme centralizes the Ragnarok-style gogpu/ui theme values.
Package world stores the current map model: actors, floor items, map resources, camera position, pathfinding, and movement interpolation.
Package world stores the current map model: actors, floor items, map resources, camera position, pathfinding, and movement interpolation.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL