Der größte Knackpunkt für die KI ist, das man es shafft die Interaktion zwischen den Entities zu ermöglichen.

Ich verwende ein sogenanntes Zyklussystem.
Das heisst, jede Entity startet mit ihrer actionfunktion einen "Lebenszyklus".

Bei jedem durchlauf (ein wait(1)) werden Kommandos ausgeführt.

So wird zuerst in dem Arraypart, den die Entity zugewiesen bekommen hat nachgeschaut, ob ihr eine Andere Entity ein Kommando gegeben hat, das kann zB sein: ich habe dich angegriffen und stehe neben dier.
Jezt kann die Entity entscheiden, ob sie sich ihrem angreifer zudreht oder wegrennt.

Auch kann der Entity das Kommando "Stirb" gegeben werden. Dann wechselt sie ihren Status zu tot.

Dananch wird überprüft, was die KI steuerung von der Entity will, so kann sie ihr auftragen einen neuen Weg in der Wegesuchfunktion suchen zu lassen. Dann wechselt sie ihren status in folge dem Weg...

Alle Entityvariablen sollten über eine set_meinevariable(Entity.skill_id) get_meinevariable... gesezt werden, die mit einem globalen array arbeiten, so ist man von levelwechseln unabhängig.

Und ein vernünftiges Pathfinding welcher art auch immer ist das Grundgerüst einer KI

sehr komplexes Thema....