Monday, 21 February 2011

The Dragon Speech

This weekend I discovered the "Dragon Speech" by Chris Crawford and found it really great. He brings up a lot of good stuff, and touches on many subjects that I have ranted about. You can watch it here:

Part 1 "The Dream Well"

Part 2 "Interactivity"
Part 3 "Genesis of Art"
Part 4 "Characters"
Part 5 "Charge!"

I am actually a bit embarrassed that I never seen this talk before. I have heard about it, but never thought much about it and thinking it was not worth any attention. Now that I have seen it, I can say that is definitely not the case and it is one of the best things I've heard/seen on games.

Which brings me to another point: This talk is almost twenty years old and yet not much have changed. The points he bring up on focus on "fun" and serving a hardcore market are all still very valid. Also, characters in games have evolved very little, in fact, apart from a few IF games like Galatea, not much has happened since Monkey Island days. It feels like his views were ignored by most people in the industry. (If anybody has sources on what kind of impact it had on other people at the time, I would be really happy to hear about it!)

I like to think that things are shaping up a bit though. For instance, players and media have started to accept that games does not have to just about "fun", but can be about other type of emotions as well. (Something I like to think the horror games of the last ten years or so as had a part in). We are also starting to see the first step at a merge between the "casual" and "hardcore" market*, with games such as Drawn, which I see as the beginning of a less specialized market. The situation is far from good, but at least there are some sources of light.

Another thing of interest is that Chris Crawford has never made a conventional games since he held this speech. Right now he seems to be involved in something called Storytron, which I have to admit I do not know much about and have never tried. Now I feel I really must give it a go though! If anyone has tried it, I would be very interested in hearing your thoughts about it.

Finally, I also recently heard that Chris will be giving a speech at GDC this year. So will definitely try to attend that (me and Jens will be going there because of IGF and all).


*I do not like the names casual and hardcore. because they compartmentalize the audience far too much and I also think it is a bad way at looking at things (either you like to shoot stuff or play simple puzzles!!!). But since I refer to a trend in the industry I thought it was kinda okay to to use them.


Friday, 18 February 2011

The Dead Island Trailer and the Future of Games

By now most of you have probably seen the teaser trailer for Dead Island. If not, you can check it out here:
http://www.gametrailers.com/video/cinematic-trailer-dead-island/710652


This trailer has been getting tons of attention over the Internet and many seem to think that it is one of the best game trailers ever. I find that this is quite interesting, since just about everything that makes the trailer good are things that modern video games lack. I would even go as far as to say that a video game made using modern gameplay-centric design could never create something that gives the same experience.

This is why I think so:


Non-coherent narrative
The video does not have follow the normal rules of making a narrative (where time flows coherently through plot events), but instead provide a disjointed one. Past and present are not explicitly stated, but is something that the viewers must figure out themselves. Game with a focus on story just do not work like this and instead go through plot points in a predetermined (although sometimes branched) fashion.

In order to get the same kind of feeling you get from the trailer in a game, stories needs to be looked upon in a different way. A story should not be seen as a string of plot points, but as a certain essence that is meant to be communicated. (See this post for further discussion on the subject).


Violence is not the focus nor the fun part.
This is something that I have talked about lots before, most recently in a discussion on Dead Space 2. When you start to focus on making sure that all gameplay is fun, then that trumps any other emotions that could have been evoking. The violence in the Dead Island trailer is not fun. It is desperate, repulsive and tragic. How can you possibly hope to evoke the feelings of a man forced to "kill" his own daughter if your aim is for it to be fun?


Hard-to-repeat moments
An important part of video games today is that they stop you from making progress unless you meet specific requirements. This is mostly in the form of some skill-based challenge (succeed or restart), but can also be in the form of navigational or puzzle-like obstacles. While of course imperative in some games, this sort of design can greatly decrease the emotional impact of events. Mainly because forcing a player to relive an event dilutes its impact and sets focus on mechanical aspects. Secondly because blocking the player from progress can make certain situations unbearable.

