今更なオブリビオンブログ
おもにMOD関連のメモを書いていくと思います、MODをいじったり、作ってるのが楽しいです。
スポンサーサイト
上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

リスポーンに関して
どうも、リスポーンに関する挙動で、勘違いしていた所やよくわかっていなかった所があったので、もう一度、自分で調べてまとめました。


一度訪れたことのあるセルから離れてデフォルトで3日以上経つと、再び訪れた時にそのセルで「リスポーン」と呼ばれるものが起こり、その際にそのセルにあるモノが以下の挙動をします。
これは、宝箱や罠を復活させたり、色んな情報を一度リセットすることでセーブデータの無駄な膨張を防ぐ目的で行われているものだと自分では理解しています。



・生きているNPC…中身を個別で設定、リスポーンをチェックすると中身がリセットされるが、QuestItem属性のアイテムを持っていると中身がリセットされない。ただし、リスポーン時にLeveldItemからアイテムの抽選は受け取る。

・死んでいるNPC…消滅する、QuestItem属性だと消滅しない。リスポーンをチェックすると中身がリセットされ復活するが、QuestItem属性のアイテムを持っていると中身がリセットされず、復活もしない、消滅もしない。ただし、リスポーン時にLeveldItemからアイテムの抽選は受け取る。

・元から落ちているアイテム…移動させていたら元の場所に戻る、取得した場合は復活しない。

・PCやNPCが落としたアイテム…そのまま。

・コンテナ…中身を個別で設定、リスポーンをチェックすると中身がリセットされるが、QuestItem属性のアイテムが入っていると中身がリセットされない。ただし、リスポーン時にLeveldItemからアイテムの抽選は受け取る。

・植物…復活する。


・罠…元に戻る。ただし、元に戻るのは、そうなるようにスクリプトでリセットしているからです。(開始条件に「Begin OnReset」を使っている。これは指定オブジェクトのあるセルがリスポーンされた時一度だけ走る。)
 罠は、Activatorに付けられたスクリプトを作動させ、アニメーションの再生と同時にダメージを発生させることで実現しています。その際に変数の操作をしています。変数をリセットしなければ罠のリセットはできないので、スクリプトでリセットする必要があります。

Disableしていると復活はしませんが、リスポーン自体はしているようで中身があるものは中身がリセットされています。

NPCをResurrectで生き返らせるとリスポーンして復活します。リスポーンさせるコマンドは存在していませんが、この仕様を利用すればNPCを強制的にリスポーンさせることが出来そうです。
 (QuestItem属性のアイテムを持っている場合は上記と同様)

NPCの持っているSpellもリスポーンでリセットされますが、Abilityだけは別で、これだけは忘れないようです。
 (毒りんごを食べたNPCは、スリップダメージのAbilityが付与されているため、コンソールで生き返らせてもすぐ死んでしまう。)

リスポーン時にLeveledItemを持っているモノは、LeveldItemからアイテムの抽選を受け取り、LeveldCreatureからは、NPCの再配置がなされます。
 この際、LeveldCreatureから作り出されたNPCはゲーム内で新規に作り出された扱いらしく、NPCはFormIDの先頭二文字が「FF」になっています。(通常ここはMOD番号が入る所。システムはこの番号を見ることで、どのMOD由来のモノなのかが分かる仕組み。エンチャント台で新しく作り出したアイテムや魔法も「FF」になる。)
 LeveldCreatureから抽選で選ばれたNPCが以前のNPCとは違う場合は、以前のNPCは消滅してしまいます。(LeveldCreatureのNPCは生きていても、死んでいるNPCと同じ扱いで基本的に消滅してしまう?)
 また、そのLeveldCreatureのNPCがQuestItem属性のアイテムを持っていて、同じNPCが抽選で選ばれた場合は、消滅せずに、新しく作り出されもしないようです。(リスポーンのたびにNPCが増えてしまうため?)

セル単位でリスポーンさせる「ResetInterior」というコマンドはあるようです。コマンド実行後、次にそのセルがロードされた時にリスポーンが起こります。
 ・書式
 ResetInterior [CellID]


基本的に、中身があるものは、その中身をリスポーンするか個別に設定できて、
オブジェクトとして配置してあるものは元の位置に戻るという動作をする模様。(場所が戻るだけで復活していない、この辺勘違いしていた)
(検証はしていませんが、岩や家具などの各種WorldObjectsも位置情報がリセットされている?)

