My living room, as seen in Hell. Noesis now includes a Roomba script. It will track your Roomba, store tracking data, allow you to visualize that data in a variety of ways, and, of course, turn that data into a randomized DOOM map. It would've been nice to get this done in time for DOOM's 25th anniversary, but as it came and went, I was still waiting to grab a Roomba 980 on eBay. I had the idea sometime back in November, as my wife and I were researching robot vacuums. I discovered that the newer Roombas are making use of a pretty respectable SLAM implementation, which led to wondering about what kind of data I could get out of it and what I could do with that data. I soon realized that there was a clear opportunity to serve the Dark Lord by conceiving a plethora of unholy algorithms in service to one of the finest works ever created in his name. Simultaneously, I would be able to unleash a truly terrible pun to plague humankind. Now, the fruit of my labor is born. I bring forth DOOMBA, a half-goat, half-script creature, with native binary backing for the expensive parts, to be offered in place of my firstborn on this fine Christmas Eve.

The DOOMBA process.
Going from home to Hell has never been so easy!

In order to use DOOMBA and the rest of the new Roomba functionality, you'll need to download the latest Noesis. Go into optionalplugins\python, and copy the file in there over to plugins\python. Under the Tools menu in Noesis, you'll have a new "Roomba Tracker" item. Activate it to bring up the Roomba Tracker interface.

The Roomba Tracker interface.

The interface will allow you to automatically scan your LAN for Roombas (you'll need to have UDP broadcast enabled), and you'll be prompted with specific instructions for retrieving the password from the Roomba. Once you've got the Roomba's IP and credentials set up, you can start tracking it. You'll be prompted to save a .noeroomba file when you start tracking. If you elect to do so, that's the file that will contain all of the useful data once you're done tracking. I've only tested this with my Roomba 980, so I can't offer any assurance that it will work with other Roomba devices. If you don't have a compatible device, however, you can still find a sample .noeroomba file in the Noesis scenes directory for the sake of playing around with DOOMBA and the other Roomba-related features. Once you've generated a .noeroomba file (or located the sample one), browse to it in the Noesis file viewer. You'll have some new right-click context menu items for the file type:

New Roomba context menu items.

The NoeRoomba Merger option is useful for combining multiple .noeroomba files. You'll occasionally lose connection while tracking, or not want to continue tracking as the Roomba recharges between runs. This means you can elect to generate multiple .noeroomba files and stitch them together later on. Selecting the DOOMBA item will launch into the main DOOMBA interface for generating a DOOM PWAD from the selected .noeroomba file:

The DOOMBA interface.

If you leave "Seed" at 0, it will be auto-generated for you. Otherwise, if you find a seed you like, you can save it and re-use it while tweaking other options. All of the options at the top pertain to affecting enemy/object placement. The script itself is written to make it very easy to extend these various object tiers, or even add support for other DOOM-based games, by changing THING ID's around. If you're not that adventurous, though, you can stick to tweaking the values exposed by the interface there. You're also free to modify the floor/ceiling/wall texture lists, and if you load the DOOM IWAD in Noesis, you'll find that all of those texture names are listed for you under the Data Viewer. There are a lot of other options in the lower right to play around with which affect how the geometry is generated and simplified. The options under "Advanced" are generally ones that could cause things to break very badly if you do the wrong thing to them, as I haven't put a great deal of testing into this thing and didn't really bother sanity-checking values on the engine side. The other options still have the potential to break things horribly, though, so when in doubt, don't mess with the defaults. Also keep in mind that the interface won't protect you from standard DOOM visplane/thing/etc. limits. As a bonus, there's an "Image to NoeRoomba" tool that's only enabled when you set ENABLE_TEST_FUNCTIONS to True in This allows you to generate .noeroomba files from plain image files, which gives you a pretty effective "image to random DOOM map" path. I can't promise my unholy algorithms targeted at Roomba maps won't fall over if you start throwing all kinds of random crap at them, but with the images I've tried, things hold up pretty well:


I hope you get some fun out of this feature. I definitely have! Some will say that it's pointless, but I have faith in my heart that the Dark Lord will wipe these people from the face of the earth and trap them in a dimension of eternal hellfire. Their suffering will be legendary.

The script notes already make mention of it, but I should once again point out that dorita980 came in handy for the Roomba protocol bits here. I would have used it directly, but Node.js is a dumpster fire. I'd also like to thank Raphael Quinet for his ancient nodebuilder code, which is newly-included in this release as part of the DOOMBA functionality. It was one of the few nodebuilders I was able to find that wasn't tainted by the GPL.

Oh, and on a personal note, things are going well again! I mentioned that I was having some serious health issues in the Noesis release notes a little while back, and got some very good news on that front this month. Namely, I'm not in imminent need of pancreatic surgery. That was a massive relief for my whole family. Thanks a lot to those of you who already stepped forward to offer a kind word or two, it's nice to see a kind face amidst the sea of writhing tentacles that is my user demographic. May the Dark Lord bless you and your hell-spawn. 0 comments in total.
Post a comment

3190077 page hits since February 11, 2009. Site design and contents (c) 2009 Rich Whitehouse. Except those contents which happen to be images or screenshots containing shit that is (c) someone/something else entirely. That shit isn't really mine. Fair use though! FAIR USE! All works on this web site are the result of my own personal efforts, and are not in any way supported by any given company. You alone are responsible for any damages which you may incur as a result of this web site or files related to this web site.