Categories
Game Design Game Development Games Geek / Technical Marketing/Business

Indie Lessons from Sins of a Solar Empire Post-mortem

Gamasutra has the Sins of a Solar Empire post-mortem up. It’s always a treat to read what goes on behind the scenes at Stardock, a prominent indie developer/publisher, although I’ll admit that I was a bit confused by the writing.

A single unspoken decision made early in the Stardock / Ironclad partnership led to a host of positive results that might seem obvious in hindsight, but were not at all straight forward at the time.

Er…what was that unspoken decision? The What Went Right section lists a number of decisions, and they all sound like they were not only spoken but also written down as a formal agreement. Perhaps it was just a case of bad writing, but luckily all of the important points of the article offer some insight into the development of the game.

As for what went right, I think it can be summed up in two points.

  • Stardock and Ironclad worked together as a team rather than have a stereotypical publisher-developer relationship.
  • The game was made for the customers.

Stardock and Ironclad worked together on marketing and design. I think that the employees of Ironclad probably felt more invested in their project, especially since they did do much of the up front work on their own.

And as for the paying customer? The game was delayed to make it better. The hardware requirements were brought down to a sane level so that people other than those with the latest hardware could enjoy it. Copy protection was considered more of a hindrance to paying customers than anything else. It isn’t a game in a popular genre like MMO FPS/RTS, so making the game run on more hardware and making it easier for people to play it were really good decisions.

And it has been paying off. Hundreds of thousands of copies have sold, mostly online, in the first few weeks of release. The game is in retail stores now, so I imagine that sales have increased even more now that the game is much more easily available.

As for what went wrong, most of the issues raised deal with technical issues, such as providing lower-quality artificial intelligence or a single-player campaign due to a lack of time. One problem was a feature of the game that was removed due to the feedback coming from beta testers. I wish the post-mortem went into detail on this point. All I know is that the feature was considered “better left untouched”, but there was no information to suggest how they came to this conclusion.

Stardock wasn’t able to finish Impulse, their digital distribution platform. I’m not so sure it is a problem. Many people already have Steam, and Penny Arcade is releasing its game on Greenhouse. Not that I don’t think competition in this space is a good thing, but does everyone need their own platform?

From Stardock’s perspective, the experience on Sins of a Solar Empire cemented its commitment to ensuring that any games it publishes are developed by studios that view game design as an iterative, collaborative process where the strengths of both teams are combined.

So what can an indie game developer learn from the post-mortem?

  • Your paying customers matter more than the non-paying non-customers.

    As Stardock’s Brad Wardell said on piracy and PC gaming, people who actually buy your games don’t want to deal with the hassles of copy protection. Most of them don’t upgrade their hardware every few weeks. They also appreciate it if you put together a good game, even if it is delayed. If you focus on satisfying the customer, how can you go wrong?

  • Do it, then do it better.

    Ironclad spent a year working on prototypes to make sure that the game mechanics would work well before starting production in earnest. PopCap’s James Gwetzman also promotes prototype-heavy game development. Create a small prototype that is meant to be thrown away. It is better to learn early on that something isn’t fun or just doesn’t work than after millions of dollars and thousands of man-hours have been sunk into a project.

While Sins of a Solar Empire may be benefiting from a lack of competition from major titles, I am sure that the above two practices, focusing on the customer and iterating the game design, helped create a hit.

One side note: why isn’t there a game demo available? Or rather, why is news of it buried in the forums instead of the front page of the website? I mean, at least provide a link from the front page to let me know that it exists. The Sins of a Solar Empire demo does exist, so why not tell people who aren’t already on your forums?

[tags] post-mortem, video games, indie, game design, marketing [/tags]

Categories
Game Design Games Geek / Technical

The Golden Ratio in Video Game Music

During the Ludum Dare #11 competition, someone posted a link to Zelda Music of Golden Proportions at TheTanooki.com.

Christian is studying music theory and learned about “golden sections”, which are marked by the point in the piece corresponding to the Golden Ratio. That is, if you have two segments of a line, x and y, then y is in proportion to x as x is in proportion to x+y. I have forgotten most of what I learned about The Golden Ratio in grade school. I vaguely remember that by using it you can mathematically come up with musical harmony and visual aesthetics. Math is art sometimes.

