Red Nebula, take two
Here is a second take on the Red Nebula game concept, after lots of polishing. Please keep in mind this is the concept for the whole game, and Milestone 1 will be just a part of it. I have also made progress in the coding department, but nothing cool to show yet. The engine is slowly progressing, but I have concentrated more on game design.
Slow-paced strategic / tactical science fiction game of space exploration. Space is empty, cold and hostile, information and resources are always scarce. “Survival horror in space.”
Features
- Procedural game world: no predefined species (except for Earthlings), stars, planets…
- Emergent behavior: instead of predefined behavior, most interesting events should dynamically result from underlying mechanics
- Scenarios: exceptions to above, static content such as starting condition, story and scripted events
- Semi-realistic: or plausible sci-fi; no Star Trek -style humanoid aliens, slower-than-bullet lasers etc.
-
Exploration: information is usually very limited (and the world is a complex place), so recon and exploration are very important
-
Morale: it's important to keep the morale of the crew high
Genre
Strategy game with role-playing elements (player avatar).
World
The world is fully 3D with no borders at the edges of the world. Scale ranges from galaxies to planets and space ship fleets, with focus on the star and fleet level.
Perspective
The game is always viewed from the 3rd person in 3D.
Gameplay
Gameplay consists of scenarios and a sandbox mode, where you can play freely in the world.
Gameplay is in real-time and can be accelerated, decelerated or paused at any time.
Style
Ambience is generally really dark, with the exception of large settlements such as Earth, which are “beacons of hope”.
Graphical style is clean, dark and minimalistic.
In other news, I kinda got hooked on Eve Online. Actually I just tried the free 14-day trial because I wanted to see how the game had changed during the years. I used to be in the beta and liked it very much, but when the game was released I just lost interest for some reason. Still, it's the only MMO game I have ever liked. I have tried Horizons, World of Warcraft, Neocron and probably some others I don't even remember, but I never liked them. The style of Eve is something very unique, and I have always absolutely loved the visuals and music (though I have no doubt I will get sick of them if I play for a couple of months). Anyway, I'm now thinking of buying an account and playing for at least the month that comes with it...
Red Nebula
Christmas was nice. I finally got a new monitor (Samsung 2232BW) to replace my old CRT with a horrible picture, so that was good. Actually I didn't get it yet because I'm still at my parents', so I'll have to wait until next week when I get back to my place. This is relevant for game development because until then, I'm stuck with writing code on my laptop, which tends to go much slower than on my desktop computer. On the other hand, I've been reading a lot on various subjects, so that counts as progress too even if there aren't much concrete results.
I also bought Fundamentals of Game Design by Ernest Adams and Andrew Rollings for myself, and so far it looks good. Inspired by the book, I finally wrote a very rough concept for Red Nebula and its first milestone:
Red Nebula is a sci-fi strategy game of the 4X (eXplore, eXpand, eXploit and eXterminate) genre.
Notable features include:
- A procedurally generated, dynamic world
- Emphasis on exploration, as I feel it's an aspect of the genre that's been seriously neglected
- Try to avoid some ugly cliches of the genre, such as "Star Trek" aliens and implausible combat
Milestone 1 implements the procedurally generated world in some degree. Main gameplay content are various scenarios, such as "eight colonization fleets were sent from Earth to an unexplored star cluster, let each player control one fleet". These scenarios can vary in scale, and contain static elements in addition to the procedurally generated world. The milestone concentrates on playing as humans; no sentient alien species will be included. The exact scale and scope of this milestone haven't been decided yet, though most likely it will be on fleet level rather than individual ship level.
Now, Milestone 1 is really a full game in itself, so there will definitely be sub-milestones. After Milestone 1 is complete (or abandoned
), I will review the situation and decide if I want to continue with expanding the concept or doing something else altogether.
For now, I'm still working on getting rendering working again. I fully switched from Pygame to Pyglet as my main "platform" library, and I'm glad I did, since it's much easier to work with. Basic resource management also works again, and now I'm working on scene management and the OpenGL rendering plugin simultaneously. As soon as I get some really basic rendering working, I'm going to start working on the game, and let that fully drive development on the engine side.
Laying eggs
I've been lost on another side path for the past few days (and being lazy on purpose as part of my Christmas holiday
), but hopefully this is the last one on my main path of producing something I can actually show you, my valued readers! ...and something I can play with myself. Oh, I haven't told about my main path? My roadmap for the near future is:
- Implement resource loaders
- Get the renderer plugin working again
- Start writing scene management
- Start writing Red Nebula
To explain the first step, I probably have to explain plugins in Spineless (as it's still called, new name is pending; also see end of this post). Plugins are used to implement low-level parts of the engine which depend on an underlying library. At the moment these include the window manager (Pygame plugin implemented) and renderer (OpenGL plugin). Audio mixer, networking and physics are other examples. As such, there can only be one plugin per group loaded at a time.
Resource loading used to be based on similar plugins too. There would be eg. Pygame and PIL plugins for images. The problem was that this was mixing resource representation with loading. As such, you couldn't for example load models using both the Collada and OBJ plugins. I'm going to add a second type of plugin now, the resource loader. There can be many of these loaded at once, and any loader can be used to load resources. For some resource types, there can also be toolkit plugins, which you can only load one at a time.
And finally, about the side path. Over the course of this new engine revision, I implemented at least three different ways of loading plugins, none of which I was really happy with. This was before I had learned that setuptools can be used to discover and load plugins! After throwing some code away and writing literally a few lines of setuptools-using code, I had far more elegant plugin loading implemented. Welcome, setuptools!
I've also been thinking about a new name for the engine. It's not critical, but it's something I want changed. Unfortunately, coming up with good names is extremely difficult. I have a couple of options:
- Some derivative of Sampo, since it's from Finnish and magical
- Something related to the (code) name of my game: Red Nebula. Unfortunately the obvious choice Nebula is already taken at least a couple of times.
- Something else:
Suggestions are welcome.
Research phase
I've been doing some research and brainstorming for both the engine (still without a new name) and Red Nebula. I'm trying to design a new scene management package for the engine, including a new renderer. What's certain at this point is that it's going to be based on entities with components. Entities are more or less dumb containers for components, which describe the behaviour of the entity. Data lives in either the entity, its components, or both, depending on the exact design. Evolve Your Hierarchy is a good article on what it's about and why you should do it.
This thread on Gamedev.net has been really helpful for getting them brain juices flowing, and as I wrote there, I've got a couple of alternatives I want to think about further:
- Very similar to the misguided attempt of creating a unified scene graph for Spineless, but on a higher level, based on game entities, not low-level scene graph nodes. Entities contain just data, while subsystems (or workers as I called them) contain all the logic of how to deal with the data. There are no components per se.
- Components define only behaviour, while entities contain components and their (possibly shared) data.
- Entities are solely containers for components, while components contain both behaviour and data.
At the moment I'm mostly leaning towards the first alternative, though the other two have their advantages too, and all of them seem quite elegant to me. I'll have to think more about this first, and input is of course always welcome.
Brainstorming for Red Nebula has piqued my interest in reading sci-fi again, so I started reading Iain M. Banks' Use of Weapons. I really like his stories and writing style; they're definitely "high sci-fi" in the sense that technology is really advanced - space battles generally last only fractions of a second - and there are actions sequences and such, but they're not corny adventure stories or anything. I think the genre is called "hard sci-fi". The other sci-fi writer I really like is Philip K. Dick, though his style is completely different and not that much centered on technology.
I've also done some coding, but not much. Mostly just stubs for the new scene package and small fixes here and there. I should get resource management out of the way at some point, before starting to really work on scene management.
Design phase
First, thanks for the encouraging comments.
Even a comment or two will help me keep motivated about the projects, especially since there isn't anything concrete done yet.
Lately I've been spending some time on thinking about design, of both the engine and the game. Specifically:
New name. Now that I pulled the plug on Spineless as a public open source project, it's the perfect time for a name change. Spineless was meant to be an ironic name, but I got a lot of questions on why I chose the name, and probably lots of negative associations. Although the engine won't be public again for a while if ever, I want to make the change now.
Engine layout. Also connected with the "death" of Spineless, I'm going to restructure the engine again based on my experiences with the rewrite. It's more or less just moving things around, not really rewriting anything. I want to get the layout and especially plugin implementation right from the beginning to save major headaches down the road.
Red Nebula roadmap. I now have a rough idea on what to work on first, and what's important for the overall goal of the game. I want to get something pretty (well, at least screenshot-worthy) and interactive together as soon as possible. Unfortunately I can't get started on that yet since the renderer isn't ready, but I've been doing some research and design so I can get started as soon as the engine is sufficiently done.
Teasers! Red Nebula will be 3D, it's going to be a long project with no clearly defined "finished" state, and I'm going to develop it incrementally, with ever-increasing scope and detail. As long as I'm interested and have faith on it being fun, that is.
