Thinerのブロマガ

TAS 第2次スーパーロボット大戦 コンプリ版 作成日誌 012

2014/02/27 11:46 投稿

コメント:7

  • タグ:
  • 第2次スパロボTAS日誌
  • スパロボ
  • TAS
  • スーパーロボット大戦
  • LuaScript
  • AVIUTL
やっと動画用のLuaScriptのシステムがほぼ完成した
全然仕様が2~3転してえらい時間がかかってしまった。
エミュ側はファイルに書き出しは出来ないのでコンソールにテキストを表示させ手動でコピーしてやるしかありません。

吐き出すテキストはこんな感じ、

frame[2] = {}
frame[2].count = 2
frame[2].data = {}
frame[2].data.money = 16600
frame[2].data.pilot = {}
frame[2].data.pilot.id = {}
frame[2].data.pilot.id[1] = 151
frame[2].data.pilot.name = {}
frame[2].data.pilot.name[1] = "アムロ"
frame[2].data.pilot.lv = {}
frame[2].data.pilot.lv[1] = 4
frame[2].data.pilot.lvup = {}
frame[2].data.pilot.lvup[1] = 456
frame[2].data.pilot.k = {}
frame[2].data.pilot.k[1] = 100

frameという配列を作りそこにどのフレームで各データが格納されるかを示しています。
countはデータが格納される動画フレームで、この例では2なので2フレームでデータベースにデータを上書きします。
data.moneyは現在の持っている資金を意味します。
pilotはパイロットデータでIDやら名前やら現在のレベル、次のレベルまでの経験値、気力を格納しています。
ただ、1フレームごとに書き出していたらテキストデータが膨大すぎるので、
値が変わったフレームで、値が変わったデータのみを格納するようになっています。
5フレームで資金しか変わらなかったのであれば資金のみ変わるというった感じです。

次はAVIUTLのLuaScriptでこのデータを読み込みますが、
ただcountに格納されたフレーム時にデータを読み込むだけだと編集時にかなりの弊害が出ます。
というのも、編集時に時間を飛ばすとデータを格納してくれないからです。
8フレームで資金が10000になるとしたら、編集時に8フレーム目を再生しないと格納してくれないので編集時間を15フレームのように飛ばすと資金は10000になってくれていません。
これを解消するにはcountと同等のフレームになるとではなく、count以上のフレームになると格納させるようにすると、
いつどこに飛んでもきちんとデータが格納されていきます。
また、frame[1]からデータを順番に格納していくので、さらに途中のフレームで別のデータが挟んであってもしっかり格納してくれます。
具体的なスクリプト例はこんな感じ

for i = 1,table.maxn(frame) do
if obj.frame >= frame[i].count then
if frame[i].data.money ~= nil then
data.money = frame[i].data.money
end
end

end


forループで全てのframe.countを配列の要素数分ループさせます。
obj.frame >= frame[i].count で現在の動画編集点がframe[i].countより多く、
frame[i].data.money がnilではない場合にdata.moneyに資金の値を格納します。

次のデータ登録があったとします。

frame[1].count=100
frame[1].money=1
frame[1].pilot.id ={}

frame[1].pilot.id[1] = 10
frame[2].count=200
frame[2].money=2
frame[3].count=300
frame[3].money=3
frame[3].pilot.name ={}

frame[3].pilot.name[1] = "アムロ"


先ほどのforに当てはめると、
現在の再生点が250フレームの場合、
frame[1]とframe[2]が該当し1から順番に検証されるので資金は2となります。
3までは到達していないので3にはなりません。
同じくpilot.idは10になりますが、3までは到達していないのでまだアムロという名前は登録されません。

あとは編集時にdata.moneyの変数を表示させるようにしたら自動で資金が書き換わり手動編集はおしまいです。
ただ、注意点として、AVIUTLのスクリプトオブジェクトはオブジェクトが終わるとスクリプトは発動しないので、
0フレーム目から動画終了まで思いっきり引き伸ばしてあげないとだめです。
また、表示させるテキストオブジェクトか何かよりレベルの高いレイヤーにスクリプトを設置しないと変数を上手く表示させてくれません。
例えばレイヤー1にスクリプトを設置し、レイヤー2にテキストオブジェクトを設置しても変数は表示されません。

コメント

kokugo
No.5 (2014/02/27 13:56)
>>4
返信サンクスです
最初はブレス1~3とかsfcのキャプつば辺りをやろうと思ってたけど、ブレスはやってる方いるし
キャプつばはゆっくりとかで作ったほうが面白いと思って・・
まあ気が向いたら作ってみますわ
あでゅーの人
No.6 (2014/02/28 00:49)
横槍になっちゃうけど、つまりキャプつばのゆっくりTASさんを作ればいいんじゃね?
そういえばゆっくり実況プレイでかつTASって見かけないな
視聴者の相性が悪いのだろうか
Thiner (著者)
No.7 (2014/02/28 01:37)
しつこく誤字に文句を言ってくる人に対してあんまりしつこいとゆっくり実況にするぞゴルァって脅しかけたら面白そうってのは考えたw
コメントを書き込むにはログインしてください。

いまブロマガで人気の記事