TRPGスタジオでリプレイ動画を作る5-2
長くなったので分割です。
分割元↓
画像・BGM(SE)ファイルのリネーム過剰記述の削除シナリオファイルの分割
プレビューしやすい一工夫
プレビューしながら余計なものや時間を削る
演出に必要なものを付け加える
動画再生のための一工夫
プレビューを自動撮影
おまけ:外部ツールでさらに演出アップ
3-2プレイリスト化
どうなるのか
;before
#キャラ名
台詞や状況描写。台詞や状況描写。台詞や状況描写。台詞や状況描写。台詞や状況描写。
台詞や状況描写。台詞や状況描写。台詞や状況描写。台詞や状況描写。台詞や状況描写。
[playbgm storage="hogehogehoge.mp3"]
[playse storage="fuga.mp3"]
#キャラ名
台詞や状況描写。台詞や状況描写。台詞や状況描写。台詞や状況描写。台詞や状況描写。
台詞や状況描写。台詞や状況描写。台詞や状況描写。台詞や状況描写。台詞や状況描写。
[bg storage="room.jpg" time=3000]
#キャラ名
台詞や状況描写。台詞や状況描写。台詞や状況描写。台詞や状況描写。台詞や状況描写。
台詞や状況描写。台詞や状況描写。台詞や状況描写。台詞や状況描写。台詞や状況描写。
[bg storage="rouka.jpg" time=3000]
[playbgm storage="hogehogehoge512.mp3"]
[playse storage="fugi.mp3"]
;after(scene.ks)
#キャラ名
台詞や状況描写。台詞や状況描写。台詞や状況描写。台詞や状況描写。台詞や状況描写。
台詞や状況描写。台詞や状況描写。台詞や状況描写。台詞や状況描写。台詞や状況描写。
[ms no=100]
[ms]
#キャラ名
台詞や状況描写。台詞や状況描写。台詞や状況描写。台詞や状況描写。台詞や状況描写。
台詞や状況描写。台詞や状況描写。台詞や状況描写。台詞や状況描写。台詞や状況描写。
[bgi no=100]
#キャラ名
台詞や状況描写。台詞や状況描写。台詞や状況描写。台詞や状況描写。台詞や状況描写。
台詞や状況描写。台詞や状況描写。台詞や状況描写。台詞や状況描写。台詞や状況描写。
[bgi]
[ms]
[ms]
;after(macro.ks)
[macro name="ms"]
/*
キャラが何をした。という説明
*/
=>1回目起動の時
[playbgm storage="hogehogehoge.mp3"]
=>2回目起動の時
[playse storage="fuga.mp3"]
/*
キャラが何をした。という説明
*/
/*
キャラが何をした。という説明
*/
=>3回目起動の時
[playbgm storage="hogehogehoge512.mp3"]
=>4回目起動の時
[playse storage="fugi.mp3"]
[endmacro]
;bgi同義のため略
何をするのか
scene.ksからBGMやSEを切り離し、
代わりにマクロを配置して
文章構成パーツと、装飾(BGM,SEなど)パーツを
それぞれ別シナリオでリンクさせて管理します。
その際、同じマクロを複数回使うことで、その回数の度に決められたタグが発動するようにします。
考え方はHTMLなどのマークアップ言語と同じです。
HTMLとCSSのファイルを別けて作成するみたいなもんです。
連想配列(オブジェクト)
BGM、SEなどそれぞれの連想配列を作成します。
配列は1つの変数の中に複数の戻り値があるものを指します。
連想配列は平たく言えば、自分で設定したkeyで変数の中身を呼び出せる
配列です。
f.bgm['thema0']を呼べば"amadeus_thema_inst.mp3"という文字列が返され
f.bgm['thema1']を呼べば"amadeus_thema.mp3"という文字列が返されます。
用途としては、最初から数が決められている入れ物に収納するイメージの時に使うのがいいです。
BGM
ゲームのジャンルで分量が変わりますが、TRPGのリプレイを想定すると
日常系 2個(日常シーンが連続で発生する場合のマンネリ回避)
非日常系 1個(起承転結の転部分に使う)
戦闘系 1個
特殊系 1個(回想とか)
ED 1個(リプレイの場合EDは1種のため)
の計6曲あれば十分です。
一応、あってもいいものとしては
各キャラテーマ曲
全体のテーマ曲
がありますが、青天井になりますのでなるべく少なくしましょう。
[iscript]
f.bgm={}
;[playbgm]のstorageに使用する。bgmフォルダから連ねるパスを記入。
f.bgm={
テーマ0 :'Amadeus_Inst.mp3',
テーマ1 :'',
日常1 :'',
日常2 :'',
非日常 :'',
戦闘準備 :'',
中ボス :'',
ボス :'',
回想 :'',
end :'',
山田 :'',
鳥 :'',
芋 :'',
瑞穂 :'',
琴 :'',
トリドン :'',
小山内 :'',
巧 :'',
アシュリー:'',
クズ :'',
}
[endscript]
上は3セッション分を同時に作ろうとしてる↑
上ではkey(テーマ0など)を日本語にしていますが、半角英数が推奨です。
まあどこにもアップロードしないで動画撮影するだけなら日本語で問題ないです。
ただ、日本語だとインデントが揃わないので多少見た目が悪いですね。
<!>重要なのはマクロ化した時に記憶しやすい引数名にすることです。
SE
BGMと同様、TRPGのリプレイ動画を想定すると
日常系(足音)
戦闘音(ダメージを与える、ダメージを受ける)
があればなんとでもなります。場面によって同じ音でも用途使いまわせる。
シナリオ特有の特殊な替えが効かないSEは追加してもいいと思います。
これもBGM同様なるべく少なくがいいです。
f.se={}
;以下はsoundフォルダ内にある。[playse]にて使用。
f.se{
恐怖演出 :'死後の世界.mp3',
ガラス :'ガラスが割れる1.mp3',
術式 :'ステータス上昇魔法1.mp3',
武器剣 :'剣で斬る1.mp3',
武器打撃 :'打撃3.mp3',
悲鳴 :'男性の悲鳴.mp3',
ダメージ女 :'「いやっ!」.mp3',
ダメージ男 :'「ぐああーーっ!」.mp3',
}
注意点周りはBGM同様です。
マクロ
マクロは端折って解説すれば、オリジナルのタグです。
上で設定した連想配列を利用してBGMSEを視覚的に見やすく、今後のシナリオ分割の時に楽ができるような奴を作ります。
最終形態としては
こんな感じ。
シナリオにはあくまでもマクロが発生する位置のみ。
マクロの内容はマクロ用のシナリオファイルを変更することで対応する。
ポイントとして、マクロ自体は全く同じものです。
;macro.ksという名前のファイル
[macro name="ms"]
;使う度に中身を変える
[iscript]
if(mp.no!=null)f.i=mp.no;
f.i ==null ? f.i=100 : f.i=f.i*1;
f.i=f.i+1;
[endscript]
[if exp="f.i<200"]
[jukebox1 ]
@elsif exp="f.i>=200 && f.i<300"
[jukebox2 ]
/*ここに増やしていく*/
[else]
[endif]
[endmacro]
;=========================
;ms1.ksというファイル
[macro name="jukebox1"]
[if exp="f.i==100"]
/*
(使う場合のシナリオの概要)
あかねが教室に登場。えぐい形をした武器を振り回しながら台詞。
テーマソングと一緒に。
*/
@elsif exp="f.i==101"
@playbgm storage="&f.bgm['テーマ0']"
/*
やまと登場。やまとのテーマに切り替える。
*/
@elsif exp="f.i==102"
@playbgm storage="&f.bgm['テーマ1']"
@else
[endif]
[endmacro]
[return]
;===================使う場合==================
;共通部分(first.ksなどに配置
[call storage="macro.ks"]
;===============
;各シナリオごとに配置
[call storage="ms1.ks"]
;=============
;=============
;シナリオ.ks
#あかね
「今日も楽してゲ製で儲けようとしてる奴等をしばくぞ」
[ms no=100]
[p]
#やまと
「うん、いつも通りのあかねだな!!」
[ms]
[s]
2+N個のマクロを作成しました。
[ms]はシナリオ自体に記入するマクロです。
[jukebox1]は[ms]の使用した回数で発生内容を変更するマクロの1つです。
設定すればf.i>=200の時[jukebox2]にしたり、f.i>=900の時[jukebox9]に切り替えが可能です。
シーン1の時はf.i=100、シーン2の時はf.i=200など細かくマクロを別けると
歯抜けになったときなどの被害を最小限にすることができる、という想定をしています。
変数自体は何でもいいんですけど、tf.i(一時変数)ではなくf.i(変数)を使います。プレビューの度に初期化されると面倒なので。
使用例
;これより以前のところに[ms][jukebox]のマクロが記入してあるシナリオを読み込む。
;scene1.ks====================================
適当な中身
[ms no=100]
;↑このときf.i==100
適当な中身
[ms]
;↑このときf.i==101
適当な中身
[ms]
;↑このときf.i==102
適当な中身
[ms]
;↑このときf.i==103
[jump storage="scene2.ks"]
;scene2.ks====================================
適当な中身
[ms no=200]
適当な中身
[ms]
適当な中身
[ms]
適当な中身
[ms]
[ms]
[ms]
[ms]
[jump storage="scene3.ks"]
;scene3.ks====================================
適当な中身
[ms no=300]
適当な中身
[ms]
;以下略
こんな感じ。必然的に二窓作業(ペイン)になります。
こうした入れ子でシナリオを分割していると読込が若干重くなるんですが、若干の重さより視認性と管理のしやすさが圧倒的に勝ります。
アイテムも登録
アイテムは背景画像とアイテムですね。
今後シナリオは分割されていくので、それぞれ別所から引用の方が管理がしやすいので行っていきます。
背景
;背景も同様に行う。
[iscript]
f.bg={}
f.bg={
シーン1:'',
シーン2:'',
シーン3:'',
シーン4:'',
シーン5:'',
シーン6:'',
戦闘マップ:'amd_battlesheet.jpg',
暗幕:'color_black.gif',
//必要になったら増やす
}
[endscript]
;=======↑は連想配列の登録=========
[macro name="bgi"]
;使う度に中身を変える
[iscript]
if(mp.no!=null)f.j=mp.no;
f.j ==null ? f.j=100 : f.j=f.j*1;
f.j=f.j+1;
[endscript]
[if exp="f.j<200"]
[theater1 ]
@elsif exp="f.j>=200&&f.j<300"
[theater2 ]
/*ここに増やしていく*/
[else]
[endif]
[endmacro]
[macro name="theater1"]
[if exp="f.j==100"]
@elsif exp="f.j==101"
@bg storage="&f.bg['戦闘マップ']"
@elsif exp="f.j==102"
@bg storage="&f.bg['暗幕']"
@else
[endif]
[endmacro]
[bgi no=100]
[p]
[bgi]
上から外面と効果を変えただけですが同じようにできます。
アイテム
コードだと[image]に該当するもの。
fgimage>defaultに入ってます。
ここは元々半角英数でファイル名を付けていれば文字化けもありません。
アイテムは戦闘中や重要な箇所で使われることが多いですが、1度使ったらもう使わないというものが多いのでプレイリスト化する必要性はあんまりないです。
直接ファイル名をわかりやすいものにして通常のティラノタグで呼び出すのがいいと思います。
@eval exp="tf.x=100,tf.y=200"
[image storage="hp_10.png" x="&tf.x" y="tf.y"]
[imgge storage="hp_01.png" x="&tf.x+60" y="tf.y"]
同じ素材を何度も使いまわす場合はプレイリスト化、
一度しか使わないものはそのまま使う。
という区分がいいと思います。
分割終わり。
分岐元↓