--

--.--

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

スポンサー広告:  トラックバック(-)  コメント(-) 

    2009

05.28

Simple Companion Tutorial

本項は、CSでコンパニオンを作成する方法を述べるものです。NPCを作成し、二つの簡単な命令(追従と待機)を下せるようになります。またそのコンパニオンを拡張し、その他の機能を実装させることを可能にします。長ったらしいチュートリアルなので、長文を覚悟してください。

NPCの作成

NPCを作成するところから始めましょう。Construction SetのObject Windowを表示させ、左ペインのActorsからNPCを開きます。NPCリストが見えたら右ペインで右クリックし、Newを選択します。

本項ではコンパニオンにwikiComVeroniaというIDを与え、Veronia Lightbringerという名前にします。好きな名前を使用することができます。

他の作業を始める前に、コンパニオンが常にプレイヤーと同じレベルになるようにしたいですね。レベルが低すぎたり、逆に強すぎるのは望ましくありません。そこで、PC Level Offsetチェックボックスをオンにします。また、一度死んだらそれきりというのも困りますから、Essentialチェックボックスをオンにします。これでHealthが尽きたら意識を失い、しばらくすると目覚めるようになります。



その他の部分は好きなように変更してかまいません。コンパニオンにどのClassを与えても問題ありませんが、ここでどのように戦うかが決まります。私はKnightにしたいと思ったのでBledemasterにしました。これで比較的剣を使って戦うようになります。

ステータス、インベントリ、武器、スキルや顔の造りをカスタマイズしましょう。これらの機能をどう使ったらいいかわからない場合、以下をご覧になることをお勧めします。

http://cs.elderscrolls.com/constwiki/index.php/Basic_NPC_Creation_Tutorial[外部]



かわいいImperialのKnightを作りました。あなたも好きなように作ってかまいませんが、バグを回避するためにもplayableな種族に限った方がいいと思います。本チュートリアルを作成するにあたってDremoraコンパニオンを作ろうとしましたが、改変したDialogueを受け付けてくれませんでした。また、プレイヤーと同じ扱いを受け、同じようにアクセスできるよう、FactionリストからPlayerFactionを選んで加えた方がいいと思います。



さて、コンパニオンと会うため、ゲーム内Worldのどこかに作成したNPCを配置してみましょう。どこに配置するかは、コンパニオンにどんなストーリーを与えるかで変わってきますが、Imperial CityのMarket Districtに配置するのが手軽です。Cell View WindowのWorld SpaceリストからICMarketDistrictを選び、ICMarketDistrict01をダブルクリックします。マウスホイールを動かし、カメラを移動させていい場所を見つけましょう。

場所をみつけたらObject Windowに戻り、コンパニオンNPCをリストからRendering WindowにD&Dします。コンパニオンNPCが選択されている状態でFキーを押せば、コンパニオンNPCは地面に接地します。右ボタンを押したままドラッグすれば、その場所で回転します。



現時点でコンパニオン自体は完成ですが、完全ではありません。通常のNPCのように振る舞ってもらうため、必要な時に追従、待機がコントロールできるようにしなくてはいけません。

メニューバーからCharacter→Questsを選んでQuest Windowを開きます。

左側リストで右クリックし、Newを選択します。新規作成したクエストには、AAveroniaquestなどと好きなIDをつけます。このままではクエストジャーナルに表示されないので、クエストの名称を入れます。名称はIDと同じものにすることができます。AAveroniaquestではIDと同じ名称にしました。コンパニオンが他のクエストと干渉しては困るので、85、90、100などとPriorityを高く設定しましょう。デバッグしている間に問題が起きたら、この値を検討しなおす必要があるかもしれません。これで他のDialogueがコンパニオンやクエストと混ざり、コンパニオンの機能を引き継いでしまうことがなくなります。

どんなクエストの場合もそうですが、特定の条件を与えないと動作しない可能性があります。Quest WindowのQuest Dataタブ、下の方にあるQuest Conditionsリストの更に下にあるNewボタンをクリックし、GetIsPlayableRaceを探してValueを1にします。



Topicsタブに移動しましょう。初めに、全てのNPCが持つあるものをコンパニオンNPCにも与えなくてはいけません。トピック用のリストボックスでEditorIDカラムの下のあたりの空白を右クリックし、Add Topicを選択します。表示されたウィンドウをスクロールしていき、大文字でGREETINGと書かれたトピックを探して選択→OKを押してください。右側のリストボックス、Infoカラムの空白部分を右クリックしてNewを選択します。発言してほしいResponse文を入力します。私の場合は「My will is at your command.(仰せのままに。)」としています。必要ならEmotion(表情)も設定できます。音声を追加することもできますが、いい録音機材がないならやめておいた方がいいでしょう。Response文を入力し終わったら、右下のOKボタンを押します。

