目的
Creation Kit における概念に関しての知見をまとめていくことを目的とします。
Papyrus スクリプトは単独ではなく、Creation Kit というゲーム世界を構築するツールの一部であるということです。
Creation Kit の中で意味を理解する必要があり、Papyrus スクリプト単独で理解するということはできません。
実際に触っていると、概念的にかなり複雑に感じています。
このページでは語弊を恐れずに簡略化して考え、曖昧な部分を意図的に断定的に記述しますので注意してください。
また、オブジェクト指向からの切り口が多いです。
ベースオブジェクトとリファレンス
- ベースオブジェクトとは?
- 世界に配置される前の基礎的な情報のこと。
- エディタの Object Window に表示されているもののこと。
- オブジェクト指向的には以下の通り捉える。
- ベースオブジェクトはクラスの部類に入る。
- Object Window 上でオブジェクトを Duplicate することはサブクラスの作成に該当する。
- 情報を書き換えることができる他、Papyrus スクリプト を追加することで振る舞いを変化させることもできる。
- うまく使えばポリモフィズムの実現も可能である。
それに対して、
- リファレンスとは?
- ベースオブジェクトを具体的な世界に配置したインスタンスに対する参照のこと。
- エディタの Render Object に表示されているもののこと。
- オブジェクト指向的には以下の通り捉える。
- インスタンスである。ベースオブジェクトに対して位置などの具体的な追加情報を与え、ゲーム世界の上で命を与えられる。
- 一方でそれだけに留まらずサブクラスの作成に該当する操作も可能である。
- ベースオブジェクトの一部の情報を書き換えることができ、Papyrus スクリプトを追加することで振る舞いの変更も可能である。
- うまく使えばポリモフィズムの実現も可能である。
- 参考)Reference - Creation Kit(一部重要と思われる部分のみ和訳済み)
オブジェクト指向の知見から考えると難しいのは、 Papyrus スクリプトのクラス・サブクラスの概念を実現する方法が
エディタ上とスクリプト上
Papyrus スクリプトはエディタ上とスクリプト上の情報が別々で掲示されています。
これらは似通っていますが完全に一致するわけではありません。
- Object Classest
- 概念的な捉え方
- Script Objects
- 操作的な捉え方
ルートクラス
ルートクラスを指定せずにクラスを作成することもできますが、実質的なルートクラスは 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 がルートクラスであることがわかります。
- Form(フォーム) - Member,SKSE Member,Event,SKSE Events
- Action - None
- Activator - None
- ActorBase - Member,SKSE Member
- Ammo - None
- Armor - SKSE Properties,SKSE Global,SKSE Member
- ArmorAddon - SKSE Member
- AssociationType - None
- Book - SKSE Member
- Cell(セル) - Member,SKSE Member
- Class - None
- ColorForm - SKSE Member
- CombatStyle - SKSE Member
- Container - None
- Door - None
- EffectShader - Member
- Enchantment - Member,SKSE Member
- EncounterZone - None
- EquipSlot - SKSE Member
- Explosion - None
- Faction - Member
- FormList - Member
- GlobalVariable - Member
- Hazard - None
- HeadPart - SKSE Member
- Idle - None
- ImageSpaceModifier - Global,Member
- ImpactDataSet - None
- Ingredient - Member,SKSE Member
- Keyword - SKSE Global,Member,SKSE Member
- LeveledActor - Member
- LeveledItem - Member
- LeveledSpell - Member
- Light - None
- Location - Member
- MagicEffect - Member
- Message - Global,Member
- MiscObject(雑貨) - None
- MusicType - Member
- ObjectReference(オブジェクト参照) - Properties,Member,Event
- Outfit - SKSE Member
- Package - Member
- Perk - None
- Potion - Member,SKSE Member
- Projectile - None
- Quest - Member,Event
- Race - SKSE Properties,SKSE Member
- Scene - Member
- Scroll - Member,SKSE Member
- Shout - None
- Sound - Global,Member
- SoundCategory - Member
- Spell - Member,SKSE Member
- Static(固定物) - None
- TextureSet - None
- Topic - Member
- TopicInfo - Member
- VisualEffect - Member
- VoiceType - None
- Weapon - Member,SKSE Member
- Weather - Global,Member
- WordOfPower - None
- WorldSpace - None
- ActiveMagicEffect - Member,SKSE Global,Events
- Alias - Member,SKSE Member,Events
- Debug(デバッグユーティリティー) - Global
- Game(ゲームユーティリティー) - Global,SKSE Global
- Input - SKSE Global
- Math(数値処理ユーティリティー) - Global,SKSE Global
- SKSE - SKSE Global
- StringUtil(文字列ユーティリティー) - SKSE Global
- UI - SKSE Global
- Utility(ユーティリティー) - Global,SKSE Global