Tuesday, August 19, 2014

Act 2: The refinement

I've thought more about the ideas/brain-dump from the last post. This post is the refinement of those ideas, getting some concrete game-play ideas on the page. Previous post was very abstract in type of game it was going to be.

The Refinement
I've already mentioned I want the game to be turn based game with simultaneous resolution. But what exactly is the type of game?, what are the objectives?, how is it played? Hopefully I can answer all these question in this post.

Game Type: In short it's an Asteroids clone. Pretty much every one has played an Asteroids clone at some point in their lives. It's a classic staple of gaming world. It gets rehashed in different way by different people, gets called different things, but at it's core it's simple addictive 2D game.

Game Play: Unlike traditional asteroids, this one isn't going to be fast paced shooter. Since goal here is to make it turn-based. Instead, player will interact with the game in phases, well, two phases.
  • Phase 1: Planning, this is where player (and AI) will create a command list for their ship or ships (and NPC/T). I'll get into commands and how to issue them later. The ship will then follow those commands until next round or until it dies, which ever happens first.
  • Phase 2: Resolution, this is where both the game and ship will execute their commands list, and their interactions resolved based on the physics rules of the universe. Each resolution last a preset amount of time. That time period is TBD based on play testing. But the player will know how long a resolution time is.
Player commands the ship(s): All the player commands for this ship fall into two group, which is nice and simple.
  • Move Ship: Command for movement will be quite unlike inspiration source games. Player will not get to point to a spot in empty space. Instead they will provide Thrust Value and Thrust Direction. The Game Universe will use the Newton's Laws of Motion, so unless the player provides opposing thrust their ship will continue to move in the initial direction for all subsequent rounds. Again I'll tweak the physics model based on the play testing. I might have to add some sort of friction to slow the ship down. But for the moment let's go with no friction in space.
  • Fire Weapon: Commands for weapons are again like movement, in that player is required to be predictive, and aim at position where the Target will be when the projectile or beam gets to it. I've divide the weapons into two categories, Laser-like, and Missile-like. Laser-like weapons only travel in straight lines, and require rotating the ship to face the target. While Missile-like weapons can be fired in any direction without having to rotate the ship.
Shamelessly stolen image from http://www.bluerosegames.com/silverlight-games-101/post/Generating-Asteroids-for-the-Game.aspx
Starting Position
So that's the basics principle of the game for now. Next I'll go through a paper walk-thru of the game-play. Sort of like in board-game/flow-chart style format, for one round.
Starting preconditions: Player is stationary in center of the screen, there are some asteroids around him, moving in random directions with random speeds (within some predefined range). As in the image to Right.
Command Phase (Phase 1): When player mouses over each rock of interest, the game will show them it's current velocity and projected path over the duration of current turn. Player can then select their ship and issue commands to Rotate the Ship, Thrust in particular direction (this can be independent of rotation, allowing for strafing). I still have to figure out how to display the time line properly, so that commands can be issues to be execute at particular time or in particular order. When player is satisfied with his sequence of command, he can punch the "execute" button, which will start the resolution phase.
Resolution Phase (Phase 2): This is where all the system really interact, Game's Physics system, AI system and Player's commands. The simulation will run for set time, and activate commands in whatever sequence and as specified at times specified. How the simulation occurs, is an implementation detail which we'll go over when coding it.

Rinse, Repeat. Till all asteroids are gone OR ship is dead. Lot of this will be finessed by play-testing.

Now, I think it's good time to get into Coding. Set up some basic framework/boilerplate stuff.