« 基本編 Nスクの設定とタイトルメニュー | メイン | 応用編 で かにしの編  その5 スプライト移動 »

2007年06月24日

●かにしの編 その4 トランジションと名前表示

トランジション(背景画像切り替え)に白黒のマスク画像を使ったエフェクトを
かけるゲームが一般的です。
幸いにしてNスクにもマスクトランジションがあるので、移植の際に大助かり。
凝った記述をしなくても、 print 命令にマスク画像を渡してあげるだけで原作通りの効果が出せます。
かにしのにはなんと77枚ものトランジション用マスク画像が…

	}elsif ( $line =~ /^%00%54(.*?)%00/ ){
		$efmsk = $1;
		$efmsk =~ s/%([0-9A-Fa-f][0-9A-Fa-f])/pack("H2", $1)/eg;

でマスク画像ファイル名を変数(非ローカル)に渡して
}elsif ( $line =~ /^%00%4a%([0-9A-Fa-f][0-9A-Fa-f])%([0-9A-Fa-f][0-9A-Fa-f])%([0-9A-Fa-f][0-9A-Fa-f])/ ){ $time = hex("$3$2"); if ( $time == 0 ) { print OUT "print 1\n"; }elsif ( $1 eq "2a") { print OUT "print 18,$time,\":c;image/$efmsk.jpg\"\n"; }elsif ( $1 eq "1d" ){ print OUT "print 14,$time\n"; }else{ print OUT "print 10,$time\n"; } }

とマスクを使うかどうかの判別をして、トランジションにかかる時間とともに書き出します。
ちなみに "4a $1" の$1でマスクトランジション以外にも色々エフェクトを指定しているようです。
"1d"だと上にスクロール?なので "print 14,$time"
これはNスクのエフェクト表と照らし合わせたり自作して当てはめます。
さて、ノイズエフェクトとかラスタースクロールはどうしよう、お兄ちゃん…

ということでシステム面に踏み込めない(私の)なんちゃって移植より、栖香ちゃんに期待だ!


お次は名前表示です。
"nmbase.jpg"が名前欄の画像なので、これと文字スプライトを合わせてテキストウインドウに重ねます。

	}elsif ( $line =~ /^%00%42(?:%[0-9A-Fa-f][0-9A-Fa-f]){2}%00%00(.*?)%00(.*?)%00/ ){
		$name = $1;
		$dec = $2;
		$name =~ s/%([0-9A-Fa-f][0-9A-Fa-f])/pack("H2", $1)/eg;
		$dec =~ s/%([0-9A-Fa-f][0-9A-Fa-f])/pack("H2", $1)/eg;
		$dec =~ s/\{(.*?):(.*?)\}/\($1\/$2\)/gi;
		$dec =~ s/\\n/\n/gi;
		$nalocate = 220 - (length($name))*6;
		print OUT "erasetextwindow 0\n";
		print OUT "lsp 0,\":s/24,24,2;#FFFFFF$name\",$nalocate,431\n";
		print OUT "lsp 1,\"image/nmbase.jpg\",50,424\n";
		print OUT "print 1\n";
		print OUT "$dec\\\n";
		print OUT "csp 0:csp 1:print 1:erasetextwindow 1\n";
	}

細かい工夫として文字数によるx座標調整と、表示・非表示の際に
テキストウインドウが消えないようにしています。
もっともここでの苦労は、手探りで表示座標を決めた点が主です。何この半端な数字

ちなみにONSは"windowchip"命令に対応していないのでメニューを出す時などに
名前欄だけ残ってしまうのが難点です。
あと、画像の周りのゴミを手動で消してやると綺麗かな?

これで何とか最低限の見栄えは整ったので、暫定公開へ。
でもReadmeで手順書くのが辛いです…orz

トラックバックURL

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

コメント

Zaurusでかにしのを動かそうと試みている者です。

解像度がPSP用だと小さいので画像ファイルを80%でリサイズ(640x480)して動かそうと思いましたが、1.txtや0.txtの記述がPSP用なため、名前の出る部分やフェードやテキストボックスがずれて表示されてしまいます。

640x480に最適化されたPerlスクリプトを作っていただくことは可能でしょうか?

よろしくお願いします。

実は解像度についてはバイナリの方で処理していまして、うちではPSP用とかは関係なく
800x600のNScripter対応スクリプトを出しているだけなのです。バイナリ作者様に感謝しきり。
(ちなみにPSPで800x600サイズのまま使うこともできたりします)

そしてZaurusのONScripterは本家様なので、800x600にも当然対応しています。
…って、探してみてもZaurusで内部800のままNスクものを動かしている事例が意外と見つかりませんねぇ。

Ogapee様SDL on Zaurus のページ、ONScripterをQtopia環境で…の項
>VGA ザウルス上でVGA表示で圧縮アーカイブを使う場合。要するに、800x600 のアーカイブを 640x480 にしている場合。
を参考に、あと [--disable-rescale] を付けて実行する様にすればいけるのではないかと思うのですが…。
試せる環境がなくいまいち無責任な発言ですみません。

でも非ONS用に座標類を640x480に対応させるのは需要があるのかも?
むむ、考えてみよう。

助言ありがとうございました。

--disable-rescaleを入れることでVGAで動作させることができました。

今のところ問題なしに動作しています。

環境を一応書いておきます
Hard:SHARP Zaurus SL-C860
Karnel:Special Karnel
CPU:echo 162
Media:CF 4GB
swap:128MB

bgm、se、image、Voiceフォルダをすべてアーカイブ化しています
本校と分校に分けていません
音声などはすべてoggです。
画像は640x480に最適化してあります。

お世話になりました。

また動くものがあればご報告させていただきます。

無事動作して良かったです。
そして報告ありがとうございました。
PSP以外での情報はあまりないのでとても参考になります。
是非またお願いしますね。

コメントする