NWN奮闘記
2003年10月〜


●10月4日
 いろいろと片付いて、ひさびさに時間が出来たのでツールセットいじり再開してみました。
 以前モジュールを続けて遊んでいる時に、装備を整えたりインターバル入れたりするための拠点的な場所が欲しいねって事で作り始めてた宿屋だけのmodがあったんですが、いろいろと時間なくなっちゃったせいでエリア作ったところで止まってたんですね。
 時間もそうですが、エリアを作ったところまででそれ以上進められなかったってのも事実。説明書にはなんも説明らしいものはないし、どうしたらいいんだろう?という感じで。ネットで調べたらいいんですけど、それも面倒だなーと(笑)

 でもツールセット使っていろいろとやりたい事が出来てきたので気合いれてやってみるかあ!というわけで、とりあえずはセガPCの公式ホームページにある「ツールセット チュートリアル」を1からやってみる事にしました。ちなみに、そのまま同じ事をやるわけではなく、例の宿屋modに置き換えて手順などをそのまま1から順にやってみました。

 順にそのままやるだけで、結構できるもんでした。
 エリアを作って、つなげて、NPCやオブジェクト置いて、カンバセーション(会話データ)やショップデータ(お店データ)を作って設置、それからそれらを設置済みのNPCやオブジェクトに関連付けて行くと、まあまあ形にはなります。
 多少の試行錯誤みたいな部分はあって、思うように操作もできなくてイライラしたりはするけど、それは最初だから仕方ないと自分を慰めつつ続けてみるというのも必要ですが(汗)

 もしDMモードで全て自分で動かしてやる、というのであれば、このチュートリアルを最初から最後までやるだけで十分です。エリア作ってオブジェクト置いて、クリーチャーの設定とかすればいいだけなので、それらをリストから選んで項目設定して設置するだけですから。

 ただねえ…やっぱりスクリプトはある程度いじる必要はあるみたいです。まったくスクリプトに直接触れずにできる事には限界がありすぎる。でもプログラムとか未経験の人には、これが大きなハードルであり壁になってしまいますよね。
 ちょこっとはプログラム勉強した事がある僕も、スクリプトとかは全然わかりませんし、面倒くさいなーって思ってしまいます。でも、やっぱり一歩一歩進むしかないです。

 NWNにはエリアもオブジェクトもmod本体にも、スクリプトを入れるためのスロットみたいなものがあります(プロパティを開くと見れます)。このスロットが数種類あるんですが、その意味は「どのタイミングで、そこに入っているスクリプトを実行するか」というものです。
 僕も全部はわかってないんですが、例えば、「6秒に1回ずつ」など時間で決まってるのもありますし、「このオブジェクトがクリックされた(使用された)時」とかあるわけですね。
 最初、ズラッと並んでるスロットみた瞬間に「意味わかんねー」と諦めかけたわけですが(笑)こう文章にしてみるとなんかまとまるもんです。

 スクリプトに関して、ここまでわかってれば、他のmodでの動作を見てそれを実現したい時、そのmodをツールセットから開いて、どのスロットにスクリプト入ってるか確認したらスクリプト開いてコピペするだけで再現できる場合もありますから、手間はかかるけどもうそれなりのものが作れるんじゃないかなーと思います。

 僕の場合、看板をクリックすると「○○の店」とか出る…ていうのが良く見かけられるじゃないですか?あれをやろうとして普通に看板にカンバセーション関連づけたら、何もでない。なんでだろーと思って他のmod開いて看板みたら、なんかOn Used(使用時スクリプト実行)スロットになんかスクリプトが入ってる。なのでそのスクリプトをコピーして、看板のプロパティのほかの設定項目とかざっと目で覚えてから、自分のやつに同じように設定してペースト、してみたらできました(笑)

 スクリプトもちょっとずつお勉強していったらいいんだろうけど、まずお勉強!じゃあつまんないので、こんな感じでやってって、少しずつ理解していけたらいいなー程度の気持ちでもいいと思います。

 まあ、ぶっちゃけ僕はDM不要のmodなんて作るつもりはないので適当でいいんですけど(笑)
 どうせやるならDMしたいしー。
 まあ、万が一将来的にわかってきたら自分のDMシナリオ用modをDM不要のやつに完成させてもいいけど、あんまり興味ないなあ(笑)