The trailer has both versions of this problem. For instance, the chase sequence where the child runs to the door is not something that works when repeated. Also, the event when the child falls through the window is an example of something that you do not want to replay or get stuck at. (A more in-depth discussion can be found here.)

Just so I am clear here: I do not mean that a game should try and replicate the events exactly like in the trailer. Video games are a different medium from film and needs things to be done differently. Instead what I do mean is the recreation of the essences of these events and situations; to provoke the same kind of emotions and thoughts. Not to make a direct copy.


A holistic experience
What I mean by this is that you need to see the whole thing to get the full experience. Unless you see the trailer until its end, you will not the get full meaning of the work. Mainstream games almost never work in this way, but rather focus on maximizing the entertainment value moment-to-moment. This is partly because of the goal to make games "fun" above all else. Other causes are the focus put on length of the experience as a large part of the value, and a general attitude of games as products rather than works of art (explained nicely here and here).



With the above in mind, it should come as little as a surprise that I find it highly unlikely that Dead Island will be anything near what the trailer is like (although I hope the reactions to this trailer inspire them to give it a shot and perhaps succeed!). I think there really is a desire for games that offer a different and more emotional experience, the attention this trailer got being a clear sign of that. But if we stick to the tried formula of making video games, these kind of experiences will remain beyond our reach.


Wednesday, 9 February 2011

Thoughts on Dead Space 2

Introduction
So I just finished Dead Space 2 and wanted to discuss it a bit. Mainly because it is a perfect example of some trends in game design that I find are really harmful. I also find that it has some moments that could have been brilliant if just slightly changed, making it extra interesting to discuss.

Before going into the actual critique I want to say that the game did have some enjoyable parts, especially the at times absolutely amazing scenery. Dead Space 2 just radiates production value and it is a very well-put together game. I quite liked a lot of it and it is one of the few games in recent memory that I played until the end. The game has very nice atmosphere in places and even attempts at a sort of meaningful theme(more on that later).

At the same time, it is very clear that Dead Space does not aim for any real sophistication. For instance, you need to stomp on dead mutant children to get hold of goodies and gore is quite excessive. In many ways, the game is much closer to Dead Alive (Braindead) than to something like Alien, and should probably be judged that way. However, in the following discussion I will approach the game as if the goal was to create a tense sci-fi horror game.

With that out of the way, let's get down to business.


Cheap deaths
When I started the game, I was not in the best of moods (being a bit agitated), but I did what I could, darkened the room and so on. Everything to heighten immersion. As the game started out, it began with a non-playable sequence, something which made me relax and slowly immerse myself. Once the game actually began and I gained control, my mood had changed quite a bit and I felt I was ready to be immersed and role-play. Then after just playing for 30 seconds or so, I took a wrong turn and died.

This broke all the immersion I had built up over 10 minutes or so, and I had to start all over. The intent was probably to communicate the danger to the player, but this could have been made a lot better. Why not simply hurt the protagonist, or something similar, giving in-game feedback that the player should be very careful. After I had died and gotten a loading screen, I had to build up my mood again almost from scratch.

The same thing happened at the end of game, where you need complete a sort of chase-sequence before the final cinematic. I was unsure of the controls in this sequence and died just before it was over. Just like with the death at the start, this completely spoiled my mood and removed any emotional impact the ending might have had. Instead of becoming an exciting sequence, it became an obstacle and I concentrated on the pure mechanics instead of role-playing.

Having cheap deaths during immersive/emotional events like this is just lazy design. The sequences are meant to be completed in a specific fashion anyway, so I cannot understand what can be gained by having players restart over and over until they "get it". Sure it adds some kind of excitement, but this is greatly removed on subsequent attempts anyway, not speaking of how bad this is for immersion and role-playing. And considering there are other ways to add consequences to actions, I do not think it is a valid reason. It is just falling back to old and uninspired design.


