Scenery SDK は Flight Simulator 98 : Software Development Kit の第4パート にあたり、FS98 のシーナリファイル構造の解説と、シーナリ作成方法について述べたものになっています。
従来、BGL ファイルの構造は "FS5STRUC" で解説されていましたが、これは Microsoft 公式のものではありませんでした。公式なドキュメントが Microsoft から公開された ことは歓迎すべきことです。
SDK は量が結構あるので、全部を解説するのは大変ですので、つまみ食い的に 役に立つ情報だけを選んで解説したいと思います。
なお、Scenery SDK はここからダウンロードできます。
今回、Scenery SDK の公開にあたり、Microsoft 社内で 使用されている(であろう)正式なコンパイラが公開されることを期待していました。
が、蓋をあけてみるとコンパイラは含まれておらず、MASM (Microsoft 社のアセンブラ)を使って BGL ファイルを作成するようになっています。これにはやや失望しました。まさか、BAO や Microsoft は全てのシーナリを MASM で作成したのでしょうか? とてもそうは思えないのですが、、、
そのかわり、MASM で使用するためのマクロファイルが添付されています。これを使えば SCASM のような感じで BGL ファイルの作成ができるようです。でも、BGL ヘッダなども 全部自分で作成しなければならないので、かなり面倒です。
ちなみに SCASM では右手座標系ですので、y軸と z軸が逆になります。 SCASM で座標指定するときに、"x z y" の順に指定するのはこういうことだったのです。
Scenery SDK ではセクションという言葉は使われておらず、「Entities」という 呼び方がされています。 ここでは、従来のセクションと Entities の対応を示します。
Section | Entities |
0: VOR | VOR_DATA |
1: Synthetic Scenery | SYNTH_SEEDS_08 |
2: Synthetic Scenery | SYNTH_SEEDS_09 |
3: Synthetic Scenery | SYNTH_SEEDS_10 |
4: Synthetic Scenery | SYNTH_SEEDS_11 |
5: Synthetic Scenery | SYNTH_SEEDS_12 |
6: Synthetic Scenery | SYNTH_SEEDS_13 |
7: Unattested | SYNTH_SEEDS_14 |
8: Unattested | SYNTH_SEEDS_15 |
9: Procedural scenery | OBJECT_DATA |
10: ?? | LIBRARY_DATA |
11: Airports | FACILITIES_DATA |
12: ?? | ANCHOR_POINTS |
13: ATIS | COM_DATA |
14: NDB | ADF_DATA |
15: Dynamic scenery | DYN_PATH_DATA |
16: IMO markers, land-me | MISC_DATA |
17: ?? | TITLE_DATA |
18: Magnetic variation | MAGDEC_MAP |
19: unattested | EXCEPTIONS_DATA |
20: unattested | spare 1 |
21: unattested | 0 (not saved to file list) |
以下のことが判明しました。
上下に積み重なったオブジェクトの場合はうまくソートされないので、ADDOBJコマンドを使って radial sort list に手で登録を行う必要があります。ADDOBJ コマンドは、SCASM の PerspectiveCall のことです。
なお、radial sort list には2本あり、一本はオブジェクト用、もう一本は山用です。 山用の radial sort list 追加コマンドは ADDMNT コマンド(注:添付マクロ内では ADDMTN になっている)です。これは SCASM の PerspectiveSurface コマンドのことです。
なお、radial sort list のサイズはシーナリの complexity によって決まります。
Complexity | Radsort buffer size |
0 | 200 |
1 | 200 |
2 | 400 |
3 | 400 |
4 | 600 |
アイテムを category list に追加するには ADD_CAT コマンドを使います。 これは SCASM の LayerCall コマンドに相当します。
C_BLACK EQU 00000f000h C_DKGRAY EQU 00000f001h C_GRAY EQU 00000f002h C_LTGRAY EQU 00000f003h C_WHITE EQU 00000f004h C_RED EQU 00000f005h C_GREEN EQU 00000f006h C_BLUE EQU 00000f007h C_ORANGE EQU 00000f008h C_YELLOW EQU 00000f009h C_BROWN EQU 00000f00ah C_TAN EQU 00000f00bh C_BRICK EQU 00000f00ch C_OLIVE EQU 00000f00dh C_WATER EQU 00000f00eh C_BRIGHT_RED EQU 00000f00fh C_BRIGHT_GREEN EQU 00000f010h C_BRIGHT_BLUE EQU 00000f011h C_BRIGHT_AQUA EQU 00000f012h C_BRIGHT_ORANGE EQU 00000f013h C_BRIGHT_YELLOW EQU 00000f014h C_BRIGHT_WHITE EQU 00000f015h C_CONST_WHITE EQU 00000f016h C_DARK_RED EQU 00000f017h C_DARK_GREEN EQU 00000f018h C_DARK_BLUE EQU 00000f019h C_DARK_ORANGE EQU 00000f01ah C_DARK_YELLOW EQU 00000f01bh C_DARK_BROWN EQU 00000f01ch C_DARK_TAN EQU 00000f01dh C_DARK_BRICK EQU 00000f01eh C_DARK_OLIVE EQU 00000f01fh C_MED_RED EQU 00000f020h C_MED_GREEN EQU 00000f021h C_MED_BLUE EQU 00000f022h C_MED_ORANGE EQU 00000f023h C_MED_YELLOW EQU 00000f024h C_MED_BROWN EQU 00000f025h C_MED_TAN EQU 00000f026h C_MED_BRICK EQU 00000f027h C_MED_OLIVE EQU 00000f028h C_LIGHT_RED EQU 00000f029h C_LIGHT_GREEN EQU 00000f02ah C_LIGHT_BLUE EQU 00000f02bh C_LIGHT_ORANGE EQU 00000f02ch C_LIGHT_YELLOW EQU 00000f02dh C_LIGHT_BROWN EQU 00000f02eh C_LIGHT_TAN EQU 00000f02fh C_LIGHT_BRICK EQU 00000f030h C_LIGHT_OLIVE EQU 00000f031h C_BRIGHT_DKGRAY EQU 00000f032h C_BRIGHT_GRAY EQU 00000f033h C_BRIGHT_LTGRAY EQU 00000f034h G_DKGRAY EQU 00000f001h G_GRAY EQU 00000f002h G_LTGRAY EQU 00000f003h G_WHITE EQU 00000f004h G_RED EQU 00000f005h G_GREEN EQU 00000f006h G_BLUE EQU 00000f007h G_ORANGE EQU 00000f008h G_YELLOW EQU 00000f009h G_BROWN EQU 00000f00ah G_TAN EQU 00000f00bh G_BRICK EQU 00000f00ch G_OLIVE EQU 00000f00dhTo be continued...