jeudi 29 janvier 2015

Elite Dangerous and other space games

Elite Dangerous and other space games..

Edit: this article was written in end 2014. We're almost a year later, so keep the context in the mind. As of today, Star Citizen has clearly fixed all of their technical hurdles ( which had me worried if you read this article ) and one of my main concerns, the "disjointed" feeling of their modules, has been addressed. What they've shown at the latest Gamescon/Citizencon with their PU is totally seamless and very immersive. I think they're on track to delivering a very impressive experience.

As for Elite: Dangerous, I was worried about the lack of content. That was true a year ago when I wrote the article and the game was barely released, but since then they added a lot more content, patches, and a new extension ( Horizons ) is on its way. It obviously doesn't apply anymore. There's no way I wouldn't like a game with seamless planetary transitions ( hehe that's what we're doing too after all ), and I must admit their vehicle physics is simply amazing.

--

Writing an article about other space games is a tricky exercise. Especially when you're an indy developer with an history such as ours, labelled as vaporware by many. What is the limit between honest feedback as a gamer and criticism as a fellow developer ? I'm pretty sure a lot of people are going to flag this article as arrogance or negative criticism, when in reality I just want to share my thoughts about what other space games have been doing / heading to.

The first thing I want to say is that I'm not afraid of "competition". I think more competition is a good thing. If you're reading this blog, you probably like space games. You're probably hungry for good space games too. I know, I've been starved for them for more than a decade. More games means a larger player base, so I can't help as seeing this as a good thing. And that's the reason why I've backed up Elite Dangerous ( I'll abbreviate it as E:D from now on ) or Star Citizen ( SC ) 's Kickstarter campaigns when they happened. As a developer, I try to support all space games, especially indies.

As you guessed, this article is going to be about other space games. Do I consider them good ( or if in development, heading in the good direction ) ? Bad ? Average ? Would I play them for hundreds of hours ? I should start with a disclaimer: I'm pretty busy and I can't play every game thoroughly, especially when they're still in development. I usually periodically check their status, spend a couple hours left & right to see how things evolve. So I'm not an expert or even an advanced player on any of those games. If anything I say is a blatant mistake, feel free to correct me by leaving a comment.

Let's start with No Man's Sky. As a PS4 exclusive ( for the time being ) I haven't actually played it which means that my impressions are only based on what I've seen on the press / sites. It has an original concept, mostly based on exploration. A huge procedural galaxy, where have I heard of that already ? And tons of life forms. That sounds interesting. Or not. If it's like Spore the danger is that it might turn out to be very repetitive / boring very fast. In addition I dislike the cartoony graphical style. Technically they seem to have implemented a seamless planetary engine but the planets seem rather small, a bit toy-ish like in Spore. Another problem I have with that game is the lack of a clear vision ( and that might be my fault entirely ). I get the exploration part but where will players cooperation, space combat and battles fit into all of that ? I do not know. So if I had to use one word to describe my feelings about NMS, it would be: curiosity ( no, not the rover, tsss ). But no excitement. In the end I think the concepts are good but the implementation will make or break that game, it could turn out to be a little gem, or something easily forgettable.

Then there's the heavyweight: Star Citizen. I have the utter most respect for what Chris Roberts and his team have achieved, but what impresses me the most is how much crowd funding they've been able to raise. In a way it's almost indecent. 70 millions dollars raised.. wow. I don't think anybody would have expected such numbers ( not even them ) when they started their Kickstarter back in 2012. Their business model and marketing are solid but as a gamer I can't help but feel uneasy with it. I just do not understand why people are paying hundreds or thousands of dollars to buy a specific ship in addition to the game itself. Especially it is still in development and could turn out to be disappointing ( and I'm not saying it will, I'm saying people seem to take a huge risk ). CIG is only offering what players demand, so I'm not going to blame them for that. My point is that I just do not understand where the demand comes from. I never thought there would be people ready to pay that much for an in-game ship. I would understand if the game was F2P with a free access. But I do not understand why players are still okay with it as a full-priced game. And worse, I never thought that there would be that many of these people. I guess that explains why I'm a developer and not in marketing.

