Started by whitespirits, July 02, 2016, 02:34:53 pm

Previous topic - Next topic


July 02, 2016, 02:34:53 pm Last Edit: July 02, 2016, 02:36:16 pm by whitespirits


I bring here as promised Wing MMORPG Maker for everyone.  Finally!

Wing MMORPG Maker is nothing more than the source code of Wing Of Misadventure project.  An adaptation or transformation of RPG Maker VX Ace an MMO Maker potential.  What will ensure that everyone can develop your MMOs with the stability and security that such games really need. Basically, all who love MMOs now have a super ally by your side! And for those who are studying game programming, look there, there 's no better source. Wink

Basically, it is unlike any online base you have ever seen.  This includes Netplay's Eclipse Origins, Elysium and CIA.  That why Wing Of Misadventure was initially a REAL game and TESTED online for months, without incurring in any problem or security invasion.  With unique systems and unlimited possibilities.

Well, there is a lot of complexity in creating the WOM project.
The server is developed in C #, and goes along with the Game.exe also developed in C #.
There is a DLL called WOM 32 developed in C ++ that brings some new features and methods for the use of ruby and script within the RPG Maker, besides the actual script in Ruby that was almost COMPLETELY MODIFIED.


July 02, 2016, 02:49:56 pm #1 Last Edit: July 02, 2016, 04:04:00 pm by Blizzard

EDIT: Alright, this is going to be a fullblown rant before I take a look at the actual structure of the code.

EDIT: Well, let's go.

The DLL:

1. The DLL code is completely contained in a header file. Horrible, horrible coding practice.
2. They are using Windows-specific functions such as ReadFile(), etc. rather than C99 standard fread(). This makes the server very difficult to port to other OSes than Windows. I never really understood why anybody would use these functions when they aren't trying to take advantage of special functionality such as file permissions. The only exception to this at a glance I can see if CryptGenKey() and similar.
3. I won't go deeply into coding conventions, but being able to see only 3 lines of code in one screen due to excessive empty lines and putting each function parameter into a new line is really annoying, especially when a function stretches over hundreds of lines of code.
4. IDK how many people still use #pragma comment(lib, "LIB_NAME"), but it's weird to see somebody using Windows-specific file functions and NOT taking advantage of project setup in Visual Studio. O_o Especially since it's obviously an auto-generated project as I can see the unused stdafx.h include.
5. Visual Studio 2010 projects/solutions, huh? Weird that somebody still uses it. I would understand VS2012 due to its CRT being the last one that still supports XP SP2 (all later ones support XP SP3 as minimum). Well, this is just a small note.


1. It keeps being mentioned throughout the code and docs, but there is no source or binaries with that name. At least none I can find. :/


1. Ugh, mixing of Spanish and English in code. IMO coding should be done in English exclusively, but if somebody wants to use another languages, they should at least be consistent with it. >.<


1. They are hyping that exe a bit too much. All it does is load the RGSS3.dll, create a window and some misc stuff.
2. The idea is actually pretty neat. If the original Game.exe is already that limiting, it's nice to be able to load the DLL and do your own thing in the Game.exe without having to rewrite the entire engine. Being able to do it C# and .NET makes things probably a lot easier, too. Sure beats using C++'s dlopen(). It's cool that Enterbrain made that possible. Not sure if RMXP's RGSS.dll could work like that.


