User:Caron/CTTutorial Japanese/Presence flag
Presence flag(存在フラグ、以下PF)とは、配置したオブジェクトの表示設定を決めるパラメータのことです。KMP/GOBJの0x3A(サイズ:0x02)のことです。
パラメータはBool型で、標準では次の通りです。
15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
未定義 | 3人以上のマルチ(オンライン) | 2人マルチ(オンライン) | シングル(オンライン) | 3人以上のマルチ(オフライン) | 2人マルチ(オフライン) | シングル(オフライン) |
各パラメータがTrue(=1)であればその状況でオブジェクトを表示、False(=0)であれば非表示となるといった構造です。デフォルトでは0x3F(=0000 0000 0011 1111, いかなるモードでも表示)が最も多く、ワリオ鉱山のワゴンなどではスローダウン対策のために9(=0000 0000 0000 1001, マルチプレイでは非表示)が使用されたりしています。
…というのがcourse.0に記載されていた内容なのですが、実は上の3~5bitの間は意味がありません。どうやら開発途中でオフラインとオンラインの表示設定が統合されたため、実際に効果のある範囲が0~2bitまでになったと思われます。そのため、正しくは次の通りです。
15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
未定義 | 3人以上のマルチ | 2人マルチ | シングル |
このことから、標準で使われている3Fは07に、09は01に置き換えても問題はないことになります。実際に、Lorenzi's KMP Editorではオブジェクトを追加する際にデフォルトで07になるようになっています。
Extended Presence Flag (XPF)
Extended presence flags(以下、XPF)とはPFの拡張として、単なるプレイヤー数だけで表示設定を変える以外にも、タイムトライアル限定やバトルでのシングルとマルチ、アイテムレイン、レース中のプレイヤー人数などの場合でもオブジェクトの表示設定を変えれるようになります(LE-CODE限定、CT-CODEでは未実装)。PFは元から6~15bitが未定義であったため、XPFはこの部分に加えて、GOBJのObjectID(0x00、12bit以降)、未使用であったPadding(Reference, 0x02)を利用しています。
XPFではPF及びObject ID、Referenceは次のように再定義されています。
Presence Flag
ビット(LSB) | 説明(LE-CODE) | 説明(それ以外) |
---|---|---|
0 | 未定義(モードが1以上のときは無視) | シングルでの表示(1=on, o=off) |
1 | 2人マルチプレイでの表示(1=on, o=off) | |
2 | 3人以上のマルチプレイでの表示(1=on, 0=off) | |
3-5 | 未定義 | |
6-11 | モード依存のパラメータ | |
12-15 | XPFのモード。1(=0001)でXPFを有効、0で無効(=通常のPFと同じ)になります。それ以上は未定義です。 |
Object ID
モードが1のときの場合です。
ビット(LSB) | 説明(LE-CODE) | 説明(それ以外) | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
1-9 | オブジェクトID(ただし、定義されているのは0x2F3まで) | |||||||||||||
10-11 | 未定義 | |||||||||||||
12-15 |
|
未定義(値が与えられるとnullオブジェクトとして処理されます) |
※ K2X ConverterではオブジェクトのON/OFF(Enable(LE))とモード(Type(LE))を分けているため、BIT=1, OR=2, AND=3で定義しています。
BIT,OR,ANDを有効にしたGOBJ IDは、それ自体がオブジェクトの座標情報ではなく、そのオブジェクトID全体に対する定義になります。この場合、そのGOBJ IDのフォーマットが次のように再定義されます。
オフセット | サイズ | 説明 | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0x00 | Uint16 | オブジェクトID(上記) | ||||||||||||
0x02 | Uint16 | Reference(下記参照) | ||||||||||||
0x04 | Float[9] | 未使用。すべて0にしてください。 | ||||||||||||
0x28 | Uint16 | 未使用。値はFFFFにしてください。 | ||||||||||||
0x2A | Uint16[8] | 定義パラメータ。存在定義の演算に使われるパラメータはこの部分を利用します。
| ||||||||||||
0x3A | Uint16 | Presence flag. モードは1にしてください。 |
各定義パラメータ(サイズ0x02,16bit)は次のような定義になっています。値がTrueであれば処理に応じてその条件においてオブジェクトが表示されます。
ビット(LSB) | 条件 | ネットワーク |
---|---|---|
0 | シングル | オフライン |
1 | 2人マルチ | |
2 | 3人マルチ | |
3 | 4人マルチ | |
4 | シングル+部屋人数トータル6人以下 | オンライン |
5 | 2人マルチ+部屋人数トータル6人以下 | |
6 | シングル+部屋人数トータル7~9人 | |
7 | 2人マルチ+部屋人数トータル7~9人 | |
8 | シングル+部屋人数トータル10~12人 | |
9 | 2人マルチ+部屋人数トータル10~12人 | |
10 | シングル+部屋人数トータル13~18人 | |
11 | 2人マルチ+部屋人数トータル13~18人 | |
12 | シングル+部屋人数トータル19人以上 | |
13 | 2人マルチ++部屋人数トータル19人以上 | |
14 | タイムトライアル(状態パラメータの0x04のみ) | オフライン |
15 | 未定義 |
※14bit以降を除き、全てレースおよびバトルを含みます
モード
Object IDの12-15bitでのモード(BIT,OR,AND)は、オブジェクトIDで指定したオブジェクトの定義に関する設定になります。このモードが有効な場合、そのオブジェクトIDの表示設定などがこのモードの設定に依存します。最終的な表示パラメータの出力はReferenceとのANDになります。
BIT
BITモードは各状態パラメータを個別で処理します。
OR
ORモードはすべての状態パラメータを論理式のORで処理します。定義パラメータのbitのいずれかがTrueであればオブジェクトはその状態において表示されるようになります。
AND
ANDモードではすべての状態パラメータを論理式のANDで処理します。全ての定義パラメータのいずれかのbitがTrueでないと、その定義においてオブジェクトは表示されません。
※Referenceの12bit目が1の場合は、演算結果をNOTとした値が表示パラメータとして出力されます。モードがORの場合は演算がNORで、ANDであればNANDで処理されます。
Reference
オブジェクトの細かな表示条件を指定します。
LE-CODE以外ではこの部分は基本的に無視されます。またKMPCloudやLorenzi's KMP Editorなどはこの部分は表示されずに、値を変えても0で保存されます。このページの更新時点では、KMP3DとK2X Converter、Wiimms SZS Toolsでのみ操作が可能な状態です。
詳細はこちらを参照してください。