「厄落とし」開発日記 (抜粋)


2001/06/13 (水)

「厄落とし」がVectorで公開されました。


2001/06/09 (土)

Vectorに登録申請してから1週間経ったのに、「厄落とし」はまだ公開されていないようだ。


2001/06/01 (金)

夜、「厄落とし」をVectorに登録した。いつものように、未だ入金ゼロの寄付のためにシェアレジ番号を取得し、READMEを書いて、ライブラリ登録FORMを記入してメール送信。おそらく来週の土曜日に公開だと思う。これで一息つけるかな。


2001/05/31 (木)

昨夜「厄落とし」をリリースレベルでコンパイルしたので、会社の Windows 95、98、Meの環境で動作確認。

「厄落とし」をVectorに登録しようかと思ったが、3Dオブジェクト定義ファイルの中に不要な宣言があったので削除した。なので、明日もう一度会社のWindows95などの環境で動くのを確認してから週末にでも登録しようと思う。


2001/05/30 (水)

「厄落とし」の残る懸念はWindows95上での「Invalid floating point operation」エラーだ。初めてWindows95で試したときからこのエラーは発生していた。ここ2週間、わたくしの時間はこの問題と日本語フォントが表示されなかった事にのみ費やされていたと言っても過言ではない。

googleで「OpenGL Invalid floating point operation」で検索したら、あるアプリケーション(?)のQ&Aのページが見つかった。それによると、「Set8087CW(0x133f);」という関数呼び出しでFPUの例外を無効にすることが出来るそうだ。試してみるとあんなに動かなかった「厄落とし」がWindows95でサクサク動く!! すばらしい。サクサクといっても、NT/2000に比べると動きがまったりしている気がする。Windowsのメッセージハンドルの仕方がNT系と95系で違うのだろう。

95系で全角文字を2D表示するためにglBitmapで代用しているのだが、なぜか文字の右側にゴミが表示される。同じコードを2000で実行しても問題なくきれいに表示されるので95系OS自身の問題なのかもしれない。

あと、これは95だけなんだけど、御札のテクスチャがグシャグシャになる。御札が視点から遠くにあって小さく表示されているときはちゃんとテクスチャも描画されるのに、だんだん近づいてきて、ある距離まで来るとテクスチャがホワイトノイズのように乱れてしまうのだ。

この2点が残っている問題なのだが、直せそうもない。制限事項ということになりそうだ。今週末か来週にはVectorに登録できるかな。


2001/05/29 (火)

会社のWindows95でいろいろ試していたところ、たまたまWindows98用のコードを実行してしまったのだが、なんと「厄」の字が3D表示されている。前に試したときは何をやってもダメだったのに。あれはなんだったんだろう。今はプログラムでどのOSかを判断して、Windows95だったら3Dのフォントを使わないで、ポリゴンに「厄」と書いたテクスチャを貼り付けるようにしてる。デバッグ用に常にWindows98用のコードを動かすようにしていたのを忘れてて、そのコードをWindows95上で実行してしまったのだ。

そういうわけで、わざわざポリゴンを貼り付けたりする必要もなく、どのOSでも3Dフォントを使うようにすることができた。


2001/05/28 (月)

先週、OpenGLで日本語フォントを表示する情報を集めていたときに、「Visual Cに日本語を表示するサンプルがある」というのを見たような気がしたので Visual C++ 5.0のCDを見てみると、JTEXT.C というファイルを発見。中を見ると、日本語を3D表示するのではなく2D表示するプログラムのようだ。これを使えば、Windows95系(98、Me)でwglUseFontBitmapsの代わりになりそうだ。

JTEXT.C を見ると、ビットマップを作成してTextOutで文字を描画し、その1プレーンのビットマップをglBitmapで描画してそれをディスプレイリストにしているようだ。このソースをそのままpractice1にくっつけて、NT/2000のときはwglUseFontBitmapsを、それ以外のときはJTEXT.Cのコードを使うようにインプリメント。これで95系でも全角文字が2D表示できるようになった。ちょっとゴミも表示してしまうようだが、まぁいいだろう。半角カタカナを表示するためのコードは削除。

それでWindows95上で試しに動かしていたら、ある場面で「Invalid floating point operation」というエラーが頻発してOS自体が不安定になってしまうという問題が。


2001/05/26 (土)

「厄落とし」のWindows95/98サポートについては昨日考えてた通りにした。半角カタカナは相当カッコ悪いのだが...

奥行き感を出すためにフォグ(Fog、霧)を使ってみたがこれまた思った通りにならない。背景(壁)は(画面の)手前から奥に向かって細長いポリゴンで表現しているのだが、これが長すぎるためかFOGの効果がイマイチなのだ。

