AltDevConf is an online community-driven conference that will take place February 11-12, 2012

We aim provide free access to a comprehensive selection of game development topics taught by leading industry experts, and to create a space where bright and innovative voices can be heard.

Q: What is #AltDevBlogADay?

#AltDevBlogADay is a group of game developers and otherwise interested people (generally found on Twitter), ranging from experienced devs to students and educators to hobbyists, that want to blog more regularly. An idea inspired by iDevBlogADay.

Q: What do/can the developers post about?

Our peeps will post about anything they think might be interesting. That can vary from the extremely technical to the very high-level. It can be specific to their experience in game development, or simply a marginally related topic of interest. Basically we post what we think is interesting. And hopefully that's interesting to you too!

Q: How can I participate?

If you're a game developer (or related) and want to contribute, contact @mike_acton on twitter or email at macton@gmail.com

Also see: #readme (for Writers)

Q: Can you slow down the rate of posts? I'm having a hard time keeping up!

Nope. It's not live TV. You don't have to read it as it's written. You're welcome to read the posts at any rate you like. It's the nature of the internet that more information is generated than you could possibly consume. I suspect there are Wikipedia pages you haven't read either. ;)

Working with brands, utilizing player emotion, and other lessons in game monetization

Maximize Your Virtual Goods Revenue was a killer event with over 150 attendees!

Last week, our SF Game Monetization meetup group hosted its second speaker event, Maximize Your Virtual Goods Revenue. We had over 150 people attend to socialize and watch three awesome speakers share what they’ve learned about game monetization. Check out each speaker’s presentation below.

Read more on Working with brands, utilizing player emotion, and other lessons in game monetization…

That’s Not Normal–the Performance of Odd Floats

Denormals, NaNs, and infinities round out the set of standard floating-point values, and these important values can sometimes cause performance problems. The good news is, it’s getting better, and there are diagnostics you can use to watch for problems.

In this post I briefly explain what these special numbers are, why they exist, and what to watch out for.

Read more on That’s Not Normal–the Performance of Odd Floats…

Playing (with) Video

So you want to play some video? Shouldn’t be too hard, right? Just download some video playing library and call the play_video() function. Easy-peasy-lemon-squeezy.

Well, you have to make sure that the video is encoded correctly, that the library works on all platforms and plays nice with your memory, file, sound and streaming abstractions, and that the audio and video doesn’t desynchronize, which for some inexplicable reason seems to be a huge problem.

Read more on Playing (with) Video…

The devolution of gaming culture

Gaming culture has a problem and that problem has a lot to do with gamers themselves.  To be clear, I’m not talking about all gamers but rather a subset of gamers whose antisocial behaviour and habits drive people away from gaming.  Analysts at Piper Jaffray recently conducted a survey that found nearly 66% of high school students surveyed across the US claimed they were losing interest in traditional videogames with slightly over 66% stating they were interested in social, mobile games which was an increase from 34% who answered the same question the year prior.  Gaming as we know it is changing for a variety of reasons and one of those reasons is gamers have chosen to turn on each other as well as the people who make the videogames they play.  While gaming culture tries to evolve and leave the primordial seas, certain gamers are busy running along the shore with sharpened sticks trying to force us all back in.

Read more on The devolution of gaming culture…

Channel API

I’m sure you’ve heard of Google App Engine – it’s a web hosting service that allows you to write server software in Java, Python or Go. Overall I think it’s a great piece of technology that helped me understand the concept of writing scalable services, it was also a useful reason to finally learn Python. Anyway I’m currently interested in the suitability of it for realtime applications like games.

Read more on Channel API…

SQL Server: High performance inserts

In order to write high performance SQL code, we need to know more about what’s going on underneath the hood. We won’t need to go into exhaustive details on SQL Server’s internals, but we’ll go in depth into a simple challenge and show you how you can create robust scalability one feature at a time.

Read more on SQL Server: High performance inserts…

Embrace Freemium

Like it or not, the freemium gaming model (i.e. games are free and the money is made via in-app purchases) appears to be here to stay. I’ve seen a lot of concern voiced recently that freemium content is driving down the quality of games, but I don’t believe that’s necessarily true. There are problems that need addressing – but let’s not throw the baby out with the bathwater.

Read more on Embrace Freemium…

Why I went back into the studio……

I LOVE working in the studio, I really do. I love the freedom it affords me. I love trying to create games that I want to play!

I also really love having a cerabal cortex, so I left the studio life and learned biz magic.

Read more on Why I went back into the studio………

Four reasons we’re not as good as we could be


The lizard brain is not merely a concept. It’s real, and it’s living on the top of your spine, fighting for your survival. But, of course, survival and success are not the same thing. The lizard brain is the reason you’re afraid, the reason you don’t do all the art you can, the reason you don’t ship when you can. The lizard brain is the source of the resistance.”
Seth Godin, Linchpin: Are You Indispensable?

Read more on Four reasons we’re not as good as we could be…

C/C++ Low Level Curriculum Part 8: looking at optimised assembly

