Posts about Game Projects (old posts, page 20)

Ricochets toward stability

I haven’t gotten as much Muck & Brass played lately as I’d like, but I’m not complaining too hard given what else managed to hit the table (mostly a lot of 1889). That said and forgiven, I’m particularly pleased with how the new action selection method is working out in practice. The recent changes are two-fold:

  1. Action distribution changed to 3 Capitalise, 5 Develop, 7 Expand
  2. A Neuland/Thebes/etc-like combined action costing turn order mechanism is used to control turn order1.

The result is surprisingly dynamic. Wabash Cannonball has a fairly rote sequence of action selections in each round: 3 Capitalise followed by 5 Expand. Conversely Muck & Brass averages somewhere between 1 and 2 Capitalise actions per round with both 0 and 3 Capitalise actions in a round occuring if infrequently. The shift away from Capitalisation not only leads to increasingly cash-strapped companies but to a hurdy-gurdy pattern as the players struggle to balance short-term need with long-term viability. The patterns are delightful.

The core of the pattern is that a Capitalise early in the round takes so long (3 months) that it grants an enormous range of options and flexibility to the other players. Given the game’s blinding focus on liquidity, that’s simply unaffordable. The only players who seriously consider Capitalisation are the high-cash players who can be assured of winning the share. The result is that the early portion of rounds are dominated by Expands and Develops, the Develops usually being used to slip in an extra free action while catching up to a player earlier in the turn order. Then, as the end of the round approaches, usually it is the players early in the turn order who have the most control over when the round ends. They could Capitalise but their low cash position (which puts them early in the turn order) makes them unlikely to be able to win a share and none of the positions have developed enough to make alliance hunting/breaking viable – and in the meantime the Expand and Develop are both about to exhaust, ending the round anyway! Thus there’s great incentive to not Capitalise.

Which is fine and great until the companies start to run out of money. If a share isn’t capitalised those companies are dead ducks. This point usually hits either late in the second round or early in the third round, at which point there’s an added complexity. The fourth round is approaching, with its support for mergers, ports, double Expands, etc. The players are torn in multiple ways. They are still desperate for personal cash but they also want to start the next round with low cash (and high income) so as to have the positional control of early turn order, they have to get their companies Capitalised if they are to remain viable, and they have to build a tactical position to offer personally-advantageous ports-builds and mergers for when the fourth round starts. And just to make it worse, buying good shares will all too often earn such good dividends as to put the player late in the turn order! Arghh!

Then the fourth round starts, strong share-holders strive to merge their companies, accumulating their incomes and hopefully setting up a domino trail of mergers, weak share-holders build expensive ports to cripple their low-stake companies, leaving those companies prostrate to be merged into, hopefully by the companies they have larger holdings in. Meanwhile little tactical Expands, setting up honeypots and barriers for mergers and ports continues setting the scene. And again, companies are running out of money – except that now there are no shares left to sell to raise capital (only 3 per company)! Meanwhile the second round companies start to float, merging with the first round companies and injecting capital into their treasuries.

Often the game will end in the 5th or 6th round. It seems to only run until the 7th round if players have been really aggressive with the second round companies, blocking them out, building up their revenues and delaying the game while their income rate recovers their cash position. Certainly proper control and prediction of the second round companies can make the Wabash in Wabash Cannonball seem like a cakewalk.

It is all very delightfully tortured.


  1. Actions are assigned costs in terms of time: Capitalise (3 months), Develop (1 month), Expand (2 months).. As players select actions their markers are moved forward on a track. The player that has spent the least time and started the round with the least cash has the current turn. Iterate until two players have used more than 5 months. 

Questions of breeding and selection

Consider a game with a number of possible player actions. Actions are limited to a fixed distribution (N of X, M of Y etc). Each action has a duration cost. The actions are represented as cards, one card per action in the distribution.

Arbitrarily order the players. In turn order each player draughts an action from the available set of actions and places it at the end of a growing sequence of action cards. Do this until all actions have been placed into that sequence. Put the player markers on the first, second, third etc cards in the sequence in accordance with their initial player ordering.

