Rebuilding Ragnarok Online in unity/C# for fun, making an RO-like playground for solo/friends. Not a proper pserver. Unaffiliated w/gravity. Unlikely to finish.
It's finally out! My feature length(!) visual tour of the maps, areas, and music of early (pre-Juno) Ragnarok Online. Sit back and relax as you fly through the world of Ragnarok and revisit the place you may once have called home.
I was going through the custom animations that the international RO client doesn't play correctly due to an issue with one of the config files, and I feel an obligation to highlight this is a unique animation that is supposed to play when a Yoyo uses provoke.
Gravity did always want to make this work, there are screenshots from around the time of the beta when they showed off a work in progress day/night cycle but eventually had to abandon those plans. Unity does make it easy to make something presentable.
I'm testing the WebGL build of my project for a little bit so for a (very) limited period of time you can mess around with it if you want. It downloads sprites and map data on the fly so be patient for things to load in the first time.
Found some more of my old woe videos. Kinda nutty how many players were involved in some of these fights, the servers really didn't stand a chance huh.
So I was checking the clocktower high orcs map and wanted to see why it made a whole bunch of light probes as I didn't remember any animated elements on the map, and it turns out there's these weird ducks on all the walls that move? What?
In RO all sprites have 8 directions, but monsters and player battle poses only have unique sprites for 4 of those directions, the rest are copies. In order for sprites to appear to be facing the right way then, you need to shift the angle on 8 direction sprites by 22.5 degrees.
I have mixed feelings on hyper-rare items in RO, but the one time we got an MVP card while in competition against several other players and groups for each spawn was such an insane rush that I'm not sure if I can hate it. Also damn, 2005...
I accidentally made a change that turned out really cool... normally when you click off into an invalid part of the map you'll path to the closest spot to that point, but now it actually shows you where it's picked for you to go.
I was able to test with a real RO client, adding a non-broken version of monsterskillinfo.xml results in monsters using their unique animations in game. In theory this should work in any version of RO.
Looking at the map data it strikes me as incredibly likely they had intended to animate the Juperos elevator to look like it was moving, the pieces are all on the map for it to work, they just didn't set it up.
Fun fact about Mammonite that I just learned, the sound that plays isn't actually a single sound file. When you hit a target with the skill, it actually spawns 5 coins that fly out in 3d space and trigger a random tinkling sound when they bounce on the ground.
Digging through my old videos, I have almost no raw war of emperium clips, especially those with voice coms, so it's fun to have stumbled onto this one.
I've mentioned this before but my favorite bit of texture weirdness is this building in Juno which for some reason retains part of a sign reading "Robert B Schambach Attorney & Law Notary", a real practicing lawyer in LA in 1999.
I fixed up the mouse movement stuff, now if your mouse cursor isn't over any walkable ground it'll use the scene geometry to pick a spot. Also fixed it so that your cursor will correctly select walkable tiles even if they're obscured by non-walkable ones (like the tops of walls).
The more I tighten up the character movement and timing the more I realize that the sins of the RO client are actually thought out compromises for the sake of visual cohesiveness and the technical limits at the time. Just constant "ooh, that's why it's like that" moments.
With the assistance of some helpful comments on my youtube video, I have tracked down an old 2003 client that has the missing old payon models. Also a minor but interesting fact, the 2003 version of Prontera doesn't have the arch in the north square, I forget when it was added.
This emblem is actually from a real guild on jRO Baldur probably in the 2003~2005 range called "Helm of Gemstone", their leader was a knight who socketed a mistress card into a helm. Or so the story goes, I've only seen screenshots of the legendary item myself.
I have a bunch of old RO bgm remixes, but one I was never able to properly source was this ridiculous login screen remix. I'm think I got it from a forum post discussing a jro april fools event where they replaced the login theme with a different rock remix, but I have no clue.
Just a random fun thing, because the animation of the plants starts when they come on screen you can create waves when walking in a specific direction.
I haven't mentioned it yet but I really appreciate all the kind words I got in the comments on the World of Ragnarok Online video. I can say that little has made me as happy recently as seeing everyone get so emotional over revisiting the game world. So thanks everyone.
Multiplayer networking is crazy because you lie through your teeth on where the player and everyone is so it feels responsive, then you make interactions between the lies of different players feel natural usually by lying about the result of those interactions.
The recent changes to the pathfinding was to enable the ability to reverse an existing move in progress. The pathfinder correctly weighs the cost of returning back to the cell you started on and if it's worth it your character will turn on a dime. It's easy to see in slow motion.
I put together a video showcasing my work with Ragnarok Online as well as explaining what went into making my World of Ragnarok video. This video kind of got away from me and bounces a lot between random things, but I still think it's worth checking out~
I never thought much about why the geffen tower stairs were a pain to interact with, I assumed it was just that overhang that would catch input. While perspective makes it look like I'm centered with the stairs and the portal, I'm not and that makes interactions feel weird.
I noticed that Grand Peco's don't have the fantastic (definitely not annoying) noises regular peco peco's make, they don't seem to have any sounds at all. I have corrected this flaw.
Thanks to everyone that showed up, I'll leave the server up for a little bit for those that still want to take a look but I'll have to shut it down later.
Did I ever show off character shadowing? Each frame a ray is cast from each sprite towards the sun and if it's blocked it gets darkened. The official game actually samples the lightmap below you to see it's intensity, but this lets you be affected by dynamic shadows.
I'm really impressed the server managed to hold up during the test as it didn't crash at all. We hit 16 players, the $5/mo single core cloud vm handled it well. The big frame spikes shown were caused by me reloading server npcs/monsters to remove the 500 mukas I summoned.
A problem RO has is that the client animations don't line up with the server, specifically for what point in the attack animation. Dark Illusion holds the crown for worst of all with the attack delayed by 3 seconds, but others are weird too. Going to see if I can fix that...
I've posted it before but figure it's worth posting again. This is what's supposed to be playing when an orc is sitting there dealing 3 damage to itself over time.
When I stop and think about it a game who's primary gearing mechanic is stacking a huge number of 0.01% drops in order to not instantly die to anything is a pretty wild design decision, and it sorta worked? Gamers were just different back then.
Some random things from around Juno: The book roofed houses, towers containing a large load-bearing book, the monster museum, and the mural outside the monster museum.
Cleaned up the hit lock code a bunch, as well as making it easier to switch to attacking enemies while hit locked. Before you had to reach the next tile before you'd actually attack which is an issue when you can't move. I think it's finally in a pretty good spot now.
This is an amusing oversight with my Mammonite animation... The 5 coins that spawn in world space always fly towards the camera because they're bouncing off of the character's angled collider that's normally used for raycasts to detect what's under your cursor. Whoops.
You know while playing my version I keep thinking movement while being hit is still really awkard, and then I look at my old RO videos (well
@ppy
's in this case) and am reminded of what real movement jank is.
Taken a step back to decide on where I want to take the project. I've no interest in making a real server, but considering maybe aiming for a sort of streamlined RO-lite setup built to allow a handful of friends to progress together, kinda like how one fires up a Terraria server.
It was about time I finally added the camera lock to indoor maps. As much as I like a freely controlled camera there's just no geometry on the backsides of the walls. I did however made it remember your camera settings when you change map types.
Alright, here's the final result of baked sprite lighting. Lighting values across the map are saved to a texture, and each frame sprites look up the color value based on their map coordinates. This here is pretty close to the math used by the base client, but tweaked a little.
One of the few times where I have to take unity's side here, It's already beating expectations even if it runs at a barely usable fps. It's really hard to add maps at this point so I think this is probably the limit, but it is still fun to fly around.
I've never used visual studio's hot reload functionality before but it works pretty well actually? I don't write many non-unity long running processes in c# so I never tried it before. There's some limits to what you can change but it looks really handy.
A user on github asked me if it's possible to increase the resolution of the walk grid, and the answer is yes! But not easily. I hacked this by splitting the walk map and then scaling the world up. Also for some unexplained reason I ended up with a 1.4Gb map file.
Here's all the Prontera field maps combined. They all connect rather well except for Prontera itself, they clearly attempted to keep the boundaries lined up. Prontera's main issue is they wanted walls both inside and outside of the city, and the fact that the city isn't square.
Random fun fact, the reason why the orc warrior smoking animation only worked on KRO is because text resources are only supposed to be obfuscated in the korean client, but only the obfuscated version of monsterskillinfo.xml was included on foreign builds of the game.
Payon test looks pretty good now, here I'm simulating a ping of 200ms and positioning remains fine. Undoubtedly having the server automatically continue your move after you've been hit makes navigating this a lot easier than real RO, but I like how it feels still.
Alrighty, audio system done. It should prioritize playing unique audio clips so a big pack of mobs should still allow other sounds like potions and attacks play. It uh, can't save you from the Muka hellscape though.