パックファイル
今更…な説明になりますが、パックファイルに関する命令を紹介します。
まず、パックファイルとはなんなのかを説明しますと、
複数のデータファイル(リソース)を1つのファイルにまとめたDPMファイルのことです。
DPMファイルは、画像や音声、映像ファイルをバラけることなくコンパクトに出来るだけでなく、
簡単には見られないようにすることが出来るので、
例えば、苦労しなければ見ることの出来ないエンディングムービーをクリアせずに見られてしまう
ということを防ぐことが出来ます。
[Ctrl]と[F9]キーの同時押しでEXEファイルを自動的に作成できるわけですが、
コレまでは、現在のスクリプトをstart.axとしてファイル化し、
start.axのみをパックファイルとしてパッキングした上で実行ファイルを作成する
と言うものでしかなく、画像や音声、映像ファイルを用いたものは作られませんでした。
#pack ファイル名
ファイル名パッキングするファイルパスを指定する。
上記紹介のプリプロセッサ#pack命令をスクリプト冒頭に記述しておくことで、 実行ファイル自動作成を選択する際にパックファイルに追加することが出来ます。 尚、重複して同一ファイルを指定している場合は、無視されるようになっています。 この命令はプリプロセッサなので、下記の様に変数を記述することは出来ません。 指定できるのは、相対か絶対ファイルパスの文字列定数のみです。
 1
 2
dialog "", 16, "パックするファイル"
#pack refstr // こんな使い方は出来ない
#epack ファイル名
ファイル名暗号化してパッキングするファイルパスを指定する。
#epack命令は#pack命令と同じく、実行ファイル自動作成でパッキングするファイルを指定するものです。 異なるのは#pack命令はファイルをそのままパックするのに対し、#epack命令は暗号化してパックするので、 実行ファイル内のパッキング位置がわかったところで簡単に内容が見られるということは防げます。 暗号化といえども、埋め込まれたデータを実際にpicload命令等で読み込む際は 通常道理のやり方でも正常に扱うことが出来、復号化する必要はないので、 できれば#pack命令より#epack命令を使う方が良いような気がします。 #pack命令と同様、重複しての同一ファイル指定は無視され、 #epack命令と#pack命令でそれぞれ同一ファイルを指定した場合、 スクリプト上位の方法、#packが上なら暗号化せず、#epackが上なら暗号化してパッキングされます。
1
#epack "start.ax" // 記述しなくても「start.ax」は元々暗号化してパックされるので無視される
ファイル名に全角文字を含んでいる場合は通常のEXE作成同様に、 あるにもかかわらず「ファイルがありません」というエラーが出る場合もありますので、 実行ファイル自動作成処理でこのエラーが出る場合は、 この#pack命令のファイル名が引っかかっていないかを確かめるようにしましょう。
続いて実行ファイル自動作成時のオプションを指定できる命令を紹介します。
#packopt キーワード, 設定データ
キーワード以下に示すキーワードのいずれかを指定する。
name作成する時の実行ファイル名。初期値は「hsptmp」。
runtime使用するランタイム名。初期値は「hsprt」。
type作成するファイル形式。初期値は0でEXE。1はフルスクリーンEXE。2はスクリーンセイバー。
xsizeウィンドウサイズ横幅。初期値は「640」。
ysizeウィンドウサイズ高さ。初期値は「480」。
hideウィンドウ非表示フラグ。初期値は0で表示。1で非表示になる(gselで表示させる)。
orgpath初期フォルダ維持無効フラグ。初期値は0で維持。1で維持しなくなる。
設定データ指定キーワードに対する設定データを指定する。
一番良く使われると思うのは、実行ファイルを作成する時にEXEファイル名を決定するnameオプション。 初期値が「hsptmp」ではなくてスクリプトファイル名だったなら、 もう少し使用頻度が減る(つまり、その方が良い)のに…と思うのは自分だけでしょうか? 通常の実行ファイル作成手順だと、指定した通りのファイル名で作成できますが、 この、オプションを指定して実行ファイルの自動作成を行う場合は、 ファイル名に半角大文字を指定しても、半角小文字に変換されてしまいます。 runtimeオプションは1章で説明したランタイムを指定するもので、 標準以外のランタイムを使って実行ファイルを作成する時に使用します。 使用できるランタイムは「HSPDIR\runtime」に入れておく必要があり、 それ以外のフォルダにあるランタイムをフォルダパスから指定してもエラーになります。 typeオプションはEXE形式にするかSCR形式にするかを指定するものになりますが、 1のフルスクリーンEXE(ウィンドウのバックグラウンドが隠れるタイプ)は、 HSP3から無効なものとなっているようなので、指定できるのは0か2となります。 xsizeおよびysizeオプションは、起動直後に「width xsize, ysize」を行ったのと同じ効果、 hideオプションは起動直後に「gsel 0, -1」を行ったのとほぼ同じ効果になります。 厳密には、「初めからそうなっている」か「起動してからそうなる」かの違いがあるので、 起動直後に一瞬だけ元の状態が見えてしまうということがなくなるわけですが。 orgpathオプションは起動時のカレントディレクトリを 実行ファイルのあるパスに変更しないようにするもので使う機会はほとんどないと思います。
 1
 2
 3
 4
 5
 6