The player whose marker is earliest on the action card track has the current turn. On their turn a player does an action. They either do the action of the card their marker is on or pay a fee and to move their marker to and do an action further ahead in the line. The fee is proportional to how far ahead they go. Action cards which have player markers on them are not available. After doing their selected action the player moves their marker forward by a number of cards equal to the duration cost of the action they selected. The card for the executed action is discarded. Depending on the duration and placement of their action selections a player may have multiple turns in a row. Any cards which end up earlier than all player markers upon a different player taking a turn are put at the other end of the action card track in an order selected by the active player.

This process repeats until some round ending condition (eg all of two actions done or only N possible actions left in the track) . The next round starts with building a new action track using the discarded cards on the end of the current track.

Stock market reduction

We’ve been playing 1889 lately (3 games in three days). It sparked the following game notion (and thus the creation of this category):

  • Something akin to an 1830-esque 2D stock market
  • A fairly large deck of cards, each card bearing the name of a company and an arrow (right, left, up, down)
    • Some cards may have double arrows
  • The deck of cards is shuffled and some number are laid out in an ordered draught pool
    • The draught pool should be long, providing a long view into the future.
  • One their turn a player may: 1. Buy one share
    • If all shares of a company are in player’s hands at the end of a round, the stock value moves up a row 1. Sell any number of shares
    • On share sales, stock value moves down one row per sold share 1830-style 1. Play one or two cards from their hand
    • Each played card affects the stock value of the names company by moving its stock value in the arrowed direction
    • Assume a smallish hand-size limit, perhaps 5 1. Draught any two cards from the pool
    • As soon as a card is draughted a new card is drawn and added to the new end of the draught pool
    • The oldest card is free
    • If one of the new cards is draughted the draughting player must place $N on each older card in the draught pool, sweetening those cards for later players
    • If a card bearing money is draughted the draughting player takes the money
  • The Game is played until the card deck is exhausted
  • The deck is then inverted (no shuffling) and the game continues through the ordered deck
  • Once the draught deck is exhausted the game is over
    • Players cash in their shares
    • Player with the largest net worth wins

Possible extension:

  • Instead of the cards bearing a company and an arrow, have two decks, one of companies and another of arrows and players must draught one card from each deck’s pool and play two cards (one of each) on their turn

In for a pound

Structures to toy with:

  • Tichu-style, the hand starts with a round of passing:
  • Two cards to each player
  • Review the passed cards
  • Two more cards to your partner
  • It is possible that’s too much passing
  • Played cards are arranged in a 2D grid. Each row and column of contiguous cards must either form a meld or a legal subset of a meld
  • Cards may only be played in positions in which they extend (potential) melds both directions
  • Cards may not be played in positions in which they conflict with potential melds in any direction
    • Are full houses legal melds?
    • Stairs?
  • One their turn a player may play a single card or pass
  • If they play a single card they may then do one of:
  • Play a second card adjacent to the first (any direction)
  • Play a PASS card
    • Each player has N PASS cards
    • PASS cards immediately pass control to the partner and are lost when played
  • Place or recover their BLOCK
    • Each player has one BLOCK
    • BLOCKs mark positions that may not be played in
    • Should a trick end while blocks are still in play they are lost
  • Pass
  • Suits should probably wrap, 10-11-12-1-2 style

Divination of intent and thence coordination seems the core problem of a partnership game. More standard partnership card games communicate richly by what is/is_not played when and how that pattern relates to the goals of the partnership. Not One More also supports extensive signalling in the card grid, but it is both extraordinarily rich and extraordinarily diffuse, making divination and coordination hard. The primary idea of the above structures is to add more discrete signalling methods between partners.

Deconstructed Uno

A chat with Ben Keightley on #bgdf_chat (I’m using the wonderful irssi instead of BitchX these days, so the formatting is a little different than previous log posts):

11:34 | clearclaw > You rarely play card games, right Ben?

11:35 | Coca_Lite > That’s right, I don’t play a lot of card games.

11:35 > clearclaw nods

11:35 | Coca_Lite > Not ‘traditional’ card games, anyway. I play a lot of Race for the Galaxy but I don’t think that’s what you mean.