Saving Progress
Scattered across the game are save stations, all using an interface similar to 20 year old games. I do not understand why these are in, as it is the most immersion-breaking device one can think of. Having to enter a menu, and choose a slot in which to save, has no connection to the game world at all. Consoles nowadays have large hard drives (and save games can be made very small) so it cannot be a technical limitation like in older games. I am guessing it is just another case of falling back to old design patterns, and again I think it is totally unnecessary.

The way I save games in systems like this is to loop through the visible slots (usually four), always picking the oldest save game to overwrite. That way I have three older save games to go back to in case something screws up. As this is basically the system we emulate in Penumbra and Amnesia, and nobody has raised any complaints on that, I guess I am not alone in saving like this. So, if one still wants to use the save stations, my first suggestion would be to simply skip the interface and just save upon interaction. If players want to go back to certain places have a "Save Game" option in the menu or simply a chapter selection.

But why stop at that? I would have liked the game to skip saving altogether and do it automatically for me. Dead Space 2 implements resource streaming extremely well and you never feel like you travel between different maps, but roam a continuous environment. Not having any kind of visible save system would fit this design perfectly and most likely increase atmosphere.


Repetition
It seems quite clear to me that Dead Space 2 tries very hard to provide a lengthy adventure (took me 10 hours or so go through) and to do so it repeats many elements over and over. This is something that exists in just about any game, where the goal of having filling a certain length quota trumps pacing, story development and the like.

For example, I really liked the first time the protagonist is forced to crawl through a ventilation shaft, but the tenth time this was repeated it just felt old and uninspired. Instead of trying to come up with new ways to create similar moments, the first one used is just recycled. Another example is the hacking mechanic that was served as an interesting diversion the first time, but ended up being an unwanted frustration.

You rarely see this sort behavior in other media (at least the good works). It is only in games where an, at first intriguing and noteworthy, event/idea is repeated until tedium. I would much rather have a shorter game that constantly bombards me with unique and inspiring sequences.

Dead Space 2 does do this right at a few times though. For instance, one section has the protagonist hanging upside while enemies swarm from all directions. This sequence is never repeated and not even dragged out. I would have liked to see that for all parts of the game.


Looting and Shooting
I might be that I am slightly disturbed, but I find shooting limbs of monsters a great pastime. Especially with the fun and greatly varied arsenal that Dead Space 2 provides. So much did I enjoy it in fact that it is hard to focus on much else. Sure, some of the fighting can be pretty intense with enemies swarming you, but not that much different from how a game like Tetris can be. Added to this is the focus on upgrading the weapons and finding ammo/money, which further brings your mindset toward the shooting part of the game.

I have talked about how focusing on fun can be bad before, and Dead Space 2 is such a perfect example. Your main motivation to explore the environment is not to get deeper into the story or to enjoy the art, instead it is to search for goodies. Because the game constantly bombards you with items popping up and force you to pay attention to them (you will run out of ammo otherwise), this becomes the main thing occupying your mind. Everything else is simply pushed into the background, which is really a shame consider the epic set pieces and sometimes interesting background facts. In their effort to comply with "fun" gaming standards, the creators have actually let much of their hard work go to waste.

I must add that the combat was not completely un-scary though. I started out playing on normal, and at one point, my resources had almost run out, which made me much more careful and tense when I thought monsters might be near. As I was put in this state, it completely transformed how I approached the game, and I started to pay more attention to background sounds and the like. Unfortunately, as I died the combat sequences stopped being scary and instead became tedious challenges in resource management. This together with the increased urge to find hidden items, killed most of the atmosphere to me. I then change to easy difficulty and could enjoy the game more as I did not have to worry about looting or combat strategies as much.


Story
Dead Space 2 does have a story, but you will have to make an effort to find and experience it. As if the focus on combat was not enough, the actual story seems to be consciously pushed into the background. I can actually only recall one time when you had to actively confront the story (reading a note gives a clue on solving a puzzle). The rest of the story just plays out in the background and as a player you are pushed on by the urge of upgrading weapons and dismember mutants.

