NodeJS: Virtual Game World Framework

Started by
10 comments, last by Phuein 10 years, 1 month ago

EDIT 11.2.2014: Within the week, I will link to the live version of the project on OpenShift. Git link has been updated!

EDIT 15.2.2014: Live developers' testing version is now available! game.AssafKoss.com

EDIT 3.3.2014: The project is being updated regularly, and some developers have already shared their ideas and solutions, in private. The project's client has been severely updated, to accommodate for the client-side testing of things. It is still available at Game.AssafKoss.com.

I have been working on and off, for the past several months, on this project of mine.

The purpose of this project is to create a flexible & stable virtual game world framework, server and concept clients, so as to answer the inflexibility and common limitations contemporary games suffer.

It seems that current games, even the massive (well funded) ones, are still designed over the single-player framework of the past, without taking into account the special needs of a virtual world full of live (meat) players (heroes.) At least, it seems so to me, and so I have made clear goals that answer this need.

More details in the README.

https://github.com/phuein/NodeWorld-OpenShift

The scale of the project has become overwhelming just for me to work on. I thought I could get a good concept out there, just by myself. And although I have done much & good, I find myself stunned. The code is very orderly & clean, even at the expense of some efficiency, for the sake of readability / accessibility.

It is NodeJS. It is very modular. It is designed for modularity. Details in the README.

It has two main purposes:

1. Compatibility between all client types: Text, 2D, & 3D. The server parses between them, as best as it can.

2. Modular world modification & creation, so much so that even AI functionality can be toggled on and off, from the client, with user permissions. This is meant to replace grinding & storyless quests, with constant community made requests and events, live, without anyone needing to touch the code.

I am looking for help with this project! Anyone who would review it, and feel that they want to contribute and join in.

You can also contact me at: phuein@gmail.com

Or on skype: Phuein

Advertisement
I'm a rank hack at Javascript so I can't critique your code, but I did have some comments on the concept.

It seems to me from the basis you've put down and the description that you've actually got some gaps in your picture of how large-scale multiplayer games work. For instance, I see no evidence that this infrastructure could scale to more than a couple of dozen connected clients. Even running atop Node.JS is not sufficient to magically give you scalability.

I see nothing about how you intend to persist game state in a stable fashion, aside from some mentions of MongoDB. It occurs to me that you're inviting a lot of pain when it comes to transaction atomicity and idempotence, which are vital concepts in building distributed systems.

As a very high-level concept it sounds kind of neat, but as I'm sure you're beginning to discover, this is not something for one person to tackle on their own. You're talking about making a lot of radical changes to the way large-scale multiplayer games are traditionally built, without expressing any consideration for why games are built that way to begin with. This makes me uncertain about how successful the project can be.

For instance, you mention making a tradeoff between code cleanliness and efficiency - this is a non-starter in a scalable distributed system like you have designed. Either you need to have many truly-parallel instances of your software that can horizontally scale, or you need to squeeze your vertical scaling for all it's worth. Either way, monolithic servers and unoptimized code combine to form ouch.

Despite the ambitious scope of your ideas and your current flaws in realizing it, I think it's worth exploring, if for nothing else than as a great exercise in building robust, scalable systems.

Wielder of the Sacred Wands
[Work - ArenaNet] [Epoch Language] [Scribblings]


...without expressing any consideration for why games are built that way to begin with...

Despite the ambitious scope of your ideas and your current flaws in realizing it, I think it's worth exploring, if for nothing else than as a great exercise in building robust, scalable systems.

There is no lack of virtual game world system that are already robust and scalable. So I have no interest in achieving that. The project is currently small scale and has no need for this. huh.png

However, I did say why games are built the way they are. It is because the current trend is taking old single-player games, and making them into multi-player games. That's how they mostly feel, too. Like playing a single-player game, surrounded by lots of other single-players.

The purpose of this project is making a game that puts emphasis on player-to-player interaction in the virtual world, online. Does it have to be massive? No. It does, however, have to present players with a world that is full of unique possibilities. Unique, in the sense that the content feels alive and intricate.

