Welcome!

Join our community of MMO enthusiasts and game developers! By registering, you'll gain access to discussions on the latest developments in MMO server files and collaborate with like-minded individuals. Join us today and unlock the potential of MMO server development!

Join Today!

MapleSyrup - A C# MapleStory Client (In-Development)

Junior Spellweaver
Joined
Apr 25, 2011
Messages
153
Reaction score
37
Hello everyone,

It's been a while since I posted anything on here, few years to be honest. I recently started working on a MS Client, similar to what JourneyClient/HeavenMS Client have attempted to do. This one is written is C#, I do plan on keeping it up and continuing to work on it, but do be aware I work 40-60 hours a week and go to school full-time, so if there's any slowdowns it's because of that. I originally did work on a different client, which is dead now, but that was when I was a little too ambitious and without not enough knowledge to do anything for myself. So, I spent the last few years learning, improving, and developing small games doing personally little game jams to see where I was at, and here I am. Still learning every day. Enough about me, now about the client. I never planned on releasing this, completed or not, but that wouldn't be fair since maybe someone can complete it someday, so that's what I'm doing today.

This is no where near to where Journey/Heaven is, but it's a start and I plan to be there within the next month or two. Not rushing it.

Features:
  • Written in C# .NET 7, Linux and Windows are tested and working.
  • Uses FNA (a XNA-Implementation, but better) included in the repo in zip files, otherwise it may cause compatibility issues.
  • Custom Entity-Component-System
  • Custom Culling of the Entities, if it's not within the Camera's View it doesn't get rendered, speeds things up, exception is the backgrounds.
  • Custom Resource System, allows you to search items by path without worrying about the backend you use (NX/WZ).
  • Custom NX Library I wrote, still working on speeding it up, but so far it works good.
  • Custom Event System, this allows the systems to communicate with each other without caring who or what they are.
  • Partly inspired by Urho3D.

I have yet to document everything in the library, since its not attached to the main client, but I do write code in a clean manner that allows you to know what is going on without having to play the guessing game.

I've spent most of the time creating the Event System, ECS, and Resource System, so that's why there's not as much progress as you would expect. You may Fork as you please. Not looking for contributions, mainly because this is a learning experience for me, so if you want to I'm not gonna deny it, although it may take me a while to look at it.

Warning: I do not follow most of what you may call "MS-Like" to make it a close to the original as possible. My goal is make a working client that is efficient, easy to use, and extensible. That's why I work so much on the ECS and EventSystem. Those are still in the Alpha stages since there is still more to be done to optimize them.

For example, this is how I accomplished the Parallax of the backgrounds:
Code:
background.Parallax = Matrix.CreateTranslation(new Vector3(
            (camera.Position.X * (background.Rx * 0.008f) + camera.Viewport.Width / 2f),
            camera.Position.Y * (background.Ry * 0.01f) + (camera.Viewport.Height / 2f), 0));
The Matrix then gets pushed into the SpriteBatch and it works as you would expect, I've compared it to the original and it moves more or less the same.

Another example would be the boundaries of the map, it doesn't use VRTop, VRLeft, etc. It uses the ECS:
Code:
        var left = scene.FarLeft + 10f; // gets the entity furthest to the Left
        var right = scene.FarRight - camera.Viewport.Width; // gets the entity furthest to the Right
        var top = scene.FarTop - 100f; // gets the entity furthest to the Top
        var bottom = scene.FarBottom - camera.Viewport.Height; // gets the entity furthest to the Bottom
   
        if (camera.Position.X <= left)
            camera.Position.X = MathHelper.Clamp(camera.Position.X, left, left);
        if (camera.Position.X >= right)
            camera.Position.X = MathHelper.Clamp(camera.Position.X, right, right);

        if (camera.Position.Y <= top)
            camera.Position.Y = MathHelper.Clamp(camera.Position.Y, top, top);
        if (camera.Position.Y >= bottom)
            camera.Position.Y = MathHelper.Clamp(camera.Position.Y, bottom, bottom);

Yes this works, and I don't plan on changing it. Everything does not need to be the same as the original, that's my rule. If you want to change it, you are more than welcome to.

There are things that are not in my priority list, for instance the backgrounds do not have the scrolling effect. I did have it at one point but removed it since it was not exactly what I was aiming for. These sort of things will come up but I do plan to get to them eventually, my goal is gameplay not visual aesthetic. That will come with time, because why get a Map fully rendered and working when you can't even load a character properly?

What are my next plans?
  1. Manually create an Avatar/Player, only skin (head, body, arms) to get the animations down for now.
  2. Created a physics system, footholds, gravity, etc.
  3. Create the networking system and officially begin to communicating with the server.
I work in three's so once those 3 goals are done, I will create another 3 goals and so forth.

Note: Things are still messy with the code, I will be constantly rearranging and deleting code for optimizations or irrelevance.

Github:
 
Last edited:
Junior Spellweaver
Joined
Apr 25, 2011
Messages
153
Reaction score
37
Can you please upload v62 nx data ?
I can, it’ll be a while since I’m working. You can use NoLifeWzToNX or reWZ WZ2NX if you don’t want to wait.

Be aware that you can use pretty any preBB version and it’ll work, I tested it with v83 and v88 but I don’t care to be working with those versions so that’s why I chose v62.

tldr; you don’t need v62 specifically. Even v35 works just fine.
 
Last edited:
Newbie Spellweaver
Joined
Dec 31, 2023
Messages
9
Reaction score
6
Would it be possible to compile it to web client? like yeou did?
Also I'm definitely glad to see someone tried to make a good client!
 
Junior Spellweaver
Joined
Apr 25, 2011
Messages
153
Reaction score
37
Would it be possible to compile it to web client? like yeou did?
Also I'm definitely glad to see someone tried to make a good client!
I’m not entirely sure, that might be a fun challenge to take up once things get more stable! I’ll put that on the back burner for now.
 
Back
Top