Retro hardware often looks fantastic, but we may find we no longer need it for its original function. [John Anderson] found that to be the case with some old Heathkit gear, and set about giving them a fun overhaul.
With the help of AVR microcontrollers, the devices have been repurposed into electronic dice towers for playing Dungeons & Dragons. A seed is generated based on the chip’s uptime, and supplied to a pseudorandom number generator that emulates dice rolls. The devices can be configured to roll a variety of dice, including the usual 6, 8, 10, and 20-sided varieties. Plus, they can be set to roll multiple dice at a time — useful when you’re rolling complicated spells and attacks in combat.
[John] has converted a variety of Heathkit devices, from Morse code trainers to digital multi-meters. They provide their beautiful cases and a great retro aesthetic, and we think they’d make fitting table decoration for retro cyberpunk tabletop games, too.
Creating your own electronic dice is a great way to get familiar with programming microcontrollers. Video after the break.
Is there a tabletop Fallout game?
Indeed. There are a couple
https://www.modiphius.net/en-us/pages/falloutrpg
https://www.fantasyflightgames.com/en/products/fallout/
Never lose your dices when rolling too hard ever again
After reading some of the comments and your responses, I suggest implementing Lemire’s sublime algorithm: Fast Random Integer Generation in an Interval (https://arxiv.org/abs/1805.10941). It’s beautiful and fair. Later research has improved it slightly, but it doesn’t matter in this context.
I’ve been using the simple modulo technique which can have some bias. Performance is not an issue here. Saving a divide won’t buy anything. But, improving the small bias could be interesting. I’ll have to research this some more. I might even have to create a test app to see if I can even detect the bias over a large sample of rolls and compare.
I spent one evening creating a test app using seed() and rand() in the AVR standard C lib. It seeded the rand algorithm once with a 16 bit counter value that represented the number of micro seconds from processor start to the first button press. It then rolled “3d6” 64K times and tracked the results. Lastly, it calculated the deviation from the expected bell curve and reported the result along with the values with the largest and smallest deviations. I then ran this a few hundred times and proved to myself that the result was good without being too good. The deviation was always small, it differed each time, and the min/max deviations had a reasonable distribution. So, I am happy with the the rand() implementation in AVR C lib.