Okay, at long last, I have completed the first iteration of my bot testbed.What is it?
A simulation with a single bot in it. This is a very simple base I'm going to use to build more features on top of.
The single bot is a star shaped polygon
. It has "spindles" arranged around its nucleus. The bot can control the length of these spindles using its DNA.
So far the only features implemented are the spindles. It can't reproduce or move or do anything else but change its shape.Overview
It's multithreaded (to a point) with 3 core threads:
- UI - The UI thread handles button clicks and the like.
- Simulation - The simulation thread handles running the simulation, running the bot's DNA, etc.
- Render - The render thread is in charge of drawing the graphics.
Importantly these three threads are independent. The simulation can run at 10000 cycles/sec and the graphics can run at 5 FPS. Or the simulation could run at 10 cycles/sec and the graphics could run at 60 FPS.
If one thread crashes, it should largely not cause problems for the other threads. The simulation thread can continue running in the background if the render thread crashes (as long as it's not frame locked), and vice versa.Read the DNA help
The DNA langauge that Darwinbots3 uses ("Sunweaver") is similar but distinct from the language in Darwinbots2. Make sure you read through the Sunweaver manual under the help menu to understand it. If you want to suggest changes, the raw text for it is here
. Just send me any changes you make to that file.Help me out
My mission for you guys, if you're willing, is to mess around with this testbed to create bots that do cool things. Specifically I'd like some bots that move in a way that looks like they're swimming, because I want to try adding fluid to this testbed next, and I want to see if a swimming motion can produce forward motion.
Also, I want to make sure that there aren't any bugs. If you find crashing bugs, you will get an exception dialog box. You can see what it looks like by forcing crashes (look under the 'debug' menu). Copy+paste the exception dialog text and post it here and I can try and reproduce the issue on my side. Unless you know why it crashed, of course, and it's not a bug.
Or if you find the interface weird, or have just general comments, please let me know.What's next
I'm going to start experimenting with adding fluid to this simple testbed. I'd like to verify that it's possible for bots to swim by manipulating their shapes.
(Edit: I've uploaded a new version that fixes the render thread crashes. Also changed:
- Fixed issue that prevented incrementing spindle lengths in the DNA from working.
- Fixed issue preventing memory from being saved to disk.
- Added a "numspindles" sysvar.
- Broke apart pause and play buttons to work the same way they do in DB2.