Categories
Game Development Geek / Technical

How Supreme Commander Handled Rendering

I found this neat exploration of the insides of Supreme Commander, the spiritual successor to one of my favorite games, Total Annihilation.

Specifically, in Supreme Commander – Graphics Study, Adrian Courrèges takes you through a tour of the rendering of a single frame of the game.

Animations show each step in the process, making it easy to see how you can go from culling a subset of the terrain to adding shadows to rendering meshes and particles to overlaying the UI.

Categories
Game Development Marketing/Business Personal Development

We’re Over Halfway Through 2015. How’s Your Scoreboard?

Did you notice that the year is half over?

That we’re in the 3rd quarter of the year, and also that the first week of it is already over?

Most people have long forgotten their New Year’s resolutions. Others have solid goals they’ve kept in front of them on a daily basis.

For some, the passage of time is terrifying. It’s a reminder of how much older we’re getting. Some people wait until the last minute to work on something important, cramming it all in at the end, and I’m sure it’s true on a larger scale as well.

For others, the passage of time is merely a constraint. They knew there would be a point in time when 2015 would be halfway over. The question was what they might accomplish by then. What would they learn? How healthy will they be? What kind of individuals will they be?

I’ve struggled with keeping an awareness of my goals in the past. I would set goals, and I would even be specific about them. I wanted to lose 20 lbs, or I wanted to earn a set amount of income from my business in a year.

And then it would be the end of the year, and I would find myself thinking about setting goals, which reminds me that I’ve already set goals.

I just forgot about them.

One problem is I didn’t make plans to accomplish those goals. A goal without an plan? It’s like saying “I’d like a million dollars” and never caring one way or another if I get it.

Even if I did make plans, they would be vague and easy to forget. No matter how detailed or lightweight a business plan is, it does you no good if you keep it in a drawer and never look at it.

Another problem is that the goals weren’t very inspiring on their own. They lacked context. Losing weight is OK, but it sounds like loss and pain. Being healthy and fit sounds exciting and inspiring. What could I do if I was fit enough to play a soccer game like I did when I was in high school? Or even better, if I could keep up with my nieces when we played together?

Making money from my business is OK, but I had no reason to expect the money. Why would people pay me? How can I even expect the rate of sales that it would require? Setting goals about the value I provide to players, on the other hand, is something that I can control. It keeps me customer-focused.

But I found that making the goal a daily part of my life was key to keeping my awareness up.

I have goals for my business. I have a few metrics I care about, and I used to have the same problem of forgetting about the goals I had set.

For instance, my higher level goals involve the number of games published and the number of new customers I find.

It doesn’t matter what number I set if I then go about my day to day ignoring them. Then if I do remember to check my status one day, I’ll find that nothing has changed.

So I made a rudimentary scoreboard out of a corkboard and some index cards.

My Scoreboard

It’s on the wall across from my desk so I can look up and always see what my goals are and how I’m doing. I have a spreadsheet on my computer with similar data, but it requires me to open it and specifically look at it. This scoreboard, however, is easy to see at all times, which keeps my mind focused.

I have a day job, so finding time to work on my business is an important consideration, which is why I have a goal for the number of hours I spend doing game development, and I have another goal for time spent doing business development. If I don’t pay attention to my time, it’s easy for me to let opportunities to work on my business slip.

But just spending time on game development isn’t an end in itself. It’s meant to lead to the bigger goals, which are marked with a crude drawing of my logo.

I want to publish a game this year, and I want to gain at least one new customer from it. Why only one customer instead of a thousand? Because that first customer will be a major accomplishment, and I will move the goal posts once I do accomplish it.

I see my blog as a key part of my marketing, and so I have content goals for it, too. In the last two quarters I ignored my blog so I could focus on game development. I figured a post a month would be decent.

But for the next quarter, I want daily posts. My reason for the massive increase, which requires me to take precious time from game development?

It’s another way to keep my goals in front of me. I’ll write about my business, about my vision, mission, and purpose, on a daily basis, which means I’m consciously putting these things in front of me.

I used to do so by making a short post on my Google+ profile, but I thought, “Why am I giving my words to Google? Why not own the content myself?”

I don’t want half of the year to pass without me realizing it and without any change in my goals. My goals aren’t mere wishes. I know they require conscious effort to accomplish, which requires me to keep them in front of me, no matter how hard it gets or how many distractions there are.

