About me
Hello, I'm currently developing a retro MMORPG sandbox survival game called Colonies. It's been under development for 8 months now and has been played by over 300 people in my alpha group. The fans of my game come from a hardcore niche who's sole purpose is to 1-up the other players in the game.

The problem
Botting, although minimal so far, could potentially be a problem. As a former bot programmer, I know all the tricks people use, and after fair assessments and trials, I've concluded that Colonies is extremely easy to bot due to repetitive tasks and gameplay. Stats are gained by grinding on rocks, fishing for hours, and harvesting crops, which are all tasks that are easy to automate.

The idea
I need ideas on how to stop this. Botting is impossible to stop, but changing the gameplay to be more skill-based is possible. That is my question to you. How do you make a game more based on rational human judgement than on something which can be automated?

how exactly would you design mechanics so they couldnt make a bot for it?

There are any number of things that can be easy for a human (so the grindy character of the game is not necessarily affected), but hard for bot AI. I'd mainly try to put in positional strategy and pattern recognition, threats for the player/bot which are extremely lethal while being easy to avoid. The key is that there should be no content anywhere in the game that a bot can go through on autopilot while getting a worthwhile stream of income/loot.

I get a 404 when clicking your link, so i can't comment on how the game works(is it basically you tune in, set some stuff to happen, come back later?)