The game does have some interesting aspects though, for example trying to tie the entire game up with the protagonist's grief, but since it is so drawn out and overwhelmed by other elements, it does not really work. Another intriguing part of the game are some earlier sequences where you encounter people fleeing from monsters and people locked up in cells. Hearing the hammering of somebody wanting your help was quite disturbing and had they just added some kind of interaction related to this (like try to open the door) it could have been extremely effective. Instead it was just pushed into the background.

One of the story things that I did really enjoy was how a recording spoke of the material of a ceiling in an upcoming room. When entering the room your attention is directly drawn up and you could relate the recording, graphics and background story to each other in a nice way. I really wished the game had a lot more of this.


Motivation
In the first Dead Space you played the part of a silent errand boy, something that the creators tried to change in the sequel. The way they try to do this is to make the protagonist an active character and make his own decisions. However, I think this sort of backfired and in Dead Space 2 I had even less of an idea on what is going on. Several times I had to check the "mission log" in order to find out what I was up to, and to find out the reasons for this. Since the protagonist was already talking, I wished he could have done this just a little more, explaining his action and reminding me, the player, of what I was supposed to do.

This also connects to the way the story is told, and further distances the player from the events in the game. Instead of deciding for yourself what the right course of action is, you just follow the game's instructions in hope that will allow you to progress. So while in the previous game you followed the commands of in-game characters you now follow the commands game's interface. This is of course much less immersive.


End notes
Playing Dead Space 2 made me both sad and hopeful.

Sad because I feel there is so much excellent work that has gone to waste and that I keep wondering if there will ever be any change to this. For every game i play I feel that there is so much potential lost due to following old and dull game conventions.

Hopeful because while there is much I do not like, it feels that there is not that much needed to totally transform the experience. Simply removing all combat focus and making the game half as long would probably have created a much more interesting experience. The question is if that will ever happen, but now I am at least confident that it is possible.


Tuesday, 25 January 2011

Physics and Heightmaps

When I thought that all problems with heightmaps was over, I stumbled upon something sort of tricky recently. The only thing I had left for heightmaps was to add physics to them. This seemed easy to do as it was basically just a matter of sending the raw heightmap data to the physics engine (newton game dynamics) However just as I had done this I realized that this was not enough: the terrain could have many different physical properties at different places (a spot with dirt, one with rock, etc).

The thing is that in physics simulations you give a material per shape, each material having certain properties (friction, etc) and special effects (sounds, etc). The heightmap is counted as a single shape, and thus it only has a single physics material. This was something I had totally forgotten. Luckily, the physics engine supports the assigning of special properties to each point in the heightmap. Once I found the proper info, it was pretty simple to add this (see here).

Now it was just a matter of adding extra material values to the heightmap (basically just an array of single integers, the id of the physics material at each point). My initial idea was that this could be "painted" on as an extra step, and to be sure I asked Jens what he thought about it. His reaction was that this would be way too much work and wondered if it could not be auto-generated instead. We already had a physics material assigned to each render material, so the basic info was easily accessible.

However, when I started to thinking about this, I found the actual auto-generation increasingly tricky. How should we determine which of the many blended materials to set the physics properties (blending was not possible)? Also, how do I get this information, considering that the blend textures can saved as compressed textures, into a CPU buffer?

The way we chose to solve the material picking was that the top visible (meaning over a certain limit opacity) blend material always sets the physics material. This allows map creators to set priority on materials in terms of physics, by simply placing them at different places among all blend materials. For example, if a material like gravel should also have its effects shown no matter what it is blended with, then it should be placed high up in the list. While currently untested this seem pretty nice and can also be tweaked a bit (like having something else determining priority).

