WARPGATE
WARPGATE and WARP0716 · newest first

Changelog

Both products on one timeline. WARPGATE entries are the ones the app itself shows in its CHANGELOG tab; WARP0716 entries are the repository's CHANGELOG.md for the 2025-07-16 patch set. Older WARP history before this patch set stays on GitHub.

September 2026

2026-09-04
WARP0716PATCHES

September 4 Update

Patch update - re-WARP to apply. Two new patches, six fixes and a new WARP.exe. Re-apply WARP to use them.

Easiest route: open WARPGATE, use the WARP tab to update the patcher and this patch set, then re-apply your profile. Guides for the patches that need files from you are at warp.legacygamers.net/warp0716.

New patch: Party HP/SP Bars (Reforged) (#34)

Splits every party member's bar into an HP half and an SP half, in the party window and on the detached mini widgets, and draws the SP number beside it. You can set the HP and SP colours, with your own row separate from everyone else's so you are easy to find in a full party.

This one needs a change on your server as well: the client half alone gives you a split bar whose SP side never moves. The SHOW_PARTY_SP build flag makes rAthena send the 22-byte 0x0BAB party packet carrying sp and maxsp, and adds the @spbar command so a player can hide their own SP from the party. The patch is in the repository at examples/ShowPartySP/, and the guide walks through applying it: Party HP/SP Bars guide.

Party SP travels only to members who can see each other, which is the client's own behaviour for HP.

New patch: Add your own buttons

Adds extra buttons to the row below the HP/SP bars in the Basic Info window, past the 25 the client ships with. Each one is written as iconName = behaves like: the icon name is also the file name, so the client loads bt_<iconName>.bmp and bt_<iconName>_press.bmp from data\texture\<UI folder>\menu_icon\, and behaves like names one of the stock buttons whose action the new one performs. Guide: Custom Buttons.

Custom Jobs (Reforged): weapons and palettes (#62)

Reported by mimishi. A custom job's weapon hung in the air beside the character instead of sitting in its hand. Fixed, and the job's weapon sprite folders are now read from PCHands.lua at the moment you patch, so a new job needs a row there and nothing else.

The palette half was not a bug in the patch. PCPals is a filename prefix, while PCPaths and PCHands are folder names, so a folder named after your job means the client never finds the files. The Custom Jobs guide now names the exact folder, lists the files the client opens for your own value, and warns that a palette copied from another job keeps that job's prefix until you rename it.

Hide Buttons / Show Buttons (New UI): every button, listed (#24)

Reported by gidzdlcrz. Both patches now list every button this client has, rather than only the ones the client leaves visible. On 2025-07-16 the three the client hides by itself are Battleground, Booking and Twitter, and they are selectable in both lists now; the prompt says which are already hidden, and picking one that is already in that state simply does nothing. Choosing the same button in both patches is rejected with an error naming it, rather than silently resolving one way.

Fixed: EXP bar customization (#49)

The patched client would not start at all: a strange icon, then "This app can't run on your PC". It was writing over the executable's DOS header at offset 0, so Windows refused to load the image. Four stacked defects sat behind that one symptom and all four are fixed.

Fixed: Resize Player HP/SP bar (#52)

It never appeared in WARP's patch list, because a build-date check hid it from a 2025-07-16 client. With that lifted it still only moved the bar, because the size it searched for is written differently on this client. Both fixed: the bar measures 120x20 in game, up from 60x9.

Zoom: a 25% step, and a level you set yourself (#50)

Increase Zoom Out (to 25%) is the gentler step that was asked for, for when Max is too far out. Increase Zoom Out (custom %) takes the percentage you want over the client default and works out the distance, so 60 gives the camera 60% more range. Max was corrected as well: it used to pull back further than this client can draw, which showed black at the edges of the screen, and it now stops at the real limit.

All of them had been overwriting a constant the renderer also uses as its reference resolution, so they rescaled sprites and effects as well as moving the camera. They move the camera and nothing else now.

★ Remember to turn zoom out on in game with /zoom, or none of this shows: with the client's own setting off, the camera is capped tighter than stock.

Walk Delay (Reforged) (#39)

Sets the delay between walk-click inputs in milliseconds. The old Remove Walk Delay patch was this one with the value pinned to zero, so it is retired. Do not go below 10: below that the character stops playing its walk animation.

A new win32/WARP.exe

Select Recommended now loads profiles/community_recommended.yml, which is 37 patches that give you a working English client in one click, without answering a single question. The dead Convert Profile to Session row is gone from the menu.

Housekeeping

  • Retired, declarations commented out with the reason, implementations left intact so re-enabling is uncommenting one block: NoWalkDelay (merged into Walk Delay), CancelToLogin (unsatisfiable on this client and redundant), MsgStrings and QuestDisplay (the client reads those files anyway). SendClientFlags is no longer recommended.
  • docs/ has left the repository. The guides live on warp.legacygamers.net, where they are rebuilt with the patch set. What used to sit under docs/ and is not a guide has moved to examples/: the Custom Jobs example job and its annotated Lua reference, and the Party HP/SP Bars server patch.
  • profiles/community_recommended.yml rebuilt against the current patch set.
2026-09-02
WARPGATENEW

A title bar that says where everything is

Every tab in the title bar carries an icon now, the five steps and the CHANGELOG and FAQ tabs alike, so the row reads at a glance instead of by reading each word.

A WEBSITE button sits beside DONATE and opens warp.legacygamers.net, the new home for everything WARPGATE and WARP0716: what each one does, an FAQ for a client that will not start, one changelog covering both, and a guide for every patch that needs files from you.

DONATE moved onto the row with the rest and lost its PayPal entry, so what is left is the one link that works.

2026-09-02
WARPGATEFULL CLIENTRAGEXEFIXES

A finished install no longer reads as unfinished

Right after an install completed, the card could read Ready to install or Update available · 0 B to download and sit there for up to fifteen minutes. Nothing was wrong with the install: a status check that started during the last verify was answering for a moment the install had already left, and it landed after the finish.

WARPGATE now refuses to judge a folder while a download is still working in it, and throws away any check that comes back after things have moved on. Clicking around during a download is safe again.

The Coming soon rows for a future client are gone from the dropdowns. They will return when there is something to download.

2026-09-02
WARPGATENEW

A troubleshooting FAQ, inside the app

WARPGATE now has a FAQ tab for the six things people ask most when the game will not start: there is no game to launch in my folder, Windows or my antivirus blocked it, nothing happens when I double-click it, a message says a .dll is missing, it opens and then crashes, and everything is in Korean.

Each answer says what is going on and what to do about it, and the tab it points you to opens straight from the answer: RAGEXE, WARP or LANG, one click, no hunting.

The crash entry walks you through finding a bad patch: cut back to the recommended set we test, then add your own extras back a few at a time until the culprit shows itself.

The welcome card also opens once more after this update. It now lists all five steps, numbered the same way as the tabs, and the FAQ is one click away from it.

2026-09-02
WARPGATEFIXES

The WARP walkthrough is one button now

The WARP guide used to teach two routes and an answer sheet. It now teaches the one that applies to a WARP installed through WARPGATE: press Select Recommended, check the count, apply. That button ticks the community patch list and fills in every path answer at once, so WARP asks you nothing.

The two fallback pages, loading the session file or answering the questions by hand, are still there and marked for what they are: only for a WARP that came from somewhere else and asks you about eleven questions, one dialog at a time.

2026-09-01
WARPGATE

Two downloads at once

You can now start the full client and the Ragexe together instead of waiting for one to finish. Each tab keeps its own progress, and Pause and Cancel act on that tab only.

The same thing twice is still refused: one folder gets one copy of each download at a time, which is the guard that stops two installs writing over each other.

2026-09-01
WARPGATEFULL CLIENTFIXES

The last 1% no longer looks frozen

A few of you saw the client sit at 98-99% for half a minute or more with the speed still showing and "0s left". Nothing was stuck. After the last piece lands, WARPGATE checks the whole 3.6 GB archive against its signature before it puts it in place, and that check had no progress of its own to show.

It now has a phase of its own, Verifying, with a real percentage, in every skin. The rate and the time-left line also stop guessing once the download itself is done.

While looking, we found the status bar had been showing a made-up file count during downloads since the first release. It shows what it actually knows now.

2026-09-01
WARPGATEFULL CLIENTRAGEXEFIXES

A slow mirror gets benched, not waited on

If a mirror slows to a crawl mid-piece, WARPGATE now notices within about twenty seconds, sets that mirror aside for a minute and fetches the piece from another one. Before, a crawling connection could hold a piece for ten minutes before anything happened.

This also removes a limit nobody meant to set. Each 64 MB piece had ten minutes to arrive, which quietly ruled out connections under roughly 7 Mbit. There is no such ceiling now; a slow line just takes longer.

2026-09-01
WARPGATEFULL CLIENT

A check for the Windows runtimes before you install

The client needs two Microsoft runtimes that Windows does not ship in full, the Visual C++ runtimes and DirectX. Without them it will not start, and Windows only tells you the name of one missing .dll.

Before a client install, WARPGATE now looks for them and, if any is missing, shows a notice naming the files with links to both packages. It never stops the download: the runtimes install alongside it.

The FAQ entry for a missing .dll says the same, with the same two links.

August 2026

2026-08-18
WARP0716PATCHES

August 18 Update

Patch update - re-WARP to apply. Seven new patches and a Simplified Chinese translation. Re-apply WARP to use them.

New patch: Tighter Entity Click Area (#63)

The client does not let an entity's clickable box get small. It widens every one up to a minimum worked out from your window width, width / 640 x 40 pixels for actors and x 34 for map NPCs and skill units. At 1600x900 that is a 100 px box around a sprite that may be a fraction of it, so a poring standing near an NPC can swallow clicks meant for the NPC. This patch lets you shrink that floor, so small things claim only the space they occupy. Thanks to Stingor.

New patch: Restore the "View Skill Info." checkbox (#61)

Older Ragexe builds had a checkbox in the top right of the ALT+S Skill Tree, and while it was ticked, hovering a skill popped its detail window next to the cursor instead of making you right-click. The client still owns the option internally and still saves it; only the checkbox went missing. This brings it back. Thanks to Stingor.

New patch: Restore GM weapon trails (#60)

Accounts listed under <admin> in your clientinfo lose the weapon trail, the blade gleam drawn while attacking. The client writes 0 into that sprite layer for GM accounts, so the renderer drops it. Disable GM sprite does not cover this, because it only touches the two name-list functions. Thanks to Stingor.

New patch: Restore Sonic Blow and Arrow Vulcan animations (#58)

Gives Sonic Blow and Arrow Vulcan back the attacker's sprite animation. Pick either or both when you apply it. Gravity never deleted the animations, only the routing that chose them: the client still plays it for Chain Crush Combo, and this sends the selected skills back down that same path. Sound and effects were never affected. Thanks to Stingor.

New patch: Mark pet chatter in chat (#55)

Pet chatter arrives with no sender and the ordinary message type, so a pet named after a player reads exactly like that player talking. This tags every automated pet line with a marker of your choosing, default pet, with a choice of brackets. Thanks to Stingor.

New patch: No bogus "not your guildsman" whisper warning (#54)

Stops the "This character is not your guildsman" and "This name is not registered in your Friend List" lines the client prints on incoming whispers. They exist to flag impostors who swap a capital I for a lowercase l, which is a real problem, but the comparison is far too loose and fires on ordinary names that merely resemble a friend's. Thanks to Stingor.

New patch: Shared head palettes for Doram (#53)

The existing shared head palette patches skip the Doram races entirely, so a Doram still needs one palette file per hairstyle and per gender while everyone else needs one. This applies the same shared naming to Doram. The files stay in the Doram race folder on purpose: Doram sprites do not share the human palette indexing, and pointing them at the human files leaves the character mostly black. Thanks to Stingor.

Simplified Chinese translation (#56)

WARP's own interface is now available in Simplified Chinese. Thanks to jj163494, building on xvn5002036's Traditional Chinese work.

2026-08-06
WARPGATERAGEXEFIXES

The Ragexe stops asking to install

Since the delivery changed on 28 July, the RAGEXE tab has been showing Update available every single time, and installing never made it stop. The July note said it would ask once. It should have, and this is the fix that finally makes that true.

WARPGATE was recording the Ragexe as installed in one place and looking for it in another, so it never found its own work and started over each time. Nothing was wrong with the file you downloaded; it just fetched it again for no reason.

If you have installed it at least once, the tab will simply read Up to date from now on. Nothing to re-download and nothing to click.

The same mix-up made Verify report a healthy Ragexe as damaged. That is fixed too.

2026-08-06
WARPGATENEW

The world keeps turning when the live view is down

The Realm interface shows the live game world behind the window. When that view cannot be reached, WARPGATE used to fall back to a single frozen picture, and sometimes it did not even manage that: the window showed a broken image while the label still claimed the realm was live.

Now it falls back to a recorded loop of the town instead, a full day passing over the plaza, so the backdrop keeps moving even when the live view is out. It downloads once in the background and is kept on your machine.

The still picture behind it was also re-taken, so it shows the town as it looks today rather than how it looked months ago.

The realm offline marker is honest now as well. It could not previously tell the difference between a slow connection and a dead one, so it tended to keep saying live no matter what.

2026-08-06
WARPGATENEW

A guide for the WARP patcher, and it checks properly now

The WARP tab has a ? button that opens a short illustrated guide: which file to open, the easy route with the ready-made session file, and the answers to use if you pick the patches yourself. The one that catches people out is SystemEN, not System, because SystemEN is what the LANG tab installs.

Check again now really re-checks. It used to answer from a cached result for up to half an hour, so clicking it looked like it did nothing at all.

When WARP is already up to date, there is now a Reinstall option to put the files back if something in your copy got damaged. Your own edits are kept, as always.

WARPGATE also watches more of the patcher for updates than before, so a new version of the tool itself no longer slips by unannounced.

2026-08-06
WARPGATERAGEXENEW

Get the Ragexe on its own

The RAGEXE tab can now be used without opening a gate first, for people who already have a client from somewhere else and only want the executable.

It asks first and explains what it is: the game program on its own, about 4 MB, and not a playable game by itself. You choose the folder it goes into, and that folder needs to be one that already holds a client.

With a gate open nothing changes: the Ragexe installs into that gate, exactly as before.

July 2026

2026-07-29
WARPGATERAGEXEFIXES

Server select: exit works, and switching servers mid-session is fixed

On the server select screen the second button now says exit and actually exits, with the game's own confirmation. Before this it made the window vanish and left you looking at nothing, with no way back.

If your server list has more than one entry, you can now log in to one, go in-game, back out to the list and pick a different one. That last step used to fail to connect.

A missing or incomplete clientinfo.xml now tells you what is actually wrong instead of just failing to connect.

Your server list is also handled more efficiently: the client no longer scans the whole clientinfo.xml at startup to build its own copy of every server, so start-up does less work and the old 8 server limit is gone.

If you patched your own executable, WARPGATE keeps yours and will not replace it. To get these fixes, take ours from the RAGEXE tab (your copy is saved as a .bak), or re-patch starting from the new one.

2026-07-29
WARP0716PATCHES

July 29 Update

EXE update - grab the new Ragexe. These fixes live in the injected EXE itself, not in a WARP patch, so re-WARPing the exe you already have will not pick them up.

Get it through WARPGATE: unzip, run it, and use the RAGEXE tab. Then re-apply your patch set if you use one.

If you have already patched your own executable, WARPGATE keeps yours and will not overwrite it. Choose ours from the RAGEXE tab (your copy is saved as a .bak), or re-patch starting from the new one.

The "exit" button on server select now actually exits (#17)

Reported by gidzdlcrz: on the service/server select screen, pressing the second button made the window vanish and left you with nothing on screen. The only way out was to close the client.

The button was renamed to "exit" in an earlier build, but only the label changed. It still performed a cancel, and cancel on that screen closes the window and then sends a message the client ignores while it is on the server list, so nothing replaces it.

It now uses the client's own exit path, which was already present and simply never shown: a confirmation dialog, and a clean shutdown if you accept. Pressing cancel on that dialog returns you to the server list with everything intact.

Multi-connection clientinfo.xml: switching servers mid-session now works

If your clientinfo.xml lists more than one <connection>, players can pick a server on the service select screen. That worked from a fresh start, but not after you had already played: log in to one server, go all the way in-game, back out to the server list, pick a different server, and the client would fail to connect.

The old code kept its own private copy of every server's address and port and looked yours up by position in that list. That copy went stale once you had been in-game, and it could also drift out of step with the on-screen list if any <connection> was missing an <address>. It was capped at 8 servers, silently.

It now reads the address and port the client itself resolved for the connection you picked, so there is nothing of ours to go stale, no cap, and no way for the list positions to disagree. Verified against two live servers: pick the second or third entry after a full in-game session and you land on the right one.

Leaner startup, and the 8 server limit is gone

The old code scanned your entire clientinfo.xml at startup and built its own private copy of every server's address and port before the login screen even appeared. That work scaled with the length of your server list, and it was capped at 8 servers.

None of that happens now. The client reads the address and port for the server you picked, at the moment it connects. Startup does strictly less work, there is no cap on how many servers you can list, and there is no second copy of your server list to fall out of step with the file.

clientinfo.xml problems now tell you what is wrong

Previously a missing, unreadable or incomplete clientinfo.xml just produced a failed connection with no explanation. The client now names the actual problem: the file could not be opened, or it has no usable <clientinfo>/<connection>, or the server you picked has no <address>.

2026-07-28
WARPGATERAGEXEUPDATE

The Ragexe tab will ask you to install once

The game executable now arrives as a small compressed pack instead of one big raw file, so it is about 4 MB to download instead of 15.

Because the delivery changed, the RAGEXE tab shows Install one time even if you already have the executable. That is expected, not an error. It takes a few seconds and puts back the same file you already had.

If you have patched your own executable (with the WARP0716 patcher, for example), WARPGATE now keeps your version and tells you it kept it, instead of overwriting it. You can still choose to take ours, and your copy is saved as a .bak.

2026-07-28
WARPGATEFIXES

Downloads could stop working until you restarted

If you opened the LANG tab and it was already up to date, every download afterwards would quietly refuse: Download or Install would flash and then do nothing, on the client, the English patch and the Ragexe alike. Restarting WARPGATE cleared it, but nothing on screen told you that, so it looked like the button was simply broken.

WARPGATE runs one download at a time and it was failing to release that slot when a language check had nothing to do. It now releases it on every path, so this cannot happen again.

If you have hit this, no files were harmed and nothing was left half-installed. It only ever refused to start new work.

2026-07-25
WARPGATENEW

Run as many clients as you want

WARPGATE now manages every client install you have, not just one. Each install is a gate with its own folder, its own updates, and its own English translation, and they all live together in the new gate hall. The GATE chip in the title bar names the one you are working on, and its dropdown switches between them instantly.

Your existing install is imported automatically as Main the first time you open this version. Nothing moves and nothing is re-downloaded. You can also hand WARPGATE a client folder you already have with Add existing folder, and it takes over updating that folder in place.

The CLIENT, LANG and RAGEXE tabs now follow the gate you are in, so what you are looking at always belongs to that one install. Each gate card shows its client build, which English era it has, and whether an update is waiting.

Reset WARPGATE no longer touches your files. It forgets your gates and your settings only; your clients stay on disk and you can add them back whenever you like. Deleting files is now a deliberate action on a single gate, with its own confirmation.

2026-07-25
WARPGATENEW

Get updates early with the beta channel

Settings now has an update channel. Stay on Stable, or switch to Beta to get new WARPGATE builds before they reach everyone. It asks before it switches, and you can move back to Stable exactly the same way.

Only the launcher differs between the two channels. Client, translation and Ragexe files are identical on both, so trying a beta build never changes what lands in your game folder. If there is no beta build published, WARPGATE quietly stays on Stable.

2026-07-25
WARPGATEFIXES

A tougher install, and a long list of repairs

If a client download was interrupted while data.grf was being updated, the install could get stuck for good: it reported itself up to date while the file was still incomplete, and nothing would repair it. That is fixed, and an install already stuck in that state now heals itself on the next check.

Switching your English era used to leave files behind from the era you came from. Those leftovers are now removed, which also clears a class of crash at client load caused by old files overriding the new ones.

The first-launch guide is rewritten around gates as 4 steps, and it no longer flashes up and closes itself. The version number moved to the bottom right, where a narrow window can no longer hide it, and the close button now stays reachable on small screens and at higher display scaling.

Also fixed: the donate links opened a folder instead of your browser, the progress sweep could paint outside its bar, pressing Pause could miss your click, a brand new gate could claim an English update it did not have, and the WARP tab could report the patcher as missing when it was installed.

2026-07-20
WARP0716PATCHES

July 20 Update

Patch update - re-WARP to apply. Adds one new patch for Skill Tree performance; re-apply WARP to use it.

New patch: Reduce expensive UI rendering (#45)

The ALT+S Skill Tree rebuilds its entire icon grid every single frame, even when nothing on it has changed. This patch skips that rebuild unless something actually changed: tab, hover, scroll, skill points, window size, or the client's own dirty flag.

Measured on a test client with the Skill Tree open, comparing both states on one running process: the stock client repainted on every frame and sat around 90% CPU, while the gated version repainted zero times across 256 consecutive idle frames and dropped under 1%.

Thanks to YlenXWalker and Stingor.

Idle repaint interval. The repaint being skipped is also what draws the character preview in the corner of the window, and that preview's animation is driven by a timer. Skipping every frame therefore leaves it frozen while the window sits idle. When you apply the patch it now asks for a minimum repaint interval:

  • Off - cheapest, the preview stops animating while idle
  • 200 / 400 / 600 / 800 ms - preview keeps animating

Default is 600 ms. The preview sprite only advances about every 600 ms, so repainting faster than that redraws the same frame for no benefit, and longer intervals cost less.

2026-07-18
WARPGATELANGFIXES

Cleaner language switching, and a smoother finish

Switching between Renewal and Pre-Renewal English is now clean. Installing one replaces the other (only one English set can be active at a time), and it asks first so nothing changes by surprise. Files you actually edited are still kept and backed up to .bak, and switching no longer pops a false "we kept your edits" list for files you never touched.

The LANG tab is tidier too: Check again now shows that it's checking, only your installed era is tagged Current (not both), and Reset now fully removes both translation sets, including any leftover files from an era you switched away from.

And a download fix: if a mirror stalled near the end, the client could sit at 98-99% for a while before finishing. It now fails over to a healthy mirror within seconds, so installs finish smoothly.

2026-07-16
WARPGATELANGNEW

Pre-Renewal English, and your edits stay yours

The LANG tab now lets you pick your era: Renewal or Pre-Renewal English. Choose from the dropdown and install; the Pre-Renewal set is kept up to date automatically, the same as Renewal, and both are Ed25519-signed and verified across all five mirrors.

If you install or update a translation onto a client you have customized, WARPGATE now keeps your edited files on the very first install too, not just on later updates. It shows you exactly which files it kept and lets you take the new versions instead, with your copy saved as a .bak. Nothing in your data folder is ever silently overwritten.

2026-07-15
WARP0716PATCHES

July 15 Update

Patch update - re-WARP to apply. This adds four community patches and fixes the mob/boss bar resize crash; re-apply WARP with the updated patches to use them.

Resize Mob & Boss Bars no longer crash (#22)

The ResizeNormalBar, ResizeMiniBossBar, and ResizeBossBar patches now work on the 2025-07-16 client. This was actually two separate bugs stacked on top of each other:

1. Patcher crash when enabling more than one. Each Resize\*Bar patch reopened the shared MobHP code tag, so applying a second one re-ran the tag setup and crashed the WARP patcher (access violation, 0xC0000005). Fixed with a guard: the shared hook is built once and each bar only writes its own width/height.

2. Client crash on mob-bar render. The patcher crash was hiding a second problem. WARP's automatic mob-bar hook detection mis-reads the 07-16 client and builds a malformed hook, which crashed the *client* the moment a monster HP bar was drawn (for example, clicking a mob). The hook location itself was correct; only the auto-generated code was wrong. Replaced with a hardcoded, verified 07-16 hook that reads the monster type from the correct field.

Confirmed in-game: Boss, Mini-boss, and Normal bars each render at their configured size with no crash.

Thanks to Gardosen for reporting it, and to themidgargospel for the extra detail in the thread.

New patch: HatEffect world-depth occlusion (#43)

Makes hat effects behave like special effects: they are now correctly occluded by buildings, walls, and other world geometry instead of drawing on top of everything. Thanks to YlenXWalker.

New patch: Dual weapon and off-hand sprites (#42)

Adds an option to render dual-wield and off-hand weapons with their original weapon sprites. Thanks to YlenXWalker.

New patch: Custom client codepage (#37)

A QJS-only patch that forces the client's text codepage, so text renders correctly regardless of the OS locale. Thanks to YlenXWalker.

Chat background patches split, plus Bigger Inventory (#35)

The main chat-background patch was split out and detached/whisper chat-background patches were added, which also fixes a red/blue color swap in the old opacity patch (the color value was being read as BGR). Also adds a BiggerInventoryWindow patch. Thanks to Stingor.

2026-07-14
WARPGATELANGNEW

English translation, kept up to date

The new LANG tab adds the community English translation (llchrisll's ROenglishRE) to your client. Point it at your client folder and install; when a new version is published, WARPGATE downloads and applies it automatically, separate from the client.

It arrives as an Ed25519-signed overlay, verified across all five mirrors. If you have edited a translation file yourself, an update keeps your version by default, and you can choose to take the new one instead, with your copy saved as a .bak.

Because the translation now updates on its own, the client no longer bundles it.

2026-07-14
WARPGATEFULL CLIENTUPDATE

A leaner client

The English translation has moved out of the client and into its own LANG tab, so client updates no longer re-ship it.

If you already have the client, this is a small update, around 1 MB: the large base files and the data.grf are unchanged and are not re-downloaded. Your current translation stays in place, and the LANG tab takes over keeping it updated.

New installs get the lean client, then add English from the LANG tab.

2026-07-14
WARPGATENEW

A third look: the Realm

Alongside Cosmic and Minimal there is now a Realm interface, and it is the new default: the live Prontera world, powered by the Æsir Engine, plays behind a dark-glass panel while you download. Open Settings to switch looks.

If the realm is offline it shows a still night view instead, and the tag reads realm offline so you always know what you are seeing.

2026-07-08
WARPGATENEW

Get the WARP patcher, right here

The new WARP tab in the title bar installs and updates the WARP0716 patcher straight from GitHub. Pick a folder, install, and WARPGATE keeps it current.

It shows the version you have next to the latest one and updates in place. Your Settings.yml, custom profiles, and any files you added are kept. When a new version lands the tab flags it, and you can skip one you do not want.

A WARP2026 build for the 2026 client is listed as coming soon. The window is also a little larger so the title bar has room to breathe.

2026-07-06
WARPGATENEW

Pick your build by date

WARPGATE now lets you choose which client or ragexe build to install, listed by date. Use the Client and Ragexe dropdowns in the title bar to switch between builds.

Each build shows its status at a glance: the one you have, an update when there is one, or a build that is coming soon.

Two new builds are on the way: a 2026-01-07 client and a 2026-01-07 ragexe. They show now, marked Coming soon, and become installable once released.

2026-07-06
WARPGATENEW

New: a minimal interface

WARPGATE now has two looks. The default cosmic interface stays, and there is a new minimal option: a calm, plain download view for anyone who prefers less motion and more focus.

Open Settings and choose your interface, Cosmic or Minimal. Minimal comes in dark or light, and your choice is remembered.

Both show the same live download, verified across all five mirrors.

2026-07-03
WARPGATE

Mirrors live

Signed release manifests are now live on all five mirrors: Dallas, New York, Chicago, Amsterdam, and Los Angeles.

Every download is verified against an Ed25519-signed manifest, so tampered or corrupted files are rejected before install, no matter which mirror they came from.

2026-07-02
WARPGATEFULL CLIENTCURRENT

2025-07-16 client, initial release

The full 2025-07-16 client is now available: 4.07 GB with 6,518 files. This is the base client that future delta updates will build from.

The data.grf download is split into 55 verified segments across all five mirrors. If the install is interrupted, it can safely resume. Damaged files are repaired in 64 MB chunks.

Your clientinfo.xml, DATA.INI, AI folder, skins, and any GRFs you add are kept untouched. Updates will never overwrite them.

2026-07-02
WARPGATERAGEXECURRENT

Ragexe 2025-07-16

The 2025-07-16 Ragexe is now available.

If you already have the data files, you can apply your own WARP patch set to it.

May 2026

2026-05-15
WARP0716PATCHES

May 15 Update

Binary patch - re-WARP required. Unlike the May 6 / Apr 21 hotfixes, this one changes the CustomJobs patch itself, not just Lua data. You must re-apply the WARP patch with the updated CustomJobs.qjs for it to take effect - dropping new Lua files alone will not enable it.

Custom jobs can now use the Doram race

Custom jobs intended to render as Doram (e.g. a job pointing PCPaths at "summoner") were always drawn with the Human body - Doram body sprites loaded human heads, offsets, scale, and nameplate positions were wrong. (GitHub #27)

Cause: the client decides Human vs Doram by calling an internal is_doram_job_id check that is hardcoded to the stock Summoner / Mystic Summoner IDs only. Custom job IDs are never in that set, so they always took the Human sprite path - and the same check gates ~40 other behaviors (item offsets, sprite scale, shadow position, nameplate Y-offset, the item layer renderer, character select/create, the styling shop, skill-effect positioning).

Fixed with a new CustomJobs Phase 13 patch that hooks the tail of that check and consults a Lua table, PCRace. Set an entry and the job follows the Doram code paths the stock Summoner uses. Define it in any JobInfo Lua file (e.g. PCIds.lua or a new PCRace.lua):

`` PCRace = PCRace or {} PCRace[PCIds.MY_DORAM_NOVICE] = "doram" ``

Any non-nil value enables it; "doram" reads well and reserves room for future race values. Stock Summoner / Mystic Summoner are unaffected - the original check still runs first and short-circuits for them, so there is zero behavior change for non-custom jobs.

Doram custom-job body sprites go in the Doram folder, not the Human one: data/sprite/도람족/몸통/… (CP949 µµ¶÷Á·\¸öÅë\…) instead of 인간족/몸통/. Everything else (.act, costume_1/, IMF, palette, icon) follows the same rules as a normal custom job.

Thanks to pepeuprog for reporting it.

Custom Jobs guide - new "Doram Race" section

Online guide gained a Doram Race subsection under Step 2 documenting the PCRace API and the Doram sprite paths.

To install

Re-apply the WARP patch using the updated CustomJobs.qjs from this repo, then add your PCRace entries to a JobInfo Lua file. Because this is a binary change, the Lua-only install path used by the May 6 / Apr 21 hotfixes does not apply here - you must re-WARP.

2026-05-06
WARP0716PATCHESHOTFIX

May 6 Hotfix

Lua-only - no re-WARP needed. Drop the new PCFuncs.lua and PCIds.lua (and optionally PCNames.lua) into data/luafiles514/lua files/JobInfo/, overwriting existing. Lua data files are loaded at runtime, not baked into the exe.

Mounted classes - Job name no longer shows "Poring"

Players on a peco / dragon / mado / wolf / gryphon mount were seeing "Poring" as their class in the BasicInfo window, character select, and party UI - Lord Knight, Paladin, Rune Knight, Royal Guard, Mechanic, Ranger, Dragon Knight, and other 4th-class jobs all affected.

Cause: the stock client uses *2 mounted variant IDs (e.g. LORD_KNIGHT 4008LORD_KNIGHT2 4014) for the actor's effective class while mounted, and the GRF-loaded job name table only populates the base IDs. When the client looked up PCNames[4014], the entry was missing and the lookup fell through to a hardcoded "Poring" fallback.

Fixed by adding a second auto-populate pass in PCFuncs.lua that copies each base class name onto its mounted variant(s). The mapping was extracted from the client's mounted-job lookup function (CMode::GetJobClassID at 0x00d5b580) - covers all stock peco mounts, Rune Knight's five dragon colors, Mechanic's mado gear, Royal Guard's gryphon, Ranger's wolf, and the 4th-class mount IDs. User overrides in PCNames still win - the pass only fills entries that are currently nil.

Stock job constants now usable as PCIds.NAME

Previously, only your custom job IDs were defined in PCIds.lua - stock constants like PCIds.LORD_KNIGHT2, PCIds.PALADIN2, PCIds.WARLOCK, etc. evaluated to nil. Writing PCNames[PCIds.LORD_KNIGHT2] = "Holy Knight" was a silent no-op; you had to use the raw numeric ID (PCNames[4014] = "Holy Knight") instead.

The shipped PCIds.lua now includes a do…end block at the top that pre-defines ~170 stock constants (NOVICE through 4th-class jobs and their mounts) before your custom IDs are added. After this, both forms work:

`` PCNames[PCIds.LORD_KNIGHT2] = "Holy Knight" -- by name PCNames[4014] = "Holy Knight" -- by raw ID (same thing) ``

Aliases are included for both rAthena naming (LORD_KNIGHT2, RUNE_KNIGHT_T) and legacy WARP naming (LORD_MOUNT, RUNE_KNIGHT_H) - pick whichever convention you prefer. Add your custom IDs after the ADD CUSTOM JOBS BELOW marker line.

The previous comment "Stock job IDs are loaded from GRF" was a misconception - the GRF only loads stock *names* (via PCJobNameTable), not the Lua-side constant table. Header comments updated to match reality.

JOB_SKILL_TIER now actually applies to custom job chains

Multi-tier custom job chains (Base → 2nd → 3rd) declared via JOB_SKILL_TIER in PCIds.lua were silently collapsing onto a single skill-tree tab. The InitSkillTreeView wrapper that reads JOB_SKILL_TIER at runtime had been missing from the WARP Inputs/ source - never committed back from a deployed environment. Now included in PCFuncs.lua as the canonical source.

PCNames.lua header refreshed (optional)

The shipped PCNames.lua header now shows both PCNames[PCIds.X] and PCNames[4014] examples for renaming stock jobs. Cosmetic only - your existing PCNames.lua keeps working as-is. Skip this file unless you want the updated examples.

Custom Jobs guide - significant additions

Online guide updated with new sections:

  • Stock PCIds auto-populate callout under PCIds.lua, plus PCNames examples now show both PCIds.X and raw-ID forms side-by-side
  • Gender-specific names - PCNames_M / PCNames_F for male/female overrides (the stock Bard/Dancer convention)
  • Multi-language names - LT_<N> per-language sub-tables; works on every lookup table, not just PCNames
  • Inheritance Tables - PCNameInheritTbl / PCPathInheritTbl / etc. for tier-style fallback chains, with the matching MapPC* resolver functions
  • JT_ vs JOB_ naming-convention callout (skillinfoz JOBID.JT_NAME vs server-side JOB_NAME)
  • Mount Support rewritten - stock mounts work automatically (no PCIds setup needed), custom mount riding IDs need their own entries across all five lookup tables (PCPaths / PCNames / PCPals / PCHands / PCImfs)
  • Step 1 warning expanded to mention the Phase 5 4345 floor and the convert_job_to_trans_or_baby sprite-mangling path

To install

Replace data/luafiles514/lua files/JobInfo/PCFuncs.lua and PCIds.lua (and optionally PCNames.lua) in your client's data folder with the new copies. No re-WARP, no exe changes - Lua files are runtime-loaded.

April 2026

2026-04-21
WARP0716PATCHES

Apr 21 Update

Rune System Paths - Arbitrary Length Within Slot Capacity

The upstream rune-path patches enforced an exact byte-length match against the original System\Rune\… defaults. That made it impossible to use paths like SystemEN\Rune\itemDecom.lub (27 chars where the original is 25), which is needed for consistency with Chris's ROenglishRE translation layout.

The 07-16 client loads each rune file via an inlined MOVUPS+MOVQ+MOV(byte|dword) copy sequence with a hardcoded byte count, a hardcoded std::string::size_ immediate, and a hardcoded null-terminator offset - all set to the original path's length. The strict check existed to stop replacements that would truncate (too long) or read past the end (too short).

Our fork extends the patch logic to handle all three cases without changing the injection:

  • Shorter replacements - allocate a fresh buffer, write the new path, null-pad out to the original length, then point the MOV source operands at the padded buffer. The client still copies the full original byte count, but the C-string terminates at the first null so file loading picks up the shorter path correctly. std::string::size_ stays at the original length - harmless for file APIs that use c_str().
  • Longer replacements on byte-copy sites (itemDecom, rune_info) - flip MOV byte → MOV dword at the two opcode bytes (0x8A → 0x8B and 0x88 → 0x89, both same instruction size so no shifting), then bump the length immediate and null-terminator offset to the new length. Extends the copy chain from 25 to up to 28 bytes, supporting original+1 through original+3.
  • runesystemid already uses MOV dword in stock; capped at the original length.
  • runeSystem_table uses two MOVUPS copying a fixed 32 bytes; capped at the original length.

Verified same instruction offsets on both 07-16 and 06-04 - the VC compiler produces identical sequences.

CustomClientInfo - Works on 07-16 (Injected Pipeline)

The stock CustomClientInfo patch searched for the clientinfo.xml literal as a single string. The 07-16 client doesn't store it that way - the injected clientinfo loader composes the filename on the stack at runtime via four MOV [ESP+N], imm32 instructions. Result: the patch was always hidden on injected exes.

Added a detection path that recognizes the 4-MOV signature (C7 04 24 63 6C 69 65 C7 44 24 04 6E 74 69 6E C7 44 24 08 66 6F 2E 78 C7 44 24 0C 6D 6C 00 00). When found, the patch prompts for a new filename (≤15 chars - the on-stack buffer is 16 bytes including the null terminator) and rewrites the four dword immediates in place. The validator accepts either the injected layout OR a stock ClInfoAddr > 0.

To test: select Customize ClientInfo file in the WARP UI, type a new name (e.g. lgro.xml), drop your renamed XML at <client>\data\<newname>.xml.

Translations EN - Rune Tablet Label

Added the "Rune of %s" TranslateClient entry (Korean bytes 25 73 C0 C7 20 B7 E9 20 C1 B6 B0 A2Rune of %s). Used by the Rune Tablet encyclopedia entries (e.g. "Rune of Night Market Bebe").

March 2026

2026-03-29
WARP0716PATCHES

Mar 29 Update

Allow 65k Hair Styles - Fixed

Fixed a bug where the first ~12 hair styles displayed the wrong sprite when Allow65kHairs was enabled. The 07-16 client has a remapped hair name table internally, and the original patch bypassed it. The fix preserves the table for standard styles and uses dynamic number conversion for custom styles beyond 42.

  • Works correctly on the character creation screen, character select, and in-game
  • Works independently of Custom Jobs, and both can be enabled together
  • Includes an open-source mid-headgear hook replacing the old encrypted one
  • IncreaseHairsLimit has been removed (superseded)

PreviewInTrader - Cashshop Crash Fix (#20)

Opening an old-style cashshop NPC caused an instant crash when PreviewInTrader was enabled. The patch tried to access a window object that doesn't exist for cashshop windows. Fixed with a null pointer check.

Mar 26 Update

InsensitiveStorageSearch - Fixed (#16)

Case-insensitive storage search wasn't working on the 07-16 client. The patch was matching the wrong function internally. Fixed with an updated pattern for the 07-16 compiler.

Custom Jobs - Ground Skill Crash Fix

Using ground-based skills (like Storm Gust) on mobs caused a crash when Custom Jobs was enabled. Fixed - the sprite name lookup now uses a safer code path with validation. All standard and custom jobs work correctly.

Cancel-Exit on Service Select

The server select screen is now fully functional. Previously the cancel button did nothing - now it shows a "Are you sure you want to quit?" dialog and exits the client. The cancel button also automatically changes to say "exit" when on this screen. No extra files needed - the exit button graphics already exist in the GRF.

Multi-Connection clientinfo.xml - Fixed

Servers with multiple entries in clientinfo.xml now work correctly. Previously all connections went to the first entry's IP regardless of which server the player selected. Now each server entry's address and port are stored separately, and the client connects to the right one based on the player's selection.

Combined with the cancel-exit fix above, you can now list multiple servers and players will see the server select screen, pick their server, and connect to the correct one.

DisableEquipAttrButton - Fixed (#12)

Hides the equipment attribute button in the equipment window. The original patch didn't work on the 07-16 client. Fixed by NOPing the AddChild call that adds the button.

Removed Patches

The following patches have been removed - they don't apply to the 07-16 client:

  • TranslateTaekwon - Not needed, TranslateClient + Lua handles translations instead
  • IncreaseHairsLimit - Replaced by Allow65kHairs
  • NoSerialDisplay - Not compatible with the 07-16 client
  • SelectLoginBG - Not compatible with the 07-16 client
  • RestoreAutoFollow - Only applies to Zero clients

Mar 19 Update

Enable Official Custom Fonts (Reforged) - Full Rewrite

The original EnableEotFonts patch didn't work on modern Windows because Microsoft removed support for the embedded font format (.eot) that the RO client uses. The patch appeared to apply but fonts never actually loaded.

This rewrite takes a completely different approach - it loads .ttf fonts directly through the standard Windows font API, the same way the client already loads its SCDream fonts.

  • How it works - When the client starts up, the patch loads all .ttf files from System\Font\ before any UI renders. It also fixes the font name references in the binary so CreateFont calls match the .ttf filenames
  • Font file management - On apply, WARP prompts for your client folder, copies the included .ttf fonts to System\Font\, and optionally deletes the old .eot files
  • Custom fonts - You can replace any .ttf in System\Font\ with your own font (same filename). @font 1-9 uses whatever .ttf is there - it's client-side only, no one else sees your fonts
  • FixFontsCharset - Auto-enables FixFontsCharset which had a crash bug in the original version (now fixed)

Pre-converted .ttf files for all 13 fonts are included in Inputs/Fonts/.

Renamed: EnableEotFontsEnableCustomFonts

FixFontsCharset - Crash Fix

The original version of this patch had a bug that corrupted an internal pointer, causing random crashes when rendering text. Fixed by using a different register for the charset lookup.

Mar 18 Update

Custom Jobs (Reforged) - Major Update

The Custom Jobs patch has been significantly expanded - all built from scratch for the 07-16 client. This update adds baby class support, multi-tier skill trees, mount integration, and much more.

What's new for server owners:

  • Baby class support - Baby variants of custom jobs now render at 75% size, just like official baby classes. Add your baby job IDs to Shrink_Map in PCIds.lua
  • Multi-tier skill trees - Create job chains like Novice → 2nd Class → 3rd Class with proper tab merging. The first tab automatically combines Novice + base class skills (same behavior as Night Watch). Configure tiers in PCIds.lua via JOB_SKILL_TIER
  • Mount support - Custom jobs can use the Boarding Halter (item 12622). Define mount sprite IDs in PCMounts and Halter_Table in PCIds.lua
  • Minimal Lua files - Your Lua files only need custom job entries. Stock job data loads automatically from the GRF. All files use Table = Table or {} guards for safe additive loading
  • Error display - When Lua files fail to load, you now get clear error messages. Choose between Silent, Log File, or Popup mode via the WARP patch options
  • Working example - The example/ folder and WARP Inputs include a complete EXAMPLE_JOB (ID 4435) with a baby variant (ID 4436), ready to copy into your client

Technical details:

  • All Lua lookups use direct Lua C API calls at runtime, bypassing a broken internal function in the 07-16 client
  • Palette and head sprite tables expanded to support up to 10,000 custom job classes
  • Costume_1 sprite files are required for custom jobs (client crashes without them after ~1 minute)
  • Patch renamed to "Enable Custom Jobs (Reforged)"

Guide: See the [Custom Jobs Guide](docs/CustomJobs/CUSTOM_JOBS_GUIDE.html) or online version for full setup instructions with examples.

IncreaseHairsLimit (64K Hair Patch) - Compatibility Fix

  • The hair limit patch now works alongside Custom Jobs without crashing
  • Previously both patches conflicted with each other, causing a crash on startup
  • Note: This patch was later replaced by Allow65kHairs in the Mar 26 update

Mar 13 Update

Custom Jobs - Initial Release

  • Full rewrite of the Custom Jobs patch for the 07-16 client
  • Job names, sprite paths, palettes, head sprites, and display names all driven by Lua files
  • Supports up to 10,000 custom job classes
  • Custom job sprites render correctly in character select, creation, and in-game
  • Example sprite, IMF, and icon files included in examples/CustomJobs/data/

New Dark Theme - WARP0716

  • New icons, recommend stamps, and editor font
  • Original themes available as "Classic" and "Classic_Dark" in the style dropdown

Mar 12 Update

RagHash.dat Crash Fix

  • Stale or leftover RagHash.dat in the client folder no longer crashes the client
  • The NoGGuard patch now handles this automatically - no more need to manually delete the file

GRFsFromIni Crash Fix

  • Invalid or nonexistent GRF entries in DATA.INI no longer crash the client
  • The patch now checks if each GRF file exists before trying to load it

Mar 11 Update

CustomIcon - Fixed

  • Custom icons now work with any size and bit depth, including 256x256 PNG icons
  • The original version only accepted tiny 32x32 icons
  • All icon display contexts (Explorer, taskbar, window title) show the custom icon

Mar 10 Update

CustomJobs - Complete for 07-16

  • All job tables now driven by Lua files (PCIds, PCPaths, PCImfs, PCHands, PCPals, PCNames, PCFuncs) - add custom jobs without any additional binary patching

Dead Code Cleanup

  • Removed unused code and 20 dead patch definitions that weren't applicable to 07-16

Upstream Merge (hiphop9/Warp2025)

  • Merged 5 commits from Mar 7-10

Patch Descriptions Rewritten

  • All patch YAML files rewritten with clear, user-friendly descriptions
  • Every patch now explains what it does, why you'd want it, and any requirements or conflicts

Known Conflict: NoPassEncr vs UseSSOLogin

  • Don't enable both UseSSOLogin and NoPassEncr in the same profile - they conflict. The WARP GUI handles this automatically, but if you're using YAML profiles, only list one or the other
2026-03-09
WARP0716PATCHES

Patch Fixes (15 total, 0 errors remaining)

15 patches were fixed to work with the 07-16 client's compiler differences (VS2022/VC14.29). Each patch had byte patterns or memory offsets that didn't match the 07-16 binary:

  • CallKoreaClientInfo, NoEarthQuake, NoEquipWinTitle, CustomShields, CustomCharCreateId, IgnoreEntryQueueErr, MoveUpItemCount, CustomFriendsLimit, AllowSkillSpam, CustomMissingLauncherMsg, LowCamAngle / MediumCamAngle / HighCamAngle, HideBuildInfo

Removed Patches (already baked into the EXE)

  • NoLoginOTP - OTP login flow is already patched in the EXE before WARP
  • EnableDnsSupport - Server addressing via clientinfo.xml is already handled in the EXE
  • HidePacketsFromPEEK - 07-16 natively handles this, no patch needed

Removed Patches (not applicable to 07-16)

  • NoFilenameCheck - Gravity removed the filename check entirely in 07-16
  • CustomFriendsLimit - The friends list UI was redesigned in 07-16, nothing to patch
  • NoGNJoyLaunch - GNJoy launch URLs are already zeroed in the EXE

Patches that auto-skip on 07-16

  • CustomJobs - FIXED in later updates (see above)
  • CustomSlotHLColor - Not fixable. 07-16 uses a different system for slot highlight colors

Verified Working

All of the following patches have been tested and confirmed working on the 2025-07-16 client:

NoWavyScreen, EnableWho, EnableShowName, MediumCamAngle, UseOldLogin, UseSSOLogin, AlwaysAscii, CallKoreaClientInfo, PlainTextDesc, LoadKrExtSettings, HideBuildInfo, FixArrowsCharset, TranslateClient, NoGGuard, MsgStrings, QuestDisplay, CustomItemInfoLub, CustomAchieveLub, CustomTownInfoLub, CustomTipboxLub, CustomMapInfoLub, CustomOngQuestInfoLub, CustomRcmdQuestInfoLub, CustomspopupLub, CustomQuestQualiLub, IncrMapQuality, DataFolderFirst, GRFsFromIni, EnableSysMenu, No1and1Arg, RestoreIcon, NoNagle, SendClientFlags, NoLoginEncr, OpenToServiceSelect, GuildBrackets, FixChatAt, NoHourly, NoHelpMsg, FixSkillbarReset, NoGravityAds, NoGravityLogo, FixLatestNCWin, DisConnToLogin, CustomInventoryLimit, CustomInventoryExpandingLimit, NoCharnameLimit, NoUsernameLimit, NoPasswordLimit, NoEquipWinTitle, NoEarthQuake, CustomEncKeys, Zoom (25%/50%/75%/Max)

User-Friendly Improvements

  • This build of WARP only accepts the 2025-07-16 client EXE
  • Title bar changed to "WARP for 2025-07-16" so it's clear which client this targets
  • "Loaded Date" label renamed to "Client Date" for clarity
  • Patch descriptions rewritten - Tooltips now explain what each patch actually does in plain language
  • Recommend flags reviewed - Commonly needed patches are marked as recommended so new users get a good default set
  • CustomPath.qjs - When selecting a Custom*Lub patch, the input now defaults to the original path but shows the recommended SystemEN/ path for llchrisll Translation Project users
  • Translations_EN.yml cleaned from 157 to 16 working entries
  • AddLuaOverrides link updated to llchrisll's current documentation URL