Project Rebirth: Roguelite Permadeath Top-Down Dungeon Crawler MMORPG

Note: old news will be moved to the footer of the post, new news will be the header.

2016-Sept-18 Basic Movement Replication: I have successfully replicated basic movement across connected clients from my Socket.io server! You can see the results below. I learned two important things during my development that I proooobably should’ve known beforehand, but oh well, I’m learning! They are: 1, that a pawn in Unreal Engine 4 that has a Movement Component will not be able to move using that Component unless the pawn also has a Controller. I couldn’t find that specific requirement documented nor is it particularly intuitive. And 2, that, in JavaScript Objects, a variable defined as var nameHere will be private, and a variable defined as this.nameHere will be public. Both of those took me a long time to learn, but I’m just as pumped as success kid in figuring it out for myself.

http://i.imgur.com/mVsM5wV.gif

Enjoy!

[HR][/HR]
Overview

Project Rebirth is the temporary title given to my goal of developing a 2D, top-down MMORPG that implements roguelite elements such as permadeath, quick game-flow, targetless combat, and procedurally generated dungeons connected to a single overworld, as well as a quick initial progression that will allow new characters to obtain access to mid-high level content within a couple hours of combat gameplay.

Permadeath will be implemented in such a way as to prevent casual players from being overwhelmed by loss, while giving hardcore players a rules-enforced risk versus reward. For example, in Realm of the Mad God, players are rewarded by their character’s death. All characters in RotMG are given a currency called Fame, which is an accumulation of their actions within the world birth-to-death, from killing mobs, to exploring, finishing dungeons, and through equipping higher tier items that essentially activate on death. Fame acts as a potential hook, as the reward is deliberately saved until death, and can only be used by another character of the same account. This reward helps mitigate the natural discouragement one feels from losing a character. Permadeath in PH [Project Hellioneer] will use the idea of rewarding the death of a character by recording achievements earned until death, supplying the player with a currency, and giving a bonus to player’s first character to die, which is a taste of the currency each player will earn. Death itself will strip a character of both all items held and a high percentage of their overall power (potentially creating a permanent form of power progression through the lifespan of an account). The next new character of the account will take on the role of the descendant, to give a reason for this slight progression.

Combat will be both targetless and fast-paced. Players will be able to point and click to attack in any direction, as well as use their keyboard to move about the world. Combat will require players to be alert and moving. I am currently undecided whether to implement projectile weapons/abilities, as I would prefer player to have to avoid telegraphed attacks or area-denial. The abilities a character has will be based on a choice of various classes, each with their own playstyle. However, even ranged weapons may be hitscan or delayed damage, as previously stated I am unsure of projectile weapons.

Procedural generation will be implemented on both the client and server by method of seeded generation in order to prevent having to provide a large number of players with the build of an entire map piece by piece. Dungeons will follow simple rules and complexity may vary. I’ve discovered a few types of dungeon generation that I am in the process of designing in such a way as to implement both server and client-sided. The goal is to create a dungeon with both an entrance and exit room that are guaranteed a minimum degree of travel.

In terms of “quick” progression, the idea is that because of permadeath, players are not encouraged to grow close to their characters until after achieving a base power, again using the goal of mitigating negative emotions if their character dies before achieving that baseline. After they have improved their character’s ability/level to “max”, there is a slower hill to climb, and potentially limitless (with a hill that becomes gradually more steep, preventing limitless power and invulnerable characters). The goal is to provide a quick early-game so that both developers and players can focus on end-game type content. This will be the most difficult aspect of balance, as it requires difficulty that never overwhelms groups of players, and provides the potential for escape tactics if a player has found theirself in a dangerous situation where they are outclassed.

Now before I throw ideas related to monetization out there, I will preface these ideas with the fact that, this being a new project, I’m not presenting them as some sort of “when my game makes it big and I’m rolling in cash!” I am more interested in encouraging discussion on MMOs in general. In my opinion, there are five distinct ways to monetize in-game content outside of an exclusive monthly subscription fee; they are area restrictions, content restrictions, power improvements, grind mitigation, and cosmetics. Example of area restrictions include: Runescape’s monthly subscription that unlocks access to new areas, Artix Entertainment games that limit free accounts access to new areas. In terms of content restrictions, these often go hand in hand with area restrictions, such as Runescape’s unlocking skills to use such as Thievery, and and again, Artix Entertainment games that restrict free account access to certain character classes. Power improvements are often the most controversial, as they often are an excessive application of grind mitigation that give spending players (or players that spend more than some standard monthly fee) access to power beyond that of their free account counterparts. These improvements are often seen as unfair because they create an explicit inequality, which is exacerbated if the player who spends more is allowed to participate in PvP activities with players who are not spending money, or are spending less. Grind mitigation can also be controversial, and can vary any degree from buying the ability to bypass a chunk of content (such as allowing access to “end-game” content a la World of Warcraft or Star Wars: the Old Republic), to boosts in character experience gain, boosts to item drop rates, or the ability to travel more quickly than would otherwise be allowed (which begins breaching the power improvements category, as there are potential circumstances where the ability to quickly travel between two points in the world may create imbalance). Cosmetics are rather self-explanatory, but sometimes considered frustrating to the player who is unable to achieve their desired look through gameplay alone, or problematic if skins are considered by players to be a sign of progression or skill. I’m interested in hearing what everyone considers acceptable in MMOs of today!

[HR][/HR]
Structure

The server and client structure is being built with Node.js and Socket.io and Unreal Engine 4 (with a couple 3rd party plugins that facilitate a connection to my Socket.io server and allow the client to send JSON). I do realize the implications of using TCP versus UDP, but I am confident that I will be able to develop a real-time game even if I have to place more trust in the client and reduce the number of active players in one zone. I’ll be updating as I develop the actual bones of the game! I’m also considering MongoDB and using the Node.js driver to create the database. Potentially Express to serve images, but I’m not yet sure about serving graphics thorough the client, or from the server (then cached).