#packopt name		"hspbc_test"
#packopt runtime	"hsp3c.hrt"
#packopt hide		1

	dialog "スクリプトをコピーし、実行ファイル自動作成して確認してください。"
	end
続いて、「#packopt命令のruntimeオプション」のようなランタイムを指定するだけの命令を紹介します。
#runtime ランタイム
ランタイム使用するランタイム名を指定する。
指定するランタイムは1章で説明したランタイムで、 ややこしいのですが、#packopt命令のruntimeオプションと違って拡張子は書きません。 つまり、「hsp3cl.hrt」の場合は「#runtime "hsp3cl"」とだけ書きます。 コレは拡張子が「hrt」だけのものが対象と言うわけではなく、 例えば「hspbc.xxx」というランタイムが「#runtime "hspbc"」という指定方法に変わるだけなので #packopt命令と#runtime命令で指定方法が違うという理由がわかりません。 尚、#packopt命令との違いは、#packopt命令が実行ファイル作成時のランタイムを変更することに対し、 #runtime命令はコンパイル時のランタイムを変更するというものです。 つまり、テスト(デバッグ)で実行する時は標準ランタイムで、 実行ファイル作成する時には別のランタイムを使用したいという場合は#packopt命令、 テスト(デバッグ)時から異なったランタイムを使用する場合は#runtimeを使用するようにしましょう。
 1
 2
 3
 4
 5
 6
 7
#runtime "hsp3cl"

	mes "    /   / / ̄ ̄\ / ̄\   / ̄\  / ̄\    //"
	mes "   /   / /    /   |  / _/ /      // "
	mes "  /−−−/  −−  /___/ / ̄ ̄\  |      //  "
	mes " /   /    / / ̄    /    | |          "
	mes "/   / \__/ /     /____/  \_/ //    "
この章の最後として、カレントDPMファイルを変更する命令を紹介します。
chdpm DPMファイル, キー
DPMファイル変更先DPMファイル名を指定する。
キー暗号化している場合、復号キーを指定する。
カレントディレクトリを切り替えるchdir命令のように、 対象となるDPMファイルを別のDPMに切り替える時に使用します。 DPMファイルは、スクリプトエディタの「DPMファイル作成」機能で作成できるもので、 packfileで指定されているファイルがDPMファイルにパックされて、data.dpmという名前で作成されます。 標準のスクリプトエディタの機能を使って作成すると常にdata.dpmとなりますが、 このファイル名は後から変更しても問題ありません。 そもそも、ヘルプにも書かれてありますが、 DPMの画像を表示する場合は「picload "DPM:DPMファイル名:画像ファイル名"」、 DPMの音楽ファイルは「mmload "DPM:DPMファイル名:音楽ファイル名"」とするか、 今回紹介するchdpm命令を使用して下記のように指定しなければは外部のDPMファイル内は参照できません。
 1
 2
	chdpm "hspbc.dpm"
	picload "xxx.bmp" // またはchdpmを使用せず「picload "DPM:hspbc.dpm:xxx.bmp"」
もしも、HSPCMP.DLLの機能を使った暗号化済みのDPMから読み込む場合、 「picload "DPM:DPMファイル名:画像ファイル名"」や、 「mmload "DPM:DPMファイル名:音楽ファイル名"」の書き方では復号キーを指定できないため、 chdpm命令を使い、第2パラメータに復号キーを指定するというやり方にしましょう。