#side Commune 6 #author Devon 12 Nov 2002 - 5 Jan 2003 Gatherers deliver energy to defenders and constructors on request. This is a communication-intensive side. The Revenge type used to be the star, but got displaced by these fancy syphoners. Problems: Slow growth. No offense. If enough Revenges could be built, they could go hunting as a group. Vulnerable to missiles. An antimissile type would help. #color ddd #seed 3 2 1 1 3 2 (20030102) Merged channels 3 and 4. Channel 2 contains places with lots of food. Channel 3 contains positions and energies of hungry cells. Channel 5 contains targets (sometimes imaginary). #type Revenge You don't have to be a giant to be effective in combat. #color c00 (20030102) Better combat movement. Renamed call-for-help to call-for-food. More frequent calls. Better choice of whether to fight. Less frequent scans, to save energy. Now checks channel 5 after a failed chase. (20030105) Reduced unnecessary blaster range. Now using seek-moving-location. go-home no longer uses random target near home. #hardware engine .1 energy 250 10 repair-rate .04 armor 400 blaster 25 1 10 robot-sensor 8 shot-sensor 7 processor 13 radio send receive #code #vector home #vector target #var next-call #vector callpos autorepair: energy 100 > max-repair-rate 0 ifev repair-rate! return call-for-food: speed ifr time next-call < position callpos radius in-range and ifr position energy 3 3 send time 200 + next-call! position callpos! return #start position home! idle& jump hungry: 0 engine-power! 0 repair-rate! call-for-food do sync sync sync sync sync sync sync sync sync sync sync sync sync sync sync sync sync sync sync sync call-for-food energy 120 < while-loop 5 clear-messages idle: 0 engine-power! do autorepair time robot-sensor-time 30 + >= if fire-robot-sensor sync robot-found fight& ifg then time shot-sensor-time 12 + >= if fire-shot-sensor sync shot-found chase-shot& ifg then 5 messages if energy armor min 150 > and-if 5 receive drop target! chase& jump then energy 220 < call-for-food& ifc sync energy 70 > while-loop hungry& jump chase-shot: shot-position shot-velocity unitize -20 vs* v+ target! target 2 5 send chase: do target seek-location autorepair time robot-sensor-time 20 + >= if fire-robot-sensor sync robot-found fight& ifg then time shot-sensor-time 12 + >= if fire-shot-sensor sync shot-found chase-shot& ifg then energy armor min 70 < retreat& ifg target position 2 in-range until-loop 5 messages 1 - 5 clear-messages 5 receive go-home& nifg target! chase& jump fight: robot-position 2 5 send engine-max-power engine-power! do robot-position robot-velocity seek-moving-location autorepair time robot-sensor-time blaster-reload-time + >= if fire-robot-sensor sync robot-found go-home& nifg robot-distance .8 robot-radius + < if robot-direction fire-blaster then then energy armor min 30 > while-loop retreat& jump retreat: 5 clear-messages do energy 10 < hungry& ifg home seek-location autorepair home position 7 in-range until-loop idle& jump go-home: 5 clear-messages do energy 10 < hungry& ifg home seek-location autorepair time robot-sensor-time 25 + >= if fire-robot-sensor sync robot-found fight& ifg then time shot-sensor-time 12 + >= if fire-shot-sensor sync shot-found chase-shot& ifg then 5 messages if energy armor min 100 > and-if 5 receive drop target! chase& jump then home position 8 in-range until-loop idle& jump #type Sustenance #color 0c0 (20021129) Now wanders when no food seen. (20021201) Now turns syphon on before reaching destination, for accidental feeding. Now turns off shield when out of energy. (20030102) Now prefers closer and hungrier cells. (20030105) Now announce food-position-overall instead of own position. (20030329) Call for food when starving. #hardware friendly-syphon 2 energy 350 10 eater 2 engine .03 armor 150 shield .1 repair-rate .05 food-sensor 10 shot-sensor 8 processor 10 radio receive send #code #vector home #vector dest ;location #var last-armor #vector food-save #var last-food-announce #var next-call #vector callpos autorepair: armor energy < max-repair-rate 0 ifev repair-rate! return #start position home! eat: 0 shield! 0 friendly-syphon-rate! armor last-armor! fire-food-sensor sync do autorepair food-found if food-position seek-location food-found food-energy 100 - * 1000 > if time last-food-announce 150 + >= and-if food-position-overall 2 2 send time last-food-announce! then else energy 150 > full& ifg food-save and if food-save position 5 in-range not and-if food-save seek-location else 2 messages if 2 messages 1 - 2 skip-messages 2 receive drop food-save! food-save seek-location else 0 world-width random 0 world-height random food-save! then then energy 5 < hungry& ifg then time food-sensor-time food-found 50 150 ifev + > eaten not and if fire-food-sensor sync then armor last-armor < if energy 20 > if max-shield shield! then position 2 5 send ;call for help armor 100 < run& ifg then energy 20 < if 0 shield! then armor last-armor! energy eaten 340 250 ifev > until-loop food-found if food-position else 0 0 then food-save! full& jump hungry: 0 engine-power! 0 shield! 0 friendly-syphon-rate! 0 repair-rate! position callpos! do speed nif time next-call < position callpos radius in-range nand and-if position energy 3 3 send time 250 + next-call! position callpos! then sync sync sync sync sync sync sync sync sync sync sync sync sync sync sync sync sync sync sync sync energy 25 < while-loop eat& jump run: do autorepair home seek-location home position 7 in-range until-loop 0 shield! eat& jump #var cur-energy #var best-energy #vector cur-pos ;dest is best-pos full: 0 friendly-syphon-rate! 0 shield! do autorepair 3 messages if infinity best-energy! home dest! 3 receive drop do cur-energy! cur-pos! cur-energy cur-pos position dist 10 * + cur-energy! cur-energy best-energy < if cur-energy best-energy! cur-pos dest! then dest seek-location 3 receive while-loop best-energy infinity < feed& ifg then home seek-location energy 60 > while-loop eat& jump feed: friendly-syphon-max-rate negate friendly-syphon-rate! do position dest v- unitize dest v+ seek-location dest position 1.5 in-range if dest position v- rect-to-polar friendly-syphon-direction! radius - friendly-syphon-distance! sync friendly-syphoned -1.5 > if energy 150 > full& eat& ifeg then else 0.5 friendly-syphon-distance! dest position v- angle friendly-syphon-direction! then energy 25 > while-loop eat& jump #type Pregnant #color fc0 (20021129) Smaller constructor, more energy storage, and don't call for food unless almost empty. (20030102) Now call on ch 3, with (false) energy. (20030105) Slightly reduced solar cells. Build fewer Sustenances and more Pregnants. More frequent calls. (20030204) No longer refuses to build Revenges when it hasn't got any. :) #hardware solar-cells .35 energy 500 0 constructor .7 radio send processor 3 armor 100 #code #var next-call new-baby: energy 200 < if 2 type-population population 4 / <= and-if 2 else 1 type-population 3 type-population 10 min < 1 3 ifev then constructor-type! return #start constructor-max-rate constructor-rate! do constructor-type new-baby& nifc time next-call >= if speed not and-if energy 300 < and-if position energy 100 + 3 3 send time 150 + next-call! then sync forever #end