Skip to content

Releases: pangbox/rugburn

v2.0

01 Sep 04:57
Compare
Choose a tag to compare

This is Rugburn v2.0.

Rugburn v2.0 is a fairly large rewrite of Rugburn that improves many aspects of its basic operation. Please note: there is no longer a need to either patch ijl15.dll or rename it to ijl15_real.dll, as Rugburn now includes an embedded copy of ijl15.dll. To use Rugburn v2, just replace ijl15.dll in your PangYa directory with the Rugburn ijl15.dll.

Embedding the unfree ijl15 library required removing the copyleft length disassembler. It was replaced with a public domain x86 length disassembler instead. With this work, rugburn is now entirely permissively licensed. See the new LICENSE.md text for more details.

Rugburn no longer compiles with OpenWatcom 2; now, MinGW is the preferred compiler. Rugburn can also be compiled with MSVC. Now, the MSVC build is tested by CI, to ensure that the MSVC build does not accidentally break.

This version of Rugburn, like v1.2, will again work on older versions of Windows, specifically, any version of Windows that is NT-based. Windows NT, 2000, XP, Vista, 7, 8, 8.1, 10, and 11 should all work, assuming the version of PangYa you are trying to run supports the OS you are running. Research is ongoing into how the Windows API hooking routines could possibly be supported in Windows 9x. A future version of Rugburn may support Windows 9x. However, Rugburn v2.0 does not work on Windows 95, 98 or ME.

Thanks to all contributors and users of Rugburn. If you run into any problems, please feel free to file an issue.

Bugfixes

  • Fix bug with port rewrites by @fumitti in #8
  • Garbled text in error dialogs is finally fixed by @jchv in #25
  • Fix writing files to disk on Windows 9x by @jchv in #26

Cleanup

  • The Visual Studio solution was cleaned up a bit, removing the x64 build, adding support for building the test, and making sure all configurations build correctly, #36
  • Applied fixes for code style and formatting and fixed clang-format enforcement in CI, #37
  • Update and clean up GitHub Actions CI workflows, #38

New Features

More PangYa Versions

Thanks to @Acrisio-Filho, Rugburn v2 contains support for a much wider number of PangYa clients. Most of these were added in this release.

  • Albatross 18 323a
  • Albatross 18 404
  • PangYa US 431
  • PangYa US 500a
  • PangYa US 627
  • PangYa US 633
  • PangYa US 727
  • PangYa US 806
  • PangYa US 824
  • PangYa US 852
  • PangYa JP 2.11
  • PangYa JP 2.25b
  • PangYa JP 4.00a
  • PangYa JP 4.01h1
  • PangYa JP 585
  • PangYa JP 972
  • PangYa JP 974
  • PangYa JP 983
  • PangYa TW 3.00a
  • PangYa TW 4.00a
  • PangYa ID 2.12a
  • PangYa KR 3.26a
  • PangYa KR 603
  • PangYa KR 839
  • PangYa TH 217
  • PangYa TH 300b1
  • PangYa TH 580
  • PangYa TH 644
  • PangYa TH 714c
  • PangYa TH 829c
  • PangYa SEA 2.16a
  • PangYa SEA 3.20
  • PangYa EU 3.01a
  • PangYa EU 400a
  • PangYa EU 500
  • PangYa BR 2.14a
  • PangYa BR 2.14b
  • PangYa BR 2.15
  • PangYa BR 2.15a
  • PangYa BR 2.16
  • PangYa BR 2.20c
  • PangYa BR 3.00
  • PangYa BR 3.05a

Wine _stricmp bug mitigation - #9

There is an issue with Wine's _stricmp implementation that causes bugs with PangYa, including crashing and player models not displaying in the lobby. This is now mitigated by Rugburn. When using the Wine builtin C runtime libraries, the mitigation should automatically be enabled.

Dynamic patches - #12

@Acrisio-Filho added the ability to specify custom patches in rugburn.json. This dramatically simplifies making custom memory patches; you no longer need to recompile Rugburn to do so.

Here is an example of how it might be used:

{
    ...
    "PatchAddress": {
        "0x00d19ffc": "lobby_gbin\\x00"
    }
}

You can specify hexadecimal addresses as keys. The string format supports a form of hex escapes, which allows for raw data including NULL bytes to be specified.

Full Changelog: v1.2...v2.0

v2.0-rc4

09 Aug 04:04
Compare
Choose a tag to compare
v2.0-rc4 Pre-release
Pre-release

This is Rugburn v2.0-rc4.

This should be the final release candidate, as things have quieted down a bit. Some cleanup was done to the code, project files, and CI setup, but nothing substantial.

