|
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">
+ ...
[truncated message content] |