I wrote out a 26 page game design doc yesterday. Although I’m practically the only one reading it it helped a lot because it turns a loose collection of ideas into something cohesive and developed. I was able to resolve several design problems by doing it. A nice effect of writing it is I was able to put down every creative idea I had without regard to implementation details. When I think of stuff I usually also consider how well it fits into existing code, which limits my creativity.
The game design doc also helps because knowing what features I’m going to have, I’m able to write a list of exact features I need to implement. This means I can do specific implementations rather than loose and vague concepts where I’m not sure what I need. It makes things MUCH easier without really losing flexibility since I still program flexible interfaces where it will have obvious use.
My first pass at the programming feature list was almost pointlessly high level and glossed over all the potential problems. So halfway through I stopped and went over again, forcing myself to think of where I would actually begin coding. That made a tremendous positive difference. Doing this, I am solving difficult programming problems in minutes in my head as compared to hours of refactoring code. Additionally, I think of unforseen features and find better ways to implement them than I would have otherwise. One example is that I was originally going to write a physics editor out of context. Various editors that needed physics would load a predefined physics file. Upon review, I found that without context it would have very limited use and that furthermore I need the same editor for both the ship design, weapon design, and base design screens. Making that change substantiallly changes how I was going to design all of these elements and I wouldn’t have done it if I had already started coding.
Lastly, here’s my first render of a ship using normal mapping.