The generation of this data was made by rendering the blend textures to an off-screen target and then grabbing the data into normal memory. What this meant is that the GPU would decompress any packed textures for us. This also solved some other problems, like the need to resize the texture according to heightmap resolution. Once the data is grabbed from the GPU it is just a matter to loop through it, check values and write to the final buffer.

Problem was finally solved and physics properties auto-generated!


With this little post I hope to show that there often is more to a problem than what is visible at first. Also, this shows another advantage of using normal texture splatting (more info here), instead of megatextures or similar. With the auto-generation of physics, it is much easier to create and update the terrain, something extremely important when you are a small team like us.

Would be very interesting what other techniques people use (or known of) for setting up physics properties on terrain!


Thursday, 20 January 2011

Tech Feature: Undergrowth

Introduction
After a little break with updates on the rendering system, holidays and super secret stuff, I could finally get back to terrain rendering this week. This meant work on the final big part of the terrain system: Undergrowth. This is basically grass and any kind of small vegetation close to the ground.

As always, I started out doing a ton of research on the subject to at least have a chance of making proper decisions at the start. The problem with undergrowth/grass is that while I could find a lot of resources, most were quite specific, describing techniques that only worked in special cases. This is quite common when doing technical stuff for games; while there are a lot of nice information, only a very small part is usable in an actual game. This is especially true when dealing with any larger system (like terrain) and not just some localized special effect. In these cases reports from other developers are by far best, and writing these blog posts is partly a way to pay back what I have learned from other people's work.

Now on with the tech stuff!


Plant Placement Data
The first problem I was faced with was how to define where the undergrowth should be. In all of the resources I found, there was some kind of density texture used (meaning a 2D image where each pixel defines the amount of plants at that point). I did not like this idea very much though, mainly because I would be forced to have lots of textures, one for each undergrowth type, or to not allow overlapping plants (meaning the same area on the map would not be able to contain two different types of undergrowth). There are ways past this (e.g. the FrostBite engine uses sort of texture atlases), but then making it work inside the editor would be a pain, most likely demanding pre-processing and a special editor renderer. I had to do something else.

What I settled on was to use area primitives, simple geometrical shapes that defined where the undergrowth would be. The way this works is that each primitive define a 2D area were plants should be placed. It then also contains variables such as density, allowing one to place thick grass at one place, and a sparser area elsewhere.

I ended up implemented circle and convex polygons primitives for this, which during tests seem to work just fine.


Generating the Plants
The next problem was how generate the actual geometry. My first idea was to simply draw the grass for each area, but there were some problems with this. One major was that it would not look good with overlapping areas. If areas of the same density overlapped, the cross section would have twice the density of the combined area. This did not seem right to me. Also, it was problematic to get a nice distribution only using areas and I was unsure how to save the data.

Once again, the report on the FrostBite engine gave me an idea on how to approach this. They way they did this was to fill a grid a with probability values. For each grid point a random number between 0 and 1 is generated and then compared to to the one saved in the grid. If the generated number is lower than the saved, a plant is generated at that point, else not. Each plant is then offset by random amount, creating a nice uniform but random distribution of the plants!

This system fit perfect with the undergrowth areas and simplified it too. Using this approach, an undergrowth area does not need to worry about generating the actual plants, but only to generate numbers on the grid.

The final version works like this:

There is an undergrowth material for each type of plant that is used on a level. This material specifies the max density of each plant and thus determines how the grid should look. A material with a high density will have a grid with many points and one with a low density will have few grid points. Each point (not all of course, some culling is used) on the grid is checked against a area primitive and a value is calculated. This is then repeated for each area, adding contributions from all areas that cover the same grid point.

This solves the problem of overlapping areas, as the density can never become larger than max defined by the grid. It allows makes it possible to have negative areas, that reduce the amount of undergrowth in a certain place. This way, the two simple area primitives I have implemented can be used for just about any kind of undergrowth layout.


Cache system
Now it is time to discuss how to generate the actual plants. A way to do this is to just generate the geometry for the entire map, but that would take up way too much memory and be quite slow. Instead, I use a cache system that only generate grass close to the camera (this is also how FrostBite does it).

