This post is actually less about the AI of the demi-human chiefs than it is about my process of diving into the AI. Although their decompiled AI file is 1513 lines long (50% larger than that of Margit, by far the most complex boss I've looked at so far), 70% of that is just the Goal.Activate function which chooses what to do when an enemy doesn't have any actions queued. And that's only so long because it assigns probability weights to attacks in a weirdly long-winded way for every different possible set of states and positioning (including "you encounter the non-boss version of the enemy at night" and one other state that as far as I can tell can never be set).
The boss's actual AI is among the simplest I've seen so far. It's got a few combos, but they're all short and they rarely overlap one another's attacks.
Creating this chart was difficult for me not because of the complexity of the AI, but because of the inherent challenge of taking something complex and making it simple. The code for an enemy, even one as simple as Demi-Human Chief, has way more information than an average wiki reader needs or wants. I could tell you exactly where you'd need to stand to trigger what percentage chance of a second Head Bash, or which frames of that attack can actually damage you, but anyone who cares that much might as well just boot up DSAnimStudio themselves.
My job is to distill all that information down into its most useful form. It's not really separating signal from noise, since all of the information could be something someone cares about—it's more like turning a novel into a screenplay, cutting down as much as you can while still trying to stay true to the heart of the original. Which is to say, I have to make tough decisions about how to represent the information I find in the game's files. Take this simple attack animation, for example:
The Demi-Human Chief hops forward a bit and slashes once with its knife, so one simple option would be to call this attack something like "Clockwise Slash" or "Hop Slash". While this might be fine for an enemy with as few moves as this one, I want to be as consistent as possible across all the bosses I chart out and naming each individual animation separately is unsustainable for more complex bosses with dozens of distinct animations. Each attack name has its own entry in the Attacks & Counters table on the wiki, so parsimony is a virtue.
So instead, I simply call this attack "Slash" and add a little ↻ label to help disambiguate it from slashes in other directions. I allow the initial hop to flutter down into the dustbin of unstated truths. After all, I don't include information about the AI's various dedicated movement animations, so why mention a small movement at the beginning of an attack?
After much internal debate I chose a different approach for this animation:
If I adhered strictly to the principle of parsimony, I might have categorized this simply as two clockwise slashes. But after much internal debate, I decided that attacks with distinctive movements that a player would be likely to recognize should get their own names. When you're fighting this guy it's easy to notice it spinning around like an angry beyblade and tell that that's no mere combination of smaller attacks, so I called it "Spinning Attack".
On the other hand, this animation...
...I ended up simply categorizing as three slashes in a row. Sure, if I categorized it as "Fury Slices" or something like that I could mention that the attacks comes swiftly one after the other, but anyone paying a bit of attention to the fight will figure that out for themselves quickly enough. Another bit of information hits the cutting-room floor.
