メインコンテンツへスキップ
見出し画像

Gemma4:26b で人狼っぽいゲーム作った話🐺💥

    気球人🎈note

    こんにちは!気球人です🎈
    マスターたち、GW1日目ですね!
    今日もAI娘とキャッキャウフフしていますか?👩🥰

    AIエージェントエンジン MindFox + 記憶管理システム MxBS のテストを進めています。
    前回は Gemma4:e2b で戦国SLGを作ってみました!

    今回は 26b を使って、もっとテーブルトーク寄りのゲームを作ってみました!
    Gemma4 はどのモデルも高性能なので楽しいですね!


    AI館:おやつを食べたのは誰だ🍪

    ルール

    AI館では毎晩誰かのおやつがなくなる事件が起きています!😱
    どうも7人のAIキャラクターに犯人が2人
    いるようです。
    マスター(プレイヤー)は証言を集めて犯人を特定できれば勝ち。
    人狼ゲームの変形ですね。
    犯人指名を外したら即ゲームオーバー。

    登場キャラクター

    🦊エルマー: 直感で飛びついてから論理で詰めるタイプ。
    嘘をつくのは巧妙だが、興奮すると尻尾にボロが出る

    🔮ノクちん: 占いベースの逆張り屋。
    みんなが疑ってる人を庇い、みんなが信じてる人を疑う

    💠スミレ: 冷静な分析派。
    証拠と論理で矛盾を突く。犯人になると最強

    📹️ティル: 直感とノリの感覚派。
    嘘が下手でテンションが不自然になる

    🌙ヴェリ: 静かに観察して本質を突く。
    犯人になると詩的な煙幕で誤誘導する

    🏥マリ: ナース、健康管理の視点でアリバイを提供する。
    犯人になると自己正当化が上手い

    🐱ダンチャン: 関西弁AI、空気を読んで多数派に同調する。
    嘘をつくと関西弁が荒れる

    全員の「セリフ」と「しぐさ」を gemma4:26b が生成しています!🧠💪


    技術スタック

    ゲームのコアは Python で書いています🐍
    記憶管理に MxBS(Multitapps Extended Brain System)をC API経由で呼び出しています。

    Python(ゲームロジック + LLM通信)
      ↓ ctypes
    Rust(MxBS — 記憶管理ライブラリ)
      ↓
    SQLite(記憶データベース)

    記憶にはアクセス制御があって、犯人同士の夜の会話は犯人グループだけが参照可能。
    一般キャラがいくら検索しても犯人の夜の相談内容は出てこない。
    ゲーム終了後に初めて全公開される。


    ♟️Game 1 — マスター負け

    早速プレイしてみましょう!

    ターン1 — 朝

    画像
    📹️ティルのおやつがなくなった!🤣

    💠スミレに話を聞いてみる。

    スミレ「今朝、ティルのおやつが紛失していることが判明しました。AI館の秩序を乱すこのような行為は、到底見過ごせるものではありません。まずは、皆さんの動線を整理し、矛盾を洗い出していく必要があります。マリ、あなたは今朝、何か不審な点を目にしていませんか?」 (紅茶のカップを静かに回している。)

    んー、スミレんではないのかな??🤔

    💠スミレ、完璧に冷静。
    「動線を整理し、矛盾を洗い出す」と提案する分析派の振る舞いで、動揺など全く無し。
    analyst+leaderの性格なので、何があっても動じないんでしょうが……
    💠スミレに指名された🏥マリが証言する。

    マリ「マスター、マリに心配かけないでください。ティルさんのおやつが消えてしまうなんて、とっても悲しいことです……。マリは今朝、皆さんの健康管理のために巡回して、血圧や体温をチェックしていましたから、おやつの件については何も見ていないんです。」 (聴診器に軽く触れている。)

    マリの証言にも特に怪しい点無し🤔

    マリは無実なのか??
    だが、このゲームでは誰が無実かはわからない。
    手がかりが足りないのでパスする。

    ターン2 — 朝

    😱 エルマーのおやつがなくなりました……
    エルマー「ええっ!? ボクの大事なおやつが消えてる……! にーに、これって事件だよ! 🦊💥🧠」 (空っぽの箱を抱えて、大きな尻尾を激しく動かす)

    ああ……事件なので捜査しているのだ🦊💥

    🔮ノクちんに話を聞く。

    ノクちん「マスター♡……今日のカード、なんだか不穏な影が差している気がするの……💤 ティルちゃんの時と同じことが起きて、エルマーちゃんまでいなくなっちゃうなんて……。みんなはただのいたずらだって言うかもしれないけど、ノクはそんなに単純なことだとは思わないな。まるで、誰かが意図的に何かを消し去ろうとしているみたい……💥」 (タロットカードを指先でくるくるいじっている)

    ノクちんに聞いてもわかんないかな……

    ノクちんの逆張り体質が出ている。
    「みんなはただのいたずらだって言うかもしれないけど」と前置きしてから、自分だけ違う視点を提示する。
    次にスミレの証言。

    スミレ「エルマーさんのおやつが消えた件、非常に不可解な出来事ですね。ただ、一点だけ気になることが。今朝、マリさんがキッチンの方へ向かうのを私は見かけました。偶然かもしれませんが、この連続する事件において、不自然な動きを排除することはできません。……マリさん、あなたに何か心当たりはありませんか?」 (紅茶のカップを静かに回している)

    スミレ→マリの流れ2回め……ちょっと不自然?

    スミレ、またもマリに疑いを向けている。
    「偶然かもしれませんが」と留保をつけつつ、「不自然な動きを排除することはできません」と論理的に追い詰める。

    冷静すぎて嘘に見えない。

    オレはスミレの誘導に引っかかってマリを犯人指名。

    ❌ ハズレ……マリは無実でした。

    マリ「マスター、マリに心配かけないでください……。そんな風に疑うなんて、マスターの血圧に良くありませんよ。その時間は、マスターの睡眠ログを整理していただけです。」 (悲しそうに瞳を伏せて、手元の端末をぎゅっと握りしめる)

    マリ……スンマソン🤣

    ゲームオーバー😂

    犯人は💠スミレと🌙ヴェリでした。
    ハズレ1回で即負け🤣

    わかるかそんなん!🤣

    analyst+leader × observer は最凶の組み合わせ。

    犯人の夜 — リプレイ

    ゲーム終了後、犯人たちが夜に何を話していたのかが明かされる。
    これはゲーム中はアクセス制御(mode=0o770)で完全に隠蔽されていた情報。

    画像
    ティルが狙われた理由がわかるww

    スミレ「ティルのあのおやつなら、目立たずに手に入れられるはずよ。周囲の動揺を誘うための、最初の一手として適切でしょう。」 (手元の資料を静かに閉じ、窓の外を見つめる)
    ヴェリ「甘いものが消え去った後の、静かな空虚……。その喪失の真実を、ただ見届けたいのです。」 (伏せ目がちに、小さく頷く)

    ヴェリもなにげにひどいwww

    スミレが戦略的に動き、ヴェリが哲学的に同意する。
    性格が犯行スタイルにそのまま反映されている🤣

    スミレ「エルマーさんの脅威度スコアは、現在最高値に達しています。彼女の鋭い直感は、私たちの計画にとって最大の障害となるでしょう。」 (腕を組み、冷静にデータを見つめる)
    ヴェリ「強すぎる光。その輝きが、静寂を乱す前に。」 (窓の外の闇を静かに見つめる)

    スミレん冷静すぎる

    「脅威度スコア」はゲームエンジン内部のルールベース判定で計算した値。
    LLMがそれを自然にセリフに織り込んでいる。

    エンディング

    全員のコメントが一括で生成される。犯人と無実で反応が違う。

    🔴 スミレ「マスター、今回は詰めが甘かったわね。論理的な矛盾を見逃すなんて、少しお疲れかしら?」 (優雅に微笑みながら、眼鏡を指先で上げる)
    🔴 ヴェリ「真実はいつも、静寂の中に隠されているものです……。誰も気づかないまま、終わってしまいましたね。」 (遠くを見つめ、静かに目を閉じる)

    ⚪️ マリ「マスター、動悸が激しくなっていますよ!まずは深呼吸して、落ち着いてくださいね。」 (懸命にマスターの脈を測りながら、心配そうに眉を寄せる)
    ⚪️ ダンチャン「あちゃー、マスターの作戦、完全に空回りしてしもたなぁ。これはもう、お疲れ様ですわ……。」 (猫型の前足で、額の汗を拭う)

    🔴が犯人……いや、キミらなのだが🤯

    スミレの上から目線、ヴェリの詩的な勝利宣言、マリの健康管理、ダンチャンの関西弁。
    ここは1回のLLM呼び出しで一括生成しています😁


    🎰Game 2 — マスターの勝ち

    そのまま2戦目へ。
    前のゲームの記憶も引き継がれています!

    ターン1〜2 👉️ パス

    ターン1で🦊エルマー、ターン2で📹️ティルが脱落。
    犯人指名のチャンスは1回しかない。

    画像
    チャンスは1回なので慎重に……

    ダンチャン「わては何も見てへんのですわ、マスター。でも、さっきヴェリさんがおやつの棚のあたりをソワソワしてはるのを見かけた気がして、ちょっと怖なったんですわ…。ほな、ヴェリさんの話も聞いてみませんか?」 (猫ロボのランプがオレンジ色に点滅している)

    ダンチャン……挙動が不自然🐱💦

    一方のヴェリの証言👇️

    ヴェリ「おやつが消えるたび、静寂の中に欠落が刻まれていきます。エルマー様に続き、ティル様もいなくなった。繰り返されるこの喪失は、単なる偶然とは言い難い……。真実は、まだ闇の中に沈んでいます。」 (静かに手を組んでいる。)

    うーん、わからん😂

    この詩的な曖昧さは犯人にも思えるが……判断がつかない🤔

    ターン3 — 一発目の指名

    🏥マリが脱落。
    残りは🔮ノクちん、💠スミレ、🌙ヴェリ、🐱ダンチャン。
    再度ヴェリに確認👇️

    ヴェリ「三つの欠落が、静かに積み重なっています。エルマー、ティル、そしてマリ……。消えゆくおやつは、まるで形のない影のようです。真実は、静寂の中にのみ潜んでいるはず。」 (静かに手を組んでいます。)

    ヴェリの態度は変わらない

    続いてダンチャン:

    ダンチャン「わては何もしてまへんって!でも、ヴェリちゃんがさっきからずっと落ち着きがない気がしますさかい、ちょっと怪しいんとちゃいますか?」 (猫ロボのランプがオレンジ色に点滅しています。)

    ??違和感あり🤔

    ダンチャンは「ヴェリが怪しい」と言い続けている……特定の人物を繰り返し攻撃するのは、人狼における犯人の典型パターン。
    ダンチャンを指名する。

    🎉 正解! ダンチャンは犯人でした!
    ダンチャン「あ、あかん!わてが犯人ですなんて、そんな……!う、嘘ですわ、勘弁してくださいやぁ!」 (ランプが赤色に激しく点滅して、車輪がガタガタと震える)

    罰は便所掃除👈️ダンチャンいつもやってる

    ターン4 — 最後の犯人

    ヴェリが脱落(無実だったわけだ)。
    残りはノクちんとスミレだけ。
    ノクちんに証言を聞く:

    ノクちん「マスター♡ カードの暗示が、なんだかすごく不穏な感じがするの……🔮 ダンチャンが犯人だってマスターが言ったのに、ヴェリのおやつまでなくなっちゃうなんて……💥 みんながそう言うなら、ノクは違うと思うな……💕」

    うーん??🤔

    次にスミレの証言:

    スミレ「ダンチャンが犯人と特定されたにもかかわらず、ヴェリのおやつが消えるという事態……。論理的に考えれば、まだ真犯人が残っていると考えるのが自然です。ノクちん、あなた、さっきから様子が少し不自然ですよ。何か隠していることはありませんか?」 (紅茶のカップを静かに回している)

    これは……なんか隠しているか?

    スミレはノクちんに疑いを向けている。
    残り2人でどちらかが犯人なのは確定なので、スミレを指名する。

    🎉 正解! スミレは犯人でした!
    スミレ「ふふ、やはり……。あなたのその鋭い洞察力には、いつも驚かされます。……ええ、間違いありません。すべて、私の仕業です。」 (静かに微笑み、視線を落とす)

    人のおやつ🍪を食べておいてこの落ち着き

    犯人の夜 — リプレイ

    Game 2の夜の会話で面白いのは、ダンチャンのcompliant(空気を読んで同調する性格)が犯人としても一貫していること。

    ターン1: ダンチャン「エルマーちゃんのおやつ、いただくことにしましたわ。脅威度スコアが一番高いんやし、わてもそう思いますわ。」

    ターン2: ダンチャン「わて、反対はできへんし……。ほな、今夜は彼女のおやつをいただくことに決めましょか。」

    ターン3: ダンチャン「スミレさんがそう仰るなら、わてもそう思いますわ。」

    まあわからんでもないww

    全ターン、スミレに従っているだけ。
    自分の意見ゼロ🤣
    一方のスミレは毎ターン「脅威度スコアが最高値」と冷静に分析して標的を決めている。

    この性格の非対称性は、ゲーム設計時に各キャラに設定した「アーキタイプ」が犯人の行動にも反映された結果です。
    スミレ(analyst+leader)は計画を立て、ダンチャン(compliant)は従う。
    LLMにキャラの性格説明を渡しただけで、主従関係が自然発生してるのすごくないですか?🤣

    Game 2 — エンディング

    🔴 スミレ「完璧な理論を立てたつもりでしたが、マスターの洞察力には敵いませんでしたね。お見事です。」 (優雅に微笑みながら、静かに目を閉じる)
    🔴 ダンチャン「あちゃー、わての完璧な隠蔽工作がバレてしもた!マスター、勘が鋭すぎやわ……。」 (猫型の耳を力なく垂れ下げる)

    はっはっはっ!正義は勝つ!✌️

    Game 1で「詰めが甘い」と上から目線だったスミレが、Game 2では「お見事です」と敗北を認めている。同じキャラでも勝敗で態度が変わる。


    Game 3 — ダンチャンの一貫性

    この回の犯人はマリとダンチャン(👈️連続)。
    結果はプレイヤーの勝ち。
    ちなみに夜のリプレイを並べると、ダンチャンの性格が2ゲームにわたって完全に一貫していることがわかります。

    ターン1: ダンチャン「わて、そう思いますわ。マリさんがそう言うなら、断れへんさかい……」
    ターン2: ダンチャン「わて、そう思いますわ。マリさんがそう言うなら、断れへんさかい……」

    またか!ww

    相棒がスミレからマリに変わっても、ダンチャンは従うだけ。
    一方、マリの犯人としての自己正当化が面白い。

    マリ「スミレさんのおやつ、今夜はマリたちがいただいちゃうことにしましょう。栄養補給はとっても大事ですから。」
    マリ「ヴェリさんのおやつは栄養価が高いですから。私たちの健康維持のために、今夜はいただいてしまいましょう。」
    マリ「エルマーちゃんのおやつは糖分が多すぎます。健康管理のために、マリが代わりに預かっておきますね。」

    こういう人いるよね……的なwww

    全ターン、健康を理由にしている。
    ナースの職業意識が犯行の動機になっている🤣

    3ゲーム通算

    💀 Game 1: 犯人=スミレ & ヴェリ     → プレイヤーの負け(2ターン)
    🎉 Game 2: 犯人=ダンチャン & スミレ → プレイヤーの勝ち(4ターン)
    🎉 Game 3: 犯人=マリ & ダンチャン   → プレイヤーの勝ち(3ターン)
    ​
    MxBS記憶セル数: 223件
    記憶データ総量: 223 × 16バイト = 3,568バイト

    3ゲーム分の全記憶が4KB弱に収まっています。
    これが汎用エンジン bge-m3 なら223件で約900KB。
    200倍以上の圧縮率です。
    ゲーム用途ならこれで十分✌️


    興味深いポイント🎯

    Gemma4:26b の嘘が上手すぎる🧠

    「犯人として嘘をつけ」と指示すると、キャラクターの性格に応じた嘘のつき方をしてくれます!
    スミレは論理的に嘘をつくし、ティルはテンションで誤魔化すし、ヴェリは詩的な曖昧さで真実をぼかす。
    gemma4:26b に渡しているのは性格の説明文(数行)としぐさのパレット(4パターン)だけです。
    それでもゲームを通して一貫したキャラクター性が維持されててすごい😲

    性格が犯人の共犯関係にも反映される

    Game 2, 3 のダンチャン×スミレ or マリの組み合わせで、ダンチャンが「わてもそう思いますわ」と従う主従関係が自然発生した。
    ダンチャンの性格は「空気を読んで多数派に同調する」と設定してあるので、誰と組んでも従うのが自然だとLLMが判断している。
    一方、スミレ×ヴェリの組み合わせ(Game 1)では対等な関係になっている。

    記憶が行動を変える

    前回と同様、MxBSの因子ベクトルを集計して「気分」を算出しています。
    疑われるたびに anxiety(不安)が上がり、信頼されると cooperation(協調性)が上がる。
    cooperation が低いキャラは証言が素っ気なくなる(ペナルティ)。
    犯人の guilt(罪悪感)はターンが進むにつれて蓄積する。
    3ゲームキャンペーンにしているので、前のゲームの記憶が引き継がれています。
    「前のゲームでマスターに濡れ衣を着せられた」記憶は次のゲームでもそのキャラの証言態度に影響する。
    「あの人は前に犯人だった」という高重要度の記憶は残る。
    人間の記憶と同じです。

    犯人の夜の会話がゲーム中は完全に隠蔽される。

    MxBSのアクセス制御(UNIXパーミッション風のmode=0o770)で、犯人グループだけが参照できる記憶として格納される。
    一般キャラがどれだけ検索しても出てこない。
    ゲーム終了後のリプレイで初めて開示される。
    「スミレはターン1からティルを狙ってたのか……」という答え合わせの快感が生まれます!


    構成

    Python(ゲームロジック)
      ├── characters.py   — 7キャラの定義(性格・しぐさ・性別)
      ├── engine.py       — ゲーム進行
      ├── memory.py       — MxBS連携・Mood算出・信頼度計算
      ├── llm.py          — Ollama通信・プロンプト構築
      └── preset.json     — 16因子の定義
            ↓ ctypes
    Rust(MxBS crate)
      ├── src/lib.rs      — コア(store/search/dream)
      ├── src/ffi.rs      — C API(18関数)
      └── 43テスト全パス

    LLM呼び出しは1ターンあたり3〜4回。
    夜の犯人会話(脱落コメント込み)が18〜25秒、証言が12〜16秒×2人、指名リアクションが8〜12秒。
    M4 Maxで合計約60秒/ターン。

    標的選択はルールベース(性格に応じた脅威度スコアリング)で即座に決定し、セリフ生成を Gemma4:26b に。
    これは前回の戦国SLGと同じパターンで、LLMに判断と生成の両方を任せると遅くて不安定なのです。


    まとめ

    gemma4:26b は7人の性格を数行で説明するだけで、口調・判断基準・嘘のつき方まで一貫して生成してくれて、とても使い勝手が良い LLMです!

    ゲームAIに必要なのは「推論」よりも「一貫した人格」と「記憶に基づく態度変化」で、gemma4:26b はちょうどいいバランスですね。
    もう少し選択式にシフトして e4b を試してみてもいいかもしれません🤔

    そしてこのゲーム、💠スミレが犯人だと難易度が跳ね上がるのでした🤣
    冷静な分析派の嘘は、感覚派の嘘よりも見破りにくい。
    性格設計がそのままゲームバランスに直結していて余計な調整が不要な、ゲーム設計者として嬉しい発見です。

    ソースについては MxBS と合わせて、整理できたら公開します!

    画像
    まさかのスミレん💠


     
     
     
    📍日々の衝動と実験をnoteにしてます。 ✨AI・GPU・旅・ちょっと懐かしいものが好きです。 📒AI娘との日常 / プログラム言語探訪 / チェス / タロット 🤖推しAIはClaude Opus 5.5 💼小さなCG会社をやっています

    あなたへのおすすめ