NPCは生きている時は歩き回りますが、リスポーンするのはあくまでもそのセルでリスポーンが起こった時になります。
NPCが死んでいる時は基本的に消滅する扱いですが、QuestItem属性だと消滅しない。


セルの所有権による違いは確認できませんでした。自宅などがリスポーンしないというのは勘違いのようでした。(自宅に限らずPCが落としたアイテムはそのまま)
また、ニルンルートが植物なのに復活しないのは、取得した時にスクリプトでDisableしていたからでした。


Doorはリスポーンしても動かないようです。(場所移動できるDoorやニルンルートは必ずPersistentなので、それが原因かと思っていたのですが、どうやらDoorの方が特殊で、Persistentなのはリスポーンとは関係がないみたいです。)
ただ、動かないのはヴァニラのDoorだけのようで、MODで追加したDoorはCSで場所を変えたらちゃんと動いてました。(esmとespの違い、つまりデータを変更するデータかデータそのものの変更の違いでこうなる?)

スポンサーサイト

テーマ:Oblivion - ジャンル:ゲーム

ZoomMOD
お手本にできるMODがあるから簡単に出来るかと思いきや、結構苦労したMODです。
これがあれば弓スキルが低いうちから狙撃が簡単になります。

http://www.4shared.com/zip/Vb-fbBw4/ZoomMod_v101.html

■概要
一人称時にズームが出来るようになるMODです。

・右クリックをしばらく押しているとズームスクリプトが作動します。
 その状態で右クリックを押しながらホイールを操作することで、FOVを変更してズームインができます。

・ズームしていない状態で左クリックと右クリックを同時に押していると機能のON・OFFの切り替えが出来ます。
 左クリックを押しながら右クリック押す感じだと反応しやすいです。


ヴァニラの状態



最大ズームイン
20130124FOV05.jpg

ちなみにズームインだけではなく、ズームアウトも出来るようになっています。

最大ズームアウト
20130124FOV150.jpg

これらは、全て同じ場所から同じ方向を見ているものです。
続きを読む

テーマ:Oblivion - ジャンル:ゲーム

メッセージを表示させない方法
…前回からの続きです。

AddSpellをすると、そのたびに魔法を追加された旨のメッセージが発生してしまうので、これはなんとも目障りなので、どうにかできないものかと思い、調べてみると、解決策が複数あるようでした。



■まず一つ目の方法は、「Message」の仕様をうまく活用することです。
画面左上に表示されるメッセージを同時に発生させると、システムは、現在表示されているメッセージと次に表示するメッセージの、一度に2つまでしか覚えることが出来ないため、連続で「Message」を表示させれば、3つ目以降は表示をさせないことが出来ます。


Message " "
Message " "
AddSpell Spell

この例だと、半角スペースのメッセージを2回表示させてからAddSpellをしているため、一見するとメッセージが無いように見えます。
元から何らかのメッセージを表示させるつもりなら、同じ文章のメッセージを2回続けるといいです。



■もう一つの方法は、OBSEで追加される専用の関数を使うことです。
以下の関数は、「NS」が付いていないものと同じ動作ですが、メッセージを発生させません。

・AddSpellNS
・RemoveSpellNS
・EquipItemNS
・UnequipItemNS

以下の関数は、「NS」が付いていないものと同じ動作ですが、メッセージおよび、本来発生する音を再生させません。

・AddItemNS
・RemoveItemNS
・EquipItemSilent
・UnequipItemSilent



■また、アイテムの場合だけですが、「activate」のコマンドを使えば、メッセージ無しでアイテムの追加が出来ます。


[アイテムのRefID].activate player



これらのいづれかの方法を使うことで、メッセージの問題は解決です。
…それにしても、最近はゲーム本体よりもCSを開いている時間のほうが長い気がする…

テーマ:Oblivion - ジャンル:ゲーム

MOD作り12
ズームが出来るMODを作るといっても、やっている作業はまあ要するに、双眼鏡に付いているオブジェクトスクリプトのズームする部分をクエストスクリプトに移し変えて、アイテムが無くても動作するようにするわけなんですが、これが一筋縄ではいきません。

主な動作としては、右クリックを押しながらホイールの操作をすることで、FOVの値を変えてズームをするというものです。

