Hot answers tagged

44

If people want to bot, I don't think you can really stop them. You can of course implement many measures that make botting more or less of a pain. But you can only do so much before your codebase turns into a gigantic mess that's hell to maintain, error prone, and annoys legitimate users. Meanwhile the botters will always find a way to defeat your ...


32

I think a lot of the answers miss an important point: you can write apps that access hardware directly, but not on modern operating systems. It's not just a time problem, but a "you don't have a choice" problem. Windows, Linux, OSX, etc. all ban direct hardware access to arbitrary applications. This is important for security reasons: you don't want any ...


26

Practically its necessary, yes. It's necessary because unless you want to spend years writing what is essentially driver code for the multitude of different hardware configurations out there, you need to use an API that unifies against existing drivers written by GPU vendors for all popular operating systems and hardware. The only realistic alternative is ...


24

The best and only effective defense against bots is to design your game in a way that players don't feel the need to automatize in the first place. When your players automatize simple tasks which do not actually require skill, it is a sign that your user interface is lacking and they are substituting an UI feature they are missing. Does your game include ...


22

Don't make your game so vulnerable to johnny-on-the-spot effort First, make sure that players who only play your game for twenty minutes or an hour a day in a single sitting aren't at a huge disadvantage to players who leave it open at work and play 16 hours a day. This may require a change in your game mechanics - for instance a move allotment that fills ...


13

You can't stop them. But you can make their lifes miserable, as they have to spend lots of time writing their bots, and updating them. You have to use whatever you have to verify if user is valid. Check for request headers, and reject requests with invalid values. Either set custom headeror check for existing like user-agent. Sure it's easy to overcome, ...


8

In general, distinguishing between bots and humans fully automatically is hard, some form of human-assisted decision process works best. What I would do: define some heuristics that hint the user is probably a bot - doing a lot of actions, doing stuff 24/7, ... Then if these heuristics get over a certain threshold, do an invasive check. You can manually ...


8

Embrace the botter. You've built a restful API, perfect for a coder to experiment with automation of your game. Design your gameplay so that the bot doesn't gain an advantage over a human player due to being automated - eliminate the advantages of speed of execution etc that a machine has; design your game so the bot provides the same revenue as a human ...


8

APIs like OpenGL or DirectX are partialy implemented by the operating system and partially implemented by the graphic driver itself. That means when you would want to create your own low-level API which makes use of the capabilities of modern GPUs, you essentially need to write an own graphic driver. Making sure that your driver works with all common ...


5

Boot your PC into MS-DOS. Then, using your copy of the PC Game Programmers Encyclopedia, you can write directly into the card's VESA registers and into video memory. I still have the code I wrote 20 years ago to do this and render rudimentary 3D in software. Alternatively, you can just use DirectX; it's a really thin abstraction layer, and also lets you ...


4

In summary: Theoretically you can, but it's unfeasible, and you won't get any advantage. The limitations APIs have today become less every day, you have CUDA and OpenCL and shaders. So having full control is no more a problem. Fuller explanation: Answering this is a boring yes. The real question is why? I hardly imagine why would you want to do this ...


4

I don't neccessarily disagree with the soft-science answers but there are technical things you can do to detect botters and some things that just make life harder for them. Grade accounts by how much you suspect they're using a bot. This will feed into several other techniques and protect legitimate users from your wrath. Rotating the session cookie key. ...


2

Create a separate bot only server. Create a leaderboard and celebrate the winners. Look at the data this generates. Ban users from normal severs whose behaviour profile looks like that of a bot.


2

Whatever you do, remember to NOT make it more annoying for the real player! A lot of the responses I've seen (slower page results, not allowing multiple pages open to facilitate faster input, etc) would also prevent legitimate players from doing things fast, which will just needlessly frustrate them. imho the easiest approach may be to apply social ...


2

Have you considered making bots an integral part of the game? It's hard for bots to ruin the game for everyone else if everyone is encouraged to create them. Add support for scripting and all of a sudden the dynamics of the game changes from manual resource management strategies to bot design strategies.


1

The other answers answer your main question quite nicely: technically, it's possible, but in practice, if your goal is to broaden your customer base, you're actually doing the opposite. While wasting a huge amount of work on supporting the thousands of different hardware and OS configurations you need to support. However, that doesn't mean you have to be ...


1

There's the Unity Web Player, which is enabled by a Browser-Plugin, similar to Flash. The Web Player supports almost all features of the Unity-Engine, with the exception of some Plugins and Filesystem access. In addition to this, there's also the possibility to export the game to HTML5/WebGL. It's possible that some features of your game won't work in some ...


1

Yes it is possible to use Android libraries in libGDX. Anything Android specific should be in your -android project and anything general goes in the -core project. Normally you'd have an interface in the -core project that is implemented by classes in your -android, -desktop or web project and in your platform specific launcher (for example in ...


1

They are defined in vertex shader signature, eg. vertex ColorInOut unlit_vertex(device vertex_t* vertex_array [[ buffer(0) ]], constant uniforms_t& uniforms [[ buffer(1) ]], unsigned int vid [[ vertex_id ]]) Earlier I define them like this: typedef struct { matrix_float4x4 ...


1

To get 3D Hardware Acceleration without using a traditional API, you essentially need to write your own code to duplicate the functionality of the graphics driver. So the best way to learn how to do this is to look at the code of the graphics driver. For NVIDIA cards, you should look at the open source nouveau project. They have a collection of great ...


1

They're usually stored in GPU memory. In some cases, when the GPU has to evict them, they will need to be restored from CPU-side memory, but this is "uncommon" unless you are really thrashing the card. You should never see them populated from CPU every frame under normal conditions unless you are also updating the texture CPU-side every frame.



Only top voted, non community-wiki answers of a minimum length are eligible