Ashley A. Thomas 12 May 1995 One of the items in Ken Steven's wish list for pei is to add a 'multimove' tool to move items from one sector to multiple sectors. I'd like to suggest an even stronger command that could be a 'multimove' tool or a replacement for the current 'move' command in the server. Not only could it replace 'move', but also 'arm', 'fuel', 'lload', 'load', 'ltend', 'lunload', 'march', 'move', 'navigate', 'tend', 'transport', and 'unload' as well! (One of my long-term wishes is to reduce the number of empire commands to make empire more accessible to newbies.) The new 'move' command has a simple syntax making it as fast or faster to type a simple move than the old command: move 0,0 1m 1,1 instead of: move m 0,0 1 1,1 but the extensible syntax makes it more powerful for the knowledgable user. More info on the angle-bracketed syntaxes later, but briefly, a is a sector; a is a ship, plane, land unit, or nuke; a is a list of commodities and amounts of each (with some additional features described below); and an is a list of sectors and/or constructs. So here's the proposal: SYNTAX: move [WHO] [WHAT] [WHERE] or maybe more clearly: move WHO WHAT WHERE move WHAT WHERE move WHO WHERE move WHO WHAT WHO: the or which is responsible for the movement and uses up mob. If WHO is omitted then it is assumed to be the sector where the specified in WHERE is (like a 'fuel', 'lload', or 'load' command). WHAT: the or to be moved. If WHAT is omitted then WHO must be a and WHERE must be a (for a 'march' or 'nav' command) or a (like a 'arm', 'load', or 'lload' command). WHERE: the which is the destination of the move or a . If WHERE is omitted then it is assumed to be the where the specified in WHO is (like a 'lunload' or 'unload' command'). Some simple examples: 'move n24 p46' would 'arm' plane (missile) 46 with nuke 24. 'move 100p s24' would fuel ship 24 with 100 petrol (presumably its in a harbor). 'move 100f60s l22' would 'lload' 100 food and 60 shells onto land unit 22. 'move l10 100f60s l22' would 'ltend' the same from land unit 10. 'move l22 100f60s' would 'lunload' the same. 'move l16 yuh' would 'march' land unit 16 with the specified path. 'move 0,0 1c 1,1' would 'move' one civilian from 0,0 to 1,1. 'move 0,0 10f20u5m 1,1' would 'move' 10 food, 20 uws, and 5 mils to sector 1,1. 'move s2 16,8' would 'nav' ship 2 to 16,8. 'move s24 100f60s s25' would 'tend' the material from ship 24 to ship 25. 'move 2,4 n10 jjh' would have sector 2,4 'transport' nuke 10 on the specified path. [historically, 'transport' uses the src sector's mobility, but maybe we can make the new 'move' command smart enough to know that 'move n10 jjh' uses the start sector's mob and not the "nuke's mobility".] 'move s24 100f60s' would have ship 24 'unload' the material. For some examples with more uumph, I'm afraid you'll have to wade through the following syntactical definitions: SYNTACTICAL DEFINITIONS: : xloc yloc ...etc. : > < = # : ...etc. : e.g. xloc=3 civ>50 des#- : [&] e.g. xloc>-2&xloc<4&yloc=0 { might be used to select land units in start sectors } des=o&ocon<5 { select washed-up oil fields } : , : [:],[:] : [&] e.g. -2:4,0&-17,5&-24:6,-16:2 #3 -2:4,0 : [?] e.g. 0,0 0:2,0?des=c { all sectors, in realm 3 and the two start sectors, that are designated as cities } : s p l n : e.g. p17 s42 l999 n2 NOTE: this would be simpler if every construct got its own unique id (so if there was a ship 35 then there would never be a plane 35, land unit 35 or nuke 35) but this is another change to the server (but worthwhile? hard?). then a would just be a number. : { wings, fleets, armies } NOTE: again, instead of 'wing's, 'fleet's, and 'army's, we could just have 'group's which would be a shorthand for a . : [&] * e.g. p17&p23&p42 s* { _all_ ships } sA&pB { fleet A and wing B (I think it looks ugly too) } : [?] e.g. s*?xloc=3&yloc=5 { all ships in 3,5 } : > { move enough material to get the dest's amount up to the specified value } < { move enough material to get the src's amount down to the specified value } >! { move enough material to get the dest's amount to the specified value, even if we have to move a negative amount, ie. backwards } : [] e.g. 50m { move 50 mils } >50m { move enough to get the dest's mil up to 50, move none if already over 50 } <50m { move enough to reduce the src's mil down to 50, move none if src's mil is below 50 } >!50m { move enough to get the dest's mil up to or down to 50 } QUESTION: maybe we can have something like '<20>50m' which means try to get the dest's mil up to 50 but don't let the src's mil drop below 20; or '>50<20m' which means try to get the src's mil down to 20 but don't let the dest's mil get higher than 50; in either case, the first operator gets the veto. : [] e.g. 10c { move 10c } >!10m>!100u { moves mil and uws between dest and src to get the dest's vals to 10 and 100 } : : : [/] e.g. 0,0 p17/p23/p1&p2&p4?food>20&eff>90/p42 { the here applies only to p1, p2, and p4, and not to p17, p23, or p42 } #?ter=2/s*?ter=2/l*?ter=2 { all sectors in territory 2, all ships and land units in a sector in territory 2 } 50l/l50 { 50 lcms and land unit 50 } So, once again, briefly: SYNTAX: move [WHO] [WHAT] [WHERE] WHO: the or which is responsible for the movement and uses up mob. WHAT: the and/or to be moved. WHERE: the which is the destination of the move or a . Some more powerful examples: 'move 0,0 >10c #?des=+' would 'move' civilians from 0,0 to all the highways in realm 0 to get their civilians up to 10. 'move 0,0 >!10c #?des=+' would 'move' civilians from 0,0 to highways in realm 0, or from the highways in realm 0 to 0,0 to get the number of civilians in each highway in realm 0 to 10. 'move s14/s15/s16 4,6' would move all three ships to sector 4,6 (and if they don't make it this turn, set their autonav?). 'move s20 >100f s*?xloc=20&yloc=12' would 'tend' food from ship 20 to all ships in sector 20,12 to get their food up to 100. If we have the 'move' command ignore all ships which aren't in the same sector as the start ship then we could just type 'move s20 >100f s*' Assuming s1 is an oiler at 2,8 and s2 a cargo ship at a harbor at 2,2, then 'move s2 2,8; move s1 <0o s2; move s2 2,2' would be a simple script to have a ship move to the oiler, get all its oil and return. Maybe we could have the 'move' command recognize an impossible move like 'move s1 s2' and decide that means to move s1 to s2's sector (not load s1 onto s2) so the script would work even if the oiler moved. Or maybe that could be a new selector, like 'move s1 #?loc(s2)'. I think the first is easier, but not quite as strong. 'move >!100f l*' would 'lload' or 'lunload' food onto or off of _all_ land units from whatever sector they're in to get their food amounts to 100. I like this! :) Or similarly, 'move 2,2 >!100f #3' would do the same for realm 3. And I think the syntax is robust enough that people can think of their own uses. I think some improvements might be made in the selector values too (like 'coast=1', 'distfrom(-3,5)<7', 'distfrom(s25)<7', etc.).