ZIP32J.DLLをVBSから利用してファイルをZIP圧縮する。

以前エントリで VBS から LZH 圧縮するサンプルを提示したが、その ZIP 圧縮版。

今回も総合アーカイバプロジェクトから導入の
ZIP32J.DLL というライブラリを用いた方法となる。

実のところ、DLL を用いない OS 標準機能での ZIP 圧縮方法もあるにはあるのだが、
圧縮実行後にウエイトを設けないと失敗することがあるらしい(非同期圧縮じゃない?)のと、
パスワード付き ZIP を作れない仕様だったため、選択からは外した。

利用する Win32API 関数はこちら。

ZIP32J.DLL

int WINAPI Zip(const HWND hWnd,LPCSTR szCmdLine,LPSTR szOutput,
		const DWORD dwSize);

見て解るとおり、UNLHA32.DLL の Unlha 関数に酷似しているので、
コード自体は前に書いたものを少し弄るだけで対応出来た。

ラッパー関数

' Zip関数(ZIP32J.DLL)を実行する。
' 操作に成功したらTrueを、そうでなければFalseを返す
Function ExecZip(szCmdLine)
    Const DW_SIZE = 256 ' 出力バッファサイズ
    Dim command
    
    ' ZIP32J.DLL 呼び出しコマンドを生成する
    command = "CALL(""Zip32j"", ""Zip"", ""JJCFJ"", 0, " & """" & szCmdLine & """" & ", 0, " & DW_SIZE & ")"
    
    ' zip32j を呼び出す
    If CreateObject("Excel.Application").ExecuteExcel4Macro(command) = 0 Then
        ExecZip = True
    Else
        ExecZip = False
    End If
End Function

これもまた ExecuteExcel4Macro 関数経由で実行。
実際の呼び出しは以下の通り。

Sub Test()
    If ExecZip("-j -u """"c:\work\test.zip"""" """"c:\work\test.txt""""") = False Then
        MsgBox "ExecZip error!"
    End If
End Sub

ExecZip 関数に渡したコマンドは、
指定ファイルを同名で ZIP 圧縮、但しファイルパスを含めない、
といったものである。
(test.zip の中には test.txt のみ入っているというもの。)

より高度な圧縮を行いたい場合、以下の API 説明を参考にされたし。


ZIP32J.DLL ZIP系API一覧とその説明 ...
http://openlab.jp/tsuneo/soft/zip32j/zip32j/SDK/API_ZIP.TXT

ZIP32J.DLL Zip() APIのコマンド説明 ...
http://openlab.jp/tsuneo/soft/zip32j/zip32j/SDK/CMD_ZIP.TXT

ヤルハラのおもちアドバンス。

昨年末に作っていたゲームの最終調整を終えたので、
以下の URL にて公開した。

・ヤルハラのおもちアドバンス

http://regekatsu.seesaa.net/article/455926759.html

f:id:dumbo001:20180101220725p:plain
f:id:dumbo001:20180101220746p:plain

GBA の勘所がようやく分かって来て、
本当なら続けてまた何か作りたいところだが
月初から暫くの間、仕事プログラムと向き合わなければならないので、
一旦趣味の開発は休むことにしようと思う。

kksn_ripper.py で8BIT MUSIC POWER ファイナル&アンコールをごにょごにょする。

f:id:dumbo001:20171226214454j:plain:w640

例によって VirtuaNES 組み込み実行ファイルから ROM をごにょごにょする方法。

今回もベースツールは id:eagle0wl さんのものを用いる。

以下リンクより入手されたし。

http://eagle0wl.hatenadiary.jp/entry/2017/05/01/045856


・8BIT MUSIC POWER FINAL.exe から 8BIT MUSIC POWER FINAL.nes をごにょごにょ出来るようにする。

22行目に下記1行を追加

rip_status_table.append({'md5_hash': u'031b7afa1fcc8ec0b2469ff88e043ef5', 'offset': 0x00069084, 'size': 0x00046BE0}) # 8BIT MUSIC POWER FINAL.exe


23行目のNESヘッダ定義を下記の通り修正

commoniNESHeader = '4E45531A102042000000000000000000'.decode('hex')

↓