11:35 > clearclaw nods. I’ve been noodling a sort of reverse climbing game

11:37 | clearclaw > The core element of the noodle is that played cards form melds against the other player’s played cards

11:37 | clearclaw > And the player of the last card that is part of the highest value meld is the current trick-winner

11:37 | clearclaw > The idea is to extend hand-management out of just to player’s hand to extend across all the hands of all the players.

11:37 | Coca_Lite > Love it.

11:39 | clearclaw > Thus one player leads an ace, another follows with a second ace and is therefore winning with a pair of aces, a third plays a 2, someone plays a pair of twos and is winning with trip 2s, then someone plays 3/4/5 to win with the A/2/3/4/5 etc.

11:40 | Coca_Lite > Yes, I love it. Lately you can take any game and add ‘…without the auction!’ to it, and I’m sold. Your game sounds like Modern Art…without the auction.

11:41 > clearclaw grins. I kinda like it too. Had the idea and posted it last night.

12:28 | clearclaw > Naming the inverse climbing game NotOneMore for the nonce, Tichu-style stairs are simply too hard to calculate comparative probabilities on.

12:29 | clearclaw > That leaves either the standard meld types of pairs, trips, 4-of-a-kind and rummy-esque runs, or going for the Poker set.

12:29 | clearclaw > Current thoughts are:

12:30 | clearclaw > Must either follow suit lead or must extend what has already been played toward a potentially winning meld or must fold.

12:30 | clearclaw > If fold can’t play in that trick any more

12:32 | clearclaw > Once all players pass trick is resolved

12:32 | clearclaw > Possible: If all players pass except the last player to play a card, they may NOT play again.

12:33 | clearclaw > Player may play one or two cards on their turn.

12:34 | clearclaw > Thinking of making melds have the value of the lowest card in them. That would weaken the already enormously powerful straights.

12:35 | clearclaw > Physicality would be all players toss cards into the central pot. As each player takes the lead they take the cards they want from the pot and build their winning meld before them.

12:35 | clearclaw > As they are superceded they toss that back in and another player builds the new winning meld.

12:37 | Coca_Lite > Once a card is ‘committed’ to a meld, it should stay there. No rearranging melds willy-nilly.

12:37 | clearclaw > Why?

12:38 | clearclaw > (asides from the explosive complexity)

12:38 | Coca_Lite > Explosive complexity, and to force early commitments by players.

12:38 | clearclaw > Fair point

12:39 | clearclaw > I’ve been more worried by having the game consist of only one trick as all players play all their cards in the first trick

12:40 | clearclaw > I had been thinking of various 2D arrangements of cards which expressed multi-member participations.

12:40 | clearclaw > And each player has a marker. If the marker is on the graph they are winning. As they are superceded another player becomes King of the Hill.

12:41 | clearclaw > Having committed cards would reduce the single-trick problem greatly.

12:41 | clearclaw > And would put in some interesting hand-management aspects.

12:42 | Coca_Lite > OK, or something like: each player has his own deck of cards with a colored back. Cards contributed to melds score for owners.

12:50 | clearclaw > How about each player plays 1 or 2 cards. The first card must be placed adjacent to a previously played card and the next card (if played) adjacent to that. If the player’s played card(s) form a winning meld they put their marker on one. Any previous player’s marker is removed from the board.

12:51 | clearclaw > Rows and columns of cards must either form legal melds or fractions there-of

12:51 | clearclaw > The value of a meld is the lowest value card in the meld

12:52 | Coca_Lite > Yeesh, it’s starting to sound like deconstructed Uno

12:52 | clearclaw > Scrabble-icious.

12:52 | clearclaw > I thought Uno was only a matching game?

12:52 > clearclaw has never played Uno

12:53 | doho123 > Uno is crazy eights

12:53 | doho123 > Match either the rank or suit of the previously played card

12:53 | clearclaw > I’ve not played that either. Just read the ‘geek page.

12:54 | clearclaw > Discard matching.

12:54 | doho123 > Right

12:54 | clearclaw > The “array” is sort of an agglomerative discard pile I guess.

12:55 | clearclaw > Yes, deconstructed Uno. Ha!

Tricky climb