●10月8日
 今日はMQの集いが早めに終わったので、残りの時間残れる人で僕がホストした場合のラグとか動作とかを見てもらおうと思い、試しにやってみました。
 で、そのときに自分はプレイヤーではなくDMとしてゲームを立ち上げました。(初挑戦!)

 まぁ、もともとDM不要のmodだしテストなんで僕はボケーと見てて、もし敵の強さのバランスが悪かったら修正してみようかなー程度のつもりだったんですが、もともとが完成してるmodだけあって特にやる事なし。なのでいろいろと試してみました。NPCに憑依して動かしたり敵を急遽クリエイトして配置してみたり…直接打ち込むコマンドとかはまったく使わなかったけど、それなりの事はできるんだなーという感じ。途中、思いついたアドリブを入れてみたりしてなかなか楽しいセッションだった。

 ところで今日の発見。
 DMクライアントでゲームに入って、チューザーとクリエイターのウィンドウを開いたら中の文字が文字化けしてた場合、オプションの「高解像度フォント」のチェックを外す(つまり無効にする)と直ります。公式にも書いてあるけど。
 ちなみに、この高解像度フォントの機能は日本語版では機能しないようなので有効/無効関係ないそーです。

●10月9日
 ツールセットいじり。ツールセットいじり始めたら、まずは「NPCがいる屋内」と「野外」のエリアで構成されたテスト用modを作っとくと便利だという事に気がつきました。この二つのエリアで構成されたmodを作るだけでもツールセット初挑戦だと発見がいっぱいだし、時間もかかっちゃうと思いますけど、公式サポートあたりにあるツールセットチュートリアル見ながら同じ順序でやればなんとかなるかと思います。余裕あったら洞窟でも作っておけばある意味全部エリアそろうし(笑)

 先日からいじり始めて、DMモードもやってみたわけですが、正直DMでやるんだったらもう今のままでもそれなりにできそーだなという感想です。あ、でもジャーナルとかまだ全然触ってないから駄目かな?(汗)

 とりあえず今日はいろんな所を回って、使ってみたいスクリプトを拾ってきました。それをテストmodに入れて使ってみよう、とトライ。この時に屋内/野外とか、敵のいるエリア/いないエリアがあると試しやすいわけですよ。
 拾った分の半分くらい試してみたけど、スクリプトエディタ開いてそこにスクリプトコピペして、指定されたスロットに割り当てるだけで機能するのもある。これはまったく知識なくても、今のレベルで十分使える。
 でも中には、説明通りにやってみたけどうまく行かないやつとか、スクリプトの一部を自分で書き込まないと駄目なやつとかあって、それも説明どおりにやればいいんだろうけど、なんか意味わかんねーなーというのもあります。
 そういう、今の自分には扱えないやつはとりあえず放置する事にしました。(笑)
 どうしても、そのスクリプトを動かさないと自分の考えるmodが作れないよーというのであれば、スクリプト解説のページでも見ながら気合で理解するか、誰か詳しい人に聞くとかする必要があるでしょうけど、僕にはそれほどのものはなかったし、そんなエネルギーもなかったので(笑)

 まあ、いじってる内にスクリプトにも興味出てきて、最近はちょろっとスクリプト関係のページとか見たりもしてるのでそのうちに真面目にやったりするのかもしれないけど、今はいいやって感じです。自分を追い込みすぎると嫌になっちゃうし。

 しばらくは、1.2時間くらいの超簡単なシナリオでも作ってツールセットとDMモードの練習かなーと思ってます。
 キャンペーンシナリオの構想もあるんだけど、いきなりやるのも無謀だし、まだまとまってもいないので。

 そして今日の発見。
 ERFファイルはスクリプトをエクスポート(出力)したものなんですね。だからERFファイルをERFフォルダに入れて、モジュールからインポート(入力)するとスクリプトが読み込まれています。(もちろんその後指定してやる)
 逆に、スクリプトをERFファイルの形にエクスポートすれば別のモジュールにインポートさせる事もできるわけですね。
 ERFファイルってなんだよ!と思ったので聞いてみたわけで…常識だったらやだなあ(笑)でも同じ疑問を持った人もいるはずだ!(汗)

