The .shoot command is one of the most vital in DB. With it a bot can feed, dispose of waste, shoot poison or venom, and affect another bots memory.
Basics Whenever a non zero value is stored in .shoot, a shot is produced. This shot by default fires directly along the bot's eye's vector (that is, which direction it's looking). The shot's basic strength and range are determined by a bot's body.
Shot Types Feeding Shots -1 - Energy Shots -2 - Give energy Shoot, bread and butter feeding type -6 - Body Shots Waste Poison and Venom X - Poison Shots(fired automatically at attacker provided defender has poison, cannot be fired manually through the DNA) ? - Venom Shots(can be fired at other bot provided venom stored) -4 - Waste Shots(coupled with .shootval to determine waste size) Memory shots By storing positive numbers in .shoot another bot's memory can be overwritten by what's written in .shootval. This can be used to either mess up another bot or to exchange some vital information between bots.
Here's how you'd make another bot turn. Light's Icarus used this to dominate F2 league for a while.
cond 'you figure it out 'Icarus fires if:
- .shup -2 !=
start .aimdx .shoot store 314 .shootval store stop
This will make any bot that you hit turn 90 degrees to the right.
Defenses and Attacking For 2.36 and later, check out How defenses and attacks work ?
Advanced Uses of Shootval As of 2.36, you may 'power up' a shot's strength and range.
Storing a negative value in .shootval will make body shots (-6) and energy shots (-2) have a longer range.
Storing positive values in .shootval will make body shots (-6) and energy shots (-2) become more powerful.
The multiplier is roughly log2(.shootval). That's log base 2. So spend 4 energy in .shootval and you'll double your shot strength or range, but spend 8 energy and you only triple shot strength or range.
This will also work in a way with venom and waste shots. The increase is linear instead of logarithmic though, and you spend venom amount instead of energy. See venom and waste. Note that storing negative numbers for venom or waste shots has no effect, the shootval must be positive. (I think)
Advanced Shooting Commands .backshot and .aimshoot allow for more control over how the shot is produced.
storing 1 in .backshoot, will instruct the bot to fire backwards if a non zero value is stored in .shoot.
Note that this:
-2 .backshoot store
will NOT work. You must do:
1 .backshoot store -6 .shoot store
or to save energy use the increase operator:
.backshoot inc -6 .shoot store
.aimshoot follows .backshot's syntax, but allows you to specify an angle to shoot at. The number stored here represents the angle from the bot's eye vector (direction it's facing) running counter-clockwise.
314 .aimshoot store -2 .shoot store
will fire a shot directly 90 degrees to the left of the bot's eye.