ソース解説(ダンジョンキーパー)


目次

ソース解説(ダンジョンキーパー)

1.はじめに

今回は、私が過去に作ったゲームのソースを公開して、その解説を行ないます。
第一回は「ダンジョンキーパー」です。
ソース…danjon.txt
正直、2年前に作ったものなので、というか、初めて作ったゲームなので、
かなりソースは汚いです。
Cプログラム診断室に持って行ったら、間違いなく集中治療室行きです。(;´Д`)
ソースは4k弱なのでたいしたことはありませんが、
1500行目あたりで、もうコリャ読めないとダウンしてしまいました。

では、なぜそれを公開しようと思ったのかというと、
ゲーム作成の基本的な要素が、結構詰まっているからです。
ソースは汚いですが、当時はゲームとして基本的な部分はしっかり作ろう、
という意気込みはあったような気がします。
また他にも、こんなつくり方しちゃダメだよ、というダメな例を示すことができるからです。
人の振り見て我が振り直せ、というか反面教師というか、
ダメな例から、こうやっちゃダメというパターンが学べると思います。

そんなわけで、ソース解説です。
なお、HSPという言語で書かれていますが、それを知らなくても理解できるように解説します。
むしろ、ソースよりも処理の解説をしていきたいです。

2.パラメータの直書きはダメ

107行目あたりからのマジックナンバーもどうかと思いますが、

  • 193行目からのモンスターデータの作成 この部分でソースに直書きしているのは、もっとダメなような気がします。
    モンスターのデータというようなパラメータは外部ファイルで指定できるべきです。
    例えば、Excelで以下のように表を作成し、
    http://www5f.biglobe.ne.jp/~kenmo/wiki/danjon01.png
    VBAマクロでパラメータファイルを出力できるようにすると良いでしょう。
    (Excelを持っていなければOpenOffice?という無料のOfficeを使うのもいいかもしれません。
     また、Excelでなくとも、VB、Delphi、MFCなどでツールを自作するのもありだと思います)

    パラメータファイルとしては、CSVファイルであれば、VBAにCSV出力する機能があるので、楽にできるでしょう。
    デバッグ時であれば、モンスターが出現するたびにファイルを読み込みに行くようにすれば、
    再起動せずにパラメータが修正できるので、デバッグがやりやすいと思います。

    ただ、リリース時に外部ファイルですと、データを覗き見され、改ざんされる可能性が高いです。
    (フリーゲームのレベルでは気にする必要はない、とは思いますが...。
    フリーなら、拡張子を.datにするレベルで充分のような気がします)
    考えられる対策としては、暗号化ですが、ファイル存在チェックや複号処理が入り、面倒であると思います。
    そこで、ビルド時にリンクするような、C言語であればヘッダファイル、としてデータ定義ファイルを生成するようにすれば、
    覗き見される心配がなくなります。

    同じ理屈で、409行目からの各階ごとの迷路の広さであるとか、
    994行目からのイベントのメッセージであるとか、
    そういったものは外部ファイルで持つと編集がやりやすくなります。 (どこに何があるか、という見通しが良くなるため)

3.光の表現は加算合成で

このゲームでは、アイテムが落ちている場所が分かるように、
プレイヤーの視界内にアイテムが落ちていた場合、ピカッと光る表示を行っています。
ですが、この合成の仕方まずいです。 単純に黒を透明色として合成しているだけです。

光画像
http://www5f.biglobe.ne.jp/~kenmo/wiki/danjon03.png
まあ、この光画像がしょぼいといううわさもありますが、
確か記憶では、合成画像がいまいちだったため、色々悩んだあげく、
白の部分が多い光画像になった気がします。
(加算合成を知らなかったため)

合成画像
http://www5f.biglobe.ne.jp/~kenmo/wiki/danjon04.png

単純合成拡大
http://www5f.biglobe.ne.jp/~kenmo/wiki/danjon05.png
まあ、小さい画像なので、これでもアリかもしれませんが、
今なら、加算合成を使います。
(光を表現するには、加算合成がよい)

加算合成
http://www5f.biglobe.ne.jp/~kenmo/wiki/danjon06.png

こうすれば、自然な光を表現することができます。

4.画面全体の演出は半透明合成で

他にもすでに半透明合成のところで説明しましたが、
階段を降りた時に画面が暗くなる演出です。
http://www5f.biglobe.ne.jp/~kenmo/wiki/danjon07.png
この画像に、

http://www5f.biglobe.ne.jp/~kenmo/wiki/danjon09.png
これを半透明合成(合成率50%)すると、

http://www5f.biglobe.ne.jp/~kenmo/wiki/danjon08.png
フェードアウトする効果が簡単に得られるわけです。

他にも、回復魔法を使用したときには、白い画像を使って、フラッシュしていたりします。




5.画面全体を揺らす

あと、ダメージを受けたときに画面を揺らしています。
その仕組みとしては、まず現在の画面をバッファに取っておきます。
そして、乱数で画面をズラして描画を行います。
http://www5f.biglobe.ne.jp/~kenmo/wiki/danjon10.png
これを連続して行うことにより、画面が揺れているような効果が得られるわけです。
バッファに退避→画面を黒で消去→ズラして描画→黒で消去→ずらし描画→…。

また、ズレ幅はダメージの大きさに比例して揺らしています。

中ボス/ラスボスでは、消去を行わず、半透明合成をしています。
特別な印象を残したい場合、こういった演出もありだと思います。

(※ただ、画面外に描画を行うのは、処理としてはよろしくないとは思います)



6.その他

実は、このゲームは某雑誌に応募したものなのですが、
その時あった批評として、カーソルを動かすたびに音が出るような演出が欲しい。
というものがありました。
確かにゲームは、プレイヤーからの入力に対して、常にリアクションが必要なものである気がします。

他にも、フォントを自作したほうがいい、とかありました。
これはさすがに大変な気がします。
でも、数値ぐらいはシステムフォントを使用しないほうがいいのかもしれませんね。。。



以上、ソース解説でした。
(というか、ソースはあんまり解説していないような…)
こんなのでも、役に立てば幸いです。

以上、.1064でした。