この部分はオブジェクトスクリプトの「GameMode」で書かれています。
オブジェクトスクリプトやマジックエフェクトスクリプトで、「GameMode」を使った場合は、近くにそのオブジェクトがあれば、毎フレーム実行されるわけなんですが、クエストスクリプトの場合は、指定が無い場合は5秒毎に一回の実行となっています。
ですが、クエストスクリプトは実行頻度を変更することが出来るので、どこかでクエストスクリプトの実行頻度を高く変更する命令を書けばそれでいいはずです。
(FOVを変更するには、OBSEで追加される関数の「con_SetCameraFOV」を使います。これはコンソールコマンドでFOVを変更した時と同様で、変更しても、すぐに元の状態に戻ってしまいます。なので、スクリプトで常に実行し続ける必要があるようです。)


しかし、ここで問題が起こりました。
作ったMODだけで動作確認をしたときは、うまくいったのですが、現在の自分のMOD環境でテストすると、うまく動いてくれません。
どうやら、他のFOV変更のMODの影響を受けているようなのです。これを回避して、併用もできるようにするためには、ズームMODの実行頻度を毎フレーム実行するぐらいにを高くして、ズームMODのFOV変更のほうを優先させるようにしなければいけません。
ですが、クエストスクリプトは、実行頻度を変更することができる代わりに、毎フレーム実行するという設定に出来ないようなのです。

どういう事かというと、クエストスクリプトは「fQuestDelayTime」の変数を宣言して、数値を変更することで実行頻度を変更出来ますが、この値をある程度まで小さくすると、それよりも小さくしても実行頻度が変わらなくなるのです。
…なので、どうやらクエストスクリプトで毎フレーム実行するのは、事実上不可能なようなのです。



そこで、ちょっと一工夫して、ズームの動作をするクエストスクリプトは、マジックスクリプトエフェクトに変更して、右クリックを押したらアビリティをAddSpellして、必要なくなったらRemoveSpellするように変えました。
これにより、右クリックを緩めに監視するクエストスクリプトと、実際にズームの動作をするマジックスクリプトエフェクトという風に分けられて、ズームをしていない時は負荷が小さくなるという効果もあります。

これで解決したかと思ったら、今度は別の問題が発生しました。



AddSpellをすると、そのたびに魔法を追加された旨のメッセージが発生してしまうのです。(RemoveSpellの方は、元からメッセージを発生させない)
これはなんとも目障りです。

最悪、「気にしない」という最終手段も視野に入れて、どうにかできないものかと思い、調べてみると、解決策が複数あるようでした。
その方法は…次回へ続きます。

テーマ:Oblivion - ジャンル:ゲーム

ズームができるMOD
弓のスキル特典で、視界をズームすることが出来ますが、この機能を平常時にも使えるようにするMODは無いかと思い探してみました。

まず、一つ見つかりましたが…
http://www.nicovideo.jp/watch/sm13800693
↑のニコ動で紹介していたようなのですが、今はもうアップローダー自体がなくなっているため、入手は不可能…

と、思いきや作者が別の場所に補完されていました。
http://www.mediafire.com/?4c543kjl6pi1u
↑の「FirstPersonCamera.7z」がそうです。

でもこれ、「Immersive Field of View」が必須になっています。
このMODは、自分も使っているものなんですが、できれば単体で動作するものがいいかな、と探してみると…



「Binoculars」という、双眼鏡を追加するMODを見つけました。
http://oblivion.nexusmods.com/mods/6964/

でもこれは、あくまでも双眼鏡というアイテムを追加するMODなので、使用するには装備欄を一つ取られてしまいます。(Tailですが)



…というわけで、自分で作ってみることにしました。


ちなみに、ズームをするには「FOV」の数値をいじることで実現しています。
「FOV」とは、「Field Of View」の略で、視野と訳されます。
視野が狭くなっても、表示画面のサイズは変わらないため、結果ズームインしたような画面になるというわけです。
(デフォルトでは75の設定になっています)

これはヴァニラの弓のズームも、MODでのズームも一緒です。


作成に当たり、主に「Binoculars」のスクリプトの動作を参考にさせていただくとします。


テーマ:Oblivion - ジャンル:ゲーム

変数に値を入れる時の計算の順番について
変数に数値を入れる時に下記のように足し算と掛け算が混じった計算式だった場合、入る数値はどうなるでしょうか?


set Count to 2 + 4 / 2


普通は掛け算や割り算を先に行ってから、足し算や引き算は後から行うようにと学校とかでは習ったと思います。
だから、本当は「Count」の中身は「4」になるはずですよね?