I’ll adjust my scoreboard throughout the year. Each day is geared towards the week’s accomplishments, which are geared towards the monthly goals, which are in support of my quarterly goals. If I decide my goals need tweaking, such as the number of game development hours I spend, I’ll set a new target, and I’ll make plans accordingly.

For instance, last quarter I dedicated two evenings to game development in an effort to get to 100+ hours, but I found it was difficult to keep those evenings dedicated with a lawn that needed to be mowed and various other urgencies cropping up.

So I’ve scaled back to 60 hours because I believe it is doable while also giving me a reason to stretch. My productivity is very low compared to where I want to be, and even though 60 hours in a quarter isn’t very much at all, it’s more than I have been demonstrating. Last quarter I did about 48.5 hours, and the quarter before that was 43.25 hours.

It’s hard to accomplish much with so few hours. I’m aware that some people spend hours daily on their part-time businesses. For me, 5 hours a week would actually be an improvement, so that’s what I’m aiming for these days.

But if I didn’t keep these goals in front of me, it would be easy for my actual time spent to be near 0 hours a week because I wouldn’t realize the time was passing. I wouldn’t realize that half of the year had passed without much to show for it.

Instead, I’m able to look back and see what I accomplished in the last six months.

So how’s your scoreboard? Are your goals top of mind?

Categories
Game Development Marketing/Business

Treating Indie Game Development as a Business Isn’t News, Is It?

A couple of days ago, Mike “PoV” Kasprzak announced his retirement from game development.

He will still be working on Ludum Dare and isn’t going away, but he’s no longer going to try to make games for a living.

Part of the reason is because he’s not feeling any younger and is looking to settle down. So I won’t post that potentially embarrassing picture of him eating at the Ludum Dare meetup for GDC 2011.

But part of the reason is because he’s concerned about a lack of opportunity in game development:

…my point is that it’s no longer about just making games. It’s not about games that look good, games that play well, games that have a message, games that are different, games in a popular genre or theme; No, instead it’s all about games that stand out, and games people want. You can’t advertise or market your way to success. Those things help, but only if the game itself has that potential. Almost every successful indie you know has put multiple years in to their projects. And for every indie you know, there are hundreds you don’t. It’s not practical to just make games and hope to make a living.

This news came shortly after Tale of Tales announced they were giving up on commercial games:

We really did our best with Sunset, our very best. And we failed. So that’s one thing we never need to do again. Creativity still burns wildly in our hearts but we don’t think we will be making videogames after this. And if we do, definitely not commercial ones.

There was this excellent article on Destructoid the other day claiming that game development is getting crowded.

And the problem is that just making a good game is no longer enough. The job of the modern indie developer is to make a good game & put it in front of millions of people.

And I think that means that we need to change how we think of indie game developers. From basement coders to people who understand marketing & business. After all, what we’re doing is running small businesses.

It sounds like the easy days are behind us, and it is going to take real work from now on to not only make a good game but also to do the ugly, messy things that it takes to run a business, such as marketing and sales.

But wait…hasn’t this always been the case?

I remember reading about the swelling of the supply in games on the Indie Gamer forums ten years ago. Someone was nice enough to keep track of the releases from week to week, as well as the top games, and eventually a conclusion was reached: if so many games are getting released every day, and it takes you anywhere from months to years to make a game, that’s a lot of competition you have to wade through to get noticed, and that’s only if you don’t count the many games released AFTER you’ve released yours.

So marketing and promotion were seen as key differentiators. People dedicated to these roles popped up because there was a big opportunity. Game developers wanted to work on games and outsource their marketing.

And this was back during the popularity of Flash portals, before the modern mobile era.

Here’s an article in 1999 responding to a post about why game development sucks:

Talin says there are lots of reasons for failed products. Crappy products, crappy marketing, crappy distribution, crappy placement at the stores etc.

But, ultimately it usually comes down to the fact that not enough people wanted to play your game. Especially in this day and age when you can put your game up just by uploading it to some file website. If your game is truly something tons of people get addicted to it will spread around this new wired world. If on the other hand people don’t want your game nothing is going to make them want it.

People were still using shareware to market their games back then.

So, yes, the tools to make games today are easier to access than ever, which means anyone can make games, which means anyone is making games.

It’s crowded, and it is hard to stand out.

