Oblivion/Mod

2008年1月17日 (木)

11) 具体例に入る前に

一応前書きと言う事で  ひとまず終了

Begin~end を理解すれば・・・ と書いておきながら、補足なんかを挟み、再び前置き・・・。
さっさと進めろと言う話が出そうですが、とりあえずお付き合いを。

 

日本語で文章を書く時にも状況や主体によって書き方が変わりますよね。
自分の話なのか、相手からの視点なのか、第三者からの視点なのかでも変化する。
(自分の話なら主語を省略したりしますしね)

 

Scriptにおいても実行したい事柄に対して

何を主体にして動作を記述するか

で組み方が変わってくると思います。

 

例えば、何かを使うと言うコマンドにActivateというのがあります。
(厳密に言うと“使う”と言う表現は間違いか)

 Activate player と書くと プレーヤーActivateされる

と言った意味合いになります。

この構文の場合、書かれたScriptが何に関連付けられてるかによって挙動が決定します。

  “NPC”    なら     “プレーヤーとの会話が発生する”
  “入れ物”    なら     “出し入れメニューを開く”
  “扉”    なら     “扉を開く”もしくは
    “指定された移動先にプレーヤーを送り込む”
  “本や巻物”    なら     “プレーヤーに記述されてる文章を表示する”
  “武器など拾えるもの”    なら     “プレーヤーの持ち物に追加(移動)される”

 

同様のことを別の視点から実行させる事も可能です。

例えば“フォークに刺さった物”にScriptを関連付ける事無く、
“フォークに刺さった物”をプレーヤーへ追加(移動)されるようにする場合、

  1. フォークに物が刺さった時、その物体が何であるかを取得し、
     set Actionref to GetActionref
         Actionref は接触したObjectを格納する変数
         GetActionref は 何が使われてるのかを知るコマンド
     
  2. プレーヤーの持ち物へ移動を命令。
     Actionref.Activate player

と言う感じのScriptを作成して“フォーク”に関連付ける事で動作すると思います。
(実際にはフォークの方に何かが刺さった事を認識させる細工が必要だったんですけどね。)

ここで、Actionref と Activate の間に .(半角ピリオド) が挿入されている事に注目。
このような記述をする事で、何かプレーヤー何かをされる と言う形式で記述できます。
(例では player としていますが、別のObjectに変えてもOKです。)

追記。
上記のフォーク用Scriptでも刺した物体の種類によっては物の移動では無く会話や入れ物の中身を見せると言う動作がされますので、その辺りは除外処理をする必要があります。

また、Activateによる物の移動物理的な距離に影響されません
よって特定の物を別の場所へ移動させる手段にも使えます。
(HTSCのv1.1.0で追加したスプーンによる道具召喚でやってます)

 

このように何処を主体にして記述するかでScriptの作り方が変わったりします。

ここから先に出てくる話は、基本的に自分が使ってみた例が多くなると思いますので、
同じ事をやっても上手くいかないとか、もっと効率の良い方法ってのがあると思います。

中途半端な状態ですが、ひとまず筆を置く事にします・・・。

この後はCSHelpとにらめっこする事で何とかなるかな。

基本的にはScript1枚はScriptNameで個別の名前をつけられていて、
その後に使用する変数を適宜宣言し、
Begin~endのブロックを作成して内部に必要な処理を記述していくと。

Begin の種類はCSHelpに載ってますし、OBSEを有効にしてCSでの作業をしているならPrintToConsole のコマンドを使ってどういう時にそのBeginが有効なのかを確認できます。

使用できるコマンド一覧もCSHelpに記載されていますし、CSWikiを頑張って読めばOBSEのコマンドを含め詳細に記載されていますし、補足情報や例題が載っている事もあります。

コマンド類に関しても、人が定義してる物ですから名前に法則性があるので、それさえ把握すれば適当に眺めていくだけでも自分のやりたい事を実現できるコマンドが見つかる事も。
(Get~とか、Is~とか、Set~とか、Mod~とか)

アホが暴れていらない宣言まで出してるが、2ch内部でScript検討(と言うかModお披露目前の相談)に使ってたスレや、外部に作成されてるOblivion板の方では先人の試したScriptの事例などが載ってるので、一読すれば勉強になる内容もあるかと。

