Twitter Week: 2009-07-25

  • Music industry copyright arguments of 100 years ago. Yep, same old tired arguments, just more articulately and better argued. http://tr#
  • What that last link should have been: http://bit.ly/oJHzT Sorry folks. #
  • RT @cshirky:FF 3.5 recommends AdBlock+ as an add-on. Moves FF from hosting the advertising arms race to being an active belligerent. #
  • 4P 1830, went bankrupt in a beautiful 3 company train swindle. Then 3P 1830: $9336 (Daniel), $7502 (me), $7428 (Tim). Bahh! #18xx #
  • Last night’s 3-player 1830: http://twitpic.com/b0ynn #18xx #
  • Winsome Essen set: B&O reviewed. KP clever & unobvious. Wabash exp is brill: alliances for losers. PO exp good. GMO exp deeper than appears. #
  • @davemcclure #Twitter is public performance art akin to street acts. FB is more clubby & rife with social bonding & strong feedback loops. in reply to davemcclure #

Twitter Week: 2009-07-18

To be or not to be a cutlery, that is the question!

A few weeks ago I reviewed Corner Lot with Tom Lehmann. Tom asked abot the $2 raises. One of the reasons, asides from accelerating the cashflow management challenge, is that $2 raises greatly increases the rate of subsequent $1-off events1, or if you wish, Power Grid moments2. Tom ever so gently suggested that the $2 raises were an unjustified complexity as such $1-off moments were in fact something of a false decision 3.

After some thought I’ve concluded that he’s quite right, and yet not. The core notion is of the $1-off decision is that at the time of (fund) allocation a player is able to reasonably predict that spending $1 more or less now will control whether or not they’ll be $1-off for a later item. Tom is right, that’s a tall order and in the case of Corner Lot or Power Grid, or any sufficiently dynamic system, this is bogus. In Corner Lot such an estimation requires predicting not only the cards in the future markers, but the exact results of player bids – certainly not a reasonable question at the $1 precision level. The players simply have no way to predict that accurately. Instead the $1-off moments are effectively random events which simply happen to the players, randomly specifying that a given player does or does not have enough money for something. At this level the $1-off events, and their creation, are clearly uninteresting and the decision at the point the $1-off event was incepted (when the money was allocated) doesn’t really exist.

But that is not the whole story. When a $1-off event occurs, the subject player must decide how to respond and, if necessary, to recover. There are frequently real decisions at this point: The player can’t afford what they need or want, so how to marshal their capital to still support their victory? There’s usually a real decision there and that’s where the decision is. The decision isn’t at the time the $1-off event is created, not at its inception, but rather the decision is post-facto in the recovery from the random event. Additionally, this clearly identifies the real design question: Is the additional rules complexity of requiring a minimum $2 raise justified by the additional interesting decisions created by recovering from the higher rate of $1-off events? I’m tempted to say it is, but I’m clearly also biased. Hey play-testers, what do you think?

One of the other results of the conversation with Tom is that I’m going to be forking Corner Lot. I’m pleased with the current game and enjoy playing it, but auctions are out of fashion with the German publishers and the required componentry (chips, markers etc) make the more attractive lower price points difficult to realise. As a result I’m going to fork the design and create a different game, one still based on the same reservation bidding concept, but with considerable less arithmetic and with no explicit auctions (ie no round-robin auctions to resolve multi-bid cards). I’ve no idea on the game yet, or much idea about the theme (Ariel Seoane has suggested musical group bookings for a concert), but I’m working on it. Currently the numbers are just not working out…


  1. Occasions when players are $1 short of being able to afford a desired item). 

  2. Power Grid seems to be famous for $1-off events. 

  3. Assuming I interpreted his comments correctly. 

Twitter Week: 2009-07-11

  • @ChrisTheCat Is Ducati back up? It was down for what seemed the longest time. #bzflag in reply to ChrisTheCat #
  • 18TN appears better as a 3P than 4P. Odd little game. Neat, clever, small. I may just be a fan of Mark Derrick designs. #18xx #
  • RT @raphkoster:Brilliant infoviz graph porn on the economic recovery! RT: @tobiasbuckell http://tr.im/r8Dz #
  • 18TN. 120 minutes start to finish. Scores: 6485 (me), 6374 (Daniel), 5745 (Aliza). http://twitpic.com/9nuyg http://twitpic.com/9nv0z #18xx #
  • Actually that should be 180 minutes for 18TN, but who’s counting? #18xx #
  • Paxos, bakery, other concurrent algorithms - my scratchpad is ink-sodden just thinking them through. #
  • 18TN, 3 players, 3 hours, $6486 (Jacob) $5894 (me) $5424 (Aaron) - stupid 5 train! #18xx #

