Oblivion攻略ブログ 独善的仕置人

シロディール世直しの旅 - Oblivionの悪党仕置プレイ日記と攻略、CS、Modに関する記事を書いております -

CSスクリプト自作方法 Part1 (摘要編)

CSを使えばアイテムやNPCのステータス変更などのオブジェクト操作を行うことができ、自由に配置することもできます。また、AIパッケージで自由に動き回らせることもできます。これだけでも十分楽しいのですが、もう一歩進んでスクリプトを使えば独特な効果を得ることが可能です。

今回は数パートの記事に分けてスクリプトを使い方を説明します。ただ、私は未だスクリプト初心者ですので、今からOblivionのスクリプトを始めようとされる方の初めの一助になる範囲での記事となります。

また、1つのことを実行させる為に書くスクリプトは各人様々です。私が提示するものより、よりスマートな書式や理解方法も多々あると思います。私としては作動すればそれでOKという、アバウトな考え方で進めてまいりますので、参考としてご利用ください。よろしくお願いします。

スクリプトを始めるに当たって、ぜひ手許に置いておきたいのがCSのヘルプです。wikiで日本語化されたものが紹介されています。このページの最下部に日本語ヘルプファイルへのリンクがあります。


概念

CSにおけるスクリプトとは、ゲーム内の事象を操作するための命令文の集合体と言えるかもしれません。スクリプトにはさまざまな条件文や命令文が並んでいます。こういったものが集まって、「ある時はA」、「あるときはB」などというように事象を操作することができるのです。

・・・?

こんな難しい書き方をすれば余計に判りにくいかもしれませんので、大雑把に考えます。

重要なのは、

・いつ
・どういう条件で
・何をするのか

ということになります。

この中で最も重要なのは「何をするのか」という部分です。それはOblivionに備わっていない機能を動かすことはできませんし、事象を発生させる核になる部分だからです。よって、実現したいアイデアがある場合は、それがOblivionで可能なことであるかどうかを先に考えた方がやりやすいと思います。

この記事では具体的な操作方法に触れず、どういうものなのかを説明しています。


1.何をするのか? (functionとAIパッケージ)

スクリプトを使う時にまず初めに覚えたいのがfunctionとAIパッケージです。この2つを使って、事象を発生させたり、NPCを動かしたりできるようになります。

functionとはゲーム内で起こる様々な事象を実際に実行させたり、現在どういう状態なのかを取得したりするのに使います。下の図はCSヘルプのfunction一覧画面です。たくさんのコマンドが用意されています。主に直接的に事象を操作するのに使います。

functionに備わっている機能は直接的に事象を発生させるコマンドがほとんどです。これを全部覚えるのはほとんど不可能ですし、ヒマな時に眺めて、「今度はこういうことをやってみよう」と思ってメモしておくと後々便利だと思います。





一方、AIパッケージの方はNPCやCreatureに一定の行動を起こさせる為に使います。例えば、食事、睡眠、移動、追従など一通りの動作が用意されています。下の図はCSヘルプ内のAIパッケージ一覧です。それぞれの項目をクリックすると、詳しい設定方法が表示されます。




※当ブログ内のAIパッケージ記事もよろしければ参考にお使いください

 → AIパッケージ編集画面
 → Follow AIパッケージ
 → Wander AIパッケージ
 → Sleep AIパッケージ
 → Use Item At AIパッケージ


2.どういう条件で (変数とその設定と変更)

例えば、AIパッケージで作動条件を指定する場合、主に日時で指定します。「何曜日の何時から何時間、どこそこへ向かう」といった設定がこれに相当します。こういった条件を新たに作るのが変数です。変数は一部を除いてユーザーが独自で用意します。ここからスクリプト記述が始まります。


α.変数を作る

まず、GameplayメニューからEdit Scriptsを選択し、スクリプト編集ウインドウを表示させます。次に、編集画面でScript>Newを選択すると、文字を打ち込めるようになります。(下図を参考にしてください)










上図のようにまずスクリプト名を記述します。そして、変数を宣言します。最後にスクリプトを添付する対象を指定します。(具体的な使い方は別項にて。まずはこういう仕組みのものだということを書いております)

<構文>
スクリプト名構文
→ scn スクリプト名

