You can subscribe to this list here.
2008 |
Jan
|
Feb
|
Mar
|
Apr
|
May
|
Jun
|
Jul
|
Aug
|
Sep
|
Oct
(3) |
Nov
(46) |
Dec
(57) |
---|---|---|---|---|---|---|---|---|---|---|---|---|
2009 |
Jan
(51) |
Feb
(10) |
Mar
|
Apr
|
May
(14) |
Jun
|
Jul
(13) |
Aug
(30) |
Sep
(83) |
Oct
(56) |
Nov
(148) |
Dec
(107) |
2010 |
Jan
(260) |
Feb
(164) |
Mar
(183) |
Apr
(99) |
May
(160) |
Jun
(40) |
Jul
(33) |
Aug
(48) |
Sep
(22) |
Oct
(24) |
Nov
(1) |
Dec
(12) |
2011 |
Jan
(6) |
Feb
(15) |
Mar
(13) |
Apr
(37) |
May
(27) |
Jun
(29) |
Jul
(33) |
Aug
(20) |
Sep
(17) |
Oct
(20) |
Nov
(33) |
Dec
(17) |
2012 |
Jan
(39) |
Feb
(38) |
Mar
(20) |
Apr
(21) |
May
(17) |
Jun
(22) |
Jul
(16) |
Aug
(3) |
Sep
(9) |
Oct
(10) |
Nov
|
Dec
|
From: Stefan F. <ste...@us...> - 2012-06-13 17:43:11
|
data/GamesList.xml | 5 ----- 1 file changed, 5 deletions(-) New commits: commit ae10a615c47ca248f0f7d9a5c2c5c38946ced196 Author: Stefan Frey <ste...@we...> Date: Wed Jun 13 19:42:52 2012 +0200 removed the limitation text for the 1830 coalfield variant diff --git a/data/GamesList.xml b/data/GamesList.xml index 3674b65..06fe440 100644 --- a/data/GamesList.xml +++ b/data/GamesList.xml @@ -12,11 +12,6 @@ Coalfields variant by Alan R. Moon Limitations: - The M&H/NYC share swap can only be executed in the SR, in the owning player's turn. - Privates cannot be traded between players. -- The Coalfields variant is playable with the following workarounds: - - Coalfield certificates cannot yet be bought. Execute a Cash Correction to mimic this action. - - Route and revenue calculation will always include the Coalfields, if reachable. - If you have not bought a Coalfields certificate, you'll have to calculate the correct revenue - yourself, and enter it manually. </Description> <!-- GAME OPTIONS must have: - a name, which must also exist as an entry in LocalText.properties, |
From: Stefan F. <ste...@us...> - 2012-06-12 06:37:31
|
data/1835/CompanyManager.xml | 1 + 1 file changed, 1 insertion(+) New commits: commit b8b5db220ec42180d2799567e6f9343e1207a6c8 Author: Stefan Frey <ste...@we...> Date: Tue Jun 12 08:37:03 2012 +0200 1835: Allow manual close of Pfalzbahn (supports play after rules interpretation by John David Galt) diff --git a/data/1835/CompanyManager.xml b/data/1835/CompanyManager.xml index baa4fd8..9f28099 100644 --- a/data/1835/CompanyManager.xml +++ b/data/1835/CompanyManager.xml @@ -70,6 +70,7 @@ <ClosingConditions> <Phase>5</Phase> <SpecialProperties condition="ifAllExercised"/> + <CloseManually/> <!-- If tile is laid not via special property--> </ClosingConditions> </Company> <Company name="LD" longname="Leipzig-Dresdner Bahn" type="Private" basePrice="190"> |
From: Stefan F. <ste...@us...> - 2012-06-06 16:20:15
|
.classpath | 1 junit/rails/game/state/ActionChangeSetTest.java | 132 ++++++++++++++++++++++++ src/lib/mockito-1.9.0/mockito-all-1.9.0.jar |binary 3 files changed, 133 insertions(+) New commits: commit d3211b748be485c208d9a19a936f31976a7dc33d Author: Stefan Frey <ste...@we...> Date: Wed Jun 6 18:19:53 2012 +0200 added unit test for ActionChangeSetTest diff --git a/junit/rails/game/state/ActionChangeSetTest.java b/junit/rails/game/state/ActionChangeSetTest.java new file mode 100644 index 0000000..49489c1 --- /dev/null +++ b/junit/rails/game/state/ActionChangeSetTest.java @@ -0,0 +1,132 @@ +package rails.game.state; + +import static org.junit.Assert.*; +import static org.junit.matchers.JUnitMatchers.*; +import static org.mockito.Mockito.*; + +import org.junit.*; +import org.junit.runner.RunWith; +import org.mockito.Mock; +import org.mockito.runners.MockitoJUnitRunner; + +import rails.game.Player; +import rails.game.action.PossibleAction; + +@RunWith(MockitoJUnitRunner.class) +public class ActionChangeSetTest { + + @Mock + private Player player; + + @Mock + private PossibleAction action; + + @Mock + private Change change; + + @Mock + private State state; + + private ActionChangeSet changeSet; + + private ActionChangeSet closedSet; + + @Before + public void setup() { + when(change.getState()).thenReturn(state); + changeSet = new ActionChangeSet(player, action); + + closedSet = new ActionChangeSet(player, action); + closedSet.close(); + } + + @Test + public void testIsUndoableByPlayer() { + assertTrue(changeSet.isUndoableByPlayer(player)); + Player otherPlayer = mock(Player.class); + assertFalse(changeSet.isUndoableByPlayer(otherPlayer)); + } + + @Test + public void testActionChangeSet() { + assertNotNull(changeSet); + } + + @Test + public void testGetPlayer() { + assertSame(changeSet.getPlayer(), player); + } + + @Test + public void testGetAction() { + assertSame(changeSet.getAction(), action); + } + + @Test + public void testToString() { + assertNotNull(changeSet.toString()); + } + + @Test + public void testAddChange() { + changeSet.addChange(change); + verify(change).execute(); + verify(state).updateModels(); + } + + @Test(expected=IllegalStateException.class) + public void testAddChangeClosed() { + Change change = mock(Change.class); + closedSet.addChange(change); + } + + @Test + public void testClose() { + changeSet.close(); + assertTrue(changeSet.isClosed()); + } + + @Test + public void testReexecute() { + changeSet.addChange(change); + changeSet.close(); + changeSet.reexecute(); + verify(change, times(2)).execute(); + verify(state, times(2)).updateModels(); + } + + @Test(expected=IllegalStateException.class) + public void testReexecuteOpen() { + changeSet.reexecute(); + } + + @Test + public void testUnexecute() { + changeSet.addChange(change); + changeSet.close(); + changeSet.unexecute(); + verify(change).execute(); + verify(change).undo(); + verify(state, times(2)).updateModels(); + } + + @Test(expected=IllegalStateException.class) + public void testUnexecuteOpen() { + changeSet.unexecute(); + } + + @Test + public void testIsEmpty() { + assertTrue(changeSet.isEmpty()); + changeSet.addChange(change); + assertFalse(changeSet.isEmpty()); + } + + @Test + public void testGetStates() { + changeSet.addChange(change); + changeSet.close(); + assertThat(changeSet.getStates(), hasItem(state)); + } + +} commit 66d56a3a2f42e08071c442a3d6352ce86842748f Author: Stefan Frey <ste...@we...> Date: Wed Jun 6 18:19:11 2012 +0200 added mockito library diff --git a/.classpath b/.classpath index 4443a89..724802d 100644 --- a/.classpath +++ b/.classpath @@ -16,5 +16,6 @@ <classpathentry kind="lib" path="src/lib/logback-1.0.4/logback-classic-1.0.4.jar"/> <classpathentry kind="lib" path="src/lib/logback-1.0.4/logback-core-1.0.4.jar"/> <classpathentry kind="lib" path="src/lib/sl4j-1.6.5/slf4j-api-1.6.5.jar"/> + <classpathentry kind="lib" path="src/lib/mockito-1.9.0/mockito-all-1.9.0.jar"/> <classpathentry kind="output" path="classes"/> </classpath> diff --git a/src/lib/mockito-1.9.0/mockito-all-1.9.0.jar b/src/lib/mockito-1.9.0/mockito-all-1.9.0.jar new file mode 100644 index 0000000..273fd50 Binary files /dev/null and b/src/lib/mockito-1.9.0/mockito-all-1.9.0.jar differ |
From: Stefan F. <ste...@us...> - 2012-06-06 16:07:26
|
data/18Lummer/CompanyManager.xml | 43 +++ data/18Lummer/Game.xml | 102 ++++++++ data/18Lummer/Map.xml | 17 + data/18Lummer/StockMarket.xml | 149 ++++++++++++ data/18Lummer/TileSet.xml | 145 ++++++++++++ data/18Lummer/Tiles.xml | 460 +++++++++++++++++++++++++++++++++++++++ data/GamesList.xml | 14 + 7 files changed, 930 insertions(+) New commits: commit 29aeea878329201b84d6238f7b5fd78f0c7d084f Author: Stefan Frey <ste...@we...> Date: Wed Jun 6 18:06:51 2012 +0200 added little fun variant 18Lummer diff --git a/data/18Lummer/CompanyManager.xml b/data/18Lummer/CompanyManager.xml new file mode 100644 index 0000000..6d3339d --- /dev/null +++ b/data/18Lummer/CompanyManager.xml @@ -0,0 +1,43 @@ +<?xml version="1.0"?> +<CompanyManager> + <CompanyType name="Private" class="rails.game.PrivateCompany"> + <ClosingConditions> + <Phase>5</Phase> + </ClosingConditions> + <Tradeable toCompany="yes" lowerPriceFactor="0.5" upperPriceFactor="2.0"/> + <Tradeable toPlayer="yes"/> + </CompanyType> + <CompanyType name="Public" class="rails.game.PublicCompany"> + <CanBuyPrivates/> + <PoolPaysOut/> + <Float percentage="60"/> + <ShareUnit percentage="10"/> + <BaseTokens> + <!-- HomeBase lay options: "whenStarted", "whenFloated", "firstOR" (default) --> + <HomeBase lay="firstOR"/> + <!-- LayCost methods: only "sequence" (1830 style) implemented so far (default) --> + <LayCost method="sequence" cost="0,40"/> + </BaseTokens> + <Certificate type="President" shares="2"/> + <Certificate shares="1" number="8"/> + <Trains limit="4,3,2"/> + <CanUseSpecialProperties/> + </CompanyType> + <Company name="Post" type="Private" basePrice="20" revenue="5" + longname="Postschiff" /> + <Company name="JK" type="Public" tokens="2" fgColour="255,255,255" bgColour="0,0,255" + longname="Jim Knopf"> + <Home hex="C4"/> + </Company> + <Company name="LL" type="Public" tokens="2" fgColour="FFFFFF" bgColour="FF0000" + longname="Lukas Lokomotivfuehrer"> + <Home hex="C8"/> + </Company> + <StartPacket roundClass="rails.game.StartRound_1830"> + <Bidding initial="5" minimum="5" increment="1"/> + <Item name="Post" type="Private" basePrice="20"/> + </StartPacket> +</CompanyManager> + + + \ No newline at end of file diff --git a/data/18Lummer/Game.xml b/data/18Lummer/Game.xml new file mode 100644 index 0000000..79fc4ac --- /dev/null +++ b/data/18Lummer/Game.xml @@ -0,0 +1,102 @@ +<?xml version="1.0"?> +<ComponentManager> + <Component name="GameManager" class="rails.game.GameManager"> + <Game name="18Lummer"/> + <GameOption name="RouteAwareness" values="Highlight,Deactivate" default="Highlight" /> + <GameOption name="RevenueCalculation" values="Suggest,Deactivate" default="Suggest" /> + + <GameParameters> + <PlayerShareLimit percentage="60"> + <!-- Option "NumberOfPlayers" is automatically set + by the game engine --> + <IfOption name="NumberOfPlayers" value="2"> + <IfOption name="TwoPlayersCertLimit70Percent" value="yes"> + <Attributes percentage="70"/> + </IfOption> + </IfOption> + </PlayerShareLimit> + <BankPoolLimit percentage="50"/> + <StockRound> + <NoSaleInFirstSR/> + </StockRound> + <OperatingRound> + <EmergencyTrainBuying mustBuyCheapestTrain="no" mayBuyFromCompany="yes"/> + </OperatingRound> + </GameParameters> + <EndOfGame> + <Bankruptcy/> + <BankBreaks limit="0" finish="setOfORs"/> + <!-- "Runs out"; when "broken", -1 is the limit --> + </EndOfGame> + </Component> + <Component name="PlayerManager" class="rails.game.PlayerManager"> + <Players number="2" cash="600" certLimit="28"/> + <Players number="3" cash="400" certLimit="20"/> + <Players number="4" cash="300" certLimit="16"/> + </Component> + <Component name="Bank" class="rails.game.Bank"> + <Bank amount="2000"/> + <Money format="$@"/> + </Component> + <Component name="TileManager" class="rails.game.TileManager" + file="TileSet.xml"/> + <Component name="Map" class="rails.game.MapManager" file="Map.xml"/> + <Component name="CompanyManager" class="rails.game.CompanyManager" + file="CompanyManager.xml"/> + <Component name="StockMarket" class="rails.game.StockMarket" + file="StockMarket.xml"/> + <Component name="TrainManager" class="rails.game.TrainManager"> + <Defaults> + <Reach base="stops" countTowns="yes"/> + <Score towns="yes"/> + </Defaults> + <TrainType name="2" majorStops="2" cost="80" quantity="2"/> + <TrainType name="3" majorStops="3" cost="180" quantity="1"> + <NewPhase phaseName="3"/> + </TrainType> + <TrainType name="4" majorStops="4" cost="300" quantity="1"> + <NewPhase phaseName="4"/> + </TrainType> + <TrainType name="5" majorStops="5" cost="450" quantity="1"> + <NewPhase phaseName="5"/> + </TrainType> + <TrainType name="6" majorStops="6" cost="630" quantity="1"> + <NewPhase phaseName="6"/> + </TrainType> + <TrainType name="D" majorStops="99" cost="1100" quantity="1"> + <NewPhase phaseName="D"/> + <Exchange cost="800"/> + </TrainType> + </Component> + <Component name="PhaseManager" class="rails.game.PhaseManager"> + <Phase name="2" > + <Tiles colour="yellow"/> + <Privates sellingAllowed="no"/> + <OperatingRounds number="1"/> + <Trains onePerTurn="yes" tradingAllowed="yes"/> + </Phase> + <Phase name="3"> + <Tiles colour="yellow,green"/> + <Privates sellingAllowed="yes"/> + <OperatingRounds number="2"/> + </Phase> + <Phase name="4"> + <Trains rusted="2" limitStep="2"/> + </Phase> + <Phase name="5"> + <Tiles colour="yellow,green,brown"/> + <Trains limitStep="3"/> + <!--Privates close="yes"/--> + <OperatingRounds number="3"/> + <OffBoardRevenue step="2"/> + </Phase> + <Phase name="6"> + <Trains rusted="3"> + <Attributes released="D"/> + </Trains> + </Phase> + <Phase name="D"> + <Trains rusted="4"/> + </Phase> + </Component> +</ComponentManager> diff --git a/data/18Lummer/Map.xml b/data/18Lummer/Map.xml new file mode 100644 index 0000000..4c7ecb8 --- /dev/null +++ b/data/18Lummer/Map.xml @@ -0,0 +1,17 @@ +<Map tileOrientation="EW" letterOrientation="vertical" even="A"> + <Defaults> + <Access type="city" runTo="yes" runThrough="yes" loop="yes" score="major"/> + <Access type="town" runTo="yes" runThrough="yes" loop="yes" score="minor"/> + </Defaults> + <!-- The above defaults are redundant, these settings are the system defaults anyway --> + <Hex name="B3" tile="-7" orientation="0"/> + <Hex name="B5" tile="-1" /> + <Hex name="B7" tile="0" /> + <Hex name="B9" tile="-7" orientation="2"/> + <Hex name="C4" tile="-10" /> + <Hex name="C6" tile="-20" cost="120" /> + <Hex name="C8" tile="-10" /> + <Hex name="D5" tile="0" /> + <Hex name="D7" tile="-1" /> + <Hex name="E6" tile="-7" orientation="4"/> +</Map> \ No newline at end of file diff --git a/data/18Lummer/StockMarket.xml b/data/18Lummer/StockMarket.xml new file mode 100755 index 0000000..770d885 --- /dev/null +++ b/data/18Lummer/StockMarket.xml @@ -0,0 +1,149 @@ +<StockMarket type="rectangular"> + <!-- Note two supported colour specification formats: + RGB decimal with commas and RGB hexadecimal without commas --> + <StockSpaceType name="yellow" colour="255,255,0"> + <NoCertLimit/> + </StockSpaceType> + <StockSpaceType name="orange" colour="FF8000"> + <NoCertLimit/> + <NoHoldLimit/> + </StockSpaceType> + <StockSpaceType name="brown" colour="884000"> + <NoCertLimit/> + <NoHoldLimit/> + <NoBuyLimit/> + </StockSpaceType> + + <StockSpace name="A1" price="60" type="yellow"/> + <StockSpace name="A2" price="53" type="yellow"/> + <StockSpace name="A3" price="46" type="yellow"/> + <StockSpace name="A4" price="39" type="orange"/> + <StockSpace name="A5" price="32" type="orange"/> + <StockSpace name="A6" price="25" type="brown"/> + <StockSpace name="A7" price="18" type="brown"/> + <StockSpace name="A8" price="10" type="brown"/> + <StockSpace name="B1" price="67" /> + <StockSpace name="B2" price="60" type="yellow"/> + <StockSpace name="B3" price="55" type="yellow"/> + <StockSpace name="B4" price="48" type="yellow"/> + <StockSpace name="B5" price="41" type="orange"/> + <StockSpace name="B6" price="34" type="orange"/> + <StockSpace name="B7" price="27" type="brown"/> + <StockSpace name="B8" price="20" type="brown"/> + <StockSpace name="B9" price="10" type="brown"/> + <StockSpace name="C1" price="71" /> + <StockSpace name="C2" price="66" /> + <StockSpace name="C3" price="60" type="yellow"/> + <StockSpace name="C4" price="54" type="yellow"/> + <StockSpace name="C5" price="48" type="yellow"/> + <StockSpace name="C6" price="42" type="orange"/> + <StockSpace name="C7" price="36" type="orange"/> + <StockSpace name="C8" price="30" type="brown"/> + <StockSpace name="C9" price="20" type="brown"/> + <StockSpace name="C10" price="10" type="brown"/> + <StockSpace name="D1" price="76" /> + <StockSpace name="D2" price="70" /> + <StockSpace name="D3" price="65" /> + <StockSpace name="D4" price="60" type="yellow"/> + <StockSpace name="D5" price="55" type="yellow"/> + <StockSpace name="D6" price="50" type="yellow"/> + <StockSpace name="D7" price="45" type="orange"/> + <StockSpace name="D8" price="40" type="orange"/> + <StockSpace name="D9" price="30" type="brown"/> + <StockSpace name="D10" price="20" type="brown"/> + <StockSpace name="D11" price="10" type="brown"/> + <StockSpace name="E1" price="82" /> + <StockSpace name="E2" price="76" /> + <StockSpace name="E3" price="70" /> + <StockSpace name="E4" price="66" /> + <StockSpace name="E5" price="62" /> + <StockSpace name="E6" price="58" type="yellow"/> + <StockSpace name="E7" price="54" type="yellow"/> + <StockSpace name="E8" price="50" type="yellow"/> + <StockSpace name="E9" price="40" type="orange"/> + <StockSpace name="E10" price="30" type="brown"/> + <StockSpace name="E11" price="20" type="brown"/> + <StockSpace name="F1" price="90" /> + <StockSpace name="F2" price="82" /> + <StockSpace name="F3" price="76" /> + <StockSpace name="F4" price="71" /> + <StockSpace name="F5" price="67" /> + <StockSpace name="F6" price="65" /> + <StockSpace name="F7" price="63" /> + <StockSpace name="F8" price="60" type="yellow"/> + <StockSpace name="F9" price="50" type="yellow"/> + <StockSpace name="F10" price="40" type="orange"/> + <StockSpace name="F11" price="30" type="brown"/> + <StockSpace name="G1" price="100" > + <StartSpace/> + </StockSpace> + <StockSpace name="G2" price="90" > + <StartSpace/> + </StockSpace> + <StockSpace name="G3" price="82" > + <StartSpace/> + </StockSpace> + <StockSpace name="G4" price="76" > + <StartSpace/> + </StockSpace> + <StockSpace name="G5" price="71" > + <StartSpace/> + </StockSpace> + <StockSpace name="G6" price="67" > + <StartSpace/> + </StockSpace> + <StockSpace name="G7" price="67" /> + <StockSpace name="G8" price="67" /> + <StockSpace name="G9" price="60" type="yellow"/> + <StockSpace name="G10" price="50" type="yellow"/> + <StockSpace name="G11" price="40" type="orange"/> + <StockSpace name="H1" price="112" /> + <StockSpace name="H2" price="100" /> + <StockSpace name="H3" price="90" /> + <StockSpace name="H4" price="82" /> + <StockSpace name="H5" price="76" /> + <StockSpace name="H6" price="71" /> + <StockSpace name="H7" price="69" /> + <StockSpace name="H8" price="68" /> + <StockSpace name="I1" price="126" /> + <StockSpace name="I2" price="112" /> + <StockSpace name="I3" price="100" /> + <StockSpace name="I4" price="90" /> + <StockSpace name="I5" price="82" /> + <StockSpace name="I6" price="75" /> + <StockSpace name="I7" price="70" /> + <StockSpace name="J1" price="142" /> + <StockSpace name="J2" price="126" /> + <StockSpace name="J3" price="111" /> + <StockSpace name="J4" price="100" /> + <StockSpace name="J5" price="90" /> + <StockSpace name="J6" price="80" /> + <StockSpace name="K1" price="160" /> + <StockSpace name="K2" price="142" /> + <StockSpace name="K3" price="125" /> + <StockSpace name="K4" price="110" /> + <StockSpace name="K5" price="100" /> + <StockSpace name="L1" price="180" /> + <StockSpace name="L2" price="160" /> + <StockSpace name="L3" price="140" /> + <StockSpace name="L4" price="120" /> + <StockSpace name="M1" price="200" /> + <StockSpace name="M2" price="180" /> + <StockSpace name="M3" price="155" /> + <StockSpace name="M4" price="130" /> + <StockSpace name="N1" price="225" /> + <StockSpace name="N2" price="200" /> + <StockSpace name="N3" price="170" /> + <StockSpace name="O1" price="250" /> + <StockSpace name="O2" price="220" /> + <StockSpace name="O3" price="185" /> + <StockSpace name="P1" price="275" /> + <StockSpace name="P2" price="240" /> + <StockSpace name="P3" price="200" /> + <StockSpace name="Q1" price="300" /> + <StockSpace name="Q2" price="260" /> + <StockSpace name="R1" price="325" /> + <StockSpace name="R2" price="280" /> + <StockSpace name="S1" price="350" /> + <StockSpace name="S2" price="300" /> +</StockMarket> diff --git a/data/18Lummer/TileSet.xml b/data/18Lummer/TileSet.xml new file mode 100644 index 0000000..371e6e3 --- /dev/null +++ b/data/18Lummer/TileSet.xml @@ -0,0 +1,145 @@ +<TileManager tiles="Tiles.xml"> + <Defaults> + <Access type="offmap" loop="yes"/> + </Defaults> + <!-- Preprinted tiles --> + <Tile id="0"><!-- Empty space --> + <Upgrade id="7,8,9"/> + </Tile> + <Tile id="-1"><!-- 1 town --> + <Upgrade id="3,4,58"/> + </Tile> + <Tile id="-2"><!-- 2 towns --> + <Upgrade id="1,2,55,56,69"/> + </Tile> + <Tile id="-3"/> + <Tile id="-5"/> + <Tile id="-7"/> + <Tile id="-10"><!-- 1 city --> + <Upgrade id="57"/> + </Tile> + <Tile id="-11"><!-- B yellow --> + <Upgrade id="53"/> + </Tile> + <Tile id="-20"><!-- 2 OO cities --> + <Upgrade id="59" relayBaseTokens="yes"/> + </Tile> + <Tile id="-21"><!-- New York --> + <Upgrade id="54"/> + </Tile> + <Tile id="-58"/> + <Tile id="-101"/><!-- Altoona --> + <Tile id="-102"/><!-- Rochester --> + <Tile id="-103"/><!-- Montreal --> + <Tile id="-104"/><!-- Norfolk --> + <Tile id="-105"/><!-- Cleveland --> + <Tile id="-901"/> + <Tile id="-902"/> + <Tile id="-903"/> + <Tile id="-908"/><!-- Coalfields: K1 --> + <Tile id="-25007"/><!-- Wabash: D20--> + <Tile id="-30001"/><!-- Coalfields: N of Boston --> + <Tile id="-30003" pic="-30002"/><!-- Coalfields: Altoona --> + <Tile id="-30004"/><!-- Coalfields: Coalfields --> + <Tile id="-30005"/><!-- Coalfields: Norfolk --> + <Tile id="-30007" pic="-30006"/><!-- Reading: Reading--> + + <!-- Yellow tiles --> + <Tile id="1" quantity="1"> + </Tile> + <Tile id="2" quantity="1"> + </Tile> + <Tile id="3" quantity="2" /> + <Tile id="4" quantity="2" /> + <Tile id="7" quantity="4"> + <Upgrade id="18,26,27,28,29" /> + </Tile> + <Tile id="8" quantity="8"> + <Upgrade id="16,19,23,24,25,28,29" /> + </Tile> + <Tile id="9" quantity="7"> + <Upgrade id="18,19,20,23,24,26,27" /> + </Tile> + <Tile id="55" quantity="1"> + </Tile> + <Tile id="56" quantity="1"> + </Tile> + <Tile id="57"> + <Attributes quantity="4"/> + <Upgrade id="14,15" /> + </Tile> + <Tile id="58" quantity="2" /> + <Tile id="69" quantity="1"> + </Tile> + + <!-- Green tiles --> + <Tile id="14"> + <Attributes quantity="3"/> + <Upgrade id="63" /> + </Tile> + <Tile id="15" quantity="2"> + <Upgrade id="63" /> + </Tile> + <Tile id="16" quantity="1"> + <Upgrade id="43,70" /> + </Tile> + <Tile id="18" quantity="1"> + <Upgrade id="43" /> + </Tile> + <Tile id="19" quantity="1"> + <Upgrade id="45,46" /> + </Tile> + <Tile id="20" quantity="1"> + <Upgrade id="44,47" /> + </Tile> + <Tile id="23" quantity="3"> + <Upgrade id="41,43,45,47" /> + </Tile> + <Tile id="24" quantity="3"> + <Upgrade id="42,43,46,47" /> + </Tile> + <Tile id="25" quantity="1"> + <Upgrade id="40,45,46" /> + </Tile> + <Tile id="26" quantity="1"> + <Upgrade id="42,44,45" /> + </Tile> + <Tile id="27" quantity="1"> + <Upgrade id="41,44,46" /> + </Tile> + <Tile id="28" quantity="1"> + <Upgrade id="39,43,46,70" /> + </Tile> + <Tile id="29" quantity="1"> + <Upgrade id="39,43,45,70" /> + </Tile> + <Tile id="53" quantity="2"> + <Upgrade id="61" /> + </Tile> + <Tile id="54" quantity="1"> + <Upgrade id="62" /> + </Tile> + <Tile id="59" quantity="2"> + <Upgrade id="64,65,66,67,68" /> + </Tile> + + <!-- Brown tiles --> + <Tile id="39" quantity="1" /> + <Tile id="40" quantity="1" /> + <Tile id="41" quantity="2" /> + <Tile id="42" quantity="2" /> + <Tile id="43" quantity="2" /> + <Tile id="44" quantity="1" /> + <Tile id="45" quantity="2" /> + <Tile id="46" quantity="2" /> + <Tile id="47" quantity="1" /> + <Tile id="61" quantity="2" /> + <Tile id="62" quantity="1" /> + <Tile id="63" quantity="3" /> + <Tile id="64" quantity="1" /> + <Tile id="65" quantity="1" /> + <Tile id="66" quantity="1" /> + <Tile id="67" quantity="1" /> + <Tile id="68" quantity="1" /> + <Tile id="70" quantity="1" /> +</TileManager> \ No newline at end of file diff --git a/data/18Lummer/Tiles.xml b/data/18Lummer/Tiles.xml new file mode 100644 index 0000000..a5a52e2 --- /dev/null +++ b/data/18Lummer/Tiles.xml @@ -0,0 +1,460 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<Tiles> + <Tile colour="white" id="0" name="empty"/> + <Tile colour="white" id="-1" name="1 village"> + <Station id="city1" position="002" type="Town"/> + </Tile> + <Tile colour="white" id="-2" name="2 villages"> + <Station id="city1" position="102" type="Town"/> + <Station id="city2" position="302" type="Town"/> + </Tile> + <Tile colour="fixed" id="-3" name="MF 3"> + <Station id="city1" position="252" type="Town" value="10"/> + <Track from="city1" gauge="normal" to="side2"/> + <Track from="city1" gauge="normal" to="side3"/> + </Tile> + <Tile colour="fixed" id="-5" name="MF 5"> + <Station id="city1" position="0" slots="1" type="City" value="20"/> + <Track from="city1" gauge="normal" to="side2"/> + <Track from="city1" gauge="normal" to="side1"/> + </Tile> + <Tile colour="fixed" id="-7" name="MF 7"> + <Track from="side2" gauge="normal" to="side1"/> + </Tile> + <Tile colour="white" id="-10" name="1 city"> + <Station id="city1" position="302" slots="1" type="City"/> + </Tile> + <Tile colour="yellow" id="-11" name="B"> + <Station id="city1" position="0" slots="1" type="City" value="30"/> + <Track from="city1" gauge="normal" to="side1"/> + <Track from="city1" gauge="normal" to="side3"/> + </Tile> + <Tile colour="yellow" id="-20" name="2 cities"> + <Station id="city1" position="002" slots="1" type="City"/> + <Station id="city2" position="302" slots="1" type="City"/> + </Tile> + <Tile colour="yellow" id="-21" name="NY"> + <Station id="city1" position="202" slots="1" type="City" value="40"/> + <Station id="city2" position="502" slots="1" type="City" value="40"/> + <Track from="city1" gauge="normal" to="side2"/> + <Track from="city2" gauge="normal" to="side5"/> + </Tile> + <Tile colour="fixed" id="-58" name="MF 58"> + <Station id="city1" position="301" type="Town" value="10"/> + <Track from="city1" gauge="normal" to="side2"/> + <Track from="city1" gauge="normal" to="side4"/> + </Tile> + <Tile colour="fixed" id="-101" name="Philadelphia"> + <Station id="city1" position="0" slots="1" type="City" value="10"/> + <Track from="city1" gauge="normal" to="side1"/> + <Track from="city1" gauge="normal" to="side4"/> + <Track from="side4" gauge="normal" to="side1"/> + </Tile> + <Tile colour="fixed" id="-102" name="-102"> + <Station id="city1" position="251" slots="1" type="City" value="20"/> + <Track from="city1" gauge="normal" to="side1"/> + <Track from="city1" gauge="normal" to="side3"/> + <Track from="city1" gauge="normal" to="side4"/> + </Tile> + <Tile colour="fixed" id="-103" name="MF 103"> + <Station id="city1" position="0" slots="1" type="City" value="40"/> + <Track from="city1" gauge="normal" to="side2"/> + <Track from="city1" gauge="normal" to="side3"/> + </Tile> + <Tile colour="fixed" id="-104" name="MF 104"> + <Station id="city1" position="0" slots="1" type="City" value="20"/> + <Track from="city1" gauge="normal" to="side2"/> + </Tile> + <Tile colour="fixed" id="-105" name="MF 105"> + <Station id="city1" position="0" slots="1" type="City" value="30"/> + <Track from="city1" gauge="normal" to="side2"/> + <Track from="city1" gauge="normal" to="side3"/> + </Tile> + <Tile colour="red" id="-901" name="OM 1 way"> + <Station id="city1" position="0" type="OffMapCity" value="-1"/> + <Track from="city1" gauge="normal" to="side2"/> + </Tile> + <Tile colour="red" id="-902" name="OM 2 way"> + <Station id="city1" position="0" type="OffMapCity" value="-1"/> + <Track from="city1" gauge="normal" to="side2"/> + <Track from="city1" gauge="normal" to="side1"/> + </Tile> + <Tile colour="red" id="-903" name="OM 3 way"> + <Station id="city1" position="0" type="OffMapCity" value="-1"/> + <Track from="city1" gauge="normal" to="side3"/> + <Track from="city1" gauge="normal" to="side2"/> + <Track from="city1" gauge="normal" to="side1"/> + </Tile> + <Tile colour="red" id="-908" name="OM wide curve"> + <Track from="side0" gauge="normal" to="side2"/> + </Tile> + <Tile colour="fixed" id="-25007" name="Bournemouth"> + <Station id="city1" position="0" slots="1" type="City" value="20"/> + <Station id="city2" position="0" slots="1" type="City" value="20"/> + <Track from="side4" gauge="normal" to="city2"/> + <Track from="side5" gauge="normal" to="city2"/> + <Track from="side0" gauge="normal" to="city2"/> + </Tile> + <Tile colour="fixed" id="-30001" name="N of Boston"> + <Track from="side3" gauge="normal" to="side5"/> + <Track from="side3" gauge="normal" to="side4"/> + </Tile> + <Tile colour="fixed" id="-30003" name="Altoon intern"> + <Station id="city1" position="552" slots="1" type="City" value="10"/> + <Track from="side4" gauge="normal" to="side1"/> + <Track from="side4" gauge="normal" to="side2"/> + <Track from="side1" gauge="normal" to="side2"/> + <Track from="side4" gauge="normal" to="city1"/> + <Track from="city1" gauge="normal" to="side1"/> + <Track from="city1" gauge="normal" to="side2"/> + </Tile> + <Tile colour="fixed" id="-30004" name="Coalfields"> + <Station id="city1" position="0" type="Town"/> + <Track from="city1" gauge="normal" to="side4"/> + <Track from="city1" gauge="normal" to="side5"/> + <Track from="city1" gauge="normal" to="side0"/> + <Track from="city1" gauge="normal" to="side1"/> + <Track from="city1" gauge="normal" to="side2"/> + </Tile> + <Tile colour="fixed" id="-30005" name="Norfolk"> + <Station id="city1" position="0" slots="1" type="City"/> + <Track from="city1" gauge="normal" to="side4"/> + <Track from="city1" gauge="normal" to="side5"/> + </Tile> + <Tile colour="fixed" id="-30007" name="Reading intern"> + <Station id="city1" position="552" slots="1" type="City" value="10"/> + <Track from="side4" gauge="normal" to="side1"/> + <Track from="side4" gauge="normal" to="side2"/> + <Track from="side1" gauge="normal" to="side3"/> + <Track from="side3" gauge="normal" to="side2"/> + <Track from="side4" gauge="normal" to="city1"/> + <Track from="side3" gauge="normal" to="city1"/> + <Track from="side1" gauge="normal" to="city1"/> + <Track from="side2" gauge="normal" to="city1"/> + </Tile> + <Tile colour="yellow" id="1" name="1"> + <Station id="city1" position="408" type="Town" value="10"/> + <Station id="city2" position="108" type="Town" value="10"/> + <Track from="city1" gauge="normal" to="side0"/> + <Track from="city1" gauge="normal" to="side4"/> + <Track from="city2" gauge="normal" to="side1"/> + <Track from="city2" gauge="normal" to="side3"/> + </Tile> + <Tile colour="yellow" id="2" name="2"> + <Station id="city1" position="302" type="Town" value="10"/> + <Station id="city2" position="109" type="Town" value="10"/> + <Track from="city1" gauge="normal" to="side3"/> + <Track from="city1" gauge="normal" to="side0"/> + <Track from="city2" gauge="normal" to="side1"/> + <Track from="city2" gauge="normal" to="side2"/> + </Tile> + <Tile colour="yellow" id="3" name="3"> + <Station id="city1" position="352" type="Town" value="10"/> + <Track from="city1" gauge="normal" to="side3"/> + <Track from="city1" gauge="normal" to="side4"/> + </Tile> + <Tile colour="yellow" id="4" name="4"> + <Station id="city1" position="0" type="Town" value="10"/> + <Track from="city1" gauge="normal" to="side3"/> + <Track from="city1" gauge="normal" to="side0"/> + </Tile> + <Tile colour="yellow" id="7" name="7"> + <Track from="side3" gauge="normal" to="side4"/> + </Tile> + <Tile colour="yellow" id="8" name="8"> + <Track from="side3" gauge="normal" to="side5"/> + </Tile> + <Tile colour="yellow" id="9" name="9"> + <Track from="side3" gauge="normal" to="side0"/> + </Tile> + <Tile colour="yellow" id="55" name="55"> + <Station id="city1" position="202" type="Town" value="10"/> + <Station id="city2" position="302" type="Town" value="10"/> + <Track from="city1" gauge="normal" to="side2"/> + <Track from="city1" gauge="normal" to="side5"/> + <Track from="city2" gauge="normal" to="side3"/> + <Track from="city2" gauge="normal" to="side0"/> + </Tile> + <Tile colour="yellow" id="56" name="56"> + <Station id="city1" position="407" type="Town" value="10"/> + <Station id="city2" position="108" type="Town" value="10"/> + <Track from="city2" gauge="normal" to="side1"/> + <Track from="city2" gauge="normal" to="side3"/> + <Track from="city1" gauge="normal" to="side4"/> + <Track from="city1" gauge="normal" to="side2"/> + </Tile> + <Tile colour="yellow" id="57" name="57"> + <Station id="city1" position="0" slots="1" type="City" value="20"/> + <Track from="city1" gauge="normal" to="side3"/> + <Track from="city1" gauge="normal" to="side0"/> + </Tile> + <Tile colour="yellow" id="58" name="58"> + <Station id="city1" position="401" type="Town" value="10"/> + <Track from="city1" gauge="normal" to="side5"/> + <Track from="city1" gauge="normal" to="side3"/> + </Tile> + <Tile colour="yellow" id="69" name="69"> + <Station id="city1" position="407" type="Town" value="10"/> + <Station id="city2" position="002" type="Town" value="10"/> + <Track from="city1" gauge="normal" to="side2"/> + <Track from="city1" gauge="normal" to="side4"/> + <Track from="city2" gauge="normal" to="side0"/> + <Track from="city2" gauge="normal" to="side3"/> + </Tile> + <Tile colour="green" id="14" name="14"> + <Station id="city1" position="0" slots="2" type="City" value="30"/> + <Track from="city1" gauge="normal" to="side1"/> + <Track from="city1" gauge="normal" to="side3"/> + <Track from="city1" gauge="normal" to="side4"/> + <Track from="city1" gauge="normal" to="side0"/> + </Tile> + <Tile colour="green" id="15" name="15"> + <Station id="city1" position="0" slots="2" type="City" value="30"/> + <Track from="city1" gauge="normal" to="side3"/> + <Track from="city1" gauge="normal" to="side4"/> + <Track from="city1" gauge="normal" to="side5"/> + <Track from="city1" gauge="normal" to="side0"/> + </Tile> + <Tile colour="green" id="16" name="16"> + <Track from="side3" gauge="normal" to="side5"/> + <Track from="side4" gauge="normal" to="side0"/> + </Tile> + <Tile colour="green" id="18" name="18"> + <Track from="side3" gauge="normal" to="side0"/> + <Track from="side4" gauge="normal" to="side5"/> + </Tile> + <Tile colour="green" id="19" name="19"> + <Track from="side5" gauge="normal" to="side1"/> + <Track from="side0" gauge="normal" to="side3"/> + </Tile> + <Tile colour="green" id="20" name="20"> + <Track from="side1" gauge="normal" to="side4"/> + <Track from="side3" gauge="normal" to="side0"/> + </Tile> + <Tile colour="green" id="23" name="23"> + <Track from="side4" gauge="normal" to="side0"/> + <Track from="side0" gauge="normal" to="side3"/> + </Tile> + <Tile colour="green" id="24" name="24"> + <Track from="side3" gauge="normal" to="side5"/> + <Track from="side3" gauge="normal" to="side0"/> + </Tile> + <Tile colour="green" id="25" name="25"> + <Track from="side1" gauge="normal" to="side3"/> + <Track from="side3" gauge="normal" to="side5"/> + </Tile> + <Tile colour="green" id="26" name="26"> + <Track from="side5" gauge="normal" to="side0"/> + <Track from="side0" gauge="normal" to="side3"/> + </Tile> + <Tile colour="green" id="27" name="27"> + <Track from="side3" gauge="normal" to="side4"/> + <Track from="side3" gauge="normal" to="side0"/> + </Tile> + <Tile colour="green" id="28" name="28"> + <Track from="side3" gauge="normal" to="side5"/> + <Track from="side4" gauge="normal" to="side5"/> + </Tile> + <Tile colour="green" id="29" name="29"> + <Track from="side3" gauge="normal" to="side4"/> + <Track from="side3" gauge="normal" to="side5"/> + </Tile> + <Tile colour="green" id="53" name="53"> + <Station id="city1" position="0" slots="1" type="City" value="50"/> + <Track from="city1" gauge="normal" to="side1"/> + <Track from="city1" gauge="normal" to="side3"/> + <Track from="city1" gauge="normal" to="side5"/> + </Tile> + <Tile colour="green" id="2053" name="B Coalfields"> + <Station id="city1" position="0" slots="2" type="City" value="50"/> + <Track from="city1" gauge="normal" to="side5"/> + <Track from="city1" gauge="normal" to="side1"/> + <Track from="city1" gauge="normal" to="side3"/> + </Tile> + <Tile colour="green" id="54" name="54"> + <Station id="city1" position="352" slots="1" type="City" value="60"/> + <Station id="city2" position="552" slots="1" type="City" value="60"/> + <Track from="city1" gauge="normal" to="side3"/> + <Track from="city1" gauge="normal" to="side4"/> + <Track from="city2" gauge="normal" to="side5"/> + <Track from="city2" gauge="normal" to="side0"/> + </Tile> + <Tile colour="green" id="59" name="59"> + <Station id="city1" position="052" slots="1" type="City" value="40"/> + <Station id="city2" position="352" slots="1" type="City" value="40"/> + <Track from="city1" gauge="normal" to="side1"/> + <Track from="city2" gauge="normal" to="side3"/> + </Tile> + <Tile colour="brown" id="39" name="39"> + <Track from="side3" gauge="normal" to="side4"/> + <Track from="side3" gauge="normal" to="side5"/> + <Track from="side4" gauge="normal" to="side5"/> + </Tile> + <Tile colour="brown" id="40" name="40"> + <Track from="side1" gauge="normal" to="side3"/> + <Track from="side1" gauge="normal" to="side5"/> + <Track from="side3" gauge="normal" to="side5"/> + </Tile> + <Tile colour="brown" id="41" name="41"> + <Track from="side4" gauge="normal" to="side0"/> + <Track from="side4" gauge="normal" to="side3"/> + <Track from="side0" gauge="normal" to="side3"/> + </Tile> + <Tile colour="brown" id="42" name="42"> + <Track from="side3" gauge="normal" to="side5"/> + <Track from="side3" gauge="normal" to="side0"/> + <Track from="side5" gauge="normal" to="side0"/> + </Tile> + <Tile colour="brown" id="43" name="43"> + <Track from="side3" gauge="normal" to="side5"/> + <Track from="side3" gauge="normal" to="side0"/> + <Track from="side4" gauge="normal" to="side5"/> + <Track from="side4" gauge="normal" to="side0"/> + </Tile> + <Tile colour="brown" id="44" name="44"> + <Track from="side3" gauge="normal" to="side0"/> + <Track from="side1" gauge="normal" to="side0"/> + <Track from="side3" gauge="normal" to="side4"/> + <Track from="side1" gauge="normal" to="side4"/> + </Tile> + <Tile colour="brown" id="45" name="45"> + <Track from="side1" gauge="normal" to="side5"/> + <Track from="side1" gauge="normal" to="side3"/> + <Track from="side5" gauge="normal" to="side0"/> + <Track from="side3" gauge="normal" to="side0"/> + </Tile> + <Tile colour="brown" id="46" name="46"> + <Track from="side1" gauge="normal" to="side5"/> + <Track from="side1" gauge="normal" to="side0"/> + <Track from="side3" gauge="normal" to="side5"/> + <Track from="side3" gauge="normal" to="side0"/> + </Tile> + <Tile colour="brown" id="47" name="47"> + <Track from="side3" gauge="normal" to="side0"/> + <Track from="side3" gauge="normal" to="side1"/> + <Track from="side4" gauge="normal" to="side0"/> + <Track from="side4" gauge="normal" to="side1"/> + </Tile> + <Tile colour="brown" id="61" name="61"> + <Station id="city1" position="0" slots="1" type="City" value="60"/> + <Track from="city1" gauge="normal" to="side1"/> + <Track from="city1" gauge="normal" to="side3"/> + <Track from="city1" gauge="normal" to="side5"/> + <Track from="city1" gauge="normal" to="side0"/> + </Tile> + <Tile colour="brown" id="1061" name="B Coalfields"> + <Station id="city1" position="0" slots="2" type="City" value="60"/> + <Track from="city1" gauge="normal" to="side0"/> + <Track from="city1" gauge="normal" to="side5"/> + <Track from="city1" gauge="normal" to="side1"/> + <Track from="city1" gauge="normal" to="side3"/> + </Tile> + <Tile colour="brown" id="2061" name="BA Coalfields"> + <Station id="city1" position="0" slots="3" type="City" value="60"/> + <Track from="city1" gauge="normal" to="side0"/> + <Track from="city1" gauge="normal" to="side1"/> + <Track from="city1" gauge="normal" to="side2"/> + <Track from="city1" gauge="normal" to="side3"/> + <Track from="city1" gauge="normal" to="side4"/> + </Tile> + <Tile colour="brown" id="62" name="62"> + <Station id="city1" position="302" slots="2" type="City" value="80"/> + <Station id="city2" position="002" slots="2" type="City" value="80"/> + <Track from="city1" gauge="normal" to="side3"/> + <Track from="city1" gauge="normal" to="side4"/> + <Track from="city2" gauge="normal" to="side5"/> + <Track from="city2" gauge="normal" to="side0"/> + </Tile> + <Tile colour="brown" id="1062" name="NY Coalfields"> + <Station id="city1" position="0" slots="4" type="City" value="80"/> + <Track from="city1" gauge="normal" to="side3"/> + <Track from="city1" gauge="normal" to="side2"/> + <Track from="city1" gauge="normal" to="side1"/> + <Track from="city1" gauge="normal" to="side0"/> + </Tile> + <Tile colour="brown" id="63" name="63"> + <Station id="city1" position="0" slots="2" type="City" value="40"/> + <Track from="city1" gauge="normal" to="side0"/> + <Track from="city1" gauge="normal" to="side1"/> + <Track from="city1" gauge="normal" to="side2"/> + <Track from="city1" gauge="normal" to="side3"/> + <Track from="city1" gauge="normal" to="side4"/> + <Track from="city1" gauge="normal" to="side5"/> + </Tile> + <Tile colour="brown" id="64" name="64"> + <Station id="city1" position="401" slots="1" type="City" value="50"/> + <Station id="city2" position="052" slots="1" type="City" value="50"/> + <Track from="city1" gauge="normal" to="side3"/> + <Track from="city1" gauge="normal" to="side5"/> + <Track from="city2" gauge="normal" to="side1"/> + <Track from="city2" gauge="normal" to="side0"/> + </Tile> + <Tile colour="brown" id="65" name="65"> + <Station id="city1" position="501" slots="1" type="City" value="50"/> + <Station id="city2" position="252" slots="1" type="City" value="50"/> + <Track from="city1" gauge="normal" to="side4"/> + <Track from="city1" gauge="normal" to="side0"/> + <Track from="city2" gauge="normal" to="side2"/> + <Track from="city2" gauge="normal" to="side3"/> + </Tile> + <Tile colour="brown" id="66" name="66"> + <Station id="city1" position="002" slots="1" type="City" value="50"/> + <Station id="city2" position="452" slots="1" type="City" value="50"/> + <Track from="city1" gauge="normal" to="side3"/> + <Track from="city1" gauge="normal" to="side0"/> + <Track from="city2" gauge="normal" to="side4"/> + <Track from="city2" gauge="normal" to="side5"/> + </Tile> + <Tile colour="brown" id="67" name="67"> + <Station id="city1" position="307" slots="1" type="City" value="50"/> + <Station id="city2" position="502" slots="1" type="City" value="50"/> + <Track from="city1" gauge="normal" to="side1"/> + <Track from="city1" gauge="normal" to="side3"/> + <Track from="city2" gauge="normal" to="side5"/> + <Track from="city2" gauge="normal" to="side2"/> + </Tile> + <Tile colour="brown" id="68" name="68"> + <Station id="city1" position="302" slots="1" type="City" value="50"/> + <Station id="city2" position="502" slots="1" type="City" value="50"/> + <Track from="city1" gauge="normal" to="side3"/> + <Track from="city2" gauge="normal" to="side2"/> + <Track from="city2" gauge="normal" to="side5"/> + <Track from="city1" gauge="normal" to="side0"/> + </Tile> + <Tile colour="brown" id="70" name="70"> + <Track from="side3" gauge="normal" to="side5"/> + <Track from="side3" gauge="normal" to="side4"/> + <Track from="side5" gauge="normal" to="side0"/> + <Track from="side4" gauge="normal" to="side0"/> + </Tile> + <Tile colour="brown" id="1717" name="G17"> + <Station id="city1" position="0" type="Town" value="20"/> + <Track from="city1" gauge="normal" to="side0"/> + <Track from="city1" gauge="normal" to="side1"/> + <Track from="city1" gauge="normal" to="side2"/> + <Track from="city1" gauge="normal" to="side3"/> + <Track from="city1" gauge="normal" to="side4"/> + </Tile> + <Tile colour="gray" id="124" name="124"> + <Station id="city1" position="0" slots="4" type="City" value="100"/> + <Track from="city1" gauge="normal" to="side0"/> + <Track from="city1" gauge="normal" to="side1"/> + <Track from="city1" gauge="normal" to="side2"/> + <Track from="city1" gauge="normal" to="side3"/> + </Tile> + <Tile colour="gray" id="368" name="368"> + <Station id="city1" position="0" slots="2" type="City" value="70"/> + <Track from="city1" gauge="normal" to="side5"/> + <Track from="city1" gauge="normal" to="side0"/> + <Track from="city1" gauge="normal" to="side1"/> + <Track from="city1" gauge="normal" to="side3"/> + <Track from="city1" gauge="normal" to="side4"/> + </Tile> + <Tile colour="brown" id="448" name="1889 dc K brown"> + <Station id="city1" position="0" slots="2" type="City" value="40"/> + <Track from="city1" gauge="normal" to="side0"/> + <Track from="city1" gauge="normal" to="side1"/> + <Track from="city1" gauge="normal" to="side2"/> + <Track from="city1" gauge="normal" to="side3"/> + </Tile> +</Tiles> diff --git a/data/GamesList.xml b/data/GamesList.xml index 6110b26..3674b65 100644 --- a/data/GamesList.xml +++ b/data/GamesList.xml @@ -224,6 +224,20 @@ Should work, but has not been extensively tested. Limitations as with 1830. <Players minimum="2" maximum="5"/> </Game> + <Game name="18Lummer"> + <Note>Fully playable</Note> + <Description>18Lummer - Lummerland + Copyright Kay-Viktor Stegemann + Limitations: + - Frau Waas baking Gugelhupf not implemented + - Bidding for start position not implemented + </Description> + <Option name="RouteAwareness" values="Highlight,Deactivate" default="Highlight" /> + <Option name="RevenueCalculation" values="Suggest,Deactivate" default="Suggest" /> + <Players minimum="2" maximum="4"/> + </Game> + + <Game name="1870"> <Note>Not yet playable</Note> <Description>1870 - Railroading across the Trans Mississippi |
From: Erik V. <ev...@us...> - 2012-06-05 20:07:08
|
rails/game/PublicCompany.java | 22 +++++++++++++--------- 1 file changed, 13 insertions(+), 9 deletions(-) New commits: commit ba0b55b7bf6e01dc671a578d9440bc17706481ba Author: John David Galt <jd...@di...> Date: Tue Jun 5 22:06:07 2012 +0200 Distance-dependent token lay costs can now have different base costs per laid token. Applies to 1837. diff --git a/rails/game/PublicCompany.java b/rails/game/PublicCompany.java index 7b38879..ba876c0 100644 --- a/rails/game/PublicCompany.java +++ b/rails/game/PublicCompany.java @@ -1761,21 +1761,25 @@ public class PublicCompany extends Company implements PublicCompanyI { if (baseTokenLayCost == null) return 0; - if (baseTokenLayCostMethod.equals(BASE_COST_SEQUENCE)) { - int index = getNumberOfLaidBaseTokens(); + /* Changed by JDG/EV: allow cost array for both calculation methods. + * In 1837, token lay cost per hex distance depends on + * the number of tokens laid before. */ + int index = getNumberOfLaidBaseTokens(); - if (index >= baseTokenLayCost.length) { - index = baseTokenLayCost.length - 1; - } else if (index < 0) { - index = 0; - } + if (index >= baseTokenLayCost.length) { + index = baseTokenLayCost.length - 1; + } else if (index < 0) { + index = 0; + } + + if (baseTokenLayCostMethod.equals(BASE_COST_SEQUENCE)) { return baseTokenLayCost[index]; } else if (baseTokenLayCostMethod.equals(BASE_COST_DISTANCE)) { if (hex == null) { - return baseTokenLayCost[0]; + return baseTokenLayCost[index]; } else { // WARNING: no provision yet for multiple home hexes. - return mapManager.getHexDistance(homeHexes.get(0), hex) * baseTokenLayCost[0]; + return mapManager.getHexDistance(homeHexes.get(0), hex) * baseTokenLayCost[index]; } } else { return 0; |
.classpath | 27 AUTHORS | 26 LICENSE | 340 LocalisedText.properties | 710 README | 16 Rails-format.xml | 251 build.xml | 180 buildinfo.xml | 16 data/1825/CompanyManager.xml | 80 data/1825/Game.xml | 97 data/1825/Map.xml | 208 data/1825/StockMarket.xml | 39 data/1825/TileSet.xml | 128 data/1825/Tiles.xml | 399 data/1826/CompanyManager.xml | 117 data/1826/Game.xml | 117 data/1826/Map.xml | 96 data/1826/StockMarket.xml | 100 data/1826/TileSet.xml | 142 data/1826/Tiles.xml | 354 data/1830/CompanyManager.xml | 181 data/1830/Game.xml | 258 data/1830/Map.xml | 196 data/1830/StockMarket.xml | 149 data/1830/TileSet.xml | 247 data/1830/Tiles.xml | 465 data/1835/CompanyManager.xml | 244 data/1835/Game.xml | 113 data/1835/Map.xml | 128 data/1835/StockMarket.xml | 76 data/1835/TileSet.xml | 207 data/1835/Tiles.xml | 511 data/1851/CompanyManager.xml | 87 data/1851/Game.xml | 120 data/1851/Map.xml | 93 data/1851/StockMarket.xml | 77 data/1851/TileSet.xml | 135 data/1851/Tiles.xml | 216 data/1856/CompanyManager.xml | 173 data/1856/Game.xml | 108 data/1856/Map.xml | 102 data/1856/StockMarket.xml | 144 data/1856/TileSet.xml | 164 data/1856/Tiles.xml | 364 data/1870/CompanyManager.xml | 118 data/1870/Game.xml | 109 data/1870/Map.xml | 156 data/1870/StockMarket.xml | 239 data/1870/TileSet.xml | 132 data/1870/Tiles.xml | 245 data/1880/CompanyManager.xml | 212 data/1880/Game.xml | 155 data/1880/Map.xml | 122 data/1880/StockMarket.xml | 113 data/1880/TileSet.xml | 144 data/1880/Tiles.xml | 397 data/1889/CompanyManager.xml | 178 data/1889/Game.xml | 141 data/1889/Map.xml | 72 data/1889/StockMarket.xml | 129 data/1889/TileSet.xml | 223 data/1889/Tiles.xml | 263 data/18AL/CompanyManager.xml | 114 data/18AL/Game.xml | 121 data/18AL/Map.xml | 83 data/18AL/StockMarket.xml | 91 data/18AL/TileSet.xml | 127 data/18AL/Tiles.xml | 219 data/18EU/CompanyManager.xml | 130 data/18EU/Game.xml | 132 data/18EU/Map.xml | 133 data/18EU/MapImage.svg | 6793 -- data/18EU/StockMarket.xml | 77 data/18EU/TileSet.xml | 129 data/18EU/Tiles.xml | 281 data/18GA/CompanyManager.xml | 102 data/18GA/Game.xml | 118 data/18GA/Map.xml | 132 data/18GA/StockMarket.xml | 104 data/18GA/TileSet.xml | 249 data/18GA/Tiles.xml | 290 data/18JR/CompanyManager.xml | 101 data/18JR/Game.xml | 168 data/18JR/Map.xml | 65 data/18JR/StockMarket.xml | 111 data/18JR/TileSet.xml | 128 data/18JR/Tiles.xml | 291 data/18Kaas/CompanyManager.xml | 93 data/18Kaas/Game.xml | 105 data/18Kaas/Map.xml | 96 data/18Kaas/StockMarket.xml | 147 data/18Kaas/TileSet.xml | 123 data/18Kaas/Tiles.xml | 271 data/18Scan/CompanyManager.xml | 87 data/18Scan/Game.xml | 107 data/18Scan/Map.xml | 62 data/18Scan/StockMarket.xml | 95 data/18Scan/TileSet.xml | 87 data/18Scan/Tiles.xml | 192 data/18TN/CompanyManager.xml | 98 data/18TN/Game.xml | 128 data/18TN/Map.xml | 76 data/18TN/StockMarket.xml | 93 data/18TN/TileSet.xml | 160 data/18TN/Tiles.xml | 221 data/18VA/CompanyManager.xml | 76 data/18VA/Game.xml | 114 data/18VA/Map.xml | 54 data/18VA/StockMarket.xml | 80 data/18VA/TileSet.xml | 134 data/18VA/Tiles.xml | 304 data/GamesList.xml | 355 data/Properties.xml | 56 data/profiles/default.profile | 41 data/profiles/default.profiles | 2 data/profiles/test.profile | 125 dev/null |binary doc/developer.README | 7 html/help_or_tile.html | 28 lib/batik-1.7/CHANGES | 1528 lib/batik-1.7/LICENSE | 201 lib/batik-1.7/NOTICE | 18 lib/batik-1.7/README | 77 lib/batik-1.7/lib/LICENSE.dom-documentation.txt | 86 lib/batik-1.7/lib/LICENSE.dom-software.txt | 74 lib/batik-1.7/lib/LICENSE.js.txt | 890 lib/batik-1.7/lib/LICENSE.pdf-transcoder.txt | 2 lib/batik-1.7/lib/LICENSE.sax.txt | 23 lib/batik-1.7/lib/LICENSE.xalan-2.6.0.txt | 2 lib/batik-1.7/lib/LICENSE.xerces_2_5_0.txt | 60 lib/batik-1.7/lib/README.js.txt | 23 lib/batik-1.7/lib/README.pdf-transcoder.txt | 8 lib/batik-1.7/lib/README.xalan-2.6.0.txt | 4 lib/batik-1.7/lib/README.xerces_2_5_0.txt | 4 lib/batik-1.7/lib/README.xml-apis-ext.txt | 19 lib/batik-1.7/lib/README.xml-apis.txt | 30 lib/guava-r09/AUTHORS | 2 lib/guava-r09/CONTRIBUTORS | 1 lib/guava-r09/COPYING | 202 lib/guava-r09/README | 46 log4j.properties | 23 make_rails_pkg.sh | 16 manifest | 3 my.properties | 166 rails.bat | 2 rails.sh | 3 rails/algorithms/NetworkCompanyGraph.java | 279 rails/algorithms/NetworkEdge.java | 309 rails/algorithms/NetworkGraphBuilder.java | 340 rails/algorithms/NetworkGraphModifier.java | 17 rails/algorithms/NetworkIterator.java | 226 rails/algorithms/NetworkTrain.java | 208 rails/algorithms/NetworkVertex.java | 491 rails/algorithms/RevenueAdapter.java | 719 rails/algorithms/RevenueBonus.java | 197 rails/algorithms/RevenueBonusTemplate.java | 175 rails/algorithms/RevenueCalculator.java | 637 rails/algorithms/RevenueCalculatorMulti.java | 248 rails/algorithms/RevenueCalculatorMultiHex.java | 51 rails/algorithms/RevenueCalculatorSimple.java | 224 rails/algorithms/RevenueDynamicModifier.java | 66 rails/algorithms/RevenueListener.java | 5 rails/algorithms/RevenueManager.java | 268 rails/algorithms/RevenueStaticModifier.java | 29 rails/algorithms/RevenueTrainRun.java | 321 rails/common/DisplayBuffer.java | 117 rails/common/GuiDef.java | 58 rails/common/GuiHints.java | 94 rails/common/LocalText.java | 153 rails/common/MoneyFormatter.java | 30 rails/common/ResourceLoader.java | 577 rails/common/ServerToClient.java | 33 rails/common/parser/ComponentManager.java | 122 rails/common/parser/Config.java | 584 rails/common/parser/ConfigItem.java | 144 rails/common/parser/ConfigurableComponentI.java | 37 rails/common/parser/ConfigurationException.java | 37 rails/common/parser/GameFileParser.java | 148 rails/common/parser/GameInfo.java | 94 rails/common/parser/GameInfoParser.java | 113 rails/common/parser/GameOption.java | 141 rails/common/parser/Tag.java | 424 rails/common/parser/XMLParser.java | 219 rails/common/parser/XMLTags.java | 31 rails/game/AbstractRound.java | 544 rails/game/Bank.java | 204 rails/game/BankPortfolio.java | 38 rails/game/BaseToken.java | 51 rails/game/Bonus.java | 130 rails/game/BonusToken.java | 124 rails/game/Certificate.java | 16 rails/game/Closeable.java | 9 rails/game/Company.java | 258 rails/game/CompanyManager.java | 1 rails/game/CompanyManagerI.java | 70 rails/game/CompanyType.java | 122 rails/game/EndOfGameRound.java | 51 rails/game/Game.java | 296 rails/game/GameDef.java | 59 rails/game/GameManager.java | 1915 rails/game/MapHex.java | 1406 rails/game/MapManager.java | 526 rails/game/OperatingRound.java | 3166 - rails/game/Phase.java | 405 rails/game/PhaseManager.java | 115 rails/game/Player.java | 258 rails/game/PlayerManager.java | 104 rails/game/PrivateCompany.java | 528 rails/game/PublicCertificate.java | 215 rails/game/PublicCompany.java | 2065 rails/game/ReportBuffer.java | 474 rails/game/Round.java | 34 rails/game/ShareSellingRound.java | 426 rails/game/StartItem.java | 528 rails/game/StartPacket.java | 249 rails/game/StartRound.java | 403 rails/game/StartRound_1830.java | 399 rails/game/StartRound_1835.java | 279 rails/game/Station.java | 158 rails/game/StationHolder.java | 15 rails/game/StockMarket.java | 401 rails/game/StockRound.java | 1607 rails/game/StockSpace.java | 308 rails/game/StockSpaceType.java | 131 rails/game/Stop.java | 365 rails/game/SwitchableUIRound.java | 15 rails/game/Tile.java | 760 rails/game/TileManager.java | 1 rails/game/TileOrientation.java | 57 rails/game/Token.java | 68 rails/game/Track.java | 60 rails/game/Train.java | 173 rails/game/TrainCertificateType.java | 249 rails/game/TrainManager.java | 3 rails/game/TrainType.java | 213 rails/game/TreasuryShareRound.java | 553 rails/game/action/ActionTaker.java | 33 rails/game/action/BidStartItem.java | 94 rails/game/action/BuyBonusToken.java | 132 rails/game/action/BuyCertificate.java | 174 rails/game/action/BuyPrivate.java | 103 rails/game/action/BuyStartItem.java | 105 rails/game/action/BuyTrain.java | 345 rails/game/action/DiscardTrain.java | 120 rails/game/action/ExchangeTokens.java | 97 rails/game/action/ExchangeableToken.java | 53 rails/game/action/GameAction.java | 73 rails/game/action/LayBaseToken.java | 130 rails/game/action/LayBonusToken.java | 101 rails/game/action/LayTile.java | 337 rails/game/action/LayToken.java | 112 rails/game/action/MergeCompanies.java | 163 rails/game/action/NullAction.java | 57 rails/game/action/PossibleAction.java | 123 rails/game/action/PossibleActions.java | 116 rails/game/action/PossibleORAction.java | 61 rails/game/action/ReachDestinations.java | 113 rails/game/action/RepayLoans.java | 122 rails/game/action/RequestTurn.java | 49 rails/game/action/SellShares.java | 132 rails/game/action/SetDividend.java | 215 rails/game/action/StartCompany.java | 66 rails/game/action/StartItemAction.java | 59 rails/game/action/TakeLoans.java | 108 rails/game/action/UseSpecialProperty.java | 70 rails/game/correct/CashCorrectionAction.java | 134 rails/game/correct/CashCorrectionManager.java | 112 rails/game/correct/ClosePrivate.java | 78 rails/game/correct/CorrectionAction.java | 31 rails/game/correct/CorrectionManager.java | 95 rails/game/correct/CorrectionManagerI.java | 22 rails/game/correct/CorrectionModeAction.java | 116 rails/game/correct/CorrectionType.java | 20 rails/game/correct/MapCorrectionAction.java | 254 rails/game/correct/MapCorrectionManager.java | 202 rails/game/correct/OperatingCost.java | 124 rails/game/model/BaseTokensModel.java | 100 rails/game/model/BonusModel.java | 38 rails/game/model/CalculatedMoneyModel.java | 41 rails/game/model/CashMoneyModel.java | 67 rails/game/model/CashOwner.java | 11 rails/game/model/CertificateCountModel.java | 47 rails/game/model/CertificatesModel.java | 128 rails/game/model/MoneyModel.java | 128 rails/game/model/PortfolioModel.java | 650 rails/game/model/PortfolioOwner.java | 13 rails/game/model/PresidentModel.java | 62 rails/game/model/PriceModel.java | 66 rails/game/model/PrivatesModel.java | 66 rails/game/model/TrainsModel.java | 116 rails/game/model/ViewUpdate.java | 58 rails/game/round/Activity.java | 39 rails/game/round/RoundContext.java | 9 rails/game/special/ExchangeForShare.java | 76 rails/game/special/LocatedBonus.java | 78 rails/game/special/SellBonusToken.java | 120 rails/game/special/SpecialProperty.java | 290 rails/game/special/SpecialRight.java | 144 rails/game/special/SpecialTileLay.java | 157 rails/game/special/SpecialTokenLay.java | 149 rails/game/special/SpecialTrainBuy.java | 135 rails/game/specific/_1825/DoubleHeadingModifier.java | 123 rails/game/specific/_1825/OperatingRound_1825.java | 42 rails/game/specific/_1825/PublicCompany_1825.java | 64 rails/game/specific/_1825/ScoreTileOnlyOnceModifier.java | 47 rails/game/specific/_1825/StartRound_1825.java | 134 rails/game/specific/_1825/StockRound_1825.java | 166 rails/game/specific/_1825/TerminateAtMajorModifier.java | 66 rails/game/specific/_1826/TGVModifier.java | 82 rails/game/specific/_1835/FoldIntoPrussian.java | 111 rails/game/specific/_1835/GameManager_1835.java | 72 rails/game/specific/_1835/OperatingRound_1835.java | 307 rails/game/specific/_1835/PrussianFormationRound.java | 471 rails/game/specific/_1835/StockRound_1835.java | 187 rails/game/specific/_1851/BirminghamTileModifier.java | 44 rails/game/specific/_1851/OffBoardRevenueModifier.java | 54 rails/game/specific/_1851/StartRound_1851.java | 119 rails/game/specific/_1856/CGRFormationRound.java | 874 rails/game/specific/_1856/GameManager_1856.java | 35 rails/game/specific/_1856/OperatingRound_1856.java | 561 rails/game/specific/_1856/PublicCompany_1856.java | 74 rails/game/specific/_1856/PublicCompany_CGR.java | 184 rails/game/specific/_1856/ShareSellingRound_1856.java | 49 rails/game/specific/_1856/StockRound_1856.java | 205 rails/game/specific/_1880/Investor_1880.java | 69 rails/game/specific/_1880/OperatingRound_1880.java | 23 rails/game/specific/_1880/PublicCompany_1880.java | 23 rails/game/specific/_1880/StartRound_1880.java | 396 rails/game/specific/_1880/StockRound_1880.java | 55 rails/game/specific/_1889/OperatingRound_1889.java | 153 rails/game/specific/_18AL/AssignNamedTrains.java | 156 rails/game/specific/_18AL/NameTrains.java | 114 rails/game/specific/_18AL/NameableTrain.java | 39 rails/game/specific/_18AL/NamedTrainRevenueModifier.java | 154 rails/game/specific/_18AL/NamedTrainToken.java | 118 rails/game/specific/_18AL/OperatingRound_18AL.java | 100 rails/game/specific/_18EU/FinalMinorExchangeRound.java | 131 rails/game/specific/_18EU/GameManager_18EU.java | 108 rails/game/specific/_18EU/OffBoardRevenueModifier.java | 91 rails/game/specific/_18EU/OperatingRound_18EU.java | 286 rails/game/specific/_18EU/PullmanRevenueModifier.java | 78 rails/game/specific/_18EU/StartCompany_18EU.java | 157 rails/game/specific/_18EU/StartRound_18EU.java | 377 rails/game/specific/_18EU/StockRound_18EU.java | 769 rails/game/specific/_18GA/OperatingRound_18GA.java | 41 rails/game/specific/_18Kaas/RuhrRevenueModifier.java | 65 rails/game/specific/_18TN/OperatingRound_18TN.java | 114 rails/game/specific/_18TN/PublicCompany_18TN.java | 77 rails/game/state/AbstractItem.java | 81 rails/game/state/ActionChangeSet.java | 36 rails/game/state/ArrayListChange.java | 58 rails/game/state/ArrayListMultimapState.java | 59 rails/game/state/ArrayListState.java | 113 rails/game/state/AutoChangeSet.java | 31 rails/game/state/BooleanChange.java | 38 rails/game/state/BooleanState.java | 47 rails/game/state/Change.java | 17 rails/game/state/ChangeSet.java | 102 rails/game/state/ChangeStack.java | 228 rails/game/state/Context.java | 129 rails/game/state/CountableItem.java | 17 rails/game/state/Formatter.java | 9 rails/game/state/GenericState.java | 57 rails/game/state/GenericStateChange.java | 35 rails/game/state/HashMapChange.java | 61 rails/game/state/HashMapState.java | 145 rails/game/state/HashMultimapState.java | 99 rails/game/state/HashSetChange.java | 42 rails/game/state/HashSetState.java | 113 rails/game/state/IntegerChange.java | 38 rails/game/state/IntegerState.java | 53 rails/game/state/Item.java | 40 rails/game/state/Model.java | 42 rails/game/state/MultimapChange.java | 39 rails/game/state/MultimapState.java | 14 rails/game/state/Observable.java | 67 rails/game/state/Observer.java | 18 rails/game/state/Ownable.java | 20 rails/game/state/OwnableItem.java | 19 rails/game/state/Owner.java | 13 rails/game/state/Portfolio.java | 87 rails/game/state/PortfolioChange.java | 44 rails/game/state/PortfolioHolder.java | 8 rails/game/state/PortfolioList.java | 65 rails/game/state/PortfolioManager.java | 26 rails/game/state/PortfolioMap.java | 94 rails/game/state/Root.java | 86 rails/game/state/State.java | 73 rails/game/state/StateManager.java | 200 rails/game/state/StringChange.java | 38 rails/game/state/StringState.java | 72 rails/game/state/TileMove.java | 69 rails/game/state/Wallet.java | 92 rails/game/state/WalletChange.java | 50 rails/game/state/WalletManager.java | 25 rails/ui/swing/AbstractReportWindow.java | 63 rails/ui/swing/ActionPerformer.java | 15 rails/ui/swing/AutoLoadPoller.java | 160 rails/ui/swing/AutoSaveLoadDialog.java | 147 rails/ui/swing/ConfigWindow.java | 633 rails/ui/swing/GUIToken.java | 122 rails/ui/swing/GameSetupWindow.java | 599 rails/ui/swing/GameStatus.java | 1055 rails/ui/swing/GameUIManager.java | 1097 rails/ui/swing/GridPanel.java | 197 rails/ui/swing/HelpWindow.java | 86 rails/ui/swing/ImageLoader.java | 143 rails/ui/swing/MapPanel.java | 141 rails/ui/swing/MessagePanel.java | 108 rails/ui/swing/ORPanel.java | 1038 rails/ui/swing/ORUIManager.java | 1979 rails/ui/swing/ORWindow.java | 215 rails/ui/swing/RemainingTilesWindow.java | 136 rails/ui/swing/ReportWindow.java | 302 rails/ui/swing/ReportWindowDynamic.java | 260 rails/ui/swing/Scale.java | 64 rails/ui/swing/StartRoundWindow.java | 741 rails/ui/swing/StatusWindow.java | 806 rails/ui/swing/StockChart.java | 137 rails/ui/swing/TokenIcon.java | 62 rails/ui/swing/UpgradesPanel.java | 540 rails/ui/swing/WindowSettings.java | 129 rails/ui/swing/elements/ActionButton.java | 44 rails/ui/swing/elements/ActionCheckBoxMenuItem.java | 44 rails/ui/swing/elements/ActionLabel.java | 49 rails/ui/swing/elements/ActionMenuItem.java | 44 rails/ui/swing/elements/Caption.java | 40 rails/ui/swing/elements/CheckBoxDialog.java | 145 rails/ui/swing/elements/ClickField.java | 56 rails/ui/swing/elements/ConfirmationDialog.java | 121 rails/ui/swing/elements/DialogOwner.java | 16 rails/ui/swing/elements/Field.java | 133 rails/ui/swing/elements/GUIStockSpace.java | 165 rails/ui/swing/elements/MessageDialog.java | 93 rails/ui/swing/elements/RadioButtonDialog.java | 136 rails/ui/swing/elements/RailsIcon.java | 30 rails/ui/swing/elements/Select.java | 28 rails/ui/swing/elements/Spinner.java | 21 rails/ui/swing/gamespecific/_1835/GameUIManager_1835.java | 50 rails/ui/swing/gamespecific/_1835/StatusWindow_1835.java | 102 rails/ui/swing/gamespecific/_1856/StatusWindow_1856.java | 111 rails/ui/swing/gamespecific/_18AL/NameTrainsDialog.java | 218 rails/ui/swing/gamespecific/_18AL/ORUIManager_18AL.java | 46 rails/ui/swing/gamespecific/_18EU/GameStatus_18EU.java | 84 rails/ui/swing/gamespecific/_18EU/GameUIManager_18EU.java | 133 rails/ui/swing/gamespecific/_18EU/StatusWindow_18EU.java | 92 rails/ui/swing/hexmap/EWHexMap.java | 44 rails/ui/swing/hexmap/GUIHex.java | 944 rails/ui/swing/hexmap/GUITile.java | 300 rails/ui/swing/hexmap/HexMap.java | 611 rails/ui/swing/hexmap/HexMapImage.java | 175 rails/ui/swing/hexmap/NSHexMap.java | 42 rails/util/BuildInfo.java | 7 rails/util/GameData.java | 57 rails/util/GameFileIO.java | 299 rails/util/RunGame.java | 89 rails/util/SequenceUtil.java | 60 rails/util/Util.java | 176 src/AUTHORS | 26 src/LICENSE | 340 src/LocalisedText.properties | 710 src/README | 16 src/Rails-format.xml | 251 src/build.xml | 180 src/buildinfo.xml | 16 src/data/1825/CompanyManager.xml | 80 src/data/1825/Game.xml | 97 src/data/1825/Map.xml | 208 src/data/1825/StockMarket.xml | 39 src/data/1825/TileSet.xml | 128 src/data/1825/Tiles.xml | 399 src/data/1826/CompanyManager.xml | 117 src/data/1826/Game.xml | 117 src/data/1826/Map.xml | 96 src/data/1826/StockMarket.xml | 100 src/data/1826/TileSet.xml | 142 src/data/1826/Tiles.xml | 354 src/data/1830/CompanyManager.xml | 181 src/data/1830/Game.xml | 258 src/data/1830/Map.xml | 196 src/data/1830/StockMarket.xml | 149 src/data/1830/TileSet.xml | 247 src/data/1830/Tiles.xml | 465 src/data/1835/CompanyManager.xml | 244 src/data/1835/Game.xml | 113 src/data/1835/Map.xml | 128 src/data/1835/StockMarket.xml | 76 src/data/1835/TileSet.xml | 207 src/data/1835/Tiles.xml | 511 src/data/1851/CompanyManager.xml | 87 src/data/1851/Game.xml | 120 src/data/1851/Map.xml | 93 src/data/1851/StockMarket.xml | 77 src/data/1851/TileSet.xml | 135 src/data/1851/Tiles.xml | 216 src/data/1856/CompanyManager.xml | 173 src/data/1856/Game.xml | 108 src/data/1856/Map.xml | 102 src/data/1856/StockMarket.xml | 144 src/data/1856/TileSet.xml | 164 src/data/1856/Tiles.xml | 364 src/data/1870/CompanyManager.xml | 118 src/data/1870/Game.xml | 109 src/data/1870/Map.xml | 156 src/data/1870/StockMarket.xml | 239 src/data/1870/TileSet.xml | 132 src/data/1870/Tiles.xml | 245 src/data/1880/CompanyManager.xml | 212 src/data/1880/Game.xml | 155 src/data/1880/Map.xml | 122 src/data/1880/StockMarket.xml | 113 src/data/1880/TileSet.xml | 144 src/data/1880/Tiles.xml | 397 src/data/1889/CompanyManager.xml | 178 src/data/1889/Game.xml | 141 src/data/1889/Map.xml | 72 src/data/1889/StockMarket.xml | 129 src/data/1889/TileSet.xml | 223 src/data/1889/Tiles.xml | 263 src/data/18AL/CompanyManager.xml | 114 src/data/18AL/Game.xml | 121 src/data/18AL/Map.xml | 83 src/data/18AL/StockMarket.xml | 91 src/data/18AL/TileSet.xml | 127 src/data/18AL/Tiles.xml | 219 src/data/18EU/CompanyManager.xml | 130 src/data/18EU/Game.xml | 132 src/data/18EU/Map.xml | 133 src/data/18EU/MapImage.svg | 6793 ++ src/data/18EU/StockMarket.xml | 77 src/data/18EU/TileSet.xml | 129 src/data/18EU/Tiles.xml | 281 src/data/18GA/CompanyManager.xml | 102 src/data/18GA/Game.xml | 118 src/data/18GA/Map.xml | 132 src/data/18GA/StockMarket.xml | 104 src/data/18GA/TileSet.xml | 249 src/data/18GA/Tiles.xml | 290 src/data/18JR/CompanyManager.xml | 101 src/data/18JR/Game.xml | 168 src/data/18JR/Map.xml | 65 src/data/18JR/StockMarket.xml | 111 src/data/18JR/TileSet.xml | 128 src/data/18JR/Tiles.xml | 291 src/data/18Kaas/CompanyManager.xml | 93 src/data/18Kaas/Game.xml | 105 src/data/18Kaas/Map.xml | 96 src/data/18Kaas/StockMarket.xml | 147 src/data/18Kaas/TileSet.xml | 123 src/data/18Kaas/Tiles.xml | 271 src/data/18Scan/CompanyManager.xml | 87 src/data/18Scan/Game.xml | 107 src/data/18Scan/Map.xml | 62 src/data/18Scan/StockMarket.xml | 95 src/data/18Scan/TileSet.xml | 87 src/data/18Scan/Tiles.xml | 192 src/data/18TN/CompanyManager.xml | 98 src/data/18TN/Game.xml | 128 src/data/18TN/Map.xml | 76 src/data/18TN/StockMarket.xml | 93 src/data/18TN/TileSet.xml | 160 src/data/18TN/Tiles.xml | 221 src/data/18VA/CompanyManager.xml | 76 src/data/18VA/Game.xml | 114 src/data/18VA/Map.xml | 54 src/data/18VA/StockMarket.xml | 80 src/data/18VA/TileSet.xml | 134 src/data/18VA/Tiles.xml | 304 src/data/GamesList.xml | 355 src/data/Properties.xml | 56 src/data/profiles/default.profile | 41 src/data/profiles/default.profiles | 2 src/data/profiles/test.profile | 125 src/doc/18oo.vsd |binary src/doc/developer.README | 7 src/html/help_or_tile.html | 28 src/images/icon/rails.icns |binary src/images/icon/rails.ico |binary src/images/icon/rails128.png |binary src/images/icon/rails512.png |binary src/lib/batik-1.7/CHANGES | 1528 src/lib/batik-1.7/LICENSE | 201 src/lib/batik-1.7/NOTICE | 18 src/lib/batik-1.7/README | 77 src/lib/batik-1.7/batik-rasterizer.jar |binary src/lib/batik-1.7/batik-slideshow.jar |binary src/lib/batik-1.7/batik-squiggle.jar |binary src/lib/batik-1.7/batik-svgpp.jar |binary src/lib/batik-1.7/batik-ttf2svg.jar |binary src/lib/batik-1.7/batik.jar |binary src/lib/batik-1.7/lib/LICENSE.dom-documentation.txt | 86 src/lib/batik-1.7/lib/LICENSE.dom-software.txt | 74 src/lib/batik-1.7/lib/LICENSE.js.txt | 890 src/lib/batik-1.7/lib/LICENSE.pdf-transcoder.txt | 2 src/lib/batik-1.7/lib/LICENSE.sax.txt | 23 src/lib/batik-1.7/lib/LICENSE.xalan-2.6.0.txt | 2 src/lib/batik-1.7/lib/LICENSE.xerces_2_5_0.txt | 60 src/lib/batik-1.7/lib/README.js.txt | 23 src/lib/batik-1.7/lib/README.pdf-transcoder.txt | 8 src/lib/batik-1.7/lib/README.xalan-2.6.0.txt | 4 src/lib/batik-1.7/lib/README.xerces_2_5_0.txt | 4 src/lib/batik-1.7/lib/README.xml-apis-ext.txt | 19 src/lib/batik-1.7/lib/README.xml-apis.txt | 30 src/lib/batik-1.7/lib/batik-anim.jar |binary src/lib/batik-1.7/lib/batik-awt-util.jar |binary src/lib/batik-1.7/lib/batik-bridge.jar |binary src/lib/batik-1.7/lib/batik-codec.jar |binary src/lib/batik-1.7/lib/batik-css.jar |binary src/lib/batik-1.7/lib/batik-dom.jar |binary src/lib/batik-1.7/lib/batik-ext.jar |binary src/lib/batik-1.7/lib/batik-extension.jar |binary src/lib/batik-1.7/lib/batik-gui-util.jar |binary src/lib/batik-1.7/lib/batik-gvt.jar |binary src/lib/batik-1.7/lib/batik-parser.jar |binary src/lib/batik-1.7/lib/batik-script.jar |binary src/lib/batik-1.7/lib/batik-svg-dom.jar |binary src/lib/batik-1.7/lib/batik-svggen.jar |binary src/lib/batik-1.7/lib/batik-swing.jar |binary src/lib/batik-1.7/lib/batik-transcoder.jar |binary src/lib/batik-1.7/lib/batik-util.jar |binary src/lib/batik-1.7/lib/batik-xml.jar |binary src/lib/batik-1.7/lib/js.jar |binary src/lib/batik-1.7/lib/pdf-transcoder.jar |binary src/lib/batik-1.7/lib/xalan-2.6.0.jar |binary src/lib/batik-1.7/lib/xerces_2_5_0.jar |binary src/lib/batik-1.7/lib/xml-apis-ext.jar |binary src/lib/batik-1.7/lib/xml-apis.jar |binary src/lib/guava-r09/AUTHORS | 2 src/lib/guava-r09/CONTRIBUTORS | 1 src/lib/guava-r09/COPYING | 202 src/lib/guava-r09/README | 46 src/lib/guava-r09/guava-r09-gwt.jar |binary src/lib/guava-r09/guava-r09.jar |binary src/lib/jgraph5/jgraph.jar |binary src/lib/jgrapht-0.7.3/jgrapht-jdk1.5.jar |binary src/lib/junit-4.8.2/junit.jar |binary src/lib/logback-1.0.4/logback-classic-1.0.4.jar |binary src/lib/logback-1.0.4/logback-core-1.0.4.jar |binary src/lib/sl4j-1.6.5/slf4j-api-1.6.5.jar |binary src/logback.xml | 22 src/make_rails_pkg.sh | 16 src/manifest | 3 src/my.properties | 166 src/rails.bat | 2 src/rails.sh | 3 src/rails/algorithms/NetworkCompanyGraph.java | 280 src/rails/algorithms/NetworkEdge.java | 310 src/rails/algorithms/NetworkGraphBuilder.java | 341 src/rails/algorithms/NetworkGraphModifier.java | 17 src/rails/algorithms/NetworkIterator.java | 227 src/rails/algorithms/NetworkTrain.java | 209 src/rails/algorithms/NetworkVertex.java | 492 src/rails/algorithms/RevenueAdapter.java | 720 src/rails/algorithms/RevenueBonus.java | 198 src/rails/algorithms/RevenueBonusTemplate.java | 176 src/rails/algorithms/RevenueCalculator.java | 638 src/rails/algorithms/RevenueCalculatorMulti.java | 248 src/rails/algorithms/RevenueCalculatorMultiHex.java | 51 src/rails/algorithms/RevenueCalculatorSimple.java | 224 src/rails/algorithms/RevenueDynamicModifier.java | 66 src/rails/algorithms/RevenueListener.java | 5 src/rails/algorithms/RevenueManager.java | 269 src/rails/algorithms/RevenueStaticModifier.java | 29 src/rails/algorithms/RevenueTrainRun.java | 322 src/rails/common/DisplayBuffer.java | 118 src/rails/common/GuiDef.java | 58 src/rails/common/GuiHints.java | 94 src/rails/common/LocalText.java | 154 src/rails/common/MoneyFormatter.java | 30 src/rails/common/ResourceLoader.java | 578 src/rails/common/ServerToClient.java | 33 src/rails/common/parser/ComponentManager.java | 123 src/rails/common/parser/Config.java | 585 src/rails/common/parser/ConfigItem.java | 145 src/rails/common/parser/ConfigurableComponentI.java | 37 src/rails/common/parser/ConfigurationException.java | 37 src/rails/common/parser/GameFileParser.java | 148 src/rails/common/parser/GameInfo.java | 94 src/rails/common/parser/GameInfoParser.java | 113 src/rails/common/parser/GameOption.java | 141 src/rails/common/parser/Tag.java | 425 src/rails/common/parser/XMLParser.java | 220 src/rails/common/parser/XMLTags.java | 31 src/rails/game/AbstractRound.java | 545 src/rails/game/Bank.java | 205 src/rails/game/BankPortfolio.java | 38 src/rails/game/BaseToken.java | 51 src/rails/game/Bonus.java | 130 src/rails/game/BonusToken.java | 124 src/rails/game/Certificate.java | 16 src/rails/game/Closeable.java | 9 src/rails/game/Company.java | 259 src/rails/game/CompanyManager.java | 284 src/rails/game/CompanyManagerI.java | 70 src/rails/game/CompanyType.java | 122 src/rails/game/EndOfGameRound.java | 51 src/rails/game/Game.java | 297 src/rails/game/GameDef.java | 59 src/rails/game/GameManager.java | 1920 src/rails/game/MapHex.java | 1407 src/rails/game/MapManager.java | 527 src/rails/game/OperatingRound.java | 3166 + src/rails/game/Phase.java | 406 src/rails/game/PhaseManager.java | 116 src/rails/game/Player.java | 258 src/rails/game/PlayerManager.java | 104 src/rails/game/PrivateCompany.java | 528 src/rails/game/PublicCertificate.java | 216 src/rails/game/PublicCompany.java | 2065 src/rails/game/ReportBuffer.java | 475 src/rails/game/Round.java | 34 src/rails/game/ShareSellingRound.java | 426 src/rails/game/StartItem.java | 529 src/rails/game/StartPacket.java | 250 src/rails/game/StartRound.java | 403 src/rails/game/StartRound_1830.java | 399 src/rails/game/StartRound_1835.java | 279 src/rails/game/Station.java | 159 src/rails/game/StationHolder.java | 15 src/rails/game/StockMarket.java | 401 src/rails/game/StockRound.java | 1607 src/rails/game/StockSpace.java | 309 src/rails/game/StockSpaceType.java | 131 src/rails/game/Stop.java | 366 src/rails/game/SwitchableUIRound.java | 15 src/rails/game/Tile.java | 760 src/rails/game/TileManager.java | 244 src/rails/game/TileOrientation.java | 57 src/rails/game/Token.java | 69 src/rails/game/Track.java | 60 src/rails/game/Train.java | 174 src/rails/game/TrainCertificateType.java | 250 src/rails/game/TrainManager.java | 407 src/rails/game/TrainType.java | 214 src/rails/game/TreasuryShareRound.java | 553 src/rails/game/action/ActionTaker.java | 33 src/rails/game/action/BidStartItem.java | 94 src/rails/game/action/BuyBonusToken.java | 132 src/rails/game/action/BuyCertificate.java | 174 src/rails/game/action/BuyPrivate.java | 103 src/rails/game/action/BuyStartItem.java | 105 src/rails/game/action/BuyTrain.java | 345 src/rails/game/action/DiscardTrain.java | 120 src/rails/game/action/ExchangeTokens.java | 97 src/rails/game/action/ExchangeableToken.java | 53 src/rails/game/action/GameAction.java | 73 src/rails/game/action/LayBaseToken.java | 130 src/rails/game/action/LayBonusToken.java | 101 src/rails/game/action/LayTile.java | 337 src/rails/game/action/LayToken.java | 112 src/rails/game/action/MergeCompanies.java | 163 src/rails/game/action/NullAction.java | 57 src/rails/game/action/PossibleAction.java | 124 src/rails/game/action/PossibleActions.java | 117 src/rails/game/action/PossibleORAction.java | 61 src/rails/game/action/ReachDestinations.java | 113 src/rails/game/action/RepayLoans.java | 122 src/rails/game/action/RequestTurn.java | 49 src/rails/game/action/SellShares.java | 132 src/rails/game/action/SetDividend.java | 215 src/rails/game/action/StartCompany.java | 66 src/rails/game/action/StartItemAction.java | 59 src/rails/game/action/TakeLoans.java | 108 src/rails/game/action/UseSpecialProperty.java | 70 src/rails/game/correct/CashCorrectionAction.java | 134 src/rails/game/correct/CashCorrectionManager.java | 112 src/rails/game/correct/ClosePrivate.java | 78 src/rails/game/correct/CorrectionAction.java | 31 src/rails/game/correct/CorrectionManager.java | 96 src/rails/game/correct/CorrectionManagerI.java | 22 src/rails/game/correct/CorrectionModeAction.java | 116 src/rails/game/correct/CorrectionType.java | 20 src/rails/game/correct/MapCorrectionAction.java | 254 src/rails/game/correct/MapCorrectionManager.java | 202 src/rails/game/correct/OperatingCost.java | 124 src/rails/game/model/BaseTokensModel.java | 100 src/rails/game/model/BonusModel.java | 38 src/rails/game/model/CalculatedMoneyModel.java | 41 src/rails/game/model/CashMoneyModel.java | 67 src/rails/game/model/CashOwner.java | 11 src/rails/game/model/CertificateCountModel.java | 47 src/rails/game/model/CertificatesModel.java | 128 src/rails/game/model/MoneyModel.java | 128 src/rails/game/model/PortfolioModel.java | 651 src/rails/game/model/PortfolioOwner.java | 13 src/rails/game/model/PresidentModel.java | 62 src/rails/game/model/PriceModel.java | 66 src/rails/game/model/PrivatesModel.java | 66 src/rails/game/model/TrainsModel.java | 116 src/rails/game/model/ViewUpdate.java | 58 src/rails/game/round/Activity.java | 39 src/rails/game/round/RoundContext.java | 9 src/rails/game/special/ExchangeForShare.java | 76 src/rails/game/special/LocatedBonus.java | 78 src/rails/game/special/SellBonusToken.java | 120 src/rails/game/special/SpecialProperty.java | 291 src/rails/game/special/SpecialRight.java | 144 src/rails/game/special/SpecialTileLay.java | 157 src/rails/game/special/SpecialTokenLay.java | 149 src/rails/game/special/SpecialTrainBuy.java | 135 src/rails/game/specific/_1825/DoubleHeadingModifier.java | 123 src/rails/game/specific/_1825/OperatingRound_1825.java | 42 src/rails/game/specific/_1825/PublicCompany_1825.java | 64 src/rails/game/specific/_1825/ScoreTileOnlyOnceModifier.java | 47 src/rails/game/specific/_1825/StartRound_1825.java | 134 src/rails/game/specific/_1825/StockRound_1825.java | 166 src/rails/game/specific/_1825/TerminateAtMajorModifier.java | 66 src/rails/game/specific/_1826/TGVModifier.java | 82 src/rails/game/specific/_1835/FoldIntoPrussian.java | 111 src/rails/game/specific/_1835/GameManager_1835.java | 72 src/rails/game/specific/_1835/OperatingRound_1835.java | 307 src/rails/game/specific/_1835/PrussianFormationRound.java | 471 src/rails/game/specific/_1835/StockRound_1835.java | 187 src/rails/game/specific/_1851/BirminghamTileModifier.java | 45 src/rails/game/specific/_1851/OffBoardRevenueModifier.java | 54 src/rails/game/specific/_1851/StartRound_1851.java | 119 src/rails/game/specific/_1856/CGRFormationRound.java | 874 src/rails/game/specific/_1856/GameManager_1856.java | 35 src/rails/game/specific/_1856/OperatingRound_1856.java | 561 src/rails/game/specific/_1856/PublicCompany_1856.java | 74 src/rails/game/specific/_1856/PublicCompany_CGR.java | 184 src/rails/game/specific/_1856/ShareSellingRound_1856.java | 49 src/rails/game/specific/_1856/StockRound_1856.java | 205 src/rails/game/specific/_1880/Investor_1880.java | 69 src/rails/game/specific/_1880/OperatingRound_1880.java | 23 src/rails/game/specific/_1880/PublicCompany_1880.java | 23 src/rails/game/specific/_1880/StartRound_1880.java | 396 src/rails/game/specific/_1880/StockRound_1880.java | 55 src/rails/game/specific/_1889/OperatingRound_1889.java | 153 src/rails/game/specific/_18AL/AssignNamedTrains.java | 156 src/rails/game/specific/_18AL/NameTrains.java | 114 src/rails/game/specific/_18AL/NameableTrain.java | 39 src/rails/game/specific/_18AL/NamedTrainRevenueModifier.java | 154 src/rails/game/specific/_18AL/NamedTrainToken.java | 119 src/rails/game/specific/_18AL/OperatingRound_18AL.java | 100 src/rails/game/specific/_18EU/FinalMinorExchangeRound.java | 131 src/rails/game/specific/_18EU/GameManager_18EU.java | 108 src/rails/game/specific/_18EU/OffBoardRevenueModifier.java | 92 src/rails/game/specific/_18EU/OperatingRound_18EU.java | 286 src/rails/game/specific/_18EU/PullmanRevenueModifier.java | 78 src/rails/game/specific/_18EU/StartCompany_18EU.java | 157 src/rails/game/specific/_18EU/StartRound_18EU.java | 377 src/rails/game/specific/_18EU/StockRound_18EU.java | 769 src/rails/game/specific/_18GA/OperatingRound_18GA.java | 41 src/rails/game/specific/_18Kaas/RuhrRevenueModifier.java | 66 src/rails/game/specific/_18TN/OperatingRound_18TN.java | 114 src/rails/game/specific/_18TN/PublicCompany_18TN.java | 77 src/rails/game/state/AbstractItem.java | 81 src/rails/game/state/ActionChangeSet.java | 36 src/rails/game/state/ArrayListChange.java | 58 src/rails/game/state/ArrayListMultimapState.java | 59 src/rails/game/state/ArrayListState.java | 113 src/rails/game/state/AutoChangeSet.java | 31 src/rails/game/state/BooleanChange.java | 38 src/rails/game/state/BooleanState.java | 47 src/rail... [truncated message content] |
From: Stefan F. <ste...@us...> - 2012-06-04 17:08:12
|
Tag 'v1.7.6' created by Stefan Frey <ste...@we...> at 2012-06-04 17:07 +0000 version 1.7.6 Changes since v1.7.5-1: --- 0 files changed --- |
From: Stefan F. <ste...@us...> - 2012-06-04 17:08:09
|
rails/game/StockRound.java | 10 +++++++++- readme.txt | 20 ++++++-------------- version.number | 2 +- 3 files changed, 16 insertions(+), 16 deletions(-) New commits: commit 0adc2f4fe55c2501c4dfb8f6ce2937097f29cb61 Author: Stefan Frey <ste...@we...> Date: Mon Jun 4 19:07:15 2012 +0200 prepared for 1.7.6 release diff --git a/readme.txt b/readme.txt index c74b11d..a1180ee 100644 --- a/readme.txt +++ b/readme.txt @@ -1,20 +1,12 @@ -Rails release 1.7.5: +Rails release 1.7.6: A new maintenance release for Rails 1.x series -This release fixes several recent bugs. +This release fixes one sole bug. -Contributors: Erik Vos, Stefan Frey +Contributors: Erik Vos -Bugs reported by John David Galt, Mike Bourke, Phil Davies +Bug reported by Antonio Baracca -New: -1856: Alternate Trains variant added -1856: Alternate Destinations variant added (not fully implemented yet) - -List of bugs fixed: -Phase extra info is reported in report window (e.g. Civil War in 18TN) -Tokens on map are updated after undo/redo -Fixed non-modal dialog bug during loading game -1835: preventing selling double non-president shares in parts. -1835: fixed 1835 hex distance calculation bug +1856: Allowing selling a share just bought by the president. +(According to Steve Thomas rule clarification). \ No newline at end of file diff --git a/version.number b/version.number index 905b3b7..cde0424 100644 --- a/version.number +++ b/version.number @@ -1,5 +1,5 @@ #Property file that contains version number and the develop indicator -version=1.7.5 +version=1.7.6 # the following string "@DEVELOP@ is replaced by an empty string in the release version # this is done automatically by ant develop=@DEVELOP@ \ No newline at end of file commit 4cb7933c2b1ca1ebc7d8d200fb14e25780bf8fc0 Author: Erik Vos <eri...@xs...> Date: Mon Jun 4 15:15:11 2012 +0200 1856: allow selling a just bought share by the president. In theory a half-presidency share is then sold, which is allowed according to a clarification by Steve Thomas (backed by Bill Dixon). Apparently it does not matter if the presidency can actually be dumped.(cherry picked from commit f654b2d5744b8048d6a78a04be9b760c8acc1631) diff --git a/rails/game/StockRound.java b/rails/game/StockRound.java index 67ab6ce..1a8ebb4 100644 --- a/rails/game/StockRound.java +++ b/rails/game/StockRound.java @@ -479,7 +479,15 @@ public class StockRound extends Round { /* In some games (1856), a just bought share may not be sold */ // This code ignores the possibility of different share units if ((Boolean)gameManager.getGameParameter(GameDef.Parm.NO_SALE_OF_JUST_BOUGHT_CERT) - && company.equals(companyBoughtThisTurnWrapper.get())) { + && company.equals(companyBoughtThisTurnWrapper.get()) + /* An 1856 clarification by Steve Thomas (backed by Bill Dixon) states that + * in this situation a half-presidency may be sold + * (apparently even if a dump would otherwise not be allowed), + * as long as the number of shares does not become zero. + * So the rule "can't sell a just bought share" only means, + * that the number of shares may not be sold down to zero. + * Added 4jun2012 by EV */ + && number == ownedShare/shareUnit) { number--; } if (number <= 0) continue; |
From: Erik V. <ev...@us...> - 2012-06-04 13:15:57
|
rails/game/StockRound.java | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) New commits: commit f654b2d5744b8048d6a78a04be9b760c8acc1631 Author: Erik Vos <eri...@xs...> Date: Mon Jun 4 15:15:11 2012 +0200 1856: allow selling a just bought share by the president. In theory a half-presidency share is then sold, which is allowed according to a clarification by Steve Thomas (backed by Bill Dixon). Apparently it does not matter if the presidency can actually be dumped. diff --git a/rails/game/StockRound.java b/rails/game/StockRound.java index 7f03de7..c4df970 100644 --- a/rails/game/StockRound.java +++ b/rails/game/StockRound.java @@ -479,7 +479,15 @@ public class StockRound extends Round { /* In some games (1856), a just bought share may not be sold */ // This code ignores the possibility of different share units if ((Boolean)gameManager.getGameParameter(GameDef.Parm.NO_SALE_OF_JUST_BOUGHT_CERT) - && company.equals(companyBoughtThisTurnWrapper.get())) { + && company.equals(companyBoughtThisTurnWrapper.get()) + /* An 1856 clarification by Steve Thomas (backed by Bill Dixon) states that + * in this situation a half-presidency may be sold + * (apparently even if a dump would otherwise not be allowed), + * as long as the number of shares does not become zero. + * So the rule "can't sell a just bought share" only means, + * that the number of shares may not be sold down to zero. + * Added 4jun2012 by EV */ + && number == ownedShare/shareUnit) { number--; } if (number <= 0) continue; |
From: Dr. M. B. <neu...@us...> - 2012-06-03 10:38:09
|
rails/game/specific/_1880/StartRound_1880.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) New commits: commit 0ba698c0f26c14adfe719ba30ac5bd088fe60478 Author: Martin Brumm <Dr....@t-...> Date: Sun Jun 3 12:36:58 2012 +0200 Fixed bidding determination diff --git a/rails/game/specific/_1880/StartRound_1880.java b/rails/game/specific/_1880/StartRound_1880.java index 9c2ecde..9591da8 100644 --- a/rails/game/specific/_1880/StartRound_1880.java +++ b/rails/game/specific/_1880/StartRound_1880.java @@ -360,7 +360,7 @@ public class StartRound_1880 extends StartRound { private void setNextBiddingPlayer(StartItem item, int currentIndex) { for (int i = currentIndex + 1; i < currentIndex + gameManager.getNumberOfPlayers(); i++) { - if (item.getBid(gameManager.getPlayerByIndex(i)) >=0) { + if (item.getBid(gameManager.getPlayerByIndex(i)) >0) { setCurrentPlayerIndex(i); break; } |
From: Stefan F. <ste...@us...> - 2012-05-30 12:00:39
|
Tag 'v1.7.5' created by Stefan Frey <ste...@we...> at 2012-05-30 12:00 +0000 version 1.7.5 Changes since v1.7.4-8: --- 0 files changed --- |
From: Stefan F. <ste...@us...> - 2012-05-30 12:00:37
|
rails/game/MapManager.java | 38 ++++++++++++++++++++++++++-- rails/ui/swing/elements/NonModalDialog.java | 1 readme.txt | 16 ++++++++--- version.number | 2 - 4 files changed, 49 insertions(+), 8 deletions(-) New commits: commit 9304a2d80b3af79420ee214fc2d3699d35f8cffc Author: Stefan Frey <ste...@we...> Date: Wed May 30 13:13:25 2012 +0200 preparations for 1.7.5 release diff --git a/readme.txt b/readme.txt index 37d3ce1..c74b11d 100644 --- a/readme.txt +++ b/readme.txt @@ -1,4 +1,4 @@ -Rails release 1.7.4: +Rails release 1.7.5: A new maintenance release for Rails 1.x series @@ -6,9 +6,15 @@ This release fixes several recent bugs. Contributors: Erik Vos, Stefan Frey -Bugs reported by James Romano, Mike Bourke, Volker Schnell +Bugs reported by John David Galt, Mike Bourke, Phil Davies + +New: +1856: Alternate Trains variant added +1856: Alternate Destinations variant added (not fully implemented yet) List of bugs fixed: -- 18EU Hamburg red-to-red bonus calculation incorrect -- Fixed exception in Map panel scrolling -- In 1835 Companies with a fixed start price postpone laying the current price token until floating time. +Phase extra info is reported in report window (e.g. Civil War in 18TN) +Tokens on map are updated after undo/redo +Fixed non-modal dialog bug during loading game +1835: preventing selling double non-president shares in parts. +1835: fixed 1835 hex distance calculation bug diff --git a/version.number b/version.number index fdf5bc6..905b3b7 100644 --- a/version.number +++ b/version.number @@ -1,5 +1,5 @@ #Property file that contains version number and the develop indicator -version=1.7.4 +version=1.7.5 # the following string "@DEVELOP@ is replaced by an empty string in the release version # this is done automatically by ant develop=@DEVELOP@ \ No newline at end of file commit 1e3e6ead6ded8d295f450ea127b118910155cdb6 Author: Erik Vos <eri...@xs...> Date: Mon May 28 15:28:49 2012 +0200 Fixed non-modal dialog bug during loading game. Non-modal dialogs try to center location on the 'parent' window, but centering fails if the parent is not visible. It is now also set visible beforehand.(cherry picked from commit 3429f9f58e6993b09c89f7f56fd4a7230ef1ede9) diff --git a/rails/ui/swing/elements/NonModalDialog.java b/rails/ui/swing/elements/NonModalDialog.java index 36d8581..15a3b37 100644 --- a/rails/ui/swing/elements/NonModalDialog.java +++ b/rails/ui/swing/elements/NonModalDialog.java @@ -83,6 +83,7 @@ public abstract class NonModalDialog extends JDialog implements ActionListener { pack(); // Center on owner + window.setVisible(true); // Window must be visible to find its location! int x = (int) window.getLocationOnScreen().getX() + (window.getWidth() - getWidth()) / 2; int y = (int) window.getLocationOnScreen().getY() commit 9e8781e4e46b8e641adb1022f659dd8f0742521b Author: Erik Vos <eri...@xs...> Date: Mon May 28 12:55:02 2012 +0200 Fixed 1835 hex distance calculation bug. Impassable hex sides are no longer disregarded.(cherry picked from commit 1210bffe332f0f978f828b2e7e38e77cc7267cc4) diff --git a/rails/game/MapManager.java b/rails/game/MapManager.java index dcd9cad..6cd4307 100644 --- a/rails/game/MapManager.java +++ b/rails/game/MapManager.java @@ -325,6 +325,40 @@ public class MapManager implements ConfigurableComponentI { } } + /** Return the hex adjacent to a given hex in a particular direction. + * Return null if that hex does not exist. + * @param hex The hex object for which an adjacent one is searched. + * @param orientation The direction where to look (values 0-5); + * @return The found MapHex object, or null. + */ + public MapHex getAdjacentHex (MapHex hex, int orientation) { + + int x = hex.getX(); + int y = hex.getY(); + int xx = getAdjacentX (x, y, orientation); + int yy = getAdjacentY (x, y, orientation); + + if (xx >= minX && xx <= maxX && yy >= minY && yy <= maxY) { + return hexes[xx][yy]; // null if undefined + } + return null; //outside the map border + } + + /** Return a List of all hexes adjacent to a given hex. + * @param hex The hex object for which all adjacent hexes are searched. + * @return The found list of MapHex objects. Can be empty, not null. + */ + public List<MapHex> getAdjacentHexes (MapHex hex) { + + List<MapHex> adjacentHexes = new ArrayList<MapHex> (); + MapHex adjacentHex; + + for (int i=0; i<6; i++) { + if ((adjacentHex = getAdjacentHex (hex, i)) != null) adjacentHexes.add(adjacentHex); + } + return adjacentHexes; + } + /** * @return Returns the currentTileOrientation. */ @@ -443,7 +477,7 @@ public class MapManager implements ConfigurableComponentI { distances.get(hex1).put(hex2, depth); } - for (MapHex hex3 : hex2.getNeighbors()) { + for (MapHex hex3 : getAdjacentHexes(hex2)) { if (hex3 == null) continue; if (distances.get(hex1).get(hex3) == null) { calculateHexDistances (hex1, hex3, depth+1); @@ -494,7 +528,7 @@ public class MapManager implements ConfigurableComponentI { public int getMapXOffset() { return mapXOffset; } - + public int getMapYOffset() { return mapYOffset; } |
From: Stefan F. <ste...@us...> - 2012-05-30 11:01:56
|
LocalisedText.properties | 2 data/1856/CompanyManager.xml | 73 data/1856/Game.xml | 25 data/GamesList.xml | 5 test/data/real/18TN_A.report | 1845 ++++-------- test/data/test/1835_PRHasTwoExcessTrains.report | 3430 ++++++++---------------- test/data/test/1835_PR_3rdTrain.report | 3316 +++++++---------------- test/data/test/1835_SellDoubleShare.report | 3282 +++++++++++----------- 8 files changed, 4597 insertions(+), 7381 deletions(-) New commits: commit df96f113636c47eb15fb8bcf1fd1b8ac18c96265 Author: Stefan Frey <ste...@we...> Date: Wed May 30 13:00:38 2012 +0200 fixed test reports which where merged incorrectly because of unix/dos lf problems diff --git a/test/data/real/18TN_A.report b/test/data/real/18TN_A.report index 90a677d..c946f6b 100644 --- a/test/data/real/18TN_A.report +++ b/test/data/real/18TN_A.report @@ -1,1229 +1,616 @@ -GameIs,18TN -PlayerIs,1,Bob -PlayerIs,2,Chester -PlayerIs,3,Joshua -PlayerIs,4,Rob -PlayerCash,450 -BankHas,6200 -StartOfPhase,2 -BankSizeIs,6200 -StartOfInitialRound -HasPriority,Bob -BID_ITEM_LOG,Bob,75,M&C,375 -BID_ITEM_LOG,Chester,180,L&N,270 -BID_ITEM_LOG,Joshua,105,O&W,345 -BID_ITEM_LOG,Rob,185,L&N,265 -BuysItemFor,Bob,TCC,20 -BuysItemFor,Chester,ET&WNC,40 -BuysItemFor,Bob,M&C,75 -BuysItemFor,Joshua,O&W,105 -TO_AUCTION,L&N -BID_ITEM_LOG,Chester,190,L&N,220 -BID_ITEM_LOG,Rob,195,L&N,255 -PASSES,Chester -BuysItemFor,Rob,PRES_CERT_NAME,L&N,20,195 -FloatsWithCash,L&N,800 -Has,L&N,800 -Has,Bob,355 -Has,Chester,410 -Has,Joshua,345 -Has,Rob,255 -StartStockRound,1 -HasPriority,Joshua -PASSES,Joshua -BUY_SHARE_LOG,Rob,10,L&N,IPO,80 -BUY_SHARE_LOG,Bob,10,L&N,IPO,80 -START_COMPANY_LOG,Chester,SOU,65,130,2,20,BANK -BUY_SHARE_LOG,Joshua,10,L&N,IPO,80 -BUY_SHARE_LOG,Rob,10,L&N,IPO,80 -PASSES,Bob -BUY_SHARE_LOG,Chester,10,SOU,IPO,65 -BUY_SHARE_LOG,Joshua,10,L&N,IPO,80 -BUY_SHARE_LOG,Rob,10,L&N,IPO,80 -PASSES,Bob -BUY_SHARE_LOG,Chester,10,SOU,IPO,65 -BUY_SHARE_LOG,Joshua,10,L&N,IPO,80 -Autopasses,Rob -BUY_SHARE_LOG,Bob,10,L&N,IPO,80 -BUY_SHARE_LOG,Chester,10,SOU,IPO,65 -PASSES,Joshua -Autopasses,Rob -PASSES,Bob -BUY_SHARE_LOG,Chester,10,SOU,IPO,65 -FloatsWithCash,SOU,650 -Autopasses,Joshua -Autopasses,Rob -BUY_SHARE_LOG,Bob,10,SOU,IPO,65 -PASSES,Chester -Autopasses,Joshua -Autopasses,Rob -BUY_SHARE_LOG,Bob,10,SOU,IPO,65 -PASSES,Chester -Autopasses,Joshua -Autopasses,Rob -BUY_SHARE_LOG,Bob,10,SOU,IPO,65 -PASSES,Chester -Autopasses,Joshua -Autopasses,Rob -PASSES,Bob - -END_SR,1 -PRICE_MOVES_LOG,L&N,80,E3,90,E2 -SoldOut,L&N,80,E3,90,E2 -Has,L&N,800 -Has,SOU,650 -Has,Bob,0 -Has,Chester,20 -Has,Joshua,105 -Has,Rob,15 -START_OR,1.1 -ReceivesFor,Bob,5,TCC -ReceivesFor,Chester,10,ET&WNC -ReceivesFor,Bob,15,M&C -ReceivesFor,Joshua,20,O&W - -CompanyOperates,L&N,Rob -LaysTileAtFor,L&N,9,B15,W,60 -LaysTileAt,L&N,5,B17,NE -LAYS_TOKEN_ON,L&N,B17,40 -CompanyDoesNotPayDividend,L&N -PRICE_MOVES_LOG,L&N,90,E2,80,D2 -BuysTrain,L&N,2,IPO,80 -FirstTrainBought,2 - -CompanyOperates,SOU,Chester -BuysPrivateFromFor,SOU,ET&WNC,Chester,40 -LaysTileAt,SOU,8,F19,W -LaysTileAt,SOU,8,E20,E -LaysTileAtFor,SOU,57,F17,W,40 -CompanyDoesNotPayDividend,SOU -PRICE_MOVES_LOG,SOU,65,D4,55,C4 -BuysTrain,SOU,2,IPO,80 - -EndOfOperatingRound,1.1 -ORWorthIncrease,Bob,1.1,-30 -ORWorthIncrease,Chester,1.1,-50 -ORWorthIncrease,Joshua,1.1,-10 -ORWorthIncrease,Rob,1.1,-50 -Has,L&N,620 -Has,SOU,490 -Has,Bob,20 -Has,Chester,70 -Has,Joshua,125 -Has,Rob,15 -StartStockRound,2 -HasPriority,Chester -PASSES,Chester -BUY_SHARE_LOG,Joshua,10,SOU,IPO,65 -Autopasses,Rob -PASSES,Bob -PASSES,Chester -Autopasses,Joshua - -END_SR,2 -PRICE_MOVES_LOG,L&N,80,D2,90,D1 -SoldOut,L&N,80,D2,90,D1 -PRICE_MOVES_LOG,SOU,55,C4,60,C3 -SoldOut,SOU,55,C4,60,C3 -Has,L&N,620 -Has,SOU,490 -Has,Bob,20 -Has,Chester,70 -Has,Joshua,60 -Has,Rob,15 -START_OR,2.1 -ReceivesFor,Bob,5,TCC -ReceivesFor,SOU,10,ET&WNC -ReceivesFor,Bob,15,M&C -ReceivesFor,Joshua,20,O&W - -CompanyOperates,L&N,Rob -LaysTileAt,L&N,58,E10,NE -LaysTileAtFor,L&N,57,F11,NW,40 -CompanyRevenue,L&N,70 -CompanyPaysOutFull,L&N,70 -Payout,Joshua,21,3,10 -Payout,Bob,14,2,10 -Payout,Rob,35,5,10 -PRICE_MOVES_LOG,L&N,90,D1,100,E1 -BuysTrain,L&N,2,IPO,80 - -CompanyOperates,SOU,Chester -LaysTileAtFor,SOU,9,F15,E,60 -LaysTileAt,SOU,58,F13,E -CompanyRevenue,SOU,80 -CompanyPaysOutFull,SOU,80 -Payout,Joshua,8,1,10 -Payout,Bob,24,3,10 -Payout,Chester,48,6,10 -PRICE_MOVES_LOG,SOU,60,C3,70,D3 -BuysTrain,SOU,2,IPO,80 - -EndOfOperatingRound,2.1 -ORWorthIncrease,Bob,2.1,108 -ORWorthIncrease,Chester,2.1,108 -ORWorthIncrease,Joshua,2.1,89 -ORWorthIncrease,Rob,2.1,85 -Has,L&N,500 -Has,SOU,360 -Has,Bob,78 -Has,Chester,118 -Has,Joshua,109 -Has,Rob,50 -StartStockRound,3 -HasPriority,Rob -PASSES,Rob -SELL_SHARES_LOG,Bob,2,10,20,L&N,200 -PRICE_MOVES_LOG,L&N,100,E1,80,E3 -SELL_SHARES_LOG,Bob,3,10,30,SOU,210 -PRICE_MOVES_LOG,SOU,70,D3,55,D6 -START_COMPANY_LOG,Bob,TC,80,160,2,20,BANK -BUY_SHARE_LOG,Chester,10,L&N,Pool,80 -BUY_SHARE_LOG,Joshua,10,L&N,Pool,80 -Autopasses,Rob -BUY_SHARE_LOG,Bob,10,TC,IPO,80 -PASSES,Chester -Autopasses,Joshua -Autopasses,Rob -BUY_SHARE_LOG,Bob,10,TC,IPO,80 -PASSES,Chester -Autopasses,Joshua -Autopasses,Rob -BUY_SHARE_LOG,Bob,10,TC,IPO,80 -PASSES,Chester -Autopasses,Joshua -Autopasses,Rob -BUY_SHARE_LOG,Bob,10,TC,IPO,80 -FloatsWithCash,TC,800 -PASSES,Chester -Autopasses,Joshua -Autopasses,Rob -PASSES,Bob - -END_SR,3 -PRICE_MOVES_LOG,L&N,80,E3,90,E2 -SoldOut,L&N,80,E3,90,E2 -Has,L&N,500 -Has,SOU,360 -Has,TC,800 -Has,Bob,8 -Has,Chester,38 -Has,Joshua,29 -Has,Rob,50 -START_OR,3.1 -ReceivesFor,Bob,5,TCC -ReceivesFor,SOU,10,ET&WNC -ReceivesFor,Bob,15,M&C -ReceivesFor,Joshua,20,O&W - -CompanyOperates,L&N,Rob -LaysTileAt,L&N,5,G12,E -LAYS_TOKEN_ON,L&N,G12,100 -CompanyRevenue,L&N,120 -CompanyPaysOutFull,L&N,120 -Payout,Joshua,48,4,10 -Payout,Rob,60,5,10 -Payout,Chester,12,1,10 -PRICE_MOVES_LOG,L&N,90,E2,100,F2 - -CompanyOperates,TC,Bob -CompanyDoesNotPayDividend,TC -PRICE_MOVES_LOG,TC,80,E3,70,D3 -BuysTrain,TC,2,IPO,80 -All 2-trains are sold out, 3-trains now available - -CompanyOperates,SOU,Chester -CompanyRevenue,SOU,110 -CompanyPaysOutFull,SOU,110 -Payout,Joshua,11,1,10 -Payout,Chester,66,6,10 -Payout,SOU,33,3,10 -PRICE_MOVES_LOG,SOU,55,D6,65,E6 -BuysTrain,SOU,3,IPO,180 -FirstTrainBought,3 -StartOfPhase,3 - -EndOfOperatingRound,3.1 -ORWorthIncrease,Bob,3.1,-40 -ORWorthIncrease,Chester,3.1,148 -ORWorthIncrease,Joshua,3.1,129 -ORWorthIncrease,Rob,3.1,110 -Has,L&N,400 -Has,SOU,223 -Has,TC,720 -Has,Bob,28 -Has,Chester,116 -Has,Joshua,108 -Has,Rob,110 -StartStockRound,4 -HasPriority,Chester -BUY_SHARE_LOG,Chester,10,TC,IPO,80 -SELL_SHARES_LOG,Joshua,4,10,40,L&N,400 -PRICE_MOVES_LOG,L&N,100,F2,75,F5 -SELL_SHARE_LOG,Joshua,10,SOU,65 -PRICE_MOVES_LOG,SOU,65,E6,60,E7 -START_COMPANY_LOG,Joshua,GMO,90,180,2,20,BANK -BUY_SHARE_LOG,Rob,10,L&N,Pool,75 -Autopasses,Bob -Autopasses,Chester -BUY_SHARE_LOG,Joshua,10,GMO,IPO,90 -Autopasses,Rob -Autopasses,Bob -Autopasses,Chester -BUY_SHARE_LOG,Joshua,10,GMO,IPO,90 -Autopasses,Rob -Autopasses,Bob -Autopasses,Chester -BUY_SHARE_LOG,Joshua,10,GMO,IPO,90 -Autopasses,Rob -Autopasses,Bob -Autopasses,Chester -BUY_SHARE_LOG,Joshua,10,GMO,IPO,90 -FloatsWithCash,GMO,900 -Autopasses,Rob -Autopasses,Bob -Autopasses,Chester -PASSES,Joshua - -END_SR,4 -Has,GMO,900 -Has,L&N,400 -Has,SOU,223 -Has,TC,720 -Has,Bob,28 -Has,Chester,36 -Has,Joshua,33 -Has,Rob,35 -START_OR,4.1 -ReceivesFor,Bob,5,TCC -ReceivesFor,SOU,10,ET&WNC -ReceivesFor,Bob,15,M&C -ReceivesFor,Joshua,20,O&W - -CompanyOperates,GMO,Joshua -LaysTileAt,GMO,6,H7,NE -LaysTileAt,GMO,8,F7,SW -CompanyDoesNotPayDividend,GMO -PRICE_MOVES_LOG,GMO,90,E2,80,D2 -BuysTrain,GMO,3,IPO,180 - -CompanyOperates,L&N,Rob -LaysTileAt,L&N,15,B17,SE -CompanyRevenue,L&N,140 -CompanyPaysOutFull,L&N,140 -Payout,Chester,14,1,10 -Payout,Rob,84,6,10 -Payout,L&N,42,3,10 -PRICE_MOVES_LOG,L&N,75,F5,80,G5 -BuysTrain,L&N,3,IPO,180 - -CompanyOperates,TC,Bob -LaysTileAtFor,TC,8,C18,SW,60 -LaysTileAt,TC,8,D17,NE -LAYS_TOKEN_ON,TC,B17,40 -CompanyRevenue,TC,80 -CompanyPaysOutFull,TC,80 -Payout,Chester,8,1,10 -Payout,Bob,48,6,10 -PRICE_MOVES_LOG,TC,70,D3,80,E3 -BuysTrain,TC,3,IPO,180 -StartOfPhase,3½ - -CompanyOperates,SOU,Chester -LaysTileAt,SOU,619,G12,SW -CompanyRevenue,SOU,140 -CompanyPaysOutFull,SOU,140 -Payout,Chester,84,6,10 -Payout,SOU,56,4,10 -PRICE_MOVES_LOG,SOU,60,E7,65,E6 - -EndOfOperatingRound,4.1 -ORWorthIncrease,Bob,4.1,128 -ORWorthIncrease,Chester,4.1,151 -ORWorthIncrease,Joshua,4.1,-40 -ORWorthIncrease,Rob,4.1,114 -Has,GMO,720 -Has,L&N,262 -Has,SOU,289 -Has,TC,440 -Has,Bob,96 -Has,Chester,142 -Has,Joshua,53 -Has,Rob,119 -START_OR,4.2 -ReceivesFor,Bob,5,TCC -ReceivesFor,SOU,10,ET&WNC -ReceivesFor,Bob,15,M&C -ReceivesFor,Joshua,20,O&W - -CompanyOperates,L&N,Rob -LaysTileAt,L&N,15,F17,E -LAYS_TOKEN_ON,L&N,F17,100 -CompanyRevenue,L&N,200 -CompanyPaysOutFull,L&N,200 -Payout,Chester,20,1,10 -Payout,Rob,120,6,10 -Payout,L&N,60,3,10 -PRICE_MOVES_LOG,L&N,80,G5,85,G4 - -CompanyOperates,TC,Bob -BuysPrivateFromFor,TC,TCC,Bob,40 -BuysPrivateFromFor,TC,M&C,Bob,120 -LaysTileAt,TC,8,H5,NW -LaysTileAt,TC,599,F11,NE -CompanyRevenue,TC,110 -CompanyPaysOutFull,TC,110 -Payout,Bob,66,6,10 -Payout,Chester,11,1,10 -PRICE_MOVES_LOG,TC,80,E3,90,F3 - -CompanyOperates,GMO,Joshua -LaysTileAt,GMO,9,I6,SW -LaysTileAt,GMO,8,E6,NE -BuysPrivateFromFor,GMO,O&W,Joshua,200 -CompanyRevenue,GMO,0 -CompanyDoesNotPayDividend,GMO -BuysTrain,GMO,3,IPO,180 -All 3-trains are sold out, 4-trains now available - -CompanyOperates,SOU,Chester -LaysTileAt,SOU,9,E12,SW -LaysTileAt,SOU,8,D13,SW -LAYS_TOKEN_ON,SOU,F11,40 -CompanyRevenue,SOU,230 -CompanyPaysOutFull,SOU,230 -Payout,Chester,138,6,10 -Payout,SOU,92,4,10 -PRICE_MOVES_LOG,SOU,65,E6,70,E5 -BuysTrain,SOU,4,IPO,300 -FirstTrainBought,4 -StartOfPhase,4 -TrainsRusted,2 - -EndOfOperatingRound,4.2 -ORWorthIncrease,Bob,4.2,216 -ORWorthIncrease,Chester,4.2,214 -ORWorthIncrease,Joshua,4.2,120 -ORWorthIncrease,Rob,4.2,150 -Has,GMO,340 -Has,L&N,222 -Has,SOU,51 -Has,TC,280 -Has,Bob,342 -Has,Chester,311 -Has,Joshua,273 -Has,Rob,239 -StartStockRound,5 -HasPriority,Rob -SELL_SHARES_LOG,Rob,2,10,20,L&N,170 -PRICE_MOVES_LOG,L&N,85,G4,80,G5 -START_COMPANY_LOG,Rob,IC,65,195,3,30,BANK -SELL_SHARE_LOG,Bob,10,TC,90 -PRICE_MOVES_LOG,TC,90,F3,80,F4 -BUY_SHARE_LOG,Bob,10,SOU,Pool,70 -SELL_SHARE_LOG,Chester,10,TC,80 -PRICE_MOVES_LOG,TC,80,F4,75,F5 -SELL_SHARE_LOG,Chester,10,SOU,70 -PRICE_MOVES_LOG,SOU,70,E5,65,E6 -START_COMPANY_LOG,Chester,NC,75,150,2,20,BANK -BUY_SHARE_LOG,Joshua,10,SOU,Pool,65 -BUY_SHARE_LOG,Rob,10,IC,IPO,65 -BUY_SHARE_LOG,Bob,10,SOU,Pool,65 -BUY_SHARE_LOG,Chester,10,GMO,IPO,90 -BUY_SHARE_LOG,Joshua,10,SOU,Pool,65 -BUY_SHARE_LOG,Rob,10,IC,IPO,65 -BUY_SHARE_LOG,Bob,10,SOU,Pool,65 -BUY_SHARE_LOG,Chester,10,NC,IPO,75 -BUY_SHARE_LOG,Joshua,10,TC,Pool,75 -BUY_SHARE_LOG,Rob,10,IC,IPO,65 -FloatsWithCash,IC,650 -BUY_SHARE_LOG,Bob,10,IC,IPO,65 -BUY_SHARE_LOG,Chester,10,NC,IPO,75 -SELL_SHARE_LOG,Chester,10,GMO,80 -PRICE_MOVES_LOG,GMO,80,D2,70,D3 -BUY_SHARE_LOG,Joshua,10,IC,IPO,65 -Autopasses,Rob -BUY_SHARE_LOG,Bob,10,IC,IPO,65 -SELL_SHARES_LOG,Bob,2,10,20,IC,130 -PRICE_MOVES_LOG,IC,65,D4,55,D6 -BUY_SHARE_LOG,Chester,10,NC,IPO,75 -Autopasses,Joshua -Autopasses,Rob -BUY_SHARE_LOG,Bob,10,GMO,Pool,70 -BUY_SHARE_LOG,Chester,10,NC,IPO,75 -FloatsWithCash,NC,750 -Autopasses,Joshua -Autopasses,Rob -BUY_SHARE_LOG,Bob,10,NC,IPO,75 -Autopasses,Chester -Autopasses,Joshua -Autopasses,Rob -BUY_SHARE_LOG,Bob,10,NC,IPO,75 -SELL_SHARES_LOG,Bob,2,10,20,NC,150 -PRICE_MOVES_LOG,NC,75,E4,65,E6 -Autopasses,Chester -Autopasses,Joshua -Autopasses,Rob -SELL_SHARE_LOG,Bob,10,SOU,65 -PRICE_MOVES_LOG,SOU,65,E6,60,E7 -BUY_SHARE_LOG,Bob,10,L&N,Pool,80 -Autopasses,Chester -Autopasses,Joshua -Autopasses,Rob -BUY_SHARE_LOG,Bob,10,GMO,IPO,90 -Autopasses,Chester -Autopasses,Joshua -Autopasses,Rob -PASSES,Bob - -END_SR,5 -Has,GMO,340 -Has,IC,650 -Has,L&N,222 -Has,NC,750 -Has,SOU,51 -Has,TC,280 -Has,Bob,57 -Has,Chester,1 -Has,Joshua,3 -Has,Rob,19 -START_OR,5.1 -ReceivesFor,TC,5,TCC -ReceivesFor,SOU,10,ET&WNC -ReceivesFor,TC,15,M&C -ReceivesFor,GMO,20,O&W - -CompanyOperates,L&N,Rob -LaysTileAt,L&N,141,E10,SW -CompanyRevenue,L&N,110 -CompanyWithholds,L&N,110 -PRICE_MOVES_LOG,L&N,80,G5,75,F5 -BuysTrain,L&N,4,IPO,300 - -CompanyOperates,TC,Bob -LaysTileAt,TC,24,C12,NE -CompanyRevenue,TC,120 -CompanyPaysOutFull,TC,120 -Payout,Bob,60,5,10 -Payout,Joshua,12,1,10 -Payout,TC,12,1,10 -PRICE_MOVES_LOG,TC,75,F5,80,G5 -BuysTrain,TC,4,IPO,300 -All 4-trains are sold out, 5-trains now available - -CompanyOperates,GMO,Joshua -LaysTileAtFor,GMO,6,D7,NE,40 -LaysTileAt,GMO,8,C6,SE -CompanyRevenue,GMO,150 -CompanyPaysOutFull,GMO,150 -Payout,Bob,30,2,10 -Payout,Joshua,90,6,10 -PRICE_MOVES_LOG,GMO,70,D3,80,E3 - -CompanyOperates,NC,Chester -LaysTileAtFor,NC,8,H13,NW,60 -LaysTileAt,NC,9,G10,W -CompanyDoesNotPayDividend,NC -PRICE_MOVES_LOG,NC,65,E6,55,D6 -BuysTrain,NC,5,IPO,450 -FirstTrainBought,5 -StartOfPhase,5 -PrivateCloses,TCC -PrivateCloses,ET&WNC -PrivateCloses,M&C -PrivateCloses,O&W -BuysTrain,NC,3,SOU,240 - -CompanyOperates,SOU,Chester -LaysTileAt,SOU,24,B15,W -CompanyRevenue,SOU,170 -CompanyWithholds,SOU,170 -PRICE_MOVES_LOG,SOU,60,E7,50,D7 -BuysTrain,SOU,5,IPO,450 -All 5-trains are sold out, 6-trains now available - -CompanyOperates,IC,Rob -LaysTileAt,IC,619,D7,W -CompanyDoesNotPayDividend,IC -PRICE_MOVES_LOG,IC,55,D6,45,C6 -BuysTrain,IC,6,IPO,630 -FirstTrainBought,6 -StartOfPhase,6 -TrainsRusted,3 - -EndOfOperatingRound,5.1 -ORWorthIncrease,Bob,5.1,110 -ORWorthIncrease,Chester,5.1,-115 -ORWorthIncrease,Joshua,5.1,137 -ORWorthIncrease,Rob,5.1,-80 -Has,GMO,320 -Has,IC,20 -Has,L&N,32 -Has,NC,0 -Has,SOU,21 -Has,TC,12 -Has,Bob,147 -Has,Chester,1 -Has,Joshua,105 -Has,Rob,19 -START_OR,5.2 - -CompanyOperates,TC,Bob -LaysTileAt,TC,170,F11,SW -CompanyRevenue,TC,190 -CompanyPaysOutFull,TC,190 -Payout,Bob,95,5,10 -Payout,Joshua,19,1,10 -Payout,TC,19,1,10 -PRICE_MOVES_LOG,TC,80,G5,85,G4 - -CompanyOperates,GMO,Joshua -LaysTileAt,GMO,14,G6,NW -LAYS_TOKEN_ON,GMO,D7,40 -CompanyDoesNotPayDividend,GMO -PRICE_MOVES_LOG,GMO,80,E3,70,D3 -PlayerMustSellShares,Joshua,226 -SELL_SHARES_LOG,Joshua,1,10,10,TC,85 -PRICE_MOVES_LOG,TC,85,G4,80,G5 -SELL_SHARES_LOG,Joshua,1,10,10,IC,45 -PRICE_MOVES_LOG,IC,45,C6,40,C7 -SELL_SHARES_LOG,Joshua,2,10,20,SOU,100 -PresidentAddsCash,GMO,Joshua,350 -BuysTrain,GMO,6,IPO,630 -All 6-trains are sold out, 8-trains now available -StartOfPhase,6½ -TrainsObsolete.EXCEPT_TRIGGERING,4 - -CompanyOperates,L&N,Rob -LaysTileAt,L&N,8,D9,SE -LaysTileAt,L&N,8,E18,NW -CompanyRevenue,L&N,190 -CompanyWithholds,L&N,190 -PRICE_MOVES_LOG,L&N,75,F5,70,E5 -TrainsObsoleteRusted,4,L&N -PlayerMustSellShares,Rob,459 -SELL_SHARES_LOG,Rob,2,10,20,IC,80 -SELL_SHARES_LOG,Rob,1,10,10,L&N,70 -PRICE_MOVES_LOG,L&N,70,E5,65,E6 -PlayerIsBankrupt,Rob -GameOver -EoGWinnerBob! -EoGFinalRanking : -1. 947 Bob -2. 646 Chester -3. 424 Joshua -4. 355 Rob -======= -GameIs,18TN -PlayerIs,1,Bob -PlayerIs,2,Chester -PlayerIs,3,Joshua -PlayerIs,4,Rob -PlayerCash,450 -BankHas,6200 -StartOfPhase,2 -BankSizeIs,6200 -StartOfInitialRound -HasPriority,Bob -BID_ITEM_LOG,Bob,75,M&C,375 -BID_ITEM_LOG,Chester,180,L&N,270 -BID_ITEM_LOG,Joshua,105,O&W,345 -BID_ITEM_LOG,Rob,185,L&N,265 -BuysItemFor,Bob,TCC,20 -BuysItemFor,Chester,ET&WNC,40 -BuysItemFor,Bob,M&C,75 -BuysItemFor,Joshua,O&W,105 -TO_AUCTION,L&N -BID_ITEM_LOG,Chester,190,L&N,220 -BID_ITEM_LOG,Rob,195,L&N,255 -PASSES,Chester -BuysItemFor,Rob,PRES_CERT_NAME,L&N,20,195 -FloatsWithCash,L&N,800 -Has,L&N,800 -Has,Bob,355 -Has,Chester,410 -Has,Joshua,345 -Has,Rob,255 -StartStockRound,1 -HasPriority,Joshua -PASSES,Joshua -BUY_SHARE_LOG,Rob,10,L&N,IPO,80 -BUY_SHARE_LOG,Bob,10,L&N,IPO,80 -START_COMPANY_LOG,Chester,SOU,65,130,2,20,BANK -BUY_SHARE_LOG,Joshua,10,L&N,IPO,80 -BUY_SHARE_LOG,Rob,10,L&N,IPO,80 -PASSES,Bob -BUY_SHARE_LOG,Chester,10,SOU,IPO,65 -BUY_SHARE_LOG,Joshua,10,L&N,IPO,80 -BUY_SHARE_LOG,Rob,10,L&N,IPO,80 -PASSES,Bob -BUY_SHARE_LOG,Chester,10,SOU,IPO,65 -BUY_SHARE_LOG,Joshua,10,L&N,IPO,80 -Autopasses,Rob -BUY_SHARE_LOG,Bob,10,L&N,IPO,80 -BUY_SHARE_LOG,Chester,10,SOU,IPO,65 -PASSES,Joshua -Autopasses,Rob -PASSES,Bob -BUY_SHARE_LOG,Chester,10,SOU,IPO,65 -FloatsWithCash,SOU,650 -Autopasses,Joshua -Autopasses,Rob -BUY_SHARE_LOG,Bob,10,SOU,IPO,65 -PASSES,Chester -Autopasses,Joshua -Autopasses,Rob -BUY_SHARE_LOG,Bob,10,SOU,IPO,65 -PASSES,Chester -Autopasses,Joshua -Autopasses,Rob -BUY_SHARE_LOG,Bob,10,SOU,IPO,65 -PASSES,Chester -Autopasses,Joshua -Autopasses,Rob -PASSES,Bob - -END_SR,1 -PRICE_MOVES_LOG,L&N,80,E3,90,E2 -SoldOut,L&N,80,E3,90,E2 -Has,L&N,800 -Has,SOU,650 -Has,Bob,0 -Has,Chester,20 -Has,Joshua,105 -Has,Rob,15 -START_OR,1.1 -ReceivesFor,Bob,5,TCC -ReceivesFor,Chester,10,ET&WNC -ReceivesFor,Bob,15,M&C -ReceivesFor,Joshua,20,O&W - -CompanyOperates,L&N,Rob -LaysTileAtFor,L&N,9,B15,W,60 -LaysTileAt,L&N,5,B17,NE -LAYS_TOKEN_ON,L&N,B17,40 -CompanyDoesNotPayDividend,L&N -PRICE_MOVES_LOG,L&N,90,E2,80,D2 -BuysTrain,L&N,2,IPO,80 -FirstTrainBought,2 - -CompanyOperates,SOU,Chester -BuysPrivateFromFor,SOU,ET&WNC,Chester,40 -LaysTileAt,SOU,8,F19,W -LaysTileAt,SOU,8,E20,E -LaysTileAtFor,SOU,57,F17,W,40 -CompanyDoesNotPayDividend,SOU -PRICE_MOVES_LOG,SOU,65,D4,55,C4 -BuysTrain,SOU,2,IPO,80 - -EndOfOperatingRound,1.1 -ORWorthIncrease,Bob,1.1,-30 -ORWorthIncrease,Chester,1.1,-50 -ORWorthIncrease,Joshua,1.1,-10 -ORWorthIncrease,Rob,1.1,-50 -Has,L&N,620 -Has,SOU,490 -Has,Bob,20 -Has,Chester,70 -Has,Joshua,125 -Has,Rob,15 -StartStockRound,2 -HasPriority,Chester -PASSES,Chester -BUY_SHARE_LOG,Joshua,10,SOU,IPO,65 -Autopasses,Rob -PASSES,Bob -PASSES,Chester -Autopasses,Joshua - -END_SR,2 -PRICE_MOVES_LOG,L&N,80,D2,90,D1 -SoldOut,L&N,80,D2,90,D1 -PRICE_MOVES_LOG,SOU,55,C4,60,C3 -SoldOut,SOU,55,C4,60,C3 -Has,L&N,620 -Has,SOU,490 -Has,Bob,20 -Has,Chester,70 -Has,Joshua,60 -Has,Rob,15 -START_OR,2.1 -ReceivesFor,Bob,5,TCC -ReceivesFor,SOU,10,ET&WNC -ReceivesFor,Bob,15,M&C -ReceivesFor,Joshua,20,O&W - -CompanyOperates,L&N,Rob -LaysTileAt,L&N,58,E10,NE -LaysTileAtFor,L&N,57,F11,NW,40 -CompanyRevenue,L&N,70 -CompanyPaysOutFull,L&N,70 -Payout,Joshua,21,3,10 -Payout,Bob,14,2,10 -Payout,Rob,35,5,10 -PRICE_MOVES_LOG,L&N,90,D1,100,E1 -BuysTrain,L&N,2,IPO,80 - -CompanyOperates,SOU,Chester -LaysTileAtFor,SOU,9,F15,E,60 -LaysTileAt,SOU,58,F13,E -CompanyRevenue,SOU,80 -CompanyPaysOutFull,SOU,80 -Payout,Joshua,8,1,10 -Payout,Bob,24,3,10 -Payout,Chester,48,6,10 -PRICE_MOVES_LOG,SOU,60,C3,70,D3 -BuysTrain,SOU,2,IPO,80 - -EndOfOperatingRound,2.1 -ORWorthIncrease,Bob,2.1,108 -ORWorthIncrease,Chester,2.1,108 -ORWorthIncrease,Joshua,2.1,89 -ORWorthIncrease,Rob,2.1,85 -Has,L&N,500 -Has,SOU,360 -Has,Bob,78 -Has,Chester,118 -Has,Joshua,109 -Has,Rob,50 -StartStockRound,3 -HasPriority,Rob -PASSES,Rob -SELL_SHARES_LOG,Bob,2,10,20,L&N,200 -PRICE_MOVES_LOG,L&N,100,E1,80,E3 -SELL_SHARES_LOG,Bob,3,10,30,SOU,210 -PRICE_MOVES_LOG,SOU,70,D3,55,D6 -START_COMPANY_LOG,Bob,TC,80,160,2,20,BANK -BUY_SHARE_LOG,Chester,10,L&N,Pool,80 -BUY_SHARE_LOG,Joshua,10,L&N,Pool,80 -Autopasses,Rob -BUY_SHARE_LOG,Bob,10,TC,IPO,80 -PASSES,Chester -Autopasses,Joshua -Autopasses,Rob -BUY_SHARE_LOG,Bob,10,TC,IPO,80 -PASSES,Chester -Autopasses,Joshua -Autopasses,Rob -BUY_SHARE_LOG,Bob,10,TC,IPO,80 -PASSES,Chester -Autopasses,Joshua -Autopasses,Rob -BUY_SHARE_LOG,Bob,10,TC,IPO,80 -FloatsWithCash,TC,800 -PASSES,Chester -Autopasses,Joshua -Autopasses,Rob -PASSES,Bob - -END_SR,3 -PRICE_MOVES_LOG,L&N,80,E3,90,E2 -SoldOut,L&N,80,E3,90,E2 -Has,L&N,500 -Has,SOU,360 -Has,TC,800 -Has,Bob,8 -Has,Chester,38 -Has,Joshua,29 -Has,Rob,50 -START_OR,3.1 -ReceivesFor,Bob,5,TCC -ReceivesFor,SOU,10,ET&WNC -ReceivesFor,Bob,15,M&C -ReceivesFor,Joshua,20,O&W - -CompanyOperates,L&N,Rob -LaysTileAt,L&N,5,G12,E -LAYS_TOKEN_ON,L&N,G12,100 -CompanyRevenue,L&N,120 -CompanyPaysOutFull,L&N,120 -Payout,Joshua,48,4,10 -Payout,Rob,60,5,10 -Payout,Chester,12,1,10 -PRICE_MOVES_LOG,L&N,90,E2,100,F2 - -CompanyOperates,TC,Bob -CompanyDoesNotPayDividend,TC -PRICE_MOVES_LOG,TC,80,E3,70,D3 -BuysTrain,TC,2,IPO,80 -All 2-trains are sold out, 3-trains now available - -CompanyOperates,SOU,Chester -CompanyRevenue,SOU,110 -CompanyPaysOutFull,SOU,110 -Payout,Joshua,11,1,10 -Payout,Chester,66,6,10 -Payout,SOU,33,3,10 -PRICE_MOVES_LOG,SOU,55,D6,65,E6 -BuysTrain,SOU,3,IPO,180 -FirstTrainBought,3 -StartOfPhase,3 - -EndOfOperatingRound,3.1 -ORWorthIncrease,Bob,3.1,-40 -ORWorthIncrease,Chester,3.1,148 -ORWorthIncrease,Joshua,3.1,129 -ORWorthIncrease,Rob,3.1,110 -Has,L&N,400 -Has,SOU,223 -Has,TC,720 -Has,Bob,28 -Has,Chester,116 -Has,Joshua,108 -Has,Rob,110 -StartStockRound,4 -HasPriority,Chester -BUY_SHARE_LOG,Chester,10,TC,IPO,80 -SELL_SHARES_LOG,Joshua,4,10,40,L&N,400 -PRICE_MOVES_LOG,L&N,100,F2,75,F5 -SELL_SHARE_LOG,Joshua,10,SOU,65 -PRICE_MOVES_LOG,SOU,65,E6,60,E7 -START_COMPANY_LOG,Joshua,GMO,90,180,2,20,BANK -BUY_SHARE_LOG,Rob,10,L&N,Pool,75 -Autopasses,Bob -Autopasses,Chester -BUY_SHARE_LOG,Joshua,10,GMO,IPO,90 -Autopasses,Rob -Autopasses,Bob -Autopasses,Chester -BUY_SHARE_LOG,Joshua,10,GMO,IPO,90 -Autopasses,Rob -Autopasses,Bob -Autopasses,Chester -BUY_SHARE_LOG,Joshua,10,GMO,IPO,90 -Autopasses,Rob -Autopasses,Bob -Autopasses,Chester -BUY_SHARE_LOG,Joshua,10,GMO,IPO,90 -FloatsWithCash,GMO,900 -Autopasses,Rob -Autopasses,Bob -Autopasses,Chester -PASSES,Joshua - -END_SR,4 -Has,GMO,900 -Has,L&N,400 -Has,SOU,223 -Has,TC,720 -Has,Bob,28 -Has,Chester,36 -Has,Joshua,33 -Has,Rob,35 -START_OR,4.1 -ReceivesFor,Bob,5,TCC -ReceivesFor,SOU,10,ET&WNC -ReceivesFor,Bob,15,M&C -ReceivesFor,Joshua,20,O&W - -CompanyOperates,GMO,Joshua -LaysTileAt,GMO,6,H7,NE -LaysTileAt,GMO,8,F7,SW -CompanyDoesNotPayDividend,GMO -PRICE_MOVES_LOG,GMO,90,E2,80,D2 -BuysTrain,GMO,3,IPO,180 - -CompanyOperates,L&N,Rob -LaysTileAt,L&N,15,B17,SE -CompanyRevenue,L&N,140 -CompanyPaysOutFull,L&N,140 -Payout,Chester,14,1,10 -Payout,Rob,84,6,10 -Payout,L&N,42,3,10 -PRICE_MOVES_LOG,L&N,75,F5,80,G5 -BuysTrain,L&N,3,IPO,180 - -CompanyOperates,TC,Bob -LaysTileAtFor,TC,8,C18,SW,60 -LaysTileAt,TC,8,D17,NE -LAYS_TOKEN_ON,TC,B17,40 -CompanyRevenue,TC,80 -CompanyPaysOutFull,TC,80 -Payout,Chester,8,1,10 -Payout,Bob,48,6,10 -PRICE_MOVES_LOG,TC,70,D3,80,E3 -BuysTrain,TC,3,IPO,180 -StartOfPhase,3½ -CivilWarBegins, - -CompanyOperates,SOU,Chester -LaysTileAt,SOU,619,G12,SW -CompanyRevenue,SOU,140 -CompanyPaysOutFull,SOU,140 -Payout,Chester,84,6,10 -Payout,SOU,56,4,10 -PRICE_MOVES_LOG,SOU,60,E7,65,E6 - -EndOfOperatingRound,4.1 -ORWorthIncrease,Bob,4.1,128 -ORWorthIncrease,Chester,4.1,151 -ORWorthIncrease,Joshua,4.1,-40 -ORWorthIncrease,Rob,4.1,114 -Has,GMO,720 -Has,L&N,262 -Has,SOU,289 -Has,TC,440 -Has,Bob,96 -Has,Chester,142 -Has,Joshua,53 -Has,Rob,119 -START_OR,4.2 -ReceivesFor,Bob,5,TCC -ReceivesFor,SOU,10,ET&WNC -ReceivesFor,Bob,15,M&C -ReceivesFor,Joshua,20,O&W - -CompanyOperates,L&N,Rob -LaysTileAt,L&N,15,F17,E -LAYS_TOKEN_ON,L&N,F17,100 -CompanyRevenue,L&N,200 -CompanyPaysOutFull,L&N,200 -Payout,Chester,20,1,10 -Payout,Rob,120,6,10 -Payout,L&N,60,3,10 -PRICE_MOVES_LOG,L&N,80,G5,85,G4 - -CompanyOperates,TC,Bob -BuysPrivateFromFor,TC,TCC,Bob,40 -BuysPrivateFromFor,TC,M&C,Bob,120 -LaysTileAt,TC,8,H5,NW -LaysTileAt,TC,599,F11,NE -CompanyRevenue,TC,110 -CompanyPaysOutFull,TC,110 -Payout,Bob,66,6,10 -Payout,Chester,11,1,10 -PRICE_MOVES_LOG,TC,80,E3,90,F3 - -CompanyOperates,GMO,Joshua -LaysTileAt,GMO,9,I6,SW -LaysTileAt,GMO,8,E6,NE -BuysPrivateFromFor,GMO,O&W,Joshua,200 -CompanyRevenue,GMO,0 -CompanyDoesNotPayDividend,GMO -BuysTrain,GMO,3,IPO,180 -All 3-trains are sold out, 4-trains now available - -CompanyOperates,SOU,Chester -LaysTileAt,SOU,9,E12,SW -LaysTileAt,SOU,8,D13,SW -LAYS_TOKEN_ON,SOU,F11,40 -CompanyRevenue,SOU,230 -CompanyPaysOutFull,SOU,230 -Payout,Chester,138,6,10 -Payout,SOU,92,4,10 -PRICE_MOVES_LOG,SOU,65,E6,70,E5 -BuysTrain,SOU,4,IPO,300 -FirstTrainBought,4 -StartOfPhase,4 - -EndOfOperatingRound,4.2 -ORWorthIncrease,Bob,4.2,216 -ORWorthIncrease,Chester,4.2,214 -ORWorthIncrease,Joshua,4.2,120 -ORWorthIncrease,Rob,4.2,150 -Has,GMO,340 -Has,L&N,222 -Has,SOU,51 -Has,TC,280 -Has,Bob,342 -Has,Chester,311 -Has,Joshua,273 -Has,Rob,239 -StartStockRound,5 -HasPriority,Rob -SELL_SHARES_LOG,Rob,2,10,20,L&N,170 -PRICE_MOVES_LOG,L&N,85,G4,80,G5 -START_COMPANY_LOG,Rob,IC,65,195,3,30,BANK -SELL_SHARE_LOG,Bob,10,TC,90 -PRICE_MOVES_LOG,TC,90,F3,80,F4 -BUY_SHARE_LOG,Bob,10,SOU,Pool,70 -SELL_SHARE_LOG,Chester,10,TC,80 -PRICE_MOVES_LOG,TC,80,F4,75,F5 -SELL_SHARE_LOG,Chester,10,SOU,70 -PRICE_MOVES_LOG,SOU,70,E5,65,E6 -START_COMPANY_LOG,Chester,NC,75,150,2,20,BANK -BUY_SHARE_LOG,Joshua,10,SOU,Pool,65 -BUY_SHARE_LOG,Rob,10,IC,IPO,65 -BUY_SHARE_LOG,Bob,10,SOU,Pool,65 -BUY_SHARE_LOG,Chester,10,GMO,IPO,90 -BUY_SHARE_LOG,Joshua,10,SOU,Pool,65 -BUY_SHARE_LOG,Rob,10,IC,IPO,65 -BUY_SHARE_LOG,Bob,10,SOU,Pool,65 -BUY_SHARE_LOG,Chester,10,NC,IPO,75 -BUY_SHARE_LOG,Joshua,10,TC,Pool,75 -BUY_SHARE_LOG,Rob,10,IC,IPO,65 -FloatsWithCash,IC,650 -BUY_SHARE_LOG,Bob,10,IC,IPO,65 -BUY_SHARE_LOG,Chester,10,NC,IPO,75 -SELL_SHARE_LOG,Chester,10,GMO,80 -PRICE_MOVES_LOG,GMO,80,D2,70,D3 -BUY_SHARE_LOG,Joshua,10,IC,IPO,65 -Autopasses,Rob -BUY_SHARE_LOG,Bob,10,IC,IPO,65 -SELL_SHARES_LOG,Bob,2,10,20,IC,130 -PRICE_MOVES_LOG,IC,65,D4,55,D6 -BUY_SHARE_LOG,Chester,10,NC,IPO,75 -Autopasses,Joshua -Autopasses,Rob -BUY_SHARE_LOG,Bob,10,GMO,Pool,70 -BUY_SHARE_LOG,Chester,10,NC,IPO,75 -FloatsWithCash,NC,750 -Autopasses,Joshua -Autopasses,Rob -BUY_SHARE_LOG,Bob,10,NC,IPO,75 -Autopasses,Chester -Autopasses,Joshua -Autopasses,Rob -BUY_SHARE_LOG,Bob,10,NC,IPO,75 -SELL_SHARES_LOG,Bob,2,10,20,NC,150 -PRICE_MOVES_LOG,NC,75,E4,65,E6 -Autopasses,Chester -Autopasses,Joshua -Autopasses,Rob -SELL_SHARE_LOG,Bob,10,SOU,65 -PRICE_MOVES_LOG,SOU,65,E6,60,E7 -BUY_SHARE_LOG,Bob,10,L&N,Pool,80 -Autopasses,Chester -Autopasses,Joshua -Autopasses,Rob -BUY_SHARE_LOG,Bob,10,GMO,IPO,90 -Autopasses,Chester -Autopasses,Joshua -Autopasses,Rob -PASSES,Bob - -END_SR,5 -Has,GMO,340 -Has,IC,650 -Has,L&N,222 -Has,NC,750 -Has,SOU,51 -Has,TC,280 -Has,Bob,57 -Has,Chester,1 -Has,Joshua,3 -Has,Rob,19 -START_OR,5.1 -ReceivesFor,TC,5,TCC -ReceivesFor,SOU,10,ET&WNC -ReceivesFor,TC,15,M&C -ReceivesFor,GMO,20,O&W - -CompanyOperates,L&N,Rob -LaysTileAt,L&N,141,E10,SW -CompanyRevenue,L&N,110 -CompanyWithholds,L&N,110 -PRICE_MOVES_LOG,L&N,80,G5,75,F5 -BuysTrain,L&N,4,IPO,300 - -CompanyOperates,TC,Bob -LaysTileAt,TC,24,C12,NE -CompanyRevenue,TC,120 -CompanyPaysOutFull,TC,120 -Payout,Bob,60,5,10 -Payout,Joshua,12,1,10 -Payout,TC,12,1,10 -PRICE_MOVES_LOG,TC,75,F5,80,G5 -BuysTrain,TC,4,IPO,300 -All 4-trains are sold out, 5-trains now available - -CompanyOperates,GMO,Joshua -LaysTileAtFor,GMO,6,D7,NE,40 -LaysTileAt,GMO,8,C6,SE -CompanyRevenue,GMO,150 -CompanyPaysOutFull,GMO,150 -Payout,Bob,30,2,10 -Payout,Joshua,90,6,10 -PRICE_MOVES_LOG,GMO,70,D3,80,E3 - -CompanyOperates,NC,Chester -LaysTileAtFor,NC,8,H13,NW,60 -LaysTileAt,NC,9,G10,W -CompanyDoesNotPayDividend,NC -PRICE_MOVES_LOG,NC,65,E6,55,D6 -BuysTrain,NC,5,IPO,450 -FirstTrainBought,5 -StartOfPhase,5 -PrivateCloses,TCC -PrivateCloses,ET&WNC -PrivateCloses,M&C -PrivateCloses,O&W -BuysTrain,NC,3,SOU,240 - -CompanyOperates,SOU,Chester -LaysTileAt,SOU,24,B15,W -CompanyRevenue,SOU,170 -CompanyWithholds,SOU,170 -PRICE_MOVES_LOG,SOU,60,E7,50,D7 -BuysTrain,SOU,5,IPO,450 -All 5-trains are sold out, 6-trains now available - -CompanyOperates,IC,Rob -LaysTileAt,IC,619,D7,W -CompanyDoesNotPayDividend,IC -PRICE_MOVES_LOG,IC,55,D6,45,C6 -BuysTrain,IC,6,IPO,630 -FirstTrainBought,6 -StartOfPhase,6 - -EndOfOperatingRound,5.1 -ORWorthIncrease,Bob,5.1,110 -ORWorthIncrease,Chester,5.1,-115 -ORWorthIncrease,Joshua,5.1,137 -ORWorthIncrease,Rob,5.1,-80 -Has,GMO,320 -Has,IC,20 -Has,L&N,32 -Has,NC,0 -Has,SOU,21 -Has,TC,12 -Has,Bob,147 -Has,Chester,1 -Has,Joshua,105 -Has,Rob,19 -START_OR,5.2 - -CompanyOperates,TC,Bob -LaysTileAt,TC,170,F11,SW -CompanyRevenue,TC,190 -CompanyPaysOutFull,TC,190 -Payout,Bob,95,5,10 -Payout,Joshua,19,1,10 -Payout,TC,19,1,10 -PRICE_MOVES_LOG,TC,80,G5,85,G4 - -CompanyOperates,GMO,Joshua -LaysTileAt,GMO,14,G6,NW -LAYS_TOKEN_ON,GMO,D7,40 -CompanyDoesNotPayDividend,GMO -PRICE_MOVES_LOG,GMO,80,E3,70,D3 -PlayerMustSellShares,Joshua,226 -SELL_SHARES_LOG,Joshua,1,10,10,TC,85 -PRICE_MOVES_LOG,TC,85,G4,80,G5 -SELL_SHARES_LOG,Joshua,1,10,10,IC,45 -PRICE_MOVES_LOG,IC,45,C6,40,C7 -SELL_SHARES_LOG,Joshua,2,10,20,SOU,100 -PresidentAddsCash,GMO,Joshua,350 -BuysTrain,GMO,6,IPO,630 -All 6-trains are sold out, 8-trains now available -StartOfPhase,6½ - -CompanyOperates,L&N,Rob -LaysTileAt,L&N,8,D9,SE -LaysTileAt,L&N,8,E18,NW -CompanyRevenue,L&N,190 -CompanyWithholds,L&N,190 -PRICE_MOVES_LOG,L&N,75,F5,70,E5 -TrainsObsoleteRusted,4,L&N -PlayerMustSellShares,Rob,459 -SELL_SHARES_LOG,Rob,2,10,20,IC,80 -SELL_SHARES_LOG,Rob,1,10,10,L&N,70 -PRICE_MOVES_LOG,L&N,70,E5,65,E6 -PlayerIsBankrupt,Rob -GameOver -EoGWinnerBob! -EoGFinalRanking : -1. 947 Bob -2. 646 Chester -3. 424 Joshua -4. 355 Rob +GameIs,18TN +PlayerIs,1,Bob +PlayerIs,2,Chester +PlayerIs,3,Joshua +PlayerIs,4,Rob +PlayerCash,450 +BankHas,6200 +StartOfPhase,2 +BankSizeIs,6200 +StartOfInitialRound +HasPriority,Bob +BID_ITEM_LOG,Bob,75,M&C,375 +BID_ITEM_LOG,Chester,180,L&N,270 +BID_ITEM_LOG,Joshua,105,O&W,345 +BID_ITEM_LOG,Rob,185,L&N,265 +BuysItemFor,Bob,TCC,20 +BuysItemFor,Chester,ET&WNC,40 +BuysItemFor,Bob,M&C,75 +BuysItemFor,Joshua,O&W,105 +TO_AUCTION,L&N +BID_ITEM_LOG,Chester,190,L&N,220 +BID_ITEM_LOG,Rob,195,L&N,255 +PASSES,Chester +BuysItemFor,Rob,PRES_CERT_NAME,L&N,20,195 +FloatsWithCash,L&N,800 +Has,L&N,800 +Has,Bob,355 +Has,Chester,410 +Has,Joshua,345 +Has,Rob,255 +StartStockRound,1 +HasPriority,Joshua +PASSES,Joshua +BUY_SHARE_LOG,Rob,10,L&N,IPO,80 +BUY_SHARE_LOG,Bob,10,L&N,IPO,80 +START_COMPANY_LOG,Chester,SOU,65,130,2,20,BANK +BUY_SHARE_LOG,Joshua,10,L&N,IPO,80 +BUY_SHARE_LOG,Rob,10,L&N,IPO,80 +PASSES,Bob +BUY_SHARE_LOG,Chester,10,SOU,IPO,65 +BUY_SHARE_LOG,Joshua,10,L&N,IPO,80 +BUY_SHARE_LOG,Rob,10,L&N,IPO,80 +PASSES,Bob +BUY_SHARE_LOG,Chester,10,SOU,IPO,65 +BUY_SHARE_LOG,Joshua,10,L&N,IPO,80 +Autopasses,Rob +BUY_SHARE_LOG,Bob,10,L&N,IPO,80 +BUY_SHARE_LOG,Chester,10,SOU,IPO,65 +PASSES,Joshua +Autopasses,Rob +PASSES,Bob +BUY_SHARE_LOG,Chester,10,SOU,IPO,65 +FloatsWithCash,SOU,650 +Autopasses,Joshua +Autopasses,Rob +BUY_SHARE_LOG,Bob,10,SOU,IPO,65 +PASSES,Chester +Autopasses,Joshua +Autopasses,Rob +BUY_SHARE_LOG,Bob,10,SOU,IPO,65 +PASSES,Chester +Autopasses,Joshua +Autopasses,Rob +BUY_SHARE_LOG,Bob,10,SOU,IPO,65 +PASSES,Chester +Autopasses,Joshua +Autopasses,Rob +PASSES,Bob + +END_SR,1 +PRICE_MOVES_LOG,L&N,80,E3,90,E2 +SoldOut,L&N,80,E3,90,E2 +Has,L&N,800 +Has,SOU,650 +Has,Bob,0 +Has,Chester,20 +Has,Joshua,105 +Has,Rob,15 +START_OR,1.1 +ReceivesFor,Bob,5,TCC +ReceivesFor,Chester,10,ET&WNC +ReceivesFor,Bob,15,M&C +ReceivesFor,Joshua,20,O&W + +CompanyOperates,L&N,Rob +LaysTileAtFor,L&N,9,B15,W,60 +LaysTileAt,L&N,5,B17,NE +LAYS_TOKEN_ON,L&N,B17,40 +CompanyDoesNotPayDividend,L&N +PRICE_MOVES_LOG,L&N,90,E2,80,D2 +BuysTrain,L&N,2,IPO,80 +FirstTrainBought,2 + +CompanyOperates,SOU,Chester +BuysPrivateFromFor,SOU,ET&WNC,Chester,40 +LaysTileAt,SOU,8,F19,W +LaysTileAt,SOU,8,E20,E +LaysTileAtFor,SOU,57,F17,W,40 +CompanyDoesNotPayDividend,SOU +PRICE_MOVES_LOG,SOU,65,D4,55,C4 +BuysTrain,SOU,2,IPO,80 + +EndOfOperatingRound,1.1 +ORWorthIncrease,Bob,1.1,-30 +ORWorthIncrease,Chester,1.1,-50 +ORWorthIncrease,Joshua,1.1,-10 +ORWorthIncrease,Rob,1.1,-50 +Has,L&N,620 +Has,SOU,490 +Has,Bob,20 +Has,Chester,70 +Has,Joshua,125 +Has,Rob,15 +StartStockRound,2 +HasPriority,Chester +PASSES,Chester +BUY_SHARE_LOG,Joshua,10,SOU,IPO,65 +Autopasses,Rob +PASSES,Bob +PASSES,Chester +Autopasses,Joshua + +END_SR,2 +PRICE_MOVES_LOG,L&N,80,D2,90,D1 +SoldOut,L&N,80,D2,90,D1 +PRICE_MOVES_LOG,SOU,55,C4,60,C3 +SoldOut,SOU,55,C4,60,C3 +Has,L&N,620 +Has,SOU,490 +Has,Bob,20 +Has,Chester,70 +Has,Joshua,60 +Has,Rob,15 +START_OR,2.1 +ReceivesFor,Bob,5,TCC +ReceivesFor,SOU,10,ET&WNC +ReceivesFor,Bob,15,M&C +ReceivesFor,Joshua,20,O&W + +CompanyOperates,L&N,Rob +LaysTileAt,L&N,58,E10,NE +LaysTileAtFor,L&N,57,F11,NW,40 +CompanyRevenue,L&N,70 +CompanyPaysOutFull,L&N,70 +Payout,Joshua,21,3,10 +Payout,Bob,14,2,10 +Payout,Rob,35,5,10 +PRICE_MOVES_LOG,L&N,90,D1,100,E1 +BuysTrain,L&N,2,IPO,80 + +CompanyOperates,SOU,Chester +LaysTileAtFor,SOU,9,F15,E,60 +LaysTileAt,SOU,58,F13,E +CompanyRevenue,SOU,80 +CompanyPaysOutFull,SOU,80 +Payout,Joshua,8,1,10 +Payout,Bob,24,3,10 +Payout,Chester,48,6,10 +PRICE_MOVES_LOG,SOU,60,C3,70,D3 +BuysTrain,SOU,2,IPO,80 + +EndOfOperatingRound,2.1 +ORWorthIncrease,Bob,2.1,108 +ORWorthIncrease,Chester,2.1,108 +ORWorthIncrease,Joshua,2.1,89 +ORWorthIncrease,Rob,2.1,85 +Has,L&N,500 +Has,SOU,360 +Has,Bob,78 +Has,Chester,118 +Has,Joshua,109 +Has,Rob,50 +StartStockRound,3 +HasPriority,Rob +PASSES,Rob +SELL_SHARES_LOG,Bob,2,10,20,L&N,200 +PRICE_MOVES_LOG,L&N,100,E1,80,E3 +SELL_SHARES_LOG,Bob,3,10,30,SOU,210 +PRICE_MOVES_LOG,SOU,70,D3,55,D6 +START_COMPANY_LOG,Bob,TC,80,160,2,20,BANK +BUY_SHARE_LOG,Chester,10,L&N,Pool,80 +BUY_SHARE_LOG,Joshua,10,L&N,Pool,80 +Autopasses,Rob +BUY_SHARE_LOG,Bob,10,TC,IPO,80 +PASSES,Chester +Autopasses,Joshua +Autopasses,Rob +BUY_SHARE_LOG,Bob,10,TC,IPO,80 +PASSES,Chester +Autopasses,Joshua +Autopasses,Rob +BUY_SHARE_LOG,Bob,10,TC,IPO,80 +PASSES,Chester +Autopasses,Joshua +Autopasses,Rob +BUY_SHARE_LOG,Bob,10,TC,IPO,80 +FloatsWithCash,TC,800 +PASSES,Chester +Autopasses,Joshua +Autopasses,Rob +PASSES,Bob + +END_SR,3 +PRICE_MOVES_LOG,L&N,80,E3,90,E2 +SoldOut,L&N,80,E3,90,E2 +Has,L&N,500 +Has,SOU,360 +Has,TC,800 +Has,Bob,8 +Has,Chester,38 +Has,Joshua,29 +Has,Rob,50 +START_OR,3.1 +ReceivesFor,Bob,5,TCC +ReceivesFor,SOU,10,ET&WNC +ReceivesFor,Bob,15,M&C +ReceivesFor,Joshua,20,O&W + +CompanyOperates,L&N,Rob +LaysTileAt,L&N,5,G12,E +LAYS_TOKEN_ON,L&N,G12,100 +CompanyRevenue,L&N,120 +CompanyPaysOutFull,L&N,120 +Payout,Joshua,48,4,10 +Payout,Rob,60,5,10 +Payout,Chester,12,1,10 +PRICE_MOVES_LOG,L&N,90,E2,100,F2 + +CompanyOperates,TC,Bob +CompanyDoesNotPayDividend,TC +PRICE_MOVES_LOG,TC,80,E3,70,D3 +BuysTrain,TC,2,IPO,80 +All 2-trains are sold out, 3-trains now available + +CompanyOperates,SOU,Chester +CompanyRevenue,SOU,110 +CompanyPaysOutFull,SOU,110 +Payout,Joshua,11,1,10 +Payout,Chester,66,6,10 +Payout,SOU,33,3,10 +PRICE_MOVES_LOG,SOU,55,D6,65,E6 +BuysTrain,SOU,3,IPO,180 +FirstTrainBought,3 +StartOfPhase,3 + +EndOfOperatingRound,3.1 +ORWorthIncrease,Bob,3.1,-40 +ORWorthIncrease,Chester,3.1,148 +ORWorthIncrease,Joshua,3.1,129 +ORWorthIncrease,Rob,3.1,110 +Has,L&N,400 +Has,SOU,223 +Has,TC,720 +Has,Bob,28 +Has,Chester,116 +Has,Joshua,108 +Has,Rob,110 +StartStockRound,4 +HasPriority,Chester +BUY_SHARE_LOG,Chester,10,TC,IPO,80 +SELL_SHARES_LOG,Joshua,4,10,40,L&N,400 +PRICE_MOVES_LOG,L&N,100,F2,75,F5 +SELL_SHARE_LOG,Joshua,10,SOU,65 +PRICE_MOVES_LOG,SOU,65,E6,60,E7 +START_COMPANY_LOG,Joshua,GMO,90,180,2,20,BANK +BUY_SHARE_LOG,Rob,10,L&N,Pool,75 +Autopasses,Bob +Autopasses,Chester +BUY_SHARE_LOG,Joshua,10,GMO,IPO,90 +Autopasses,Rob +Autopasses,Bob +Autopasses,Chester +BUY_SHARE_LOG,Joshua,10,GMO,IPO,90 +Autopasses,Rob +Autopasses,Bob +Autopasses,Chester +BUY_SHARE_LOG,Joshua,10,GMO,IPO,90 +Autopasses,Rob +Autopasses,Bob +Autopasses,Chester +BUY_SHARE_LOG,Joshua,10,GMO,IPO,90 +FloatsWithCash,GMO,900 +Autopasses,Rob +Autopasses,Bob +Autopasses,Chester +PASSES,Joshua + +END_SR,4 +Has,GMO,900 +Has,L&N,400 +Has,SOU,223 +Has,TC,720 +Has,Bob,28 +Has,Chester,36 +Has,Joshua,33 +Has,Rob,35 +START_OR,4.1 +ReceivesFor,Bob,5,TCC +ReceivesFor,SOU,10,ET&WNC +ReceivesFor,Bob,15,M&C +ReceivesFor,Joshua,20,O&W + +CompanyOperates,GMO,Joshua +LaysTileAt,GMO,6,H7,NE +LaysTileAt,GMO,8,F7,SW +CompanyDoesNotPayDividend,GMO +PRICE_MOVES_LOG,GMO,90,E2,80,D2 +BuysTrain,GMO,3,IPO,180 + +CompanyOperates,L&N,Rob +LaysTileAt,L&N,15,B17,SE +CompanyRevenue,L&N,140 +CompanyPaysOutFull,L&N,140 +Payout,Chester,14,1,10 +Payout,Rob,84,6,10 +Payout,L&N,42,3,10 +PRICE_MOVES_LOG,L&N,75,F5,80,G5 +BuysTrain,L&N,3,IPO,180 + +CompanyOperates,TC,Bob +LaysTileAtFor,TC,8,C18,SW,60 +LaysTileAt,TC,8,D17,NE +LAYS_TOKEN_ON,TC,B17,40 +CompanyRevenue,TC,80 +CompanyPaysOutFull,TC,80 +Payout,Chester,8,1,10 +Payout,Bob,48,6,10 +PRICE_MOVES_LOG,TC,70,D3,80,E3 +BuysTrain,TC,3,IPO,180 +StartOfPhase,3½ +CivilWarBegins, + +CompanyOperates,SOU,Chester +LaysTileAt,SOU,619,G12,SW +CompanyRevenue,SOU,140 +CompanyPaysOutFull,SOU,140 +Payout,Chester,84,6,10 +Payout,SOU,56,4,10 +PRICE_MOVES_LOG,SOU,60,E7,65,E6 + +EndOfOperatingRound,4.1 +ORWorthIncrease,Bob,4.1,128 +ORWorthIncrease,Chester,4.1,151 +ORWorthIncrease,Joshua,4.1,-40 +ORWorthIncrease,Rob,4.1,114 +Has,GMO,720 +Has,L&N,262 +Has,SOU,289 +Has,TC,440 +Has,Bob,96 +Has,Chester,142 +Has,Joshua,53 +Has,Rob,119 +START_OR,4.2 +ReceivesFor,Bob,5,TCC +ReceivesFor,SOU,10,ET&WNC +ReceivesFor,Bob,15,M&C +ReceivesFor,Joshua,20,O&W + +CompanyOperates,L&N,Rob +LaysTileAt,L&N,15,F17,E +LAYS_TOKEN_ON,L&N,F17,100 +CompanyRevenue,L&N,200 +CompanyPaysOutFull,L&N,200 +Payout,Chester,20,1,10 +Payout,Rob,120,6,10 +Payout,L&N,60,3,10 +PRICE_MOVES_LOG,L&N,80,G5,85,G4 + +CompanyOperates,TC,Bob +BuysPrivateFromFor,TC,TCC,Bob,40 +BuysPrivateFromFor,TC,M&C,Bob,120 +LaysTileAt,TC,8,H5,NW +LaysTileAt,TC,599,F11,NE +CompanyRevenue,TC,110 +CompanyPaysOutFull,TC,110 +Payout,Bob,66,6,10 +Payout,Chester,11,1,10 +PRICE_MOVES_LOG,TC,80,E3,90,F3 + +CompanyOperates,GMO,Joshua +LaysTileAt,GMO,9,I6,SW +LaysTileAt,GMO,8,E6,NE +BuysPrivateFromFor,GMO,O&W,Joshua,200 +CompanyRevenue,GMO,0 +CompanyDoesNotPayDividend,GMO +BuysTrain,GMO,3,IPO,180 +All 3-trains are sold out, 4-trains now available + +CompanyOperates,SOU,Chester +LaysTileAt,SOU,9,E12,SW +LaysTileAt,SOU,8,D13,SW +LAYS_TOKEN_ON,SOU,F11,40 +CompanyRevenue,SOU,230 +CompanyPaysOutFull,SOU,230 +Payout,Chester,138,6,10 +Payout,SOU,92,4,10 +PRICE_MOVES_LOG,SOU,65,E6,70,E5 +BuysTrain,SOU,4,IPO,300 +FirstTrainBought,4 +StartOfPhase,4 +TrainsRusted,2 + +EndOfOperatingRound,4.2 +ORWorthIncrease,Bob,4.2,216 +ORWorthIncrease,Chester,4.2,214 +ORWorthIncrease,Joshua,4.2,120 +ORWorthIncrease,Rob,4.2,150 +Has,GMO,340 +Has,L&N,222 +Has,SOU,51 +Has,TC,280 +Has,Bob,342 +Has,Chester,311 +Has,Joshua,273 +Has,Rob,239 +StartStockRound,5 +HasPriority,Rob +SELL_SHARES_LOG,Rob,2,10,20,L&N,170 +PRICE_MOVES_LOG,L&N,85,G4,80,G5 +START_COMPANY_LOG,Rob,IC,65,195,3,30,BANK +SELL_SHARE_LOG,Bob,10,TC,90 +PRICE_MOVES_LOG,TC,90,F3,80,F4 +BUY_SHARE_LOG,Bob,10,SOU,Pool,70 +SELL_SHARE_LOG,Chester,10,TC,80 +PRICE_MOVES_LOG,TC,80,F4,75,F5 +SELL_SHARE_LOG,Chester,10,SOU,70 +PRICE_MOVES_LOG,SOU,70,E5,65,E6 +START_COMPANY_LOG,Chester,NC,75,150,2,20,BANK +BUY_SHARE_LOG,Joshua,10,SOU,Pool,65 +BUY_SHARE_LOG,Rob,10,IC,IPO,65 +BUY_SHARE_LOG,Bob,10,SOU,Pool,65 +BUY_SHARE_LOG,Chester,10,GMO,IPO,90 +BUY_SHARE_LOG,Joshua,10,SOU,Pool,65 +BUY_SHARE_LOG,Rob,10,IC,IPO,65 +BUY_SHARE_LOG,Bob,10,SOU,Pool,65 +BUY_SHARE_LOG,Chester,10,NC,IPO,75 +BUY_SHARE_LOG,Joshua,10,TC,Pool,75 +BUY_SHARE_LOG,Rob,10,IC,IPO,65 +FloatsWithCash,IC,650 +BUY_SHARE_LOG,Bob,10,IC,IPO,65 +BUY_SHARE_LOG,Chester,10,NC,IPO,75 +SELL_SHARE_LOG,Chester,10,GMO,80 +PRICE_MOVES_LOG,GMO,80,D2,70,D3 +BUY_SHARE_LOG,Joshua,10,IC,IPO,65 +Autopasses,Rob +BUY_SHARE_LOG,Bob,10,IC,IPO,65 +SELL_SHARES_LOG,Bob,2,10,20,IC,130 +PRICE_MOVES_LOG,IC,65,D4,55,D6 +BUY_SHARE_LOG,Chester,10,NC,IPO,75 +Autopasses,Joshua +Autopasses,Rob +BUY_SHARE_LOG,Bob,10,GMO,Pool,70 +BUY_SHARE_LOG,Chester,10,NC,IPO,75 +FloatsWithCash,NC,750 +Autopasses,Joshua +Autopasses,Rob +BUY_SHARE_LOG,Bob,10,NC,IPO,75 +Autopasses,Chester +Autopasses,Joshua +Autopasses,Rob +BUY_SHARE_LOG,Bob,10,NC,IPO,75 +SELL_SHARES_LOG,Bob,2,10,20,NC,150 +PRICE_MOVES_LOG,NC,75,E4,65,E6 +Autopasses,Chester +Autopasses,Joshua +Autopasses,Rob +SELL_SHARE_LOG,Bob,10,SOU,65 +PRICE_MOVES_LOG,SOU,65,E6,60,E7 +BUY_SHARE_LOG,Bob,10,L&N,Pool,80 +Autopasses,Chester +Autopasses,Joshua +Autopasses,Rob +BUY_SHARE_LOG,Bob,10,GMO,IPO,90 +Autopasses,Chester +Autopasses,Joshua +Autopasses,Rob +PASSES,Bob + +END_SR,5 +Has,GMO,340 +Has,IC,650 +Has,L&N,222 +Has,NC,750 +Has,SOU,51 +Has,TC,280 +Has,Bob,57 +Has,Chester,1 +Has,Joshua,3 +Has,Rob,19 +START_OR,5.1 +ReceivesFor,TC,5,TCC +ReceivesFor,SOU,10,ET&WNC +ReceivesFor,TC,15,M&C +ReceivesFor,GMO,20,O&W + +CompanyOperates,L&N,Rob +LaysTileAt,L&N,141,E10,SW +CompanyRevenue,L&N,110 +CompanyWithholds,L&N,110 +PRICE_MOVES_LOG,L&N,80,G5,75,F5 +BuysTrain,L&N,4,IPO,300 + +CompanyOperates,TC,Bob +LaysTileAt,TC,24,C12,NE +CompanyRevenue,TC,120 +CompanyPaysOutFull,TC,120 +Payout,Bob,60,5,10 +Payout,Joshua,12,1,10 +Payout,TC,12,1,10 +PRICE_MOVES_LOG,TC,75,F5,80,G5 +BuysTrain,TC,4,IPO,300 +All 4-trains are sold out, 5-trains now available + +CompanyOperates,GMO,Joshua +LaysTileAtFor,GMO,6,D7,NE,40 +LaysTileAt,GMO,8,C6,SE +CompanyRevenue,GMO,150 +CompanyPaysOutFull,GMO,150 +Payout,Bob,30,2,10 +Payout,Joshua,90,6,10 +PRICE_MOVES_LOG,GMO,70,D3,80,E3 + +CompanyOperates,NC,Chester +LaysTileAtFor,NC,8,H13,NW,60 +LaysTileAt,NC,9,G10,W +CompanyDoesNotPayDividend,NC +PRICE_MOVES_LOG,NC,65,E6,55,D6 +BuysTrain,NC,5,IPO,450 +FirstTrainBought,5 +StartOfPhase,5 +PrivateCloses,TCC +PrivateCloses,ET&WNC +PrivateCloses,M&C +PrivateCloses,O&W +BuysTrain,NC,3,SOU,240 + +CompanyOperates,SOU,Chester +LaysTileAt,SOU,24,B15,W +CompanyRevenue,SOU,170 +CompanyWithholds,SOU,170 +PRICE_MOVES_LOG,SOU,60,E7,50,D7 +BuysTrain,SOU,5,IPO,450 +All 5-trains are sold out, 6-trains now available + +CompanyOperates,IC,Rob +LaysTileAt,IC,619,D7,W +CompanyDoesNotPayDividend,IC +PRICE_MOVES_LOG,IC,55,D6,45,C6 +BuysTrain,IC,6,IPO,630 +FirstTrainBought,6 +StartOfPhase,6 +TrainsRusted,3 + +EndOfOperatingRound,5.1 +ORWorthIncrease,Bob,5.1,110 +ORWorthIncrease,Chester,5.1,-115 +ORWorthIncrease,Joshua,5.1,137 +ORWorthIncrease,Rob,5.1,-80 +Has,GMO,320 +Has,IC,20 +Has,L&N,32 +Has,NC,0 +Has,SOU,21 +Has,TC,12 +Has,Bob,147 +Has,Chester,1 +Has,Joshua,105 +Has,Rob,19 +START_OR,5.2 + +CompanyOperates,TC,Bob +LaysTileAt,TC,170,F11,SW +CompanyRevenue,TC,190 +CompanyPaysOutFull,TC,190 +Payout,Bob,95,5,10 +Payout,Joshua,19,1,10 +Payout,TC,19,1,10 +PRICE_MOVES_LOG,TC,80,G5,85,G4 + +CompanyOperates,GMO,Joshua +LaysTileAt,GMO,14,G6,NW +LAYS_TOKEN_ON,GMO,D7,40 +CompanyDoesNotPayDividend,GMO +PRICE_MOVES_LOG,GMO,80,E3,70,D3 +PlayerMustSellShares,Joshua,226 +SELL_SHARES_LOG,Joshua,1,10,10,TC,85 +PRICE_MOVES_LOG,TC,85,G4,80,G5 +SELL_SHARES_LOG,Joshua,1,10,10,IC,45 +PRICE_MOVES_LOG,IC,45,C6,40,C7 +SELL_SHARES_LOG,Joshua,2,10,20,SOU,100 +PresidentAddsCash,GMO,Joshua,350 +BuysTrain,GMO,6,IPO,630 +All 6-trains are sold out, 8-trains now available +StartOfPhase,6½ +TrainsObsolete.EXCEPT_TRIGGERING,4 + +CompanyOperates,L&N,Rob +LaysTileAt,L&N,8,D9,SE +LaysTileAt,L&N,8,E18,NW +CompanyRevenue,L&N,190 +CompanyWithholds,L&N,190 +PRICE_MOVES_LOG,L&N,75,F5,70,E5 +TrainsObsoleteRusted,4,L&N +PlayerMustSellShares,Rob,459 +SELL_SHARES_LOG,Rob,2,10,20,IC,80 +SELL_SHARES_LOG,Rob,1,10,10,L&N,70 +PRICE_MOVES_LOG,L&N,70,E5,65,E6 +PlayerIsBankrupt,Rob +GameOver +EoGWinnerBob! +EoGFinalRanking : +1. 947 Bob +2. 646 Chester +3. 424 Joshua +4. 355 Rob diff --git a/test/data/test/1835_PRHasTwoExcessTrains.report b/test/data/test/1835_PRHasTwoExcessTrains.report index 8da4ccc..1fd8626 100644 --- a/test/data/test/1835_PRHasTwoExcessTrains.report +++ b/test/data/test/1835_PRHasTwoExcessTrains.report @@ -1,2286 +1,1144 @@ -GameIs,1835 -PlayerIs,1,Alice -PlayerIs,2,Bob -PlayerIs,3,Charlie -PlayerCash,600 -BankHas,10200 -StartOfPhase,2 -BankSizeIs,10200 -StartOfInitialRound -HasPriority,Alice -BuysItemFor,Alice,NF,100 -ALSO_GETS,Alice,CERT_NAME,BY,10 -BuysItemFor,Bob,M1,80 -FloatsWithCash,M1,80 -BuysItemFor,Charlie,LD,190 -ALSO_GETS,Charlie,PRES_CERT_NAME,SX,20 -BuysItemFor,Alice,M2,170 -FloatsWithCash,M2,170 -BuysItemFor,Bob,M3,80 -FloatsWithCash,M3,80 -BuysItemFor,Charlie,M4,160 -FloatsWithCash,M4,160 -BuysItemFor,Alice,PRES_CERT_NAME,BY,20,184 -BuysItemFor,Bob,BB,130 -BuysItemFor,Charlie,HB,160 -BuysItemFor,Alice,OBB,120 -ALSO_GETS,Alice,CERT_NAME,BY,10 -BuysItemFor,Bob,PfB,150 -ALSO_GETS,Bob,CERT_NAME,BY,10 -FloatsWithCash,BY,460 -BuysItemFor,Charlie,M5,80 -FloatsWithCash,M5,80 -CannotBuyAnything,Alice -BuysItemFor,Bob,M6,80 -FloatsWithCash,M6,80 -Has,M1,80 -Has,M2,170 -Has,M3,80 -Has,M4,160 -Has,M5,80 -Has,M6,80 -Has,BY,460 -Has,Alice,26 -Has,Bob,80 -Has,Charlie,10 -StartStockRound,1 -HasPriority,Charlie -PASSES,Charlie -PASSES,Alice -PASSES,Bob - -END_SR,1 -Has,M1,80 -Has,M2,170 -Has,M3,80 -Has,M4,160 -Has,M5,80 -Has,M6,80 -Has,BY,460 -Has,Alice,26 -Has,Bob,80 -Has,Charlie,10 -START_OR,1.1 -ReceivesFor,Alice,5,NF -ReceivesFor,Alice,10,OBB -ReceivesFor,Bob,15,PfB -ReceivesFor,Charlie,20,LD -ReceivesFor,Bob,25,BB -ReceivesFor,Charlie,30,HB - -CompanyOperates,M1,Bob -LaysTileAt,M1,202,H2,W -CompanyDoesNotPayDividend,M1 -BuysTrain,M1,2,IPO,80 -FirstTrainBought,2 - -CompanyOperates,M2,Alice -LaysTileAt,M2,8,E17,NW -CompanyDoesNotPayDividend,M2 -BuysTrain,M2,2,IPO,80 - -CompanyOperates,M3,Bob -LaysTileAt,M3,6,F14,NW -CompanyDoesNotPayDividend,M3 -BuysTrain,M3,2,IPO,80 - -CompanyOperates,M4,Charlie -LaysTileAt,M4,57,G5,SW -CompanyDoesNotPayDividend,M4 -BuysTrain,M4,2,IPO,80 -BuysTrain,M4,2,IPO,80 - -CompanyOperates,M5,Charlie -LaysTileAt,M5,8,D18,NE -CompanyDoesNotPayDividend,M5 -BuysTrain,M5,2,IPO,80 - -CompanyOperates,M6,Bob -LaysTileAt,M6,9,B10,NW -CompanyDoesNotPayDividend,M6 -BuysTrain,M6,2,IPO,80 - -CompanyOperates,BY,Alice -LAYS_FREE_TOKEN_ON,BY,L14 -PrivateCloses,NF -LaysTileAtFor,BY,9,K15,SW,70 -LaysTileAt,BY,1,I17,SW -LaysTileAt,BY,58,M15,SW -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,Alice,1.1,-109 -ORWorthIncrease,Bob,1.1,34 -ORWorthIncrease,Charlie,1.1,50 -Has,M1,0 -Has,M2,90 -Has,M3,0 -Has,M4,0 -Has,M5,0 -Has,M6,0 -Has,BY,110 -Has,Alice,41 -Has,Bob,120 -Has,Charlie,60 -StartStockRound,2 -HasPriority,Charlie -PASSES,Charlie -PASSES,Alice -BUY_SHARE_LOG,Bob,10,BY,IPO,92 -PriceIsPaidTo,92,BY -PASSES,Charlie -PASSES,Alice -PASSES,Bob - -END_SR,2 -Has,M1,0 -Has,M2,90 -Has,M3,0 -Has,M4,0 -Has,M5,0 -Has,M6,0 -Has,BY,202 -Has,Alice,41 -Has,Bob,28 -Has,Charlie,60 -START_OR,2.1 -ReceivesFor,Alice,10,OBB -ReceivesFor,Bob,15,PfB -ReceivesFor,Charlie,20,LD -ReceivesFor,Bob,25,BB -ReceivesFor,Charlie,30,HB - -CompanyOperates,M1,Bob -LaysTileAt,M1,69,H4,NW -CompanyRevenue,M1,40 -CompanySplits,M1,40 -M1 receives 20 -Payout,Bob,20,1,100 - -CompanyOperates,M2,Alice -LaysTileAt,M2,8,D16,SE -CompanyRevenue,M2,0 -CompanyDoesNotPayDividend,M2 - -CompanyOperates,M3,Bob -LaysTileAt,M3,4,G15,NW -CompanyRevenue,M3,40 -CompanySplits,M3,40 -M3 receives 20 -Payout,Bob,20,1,100 - -CompanyOperates,M4,Charlie -LaysTileAt,M4,4,F6,SW -CompanyRevenue,M4,60 -CompanySplits,M4,60 -M4 receives 30 -Payout,Charlie,30,1,100 - -CompanyOperates,M5,Charlie -LaysTileAt,M5,8,C19,E -CompanyRevenue,M5,50 -CompanySplits,M5,50 -M5 receives 25 -Payout,Charlie,25,1,100 - -CompanyOperates,M6,Bob -LaysTileAt,M6,6,A11,NW -CompanyRevenue,M6,60 -CompanySplits,M6,60 -M6 receives 30 -Payout,Bob,30,1,100 - -CompanyOperates,BY,Alice -LaysTileAt,BY,202,H20,W -LaysTileAt,BY,9,F20,NW -LAYS_TOKEN_ON,BY,H20,160 -CompanyRevenue,BY,160 -CompanyPaysOutFull,BY,160 -Payout,Bob,32,2,10 -Payout,Alice,64,4,10 -PRICE_MOVES_LOG,BY,86,B3,92,C3 - -EndOfOperatingRound,2.1 -ORWorthIncrease,Alice,2.1,98 -ORWorthIncrease,Bob,2.1,154 -ORWorthIncrease,Charlie,2.1,105 -Has,M1,20 -Has,M2,90 -Has,M3,20 -Has,M4,30 -Has,M5,25 -Has,M6,30 -Has,BY,42 -Has,Alice,115 -Has,Bob,170 -Has,Charlie,165 -StartStockRound,3 -HasPriority,Charlie -BUY_SHARE_LOG,Charlie,10,BY,IPO,92 -PriceIsPaidTo,92,BY -BUY_SHARE_LOG,Alice,10,BY,IPO,92 -PriceIsPaidTo,92,BY -BUY_SHARE_LOG,Bob,10,BY,IPO,92 -PriceIsPaidTo,92,BY -PASSES,Charlie -PASSES,Alice -PASSES,Bob - -END_SR,3 -Has,M1,20 -Has,M2,90 -Has,M3,20 -Has,M4,30 -Has,M5,25 -Has,M6,30 -Has,BY,318 -Has,Alice,23 -Has,Bob,78 -Has,Charlie,73 -START_OR,3.1 -ReceivesFor,Alice,10,OBB -ReceivesFor,Bob,15,PfB -ReceivesFor,Charlie,20,LD -ReceivesFor,Bob,25,BB -ReceivesFor,Charlie,30,HB - -CompanyOperates,M1,Bob -LaysTileAt,M1,9,J2,NW -CompanyRevenue,M1,40 -CompanySplits,M1,40 -M1 receives 20 -Payout,Bob,20,1,100 - -CompanyOperates,M2,Alice -LaysTileAtFor,M2,8,D14,NW,50 -CompanyRevenue,M2,70 -CompanySplits,M2,70 -M2 receives 35 -Payout,Alice,35,1,100 - -CompanyOperates,M3,Bob -LaysTileAt,M3,6,H16,SE -CompanyRevenue,M3,40 -CompanySplits,M3,40 -M3 receives 20 -Payout,Bob,20,1,100 - -CompanyOperates,M4,Charlie -LaysTileAt,M4,9,E7,SW -CompanyRevenue,M4,60 -CompanySplits,M4,60 -M4 receives 30 -Payout,Charlie,30,1,100 - -CompanyOperates,M5,Charlie -CompanyRevenue,M5,50 -CompanySplits,M5,50 -M5 receives 25 -Payout,Charlie,25,1,100 - -CompanyOperates,M6,Bob -LaysTileAt,M6,58,B12,NW -CompanyRevenue,M6,60 -CompanySplits,M6,60 -M6 receives 30 -Payout,Bob,30,1,100 - -CompanyOperates,BY,Alice -LaysTileAt,BY,8,N14,NE -LaysTileAt,BY,201,O15,NW -CompanyRevenue,BY,190 -CompanyPaysOutFull,BY,190 -Payout,Charlie,19,1,10 -Payout,Bob,57,3,10 -Payout,Alice,95,5,10 -PRICE_MOVES_LOG,BY,92,C3,100,D3 -BuysTrain,BY,2+2,IPO,120 - -EndOfOperatingRound,3.1 -ORWorthIncrease,Alice,3.1,180 -ORWorthIncrease,Bob,3.1,191 -ORWorthIncrease,Charlie,3.1,132 -Has,M1,40 -Has,M2,75 -Has,M3,40 -Has,M4,60 -Has,M5,50 -Has,M6,60 -Has,BY,198 -Has,Alice,163 -Has,Bob,245 -Has,Charlie,197 -StartStockRound,4 -HasPriority,Charlie -BUY_SHARE_LOG,Charlie,10,SX,IPO,88 -BUY_SHARE_LOG,Alice,10,BY,IPO,92 -PriceIsPaidTo,92,BY -BUY_SHARE_LOG,Bob,10,SX,IPO,88 -BUY_SHARE_LOG,Charlie,10,SX,IPO,88 -FloatsWithCash,SX,440 -PASSES,Alice -BUY_SHARE_LOG,Bob,10,SX,IPO,88 -PriceIsPaidTo,88,SX -PASSES,Charlie -PASSES,Alice -PASSES,Bob - -END_SR,4 -PRICE_MOVES_LOG,BY,100,D3,108,D2 -SoldOut,BY,100,D3,108,D2 -Has,M1,40 -Has,M2,75 -Has,M3,40 -Has,M4,60 -Has,M5,50 -Has,M6,60 -Has,BY,290 -Has,SX,528 -Has,Alice,71 -Has,Bob,69 -Has,Charlie,21 -START_OR,4.1 -ReceivesFor,Alice,10,OBB -ReceivesFor,Bob,15,PfB -ReceivesFor,Charlie,20,LD -ReceivesFor,Bob,25,BB -ReceivesFor,Charlie,30,HB - -CompanyOperates,M1,Bob -LaysTileAt,M1,4,K3,NW -CompanyRevenue,M1,40 -CompanySplits,M1,40 -M1 receives 20 -Payout,Bob,20,1,100 - -CompanyOperates,M2,Alice -CompanyRevenue,M2,70 -CompanySplits,M2,70 -M2 receives 35 -Payout,Alice,35,1,100 - -CompanyOperates,M3,Bob -LaysTileAt,M3,57,F10,W -CompanyRevenue,M3,40 -CompanySplits,M3,40 -M3 receives 20 -Payout,Bob,20,1,100 - -CompanyOperates,M4,Charlie -LaysTileAtFor,M4,5,D8,W,50 -CompanyRevenue,M4,60 -CompanySplits,M4,60 -M4 receives 30 -Payout,Charlie,30,1,100 - -CompanyOperates,M5,Charlie -CompanyRevenue,M5,50 -CompanySplits,M5,50 -M5 receives 25 -Payout,Charlie,25,1,100 - -CompanyOperates,M6,Bob -LaysTileAt,M6,58,B14,SE -CompanyRevenue,M6,60 -CompanySplits,M6,60 -M6 receives 30 -Payout,Bob,30,1,100 - -CompanyOperates,BY,Alice -LaysTileAtFor,BY,9,J14,W,70 -LaysTileAt,BY,9,J12,W -CompanyRevenue,BY,200 -CompanyPaysOutFull,BY,200 -Payout,Bob,60,3,10 -Payout,Charlie,20,1,10 -Payout,Alice,120,6,10 -PRICE_MOVES_LOG,BY,108,D2,120,E2 - -CompanyOperates,SX,Charlie -LaysTileAt,SX,8,H18,SE -CompanyDoesNotPayDividend,SX -PRICE_MOVES_LOG,SX,88,C4,84,B4 -BuysTrain,SX,2+2,IPO,120 -PrivateCloses,LD -BuysTrain,SX,2+2,IPO,120 -All 2+2-trains are sold out, 3-trains now available -BuysTrain,SX,3,IPO,180 -FirstTrainBought,3 -StartOfPhase,3 - -EndOfOperatingRound,4.1 -ORWorthIncrease,Alice,4.1,237 -ORWorthIncrease,Bob,4.1,198 -ORWorthIncrease,Charlie,4.1,-69 -Has,M1,60 -Has,M2,110 -Has,M3,60 -Has,M4,40 -Has,M5,75 -Has,M6,90 -Has,BY,220 -Has,SX,108 -Has,Alice,236 -Has,Bob,239 -Has,Charlie,146 -StartStockRound,5 -HasPriority,Charlie -BUY_SHARE_LOG,Charlie,10,SX,IPO,88 -PriceIsPaidTo,88,SX -BUY_SHARE_LOG,Alice,10,SX,IPO,88 -PriceIsPaidTo,88,SX -BUY_SHARE_LOG,Bob,10,SX,IPO,88 -PriceIsPaidTo,88,SX -PASSES,Charlie -BUY_SHARE_LOG,Alice,10,SX,IPO,88 -PriceIsPaidTo,88,SX -SharesReleased,All,BA -PASSES,Bob -PASSES,Charlie -PASSES,Alice - -END_SR,5 -PRICE_MOVES_LOG,BY,120,E2,132,E1 -SoldOut,BY,120,E2,132,E1 -PRICE_MOVES_LOG,SX,84,B4,86,B3 -SoldOut,SX,84,B4,86,B3 -Has,M1,60 -Has,M2,110 -Has,M3,60 -Has,M4,40 -Has,M5,75 -Has,M6,90 -Has,BY,220 -Has,SX,460 -Has,Alice,60 -Has,Bob,151 -Has,Charlie,58 -START_OR,5.1 -ReceivesFor,Alice,10,OBB -ReceivesFor,Bob,15,PfB -ReceivesFor,Bob,25,BB -ReceivesFor,Charlie,30,HB - -CompanyOperates,M1,Bob -LaysTileAt,M1,207,H2,E -CompanyRevenue,M1,50 -CompanySplits,M1,50 -M1 receives 25 -Payout,Bob,25,1,100 - -CompanyOperates,M2,Alice -LaysTileAt,M2,209,E19,SW -CompanyRevenue,M2,80 -CompanySplits,M2,80 -M2 receives 40 -Payout,Alice,40,1,100 -BuysTrain,M2,2+2,BY,150 - -CompanyOperates,M3,Bob -LaysTileAt,M3,205,F14,SE -CompanyRevenue,M3,50 -CompanySplits,M3,50 -M3 receives 25 -Payout,Bob,25,1,100 - -CompanyOperates,M4,Charlie -LaysTileAt,M4,14,G5,SW -CompanyRevenue,M4,80 -CompanySplits,M4,80 -M4 receives 40 -Payout,Charlie,40,1,100 - -CompanyOperates,M5,Charlie -LaysTileAt,M5,208,H20,W -CompanyRevenue,M5,80 -CompanySplits,M5,80 -M5 receives 40 -Payout,Charlie,40,1,100 -BuysTrain,M5,2+2,SX,115 - -CompanyOperates,M6,Bob -LaysTileAt,M6,12,A11,W -CompanyRevenue,M6,70 -CompanySplits,M6,70 -M6 receives 35 -Payout,Bob,35,1,100 - -CompanyOperates,BY,Alice -LaysTileAt,BY,9,J10,W -LAYS_TOKEN_ON,BY,J8,120 -CompanyRevenue,BY,240 -CompanyPaysOutFull,BY,240 -Payout,Bob,72,3,10 -Payout,Alice,144,6,10 -Payout,Charlie,24,1,10 -PRICE_MOVES_LOG,BY,132,E1,148,F1 -BuysTrain,BY,3,IPO,180 - -CompanyOperates,SX,Charlie -LaysTileAt,SX,13,H16,W -LAYS_TOKEN_ON,SX,E19,60 -CompanyRevenue,SX,190 -CompanyPaysOutFull,SX,190 -Payout,Alice,38,2,10 -Payout,Bob,57,3,10 -Payout,Charlie,95,5,10 -PRICE_MOVES_LOG,SX,86,B3,92,C3 -BuysTrain,SX,3,IPO,180 -BuysTrain,SX,3,IPO,180 -All 3-trains are sold out, 3+3-trains now available - -EndOfOperatingRound,5.1 -ORWorthIncrease,Alice,5.1,340 -ORWorthIncrease,Bob,5.1,320 -ORWorthIncrease,Charlie,5.1,275 -Has,M1,85 -Has,M2,0 -Has,M3,85 -Has,M4,80 -Has,M5,0 -Has,M6,125 -Has,BY,70 -Has,SX,155 -Has,Alice,292 -Has,Bob,405 -Has,Charlie,287 -START_OR,5.2 -ReceivesFor,Alice,10,OBB -ReceivesFor,Bob,15,PfB -ReceivesFor,Bob,25,BB -ReceivesFor,Charlie,30,HB - -CompanyOperates,M1,Bob -LaysTileAtFor,M1,211,G3,E,50 -CompanyRevenue,M1,70 -CompanySplits,M1,70 -M1 receives 35 -Payout,Bob,35,1,100 - -CompanyOperates,M2,Alice -LaysTileAt,M2,23,D18,NW -CompanyRevenue,M2,180 -CompanySplits,M2,180 -M2 receives 90 -Payout,Alice,90,1,100 - -CompanyOperates,M3,Bob -LaysTileAt,M3,8,F8,E -CompanyRevenue,M3,50 -CompanySplits,M3,50 -M3 receives 25 -Payout,Bob,25,1,100 - -CompanyOperates,M4,Charlie -LaysTileAt,M4,8,G7,W -CompanyRevenue,M4,110 -CompanySplits,M4,110 -M4 receives 55 -Payout,Charlie,55,1,100 - -CompanyOperates,M5,Charlie -LaysTileAt,M5,8,C17,SE -CompanyRevenue,M5,180 -CompanySplits,M5,180 -M5 receives 90 -Payout,Charlie,90,1,100 - -CompanyOperates,M6,Bob -LaysTileAt,M6,8,C15,NW -CompanyRevenue,M6,70 -CompanySplits,M6,70 -M6 receives 35 -Payout,Bob,35,1,100 - -CompanyOperates,BY,Alice -LaysTileAtFor,BY,214,J6,SE,50 -CompanyRevenue,BY,330 -CompanyPaysOutFull,BY,330 -Payout,Alice,198,6,10 -Payout,Bob,99,3,10 -Payout,Charlie,33,1,10 -PRICE_MOVES_LOG,BY,148,F1,166,G1 - -CompanyOperates,SX,Charlie -LaysTileAt,SX,23,H18,E -LAYS_TOKEN_ON,SX,H20,40 -CompanyRevenue,SX,370 -CompanyPaysOutFull,SX,370 -Payout,Alice,74,2,10 -Payout,Bob,111,3,10 -Payout,Charlie,185,5,10 -PRICE_MOVES_LOG,SX,92,C3,100,D3 - -EndOfOperatingRound,5.2 -ORWorthIncrease,Alice,5.2,496 -ORWorthIncrease,Bob,5.2,423 -ORWorthIncrease,Charlie,5.2,451 -Has,M1,70 -Has,M2,90 -Has,M3,110 -Has,M4,135 -Has,M5,90 -Has,M6,160 -Has,BY,20 -Has,SX,115 -Has,Alice,664 -Has,Bob,750 -Has,Charlie,680 -StartStockRound,6 -HasPriority,Bob -START_COMPANY_LOG,Bob,BA,84,168,2,20,BANK -SharesReleased,4 10%,PR -BUY_SHARE_LOG,Charlie,10,BA,IPO,84 -BUY_SHARE_LOG,Alice,10,BA,IPO,84 -BUY_SHARE_LOG,Bob,10,BA,IPO,84 -FloatsWithCash,BA,420 -SharesReleased,All,WT -BUY_SHARE_LOG,Charlie,10,BA,IPO,84 -PriceIsPaidTo,84,BA -START_COMPANY_LOG,Alice,WT,84,168,2,20,BANK -BUY_SHARE_LOG,Bob,10,BA,IPO,84 -PriceIsPaidTo,84,BA -BUY_SHARE_LOG,Charlie,10,BA,IPO,84 -PriceIsPaidTo,84,BA -BUY_SHARE_LOG,Alice,10,WT,IPO,84 -BUY_SHARE_LOG,Bob,20,BA,IPO,168 -PriceIsPaidTo,168,BA -BUY_SHARE_LOG,Charlie,10,WT,IPO,84 -BUY_SHARE_LOG,Alice,10,WT,IPO,84 -FloatsWithCash,WT,420 -SharesReleased,All,HE -BUY_SHARE_LOG,Bob,10,WT,IPO,84 -PriceIsPaidTo,84,WT -START_COMPANY_LOG,Charlie,HE,84,168,2,20,BANK -BUY_SHARE_LOG,Alice,10,HE,IPO,84 -BUY_SHARE_LOG,Bob,10,HE,IPO,84 -BUY_SHARE_LOG,Charlie,10,HE,IPO,84 -FloatsWithCash,HE,420 -BUY_SHARE_LOG,Alice,10,HE,IPO,84 -PriceIsPaidTo,84,HE -PASSES,Bob -BUY_SHARE_LOG,Charlie,10,HE,IPO,84 -PriceIsPaidTo,84,HE -PASSES,Alice -PASSES,Bob -PASSES,Charlie - -END_SR,6 -PRICE_STAYS_LOG,BY,166,G1 -SoldOutNoRaise,BY,166,G1 -PRICE_MOVES_LOG,SX,100,D3,108,D2 -SoldOut,SX,100,D3,108,D2 -PRICE_MOVES_LOG,BA,84,B4,86,B3 -SoldOut,BA,84,B4,86,B3 -Has,M1,70 -Has,M2,90 -Has,M3,110 -Has,M4,135 -Has,M5,90 -Has,M6,160 -Has,BY,20 -Has,SX,115 -Has,BA,840 -Has,WT,504 -Has,HE,588 -Has,Alice,76 -Has,Bob,78 -Has,Charlie,8 -START_OR,6.1 -ReceivesFor,Alice,10,OBB -ReceivesFor,Bob,15,PfB -ReceivesFor,Bob,25,BB -ReceivesFor,Charlie,30,HB - -CompanyOperates,M1,Bob -LaysTileAt,M1,9,I5,SE -CompanyRevenue,M1,70 -CompanySplits,M1,70 -M1 receives 35 -Payout,Bob,35,1,100 - -CompanyOperates,M2,Alice -CompanyRevenue,M2,180 -CompanySplits,M2,180 -M2 receives 90 -Payout,Alice,90,1,100 - -CompanyOperates,M3,Bob -LaysTileAt,M3,206,F10,SE -CompanyRevenue,M3,50 -CompanySplits,M3,50 -M3 receives 25 -Payout,Bob,25,1,100 - -CompanyOperates,M4,Charlie -LaysTileAt,M4,15,D8,NE -CompanyRevenue,M4,110 -CompanySplits,M4,110 -M4 receives 55 -Payout,Charlie,55,1,100 - -CompanyOperates,M5,Charlie -CompanyRevenue,M5,180 -CompanySplits,M5,180 -M5 receives 90 -Payout,Charlie,90,1,100 - -CompanyOperates,M6,Bob -CompanyRevenue,M6,70 -CompanySplits,M6,70 -M6 receives 35 -Payout,Bob,35,1,100 - -CompanyOperates,BY,Alice -LaysTileAt,BY,8,K5,NE -CompanyRevenue,BY,330 -CompanyPaysOutFull,BY,330 -Payout,Alice,198,6,10 -Payout,Bob,99,3,10 -Payout,Charlie,33,1,10 -PRICE_MOVES_LOG,BY,166,G1,186,H1 - -CompanyOperates,SX,Charlie -CompanyRevenue,SX,370 -CompanyPaysOutFull,SX,370 -Payout,Alice,74,2,10 -Payout,Bob,111,3,10 -Payout,Charlie,185,5,10 -PRICE_MOVES_LOG,SX,108,D2,120,E2 - -CompanyOperates,BA,Bob -LaysTileAt,BA,210,L6,E -CompanyDoesNotPayDividend,BA -PRICE_MOVES_LOG,BA,86,B3,82,A3 -BuysTrain,BA,3+3,IPO,270 -FirstTrainBought,3+3 -BuysTrain,BA,3+3,IPO,270 -BuysTrain,BA,3+3,IPO,270 -All 3+3-trains are sold out, 4-trains now available - -CompanyOperates,WT,Alice -LaysTileAt,WT,57,M9,W -CompanyDoesNotPayDividend,WT -PRICE_MOVES_LOG,WT,84,B4,78,A4 -BuysTrain,WT,4,IPO,360 -FirstTrainBought,4 -StartOfPhase,4 -TrainsRusted,2 -CompanyDiscardsTrain,SX,2+2 -StartFormationRou... [truncated message content] |
From: Stefan F. <ste...@us...> - 2012-05-29 10:02:39
|
rails/game/Stop.java | 2 ++ 1 file changed, 2 insertions(+) New commits: commit 15d6a1153f2dbdca98010f64e1a6c31c3ed898d3 Author: Stefan Frey <ste...@we...> Date: Tue May 29 11:51:01 2012 +0200 fixed update of token display after undo/redo diff --git a/rails/game/Stop.java b/rails/game/Stop.java index 401f18f..b58dc02 100644 --- a/rails/game/Stop.java +++ b/rails/game/Stop.java @@ -227,6 +227,7 @@ public class Stop implements TokenHolder { public boolean addObject(Moveable object, int[] position) { if (object instanceof TokenI) { + mapHex.update(); return addToken((TokenI) object, position == null ? -1 : position[0]); } else { return false; @@ -235,6 +236,7 @@ public class Stop implements TokenHolder { public boolean removeObject(Moveable object) { if (object instanceof TokenI) { + mapHex.update(); return removeToken((TokenI) object); } else { return false; |
From: Erik V. <ev...@us...> - 2012-05-28 13:29:27
|
rails/ui/swing/elements/NonModalDialog.java | 1 + 1 file changed, 1 insertion(+) New commits: commit 3429f9f58e6993b09c89f7f56fd4a7230ef1ede9 Author: Erik Vos <eri...@xs...> Date: Mon May 28 15:28:49 2012 +0200 Fixed non-modal dialog bug during loading game. Non-modal dialogs try to center location on the 'parent' window, but centering fails if the parent is not visible. It is now also set visible beforehand. diff --git a/rails/ui/swing/elements/NonModalDialog.java b/rails/ui/swing/elements/NonModalDialog.java index 36d8581..15a3b37 100644 --- a/rails/ui/swing/elements/NonModalDialog.java +++ b/rails/ui/swing/elements/NonModalDialog.java @@ -83,6 +83,7 @@ public abstract class NonModalDialog extends JDialog implements ActionListener { pack(); // Center on owner + window.setVisible(true); // Window must be visible to find its location! int x = (int) window.getLocationOnScreen().getX() + (window.getWidth() - getWidth()) / 2; int y = (int) window.getLocationOnScreen().getY() |
From: Erik V. <ev...@us...> - 2012-05-28 10:57:06
|
rails/game/MapManager.java | 38 ++++++++++++++++++++++++++++++++++++-- 1 file changed, 36 insertions(+), 2 deletions(-) New commits: commit 1210bffe332f0f978f828b2e7e38e77cc7267cc4 Author: Erik Vos <eri...@xs...> Date: Mon May 28 12:55:02 2012 +0200 Fixed 1835 hex distance calculation bug. Impassable hex sides are no longer disregarded. diff --git a/rails/game/MapManager.java b/rails/game/MapManager.java index dcd9cad..6cd4307 100644 --- a/rails/game/MapManager.java +++ b/rails/game/MapManager.java @@ -325,6 +325,40 @@ public class MapManager implements ConfigurableComponentI { } } + /** Return the hex adjacent to a given hex in a particular direction. + * Return null if that hex does not exist. + * @param hex The hex object for which an adjacent one is searched. + * @param orientation The direction where to look (values 0-5); + * @return The found MapHex object, or null. + */ + public MapHex getAdjacentHex (MapHex hex, int orientation) { + + int x = hex.getX(); + int y = hex.getY(); + int xx = getAdjacentX (x, y, orientation); + int yy = getAdjacentY (x, y, orientation); + + if (xx >= minX && xx <= maxX && yy >= minY && yy <= maxY) { + return hexes[xx][yy]; // null if undefined + } + return null; //outside the map border + } + + /** Return a List of all hexes adjacent to a given hex. + * @param hex The hex object for which all adjacent hexes are searched. + * @return The found list of MapHex objects. Can be empty, not null. + */ + public List<MapHex> getAdjacentHexes (MapHex hex) { + + List<MapHex> adjacentHexes = new ArrayList<MapHex> (); + MapHex adjacentHex; + + for (int i=0; i<6; i++) { + if ((adjacentHex = getAdjacentHex (hex, i)) != null) adjacentHexes.add(adjacentHex); + } + return adjacentHexes; + } + /** * @return Returns the currentTileOrientation. */ @@ -443,7 +477,7 @@ public class MapManager implements ConfigurableComponentI { distances.get(hex1).put(hex2, depth); } - for (MapHex hex3 : hex2.getNeighbors()) { + for (MapHex hex3 : getAdjacentHexes(hex2)) { if (hex3 == null) continue; if (distances.get(hex1).get(hex3) == null) { calculateHexDistances (hex1, hex3, depth+1); @@ -494,7 +528,7 @@ public class MapManager implements ConfigurableComponentI { public int getMapXOffset() { return mapXOffset; } - + public int getMapYOffset() { return mapYOffset; } |
From: Stefan F. <ste...@us...> - 2012-05-26 14:11:45
|
rails/algorithms/NetworkCompanyGraph.java | 2 rails/algorithms/NetworkGraphBuilder.java | 9 rails/algorithms/RevenueAdapter.java | 4 rails/algorithms/RevenueManager.java | 31 rails/common/GuiHints.java | 31 rails/common/ResourceLoader.java | 4 rails/game/AbstractRound.java | 544 +++++++++++++++ rails/game/Bank.java | 70 - rails/game/BankPortfolio.java | 38 + rails/game/BaseToken.java | 43 - rails/game/Bonus.java | 1 rails/game/BonusToken.java | 53 - rails/game/Certificate.java | 4 rails/game/Company.java | 53 - rails/game/CompanyManager.java | 2 rails/game/CompanyManagerI.java | 2 rails/game/CompanyType.java | 53 - rails/game/CompanyTypeI.java | 52 - rails/game/EndOfGameRound.java | 2 rails/game/Game.java | 3 rails/game/GameManager.java | 125 +-- rails/game/MapHex.java | 179 ++-- rails/game/MapManager.java | 3 rails/game/OperatingRound.java | 192 ++--- rails/game/Phase.java | 2 rails/game/PhaseManager.java | 11 rails/game/Player.java | 79 +- rails/game/PlayerManager.java | 9 rails/game/PrivateCompany.java | 143 +-- rails/game/PublicCertificate.java | 22 rails/game/PublicCompany.java | 496 ++++++------- rails/game/ReportBuffer.java | 6 rails/game/Round.java | 537 -------------- rails/game/RoundI.java | 34 rails/game/ShareSellingRound.java | 47 - rails/game/StartItem.java | 109 +-- rails/game/StartPacket.java | 6 rails/game/StartRound.java | 29 rails/game/StartRoundI.java | 28 rails/game/StartRound_1830.java | 8 rails/game/StartRound_1835.java | 30 rails/game/Station.java | 6 rails/game/StockMarket.java | 16 rails/game/StockRound.java | 109 +-- rails/game/StockSpace.java | 63 - rails/game/Stop.java | 106 +- rails/game/SwitchableUIRound.java | 2 rails/game/Tile.java | 56 - rails/game/TileI.java | 90 -- rails/game/TileManager.java | 2 rails/game/Token.java | 49 - rails/game/Train.java | 57 - rails/game/TrainCertificateType.java | 36 rails/game/TrainManager.java | 4 rails/game/TreasuryShareRound.java | 36 rails/game/action/BuyBonusToken.java | 4 rails/game/action/BuyCertificate.java | 14 rails/game/action/BuyTrain.java | 37 - rails/game/action/DiscardTrain.java | 4 rails/game/action/LayTile.java | 32 rails/game/action/PossibleORAction.java | 10 rails/game/action/UseSpecialProperty.java | 12 rails/game/correct/CashCorrectionManager.java | 6 rails/game/correct/CorrectionManager.java | 17 rails/game/correct/MapCorrectionAction.java | 22 rails/game/correct/MapCorrectionManager.java | 6 rails/game/model/BaseTokensModel.java | 71 + rails/game/model/BonusModel.java | 7 rails/game/model/CalculatedMoneyModel.java | 10 rails/game/model/CashMoneyModel.java | 5 rails/game/model/CashOwner.java | 8 rails/game/model/CertificateCountModel.java | 31 rails/game/model/CertificatesModel.java | 12 rails/game/model/MoneyModel.java | 7 rails/game/model/PortfolioModel.java | 119 +-- rails/game/model/PortfolioOwner.java | 10 rails/game/model/PresidentModel.java | 14 rails/game/model/PriceModel.java | 19 rails/game/model/PrivatesModel.java | 9 rails/game/model/TrainsModel.java | 11 rails/game/round/RoundContext.java | 10 rails/game/special/ExchangeForShare.java | 5 rails/game/special/SellBonusToken.java | 25 rails/game/special/SpecialProperty.java | 54 - rails/game/special/SpecialPropertyI.java | 70 - rails/game/special/SpecialRight.java | 6 rails/game/special/SpecialTileLay.java | 8 rails/game/specific/_1825/PublicCompany_1825.java | 16 rails/game/specific/_1825/StartRound_1825.java | 2 rails/game/specific/_1825/StockRound_1825.java | 2 rails/game/specific/_1835/GameManager_1835.java | 15 rails/game/specific/_1835/OperatingRound_1835.java | 29 rails/game/specific/_1835/PrussianFormationRound.java | 32 rails/game/specific/_1835/StockRound_1835.java | 12 rails/game/specific/_1856/CGRFormationRound.java | 82 +- rails/game/specific/_1856/GameManager_1856.java | 13 rails/game/specific/_1856/OperatingRound_1856.java | 28 rails/game/specific/_1856/PublicCompany_1856.java | 24 rails/game/specific/_1856/PublicCompany_CGR.java | 28 rails/game/specific/_1856/ShareSellingRound_1856.java | 26 rails/game/specific/_1856/StockRound_1856.java | 43 - rails/game/specific/_1880/StartRound_1880.java | 43 - rails/game/specific/_1889/OperatingRound_1889.java | 52 - rails/game/specific/_18AL/AssignNamedTrains.java | 6 rails/game/specific/_18AL/NameTrains.java | 3 rails/game/specific/_18AL/NameableTrain.java | 12 rails/game/specific/_18AL/NamedTrainRevenueModifier.java | 2 rails/game/specific/_18AL/NamedTrainToken.java | 7 rails/game/specific/_18AL/OperatingRound_18AL.java | 2 rails/game/specific/_18EU/GameManager_18EU.java | 32 rails/game/specific/_18EU/OperatingRound_18EU.java | 56 - rails/game/specific/_18EU/StartRound_18EU.java | 46 - rails/game/specific/_18EU/StockRound_18EU.java | 94 +- rails/game/specific/_18GA/OperatingRound_18GA.java | 4 rails/game/specific/_18TN/OperatingRound_18TN.java | 14 rails/game/specific/_18TN/PublicCompany_18TN.java | 15 rails/game/state/AbstractItem.java | 13 rails/game/state/ArrayListMultimapState.java | 6 rails/game/state/ArrayListState.java | 6 rails/game/state/BooleanState.java | 6 rails/game/state/ChangeStack.java | 2 rails/game/state/Context.java | 4 rails/game/state/GenericState.java | 8 rails/game/state/HashMapState.java | 6 rails/game/state/HashMultimapState.java | 5 rails/game/state/HashSetState.java | 6 rails/game/state/IntegerChange.java | 2 rails/game/state/IntegerState.java | 10 rails/game/state/Item.java | 2 rails/game/state/Ownable.java | 20 rails/game/state/OwnableItem.java | 22 rails/game/state/Owner.java | 13 rails/game/state/Portfolio.java | 36 rails/game/state/PortfolioChange.java | 2 rails/game/state/PortfolioHolder.java | 8 rails/game/state/PortfolioList.java | 10 rails/game/state/PortfolioManager.java | 12 rails/game/state/PortfolioMap.java | 10 rails/game/state/Root.java | 4 rails/game/state/State.java | 5 rails/game/state/StateManager.java | 8 rails/game/state/StringState.java | 6 rails/game/state/TileMove.java | 8 rails/game/state/Wallet.java | 6 rails/game/state/WalletManager.java | 6 rails/ui/swing/GameStatus.java | 21 rails/ui/swing/GameUIManager.java | 10 rails/ui/swing/GridPanel.java | 30 rails/ui/swing/ORPanel.java | 10 rails/ui/swing/ORUIManager.java | 36 rails/ui/swing/RemainingTilesWindow.java | 9 rails/ui/swing/StartRoundWindow.java | 4 rails/ui/swing/StatusWindow.java | 4 rails/ui/swing/UpgradesPanel.java | 48 - rails/ui/swing/gamespecific/_1835/StatusWindow_1835.java | 2 rails/ui/swing/gamespecific/_1856/StatusWindow_1856.java | 2 rails/ui/swing/hexmap/GUIHex.java | 51 - rails/ui/swing/hexmap/GUITile.java | 8 rails/ui/swing/hexmap/HexMap.java | 5 rails/ui/swing/hexmap/HexMapImage.java | 16 rails/util/Util.java | 28 161 files changed, 2799 insertions(+), 2880 deletions(-) New commits: commit f080601bedb11b14264515a41730fd62f30e0025 Author: Stefan Frey <ste...@we...> Date: Sun May 20 15:18:54 2012 +0200 further changes to the new defined elements diff --git a/rails/algorithms/NetworkGraphBuilder.java b/rails/algorithms/NetworkGraphBuilder.java index 0204793..a1a5d7f 100644 --- a/rails/algorithms/NetworkGraphBuilder.java +++ b/rails/algorithms/NetworkGraphBuilder.java @@ -32,7 +32,7 @@ import rails.game.MapHex; import rails.game.MapManager; import rails.game.PublicCompany; import rails.game.Station; -import rails.game.TileI; +import rails.game.Tile; import rails.game.Token; import rails.game.Track; import rails.game.state.Owner; @@ -64,7 +64,7 @@ public final class NetworkGraphBuilder implements Iterable<NetworkVertex> { for (MapHex hex:mapManager.getHexesAsList()) { // get Tile - TileI tile = hex.getCurrentTile(); + Tile tile = hex.getCurrentTile(); // then get stations List<Station> stations = tile.getStations(); @@ -89,7 +89,7 @@ public final class NetworkGraphBuilder implements Iterable<NetworkVertex> { // loop over all maps and add tracks for (MapHex hex:mapManager.getHexesAsList()) { // get Tile - TileI tile = hex.getCurrentTile(); + Tile tile = hex.getCurrentTile(); // get Tracks List<Track> tracks = tile.getTracks(); @@ -178,6 +178,7 @@ public final class NetworkGraphBuilder implements Iterable<NetworkVertex> { public NetworkVertex getVertex(Token token) { if (!(token instanceof BaseToken)) return null; Owner owner = token.getOwner(); + // TODO: Check if this still works if (!(owner instanceof Stop)) return null; Stop city = (Stop)owner; MapHex hex = city.getHolder(); diff --git a/rails/algorithms/RevenueManager.java b/rails/algorithms/RevenueManager.java index bfba854..a6e0cfc 100644 --- a/rails/algorithms/RevenueManager.java +++ b/rails/algorithms/RevenueManager.java @@ -14,6 +14,7 @@ import rails.common.parser.Tag; import rails.game.GameManager; import rails.game.state.AbstractItem; import rails.game.state.ArrayListState; +import rails.game.state.Item; /** * Coordinates and stores all elements related to revenue calulcation, @@ -30,25 +31,17 @@ public final class RevenueManager extends AbstractItem implements ConfigurableCo protected static Logger log = Logger.getLogger(RevenueManager.class.getPackage().getName()); - private final HashSet<ConfigurableComponentI> configurableModifiers; + private final HashSet<ConfigurableComponentI> configurableModifiers = new HashSet<ConfigurableComponentI>(); - private final ArrayListState<NetworkGraphModifier> graphModifiers; - private final ArrayListState<RevenueStaticModifier> staticModifiers; - private final ArrayListState<RevenueDynamicModifier> dynamicModifiers; + private final ArrayListState<NetworkGraphModifier> graphModifiers = ArrayListState.create(); + private final ArrayListState<RevenueStaticModifier> staticModifiers = ArrayListState.create(); + private final ArrayListState<RevenueDynamicModifier> dynamicModifiers = ArrayListState.create(); - private final ArrayList<RevenueStaticModifier> activeStaticModifiers; - private final ArrayList<RevenueDynamicModifier> activeDynamicModifiers; + private final ArrayList<RevenueStaticModifier> activeStaticModifiers = new ArrayList<RevenueStaticModifier>(); + private final ArrayList<RevenueDynamicModifier> activeDynamicModifiers = new ArrayList<RevenueDynamicModifier>(); private RevenueDynamicModifier activeCalculator; - public RevenueManager() { - graphModifiers = ArrayListState.create(this, "NetworkGraphModifiers"); - staticModifiers = ArrayListState.create(this, "RevenueStaticModifiers"); - dynamicModifiers = ArrayListState.create(this, "RevenueDynamicModifiers"); - configurableModifiers = new HashSet<ConfigurableComponentI>(); - - activeStaticModifiers = new ArrayList<RevenueStaticModifier>(); - activeDynamicModifiers = new ArrayList<RevenueDynamicModifier>(); - } + public RevenueManager() {} public void configureFromXML(Tag tag) throws ConfigurationException { @@ -100,6 +93,14 @@ public final class RevenueManager extends AbstractItem implements ConfigurableCo } + @Override + public void init(Item parent, String id) { + super.init(parent, id); + graphModifiers.init(this, "NetworkGraphModifiers"); + staticModifiers.init(this, "RevenueStaticModifiers"); + dynamicModifiers.init(this, "RevenueDynamicModifiers"); + } + public void finishConfiguration(GameManager parent) throws ConfigurationException { for (ConfigurableComponentI modifier:configurableModifiers) { diff --git a/rails/common/GuiHints.java b/rails/common/GuiHints.java index b386bc8..a40d4ac 100644 --- a/rails/common/GuiHints.java +++ b/rails/common/GuiHints.java @@ -4,9 +4,10 @@ import java.io.Serializable; import java.util.ArrayList; import java.util.List; -import rails.game.RoundI; +import rails.game.Round; import rails.game.state.AbstractItem; import rails.game.state.GenericState; +import rails.game.state.Item; /** * This class contains hints from the server (game engine) to the client (GUI) @@ -21,25 +22,27 @@ public class GuiHints extends AbstractItem implements Serializable{ public static final long serialVersionUID = 1L; /** What round type is currently active in the engine? */ - private GenericState<Class<? extends RoundI>> currentRoundType = null; + private GenericState<Class<? extends Round>> currentRoundType = GenericState.create(); /** Which windows should be visible? */ private List<VisibilityHint> visibilityHints; /** Which window type is active and should be on top? */ - private GenericState<GuiDef.Panel> activePanel = null; + private GenericState<GuiDef.Panel> activePanel = GenericState.create(); - public Class<? extends RoundI> getCurrentRoundType() { + @Override + public void init(Item parent, String id){ + super.init(parent, id); + currentRoundType.init(this, "CurrentRoundType"); + activePanel.init(this, "ActivePanel"); + } + + public Class<? extends Round> getCurrentRoundType() { return currentRoundType.get(); } - public void setCurrentRoundType(Class<? extends RoundI> currentRoundType) { - if (this.currentRoundType == null) { - this.currentRoundType = GenericState.<Class<? extends RoundI>>create - (this, "CurrentRoundType", currentRoundType); - } else { - this.currentRoundType.set(currentRoundType); - } + public void setCurrentRoundType(Class<? extends Round> currentRoundType) { + this.currentRoundType.set(currentRoundType); } public List<VisibilityHint> getVisibilityHints() { @@ -66,11 +69,7 @@ public class GuiHints extends AbstractItem implements Serializable{ } public void setActivePanel(GuiDef.Panel activePanel) { - if (this.activePanel == null) { - this.activePanel = GenericState.create(this, "ActivePanel", activePanel); - } else { - this.activePanel.set(activePanel); - } + this.activePanel.set(activePanel); } public class VisibilityHint { diff --git a/rails/common/ResourceLoader.java b/rails/common/ResourceLoader.java index b064b9a..c31eebb 100644 --- a/rails/common/ResourceLoader.java +++ b/rails/common/ResourceLoader.java @@ -41,10 +41,6 @@ public final class ResourceLoader { super(parent); } - RailsClassLoader() { - super(); - } - @Override public Class<?> findClass(String className) throws ClassNotFoundException { diff --git a/rails/game/AbstractRound.java b/rails/game/AbstractRound.java new file mode 100644 index 0000000..ebdccfc --- /dev/null +++ b/rails/game/AbstractRound.java @@ -0,0 +1,544 @@ +package rails.game; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import java.util.TreeMap; + +import org.apache.log4j.Logger; + +import rails.common.*; +import rails.game.action.*; +import rails.game.model.CashOwner; +import rails.game.model.MoneyModel; +import rails.game.model.PortfolioModel; +import rails.game.special.SpecialProperty; +import rails.game.state.AbstractItem; +import rails.game.state.ArrayListState; +import rails.game.state.BooleanState; +import rails.game.state.ChangeStack; +import rails.game.state.Item; +import rails.game.state.Portfolio; + +/** + * @author Erik Vos + */ +public abstract class AbstractRound extends AbstractItem implements Round { + + protected PossibleActions possibleActions = PossibleActions.getInstance(); + protected GuiHints guiHints = null; + + protected static Logger log = + Logger.getLogger(AbstractRound.class.getPackage().getName()); + + protected GameManager gameManager = null; + protected CompanyManagerI companyManager = null; + protected PlayerManager playerManager = null; + protected Bank bank = null; + protected PortfolioModel ipo = null; + protected PortfolioModel pool = null; + protected PortfolioModel unavailable = null; + protected PortfolioModel scrapHeap = null; + protected StockMarket stockMarket = null; + protected MapManager mapManager = null; + + protected final BooleanState wasInterrupted = BooleanState.create(false); + + protected ChangeStack changeStack = null; + + + /** Autopasses */ + // TODO: Should this be moved to the StockRound classes? + // Only initialized if used + protected ArrayListState<Player> autopasses = null; + protected ArrayListState<Player> canRequestTurn = null; + protected ArrayListState<Player> hasRequestedTurn = null; + + /** + * Constructor with the GameManager, will call setGameManager with the parameter to initialize + * + * @param aGameManager The GameManager Object needed to initialize the Round Class + * + */ + public AbstractRound (GameManager aGameManager) { + + this.gameManager = aGameManager; + + if (gameManager == null) { + companyManager = null; + } else { + companyManager = gameManager.getCompanyManager(); + playerManager = gameManager.getPlayerManager(); + bank = gameManager.getBank(); + ipo = bank.getIpo(); + pool = bank.getPool(); + unavailable = bank.getUnavailable(); + scrapHeap = bank.getScrapHeap(); + stockMarket = gameManager.getStockMarket(); + mapManager = gameManager.getMapManager(); + + changeStack = gameManager.getChangeStack(); + } + + guiHints = gameManager.getUIHints(); + guiHints.setCurrentRoundType(getClass()); + } + + @Override + public void init(Item parent, String id) { + super.init(parent, id); + wasInterrupted.init(this, "RoundInterrupted"); + } + + public Player getCurrentPlayer() { + + if (gameManager != null) return gameManager.getCurrentPlayer(); + return null; + } + + /** + * @return Returns the currentPlayerIndex. + */ + public int getCurrentPlayerIndex() { + return getCurrentPlayer().getIndex(); + } + + public void setCurrentPlayerIndex(int newIndex) { + gameManager.setCurrentPlayerIndex(newIndex); + } + + public void setCurrentPlayer(Player player) { + gameManager.setCurrentPlayer(player); + } + + protected List<Player> getPlayers() { + return gameManager.getPlayers(); + } + + protected int getNumberOfPlayers() { + return gameManager.getNumberOfPlayers(); + } + + protected int getNumberOfActivePlayers () { + int number = 0; + for (Player player : getPlayers()) { + if (!player.isBankrupt()) number++; + } + return number; + } + + public Phase getCurrentPhase() { + return gameManager.getCurrentPhase(); + } + + /** Allows round instances to tell the UI what type of window to raise. + * Normally the type corresponds to the round type (e.g. OperatingRound + * needs ORWindow), but sometimes deviations occur (such as the + * CGRFormationRound, which isn't a StockRound type but needs StatusWindow). + * @return + */ + public Class<? extends Round> getRoundTypeForUI () { + return this.getClass(); + } + + public String getGameOption (String name) { + return gameManager.getGameOption(name); + } + + // TODO: Remove as this is abstract class? + public String getHelp() { + // TODO Auto-generated method stub + return null; + } + + // TODO: Remove as this is abstract class? + public List<SpecialProperty> getSpecialProperties() { + // TODO Auto-generated method stub + return null; + } + + public boolean process(PossibleAction action) { + return true; + } + + protected boolean exchangeTokens(ExchangeTokens action, boolean linkedMoveSet) { + + String errMsg = null; + + List<ExchangeableToken> tokens = action.getTokensToExchange(); + int min = action.getMinNumberToExchange(); + int max = action.getMaxNumberToExchange(); + int exchanged = 0; + + checks: { + + for (ExchangeableToken token : tokens) { + if (token.isSelected()) exchanged++; + } + if (exchanged < min || exchanged > max) { + errMsg = LocalText.getText("WrongNumberOfTokensExchanged", + action.getCompany(), + min, max, exchanged); + break checks; + } + } + + if (errMsg != null) { + DisplayBuffer.add(LocalText.getText("CannotExchangeTokens", + action.getCompany(), + action.toString(), + errMsg)); + + return false; + } + + // TODO: changeStack.start(true); + // FIMXE: if (linkedMoveSet) changeStack.linkToPreviousMoveSet(); + + if (exchanged > 0) { + MapHex hex; + Stop city; + String cityName, hexName; + int cityNumber; + String[] ct; + PublicCompany comp = action.getCompany(); + + ReportBuffer.add(""); + + for (ExchangeableToken token : tokens) { + cityName = token.getCityName(); + ct = cityName.split("/"); + hexName = ct[0]; + try { + cityNumber = Integer.parseInt(ct[1]); + } catch (NumberFormatException e) { + cityNumber = 1; + } + hex = mapManager.getHex(hexName); + city = hex.getStop(cityNumber); + + if (token.isSelected()) { + + // For now we'll assume that the old token(s) have already been removed. + // This is true in the 1856 CGR formation. + if (hex.layBaseToken(comp, city.getNumber())) { + /* TODO: the false return value must be impossible. */ + ReportBuffer.add(LocalText.getText("ExchangesBaseToken", + comp.getId(), + token.getOldCompanyName(), + city.getId())); + comp.layBaseToken(hex, 0); + } + } else { + ReportBuffer.add(LocalText.getText("NoBaseTokenExchange", + comp.getId(), + token.getOldCompanyName(), + city.getId())); + } + } + } + + return true; + } + + + /** + * Default version, does nothing. Subclasses should override this method + * with a real version. + */ + // TODO: Remove as this is abstract class? + public boolean setPossibleActions() { + return false; + } + + /** Set the operating companies in their current acting order */ + public List<PublicCompany> setOperatingCompanies() { + return setOperatingCompanies (null, null); + } + + public List<PublicCompany> setOperatingCompanies(List<PublicCompany> oldOperatingCompanies, + PublicCompany lastOperatingCompany) { + + Map<Integer, PublicCompany> operatingCompanies = + new TreeMap<Integer, PublicCompany>(); + List<PublicCompany> newOperatingCompanies; + StockSpace space; + int key; + int minorNo = 0; + boolean reorder = gameManager.isDynamicOperatingOrder() + && oldOperatingCompanies != null && lastOperatingCompany != null; + + int lastOperatingCompanyndex; + if (reorder) { + newOperatingCompanies = oldOperatingCompanies; + lastOperatingCompanyndex = oldOperatingCompanies.indexOf(lastOperatingCompany); + } else { + newOperatingCompanies = companyManager.getAllPublicCompanies(); + lastOperatingCompanyndex = -1; + } + + for (PublicCompany company : newOperatingCompanies) { + if (!reorder && !canCompanyOperateThisRound(company)) continue; + + if (reorder + && oldOperatingCompanies.indexOf(company) <= lastOperatingCompanyndex) { + // Companies that have operated this round get lowest keys + key = oldOperatingCompanies.indexOf(company); + } else if (company.hasStockPrice()) { + // Key must put companies in reverse operating order, because sort + // is ascending. + space = company.getCurrentSpace(); + key = 1000000 * (999 - space.getPrice()) + + 10000 * (99 - space.getColumn()) + + 100 * (space.getRow()+1) + + space.getStackPosition(company); + } else { + key = 50 + ++minorNo; + } + operatingCompanies.put(new Integer(key), company); + } + + return new ArrayList<PublicCompany>(operatingCompanies.values()); + } + + /** Can a public company operate? (Default version) */ + protected boolean canCompanyOperateThisRound (PublicCompany company) { + return company.hasFloated() && !company.isClosed(); + } + + /** + * Check if a company must be floated, and if so, do it. <p>This method is + * included here because it is used in various types of Round. + * + * @param company + */ + protected void checkFlotation(PublicCompany company) { + + if (!company.hasStarted() || company.hasFloated()) return; + + if (getSoldPercentage(company) >= company.getFloatPercentage()) { + // Company floats + floatCompany(company); + } + } + + /** Determine sold percentage for floating purposes */ + protected int getSoldPercentage (PublicCompany company) { + + int soldPercentage = 0; + for (PublicCertificate cert : company.getCertificates()) { + if (certCountsAsSold(cert)) { + soldPercentage += cert.getShare(); + } + } + return soldPercentage; + } + + /** Can be subclassed for games with special rules */ + protected boolean certCountsAsSold (PublicCertificate cert) { + Portfolio<PublicCertificate> portfolio = cert.getPortfolio(); + return portfolio.getOwner() instanceof Player || portfolio.getParent() == pool; + } + + /** + * Float a company, including a default implementation of moving cash and + * shares as a result of flotation. <p>Full capitalisation is implemented + * as in 1830. Partial capitalisation is implemented as in 1851. Other ways + * to process the consequences of company flotation must be handled in + * game-specific subclasses. + */ + protected void floatCompany(PublicCompany company) { + + // Move cash and shares where required + int soldPercentage = getSoldPercentage(company); + int cash = 0; + int capitalisationMode = company.getCapitalisation(); + if (company.hasStockPrice()) { + int capFactor = 0; + int shareUnit = company.getShareUnit(); + if (capitalisationMode == PublicCompany.CAPITALISE_FULL) { + // Full capitalisation as in 1830 + capFactor = 100 / shareUnit; + } else if (capitalisationMode == PublicCompany.CAPITALISE_INCREMENTAL) { + // Incremental capitalisation as in 1851 + capFactor = soldPercentage / shareUnit; + } else if (capitalisationMode == PublicCompany.CAPITALISE_WHEN_BOUGHT) { + // Cash goes directly to treasury at each buy (as in 1856 before phase 6) + capFactor = 0; + } + int price = company.getIPOPrice(); + cash = capFactor * price; + } else { + cash = company.getFixedPrice(); + } + + // Substract initial token cost (e.g. 1851, 18EU) + cash -= company.getBaseTokensBuyCost(); + + company.setFloated(); // After calculating cash (for 1851: price goes + // up) + + if (cash > 0) { + MoneyModel.cashMove(bank, company, cash); + ReportBuffer.add(LocalText.getText("FloatsWithCash", + company.getId(), + Bank.format(cash) )); + } else { + ReportBuffer.add(LocalText.getText("Floats", + company.getId())); + } + + if (capitalisationMode == PublicCompany.CAPITALISE_INCREMENTAL + && company.canHoldOwnShares()) { + // move all shares from ipo to the company portfolio + // FIXME: Is this correct? + // Should a company not have a Portfolio<Share> where it stores the certificates that it owns + Portfolio.moveAll(ipo.getShareModel(company).getPortfolio(), company.getPortfolioModel().getShareModel(company).getPortfolio()); + } + } + + protected void finishRound() { + // Report financials + ReportBuffer.add(""); + for (PublicCompany c : companyManager.getAllPublicCompanies()) { + if (c.hasFloated() && !c.isClosed()) { + ReportBuffer.add(LocalText.getText("Has", c.getId(), + Bank.format(c.getCash()))); + } + } + for (Player p : playerManager.getPlayers()) { + ReportBuffer.add(LocalText.getText("Has", p.getId(), + Bank.format(p.getCashValue()))); + } + // Inform GameManager + gameManager.nextRound(this); + } + + /** Generic stub to resume an interrupted round. + * Only valid if implemented in a subclass. + * + */ + public void resume() { + log.error("Calling Round.resume() is invalid"); + } + + public boolean wasInterrupted () { + return wasInterrupted.booleanValue(); + } + + @Override + public String toString() { + return getClass().getName().replaceAll(".*\\.", ""); + } + + protected void transferCertificate(Certificate cert, PortfolioModel newHolder) { + if (cert instanceof PublicCertificate) { + newHolder.addPublicCertificate((PublicCertificate)cert); + } else if (cert instanceof PrivateCompany) { + newHolder.addPrivateCompany((PrivateCompany)cert); + } + } + + // Note: all transferred shares must come from the same old shareholder. + // TODO: This is not very a very nice implementation + protected void transferCertificates(List<? extends Certificate> certs, + PortfolioModel newHolder) { + + for (Certificate cert : certs) { + if (cert != null) { + transferCertificate(cert, newHolder); + } + } + } + + protected void pay (CashOwner from, CashOwner to, int amount) { + if (to != null && amount != 0) { + MoneyModel.cashMove (from, to, amount); + } + } + + public GameManager getGameManager() { + return gameManager; + } + + protected Object getGameParameter (GameDef.Parm key) { + return gameManager.getGameParameter(key); + } + + public int getGameParameterAsInt (GameDef.Parm key) { + if (key.defaultValue() instanceof Integer) { + return (Integer) gameManager.getGameParameter(key); + } else { + return -1; + } + } + + public boolean getGameParameterAsBoolean (GameDef.Parm key) { + if (key.defaultValue() instanceof Boolean) { + return (Boolean) gameManager.getGameParameter(key); + } else { + return false; + } + } + + public String getRoundName() { + return this.getClass().getSimpleName(); + } + + public boolean requestTurn (Player player) { + if (canRequestTurn (player)) { + if (hasRequestedTurn == null) { + hasRequestedTurn = ArrayListState.create(); + hasRequestedTurn.init(this, "hasRequestedTurn"); + } + if (!hasRequestedTurn.contains(player)) hasRequestedTurn.add(player); + return true; + } + return false; + } + + public boolean canRequestTurn (Player player) { + return canRequestTurn != null && canRequestTurn.contains(player); + } + + public void setCanRequestTurn (Player player, boolean value) { + if (canRequestTurn == null) { + canRequestTurn = ArrayListState.create(); + canRequestTurn.init(this, "canRequestTurn"); + } + if (value && !canRequestTurn.contains(player)) { + canRequestTurn.add(player); + } else if (!value && canRequestTurn.contains(player)) { + canRequestTurn.remove(player); + } + } + + public void setAutopass (Player player, boolean value) { + if (autopasses == null) { + autopasses = ArrayListState.create(); + autopasses.init(this, "autopasses"); + } + if (value && !autopasses.contains(player)) { + autopasses.add(player); + } else if (!value && autopasses.contains(player)) { + autopasses.remove(player); + } + } + + public boolean hasAutopassed (Player player) { + return autopasses != null && autopasses.contains(player); + } + + public List<Player> getAutopasses() { + return autopasses.view(); + } + + /** A stub for processing actions triggered by a phase change. + * Must be overridden by subclasses that need to process such actions. + * @param name (required) The name of the action to be executed + * @param value (optional) The value of the action to be executed, if applicable + */ + public void processPhaseAction (String name, String value) { + + } +} diff --git a/rails/game/Bank.java b/rails/game/Bank.java index 5bebc7c..d5bf827 100644 --- a/rails/game/Bank.java +++ b/rails/game/Bank.java @@ -33,15 +33,15 @@ public class Bank extends AbstractItem implements CashOwner, ConfigurableCompone /** The Bank's amount of cash */ private final CashMoneyModel cash = CashMoneyModel.create(); - + /** The IPO */ - private final PortfolioModel ipo = PortfolioModel.create(); + private final BankPortfolio ipo = BankPortfolio.create(); /** The Bank Pool */ - private final PortfolioModel pool = PortfolioModel.create(); + private final BankPortfolio pool = BankPortfolio.create(); /** Collection of items that will (may) become available in the future */ - private final PortfolioModel unavailable = PortfolioModel.create(); + private final BankPortfolio unavailable = BankPortfolio.create(); /** Collection of items that have been discarded (but are kept to allow Undo) */ - private final PortfolioModel scrapHeap = PortfolioModel.create(); + private final BankPortfolio scrapHeap = BankPortfolio.create(); /** Is the bank broken */ private final BooleanState broken = BooleanState.create(); @@ -117,7 +117,7 @@ public class Bank extends AbstractItem implements CashOwner, ConfigurableCompone List<PrivateCompany> privates = gameManager.getCompanyManager().getAllPrivateCompanies(); for (PrivateCompany priv : privates) { - ipo.addPrivate(priv, -1); + ipo.getPortfolioModel().addPrivateCompany(priv); } // Add public companies @@ -126,9 +126,10 @@ public class Bank extends AbstractItem implements CashOwner, ConfigurableCompone for (PublicCompany comp : companies) { for (PublicCertificate cert : comp.getCertificates()) { if (cert.isInitiallyAvailable()) { - ipo.moveInto(cert); + // TODO: Make this shorter + ipo.getPortfolioModel().getShareModel(comp).getPortfolio().moveInto(cert); } else { - unavailable.moveInto(cert); + unavailable.getPortfolioModel().getShareModel(comp).getPortfolio().moveInto(cert); } } } @@ -138,11 +139,11 @@ public class Bank extends AbstractItem implements CashOwner, ConfigurableCompone * @return IPO Portfolio */ public PortfolioModel getIpo() { - return ipo; + return ipo.getPortfolioModel(); } public PortfolioModel getScrapHeap() { - return scrapHeap; + return scrapHeap.getPortfolioModel(); } /* FIXME: Add broken check somewhere @@ -159,14 +160,14 @@ public class Bank extends AbstractItem implements CashOwner, ConfigurableCompone * @return Portfolio of stock in Bank Pool */ public PortfolioModel getPool() { - return pool; + return pool.getPortfolioModel(); } /** * @return Portfolio of unavailable shares */ public PortfolioModel getUnavailable() { - return unavailable; + return unavailable.getPortfolioModel(); } public String getId() { @@ -174,8 +175,8 @@ public class Bank extends AbstractItem implements CashOwner, ConfigurableCompone } // CashOwner interface - public CashMoneyModel getCash() { - return cash; + public int getCash() { + return cash.value(); } public static String format(int amount) { @@ -194,5 +195,10 @@ public class Bank extends AbstractItem implements CashOwner, ConfigurableCompone } return result.toString(); } + + public CashMoneyModel getCashModel() { + // TODO Auto-generated method stub + return null; + } } diff --git a/rails/game/BankPortfolio.java b/rails/game/BankPortfolio.java new file mode 100644 index 0000000..ce62f23 --- /dev/null +++ b/rails/game/BankPortfolio.java @@ -0,0 +1,38 @@ +package rails.game; + +import rails.game.model.PortfolioModel; +import rails.game.model.PortfolioOwner; +import rails.game.state.AbstractItem; +import rails.game.state.Item; + +/** + * BankPortfolios + */ + +public class BankPortfolio extends AbstractItem implements PortfolioOwner { + + private final PortfolioModel portfolio = PortfolioModel.create(); + + private BankPortfolio() {} + + public static BankPortfolio create() { + BankPortfolio bp = new BankPortfolio(); + return bp; + } + + /** + * parent is restricted to Bank + */ + @Override + public void init(Item parent, String id) { + super.checkedInit(parent, id, Bank.class); + portfolio.init(this, "portfolio"); + } + + // PortfolioOwner methods + public PortfolioModel getPortfolioModel() { + return portfolio; + } + + +} diff --git a/rails/game/BaseToken.java b/rails/game/BaseToken.java index ce55773..253bad1 100644 --- a/rails/game/BaseToken.java +++ b/rails/game/BaseToken.java @@ -14,19 +14,18 @@ import rails.game.state.Item; */ public final class BaseToken extends Token { - /** - * Creates a non-initialized BaseToken - */ - public BaseToken() {}; + private BaseToken() {}; + + public static BaseToken create(PublicCompany company) { + BaseToken token = new BaseToken(); + token.init(company); + return token; + } @Override - public BaseToken init(Item parent) { + public void init(Item parent) { super.checkedInit(parent, null, PublicCompany.class); - // add token to the free tokens, this also intializes the portfolio - getParent().getBaseTokensModel().addFreeToken(this); - - return this; } @Override diff --git a/rails/game/BonusToken.java b/rails/game/BonusToken.java index 3f33613..9c8f871 100644 --- a/rails/game/BonusToken.java +++ b/rails/game/BonusToken.java @@ -23,16 +23,17 @@ public final class BonusToken extends Token implements Closeable, ConfigurableCo private Object removingObject = null; private PublicCompany user = null; - /** - * Creates a non-initialized BonusToken - */ - public BonusToken() {}; + private BonusToken() {}; + + public static BonusToken create(PublicCompany company) { + BonusToken token = new BonusToken(); + token.init(company); + return token; + } - // FIXME: Who is the parent of BonusToken? @Override - public BonusToken init(Item parent) { - super.checkedInit(parent, null, Item.class); - return this; + public void init(Item parent) { + super.checkedInit(parent, null, PublicCompany.class); } public void configureFromXML(Tag tag) throws ConfigurationException { diff --git a/rails/game/Certificate.java b/rails/game/Certificate.java index 638fe51..b4cf016 100644 --- a/rails/game/Certificate.java +++ b/rails/game/Certificate.java @@ -1,5 +1,7 @@ package rails.game; +import rails.game.state.Item; + /** * The superinterface of PrivateCompany and PublicCertificate, which allows * objects implementating these interfaces to be combined in start packets and @@ -8,7 +10,7 @@ package rails.game; * TODO: Check if this is still needed (or replaced by Ownable) or could be extended by * combining methods from both public and private certificates */ -public interface Certificate{ +public interface Certificate extends Item { } diff --git a/rails/game/Company.java b/rails/game/Company.java index 2ec211b..f628f88 100644 --- a/rails/game/Company.java +++ b/rails/game/Company.java @@ -12,6 +12,7 @@ import rails.common.parser.Tag; import rails.game.special.SpecialProperty; import rails.game.state.BooleanState; import rails.game.state.AbstractItem; +import rails.game.state.Item; import rails.game.state.PortfolioList; import rails.util.Util; @@ -27,10 +28,9 @@ Cloneable, Comparable<Company> { /** The name of the XML attribute for the company's type. */ public static final String COMPANY_TYPE_TAG = "type"; - protected String name; protected String longName; protected String alias = null; // To allow reloading files with old names after name changes - protected CompanyTypeI type; + protected CompanyType type; protected int companyNumber; // For internal use protected String infoText = ""; @@ -56,15 +56,16 @@ Cloneable, Comparable<Company> { protected static Logger log = Logger.getLogger(Company.class.getPackage().getName()); - public Company() { - } - - public void init(String name, CompanyTypeI type) { - this.name = name; - this.type = type; + @Override + public void init(Item parent, String id) { + super.init(parent, id); closedObject.init(this, "closed"); specialProperties.init(this, "specialProperties"); } + + public void initType(CompanyType type) { + this.type = type; + } /** Only to be called from subclasses */ public void configureFromXML(Tag tag) throws ConfigurationException { @@ -140,7 +141,7 @@ Cloneable, Comparable<Company> { /** * @return Type of company (Public/Private) */ - public CompanyTypeI getType() { + public CompanyType getType() { return type; } @@ -148,14 +149,7 @@ Cloneable, Comparable<Company> { * @return String for type of company (Public/Private) */ public String getTypeName() { - return type.getName(); - } - - /** - * @return Name of company - */ - public String getId() { - return name; + return type.getId(); } public String getLongName() { @@ -234,7 +228,7 @@ Cloneable, Comparable<Company> { public boolean equals(Company company) { if (this.companyNumber == company.getCompanyNumber() - && this.name.equals(company.getId()) + && this.getId().equals(company.getId()) && this.type.equals(company.getType())) return true; return false; diff --git a/rails/game/CompanyManager.java b/rails/game/CompanyManager.java index 5a00ee5..257494c 100644 --- a/rails/game/CompanyManager.java +++ b/rails/game/CompanyManager.java @@ -1 +1 @@ -package rails.game; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import org.apache.log4j.Logger; import rails.common.LocalText; import rails.common.parser.ConfigurableComponentI; import rails.common.parser.ConfigurationException; import rails.common.parser.Tag; import rails.game.state.AbstractItem; public class CompanyManager extends AbstractItem implements CompanyManagerI, ConfigurableComponentI { /** A List with all private companies */ private List<PrivateCompany> lPrivateCompanies = new ArrayList<PrivateCompany>(); /** A List with all public companies */ private List<PublicCompany> lPublicCompanies = new ArrayList<PublicCompany>(); /** A map with all private companies by name */ private Map<String, PrivateCompany> mPrivateCompanies = new HashMap<String, PrivateCompany>(); /** A map with all public (i.e. non-private) companies by name */ private Map<String, PublicCompany> mPublicCompanies = new HashMap<String, PublicCompany>(); /** A map of all type names to maps of companies of that type by name */ // TODO Redundant, current usage can be replaced. private Map<String, Map<String, Company>> mCompaniesByTypeAndName = new HashMap<String, Map<String, Company>>(); /** A list of all company types */ private List<CompanyTypeI> lCompanyTypes = new ArrayList<CompanyTypeI>(); /** A list of all start packets (usually one) */ private List<StartPacket> startPackets = new ArrayList<StartPacket>(); /** A map of all start packets, keyed by name. Default name is "Initial" */ private Map<String, StartPacket> startPacketMap = new HashMap<String, StartPacket>(); /** A map to enable translating aliases to names */ protected Map<String, String> aliases = null; private int numberOfPublicCompanies = 0; protected static Logger log = Logger.getLogger(CompanyManager.class.getPackage().getName()); protec |
From: Stefan F. <ste...@us...> - 2012-05-20 14:18:56
|
LocalisedText.properties | 3 data/18TN/Game.xml | 1 rails/game/Phase.java | 8 rails/game/StockRound.java | 2 test/data/bugs/1830CF_obsoleteTrains.rails |binary test/data/bugs/1830CF_obsoleteTrains.report | 432 +++ test/data/real/18TN_A.report | 1844 ++++++++---- test/data/test/1835_PRHasTwoExcessTrains.report | 3429 ++++++++++++++++-------- test/data/test/1835_PR_3rdTrain.report | 3315 +++++++++++++++-------- test/data/test/1835_SellDoubleShare.rails |binary test/data/test/1835_SellDoubleShare.report | 1639 +++++++++++ 11 files changed, 7807 insertions(+), 2866 deletions(-) New commits: commit 4d251b915ae52789630d43f79c3747e47da59f59 Author: Stefan Frey <ste...@we...> Date: Sun May 20 16:18:15 2012 +0200 added tests for obsolete trains in 1830 coalfields diff --git a/test/data/bugs/1830CF_obsoleteTrains.rails b/test/data/bugs/1830CF_obsoleteTrains.rails new file mode 100644 index 0000000..80446ea Binary files /dev/null and b/test/data/bugs/1830CF_obsoleteTrains.rails differ diff --git a/test/data/bugs/1830CF_obsoleteTrains.report b/test/data/bugs/1830CF_obsoleteTrains.report new file mode 100644 index 0000000..b54ba1c --- /dev/null +++ b/test/data/bugs/1830CF_obsoleteTrains.report @@ -0,0 +1,432 @@ +GameIs,1830 +PlayerIs,1,Chris +PlayerIs,2,Derek +PlayerIs,3,Arne +PlayerIs,4,Scott +PlayerIs,5,John +PlayerIs,6,Bill +PlayerCash,400 +BankHas,17600 +StartOfPhase,2 +BankSizeIs,17600 +StartOfInitialRound +HasPriority,Chris +BID_ITEM_LOG,Chris,165,C&A,235 +BID_ITEM_LOG,Derek,115,M&H,285 +BuysItemFor,Arne,SVNRR,20 +BuysItemFor,Scott,C&StL,40 +BuysItemFor,John,D&H,70 +BuysItemFor,Derek,M&H,115 +BuysItemFor,Chris,C&A,165 +ALSO_GETS,Chris,CERT_NAME,PRR,10 +BuysItemFor,Bill,B&O,220 +ALSO_GETS,Bill,PRES_CERT_NAME,B&O,20 +Has,Chris,235 +Has,Derek,285 +Has,Arne,380 +Has,Scott,360 +Has,John,330 +Has,Bill,180 +StartStockRound,1 +HasPriority,Chris +PASSES,Chris +BUY_SHARE_LOG,Derek,10,B&O,IPO,100 +START_COMPANY_LOG,Arne,C&O,67,134,2,20,BANK +START_COMPANY_LOG,Scott,B&M,71,142,2,20,BANK +START_COMPANY_LOG,John,N&W,71,142,2,20,BANK +BUY_SHARE_LOG,Bill,10,B&M,IPO,71 +BUY_SHARE_LOG,Chris,10,C&O,IPO,67 +BUY_SHARE_LOG,Derek,10,C&O,IPO,67 +BUY_SHARE_LOG,Arne,10,C&O,IPO,67 +BUY_SHARE_LOG,Scott,10,B&M,IPO,71 +BUY_SHARE_LOG,John,10,N&W,IPO,71 +BUY_SHARE_LOG,Bill,10,B&M,IPO,71 +BUY_SHARE_LOG,Chris,10,C&O,IPO,67 +FloatsWithCash,C&O,670 +BUY_SHARE_LOG,Derek,10,C&O,IPO,67 +BUY_SHARE_LOG,Arne,10,C&O,IPO,67 +BUY_SHARE_LOG,Scott,10,B&M,IPO,71 +FloatsWithCash,B&M,710 +BUY_SHARE_LOG,John,10,N&W,IPO,71 +Autopasses,Bill +BUY_SHARE_LOG,Chris,10,C&O,IPO,67 +Autopasses,Derek +BUY_SHARE_LOG,Arne,10,C&O,IPO,67 +BUY_SHARE_LOG,Scott,10,B&M,IPO,71 +Autopasses,John +Autopasses,Bill +Autopasses,Chris +Autopasses,Derek +Autopasses,Arne +Autopasses,Scott + +END_SR,1 +PRICE_MOVES_LOG,C&O,67,G6,71,G5 +SoldOut,C&O,67,G6,71,G5 +Has,B&M,710 +Has,C&O,670 +Has,Chris,34 +Has,Derek,51 +Has,Arne,45 +Has,Scott,5 +Has,John,46 +Has,Bill,38 +START_OR,1.1 +ReceivesFor,Arne,5,SVNRR +ReceivesFor,Scott,10,C&StL +ReceivesFor,John,15,D&H +ReceivesFor,Derek,20,M&H +ReceivesFor,Chris,25,C&A +ReceivesFor,Bill,30,B&O + +CompanyOperates,B&M,Scott +LaysTileAt,B&M,8,C23,NE +CompanyDoesNotPayDividend,B&M +PRICE_MOVES_LOG,B&M,71,G5,67,F5 +BuysTrain,B&M,2,IPO,80 +FirstTrainBought,2 +BuysTrain,B&M,2,IPO,80 + +CompanyOperates,C&O,Arne +LaysTileAt,C&O,57,K13,SW +CompanyDoesNotPayDividend,C&O +PRICE_MOVES_LOG,C&O,71,G5,67,F5 +BuysTrain,C&O,2,IPO,80 + +EndOfOperatingRound,1.1 +ORWorthIncrease,Chris,1.1,13 +ORWorthIncrease,Derek,1.1,12 +ORWorthIncrease,Arne,1.1,-15 +ORWorthIncrease,Scott,1.1,-10 +ORWorthIncrease,John,1.1,15 +ORWorthIncrease,Bill,1.1,22 +Has,B&M,550 +Has,C&O,590 +Has,Chris,59 +Has,Derek,71 +Has,Arne,50 +Has,Scott,15 +Has,John,61 +Has,Bill,68 +StartStockRound,2 +HasPriority,John +Autopasses,John +PASSES,Bill +PASSES,Chris +BUY_SHARE_LOG,Derek,10,B&M,IPO,71 +Autopasses,Arne +PASSES,Scott +Autopasses,John +PASSES,Bill +Autopasses,Chris +SELL_SHARE_LOG,Derek,10,B&O,100 +PRICE_MOVES_LOG,B&O,100,G1,90,G2 +BUY_SHARE_LOG,Derek,10,B&M,IPO,71 +Autopasses,Arne +Autopasses,Scott +Autopasses,John +PASSES,Bill +Autopasses,Chris +Autopasses,Derek + +END_SR,2 +PRICE_MOVES_LOG,C&O,67,F5,71,F4 +SoldOut,C&O,67,F5,71,F4 +Has,B&M,550 +Has,C&O,590 +Has,Chris,59 +Has,Derek,29 +Has,Arne,50 +Has,Scott,15 +Has,John,61 +Has,Bill,68 +START_OR,2.1 +ReceivesFor,Arne,5,SVNRR +ReceivesFor,Scott,10,C&StL +ReceivesFor,John,15,D&H +ReceivesFor,Derek,20,M&H +ReceivesFor,Chris,25,C&A +ReceivesFor,Bill,30,B&O + +CompanyOperates,C&O,Arne +LaysTileAt,C&O,8,L12,W +BuysRight,C&O,Coalfields,140 +CompanyRevenue,C&O,60 +CompanyPaysOutFull,C&O,60 +Payout,Chris,18,3,10 +Payout,Derek,12,2,10 +Payout,Arne,30,5,10 +PRICE_MOVES_LOG,C&O,71,F4,76,G4 +BuysTrain,C&O,2,IPO,80 + +CompanyOperates,B&M,Scott +LaysTileAtFor,B&M,57,F22,W,80 +CompanyRevenue,B&M,90 +CompanyPaysOutFull,B&M,90 +Payout,Bill,18,2,10 +Payout,Derek,18,2,10 +Payout,Scott,45,5,10 +PRICE_MOVES_LOG,B&M,67,F5,71,G5 +BuysTrain,B&M,2,IPO,80 + +EndOfOperatingRound,2.1 +ORWorthIncrease,Chris,2.1,58 +ORWorthIncrease,Derek,2.1,68 +ORWorthIncrease,Arne,2.1,60 +ORWorthIncrease,Scott,2.1,75 +ORWorthIncrease,John,2.1,15 +ORWorthIncrease,Bill,2.1,56 +Has,B&M,390 +Has,C&O,370 +Has,Chris,102 +Has,Derek,79 +Has,Arne,85 +Has,Scott,70 +Has,John,76 +Has,Bill,116 +StartStockRound,3 +HasPriority,Arne +BUY_SHARE_LOG,Arne,10,B&M,IPO,71 +Autopasses,Scott +BUY_SHARE_LOG,John,10,N&W,IPO,71 +BUY_SHARE_LOG,Bill,10,N&W,IPO,71 +FloatsWithCash,N&W,710 +Autopasses,Chris +BUY_SHARE_LOG,Derek,10,N&W,IPO,71 +Autopasses,Arne +Autopasses,Scott +Autopasses,John +Autopasses,Bill +Autopasses,Chris +PASSES,Derek + +END_SR,3 +PRICE_MOVES_LOG,C&O,76,G4,82,G3 +SoldOut,C&O,76,G4,82,G3 +PRICE_MOVES_LOG,B&M,71,G5,76,G4 +SoldOut,B&M,71,G5,76,G4 +Has,B&M,390 +Has,C&O,370 +Has,N&W,710 +Has,Chris,102 +Has,Derek,8 +Has,Arne,14 +Has,Scott,70 +Has,John,5 +Has,Bill,45 +START_OR,3.1 +ReceivesFor,Arne,5,SVNRR +ReceivesFor,Scott,10,C&StL +ReceivesFor,John,15,D&H +ReceivesFor,Derek,20,M&H +ReceivesFor,Chris,25,C&A +ReceivesFor,Bill,30,B&O + +CompanyOperates,C&O,Arne +LaysTileAtFor,C&O,57,J14,SW,80 +CompanyRevenue,C&O,100 +CompanyPaysOutFull,C&O,100 +Payout,Chris,30,3,10 +Payout,Arne,50,5,10 +Payout,Derek,20,2,10 +PRICE_MOVES_LOG,C&O,82,G3,90,H3 + +CompanyOperates,B&M,Scott +LaysTileAt,B&M,57,F20,W +LAYS_TOKEN_ON,B&M,F20,40 +CompanyRevenue,B&M,130 +CompanyPaysOutFull,B&M,130 +Payout,Bill,26,2,10 +Payout,Arne,13,1,10 +Payout,Derek,26,2,10 +Payout,Scott,65,5,10 +PRICE_MOVES_LOG,B&M,76,G4,82,H4 + +CompanyOperates,N&W,John +LaysTileAt,N&W,8,L14,E +CompanyDoesNotPayDividend,N&W +PRICE_MOVES_LOG,N&W,71,G5,67,F5 +BuysTrain,N&W,2,IPO,80 +All 2-trains are sold out, 3-trains now available + +EndOfOperatingRound,3.1 +ORWorthIncrease,Chris,3.1,79 +ORWorthIncrease,Derek,3.1,90 +ORWorthIncrease,Arne,3.1,114 +ORWorthIncrease,Scott,3.1,105 +ORWorthIncrease,John,3.1,-5 +ORWorthIncrease,Bill,3.1,64 +Has,B&M,350 +Has,C&O,290 +Has,N&W,630 +Has,Chris,157 +Has,Derek,74 +Has,Arne,82 +Has,Scott,145 +Has,John,20 +Has,Bill,101 +StartStockRound,4 +HasPriority,Arne +PASSES,Arne +BUY_SHARE_LOG,Scott,10,N&W,IPO,71 +Autopasses,John +SELL_SHARES_LOG,Bill,2,10,20,B&M,164 +PRICE_MOVES_LOG,B&M,82,H4,71,H6 +SELL_SHARE_LOG,Bill,10,N&W,67 +PRICE_MOVES_LOG,N&W,67,F5,65,F6 +BUY_SHARE_LOG,Bill,10,B&O,IPO,100 +SELL_SHARES_LOG,Chris,3,10,30,C&O,270 +PRICE_MOVES_LOG,C&O,90,H3,71,H6 +START_COMPANY_LOG,Chris,PRR,82,164,2,20,BANK +BUY_SHARE_LOG,Derek,10,B&M,Pool,71 +BUY_SHARE_LOG,Arne,10,B&M,Pool,71 +BUY_SHARE_LOG,Scott,10,C&O,Pool,71 +Autopasses,John +BUY_SHARE_LOG,Bill,10,B&O,IPO,100 +BUY_SHARE_LOG,Chris,10,PRR,IPO,82 +Autopasses,Derek +Autopasses,Arne +Autopasses,Scott +Autopasses,John +BUY_SHARE_LOG,Bill,10,B&O,IPO,100 +FloatsWithCash,B&O,1000 +BUY_SHARE_LOG,Chris,10,PRR,IPO,82 +Autopasses,Derek +Autopasses,Arne +Autopasses,Scott +Autopasses,John +Autopasses,Bill +BUY_SHARE_LOG,Chris,10,PRR,IPO,82 +FloatsWithCash,PRR,820 +Autopasses,Derek +Autopasses,Arne +Autopasses,Scott +Autopasses,John +Autopasses,Bill +PASSES,Chris + +END_SR,4 +PRICE_MOVES_LOG,B&M,71,H6,76,H5 +SoldOut,B&M,71,H6,76,H5 +Has,B&M,350 +Has,B&O,1000 +Has,C&O,290 +Has,N&W,630 +Has,PRR,820 +Has,Chris,17 +Has,Derek,3 +Has,Arne,11 +Has,Scott,3 +Has,John,20 +Has,Bill,32 +START_OR,4.1 +ReceivesFor,Arne,5,SVNRR +ReceivesFor,Scott,10,C&StL +ReceivesFor,John,15,D&H +ReceivesFor,Derek,20,M&H +ReceivesFor,Chris,25,C&A +ReceivesFor,Bill,30,B&O + +CompanyOperates,B&O,Bill +LaysTileAtFor,B&O,9,I17,W,80 +CompanyDoesNotPayDividend,B&O +PRICE_MOVES_LOG,B&O,90,G2,82,F2 +BuysTrain,B&O,3,IPO,180 +PrivateCloses,B&O +FirstTrainBought,3 +StartOfPhase,3 +BuysTrain,B&O,3,IPO,180 + +CompanyOperates,PRR,Chris +LaysTileAt,PRR,53,I15,SW +LAYS_TOKEN_ON,PRR,I15,40 +CompanyDoesNotPayDividend,PRR +PRICE_MOVES_LOG,PRR,82,G3,76,F3 +BuysTrain,PRR,3,IPO,180 +BuysTrain,PRR,3,IPO,180 +BuysPrivateFromFor,PRR,C&A,Chris,320 + +CompanyOperates,B&M,Scott +LaysTileAt,B&M,14,F20,SW +CompanyRevenue,B&M,170 +CompanyPaysOutFull,B&M,170 +Payout,Scott,85,5,10 +Payout,Derek,51,3,10 +Payout,Arne,34,2,10 +PRICE_MOVES_LOG,B&M,76,H5,82,I5 +BuysTrain,B&M,3,IPO,180 +All 3-trains are sold out, 4-trains now available +BuysPrivateFromFor,B&M,C&StL,Scott,80 + +CompanyOperates,C&O,Arne +LaysTileAt,C&O,15,J14,SW +LAYS_TOKEN_ON,C&O,J14,40 +CompanyRevenue,C&O,140 +CompanyPaysOutFull,C&O,140 +Payout,Scott,14,1,10 +Payout,Derek,28,2,10 +Payout,Arne,70,5,10 +Payout,C&O,28,2,10 +PRICE_MOVES_LOG,C&O,71,H6,75,I6 +BuysPrivateFromFor,C&O,SVNRR,Arne,40 + +CompanyOperates,N&W,John +LaysTileAtFor,N&W,8,K15,SE,40 +CompanyRevenue,N&W,60 +CompanyPaysOutFull,N&W,60 +Payout,Scott,6,1,10 +Payout,Derek,6,1,10 +Payout,John,30,5,10 +Payout,N&W,6,1,10 +PRICE_MOVES_LOG,N&W,65,F6,67,G6 +BuysTrain,N&W,4,IPO,300 +FirstTrainBought,4 +StartOfPhase,4 +TrainsObsolete.ALL,2 +CompanyDiscardsTrain,B&M,2 +BuysPrivateFromFor,N&W,D&H,John,140 + +EndOfOperatingRound,4.1 +ORWorthIncrease,Chris,4.1,149 +ORWorthIncrease,Derek,4.1,133 +ORWorthIncrease,Arne,4.1,161 +ORWorthIncrease,Scott,4.1,191 +ORWorthIncrease,John,4.1,125 +ORWorthIncrease,Bill,4.1,-230 +Has,B&M,90 +Has,B&O,560 +Has,C&O,238 +Has,N&W,156 +Has,PRR,100 +Has,Chris,362 +Has,Derek,108 +Has,Arne,160 +Has,Scott,198 +Has,John,205 +Has,Bill,62 +StartStockRound,5 +HasPriority,Derek +SELL_SHARES_LOG,Derek,3,10,30,B&M,246 +PRICE_MOVES_LOG,B&M,82,I5,70,I7 +SELL_SHARES_LOG,Derek,2,10,20,C&O,150 +PRICE_MOVES_LOG,C&O,75,I6,70,I7 +START_COMPANY_LOG,Derek,NYC,100,200,2,20,BANK +SwapsPrivateForCertificate,Derek,M&H,10,NYC +PrivateCloses,M&H +BUY_SHARE_LOG,Arne,10,B&O,Pool,82 +START_COMPANY_LOG,Scott,NYNH,67,134,2,20,BANK +BUY_SHARE_LOG,John,10,B&M,Pool,70 +Autopasses,Bill +BUY_SHARE_LOG,Chris,10,N&W,Pool,67 +BUY_SHARE_LOG,Derek,10,NYC,IPO,100 +BUY_SHARE_LOG,Arne,10,NYNH,IPO,67 +SELL_SHARE_LOG,Scott,10,N&W,67 +PRICE_MOVES_LOG,N&W,67,G6,67,G7 +SELL_SHARE_LOG,Scott,10,C&O,70 +BUY_SHARE_LOG,Scott,10,NYNH,IPO,67 +BUY_SHARE_LOG,John,10,N&W,IPO,71 +Autopasses,Bill +BUY_SHARE_LOG,Chris,10,N&W,Pool,67 +BUY_SHARE_LOG,Derek,10,NYC,IPO,100 +PASSES,Arne +BUY_SHARE_LOG,Scott,10,NYNH,IPO,67 commit df8f20f17dffa6bc820120dbb035f609bd2bca45 Author: Erik Vos <eri...@xs...> Date: Sun May 20 14:45:17 2012 +0200 Phase extra info is now also reported. Applied to 18TN Civil War start. 18TN and 1835 test cases replaced.(cherry picked from commit 4616fb5a819464edd4715d2b94b4b95685c5decb) Conflicts: test/data/real/18TN_A.report test/data/test/1835_PRHasTwoExcessTrains.report test/data/test/1835_PR_3rdTrain.report diff --git a/LocalisedText.properties b/LocalisedText.properties index b1fad5b..e97a8cb 100644 --- a/LocalisedText.properties +++ b/LocalisedText.properties @@ -131,6 +131,7 @@ CantStart={0} cannot start company {1} for {2}: {3} CertificateLimit=The certificate limit is now {0} ({1} players, {2} companies) CityHasNoEmptySlots=City has not empty slots CivilWarActive=Civil War is active. +CivilWarBegins=Civil War begins. One train per company is unusable for one round. ClassCannotBeInstantiated=Class {0} cannot be instantiated ClickForSell=Click to select for selling ClickToSelectForBuying=Click to select for buying @@ -546,7 +547,7 @@ PRICE_STAYS_LOG={0} price stays at {1}({2}). PRIVATES=Privates PaysLoanInterest={0} pays {1} interest for outstanding loans Pass=Pass -PhaseClosesAllPrivates=Close all privates +PhaseClosesAllPrivates=All privates close PhaseNumberOfORs=Number of ORs: {0} PhaseOffBoardStep=Off-board revenue step: {0} PhaseTrainLimitStep=Train limit step: {0} diff --git a/data/18TN/Game.xml b/data/18TN/Game.xml index a5957bf..cb99a1c 100644 --- a/data/18TN/Game.xml +++ b/data/18TN/Game.xml @@ -105,6 +105,7 @@ </Phase> <Phase name="3½"> <Action name="CivilWar"/><!-- No value needed --> + <Info key="CivilWarBegins"/> </Phase> <Phase name="4"> <Trains rusted="2" limitStep="2" onePerTurn="no"/> diff --git a/rails/game/Phase.java b/rails/game/Phase.java index add140e..8f700dc 100644 --- a/rails/game/Phase.java +++ b/rails/game/Phase.java @@ -292,6 +292,12 @@ public class Phase implements PhaseI { /** Called when a phase gets activated */ public void activate() { log.debug("Phase " + name + " activated"); + + // Report any extra info + if (Util.hasValue(extraInfo)) { + ReportBuffer.add(extraInfo.replaceFirst("^<[Bb][Rr]>", "").replaceAll("<[Bb][Rr]>", "\n")); + } + if (closedObjects != null && !closedObjects.isEmpty()) { for (Closeable object : closedObjects) { log.debug("Closing object " + object.toString()); @@ -318,7 +324,7 @@ public class Phase implements PhaseI { gameManager.processPhaseAction (actionName, actions.get(actionName)); } } - + } public void setLastTrainBuyer(Portfolio lastTrainBuyer) { diff --git a/test/data/real/18TN_A.report b/test/data/real/18TN_A.report index 607574b..90a677d 100644 --- a/test/data/real/18TN_A.report +++ b/test/data/real/18TN_A.report @@ -1,615 +1,1229 @@ -GameIs,18TN -PlayerIs,1,Bob -PlayerIs,2,Chester -PlayerIs,3,Joshua -PlayerIs,4,Rob -PlayerCash,450 -BankHas,6200 -StartOfPhase,2 -BankSizeIs,6200 -StartOfInitialRound -HasPriority,Bob -BID_ITEM_LOG,Bob,75,M&C,375 -BID_ITEM_LOG,Chester,180,L&N,270 -BID_ITEM_LOG,Joshua,105,O&W,345 -BID_ITEM_LOG,Rob,185,L&N,265 -BuysItemFor,Bob,TCC,20 -BuysItemFor,Chester,ET&WNC,40 -BuysItemFor,Bob,M&C,75 -BuysItemFor,Joshua,O&W,105 -TO_AUCTION,L&N -BID_ITEM_LOG,Chester,190,L&N,220 -BID_ITEM_LOG,Rob,195,L&N,255 -PASSES,Chester -BuysItemFor,Rob,PRES_CERT_NAME,L&N,20,195 -FloatsWithCash,L&N,800 -Has,L&N,800 -Has,Bob,355 -Has,Chester,410 -Has,Joshua,345 -Has,Rob,255 -StartStockRound,1 -HasPriority,Joshua -PASSES,Joshua -BUY_SHARE_LOG,Rob,10,L&N,IPO,80 -BUY_SHARE_LOG,Bob,10,L&N,IPO,80 -START_COMPANY_LOG,Chester,SOU,65,130,2,20,BANK -BUY_SHARE_LOG,Joshua,10,L&N,IPO,80 -BUY_SHARE_LOG,Rob,10,L&N,IPO,80 -PASSES,Bob -BUY_SHARE_LOG,Chester,10,SOU,IPO,65 -BUY_SHARE_LOG,Joshua,10,L&N,IPO,80 -BUY_SHARE_LOG,Rob,10,L&N,IPO,80 -PASSES,Bob -BUY_SHARE_LOG,Chester,10,SOU,IPO,65 -BUY_SHARE_LOG,Joshua,10,L&N,IPO,80 -Autopasses,Rob -BUY_SHARE_LOG,Bob,10,L&N,IPO,80 -BUY_SHARE_LOG,Chester,10,SOU,IPO,65 -PASSES,Joshua -Autopasses,Rob -PASSES,Bob -BUY_SHARE_LOG,Chester,10,SOU,IPO,65 -FloatsWithCash,SOU,650 -Autopasses,Joshua -Autopasses,Rob -BUY_SHARE_LOG,Bob,10,SOU,IPO,65 -PASSES,Chester -Autopasses,Joshua -Autopasses,Rob -BUY_SHARE_LOG,Bob,10,SOU,IPO,65 -PASSES,Chester -Autopasses,Joshua -Autopasses,Rob -BUY_SHARE_LOG,Bob,10,SOU,IPO,65 -PASSES,Chester -Autopasses,Joshua -Autopasses,Rob -PASSES,Bob - -END_SR,1 -PRICE_MOVES_LOG,L&N,80,E3,90,E2 -SoldOut,L&N,80,E3,90,E2 -Has,L&N,800 -Has,SOU,650 -Has,Bob,0 -Has,Chester,20 -Has,Joshua,105 -Has,Rob,15 -START_OR,1.1 -ReceivesFor,Bob,5,TCC -ReceivesFor,Chester,10,ET&WNC -ReceivesFor,Bob,15,M&C -ReceivesFor,Joshua,20,O&W - -CompanyOperates,L&N,Rob -LaysTileAtFor,L&N,9,B15,W,60 -LaysTileAt,L&N,5,B17,NE -LAYS_TOKEN_ON,L&N,B17,40 -CompanyDoesNotPayDividend,L&N -PRICE_MOVES_LOG,L&N,90,E2,80,D2 -BuysTrain,L&N,2,IPO,80 -FirstTrainBought,2 - -CompanyOperates,SOU,Chester -BuysPrivateFromFor,SOU,ET&WNC,Chester,40 -LaysTileAt,SOU,8,F19,W -LaysTileAt,SOU,8,E20,E -LaysTileAtFor,SOU,57,F17,W,40 -CompanyDoesNotPayDividend,SOU -PRICE_MOVES_LOG,SOU,65,D4,55,C4 -BuysTrain,SOU,2,IPO,80 - -EndOfOperatingRound,1.1 -ORWorthIncrease,Bob,1.1,-30 -ORWorthIncrease,Chester,1.1,-50 -ORWorthIncrease,Joshua,1.1,-10 -ORWorthIncrease,Rob,1.1,-50 -Has,L&N,620 -Has,SOU,490 -Has,Bob,20 -Has,Chester,70 -Has,Joshua,125 -Has,Rob,15 -StartStockRound,2 -HasPriority,Chester -PASSES,Chester -BUY_SHARE_LOG,Joshua,10,SOU,IPO,65 -Autopasses,Rob -PASSES,Bob -PASSES,Chester -Autopasses,Joshua - -END_SR,2 -PRICE_MOVES_LOG,L&N,80,D2,90,D1 -SoldOut,L&N,80,D2,90,D1 -PRICE_MOVES_LOG,SOU,55,C4,60,C3 -SoldOut,SOU,55,C4,60,C3 -Has,L&N,620 -Has,SOU,490 -Has,Bob,20 -Has,Chester,70 -Has,Joshua,60 -Has,Rob,15 -START_OR,2.1 -ReceivesFor,Bob,5,TCC -ReceivesFor,SOU,10,ET&WNC -ReceivesFor,Bob,15,M&C -ReceivesFor,Joshua,20,O&W - -CompanyOperates,L&N,Rob -LaysTileAt,L&N,58,E10,NE -LaysTileAtFor,L&N,57,F11,NW,40 -CompanyRevenue,L&N,70 -CompanyPaysOutFull,L&N,70 -Payout,Joshua,21,3,10 -Payout,Bob,14,2,10 -Payout,Rob,35,5,10 -PRICE_MOVES_LOG,L&N,90,D1,100,E1 -BuysTrain,L&N,2,IPO,80 - -CompanyOperates,SOU,Chester -LaysTileAtFor,SOU,9,F15,E,60 -LaysTileAt,SOU,58,F13,E -CompanyRevenue,SOU,80 -CompanyPaysOutFull,SOU,80 -Payout,Joshua,8,1,10 -Payout,Bob,24,3,10 -Payout,Chester,48,6,10 -PRICE_MOVES_LOG,SOU,60,C3,70,D3 -BuysTrain,SOU,2,IPO,80 - -EndOfOperatingRound,2.1 -ORWorthIncrease,Bob,2.1,108 -ORWorthIncrease,Chester,2.1,108 -ORWorthIncrease,Joshua,2.1,89 -ORWorthIncrease,Rob,2.1,85 -Has,L&N,500 -Has,SOU,360 -Has,Bob,78 -Has,Chester,118 -Has,Joshua,109 -Has,Rob,50 -StartStockRound,3 -HasPriority,Rob -PASSES,Rob -SELL_SHARES_LOG,Bob,2,10,20,L&N,200 -PRICE_MOVES_LOG,L&N,100,E1,80,E3 -SELL_SHARES_LOG,Bob,3,10,30,SOU,210 -PRICE_MOVES_LOG,SOU,70,D3,55,D6 -START_COMPANY_LOG,Bob,TC,80,160,2,20,BANK -BUY_SHARE_LOG,Chester,10,L&N,Pool,80 -BUY_SHARE_LOG,Joshua,10,L&N,Pool,80 -Autopasses,Rob -BUY_SHARE_LOG,Bob,10,TC,IPO,80 -PASSES,Chester -Autopasses,Joshua -Autopasses,Rob -BUY_SHARE_LOG,Bob,10,TC,IPO,80 -PASSES,Chester -Autopasses,Joshua -Autopasses,Rob -BUY_SHARE_LOG,Bob,10,TC,IPO,80 -PASSES,Chester -Autopasses,Joshua -Autopasses,Rob -BUY_SHARE_LOG,Bob,10,TC,IPO,80 -FloatsWithCash,TC,800 -PASSES,Chester -Autopasses,Joshua -Autopasses,Rob -PASSES,Bob - -END_SR,3 -PRICE_MOVES_LOG,L&N,80,E3,90,E2 -SoldOut,L&N,80,E3,90,E2 -Has,L&N,500 -Has,SOU,360 -Has,TC,800 -Has,Bob,8 -Has,Chester,38 -Has,Joshua,29 -Has,Rob,50 -START_OR,3.1 -ReceivesFor,Bob,5,TCC -ReceivesFor,SOU,10,ET&WNC -ReceivesFor,Bob,15,M&C -ReceivesFor,Joshua,20,O&W - -CompanyOperates,L&N,Rob -LaysTileAt,L&N,5,G12,E -LAYS_TOKEN_ON,L&N,G12,100 -CompanyRevenue,L&N,120 -CompanyPaysOutFull,L&N,120 -Payout,Joshua,48,4,10 -Payout,Rob,60,5,10 -Payout,Chester,12,1,10 -PRICE_MOVES_LOG,L&N,90,E2,100,F2 - -CompanyOperates,TC,Bob -CompanyDoesNotPayDividend,TC -PRICE_MOVES_LOG,TC,80,E3,70,D3 -BuysTrain,TC,2,IPO,80 -All 2-trains are sold out, 3-trains now available - -CompanyOperates,SOU,Chester -CompanyRevenue,SOU,110 -CompanyPaysOutFull,SOU,110 -Payout,Joshua,11,1,10 -Payout,Chester,66,6,10 -Payout,SOU,33,3,10 -PRICE_MOVES_LOG,SOU,55,D6,65,E6 -BuysTrain,SOU,3,IPO,180 -FirstTrainBought,3 -StartOfPhase,3 - -EndOfOperatingRound,3.1 -ORWorthIncrease,Bob,3.1,-40 -ORWorthIncrease,Chester,3.1,148 -ORWorthIncrease,Joshua,3.1,129 -ORWorthIncrease,Rob,3.1,110 -Has,L&N,400 -Has,SOU,223 -Has,TC,720 -Has,Bob,28 -Has,Chester,116 -Has,Joshua,108 -Has,Rob,110 -StartStockRound,4 -HasPriority,Chester -BUY_SHARE_LOG,Chester,10,TC,IPO,80 -SELL_SHARES_LOG,Joshua,4,10,40,L&N,400 -PRICE_MOVES_LOG,L&N,100,F2,75,F5 -SELL_SHARE_LOG,Joshua,10,SOU,65 -PRICE_MOVES_LOG,SOU,65,E6,60,E7 -START_COMPANY_LOG,Joshua,GMO,90,180,2,20,BANK -BUY_SHARE_LOG,Rob,10,L&N,Pool,75 -Autopasses,Bob -Autopasses,Chester -BUY_SHARE_LOG,Joshua,10,GMO,IPO,90 -Autopasses,Rob -Autopasses,Bob -Autopasses,Chester -BUY_SHARE_LOG,Joshua,10,GMO,IPO,90 -Autopasses,Rob -Autopasses,Bob -Autopasses,Chester -BUY_SHARE_LOG,Joshua,10,GMO,IPO,90 -Autopasses,Rob -Autopasses,Bob -Autopasses,Chester -BUY_SHARE_LOG,Joshua,10,GMO,IPO,90 -FloatsWithCash,GMO,900 -Autopasses,Rob -Autopasses,Bob -Autopasses,Chester -PASSES,Joshua - -END_SR,4 -Has,GMO,900 -Has,L&N,400 -Has,SOU,223 -Has,TC,720 -Has,Bob,28 -Has,Chester,36 -Has,Joshua,33 -Has,Rob,35 -START_OR,4.1 -ReceivesFor,Bob,5,TCC -ReceivesFor,SOU,10,ET&WNC -ReceivesFor,Bob,15,M&C -ReceivesFor,Joshua,20,O&W - -CompanyOperates,GMO,Joshua -LaysTileAt,GMO,6,H7,NE -LaysTileAt,GMO,8,F7,SW -CompanyDoesNotPayDividend,GMO -PRICE_MOVES_LOG,GMO,90,E2,80,D2 -BuysTrain,GMO,3,IPO,180 - -CompanyOperates,L&N,Rob -LaysTileAt,L&N,15,B17,SE -CompanyRevenue,L&N,140 -CompanyPaysOutFull,L&N,140 -Payout,Chester,14,1,10 -Payout,Rob,84,6,10 -Payout,L&N,42,3,10 -PRICE_MOVES_LOG,L&N,75,F5,80,G5 -BuysTrain,L&N,3,IPO,180 - -CompanyOperates,TC,Bob -LaysTileAtFor,TC,8,C18,SW,60 -LaysTileAt,TC,8,D17,NE -LAYS_TOKEN_ON,TC,B17,40 -CompanyRevenue,TC,80 -CompanyPaysOutFull,TC,80 -Payout,Chester,8,1,10 -Payout,Bob,48,6,10 -PRICE_MOVES_LOG,TC,70,D3,80,E3 -BuysTrain,TC,3,IPO,180 -StartOfPhase,3½ - -CompanyOperates,SOU,Chester -LaysTileAt,SOU,619,G12,SW -CompanyRevenue,SOU,140 -CompanyPaysOutFull,SOU,140 -Payout,Chester,84,6,10 -Payout,SOU,56,4,10 -PRICE_MOVES_LOG,SOU,60,E7,65,E6 - -EndOfOperatingRound,4.1 -ORWorthIncrease,Bob,4.1,128 -ORWorthIncrease,Chester,4.1,151 -ORWorthIncrease,Joshua,4.1,-40 -ORWorthIncrease,Rob,4.1,114 -Has,GMO,720 -Has,L&N,262 -Has,SOU,289 -Has,TC,440 -Has,Bob,96 -Has,Chester,142 -Has,Joshua,53 -Has,Rob,119 -START_OR,4.2 -ReceivesFor,Bob,5,TCC -ReceivesFor,SOU,10,ET&WNC -ReceivesFor,Bob,15,M&C -ReceivesFor,Joshua,20,O&W - -CompanyOperates,L&N,Rob -LaysTileAt,L&N,15,F17,E -LAYS_TOKEN_ON,L&N,F17,100 -CompanyRevenue,L&N,200 -CompanyPaysOutFull,L&N,200 -Payout,Chester,20,1,10 -Payout,Rob,120,6,10 -Payout,L&N,60,3,10 -PRICE_MOVES_LOG,L&N,80,G5,85,G4 - -CompanyOperates,TC,Bob -BuysPrivateFromFor,TC,TCC,Bob,40 -BuysPrivateFromFor,TC,M&C,Bob,120 -LaysTileAt,TC,8,H5,NW -LaysTileAt,TC,599,F11,NE -CompanyRevenue,TC,110 -CompanyPaysOutFull,TC,110 -Payout,Bob,66,6,10 -Payout,Chester,11,1,10 -PRICE_MOVES_LOG,TC,80,E3,90,F3 - -CompanyOperates,GMO,Joshua -LaysTileAt,GMO,9,I6,SW -LaysTileAt,GMO,8,E6,NE -BuysPrivateFromFor,GMO,O&W,Joshua,200 -CompanyRevenue,GMO,0 -CompanyDoesNotPayDividend,GMO -BuysTrain,GMO,3,IPO,180 -All 3-trains are sold out, 4-trains now available - -CompanyOperates,SOU,Chester -LaysTileAt,SOU,9,E12,SW -LaysTileAt,SOU,8,D13,SW -LAYS_TOKEN_ON,SOU,F11,40 -CompanyRevenue,SOU,230 -CompanyPaysOutFull,SOU,230 -Payout,Chester,138,6,10 -Payout,SOU,92,4,10 -PRICE_MOVES_LOG,SOU,65,E6,70,E5 -BuysTrain,SOU,4,IPO,300 -FirstTrainBought,4 -StartOfPhase,4 -TrainsRusted,2 - -EndOfOperatingRound,4.2 -ORWorthIncrease,Bob,4.2,216 -ORWorthIncrease,Chester,4.2,214 -ORWorthIncrease,Joshua,4.2,120 -ORWorthIncrease,Rob,4.2,150 -Has,GMO,340 -Has,L&N,222 -Has,SOU,51 -Has,TC,280 -Has,Bob,342 -Has,Chester,311 -Has,Joshua,273 -Has,Rob,239 -StartStockRound,5 -HasPriority,Rob -SELL_SHARES_LOG,Rob,2,10,20,L&N,170 -PRICE_MOVES_LOG,L&N,85,G4,80,G5 -START_COMPANY_LOG,Rob,IC,65,195,3,30,BANK -SELL_SHARE_LOG,Bob,10,TC,90 -PRICE_MOVES_LOG,TC,90,F3,80,F4 -BUY_SHARE_LOG,Bob,10,SOU,Pool,70 -SELL_SHARE_LOG,Chester,10,TC,80 -PRICE_MOVES_LOG,TC,80,F4,75,F5 -SELL_SHARE_LOG,Chester,10,SOU,70 -PRICE_MOVES_LOG,SOU,70,E5,65,E6 -START_COMPANY_LOG,Chester,NC,75,150,2,20,BANK -BUY_SHARE_LOG,Joshua,10,SOU,Pool,65 -BUY_SHARE_LOG,Rob,10,IC,IPO,65 -BUY_SHARE_LOG,Bob,10,SOU,Pool,65 -BUY_SHARE_LOG,Chester,10,GMO,IPO,90 -BUY_SHARE_LOG,Joshua,10,SOU,Pool,65 -BUY_SHARE_LOG,Rob,10,IC,IPO,65 -BUY_SHARE_LOG,Bob,10,SOU,Pool,65 -BUY_SHARE_LOG,Chester,10,NC,IPO,75 -BUY_SHARE_LOG,Joshua,10,TC,Pool,75 -BUY_SHARE_LOG,Rob,10,IC,IPO,65 -FloatsWithCash,IC,650 -BUY_SHARE_LOG,Bob,10,IC,IPO,65 -BUY_SHARE_LOG,Chester,10,NC,IPO,75 -SELL_SHARE_LOG,Chester,10,GMO,80 -PRICE_MOVES_LOG,GMO,80,D2,70,D3 -BUY_SHARE_LOG,Joshua,10,IC,IPO,65 -Autopasses,Rob -BUY_SHARE_LOG,Bob,10,IC,IPO,65 -SELL_SHARES_LOG,Bob,2,10,20,IC,130 -PRICE_MOVES_LOG,IC,65,D4,55,D6 -BUY_SHARE_LOG,Chester,10,NC,IPO,75 -Autopasses,Joshua -Autopasses,Rob -BUY_SHARE_LOG,Bob,10,GMO,Pool,70 -BUY_SHARE_LOG,Chester,10,NC,IPO,75 -FloatsWithCash,NC,750 -Autopasses,Joshua -Autopasses,Rob -BUY_SHARE_LOG,Bob,10,NC,IPO,75 -Autopasses,Chester -Autopasses,Joshua -Autopasses,Rob -BUY_SHARE_LOG,Bob,10,NC,IPO,75 -SELL_SHARES_LOG,Bob,2,10,20,NC,150 -PRICE_MOVES_LOG,NC,75,E4,65,E6 -Autopasses,Chester -Autopasses,Joshua -Autopasses,Rob -SELL_SHARE_LOG,Bob,10,SOU,65 -PRICE_MOVES_LOG,SOU,65,E6,60,E7 -BUY_SHARE_LOG,Bob,10,L&N,Pool,80 -Autopasses,Chester -Autopasses,Joshua -Autopasses,Rob -BUY_SHARE_LOG,Bob,10,GMO,IPO,90 -Autopasses,Chester -Autopasses,Joshua -Autopasses,Rob -PASSES,Bob - -END_SR,5 -Has,GMO,340 -Has,IC,650 -Has,L&N,222 -Has,NC,750 -Has,SOU,51 -Has,TC,280 -Has,Bob,57 -Has,Chester,1 -Has,Joshua,3 -Has,Rob,19 -START_OR,5.1 -ReceivesFor,TC,5,TCC -ReceivesFor,SOU,10,ET&WNC -ReceivesFor,TC,15,M&C -ReceivesFor,GMO,20,O&W - -CompanyOperates,L&N,Rob -LaysTileAt,L&N,141,E10,SW -CompanyRevenue,L&N,110 -CompanyWithholds,L&N,110 -PRICE_MOVES_LOG,L&N,80,G5,75,F5 -BuysTrain,L&N,4,IPO,300 - -CompanyOperates,TC,Bob -LaysTileAt,TC,24,C12,NE -CompanyRevenue,TC,120 -CompanyPaysOutFull,TC,120 -Payout,Bob,60,5,10 -Payout,Joshua,12,1,10 -Payout,TC,12,1,10 -PRICE_MOVES_LOG,TC,75,F5,80,G5 -BuysTrain,TC,4,IPO,300 -All 4-trains are sold out, 5-trains now available - -CompanyOperates,GMO,Joshua -LaysTileAtFor,GMO,6,D7,NE,40 -LaysTileAt,GMO,8,C6,SE -CompanyRevenue,GMO,150 -CompanyPaysOutFull,GMO,150 -Payout,Bob,30,2,10 -Payout,Joshua,90,6,10 -PRICE_MOVES_LOG,GMO,70,D3,80,E3 - -CompanyOperates,NC,Chester -LaysTileAtFor,NC,8,H13,NW,60 -LaysTileAt,NC,9,G10,W -CompanyDoesNotPayDividend,NC -PRICE_MOVES_LOG,NC,65,E6,55,D6 -BuysTrain,NC,5,IPO,450 -FirstTrainBought,5 -StartOfPhase,5 -PrivateCloses,TCC -PrivateCloses,ET&WNC -PrivateCloses,M&C -PrivateCloses,O&W -BuysTrain,NC,3,SOU,240 - -CompanyOperates,SOU,Chester -LaysTileAt,SOU,24,B15,W -CompanyRevenue,SOU,170 -CompanyWithholds,SOU,170 -PRICE_MOVES_LOG,SOU,60,E7,50,D7 -BuysTrain,SOU,5,IPO,450 -All 5-trains are sold out, 6-trains now available - -CompanyOperates,IC,Rob -LaysTileAt,IC,619,D7,W -CompanyDoesNotPayDividend,IC -PRICE_MOVES_LOG,IC,55,D6,45,C6 -BuysTrain,IC,6,IPO,630 -FirstTrainBought,6 -StartOfPhase,6 -TrainsRusted,3 - -EndOfOperatingRound,5.1 -ORWorthIncrease,Bob,5.1,110 -ORWorthIncrease,Chester,5.1,-115 -ORWorthIncrease,Joshua,5.1,137 -ORWorthIncrease,Rob,5.1,-80 -Has,GMO,320 -Has,IC,20 -Has,L&N,32 -Has,NC,0 -Has,SOU,21 -Has,TC,12 -Has,Bob,147 -Has,Chester,1 -Has,Joshua,105 -Has,Rob,19 -START_OR,5.2 - -CompanyOperates,TC,Bob -LaysTileAt,TC,170,F11,SW -CompanyRevenue,TC,190 -CompanyPaysOutFull,TC,190 -Payout,Bob,95,5,10 -Payout,Joshua,19,1,10 -Payout,TC,19,1,10 -PRICE_MOVES_LOG,TC,80,G5,85,G4 - -CompanyOperates,GMO,Joshua -LaysTileAt,GMO,14,G6,NW -LAYS_TOKEN_ON,GMO,D7,40 -CompanyDoesNotPayDividend,GMO -PRICE_MOVES_LOG,GMO,80,E3,70,D3 -PlayerMustSellShares,Joshua,226 -SELL_SHARES_LOG,Joshua,1,10,10,TC,85 -PRICE_MOVES_LOG,TC,85,G4,80,G5 -SELL_SHARES_LOG,Joshua,1,10,10,IC,45 -PRICE_MOVES_LOG,IC,45,C6,40,C7 -SELL_SHARES_LOG,Joshua,2,10,20,SOU,100 -PresidentAddsCash,GMO,Joshua,350 -BuysTrain,GMO,6,IPO,630 -All 6-trains are sold out, 8-trains now available -StartOfPhase,6½ -TrainsObsolete.EXCEPT_TRIGGERING,4 - -CompanyOperates,L&N,Rob -LaysTileAt,L&N,8,D9,SE -LaysTileAt,L&N,8,E18,NW -CompanyRevenue,L&N,190 -CompanyWithholds,L&N,190 -PRICE_MOVES_LOG,L&N,75,F5,70,E5 -TrainsObsoleteRusted,4,L&N -PlayerMustSellShares,Rob,459 -SELL_SHARES_LOG,Rob,2,10,20,IC,80 -SELL_SHARES_LOG,Rob,1,10,10,L&N,70 -PRICE_MOVES_LOG,L&N,70,E5,65,E6 -PlayerIsBankrupt,Rob -GameOver -EoGWinnerBob! -EoGFinalRanking : -1. 947 Bob -2. 646 Chester -3. 424 Joshua -4. 355 Rob +GameIs,18TN +PlayerIs,1,Bob +PlayerIs,2,Chester +PlayerIs,3,Joshua +PlayerIs,4,Rob +PlayerCash,450 +BankHas,6200 +StartOfPhase,2 +BankSizeIs,6200 +StartOfInitialRound +HasPriority,Bob +BID_ITEM_LOG,Bob,75,M&C,375 +BID_ITEM_LOG,Chester,180,L&N,270 +BID_ITEM_LOG,Joshua,105,O&W,345 +BID_ITEM_LOG,Rob,185,L&N,265 +BuysItemFor,Bob,TCC,20 +BuysItemFor,Chester,ET&WNC,40 +BuysItemFor,Bob,M&C,75 +BuysItemFor,Joshua,O&W,105 +TO_AUCTION,L&N +BID_ITEM_LOG,Chester,190,L&N,220 +BID_ITEM_LOG,Rob,195,L&N,255 +PASSES,Chester +BuysItemFor,Rob,PRES_CERT_NAME,L&N,20,195 +FloatsWithCash,L&N,800 +Has,L&N,800 +Has,Bob,355 +Has,Chester,410 +Has,Joshua,345 +Has,Rob,255 +StartStockRound,1 +HasPriority,Joshua +PASSES,Joshua +BUY_SHARE_LOG,Rob,10,L&N,IPO,80 +BUY_SHARE_LOG,Bob,10,L&N,IPO,80 +START_COMPANY_LOG,Chester,SOU,65,130,2,20,BANK +BUY_SHARE_LOG,Joshua,10,L&N,IPO,80 +BUY_SHARE_LOG,Rob,10,L&N,IPO,80 +PASSES,Bob +BUY_SHARE_LOG,Chester,10,SOU,IPO,65 +BUY_SHARE_LOG,Joshua,10,L&N,IPO,80 +BUY_SHARE_LOG,Rob,10,L&N,IPO,80 +PASSES,Bob +BUY_SHARE_LOG,Chester,10,SOU,IPO,65 +BUY_SHARE_LOG,Joshua,10,L&N,IPO,80 +Autopasses,Rob +BUY_SHARE_LOG,Bob,10,L&N,IPO,80 +BUY_SHARE_LOG,Chester,10,SOU,IPO,65 +PASSES,Joshua +Autopasses,Rob +PASSES,Bob +BUY_SHARE_LOG,Chester,10,SOU,IPO,65 +FloatsWithCash,SOU,650 +Autopasses,Joshua +Autopasses,Rob +BUY_SHARE_LOG,Bob,10,SOU,IPO,65 +PASSES,Chester +Autopasses,Joshua +Autopasses,Rob +BUY_SHARE_LOG,Bob,10,SOU,IPO,65 +PASSES,Chester +Autopasses,Joshua +Autopasses,Rob +BUY_SHARE_LOG,Bob,10,SOU,IPO,65 +PASSES,Chester +Autopasses,Joshua +Autopasses,Rob +PASSES,Bob + +END_SR,1 +PRICE_MOVES_LOG,L&N,80,E3,90,E2 +SoldOut,L&N,80,E3,90,E2 +Has,L&N,800 +Has,SOU,650 +Has,Bob,0 +Has,Chester,20 +Has,Joshua,105 +Has,Rob,15 +START_OR,1.1 +ReceivesFor,Bob,5,TCC +ReceivesFor,Chester,10,ET&WNC +ReceivesFor,Bob,15,M&C +ReceivesFor,Joshua,20,O&W + +CompanyOperates,L&N,Rob +LaysTileAtFor,L&N,9,B15,W,60 +LaysTileAt,L&N,5,B17,NE +LAYS_TOKEN_ON,L&N,B17,40 +CompanyDoesNotPayDividend,L&N +PRICE_MOVES_LOG,L&N,90,E2,80,D2 +BuysTrain,L&N,2,IPO,80 +FirstTrainBought,2 + +CompanyOperates,SOU,Chester +BuysPrivateFromFor,SOU,ET&WNC,Chester,40 +LaysTileAt,SOU,8,F19,W +LaysTileAt,SOU,8,E20,E +LaysTileAtFor,SOU,57,F17,W,40 +CompanyDoesNotPayDividend,SOU +PRICE_MOVES_LOG,SOU,65,D4,55,C4 +BuysTrain,SOU,2,IPO,80 + +EndOfOperatingRound,1.1 +ORWorthIncrease,Bob,1.1,-30 +ORWorthIncrease,Chester,1.1,-50 +ORWorthIncrease,Joshua,1.1,-10 +ORWorthIncrease,Rob,1.1,-50 +Has,L&N,620 +Has,SOU,490 +Has,Bob,20 +Has,Chester,70 +Has,Joshua,125 +Has,Rob,15 +StartStockRound,2 +HasPriority,Chester +PASSES,Chester +BUY_SHARE_LOG,Joshua,10,SOU,IPO,65 +Autopasses,Rob +PASSES,Bob +PASSES,Chester +Autopasses,Joshua + +END_SR,2 +PRICE_MOVES_LOG,L&N,80,D2,90,D1 +SoldOut,L&N,80,D2,90,D1 +PRICE_MOVES_LOG,SOU,55,C4,60,C3 +SoldOut,SOU,55,C4,60,C3 +Has,L&N,620 +Has,SOU,490 +Has,Bob,20 +Has,Chester,70 +Has,Joshua,60 +Has,Rob,15 +START_OR,2.1 +ReceivesFor,Bob,5,TCC +ReceivesFor,SOU,10,ET&WNC +ReceivesFor,Bob,15,M&C +ReceivesFor,Joshua,20,O&W + +CompanyOperates,L&N,Rob +LaysTileAt,L&N,58,E10,NE +LaysTileAtFor,L&N,57,F11,NW,40 +CompanyRevenue,L&N,70 +CompanyPaysOutFull,L&N,70 +Payout,Joshua,21,3,10 +Payout,Bob,14,2,10 +Payout,Rob,35,5,10 +PRICE_MOVES_LOG,L&N,90,D1,100,E1 +BuysTrain,L&N,2,IPO,80 + +CompanyOperates,SOU,Chester +LaysTileAtFor,SOU,9,F15,E,60 +LaysTileAt,SOU,58,F13,E +CompanyRevenue,SOU,80 +CompanyPaysOutFull,SOU,80 +Payout,Joshua,8,1,10 +Payout,Bob,24,3,10 +Payout,Chester,48,6,10 +PRICE_MOVES_LOG,SOU,60,C3,70,D3 +BuysTrain,SOU,2,IPO,80 + +EndOfOperatingRound,2.1 +ORWorthIncrease,Bob,2.1,108 +ORWorthIncrease,Chester,2.1,108 +ORWorthIncrease,Joshua,2.1,89 +ORWorthIncrease,Rob,2.1,85 +Has,L&N,500 +Has,SOU,360 +Has,Bob,78 +Has,Chester,118 +Has,Joshua,109 +Has,Rob,50 +StartStockRound,3 +HasPriority,Rob +PASSES,Rob +SELL_SHARES_LOG,Bob,2,10,20,L&N,200 +PRICE_MOVES_LOG,L&N,100,E1,80,E3 +SELL_SHARES_LOG,Bob,3,10,30,SOU,210 +PRICE_MOVES_LOG,SOU,70,D3,55,D6 +START_COMPANY_LOG,Bob,TC,80,160,2,20,BANK +BUY_SHARE_LOG,Chester,10,L&N,Pool,80 +BUY_SHARE_LOG,Joshua,10,L&N,Pool,80 +Autopasses,Rob +BUY_SHARE_LOG,Bob,10,TC,IPO,80 +PASSES,Chester +Autopasses,Joshua +Autopasses,Rob +BUY_SHARE_LOG,Bob,10,TC,IPO,80 +PASSES,Chester +Autopasses,Joshua +Autopasses,Rob +BUY_SHARE_LOG,Bob,10,TC,IPO,80 +PASSES,Chester +Autopasses,Joshua +Autopasses,Rob +BUY_SHARE_LOG,Bob,10,TC,IPO,80 +FloatsWithCash,TC,800 +PASSES,Chester +Autopasses,Joshua +Autopasses,Rob +PASSES,Bob + +END_SR,3 +PRICE_MOVES_LOG,L&N,80,E3,90,E2 +SoldOut,L&N,80,E3,90,E2 +Has,L&N,500 +Has,SOU,360 +Has,TC,800 +Has,Bob,8 +Has,Chester,38 +Has,Joshua,29 +Has,Rob,50 +START_OR,3.1 +ReceivesFor,Bob,5,TCC +ReceivesFor,SOU,10,ET&WNC +ReceivesFor,Bob,15,M&C +ReceivesFor,Joshua,20,O&W + +CompanyOperates,L&N,Rob +LaysTileAt,L&N,5,G12,E +LAYS_TOKEN_ON,L&N,G12,100 +CompanyRevenue,L&N,120 +CompanyPaysOutFull,L&N,120 +Payout,Joshua,48,4,10 +Payout,Rob,60,5,10 +Payout,Chester,12,1,10 +PRICE_MOVES_LOG,L&N,90,E2,100,F2 + +CompanyOperates,TC,Bob +CompanyDoesNotPayDividend,TC +PRICE_MOVES_LOG,TC,80,E3,70,D3 +BuysTrain,TC,2,IPO,80 +All 2-trains are sold out, 3-trains now available + +CompanyOperates,SOU,Chester +CompanyRevenue,SOU,110 +CompanyPaysOutFull,SOU,110 +Payout,Joshua,11,1,10 +Payout,Chester,66,6,10 +Payout,SOU,33,3,10 +PRICE_MOVES_LOG,SOU,55,D6,65,E6 +BuysTrain,SOU,3,IPO,180 +FirstTrainBought,3 +StartOfPhase,3 + +EndOfOperatingRound,3.1 +ORWorthIncrease,Bob,3.1,-40 +ORWorthIncrease,Chester,3.1,148 +ORWorthIncrease,Joshua,3.1,129 +ORWorthIncrease,Rob,3.1,110 +Has,L&N,400 +Has,SOU,223 +Has,TC,720 +Has,Bob,28 +Has,Chester,116 +Has,Joshua,108 +Has,Rob,110 +StartStockRound,4 +HasPriority,Chester +BUY_SHARE_LOG,Chester,10,TC,IPO,80 +SELL_SHARES_LOG,Joshua,4,10,40,L&N,400 +PRICE_MOVES_LOG,L&N,100,F2,75,F5 +SELL_SHARE_LOG,Joshua,10,SOU,65 +PRICE_MOVES_LOG,SOU,65,E6,60,E7 +START_COMPANY_LOG,Joshua,GMO,90,180,2,20,BANK +BUY_SHARE_LOG,Rob,10,L&N,Pool,75 +Autopasses,Bob +Autopasses,Chester +BUY_SHARE_LOG,Joshua,10,GMO,IPO,90 +Autopasses,Rob +Autopasses,Bob +Autopasses,Chester +BUY_SHARE_LOG,Joshua,10,GMO,IPO,90 +Autopasses,Rob +Autopasses,Bob +Autopasses,Chester +BUY_SHARE_LOG,Joshua,10,GMO,IPO,90 +Autopasses,Rob +Autopasses,Bob +Autopasses,Chester +BUY_SHARE_LOG,Joshua,10,GMO,IPO,90 +FloatsWithCash,GMO,900 +Autopasses,Rob +Autopasses,Bob +Autopasses,Chester +PASSES,Joshua + +END_SR,4 +Has,GMO,900 +Has,L&N,400 +Has,SOU,223 +Has,TC,720 +Has,Bob,28 +Has,Chester,36 +Has,Joshua,33 +Has,Rob,35 +START_OR,4.1 +ReceivesFor,Bob,5,TCC +ReceivesFor,SOU,10,ET&WNC +ReceivesFor,Bob,15,M&C +ReceivesFor,Joshua,20,O&W + +CompanyOperates,GMO,Joshua +LaysTileAt,GMO,6,H7,NE +LaysTileAt,GMO,8,F7,SW +CompanyDoesNotPayDividend,GMO +PRICE_MOVES_LOG,GMO,90,E2,80,D2 +BuysTrain,GMO,3,IPO,180 + +CompanyOperates,L&N,Rob +LaysTileAt,L&N,15,B17,SE +CompanyRevenue,L&N,140 +CompanyPaysOutFull,L&N,140 +Payout,Chester,14,1,10 +Payout,Rob,84,6,10 +Payout,L&N,42,3,10 +PRICE_MOVES_LOG,L&N,75,F5,80,G5 +BuysTrain,L&N,3,IPO,180 + +CompanyOperates,TC,Bob +LaysTileAtFor,TC,8,C18,SW,60 +LaysTileAt,TC,8,D17,NE +LAYS_TOKEN_ON,TC,B17,40 +CompanyRevenue,TC,80 +CompanyPaysOutFull,TC,80 +Payout,Chester,8,1,10 +Payout,Bob,48,6,10 +PRICE_MOVES_LOG,TC,70,D3,80,E3 +BuysTrain,TC,3,IPO,180 +StartOfPhase,3½ + +CompanyOperates,SOU,Chester +LaysTileAt,SOU,619,G12,SW +CompanyRevenue,SOU,140 +CompanyPaysOutFull,SOU,140 +Payout,Chester,84,6,10 +Payout,SOU,56,4,10 +PRICE_MOVES_LOG,SOU,60,E7,65,E6 + +EndOfOperatingRound,4.1 +ORWorthIncrease,Bob,4.1,128 +ORWorthIncrease,Chester,4.1,151 +ORWorthIncrease,Joshua,4.1,-40 +ORWorthIncrease,Rob,4.1,114 +Has,GMO,720 +Has,L&N,262 +Has,SOU,289 +Has,TC,440 +Has,Bob,96 +Has,Chester,142 +Has,Joshua,53 +Has,Rob,119 +START_OR,4.2 +ReceivesFor,Bob,5,TCC +ReceivesFor,SOU,10,ET&WNC +ReceivesFor,Bob,15,M&C +ReceivesFor,Joshua,20,O&W + +CompanyOperates,L&N,Rob +LaysTileAt,L&N,15,F17,E +LAYS_TOKEN_ON,L&N,F17,100 +CompanyRevenue,L&N,200 +CompanyPaysOutFull,L&N,200 +Payout,Chester,20,1,10 +Payout,Rob,120,6,10 +Payout,L&N,60,3,10 +PRICE_MOVES_LOG,L&N,80,G5,85,G4 + +CompanyOperates,TC,Bob +BuysPrivateFromFor,TC,TCC,Bob,40 +BuysPrivateFromFor,TC,M&C,Bob,120 +LaysTileAt,TC,8,H5,NW +LaysTileAt,TC,599,F11,NE +CompanyRevenue,TC,110 +CompanyPaysOutFull,TC,110 +Payout,Bob,66,6,10 +Payout,Chester,11,1,10 +PRICE_MOVES_LOG,TC,80,E3,90,F3 + +CompanyOperates,GMO,Joshua +LaysTileAt,GMO,9,I6,SW +LaysTileAt,GMO,8,E6,NE +BuysPrivateFromFor,GMO,O&W,Joshua,200 +CompanyRevenue,GMO,0 +CompanyDoesNotPayDividend,GMO +BuysTrain,GMO,3,IPO,180 +All 3-trains are sold out, 4-trains now available + +CompanyOperates,SOU,Chester +LaysTileAt,SOU,9,E12,SW +LaysTileAt,SOU,8,D13,SW +LAYS_TOKEN_ON,SOU,F11,40 +CompanyRevenue,SOU,230 +CompanyPaysOutFull,SOU,230 +Payout,Chester,138,6,10 +Payout,SOU,92,4,10 +PRICE_MOVES_LOG,SOU,65,E6,70,E5 +BuysTrain,SOU,4,IPO,300 +FirstTrainBought,4 +StartOfPhase,4 +TrainsRusted,2 + +EndOfOperatingRound,4.2 +ORWorthIncrease,Bob,4.2,216 +ORWorthIncrease,Chester,4.2,214 +ORWorthIncrease,Joshua,4.2,120 +ORWorthIncrease,Rob,4.2,150 +Has,GMO,340 +Has,L&N,222 +Has,SOU,51 +Has,TC,280 +Has,Bob,342 +Has,Chester,311 +Has,Joshua,273 +Has,Rob,239 +StartStockRound,5 +HasPriority,Rob +SELL_SHARES_LOG,Rob,2,10,20,L&N,170 +PRICE_MOVES_LOG,L&N,85,G4,80,G5 +START_COMPANY_LOG,Rob,IC,65,195,3,30,BANK +SELL_SHARE_LOG,Bob,10,TC,90 +PRICE_MOVES_LOG,TC,90,F3,80,F4 +BUY_SHARE_LOG,Bob,10,SOU,Pool,70 +SELL_SHARE_LOG,Chester,10,TC,80 +PRICE_MOVES_LOG,TC,80,F4,75,F5 +SELL_SHARE_LOG,Chester,10,SOU,70 +PRICE_MOVES_LOG,SOU,70,E5,65,E6 +START_COMPANY_LOG,Chester,NC,75,150,2,20,BANK +BUY_SHARE_LOG,Joshua,10,SOU,Pool,65 +BUY_SHARE_LOG,Rob,10,IC,IPO,65 +BUY_SHARE_LOG,Bob,10,SOU,Pool,65 +BUY_SHARE_LOG,Chester,10,GMO,IPO,90 +BUY_SHARE_LOG,Joshua,10,SOU,Pool,65 +BUY_SHARE_LOG,Rob,10,IC,IPO,65 +BUY_SHARE_LOG,Bob,10,SOU,Pool,65 +BUY_SHARE_LOG,Chester,10,NC,IPO,75 +BUY_SHARE_LOG,Joshua,10,TC,Pool,75 +BUY_SHARE_LOG,Rob,10,IC,IPO,65 +FloatsWithCash,IC,650 +BUY_SHARE_LOG,Bob,10,IC,IPO,65 +BUY_SHARE_LOG,Chester,10,NC,IPO,75 +SELL_SHARE_LOG,Chester,10,GMO,80 +PRICE_MOVES_LOG,GMO,80,D2,70,D3 +BUY_SHARE_LOG,Joshua,10,IC,IPO,65 +Autopasses,Rob +BUY_SHARE_LOG,Bob,10,IC,IPO,65 +SELL_SHARES_LOG,Bob,2,10,20,IC,130 +PRICE_MOVES_LOG,IC,65,D4,55,D6 +BUY_SHARE_LOG,Chester,10,NC,IPO,75 +Autopasses,Joshua +Autopasses,Rob +BUY_SHARE_LOG,Bob,10,GMO,Pool,70 +BUY_SHARE_LOG,Chester,10,NC,IPO,75 +FloatsWithCash,NC,750 +Autopasses,Joshua +Autopasses,Rob +BUY_SHARE_LOG,Bob,10,NC,IPO,75 +Autopasses,Chester +Autopasses,Joshua +Autopasses,Rob +BUY_SHARE_LOG,Bob,10,NC,IPO,75 +SELL_SHARES_LOG,Bob,2,10,20,NC,150 +PRICE_MOVES_LOG,NC,75,E4,65,E6 +Autopasses,Chester +Autopasses,Joshua +Autopasses,Rob +SELL_SHARE_LOG,Bob,10,SOU,65 +PRICE_MOVES_LOG,SOU,65,E6,60,E7 +BUY_SHARE_LOG,Bob,10,L&N,Pool,80 +Autopasses,Chester +Autopasses,Joshua +Autopasses,Rob +BUY_SHARE_LOG,Bob,10,GMO,IPO,90 +Autopasses,Chester +Autopasses,Joshua +Autopasses,Rob +PASSES,Bob + +END_SR,5 +Has,GMO,340 +Has,IC,650 +Has,L&N,222 +Has,NC,750 +Has,SOU,51 +Has,TC,280 +Has,Bob,57 +Has,Chester,1 +Has,Joshua,3 +Has,Rob,19 +START_OR,5.1 +ReceivesFor,TC,5,TCC +ReceivesFor,SOU,10,ET&WNC +ReceivesFor,TC,15,M&C +ReceivesFor,GMO,20,O&W + +CompanyOperates,L&N,Rob +LaysTileAt,L&N,141,E10,SW +CompanyRevenue,L&N,110 +CompanyWithholds,L&N,110 +PRICE_MOVES_LOG,L&N,80,G5,75,F5 +BuysTrain,L&N,4,IPO,300 + +CompanyOperates,TC,Bob +LaysTileAt,TC,24,C12,NE +CompanyRevenue,TC,120 +CompanyPaysOutFull,TC,120 +Payout,Bob,60,5,10 +Payout,Joshua,12,1,10 +Payout,TC,12,1,10 +PRICE_MOVES_LOG,TC,75,F5,80,G5 +BuysTrain,TC,4,IPO,300 +All 4-trains are sold out, 5-trains now available + +CompanyOperates,GMO,Joshua +LaysTileAtFor,GMO,6,D7,NE,40 +LaysTileAt,GMO,8,C6,SE +CompanyRevenue,GMO,150 +CompanyPaysOutFull,GMO,150 +Payout,Bob,30,2,10 +Payout,Joshua,90,6,10 +PRICE_MOVES_LOG,GMO,70,D3,80,E3 + +CompanyOperates,NC,Chester +LaysTileAtFor,NC,8,H13,NW,60 +LaysTileAt,NC,9,G10,W +CompanyDoesNotPayDividend,NC +PRICE_MOVES_LOG,NC,65,E6,55,D6 +BuysTrain,NC,5,IPO,450 +FirstTrainBought,5 +StartOfPhase,5 +PrivateCloses,TCC +PrivateCloses,ET&WNC +PrivateCloses,M&C +PrivateCloses,O&W +BuysTrain,NC,3,SOU,240 + +CompanyOperates,SOU,Chester +LaysTileAt,SOU,24,B15,W +CompanyRevenue,SOU,170 +CompanyWithholds,SOU,170 +PRICE_MOVES_LOG,SOU,60,E7,50,D7 +BuysTrain,SOU,5,IPO,450 +All 5-trains are sold out, 6-trains now available + +CompanyOperates,IC,Rob +LaysTileAt,IC,619,D7,W +CompanyDoesNotPayDividend,IC +PRICE_MOVES_LOG,IC,55,D6,45,C6 +BuysTrain,IC,6,IPO,630 +FirstTrainBought,6 +StartOfPhase,6 +TrainsRusted,3 + +EndOfOperatingRound,5.1 +ORWorthIncrease,Bob,5.1,110 +ORWorthIncrease,Chester,5.1,-115 +ORWorthIncrease,Joshua,5.1,137 +ORWorthIncrease,Rob,5.1,-80 +Has,GMO,320 +Has,IC,20 +Has,L&N,32 +Has,NC,0 +Has,SOU,21 +Has,TC,12 +Has,Bob,147 +Has,Chester,1 +Has,Joshua,105 +Has,Rob,19 +START_OR,5.2 + +CompanyOperates,TC,Bob +LaysTileAt,TC,170,F11,SW +CompanyRevenue,TC,190 +CompanyPaysOutFull,TC,190 +Payout,Bob,95,5,10 +Payout,Joshua,19,1,10 +Payout,TC,19,1,10 +PRICE_MOVES_LOG,TC,80,G5,85,G4 + +CompanyOperates,GMO,Joshua +LaysTileAt,GMO,14,G6,NW +LAYS_TOKEN_ON,GMO,D7,40 +CompanyDoesNotPayDividend,GMO +PRICE_MOVES_LOG,GMO,80,E3,70,D3 +PlayerMustSellShares,Joshua,226 +SELL_SHARES_LOG,Joshua,1,10,10,TC,85 +PRICE_MOVES_LOG,TC,85,G4,80,G5 +SELL_SHARES_LOG,Joshua,1,10,10,IC,45 +PRICE_MOVES_LOG,IC,45,C6,40,C7 +SELL_SHARES_LOG,Joshua,2,10,20,SOU,100 +PresidentAddsCash,GMO,Joshua,350 +BuysTrain,GMO,6,IPO,630 +All 6-trains are sold out, 8-trains now available +StartOfPhase,6½ +TrainsObsolete.EXCEPT_TRIGGERING,4 + +CompanyOperates,L&N,Rob +LaysTileAt,L&N,8,D9,SE +LaysTileAt,L&N,8,E18,NW +CompanyRevenue,L&N,190 +CompanyWithholds,L&N,190 +PRICE_MOVES_LOG,L&N,75,F5,70,E5 +TrainsObsoleteRusted,4,L&N +PlayerMustSellShares,Rob,459 +SELL_SHARES_LOG,Rob,2,10,20,IC,80 +SELL_SHARES_LOG,Rob,1,10,10,L&N,70 +PRICE_MOVES_LOG,L&N,70,E5,65,E6 +PlayerIsBankrupt,Rob +GameOver +EoGWinnerBob! +EoGFinalRanking : +1. 947 Bob +2. 646 Chester +3. 424 Joshua +4. 355 Rob +======= +GameIs,18TN +PlayerIs,1,Bob +PlayerIs,2,Chester +PlayerIs,3,Joshua +PlayerIs,4,Rob +PlayerCash,450 +BankHas,6200 +StartOfPhase,2 +BankSizeIs,6200 +StartOfInitialRound +HasPriority,Bob +BID_ITEM_LOG,Bob,75,M&C,375 +BID_ITEM_LOG,Chester,180,L&N,270 +BID_ITEM_LOG,Joshua,105,O&W,345 +BID_ITEM_LOG,Rob,185,L&N,265 +BuysItemFor,Bob,TCC,20 +BuysItemFor,Chester,ET&WNC,40 +BuysItemFor,Bob,M&C,75 +BuysItemFor,Joshua,O&W,105 +TO_AUCTION,L&N +BID_ITEM_LOG,Chester,190,L&N,220 +BID_ITEM_LOG,Rob,195,L&N,255 +PASSES,Chester +BuysItemFor,Rob,PRES_CERT_NAME,L&N,20,195 +FloatsWithCash,L&N,800 +Has,L&N,800 +Has,Bob,355 +Has,Chester,410 +Has,Joshua,345 +Has,Rob,255 +StartStockRound,1 +HasPriority,Joshua +PASSES,Joshua +BUY_SHARE_LOG,Rob,10,L&N,IPO,80 +BUY_SHARE_LOG,Bob,10,L&N,IPO,80 +START_COMPANY_LOG,Chester,SOU,65,130,2,20,BANK +BUY_SHARE_LOG,Joshua,10,L&N,IPO,80 +BUY_SHARE_LOG,Rob,10,L&N,IPO,80 +PASSES,Bob +BUY_SHARE_LOG,Chester,10,SOU,IPO,65 +BUY_SHARE_LOG,Joshua,10,L&N,IPO,80 +BUY_SHARE_LOG,Rob,10,L&N,IPO,80 +PASSES,Bob +BUY_SHARE_LOG,Chester,10,SOU,IPO,65 +BUY_SHARE_LOG,Joshua,10,L&N,IPO,80 +Autopasses,Rob +BUY_SHARE_LOG,Bob,10,L&N,IPO,80 +BUY_SHARE_LOG,Chester,10,SOU,IPO,65 +PASSES,Joshua +Autopasses,Rob +PASSES,Bob +BUY_SHARE_LOG,Chester,10,SOU,IPO,65 +FloatsWithCash,SOU,650 +Autopasses,Joshua +Autopasses,Rob +BUY_SHARE_LOG,Bob,10,SOU,IPO,65 +PASSES,Chester +Autopasses,Joshua +Autopasses,Rob +BUY_SHARE_LOG,Bob,10,SOU,IPO,65 +PASSES,Chester +Autopasses,Joshua +Autopasses,Rob +BUY_SHARE_LOG,Bob,10,SOU,IPO,65 +PASSES,Chester +Autopasses,Joshua +Autopasses,Rob +PASSES,Bob + +END_SR,1 +PRICE_MOVES_LOG,L&N,80,E3,90,E2 +SoldOut,L&N,80,E3,90,E2 +Has,L&N,800 +Has,SOU,650 +Has,Bob,0 +Has,Chester,20 +Has,Joshua,105 +Has,Rob,15 +START_OR,1.1 +ReceivesFor,Bob,5,TCC +ReceivesFor,Chester,10,ET&WNC +ReceivesFor,Bob,15,M&C +ReceivesFor,Joshua,20,O&W + +CompanyOperates,L&N,Rob +LaysTileAtFor,L&N,9,B15,W,60 +LaysTileAt,L&N,5,B17,NE +LAYS_TOKEN_ON,L&N,B17,40 +CompanyDoesNotPayDividend,L&N +PRICE_MOVES_LOG,L&N,90,E2,80,D2 +BuysTrain,L&N,2,IPO,80 +FirstTrainBought,2 + +CompanyOperates,SOU,Chester +BuysPrivateFromFor,SOU,ET&WNC,Chester,40 +LaysTileAt,SOU,8,F19,W +LaysTileAt,SOU,8,E20,E +LaysTileAtFor,SOU,57,F17,W,40 +CompanyDoesNotPayDividend,SOU +PRICE_MOVES_LOG,SOU,65,D4,55,C4 +BuysTrain,SOU,2,IPO,80 + +EndOfOperatingRound,1.1 +ORWorthIncrease,Bob,1.1,-30 +ORWorthIncrease,Chester,1.1,-50 +ORWorthIncrease,Joshua,1.1,-10 +ORWorthIncrease,Rob,1.1,-50 +Has,L&N,620 +Has,SOU,490 +Has,Bob,20 +Has,Chester,70 +Has,Joshua,125 +Has,Rob,15 +StartStockRound,2 +HasPriority,Chester +PASSES,Chester +BUY_SHARE_LOG,Joshua,10,SOU,IPO,65 +Autopasses,Rob +PASSES,Bob +PASSES,Chester +Autopasses,Joshua + +END_SR,2 +PRICE_MOVES_LOG,L&N,80,D2,90,D1 +SoldOut,L&N,80,D2,90,D1 +PRICE_MOVES_LOG,SOU,55,C4,60,C3 +SoldOut,SOU,55,C4,60,C3 +Has,L&N,620 +Has,SOU,490 +Has,Bob,20 +Has,Chester,70 +Has,Joshua,60 +Has,Rob,15 +START_OR,2.1 +ReceivesFor,Bob,5,TCC +ReceivesFor,SOU,10,ET&WNC +ReceivesFor,Bob,15,M&C +ReceivesFor,Joshua,20,O&W + +CompanyOperates,L&N,Rob +LaysTileAt,L&N,58,E10,NE +LaysTileAtFor,L&N,57,F11,NW,40 +CompanyRevenue,L&N,70 +CompanyPaysOutFull,L&N,70 +Payout,Joshua,21,3,10 +Payout,Bob,14,2,10 +Payout,Rob,35,5,10 +PRICE_MOVES_LOG,L&N,90,D1,100,E1 +BuysTrain,L&N,2,IPO,80 + +CompanyOperates,SOU,Chester +LaysTileAtFor,SOU,9,F15,E,60 +LaysTileAt,SOU,58,F13,E +CompanyRevenue,SOU,80 +CompanyPaysOutFull,SOU,80 +Payout,Joshua,8,1,10 +Payout,Bob,24,3,10 +Payout,Chester,48,6,10 +PRICE_MOVES_LOG,SOU,60,C3,70,D3 +BuysTrain,SOU,2,IPO,80 + +EndOfOperatingRound,2.1 +ORWorthIncrease,Bob,2.1,108 +ORWorthIncrease,Chester,2.1,108 +ORWorthIncrease,Joshua,2.1,89 +ORWorthIncrease,Rob,2.1,85 +Has,L&N,500 +Has,SOU,360 +Has,Bob,78 +Has,Chester,118 +Has,Joshua,109 +Has,Rob,50 +StartStockRound,3 +HasPriority,Rob +PASSES,Rob +SELL_SHARES_LOG,Bob,2,10,20,L&N,200 +PRICE_MOVES_LOG,L&N,100,E1,80,E3 +SELL_SHARES_LOG,Bob,3,10,30,SOU,210 +PRICE_MOVES_LOG,SOU,70,D3,55,D6 +START_COMPANY_LOG,Bob,TC,80,160,2,20,BANK +BUY_SHARE_LOG,Chester,10,L&N,Pool,80 +BUY_SHARE_LOG,Joshua,10,L&N,Pool,80 +Autopasses,Rob +BUY_SHARE_LOG,Bob,10,TC,IPO,80 +PASSES,Chester +Autopasses,Joshua +Autopasses,Rob +BUY_SHARE_LOG,Bob,10,TC,IPO,80 +PASSES,Chester +Autopasses,Joshua +Autopasses,Rob +BUY_SHARE_LOG,Bob,10,TC,IPO,80 +PASSES,Chester +Autopasses,Joshua +Autopasses,Rob +BUY_SHARE_LOG,Bob,10,TC,IPO,80 +FloatsWithCash,TC,800 +PASSES,Chester +Autopasses,Joshua +Autopasses,Rob +PASSES,Bob + +END_SR,3 +PRICE_MOVES_LOG,L&N,80,E3,90,E2 +SoldOut,L&N,80,E3,90,E2 +Has,L&N,500 +Has,SOU,360 +Has,TC,800 +Has,Bob,8 +Has,Chester,38 +Has,Joshua,29 +Has,Rob,50 +START_OR,3.1 +ReceivesFor,Bob,5,TCC +ReceivesFor,SOU,10,ET&WNC +ReceivesFor,Bob,15,M&C +ReceivesFor,Joshua,20,O&W + +CompanyOperates,L&N,Rob +LaysTileAt,L&N,5,G12,E +LAYS_TOKEN_ON,L&N,G12,100 +CompanyRevenue,L&N,120 +CompanyPaysOutFull,L&N,120 +Payout,Joshua,48,4,10 +Payout,Rob,60,5,10 +Payout,Chester,12,1,10 +PRICE_MOVES_LOG,L&N,90,E2,100,F2 + +CompanyOperates,TC,Bob +CompanyDoesNotPayDividend,TC +PRICE_MOVES_LOG,TC,80,E3,70,D3 +BuysTrain,TC,2,IPO,80 +All 2-trains are sold out, 3-trains now available + +CompanyOperates,SOU,Chester +CompanyRevenue,SOU,110 +CompanyPaysOutFull,SOU,110 +Payout,Joshua,11,1,10 +Payout,Chester,66,6,10 +Payout,SOU,33,3,10 +PRICE_MOVES_LOG,SOU,55,D6,65,E6 +BuysTrain,SOU,3,IPO,180 +FirstTrainBought,3 +StartOfPhase,3 + +EndOfOperatingRound,3.1 +ORWorthIncrease,Bob,3.1,-40 +ORWorthIncrease,Chester,3.1,148 +ORWorthIncrease,Joshua,3.1,129 +ORWorthIncrease,Rob,3.1,110 +Has,L&N,400 +Has,SOU,223 +Has,TC,720 +Has,Bob,28 +Has,Chester,116 +Has,Joshua,108 +Has,Rob,110 +StartStockRound,4 +HasPriority,Chester +BUY_SHARE_LOG,Chester,10,TC,IPO,80 +SELL_SHARES_LOG,Joshua,4,10,40,L&N,400 +PRICE_MOVES_LOG,L&N,100,F2,75,F5 +SELL_SHARE_LOG,Joshua,10,SOU,65 +PRICE_MOVES_LOG,SOU,65,E6,60,E7 +START_COMPANY_LOG,Joshua,GMO,90,180,2,20,BANK +BUY_SHARE_LOG,Rob,10,L&N,Pool,75 +Autopasses,Bob +Autopasses,Chester +BUY_SHARE_LOG,Joshua,10,GMO,IPO,90 +Autopasses,Rob +Autopasses,Bob +Autopasses,Chester +BUY_SHARE_LOG,Joshua,10,GMO,IPO,90 +Autopasses,Rob +Autopasses,Bob +Autopasses,Chester +BUY_SHARE_LOG,Joshua,10,GMO,IPO,90 +Autopasses,Rob +Autopasses,Bob +Autopasses,Chester +BUY_SHARE_LOG,Joshua,10,GMO,IPO,90 +FloatsWithCash,GMO,900 +Autopasses,Rob +Autopasses,Bob +Autopasses,Chester +PASSES,Joshua + +END_SR,4 +Has,GMO,900 +Has,L&N,400 +Has,SOU,223 +Has,TC,720 +Has,Bob,28 +Has,Chester,36 +Has,Joshua,33 +Has,Rob,35 +START_OR,4.1 +ReceivesFor,Bob,5,TCC +ReceivesFor,SOU,10,ET&WNC +ReceivesFor,Bob,15,M&C +ReceivesFor,Joshua,20,O&W + +CompanyOperates,GMO,Joshua +LaysTileAt,GMO,6,H7,NE +LaysTileAt,GMO,8,F7,SW +CompanyDoesNotPayDividend,GMO +PRICE_MOVES_LOG,GMO,90,E2,80,D2 +BuysTrain,GMO,3,IPO,180 + +CompanyOperates,L&N,Rob +LaysTileAt,L&N,15,B17,SE +CompanyRevenue,L&N,140 +CompanyPaysOutFull,L&N,140 +Payout,Chester,14,1,10 +Payout,Rob,84,6,10 +Payout,L&N,42,3,10 +PRICE_MOVES_LOG,L&N,75,F5,80,G5 +BuysTrain,L&N,3,IPO,180 + +CompanyOperates,TC,Bob +LaysTileAtFor,TC,8,C18,SW,60 +LaysTileAt,TC,8,D17,NE +LAYS_TOKEN_ON,TC,B17,40 +CompanyRevenue,TC,80 +CompanyPaysOutFull,TC,80 +Payout,Chester,8,1,10 +Payout,Bob,48,6,10 +PRICE_MOVES_LOG,TC,70,D3,80,E3 +BuysTrain,TC,3,IPO,180 +StartOfPhase,3½ +CivilWarBegins, + +CompanyOperates,SOU,Chester +LaysTileAt,SOU,619,G12,SW +CompanyRevenue,SOU,140 +CompanyPaysOutFull,SOU,140 +Payout,Chester,84,6,10 +Payout,SOU,56,4,10 +PRICE_MOVES_LOG,SOU,60,E7,65,E6 + +EndOfOperatingRound,4.1 +ORWorthIncrease,Bob,4.1,128 +ORWorthIncrease,Chester,4.1,151 +ORWorthIncrease,Joshua,4.1,-40 +ORWorthIncrease,Rob,4.1,114 +Has,GMO,720 +Has,L&N,262 +Has,SOU,289 +Has,TC,440 +Has,Bob,96 +Has,Chester,142 +Has,Joshua,53 +Has,Rob,119 +START_OR,4.2 +ReceivesFor,Bob,5,TCC +ReceivesFor,SOU,10,ET&WNC +ReceivesFor,Bob,15,M&C +ReceivesFor,Joshua,20,O&W + +CompanyOperates,L&N,Rob +LaysTileAt,L&N,15,F17,E +LAYS_TOKEN_ON,L&N,F17,100 +CompanyRevenue,L&N,200 +CompanyPaysOutFull,L&N,200 +Payout,Chester,20,1,10 +Payout,Rob,120,6,10 +Payout,L&N,60,3,10 +PRICE_MOVES_LOG,L&N,80,G5,85,G4 + +CompanyOperates,TC,Bob +BuysPrivateFromFor,TC,TCC,Bob,40 +BuysPrivateFromFor,TC,M&C,Bob,120 +LaysTileAt,TC,8,H5,NW +LaysTileAt,TC,599,F11,NE +CompanyRevenue,TC,110 +CompanyPaysOutFull,TC,110 +Payout,Bob,66,6,10 +Payout,Chester,11,1,10 +PRICE_MOVES_LOG,TC,80,E3,90,F3 + +CompanyOperates,GMO,Joshua +LaysTileAt,GMO,9,I6,SW +LaysTileAt,GMO,8,E6,NE +BuysPrivateFromFor,GMO,O&W,Joshua,200 +CompanyRevenue,GMO,0 +CompanyDoesNotPayDividend,GMO +BuysTrain,GMO,3,IPO,180 +All 3-trains are sold out, 4-trains now available + +CompanyOperates,SOU,Chester +LaysTileAt,SOU,9,E12,SW +LaysTileAt,SOU,8,D13,SW +LAYS_TOKEN_ON,SOU,F11,40 +CompanyRevenue,SOU,230 +CompanyPaysOutFull,SOU,230 +Payout,Chester,138,6,10 +Payout,SOU,92,4,10 +PRICE_MOVES_LOG,SOU,65,E6,70,E5 +BuysTrain,SOU,4,IPO,300 +FirstTrainBought,4 +StartOfPhase,4 + +EndOfOperatingRound,4.2 +ORWorthIncrease,Bob,4.2,216 +ORWorthIncrease,Chester,4.2,214 +ORWorthIncrease,Joshua,4.2,120 +ORWorthIncrease,Rob,4.2,150 +Has,GMO,340 +Has,L&N,222 +Has,SOU,51 +Has,TC,280 +Has,Bob,342 +Has,Chester,311 +Has,Joshua,273 +Has,Rob,239 +StartStockRound,5 +HasPriority,Rob +SELL_SHARES_LOG,Rob,2,10,20,L&N,170 +PRICE_MOVES_LOG,L&N,85,G4,80,G5 +START_COMPANY_LOG,Rob,IC,65,195,3,30,BANK +SELL_SHARE_LOG,Bob,10,TC,90 +PRICE_MOVES_LOG,TC,90,F3,80,F4 +BUY_SHARE_LOG,Bob,10,SOU,Pool,70 +SELL_SHARE_LOG,Chester,10,TC,80 +PRICE_MOVES_LOG,TC,80,F4,75,F5 +SELL_SHARE_LOG,Chester,10,SOU,70 +PRICE_MOVES_LOG,SOU,70,E5,65,E6 +START_COMPANY_LOG,Chester,NC,75,150,2,20,BANK +BUY_SHARE_LOG,Joshua,10,SOU,Pool,65 +BUY_SHARE_LOG,Rob,10,IC,IPO,65 +BUY_SHARE_LOG,Bob,10,SOU,Pool,65 +BUY_SHARE_LOG,Chester,10,GMO,IPO,90 +BUY_SHARE_LOG,Joshua,10,SOU,Pool,65 +BUY_SHARE_LOG,Rob,10,IC,IPO,65 +BUY_SHARE_LOG,Bob,10,SOU,Pool,65 +BUY_SHARE_LOG,Chester,10,NC,IPO,75 +BUY_SHARE_LOG,Joshua,10,TC,Pool,75 +BUY_SHARE_LOG,Rob,10,IC,IPO,65 +FloatsWithCash,IC,650 +BUY_SHARE_LOG,Bob,10,IC,IPO,65 +BUY_SHARE_LOG,Chester,10,NC,IPO,75 +SELL_SHARE_LOG,Chester,10,GMO,80 +PRICE_MOVES_LOG,GMO,80,D2,70,D3 +BUY_SHARE_LOG,Joshua,10,IC,IPO,65 +Autopasses,Rob +BUY_SHARE_LOG,Bob,10,IC,IPO,65 +SELL_SHARES_LOG,Bob,2,10,20,IC,130 +PRICE_MOVES_LOG,IC,65,D4,55,D6 +BUY_SHARE_LOG,Chester,10,NC,IPO,75 +Autopasses,Joshua +Autopasses,Rob +BUY_SHARE_LOG,Bob,10,GMO,Pool,70 +BUY_SHARE_LOG,Chester,10,NC,IPO,75 +FloatsWithCash,NC,750 +Autopasses,Joshua +Autopasses,Rob +BUY_SHARE_LOG,Bob,10,NC,IPO,75 +Autopasses,Chester +Autopasses,Joshua +Autopasses,Rob +BUY_SHARE_LOG,Bob,10,NC,IPO,75 +SELL_SHARES_LOG,Bob,2,10,20,NC,150 +PRICE_MOVES_LOG,NC,75,E4,65,E6 +Autopasses,Chester +Autopasses,Joshua +Autopasses,Rob +SELL_SHARE_LOG,Bob,10,SOU,65 +PRICE_MOVES_LOG,SOU,65,E6,60,E7 +BUY_SHARE_LOG,Bob,10,L&N,Pool,80 +Autopasses,Chester +Autopasses,Joshua +Autopasses,Rob +BUY_SHARE_LOG,Bob,10,GMO,IPO,90 +Autopasses,Chester +Autopasses,Joshua +Autopasses,Rob +PASSES,Bob + +END_SR,5 +Has,GMO,340 +Has,IC,650 +Has,L&N,222 +Has,NC,750 +Has,SOU,51 +Has,TC,280 +Has,Bob,57 +Has,Chester,1 +Has,Joshua,3 +Has,Rob,19 +START_OR,5.1 +ReceivesFor,TC,5,TCC +ReceivesFor,SOU,10,ET&WNC +ReceivesFor,TC,15,M&C +ReceivesFor,GMO,20,O&W + +CompanyOperates,L&N,Rob +LaysTileAt,L&N,141,E10,SW +CompanyRevenue,L&N,110 +CompanyWithholds,L&N,110 +PRICE_MOVES_LOG,L&N,80,G5,75,F5 +BuysTrain,L&N,4,IPO,300 + +CompanyOperates,TC,Bob +LaysTileAt,TC,24,C12,NE +CompanyRevenue,TC,120 +CompanyPaysOutFull,TC,120 +Payout,Bob,60,5,10 +Payout,Joshua,12,1,10 +Payout,TC,12,1,10 +PRICE_MOVES_LOG,TC,75,F5,80,G5 +BuysTrain,TC,4,IPO,300 +All 4-trains are sold out, 5-trains now available + +CompanyOperates,GMO,Joshua +LaysTileAtFor,GMO,6,D7,NE,40 +LaysTileAt,GMO,8,C6,SE +CompanyRevenue,GMO,150 +CompanyPaysOutFull,GMO,150 +Payout,Bob,30,2,10 +Payout,Joshua,90,6,10 +PRICE_MOVES_LOG,GMO,70,D3,80,E3 + +CompanyOperates,NC,Chester +LaysTileAtFor,NC,8,H13,NW,60 +LaysTileAt,NC,9,G10,W +CompanyDoesNotPayDividend,NC +PRICE_MOVES_LOG,NC,65,E6,55,D6 +BuysTrain,NC,5,IPO,450 +FirstTrainBought,5 +StartOfPhase,5 +PrivateCloses,TCC +PrivateCloses,ET&WNC +PrivateCloses,M&C +PrivateCloses,O&W +BuysTrain,NC,3,SOU,240 + +CompanyOperates,SOU,Chester +LaysTileAt,SOU,24,B15,W +CompanyRevenue,SOU,170 +CompanyWithholds,SOU,170 +PRICE_MOVES_LOG,SOU,60,E7,50,D7 +BuysTrain,SOU,5,IPO,450 +All 5-trains are sold out, 6-trains now available + +CompanyOperates,IC,Rob +LaysTileAt,IC,619,D7,W +CompanyDoesNotPayDividend,IC +PRICE_MOVES_LOG,IC,55,D6,45,C6 +BuysTrain,IC,6,IPO,630 +FirstTrainBought,6 +StartOfPhase,6 + +EndOfOperatingRound,5.1 +ORWorthIncrease,Bob,5.1,110 +ORWorthIncrease,Chester,5.1,-115 +ORWorthIncrease,Joshua,5.1,137 +ORWorthIncrease,Rob,5.1,-80 +Has,GMO,320 +Has,IC,20 +Has,L&N,32 +Has,NC,0 +Has,SOU,21 +Has,TC,12 +Has,Bob,147 +Has,Chester,1 +Has,Joshua,105 +Has,Rob,19 +START_OR,5.2 + +CompanyOperates,TC,Bob +LaysTileAt,TC,170,F11,SW +CompanyRevenue,TC,190 +CompanyPaysOutFull,TC,190 +Payout,Bob,95,5,10 +Payout,Joshua,19,1,10 +Payout,TC,19,1,10 +PRICE_MOVES_LOG,TC,80,G5,85,G4 + +CompanyOperates,GMO,Joshua +LaysTileAt,GMO,14,G6,NW +LAYS_TOKEN_ON,GMO,D7,40 +CompanyDoesNotPayDividend,GMO +PRICE_MOVES_LOG,GMO,80,E3,70,D3 +PlayerMustSellShares,Joshua,226 +SELL_SHARES_LOG,Joshua,1,10,10,TC,85 +PRICE_MOVES_LOG,TC,85,G4,80,G5 +SELL_SHARES_LOG,Joshua,1,10,10,IC,45 +PRICE_MOVES_LOG,IC,45,C6,40,C7 +SELL_SHARES_LOG,Joshua,2,10,20,SOU,100 +PresidentAddsCash,GMO,Joshua,350 +BuysTrain,GMO,6,IPO,630 +All 6-trains are sold out, 8-trains now available +StartOfPhase,6½ + +CompanyOperates,L&N,Rob +LaysTileAt,L&N,8,D9,SE +LaysTileAt,L&N,8,E18,NW +CompanyRevenue,L&N,190 +CompanyWithholds,L&N,190 +PRICE_MOVES_LOG,L&N,75,F5,70,E5 +TrainsObsoleteRusted,4,L&N +PlayerMustSellShares,Rob,459 +SELL_SHARES_LOG,Rob,2,10,20,IC,80 +SELL_SHARES_LOG,Rob,1,10,10,L&N,70 +PRICE_MOVES_LOG,L&N,70,E5,65,E6 +PlayerIsBankrupt,Rob +GameOver +EoGWinnerBob! +EoGFinalRanking : +1. 947 Bob +2. 646 Chester +3. 424 Joshua +4. 355 Rob diff --git a/test/data/test/1835_PRHasTwoExcessTrains.report b/test/data/test/1835_PRHasTwoExcessTrains.report index 3380c38..8da4ccc 100644 --- a/test/data/test/1835_PRHasTwoExcessTrains.report +++ b/test/data/test/1835_PRHasTwoExcessTrains.report @@ -1,1143 +1,2286 @@ -GameIs,1835 -PlayerIs,1,Alice -PlayerIs,2,Bob -PlayerIs,3,Charlie -PlayerCash,600 -BankHas,10200 -StartOfPhase,2 -BankSizeIs,10200 -StartOfInitialRound -HasPriority,Alice -BuysItemFor,Alice,NF,100 -ALSO_GETS,Alice,CERT_NAME,BY,10 -BuysItemFor,Bob,M1,80 -FloatsWithCash,M1,80 -BuysItemFor,Charlie,LD,190 -ALSO_GETS,Charlie,PRES_CERT_NAME,SX,20 -BuysItemFor,Alice,M2,170 -FloatsWithCash,M2,170 -BuysItemFor,Bob,M3,80 -FloatsWithCash,M3,80 -BuysItemFor,Charlie,M4,160 -FloatsWithCash,M4,160 -BuysItemFor,Alice,PRES_CERT_NAME,BY,20,184 -BuysItemFor,Bob,BB,130 -BuysItemFor,Charlie,HB,160 -BuysItemFor,Alice,OBB,120 -ALSO_GETS,Alice,CERT_NAME,BY,10 -BuysItemFor,Bob,PfB,150 -ALSO_GETS,Bob,CERT_NAME,BY,10 -FloatsWithCash,BY,460 -BuysItemFor,Charlie,M5,80 -FloatsWithCash,M5,80 -CannotBuyAnything,Alice -BuysItemFor,Bob,M6,80 -FloatsWithCash,M6,80 -Has,M1,80 -Has,M2,170 -Has,M3,80 -Has,M4,160 -Has,M5,80 -Has,M6,80 -Has,BY,460 -Has,Alice,26 -Has,Bob,80 -Has,Charlie,10 -StartStockRound,1 -HasPriority,Charlie -PASSES,Charlie -PASSES,Alice -PASSES,Bob - -END_SR,1 -Has,M1,80 -Has,M2,170 -Has,M3,80 -Has,M4,160 -Has,M5,80 -Has,M6,80 -Has,BY,460 -Has,Alice,26 -Has,Bob,80 -Has,Charlie,10 -START_OR,1.1 -ReceivesFor,Alice,5,NF -ReceivesFor,Alice,10,OBB -ReceivesFor,Bob,15,PfB -ReceivesFor,Charlie,20,LD -ReceivesFor,Bob,25,BB -ReceivesFor,Charlie,30,HB - -CompanyOperates,M1,Bob -LaysTileAt,M1,202,H2,W -CompanyDoesNotPayDividend,M1 -BuysTrain,M1,2,IPO,80 -FirstTrainBought,2 - -CompanyOperates,M2,Alice -LaysTileAt,M2,8,E17,NW -CompanyDoesNotPayDividend,M2 -BuysTrain,M2,2,IPO,80 - -CompanyOperates,M3,Bob -LaysTileAt,M3,6,F14,NW -CompanyDoesNotPayDividend,M3 -BuysTrain,M3,2,IPO,80 - -CompanyOperates,M4,Charlie -LaysTileAt,M4,57,G5,SW -CompanyDoesNotPayDividend,M4 -BuysTrain,M4,2,IPO,80 -BuysTrain,M4,2,IPO,80 - -CompanyOperates,M5,Charlie -LaysTileAt,M5,8,D18,NE -CompanyDoesNotPayDividend,M5 -BuysTrain,M5,2,IPO,80 - -CompanyOperates,M6,Bob -LaysTileAt,M6,9,B10,NW -CompanyDoesNotPayDividend,M6 -BuysTrain,M6,2,IPO,80 - -CompanyOperates,BY,Alice -LAYS_FREE_TOKEN_ON,BY,L14 -PrivateCloses,NF -LaysTileAtFor,BY,9,K15,SW,70 -LaysTileAt,BY,1,I17,SW -LaysTileAt,BY,58,M15,SW -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,Alice,1.1,-109 -ORWorthIncrease,Bob,1.1,34 -ORWorthIncrease,Charlie,1.1,50 -Has,M1,0 -Has,M2,90 -Has,M3,0 -Has,M4,0 -Has,M5,0 -Has,M6,0 -Has,BY,110 -Has,Alice,41 -Has,Bob,120 -Has,Charlie,60 -StartStockRound,2 -HasPriority,Charlie -PASSES,Charlie -PASSES,Alice -BUY_SHARE_LOG,Bob,10,BY,IPO,92 -PriceIsPaidTo,92,BY -PASSES,Charlie -PASSES,Alice -PASSES,Bob - -END_SR,2 -Has,M1,0 -Has,M2,90 -Has,M3,0 -Has,M4,0 -Has,M5,0 -Has,M6,0 -Has,BY,202 -Has,Alice,41 -Has,Bob,28 -Has,Charlie,60 -START_OR,2.1 -ReceivesFor,Alice,10,OBB -ReceivesFor,Bob,15,PfB -ReceivesFor,Charlie,20,LD -ReceivesFor,Bob,25,BB -ReceivesFor,Charlie,30,HB - -Company... [truncated message content] |
From: Erik V. <ev...@us...> - 2012-05-20 12:46:17
|
LocalisedText.properties | 3 data/18TN/Game.xml | 1 rails/game/Phase.java | 8 test/data/real/18TN_A.report | 1225 ++++++++++++------------ test/data/test/1835_PRHasTwoExcessTrains.report | 1 test/data/test/1835_PR_3rdTrain.report | 1 test/data/test/1835_SellDoubleShare.report | 1 7 files changed, 626 insertions(+), 614 deletions(-) New commits: commit 4616fb5a819464edd4715d2b94b4b95685c5decb Author: Erik Vos <eri...@xs...> Date: Sun May 20 14:45:17 2012 +0200 Phase extra info is now also reported. Applied to 18TN Civil War start. 18TN and 1835 test cases replaced. diff --git a/LocalisedText.properties b/LocalisedText.properties index 4eb2d0a..f349945 100644 --- a/LocalisedText.properties +++ b/LocalisedText.properties @@ -129,6 +129,7 @@ CantStart={0} cannot start company {1} for {2}: {3} CertificateLimit=The certificate limit is now {0} ({1} players, {2} companies) CityHasNoEmptySlots=City has not empty slots CivilWarActive=Civil War is active. +CivilWarBegins=Civil War begins. One train per company is unusable for one round. ClassCannotBeInstantiated=Class {0} cannot be instantiated ClickForSell=Click to select for selling ClickToSelectForBuying=Click to select for buying @@ -542,7 +543,7 @@ PRICE_STAYS_LOG={0} price stays at {1}({2}). PRIVATES=Privates PaysLoanInterest={0} pays {1} interest for outstanding loans Pass=Pass -PhaseClosesAllPrivates=Close all privates +PhaseClosesAllPrivates=All privates close PhaseNumberOfORs=Number of ORs: {0} PhaseOffBoardStep=Off-board revenue step: {0} PhaseTrainLimitStep=Train limit step: {0} diff --git a/data/18TN/Game.xml b/data/18TN/Game.xml index 62f3209..334fdfb 100644 --- a/data/18TN/Game.xml +++ b/data/18TN/Game.xml @@ -104,6 +104,7 @@ </Phase> <Phase name="3½"> <Action name="CivilWar"/><!-- No value needed --> + <Info key="CivilWarBegins"/> </Phase> <Phase name="4"> <Trains rusted="2" limitStep="2" onePerTurn="no"/> diff --git a/rails/game/Phase.java b/rails/game/Phase.java index add140e..8f700dc 100644 --- a/rails/game/Phase.java +++ b/rails/game/Phase.java @@ -292,6 +292,12 @@ public class Phase implements PhaseI { /** Called when a phase gets activated */ public void activate() { log.debug("Phase " + name + " activated"); + + // Report any extra info + if (Util.hasValue(extraInfo)) { + ReportBuffer.add(extraInfo.replaceFirst("^<[Bb][Rr]>", "").replaceAll("<[Bb][Rr]>", "\n")); + } + if (closedObjects != null && !closedObjects.isEmpty()) { for (Closeable object : closedObjects) { log.debug("Closing object " + object.toString()); @@ -318,7 +324,7 @@ public class Phase implements PhaseI { gameManager.processPhaseAction (actionName, actions.get(actionName)); } } - + } public void setLastTrainBuyer(Portfolio lastTrainBuyer) { diff --git a/test/data/real/18TN_A.report b/test/data/real/18TN_A.report index 2771851..3a94cdc 100644 --- a/test/data/real/18TN_A.report +++ b/test/data/real/18TN_A.report @@ -1,612 +1,613 @@ -GameIs,18TN -PlayerIs,1,Bob -PlayerIs,2,Chester -PlayerIs,3,Joshua -PlayerIs,4,Rob -PlayerCash,450 -BankHas,6200 -StartOfPhase,2 -BankSizeIs,6200 -StartOfInitialRound -HasPriority,Bob -BID_ITEM_LOG,Bob,75,M&C,375 -BID_ITEM_LOG,Chester,180,L&N,270 -BID_ITEM_LOG,Joshua,105,O&W,345 -BID_ITEM_LOG,Rob,185,L&N,265 -BuysItemFor,Bob,TCC,20 -BuysItemFor,Chester,ET&WNC,40 -BuysItemFor,Bob,M&C,75 -BuysItemFor,Joshua,O&W,105 -TO_AUCTION,L&N -BID_ITEM_LOG,Chester,190,L&N,220 -BID_ITEM_LOG,Rob,195,L&N,255 -PASSES,Chester -BuysItemFor,Rob,PRES_CERT_NAME,L&N,20,195 -FloatsWithCash,L&N,800 -Has,L&N,800 -Has,Bob,355 -Has,Chester,410 -Has,Joshua,345 -Has,Rob,255 -StartStockRound,1 -HasPriority,Joshua -PASSES,Joshua -BUY_SHARE_LOG,Rob,10,L&N,IPO,80 -BUY_SHARE_LOG,Bob,10,L&N,IPO,80 -START_COMPANY_LOG,Chester,SOU,65,130,2,20,BANK -BUY_SHARE_LOG,Joshua,10,L&N,IPO,80 -BUY_SHARE_LOG,Rob,10,L&N,IPO,80 -PASSES,Bob -BUY_SHARE_LOG,Chester,10,SOU,IPO,65 -BUY_SHARE_LOG,Joshua,10,L&N,IPO,80 -BUY_SHARE_LOG,Rob,10,L&N,IPO,80 -PASSES,Bob -BUY_SHARE_LOG,Chester,10,SOU,IPO,65 -BUY_SHARE_LOG,Joshua,10,L&N,IPO,80 -Autopasses,Rob -BUY_SHARE_LOG,Bob,10,L&N,IPO,80 -BUY_SHARE_LOG,Chester,10,SOU,IPO,65 -PASSES,Joshua -Autopasses,Rob -PASSES,Bob -BUY_SHARE_LOG,Chester,10,SOU,IPO,65 -FloatsWithCash,SOU,650 -Autopasses,Joshua -Autopasses,Rob -BUY_SHARE_LOG,Bob,10,SOU,IPO,65 -PASSES,Chester -Autopasses,Joshua -Autopasses,Rob -BUY_SHARE_LOG,Bob,10,SOU,IPO,65 -PASSES,Chester -Autopasses,Joshua -Autopasses,Rob -BUY_SHARE_LOG,Bob,10,SOU,IPO,65 -PASSES,Chester -Autopasses,Joshua -Autopasses,Rob -PASSES,Bob - -END_SR,1 -PRICE_MOVES_LOG,L&N,80,E3,90,E2 -SoldOut,L&N,80,E3,90,E2 -Has,L&N,800 -Has,SOU,650 -Has,Bob,0 -Has,Chester,20 -Has,Joshua,105 -Has,Rob,15 -START_OR,1.1 -ReceivesFor,Bob,5,TCC -ReceivesFor,Chester,10,ET&WNC -ReceivesFor,Bob,15,M&C -ReceivesFor,Joshua,20,O&W - -CompanyOperates,L&N,Rob -LaysTileAtFor,L&N,9,B15,W,60 -LaysTileAt,L&N,5,B17,NE -LAYS_TOKEN_ON,L&N,B17,40 -CompanyDoesNotPayDividend,L&N -PRICE_MOVES_LOG,L&N,90,E2,80,D2 -BuysTrain,L&N,2,IPO,80 -FirstTrainBought,2 - -CompanyOperates,SOU,Chester -BuysPrivateFromFor,SOU,ET&WNC,Chester,40 -LaysTileAt,SOU,8,F19,W -LaysTileAt,SOU,8,E20,E -LaysTileAtFor,SOU,57,F17,W,40 -CompanyDoesNotPayDividend,SOU -PRICE_MOVES_LOG,SOU,65,D4,55,C4 -BuysTrain,SOU,2,IPO,80 - -EndOfOperatingRound,1.1 -ORWorthIncrease,Bob,1.1,-30 -ORWorthIncrease,Chester,1.1,-50 -ORWorthIncrease,Joshua,1.1,-10 -ORWorthIncrease,Rob,1.1,-50 -Has,L&N,620 -Has,SOU,490 -Has,Bob,20 -Has,Chester,70 -Has,Joshua,125 -Has,Rob,15 -StartStockRound,2 -HasPriority,Chester -PASSES,Chester -BUY_SHARE_LOG,Joshua,10,SOU,IPO,65 -Autopasses,Rob -PASSES,Bob -PASSES,Chester -Autopasses,Joshua - -END_SR,2 -PRICE_MOVES_LOG,L&N,80,D2,90,D1 -SoldOut,L&N,80,D2,90,D1 -PRICE_MOVES_LOG,SOU,55,C4,60,C3 -SoldOut,SOU,55,C4,60,C3 -Has,L&N,620 -Has,SOU,490 -Has,Bob,20 -Has,Chester,70 -Has,Joshua,60 -Has,Rob,15 -START_OR,2.1 -ReceivesFor,Bob,5,TCC -ReceivesFor,SOU,10,ET&WNC -ReceivesFor,Bob,15,M&C -ReceivesFor,Joshua,20,O&W - -CompanyOperates,L&N,Rob -LaysTileAt,L&N,58,E10,NE -LaysTileAtFor,L&N,57,F11,NW,40 -CompanyRevenue,L&N,70 -CompanyPaysOutFull,L&N,70 -Payout,Joshua,21,3,10 -Payout,Bob,14,2,10 -Payout,Rob,35,5,10 -PRICE_MOVES_LOG,L&N,90,D1,100,E1 -BuysTrain,L&N,2,IPO,80 - -CompanyOperates,SOU,Chester -LaysTileAtFor,SOU,9,F15,E,60 -LaysTileAt,SOU,58,F13,E -CompanyRevenue,SOU,80 -CompanyPaysOutFull,SOU,80 -Payout,Joshua,8,1,10 -Payout,Bob,24,3,10 -Payout,Chester,48,6,10 -PRICE_MOVES_LOG,SOU,60,C3,70,D3 -BuysTrain,SOU,2,IPO,80 - -EndOfOperatingRound,2.1 -ORWorthIncrease,Bob,2.1,108 -ORWorthIncrease,Chester,2.1,108 -ORWorthIncrease,Joshua,2.1,89 -ORWorthIncrease,Rob,2.1,85 -Has,L&N,500 -Has,SOU,360 -Has,Bob,78 -Has,Chester,118 -Has,Joshua,109 -Has,Rob,50 -StartStockRound,3 -HasPriority,Rob -PASSES,Rob -SELL_SHARES_LOG,Bob,2,10,20,L&N,200 -PRICE_MOVES_LOG,L&N,100,E1,80,E3 -SELL_SHARES_LOG,Bob,3,10,30,SOU,210 -PRICE_MOVES_LOG,SOU,70,D3,55,D6 -START_COMPANY_LOG,Bob,TC,80,160,2,20,BANK -BUY_SHARE_LOG,Chester,10,L&N,Pool,80 -BUY_SHARE_LOG,Joshua,10,L&N,Pool,80 -Autopasses,Rob -BUY_SHARE_LOG,Bob,10,TC,IPO,80 -PASSES,Chester -Autopasses,Joshua -Autopasses,Rob -BUY_SHARE_LOG,Bob,10,TC,IPO,80 -PASSES,Chester -Autopasses,Joshua -Autopasses,Rob -BUY_SHARE_LOG,Bob,10,TC,IPO,80 -PASSES,Chester -Autopasses,Joshua -Autopasses,Rob -BUY_SHARE_LOG,Bob,10,TC,IPO,80 -FloatsWithCash,TC,800 -PASSES,Chester -Autopasses,Joshua -Autopasses,Rob -PASSES,Bob - -END_SR,3 -PRICE_MOVES_LOG,L&N,80,E3,90,E2 -SoldOut,L&N,80,E3,90,E2 -Has,L&N,500 -Has,SOU,360 -Has,TC,800 -Has,Bob,8 -Has,Chester,38 -Has,Joshua,29 -Has,Rob,50 -START_OR,3.1 -ReceivesFor,Bob,5,TCC -ReceivesFor,SOU,10,ET&WNC -ReceivesFor,Bob,15,M&C -ReceivesFor,Joshua,20,O&W - -CompanyOperates,L&N,Rob -LaysTileAt,L&N,5,G12,E -LAYS_TOKEN_ON,L&N,G12,100 -CompanyRevenue,L&N,120 -CompanyPaysOutFull,L&N,120 -Payout,Joshua,48,4,10 -Payout,Rob,60,5,10 -Payout,Chester,12,1,10 -PRICE_MOVES_LOG,L&N,90,E2,100,F2 - -CompanyOperates,TC,Bob -CompanyDoesNotPayDividend,TC -PRICE_MOVES_LOG,TC,80,E3,70,D3 -BuysTrain,TC,2,IPO,80 -All 2-trains are sold out, 3-trains now available - -CompanyOperates,SOU,Chester -CompanyRevenue,SOU,110 -CompanyPaysOutFull,SOU,110 -Payout,Joshua,11,1,10 -Payout,Chester,66,6,10 -Payout,SOU,33,3,10 -PRICE_MOVES_LOG,SOU,55,D6,65,E6 -BuysTrain,SOU,3,IPO,180 -FirstTrainBought,3 -StartOfPhase,3 - -EndOfOperatingRound,3.1 -ORWorthIncrease,Bob,3.1,-40 -ORWorthIncrease,Chester,3.1,148 -ORWorthIncrease,Joshua,3.1,129 -ORWorthIncrease,Rob,3.1,110 -Has,L&N,400 -Has,SOU,223 -Has,TC,720 -Has,Bob,28 -Has,Chester,116 -Has,Joshua,108 -Has,Rob,110 -StartStockRound,4 -HasPriority,Chester -BUY_SHARE_LOG,Chester,10,TC,IPO,80 -SELL_SHARES_LOG,Joshua,4,10,40,L&N,400 -PRICE_MOVES_LOG,L&N,100,F2,75,F5 -SELL_SHARE_LOG,Joshua,10,SOU,65 -PRICE_MOVES_LOG,SOU,65,E6,60,E7 -START_COMPANY_LOG,Joshua,GMO,90,180,2,20,BANK -BUY_SHARE_LOG,Rob,10,L&N,Pool,75 -Autopasses,Bob -Autopasses,Chester -BUY_SHARE_LOG,Joshua,10,GMO,IPO,90 -Autopasses,Rob -Autopasses,Bob -Autopasses,Chester -BUY_SHARE_LOG,Joshua,10,GMO,IPO,90 -Autopasses,Rob -Autopasses,Bob -Autopasses,Chester -BUY_SHARE_LOG,Joshua,10,GMO,IPO,90 -Autopasses,Rob -Autopasses,Bob -Autopasses,Chester -BUY_SHARE_LOG,Joshua,10,GMO,IPO,90 -FloatsWithCash,GMO,900 -Autopasses,Rob -Autopasses,Bob -Autopasses,Chester -PASSES,Joshua - -END_SR,4 -Has,GMO,900 -Has,L&N,400 -Has,SOU,223 -Has,TC,720 -Has,Bob,28 -Has,Chester,36 -Has,Joshua,33 -Has,Rob,35 -START_OR,4.1 -ReceivesFor,Bob,5,TCC -ReceivesFor,SOU,10,ET&WNC -ReceivesFor,Bob,15,M&C -ReceivesFor,Joshua,20,O&W - -CompanyOperates,GMO,Joshua -LaysTileAt,GMO,6,H7,NE -LaysTileAt,GMO,8,F7,SW -CompanyDoesNotPayDividend,GMO -PRICE_MOVES_LOG,GMO,90,E2,80,D2 -BuysTrain,GMO,3,IPO,180 - -CompanyOperates,L&N,Rob -LaysTileAt,L&N,15,B17,SE -CompanyRevenue,L&N,140 -CompanyPaysOutFull,L&N,140 -Payout,Chester,14,1,10 -Payout,Rob,84,6,10 -Payout,L&N,42,3,10 -PRICE_MOVES_LOG,L&N,75,F5,80,G5 -BuysTrain,L&N,3,IPO,180 - -CompanyOperates,TC,Bob -LaysTileAtFor,TC,8,C18,SW,60 -LaysTileAt,TC,8,D17,NE -LAYS_TOKEN_ON,TC,B17,40 -CompanyRevenue,TC,80 -CompanyPaysOutFull,TC,80 -Payout,Chester,8,1,10 -Payout,Bob,48,6,10 -PRICE_MOVES_LOG,TC,70,D3,80,E3 -BuysTrain,TC,3,IPO,180 -StartOfPhase,3½ - -CompanyOperates,SOU,Chester -LaysTileAt,SOU,619,G12,SW -CompanyRevenue,SOU,140 -CompanyPaysOutFull,SOU,140 -Payout,Chester,84,6,10 -Payout,SOU,56,4,10 -PRICE_MOVES_LOG,SOU,60,E7,65,E6 - -EndOfOperatingRound,4.1 -ORWorthIncrease,Bob,4.1,128 -ORWorthIncrease,Chester,4.1,151 -ORWorthIncrease,Joshua,4.1,-40 -ORWorthIncrease,Rob,4.1,114 -Has,GMO,720 -Has,L&N,262 -Has,SOU,289 -Has,TC,440 -Has,Bob,96 -Has,Chester,142 -Has,Joshua,53 -Has,Rob,119 -START_OR,4.2 -ReceivesFor,Bob,5,TCC -ReceivesFor,SOU,10,ET&WNC -ReceivesFor,Bob,15,M&C -ReceivesFor,Joshua,20,O&W - -CompanyOperates,L&N,Rob -LaysTileAt,L&N,15,F17,E -LAYS_TOKEN_ON,L&N,F17,100 -CompanyRevenue,L&N,200 -CompanyPaysOutFull,L&N,200 -Payout,Chester,20,1,10 -Payout,Rob,120,6,10 -Payout,L&N,60,3,10 -PRICE_MOVES_LOG,L&N,80,G5,85,G4 - -CompanyOperates,TC,Bob -BuysPrivateFromFor,TC,TCC,Bob,40 -BuysPrivateFromFor,TC,M&C,Bob,120 -LaysTileAt,TC,8,H5,NW -LaysTileAt,TC,599,F11,NE -CompanyRevenue,TC,110 -CompanyPaysOutFull,TC,110 -Payout,Bob,66,6,10 -Payout,Chester,11,1,10 -PRICE_MOVES_LOG,TC,80,E3,90,F3 - -CompanyOperates,GMO,Joshua -LaysTileAt,GMO,9,I6,SW -LaysTileAt,GMO,8,E6,NE -BuysPrivateFromFor,GMO,O&W,Joshua,200 -CompanyRevenue,GMO,0 -CompanyDoesNotPayDividend,GMO -BuysTrain,GMO,3,IPO,180 -All 3-trains are sold out, 4-trains now available - -CompanyOperates,SOU,Chester -LaysTileAt,SOU,9,E12,SW -LaysTileAt,SOU,8,D13,SW -LAYS_TOKEN_ON,SOU,F11,40 -CompanyRevenue,SOU,230 -CompanyPaysOutFull,SOU,230 -Payout,Chester,138,6,10 -Payout,SOU,92,4,10 -PRICE_MOVES_LOG,SOU,65,E6,70,E5 -BuysTrain,SOU,4,IPO,300 -FirstTrainBought,4 -StartOfPhase,4 - -EndOfOperatingRound,4.2 -ORWorthIncrease,Bob,4.2,216 -ORWorthIncrease,Chester,4.2,214 -ORWorthIncrease,Joshua,4.2,120 -ORWorthIncrease,Rob,4.2,150 -Has,GMO,340 -Has,L&N,222 -Has,SOU,51 -Has,TC,280 -Has,Bob,342 -Has,Chester,311 -Has,Joshua,273 -Has,Rob,239 -StartStockRound,5 -HasPriority,Rob -SELL_SHARES_LOG,Rob,2,10,20,L&N,170 -PRICE_MOVES_LOG,L&N,85,G4,80,G5 -START_COMPANY_LOG,Rob,IC,65,195,3,30,BANK -SELL_SHARE_LOG,Bob,10,TC,90 -PRICE_MOVES_LOG,TC,90,F3,80,F4 -BUY_SHARE_LOG,Bob,10,SOU,Pool,70 -SELL_SHARE_LOG,Chester,10,TC,80 -PRICE_MOVES_LOG,TC,80,F4,75,F5 -SELL_SHARE_LOG,Chester,10,SOU,70 -PRICE_MOVES_LOG,SOU,70,E5,65,E6 -START_COMPANY_LOG,Chester,NC,75,150,2,20,BANK -BUY_SHARE_LOG,Joshua,10,SOU,Pool,65 -BUY_SHARE_LOG,Rob,10,IC,IPO,65 -BUY_SHARE_LOG,Bob,10,SOU,Pool,65 -BUY_SHARE_LOG,Chester,10,GMO,IPO,90 -BUY_SHARE_LOG,Joshua,10,SOU,Pool,65 -BUY_SHARE_LOG,Rob,10,IC,IPO,65 -BUY_SHARE_LOG,Bob,10,SOU,Pool,65 -BUY_SHARE_LOG,Chester,10,NC,IPO,75 -BUY_SHARE_LOG,Joshua,10,TC,Pool,75 -BUY_SHARE_LOG,Rob,10,IC,IPO,65 -FloatsWithCash,IC,650 -BUY_SHARE_LOG,Bob,10,IC,IPO,65 -BUY_SHARE_LOG,Chester,10,NC,IPO,75 -SELL_SHARE_LOG,Chester,10,GMO,80 -PRICE_MOVES_LOG,GMO,80,D2,70,D3 -BUY_SHARE_LOG,Joshua,10,IC,IPO,65 -Autopasses,Rob -BUY_SHARE_LOG,Bob,10,IC,IPO,65 -SELL_SHARES_LOG,Bob,2,10,20,IC,130 -PRICE_MOVES_LOG,IC,65,D4,55,D6 -BUY_SHARE_LOG,Chester,10,NC,IPO,75 -Autopasses,Joshua -Autopasses,Rob -BUY_SHARE_LOG,Bob,10,GMO,Pool,70 -BUY_SHARE_LOG,Chester,10,NC,IPO,75 -FloatsWithCash,NC,750 -Autopasses,Joshua -Autopasses,Rob -BUY_SHARE_LOG,Bob,10,NC,IPO,75 -Autopasses,Chester -Autopasses,Joshua -Autopasses,Rob -BUY_SHARE_LOG,Bob,10,NC,IPO,75 -SELL_SHARES_LOG,Bob,2,10,20,NC,150 -PRICE_MOVES_LOG,NC,75,E4,65,E6 -Autopasses,Chester -Autopasses,Joshua -Autopasses,Rob -SELL_SHARE_LOG,Bob,10,SOU,65 -PRICE_MOVES_LOG,SOU,65,E6,60,E7 -BUY_SHARE_LOG,Bob,10,L&N,Pool,80 -Autopasses,Chester -Autopasses,Joshua -Autopasses,Rob -BUY_SHARE_LOG,Bob,10,GMO,IPO,90 -Autopasses,Chester -Autopasses,Joshua -Autopasses,Rob -PASSES,Bob - -END_SR,5 -Has,GMO,340 -Has,IC,650 -Has,L&N,222 -Has,NC,750 -Has,SOU,51 -Has,TC,280 -Has,Bob,57 -Has,Chester,1 -Has,Joshua,3 -Has,Rob,19 -START_OR,5.1 -ReceivesFor,TC,5,TCC -ReceivesFor,SOU,10,ET&WNC -ReceivesFor,TC,15,M&C -ReceivesFor,GMO,20,O&W - -CompanyOperates,L&N,Rob -LaysTileAt,L&N,141,E10,SW -CompanyRevenue,L&N,110 -CompanyWithholds,L&N,110 -PRICE_MOVES_LOG,L&N,80,G5,75,F5 -BuysTrain,L&N,4,IPO,300 - -CompanyOperates,TC,Bob -LaysTileAt,TC,24,C12,NE -CompanyRevenue,TC,120 -CompanyPaysOutFull,TC,120 -Payout,Bob,60,5,10 -Payout,Joshua,12,1,10 -Payout,TC,12,1,10 -PRICE_MOVES_LOG,TC,75,F5,80,G5 -BuysTrain,TC,4,IPO,300 -All 4-trains are sold out, 5-trains now available - -CompanyOperates,GMO,Joshua -LaysTileAtFor,GMO,6,D7,NE,40 -LaysTileAt,GMO,8,C6,SE -CompanyRevenue,GMO,150 -CompanyPaysOutFull,GMO,150 -Payout,Bob,30,2,10 -Payout,Joshua,90,6,10 -PRICE_MOVES_LOG,GMO,70,D3,80,E3 - -CompanyOperates,NC,Chester -LaysTileAtFor,NC,8,H13,NW,60 -LaysTileAt,NC,9,G10,W -CompanyDoesNotPayDividend,NC -PRICE_MOVES_LOG,NC,65,E6,55,D6 -BuysTrain,NC,5,IPO,450 -FirstTrainBought,5 -StartOfPhase,5 -PrivateCloses,TCC -PrivateCloses,ET&WNC -PrivateCloses,M&C -PrivateCloses,O&W -BuysTrain,NC,3,SOU,240 - -CompanyOperates,SOU,Chester -LaysTileAt,SOU,24,B15,W -CompanyRevenue,SOU,170 -CompanyWithholds,SOU,170 -PRICE_MOVES_LOG,SOU,60,E7,50,D7 -BuysTrain,SOU,5,IPO,450 -All 5-trains are sold out, 6-trains now available - -CompanyOperates,IC,Rob -LaysTileAt,IC,619,D7,W -CompanyDoesNotPayDividend,IC -PRICE_MOVES_LOG,IC,55,D6,45,C6 -BuysTrain,IC,6,IPO,630 -FirstTrainBought,6 -StartOfPhase,6 - -EndOfOperatingRound,5.1 -ORWorthIncrease,Bob,5.1,110 -ORWorthIncrease,Chester,5.1,-115 -ORWorthIncrease,Joshua,5.1,137 -ORWorthIncrease,Rob,5.1,-80 -Has,GMO,320 -Has,IC,20 -Has,L&N,32 -Has,NC,0 -Has,SOU,21 -Has,TC,12 -Has,Bob,147 -Has,Chester,1 -Has,Joshua,105 -Has,Rob,19 -START_OR,5.2 - -CompanyOperates,TC,Bob -LaysTileAt,TC,170,F11,SW -CompanyRevenue,TC,190 -CompanyPaysOutFull,TC,190 -Payout,Bob,95,5,10 -Payout,Joshua,19,1,10 -Payout,TC,19,1,10 -PRICE_MOVES_LOG,TC,80,G5,85,G4 - -CompanyOperates,GMO,Joshua -LaysTileAt,GMO,14,G6,NW -LAYS_TOKEN_ON,GMO,D7,40 -CompanyDoesNotPayDividend,GMO -PRICE_MOVES_LOG,GMO,80,E3,70,D3 -PlayerMustSellShares,Joshua,226 -SELL_SHARES_LOG,Joshua,1,10,10,TC,85 -PRICE_MOVES_LOG,TC,85,G4,80,G5 -SELL_SHARES_LOG,Joshua,1,10,10,IC,45 -PRICE_MOVES_LOG,IC,45,C6,40,C7 -SELL_SHARES_LOG,Joshua,2,10,20,SOU,100 -PresidentAddsCash,GMO,Joshua,350 -BuysTrain,GMO,6,IPO,630 -All 6-trains are sold out, 8-trains now available -StartOfPhase,6½ - -CompanyOperates,L&N,Rob -LaysTileAt,L&N,8,D9,SE -LaysTileAt,L&N,8,E18,NW -CompanyRevenue,L&N,190 -CompanyWithholds,L&N,190 -PRICE_MOVES_LOG,L&N,75,F5,70,E5 -TrainsObsoleteRusted,4,L&N -PlayerMustSellShares,Rob,459 -SELL_SHARES_LOG,Rob,2,10,20,IC,80 -SELL_SHARES_LOG,Rob,1,10,10,L&N,70 -PRICE_MOVES_LOG,L&N,70,E5,65,E6 -PlayerIsBankrupt,Rob -GameOver -EoGWinnerBob! -EoGFinalRanking : -1. 947 Bob -2. 646 Chester -3. 424 Joshua -4. 355 Rob +GameIs,18TN +PlayerIs,1,Bob +PlayerIs,2,Chester +PlayerIs,3,Joshua +PlayerIs,4,Rob +PlayerCash,450 +BankHas,6200 +StartOfPhase,2 +BankSizeIs,6200 +StartOfInitialRound +HasPriority,Bob +BID_ITEM_LOG,Bob,75,M&C,375 +BID_ITEM_LOG,Chester,180,L&N,270 +BID_ITEM_LOG,Joshua,105,O&W,345 +BID_ITEM_LOG,Rob,185,L&N,265 +BuysItemFor,Bob,TCC,20 +BuysItemFor,Chester,ET&WNC,40 +BuysItemFor,Bob,M&C,75 +BuysItemFor,Joshua,O&W,105 +TO_AUCTION,L&N +BID_ITEM_LOG,Chester,190,L&N,220 +BID_ITEM_LOG,Rob,195,L&N,255 +PASSES,Chester +BuysItemFor,Rob,PRES_CERT_NAME,L&N,20,195 +FloatsWithCash,L&N,800 +Has,L&N,800 +Has,Bob,355 +Has,Chester,410 +Has,Joshua,345 +Has,Rob,255 +StartStockRound,1 +HasPriority,Joshua +PASSES,Joshua +BUY_SHARE_LOG,Rob,10,L&N,IPO,80 +BUY_SHARE_LOG,Bob,10,L&N,IPO,80 +START_COMPANY_LOG,Chester,SOU,65,130,2,20,BANK +BUY_SHARE_LOG,Joshua,10,L&N,IPO,80 +BUY_SHARE_LOG,Rob,10,L&N,IPO,80 +PASSES,Bob +BUY_SHARE_LOG,Chester,10,SOU,IPO,65 +BUY_SHARE_LOG,Joshua,10,L&N,IPO,80 +BUY_SHARE_LOG,Rob,10,L&N,IPO,80 +PASSES,Bob +BUY_SHARE_LOG,Chester,10,SOU,IPO,65 +BUY_SHARE_LOG,Joshua,10,L&N,IPO,80 +Autopasses,Rob +BUY_SHARE_LOG,Bob,10,L&N,IPO,80 +BUY_SHARE_LOG,Chester,10,SOU,IPO,65 +PASSES,Joshua +Autopasses,Rob +PASSES,Bob +BUY_SHARE_LOG,Chester,10,SOU,IPO,65 +FloatsWithCash,SOU,650 +Autopasses,Joshua +Autopasses,Rob +BUY_SHARE_LOG,Bob,10,SOU,IPO,65 +PASSES,Chester +Autopasses,Joshua +Autopasses,Rob +BUY_SHARE_LOG,Bob,10,SOU,IPO,65 +PASSES,Chester +Autopasses,Joshua +Autopasses,Rob +BUY_SHARE_LOG,Bob,10,SOU,IPO,65 +PASSES,Chester +Autopasses,Joshua +Autopasses,Rob +PASSES,Bob + +END_SR,1 +PRICE_MOVES_LOG,L&N,80,E3,90,E2 +SoldOut,L&N,80,E3,90,E2 +Has,L&N,800 +Has,SOU,650 +Has,Bob,0 +Has,Chester,20 +Has,Joshua,105 +Has,Rob,15 +START_OR,1.1 +ReceivesFor,Bob,5,TCC +ReceivesFor,Chester,10,ET&WNC +ReceivesFor,Bob,15,M&C +ReceivesFor,Joshua,20,O&W + +CompanyOperates,L&N,Rob +LaysTileAtFor,L&N,9,B15,W,60 +LaysTileAt,L&N,5,B17,NE +LAYS_TOKEN_ON,L&N,B17,40 +CompanyDoesNotPayDividend,L&N +PRICE_MOVES_LOG,L&N,90,E2,80,D2 +BuysTrain,L&N,2,IPO,80 +FirstTrainBought,2 + +CompanyOperates,SOU,Chester +BuysPrivateFromFor,SOU,ET&WNC,Chester,40 +LaysTileAt,SOU,8,F19,W +LaysTileAt,SOU,8,E20,E +LaysTileAtFor,SOU,57,F17,W,40 +CompanyDoesNotPayDividend,SOU +PRICE_MOVES_LOG,SOU,65,D4,55,C4 +BuysTrain,SOU,2,IPO,80 + +EndOfOperatingRound,1.1 +ORWorthIncrease,Bob,1.1,-30 +ORWorthIncrease,Chester,1.1,-50 +ORWorthIncrease,Joshua,1.1,-10 +ORWorthIncrease,Rob,1.1,-50 +Has,L&N,620 +Has,SOU,490 +Has,Bob,20 +Has,Chester,70 +Has,Joshua,125 +Has,Rob,15 +StartStockRound,2 +HasPriority,Chester +PASSES,Chester +BUY_SHARE_LOG,Joshua,10,SOU,IPO,65 +Autopasses,Rob +PASSES,Bob +PASSES,Chester +Autopasses,Joshua + +END_SR,2 +PRICE_MOVES_LOG,L&N,80,D2,90,D1 +SoldOut,L&N,80,D2,90,D1 +PRICE_MOVES_LOG,SOU,55,C4,60,C3 +SoldOut,SOU,55,C4,60,C3 +Has,L&N,620 +Has,SOU,490 +Has,Bob,20 +Has,Chester,70 +Has,Joshua,60 +Has,Rob,15 +START_OR,2.1 +ReceivesFor,Bob,5,TCC +ReceivesFor,SOU,10,ET&WNC +ReceivesFor,Bob,15,M&C +ReceivesFor,Joshua,20,O&W + +CompanyOperates,L&N,Rob +LaysTileAt,L&N,58,E10,NE +LaysTileAtFor,L&N,57,F11,NW,40 +CompanyRevenue,L&N,70 +CompanyPaysOutFull,L&N,70 +Payout,Joshua,21,3,10 +Payout,Bob,14,2,10 +Payout,Rob,35,5,10 +PRICE_MOVES_LOG,L&N,90,D1,100,E1 +BuysTrain,L&N,2,IPO,80 + +CompanyOperates,SOU,Chester +LaysTileAtFor,SOU,9,F15,E,60 +LaysTileAt,SOU,58,F13,E +CompanyRevenue,SOU,80 +CompanyPaysOutFull,SOU,80 +Payout,Joshua,8,1,10 +Payout,Bob,24,3,10 +Payout,Chester,48,6,10 +PRICE_MOVES_LOG,SOU,60,C3,70,D3 +BuysTrain,SOU,2,IPO,80 + +EndOfOperatingRound,2.1 +ORWorthIncrease,Bob,2.1,108 +ORWorthIncrease,Chester,2.1,108 +ORWorthIncrease,Joshua,2.1,89 +ORWorthIncrease,Rob,2.1,85 +Has,L&N,500 +Has,SOU,360 +Has,Bob,78 +Has,Chester,118 +Has,Joshua,109 +Has,Rob,50 +StartStockRound,3 +HasPriority,Rob +PASSES,Rob +SELL_SHARES_LOG,Bob,2,10,20,L&N,200 +PRICE_MOVES_LOG,L&N,100,E1,80,E3 +SELL_SHARES_LOG,Bob,3,10,30,SOU,210 +PRICE_MOVES_LOG,SOU,70,D3,55,D6 +START_COMPANY_LOG,Bob,TC,80,160,2,20,BANK +BUY_SHARE_LOG,Chester,10,L&N,Pool,80 +BUY_SHARE_LOG,Joshua,10,L&N,Pool,80 +Autopasses,Rob +BUY_SHARE_LOG,Bob,10,TC,IPO,80 +PASSES,Chester +Autopasses,Joshua +Autopasses,Rob +BUY_SHARE_LOG,Bob,10,TC,IPO,80 +PASSES,Chester +Autopasses,Joshua +Autopasses,Rob +BUY_SHARE_LOG,Bob,10,TC,IPO,80 +PASSES,Chester +Autopasses,Joshua +Autopasses,Rob +BUY_SHARE_LOG,Bob,10,TC,IPO,80 +FloatsWithCash,TC,800 +PASSES,Chester +Autopasses,Joshua +Autopasses,Rob +PASSES,Bob + +END_SR,3 +PRICE_MOVES_LOG,L&N,80,E3,90,E2 +SoldOut,L&N,80,E3,90,E2 +Has,L&N,500 +Has,SOU,360 +Has,TC,800 +Has,Bob,8 +Has,Chester,38 +Has,Joshua,29 +Has,Rob,50 +START_OR,3.1 +ReceivesFor,Bob,5,TCC +ReceivesFor,SOU,10,ET&WNC +ReceivesFor,Bob,15,M&C +ReceivesFor,Joshua,20,O&W + +CompanyOperates,L&N,Rob +LaysTileAt,L&N,5,G12,E +LAYS_TOKEN_ON,L&N,G12,100 +CompanyRevenue,L&N,120 +CompanyPaysOutFull,L&N,120 +Payout,Joshua,48,4,10 +Payout,Rob,60,5,10 +Payout,Chester,12,1,10 +PRICE_MOVES_LOG,L&N,90,E2,100,F2 + +CompanyOperates,TC,Bob +CompanyDoesNotPayDividend,TC +PRICE_MOVES_LOG,TC,80,E3,70,D3 +BuysTrain,TC,2,IPO,80 +All 2-trains are sold out, 3-trains now available + +CompanyOperates,SOU,Chester +CompanyRevenue,SOU,110 +CompanyPaysOutFull,SOU,110 +Payout,Joshua,11,1,10 +Payout,Chester,66,6,10 +Payout,SOU,33,3,10 +PRICE_MOVES_LOG,SOU,55,D6,65,E6 +BuysTrain,SOU,3,IPO,180 +FirstTrainBought,3 +StartOfPhase,3 + +EndOfOperatingRound,3.1 +ORWorthIncrease,Bob,3.1,-40 +ORWorthIncrease,Chester,3.1,148 +ORWorthIncrease,Joshua,3.1,129 +ORWorthIncrease,Rob,3.1,110 +Has,L&N,400 +Has,SOU,223 +Has,TC,720 +Has,Bob,28 +Has,Chester,116 +Has,Joshua,108 +Has,Rob,110 +StartStockRound,4 +HasPriority,Chester +BUY_SHARE_LOG,Chester,10,TC,IPO,80 +SELL_SHARES_LOG,Joshua,4,10,40,L&N,400 +PRICE_MOVES_LOG,L&N,100,F2,75,F5 +SELL_SHARE_LOG,Joshua,10,SOU,65 +PRICE_MOVES_LOG,SOU,65,E6,60,E7 +START_COMPANY_LOG,Joshua,GMO,90,180,2,20,BANK +BUY_SHARE_LOG,Rob,10,L&N,Pool,75 +Autopasses,Bob +Autopasses,Chester +BUY_SHARE_LOG,Joshua,10,GMO,IPO,90 +Autopasses,Rob +Autopasses,Bob +Autopasses,Chester +BUY_SHARE_LOG,Joshua,10,GMO,IPO,90 +Autopasses,Rob +Autopasses,Bob +Autopasses,Chester +BUY_SHARE_LOG,Joshua,10,GMO,IPO,90 +Autopasses,Rob +Autopasses,Bob +Autopasses,Chester +BUY_SHARE_LOG,Joshua,10,GMO,IPO,90 +FloatsWithCash,GMO,900 +Autopasses,Rob +Autopasses,Bob +Autopasses,Chester +PASSES,Joshua + +END_SR,4 +Has,GMO,900 +Has,L&N,400 +Has,SOU,223 +Has,TC,720 +Has,Bob,28 +Has,Chester,36 +Has,Joshua,33 +Has,Rob,35 +START_OR,4.1 +ReceivesFor,Bob,5,TCC +ReceivesFor,SOU,10,ET&WNC +ReceivesFor,Bob,15,M&C +ReceivesFor,Joshua,20,O&W + +CompanyOperates,GMO,Joshua +LaysTileAt,GMO,6,H7,NE +LaysTileAt,GMO,8,F7,SW +CompanyDoesNotPayDividend,GMO +PRICE_MOVES_LOG,GMO,90,E2,80,D2 +BuysTrain,GMO,3,IPO,180 + +CompanyOperates,L&N,Rob +LaysTileAt,L&N,15,B17,SE +CompanyRevenue,L&N,140 +CompanyPaysOutFull,L&N,140 +Payout,Chester,14,1,10 +Payout,Rob,84,6,10 +Payout,L&N,42,3,10 +PRICE_MOVES_LOG,L&N,75,F5,80,G5 +BuysTrain,L&N,3,IPO,180 + +CompanyOperates,TC,Bob +LaysTileAtFor,TC,8,C18,SW,60 +LaysTileAt,TC,8,D17,NE +LAYS_TOKEN_ON,TC,B17,40 +CompanyRevenue,TC,80 +CompanyPaysOutFull,TC,80 +Payout,Chester,8,1,10 +Payout,Bob,48,6,10 +PRICE_MOVES_LOG,TC,70,D3,80,E3 +BuysTrain,TC,3,IPO,180 +StartOfPhase,3½ +CivilWarBegins, + +CompanyOperates,SOU,Chester +LaysTileAt,SOU,619,G12,SW +CompanyRevenue,SOU,140 +CompanyPaysOutFull,SOU,140 +Payout,Chester,84,6,10 +Payout,SOU,56,4,10 +PRICE_MOVES_LOG,SOU,60,E7,65,E6 + +EndOfOperatingRound,4.1 +ORWorthIncrease,Bob,4.1,128 +ORWorthIncrease,Chester,4.1,151 +ORWorthIncrease,Joshua,4.1,-40 +ORWorthIncrease,Rob,4.1,114 +Has,GMO,720 +Has,L&N,262 +Has,SOU,289 +Has,TC,440 +Has,Bob,96 +Has,Chester,142 +Has,Joshua,53 +Has,Rob,119 +START_OR,4.2 +ReceivesFor,Bob,5,TCC +ReceivesFor,SOU,10,ET&WNC +ReceivesFor,Bob,15,M&C +ReceivesFor,Joshua,20,O&W + +CompanyOperates,L&N,Rob +LaysTileAt,L&N,15,F17,E +LAYS_TOKEN_ON,L&N,F17,100 +CompanyRevenue,L&N,200 +CompanyPaysOutFull,L&N,200 +Payout,Chester,20,1,10 +Payout,Rob,120,6,10 +Payout,L&N,60,3,10 +PRICE_MOVES_LOG,L&N,80,G5,85,G4 + +CompanyOperates,TC,Bob +BuysPrivateFromFor,TC,TCC,Bob,40 +BuysPrivateFromFor,TC,M&C,Bob,120 +LaysTileAt,TC,8,H5,NW +LaysTileAt,TC,599,F11,NE +CompanyRevenue,TC,110 +CompanyPaysOutFull,TC,110 +Payout,Bob,66,6,10 +Payout,Chester,11,1,10 +PRICE_MOVES_LOG,TC,80,E3,90,F3 + +CompanyOperates,GMO,Joshua +LaysTileAt,GMO,9,I6,SW +LaysTileAt,GMO,8,E6,NE +BuysPrivateFromFor,GMO,O&W,Joshua,200 +CompanyRevenue,GMO,0 +CompanyDoesNotPayDividend,GMO +BuysTrain,GMO,3,IPO,180 +All 3-trains are sold out, 4-trains now available + +CompanyOperates,SOU,Chester +LaysTileAt,SOU,9,E12,SW +LaysTileAt,SOU,8,D13,SW +LAYS_TOKEN_ON,SOU,F11,40 +CompanyRevenue,SOU,230 +CompanyPaysOutFull,SOU,230 +Payout,Chester,138,6,10 +Payout,SOU,92,4,10 +PRICE_MOVES_LOG,SOU,65,E6,70,E5 +BuysTrain,SOU,4,IPO,300 +FirstTrainBought,4 +StartOfPhase,4 + +EndOfOperatingRound,4.2 +ORWorthIncrease,Bob,4.2,216 +ORWorthIncrease,Chester,4.2,214 +ORWorthIncrease,Joshua,4.2,120 +ORWorthIncrease,Rob,4.2,150 +Has,GMO,340 +Has,L&N,222 +Has,SOU,51 +Has,TC,280 +Has,Bob,342 +Has,Chester,311 +Has,Joshua,273 +Has,Rob,239 +StartStockRound,5 +HasPriority,Rob +SELL_SHARES_LOG,Rob,2,10,20,L&N,170 +PRICE_MOVES_LOG,L&N,85,G4,80,G5 +START_COMPANY_LOG,Rob,IC,65,195,3,30,BANK +SELL_SHARE_LOG,Bob,10,TC,90 +PRICE_MOVES_LOG,TC,90,F3,80,F4 +BUY_SHARE_LOG,Bob,10,SOU,Pool,70 +SELL_SHARE_LOG,Chester,10,TC,80 +PRICE_MOVES_LOG,TC,80,F4,75,F5 +SELL_SHARE_LOG,Chester,10,SOU,70 +PRICE_MOVES_LOG,SOU,70,E5,65,E6 +START_COMPANY_LOG,Chester,NC,75,150,2,20,BANK +BUY_SHARE_LOG,Joshua,10,SOU,Pool,65 +BUY_SHARE_LOG,Rob,10,IC,IPO,65 +BUY_SHARE_LOG,Bob,10,SOU,Pool,65 +BUY_SHARE_LOG,Chester,10,GMO,IPO,90 +BUY_SHARE_LOG,Joshua,10,SOU,Pool,65 +BUY_SHARE_LOG,Rob,10,IC,IPO,65 +BUY_SHARE_LOG,Bob,10,SOU,Pool,65 +BUY_SHARE_LOG,Chester,10,NC,IPO,75 +BUY_SHARE_LOG,Joshua,10,TC,Pool,75 +BUY_SHARE_LOG,Rob,10,IC,IPO,65 +FloatsWithCash,IC,650 +BUY_SHARE_LOG,Bob,10,IC,IPO,65 +BUY_SHARE_LOG,Chester,10,NC,IPO,75 +SELL_SHARE_LOG,Chester,10,GMO,80 +PRICE_MOVES_LOG,GMO,80,D2,70,D3 +BUY_SHARE_LOG,Joshua,10,IC,IPO,65 +Autopasses,Rob +BUY_SHARE_LOG,Bob,10,IC,IPO,65 +SELL_SHARES_LOG,Bob,2,10,20,IC,130 +PRICE_MOVES_LOG,IC,65,D4,55,D6 +BUY_SHARE_LOG,Chester,10,NC,IPO,75 +Autopasses,Joshua +Autopasses,Rob +BUY_SHARE_LOG,Bob,10,GMO,Pool,70 +BUY_SHARE_LOG,Chester,10,NC,IPO,75 +FloatsWithCash,NC,750 +Autopasses,Joshua +Autopasses,Rob +BUY_SHARE_LOG,Bob,10,NC,IPO,75 +Autopasses,Chester +Autopasses,Joshua +Autopasses,Rob +BUY_SHARE_LOG,Bob,10,NC,IPO,75 +SELL_SHARES_LOG,Bob,2,10,20,NC,150 +PRICE_MOVES_LOG,NC,75,E4,65,E6 +Autopasses,Chester +Autopasses,Joshua +Autopasses,Rob +SELL_SHARE_LOG,Bob,10,SOU,65 +PRICE_MOVES_LOG,SOU,65,E6,60,E7 +BUY_SHARE_LOG,Bob,10,L&N,Pool,80 +Autopasses,Chester +Autopasses,Joshua +Autopasses,Rob +BUY_SHARE_LOG,Bob,10,GMO,IPO,90 +Autopasses,Chester +Autopasses,Joshua +Autopasses,Rob +PASSES,Bob + +END_SR,5 +Has,GMO,340 +Has,IC,650 +Has,L&N,222 +Has,NC,750 +Has,SOU,51 +Has,TC,280 +Has,Bob,57 +Has,Chester,1 +Has,Joshua,3 +Has,Rob,19 +START_OR,5.1 +ReceivesFor,TC,5,TCC +ReceivesFor,SOU,10,ET&WNC +ReceivesFor,TC,15,M&C +ReceivesFor,GMO,20,O&W + +CompanyOperates,L&N,Rob +LaysTileAt,L&N,141,E10,SW +CompanyRevenue,L&N,110 +CompanyWithholds,L&N,110 +PRICE_MOVES_LOG,L&N,80,G5,75,F5 +BuysTrain,L&N,4,IPO,300 + +CompanyOperates,TC,Bob +LaysTileAt,TC,24,C12,NE +CompanyRevenue,TC,120 +CompanyPaysOutFull,TC,120 +Payout,Bob,60,5,10 +Payout,Joshua,12,1,10 +Payout,TC,12,1,10 +PRICE_MOVES_LOG,TC,75,F5,80,G5 +BuysTrain,TC,4,IPO,300 +All 4-trains are sold out, 5-trains now available + +CompanyOperates,GMO,Joshua +LaysTileAtFor,GMO,6,D7,NE,40 +LaysTileAt,GMO,8,C6,SE +CompanyRevenue,GMO,150 +CompanyPaysOutFull,GMO,150 +Payout,Bob,30,2,10 +Payout,Joshua,90,6,10 +PRICE_MOVES_LOG,GMO,70,D3,80,E3 + +CompanyOperates,NC,Chester +LaysTileAtFor,NC,8,H13,NW,60 +LaysTileAt,NC,9,G10,W +CompanyDoesNotPayDividend,NC +PRICE_MOVES_LOG,NC,65,E6,55,D6 +BuysTrain,NC,5,IPO,450 +FirstTrainBought,5 +StartOfPhase,5 +PrivateCloses,TCC +PrivateCloses,ET&WNC +PrivateCloses,M&C +PrivateCloses,O&W +BuysTrain,NC,3,SOU,240 + +CompanyOperates,SOU,Chester +LaysTileAt,SOU,24,B15,W +CompanyRevenue,SOU,170 +CompanyWithholds,SOU,170 +PRICE_MOVES_LOG,SOU,60,E7,50,D7 +BuysTrain,SOU,5,IPO,450 +All 5-trains are sold out, 6-trains now available + +CompanyOperates,IC,Rob +LaysTileAt,IC,619,D7,W +CompanyDoesNotPayDividend,IC +PRICE_MOVES_LOG,IC,55,D6,45,C6 +BuysTrain,IC,6,IPO,630 +FirstTrainBought,6 +StartOfPhase,6 + +EndOfOperatingRound,5.1 +ORWorthIncrease,Bob,5.1,110 +ORWorthIncrease,Chester,5.1,-115 +ORWorthIncrease,Joshua,5.1,137 +ORWorthIncrease,Rob,5.1,-80 +Has,GMO,320 +Has,IC,20 +Has,L&N,32 +Has,NC,0 +Has,SOU,21 +Has,TC,12 +Has,Bob,147 +Has,Chester,1 +Has,Joshua,105 +Has,Rob,19 +START_OR,5.2 + +CompanyOperates,TC,Bob +LaysTileAt,TC,170,F11,SW +CompanyRevenue,TC,190 +CompanyPaysOutFull,TC,190 +Payout,Bob,95,5,10 +Payout,Joshua,19,1,10 +Payout,TC,19,1,10 +PRICE_MOVES_LOG,TC,80,G5,85,G4 + +CompanyOperates,GMO,Joshua +LaysTileAt,GMO,14,G6,NW +LAYS_TOKEN_ON,GMO,D7,40 +CompanyDoesNotPayDividend,GMO +PRICE_MOVES_LOG,GMO,80,E3,70,D3 +PlayerMustSellShares,Joshua,226 +SELL_SHARES_LOG,Joshua,1,10,10,TC,85 +PRICE_MOVES_LOG,TC,85,G4,80,G5 +SELL_SHARES_LOG,Joshua,1,10,10,IC,45 +PRICE_MOVES_LOG,IC,45,C6,40,C7 +SELL_SHARES_LOG,Joshua,2,10,20,SOU,100 +PresidentAddsCash,GMO,Joshua,350 +BuysTrain,GMO,6,IPO,630 +All 6-trains are sold out, 8-trains now available +StartOfPhase,6½ + +CompanyOperates,L&N,Rob +LaysTileAt,L&N,8,D9,SE +LaysTileAt,L&N,8,E18,NW +CompanyRevenue,L&N,190 +CompanyWithholds,L&N,190 +PRICE_MOVES_LOG,L&N,75,F5,70,E5 +TrainsObsoleteRusted,4,L&N +PlayerMustSellShares,Rob,459 +SELL_SHARES_LOG,Rob,2,10,20,IC,80 +SELL_SHARES_LOG,Rob,1,10,10,L&N,70 +PRICE_MOVES_LOG,L&N,70,E5,65,E6 +PlayerIsBankrupt,Rob +GameOver +EoGWinnerBob! +EoGFinalRanking : +1. 947 Bob +2. 646 Chester +3. 424 Joshua +4. 355 Rob diff --git a/test/data/test/1835_PRHasTwoExcessTrains.report b/test/data/test/1835_PRHasTwoExcessTrains.report index 4396818..3731c5c 100644 --- a/test/data/test/1835_PRHasTwoExcessTrains.report +++ b/test/data/test/1835_PRHasTwoExcessTrains.report @@ -1109,6 +1109,7 @@ PRICE_MOVES_LOG,PR,154,I4,138,H4 BuysTrain,PR,5,IPO,500 FirstTrainBought,5 StartOfPhase,5 +PhaseClosesAllPrivates, PrivateCloses,OBB PrivateCloses,PfB StartFormationRound,PR diff --git a/test/data/test/1835_PR_3rdTrain.report b/test/data/test/1835_PR_3rdTrain.report index d80d659..a3c344f 100644 --- a/test/data/test/1835_PR_3rdTrain.report +++ b/test/data/test/1835_PR_3rdTrain.report @@ -1056,6 +1056,7 @@ PRICE_MOVES_LOG,WT,72,A5,64,A6 BuysTrain,WT,5,IPO,500 FirstTrainBought,5 StartOfPhase,5 +PhaseClosesAllPrivates, PrivateCloses,OBB PrivateCloses,PfB CompanyDiscardsTrain,SX,3 diff --git a/test/data/test/1835_SellDoubleShare.report b/test/data/test/1835_SellDoubleShare.report index ac20c94..7294587 100644 --- a/test/data/test/1835_SellDoubleShare.report +++ b/test/data/test/1835_SellDoubleShare.report @@ -1270,6 +1270,7 @@ PRICE_MOVES_LOG,PR,154,I4,172,J4 BuysTrain,PR,5,IPO,500 FirstTrainBought,5 StartOfPhase,5 +PhaseClosesAllPrivates, PrivateCloses,OBB PrivateCloses,PfB CompanyDiscardsTrain,BA,3 |
From: Erik V. <ev...@us...> - 2012-05-14 16:29:42
|
data/1835/CompanyManager.xml | 2 data/1837/CompanyManager.xml | 393 data/1837/Game.xml | 220 data/1837/Map.xml | 181 data/1837/StockMarket.xml | 114 data/1837/TileSet.xml | 243 data/1837/Tiles.xml | 617 data/GamesList.xml | 10 rails/game/PublicCompany.java | 6 rails/game/PublicCompanyI.java | 1 rails/ui/swing/hexmap/GUIHex.java | 155 tiles/TileDictionary.18t | 361 tiles/TileDictionary.xml |48517 +++++++++++++++++++------------------- tiles/Tiles.xml | 8519 +++--- tiles/svg/tile-37001.svg | 2 tiles/svg/tile-37002.svg | 2 tiles/svg/tile-37003.svg | 2 tiles/svg/tile-37007.svg | 2 tiles/svg/tile-37008.svg | 2 tiles/svg/tile-37009.svg | 2 tiles/svg/tile-37010.svg | 2 tiles/svg/tile-37011.svg | 2 tiles/svg/tile-37012.svg | 2 tiles/svg/tile-37103.svg | 2 tiles/svg/tile-37109.svg | 2 tiles/svg/tile-37123.svg | 2 tiles/svg/tile-37156.svg | 2 tiles/svg/tile-37158.svg | 2 tiles/svg/tile-37206.svg | 2 tiles/svg/tile-37402.svg | 2 tiles/svg/tile-42.svg | 2 tiles/svg/tile-6000.svg | 8 tiles/svg/tile-6001.svg | 2 tiles/svg/tile-6007.svg | 2 34 files changed, 31108 insertions(+), 28277 deletions(-) New commits: commit a8784a9541b843bfdd93e93df104bb01568b46cd Author: Erik Vos <eri...@xs...> Date: Mon May 14 18:28:32 2012 +0200 Added ability to suppress home indicator on map. Applied to 1835. diff --git a/data/1835/CompanyManager.xml b/data/1835/CompanyManager.xml index baa4fd8..4e05202 100644 --- a/data/1835/CompanyManager.xml +++ b/data/1835/CompanyManager.xml @@ -204,7 +204,7 @@ </Company> <Company name="PR" longname="Preußische Eisenbahn" type="Major" startspace="I4" available="no" tokens="7" fgColour="FFFFFF" bgColour="000000" alias="Pr"> - <Home hex="E19"/> + <Home hex="E19" mapDisplay="no"/> <ShareUnit percentage="5" sharePriceUnits="2"/> <Float percentage="10"/> <Certificate type="President" shares="2"/> diff --git a/rails/game/PublicCompany.java b/rails/game/PublicCompany.java index 1b589e2..7b38879 100644 --- a/rails/game/PublicCompany.java +++ b/rails/game/PublicCompany.java @@ -67,6 +67,8 @@ public class PublicCompany extends Company implements PublicCompanyI { protected List<MapHex> homeHexes = null; protected int homeCityNumber = 1; protected boolean homeAllCitiesBlocked = false; + protected boolean homeMapDisplay = true; + /** Destination hex * */ protected String destinationHexName = null; @@ -343,6 +345,7 @@ public class PublicCompany extends Company implements PublicCompanyI { homeHexNames = homeBaseTag.getAttributeAsString("hex"); homeCityNumber = homeBaseTag.getAttributeAsInteger("city", 1); homeAllCitiesBlocked = homeBaseTag.getAttributeAsBoolean("allCitiesBlocked", false); + homeMapDisplay = homeBaseTag.getAttributeAsBoolean("mapDisplay", true); } Tag destinationTag = tag.getChild("Destination"); @@ -890,6 +893,9 @@ public class PublicCompany extends Company implements PublicCompanyI { return homeAllCitiesBlocked; } + public boolean isHomeMapDisplay() { + return homeMapDisplay; + } /** * @return Returns the destinationHex. diff --git a/rails/game/PublicCompanyI.java b/rails/game/PublicCompanyI.java index 7b28906..785417a 100644 --- a/rails/game/PublicCompanyI.java +++ b/rails/game/PublicCompanyI.java @@ -320,6 +320,7 @@ public interface PublicCompanyI extends CompanyI, CashHolder, TokenHolder { public void setHomeCityNumber(int homeCityNumber); public boolean isHomeBlockedForAllCities(); + public boolean isHomeMapDisplay(); public MapHex getDestinationHex(); public boolean hasDestination (); diff --git a/rails/ui/swing/hexmap/GUIHex.java b/rails/ui/swing/hexmap/GUIHex.java index af052cb..25412af 100644 --- a/rails/ui/swing/hexmap/GUIHex.java +++ b/rails/ui/swing/hexmap/GUIHex.java @@ -84,7 +84,7 @@ public class GUIHex implements ViewObject { // GUI variables double[] xVertex = new double[6]; double[] yVertex = new double[6]; -// double len; + // double len; GeneralPath hexagon; Rectangle rectBound; /** @@ -105,9 +105,9 @@ public class GUIHex implements ViewObject { * handle racing conditions for mouse events. */ private int highlightCounter = 0; - + protected static Logger log = - Logger.getLogger(GUIHex.class.getPackage().getName()); + Logger.getLogger(GUIHex.class.getPackage().getName()); public GUIHex(HexMap hexMap, double cx, double cy, double scale, int xCoord, int yCoord) { @@ -176,43 +176,43 @@ public class GUIHex implements ViewObject { setBounds(hexagon.getBounds()); center = - new Point((int) ((xVertex[2] + xVertex[5]) / 2), - (int) ((yVertex[0] + yVertex[3]) / 2)); + new Point((int) ((xVertex[2] + xVertex[5]) / 2), + (int) ((yVertex[0] + yVertex[3]) / 2)); Point2D.Double center2D = - new Point2D.Double((xVertex[2] + xVertex[5]) / 2.0, - (yVertex[0] + yVertex[3]) / 2.0); - + new Point2D.Double((xVertex[2] + xVertex[5]) / 2.0, + (yVertex[0] + yVertex[3]) / 2.0); + //inner hexagons are drawn outlined (not filled) - //for this draw, the stroke width is half the scale reduction + //for this draw, the stroke width is half the scale reduction //the scale factor is multiplied by the average of hex width / height in order //to get a good estimate for which for stroke width the hex borders are touched //by the stroke - double hexDrawScale = 1 - (1 - SELECTED_SCALE) / 2; + double hexDrawScale = 1 - (1 - SELECTED_SCALE) / 2; innerHexagonSelected = defineInnerHexagon(hexDrawScale, center2D); selectedStrokeWidth = (float) ( 1 - hexDrawScale ) * - ( hexagon.getBounds().width + hexagon.getBounds().height ) / 2; - hexDrawScale = 1 - (1 - SELECTABLE_SCALE) / 2; + ( hexagon.getBounds().width + hexagon.getBounds().height ) / 2; + hexDrawScale = 1 - (1 - SELECTABLE_SCALE) / 2; innerHexagonSelectable = defineInnerHexagon(hexDrawScale, center2D); selectableStrokeWidth = (float) ( 1 - hexDrawScale ) * - ( hexagon.getBounds().width + hexagon.getBounds().height ) / 2; + ( hexagon.getBounds().width + hexagon.getBounds().height ) / 2; } private GeneralPath defineInnerHexagon(double innerScale, Point2D.Double center2D) { AffineTransform at = - AffineTransform.getScaleInstance(innerScale, innerScale); + AffineTransform.getScaleInstance(innerScale, innerScale); GeneralPath innerHexagon = (GeneralPath) hexagon.createTransformedShape(at); // Translate innerHexagon to make it concentric. Rectangle2D innerBounds = innerHexagon.getBounds2D(); Point2D.Double innerCenter = - new Point2D.Double(innerBounds.getX() + innerBounds.getWidth() - / 2.0, innerBounds.getY() - + innerBounds.getHeight() / 2.0); + new Point2D.Double(innerBounds.getX() + innerBounds.getWidth() + / 2.0, innerBounds.getY() + + innerBounds.getHeight() / 2.0); at = - AffineTransform.getTranslateInstance(center2D.getX() - - innerCenter.getX(), - center2D.getY() - innerCenter.getY()); + AffineTransform.getTranslateInstance(center2D.getX() + - innerCenter.getX(), + center2D.getY() - innerCenter.getY()); innerHexagon.transform(at); return innerHexagon; @@ -244,7 +244,7 @@ public class GUIHex implements ViewObject { public Point2D getSidePoint2D(int side){ return new Point2D.Double((xVertex[side] + xVertex[(side+1)%6])/2, - (yVertex[side] + yVertex[(side+1)%6])/2); + (yVertex[side] + yVertex[(side+1)%6])/2); } public Point2D getCenterPoint2D() { @@ -279,7 +279,7 @@ public class GUIHex implements ViewObject { public Rectangle getBounds() { return rectBound; } - + public Rectangle getMarksDirtyBounds() { return marksDirtyRectBound; } @@ -291,7 +291,7 @@ public class GUIHex implements ViewObject { rectBound.y - marksDirtyMargin, rectBound.width + marksDirtyMargin * 2, rectBound.height + marksDirtyMargin * 2 - ); + ); } public boolean contains(Point2D.Double point) { @@ -355,7 +355,7 @@ public class GUIHex implements ViewObject { highlightCounter++; } - + /** * Indicate that this hex does not need to be highlighted any more (from the * caller's point of view). @@ -367,11 +367,11 @@ public class GUIHex implements ViewObject { //trigger hexmap marks repaint if hex becomes not highlighted if (highlightCounter == 0) hexMap.repaintMarks(getMarksDirtyBounds()); } - + public boolean isHighlighted() { return (highlightCounter > 0); } - + static boolean getAntialias() { return antialias; } @@ -408,10 +408,10 @@ public class GUIHex implements ViewObject { } private boolean isTilePainted() { - return provisionalGUITile != null && hexMap.isTilePainted(provisionalGUITile.getTileId()) - || currentGUITile != null && hexMap.isTilePainted(currentGUITile.getTileId()); + return provisionalGUITile != null && hexMap.isTilePainted(provisionalGUITile.getTileId()) + || currentGUITile != null && hexMap.isTilePainted(currentGUITile.getTileId()); } - + public void paintTile(Graphics g) { Graphics2D g2 = (Graphics2D) g; @@ -426,7 +426,7 @@ public class GUIHex implements ViewObject { paintOverlay(g2); } } - + /** * Marks are selected / selectable / highlighted * @param g @@ -443,24 +443,24 @@ public class GUIHex implements ViewObject { } if (isSelected()) { - Stroke oldStroke = g2.getStroke(); + Stroke oldStroke = g2.getStroke(); g2.setStroke(new BasicStroke(selectedStrokeWidth)); - g2.setColor(selectedColor); - g2.draw(innerHexagonSelected); - g2.setStroke(oldStroke); + g2.setColor(selectedColor); + g2.draw(innerHexagonSelected); + g2.setStroke(oldStroke); } else if (isSelectable()) { - Stroke oldStroke = g2.getStroke(); + Stroke oldStroke = g2.getStroke(); g2.setStroke(new BasicStroke(selectableStrokeWidth)); g2.setColor(selectableColor); - g2.draw(innerHexagonSelectable); - g2.setStroke(oldStroke); + g2.draw(innerHexagonSelectable); + g2.setStroke(oldStroke); } //highlight on top of tiles if (isHighlighted()) { g2.setColor(highlightedFillColor); g2.fill(hexagon); - Stroke oldStroke = g2.getStroke(); + Stroke oldStroke = g2.getStroke(); g2.setStroke(highlightedBorderStroke); g2.setColor(highlightedBorderColor); g2.draw(hexagon); @@ -468,7 +468,7 @@ public class GUIHex implements ViewObject { } } - + public void paintTokensAndText(Graphics g) { Graphics2D g2 = (Graphics2D) g; @@ -476,16 +476,16 @@ public class GUIHex implements ViewObject { paintOffStationTokens(g2); if (!isTilePainted()) return; - + FontMetrics fontMetrics = g2.getFontMetrics(); if (getHexModel().getTileCost() > 0 ) { g2.drawString( Bank.format(getHexModel().getTileCost()), rectBound.x - + (rectBound.width - fontMetrics.stringWidth(Integer.toString(getHexModel().getTileCost()))) - * 3 / 5, + + (rectBound.width - fontMetrics.stringWidth(Integer.toString(getHexModel().getTileCost()))) + * 3 / 5, rectBound.y - + ((fontMetrics.getHeight() + rectBound.height) * 9 / 15)); + + ((fontMetrics.getHeight() + rectBound.height) * 9 / 15)); } Map<PublicCompanyI, Stop> homes = getHexModel().getHomes(); @@ -499,6 +499,8 @@ public class GUIHex implements ViewObject { // Only draw the company name if there isn't yet a token of that company if (model.hasTokenOfCompany(company)) continue; homeCity = homes.get(company); + // Don't draw if suppressed + if (!company.isHomeMapDisplay()) continue; if (homeCity == null) { // not yet decided where the token will be // find a free slot List<Stop> stops = getHexModel().getStops(); @@ -518,22 +520,22 @@ public class GUIHex implements ViewObject { if (getHexModel().isBlockedForTileLays()) { List<PrivateCompanyI> privates = - //GameManager.getInstance().getCompanyManager().getAllPrivateCompanies(); - hexMap.getOrUIManager().getGameUIManager().getGameManager() - .getCompanyManager().getAllPrivateCompanies(); + //GameManager.getInstance().getCompanyManager().getAllPrivateCompanies(); + hexMap.getOrUIManager().getGameUIManager().getGameManager() + .getCompanyManager().getAllPrivateCompanies(); for (PrivateCompanyI p : privates) { List<MapHex> blocked = p.getBlockedHexes(); if (blocked != null) { for (MapHex hex : blocked) { if (getHexModel().equals(hex)) { - String text = "(" + p.getName() + ")"; + String text = "(" + p.getName() + ")"; g2.drawString( - text, - rectBound.x - + (rectBound.width - fontMetrics.stringWidth(text)) - * 1 / 2, - rectBound.y - + ((fontMetrics.getHeight() + rectBound.height) * 5 / 15)); + text, + rectBound.x + + (rectBound.width - fontMetrics.stringWidth(text)) + * 1 / 2, + rectBound.y + + ((fontMetrics.getHeight() + rectBound.height) * 5 / 15)); } } } @@ -541,15 +543,15 @@ public class GUIHex implements ViewObject { } if (model.isReservedForCompany() - && currentTileId == model.getPreprintedTileId() ) { - String text = "[" + model.getReservedForCompany() + "]"; + && currentTileId == model.getPreprintedTileId() ) { + String text = "[" + model.getReservedForCompany() + "]"; g2.drawString( - text, - rectBound.x - + (rectBound.width - fontMetrics.stringWidth(text)) - * 1 / 2, - rectBound.y - + ((fontMetrics.getHeight() + rectBound.height) * 5 / 25)); + text, + rectBound.x + + (rectBound.width - fontMetrics.stringWidth(text)) + * 1 / 2, + rectBound.y + + ((fontMetrics.getHeight() + rectBound.height) * 5 / 25)); } } @@ -637,8 +639,8 @@ public class GUIHex implements ViewObject { for (TokenI token : tokens) { Point origin = - new Point(center.x + offStationTokenX[i], - center.y + offStationTokenY[i]); + new Point(center.x + offStationTokenX[i], + center.y + offStationTokenY[i]); if (token instanceof BaseToken) { PublicCompanyI co = ((BaseToken) token).getCompany(); @@ -655,8 +657,8 @@ public class GUIHex implements ViewObject { private void drawBaseToken(Graphics2D g2, PublicCompanyI co, Point center, int diameter) { GUIToken token = - new GUIToken(co.getFgColour(), co.getBgColour(), co.getName(), - center.x, center.y, diameter); + new GUIToken(co.getFgColour(), co.getBgColour(), co.getName(), + center.x, center.y, diameter); token.setBounds(center.x-(int)(0.5*diameter), center.y-(int)(0.5*diameter), diameter, diameter); @@ -673,8 +675,8 @@ public class GUIHex implements ViewObject { Dimension size = new Dimension(40, 40); GUIToken token = - new GUIToken(Color.BLACK, Color.WHITE, "+" + bt.getValue(), - origin.x, origin.y, 15); + new GUIToken(Color.BLACK, Color.WHITE, "+" + bt.getValue(), + origin.x, origin.y, 15); token.setBounds(origin.x, origin.y, size.width, size.height); token.drawToken(g2); @@ -806,9 +808,9 @@ public class GUIHex implements ViewObject { } // For debugging: display x,y-coordinates //tt.append("<small> x=" + x + " y="+y+"</small>"); - + tt.append("<br><b>Tile</b>: ").append(currentTile.getId()); - + // For debugging: display rotation //tt.append("<small> rot=" + currentTileOrientation + "</small>"); @@ -828,8 +830,8 @@ public class GUIHex implements ViewObject { stopNumber = stop.getNumber(); st = stop.getRelatedStation(); tt.append("<br> ").append(st.getType()).append(" ").append(stopNumber) - .append(" (").append(model.getConnectionString(stopNumber)) - .append("): value "); + .append(" (").append(model.getConnectionString(stopNumber)) + .append("): value "); tt.append(st.getValue()); if (st.getBaseSlots() > 0) { tt.append(", ").append(st.getBaseSlots()).append(" slots"); @@ -860,7 +862,7 @@ public class GUIHex implements ViewObject { tt.append("<br><b>Upgrades</b>: ").append(upgrades); if (model.getTileCost() > 0) tt.append("<br>Upgrade cost: " - + Bank.format(model.getTileCost())); + + Bank.format(model.getTileCost())); } if (getHexModel().getDestinations() != null) { @@ -888,18 +890,18 @@ public class GUIHex implements ViewObject { } return (provisionalGUITile != null); } - + /** * Creates an upgrade tile onto this hex without dropping it on the hex. * This means that this hex won't consider the returned tile being part of it - * (even not on a temporary base). + * (even not on a temporary base). */ public GUITile createUpgradeTileIfValid (int tileId, boolean upgradeMustConnect) { GUITile t = new GUITile(tileId, this); /* Check if we can find a valid orientation of this tile */ return ( t.rotate(0, currentGUITile, upgradeMustConnect) ? t : null); } - + public boolean isTileUpgradeValid (int tileId, boolean upgradeMustConnect) { return ( createUpgradeTileIfValid(tileId, upgradeMustConnect) != null ); } @@ -988,7 +990,8 @@ public class GUIHex implements ViewObject { hexMap.repaintAll(getBounds()); } } - + + @Override public String toString () { return getName() + " (" + currentTile.getName() + ")"; } commit 35898f50e8c845a042ed19d9a4be4eedeb8d9f81 Author: Erik Vos <eri...@xs...> Date: Mon May 14 18:18:36 2012 +0200 1837 initial setup diff --git a/data/1837/CompanyManager.xml b/data/1837/CompanyManager.xml new file mode 100644 index 0000000..a644bd1 --- /dev/null +++ b/data/1837/CompanyManager.xml @@ -0,0 +1,393 @@ +<?xml version="1.0"?> +<CompanyManager> + <CompanyType name="Private" class="rails.game.PrivateCompany"> + <ClosingConditions> + <Phase>5</Phase> + </ClosingConditions> + </CompanyType> + <CompanyType name="Coal" class="rails.game.PublicCompany"> + <ShareUnit percentage="100"/> + <Certificate type="President" shares="1"/> + <StockPrice market="no"/> + <BaseTokens> + <HomeBase lay="whenFloated"/> + </BaseTokens> + <Payout split="always"/> + <Trains limit="2,2,1" mandatory="no"/> + <CanUseSpecialProperties/> + </CompanyType> + <CompanyType name="Minor1" class="rails.game.PublicCompany"> + <ShareUnit percentage="100"/> + <Certificate type="President" shares="1"/> + <StockPrice market="no"/> + <BaseTokens> + <HomeBase lay="whenFloated"/> + </BaseTokens> + <Payout split="always"/> + <Trains limit="2,2,1" mandatory="no"/> + <CanUseSpecialProperties/> + </CompanyType> + <CompanyType name="Minor2" class="rails.game.PublicCompany"> + <ShareUnit percentage="50"/> + <Certificate type="President" shares="1"/> + <Certificate shares="1" number="1"/> + <StockPrice market="no"/> + <BaseTokens> + <HomeBase lay="whenFloated"/> + </BaseTokens> + <Payout split="always"/> + <Trains limit="2,2,2" mandatory="no"/> + <CanUseSpecialProperties/> + </CompanyType> + <CompanyType name="Major" class="rails.game.PublicCompany" capitalisation="incremental"> + <PoolPaysOut/> + <Float percentage="50"/> + <StockPrice par="yes"/> + <ShareUnit percentage="10"/> + <Certificate type="President" shares="2"/> + <Certificate shares="1" number="8"/> + <BaseTokens> + <LayCost method="distance" cost="20" number="1"/> + <LayCost method="distance" cost="40" number="1"/> + <HomeBase lay="whenFloated"/> + </BaseTokens> + <Trains limit="4,3,3,2"/> + <CanUseSpecialProperties/> + </CompanyType> + + <Company name="KwB" longname="Karawankenbahn" type="Private" basePrice="170" revenue="25"> + <Blocking hex="J13"/> + <SpecialProperties> + <SpecialProperty condition="ifOwnedByPlayer" when="tileLayingStep" class="rails.game.special.SpecialTileLay"> + <SpecialTileLay location="J13" colour="yellow" extra="no" free="yes"/> + </SpecialProperty> + </SpecialProperties> + <Info key="ComesWithPresidency" parm="S2,100"/> + </Company> + <Company name="BrB" longname="Brennerbahn" type="Private" basePrice="140" revenue="15"> + <Blocking hex="J7"/> + <SpecialProperties> + <SpecialProperty condition="ifOwnedByPlayer" when="tileLayingStep" class="rails.game.special.SpecialTileLay"> + <SpecialTileLay location="J7" colour="yellow" extra="no" free="yes"/> + </SpecialProperty> + </SpecialProperties> + <Info key="ComesWithPresidency" parm="S4,100"/> + </Company> + <Company name="WB" longname="Wocheinerbahn" type="Private" basePrice="130" revenue="30"> + <Blocking hex="K12"/> + <SpecialProperties> + <SpecialProperty condition="ifOwnedByPlayer" when="tileLayingStep" class="rails.game.special.SpecialTileLay"> + <SpecialTileLay location="K12" colour="yellow" extra="no" free="yes"/> + </SpecialProperty> + </SpecialProperties> + </Company> + <Company name="AB" longname="Arlbergbahn" type="Private" basePrice="185" revenue="20"> + <Blocking hex="I6"/> + <SpecialProperties> + <SpecialProperty condition="ifOwnedByPlayer" when="tileLayingStep" class="rails.game.special.SpecialTileLay"> + <SpecialTileLay location="I6" colour="yellow" extra="no" free="yes"/> + </SpecialProperty> + </SpecialProperties> + <Info key="ComesWithPresidency" parm="S3,100"/> + </Company> + <Company name="KB" longname="Karstbahn" type="Private" basePrice="120" revenue="10"> + <Blocking hex="K14"/> + <SpecialProperties> + <SpecialProperty condition="ifOwnedByPlayer" when="tileLayingStep" class="rails.game.special.SpecialTileLay"> + <SpecialTileLay location="K14" colour="yellow" extra="no" free="yes"/> + </SpecialProperty> + </SpecialProperties> + <Info key="ComesWithPresidency" parm="S5,100"/> + </Company> + <Company name="SmB" longname="Semmeringbahn" type="Private" basePrice="150" revenue="5"> + <Blocking hex="H17"/> + <SpecialProperties> + <SpecialProperty condition="ifOwnedByPlayer" when="tileLayingStep" class="rails.game.special.SpecialTileLay"> + <SpecialTileLay location="H17" colour="yellow" extra="no" free="yes"/> + </SpecialProperty> + </SpecialProperties> + <Info key="ComesWithPresidency" parm="S1,100"/> + </Company> + <Company name="TB" longname="Tauernbahn" type="Private" basePrice="150" revenue="35"> + <Blocking hex="J11"/> + <SpecialProperties> + <SpecialProperty condition="ifOwnedByPlayer" when="tileLayingStep" class="rails.game.special.SpecialTileLay"> + <SpecialTileLay location="J11" colour="yellow" extra="no" free="yes"/> + </SpecialProperty> + </SpecialProperties> + </Company> + <Company name="EPP" longname="Eisenbahn Pilsen-Priesen" type="Coal" price="100" tokens="1"> + <Home hex="E12"/> + <SpecialProperties> + <SpecialProperty condition="phase=5" when="exchangeRound" class="rails.game.special.ExchangeForShare"> + <ExchangeForShare company="BK" share="10"/> + </SpecialProperty> + </SpecialProperties> + </Company> + <Company name="RGTE" longname="Reichenberg-Gablonz-Tannwalder-Eisenbahn" type="Coal" price="100" tokens="1"> + <Home hex="A14"/> + <SpecialProperties> + <SpecialProperty condition="phase=5" when="exchangeRound" class="rails.game.special.ExchangeForShare"> + <ExchangeForShare company="BK" share="10"/> + </SpecialProperty> + </SpecialProperties> + </Company> + <Company name="EOD" longname="Eisenbahn Oderberg-Dombran" type="Coal" price="100" tokens="1"> + <Home hex="C20"/> + <SpecialProperties> + <SpecialProperty condition="phase=5" when="exchangeRound" class="rails.game.special.ExchangeForShare"> + <ExchangeForShare company="MS" share="10"/> + </SpecialProperty> + </SpecialProperties> + </Company> + <Company name="EKT" longname="Eisenbahn Karwin-Teschen" type="Coal" price="100" tokens="1"> + <Home hex="C22"/> + <SpecialProperties> + <SpecialProperty condition="phase=5" when="exchangeRound" class="rails.game.special.ExchangeForShare"> + <ExchangeForShare company="MS" share="10"/> + </SpecialProperty> + </SpecialProperties> + </Company> + <Company name="MLB" longname="Mosty-Lemberg Bahn" type="Coal" price="100" tokens="1"> + <Home hex="B33"/> + <SpecialProperties> + <SpecialProperty condition="phase=5" when="exchangeRound" class="rails.game.special.ExchangeForShare"> + <ExchangeForShare company="CL" share="10"/> + </SpecialProperty> + </SpecialProperties> + </Company> + <Company name="ZKB" longname="Zarnesti-Kronstadt Bahn" type="Coal" price="100" tokens="1"> + <Home hex="J35"/> + <SpecialProperties> + <SpecialProperty condition="phase=5" when="exchangeRound" class="rails.game.special.ExchangeForShare"> + <ExchangeForShare company="SB" share="10"/> + </SpecialProperty> + </SpecialProperties> + </Company> + <Company name="SPB" longname="Simeria-Petroseni Bahn" type="Coal" price="100" tokens="1"> + <Home hex="K32"/> + <SpecialProperties> + <SpecialProperty condition="phase=5" when="exchangeRound" class="rails.game.special.ExchangeForShare"> + <ExchangeForShare company="SB" share="10"/> + </SpecialProperty> + </SpecialProperties> + </Company> + <Company name="LRB" longname="Lugoj-Resita Bahn" type="Coal" price="100" tokens="1"> + <Home hex="L31"/> + <SpecialProperties> + <SpecialProperty condition="phase=5" when="exchangeRound" class="rails.game.special.ExchangeForShare"> + <ExchangeForShare company="Th" share="10"/> + </SpecialProperty> + </SpecialProperties> + </Company> + <Company name="BB" longname="Bosna-Bahn" type="Coal" price="100" tokens="1"> + <Home hex="P21"/> + <SpecialProperties> + <SpecialProperty condition="phase=5" when="exchangeRound" class="rails.game.special.ExchangeForShare"> + <ExchangeForShare company="BH" share="10"/> + </SpecialProperty> + </SpecialProperties> + </Company> + <Company name="EHS" longname="Eisenbahn Hatvan-Salgotarjan" type="Coal" price="100" tokens="1"> + <Home hex="F27"/> + <SpecialProperties> + <SpecialProperty condition="phase=5" when="exchangeRound" class="rails.game.special.ExchangeForShare"> + <ExchangeForShare company="Th" share="10"/> + </SpecialProperty> + </SpecialProperties> + </Company> + <Company name="S1" longname="Wien-Gloggitzner Bahn" type="Minor1" price="90" tokens="1" fgColour="FFFFFF" bgColour="FF5400"> + <Home hex="G18" city="4"/> + <SpecialProperties> + <SpecialProperty condition="phase=4" when="exchangeRound" class="rails.game.special.ExchangeForShare"> + <ExchangeForShare company="Sd" share="10"/> + </SpecialProperty> + </SpecialProperties> + </Company> + <Company name="S2" longname="Kärntner Bahn" type="Minor1" price="90" tokens="1" fgColour="FFFFFF" bgColour="FF5400"> + <Home hex="J17"/> + <SpecialProperties> + <SpecialProperty condition="ifStarted" when="exchangeRound" class="rails.game.special.ExchangeForShare"> + <ExchangeForShare company="Sd" share="10"/> + </SpecialProperty> + </SpecialProperties> + </Company> + <Company name="S3" longname="Nordtiroler Staatsbahn" type="Minor1" price="90" tokens="1" fgColour="FFFFFF" bgColour="FF5400"> + <Home hex="I8"/> + <SpecialProperties> + <SpecialProperty condition="ifStarted" when="exchangeRound" class="rails.game.special.ExchangeForShare"> + <ExchangeForShare company="Sd" share="10"/> + </SpecialProperty> + </SpecialProperties> + </Company> + <Company name="S4" longname="Südtiroler Staatsbahn" type="Minor1" price="90" tokens="1" fgColour="FFFFFF" bgColour="FF5400"> + <Home hex="K6"/> + <SpecialProperties> + <SpecialProperty condition="ifStarted" when="exchangeRound" class="rails.game.special.ExchangeForShare"> + <ExchangeForShare company="Sd" share="10"/> + </SpecialProperty> + </SpecialProperties> + </Company> + <Company name="S5" longname="Lombardo-Venetianische Eisenbahn" type="Minor1" price="90" tokens="1" fgColour="FFFFFF" bgColour="FF5400"> + <Home hex="L9"/> <!-- Choice of L3 or L9 --> + <SpecialProperties> + <SpecialProperty condition="ifStarted" when="exchangeRound" class="rails.game.special.ExchangeForShare"> + <ExchangeForShare company="Sd" share="10"/> + </SpecialProperty> + </SpecialProperties> + </Company> + <Company name="K1" longname="Kaiser Ferdinand-Nordbahn" type="Minor1" price="90" tokens="1" fgColour="FFFFFF" bgColour="C98A5C"> + <Home hex="G18" city="1"/> + <SpecialProperties> + <SpecialProperty condition="phase=4" when="exchangeRound" class="rails.game.special.ExchangeForShare"> + <ExchangeForShare company="KK" share="10"/> + </SpecialProperty> + </SpecialProperties> + </Company> + <Company name="K2" longname="Kaiserin Elisabeth-Bahn" type="Minor1" price="140" tokens="1" fgColour="FFFFFF" bgColour="C98A5C"> + <Home hex="G18" city="3"/> + <SpecialProperties> + <SpecialProperty condition="ifStarted" when="exchangeRound" class="rails.game.special.ExchangeForShare"> + <ExchangeForShare company="KK" share="10"/> + </SpecialProperty> + </SpecialProperties> + </Company> + <Company name="K3" longname="Kaiser Franz Joseph-Bahn" type="Minor1" price="90" tokens="1" fgColour="FFFFFF" bgColour="C98A5C"> + <Home hex="G18" city="2"/> + <SpecialProperties> + <SpecialProperty condition="ifStarted" when="exchangeRound" class="rails.game.special.ExchangeForShare"> + <ExchangeForShare company="KK" share="10"/> + </SpecialProperty> + </SpecialProperties> + </Company> + <Company name="U1" longname="Eisenbahn Pest-Waitzen" type="Minor2" price="180" tokens="1" fgColour="FFFFFF" bgColour="FF55AA"> + <Home hex="H23" city="1"/> + <SpecialProperties> + <SpecialProperty condition="phase=4" when="exchangeRound" class="rails.game.special.ExchangeForShare"> + <ExchangeForShare company="Ug" share="10"/> + </SpecialProperty> + </SpecialProperties> + </Company> + <Company name="U2" longname="Mohacs-Fünfkirchner Bahn" type="Minor1" price="90" tokens="1" fgColour="FFFFFF" bgColour="FF55AA"> + <Home hex="K22"/> + <SpecialProperties> + <SpecialProperty condition="ifStarted" when="exchangeRound" class="rails.game.special.ExchangeForShare"> + <ExchangeForShare company="Ug" share="10"/> + </SpecialProperty> + </SpecialProperties> + <Trains limit="2,2,2"/> + </Company> + <Company name="U3" longname="Eisenbahn Pest-Czegléd" type="Minor2" price="180" tokens="1" fgColour="FFFFFF" bgColour="FF55AA"> + <Home hex="H23" city="2"/> + <SpecialProperties> + <SpecialProperty condition="ifStarted" when="exchangeRound" class="rails.game.special.ExchangeForShare"> + <ExchangeForShare company="Ug" share="10"/> + </SpecialProperty> + </SpecialProperties> + </Company> + <Company name="BH" longname="Bosnisch-Herzegowinische Landesbahn" type="Major" tokens="3" fgColour="000000" bgColour="FF0000"> + <Home hex="N21"/> + <Float percentage="10"/> + <Certificate type="President" shares="1"/> + <Certificate shares="1" number="8"/> + <Certificate shares="1" number="1" status="reserved"/> + </Company> + <Company name="BK" longname="Böhmische Kommerzbahn" type="Major" tokens="3" fgColour="000000" bgColour="0000FF"> + <Home hex="C12"/> + <Float percentage="10"/> + <Certificate type="President" shares="1"/> + <Certificate shares="1" number="7"/> + <Certificate shares="1" number="2" status="reserved"/> + </Company> + <Company name="CL" longname="Carl-Ludwigs-Bahn" type="Major" tokens="3" fgColour="000000" bgColour="FFFFFF"> + <Home hex="C34"/> + <Float percentage="10"/> + <Certificate type="President" shares="1"/> + <Certificate shares="1" number="8"/> + <Certificate shares="1" number="1" status="reserved"/> + </Company> + <Company name="GT" longname="Galizische Transversalbahn" type="Major" tokens="3" fgColour="FFFFFF" bgColour="00B000"> + <Home hex="D37"/> + <Float percentage="10"/> + <Certificate type="President" shares="1"/> + <Certificate shares="1" number="9"/> + </Company> + <Company name="MS" longname="Mährisch-schlesische Eisenbahn" type="Major" tokens="3" fgColour="FFFFFF" bgColour="FFFF00"> + <Home hex="E18"/> + <Float percentage="10"/> + <Certificate type="President" shares="1"/> + <Certificate shares="1" number="7"/> + <Certificate shares="1" number="2" status="reserved"/> + </Company> + <Company name="SB" longname="Siebenbürgische Bahn" type="Major" tokens="3" fgColour="FFFFFF" bgColour="88FF48"> + <Home hex="J37"/> + <Float percentage="10"/> + <Certificate type="President" shares="1"/> + <Certificate shares="1" number="7"/> + <Certificate shares="1" number="2" status="reserved"/> + </Company> + <Company name="Th" longname="TheiÃbahn" type="Major" tokens="3" fgColour="FFFFFF" bgColour="AAFFFF"> + <Home hex="F29"/> + <Float percentage="10"/> + <Certificate type="President" shares="1"/> + <Certificate shares="1" number="7"/> + <Certificate shares="1" number="2" status="reserved"/> + </Company> + <Company name="Sd" longname="Südbahn" type="Major" tokens="5" fgColour="FFFFFF" bgColour="FF5400"> + <Home hex="G18" city="4" mapDisplay="no"/> + <Float percentage="10"/> + <Certificate type="President" shares="1" status="reserved"/> + <Certificate shares="1" number="5"/> + <Certificate shares="1" number="4" status="reserved"/> + <Trains limit="4,4,4,3"/> + </Company> + <Company name="KK" longname="k.k. Staatsbahn" type="Major" tokens="5" fgColour="FFFFFF" bgColour="C98A5C"> + <Home hex="G18" city="1" mapDisplay="no"/> + <Float percentage="10"/> + <Certificate type="President" shares="1" status="reserved"/> + <Certificate shares="1" number="7"/> + <Certificate shares="1" number="2" status="reserved"/> + <Trains limit="4,4,4,3"/> + </Company> + <Company name="Ug" longname="Ungarische Staatsbahn" type="Major" tokens="5" fgColour="FFFFFF" bgColour="FF55AA"> + <Home hex="H23" city="1" mapDisplay="no"/> + <Float percentage="10"/> + <Certificate type="President" shares="1" status="reserved"/> + <Certificate shares="1" number="5"/> + <Certificate shares="1" number="4" status="reserved"/> + <Trains limit="4,4,4,3"/> + </Company> + + <!--StartPacket roundClass="rails.game.specific._1837.StartRound_1837"--> + <StartPacket roundClass="rails.game.specific._1835.StartRound_1835"> + <Item name="EKT" type="Coal" basePrice="100" column="1"/> + <Item name="EOD" type="Coal" basePrice="100" column="1"/> + <Item name="KwB" type="Private" basePrice="170" column="1"> + <SubItem name="S2" type="Minor1"/> + </Item> + <Item name="MLB" type="Coal" basePrice="100" column="1"/> + <Item name="BrB" type="Private" basePrice="140" column="1"> + <SubItem name="S4" type="Minor1"/> + </Item> + <Item name="WB" type="Private" basePrice="130" column="1"/> + + <Item name="EPP" type="Coal" basePrice="100" column="2"/> + <Item name="RGTE" type="Coal" basePrice="100" column="2"/> + <Item name="AB" type="Private" basePrice="185" column="2"> + <SubItem name="S3" type="Minor1"/> + </Item> + <Item name="EHS" type="Coal" basePrice="100" column="2"/> + <Item name="LRB" type="Coal" basePrice="100" column="2"/> + <Item name="KB" type="Private" basePrice="120" column="2"> + <SubItem name="S5" type="Minor1"/> + </Item> + + <Item name="BB" type="Coal" basePrice="100" column="3"/> + <Item name="SmB" type="Private" basePrice="150" column="3"> + <SubItem name="S1" type="Minor1"/> + </Item> + <Item name="SPB" type="Coal" basePrice="100" column="3"/> + <Item name="ZKB" type="Coal" basePrice="100" column="3"/> + <Item name="TB" type="Private" basePrice="150" column="3"/> + </StartPacket> +</CompanyManager> diff --git a/data/1837/Game.xml b/data/1837/Game.xml new file mode 100644 index 0000000..71292f7 --- /dev/null +++ b/data/1837/Game.xml @@ -0,0 +1,220 @@ +<?xml version="1.0"?> +<ComponentManager> + <Component name="GameManager" class="rails.game.GameManager"> + <!--Component name="GameManager" class="rails.game.specific._1837.GameManager_1837"--> + <Game name="1837"/> + <GameOption name="RouteAwareness" values="Highlight,Deactivate" default="Highlight"/> + <GameOption name="RevenueCalculation" values="Suggest,Deactivate" default="Highlight"/> + <GameOption name="UnlimitedTiles" values="No,Yellow Plain,Yes" default="No"/> + <GameOption name="NoMapMode" type="toggle" default="no"/> + <GameOption name="UnlimitedTopTrains" values="No,Yes" default="No"/> + <GameParameters> + <PlayerShareLimit percentage="60"/> + <BankPoolLimit percentage="50"/> + <!--StockRound class="rails.game.specific._1837.StockRound_1837" --> + <StockRound class="rails.game.StockRound" + sequence="SellBuySell"> + <NoSaleInFirstSR/> + <NoSaleIfNotOperated/> + </StockRound> + <!--OperatingRound class="rails.game.specific._1837.OperatingRound_1837"--> + <OperatingRound class="rails.game.OperatingRound"> + <EmergencyTrainBuying mustBuyCheapestTrain="no" mayAlwaysBuyNewTrain="yes" mayBuyFromCompany="yes"/> + </OperatingRound> + </GameParameters> + <!--GuiClasses> + <StatusWindow class="rails.ui.swing.gamespecific._1837.StatusWindow_1837"/> + <GameUIManager class="rails.ui.swing.gamespecific._1837.GameUIManager_1837"/> + </GuiClasses--> + <EndOfGame> + <BankBreaks limit="0" finish="currentOR"/> + <!-- "Runs out"; when "broken", -1 is the limit --> + </EndOfGame> + </Component> + <Component name="PlayerManager" class="rails.game.PlayerManager"> + <Players number="3" cash="730" certLimit="28"/> + <Players number="4" cash="555" certLimit="21"/> + <Players number="5" cash="450" certLimit="17"/> + <Players number="6" cash="380" certLimit="14"/> + <Players number="7" cash="330" certLimit="12"/> + </Component> + <Component name="Bank" class="rails.game.Bank"> + <Bank amount="14268"/> + <Money format="@K"/> + </Component> + <Component name="TileManager" class="rails.game.TileManager" + file="TileSet.xml"/> + <Component name="Map" class="rails.game.MapManager" file="Map.xml"/> + <Component name="CompanyManager" class="rails.game.CompanyManager" + file="CompanyManager.xml"/> + <Component name="StockMarket" class="rails.game.StockMarket" + file="StockMarket.xml"/> + <Component name="TrainManager" class="rails.game.TrainManager"> + <Defaults> + <Reach base="stops" countTowns="yes"/> + <Score towns="yes"/> + </Defaults> + <TrainType name="1G" majorStops="1" cost="100" quantity="10"> + <Reach countTowns="no"/> + <NewPhase phaseName="2"/> + </TrainType> + <TrainType name="2" majorStops="2" cost="90" quantity="14"/> + <TrainType name="3" majorStops="3" cost="180" quantity="5"> + <NewPhase phaseName="3"/> + </TrainType> + <TrainType name="3+1" majorStops="3" minorStops="1" cost="280" quantity="2"> + <NewPhase phaseName="3+1"/> + </TrainType> + <TrainType name="4" majorStops="4" cost="470" quantity="4"> + <NewPhase phaseName="4"/> + </TrainType> + <TrainType name="4E" majorStops="4" cost="500" quantity="1"> + <Reach countTowns="no"/> + <Score towns="no"/> + <NewPhase phaseName="4E"/> + </TrainType> + <TrainType name="4+1" majorStops="4" minorStops="1" cost="530" quantity="1"> + <NewPhase phaseName="4+1"/> + </TrainType> + <TrainType name="4+2" majorStops="4" minorStops="2" cost="560" quantity="1"/> + <TrainType name="5" majorStops="5" cost="800" quantity="2"> + <NewPhase phaseName="5"/> + </TrainType> + <TrainType name="5E" majorStops="5" cost="830" quantity="1"> + <Reach countTowns="no"/> + <Score towns="no"/> + </TrainType> + <TrainType name="5+2" majorStops="5" minorStops="2" cost="860" quantity="1"> + <NewPhase phaseName="5+2"/> + </TrainType> + <TrainType name="5+3" majorStops="5" minorStops="3" cost="900" quantity="1"/> + <TrainType name="5+4" majorStops="5" minorStops="4" cost="960" quantity="1"> + <IfOption name="UnlimitedTopTrains" value="Yes"> + <Attributes quantity="-1"/> + </IfOption> + </TrainType> + <TrainType name="2G" majorStops="2" cost="230" quantity="6"> + <Reach countTowns="no"/> + </TrainType> + <TrainType name="3G" majorStops="3" cost="590" quantity="2"> + <Reach countTowns="no"/> + <NewPhase phaseName="3G"/> + </TrainType> + <TrainType name="4G" majorStops="4" cost="1000" quantity="3"> + <Reach countTowns="no"/> + <NewPhase phaseName="4G"/> + <IfOption name="UnlimitedTopTrains" value="Yes"> + <Attributes quantity="-1"/> + </IfOption> + </TrainType> + <!-- TBD: Add support for 1837's trade-in rule, which says a + company that is at its train limit may trade in any train + to the bank pool for half face value, but only if that + company then replaces it by buying another train. + (However, companies that get "caught" when the train limit + falls must still discard one without compensation.) --> + <!-- TBD: Another rule that needs to be enforced in 1837: If + minor or coal company A merges into major company B and + causes B to exceed its train limit, any trains discarded + must be from A, even if they are better than B's own. --> + </Component> + <Component name="PhaseManager" class="rails.game.PhaseManager"> + <Phase name="2" realName="1"> + <!-- Wish list: This "phase change" ought not be needed. + It is triggered by the first purchase of a 1G-train + and makes 2-trains available. (I doubt it will be + a problem, since all ten coal companies need to buy + 1G trains on their first turn in order to run.) --> + <Tiles colour="yellow"/> + <Trains released="2"/> + <OperatingRounds number="1"/> + </Phase> + <Phase name="3" realName="2"> + <Tiles colour="yellow,green"/> + <Trains tradingAllowed="yes" limitStep="2" released="2G"/> + <!-- Wish list: The 2G trains ought not be available + until both the first 3-train and the last 1G-train + have been purchased. --> + <!-- TBD: Private companies no longer block tile-laying + in their hex by other players. --> + <!-- Open Bosnia-Herzegovina for building: --> + <LayTile hex="L17" tile="0"/> + <LayTile hex="L19" tile="-1"/> + <LayTile hex="L21" tile="0"/> + <LayTile hex="M18" tile="0" cost="70"/> + <LayTile hex="M20" tile="0" cost="70"/> + <LayTile hex="M22" tile="0" cost="70"/> + <LayTile hex="N19" tile="0" cost="70"/> + <LayTile hex="N21" tile="-10" city="Sarajevo"/> + <OperatingRounds number="2"/> + </Phase> + <Phase name="3+1" realName="2"> + <Trains limitStep="3"/> + </Phase> + <Phase name="4" realName="2"> + <!-- Wish list: The 3G trains ought not be available + until both the first 4-train and the last 2G-train + have been purchased. --> + <Trains rusted="2" released="3G"/> + <!-- Clear out Italy, make it off-limits, and place + green tile 426 on Bozen: --> + <LayTile hex="K4" tile="-37004" removeToken="yes"/> + <LayTile hex="K6" tile="426" orientation="3"/> + <LayTile hex="K8" tile="-37004" removeToken="yes"/> + <LayTile hex="K10" tile="-37004" removeToken="yes"/> + <LayTile hex="L3" tile="-37004" removeToken="yes"/> + <LayTile hex="L5" tile="-37004" removeToken="yes"/> + <LayTile hex="L7" tile="-37004" removeToken="yes"/> + <LayTile hex="L9" tile="-37004" removeToken="yes"/> + <LayTile hex="M4" tile="-37004" removeToken="yes"/> + <LayTile hex="M6" tile="-37004" removeToken="yes"/> + <LayTile hex="M8" tile="-37004" removeToken="yes"/> + <!-- TBD: S1-S5 must all convert, forming Sd. --> + <!-- TBD: K1 may convert, forming KK. If it doesn't, it + gets the option again at the start of each + round. If and when K1 converts, then K2-K3 + get the option to convert, and get it again at + the start of each round until forced to + convert upon the first 4+1 train purchase. --> + </Phase> + <Phase name="3G" realName="2"> + <Trains rusted="1G"/> + </Phase> + <Phase name="4E" realName="2"> + <!-- TBD: U1 director may convert, forming Ug. If he + doesn't, he gets the option again at the start + of each round. If and when U1 converts, then + U2-U3 directors get the option to convert, and + get it again (after KK) at the start of each + round until forced to convert upon the first + 5 train purchase. Non-director shareholders + of U1 and U3 have no choice, they convert when + the director of that minor converts. --> + </Phase> + <Phase name="4+1" realName="2"> + <!-- TBD: K1-K3 must all convert, forming KK, if they + haven't already. --> + </Phase> + <Phase name="5" realName="3"> + <Tiles colour="yellow,green,brown"/> + <!-- Wish list: The 4G trains ought not be available + until both the first 5-train and the last 3G-train + have been purchased. --> + <Trains rusted="3" limitStep="4" released="4G"/> + <!--Privates close="yes"/--> + <Info key="PhaseClosesAllPrivates"/> + <!-- TBD: U1-U3 must all convert, forming Ug, if they + haven't already. --> + <!-- TBD: All coal companies must convert even if their + major companies haven't formed. --> + <OffBoardRevenue step="2"/> + <OperatingRounds number="3"/> + </Phase> + <Phase name="4G" realName="3"> + <Trains rusted="2G"/> + </Phase> + <Phase name="5+2" realName="3"> + <Trains rusted="3+1"/> + </Phase> + </Component> +</ComponentManager> diff --git a/data/1837/Map.xml b/data/1837/Map.xml new file mode 100644 index 0000000..7ca575a --- /dev/null +++ b/data/1837/Map.xml @@ -0,0 +1,181 @@ +<Map tileOrientation="EW" letterOrientation="vertical" even="A"> + <Hex name="A12" tile="-3"/> + <Hex name="A14" tile="-37001" value="30,50" orientation="3" city="RGTE"/> + <Hex name="B9" tile="-3" orientation="5"/> + <Hex name="B11" tile="0"/> + <Hex name="B13" tile="0"/> + <Hex name="B15" tile="0"/> + <Hex name="B17" tile="0" cost="70"/> + <Hex name="B27" tile="-8" orientation="1"/> + <Hex name="B29" tile="0"/> + <Hex name="B31" tile="0"/> + <Hex name="B33" tile="-37001" value="20,50" orientation="3" city="MLB"/> + <Hex name="B35" tile="0"/> + <Hex name="C10" tile="0"/> + <Hex name="C12" tile="-37402" city="Prag"/> + <Hex name="C14" tile="0"/> + <Hex name="C16" tile="-1"/> + <Hex name="C18" tile="0" cost="70"/> + <Hex name="C20" tile="-37001" value="20,40" orientation="3" city="EOD"/> + <Hex name="C22" tile="-37001" value="25,45" orientation="2" city="EKT"/> + <Hex name="C24" tile="-37007" city="Krakau"/> + <Hex name="C26" tile="0" cost="70"/> + <Hex name="C28" tile="-1" cost="70"/> + <Hex name="C30" tile="0"/> + <Hex name="C32" tile="-2"/> + <Hex name="C34" tile="-3007" city="Lemberg"/> + <Hex name="D11" tile="-1"/> + <Hex name="D13" tile="0"/> + <Hex name="D15" tile="0"/> + <Hex name="D17" tile="0"/> + <Hex name="D19" tile="-1"/> + <Hex name="D21" tile="0"/> + <Hex name="D23" tile="-1"/> + <Hex name="D25" tile="0"/> + <Hex name="D27" tile="0"/> + <Hex name="D29" tile="0" cost="70"/> + <Hex name="D31" tile="0" cost="70"/> + <Hex name="D33" tile="0"/> + <Hex name="D35" tile="0"/> + <Hex name="D37" tile="-3007" city="Tarnopol"/> + <Hex name="D39" tile="-7" orientation="2"/> + <Hex name="E12" tile="-37001" value="30,50" orientation="5" city="EPP"... [truncated message content] |
From: Erik V. <ev...@us...> - 2012-05-09 12:16:51
|
rails/game/StockRound.java | 2 test/data/test/1835_SellDoubleShare.rails |binary test/data/test/1835_SellDoubleShare.report | 1638 +++++++++++++++++++++++++++++ 3 files changed, 1639 insertions(+), 1 deletion(-) New commits: commit a20803ce6fd4aadb3a8d0cb84c01b0338ed48d54 Author: Erik Vos <eri...@xs...> Date: Wed May 9 14:16:10 2012 +0200 1835: prevent selling double non-president share in parts. Follow-up fix to previous commit. Test case added. diff --git a/rails/game/StockRound.java b/rails/game/StockRound.java index 91a4c6e..7f03de7 100644 --- a/rails/game/StockRound.java +++ b/rails/game/StockRound.java @@ -473,7 +473,7 @@ public class StockRound extends Round { number = shareCountPerUnit[shareSize]; // If you can dump a presidency, you may sell additional single shares that you don't own - if (shareSize == 1) number += extraSingleShares; + if (dumpThreshold > 0 && shareSize == 1) number += extraSingleShares; if (number == 0) continue; /* In some games (1856), a just bought share may not be sold */ diff --git a/test/data/test/1835_SellDoubleShare.rails b/test/data/test/1835_SellDoubleShare.rails new file mode 100644 index 0000000..1070978 Binary files /dev/null and b/test/data/test/1835_SellDoubleShare.rails differ diff --git a/test/data/test/1835_SellDoubleShare.report b/test/data/test/1835_SellDoubleShare.report new file mode 100644 index 0000000..ac20c94 --- /dev/null +++ b/test/data/test/1835_SellDoubleShare.report @@ -0,0 +1,1638 @@ +GameIs,1835 +PlayerIs,1,m1 +PlayerIs,2,m2 +PlayerIs,3,m3 +PlayerIs,4,m4 +PlayerCash,475 +BankHas,10100 +StartOfPhase,2 +BankSizeIs,10100 +StartOfInitialRound +HasPriority,m1 +BuysItemFor,m4,NF,100 +ALSO_GETS,m4,CERT_NAME,BY,10 +BuysItemFor,m3,HB,160 +BuysItemFor,m2,BB,130 +BuysItemFor,m1,OBB,120 +ALSO_GETS,m1,CERT_NAME,BY,10 +BuysItemFor,m1,PfB,150 +ALSO_GETS,m1,CERT_NAME,BY,10 +BuysItemFor,m2,LD,190 +ALSO_GETS,m2,PRES_CERT_NAME,SX,20 +BuysItemFor,m3,M2,170 +FloatsWithCash,M2,170 +BuysItemFor,m4,M3,80 +FloatsWithCash,M3,80 +BuysItemFor,m1,M4,160 +FloatsWithCash,M4,160 +BuysItemFor,m2,M5,80 +FloatsWithCash,M5,80 +BuysItemFor,m3,M1,80 +FloatsWithCash,M1,80 +BuysItemFor,m4,M6,80 +FloatsWithCash,M6,80 +CannotBuyAnything,m1 +CannotBuyAnything,m2 +CannotBuyAnything,m3 +BuysItemFor,m4,PRES_CERT_NAME,BY,20,184 +FloatsWithCash,BY,460 +Has,M1,80 +Has,M2,170 +Has,M3,80 +Has,M4,160 +Has,M5,80 +Has,M6,80 +Has,BY,460 +Has,m1,45 +Has,m2,75 +Has,m3,65 +Has,m4,31 +StartStockRound,1 +HasPriority,m1 +PASSES,m1 +PASSES,m2 +PASSES,m3 +PASSES,m4 + +END_SR,1 +Has,M1,80 +Has,M2,170 +Has,M3,80 +Has,M4,160 +Has,M5,80 +Has,M6,80 +Has,BY,460 +Has,m1,45 +Has,m2,75 +Has,m3,65 +Has,m4,31 +START_OR,1.1 +ReceivesFor,m4,5,NF +ReceivesFor,m1,10,OBB +ReceivesFor,m1,15,PfB +ReceivesFor,m2,20,LD +ReceivesFor,m2,25,BB +ReceivesFor,m3,30,HB + +CompanyOperates,M1,m3 +LaysTileAt,M1,201,H2,SW +CompanyDoesNotPayDividend,M1 +BuysTrain,M1,2,IPO,80 +FirstTrainBought,2 + +CompanyOperates,M2,m3 +LaysTileAt,M2,8,E17,E +CompanyDoesNotPayDividend,M2 +BuysTrain,M2,2,IPO,80 + +CompanyOperates,M3,m4 +LaysTileAt,M3,6,F14,SE +CompanyDoesNotPayDividend,M3 +BuysTrain,M3,2,IPO,80 + +CompanyOperates,M4,m1 +LaysTileAt,M4,5,G5,SE +CompanyDoesNotPayDividend,M4 +BuysTrain,M4,2,IPO,80 + +CompanyOperates,M5,m2 +LaysTileAt,M5,8,D18,NE +CompanyDoesNotPayDividend,M5 +BuysTrain,M5,2,IPO,80 + +CompanyOperates,M6,m4 +LaysTileAt,M6,9,B10,NW +CompanyDoesNotPayDividend,M6 +BuysTrain,M6,2,IPO,80 + +CompanyOperates,BY,m4 +LaysTileAt,BY,201,O15,NE +LaysTileAt,BY,9,N14,NW +LAYS_FREE_TOKEN_ON,BY,L14 +PrivateCloses,NF +CompanyDoesNotPayDividend,BY +PRICE_MOVES_LOG,BY,92,C3,86,B3 +BuysTrain,BY,2,IPO,80 +BuysTrain,BY,2,IPO,80 + +EndOfOperatingRound,1.1 +ORWorthIncrease,m1,1.1,13 +ORWorthIncrease,m2,1.1,45 +ORWorthIncrease,m3,1.1,30 +ORWorthIncrease,m4,1.1,-113 +Has,M1,0 +Has,M2,90 +Has,M3,0 +Has,M4,80 +Has,M5,0 +Has,M6,0 +Has,BY,300 +Has,m1,70 +Has,m2,120 +Has,m3,95 +Has,m4,36 +StartStockRound,2 +HasPriority,m1 +PASSES,m1 +BUY_SHARE_LOG,m2,10,BY,IPO,92 +PriceIsPaidTo,92,BY +BUY_SHARE_LOG,m3,10,BY,IPO,92 +PriceIsPaidTo,92,BY +PASSES,m4 +PASSES,m1 +PASSES,m2 +PASSES,m3 + +END_SR,2 +Has,M1,0 +Has,M2,90 +Has,M3,0 +Has,M4,80 +Has,M5,0 +Has,M6,0 +Has,BY,484 +Has,m1,70 +Has,m2,28 +Has,m3,3 +Has,m4,36 +START_OR,2.1 +ReceivesFor,m1,10,OBB +ReceivesFor,m1,15,PfB +ReceivesFor,m2,20,LD +ReceivesFor,m2,25,BB +ReceivesFor,m3,30,HB + +CompanyOperates,M1,m3 +LaysTileAt,M1,9,J2,NW +CompanyRevenue,M1,40 +CompanySplits,M1,40 +M1 receives 20 +Payout,m3,20,1,100 + +CompanyOperates,M2,m3 +LaysTileAt,M2,8,F16,W +CompanyRevenue,M2,50 +CompanySplits,M2,50 +M2 receives 25 +Payout,m3,25,1,100 + +CompanyOperates,M3,m4 +LaysTileAt,M3,8,E13,SE +CompanyRevenue,M3,50 +CompanySplits,M3,50 +M3 receives 25 +Payout,m4,25,1,100 + +CompanyOperates,M4,m1 +LaysTileAt,M4,3,F6,SW +CompanyRevenue,M4,30 +CompanySplits,M4,30 +M4 receives 15 +Payout,m1,15,1,100 + +CompanyOperates,M5,m2 +LaysTileAt,M5,8,C19,E +CompanyRevenue,M5,50 +CompanySplits,M5,50 +M5 receives 25 +Payout,m2,25,1,100 + +CompanyOperates,M6,m4 +LaysTileAt,M6,6,A11,NW +CompanyRevenue,M6,60 +CompanySplits,M6,60 +M6 receives 30 +Payout,m4,30,1,100 + +CompanyOperates,BY,m4 +LaysTileAtFor,BY,8,M13,NE,50 +LaysTileAt,BY,9,K13,NW +CompanyRevenue,BY,60 +CompanyPaysOutFull,BY,60 +Payout,m2,6,1,10 +Payout,m1,12,2,10 +Payout,m4,18,3,10 +Payout,m3,6,1,10 +PRICE_MOVES_LOG,BY,86,B3,92,C3 + +EndOfOperatingRound,2.1 +ORWorthIncrease,m1,2.1,64 +ORWorthIncrease,m2,2.1,82 +ORWorthIncrease,m3,2.1,87 +ORWorthIncrease,m4,2.1,91 +Has,M1,20 +Has,M2,115 +Has,M3,25 +Has,M4,95 +Has,M5,25 +Has,M6,30 +Has,BY,434 +Has,m1,122 +Has,m2,104 +Has,m3,84 +Has,m4,109 +StartStockRound,3 +HasPriority,m4 +BUY_SHARE_LOG,m4,10,BY,IPO,92 +PriceIsPaidTo,92,BY +BUY_SHARE_LOG,m1,10,BY,IPO,92 +PriceIsPaidTo,92,BY +BUY_SHARE_LOG,m2,10,BY,IPO,92 +PriceIsPaidTo,92,BY +PASSES,m3 +PASSES,m4 +PASSES,m1 +PASSES,m2 + +END_SR,3 +PRICE_MOVES_LOG,BY,92,C3,98,C2 +SoldOut,BY,92,C3,98,C2 +Has,M1,20 +Has,M2,115 +Has,M3,25 +Has,M4,95 +Has,M5,25 +Has,M6,30 +Has,BY,710 +Has,m1,30 +Has,m2,12 +Has,m3,84 +Has,m4,17 +START_OR,3.1 +ReceivesFor,m1,10,OBB +ReceivesFor,m1,15,PfB +ReceivesFor,m2,20,LD +ReceivesFor,m2,25,BB +ReceivesFor,m3,30,HB + +CompanyOperates,M1,m3 +LaysTileAt,M1,4,K3,NW +CompanyRevenue,M1,40 +CompanySplits,M1,40 +M1 receives 20 +Payout,m3,20,1,100 + +CompanyOperates,M2,m3 +LaysTileAt,M2,9,F20,NW +CompanyRevenue,M2,50 +CompanySplits,M2,50 +M2 receives 25 +Payout,m3,25,1,100 + +CompanyOperates,M3,m4 +LaysTileAt,M3,8,E11,NW +CompanyRevenue,M3,50 +CompanySplits,M3,50 +M3 receives 25 +Payout,m4,25,1,100 + +CompanyOperates,M4,m1 +LaysTileAt,M4,8,G7,W +CompanyRevenue,M4,30 +CompanySplits,M4,30 +M4 receives 15 +Payout,m1,15,1,100 + +CompanyOperates,M5,m2 +CompanyRevenue,M5,50 +CompanySplits,M5,50 +M5 receives 25 +Payout,m2,25,1,100 + +CompanyOperates,M6,m4 +LaysTileAt,M6,58,B12,SW +CompanyRevenue,M6,60 +CompanySplits,M6,60 +M6 receives 30 +Payout,m4,30,1,100 + +CompanyOperates,BY,m4 +LaysTileAt,BY,8,J12,SE +LaysTileAt,BY,9,J10,W +CompanyRevenue,BY,130 +CompanyPaysOutFull,BY,130 +Payout,m2,26,2,10 +Payout,m1,39,3,10 +Payout,m4,52,4,10 +Payout,m3,13,1,10 +PRICE_MOVES_LOG,BY,98,C2,108,D2 + +EndOfOperatingRound,3.1 +ORWorthIncrease,m1,3.1,109 +ORWorthIncrease,m2,3.1,116 +ORWorthIncrease,m3,3.1,98 +ORWorthIncrease,m4,3.1,147 +Has,M1,40 +Has,M2,140 +Has,M3,50 +Has,M4,110 +Has,M5,50 +Has,M6,60 +Has,BY,710 +Has,m1,109 +Has,m2,108 +Has,m3,172 +Has,m4,124 +StartStockRound,4 +HasPriority,m3 +BUY_SHARE_LOG,m3,10,SX,IPO,88 +BUY_SHARE_LOG,m4,10,SX,IPO,88 +BUY_SHARE_LOG,m1,10,SX,IPO,88 +FloatsWithCash,SX,440 +BUY_SHARE_LOG,m2,10,SX,IPO,88 +PriceIsPaidTo,88,SX +PASSES,m3 +PASSES,m4 +PASSES,m1 +PASSES,m2 + +END_SR,4 +SoldOutNoRaise,BY,108,D2 +Has,M1,40 +Has,M2,140 +Has,M3,50 +Has,M4,110 +Has,M5,50 +Has,M6,60 +Has,BY,710 +Has,SX,528 +Has,m1,21 +Has,m2,20 +Has,m3,84 +Has,m4,36 +START_OR,4.1 +ReceivesFor,m1,10,OBB +ReceivesFor,m1,15,PfB +ReceivesFor,m2,20,LD +ReceivesFor,m2,25,BB +ReceivesFor,m3,30,HB + +CompanyOperates,M1,m3 +LaysTileAt,M1,8,L4,NW +CompanyRevenue,M1,40 +CompanySplits,M1,40 +M1 receives 20 +Payout,m3,20,1,100 + +CompanyOperates,M2,m3 +LaysTileAt,M2,201,H20,E +CompanyRevenue,M2,50 +CompanySplits,M2,50 +M2 receives 25 +Payout,m3,25,1,100 + +CompanyOperates,M3,m4 +LaysTileAt,M3,8,D10,NE +CompanyRevenue,M3,60 +CompanySplits,M3,60 +M3 receives 30 +Payout,m4,30,1,100 +BuysTrain,M3,2,IPO,80 +All 2-trains are sold out, 2+2-trains now available + +CompanyOperates,M4,m1 +LaysTileAt,M4,9,F8,SW +CompanyRevenue,M4,30 +CompanySplits,M4,30 +M4 receives 15 +Payout,m1,15,1,100 + +CompanyOperates,M5,m2 +LaysTileAt,M5,9,D20,NW +CompanyRevenue,M5,50 +CompanySplits,M5,50 +M5 receives 25 +Payout,m2,25,1,100 + +CompanyOperates,M6,m4 +LaysTileAt,M6,58,B14,E +CompanyRevenue,M6,60 +CompanySplits,M6,60 +M6 receives 30 +Payout,m4,30,1,100 + +CompanyOperates,BY,m4 +LaysTileAtFor,BY,9,K15,SW,70 +LaysTileAt,BY,69,I17,W +CompanyRevenue,BY,130 +CompanyPaysOutFull,BY,130 +Payout,m2,26,2,10 +Payout,m1,39,3,10 +Payout,m4,52,4,10 +Payout,m3,13,1,10 +PRICE_MOVES_LOG,BY,108,D2,120,E2 +BuysTrain,BY,2+2,IPO,120 +FirstTrainBought,2+2 + +CompanyOperates,SX,m2 +LaysTileAt,SX,5,H16,SW +LaysTileAt,SX,9,H18,W +CompanyDoesNotPayDividend,SX +PRICE_MOVES_LOG,SX,88,C4,84,B4 +BuysTrain,SX,2+2,IPO,120 +PrivateCloses,LD +BuysTrain,SX,2+2,IPO,120 + +EndOfOperatingRound,4.1 +ORWorthIncrease,m1,4.1,111 +ORWorthIncrease,m2,4.1,-82 +ORWorthIncrease,m3,4.1,96 +ORWorthIncrease,m4,4.1,156 +Has,M1,60 +Has,M2,165 +Has,M3,0 +Has,M4,125 +Has,M5,75 +Has,M6,90 +Has,BY,520 +Has,SX,288 +Has,m1,100 +Has,m2,116 +Has,m3,172 +Has,m4,148 +StartStockRound,5 +HasPriority,m3 +BUY_SHARE_LOG,m3,10,SX,IPO,88 +PriceIsPaidTo,88,SX +BUY_SHARE_LOG,m4,10,SX,IPO,88 +PriceIsPaidTo,88,SX +BUY_SHARE_LOG,m1,10,SX,IPO,88 +PriceIsPaidTo,88,SX +BUY_SHARE_LOG,m2,10,SX,IPO,88 +PriceIsPaidTo,88,SX +SharesReleased,All,BA +PASSES,m3 +PASSES,m4 +PASSES,m1 +PASSES,m2 + +END_SR,5 +PRICE_MOVES_LOG,BY,120,E2,132,E1 +SoldOut,BY,120,E2,132,E1 +PRICE_MOVES_LOG,SX,84,B4,86,B3 +SoldOut,SX,84,B4,86,B3 +Has,M1,60 +Has,M2,165 +Has,M3,0 +Has,M4,125 +Has,M5,75 +Has,M6,90 +Has,BY,520 +Has,SX,640 +Has,m1,12 +Has,m2,28 +Has,m3,84 +Has,m4,60 +START_OR,5.1 +ReceivesFor,m1,10,OBB +ReceivesFor,m1,15,PfB +ReceivesFor,m2,25,BB +ReceivesFor,m3,30,HB + +CompanyOperates,M1,m3 +LaysTileAtFor,M1,202,I3,NE,50 +CompanyRevenue,M1,60 +CompanySplits,M1,60 +M1 receives 30 +Payout,m3,30,1,100 + +CompanyOperates,M2,m3 +LaysTileAt,M2,9,E9,SW +CompanyRevenue,M2,50 +CompanySplits,M2,50 +M2 receives 25 +Payout,m3,25,1,100 + +CompanyOperates,M3,m4 +LaysTileAt,M3,4,B16,W +CompanyRevenue,M3,110 +CompanySplits,M3,110 +M3 receives 55 +Payout,m4,55,1,100 + +CompanyOperates,M4,m1 +LaysTileAt,M4,58,F4,E +CompanyRevenue,M4,30 +CompanySplits,M4,30 +M4 receives 15 +Payout,m1,15,1,100 + +CompanyOperates,M5,m2 +LaysTileAt,M5,3,I15,NE +CompanyRevenue,M5,50 +CompanySplits,M5,50 +M5 receives 25 +Payout,m2,25,1,100 + +CompanyOperates,M6,m4 +LaysTileAt,M6,8,B18,SE +CompanyRevenue,M6,60 +CompanySplits,M6,60 +M6 receives 30 +Payout,m4,30,1,100 +BuysTrain,M6,2+2,IPO,120 +All 2+2-trains are sold out, 3-trains now available + +CompanyOperates,BY,m4 +LaysTileAt,BY,7,N16,SW +LaysTileAtFor,BY,9,K7,SW,50 +LAYS_TOKEN_ON,BY,H20,160 +CompanyRevenue,BY,190 +CompanyPaysOutFull,BY,190 +Payout,m1,57,3,10 +Payout,m4,76,4,10 +Payout,m2,38,2,10 +Payout,m3,19,1,10 +PRICE_MOVES_LOG,BY,132,E1,148,F1 + +CompanyOperates,SX,m2 +LaysTileAtFor,SX,7,J14,E,70 +LaysTileAt,SX,57,F10,W +CompanyRevenue,SX,60 +CompanyPaysOutFull,SX,60 +Payout,m1,12,2,10 +Payout,m4,12,2,10 +Payout,m2,24,4,10 +Payout,m3,12,2,10 +PRICE_MOVES_LOG,SX,86,B3,92,C3 +BuysTrain,SX,3,IPO,180 +FirstTrainBought,3 +StartOfPhase,3 + +EndOfOperatingRound,5.1 +ORWorthIncrease,m1,5.1,169 +ORWorthIncrease,m2,5.1,168 +ORWorthIncrease,m3,5.1,144 +ORWorthIncrease,m4,5.1,249 +Has,M1,40 +Has,M2,190 +Has,M3,55 +Has,M4,140 +Has,M5,100 +Has,M6,0 +Has,BY,310 +Has,SX,390 +Has,m1,121 +Has,m2,140 +Has,m3,200 +Has,m4,233 +StartStockRound,6 +HasPriority,m3 +START_COMPANY_LOG,m3,BA,84,168,2,20,BANK +SharesReleased,4 10%,PR +BUY_SHARE_LOG,m4,10,BA,IPO,84 +BUY_SHARE_LOG,m1,10,BA,IPO,84 +BUY_SHARE_LOG,m2,10,BA,IPO,84 +FloatsWithCash,BA,420 +SharesReleased,All,WT +PASSES,m3 +BUY_SHARE_LOG,m4,10,BA,IPO,84 +PriceIsPaidTo,84,BA +PASSES,m1 +PASSES,m2 +PASSES,m3 +PASSES,m4 + +END_SR,6 +PRICE_STAYS_LOG,BY,148,F1 +SoldOutNoRaise,BY,148,F1 +PRICE_MOVES_LOG,SX,92,C3,98,C2 +SoldOut,SX,92,C3,98,C2 +Has,M1,40 +Has,M2,190 +Has,M3,55 +Has,M4,140 +Has,M5,100 +Has,M6,0 +Has,BY,310 +Has,SX,390 +Has,BA,504 +Has,m1,37 +Has,m2,56 +Has,m3,32 +Has,m4,65 +START_OR,6.1 +ReceivesFor,m1,10,OBB +ReceivesFor,m1,15,PfB +ReceivesFor,m2,25,BB +ReceivesFor,m3,30,HB + +CompanyOperates,M1,m3 +LaysTileAt,M1,208,H2,SW +CompanyRevenue,M1,70 +CompanySplits,M1,70 +M1 receives 35 +Payout,m3,35,1,100 + +CompanyOperates,M2,m3 +LaysTileAt,M2,209,E19,NE +CompanyRevenue,M2,70 +CompanySplits,M2,70 +M2 receives 35 +Payout,m3,35,1,100 +BuysTrain,M2,3,IPO,180 + +CompanyOperates,M3,m4 +LaysTileAt,M3,12,F14,E +CompanyRevenue,M3,140 +CompanySplits,M3,140 +M3 receives 70 +Payout,m4,70,1,100 + +CompanyOperates,M4,m1 +LaysTileAt,M4,24,D10,NE +CompanyRevenue,M4,60 +CompanySplits,M4,60 +M4 receives 30 +Payout,m1,30,1,100 + +CompanyOperates,M5,m2 +LaysTileAt,M5,207,H20,NW +CompanyRevenue,M5,80 +CompanySplits,M5,80 +M5 receives 40 +Payout,m2,40,1,100 + +CompanyOperates,M6,m4 +LaysTileAt,M6,12,A11,W +CompanyRevenue,M6,80 +CompanySplits,M6,80 +M6 receives 40 +Payout,m4,40,1,100 + +CompanyOperates,BY,m4 +LaysTileAt,BY,8,G19,NE +CompanyRevenue,BY,230 +CompanyPaysOutFull,BY,230 +Payout,m4,92,4,10 +Payout,m1,69,3,10 +Payout,m2,46,2,10 +Payout,m3,23,1,10 +PRICE_MOVES_LOG,BY,148,F1,166,G1 +BuysTrain,BY,2,M3,55 + +CompanyOperates,SX,m2 +LaysTileAt,SX,12,H16,SE +CompanyRevenue,SX,180 +CompanyPaysOutFull,SX,180 +Payout,m4,36,2,10 +Payout,m1,36,2,10 +Payout,m2,72,4,10 +Payout,m3,36,2,10 +PRICE_MOVES_LOG,SX,98,C2,108,D2 + +CompanyOperates,BA,m3 +LaysTileAt,BA,210,L6,E +LAYS_TOKEN_ON,BA,I3,60 +CompanyDoesNotPayDividend,BA +PRICE_MOVES_LOG,BA,84,B4,78,A4 +BuysTrain,BA,3,IPO,180 + +EndOfOperatingRound,6.1 +ORWorthIncrease,m1,6.1,228 +ORWorthIncrease,m2,6.1,253 +ORWorthIncrease,m3,6.1,185 +ORWorthIncrease,m4,6.1,318 +Has,M1,75 +Has,M2,45 +Has,M3,180 +Has,M4,170 +Has,M5,140 +Has,M6,40 +Has,BY,255 +Has,SX,390 +Has,BA,264 +Has,m1,197 +Has,m2,239 +Has,m3,191 +Has,m4,303 +START_OR,6.2 +ReceivesFor,m1,10,OBB +ReceivesFor,m1,15,PfB +ReceivesFor,m2,25,BB +ReceivesFor,m3,30,HB + +CompanyOperates,M1,m3 +LaysTileAt,M1,207,I3,W +CompanyRevenue,M1,80 +CompanySplits,M1,80 +M1 receives 40 +Payout,m3,40,1,100 + +CompanyOperates,M2,m3 +LaysTileAt,M2,9,F18,SW +CompanyRevenue,M2,180 +CompanySplits,M2,180 +M2 receives 90 +Payout,m3,90,1,100 + +CompanyOperates,M3,m4 +CompanyRevenue,M3,70 +CompanySplits,M3,70 +M3 receives 35 +Payout,m4,35,1,100 +BuysTrain,M3,3,IPO,180 +All 3-trains are sold out, 3+3-trains now available + +CompanyOperates,M4,m1 +LaysTileAt,M4,206,G5,SE +CompanyRevenue,M4,70 +CompanySplits,M4,70 +M4 receives 35 +Payout,m1,35,1,100 + +CompanyOperates,M5,m2 +LaysTileAt,M5,9,G17,SW +CompanyRevenue,M5,80 +CompanySplits,M5,80 +M5 receives 40 +Payout,m2,40,1,100 + +CompanyOperates,M6,m4 +LaysTileAt,M6,25,C19,SW +CompanyRevenue,M6,80 +CompanySplits,M6,80 +M6 receives 40 +Payout,m4,40,1,100 + +CompanyOperates,BY,m4 +LaysTileAt,BY,20,F20,NW +CompanyRevenue,BY,320 +CompanyWithholds,BY,320 +PRICE_MOVES_LOG,BY,166,G1,148,F1 + +CompanyOperates,SX,m2 +LaysTileAt,SX,23,D18,NW +CompanyRevenue,SX,270 +CompanyPaysOutFull,SX,270 +Payout,m4,54,2,10 +Payout,m1,54,2,10 +Payout,m2,108,4,10 +Payout,m3,54,2,10 +PRICE_MOVES_LOG,SX,108,D2,120,E2 + +CompanyOperates,BA,m3 +LaysTileAt,BA,23,J2,NW +CompanyRevenue,BA,120 +CompanyPaysOutFull,BA,120 +Payout,m4,24,2,10 +Payout,m2,12,1,10 +Payout,m1,12,1,10 +Payout,m3,24,2,10 +PRICE_MOVES_LOG,BA,78,A4,84,B4 + +EndOfOperatingRound,6.2 +ORWorthIncrease,m1,6.2,102 +ORWorthIncrease,m2,6.2,203 +ORWorthIncrease,m3,6.2,256 +ORWorthIncrease,m4,6.2,117 +Has,M1,115 +Has,M2,135 +Has,M3,35 +Has,M4,205 +Has,M5,180 +Has,M6,80 +Has,BY,575 +Has,SX,390 +Has,BA,264 +Has,m1,323 +Has,m2,424 +Has,m3,429 +Has,m4,456 +StartStockRound,7 +HasPriority,m1 +BUY_SHARE_LOG,m1,10,PR,IPO,154 +BUY_SHARE_LOG,m2,10,PR,IPO,154 +BUY_SHARE_LOG,m3,10,PR,IPO,154 +BUY_SHARE_LOG,m4,10,PR,IPO,154 +START_COMPANY_LOG,m1,WT,84,168,2,20,BANK +BUY_SHARE_LOG,m2,10,WT,IPO,84 +BUY_SHARE_LOG,m3,10,BA,IPO,84 +PriceIsPaidTo,84,BA +BUY_SHARE_LOG,m4,10,WT,IPO,84 +PASSES,m1 +BUY_SHARE_LOG,m2,10,WT,IPO,84 +FloatsWithCash,WT,420 +SharesReleased,All,HE +BUY_SHARE_LOG,m3,10,BA,IPO,84 +PriceIsPaidTo,84,BA +BUY_SHARE_LOG,m4,20,BA,IPO,168 +PriceIsPaidTo,168,BA +PASSES,m1 +BUY_SHARE_LOG,m2,10,WT,IPO,84 +PriceIsPaidTo,84,WT +IS_NOW_PRES_OF,m2,WT +BUY_SHARE_LOG,m3,10,WT,IPO,84 +PriceIsPaidTo,84,WT +PASSES,m4 +PASSES,m1 +PASSES,m2 +PASSES,m3 + +END_SR,7 +PRICE_STAYS_LOG,BY,148,F1 +SoldOutNoRaise,BY,148,F1 +PRICE_MOVES_LOG,SX,120,E2,132,E1 +SoldOut,SX,120,E2,132,E1 +PRICE_MOVES_LOG,BA,84,B4,86,B3 +SoldOut,BA,84,B4,86,B3 +Has,M1,115 +Has,M2,135 +Has,M3,35 +Has,M4,205 +Has,M5,180 +Has,M6,80 +Has,BY,575 +Has,SX,390 +Has,BA,600 +Has,WT,588 +Has,m1,1 +Has,m2,18 +Has,m3,23 +Has,m4,50 +START_OR,7.1 +ReceivesFor,m1,10,OBB +ReceivesFor,m1,15,PfB +ReceivesFor,m2,25,BB +ReceivesFor,m3,30,HB + +CompanyOperates,M1,m3 +LaysTileAt,M1,8,K5,NE +CompanyRevenue,M1,80 +CompanySplits,M1,80 +M1 receives 40 +Payout,m3,40,1,100 +BuysTrain,M1,2+2,SX,155 + +CompanyOperates,M2,m3 +LaysTileAt,M2,8,C17,SE +CompanyRevenue,M2,180 +CompanySplits,M2,180 +M2 receives 90 +Payout,m3,90,1,100 + +CompanyOperates,M3,m4 +LaysTileAt,M3,8,C15,NW +CompanyRevenue,M3,180 +CompanySplits,M3,180 +M3 receives 90 +Payout,m4,90,1,100 + +CompanyOperates,M4,m1 +LaysTileAt,M4,23,F8,NE +CompanyRevenue,M4,70 +CompanySplits,M4,70 +M4 receives 35 +Payout,m1,35,1,100 + +CompanyOperates,M5,m2 +LaysTileAt,M5,87,B14,SE +CompanyRevenue,M5,80 +CompanySplits,M5,80 +M5 receives 40 +Payout,m2,40,1,100 + +CompanyOperates,M6,m4 +LaysTileAt,M6,204,B12,SE +CompanyRevenue,M6,90 +CompanySplits,M6,90 +M6 receives 45 +Payout,m4,45,1,100 + +CompanyOperates,BY,m4 +LaysTileAt,BY,20,K15,NW +CompanyRevenue,BY,320 +CompanyPaysOutFull,BY,320 +Payout,m4,128,4,10 +Payout,m2,64,2,10 +Payout,m1,96,3,10 +Payout,m3,32,1,10 +PRICE_MOVES_LOG,BY,148,F1,166,G1 + +CompanyOperates,SX,m2 +LaysTileAt,SX,9,L16,NW +CompanyRevenue,SX,200 +CompanyPaysOutFull,SX,200 +Payout,m4,40,2,10 +Payout,m2,80,4,10 +Payout,m1,40,2,10 +Payout,m3,40,2,10 +PRICE_MOVES_LOG,SX,132,E1,148,F1 +BuysTrain,SX,3+3,IPO,270 +FirstTrainBought,3+3 + +CompanyOperates,BA,m3 +LaysTileAtFor,BA,214,G3,NW,50 +CompanyRevenue,BA,120 +CompanyWithholds,BA,120 +PRICE_MOVES_LOG,BA,86,B3,82,A3 +BuysTrain,BA,3+3,IPO,270 + +CompanyOperates,WT,m2 +LaysTileAt,WT,5,M9,SE +LAYS_TOKEN_ON,WT,G3,120 +CompanyDoesNotPayDividend,WT +PRICE_MOVES_LOG,WT,84,B4,78,A4 +BuysTrain,WT,3+3,IPO,270 +All 3+3-trains are sold out, 4-trains now available + +EndOfOperatingRound,7.1 +ORWorthIncrease,m1,7.1,266 +ORWorthIncrease,m2,7.1,287 +ORWorthIncrease,m3,7.1,260 +ORWorthIncrease,m4,7.1,385 +Has,M1,0 +Has,M2,225 +Has,M3,125 +Has,M4,240 +Has,M5,220 +Has,M6,125 +Has,BY,575 +Has,SX,275 +Has,BA,400 +Has,WT,198 +Has,m1,197 +Has,m2,227 +Has,m3,255 +Has,m4,353 +START_OR,7.2 +ReceivesFor,m1,10,OBB +ReceivesFor,m1,15,PfB +ReceivesFor,m2,25,BB +ReceivesFor,m3,30,HB + +CompanyOperates,M1,m3 +LaysTileAt,M1,56,H4,W +CompanyRevenue,M1,180 +CompanySplits,M1,180 +M1 receives 90 +Payout,m3,90,1,100 + +CompanyOperates,M2,m3 +LaysTileAt,M2,25,C15,E +CompanyRevenue,M2,180 +CompanySplits,M2,180 +M2 receives 90 +Payout,m3,90,1,100 + +CompanyOperates,M3,m4 +LaysTileAtFor,M3,8,E15,SW,50 +CompanyRevenue,M3,180 +CompanySplits,M3,180 +M3 receives 90 +Payout,m4,90,1,100 + +CompanyOperates,M4,m1 +LaysTileAt,M4,205,F10,NW +CompanyRevenue,M4,70 +CompanySplits,M4,70 +M4 receives 35 +Payout,m1,35,1,100 + +CompanyOperates,M5,m2 +LaysTileAt,M5,23,L16,SE +CompanyRevenue,M5,80 +CompanySplits,M5,80 +M5 receives 40 +Payout,m2,40,1,100 +BuysTrain,M5,2+2,SX,260 + +CompanyOperates,M6,m4 +LaysTileAt,M6,26,B10,NW +CompanyRevenue,M6,100 +CompanySplits,M6,100 +M6 receives 50 +Payout,m4,50,1,100 + +CompanyOperates,BY,m4 +LaysTileAtFor,BY,7,D14,NW,50 +CompanyRevenue,BY,320 +CompanyWithholds,BY,320 +PRICE_MOVES_LOG,BY,166,G1,148,F1 + +CompanyOperates,SX,m2 +LaysTileAtFor,SX,3,M15,NW,50 +CompanyRevenue,SX,250 +CompanyWithholds,SX,250 +PRICE_MOVES_LOG,SX,148,F1,132,E1 + +CompanyOperates,BA,m3 +LaysTileAtFor,BA,214,J6,W,50 +CompanyRevenue,BA,260 +CompanyPaysOutFull,BA,260 +Payout,m4,104,4,10 +Payout,m2,26,1,10 +Payout,m1,26,1,10 +Payout,m3,104,4,10 +PRICE_MOVES_LOG,BA,82,A3,86,B3 + +CompanyOperates,WT,m2 +LaysTileAt,WT,8,M11,SE +CompanyRevenue,WT,140 +CompanyWithholds,WT,140 +PRICE_MOVES_LOG,WT,78,A4,72,A5 + +EndOfOperatingRound,7.2 +ORWorthIncrease,m1,7.2,-8 +ORWorthIncrease,m2,7.2,-23 +ORWorthIncrease,m3,7.2,274 +ORWorthIncrease,m4,7.2,150 +Has,M1,90 +Has,M2,315 +Has,M3,165 +Has,M4,275 +Has,M5,0 +Has,M6,175 +Has,BY,845 +Has,SX,735 +Has,BA,350 +Has,WT,338 +Has,m1,283 +Has,m2,318 +Has,m3,569 +Has,m4,597 +StartStockRound,8 +HasPriority,m4 +SELL_SHARE_LOG,m4,10,WT,72 +PRICE_MOVES_LOG,WT,72,A5,64,A6 +START_COMPANY_LOG,m4,HE,84,168,2,20,BANK +BUY_SHARE_LOG,m1,10,HE,IPO,84 +BUY_SHARE_LOG,m2,10,HE,IPO,84 +BUY_SHARE_LOG,m3,10,HE,IPO,84 +FloatsWithCash,HE,420 +BUY_SHARE_LOG,m4,10,HE,IPO,84 +PriceIsPaidTo,84,HE +BUY_SHARE_LOG,m1,10,HE,IPO,84 +PriceIsPaidTo,84,HE +BUY_SHARE_LOG,m2,10,HE,IPO,84 +PriceIsPaidTo,84,HE +BUY_SHARE_LOG,m3,20,HE,IPO,168 +PriceIsPaidTo,168,HE +PASSES,m4 +PASSES,m1 +PASSES,m2 +PASSES,m3 + +END_SR,8 +PRICE_STAYS_LOG,BY,148,F1 +SoldOutNoRaise,BY,148,F1 +PRICE_STAYS_LOG,SX,132,E1 +SoldOutNoRaise,SX,132,E1 +SoldOutNoRaise,BA,86,B3 +PRICE_MOVES_LOG,HE,84,B4,86,B3 +SoldOut,HE,84,B4,86,B3 +Has,M1,90 +Has,M2,315 +Has,M3,165 +Has,M4,275 +Has,M5,0 +Has,M6,175 +Has,BY,845 +Has,SX,735 +Has,BA,350 +Has,WT,338 +Has,HE,840 +Has,m1,115 +Has,m2,150 +Has,m3,317 +Has,m4,417 +START_OR,8.1 +ReceivesFor,m1,10,OBB +ReceivesFor,m1,15,PfB +ReceivesFor,m2,25,BB +ReceivesFor,m3,30,HB + +CompanyOperates,M1,m3 +LaysTileAt,M1,24,E9,NE +CompanyRevenue,M1,180 +CompanySplits,M1,180 +M1 receives 90 +Payout,m3,90,1,100 + +CompanyOperates,M2,m3 +LaysTileAt,M2,27,D14,NW +CompanyRevenue,M2,190 +CompanySplits,M2,190 +M2 receives 95 +Payout,m3,95,1,100 + +CompanyOperates,M3,m4 +LaysTileAtFor,M3,9,M17,NW,50 +CompanyRevenue,M3,180 +CompanySplits,M3,180 +M3 receives 90 +Payout,m4,90,1,100 + +CompanyOperates,M4,m1 +LaysTileAt,M4,24,F18,NE +CompanyRevenue,M4,70 +CompanySplits,M4,70 +M4 receives 35 +Payout,m1,35,1,100 + +CompanyOperates,M5,m2 +LaysTileAt,M5,23,G19,NW +CompanyRevenue,M5,180 +CompanySplits,M5,180 +M5 receives 90 +Payout,m2,90,1,100 + +CompanyOperates,M6,m4 +CompanyRevenue,M6,100 +CompanySplits,M6,100 +M6 receives 50 +Payout,m4,50,1,100 + +CompanyOperates,BY,m4 +LaysTileAt,BY,207,O15,NW +CompanyRevenue,BY,320 +CompanyPaysOutFull,BY,320 +Payout,m4,128,4,10 +Payout,m3,32,1,10 +Payout,m2,64,2,10 +Payout,m1,96,3,10 +PRICE_MOVES_LOG,BY,148,F1,166,G1 + +CompanyOperates,SX,m2 +LaysTileAt,SX,8,N18,SW +LAYS_TOKEN_ON,SX,E19,60 +CompanyRevenue,SX,260 +CompanyWithholds,SX,260 +PRICE_MOVES_LOG,SX,132,E1,120,E2 +BuysTrain,SX,4,IPO,360 +FirstTrainBought,4 +StartOfPhase,4 +StartFormationRound,PR +StartingPlayer,m3 +START_MERGED_COMPANY,PR,154,154 +FloatsWithCash,PR,616 +MERGE_MINOR_LOG,m3,M2,PR,410,1 +GetShareForMinor,m3,10,PR,IPO,M2 +ExchangesBaseToken,PR,M2,E19/1 +MERGE_MINOR_LOG,m3,HB,PR,no,no +GetShareForMinor,m3,10,PR,IPO,HB +PrivateCloses,HB +MERGE_MINOR_LOG,m3,M1,PR,180,1 +GetShareForMinor,m3,5,PR,IPO,M1 +ExchangesBaseToken,PR,M1,H2/1 +MERGE_MINOR_LOG,m1,M4,PR,310,0 +GetShareForMinor,m1,10,PR,IPO,M4 +ExchangesBaseToken,PR,M4,G5/1 +MERGE_MINOR_LOG,m2,BB,PR,no,no +GetShareForMinor,m2,10,PR,IPO,BB +PrivateCloses,BB +MERGE_MINOR_LOG,m2,M5,PR,90,1 +GetShareForMinor,m2,5,PR,IPO,M5 + +EndOfFormationRound,PR,OperatingRound 8.1 + +CompanyOperates,BA,m3 +LaysTileAt,BA,6,N12,SE +CompanyRevenue,BA,260 +CompanyWithholds,BA,260 +PRICE_MOVES_LOG,BA,86,B3,82,A3 +BuysTrain,BA,4,IPO,360 + +CompanyOperates,HE,m4 +LaysTileAtFor,HE,7,I7,SW,70 +CompanyDoesNotPayDividend,HE +PRICE_MOVES_LOG,HE,86,B3,82,A3 +BuysTrain,HE,4,IPO,360 +All 4-trains are sold out, 4+4-trains now available + +CompanyOperates,WT,m2 +LaysTileAt,WT,29,L4,NW +CompanyRevenue,WT,140 +CompanyWithholds,WT,140 +PRICE_MOVES_LOG,WT,64,A6,54,A7 + +EndOfOperatingRound,8.1 +ORWorthIncrease,m1,8.1,308 +ORWorthIncrease,m2,8.1,226 +ORWorthIncrease,m3,8.1,428 +ORWorthIncrease,m4,8.1,288 +Has,M3,205 +Has,M6,225 +Has,BY,845 +Has,SX,575 +Has,BA,250 +Has,WT,478 +Has,HE,410 +Has,PR,1606 +Has,m1,271 +Has,m2,329 +Has,m3,564 +Has,m4,685 +StartFormationRound,PR + +EndOfFormationRoundNoInterrupt,PR +START_OR,8.2 +ReceivesFor,m1,10,OBB +ReceivesFor,m1,15,PfB + +CompanyOperates,M3,m4 +LaysTileAt,M3,20,N14,W +CompanyRevenue,M3,110 +CompanySplits,M3,110 +M3 receives 55 +Payout,m4,55,1,100 + +CompanyOperates,M6,m4 +LaysTileAt,M6,7,I5,E +CompanyRevenue,M6,100 +CompanySplits,M6,100 +M6 receives 50 +Payout,m4,50,1,100 + +CompanyOperates,BY,m4 +LaysTileAtFor,BY,8,I9,E,70 +CompanyRevenue,BY,100 +CompanyPaysOutFull,BY,100 +Payout,m4,40,4,10 +Payout,m3,10,1,10 +Payout,m1,30,3,10 +Payout,m2,20,2,10 +PRICE_MOVES_LOG,BY,166,G1,186,H1 +BuysTrain,BY,4+4,IPO,440 +All 4+4-trains are sold out, 5-trains now available +FirstTrainBought,4+4 +StartOfPhase,4+4 + +CompanyOperates,PR,m3 +LaysTileAt,PR,8,I11,W +CompanyRevenue,PR,120 +CompanyPaysOutFull,PR,120 +NoIncomeForPreviousOperation,m4,10,PR +Payout,m3,42,7,5 +Payout,m1,24,4,5 +Payout,m2,30,5,5 +PRICE_MOVES_LOG,PR,154,I4,172,J4 +BuysTrain,PR,5,IPO,500 +FirstTrainBought,5 +StartOfPhase,5 +PrivateCloses,OBB +PrivateCloses,PfB +CompanyDiscardsTrain,BA,3 +CompanyDiscardsTrain,SX,3 +StartFormationRound,PR +MERGE_MINOR_LOG,m4,M3,PR,260,1 +GetShareForMinor,m4,5,PR,IPO,M3 +ExchangesBaseToken,PR,M3,F14/1 +MERGE_MINOR_LOG,m4,M6,PR,275,0 +GetShareForMinor,m4,5,PR,IPO,M6 +ExchangesBaseToken,PR,M6,C11/1 + +EndOfFormationRound,PR,OperatingRound 8.2 + +CompanyOperates,SX,m2 +LaysTileAt,SX,220,E19,SW +CompanyRevenue,SX,340 +CompanyWithholds,SX,340 +PRICE_MOVES_LOG,SX,120,E2,108,D2 + +CompanyOperates,BA,m3 +LaysTileAt,BA,216,I3,E +CompanyRevenue,BA,280 +CompanyWithholds,BA,280 +PRICE_MOVES_LOG,BA,82,A3,78,A4 + +CompanyOperates,HE,m4 +LaysTileAtFor,HE,216,J8,W,50 +CompanyRevenue,HE,140 +CompanyWithholds,HE,140 +PRICE_MOVES_LOG,HE,82,A3,78,A4 +BuysTrain,HE,5,IPO,500 +All 5-trains are sold out, 5+5-trains now available + +CompanyOperates,WT,m2 +LaysTileAt,WT,219,G3,SE +CompanyRevenue,WT,160 +CompanyWithholds,WT,160 +PRICE_STAYS_LOG,WT,54,A7 +BuysTrain,WT,5+5,IPO,600 +All 5+5-trains are sold out, 6-trains now available +FirstTrainBought,5+5 + +EndOfOperatingRound,8.2 +ORWorthIncrease,m1,8.2,-131 +ORWorthIncrease,m2,8.2,75 +ORWorthIncrease,m3,8.2,83 +ORWorthIncrease,m4,8.2,363 +Has,BY,335 +Has,SX,915 +Has,BA,530 +Has,WT,38 +Has,HE,0 +Has,PR,1641 +Has,m1,350 +Has,m2,379 +Has,m3,616 +Has,m4,830 +StartStockRound,9 +HasPriority,m4 +BUY_SHARE_LOG,m4,10,WT,Pool,54 +BUY_SHARE_LOG,m1,10,WT,IPO,84 +PriceIsPaidTo,84,WT +BUY_SHARE_LOG,m2,20,WT,IPO,168 +PriceIsPaidTo,168,WT +SharesReleased,All,MS +START_COMPANY_LOG,m3,MS,80,160,2,20,BANK +BUY_SHARE_LOG,m4,20,MS,IPO,160 +BUY_SHARE_LOG,m1,20,MS,IPO,160 +FloatsWithCash,MS,480 +SharesReleased,All,OL +BUY_SHARE_LOG,m2,10,MS,IPO,80 +PriceIsPaidTo,80,MS +BUY_SHARE_LOG,m3,10,MS,IPO,80 +PriceIsPaidTo,80,MS +PASSES,m4 +BUY_SHARE_LOG,m1,10,MS,IPO,80 +PriceIsPaidTo,80,MS +PASSES,m2 +PASSES,m3 +PASSES,m4 +PASSES,m1 + +END_SR,9 +PRICE_STAYS_LOG,BY,186,H1 +SoldOutNoRaise,BY,186,H1 +PRICE_MOVES_LOG,PR,172,J4,190,J3 +SoldOut,PR,172,J4,190,J3 +SoldOutNoRaise,SX,108,D2 +PRICE_MOVES_LOG,BA,78,A4,82,A3 +SoldOut,BA,78,A4,82,A3 +PRICE_MOVES_LOG,HE,78,A4,82,A3 +SoldOut,HE,78,A4,82,A3 +PRICE_MOVES_LOG,WT,54,A7,64,A6 +SoldOut,WT,54,A7,64,A6 +Has,BY,335 +Has,SX,915 +Has,BA,530 +Has,WT,290 +Has,HE,0 +Has,MS,720 +Has,PR,1641 +Has,m1,26 +Has,m2,131 +Has,m3,376 +Has,m4,616 +START_OR,9.1 + +CompanyOperates,PR,m3 +LaysTileAtFor,PR,221,C11,SW,50 +CompanyRevenue,PR,520 +CompanyWithholds,PR,520 +PRICE_MOVES_LOG,PR,190,J3,170,I3 + +CompanyOperates,BY,m4 +LaysTileAt,BY,216,H20,E +CompanyRevenue,BY,250 +CompanyWithholds,BY,250 +PRICE_MOVES_LOG,BY,186,H1,166,G1 + +CompanyOperates,SX,m2 +LaysTileAt,SX,63,H16,SW +CompanyRevenue,SX,390 +CompanyPaysOutFull,SX,390 +Payout,m4,78,2,10 +Payout,m3,78,2,10 +Payout,m2,156,4,10 +Payout,m1,78,2,10 +PRICE_MOVES_LOG,SX,108,D2,120,E2 + +CompanyOperates,BA,m3 +LaysTileAt,BA,216,H2,SW +CompanyRevenue,BA,340 +CompanyWithholds,BA,340 +PRICE_MOVES_LOG,BA,82,A3,78,A4 + +CompanyOperates,HE,m4 +LaysTileAt,HE,24,K5,NE +CompanyRevenue,HE,280 +CompanyPaysOutFull,HE,280 +Payout,m4,84,3,10 +Payout,m3,84,3,10 +Payout,m2,56,2,10 +Payout,m1,56,2,10 +PRICE_MOVES_LOG,HE,82,A3,86,B3 + +CompanyOperates,MS,m3 +LaysTileAt,MS,63,F14,SW +LAYS_TOKEN_ON,MS,C11,20 +CompanyDoesNotPayDividend,MS +PRICE_MOVES_LOG,MS,80,B5,72,A5 +BuysTrain,MS,6,IPO,600 +FirstTrainBought,6 +StartOfPhase,6 + +CompanyOperates,WT,m2 +LaysTileAt,WT,27,I5,E +CompanyRevenue,WT,410 +CompanyPaysOutFull,WT,410 +Payout,m4,41,1,10 +Payout,m3,41,1,10 +Payout,m2,205,5,10 +Payout,m1,123,3,10 +PRICE_MOVES_LOG,WT,64,A6,74,B6 + +EndOfOperatingRound,9.1 +ORWorthIncrease,m1,9.1,191 +ORWorthIncrease,m2,9.1,421 +ORWorthIncrease,m3,9.1,119 +ORWorthIncrease,m4,9.1,97 +Has,BY,585 +Has,SX,915 +Has,BA,870 +Has,WT,290 +Has,HE,0 +Has,MS,100 +Has,PR,2111 +Has,m1,283 +Has,m2,548 +Has,m3,579 +Has,m4,819 +START_OR,9.2 + +CompanyOperates,PR,m3 +LaysTileAtFor,PR,9,H12,SW,70 +CompanyRevenue,PR,250 +CompanyPaysOutFull,PR,250 +Payout,m4,50,4,5 +Payout,m2,63,5,5 +Payout,m3,88,7,5 +Payout,m1,50,4,5 +PRICE_MOVES_LOG,PR,170,I3,190,J3 + +CompanyOperates,BY,m4 +LaysTileAt,BY,218,L14,SW +CompanyRevenue,BY,250 +CompanyWithholds,BY,250 +PRICE_MOVES_LOG,BY,166,G1,148,F1 +BuysTrain,BY,6,IPO,600 +All 6-trains are sold out, 6+6-trains now available + +CompanyOperates,SX,m2 +LaysTileAt,SX,9,H14,W +CompanyRevenue,SX,410 +CompanyPaysOutFull,SX,410 +Payout,m4,82,2,10 +Payout,m3,82,2,10 +Payout,m2,164,4,10 +Payout,m1,82,2,10 +PRICE_MOVES_LOG,SX,120,E2,134,F2 + +CompanyOperates,HE,m4 +LaysTileAt,HE,47,N14,W +CompanyRevenue,HE,380 +CompanyPaysOutFull,HE,380 +Payout,m4,114,3,10 +Payout,m2,76,2,10 +Payout,m3,114,3,10 +Payout,m1,76,2,10 +PRICE_MOVES_LOG,HE,86,B3,92,C3 + +CompanyOperates,BA,m3 +LaysTileAt,BA,44,I5,W +CompanyRevenue,BA,350 +CompanyPaysOutFull,BA,350 +Payout,m4,140,4,10 +Payout,m2,35,1,10 +Payout,m3,140,4,10 +Payout,m1,35,1,10 +PRICE_MOVES_LOG,BA,78,A4,84,B4 + +CompanyOperates,WT,m2 +LaysTileAt,WT,8,O17,W +CompanyRevenue,WT,420 +CompanyPaysOutFull,WT,420 +Payout,m4,42,1,10 +Payout,m3,42,1,10 +Payout,m2,210,5,10 +Payout,m1,126,3,10 +PRICE_MOVES_LOG,WT,74,B6,82,C6 + +CompanyOperates,MS,m3 +LaysTileAtFor,MS,9,G13,SW,70 +CompanyRevenue,MS,290 +CompanyPaysOutFull,MS,290 +Payout,m4,58,2,10 +Payout,m2,29,1,10 +Payout,m3,87,3,10 +Payout,m1,87,3,10 +PRICE_MOVES_LOG,MS,72,A5,80,B5 + +EndOfOperatingRound,9.2 +ORWorthIncrease,m1,9.2,536 +ORWorthIncrease,m2,9.2,713 +ORWorthIncrease,m3,9.2,707 +ORWorthIncrease,m4,9.2,548 +Has,BY,235 +Has,SX,915 +Has,BA,870 +Has,WT,290 +Has,HE,0 +Has,MS,30 +Has,PR,2041 +Has,m1,739 +Has,m2,1125 +Has,m3,1132 +Has,m4,1305 +START_OR,9.3 + +CompanyOperates,PR,m3 +LaysTileAt,PR,216,O15,E +CompanyRevenue,PR,250 +CompanyPaysOutFull,PR,250 +Payout,m4,50,4,5 +Payout,m2,63,5,5 +Payout,m3,88,7,5 +Payout,m1,50,4,5 +PRICE_MOVES_LOG,PR,190,J3,212,K3 +BuysTrain,PR,6+6,IPO,720 +FirstTrainBought,6+6 +StartOfPhase,6+6 +BuysTrain,PR,6+6,IPO,720 + +CompanyOperates,BY,m4 +LaysTileAt,BY,63,G5,SW +CompanyRevenue,BY,540 +CompanyPaysOutFull,BY,540 +Payout,m4,216,4,10 +Payout,m3,54,1,10 +Payout,m2,108,2,10 +Payout,m1,162,3,10 +PRICE_MOVES_LOG,BY,148,F1,166,G1 + +CompanyOperates,SX,m2 +LaysTileAt,SX,219,J6,E +CompanyRevenue,SX,210 +CompanyPaysOutFull,SX,210 +Payout,m4,42,2,10 +Payout,m2,84,4,10 +Payout,m3,42,2,10 +Payout,m1,42,2,10 +PRICE_MOVES_LOG,SX,134,F2,150,G2 +BuysTrain,SX,6+6,IPO,720 + +CompanyOperates,HE,m4 +LaysTileAt,HE,23,H12,NE +CompanyRevenue,HE,450 +CompanyPaysOutFull,HE,450 +Payout,m4,135,3,10 +Payout,m2,90,2,10 +Payout,m3,135,3,10 +Payout,m1,90,2,10 +PRICE_MOVES_LOG,HE,92,C3,100,D3 + +CompanyOperates,BA,m3 +LaysTileAt,BA,217,L6,E +CompanyRevenue,BA,190 +CompanyPaysOutFull,BA,190 +Payout,m4,76,4,10 +Payout,m2,19,1,10 +Payout,m3,76,4,10 +Payout,m1,19,1,10 +PRICE_MOVES_LOG,BA,84,B4,88,C4 +BuysTrain,BA,6+6,IPO,720 + +CompanyOperates,WT,m2 +LaysTileAt,WT,23,K13,SE +CompanyRevenue,WT,290 +CompanyPaysOutFull,WT,290 +Payout,m4,29,1,10 +Payout,m2,145,5,10 +Payout,m3,29,1,10 +Payout,m1,87,3,10 +PRICE_MOVES_LOG,WT,82,C6,88,D6 + +CompanyOperates,MS,m3 +LaysTileAt,MS,63,F10,SW +CompanyRevenue,MS,300 +CompanyPaysOutFull,MS,300 +Payout,m4,60,2,10 +Payout,m2,30,1,10 +Payout,m3,90,3,10 +Payout,m1,90,3,10 +PRICE_MOVES_LOG,MS,80,B5,86,C5 + +EndOfOperatingRound,9.3 +ORWorthIncrease,m1,9.3,726 +ORWorthIncrease,m2,9.3,750 +ORWorthIncrease,m3,9.3,705 +ORWorthIncrease,m4,9.3,814 +Has,BY,235 +Has,SX,195 +Has,BA,150 +Has,WT,290 +Has,HE,0 +Has,MS,30 +Has,PR,601 +Has,m1,1279 +Has,m2,1664 +Has,m3,1646 +Has,m4,1913 +StartStockRound,10 +HasPriority,m2 +PASSES,m2 +SELL_SHARE_LOG,m3,20,HE,200 +PRICE_MOVES_LOG,HE,100,D3,94,D4 |
From: Erik V. <ev...@us...> - 2012-05-08 19:21:41
|
rails/game/StockRound.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) New commits: commit d84f8880851c489386b69eaac3adb93e590e3ae7 Author: Erik Vos <eri...@xs...> Date: Tue May 8 21:19:56 2012 +0200 Fixed 1835 bug where non-president 20% share was offered to be sold in parts. Reported by Mike Bourke diff --git a/rails/game/StockRound.java b/rails/game/StockRound.java index 27989f9..91a4c6e 100644 --- a/rails/game/StockRound.java +++ b/rails/game/StockRound.java @@ -410,6 +410,7 @@ public class StockRound extends Round { * If the current Player is president, check if he can dump the * presidency onto someone else. */ + dumpThreshold = 0; if (company.getPresident() == currentPlayer) { int presidentShare = company.getCertificates().get(0).getShare(); @@ -423,7 +424,6 @@ public class StockRound extends Round { List<Player> players = gameManager.getPlayers(); Player player; int dumpedPlayerShare = 0; - dumpThreshold = 0; for (playerIndex = (currentPlayerIndex+1)%numberOfPlayers; playerIndex != currentPlayerIndex; |
From: Stefan F. <ste...@us...> - 2012-05-08 17:28:50
|
rails/game/PublicCompany.java | 26 ++++++++++--- rails/game/PublicCompanyI.java | 7 +-- rails/ui/swing/MapPanel.java | 79 ++++++++++++++++++++--------------------- readme.txt | 14 +++---- version.number | 2 - 5 files changed, 71 insertions(+), 57 deletions(-) New commits: commit 40bc463df7d20844c2bb9b809e4587acd041b016 Author: Stefan Frey <ste...@we...> Date: Tue May 8 19:26:25 2012 +0200 prepared for release 1.7.4 diff --git a/readme.txt b/readme.txt index 4e4cb96..37d3ce1 100644 --- a/readme.txt +++ b/readme.txt @@ -1,16 +1,14 @@ -Rails release 1.7.3: +Rails release 1.7.4: A new maintenance release for Rails 1.x series This release fixes several recent bugs. -Contributors: Erik Vos, Martin Brumm, Stefan Frey +Contributors: Erik Vos, Stefan Frey -Bugs reported by Arne Osterlund, John David Galt, Volker Schnell +Bugs reported by James Romano, Mike Bourke, Volker Schnell List of bugs fixed: -- Fixed UI bug in 18EU: Missing text on DeclineToBid button -- Fixed bug with picture id (which prevented displaying Goderich -939 tile) -- Fixed wrong behavior of train obsoleting in 1830 Variants (Coalfield and Reading) -- Added text in report window about train rusting and obsoleting - +- 18EU Hamburg red-to-red bonus calculation incorrect +- Fixed exception in Map panel scrolling +- In 1835 Companies with a fixed start price postpone laying the current price token until floating time. diff --git a/version.number b/version.number index 6884297..fdf5bc6 100644 --- a/version.number +++ b/version.number @@ -1,5 +1,5 @@ #Property file that contains version number and the develop indicator -version=1.7.3 +version=1.7.4 # the following string "@DEVELOP@ is replaced by an empty string in the release version # this is done automatically by ant develop=@DEVELOP@ \ No newline at end of file commit b0634f88c4904471a7f07859628017d60b8715d5 Author: Erik Vos <eri...@xs...> Date: Tue May 8 13:55:25 2012 +0200 Companies with a fixed start price postpone laying the current price token until floating time. This applies to 1835 (bug reported by Volker Schnell) and 1825. Only defaults are set. For 1837, an (game or company) attribute must be added to set this rule also for the companies that don't ahve a fixed starting price.(cherry picked from commit d136bf8dd11a71574fee182a00c2f1277370a39d) diff --git a/rails/game/PublicCompany.java b/rails/game/PublicCompany.java index d7643e6..f9f69e3 100644 --- a/rails/game/PublicCompany.java +++ b/rails/game/PublicCompany.java @@ -29,10 +29,10 @@ public class PublicCompany extends Company implements PublicCompanyI { protected static int numberOfPublicCompanies = 0; - // Home base token lay times + // Home base & price token lay times protected static final int WHEN_STARTED = 0; protected static final int WHEN_FLOATED = 1; - protected static final int START_OF_FIRST_OR = 2; + protected static final int START_OF_FIRST_OR = 2; // Only applies to home base tokens // Base token lay cost calculation methods public static final String BASE_COST_SEQUENCE = "sequence"; @@ -235,6 +235,8 @@ public class PublicCompany extends Company implements PublicCompanyI { /*---- variables needed during initialisation -----*/ protected String startSpace = null; + protected int dropPriceToken = WHEN_STARTED; + protected int capitalisation = CAPITALISE_FULL; /** Fixed price (for a 1835-style minor) */ @@ -313,6 +315,11 @@ public class PublicCompany extends Company implements PublicCompanyI { floatPerc = tag.getAttributeAsInteger("floatPerc", floatPerc); startSpace = tag.getAttributeAsString("startspace"); + // Set the default price token drop time. + // Currently, no exceptions exist, so this value isn't changed anywhere yet. + // Any (future) games with exceptions to these defaults will require a separate XML attribute. + // Known games to have exceptions: 1837. + dropPriceToken = startSpace != null ? WHEN_FLOATED : WHEN_STARTED; fixedPrice = tag.getAttributeAsInteger("price", 0); @@ -934,8 +941,12 @@ public class PublicCompany extends Company implements PublicCompanyI { if (startSpace != null) { setParSpace(startSpace); - // The current price is set via the Stock Market - stockMarket.start(this, startSpace); + setCurrentSpace(startSpace); + + // Drop the current price token, if allowed at this point + if (dropPriceToken == WHEN_STARTED) { + stockMarket.start(this, startSpace); + } } @@ -1002,6 +1013,11 @@ public class PublicCompany extends Company implements PublicCompanyI { stockMarket.moveUp(this); } + // Drop the current price token, if allowed at this point + if (dropPriceToken == WHEN_FLOATED) { + stockMarket.start(this, getCurrentSpace()); + } + if (homeBaseTokensLayTime == WHEN_FLOATED) { layHomeBaseTokens(); } @@ -1170,7 +1186,7 @@ public class PublicCompany extends Company implements PublicCompanyI { * stock market. */ public void setCurrentSpace(StockSpaceI price) { - if (price != null) { + if (price != null && price != getCurrentSpace()) { currentPrice.setPrice(price); } } diff --git a/rails/game/PublicCompanyI.java b/rails/game/PublicCompanyI.java index ecd928f..7b28906 100644 --- a/rails/game/PublicCompanyI.java +++ b/rails/game/PublicCompanyI.java @@ -11,12 +11,11 @@ import rails.game.model.*; */ public interface PublicCompanyI extends CompanyI, CashHolder, TokenHolder { + /* Capitalisation options */ public static final int CAPITALISE_FULL = 0; - public static final int CAPITALISE_INCREMENTAL = 1; - public static final int CAPITALISE_WHEN_BOUGHT = 2; - + public void setIndex (int index); @@ -96,7 +95,7 @@ public interface PublicCompanyI extends CompanyI, CashHolder, TokenHolder { */ public boolean hasFloated(); - + public ModelObject getFloatedModel(); /** commit 99b6d76363ed8ab727117f74b5da915d896df2b1 Author: Erik Vos <eri...@xs...> Date: Tue May 8 12:03:06 2012 +0200 Fix exception in Map panel scrolling(cherry picked from commit bd86c17a13a6cb75d35af0d102a740ba7a234bb9) diff --git a/rails/ui/swing/MapPanel.java b/rails/ui/swing/MapPanel.java index 265defe..ba92268 100644 --- a/rails/ui/swing/MapPanel.java +++ b/rails/ui/swing/MapPanel.java @@ -2,9 +2,7 @@ package rails.ui.swing; import java.awt.*; -import java.awt.event.ComponentAdapter; -import java.awt.event.ComponentEvent; -import java.awt.event.KeyEvent; +import java.awt.event.*; import java.util.List; import javax.swing.*; @@ -14,7 +12,8 @@ import org.apache.log4j.Logger; import rails.game.MapManager; import rails.game.action.LayTile; import rails.game.action.LayToken; -import rails.ui.swing.hexmap.*; +import rails.ui.swing.hexmap.HexMap; +import rails.ui.swing.hexmap.HexMapImage; /** * MapWindow class displays the Map Window. It's shocking, I know. @@ -23,31 +22,31 @@ public class MapPanel extends JPanel { private static final long serialVersionUID = 1L; //defines how many pixels should be left as safety margin when calculating fit zooms - private static final int zoomFitSafetyMargin = 4; - + private static final int zoomFitSafetyMargin = 4; + private MapManager mmgr; private HexMap map; private HexMapImage mapImage; private JScrollPane scrollPane; - + private GameUIManager gameUIManager; - + private JLayeredPane layeredPane; private Dimension originalMapSize; private Dimension currentMapSize; - + //active fit-to zoom options private boolean fitToWidth = false; private boolean fitToHeight = false; protected static Logger log = - Logger.getLogger(MapPanel.class.getPackage().getName()); + Logger.getLogger(MapPanel.class.getPackage().getName()); public MapPanel(GameUIManager gameUIManager) { this.gameUIManager = gameUIManager; //Scale.set(15); Scale.set(16); - + setLayout(new BorderLayout()); mmgr = gameUIManager.getGameManager().getMapManager(); @@ -72,7 +71,7 @@ public class MapPanel extends JPanel { layeredPane.setPreferredSize(originalMapSize); map.setBounds(0, 0, originalMapSize.width, originalMapSize.height); map.addLayers(layeredPane, 1); - + if (mmgr.isMapImageUsed()) { mapImage = new HexMapImage (); mapImage.init(mmgr,map); @@ -80,14 +79,14 @@ public class MapPanel extends JPanel { mapImage.setBounds(0, 0, originalMapSize.width, originalMapSize.height); layeredPane.add(mapImage, -1); } - + scrollPane = new JScrollPane(layeredPane); scrollPane.setSize(originalMapSize); add(scrollPane, BorderLayout.CENTER); - + setSize(originalMapSize); setLocation(25, 25); - + //add listener for auto fit upon resize events addComponentListener(new ComponentAdapter() { @Override @@ -98,9 +97,11 @@ public class MapPanel extends JPanel { }); } - + public void scrollPaneShowRectangle(Rectangle rectangle) { - + + if (rectangle == null) return; + JViewport viewport = scrollPane.getViewport(); log.debug("ScrollPane viewPort =" + viewport); @@ -108,23 +109,23 @@ public class MapPanel extends JPanel { log.debug("Map size =" + map.getSize()); log.debug("ScrollPane visibleRect =" + scrollPane.getVisibleRect()); log.debug("viewport size =" + viewport.getSize()); - + double setX, setY; setX = Math.max(0, (rectangle.getCenterX() - viewport.getWidth() / 2)); setY = Math.max(0, (rectangle.getCenterY() - viewport.getHeight() / 2)); - + setX = Math.min(setX, Math.max(0, map.getSize().getWidth() - viewport.getWidth())); setY = Math.min(setY, Math.max(0, map.getSize().getHeight() - viewport.getHeight())); - + final Point viewPosition = new Point((int)setX, (int)setY); log.debug("ViewPosition for ScrollPane = " + viewPosition); SwingUtilities.invokeLater(new Runnable() { public void run() { - scrollPane.getViewport().setViewPosition(viewPosition); + scrollPane.getViewport().setViewPosition(viewPosition); } }); } - + public void setAllowedTileLays(List<LayTile> allowedTileLays) { map.setAllowedTileLays(allowedTileLays); } @@ -147,21 +148,21 @@ public class MapPanel extends JPanel { gameUIManager.getORUIManager().getORPanel().redrawRoutes(); layeredPane.revalidate(); } - + public void zoom (boolean in) { removeFitToOption(); map.zoom(in); adjustToNewMapZoom(); } - + /** * Zoom-to-fit functionality is based on the discrete zoom steps. * In order to achieve correctly fitting zoom, continuous adjustment factors are - * determined on top of that. + * determined on top of that. */ private void zoomFit (boolean fitToWidth, boolean fitToHeight) { if (!fitToWidth && !fitToHeight) return; - + ImageLoader imageLoader = GameUIManager.getImageLoader(); int zoomStep = map.getZoomStep(); @@ -179,7 +180,7 @@ public class MapPanel extends JPanel { //determine which dimension will be the critical one for the resize boolean isWidthCritical = ( !fitToHeight || (fitToWidth && idealFactorWidth < idealFactorHeight)); - + //check whether scrollbar will appear in the fit-to dimension and //reduce available size accordingly (not relevant for fit-to-window) if (isWidthCritical && idealFactorWidth > idealFactorHeight) { @@ -190,7 +191,7 @@ public class MapPanel extends JPanel { height -= scrollPane.getHorizontalScrollBar().getPreferredSize().height; idealFactorHeight = height / originalMapSize.height; } - + //abort resize if no space available if (width < 0 || height < 0) return; @@ -207,7 +208,7 @@ public class MapPanel extends JPanel { imageLoader.getZoomFactor(zoomStep+1) != imageLoader.getZoomFactor(zoomStep) ) zoomStep++; - + //decrease zoomFactor until constraints do hold //OR zoom cannot be decreased any more while @@ -221,44 +222,44 @@ public class MapPanel extends JPanel { imageLoader.getZoomFactor(zoomStep-1) != imageLoader.getZoomFactor(zoomStep) ) zoomStep--; - + //Determine and apply adjustment factor for precise fit double idealFactor = isWidthCritical ? idealFactorWidth : idealFactorHeight; imageLoader.setZoomAdjustmentFactor ( - idealFactor / imageLoader.getZoomFactor(zoomStep)); - + idealFactor / imageLoader.getZoomFactor(zoomStep)); + //trigger zoom execution map.setZoomStep(zoomStep); adjustToNewMapZoom(); } - + private void fitToOption (boolean fitToWidth, boolean fitToHeight) { //ignore if nothing has changed if (this.fitToWidth == fitToWidth && this.fitToHeight == fitToHeight ) return; - + this.fitToWidth = fitToWidth; this.fitToHeight = fitToHeight; zoomFit(fitToWidth, fitToHeight); } - + public void fitToWindow () { fitToOption (true, true); } - + public void fitToWidth () { fitToOption (true, false); } - + public void fitToHeight () { fitToOption (false, true); } - + public void removeFitToOption () { fitToWidth = false; fitToHeight = false; } - + public void keyPressed(KeyEvent e) { if (e.getKeyCode() == KeyEvent.VK_F1) { HelpWindow.displayHelp(gameUIManager.getHelp()); |
From: Stefan F. <ste...@us...> - 2012-05-08 17:27:28
|
Tag 'v1.7.4' created by Stefan Frey <ste...@we...> at 2012-05-08 17:27 +0000 version 1.7.4 Changes since v1.7.3-4: --- 0 files changed --- |
From: Erik V. <ev...@us...> - 2012-05-08 11:56:30
|
rails/game/PublicCompany.java | 26 +++++++++++++++++++++----- rails/game/PublicCompanyI.java | 7 +++---- 2 files changed, 24 insertions(+), 9 deletions(-) New commits: commit d136bf8dd11a71574fee182a00c2f1277370a39d Author: Erik Vos <eri...@xs...> Date: Tue May 8 13:55:25 2012 +0200 Companies with a fixed start price postpone laying the current price token until floating time. This applies to 1835 (bug reported by Volker Schnell) and 1825. Only defaults are set. For 1837, an (game or company) attribute must be added to set this rule also for the companies that don't ahve a fixed starting price. diff --git a/rails/game/PublicCompany.java b/rails/game/PublicCompany.java index 92c045e..1b589e2 100644 --- a/rails/game/PublicCompany.java +++ b/rails/game/PublicCompany.java @@ -29,10 +29,10 @@ public class PublicCompany extends Company implements PublicCompanyI { protected static int numberOfPublicCompanies = 0; - // Home base token lay times + // Home base & price token lay times protected static final int WHEN_STARTED = 0; protected static final int WHEN_FLOATED = 1; - protected static final int START_OF_FIRST_OR = 2; + protected static final int START_OF_FIRST_OR = 2; // Only applies to home base tokens // Base token lay cost calculation methods public static final String BASE_COST_SEQUENCE = "sequence"; @@ -235,6 +235,8 @@ public class PublicCompany extends Company implements PublicCompanyI { /*---- variables needed during initialisation -----*/ protected String startSpace = null; + protected int dropPriceToken = WHEN_STARTED; + protected int capitalisation = CAPITALISE_FULL; /** Fixed price (for a 1835-style minor) */ @@ -313,6 +315,11 @@ public class PublicCompany extends Company implements PublicCompanyI { floatPerc = tag.getAttributeAsInteger("floatPerc", floatPerc); startSpace = tag.getAttributeAsString("startspace"); + // Set the default price token drop time. + // Currently, no exceptions exist, so this value isn't changed anywhere yet. + // Any (future) games with exceptions to these defaults will require a separate XML attribute. + // Known games to have exceptions: 1837. + dropPriceToken = startSpace != null ? WHEN_FLOATED : WHEN_STARTED; fixedPrice = tag.getAttributeAsInteger("price", 0); @@ -934,8 +941,12 @@ public class PublicCompany extends Company implements PublicCompanyI { if (startSpace != null) { setParSpace(startSpace); - // The current price is set via the Stock Market - stockMarket.start(this, startSpace); + setCurrentSpace(startSpace); + + // Drop the current price token, if allowed at this point + if (dropPriceToken == WHEN_STARTED) { + stockMarket.start(this, startSpace); + } } @@ -1002,6 +1013,11 @@ public class PublicCompany extends Company implements PublicCompanyI { stockMarket.moveUp(this); } + // Drop the current price token, if allowed at this point + if (dropPriceToken == WHEN_FLOATED) { + stockMarket.start(this, getCurrentSpace()); + } + if (homeBaseTokensLayTime == WHEN_FLOATED) { layHomeBaseTokens(); } @@ -1170,7 +1186,7 @@ public class PublicCompany extends Company implements PublicCompanyI { * stock market. */ public void setCurrentSpace(StockSpaceI price) { - if (price != null) { + if (price != null && price != getCurrentSpace()) { currentPrice.setPrice(price); } } diff --git a/rails/game/PublicCompanyI.java b/rails/game/PublicCompanyI.java index ecd928f..7b28906 100644 --- a/rails/game/PublicCompanyI.java +++ b/rails/game/PublicCompanyI.java @@ -11,12 +11,11 @@ import rails.game.model.*; */ public interface PublicCompanyI extends CompanyI, CashHolder, TokenHolder { + /* Capitalisation options */ public static final int CAPITALISE_FULL = 0; - public static final int CAPITALISE_INCREMENTAL = 1; - public static final int CAPITALISE_WHEN_BOUGHT = 2; - + public void setIndex (int index); @@ -96,7 +95,7 @@ public interface PublicCompanyI extends CompanyI, CashHolder, TokenHolder { */ public boolean hasFloated(); - + public ModelObject getFloatedModel(); /** |