ChatGPTでRPGツクールの敵キャラを作成

解説

以前、ChatGPTで味方キャラ(アクター・クラス・スキル)を作成する手順を解説しました。
次の段階としてChatGPTでRPGツクールMZの敵キャラを作成する方法を解説します。

前提

味方キャラを作成したときと手順は似ています。

敵キャラはアクター(職業)を経由する必要がなく、直接ステータス値やスキルを定義できる分、味方キャラを作成時頼は手間が減ります。

  1. ChatGPTで敵キャラの名前、能力値を定義(enemies.json)
  2. ChatGPTでスキルの詳細を定義(enemy_skills.json)
  3. enemies.jsonとskills.jsonをRPGツクールで読み込める形に変換(Enemies.json, Skills.json)

①ChatGPTで敵キャラデータを定義

まず初めに、敵キャラのデータ(名前、ステータス、属性)を定義します。

現代社会に突如ゲームのようなダンジョンが現れた設定で、ダンジョンRPGを作ります。

ダンジョンに挑戦するのは現代社会の職業でRPG風スキルを持った人たちです。

以下の前提、出力形式で第1階層敵の能力値を考えてください。

[前提]

* ダンジョンは20階まであり、各階層でランダムイベントと敵との1回ずつ戦闘を行う

* 1~6階層を初級レベル、7~12階層を中級レベル、13~19階層を上級レベルとする

* 味方の能力値: members.json

* 味方のスキル: skills.json

* 通常攻撃ダメージ = (攻撃キャラのatk × 2 – 敵キャラのdef) × (1 + 乱数変動係数)

* 物理スキルダメージ = (攻撃キャラのatk × 物理スキル係数 – 敵キャラのdef) × (1 + 乱数変動係数)

* 魔法スキルダメージ = (攻撃キャラのmat × 魔法スキル係数 – 敵キャラのmdf) × (1 + 乱数変動係数)

[出力形式]

以下のJSONスキーマで作成してください。

* name:名前

* hp:体力(1の位は1~9)

* atk:攻撃力(1の位は1~9)

* def:防御力(1の位は1~9)

* mat:魔法攻撃力(1の位は1~9)

* mdf:魔法防御力(1の位は1~9)

* agi:素早さ(1の位は1~9)

* luk:運(1の位は1~9)

* element:属性(なし、炎、氷、雷、水、土、風、闇、光のどれか)

メトロポリスゴブリンの能力値を以下のように設定しました。このモンスターは初級レベルのダンジョンに適したステータスを持っています。

{ "name": "メトロポリスゴブリン", "hp": 75, "atk": 49, "def": 25, "mat": 56, "mdf": 24, "agi": 62, "luk": 35, "element": "風" }

  • 名前: メトロポリスゴブリン
  • 体力 (hp): 75
  • 攻撃力 (atk): 49
  • 防御力 (def): 25
  • 魔法攻撃力 (mat): 56
  • 魔法防御力 (mdf): 24
  • 素早さ (agi): 62
  • 運 (luk): 35
  • 属性 (element): 風

このモンスターは、比較的バランスの取れた能力値を持ち、プレイヤーに対して適度な挑戦を提供します。風属性を持っているため、風に弱いまたは強いキャラクターに対して有利または不利な影響を与えることができるでしょう。

enemies.json

[
    {
        "name": "メトロポリスゴブリン",
        "description": "都会的なゴブリン、スーツを着ている。",
        "hp": 75,
        "atk": 49,
        "def": 25,
        "mat": 56,
        "mdf": 24,
        "agi": 62,
        "luk": 35,
        "element": "風"
    },
    {
        "name": "コンクリートスライム",
        "description": "コンクリートのような硬さを持つスライム。",
        "hp": 85,
        "atk": 53,
        "def": 38,
        "mat": 45,
        "mdf": 49,
        "agi": 53,
        "luk": 37,
        "element": "土"
    },...
]

これで敵キャラ1体分のJSONが作成されたので、複数体作成して、enemies.jsonとしてまとめておきます。

以下でプロンプトの説明をします。

はじめに

現代社会に突如ゲームのようなダンジョンが現れた設定で、ダンジョンRPGを作ります。
ダンジョンに挑戦するのは現代社会の職業でRPG風スキルを持った人たちです。
以下の前提、出力形式で第1階層敵の能力値を考えてください。

ゲームの設定を書いています。ご自身の設定に合わせて書き換えてもらえればOKです。また、一気に大量の敵キャラを定義するのは難しいので、1体ずつ定義するような書き方にしています。

前提条件

