３. 撲殺バットMODの作成（各種差替え）

# 概要
前回追加したアイテムのアイコンや効果音、3Dモデルを差替えます。[^1]

# １. アイコンの差替え
インベントリなどに表示されるアイテムのアイコンを差替えます。

## アイコンの用意
アイコンはPNG形式の透過ファイルで作成します。サイズについては、ゲーム設定[^2]によって拡大・縮小して表示されるため特に決まったサイズはありませんが、「32×32」辺りが通例です。

今回は３つのグレードの撲殺バットを追加しましたが、下記のアイコンを共通して使用します。
![Item_P4BokusatsuBat.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2481343/02aa50e8-8f69-87bb-2e92-4f21d9278284.png) Item_P4BokusatsuBat.png

:::note info
アイコンのファイル名は任意ですが、先頭に必ず「Item_」を付ける必要があります。
:::

## アイコンの配置
用意したアイコンを下記のフォルダに配置します。
```
\media\textures
```
:::note info
「textures」フォルダは固定です。そのフォルダ配下は自由にフォルダを切っても構いません。その場合は、後述のアイテム定義のアイコン指定の際に、パスを正しく指定する必要があります。また、一部のアイテム種別にはフォルダ構成が決まっているもの（例：腐った食べ物のアイコン）もあります。
:::

## アイテム定義の変更
前回追加したアイテム定義（P4BokusatsuBat_items.txt）の内、Iconプロパティの値を変更します。

```diff_lua
- Icon = BaseballBatNails,
+ Icon = P4BokusatsuBat,
```
値に指定するのは先ほど配置したアイコンのファイル名ですが、下記に注意してください。
* 先頭の「Item_」は指定不要
* 拡張子（.png）は指定不要
※ 上記のように「P4BokusatsuBat」を指定した場合、実際に参照されるパスは
　「\media\textures\Item_P4BokusatsuBat.png」となります。

# ２. 効果音の差替え
アイテム追加の元とした釘バットは打撃音などが軽いので、もっと重厚な効果音に差替えます。まずは、現在の効果音の設定を確認しておきましょう。
```text:P4BokusatsuBat_items.txt
BreakSound = SpikedBaseballBatBreak,
DoorHitSound = SpikedBaseballBatHit,
HitSound = SpikedBaseballBatHit,
HitFloorSound = SpikedBaseballBatHit,
SwingSound = SpikedBaseballBatSwing,
```
* BreakSound：アイテム破損時の効果音
* DoorHitSound：ドアやシャッターなど、障害物にヒットした際の効果音
* HitSound：ゾンビに攻撃がヒットした際の効果音
* HitFloorSound：這いずり状態のゾンビに攻撃がヒットした際の効果音
* SwingSound：スイング時の効果音

現在は、バニラで用意されている釘バット用の各種効果音が指定されています。全ての設定に対して独自の効果音を用意しても良いのですが、今回は「①類似武器の効果音を流用」、「②独自の効果音を指定」の２つの方法で差替えたいと思います。

## ①類似武器の効果音を流用
今回追加した撲殺バットの材質は「ニッケル合金」（という脳内設定）のため、類似武器を検討しました。その結果「スレッジハンマー」の重厚な効果音が合いそうです。ただし、ゾンビへのヒット音だけはオリジナル要素を出したいので、攻撃ヒット音以外はバニラ側のスレッジハンマーのアイテム定義を流用することとし、下記のように撲殺バットのアイテム定義を変更します。
```diff_lua
- BreakSound = SpikedBaseballBatBreak,
+ BreakSound = SledgehammerBreak,

- DoorHitSound = SpikedBaseballBatHit,
+ DoorHitSound = SledgehammerHit,

- SwingSound = SpikedBaseballBatSwing,
+ SwingSound = SledgehammerSwing,
```