ですが、Oblivionのスクリプトでは、実際は前のほうから順番に計算をしていくようで、これだと「3」になります。
…感覚としては、計算してから入れるのではなく、変数の中に順番に符号つきの数値を一つずつ放り込んでいくという感じでしょうか。


もう一度試してみた所、どうも計算式で変数に数字を入れようとするとうまく動かないようです。
例のように、足し算が先で掛け算が後だと変数が変化していませんでした。
しかし、掛け算が先で足し算が後だと正常に働いていました。

…掛け算や割り算を置く場所によって結果が変わる?
どの道、足し算と掛け算が混じった計算式は使わない方がよさそうです。

テーマ:Oblivion - ジャンル:ゲーム

ArrowEncTool
ようやく出来ました。矢をエンチャントするMODです。
いきなりエンチャント可能なアイテムを手に入れては味気ないと思い、導入用のクエストも作ってみました。
クエストマーカーに従って行けばいいだけの簡単なものですが…

httphttp://www.4shared.com/zip/kjgvzDCE/ArrowEncTool_v102.html

■概要
矢をエンチャントするMODです。
「ArrowEncTool」というアイテムをアクティベートすることで、矢をエンチャント出来ます。

どこか(自宅など)に安置して使うことを想定していますが、携帯して使うことも出来ます。
その場合は、「ArrowEncTool」を持っていれば追加される魔法(レッサーパワー)を使えば、いちいち置かなくてもよいので、便利です。
(「ArrowEncTool」を置くと忘れます)
続きを読む

テーマ:Oblivion - ジャンル:ゲーム

MOD作り11
今度作っている矢をエンチャントするMODは、呪文の作成台のように、何かアイテムをアクティベートしてエンチャントを開始する予定です。
そこで思いついたのですが、「HTSCl」の「どこでもキッチン」等のように、通常時とスニーク時でアクティベートした時にちょっと違う動作をするようにしたいと思いました。
以下がその部分の処理です。

begin onActivate

if isActionRef player == 0
[PCじゃなかった場合、誤発動しないよう、ここで「return」を実行する]
elseif player.isSneaking
[PCがスニーク時の処理]
else
[本来の処理]
endif

end

このように、スニーク時かどうかを判別する関数があるため、案外簡単に処理を分けることが出来ます。

あと、矢の素材によってエンチャント矢の種類の数にばらつきがあるので、若干オリジナルの矢を水増しをしました。(鋼の矢は8種類あるのに、ディードラの矢は5種類しか存在しない)
わりと強力なものになりましたが、エンチャント自体はヴァニラのものを使っているので、ゲームバランスを損なうほどではないと思います。

テーマ:Oblivion - ジャンル:ゲーム

MOD作り10
矢のエンチャントMODを作っている所ですが、名前が違うのに、同じ性能のエンチャント矢が存在しているのを見つけました。
「畏怖の矢」と「苦悩の矢」と「臆病の矢」です。

エンチャントは「EnWeapDemoralize25」で、Demoralize(戦意喪失)の効果です。

同じ効果でもっと高い威力の「EnWeapDemoralize35」や「EnWeapDemoralize45」があるのにエンチャントが同じというのは、もしかして設定ミスなんでしょうか?


そういえば、以前にもデータを覗いていたときに、マンカー・カモランの杖が強さにあわせて4種類あるのに、全部同じエンチャントでした。
…自分はUOPを入れていないけれど、こういうのを見つけるたびに、やっぱりUOPは最初に入れておいた方がよかったのかなと思います。
まあ、CSをいじっていなければ気づかなかったようなバグだし、今更ですが。

あと、同じ素材の矢でもエンチャントによって明らかに強さが違うものがあるんだけど、これは、矢の消費本数を変えることで調整しようと思います。

テーマ:Oblivion - ジャンル:ゲーム

矢のエンチャントをするMODは…

