エロゲー製作は大変ナリよ(2)

エロゲーは世間では紙芝居と思われている。プログラムも他のコンシューマのゲームに比べて簡単だと思われている。


エロゲーの場合、プログラム自体の規模は確かに小さいのだけども、1996年〜1999年当時、そのプログラム作りが楽かと言えば全然そんなことは無かった。例えばPS1なりPSPのゲームを開発するならソニーからSDKが提供されるし、機種間の差異のようなものは無いに等しい。


Windowsではそうはいかない。特にWindows95/98の時代はビデオカードのバグやサウンドカードのバグが多く、ほとんどのユーザーはメインメモリも少ない上に、マシンもスペックが低く、想定しているフレームレートを出すにはDirectDrawSurfaceを作ってすべてのpixel format(RGB888/555/565,BGR888と256色モードetc..)に対する転送ルーチンを作成する必要があった。*1


もちろん3Dなんて対応していないビデオカードが多数存在していたので、3Dの機能で加色合成やジオメトリ変換をするわけにはいかないし、DIBを作ってもWin95ではリソースハンドルに制限があるのでback surfaceのためにDIBを大量に作っておくわけにはいかなかった。また、16bppの画面モードで動かすのに32bppのDIBを作ることは無駄以外の何者でもなく、結局のところ対応すべきpixel formatをback surfaceに持って、それらすべてのpixel formatに対するエフェクト付き×ジオメトリ変換付きの転送ルーチンをアセンブラで書くしか方法は無かった。もちろん、素のPentiumは遅かったのでMMXやPenII対応のルーチンも用意せざるを得なかった。


当時のマシンはL1/L2 cacheも乏しく、またバスが遅いマザーではビデオメモリへのアクセスに極度のwaitがかかる。そのへんを考慮しながら何度もベンチマークを取り直し、“紙芝居”として見るに耐えるものを作るのはとてつもない苦労があった。


私はそのあとマシンが少し速くなってきたので(とは言ってもユーザーの所有パソコンの平均はCeleron300MHz程度だったけども)「多少は遅くなってもいいか」と思い、GTL(Graphic Template Library)というC++のtemplateで書いたグラフィックライブラリを作成し、それを自分の開発していたyaneuraoGameSDK2ndに取り入れた。このへんの技術内容はThe deep inside of Windows12に詳しく書いてある。あと、拙著Windowsプロフェッショナルゲームプログラミング2にも詳しく書いてある。すでに絶版だけど(´ω`)


ついでに言えば、当時画像圧縮や音声圧縮(いまならoggなどがある)の標準形式が無かったので自前で可逆圧縮のルーチンを書いたり、DCT(離散コサイン変換)などで音声を不可逆圧縮するルーチンなども書く必要があった。


結局のところ、当時はそのような状況だったので“たかだか”エロゲーと言えども内容のわりに想像しがたいプログラムの開発コストと高度な技術力が必要だったのだ。(つづく)

*1:DirectXを用いて拡大縮小などはDirectX3のDirectDraw::Bltに任せる方法も考えられるのだが、当時拡大縮小をHALでサポートしているビデオカードはそんなに多くなかったので、HALでサポートされていないと劇的に遅くなる当時の事情から察するに、そんな方法はまともなプログラマの居るメーカーならばしていなかったと思われる。