以前友人と話をして分かったのは、サウンドノベル(AVGも含む)のスキップ機能は速さを重視しなければならないということだ。
至極当然のことだが、元々が速いのであまり気にしていなかった。
が、先ほどちょっと修正を加えたら驚きの結果が出た。それと共に面白い結果も出た。
以下に修正後のスクリプトを載せてみる。
;テキスト表示後サブルーチン
*text_lb
;文字の位置取得
getcursorpos %x,%y
add %y,10
ispage %101
if %101=0 lsp 90,":/3,200,0;cursor0.bmp",%x,%y
if %101=1 lsp 90,":/3,200,0;cursor1.bmp",%x,%y
*tbloop
btndef clear
getfunction ;ファンクションキー -21〜-32
getcursor ;キー入力
getskipoff ;スキップオフを-60,オートモードオフを-61で取得
spclclk ;スペースバーを左クリックと同じ動作にする
;オートモードの終了確認
isskip %auto_mode
if %auto_mode==1 goto *click_wait_btn ;スキップ中ならボタン定義せずにtextbtnwaitに飛ぶ
;アイコン外をクリックして停止の場合
if %auto_mode==0 && %yesnoauto==ON lsp 93,":s/12,12,0;#999999auto",485,448,100:lsph 98,":s/12,12,0;#ffffffauto",485,448:print 1:mov %yesnoauto,OFF
exbtn_d"P92P93P94P95P96C97-101"
exbtn 92,1,"C92P97"
exbtn 93,2,"C93P98"
exbtn 94,3,"C94P99"
exbtn 95,4,"C95P100"
if %scene==OFF exbtn 96,5,"C96P101"
*click_wait_btn
textbtnwait %click_wait ;テキストボタンウェイト
if %auto_mode==1 goto *text_end ;スキップ中ならすぐに文字送り上記の赤い部分が追加要素だ。もちろんこの後にも長々と命令が続くわけだが、この二つを追加しただけで激変した。
要は、スキップしてたら余計な処理をせずすぐに文章をとばせ、という命令の追加をしたわけだ。
実験の結果、どうやらexbtnなどのボタン定義にえらく時間が掛かっていたことが判明した。(他にも原因はあるだろうが)
そんなわけで、その部分を吹っ飛ばしている。これだけで結構変わった。
どのくらい速度の変化があったか提示してみる。
まずは、AVG形式の場合。これは
BGADというタイトルだ。
シナリオ担当が別に書いたやつをゲーム化したもの。既に完成はしているが事情により公開できない(汗
とにかく、これで実験してみた。
実験条件としては、
本来スキップできない部分もスキップ可能にし、全てスキップのみでゲームを進行させること。スキップした時点からゲーム終了時までの時間を計測する。これは便利な命令があるので簡単だ。
こんな感じでやってみた。
すると、先ほどの追加命令なしの場合は終了までの時間は
96秒994。という結果が出た。本編自体あまり長くないので・・・
で、追加命令ありの場合は、
92秒801。
多少ながら速くなったことが分かる。
これじゃあ雀の涙か・・・と思ったら、サウンドノベル形式で同じ実験をしてみたら驚いた。
まず、追加命令なしの場合。結果は、
89秒754。
追加命令ありの場合。結果は、
59秒480。
30秒も速くなっている。これには流石に驚いた。
なぜAVGとサウンドノベルとでここまで差が出たのか?
それぞれの処理の流れが違うから効果に個体差が生じたのだと思われる。
まさかここまで速くなるとは思わなかった。やってみて良かった(^^)