New PBEM under construction From: jrevell572@aol.com (JRevell572) Date: Mon, 12 May 1997 00:00:00 +0000 This is the first draft of a set of rules that I'm writing for a computer moderated PBEM game. It's very much in the style of Rich Skrenta's Olympia but it is set in the future and I have expanded his orders system into a macro language for controlling robots and remote controlled spacecraft. I'm still in the early stages of coding this game, I hope to be up and running by September. However I would appreciate anyones comments, especially from volunteers to playtest the game. I shall be looking for about 40 playtesters for the prototype when it's ready, in the mean time I'd like about 10 volunteers to play in a manually moderated version so that I can test the games economic systems. I can be contacted at JRevell572@aol.com. Cheers, Jerry Revell ========================================================================== = The New Frontier, Prototype 1 Introduction The New Frontier will be a PBEM game simulating interstellar exploration and colonial development. It will be set in a future where the manned/unmanned space exploration debate has been won by the supporters of unmanned space flight. The discovery of wormholes in space has made interstellar spaceflight a reality. These wormholes, popularly known as stargates, can channel radio waves as well as provide short cuts to other star systems. UNSA (United Nations Space Agency) has used the stargates to explore the nearby star systems. They have also established a network of radio relay beacons at the entrance to these stargates so that the remote control of spacecraft and robots can be conducted from Earth. So now the race is on to exploit this new frontier. In order to stimulate competitive growth UNSA is now leasing channels on it's radio relay network to private companies. Each player represents one these companies. He or she starts with one government surplus exploration vessel and a million credits in cash. With these they can explore the new star systems, build colonies and industries, start up interstellar transport companies, and perhaps even establish a new empire that is strong enough to declare independence from Earth. Each player will be in control of a number of robots/remote controlled spacecraft. Each of these is controlled by programs written in a simple macro language. Up to twelve radio channels may be leased from UNSA allowing you to download programs and retrieve data from 12 robots each turn. Note this does not limit you to owning only twelve robots, you may have more but you can only update the programs of 12 of them each turn. If a robot's program is not updated it will continue executing it's current program. The deadline for each game turn's orders will be midnight on Friday, GMT. Initially all turn reports will be checked manually for bugs so game turn reports will not be published until the late afternoon of the following Sunday. As confidence in the game engine grows (and the bugs are eliminated) it is hoped this procedure will be speeded up. The ultimate aim is to have game reports published on the following Saturday morning. Orders Format begin <player id> [password] # # Corporate level instructions such as purchasing new robots, buying and selling # shares, borrowing money, leasing radio channels, submissons to the game # newpaper, declaration of hostile status towards other players and the setting # of production targets for your human populated colonies. # unit <unit id> # # Program macro instructions to be executed by the robot this turn. Note # the maximum number of lines of code allowed is set by the size of the robot's # memory (Class I robot brains can execute up to 20 lines of code) . If a program # is too large for the robot's memory it will not be downloaded and the robot will # not do anything this turn. # # # Plus code for other units, maximum number determined by the number of # channels that are leased. Excess unit instructions will be ignored. # end Corporate Instruction Set BUY <item> <qty> #purchase robots, ships, prefabricated buildings SELL <item> <qty> #sell robots, ships, resources to Earth Markets. BUY <player id> <qty> #buy qty shares in player id's company if available SELL <player id> <qty> #sell qty shares in player id's company. FLOAT <qty> #make <qty> of your shares available on the stock exchange BORROW <qty> #attempt to borrow <qty> credits REPAY <qty> #repay <qty> borrowed credits PAY <players id> <qty> #gives <qty> credits to <player id>, a means of paying for #services. LEASE <qty> #lease <qty> radio channels, up to a maximum of twelve PRESS #submit a press release to the NEW FRONTIER POST. ADVERTISE <player id> #send a message to be included in <player id>'s next game #turn report. Costs 100 credits per line. HOSTILE <player id> #declares all units of <player id> to be enemy targets, only #useful to robots with IFF (identify friend or foe) capability. FRIEND <player id> #declares all units of <player id> to be friendly targets, only #useful to robots with IFF (identify friend or foe) capability. NEUTRAL <player id> #cancels the HOSTILE and FRIEND commands. ASSIGN <facility> <arcology> #assigns the control of a facility to an arcology thus #relinquishing control from your robots to human workers. #the facility must be linked to the arcology by either road #or monorail. PRODUCE <facility> <qty> #sets production targets for your facilities that are under #human control. EMAIL <email address> #reset player's e-mail address for future game turn reports Robot Instruction Set Line Labels - each line of macro code can start with up to five alphanumeric characters followed by a colon. This will be recognised as a line label as long as it does not match a valid instruction. Line labels serve as targets for program branches. Comments - all text after a # symbol is treated as a comment and is not executed ATTACK #attack current target . BOARD <unit id> #board <unit id> if possible DISEMBARK <unit id> #disemberk <unit id> if possible BUILD <facility> #build <facility> if resources available COLLECT <resource> #collect resource, may require that certain facilities #are available such as a mine or well REFINE <resource> #refine a <resource> such as metallic ore into another form, #requires the appropriate facility such as a smelter MAKE <item> #manufacture <item> at the appropriate facility SCAN #scan the area for resources and targets (robots only) SCAN <sector> #scan a planetary sector for resources (ships in parking #orbit only) ACCEPT <item> <unit id> #accept item from another companies' robot/ship GIVE <item> <unit id> #give item to another robot/ship MOVE <location> [mode] #move towards location, mode is dependent on unit type MOVE <objective> [mode] #move towards objective MOVE <direction> [mode] #move in a given direction #note all moves are made one 'address' at a time, if a #location is six 'addresses' away then the MOVE command #must execute six times to get there. NAME <new name> #rename the unit REPAIR <enitity> #repair the entity, either a unit or a facility STOP #halt execution of the program UNLOAD <resource> <qty> #unload the <qty> of the resource at the current location #when used on Earth the items are transferred to your #companies warehouse, from there it can be sold using #the corporate instruction SELL. ENTER <facility> #enter the facility SET TARGET <entity> #set robots target to be <entity> SET COUNTER <number> #sets the counter to the given number COUNT UP #increment counter by one COUNT DOWN #decrement conter by one SELECT TARGET #selects a target from the list of targets seen in most recent #SCAN, starting with the first and stepping through the list #with each use of SELECT TARGET SET OBJECTIVE <location> #set objective to a location SELF DESTRUCT #overload the power cells and blow up possibly damaging #other units and facilities in this location. REFUEL #a ship may refuel when in parking orbit with a space station #or in the parking orbit of a gas giant. RECHARGE #robots can recharge their fuel cells at power plants or from #starship engines. Branch instructions (for Robots and Ships) All these branch instructions have the general syntax QUESTION <branch-yes> <branch-no> AT OBJECTIVE? #have we got to where we are going? TARGET DESTROYED? #are they dead yet? TARGET ENEMY? #are they identifiable as an enemy? TARGET FRIEND? #are they identifiable as a friend? TARGET UNKNOWN? #are they unidentifiable? TARGET HOSTILE? #have they shot at us? TARGET A ROBOT? #are they a robot? LAST TARGET SELECTED? #have we looked at all possible targets? SUSTAINED DAMAGE? #have we been hit? SCANNERS OPERATIONAL? #can we still see? WEAPON OPERATIONAL? #can we still kill them? LOCOMOTION OPERATIONAL? #are we still mobile? RANDOM? #take a randomly selected program branch, useful #for writing 'evasion' routines The following branch instructions have a different syntax. COUNTER? <value> <branch yes> <branch no> #test to see if counter is at a #particular value. TARGET? <entity> <branch yes> <branch no> #test to see if target is a particular #unit or facility, useful for taking out #specific targets TARGET TYPE? <type> <branch yes> <branch no> #test to see if target is a particular #type of unit or facility, useful for #taking out priority targets. RESOURCE? <resource> <branch yes> <branch no> #have we found the given resource #in this location Branches are either to a line label or the NEXT line. Sample Progams A march to an objective SET OBJECTIVE 19.09 #Set objective to column 19 row 9 a: MOVE OBJECTIVE #move one square towards objective AT OBJECTIVE? NEXT a: #have we arrived at the objective STOP #stop and wait for the next instructions A belligerent march to an objective SET OBJECTIVE 19.09 #Set objective to column 19 row 9 a: MOVE OBJECTIVE #move one square towards objective SCAN #scan for resources and targets b: SELECT TARGET #select a target TARGET FRIEND? e: c: #are they a friend e: LAST TARGET SELECTED? NEXT b: #have we looked at all targets AT OBJECTIVE? NEXT a: #have we arrived at the objective STOP #stop and wait for the next instructions c: ATTACK #attack them! SUSTAINED DAMAGE? d: NEXT #are we damaged? TARGET DESTROYED? e: c: #are they dead yet? d: SCANNERS OPERATIONAL? NEXT f: #can we still see? WEAPON OPERATIONAL? NEXT f: #can we still shoot? LOCOMOTION OPERATIONAL? c: NEXT #are we stuck? SELF DESTRUCT #let's try and take them with us! f: MOVE OBJECTIVE #we've been hit so let's run away! AT OBJECTIVE? NEXT f: #are we there yet STOP #stop and wait for new instructions There is a deliberate flaw in the logic of this program, I leave it to the reader to figure out where it is. Stellar Mapping All stellar and planetary bodies have an address in the following format: SS.[PO].[MO] Where SS is the stellar system PO is the planetary orbit MO is the moons orbit Normally there is only one body per orbit, the exception are asteroids where there may be numerous bodies per orbit and Stargates which usually exist at the trojan points of the innermost planetary orbits. Hence the address for Earth is 01.03. For Deimos, a moon of Mars the address is 01.04.01. In addition to the orbits numbered 01, 02 etc each body has a near orbit, sometimes called the parking orbit which is always designated 00. Orbital space stations are usually built in such orbits. Stargates exist at the leading and trailing trojan points of the inner planets of a system. Their address is denoted by a + sign for leading trojan points and a - sign for trailing, appended to the end of the address. Hence the stargate at Earths leading trojan point has the address 01.03+. Asteroid addresses will have an additional number added to their address in the format aNN. Hence the address for Juno, and asteroid in our own star system would be 01.05.a03 Most of these addresses will have convenient aliases to make them easier to refer to. 'Earth' is an alias for 01.03, 'moon' is an alias for 01.03.01, 'gagarin' is an alias for 01.03.00 a space station in orbit around the earth and 'armstrong' is an alias for 01.03.01.00 a space station in orbit around the moon. These aliases can be combined with partial address strings to form complete addresses. For instance earth.01.00, moon.00 and armstrong are all equivalent to each other. These addresses are used as the locations in the movement orders for starships. For instance to move to the mars parking orbit set your course to mars.00. To move to a planetside location you must also specifiy the planet's surface address. Planetary Mapping Each planet or asteroid on which you may land has a size characteristic which runs from 1 to 9. Planets have a surface area defined by a number of sectors equal to their size, each sector consists of 20 by 20 locations. Asteroids have but a single sector consisting of (2*size) by (2*size) locations. The full address of a planetside location is in the form sN.CC.RR Where N is the sector number, CC is the column, and RR is the row. Hence the address for a location in sector 2 might be: s2.05.06 This address can be combined with the planets address to give a full location address, ie. 01.04.s3.06.19 (or mars.s3.06.19) Note for movement between locations within the same sector only the column and row need be specified. To move between sectors then the sector number must be added. To land a ship on a surface location the full address must be stated. Facilities Mine Well Atmospheric Filter Plant Refinery Solar Power Plant Geothermal Power Plant Hydroelectric Power Plant Nuclear Power Plant Fusion Power Plant Hydroponic Farm Oxygen Production Plant Water Production Plant Factory Arcology Starport Road Monorail Missile Silo Barracks Resources Silicates Phosphates Nitrates Base Metals Precious Metals Halogens Radioactives Exotic Materials Units Columbus Class Exploration Scout Endurance 24 months Cargo Capacity 2000 tons Acceleration 2G max Armament Dual pulse lasers Brain Class 1 (20 lines of code) Cost CR 500,000 Able Jack Multipurpose Droid Endurance 12 months Cargo Capacity 100 tons Locomotion Tracked Armament 1 mining laser. Brain Class 1 (20 lines of code) Cost CR 50,000 These will be the only two vehicles available in the first prototype, a much larger selection will be available in the second prototype. Up