Initially, there were many game themes I wanted to check for a significant golden section. Unfortunately, the Mario songs I checked didn’t exhibit this, but low and behold, several Zelda themes do. It seems most of the pieces that do are written as actual pieces, and not as short melodies meant to be looped over and over, and Zelda games have a lot of those. While I can’t say it’s for sure, Koji Kondo probably doesn’t incorporate the Golden Ratio consciously into his music, but the fact that Zelda music holds more of a masterpiece status compared to Mario music or other video game music likely isn’t a coincidence. Let’s look at the music from The Legend of Zelda.

The rest of the article walks you through specific music pieces from various Zelda games, and it is a fascinating read (and listen!) Still, I imagine Koji Kondo DOES incorporate the Golden Ratio consciously. I mean, Christian is learning about it in music theory, wouldn’t Kondo have learned similar lessons elsewhere?

UPDATE: ProjectPerko has a related post called Music. It seems that Craig has found a number of music pieces that happen to have golden proportions. Whether it is coincidence or not is up for debate in the comments section.

[tags] zelda, video games, music theory, music, nintendo [/tags]

Categories
Games Geek / Technical

Atari 2600 Box Covers

A friend pointed me to Fun from Yesterday, a blog post that pokes fun at the Atari 2600 and its game box art.

I started to think that maybe the titles were different in different markets. After all, Another World is known as Out of This World in the United States. Then I realized that these covers were edited, and some of them were pretty funny.

But as a fun exercise, I tried to remember the real titles for all of those games:

  • Magna Carta is Warlords
  • Aliens vs Ghosts is Defender
  • Every Sport Ever is Video Olympics
  • Gay French Mario Bros is Circus Atari
  • Buzz Aldrin Space Rainbow Tennis is Super Breakout
  • Hey Steve,- Did We Ever Decide if… is Yar’s Revenge
  • Wrong Button is Missile Command

Unfortunately, I am not familiar with what the other games are, although I could guess at a few.

Also, to the people who make disparaging comments against E.T., I still own the cartridge, and I still think it is a fun game. And it turns out, I am not alone.

[tags] atari, retro, video games [/tags]

Categories
Game Development Geek / Technical Linux Game Development

Linux Game Development: Frustrations with GLIBC_2.4 and Ubuntu

I have already written about the solution to GLIBC_2.4 dependencies. The solution is still valid, but I wanted to share this bit of frustration that made me question if it worked in Ubuntu.

This past weekend, I participated in the 48 hour game development competition known as Ludum Dare #11. You can see my submission.

I found out that my submission had a GLIBC_2.4 dependency. How embarrassing! Since I wasn’t using my laptop at the time, I used my Debian-based desktop and built the game. No dependency existed in this build, so I uploaded it. I wasn’t sure why the previous build didn’t work since the build scripts and code should all be the same.

When I used my laptop, which runs Ubuntu, I found that the binary that gets produced has the GLIBC_2.4 dependency. I can see that it has the dependency using objdump -x BINARY_NAME | grep GLIBC_2\.4. You can see it in the following output:


$ objdump -x source/ld11-minimalist.bin | grep GLIBC_2\.4
0x0d696914 0x00 10 GLIBC_2.4
00000000 F *UND* 00000046 __stack_chk_fail@@GLIBC_2.4

I double and triple checked, and I am using -fno-stack-protector in all of the right places. The build still works on my Debian system just fine. What else could be going wrong?

After spending a few hours gutting out all of the code and making it link to the bare minimum of game classes and libraries, I found that it kept requiring GLIBC_2.4, and I was getting frustrated. I compared my Ludum Dare project’s build scripts with my Killer Kittens from Katis Minor build scripts, which should be roughly the same. The only major difference was that my LD entry wasn’t using the Kyra Sprite Engine. I didn’t see anything else that was different.

Getting desperate, I added Kyra to see if it might help. It didn’t.

I learned that the .o files didn’t have the dependency, so the problem gets introduced when it is all linked together. After another hour or two, I finally saw something odd:

LIBS := -static-libgcc -L. -L${LIB_INSTALL_DIR}/lib $(shell ${LIB_INSTALL_DIR}/bin/sdl-config --libs) -lSDL_image -lSDL_mixer #-L/usr/X11R6/lib -lX11

Do you see the “-L.” right after “-static-libgcc”? What’s the purpose of it? Well, it turns out that my build scripts provide a link to the static libstdc++.a library file, so -L. allows it to link. When I remove -L., it still builds the game, but now the game depends on libstdc++.so.6. While I don’t have GLIBC_2.4 symbols, I now have CXXABI_1.3 and GLIBCXX_3.4 symbols.

I learned that when I built my Killer Kittens project on my laptop, it also has those dependencies. See, for some reason Kyra prevents it from linking to libstdc++ statically, so it has a dependency on libstdc++. On my Debian system, the dependency doesn’t exist. It builds it just fine.

When I run objdump -x BINARY_NAME I see different results depending on the system I built the game on:

My Debian Testing system:

Dynamic Section:
NEEDED libkyra.so.0
NEEDED libSDL-1.2.so.0
NEEDED libpthread.so.0
NEEDED libSDL_mixer-1.2.so.0
NEEDED libm.so.6
NEEDED libc.so.6
NEEDED ld-linux.so.2
NEEDED libengine.so.0

My Ubuntu Feisty system:

Dynamic Section:
NEEDED libkyra.so.0
NEEDED libSDL-1.2.so.0
NEEDED libpthread.so.0
NEEDED libSDL_mixer-1.2.so.0
NEEDED libstdc++.so.6
NEEDED libm.so.6
NEEDED libc.so.6
NEEDED libengine.so.0

Why is there a discrepancy? It turns out that Ubuntu and Debian differ in their implementation in terms of using stack protection when building software. Debian’s default is “Do not use stack protection.” Ubuntu’s maintainers decided that stack protection was better even if things wouldn’t be completely compatible with Debian.

In my case, since I am trying to link to the system’s libraries statically, my binary is taking in stack protection and so depends on GLIBC_2.4. If I don’t statically link to libstdc++, my binary now depends upon my system’s version of libstdc++.so. Since -fno-stack-protector is a compile-time flag, it has no effect at link time when the system’s GLIBC_2.4-depending libraries are linked in to my binary.

Essentially, Ubuntu’s decision to use stack protection by default has made it very difficult for me to create a binary compatible build for older systems on my laptop. I would like for my build to work the same across systems, but I guess until I find a better way, I will need to make sure I deploy my games from my Debian-based desktop system.

I guess this example is just one more reason why people have a tough time creating games for GNU/Linux, or at least why C++ isn’t as popular as C or Python.

For more information:

Categories
Game Development Geek / Technical Linux Game Development Marketing/Business

Linux Game Development: GLIBC_2.4 Errors Solved