An odd idea, not yet fully enfranchised into a game. Consider a (relatively standard) climbing game, perhaps along the lines of Mu, however rather than players playing cards in sets they would iteratively play them one at a time until everyone passes1. The key element would be that rather than a player’s played cards forming the sets within themselves, they would instead form sets within the space of all cards played for that “trick”. For instance:

  1. PlayerA: Leads an Ace.
  2. PlayerB: Follows with another Ace and is therefore winning with two Aces.
  3. PlayerC: Follows with an 8.
  4. PlayerD: Follows with a pair of 8s and is therefore winning with three 8s. …etc.

Problem:

  • Determining who is winning the current “trick”.
  • Requirements for following.
  • How points are assigned
  • Method required to denote who is currently winning the trick

Initial thoughts:

  • 5 suits (perhaps a Sticheln deck)
  • Do not need to follow suit
  • May play any number of cards so long as the total number of cards played by that player in the trick is no more than one larger than the total number of cards played by the previously card-count leader[^2].
  • Suits are circularly ordered with the lead suit high and the others following in a constant rotational order
  • Standard meld definitions including Tichu’s stairs.
  • Each meld in the taken trick scores the value of the highest card in the meld, with arrangement of melds organised so as to minimise left over cards
  • Left over cards and singletons don’t score

  1. Echoes of Mu’s bidding again. 

Decay of fortunate capacity

Power Grid’s market system with the two layers of plants is interesting and provides a deceptively large degree of control and prediction. It really is quite clever while presenting a surprisingly predictable pattern. Space Race has the problem that while it models something akin to the 18XX train rusting progression, the intended sequence is so short (3 layers) that incentivising player progression is worse than tetchy. I’m not sure I can learn from Power Grid here, but it is tempting.

A possible address is to model the total productive capacity of the system, to cumulatively sum the total production to date. As that total production volume crosses pre-set thresholds the next layer becomes available and of course as the third layer is entered all level 1 factories rust. This could essentially arithmetic sum could be modelled in several ways, actually tracking total production volume as a calculated sum or simply having bits from a limited supply which are discarded as they are used1.

With such an approach it becomes tempting to add a fourth level of factory, a pure consumer. We could call it the Centre Of Government or some such silliness (themed after Asimov’s Foundation universe?). It would either be notably expensive or force auctioned at another production volume threshold. There would be only one CoG, and while it wouldn’t necessarily rust the level 2 factories2 it would consume both level 2 and level 3 goods until the end of the game, with all fees and payments recorded as usual for route-based deliveries. Variously interesting curves could be applied to the system. Perphaps the market value of the CoG pseudo-product would likely decline continuously, forcing a race between additional factory construction/operation, run-away CoG ROI and endgame acceleration? Similarly a race could be constructed between the level 2 and level 3 factories based on the game-length required for equivalent profit volume3?

Such a system has advantages. The level 1 factories would be (mostly) unprofitable but failing to buy into them would allow those that do to be extremely profitable and to have undue leverage into the level 2 factories and economy. The real value of the level 1 factories would be to establish market relationships for exploitative level 2 factory upgrades which would actually be profitable. This would of course also require ensuring a limited supply of Level 2 factories (possibly by spacing rules rather than count?). The level 3 factories would then be similarly constrained4. And likewise for the level 4 CoG factory: placement constricted by neighbourhood. Such placement rules could be quite interesting and offer an attractive short-long planning aspect.

Methinks I should spend more time in the shower.


  1. If the progression needs to be a little more complex than a straight sum, then extra units could be discarded to act as a controlled accelerator. For instance each turn’s production is discarded along with a matching set of the most voluminously produced colour. 

  2. This needs to be examined in some detail. It is tempting to not ruse the level 2 factories and thus provide a profit race between the level 2 and level 3 factories. Conversely it is tempting to rust the level 2 factories and thus provide a severe investment management headache 

  3. Echoes of the Wabash in Wabash Cannonball. 

  4. Likely a formal proof would be needed to ensure that deadlock spacing arrangements wouldn’t be possible 

Shading dark

I generated a 7-depth Penrose tiling last night. It took most of the night.

