スクリーンショット_2018-12-25_22

チュートリアル作成 ローグライク(仮)

今日からタイトルの「ローグライク(仮)」を最後につけるようにした。

チュートリアルの作成をしていた。随分進捗がよい。

チュートリアルダンジョンの作成

まずはチュートリアル専用のダンジョンを組む仕組みを作った。

このように、プロローグでも使った Tiled を使ってダンジョンを組み上げることができるようにした。壁や通路だけではなく、階段や敵、武器、踏むと動作するギミックも配置できる。

例えば1番タイルを配置して、ゲーム中にそこを踏んだとき1度だけ Lua で書かれたスクリプトが実行される。このスクリプトをギミックと呼ぶことにした。
ギミックはスクリプトで実行されるのでプロローグなどと同じように自由な動作を設定できる。

この例ではセリフが表示されるようにしている。

ギミックの仕組み

ギミックの仕様は豊富で、色々なところに仕掛けることができる。

先程の床に配置した invisible gimmick 以外にも、敵が死んだとき・武器を拾ったときをきっかけに動いたり、降りる階段は visible gimmick として配置していたりする。また、フロアに侵入したときに起動するギミックもある。1度しか発動しないものや、何度も発動されるものも自由に作ることができる。

ギミックの内容は今の所セリフの表示だけだが、それ以外にも使えるようになる予定だ。

内部的な話

このようにタイルマップで色々なものを配置したり、ギミックの内容を Lua で書くことで組み立てられる。
内部的な仕組みでは、元々 LevelBuilder というフロア(レベル)を組み立てる責務を持つクラスがあり、このクラスが Level というフロアを意味するオブジェクトの状態を変更することでフロアが組み上がるようにしていた。LevelBuilder は例えば generate_dungeon や put_enemy, put_downstairs などのメソッドを持っており、これをマスターデータに基づいて適切に実行していくようになっている。チュートリアルも全く同じ LevelBuilder を用いて、TutorialLevelBuilder というクラスが LevelBuilder を使用してフロアを組み上げている。オブジェクトの責務を適切に分割していたことで特殊なフロアを設定することができるようになっていた。過去の自分に感謝している。

そろそろコード量も多くなり、しばらく触っていないコードも増えてきている。だけど今回、丁寧に実装されていて違和感なくそのままギミックやチュートリアルの仕組みを導入できたことがとても嬉しかった。
チームで開発していると、なかなかこうは行かない。しかし過去の自分もチームメイトだと考えれば自画自賛にはなってしまうが恵まれたチームだ。


応援してくださると嬉しいです。よろしくお願いいたします!