# ---------------------------------------------------- # Created automagically by Herbal 2.0.9 # Date Compiled: Mon Mar 26 12:52:26 EDT 2007 # Compiled By: mcohen # ---------------------------------------------------- # **** START prescript.soar **** watch --level 0 watch --productions # **** END prescript.soar **** #------------------------------------------------------------------------------- #elaborations to retract completed output... #------------------------------------------------------------------------------- sp {apply*global*remove-dtank-types-enemy (state ^operator ^io.output-link ) ( ^|dtank.types.enemy| ) ( ^status complete) --> ( ^|dtank.types.enemy| -) } sp {apply*global*remove-dtank-types-tankHeading (state ^operator ^io.output-link ) ( ^|dtank.types.tankHeading| ) ( ^status complete) --> ( ^|dtank.types.tankHeading| -) } sp {apply*global*remove-dtank-types-friend (state ^operator ^io.output-link ) ( ^|dtank.types.friend| ) ( ^status complete) --> ( ^|dtank.types.friend| -) } sp {apply*global*remove-dtank-types-inTrouble (state ^operator ^io.output-link ) ( ^|dtank.types.inTrouble| ) ( ^status complete) --> ( ^|dtank.types.inTrouble| -) } sp {apply*global*remove-dtank-types-action (state ^operator ^io.output-link ) ( ^|dtank.types.action| ) ( ^status complete) --> ( ^|dtank.types.action| -) } sp {apply*global*remove-dtank-types-me (state ^operator ^io.output-link ) ( ^|dtank.types.me| ) ( ^status complete) --> ( ^|dtank.types.me| -) } sp {apply*global*remove-dtank-types-enemySpotted (state ^operator ^io.output-link ) ( ^|dtank.types.enemySpotted| ) ( ^status complete) --> ( ^|dtank.types.enemySpotted| -) } sp {apply*global*remove-dtank-types-terrain (state ^operator ^io.output-link ) ( ^|dtank.types.terrain| ) ( ^status complete) --> ( ^|dtank.types.terrain| -) } sp {apply*global*remove-dtank-types-throttle (state ^operator ^io.output-link ) ( ^|dtank.types.throttle| ) ( ^status complete) --> ( ^|dtank.types.throttle| -) } sp {apply*global*remove-dtank-types-turretHeading (state ^operator ^io.output-link ) ( ^|dtank.types.turretHeading| ) ( ^status complete) --> ( ^|dtank.types.turretHeading| -) } #------------------------------------------------------------------------------- #define topspace #------------------------------------------------------------------------------- sp {propose*initialize-topspace (state ^type state -^name) ( ^superstate nil) --> ( ^operator +) ( ^name initialize-topspace) ( ^top ) ( ^parent ) } sp {apply*initialize-topspace (state ^operator ) ( ^name initialize-topspace ^top ^parent ) ( ^io ) ( ^output-link ) --> ( ^name topspace) ( ^top ) ( ^parent ) ( ^|tank.types.curDir| ) ( ^dir 0 ) } #define the impasses... sp {propose*topspace*impasse*attackps (state ^top ^name topspace) ( ^io ) ( ^input-link ) ( ^|dtank.types.enemySpotted| ) ( ^flag true ) ( ^|dtank.types.inTrouble| ) ( ^flag false ) --> ( ^operator + =) ( ^name impasse*attackps) } sp {propose*topspace*impasse*wanderps (state ^top ^name topspace) ( ^io ) ( ^input-link ) ( ^|dtank.types.enemySpotted| ) ( ^flag false ) ( ^|dtank.types.inTrouble| ) ( ^flag false ) --> ( ^operator + =) ( ^name impasse*wanderps) } sp {propose*topspace*impasse*retreatps (state ^top ^name topspace) ( ^io ) ( ^input-link ) ( ^|dtank.types.inTrouble| ) ( ^flag true ) --> ( ^operator + =) ( ^name impasse*retreatps) } #------------------------------------------------------------------------------- #define attack #------------------------------------------------------------------------------- sp {propose*initialize-attack (state ^type state -^name) ( ^impasse no-change ^attribute operator) ( ^superstate ) ( ^top ) ( ^operator ) ( ^name impasse*attackps) --> ( ^operator +) ( ^name initialize-attack) ( ^top ) ( ^parent ) } sp {apply*initialize-attack (state ^operator ) ( ^name initialize-attack ^top ^parent ) ( ^io ) ( ^output-link ) --> ( ^name attack) ( ^top ) ( ^parent ) ( ^|dtank.types.throttle| ) ( ^value 0 ) (write |stopping| ) } #define the rules... sp {propose*attack*fire (state ^top ^parent ^name attack) ( ^io ) ( ^input-link ) ( ^|dtank.types.enemy| ) ( ^nationality ) ( ^y ) ( ^distance ) ( ^heading ) ( ^x ) --> ( ^operator + =) ( ^name fire) ( ^enemy ) } sp {apply*attack*fire (state ^top ^name attack ^operator ) ( ^name fire) ( ^io ) ( ^output-link ) ( ^enemy ) ( ^x ) ( ^y ) ( ^nationality ) ( ^distance ) ( ^heading ) --> ( ^|dtank.types.action| ) ( ^value |fire| ) (write |firing| ) } sp {propose*attack*aim (state ^top ^parent ^name attack) ( ^io ) ( ^input-link ) ( ^|dtank.types.enemy| ) ( ^nationality ) ( ^y ) ( ^distance ) ( ^heading ) ( ^x ) --> ( ^operator + =) ( ^name aim) ( ^enemy ) } sp {apply*attack*aim (state ^top ^name attack ^operator ) ( ^name aim) ( ^io ) ( ^output-link ) ( ^enemy ) ( ^x ) ( ^y ) ( ^nationality ) ( ^distance ) ( ^heading ) --> ( ^|dtank.types.turretHeading| ) ( ^value ) (write |aiming| ) } #------------------------------------------------------------------------------- #define wander #------------------------------------------------------------------------------- sp {propose*initialize-wander (state ^type state -^name) ( ^impasse no-change ^attribute operator) ( ^superstate ) ( ^top ) ( ^operator ) ( ^name impasse*wanderps) --> ( ^operator +) ( ^name initialize-wander) ( ^top ) ( ^parent ) } sp {apply*initialize-wander (state ^operator ) ( ^name initialize-wander ^top ^parent ) ( ^io ) ( ^output-link ) --> ( ^name wander) ( ^top ) ( ^parent ) } #define the rules... sp {propose*wander*turnUp (state ^top ^parent ^name wander) ( ^io ) ( ^input-link ) ( ^|tank.types.curDir| ) ( ^dir 270 ) --> ( ^operator + =) ( ^name turnUp) ( ^dir ) } sp {apply*wander*turnUp (state ^top ^name wander ^operator ) ( ^name turnUp) ( ^io ) ( ^output-link ) ( ^dir ) ( ^dir ) --> ( ^dir -) ( ^dir 0 ) ( ^|dtank.types.tankHeading| ) ( ^value ) } sp {propose*wander*turnRight (state ^top ^parent ^name wander) ( ^io ) ( ^input-link ) ( ^|tank.types.curDir| ) ( ^dir 0 ) --> ( ^operator + =) ( ^name turnRight) ( ^dir ) } sp {apply*wander*turnRight (state ^top ^name wander ^operator ) ( ^name turnRight) ( ^io ) ( ^output-link ) ( ^dir ) ( ^dir ) --> ( ^dir -) ( ^dir 90 ) ( ^|dtank.types.tankHeading| ) ( ^value ) } sp {propose*wander*turnLeft (state ^top ^parent ^name wander) ( ^io ) ( ^input-link ) ( ^|tank.types.curDir| ) ( ^dir 180 ) --> ( ^operator + =) ( ^name turnLeft) ( ^dir ) } sp {apply*wander*turnLeft (state ^top ^name wander ^operator ) ( ^name turnLeft) ( ^io ) ( ^output-link ) ( ^dir ) ( ^dir ) --> ( ^dir -) ( ^dir 270 ) ( ^|dtank.types.tankHeading| ) ( ^value ) } sp {propose*wander*turnDown (state ^top ^parent ^name wander) ( ^io ) ( ^input-link ) ( ^|tank.types.curDir| ) ( ^dir 90 ) --> ( ^operator + =) ( ^name turnDown) ( ^dir ) } sp {apply*wander*turnDown (state ^top ^name wander ^operator ) ( ^name turnDown) ( ^io ) ( ^output-link ) ( ^dir ) ( ^dir ) --> ( ^dir -) ( ^dir 180 ) ( ^|dtank.types.tankHeading| ) ( ^value ) } sp {propose*wander*move (state ^top ^parent ^name wander) ( ^io ) ( ^input-link ) ( ^|dtank.types.me| ) ( ^x ) ( ^tankHeading ) ( ^speedMPS ) ( ^y ) ( ^throttle ) ( ^ammunition ) ( ^turretHeading ) ( ^nationality ) ( ^fuel ) ( ^armor ) ( ^speedKPH ) --> ( ^operator + =) ( ^name move) } sp {apply*wander*move (state ^top ^name wander ^operator ) ( ^name move) ( ^io ) ( ^output-link ) --> ( ^|dtank.types.throttle| ) ( ^value 1.0 ) (write |moving| ) } sp {propose*wander*scan (state ^top ^parent ^name wander) ( ^io ) ( ^input-link ) ( ^|dtank.types.me| ) ( ^x ) ( ^tankHeading ) ( ^speedMPS ) ( ^y ) ( ^throttle ) ( ^ammunition ) ( ^turretHeading ) ( ^nationality ) ( ^fuel ) ( ^armor ) ( ^speedKPH ) --> ( ^operator + =) ( ^name scan) } sp {apply*wander*scan (state ^top ^name wander ^operator ) ( ^name scan) ( ^io ) ( ^output-link ) --> ( ^|dtank.types.turretHeading| ) ( ^value (exec rand |0,90,180,270,|) ) (write |scanning| ) } #------------------------------------------------------------------------------- #define retreat #------------------------------------------------------------------------------- sp {propose*initialize-retreat (state ^type state -^name) ( ^impasse no-change ^attribute operator) ( ^superstate ) ( ^top ) ( ^operator ) ( ^name impasse*retreatps) --> ( ^operator +) ( ^name initialize-retreat) ( ^top ) ( ^parent ) } sp {apply*initialize-retreat (state ^operator ) ( ^name initialize-retreat ^top ^parent ) ( ^io ) ( ^output-link ) --> ( ^name retreat) ( ^top ) ( ^parent ) } #define the rules... sp {propose*retreat*dodge (state ^top ^parent ^name retreat) ( ^io ) ( ^input-link ) ( ^|dtank.types.me| ) ( ^x ) ( ^tankHeading ) ( ^speedMPS ) ( ^y ) ( ^throttle ) ( ^ammunition ) ( ^turretHeading ) ( ^nationality ) ( ^fuel ) ( ^armor ) ( ^speedKPH ) --> ( ^operator + =) ( ^name dodge) } sp {apply*retreat*dodge (state ^top ^name retreat ^operator ) ( ^name dodge) ( ^io ) ( ^output-link ) --> ( ^|dtank.types.throttle| ) ( ^value (exec rand |1.0,-1.0,|) ) (write |dodging| ) }