But it has always been a business, and most of the serious indie game developers knew this fact. It isn’t some new revelation. The tactics might change, but the understanding that you needed to do market research and get people to know your game even exists was always there.

I don’t like cliché, but “If you build it, they will come” isn’t a viable, sustainable strategy for a game developer. It hasn’t been one in a very, very long time. Maybe when the first personal computers were being released, and your competition was almost no one, then sure, just having the only game in town might work.

And if you are only interested in making games as a hobby, then go to town. Make the games you want to make and see if people might enjoy them. Maybe you’ll make some pizza and beer money as a bonus!

But if you are interested in a sustainable living making games on your own, it’s hard because you aren’t just making games anymore. You’re doing market research. You’re doing product management, which is different from product development, which is different from project management. You’re doing contract negotiation, hiring, firing, accounting, accounts receivable, accounts payable, and more.

And if you are doing it by yourself, you still wear all of those hats even if you neglect a number of them.

But none of this is really new. It’s just an awkward truth that has to be learned by each generation.

Categories
Game Development Geek / Technical

Fun with Game Physics Bugs

I was working on a game involving leaf raking, and I tried adding physics code to it. I researched a lot until I came across Randy Gual’s Custom 2d Physics Engine tutorials.

My own implementation leaves a lot to be desired so far, as can be seen in this YouTube video I uploaded of leaves ricocheting when I turned off damping to see what was happening:

Somehow they seem to pick up more speed after some hits but not always. I’m sure it has something to do with how I calculate the velocity along the normal of the collision.

Categories
Game Development Personal Development

Learning from Game Development

Over a decade ago, while I was still in college, I went to my first indie game developer meetup. It was in a suburb of Chicago at a Starbucks, and it involved mainly people who participated in Dexterity Software’s game development forums, which are now the Indie Gamer forums. My first meeting’s minutes are still online: Indie Game Dev Meeting Summary December 2004

It was kind of a mastermind group. We showed off what we were making. Or rather, they did. I never had anything to demonstrate. I played their games and gave feedback, and we talked shop and set goals for the next month’s meeting.

Some people traveled from downstate to make it out to these meetings, which alternated between that Schaumburg Starbucks and the Dave & Buster’s in downtown Chicago.

I remember while packing up to leave one meeting I asked everyone, “How do I get better at programming?” At the time, I felt like I wasn’t making a lot of forward progress and it was mostly due to my lack of experience and knowledge.

I remember getting a few looks, there was a pause, and then someone said to nods of agreement, “Just…do it.”

It didn’t feel like very helpful advice, but I chalked it up to the idea that no one actually knows how they get good at something. When you are good at it, you don’t remember how you got there because your goalposts are always moving, and if you aren’t good at it, you don’t know how to change that fact.

Unless you ask, of course, and “just do it” actually is fantastic advice.

I learned C++ in college, but it was Visual C++ 6.0, and it wasn’t consistent with the C++ Standard, and I think I was taught wrong. I remember reading code online and not understanding why people were needlessly using “advanced data structures” such as vectors and sets. I taught myself BASIC on the Apple II c+, but programming in C++ was not fun or enjoyable.

But then I found some advice in the GameDev.net forums to read Accelerated C++: Practical Programming by Example. I bought the book, forced myself to read it from the beginning and do the exercises, and wouldn’t you know it, it turned out that C++ wasn’t so bad. What were considered advanced topics in college were introduced in the first few chapters.

I was still struggling to be productive with programming. I was challenged to find tools and libraries to make my job easier, and it is how I learned about a sprite engine, which I blogged about extensively.

I learned how to use libSDL. I succeeded at my first game jam when I attempted to work on Game in a Day, which was hosted by people at Garage Games. Kinda. I made something playable. It just wasn’t what I wanted to make originally.

And I learned a ton participating, including the first time I had an overwhelming sense of fear that I had no idea what I was doing and should stop, even though I had no rational reason for listening to this fear. I pressed on somehow, but I was shocked at how that experience challenged me. I didn’t expect it.

I had that almost tangible anxiety a second time, probably during my first Ludum Dare compo, but it was less powerful and I recognized it and pushed through it, and I haven’t felt it since.

I started finishing games. I built confidence in my abilities. When I read my old blog entries, I read about someone who struggled with focus and time management, someone who felt like he wasn’t putting in enough effort to learn and work on games.

