I've been working on a multiplayer (MMO-ish) game. Currently at the point where most of the core stuff is in place and now I'm implementing the A.I. Recently there have been some great links posted on HN regarding Game A.I, and I'm very grateful for it! Implementing A.I has been a ton of fun and not as overwhelming as I thought it'd be. I think my game will be dependent on "smart" A.I behavior so I'm really trying to get this part down.
The language i'm using - Elixir - also has some very interesting features that make it easy to integrate async a.i planning + a.i to a.i group communication. Ahh, I find it so exciting. The main simulation loop is never blocked. Meanwhile the A.I planner just chugs along as a separate process, spawning and despawning new agents in the world, creating and merging control groups, and setting new goals.
Nice use case about Elixir! You should definitely write about it, I'm getting sick of the "We used Elixir/Phoenix/LiveView" articles out there. MMOs are one field where Erlang/Elixir can shine a lot due to their concurrency model, their fault tolerance, and especially no-downtime upgrades thanks to hot code reloading (very attractive to upgrade the server without disconnecting people).
I've been meaning to write a StarCraft 1 AI bot and put in the 24/7 SSCAIT tournament on Twitch but... never enough time. Elixir seems like the perfect fit, though it's unclear whether it can handle the computations when things get hectic.
My last project with Elixir was using Elixir merely as an orchestrator of static binaries (developed in golang) which were talking in JSON via stdin/stdout.
GOAP has worked very well for us for an open-world game with tons of NPCs taking part in non-linear interweaving quest lines. Planning performance is an ever growing issue however…
Goals have to evaluate their preconditions/etc and depending on your game to do so might be expensive. If a precondition for a goal is that a place in the world is reachable, you'd need to be able to run a pathfinding query to satisfy it. Other game systems might have bad Big-O as content gets added. The mission availability system in our game is one example, as we doubled the number of quests and NPCs post-launch and had to do some optimization.
Yeah, F.E.A.R. left a lasting impression on me. NPCs charted a path around the level to sneak up behind me and kill me while I was in a protracted firefight with the rest of their buddies.
I now have a strong need to go and replay F.E.A.R and see how well it holds up! I remember back in the day comparing it favorably to Half Life 2, which still holds up well.
if you do, be sure to check PCGamingWiki to see what you should do to make it run as well as possible on modern machines—I ran into issues both with F.E.A.R. and Condemned: Criminal Origins, another title from the same developer https://www.pcgamingwiki.com/wiki/F.E.A.R.#Essential_improve...
Conventional game AI is usually search algorithms for movement (like A*) + finite state machines for behavior. No network calls to LLMs, no machine learning, etc. At the fringes, throw in the odd markov chain for procedural text generation.
Basically AI post 2019 usually means LLM, and they're making the distinction that this is not that.
All AI systems (including A* and LLMs) can be thought of as a system that explores a search space to obtain a certain goal. At least this is what I understood from reading artificial intelligence -a modern approach by Peter norvig.
Both A* and deep learning explores a search space based on a goal. The difference is DL explores when it's training and learns to use the right moves for a given input.
Artificial Intelligence - a Modern Approach was published in 1995.
It should be fairly obvious that what we think of as 'conventional AI' might have changed in the last 28 years, even if we hadn't just been living through a twelve month or so explosion in the availability and power of generative AI models that transformed what people associate the term with.
We are talking about 'conventional AI' in terms of games though. I don't think there was any explosion apart from the fact you can use generative AI to make art.
That book has the latest edition in 2020. But yeah, A* is search space based, LLMs or DL I wouldn't call it search space based at all. It's function fitting.
It still seems worthwhile to make the distinction; it might be possible to think of them as the same thing at a high enough level, but the actual libraries and algorithms used are different.
Any book recommendations for conventional game AI? (Particularly with the "game" part, as games always have interesting constraints.) Thanks in advance.
I can't think of any books off hand, it'll vary depending on what kind of game you're making. Like the AI in F.E.A.R. will be different from Starcraft, which different than that in XCOM, etc.
And if you're scaling difficulty, then you're likely tuning how the AI behaves.
GDC, GDCVault, academic papers, and dev blogs//post mortems of similar games to what you're interested in will have a lot of good information.
Planning / A* search is hardly a bunch of ifs, and is a crucial component of these systems. Expert systems are closer to a bunch of ifs, but that overlooks that the challenge is in coming up with the conditions, not writing if statements.
Code format for a 1 line like this example is nowhere close to # of lines in other files, the networking delays, and also can't be done client-side with current hardware to the scale needed for multiple entities all weighted uniquely in the current 2023 "AI" tools.
Not the person you're asking, but I think it's clear from context that they meant "no artificial neural networks" and other forms of AI that are trained from data. From the Github repo:
It provides:
Finite State Machines
Behavior Tree
Utility AI
Goal Oriented Action Planning
I'm not sure you can really design a well put together experience around a DL agent, but if you can, it might as well just be handcrafted with some of these abstractions anyway.
Because in the end, you essentially need high understanding/constraints of how it will behave otherwise you've lost control over the experience as the designer.
I would like to say thank you for posting this, I am currently building a similar toolkit in Lua and will most likely restart and just port your code instead :)
related question to @Jemaclus above - why is C++ the popular language for gamedev? not C# or some other higher level language. is it only for when you're working on console games or does it also matter on desktop games?
The number of emojis in that readme is ridiculous. It non-sarcastically makes me doubt the quality of the project. (although having the repo URL point to a LinkedIn page is probably worse)
Emoji in readmes seem to be a fairly consistent trend in the generative AI/ML space.
The generative AI/ML scene seems to be very meme-y, from that, to all of the anime related stuff, to Mistral releasing models as torrents with warez-scene style .nfos, etc.
Context: Spent most of my C-ish experience on Objective-C
What is the advantage of header-only?
My mental model was headers ~= implementation as far as compiler is concerned, thus limiting the size of headers is a way to indicate API surface area and document.
It's all C++ template classes, which must be fully defined at their declaration site (so the header). When using the template, the compiler will generate the code needed by "instantiating the template" (for lack of a better word).
The other advantage is that it requires no build system to include in your project.
The language i'm using - Elixir - also has some very interesting features that make it easy to integrate async a.i planning + a.i to a.i group communication. Ahh, I find it so exciting. The main simulation loop is never blocked. Meanwhile the A.I planner just chugs along as a separate process, spawning and despawning new agents in the world, creating and merging control groups, and setting new goals.