読者です 読者をやめる 読者になる 読者になる

Ging Ring Activity Report

PCゲーマーグループ"Ging Ring"の活動報告、私的メモ、身内(+α)向けまとめ、日記、etc...です。ここ書かれている情報の正確性は保証しません。

質問受付中!

 ブログ内コメント、又はTwitter経由で質問を受付中です。
 記事に対するものでも、単に聞いてみたいことでも構いません。

 ※質問内容をテーマにブログ記事を作成することがあります。予めご了承下さい。

RPGツクールVX Ace - Script.rvdata2に関して

RPGツクールVX Ace RGSS3

 久々に触ると忘れていたのでメモしておこう。

あおたくノート - [Ruby][RGSS] GitでRPGツクールをバージョン管理する

Script.rvdata2の中身

  • Script.rvdata2は配列の配列。
  • スクリプト毎に、
    • -: [integer] → ID? ファイルサイズではなさそう。
    • -: [string] → スクリプトの名前。
    • -: [string] → Zlibで圧縮されたスクリプトの中身。
  • みたいな構造の配列で、これがMarshal.dumpでバイナリ化されたものがScript.rvdata2として出力されてる。
  • なのでMarshal.loadすると、配列の配列が返る。
  • ただ、このうちスクリプトの中身(3番目のデータ)はZlibで圧縮されているので、展開しないと読めない。

展開の仕方

  • 展開の仕方は、まずZlibを使えるようにする。

require "Zlib"

  • その上でScript.rvdata2Marshal.loadする。

file = File.open("Script.rvdata2", "r")
scripts = Marshal.load(file)
file.close

  • Marshal.loadして得られるのは複数スクリプトデータの配列なので、これをループで処理する。

scripts.each{|one| # スクリプトデータそれぞれの、
print Zlib::Deflate.deflate(one[2]) # 3番目(2)の要素をZlibで展開する。
}

  • 逆(Zlib::Inflate.inflate)のことをすると、Script.rvdata2を自分で出力できる。

  • Zlibの使い方がわからず、Zlib::Deflate()みたいにしていてエラーが出て苦労した。