During conversation, there is a chance the AI NPCs will trigger animations when they respond.
These animations are based on a list of moods that the LLM can pick during a response.
This is the EMOTEMOODS list. You can limit what type of animations are played per NPC by editing this list.
In the animations table we have the mood sarcastic linked with the ingame animations: IdleDialogueExpressiveStart,IdleWipeBrow,IdleCiceroAgitated,IdleApplaudSarcastic
So when an AI NPC gives a response and they categorize it as “sarcastic” in their prompt, it will play one of those animations from that list. We are not animation experts, so we just picked from the list of vanilla “idle” animations in Skyrim. We have not tested using modded animations or the naming required to trigger them.
If you wish to add your own custom animations to NPCs, you can use the animations_custom table and insert a new row into it. Note: The npc column is to limit the animations to specific NPCs by name (e.g. mjoll_the_lioness). This has not been implemented yet.
Actions are more likely to trigger through natural conversation with smarter LLM’s.
Dumber LLM’s will have a harder time triggering actions unless you specifically say the command exactly. AI NPCs will only trigger actions if they want to.
Inspect NPC
Inspect Surroundings
Move To (Short distance travel to nearby entities/enterable buildings in the same cell, e.g. “Move to the Bannered Mare)
Travel To (Long distance travel to fast travel locations, e.g. “Travel to Solitude”)
Note: This command can be unpredictable as it's looking for the worldspace name as the target. Some locations may not be valid or require correct spelling. Most major towns and cities do work however.
Tip: Here is you how you can make the command more reliable.
Click this in the MCM menu. This will send all Travel To locations in your game to the CHIM server. This will allow for more accurate targeting of locations. You can view the list in the Dwemer Dashboard on the server.
Attack
Open Inventory (Followers = Inventory Menu, Other NPCs = Barter Menu)
Check Inventory
Sheathe Weapon
Take A Seat
Read Quest Journal (Allow the AI to see your current quests)
We highly recommend you use this mod for CHIM, as it makes most generic NPCs interesting! By giving each NPC a unique name it means CHIM can more easily track conversations, memories and personalities for these more generic NPCs.
Without this mod, all the Whiterun Guards will technically be a “hivemind” as we track everything based on the NPC name. We treat names very seriously with CHIM, and ideally for a full immersive world every single NPC needs a unique name.
Make sure that AIAgent overrides Real Names - Extended for this to work! There is nothing else you have to do apart from this.
How it works is that any generic named NPC from the mod will be imported into CHIM like normal. They will be given a unique profile based on their original role. Meaning that every single generic NPC will have their own memories and personality.
Here is an example of a Morthal Guard named Skjorlak the Trim who has been activated for CHIM.
What is also very neat is that every single generic NPC will have a random HERIKA_DYNAMIC personality assigned. Meaning that each guard, bandit, forsworn, etc will behave a little different thanks to these random traits.
The technicals of how this “just works” is by changing the script for Real Names Extended to place their original name in brackets. E.G.Morthal Guard becomes Skjorlak the Time [Morthal Guard]. We then do a bunch of code stuff to extract their original role from the brackets, and give them an appropriate HERIKA_PERS so they have a basic roleplay profile.
We highly recommend you use this mod for CHIM. It improves AI interactions a lot with the more “generic” NPCs.
This feature allows your player to “speak” with an AI TTS voice when you use the chat box to speak. I will admit we thought this was a silly feature to add at first, but after using it, we understand why it's useful. It allows you more easily roleplay other characters without you having to be a professional voice actor!
It is configured in the default profile only. You simply just need to choose an TTS service you have running and use an available voiceID for the service.
E.G. If you are using MeloTTS you could use “maleguard” or with the CHIM XTTS you can use “mjoll_the_lioness” if you have their voice generated already.
Soulgaze allows AI NPC’s to visually see the game. This works by sending an image of the game to an appropriate AI service whenever you press the “Soulgaze” MCM hotkey. They will then describe the visuals in the image and talk about it.
Tip: You can also trigger Soulgaze with the verbal command “Use Soul Gaze”.
You can alter how it works under Soulgaze (ITT) in the configuration wizard. You can use an OpenRouter model by changing the OpenAI connector URL.
Soulgaze can potentially use up a lot of tokens as image processing is expensive for LLMs.
All AI NPC’s use a file called prompts.php to see how they should respond to certain ingame events.
For example: "diary"=>[
"cue"=>["Please write a short summary of {$GLOBALS["PLAYER_NAME"]} and {$GLOBALS["HERIKA_NAME"]}'s last dialogues and events written above into {$GLOBALS["HERIKA_NAME"]}'s diary . WRITE AS IF YOU WERE {$GLOBALS["HERIKA_NAME"]}."],
"extra"=>["force_tokens_max"=>0]
],
This prompt tells the AI NPC how to write a diary entry whenever you trigger it to happen ingame. This one is pretty basic and we are just prompting the LLM to try and write a standard diary entry.
We have an editor that allows you to adjust how AI NPCs respond to these events by changing prompts.
You can adjust how AI NPC's write their diary entries, what they say during bored events, how to summarize books and more! It is also possible to adjust how often these events are triggered.
With the above example we can adjust it in the custom prompt editor to: "diary"=>[
"cue"=>["Please write a long summary of {$GLOBALS["PLAYER_NAME"]} and {$GLOBALS["HERIKA_NAME"]}'s last dialogues and events written above into {$GLOBALS["HERIKA_NAME"]}'s diary . WRITE IN THIRD PERSON ONLY"],
"extra"=>["force_tokens_max"=>1500]
],
Now diary entries should (if the LLM behaves) write longer diary entries in third person. We also added a forced token limit as well.
This can be done in the Custom Prompt Editor in the Configuration menu.
This can be a very powerful, albeit advanced tool. Having knowledge of JSON formatting will help you a lot. Or just use ChatGPT to help you.
How it looks in our web editor.
¶ Book Prompt Tutorial (Credit: PhospheneOverdrive)
In webnav bar > Configuration > Custom Prompt Editor
Paste the following into the text field on the Custom Prompt Editor Page then hit the save button below the field:
<?php
$PROMPTS["book"] = [
"cue"=>[
"(Note that despite their questionable memory & education, {$GLOBALS["HERIKA_NAME"]} is capable of speed reading entire books) "
],
"player_request"=>[
"{$GLOBALS["PLAYER_NAME"]}: *{$GLOBALS["PLAYER_NAME"]} hands {$GLOBALS["HERIKA_NAME"]} a book.* {$GLOBALS["HERIKA_NAME"]}, give me an erodite book review on the following text:"
] // This is required for "book" prompt
];
?>
3. You can hit the validate to make sure its properly formatted (if you copy-pasta exactly you should be good to go)
4. Get a book summarized in game. You should hear the difference.
(My preferred method is to just edit the `\\wsl.localhost\DwemerAI4Skyrim3\var\www\html\HerikaServer\prompts\prompts_custom.php` directly as I find the webui a bit finicky.)