ちと続行する気力が萎えた。
放り出してるMod修正の方に戻る事にしますわ。

| | コメント (0) | トラックバック (0)

2008年1月15日 (火)

10)Scriptを作ろう(補足

◎やっちゃいけない事

07) Scriptを作ろう で“他のScriptを参考にして~”てな事を書きましたが、
大事な事を書き忘れてた・・・。orz

ObjectWindowで列挙されてるObject達はEditorIDを変更すると確認窓が出ます。

前とIDが違ってるけど、新しい物として登録する?

って奴ね。

Yes と応えれば同じ情報を持つけどGame世界に未参加のコピー品を作る事が出来ます。

が・・・

Scriptで同じような事やっちゃ駄目!!
     以前にやって大失敗したんだよぅ。orz

 

  1. スイッチのObjectはボタンを使用された時に見かけを変化させる処理が仕込まれます。
    んで、それを流用しようと思いスイッチのObjectを複製
     
  2. 複製品にも既にScriptが関連付けられてるのでスイッチObjectのEdit画面を開き、
    Script欄の右側にある“…”ボタンを押してScriptEditorを開く
     
  3. 出てきたScriptをお気に入りのエディターへコピーして色分け表示にしつつ、
    その処理内容を解析。
     
  4. Scriptの固有名詞である scn (もしくは ScriptName )の部分を
    別の名称に変更し、処理の部分も必要な内容に変更
     
  5. CSに戻って編集したScriptをScriptEditorに貼り付けてSaveし、
    エラーがなければEditor終了。
     
  6. スイッチのEdit画面でOKを押して閉じる。
     
  7. CSツールバーのFDアイコンを押してModセーブ
    (CS窓の上部にでてるMod名の所が[Mod名]*から[Mod名]になる)

と言う事をやった結果、
 コピー元のスイッチに関連付けられてたScriptまで変更したScriptに
変わってました。orz

 

この原因は5の部分。

2の部分で元のScriptを編集中って状態にし、そのまま名前の違うScriptを貼った為に本来のScriptを上書きしてしまったらしい。
(名前が違ってようが上書きセーブ判定なので元のスイッチ側も新しいScriptに変化)

7の段階でもObjectWidow側の表示は元のScriptに関連されてるように見えたんだけどねぇ。
一度OnjectのEdit画面を開いてみるとScript名が変わってた・・・。

と言う事で、新しいScriptを仕込む場合は
 ScriptEditorで必ずNewから空のScript画面を開き、
 そこに新規Scriptを貼り付けて保存。
 その後でスイッチの方のScript欄で新しいScriptを選んで関連付け

と言うふうに気をつけてます。orz

 

