Jump to content

[WIP] Native Ragnarok Client


curiosity

Recommended Posts


  • Group:  Members
  • Topic Count:  3
  • Topics Per Day:  0.00
  • Content Count:  149
  • Reputation:   24
  • Joined:  02/11/16
  • Last Seen:  

Good luck! I'll be checking this thread from time to time to read updates~ Awesome work btw. 

(the old Sakexe looks nostalgic. I've missed it)

Link to comment
Share on other sites


  • Group:  Members
  • Topic Count:  23
  • Topics Per Day:  0.01
  • Content Count:  236
  • Reputation:   189
  • Joined:  11/27/11
  • Last Seen:  

Why making an older client based ?

Link to comment
Share on other sites


  • Group:  Members
  • Topic Count:  7
  • Topics Per Day:  0.00
  • Content Count:  133
  • Reputation:   189
  • Joined:  05/20/12
  • Last Seen:  

Why making an older client based ?

 

A few reasons:

  • I'm not really interested in making a renewal client. I like the old ones better.
  • There are debug files available for certain older clients.
  • There weren't any major changes in the code base until the renewal clients, so it doesn't take much work to update an "old" working client to use content from newer clients.
  • The difference between "old" and "new" is mostly additive. It's better to start with a smaller goal than a larger one.
  • Upvote 1
Link to comment
Share on other sites


  • Group:  Members
  • Topic Count:  14
  • Topics Per Day:  0.00
  • Content Count:  265
  • Reputation:   95
  • Joined:  09/30/14
  • Last Seen:  

Definitely. No point overreaching and burning out in the process.

Link to comment
Share on other sites


  • Group:  Members
  • Topic Count:  7
  • Topics Per Day:  0.00
  • Content Count:  133
  • Reputation:   189
  • Joined:  05/20/12
  • Last Seen:  

Forgotten features

 

While revisiting games I've played for years, one of the things I find the most exciting is discovering new features. By this I mean features that were planned at some point, but in the end never made it into the final product. When projects get to a certain size there will always be a few ideas that are rejected - some at a stage where you can still find remnants in the final product. In the case of Ragnarok we even had the lead designer leaving the company relatively early on. Despite the reason for this not being public, one of the reasons I've heard cited is that he didn't get the creative freedom he wanted. Who knows what might have been? In any event, what follows are a few features I've discovered that never made it into the final game.

 

Highly immersive footwear

 

As you're probably aware, the player characters change appearance based on the equipped items. The first layers are the body and head sprites, followed by up to three different accessories (upper, lower, mid). There's the left and right hand weapons, as well as the shield. Different sprites for different shoes were planned as well. In old versions of the network protocol you can even find shoe IDs in the player structures. This feature was most likely eventually left out because it would simply be too much work to animate the shoes for all the different classes. Even special weapon and shield sprites have been somewhat limited in use, and I believe these require significantly less work than it would take to create shoe sprites. 

 

Having players leaving footprints was also planned early on. From the looks of it this was originally meant to complement the different shoe types. I think when they scrapped shoe sprites idea they also forgot about the footprints. The effect is still present in the client, although I believe they intended to refine it a bit more. I guess it was eventually used for the Stalker class' Stealth skill. Here's what it would originally have looked like if enabled when normal players walk around:

 

0jUBXhc.png

 

Destroyable maps?

 

In Ragnarok the map is completely static, which is pretty boring. A partially implement feature would allow dynamic changes in the map elevation. It's uncertain how this would be used in practice, and therefore also why they chose to leave it out. Maybe they intended that the map could be destroyed by skills? E.g. have meteor storm leave a deep crater on the ground. That could be a pretty cool feature. Maybe I'll try implementing it myself someday.

 

Model culling

 

Another cool effect that was left out was having static models between the camera and the player disappear so that they don't hide the player. I'm not sure if the models were planned to be completely or just partially hidden. This feature was more or less complete, but the approach used is maybe to simple so that it doesn't always work as intended. I also discovered a bug in the calculation of the bounding box used especially for this purpose. You can actually try out this feature by using NEMO patcher, as I found a relatively simple approach to enabling it. Just enable "Restore model culling" when patching your client.

 

NSf94Oi.jpg

 

Sky box

 

This one is pretty self-explanatory if you've ever worked with 3D. Instead of having the background of the map be completely black (or blue like in Yuno), the client could instead show a picture of the sky or a landscape in the far distant. It's one of the simplest and most common effects used in video games to improve immersion, so it's a shame they never got around to finishing it.

 

Weather

 

There are some working weather related effects like snow and fog in-game, but a much more comprehensive system was planned at some point. This would include dynamic sun location and a true day/night cycle. One problem was probably that model shadows in Ragnarok are precomputed. A rain effect was implemented, but it was probably never finished as it looks pretty bad. The jRO team used to have some pictures related to this on their news page, and I believe they planned to release the new weather system with the Yuno update. Private server developers took matters into their own hands. If you played on an eAthena server around 2004 you may remember the horrible night effect that was enabled by default: Enabling the blind effect on all players until it was "morning" again!

 

Everything 3D

 

Considering the fact that licensing the RAD Game Tools SDK must have been pretty expensive, it's strange that Gravity never did more with Granny3D than implementing guild flags, the emperium and the castle guardians. (Not to mention Zombie Dragon!) Additionally as I mentioned in a previous post, Gravity already had their own RSX format which would have been sufficient if they only wanted a few simple 3D actors. The obvious explanation is that they wanted to do much more with it. Indeed, it appears that at one point they planned to introduce 3D customizable player characters. Perhaps this was a reaction to contemporary MMO titles, where full 3D quickly became the norm. The results of these experiments were never disclosed, so what it would have looked like is a mystery.

  • Upvote 7
Link to comment
Share on other sites


  • Group:  Members
  • Topic Count:  54
  • Topics Per Day:  0.01
  • Content Count:  513
  • Reputation:   83
  • Joined:  08/11/12
  • Last Seen:  

I wonder if sandboxed cities would be possible with this "dynamic map" feature. Like sim city meets ragnarok :D

Link to comment
Share on other sites


  • Group:  Members
  • Topic Count:  23
  • Topics Per Day:  0.01
  • Content Count:  236
  • Reputation:   189
  • Joined:  11/27/11
  • Last Seen:  

 

Why making an older client based ?

 

A few reasons:

  • I'm not really interested in making a renewal client. I like the old ones better.
  • There are debug files available for certain older clients.
  • There weren't any major changes in the code base until the renewal clients, so it doesn't take much work to update an "old" working client to use content from newer clients.
  • The difference between "old" and "new" is mostly additive. It's better to start with a smaller goal than a larger one.

 

Perfect answer. ^^ You absolutely convince me.

 

BTW It's really fascinating to read you.

- Model culling is an awesome feature (like ToS) and it'd be awesome to have it IG.

- For footprints I think It could be a cool feature but yo implement with caution : I mean that footprints on floor tile or slabs is silly. Only on sand or after walking in water...

 

i thought too to a great feature : Why characters don't have shadows? It only needs a black rotated printing of the current character on the floor to looks really good.

some ideas in the heap~

Link to comment
Share on other sites


  • Group:  Members
  • Topic Count:  14
  • Topics Per Day:  0.00
  • Content Count:  265
  • Reputation:   95
  • Joined:  09/30/14
  • Last Seen:  

Real shadows could definitely be cool. Would love to see the model culling be expanded as I talked to you about before curiosity, as it's current incarnation is too... all or nothing. 

And lastly, are you taking donations?

Link to comment
Share on other sites


  • Group:  Members
  • Topic Count:  54
  • Topics Per Day:  0.01
  • Content Count:  513
  • Reputation:   83
  • Joined:  08/11/12
  • Last Seen:  

Real shadows could definitely be cool. Would love to see the model culling be expanded as I talked to you about before curiosity, as it's current incarnation is too... all or nothing. 

And lastly, are you taking donations?

 

I would certainly love to support this project.

Link to comment
Share on other sites


  • Group:  Members
  • Topic Count:  5
  • Topics Per Day:  0.00
  • Content Count:  31
  • Reputation:   0
  • Joined:  03/07/16
  • Last Seen:  

Great work! I hope this is going to be a open-source :)

