Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion src/main/java/net/sf/rails/algorithms/RevenueManager.java
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@


/**
* Coordinates and stores all elements related to revenue calulcation,
* Coordinates and stores all elements related to revenue calculation,
* which are permanent.
* The conversion of Rails elements is in the responsibility of the RevenueAdapter.
* For each GameManager instance only one RevenueManager is created.
Expand Down
82 changes: 82 additions & 0 deletions src/main/resources/data/1800/CompanyManager.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,82 @@
<?xml version="1.0"?>
<CompanyManager>
<CompanyType name="Private" class="net.sf.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="net.sf.rails.game.PublicCompany">
<CanBuyPrivates/>
<PoolPaysOut/>
<IPOPaysOut/>
<Payout split="allowed" mustExceedPriceToMove="yes"/>
<Float percentage="50"/>
<ShareUnit percentage="10"/>
<BaseTokens>
<!-- HomeBase lay options: "whenStarted", "whenFloated", "firstOR" (default) -->
<HomeBase lay="whenFloated"/>
<!-- LayCost methods: only "sequence" (1830 style) implemented so far (default) -->
<LayCost method="sequence" cost="0,40,100"/>
</BaseTokens>
<Certificate type="President" shares="4"/>
<Certificate shares="1" number="6"/>
<Trains limit="2,3"/>
<Capitalisation type="incremental"/>
<CanUseSpecialProperties/>
</CompanyType>
<IfOption name="NumberOfPlayers" value="2">
<Company name="MT" type="Private" basePrice="20" revenue="5"
longname="Midland Terminal">
</Company>
</IfOption>
<IfOption name="NumberOfPlayers" value="3">
<Company name="MT" type="Private" basePrice="25" revenue="5"
longname="Midland Terminal">
</Company>
</IfOption>
<Company name="D&amp;SL" type="Private" basePrice="70" revenue="10"
longname="Denver &amp; Salt Lake">
<IfOption name="NumberOfPlayers" value="2">
<SpecialProperty condition="ifOwnedByPlayer" when="tokenLayingStep" class="net.sf.rails.game.special.SpecialTileLay">
<SpecialTileLay extra="yes" free="no" tile="800" />
</SpecialProperty>
</IfOption>
<IfOption name="NumberOfPlayers" value="3">
<SpecialProperty condition="ifOwnedByPlayer" when="anyTurn" class="net.sf.rails.game.special.ExchangeForShare">
<ExchangeForShare company="D&amp;RGW" share="10"/>
</SpecialProperty>
</IfOption>
</Company>
<Company name="RGS" type="Private" basePrice="150" revenue="20"
longname="Rio Grande &amp; Southern">
<Info key="ComesWithCertificate" parm="D&amp;RGW,10"/>
</Company>

<!-- Note two supported colour specification formats:
RGB decimal with commas and RGB hexadecimal without commas -->
<Company name="D&amp;RGW" type="Public" tokens="3" fgColour="000000" bgColour="60E060"
longname="Denver &amp; Rio Grande Western">
<Home hex="E1"/>
</Company>
<Company name="C&amp;S" type="Public" tokens="3" fgColour="255,255,255" bgColour="0,0,255"
longname="Colorado &amp; Southern">
<Home hex="E5"/>
</Company>
<IfOption name="NumberOfPlayers" value="3">
<Company name="C&amp;W" type="Public" tokens="3" fgColour="255,255,255" bgColour="0,255,0"
longname="Colorado &amp; Western">
<Home hex="I3" />
</Company>
</IfOption>

<StartPacket roundClass="net.sf.rails.game.StartRound_1830">
<Bidding initial="20" minimum="5" increment="1"/>
<Item name="MT" type="Private" basePrice="20"/>
<Item name="D&amp;SL" type="Private" basePrice="70">
<SubItem name="D&amp;RGW" type="Public"/>
</Item>
<Item name="RGS" type="Private" basePrice="150"/>
</StartPacket>
</CompanyManager>
129 changes: 129 additions & 0 deletions src/main/resources/data/1800/Game.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,129 @@
<?xml version="1.0"?>
<ComponentManager>
<Component name="GameManager" class="net.sf.rails.game.GameManager">
<Game name="1800"/>
<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>
<StockRound sequence="SellBuyOrBuySell">
<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="net.sf.rails.game.PlayerManager">
<IfOption name="Variant" value="Basegame">
<Players number="2" cash="520" certLimit="7"/>
<Players number="3" cash="520" certLimit="7"/>
</IfOption>
<IfOption name="Variant" value="2p">
<Players number="2" cash="520" certLimit="7"/>
</IfOption> </Component>
<Component name="Bank" class="net.sf.rails.game.financial.Bank">
<IfOption name="Variant" value="Basegame,2p">
<Bank amount="3720"/>
</IfOption>
<Money format="$@"/>
</Component>
<Component name="TileManager" class="net.sf.rails.game.TileManager"
file="TileSet.xml"/>
<Component name="Map" class="net.sf.rails.game.MapManager" file="Map.xml"/>
<Component name="CompanyManager" class="net.sf.rails.game.CompanyManager"
file="CompanyManager.xml"/>
<Component name="StockMarket" class="net.sf.rails.game.financial.StockMarket"
file="StockMarket.xml"/>
<Component name="TrainManager" class="net.sf.rails.game.TrainManager">
<Defaults>
<Reach base="stops" countTowns="yes"/>
<!-- Alternative values:
base="hexes" for H-trains as in 1826, 1849 etc.
countTowns="no" for all trains in 1841, 18EU, etc.,
where towns score but do not count against the train length.
Otherwise, towns are counted as minor or major stops,
depending on the presence or absence of a "minorStops" value.
-->
<Score towns="yes"/>
<!-- Alternative values:
towns="no" for trains that ignore towns (e.g. 1826 TGV).
cities="double" if city-revenue is doubled (e.g. 1826 TGV).
-->
</Defaults>
<TrainType name="2" majorStops="2" cost="180" quantity="2">
<IfOption name="NumberOfPlayers" value="3">
<Attributes quantityIncrement="+1"/>
</IfOption>
</TrainType>
<TrainType name="3" majorStops="3" cost="300" quantity="1">
<NewPhase phaseName="3"/>
<IfOption name="NumberOfPlayers" value="3">
<Attributes quantityIncrement="+1"/>
</IfOption>
</TrainType>
<TrainType name="4" majorStops="4" cost="430" quantity="1">
<NewPhase phaseName="4"/>
<Attributes obsoleting="yes"/>
</TrainType>
<TrainType name="5" majorStops="5" cost="450" quantity="1">
<NewPhase phaseName="5"/>
<Attributes obsoleting="yes"/>
</TrainType>
<TrainType name="2E" majorStops="2" cost="250" quantity="2">
<NewPhase phaseName="6"/>
<Attributes obsoleting="yes"/>
<Reach base="stops" countTowns="no"/>
<Score towns="no"/>
</TrainType>
<TrainType name="3E" majorStops="3" cost="350" quantity="1">
<NewPhase phaseName="6"/>
<Attributes obsoleting="yes"/>
<Reach base="stops" countTowns="no"/>
<Score towns="no"/>
</TrainType>
</Component>
<Component name="PhaseManager" class="net.sf.rails.game.PhaseManager">
<!-- Note: released and rusted trains are now specified per TrainType
but could as well be moved here. To be sorted out when we do 18US. -->
<!-- Each Phase's defaults are the previous one's values -->
<Phase name="2" >
<Tiles colour="yellow"/>
<Privates sellingAllowed="no"/>
<OperatingRounds number="1"/>
<Trains tradingAllowed="yes"/>
</Phase>
<Phase name="3">
<Tiles colour="yellow,green"/>
<Privates sellingAllowed="yes"/>
<OperatingRounds number="2"/>
</Phase>
<Phase name="4">
<Trains rusted="2"/>
<OffBoardRevenue step="2"/>
</Phase>
<Phase name="5">
<Tiles colour="yellow,green,brown"/>
<Trains limitStep="2"/>
<!--Privates close="yes"/-->
<OperatingRounds number="3"/>
<OffBoardRevenue step="3"/>
</Phase>
<Phase name="6">
</Phase>
</Component>
<Component name="RevenueManager" class="net.sf.rails.algorithms.RevenueManager">
<!-- Required for coalfield rights '-->
</Component>
</ComponentManager>
27 changes: 27 additions & 0 deletions src/main/resources/data/1800/GameOptions.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- GAME OPTIONS must have:
- a name, which must also exist as an entry in LocalText.properties,
- optionally 'type="toggle"', which has the effect that the
selection uses a checkbox instead of a dropdown list.
In this case, 'values' must be absent
(the allowed values are fixed to "yes,no").
- optionally, 'values="a,b,c"' i,e, a list of allowed values.
- optionally, a default value (only affects a toggle;
in a dropdown the first item is always the default).
-->
<GameOptions>
<GameOption name="Variant" values="Basegame,2p" default="Basegame" />
<GameOption name="NoMapMode" type="toggle" default="no" />
<GameOption name="RouteAwareness" values="Highlight,Deactivate" default="Highlight" />
<GameOption name="RouteAlgorithm" values="Permissive,Semi-Restrictive,Restrictive" default="Permissive" />
<GameOption name="RevenueCalculation" values="Suggest,Deactivate" default="Suggest" />
<GameOption name="UnlimitedTiles" values="No,Yellow Plain,Yes" default="No"/>
<GameOption name="BeginnerGame" type="toggle" default="no" />
<GameOption name="WithOptional6Train" type="toggle" default="no"/>
<GameOption name="UnlimitedTopTrains" parm="D" type="toggle" default="no"/>
<GameOption name="FirstRoundSellRestriction" values="First Round,First Stock Round" default="First Round" />
<GameOption name="LeaveAuctionOnPass" type="toggle" default="no"/>
<GameOption name="TwoPlayersCertLimit70Percent" type="toggle" default="no"/>
<GameOption name="SeparateSalesAtSamePrice" type="toggle" default="yes"/>
<GameOption name="C&amp;ACertificate(ReadingOnly)" values="PRR,RDG" default="PRR"/>
</GameOptions>
34 changes: 34 additions & 0 deletions src/main/resources/data/1800/Map.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
<Map tileOrientation="NS" letterOrientation="vertical" even="A">
<Defaults>
<Access type="offMap" runTo="yes" runThrough="no" loop="no" score="major"/>
<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 -->
<IfOption name="NumberOfPlayers" value="2">
<Image file="1800/mapimage_2p.svg" x="15" y="8" scale=".92"/>
</IfOption>
<IfOption name="NumberOfPlayers" value="3">
<Image file="1800/mapimage_3p.svg" x="15" y="25" scale=".90"/>
</IfOption>
<Hex name="A3" tile="-13" value="10,40,70" city="Cheyenne" orientation="3"/>
<Hex name="C3" tile="0" cost="50"/>
<Hex name="D2" tile="-1"/>
<Hex name="D4" tile="-1"/>
<Hex name="E1" tile="-12" />
<Hex name="E3" tile="-20" city="Fort Collins" />
<Hex name="E5" tile="-12"/>
<Hex name="F2" tile="0" cost="40"/>
<Hex name="F4" tile="0" cost="40" />
<Hex name="G1" tile="-901" value="10,20,30" orientation="4"/>
<Hex name="G3" tile="-12" city="Denver" cost="40" />
<Hex name="G5" tile="-901" value="10,20,30" orientation="4"/>
<IfOption name="NumberOfPlayers" value="2">
<Hex name="I3" tile="-901" value="20,30,40" city="Colorado Springs" orientation="4"/>
</IfOption>
<IfOption name="NumberOfPlayers" value="3">
<Hex name="H2" tile="-901" value="10,20,30" orientation="0"/>
<Hex name="H4" tile="-901" value="10,20,30" orientation="2"/>
<Hex name="I3" tile="-12" city="Colorado Springs"/>
</IfOption>
</Map>
77 changes: 77 additions & 0 deletions src/main/resources/data/1800/StockMarket.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,77 @@
<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>

<StockSpace name="A1" price="80"/>
<StockSpace name="A2" price="70"/>
<StockSpace name="A3" price="60"/>
<StockSpace name="A4" price="50" type="yellow"/>
<StockSpace name="A5" price="40" type="orange"/>
<StockSpace name="A6" price="30" type="orange"/>
<StockSpace name="A7" price="20" type="orange"/>
<StockSpace name="A8" price="10" type="orange"/>
<StockSpace name="B1" price="90"/>
<StockSpace name="B2" price="80"/>
<StockSpace name="B3" price="70"/>
<StockSpace name="B4" price="60" type="yellow"/>
<StockSpace name="B5" price="50" type="yellow"/>
<StockSpace name="B6" price="40" type="yellow"/>
<StockSpace name="B7" price="30" type="orange"/>
<StockSpace name="B8" price="20" type="orange"/>
<StockSpace name="C1" price="100"/>
<StockSpace name="C2" price="90"/>
<StockSpace name="C3" price="80"/>
<StockSpace name="C4" price="70"/>
<StockSpace name="C5" price="60"/>
<StockSpace name="C6" price="50" type="yellow"/>
<StockSpace name="C7" price="40" type="yellow"/>
<StockSpace name="C8" price="30" type="yellow"/>
<StockSpace name="D1" price="110" />
<StockSpace name="D2" price="100">
<StartSpace/>
</StockSpace>
<StockSpace name="D3" price="90">
<StartSpace/>
</StockSpace>
<StockSpace name="D4" price="80">
<StartSpace/>
</StockSpace>
<StockSpace name="D5" price="70">
<StartSpace/>
</StockSpace>
<StockSpace name="D6" price="60">
<StartSpace/>
</StockSpace>
<StockSpace name="D7" price="50"/>
<StockSpace name="D8" price="40"/>
<StockSpace name="E1" price="120"/>
<StockSpace name="E2" price="110"/>
<StockSpace name="E3" price="100"/>
<StockSpace name="E4" price="90"/>
<StockSpace name="E5" price="80"/>
<StockSpace name="E6" price="70"/>
<StockSpace name="E7" price="60"/>
<StockSpace name="F1" price="140"/>
<StockSpace name="F2" price="120"/>
<StockSpace name="F3" price="110"/>
<StockSpace name="F4" price="100"/>
<StockSpace name="F5" price="90"/>
<StockSpace name="G1" price="160"/>
<StockSpace name="G2" price="140"/>
<StockSpace name="G3" price="120"/>
<StockSpace name="G4" price="110"/>
<StockSpace name="H1" price="180"/>
<StockSpace name="H2" price="160"/>
<StockSpace name="I1" price="200"/>
<StockSpace name="I2" price="180"/>
<StockSpace name="J1" price="225">
<GameOver/>
</StockSpace>
</StockMarket>
Loading