こないだのバイトヒストグラム生成ツールだが、思い出しては何となくエロゲーのスクリプトファイルを探っている。
で、どうやらただのnotやxorは思ったよりも多いようだ。まあ、こんなんでいくら気合入れて暗号化したりしても、解析に慣れてる奴がその気になったら大して変わらんだろうしなあ。ソース丸出しとかじゃなきゃ構わないのかも。
と思ったら、ソース丸出しコメントそのまま、という豪快なソフトもあった。MapleColorsHとか。でも別に問題無いよなあ、ほんと。
コメントといえば、コメントがそのまま残ってるゲームの場合、見てるうちに開発中の修羅場を思い出して妙に疲れることがあった(笑)。
俺の参加してたとこの修羅場のひどい時は、生シナリオがマスター四時間前にやっとこさっとこ上がって、それを校正しつつスクリプトに仕上げて、それでようやくルートの分岐条件を0から考えつつルート接合作業開始、とかいうキチガイなこともあったような気がする。残り30分でようやく初の通しテストプレイ開始(笑)。スクリプト見直す余裕無し。みんな徹夜続きで訳分かんなくなってるんで危険。気力も無いから仕事押し付け合ったりして、進行の悪さにストレスも溜まってて常に喧嘩寸前。
しかもそれが一度じゃなかったなあ。こんな情けない理由でパートボイスになったりする訳ですよ。オフセット本が出せないサークルみたいな感じだな(笑)。
つーか俺が初めて開発に参加した時が既にそんな感じだったかも。結局、在籍中は改善されなかったなあ。近日発売の作品では色々あったみたいで根本的に改善されそうだけど。
話を戻して。
xorを掛けるツールが思ったより有用なので、コマンドラインオプションで1byteマスク値を指定するようなツールでもいいから作っとくか、と思ったのだ。
で、実際書いてみたらアホのように簡単で。Perlサイコーよ。ホントホントよ。
MovableTypeの仕様で一つ確認しておきたいこともあるんで、またコードを貼り付けてみる。
use Getopt::Std;
$opt_k = '0xff';
getopts('k:');
$key = ( $opt_k =~ /^0/ ) ? hex $opt_k : $opt_k;
foreach $file ( map { glob $_ } @ARGV ) {
local $/ = undef;
open IN, $file;
binmode IN;
my $data = <IN>;
close IN;
open OUT, ">$file-xor-$opt_k.bin";
binmode OUT;
print OUT $data ^ ( (chr $key) x length $data );
close OUT;
}
実はGetoptモジュール初使用。こんなアホみたいに簡単便利だったなんてよう。
今コピペしながら、foreachのとこに grep { -f $_ } も埋めた方が無難かとも思ったが、まあいいや。
で、Palm(略)と「シナリオデータのデコードツールって全然見ないけどかなり便利だよなあ」みたいな話をしたり。シナリオライターの名前が広報に出されて当然になったように、シナリオデータの展開ツールも実は潜在需要が結構あるんじゃなかろうか。
そしてエンコードツールも作れば何とエロゲーツクールに(笑)。←そんな需要は無い。
他にも、clockupみたいにスクリプトが毎回毎回激しくバグの嵐なメーカーだと、有志デバッグという需要があるかも。無いです。
(追記)
そういやソースだけ貼って使い方書いてないのな。
とは言っても、普通にファイル名並べるだけだから、あとはオプションくらいか。
今日の奴は、-kに続けてマスク値。デフォは0xff。