It looks like you're new here. If you want to get involved, click one of these buttons!
In this article we turn the spotlight on long-term GameDev.net member Flavien Brebion and talk to him about game development, in particular his stunningly beautiful MMO game Infinity – The Quest For Earth. You can follow Flavien’s journal here on GameDev.net for more information about Infinity and other projects.
My name is Flavien Brebion, 32. I’m French and live in Brussels, Belgium. I am an aspiring game developer, although I currently have a full-time job in a side industry (virtual reality using game techniques).
I’ve been programming games since my childhood. I started around the age of 11 on an Amstrad CPC, then later on an Atari ST, and then moved to the PC. I created various games, including a humorous point & click adventure game, an isometric single-player RPG, and even a sim-city “colonization” game. Most of those games were abandoned but still reached the “alpha” stage and were somewhat playable, although not complete. The main reason for that was mainly shift of interests (from myself or from the people I worked with).
My main and only project at the moment is Infinity – The Quest for Earth. To simplify, this is a space-sim, sandbox MMO, a bit like Eve Online, but twitch-based (no point & click, you directly control your ship). It is directly inspired from the old franchise Elite/Frontier, and one of the main “selling” points, like Elite, is its realistic universe with seamless planetary landings and a massive procedural universe.
Yes and no. When I started to hunt for a job, I decided to specialize myself in one area, graphics programming, as it was one of my main interests. Although I’m not as specialized in the other domains, I have decent-to-excellent knowledge of all critical game programming areas, including networking, databases, physics, game systems, interfaces, etc.
Through research & experimentation. I keep my skills current by researching works from other programmers, watch conferences or reports from other companies online, like the GDC or SIGGRAPH reports. I also spend quite a bit of time experimenting with new techniques myself, or discussing ideas with friends. Also, I frequently watch over advanced topics on game programming sites, such as our very own gamedev.net’s, even if I don’t post as much as I would like to.
I wouldn’t say the very latest, but I upgrade my computer regularly, normally every two years. I’m currently on an Intel Q6600, Vista, 3 GB of RAM and a Radeon HD 4890, however I will change it next year. I can’t wait to get one of those SSDs, hopefully it will drastically reduce my compilation times, especially with a large code base such as mine (nearing half a million lines of code in C++).
My previous project before Infinity was a sci-fi high-speed hovercraft racing game, codenamed “Lightspeed”. It also reached the “alpha” stage of development. One track was playable but the project died due to a lack of content and teammates going off to university (hence having no more time to dedicate to the project). I think it was pretty much at that time that I started to fully realize that relying upon others wasn’t a good idea, especially when they’re not getting paid. Meanwhile, I was working on an experimental procedural planet renderer, and decided that for my next project, I would try to do something that requires as little content as possible (ironically, I’ve never had as much content as I do now for Infinity), which screamed “procedural space game”. I also consciously avoided any type of game that required complex animations, such as characters. Not for programming reasons, but for content reasons (finding good animators is even more difficult than finding good modellers or texture artists).
At the very beginning, it just started out as an experiment. As it grew in complexity, I soon realized it was a perfect candidate for a sci-fi space sim. So for all but a few months, it has always been my intention to make a game from the code.
It’s hard to give an exact date, because while I started early (around 2004 if I remember well), I didn’t concentrate on it until it became my main focus of interest, which occurred around the end of 2005. So, more or less 5 years now. As I already have a full-time job, Infinity is developed part-time, so it goes relatively slowly (when compared to funded projects with a dedicated team).
Programming-wise, it’s still pretty much a one-man effort. A few other people have volunteered to make independent prototypes though (for example, there’s a pretty complex economy prototype that has been in the works for a year). For the rest, there’s a team of 5 other dedicated developers responsible for content development (artwork, sounds, writing). Design is more or less collective.
Finally, there’s also a contribution system. Interested parties are free to submit 3D models, textures, sounds & music . Many have become quite involved and very skilled, bordering on professional quality level. So we’ve received a pretty insane amount of contributions from hundreds of people, and even if only a fraction of those will eventually get into the final game, that’s still more content that I would have dreamed of at the beginning.
Since the core team is quite small, the work is naturally split depending on each developers competences. We all work remotely. Day-to-day communication happens through IRC and forums. Assets management is done via FTP or the website/wiki. I think the biggest issue is communication, and getting people from different time zones to stay in contact, especially when they get busy IRL for various personal reasons.
The idea simply came from looking at Elite: Frontier, and thinking, “How did they achieve such an amazing technology (a realistic universe with seamless planetary landings) on two floppy disks, 15 years ago” ? That’s how I started to investigate procedural techniques and terrain generation/rendering.
The algorithm itself is pretty straightforward, although the details require a lot of attention. It’s based on a quadtree subdivision, similar to geo-mipmapping (although at the time I wrote it, I had no idea what geo-mipmapping was). One of the key differences is that it deforms a spherical surface instead of a flat plane. It’s pretty much like a cube morphed into a sphere, then displaced by a heightmap. Of course, the real difficulty is the 1001 little problems that appear when you want a realistic seamless planet. Such as, handling of gaps between terrain patches, handling lighting, generating heightmaps, normal maps and textures procedurally, keeping a high-resolution precision to have a real-sized planet, etc.
Fairly important, but not to the point of not having to look good, artistically. Immersion is probably the most important factor. For example, Spore uses a similar technology, but the planets feel tiny/cartoonish, almost like toys. In Infinity, I wanted to have real-sized planets, that the players can explore for hours, if they so desire. The sense of scale is something that very few games have successfully achieved, and I think Infinity will be particularly impressive in that area.
No, Newtonian physics is restricted to ships and human entities. However the universe is based on modern astronomy/astrophysics knowledge, using Kepler’s stable orbits. Statistics are used to control the proportion of procedural bodies appearing in the galaxy. You will be able to find gas giants, multiple-stars systems, rings/belts of asteroids/dust, icy/barren/volcanic planets, and of course Gaian (Earth-like) planets. They’re based on real theories, so you will not find a Gaian planet outside its star’s habitable zone for example. All these bodies move in real-time, so it’s possible to attend a sunset over the mountains on an alien world.
True. I read astronomy/physics magazines regularly every month for the past 6 years. When implementing new space features I take at least a few hours to re-read old magazines, search on the web for statistics/pictures to give me a good understanding of what they are and how they should look. However, I’m not stubborn so if something doesn’t go as planned, or if we discover in beta that it just doesn’t work/isn’t interesting, I have no problem adapting to make it more interesting and fun to play. Realism and immersion, yes, but not at all costs. One typical example are Gaian planets. They’ll probably be more frequent in-game than in reality, because they’re also the most interesting type of planets that players can explore and interact with.
As you can imagine, working with a single type of unit doesn’t work. I use a hierarchical system of units. At the galactic level, light-year (LY) units are utilized. At the star system level, the kilometer is the base unit, and coordinates are represented by double-precision floating point numbers. At render time, vertices are generated as single-precision floats, but translated into camera space to minimize the loss of precision due to large numbers.
Pretty much from the beginning, after I wrote the first prototype of the seamless procedural planetary engine. A procedural sandbox universe is a very interesting challenge design-wise, and a perfect setting for a sci-fi MMO, so it was a natural choice.
A bit of both, actually. The shard design is similar to Eve Online’s, but due to latency reasons (the game is twitch based, not point & click), there will likely be at least 3 shards, in Europe, USA and Asia. For financial and practical reasons we’ll probably launch the game with a single server (Europe) and expand as needed.
Scalability and complexity of development (with various server nodes sending messages to each other, asynchronously). The server isn’t finished yet, but so far I’d say scalability is and will remain the major concern. For example, the server has to perform collision detection since the client cannot be trusted in an MMO. It’s pretty complex, since our ships have different hit zones (each thruster, each weapon, and even different hull sections). When balancing weapons, you have to take into account not only the type of weapon, the damage it does and its other effects, but also how much it will stress the server due to a high firing rate. Keeping the amount of SQL requests low and caching the data is also a concern.
Yes. It’s based on UDP, with a reliable layer for messages that need it. I use a few other external libraries like curl for HTTP requests or downloading patches.
There will be no more updates of the ICP, since maintaining it would require work that is better invested in getting the actual game out as soon as possible. The primary goal of the ICP was to test the network model, the Newtonian physics/controls, and get a feel of what the combat would be like. A secondary objective was to release something to the community to keep it motivated while waiting for the development cycle to culminate to launch. To show that there is light at the end of the tunnel, and that Infinity is not just another vapourware project.
I’m using many third-party libraries. OpenGL/DirectX for rendering, OpenIL for loading images, OpenAL for sounds, ODE for physics, TinyXML for XML files, squish for DXT compression, Curl to download files/access the web, ZLib for ZIP compression, and probably a few others that I forgot to mention.
Yes, it has been the plan all along. Unfortunately, it requires the engine to mature, especially in the domain of documentation and tools, and I prefer to spend my time on Infinity development to get an alpha out as soon as possible. But it will be done, eventually.
Moving on the game design for a game such as Infinity, how did you go about creating a story for what is essentially a huge area of play?
The size of the area of play may look huge at first, but in reality the actual area where you’ll find quests and NPCs is much smaller. It is concentrated in the populated regions, whereas the rest of the galaxy is just here as a bonus for the explorers at heart.
For the story, we started with a rough plot and began to refine it. Our goal is to create a rich and immersive universe, with complex political intrigues, tensions between various factions and sub-factions. We want to offer players all sorts of missions, some procedural, others much more advanced and context-dependant. One nice feature of a procedural universe is that you can get rid of static spawns of NPCs, so even generic missions can push you into unknown territories.
Both! The single story part is still experimental, and it’s not even written yet. However, our plan is to propose an evolving scenario similar to the one of a solo game, except that it wouldn’t be focused on a specific player. It would be split into chapters, and there would be objectives to reach, that could be accomplished by any player. Of course, it’s not mandatory to participate in the main story.
In addition, there will be tons of smaller missions, some will be pretty generic, but many will be more advanced, and may even be related to previous missions or be context-sensitive. We’re also looking at creating some PvP missions, two (or more) players could get conflicting objectives at the same time and would have to compete to win.
There are three main factions. The Centaurus Oligarchy, the Deltan Federation and the Star Fold Confederacy. They’re all human. We decided early on against introducing alien races, as they are cheesy and overdone in most games/movies, and also require dedicated content. In addition to those, there will be dozens of smaller factions and organizations, corporations of conflicting interests.
That’s a hard question, as the definition of fun is different for every player. In general, I think trying to make a game fun for everybody is the best way to ensure that it isn’t fun for anybody. So our main goal is to make it fun for ourselves and hope that many gamers will share our vision.
More specifically, there are features that we absolutely want to have in our game and that are part of our vision of what “fun” is, and will not change. For example, the twitch-based combat (you fly your own ship directly, and don’t just point & click and watch the battle). The Newtonian physics. The “Star-Wars” short-range combat with explosions and special effects. The seamless immersive and realistic universe, with planets/moons orbiting in real-time. And the freedom to explore the galaxy without being bottlenecked by jumpgates, etc.
Infinity is primarily a sandbox game, so there’s a lot to do for many kinds of players. While combat will remain an important part of the game, we don’t want to make the mistake of proposing an empty sandbox, so there will be plenty to do otherwise. Trading, prospecting, mining, developing a business/industry, transporting, crafting, exploring, etc. And of course, all the missions/quests related to the story/factions.
This is very true, but the game is designed around what we call “cores”, geographical zones of the galaxy where the human populations are located. That’s where you’ll find cities, NPCs, quests, services, social activities, etc. That’s also where the new players start. We fully expect that players will cluster around those zones. Finally, there are other game mechanics to ensure that exploration of deep space is not without danger. For example, refuelling involves ram-scooping a star or gas giant, as there is no nearby space station to refuel at.
The Unknown. Since the galaxy is procedurally generated, there’s a chance to see things that nobody else in the player base has seen (including the developers). It’s also possible to find rare ore deposits or visit strange new places. Some of those may be directly involved in the storyline, like the “quest for Earth”, whose location has been lost.
Yes, I think that will be a very important part of the game. We will provide all sorts of tools to encourage players to group and/or interact with each other. For example, ships can be equipped with various sensors/scanners that detect the presence of other ships/entities, based on the energy emissions (so stealth is also possible). Players can form corporations/organizations, share ships/stations/cities, set up their own rules/laws, join squads for missions, or for large warfare, in fleets.
Our current plan is to use a 3-tiered system. Standard navigation for low accelerations. Warping for intra-system navigation (planet to planet), up to lightspeed. And finally hyperspace jumps for inter-stellar navigation or long-range planetary jumps. We will try to balance the game so that it takes no more than a couple of minutes to jump from a star system to another.
There are also HIPs (hyperspace interstellar portals) that link the cores together. Here we are speaking of long-range interstellar navigation, which is otherwise not accessible to the ship’s jumpdrive in a single jump
Very important. It’s probable that Infinity wouldn’t have progressed to what it is today (and what it will be tomorrow) without its community. In addition to giving feedback on ideas and designs, the community is directly responsible for the majority of the content in the game, through the contributions system.
Sometimes it feels a bit overwhelming. The community has helped a lot, but the hype and the expectations are so high after all these years, that I’m concerned there could be some disappointment and frustration for some when the first version of the game is released for testing. The game cannot, and never will be perfect, and everybody has their own personal vision for the game.
There is no external investment. I’ve been saving money for a couple years to be ready for the launch of the game. My plan is to start small, maybe with a few thousand players to limit the costs, and grow over time, add new nodes to the server so that it can support more players. In that respect, I’m glad that the game hasn't become that well known outside the hardcore communities, because if it had millions waiting, I sure would have to revise my plans.
It pretty much “just happened”. We aren’t actively marketing the game yet, but if a magazine or website wants to do an interview or speak to us, they are more than welcome.
It will most likely be based on a small monthly subscription fee with an unlimited time trial. Digital download only, no box sales, no initial costs.
Microtransactions seem to be well received by casual gamers, but are frowned upon by the hardcore gamers. Infinity being a niche game relying on word-of-mouth, I think it wouldn’t be wise to go in that direction.
The alpha test should start in 2010, but will have missing features. The beta will probably be open to everybody (although limited in number of places), but I think it’s unlikely to happen before end 2010, or even 2011. As for the release… when it’s done!
Gaming - recently I’ve been playing Dragon Age and Left For Dead 2; watching TV series such as House MD & Dexter and reading – I’m a fan of Isaac Asimov.
As a disclaimer, what I’m about to say only applies to my experience of working as an indie developer with a team of volunteers over the net.
I would say that the most important thing would be to start small and to grow slowly, and to avoid reliance on others as much as possible. Ideally, as a programmer you’d have all the skills to complete the programming side by yourself, and use stock art/music that you could replace with “real” content once talented people join your project. Sometimes I see a project leader that tries to get 20-30 people as early as possible, and I can’t help but think, “this project is doomed from the start”. Finally, you have to stick to the decisions you have made in the past, even if they’re not necessarily the best ones. For example, maybe you’ll discover that the 3D engine you’ve been working with has some limitations you didn’t envision. Work around those limitations, don’t just decide one day to switch to another engine, or worse, make your own.