This week I worked on getting the combat turn system implemented. I planned to have a fully playable version of the game done today, but unfortunately I wasn't able to meet that goal. I ran into several bugs as I worked on the combat turn which slowed my work. A couple of these bugs were in previously written code but just didn't surface until I had written the combat code. The other thing that slowed down my progress was the time it took to setup each combat test case. I had to go through a couple turns of the game just to get to the point where I could test out each new feature. This caused significant slowdowns when hunting down a segfault.
I started this week by finishing work on the fleet object so that it holds a set of normal orders and combat orders. I added a toggle which sets whether the fleet is a combatant in the combat turn (and should have combat orders enabled). I then added the reinforce order which is the only order used in combat.
Then I began work on implementing the combat turn into taeturn. It first determines which fleets should have their combat orders enabled. Then it determines the initial strength of each side. Then processes all of the orders. Then determines the winner of the combat and awards points to the winner.
What I have left to do is award points for the winner of external combat. Remove the losing side of external combat. Rebuild the region after removing the losing fleets, and then doing one final check to see if there needs to be another turn of combat to resolve all the conflicts. I'm going to try to get some work done on this during the weekend, and I should have it done early next week. After that I will do a writeup with screenshots to show how the combat works, and then start cleaning up and testing everything in the game.
I started off this week by taking a look at the TaE wiki page. I wrote up a getting started guide for people who want to try out TaE. I'll be making improvements to both pages soon.
I then began planning everything out for the second half of the summer. I think the comparison photos between the actual board and it's implementation went well so I will continue to post those as the project continues. I will incorporate these photos into the wiki page and make sure that anyone who wants to play the game needs to only visit the wiki to get all the info they need.
For the combat phase here is what I have planned: I will use a multi-turn structure similar to RFTS. If combat is triggered, then a message will go out to all players and the next turn will be a "combat turn." The players who are involved in the combat will have the applicable orders enabled for their fleets, everyone else will not be able to perform orders until the combat is over. At the end of each combat turn, the board will be checked again to make sure that no further combat needs to occur and then the game will return to normal turns.
To do all of this I will create a function (maybe two: internal and exteral combat) within taeturn which takes the combatants as input and then handles switching the orders on all the fleets and continuing with the combat turn. This function will be called from the move or colonize order after gathering the combatants. I implemented the code to find the combatants this week. I also went ahead added some code to the fleet object which lets them keep two sets of allowed orders, combat and normal. This lets me set up the orders at the beginning of the game and all taeturn has to do is tell the fleet to switch orders.
Next week I am going to be working hard on implementing the combat turn and I'll hopefully have a first fully playable version of the game ready by next weekend!
The Board:
Here is a picture of the physical board from the game this ruleset is based off of (click on the pictures for a larger view):
The board is composed of 3 different spaces: blank tiles, river tiles, and artifact tiles (marked by the winged creatures).
Here are a couple screenshots of the board in thousand parsec:
In this screenshot, each of the "tiles" of the board is represented as a system. The green and red systems at the bottom of the screen are each of the player's systems. They are used as a spot to hold each player's fleets when they are not in play on the board.
To see the three different tile types represented, we switch to resource view:
Here you can see the "river tiles" represented as small red circles. The "artifact tiles" are the larger red and blue circles. Since this adaptation is set in space, the river tiles are uninhabitable systems which can only be colonized by mining robots, and the artifact tiles are star systems which contain ancient alien artifacts.
Players may also create their own maps.
The Game Pieces:
Each player has a "hand" of 6 random building pieces, 4 leaders (one for each type of colonist), and 2 destruction tiles.
Here are what they look like in the real game:
The building pieces: Temple (red), Settlement (black), Farm (blue), and Market (green).
The leaders: 1 set of 4 for each player. Each set contains 1 leader per building type: Priest (red/temple), Merchant (green/market), Farmer (blue/farm), King (black/settlement).
Destruction pieces: Each player gets two of these. Each can be used once to destroy a tile and render it unusable for the rest of the game.
In the TP adaptation, the game pieces are fleets of ships. Each fleet represents a single game piece. All of your fleets are kept in your home system until you issue an order to them. Here is a sample home system:
Here you can see the player's hand of 6 Colonist fleets (building tiles), set of 4 leaders, and 2 bombers (destruction tiles). To match the setting, the leader's names have changed: Priest is now Scientist Leader, King is now Settler Leader, Farmer is now Mining Leader, and Merchant is now Merchant Leader.
Each colonists' type is hidden from other players, to find out the type of one of your colonists, you click on it and look at the type of ship in the fleet:
The four types of colonists are: Settler (Settlement), Mining (Farm), Merchant (Market), Scientist (Temple).
Orders:
Each fleet has an order associated with it:
- Colonists may colonize a system: this consumes the colonist and generates a resource of the colonist type on the system.
- Leaders may move to occupy a system: this does not consume the leader. This order is used to harvest resources for points.
- Bombers may destroy a star system. This removes all resources, leaders, and anything else in the system and prevents any further orders from being executed on that system.
The game board, pieces, and orders are relatively simple. The real meat of the game comes in the rules to when and where you can execute the orders. But first, you have to understand regions...
Regions:
Regions are a group of colonized or occupied (by a leader) systems. Each system in the region must be adjacent (north, south, east, or west... NOT diagonal) to at least one other system in the region. Here is an example:
Resource View:
Normal view:
In resource view, the red circles are colonized systems (the one with red/blue has an alien artifact). In the normal view, there is a leader in the upper right corner (marked in red). So all of the systems except the one in the bottom left corner are in the same region.
Brief overview of the rules:
- Each player may execute 2 orders per turn.
- A system may only be colonized if it is not occupied by a leader and has not yet been colonized.
- Mining ships may ONLY colonize uninhabitable systems and these systems may not be colonized by any other type of ship.
- Leaders may only be moved into an unoccupied, uncolonized, inhabitable system which is directly adjacent to a science colony.
- There are 4 different "points" which each player can receive; one for each of the colonist types.
- When a system is colonized, the player who owns the leader of the same type in the region of the new colony receives one point of that type. If there is no leader of the correct type then the owner of the Settler leader in that region gets the point. If there is no settler leader, then no one gets the point.
- If there are two or more alien artifacts in the same region at the end of a turn, then the person with the Merchant leader in that region gets to take one of the artifacts. An alien artifact acts 1 point of a type of the player's choosing.
- Leaders may not join two regions together.
- If a leader is placed in a region which already contains a leader of the same type, internal combat is initiated (not yet implemented).
- If two or more regions are joined and they contain leaders of the same type, then external combat is initiated (not yet implemented).
- Combat is not yet implemented and is not covered in this rules overview.
- At the end of each turn, each player's reserve of colonist ships is refilled to 6 randomly from a pool of ships.
- When the pool of colonist ships is empty, the game is over.
- When there are 2 or fewer alien artifacts left on the board, the game is over.
- Each player's score is equivalent to the number of points in the type which they have the fewest points in. (the final score tally is not yet implemented).
This week I focused on getting all my goals completed for the midterm evaluations. I added a restriction to the move order which I had forgotten before: leaders can only be moved to star systems which border a scientist colony.
I also added code which awards alien artifacts to players at the end of each turn. This ended up taking a bit longer than expected and I'm not able to fully test it out until I get combat implemented. It looks for regions which have more than one alien artifact in it. For each of these regions, one of the artifacts is awarded to the player who owns the merchant leader in that region. If no merchant leader exists in the region, then no artifact is awarded.
Finally, I implemented a new way of generating maps for TaE. Players can now make their own maps by creating a text file where '.' is a normal system 'A' is a system with an alien artifact and 'M' is a system which can only be colonized by mining robots. For example, if the player wanted to create a 4x4 map with Artifacts on the corners and a 2x2 mining area in the middle, it would look like this:
A..A
.MM.
.MM.
A..A
The player then specifies the path to the file in the .conf file as "board_path=/path/to/map.txt" If a file is not specified or cannot be found, then a default map based on the original TaE board is produced.
In addition to all this, I've also been working on the midterm evaluation and the midterm report for Mithro.
I definitely need to start showing off some all the stuff that I've been working on. Later today I'll be posting a screenshot tour of the ruleset so far. I'm also going to be revamping the TaE wiki page to provide some direction for people who want to play the game. I'll be working on that this weekend and next week. After I get a good bit of stuff posted, I'll begin work on coding the combat side of the game.
This week I got the turn structure finalized by processing orders one player at a time and rotating that order each turn. You can read more about my reasoning to do this in this blog post. I also fixed a couple bugs which arose from processing orders in this way.
Each player should have 6 colonist ships at the beginning of each turn. I implemented the code to replenish these ships as they are used. While doing this I also moved the fleet creation code into its own class. This helped to make the code more readable, easier to modify and easier to extend.
I have almost everything done for the midterm. I would like to add a message when the game over conditions are reached. I would also like to create a better default map for the game. I should have this done early next week. In addition to this I will be finishing anything else that crops up and submitting my midterm evaluation.