Papyrus による世界の創造 - Skyrim MOD 制作

オブジェクトの整理

最終更新: 2015-04-02 (木) 21:36:13 (1357d)

目的

Creation Kit における概念に関しての知見をまとめていくことを目的とします。

Papyrus スクリプトは単独ではなく、Creation Kit というゲーム世界を構築するツールの一部であるということです。

Creation Kit の中で意味を理解する必要があり、Papyrus スクリプト単独で理解するということはできません。

実際に触っていると、概念的にかなり複雑に感じています。

このページでは語弊を恐れずに簡略化して考え、曖昧な部分を意図的に断定的に記述しますので注意してください。

また、オブジェクト指向からの切り口が多いです。

ベースオブジェクトとリファレンス

  • ベースオブジェクトとは?
    • 世界に配置される前の基礎的な情報のこと。
    • エディタの Object Window に表示されているもののこと。
    • オブジェクト指向的には以下の通り捉える。
      • ベースオブジェクトはクラスの部類に入る。
      • Object Window 上でオブジェクトを Duplicate することはサブクラスの作成に該当する。
      • 情報を書き換えることができる他、Papyrus スクリプト を追加することで振る舞いを変化させることもできる。
      • うまく使えばポリモフィズムの実現も可能である。

それに対して、

  • リファレンスとは?
    • ベースオブジェクトを具体的な世界に配置したインスタンスに対する参照のこと。
    • エディタの Render Object に表示されているもののこと。
    • オブジェクト指向的には以下の通り捉える。
      • インスタンスである。ベースオブジェクトに対して位置などの具体的な追加情報を与え、ゲーム世界の上で命を与えられる。
      • 一方でそれだけに留まらずサブクラスの作成に該当する操作も可能である。
      • ベースオブジェクトの一部の情報を書き換えることができ、Papyrus スクリプトを追加することで振る舞いの変更も可能である。
      • うまく使えばポリモフィズムの実現も可能である。

オブジェクト指向の知見から考えると難しいのは、 Papyrus スクリプトのクラス・サブクラスの概念を実現する方法が

エディタ上とスクリプト上

Papyrus スクリプトはエディタ上とスクリプト上の情報が別々で掲示されています。

これらは似通っていますが完全に一致するわけではありません。

ルートクラス

ルートクラスを指定せずにクラスを作成することもできますが、実質的なルートクラスは From スクリプトです。

むしろ、言語的に new が存在しないこの言語で From の子クラス以外のクラスを作る意味があるのかわかりません。

実際、標準のクラスにいくつか存在しますが、恐らくネイティブレベルでの操作が行われていると予想しています。

From をルートクラスとし、From.PlaceAtMe でインスタンスを生成する(≒ new に相当)ことを基本とします。

生成したインスタンスは全て ObjectReference(オブジェクト参照) スクリプトの子クラスになります。

ポリモフィズムの実現

執筆中。

コンストラクタ

全てのスクリプトには OnInit イベントがあり、これがコンストラクタにあたります。

スクリプトオブジェクト群の整理

全体に関わる重要オブジェクト

オブジェクト名概要補足
Form
フォーム
実質的なルートクラスにあたる。ゲーム世界に存在するものは形(フォーム)を有するということからこう名付けられているのではないだろうか?Member
SKSE Member
Event
SKSE Events
ObjectReference
オブジェクト参照
ゲームの世界に実在する(動いていたり、配置されていたりする具体的な)オブジェクト全般のこと。オブジェクトはゲームの中に1つしか存在せず、同じものは他に存在しない。中身は何らかの Form(および Form を拡張したオブジェクト)を実体化させたものである。Properties
Member
Event

フィールドに関わるオブジェクト(Form 系列)

オブジェクト名概要補足
Cell
セル
オブジェクトを配置するための下地となるフィールドのこと。Member
SKSE Member
オブジェクト名概要補足
Static
固定物
フィールドを構成するオブジェクトの1種。通路や床や壁。もしくは岩や柱など。動かない部品のこと。None
MiscObject
雑貨
フィールドを構成するオブジェクトの1種。プレート、ツール、ゴブレット、バケツなど。稼働する部品のこと。None
ObjectReference
オブジェクト参照
ゲームの世界に実在する(動いていたり、配置されていたりする具体的な)オブジェクト全般のこと。オブジェクトはゲームの中に1つしか存在せず、同じものは他に存在しない。中身は何らかの Form(および Form を拡張したオブジェクト)を実体化させたものである。Properties
Member
Event
オブジェクト名概要補足
ActorBase
ActorBase
不明Member
SKSE Member
Actor
アクター
ゲームの世界に実在する人間やモンスターのこと。ゲーム内での位置や状態の確認ができる他、行動の実行命令などをサポートする。実体化する前の状態を ActorBase であり、ActorBase を実体化すると Actor になるという関係にある。Member
SKSE Member
Events

ユーティリティー

オブジェクト名概要補足
Game
ゲームユーティリティー
不明Global
SKSE Global
Math
数値処理ユーティリティー
三角関数全般、角度値相互変換(Degree ⇔ Radian)、切り捨て・切り上げ、ビット演算をサポートする。Global
SKSE Global
Utility
ユーティリティー
メニュー状態の確認、時間取得、処理待機、設定ファイルの操作および乱数生成をサポートする。Global
SKSE Global
StringUtil
文字列ユーティリティー
SKSE 専用拡張ユーティリティー。文字列長・部分文字列の取得や、文字列・数値変換などをサポートする。SKSE Global

extends 関係

参考までに標準で用意されているクラスの extends 関係をツリーでまとめます。Form がルートクラスであることがわかります。