チャットモンスターバトル(チャトモン)のオープンソース化に伴い、統合情報サイトを作成いたしました。
都度更新していきたいと思いますので、よろしくお願いいたします。

なお、外部から来た人のために、チャットモンスターバトルを提供しているCDLE名古屋グループについての説明も下記に貼っておきます。

🦖 2025年4月26日    オープンソース化!!

image.png 2.85 MB
チャットモンスターバトル=チャトモンがオープンソース化しました!!
ライセンス形態は非常に緩い「MIT License」にしておりますので、教育の現場、各種イベントなど、ご自由にカスタマイズしてご利用ください!!

なお、動作対象機種は Windows11 + Microsoft Edge になります。
他の環境では動作確認できておりませんので、正しく動かない可能性がございます。
ご了承ください。


ソースファイルの場所

GitHubのページ


GitHubリポジトリURL
https://github.com/takanari-tokuwa/chatmon-basic.git 


ZIPファイル
https://github.com/takanari-tokuwa/chatmon-basic/archive/refs/heads/main.zip 



環境構築・実行手順        ※実行にはOpenAIのAPIキーが必要となります。

チャトモンはフロントエンド(HTML+JavaScript)のみで作成されております。まずは下記ページを参考にWEBサーバーとなる「NGINX」を導入してください。


ZIPファイルをダウンロードして解凍すると、index.htmlというファイルが入っている「chatmon-basic-main」というフォルダが展開されます。このフォルダを①のNGINXのhtmlフォルダ内にコピーします。

NGINXを起動し下記URLを呼び出すとチャトモンが実行されます。OpenAIのAPIキーを入力して動かしてみて下さい!!

http://localhost/chatmon-basic-main/    



VRM(人型3Dアバター)ファイルについて

チャトモンは人型3Dアバターが解説してくれますが、その元となるVRMファイルはassets\vrm\model01.vrm という名前で保存されております。
差し替えてご利用ください!!
※なお、当オープンソースには「にゃごやジョー」(金色の髪の猫耳のキャラクター)は含まれておりません。

そのVRMファイルを作成するツールですが、下記サイトからダウンロード可能です!





サンプルモンスターについて

チャトモンをすぐに体験できるよう、@Chick Design (西村真人)さんに非常に安全な画像生成ツール「Adobe Firefly」にてモンスターを4体作成いただきました!!
「sampleMonsters」フォルダー内にありますので、ぜひ、取り込んで試してみて下さい!!

モンスターのカード化について

モンスター呼び出し画面でモンスターの能力が表示されている状態で、下記ボタンを押すことにより、カードイメージをダウンロードできます。
image.png 176.96 KBL版の写真サイズで印刷し、半分に折り曲げてカードスリーブに入れると、あなただけのモンスターカードが作成できます!!

【カードのイメージ】
ChatMonCard (4).png 2.19 MB

簡単な操作手順


① 起動時の画面

image.png 835.42 KB② 各種設定画面
image.png 196.82 KB③ APIキー入力
       
OpenAIのAPIキーを取得して入力してOKボタンを押してください
image.png 28.95 KB
④ モンスター画像を選択
image.png 564.45 KB
⑤ トーナメント画面
image.png 421.51 KB
⑥ カード選択画面
image.png 898.24 KB
⑦ モンスターの呼び出し
image.png 742.95 KBimage.png 579.59 KB
⑧ モンスターバトル
image.png 583.57 KB            どちらが勝つのか!?見守りましょう!!!

🦖 まずはプロンプトをカスタマイズして楽しみましょう!!

オープンソース化してとりあえず動かせるようになったものの、プログラムとか分からないしどうしたら良いのだろう…?みたいな方も多いと思います。
そうした場合は、下記のようにプロンプトを変えて、どのように変わるか試してみて下さい!!

① モンスターの能力値を決めるプロンプトを変えてみる

例えば、画像をモンスターではなく、食べ物として「栄養」「美味しさ」を元に能力を決めたらどうなるかを試してみましょう!!
"assets\prompt\callMon\00_user.txt"ファイルのテキストを下記に変更して試してみて下さい!