変数の宣言構文 (short以外の宣言もあります)
→ short 変数名

添付対象
→ プルダウンメニューから選択

ここまで済んだら、セーブします。セーブされたスクリプトはオブジェクトやNPC、クエストなどのスクリプト設定用のプルダウンメニューに表示されるようになるので、そこで指定します。

<ポイント>
スクリプトを用意したら、それをなんらかのオブジェクトやクエストに添付しなければゲームでは有効になりません。オブジェクトに設定した場合は、そのオブジェクトがプレイヤーの近くにいるときに作動し、クエストに添付した場合はそのクエストが有効な時に作動します。

例えば、コンパニオンにある行動をさせたり、アイテムが特殊な効果を持つためのスクリプトなら、そのオブジェクト自体に添付し、一方、常に作動させたいなら、自作クエストを用意して発生優先度を最大値にし、そのクエストに添付するとおいう考え方でほとんど問題ないでしょう。


β.変数の値をを変化させる

この項目のテーマである「どういう条件で」を切り分けるには、今作った変数の値を変化させます。スイッチの切替回路のようなものです。

<変数の値を変更する構文>
→ set 変数名 to 値
→例 : set SampleParameter01 to 1

所定の位置にこのように書くと、SampleParameter01という変数が「1」に変更されます。

次にどういう状況でスイッチが作動するのかを書きます。考えられることは様々です。会話で発生させたり、アイテムを装備した時に発生させたり、色々な状況で指定できます。スクリプト内で変更させることもできます。

例えば、会話で発生させるなら、Questウインドウの中のTopicタブにあるResult Script欄を使用できます。下の図の場合、新しいSampleTopicという会話を用意して、会話終了後に変数の値を変更するようにしています。




<ポイント>
クエストウインドウのTopic内で変更させるには、その変数が存在するスクリプトが添付されているオブジェクト名も書かなければいけません。

例えば、さきほど作ったSampleScriptがSampleNPCというIDのNPCに添付されている場合の構文は上記参考画像のようになります。
→ set スクリプト添付物のID.変数名 to 値
→ 例 : set SampleNPC.SampleParameter01 to 1


3.いつ (BeginとIfとCondition)

α.beginとendブロック

Beginはいつそのスクリプトが実行されるのかを指定します。これはスクリプトの中に書きます。

--参考スクリプト--
scn SampleScript
short SampleParameter01

begin GameMode
 set SampleParameter01 to 1
end
---------------

beginはendと1セットで使われ、beginの隣に書かれている条件(この場合なら「GameMode」)の時にブロック内の命令を実行します。今回のGameModeの意味はゲームの最中ずっと実行という意味です。そのため、この例文の場合なら、ゲーム中ずっと、SampleParameter01という変数内に「1」の値が入り続けます。普通はこういう使い方はしません。

では、このスクリプトがある装備に添付されているとして、装備をした時に変数の値を変更するならこうなります。

--参考スクリプト--
scn SampleScript
short SampleParameter01

begin OnEquip
 set SampleParameter01 to 1
end
---------------

このように、スクリプトが実行される条件を指定するのがbegin-endブロックです。

β.If文

スクリプトがどういう条件で実行されるのかを規定するのがbegin endブロックなら、さらに細かい条件を指定するのがIf文です。If文は「If」と「endif」をセットで用います。また、「If」で指定した条件以外の時はという意味で「else」を用います。さらに、他の条件ではという意味で「elseif」を使います。

--参考スクリプト--
scn SampleScript
short SampleParameter01

begin GameMode

if(player.GetActorValue Health<10)
set SampleParameter01 to 1

elseif(player.GetActorValue Health>100)
set SampleParameter01 to 2

else
set SampleParameter01 to 0

endif

end
---------------

上記が意味するのは、

・ゲーム中に → Begin Gamemode
・体力が10より小さい時は → if(player.GetActorValue Health<10)
・変数を1にして → set SampleParameter01 to 1
・100より大きい時は → if(player.GetActorValue Health>100)
・変数を2にして → set SampleParameter01 to 2
・それ以外なら → else
・変数を0にしなさい → set SampleParameter01 to 0

ということになります。

もちろん、変数操作ではなく、直接的な結果を書くこともできます。


