Adam edited this page Feb 6, 2019 · 97 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 a video (2m50s) that sums up overall gameplay in addition to having some much shorter videos as you scroll down the page. 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?

https://play.bot.land/

Please keep in mind that the game is in Beta, which means you'll come across bugs, unfinished portions, a lack of content, etc.

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: Express, 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 will be a free-to-play (but not pay-to-win) game. You can find out more about this here.

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).

When will the game be released?

Alpha was launched on January 30th, 2017. Beta was launched on November 7th, 2017. The release will hopefully be in spring of 2019.

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

At the time of writing (9/17/18), the game should run 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).

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

What is your marketing plan?

I made a public document about this here.

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 get a total of three phases to try to win, and damage persists between phases, so the total number of bots that an attacker gets isn't usually too far away from the number that defenders get.

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

How does authentication in Bot Land work?

This was written on October 8th, 2018, so if persistent logins are finally a thing, then this will have to be updated!

  1. You type your username and password.
  2. This is sent to an Account Server over an encrypted connection.
  3. The Account Server reads the salted/hashed password from the database for the username specified.
  4. If your credentials match, a basic 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.
  5. The client sends the JWT for every request that requires authentication.
  6. The server verifies the signature of the JWT, then extracts the userId specified by the token and performs actions as that user.

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 Natural Ergonomic Keyboard 4000. 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 stream for about 32 hours a week.

When Bot Land is done, what will you do?

First of all, Bot Land is going to take until at least April of 2019 before it could even be considered "done". After I release the game, I'm going to spend time improving it and trying to attract as many players as possible to it.

After that, if Bot Land is not successful, you'll likely see me fade away into a gray blob somewhere in corporate America. This is obviously not what I'm hoping for! There are several strategies I have in mind to try to rescue it from the brink:

  • Attract more users (e.g. by releasing on the App Store, Google Play, Steam, Itch, etc.)
  • Try to get more money from existing users (most likely by adding advertisements)
  • Try to get more money via other avenues (e.g. crowd-funding or a part-time job)

If Bot Land is successful, 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.

Either way, I'd like to still stream, but I can't promise anything. If Bot Land isn't successful, then I should really spend more time on other aspects in my life. If it's successful, then I may be too busy to stream or I may not even be a developer anymore for all I know. ¯\_(ツ)_/¯

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.

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.

You can’t perform that action at this time.
You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session.
Press h to open a hovercard with more details.