1. Man, they've rewritten the whole data format. That is, they are using a custom format rather than writing a Marshal deserializer in C# which probably already exists anymore. Heck, even I wrote a partial deserializer in just an afternoon for Blizz-ABS's Config app.
2. Why they aren't using an SQL database is beyond me. It's literally called a database system, to be used for large amounts of data. They server will slow down heavily the more accounts are registered and the more data is saved on the server.
3. There is something called recipes, but it's hardcoded in the server and any edit would require recompiling the server. Weird that they didn't put it into a data file, at least in some for of text.
4. Same with "globals". These things should be settings so normal users can edit them without having to recompile the server.
5. Seems nice in regards to feature set. They even have activation emails and stuff like that.
6. Very, very bad communication protocol. Using cryptic numbers/strings like "<0>", "<1>", etc. is horrible to read and easy to mess up. You have to look up the numbers each time you want to write a piece of code using them. Plus, adding something in between is impossible since you have to shift all the numbers so it contributes to the disorganization of the code.
7. The communication protocol was one of the worst things about Netplay+. Not only was it unsafe, it was so error prone that Netplay+ servers would start lagging for no reason after a couple of chat messages were exchanged between several players who are online at the same time. String parsing is probably one of the unsafest ways to deal with online data. Make no mistake, RMX-OS is barely an exception to this rule. I can probably fuck up their server just by sending strings with incorrectly formatted messages abusing the < and > characters. Just like any Netplay+ server. The safest way is always binary data, but only because it's harder to read than strings and it's still not safe enough. Without proper encryption, it just won't work right.
8. They have this unused class called Cryptography. Not that it does much. It only has the functions GetMD5(), GetSalt() and GetSHA1().
9. TCP sockets, huh? I guess no RM scripter dares implement a server with UDP sockets.
10. They have rewritten a lot of the game scripts in C# to make them run on the server. This is the point where having a Ruby would have been very useful since they could have copied the game scripts and just adjusted them. I've seen a lot of Netplay+ servers that were not written in Ruby do this.
11. The file PlayerLogic.cs has a function that's over 1700 lines long.

I haven't looked too much at the client code. I've kinda had enough. >.<

All in all and apart from the flaws, it seems pretty ok as far as the functionality is concerned. Of course I have no idea how stable it is, how well it handles higher number of players or how secure it really is. I haven't seen any real network encryption. There is apparently some code that calls the encrypt and decrypt in the DLL, but those functions are not called anywhere in the client and there is no encryption/decryption code in the server eaither. The only thing I saw in the DLL is maybe password encryption, but I didn't bother checking if it was really called anywhere.

The code was obviously made for a specific game with specific features. The code quality is not something a professional coder would approve of. I'd say the heaviest sin is the weird organization of the code (mostly due to lack of reusable pieces) since bugs would have to be fixed one at a time and changes in some internal workings would require to change things in many places. This makes implementing new stuff and testing a nightmare. I have the feeling that different parts of code were implemented by completely different people with little or no communication between them as far as code is concerned which makes me question the stability of the whole thing. I mean I'm sure it runs fine. I'm just trying to say that it feels as if it's fragile to changes and that some minor changes in the code could easily affect other parts and break them.

I think it's sad that they wrote things from the ground up, but took the bad practices that Netplay+ has been dragging through the community for years. And I think it's sad that they had the chance to make the DLL with proper async socket code and they didn't (at least not from what I can tell).

EDIT: I think it's sad that people just keep copying the code they find and edit it a bit. Of course this is part of the point of Open Source, but it would be awesome if somebody would sit down and made a REAL generic RM server. RMX-OS was the closest thing so far and if I had to remake it, I would definitely approach things in a very different manner. (Of course, if I had the time.)

Seeing that I tried to elevate the standard for network code in RM at least a little bit with RMX-OS, it really makes me sad to see that people still cling to the conceptually inferior Netplay+. :( And this server is just another Netplay+-based server. :(

EDIT: I'm sorry, it's hard to be excited about it when I see so many BASIC things wrong with it.
Check out Daygames and our games:

King of Booze 2      King of Booze: Never Ever
Drinking Game for Android      Never have I ever for Android
Drinking Game for iOS      Never have I ever for iOS

Quote from: winkioI do not speak to bricks, either as individuals or in wall form.

Quote from: Barney StinsonWhen I get sad, I stop being sad and be awesome instead. True story.


Interesting man :) I have been using it quite a lot so hopefully its good and stable! the creator is a great guy!


July 03, 2016, 02:30:45 pm #3 Last Edit: July 03, 2016, 02:32:47 pm by Blizzard
I'm glad to hear that. :) Feel free to to forward him my rant. xD Maybe he can find something useful if he wants to refactor some of the code and set up the "ignores" on his git repo. I'll also be ready to provide some helpful tips and directions what he could do to make the system better.
Check out Daygames and our games:

King of Booze 2      King of Booze: Never Ever
Drinking Game for Android      Never have I ever for Android
Drinking Game for iOS      Never have I ever for iOS

Quote from: winkioI do not speak to bricks, either as individuals or in wall form.

Quote from: Barney StinsonWhen I get sad, I stop being sad and be awesome instead. True story.