"Current" Version Readme
Important Information about DarwinBots V2.35
If you are reading this it means that you have downloaded DarwinBots Version2.37 30-05-05
Changes for V2.37 For .4 From Numsgil
1. Fixed the overflow bug that was supposed to be fixed in 2.37.3
For .3 From Numsgil
1. Fixed an overflow error with shots trying to go too fast because the shot's parent had an invalid velocity.
2. Fixed the number of mutations it says a bot has.
For .2 From Numsgil
1. Fixed the mutations probability screen from displaying wrong values
2. Added folder command to change which folder your internet sharing too/from on the server
3. The robot details screen's DNA display is now presented better.
For .1 From Numsgil:
1. Fixed all save routines. This allows internet sharing, saving organism, and save simulation all to work again. In addition, save settings now saves the newer settings as well.
2. Fixed a small graphical bug with mutations enable/disable toggle.
For .0: From Numsgil: New Features: 1. User specified random seed values for the random number generator. 2. 0 translational momentum mode, to simulate low Reynold's numbers (that is, movement through a high friction/high viscosity environment, like land for most animals or water for microscopic organisms.) 3. Statistical displays in the mutation probability screen as shvarz requested. (Tells you what chance a new born bot has to be mutated). The values expressed are not accurate, because mutations are context based. I'll keep working on this area. 4. Changed child's immunity to parent's shots from 10 cycles to 2 (age of 0 and age of 1). 5. Made some minor speed optimizations. 6. Up/down wrap and left/right wrap are now enabled 7. New veggy repop controls to control frequency and amount of a repopulation event 8. Stealth Mode. DB puts an icon on the system tray and makes itself scarce. Good if you don't want to tempt yourself or someone else to play with DB while a sim runs.
Bug Fixes: 1. Fixed the splash screen from freezing the program if you didn't close it properly. 2. Fixed several weird mutation bugs that were cropping up from DNA not ending with an end. I have no idea what happens now, but at least it won't crash. 3. Fixed an overflow bug with permanent waste. 4. Fixed an overflow bug with a shot's energy being too large. 5. Fixed an odd bug with inc and dec costing as much as a store command 6. Internet sharing had a nasty bug that prevented it from connecting to any servers. This has been fixed.
From PY: New Features: 1 Tie physics reworked such that ties have much greater affinity for being the defined length. Not so easy to stretch or shrink as they were previously.
Added .tielen1 through .tielen4 and .tieang1 through .tiang4
2 Shape mutations added
3 Mutations enabled/disabled toggle added. now yo don't need to physically change the mutation rates. Just hit the toggle. In fact settings of zero
are no longer a guarantee of zero mutations as the rate of change can still mutate away from zero.
4 Shape setup added to the DNA file of the robot. Syntax "shp 3" anywhere in the DNA file will give you a triangular robot.
Known new issues: For some reason the robot with ID 1 isn't visible to other bots. This is usually a veggy, so you'll end up with a stealth veggy in most simulations.
Changes for V2.36 1 Automated League Running. Set up your own leagues quickly and easily.
2 Streamlined simulation. I've clocked my computer quadrupling the speed of 1000 robot simulations.
3 Physics system reworked to give more realistic collisions.
4 New sysvars:
A .thisgene - returns the current gene's number. Designed for *.thisgene .mkvirus store to create self perpetuating viruses. B .aimshoot - fires a shot at an angle compared to the eye spot. Usage: 20 .aimshoot store -1 .shoot store
5 Several tiny bug fixes. You probably won't notice them.
6 Reworked Options Panel. Should look more professional.
7 Pond Mode separated. You can now run corpses outside of Pond Mode for instance.
8 If (okay, when) minor bugs are found and I get PY's code I'll release 2.36.1 and put any new changes I can think of here.
Changes for V2.35
1 Numsgil joins the programming team! YAY!
2 Major overhaul to the newly introduced mutations trigger system. Now able to simultaneously run up to 9 scripts.
3 Loads of new operators and functions added A. addstore, substore divstore multstore - number .memoryplace addstore same as *.memoryplace number add .memoryplace store. For those who know C, it is similar to the += commands. B. dup - places a copy of the top of the stack onto the top of the stack. C. sqr - places the square root of the top number on the stack on the stack. D. abs - returns the absolute value of the top number on the stack onto the stack. E. sgn - returns the sign on the top number on the stack onto the stack. F. ^ - takes the second value on the stack to the first value on the stack power. Ie: 5 2 ^ places 25 onto the stack G. pyth - finds the magnitude of a vector given its coordinates. That is, given two numbers, it will return sqr(number1 ^ 2 + number2 ^ 2) H. mod - similar to div but returns the remainder instead. I. ceil and floor - ceil lowers a value that is too high to a threshold value. Floor does the opposite. This is useful if you want to set a limit on how high or low a number should be.
For instance, "*.refslime 200 ceil *.slime sub .mkslime store" for a single bot.
4 A new conditions stack A. and - takes top two conditions and 'and's their values together. Similar with or, xor B. not - takes top value on conditions stack and negates it. C. All conditions on conditions stack that aren't evaluated at the end of the cond are 'and'ed together
cond 5 6 > 5 6 < or not start
This sample cond will return false, meaning that the gene won't be executed. 5 6 > is false, 5 6 < is true, or "or"s them together, so it returns true. Then not negates that true, making it false.
5 New evaluation functions. Here's a list of all of them you now have A. <=, >=, !>=, <, >, !<=, =, !=, %=, !%=, ~=, !~=, !<, !> B. ~= takes three values from the stack. 10 20 30 ~= will see if 10 and 20 are within 30% of each other
6 Slew of new sysvars: .thisgene - returns the current gene's number. Designed for *.thisgene .mkvirus store to create self perpetuating viruses. A. velX functions (velup, deldn, veldx, velsx) give bots velocity from its frame of reference B. bodgain, bodloss - similar to pain/pleas combo, but with body. Could be very useful for detecting -6 shots getting through. C. velscalar - gives you the scalar (ie: magnitude) of your velocity. People familiar with physics will recognize velscalar as 'speed' as opposed to velocity. D. shflav - where shang gives the angle of a shot without its flavor (type), this does the opposite, that is, gives the flavor of the shot without the angle E. trefbody - gives the body points of a robot at the other end of a tie. F. trefshell - gives the shell points of a robot at the other end of a tie. G. trefxpos, trefypos - gives the coordinates of a tied robot. H. trefvelmysx, trefvelmydx, trefvelmydn, trefvelmyup - gives the velocity of a robot at the other end of your tie from your frame of reference. I. trefvelscalar - the speed of a robot at the end of your tie. J. trefvelyoursx, trefvelyourdx, trefvelyourdn, trefvelyourup - gives the velocity of a tied robot from its point of view. That is, how fast does it think it's moving. K. refmulti - is the robot you're looking at a multibot? L. refshell - how much shell does the robot you're looking at have? M. refbody - how much body does the robot you're looking at have? N. refxpos, refypos - where exactly is the robot you're looking at? O. refvelscalar - how fast is the robot you're looking at moving. In absolute terms, not in relative terms. P. refvelsx, refveldx, refveldn, refvelup - how fast is the robot you're looking at moving FROM YOUR POINT OF VIEW. If you're heading towards a stationary object, it's refvelup will appear to be negative. Q. hit - Has your bot been hit by another bot?
7 Returned shot vector bug fixed. A. For those who noticed long trails of energy shots trailing behind two bots engaged in a dogfight, this has been fixed. The problem was that the returned energy shot was negative half the speed of the instigating body or energy shot. This has been changed to negative half the velocity with respect to the shot bot's vector. Bottom line: dogfighting
8 Waste level of Alzheimer's tentatively set to 400 instead of 1000. Also changed from a constant to a variable, so a future custom set level by the user is easier to implement.
9 Massive simulation speedup. The simulation has been drastically streamlined, allowing both larger and longer simulations. Individual results may vary, but the effects are most pronounced on simulations with >1000 bots. My computer has managed to quadruple the speed of those simulations.
10 Info shots (shots of positive value) now degrade shell the same amount as body shots do.
11 New bot files loaded from the options form are now automatically assigned a random color, 5 bots and 3K energy for the sim.
12 Shot decay changed to be relative to the firing bot's vector, so fast bots can fire a shot ahead of them that travels as far ahead of them as a stationary bot's shot would.
13 Bots are now charged energy for how much their velocity changed instead of how much they wanted it to. That is, if a bot stores a value of 32000 in .up, it doesn't get charged 32000 * movement cost. It gets charged change in velocity * movement cost (actually: change in velocity * movement cost * mass, but since mass is factored out in figuring velocity change, mass had to be factored back into the cost at the end).
14 Long standing status bar bug fixed - The status bar wouldn't start properly when a simulation was restarted. This has been fixed.
15 One more bug fixed that always caused an overflow. The level of Vloc (venom location) now cannot exceed 32000.
16 Problems with saving / loading settings files have been sorted out.
Changes for 2.34
1 Fixed walls so that they don't get knocked around or killed by tie feeders.
2 Added "dist" operator so that a robot can calculate the distance between its own coordinates and those of another.
3 Modified the effects of shell to include defence against information shots and viruses. Shot strength depends on distance and the body size of the bot firing it.
4 Raised the upper limit of shell to 200 for uni-bot and 400 for multi-bot
5 Raised upper limit of slime to 200 for uni-bot and 400 for multi-bot. Also changed the way that slime degrades. Now loses 1/50 of its current value per cycle.
6 Disabled venom and shot attacks on delgene memory location.
7 placed limits of 100 points for externally stimulated memory locations mkshell, mkslime, strpoison, strvenom, fdbody, strbody
8 Modified movement routines such that a single up, dn, sx or dx from any part of an MB (within reason) will affect the whole MB with respect to accelerations.
This only extends to robots that are currently directly attached to the robot using the move command.
9 Added .shang to supplement .shup, shdn, etc. .shang returns the angle of a shot that hits the robot but doesn't give the flavor.
10 New and improved mutations interface. Fixed a bunch of bugs in the mutations routines and added a lot of new readbacks for the information window.
2 new controls also added.
Changes for 2.33
1 A whole bunch of bugs relating to internet sharing fixed. Now working perfectly every time on my test version. Please report errors
2 A new era of messing about has arrived! The new "operator", "angle" has arrived on the scene. This allows the robots an even greater sense of direction.
They can now calculate the exact angle needed to reach a specific destination
3 Added a button to the toolbar to disable "POFF"s when robots die. The piccy leaves a bit to be desired but what the heck.
4 Severely modified database saving in response to some questions and suggestions.
The database now saves a complete DNA of each robot when it dies. The DNA is split into separate genes for ease of reading.
5 Added a "Snapshot" button to the toolbar. It is only active when database saving is enabled. The "Snapshot" button saves a copy of every living robot's DNA
into the database. Open it into a spreadsheet or database program as a "CSV" ("comma separated value" or "comma delimited value") file. This should spruce up the ability of evolution breeders to check out their robots to find the best one.
6 Modified Snapshot so that it is now completely independent of database storage
7 Added error handling to Snapshot and database routines
8 Added gene transferal (viruses). Robots use a series of new commands and functions to manage their own genomes.
a. Store a value into .mkvirus to copy a specific gene, represented by the stored value, into a virus. A timer is used to count down the cycles remaining until the virus is complete. b .vtimer allows the robot to check on the progress of its new virus particle c .genes reads back the number of genes currently in the robot's genome. d .genelen reads back the length of the robot's genome. e Store a number into .vshoot to fire a particle containing a the virus. The number determines the amount of energy (shot range) given to the virus. f .delgene allows a robot to delete a specific gene from its own genome.
This whole section is still a little experimental and will most likely be refined more later.
Changes for 2.32
1 Venom bug fixed. Now .venom reads back the correct value at all times.
2 Added new Trefvar --- .trefaim. Now you can read the aim value of a tied robot.
3 Added new command --- .setaim. Now you can directly set the exact aim angle of a robot.
4 Statistical wins are now needed to acheive a victory in F1 contest mode. If the result of a contest is a statistical draw then extra rounds are automatically
added until a clear winner emerges. In order to win a contest a robot has to win rounds equal to or greater than sqrt(rounds)+rounds/2.
5 Racial memory. During the birthing cycle, baby robots copy certain information from the memory of the parent. The copied locations are 971 through 990
and one location is copied each cycle after the 20th cycle of the birth tie. Robots who cut their gestation periods short will miss out on the valuable opportunity to pass on vital information to their offspring.
6 Body shots (-6) weakened a little. Now the value contained in the shot is half of the value of the shooting robot's body instead of equal to it. After all, the
body shots were designed to make for more efficient feeding from corpses, not to be a secret weapon.
7 Fixed problem with sharing energy. It was killing robots due to shock.
8 Modified shot feeding efficiency for MBs. They now have greater range and shot strength.
9 Modified Acceleration routines for MBs. When one part of an MB accelerates, approximately 80% of its acceleration value is transferred to any robot tied to it.
This make the other parts of an MB accelerate too, but at no additional energy cost.
10 Lessened the effect of shell on mass. Was shell / 100 added to mass (ie. 100 shell = 1 mass). Now shell / 400 (ie. 100 shell = 0.25 mass)
11 Discovered and fixed a bug in the refvars. The robot was only scanning the viewed robot's occur list (up shoot eye etc.) to copy it into his own refvars, when
the currently viewed robot was not the same as the one it viewed in the last cycle. Only turns out to be a problem when you overwrite a value in the refvars from the DNA. If this happens while viewing a member of a robot's own species then the robot it is viewing suddenly becomes prey because the value stored in .refeye ( .refaim etc.) stays the way it has been set until the robot views something new.
12 Added .kills to sysvars. Now a robot can directly see how many victims he has killed
13 Added custom Venom and Poison to strike specific memory sites. .Ploc sets the memory location for poison shots to hit. That location will be set to zero
for as long as the victim is poisoned. .Vloc does the same thing for venom except that we can now use .Venval to specify a value to insert at that position. If we omit .Venval then a random value from 1 to 32000 is inserted instead. You can insert negative numbers also when using .Venval.
14 Fixed some bugs relating to the order in which tie functions are carried out. This was causing a few problems with specific addresses for poison and venom.
15 Poison now works on ties. It is necessary to have a poison level equal to or greater than 1/20 of the tie feeder feed rate in order for it to activate. This makes a
maximum poison dose size of 50. Poison is only activated by a negative value in .tieval (tie feeding)
16 Fixed a bug that made -6 shots way too powerful. -6 shots are also now unable to penetrate shells at all. They just lower the shell value slightly. Should level the
playing field a little.
17 Made tie feeding proportional to the amount of body that the feeding robot has. Value is set to 1/10 of the body vale as a maximum feed rate. Upper limit has been
increased to 3000 to bring it back in line with shot bots which can now reach 3000 shot power also.
18 Changed the amount of poison needed to overcome an opponent's tie feeding rate. Now need 1/4 of the tie feed rate so it should be easy to overcome small tie
feeders but much more difficult with big ones. It was too easy to overcome the tie feeding of a very large bot. Now tanks should have an advantage over mobs.
19 Modified shots routines so that the extended firing range of large bots and MBs is now also feeding range. ie. shoot a veggie with a big MB from a long distance
and the returned -2 shot (or poison shot) will have the same range as the attacking shot.
20 Fixed a bug with shell values becoming negative after being hit by -6 shots
21 Fixed another bug with fixpos. Robots were maintaining their velocity values even though they are stationary when fixed. This make their shots shoot off at weird
angles since the angular velocity of shots includes a component based on the robot's current velocity.
That is it for the test version so far. let me know how it works out.
Changes for 2.31
Nothing too groundbreaking here. A few bugs sorted out and one new DNA command.
1 Bug discovered and fixed --- Information transferred by ties was never cleared from the .tieval and .tieloc memory locations. This only applied to
information transfer and not to tie feeding so unless you are trying to use one robot to program another's memory locations, you probably never even noticed
2 Added a new feature which enables a robot to control the "bounciness" of ties attached to him. The command is called "stifftie". The default value is zero but you can
enter any value up to 40. The higher the number, the stiffer the ties get. There is also a slight penalty in reduced movement when using this command.
3 A couple of other very minor bugs fixed that I can't even remember.
4 Modified the new "custom color" option in the robot selection window. We now have RGB sliders with an active color panel that displays the new color.
Also fixed the routine that made the "custom color" window pop up every time a robot with a "custom" color was selected from the robots list.
NOTE: The tutorial for V2.3 WILL NOT work unless you run V2.31 as fix 1 and 2 enable "Multi-Bot" to function correctly.
Changes for 2.3
1 Costs have been altered and a new movement cost setting has been included in the options screen.
2 Contest mode (or Formula 1 mode) has been added to the game. In it you can choose the number of contests required for your match.
You can also select the sampling frequency of the calculation routines. These can be quite memory intensive so I designed them not to check for a winner on every cycle. I would recommend a setting of somewhere between 20 and 100. A checkered flag will appear on the tool bar to show that you are in contest mode. An information window will also be displayed. This contains the color, name and current population of the competing species.
3 Corpses can now be made to decay in a number of ways.
a Normal mode. They just lose a bit of body each round. b Waste mode. They emit shots in random directions containing a small amount of waste as they decay. Good for a veggie garden maybe? c Energy mode. They emit shots of energy in random directions.
4 The size and frequency of the corpse decay can also be defined from the options menu.
5 Restart mode added. Check this box to automatically re-start a SIM when all of your robots have died.
6 DNA Help feature added to the "help" menu. All of the new and old DNA stuff is in there in a (hopefully) easy to follow format.
7 Body points now contain 10 energy points so energy storage is much larger than before. However it is much less likely for robots to get physically bigger now.
Of course you can store energy away as much as you like and your robot will eventually get tubby.
8 Backward compatibility added to all save files for options, single robots and entire simulations. In theory, internet sharing should also work now
Thanks to Carlo for a backward compatibility routine on the save/load routines. You should be able to load up all of your old save files. (should!!! not Will!!)
9 Security feature added to save/load routines. Should prevent people from releasing mutated robots with changed names back to the server.
Again thanks to Carlo for that routine.
10 New commands
a .reffixed and treffixed. Now you can tell if someone else is fixed of not.
b .xpos and .ypos. Complete co-ordinate system. .ypos shares the same mem location as .depth. They are completely interchangeable.
c .trefbody Read the body value of a tied robot.
d Myvars A complete set of memory locations that mirror the refvars. Self explanatory really.
e .memloc and .memval Allows a robot to read the value stored in the viewed robot's .memloc. Value is returned to .memval.
Example of a rather complex way to recognize conspecs. I am sure you will find better uses for the pair. cond *.eye5 0 != start 600 .memloc store stop
cond *.eye5 0 != *.memval *.myeye = start 628 .aimdx store stop
f .tmeloc and .tmemval As above but for tied robots. Requires .readtie.
Changes in 2.2
1 New controls and read backs added
a .fixed A value of 0 means the robot can move freely. A value of 1 means it is fixed in place (like a blocked alga)
A robot can freely switch this on and off by means of .fixpos
b .fixpos Set this to non-zero to fix your robot in place. You can pretend to be a mussel or a coral polyp. Maybe the root
of a gently swaying multibot that stings everything it sees for food that is then shared through the whole MB
c .daytime Why have a day / night cycle if the robots can't tell when they change. Reads back 1 for day and 0 for night. d .depth Again why try to simulate a water column environment unless a robot has a sense of depth. Reads back the
Y co-ordinate from the program. In larger size sims this becomes MUCH larger at the bottom of the pond. Use it in combination with buoyancy and .daytime to create a day / night cycle of migrations up and down the water column.
2 Other changes
a Damage from shots (-1 and -6) is now proportional to the body size of the robot firing the shot. Damage from a -1 shot
is body/20 so a robot with a body size of 20,000 will do 1000 points of damage per shot but a robot with a 2000 body will only do 100
b Critical damage. If a robot is damaged to a total of more than 1/2 of his initial energy points, he dies of shock. His remaining
energy points will be added to his body points and will be available as "corpse" meat
c Program streamlined considerably. Now runs a whole lot faster (at least on my PC). The difference will mainly be noticed when a
large number of corpses begin to build up. The program largely bypasses corpses to make this possible. Also bypasses robots that currently have no ties during a number of procedures. Makes shot-bot sims run faster.
That is all the changes I can think of right now.
have fun and let me know if it doesn't work
And finally the System Variables which can be found in the file (sysvars2.21.txt)