As for the game itself, I must admit that I am pretty confused by Star Citizen's vision. I was already confused during the campaign: were they kickstarting a solo game ( Squadron 42 ) or an MMO ? Turns out it's a bit of both. It'd be like us making a Kickstarter for Infinity: Battlescape but describing the Infinity MMO gameplay in it as a stretch goal. We decided not to do that in our own Kickstarter especially for that reason: we want things to be crystal clear about what we're Kickstarting, to avoid confusing or disappointing players that they might not get an MMO later. But considering nobody seemed to complain about this in SC's case it might be a mistake.. I wonder what would have happened if they had only reached their minimum KS tier and only produced Squadron 42. Would have players complained that they ultimately didn't get the grand vision ?

In any case, Star Citizen currently seems to be in a weird spot. To me it feels like the company has grown too big too quickly and that they do not know how to fix all their problems and how to spend all their money. Meanwhile they seem to struggle with Crytek's engine limitations, and their game prototype is made out of individual disjointed components like a Frankenstein monster. As if it was an aggregate of smaller games instead of one big coherent game. That makes me very worried for the future but there's still time to address that. All I hope is that everything will come together soon.

One thing that is for sure is that the expectations are high. Not mine: those don't count; I mean the entire space gaming community's. And in a way the crowd funding community's too due to the high amount of money raised. I have the chills every time I think of what would happen if they failed.. or if the game turned out to be just okay, not great. This is one thing if a moderate-budget game like E:D or us failed; but this is an entirely different matter if a 70M$ crowd funded game turned out to be less than stellar ( no pun intended ). It could litteraly shake the entire crowd funding world, causing a loss of trust into this method of financing. An earthquake..

There is an additional danger of raising so much money through crowd funding before the release that I would like to mention here. Not many people seem to discuss that issue but it's a very real and important one in my book. This is the danger of milking your player base too early. If everybody pre-buys the game then you risk severely reducing your revenue once the game gets out. And that has perverse effects, such as killing your motivation for making a good polished game. After all, if all your potential buyers have already bought your game early and a good release won't generate all that much more revenue, will your motivation for delivering a high quality product stay intact ?

But okay, enough worrying for now. SC is still in development and they have the budget to produce and deliver what they promised. All the cards are in their hands.

Finally, we have the challenger, the allmighty Elite: Dangerous. I can safely say that from all the upcoming games, this one was the one I was anticipating the most. It's no secret that my original vision of the Infinity: MMO was heavily inspired by Frontier Elite 2 which I played for hundreds of hours as a kid. Therefore when E:D was announced I was very excited. So what's the verdict now it's been officially released ?

Let's start with the technical aspects of the game. It looks pretty good graphically. Station interiors in particular are extremely well done; they have a lot of man-scaled details which I love, little animations everywhere, to make the areas come alive. The E:D 3D engine can also handle a lot of lights ( I believe this is a deferred lighting renderer, like we use ), so it's not unfrequent to see thousands of little lights everywhere on stations at a distance. The particle effects are well animated and of high quality and the in-cockpit effects when your ship gets damaged are very immersive.

The sound is also note-worthy. In fact, I consider it to be on the strongest point of the game. It doesn't have much music but there are a lot of ambiances and the sound effects are of high quality.. and most importantly, aren't annoying. Whether it is thrusters/propulsion or weapons it never gets old which is something I cannot say for all space games I've played..

Most art assets are pretty well done from a mid-distance but the quality falls when you move your ship too close to the surfaces. Some physical-based materials are okay but other materials are ugly. But I guess most players won't notice so it's fine. Thumbs up for the asteroid's icy materials which I particularly like.

