Oblivion: OBSE 0018 beta 2

OBSE 0018がBeta 2になっていた。基本的にはImproved and FixedなVersionではあるけれど、0017から導入されたexpression parser使用時にCompiler (MSVC 2005)の問題により動作が不定となる確立を減らすためにByte Codeの生成部分に手が加えられている。

この問題はMSVCをUpdateすれば解決できる問題、らしいけれどOblivion本体と同じVersionのCompilerを使用するという方針のために内部的なWorkaroundを実装せざるを得ないところだとか。もっともCompilerのVersionを揃えるというのはよりSafetyな考え方なので、十分理解できるところだ。

最終的にScript Compilerから出力されるByte Codeが違ってくるので、たとえOBSE 0018で導入された新しい機能を利用しなくても、OBSE 0018以降でCompileされたものは以前のVersionのOBSEで利用できないという事に。

ただ、実行時Parserは以前のOBSEで生成されたByte Codeを解釈することは出来るので、OBSE 0018と以前のVersionとで非互換となってしまう機能を利用していなければ動作はすると思われる。ただし、FOSEでもOBSEでもBetaの初期の段階ではBackword Compatibilitiesはあまり考慮されないので、まだ試すには早いんじゃないかと思う。

Oblivion XPでのco-saveファイル(.obseファイル)のBloating Issueは、String変数を使用したときにMemory中に存在するDestructされたはずの値まで含めてco-saveにSaveしていたというOBSE側の問題のようだ。Beta 2ではFixした、となっているけれど、肝心のOblivion XPがOBSE 0018でCompileされていないので、他にどんな問題が出てきてしまうかは今のところ不明。

SirFredrik氏は現在、OBSE 0018から使用可能となったUser Defined Functionsを利用して書き直しているところということなので、それが出るのを待ってからOBSE 0018に切り替えるのが良いと思う。

このUser Defined Functions、きちんと使えばかなり便利な機能なので、自分用にもささっと書いてみた。かなりScriptの書き方が今までと変わるかなという感じ。うまく使えば、これまで長々と書いていた部分が、User FunctionへのCall文で置き換えられるのは便利だ。いずれにせよどこかでLogicは実装しないといけないわけだけど、MainのLogicとSubのLogicをUser Functionを使うことで分離できるわけで、Debugがかなり楽になるだろう。

また、ある特定のLogicがいくつかのScriptで必要になる場合、こういう場合にはUser Defined Functionを作成して、そのFunctionにそのLogicを任せれば良いわけで、場合によっては同じLogicを複数のScriptに記述しなければいけなかったのを一箇所にまとめられる。このメリットは非常に大きい。特にDebugが楽になるわけだし、またあっちを修正したけれど、こっちを修正し忘れたというようなミスも減るだろう。

このUser Defined Functions機能は、OBSE 0012でInventory操作のFunctionがかなり追加された時と同じくらい大きなImpactがあるんじゃないかと思う。OBSE 0012で一連のInventory Operationが可能となって、Inventory中の特定Item、あるいは装備中のItemに対する操作が簡単に出来るようになった。またDynamic Creationではなく、既に存在するもののAR/Type/Damageなどを変更できるようにもなったのが凄い便利だった。あの辺りの変更から、それまではItemを新しくCreateして、古いのはDisableしてという繰り返しでしか出来なかった事が、Item Creation無しに出来るようになって、SavegameのBloatingに悩まなくても良くなったのは、凄い進歩だと思ったものだ。

0018のBetaが取れてReleaseとなるのが、ちょっと待ち遠しいところ。

広告

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中