【Hytale plugin 制作】武器のダメージ設定・アニメーション設定 for FireSowrd #4

Hytaleの武器のコンボとダメージ編集

前回は「剣に鎌のアニメーションをつけてみる」という実験を行いましたが、今回はさらに踏み込んで「独自のコンボ攻撃」の実装に挑戦します。

最終的には「Sword」のような複雑な挙動を目指しますが、公式のSword設定は「継承(Parent)」を多用しており、始めに触るには少し複雑です。そこで今回は、比較的単一ファイルで設定が完結している「Longsword」をサンプルに、動作改変について慣れ、その後swordを元にオリジナルの「FireSword」を構築していきます。

前回 剣に鎌のアニメーションをつけてみる:【Hytale plugin 制作】武器のモーション割り当てしてみる。#3

※本記事はアーリーアクセス版(2026/04時点)の情報に基づいています。開発環境の仕様は今後変わる可能性があるため、公式の更新も併せてチェックしてくださいね。

1. サンプルとなる「Longsword」の構造を解剖する

参考にした Weapon_Longsword_Adamantite.jsonの設定の抜粋です。ダメージなどはここに記述しており、スキル(長押しとかのダメージや音声)もここで設定しているようです。

今回編集するメインの対象は”InteractionVars”になります。

# 今回調整していく部分に該当するところと主要なところのみ残しています。
{
  "Model": "Items/Weapons/Longsword/Adamantite.blockymodel",
  "Texture": "Items/Weapons/Longsword/Adamantite_Texture.png",
  "PlayerAnimationsId": "Longsword",
  "Recipe":{略}
  "Interactions": {
    "Primary": "Longsword_Attack"
  },
  "InteractionVars": {
    "Longsword_Block_Damage": "Longsword_Block_Damage",
    "Longsword_Swing_Left_Effect": {
      "Interactions": [
        {
          "Parent": "Longsword_Swing_Left_Effect",
          "Effects": {
            "WorldSoundEventId": "SFX_Longsword_Special_Swing"
          } <- 音声ファイルの設定は、追々やるので今は略します。
        }
      ]
    },
    "Longsword_Swing_Left_Damage": {
      "Interactions": [
        {
          "Parent": "Longsword_Swing_Left_Damage",
          "DamageCalculator": {
            "Type": "Absolute",
            "BaseDamage": {
              "Physical": 48
            },
            "RandomPercentageModifier": 0.15
          },
        }
      ]
    },
    "Longsword_Swing_Right_Effect": {
      "Interactions": [
        {
          "Parent": "Longsword_Swing_Left_Effect",
        }
      ]
    },
    "Longsword_Swing_Right_Damage": {
      "Interactions": [
        {
          "Parent": "Longsword_Swing_Right_Damage",
          "DamageCalculator": {
            "Type": "Absolute",
            "BaseDamage": {
              "Physical": 48
            },
            "RandomPercentageModifier": 0.15
          },
          "DamageEffects": {音声}
        }
      ]
    },
    "Longsword_Swing_Up_Left_Effect": {
      "Interactions": [
        {
          "Parent": "Longsword_Swing_Left_Effect",
          "Effects": {音声}
        }
      ]
    },
    "Longsword_Swing_Up_Left_Damage": {
      "Interactions": [
        {
          "Parent": "Longsword_Swing_Up_Left_Damage",
          "DamageCalculator": {
            "Type": "Absolute",
            "BaseDamage": {
              "Physical": 48 <- ここがダメージの設定
            },
            "RandomPercentageModifier": 0.15 <- ダメージのブレ設定
          },
          "DamageEffects": {音声}
        }
      ]
    },
    "Longsword_Stab_Charged_Effect": "Longsword_Stab_Charged_Effect",
    "Longsword_Stab_Charged_Damage": {
      "Interactions": [
        {
          "Parent": "Longsword_Stab_Charged_Damage",
          "DamageCalculator": {
            "BaseDamage": {
              "Physical": 144
            },
            "Type": "Absolute",
            "RandomPercentageModifier": 0.15
          },
          "DamageEffects": {音声}
        }
      ]
    }
  },
}

この項目は、いわば「攻撃が当たった時に何を流し込むか(ダメージや音)」の予約席のようなものです。ここで、いったんの全体像を定義し、詳しくはそれぞれ別ファイルで定義といった設計のようです。

2. 通常攻撃ダメージの設定をしてみる

2.1 通常攻撃ダメージを100倍にする

新規追加した自身のアイテムのjsonに、攻撃関係のLongsowrdの設定を移植、通常攻撃のダメージを100倍にしてみます。通常攻撃(左クリック)は以下の設定項目で設定できるようです。

"Longsword_Swing_Left_Damage": {
      "Interactions": [
        {
          "Parent": "Longsword_Swing_Left_Damage",
          "DamageCalculator": {
            "Type": "Absolute",
            "BaseDamage": {
              "Physical": 48 <-ここがダメージ値 4800とかにすると全モブワンパンできる。
            },
            "RandomPercentageModifier": 0.15 <-ここがダメージ値のブレ 最大15%ブレる
          },
        }
      ]
    },