Link to comment
Share on other sites


  • Group:  Members
  • Topic Count:  4
  • Topics Per Day:  0.00
  • Content Count:  9
  • Reputation:   0
  • Joined:  03/24/12
  • Last Seen:  

curiosity Can you add some custom UI window into game? 

Link to comment
Share on other sites


  • Group:  Members
  • Topic Count:  7
  • Topics Per Day:  0.00
  • Content Count:  133
  • Reputation:   189
  • Joined:  05/20/12
  • Last Seen:  

You guys are very kind to offer donations, but it's not necessary. I have everything I need to work on this project. :)

 

I like the shadows idea, may look into that...

 

curiosity Can you add some custom UI window into game? 

 

Yes, of course. Anything is possible, though I don't have any ideas for custom windows other than making a better quick slot for mobile devices.

  • Upvote 5
Link to comment
Share on other sites


  • Group:  Members
  • Topic Count:  54
  • Topics Per Day:  0.01
  • Content Count:  513
  • Reputation:   83
  • Joined:  08/11/12
  • Last Seen:  

I see. I do hope that you allow plugins for this project so that even if you dont release the source, people could still extend it and share stuff :)

Link to comment
Share on other sites


  • Group:  Members
  • Topic Count:  6
  • Topics Per Day:  0.00
  • Content Count:  19
  • Reputation:   6
  • Joined:  03/22/16
  • Last Seen:  