--参考スクリプト--
scn SampleScript
begin GameMode
if(player.GetActorValue Health<10)
player,AddItem PotionSkooma, 1
endif
end
---------------

この場合なら、プレイヤーの体力が10より小さいならスクーマをプレイヤーのインベントリーに追加しなさいということになります。この場合ならBegin GameMode指定なので、10より小さいうちは延々と追加され続けますが・・・。

ここまでが、beginとifの使い方です。


γ.condition

QuestウィンドウのTopicやAIパッケージにはConditionタブというものがあります。これはその会話文やAIがどういう条件の時に作動するかを決定するものです。ここでもう一度変数の出番になります。

いままで、変数を設定したり、値を変更させる装置をチマチマと作ってまいりました。その値をAIパッケージや会話文のconditionタブに指定して、変数が一定の値である時という条件で、話題を発生させたり、AIを作動させたりできるようになります。




手順としては、

・Newをクリック (※1)
・GetScriptVariable (※2/Variable=変数の意)
・オブジェクト名と変数名と指定 (※3)
・式を設定 (※4)
・値を設定 (※5)

ここまでの作業で一定条件により、AIや会話文が作動するようになります。


概念図



具体的な方法については次回以降にサンプル付きで説明して参ります。
[ 2008/05/04 ] | CS (Construction Set) | CM(0) | TB(0)
コメント
この記事へのコメント
コメントを投稿する
URL:
Comment:
Pass:
秘密: 管理者にだけ表示を許可する
 
トラックバック
この記事のトラックバックURL
http://monarque.blog84.fc2.com/tb.php/160-ee8ed8c1
この記事にトラックバックする(FC2ブログユーザー)
この記事へのトラックバック
お知らせ

コンテンツ
目次から各記事をご覧いただけます。攻略と狩場についてはxbox360版共通です。

Julienne 更新情報
Ver 4.0をリリースしました。
Julienneについてはこちらです。

リンクについて
当ブログへのリンクは大歓迎です。

その他
なんでもお気軽にコメントどうぞ!

コンテンツ

総目次
→ 総目次 (167)

カテゴリ別目次
→ 妄想プレイ日記 (21)
→ 攻略 (16)
→ 寄り道 (2)
→ ハック&スラッシュレポート (39)
→ CS (Construction Set) (29)
→ Mod (55)
→ Oblivion 雑記 (5)

リンク集
→ Oblivion リンク集

拍手コメントへのお返事
→ お返事

※()内は記事数です。

このブログ内を検索

プロフィール

Author:pela
360版からPC版に移行して、悪党NPCの成敗とお気に入りNPC大軍団編成を目標に遊んでおります。
本当におバカな妄想ブログですが、どうぞよろしくお願いします。

Oblivionブログリンク

Darker than Darkness
lainさん執筆のプレイ日記。笑いあり、シリアスあり、CS解説ありの本当に充実したブログ。CSの説明は丁寧かつ親切で勉強になります。BABオヤジ殿が特にツボ。新キャラも登場して、さらに華やかに。


Romarjuの徒然なるOblivion日記
Romarjuさん執筆のお侍さん冒険物語。プロフィールのイラストと「オブリ短編劇場」の1発ネタもお気に入り。気の強いお嬢様と気の弱いニコフ隊長の掛け合いにニヤリ。


異国情緒
junaさん執筆のプレイ日記。重装騎士殿とかわいいコンパニオンの冒険はいつも楽しい雰囲気です。 高解像度のSSは美しく、好タイミングのベストショット多数。重装騎士殿のChillrendが唸ります。さらに、美人剣士コンパニオン登場!

フジョシプレイOBLIVION
Miariさん執筆のOblivion総合ブログ。オジサマ達の愉快な日記からMartin殿下とのスゥイ〜トな物語まで楽しい記事満載。最近はBABオヤジ殿も出演したりして、笑いがとまりません。その他mod紹介など膨大な記事が参考になります。

黒色アルゴニアンメイジ
Shukaさん執筆のプレイ日記。主人公の暗殺魔術師殿がメインクエストに沿って大冒険。まだら馬とのコンビが似合ってます。Morrowindの日記も執筆されているので旧作ファンも必見!

スポンサードリンク

since 2008 1/30

  Unique Visits 
  Page Views