It’s that time again where I have managed to find a few spare hours to squoze out an article for the Low Level Curriculum. This is the 8th post in this series, which is not in any way significant except that I like the number 8. As well as being a power of two, it is also the maximum number of unarmed people who can simultaneously get close enough to attack you (according to a martial arts book I once read).

This post covers how to set up Visual Studio to allow you to easily look at the optimised assembly code generated for simple code snippets like the ones we deal with in this series. If you wonder why I feel this is worth a post of its own here’s the reason – optimising compilers are good, and given code with constants as input and no external output (like the snippets I give as examples in this series) the compiler will generally optimise the code away to nothing – which I find makes it pretty hard to look at. This should prove immensely useful, both to refer back to, and for your own experimentation.

Read more on C/C++ Low Level Curriculum Part 8: looking at optimised assembly…

Maximum Creativity: Open & Closed Mode

A video recently cycled through my friends’ social circles which I wanted to share. John Cleese talks about Creativity and Open and Closed thinking modes.

The TL;DR of John Cleese’s talk

Closed Mode
Purposeful Highly Productive, but not creative. Good for getting things done. Default Mode at Work.
Open Mode
Playful, Curious, Fun, Humorous, Relaxed, Contemplative without goals.

Read more on Maximum Creativity: Open & Closed Mode…

Xperf Wait Analysis–Finding Idle Time

The Windows Performance Toolkit, also known as xperf, is a powerful (and free!) system-wide Windows profiler. In the past I’ve talked about using xperf to identify slowdowns in PowerPoint by using xperf’s built-in sampling profiler, but that actually understates the true value of Xperf. While I think xperf is a better sampling profiler than most of the alternatives (higher frequency, lower overhead, kernel and user mode), xperf is really at its best when it reveals information that other profilers cannot measure at all.

In short, lots of profilers can tell you what your program is doing, but few profilers are excellent at telling you why your program is doing nothing.

Read more on Xperf Wait Analysis–Finding Idle Time…

Embracing Dynamism

Are you stuck in static thinking? Do you see your program as a fixed collection of classes and functions with unchanging behavior.

While that view is mostly true for old school languages such as C++ and Java, the game is different for dynamic languages: Lua, JavaScript, Python, etc. That can be easy to forget if you spend most of your time in the static world, so in this article I’m going to show some of the tricks you can apply when everything is fluid and malleable.

Read more on Embracing Dynamism…

Generating Uniformly Distributed Points on Sphere

Recently, while I was working on a screen-space shader effect, I had to do some random sampling over the surface of a sphere. An effective sampling requires a uniform distribution of samples. After a quick googling, I found out a way to generate uniformly distributed samples([1]), and it showed a decent result for my application. But, still unsure if that was an ideal way, I performed a due research about it later. Following is the result of that short research.

Read more on Generating Uniformly Distributed Points on Sphere…

SQL Server Performance: Part 1

I first began working with SQL (the SQL-92 dialect) in 1995.  At the time I’d only ever used raw disk IO for storage; and SQL was a complete shock.  Every bit of data I needed could be stored using a single API, and the database server took care of all the hard work. In 1997 I switched to Microsoft SQL Server 6.5, and it quickly became my preferred database.  Not everyone in the gaming world uses SQL, but if you do, here are some performance tuning lessons I’ve learned along the way.

Read more on SQL Server Performance: Part 1…

Software Rasterizer Part 2

Introduction

Continue with the previous post, after filling the triangle with scan line or half-space algorithm, we also need to interpolate the vertex attributes across the triangle so that we can have texture coordinates or depth on every pixel. However we cannot directly interpolate those attributes in screen space because projection transform after perspective division is not an affine transformation (i.e. after transformation, the mid-point of the line segment is no longer the mid-point), this will result in some distortion and this artifact is even more noticeable when the triangle is large:

Read more on Software Rasterizer Part 2…

Once Upon a Time…

I have a theory: everyone has or will have, at some point, an idea for a story they want to write. Or tell. And I don’t mean a real life story, but a story that is a creation of one’s imagination. Now it might be a passing thought… Maybe it’s a person, a news report, a real life event, a book, or a game that suddenly triggers an idea for a story. The process of turning that idea into something complete and finished is a whole other…well, story.

Read more on Once Upon a Time……

The Difficulties of an Infinite Video Game World

The Premise

Procedural Generation is definitely in vogue, and I personally have believed that it is the way forward in video gaming for many years now. Using procedural generation in games is nothing new of course, as fans of games such as Elite or The Sentinel will know that we’ve been seeing it in games for a good 25 years.

Read more on The Difficulties of an Infinite Video Game World…

Functional Programming in C++

Probably everyone reading this has heard “functional programming” put forth as something that is supposed to bring benefits to software development, or even heard it touted as a silver bullet.  However, a trip to Wikipedia for some more information can be initially off-putting, with early references to lambda calculus and formal systems.  It isn’t immediately clear what that has to do with writing better software.

Read more on Functional Programming in C++…