Any chance you'd be willing to let interested developers contribute?  I'd like to see something like this exist, and if I can be of assistance I'd love to lend a hand.

Link to comment
Share on other sites


  • Group:  Members
  • Topic Count:  26
  • Topics Per Day:  0.01
  • Content Count:  350
  • Reputation:   43
  • Joined:  09/07/12
  • Last Seen:  

Dynamic maps, the one i've been waiting for a long time.
please make it happen /heh haha

Edited by benching
Link to comment
Share on other sites


  • Group:  Members
  • Topic Count:  7
  • Topics Per Day:  0.00
  • Content Count:  133
  • Reputation:   189
  • Joined:  05/20/12
  • Last Seen:  

Any chance you'd be willing to let interested developers contribute?  I'd like to see something like this exist, and if I can be of assistance I'd love to lend a hand.

 

To be perfectly blunt: no. You are not the first to ask, and I feel I should give an explanation as it must seem counterproductive to turn down willing contributors. There have been many client projects over the years, and if my only goal was to produce a working client I would have continued work on an existing project. Open Ragnarok comes to mind. Instead my primary aim has been recreating the game executable, as near as is possible from a binary. Given this particular constraint I believe there are few people who are capable of contributing, and many fewer still who would be interested in doing so. Lastly, I prefer doing my own thing, as I suspect most developers tend to do when it comes to their pet projects. Despite collaboration being pretty easy nowadays, I don't want to bother with it unless I can expect another major contributor.

  • Upvote 4
Link to comment
Share on other sites


  • Group:  Members
  • Topic Count:  1
  • Topics Per Day:  0.00
  • Content Count:  143
  • Reputation:   15
  • Joined:  12/25/13
  • Last Seen:  

Very interesting project...

follow this from now on

Link to comment
Share on other sites


  • Group:  Members
  • Topic Count:  3
  • Topics Per Day:  0.00
  • Content Count:  5
  • Reputation:   0
  • Joined:  03/31/16
  • Last Seen:  

This project looks fantastic.  Major kudos to you.  Upon completing this, I do hope you change your mind regarding a Renewal client.

 

