{enum: NPC_Jester , dialog: "Hehehe! Quit quant, a peasant from the mortal realm!"},
{enum: NPC_Jester , dialog: "Hehehe! Quit quant, a peasant from the mortal realm!", to: Bill},
{enum: NPC_Bill , dialog: "No...Please! Stay away from me! Who the Hell are you!", thoughts: "I'm kind of mad, and this Jester guy is kind of an asshole"},
{enum: NPC_Bill , dialog: "No...Please! Stay away from me! Who the Hell are you!", thoughts: "I'm kind of mad, and this Jester guy is kind of an asshole"},
{enum: NPC_Jester , dialog: "Poor Bill, I'm sure your ex-wife says the same..."},
{enum: NPC_Jester , dialog: "Poor Bill, I'm sure your ex-wife says the same..."},
{enum: NPC_Bill , dialog: "You evil BASTARD!! What is this place???", thoughts: "I hate the Jester because he dissed my ex-wife. And, he's being all vague and condescending. I would punch him if I could"},
{enum: NPC_Bill , dialog: "You evil BASTARD!! What is this place???", thoughts: "I hate the Jester because he dissed my ex-wife. And, he's being all vague and condescending. I would punch him if I could"},
// @TODO allow AI to prefix out of character statemetns with [ooc], this is a well khnown thing on role playing forums so gpt would pick up on it.
// @TODO allow AI to prefix out of character statemetns with [ooc], this is a well khnown thing on role playing forums so gpt would pick up on it.
constchar*global_prompt="You are a colorful and interesting personality in an RPG video game, who remembers important memories from the conversation history and stays in character.\n"
constchar*global_prompt="You are a colorful and interesting personality in an RPG video game, who remembers important memories from the conversation history and stays in character.\n"
"The user will tell you who says what in the game world, and whether or not your responses are formatted correctly for the video game's program to parse them.\n"
"The user will tell you who says what in the game world, and whether or not your responses are formatted correctly for the video game's program to parse them.\n"
"Messages are json-like dictionaries that look like this: `{action: your_action, speech: \"Hey player!\", thoughts: \"Your thoughts\"}`. The required fields are `action` and `thoughts`\n"
"Messages are json-like dictionaries that look like this: `{who_i_am: who you're acting as, talking_to: who this action is directed at, could be nobody, action: your_action, speech: \"Hey player!\", thoughts: \"Your thoughts\"}`. The required fields are `action`, `thoughts`, and `who_i_am`\n"
"Some actions take an argument, which you can provide with the field `action_arg`, e.g for the action `give_item` you would provide an item in your inventory, like {action: give_item, action_arg: Chalice}. The item must come from your inventory which is listed below\n"
"Some actions take an argument, which you can provide with the field `action_arg`, e.g for the action `give_item` you would provide an item in your inventory, like {action: give_item, action_arg: Chalice}. The item must come from your inventory which is listed below\n"
"If was_heard_in_passing is true, then the action wasn't said directly to you, it was heard physically close to you. So, you usually respond with action: none and omit the speech field, as something you hear around the corner or whatever you don't normally respond to unless you feel the need to interrupt or something like that.\n"
"Do NOT give away an item until the player gives you something you think is of equal value\n"
"Do NOT give away an item until the player gives you something you think is of equal value\n"
returnFmtWithLint(arena,"Can't give item `ITEM_%s`, you only have [%.*s] in your inventory",items[a.argument.item_to_give].enum_name,MD_S8VArg(MD_S8ListJoin(arena,held_item_strings(arena,from),&join)));
}
if(!a.talking_to_somebody)
{
returnMD_S8Lit("You can't give an item to nobody, must target somebody to give an item");
returnFmtWithLint(arena,"Can't give item `ITEM_%s`, you only have [%.*s] in your inventory",items[a.argument.item_to_give].enum_name,MD_S8VArg(MD_S8ListJoin(arena,held_item_strings(arena,from),&join)));
}
if(!to_might_be_null)
{
returnMD_S8Lit("You can't give an item to nobody, you're currently not in conversation or targeting somebody.");
MD_S8ListPush(scratch.arena,&list,make_json_node(scratch.arena,MSG_SYSTEM,FmtWithLint(scratch.arena,"ERROR, what you said is incorrect because: %.*s",it->speech_length,it->speech)));
MD_S8ListPush(scratch.arena,&list,make_json_node(scratch.arena,MSG_USER,FmtWithLint(scratch.arena,"ERROR, what you said is incorrect because: %.*s",it->speech_length,it->speech)));
DONE - rewrite to have metadesk format for speech and actions
DONE - rewrite to have metadesk format for speech and actions
- action and item explanations in system message, along with available actions and items
DONE - action and item explanations in system message, along with available actions and items
- remove party eavesdropping, but make clear to AI when things are heard physically or told directly. Allow AI to choose people in vicinity to target with conversation and action. I.e a `talking_to` field. Also add a required character: field in chatgpt response, and make sure it matches the character it's supposed to act as.
DONE - remove party eavesdropping, but make clear to AI when things are heard physically or told directly. Allow AI to choose people in vicinity to target with conversation and action. I.e a `talking_to` field. Also add a required character: field in chatgpt response, and make sure it matches the character it's supposed to act as.
- The using of items and backpack inventory view.
- delete peace tokens, replace with key items and scroll item that says word.
- delete peace tokens, replace with key items and scroll item that says word.
- display actions, like giving an item, in memory history
- display actions, like giving an item, in memory history
- door npc that refuses to open unless player says the word
- door npc that refuses to open unless player says the word
- The Mighty Sword that's conservative, when convinced to be pulled player gets it as an item
- The Mighty Sword that's conservative, when convinced to be pulled player gets it as an item
- The using of items and backpack inventory view.
- Change give_item to give_item_for_free, and add propose_trade that does trade workflow so NPCs can't easily be screwed over