Show HN: 2D RPG base game client recreated in modern HTML5 game engine with AI (github.com)
The community maintained private server and client, which to my knowledge were based on leaked official files, were written in fairly archaic C++. If you’re interested in the original sources, I’ve included the main client and server files, Client.cpp and Server.cpp, in the reference folder. I always felt that if the project was rewritten in something more modern and better structured, a lot more could be done with it. But rewriting an MMORPG client and server from scratch is not exactly the kind of thing you do on a whim. That said, there was a guy who got pretty far with a C# rewrite and an XNA-based client, though that project is now also discontinued.
Now that the AI has become quite capable, I decided to see how far I could get by hooking up original assets in a modern HTML5 game engine. I wanted HTML5 because I figured a nearly 30 year old 2D game should run just fine in a browser. I ended up choosing Phaser 3 for a few reasons. Mainly, it's 2D only, free, HTML5 first (JS/TS), and code-first, which mattered because I wanted good Cursor integration for AI assistance. Another thing I liked was its integration with React, which let me build the UI using browser technologies and render the UI at native resolution on top of the WebGL canvas, rather than building the UI inside the game engine itself, which runs at 1024x576 resolution. The original game ran at 640x480.
After about 1.5 months of talking to AI on evenings and weekends, and roughly $200 worth of Cursor usage later, I finished hooking up the original assets in a modern game engine that seems to run just fine in a browser.
By "base game client", I mean that it's not fully hooked up in terms of how the full (MMO)RPG should function, but it does include all the original assets and core mechanics needed to provide a solid foundation if you want to build your own 2D (MMO)RPG on top of it. Continuing to build with AI should also work just fine, since this is how I managed to get that far. The asset library is quite rich, if you ask me, but there is one caveat: these assets are not in the public domain. They are still the property of someone, or some entity, that inherited the IP from the original developer, which is no longer in business. You can read more about that on the GitHub page.
7 comments
[ 4.3 ms ] story [ 28.9 ms ] threadDid you run into performance issues with rendering or networking once multiple entities are active on screen? I'm curious how far a browser-based client can realistically scale for MMO-style environments.
Like you, I couldn’t have done it without the AI "doing the heavy lifting." The way you used Phaser 3 to bring those 2D aesthetics to the browser is inspiring. It’s amazing how AI is now allowing us to bridge the gap between our nostalgia and modern tech. Great work!
> EXCEPTION: The above license does not apply to files located in the directory `sp-client/public/assets`. Those files are the property of Siementech Co. Ltd or whoever has inherited the intellectual property thereof, and are excluded from the MIT license grant above.
Is the general idea there that people can build the code and use the assets in personal projects, but if they want to distribute a full bundle they'll need to create their own assets?
This project was mainly developed for Helbreath community as a modernisation project, a community which has ran private servers (illegally) as long as licensed servers have existed. The original developer never seemed to care for illegal use of their IP, even when they were in business. I'm aware of 2 cease and desist requests being sent to HB Olympia (commercial) and HB Nemesis (Steam listed) private servers and they are still both operating. Either they managed to license the IP, which I'm not aware of, or the request came from HB Korea server, which is the only licensed server left, and as a licensee they probably don't have the rights to the actual IP, hence the requests were ignored. I'm just speculating here. I'm not trying to encourage anyone here to do the same, just trying to explain the situation around the IP.