SCDIS: MSFS Scenery Disassembler for SCASM

version 1.9
copyright (C) 1996-2000 by Takuya Murakami

This document is written in Japanese. English document is here.

はじめに

SCDIS は Microsoft Flight Simulator ver 5 以降のシーナリファイルである BGL ファイルを解析し、シーナリコンパイラ SCASM のソースファイルに変換する ソフトウェアです。

生成されたソースファイルを SCASM でコンパイルし、再び BGL ファイルを 生成することが可能です。

テクニックの学習や、シーナリ修正の目的などにお使いください。

逆コンパイルの問題点

「逆コンパイラは、 SCASM, BGLCOMPと BGLGEN 用のものについてはリリースされて いますが、 FSASM用のものはリリースされていません。 悪用される可能性があるた め、逆コンパイルに反対するむきもあります。 良心的でないシーナリの作成者が他 人のシーナリの内容を盗み、それを彼らのシーナリ中でクレジットを与えずに使用し - さらにはそのシーナリを売る、といった事件が起きているという報告がありま す。」
World Wide Guide to FS Scenery Design より引用
http://flightinfo.ens.ne.jp/tmurakam/wwgscd-j/index.htm
このような問題を防ぐため、シーナリの原作者の著作権を*必ず*守ってください。 これに同意できない場合は、このソフトウェアを使用してはなりません。

使用条件

他のシーナリ作者によるシーナリファイルを解析する場合、原作者の著作権を尊重 してください。解析して得たソースファイルを、シーナリの作者の同意なしに配布 したり、一部または全部を別のシーナリ中で使用してはなりません。

SCDIS はフリーソフトウェアで無料で使用することができますが、public domain ではありません。SCDIS に関する全ての権利は村上卓弥が保持しています。

SCDIS は商用/非商用目的のどちらでも使用することができます。

配布条件などについては、以下の BSD style copyright に準じます。

Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions
are met:
1. Redistributions of source code must retain the above copyright
   notice, this list of conditions and the following disclaimer.
2. Redistributions in binary form must reproduce the above copyright
   notice, this list of conditions and the following disclaimer in the
   documentation and/or other materials provided with the distribution.

THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
SUCH DAMAGE.

ファイル一覧

ソースファイルは開発者向けのものです。通常は必要ありませんので削除して しまっても構いません。

動作環境

Windows 95/98/NT のコマンドプロンプトで実行できます。 (ver1.5 から、DOS 環境はサポートしないことにしました。御了承ください。)

なお、UNIX 上で使用することももできます。UNIX 対応の節を御覧ください。

使い方

scdis は Windows9x/NT のコマンドプロンプトから使用してください。 使い方は以下の通り。
    scdis [オプション] <シーナリファイル名> <出力ディレクトリ名>
シーナリファイル名は、BGL ファイルのファイル名です。出力ディレクトリは解析 結果の SCASM ソースファイルの出力ディレクトリ名です。存在しない場合は作成 されます。なお、出力ディレクトリ名を省略した場合、カレントディレクトリに出 力されます。

オプションには以下の値を指定できます。

	-s  : ラベル名を連番で採番します。-s を指定しない場合は、
	      ラベルは BGL ファイル内のオフセット位置になります。
出力されるファイルは以下の通り。
	scdhead.txt	BGL ヘッダ情報
	scd*.scm	各セクションのソース
	compall.bat	SCASM で一括コンパイルするためのバッチファイル
	sclink.ctl	SCLINK 用コントロールファイル
scdhead.txt には BGL ヘッダの情報が出力されます。(これは SCASM ではコンパ イルできません。)

BGL ファイルは 22 のセクションから成り立っています。scdis で解析できるセク ションは以下の通り。

	Section 0     : VOR, ILS
	Section 1-6   : Synthetic Scenery
	Section 9     : Procedural Scenery
	Section 10    : Library
	Section 11    : Airport
	Section 13    : ATIS
	Section 14    : NDB
	Section 15    : Dynamic Scenery
	Section 16    : IMO Marker, Landme, Area16
	Section 19    : Exception
各セクションの解析結果はセクション別のファイル名に格納されます。例えば、 セクション 0 については、ファイル名は scd0.scm になります。

それ以外のセクションは、各 LatRange(緯度の範囲)毎に1つのファイルが生成 されます。セクション9なら、ファイル名は scd9-1.scm, scd9-2.scm ,... とい うように順に名前がつきます。これは SCASM は一度に一つの Latrange しか1フ ァイル中で取り扱えないためです。

再コンパイル

ほとんどすべての scm ファイルは SCASM で再コンパイルできますが、Section10 に ついては SCASM がサポートしないためコンパイルできません。

なお、SCASM は最新のものを使用してください。SCDIS が出力するコードは、 古い SCASM ではコンパイルできないものがあります。