commoniNESHeader = '4E45531A202040000000000000000000'.decode('hex')

※カートリッジ版と CRC が違う。吸い出しミスでなければバージョン違い?


・8BIT MUSIC POWER ENCORE.exe から 8BIT MUSIC POWER ENCORE.nes をごにょごにょ出来るようにする。

22行目に下記1行を追加

rip_status_table.append({'md5_hash': u'e16444892866a35f2c75fee2ac541991', 'offset': 0x00069084, 'size': 0x0002AD60}) # 8BIT MUSIC POWER ENCORE.exe


23行目のNESヘッダ定義を下記の通り修正

commoniNESHeader = '4E45531A102042000000000000000000'.decode('hex')

↓

commoniNESHeader = '4E45531A102041000000000000000000'.decode('hex')


追記。
大元のツールでも対応されたみたいなので、
上記修正を行わずとも抽出出来るようになりました。

今からコミケ合わせでGBAゲームを作ってみる(9)

電源投入の度に部品出現パターンが同じになってしまう所と、
ハイスコアの記録において、SRAM読み書きを用いて対処。

・ヤルハラのおもちアドバンス
f:id:dumbo001:20171223194515p:plain

これで求める要件は一通り満たしたので、
後は元旦のバイナリ公開に向けて準備するだけ。

ソースコードは、、
GBA Develop Wiki さんのサンプルプログラムから
ライブラリをかなり利用させて貰っていて
半分くらい自分の書いたコードじゃないから厳しいかも…。


参考文献:
NO.114 2048
http://akkera102.sakura.ne.jp/gbadev/index.php?NO.114%202048
後日談
http://akkera102.hatenablog.com/entry/2016/02/13/190713

今からコミケ合わせでGBAゲームを作ってみる(8)

BGタイルマップによるフォント、背景画像を表示するところまで出来上がり。
これでゲームとしての体裁は整った感じ。

ヤルハラのおもちアドバンス(1)
f:id:dumbo001:20171220143854j:plain:w360

ヤルハラのおもちアドバンス(1)
f:id:dumbo001:20171220144406j:plain:w360

後はパーツの出現における電源パターン回避と、ハイスコアの記録かなぁ。
RTCの無いGBA環境で、さてどうしたものだろうか。。

参考文献:
Tutorial.10 タイルモード(1)
http://akkera102.sakura.ne.jp/gbadev/index.php?tutorial.10
Tutorial.11 タイルモード(2)
http://akkera102.sakura.ne.jp/gbadev/index.php?tutorial.11

今からコミケ合わせでGBAゲームを作ってみる(7)

スプライトの読込・表示・制御までおしまい。

f:id:dumbo001:20171218004706p:plain

DirectSound とは打って変わって、こちらはスンナリ理解出来た。
過去 DS で開発をやっていたからなのか、
はたまた id:akkera102 さんのチュートリアルが良かったのか。
まあどっちもなんだろうけど。

残すは BG タイルの表示のみか。
進み具合からして、意外と手こずっているのかも…。

参考文献:
Tutorial.7 スプライト(1)
http://akkera102.sakura.ne.jp/gbadev/index.php?tutorial.7

Tutorial.8 スプライト(2)
http://akkera102.sakura.ne.jp/gbadev/index.php?tutorial.8

今からコミケ合わせでGBAゲームを作ってみる(6)

DirectSound で BGM と SE の再生まで完了した。

f:id:dumbo001:20171216194448p:plain

id:akkera102 さんとこのブログ解説記事と
サンプルソースを参考にさせて頂いた。

あいや、正直半分くらいしか理解出来ていないんだが…。
ただ他にもいくつか作りたいものは有ったりするんで、
自分なりの咀嚼は来年の課題ということで。

次は取り合えずスプライトかな、と。
このままだと微調整も儘ならないし、遊んでいても面白くないし。

…という前置きではあるが、
実のところ BG タイルより配置に頭使わないから
先に片付けてしまおうってのが本音。

参考文献:
DirectSound (大雑把な説明1) - GBAプログラミング跡地
http://akkera102.hatenablog.com/entry/2015/10/15/212041

DirectSound (大雑把な説明2) - GBAプログラミング跡地
http://akkera102.hatenablog.com/entry/2015/10/17/181304