home *** CD-ROM | disk | FTP | other *** search
/ 300 Favorite Games / 300GAMES.iso / 204 / manual.txt < prev    next >
Text File  |  1995-08-14  |  68KB  |  1,547 lines

  1.  
  2.         »»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
  3.                         ROBOT BATTLE REFERENCE MANUAL                 
  4.                                                                     
  5.                     Thank you for playing robot battle!               
  6.                                                                         
  7.                COPYRIGHT (C) 1995 BRAD SCHICK ALL RIGHTS RESERVED     
  8.         ______________________________________________________________
  9.  
  10.  
  11. This reference manual is provided so robot battle information may be printed
  12. as a whole. All of this information, and more, is included in on-line help.
  13. The on-line help is much more convenient for quick references. It provides
  14. searchable keywords, cross references, and is printable topic by topic.
  15.  
  16. The contents of this file have been reduced from previous versions. This 
  17. is partially to conserve space and partially to preserve my sanity. This 
  18. file now provides a printable version of all robot commands, special 
  19. sections, operators, and variables. All other information about Robot
  20. Battle can be easily found in the on-line help.
  21.  
  22.  
  23. Table of Contents
  24. »»»»»»»»»»»»»»»»»
  25.         Chapter 1.0             Scripting Language Functions
  26.         Chapter 2.0             Special Sections
  27.         Chapter 3.0             Math Operators
  28.         Chapter 4.0             Logical Operators 
  29.         Chapter 5.0             Robot Variables
  30.  
  31.  
  32.  
  33. »»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
  34.                                 Chapter 1.0
  35.  
  36.                         Scripting Language Functions
  37. ______________________________________________________________________________
  38.  
  39.  
  40. These functions make up the robot scripting language. They are used to tell 
  41. a robot what it should do.  Parameters are the values that are passed into a 
  42. function.  Different functions take different numbers of parameters. No robot
  43. functions return values.  The functions below are grouped roughly by the 
  44. services they provide. Remember, capitalization is used for clarity only, 
  45. Robot Battle does not recognized capitalization.
  46.  
  47.  
  48. Function Summary
  49. »»»»»»»»»»»»»»»»
  50. =                  Assigns a value to a user defined variable
  51. Abs                Calculates an absolute value
  52. Ahead              Moves the robot ahead
  53. AscanEvents        Turns on or off auto scanning events
  54. Back               Moves the robot back
  55. Blocking           Turns command blocking on or off
  56. BodyLeft           Turns the robot to the left
  57. BodyRight          Turns the robot to the right
  58. CldCookieEvents    Turns on or off cookie collision events
  59. CldMineEvents      Turns on or off mine collision events
  60. CldMissileEvents   Turns on or off missile collision events
  61. CldRobotEvents     Turns on or off robot collision events
  62. Continue           Continues previously aborted movement
  63. CoreEvents         Turns on or off core events
  64. CustomEvents       Turns on or off custom events
  65. DtcCookieEvents    Turns on or off cookie detection events
  66. DtcMineEvents      Turns on or off mine detection events
  67. DtcRobotEvents     Turns on or off robot detection events
  68. Else               Evaluated when previous the If() or ElseIf() is false
  69. ElseIf             Evaluated when previous the If() is false
  70. Endif              Marks the end of a logical the If() block
  71. Fire               Fires an energy missile
  72. GetHitsOther       Determines the number of times the robot has hit another robot
  73. GetHitsSelf        Determines the number of times the robot has been hit by energy missiles
  74. GetHitStr          Determines the average damage done by the robot's missiles
  75. GetOthers          Counts the number of other robots left in a game
  76. GetRandom          Generates a random number
  77. GetShots           Determines the number of energy missiles fired by the robot
  78. GetTurns           Determines the number of turns the robot has had
  79. Gosub              Causes execution to continue in another section
  80. GunLeft            Turns the robots gun to the left
  81. GunRight           Turns the robots gun to the right
  82. If                 Starts a logical If block
  83. LockAll            Turns rotation locking on for all robot components
  84. LockGun            Turns rotation locking on for the robot's gun and radar
  85. Name               Sets the robot's name
  86. Max                Determines the smaller of two values
  87. Min                Determines the larger of two values
  88. Print              Adds a string to the output display window
  89. Print              Adds a variable to the output display window
  90. RadarLeft          Turns the robot's radar to the left
  91. RadarRight         Turns the robot's radar to the right
  92. RegAscan           Registers an event handler for auto scanning
  93. RegCldCookie       Registers an event handler for collision with energy cookies
  94. RegCldMine         Registers an event handler for collision with energy mines
  95. RegCldMissile      Registers an event handler for collision with energy missiles
  96. RegCldRobot        Registers an event handler for collision with other robots
  97. RegCore            Registers an event handler for the robot's core behavior
  98. RegCustom          Registers an event handler for custom defined events
  99. RegDtcCookie       Registers an event handler for detection of energy cookies
  100. RegDtcMine         Registers an event handler for detection of energy mines
  101. RegDtcRobot        Registers an event handler for detection of other robots
  102. Return             Causes current section to end at the current line
  103. Round              Rounds the specified value
  104. Scan               Sends out a radar ping to search for other objects
  105. SetAccel           Sent the robots lateral acceleration
  106. Stall              Causes robot to freeze
  107. Stop               Causes robot to abort further movement
  108. Store              Stores values for retrieval in later games
  109. SyncAll            Aligns the robot's body and gun to its radar
  110. SyncGun            Aligns the robot's gun to its radar
  111. Truncate           Truncates the specified value
  112. WaitFor            Creates a user defined block
  113.  
  114.  
  115. ** Parameters marked with two stars may be any valid expression. Expressions 
  116.    are composed of variables, numeric values, math operators, and logical 
  117.    operators.
  118.  
  119.  
  120. Function Details
  121. »»»»»»»»»»»»»»»»
  122.  
  123. lvalue = rvalue
  124.  
  125.      lvalue    - User declared variable
  126.      rvalue    - Numerical value to be copied **
  127.      
  128.      
  129.      The assignment command does not follow the standard Robot Battle 
  130.      command syntax. The non-standard format is more natural and 
  131.      matches the syntax of other computer languages.
  132.      
  133.      The assignment command copies a value into a user defined 
  134.      variable. This is the only way to change the value of a user variable. 
  135.      Variables are automatically defined by placing them on the left side 
  136.      of the assignment command. All variables have an initial value of 
  137.      zero until explicitly assigned a different value.
  138.      
  139.  
  140. RegCore( section )
  141.  
  142.      section   - Name of a section in the robot script
  143.      
  144.      Registers an event handler for the robot's core behavior.  Core 
  145.      events occur when no other events are happening.  In other words, 
  146.      this section is called repeatedly until the robot dies.  The core 
  147.      section may be re-registered at any time during a game to change 
  148.      the robot's core behavior.  All other registered events have higher 
  149.      priorities that the core event. 
  150.      
  151.      Note: When an event handler is registered or re-registered, it 
  152.      becomes immediately active. Use the CoreEvents command to 
  153.      deactivate the event handler.
  154.      
  155.  
  156. RegAscan( section, priority )
  157.  
  158.      section   - Name of a section in the robot script
  159.      priority  - Importance of event relative to others 
  160.                  (lower numbers have higher priority)**
  161.      
  162.      Registers an event handler for auto scanning.  Auto scanning events 
  163.      occurs only when a robot is moving.  Auto scanning provides robots 
  164.      an opportunity to continue searching for other objects while moving.  
  165.      When an auto scan event handler is registered, it will be called 
  166.      repeatedly while the robot is moving and no higher priority events 
  167.      are occurring. The priority value should be a whole number, 
  168.      decimals will be dropped.  If two events registered with the same 
  169.      priority occur at the same time, it is unspecified which event handler 
  170.      will be called. This applies to lateral movement only, not rotation.  
  171.      Both the Ahead and Back functions have no meaning in a section 
  172.      handling auto scan events.  
  173.      
  174.      Auto scan events are triggered by the moving variable. This variable 
  175.      is always true while a robot is moving laterally and false while it is 
  176.      stationary or only rotating.
  177.      
  178.      Note: When an event handler is registered or re-registered, it 
  179.      becomes immediately active. Use the AscanEvents command to 
  180.      deactivate the event handler.
  181.      
  182.  
  183. RegCldRobot( section, priority )
  184.  
  185.      section   - Name of a section in the robot script
  186.      priority  - Importance of event relative to others 
  187.                  (lower numbers have higher priority) **
  188.      
  189.      Registers an event handler for collisions with other robots.  The 
  190.      section specified above will be called whenever the robot runs into 
  191.      another robot and no other higher priority events are occurring. The 
  192.      priority value should be a whole number, decimals will be dropped.  
  193.      If two events registered with the same priority occur at the same 
  194.      time, it is unspecified which event handler will be called. Hitting 
  195.      another robot will result in an energy loss of 1 point to each robot.
  196.      
  197.      Robot collision events are triggered by the cldrobot variable.  When 
  198.      a robot collision event handler returns, the cldrobot variable is 
  199.      automatically set to false causing the event to end.
  200.      
  201.      Note: When an event handler is registered or re-registered, it 
  202.      becomes immediately active. Use the CldRobotEvents command to 
  203.      deactivate the event handler.
  204.      
  205.  
  206. RegCldMissile( section, priority )
  207.  
  208.      section   - Name of a section in the robot script
  209.      priority  - Importance of event relative to others 
  210.                  (lower numbers have higher priority) **
  211.      
  212.      Registers an event handler for collisions with energy missiles fired 
  213.      by other robots.  The section specified above will be called 
  214.      whenever the robot is hit by an energy missile and no other higher 
  215.      priority events are occurring. The priority value should be a whole 
  216.      number, decimals will be dropped.  If two events registered with the 
  217.      same priority occur at the same time, it is unspecified which event 
  218.      handler will be called. The amount of damage done by an energy 
  219.      missile depends upon both the amount of energy put into it and the 
  220.      distance it has traveled.
  221.      
  222.      Missile collision events are triggered by the cldmissile variable. 
  223.      When a missile collision event handler returns, the cldmissile 
  224.      variable is automatically set to false causing the event to end.
  225.      
  226.      Note: When an event handler is registered or re-registered, it 
  227.      becomes immediately active. Use the CldMissileEvents command to 
  228.      deactivate the event handler.
  229.  
  230.  
  231. RegCldCookie( section, priority )
  232.  
  233.      section   - Name of a section in the robot script
  234.      priority  - Importance of event relative to others 
  235.                  (lower numbers have higher priority) **
  236.      
  237.      Registers an event handler for collisions with energy cookies.  The 
  238.      section specified above will be called whenever the robot runs into 
  239.      an energy cookie and no other higher priority events are occurring. 
  240.      The priority value should be a whole number, decimals will be 
  241.      dropped.  If two events registered with the same priority occur at the 
  242.      same time, it is unspecified which event handler will be called.  
  243.      Hitting an energy cookie will result in an energy gain of 20 point.
  244.      
  245.      Cookie collision events are triggered by the cldcookie variable.  
  246.      When a cookie collision event handler returns, the cldcookie 
  247.      variable is automatically set to false causing the event to end.
  248.      
  249.      Note: When an event handler is registered or re-registered, it 
  250.      becomes immediately active. Use the CldCookieEvents command 
  251.      to deactivate the event handler.
  252.      
  253.  
  254. RegCldMine( section, priority )
  255.  
  256.      section   - Name of a section in the robot script
  257.      priority  - Importance of event relative to others 
  258.                  (lower numbers have higher priority) **
  259.      
  260.      Registers an event handler for collisions with energy mines.  The 
  261.      section specified above will be called whenever the robot runs into 
  262.      an energy mine and no other higher priority events are occurring. 
  263.      The priority value should be a whole number, decimals will be 
  264.      dropped.  If two events registered with the same priority occur at the 
  265.      same time, it is unspecified which event handler will be called. 
  266.      Hitting an energy mine will result in an energy loss of 20 point.
  267.      
  268.      Mine collision events are triggered by the cldmine variable.  When a 
  269.      mine collision event handler returns, the cldmine variable is 
  270.      automatically set to false causing the event to end.
  271.      
  272.      Note: When an event handler is registered or re-registered, it 
  273.      becomes immediately active. Use the CldMineEvents command to 
  274.      deactivate the event handler.
  275.      
  276.  
  277. RegDtcRobot( section, priority )
  278.  
  279.      section   - Name of a section in the robot script
  280.      priority  - Importance of event relative to others 
  281.                  (lower numbers have higher priority) **
  282.      
  283.      Registers an event handler for detection of another robot.  The 
  284.      section specified above will be called whenever another robot is 
  285.      detected by a call to Scan and no other higher priority events are 
  286.      occurring. The priority value should be a whole number, decimals 
  287.      will be dropped. If two events registered with the same priority occur 
  288.      at the same time, it is unspecified which event handler will be called.
  289.      
  290.      Robot detection events are triggered by the dtcrobot variable.  When 
  291.      a robot detection event handler returns, the dtcrobot variable is 
  292.      automatically decremented by one potentially causing the event to 
  293.      end.
  294.      
  295.      Note: When an event handler is registered or re-registered, it 
  296.      becomes immediately active. Use the DtcRobotEvents command to 
  297.      deactivate the event handler.
  298.      
  299.      
  300. RegDtcCookie( section, priority )
  301.  
  302.      section   - Name of a section in the robot script
  303.      priority  - Importance of event relative to others 
  304.                  (lower numbers have higher priority) **
  305.      
  306.      Registers an event handler for detection of energy cookies.  The 
  307.      section specified above will be called whenever an energy cookie is 
  308.      detected by a call to Scan and no other higher priority events are 
  309.      occurring. The priority value should be a whole number, decimals 
  310.      will be dropped. If two events registered with the same priority occur 
  311.      at the same time, it is unspecified which event handler will be called.
  312.      
  313.      Cookie detection events are triggered by the dtccookie variable.  
  314.      When a cookie detection event handler returns, the dtccookie 
  315.      variable is automatically decremented by one potentially causing the 
  316.      event to end.
  317.      
  318.      Note: When an event handler is registered or re-registered, it 
  319.      becomes immediately active. Use the DtcCookieEvents command 
  320.      to deactivate the event handler.
  321.      
  322.      
  323. RegDtcMine( section, priority )
  324.  
  325.      section   - Name of a section in the robot script
  326.      priority  - Importance of event relative to others 
  327.                  (lower numbers have higher priority) **
  328.      
  329.      Registers an event handler for detection of energy mines.  The 
  330.      section specified above will be called whenever an energy mine is 
  331.      detected by a call to Scan and no other higher priority events are 
  332.      occurring. The priority value should be a whole number, decimals 
  333.      will be dropped. If two events registered with the same priority occur 
  334.      at the same time, it is unspecified which event handler will be called.
  335.      
  336.      Mine detection events are triggered by the dtcmine variable.  When 
  337.      a mine detection event handler returns, the dtcmine variable is 
  338.      automatically decremented by one potentially causing the event to 
  339.      end.
  340.      
  341.      Note: When an event handler is registered or re-registered, it 
  342.      becomes immediately active. Use the DtcMineEvents command to 
  343.      deactivate the event handler.
  344.      
  345.  
  346. RegCustom( section, priority, expression )
  347.  
  348.      section    - Name of a section in the robot script
  349.      priority   - Importance of event relative to others 
  350.                   (lower numbers have higher priority) **
  351.      expression - Expression that evaluates to True (non-zero) 
  352.                   or False (zero) **
  353.      
  354.      Registers an event handler for a custom defined event.  The custom 
  355.      event occurs whenever the provided expression evaluates to true 
  356.      and no other higher priority events are occurring.  The expression 
  357.      may be composed of any legal variables, math operators, or logical 
  358.      statements.  Any expression that is legal inside an If statement may 
  359.      also be used as a custom event. The priority value should be a 
  360.      whole number, decimals will be dropped.  If two events registered 
  361.      with the same priority occur at the same time, it is unspecified which 
  362.      event handler will be called.
  363.      
  364.      Each section may only have one custom event attached to it.  There 
  365.      may be any combination of standard events, but only one custom 
  366.      event per section.  When two custom events need to use the same 
  367.      section, the events may be combined into one with an OR 
  368.      statement.  Alternatively, two small helper sections could be created 
  369.      that both use Gosub calls to share the same logic.  When multiple 
  370.      custom events are registered to one section, only the last one will 
  371.      apply.
  372.      
  373.      Unlike "standard" events, custom events are not ended 
  374.      automatically.  For example, when a section registered to handle 
  375.      collision events returns, the collision variable is reset to false ending 
  376.      the event.  When a custom event handler returns, is has no effect 
  377.      on the state of the custom event.  If events are not ended somehow, 
  378.      the handler section will execute continuously.
  379.      
  380.      Note: When an event handler is registered or re-registered, it 
  381.      becomes immediately active. Use the CustomEvents command to 
  382.      deactivate the event handler.
  383.      
  384.  
  385. CoreEvents( bool )
  386.  
  387.      bool - True (non-zero) or False (zero) value **
  388.      
  389.      Used to either turn on or off handling of core events (core events 
  390.      occur when no other events are occurring).  This function does not 
  391.      effect which section handles core events, only whether the events 
  392.      are handled or ignored.  The event handler section may be changed 
  393.      by another call to RegCore.
  394.      
  395.  
  396. AscanEvents( bool )
  397.  
  398.      bool - True (non-zero) or False (zero) value **
  399.      
  400.      Used to either turn on or off handling of auto scan events.  This 
  401.      function does not effect which section handles auto scan events, 
  402.      only whether the events are handled or ignored.  The event handler 
  403.      section may be changed by another call to RegAscan.
  404.      
  405.      
  406. CldRobotEvents( bool )
  407.  
  408.      bool - True (non-zero) or False (zero) value **
  409.      
  410.      Used to either turn on or off handling of robot collision events.  This 
  411.      function does not effect which section handles robot collision events, 
  412.      only whether the events are handled or ignored.  The event handler 
  413.      section may be changed by another call to RegCldRobot.
  414.      
  415.      
  416. CldMissileEvents( bool )
  417.  
  418.      bool - True (non-zero) or False (zero) value **
  419.      
  420.      Used to either turn on or off handling of missile collision events.  
  421.      This function does not effect which section handles missile collision 
  422.      events, only whether the events are handled or ignored.  The event 
  423.      handler section may be changed by another call to RegCldMissile.
  424.      
  425.      
  426. CldCookieEvents( bool )
  427.  
  428.      bool - True (non-zero) or False (zero) value **
  429.      
  430.      Used to either turn on or off handling of energy cookie collision 
  431.      events.  This function does not effect which section handles cookie 
  432.      collision events, only whether the events are handled or ignored.  
  433.      The event handler section may be changed by another call to 
  434.      RegCldCookie.
  435.      
  436.      
  437. CldMineEvents( bool )
  438.  
  439.      bool - True (non-zero) or False (zero) value **
  440.      
  441.      Used to either turn on or off handling of energy mine collision 
  442.      events.  This function does not effect which section handles mine 
  443.      collision events, only whether the events are handled or ignored.  
  444.      The event handler section may be changed by another call to 
  445.      RegCldMine.
  446.      
  447.  
  448. DtcRobotEvents( bool )
  449.      
  450.      bool - True (non-zero) or False (zero) value **
  451.      
  452.      Used to either turn on or off handling of robot detection events.  This 
  453.      function does not effect which section handles robot detection 
  454.      events, only whether the events are handled or ignored.  The event 
  455.      handler section may be changed by another call to RegDtcRobot.
  456.      
  457.      
  458. DtcCookieEvents( bool )
  459.  
  460.      bool - True (non-zero) or False (zero) value **
  461.      
  462.      Used to either turn on or off handling of energy cookie detection 
  463.      events.  This function does not effect which section handles cookie 
  464.      detection events, only whether the events are handled or ignored.  
  465.      The event handler section may be changed by another call to 
  466.      RegDtcCookie.
  467.      
  468.      
  469. DtcMineEvents( bool )
  470.  
  471.      bool - True (non-zero) or False (zero) value **
  472.      
  473.      Used to either turn on or off handling of energy mine detection 
  474.      events.  This function does not effect which section handles mine 
  475.      detection events, only whether the events are handled or ignored.  
  476.      The event handler section may be changed by another call to 
  477.      RegDtcMine.
  478.      
  479.      
  480. CustomEvents( section, bool )
  481.  
  482.      section   - Name a section in the robot script
  483.      bool - True (non-zero) or False (zero) value **
  484.      
  485.      Used to either turn on or off handling of a specific custom event.  
  486.      Since there may be many registered custom events, the specific 
  487.      event must be identified by its handler section.  This function does 
  488.      not effect which section handles the custom event, only whether the 
  489.      event is handled or ignored.  Custom events may not really be re-
  490.      registered.  To move a custom event to a different handler, turn off 
  491.      the custom event using this function (or register a new custom event 
  492.      to the section) then call RegCustom to register a different handler.
  493.      
  494.      
  495. SetAccel( accel )
  496.      
  497.      accel     - Acceleration value **
  498.      
  499.      Sets the robot's lateral acceleration to a value between 1 and 5.  
  500.      While moving, robots are constantly accelerating. Therefore, this 
  501.      value approximately represents a robot's speed.  This function 
  502.      changes the accel variable described below.  If this function is never 
  503.      called, acceleration defaults to 3.
  504.      
  505.      
  506. Ahead( dist )
  507.      
  508.      dist - Distance to move **
  509.      
  510.      Moves the robot ahead the specified amount.  If the amount is 
  511.      negative, the robot will move backward.  Running into another robot 
  512.      will cause damage to both robots in the collision.  Each robot will 
  513.      lose one energy point per collision.  Hitting a wall will stop a robot, 
  514.      but causes no damage.
  515.      
  516.      Note:  The playing arena is a square measuring 400 unit in both 
  517.      directions while robots measure 33 units in both directions. Ahead 
  518.      requires multiple turns to complete, therefore causing command 
  519.      blocking.
  520.      
  521.  
  522. Back( dist )
  523.  
  524.      dist - Distance to move **
  525.      
  526.      Moves the robot back the specified amount.  If the amount is 
  527.      negative, the robot will move forward.  Running into another robot 
  528.      will cause damage to both robots in the collision.  Each robot will 
  529.      lose one energy point per collision.  Hitting a wall will stop a robot, 
  530.      but causes no damage.
  531.      
  532.      Note:  The playing arena is a square measuring 400 unit in both 
  533.      directions while robots measure 33 units in both directions. Back 
  534.      requires multiple turns to complete, therefore causing command 
  535.      blocking.
  536.      
  537.      
  538. Stop( )
  539.  
  540.      Causes the robot to abort further movement.  This includes both 
  541.      lateral and rotational movement. This function is useful during an 
  542.      event handling routine.  When a new event occurs, all movement 
  543.      will continue unless Stop or a new movement function is called. 
  544.      
  545.      This function stores both the incomplete lateral movement and 
  546.      rotations from the aborted movement in a continue buffer. This 
  547.      continue buffer is used by the Continue function.
  548.      
  549.      Note:  If Stop is called when no motion is occurring, the continue 
  550.      buffer is left unchanged. Each time Stop aborts movement, 
  551.      however, the previous continue buffer is overwritten.
  552.      
  553.  
  554. Continue( )
  555.      
  556.      Continues all movement previously aborted by a call to Stop.  This 
  557.      includes both lateral movement and rotations. Calling Continue also 
  558.      resets the continue buffer.
  559.      
  560.      This function only continues aborted movement, it does not restore 
  561.      location. For example, if a robot rotates or moves laterally between 
  562.      calls to Stop and Continue, movement will be continued from the 
  563.      new location and orientation.
  564.      
  565.      Note:  Just like other commands that cause movement, Continue 
  566.      requires multiple turns to complete, causing command blocking.
  567.      
  568.      
  569. BodyLeft( degrees )
  570.  
  571.      degrees   - Degrees to rotate body **
  572.      
  573.      Turns the robot's body counter-clockwise by the amount specified. 
  574.      Negative values will cause clockwise rotation. The maximum 
  575.      rotation rate of a robot's body is 5 degrees per turn.
  576.      
  577.      Note: Rotation speeds of a robot's body, gun, and radar differ.  A 
  578.      robot's body rotates the slowest, its gun rotates twice as fast as its 
  579.      body, and its radar rotates three times as fast as its body. BodyLeft 
  580.      requires multiple turns to complete, therefore causing command 
  581.      blocking.
  582.      
  583.      
  584. BodyRight( degrees )
  585.      
  586.      degrees   - Degrees to rotate body **
  587.      
  588.      Turns the robot's body clockwise by the amount specified. Negative 
  589.      values will cause counter-clockwise rotation. The maximum rotation 
  590.      rate of a robot's body is 5 degrees per turn.
  591.      
  592.      Note: Rotation speeds of a robot's body, gun, and radar differ.  A 
  593.      robot's body rotates the slowest, its gun rotates twice as fast as its 
  594.      body, and its radar rotates three times as fast as its body. 
  595.      BodyRight requires multiple turns to complete, therefore causing 
  596.      command blocking.
  597.      
  598.      
  599. GunLeft( degrees )
  600.      
  601.      degrees   - Degrees to rotate gun **
  602.      
  603.      Turns the robot's gun counter-clockwise by the amount specified.  
  604.      Negative values will cause clockwise rotation. The maximum 
  605.      rotation rate of a robot's gun is 10 degrees per turn.
  606.      
  607.      Note: Rotation speeds of a robot's body, gun, and radar differ.  A 
  608.      robot's body rotates the slowest, its gun rotates twice as fast as its 
  609.      body, and its radar rotates three times as fast as its body. GunLeft 
  610.      requires multiple turns to complete, therefore causing command 
  611.      blocking.
  612.      
  613.      
  614. GunRight( degrees )
  615.  
  616.      degrees   - Degrees to rotate gun **
  617.      
  618.      Turns the robot's gun clockwise by the amount specified. Negative 
  619.      values will cause counter-clockwise rotation. The maximum rotation 
  620.      rate of a robot's gun is 10 degrees per turn.
  621.      
  622.      Note: Rotation speeds of a robot's body, gun, and radar differ.  A 
  623.      robot's body rotates the slowest, its gun rotates twice as fast as its 
  624.      body, and its radar rotates three times as fast as its body. GunRight 
  625.      requires multiple turns to complete, therefore causing command 
  626.      blocking.
  627.      
  628.      
  629. RadarLeft( degrees )
  630.      
  631.      degrees   - Degrees to rotate radar **
  632.      
  633.      Turns the robot's radar counter-clockwise by the amount specified. 
  634.      Negative values will cause clockwise rotation. The maximum 
  635.      rotation rate of a robot's radar is 15 degrees per turn.
  636.      
  637.      Note: Rotation speeds of a robot's body, gun, and radar differ.  A 
  638.      robot's body rotates the slowest, its gun rotates twice as fast as its 
  639.      body, and its radar rotates three times as fast as its body. RadarLeft 
  640.      requires multiple turns to complete, therefore causing command 
  641.      blocking.
  642.      
  643.      
  644. RadarRight( degrees )
  645.      
  646.      degrees   - Degrees to rotate radar **
  647.      
  648.      Turns the robot's radar clockwise by the amount specified. Negative 
  649.      values will cause counter-clockwise rotation. The maximum rotation 
  650.      rate of a robot's radar is 15 degrees per turn.
  651.      
  652.      Note: Rotation speeds of a robot's body, gun, and radar differ.  A 
  653.      robot's body rotates the slowest, its gun rotates twice as fast as its 
  654.      body, and its radar rotates three times as fast as its body. 
  655.      RadarRight requires multiple turns to complete, therefore causing 
  656.      command blocking.
  657.      
  658.      
  659. LockAll( bool )
  660.      
  661.      bool - True (non-zero) or False (zero) value **
  662.      
  663.      Turns on or off rotational locking of all robot components (body, 
  664.      radar, and gun).  Turning locking on causes all components to rotate 
  665.      together at body rotation speeds.  For example, with locking on, 
  666.      calling the RadarLeft function will cause the entire robot to turn left 
  667.      by the specified amount.  Remember, both the gun and radar are 
  668.      forced to rotate at slower body rotation speeds.
  669.      
  670.      
  671. LockGun( bool )
  672.      
  673.      bool - True (non-zero) or False (zero) value **
  674.      
  675.      Turns on or off rotational locking of a robot's gun and radar.  Turning 
  676.      locking on causes the gun and radar to rotate together at gun 
  677.      rotation speeds.  For example, with locking on, calling the RadarLeft 
  678.      function will cause both the gun and radar turn left by the specified 
  679.      amount.  Remember, the radar is forced to rotate at slower gun 
  680.      rotation speeds.
  681.      
  682.      
  683. SyncAll()
  684.      
  685.      Synchronizes both the robot's body and gun to the current radar 
  686.      angle.  This function will temporarily override any rotation locks 
  687.      established by previous calls to LockAll and LockGun.
  688.      
  689.      Note: SyncAll requires multiple turns to complete, therefore causing 
  690.      command blocking.
  691.      
  692.  
  693. SyncGun()
  694.      
  695.      Synchronizes the robot's gun to the current radar angle.  This 
  696.      function will temporarily override any rotation locks established by 
  697.      previous calls to LockAll and LockGun.
  698.      
  699.      Note: SyncGun requires multiple turns to complete, therefore 
  700.      causing command blocking.
  701.      
  702.      
  703. Scan()
  704.  
  705.      Sends out a radar ping in the direction of the radar.  The ping travels
  706.      in a straight line away from the robot.  The distance of the first 
  707.      obstacle encountered is placed in the scandist variable described 
  708.      below.  Distance is measured from the robot's boundary to the 
  709.      boundary of the other object or wall.  If the first obstacle is another 
  710.      robot, mine, or cookie the dtcrobot, dtcmine, or, dtccookie variable 
  711.      will be incremented respectively.  This may cause event handlers to 
  712.      be called. Every time Scan is called, both the dtcenergy and 
  713.      dtcbearing variables are changed as well.
  714.      
  715.      
  716. Fire( energy )
  717.      
  718.      energy    - Amount of energy to use **
  719.      
  720.      Fires an energy missile in the direction of the robot's gun.  The 
  721.      amount of damage done by an energy missile is directly proportional 
  722.      to the amount of energy used to fire it and the distance the missile 
  723.      travels.  Energy used to fire a missile is removed from the robot's 
  724.      overall energy store.  Valid firing values are from 1 to 7.  Zero is 
  725.      ignored, negative numbers cause an error, and values greater that 7 
  726.      are simply reduced to 7.  Remember, energy missiles lose energy as 
  727.      they travel.  Hitting targets at a great distance has a smaller effect 
  728.      than hitting close targets.
  729.      
  730.      After firing an energy missile, a robot's gun requires time to cool 
  731.      down.  Fire may be called continuously, but nothing will happen until 
  732.      the gun cools down.  Although most robots just ignore this and call 
  733.      Fire as often as required, the gunheat variable can be used to 
  734.      determine the current heat of the gun.
  735.      
  736.      Note: An energy missile's total energy is the amount of energy put 
  737.      into a missile multiplied by 4. Although a missile loses energy as it 
  738.      travels, its strength will never go below 4.  The damage done to 
  739.      another robot will never go below 5 since 1 point is also lost due to 
  740.      the collision.
  741.      
  742.  
  743. If( expression )
  744.      
  745.      expression - Expression that evaluates to True (non-zero) 
  746.                   or False (zero) **
  747.      
  748.      Used to start a logical if block based upon the value of an 
  749.      expression.  If blocks may be nested, but there should only be one If 
  750.      statement opening each block.  The expression may contain any 
  751.      legal variable, numeric value, logical operator, or math operator.
  752.      
  753.  
  754. Elseif( expression )
  755.  
  756.      expression - Expression that evaluates to True (non-zero) 
  757.                   or False (zero) **
  758.      
  759.      Evaluated if the opening If or previous Elseif statement in a logical 
  760.      If block evaluates to false.  Behaves exactly like an If statement, but 
  761.      may not be the first statement in a logical if block.  There may be 
  762.      multiple Elseif statements in a single block. The expression may 
  763.      contain any legal variable, numeric value, logical operator, or math 
  764.      operator.
  765.      
  766.      
  767. Else
  768.      
  769.      Evaluated when the all previous If and Elseif statements in a logical 
  770.      If block have evaluated to false. If blocks may be nested, but there 
  771.      may only be one Else statement in each block.
  772.      
  773.  
  774. Endif
  775.      
  776.      Marks the end of a logical If block.  If blocks may be nested, but 
  777.      there may only be one Endif statement ending each block.
  778.      
  779.      
  780. Gosub( section )
  781.  
  782.      section   - Name of a section in the robot script
  783.      
  784.      Causes execution to continue at the first line of the specified 
  785.      section.  When the called section finishes its last line or hits a 
  786.      Return statement, execution continues at the line after the Gosub 
  787.      call.
  788.      
  789.      Note: Sections that are executed with a Gosub command inherit the 
  790.      priority of their callers. This implies that sections executed with the 
  791.      Gosub command have no unexpected effect on events; they 
  792.      behave exactly as their callers behave. 
  793.      
  794.      
  795. Return
  796.      
  797.      Causes the current section to end at the current line, returning to the 
  798.      caller.  If there was no explicit caller, then next event will be 
  799.      processed.
  800.      
  801.  
  802. Round( value, decimals )
  803.           
  804.      value     - Numerical value that should be rounded **
  805.      range     - Number of decimal places to which value should be rounded **
  806.      
  807.      The first argument is rounded to the number of decimal places 
  808.      specified by the second parameter. The resulting number is placed 
  809.      in the result variable. The decimals argument must be an integral 
  810.      number in the range of 0 to 38 inclusive.
  811.      
  812.  
  813. Truncate( value )
  814.      
  815.      value     - Numerical value that should be truncated **
  816.      
  817.      The decimal portion of the specified value is removed. The resulting 
  818.      whole number is placed in the result variable.
  819.      
  820.  
  821. Abs( value  )
  822.      
  823.      value     - Numerical value whose sign will be dropped **
  824.      
  825.      The sign of the specified value is dropped and copied to the result 
  826.      variable. The absolute value of any number has the same 
  827.      magnitude as the original and a positive sign.
  828.      
  829.      
  830. Max( value1, value2  )
  831.           
  832.      value1    - Numerical value that will be tested for maximum **
  833.      value2    - Numerical value that will be tested for maximum **
  834.      
  835.      The two values are compared to determine which is the largest. The 
  836.      number which has the greatest value is copied to the result variable. 
  837.      
  838.      Note: Negative numbers close to zero are larger than negative 
  839.      numbers far from zero.
  840.      
  841.  
  842. Min( value1, value2  )
  843.      
  844.      value1    - Numerical value that will be tested for minimum **
  845.      value2    - Numerical value that will be tested for minimum **
  846.      
  847.      The two values are compared to determine which is the smallest. 
  848.      The number which has the least value is copied to the result 
  849.      variable. 
  850.      
  851.      Note: Negative numbers far from zero are smaller than negative 
  852.      numbers close to zero.
  853.      
  854.  
  855. GetRandom( range )
  856.      
  857.      range     - Limiting range for random number generation **
  858.      
  859.      Fills the result variable with a pseudo-random number.  The 
  860.      generated number will be between 0 and the specified range.  Valid 
  861.      ranges are from -32767 to 32767 inclusive.  Zero of course, is not a 
  862.      valid range.  For example, a random rotational value might be 
  863.      generated by using a range of 359.  The resulting random number 
  864.      would be between 0 and 359 inclusive.
  865.      
  866.      
  867. GetHitStr()
  868.      
  869.      Fills the result variable with the average damage done by this robot 
  870.      to all other robots in the current game.  This is only damage done by 
  871.      missile hits, not collisions.  Missed shots do not affect this number.  
  872.      This information might be used to adjust firing tactics.
  873.      
  874.      
  875. GetHitsOther()
  876.      
  877.      Fills the result variable with the number of times the robot has hit 
  878.      other robots with an energy missile.  This number is often combined 
  879.      with the results of GetShots to modify firing tactics.
  880.      
  881.      
  882. GetShots()
  883.      
  884.      Fills the result variable with  the number of energy missiles the robot 
  885.      has fired.  This number does not reflect whether or not these shots 
  886.      hit something.  This number is often combined with the results of 
  887.      GetHitsOther to modify firing tactics.
  888.      
  889.      
  890. GetOthers()
  891.      
  892.      Fills the result variable with the number of other robots left in the 
  893.      current game not including the robot calling this function.  This 
  894.      number is often used to gauge a robot's performance.
  895.      
  896.      
  897. GetTurns()
  898.  
  899.      Fills the result variable with the number of turns the robot has had in 
  900.      the current game.
  901.      
  902.      
  903. GetHitsSelf()
  904.      
  905.      Fills the result variable with the number of time the robot has been 
  906.      hit by other robot's energy missiles.
  907.      
  908.  
  909. Store( variable )
  910.      
  911.      variable  - Variable name
  912.      
  913.      This function allows a robot that is fighting in a multiple game match 
  914.      to pass values from one game to the next.  This function stores the 
  915.      specified variable in permanent storage for the current match.  
  916.      When the next game starts, all stored variables will be automatically 
  917.      restored.  Stored variables will have the same values they contained 
  918.      the last time Store was called in a previous game.  This may be 
  919.      useful for robots that learn during a match, changing behavior 
  920.      dynamically.  This function can not be used to store variables across 
  921.      multiple matches.
  922.  
  923.      
  924. Name( string )
  925.  
  926.      string    - Text surrounded by quotation marks
  927.      
  928.      Sets the robot's name.  The string will be used to reference the robot 
  929.      during game play.  If this function is not called anywhere in a robot's 
  930.      script, a name will be automatically assigned.
  931.      
  932.      
  933. Print( string )
  934.      
  935.      string    - Text surrounded by quotation marks
  936.      
  937.      Adds the specified string to the output display in a robot's 
  938.      information window. Also, a time stamp is prepended to the output 
  939.      display. At any given point in a game, this time stamp will have the 
  940.      same value for all robots. The output display is limited to 200 
  941.      entries.  When Print is called more than 200 times, the oldest 
  942.      entries will be removed first. This function is useful primarily when 
  943.      debugging a robot.  During game play, click on a robot's name 
  944.      button to display its information window.
  945.      
  946.  
  947. Print( variable )
  948.      
  949.      variable  - Variable name or numeric value **
  950.      
  951.      Adds the specified value to the output display in a robot's 
  952.      information window. Numerical values have 7 digits of precision, but 
  953.      3 decimal places are always displayed for clarity. Also, a time stamp 
  954.      is prepended to the output display. At any given point in a game, this 
  955.      time stamp will have the same value for all robots. The output 
  956.      display is limited to 200 entries.  When Print is called more than 200 
  957.      times, the oldest entries will be removed first. This function is useful 
  958.      primarily when debugging a robot.  During game play, click on a 
  959.      robot's name button to display its information window.
  960.      
  961.  
  962. Stall( time )
  963.      
  964.      time - Amount of time to stall **
  965.      
  966.      Causes the robot to freeze for the specified amount of time. This 
  967.      command is very useful for debugging purposes.
  968.      
  969.      Note:  The robot will not even respond to events. This function 
  970.      completely disables a robot.
  971.      
  972.      
  973. Blocking( bool )
  974.      
  975.      bool - True (non-zero) or False (zero) value **
  976.      
  977.      This is an advanced feature. Use of the Blocking command is not 
  978.      required to play robot battle.
  979.      
  980.      This function allows command blocking to be turned on or off. When 
  981.      blocking is turned off, it remains off for the entire robot script until 
  982.      explicitly turned back on.
  983.      
  984.      The default behavior is for blocking to be on.  When blocking is on, 
  985.      calls to commands that require multiple turns block. This means that 
  986.      within a section, execution will pause on the multi-turn command.  
  987.      Code following the multi-turn command will not be executed until the 
  988.      multi-turn command completes. In other words, all function calls are 
  989.      synchronous.  When blocking is turned off, multi-turn commands do 
  990.      not block. Code following the multi-turn command executes 
  991.      immediately. In other words, all function calls are asynchronous.
  992.      
  993.      Blocking should be turned off with great care. A robot's body, gun, 
  994.      and radar can perform only one multi-turn command (i.e. 
  995.      movement) at a time. Only the last command on each body part 
  996.      takes effect. For example, when blocking is off, if a call to BodyLeft 
  997.      is followed immediately by a call to Ahead, the original BodyLeft will 
  998.      be ignored while the robot moves ahead. When blocking is turned 
  999.      off, all previously blocked commands remain blocked.  Likewise, 
  1000.      when blocking is turned on, all previously unblocked commands 
  1001.      remain unblocked. Only commands that are called after a change in 
  1002.      blocking are effected by the change.
  1003.      
  1004.      Turning blocking off is used primarily with the Continue command. 
  1005.      When an event handler is called, for example, movement may be 
  1006.      stopped and continued without blocking on the Continue command.  
  1007.      This allows the event handler to be ended while restricting blocking 
  1008.      to the section and line that initiated to original movement.
  1009.      
  1010.      Note: This command is not related to and has no effect on events or 
  1011.      event registration.
  1012.      
  1013.  
  1014. WaitFor( expression )
  1015.           
  1016.      expression - Expression that evaluates to True (non-zero) 
  1017.                   or False (zero) **
  1018.      
  1019.      This is an advanced feature. Use of the WaitFor command is not 
  1020.      required to play robot battle.
  1021.      
  1022.      This command provides a means of creating a user defined 
  1023.      command block. This means that within a section, execution will 
  1024.      pause on the WaitFor command until expression becomes true. 
  1025.      Code following the WaitFor command will not be executed until 
  1026.      expression becomes true. Generally, blocks are created using 
  1027.      expressions that change over time.  Blocks that are based on 
  1028.      constant value expressions either block permanently or never block.
  1029.      
  1030.      This command is generally used as a synchronization method. This 
  1031.      is particularly useful when normal command blocking has been 
  1032.      turned off with the Blocking command. 
  1033.      
  1034.      The WaitFor command has no effect on events. All events will be 
  1035.      handled normally. If a higher priority event occurs while blocking, for 
  1036.      example, its event handler will be called. When the higher priority 
  1037.      event handler ends, control will again return to the WaitFor.
  1038.      
  1039.  
  1040. Command Blocking
  1041. »»»»»»»»»»»»»»»»
  1042.     Command blocking is an advanced feature. Unless the Blocking
  1043.     or WaitFor functions are being used, this information should
  1044.     not be needed.
  1045.  
  1046.     Command blocking occurs when a robot function requires multiple
  1047.     turns to execute. Only commands that cause movement require 
  1048.     multiple turn to execute. These include Ahead, Back, BodyLeft, 
  1049.     BodyRight, GunLeft, GunRight, RadarLeft, RadarRight, SyncAll, 
  1050.     SyncGun, and Continue.
  1051.  
  1052.     When a command blocks, execution will pause on that command.  
  1053.     Code following the multi-turn command will not be executed until 
  1054.     the multi-turn command completes. In other words, the function 
  1055.     call is synchronous. Since each robot component can only perform 
  1056.     one multi-turn command at a time, blocking greatly simplifies the 
  1057.     conrol of a robot.
  1058.  
  1059.     When blocking is turned off, for example, a GunLeft(20) call 
  1060.     followed by another GunLeft(20) will only move the gun left 20 
  1061.     degrees. Since the first call does not block, the second call 
  1062.     immediately supersedes the first call. 
  1063.  
  1064.  
  1065.  
  1066. »»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
  1067.                                 Chapter 2.0
  1068.  
  1069.                               Special Sections
  1070. ______________________________________________________________________________
  1071.  
  1072.  
  1073. These sections are considered "special" because both of them handle events 
  1074. without being registered.  The game will automatically call these sections 
  1075. when their pre-defined events occur.
  1076.  
  1077.  
  1078. Init
  1079.      
  1080.      This section handles game startup events.  It is
  1081.      automatically called at the start of every game.  It is
  1082.      always the first section to be executed, and will only
  1083.      be called automatically once.  Most robots use this
  1084.      section to register other event handlers.  Although
  1085.      Init is only called once automatically, it may be
  1086.      called "manually" at any time by either registering
  1087.      events to it, or by using the Gosub() command.
  1088.      
  1089.      Note:  Robots are required to have an Init section.
  1090.  
  1091.  
  1092. Dead
  1093.      
  1094.      This section handles robot death events.  It is
  1095.      automatically called when a robot is killed.  Robots
  1096.      are killed either when their energy reaches zero or
  1097.      when the game they are playing in ends.  Even if a
  1098.      robot wins a game, its dead section will be called.
  1099.      Since the robot is dead, only a subset of the robot
  1100.      functions listed above have meaning.  Most robots use
  1101.      the dead section to perform some type of calculation
  1102.      then call the Store function to save information for
  1103.      future games.  When called "manually", a dead section
  1104.      behaves like any other section.
  1105.      
  1106.      Note:  Robots are not required to have a Dead section.
  1107.      
  1108.  
  1109.  
  1110. »»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
  1111.                                Chapter 3.0
  1112.  
  1113.                               Math Operators
  1114. ______________________________________________________________________________
  1115.  
  1116.  
  1117. Standard math operators. Operator precedence follows that of standard 
  1118. scientific calculations. Brackets () may be used to manually change the 
  1119. order of evaluation. Calculation results are also the same as those 
  1120. produced by a standard scientific calculator.
  1121.  
  1122.  
  1123. Description     Usage Format            Output Range
  1124. »»»»»»»»»»»     »»»»»»»»»»»»            »»»»»»»»»»»»
  1125. Cosine          cos( degrees )          -1 <= result <= 1
  1126. Sine            sin( degrees )          -1 <= result <= 1
  1127. Tangent         tan( degrees )          NA
  1128. ArcCosine       acos( value )*          0  <= result <= 180
  1129. ArcSine         asin( value )*          -90 <= result <= 90
  1130. ArcTangent      atan( value )           -90 <= result <= 90
  1131. Raise to power  ^                       -3.4e ▒ 38 <= result <= 3.4e ▒ 38
  1132. Multiplication  *                       -3.4e ▒ 38 <= result <= 3.4e ▒ 38
  1133. Modulus         %                       integral value
  1134. Division        /                       -3.4e ▒ 38 <= result <= 3.4e ▒ 38
  1135. Addition        +                       -3.4e ▒ 38 <= result <= 3.4e ▒ 38
  1136. Subtraction     -                       -3.4e ▒ 38 <= result <= 3.4e ▒ 38
  1137. Assignment      =                       NA
  1138. Numeric values  ± 3.4e ± 38 (6 digits)  NA
  1139.  
  1140.  
  1141. * Value must be greater than or equal to -1 and less than or equal to 1.
  1142.  
  1143. Note: Variables are automatically defined by placing them on the left side of 
  1144.       the assignment command.  All variables have an initial value of zero 
  1145.       until explicitly assigned a different value.
  1146.  
  1147.  
  1148.  
  1149. »»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
  1150.                                Chapter 4.0
  1151.  
  1152.                              Logical Operators
  1153. ______________________________________________________________________________
  1154.  
  1155.  
  1156. These operators are commonly used in If statements and custom events, but 
  1157. may be used anywhere an expression is valid.  Several operators have two
  1158. definitions.  The second definition is provided for æC' programmers who are 
  1159. stuck in their ways (like me).
  1160.  
  1161. Description                     Usage Format
  1162. »»»»»»»»»»»                     »»»»»»»»»»»»
  1163. Equality comparison                ==
  1164. Not equal to                       <>, !=
  1165. Greater than or equal to           >=
  1166. Less than or equal to              <=
  1167. Greater than                       >
  1168. Less than                          <
  1169. Logical AND                        and, &&
  1170. Logical OR                         or, ||
  1171.  
  1172.  
  1173.  
  1174. »»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
  1175.                                 Chapter 5.0
  1176.  
  1177.                               Robot Variables
  1178. ______________________________________________________________________________
  1179.  
  1180.  
  1181. These variables describe a robot's state during game play.  They may be 
  1182. used in any expression in a robot's script.  The only restriction is that 
  1183. these variables are read only.  Their values are for informational purposes 
  1184. only and are maintained by the game itself.  They may not be changed directly 
  1185. by assignment.  Remember, capitalization is not important.  A variable named 
  1186. "VARIABLE" will be that same as "variable" or "Variable".
  1187.  
  1188.  
  1189. Variable Summary
  1190. »»»»»»»»»»»»»»»»
  1191. accel              The robot's current acceleration
  1192. bodyaim            Current angle of robot's body
  1193. bodyrmn            Angular rotation remaining in the robot's body
  1194. cldbearing         Bearing to the last object the robot collided with
  1195. cldcookie          Cookie collision indicator
  1196. cldenergy          Energy of the last object the robot collided with
  1197. cldmine            Mine collision indicator
  1198. cldmissile         Missile collision indicator
  1199. cldrobot           Robot collision indicator
  1200. death              Indicates that another robot has died
  1201. distrmn            Distance remaining in the robot's lateral movement
  1202. dtcbearing         Bearing to the last object the robot detected
  1203. dtccookie          Cookie detection indicator
  1204. dtcenergy          Energy of the last object the robot detected
  1205. dtcmine            Mine detection indicator
  1206. dtcrobot           Robot detection indicator
  1207. energy             The robot's remaining energy level
  1208. false              Constant zero value
  1209. gamenbr            Current game number
  1210. games              Number of games in the current match
  1211. gunaim             Angle of the robot's gun
  1212. gunheat            Heat of the robot's gun
  1213. gunrmn             Angular rotation remaining in the robot's gun
  1214. moving             Lateral movement indicator
  1215. off                Constant zero value
  1216. on                 Constant non-zero value
  1217. radaraim           Angle of robot's radar
  1218. radarrmn           Angular rotation remaining in the robot's radar
  1219. result             Generic computation results buffer
  1220. rotating           Rotation indicator
  1221. scandist           Distance to the nearest detected object
  1222. true               Constant non-zero value
  1223.  
  1224.  
  1225. Variable Details
  1226. »»»»»»»»»»»»»»»»
  1227.  
  1228. scandist
  1229.      
  1230.      Each time the Scan function is called, this variable is filled with the 
  1231.      distance to the nearest object. This may be the distance to a wall, 
  1232.      another robot, a cookie, or a mine.  Energy missiles are ignored. 
  1233.      Distance is measured from the robot's boundary to the boundary of 
  1234.      the other object or wall. Also, if another robot, cookie, or mine is 
  1235.      detected, the appropriate detection variable will be incremented and 
  1236.      the section registered to handle the event will be called.
  1237.      
  1238.      
  1239. cldrobot
  1240.      
  1241.      Set to true when the robot collides with another robot.  When the 
  1242.      collision occurs, the section registered by RegCldRobot will also be 
  1243.      called. Collision indicators are mutually exclusive. When cldrobot is 
  1244.      true all other collision variables will be false. This variable is reset to 
  1245.      false automatically when the robot collision event handle returns. If 
  1246.      no section has been registered to handle robot collision events, this 
  1247.      value will remain true until a collision with a different object occurs.
  1248.      
  1249.      
  1250. cldmissile
  1251.      
  1252.      Set to true when the robot collides with an energy missile.  When the 
  1253.      collision occurs, the section registered by RegCldMissile will also be 
  1254.      called. Collision indicators are mutually exclusive. When cldmissile 
  1255.      is true all other collision variables will be false. This variable is reset 
  1256.      to false automatically when the missile collision event handle 
  1257.      returns. If no section has been registered to handle missile collision 
  1258.      events, this value will remain true until a collision with a different 
  1259.      object occurs.
  1260.      
  1261.      
  1262. cldcookie
  1263.      
  1264.      Set to true when the robot collides with an energy cookie.  When the 
  1265.      collision occurs, the section registered by RegCldCookie will also be 
  1266.      called. Collision indicators are mutually exclusive. When cldcookie 
  1267.      is true all other collision variables will be false. This variable is reset 
  1268.      to false automatically when the cookie collision event handle returns. 
  1269.      If no section has been registered to handle cookie collision events, 
  1270.      this value will remain true until a collision with a different object 
  1271.      occurs.
  1272.      
  1273.  
  1274. cldmine
  1275.      
  1276.      Set to true when the robot collides with an energy mine.  When the 
  1277.      collision occurs, the section registered by RegCldMine will also be 
  1278.      called. Collision indicators are mutually exclusive. When cldmine is 
  1279.      true all other collision variables will be false. This variable is reset to 
  1280.      false automatically when the mine collision event handle returns. If 
  1281.      no section has been registered to handle mine collision events, this 
  1282.      value will remain true until a collision with a different object occurs.
  1283.      
  1284.      
  1285. cldenergy
  1286.      
  1287.      When a robot collides with any other object, this variable is filled 
  1288.      with the energy of that object. Robots may collide with energy 
  1289.      missiles, other robots, cookies, and mines. All objects, including 
  1290.      mines, return positive energy values. There is no such thing as 
  1291.      negative energy. The value of cldenergy will not change until 
  1292.      another collision occurs.  This variable is often used to judge an 
  1293.      enemy robot's relative strength.
  1294.      
  1295.      
  1296. cldbearing
  1297.      
  1298.      When a robot collides with any other object, this variable is filled 
  1299.      with the bearing to that object. Robots may collide with energy 
  1300.      missiles, other robots, cookies, and mines. This variable is a bearing 
  1301.      from the robot's current heading to that object, not an absolute 
  1302.      heading.  Values are in degrees ranging from -180 to 179.  A 
  1303.      cldbearing of zero is always directly ahead of the robot.
  1304.      
  1305.      For example, if a robot were heading 135 degrees and an energy 
  1306.      missile hit the robot's body at an absolute angle of 90 degrees (3 o-
  1307.      clock), the cldbearing variable would be set to -45.  In other words, 
  1308.      the robot was hit 45 degrees left of its current heading.
  1309.      
  1310.      Remember, cldbearing says nothing about the direction an object 
  1311.      was traveling when it collided with the robot, only where it hit the 
  1312.      robot.  This should be evident since the other object may not have 
  1313.      even been moving. The value of cldbearing will not change until 
  1314.      another collision occurs.
  1315.      
  1316.      
  1317. dtcrobot
  1318.      
  1319.      This variable is incremented by one when another robot is detected 
  1320.      by a call to Scan.  It is set to zero when a call to Scan does not 
  1321.      detect another robot.  When robot detection occurs, the section 
  1322.      registered by RegDtcRobot will be called.  This variable is 
  1323.      decremented by one automatically when the robot detection event 
  1324.      handle returns.  For this reason, many robots call Scan at the end of 
  1325.      their detection event handlers.  If no section has been registered to 
  1326.      handle robot detection events, this value will remain non-zero until a 
  1327.      call to Scan detects no other robots.
  1328.      
  1329.      
  1330. dtccookie
  1331.      
  1332.      This variable is incremented by one when an energy cookie is 
  1333.      detected by a call to Scan.  It is set to zero when a call to Scan does 
  1334.      not detect a cookie.  When an energy cookie is detected, the section 
  1335.      registered by RegDtcCookie will also be called.  This variable is 
  1336.      decremented by one automatically when the cookie detection event 
  1337.      handle returns.  If no section has been registered to handle cookie 
  1338.      detection events, this value will remain non-zero until a call to Scan 
  1339.      detects no energy cookies.
  1340.      
  1341.      
  1342. dtcmine
  1343.      
  1344.      This variable is incremented by one when an energy mine is 
  1345.      detected by a call to Scan.  It is set to zero when a call to Scan does 
  1346.      not detect a mine.  When an energy mine is detected, the section 
  1347.      registered by RegDtcMine will also be called.  This variable is 
  1348.      decremented by one automatically when the mine detection event 
  1349.      handle returns.  If no section has been registered to handle mine 
  1350.      detection events, this value will remain non-zero until a call to Scan 
  1351.      detects no mines.
  1352.      
  1353.  
  1354. dtcenergy
  1355.      
  1356.      When a robot detects any other object, this variable is filled with the 
  1357.      energy of that object.  Robots may detect other robots, cookies, and 
  1358.      mines. All objects, including mines, return positive energy values.  
  1359.      There is no such thing as negative energy.  If no objects are 
  1360.      detected by Scan, dtcenergy is set to zero.  This variable is often 
  1361.      used to judge an enemy robot's relative strength.  
  1362.      
  1363.      Every time Scan is called, dtcenergy will change. It will either be 
  1364.      set to the detected object's energy or zero if no object was detected. 
  1365.      This is true even when the detected object does not have a 
  1366.      detection event handler registered.
  1367.      
  1368.      
  1369. dtcbearing
  1370.      
  1371.      When a robot detects any other object, this variable is filled with the 
  1372.      bearing to that object.  Robots may detect other robots, cookies, and 
  1373.      mines. This variable is a bearing from the robot's current heading to 
  1374.      that object, not an absolute heading.  Values are in degrees ranging 
  1375.      from -180 to 179.  A dtcbearing of zero is always directly ahead of 
  1376.      the robot.
  1377.      
  1378.      This variable is provided primarily for consistence with collision 
  1379.      variables.  Since objects may only be detected by a radar ping, 
  1380.      dtcbearing always matches the bearing of the robot's radar at the 
  1381.      time Scan was called.  See cldbearing for more details about 
  1382.      bearing.
  1383.      
  1384.      Every time Scan is called, dtcbearing will change.  It will always 
  1385.      reflect the bearing of the robot's radar, even if no objects were 
  1386.      detected.
  1387.      
  1388.      
  1389. death
  1390.      
  1391.      When another robot in the current game dies, the death variable is 
  1392.      set to true. This variable is an exception to the read only rule.  Since 
  1393.      the game never resets death to false, this must be done by the 
  1394.      robot.  This variable can be used for custom events, just remember 
  1395.      to change it to false at some point to end the event.  It is easiest to 
  1396.      think of the death variable as an automatically provided user 
  1397.      variable.
  1398.      
  1399.      
  1400. energy
  1401.      
  1402.      The robot's remaining energy level.  This number always starts at 
  1403.      100 and is changed by various events during game play.  When this 
  1404.      value reaches zero, the robot is out of the game.  This value will 
  1405.      always match that shown on the game's playing field.  Please see 
  1406.      Damage Summary for more detail.
  1407.      
  1408.      
  1409. accel
  1410.      
  1411.      Current setting of the robot's acceleration.  While moving laterally, 
  1412.      robots are constantly accelerating.  Therefore, this value 
  1413.      approximately represents a robot's movement speed.   This value is 
  1414.      changed by calling the SetAccel function and defaults to 3.
  1415.      
  1416.      
  1417. moving
  1418.      
  1419.      True while the robot is moving laterally and false while the robot is 
  1420.      stationary or rotating only.
  1421.      
  1422.      
  1423. rotating
  1424.      
  1425.      True while any part of the robot is rotating and false while the robot 
  1426.      is stationary or moving laterally only.
  1427.      
  1428.  
  1429. gunheat
  1430.  
  1431.      Current heat of the robot's gun. Every time a robot calls Fire its gun 
  1432.      heats up. As time passes, the gun cools down. A robot may only fire 
  1433.      another energy missile when gunheat reaches zero. Most robots 
  1434.      simply ignore this variable and call Fire as often as possible.
  1435.      
  1436.  
  1437. distrmn
  1438.      
  1439.      When a robot is moving laterally, this variable contains the distance 
  1440.      remaining until the movement is complete. This information is useful 
  1441.      when a robot needs to store or test the amount of lateral movement 
  1442.      remaining. If the robot is not moving, this variable will be zero. Do 
  1443.      not confuse this variable with the internal "continue buffer" described 
  1444.      in the Stop and Continue functions, they are similar but independent.
  1445.      
  1446.  
  1447. bodyrmn
  1448.      
  1449.      When a robot's body is rotating, this variable contains the amount of 
  1450.      rotation remaining until the rotation is complete. This information is 
  1451.      useful when a robot needs to store or test the amount of body 
  1452.      rotation currently remaining. If the robot's body is not rotating, this 
  1453.      variable will be zero. Do not confuse this variable with the internal 
  1454.      "continue buffer" described in the Stop and Continue functions, they 
  1455.      are similar but independent.
  1456.      
  1457.      
  1458. gunrmn
  1459.  
  1460.      When a robot's gun is rotating, this variable contains the amount of 
  1461.      rotation remaining until the rotation is complete. This information is 
  1462.      useful when a robot needs to store or test the amount of gun rotation 
  1463.      currently remaining. If the robot's gun is not rotating, this variable 
  1464.      will be zero. Do not confuse this variable with the internal "continue 
  1465.      buffer" described in the Stop and Continue functions, they are 
  1466.      similar but independent.
  1467.      
  1468.  
  1469. radarrmn
  1470.      
  1471.      When a robot's radar is rotating, this variable contains the amount of 
  1472.      rotation remaining until the rotation is complete. This information is 
  1473.      useful when a robot needs to store or test the amount of radar 
  1474.      rotation currently remaining. If the robot's radar is not rotating, this 
  1475.      variable will be zero. Do not confuse this variable with the internal 
  1476.      "continue buffer" described in the Stop and Continue functions, they 
  1477.      are similar but independent.
  1478.      
  1479.  
  1480. bodyaim
  1481.      
  1482.      Current angle of the robot's body.  Values are in degrees ranging 
  1483.      from 0 - 359.  A bodyaim of zero is towards the top of the arena, or 
  1484.      map north.  This value is changed by the various rotation functions.
  1485.      
  1486.  
  1487. radaraim
  1488.      
  1489.      Current angle of the robot's radar.  Values are in degrees ranging 
  1490.      from 0 - 359.  A radaraim of zero is towards the top of the arena, or 
  1491.      map north.  This value is changed by the various rotation functions.
  1492.      
  1493.      
  1494. gunaim
  1495.      
  1496.      Current angle of the robot's gun.  Values are in degrees ranging 
  1497.      from 0 - 359.  A gunaim of zero is towards the top of the arena, or 
  1498.      map north.  This value is changed by the various rotation functions.
  1499.      
  1500.      
  1501. result
  1502.      
  1503.      This is a generic results buffer. Since robot functions do not return 
  1504.      values, any function that generates a number fills this variable with 
  1505.      its results. This value may therefore change often. It should only be 
  1506.      used immediately after calling a function that fills it. If the value is 
  1507.      needed at a later time, it should be assigned to a user defined 
  1508.      variable. All functions that use this variable mention it in their 
  1509.      description.
  1510.      
  1511.      
  1512. gamenbr
  1513.      
  1514.      Current game number. Robot Battle matches have from 1 to 65,500 
  1515.      games. This variable is set to 1 for the first game of a match and 
  1516.      incremented by one for each successive game. The gamenbr 
  1517.      variable will be 2 for the second game of a match, 3 for the third, 
  1518.      and so on.
  1519.      
  1520.      
  1521. games
  1522.      
  1523.      Number of games in the current match. This variable does not 
  1524.      change from game to game, only from match to match. It always 
  1525.      contains the total number of planned games in a match. Robot 
  1526.      Battle matches have from 1 to 65,500 games.
  1527.      
  1528.  
  1529. on
  1530.  
  1531.      Evaluates to a non-zero value.
  1532.      
  1533.  
  1534. true
  1535.  
  1536.      Evaluates to a non-zero value.
  1537.      
  1538.  
  1539. off
  1540.      
  1541.      Evaluates to a zero value.
  1542.      
  1543.  
  1544. false
  1545.      
  1546.      Evaluates to a zero value.
  1547.