２. 撲殺バットMODの作成（アイテム追加）

# 概要
今回から実際のMODを開発していきます。
まずは、作成するMODの説明と、アイテム追加までを行います。[^1]

# １. 作成するMODについて
今回のチュートリアルでは、アイテム追加系のMODを作成します。アイテム追加と言っても、食べ物や本などの通常アイテム、武器や衣服などの装備品、家具や内装品などの設置物などがあり、共通の実装部分もあれば、個別の実装が必要な部分もあります。今回は、装備品（武器）を追加するMODとし、何でもできちゃうバット・~~エスカリボｒｇ~~「撲殺バット」をゲーム内に追加します。

## 撲殺バットMODの仕様
* アイコンやテクスチャは勿論のこと、独自の3Dモデルの武器とする
* 武器のグレード（ティア１～３の３段階）を設ける
* 武器のグレードは、レシピによりアップグレード可能とする
* 多言語対応として、日本語と英語の翻訳を追加する
* バニラ機能にはない、独自ギミック（内容は後述）を設ける

# ２. ひな型の用意
サンプルMODの時と同様に、ルートフォルダ直下にひな型を用意します。「MODフォルダ」および「ID」についてはユニークな名称であることが望ましいため、独自の接頭辞「P4」[^2]を付けた「P4BokusatsuBat」としました。
```
C:\Users\%username%\Zomboid\Workshop
 └─ P4BokusatsuBat
     └─ Contents
         └─ mods
             └─ P4BokusatsuBat
                 │  mod.info
                 │  poster.png
                 │
                 └─ media
```
```text:mod.info
name=Bokusatsu Bat
poster=poster.png
id=P4BokusatsuBat
description=Add the new item "Bokusatsu Bat".
```
<img width="250" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2481343/a7d68b95-d379-9de2-f494-829f0f420237.png"> poster.png

# ３. アイテムの追加
アイテムを追加するには「media」フォルダの下の「scripts」フォルダ内に、テキスト形式の設定ファイルで定義します。定義ファイルはゼロから記載しても良いのですが、追加しようとするアイテムと類似の設定を元にすることをお薦めます。そこで、今回はバニラ武器の「釘バット」を元とすることにします。

## 流用元の定義確認
釘バットの定義は、下記のファイルに記載されています。
```
C:\Program Files (x86)\Steam\steamapps\common\ProjectZomboid\media\scripts\items_weapons.txt
```
```text:items_wepons.txt LL.2355-2401
	item BaseballBatNails
	{
		DisplayCategory = WeaponCrafted,
		MaxRange = 1.28,
		WeaponSprite = BaseballBatSpiked,
		MinAngle = 0.75,
		Type = Weapon,
		MinimumSwingTime = 3,
		KnockBackOnNoDeath = TRUE,
		SwingAmountBeforeImpact = 0.02,
		Categories = Blunt,
		ConditionLowerChanceOneIn = 10,
		Weight = 2,
		SplatNumber = 2,
		PushBackMod = 0.5,
		SubCategory = Swinging,
		ConditionMax = 15,
		MaxHitCount = 2,
		DoorDamage = 7,
		IdleAnim = Idle_Weapon2,
		SwingAnim = Bat,
		DisplayName = Spiked Baseball Bat,
		MinRange = 0.61,
		SwingTime = 3,
		HitAngleMod = -30,
		KnockdownMod = 2,
		SplatBloodOnNoDeath = TRUE,
		Icon = BaseballBatNails,
		RunAnim = Run_Weapon2,
		TwoHandWeapon = TRUE,
		BreakSound = SpikedBaseballBatBreak,
		DoorHitSound = SpikedBaseballBatHit,
		HitSound = SpikedBaseballBatHit,
		HitFloorSound = SpikedBaseballBatHit,
		SwingSound = SpikedBaseballBatSwing,
		TreeDamage = 1,
		MetalValue = 5,
		CriticalChance = 30,
		critDmgMultiplier = 5,
		MinDamage = 1,
		MaxDamage = 1.5,
		BaseSpeed = 0.95,
		WeaponLength = 0.5,
		DamageCategory = Slash,
		DamageMakeHole = TRUE,
		AttachmentType = Shovel,
	}
```
今回は、上記の設定を流用してアイテム定義を追加します。

## 定義ファイルの作成
撲殺バットMOD側に定義ファイルを作成します。
```
\media\scripts\P4BokusatsuBat_items.txt
```
:::note info
定義ファイルのファイル名は任意の名前で問題ありません。
:::