basically, the key is to maintain interactivity imo. of course this can still be thwarted(such as aim-bots for fps's) the best ability to ensure that botting doesn't occur is to do your best to try and "detect", and inform your mods, give your community good tools for potentially detecting and alerting mods when they think someone is botting(such as being too perfect at timings, and such).

Keep the basic bot-able skill of harvesting but make it worth next to nothing. Create a skill based (random timing based combo of keys, etc) system to increase yield. Upgrade the skill levels in the interest increasing the yield amount by completing more complicated skill based actions and a wider variety of them. The level system keeps players invovled in the process, the skill based controls makes botting more difficult. I'm fond of mouse drawing or line following tasks. With actual tasks such as fishing and harvesting, its the prep work that really matters so making the prep work a skill based meta on its own will help to keep botting at a minimum. Making accuracy an element will make player's feel accomplished even if they don't accomplish it at %100 and create replay to achieve the highest PB they can.

One key question is what level of sophistication you are trying to defeat.

Keep the basic bot-able skill of harvesting but make it worth next to nothing. Create a skill based (random timing based combo of keys, etc) system to increase yield.

QTE sequences aren't exactly the first thing that comes to my mind from anti-botting.

Randomizing them is only sufficient to stop non-interactive scripts. It would not stop a bot which intercepts drawing commands rendering the key prompts.

You could obfuscate the rendering of the prompts, but it wouldn't stop a bot that reads game logic data directly from memory.

Even if all the game logic was on the server and the visuals were streamed as video, a bot could still read the screen buffer and use pattern recognition to detect the prompts. You probably do not want to obfuscate QTE prompts CAPTCHA-style, but prompts with no variation are easy to detect reliably even without sophisticated coding or processing power.

Mechanics inherently involving strong pattern recognition would be more natural anti-botting tools. Even the most casual of farming games could generate goats around the map, then require the player to plant their cabbage into areas not reachable by those goats or suffer huge losses. Not a problem for humans. We see at a glance whether any goats are inside the same fence/river/wall/vegetation delimited goat-passable region as a particular planting spot we are considering; it's not even a challenge. But a bot with no direct access to game logic would have a hard time with that and similar mechanics. It would have to detect most of the terrain with a high degree of confidence before being able to make any sort of reasonable decision.

I took a look at your game, maybe you could create a special game object that could appear "coding wise" to be a tree or a mineral rock - however one of its other values informed the engine to not actually render it for the user - then a mod can place them near a user they beleive to be botting - and if the user, who cant actaully see the "resourcing obtaining game object", attempts to mine it - you will know that it did that by accessing the level data instead of doing it the human way - runescape has a neat anti-botting concept where every few hours it shifts the colors on all of the items on the game by 1 or 2 values so that bots that look for an exact color wont work. so if each of the resources are slightly randomized when created to keep programs like SCAR-Divi from working and thus forcing them to determine whats going on by looking at the map data - and then manual checks are done it can be fairly well removed. any purely automated anti-botting defence can as you said - be automated around.

We see at a glance whether any goats are inside the same fence/river/wall/vegetation delimited goat-passable region as a particular planting spot we are considering; it's not even a challenge. But a bot with no direct access to game logic would have a hard time with that and similar mechanics. It would have to detect most of the terrain with a high degree of confidence before being able to make any sort of reasonable decision.

Ah, thats a good idea. The only problem is that you can kill goats in my game, which would be easy to bot (see any goats? kill them). A way I worked around mining bots was that I made mountain trolls pop out at random blocks, but again, they can be avoided by adding some sort of attack script.

I took a look at your game, maybe you could create a special game object that could appear "coding wise" to be a tree or a mineral rock - however one of its other values informed the engine to not actually render it for the user - then a mod can place them near a user they beleive to be botting - and if the user, who cant actaully see the "resourcing obtaining game object", attempts to mine it - you will know that it did that by accessing the level data instead of doing it the human way - runescape has a neat anti-botting concept where every few hours it shifts the colors on all of the items on the game by 1 or 2 values so that bots that look for an exact color wont work. so if each of the resources are slightly randomized when created to keep programs like SCAR-Divi from working and thus forcing them to determine whats going on by looking at the map data - and then manual checks are done it can be fairly well removed. any purely automated anti-botting defence can as you said - be automated around.

I do the color testing to some degree with my day/night system. However, it doesn't help when a lot of the bots can just use positioning and autohotkeys to mine. You simply have to right click to mine, so what does that really do to stop people from just auto-clicking every 5 seconds in the same area (while also doing checks for depleted nodes etc).

Also, I'd rather not use any captcha or techniques. The point of this thread was to encourage anti-bot GAMEPLAY, not checks and tests to prevent players from using bots.

Ah, thats a good idea. The only problem is that you can kill goats in my game, which would be easy to bot (see any goats? kill them). A way I worked around mining bots was that I made mountain trolls pop out at random blocks, but again, they can be avoided by adding some sort of attack script.

I'm still not sure which level of botting sophistication you are looking to defeat. Just static input scripting?

If it's just that, then surely you can spawn trolls that are too strong to fight but easy to avoid. A human will just get out of the way, and a dumb mining bot won't.

If you want to use my "goat mechanic" or some variation of it, it's easy enough to re-theme it so you don't have to alter the goats you already have for another purpose. Substitute gophers for the goats, and substitute root vegetables for the lettuce. It's reasonably intuitive that the gophers can't be killed by the player and the crops can't be eaten by the goats, because both the gophers and the edible parts of the crops are underground. Gophers also make it easier to rationalize how they spawn randomly around the map - they dug in from somewhere and are just temporarily residing in a particular area - compared to goats.

The plain version of that mechanic is really too simple to be interesting for humans, but you could easily add more rules to the optimization puzzle. For instance, maybe every land predator inside a particular area negates some amount of pests, there are nesting birds of prey which negate some amount of pests inside a set radius from the nest, different terrain features make the crop produce more, etc.

*Multiple ways to trade (trade "chains"? sell to a player trader instead of carrying your gold to a far away marketplace?)

*Trading item->item instead of item->monies, so that the bot needs to know about all the items to see if a trade is good and somehow react if its not

-Social interaction

*The aforementioned trade chain thing

*Cooperation in stuff

*Word of mouth ("Something awesomly profitable just spawned there!", "The dragon is on its way, hide in da caves!")

-Dynamic-ness

*Changing weather

*Changing best sources of profit

*Changing threats

*In game events of all kinds

-Weapons

*If you can add weapons, make them complex enough that the bot cannot defend itself just by spamming "attack". People will surely want to kill stupid bots which have been mining for gold for the last 12 hours