Kevin Bacon in Video Gaming

UPDATE: This game has a campaign on KickStarter if you’re interested in helping out! Please check it out by clicking here.

 

The Premise

My project team have the distinct honor of listing actor Kevin Bacon in the ‘Special Thanks’ portion of our credits, but I doubt he has any idea that he’s in there. The fact is, he’s had a very large – albeit unknown – influence on the game’s development.

Read more on Kevin Bacon in Video Gaming…

Inheriting Velocity in Ragdolls

After a slew of abstract articles about C++ and code structuring I’d like to get back to some more meaty game engine stuff. So today I’ll talk about ragdolls. In particular, how to preserve the momentum of animated objects, so that when you switch over to the ragdoll it continues to stumble forward in the same direction that the animation was moving, before crashing to a gruesome death.

Read more on Inheriting Velocity in Ragdolls…

Exceptional Floating Point

Floating-point math has an answer for everything, but sometimes that’s not what you want. Sometimes instead of getting an answer to the question sqrt(-1.0) (it’s NaN) it’s better to know that your software is asking imaginary questions.

The IEEE standard for floating-point math defines five exceptions that shall be signaled when certain conditions are detected. Normally the flags for these exceptions are raised (set), a default result is delivered, and execution continues. This default behavior is often desirable, especially in a shipping game, but during development it can be useful to halt when an exception is signaled.

Halting on exceptions can be like adding an assert to every floating-point operation in your program, and can therefore be a great way to improve code reliability, and find mysterious behavior at its root cause.

Read more on Exceptional Floating Point…

Pushing the Button More Carefully

Hi all, first post on here, but it’s a topic that I feel particularly strongly about and I decided I would share my thoughts. Please keep in mind that all views expressed here are purely my opinion and I in no way intend any offense.

Read more on Pushing the Button More Carefully…

Localization Notes

In a few days I am going to jump on a plane and move to a new country, this time I am off to Seattle. With this pending adventure it got me thinking about some of the wonderful fun I have had localizing games for foreign markets and I thought some of my notes might make an interesting post for anyone thinking of doing localization.

Read more on Localization Notes…

#AltDevPanel April Update #1

Two recent #AltDevPanel discussions:

Why is the #ME3 ending like Javascript in the browser?

With @ArchAzrael and @mike_acton
Check out what Double Cluepon is doing. I’m a big fan of their open development model.

Read more on #AltDevPanel April Update #1…

Unlocking our potential

In my last article I looked at how content driven games are made, concluding that any sense of control over the story is, ultimately, an illusion. With this article I aim to open the door and look beyond our current limitations and ask instead: is it possible to make a content driven game that isn’t constrained by its creator, but instead crafted by the player?

(Mini warning: this post turned from a simple idea to a fairly epic 2500 words.  Get a cuppa and a chocolate biscuit before attempting to read.)
Read more on Unlocking our potential…

Lessons Learned from Training Interns

Back in 2007, I received a referral from a friend. He knew a student at UCSD who was eager to get some practical programming experience; and I rather enjoyed the idea of helping to launch a promising candidate’s career.

Well, frankly, I wasn’t any good at it at first. But through a bit of luck and a bit of perseverance, over the past few years I’ve trained and graduated a dozen interns, many of whom joined my software development team as positions opened up. It’s been an incredible experience, and I’ve been grateful to all of them for the opportunity to see them grow in talent and ability.

Read more on Lessons Learned from Training Interns…

Game Engines for Indies

There’s a lot of choices when it comes to development tools for indie developers.  As a new developer, we put a lot of thought into which commercial game engine we would license and choose to focus on going forward.  There are a number of engines available that could appeal to indie developers and I thought I’d take a look at some of the top engines out there and offer my opinion based on the research I conducted.  Itzy Interactive formed with mobile game development in mind and multiplatform development was important to us as we set out to start our business.  We were looking for a “complete package” solution.  Bear in mind, I haven’t had the opportunity to work on all the engines mentioned so some of my points are based off the opinions of other developers and fans on various forums and there are certainly other engines available depending on the type of work you’re attempting.

Read more on Game Engines for Indies…

Software Rasterizer Part 1

Introduction
Software rasterizer can be used for occlusion culling, some games such as Killzone 3 use this to cull objects.  So I decided to write one by myself. The steps are first to transform vertices to homogenous coordinates, clip the triangles to the viewport and then fill the triangles with interpolated parameters.  Note that the clipping process should be done in homogenous coordinates before the perspective division, otherwise lots of the extra work are need to clip the triangles properly and this post will explain why clipping should be done before the perspective division.

Read more on Software Rasterizer Part 1…

Technical Sound Design: An Interview with Damian Kastbauer

I caught up with Damian Kastbauer, technical sound designer, in the sticky jungles of the Congo last week. He was questing for the fabled paisley hippopotamus. Legend says that when the paisley hippopotamus is kissed upon its patterned lips, the kisser is granted a treasure of immense value.

Read more on Technical Sound Design: An Interview with Damian Kastbauer…