ControlPanel BUTTONUP 4svSettingUp boolAllObjectsSetup() SAVEBOARD PLAYGAME }have xbeen %assigned behavior 4svUnitList "dead" pBehavior BUTTONUP boolAllObjectsSetup BUTTONUP boolAllObjectsSetup SAVEBOARD `PLAYGAME All objects have not been set up svSettingUp boolAllObjectsSetup pBehavior svUnitList Combat BUTTONUP "tank Help" BUTTONUP BUTTONUP tank Help ;**Z6 BUTTONUP 4svSettingUp INITGAME default BUTTONUP BUTTONUP j^INITGAME default svSettingUp Reset BUTTONUP 4svSettingUp "This will reset the way they were beginning Jcombat. It doesn't work yet." BUTTONUP BUTTONUP This will reset the objects to the way they were at the beginning of the last combat. It doesn't work yet. svSettingUp This used only the setup phase robots around BUTTONDOWN loc BEGINMOVEUNIT BUTTONSTILLDOWN CONTINUEMOVEUNIT BUTTONUP ENDMOVEUNIT UTTONDOWN BUTTONSTILLDOWN BUTTONDOWN BUTTONUP BUTTONDOWN HRBEGINMOVEUNIT BUTTONSTILLDOWN CONTINUEMOVEUNIT BUTTONUP ENDMOVEUNIT pBehavior pObjectEnergy This used only the setup phase robots around BUTTONDOWN loc BEGINMOVEUNIT BUTTONSTILLDOWN CONTINUEMOVEUNIT BUTTONUP ENDMOVEUNIT UTTONDOWN BUTTONSTILLDOWN BUTTONDOWN BUTTONUP BUTTONDOWN HRBEGINMOVEUNIT BUTTONSTILLDOWN CONTINUEMOVEUNIT BUTTONUP ENDMOVEUNIT pBehavior pObjectEnergy This used only the setup phase robots around BUTTONDOWN loc BEGINMOVEUNIT BUTTONSTILLDOWN CONTINUEMOVEUNIT BUTTONUP ENDMOVEUNIT UTTONDOWN BUTTONSTILLDOWN BUTTONDOWN BUTTONUP BUTTONDOWN HRBEGINMOVEUNIT BUTTONSTILLDOWN CONTINUEMOVEUNIT BUTTONUP ENDMOVEUNIT pBehavior pObjectEnergy This used only the setup phase robots around BUTTONDOWN loc BEGINMOVEUNIT BUTTONSTILLDOWN CONTINUEMOVEUNIT BUTTONUP ENDMOVEUNIT UTTONDOWN BUTTONSTILLDOWN BUTTONDOWN BUTTONUP BUTTONDOWN HRBEGINMOVEUNIT BUTTONSTILLDOWN CONTINUEMOVEUNIT BUTTONUP ENDMOVEUNIT pBehavior pObjectEnergy This used only the setup phase robots around BUTTONDOWN loc BEGINMOVEUNIT BUTTONSTILLDOWN CONTINUEMOVEUNIT BUTTONUP ENDMOVEUNIT UTTONDOWN BUTTONSTILLDOWN BUTTONDOWN BUTTONUP BUTTONDOWN HRBEGINMOVEUNIT BUTTONSTILLDOWN CONTINUEMOVEUNIT BUTTONUP ENDMOVEUNIT pBehavior pObjectEnergy This used only the setup phase robots around BUTTONDOWN loc BEGINMOVEUNIT BUTTONSTILLDOWN CONTINUEMOVEUNIT BUTTONUP ENDMOVEUNIT UTTONDOWN BUTTONSTILLDOWN BUTTONDOWN BUTTONUP BUTTONDOWN HRBEGINMOVEUNIT BUTTONSTILLDOWN CONTINUEMOVEUNIT BUTTONUP ENDMOVEUNIT R"F"pBehavior h"pObjectEnergy `#pObjectEnergy This used only the setup phase robots around BUTTONDOWN loc BEGINMOVEUNIT BUTTONSTILLDOWN CONTINUEMOVEUNIT BUTTONUP ENDMOVEUNIT UTTONDOWN BUTTONSTILLDOWN BUTTONDOWN BUTTONUP BUTTONDOWN HRBEGINMOVEUNIT BUTTONSTILLDOWN CONTINUEMOVEUNIT BUTTONUP ENDMOVEUNIT &pBehavior &pObjectEnergy This used only the setup phase robots around BUTTONDOWN loc BEGINMOVEUNIT BUTTONSTILLDOWN CONTINUEMOVEUNIT BUTTONUP ENDMOVEUNIT UTTONDOWN BUTTONSTILLDOWN BUTTONDOWN BUTTONUP BUTTONDOWN HRBEGINMOVEUNIT BUTTONSTILLDOWN CONTINUEMOVEUNIT BUTTONUP ENDMOVEUNIT *pBehavior +pObjectEnergy J-L/X This used only the setup phase robots around BUTTONDOWN loc BEGINMOVEUNIT BUTTONSTILLDOWN CONTINUEMOVEUNIT BUTTONUP ENDMOVEUNIT UTTONDOWN BUTTONSTILLDOWN BUTTONDOWN BUTTONUP BUTTONDOWN HRBEGINMOVEUNIT BUTTONSTILLDOWN CONTINUEMOVEUNIT BUTTONUP ENDMOVEUNIT j/^/pBehavior /pObjectEnergy This used only the setup phase robots around BUTTONDOWN loc BEGINMOVEUNIT BUTTONSTILLDOWN CONTINUEMOVEUNIT BUTTONUP ENDMOVEUNIT UTTONDOWN BUTTONSTILLDOWN BUTTONDOWN BUTTONUP BUTTONDOWN HRBEGINMOVEUNIT BUTTONSTILLDOWN CONTINUEMOVEUNIT BUTTONUP ENDMOVEUNIT 3pBehavior 3pObjectEnergy tank help BUTTONUP "tank help" BUTTONUP BUTTONUP tank help The Game of TankWarr This is a game of cellular automata. The cells or units in this game are tanks on a battlefield, firing at each other. There are two sides. Red and Blue. There are two phases to the game, Setup and Combat. During the Setup phase each player positions his units and defines their behavior. When the battle starts the tanks advance, firing on the enemy. The battle continues until one side has no tanks left. The purpose of this game is to let you try out various survival strategies and combat formations for your tank force. The Units. Each unit is a tank. At the beginning each tank has 125 units of energy. This energy is diminished each time the tank is hit. A unit also has a behavior characteristic (property, for those who have already OD'ed on ToolBook) that governs how it moves. A move consists of the following: the tank moves forward, fires at the closest enemy tank, and then moves back. The net motion on each turn is always forward, but the ratio between the two types of motion is governed by the behavior, and can be Aggressive (moves forward a lot more than back), Moderate (forward some, then back some) or Conservative (moves forward some, then back almost as much. If a unit gets to the end of the field it reverses its motion. Shots. Each shot starts out with 75 units of energy, but the further a shot travels the less energy it has. When its energy reaches zero it explodes harmlessly. A hit diminishes the target's energy by the amount of energy it has left. left. Large explosion Small explosion bullet :A"@lAr @6,-4 @"@44 YA(A8@80 @6,-4 ?-8,2 A-7,3 tX<"t$<\8 jA0A-7,3 @,B-8,2 OriginalUnit fTargetCoords bullet pObjectEnergy lObjectCenter Large explosion INSERTKILL lObjectCenter Small explosion pObjectEnergy svBulletEnergy svCurrentListPosition fHitEnergy fTarget BEGINMOVEUNIT svSettingUp svOldLoc fTarget CONTINUEMOVEUNIT svSettingUp svOldLoc fTarget ENDMOVEUNIT CONTINUEMOVEUNIT SETUNITPROPERTY svSettingUp fTarget SETUNITPROPERTY Make this unit Aggressive, Moderate, Conservative Agress Agress pRedUnits pBehavior vMoveDirection vStartPoint vMoves svMoveDirection svUnitMoves svSettingUp fTarget lObjectCenter large explosion bullet fExplosionObject fPoint INSERTKILL svUnitList svUnitsPerSide svLiveRed svLiveBlue fObject lObjectCenter vObjectBounds nearestTarget numDistanceToTarget vDistanceToTarget vThisTarget vOurTargetList vOurTarget svUnitsPerSide fTargetList fMyBounds numDistanceToTarget lObjectCenter lObjectCenter vCenter1 vCenter2 xDiff yDiff fBounds2 fBounds1 Battlefield Survival Strategies ControlPanel BUTTONUP 4svSettingUp boolAllObjectsSetup() PLAYGAME }have xbeen %assigned behavior 4svUnitList "dead" pBehavior BUTTONUP boolAllObjectsSetup BUTTONUP boolAllObjectsSetup `PLAYGAME All objects have not been set up svSettingUp boolAllObjectsSetup pBehavior svUnitList Combat BUTTONUP "tank Help" BUTTONUP BUTTONUP tank Help ;**Z6 BUTTONUP 4svSettingUp INITGAME default BUTTONUP BUTTONUP j^INITGAME default svSettingUp Reset BUTTONUP 4svSettingUp "This will reset the way they were beginning Jcombat. It doesn't work yet." BUTTONUP BUTTONUP This will reset the objects to the way they were at the beginning of the last combat. It doesn't work yet. svSettingUp This used only the setup phase robots around BUTTONDOWN loc BEGINMOVEUNIT BUTTONSTILLDOWN CONTINUEMOVEUNIT BUTTONUP ENDMOVEUNIT UTTONDOWN BUTTONSTILLDOWN BUTTONDOWN BUTTONUP BUTTONDOWN HRBEGINMOVEUNIT BUTTONSTILLDOWN CONTINUEMOVEUNIT BUTTONUP ENDMOVEUNIT pObjectEnergy This used only the setup phase robots around BUTTONDOWN loc BEGINMOVEUNIT BUTTONSTILLDOWN CONTINUEMOVEUNIT BUTTONUP ENDMOVEUNIT UTTONDOWN BUTTONSTILLDOWN BUTTONDOWN BUTTONUP BUTTONDOWN HRBEGINMOVEUNIT BUTTONSTILLDOWN CONTINUEMOVEUNIT BUTTONUP ENDMOVEUNIT pObjectEnergy This used only the setup phase robots around BUTTONDOWN loc BEGINMOVEUNIT BUTTONSTILLDOWN CONTINUEMOVEUNIT BUTTONUP ENDMOVEUNIT UTTONDOWN BUTTONSTILLDOWN BUTTONDOWN BUTTONUP BUTTONDOWN HRBEGINMOVEUNIT BUTTONSTILLDOWN CONTINUEMOVEUNIT BUTTONUP ENDMOVEUNIT pObjectEnergy This used only the setup phase robots around BUTTONDOWN loc BEGINMOVEUNIT BUTTONSTILLDOWN CONTINUEMOVEUNIT BUTTONUP ENDMOVEUNIT UTTONDOWN BUTTONSTILLDOWN BUTTONDOWN BUTTONUP BUTTONDOWN HRBEGINMOVEUNIT BUTTONSTILLDOWN CONTINUEMOVEUNIT BUTTONUP ENDMOVEUNIT pObjectEnergy This used only the setup phase robots around BUTTONDOWN loc BEGINMOVEUNIT BUTTONSTILLDOWN CONTINUEMOVEUNIT BUTTONUP ENDMOVEUNIT UTTONDOWN BUTTONSTILLDOWN BUTTONDOWN BUTTONUP BUTTONDOWN HRBEGINMOVEUNIT BUTTONSTILLDOWN CONTINUEMOVEUNIT BUTTONUP ENDMOVEUNIT pObjectEnergy This used only the setup phase robots around BUTTONDOWN loc BEGINMOVEUNIT BUTTONSTILLDOWN CONTINUEMOVEUNIT BUTTONUP ENDMOVEUNIT UTTONDOWN BUTTONSTILLDOWN BUTTONDOWN BUTTONUP BUTTONDOWN HRBEGINMOVEUNIT BUTTONSTILLDOWN CONTINUEMOVEUNIT BUTTONUP ENDMOVEUNIT !pObjectEnergy "pObjectEnergy This used only the setup phase robots around BUTTONDOWN loc BEGINMOVEUNIT BUTTONSTILLDOWN CONTINUEMOVEUNIT BUTTONUP ENDMOVEUNIT UTTONDOWN BUTTONSTILLDOWN BUTTONDOWN BUTTONUP BUTTONDOWN HRBEGINMOVEUNIT BUTTONSTILLDOWN CONTINUEMOVEUNIT BUTTONUP ENDMOVEUNIT %pObjectEnergy This used only the setup phase robots around BUTTONDOWN loc BEGINMOVEUNIT BUTTONSTILLDOWN CONTINUEMOVEUNIT BUTTONUP ENDMOVEUNIT UTTONDOWN BUTTONSTILLDOWN BUTTONDOWN BUTTONUP BUTTONDOWN HRBEGINMOVEUNIT BUTTONSTILLDOWN CONTINUEMOVEUNIT BUTTONUP ENDMOVEUNIT *pObjectEnergy B,D.X This used only the setup phase robots around BUTTONDOWN loc BEGINMOVEUNIT BUTTONSTILLDOWN CONTINUEMOVEUNIT BUTTONUP ENDMOVEUNIT UTTONDOWN BUTTONSTILLDOWN BUTTONDOWN BUTTONUP BUTTONDOWN HRBEGINMOVEUNIT BUTTONSTILLDOWN CONTINUEMOVEUNIT BUTTONUP ENDMOVEUNIT Z.pObjectEnergy This used only the setup phase robots around BUTTONDOWN loc BEGINMOVEUNIT BUTTONSTILLDOWN CONTINUEMOVEUNIT BUTTONUP ENDMOVEUNIT UTTONDOWN BUTTONSTILLDOWN BUTTONDOWN BUTTONUP BUTTONDOWN HRBEGINMOVEUNIT BUTTONSTILLDOWN CONTINUEMOVEUNIT BUTTONUP ENDMOVEUNIT 2pObjectEnergy tank help BUTTONUP "tank help" BUTTONUP BUTTONUP tank help The Game of TankWarr This is a game of cellular automata. The cells or units in this game are tanks on a battlefield, firing at each other. There are two sides. Red and Blue. There are two phases to the game, Setup and Combat. During the Setup phase each player positions his units and defines their behavior. When the battle starts the tanks advance, firing on the enemy. The battle continues until one side has no tanks left. The purpose of this game is to let you try out various survival strategies and combat formations for your tank force. The Units. Each unit is a tank. At the beginning each tank has 125 units of energy. This energy is diminished each time the tank is hit. A unit also has a behavior characteristic (property, for those who have already OD'ed on ToolBook) that governs how it moves. A move consists of the following: the tank moves forward, fires at the closest enemy tank, and then moves back. The net motion on each turn is always forward, but the ratio between the two types of motion is governed by the behavior, and can be Aggressive (moves forward a lot more than back), Moderate (forward some, then back some) or Conservative (moves forward some, then back almost as much. If a unit gets to the end of the field it reverses its motion. Shots. Each shot starts out with 75 units of energy, but the further a shot travels the less energy it has. When its energy reaches zero it explodes harmlessly. A hit diminishes the target's energy by the amount of energy it has left. left. Large explosion Small explosion bullet pObjectEnergy 4710.5,5187.5 pObjectEnergy 4870,5382.5 pObjectEnergy 4160,5375 pObjectEnergy 4295,5367.5 Explosion Improvements/modifications, etc. 1. Visual redesign - give the tanks eyes & a beak. Think about each tank having a little bar that shows how much energy it has left. Also it would have some way of letting you tell what its behavior is (a color patch somewhere would do nicely 2. Think about having the tanks move towards their targets, fire, & fall back. They would no linger be restricted to straight horizontal movement. 3. How can we make this look a little more interesting? Possibly we could have terrain, the tanks cannot shoot or see anything with a "Wall" in between. B D%@ `B|B| s Rmn t<(lv System `B|B| `B|B| ts Rmn Set up the targets pBlueUnits pRedUnits [pBehavior pObjectEnergy "bullet" PLAYGAME This main loop . It iterates through a units each side, ;fire & actually one fhalf UserHalt, x"dead" MOVEANDFIRE Check svUserHalt If we're here has won, figure out which Hfinding 1st non- & checking vWinner winner was " & fWhichSide, fThisUnit BulletCoords built- E * 30,0 nearest >'s coordinates vUnitBounds nearestTarget( lObjectCenter(fUnitBounds) svBulletCoords nfTarget fTargetCoords moves & Fchecks made a hit. always "underneath" other }. If Fthere M so ^ message. energy goes down ZvBulletEnergy, vSlope, xDiff, yDiff, xMove, yMove Figure how much H(x/y). dies no more + 1)/100 nt - objectFromPoint( <= 0 SMALLEXPLOSION ,fHitEnergy sent a hit ( over {) happens 4svBulletEnergy, svCurrentListPosition pObjecttEnergy , blow BANG "Big explosion", INSERTKILL used only setup phase robots around BEGINMOVEUNIT loc, < OldLoc svOldLoc CONTINUEMOVEUNIT ENDMOVEUNIT SETUNITPROPERTY 4svMoveDirection, ZvStartPoint, vMoves u board we coming "Make Aggressive, Moderate, Conservative" \ f"Agress" + 1 magnitude, adjust fPoint, fExplosionObject fObject vObjectBounds input: containing output: contining coords Zx1,y1,x2,y2 ((x2 - x1)/2) + x1,((y2 - y1)/2) fMyBounds,fTargetList ZvDistanceToTarget, vThisTarget, vOurTargetList distance, minimum numDistanceToTarget( Kt fBounds1, fBounds2 ZvCenter1,vCenter2, between =' centers. ENTERBOOK BEGINMOVEUNIT PLAYGAME CONTINUEMOVEUNIT ENDMOVEUNIT MOVEANDFIRE SETUNITPROPERTY INITGAME INSERTKILL lObjectCenter nearestTarget numDistanceToTarget ENTERBOOK j^INITGAME INITGAME 8,-2,7,-3,6,-4 pBlueUnits pRedUnits pBehavior pObjectEnergy bullet vCurrentObject vStartEnergy svBulletDecrement svBulletMoveIncrement svUnitMoves svSettingUp svUnitsPerSide svMoveUnits svUnitList svHitEnergy PLAYGAME bullet MOVEANDFIRE MOVEANDFIRE Side 2 Side 1 The winner was vWinner i:to1 vUnits svSettingUp svUnitList svUserHalt svUnitsPerSide MOVEANDFIRE pBehavior nearestTarget nearestTarget lObjectCenter bullet lObjectCenter pBehavior fTarget fUnitBounds vUnitBounds svUnitsPerSide svUnitList svBulletCoords fThisUnit fWhichSide bullet SMALLEXPLOSION vBulletEnergy vSlope xDiff yDiff xMove yMove svBulletMoveIncrement svUnitList svBulletDecrement svBulletCoords svHitEnergy fTargetCoords pObjecttEnergy lObjectCenter clear Big explosion INSERTKILL pObjectEnergy svBulletEnergy svCurrentListPosition fHitEnergy fTarget BEGINMOVEUNIT svSettingUp svOldLoc fTarget CONTINUEMOVEUNIT svSettingUp svOldLoc fTarget ENDMOVEUNIT CONTINUEMOVEUNIT SETUNITPROPERTY svSettingUp fTarget SETUNITPROPERTY Make this unit Aggressive, Moderate, Conservative Agress Agress pRedUnits pBehavior vMoveDirection vStartPoint vMoves svMoveDirection svUnitMoves svSettingUp fTarget fExplosionObject fPoint INSERTKILL svUnitList fObject lObjectCenter vObjectBounds nearestTarget numDistanceToTarget vOurTarget vDistanceToTarget vThisTarget vOurTargetList svUnitsPerSide fTargetList fMyBounds numDistanceToTarget lObjectCenter lObjectCenter vCenter1 vCenter2 xDiff yDiff fBounds2 fBounds1 group id 826 of page id 0,group id 1085 of page id 0,group id 1094 of page id 0,group id 1103 of page id 0,group id 1112 of page id 0 j'pRedUnits %group id 882 of page id 0 #id 835 of page id 0,group id 844 of page id 0,group id 853 of page id 0,group id 862 of page id 0 f$Z#pBlueUnits #group id 826 of page id 0,group id 933 of page id 0,group id 942 of page id 0,group id 951 of page id 0,group id 960 of page id 0 %pBlueObjects %group id 826 of page id 0,group id 1009 of page id 0,group id 1018 of page id 0,group id 1027 of page id 0,group id 1036 of page id 0 %R&pRedObjects &V#:&group id 882 of page id 0,group id 1046 of page id 0,group id 1056 of page id 0,group id 1066 of page id 0,group id 1076 of page id 0 tgroup id 882 of page id 0,group id 1046 of page id 0,group id 1056 of page id 0,group id 1066 of page id 0,group id 1076 of page id 0 group id 882 of page id 0,group id 1122 of page id 0,group id 1132 of page id 0,group id 1142 of page id 0,group id 1152 of page id 0 "(<( Llv '@(@( 's Rmn pObjectEnergy 800, (i - )*800 7000,i*800 "bullet" "large explosion" "small PLAYGAME This main loop . It iterates through a units each side, ;fire & actually one fhalf LiveRed, svLiveBlue svLiveRed x"dead" MOVEANDFIRE If we're here has won, figure out which Hfinding 1st non- & checking vWinner "Red" winner was " & fWhichSide, fThisUnit BulletCoords, built- nearest >'s coordinates vUnitBounds nearestTarget( lObjectCenter( svBulletCoords tor,0 fThisunit < 0 > 8000 fTargetCoords, fOriginalUnit moves & Fchecks made a hit. always "underneath" other }. If Fthere M so ^ message. energy goes down ZvBulletEnergy, vRatio, xDiff, yDiff, xMove, yMove Figure how much H(x/y). dies no more nt - objectFromPoint( <= 0 BANG ,"Small ,fHitEnergy sent a hit ( over {) happens 4svBulletEnergy, svCurrentListPosition ZvObj , blow ,"Large INSERTKILL used only setup phase robots around BEGINMOVEUNIT loc, OldLoc svOldLoc CONTINUEMOVEUNIT ENDMOVEUNIT SETUNITPROPERTY 4svMoveDirection, ZvStartPoint, vMoves board we coming "Make Aggressive, Moderate, Conservative" \ f"Agress" + 1 magnitude, adjust fPoint, fExplosionObject fObject Insert flag having >0 live same vObjectBounds input: containing output: contining coords Zx1,y1,x2,y2 ((x2 - x1)/2) + x1,((y2 - y1)/2 + y1) fMyBounds,fTargetList ZvDistanceToTarget, vThisTarget, vOurTargetList, distance, minimum numDistanceToTarget( Nt fBounds1, fBounds2 ZvCenter1,vCenter2, between =' centers. ENTERBOOK BEGINMOVEUNIT PLAYGAME CONTINUEMOVEUNIT ENDMOVEUNIT MOVEANDFIRE SETUNITPROPERTY INITGAME INSERTKILL lObjectCenter nearestTarget numDistanceToTarget ENTERBOOK tank help j^INITGAME INITGAME 8,-2,7,-3,6,-4 pBlueUnits pRedUnits pBehavior pObjectEnergy bullet large explosion small explosion svUserHalt vCurrentObject vStartEnergy svWin svBulletDecrement svBulletMoveIncrement svUnitMoves svMoveConversionFactor svSettingUp svUnitsPerSide svMoveUnits svUnitList svHitEnergy PLAYGAME bullet MOVEANDFIRE MOVEANDFIRE The winner was vWinner i:to1 vUnits svUnitsPerSide svLiveRed svLiveBlue svSettingUp svUnitList svUserHalt MOVEANDFIRE pBehavior nearestTarget nearestTarget lObjectCenter bullet lObjectCenter pBehavior pBehavior fThisunit pBehavior pBehavior pBehavior pBehavior vUnitBounds svUnitsPerSide svUnitList svBulletCoords svMoveConversionFactor fThisUnit fWhichSide bullet bullet button Small explosion vBulletEnergy vRatio xDiff yDiff xMove yMove svBulletMoveIncrement svUnitList svBulletDecrement svBulletCoords svHitEnergy fOriginalUnit fTargetCoords bullet pObjectEnergy lObjectCenter Large explosion INSERTKILL lObjectCenter Small explosion pObjectEnergy svBulletEnergy svCurrentListPosition fHitEnergy fTarget BEGINMOVEUNIT svSettingUp svOldLoc fTarget CONTINUEMOVEUNIT svSettingUp svOldLoc fTarget ENDMOVEUNIT CONTINUEMOVEUNIT SETUNITPROPERTY svSettingUp fTarget SETUNITPROPERTY Make this unit Aggressive, Moderate, Conservative Agress Agress pRedUnits pBehavior vMoveDirection vStartPoint vMoves svMoveDirection svUnitMoves svSettingUp fTarget lObjectCenter large explosion bullet fExplosionObject fPoint INSERTKILL svUnitList svUnitsPerSide svLiveRed svLiveBlue fObject lObjectCenter vObjectBounds nearestTarget numDistanceToTarget vDistanceToTarget vThisTarget vOurTargetList vOurTarget svUnitsPerSide fTargetList fMyBounds numDistanceToTarget lObjectCenter lObjectCenter vCenter1 vCenter2 xDiff yDiff fBounds2 fBounds1 Battlefield Survival Strategies :,[U4 Tankwar, a game cellular automata. Each player ( programs his pieces & Fthey fight ENTERBOOK INITGAME The sv-Moves _are lists that have _ conservative, moderate, radical namounts 4svSettingUp, svUnitsPerSide, svMoveUnits, svUnitList, svHitEnergy 4svBulletDecrement, svBulletMoveIncrement, svUnitMoves, svMoveConversionFactor ZvCurrentObject, vStartEnergy, svWin MainWindow -5,-5,645,485 "8,-2,7,-3,6,-4" svUserHalt Set up the targets pBlueUnits pRedUnits vThisGroup [pBehavior "hex" 0,75.3125,0 pObjectEnergy 800, (i - )*800 7000,i*800 HIDESTUFF PLAYGAME main loop . It iterates through a units each side, ;fire & actually one fhalf LiveRed, svLiveBlue svLiveRed x"dead" MOVEANDFIRE If we're here has won, figure out which Hfinding 1st non- & checking vWinner "Red" winner was " & "controlPanel" fWhichSide, fThisUnit BulletCoords, built- nearest >'s coordinates vUnitBounds nearestTarget( lObjectCenter( svBulletCoords "bullet" tor,0 fThisunit < 0 > 8000 fTargetCoords, fOriginalUnit moves & Fchecks made a hit. always "underneath" other }. If Fthere M so ^ message. energy goes down ZvBulletEnergy, vRatio, xDiff, yDiff, xMove, yMove Figure how much H(x/y). dies no more nt - objectFromPoint( <= 0 BANG ,"Small explosion" ,fHitEnergy sent a hit ( over {) happens 4svBulletEnergy, svCurrentListPosition ZvObj , blow ,"Large INSERTKILL used only setup phase robots around BEGINMOVEUNIT loc, OldLoc svOldLoc CONTINUEMOVEUNIT ENDMOVEUNIT SETUNITPROPERTY 4svMoveDirection, ZvStartPoint, vMoves, vColor board we coming "Make Aggressive, Moderate, Conservative" \ f"Agress" + 1 magnitude, adjust fPoint, fExplosionObject "large fObject Insert flag having >0 live same "small "tank help" vObjectBounds input: containing output: contining coords Zx1,y1,x2,y2 ((x2 - x1)/2) + x1,((y2 - y1)/2 + y1) fMyBounds,fTargetList ZvDistanceToTarget, vThisTarget, vOurTargetList, distance, minimum numDistanceToTarget( Nt fBounds1, fBounds2 ZvCenter1,vCenter2, between =' centers. ENTERBOOK BEGINMOVEUNIT PLAYGAME CONTINUEMOVEUNIT ENDMOVEUNIT MOVEANDFIRE SETUNITPROPERTY INITGAME INSERTKILL HIDESTUFF lObjectCenter nearestTarget numDistanceToTarget ENTERBOOK j^INITGAME INITGAME 8,-2,7,-3,6,-4 pBlueUnits pRedUnits pBehavior pObjectEnergy HIDESTUFF j:to1 vThisGroup svUserHalt vCurrentObject vStartEnergy svWin svBulletDecrement svBulletMoveIncrement svUnitMoves svMoveConversionFactor svSettingUp svUnitsPerSide svMoveUnits svUnitList svHitEnergy PLAYGAME HIDESTUFF MOVEANDFIRE MOVEANDFIRE The winner was controlPanel vWinner i:to1 vUnits svUnitsPerSide svLiveRed svLiveBlue svSettingUp svUnitList svUserHalt MOVEANDFIRE pBehavior nearestTarget nearestTarget lObjectCenter bullet lObjectCenter pBehavior pBehavior fThisunit pBehavior pBehavior pBehavior pBehavior vUnitBounds svUnitsPerSide svUnitList svBulletCoords svMoveConversionFactor fThisUnit fWhichSide bullet bullet button Small explosion vBulletEnergy vRatio xDiff yDiff xMove yMove svBulletMoveIncrement svUnitList svBulletDecrement svBulletCoords svHitEnergy fOriginalUnit fTargetCoords bullet pObjectEnergy lObjectCenter Large explosion INSERTKILL lObjectCenter Small explosion pObjectEnergy svBulletEnergy svCurrentListPosition fHitEnergy fTarget BEGINMOVEUNIT svSettingUp svOldLoc fTarget CONTINUEMOVEUNIT svSettingUp svOldLoc fTarget ENDMOVEUNIT CONTINUEMOVEUNIT SETUNITPROPERTY svSettingUp fTarget SETUNITPROPERTY Make this unit Aggressive, Moderate, Conservative Agress Agress 0,50,100 60,50,100 120,50,100 pRedUnits pBehavior vMoveDirection vStartPoint vMoves vColor svMoveDirection svUnitMoves svSettingUp fTarget lObjectCenter large explosion bullet fExplosionObject fPoint INSERTKILL svUnitList svUnitsPerSide svLiveRed svLiveBlue fObject HIDESTUFF bullet large explosion small explosion tank help lObjectCenter vObjectBounds nearestTarget numDistanceToTarget vDistanceToTarget vThisTarget vOurTargetList vOurTarget svUnitsPerSide fTargetList fMyBounds numDistanceToTarget lObjectCenter lObjectCenter vCenter1 vCenter2 xDiff yDiff fBounds2 fBounds1 `D|D| Tankwar, a game cellular automata. Each player ( programs his pieces & Fthey fight ENTERBOOK INITGAME The sv-Moves _are lists that have _ conservative, moderate, radical namounts 4svSettingUp, svUnitsPerSide, svMoveUnits, svUnitList, svHitEnergy 4svBulletDecrement, svBulletMoveIncrement, svUnitMoves, svMoveConversionFactor ZvCurrentObject, vStartEnergy, svWin MainWindow -5,-5,645,485 "8,-2,7,-3,6,-4" svUserHalt Set up the targets pBlueUnits pRedUnits vThisGroup [pBehavior "hex" 0,75.3125,0 pObjectEnergy 800, (i - )*800 7000,i*800 HIDESTUFF PLAYGAME main loop . It iterates through a units each side, ;fire & actually one fhalf LiveRed, svLiveBlue svLiveRed x"dead" MOVEANDFIRE If we're here has won, figure out which Hfinding 1st non- & checking vWinner "Red" winner was " & "controlPanel" fWhichSide, fThisUnit BulletCoords, built- nearest >'s coordinates vUnitBounds nearestTarget( lObjectCenter( svBulletCoords "bullet" tor,0 fThisunit < 0 > 8000 fTargetCoords, fOriginalUnit moves & Fchecks made a hit. always "underneath" other }. If Fthere M so ^ message. energy goes down ZvBulletEnergy, vRatio, xDiff, yDiff, xMove, yMove Figure how much H(x/y). dies no more nt - objectFromPoint( <= 0 BANG ,"Small explosion" ,fHitEnergy sent a hit ( over {) happens 4svBulletEnergy, svCurrentListPosition ZvObj , blow ,"Large INSERTKILL used only setup phase robots around BEGINMOVEUNIT loc, OldLoc svOldLoc CONTINUEMOVEUNIT ENDMOVEUNIT SETUNITPROPERTY 4svMoveDirection, ZvStartPoint, vMoves, vColor board we coming "Make Aggressive, Moderate, Conservative" \ f"Agress" + 1 magnitude, adjust fPoint, fExplosionObject "large fObject Insert flag having >0 live same SAVEBOARD "small "tank help" vObjectBounds input: containing output: contining coords Zx1,y1,x2,y2 ((x2 - x1)/2) + x1,((y2 - y1)/2 + y1) fMyBounds,fTargetList ZvDistanceToTarget, vThisTarget, vOurTargetList, distance, minimum numDistanceToTarget( Nt fBounds1, fBounds2 ZvCenter1,vCenter2, between =' centers. RBOOK BEGINMOVEUNIT PLAYGAME CONTINUEMOVEUNIT ENDMOVEUNIT MOVEANDFIRE SETUNITPROPERTY INITGAME INSERTKILL SAVEBOARD ENTERBOOK HIDESTUFF lObjectCenter nearestTarget numDistanceToTarget ENTERBOOK j^INITGAME INITGAME 8,-2,7,-3,6,-4 pBlueUnits pRedUnits pBehavior pObjectEnergy HIDESTUFF j:to1 vThisGroup svUserHalt vCurrentObject vStartEnergy svWin svBulletDecrement svBulletMoveIncrement svUnitMoves svMoveConversionFactor svSettingUp svUnitsPerSide svMoveUnits svUnitList svHitEnergy PLAYGAME HIDESTUFF MOVEANDFIRE MOVEANDFIRE The winner was controlPanel vWinner i:to1 vUnits svUnitsPerSide svLiveRed svLiveBlue svSettingUp svUnitList svUserHalt MOVEANDFIRE pBehavior nearestTarget nearestTarget lObjectCenter bullet lObjectCenter pBehavior pBehavior fThisunit pBehavior pBehavior pBehavior pBehavior vUnitBounds svUnitsPerSide svUnitList svBulletCoords svMoveConversionFactor fThisUnit fWhichSide bullet bullet button Small explosion vBulletEnergy vRatio xDiff yDiff xMove yMove svBulletMoveIncrement svUnitList svBulletDecrement svBulletCoords svHitEnergy fOriginalUnit fTargetCoords bullet pObjectEnergy lObjectCenter Large explosion INSERTKILL lObjectCenter Small explosion pObjectEnergy svBulletEnergy svCurrentListPosition fHitEnergy fTarget BEGINMOVEUNIT svSettingUp svOldLoc fTarget CONTINUEMOVEUNIT svSettingUp svOldLoc fTarget ENDMOVEUNIT CONTINUEMOVEUNIT SETUNITPROPERTY svSettingUp fTarget SETUNITPROPERTY Make this unit Aggressive, Moderate, Conservative Agress Agress 0,50,100 60,50,100 120,50,100 pRedUnits pBehavior vMoveDirection vStartPoint vMoves vColor svMoveDirection svUnitMoves svSettingUp fTarget lObjectCenter large explosion bullet fExplosionObject fPoint INSERTKILL svUnitList svUnitsPerSide svLiveRed svLiveBlue fObject SAVEBOARD HIDESTUFF bullet large explosion small explosion tank help lObjectCenter vObjectBounds nearestTarget numDistanceToTarget vDistanceToTarget vThisTarget vOurTargetList vOurTarget svUnitsPerSide fTargetList fMyBounds numDistanceToTarget lObjectCenter lObjectCenter vCenter1 vCenter2 xDiff yDiff fBounds2 fBounds1 (pObjectEnergy This used only the setup phase robots around BUTTONDOWN loc BEGINMOVEUNIT BUTTONSTILLDOWN CONTINUEMOVEUNIT BUTTONUP ENDMOVEUNIT UTTONDOWN BUTTONSTILLDOWN BUTTONDOWN BUTTONUP BUTTONDOWN HRBEGINMOVEUNIT BUTTONSTILLDOWN CONTINUEMOVEUNIT BUTTONUP ENDMOVEUNIT 6-pObjectEnergy `/b1X This used only the setup phase robots around BUTTONDOWN loc BEGINMOVEUNIT BUTTONSTILLDOWN CONTINUEMOVEUNIT BUTTONUP ENDMOVEUNIT UTTONDOWN BUTTONSTILLDOWN BUTTONDOWN BUTTONUP BUTTONDOWN HRBEGINMOVEUNIT BUTTONSTILLDOWN CONTINUEMOVEUNIT BUTTONUP ENDMOVEUNIT x1pObjectEnergy tank help BUTTONUP "tank help" BUTTONUP BUTTONUP tank help The Game of TankWarr This is a game of cellular automata. The cells or units in this game are tanks on a battlefield, firing at each other. There are two sides. Red and Blue. There are two phases to the game, Setup and Combat. During the Setup phase each player positions his units and defines their behavior. When the battle starts the tanks advance, firing on the enemy. The battle continues until one side has no tanks left. The purpose of this game is to let you try out various survival strategies and combat formations for your tank force. The Units. Each unit is a tank. At the beginning each tank has 125 units of energy. This energy is diminished each time the tank is hit. A unit also has a behavior characteristic (property, for those who have already OD'ed on ToolBook) that governs how it moves. A move consists of the following: the tank moves forward, fires at the closest enemy tank, and then moves back. The net motion on each turn is always forward, but the ratio between the two types of motion is governed by the behavior, and can be Aggressive (moves forward a lot more than back), Moderate (forward some, then back some) or Conservative (moves forward some, then back almost as much. If a unit gets to the end of the field it reverses its motion. Shots. Each shot starts out with 75 units of energy, but the further a shot travels the less energy it has. When its energy reaches zero it explodes harmlessly. A hit diminishes the target's energy by the amount of energy it has left. left. Large explosion Small explosion Browser SHOWOBJECT 4svBrowseAction "Show "Click on {'s ID "Browser message" PRINTFIELD "Print Field" 's ID GETOBJECTSCRIPT "Get Script" {'s ID work ADJUSTPARAMS "Adjust Parameters" {'s ID CLEARBROWSERFIELDS "Object ID" )Bounds" "browser title" INTFIELD SHOWOBJECT GETOBJECTSCRIPT ADJUSTPARAMS PRINTFIELD CLEARBROWSERFIELDS SHOWOBJECT Show object Click on an object's ID to show it Browser message svBrowseAction PRINTFIELD Print Field Click on a field's ID to print its text Browser message svBrowseAction GETOBJECTSCRIPT Get Script Click on an object's ID to work with its script Browser message svBrowseAction ADJUSTPARAMS Adjust Parameters Click on an object's ID to work with its bounds Browser message svBrowseAction CLEARBROWSERFIELDS Object ID Object name Object properties Object Bounds browser message Browser title DJxDpBrowseHelp This is the object browser. The four fields show the following information about the current page: Object ID The unique id of an object is shown. Object name If the object has a name it will appear here Object Properties The status of the following four properties is shown here; script, visible, userProperties, and layer. The first three are Yes/No flags, the layer is by number Object bounds The bounds of the object are shown. If an item in the list is negative, it will be surrounded by angle brackets. The following functions are available through the buttons on the browser. They all work the same way: first click on the function button to set the mode, then click on the object's line in the Object ID field. Get script An object's script can be printed, edited with a DOS text editor (you must set this up through the tools configuration menu first), or put into a field on the screen. Print field The text of a field can be printed. Show object An invisible object can be shown. Adjust Bounds/Vertices You can adjust the size and shape of an object without ungrouping. Other features. The black diamond in the upper right of the control panel is a move handle - click on it and you can drag the browser around. The small box in the upper left of the control panel is the go-away button, and a click there will remove the browser. The two black triangles over the bounds field are scroll buttons for all four fields. ^Jpbrowsefieldnames object id,object name,object properties,object bounds Browser message Show Obj BUTTONUP SHOWOBJECT "browser" BUTTONUP BUTTONUP SHOWOBJECT browser Show Obj Get Script BUTTONUP GETOBJECTSCRIPT "browser" BUTTONUP BUTTONUP GETOBJECTSCRIPT browser Get Script ToolsHelp BUTTONUP PUTHELP pBrowseHelp "Browser" BUTTONUP BUTTONUP KPUTHELP Browser pBrowseHelp Adjust Bounds BUTTONUP "This feature ximplemented yet." ADJUSTPARAMS "Browser" BUTTONUP BUTTONUP This feature is not implemented yet. $ADJUSTPARAMS Browser Adj Bnds/vert Print Field BUTTONUP PRINTFIELD "browser" BUTTONUP BUTTONUP PRINTFIELD browser Print Field Object Browser Control Panel BUTTONDOUBLECLICK BUTTONUP B"Dismiss Browser Control" BUTTONDOUBLECLICK BUTTONDOUBLECLICK BUTTONUP Dismiss Browser Control BUTTONUP 4svToolsName ZvThisBook, vStrlen Check be sure we are xdeleting 4tools vStrLen the separator colon starting Vi + 1 "You your ,mode delete "Browser" BUTTONUP BUTTONUP vStrLen vStrLen You are in your system tools book - go to author mode to delete this object. Browser clear vThisBook vStrlen svToolsName Button BUTTONUP BUTTONUP BUTTONUP BUTTONUP BUTTONDOWN loc 4svOldLoc BUTTONSTILLDOWN "browser" BUTTONUP default UTTONDOWN BUTTONSTILLDOWN BUTTONDOWN BUTTONUP BUTTONDOWN BUTTONSTILLDOWN svOldLoc BUTTONSTILLDOWN browser svOldLoc BUTTONUP BUTTONSTILLDOWN default Object Id Name Sc Vi P Ly Bounds Browser Title 15 Objects on page 1 of Book "C:\EGYPT\TANK.TBK" Object ID BUTTONUP loc 4svBrowseAction ZvThisObject Clear the hierarchy indicators "Get Script" GETSCRIPTS2 "Print "Can only PRINTTEXT "Show "Adjust Parameters" ADJUSTOBJECT BUTTONUP BUTTONUP textFromPoint Get Script GETSCRIPTS2 Print field field recordField Can only print text of field or recordField. PRINTTEXT Show object Adjust Parameters Parameter group ADJUSTOBJECT Parameter group vThisObject svBrowseAction group id 736 >roundedrectangle id 735 >button id 172 >button id 198 >button id 199 group id 826 >roundedrectangle id 819 >roundedrectangle id 820 >irregularpolygon id 821 >polygon id 822 >roundedrectangle id 823 >roundedrectangle id 824 >line id 825 group id 882 >roundedrectangle id 874 >roundedrectangle id 875 >irregularpolygon id 876 >polygon id 877 >line id 878 >rectangle id 879 >roundedrectangle id 880 >roundedrectangle id 881 ellipse id 4 group id 1085 >roundedrectangle id 1078 >roundedrectangle id 1079 >irregularpolygon id 1080 >polygon id 1081 >roundedrectangle id 1082 >roundedrectangle id 1083 >line id 1084 group id 1094 >roundedrectangle id 1087 >roundedrectangle id 1088 >irregularpolygon id 1089 >polygon id 1090 >roundedrectangle id 1091 >roundedrectangle id 1092 >line id 1093 group id 1103 >roundedrectangle id 1096 >roundedrectangle id 1097 >irregularpolygon id 1098 >polygon id 1099 >roundedrectangle id 1100 >roundedrectangle id 1101 >line id 1102 group id 1112 >roundedrectangle id 1105 >roundedrectangle id 1106 >irregularpolygon id 1107 >polygon id 1108 >roundedrectangle id 1109 >roundedrectangle id 1110 >line id 1111 group id 1122 >roundedrectangle id 1114 >roundedrectangle id 1115 >irregularpolygon id 1116 >polygon id 1117 >line id 1118 >rectangle id 1119 >roundedrectangle id 1120 >roundedrectangle id 1121 group id 1132 >roundedrectangle id 1124 >roundedrectangle id 1125 >irregularpolygon id 1126 >polygon id 1127 >line id 1128 >rectangle id 1129 >roundedrectangle id 1130 >roundedrectangle id 1131 group id 1142 >roundedrectangle id 1134 >roundedrectangle id 1135 >irregularpolygon id 1136 >polygon id 1137 >line id 1138 >rectangle id 1139 >roundedrectangle id 1140 >roundedrectangle id 1141 group id 1152 >roundedrectangle id 1144 >roundedrectangle id 1145 >irregularpolygon id 1146 >polygon id 1147 >line id 1148 >rectangle id 1149 >roundedrectangle id 1150 >roundedrectangle id 1151 group id 778 >roundedrectangle id 687 >roundedrectangle id 776 >button id 688 >field id 689 >group id 777 >>rectangle id 692 >>field id 691 group id 208 >irregularpolygon id 206 >irregularpolygon id 207 group id 204 >irregularpolygon id 202 >irregularpolygon id 203 Object name Control Panel bullet tank help Large explosion Small explosion Object Properties N Y N 1 N Y N 1 Y Y N 1 Y Y N 1 Y Y N 1 Y Y Y 2 N Y N 1 N Y N 1 N Y N 1 N Y N 1 N Y N 1 N Y N 1 N Y N 1 Y Y Y 3 N Y Y 1 N Y N 1 N Y N 1 N Y N 1 N Y N 1 N Y N 1 N Y N 1 N Y N 1 N N N 4 Y Y Y 5 N Y N 1 N Y N 1 N Y N 1 N Y N 1 N Y N 1 N Y N 1 N Y N 1 Y Y Y 6 N Y N 1 N Y N 1 N Y N 1 N Y N 1 N Y N 1 N Y N 1 N Y N 1 Y Y Y 7 N Y N 1 N Y N 1 N Y N 1 N Y N 1 N Y N 1 N Y N 1 N Y N 1 Y Y Y 8 N Y N 1 N Y N 1 N Y N 1 N Y Y 1 N Y N 1 N Y N 1 N Y N 1 Y Y Y 9 N Y Y 1 N Y N 1 N Y N 1 N Y N 1 N Y N 1 N Y N 1 N Y N 1 N Y N 1 Y Y Y 10 N Y Y 1 N Y N 1 N Y N 1 N Y N 1 N Y N 1 N Y N 1 N Y N 1 N Y N 1 Y Y Y 11 N Y Y 1 N Y N 1 N Y N 1 N Y N 1 N Y N 1 N Y N 1 N Y N 1 N Y N 1 Y Y Y 12 N Y Y 1 N Y N 1 N Y N 1 N Y N 1 N Y N 1 N Y N 1 N Y N 1 N Y N 1 N N N 13 N N N 1 N N N 1 Y N N 1 N N N 1 N N N 1 N N N 1 N N N 1 N N N 14 N N N 1 N N N 1 N N N 15 N N N 1 N N N 1 Object Bounds 1860,5595,7110,6210 1860,5595,7110,6210 3675,5685,5265,6150 1980,5685,3570,6150 5400,5685,6990,6150 800,800,1695,1565 800,950,1400,1025 800,1325,1400,1400 965,800,1625,1565 990,1030,1320,1314 1350,1090,1425,1150 1350,1195,1425,1255 975,985,1695,985 7000,800,7996,1565 7505,950,7996,1025 7505,1325,7996,1400 7040,800,7580,1565 7700,1025,7970,1309 7000,1180,7705,1180 7465,955,7495,1405 7270,1075,7360,1135 7270,1225,7375,1285 818,4963,953,5113 800,1600,1695,2365 800,1750,1400,1825 800,2125,1400,2200 965,1600,1625,2365 990,1830,1320,2114 1350,1890,1425,1950 1350,1995,1425,2055 975,1785,1695,1785 800,2400,1695,3165 800,2550,1400,2625 800,2925,1400,3000 965,2400,1625,3165 990,2630,1320,2914 1350,2690,1425,2750 1350,2795,1425,2855 975,2585,1695,2585 800,3200,1695,3965 800,3350,1400,3425 800,3725,1400,3800 965,3200,1625,3965 990,3430,1320,3714 1350,3490,1425,3550 1350,3595,1425,3655 975,3385,1695,3385 800,4000,1695,4765 800,4150,1400,4225 800,4525,1400,4600 965,4000,1625,4765 990,4230,1320,4514 1350,4290,1425,4350 1350,4395,1425,4455 975,4185,1695,4185 7000,1600,7996,2365 7505,1750,7996,1825 7505,2125,7996,2200 7040,1600,7580,2365 7700,1825,7970,2109 7000,1980,7705,1980 7465,1755,7495,2205 7270,1875,7360,1935 7270,2025,7375,2085 7000,2400,7996,3165 7505,2550,7996,2625 7505,2925,7996,3000 7040,2400,7580,3165 7700,2625,7970,2909 7000,2780,7705,2780 7465,2555,7495,3005 7270,2675,7360,2735 7270,2825,7375,2885 7000,3200,7996,3965 7505,3350,7996,3425 7505,3725,7996,3800 7040,3200,7580,3965 7700,3425,7970,3709 7000,3580,7705,3580 7465,3355,7495,3805 7270,3475,7360,3535 7270,3625,7375,3685 7000,4000,7996,4765 7505,4150,7996,4225 7505,4525,7996,4600 7040,4000,7580,4765 7700,4225,7970,4509 7000,4380,7705,4380 7465,4155,7495,4605 7270,4275,7360,4335 7270,4425,7375,4485 1095,525,8370,5310 1095,525,8370,5310 1170,585,8325,5250 5730,4545,7440,5055 1995,885,7410,1620 1465,1305,8045,4215 1465,1305,7800,4215 1465,1305,8045,4215 1528,1881,3008,3806 1528,1881,3008,3806 2034,2457,2726,3497 1136,51,1721,546 1136,51,1721,546 1336,199,1609,467 BUTTONDOWN ZvThisField, vTheseFields pBrowseFieldNames Browser BUTTONDOWN BUTTONDOWN pBrowseFieldNames field Browser vThisField vTheseFields BUTTONDOWN ZvThisField, vTheseFields,vScroll pBrowseFieldNames Browser y > 15 BUTTONDOWN BUTTONDOWN pBrowseFieldNames field Browser vThisField vTheseFields vScroll