10)から具体的な処理内容の話を出来ると思ってたのになぁ。(つД`)

| | コメント (0) | トラックバック (0)

2008年1月14日 (月)

09) Scriptを動かす(その2)

◎Scriptが動くタイミング

前回の記事でScriptをゲーム内に参加させ効果を発揮する準備を整える方法を書きました。
さて、これでScriptが動くでしょうか?

動く事もあれば動かない事もあります。

と言うのも、Scriptにはそれぞれ動作できる条件と言う物があるためです。

 

Scriptは基本的に
   PlayerがScriptの関連付けられたObjectの傍に居る時
しか動作できません。

(詳細はCSHelpの“Script Processing”を参照のこと)

 

Questに関連付けたScript(以降はQuestScriptと記述)の事を“神の視点から動作する”と書きましたが、QuestScriptだけは「そのQuestが実行中であれば常に処理が実行されている」と言う意味です。Playerが何処に居ようが関係ありません。

QuestScriptはQuestの設定次第ですが、ゲームを始めた時に自動で開始する事が可能であり、完了したクエストの印が付いても処理が継続される事が特徴です。
完全停止させるにはStopQuestコマンドによって明示的に動作を停止する必要あり

CSHelpの方でも完了したクエストはコマンドで停止し、続きが必要なら2つ目のクエストを作成して引き継がせるべきって推奨してますね。

またQuestScriptは標準では5秒間に1度だけ処理が実行されるとの事。

fQuestDelayTimeの値を変更する事で処理頻度を変更する事が可能。
但し、常に動作するScriptなので扱いには非常に注意する事。
  CSHelpには
    安易にQuestScriptを使うより処理方法を見直せ
  
との強い警告が…
むやみな処理頻度増加はゲームのパフォーマンスに著しい影響を与える。

と言った注意書きが書いてあります。

 

Playerが周囲に居なくても動作するScriptとしてActorsカテゴリのObject(NPCやCreature)に関連付けたScriptがあります。
こちらはPayerが傍にいない時はゲーム内時間の15分に1度だけ処理が実行されるようです。
 

これら以外の場合、動作する条件を満たしたScriptは毎フレーム(FPSの事だと思う)処理されるチャンスがあるようです。
 

先ほどから「傍に居ない」との表現を使っていますが、標準の環境では“LoadingArea”と言うのが時々表示されると思いますが、この読み込んだ空間(Cellと言う表現と同じ意味だと思う)の事だと思います。

その為、Playerの視界に入っていなくてもScriptが実行される可能性があるため、処理の内容によってはPlayerとの距離を算出し、一定範囲以内では動作しないと言った細工をした方がパフォーマンス低下を防げると思います。

 

以上、簡単ではありますがScriptが動くにはどういう準備が必要かってのを書いてみました。

後は実行するチャンスを得たScriptがどのタイミングで動くのかを決める
  “Begin~endブロックの使い方”
を理解すれば良いかと思います。

| | コメント (0) | トラックバック (0)

08) Scriptを動かす(その1)

◎動かす準備

Scriptを作成しCSのScriptEditorで保存。エラーも無く保存完了!
これで自分の考えたScriptが動作してくれるはず~~~。

と、期待する事も有ったかもしれませんが、これではScriptは動きません。orz

新しい武具や魔法を作った時、Objectとして登録しただけではGame内に反映されないのと同じように、Scriptを何らかの方法でGame内に参加させてやる必要があります。

ObjectWindowに登録されている物のプロパティを開いて、その設定項目を眺めてみると分かると思いますが、幾つかのObjectにはScriptと言う欄があります。(Script欄が無いObjectも有り)

ScriptをGame内に参加させるには、

  1. ObjectのScript欄で目的のScriptを選択し、ObjectとScriptを関連付ける
  2. 1で関連付けたObjectをGame内へ参加(配置や販売など)。

と言う手順が必須になります。

 

ここで少しトリッキーなのがQuestObject
CSのメニューバーから 「Character」→「Quests」と選ぶ事で表示されるクエスト設定用の専用窓ですが、ここにもScript欄が存在します。

本来はメインクエストやギルドクエストなどを管理する為のObjectで、

  • QuestStageの管理によって設定された条件が満たされれば次の指示を与える。
  • クエストの進行に必要なターゲットを指定し、位置をMapに表示。
  • クエストに関する会話内容や発言者を登録。

と、これ自体で1つのプログラム的な動作を実行できるのですが、ここにも独自のScriptを関連付ける事が出来ます。

このQuestに関連付けられるScriptは少し特殊で、
神の視点からScriptが動作する唯一のObjectといって良いかもしれません。
(Script利用Modの多くで動作開始の切っ掛けにQuestが使用されたりしている)
(透明なObjectをPlayerに随伴させるって方法で似たような事できるかも?)

但し、Questに関連付けられるScriptには、
 ScriptEditorでScriptTypeQuestとして保存されたScriptだけ
と言う条件があります。

 

次に、ぱっと見ただけでは分かりにくい物として魔法効果としてのScriptがあります。

ObjectWindowのツリーからMagicを選ぶと魔法関連の登録が色々有るのですが、
この中でScriptを関連付けられるのはPotionだけに見えるかもしれません。

しかし、ScriptEffectと言う物が存在します。
これは魔法の効果として直接Scriptでの処理を指定した物です。

CSで魔法を新規作成する時には、

  1. Enchantment・Potion・Spellのどれかで新しいEdiotIDとして魔法を登録。
  2. 登録した魔法のEffect欄で右クリックし、出現したメニューからNewを選ぶ
  3. EffectItemという窓がでるので、そこで目的のEffectを選択し、性能を設定。

という流れになりますが、この3の部分でScriptEffectを選択するとOK。
(新規作成でなく変更でもOK。その場合は1を飛ばし、2でEffect追加するかEditで)

但し、ScriptEffectに関連付けられるScriptには、
 ScriptEditorでScriptTypeMagicEffectとして保存されたScriptだけ
と言う条件があります。

こちらもある意味では物体を伴わないScript動作方法です。
動作モードも少し特殊な物が使用でき、一時的な動作をさせるのに便利。 

 

だいぶ当初の目的に近い内容になってきたか。orz

| | コメント (0) | トラックバック (0)

2008年1月13日 (日)

07) Scriptを作ろう

◎何から始める?

CS Help を見ると Script → Sript Tutorial と言う項目がちゃんと用意されています。
そこの“My First Script”“My Second Script”をじっくり読んで貰うと・・・。

と言いたいのですが、言われるまま作業をして「はい理解できましたね」ってのはなかなか無いですよねぇ。(自分もあの形式のチュートリアルは嫌いw)

  でも、必要な事は一通り書いてあるので一度は読む事をお勧めします。

幸いな事にOblivionのModは暗号化されておらず、必要な情報は全て開示されてるに等しいです。自分が使ってるModで面白い動きをしてるなら、そのModをCSで開いてどういう処理方法で実現しているかを調べてみると良いかも。

自分の場合は上に書いたようにチュートリアルはすっ飛ばしていきなりModを見てました。

やりたい事に近いModをCSで開き、前に書いた方法で何をされているのか見当をつけ、
そこの記述がどう弄られてるのかを調べる事で勉強してます。

Scriptの場合も同様で、使用されているScriptを開きどういう処理されてるかを眺め、
知らないコマンドの類をCS Helpのキーワードで検索したり、TES Construction Set Wikiで調べて意味を把握すると。

OBSEのコマンドはCSHelpには乗ってませんが、Wikiの方には詳細に書かれています。場合によっては参考になるサンプルも載ってるので活用すると便利。

ここで便利なのが“高機能なテキストエディター”による色分け表示。
(一番最初の項目参照)
変数の宣言やコマンド・コメントなどが色分けされて表示されるので、文面の意味を把握しやすくなります。

◎マメ知識

  • 変数がよくわからん!!
    とりあえず、CS Help のキーワードで一番末尾の方に変数に関して説明してる項目が幾つか有るので読んでみてくださいw
    Script上で変数を使用する場合、その変数はどういう形式の物かを記述する必要があります。
    (Short とか Ref とか)型宣言という言い方もされます。
    宣言の無い変数が存在するとScriptをSaveした時にエラーメッセージが出てSaveできません。
     
  • ;(半角セミコロン)てなにさ?
    半角セミコロンの後に書かれてる文面はコメント文として判断され、Scriptの実行からは無視されます。
    メモ書き等を使えScriptの理解を補助する手段に使えます。
    親切な作者は「ここから先はこういう事してる」とか、「これは何に使う変数」といったメモを書いてくれてます。
     
  • 変数(X)に値を代入する
    Set  X to 値  ; X に値 が代入される。
     
  • Begin には Endif には Endif必ずペアとして存在。
    数が合わないとエラーになる。EndとEndifを間違えないように。
     
  • if の 後に書くべき記号は?
    等しい時  :  ==
    超える  :  >
    以上  :  >=
    以下  :  <=
    未満  :  <
    同じで無い  :   !=

     
  • 複数の条件を比較したい
    and の場合は &&、or の場合は || で 2つの条件を繋ぐ。
    (例えば if A == 1 && B != 1 など)
     
  • 順番に条件を比較したい(パターン1)
    if 条件1
     
    何かの処理1
      if 条件2
         何かの処理2
      endif
    endif

    条件1が成立すると「何かの処理1」を実行。
    その後、条件2をチェックし条件2も満足すれば何かの処理2が実行される。
    ( if 条件1 && 条件2 と似た感じだが、途中で何かの処理1を挟める)
    条件1が成立していなければ、何もせずに一番下のendifへ移動する。
     
  • 順番に条件を比較したい(パターン2)
    if 条件1
         何かの処理1
    elseif 条件2
         何かの処理2
    else
         何かの処理3
    endif

    条件1をチェックし成立していれば「何かの処理1」。
    条件1が成立していなければ条件2がチェックされ、成立していれば「何かの処理2」。
    条件1条件2も成立していなければ「何かの処理3」が実行される。
    elseif は 複数入れる事も可能だが、else は1つのみ。
     
  • 記述の省略
    コンソールコマンドと同じくコマンドを省略して書く事が可能。
    (ModActorValue を ModAV など)
    大文字と小文字は区別されない。
    (大文字を混ぜる方が見た目で把握し易いか)
    if 条件 == 1 の場合は if 条件 と言う記述でもOK

とりあえず思いつくまま書いてみた。

| | コメント (0) | トラックバック (0)

06) Scriptの出来る事

◎何が出来るの?

  いろんなことが出来ます(おわり!

だけじゃ余りにも手抜きなので・・・

例えば、カッコイイ剣をモデリングツールを駆使して作り上げたとします。
それだけでも素晴らしい成果です。
CSを使って新規のWeponObjectとして登録し、性能を決め、入手可能な場所を設定し、場合によってはクエストを作りと、作業量も結構な物です。

しかし、その剣にScriptを使った処理を埋め込めば、更にユニークな特徴を持った武器へと変身します。
 

自分の好きなScriptを仕込まれた剣Modを以下に紹介。

Lilarcor (オリジナル英語版。日本語化するためのファイルはコチラ
 ・“the talking sword.” と言う副題も持つ剣Mod。
 ・副題が示すように色々おしゃべりする剣だが、
  その内容はある程度Playerの状況に応じた物になっている。
 ・気まぐれに火・雷・氷の属性を纏い、時によっては威力と速度が上がったりする妙な奴。
 ・戦闘中、唐突に広範囲の高威力魔法を相手に叩き込んだりする困り者。
  (ガードなんかが巻き込まれると“すた~~~ぷ”されたようなw)
 ・魔法扱いになってるが、Lilarcorと会話する事で姿を両手剣・長剣・短剣へ変えることも可能
 ・Phantomという透明な分身を召喚し、Playerと一緒に戦わせる事も可能。
  
 などなど。なんとなくコイツが喋ってないと寂しくなるので常に持ち歩いてる一品。

Mighty Umbra (オリジナル英語版。日本語化するためのファイルはコチラ
 ・元のOblivionから存在するUmbraを、その関連クエストごと拡張するMod。
 ・Umbraの設定に過去のTESシリーズでの扱いも絡め、凶悪な呪いの剣風に味付け。
  (Obの元Umbraは威力それなりでSoulTrapをEnchantされただけの片手剣)
 ・SoulTrapの代わりにUmbraで敵を倒すとUmbraが魂を喰らいます。
  魂を喰らわないと飢えていきPlayerにペナルティを発生。
  (クエストを完遂してUmbraの主だと認められるとペナルティは発生しません)
 ・Umbraを手にしてしまうとクエストを完遂するまでUmbraから手が離れず。
  (武器変更不能、装備解除不能)
 ・Umbraが満腹じゃない時は抜刀スニークすると生命探知の効果発動。
 ・Umbraを装備している間、少しだけ近接戦闘よりの能力に変化。
 ・Umbraを抜刀して戦っている時に窮地に陥ると大幅にステータス向上(HPも徐々に回復)。
 ・支配下に治めたUmbraで敵を倒し続けると、時々集めた魂を込めたGemを入手。

 他にも色々仕掛けあったかな?
 TES3のように両手剣に戻すだけのつもりで導入してみたら、とんでもない武器になってたw
 威力と特徴の両面と入手するまでの苦労から切り札として愛用。

と、剣のModを例に出しましたが別に剣に限った話ではありません。
いろいろな物にScriptを仕掛けて特徴を強調する事も出来ますし、ちょっとした小細工程度にも使えます。

例えば、HTSCの場合。
HTSC Ver1.0.0でHISSSSA(ヒッサー)さんのCyrodiil Milkを使わせてもらいましたが、
販売所の牛乳ケースがお気に入り。しかし、ケース内部の牛乳が安定してくれず四苦八苦。

なんとか倒れないように細工をし、散らかされても綺麗に元通りする方法は出来たものの、
盗まれちゃうと再補充は難しい・・・。

で、販売所に置いてある牛乳ケース内部の牛乳に入手不可能にするScriptを仕込みましたw

と言ってもたった数行のScriptですけどね。
こういう小細工も出来るって事です。

| | コメント (0) | トラックバック (0)

2008年1月12日 (土)

05) CSを弄ろう(その3)

◎RenderWindowの操作

CSHelp の Getting StartedMy First Dungeon にも書いてあるので、
RenderWindowでカメラや物を操作する時のキー操作覚書。

・物の選択
 左クリックで1つを選択。ドラッグで囲むと複数を一度に選択可能。

・選択した物に注目
 Cキーを押すと斜めから見降ろした俯瞰視点。
 Tキーを押すと真上から見た視点。
 基本的には北を上として表示する。(「NorthMarker」で定めた北には影響されず。)

・カメラ操作1(ズーム倍率)
 マウスのローラーを転がす(デジタル的)。
 Vキーを押しながらマウスを上下に移動(アナログ的)

・カメラ操作2(上下左右への平行移動)
 Spaceキーを押しながら or マウス中央ボタンを押しながらマウスを移動

・カメラ操作3(方角の変更)
 Shiftキーを押しながらマウスを移動。上下左右好きな位置からの視点に出来る。

・物の操作1(場所の移動)
 物を選択し、その物体の上からマウスをドラッグすると任意の位置へ平行移動。
 X、Y、Z のキーどれかを押しながらだと、特定の方向のみへ移動方向を限定。

・物の操作2(回転)
 物を選択し、その物体の上でマウスを右クリックしたまま移動すると回転。
 X、Y、Z のキーどれかを押しながらだと、特定の軸を中心として回転。

・物の操作3(位置あわせ)
 空中に浮かんだ物を選択し、Fキーを押すと一番近い平面まで落下。

・物の操作4(微調整)
 位置決めしたい物をWクリックし「Reference」窓を出す。
 “3D Data”タブの各項目で任意の値を入力。

前エントリで書いていた「店員に所有権のある箱」と言うのも
「Reference」窓の“OwnerShip”タブで設定可能。
この箱は床下などプレーヤーに見えない場所へ配置してもOK。

・設定された光源を無視
 Aキーを押す or ツールバーの電球マークをクリック

・光源の影響範囲を図示
 Lキーを押す。明かりの影響する範囲を円で示してくれる。

・ワイヤーフレームで表示
 Wキーを押す。(余り使った事無い)

・ドアで繋がった先の確認
 ドアマーカー(黄色い角柱と紫の4角錐が組み合わされた奴)をWクリックすれば接続されている場所に描画エリアが移動する。

・その空間に配置されている物の一覧
 CellView窓の右側に表示されている物が配置されている物一覧。
 うっかりと亜空間に配置してしまった物もCellViewからなら探索可能。
 一覧からObjectを選び、Wクリックすると何処に配置されているかが表示される。

| | コメント (1) | トラックバック (0)

04) CSを弄ろう(その2)

◎データを読み込んだ後は?

読み込むデータを決定しOKを押した後は読み込みに結構時間が掛かります。
CSのHelpに「飲み物でも用意してゆっくり待つのが良いでしょう。」と書かれるくらいですw

詳しい方法はCSHelpの“Getting Started”から順番に読んで貰う方が良いのですが、
知ってると便利な部分だけを手短に。

・ObjectWindow

CSではObjectと呼ぶ物で全てを管理しています。
NPC1つの情報もObjectですし、武器の設定もObject、クエストの情報もObjectで、魔法の効果やキラキラ光る演出もObjectとして管理されています。

で、これら雑多なObjectを一部を除いて一覧できるようにしてあるのがObjectWindow。
カテゴリーごとに分類されているので、枝を手繰る事で目的の項目を探す仕組みになってます。
(NPCならActors → NPC、武器ならItems → Weapon てな具合)

カテゴリを選ぶと右側に登録されているObject群の一覧が出ます。
 EditorID , , Count , Users , Name ・・・・
と言う感じの項目が出てると思います。

EditorIDは固有名詞であり、同じIDをつけた物が同時に二つ存在する事は許されません。

別のModで同じIDを使用していると、該当するObjectの性質を変更する(LoadOrder次第)か、
複製品を作り出して管理されます。

CountはそのObjectがゲーム世界中に幾つ初期配置されているか。
UsersはそのObjectの情報を使用しているObjectが幾つあるかを示しています。

「ICのJensineの店で牛乳を販売させたい」と思ったとき、
ObjectWindowから Actors → NPC を選択し、一覧のNameから Jensine を探す。

Jensine の情報を管理しているObjectは容易に見つかり、ObjectをWクリックして「Inventory」へ牛乳のObjectを放り込めば販売可能・・・。ってのが一番簡単な方法ではあるのですが、この方法だと別のModでJensineの情報を変更されると販売してくれなくなります

そこで一般的に使用されているのが
 「店員に所有権を持たせた箱を新規に登録し、そこへ販売Itemを追加する」
と言う方法です。

これには Jensine の居る店の位置を探す必要があります。
で、ObjectWindowの活用法。

JensineのObjectが判明しているなら、Wクリックするのではなく右クリックしてみましょう。
「New」「Edit」というメニューが表示され、一番下に「UseInfo」と言うのが出てるのが分かるはずです。

「UseInfo」を選ぶとそのObjectに関連する物や場所の一覧を表示する窓がでます。
その窓の下の部分「Use in these Cells:」と書かれた場所の項目をWクリックしてください。

今まで何も表示されていなかった「RenderWindow」にお店の様子が表示されたと思います。
これで店員に所有権を持たせた箱を新規に登録する準備が出来ました。

この方法を応用すると「XXは何処にありますか?」系の質問は、他人に聞かなくてもCS開いて容易に探せるんですよねぇ。(^^A

長くなったのでRenderWindowは次の項目で・・・。

| | コメント (0) | トラックバック (0)

03) CSを弄ろう(その1)

◎データの読み込み

CSを起動して最初にする事はとりあえずデータを読み込む事です。
メニューバーからFile→Dataと選ぶか、ツールバーのフォルダっぽいアイコンを押すとData指定窓が出ます。

Data_2

ここで読み込めるのは次の2種類のファイルのみ。
  ・拡張子が.esmのファイル : Master File
  ・拡張子が.espのファイル : Plugin File

Master FileはOblivionを遊ぶために必要な情報が全て詰まった“Oblivion.esm”のような特殊なファイルの事で、CSからは参照ファイルとして読み込むことは出来ますが、
加えた変更を直接Master Fileへ上書きする事は出来ません
Master Fileへの変更は全て新しいPligin Fileとして別途保存する必要があります。
またCS単独ではMaster Fileを作成する事が出来ません。

色々と特殊なようで、Master Fileを作成するツールを持っている場合でも、不用意にMaster File化するのはやめた方が無難かもしれません。

Plugin File の方は加えた変更を上書きし改変を重ねる事が出来ますが、
読み込んだFileへ上書き保存するためには読み込む時に Activate File として読み込む必要があります

Activate File とするには窓の左下にある「Set as Activate File」のボタンを押せばOK。

但し Activate File を指定してデータを読み込んだ場合、普通のツールのように「別名で保存」と言った事は出来ず、常にActivate File 対する上書き保存しか出来ない。

読み込むファイルが何を変更しているModなのかを知りたいときは「Detales...」ボタンを押してみると良いでしょう。

Filedetails

Type欄は慣れない内は暗号のように見えるでしょう。

CSで使うObject種別の略称になっています。

SCPTだとスクリプト、
SPELだとスペル、
QUSTだとクエストって感じですね。

EditorIDは変更箇所の固有名詞です。

 

 

 

 

 自分用のModを作成している際、
  余計な場所まで弄ってしまった・・・。
なんて事がたまにあります。

この場合、元通りに書き戻したつもりでも変更箇所としての記録は残るので、
別のModとの関係で動作がおかしくなると言う事も良くあります。(LoadOrder関係)

このような場合、Detailesを出して該当するEditorIDを探し出し、それを選択してキーボードの「Delete」キーを押すとIgnoreというマークが付き、“そのModでの修正を無視する”という処理がなされます。

完全に修正箇所としての記録を消したい場合はIgnoreマークをつけてから読み込み、上書きセーブしてやれば綺麗に消えます。

1枚目の画像の“Created By”と“Summary”の欄には自由にメモを書き込めます。
ただし、書き込んだ瞬間に反映されるようで、別途セーブするとかは必要ありません。
自分の加えた変更を書いておけば、複数のVerを比較しながら弄る時とかに便利。

| | コメント (0) | トラックバック (0)

2008年1月11日 (金)

02) OBSEの勧め

◎どうしてOBSE?

OblivionのModを導入したりする際にたまに見かけるOBSE必須Mod。
OBSEって何?と言う人もいるかと思います。

正式名称は“Oblivion Script Extender
その名の通り「Oblivion中で使用できるScriptの機能を拡張しよう。」と言うツールです。

日本語化パッチと同じく、本来のOblivionでは実現できない事を外部のプログラムを中継する事で実現可能にしようという少し無茶な行動をさせるので、OBSELoaderというプログラムでOblivionのVerを判別し、使用しても問題の無いdllを自分で選ぶという親切設計になっています。

もっとも、この自己判定のおかげで日本ユーザーが勝手に改造している日本語対応Oblivionの場合では、OBSEが認識している動作可能Verに含まれていないOblivionで実行されていると動作拒否され、色々と混乱を起こしたりしますが・・・。

動作拒否されるのはOBSEがVerUp後に発表された日本語化パッチに関するものなので、少し古めの日本語版はOBSE側で動作可能Verとして登録してくれています
OBSEの作者と日本語版のコードをマメに報告してくれている人に感謝。

他には「OBSEを使うと不安定に」って話もありますが、OBSEのコマンドを使用したMod側のミスというのもあるので一概には言えませんが、VerUpを重ねる事で随分安定度が増していると思われます。


さて、ではMod弄りにOBSEを勧めるのは何故か?

答えは標準のOblivionで使えるScriptのみだとデバッグがしにくいからです。

プログラムを作ってみると自分が思ってたように動いてくれないと言う事はよくある事ですが、
標準のOblivionだとScriptの挙動を把握する方法が殆どありません。
(MessageやMessageBoxを使って動作チェックする方法はあるが、タイミングを計るには不向き)

んじゃOBSEを使うと何が変わるのか?と言うと、
デバッグ向きのコマンドも用意されていると言う事です。

PrintToConsole と言うコマンドがその一つ。

ScriptがPrintToConsoleと書かれた部分を通過した瞬間、
指定された文字列や変数に確保された値をコンソール画面へ表示してくれます。

コンソールを開いてtdt(Toggle debug text )と打ち込み画面上へ内部情報を表示する許可を与えると、ゲームを動かしながらスクリプトの挙動を確認する事が可能です。

 HTSCで睡眠不足の時に登場する幻覚幽霊を復活させる時、
 出現位置や消滅位置およびタイミングの確認と調整にこのコマンドを活用しました。

他にもOBSE用のPluginとして別途入手する必要がありますが、Scriptが取り扱おうとしてるObjectは何であるか?と言う情報を文字列として扱い表示させるコマンドも使えるようになります。

この手の内部情報を確認できる手段があると格段に状況の把握がやりやすくなり、
プログラムの組みなおし検討も容易になります。

OBSEを使ったScriptを使用する準備はいたって簡単。

OBSEが既に導入されている環境だと、TES Construction Set のショートカットをコピーしてプロパティを開き、
リンク先の“TESConstructionSet.exe”の部分を “obse_loader.exe -editor”と変更するだけでOKです。

リンク先の部分を変更したショートカットでCSを起動すればOBSEのコマンドを使ったScriptを作成可能になっています。

他にも本来なら出来ない挙動を可能にするコマンドや、複雑な処理手順が必要なScriptをコマンド1つで実現可能にしてくれている等、使い出すと面白いですよ。

| | コメント (2) | トラックバック (0)

より以前の記事一覧