# Ragexe RE function data: notes for AI agents Every function of two Ragnarok Online client builds (Ragexe: 32-bit x86, Visual C++, image base `0x00400000`), each with a name and a one-line description of what it does. The pages under `/docs/ragexe_re/` show the same data for people; this file is for you. | Build | Functions | Data | PE timestamp | Official packed exe, sha256 | |---|---|---|---|---| | 2026-02-19 | 47,061 | `/docs/ragexe_re/2026-02-19/functions.tsv` (8.4 MB) | `1770772907` (2026-02-11) | `a5df0632c619786cfb9a82ab83e63dc5b815ffb00429858ef4319da7e63e8f1f` | | 2025-07-16 | 43,836 | `/docs/ragexe_re/2025-07-16/functions.tsv` (6.8 MB) | `1752109607` (2025-07-10) | `202c4282d501b5f513c7e7227ba84965cd9ef2bd02420189f89bf85cd7557941` | The unpacked images we analysed are 16,552,448 bytes (2026-02-19, sha256 `515c97aa...dc341`) and 16,076,800 bytes (2025-07-16, sha256 `c41bca72...0ada5`); full hashes in `builds.json`. Yours will likely differ, since every unpacker writes its own image; see "Addresses" below. ## The files `functions.tsv`: tab separated, UTF-8, LF line ends, one header row, sorted by address. | Column | Example | Meaning | |---|---|---| | `address` | `0x00640510` | virtual address of the function's first byte, `0x` + 8 uppercase hex digits | | `size` | `1457` | bytes | | `name` | `CEntity__render_robe_sprite` | our name, `Class__method` style | | `category` | `game_entity` | the catalog category (its page is `/docs/ragexe_re//`); `other` = none yet | | `description` | `Renders the robe/garment sprite overlay for an entity. ...` | one line, what the function does | A category too big for one page is cut by address into parts: part 1 is `/docs/ragexe_re//` and the rest continue at `-2`, `-3` and so on, each holding the addresses after the last one before it. As of 2026-11-01 nine are in parts: 2026-02-19 `stl` (6), `game_core` (5), `crt` (3) and `effect` (2), and 2025-07-16 `crt` (6), `game` (3), `stl` (3), `effect` (2) and `ui_misc` (2). A category's page shows only its part, but `functions.tsv` always has every row, so use it, not the pages, to list a category. `builds.json`: per build, the binary identity above and the category list (id, title, the classes it covers, count, lowest and highest address). ## How to use it Download once, then search locally: ```sh curl -fsSLO https://warp.legacygamers.net/docs/ragexe_re/2026-02-19/functions.tsv grep -i '^0x00640510' functions.tsv # the function that starts here grep -i 'render_robe_sprite' functions.tsv # by name grep -i 'palette' functions.tsv | cut -f1,3 # by what it does awk -F'\t' '$4 == "network"' functions.tsv # one category ``` An address inside a function, not at its start: ```python import bisect rows = [l.rstrip('\n').split('\t') for l in open('functions.tsv', encoding='utf-8')][1:] starts = [int(r[0], 16) for r in rows] def owner(va): i = bisect.bisect_right(starts, va) - 1 return rows[i] if i >= 0 and va < starts[i] + int(rows[i][1]) else None print(owner(0x00640600)) # -> the CEntity__render_robe_sprite row ``` ## How far to trust it - **The names and descriptions are analysis, not symbols.** They came from reading the code, much of it model-assisted and then audited, function by function. Use them as a strong hint about what a function is, and confirm against the disassembly before you depend on a detail: a branch, an offset, a constant, a calling convention. - **Class names are the weakest part.** Where your own tools show a class from RTTI or a vtable, that wins over our name. - **The descriptions are the strongest part:** what a function reads, writes and calls, in plain words. - Names follow `Class__method`; constructors and destructors are `Class__ctor` / `Class__dtor`. A trailing `_XXXXXXXX` only tells apart two functions that would otherwise share a name. ## Addresses The addresses are those of our unpacked image of each build. Another unpack of the same build usually keeps code at the same virtual addresses, but not always, and a different build moves nearly everything. Before you trust a match, check it: compare a few bytes at the address, or the function's size, with your own image. ## Use Free to read and use, for research, modding and running your own server. A link back to `https://warp.legacygamers.net/docs/ragexe_re/` is appreciated. The client itself and Ragnarok Online belong to Gravity Co., Ltd.; this is documentation about a binary, not the binary.