If I had to say what I’m most unknowledgable about currently is splitting the login server and game server so that I don’t have to worry about hackers futzing with the login server and hurting the game server in the process.

Last but not least, I understand the hesitation when mentioning “MMORPG” as a keyword in new game development. I understand the immense task and the work required, and I know that I there is a lot I don’t currently understand. There is also a lot I am willing to learn, as MMORPG development and design is absolutely my lifelong dream, and will likely always be, regardless of whatever success or failure I may encounter.

I’m also not looking for volunteers at the moment. This is explicitly a solo venture until either I can support the project with money, or am able to host some minimum measure of playable content.

[HR][/HR]
Old News

2016-Sept-13 Introduction: I apologize for the clickbaity title, but it’s the only way to convey my goal in such a short title! I’ve been hesitant to throw this opening project out into the wilderness of unfinished games and Developer’s abandoned children, but I’m beginning to feel that this is going to be the best way to get the ball rolling on my end, because if even there’s one person to disappoint, I will succeed! [Not in disappointing them, of course!] Hopefully this provides an intriguing subject for discussion, if not a launched product. Here’s a quick little image I whipped up just to have a little bit of eyeball candy (I mean, it’s not tasty candy, but it works?). The body of my opening details are below the images.

And here’s a basic character model. I understand it gets the basic details and body dimensions across, but I’ve never been one for design, so it leaves a lot to be desired from a fantasy/sci-fi viewpoint, as well as in details such as the feet and front versus backside (I’m looking at you, arms). I’d like to go for few colors but unfortunately the lack of detail really shows in the hair, so I really don’t know what specific artistic direction I’d have to go.

I would have a GIF of the basic networking I’ve completed (replicating clients as basic player objects), but I’m currently in the process of working out how I’d like to interpolate and represent character movement across clients. Currently, a player will have full control over their position (as is the case with most MMOs, the server will not be authoritative of position, but may perform checks in the case of suspicious movement).

[HR][/HR]
Questions?

Ask away!

Hey @DatapawWolf -

I have a few Questions -

  1. Do you plan on selling (or open sourcing) the MMO Backend as some sort of plugin or integration for Unreal Engine 4?
  2. How many players do you plan on having on a single server or shard?

Also my advice would be to make your game shard based. Here is why I say that. It will dramatically cut down on hosting costs and such. But it will also allow players to make their own servers and such to fit their own tastes. :slight_smile:

Edit: Login Server idea -

Got thinking about the login server - You COULD use OAUTH2 to login to the MMO but have to buy the game via a store like Itch.io, Steam, or GOG Galaxy.
The users OAUTH2 info is stored in MongoDB which then redirects them to their character information. Such as stats, Character States, location in the world, etc.

@HeadClot, certainly!

  1. Neither, actually! I’d prefer to keep all of this to myself so I can focus on the game first.

  2. I’d like to host up to 64 players in close proximity. This would be for large community-inclusive events.

I am doing research on sharding in MongoDB. Looks like the Node js driver has information on how to connect to a sharded server! Although I’m not particularly interested in providing player-run shards. I understand that that’s a potential hook for players and communities who would like to build content or lobbies of their own, but I don’t think that will be a goal of mine.

Also interesting Login server ideas. I could look into perhaps distributing a free client on Itch.io. I’m not sure how I would then verify an account. My assumption is the user would have to enter their game key on account creation, which my server would then verify by using Itch.io’s API?

Thanks for the suggestions and ideas!

2016-Sept-18 Basic Movement Replication: I have successfully replicated basic movement across connected clients from my Socket.io server! You can see the results below. I learned two important things during my development that I proooobably should’ve known beforehand, but oh well, I’m learning! They are: 1, that a pawn in Unreal Engine 4 that has a Movement Component will not be able to move using that Component unless the pawn also has a Controller. I couldn’t find that specific requirement documented nor is it particularly intuitive. And 2, that, in JavaScript Objects, a variable defined as var nameHere will be private, and a variable defined as this.nameHere will be public. Both of those took me a long time to learn, but I’m just as pumped as success kid in figuring it out for myself.

Enjoy!

Just wanted to say that a Permadeath Roguelike MMO sounds like an awesome idea, eager to give this a shot when you need some testers :wink:

Also good job on the custom replication! Curious why did choose socket.io as your networking protocol instead of UE4 replication or other options? Scalability? ease of development?

Oh hey there getnamo! Yeah the day I need testers I’ll definitely be inviting anyone interested. :smiley:

And thank you!

So, I chose Socket.IO mostly because of how simple I find programming in JavaScript to be (well, minus a few hiccups in learning differences between C++ and JS) and how quickly I am able to change server-sided routines to debug and test. I also love the plethora of modules developed by the Node.js community, and I’ve already adapted some such as the MongoDB driver and Crypto in anticipation of when I’m going to build a login server (using proper salting and hashing algorithms, of course). And to add because the game world itself will be simple in terms of geometry (grid-based layout), I feel I don’t need the complex networking provided by Epic to simulate it, and that I will be able to drive NPC elements without much trouble.

And I also feel like I’m learning so much more even at a high-level language. Writing the server separate from the client, I’ve had to learn some basic elements of networking such as queuing up movements (right now I’ve introduced what I believe is considered a 300ms fake latency so that unless the length between client updates exceeds that value, all replicated movement should be smooth, although beyond a certain latency, I still need to ensure that a client’s position is either teleported or quickly interpolated).

So yeah. Progress. :smiley:

After I’ve pushed my new (oh and godawful because I’m not an artist) sprites, I will show off the new replication and corresponding animation!