From: Jonathan F. <jo...@ya...> - 2006-07-09 02:42:34
|
Here's an idea for 18xx company revenue computation that I have been kicking around for a while, and never gotten around to trying because I didn't ever find the time to set up test situations for it (basically the reason I've only ever lurked on this list). This is a cleaned-up transcript of me describing it to the Code Review Bear. http://sjbdeveloper.blogspot.com/2006/03/teddy-bear-code-reviews.html Generally speaking, the idea is that instead of calculating all possible routes for each train and then trying combinations of all the trains until you find a set that doesn't overlap or conflict, don't even generate conflicting routes in the first place. Suppose that we had a data structure which composed into a single "routing state" object: (a) a pointer to the map being used for route segment tracing, (b) a pointer to the set of trains being run, and (c) a route for each train that contains both the revenue points (stations, towns, off-board, specials) and the track between them (you need this for conflict clarification, in case there are parallel routes between two revenue points). Such an object could be constructed any time any part of a route computation comes under analysis. It is not necessary that the map represent the current state of play, so that you can evaluate future tile placement or theoretical runs with no enemy tokens. It is not necessary that the set of trains represent the actual holding of a company, so that you can compute destination runs, "borrowed diesel" operations, or testing for whether a company even has a legal run or route to a tile lay. It is not necessary that the train->route assignment represent a "good" run, so that it can represent an intermediate point on a search. I propose that a fundamental operation on this object is "what are all the possible ways that any one train can have its route extended by one route segment?" This operation takes into account all route segments that are precluded due to already being obstructed by other existing routes, being obstructed by enemy tokens, or by not being appropriate for the type of train (narrow-gauge or off-board), and does not include those as possible results. It DOES include any extensions that would not be legal as they stand (not all connected [1860], or have a route ending in a village [1829]), because they might be extended further to eventually come to be legal states after all, and can't be discounted. This state object together with the operator to generate route extensions satisfy the state space conditions for generalized search algorithms, e.g. as shown in Russel & Norvig, 1995, pp. 72ff. Breadth-first search would run like this: for each possible assignment of trains to tokens { create a route state where each train has a 0-length "route" at its token and put that state on the queue; // Example: 3 2-trains and 3 tokens would have 27 starting states. } bestState = null; while the route state queue is not empty { pull routeStateParent off the queue; routeStateChildren = routeStateParent.getRouteExtensions(); if ( routeStateChildren.isEmpty() ) { // Parent can't be extended any further, due to trains being out of // movement points or being blocked. if ( routeStateParent.revenue() <= bestState.revenue() ) { // In some games you might want to hang on to less-than-best if // there are other features, like halts or exploration. } else if ( ! routeStateParent.runIsLegal() ) { // This is where you kick out a run for game-rule reasons. If the // reason is "all trains still have 0-length routes", then keep // track of the possibility that this company may not be required // to own trains at all. } else { bestState = routeStateParent; } } else { for each child { // It MIGHT be possible to prune here, if it's possible to figure // out that there's NO possible good extension of this child, // e.g. if a 2038 ship doesn't have enough movement left to reach // a base. enqueue the child; } } } return bestState; [Note: At the point where it might be possible to prune, it also might be possible to determine that this child is equivalent to another state already queued. For example, a single train going from token T1 to token T2 is equivalent to one going the other way, so you wouldn't have to put the second one on the queue, but actually figuring this out might be more expensive than just living with it.] --- I think we all understand that the best route for a long train is not necessarily equal to the best route for a shorter train plus however many additional revenue points it can reach, but here's a test case that makes this really clear: 20 ---- 20T ---- 10 ---- 10 ---- 50 \ \ -- 10 ---- 10 ---- 50 (The company's only token is at station "T".) Trains Best Revenue 2 40 3 50 4 90 (NOT 60) 2,2 70 2,3 80 3,3 90 4,3 140 (NOT 100) 4,4 180 (NOT 150) This is basically the reason that route-finding does not appear to have a simple recursive/memoization/dynamic-programming solution. --- What does this mean in terms of the hex-level API? I think it's important to use the API to raise the focus from the individually conflicting arcs on individual tiles to conflicts between "route segment"s, which is the term the players (and game rule coders) will be thinking in. I've deliberately left the term a bit fuzzy, but I think it should mean something like "all of the track arcs, across arbitrary many tiles, that connect one revenue/bonus/gamestate map feature to the next one, in any possible train route according to the rules of this game". For 1830-ish games, this is rather simply following the track from one city/village to the next. For 1860-ish games, which allow skipping of villages/halts, there are city-to-village route segments that conflict with city-to-city-beyond-that-village route segments along the same track. For 1844-ish games, where some trains count hexes rather than stations, one route segment may take more than one "point" of capacity, and that will affect future route extension calculations for that train. For 2038, there is a choice of making every route segment be "one movement point" or making a route segment be "however far to the next mine you are actually going to pick up from". If you were going to list every one in the entire map that might be memory-intensive, but you probably never need to do that since the conflictsWith() check is so simple. It might be desirable to make it so that the decision of whether to precompute the list of route segments every time the map changes is up to the individual game, not baked into the core algorithm. In any case, it is clear to me that a RouteSegment class, far from being a burden to maintain as an "intermediate" data structure, represents a key point of "impedance matching" to bridge overall thinking from the hex level to the route level. So, having thought this far, here is some more pseudocode: getRouteExtensions() { for each train in the routeState that has movement remaining { for each "live" end of the current train route { // Ends might not be live if they've gone off-board or have // otherwise dead-ended in this routeState, including enemy // tokens. 2038 ships always only have one live end. for each routeSegment from this endpoint { if (game-specific reason this train can't use this segment) { // This is the check for H-trains going beyond their movement // limit [1844], or for going to a different city on a tile // you've visited [1829], or for a segment that skips villages // when used with a train that actually can't [1860] or // vice-versa [18Scan]. } else if (routeSegment.conflictsWith(routeState.allSegments())) { // This test is where the bitvectors John is talking about // could come in handy. } else { // Good enough to try. copyState = routeState.copy(); extend this train's route in copyState by routeSegment; record movement usage for this train; // Might be zero. add copyState to resultSet; } } } } return resultSet; } Hm, after all this, I see I haven't really handled double-heading, but I think that issue can be handled in the representation of the train set. It's also possible that rather than having the map and the trainSet be in the routeState, to save time on object copying, that they would be "global" to the entire search tree. There would also have to be a RouteResult object type that did contain all these details, for representing the result of route searching to the rest of the program. Anyway, I enjoyed thinking about this, so I hope it helps. -- Jonathan |
From: Dave M. <da...@mi...> - 2006-07-08 03:47:16
|
On 7/7/2006 12:17 AM, John A. Tamplin wrote: >Ok, it was more work than I thought it would be and I am not totally >satisfied with it yet -- feel free to suggest improvements. > >The route finding code (and other similar uses such as connectivity >requirement for tile and token placement) needs to know the following: > > * which edges are connected to other edges > * which junctions are connected to which edges > * which junctions are connected to each other > * the revenue value of each junction (possibly varying by phase) > * the number of token slots for each junction (which may be zero for > off-board areas or villages) > * which connections interfere with which other connections (ie, only > one train can be run on a given set of connections) > >The connectivity within a tile will be modelled by breaking down a >junction into multiple exits from it -- ie, if track from a given >junction going to side A and going to side B share some track and can't >be used together, that will be treated as one exit. If they don't share >track, they will be in two different exits. Thus, we have the following >connectivity tests: > > * edge - edge > * edge - junction/exit > * junction/exit - junction/exit In my 1830 program, I just considered cities to be another "edge" I created a bit vector for the edges in a hex/tile To describe the tile, each edge had a vector of edges it was connected to. I didn't deal with junctions (none in 1830 tiles), but I think the idea is extensible. >Based on where the tiles are placed an in what orientation, a >connectivity graph of junctions to map hex edges can be kept up to >date. Each company will also have a list of junctions where there >tokens are located, and a connectivity graph of other junctions >reachable from each of those. When a new tile or the company's own >token is placed, additional edges will get added to the connectivity >graph (and nodes as well if new junctions are added on new tiles). When >a foreign token is placed, edges may get removed if a city is full of >tokens. Will need a token container somewhere. >Tile placement for a company will find the union of reachable map hex >edges from all of the company's tokens and highlight possible tile >locations. When one is selected, the possible tiles that connect to one >of the reachable edges on that hex and which can be oriented such that >they don't connect to a blocked hex edge (the blocked edge list will be >created when the map is created, and not updated afterwards) will be >shown as options, and only rotations which meet these criteria will be >shown in the cycle of rotations. Right, so for this application it's not necessary to build a "tree" or "graph". For tile placement, you need a bool IsEdgeConnected(loc,edge) function. >For a token placement, it will simply find reachable junctions where the >company doesn't already have a token and has an available slot (we still >have to solve mapping the junction token slot to a screen location). I found this problem rather ugly. Dealing with screen hits means some sort of location coord to city mapping. >For route calculation, it is more complicated. In addition to the >connectivity graph of junctions, junction exits have to be considered >since a given junction exit may only be used by one train. Imagine the >following connectivity example: > >Tile A: J1E1-1, J1E1-2, J1E2-4 >Tile B: J1E1-1, J1E2-4 >Tile C: J1E1-1 >The company has a token in TAJ1, TA-1 is connected to TC-1, and TA-2 is >connected to TB-4. > >The connectivity graph for the company includes all three junctions >(TAJ1, TBJ1, TCJ1). However, only one train may be run and it may only >include B or C, since connectivity between tile A and either B or C both >use J1E1. Pseudocode of a brute force algorithm for one train, >extendible to multiple trains: > >bestRoute=null route; >for each company token { > junction=token.junction; > junctionsSeen=empty bitmap; > junctionsSeen.setSeen(junction); > exitsSeen=empty bitmap; > route=findRoute(junction,junctionsSeen,exitsSeen,maxhops); > if(route && route.value>bestRoute.value) { > bestRoute=route; } >} > >function findRoute(junction,junctionsSeen,exitsSeen,hopsleft) { > bestTail=null route; junctionsSeen.setSeen(junction); > for each outexit on junction { > // can't go out the same way we came in or go into another > // junction on a path that has been used already > next if(outexit==exit || exitsSeen.seen(junction,outexit)); > > // find out where this exit connects to > junexit=connectedJunctionExit(junction,outexit); > // make sure it goes someplace that we can run to and > // that hasn't been used > next if(!junexit || junctionsSeen.seen(junexit.junction) > || exitsSeen.seen(junexit.junction,junexit.exit)); > > // mark what we have used and recurse to find the best > // remainder of a route > exitsSeen.setSeen(junction,outexit); > exitsSeen.setSeen(junexit.junction,junexit.exit); > >routeTail=findRoute(junexit.junction,junctionsSeen,exitsSeen,hopsleft-1); > if(routeTail && routeTail.value>bestTail.value) { > bestTail=routeTail; > } > exitsSeen.clearSeen(junexit.junction,junexit.exit); > exitsSeen.clearSeen(junction,exit); > } > junctionsSeen.clearSeen(junction); > return bestTail.prepend(junction); // also updates route value >} I used a breadth first stack to build my "tree". Each iteration followed the entrance edge to push all connected "exit" edges, then pop next entrance. Eventually all paths will lead to no connection, seen before, or blocked. The stack has a predicable max, and no recursion is involved. >I don't know if bruteforce will be acceptable even on modern hardware. A >large map like 1844 will have 50 or more unique junction exits, and if >many of them aren't full of tokens that could be a very large number of >possible routes to consider, and that is multiplied by the number of >trains to run. To extend this to multiple trains, each train would have >to keep its own list of junctions visited, but share the exits visited >bitmaps. You would also have to add code trying all combinations of >trains starting from each of the tokens (including order, since a short >train might cut off a long train by visiting a junction first), but >findRoute wouldn't change at all. I never got to building a route finder, but think about how you want to keep and use the info. Note that even though you are following a logical tree, it doesn't have to be stored as a linked list. >Comments? > >If this is agreeable, what is the best way to represent the connectivity >graph and the API to get the connectivity information from the tile >object? You really have a tree -- a tile contains 0 or more junctions, >each of those contains 0 or more exits (so map hexes with no track are >covered), and each of those exits connects to an arbitrary number of >edges and other junction exits on the same tile. The two obvious ways >are a graph of nodes and a 2-d bit vector showing connectivity between >everything. The latter would need to be built ourselves using longs >since arrays of booleans aren't packed. >How would you like to see the interface to the connectivity data in the >tile? > >-- >John A. Tamplin ja...@ja... >770/436-5387 HOME 4116 Manson Ave > Smyrna, GA 30082-3723 All for now... lets see if I can get this one through. Sourceforge doesn't like my provider's email setup. Dave. |
From: Dave M. <da...@mi...> - 2006-07-09 03:42:59
|
A couple more comments on my implementation... On 7/7/2006 11:47 PM, Dave Mitton wrote: >On 7/7/2006 12:17 AM, John A. Tamplin wrote: > >Ok, it was more work than I thought it would be and I am not totally > >satisfied with it yet -- feel free to suggest improvements. > > > >The route finding code (and other similar uses such as connectivity > >requirement for tile and token placement) needs to know the following: > > > > * which edges are connected to other edges > > * which junctions are connected to which edges > > * which junctions are connected to each other > > * the revenue value of each junction (possibly varying by phase) > > * the number of token slots for each junction (which may be zero for > > off-board areas or villages) > > * which connections interfere with which other connections (ie, only > > one train can be run on a given set of connections) > > > >The connectivity within a tile will be modelled by breaking down a > >junction into multiple exits from it -- ie, if track from a given > >junction going to side A and going to side B share some track and can't > >be used together, that will be treated as one exit. If they don't share > >track, they will be in two different exits. Thus, we have the following > >connectivity tests: > > > > * edge - edge > > * edge - junction/exit > > * junction/exit - junction/exit > >In my 1830 program, I just considered cities to be another "edge" >I created a bit vector for the edges in a hex/tile >To describe the tile, each edge had a vector of edges it was connected to. >I didn't deal with junctions (none in 1830 tiles), but I think the >idea is extensible. > > > >Based on where the tiles are placed an in what orientation, a > >connectivity graph of junctions to map hex edges can be kept up to > >date. Each company will also have a list of junctions where there > >tokens are located, and a connectivity graph of other junctions > >reachable from each of those. When a new tile or the company's own > >token is placed, additional edges will get added to the connectivity > >graph (and nodes as well if new junctions are added on new tiles). When > >a foreign token is placed, edges may get removed if a city is full of > >tokens. > >Will need a token container somewhere. > > > >Tile placement for a company will find the union of reachable map hex > >edges from all of the company's tokens and highlight possible tile > >locations. When one is selected, the possible tiles that connect to one > >of the reachable edges on that hex and which can be oriented such that > >they don't connect to a blocked hex edge (the blocked edge list will be > >created when the map is created, and not updated afterwards) will be > >shown as options, and only rotations which meet these criteria will be > >shown in the cycle of rotations. > >Right, so for this application it's not necessary to build a "tree" >or "graph". >For tile placement, you need a bool IsEdgeConnected(loc,edge) function. Actually, having an array of edge connectivity vectors per hex (a bit matrix) led to some interesting capabilities. To match a tile to the map, you do an matrix rotation on the array. When rotated, a canidate tile must preserve the existing connectivity, so the new tile's bit vector must be a superset of on the existing map hex. AND'ing the tile's matrix against the hex, should yield the hex's matrix. ... Dave. |
From: John D. G. <jd...@di...> - 2006-07-09 17:28:56
|
> Erik Vos wrote: >> I have (hopefully) fixed the reported (and some more) bugs >> regarding share buying/selling and certificate counting. >> >> This includes a problem I found, that if 3 players have >> each 20% of a company, with 40% in the Pool, the >> presidency could not be sold. brett lentz wrote: > In this situation, my understanding of the rules is that you can't > sell the presidency, It is controversial whether the president can sell one of his two shares (since it's not a separate certificate), but most people play that he can (provided that either the bank pool or the new president holds a 10% certificate that can be given to the seller as "change"). In 1835, this sale would definitely be illegal because 1835's rules explicitly say that you buy and sell whole certificates, not shares. I've played in groups that apply the same rule to 1830 and other games. |
From: Erik V. <eri...@hc...> - 2006-07-09 18:16:18
|
> brett lentz wrote: > > In this situation, my understanding of the rules is that you can't > > sell the presidency, > > It is controversial whether the president can sell one of his > two shares > (since it's not a separate certificate), but most people play > that he can > (provided that either the bank pool or the new president holds a 10% > certificate that can be given to the seller as "change"). > > In 1835, this sale would definitely be illegal because 1835's rules > explicitly say that you buy and sell whole certificates, not shares. > I've played in groups that apply the same rule to 1830 and > other games. Never heard that this is controversial. The 1835 rules (2nd English edition) are particularly clear about it (IV.3, and Rule XV.7 says "Only shares may be sold"). Of course, another player must have enough shares to exchange for the President's share (usually 20%). Erik. |
From: John A. T. <ja...@ja...> - 2006-07-06 21:31:29
|
brett lentz wrote: >On 7/6/06, Erik Vos <eri...@hc...> wrote: > > >>I have (hopefully) fixed the reported (and some more) bugs >>regarding share buying/selling and certificate counting. >> >>This includes a problem I found, that if 3 players have >>each 20% of a company, with 40% in the Pool, the >>presidency could not be sold. >> >In this situation, my understanding of the rules is that you can't >sell the presidency, especially because there's no clear benefactor to >receive the presidency. > > I don't have the 1830 rules in front of me, but at least some other 18xx games specifically say this is acceptable -- the president is allowed to sell one share, trading with the one who will receive the president's certificate in order to put one in the pool. As far as who gets the presidency, all games I know of say the next eligible player among those tied clockwise from the current president (or in share-round order if it allows variable order). -- John A. Tamplin ja...@ja... 770/436-5387 HOME 4116 Manson Ave Smyrna, GA 30082-3723 |
From: brett l. <wak...@gm...> - 2006-07-06 21:36:33
|
On 7/6/06, John A. Tamplin <ja...@ja...> wrote: > brett lentz wrote: > > >On 7/6/06, Erik Vos <eri...@hc...> wrote: > > > > > >>I have (hopefully) fixed the reported (and some more) bugs > >>regarding share buying/selling and certificate counting. > >> > >>This includes a problem I found, that if 3 players have > >>each 20% of a company, with 40% in the Pool, the > >>presidency could not be sold. > >> > >In this situation, my understanding of the rules is that you can't > >sell the presidency, especially because there's no clear benefactor to > >receive the presidency. > > > > > I don't have the 1830 rules in front of me, but at least some other 18xx > games specifically say this is acceptable -- the president is allowed to > sell one share, trading with the one who will receive the president's > certificate in order to put one in the pool. As far as who gets the > presidency, all games I know of say the next eligible player among those > tied clockwise from the current president (or in share-round order if it > allows variable order). > I have a similar problem. I don't have the rules in front of me, and haven't read them in quite a while, so I definitely could be wrong here. ---Brett |
From: Erik V. <eri...@hc...> - 2006-07-06 21:45:08
|
> > I don't have the 1830 rules in front of me, but at least > some other 18xx > > games specifically say this is acceptable -- the president > is allowed to > > sell one share, trading with the one who will receive the > president's > > certificate in order to put one in the pool. As far as who gets the > > presidency, all games I know of say the next eligible > player among those > > tied clockwise from the current president (or in > share-round order if it > > allows variable order). > > > > I have a similar problem. I don't have the rules in front of me, and > haven't read them in quite a while, so I definitely could be wrong > here. I'm pretty sure that John is right. Erik. |
From: Erik V. <eri...@xs...> - 2010-01-22 21:54:44
|
I have found and fixed two bugs that bear upon the recently found problems: 1. On loading a game, the game options in GamesList.xml are not read. I had recently removed processing of the options that had been duplicated in Game.xml, but that caused the default values not being known at a game reload. For most options that isn't fatal, but 18EU is the only game currently having numeric game options (i.e. the extra 3 and 4-trains). The result was that reloading 3- and 4-trains failed. I haven't exactly sorted out the mechanism, but it turned out that reverting the removal of Game.xml option processing fixed the train-related problems (I also found the defaults were actually missing in Game.xml, so I suspect there must have been some problems all the time). 2. The StockRound had a while statement that should have been an if statement. That caused the looping that I and some other users have experienced. My problems are now gone, and also Jon's saved file loads fine, including the bought 8-train. I'd suggest people who run from the source base to update and recheck. Erik. |
From: brett l. <wak...@gm...> - 2010-01-22 21:59:31
|
Should we ship out 1.1.3 this weekend, or would you like to do a few more fixes first? ---Brett. On Fri, Jan 22, 2010 at 1:54 PM, Erik Vos <eri...@xs...> wrote: > I have found and fixed two bugs that bear upon the recently found problems: > > 1. On loading a game, the game options in GamesList.xml are not read. > I had recently removed processing of the options that had been duplicated in > Game.xml, but that caused the default values not being known at a game > reload. For most options that isn't fatal, but 18EU is the only game > currently having numeric game options (i.e. the extra 3 and 4-trains). The > result was that reloading 3- and 4-trains failed. I haven't exactly sorted > out the mechanism, but it turned out that reverting the removal of Game.xml > option processing fixed the train-related problems (I also found the > defaults were actually missing in Game.xml, so I suspect there must have > been some problems all the time). > > 2. The StockRound had a while statement that should have been an if > statement. That caused the looping that I and some other users have > experienced. > > My problems are now gone, and also Jon's saved file loads fine, including > the bought 8-train. > I'd suggest people who run from the source base to update and recheck. > > Erik. > > > ------------------------------------------------------------------------------ > Throughout its 18-year history, RSA Conference consistently attracts the > world's best and brightest in the field, creating opportunities for Conference > attendees to learn about information security's most important issues through > interactions with peers, luminaries and emerging and established companies. > http://p.sf.net/sfu/rsaconf-dev2dev > _______________________________________________ > Rails-devel mailing list > Rai...@li... > https://lists.sourceforge.net/lists/listinfo/rails-devel > |
From: Phil D. <de...@gm...> - 2010-01-22 22:07:00
|
Excellent news Erik, thanks :) I've been keeping a few save files with some of the recent issues, so I will try some testing with those against the source build. 2010/1/22 brett lentz <wak...@gm...>: > Should we ship out 1.1.3 this weekend, or would you like to do a few > more fixes first? > > ---Brett. > > > > On Fri, Jan 22, 2010 at 1:54 PM, Erik Vos <eri...@xs...> wrote: >> I have found and fixed two bugs that bear upon the recently found problems: >> >> 1. On loading a game, the game options in GamesList.xml are not read. >> I had recently removed processing of the options that had been duplicated in >> Game.xml, but that caused the default values not being known at a game >> reload. For most options that isn't fatal, but 18EU is the only game >> currently having numeric game options (i.e. the extra 3 and 4-trains). The >> result was that reloading 3- and 4-trains failed. I haven't exactly sorted >> out the mechanism, but it turned out that reverting the removal of Game.xml >> option processing fixed the train-related problems (I also found the >> defaults were actually missing in Game.xml, so I suspect there must have >> been some problems all the time). >> >> 2. The StockRound had a while statement that should have been an if >> statement. That caused the looping that I and some other users have >> experienced. >> >> My problems are now gone, and also Jon's saved file loads fine, including >> the bought 8-train. >> I'd suggest people who run from the source base to update and recheck. >> >> Erik. >> >> >> ------------------------------------------------------------------------------ >> Throughout its 18-year history, RSA Conference consistently attracts the >> world's best and brightest in the field, creating opportunities for Conference >> attendees to learn about information security's most important issues through >> interactions with peers, luminaries and emerging and established companies. >> http://p.sf.net/sfu/rsaconf-dev2dev >> _______________________________________________ >> Rails-devel mailing list >> Rai...@li... >> https://lists.sourceforge.net/lists/listinfo/rails-devel >> > > ------------------------------------------------------------------------------ > Throughout its 18-year history, RSA Conference consistently attracts the > world's best and brightest in the field, creating opportunities for Conference > attendees to learn about information security's most important issues through > interactions with peers, luminaries and emerging and established companies. > http://p.sf.net/sfu/rsaconf-dev2dev > _______________________________________________ > Rails-devel mailing list > Rai...@li... > https://lists.sourceforge.net/lists/listinfo/rails-devel > |
From: Erik V. <eri...@xs...> - 2010-01-22 22:07:28
|
No, not yet. I'm going to look at the Pullmanns and perhaps do another thing or two. But I should remark that from now on I will likely have a lot less time to work on Rails than in the past weeks. When 1.1.3 is out it might well become a bit quiet here.... Erik. -----Original Message----- From: brett lentz [mailto:wak...@gm...] Sent: Friday 22 January 2010 22:59 To: Development list for Rails: an 18xx game Subject: Re: [Rails-devel] Fixes Should we ship out 1.1.3 this weekend, or would you like to do a few more fixes first? ---Brett. On Fri, Jan 22, 2010 at 1:54 PM, Erik Vos <eri...@xs...> wrote: > I have found and fixed two bugs that bear upon the recently found problems: > > 1. On loading a game, the game options in GamesList.xml are not read. > I had recently removed processing of the options that had been duplicated in > Game.xml, but that caused the default values not being known at a game > reload. For most options that isn't fatal, but 18EU is the only game > currently having numeric game options (i.e. the extra 3 and 4-trains). The > result was that reloading 3- and 4-trains failed. I haven't exactly sorted > out the mechanism, but it turned out that reverting the removal of Game.xml > option processing fixed the train-related problems (I also found the > defaults were actually missing in Game.xml, so I suspect there must have > been some problems all the time). > > 2. The StockRound had a while statement that should have been an if > statement. That caused the looping that I and some other users have > experienced. > > My problems are now gone, and also Jon's saved file loads fine, including > the bought 8-train. > I'd suggest people who run from the source base to update and recheck. > > Erik. > > > ---------------------------------------------------------------------------- -- > Throughout its 18-year history, RSA Conference consistently attracts the > world's best and brightest in the field, creating opportunities for Conference > attendees to learn about information security's most important issues through > interactions with peers, luminaries and emerging and established companies. > http://p.sf.net/sfu/rsaconf-dev2dev > _______________________________________________ > Rails-devel mailing list > Rai...@li... > https://lists.sourceforge.net/lists/listinfo/rails-devel > ---------------------------------------------------------------------------- -- Throughout its 18-year history, RSA Conference consistently attracts the world's best and brightest in the field, creating opportunities for Conference attendees to learn about information security's most important issues through interactions with peers, luminaries and emerging and established companies. http://p.sf.net/sfu/rsaconf-dev2dev _______________________________________________ Rails-devel mailing list Rai...@li... https://lists.sourceforge.net/lists/listinfo/rails-devel |
From: brett l. <wak...@gm...> - 2010-01-22 22:15:29
|
Ah. Yes. I saw your commit and just haven't had time to revert Freek's patch. I'll do that later tonight. ---Brett. On Fri, Jan 22, 2010 at 2:10 PM, Erik Vos <eri...@xs...> wrote: > On yes, Brett, are you going to revert the TileSet.xml changes? > These are unnecessary now that I have hardcoded processing the > unlimited tiles option, and the mismatch between my old > shorter versions and the longer versions in CVS > is greatly slowing down my synchronizations. > > Erik. > > -----Original Message----- > From: Erik Vos [mailto:eri...@xs...] > Sent: Friday 22 January 2010 23:08 > To: 'Development list for Rails: an 18xx game' > Subject: RE: [Rails-devel] Fixes > > No, not yet. I'm going to look at the Pullmanns > and perhaps do another thing or two. > > But I should remark that from now on I will likely have > a lot less time to work on Rails than in the past weeks. > When 1.1.3 is out it might well become a bit quiet here.... > > Erik. > > -----Original Message----- > From: brett lentz [mailto:wak...@gm...] > Sent: Friday 22 January 2010 22:59 > To: Development list for Rails: an 18xx game > Subject: Re: [Rails-devel] Fixes > > Should we ship out 1.1.3 this weekend, or would you like to do a few > more fixes first? > > ---Brett. > > > > On Fri, Jan 22, 2010 at 1:54 PM, Erik Vos <eri...@xs...> wrote: >> I have found and fixed two bugs that bear upon the recently found > problems: >> >> 1. On loading a game, the game options in GamesList.xml are not read. >> I had recently removed processing of the options that had been duplicated > in >> Game.xml, but that caused the default values not being known at a game >> reload. For most options that isn't fatal, but 18EU is the only game >> currently having numeric game options (i.e. the extra 3 and 4-trains). The >> result was that reloading 3- and 4-trains failed. I haven't exactly sorted >> out the mechanism, but it turned out that reverting the removal of > Game.xml >> option processing fixed the train-related problems (I also found the >> defaults were actually missing in Game.xml, so I suspect there must have >> been some problems all the time). >> >> 2. The StockRound had a while statement that should have been an if >> statement. That caused the looping that I and some other users have >> experienced. >> >> My problems are now gone, and also Jon's saved file loads fine, including >> the bought 8-train. >> I'd suggest people who run from the source base to update and recheck. >> >> Erik. >> >> >> > ---------------------------------------------------------------------------- > -- >> Throughout its 18-year history, RSA Conference consistently attracts the >> world's best and brightest in the field, creating opportunities for > Conference >> attendees to learn about information security's most important issues > through >> interactions with peers, luminaries and emerging and established > companies. >> http://p.sf.net/sfu/rsaconf-dev2dev >> _______________________________________________ >> Rails-devel mailing list >> Rai...@li... >> https://lists.sourceforge.net/lists/listinfo/rails-devel >> > > ---------------------------------------------------------------------------- > -- > Throughout its 18-year history, RSA Conference consistently attracts the > world's best and brightest in the field, creating opportunities for > Conference > attendees to learn about information security's most important issues > through > interactions with peers, luminaries and emerging and established companies. > http://p.sf.net/sfu/rsaconf-dev2dev > _______________________________________________ > Rails-devel mailing list > Rai...@li... > https://lists.sourceforge.net/lists/listinfo/rails-devel > > > ------------------------------------------------------------------------------ > Throughout its 18-year history, RSA Conference consistently attracts the > world's best and brightest in the field, creating opportunities for Conference > attendees to learn about information security's most important issues through > interactions with peers, luminaries and emerging and established companies. > http://p.sf.net/sfu/rsaconf-dev2dev > _______________________________________________ > Rails-devel mailing list > Rai...@li... > https://lists.sourceforge.net/lists/listinfo/rails-devel > |
From: Erik V. <eri...@xs...> - 2010-01-22 22:10:20
|
On yes, Brett, are you going to revert the TileSet.xml changes? These are unnecessary now that I have hardcoded processing the unlimited tiles option, and the mismatch between my old shorter versions and the longer versions in CVS is greatly slowing down my synchronizations. Erik. -----Original Message----- From: Erik Vos [mailto:eri...@xs...] Sent: Friday 22 January 2010 23:08 To: 'Development list for Rails: an 18xx game' Subject: RE: [Rails-devel] Fixes No, not yet. I'm going to look at the Pullmanns and perhaps do another thing or two. But I should remark that from now on I will likely have a lot less time to work on Rails than in the past weeks. When 1.1.3 is out it might well become a bit quiet here.... Erik. -----Original Message----- From: brett lentz [mailto:wak...@gm...] Sent: Friday 22 January 2010 22:59 To: Development list for Rails: an 18xx game Subject: Re: [Rails-devel] Fixes Should we ship out 1.1.3 this weekend, or would you like to do a few more fixes first? ---Brett. On Fri, Jan 22, 2010 at 1:54 PM, Erik Vos <eri...@xs...> wrote: > I have found and fixed two bugs that bear upon the recently found problems: > > 1. On loading a game, the game options in GamesList.xml are not read. > I had recently removed processing of the options that had been duplicated in > Game.xml, but that caused the default values not being known at a game > reload. For most options that isn't fatal, but 18EU is the only game > currently having numeric game options (i.e. the extra 3 and 4-trains). The > result was that reloading 3- and 4-trains failed. I haven't exactly sorted > out the mechanism, but it turned out that reverting the removal of Game.xml > option processing fixed the train-related problems (I also found the > defaults were actually missing in Game.xml, so I suspect there must have > been some problems all the time). > > 2. The StockRound had a while statement that should have been an if > statement. That caused the looping that I and some other users have > experienced. > > My problems are now gone, and also Jon's saved file loads fine, including > the bought 8-train. > I'd suggest people who run from the source base to update and recheck. > > Erik. > > > ---------------------------------------------------------------------------- -- > Throughout its 18-year history, RSA Conference consistently attracts the > world's best and brightest in the field, creating opportunities for Conference > attendees to learn about information security's most important issues through > interactions with peers, luminaries and emerging and established companies. > http://p.sf.net/sfu/rsaconf-dev2dev > _______________________________________________ > Rails-devel mailing list > Rai...@li... > https://lists.sourceforge.net/lists/listinfo/rails-devel > ---------------------------------------------------------------------------- -- Throughout its 18-year history, RSA Conference consistently attracts the world's best and brightest in the field, creating opportunities for Conference attendees to learn about information security's most important issues through interactions with peers, luminaries and emerging and established companies. http://p.sf.net/sfu/rsaconf-dev2dev _______________________________________________ Rails-devel mailing list Rai...@li... https://lists.sourceforge.net/lists/listinfo/rails-devel |
From: Freek D. <sf_...@ma...> - 2010-01-23 22:25:39
Attachments:
unlimitedtiles2.diff
|
Erik Vos <eri...@xs...> wrote: >> On yes, Brett, are you going to revert the TileSet.xml changes? Brett replied: > Ah. Yes. I saw your commit and just haven't had time to revert Freek's patch. > > I'll do that later tonight. One comment, you also reverted the option description in the XML files, so the option no longer shows up in the "New game" dialog. Attached is a patch with only these "GameOption" tags (not the unneeded tileset.xml changes). Could you commit this? Thanks, Freek |
From: brett l. <wak...@gm...> - 2010-01-23 23:04:08
|
On Sat, Jan 23, 2010 at 2:25 PM, Freek Dijkstra <sf_...@ma...> wrote: > Erik Vos <eri...@xs...> wrote: > >>> On yes, Brett, are you going to revert the TileSet.xml changes? > > Brett replied: > >> Ah. Yes. I saw your commit and just haven't had time to revert Freek's patch. >> >> I'll do that later tonight. > > One comment, you also reverted the option description in the XML files, > so the option no longer shows up in the "New game" dialog. > > Attached is a patch with only these "GameOption" tags (not the unneeded > tileset.xml changes). Could you commit this? > > Thanks, > Freek > Applied. |
From: Erik V. <eri...@xs...> - 2010-03-12 23:36:28
|
Two fixes: - 18AL tile #446 can only be laid on Birmingham. Montgomery is now excluded. (reported by Chris Shaffer) - 1856 share just bought cannot be sold in the same turn (for simplicity, implemented as: if a share was bought, at least one share must remain if shares of that company are sold later in that same turn). (reported several times, lastly by Aliza Panitz). Erik. |
From: Erik V. <eri...@xs...> - 2010-08-10 19:48:53
|
I have closed some open bug reports. 1835 allowed selling shares of unfloated companies and of those floated in the current SR. As the rules in fact can be interpreted as forbidding such sales if the company has not yet operated, I have used this existing configuration item rather than creating a new one. As the PR is exempt to the second part of this rule, I am now setting its 'operated' flag immediately after formation. I have also reclassified 1825 from "Experimental" to "Not yet playable" as I found a bug report that none of the 1825-specific features did work. That's true, because no effort has been put into that task yet, which means that the default rules (1830) apply. Apparently the old classification was too inviting to try it out. Erik. |
From: Phil D. <de...@gm...> - 2010-08-10 20:47:44
|
I've got some vague attempts at making 1825 working in my local files. You can run the initial distribution and the stock round starts off but it's far from operational yet (I'm slow and learning as I go :p) I didn't realise what you told me before when it was added into the gameslist...It's probably worth taking it out of the list for the time being since the only operational bit is the map itself and I (and anyone else who wants to work on it) can just use their own gameslist. Phil On 10 August 2010 20:48, Erik Vos <eri...@xs...> wrote: > I have closed some open bug reports. > > 1835 allowed selling shares of unfloated companies and of those floated in > the current SR. As the rules in fact can be interpreted as forbidding such > sales if the company has not yet operated, I have used this existing > configuration item rather than creating a new one. As the PR is exempt to > the second part of this rule, I am now setting its 'operated' flag > immediately after formation. > > I have also reclassified 1825 from "Experimental" to "Not yet playable" as I > found a bug report that none of the 1825-specific features did work. That's > true, because no effort has been put into that task yet, which means that > the default rules (1830) apply. Apparently the old classification was too > inviting to try it out. > > Erik. > > > ------------------------------------------------------------------------------ > This SF.net email is sponsored by > > Make an app they can't live without > Enter the BlackBerry Developer Challenge > http://p.sf.net/sfu/RIM-dev2dev > _______________________________________________ > Rails-devel mailing list > Rai...@li... > https://lists.sourceforge.net/lists/listinfo/rails-devel > |