2020/08/02

odの使用例

XScavengerというゲームのマップがバイナリーデータだったので、Linuxでファイルダンプをするodを使って表示させました。
これを例にodの使い方を説明します。

マップは各面につき、横24、縦15のサイズであり、このデータのファイルを16進数1バイト単位で横12バイト、縦15行で表示させると、横24文字、縦15行となってこのマップに対応しました。

第1面のデータは以下のように表示させました。
一番左のカラムはファイル中のアドレスで、マップの対応には直接関係しません。

$ od -v -tx1 -w12 -j2720 ./xscavenger-1.4.5/data/levels.scl | tail -n +$((15*1)) | head -n 15
0005510 00 00 00 00 00 00 00 00 60 00 00 00
0005524 00 00 00 00 00 00 00 00 60 70 00 00
0005540 00 00 00 00 00 00 00 00 11 11 30 00
0005554 00 77 00 00 00 00 00 78 07 00 30 00
0005570 03 11 13 00 00 00 31 11 11 11 30 00
0005604 03 00 03 00 00 00 30 00 00 00 00 00
0005620 03 00 03 b0 07 00 30 00 00 00 00 00
0005634 03 03 11 11 11 11 11 11 11 30 00 00
0005650 03 03 00 00 00 00 00 00 00 30 00 00
0005664 03 03 00 00 00 0b 87 00 00 30 00 00
0005700 03 01 11 13 00 31 1a 00 70 30 00 00
0005714 03 00 00 03 00 30 00 00 11 11 11 30
0005730 03 00 00 03 00 30 00 00 00 00 00 30
0005744 93 00 70 03 80 30 00 00 00 00 b0 30
0005760 a1 11 11 11 11 11 11 11 11 11 11 1a

第2面以降第180面まで、tailの*1となっている部分を*2〜*180に書き換えて、同様に表示させました。

odのオプションは以下のとおりです。

  • -v: 重複行の表示が「*」となるのを抑制する。これをしないとtailで指定する行数が面が進むのに伴いずれていった。
  • -t: フォーマット。ここではx1を指定し、16進数1バイト単位で表示するよう指定した。
  • -w: 1行に表示するバイト数。ここでは12バイトを指定した。
  • -j: 最初にスキップするバイト数。ここでは試行錯誤で2720バイトとすればいいことが分かった。

各行24文字の対応は以下のとおりです。

  • 0: Empty
  • 1: brick
  • 2: cement
  • 3: Ladder
  • 4: Rail
  • 5: Fakebrick
  • 6: exitladder
  • 7: Object
  • 8: Enemy
  • 9: Hero
  • a: Hidden
  • b: Flashing

<環境>
・chromebookのLinux(ベータ版)環境
Chromebook 311 / C721-N14N / Acer
Chrome OS バージョン: 84.0.4147.94(Official Build) (64 ビット)
chromebookのLinux(ベータ版)環境 / Debian 9: 9.12 (Stretch)
・crouton環境
Chromebook 11 / C740-F34N / Acer
Chrome OS バージョン: 84.0.4147.94(Official Build) (64 ビット)
crouton環境 / Ubuntu 18.04.4 LTS (Bionic Beaver)


0 件のコメント:

コメントを投稿