Heard of Twitch Plays or anything like it? Well, you can run your own thanks to the likes of TRBot so we spoke to the developer to find out more.
GOL: Could you tell us a little bit about yourself?
"My name is Thomas “Kimimaru” Deeb and I am a professional and hobbyist software developer. I started playing video games at a very young age. I continue to be fascinated with imaginative game worlds and the compelling challenges games present through their gameplay.
Some of my favorite games include classic franchises such as Mario, Zelda, Sonic, and Kirby. Recently, I’ve been playing games I missed out on growing up, such as Tomb Raider, Ōkami, and even some more obscure titles like Chibi Robo!. I’ve played numerous games at this point and don’t intend to stop anytime soon!"
GOL: How did you get into programming?
"My interest in games led me to a career in software development. Like many other kids growing up, I too had the desire to build my own game worlds. I was drawn to how engaging the games I played were and how I can influence the virtual world, even if it’s somewhat limited. This was in contrast to movies and TV in which I can only be an observer; the game won’t continue unless I do something. Several games I’ve played growing up have left an impression on me that has shaped me to be who I am today.
I wanted to give back by providing the magic of games to the new generation so they can be engaged and inspired just as I was in my youth. Games tell stories, provide challenges, and do a whole lot more that many mediums aren’t capable of. This offers a lot of freedom in designing and developing games, which is something I really enjoy.
While I have been working at studios most of my career, my first indie effort was finally realized in March 2020 with the release of Maze Burrow."
GOL: You’re responsible for maintaining the TRBot software, could you explain what it is and what it does?
"TRBot is free/libre software written in C# that allows you to play video games through text. For example, if you type “left”, the character in your game will move left. TRBot has a flexible input syntax that allows you to be as precise or simple as you want; this gives it an easy to learn, hard to master style that appeals to both novices and experts.
For instance, in Super Mario Bros. I can have Mario jump with “a” and go for a moving jump with “right1s+a1s”. But then I can also do a running jump by first holding “b” then “right” with “_b _right a1s”. I can also wait for 5 seconds before making that jump with “_b _right #5s a1s”.
If I were playing Sonic the Hedgehog 3, I can make Tails fly by mashing “a” on controller 2 with “[&2a34ms #34ms]*50”. In short, there are a variety of ways to accomplish the tasks you need in a given game, and the syntax does an excellent job supporting it all. There are also user-defined macros that can be made for quick access to a series of inputs. A recent The Legend of Zelda: Twilight Princess stream using TRBot had a “#spinatk” macro that greatly aided with combat situations.
TRBot can be run either locally, over Twitch, or, with the recent 2.3 release, over any WebSocket with a custom web interface. Its use is not limited to streaming; in fact, you can use it to automate grinding in an RPG or mashing buttons in a game such as Banjo Tooie (I’m looking at you, Canary Mary!). It also supports both the “Anarchy” and “Democracy” modes Twitch Plays viewers are familiar with.
TRBot accomplishes its game control by parsing the text into data it can read, then feeding button and axis values associated with that data to virtual game controllers. Streamers set up the available buttons on a virtual console, which is basically a collection of available inputs. TRBot comes with several virtual consoles out of the box, including the NES, PS2, and GameCube.
The virtual game controllers are recognized as real gamepads on your operating system. As such, TRBot runs alongside the game; it cannot be frame-perfect due to this, but it is often very fast and accurate on a capable machine. This also means it has high compatibility with games and applications on your own machine. On GNU/Linux, TRBot manages custom virtual controllers created through the uinput kernel module, and on Windows, TRBot uses the vJoy virtual controller driver by Shaul Eizikovich.
The issues I have found and fixed by running TRBot in the wild has helped it become extremely stable; the longest time I have had it running without any rest is 21 days. TRBot’s latest release is version 2.3, with version 2.3.1 nearing completion."
GOL: Why did you decide to make it?
"Back in late 2016, I tuned into a Twitch Plays Ocarina of Time stream from a channel called TwitchPlaysPaperMario and saw them at Phantom Ganon with the Infinite Sword Glitch (ISG) active. This made my jaw drop; I previously saw firsthand how much trouble Twitch Plays Pokemon went through just to beat Pokémon Red, so how did these players get so far in a vastly more complex game?!
The channel eventually rebranded to TwitchPlays_Everything but kept the same input syntax. I loved how flexible the syntax was and the collaboration involved in overcoming challenges playing in this unorthodox way. I have replayed some games many, many times, but not through text before discovering this channel. Now suddenly I had to think about challenges that are trivial with a controller, like fighting a basic enemy. I learned about minor details in my favorite games that I hadn’t previously thought about as a result of some mishaps while playing through text, like how much damage Twinrova’s attacks actually do in The Legend of Zelda: Ocarina of Time (hint: a LOT).
Everyone else I saw on stream had their own style of playing, and it gave a sense of individuality. I’d be familiar with some players’ styles and know what to expect when playing with them. Some players preferred pause buffering, which involved unpausing the game, doing an action, then pausing again to allow time to react to what happened. Other players just ran right in and took things as they came. For me, the best moments playing through text are when there’s a group of players taking turns to overcome the same challenge, with each one doing it differently.
Eventually, TwitchPlays_Everything retired, and I took it upon myself to create a bot inspired by theirs to once again give viewers the fun of overcoming challenges in games through this unique method of play. TwitchPlays_Everything helped kicked off TRBot by giving me the Python code to their parser, which I converted to C# and eventually replaced with my own parser.
I also wanted anyone to be able to host their own stream by lowering the barrier to entry. To this end, I released TRBot as free/libre software and have made considerable efforts simplifying the setup process and expanding its features. At present, TRBot has numerous moderation and quality of life features, such as access levels (Moderator, Admin, etc), user-restricted inputs, timestamped game logs to inform players of progress, and mini-games like betting and dueling for credits."
GOL: Have you seen much interest from people using it?
"On the streamer side, TRBot has seen use with channels such as TwitchPlaysSpeedruns, f1ashko, and even BraceYourselfGames, who hosted a Twitch Plays Crypt of the NecroDancer last December using TRBot with 100+ simultaneous players! In the last instance, it was amazing for me to see TRBot hold up so well when I had tested it with only 20 players at most prior.
I have also seen streamers such as TwitchPlaysSpeedruns use TRBot in ways I hadn’t envisioned, going as far as using it to play console games on actual hardware, such as Pokémon Sword on the Switch. They also had a recent Katana Zero stream where speedrunners were using TRBot to make a TAS since they didn’t have TAS tools of their own. All of this shows me that there’s far more potential to TRBot than I originally thought, and I can’t wait to see what others do with it next.
On the player side, definitely! Ever since the TwitchPlaysPaperMario reboot in early 2020, I have seen interest ranging from brand new players to famous speedrunners on games such as Super Metroid, Pikmin, and Celeste. Some runs were extremely active, with Super Mario 64 120 Stars being completed in as little as 149 hours! New players hop on all the time, but few stick around. Surprisingly, I found that there are a significant number of people that prefer watching over playing."
GOL: How did it feel to see people actually pick up and use TRBot? Must have been a sort-of big relief to know your work is being used?
"It was a great feeling, especially when I saw Brace Yourself Games running NecroDancer with hundreds of players. The thought that I created something that made that event possible was immense. The players were having a great time, and the software was doing a great job handling inputs of this magnitude. Brace Yourself Games also reached out to me for new features including Democracy mode, which was added in the 2.1 release back in January.
TwitchPlaysSpeedruns has been an early adopter and helped influence TRBot’s direction for the better. Thanks to them, TRBot has features like periodic inputs - to prevent sleep mode on consoles or make backup saves - “teams mode”, which assigns new players to a looping set of controller ports (think even distribution for 4-player Mario Party), and the ability to manage multiple game messages on stream. They have been a great partner, and I don’t know where TRBot would be right now without them. Unlike my own streams, which are consistent and familiar, TwitchPlaysSpeedruns is always looking for new ways to expand the concept and do novel things with TRBot. They still manage to surprise me with excellent ideas, and I am very grateful for all their support."
GOL: What do you plan for the future of TRBot?
"Regarding the application itself:
An immediate new feature idea I have involves “Trigger Events”, in which you can run a custom script upon seeing a specific event. For instance, if a user entered 1000 messages, you can promote them to a higher access level or congratulate them on stream by running some code. If this comes to fruition, it would most likely be in the 2.4 release.
I also want to add more integrations. Right now we have LiveSplitOne, LibreTranslate, and ChatterBot support. Adding OBS on top of that would be big. I made sure to keep the third-party code in a separate project so the base code remains clean and we don’t end up with too many dependencies just to get the core of TRBot working. I’ve completely refactored TRBot for the 2.0 release and would prefer not to do it again!
Going forwards, I also want to create some sort of event/messaging system that TRBot uses to send data out through a WebSocket. This would allow other applications to obtain data from TRBot, which can greatly expand its capabilities. The end goal I have with this is a custom overlay that displays data from the “Democracy” mode so players can see which input will be chosen next.
Regarding the community:
I want to raise awareness to the fun and collaborative effort that playing games through text can bring. I have been reaching out to other Twitch Plays streams to organize Twitch Plays Races, which is similar to a speedrun race but among 2 or more Twitch Plays channels instead of individual players.
There have been three of these races to date. In chronological order:
- Sonic 3 & Knuckles All Emeralds vs TwitchPlaysSpeedruns.
- Pokémon Red/Green/Blue vs TwitchPlaysSpeedruns and TwitchPlaysPokémon.
- The Legend of Zelda: Ocarina of Time 100% charity race vs TwitchPlays_ZeldaGames.
I’m considering making future races charity events since the last one went so well, with us raising over $700 for Extra Life. The races have overall been positive experiences from all communities, and I look forward to planning more.
The races have also brought more awareness to TRBot and created stronger bonds among the channels. Considering most Twitch Plays channels are solo endeavours, I think this sense of community is crucial if it’s to break out of the niche category. Many channels reinvent the wheel by writing their own tech stack to have similar, if not exact, features to another channel, or they use existing bots not well-suited to the games they’re playing (Ex. Pokémon bots for a 3D platformer). I feel TRBot can bridge the gap since it allows anyone to easily set up a text-based stream without having knowledge of programming or spending many hours writing code.
I’ve been primarily talking about Twitch, but I’m not limiting this community to any single streaming platform. Whether a streamer is on Twitch, YouTube, PeerTube, or even their own website, I want them to know they can be part of the community and make a positive impact.
There are other ideas in the works to help bridge the community that involves an online leaderboard like speedrun.com, but for text-based gameplay. The plan is to have profile pages for each channel/stream that plays games through text, highlighting their best times and the bot technology they used to play it - sort of like the region indicator for speedruns. How this will play out I’m not yet sure, but I feel there’s a lot of untapped potential here."
GOL: You mentioned over email you actually personally switched to Linux, how did you find the transition of moving from Windows and why did you switch?
"It started a few years ago with me looking for a new Android phone to replace my old Windows phone. I never liked the nagging software updates of stock Android and its reluctance to just leave me alone, which I experienced through a burner phone I bought to test apps for work. I looked into custom ROMs like LineageOS and eventually stumbled into information about privacy and free/libre software. I read how all this software millions of people rely on is betraying them by spying on and stalking them for profit. This astonished me, and I got very upset; I never realized how bad the invasion of privacy was until this moment (it’s way worse than you’d ever expect). I thought about how we can actually call ourselves a free society when the very devices we rely on are exploiting millions of people just so a few companies can make some more money. This is the type of thing you hear about only in dystopian and totalitarian societies. I thought that this practice simply wasn’t right at all and sought out a phone that’s well-supported by LineageOS. Around this time, I came across the GNU project and the FSF, and I went on to read many of Richard Stallman’s essays.
What really got me to switch to GNU/Linux was learning about Windows 10 engaging in the same unethical practices as the other software I learned about. I was enraged and felt betrayed and violated that my own personal device was being used against me, and I had no power to change it. I looked into switching to a GNU/Linux distro as soon as I can; I heard good things about Linux Mint in the past so I looked into it first.
Since then, I have been using Linux Mint (Cinnamon edition) as my primary OS, and I’m very happy I made the switch. On top of it being a refresher from Windows, I actually have control over my computer now; I can make it do what I want to improve my productivity and not be forced to update at random times while I’m in the middle of something. I have also moved off of proprietary software outside of games and essential lower-level components like firmware and drivers. Isn’t it nice when a computer just does what you want it to?
My favorite aspects of Mint are the theming options, custom keyboard shortcuts, and custom launchers (Ex. add a custom command to the menu panel or on startup). I initially had concerns about gaming, but I soon discovered WINE, Proton, and the excellent emulator support for Linux with RetroArch. Now I can do all the gaming I used to do on my Mint install, and I have no plans on switching back to Windows.
Upon moving to Mint, it took me some time to get used to its unfamiliar environment, but I understood that I experienced similar hurdles when first learning Windows long ago. My first few months involved working with my machine like I was working in Windows, doing things like downloading, installing, and compiling software manually; after all, that was what I was familiar with. I soon learned that this is not the optimal way to use Linux Mint. Now I know how to install software with the package manager, write custom bash scripts, and set up cron jobs, among many other things I hadn’t dreamed of doing before I switched. Of course, I broke my OS on several occasions (recently by installing a third DE), but each time I managed to fix it without having to do a fresh install thanks to the helpful community."
GOL: For other developers (and users) looking at or about to do the switch to Linux, any advice for them?
"One piece of advice I often see from others is to keep at it and work to resolve your problems instead of resorting back to your previous OS, and I recommend that advice as well. Doing this helps get you familiar with the intricacies of your new system, and you really learn a lot from it.
Another thing to consider is what you want out of it. Do you want more privacy, security, and control over your computer? Or are you just looking for something new? Start with the popular distros and see if they work to your preference. Boot it up in a VM or live USB and play around with it. Also consider dual-booting if you like a distro before making the full switch; this way, you can always fall back to your old system if things don’t work out.
For me at least, I was initially uncomfortable with a new way of doing things but eventually developed a workflow superior to what I was doing on Windows. I never thought I would use keyboard shortcuts so much or set up my own VNC server to remote connect to my streaming machine. There’s so much quality software out there it’s insane, yet most of what you hear about are only a few popular proprietary offerings. I have found free/libre software that is on par with or better than them for my needs with none of the bloat."
GOL: What do you think of the recent Steam Deck announcement from Valve?
"Based on what I’ve read, it looks like a great piece of hardware at an excellent price. I wasn’t expecting Valve to release something like this, but given the immense success of the Nintendo Switch I’m not surprised other companies are following suit. The hardware looks well-designed, but I feel the button layout could use some work. The axes and buttons, especially ABXY and the D-Pad, look just a bit too close to the edge of the console. I may change my mind if I play with one and feel the comfort level for myself.
I’m admittingly not the target market for this device since I prefer gaming on my PC. However, the fact that it’s a full-fledged GNU/Linux distro as a handheld is a huge plus since this enables it to be used for much more than just gaming. I’m looking forward to seeing how they push this concept further in the future."
Big thank you to Thomas “Kimimaru” Deeb for spending some time with us to answer our questions.
Check out TRBot on the official code repository.