But over the years, chipping away at ignorance made a difference. Today I’m seen as not only an expert in C++ but also in software development in general. I still find myself surprised by C++ today, though. For instance, sometime in the last couple of months I learned that I could forward declare more often than I thought I could.

A decade ago I couldn’t code my way out of a wet paper bag. Today, I could rearchitect a complete game halfway through its development without so much as a flinch.

Most of my experience and knowledge of software development came about due to my persistence with working on my own game projects. I did research on best practices. I sought answers to the problems I ran into. I wrote code outside of class and outside of my day jobs.

I just did it.

And while I might not have felt I was making a lot of progress on any given day, over a decade of such days resulted in a ton of growth.

It could be argued that a more focused effort with a lot more time dedicated to it would have been better, that I could have gotten to the same point years earlier.

But the advice would still be the same. You want to learn how to be a better programmer, artist, game developer, mathematician, engineer, or designer?

Just do what they do, and push through the “I suck” phase until you get the hang of it, push through the fear where you feel like you might choke and give up. Just do it, and even if you don’t figure it out today, tomorrow you’ll know how.

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

LD#32: A Giant Weapon Development Time Lapse #LDJam

I created a time lapse video of my development of “A Giant Weapon”:

Once again, you can find the game, albeit incomplete, at http://ludumdare.com/compo/ludum-dare-32/?action=preview&uid=251.

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

LD32: Submitted but Disappointed #LDJam

When I started this weekend, I thought, “I’m going to make a complete game that’s enjoyable to play.” I wanted the Button Masher Bros to play my game and enjoy themselves.

Towards the end of the deadline, I was thinking, “I might be able to get the bare minimum of something that could be called a game in.”

And by the end, I didn’t even have that.

I submitted my project, A Giant Weapon, which you can find at http://ludumdare.com/compo/ludum-dare-32/?action=preview&uid=251

LD #32 A Giant Weapon

You click to tell your soldier to move, and you try to avoid the monster. There’s a game over screen when you get killed.

You can attract the monster’s attention by clicking on it.

Unfortunately, I didn’t add the reason why you would want to do so: to destroy your enemy’s camp.

Fighting bizarre and non-bizarre bugs slowed me down, but I did not do anywhere near as well as I would have liked.

I wanted to get something controllable by 12 hours in, and it took me almost 25 hours. Then I didn’t have anything resembling playability until the last couple of hours, and then I ran into trying to figure out what AI bugs and graphic offsets issues I had.

I watched my timelapse, and I can see that I didn’t take my own advice about not spending too much time on the art. I think the majority of my efforts involved getting the sprites right.

Oh, and the weird bug that caused bizarre issues with the buffer not updating? I think it turned out to be a glitchy system. Once the computer crashed, and yeah, I needed that to happen near the deadline, everything ran fine for the remainder of the compo. I should have rebooted right away. That problem cost me way too much in time and stress.

I’m pretty disappointed and deflated. It’s been two years since my last Ludum Dare compo, and I feel like I’m not any more capable as a game developer than I was then.

I know I have another 24 hours for a Jam entry, but I planned to dedicate only the past 48 hours to Ludum Dare and I will not be able to do much more.

All that pity aside, I did like my idea, and I think the game in my head would be enjoyable if I could have developed it. A bumbling giant monster that gets easily distracted is chasing the player who is trying to lead it to the enemy camp without getting killed in the process. Part of the game play was to get the giant to move in one direction while looking another, causing it to trip and fall. If it falls on top of a building or other enemy structures and units, they would get destroyed.

The monster and the player would each be able to pick things up and throw them. The player would throw things to attract the attention of the monster, while the monster would be aiming to kill. This feature got cut.

Towards the end, I even created quick art to create a building, including rubble, but it never made it into the game.

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

LD32: I’m 12 Hours Behind Schedule and Have Bugs #LDJam

I wanted to have something playable or at least controllable within 12 hours. I did it within 25.

LD #32 - Controllable Character

You can now click on the ground, and the soldier will move assign itself the goal of moving towards that point.

The monster is still just placeholder art with basic AI.

There are bugs, though.

For some reason, when I run my game, the loading screen gets inconsistent for me. The mouse cursor freezes on the screen on the main menu screen, in both of these cases, I see the screen look like it is locked, or flickering between two images that should not be on the screen. For instance, my loading screen says “Loading resource 8 of 14”, and it bounces back and forth between 8 and 9, which isn’t happening in my code, which makes me think that there is a problem with rendering.