I also want to praise the work done by Frontier on their procedural galaxy. When the game was announced I didn't think they'd go that far at recreating a realistic galaxy. There's still a lot of repetition in the planets procedural texturing, but to be honest that's bound to happen in a 400 billion stars galaxy and Infinity will be no different. However I was surprised to see how far they went at recreating more "special" objects such as black holes or volumetric nebulas, or how good some of their effects look ( such as the stars surfaces ). Not everything is perfect though, and sometimes their systems generate some pretty ugly / unrealistic planets. Overall I'm extremely impressed by the amount of effort that has gone into the galaxy model, so good job Frontier team !

While I'm speaking of the technical aspects of the game I should mention the user interface. During my first hour of game I was a bit sceptikal by the in-game menus / HUD integrated into the cockpit and navigating through the menus with the keyboard while you can still fly your ship with the mouse is a weird experience. I realized later that they most likely went with this approach due to the Occulus Rift. I have a DK1 at home and I must say the immersion factor is pretty incredible playing the game with VR ( but not too long otherwise you get nausea, thanks to flying at 360° ). Menus integrated into the cockpit consoles makes a lot of sense then, at the price of a slightly awkward first experience with mouse & keyboard when you don't have one. Still you get used to this system pretty quickly and it's more responsive and readable than in X: Rebirth which used a similar approach.

The game is a true sandbox, in the sense that there are tons of activities you can do. Bounty hunting, pirating, smuggling, trading, mining, all the good stuff is there and pretty similar to what I had in mind for our Infinity MMO. Unfortunately it's still lacking depth and variety and even the missions proposed in the various stations start to get old quickly as you're repeating them for the dozen'th time.


I think one aspect of the game that falls short of my expectations is the lack of content. E:D's development has gone relatively smoothly and short ( 2 years only ) and unfortunately it shows. The game only contains 4-5 station types ( with a couple of module variations ) and something like 15 ships to choose from. I know more are planned in the future but I'm only speaking of what's available at release time here. This means that in your first hours of gameplay you'll probably see most of the content the game has to offer. I heard there are specific systems with unique assets ( like Sol ) but those are exceptions; if you're hoping from a system to another, exploring the galaxy and trading stuff as you go, content will get old very quickly.

As far as actual gameplay goes Elite: Dangerous seems to be in a weird spot to me and this is a result of many strategical and design choices of the company. It has been marketed as a MMO but it fails to be an MMO on many levels. Instancing ensures that you have no guarantee to meet a friend or a target at a specific rendez-vous location. The game strangely lacks a lot of social features. Clan or squad support is a mere dream at the moment. There are almost no collaborative or teaming up features so even if you wanted to create a clan outside of the game and attack a specific target in a system with all your members you'd lack the in-game tools to do so. At the same time the game offers a "solo" option but make no mistake: you're still connected to an online server, so it's actually "solo online" and not "solo offline" ( and certainly no han solo, but I disgress.. ). I can't say I'm a fan of this choice as it seems to split the player base between pirates / killers ( who play online ) and carebears ( who play offline and want to remain safe and undisturbed by other players ). So E:D is an MMO but not quite so since there are no mechanisms for players to group and meet in the same place / instance or in massive battles. You're unlikely to see more than a handful of players on your screen at the same time.