Additionally, with your skills, I would like to offer a feature suggestion.  As so many of us are hosting our own servers of varying different customizations, do you think you could build and include a client customization tool (similar to NEMO) with your release?  The tool would be designed to make it easy to update the client to work with either Pre-RE or RE, basic modifications such as zoom distance, culling, etc, and potentially the tool could create an XML pointed at the specified IP of our server.  Essentially a "setup.exe" or "setup.apk" that modifies the client right on your sdcard to avoid end-users needing to dive into the files manually.

 

Also, I'm now following the post.  ( :

Link to comment
Share on other sites


  • Group:  Members
  • Topic Count:  7
  • Topics Per Day:  0.00
  • Content Count:  133
  • Reputation:   189
  • Joined:  05/20/12
  • Last Seen:  

That depends on what you mean by Renewal client. Ragnarok's Renewal upgrade was predominantly a change in game mechanics and an overhaul of the game content. This is for the most part independent of the client. My client could connect to a renewal-based server in its current state if I updated the networking protocol. The major differences between RagExe and RagExeRE were the introduction of the Lua interpreter and the overhaul of the user interface. I will be implementing neither of these, and probably nothing related to the 3rd classes.

 

As for customization, that is done by changing build parameters before compiling. You can think of it as a config file like Athena uses. Client patchers provide a dead simple way to customize the client, but most people are unaware of the staggering amount of work that goes into making a tool like NEMO. These customization patches have made out of necessity, and with source code available that necessity is gone.


Implementing skills is one of the biggest tasks in creating a client, simply because there are so many of them. Skills come in many different varieties, some requiring additional UI (e.g. warping, Graffiti), some need special character animations, some combine multiple effects, sounds, special damage and special hit effects. In addition to the player skills there are also many skills only used by monsters. At the moment I have about 14,000 lines of code just implementing the various visual effects, so it's easy to forget what's ready and what's not. Here's an overview of the current state of the 1st and 2-1 classes. ✓ means 100% done, ✗ means unimplemented or partially unimplemented. Most skills can be used just fine without implementing an effect, but for my 1st milestone I want to have at least 1-1, 2-1 and 2-2 skills fully implemented.
 
Swordman
 
✓ Bash
✓ Endure
✓ Increase HP Recovery
✓ Magnum Break
✓ Provoke
✓ Sword Mastery
✓ Two-Handed Sword Mastery
✓ Berserk
✓ Fatal Blow
✓ HP Recovery While Moving
 
Magician
 
✓ Cold Bolt
✓ Fire Ball
✓ Fire Bolt
✓ Fire Wall
✓ Frost Diver
✓ Increase SP Recovery
✓ Lightning Bolt
✓ Napalm Beat
✓ Safety Wall
✓ Sight 
✓ Soul Strike
✓ Stone Curse
✓ Thunderstorm
✓ Energy Coat
 
Archer
 
✓ Arrow Shower
✓ Double Strafe
✓ Improve Concentration
✓ Owl's Eye
✓ Vulture's Eye
✓ Arrow Crafting
✓ Repel
 
Merchant
 
✓ Discount
✓ Enlarge Weight Limit
✓ Item Appraisal
✓ Mammonite
✓ Overcharge
✓ Pushcart
✗ Vending
✓ Cart Revolution
✓ Change Cart
✓ Crazy Uproar
 
Thief
 
✓ Detoxify
✓ Double Attack
✓ Envenom
✓ Hiding
✓ Improve Dodge
✓ Steal
✓ Back Slide
✓ Find Stone
✓ Sand Attack
✓ Stone Fling
 
Acolyte
 
✓ Angelus
✓ Aqua Benedicta
✗ Blessing
✓ Cure
✓ Decrease AGI
✓ Demon Bane
✓ Divine Protection
✓ Heal
✓ Increase AGI
✓ Pneuma
✓ Ruwach
✓ Signum Crusis
✗ Teleport
✗ Warp Portal
✓ Holy Light
 
Knight
 
