EMOS (Enhanced Multiplayer Online System)

The goal of this project is to offer everyone the ability to make MMORPG’s, Lobbied First Person Shooters, MOBA’s, or Networked Platformers at an affordable cost in c++ or BP. To those that have provided MMO toolkit solutions. I appologize ahead of time for the release of this project. I have been wanting to do this project for some time now, and I feel that everyone should have the ability to learn, or make what they want. All the solutions which have arised over the last couple of years have been Blueprint specific. Although this is a great for newcomers, for most people the ability to separate client code from server code poses alot of problems.

The Enhanced Multiplayer Online System or EMOS for short, is designed to be a ‘Free’ open source plugin for making online games. This includes MMO’s, MOBA, or Networked Platformers, and pratically any other type of game you can think of which requires a client to server communications platform. EMOS is built for making Online Games easier to create in Unreal Engine 4 projects. This project is not intended to be a direct replacement to UnrealEngine 4’s existing Network System, but instead as a compliment to the existing system.

The source code can be found at: https://github.com/DigitalKarnage/EMOS. However the plugin is still a work in progress, and will continue to be for sometime to come. I do plan on adding Additional ‘GameType’ Modules, such as RPG, MOBA, FirstPersonShooter, and Platformer. These will be built along the way to test the various systems included in EMOS. Each gametype module will be designed specifically around the multiplayer experience for the specific game type and will most likely not work in a ‘single player’ environment.
Some EMOS features include:

MongoDB. The connector is pre-built and the server files are included in the build, and ready to go when you are.

  • The Database module only works on windows server, but in the future have the includes necessary built to support linux, and mac server variants.

Websockets communications, No more trying to build Network Socket communication protocols, Utilize the UnrealEngine 4 UStruct objects as communication messages.

EMOSRPG: The RPG Plugin to make Online RPG Related Games. Whether FirstPerson, ThirdPerson, or a Combination of the 2. This system is designed with the most generic properties that all RPG’s contain. This should be extended by your own project, but can be used right out of the box. EMOSRPG is designed to hide away the server implementation details from the client code. Although you can use c++ or blueprints with EMOS, EMOSRPG is built with the server side of things implemented in c++, while the client code can be implemented in blueprints, you are not limited to blueprints :smiley:

EMOSRPG Features to be implemented

Patch Services
Account Services
Chat Services
In-game Mail Services
Consignment / AuctionHouse Services
Enchanting Services
Character Services
Crafting System
Storage Services (Account, Character, Inventory)
Social Services (Faction / Guilds / Parties)
Instance Area Services
Server Load Balancing
Combat Services
Quest and Dialog Services
Server2Server Communications

I want to Thank Epic Games, and the members of the Unreal Engine 4 team. This is an amazing engine, community and team.

Join the Skype Chat @ https://join.skype.com/rQDJ1rIsM3nJ

EMOS (Enhanced Multiplayer Online System) 0.1a

Known Issues:

Hardly any comments in code
No documentation on classes and usage

No Tutorials (written or videos)

MongoDB module fails to copy required dll’s to the build directory (Needs Documentation)
Websockets does not allow sending UStruct objects as json formated strings (*Requires VARest plugin)

Plugin does not work with shipping build, unless special procedures are in place to ‘pre-compile’ the build for specific targets. (Needs Documentation)

I’m sure there is more to come.

Nice one buddy! ETA for the “final” (stable?) release? Maybe some video demonstration later? : )

Well, with a project of this size, I’m assuming that the core stuff should be done within the next couple of months.

With the GameType modules. Those are going to take some time, its basically designing a game and testing the generic aspects of those games. I’m assuming at some point i’m going to need to take a poll on what GameType modules are more important to the community, and go from there. However my first priority is RPG, I’ve been wanting to make an online rpg for some time, but i always seem to fall short when it comes to content, and time.

Nice, my project is an RPG too (writing the design docs nowadays), but with a little twist (some hub dimensions, where players can meet each others, talk, make some business and other stuffs, like in Acti’s DESTINY). You know Bloodborne or Souls game series online play systems? I wanna use something similar to that ones on the big instance areas (when the time comes), and an arena stage with lobby system, what do ya think? The EMOS can work with that later? : )

