Re: [Widelands-public] Transport Control
Status: Beta
Brought to you by:
sirver
From: Brendan J. <bl...@bl...> - 2003-11-16 14:13:25
|
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <meta http-equiv="Content-Type" content="text/html;charset=ISO-8859-1"> <title></title> </head> <body text="#000000" bgcolor="#ffffff"> Nicolai Haehnle wrote:<br> <blockquote type="cite" cite="mid...@gm..."> <pre wrap="">-----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 Hi, On Sunday 16 November 2003 13:35, Brendan Jurd wrote: </pre> <blockquote type="cite"> <pre wrap="">I have thought a lot about how Settlers 2 could be improved upon without disrupting the essence of the game. Right up the top of my wishlist is allowing the player to exert greater control over the transport system and unit behaviour. I don't think the player should be forced to micromanage the transportation system - most of the time the system works itself out just fine. But every now and then (and it happens more frequently as your tribe's territory expands) a terribly inefficient situation will arise and I just wish I could somehow tell the game to organise things slightly differently. The most common example is when a building needs something from a long way off. While the goods are still in transit, those same goods become available in the immediate vicinity of the building that needs them. The solution seems obvious to the player - cancel the order for the distant goods, and bring in the nearby ones. But the transport algorithms don't see things that way, and the remote goods continue to make their ponderous way to the building while the nearby handy goods get sent off to storage. </pre> </blockquote> <pre wrap=""><!----> Yeah. The transport system is very bureaucratic, isn't it ;) </pre> <blockquote type="cite"> <pre wrap="">Trying to resolve this programmatically would be very messy. You would need to have a script running which *constantly* re-evaluates all the current transport requests to determine whether they can be fulfilled more efficiently. Why not just let the player deliberately trigger a re-evaluation when he sees the situation arise? </pre> </blockquote> <pre wrap=""><!----> This is an interesting idea, though it should be possible to do a re-evaluation of just - - one type of ware - - one building's request queue - - one item that is currently in transit? </pre> </blockquote> Oh yeah, absolutely. I didn't mean the user would trigger a global re-evaluation. I was thinking more like<br> - click on the building, brings up the usual building info window<br> - click the Requests button, brings up the requests for that building<br> - force the particular request to refresh<br> <br> <br> <blockquote type="cite" cite="mid...@gm..."> <pre wrap=""></pre> <blockquote type="cite"> <pre wrap="">Now you might argue that that kind of thing is part of the game's challenge -- that a well designed transport network will prevent those situations from occuring at all. Reduce, yes. Prevent, no. No matter how good your networks are, sometimes you, the player, can see a better way of getting something done than the engine can. Why shouldn't you be allowed to intervene? The intervention capabilities would not be necessary to play the game -- if you like you can just let the transportation system run on autopilot and never give it another thought. But IMO the options should be there for those of us who like to micromanage somewhat. I'd like the player to be able to view and manipulate the request queues, and to alter the destination of goods in transit. I'd like the player to be able to click on a building and designate which storehouse that building's output goods get sent to. To manually redirect a fixed quantity of goods from one storehouse to another. ("I know there is going to be a lot of construction in that remote area soon - so I'll send 20 planks and 20 stone out to that storehouse from the HQ pre-emptively" -- you know you want to!). The "stop storage" and "take out of storage" functions in the storehouses in S2 go some way towards addressing this, but don't nearly go far enough. Rather than spending much of your time sitting back and waiting for things to happen, you can use that time to pro-actively assist your settlement's growth. </pre> </blockquote> <pre wrap=""><!----> I thought about a system where every warehouse is assigned a priority for every type of ware. The default priority is 1, but the player is able to change this priority somehow. Higher priority means that the transport system tries to put more wares of this type into the warehoue. Basically, the system would attempt to lazily balance the storage of items such that Number of items in storage = (Priority of warehouse / Sum of all warehouses' priorities) * Total number of items available Warehouse may automatically decide to move wares around (provided there are enough!) to improve this balance. </pre> </blockquote> I like it! By default all warehouses "want" an equal share in the wares. The default is 1, 0 means you don't want to store the goods at all. I am slightly concerned that allowing warehouses to automatically dispatch goods between them would generate too much clog, but I'm sure you could develop a means of limiting the requests to situations when the imbalance is sufficiently severe.<br> <br> The warehouse should probably include items that are in transit to the warehouse as part of the current item count for the purposes of priority balance.<br> <br> There should probably be an in-game option somewhere to disable automatic balancing of goods between warehouses. It never hurts to let the user decide whether a feature like that is desirable.<br> <br> <blockquote type="cite" cite="mid...@gm..."> <pre wrap="">It might be possible to introduce dynamic priorities. Whenever a building requires some type of ware, the dynamic priority for this ware is increased in nearby warehouse(s). </pre> </blockquote> Even better. There's no use sharing out coal evenly amongst the warehouses if all the metals industry buildings are clustered around one warehouse. And you'd obviously want the warehouse(s) closest to the Mint(s) to contain the entire surplus of gold ore. Good thinking. Although we'd need to somehow indicate the effects of dynamic prioritisation to the user. And again, offer an in-game option to disable it.<br> <br> It could be tricky figuring out how designated priority and dynamic priority interact. It may be more appropriate to make the default value of the designated priority null, in which case the dynamic priority is used. If the user overwrites that with an actual value, then the user's value takes precedence. Using this model you'd need a way to set it back to null too.<br> <br> <blockquote type="cite" cite="mid...@gm..."> <pre wrap="">Finally, it should be possible for a warehouse to request a fixed number of items of a given type, like you said. These requests would obviously override any kind of balancing caused by priorities. This kind of flexibility is necessary to manage huge empires. Now we only need to a) implement it and b) provide a clean interface for it. Now, some random ideas about what such an interface could look like. First of all, all information relating to this micro-management stuff must be available when looking at the default warehouse window. The current priority for a ware could be color-coded, or represented by some kind of bar. Numbers are a possibility, too, but that'd probably look messy. Manual override requests for wares should probably be displayed as a number, e.g. a red "+20", if 20 items are requested. </pre> </blockquote> I'd probably go with a colour coded display. A little coloured circle in the corner of the ware's box, that kind of thing. Agree that numbers would look messy, although it may be helpful to provide those kinds of statistics on a secondary screen. Or even allow the user to toggle "show priority %" on the main window. You may be detecting a pattern in my interface design suggestions -- when in doubt, give the user the option! You would need to visually represent whether the priority value has been user designated, or established dynamically.<br> <br> <blockquote type="cite" cite="mid...@gm..."> <pre wrap="">The user can choose between either "Change Priority" or "Change Requests", just like she can choose between "stop storage" or "take out of storage" in S2. In Change Priority mode, clicking a ware will raise its priority, while shift+clicking it will lower its priority (similar to raise/lower terrain in th editor), same for Change Requests. What do you think? </pre> </blockquote> I think that sounds good for the Change Priority action, but I'm not sure about the Requests. It would involve a lot of repetitive clicking when requesting large quantities. Perhaps a secondary warehouse window for requests (analogous with the Requests window for any other building) where you can cancel, refresh or change the quantity of individual requests, and add new ones by selecting a ware and typing the number in.<br> <br> Requests should show the ware, quantity requested / in transit / arrived (progress bar would be cool here) and if we're feeling really fiesty, a button to bring up a mini-map that shows the incoming wares as moving blips on the road network, with the current building centred.<br> <br> I would have no problem with somehow showing the total requested quantities on the main warehouse screen, but I think manipulation of requests is sufficiently complex to warrant its own interface. That said, it might be more expedient to simply do both.<br> <br> I realise I'm requesting a lot of additional features here, but I'm also prepared to code them in myself, so I figure I've got balanced karma =)<br> <br> BJ<br> </body> </html> |