Axiom:
  [N]++[N]++[N]++[N]++[N]
Rules:
  M=OA++pA—-NA[-OA----MA]++;
  N=+OA–PA[---MA--NA]+;
  O=-MA++NA[+++OA++PA]-;
  P=–OA++++MA[+PA++++NA]–NA;
  A=
Angle:36

The tiled SVG’s generated by the L-System are prone to very high rates of duplicate elements. They’re also extremely slow and system intensive to process under Inkscape as the entire graph is rendered as a single bazillion-point object. Handling the performance problem is simple enough: Inkscape/Edit/Select_All and then break up the object with Inkscape/Path/Break_Apart. Ahh, much better.

Handling the duplicates is tougher. There are simple duplicate elements, PATH elements with identical attributes and vertices and there are path elements which are identical except that they list the vertices in a different order. The former are easy to remove. Just fold the raw XML document so that all PATH entries occupy but a single line, sort the PATH elements and then remove all duplicates. In my case I just extracted the PATH elements to an external text file, wrote a quick XEmacs macro to make each PATH element single-line and then did:

$ sort outfile.xml | uniq 

Voila! All identical PATH elements removed. This simplistic dupe-removal reduced the file size by approximately 30%.

I looked at removing the duplicate-vertex elements but found it too hard for a quick hack fix. In short I’d have to extract all the path elements and then the vertices for each element, sort them and then do duplicate removal. That was more than I was willing to be bothered with. However while wandering the data I noticed that there were many 7 vertex elements whose vertices precisely overlaid the vertexes of other elements (exception: a small few elements at the edge of the graph). With the exception of the ones at the edge of the graph, they were all redundant. Remove them:

$ grep -v "path.*M.*L.*L.*L.*L.*L.*L"  outfile.svg

While a plain white mesh is pleasantly clear, I had the idea of colouring the tiles to give a bit of a stereoscopic effect.

#! /usr/bin/env python
import sys
in_f = open (sys.argv[1], "r")
out_f = open (sys.argv[2], "w")
ndx = 0
for line in in_f:
  if ndx % 3 == 1:
    line = line.replace ('fill:none', 'fill:#999999')
  if ndx % 3 == 2:
    line = line.replace ('fill:none', 'fill:#cccccc')
  out_f.write (line)
  ndx += 1
in_f.close ()
out_f.close ()

The effect of which is to assign a fill colour to two thirds of the elements, a different colour for each third

Inkscape-LSystem-PenroseRender-Big-Coloured

I like it.

Inkscape, L-Systems, SVG, Penrose and other tilings

I’ve been playing with the L-System support in Inkscape, generating Penrose Tilings. Damn this is clever neat nifty fun!

Axiom: 
  [N]++[N]++[N]++[N]++[N]
Rules:
  M=OA++pA----NA[-OA----MA]++;
  N=+OA--PA[---MA--NA]+;
  O=-MA++NA[+++OA++PA]-;
  P=--OA++++MA[+PA++++NA]--NA;
  A=
Angle:36

Just drop that into Inkscape/Effect/Render/L-System (put all the rules on one line) and you should get this:

Inkscape-LSystem-PenroseRender

Increase the Order value and it will iterate more, drawing a larger graph. Be careful though as execution time grows exponentially as the number of iterations grows.

Inkscape-LSystem-PenroseRender-Big

Some other L-system-derived graphs produced with Inkscape:

Axiom:
  f
Rules:
  f=-f+f+g[+f+f]-;
  g=gg;
Angle: 60

LSystem-Hex

Or perhaps more entertainingly:

Axiom:
  W
Rules:
  W=+++X--F--ZFX+;
  X=---W++F++YFW-;
  Y=+ZFX--F--Z+++;
  Z=-YFW++F++Y---;
Angle: 30

LSystem-Lace

Yes, that’s a single continuous line in what is known as a space filling curve. Wander about Wikipedia or with a search engine and you’ll find many other little L-system programs for other tilings or space filling curves. Plug them in and play! They’re not only a heck of a lot of fun but such curious tilings can easily form the backdrop for interesting games and there are many many such interesting patterns.

5711f24bc6717f9efd48c93e82fbc2e1