“Longsword_Swing_Left_Damage”の LongswordやSwingなどは、Longsword_Attack.jsonに設定したものなので、ここを変える場合は、Longsword_Attack.jsonをコピーするなりして、自分用に書き換えたファイルを用意する必要があるみたいです。

また、ダメージやエフェクトは、それぞれの後に”_Damage”や”_Effects”をつけたキーで管理するようでした。

使用できるAttackのキー

設定できるLongsword_Swing_Leftなどは、Server\Item\Interactions\Weapons\Longsword\Attacksなどそれぞれの武器のモーション定義が入っているフォルダで管理されているようです。

Longsowrd/Attacksの中身

攻撃のチェイン設定

また、プライマリのアクション設定ファイルを調査すると以下のようなことがわかりました。

Longsword_Attack.jsonを検索してみると、”Server\Item\Interactions\Weapons\Longsword\Variants”という場所にあり、こちらにはチェインなどの設定が書かれていました。

# Longsowrd_Attack.json

{
  "Type": "Charging",
  "Effects": {
    "ItemAnimationId": "StabCharging" 
  },
  "AllowIndefiniteHold": false,
  "Next": {
    "0": {
      "Type": "Chaining",
      "ChainingAllowance": 1.25,
      "Next": [
        "Longsword_Swing_Left",
        "Longsword_Swing_Right",
        "Longsword_Swing_Up_Left"
      ]
    },
    "1.565": "Longsword_Stab_Charged"
  }
}

Longsowrd_Attack.jsonの中身

設定ファイルと挙動から、”Next”:の中身で、チェインを決めているみたいなので、ここを”Longsword_Swing_Left”,”Longsword_Swing_Right”,×10とかにすると、横振りを連続して出すようになります。

3. インタラクション・システムの全体像

ここで一度、Hytaleの武器がどう動いているのか、整理してみましょう。

  • 中身 (Item.json): 確保された枠に、具体的な数値(攻撃力48など)を流し込む。
  • 台本 ([weaponname]_Attack.json): どんな動きをどの順(コンボ)で出すか。
  • 予約席 (InteractionVars): その動きの中で「ダメージ」や「音」を出す枠を確保。

3. アニメーションを変えてみる

いよいよ本番です。アニメーション定義ファイルを作成し、オリジナルの攻撃シーケンスを組み立てます。アニメーションの設定は、この中の記述にある”PlayerAnimationsId”で指定し、詳細は、Animation/Sowrod.json(アニメ定義ファイル)に記述する方式になっています。

// プライマリでの指定
変更前:  "PlayerAnimationsId": "Sword",
変更後:  "PlayerAnimationsId": "FireSword",

3.1 新規アイテム用に設定ファイルを作成

ダメージなどを変えるだけなら、Longsowrdの設定をそのままコピペすれば動きますが、最終的にSowrdの動きにしたいので、Sowrdの設定ファイルを参考に設定を作成してみました。

剣と同じアニメーション及び動作にしてみた。

とりあえず剣と同じモーションにしてみた

作成した新規設定ファイルとFireSowrd.jsonの編集

アニメーション定義は Server/Item/Animationsに配置するFireSword.json(名前は任意にできるはずですが、Sowrdのアニメーション設定が Sowrd.jsonという設定ファイルと同じ名前だったのでそれに従うことにしました。) (Firesowrd.jsonは、今回参照しているItemフォルダの中にある。Item/Items/FireSowrd.json)

# 新規で作るフォルダ Animations とアニメーション設定ファイル Firesowrd.json
Item
 ├─Items/FireSowrd.json
 └─Animations/FireSowrd.json // フォルダを新規作成

// Firesowrd.json(アニメーション用)を新規で0から作ると大変なので、
// Sowrd.json(アニメーション用をコピーしてリネイム)
#  Firesowrd.json のIdを Sowrdから Firesowrdに変更しておく
"Id": "FireSword",

今回の変更に合わせてプライマリFireSowrd.jsonの””を 以下のように変更することで、新規で作ったアニメーション設定FireSowrd.json(“Id”: “FireSword”のアニメーション)を参照するようになります。

"PlayerAnimationsId": "Sword",
→ "PlayerAnimationsId": "FireSword",

3.2 animation (FireSowrd.json)をのぞいてみる

