Git Product home page Git Product logo

18xx's Introduction

18xx.games

About

18xx.games is a free, open-source website for playing 18xx games. All titles are published on 18xx.Games with permission from their respective designers and/or publishers. If you intend to use any title for your own use or on a different website, please contact the applicable designer and/or publisher for any necessary permissions.

Contributors

Special thanks to all the contributors who help make this project what it is!

Development

Please submit issues and pull requests. Most discussion about development happens on the 18xx Slack in the #18xxgames and #18xxgamesdev channels. If you would like to add your game to the site, please contact us on Slack. For more information, see DEVELOPMENT.md.

18xx's People

Contributors

tobymao avatar michaeljb avatar crericha avatar jenf avatar roseundy avatar perwestling avatar yzemaze avatar ventusignis avatar galatolol avatar ollybh avatar benjaminxscott avatar philcampeau avatar zwergenpunk avatar magnusstjarnhild avatar outsidepasser avatar edpovi avatar andrewzwicky avatar ryandriskel avatar andypymont avatar dfannius avatar vandamm avatar scottredracecar avatar daniel-sousa-me avatar patrikolesen avatar jason-johnson avatar thepackrat avatar joeb989 avatar kelsin avatar underhilllabs avatar doubt72 avatar

18xx's Issues

1858: illegal tile upgrade

The W, in west Madrid, was only connected to Murcia by a combination of broad and narrow gauge track. But the program allowed the upgrade (yellow to green). It also allowed the trade-in of the M&C i.e. the same error in the SR.

Revenue from private companies isn't shown during the 'select routes' step

When a public company is operating, it would be good if the revenue from any private companies it owns is shown during the 'select routes' phase. At the moment the trains are listed and the 'submit' button to end this phase shows the revenue from these, but not the additional revenue from privates. This is especially weird during a public company's first operating turn, when it does not have any trains but will still generate revenue, as long as it has been started by converting a private.

The simplest fix might be just to tweak the 'submit' button to include this additional revenue.

A better solution would be to have the private companies appear in the list of trains, shown as train=[company abbreviation], used=[blank], revenue=[revenue], route=[blank]. These trains would have to be non-selectable, and excluded from route selection/auto-routing, route clearing, and so on. This would also be usable in other games, such as 1873's bonus revenue for the QLB.

Map is cluttered with items obscured

There's too much clutter on the 1858 map. It needs to be tidied up with unneccessary items removed and making sure that nothing is obscured.