The engine divides the entire terrain into a grid of quads, and then generates cache data for each quad that is close enough to the camera. For each quad, it is checked what areas intersect with it, and layers are made for each undergrowth material that it contain. Then for each layer, plants are generated based on the method described above. The undergrowth material also contains texture and model data as well as a bunch of other properties. For example, the size can be randomized and different parts of the texture used, all to add some variety to the patch of undergrowth. Finally plant is also offset in height according to the heightmap.

This cache generation took quite some work to get good enough. I had problems with the game stuttering as you traveled through a level, and had to do various tricks to make it faster. I also made sure that no more than one patch is generated at each frame (unless the camera is teleported or similar).


Rendering
Once the cache system was in place, rendering the plants were not that much of a problem. Each generated patch comes with the grass in world coordinates, so it is as simple as it can get. The only fancy stuff happening is that grass in the distance is dissolved. This means that the grass does not end with a sharp border, but smoothly fades out.


In the above image you can see how the grass dissolves at distance. Here it looks pretty crappy, but with proper art, it is meant that grass and ground texture should match, thus making the transition pretty much unnoticeable.

Another thing worth mentioning, is that the normal for each grass model is the same as the ground. This gives a nice look to many plants, but an individual plant gets quite crappy shading. Undergrowth is meant to be small and not seen close-up though, so I think this should work out fine. Also, when making grass earlier (during development Amnesia), normal normals (ha...) were used and the result was quite bad (sharp shading, etc).


Animation
Static grass is boring, so of course some kind of animation is needed. What I wanted was two different kinds of animation: A global wind animation (unique for each material) and also local animation due to events in a limited area (someone walking through grass, wind from a helicopter, etc).

My first idea was to do all of these on the cpu, meaning that I would need to resend all the geometry to the graphics card each frame. This would allow me to use all kinds of fanciness for animation (like my dear noise and fractals) and would easily allow for lots of local disturbances.

However, I did some thinking and decided that this would be a bad idea. Not only does the sending of data to the graphics card take up time, but there might be some pretty heavy calculations needed (like rotating normals) for a lot plants, so the cpu burden would be very heavy. Instead I chose to do everything on the GPU.

Implementing the global wind animation was quite simple; i was just a matter of sending a few new variables to the grass shader. But it was a bit harder to come up with the actual algorithm. Perhaps I did not look hard enough, but I could find very little help on this area, so I had to do a lot of experimenting instead. The idea was to get something that was fast (i.e. no stuff like Perlin noise allowed) and yet have a natural random feel to it. What I ended up with was this:

add_x = vec3(7.0, 3.0, 1.0) * VertexPos.z * wind_freq + vec3(13.0, 17.0, 103.0);
offset.x = dot( vec3(sin(fT*1.13 + add_x.x), sin(fT*1.17 + add_x.y), sin(fT + add_x.y)), vec3(0.125, 0.25, 1.0) );

add_y = vec3(7.0, 3.0, 1.0) * (VertexPos..x + vOffset.x) * wind_freq + vec3(103.0, 13.0, 113.0);;
offset.y = dot( vec3(sin(fT*1.13 + add_y.x), sin(fT*1.17 + add_y.y), sin(fT + add_y.z)), vec3(0.125, 0.25, 1.0) );


This is basically a couple of fractually nested sin curves (fbm basically) that take the current vertex position as input. The important thing to note is the prime numbers such as vec3(7.0, 3.0, 1.0) without these the cycles of the sin curves overlap and the end result is a very cyclic, boring and unnatural look.

The offset generated is then applied differently depending on the height of the plant. There will be a lot of swaying at the top and none at the bottom. To do this the base y-coordinate of the plant is saved in a secondary texture coordinate and then looked up in the shader.