Animation looks weird once I enter into the game, and so I have to restart the program and hope that I don’t see the issue again.

I tried it in another game which has more or less the same code, and it seems to work fine, so at least that rules out an expensive hardware issue.

But the bad news is that I have a ridiculously difficult to diagnose bug in my Ludum Dare project, and there is less than 24 hours left in the compo. There’s also a weird rendering issue in which my terrain is showing gaps behind it as I move about the world. B-(

And I still have a ton of work to do.

Also, I realized that with all of the struggles, I have been forgetting to commit my changes. Here’s the complete commit log:

$ git log
commit 35fabffff77407ce6a66a146ff297df254c5626e
Author: Gianfranco Berardi
Date: Sat Apr 18 20:29:47 2015 -0500

A lot happened; can control player character, have basic AI framework.

commit cc662aa500df16c01dae56ac3a419a64e0448c22
Author: Gianfranco Berardi
Date: Sat Apr 18 10:32:08 2015 -0500

Fixed camera; added grass, monster placeholder, and boulder.

commit 4656623ca6dfc9fc2e68620a7ec5056e171276e1
Author: Gianfranco Berardi
Date: Fri Apr 17 23:27:09 2015 -0500

Initial commit for LD#32.

Early on, I realized that my efforts were all over the place. I wanted to work on adding a playable character, and I ended up making some terrain instead. Nice, but not as important.

So I actually put together a quick design document, inspired by Hybrid Mind’s Ludum Dare 29 timelapse.

Holy cow, it made a huge difference! I was able to dump everything out of my head, realize there were some gaps, recognize that I had a scope issue, and also prioritize whenever I identified a new problem or bug to fix.

It also helps me see my progress. It’s easy to get demotivated when the clock keeps ticking, but seeing all of the completed work reminds me that I’ve made a dent, and it also helps me keep focused because I want to get more of those planned tasks crossed off my list.

Of course, I’m always realizing something that needs to be added, so the list will get larger. I’m not sure if more planning or more doing would have revealed that information to me sooner.

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

LD32: Breakfast and Even More Design #LDJam

Good morning!

I had some oatmeal with peanut butter and raisins, with some cinnamon and nutmeg. I also had a small glass of orange juice and the smoothie my wife made.

LD #32 - Breakfast the First

When I drank the smoothie, I noticed that the side of the glass had this very neat texture:

LD #32 -Potential Texture

I might tweak the color and turn it into the landscape in my game.

I decided that there will be a player character represented in the game. It adds risk, because if the monster catches up to you, you lose.

So, who are you? I originally envisioned some spoiled brat who wanted to get revenge on the people in his town. Maybe that cool neighbor with the better treehouse will think twice the next time he brags about how much better it is than yours.

But then I took a shower, where we often have our best ideas, and I thought of an outnumbered military unit desperately seeking a way to tip the balance in their favor. Finding a monster to do their fighting for them seems like a good alternative to dying and losing the war.

Which also gives the player a reason to worry about the monster getting killed before it can do its damage.

There’s 34 hours left in the compo. I better start planning.

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

LD32: Art for “A Giant Weapon” #LDJam

After I got a working build of my project, which didn’t take too long, I started doodling some monster faces.

LD #32 Giants And Ogres

I love how goofy the faces are. I want the monster’s face to be expressive so that it can give clues to the player about what it is thinking.

But just how giant is this character going to be? It can’t be so huge that you can only see its feet. I suppose it would cut down on asset creation, but I envision a very emotive monster which requires a visible face. I want it to be seen as a huge monster, so being merely a head taller than all of the other characters in the game isn’t enough.

But what if there is no player character? That is, the player can interact with the world without having a representative in the world. Then the monster can fit on the screen, and any characters can be incredibly tiny. After all, their faces aren’t as important as the fact that they are running from a marauding monster coming through town.

Maybe they are very tiny stick figures in comparison.

I’m not completely sold on the idea of having no player character. I like the idea of the player running around, trying to get the monster’s attention while avoiding the chaos and destruction.

LD #32  Moving Monster On Screen

That mock up image of the monster now moves about the screen on its own, although the AI is basically “bounce off the walls” and will need to be replaced.

I realized I was falling asleep as I was coding, so I think I’ll go to bed.