●11月6日
 気がつけば11月。
 MQ会ではずっと英語の大作MODをプレイ中。週に1回〜2回で1回のプレイが1時間〜3時間くらいな感じ。誰かが疲れてたり眠くなったりしてきたら切りのいい所で終わらせるという感じです。
 NWN日本界ではバージョン1.32のβが発表されて軽く騒ぎになりましたねー。なぜかというと、βだって事となんでまだ正式版も出ないんだって事とか、β版だとマルチプレイの時に問題がいくつか(ゲームスパイで表示されない、同じバージョン同士じゃないとマルチできない)あったりとか。
 一番の問題は、本場アメリカで作られたMODやツール類が最新の1.32+拡張パックが基本になっていて、それらが使えないという事みたい。新しいものでどんどん拡張していけるのがNWNのウリなのに日本語版の環境が古すぎてそれが活かせない…というもどかしさなんでしょうなあ。
 僕自身はまだ現在の環境でも遊びきってないけど、すでに遊びつくした人にとっては新しいものに目が行くのは当然です。いろんな所でセガPCローカライズチームには非難出てるけど、実は僕はまだそんなに言うほど実感はないんですよね。んでも、確かにNWN人口とか実際の売り行きとかは、あまり多くはないんだろうけど、だから仕方ないって事じゃなくて、やっぱりローカライズしたのなら最初の意気込み(サポート体制がんばる、MOD翻訳もやる…みたいな事言ってたはず)通りに最後まで面倒見て欲しいですよね。

 大変だろうけど、ちゃんとNWNを愛してるファンはたくさんいます!
 日本語版出してくれたおかげでプレイするようになったヤツ(僕もそう)もいますよ!
 だからがんばってください!

 と、応援してみました(笑)

 ちなみに僕個人は少ない時間の合間を縫ってちまちまとシナリオ作り、mod作りを進めています。
 シナリオは一応完成。テスト・練習用に割り切ったつもりが4本キャンペーンになってたのは秘密。あとはそれを形にするためにmod作りに励んでます。
 DMモードでやるので、あまりスクリプトとか細かく作らなくてもいいんですけど、やっぱり全部手動は不安。忙しすぎて僕自身が楽しめなかったらやだなあ…という不安があるんですね。(まずやってみてから考えろって話ですが)
 で、シナリオを形にできるようにエリアとか作ってるうちに、ついにスクリプトを使わないと再現しにくいものが…。

 ネタバレにはならないので、どんなのかと言いますと、PCを発見したら逃げていくNPCを作りたいと思ったわけです。もちろんDMの場合、1人なら憑依して逃げればいいし、複数ならまとめて選択して全部を特定ポイントに走らせて逃がせばいいんですが、NPCが逃げている間にDMは別の作業をしたいなーと。(あとは逃げるNPCを追いかけるPCを眺めて楽しみたい…というのもあったり(笑))

 そんで、だいぶ前に拾ってきてちょっといじって放置してた「Lilac Soul's NWN Script Generator, v. 1.4」(NWCJから行けます)で出来ないかなあと起動。これは条件を指定してくとスクリプトを組んで行ってくれるという便利なツールなんですが、英語なので面倒だったり、作ったスクリプトをどこにセットするか程度の事はわからないと使いこなせないです。まあ、適当に簡単なスクリプト作って、いろんなところにぶち込んで試してみるのも勉強になっていいんですがね。
 それにしても誰かこれを日本語化しないかなあ…日本語化したらスクリプトで二の足踏んでる人もmod作りに挑戦しそうだけどなあ…

 んで、作ってみました。Normal Scriptを選んで発生条件は「NPCがPCを見た時」で動作は「アクションを起こす」。するとどんなアクションを起こすか聞かれるので「ターゲットから逃げる」を選択。すると今度は何をターゲットにするか聞かれるので「PC」を選択。で、完成。これで最初に戻るのでもしもっと動作が必要だったら選択して追加するといいみたいですが、これで十分なので出来上がったスクリプトをツールセットのスクリプトエディタにコピペしてセーブ。エラーチェックされるんですけどエラーはなし。
 次にそれをNPCにセットします。どこにセットするか一瞬迷ったけど、スクリプトジェネレーターの選択肢「NPCがPCを見た時」の後ろに(Perc…なんとか)と書いてあったので似たような名前のスロットにぶち込んで、さっそくテスト。

 隠密で近づくと反応なし。姿を現したら…おー、逃げましたねえ。
 でも歩いて逃げてる…。NPCの移動速度を最速にしてみたけど、すごい早歩きなだけでなんか変。これって走らせられないのかなあ?それにちょこっと離れたところで一度止まっちゃう。んー…。

 ついに勢いでスクリプトに目を通しちゃいました(笑)
 基本はプログラムなんだから命令が並んでる事には変わりないはずだし、たぶんわかりやすい名前だろうから見ればわかるかなあ、と。
 えーと…objectなんたらとかintなんたらとか意味わかりませんが(笑)
 あ、これかな、ActionMoveAwayFromObject(oPC);
 アクションオブジェクトから離れる…きっとこれが逃げるアクションを起こす命令ですね。たぶんどこかでそのオブジェクト=PCである、と指定とかしてるんだろうなー…くらいはなんとなくわかる。

 次に、NWN Lexicon JPN というスクリプトの命令とかの辞書を日本語化してくれているガッツのあるホムペを見てみます。そこでActionMoveAwayFromObject命令を探す…とありました。
 えーと、この命令には3つのパラメータがあって、命令の後の()の中でそれを指定するみたいです。スクリプトって基本的には全部そうなのかな?「命令(パラメータ,パラメータ,パラ…);」というのが基本形みたいですね。「,」でパラメータを仕切ってて、「;」でたぶんこの命令文がここで終わりだという事を決めてるのかな?

 この命令のパラメータですが、

