ビヘイビアパックってどう書くの?【Behavior講座 #1】

1.はじめに

はじめまして、今週から毎週土曜日、数ヶ月かけて「応用アドオン講座」を進めていきたいと思います。至らぬ点もありますが、どうぞよろしくおねがいします。

この講座の対象は、「アドオンを使って、世界(ワールド)を変えたい」と思っている人です。なお、テクスチャは扱いませんので、初級アドオン講座か、不定期で更新するちゅろすさんの記事を御覧ください。また、アドオンを使ってこの現実世界を変えたいと思っている方はまたの機会にお越しくださいませ。

さて、この講座ではアドオンの中の、「ビヘイビアパック」の「entities」「loot_tables」「trading」を扱います。「リソースパック」「manifest.json」は、新薬浅田さんの担当である、初級アドオン講座をご覧ください。

因みに、一般にアドオンと呼ばれるものは、次のように分類することができます。

リソースパックを弄るのも、ビヘイビアパックを弄るのにも manifest.json を書く必要があります。これは、アドオンについての仕様やバージョンを設定するもので、直接コードを書いたりはしません。

entities は、エンティティにコンポーネントを追加したり、仕様を変更するためのjsonファイルが収納されています。loot_tables は、エンティティのドロップアイテムについて編集するためのjsonファイルが収納されています。trading は、村人との交易について編集することができるjsonファイルが収納されています。

つまり何が言いたいかと言うと、Add-onを編集・制作するには、JSON言語を覚えることが必要です。といっても、プログラミング言語に触れたことない人は言語を覚えるのが大変でしょうし、さきほど偉そうに宣言した私もJSONはほぼ書いていないので、変に決められた形を崩さなければ覚えていなくてもなんとかなるのかもしれません。さっきから言っていることがブレブレですが、アドオンに青春を賭ける覚悟がある人は、先にJSONを覚えてきてください。

2.player.json

player.json は、entities フォルダに収納されているJSONファイルです。これには、プレイヤーの特性・プロパティやトリガーなどを記述することができます。

Documentや、Atomなど、テキストエディタやプログラミングエディタで開くと以下の画像のようになっているかと思います。

基本的にいじらなければいわゆるバニラと同じ挙動をします。

ややこしいように見えますが、entities に収納されているjsonパックは、「component_groups」「components」「event」の3つの部分に分けることができます。

componentsは、そのエンティティに必ず実行されるコンポーネントを収納しています。また、この中にあるコンポーネントに対して後からアクションを起こすことは基本的にはしません。

component_groupsは、そのエンティティに対して実行される予定のあるコンポーネントを収納しています。この中にあるコンポーネントは、イベントが起こると呼び出され、そのコンポーネントの内容を実行します。プログラミングで言い換えるならば、関数を作り実行する感覚です。作ったコンポーネントは好きなときに使いたい数だけ呼び出せます。

eventsは、component_groupsのどのコンポーネントを呼び出すかを記述します。呼び出しに対する条件はcomponentsに記述します。つまりアドオンでは、基礎言語のif文を、これら3つのゾーンに分けながら書いていくことになります。

3.component

componentsで指定する形質や条件などは何十種類か存在します。バニラのビヘイビアパックをダウンロードすると、x.x.x(バージョン)_documentationというhtmlファイルが内蔵されています。これをブラウザで開くと、英語でコンポーネントの種類と説明が丁寧に全て記載されています。二回目ですが、英語でコンポーネントの種類と説明が丁寧に全て記載されているのです。つまり、英語が読める人にとってはビヘイビア制作なんてヌルゲーなんです。(怒られる)

しかし、英語を簡単に読み解くことができる博識の方はそういらっしゃらないですし、私も読めないです。基本英語なんて読めるほうが珍しいんです(グローバル社会にどんどん近づいていますし、少子化も進んでいますのでまともな会社に入って良い暮らしをしたいなら今すぐブラウザを閉じて英語の勉強をしてください。)。

結論としては、ビヘイビアを作りたいなら英語を読めるようになろう。以上。

 

 

…と、単純明快なのですが、英語を読めるようになるよりも多分翻訳でどうにか頑張るほうが早いので、研究熱心なTiprint編集者の方が大いに協力してくださいました。コンポーネントについての解説をしばらくは更新していきたいと思います。

なんと、追加できるコンポーネントにはこんなに沢山の種類があります。それを全部紹介するのはとっても時間が掛かるし、とてもとても面倒なので、後回しにするために今回は概要だけ説明したいと思います。

コンポーネントは大きく分けて8個に分解することができます。憧れているあの人のすごいビヘイビアパックも、この8つに分解することができます。

1.Entity Definition Properties

jsonファイルの定義を設定するコンポーネント。概要はわかるけど、ダウンロードしたときにすでに記述されており、よっぽどのことがなければ無理に記述しなくて良い部分。現時点では精鋭が揃っているTiprintでさえイマイチ理解に及んでいないので、解説はだいぶあとになりそうです。

2.Attributes

エンティティの属性を設定するためのコンポーネント。現時点(v.1.5.0)では、3つしか用意されておらず、「攻撃力」「エフェクト効果」「強度」のみ。手軽に使いやすく、よく設定されている。

3.Properties

エンティティの特性と特質を設定するコンポーネント。これは付与したり削除したりしながら、特質をコントロールする。

4.Components

プログラミングで言い換えるならばステートメント(命令)に近い。具体的には、〇〇なら〇〇をするという条件文を成り立たせるためのものなど。条件はフィルターとトリガー、実行するものはプロパティであることが多い。

5.AI Goals

エンティティの行動、AIについて動作するコンポーネント。ゾンビがドアを見つけると破壊する行動にでるが、この行動はバニラのゾンビのAIであるので、コンポーネントを用いて破壊しないようにしたり、破壊すると〇〇などを組み込むなどして編集することができる。

6.Filters

条件を詳細に指定するためのフィルター。7で説明するトリガーの中に埋めて設定したりする。

7.Triggers

行動や状態を用いて条件を指定するためのトリガー。

8.Built-in Events

バニラで使用されているイベントに加えて独自に組み込むためのイベント。鶏が子供を生んだら〇〇、などを設定できる。

4.終わりに

いかがでしたでしょうか。ビヘイビアパックに触れる機会がなかった人も、触れていただけたらなと思います。

来週からは、各コンポーネントについて使い方をまとめていく予定です。

なお、記事を編集しているのはAqnecoですが、私自身の力不足のため、山末さん、キンジさん、Galaxyさんにも手伝っていただいております。質問があれば、Disqusに書き込んでくださいね!

それでは、来週もお楽しみに!Fas.