最新の SCASM は単体では配布されていないので、Abacus 社の Airport & Scenery Designer を購入するか、 他のフリーのツールに添付されているものを使用してください。 現時点では、Airport Facility Directory (http://www.fly.to/scenery) に添付されているものが ver 2.30 とかなり新しいです。

compall.bat を実行すれば全ファイルを bgl ファイルにコンパイルします。 なお、Section 19 については、exclude.bgl というファイル名の BGL ファイルが 生成されるようになっています。

できたファイルを1つにまとめるには sclink を使用してください。 sclink sclink.ctl と実行すれば、output.bgl というファイルにまとめたファイル が生成されます。

FS2000 について

FS2000 の BGL ファイルは圧縮されており、SCDIS で直接解析ができません。 Microsoft は BGL ファイルの compressor/decompressor を公開しています ので、これを Microsoft の website から入手し、BGL ファイルを展開してから SCDIS で解析してください。

ソースファイルについて

付属のソースファイルは一般的な ANCI C コンパイラでコンパイルできます。 Visual C++ 4.0 の場合は、scdis32.mdp ファイルを開いてビルドしてください。

ただし、util.c 中で _mkdir() というランタイムライブラリを使っているので、こ こだけ書き換える必要があるかも知れません。

UNIX 対応

SCDIS は UNIX 上で動作させることも可能です(事実、SCDIS の Ver1.9 からは FreeBSD 上で開発しています。) コンパイルは、ソースディレクトリに行き make するだけです。

なお、big endian のマシンで使用する場合は、type.h の先頭で BIG_ENDIAN を define してコンパイルしてください。ただしテスト はしていません。

参考文献

また、特に以下の方に感謝します(敬称略)
	下里 康一
	MOJ
	Gene Kraybill
	Winfried Orthmann
	Alessandro Antonini
	Jim Reuter

バージョン履歴

Ver0.1		最初のバージョン。CPAJ 内でのみ公開。

Ver0.2		非公開

Ver0.3		'97/1/20
		非公開
		殆どのセクションを解析できるようにした。

Ver1.0		'97/2/1
		公開版

Ver1.1		'97/2/16
		ILS glide slope angle の解析が変だったのを直した
		TransformCall の回転角の解析を修正した
		RunwayData の ID の解析を修正した
		ATIS の runway id の解析を修正した
		Section9 の以下のレコードを解析するようにした
			0x1d 	- VPPolygon
			0x42	- Runway
			0x7F	- City
		Section9 の以下のレコードをダンプするようにした
			0x17	- unknown, length = 4
			0x40	- RefPointInd
			0x41	- CondCall41
			0x62	- PointList
			0x6d	- CondJump6D
		Section9 の以下のレコード長を修正した
			0x82	- SimpleRefPoint (20bytes)

Ver1.2		'97/2/23
		南・西半球で緯度・経度の計算が違っていたのを修正
		Section9 の以下のレコードを解析するようにした
			0x1c	- IfVarRange2
			0x1d	- VecPoly
			0x21	- IfVarRange3
			0x28	- BigDot
			0x34	- CondJump34
			0x72	- RunwayLights
		Section9 の以下のレコードをダンプするようにした
			0x1b	- GoIfOutRotatedCube(SceneryMaker)
		ATIS メッセージ最大長を 255 キャラクタにした

Ver1.3		'97/3/15
		いくつかのバグ修正
		Section9 の以下のレコードを解析するようにした
			0x15	- TexRelief
			0x1b	- MonitorTr
			0x34	- SetScaleX
			0x58	- MoveTexture
			0x5d	- RepeatBitmap
			0x62	- MonitorPt
			0x6d	- IfHRes
			0x75	- PerspectiveSurface
			0x83	- SetScale

Ver1.4		'97/3/16
		VectorJump 解析のバグ修正

Ver1.5		'97/10/15
		バグ修正
		ドキュメント修正
		DOS 環境のサポートを終了
		Section9 の以下のレコードを解析するようにした。
			0x8c	- CallDll

Ver1.6		'97/10/26
		処理速度を向上
		実行ファイル名を変更

Ver1.7		'98/2/14
		VOR の名前表示が変だったのを修正
		Section 0 の レコード 0x14 を読み飛ばすようにした。
		Section9 の以下のレコードを解析するようにした。
			0x54 	- CallAsm
		Section16 の全レコードを解析するようにした。

Ver1.8		'99/10/16
		Section19(GenIncl) の解析を行うようにした。
		使用条件を変更。
		ドキュメントの fix。

Ver1.9		2000/1/15
		Section10(Library) の解析を行うようにした。
		取り扱えるラベルの上限値を無制限とした。
		-s オプションの追加
		以下のレコードを解析するようにした。
			ShadowPos/ShadowPosInd/ShadowCallVI
			IfVRes
			SetVar7E
			Transparency
			Call32
			TimeZone
			StartTimer
			PtichCall
			Transparency
			PolyM
			MoveToPos1/MoveToPos5
			TaxiTo
			MonitorRwy
			SetWeather
			Weather
		以下の命令の出力が間違っていたのを修正
			IfVarRange
			LandMe
			Block
			RunwayData/RunwayLights

作者への連絡方法

SCDIS への要望、バグ情報があれば作者まで連絡してください。 連絡は電子メールで行ってください。
E-Mail: tmurakam@mtd.biglobe.ne.jp

SCDIS のホームページ : http://www.freesc.org/
作者のホームページ : http://flightinfo.ens.ne.jp/tmurakam/


村上 卓弥 - tmurakam@mtd.biglobe.ne.jp