oFleeFrom

アクションの主体が立ち去るobject

bRun

TRUE:アクションの主体は歩かずに走るでしょう。(デフォルト:FALSE)

fMoveAwayRange

アクションの主体とoFleeFromの間で置くべき距離。(デフォルト:40.0f)

 と、3つあるみたいですね。
 ふむふむ、という事は ActionMoveAwayFromObject(oPC); の()内の最初の oPC はやはり逃げる対象になるオブジェクトがPCだと指定しているんですね。(これ以前にある命令はなんなんだろう…まあいいか、わかんないし(笑))
 残り2つは何も書かれていないのでデフォルトのままになっているんですねー。
 そしてそこを指定すれば、僕の希望はかなえられるわけだ!

 さっそく指定…
 ActionMoveAwayFromObject(oPC, bRun=TRUE, fMoveAwayRange=300.0f);
 えーと…エラーです(笑)
 エラーメッセージも間違いを指摘しているんだろうけど意味わかりません。
 やっぱりこの命令文だけで動いてるわけじゃないのかなあ?この前の部分って、関係ありそうな命令っぽい言葉ほとんどなくて意味わかんないよー…と頭を抱えていたら、ん?命令っぽい言葉がないって事は命令っぽい言葉って要らないのかも?

 もう一度見返すと、
 ActionMoveAwayFromObject(oPC);
 これも最初のパラメータで oFleeFrom=oPC とかって指定してるわけじゃないな。つまりこれは省略できるわけですね。ていうか書いちゃいけないのですね(泣)

 という事でパラメータの数値だけに直したらエラー0で成功。テストしてみたらちゃんと走って遠くまで逃げてくれました!
 おおー、やればできるもんだなあ!
 ちなみに完成したスクリプトは以下です。参考までに。