矢のエンチャントが出来るMODというと、Arrows of the Ayleid King (http://oblivion.nexusmods.com/mods/10740/)という、ウェルキンドストーンを使って矢のエンチャントをするMODがあります。
これは導入のクエストもあり、なかなか良い雰囲気が出ていて、使い道のあまり無いウェルキンドストーンを消費するという部分もいい感じなんですが、
素材も作った矢もオリジナルで、作った矢は結構強力なMOD矢になるというのが、ちょっと肌に合いませんでした。

出来ればヴァニラの矢を使ってヴァニラのエンチャント矢を作成できればいいなと思って探していると、
Arrow_Enchanter(http://planetelderscrolls.gamespy.com/View.php?view=OblivionMods.Detail&id=548)がありました。
ですが、これはエンチャント矢を量産するためにはその分、矢以外にも素材を沢山集めなければいけないようで、ちょっと面倒です。
ちなみにOblivion Wiki JPでは生産系のMODとして紹介されています。


ウェルキンドストーンだけを消費して、ヴァニラのエンチャント矢を作成するMODが欲しいと思って、ちょっと自分で作ってみることにしました。
仕組みとしては以前作ったようなMessageBoxを使ってメニューを作って、AddItemとRemoveItemを駆使すれば出来そうです。

一から自分で作って見ようと思います。
というか、すでに作り始めています。



メニュー画面を作った所ですが、ヴァニラのアイテム名は日本語になる予定です。



自分は名詞日本語版(しとしん版)を使っているのですが、今まで作ってきたMODの魔法名は英語です。
これは、EditorIDが英語しか使えないため、それをそのまま名前にしてしまう、というのもありますが、並びのためでもあります。

英語の名前は日本語の名前より上のほうに表示されるため、探しやすいからです。


個人的に、MODを入れる時はヴァニラに準じるようなものは出来る限り日本語化をして使っていますが、
原則、MODで追加されるアイテムや魔法は探しやすいように英語の名前にしています。


…それはそうと、これから矢の素材ごとの処理を作って、
どんな矢を作るかのメニューと処理を作らなければいけません。
やることは単純な作業ですが、なかなか量がありそうです…


テーマ:Oblivion - ジャンル:ゲーム

カウンター設置しました。
どうでもいい話ですが、自分のブログを見ていて、何かが足りないなと思っていると、
訪問者をカウントするカウンターがないことに気づきました。


こういうのって、たぶんブログの開設と同時に付けるものですよね?
本当に今更ですが、カウンターを設置することにしました。少しは訪問者がいるようなので。

…ここを見ているって事は、自分と同じように今更オブリビオンにはまっている人が他にもいるんでしょうか?

オブリビオンのことは、自分は初めは某掲示板で「このゲームはMODがあるから、一年以上は余裕で遊べる」という話を見て、興味を持ったのが最初でした。それまで「MOD」の存在は知りませんでした。
初めは懐疑的でしたが、今ではこの通り、という感じです。

いまだに自分の知らなかったMODとの出会いがあって、しかもそれが数年前に作られたものだ、ということがよくあります。
オブリビオン…なかなか奥が深いです。
ダミーセルの存在意義について
ダミーセルの利用法についての覚書です。

ワールドスペースの中には、「○○Warld」という名前で街中用のセルがありますが、室内用のセルである、Interiorsの中にも、街の名前のダミーセルが存在しています。
実際に使用しているのは、ワールドスペースの中にあるほうなので、街のダミーセルを作る意味が無いように思われますが、実はこれ、利用法があります。

それは、「その街の中でだけ」という条件にしたい時に「GetInCell」で街のダミーセルを指定することです。

似たような関数で、「GetInWorldspace」がありますが、「GetInWorldspace」の場合は、指定した外部セルにいる場合のみになるので、
街の建物の中などに入っている場合は条件から漏れてしまいます。

一方、「GetInCell」を使った場合は、これは実は、指定した「CellDName」が含まれている場合、1を返すという動作をするものなので、
街の建物の中などに入っている場合も条件に合います。(建物の中のセルは、その街の名前が先頭にあるため)
そして、当然ワールドスペースの中の街の、「○○Warld」もこれに含まれます。(街が作られている部分のセル名は、「AnvilExterior01」のようにその街の名前が先頭にあるため)




…便利そうですが、その動作ゆえに気をつけなければいけないこともあります。
実は、ワールドスペースの「Tamriel」の中には、農村や宿屋、街の近くなどの一部の場所で、周辺の町や建物の名前が含まれたEditorIDになっているため、そこも含まれてしまいます。
なので、場合によっては「GetInWorldspace」を使って「Tamriel」を除いておく必要があるかもしれません。

また、宿屋や農家のような一つの室内セルだけを指定にしたい時には「GetDistance」をつかって、指定したい室内セルの動かないもの、XMarkerなどを広範囲で指定するという手もあります。

テーマ:PCゲーム - ジャンル:ゲーム



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