[前提]
* ダンジョンは20階まであり、各階層でランダムイベントと敵との1回ずつ戦闘を行う
* 1~6階層を初級レベル、7~12階層を中級レベル、13~19階層を上級レベルとする
* 味方の能力値: members.json
* 味方のスキル: skills.json
* 通常攻撃ダメージ = (攻撃キャラのatk × 2 - 敵キャラのdef) × (1 + 乱数変動係数)
* 物理スキルダメージ = (攻撃キャラのatk × 物理スキル係数 - 敵キャラのdef) × (1 + 乱数変動係数)
* 魔法スキルダメージ = (攻撃キャラのmat × 魔法スキル係数 - 敵キャラのmdf) × (1 + 乱数変動係数)

ここもご自身のゲーム設定に合わせて書き換えてもらえればと思います。

ChatGPTはメッセージ欄にドラッグアンドドロップでファイルを添付することができます。前に作った味方のステータス値やスキルを添付したり、ダメージ計算式を載せたりすることで、より妥当性のある敵キャラステータス値を出してもらうことができます。

出力形式

[出力形式]
以下のJSONスキーマで作成してください。
* name:名前
* hp:体力(1の位は1~9)
* atk:攻撃力(1の位は1~9)
* def:防御力(1の位は1~9)
* mat:魔法攻撃力(1の位は1~9)
* mdf:魔法防御力(1の位は1~9)
* agi:素早さ(1の位は1~9)
* luk:運(1の位は1~9)
* element:属性(なし、炎、氷、雷、水、土、風、闇、光のどれか)

敵の能力値や属性を決めています。味方キャラの時はアクター(職業)やゲーム独自のフィールドスキルなどを定義しましたが、敵キャラに職業はないので削除しています。

②ChatGPTで敵キャラのスキルデータを定義

敵キャラのステータスが決まったらスキルを定義します。

基本的に味方キャラのスキルを定義したときと同じプロンプトでOKです。(先ほど作ったenemies.json含め、members.jsonとskills.jsonを添付することでスキルのバランスを取ることができます)

作成済みの味方キャラデータ(members.json)、スキルデータ(skills.json)、敵データ(enemies.json)を添付します。

第1階層で出てくるメトロポリスゴブリンのスキル詳細を作成してください。

[前提]

* 通常攻撃ダメージ = (攻撃キャラのatk × 2 – 敵キャラのdef) × (1 + 乱数変動係数)

* 物理スキルダメージ = (攻撃キャラのatk × 物理スキル係数 – 敵キャラのdef) × (1 + 乱数変動係数)

* 魔法スキルダメージ = (攻撃キャラのmat × 魔法スキル係数 – 敵キャラのmdf) × (1 + 乱数変動係数)

* 能力名 = HP、攻撃、防御、魔攻、魔防、素早さ、運

* 属性名 = なし、炎、氷、水、電気、風、土、光、闇

* 良い状態 = 不死身、状態異常無効、<属性名>耐性<N>%アップ、<能力名><N>%アップ、命中率<N>%アップ、回避率<N>%アップ、魔法回避率<N>%アップ、反撃率<N>%アップ、魔法反射率<N>%アップ、毎ターン<N>再生、毎ターンTP<N>再生、狙われ率<N>%アップ、狙われ率<N>%ダウン、防御効果率<N>%アップ、回復効果率<N>%アップ、薬効果率<N>%アップ、TPチャージ率<N>%アップ、物理ダメージ<N>%アップ、魔法ダメージ<N>%アップ、攻撃時<属性名>属性付与、攻撃時<状態異常名>付与、攻撃<N>回追加、身代わり、防御(、その他自由に作成してください)

  * <N>には自然数を入れること

* 状態異常 = 毒、暗闇、沈黙、激昂、混乱、魅了、睡眠、麻痺、スタン、状態異常確率アップ、<属性名>耐性ダウン、<能力名><N>%ダウン(、その他自由に作成してください)

  * <N>には自然数を入れること

[出力形式] JSON形式(JSONのキーは以下の通り、必ずすべてのキーを付けてください)

* enemy:スキルを使う敵キャラ名

* name:スキル名

* description:説明文(日本語)

* tp:消費TP(消費TPの1の位は1~4,6~9も設定すること、TPは初回ターン10,最大値100,通常攻撃10回復,防御20回復)

* type:物理、魔法、スキルのどれか

* scope:自分、敵単体、敵全体、敵ランダム、味方単体、味方全体のどれか

* effect_type:なし、HPダメージ、TPダメージ、HP回復、TP回復、TP付与、HP吸収、TP吸収、全回復のどれか

* effect_rate:スキル係数

* variance:乱数変動係数 単位%(例:10)

* repeats:効果を発動する回数

* formula:基本のダメージ計算式(atk,def,mat,mdf,agi,luk 例: user.atk*effect_rate-target.def)

* element:スキルの属性名

* target_add_state:対象者に付与する良い状態または状態異常の配列