void main()
{

object oPC = GetLastPerceived();

if (!GetIsPC(oPC)) return;

if (!GetLastPerceptionSeen()) return;
int DoOnce = GetLocalInt(oPC, GetTag(OBJECT_SELF));

if (DoOnce==TRUE) return;

SetLocalInt(oPC, GetTag(OBJECT_SELF), TRUE);

ActionMoveAwayFromObject(oPC, TRUE, 300.0f);

}

上でさんざん悩んでた最後の一文、Action〜より上の部分は全然意味わかりません。一体なにをしているのだろう?
最後のAction〜だけで基本的には動いてそうなんだけどな。
まあ、なにはともあれ、やればできるって事ですね。1から書くのは無理だけど、ジェネレーターで作ったやつを今回みたいに改造とかしてったらかなりなんでもできそうな気もする(甘い?)

●12月2日
 気がつけば12月(笑)
 ついに初DMで自分の作ったシナリオをやりました。
最初にいろいろと考えてたわりには手順とかきちんと決めていなくて慌てたり、操作でまごついたりしてテンポはそんなに良くなかったかも…。
 ただ、どんなことを準備しておくか、考えておくかって事とかちょっとわかった気がする。あと、何ができて何ができないのか。グラフィックやNPCの動きだけでは表現しきれない事も、DMが状況説明を入れるだけでわかってもらえるというのはDMなしのMODにはない所。同じマップを使いまわしたりする構成だったけど、結構状況を変えるだけで雰囲気とか変わるし、プレイヤーもあまり「使いまわしてる」事は気になっていない様子でした。
 初めてなので会話とかで忙しくなったらやだなーと思ってNPCのセリフはほとんど作ってあったし、そんなに会話する人物も出てこなかったのでTRPGっぽい雰囲気はあまり出なかったなと自分では思ってるんだけど、お約束のキャンプシーン(僕がTRPGで野営する場合には必ずやらせるシーン)はなかなか好評だったのでうれしかったかな。
あとは回数重ねてみよう、そうするうちにNWNをうまく使ったアイデアとか出てくるかもしれない。

●12月8日
 今回はDM2回目にしていきなり単発セッション。
 普段の固定メンツ以外の方2名に参加していただけました。感謝。
 modは前回使ったやつを多少改善してみたもの。マップを広くしたほうが動けて良いなどのアドバイスから変更を加えたもんです。同じシナリオだし楽勝〜とか油断してたら駄目駄目でした…。
 イベントのテンポがあまり良くなく、途中いきなりNTTの緊急メンテでサーバー落ちたり、エリアの設定間違えて休息のために準備用の空間に移動させたりして、全体的にテンポとかぶち壊しって感じでした…。
 このmodは旅感覚がポイントなのでテンポを損ねると、旅してる感じがなくなってしまったり移動距離を意識しにくくなったりして駄目ですね。せっかく参加してくれた2名様には申し訳ない事をしたと反省。
 ただ、おかげさまでまたいろいろと勉強できたというのは本当です。次回以降に生かせるといいな。
 そうそう、サブDM付きというのも始めてだったけど、サブDMいるとDM側もまた楽しいです(笑)

