This post has little to do with programming. It is about game design. More specifically, it is about system design, and has little to do with UI design and level design.
For the past couple of months I’ve been working on a redesign of the classic game, Battleship. It started as a small assignment for a CS class of mine, then turned into my final project for that class, and now that the semester is over, it’s a personal project. The goal was to make the game more strategic. While this suggests making the game more complicated, I wanted to keep it simple enough to play as a tabletop game. It also means that the players need to have meaningful choices. This involves giving the players more information about their choices, but the original battleship is all about hiding information, and I didn’t want to lose the character of the original game. This is what I came up with after the first couple of hours:
Redesign #1 – Ships Have Roles
- The board is 16×16 cells, not 10×10.
- Don’t need to be a straight line. Can be built in any shape so long as every cell is adjacent to another.
- You do not have to use every ship you own in a single turn. You don’t have to use any, actually.
- You cannot use a ship on the turn you built it, you have to wait until the next turn.
- Takes up the space of 2 cells.
- Responsible for firing missiles on a single cell of the enemy board.
- You get 1 fire per battleship you own per turn.
- For every missile you fire, you will be told (by your enemy) whether or not it hit something, and whether or not it sunk something.
- Lookout ship
- 3 cells.
- Responsible for searching the enemy field.
- You can search an entire row, an entire column, or a 4×4 square.
- You get 1 search per lookout ship per turn.
- For every search you perform, you will be told whether or not something is in the region you specified. You will not be told what the object you found is, and you will be told anything more specific about its location.
- Damaged ship cells can be found, but sunken ships cannot.
- 5 cells.
- Responsible for building battleships and lookout ships.
- It costs 1 supply per cell to build a ship.
- You gain 1 supply every turn.
- The only limit to the amount of ships you build is space on the board and whether or not you can afford it.
- Initial setup
- Both players start with 11 supplies.
- Both players build their frigate (costs 5 supplies).
- Determine which player goes first.
- The game is over when one player destroys the other’s frigate, winning the game.
- It is possible to tie. If the player that went first destroys the other player’s frigate, the other player still has 1 last turn (since they are 1 turn behind), and if both frigates get destroyed, it’s a tie.
This is a pretty nice balance between hiding a lot of information, but still giving players enough information to strategize. To compensate for the fact that players can get more information, more information about the ships themselves is necessary to destroy them. Instead of just location and orientation, you need to determine location and shape. Meanwhile, the fact that ships have roles should make destroying and building ships have actual consequences in the gameplay.
The most glaring issue in this version is pretty obvious, though. It probably doesn’t take a game designer to see it. It takes exactly as many turns to destroy a ship (given that you know everything about it) as it does to gain the resources to build one exactly like it. Since it takes even more turns to figure out information about the ships, this will lead to ships being built faster than they are being destroyed. The next redesign is a little more balanced.
Redesign #2 – Less Ships
- You gain 1 supply for every ship you sink.
- It costs 3 supplies per cell to build a ship instead of 1.
- Initial setup
- Both players start with 33 supplies instead of 11.
- You can build more ships than just the frigate during setup, so long as you still build a frigate.
This is how the system was designed for a long time. For the majority of this time, the java version of the game was in development, and not much design work was being done (outside of UI design). Nothing was clearly broken in this version, and I considered stopping here. During play-testing, though, I couldn’t shake the feeling that something was off. This is when the game stopped being just a project for my CS class, and became a personal project.
The game is too luck-based. This partly due to the lack of strategy. It takes some strategy to find ships (kind of), but once they are found, determining their shape and destroying them is a pretty mindless task. There’s no good reason to stop attacking something once you’ve found it, since the missiles are free, and it’s hard to tell what exactly you’re attacking before it’s gone. On top of this, there’s a good chance that the first ship you hit is the enemy’s frigate. This is partly due to the fact that it is the largest, and is the most detectable, but also partly due to the number of ships on the board. Given that your enemy has spent their initial supplies, if you hit something in the first turn, there’s a 45% chance that it’s their frigate. Once your frigate’s been attacked, there’s not much you can do about it. The game is more about who finds the frigate first than anything else.
Redesign #3 – Less Luck
- Cargo Ship
- 4 cells
- Responsible for collecting more supplies.
- In addition to the 1 supply per turn from your frigate, you gain 1 supply per cargo ship you own per turn.
- You gain 1 supply per cargo ship you own for every ship you sink instead of 1 supply flat.
- You can either fire on a single cell of the enemy board, or block a single cell of your own board. If the enemy chooses to fire on a cell that you are blocking, their fire will be blocked and can’t do damage.
- If you choose to block, you will be informed about whether or not your block blocked incoming fire.
- If you choose to fire, you will be informed about whether or not your fire hit something, missed, or was blocked.
- It costs 1 supply to use a battleship.
- Cargo Ship
- Initial setup
- Both players start with 45 supplies instead of 33.
The cost of using a battleship makes players more careful about using them, while compensating for the additional supply gain that the cargo ships provide. The cargo ships look kind of like frigates, and their inclusion justifies increasing the initial supply count. Now, if the enemy spends their initial supplies, if you hit something, the probability that it is their frigate is 33%. The addition of blocking prevents players from destroying the frigate, or any other ship, right off the bat. The attacking player will need to destroy more battleships, distract the enemy, or cut off their supplies in order to stop the them from blocking important cells.
This was a step in the right direction. However, after some play-testing, there were still big problems. Once one player establishes dominance, it’s pretty much impossible to turn the game around. I could foresee players forfeiting a lot before the game actually ends. I also had some worries about the cargo ship being over-powered.
Redesign #4 – Comeback Mechanics
- You gain 1 supply flat for every ship you sink instead of 1 supply per cargo ship you own.
- Successful blocks refund the cost of the block (gain 1 supply).
I was hoping that the refunded supplies for blocks would be enough for the players that are forced to play defensive to make a comeback, but still in a way that actually requires predictive skills. Unfortunately, it didn’t really matter in the face of cargo ships. If the enemy has more cargo ships than you, even if you do block their shots, they’ll probably still be gaining supplies faster. The person who won was almost always the person with more cargo ships. I hated the fact that NOT building 2 cargo ships in the initial turn was pretty much suicide.
Redesign #5 – Resource Management
- Destroyer instead of Cargo Ship
- 4 cells.
- Destroyer is responsible for blocking incoming fire on a single cell of your board.
- You get 1 block per destroyer per turn.
- It costs 1 supply to block.
- You gain 2 supplies for a successful block, instead of 1.
- Responsible for firing, instead of both firing and blocking.
- You gain 2 supplies for every ship you sink, instead of 1.
- You gain 2 supplies per turn.
- Destroyer instead of Cargo Ship
This is the current version of the game as I write this. After play-testing it a little, it feels really good. The role of each ship is more focused. Removing the cargo ship was a good call, and all the good things about it are still present in the destroyer. To compensate for the lack of cargo ships, every other source of supply gain was increased. I was initially worried that it wouldn’t be enough, but after play-testing it seems I didn’t have to be worried. It fosters a lot of mind-games in the end-game, more than I was expecting, actually.
I still need to play-test this version more before I’m confident that it’s done. There’s a good chance that I’ll find something else worth fixing. The game does take a long time to play, but I’m hoping that some quality of life improvements will speed it up a bit. I hope to post the java download in my portfolio soon.