他の作業に入り前に、もう二つのResponseを作りましょう。もう一度トピック用のリストボックスで右クリックし、Add Topicを選択したら、今度はGREETINGではなく別のトピックを新規に作成するので、表示されたウィンドウのリストの中で更に右クリックし、Newを選択します。二つのトピックの片方をAAfollowという名前にし、OKを押します。もう一つはAAstayという名前にしましょう。

トピック用リストボックスの中でGREETINGトピックをクリックし、Infoカラムで先程作ったResponse文をクリックします。Response Details枠の中、Response文が表示されるボックスの右にAdd Topicsというリストボックスがあるので、ここ右クリックしてAdd Topicを選択し、AAfollowAAstayを追加しましょう。



これでコンパニオンNPCに追従と待機の命令項目を持たせることができましたが、これはまだ動作するわけではありません。ちょっとしたスクリプトと条件式を整えなくてはいけないのです。

まず、このクエストで使う変数を定義しましょう。変数は扱いづらいものですが、より多くの機能性を与え、すばらしい発展をもたらしてくれるものです。Quest Dataタブに戻りましょう。そこでScriptと書かれた行の右端にある「...」というボタンを押してください。

メニューバーからScript→Newで新規作成します。Script TypeのドロップダウンリストからQuestを選択してください。

さて、これからハードなスクリプティングをやりますけど、準備はいいですか? 今までで一番大変な作業です。

一息ついてから始めましょう。一行目にScriptName yourscriptname(任意のスクリプト名)と入力します。私の場合はScriptName AAveroniascriptにしました。Enterキーを二度押し、short variablename(任意の変数名)と入力します。私はshort veroniafollowとしました。こんな感じになると思います。
ScriptName AAveroniascript

short veroniafollow
終わりました…どうですか?このスクリプトが行っているのは変数の宣言です。私の場合、veroniafollowが変数です。変数名は好きな名前にすることができますが、大失敗するはめになるので変数名に数字を使おうとしてはいけません。
SaveボタンをクリックしてScript Editを閉じます。Quest Windowも一度閉じて開き直さなくてはいけません。右下のOKボタンを押して閉じ、もう一度Quest Windowを開きます。

AAveroniaquestが選択されていることを確認してください。Quest TabのScript行にあるドロップダウンリストから今作成したスクリプトを見つけて選択し、Topicsタブに移動しましょう。



条件を設定しましょう。Responseを作成する場合はいつでも、そのResponse文を発言して欲しいNPCを明確にしなくてはいけません。まずはGREETINGの条件設定から始めましょう。リストボックスのGREETINGをクリックし、該当するResponse文をクリックしてからResponse Details下半分のConditionsでNewボタンを押し、すぐ右のCondition FuntionドロップダウンリストからGetIsIDを選択します。一つ右のFunction Parameteresのボタンにはinvalidと表示されているはずですが、これのボタンを押し、表示されるリストからAAveroniaを選択してValueを1にします。AA~で始まるのでリストの上の方にあるはずです。



次に追従トピックに移動します。まずTopic Textを変更しましょう。ここで入力した文字がゲーム内での選択肢として表示されます。Follow Meのようなわかりやすい名前にしておきましょう。空白になっているリストの一番上のあたりで右クリックし、Newを選択します。コンパニオンが追従するようになった時に言わせたいResponse文を入力します。私の場合、「I will follow you to whatever end.」としました。Lord of the Ringフリークなんです。必要に応じて変えてください。終わったらOKを押します。



今回は、このResponse文を言い終わったら会話を終了させたいので、右側にあるGoodbyeチェックボックスをオンにしましょう。



コンパニオンNPCだけがこの選択肢を持てるように、GetIsID条件式も追加しておきます。

待機トピックでも同じようにします。今度は待機することになった時に言うResponse文を入れますが、私は「I will stand guard till death take me.」です。やはりGoodbyeチェックボックスをオンにしGetIsID条件式を追加します。

現時点で行うQuest Windowでの作業は終わりましたが、追従と待機のAIをプログラムする時にまたこのウィンドウを開くことになります。右下のOKボタンを押してQuest Windowを閉じましょう。

一息つきたいかもしれませんね。私もこのチュートリアルを書いていると頭痛がしてきます…。もうすぐ完成して、コンパニオンと友に戦ったり旅を共にすることができますよ。


