I've been digging into #GOAP #gameai #gamedev. Here is a bunch of resources:

Jeff Orkin's GDC talk: https://www.gdcvault.com/play/1013282/Three-States-and-a-Plan

A shorter intro: https://www.youtube.com/watch?v=PaOLBOuyswI

Even shorter intro: https://www.youtube.com/watch?v=tdBWk2OVCWc

A more recent #GDCtalk about GOAP: https://www.youtube.com/watch?v=gm7K68663rA (the statistics are quite interesting!)

The Fear SDK source code with all GOAP goodies: https://github.com/xfw5/Fear-SDK-1.08

Another simpler GOAP implementation in #cpp: https://github.com/cpowell/cppGOAP

And also: https://www.unrealengine.com/marketplace/en-US/product/goap-npc-goal-oriented-action-planning-for-non-player-characters/

Three States and a Plan: The AI of F.E.A.R.

F.E.A.R.s AI was designed to provide a combat experience as exhilarating as multiplayer against a team of skilled humans. Enemies work in squads, laying suppression fire as allies advance. When confronted with a threat, soldiers shout orders to...

I gave it a go in implementing #GOAP in our project and it seems it might actually not be very suited for a "tribe sim" sort of game (think buildings and resource management). Simply because... the world is not static. Things sometimes are available sometimes are not.

The world state in Fear is a set of 22 booleans (ENUM_AIWORLDSTATE_PROP_KEY in AIWorldState.h). What happens if you have 40+ resources that can be mixed together in different buildings?

@eks I've been dealing with this exact issue on a side project and came to basically the same conclusion, we're still technically calling it "GOAP" but at this point I think it's morphed into something else entirely to deal with the massively more complicated world, as well as time-dependent goal search. (Not working all that well yet but still early days!)

@rabbitsblinkity Yeah, my case is not that the world is complicated, it's just that... it's not a boolean. Or if it's a boolean, it has the potential to be hundreds of booleans. So that kind of defeats the advantages of GOAP, which is having many different actions changing a couple of states.

My situation is more the opposite, that is a couple of actions manipulating many different states.