知った情報を整理するまでの間の一時保管情報です。
情報源がなく、実際に行なった結果を書いているものが多いため、憶測を多分に含んでいる点、ご注意ください。
知識
世界構築に関するもの
- セルには初期配置の物体が収まる範囲を有効範囲とする性質がある。
- 有効範囲から外に出ると強制的に CenterOnCell - coc(セル移動) を実行した時と同じ状態になる。
- 現象を見ての知識であり、正式な情報源があるわけではない。
- 編集が反映されない。
- 入力後、ESC キーを押しがちだが、しっかりと OK ボタンを押さないと反映されない。
- 一般的なツールでは ESC キー(キャンセル)時に警告が出るが、出ないため反映されていないのに気付かないことが多い。
Paprus スクリプトに関するもの
セマンティック
- ローカル変数名と仮引数変数/プロパティの名称が被った場合、仮引き数/プロパティが優先される。
- 一般的な言語では「エラー」もしくは「スコープが小さい方が優先」とされる中、珍しい仕様である。
- 仮引数変数に命名規則があるのはもっぱらこの問題を回避するためのものではないかと推測する。
- 配列のサイズは固定でなければならない。
- 配列のサイズの上限は 128 である。
- 二次元/三次元配列は作れない。
- ローカル変数のスコープは While によって限定される。
- 一般的なオブジェクト指向言語のようにオブジェクトを new で生成することはできないのか?
- ObjectReference.PlaceAtMe がオブジェクトの生成をする役割を持っているため、これがある意味該当する者のようにも思える。
- しかし、そうだとすると Form を継承していないオブジェクトを生成する手段がないということになる。
- 言語の文法等を調査しているが、今のところ発見できていない。Script Dragon など、Papyrus から外に出てしまえば使えるのは与えリ前のことである。C++ なのだから。
- 1つのオブジェクトに複数のスクリプトを割り当てることができるのは mix-in のようなものと考えることも可能である。
- ただし、相互に機能を参照する際にはキャストが必要になる。なぜなら、スクリプトはそれぞれが独立しているものと仮定されているからである。
オブジェクト
- ほとんどの扉が ObjectReference.OnOpen イベントに対応しているが、すべての扉が対応しているわけではない。
- WinterholdTrapdoor01(床にある扉、ミッデンに行く際に利用した扉)は ObjectReference.OnOpen イベントが発生しない。
- 対応/未対応の違いは、扉を開ける際のアニメーションの有無なのではないかと推測している。
- なぜなら説明に扉のアニメーションが終わったような場合などという説明がしてあるから。
- WinterholdTrapdoor01 はアクティベートしても何もアニメーションがない。
- 予め Linked-Ref でパトロール指定をしたマーカーを移動させた場合の動きについて観測した。
- マーカーを移動させても、アクターはすぐに移動先を変えない。
- 移動を開始した当初あったマーカーの場所まで行ってから再度移動を開始する。
- その場合の移動先は、その時点でマーカーがある場所である。
- 最後まで行くこと無く、途中で新しいマーカーの位置へと移動先を変更できないだろうか?
コマンドに関するもの
- Cell.Reset メソッドでセルを初期状態に一発で戻せないかと思ったが無理のようだ。
- 以下に実行した際に出た警告ログを示す。
warning: Example (04000D62): is loaded or buffered to be loaded - resetting will be postponed and odd things. stack: [Example (04000D62)].Cell.Reset() - "<native>" Line ?
ツール群
- TES5Edit
- esp の内容を細かく見ることができるアプリケーション。
- また、マスターとの重複をチェックし、クリーニングしてくれる機能も持つ。とても重要。
- Champollion a PEX to Papyrus decompiler
- pexファイルをデコンパイルしてpecファイルを取得するアプリケーション。
- Skyrim Papyrus Log Parser
- ログを見やすくするためのツール。
- 撤退した模様…。代わりの物を考えるかも…。