« PerlでONS -かにしの編 その1 ~テキスト整形~ | メイン | PerlでONS -かにしの編 その2 ~Nスクへ置換~ »

2007年06月16日

●PerlでONSへ変換しよう  基本編 ~シナリオ読込~

かにしのが少し特殊になりそうなので、無差別?に基本編

シーン毎にシナリオファイルが別れているものを結合してみます。
まずアレコレを使って /scenario フォルダ等にシナリオファイルを全て展開

open (OUT,">1.txt");
opendir (DIR,"./scenario");
@file1 = readdir(DIR);
closedir(DIR);
@file = grep(/\.ks/,@file1);#※吉里吉里の場合
foreach  $file(@file){
	open (IN,"./scenario/$file");
	print OUT <IN>
	close IN;
}
close OUT;

これで /scenario フォルダの ".ks"ファイルを結合しました。
あとはぼーっと上から下まで眺めて、どんな処理がされているのかひたすら確認
※吉里吉里なら独自マクロを記述したファイルを見た方が早いかも
大体つかめてきたら、上のスクリプト内 print OUT ; の代わりに、
一行ずつ読み込んでひたすら置換する処理を入れます

(前略)
open (OUT,">1.txt");
opendir (DIR,"./scenario");
@file1 = readdir(DIR);
closedir(DIR);
@file = grep(/\.ks/,@file1);#※吉里吉里の場合
foreach  $file(@file){
	open (IN,"./scenario/$file");
	while ( $line = <IN>){

if ( $line =~ /^@play storage=\"(\w*)\"/ ){;#   音楽をならしているのなら… print OUT "bgm \"bgm/$1.ogg\"\n";#   Nスクのbgm命令に
}elsif ( $line =~ /hogehoge/ ){ ~(中略)~ } } close IN; } close OUT;

こうやってひたすら (els)if 命令で置換置換置換置換…
元の処理をどうやってNスクで再現するかが勝負です
リファレンス等を熟読しましょう

とはいえONSで対応していない命令も結構ありますが…orz
もっというなら MSpDraw.dll が欲しい~

トラックバックURL

このエントリーのトラックバックURL:
http://hitotsumori.com/x/cgi-bin/mt/mt-tb.cgi/26

コメント

置換の方法は大体把握出来たのですが、出力したファイルに何も記述されませぬ・・・(´・ω・`)
どうたいしょすればよいのか・・・OTL
因みに上記の結合の方はclose INを削除したらどうさしますた

何を試したのでしょうか?
サンプルのはあくまで書き方の例なので、特に何で動作するとかはありません
吉里吉里でも記述の仕方に細かな差異がありますので…
上手くマッチできていないのかもしれませんね

かなりやりたいゲームがあり、やってみようと思っているのですが・・・
これは、ファイルの順番は考慮されないのですか? どうなってるのか教えてくださると幸いです。

この場合ではファイル順は気にしていませんでしたねー
大抵は自動的にアルファベット順などになりますが、たまに基準がよく分からない並び方になることも。

readdir などでファイルを配列に取得した後は、sort関数で目的別にソートするといいかと思います。

返答ありがとうございます。 ソート関数ですか!なるほど

Perlは手軽ですけど難しいですね。(C言語と比べたら・・・
 ブックマークに入ってるPerl講座で勉強してます。また進んだとき、わからなくなったら菊かもしれませんので、そのときはよろしくお願いします。

慣れてしまえば、こういうことにはほんと手軽で便利です。
何かありましたら(分かることでしたら)お気軽にどうぞー

お久しぶりです。
現在自分もperlで移植をしてみようと頑張っているのですが、
移植しようとしているゲームがクリック待ちや改ページなどの命令が無いのでなんとか
@や\を入れようとしているのですがうまくいきません(汗

そのゲームは最大3行でしらべた限りでは文末に"、""。""!""・""」""…"などが付きます。
途中の行では区切り記号のところに"@"をいれ最後の行のところには"\"を入れたいのですが可能なのでしょうか?

また文章の構造から文を表示するときに
又は(※hogehogeは各種オプションみたいなもの?)
という命令が付いて文が始まります。

例)

~だったから、
~なんだよ。
だから~なんだな。

こんにゃくのコンバータなどを参考にしようと思ったのですが挫折orz
(正確には、や。などにマッチしたら置き換え、見たいな物をやったのですがそうすると、
文中に"「・・・なんだよ。」"みたいな文があると最後の」だけにマッチさせたいのに
・や。などにもマッチしてしまったり…して挫折orz)

イキナリ質問すみません(汗

お久しぶりです。

Nスク側で "clickstr" という句読点等でクリック待ちする命令を使う手もありますが、
Perlの正規表現で置換していく方が柔軟に出来そうですね。

>また文章の構造から文を表示するときに…
以下の「例」がさっぱり読み取れないのが痛いですが(HTMLタグと混同されて消えた?)
何かしら目印があるのなら、その行からフラグを立てて次の行が文章ならば"@"、文章ではなくなった時に"/"を入れるとかでしょうか?
また、単純に"。」"の"。"にマッチさせない処理は正規表現で"。$"(文末の。にマッチ)や"。(?!」)" (後に」がない。にマッチ)等を使えば出来ると思います。

可能かどうか問われたら、工夫次第で何でも可能なので是非とも頑張ってください。

コメントする