✓ Bowling Bash
✓ Brandish Spear
✓ Cavalier Mastery
✓ Counter Attack
✓ Peco Peco Ride
✓ Pierce
✓ Spear Boomerang
✓ Spear Mastery
✓ Spear Stab
✓ Twohand Quicken
 
Wizard
 
✗ Earth Spike
✗ Fire Pillar
✓ Frost Nova
✗ Heaven's Drive
✗ Ice Wall
✓ Jupitel Thunder
✓ Lord of Vermillion
✓ Meteor Storm
✓ Quagmire
✗ Sense
✗ Sightrasher
✗ Storm Gust
✗ Water Ball
 
Hunter
 
✓ Ankle Snare
✓ Beast Bane
✓ Blast Mine
✓ Blitz Beat
✓ Claymore Trap
✓ Detect
✓ Falconry Mastery
✗ Flasher
✓ Freezing Trap
✓ Land Mine
? Remove Trap
✓ Sandman
? Shockwave Trap
✓ Skid Trap
? Spring Trap
✓ Steel Crow
✗ Talkie Box
 
Blacksmith (Note: Forging items not implemented!)
 
✓ Adrenaline Rush
✓ Hammer Fall
✓ Hilt Binding
✓ Power Maximize
✓ Power-Thrust
✓ Skin Tempering
✓ Weapon Perfection
✓ Enchantedstone Craft
✓ Iron Tempering
✓ Ore Discovery
✓ Oridecon Research
✓ Smith Axe
✓ Smith Dagger
✓ Smith Knucklebrace
✓ Smith Mace
✓ Smith Spear
✓ Smith Sword
✓ Smith Two-handed Sword
✓ Steel Tempering
✓ Weapon Repair
✓ Weaponry Reasearch
 
Assassin
 
✓ Cloaking
✓ Enchant Poison
✓ Grimtooth
✓ Katar Mastery
✓ Righthand Mastery
✓ Lefthand Mastery
? Poison React
✗ Sonic Blow
✗ Venom Dust
? Venom Splasher
 
Priest
 
✗ Aspersio
? B.S Sacramenti
✓ Gloria
✓ Impositio Manus
✓ Increase SP Recovery
✗ Kyrie Eleison
✓ Lex Aeterna
✗ Lex Divina
✓ Mace Mastery
✓ Magnificat
✗ Magnus Exorcismus
? Resurrection
✓ Safety Wall
✗ Sanctuary
✓ Slow Poison
✓ Status Recovery
✓ Suffragium
✗ Turn Undead
 

Bonus pictures:

 

DF1dtNI.png

Pet capture

 

W7RYrjh.png

Rental cart

 

rka1lqt.png

Arrow crafting

 

I7I2Afo.png

Cart select

  • Upvote 6
Link to comment
Share on other sites


  • Group:  Members
  • Topic Count:  22
  • Topics Per Day:  0.01
  • Content Count:  806
  • Reputation:   220
  • Joined:  03/13/12
  • Last Seen:  

Awesome :)

Link to comment
Share on other sites


  • Group:  Members
  • Topic Count:  14
  • Topics Per Day:  0.00
  • Content Count:  265
  • Reputation:   95
  • Joined:  09/30/14
  • Last Seen:  

As a Renewal server owner, I'm sure it's no surprise that I hope you'll change your mind and either add Renewal functionality after polishing up the Pre-Re client, open up the project for contributions, or add a way to use a type of plugin system.

 

Still, it's looking great, keep up the good work.

Link to comment
Share on other sites


  • Group:  Members
  • Topic Count:  2
  • Topics Per Day:  0.00
  • Content Count:  23
  • Reputation:   15
  • Joined:  12/15/11
  • Last Seen:  

✓ Magnum Break

✓ Cold Bolt

✓ Fire Bolt

✓ Frost Diver

✓ Safety Wall 

✓ Cart Revolution

✓ Heal

✓ Frost Nova

✓ Grimtooth

I find these skills specifically exciting to learn about.

Your post 'A brief look at RagExe' was very informative and I'm wondering if you know how RO handles the 3d effects used in these spells.

