| ||
ダウンロードここでは、『ネヴァーウィンター・ナイツ 日本語版』に関連したファイルのダウンロードサービスを行っています。 |
|
|
|
|
この地に迷い込んだら最期、二度と生きて帰ることはできない…。 いや、死を迎えさえしても抜け出すことのできぬ、呪われた土地…。
このシナリオは、呪われた土地に迷い込んでしまった冒険者の一行が、その地を支配する呪いを打ち破り、脱出するまでの冒険を描く物語です。 残念なことに、呪いの起源は知られていません。 魔城の主であるヴァンパイアの呪いであるとも、その城に棲む魔女であるとも、あるいは、街道にたたずむ吟遊詩人が起源であるとも言われています。 いずれにせよ、彼らをこの呪われた地から解き放つことができるかどうかは、あなたたちの行動にかかっているのです…。 このシナリオは、TRPGイベント「AMC2003」にて使用した、シナリオ原案/協力 AMC2003実行委員会、制作 セガ による、CRPG(コンピュータ・RPG)とTRPG(テーブルトーク・RPG)のコラボレーション・モジュールをオンライン・セッション用に調整したものです。
「AMC2003」では、5台のコンピュータをLANで接続することで、お互いの顔の見えるマルチプレイセッションを実現しました。
今回はこのシナリオを、テーブルトークDM無しでもプレイできるように調整いたしましたので、当日参加できなかった皆様にも、ダウンロードして楽しんでいただければ幸いです。 ・TRPGイベント「AMC2003」で使用したデータを若干調整しています。 |
|
ご注意
|
|
ダウンロード & 使用方法
|
ダウンロード
| |||
|
※バージョン1.29で作成したモジュールです
|
|
■自作のシナリオ(モジュール)にエフェクトを追加してみよう!
「夢魔の城塞」や『ネヴァーウィンター・ナイツ 日本語版』本編のシナリオ内では、様々なエフェクト(映像的演出)がゲーム展開を彩っています。 シナリオの面白さは派手な演出に比例するものではありませんが、その場所の雰囲気を演出したり、モンスターの強さを表現したり、プレイヤーを驚かせたり、プレイヤーの気を引いたり、といったことに上手く使うことで、ゲームに臨場感を与えゲームの進行を円滑なものにすることができます。 ここでは「夢魔の城塞」で使われているスクリプトをサンプルとして、エフェクトの追加方法を解説します。 ※基本的な「オーロラ・ツールセット」の使用方法について、ここでは特に触れません。 あまり「オーロラ・ツールセット」を使ったことのない方は、当ページを読み進む前に、取扱説明書186ページ「第4章 冒険世界の自作と管理」、「ツールセット 入門編」、「ツールセット チュートリアル」をご覧いただき「オーロラ・ツールセット」の使い方をご確認ください。※「スクリプト・エディタ」については、【ツールセット チュートリアル】チュートリアル 9:スクリプト「スクリプト・エディタの使い方」をご参照ください。 |
|
■NWスクリプト言語を使ってエフェクトを加える
エフェクトを加える方法はいくつかありますが、今回は「スクリプト・エディタ」を用い、スクリプトの"ApplyEffectToObject"関数を利用して、ゲーム中に発生する様々なイベントの際にエフェクトを発生させる方法をご紹介します。 スクリプトを使った経験が無い方は、「スクリプトは難しそうだなあ」と思うかもしれませんが、シンプルな演出に使う場合は、スクリプトも簡単な記述だけで済みますから、この「自作のシナリオ(モジュール)にエフェクトを追加してみよう!」からスクリプトを始めてみてはいかがでしょうか? それでは、オーロラ・ツールセットを立ち上げ、メニュー「ツール」より「スクリプト・エディタ」を選択しましょう。
フィルタ欄に「Apply」と入力すると ApplyEffectAtLocation ApplyEffectToObject の2つの関数が表示されます。 "ApplyEffectAtLocation"関数は、場所に対してエフェクトを発生させる関数です。 "ApplyEffectToObject"関数は、オブジェクト(クリーチャーやアイテムなど)に対してエフェクトを発生させます。 今回は"ApplyEffectToObject"関数を使用します。 |
|
■関数の使い方(仕様)を確認する
内容一覧に表示されている「ApplyEffectToObject」をクリックしてみてください。 ヘルプウィンドウに以下のように"ApplyEffectToObject"関数の使い方(仕様)が表示されます。 (これを関数の「プロトタイプ」と呼びます) // Apply eEffect to oTarget. void ApplyEffectToObject(int nDurationType, effect eEffect, object oTarget, float fDuration=0.0f) "ApplyEffectToObject"関数は4つのパラメータを必要とする関数であることがわかります。 第1パラメータ: int nDurationTypeエフェクトの持続時間を指定します。このパラメータには定数を指定することができます。 フィルタ欄に「Duration」と入力し、[定数]ボタンをクリックするとフィルタ内容一覧に「DURATION_TYPE_INSTANT」、「DURATION_TYPE_PERMANENT」、「DURATION_TYPE_TEMPORARY」という定数が表示されます。 それぞれの定数は、「瞬間的」、「永続的」、「指定時間(第4パラメータfloat fDurationに指定した時間)」、のようにエフェクトの持続時間を示しています。 第2パラメータ: effect eEffectエフェクトの種類を指定します。 エフェクトの種類の指定方法はいろいろありますが、今回は"EffectVisualEffect"関数を使い「VFX_...」定数を指定する方法を使います。 第3パラメータ: object oTargetエフェクトを適用するオブジェクトを指定します。 第4パラメータ: float fDuration第1パラメータに「DURATION_TYPE_TEMPORARY」を指定した場合に、エフェクトの継続時間を指定します。 「float fDuration=0.0f」というのは「このパラメータは省略することができ、省略した場合は「0」が適用される」ということを意味しています。 |
|
■「スクリプト・エディタ」で実際に書いてみよう
実際にスクリプトの中に書き込むときは、以下のように記述し、文の終わりに「;」を付加します。
void main()
{
ApplyEffectToObject(DURATION_TYPE_INSTANT,
EffectVisualEffect(VFX_IMP_LIGHTNING_M),
OBJECT_SELF);
}
この例では、エフェクト持続時間を「瞬間」、エフェクトの種類を"EffectVisualEffect"関数に定数「VFX_IMP_LIGHTNING_M」を与えたものを指定、エフェクトの対象をこのスクリプトが設定されたオブジェクト自身、に設定しています。 (4つ目のパラメータは省略しています) このスクリプトが実行されると、「スクリプトを実行したオブジェクト」に対して「稲妻のエフェクト」が「瞬間的」に発生します。 |
■スクリプトを使ってみよう
それでは、このスクリプトに名前を付けて保存しましょう。 (「effect」と名前を付けておきます) 保存したら「エリア・ウィザード」を使用して適当なエリアを作成し、作成したエリアに「ゴブリン」を配置します。
配置した「ゴブリン」のプロパティより、「スクリプト」項を開き、OnDeath項目の[…]ボタンをクリックして、「effect」スクリプトを指定します。 「ゴブリン」のプロパティ・ウィンドウの[OK]ボタンをクリックして閉じ、モジュールの保存を行います。
『ネヴァーウィンター・ナイツ 日本語版』を起動し、[新規]より、先ほど保存したモジュールを選び、ゲームを始めます。 先ほど配置した「ゴブリン」を探し出し、倒してみましょう! 「ゴブリン」を倒すと、青白い稲妻が立ち上るエフェクトが発生します。 スクリプト内の定数「VFX_IMP_LIGHTNING_M」を他の「VFX_...」に変更すると「ゴブリン」を倒したときに発生させるエフェクトを変更することができます。 例えば、「VFX_FNF_FIREBALL」に変更すると、ファイアーボールが炸裂した時のような火炎爆発のエフェクトを発生させることができます。 このようにシンプルなエフェクトを追加するなら、たった一行のスクリプトを追加するだけで実現することができます。 |
|
■モジュール「夢魔の城塞」のスクリプトを覗いてみよう
オーロラ・ツールセットを起動し、「夢魔の城塞」を読み込みましょう。 :skeleton_death01 復活のスクリプト
まずは、シナリオの最初の方のシーンで登場する「何度倒しても復活するスケルトン」のスクリプトを見てみましょう。 スクリプトの「skeleton_death01」を右クリックして「編集」を選択します。 スクリプト・エディタが起動します。
#include "NW_I0_GENERIC"
void main()
{
object oabc = GetObjectByTag("abc01");
if(GetLocalInt(oabc, "skeleton_death") == 0)
{
location lNPC = GetLocation(OBJECT_SELF);
ApplyEffectToObject(DURATION_TYPE_INSTANT,
EffectVisualEffect(VFX_IMP_HARM),
OBJECT_SELF);
CreateObject(OBJECT_TYPE_CREATURE,"skeleton001",lNPC);
}
else
{
ApplyEffectToObject(DURATION_TYPE_INSTANT,
EffectVisualEffect(VFX_IMP_HEALING_X),
OBJECT_SELF);
}
}
クリーチャーが死ぬときは、『ネヴァーウィンター・ナイツ 日本語版』の基本スクリプトに従って死亡の処理が行われます。 この処理の直前に、エフェクトと共に同じクリーチャーを死んだ位置に出現させることで、あたかも復活したように見せています。
"if"条件式で、クリーチャーを作るか作らないかを決定します。
今回、"ApplyEffectToObject"関数には、持続時間は「DURATION_TYPE_INSTANT」で瞬間に、エフェクトの種類は「EffectVisualEffect」で視覚エフェクトに、発生させるエフェクトは「VFX_IMP_HARM」でハームに、エフェクトの対象は「OBJECT_SELF」で自分を指定しています。 また、同じ式で発生させるエフェクトを「VFX_IMP_HEALING_X」に書き換えて、"else"以降でヒールのエフェクトを使用しています。 クリーチャーを作り出す"CreateObject"関数には、「作り出すオブジェクトのタイプ」「作り出すもの」「作り出す場所」が必要です。 スケルトンを作るので「skeleton001」を、「GetLocation(OBJECT_SELF)」で死亡したオブジェクトと同じ位置を指定しています。 (注:"CreateObject"関数の第2パラメータで使うのはタグではなく、ブループリントResRefですのでご注意ください) :create_gargoyle 火ばちのスクリプト
次に、シナリオ中盤「夢魔の城塞」内に登場する「近づくと爆発してモンスターが出現する火ばち」のスクリプトを見てみましょう。 スクリプトの「create_gargoyle」を右クリックして「編集」を選択します。 スクリプト・エディタが起動します。
void CreateGargoyle(object oPC)
{
object oGargoyle = CreateObject(OBJECT_TYPE_CREATURE,
"nw_fire",
GetLocation(OBJECT_SELF));
DelayCommand(0.1, AssignCommand(oGargoyle, ActionAttack(oPC)));
}
void main()
{
object oCreature = GetNearestCreature(CREATURE_TYPE_PLAYER_CHAR,
PLAYER_CHAR_IS_PC);
if (GetIsObjectValid(oCreature) == TRUE
&& GetDistanceToObject(oCreature) < 7.0)
{
DelayCommand(0.1, CreateGargoyle(oCreature));
effect eDam = EffectDamage(500);
SetPlotFlag(OBJECT_SELF, FALSE);
ApplyEffectToObject(DURATION_TYPE_INSTANT,
EffectVisualEffect(VFX_FNF_FIREBALL),
OBJECT_SELF);
ApplyEffectToObject(DURATION_TYPE_INSTANT,
eDam, OBJECT_SELF);
}
}
このスクリプトでは、1行目からの"void CreateGargoyle() { ... }"でクリーチャーを出現させる"CreateGargoyle"関数を定義して、"main"関数("void main()"以降)から呼び出しています。
"CreateGargoyle"関数は、元々、『ネヴァーウィンター・ナイツ 日本語版』本編で使用されていた、ガーゴイルを作り出してプレイヤーに攻撃させるという関数です。
"main"関数では、"GetNearestCreature"関数と、"if"の条件式でプレイヤーが7メートル以内にいるかを判定し、"CreateGargoyle"関数を実行した(ファイアーエレメンタルを出現させた)後で、オブジェクトの破壊を行うスクリプトです。 この中に先程作成した"ApplyEffectToObject"関数の記述をコピーして、エフェクトの種類を「EffectVisualEffect(VFX_FNF_FIREBALL)」に書き換えることで、火ばちにファイアーボールのエフェクトを発生させ、火ばちが爆発したように見せています。 |
|
■おわりに
スクリプトを使用したエフェクトの追加方法は、いかがでしたでしょうか。 エフェクトの追加はゲームの面白さの本質を決定するものではありませんが、その場の雰囲気などゲームに彩りを加える重要な要素の1つです。 このコラム「自作のシナリオ(モジュール)にエフェクトを追加してみよう!」が、皆様のモジュール制作のご参考になれば幸いです。 |
|
|