コンパニオンNPCのNPC Windowを開きます。Object Window左ペイン、NPCリストを開いて、ダブルクリックします。左下にあるAIボタンを押します。



作業を始める前に、AI AttributesのEnergy Levelを設定してしまいましょう。走っている間にコンパニオンNPCが疲れてしまっては困るので、100に設定します。他の三つのAI AttributesはNPCに合わせて変更してください。



下半分には空白のリストがあるので、ここで右クリックし、Newを選択します。これでAI Packageを新規作成するウィンドウが表示されます。何か名前をつけましょう。私はAAveroniastayというIDにしました。

下半分のConditionタブを開きます。コンパニオンNPCにのみ適用するため、GetIsID条件式を追加します。変数はここで使うのが望ましいでしょう。待機を命じた時にだけコンパニオンに待機して欲しいので、新しい条件式を追加します。Condition FunctionでGetQuestVariableを選択し、右のボタン部分がINVALID, UNKNOWNなのでクリックして、表示されたウィンドウの上半分でクエストを選択します。今回はAAveroniaquestですね。下半分では前述のスクリプトで定義した変数(veroniafollow)を選択します。OKを押し、Valueは0のままにします。veroniafollowが0の場合、待機させているものとして使用します。



この作業を終えれば、最初のAI Packageは終了です。ですがクエストの部分にスクリプトを付加していないので、正確に動作させるにはまだ不十分です。OKをクリックして現在編集していたAI Packageのウィンドウを閉じましょう。

二つめのAI Packageを作成します。今度は追従用です。私はAAveroniafollowというIDにしました。

今度はコンパニオンがその機能を正確に行ってくれるようにするため、いくつかFlagsを設定する必要があります。まずはContinue if PC Nearにチェックを入れます。これでプレイヤーの近くにいる時はいつでも追従しつづけます。これをチェックしないと、コンパニオンがプレイヤーに近づいた時点でAI Packageが終了してしまい、ずっとその場に立ったままということになってしまいます。

次にAlways Runをチェックします。これで一緒に走ってくれるようになります。またAllow Swimmingをチェックすれば、水中を一緒に泳いでくれるようになります。同様にAllow Fallsをチェックすれば小さな岩棚や崖を一緒に飛び降りてくれます。最後に、Defensive Combatもチェックしましょう。

それから、Package TypeをFollowに変更します。何かをFollowする動作をして欲しいわけですから。つまり我々プレイヤーを、ですが。



Conditionタブで先程と同じようにGetIsIDを追加します。またGetQuestVariableも追加し、今度はValueを1にします。veroniafollowが1の場合に追従させるものとして使用するわけです。



Targetタブに移動しましょう。Any Objectのラジオボタンを選択し、Object IDをPlayerにします。



OKボタンを押し、二つめのAI Packageは完成です。AI PackageウィンドウのSaveボタンを押し、NPC WindowもOKで閉じます。

AIは完成しましたが、コンパニオンはいつ適切なAI Packageを実行すべきなのか知りません。ですから、Quest Windowを再び開き、Topicsタブに移動してください。

選択肢の表示をより簡潔にするため、AAfollowトピックのResponse文を選択し、条件式を追加します。コンパニオンが追従「していない」時だけ「Follow Me」トピックを表示してもらうため、ConditionsでNewボタンを押し、GetQuestVariableを選択します。クエストと変数を選択し、Valueを0に設定します。
待機トピックでも同様です。こちらはValueを1にします。これでStay Hereという命令は、コンパニオンNPCが追従「している」時だけ表示されるようになります。

追従トピックの条件式はこんな風になっているはずです。



それから、待機トピックの条件式はこうです。



これらは条件式でしかないので、変数を0から1、1から0へ必要な時に変更できるようにしなくてはいけません。

追従トピックに戻り、Result Scriptのテキストボックスを見てみましょう。ここに恐怖のスクリプトを書いていきます。

Result ScriptにStopWait yourfollowpackagename(AI Package名)と入力します。私の場合はStopWaiting AAveroniafollowです。これで以前追従Packageが停止させられていた場合、追従Packageを再開します。この一行がないと、コンパニオンNPCはどんな命令を出しても立ったままになってしまいます。次の行にset yourquestname.yourvariable to 1と入力します。私の場合はset AAveroniaquest.veroniafollow to 1です。こうすることでこの変数は「1」、つまり追従モードになります。現時点でResult Scriptにはこんな風に書かれているはずです。
StopWaiting AAveroniafollow
set AAveroniaquest.veroniafollow to 1
Compileボタンを押してエラーチェックをしましょう。なにか言われたら、タイプミスなんかがあるのかもしれません。クエストIDと変数スクリプトをチェックし、正確にタイプしてください。私と同じIDや変数名にしていた場合は大丈夫なはずです。