大きさ的には「厄」の字が1辺4mの正方形だとすると1000m×25mの長方形のポリゴンが背景である。これにFOGをつけると、「奥に行くにしたがって徐々に暗くなっていく」グラデーション効果が現れるはずなのに、ポリゴンが奥から手前に移動してくるとFOGで暗くなっているところまで手前に流れてきてしまったり、ポリゴンの切れ目で急に明るくなったりする。

細長いポリゴンが何個も奥に向かって数珠繋ぎになっていて、カメラ(視点)を奥に移動させているのだが、そのポリゴンの暗い部分と明るい部分が交互に迫ってくるような画になって、FOGの意味なし。

しょうがないので障害物である御札にだけFOGの効果をつけた。照光処理による壁の明るさは手前も奥も均一のままであるが、手前にある御札は明るく、奥にある御札は暗くすることで、FOGなしの時に比べれば奥行き感が増したのではなかろうか。

もう少しソースを整理したら完成かな。


2001/05/25 (金)

昨日の続き。WindowsNT/2000、98、95でOpenGLの日本語表示の動きがちがうのでどうしようか悩む。まぁ、OS側でサポートしてない機能なのならば悩んでてもしょうがないが、できるだけ多くのOSをサポートしたい。

Windows95で「厄」の字が3D表示できないなら、同じ大きさの板のようなポリゴンを用意して「厄」の字のテクスチャを貼り付けるというのが一番簡単だ。「厄」の字をモデリングするのが一番綺麗なやり方ではあるが、ポリゴン数をあんまり増やしたくないし、3Dモデルを作るのも面倒くさい。「厄」の字を3D表示したところで当たり判定は結局板のような直方体で計算しているんだから、ゲーム性も変わらないし。字の隙間から向こう側の様子が見えなくなるというのが欠点ではあるが、いたしかたあるまい。

Windows95/98で全角文字が2D表示できないのは、思い切って表示する文を半角カタカナにしてしまうってのはどうだろう。どうせ大して意味のある文を表示しているわけではないんだし。ゲーム部分とは直接関係無い日本語の2D表示ができないからって95/98のサポートをしないというのは馬鹿げている。ゲームで遊んで貰いたいんであって、おまけで表示しているテキストを読んで貰いたいわけではないのだ。と、自分を言い聞かせてみるが苦しいなぁ。でもしょうがないかな。全角文字をテクスチャにして画面に貼り付けってのも一つの手ではあるんだけどなぁ。

どうしようかなぁ。


2001/05/24 (木)

会社で「厄落とし」をなんとかWindows95とWindows98で動かそうと試みる。まずはそこら辺に転がっていたWindows95が入っている昔のノートPCでOpenGLで日本語が表示できないものか試す。が、大してwglUseFontOutlines関数やwglUseFontBitmaps関数について解っているわけではないので何の進展もない。

いじっているうちに「包」の字が3D表示されて、惜しいって感じ(←字の形が似てるから)。というかどういう原理で「厄」の字が「包」の字になったのか謎。結局漢字が3D表示されたのはその1回だけで、その後プログラムをいじってからはどうやってもその「包」って字ですら2度と現れなかった。

インターネットで「OpenGL」、「日本語」、「フォント」で検索してみたら、公式情報かどうかはわからなかったけれどWindows95のWGLでは日本語表示はサポートされていないという情報を見つけた。日本語表示はWindows NT以降だという書き方だった。ホントかな〜。

それならば、次はWindows98だ。こっちは日本語表示をサポートしているはず。なぜなら、Vectorに日本語を3D表示するWindows98対応のソフトが存在するからだ。でもなかなかうまく日本語表示できない。NTや2000では文字列をUnicode化してwglUseFontOutlinesW関数やwglUseFongBitmapsW関数を呼べばちゃんと表示できる。Windows98のWGLはどうもUnicode対応ではなさそうなので、ShiftJISのキャラクターコード(2バイト)をwglUseFontXXX関数に渡してやればよさそうに思える。そういうプログラムを書いているつもりなのに「厄」の字は表示されない。

が、突然表示された。表示されなかったときとプログラムのどの部分が違うのかわからない。プログラムは全然変えていないつもりだったのに急に日本語3D表示ができるようになってしまった。なんか納得できないけどまぁいいや。

3D表示は出来たけれど、2D表示(wglUseFontBitmaps)の方はあいかわらずダメ。文字化けのような文字列を表示してしまう。その文字化けの中に半角カタカナが表示されているのを見て、もしかしたら1バイト文字ならちゃんと表示できるかもしれないと思ったので試してみると思った通りだった。

結果として、

  • Windows95ではwglUseFontOutlines関数による全角日本語(2バイト文字)の3D表示はサポートされていない模様
  • Windows98ではShiftJISのキャラクターコードでwglUseFontOutlines関数による全角日本語の3D表示は動作する。wglUseFontBitmaps関数による日本語2D表示は全角文字はうまく動かないが(←サポートされていないのか、わたくしの実力不足のせいなのかはわからず)、半角カタカナ(1バイト文字)は表示できる
  • WindowsNT/2000ではwglUseFontOutlinesW関数とwglUseFontBitmapsW関数でUnicodeの全角日本語を表示可能 (UNICODE環境ではwglUseFontxxx関数はwglUseFontxxxW関数を呼び出すようにwingdi.hで定義されている)

