Skip to content
Adam edited this page Jan 20, 2020 · 128 revisions

This FAQ has four sections: Game, Stream, Personal, and Technical.

Game

Stream

Personal

Technical

Game answers

What is Bot Land all about?

Here's the official site, where you'll find the trailer in addition to having some much shorter videos as you scroll down the page. There's also this video (4m22s) that sums up overall gameplay.

If you'd prefer a text introduction:

Bot Land is an online, multiplayer strategy game with automation at its core. First, you create bots with hardware like Missiles, Cloaking, Shields, etc. After that, you write scripts for them, which is essentially AI. If you don't want to write scripts, that's fine too—there is a library of premade scripts, and the default AI for a bot is pretty well fleshed-out, so you never have to delve into code. This is not a game just for programmers!

Where do I play Bot Land?

What language are you coding in?

I'm coding all of Bot Land in JavaScript more specifically ES6. This includes the clients, the servers, and the automated tests.

Why aren't you using a game engine like Unity or Unreal?

First, to be clear, Bot Land uses a mix of technologies that I did not make, but I wouldn't call any of them a game engine:

  • NodeJS for the server (with many associated libraries: Restify, Babel, and so on)
  • Redux/React for the DOM UI.
  • PixiJS for WebGL rendering.
  • Esprima for validating user-defined code.
  • Blockly for visual coding.
  • MySQL for the database and Knex.js as a query-builder and migration handler. Not using an ORM.
  • Minor technologies (like Lodash, a utility library) that aren't really worth listing

As for why I'm not using a game engine: originally, I wanted to learn NodeJS, so when I set out to write the prototype for Bot Land, I had to use JavaScript. After 7 months of working on a prototype, I had a decent codebase that I wanted to be able to reuse. I also wanted the client and server to be written in the same language so that I could share classes. Finally, it's important that people are able to play the game without having to download/trust anything (i.e. just by going to https://bot.land/).

I do think that developing the client in a game engine would have made a lot of things easier (e.g. rendering, audio, publishing to multiple platforms), but there are some parts that would be much harder (code reuse, user-defined-code execution, testing).

How long have you been working on Bot Land?

I started both the stream and the development of the game on the same day: September 8th, 2015. The first stream I conducted as a Twitch partner was on September 28th, 2016.

Do you plan on making money with Bot Land? How?

Yes. Bot Land is a free-to-play (but not pay-to-win) game. You can find out more about this here.

There are actually four platforms that Bot Land is available on (Steam, itch.io, iOS, and Android), and all of them have their own payment processors.

How many people are working on Bot Land?

(keywords: "who did the artwork/music/UX/UI?", "are you working on this alone?")

Check out the credits page.

Notes about HiDeoo's involvement specifically (since you'll often see HiDeoo in the stream!)

  • Please don't treat HiDeoo as a point of contact for Bot Land. If you have bug reports, feedback, etc., HiDeoo might comment on them, but you should still post them either here on GitHub or on Discord.
  • He will probably not stream (mostly because he wasn't streaming already, not because he's not allowed to stream Bot Land work)
  • He will probably not join my stream as more than a viewer/chatter; I think conversations or collaborative work would be more efficient without being distracted by chat.
  • I will not be discussing details about pay. I already have this policy for other contractors and the budget in general.
  • HiDeoo will be working on various areas of the codebase. It will likely start with DevOps and front-end. Nothing is really "off-limits" though.
  • We're not sure how long HiDeoo will be working on Bot Land (neither in terms of number of hours nor in total duration).
  • This work started in early September, 2018. The codebase was ~72K lines of code (and ~22K lines of comments).

How many people are playing Bot Land?

