●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 が欲しい~
コメント
置換の方法は大体把握出来たのですが、出力したファイルに何も記述されませぬ・・・(´・ω・`)
どうたいしょすればよいのか・・・OTL
因みに上記の結合の方はclose INを削除したらどうさしますた
Posted by: malleus | 2007年07月04日 16:47
何を試したのでしょうか?
サンプルのはあくまで書き方の例なので、特に何で動作するとかはありません
吉里吉里でも記述の仕方に細かな差異がありますので…
上手くマッチできていないのかもしれませんね
Posted by: ひとつもり | 2007年07月05日 21:03
かなりやりたいゲームがあり、やってみようと思っているのですが・・・
これは、ファイルの順番は考慮されないのですか? どうなってるのか教えてくださると幸いです。
Posted by: おれおれ | 2008年01月21日 21:19
この場合ではファイル順は気にしていませんでしたねー
大抵は自動的にアルファベット順などになりますが、たまに基準がよく分からない並び方になることも。
readdir などでファイルを配列に取得した後は、sort関数で目的別にソートするといいかと思います。
Posted by: ひとつもり | 2008年01月21日 23:02
返答ありがとうございます。 ソート関数ですか!なるほど
Perlは手軽ですけど難しいですね。(C言語と比べたら・・・
ブックマークに入ってるPerl講座で勉強してます。また進んだとき、わからなくなったら菊かもしれませんので、そのときはよろしくお願いします。
Posted by: おれおれ | 2008年01月23日 22:03
慣れてしまえば、こういうことにはほんと手軽で便利です。
何かありましたら(分かることでしたら)お気軽にどうぞー
Posted by: ひとつもり | 2008年01月24日 00:42
お久しぶりです。
現在自分もperlで移植をしてみようと頑張っているのですが、
移植しようとしているゲームがクリック待ちや改ページなどの命令が無いのでなんとか
@や\を入れようとしているのですがうまくいきません(汗
そのゲームは最大3行でしらべた限りでは文末に"、""。""!""・""」""…"などが付きます。
途中の行では区切り記号のところに"@"をいれ最後の行のところには"\"を入れたいのですが可能なのでしょうか?
また文章の構造から文を表示するときに
又は(※hogehogeは各種オプションみたいなもの?)
という命令が付いて文が始まります。
例)
~だったから、
~なんだよ。
だから~なんだな。
こんにゃくのコンバータなどを参考にしようと思ったのですが挫折orz
(正確には、や。などにマッチしたら置き換え、見たいな物をやったのですがそうすると、
文中に"「・・・なんだよ。」"みたいな文があると最後の」だけにマッチさせたいのに
・や。などにもマッチしてしまったり…して挫折orz)
イキナリ質問すみません(汗
Posted by: tales fan | 2008年06月10日 21:30
お久しぶりです。
Nスク側で "clickstr" という句読点等でクリック待ちする命令を使う手もありますが、
Perlの正規表現で置換していく方が柔軟に出来そうですね。
>また文章の構造から文を表示するときに…
以下の「例」がさっぱり読み取れないのが痛いですが(HTMLタグと混同されて消えた?)
何かしら目印があるのなら、その行からフラグを立てて次の行が文章ならば"@"、文章ではなくなった時に"/"を入れるとかでしょうか?
また、単純に"。」"の"。"にマッチさせない処理は正規表現で"。$"(文末の。にマッチ)や"。(?!」)" (後に」がない。にマッチ)等を使えば出来ると思います。
可能かどうか問われたら、工夫次第で何でも可能なので是非とも頑張ってください。
Posted by: ひとつもり | 2008年06月10日 22:20