Other Wise

Twitter Week: 2009-06-27

Age of Steam: production probabilities

The following python script calculates the probabilities of a given cube on a row being produced by the end of a given round in a game of Age of Steam:

#! /usr/bin/env python
# Author: J C Lawrence <claw+blog@kanga.nu>
# Date: 25 June 2009
# Purpose: Calculate AoS cube production probabilities by row and round

def fact (x):
    if x < 1:
        return 1
    return reduce (lambda x, y: x * y, xrange (1, x + 1))

def xCy (x, y):
    return fact (x) / (fact (x - y) * fact (y))

def point_p (d, n):
    c = float (xCy (d, n)) 
    p = (((1.0 / 6) ** n) * ((5.0 / 6) ** (d - n)))
    return c * p

def sum_p (d, n):
    rc = 0.0
    for i in range (n, d + 1):
      rc = rc + point_p (d, i)
    return rc
    
def main ():
    for p in range (3, 7):
        print "Players: %d" % p     
        for r in range (1, [10, 8, 7, 6][p - 3]):
            print "\tRound %d:  Row 1 - %f\tRow 2 - %f\tRow 3 - %f" \
                        % (r, sum_p (r * p, 1), sum_p (r * p, 2), sum_p (r * p, 3))

if __name__ == "__main__":
    main ()

The results:

Players: 3
    Round 1:  Row 1 - 0.421296  Row 2 - 0.074074    Row 3 - 0.004630
    Round 2:  Row 1 - 0.665102  Row 2 - 0.263224    Row 3 - 0.062286
    Round 3:  Row 1 - 0.806193  Row 2 - 0.457341    Row 3 - 0.178260
    Round 4:  Row 1 - 0.887843  Row 2 - 0.618667    Row 3 - 0.322574
    Round 5:  Row 1 - 0.935095  Row 2 - 0.740378    Row 3 - 0.467775
    Round 6:  Row 1 - 0.962439  Row 2 - 0.827219    Row 3 - 0.597346
    Round 7:  Row 1 - 0.978263  Row 2 - 0.886969    Row 3 - 0.704381
    Round 8:  Row 1 - 0.987421  Row 2 - 0.927041    Row 3 - 0.788168
    Round 9:  Row 1 - 0.992720  Row 2 - 0.953411    Row 3 - 0.851205
Players: 4
    Round 1:  Row 1 - 0.517747  Row 2 - 0.131944    Row 3 - 0.016204
    Round 2:  Row 1 - 0.767432  Row 2 - 0.395323    Row 3 - 0.134847
    Round 3:  Row 1 - 0.887843  Row 2 - 0.618667    Row 3 - 0.322574
    Round 4:  Row 1 - 0.945912  Row 2 - 0.772831    Row 3 - 0.513209
    Round 5:  Row 1 - 0.973916  Row 2 - 0.869580    Row 3 - 0.671341
    Round 6:  Row 1 - 0.987421  Row 2 - 0.927041    Row 3 - 0.788168
    Round 7:  Row 1 - 0.993934  Row 2 - 0.959962    Row 3 - 0.868240
Players: 5
    Round 1:  Row 1 - 0.598122  Row 2 - 0.196245    Row 3 - 0.035494
    Round 2:  Row 1 - 0.838494  Row 2 - 0.515483    Row 3 - 0.224773
    Round 3:  Row 1 - 0.935095  Row 2 - 0.740378    Row 3 - 0.467775
    Round 4:  Row 1 - 0.973916  Row 2 - 0.869580    Row 3 - 0.671341
    Round 5:  Row 1 - 0.989517  Row 2 - 0.937104    Row 3 - 0.811313
    Round 6:  Row 1 - 0.995787  Row 2 - 0.970511    Row 3 - 0.897210
Players: 6
    Round 1:  Row 1 - 0.665102  Row 2 - 0.263224    Row 3 - 0.062286
    Round 2:  Row 1 - 0.887843  Row 2 - 0.618667    Row 3 - 0.322574
    Round 3:  Row 1 - 0.962439  Row 2 - 0.827219    Row 3 - 0.597346
    Round 4:  Row 1 - 0.987421  Row 2 - 0.927041    Row 3 - 0.788168
    Round 5:  Row 1 - 0.995787  Row 2 - 0.970511    Row 3 - 0.897210

No accommodations have been made for maps with different numbers of rounds per player count, or the insta-production rules used on most of my maps. Enjoy.

Twitter Week: 2009-06-20

Twitter Week: 2009-06-13

Time’s sweet paradox

To some degree games may be classified as reactive and predictive. it all depends on where the players act in relation to the progression of time in the game. In reactive games events occur in the game and the players respond. They may have prepared for such an event in advance, but their response is purely reactive when it occurs. In predictive games player act ahead of the game time, they make choices so that when/if certain matters should come true they are ready and (ideally) don’t even need to react. This is perhaps not a stunning insight, but it got me to thinking, What about a game in which the players are never in present time, a game in which the players exclusively operate in the future, both short and long term? What if players can only operate within the bounds of an increasingly uncertain future?

Imagine a planning game, perhaps a logistics game of some sort. Possible actions are arranged in a stack, perhaps represented by cards or tiles. The bottom action is NOW (ie present time) in the game sense. The bottom action card will be performed on this game turn, either by a player or by the game itself in some autonomous fashion or interpretation. When an action is performed it is discarded or perhaps recycled.

Each player has a number of markers, perhaps two or three which they can place on action cards (one marker per card) in the future. In fact this is the only decision afforded to a player: committing to a future action. If and as when such a card with a player marker becomes the bottom card, that player does that action, and they move their action marker to another action card (unoccupied by another player’s marker) in the future.

But things are not quie that simple. Actions have durations. As quick example a future action might be building a factory. However the action card reaching the bottom of the stack merely means that construction has started. Factory construction lasts 5 turns (ie 5 action cards off the bottom of the stack). If the factory construction card was 3 turns in the future when the player put their marker on it, then the player waited 3 turns before starting to build the factory, and then another 5 turns of actually building the factory (assume some cost for this) before the factory is finally built and the action marker may be used to reserve yet another action in the future. Game state could have changed considerably in that time. Perhaps the player carefully built a Q-Factory as Q-items were in high demand and commanded a price premium, but by the time their factory came online, not only had the Q-item market collapsed, but Q-items were obsolete and couldn’t even be used for any purpose! Then again, they might have started shipping T-items by slow boat over the ocean, a trip that takes 7 game turns, only to find that T-items are commanding a huge price premium when they arrive.

In short the player is constantly committing themselves to events which will only occur in the relatively distant future (in game terms). They have absolutely no ability to react to current events, only to setup changes that will be realised after an appreciable game delay. In short they are stuck in the future.

Some abstractions may be added. Players could be allowed to sell each other the actions they’d reserved in the future, or possibly the actions that have occurred but are still maturing (eg construction on the factory has started but not yet finished). In this way something of a futures market could be supported in which players not only speculatively commit to actions they think will be profitable for themselves, but also to actions they may be able to sell to other players. Of a sudden players are trading in what they imagine the game’s future will be.

Twitter Week: 2009-06-06

Oooo my pretty precious!

As those who follow my Twitter feed know, Corner Lot did rather well at the Kublacon design competition, coming in the top 3 and quite likely being second. Julie, the organiser of the competition said that if it had player aids it would have won.

Several changes:

New rules. Playtesters will find that the file at the same magic URL has the new card images and rules.

Footnotes
  1. The increased cost of the Empty Lot cards is not cast in stone, the other two values likely are