シンプルなレベルでしたが、これはどうですか?
これは、DOSEmuを介して基本的に起動されます:
DOSEmu -exit pusher.exe
。
実行するのが面倒、デモを見ることができます:
そして、このような小さなバイナーに60のレベルがどのように適合するかが私にとって興味深いものになりました。 少しIDAを掘った後、私はbinarの `pusher.exe`からすべてのレベルを取り出してテキスト形式で印刷するプログラムを作成しました。
************************************* Maze: 1 File offset: 148C, DS:00FC, table offset: 0000 Size X: 22 Size Y: 11 End: 14BD Length: 50 XXXXX XX X* X XXX *XXX X * * X XXX X XXX X XXXXXX XX XXX XXXXXXX ..X X * * ..X XXXXX XXXX X@XXXX ..X X XXX XXXXXX XXXXXXXX *************************************
すべてのレベルを一度にダウンロードできます 。
レベルは、ハフマン-可変長ビットチェーンのようなものによって圧縮されます。 各レベルは次のようにエンコードされます。
- Xによるカードサイズ(1バイト)。
- Yのカードサイズ(1バイト)。
- ペアのシーケンスで表される、カード自体のX * Yバイト
[COUNTER] [シンボルコード]。 COUNTERは、文字が
「1 D3 D2 D1」の1つまたは4つのビットのみ、および繰り返し数
「N = 2 + D3 * 4 + D2 * 2 + D1」という式、つまり2から
9文字。 SYMBOL CODEには5つの異なる意味があります。00-空の場所、
01-壁、10-樽、110-樽の場所、111-樽、すでに立っている - Xでのプレーヤーの初期位置(1バイト)。
- Y(1バイト)のプレイヤーの開始位置。
pushermaps.cファイルでは、単純な解凍プログラム全体を見ることができます。
分解の過程で、レベルは便利なテキストで形成されましたが、まだ圧縮された形式で、例えば:
level_01 db 16h, 0Bh, 0A2h, 0DFh, 38h, 32h, 1Fh, 38h, 2Ah, 3, 0E6h db 12h, 0C0h, 0A5h, 0F2h, 83h, 2, 81h, 3, 0E4h, 12h, 82h db 25h, 6, 0CDh, 64h, 22h, 51h, 0ACh, 11h, 0A1h, 0Ah, 5 db 0E5h, 11h, 0B1h, 14h, 82h, 29h, 82h, 31h, 0A0h, 0E1h db 2Ch, 18h, 0D1h, 0CFh, 80h, 0Ch, 8 level_02 db 0Eh, 0Ah, 0F6h, 58h, 0Ch, 68h, 0Dh, 94h, 0C6h, 80h db 85h, 2, 82h, 18h, 0D0h, 15h, 4Ch, 10h, 0C6h, 0C2h, 18h db 21h, 8Dh, 1, 6, 4, 39h, 10h, 0A0h, 81h, 80h, 85h, 2 db 8, 20h, 60h, 34h, 1Bh, 0Ch, 1Eh, 0CAh, 7, 4 level_03 db 11h, 0Ah, 0E3h, 9Fh, 0Eh, 7, 0C2h, 11h, 42h, 1Fh, 8 db 50h, 23h, 0E0h, 85h, 4, 0Ch, 1Eh, 84h, 8, 0A6h, 0B4h db 10h, 85h, 2, 82h, 59h, 0D4h, 28h, 14h, 90h, 0D6h, 83h db 0DFh, 7Ch, 0Eh, 1
等
そのため、シンプルでコンパクトな倉庫番をどこかで楽しもうとするなら、 既成のいくつかのレベルを取ることができます。
インターネットには倉庫番のレベルがたくさんあり、自動格子があることは知っていますが、これは20年以上前にビナールで逆アセンブラーを使って掘っていたファンを完全に取り消すわけではありません。
GitHub'eのプロジェクト-github.com/begoon/sokoban-maps (誰かが興味を持っているなら)。