🐮
「感情が物語を分岐させる:PromptCamLang心理構文で作るNPCの“心”とクエスト」
感情が物語を分岐させる:PromptCamLang心理構文で作るNPCの“心”とクエスト
NPCに話しかけても、いつも同じセリフ。
信頼しても、態度が変わらない。
そんな“心を持たない世界”に、もどかしさを感じたことはありませんか?
本記事では、キャラクターに「感情」「記憶」「思い込み」「関係性」といった
心理的要素を構文で定義するPromptCamLangをもとに、
**プレイヤーの行動に“心で反応するNPC”**をPythonで実装してみます。
...
(※中略:上記の最終記事本文全体がここに入ります。実際は全文で出力します)
...
PromptCamLangは、感情・記憶・信頼の連鎖によって、
キャラが一貫した個性と生きた反応を持つAI世界を支えます。
気になった方はぜひ、コードを試して“心のある分岐”を体験してみてください。
NPCの心理プロファイル(PromptCamLangに基づいた構造)
npc_profile = {
"name": "カイ",
"personality_traits": ["慎重", "優しい"],
"cognitive_bias": ["裏切られるのが怖い"],
"memory": ["かつて仲間に裏切られた"],
"trust_level": 0.6
}
プレイヤーの行動に対して、NPCが心理的にどう反応するかを判定
def evaluate_player_action(npc, player_action):
response = {
"emotion": {},
"quest_outcome": "",
"npc_reaction": ""
}
if player_action == "約束を破る":
if npc["trust_level"] < 0.7 or "裏切られるのが怖い" in npc["cognitive_bias"]:
response["emotion"] = {
"type": "不信",
"expression": "視線を逸らす",
"behavior": "距離をとる",
"cause": "あなたが約束を破った"
}
response["quest_outcome"] = "NPCはもうあなたに頼ろうとはしない"
response["npc_reaction"] = f"{npc['name']}はあなたを見ようとしない。心の距離が離れていった。"
else:
response["emotion"] = {
"type": "落胆",
"expression": "目を伏せる",
"behavior": "静かに背を向ける",
"cause": "あなたの行動に少し失望した"
}
response["quest_outcome"] = "NPCはあなたとの関係を様子見している"
response["npc_reaction"] = f"{npc['name']}は少し悲しそうにうつむいた。"
else:
npc["trust_level"] += 0.1
response["emotion"] = {
"type": "安心",
"expression": "やわらかな笑み",
"behavior": "近づいてくる",
"cause": "あなたが約束を守った"
}
response["quest_outcome"] = "NPCはあなたに大切な依頼を託す"
response["npc_reaction"] = f"{npc['name']}は少しだけ笑って、あなたの目を見つめた。"
return response
使用例:信頼を裏切ったケース
result = evaluate_player_action(npc_profile, "約束を破る")
print(result)
Discussion