## アイテム定義の追加（ティア３）
作成した定義ファイルに、撲殺バットの定義を追加します。まずは最低グレードのティア３を追加することとし、性能は釘バットと同等とします。
```text:P4BokusatsuBat_items.txt
module P4BokusatsuBat
{
	imports
	{
		Base
	}

	item P4BokusatsuBatT3
	{
		DisplayCategory = Weapon,
		MaxRange = 1.28,
		WeaponSprite = BaseballBatSpiked,
		MinAngle = 0.75,
		Type = Weapon,
		MinimumSwingTime = 3,
		KnockBackOnNoDeath = TRUE,
		SwingAmountBeforeImpact = 0.02,
		Categories = Blunt,
		ConditionLowerChanceOneIn = 10,
		Weight = 2,
		SplatNumber = 2,
		PushBackMod = 0.5,
		SubCategory = Swinging,
		ConditionMax = 15,
		MaxHitCount = 2,
		DoorDamage = 7,
		IdleAnim = Idle_Weapon2,
		SwingAnim = Bat,
		DisplayName = Bokusatsu Bat T3,
		MinRange = 0.61,
		SwingTime = 3,
		HitAngleMod = -30,
		KnockdownMod = 2,
		SplatBloodOnNoDeath = TRUE,
		Icon = BaseballBatNails,
		RunAnim = Run_Weapon2,
		TwoHandWeapon = TRUE,
		BreakSound = SpikedBaseballBatBreak,
		DoorHitSound = SpikedBaseballBatHit,
		HitSound = SpikedBaseballBatHit,
		HitFloorSound = SpikedBaseballBatHit,
		SwingSound = SpikedBaseballBatSwing,
		TreeDamage = 1,
		MetalValue = 5,
		CriticalChance = 30,
		critDmgMultiplier = 5,
		MinDamage = 1,
		MaxDamage = 1.5,
		BaseSpeed = 0.95,
		WeaponLength = 0.5,
		DamageCategory = Slash,
		DamageMakeHole = TRUE,
		AttachmentType = Shovel,
	}
}
```
:::note info
定義ファイルの詳細については、下記URLを参照してください。
[PZwiki : Scripts guide](https://pzwiki.net/wiki/Scripts_guide)
:::

釘バットのアイテム定義からの変更点は下記になります。
* アイテムIDを「BaseballBatNails」から「P4BokusatsuBatT3」に変更
* DisplayCategoryを「WeaponCrafted」から「Weapon」に変更
* DisplayNameを「Spiked Baseball Bat」から「Bokusatsu Bat T3」に変更

## アイテム定義の追加（ティア１・２）
先程追加したティア３の定義を流用して、上位グレードのティア１・２の定義も追加します。追加に際して、下記の通り性能値を変更します。今回は簡易的な調整に留め、ダメージ設定およびクリティカル設定のみの変更とします。
|Item|Item ID|Min<br>Damage|Max<br>Damage|Critical<br>Chance|critDmg<br>Multiplier|
|:------|:---------------|---:|---:|-:|-:|
|ティア１|P4BokusatsuBatT1|1.50|2.00|50|7|
|ティア２|P4BokusatsuBatT2|1.25|1.75|40|6|
|ティア３|P4BokusatsuBatT3|1.00|1.50|30|5|
|釘バット（参考）|BaseballBatNails|1.00|1.50|30|5|

```text:P4BokusatsuBat_items.txt
	item P4BokusatsuBatT1
	{
		DisplayCategory = Weapon,
		MaxRange = 1.28,
		WeaponSprite = BaseballBatSpiked,
		MinAngle = 0.75,
		Type = Weapon,
		MinimumSwingTime = 3,
		KnockBackOnNoDeath = TRUE,
		SwingAmountBeforeImpact = 0.02,
		Categories = Blunt,
		ConditionLowerChanceOneIn = 10,
		Weight = 2,
		SplatNumber = 2,
		PushBackMod = 0.5,
		SubCategory = Swinging,
		ConditionMax = 15,
		MaxHitCount = 2,
		DoorDamage = 7,
		IdleAnim = Idle_Weapon2,
		SwingAnim = Bat,
		DisplayName = Bokusatsu Bat T1,
		MinRange = 0.61,
		SwingTime = 3,
		HitAngleMod = -30,
		KnockdownMod = 2,
		SplatBloodOnNoDeath = TRUE,
		Icon = BaseballBatNails,
		RunAnim = Run_Weapon2,
		TwoHandWeapon = TRUE,
		BreakSound = SpikedBaseballBatBreak,
		DoorHitSound = SpikedBaseballBatHit,
		HitSound = SpikedBaseballBatHit,
		HitFloorSound = SpikedBaseballBatHit,
		SwingSound = SpikedBaseballBatSwing,
		TreeDamage = 1,
		MetalValue = 5,
		CriticalChance = 50,
		critDmgMultiplier = 7,
		MinDamage = 1.5,
		MaxDamage = 2.0,
		BaseSpeed = 0.95,
		WeaponLength = 0.5,
		DamageCategory = Slash,
		DamageMakeHole = TRUE,
		AttachmentType = Shovel,
	}

	item P4BokusatsuBatT2
	{
		DisplayCategory = Weapon,
		MaxRange = 1.28,
		WeaponSprite = BaseballBatSpiked,
		MinAngle = 0.75,
		Type = Weapon,
		MinimumSwingTime = 3,
		KnockBackOnNoDeath = TRUE,
		SwingAmountBeforeImpact = 0.02,
		Categories = Blunt,
		ConditionLowerChanceOneIn = 10,
		Weight = 2,
		SplatNumber = 2,
		PushBackMod = 0.5,
		SubCategory = Swinging,
		ConditionMax = 15,
		MaxHitCount = 2,
		DoorDamage = 7,
		IdleAnim = Idle_Weapon2,
		SwingAnim = Bat,
		DisplayName = Bokusatsu Bat T2,
		MinRange = 0.61,
		SwingTime = 3,
		HitAngleMod = -30,
		KnockdownMod = 2,
		SplatBloodOnNoDeath = TRUE,
		Icon = BaseballBatNails,
		RunAnim = Run_Weapon2,
		TwoHandWeapon = TRUE,
		BreakSound = SpikedBaseballBatBreak,
		DoorHitSound = SpikedBaseballBatHit,
		HitSound = SpikedBaseballBatHit,
		HitFloorSound = SpikedBaseballBatHit,
		SwingSound = SpikedBaseballBatSwing,
		TreeDamage = 1,
		MetalValue = 5,
		CriticalChance = 40,
		critDmgMultiplier = 6,
		MinDamage = 1.25,
		MaxDamage = 1.75,
		BaseSpeed = 0.95,
		WeaponLength = 0.5,
		DamageCategory = Slash,
		DamageMakeHole = TRUE,
		AttachmentType = Shovel,
	}
```

:::note info
アイテム定義の各プロパティ詳細については、下記URLを参照してください。
[PZwiki : Item Script Parameters](https://pzwiki.net/wiki/Scripts_guide/Item_Script_Parameters)
:::

# ４. アイテム追加の確認
それでは、実際にゲーム内でアイテムが追加されているかを確認しましょう。現在はアイテム設定を追加しただけなので、通常プレイでは追加したアイテムを入手する事ができません。そこで、デバッグモードを使って、アイテム一覧を確認したり、実際にアイテムを入手します。

## デバッグモードでゲームを起動
Steamアプリを立ち上げ、ライブラリのProject Zomboidから「管理 ＞ プロパティ」を選択します。
![プロパティ表示](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2481343/115963e1-f90c-1417-fdfb-33e252b3c6ce.png)

プロパティウィンドウにて、起動オプションに「-debug」を指定します。この状態でゲームを起動すると、デバッグモードが有効になります。
![02-02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2481343/b77c61d3-e0da-88f0-d6fd-7fec99dd5242.png)

## アイテムリストでの確認・取得
「DEBUG MENU ＞ Items List」から起動される「アイテムリストの表示」で任意のアイテムを検索・取得できるので、今回追加したアイテムがゲーム内に追加されていることを確認します。
![02-03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2481343/284edae5-b1a1-84a0-8ab0-84612134f551.png)

また、アイテムリストでアイテムをダブルクリックすると取得できるので、追加されたアイテムを確認します。アイテムの表示名や威力について、アイテム定義で指定した内容が反映されていることが確認できます。
![02-04.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2481343/f56f7dca-d588-106a-7939-76f12601acf2.png)

# あとがき
ここでは、アイテム定義をすることでゲーム内にアイテムを追加する方法を解説しました。ただし、アイコンや効果音、3Dモデルなどは流用したバニラ武器のままになっていますので、次回はそれらの差替えを行います。

---
索引：[Project ZomboidのMODを開発する](https://qiita.com/PePePePePeil/items/5db632d902eb91847541)
前：[１. サンプルMODの作成（Hello World）](https://qiita.com/PePePePePeil/items/d115d365620871597e44) 
次：[３. 撲殺バットMODの作成（各種差替え）](https://qiita.com/PePePePePeil/items/0f0403e33f2bb4f83f6c) 

[^1]: 今回の内容を反映したMODファイルは下記。
💾 [P4BokusatsuBat_02.zip](https://www.pepepepe.com/zomboid/Qiita/P4BokusatsuBat_02.zip)（MD5チェックサム：28ed3c222ec6cb724818c70d6b5dbffc）
[^2]: 私のアカウント名「PePePePePeil」にちなんで「P4」を付けることでユニーク性を担保。実際にMOD開発される際は、ご自身の方法でユニーク性を担保して頂きたく。