Arueの開発にっき(というかエピソード) with Hgimg3

事の発端

 毎年参加させていただいているHSPコンテストですが、今年は仕事とか忙しさ相俟ってショート部門のみの参加にしようと一発ネタスクリプトを用意していたのですが、ひょんな出来事から今年も一般部門で参加することに決めました。しかし日が無い。開発しようと思い立ったのが10月4日頃。参加するからにはちゃんとしたものを作りたいし、コンテスト締め切りまでの間にどれ程のものが作れるのだろう?開発を決めたからにはこの時点で作りたいもの(本作品の構想)はあったのですけど、時間的に可能なのかと。
  HSP3に標準搭載されている3D関係を処理するプラグイン、「hgimg3」の最新版では今までのバージョンになかった精密な地形との当たり判定機能がついているらしい。なによりHSPには思ったものをすぐに形に出来る優れた生産力がある。それらに賭けてみようと、開発を決行したのだった。

駄目だった

 今まで使っていたhgimg3.1から最新版のhgimg3.2にバージョンアップ。早速地形を作成し地形との当たり判定を実験してみようと最新機能に触れてみること1分。緊急事態発生。最新版についていた地形との精密な当たり判定機能とは、ビットマップ画像の濃淡を高さデータとして作成されたメッシュの高低を判定するものに過ぎなかったのだ。オリジナルモデルでの当たり判定は不可能!うそーん!

自分で作ることにしよう

 hgimg3最新版は前バージョンでのバグも直っていないようだし最新機能も本作では適合しないシステムだったこともあり、前まで使ってた慣れたバージョン(3.1)へhgimg3をバージョンダウン。半分ヤケになり当たり判定は自分でモジュールを作ることに決めた。が、またしても問題発生。ポリゴン単位で精密な当たり判定をするには、当然ひとつひとつポリゴンの座標から当たり判定を計算する必要があるんですけど、インタプリタ言語であるHSPでそれをすると途方も無い処理時間がかかってしまう。少ないポリゴン数であれば処理に耐えるにしても、起伏溢れる自然の大地で敵を無数に配置してそれ全てを毎ループ(60FPS)で当たり判定を行うにはあまりに無理がある!遅い!滅茶苦茶遅い!処理速度問題という物理的壁に阻まれつつ、諦めずにキーボードを叩き頭を捻りながら処理の高速化を試みる。奮闘の末、超高速な当たり判定システムをモジュールで組み込むことに成功。hgimg3に命令ひとつで判定可能なXモデルの精密な当たり判定機能が宿ったのだった。

更なる難関

 気を取り直しマップの作成にかかる。が、ここでもまた問題が発生。メイドさんが活躍する庭では当然木が茂りや花咲き乱れる庭園。hgimg3では透過を含むX形式を上手く扱えない半透明部分のZソートが上手くいかず、綺麗に半透明合成されない)。よって葉の一枚一枚や花びら、茎などをすべてポリゴンで作ることにする。この方法では瞬く間にポリゴン数を浪費し、マップに花を数十本植えただけで1000ポリゴン2000ポリゴンとどんどんデータが重たくなって実用に耐えないのだ。
 この問題は現行のゲーム機ではビルボード(1枚のポリゴンに花や木の絵を貼り付けて表示する技術)を使用することで、たった1、2枚のポリゴンで複雑な花や木を表現し処理を軽くしているのだが、hgimg3でこの方法が使えないとなるとなると、hgimg3で唯一透過カラーをサポートしているaddplate命令によって草木を配置するシステムを独自に組まねばならない。迷ってる時間もないので大急ぎでそのシステムを作成。実行。そしてまた問題にぶつかる。先に述べた半透明の合成がうまくいかない問題だ。透過・表示部分の中間の合成に失敗する。駄目!使えない!
  だがこの問題も諦めずに合成方法を試行錯誤し解決の糸口を見つける。こちらが正しい合成に成功した状態。尚、同じ方法でアルファカラーを含むモデルも解決できるようだが、処理落ちがあまりに酷く実用に耐えなかった。ともあれhgimg3でXファイル上の任意の位置にビルボードを設定する機能を組み込みむことに成功!‥というか早くゲーム本編の開発に取り組まないと時間がヤバイ。

メイドさんを作る

 やっと主役であるメイドさんの作成にかかる。下絵を描きモデリングを行い骨を埋め込みモーションを作る。この間約1日。実際にゲーム画面に登場させ動かそうとしてみるも、ここでまた問題が発生。hgimg3にはモデルのスイッチング機能(モデルに装備品を付け替えたりするあの機能)がない。ほうきを違うものに持ち替えたりできないのだ。実現するためには装備品を人間のモデルに含めてしまい、装備品の数と同じ量の同一の動きのモデルを全て用意する必要がある。→後からひとつ修正が加われば全部作り直しになる!膨大な作業数になる‥。この方法じゃ絶対間に合わないです。
  ‥何とかならないものかと研究の末、この問題も何とか解決させた。hgimg3にXモデルの任意のボーンに対して装備品を付け替えるスイッチング機能をモジュールとして組み込むことに成功。なんだか機能的にはHSPの3DプラグインのEasy3Dに近づいてきたけど気にしない。構造的にはhgimg3の方が簡単で理解し易いのでこのままhgimg3で開発を続行する事にする。

あとはいつもどおりさっ

 無数の難関にぶち当たるも何とかクリアしながら目的のゲームが完成していく。シビアなスケジュールの中音楽やキャラクターボイスの開発にご協力くださったO.S.様と鏡優以様に感謝!完成品を10月31日の締め切りに提出するミッションは無事に成し遂げられた。忙しいスケジュールの中裂いた時間は全てゲーム開発に専念していたためオフィシャルサイトの作成やプロモーションムービーの作成は叶わなかった。同人ソフトにしようと企画していたのでアップロード申請がコンテスト出展と同時になってしまい、体験版が公開された時点で製品版の販売が開始されないという事態になてしまったのが反省点である。だがこの短期間で作品を作り上げる事ができたのもHSPの凄まじい生産力あってのことだと思う。今後更に開発がしやすくなるHSP3に期待したいところです。

追伸

 ‥ところで今回実現に時間がかかったX形式のモデルの精密な当たり判定機能やZソートを配慮した半透明合成または扱い易いビルボードの透過、モデルのスイッチング機能はなぜ標準で付いてこないのだろう?これがあればhgimg3で容易に開発できるゲームジャンルが一気に広がるような気がするのですけど‥ウーン。そういえばhgimg3の講座とかも機会があったらやろうかしら。巷では情報が少ないらしい。