I dont know the game system specific to those games, However the EMOSRPG module make no assumptions as to what kind of rpg you are making, or how you implement them, it just does the hard to do behind the scenes stuff like player movement (using the built-in movement component), persistance storage, server to server communications, etc. I will be able to expand on this later as I get Examples together

How difficult is it going to be for blueprints to communicate with the plugin?

I will try to expose as much of the MongoDB and Websockets related stuff to Blueprints. However the Gametype modules will try to hide the necessity to need those exposed to blueprints.

Lets take a for instance.

ARPGPlayerCharacter will have internally a way for the server to update the stats of the character with communications to the database, and will update the Character stats on the player, and update the database (internally) with no need for BP’s to know how to do that stuff.

mind you there is no clamping, or checking the values, but i think it shows what is exposed and the expectation of the scripter.

However I know what it’s like to want to have full control over every aspect of the game, and don’t want to leave it up to the plugin to make assumptions I’m assure of. So with that said. I will do my absolute best to expose what I can to blueprints, in a user friendly way, and hide all the complicated aspects that cannot be done in blueprints.

Thank you DK, i will following your project from now in the future (subing to this thread), and of course, i’m very grateful & wish you a lot of endurance for this AWESOME work! : )

Sounds like a great plan and lots of good features planned. I like the modular approach of having a clean base and then building additional more game type specific functionality on top of that, but most importantly the plan to separate the Server implementation/rules from the Client. These two things are the most important differences that I’m seeing and will make it much more widely useful in the long run then other systems I have looked at.

@AlienChrysalis

The whole goal for me, when I originally wanted to start working on this, was the fact that I needed a way to do generic Online based operations, like saving to a database and doing server to server communications for my own project “AmalynOnline” however as time went on, and as I realized that I don’t have the necessary skills to make the content at the quality level I was looking for. I then decided I wanted to make a more ‘effortless’ game, joined a few teams and when those failed to produce results, I kept coming back to my game, but after some time i decided that maybe it’s not the game I want to create, but the tool. I think this plugin will help serve alot of people that may know how to make online games, but not have the technical expertise to realize their vision.

I’m trying to make this plugin as generic as possible, with all the game type modules to be extendable as much as possible, cause frankly I cannot know every variation of every genre of game, but I can provide the generic base model of a game that every game in a specific genre provides.

I was just thinking of doing a “component” approach to a RPG style game, did a quick search on the forums to see if someone already used that approach and found your post.

This looks promising.

Super interested in this :slight_smile:

Well isn’t this is a grand adventure to undertake alone.
When I get some free time I’ll see what I can help contribute :smiley:

Added the Skype Conversation to the first post.

Join us on Skype @ https://join.skype.com/rQDJ1rIsM3nJ

haven’t a clue on how/where to use this but it looks interesting and deservers a bit of support :slight_smile:

i’m a fps type of guy so not sure where i would start with this but i’ll keep watching if there’s something small that i could help with let me know

I have been trying to link websocketpp into unreal for so long, is there any way I can just use the websocketpp client stuff in my own code without using all of the other framework stuff you made? Because all I really want is to be able to send and receive JSON strings via websockets to the URI I specify. Also one quick question: does this limit the project to windows or will this plugin work on the ARM (Android) platform as well?

@Geodav

Thanks for the support. I will be trying to write up some ‘Getting Started’ documentation or videos this weekend.

@MaxFights

All the different modules will have different requirements, Websockets at least the client portion will be available for all supported platforms. The server variants will only be available to Windows / Linux / Mac. So basically you won’t be able to create UWebsocketServer on ‘non’ server platforms.

The entire code base for this project is marked as BSD 2 clause, meaning you can use it in any type of project, I’m also trying to split out as many of the projects as possible, so that you can use them as stand alone if you want.

I hope this helps

Very interesting and very ambitious.

I’ll be watching your progress.

I would totally use this in the future and will help support/contribute as best as possible :slight_smile: