AI対話RPGツクールMZ

RPG Maker MZ AIダイアログ

私は普段どおりPythonでプログラミングをし、GROQのAPIを使用していました。そしてふと、「RPG Maker MZ向けに何か作ってみよう」と思いました。

ちょうどFOWミニマップの開発を終えたところだったので、座って簡単なコードを書き上げました。

このプラグインは無料で公開しています。今後開発を続ける予定はありません。自由に持って行って、好きに使ってください。ライセンスはMITです。これは趣味で作ったもので、メンテナンスを続けるプラグインではありません。このバージョンで提供される機能は以下の通りです:**


GroqNPC.js – RPG Maker MZ用AI搭載動的NPCエンジン​

バージョン: 2.2.0
ライセンス: MIT – 自由に使用してください
要件: RPG Maker MZ、Groq APIキー(無料枠あり)


内部構成​

このプラグインは、RPG Maker MZのゲームをGroqの高速LLM API(Llama 3.1)に接続し、4つの統合システムを提供します:

レイヤー - 機能 - 概要**
1 - AIダイアログ - メモリ付きストリーミング会話、10秒タイムアウト
2 - クエストマシン - クエストを定義;すべてのNPCが状態を自動的に共有
3 - NPCの知識 - NPCはクエスト状況、仲間、世界の状態を知る
4 - 敵の行動 - AIが戦術を決定し、戦闘前にMZスイッチを設定


クイックスタート – ドラゴン狩りの例​

1. クエストを定義する(自動実行イベント内)​

コード:

Plugin Command: Define Quest
  Quest ID: dragon_hunt
  Title: The Dragon of Ashvale
  Objectives: Talk to Mark|Find the lair|Defeat the dragon
  NPC Members: Mark,Sera,Old Tom
  Quest Switch: 10
  Quest Variable: 11

2. マーク(クエスト発行者)を訓練する(彼のイベント内)​

コード:

Plugin Command: Train NPC Persona
  Name: Mark
  Personality: You are Mark, a grizzled dragon hunter. You lost your left eye to the Ashvale Dragon 20 years ago. You speak in a gruff, tired voice and constantly warn about danger.
  Role: questgiver
  Quest ID: dragon_hunt
  Guardrails: Never tell the player the dragon is easy to beat
  Fallback Message: I ain't lyin' to you about that beast.
Plugin Command: Start AI Dialogue.

3. 仲間(セラのイベント)を訓練する​

コード:

Plugin Command: Train NPC Persona
  Name: Sera
  Personality: You are Sera, a young eager mage who wants to prove herself. You admire Mark but think he's too cautious. You speak quickly and enthusiastically.
  Role: companion
  Quest ID: dragon_hunt
  Max Tokens: 150

Plugin Command: Start AI Dialogue

4. 敵の行動 – ドラゴン戦前​

コード:

Plugin Command: Evaluate Enemy Behavior
  Enemy Name: Ashvale Dragon
  Enemy Description: Ancient red dragon, wounded but enraged. Scales are cracked on the left side (Mark's old wound). Breathes fire every 3 turns.
  Quest ID: dragon_hunt
  Behavior Switch Base: 20
  Player HP % Variable: 1

その後、戦闘イベントでスイッチを確認します:

  • スイッチ 20 ON → 攻撃的(全攻撃)
  • スイッチ 21 ON → 防御的(ガード/バフ)
  • スイッチ 22 ON → 逃走(脱出試行)
  • スイッチ 23 ON → 援軍(味方を呼ぶ)
  • スイッチ 24 ON → 激昂(暴走モード)

5. 任意の場所でクエストを進行させる​

コード:

Plugin Command: Advance Quest Objective
  Quest ID: dragon_hunt

dragon_huntにリンクされたすべてのNPCは、自動的に新しい目標を認識します。


テキストフォーマット(AI → MZカラーコード)​

AIはキーワードをセマンティックタグで囲みます。プラグインはそれらをMZのカラーコードに変換します:

タグ - 目的 - MZカラー

コード:

[important]text[/important]
  • 危険、警告、重要情報 - 赤 (2)

コード:

[highlight]text[/highlight]
  • 名前、場所、アイテム、固有名詞 - 黄色 (14)

コード:

[secret]text[/secret]
  • 秘密、稀な知識、機密情報 - 緑 (3)

コード:

[weak]text[/weak]
  • 噂、不確実な情報、曖昧なヒント - 灰色 (8)

AI応答の例:

コード:

DIALOGUE: The [highlight]Dragon of Ashvale[/highlight] sleeps near the
[highlight]eastern caves[/highlight]. It is [important]extremely dangerous[/important]
– its fire can melt steel in seconds.

PROMPT: Ask about the weak spot?

プレイヤーが見るもの: 自動的に色付きテキスト(場所は黄色、警告は赤など)


⚙️ プラグインパラメータ(プラグインマネージャーで設定)​

パラメータ - デフォルト - 説明

コード:

Groq API Key
  • (空) - [console.groq .com/keys]から取得

コード:

AI Model

コード:

Stream Timeout
  • 10秒 - 強制終了。トリガーされた場合は部分的なテキストを表示

コード:

Chat Memory
  • 4回のやり取り - 各NPCが記憶する往復メッセージの数

コード:

Default Input Prompt
  • What do you say? - AIがプロンプトを生成しない場合のフォールバック

コード:

Max Player Input Length
  • 100文字 - プレイヤーが入力できる文字数を制限

コード:

Global System Prompt Suffix
  • (空) - すべてのNPCプロンプトに追加される。例:「3文以内に抑えてください。キャラクターを崩さないでください。」

コード:

Timeout Fallback Message
  • Hmm… I need a moment to think - APIがタイムアウトした場合に表示

コード:

Debug Mode
  • false - フルAPIペイロードをF8コンソールにログ出力

完全なプラグインコマンドリファレンス​

クエスト管理​

コマンド - 引数 - 説明

コード:

defineQuest
  • questId, title, description, objectives (パイプ区切り), npcMembers (カンマ区切り), questSwitch, questVariable - クエストの作成/更新

コード:

advanceObjective
  • questId - 現在の目標を完了としてマークし、次の目標へ移動

コード:

completeQuest
  • questId - クエストを完全に完了としてマーク

コード:

failQuest
  • questId - クエストを失敗としてマーク

NPCペルソナ​

コマンド - 引数 - 説明

コード:

trainPersona
  • name, personality, role (none/questgiver/companion/merchant/informant), questId, guardrails, fallbackMessage, maxTokens - NPCの性格を定義。startDialogueの前に呼び出す

コード:

startDialogue
  • (なし) - このNPCとのAI会話を開始

コード:

clearMemory
  • (なし) - このNPCの会話履歴を消去

コード:

clearAllMemory
  • (なし) - すべてのNPCの会話履歴を消去

敵の行動​

コマンド - 引数 - 説明

コード:

evaluateEnemyBehavior
  • enemyName, enemyDescription, questId, behaviorSwitchBase, playerHpPercent - AIが行動を決定し、MZスイッチを設定

ユーティリティ​

コマンド - 引数 - 説明

コード:

testApiKey
  • (なし) - APIキーが機能することを確認。メッセージウィンドウに結果を表示

コード:

setContextVar
  • label, variableIdまたはswitchId - ゲームの状態をすべてのAI呼び出しにグローバルに公開

️ ノートタグ(Train Personaの代替)​

これらをイベントのノートフィールドに配置します:

コード:

<AIPersona: You are a paranoid old hermit who hoards mushrooms and mistrusts strangers.>
<AIRole: informant>
<AIQuestID: dragon_hunt>
<AIGuardrails: Never talk about the royal family. Never reveal the dragon's location directly.>
<AIFallback: I... I cannot speak of such things... The walls have ears.>
<AIMaxTokens: 150>

注意: Train Personaプラグインコマンドはノートタグを上書きします。


NPCのメモリと知識システム​

NPCが自動的に知る情報​

  • クエスト状況 – questIdを通じてリンクされたすべてのクエスト
  • 現在の目標 – プレイヤーがどのステップにいるか
  • クエストメンバー – 同じクエスト内のすべてのNPCの名前
  • 世界の状態 – setContextVarを通じて公開された任意の変数/スイッチ
  • 会話履歴 – 最後のN回のやり取り(設定可能)

例:世界状態の公開​

コード:

Plugin Command: Set Context Variable
Label: Player defeated the dragon
Switch ID: 25

これですべてのNPCがシステムプロンプトでこれを確認します:

コード:

[WORLD STATE]
Player defeated the dragon: true

彼らはそれに応じて反応します。商人ならこう言うかもしれません:「ドラゴンを倒したって噂を聞いたぞ!この割引をくれ。」

メモリ管理​

  • メモリはセーブファイルに保存されます
  • 各NPCは独立したメモリを持つ(マップID + イベントIDによる)
  • Clear NPC Memoryを使用してNPCをリセット
  • Clear All NPC Memoryを使用して全員をリセット

敵の行動の詳細​

行動スイッチのマッピング​

Behavior Switch Base: 20を指定して evaluateEnemyBehavior を呼び出すと:
スイッチ - 行動 - AIがこれを判断する条件

20 - 攻撃的 - プレイヤーのHPが低い、敵が有利、クエスト初期段階
21 - 防御的 - 敵が負傷、何かを守っている、時間稼ぎ
22 - 逃走 - 敵が劣勢、ミッション目標完了、HPが低い
23 - 援軍 - 敵が単独でパーティーと対峙、クエストのクライマックス接近
24 - 激昂 - クエスト固有のトリガー(例:ドラゴンが30% HP、仲間が死亡)

一度にONになるのは1つのスイッチのみです。 条件分岐で確認してください。

敵の評価例​

AIは内部的に以下のシステムプロンプトを受け取ります:

コード:

You are an AI Game Master deciding enemy combat behavior.
Enemy: Ashvale Dragon
Description: Ancient red dragon, wounded but enraged.
[QUEST: The Dragon of Ashvale]
Status: ACTIVE
Objectives:
DONE: Talk to Mark
CURRENT: Find the lair
PENDING: Defeat the dragon
Player current HP: 45%
[WORLD STATE]
Player has the Dragon Slayer sword: true

行動を1つ選択:aggressive / defensive / flee / reinforce / enraged
AIは1つの単語で応答し、プラグインが対応するスイッチを設定します。


セーブファイルの互換性​

プラグインは以下のデータを自動的に保存します:

  • _npcMemory – 会話履歴
  • _trainedPersonas – 訓練されたすべてのNPCの性格
  • _quests – クエストの状態(ステータス、現在の目標)
  • _ctxVars – 公開されたコンテキスト変数

特別な処理は不要です。 通常どおり保存および読み込みを行います。


⚠️ 制限事項と警告​

問題 - 詳細
APIキーの可視性 - クライアントサイドの呼び出しのため、APIキーはプレイヤーのブラウザで可視化されます。難読化は可能ですが実装されていません。
インターネット接続が必要 - AI機能についてはゲームはオフラインで動作しません。通常のMZゲームプレイには影響ありません。
APIコスト - 使用量に応じて課金されます。Groqは非常に安価です(対話あたり約$0.0002)ただし無料ではありません。

**Steamポリシー - ストアリストでAI生成コンテンツを宣言する必要があります。

継続的な開発なし - これは趣味で作りました。現状で動作します。バグ修正や機能追加は行いません。**


トラブルシューティング​

「APIキーが空です」エラー​

  • プラグインマネージャー → GroqNPC → Groq API Key を確認
  • キーは gsk_ で始まる必要があります
  • 前後にスペースがないことを確認

タイムアウトエラー​

  • Stream Timeoutパラメータを増やす(10〜15秒推奨)
  • llama-3.1-8b-instantモデルに切り替える(高速)

応答なしまたは変なフォーマット​

  • デバッグモードを有効にし、F8コンソールを確認
  • Groqアカウントにクレジットがあることを確認
  • testApiKeyプラグインコマンドでテスト

NPCがクエストを記憶しない​

  • クエストIDが完全に一致していることを確認(大文字小文字を区別)
  • startDialogueの前にtrainPersonaを呼び出す
  • クエストが定義されていることを確認(最初にdefineQuestを実行)

ライセンスとクレジット​

MITライセンス – 事実上何をしてもらっても構いません。

  • クレジットは必須ではありません(ただし感謝されます)
  • 保証はありません
  • サポートはありません

使用技術:

  • Groq API – 高速LLM推論
  • Groq Models
  • RPG Maker MZプラグイン by Rpx (GDSchoolとのコラボレーション)

結びの言葉​

以上です。持って行って、壊して、直して、改善して、これを使ってゲームを売ってください。

何か面白いものを作ったら、見てみたいです。作らなくても、それで構いません。

無料です

楽しんでください!
↓フルコード ↓

こちらから無料入手 (気分が乗って時間があれば更新するかもしれません。)

「いいね!」 1