vbGORE MMORPG Engine - v1.0.0

Started by
17 comments, last by Spodi 16 years, 8 months ago
vbGORE is an open source, free MMORPG engine developed in Visual Basic 6 that has been in heavy development for over a year. It supports multiple connections with great speed with support over as many servers as you want. The server offers a lot of security from countless lines of packet integrity checking to streaming packet encryption, using a MySQL database to hold information. The client uses DirectX 8 to offer powerful 2d graphic support and manipulation with effects from alphablending, lighting and rotations to even a custom particle engine. description of your image description of your image description of your image description of your image vbGORE includes a fully playable demo game with spells to cast, quests to beat and NPCs to slay so you can see everything vbGORE has to offer. Main site: http://www.vbgore.com/ Download: http://www.vbgore.com/Downloads Screenshots: http://www.vbgore.com/Screenshots_From_1.0.x Forums: http://www.vbgore.com/forums/ More game information: http://www.vbgore.com/What_is_vbGORE [Edited by - Spodi on July 22, 2007 9:15:34 PM]
NetGore - Open source multiplayer RPG engine
Advertisement
When you say 'over as many servers as you want', do you mean to say that the server system is distributable? How did you manage writing data to the same database and hosting over several servers? Or is each server its own shard, writing back user specific data only? I would love to hear a bit more about this.

Also, can you say a bit on how you did the language localization? Is it all hardcoded, or is there something deeper? I have read a couple interesting articles about language localization techniques, but have never actually implemented anything myself.

This looks really great. Networking, particles, GUI -- it has it all. Have you developed a method for actual game creation (worlds and quests) -- or are you just working on the engine?

Anyway, looks really good mate. Keep up the good work.
Greetings Visage,

The server load distribution is done by setting which servers run which maps. When a player changes maps, a verification is done to make sure they are still on the correct server. If they aren't, the client is told to disconnect then reconnect to the new server (this is all done behind-the-scenes, so the only thing the user notices is a slightly longer map switching). While the user is changing maps, the server saves their data to the global MySQL database that all servers get their information from. When the user connects to the new server, the new server just grabs their information out of the database and they become the handler. The old server just unloads all information about them.

The servers are allowed to communicate between each other, too. They will send packets to one another if a player sends mail or a private message to a player on another server, for example.

The whole "multiple server" system still requires heavy testing to make sure it works correctly, but from all I have tested it seems to work fine.

The language support is done by using a list of system messages, each in different languages. To prevent heavy packet loads, the server sends common messages by ID instead of by the message itself, so that way something like "The requested player is not online" goes from about 37 bytes (34 + packet header + string header + color) to 2 bytes (packet header + message ID). The client will first check the language specified by typing the /language (/lang for short) command. If the message exists in that language, it will use it, but if not, it will fall back on English. So as you can see, NPCs names are still English, and quest information will still be presented in English (unless moved to the client, which would use the same system described above basically, but risk expose the quest information to the user), but system messages are translated. It works for NPC's chatting, too, which is also done pretty much the same as above, but in a lot more sophisticated format.

I'm not exactly sure what you are referring to when you said, "Have you developed a method for actual game creation". Care to rephrase that for me? ;)
NetGore - Open source multiplayer RPG engine
Thanks for the responses. What I meant by 'game creation' was adding skills, triggers, events, designing maps, et cetera.

After perusing your site, though, I have pretty much found what I wanted -- there is still a lot of hard coding going on for skills, but that is to be expected at such an early stage. Are there any plans to add scripting for easy extension of the engine?

Anyway, definitely looks like it has come a long way since the early versions! Keep up the great work. Looks like your forums are starting to get quite a following!

I really like your localization system -- but you might run into an issue when you start getting into dynamic quotes. For example, 'The ogre dropped an apple' versus 'The wolf dropped a green pelt' versus 'Franklin handed you fifteen pearls'. Notice the grammar issues with plurality, handling articles, et cetera. This gets even more complicated when you go between languages -- because each language has its own rules. Gamasutra has an excellent article on this exact topic, which you can read here. Obviously, not high on the priority list -- but worth keeping in mind as development rolls along.

As for the distributed system -- is it p2p or does it have a master server? Have you ever thought about using the systems to watch one another and handle any crashes elegantly? As in, if one system drops, another one picks up the connections. It probably wouldn't work so well with the design you have now -- where each server holds 'one' map -- but I assume that you have the ability for one server to hold several maps in the case where you only have one server. Do you typically split the map load among different servers (as in, with 10 maps and 3 servers, each server would have 3, 3, and 4 maps respectively). In this case, do you ever do any weight testing, to see if some maps are more 'active' then others, and try to rebalance the servers? Is there a way to 'weight' one server more heavily.

Sorry, that got off on some pretty wild stuff there. The idea excites me though -- I love distributed systems.

Best of luck!
Yeah, a lot of it is purely code-based. This is mostly because I find scripting would be a combination of slower and more limiting then directly coding, along with harder to write. With VB6, you got the IDE with its syntax and powerful error handling, but with a lot of scripting languages, it'd simply just crash if there was any error. Of course, theres some powerful scripting languages, but then still, you have to learn two languages instead of one. I'm definitely not anything close to a pro at scripting theory and writing, but I have never found much help for it in open source projects like this.

Thats a cool article on the language - I'll check it out! I'm not too worried about small grammar errors in cross-language support, though. As long as the people can figure out what the message means then I'm happy. ;)

The distribution system can handle as many maps per server as it needs. By default, its set up all maps go to one server. The load balancing is pure manual - no automatic checks. One reason for this is that load balancing itself takes a bit of a load to do itself, so I doubt I'd be able to do it very well any time soon without more work then it is worth.

That would be a cool idea, though, having one server pick up if the other drops. Though, I can't see an efficient way of that working. The other server would have to maintain a lot of the same memory as the server that crashed, which would require a lot of communication between the two.

Thanks for the feedback! :)
NetGore - Open source multiplayer RPG engine
I noticed your networking technology is based upon the Winsock API - please tell me you didn't use select()? :\
_______________________Afr0Games
No Select(), I use WSAAsyncSelect(). I'm not as knowledgeable with the Winsock API as I would like to be, so I wouldn't be surprised if the socket isn't superb, but I believe it is written quite well. You can view the code in the \Code\GOREsock\ folder for the socket control.

Edit: You can now view it online here at http://www.vbgore.com/code/100/Code/GOREsock/

[Edited by - Spodi on May 13, 2007 6:43:30 PM]
NetGore - Open source multiplayer RPG engine
This looks hot! Downloading right away.

How easy is it to modify the interface? What resolutions does the game support?

Update: Step 5 of SQLyog install guide tells you to right click on the right panel, when I think it is the left panel.

Very thorough install instructions. I have installed vbgore, mysql, odbc and the sqlyog. I've started SQlyog but when I go to run vbgore I get an error message.

I've run all the configuration, twice now and SQLyog loads the vbgore database successfully. I'm going to check your forums now.

[Edited by - Dumptruck on May 13, 2007 9:10:46 PM]
Thanks Dumptruck! Any resolution is supported, but one constant resolution must be used for all clients and recognized by the server, so either 800x600 or 1024x768 (if you don't mind cutting out some lower-end computers) is recommended.

As for modifying the interface... it could be a lot better designed, and I hope to some time in the future. Theres an article that will help lead you through adding new windows to the interface, though, which can be found at: http://www.vbgore.com/Adding_windows
NetGore - Open source multiplayer RPG engine
I have everything up and running now. This has huge potential.

Awesome documentation for getting started.

What are you targeting now for improvements?

This topic is closed to new replies.

Advertisement