Last week, I wrote about the `GLIBC_2.4′ not found errors your game might get when an application built on a new distribution is run on an older distribution, such as Debian Stable and Slackware 11.

Judging from my search logs, this problem seems to be common enough to warrant a follow-up post. I have since solved the problem and haven’t added new dependencies, and it doesn’t involve using strange, mysterious scripts or older compilers.

In my last article, I referred to a compiler flag that was supposed to use a specific C++ ABI. I found some success with it, but it would add X11 dependencies to my libraries. Ideally you would like to remove these dependencies along with the dependency on GLIBC_2.4.

The Solution

While researching this issue, I found multiple websites referring to an entirely different compiler flag. This flag disables a feature that is specific to GLIBC_2.4 and higher, and so programs would no longer depend on 2.4 if the flag was used.

I spent way too much time trying to figure out what I was doing wrong when I discovered that each of these websites spelled the compiler flag wrong!

It is NOT -fnostack-protector! It is -fno-stack-protector!

In my custom library build scripts, I have:


export CC=gcc
export CXX=g++
export CFLAGS="-fno-stack-protector"
export CXXFLAGS="-fno-stack-protector"

In my game build script, I just add -fno-stack-protector to the beginning of my CFLAGS variable in the Makefile.

The Results

When my custom libraries are built using these flags, they no longer depended on GLIBC_2.4.

Unfortunately, I saw that libSDL did have a new dependency on libvga. I fixed that issue quickly enough! When I passed parameters to the configure script for libSDL, I added “–disable-video-svga”, and the dependency no longer exists.

If you’re curious, my full configure parameters for libSDL are:


--prefix=$LIB_DIR --enable-X11-shared --disable-rpath --disable-ipod --disable-video-directfb --enable-sdl-dlopen --disable-video-svga

where LIB_DIR points to wherever my project is installing the custom libs. If you’re curious about why I have custom libraries or how I chose these parameters, I can’t recommend Troy Hepfner’s Linux Game Development series enough.

GLIBC_2.4 No More!

By using the compiler flag -fno-stack-protector for my custom libraries and my game, I remove the dependency on GLIBC_2.4, allowing my game to run on newer systems and older systems alike. So far my beta testers inform me that my game continues to run fine on newer systems, and the people with older systems are now able to play my game, too.

If you’re concerned about what -fno-stack-protector does, it removes checks that help protect against stack-smashing attacks. Ideally if everyone was using up-to-date systems with stack protection on, you wouldn’t need to worry about trying to make your game run on older systems. If you are concerned about security, you could provide two binaries, one for the older systems and one for the newer systems, and have a script dynamically determine which to use.

For more information on this issue:

[tags] linux, game development, business, programming [/tags]

Categories
Game Design Game Development Games Geek / Technical Linux Game Development Personal Development

LD#11: GBGames presents Minimalist – the final version

I did it! I finished a game for Ludum Dare #11!

You can see my final post at the Ludum Dare blog.

https://www.gbgames.com/downloads/ld11/LD11-Minimalism-GBGames.zip is a 12.4MB download.

It includes the entirety of my project’s source in a zip file (LD11-Minimalism-GBGames-source.zip) and a GNU/Linux-ready tar.gz file (ld11-minimalist-gbgames-linux-x86-r12.tar.gz).

The source is ready to be used to build a linux-x86 distributable tar.gz. I created it using my Ubuntu system. I am sure it can be made to build a Win32 version without too many changes, if any.

EDIT: mrfun was kind enough to create a Windows version of my game. You can get it at the official final version post.

I’ll write a post-mortem after I’ve had some sleep and cleaned my apartment. If I learned anything, it is that the kitchen goes to entropy during Ludum Dare.

Categories
Game Design Game Development Games Geek / Technical Linux Game Development Personal Development

LD#11: My Grandma’s Birthday Won’t Slow Me Down

But I will eat some food while I am there.

LD11 Birthday dinner

Dessert was a bit better, especially those Nutella-filled spiral thingies:

LD11 Birthday dessert

I’m back, and I have a few hours to add sound and upload a completed entry.

Happy birthday, Nana!

Categories
Game Design Game Development Games Geek / Technical Linux Game Development Personal Development

LD#11: Break for Grandma

My grandmother’s birthday is today, so I’ll be taking a bit of a break to go to her house and help everyone celebrate it.

I was thinking of bringing my laptop, but there probably wouldn’t be anywhere I could work with it, and knowing how things would go, there would likely be something spilled on it before I got back home.

So I’m cutting it down to the wire. As of this writing, there are 6 hours, 36 minutes left in the competition. All I want to do is add sound effects, and then I can submit the game. Will it take me long to add the sound effects? Will it take me long to package up my submission, source code and all? Stay tuned for my next entry, possibly titled “Blue wire or red wire? THERE’S NO TIME!”

Categories
Game Design Game Development Games Geek / Technical Linux Game Development Personal Development

LD#11: GBGames presents Minimalist

I have a main menu:

LD11 Minimalist by GBGames

And gameplay:

LD11 Minimalist by GBGames

I need sound effects, but I have made a game for Ludum Dare!

Categories
Game Design Game Development Games Geek / Technical Linux Game Development Personal Development

LD#11: New screenshot

I have gameplay now:

LD11 Minimalist screenshot

Er, you can’t tell from the screenshot, but the small square is your mouse cursor. The large square that is the same color is the goal. There are as many obstacles as the level number, so level #5 will have five obstacles.

The rectangles are obstacles you need to avoid to get to the goal. If you touch an obstacle, you go back to the beginning. They vary in size, so sometimes a single pixel can trip you up. Be careful!