|
From: Erik V. <ev...@us...> - 2012-02-16 15:35:33
|
rails/game/GameManager.java | 7
rails/game/GameManagerI.java | 4
rails/game/specific/_1835/StartRound_1835.java | 16 -
test/data/test/1835_NatSingleShare.report | 339 +++++++++++++++++++---
test/data/test/1835_SwapPresForDoubleShare.report | 339 +++++++++++++++++++---
5 files changed, 629 insertions(+), 76 deletions(-)
New commits:
commit f311be5af549febd7e4d81cefaf2097c0d07c7e6
Merge: 190aa16 366e5cf
Author: Erik Vos <eri...@xs...>
Date: Thu Feb 16 16:35:19 2012 +0100
Merge branch 'master' of ssh://rails.git.sourceforge.net/gitroot/rails/rails
commit 190aa165b93f5a1ab9b4454d9906e6ddb1979e99
Author: Erik Vos <eri...@xs...>
Date: Thu Feb 16 16:32:58 2012 +0100
Fixed start round number management for 1835 JUnit testing.
The start round number has been moved from StartRound_1835 to GameManager and is now a generic feature, though it is only used yet in 1835.
It is no longer Java-static.
The same applies to the turn number, which stayed in StartRound_1835.
The NatDoubleShare test case now works.
The NatSingleShare and SwapPresForDoubleShare cases were wrong and have been replaced.
diff --git a/rails/game/GameManager.java b/rails/game/GameManager.java
index f35ed6a..c147924 100644
--- a/rails/game/GameManager.java
+++ b/rails/game/GameManager.java
@@ -110,6 +110,9 @@ public class GameManager implements ConfigurableComponentI, GameManagerI {
protected State currentRound = new State("CurrentRound", Round.class);
protected RoundI interruptedRound = null;
+ /** Number of the current start round. Currently only used in some 1835 variants. */
+ protected IntegerState startRoundNumber = new IntegerState ("StartRoundNumber", 0);
+
protected IntegerState srNumber = new IntegerState ("SRNumber");
protected IntegerState absoluteORNumber =
@@ -721,6 +724,7 @@ public class GameManager implements ConfigurableComponentI, GameManagerI {
System.exit(1);
}
StartRound startRound = createRound (startRoundClass);
+ startRoundNumber.add(1);
startRound.start ();
}
@@ -805,6 +809,9 @@ public class GameManager implements ConfigurableComponentI, GameManagerI {
return numOfORs.getText();
}
+ public int getStartRoundNumber () {
+ return startRoundNumber.intValue();
+ }
/* (non-Javadoc)
* @see rails.game.GameManagerI#getSRNumber()
*/
diff --git a/rails/game/GameManagerI.java b/rails/game/GameManagerI.java
index 06b404c..92f2a88 100644
--- a/rails/game/GameManagerI.java
+++ b/rails/game/GameManagerI.java
@@ -41,6 +41,8 @@ public interface GameManagerI extends MoveableHolder, ConfigurableComponentI {
public int getRelativeORNumber();
public int getAbsoluteORNumber ();
+ public int getStartRoundNumber ();
+
public abstract int getSRNumber();
public abstract void startShareSellingRound(Player player, int cashToRaise,
@@ -101,7 +103,7 @@ public interface GameManagerI extends MoveableHolder, ConfigurableComponentI {
public abstract RoundI getCurrentRound();
public abstract ModelObject getCurrentRoundModel();
-
+
public abstract ModelObject getCurrentPlayerModel();
/**
diff --git a/rails/game/specific/_1835/StartRound_1835.java b/rails/game/specific/_1835/StartRound_1835.java
index 0768fce..f0f6b98 100644
--- a/rails/game/specific/_1835/StartRound_1835.java
+++ b/rails/game/specific/_1835/StartRound_1835.java
@@ -16,10 +16,7 @@ import rails.game.state.IntegerState;
public class StartRound_1835 extends StartRound {
/* To control the player sequence in the Clemens and Snake variants */
- private static IntegerState turn = new IntegerState("TurnNumber", 0);
-
- private static IntegerState startRoundNumber =
- new IntegerState("StartRoundNumber", 0);
+ private IntegerState turn = new IntegerState("TurnNumber", 0);
/* Additional variants */
public static final String CLEMENS_VARIANT = "Clemens";
@@ -41,7 +38,6 @@ public class StartRound_1835 extends StartRound {
@Override
public void start() {
super.start();
- startRoundNumber.add(1);
if (variant.equalsIgnoreCase(CLEMENS_VARIANT)) {
setCurrentPlayerIndex (numPlayers-1);
@@ -173,7 +169,7 @@ public class StartRound_1835 extends StartRound {
/* Select the player that has the turn. */
- if (startRoundNumber.intValue() == 1) {
+ if (gameManager.getStartRoundNumber() == 1) {
/*
* Some variants have a reversed player order in the first or second
* cycle of the first round (a cycle spans one turn of all players).
@@ -203,9 +199,11 @@ public class StartRound_1835 extends StartRound {
setCurrentPlayerIndex(newIndex);
Player newPlayer = getCurrentPlayer();
log.debug("Game turn has moved from " + oldPlayer.getName()
- + " to " + newPlayer.getName() + " [startRound="
- + startRoundNumber + " cycle=" + cycleNumber + " turn="
- + turnNumber + " newIndex=" + newIndex + "]");
+ + " to " + newPlayer.getName()
+ + " [startRound=" + gameManager.getStartRoundNumber()
+ + " cycle=" + cycleNumber
+ + " turn=" + turnNumber
+ + " newIndex=" + newIndex + "]");
} else {
diff --git a/test/data/test/1835_NatSingleShare.report b/test/data/test/1835_NatSingleShare.report
index f1eadbb..a7d01c4 100644
--- a/test/data/test/1835_NatSingleShare.report
+++ b/test/data/test/1835_NatSingleShare.report
@@ -10,43 +10,43 @@ StartOfInitialRound
HasPriority,T1
BuysItemFor,T3,M5,80
FloatsWithCash,M5,80
-BuysItemFor,T1,M1,80
+BuysItemFor,T2,M1,80
FloatsWithCash,M1,80
-BuysItemFor,T2,M3,80
+BuysItemFor,T1,M3,80
FloatsWithCash,M3,80
-BuysItemFor,T3,M6,80
+BuysItemFor,T1,M6,80
FloatsWithCash,M6,80
-BuysItemFor,T1,M2,170
+BuysItemFor,T2,M2,170
FloatsWithCash,M2,170
-BuysItemFor,T2,PRES_CERT_NAME,BY,20,184
-BuysItemFor,T3,LD,190
-ALSO_GETS,T3,PRES_CERT_NAME,SX,20
-BuysItemFor,T1,HB,160
-BuysItemFor,T2,OBB,120
+BuysItemFor,T3,PRES_CERT_NAME,BY,20,184
+BuysItemFor,T1,LD,190
+ALSO_GETS,T1,PRES_CERT_NAME,SX,20
+BuysItemFor,T2,HB,160
+BuysItemFor,T3,OBB,120
+ALSO_GETS,T3,CERT_NAME,BY,10
+BuysItemFor,T1,BB,130
+BuysItemFor,T2,NF,100
ALSO_GETS,T2,CERT_NAME,BY,10
-BuysItemFor,T3,BB,130
-BuysItemFor,T1,NF,100
-ALSO_GETS,T1,CERT_NAME,BY,10
-BuysItemFor,T2,M4,160
+BuysItemFor,T3,M4,160
FloatsWithCash,M4,160
-CannotBuyAnything,T3
CannotBuyAnything,T1
CannotBuyAnything,T2
+CannotBuyAnything,T3
Has,M1,80
Has,M2,170
Has,M3,80
Has,M4,160
Has,M5,80
Has,M6,80
-Has,T1,90
-Has,T2,56
-Has,T3,120
+Has,T1,120
+Has,T2,90
+Has,T3,56
START_OR,0.0
-ReceivesFor,T1,5,NF
-ReceivesFor,T2,10,OBB
-ReceivesFor,T3,20,LD
-ReceivesFor,T3,25,BB
-ReceivesFor,T1,30,HB
+ReceivesFor,T2,5,NF
+ReceivesFor,T3,10,OBB
+ReceivesFor,T1,20,LD
+ReceivesFor,T1,25,BB
+ReceivesFor,T2,30,HB
ShortORExecuted
Has,M1,80
Has,M2,170
@@ -54,13 +54,14 @@ Has,M3,80
Has,M4,160
Has,M5,80
Has,M6,80
-Has,T1,125
-Has,T2,66
-Has,T3,165
+Has,T1,165
+Has,T2,125
+Has,T3,66
StartOfInitialRound
-HasPriority,T3
-BuysItemFor,T3,PfB,150
-ALSO_GETS,T3,CERT_NAME,BY,10
+HasPriority,T1
+CannotBuyAnything,T3
+BuysItemFor,T1,PfB,150
+ALSO_GETS,T1,CERT_NAME,BY,10
FloatsWithCash,BY,460
Has,M1,80
Has,M2,170
@@ -69,9 +70,281 @@ Has,M4,160
Has,M5,80
Has,M6,80
Has,BY,460
-Has,T1,125
-Has,T2,66
-Has,T3,15
+Has,T1,15
+Has,T2,125
+Has,T3,66
StartStockRound,1
-HasPriority,T1
-LoadInterrupted,13
+HasPriority,T2
+BUY_SHARE_LOG,T2,10,BY,IPO,92
+PriceIsPaidTo,92,BY
+PASSES,T3
+PASSES,T1
+PASSES,T2
+
+END_SR,1
+Has,M1,80
+Has,M2,170
+Has,M3,80
+Has,M4,160
+Has,M5,80
+Has,M6,80
+Has,BY,552
+Has,T1,15
+Has,T2,33
+Has,T3,66
+START_OR,1.1
+ReceivesFor,T2,5,NF
+ReceivesFor,T3,10,OBB
+ReceivesFor,T1,15,PfB
+ReceivesFor,T1,20,LD
+ReceivesFor,T1,25,BB
+ReceivesFor,T2,30,HB
+
+CompanyOperates,M1,T2
+LaysTileAt,M1,201,H2,SW
+CompanyDoesNotPayDividend,M1
+BuysTrain,M1,2,IPO,80
+FirstTrainBought,2
+
+CompanyOperates,M2,T2
+LaysTileAt,M2,8,E17,NW
+CompanyDoesNotPayDividend,M2
+BuysTrain,M2,2,IPO,80
+
+CompanyOperates,M3,T1
+LaysTileAt,M3,6,F14,NW
+CompanyDoesNotPayDividend,M3
+BuysTrain,M3,2,IPO,80
+
+CompanyOperates,M4,T3
+LaysTileAt,M4,57,G5,SW
+CompanyDoesNotPayDividend,M4
+BuysTrain,M4,2,IPO,80
+BuysTrain,M4,2,IPO,80
+
+CompanyOperates,M5,T3
+LaysTileAt,M5,8,D18,NE
+CompanyDoesNotPayDividend,M5
+BuysTrain,M5,2,IPO,80
+
+CompanyOperates,M6,T1
+LaysTileAt,M6,9,B10,NW
+CompanyDoesNotPayDividend,M6
+BuysTrain,M6,2,IPO,80
+
+CompanyOperates,BY,T3
+LaysTileAt,BY,202,O15,E
+LaysTileAt,BY,8,O13,NW
+CompanyDoesNotPayDividend,BY
+PRICE_MOVES_LOG,BY,92,C3,86,B3
+BuysTrain,BY,2,IPO,80
+BuysTrain,BY,2,IPO,80
+All 2-trains are sold out, 2+2-trains now available
+BuysTrain,BY,2+2,IPO,120
+FirstTrainBought,2+2
+
+EndOfOperatingRound,1.1
+ORWorthIncrease,T1,1.1,54
+ORWorthIncrease,T2,1.1,23
+ORWorthIncrease,T3,1.1,-8
+Has,M1,0
+Has,M2,90
+Has,M3,0
+Has,M4,0
+Has,M5,0
+Has,M6,0
+Has,BY,272
+Has,T1,75
+Has,T2,68
+Has,T3,76
+StartStockRound,2
+HasPriority,T3
+PASSES,T3
+PASSES,T1
+PASSES,T2
+
+END_SR,2
+Has,M1,0
+Has,M2,90
+Has,M3,0
+Has,M4,0
+Has,M5,0
+Has,M6,0
+Has,BY,272
+Has,T1,75
+Has,T2,68
+Has,T3,76
+START_OR,2.1
+ReceivesFor,T2,5,NF
+ReceivesFor,T3,10,OBB
+ReceivesFor,T1,15,PfB
+ReceivesFor,T1,20,LD
+ReceivesFor,T1,25,BB
+ReceivesFor,T2,30,HB
+
+CompanyOperates,M1,T2
+LaysTileAt,M1,9,J2,NW
+CompanyRevenue,M1,40
+CompanySplits,M1,40
+M1 receives 20
+Payout,T2,20,1,100
+
+CompanyOperates,M2,T2
+LaysTileAt,M2,8,D16,SE
+CompanyRevenue,M2,0
+CompanyDoesNotPayDividend,M2
+
+CompanyOperates,M3,T1
+LaysTileAt,M3,4,G15,NW
+CompanyRevenue,M3,40
+CompanySplits,M3,40
+M3 receives 20
+Payout,T1,20,1,100
+
+CompanyOperates,M4,T3
+LaysTileAt,M4,2,H4,NE
+CompanyRevenue,M4,30
+CompanySplits,M4,30
+M4 receives 15
+Payout,T3,15,1,100
+
+CompanyOperates,M5,T3
+LaysTileAt,M5,8,C19,E
+CompanyRevenue,M5,50
+CompanySplits,M5,50
+M5 receives 25
+Payout,T3,25,1,100
+
+CompanyOperates,M6,T1
+LaysTileAt,M6,6,A11,NW
+CompanyRevenue,M6,60
+CompanySplits,M6,60
+M6 receives 30
+Payout,T1,30,1,100
+
+CompanyOperates,BY,T3
+LaysTileAt,BY,8,N16,SW
+LaysTileAt,BY,4,M15,NW
+LaysTileAt,BY,6,N12,NW
+LAYS_TOKEN_ON,BY,L14,60
+CompanyRevenue,BY,130
+CompanyPaysOutFull,BY,130
+Payout,T1,13,1,10
+Payout,T2,26,2,10
+Payout,T3,39,3,10
+PRICE_MOVES_LOG,BY,86,B3,92,C3
+
+EndOfOperatingRound,2.1
+ORWorthIncrease,T1,2.1,129
+ORWorthIncrease,T2,2.1,93
+ORWorthIncrease,T3,2.1,107
+Has,M1,20
+Has,M2,90
+Has,M3,20
+Has,M4,15
+Has,M5,25
+Has,M6,30
+Has,BY,212
+Has,T1,198
+Has,T2,149
+Has,T3,165
+StartStockRound,3
+HasPriority,T3
+BUY_SHARE_LOG,T3,10,BY,IPO,92
+PriceIsPaidTo,92,BY
+BUY_SHARE_LOG,T1,10,BY,IPO,92
+PriceIsPaidTo,92,BY
+BUY_SHARE_LOG,T2,10,BY,IPO,92
+PriceIsPaidTo,92,BY
+PASSES,T3
+BUY_SHARE_LOG,T1,10,BY,IPO,92
+PriceIsPaidTo,92,BY
+SELL_SHARE_LOG,T1,10,BY,92
+PRICE_MOVES_LOG,BY,92,C3,88,C4
+PASSES,T2
+PASSES,T3
+SELL_SHARE_LOG,T1,10,BY,88
+PRICE_MOVES_LOG,BY,88,C4,86,C5
+BUY_SHARE_LOG,T1,10,SX,IPO,88
+PASSES,T2
+PASSES,T3
+SELL_SHARE_LOG,T1,10,BY,86
+PRICE_MOVES_LOG,BY,86,C5,82,C6
+BUY_SHARE_LOG,T1,10,SX,IPO,88
+PASSES,T2
+PASSES,T3
+BUY_SHARE_LOG,T1,10,SX,IPO,88
+FloatsWithCash,SX,440
+PASSES,T2
+PASSES,T3
+PASSES,T1
+
+END_SR,3
+Has,M1,20
+Has,M2,90
+Has,M3,20
+Has,M4,15
+Has,M5,25
+Has,M6,30
+Has,BY,580
+Has,SX,440
+Has,T1,16
+Has,T2,57
+Has,T3,73
+START_OR,3.1
+ReceivesFor,T2,5,NF
+ReceivesFor,T3,10,OBB
+ReceivesFor,T1,15,PfB
+ReceivesFor,T1,20,LD
+ReceivesFor,T1,25,BB
+ReceivesFor,T2,30,HB
+
+CompanyOperates,M1,T2
+LaysTileAt,M1,4,K3,NW
+CompanyRevenue,M1,40
+CompanySplits,M1,40
+M1 receives 20
+Payout,T2,20,1,100
+
+CompanyOperates,M2,T2
+LaysTileAtFor,M2,8,D14,NW,50
+CompanyRevenue,M2,70
+CompanySplits,M2,70
+M2 receives 35
+Payout,T2,35,1,100
+
+CompanyOperates,M3,T1
+LaysTileAt,M3,57,H16,NW
+CompanyRevenue,M3,40
+CompanySplits,M3,40
+M3 receives 20
+Payout,T1,20,1,100
+
+CompanyOperates,M4,T3
+LaysTileAt,M4,58,F6,E
+CompanyRevenue,M4,60
+CompanySplits,M4,60
+M4 receives 30
+Payout,T3,30,1,100
+
+CompanyOperates,M5,T3
+CompanyRevenue,M5,50
+CompanySplits,M5,50
+M5 receives 25
+Payout,T3,25,1,100
+
+CompanyOperates,M6,T1
+LaysTileAt,M6,58,B12,SW
+CompanyRevenue,M6,60
+CompanySplits,M6,60
+M6 receives 30
+Payout,T1,30,1,100
+
+CompanyOperates,SX,T1
+LaysTileAt,SX,56,I17,NE
+LaysTileAt,SX,202,H20,W
+CompanyDoesNotPayDividend,SX
+PRICE_MOVES_LOG,SX,88,C4,84,B4
+
+CompanyOperates,BY,T3
+LoadInterrupted,121
diff --git a/test/data/test/1835_SwapPresForDoubleShare.report b/test/data/test/1835_SwapPresForDoubleShare.report
index f1eadbb..a7d01c4 100644
--- a/test/data/test/1835_SwapPresForDoubleShare.report
+++ b/test/data/test/1835_SwapPresForDoubleShare.report
@@ -10,43 +10,43 @@ StartOfInitialRound
HasPriority,T1
BuysItemFor,T3,M5,80
FloatsWithCash,M5,80
-BuysItemFor,T1,M1,80
+BuysItemFor,T2,M1,80
FloatsWithCash,M1,80
-BuysItemFor,T2,M3,80
+BuysItemFor,T1,M3,80
FloatsWithCash,M3,80
-BuysItemFor,T3,M6,80
+BuysItemFor,T1,M6,80
FloatsWithCash,M6,80
-BuysItemFor,T1,M2,170
+BuysItemFor,T2,M2,170
FloatsWithCash,M2,170
-BuysItemFor,T2,PRES_CERT_NAME,BY,20,184
-BuysItemFor,T3,LD,190
-ALSO_GETS,T3,PRES_CERT_NAME,SX,20
-BuysItemFor,T1,HB,160
-BuysItemFor,T2,OBB,120
+BuysItemFor,T3,PRES_CERT_NAME,BY,20,184
+BuysItemFor,T1,LD,190
+ALSO_GETS,T1,PRES_CERT_NAME,SX,20
+BuysItemFor,T2,HB,160
+BuysItemFor,T3,OBB,120
+ALSO_GETS,T3,CERT_NAME,BY,10
+BuysItemFor,T1,BB,130
+BuysItemFor,T2,NF,100
ALSO_GETS,T2,CERT_NAME,BY,10
-BuysItemFor,T3,BB,130
-BuysItemFor,T1,NF,100
-ALSO_GETS,T1,CERT_NAME,BY,10
-BuysItemFor,T2,M4,160
+BuysItemFor,T3,M4,160
FloatsWithCash,M4,160
-CannotBuyAnything,T3
CannotBuyAnything,T1
CannotBuyAnything,T2
+CannotBuyAnything,T3
Has,M1,80
Has,M2,170
Has,M3,80
Has,M4,160
Has,M5,80
Has,M6,80
-Has,T1,90
-Has,T2,56
-Has,T3,120
+Has,T1,120
+Has,T2,90
+Has,T3,56
START_OR,0.0
-ReceivesFor,T1,5,NF
-ReceivesFor,T2,10,OBB
-ReceivesFor,T3,20,LD
-ReceivesFor,T3,25,BB
-ReceivesFor,T1,30,HB
+ReceivesFor,T2,5,NF
+ReceivesFor,T3,10,OBB
+ReceivesFor,T1,20,LD
+ReceivesFor,T1,25,BB
+ReceivesFor,T2,30,HB
ShortORExecuted
Has,M1,80
Has,M2,170
@@ -54,13 +54,14 @@ Has,M3,80
Has,M4,160
Has,M5,80
Has,M6,80
-Has,T1,125
-Has,T2,66
-Has,T3,165
+Has,T1,165
+Has,T2,125
+Has,T3,66
StartOfInitialRound
-HasPriority,T3
-BuysItemFor,T3,PfB,150
-ALSO_GETS,T3,CERT_NAME,BY,10
+HasPriority,T1
+CannotBuyAnything,T3
+BuysItemFor,T1,PfB,150
+ALSO_GETS,T1,CERT_NAME,BY,10
FloatsWithCash,BY,460
Has,M1,80
Has,M2,170
@@ -69,9 +70,281 @@ Has,M4,160
Has,M5,80
Has,M6,80
Has,BY,460
-Has,T1,125
-Has,T2,66
-Has,T3,15
+Has,T1,15
+Has,T2,125
+Has,T3,66
StartStockRound,1
-HasPriority,T1
-LoadInterrupted,13
+HasPriority,T2
+BUY_SHARE_LOG,T2,10,BY,IPO,92
+PriceIsPaidTo,92,BY
+PASSES,T3
+PASSES,T1
+PASSES,T2
+
+END_SR,1
+Has,M1,80
+Has,M2,170
+Has,M3,80
+Has,M4,160
+Has,M5,80
+Has,M6,80
+Has,BY,552
+Has,T1,15
+Has,T2,33
+Has,T3,66
+START_OR,1.1
+ReceivesFor,T2,5,NF
+ReceivesFor,T3,10,OBB
+ReceivesFor,T1,15,PfB
+ReceivesFor,T1,20,LD
+ReceivesFor,T1,25,BB
+ReceivesFor,T2,30,HB
+
+CompanyOperates,M1,T2
+LaysTileAt,M1,201,H2,SW
+CompanyDoesNotPayDividend,M1
+BuysTrain,M1,2,IPO,80
+FirstTrainBought,2
+
+CompanyOperates,M2,T2
+LaysTileAt,M2,8,E17,NW
+CompanyDoesNotPayDividend,M2
+BuysTrain,M2,2,IPO,80
+
+CompanyOperates,M3,T1
+LaysTileAt,M3,6,F14,NW
+CompanyDoesNotPayDividend,M3
+BuysTrain,M3,2,IPO,80
+
+CompanyOperates,M4,T3
+LaysTileAt,M4,57,G5,SW
+CompanyDoesNotPayDividend,M4
+BuysTrain,M4,2,IPO,80
+BuysTrain,M4,2,IPO,80
+
+CompanyOperates,M5,T3
+LaysTileAt,M5,8,D18,NE
+CompanyDoesNotPayDividend,M5
+BuysTrain,M5,2,IPO,80
+
+CompanyOperates,M6,T1
+LaysTileAt,M6,9,B10,NW
+CompanyDoesNotPayDividend,M6
+BuysTrain,M6,2,IPO,80
+
+CompanyOperates,BY,T3
+LaysTileAt,BY,202,O15,E
+LaysTileAt,BY,8,O13,NW
+CompanyDoesNotPayDividend,BY
+PRICE_MOVES_LOG,BY,92,C3,86,B3
+BuysTrain,BY,2,IPO,80
+BuysTrain,BY,2,IPO,80
+All 2-trains are sold out, 2+2-trains now available
+BuysTrain,BY,2+2,IPO,120
+FirstTrainBought,2+2
+
+EndOfOperatingRound,1.1
+ORWorthIncrease,T1,1.1,54
+ORWorthIncrease,T2,1.1,23
+ORWorthIncrease,T3,1.1,-8
+Has,M1,0
+Has,M2,90
+Has,M3,0
+Has,M4,0
+Has,M5,0
+Has,M6,0
+Has,BY,272
+Has,T1,75
+Has,T2,68
+Has,T3,76
+StartStockRound,2
+HasPriority,T3
+PASSES,T3
+PASSES,T1
+PASSES,T2
+
+END_SR,2
+Has,M1,0
+Has,M2,90
+Has,M3,0
+Has,M4,0
+Has,M5,0
+Has,M6,0
+Has,BY,272
+Has,T1,75
+Has,T2,68
+Has,T3,76
+START_OR,2.1
+ReceivesFor,T2,5,NF
+ReceivesFor,T3,10,OBB
+ReceivesFor,T1,15,PfB
+ReceivesFor,T1,20,LD
+ReceivesFor,T1,25,BB
+ReceivesFor,T2,30,HB
+
+CompanyOperates,M1,T2
+LaysTileAt,M1,9,J2,NW
+CompanyRevenue,M1,40
+CompanySplits,M1,40
+M1 receives 20
+Payout,T2,20,1,100
+
+CompanyOperates,M2,T2
+LaysTileAt,M2,8,D16,SE
+CompanyRevenue,M2,0
+CompanyDoesNotPayDividend,M2
+
+CompanyOperates,M3,T1
+LaysTileAt,M3,4,G15,NW
+CompanyRevenue,M3,40
+CompanySplits,M3,40
+M3 receives 20
+Payout,T1,20,1,100
+
+CompanyOperates,M4,T3
+LaysTileAt,M4,2,H4,NE
+CompanyRevenue,M4,30
+CompanySplits,M4,30
+M4 receives 15
+Payout,T3,15,1,100
+
+CompanyOperates,M5,T3
+LaysTileAt,M5,8,C19,E
+CompanyRevenue,M5,50
+CompanySplits,M5,50
+M5 receives 25
+Payout,T3,25,1,100
+
+CompanyOperates,M6,T1
+LaysTileAt,M6,6,A11,NW
+CompanyRevenue,M6,60
+CompanySplits,M6,60
+M6 receives 30
+Payout,T1,30,1,100
+
+CompanyOperates,BY,T3
+LaysTileAt,BY,8,N16,SW
+LaysTileAt,BY,4,M15,NW
+LaysTileAt,BY,6,N12,NW
+LAYS_TOKEN_ON,BY,L14,60
+CompanyRevenue,BY,130
+CompanyPaysOutFull,BY,130
+Payout,T1,13,1,10
+Payout,T2,26,2,10
+Payout,T3,39,3,10
+PRICE_MOVES_LOG,BY,86,B3,92,C3
+
+EndOfOperatingRound,2.1
+ORWorthIncrease,T1,2.1,129
+ORWorthIncrease,T2,2.1,93
+ORWorthIncrease,T3,2.1,107
+Has,M1,20
+Has,M2,90
+Has,M3,20
+Has,M4,15
+Has,M5,25
+Has,M6,30
+Has,BY,212
+Has,T1,198
+Has,T2,149
+Has,T3,165
+StartStockRound,3
+HasPriority,T3
+BUY_SHARE_LOG,T3,10,BY,IPO,92
+PriceIsPaidTo,92,BY
+BUY_SHARE_LOG,T1,10,BY,IPO,92
+PriceIsPaidTo,92,BY
+BUY_SHARE_LOG,T2,10,BY,IPO,92
+PriceIsPaidTo,92,BY
+PASSES,T3
+BUY_SHARE_LOG,T1,10,BY,IPO,92
+PriceIsPaidTo,92,BY
+SELL_SHARE_LOG,T1,10,BY,92
+PRICE_MOVES_LOG,BY,92,C3,88,C4
+PASSES,T2
+PASSES,T3
+SELL_SHARE_LOG,T1,10,BY,88
+PRICE_MOVES_LOG,BY,88,C4,86,C5
+BUY_SHARE_LOG,T1,10,SX,IPO,88
+PASSES,T2
+PASSES,T3
+SELL_SHARE_LOG,T1,10,BY,86
+PRICE_MOVES_LOG,BY,86,C5,82,C6
+BUY_SHARE_LOG,T1,10,SX,IPO,88
+PASSES,T2
+PASSES,T3
+BUY_SHARE_LOG,T1,10,SX,IPO,88
+FloatsWithCash,SX,440
+PASSES,T2
+PASSES,T3
+PASSES,T1
+
+END_SR,3
+Has,M1,20
+Has,M2,90
+Has,M3,20
+Has,M4,15
+Has,M5,25
+Has,M6,30
+Has,BY,580
+Has,SX,440
+Has,T1,16
+Has,T2,57
+Has,T3,73
+START_OR,3.1
+ReceivesFor,T2,5,NF
+ReceivesFor,T3,10,OBB
+ReceivesFor,T1,15,PfB
+ReceivesFor,T1,20,LD
+ReceivesFor,T1,25,BB
+ReceivesFor,T2,30,HB
+
+CompanyOperates,M1,T2
+LaysTileAt,M1,4,K3,NW
+CompanyRevenue,M1,40
+CompanySplits,M1,40
+M1 receives 20
+Payout,T2,20,1,100
+
+CompanyOperates,M2,T2
+LaysTileAtFor,M2,8,D14,NW,50
+CompanyRevenue,M2,70
+CompanySplits,M2,70
+M2 receives 35
+Payout,T2,35,1,100
+
+CompanyOperates,M3,T1
+LaysTileAt,M3,57,H16,NW
+CompanyRevenue,M3,40
+CompanySplits,M3,40
+M3 receives 20
+Payout,T1,20,1,100
+
+CompanyOperates,M4,T3
+LaysTileAt,M4,58,F6,E
+CompanyRevenue,M4,60
+CompanySplits,M4,60
+M4 receives 30
+Payout,T3,30,1,100
+
+CompanyOperates,M5,T3
+CompanyRevenue,M5,50
+CompanySplits,M5,50
+M5 receives 25
+Payout,T3,25,1,100
+
+CompanyOperates,M6,T1
+LaysTileAt,M6,58,B12,SW
+CompanyRevenue,M6,60
+CompanySplits,M6,60
+M6 receives 30
+Payout,T1,30,1,100
+
+CompanyOperates,SX,T1
+LaysTileAt,SX,56,I17,NE
+LaysTileAt,SX,202,H20,W
+CompanyDoesNotPayDividend,SX
+PRICE_MOVES_LOG,SX,88,C4,84,B4
+
+CompanyOperates,BY,T3
+LoadInterrupted,121
|