【概要】
ポイントデータファイルの制作に必要なポイントについて理解し、その種類について学ぶ。
【内容】
ではまずポイントデータファイルを作るために、その仕組みとポイントの種類を知る必要がある。ブロックデータファイルの作り方よりもポイントデータファイルの作り方から先に学ぶ方が合理的である(と個人的に筆者は考えている)。なぜなら、マップを作ってもそれにふさわしいポイントデータファイルがなければ自作したマップをテストプレイすることすら適わないからである。
ここで、筆者は実際に意味も分からずポイントを配置していってもらい、簡単なミッションを一度完成させる方式を執るべきか、それとも延々と長い説明を書き連ねるべきか悩んだ。そして、その両方を行うことにした。先に文章での説明を行ってから、後にXACを動かし、実際に自分の手を動かしてミッションを作ってもらおうと思う。
そこで私からのお願いだ。どうかこれからの長い長い文章をできるだけ真剣に読んでほしい。一度で理解する必要はないが、ポイントデータファイルを制作できるようになるためにはどうしても読者自身の努力と試行錯誤による理解が欠かせない(そしてブロックデータファイルを制作できるようになるためには読者自身の努力と試行錯誤が全てである)。お願いですから、一度しっかり読んで、またあとでわからなくなったら何度か読み返してみてください。
では、実際に説明を行う。ポイントデータファイルは、ブロックデータファイルのように視覚的かつ直感的に理解できるものではない。ただしこのポイントデータファイルは三次元的な広がりを持ち、ブロックデータファイルと重ね合わせることによって初めて意味を成す。イメージとしては、読み込んだブロックデータファイルにポイントという点を打っていくと考えてくれればよい。そしてポイントデータファイルは、第2節で触れたように、
・4つの数値
・方向
・位置
を持つ"ポイント"と呼ばれる情報体を記録しているファイルだ。このポイントを配置していく作業がポイントデータファイルの制作そのものである。
まずは、このポイントの数値の意味を理解してほしい。ポイントには4つの値があり、説明の都合上、順番に[A][B][C][D]とする。[A][B][C][D]にはそれぞれ-128から127までの0を含めた256個の数字のどれかを入れることになる。ポイントの位置に制限はない。ポイントの向きは水平方向の八方向のいずれかとなる。ポイントに鉛直方向の向きは存在しない。
[A]の数値はそのポイントの種類を決める数値となる。このポイントの種類によって[B][C]に入れるべき数値が変わってくるので、以下では[A]で定められたポイントの種類に沿い場合分けして具体的に説明する。ただし、[D]の数値は常に"識別番号"と呼ばれる数値となり、これは言ってしまえばポイントそれぞれの名前だ。まさにポイントを識別するための番号である。基本的には重複しないように心がけるとよいが、識別番号を簡略化するコツは後述するので安心してほしい。
●[A]=1のとき;人
人を配置したいときは[A]に1を入れる。このポイントを打った地点に人が配置される。つまり、このポイントの位置は三次元的な意味を持つ。[B]には人情報の識別番号を入れ、[C]には配置した人を最初に従わせるパスの識別番号を入れる。人情報については[A]=4の場合、パスについては[A]=3の場合で詳述する。ただし、配置する人をプレイヤーにする場合のみ、[C]=0, [D]=0とする。
ここで注意してほしいのは、このポイントの位置は三次元的な意味を持つが、このポイントの向きは(プレイヤーを除いて)意味を持たないものとみなしてもよいことだ。実際にミッションを読み込んだ場合、ミッションが始まった直後はポイントの向き通りの向きを向いているが、直後に何らかのパスによりすぐに別な方向を向いてしまう。ミッション開始直後にプレイヤーを発見させて襲わせたいといった特殊な場合を除いて、プレイヤー以外の人の向きを気にする必要はないのだ。ただし、プレイヤーの人のポイントの向きはすなわち開始直後にプレーヤーが向いている向きなので、適当な方向を指定しておく必要がある。
●[A]=2のとき;武器
[B]には武器の種類の番号を、[C]には武器の弾数を入れる。武器の種類の番号は1から22を入れることになるが、どの番号がどの武器なのかは実際にポイントを配置する際にXACが教えてくれるので覚える必要はない。
この武器のポイントは人と同様、位置に三次元的な意味を持つ。このポイントの向きで武器の向きも変わるが、落ちている武器の向きにあまりこだわる必要はない。
●[A]=3のとき;パス
パスとは、人の動きを命令するもので、このパスに従って人は動く。[A]=1のときと[A]=2のときは実際に目に見えるポイントであったが、ここからは目に見えないポイントも増えてくる。[B]にはパスの種類が入り、[C]の値は次に従うパスの識別番号が入るが、[C]の値については一部例外がある。では、パスの種類について[B]の値によって場合分けして説明する。
・[B]=0のとき;歩き
人を歩いて移動させるパス。注意すべきは、"このパスの位置に向かって"歩いて移動するということ。このパスの位置まで近づくと次のパスに従う。[C]には次に従うパスの識別番号を入れる。
歩きのパスの位置は二次元的(前後左右)にのみ意味を持つ。歩きのパスに上下の意味がないのは意外かもしれないが、これは車の運転に前後左右の指示のみが必要であることを考えれば納得してもらえるはずだ。空間ではなく平面を移動するという意味では、上下の意味は必要ないのだ。歩きのパスの向きに意味はない。
・[B]=1のとき;走り
人を走って移動させるパス。注意すべきは、"このパスの位置に向かって"走って移動するということ。このパスの位置まで近づくと次のパスに従う。[C]には次に従うパスの識別番号を入れる。走りのパスの位置は二次元的(前後左右)にのみ意味を持つ。走りのパスの向きに意味はない。
・[B]=2のとき;待機
人をこのパスの位置で留まらせるパス。このパスの位置までは歩いて移動してくる。歩きと走りのパス同様このパスの位置は二次元的(前後左右)にのみ意味を持つ。向きには意味があり、パスの向きの方向を重点的に向く。[C]には次に従うパスの識別番号を入れる。ここで疑問に思うべきは、一点で待機しているのになぜ次のパスを指定する必要があるのか、ということだ。実は、ずっとその位置で待機させるのなら[C]の数値はこの待機のパスの識別番号と同じで何ら問題ない。しかし、イベントという機能に"指定した識別番号のパスを歩きに変える"というものがあり、これにより待機のパスを歩きに変えてやると、この待機パスは歩きパスへと変わり、[C]の識別番号のパスに従う、というわけだ。
・[B]=3のとき;追尾
その名の通り、指定した識別番号の人を追尾する。[C]の値には追尾させたい人の識別番号を入れる。ただし、一度追尾のパスに従った人は死ぬまで追尾のパスに従い続ける。この追尾のパスは位置・向き共に意味を持たないし、このパスの位置まで移動はして来ないのでどこに配置してもよい。
・[B]=4のとき;警戒待ち
敵が近づいたり、弾丸が近くを通ると人は銃を上げて周りを見回す。これを"警戒状態"という。そしてこの警戒待ちのパスでは、この警戒状態になったらその人は次のパスに従う。このパスまでは歩いて移動してくる。警戒状態になるまでは待機パスと同じ状態である。[C]には次に従うパスの識別番号を入れる。このパスの位置は二次元的(前後左右)にのみ意味を持ち、向きは待機の際に重点的に向く方向を指定できる。人質を救出するミッション(RE)などで、敵側のパスに用いられることが多い。
・[B]=5のとき;時間待ち
約5秒間このパスの場所でこのパスの向きと同じ方向を向き続け、次のパスに従う。このパスまでは歩いて移動してくる。[C]には次に従うパスの識別番号を入れる。このパスの位置は二次元的(前後左右)にのみ意味を持ち、このパスの向きと同じ方向を五秒間向き続ける。
・[B]=6のとき;手榴弾投げ
人が手榴弾を持っていれば、手榴弾を一個このパスの位置へ向かって投げさせる。このパスの位置に落ちるように、ではないのでテストプレイによる調整が必要。このパスの位置に向かって手榴弾を投げるということからもわかるように、パスの中ではこのパスのみ三次元的(前後左右上下)な意味を持つ。このパスの向きに意味はない。なお、人がこのパスの位置まで移動することはなく、手榴弾を持っていなければこのパスは無視される。[C]には次に従うパスの識別番号を入れる。
・[B]=7のとき;優先的な走り
基本的には[B]=2の走りのパスと同様だが、優先的な、とあるように、このパスに従っている間は警戒したり立ち止まったりしない。交戦はするがそれも走りながらである。
"xops0.97ft"以降のバージョンでのみ使用できるパスなので、このパスを使ったアドオンを公開する際はブリーフィングや同梱する文書(readme)などで"xops0.97ft"を使うようユーザーに喚起する必要がある。
以上でパスの種類の説明は終了である。[B]の値がそれぞれどのパスを表すかについては実際にパスを配置する際にXACが教えてくれるのでこれも覚える必要はない。なお、多くのパスの位置は上下の意味を持たないので、マップの下方にまとめておくと後々見やすい。
●[A]=4のとき;人情報
人情報はポイントの中でも最も抽象的な部分であることを先に述べておこう。[A]=1のときの人と混同しやすいが、人の場合は次に従うパスと識別番号しか決めていない。つまり、その人がどんな見た目にするのか、また、プレイヤーの敵か味方かは人のポイントだけでは決められないのである。
そこで必要なのが人情報である。このポイントは位置、向き共に意味を持たない。[B]には人の種類が入る。人の種類は0から42まであり、それぞれの人によって最初から持っている武器や体力、強さ、見た目が決まっており、これは実行ファイルを書き換える以外の方法で変えることはできない。[C]には人の"チーム番号"が入る。チーム番号が同じ人同士が出会えば何も起きないが、チーム番号が異なる人同士が出会うと警戒・交戦する。なお、弾丸を撃った人のチーム番号と撃たれた人のチーム番号が同じであれば撃たれた人にダメージはないが、弾丸を撃った人のチーム番号と撃たれた人のチーム番号が異なれば撃たれた人はダメージを受ける。ただし手榴弾だけはチーム番号関係なしに誰もが被弾する。チーム番号の数値に制限はなく、いくつでもチームを作ることができ、多人数デスマッチなども可能ではある。
●[A]=5のとき;小物
[B]の数値は小物の種類を表す。このポイントの位置は三次元的(上下左右前後)な意味を持ち、このポイントの方向によって小物の向きを変えることが出来る。実際にこのポイントを配置する際にXACが種類を教えてくれるので小物の種類を覚える必要はない。
ただし、[B]=12の場合に限り"追加小物"を読み込むことができる。これは標準で実装されている小物の他に、さらにもう一つ小物を読み込むことができる機能だ。追加小物を利用するためにはモデルデータとテクスチャをメタセコイア等の3Dモデリングソフトウェアにより制作する必要があり、ここでの説明は不適切と判断し説明を省略する。
[C]には0か1の数値を入れる。これを位置修正フラグといい、1を入れると位置修整フラグが有効となり、小物のポイントが宙に浮いていた場合、実際にアドオンを読み込むと真下のブロックへと自動的に接地される。0の場合は小物はポイントの位置に従いそのまま宙に浮いたままとなる。
●[A]=6のとき;手ぶらの人
"武器を持っていないだけ"の人であり、基本的な仕組みは[A]=1の人の場合と同じだ。人の種類によっては最初から武器を持っている場合が多いが、ミッションの難易度調整や演出のために武器を持っていない人を登場させたいこともあるだろう。そんな時に用いるのがこの"手ぶらの人"である。この"手ぶらの人"は"武器2"を持っていない人、すなわち主戦力となる武器を持たない人である。ただし、"武器1"は持っていることに注意されたい。
●[A]=7のとき;ランダム武器
基本的な武器は[A]=2の武器の場合と同じであるが、[B]と[C]の両方に武器の種類を入れてやる必要がある。これにより、ミッションを開始するたびに[B]か[C]のどちらかの武器が現れるというわけだ。弾数について細かく定めることはできず、その武器の種類の装弾数の三倍の弾丸が入っている。
●[A]=8のとき;ランダムパス
[B]と[C]の両方に次に従わせたいパスの識別番号を入れると、ミッションのたびにランダムでそのどちらかのパスに従う。人の進む経路を分岐させる場合に用いられることが多い。このポイントの位置、向きは意味を持たず、このポイントの位置へ人が移動することもない。
●[A]=10のとき;任務達成
[A]=9が抜けているわけではない。ここからは"イベントポイント"と呼ばれるもので、いよいよ抽象的になる。視覚的にミッションの中でこのイベントポイントを認識することはまずない。
[B]と[C]は両方とも数値を入れる必要はなく、0のままで問題ない。このポイントの位置と向きは意味を持たない。例として、
・[A]=12の死亡待ちのイベントポイントと組み合わせることで
Kill the target(KT)すなわち暗殺任務の成功条件
・[A]=13の到着待ちのイベントポイントと組み合わせることで
Escape(ESC)すなわち脱出任務やDefend target(DEF)すなわち護衛任務の成功条件
・[A]=16のケース待ちのイベントポイントと組み合わせることで
Capture(CAP)すなわち強奪任務の成功条件
・[A]=15の小物破壊待ちのイベントポイントと組み合わせることで
Destroy(DE)すなわち破壊任務の成功条件
などを作ることができる。
●[A]=11のとき;任務失敗
[B]と[C]は両方とも数値を入れる必要はなく、0のままで問題ない。このポイントの位置と向きは意味を持たない。例として、
・[A]=12の死亡待ちのイベントポイントと組み合わせることで
Defend target(DEF)すなわち護衛任務の失敗条件や
Release(RE)すなわち救出任務の失敗条件
などを作ることができる。
●[A]=12のとき;死亡待ち
[B]に人の識別番号を入れ、[C]に次のイベントの識別番号を入れる。[B]の識別番号の人が死亡することにより次のイベントへ進むので、KTの成功条件の判定やDEFの失敗条件の判定などができる。このポイントの位置と向きに意味はない。
●[A]=13のとき;到着待ち
[B]に人の識別番号を入れ、[C]に次のイベントの識別番号を入れる。[B]の識別番号の人がこのポイントに近づくと次のイベントへ進むので、ESCの成功条件の判定などができる。このポイントの位置は三次元的(上下左右前後)な意味を持つが、このポイントの向きに意味はない。
厳密な議論をすると、到着待ちの定義は"このポイントを中心にある一定の半径の球の領域に[B]の識別番号の人の足元が触れると"という条件であるので、テストプレイなどで意図しない挙動がある場合はこれを思い出してみるといいかもしれない。
また、XACにはこの"ある一定の半径の球の領域"を表示してくれるとても便利な機能があるのでそれも活用されたい。余談ではあるがXACにはマップ内の任意の距離を測定する機能もあるので知っておいて損はないだろう。
●[A]=14のとき;歩きに変更
[B]にパスの識別番号を入れ、[C]に次のイベントの識別番号を入れる。このイベントは[B]の識別番号のパスが何であれ"歩き"に変更するイベントで、"[A]=3のとき"の"[B]=2"のとき で触れた待機を歩きに変更する際などに用いるとよい。このポイントの位置と向きに意味はない。
●[A]=15のとき;小物破壊待ち
[B]に小物の識別番号を入れ、[C]に次のイベントの識別番号を入れる。このイベントは[B]の識別番号の小物が破壊されると次のイベントに進むので、DEの成功条件の判定などができる。このポイントの位置と向きに意味はない。
●[A]=16のとき;ケース待ち
[A]=13の到着待ちのイベントポイントとほぼ同じであるが、ケース待ちのイベントポイントの場合、"[B]の識別番号の人がケースを持って到着すれば"次のイベントへ進むので、CAPの成功条件の判定などができる。
●[A]=17のとき;時間待ち
[B]にXという数値を入れ、[C]に次のイベントの識別番号を入れると、このイベントポイントが発動してからX [秒]後に次のイベントへと進む。メッセージイベントの合間に挟まれることが多く、メッセージイベントの合間にはさむ場合は表示するメッセージの長さにもよるが、X=5~7程度が適当である。このポイントの位置と向きに意味はない。
●[A]=18のとき;メッセージ表示
画面に任意の文字列を表示させるイベントだ。メッセージを表示するためには別の準備が必要で、まず、ポイントデータファイルと同じディレクトリにポイントデータファイルと同じ名前のテキストファイル(.txtの拡張子)を新規作成する。次に、一行目から順にミッションで表示したい文章を書き込む。ただし、一行に表示できる文字は全角文字で35文字までで、一つのミッションでは最大16行までメッセージを表示することができる。次にこのテキストデータの拡張子を.txtから.msgへと変更する。.msgの拡張子のファイルを開くソフトウェアをメモ帳に設定しておくと楽である。これで準備は終わりである。
では、改めてメッセージ表示のイベントの説明に戻ろう。[B]には今作成した.msgの拡張子のテキストファイルの行数が入る。ただし、一行目を0、二行目を1、三行目を2、...、n行目をn-1と数えることに注意してほしい。[C]には次のイベントの識別番号が入る。ただしここで気を付けるべきは、連続してメッセージ表示イベントを使ってはいけないということだ。間に必ず5秒~7秒の時間待ちイベントを挿入しなくてはならない。なお、このポイントの位置と向きに意味はない。
●[A]=19のとき;チーム変更
[B]に人の識別番号を入れ、[C]に次のイベントポイントの識別番号を入れる。このイベントが発動すると[B]の識別番号の人のチーム番号が0になる。大事なのでもう一度復唱する。チーム番号が"0"になる。チーム番号を任意の数に変えることができるわけではない点に注意してほしい。このイベントポイントを用いると仲間の裏切りやロボットの暴走などの演出が可能だ。このポイントの位置と向きに意味はない。
以上でポイントの種類についての説明は終了である。