## ②独自の効果音を指定
攻撃ヒット音には、自前の効果音を指定します。
効果音はWAV形式で、今回は下記のファイルを利用します。
💾 [P4BokusatsuBatHit.wav](https://www.pepepepe.com/zomboid/Qiita/P4BokusatsuBatHit.wav)[^3]（MD5チェックサム：b76d711715c3ccf91be85ae78d5c0480）

次に、用意した効果音を下記フォルダに配置します。
```
\media\sound
```
:::note info
「sound」フォルダは固定です。そのフォルダ配下は自由にフォルダを切っても構いません。その場合は、後述のアイテム定義のアイコン指定の際に、パスを正しく指定する必要があります。
:::

最後に、アイテム定義を下記のように変更します。
```diff_lua
- HitSound = SpikedBaseballBatHit,
+ HitSound = P4BokusatsuBatHit,

- HitFloorSound = SpikedBaseballBatHit,
+ HitFloorSound = P4BokusatsuBatHit,
```

値に指定するのは先ほど配置した効果音のファイル名ですが、下記に注意してください。
* 拡張子（.wav）は指定不要
※ 上記のように「P4BokusatsuBatHit」を指定した場合、実際に参照されるパスは
　「\media\sound\P4BokusatsuBatHit.wav」となります。

# ３. 3Dモデルの差替え
ゲームキャラが装備する武器の3Dモデルを差替えます。

## 3Dモデルの用意
3DモデルはBlenderなどを用いて、FBX形式で作成します。
3Dモデル作成については解説できるほどの経験がないため、詳細は割愛します。
今回は下記のファイルを利用します。
💾 [P4BokusatsuBat.fbx](https://www.pepepepe.com/zomboid/Qiita/P4BokusatsuBat.fbx)（MD5チェックサム：1599ec6da2122b97fbaf1295dffc38d9）

## 3Dモデルの配置
用意した3Dモデルを下記のフォルダに配置します。
```
\media\models_X
```
:::note info
「models_X」フォルダは固定です。そのフォルダ配下は自由にフォルダを切っても構いません。その場合は、後述のモデル定義のメッシュ指定の際に、パスを正しく指定する必要があります。
:::

## テクスチャの配置
3Dモデルに適用するテクスチャを配置します。
今回は、グレードが上がるに連れ色が濃くなるよう、下記の通りテクスチャを用意しました。
![Model_P4BokusatsuBatT1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2481343/6b312a3b-2ecd-9895-a29f-310df76eb537.png) Model_P4BokusatsuBatT1.png
![Model_P4BokusatsuBatT2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2481343/86e1aa69-670b-5ca5-e781-6cc4915b3c11.png) Model_P4BokusatsuBatT2.png
![Model_P4BokusatsuBatT3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2481343/3c79d6d2-3101-e745-fb66-d7a493d9ac3a.png) Model_P4BokusatsuBatT3.png

:::note info
ファイル名は任意です、接頭辞の「Model_」は必須ではありません。
:::

これらのテクスチャを下記のフォルダに配置します。
```
\media\textures
```

## 定義ファイルの作成
アイテム定義の場合と同様に、下記の通り定義ファイルを作成します。
```
\media\scripts\P4BokusatsuBat_models.txt
```
:::note info
定義ファイルのファイル名は任意の名前で問題ありません。
また、アイテム定義と同じファイルに定義しても問題ありません。
:::

## モデル定義の追加
作成した定義ファイルに、モデルの定義を追加します。
```text:P4BokusatsuBat_models.txt
module P4BokusatsuBat
{
	imports
	{
		Base
	}

	model P4BokusatsuBatT1
	{
		mesh = P4BokusatsuBat,
		texture = Model_P4BokusatsuBatT1,
		attachment world
		{
			offset = 0.0000 -0.2500 0.0000,
			rotate = 0.0000 0.0000 0.0000,
		}
	}

	model P4BokusatsuBatT2
	{
		mesh = P4BokusatsuBat,
		texture = Model_P4BokusatsuBatT2,
		attachment world
		{
			offset = 0.0000 -0.2500 0.0000,
			rotate = 0.0000 0.0000 0.0000,
		}
	}

	model P4BokusatsuBatT3
	{
		mesh = P4BokusatsuBat,
		texture = Model_P4BokusatsuBatT3,
		attachment world
		{
			offset = 0.0000 -0.2500 0.0000,
			rotate = 0.0000 0.0000 0.0000,
		}
	}
}
```

ここでは、主に下記パラメータを定義します。
* mesh：3Dモデルのファイル名（拡張子不要）を指定します
* texture：テクスチャのファイル名（拡張子不要）を指定します
* attachment world：アイテムを地面に置く際のオフセット値や回転値を指定します

:::note info
モデル定義の各プロパティ詳細については、下記URLを参照してください。
[PZwiki : Model Script Guide](https://pzwiki.net/wiki/Scripts_guide/Model_Script_Guide)
:::

## アイテム定義の変更
アイテム定義（P4BokusatsuBat_items.txt）の内、WeaponSpriteプロパティの値を変更します。
```diff_lua
- WeaponSprite = BaseballBatSpiked,
+ WeaponSprite = P4BokusatsuBat.P4BokusatsuBatT1,

- WeaponSprite = BaseballBatSpiked,
+ WeaponSprite = P4BokusatsuBat.P4BokusatsuBatT2,

- WeaponSprite = BaseballBatSpiked,
+ WeaponSprite = P4BokusatsuBat.P4BokusatsuBatT3,
```

:::note info
WeaponSpriteの値には、先程追加したモデル定義のモデル名を指定しますが、モジュール名を付与した指定でないと上手く認識されないのでご注意ください。
:::

# ４. 各種差替えの確認
それでは、ゲームを起動して差替え後の確認をします。各種定義の指定間違いが無ければ、アイコンや交換、3Dモデルが差替わっていることが確認できます。
![03-01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2481343/773bdde8-df1d-ad43-7860-a7af54df943e.png)

:::note info
定義ファイルの変更はスクリプトファイルの再読み込みで反映されますが、アイコンや効果音、3Dモデルのファイル自体が変わった場合は、ゲームクライアントの再起動が必要となります。
:::

# あとがき
ここでは、アイコンや効果音、3Dモデルの差替えについて解説しました。
次回はアイテムのアップグレードに関する実装をします。

---
索引：[Project ZomboidのMODを開発する](https://qiita.com/PePePePePeil/items/5db632d902eb91847541)
前：[２. 撲殺バットMODの作成（アイテム追加）](https://qiita.com/PePePePePeil/items/de2b4e2ddeb96a737378) 
次：[４. 撲殺バットMODの作成（レシピ追加）](https://qiita.com/PePePePePeil/items/d6e4c534070b23a34195) 

[^1]: 今回の内容を反映したMODファイルは下記。
💾 [P4BokusatsuBat_03.zip](https://www.pepepepe.com/zomboid/Qiita/P4BokusatsuBat_03.zip)（MD5チェックサム：d2ee678d173e8ed48ef73509e9adcdd7）
[^2]: インベントリの文字サイズなどに依存。
[^3]: 「[効果音ラボ](https://soundeffect-lab.info)」様の「戦闘[1] ＞ 打撃 ＞ 打撃7」を拝借。