kowさんは天ざる大好き

創作に絶望すると、世界が反転した日記

Yanesdk.netによるノベルゲーム実装(7)

プログラムの処理の流れをみてきた。
こんな仕組みで動いているわけだが、息抜きに去人たちのノベルゲーム実装についてみていく。


単純に考えるとノベルゲームは
・背景画像を描画する
・キャラクター画像を描画する
・文字を描画する
ぐらいのことである。


シナリオ書きがシナリオを書けば文章はできあがってくる。
イラストレーターが背景なり、キャラなりの画像を作る。
ここまではよしとしよう。
では文章にあわせて、キャラクターを表示したり、背景を表示したり、音楽をならす。
そういったシナリオ制御する方法の一つとしてマークアップ言語による記述がある。
マークアップ言語なんていうと堅苦しいが、文章の中に指示するコマンド、タグを記述しておいて、プログラムがそれを読み込んで、背景なりキャラクターなりを表示するという方法である。
Nスクでも吉里吉里でもだいたい似たようなことをしてるんじゃないだろうか。
去人でも、マークアップ言語によるシナリオ制御を行っている。とはいっても実際はHTMLにたいに< >で囲まれたタグが文章に埋め込んであるだけだ。


去人たちで使用したシナリオ記述方式は、yanesdk2ndのCTextDrawの拡張して必要なタグを追加した程度である。
たとえば、こんな風に記述されている。



 それは、思い出すのも苦労するぐらいたいそう零砕な事件である。もちろんそんな末節な事件であるから、簡単に解決した。
 しかし、報告書を書かねばならない。
 目を瞑れば事件の内容も簡単に思い出せそうだ。
 しかし今日はちょうど満月だしそうする必要もないと思う。
 それに、目を閉じてしまったら、物狂おしくも生暖かい春風が、雲を運んできて月の光を隠してしまうのではないかと心配なのだ。
 苦労でも俺は目を開けたまま報告書を書く。

それぞれ、
 
 
 
 

がタグとなる。タグの意味は名前から想像できるだろうと思う。
パラメータについては、エフェクトの種類であったり、画像の番号であったり、時間であったりさまざまだが、タグごとに固有のパラメータを指定する。
しかしここでは、去人のシナリオ記述を説明するのが目的ではない。
文章の中に、このようなタグが入っているテキストファイルを読み込んで、シナリオ制御を行うプログラムを作ろう、ということである。

まあ、これも難しく考えなければいいだろう。
文字を逐次描画していき、タグが出現したら、そこに記述されているコマンドを解析して実行すればいいだけ。
面倒なのはそのシナリオファイルをパースしたりすることだろう。タグを取り除き、ベタの文を抽出する。取り除いたタグの出現位置を記録して、いざ文章がそこまできたら実行する。


次はCTextDrawをサンプルにしながら、いろいろ考えてみる。