Twitter Week: 2009-07-04

Early Experience: Baltimore & Ohio

Eddie Robbin’s Baltimore & Ohio is the latest member of the Historic Railroads System and is part of the Winsome Games’ 2009 Essen Collection. It is a particularly trenchant perfect and certain information game all about timing, timing, and well, timing. In broader character, Baltimore & Ohio is Rimsky Korsakov‘s Flight of the Bumble Bee: full of little surges and races, layers upon layers of them, never relenting, always rushing, all of the races critical and requiring full attention and an endless delicate dedication to the dance.

Baltimore & Ohio has been described as the Historic Railroads System meets the 18xx, and there’s some truth to the claim. Functionally it is clearly a member of the Historic railroads System with a hex-map, track abstracted to putting a cube in a hex on the map, companies with shares, company dividends a function of company cubes in cities, etc. Architecturally Baltimore & Ohio is a child of 1825 Unit 1 (and 1825 Unit 2 and 1825 Unit 3) with a glaring focus on (1825-style) portfolio management and timing (owning the right shares at the right times) rather than 1830-style market manipulation. Spiritually, and yes the parentage is this complex, Baltimore & Ohio is the direct descendant of Lokomotive Werks1 with all of that game’s extra-ordinary attention to exacting cashflow, turn order, and timing – just carried forward into a larger and less relenting game2. Of the three, Lokomotive Werks has the dominant genes, shortly followed by 1825.

The game itself consists of stock rounds alternating with a pair of operating rounds. Initially 6 companies are available (B&O, B&M, C&O, NYC, NYNH&H & PRR). Later in the game 4 more companies become available (Erie, IC, Nickel Plate & Wabash). During stock rounds players acquire shares and manipulate the stock market. During operating rounds companies operate and may generate dividends for their shareholders. The game ends at the end of a set of operating rounds in which the highest level train is purchased (common), or when a share price reaches $375 (unlikely). The winner is the player with the largest net worth (portfolio value plus cash). There are few surprises here.

The rest of the model model is mostly familiar but does have surprises:

  1. As has been long-suggested for many 18xx (perhaps most frequently by Robert Jasiek) player turn order is ordered by ascending player cash at the start of stock rounds
  2. The stock market is linear with par value ranges an increasing function of the largest train purchased by any company - Sold shares reduce share-value by one slot, no matter how many were sold - Share values increase only if the company pays a dividend that is larger than its dividend from the last operating round - Share values go down if the company has shares in the open market, or its dividend (paid or withheld) is less than it was in the last operating round - In all other cases, whether dividends paid or withheld, share values remain unchanged
  3. On their turn a player may sell any number of shares from any number of companies, and then buy any number of shares (of one company) - Companies are incrementally capitalised as shares are bought - Each company has a different number of track cubes, limiting its potential reach and growth with some like the B&M and NYNH&H being very small (but adjacent to great cities) and others like the C&O having a great many track cubes
  4. When determining a company’s dividend run, all the trains the company owns are summed (eg two 2-trains, a 3-train3, and two 4-trains gives a total of 15) and then that many cities connected by the company’s track are selected to generate the dividend (without regard for sequencing or locality). Thus there is no route tracing, just a simple connectivity check - The actual dividend a company pays is equal to the sum of values of the cities hit by the company trains, minus a maintenance fee for each train the company owns, divided across the 10 shares in the company. The fee per train is equal to $10 multiplied by the size of the largest train purchased by any company, making smaller trains increasingly uneconomic over time

The board is rife with layers of short and long (timing) races. The number of companies allowed to connect to a given city is equal to the size of the largest train purchased by any company, thus there are races to get to more desirable cities first, locking other companies out. As city-capacity increases immediately when a new level of train is bought (and track is built after train purchasing), there are also races to be in position to buy the next size train and then immediately fill the newly accessible more-valuable cities. There are also races for special locations on the board with dividend-increasing coal tokens. As companies operate in descending order of stock value, stock rounds easily become positional dances attempting to force advantageous relative operating orders for specific companies so as to get them the good cities, good trains, good coal tokens etc4 before some other company does5.

Similarly, as there is such an advantage to being marginally lower in cash at the start of a stock round (to get first dibs on the best shares), there is often a muscular struggle in the operating rounds to run companies to pay as much as possible while having the controlling player end up with $1 less than the other players so as to secure the better turn order in the upcoming stock round.

This latter turn-order positioning is made more complex by the difficulty of increasing company stock values. There is a strong incentive to run companies for less than their maximum dividends so as to ensure stock-price increases by reserving future dividend increases by counting not-as-good cities for a dividend and then swapping in better cities in future dividends6. Getting the dividend sub-reporting for continued stock-value increases combined with maximising personal cash while also securing good turn order positioning can be difficult.