Private railway companies are the cause of much of this, with icons showing their home hexes, and indicators for blocked hexes (which only show a single company even if two block the same hex) and reserved cities (again, this doesn't work for shared cities).

Ideally it would be possible to show the private railway like on the AAG game board, with multiple hexes connected by lines. If not then removing the blocked hex markers would help, and private company icons in cities (as the company should be shown in the city).

Skip private companies' operating turns if they cannot lay track

After a couple of operating rounds, many of the private railway companies are unable to build any track on their operating turns. At the moment the player is still having to take their turn, and decline the opportunity to build track.

As track building is the only step a private company can take in an operating round, the entire operating turn can be skipped if they cannot legally place any track.

1858: taking a token during final closure

If the major takes a token when absorbing a private during the final closure round, it says that it pays something. I'm not sure if it actually does pay it, but either way it should be free.

Log message on exchanging a private for a company presidency is misleading

The log message on exchanging a private company for a public company presidency reads something like:

Player 3 exchanges Alar and Santander Railway and Pt80 from the Treasury for a 40% share of N

This suggests the money for half of the president's certificate is being paid from the company treasury, which is untrue.

The game behaviour is correct (the player is paying this money), the message needs to be amended to match.

This message comes from Engine::SharePool.buy_shares. The best way to fix this would be to extract a method for generating the log message and then overridge this in a SharePool subclass.

1858: game stops when trying to payout

OR3.1 MZA earns 68 from privates, but when trying to pay out, I get the following error message:
"undefined method 'reservations' for nil". It doesn't hang, but paying half or withholding does the same.
So cannot progress the game.

I'll send you the JSON in an email.

1858: trading in privates (minor)

When starting a new company, you are given the option of "exchange 50% for Treasury Share" which is not allowed. Clicking on that button just flags an error, but why not remove the button altogether? i.e. just have the "exchange for 50% of President Share" button(s).

BTW, it's Director not President.

Also, when trading in a private for a treasury share it should be 100% not 50%.

1858: cannot scrap train that has just been wounded

OR6.1 MZA had a wounded 4H plus an unwounded 6H. It scrapped the 4H and bought the first 7E, thus wounding its 6H. But it wasn't then allowed to scrap the 6H to buy another train (despite having the cash to do so).

I'll send you the JSON.

1858: cannot take token in FCR

Testing 2p: in the Final Closure Round (after OR4.1), the O&V elected to take an RP treasury share. But the RP wasn't given the opportunity to place a token in Vigo.

Earlier in the round, the Z&P exchanged for a TBF treasury share and TBF took the token in Zaragoza.

I'll send you the JSON.

Private/major company connection check fails if there is no track in a shared hex

If no track is built in either Córdoba or Sevilla, and then C&S is used to start a major company, it should be possible to swap one of the other Andalucian privates (SJ&C for Sevilla or C&M for Córdoba) for a share in the major. This option isn't being offered, as the company_corporation_connected check is failing.

This is unlikely to come up in an actual game, but it's still incorrect behaviour.

This might be caused by the same graphing bug as #7.

1858: privates close at wrong time

Privates owned by a major currently close after the company has bought trains i.e. as it's last action. This is incorrect: they should close after running trains/distributing income but before buying trains!

1858: Cannot issue stock in EMR

ZPB is at a share value of 50 without a train and little cash. The owner has lots of cash and there are 5 shares available to issue for Emergency Money Raising.

But when I try to issue some stock, I get an error message: "must buy train from the depot after issuing shares". What should happen is that the company closes.

Hotseat game, so I'll send you the JSON in an email.

Contributing just cash from hand works correctly. Also, skipping buying a train closes the company correctly, except that it is no longer available to start in the next SR (which it should be).

Tokener uses the default graph, not broad or metre gauge graphs

The code in Engine::Step::Tokener.can_place_token? is using the default graph. You can get the case where there is no legal route to an empty token spot using either broad or metre gauge track, but the code is finding a route using a combination of both broad and metre gauge track. This means the token step is not skipped.

Extra token slot created if starting a public company in Seville/Córdoba/Zaragoza

Three cities (Seville, Córdoba and Zaragoza) are in hexes that are home for two private railways, and so have two companies with reservation abilities for the hexes.

If one of these private railway companies is used to start a public company in the city, a second token slot is being created on the yellow tile. This must be the engine trying to be helpful: it can see the public company token and the reservation for the other private, so thinks two slots are needed.

This second slot should not appear until the tile is upgraded to green. At that point the reservation for the second private should reappear, if that company is still open.

Private companies do not have descriptions

There are no desc properties defined for any of the private railway companies.

These should be added to all of them and show:

  • Income (in yellow/green phases).
  • Home hexes.
  • Whether the private can be used to start a major (and where).

Two-player variant for 1858

1858: Two player variant rules

Ian D Wilson 06 Dec 2022

Setup

Start capital = P500
Bank = P8,000
Certificate limit = 21

Set aside five randomly chosen privates from P2-P17 (inclusive) plus two from P18-22. These are not available to be bought but remain in play (so they block building and prevent tokening in their home hexes). They close as normal in the Final Closure Round.

Remove 2 x 2H, 2 x 4H/2M, 1 x 6H/3M, and 1 x 5E/4M trains.

Others

The limit on director’s share holdings is now 70% rather than 60%. You can only exceed 70% by exchanging privates in the FCR.

It only takes three grey trains to rust the 6H/3M trains.

Player-owned private companies are displayed as minor companies

Privates owned by players are rendered using View::Game::Corporation.render which is attempting to show previous revenue, and the company names aren't fitting in the tiles.

It would be better to use a similar format to the one for unsold private companies. The rendering can be overridden through a setting in @game.corporation_view, see 1872 for example.

1858: cannot trade in O&V

In a SR, I traded in the S&C for a RP share, but it then wouldn't let me trade in the O&V (which was also connected by the same route).
I could trade in the O&V into the N & W, both of whom were also connected.

Token step not processing place_token action

OR3.2 RP attempts to lay a token in Cordoba (which it cannot afford), I get the following error message:
"Blocking Step run routes cannot process action 284"

This may just be that a more intelligible message is needed e.g "cannot lay token: insufficient funds"

1858: major companies cannot upgrade home hexes of privates

TBF in Barcelona wanted to upgrade Valencia but couldn't, also A in Cordoba couldn't upgrade Cordoba! The restriction on laying in home hexes should only apply to yellow tiles.
[This was crippling for the A, since it had bought a 2M but now couldn't run it.]
P.S. The rule about laying yellow in the home hex of a private owned by the major is correct.

Reservations and tokens getting assigned to same city slot on green tiles

A is started using C&M with a token in Córdoba. When Córdoba is upgraded to green, A's token is in slot 0. The reservation for C&S does not appear in slot 1 as expected, and other corporations are able to place a token there. If C&S is used to start a corporation it overwrites A's token in slot 0.

Quick start variant is broken

Choosing the quick start variant breaks the game. Nobody can act in the first stock round as they do not have enough money after paying for their batch of private companies. The game should advance to the first operating round but this is not happening, the first stock round is being rendered but breaking because there is no active step or current entity.

1858: order of track laying

You're going to hate me for this...

The order of track laying shouldn't affect the total cost!
As an example: the N built a yellow narrow gauge track from Valladolid to Madrid (though the mountain) for 40, then upgraded Valladolid to brown for 20, total cost 60. But doing it in the opposite order it costs 0 (upgrade) and 50 (40+10) for the yellow tile. It should cost 50 whichever order they are laid.
Might be tricky to code...

1858: Final Private Exchange blocks token

During Final Private Exchange if two companies which share a token slot have not been previously exchanged, e.g. C&M and C&S, and the tile is still yellow and has only one slot, the first company swapped in cannot lay a token because "no token slots available on G18". The second company is then allowed to place a token as the reservation has been removed. This should be first-come first-served.

Cities shared by two private railway companies need to show both names

Three cities (Sevilla, Córdoba and Zaragoza) are each home locations for two private railway companies. Each of these companies has an ability to reserve the city, but the user interface is not expecting this and so only shows the name of the last one declared. Both names need to be shown, though this is likely to require very small text.

Madrid private railway routes need to connect to specific city circle, not just the Madrid hex

The three Madrid private railway companies (M&V, M&A, CM&P) all have H11 included in their coordinates. This means that any track lay is legal if a route can be traced to the Madrid hex.

Ian Wilson has confirmed that this is wrong. The three privates each have an assigned city circle in Madrid, and only routes that can be traced to this space are legal.

One of M&V's home hexes is Madrid. If it wanted to, it could build track in the southern route out of Madrid, into J15 (Albacete) rather than just being restricted to the northwest route out of Madrid. Right?

No. It must be connected to new track outside its home hexes, and M&V is in north Madrid only. (A bit of a corner case, I'm not sure if the rules actually say either way, but that's what I intended when I designed the game!)
In effect, there aren't "rickshaws" for building track (or running trains), but there are for acquisition purposes.

To fix this H11 will need to be removed from these companies coordinates. The track laying should be fine without this hex included, but the checks for connectivity will need to include a check for H11, as a connection to anywhere in Madrid is sufficient when exchanging a private company for a share in a public company.

1858: buying across counts as buying the 5th train

In my hotseat game, a company bought a 7E from another company, after four phase 7 trains had been bought from the bank, and this triggered the rusting of the 6H's. But it should be five new trains that is the trigger.

1858 implementation meta-issue

1858 implementation notes and task list

Rough implementation plan

  • Setup map, tiles and market
  • Game with public companies available from the start, no privates.
  • Track laying.
  • Tokening.
  • H/M/E/D trains.
  • Private auctions.
  • Exchanging privates for shares in public companies.
  • Track lays by privates.
  • Starting a public company from a private.
  • 5-share to 10-share conversions.
  • Private closure round.
  • Quick start variant.

Operating rounds

Operating round order

  • Privates owned by players pay revenue at the start of the operating round.
  • Privates lay track in numerical order, then public companies operate in stock market order.

Operating round steps

  • Place track.
  • Place token.
  • Run trains.
  • Distribute earnings.
  • Close privates.
  • Buy trains.
  • Issue or redeem shares.

Track laying.

  • Two track lays, either or both can be upgrades, second costs Pt20.
  • Only public companies can upgrade track.
  • Track laying costs (terrain or second tile) are halved for metre gauge track.
  • Semi-restrictive upgrades.
  • Routes for laying/upgrading track cannot include both metre and broad gauge track.
  • Yellow metre gauge track is only available after first 4H/2M train is bought.
  • Private companies do not pay terrain costs for their home hexes.
  • Private companies' first track lay must be in a home hex, unless there is already track there.
  • The private companies' home hexes are reserved, track can only be laid by the privates, or a public company that owns the private. If the hex is shared by two private companies then either can lay the track.
  • Some private companies have linked home hexes, track on these must be laid connecting them together.
  • Players must pay any costs for terrain or second track lays for private companies.
  • Players can pay the costs for terrain if a public company cannot afford it.
  • Players can pay the costs for second track lays if a public company cannot afford it. This is a variant, but the recommended way to play.

Tokening

  • Routes for tokening cannot include both metre and broad gauge track.
  • Token costs are Pt40/provincial border crossed, or Pt20 if in the same province.
  • Public companies floated in phase 5 or later lay their home station when floated. It can be in any unoccupied city circle, and costs twice city's value (zero if the city has not yet been built).
  • Station spaces are reserved for private companies. A public company can ignore this restriction if it owns the private company.

Trains

  • H trains count hex sides crossed.
  • E/M/D trains count large cities, off-board areas and ports visited.
  • E/D trains ignore small cities.
  • M trains count small cities. Their routes can start and end at small cities.
  • D trains double the value of the places visited.
  • H/E/D trains only run on broad or dual gauge track.
  • M trains only run on metre or dual gauge track.
  • Wounded trains halve the value of their runs.
  • Wounded trains can be discarded during the train buying step.
  • Wounded trains count against train limit.
  • Wounded trains can be bought across.
  • Discarded wounded trains are removed from play.
  • 6H/3M trains are rusted by the fifth grey train (7E/6M/5D) train purchased.

Emergency money raising

  • A company is not obliged to own a train. It moves one space left on the stock market if it does not own a train at the end of its turn.
  • Can issue shares from the treasury, move one space left for this.
  • Director can contribute cash from hand.
  • Director cannot sell shares.
  • EMR can only be used to buy a train from the bank or the pool.
  • Don't have to buy the cheapest train.
  • EMR can be used to buy an expensive train even if a cheaper one could be bought without EMR.
  • EMR does not happen if not enough can be raised to afford a train.

Distribute earnings

  • Privates owned by public companies pay their income as train revenue.
  • Public companies pay in full, half pay or withhold.
  • For odd earnings: divide revenue by five or ten, round down and pay that per share. The remainder gets paid to the company treasury.
  • Shares in the company treasury earn dividends, those in the bank pool do not.
  • Only move right if 10×dividend ≥ share price. No multiple jumps.
  • After revenue is paid, any privates owned by a public company close

Stock rounds

  • On a turn you can do multiple sell actions, and then a single buy action.
  • Priority is the player to the left of the last person to take an action.
  • First stock round is the same as any other, except you cannot start a public company.
  • 60% limit on public company ownership.
  • 50% limit on shares in the pool.
  • Cannot sell director's certificate.
  • Stock price only drops for sales by the director, and is one space only.
  • Can start public companies directly after the start of phase 5. 20% to float.

Sell actions

  • Sell shares.
  • Exchange a private company for a public company share. They must be connected. By consent only. Exchange for a share from the company treasury. Can place free token in private company's home, does not need to be connected to this hex.
  • Convert public company from 5-share to 10-share. Can be done in the same round that the company forms.

Buy actions

  • Buy one public company share.
  • Start a public company.
  • Auction a private company.

Private closure round

  • Occurs after the end of the operating round in which the first 5E/4M train is bought.
  • Privates closure in numerical order.
  • Each company is exchanged for a public company share, or sold to the bank for face value.
  • Must be connected to exchange for a share.
  • Need consent to be exchanged for a treasury share, do not need consent for a pool share.
  • If exchanged for a treasury share, the public company receives the private's face value to its treasury.
  • Can go over 60% ownership in this round, do not need to sell down.
  • Unsold private companies close.

End of game

  • End of the operating round in which the bank breaks, or the end of the next operating round if it breaks during a stock round.
  • Does not end if the top of the stock market is reached.
  • Cannot go bankrupt.

Map

  • Need to show private companies' home hexes.
  • Add port symbol to A16 and J1?
  • Check spelling of all place names.

1858: cannot review finished game

When trying to review my latest game, I get the following message:

"We're sorry this game cannot be continued due to GameError: Blocking step Run Routes cannot process action 355
Broken action: { "type": "pass", "entity": "ZPB", "entity_type": "corporation", "id": 355, "created_at": 1668274116 }"

This is when ZPB is running during OR4.1 - this was ok when I played the game originally!

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.