At the time of writing (October 2nd, 2019), the game has only recently launched, and I don't want to share post-launch stats until they've stabilized a bit (otherwise it's going to seem very bursty).

If you're interested in some historical statistics, I used to keep this document up-to-date until launch.

When was the game released?

  • Alpha: January 30th, 2017
  • Beta: November 7th, 2017
  • Official v1 launch: September 24th, 2019

Does the game work on mobile/phone/tablet? Is there an app?

There are apps!

The game also runs on any mobile browser. Keep in mind that the URL bar will show in your browser unless you pin the site to your home screen (find out how to do that here). The official way of playing on mobile devices is to use the apps above.

More details about mobile (including questions like "what did you decide about React Native, Cordova, etc.") are described here. The summary is that the native apps are thin webview wrappers.

What is your marketing plan?

I made a public document about this here.

Where can I get a cool Bot Land shirt or merchandise?

There are Bot Land shirts and PopSockets for sale.

How is Bot Land different from other automation games like Screeps?

I've always tried to make Bot Land as accessible as possible, meaning the game focuses on automation but isn't necessarily targeted at coders. The game has a relatively simple API and uses Blockly to make visual coding possible. Finally, there's no need to even write scripts at first, so new players should be able to dive in quickly and focus on learning the rest of the game and having fun!

Comparing it directly to Screeps: Bot Land is free-to-play and is in the strategy genre as opposed to the MMORTS genre.

How is it fair that defenders have so many more bots than attackers?

There are a few things to consider here:

  • Defenders generally have an advantage in numbers, but attackers have the advantage of knowledge since they can inspect enemy bots by clicking them. By doing that, they can react to what a defender has done since the attacker is the only active player in the game. This means that it's much easier to exploit defense AI than it is to exploit attack AI.
  • Attackers have the ability to retry a match if they lose. This lets attackers get some insight into how the defender's scripts work.

Why can't I share scripts between attack/defense?

There are several reasons:

  • The absolute biggest reason is that if your bots shared scripts, then you may modify a script as an attacker and have it absolutely break your defense, but you wouldn't even realize that it happened until you started seeing losses in your battle log.
  • The plan is to eventually have attack- or defense-only items and APIs, meaning certain code would either have to be a no-op or raise a warning.
  • Scripts will rarely work as both attack and defense strategies.
  • There are other mechanisms planned for sharing snippets of scripts, e.g. being able to copy/paste Blockly or to create your own snippets in the toolbox.

Have you thought about targeting the education sector with Bot Land?

I've always wanted Bot Land to be enjoyed as a game first rather than for its potentially educational content. I see this in the same way that I see Minecraft; it was a game first that later had applications in education. For Bot Land to be primarily an educational product, I would need to spend a lot more time focusing on:

  • Debugging code
  • The teaching aspect
  • Marketing toward educators/students

I think the best summation of my original target audience is "people who like StarCraft but don't have the APM to be able to play competitively". I thought this would end up being strategy gamers from ~15-25. At the time of writing (May, 2019), it's perhaps a bit too early to say, but I have a feeling that the actual target audience is going to end up being much more programmer-y than just "strategy gamers".

How does authentication in Bot Land work?

There are two flows here: one where you've chosen not to save your login session, and one where you have (via "remember me" on the login page).

No session saved:

  1. You have to type your username/password. This is sent to the Account Server over an encrypted connection.
  2. The Account Server reads the salted/hashed password from the database for the username specified. If the credentials match, then Aabasic JWT is created that looks something like {userId: 5}. JWTs are not encrypted, but they are signed, so the server can be sure that a client hasn't modified a JWT as long as the signing key is kept private.
  3. See steps below where the flows converge

Session saved:

  1. Your authentication token is sent directly to the Account Server, thus bypassing the need for a username/password. I'm not going to go into details about expiration/refreshing.
  2. See steps below where the flows converge

Both flows converge here:

  1. The client sends the authentication token for almost every request.
  2. The server verifies the signature of the JWT, then extracts the userId specified by the token and performs actions as that user.

Why is the game lagging in Chrome?

Bot Land requires hardware acceleration in Chrome for it to work. To enable it, go to Settings → Advanced (scroll toward the bottom) → Use hardware acceleration when available.

(note: there are similar instructions for Firefox)

Stream answers

What are you doing on-stream?

I'm making Bot Land! Check out the answer to this question to find out more.

More specifically, you can type the "!today" command to find out what I'm up to at the moment.

Are there any rules that I have to follow in chat?

There are two rules for chat:

  1. Don't be a jerk
  2. Don't post personal information of anybody (including me)

I've always said that I'm the arbiter of my own time, meaning you shouldn't have to worry about whether you're derailing me with a question. With that said, due to the growth of the stream, I won't be able to address everything in chat and still be productive. If you're interested, you can read more at this blog post.

What are loyalty points for?

You can spend your points on "!lunchbrb" (25 pts - this puts your name into Adam's "BRB" screen at lunch time for a single day) or on !buylights (25 pts - a single-use token to control Adam's lights that expires at the end of the stream).

You get points by sticking around in chat (1 point every 10 minutes).

Are you standing? Why? What desk do you have?

I may be standing! I try to stand for a few hours every day if I can. I find that I move more when I'm standing, so I think it's better for my posture. The desk that I have is from Costco, and the approximate link is here, (the link kept changing, so I'm now linking to the Wayback Machine).

How do your lights work?

To find out how my lights work, read this.

I hacked your lights to give me more time! Do you know about this?

By changing the URL or refreshing the light-control page, you can make it seem like you have more time, but it's controlled by the server. You're welcome to test this out for yourself if you want, but it's just a client-side bug. :)

Also, the lights stay however you left them even after your time is up. If no one else controls them within 5 minutes, then they'll reset to dim/white.

Would you have been more productive overall if you hadn't streamed the development of the game?

On a day-to-day basis, I would probably be more productive if I weren't responding to chat (much longer analysis of that here). However, overall, I've benefited so much from having suggestions, bug-fixes, etc. from chat that I would probably have taken at least another year on this project. For example, sometimes I set out to do something in a sub-optimal way, but before I can really get started, someone in chat suggests a better way.

Also, another big reason why I'm streaming is for marketing; there are now many more people than there would have been who've heard of Bot Land.

Personal answers

How old are you?

You're not going to like this answer!

How long have you been coding for? How did you get started with programming?

I started out as a hobbyist probably around the age of 13. After coding as a hobby for a while, I started taking classes, went to college (got a bachelor's degree), got some professional jobs, then quit to work full-time on Bot Land.

What is that keyboard? Why are you using it?

I use a Microsoft Ergonomic Keyboard. It's curved like that so that your wrists are positioned more naturally which should cause less strain.

Is Bot Land your full-time job?

Yes, it is. I streamed for about 32 hours per week for the first ~3 years, then 16 hours per week for the final year (since there were so many off-stream tasks to perform like marketing, monetization support, etc.).

Now that Bot Land has launched, what are you doing?

Check out the roadmap to see what we're working on.

If Bot Land does become profitable, then I plan on supporting it for up to five years. Depending on the level of success, this may mean things like hiring more developers, buying office space, etc., or it could just mean building new features for the game.

After that, if Bot Land is not successful, I have one back-up career plan that also probably won't succeed: an edutainment show called Adam Learns (tentative name). What I'd like to do on it is set out to learn various topics, document and live-stream most of the process, and share notes with people on what I've learned.

Barring that, you'll likely see me fade away into a gray blob somewhere in corporate America.

How are you affording to work on Bot Land?

I had some savings from past professional jobs going into this, so that's paying for Bot Land. My wife has a paying job and that pays for our day-to-day expenses.

How did you get the idea for Bot Land?

(keywords: inspire, inspiration)

In 2010, I was playing Diablo II and I was blown away by how many bots there were on the ladder. Diablo II is not a game designed to be played by bots, so by having one, a player could gain an incredible advantage in experience points and wealth (and even sell items for real money!). Seeing how the game had changed from the Diablo II that I knew, I began to wonder, "what if there was a game where everyone was expected to bot?"

From there, I went on to try to make several iterations of Bot Land (an RPG, another RPG, an RTS) before Ian asked me one day the same sort of question: "what if we made a game about programming?" I'd been thinking about Bot Land for a while, and we eventually steered the new game toward what you see me developing today.

Why do you use Bing?

Because it works well and Adam gets Bing Rewards for free money.

Why do you use Windows?

The main reason why I use Windows (or Visual Studio Code, or insert program here) is because I've gotten used to it and I don't think I'm lacking much in terms of efficiency. The only thing I'd really like to improve about my Windows experience is the terminal.

Sometimes people ask me this question in a leading way, e.g. "why don't you use Linux?" My general response is "why do you think I should switch?"

Where do you live?

I live in the Greater Seattle Area.

Why do you have so many TODO lists and note-taking applications?

  • I use TODO+ inside Visual Studio Code for items that will eventually turn into commits. I commit the TODO lists themselves as well, that way I can tell what I was thinking at a particular time. Also, it's nice to have these TODO items directly inside my code editor.
  • I use Google Docs for notes that I want chat to have access to in realtime. These typically turn into documents that are only relevant to the stream.
  • I use OneNote for notes that become references for later (i.e. not necessarily commits). These are shared publicly here. They're more generic and transferable than the Google Docs notes, e.g. there are notes for Node or React.
  • I use Notepad for ephemeral post-stream notes. For example, someone may say "you should check out this YouTube video", and I'll add it to Notepad for later. The reason I use Notepad is because I want a separate program so that it's off-screen, and Notepad doesn't allow closing it without saving the contents, so I'm forced to handle the notes each day.

What was the most difficult part of working on Bot Land?

I think the most difficult part was having full responsibility for everything at the end of the day, e.g. managing tasks, setting prices, coming up with a marketing plan, prioritizing bugs, coding, figuring out the direction for the game, etc. All of these are their own entire areas, and I don't necessarily have expertise in them all, but a decision needs to be made for each at the end of the day, and I was usually the one to do it. That led to a lot of stress over the years.

I always thought that if my job were any single area of those (e.g. just coding) that it wouldn't be so bad. This is what you tend to get out of a traditional job, which is why I always say there are pros and cons to almost every option in any major decision in life.

Technical answers

What program are you using for ____? (i.e. "what's that in the taskbar?")

(keywords: IDE, programs)

  • The text editor that I use is Visual Studio Code.
  • The orange icon is Postman (main page). It's an application used for testing REST services.
  • The terminal/console that I use is ConEmu (main page). I just wanted something that gave me tabbed console windows.
    • The MySQL command line that I use is mycli.
  • The lock icon that you see in the taskbar is KeePass (main page). I use it for creating and storing passwords.
  • The blue file cabinets belong to Hyper-V, a hypervisor for running virtual machines. I used to use VirtualBox (main page), but Docker on Windows requires the use of Hyper-V, and enabling Hyper-V prevents the use of VirtualBox.
  • For source control, I use Git with a private GitHub repo to host it (Bot Land is not open-source).
  • The black circle is for OBS. I use this for streaming.
  • The rainbow-y circle that you may see some of the time is ShareX. I use this for capturing screenshots, recording GIFs, picking colors, measuring pixels on the screen, etc.
  • The keyboard shortcuts that show up on the bottom of the stream are from Carnac. I tried to make these as subtle as possible, so I had to build my own custom version of it.
  • The purple "N" icon that you see belongs to OneNote. It's what I use for taking formatted notes so that they synchronize between all of my devices.
  • I use YaTA for Twitch chat, which is hosted in a Chrome window usually. YaTA was made by our very own HiDeoo.
  • The orange-ish pepper that you see is from FruityLoops. I rarely use this program, but when I do it's for music creation.
  • You probably won't see an icon for this, but I use AutoHotkey to automate Windows. Examples include: popping up the TortoiseGit commit dialog, resizing windows to fit next to the webcam, typing out "hot strings" (e.g. typing "`r" will turn into "→"). I'm happy to share most of these scripts with you!

How can I get started on programming?

(keywords: learn, learncoding)

I wrote a bunch of notes and put them here. There aren't many specifics in there, but I find that it's good information for any new programmer to read through.

How can I get faster at typing or using shortcuts?

For typing advice specifically, I wrote my advice here.

For learning shortcuts/hotkeys, my advice is in this blog post that I wrote.

What's the TODO list plug-in for Visual Studio Code?

The TODO list plug-in is called Todo+.

The plug-in that I used to use for Sublime was called PlainTasks. I wrote a blog post on Sublime plug-ins here.

Why don't you use TypeScript?

(keywords: TS, Flow)

It's mostly just that I've never used it before and didn't want to add to my build process. I recognize the benefits that I would get from it if I were to start (e.g. not having type-related bugs). I also know that I can do things incrementally and add types just where I feel like it.

In general, these kinds of questions boil down to prioritization and cost vs. benefit, and I usually just haven't prioritized these things enough.

If you could start making Bot Land again from scratch, what changes would you make to your stack?

I think I would give the following things a shot:

  • TypeScript.
  • No Gulp whatsoever.
  • I would probably have used a proper ORM.
  • I may also have given PhaserJS another shot.
  • I may have tried using a game engine; there are certainly pros/cons here.
  • Continuous integration and deploy from an earlier point in development.
  • More automated tests.

In general, it's not that I'm unhappy with the stack that I've chosen, and I haven't exactly painted myself into a corner, but certain decisions are easier to apply after you've already made a bunch of progress. For example, the design of Bot Land changed enough over the course of development where I had to throw out large chunks of code (and test code), so it made me less inclined to write more test code in case I threw that out too.

Why did you stop using TortoiseGit?

I was using TortoiseGit for many years and was pretty happy with it. There were several small reasons to switch to a mixture of Visual Studio Code and the command line:

  • Different syntax highlighting/rendering from my main editor - I had to craft a special dark theme that never looked very good. Having consistent syntax highlighting isn't incredibly important, but I think it can make it easier to understand what you're looking at since you don't have to understand new colors.
  • There were lots of usability concerns:
    • There was a bug for a while where performance was so bad that I had to switch programs temporarily.
    • The merge UI is confusing.
    • The diff tool obscures underscores with a solid border. This once led to me deleting underscores from variable names (and breaking my program) because I didn't realize they were even there.
  • It's another thing to maintain. For example, I write lots of notes, but I don't think many people in the stream use TortoiseGit, so I feel like I'm writing them for no one other than myself.

Why did you stop using Bitbucket?

I was using Bitbucket initially because it had free private repositories. That's the only reason. It worked great when I was the only one interacting with the code, and I would never have to go to Bitbucket's site at all. Then, HiDeoo started working on Bot Land in September 2018 and we had to interact with the interface more. Due to a combination of unfamiliarity, UI sluggishness, lack of supported features (e.g. running third-party continuous integration on pull requests), and at least one outright bug that prevented commits from showing up in the UI, we decided to switch to GitHub.

With all of that said, Bitbucket has amazing support. We were only actively using its UI/features for about a week, but in that time, I submitted two tickets and got responses within ~2-3 hours (well, business hours, but that's still impressive to me). I would still recommend Bitbucket in general. Furthermore, the issues we ran into could have been mitigated by giving HiDeoo write access to the repository (which HiDeoo wasn't comfortable with) and using first-party CI (which would have cost more money).

Why did you stop using Sublime?

(keywords: VSC, VSCode)

I wrote a blog post on this here.

What are your computer's specs?

There's a spreadsheet here.

Clone this wiki locally