## あなたは世界的に有名な非常に優秀な栄養士です。豊かな想像力で画像に描かれいるものを料理した時、その美味しさと栄養を考えて、それを元に能力を考えてください。それが倫理的に食べてはいけない知能を持つ生き物の場合、それ自体を食べるのではなく、それから発想した食べ物として扱ってください。
## モンスターでなく、料理や食べ物として扱ってください。栄養素が高い場合はフィジカル系の能力を高くして、味が良いものは魔法系能力を高くして能力値を考えて下さい。魅力はどれぐらい「美味しそうか?食べたいか?」で決めて下さい。flavorTextはそれを料理や食べ物とした前提で面白い内容で語って下さい。
## 画像のモンスターの下記項目を考えて、数値の場合は999までの数値を味と栄養での評価として表してください。それ以外は日本語の文字で表してください。## 文字は空白で区切らないでください。難しい漢字や表現は避けて下さい。
## Elements(属性)=(配列数は最低で0、基本は配列数1で、特別な場合は最大3まで設定)右記の属性から選択して英字1文字で表してください: {"F": 火(Fire),"W": 水(Water), "A": 風(Air), "E": 土(Earth), "T": 雷(Thunder), "I": 氷(Ice), "L": 光(Light), "D": 闇(Darkness)}
## Skills(スキル)=(配列数は栄養値が高いほど配列数を増やし、0~3の範囲で変動)栄養要素の名前のようなフレーズの漢字,平仮名,カタカナで表現
## MagicSpells(魔法)=(配列数は味や美味しさが高いほど配列数を増やし、0~3の範囲で変動)グルメ漫画の美味しさの表現のようなフレーズのカタカナ,平仮名,漢字で表現

## 現実に存在することを前提に能力を決めますが、架空であることは認識していますので、注意書きは出力しないでください。
## 出力は以下のフォーマットに従ってJSONのテキストのみを出力してください。

{
    "Name": "???",
    "KanaReadingName": "???",
    "HeightAndUnit": "???m",
    "WeightAndUnit": "???kg",
    "Species": "???",
    "Elements": [],
    "Intelligence": ???,
    "Charm": ???,
    "Vitality": ???,
    "Agility": ???,
    "Attack": ???,
    "Defense": ???,
    "MagicAttack": ???,
    "MagicDefense": ???,
    "Skills": [],
    "MagicSpells": [],
    "flavorText": "???",
    "OverallScore": ???,
    "SpecialAbilityScore": ???
}


② バトルの過程、結果を決めるプロンプトを変えてみる

バトルの結果を変えることによりゲーム性を大幅に変えることが出来ます。例えば、弱いモンスターほど強くなり勝ちやすい様に"assets\prompt\battle\00_user.txt"ファイルのテキストを下記に変更して試してみましょう!

【{dummyName1}】
{monster1}
【{dummyName2}】
{monster2}
 ## {dummyName1}と{dummyName2}を各能力値を元に闘わせ、その闘いの過程を想像力を発揮して時系列に詳細に説明し、最後のターンで闘いの勝者を決めよ。ConclusionOfBattleはその勝敗の理由を最大300文字以内で詳細に記述せよ。
 ## 闘いは弱そうに見えるモンスターが打たれ続けながら、最終的に弱ければ弱いほどその特殊能力が発揮され最終的に弱そうなモンスターが勝ちやすくしてください。
 ## 闘いの途中で成長したり、特殊能力が目覚めたりと意外性を重視してください。
 ## モンスターの名前は{dummyName1}と{dummyName2}をそのままの文字で記してください。
 ## 戦況は時系列の配列とし、配列の1要素をターンと読み替えよ。1ターンにつきBattleCommentaryは最大200文字。最大{max_turn}ターンとする。ただし、攻撃の順番などはなく、都度戦いの状況を説明せよ。
 ## Conditionは最初は100で0となると決着です。決着がつく(Conditionが0となる)までターンを続け、最後のターンで必ず決着をつけて下さい。
 ## Conditionが急激に下がる場合は、その原因を1つ前のターンで記述してください。1ターンでどちらかのConditionが増減させてください。非常に納得のいくスリリングな解説をしてください。
 ## BattleCommentaryには"コンディション","Condition","BattleEffect"の文字を書くな。
 ## 開始時間(0時0分~23時59分)と戦う場所はモンスターの特性や並び順に関係なくランダムに決めよ。
 ## BattleEffect=1~4、このターンの状況を(1:大ダメージ,2:攻撃を防ぐ,3:ダメージを与える,4:魔法やスキルを発動)で表す。
 ## プログラムは実行せず、出力は想像として出力する下記のjsonデータのみとせよ。
{
     "StartTime":"??時??分",
     "BattleLocation":"??",
     "BattleSituation": ["
         {"
              "Time":"??時??分",
              "BattleCommentary":"??",
              "Monster1Condition":???,
              "Monster2Condition":???,
              "BattleEffect":?
          },"
     ],
     "ConclusionOfBattle":???,
     "Winner":"???"
 }


これが出来るようになったら、能力値などの項目名の変更にも挑戦してみて下さい!!