8Dromeda Twitter Disable Tracking

8Dromeda Blog

[All Posts] [<< >>] [2013-02-02]

Project Soilnar

I started writing Soilnar at the end of the summer of 2012. I don't even remember how I ended up doing that, but for some reason I did, and I now have some 25k lines of C++/Javascript code that basically works, and a few notebook pages full of design to go with it.

Basically the idea is to make a 2D top-down massively multiplayer open world space mining RPG, but with not really that much space in it at all. And to do that with somewhat crazy tech.

Soilnar (name is still subject to change) is about a moon, or a planet, in a desolate corner of space, rich of useful minerals, on which the futuristic society has founded one of their next large mining operations. The player controls a private enterpreneur who has moved there to make a living by mining, trading and fighting. There are friendly and unfriendly places, NPCs and other players.


The basic gameplay would go as so: There are two views: the "overworld" view, and the "site" view. Sites can be mining sites, trading sites, rocket launch stations or any kinds of special events like a destructed alien city with interesting loot. Travel between sites consumes a kind of fuel, which makes location-efficiency of operations a priority. On sites, the player controls his mining vessel ("ship"). Different kinds of ships can be bought, and all ships support a number of add-on components.

Eve Online is a notable inspiration to me. Soilnar will employ a system of corporations similar to Eve, but in a reasonably simpler form to suit the current scale of the game. My goal is to have enough of NPC stuff going on for it to make sense to play as a sole player on the whole server, and allow the game to scale in a player-driven direction at times when the player count permits. Basically I am talking about a game that makes almost equally much sense for 1 player, as 1000 players. Which brings me to the technology.


Soilnar is constructed on an entity-component system, where entities are literally nothing, and components are literally everything. An entity is an unique id, which is not stored anywhere by itself; rather it is used solely as a reference to the components of the entity. This works out as system[uid] = component and [system[uid] for system in systems] = entity.

Initially I wrote Soilnar in node.js. I was expecting it to be slower than I'd prefer... but it turned out to be *very* slow. It could barely support like three players in a mostly dead world on a Pentium 4. Optimizing was clearly not an option - there were not that much gains to be gained. As the heavy E-C model simply wasn't going to perform well in Javascript, my next option was C++. Long story short, it took roughly a month and turned out to be a good idea, giving almost two orders of magnitude of more performance.

The client is handled by a regular web browser, using basic HTML5 stuff.

What's Next?

There are still some rough edges: Testing has shown that I absolutely need to implement some form of ranged activity events to allow making non-polling AIs - otherwise making a large active world is going to be impossible.

Much of the basic game is still missing: attaching components, basic NPCs, managing corporations, secure login. Being a spare-time project, this is going to take a good bunch of time.

Otherwise, I'm more of a programmer than an artist or other kind of a content creator, so I need to lay down plans of how game content will be done. I will focus on allowing players to build things in the world, which moves my responsibilities to more on the programming and system design side - but somebody has to make the world and the building blocks - and that somebody is me.

That's... probably enough for this time. Comments? Twitter is your friend!

- A of 8Dromeda

Previous post: First Post!Next post: Soilnar April Update

All Posts