待機トピックを開いてください。Result Scriptに上記と同じようなコマンドを、今度はWaitにして記入します。最後の変数代入も0に書き換えます。これで追従Packageが停止します。コンパニオンNPCはその場で立ち止まり、変数は0、つまり待機モードになります。必要なら再びCompileボタンを押してエラーをチェックし、右下のOKを押します。



さて、これでコンパニオンは完成です。作成したespをアクティベートし、ゲームを起動してチェックしみましょう。コンパニオンはあなたが配置した場所にいるはずですから、Follow Meコマンドを出してみましょう。



コンパニオンはあなたと旅をする準備ができていて、本当のヒーローのようにあなたのそばで戦います。



本チュートリアルで作成するespが欲しい場合、http://tesnexus.com/downloads/file.php?id=16289[外部]からダウンロードできます。
CSで開いたり私の作ったものとあなたの作ったものを組み合わせてみたり、ご自由にどうぞ。

コンパニオンの調整

-コンパニオン絡みの問題として、Oblivion Gateを閉じると、中にコンパニオンが取り残されてしまうことがよく知られています。もしコンパニオンと「永久に」別れてしまいたくないなら、単純にゲートの外で待たせればよいだけの話です。あるいは戦いに同行させてもかまいませんが、Sigil Stoneを取る前にゲートの外に連れ出しておくのを忘れないようにすることです。もし複雑なスクリプティングの腕があるなら、自動的に外に連れ出してくれる発展機能を実装するとか、プレイヤーがどこにいてもコンパニオンを召喚できるスペルを作成するという手段もあります。

-二人以上のコンパニオンを作成しよう、あるいは他のMODと共にコンパニオンMODを使おうと考えているなら、一度に追従させることができるのは三人までだということを憶えておいてください。これはOblivionのゲームエンジン面での制約なので、変更しようがありません。MartinをCloud Ruler Templeに連れて行くなどといったNPCを先導するクエストを進める場合、特定の場所でコンパニオンを待たせてあとから迎えに行くことです。

-もっともリクエストが多いものといえば、当然、NPCのインベントリにアクセスしアイテムのやりとりをする機能です。そのためにhttp://tesnexus.com/downloads/file.php?id=2964[外部]をダウンロードするといいかもしれません。このMODには、あらゆるNPCに対してDialogueの選択肢にResult Scriptを付加する、という必要なスクリプト付加を行います。このMODはコンパニオンに新しくいい装備を買ってあげる時にも有用です。このMODを使わないとしても組み込めそうなら、自力でインベントリを共有するシステムを作ってみましょう。

-コンパニオンが出来ないことのひとつとして、自分のアイテムを修理できず、戦闘能力が落ちる、あるいは戦うことができなくなってしまうという制約があります。ですが、解決方法が三つあります。一つはEasy Companion Shareを使い、あなた自身が修理してあげる方法です。もう一つはコンパニオンのために修理スクリプトを組むこと、最後の一つは武具のHealthが9999999に設定されているカスタム武具を作成し、コンパニオンのArmorerを1000に設定することです。壊れない武具についてのやりとりはhttp://cs.elderscrolls.com/constwiki/index.php/How_do_I_create_armor_or_weapons_that_cannot_be_destroyed[外部]をどうぞ。

-プレイヤーが旅をする速度にコンパニオンがついて来られないことに気づいたら、ステータスのSpeedをとても高く設定することです。また高度なスクリプティング技術があれば、あまりに遠く離れてしまった時に自動的に近くにテレポートしてくる機能を追加することもできます。プレイヤーがスニークしているときはスニークし、プレイヤーが馬に乗っている時は馬に乗るようスクリプトを組むというのもいいかもしれません。プレイヤーと同じ動作をさせることについては、NPCs,_Horses,_and_you...[外部]をどうぞ。

-コンパニオンが行方不明になったり、どこにいるかわからなくなってしまう場合、コンパニオンにクエストマーカーを付加することで、コンパニオンがどこにいるのか知ることができるようになります。つまり、コンパニオン用のクエストを修正してクエストジャーナルに表示されるようにしなくてはいけません。
原文:http://cs.elderscrolls.com/constwiki/index.php/Simple_Companion_Tutorial 09-05-28

Tutorials:  トラックバック(-)  コメント(-) 

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。