ABCDEFGHIJKLMNOPQRSTUVWXYZ
1
主に謎人間を使ったミッションを作成するためのものです。
2
3
「範囲外」のモデルは描画時にDrawModel関数でクラッシュしてしまいますが、
モデルのマテリアル数を持つ配列(g_modelMaterialCounts)の値を境界外から読み取った結果が0以下であればそもそも描画されないのでクラッシュしません。
4
「範囲外」のテクスチャは値が「0」なら白色で描画され、それ以外の不正な値だとクラッシュするようです。
5
これについては未定義人間のテクスチャであれば、人テクスチャを10種類しか読み込めないバグを応用すれば多分防げます。
6
なお、XOPS再現プロジェクトでは、「範囲外」となっている値を使用した際の動作の再現はしない予定です。
7
基本的に、「範囲外」のデータを持つ行は実行時にクラッシュするおそれがあることをご承知おきください。
8
9
武器
10
全武器パラメータの値は全バージョンともに実行時に変動しない領域にあります。
11
ただしテクスチャ / モデル / 腕モデル の値の参照先が実行時に変動する領域にあるものもあります。
12
銃声が範囲外の場合、発砲時にのみクラッシュすることがあります。
13
各パラメーターはint16で定義されていますが、攻撃力や弾速などはint8にキャストされて計算されます。
14
15
小物
16
興味深いものはほとんどありません。
17
ほとんどがHPが0以下のためすぐに消滅します。
18
19
20
時間がなかったので0.975tの情報のみです。
21
それぞれの値は0.975tではすべて.rdataセクションの範囲です。
22
各パラメーターはint16で定義されていますが、AIレベル&武器番号についてはキャラ実体の構造体へ代入時にint8にキャストされます。
23
24
XOPSには全テクスチャを格納する配列(g_textures)がありますが、人のテクスチャ用に割り当てられている領域は20~29番の10種類分しかありません(人のテクスチャは全部で30種類あります)。
25
人テクスチャ変換配列とは、30個(人の種類分)の整数を持つ配列(g_characterTextureIdxToTextureIdx)です。各マップの読み込み時に人テクスチャを読み込む際に、
配列[マップ上で使用されている人のテクスチャ番号]の位置にg_texturesの添字が代入されます。ただし11種類目からは読み込まれません。
26
27
人テクスチャ番号がこの変換配列の境界外を指している場合、当該地点の値をゴニョゴニョできるなら任意のテクスチャを使用することもできます。
28
例えば0.975tでは、人種類番号-25の場合、mifのブリーフィング文章の(0から数えて)10バイト目に「#(skyのテクスチャ番号「0x23」)」
を入れておくと、↓このようになります。
29
30
←ちなみに本家XOPSのタイトルの高さはSATの再現プログラムよりも小さめなのですが、
 どうやらウィンドウスタイルの違いではなくPEヘッダのSubsystemVersion(最低OSver)が4.0(Windows 95)であるのと関係があるようです。
 SATのXOPS再現プロジェクトではこの仕様を再現しない予定です。
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100