寝ても覚めてもゲーム製作 - ウェブログ-ログ

ニコニコのブロマガで書いてたやつの保守。更新予定ほぼなし。

HSP3.4のファイル暗号化について【DPMファイル】

暗号化だぁいすき!

あまりにも意味不明すぎて
ゲーム制作を打ち切りまで考えさせた
暗号化の謎に迫ります。

分かってしまえば簡単です。
結論から言えば
「DPMファイルを複数作成して明示的にして読み込もう」
という話です。

それを速度だのファイルネームだの
理由をつけて説明する文章です。

※ちなみに、画像テキスト以外は使い物になりませんので
それ以上高度なことをしたい場合は自力で暗号化せざるを得ません。

※mmloadならmidiも読み込めますが

まずHSPには「2つ」の暗号化方法があります

1.実行ファイルにパックして暗号化
実行ファイルにまとめるときに
ついでに暗号化もするタイプです。

//------------------------------------------------------------------------------

手動での指定
→ツール(T)から
PACKFILE編集を選び、
パックしたいファイルを選び

EXEファイル作成で
手動でEXEを生成するとできます。

start.axは必須なので消しちゃダメです。
入ってない場合入れてください
(たぶん最初から入ってる)

暗号化したいときは
PACKFILE編集にある
暗号化にチェックを入れてください。


#pack(#epack)を使う
プリプロセッサ命令である
#pack "filename"を使用します。
#epackならば暗号化されます。

指定した後は ctrl + F9 を押せば
EXEファイルができます。

プリプロセッサ命令なので
ループとかは使えません
一つ一つ指定してください。)
//------------------------------------------------------------------------------

「じゃあ全部突っ込むぜー!!!」
と画像ファイルとかcsvファイルとか
入れたのはいいのですが

エラー13がでました
(13→画像ファイルが見つかりません)

どういうことなのかと思えば
文字数制限があるらしいです

その文字数が拡張子を含めて15文字
拡張子なしだと11文字ということになります……。
意外と厳しい。

ここで問題が発生するわけですが
フォルダ名も文字数制限を圧迫するため
フォルダで分けるのが困難になってしまいます。

それにフォルダで分けること前提に作っていたので
同名のファイルがありますから

まとめるときだけ同じディレクトリに入れる
みたいなこともできません。

そこで次の方法です。

//------------------------------------------------------------------------------

2.dpmファイルでまとめる
DPMファイルは本体にまとめていたファイルを
独立させたもののことです。

DPMファイルを作って覗いてみると分かりますが
上部に名前が書いてあって
下部にはデータが纏められています。
テキストデータだとそれがわかりやすい。

で、本体にまとめるのと違って
DPMファイルは複数作れて
切り替えて読み込むことが可能です。

つまりディレクトリごとに作れて
文字数を圧迫しない!

そして複数あるので
同名でも大丈夫!

HSP3.3からはセキュリティ面も強化されて
使いやすくなりました。
(15文字制限はあるけどね)

packfileからDPMを作ることもできますが
今回の悩みを解決してくれはしないので
紹介しません。
(むしろ分割した分 脆弱になる)

作り方
ツール(T)から
指定フォルダからDPM作成(D)を選びます。



後はフォルダ指定するだけ!

全体を暗号化するで
暗号化もできますよ。

//------------------------------------------------------------------------------

読み込み方は二種類!!

chdpmを使う
これは簡単です

chdpm "ファイル.dpm"とするだけです。
ただ弱点があるとすれば

致命的にロードが遅いことですかね。

6つぐらいロードすると開始までに5秒ぐらい
かかるようになりました
(計測はしてません)

明示的にする

"DPM:ファイル名.dpm:リソース名"
を使うことでも呼び出せます。
こっちは結構快適です。
たぶんこれを多用することになるでしょう。

celload "dot.jpg"

celload "DPM:data.dpm:dot.jpg"

面倒なので#defineなどで定義しておくと便利。
(例)
#define Grafic_file "DPM:data/grafic.dpm:" + grafic(cnt)

一応DPMファイルになかった場合は
ディレクトリを探してくれます。

//------------------------------------------------------------------------------

これでまあ簡単な保護はできますので
皆さんの創作にお役立てください。
私は疲れたので寝ます。

何かあればweb拍手でもメールでも受け付けますので
お好きな手段で。
よろしくお願いします。。