Now finally, the local animation. To do this entities called ForceFields are used. (Thanks Luis for the name suggestion! It made doing the boring parts so much more fun to make.) These are entities that come with a radius and a force value, and is meant to create effects on the graphics that they touch. Right now only grass is affected, but later on effects on ropes, cloth, larger plants , etc are meant to be added.

These effect of these are applied in the shader and currently I support a maximum of four ForceFields per cache patch. In the shader I either do none, a single entity or four at once. This means that if three entities affect a patch, I still render the outcome of four, but fill the last one's data with dummy (null) values. Using four is actually almost as fast as using a single. Because of how GPUs work, I can do a lot of work for all four entities in the same amount of instructions as for a single. This greatly cut down the amount of work that is needed.

Again, just like with the global wind, it was hard work to come up with a good algorithm for this. My first idea was to simply push each plant away from the center of the force field, but this looked really crappy. I then tried to add some randomness and animation to this in order to make it nicer. As inspiration, I looked at Titan Quest, which has a very nice effect when you walk through grass. After almost a days work the final algorithm look something like this:

fForce = 1 - distance(vtx_pos, force_field_pos)/force_field_radius

fAngle = T + rand_seed*6.28;
fForce *= sin(force_field_t + fAngle);

vDir = vec2(sin(fAngle), cos(fAngle));
vOffset.xz += vDir * fForce;


Rand seed is variable that is saved in the secondary texture coordinate and is generated for each plant. This helps gives more random and natural feel to it.

Here is how it all looks in action:


Note: Make sure to check in HD!

And in case you are wonder all of this is ugly, made in 10 seconds, graphics.


End notes
Now that undergrowth is finally done, it means that all basic terrain features are implemented! In case you have missed out on earlier post here is a summary:

Terrain Geometry
Fractals and Noise
Terrain Texturing

I hope this has been of use and/or interest to somebody! :)

Next up for me is some final terrain stuff (basically just some clean-up) and then I will move on to more gameplay related stuff. More on that later though...


Wednesday, 12 January 2011

Why not release a game on Steam that has been ported to Mac?

As we have released all of our games for Windows, Mac and Linux and because we also release our games on Steam, this will be a quick reflection over the lack of games available for Mac that are not on Steam.

Looking at the Steam forums you can find a thread or two every now and then that brings up the topic "why are there many well known games, that are ported to Mac, but are not on Steam??".

The reason for this can be many: Perhaps there is a contractual limit or perhaps the company that did the Mac port have their own online store and only wants to sell the game in that store.

There has also been a mention here and there about SteamPlay, the feature on Steam that gives you a game for all platforms, even if you only bought it for Windows to begin with. This means that if you have a Mac as well, you get the game for Mac for free on Steam. Or the other way around of course. This might be viewed as a negative thing, because as the company porting the game, you have a lot of potential customers that will simply get your game for free. This makes SteamPlay also a possible cause not to release the game on Steam.

Bringing me to the point of this short blog post: As a long time Mac user, gamer and as someone that worked on quite a few Mac games over the years, I feel the urge to post a little "Steam is good, SteamPlay is good and if nothing stops you from releasing the game, do it."-suggestion.

Looking at our own sales, we have about 7-8% coming from Mac users. Last I heard, the Mac portion of the PC market was less than 7-8%! We have had this sale share since the very first month our games were released on Steam for Mac, so despite all the potential "lost sales" due to SteamPlay, we have sold as many copies as the Mac market should be able to support.

Let's take Penumbra Collection as an example; when it was released on Steam for Mac, the Mac sales accounted for 20% of the total sales of Penumbra Collection that month. This for a game that is to be considered old and have been available for the Mac elsewhere for as long (almost) as the PC version has been out.

If you are a Mac porting company, take a moment to think about it and if nothing stops you from releasing it on Steam, why not maximize the potential customer base?



Psst. Of course there are other originally Windows oriented stores that have support for the Mac, such as Gamer's Gate and Direct2Drive. Not to forget the newly released (long overdue) App Store by Apple themselves.