●12月10日
 いつものメンツでキャンペーン2回目。今回から主人公(的な)キャラが登場。
 まだ目覚めたばかりのソーサラー君に指導しつつ、仕事をこなすみたいな内容なんですが序盤のソーサラー君説得シーンがめちゃ熱くて1時間くらい会話してた気がする(笑)
 そのあとは村を出て目的地のダンジョン(小)に向かって移動。途中軽くイベントを1エリアに1回くらいやりつつ到着して目的果たして終わりという形。形としては王道なんですよね、村>道中>ダンジョン>クリアという。
 プレイヤーのロールプレイに助けられたというのは多分にあるとしても、全体的にイベントのテンポも良かったしすっきりまとまった感じがあって自分としてもなかなか満足いくセッションでした。楽しかった。
 広いマップを隅々まで移動するのもいいけど、DMの場合はそれなりの大きさのマップをつなげて1エリアにイベント1個とかにしたほうがテンポは良さそう。イベントは敵がいるだけじゃなく、それなりにプレイヤーが考える余地があるといいみたい。この辺は前回の教訓が活きた感じ。自分のやりたかった事をmodに再現してみて、それに対してプレイヤーからの反応があるとDMはやっぱり楽しいです。驚かせようと思ってやった事に驚いてもらえたりとか、ちょっと厳しいかもなーと思いつつ用意した難関をうまく切り抜けてくれたりとか。
 まあ気絶ルール使ってなかったら3人(内1名は完全にDMのミスで殺した)死んでたんだけどね(笑)

●12月16日
 MQ会では今年最後のセッションになりました。キャンペーン第3回。
 今回の肝はNPCが二人出てきて、どちらもカンバセーションなどが作られていないDMが操るNPCなんですが、それをDMがうまく動かせるかという部分。練習キャンペーンと名づけてるくらいなので毎回DM(僕)的に「これはできるのかな?」というのを試してるのがメインの目的なんだけど、まあプレイヤーには関係ありません(笑)
 僕は動きのあるシュチュエーションというのが好きで、例えば今回はオークの隠れ家がそれにあたります。動きがあるってのはどういうことかというと、ダンジョンエリアがあってそこに敵がただ配置されているだけでなく、それなりにそのオークの隠れ家の生活に合わせて変化があるという意味です。とはいえPCには気を配らないといけないのでタイミングタイミングでアドリブ的に動かすだけですけどね。

 例えば、入り口の見張りは特定の時間で交代があります。当たり前っちゃ当たり前なんですがその動きが再現できるのがDMセッションの良い所だと思いますし、今回もやりました。交代のタイミングをうまくつけば潜入も楽になるかもしれないし、逆に交代の所為でピンチになる事もあるかもしれません。
 今回は、見張りを倒した後にPC同士の掛け合い会話が楽しくなっちゃってしばらく話をしているようだったので交代が出てきて、見張りが倒されていてしかも冒険者が目の前にいるわけですからすぐに中に戻って警告の声を上げる…という動きのつもりで動かしていたら、入り口ですれ違っちゃって大慌てになりました(笑)
 こういうのは楽しいですね。

 また、隠れ家を探索し終わったPCが一番奥でいろいろ話をしているわけですが、そこに出かけていたオークのボスとその手下が戻ってきてしまう…というパターン。オークのボスらしきものに遭遇してないというのが伏線です。まあ、敵を全部倒したのを安心してすぐに脱出しないPCを驚かせるというのが一番の目的なんですけどね(笑)
 「オークがただじっと隠れていられるのか?」というのが疑問として出てきて、たぶん無理だろうから息抜きに外に出たりするだろう…というところから思いついた展開です。

 こういう時間でうごく展開はあまりシビアにやりすぎるとPCに余裕がなくなりすぎて駄目ですね。やっぱり見張りを倒すとか隠れ家を探索し終えた時などはPC同士会話があっていいと思いますし、あまりシビアにやっちゃうとそういうのを制限しちゃうかな、と。だからある程度はDMがタイミングを見てあげる必要はあります。リアルに時間を計って、事が展開する時はその事を事前にPCに知らせるべきでしょう。
 今回は、単に、危険な場所や急ぐべき時にあまり緊張感を失って欲しくないなという気持ちもあってのイベントでした。そういうちょっとしたリアルさがあると、やっぱりゲームも楽しくなります。パターンやマンネリも多少減らせますし(笑)

 というわけで続きは来年になります。楽しみ〜。


戻る