joshuaskelly / quake-cli-tools

Command line tools for creating Quake content.
MIT License
75 stars 10 forks source link

bsp2svg fails on id pak1's e2m3 #7

Closed JPLeBreton closed 4 years ago

JPLeBreton commented 4 years ago

I extracted the original id maps from the paks and fed them to bsp2svg. Every other map appears to process fine, except e2m3 which gives this error:

  File "/usr/bin/bsp2svg", line 11, in <module>
    load_entry_point('quake-cli-tools==1.1.0', 'console_scripts', 'bsp2svg')()
  File "/usr/lib/python3.8/site-packages/qcli/bsp2svg/cli.py", line 73, in main
    converter.convert(args.file, args.dest)
  File "/usr/lib/python3.8/site-packages/qcli/bsp2svg/converter.py", line 31, in convert
    bsp_file = Bsp.open(bsp_file)
  File "/usr/lib/python3.8/site-packages/qcli/bsp2svg/api.py", line 127, in open
    models = get_models()
  File "/usr/lib/python3.8/site-packages/qcli/bsp2svg/api.py", line 38, in get_models
    return [process_model(m) for m in bsp_file.models]
  File "/usr/lib/python3.8/site-packages/qcli/bsp2svg/api.py", line 38, in <listcomp>
    return [process_model(m) for m in bsp_file.models]
  File "/usr/lib/python3.8/site-packages/qcli/bsp2svg/api.py", line 41, in process_model
    faces = get_faces(bsp_model)
  File "/usr/lib/python3.8/site-packages/qcli/bsp2svg/api.py", line 50, in get_faces
    return [process_face(f) for f in face_range]
  File "/usr/lib/python3.8/site-packages/qcli/bsp2svg/api.py", line 50, in <listcomp>
    return [process_face(f) for f in face_range]
  File "/usr/lib/python3.8/site-packages/qcli/bsp2svg/api.py", line 58, in process_face
    texture_name = get_texture_name(face_index)
  File "/usr/lib/python3.8/site-packages/qcli/bsp2svg/api.py", line 99, in get_texture_name
    return miptex.name
AttributeError: 'NoneType' object has no attribute 'name'

I extracted the maps using SLADE, so just in case there's any discrepancy there my e2m3.bsp's md5 sum is 6b179e8cb4b844fbeba242893781dbb6.

joshuaskelly commented 4 years ago

Thanks for the bug report! I can also repro it on my end. It looks like it is possible for a Bsp TexInfo object to reference a Miptexture that has been removed.

I have a fix ready to go: 0b4f756