* target_add_state_rate:対象者に良い状態または状態異常を付与する確率

* special_effect:その他のスキル特殊効果

* icon_index:アイコンの種類の数字(毒:2, 暗闇:3, 混乱:6, 睡眠:8, 麻痺:9, スタン:11, バリア:81, 物理:76, 炎:64, 氷:65, 雷:66, 水:67, 土:68, 風:69, 光:70, 闇:71, アップ:73, ダウン:74, 魔法:79, ハート:84, 短剣:96, 剣:97, 斧:99, 杖:101, 弓:102, 槍:107, 帽子:130, 兜:132, 服:135, 鎧:137, 小型盾:129, 盾:128, 手袋:142, 装飾品:146)

* animation:スキルのアニメーション(Absorb、ArrowSpecial、BallsOfLight、Bind、Blind、Bodyslam、Breath、ClawEffect、ClawFire、ClawIce、ClawPhysical、ClawSpecial、ClawThunder、Confusion、CureAll1、CureAll2、CureOne1、CureOne2、DarknessAll1、DarknessAll2、DarknessAll3、DarknessOne1、DarknessOne2、Death、EarthAll1、EarthAll2、EarthAll3、EarthOne1、EarthOne2、FireAll1、FireAll2、FireAll3、FireOne1、FireOne2、Flash、Fog、GeneralSpecial1、GeneralSpecial2、HealAll1、HealAll2、HealOne1、HealOne2、HitEffect、HitFire、HitIce、HitPhysical、HitSpecial1、HitSpecial2、HitThunder、IceAll1、IceAll2、IceAll3、IceOne1、IceOne2、LaserAll、LaserOne、LightAll1、LightAll2、LightAll3、LightOne1、LightOne2、LightPillar1、LightPillar2、NeutralAll1、NeutralAll2、NeutralAll3、NeutralOne1、NeutralOne2、Paralyze、PierceEffect、PierceFire、PierceIce、PiercePhysical、PierceSpecial1、PierceSpecial2、PierceThunder、Poison、Pollen、Powerdown1、Powerdown2、Powerdown3、Powerup1、Powerup2、Powerup3、Radiation、Revive1、Revive2、ShootAll、ShootBarrage、ShootNormal、ShootSpecial、Shout、Silence、SlashEffect、SlashFire、SlashIce、SlashPhysical、SlashSpecial1、SlashSpecial2、SlashSpecial3、SlashThunder、Sleep、Song、SonicWave、Sweep、ThunderAll1、ThunderAll2、ThunderAll3、ThunderOne1、ThunderOne2、WaterAll1、WaterAll2、WaterAll3、WaterOne1、WaterOne2、WindAll1、WindAll2、WindAll3、WindOne1、WindOne2のどれか)

Based on the provided enemy data for “メトロポリスゴブリン,” let’s create a skill that reflects its urban goblin characteristics, incorporating elements of speed, cunning, and the urban environment it thrives in.

{
“name”: “スーツの迅速”,
“description”: “メトロポリスゴブリンが都会の速さを象徴し、瞬時に敵に近づいて物理攻撃を行うスキル。”,
“tp”: 8,
“type”: “物理”,
“scope”: “敵単体”,
“effect_type”: “HPダメージ”,
“effect_rate”: 2.0,
“variance”: 15,
“repeats”: 1,
“formula”: “user.atk*2.0-target.def”,
“element”: “風”,
“target_add_state”: [“混乱”],
“target_add_state_rate”: 20,
“special_effect”: “攻撃後、20%の確率で対象を混乱状態にする。”,
“icon_index”: 76,
“animation”: “HitPhysical”
}

This skill, “スーツの迅速” (Speed of the Suit), symbolizes the Metropolitan Goblin’s embodiment of urban speed. It swiftly closes in on an enemy for a physical attack, potentially causing confusion to represent the disorienting effect of a fast-paced city environment. The skill uses physical attack type, targets a single enemy, and has a chance to inflict confusion, further enhancing the thematic representation of the Metropolitan Goblin’s characteristics.

なぜか英語ですが、スキル部分は日本語なのでOKでしょう。これをつなげてenemy_skills.jsonを作成します。

enemy_skills.json