アニメーションの割り当てができているかチェックするために、通常では右左と振るアニメーションになっているので左左と振るように変えてみようと思います。

    "SwingRight": {
      "ThirdPerson": "Characters/Animations/Items/Main_Handed/Sword/Attacks/Swing_Right/Swing_Right.blockyanim",
      "ThirdPersonMoving": "Characters/Animations/Items/Main_Handed/Sword/Attacks/Swing_Right/Swing_Right_Moving.blockyanim",
      "ThirdPersonFace": "Characters/Animations/Expressions/Frown.blockyanim",
      "FirstPerson": "Characters/Animations/Items/Main_Handed/Sword/Attacks/Swing_Right/Swing_Right_FPS.blockyanim",
      "KeepPreviousFirstPersonAnimation": true,
      "Speed": 1,
      "ClipsGeometry": true
    },
    "SwingDown": {
      "ThirdPerson": "Characters/Animations/Items/Main_Handed/Sword/Attacks/Swing_Down/Swing_Down.blockyanim",
      "ThirdPersonMoving": "Characters/Animations/Items/Main_Handed/Sword/Attacks/Swing_Down/Swing_Down_Moving.blockyanim",
      "ThirdPersonFace": "Characters/Animations/Expressions/Angry.blockyanim",
      "FirstPerson": "Characters/Animations/Items/Main_Handed/Sword/Attacks/Swing_Down/Swing_Down_FPS.blockyanim",
      "KeepPreviousFirstPersonAnimation": true,
      "Speed": 1,
      "ClipsGeometry": true
    },

アニメーション設定ファイルの該当部分を見ると、三人称でのアニメーション、一人称のアニメーションなどの アニメーションファイル(.blockanim)と速度などの設定があることが確認できました。
右振りの一人称でのアニメーションを左振りのアニメーションに置き換えて、見た目上左左と振るように変えてみます。

"FirstPerson": "C.. Attacks/Swing_Right/Swing_Right_FPS.blockyanim",
→ "FirstPerson": "C.. Attacks/Swing_Left/Swing_Left_FPS.blockyanim",

リロードしてゲーム内で振ってみました。

右振りのアニメーションを左振りのアニメーションで上書きして、左、左と振るようにした例

アニメーションの定義が反映されたことを確認できました。

3.3 コンボを変更してみる

swordの設定をまねて、FireSwordのチェイン(コンボ)の設定ファイルを作成し、以下のように、左振り切り下ろしを連続でするように改変しました。

# Weapon_FireSword_Primary_Chain.json
{
  "Type": "Chaining",
  "ChainingAllowance": 2,
  "ChainId": "FireSword_Swings",
  "Next": [
    {
      "Type": "Replace",
      "DefaultOk": true,
      "Var": "Swing_Left",
      "DefaultValue": {
        "Interactions": [
          "Weapon_Sword_Primary_Swing_Left"
        ]
      }
    },
    {
      "Type": "Replace",
      "DefaultOk": true,
      "Var": "Swing_Right",
      "DefaultValue": {
        "Interactions": [
          "Weapon_Sword_Primary_Swing_Right"
        ]
      }
    },
     {
      "Type": "Replace",
      "DefaultOk": true,
      "Var": "Swing_Left",
      "DefaultValue": {
        "Interactions": [
          "Weapon_Sword_Primary_Swing_Left"
        ]
      }
    },
     {
      "Type": "Replace",
      "DefaultOk": true,
      "Var": "Swing_Left",
      "DefaultValue": {
        "Interactions": [
          "Weapon_Sword_Primary_Swing_Left"
        ]
      }
    },
    {
      "Type": "Replace",
      "DefaultOk": true,
      "Var": "Swing_Down",
      "DefaultValue": {
        "Interactions": [
          "Weapon_Sword_Primary_Swing_Down"
        ]
      }
    }
  ]
}

攻撃モーションテスト

コンボのファイルを編集し、左振りを連打するように編集した結果

3.4 今回の編集箇所まとめ

今回作成したファイルは全部で3つだけで、編集箇所も含めてもFireSword.jsonの”PlayerAnimationsId”のみなので4ファイル編集するだけでコンボ変更できました。

Server/Item
├─Animations
├─Interactions <-作成
|  ├─Weapon_FireSword_Primary.json <-入力後の分岐など
|  └─Weapon_FireSword_Primary_Chain.json <-チェイン設定
├─Items
└─RootInteractions <-作成
   └─Root_Weapon_FireSword_Primary.json <- 入力のフック(ここでWeapon_FireSword_Primaryを呼ぶ)

最後に

今回できたこと

  • ダメージ変更
  • アニメーション変更
  • コンボや攻撃時の条件分岐変更

今回の検証で、Hytaleの武器システムがいかに柔軟(かつ複雑)かが分かりました。 「どのファイルをいじればコンボが変わるか」さえ理解してしまえば、あとはアニメーションと数値を組み合わせるだけです。

次回は、ヒット時のエフェクトなどの制作をしていこうと思います。

ここまで読んでいただきありがとうございます。

では、次の記事で。 lumenHero

関連記事

第0回 Hytale plugin用の環境構築 : Hytale plugin用の環境構築【VSCode ,Java ,BlockBench】
第1回 自作プラグイン環境を作る : 【Hytale plgin制作】開発環境の準備 githubから入手#1
第2回 モデルを読み込ませてみる: 【Hytale plugin 制作】配布モデルを自分のpluginとして読み込んでみる。#2
第2回おまけ 名前空間などで小一時間溶かした話 :Hytaleプラグイン開発:アイテム定義JSONで”tkm:Items”と書いて1時間溶かした供養メモ。【Hytale plgin制作】
第3回 武器のモーション割り当て:【Hytale plugin 制作】武器のモーション割り当てしてみる。#3