What method did you go with to implement them? Are they created as mesh objects, unwrapped, textured, and animated all in code? I'm very curious to know more about these if you are willing.

Link to comment
Share on other sites


  • Group:  Members
  • Topic Count:  7
  • Topics Per Day:  0.00
  • Content Count:  133
  • Reputation:   189
  • Joined:  05/20/12
  • Last Seen:  

(...) What method did you go with to implement them? Are they created as mesh objects, unwrapped, textured, and animated all in code?

 

That is about right. All effects (CRagEffect) simply configure instances of effect primitives (CEffectPrim), with the only exception of effects based on the STR format (what Gravity calls the "EZ effects"  :D). Effect primitives are animated in code, and buffers for effect primitives are constructed on a per-frame basis. Making these effects is basically like working with a 3D canvas from the code, where everything is dumped in the renderer's queue. In many cases an effect primitive is something non-specific like a half sphere, where properties like radius and opacity is changed over time. There are also many primitives specific to individual skills. A skill can have multiple effects, which in turn can use multiple effect primitives and STR effects. For instance, Acolyte's Heal uses four different effects based on the amount healed.

 

A rough description of how the skills you picked out are implemented:

 

Magnum Break - Two expanding spheres and a 3D circle on the ground

Cold/Fire Bolt - The bolts are just textures moving towards the target, combined with an expanding 3D circle on target

Frost Diver/Grimtooth/Frost Nova - just multiple spikes growing in random directions, spawned one by one for the duration of the skill

Safety Wall/Heal - 3D cylinder changing height with the texture fading out in the top, plus some floating particles here and there

Cart Revolution - Combination of STR effect, an expanding 3D sphere and an expanding 3D circle

 

Attack skills will often have one part for the skill itself, and one for when the target is hit. Damage effect is also varied, often based on the element of the attack. Most skills will additionally have a special effect on the player, like the glowing cylinder around the magician when a spell begins. There are lots of different ones. Skills using only a simple STR are relatively uncommon.

 

By the way, looking forward to updates on your project. :)

  • Upvote 4
Link to comment
Share on other sites


  • Group:  Members
  • Topic Count:  19
  • Topics Per Day:  0.00
  • Content Count:  192
  • Reputation:   43
  • Joined:  12/13/11
  • Last Seen:  

Looks already pretty polished. Respect!

The best thing that could happen to this project would be, if it goes open source ones you're ready for it.
I'm sure there's more than 1 person willing to extend this project to it's full potential, which would also give us the possibility to implement renewal features as well.

 

And real-time shadows sounds like a more than awesome feature :D
Which could be extended with light effects coming from fire effects for instance (otherwise some maps might look weird with the missing color variety on the floor)  :P

Edited by Everade
Link to comment
Share on other sites


  • Group:  Members
  • Topic Count:  0
  • Topics Per Day:  0
  • Content Count:  7
  • Reputation:   1
  • Joined:  03/19/12
  • Last Seen:  

The best thing that could happen to this project would be, if it goes open source ones you're ready for it.

I'm sure there's more than 1 person willing to extend this project to it's full potential, which would also give us the possibility to implement renewal features as well.

 

Considering that curiosity is not willing to share it, my take is to not try to push him to it. It's his hard work and it's decision to make what he would like to do with his code.

 

To me, the best things that can happen with this project are these (in no particular order):

  • Learn more about the client itself: Even if it means that the code is not out there, just learning a lot about the client and how things work in the client is a great piece of knowledge. If curiosity is willing to share some of that, it would be awesome!
  • A client that is truly moddable/customizable: At the end of the day, what we all want is  a client that is open to modding and allows custom artwork and actions to show up in the client. While having a closed-source might limit a lot of things, it is still possible to have a client that's vastly better than trying to hex-hack the official client to do have custom things built, IMO. I could be dead wrong here, but I see the potential.
  • Motivate other developers to build a client: Take this knowledge and learn to build another client. Who knows that other person might just release the source to the wild :).
Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...