diff --git a/bsp_tool/extensions/lightmaps.py b/bsp_tool/extensions/lightmaps.py index f397f75c..27a0b107 100644 --- a/bsp_tool/extensions/lightmaps.py +++ b/bsp_tool/extensions/lightmaps.py @@ -83,7 +83,7 @@ def save_quakebsp_q1(bsp, image_dir="./", lightmap_scale=16): # saves to 1, there are multiple lightmaps of the same size immediately after the first width, height = [s + 1 for s in face.lightmap.size] - texels = lightmap_texels[face.light_offset:face.light_offset + (width * height * 4)] + texels = bytes(lightmap_texels[face.light_offset:face.light_offset + (width * height * 4)]) face_lightmap = Image.frombytes("RGBA", (width, height), texels, "raw") # Alpha is HDR exponent # TODO: bleed each lightmap by an extra pixel in each dimension lightmaps.append(face_lightmap) @@ -141,14 +141,14 @@ def save_rbsp_r1(rbsp, image_dir="./", ext="png"): for header in rbsp.LIGHTMAP_HEADERS: # REAL_TIME_LIGHTS x1 rtl_end = rtl_start + (header.width * header.height * 4) - rtl_bytes = rbsp.LIGHTMAP_DATA_REAL_TIME_LIGHTS[rtl_start:rtl_end] + rtl_bytes = bytes(rbsp.LIGHTMAP_DATA_REAL_TIME_LIGHTS[rtl_start:rtl_end]) rtl_lightmap = Image.frombytes("RGBA", (header.width, header.height), rtl_bytes, "raw") rtl_lightmaps.append(rtl_lightmap) rtl_start = rtl_end for i in range(2): # SKY x2 sky_end = sky_start + (header.width * header.height * 4) - sky_bytes = rbsp.LIGHTMAP_DATA_SKY[sky_start:sky_end] + sky_bytes = bytes(rbsp.LIGHTMAP_DATA_SKY[sky_start:sky_end]) sky_lightmap = Image.frombytes("RGBA", (header.width, header.height), sky_bytes, "raw") sky_lightmaps.append(sky_lightmap) sky_start = sky_end @@ -173,20 +173,20 @@ def save_rbsp_r2(rbsp, image_dir="./", ext="png"): for i in range(2): # SKY_A + SKY_B sky_end = sky_start + (header.width * header.height * 4) - sky_bytes = rbsp.LIGHTMAP_DATA_SKY[sky_start:sky_end] + sky_bytes = bytes(rbsp.LIGHTMAP_DATA_SKY[sky_start:sky_end]) sky_lightmap = Image.frombytes("RGBA", (header.width, header.height), sky_bytes, "raw") sky_lightmaps.append(sky_lightmap) sky_start = sky_end # RTL_A + RTL_B rtl_end = rtl_start + (header.width * header.height * 4) - rtl_bytes = rbsp.LIGHTMAP_DATA_REAL_TIME_LIGHTS[rtl_start:rtl_end] + rtl_bytes = bytes(rbsp.LIGHTMAP_DATA_REAL_TIME_LIGHTS[rtl_start:rtl_end]) rtl_lightmap = Image.frombytes("RGBA", (header.width, header.height), rtl_bytes, "raw") rtl_lightmaps.append(rtl_lightmap) rtl_start = rtl_end if not hasattr(rbsp.headers["LIGHTMAP_DATA_REAL_TIME_LIGHTS"], "filename"): # internal only (not .bsp_lump) # RTL_C rtl_end = rtl_start + (header.width * header.height) - rtl_bytes = rbsp.LIGHTMAP_DATA_REAL_TIME_LIGHTS[rtl_start:rtl_end] + rtl_bytes = bytes(rbsp.LIGHTMAP_DATA_REAL_TIME_LIGHTS[rtl_start:rtl_end]) rtl_lightmap = Image.frombytes("RGBA", (header.width // 2, header.height // 2), rtl_bytes, "raw") rtl_lightmaps.append(rtl_lightmap) rtl_start = rtl_end @@ -282,18 +282,18 @@ def save_rbsp_r5(rbsp, image_dir="./", ext="png"): for i in range(2): # SKY_A + SKY_B (2x 32bpp) sky_end = sky_start + (header.width * header.height * 4) - sky_bytes = rbsp.LIGHTMAP_DATA_SKY[sky_start:sky_end] + sky_bytes = bytes(rbsp.LIGHTMAP_DATA_SKY[sky_start:sky_end]) sky_lightmap = Image.frombytes("RGBA", (header.width, header.height), sky_bytes, "raw") sky_lightmaps.append(sky_lightmap) sky_start = sky_end # RTL_A rtl_end = rtl_start + (header.width * header.height * 4) - rtl_bytes = rbsp.LIGHTMAP_DATA_REAL_TIME_LIGHTS[rtl_start:rtl_end] + rtl_bytes = bytes(rbsp.LIGHTMAP_DATA_REAL_TIME_LIGHTS[rtl_start:rtl_end]) rtl_lightmap = Image.frombytes("RGBA", (header.width, header.height), rtl_bytes, "raw") rtl_lightmaps.append(rtl_lightmap) # RTL_B rtl_end = rtl_end + (header.width * header.height * 2) - rtl_bytes = rbsp.LIGHTMAP_DATA_REAL_TIME_LIGHTS[rtl_start:rtl_end] + rtl_bytes = bytes(rbsp.LIGHTMAP_DATA_REAL_TIME_LIGHTS[rtl_start:rtl_end]) rtl_lightmap = Image.frombytes("RGBA", (header.width // 2, header.height // 2), rtl_bytes, "raw") rtl_lightmaps.append(rtl_lightmap) rtl_start = rtl_end