By giving the users the tools to influence the world, such as toggling MOB and NPC AI's from the client, it is possible to make such a world. I have seen this work, in small scale, in other games. Wherever game dev's build the tools for the players to use, the results are interesting and fun, instead of repetitive and unoriginal.

I think it's time to make such a world framework that goes all the way, having such tools as part of its' basic structure, instead of as add-ons.

I do thank you for showing interest in this project, and hope that more people show their interests, as well. smile.png

However, I did say why games are built the way they are. It is because the current trend is taking old single-player games, and making them into multi-player games. That's how they mostly feel, too. Like playing a single-player game, surrounded by lots of other single-players.


I think your fundamental premise is utterly wrong.

What kinds of games are you talking about? Give examples. Name names. I can offer any number of multiplayer games that feel nothing like single player games, and do none of the things you're attempting.


I also feel like your approach is going to collapse under its own weight if you're already shunning the idea of operational efficiency and robustness. Even games with only 30 players in a world can suffer from badly engineered code.

Wielder of the Sacred Wands
[Work - ArenaNet] [Epoch Language] [Scribblings]


I think your fundamental premise is utterly wrong.

If you disagree with the emotion behind this project, then it is not for you. I don't appreciate having my feelings disputed, simply because you don't feel the same.

If you disagree with the logic behind this project, at its' current state, then you are welcome to become an active developer. I am not the "abstract complaint" department.

I am happy to clarify. smile.png Now...

I welcome any interested developers to contact me, or comment here, and join me in working on this, so that this unique project can reach its' intended goals. biggrin.png

I hope you are also implementing socket.io and Express.js ... kinda need them

I cannot remember the books I've read any more than the meals I have eaten; even so, they have made me.

~ Ralph Waldo Emerson

Um, his opinion has nothing to do with emotion and neither should your central premise. You stated most multiplayer games are based on taking single-player games and adding multiplayer, and he disputed that. This is not a vague, unanswerable question based on your feelings, it is provable fact one way or the other - either you are right or you are not.

If you start whining about your feelings the moment a well-respected member of a game-development community offers constructive criticism, that's a bigger problem though. You're going to have to be able to defend and explain your project without getting defensive. Asking people on a forum not to post if they don't agree with you is just silly, and using progressively bigger fonts to try and convince people is just going to annoy everyone.

If this is a serious project, present it like one.

www.simulatedmedicine.com - medical simulation software

Looking to find experienced Ogre & shader developers/artists. PM me or contact through website with a contact email address if interested.


I hope you are also implementing socket.io and Express.js ... kinda need them

I am, naturally. smile.png server.js shows this explicitly.


Um, his opinion has nothing to do with emotion and neither should your central premise.

I suspect that this argument comes down to "moderator versus random guy", so I don't expect to get a lot of fans out of this. dry.png

I do stand for my views, though. My premise is not wrong, because it is subjective. We have no scale in which we measure how single-or-multi a game is. Any person who feels that multiplayer games are not too "singleplayer" oriented, would have no personal interest in this project.

By making this project, I need not prove my bias; rather only show the differences.

This is a serious project. biggrin.png It is so, for me. Actions speak the truth; and the code is my action.

I am almost done having a more representable version running live on OpenShift, so bare with me, and notice future updates in the first post (link to first post in this thread)! cool.png

Enough with the big fonts.

Saying it in bigger writing doesn't make it more important or get you taken more seriously. It's not the etiquette on these boards and will just annoy people before they even get to read it!

www.simulatedmedicine.com - medical simulation software

Looking to find experienced Ogre & shader developers/artists. PM me or contact through website with a contact email address if interested.

Live version now available on:

game.AssafKoss.com

This is a developers-only version, not meant for actual usage, but only for testing purposes and fun. You will notice that it looks like a chat room, mostly. cool.png I use it for live testing, even though it takes a minute more, doing the 'git push' every time. I don't mind, and this way, everybody can see (and suffer) changes, as they come.

This topic is closed to new replies.

Advertisement