ユーザ用ツール

ログイン版ドラゴンスレイヤーの抽出ツール

概要

PC-8801用のログイン版ドラゴンスレイヤーにパッチを当てて、PC-6001シリーズで動くようにしてしまった剛の者がいます。 こちらのツールを使えばPC-6001版が作成できるのですが、そのためには、PC-8801版からプログラムとデータを引き抜く必要があります。

ここでは、D88形式のディスク版より、データを引き抜くツールを公開します。

バイナリエディタなどで、切り貼りすることなく、一発で抽出します。

実行には Ruby が必要になります。 P6版ドラゴンスレイヤー PC88用ログイン版ドラゴンスレイヤー

ツール

以下のコードを適当な名前で保存し、rubyで実行するだけです。extract.rbという名前で保存したならば、 $ ruby extract.rb dragonslayer.d88のように、ログイン版ドラゴンスレイヤーのディスクイメージを与えて呼び出してください。 少し待つと、pr0.bin,pr1.bin,および map01.binmap20.binが生成されますので、あとは、gen_dragonp6.exeを実行するだけです。

class DragonSlayerD88
  @buf = nil
  @trk = nil
  def initialize(f)
    @trk = []
    @buf = f.read
    print "Read: #{@buf.bytes.size} bytes\n"
    p = 0x20
    0.upto(163) do |s|
      str = @buf.bytes[p,4].pack("C4")
      v = str.unpack("V")[0]
      p += 4
      @trk[s] = v
    end
  end

  def get_track(t)
    dat = nil
    sp = @trk[t]
    while true
      secn = @buf.bytes[sp+2].ord
      nsec = @buf.bytes[sp+4].ord
      len = (@buf.bytes[sp+0xe].chr+@buf.bytes[sp+0xf].chr).unpack("v")[0]
      d = @buf.bytes[sp+0x10,len].pack("C*")
      if dat.nil?
        dat = d
      else
        dat += d
      end
      print "Track: #{t} Sector: #{secn}/#{nsec} (offset: #{sp}) Length: #{len}\n"
      sp += len + 0x10
      break if secn == 4
    end
    return dat
  end

  def get_pr0
    fname = 'pr0.bin'
    pr0 = get_track(3)
    File.rename(fname, fname + '.bak') if File.exists?(fname)
    open(fname,'w') do |f| f.write pr0 end
  end

  def get_pr1
    fname = 'pr1.bin'
    pr1 = get_track(4) + get_track(5)
    File.rename(fname, fname + '.bak') if File.exists?(fname)
    open(fname,'w') do |f| f.write pr1 end
  end

  def get_maps
    1.upto(20) do |m|
      map = get_track(20 + m * 2) + get_track(20 + m * 2 + 1)
      fname = "map#{sprintf('%02d',m)}.bin"
      File.rename(fname, fname + '.bak') if File.exists?(fname)
      open(fname,'w') do |f| f.write map end
    end
  end
end

ds88 = DragonSlayerD88.new(ARGF)
ds88.get_pr0
ds88.get_pr1
ds88.get_maps

This website uses cookies. By using the website, you agree with storing cookies on your computer. Also, you acknowledge that you have read and understand our Privacy Policy. If you do not agree, please leave the website.

More information