What's Changed

  • The Visual Studio solution was cleaned up a bit, removing the x64 build, adding support for building the test, and making sure all configurations build correctly, #36
  • Applied fixes for code style and formatting and fixed clang-format enforcement in CI, #37
  • Update and clean up GitHub Actions CI workflows, #38
  • Added newly-supported PangYa versions to README

Full Changelog: v2.0-rc3...v2.0-rc4

v2.0-rc3

03 Aug 13:47
Compare
Choose a tag to compare
v2.0-rc3 Pre-release
Pre-release

This is Rugburn v2.0-rc3.

Hopefully, rc3 can finally be the last release candidate before we can cut "v2.0". In this release candidate, the bug identified where MinGW versions crash on specific JPEGs is finally fixed, hopefully it is the only one!

There were also a couple of cleanups. For development, there is now better support for generating clangd metadata in the Nix build; it isn't perfect, but it will make the code intelligence much more useful. Also, the linkage for ijl15 was greatly simplified by taking advantage of the Windows linker definitions file to work around a limitation of the linker in MinGW; now we no longer need to deal with unpacked static library files to link ijl15.

Bugfixes

  • Fixed a crashing issue with MinGW version #35

New Features

More Pangya Versions

Somehow, even more PangYa versions are now supported, again thanks to @Acrisio-Filho (#32)

New in v2.0-rc3:

  • PangYa BR 2.14a
  • PangYa BR 2.14b
  • PangYa BR 2.15
  • PangYa BR 2.16
  • PangYa BR 2.20c

Full Changelog: v2.0-rc2...v2.0-rc3

v2.0-rc2

23 Jul 04:46
Compare
Choose a tag to compare
v2.0-rc2 Pre-release
Pre-release

This is Rugburn v2.0-rc2.

In terms of substance, there are not many changes vs v2.0-rc1. A large number of lines of code change, but it's mostly superficial. The pattern of using GetProcAddress for almost everything has been removed, as it's no longer relevant with Slipstream gone. A couple of annoying bugs were squashed. Rugburn inches closer to working on Windows 98, but it still doesn't due to detours-based hooking not working there, a limitation that will probably push Windows 98 support into a post-2.0 release.

(The release candidate release notes will be coalesced into a giant release notes drop for v2.0.)

Bugfixes

  • Garbled text in error dialogs is finally fixed by @jchv in #25
  • Fix writing files to disk on Windows 9x by @jchv in #26

Full Changelog: v2.0-rc1...v2.0-rc2

v2.0-rc1

22 Jul 01:00
Compare
Choose a tag to compare
v2.0-rc1 Pre-release
Pre-release

This is Rugburn v2.0-rc1. Rugburn no longer compiles with OpenWatcom 2; now it uses MinGW. Rugburn can now be compiled with MSVC as well. There is no longer a need to either patch ijl15.dll or rename it to ijl15_real.dll, as Rugburn now includes an embedded copy of ijl15.dll.

As part of this work. the length disassembler was replaced with a permissively-licensed length disassembler, so that we can link with the unfree redistributable ijl15 library. This means that Rugburn is now entirely permissively licensed.

This version of Rugburn may work on older versions of Windows because it no longer uses Slipstream, but more testing is needed. We will want to ensure that this works as far back as possible before v2.0 is cut.

Bugfixes

New Features

More PangYa Versions

Thanks to @Acrisio-Filho, Rugburn v2 contains support for a much wider number of PangYa clients. Most of these were added in this release.

  • Albatross 18 323a
  • Albatross 18 404
  • PangYa US 431
  • PangYa US 500a
  • PangYa US 627
  • PangYa US 633
  • PangYa US 727
  • PangYa US 806
  • PangYa US 824
  • PangYa US 852
  • PangYa JP 2.11
  • PangYa JP 2.25b
  • PangYa JP 4.00a
  • PangYa JP 4.01h1
  • PangYa JP 585
  • PangYa JP 972
  • PangYa JP 974
  • PangYa JP 983
  • PangYa TW 3.00a
  • PangYa TW 4.00a
  • PangYa ID 2.12a
  • PangYa KR 3.26a
  • PangYa KR 603
  • PangYa KR 839
  • PangYa TH 217
  • PangYa TH 300b1
  • PangYa TH 580
  • PangYa TH 644
  • PangYa TH 714c
  • PangYa TH 829c
  • PangYa SEA 2.16a
  • PangYa SEA 3.20
  • PangYa EU 3.01a
  • PangYa EU 400a
  • PangYa EU 500
  • PangYa BR 2.15a
  • PangYa BR 3.00
  • PangYa BR 3.05a

Wine _stricmp bug mitigation - #9

There is an issue with Wine's _stricmp implementation that causes bugs with PangYa, including crashing and player models not displaying in the lobby. This is now mitigated by Rugburn. When using the Wine builtin C runtime libraries, the mitigation should automatically be enabled.

Dynamic patches - #12

@Acrisio-Filho added the ability to specify custom patches in rugburn.json. This dramatically simplifies making custom memory patches; you no longer need to recompile Rugburn to do so.

Here is an example of how it might be used:

{
    ...
    "PatchAddress": {
        "0x00d19ffc": "lobby_gbin\\x00"
    }
}

You can specify hexadecimal addresses as keys. The string format supports a form of hex escapes, which allows for raw data including NULL bytes to be specified.

Full Changelog: v1.2...v2.0-rc1

v1.2

24 Oct 22:07
Compare
Choose a tag to compare

Notice

This release is now very old. Note that the installation instructions in the current README.md do not apply to this version.

Please use v2.0-rc4, or newer.


Changes since v1.1:

GameGuard patches

  • Added patches for PangYa client US 824. (thanks @luismk)

JSON based configuration system with regular expression based URL rewriting.

Rugburn can now be configured to behave differently using a simple JSON-based configuration scheme.

Here's the example configuration that will be created by default:

{
  "UrlRewrites": {
    "http://[a-zA-Z0-9:.]+/(.*)": "http://localhost:8080/$0"
  },
  "PortRewrites": [
    {
      "FromPort": 10103,
      "ToPort": 10101,
      "ToAddr": "localhost"
    }
  ]
}

UrlRewrites

  ...
  "UrlRewrites": {
    "http://[a-zA-Z0-9:.]+/(.*)": "http://localhost:8080/$0"
  },
  ...
  • Supports rewriting requests made using WinINet via the Rugburn netredir hook.
  • Only a subset of regular expression functionality is supported.
  • Capture groups are supported and can be referenced in the replacement string with $0 - $9.
  • There is no way to reference the entire match. $$ will be substituted with just $ in the result.
  • Only the first match succeeds, going in the order they are specified in the JSON file.
  • You can specify up to 64 URL rewrites.

You can see if your rule matched by checking the gglog.txt file - it will explicitly print what replacement occurred, or explicitly state that no rules matched. Be sure to delete gglog.txt between runs to ensure you are aren't looking at old logs!

The regular expression engine is in src/regex.c - please file an issue if you have any problems. Please attach your gglog.txt with your issue. There are also some regex tests in src/test-main.c - if you are making a contribution to fix an issue with the regular expression parser please make sure these tests pass and if you are really awesome, add a regression test case or two as well to prove your fixes.

PortRewrites

  ...
  "PortRewrites": [
    {
      "FromPort": 10103,
      "ToPort": 10101,
      "ToAddr": "localhost"
    }
  ]
  ...
  • Supports rewriting TCP connections made using WinSock via the Rugburn redir hook.
  • Rewrites every connection to a given port to a specific port on a specific address.
  • In practice, you should only need to rewrite the LoginServer, since all of the other addresses come from that.
  • You can specify a hostname instead of an address. Rugburn will resolve it using GetAddrInfo. However, for the time being it does not support IPv6, pending additional work on the hook to try to provide that support.

JSON parsing

The JSON parser is written from scratch and is in src/json.c. Mind you that it implements the JSON grammar similar to RFC 7159, and does not support some things such as comments or hanging commas. If you encounter any issues with JSON parsing, please file an issue, attach a clean gglog.txt and your configuration.

Miscellaneous

  • Visual Studio project was updated. It is still not tested regularly, please file issues if anything is wrong. In particular, you should not see warnings during the build process. (Make sure you are building for x86 though, as an x64 PangYa client does not exist today, and Rugburn will not function properly in an x64 environment yet; and it will contain warnings in the build.)
  • Fix to strcmp implementation where pointers would advance past the null byte if the first byte is null. Remember, we do not use the standard library :)
  • Minor improvement that will hopefully help the Makefile behave better on some esoteric Windows setups. Building via Makefile is done best on Linux or WSL with OpenWatcom 2 installed to /opt/watcom.

In Closing

That's all folks. Remember to report issues in the bug tracker, and have a good time playing PangYa.

v1.1

04 Jun 04:56
c4fda85
Compare
Choose a tag to compare

Changes since v1.0:

  • Updated some MessageBox titles from 'ijlshim' to 'rugburn.'
  • Added Visual Studio 2017 project files.
  • Now supports PangYa JP 983 (thanks @fumitti!)
  • Makefile now compatible with Windows.

v1.0

03 Aug 17:56
Compare
Choose a tag to compare

This is the first release.

Please see the README for information on how to install and use this.