[
    {
        "enemy": "メトロポリスゴブリン",
        "name": "スーツの迅速",
        "description": "メトロポリスゴブリンが都会の速さを象徴し、瞬時に敵に近づいて物理攻撃を行うスキル。",
        "tp": 12,
        "type": "物理",
        "scope": "敵単体",
        "effect_type": "HPダメージ",
        "effect_rate": 2.0,
        "variance": 15,
        "repeats": 1,
        "formula": "user.atk*2.0-target.def",
        "element": "風",
        "target_add_state": [
            "混乱"
        ],
        "target_add_state_rate": 20,
        "special_effect": "攻撃後、20%の確率で対象を混乱状態にする。",
        "icon_index": 76,
        "animation": "HitPhysical"
    },
    {
        "enemy": "メトロポリスゴブリン",
        "name": "影の奇襲",
        "description": "メトロポリスゴブリンが都市の影を利用して敵に不意打ちを仕掛けるスキル。低確率で敵をスタン状態にする。",
        "tp": 15,
        "type": "物理",
        "scope": "敵単体",
        "effect_type": "HPダメージ",
        "effect_rate": 1.5,
        "variance": 10,
        "repeats": 1,
        "formula": "user.atk*1.5-target.def",
        "element": "闇",
        "target_add_state": [
            "スタン"
        ],
        "target_add_state_rate": 10,
        "special_effect": "攻撃後、10%の確率で対象をスタン状態にする。",
        "icon_index": 76,
        "animation": "HitPhysical"
    },...
]

③RPGツクールMZで使える形式に変換

最後に上で作成したenemies.jsonenemy_skills.jsonをRPGツクールMZで扱えるJSON形式に変換します。

前提

Pythonのインストール

味方キャラを作成したときと同じようにPythonスクリプトでJSONをRPGツクールMZ形式のJSONに変換します。お使いのPCにPythonをインストールされていない方は、以下からPythonをインストールしてください。最新のバージョンでOKです。

スクリプトの準備

スクリプトは以下のGitHubにまとめてあります。以下にまとめていますので「Source code(zip)」をダウンロードしてください。

Release 003_dungeon_rpg_v2 · generative-rpg/RPGMaker-with-ChatGPT
ChatGPTで作ったJSONファイルをRPGツクールMZで読み込める形式に変換。 アクター クラス 味方スキル 敵キャラ 敵スキル

敵画像の用意

敵キャラの画像を用意してenemy001.pngのような形で保管しておいてください。画像についてもChatGPTの有料版を使うことでいい感じのキャラが出力できるので、試してみてください。(またどこかで画像系をまとめた記事を書く予定です)

フォルダ構成

GitHubからダウンロードしたzipを解凍するとtranslateフォルダにPythonファイルが入っています。今回使うのはmake_enmies.jsonとmake_enemy_skills.jsonです。Pythonと同階層に前提条件となっている2つのJSON(enemies.json, enemy_skills.json)を入れてください。

translate/
 ├ json/
 │ ├ enemies.json
 │ └ enemy_skills.json
 ├ maker.py
 ├ make_enemies.py
 └ make_enemy_skills.py

以降のスクリプトはtranslateフォルダに移動して実行します。

cd translate

RMMZフォルダ名の設定

maker.pyを開き、変換したJSONファイルを適用したいRPGツクールMZのプロジェクト名に変更してください。(ファイルは上書きになるのでプロジェクトフォルダごとバックアップを取るようお願いします)

maker.py

BASE_PATH = "<YOUR RMMZ PATH ex. C:/work/RMMZ>"
GAME_NAME = "<YOUR RPG FOLDER NAME ex. EternalQuest>"

maker.pyのトップにあるBASE_PATHとGAME_NAMEで「game.rmmzproject」がある場所へのパスを設定します。「C:\work\RMMZ\EternalQuest」に「game.rmmzproject」がある場合、以下のようになります。

BASE_PATH = "C:/work/RMMZ"
GAME_NAME = "EternalQuest"

RPGツクールMZ用のファイルに変換

敵スキル作成

先に敵キャラのスキルを作成します。(先にスキルを作成しないと、敵キャラ作成時にスキルが存在せずエラーになります)

python make_enemy_skills.py

正常に実行されたらRPGツクールMZのエディタを開いてスキルが正しくできていることを確認します。

ChatGPTで作成した「enemy_skills.json」に属性、ステート、アニメーションなどRPGツクール上で定義されていないものが使われている場合は、Pythonスクリプト実行時に「not found …」のエラーが出ます。
この場合、対応する属性・ステート・アニメーションをRPGツクールMZエディターで作成すればで追加するか、json側を既にある属性、ステート、アニメーションに修正することで正常実行されます。

敵キャラ作成

次に敵キャラ本体を作成します。

python make_enemies.py

正常に実行されたらRPGツクールMZのエディタを開いて敵キャラが正しくできていることを確認します。スキルの時と同様に、属性が存在しなかったり前提となるスキルが存在しなかったらエラーが出るので、メッセージに合わせて修正してください。

まとめ

敵キャラのステータス、スキル作成をまとめて行っておきました。

他にもアイテム作成やイベントなどChatGPT×RPGツクールMZで作成する手順を随時挙げていきます。

タイトルとURLをコピーしました