はじめに
このメモを書いている2019年からもう十年近く前にあれこれ弄っていた「M.U.G.E.N.」(*1)という格闘ゲームエンジンがあるのだが、このゲームではキャラクターやステージを構成するスプライトのファイル形式として「.pcx」形式が使われていた(*2)。当時は特に気にしていなかったのだが、今になって「あの.pcxファイルってなんだったんだ?」とふと疑問に思い、.pcxとそれをとりまくアレコレについて調べてみた。
.pcx形式について
.pcx形式の概要
.pcxは米国のソフトウェア会社ZSoft Corporationが開発したMS-DOS向けの画像編集ソフト「PC Paintbrush」が標準形式として採用する形で開発されたラスタ形式の画像フォーマットで、そのPC Paintbrushが広範に受け入れられたことからMS-DOSにおけるラスタ画像のデファクトスタンダードとして広まったという経緯がある。先にソフトありきで、ソフトが幅広く支持されたのでそれに追随する形で.pcx形式も広まったということのようだ(*3)。
.pcxという拡張子の由来
拡張子の「.pcx」とは何か。察しが付く人もいそうだが、これは「PiCture eXchange」(画像交換)の略(*4)である。
……とずっと思っていたのだが、今回ちょっと調べてみたところGIMPやLibreOffice Drawなどでは「Personal Computer eXchange」の略として扱われている。どちらにせよ意味は通るが、前者は頭文字の取り方がやや不自然、後者は何の交換フォーマットなのかが不明瞭、と今一つスッキリしない。
どちらにせよ「Exchange」が含まれていることは間違いなく、「Graphics Interchange Format」由来の.gifや「Data eXchange Format」由来の.dxfなんかとノリは同じと言えるだろう。画像ファイル(Picture)のデータ交換用(Exchange)に作られたフォーマットということである。
.pcxフォーマット
サポートする形式
さて、.pcxがMS-DOS時代の画像データ交換目的で作られた形式であると分かったところで、次は具体的に.pcxファイルがどのようなファイルかについて記載する。フォーマットが定められた時代が時代だけに、中身は非常にシンプルである。
圧縮形式
- 無圧縮
- RLE(ランレングス圧縮)
色数
- 2色
- 4色
- 8色
- 16色
- 256色
- 約1677万色
パレット形式
- カラー
- グレースケール
……と、ここまで書いておいてなんだが、サポートしている画像の形式は.bmpと大体同じである。圧縮形式としてRLEを採用している辺りも似ている(*5)。
データ構造
128byteのヘッダとデータ部分、そして768byte(*6)のパレット部からなる。
ヘッダについては以下のような構造になっているようだ。
struct PCXFileHeader { uint8_t Identifier; uint8_t Version; uint8_t Encoding; uint8_t BitsPerPixel; uint16_t XStart; uint16_t YStart; uint16_t XEnd; uint16_t YEnd; uint16_t HorizontalResolution; uint16_t VerticalResolution; uint8_t EGAPalette[48]; uint8_t Reserved1; uint8_t NumBitPlanes; uint16_t BytesPerScanline; uint16_t PaletteType; uint16_t HorizontalScreenSize; uint16_t VerticalScreenSize; uint8_t Reserved2[54]; };
chikuchikugonzalez氏のサイトに詳しい構造が載っている(*7)。
PC PaintbrushとZSoft Corporation
.pcx形式がどんなファイルなのか大まかに理解できたところで、.pcx形式を採用したペイントソフト「PC Paintbrush」と、それを開発した「ZSoft Corporation」について述べる。
PC Paintbrush
PC Paintbrushのファーストバージョンがリリースされたのは1984年。時期的にはMS-DOS 1.xに相当する。マウスを使って直感的に絵が描けるという点が高く評価されて大ヒット商品となり、1987年にはマイクロソフトのマウス製品にMicrosoft Paintbrush 2.0の名称でバンドルされ広く販売された。
このような形で広まりつつもPC Paintbrushとしても併存し、バージョンV(*8)までバージョンアップされた。その後マイクロソフト系OSの主流がMS-DOSからWindowsへ移り変わってゆく過程でバージョン番号がリセットされ、1993年にWindows 3.0向けへPC Paintbrush for Windows 1.0の名称でリリースされた(*9)。これより新しいバージョンはリリースされておらず、公に知られているPC Paintbrushの最終バージョンとなっている。
ZSoft Corporation
開発元であるZSoft Corporationはどうか。PC Paintbrushのヒットで一躍有名になるも、1989年にActivisionのビジネスソフト部門であるMediagenic社に買収される。その後Mediagenicの解散に伴い再度独立するも、1993年にはWordStar社に買収され、そのWordStar社は1994年にSoftkey社と合併、そしてSoftkey社は1995年にThe Learning Company社に買収された(*10)(*11)。
短期間に何度も起きた買収や合併の過程のどこかで、PC Paintbrushはもはや不要と判断されたのだろう、SoftKey社時代に上記のPC Paintbrush for Windows 1.0をリリースして以降、今に至るまで音沙汰がない。ZSoft Corporationも同様である。
なぜM.U.G.E.N.は.pcx形式を採用したのか
.pcx形式とPC Paintbrush、そしてZSoft Corporationについては以上のとおりである。画像形式もソフトウェアも開発元もMS-DOS時代に一世を風靡したが、それらは皆Windowsへ移っていく過程で静かに消えていったというのがお分かりいただけたかと思う。ここで話が冒頭へ戻って、M.U.G.E.N.はなぜこの.pcx形式のファイルを標準的な画像フォーマットとして採用したのかについて考えてみたい。
リリース時期から探る採用理由
これについては具体的に誰かが背景について語ったわけではないので、大部分が推測・想像に過ぎない点はご容赦いただきたい。
M.U.G.E.N.の開発元であるElecbyteの公式サイトをInternet Archiveで遡ってみると、M.U.G.E.N.の初回リリース日が1999-07-27であることが分かる(*12)。M.U.G.E.N.のそれなりに複雑な機能を鑑みると、恐らく2年くらいは開発に充てていたのではないかと思われる。なので、開発が始まったのは早くとも1997年中頃と推測する。この頃はまだMS-DOS上で動作するゲームが数多く存在(*13)し、特にレスポンスの早さが求められるアクションゲームはMS-DOS向けのものが大半を占めていた。よってM.U.G.E.N.はMS-DOSをターゲットとして開発が開始されたと想像がつく。(*14)
先の通り.pcx形式の画像はMS-DOS上での利用を前提としている側面があり、MS-DOSでは扱いやすかったと考えられる。ドキュメントやライブラリの類も充実していたのだろう。ここから考えると、MS-DOS向けに開発されたM.U.G.E.N.の標準画像フォーマットが.pcxとなるのも納得、ではなかろうか。
仮にWindows版のM.U.G.E.N.が当初予定通りに正式リリースされていればそこで.bmpなり.pngなりがサポートされた可能性もあるが、Windows版開発途中の2001年頃にElecbyteが失踪、実際に.pngのサポートが追加されたのは実に10年後にリリースされたM.U.G.E.N. 1.0からである(*15)。