[Author Prev][Author Next][Thread Prev][Thread Next][Author Index][Thread Index]
Re: Space sim in the works
Jiri Svoboda wrote:
Seems rather risky to me. You may soon find yourself rewriting essential
parts of your code or redesigning your world, just because of some
things you didn't think of in advance.
Writing the graphics engine is a lot of work. But you'll probably
always get it working somehow. Game logic can be much more tricky.
Spacecraft collisions (the effects, not detection) or AI are tricky, for
I'd always start with the game logic, which is the most important
thing anyway. I'd use simple graphics first, and add more when whe core
of the game reached a more mature state.
I must wholeheartedly agree with this. I made the same mistake. I'm
ashamed to say how long it took me to figure it out.
If I can offer anyone advice to save them from my fate, here it is:
1) Have a vision. Write down a brief description of what your game will
be. Write down and describe the key features. Describe the *what*, not
the *how*. Do not include marketing hype ("the most advanced graphics
ever seen", yeah right). Do not include technical details ("portable
2) Find a few "stakeholders". These are people who have an interest in
seeing the game succeed. They can be friends or family members, or fans
of a similar game. Show them your vision and see what they think.
Consider making changes based on their feedback. Have them help you
prioritize the features.
3) Set a deadline. Having a deadline helps keep your focus on what's
important. Think, "if this feature doesn't make the deadline, will I
still have a game?" Get the critical features done first. Maybe you
won't have proper lighting on your bumpmapped particles, but you will
have a game.
4) Spend two weeks making the simplest complete program you can. My
first iteration opened a window and waited for the user to close it. I
had an executable and an "engine" DLL. The "engine" used factories and
interfaces and ran on Windows and Linux. I also built a proper Windows
installer using NSIS. So at the end of two weeks I had properly
engineered pieces of software that could be installed, run, and uninstalled.
5) Now decide what the most important part of your game is. For a space
game, I'd imagine that would be flying the ship. Before I can fly
a ship I have to be able see it, so I'll need to load a model. Before I
can load the model, I'll need at least a basic renderer. Always define
what you are working on in terms of how it will advance the *game*.
You're not writing a renderer, you're trying to fly the ship.
6) Once you've figured out what you need to work on, break it down into
small tasks. I decided to write a skeleton renderer component with a
single function "Draw()" that would draw a triangle in the middle of the
screen. Then I created an instance of the renderer in my application and
called Draw() every idle cycle. I probably spent a day getting it all
thought out, implemented, and tidied up. Then I tried sending in a
triangle list from my application to build a cube. Then I tried to make
it spin. Etc., etc.
7) Implement these new "featurelets" for two weeks. At the end of two
weeks, package it all up and share it with your stakeholders. Put it on
a website and send an email telling them where it is and what it does.
Tell them what you accomplished in the last two weeks. Having people who
care about the game involved in the development process is a great
source of motivation. Then go back to (4) and do it all over again.
I highly recommend the book "Managing Software Requirements: A Unified
Approach" by Dean Leffingwell. Also check out
http://www.dexterity.com/articles/. Many people, like myself, spend too
much time learning to code and not enough time learning how to manage
the project. The people who actually get things done are good at both.
Read up on "refactoring" and the "YAGNI" principle ("you ain't gonna
need it"). Look at some "agile" programming methodologies like "Feature
I've gone on too long. I intended to offer my $0.02 and ended up with
more like a $1.50. Hopefully it helps someone out.