Those are not the only timing layers. There are yet more at different layers and levels, all open to inspection and manipulation. One trick is to hide cash in increased share value which would otherwise affect the player’s turn order. As companies are incrementally capitalised as their shares are bought, and all shares sell for the current stock value, there is not only a race for good operating order, but for various combinations of good turn order positions, operating order positions, good board positions/access, etc. For instance, the right new company floated at the right time, with the right par and thus the right capitalisation, and thus the right operating order (even after player-market assault), can pay great dividends while preserving the player’s turn order position, and be ripe to be dumped immediately in the next stock round, capitalising either buying all the best shares or floating a new company with the right par and the…etc.

As another example, there are also timing games that can be played with trains. In one of our games the NYNH&H, a very small company that can only reach 5 cities, already owned two 3-trains and had enough money in its treasury to buy an additional 5-train. Of course that gave it a total train capacity of 11 when it only connected 5 cities, but no matter. It then withheld its dividends and in the next operating round sold its 5-train to the bank7 and used that money along with its remaining treasury to buy the last 5-train, thus selling a 5-train to buy a 5-train and accelerating the end of the game while also leaving an opponent’s company unable to afford the larger train it needed and thus forcing it to withhold dividends yet again. Similar little timing games around the trains exist through-out the game.

All the little races and plethora of timing games, with every detail counting, sum to a larger fight to control the pace of the game and thus the length of the game. However rather than game-length being the defining centre of the game as it is in Wabash Cannonball, it is more an emergent and less directly-controlled property formed by the amalgam of all the little races. Due to capital concentration, ability to control the game’s development speed and thus length with lower player counts is greatly reduced. For the same reasons, the importance of game-length control, and the ability to affect it, also tends to increase as player-count increases.

Baltimore & Ohio scales across player counts similarly to the 18xx. As player-count decreases, control increases and the timing games may be played with ever-increasing finesse. As player count increases, capital is diluted across players, and control not only decreases but shared-incentives becomes more important and a whole new layer of emergently collusive timing games become possible. At the higher player counts the patterns start to stylistically resemble 6-player 1830’s, and at the lower player-counts, to likewise resemble 3-player 1830, complete with not only the different pacings, but the different values of different companies at the different player counts. The result is that 3 players plays very differently from 4 players, which in turn plays very differently from 5 players (I’ve not tried 6 players yet).

Expect your first session of Baltimore & Ohio to take between 4 and 5 hours, possibly a little more. With experience that play-time can be shortened down to around 150 minutes, but it will require both skill and discipline as with that increased skill comes greater ability to predict, control and thus play with the many many layers of timing in the game, pushing the game back up toward 4-5 hours. Perhaps surprisingly it is easier to push play-time down with increased player-counts, as with more players timing-control also decreases, making a great many of the more subtle and time-consuming timing games unviable.


  1. Early experience: Lokomotive Werks 

  2. I’d never expected to describe Lokomotive Werks as more relenting

  3. As in most of the 18xx, 3-trains are the best trains in the game. 

  4. Most of our games have spent more time in stock rounds than operating rounds. 

  5. Destroying stock values all the while! 

  6. This is considerably easier with some companies than others. 

  7. Companies may sell their trains to the bank (and out of the game) for a marginal value. 

Twitter Week: 2009-06-27

  • The hummingbird chicks by my door are growing apace: http://twitpic.com/86zp9 Fed on the spiders from the junipers, they’ll be flying soon! #
  • @ingredientx This is the Valley. No way in hell Twitter will run out of money. VCs beg to give them money. The ecosystem has really started. in reply to ingredientx #
  • @ingredientx They’ve a long way to run before monetisation is an issue. They have the eyeballs: that’s all that’s required for some years. in reply to ingredientx #
  • @ingredientx I went through the bubble at VA Research, Nuron, Critical Path, Protego Networks etc. I grok. I think they’ll make it. in reply to ingredientx #
  • Looking into #Django. There’s a fair bit to like here for a rapid development platform, esp if your code is also high velocity. #
  • @ingredientx Hehn. Yet more echoes of Lokomoticve Werks? The local complaint has been the hidden/uncertain demand. (I’ve not played yet) in reply to ingredientx #
  • @rholzgrafe Congrats! in reply to rholzgrafe #
  • Thinking of learning/using #Django to parse the #18xx differences list into a RDBMS so that game-specific views may be extracted. #
  • @brettspiel Dude, I told you to see Coraline 3D at the tme! It was exemplary. Yet to see UP 3D, but may this week. in reply to brettspiel #

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.