So what about flight mechanisms and combat ? Another interesting ( or curious, depending on where you're coming from ) design choise is the lack of a third-party camera. I'm not quite sure about the reasons of this choice - was that for immersion too ? - But immersion only goes so far as not hindering gameplay. I'm the kind of player that likes to play in first-person cockpit mode all the time but I must admit there's been many times where I thought a lack of a third-person camera was getting annoying. Especially as you approach stations and require docking ( like on those Coriolis stations ) figuring out how to fly to the entrance of the station can be annoying. I haven't noticed any HUD indicator that told me where the entrance was, which resulted in me having to circle on a path around the station. This would be fine except that since you're in first person view, at any point in time you do not exactly know where your ship is positionned in relation to the station entrance, so you don't know if you have to continue to fly "a little bit further" or if you have to turn your ship now to face the station. Which results in having to constantly stop along the path, turn your ship to see where you're at, decide that you have to continue a bit more, turn back again and repeat the process... basically, aligning your ship to certain station's entrances is a chore and takes longer than needed. The assets can already be seen from outside on other players or inside station hangars, so I can't think of any technical reason for such a limitation..

Jumping to another star system is pretty easy in E:D and is pretty fast too. Hyperspace effects look fine to me so I do not have any major complaint about this system; but I can't say the same for the supercruise mode ( the in-star system fast navigation mode ). First of all, supercruise speed seems to be limited by the proximity of stars and planets. Conceptually this sounds fine to me and has a lore explanation, but it's balanced to be a bit on the extreme side at the moment. As a result, if you want to fly to a planet 20 AUs away and there's a star nearby your direct path, you have two choises: take the direct path and have your ship slow down a lot as it's passing by the star; or take a detour which won't slow down your ship, but that will take more time too. As you see in both cases you're wasting time for no good reason.

And there you have, in a nutshell, my main problem with E:D:  pacing. For the same reason I could never get into Eve Online because I do not want to have to stare at my screen for 30 minutes as I fly in a system or hop between dozens of systems, watching my screen doing nothing; E:D basically suffers from the same flaw: flying to a target inside the same star system can take between a couple minutes if you're lucky to 10+ minutes if you're incorrectly positionned compared to your destination. Now I realize that for some people this isn't a problem, or could even be welcome ( as a "pause" during gameplay ); but for me, it's a deal breaker. I've seen some people on forums saying that 90% of your time in E:D is spent in cruise mode, aligning to your destination and waiting to arrive, and I think it's a good summary of my experience with the game, no matter what kind of activity I chose.

Also a bit disappointing to me is how the flight systems aren't all that well integrated into each other. At first glance the game is seamless. You can go anywhere in a star system and fly there directly. But looking more closely you can see some artificial limits. For instance in cruise mode you can't go slower than 30 Km/s. Let's say you're trying to fly to a target space station; you'll never see it appear on your screen in cruise mode, even as a dot - it is simply not rendered at all -. And as you disengage your drive, you get.. teleported 10 Km away from the station. For me this was a shock. The same system is used for asteroid belts; all these act as "points of interest" in the system and you'll get teleported to them as you disengage your drive. But I guess most people haven't even noticed or care, so it's good enough to appear seamless if you don't dig under the carpet like I like to do.

What about combat, then ? Surely combat is more exciting and interesting ? Well yeah, there is certainly something to dogfights. The newtonian physics does work quite well and controlling your ship is pretty easy. But I do not understand this choice of restricting the turning speed of the yaw angle. In general I find that turning your ship ( in any direction ) is pretty slow ( I measured up to a minute to turn your ship by 360° with yaw, and from 10 to 25 seconds on other angles ). I would like to be able to turn my ship by 180° in a handful of seconds, like in dogfights in Battlestar Galactica. This was an integral part of the Infinity Combat Prototype ( ICP ) experience back in 2007, too. As it is now I found myself spending a lot of time ( that is to say the majority of my time ) during combat just trying to align my ship to my target. Which I didn't find particularly fun. And better upgraded ships, judging from videos online, do not seem to be that much more maneuverable so the game is clearly designed like that. It's weird because I do not remember the original Frontier: Elite 2 being that way.

As for "epic" battles I can't say I have experienced any. I've seen videos of capital ship fights, which seems to be "special events" happening in some systems. Those looked cool.. but seem to have no consequence on the in-game politics, which defeats the purpose of going there to try winning / losing the battle. Though I wish there would be more of that stuff everywhere in the game.

Despite all these flaws, I think E:D is a pretty neat game which does a lot of good things but is lacking in terms of content and pacing. Pacing is a bit subjective so I certainly don't expect everybody to agree with my views; but I wish there was at least more stuff to do, more varied missions and more places / special events to see. It is a great game for what it is, but it is not the ultimate space simulator I was awaiting, which I guess is a good news to us since it means we have room to try to improve and expand the formula in our own games.

mercredi 28 janvier 2015

Life of a programmer: particle systems

Life of a programmer: particle systems

Hi Everybody ! I haven't written a dev journal for a good while (oh my!), but I think it's a good opportunity to do a small review of our current status from an engine/technical standpoint, especially as we're getting closer to our Kickstarter launch.

In the past months, we've been (re)working a lot of engine modules. It's not unusual, and as you may know (or more likely, not know), the life of an engine programmer is similar to Sisyphus: always rewriting, always improving entire blocks of code. In a way, it's a never-ending process. For example, this month I've been working on our particle systems.

"But, but, but... Flavien, you already had particles in the Infinity Combat Prototype ( ICP ) back in 2007 ! Why do you need to reimplement particles now ?". Ah, see, I've finally started to learn mind reading ! Here's the thing: yes, we had an old particle system, but it was simplistic, lacking a tons of functionalities we need now, and wasn't flexible. In fact, most of it was hard-coded. Meaning that all parameters worked in a very strict, specific manner and that you couldn't modify it without touching code. Take the size of a particle: it was a simply linear interpolation between a minimum and maximum size based on the lifetime of the particle. Want a non linear interpolation ? Screwed. Want some randomness in particle sizes ? Screwed. Want the size to be a function of some other parameters ? Screwed.

So, yeah, this is just an example, but it basically explains why we've spent so much time reworking entire engine systems. Our new particle system now does a lot of things we weren't able to do previously, including:

  • lit / normal mapped particles
  • physics-based particles
  • lookup functions for particle parameters
  • various particle alignment modes
  • custom particle material shaders
  • attaching lights to particles
  • attaching particles to other scene graph entities ( like a ship )
  • instancing particle systems or emitters
Lit particles: each sphere is in fact a single quad billboard, affected by lights
The new particle system design is, in addition to all these new functionalities, immensively more powerful. I've introduced the notion of particle behaviors, where each behavior affects how a particle behaves or how some of its parameters change over time. Typical examples include:

  • newtonian physics behavior ( positions move based on velocities, velocities change by applying accelerations )
  • spawn behaviors ( spawn in a box or sphere shape, at a certain rate per second etc.. )
  • physics forces ( attraction to a point, collision with a plane/sphere, friction.. )
  • texture coordinates behaviors ( for animating particle sub textures, like packing sprites in an explosion effect )
  • color / size behaviors

It is possible to create / design a particle system once and instanciate it at different locations/orientations, and even override the behaviors/parameters. At the moment we're lacking a proper particle editor, which means that all particle systems are loaded/saved into XML files.

Is my work on particles systems finished ? Hell no. There are still a lot more behaviors that I could implement ( but we might not need them for our Kickstarter video, so it's kindda low priority at the moment ). And there's no doubt in my mind that this design might have to be partially rewritten in a couple years. When we programmers write code, we try to balance immediate needs with future flexibility, but there's only so much we can anticipate. For example, our current particle systems work entirely on the CPU. And aren't multithreaded. "But, but, but.. Flavien, how do you dare writing non-optimized code ?", I hear you ask. Well it's not that unoptimized. Every time I write a game system, I profile / benchmark it, so I can evaluate which areas need immediate optimizations and which areas would need future optimizations ( because optimizing from the go would take too much time ). In the case of particle systems our code can already handle tens of thousands of particles per frame ( at > 100 fps ) on the CPU alone. In addition, the part that we can multithread ( applying the particle behaviors ) isn't currently a bottleneck. Writing the particles data to GPU buffers is. And that cannot be easily multithreaded. Which means that even if I spent a week optimizing our current code it wouldn't go faster.

That doesn't mean particle systems can't be optimized in the future, though. As I just said it is possible to multithread the particle behaviors, which will be marginally faster. Of course marginally faster is better than not going faster at all, so it's always a gain. It's just not worth spending the time at the moment when there's still a lot of polishing / bug fixing to do. Another future optimization would be to add support for GPU particles; basically utilizing the GPU to simulate and render the particles. Unfortunately, doing this would require a tremendous amount of work and would only be limited to specific particle systems/behaviors, those that can be uplifted to the GPU. There's also the fact that we're working at spatial / galactic scales ( unlike, say, Unreal Engine 4 or Unity ) and that particle systems are supposed to render fine even at millions of kilometers away from the scene's origin. And trust me: that is not a problem to be under-estimated.

Meanwhile, Kimmo has been working on new post-processing effects. A couple weeks ago he finished lens-flares ( not via sprites though, but actual post-processing flares. Meaning that even bright emissive textures or specular highlights can generate flares ). He's now working on motion blur, which already looks pretty good, and improved anti-aliasing. He's also experimenting with temporal anti-aliasing, which is frankly one of our biggest concerns image-quality wise. It's more or less in the research phase so there's no guarantee that we we'll be able to fix all AA problems at this stage, but we still want to try because sometimes it looks really bad.

On the art side, most of the assets for our Kickstarter video are in the finalization stage. This means that the assets are modeled, UVed and textured but we're reviewing some textures, tuning the physical-based materials ( poor Andre has it rough, he's redone some textures multiple times now. I think he should write a "Life of an Artist" blog one day, heh ). Gene has been doing a lot of lighting work ( turns out that adding 3000 lights to an asset in 3ds max... takes some time.. ). More has to be done like attaching sockets to ships ( for hardpoints or thruster effects ). Jan is still busy working on curves for scene entities, cameras and particle effects. Others are working on finalizing other misc. assets. Technically, on the programming side we're seeing the light at the end of the tunnel too. What's mostly remaining are a couple of additional effects ( like refraction, for the cockpit glass effect ) and a lot of polishing and bug fixing. I want to emphasize that a bit: we need to adjust a ton of parameters left & right, and there are still a lot of bugs remaining; some of them are critical ( crashes ), some are related to visual quality ( like popping ), and some are minor but still need tuning ( like the intensity of some material colors ). We're still at least a month away from being able to record the final KS video and after that we still have a lot to do related to the new website content for Battlescape, the interviews, the KS campaign content/stretch goals, the marketing, etc..

A lot of people have been wondering how much we worked on game design for Battlescape. The answer is: a bit but it's not finalized yet. We've already had multiple meetings about it and produced a pretty long game design doc early in the process ( more than a year ago ), but since then this doc has become messy and needs major updating. For most of it the team's vision / concepts of Battlescape are pretty clear for everybody but a lot of the details are fuzzy. We don't necessarily want everything to be set in stone before the KS though; I personally believe that game design should be a very dynamic process, constantly re-iterating, experimenting with concepts and seeing what works or not. For this reason we've tackled all the concepts from a top-down approach: we've defined everything we want to have in the game in general terms, but we don't know the details yet. For example we've defined all the categories of weapons we want; and we defined a first list of weapons that we think would be interesting to implement. But we haven't defined the relative stats / power of each weapons compared to each others and we'll definitely add/remove weapons during testing. And we'll most likely delay all these details and balance decisions until after we have a first prototype done and ready to go in the hands of the players.


In my next blog I'll be speaking about Elite: Dangerous. I don't think it'll take too long to release ( maybe tomorrow ? ). As a developer it's kind of a sensitive topic since any criticism I might have on the game will necessarily be seen as arrogance / an attack on Elite's devs; but on the other hand there's been a lot of new space-based games in the past years and E:D is the first to release, so I think a lot of people might be interested in my views about that game, especially in relation to my vision of an "Infinity MMO".