Game Development

Keltris 1.1!

New release of Keltris has the following updates:

  • New artwork!
  • High score retained between plays
  • Left/Right block sliding was too quick in higher levels, toned it down a bit
  • Bonus points for multiple lines cleared with one block
  • Better keyboard controls. Now you can use the arrow keys the same as ASDW. Left/Right/Down for movement and Up for block rotation.


Download: Keltris_1_1.zip

Keltris 1.0!

Yesterday I was thinking about how I could salvage the game code I had from the last project and turn it into something useful. Then it struck me that my girlfriend had been asking for a copy of Tetris ever since we purchased a Nintendo Wii. Unfortunately, there isn't a version of Tetris on the Wii. So within 24 hours or so, I worked hard to create Keltris! This was mostly for fun, and to win points with my girlfriend, but also as an exercise in rapid game development as well as a good test of the code I had around.

I have a simple design document which I'd love to share in order to show the creative process from beginning to end, but I used MS Office OneNote to create it and it's not so easy to get it into a nice HTML format. I'll save that for a later time. For now, here are a few screenshots and the game to download.


Download: Keltris_1_0.zip

Game pre-mortem

Not quite a dead project yet, but my game development efforts have been shelved indefinitely. The short version is that my job is currently taking up most of my development efforts. Rather than let this project fade into the background, I decided to do an analysis of the project for my own benefit going forward. What went right, what went wrong, and how I can getter approach a project like this in the future.

There is a lot of useful code, which I don't plan to dispose of. I figure the best way to be sure the project survives is to share the code here. It needs some polishing and packaging, but I hope to share all of what I have, which includes a simple 2D game engine based on DirectX, plus a simple game based on that engine.

Genotype project failed: Why?

 


- Lack of time dedication


Unfortunate, but justified due to cost-of-living expenses here in NYC
forcing developers to get 'real' jobs


- No money incoming at early stages


Could have gotten some funding, but would have been difficult for a
pet project from two guys without prior published games. Self funding was
really the only way.


- Development took too long


- Used own code when open source code would have worked

- No real schedule

- Wrote a lot more code than was expected from the start. I could
possibly have written more code than was necessary to get the thing running.

- I took an engine-oriented approach, intending to reuse it for other
games or sell it on its own. In retrospect, a lot of the framework was
tested and good code, but game logic code also needs attention. And is a
HUGE part of the project.

- Lack of game dev project completion from me. I haven't taken a
game to completion, so I tend to find solace in repeating things I've done
before, but polishing them up. There was a lot of code for game logic,
menus, enemies, etc., which I ignored because it felt like a big task. One
which I was unfamiliar with.

- Played with bulletML for a too long? Was it too early to worry
about this? BulletML was complicated and I could have used simple bullet
code first, and then expanded the bullet arrays later on. Plus, BulletML was
poorly documented and didn't gain us much. There were existing bullet
patters, but would we have used them? The ML was too complex for us to learn
and try to create ourselves.

- Took too long to recover context to make code progress after
spending week(s) away from the code.

- Too much refactoring. Refactoring is good, but there's time to do
it after delivery of completed application. There was no good reason for me
to go back and polish the engine before game completion. I need to work on
'black-boxing' the code and forgetting about underlying framework classes
when writing game logic code.

- Too feature-ful code in the framework. Changing resolutions on the
fly is good, but who gives a shit? XBLA probably has only one resolution.


- Lack of artwork expertise


- 3rd person on the project could have helped

- Artwork didn't need to be optimized from the start. Could have
been individual files of whatever size which the engine was capable of
handling

- Too much focus on tweaking one or two images to get the right look
of game art. Transparency and such could have come later on.

- Should have worked on getting the artwork workflow for the artist
down so art can easily come out as usable in the game. We decided on TGA
which gave us freedom for transparency, but it was difficult to export to.
We could have used BMP with color keys from the start (I even coded this!)
and cleaned things up later.


- Poor communication of game design


- Documentation needed to be much better. About half-way through I
started to use word docs to roughly decide tasks needing completion. Some
sketches and mockups existed, but a true requirements document spelling out
all necessary details was needed. Maybe.

- Other projects manage to wing it and get a completed game out.
This may be a problem with my technology-oriented focus. I have a hard time
visualizing the end goal and seeing past the code.

- Some milestones with expected feature completion would have been
useful. I had a rough milestone document, but it had CODE completion. There
were many required bits of code which I didn't anticipate from the start,
making it seem like later milestones were far out of reach. I should have
had end user features listed in the milestones, functionality.


- Lost interest (~9 months from meetup to project abandonment)


- Project lifetime of 3-6 months is more realistic for a small game
like this.

- Better requirements and milestone documents (see above comments)
would have helped to visualize the completion of the project, rather than
just feeling like there was always tons of work left to do.


I'm not a gamer!


I code games because I enjoy the challenge, not because I am an avid
game player. I need to pick an application I care about, not code I care
about. Good code can be written in any context.

 

 

What went RIGHT?

 


Unit tests


Doing unit tests on the framework classes helped to be certain that
things were working as intended. Even when refactoring later in the project
I found some bugs in code which had long since been left alone.

 

That's it?

 

What can be gained/salvaged?


Engine code


 

 

 

2D shooter in development

Work is coming along quickly on a 2D shooter that I'm working on in partnership with an artist. I am doing all the programming while he is taking care of the artwork and the majority of the design. It has been a few years since I've hung out in the game dev space but I'm having a good time with it as I go along. We're aiming at DirectX/Windows platform and possibly an XBox downloadable game.

While the game is pretty simple, it's more than a few days worth of work. The project has exercised my project management skills and I'm happy to say it's coming along nicely. Primitive engine test programs were completed about a month ago and very early alpha stage is where we're at right now. I've completed most of the engine code, the game logic is near completion, and player actions are complete. The code remaining to be written is enemies and level choreography. If things continue forward smoothly at the current rate, I expect to have a beta version in 2 weeks.

DirectShow articles

It's been a few years since I've done any DirectShow development, but I was a pro back when it was first introduced. Since at the time there was little help on this new and difficult API, I wrote some articles for the game development site Flipcode. The articles are a 3-part tutorial for using DirectShow and can be found at:

DirectShow For Media Playback In Windows - Part I: Basics
DirectShow For Media Playback In Windows - Part II: DirectShow In C++
DirectShow For Media Playback In Windows - Part III: Customizing Graphs

Syndicate content