Excel Script Player ― EndRollからタイムライン再生へ
はじめに
感動はチカラなり。
スーパーファミコンのRPGのエンディングに感動してから、もう30年以上。
あの頃は、まさか30年以上経ってからExcelでそれっぽいものを作ることになるとは思っていませんでした。
あるとき、ふと思いました。
ExcelのUserFormなら作れそう。
最初は単純なEndRoll表示でした。
基本的には、テキストを読み込んで表示するだけです。
例えば、
00:00:04It's
00:00:08- How's
00:00:04Three
00:00:04It's nice
00:00:03Good to see
のように、テキストに時間を持たせておけば、その時間に合わせて表示できます。
もちろん、時間情報のない普通のテキストなら、設定したデフォルトの待ち時間で表示することもできます。
ところが、作っているうちに、だんだん話が変わってきました。
EndRollから表示エンジンへ
最初は、画面の下から上に向かって表示していく、いわゆるエンドロールタイプでした。
ところが制作している途中で、ふと思いました。
これって設定によっては、ただの方眼紙描画もできるよね?
文字を表示する位置を変えられる。
表示する行数も変えられる。
スクロールするかどうかも設定できる。
そう考えていくと、EndRoll専用にしておく必要はありません。
文字を表示するための画面として使える。
ここで、今回の仕様がほぼ固まりました。
EndRollを表示するために作っていたものが、少しずつ、
「テキストを指定した位置・時間に表示するためのPlayer」
へ変わっていきました。
タイムライン処理
次に必要になったのが、時間の扱いです。
例えば、
00:04:19It's
00:04:22- How's
00:04:24Three
00:04:26It's nice
というデータなら、
「4秒待って表示する」
というより、
「4分19秒の位置でIt'sを表示する」
という考え方になります。
これなら、音楽や動画など、別の時間軸を持つものに合わせてテキストを表示できます。
一方で、タイムカウンターを使わない場合は、デフォルトの待ち時間を使って、
1行目
↓
待つ
↓
2行目
↓
待つ
↓
3行目
という普通のテキスト再生もできます。
つまり、
時間情報があればタイムラインに合わせる。
時間情報がなければデフォルトの待ち時間で再生する。
という使い分けです。
タイムライン処理・リピート処理
制作を進めていくと、タイムライン処理だけでなく、リピート処理も必要になってきました。
「この時間になったら表示する」
「最後まで行ったら止める」
「リピート設定なら最初からもう一度再生する」
という処理です。
実際に作ってみて思いました。
タイムライン処理・リピート処理って、こんなことをやっていたんだ。
ボタンを押せば移動するだけじゃないんだね。(笑
表示するだけの処理から、だんだん「再生するための処理」が増えていきました。
画像を表示したくなった
さらに制作している途中で、もう一つ考え方が変わりました。
画像を表示しながら文字を表示するのではなく、
文字を表示しながら画像を表示したほうがいいかもしれない。
そうなると、
文字を表示
↓
画像を表示
↓
次の文字
↓
別の画像
というように、テキストの中に「何をするか」を指定したくなります。
ここで単純な文字表示だけでは足りなくなりました。
タグ解釈モードへ
そこで、テキストの中にタグを入れて、その内容を読み取るようにしました。
例えば、
<TIME>00:04:19:</TIME>It's
のような形式です。
時間情報をタグとして分離しておけば、文字と時間を別々に扱えます。
さらに、
<SHOW>image01</SHOW>
のようなタグを考えていくと、
テキストを読みながら、次に何をするのかを決めていく
という仕組みになってきます。
ここで、EndRoll表示から少しずつScript Playerらしい形になっていきました。
※ これらのタグは現在のところ実装されてません。
入力形式が違っても、同じように再生する
ここで面白いことにも気づきました。
例えば、
00:00:04It's
00:00:08- How's
という形式でも、
<TIME>00:04:19:</TIME>It's
<TIME>00:04:22:</TIME>- How's
という形式でも、
最終的にPlayerが必要としているのは、
「この時間に、この文字を表示する」
という情報です。
つまり、
入力形式A ─┐
├→ 内部データ → Player → 表示
入力形式B ─┘
という形にできます。
これが今回の制作でかなり面白いと感じた部分です。
入力形式が違っても、同じように再生する。
入力方法と再生処理を分けることで、Player側は同じ仕組みを使えます。
テキストファイルを変更するだけで再生内容が変わる
もう一つ、この仕組みの面白いところがあります。
表示する内容をVBAのコードに直接書いているわけではありません。
テキストファイルを読み込んで再生しています。
そのため、
EndRoll.txt
を書き換えれば、VBAを変更しなくても、
- 表示する文章
- 表示する順番
- 表示するタイミング
などを変更できます。
つまり、
データを変更するだけで、再生する内容が変わる。
ここまで来ると、最初に作っていた「EndRoll表示」とは少し違うものになっていました。
PreviewとRun
そして、実際に使うことを考えて、2つのモードを用意しました。
Previewモード
タイムカウンターをチェックしながら、スクリプトの内容を確認するモードです。
タイムライン上でどのように表示されるのかを確認できます。
Runモード
テキストファイルをそのまま読み込み、実際に再生するモードです。
つまり、
確認するためのPreviewと、再生するためのRun。
この2つを組み込むことで、スクリプトを確認してから実際の再生へ進めるようにしました。
EndRollからScript Playerへ
最初は、
「昔のRPGのようなEndRollをExcelで表示してみたい」
というところから始まりました。
それが、
EndRoll
↓
スクロール表示
↓
タイムライン
↓
リピート
↓
画像表示
↓
タグ解釈
↓
複数の入力形式
↓
Preview / Run
と少しずつ広がっていきました。
最初から全部を設計していたわけではありません。
作っている途中で、
これもできるんじゃないか?
と思ったものを追加していった結果です。
そして最終的に、
EndRollを表示するものではなく、スクリプトを読み込んで再生するもの
として整理することができました。
そこで今回、表示先をUserForm Labelコントロールにした
excel-script-player
としてGitHubに公開しました。
30年以上前に見たエンディングが、今になってExcel VBAを動かすことになる。
やっぱり、
感動はチカラなり。