どうするかな〜。サポートOSがNT/2000だけではフリーソフトのインパクトとしては弱すぎだよなぁ。


2001/05/22 (火)

「厄落とし」のテクスチャ探しは無事終了。「御札」、「ホラー素材」、「ダーク素材」でいろいろ検索した結果、「魔神殿」というホームページにたどり着いた。豊富な種類のホラー素材が公開されていて、その中にバッチリ「御札」というカテゴリがっ!

ホラーな素材を公開しているホームページは結構見つかったけど、「御札」みたいにちょっと変わったテーマのものまで取り揃えてあるのは「魔神殿」だけだった。まさに「痒いとこまで手が届く」感アリ。

ホームページ向けの素材ということなので、ゲームでテクスチャとして使ってもいいかどうかをメールでお尋ねした。テクスチャとして使うのでサイズを変更したり、ゲーム内での見た目を整える意味でコントラストを変えたり、ぼかしたり、という加工をしなければならないし、フリーソフトの一部として使うので再配布ということにもなってしまう。たとえ「フリー素材」といってもこれは無断で使ってはいけないなぁと思ったのである。

昨日の夜中にメールを送ったのだが、今朝にはもう管理人の方から返事を頂いた。ゲームで使うのもOKだし、加工するのもOK、と大変太っ腹な方であった。感謝感激である。


2001/05/17 (木)

なかなか自分のプログラムをいじる時間が取れない。早く今回の仕事を片付けて、定時に帰れるようになりたいよ。


2001/05/15 (火)

昨夜、「厄落とし」の「厄」と障害物の当たり判定のロジックを変更していた。もともとクダラナイ内容だから当たり判定などの計算方法はいいかげんなもんである。正しいのは自然落下の公式くらいで、空気抵抗による速度減衰や横方向への移動速度、ぶつかったときのハネ返りや回転などは「適当」にこしらえたものである。シミュレータではなくてゲームなんだからそんなんでも良いでしょう。もう少し調整して「自然」な感じになればいいなと思う。時間がなくてあんまり進捗はないのだが...


2001/05/11 (金)

仕事などが忙しくて、夜の12時や1時にならないと自分の時間が持てない。それからパソコンをいじったりするので寝るのが2時3時。8時前に起きているので十分眠れているはずなのに、非常に眠くて疲れも取れていない。


2001/05/09 (水)

それにしても全然自分の時間が取れない。やりたい事が一杯あるのに。やりたい事というかゲーム化したいアイデアがたまっているのだ。早くそういったものを作品として吐き出しきって達成感に浸りたいのに。定時に帰れる生活に早く戻りたいなぁ。


2001/05/08 (火)

どうもゲーム作りの方が楽しくて、ついつい仕事そっちのけになってしまってイカンなぁ。今日はステージごとに背景のテクスチャを変更するようにした。そろそろプロトタイプの域からフリーソフトの体裁にせねば。


2001/05/07 (月)

ゴールデンウィークのちょっと前から考えている馬鹿ゲームがある。「厄落とし」というゲームでひたすら「厄」という字を落としていくゲームだ。日本語をOpenGLで表示できたのと、気持ちのいい落下スクロールのゲームを作りたいというのと、くだらない内容のゲームも良いのでは、というのが出発点だ。まだまだプロトタイプの段階。開発環境であるWindows2000ではちゃんと「厄」という字が表示されるのだが、会社のWindows95/98の環境で試してみたら表示されないことがわかった。UNICODEかどうかが問題なのであろう。とりあえずはNT/2000用でもいいから完成させたい。ゲームで使うテクスチャとしてフリーの素材をネットで検索しているところ。


2001/04/27 (金)

PS2のソフト「風のクロノア2」をやっている。PS2と同時購入したリッジレーサーV以来に面白いゲームだ。PS2は絵はきれいだけど、楽しいゲームは少ないと思う。で、クロノアをやっていて、個人的には落下シーンが気持ちいい。こんなゲーム作れないかなぁ。


2001/04/26 (木)

昨夜は午前2時頃に登録作業が終了した。その後よせばいいのに、今まで使ったことがなかったSTENCILテストを試したり、アウトラインフォントに日本語フォント(MSゴシック)を指定してOpenGLで日本語が表示できるのかどうか試したりしてて、結局寝たのは4時すぎだった。そんな時に限ってちゃんと7時頃に目が覚めて会社にも遅刻せず着いたりするから面白い。そのかわり、勤務中は地獄でした。


戻る