The Low-Tech AI Of Elden Ring
42 points by mikejsavage
42 points by mikejsavage
Very cool tear-down! I can confirm that being smarter than the enemy AI is one of the very few advantages you tend to have in Elden Ring. Even somewhat artificial and stilted as it is, it's pretty bulletproof and robust -- you can cheese it, but it's difficult to get it to outright break/bug out. Possible, but more rare than you'd think.
They make this work via worldbuilding, as well. There are no bustling towns full of normal people living their lives like, say, Ultima 7. When you're a fanatical demi-immortal soldier standing guard at a doorway without relief for a thousand years, probably having about one thought every few centuries, you can be forgiven for being a bit befuddled when some random foreigner with no pants suddenly yeets themselves at you face-first and flails away with the severed limb of a fallen giant or something.
when some random foreigner with no pants suddenly yeets themselves at you face-first and flails away with the severed limb of a fallen giant or something
This one eldenrings!
(Thanks for making me laugh.)
you can be forgiven for being a bit befuddled when some random foreigner with no pants suddenly yeets themselves at you face-first and flails away with the severed limb of a fallen giant or something.
DAD?!?!
This was an informative read. I especially liked the comparisons to behavior trees, planners and FSMs at the end. Learning about the timeout mechanism (to avoid getting stuck) made me smile.
I wonder, when was all that Havok tech discontinued, and is FromSoft still using it for their newest titles?
In many AI decision systems you might have heard of fancy systems for data storage like “blackboards”. In the Souls games there’s an array of floats on each Actor which are set and read arbitraily from Goals by index. Good enough I suppose!
Been reading Stanford GraphBase by Knuth (an out-of-print book from the early 90s that uses literate programming in CWEB to teach various graph algorithms) and he also uses this style. Every graph or vertex or arc struct contains some finite number of union fields that can hold scratch data particular to each algorithm; macros are employed to keep this readable within a given context, so for example get_steps_from_origin(vertex* v) might expand into v->J.i. I had not seen this style of data handling before, but interesting that it also pops up in AI and game programming!