ReverseBox 0.26.1__tar.gz → 0.26.2__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (115) hide show
  1. {reversebox-0.26.1 → reversebox-0.26.2}/PKG-INFO +2 -1
  2. {reversebox-0.26.1 → reversebox-0.26.2}/README.md +1 -0
  3. {reversebox-0.26.1 → reversebox-0.26.2}/ReverseBox.egg-info/PKG-INFO +2 -1
  4. {reversebox-0.26.1 → reversebox-0.26.2}/reversebox/image/common.py +8 -4
  5. {reversebox-0.26.1 → reversebox-0.26.2}/reversebox/image/image_decoder.py +34 -25
  6. {reversebox-0.26.1 → reversebox-0.26.2}/reversebox/image/image_formats.py +1 -0
  7. {reversebox-0.26.1 → reversebox-0.26.2}/setup.py +1 -1
  8. {reversebox-0.26.1 → reversebox-0.26.2}/LICENSE +0 -0
  9. {reversebox-0.26.1 → reversebox-0.26.2}/ReverseBox.egg-info/SOURCES.txt +0 -0
  10. {reversebox-0.26.1 → reversebox-0.26.2}/ReverseBox.egg-info/dependency_links.txt +0 -0
  11. {reversebox-0.26.1 → reversebox-0.26.2}/ReverseBox.egg-info/requires.txt +0 -0
  12. {reversebox-0.26.1 → reversebox-0.26.2}/ReverseBox.egg-info/top_level.txt +0 -0
  13. {reversebox-0.26.1 → reversebox-0.26.2}/reversebox/__init__.py +0 -0
  14. {reversebox-0.26.1 → reversebox-0.26.2}/reversebox/checksum/__init__.py +0 -0
  15. {reversebox-0.26.1 → reversebox-0.26.2}/reversebox/checksum/checksum_adler32.py +0 -0
  16. {reversebox-0.26.1 → reversebox-0.26.2}/reversebox/checksum/checksum_cocos2d_pvr.py +0 -0
  17. {reversebox-0.26.1 → reversebox-0.26.2}/reversebox/checksum/checksum_fletcher16.py +0 -0
  18. {reversebox-0.26.1 → reversebox-0.26.2}/reversebox/checksum/checksum_fletcher32.py +0 -0
  19. {reversebox-0.26.1 → reversebox-0.26.2}/reversebox/checksum/checksum_internet_ipv4_header.py +0 -0
  20. {reversebox-0.26.1 → reversebox-0.26.2}/reversebox/checksum/checksum_sum8.py +0 -0
  21. {reversebox-0.26.1 → reversebox-0.26.2}/reversebox/checksum/checksum_sum8_2s_complement.py +0 -0
  22. {reversebox-0.26.1 → reversebox-0.26.2}/reversebox/checksum/checksum_unix_sum_bsd16.py +0 -0
  23. {reversebox-0.26.1 → reversebox-0.26.2}/reversebox/checksum/checksum_unix_sum_sysv.py +0 -0
  24. {reversebox-0.26.1 → reversebox-0.26.2}/reversebox/checksum/checksum_xor8.py +0 -0
  25. {reversebox-0.26.1 → reversebox-0.26.2}/reversebox/common/__init__.py +0 -0
  26. {reversebox-0.26.1 → reversebox-0.26.2}/reversebox/common/common.py +0 -0
  27. {reversebox-0.26.1 → reversebox-0.26.2}/reversebox/common/logger.py +0 -0
  28. {reversebox-0.26.1 → reversebox-0.26.2}/reversebox/common/numpy_helper_functions.py +0 -0
  29. {reversebox-0.26.1 → reversebox-0.26.2}/reversebox/compression/__init__.py +0 -0
  30. {reversebox-0.26.1 → reversebox-0.26.2}/reversebox/compression/compression_jcalg1.py +0 -0
  31. {reversebox-0.26.1 → reversebox-0.26.2}/reversebox/compression/compression_lzo.py +0 -0
  32. {reversebox-0.26.1 → reversebox-0.26.2}/reversebox/compression/compression_mio0.py +0 -0
  33. {reversebox-0.26.1 → reversebox-0.26.2}/reversebox/compression/compression_refpack.py +0 -0
  34. {reversebox-0.26.1 → reversebox-0.26.2}/reversebox/compression/compression_zlib.py +0 -0
  35. {reversebox-0.26.1 → reversebox-0.26.2}/reversebox/crc/__init__.py +0 -0
  36. {reversebox-0.26.1 → reversebox-0.26.2}/reversebox/crc/crc16_arc.py +0 -0
  37. {reversebox-0.26.1 → reversebox-0.26.2}/reversebox/crc/crc16_ccitt.py +0 -0
  38. {reversebox-0.26.1 → reversebox-0.26.2}/reversebox/crc/crc16_dnp.py +0 -0
  39. {reversebox-0.26.1 → reversebox-0.26.2}/reversebox/crc/crc16_ea_crcf.py +0 -0
  40. {reversebox-0.26.1 → reversebox-0.26.2}/reversebox/crc/crc16_kermit.py +0 -0
  41. {reversebox-0.26.1 → reversebox-0.26.2}/reversebox/crc/crc16_modbus.py +0 -0
  42. {reversebox-0.26.1 → reversebox-0.26.2}/reversebox/crc/crc16_sick.py +0 -0
  43. {reversebox-0.26.1 → reversebox-0.26.2}/reversebox/crc/crc32_asobo.py +0 -0
  44. {reversebox-0.26.1 → reversebox-0.26.2}/reversebox/crc/crc32_iso_hdlc.py +0 -0
  45. {reversebox-0.26.1 → reversebox-0.26.2}/reversebox/crc/crc64_asobo.py +0 -0
  46. {reversebox-0.26.1 → reversebox-0.26.2}/reversebox/crc/crc64_go_iso.py +0 -0
  47. {reversebox-0.26.1 → reversebox-0.26.2}/reversebox/crc/crc8.py +0 -0
  48. {reversebox-0.26.1 → reversebox-0.26.2}/reversebox/crc/crc_unix_cksum.py +0 -0
  49. {reversebox-0.26.1 → reversebox-0.26.2}/reversebox/encryption/__init__.py +0 -0
  50. {reversebox-0.26.1 → reversebox-0.26.2}/reversebox/encryption/encryption_hatch_engine.py +0 -0
  51. {reversebox-0.26.1 → reversebox-0.26.2}/reversebox/encryption/encryption_rot13.py +0 -0
  52. {reversebox-0.26.1 → reversebox-0.26.2}/reversebox/encryption/encryption_xor_basic.py +0 -0
  53. {reversebox-0.26.1 → reversebox-0.26.2}/reversebox/encryption/encryption_xor_basic_key_guesser.py +0 -0
  54. {reversebox-0.26.1 → reversebox-0.26.2}/reversebox/encryption/encryption_xor_gianas_return_zda.py +0 -0
  55. {reversebox-0.26.1 → reversebox-0.26.2}/reversebox/encryption/encryption_xor_retro64_eco.py +0 -0
  56. {reversebox-0.26.1 → reversebox-0.26.2}/reversebox/hash/__init__.py +0 -0
  57. {reversebox-0.26.1 → reversebox-0.26.2}/reversebox/hash/hash_additive.py +0 -0
  58. {reversebox-0.26.1 → reversebox-0.26.2}/reversebox/hash/hash_ap.py +0 -0
  59. {reversebox-0.26.1 → reversebox-0.26.2}/reversebox/hash/hash_djb2.py +0 -0
  60. {reversebox-0.26.1 → reversebox-0.26.2}/reversebox/hash/hash_fnv.py +0 -0
  61. {reversebox-0.26.1 → reversebox-0.26.2}/reversebox/hash/hash_jenkins_one_at_a_time.py +0 -0
  62. {reversebox-0.26.1 → reversebox-0.26.2}/reversebox/hash/hash_md2.py +0 -0
  63. {reversebox-0.26.1 → reversebox-0.26.2}/reversebox/hash/hash_md5.py +0 -0
  64. {reversebox-0.26.1 → reversebox-0.26.2}/reversebox/hash/hash_murmur3.py +0 -0
  65. {reversebox-0.26.1 → reversebox-0.26.2}/reversebox/hash/hash_sdbm.py +0 -0
  66. {reversebox-0.26.1 → reversebox-0.26.2}/reversebox/hash/hash_sha1.py +0 -0
  67. {reversebox-0.26.1 → reversebox-0.26.2}/reversebox/hash/hash_sha2.py +0 -0
  68. {reversebox-0.26.1 → reversebox-0.26.2}/reversebox/image/__init__.py +0 -0
  69. {reversebox-0.26.1 → reversebox-0.26.2}/reversebox/image/compression/__init__.py +0 -0
  70. {reversebox-0.26.1 → reversebox-0.26.2}/reversebox/image/compression/compression_gst.py +0 -0
  71. {reversebox-0.26.1 → reversebox-0.26.2}/reversebox/image/compression/compression_lzw.py +0 -0
  72. {reversebox-0.26.1 → reversebox-0.26.2}/reversebox/image/compression/compression_packbits.py +0 -0
  73. {reversebox-0.26.1 → reversebox-0.26.2}/reversebox/image/compression/compression_rle_executioners.py +0 -0
  74. {reversebox-0.26.1 → reversebox-0.26.2}/reversebox/image/compression/compression_rle_tga.py +0 -0
  75. {reversebox-0.26.1 → reversebox-0.26.2}/reversebox/image/compression/compression_zlib.py +0 -0
  76. {reversebox-0.26.1 → reversebox-0.26.2}/reversebox/image/decoders/__init__.py +0 -0
  77. {reversebox-0.26.1 → reversebox-0.26.2}/reversebox/image/decoders/bumpmap_decoder.py +0 -0
  78. {reversebox-0.26.1 → reversebox-0.26.2}/reversebox/image/decoders/compressed_decoder.py +0 -0
  79. {reversebox-0.26.1 → reversebox-0.26.2}/reversebox/image/decoders/gst_decoder.py +0 -0
  80. {reversebox-0.26.1 → reversebox-0.26.2}/reversebox/image/decoders/n64_decoder.py +0 -0
  81. {reversebox-0.26.1 → reversebox-0.26.2}/reversebox/image/decoders/yuv_decoder.py +0 -0
  82. {reversebox-0.26.1 → reversebox-0.26.2}/reversebox/image/encoders/__init__.py +0 -0
  83. {reversebox-0.26.1 → reversebox-0.26.2}/reversebox/image/encoders/gst_encoder.py +0 -0
  84. {reversebox-0.26.1 → reversebox-0.26.2}/reversebox/image/file_formats/__init__.py +0 -0
  85. {reversebox-0.26.1 → reversebox-0.26.2}/reversebox/image/file_formats/image_dds.py +0 -0
  86. {reversebox-0.26.1 → reversebox-0.26.2}/reversebox/image/image_encoder.py +0 -0
  87. {reversebox-0.26.1 → reversebox-0.26.2}/reversebox/image/palettes/__init__.py +0 -0
  88. {reversebox-0.26.1 → reversebox-0.26.2}/reversebox/image/palettes/palette_random.py +0 -0
  89. {reversebox-0.26.1 → reversebox-0.26.2}/reversebox/image/palettes/palette_vga.py +0 -0
  90. {reversebox-0.26.1 → reversebox-0.26.2}/reversebox/image/pillow_wrapper.py +0 -0
  91. {reversebox-0.26.1 → reversebox-0.26.2}/reversebox/image/swizzling/__init__.py +0 -0
  92. {reversebox-0.26.1 → reversebox-0.26.2}/reversebox/image/swizzling/swizzle_3ds.py +0 -0
  93. {reversebox-0.26.1 → reversebox-0.26.2}/reversebox/image/swizzling/swizzle_bc.py +0 -0
  94. {reversebox-0.26.1 → reversebox-0.26.2}/reversebox/image/swizzling/swizzle_cmpr.py +0 -0
  95. {reversebox-0.26.1 → reversebox-0.26.2}/reversebox/image/swizzling/swizzle_gamecube.py +0 -0
  96. {reversebox-0.26.1 → reversebox-0.26.2}/reversebox/image/swizzling/swizzle_gst.py +0 -0
  97. {reversebox-0.26.1 → reversebox-0.26.2}/reversebox/image/swizzling/swizzle_morton.py +0 -0
  98. {reversebox-0.26.1 → reversebox-0.26.2}/reversebox/image/swizzling/swizzle_morton_ps4.py +0 -0
  99. {reversebox-0.26.1 → reversebox-0.26.2}/reversebox/image/swizzling/swizzle_ps2.py +0 -0
  100. {reversebox-0.26.1 → reversebox-0.26.2}/reversebox/image/swizzling/swizzle_psp.py +0 -0
  101. {reversebox-0.26.1 → reversebox-0.26.2}/reversebox/image/swizzling/swizzle_psvita_dreamcast.py +0 -0
  102. {reversebox-0.26.1 → reversebox-0.26.2}/reversebox/image/swizzling/swizzle_switch.py +0 -0
  103. {reversebox-0.26.1 → reversebox-0.26.2}/reversebox/image/swizzling/swizzle_x360.py +0 -0
  104. {reversebox-0.26.1 → reversebox-0.26.2}/reversebox/io_files/__init__.py +0 -0
  105. {reversebox-0.26.1 → reversebox-0.26.2}/reversebox/io_files/bytes_handler.py +0 -0
  106. {reversebox-0.26.1 → reversebox-0.26.2}/reversebox/io_files/bytes_helper_functions.py +0 -0
  107. {reversebox-0.26.1 → reversebox-0.26.2}/reversebox/io_files/check_file.py +0 -0
  108. {reversebox-0.26.1 → reversebox-0.26.2}/reversebox/io_files/file_handler.py +0 -0
  109. {reversebox-0.26.1 → reversebox-0.26.2}/reversebox/io_files/mod_handler.py +0 -0
  110. {reversebox-0.26.1 → reversebox-0.26.2}/reversebox/io_files/translation_text_handler.py +0 -0
  111. {reversebox-0.26.1 → reversebox-0.26.2}/reversebox/libs/DirectXTex.dll +0 -0
  112. {reversebox-0.26.1 → reversebox-0.26.2}/reversebox/libs/__init__.py +0 -0
  113. {reversebox-0.26.1 → reversebox-0.26.2}/reversebox/libs/ea_swizzle.dll +0 -0
  114. {reversebox-0.26.1 → reversebox-0.26.2}/reversebox/libs/refpack.dll +0 -0
  115. {reversebox-0.26.1 → reversebox-0.26.2}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: ReverseBox
3
- Version: 0.26.1
3
+ Version: 0.26.2
4
4
  Summary: A set of functions useful in reverse engineering.
5
5
  Home-page: https://github.com/bartlomiejduda/ReverseBox
6
6
  Author: Bartlomiej Duda
@@ -172,6 +172,7 @@ or software researchers).
172
172
  - Decode PAL4 ✔️
173
173
  - Decode PAL8 ✔️
174
174
  - Decode PAL16 ✔️
175
+ - Decode PAL32 ✔️
175
176
  - Decode PAL_I8A8 ✔️
176
177
  - Decode N64_RGB5A3 ✔️
177
178
  - Decode N64_I4 ✔️
@@ -135,6 +135,7 @@ or software researchers).
135
135
  - Decode PAL4 ✔️
136
136
  - Decode PAL8 ✔️
137
137
  - Decode PAL16 ✔️
138
+ - Decode PAL32 ✔️
138
139
  - Decode PAL_I8A8 ✔️
139
140
  - Decode N64_RGB5A3 ✔️
140
141
  - Decode N64_I4 ✔️
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: ReverseBox
3
- Version: 0.26.1
3
+ Version: 0.26.2
4
4
  Summary: A set of functions useful in reverse engineering.
5
5
  Home-page: https://github.com/bartlomiejduda/ReverseBox
6
6
  Author: Bartlomiej Duda
@@ -172,6 +172,7 @@ or software researchers).
172
172
  - Decode PAL4 ✔️
173
173
  - Decode PAL8 ✔️
174
174
  - Decode PAL16 ✔️
175
+ - Decode PAL32 ✔️
175
176
  - Decode PAL_I8A8 ✔️
176
177
  - Decode N64_RGB5A3 ✔️
177
178
  - Decode N64_I4 ✔️
@@ -83,7 +83,8 @@ def get_bpp_for_image_format(image_format: ImageFormats) -> int:
83
83
  ImageFormats.N64_I4,
84
84
  ImageFormats.BC1_DXT1,
85
85
  ImageFormats.BC4_UNORM,
86
- ) or "pal4" in image_format.value.lower():
86
+ ImageFormats.PAL4,
87
+ ):
87
88
  return 4
88
89
  elif image_format in (ImageFormats.RGBX2222,
89
90
  ImageFormats.RGBA2222,
@@ -110,7 +111,8 @@ def get_bpp_for_image_format(image_format: ImageFormats) -> int:
110
111
  ImageFormats.GST222,
111
112
  ImageFormats.GST422,
112
113
  ImageFormats.GST822,
113
- ) or "pal8" in image_format.value.lower():
114
+ ImageFormats.PAL8,
115
+ ):
114
116
  return 8
115
117
  elif image_format in (ImageFormats.YUV410P, ):
116
118
  return 9
@@ -152,8 +154,9 @@ def get_bpp_for_image_format(image_format: ImageFormats) -> int:
152
154
  ImageFormats.YUV422_YUY2,
153
155
  ImageFormats.YUV440P,
154
156
  ImageFormats.BUMPMAP_SR,
155
- ) or "pal16" in image_format.value.lower()\
156
- or "pal_i8a8" in image_format.value.lower():
157
+ ImageFormats.PAL16,
158
+ ImageFormats.PAL_I8A8,
159
+ ):
157
160
  return 16
158
161
  elif image_format in (ImageFormats.YUVA420P, ):
159
162
  return 20
@@ -175,6 +178,7 @@ def get_bpp_for_image_format(image_format: ImageFormats) -> int:
175
178
  ImageFormats.B32,
176
179
  ImageFormats.RGBM8888,
177
180
  ImageFormats.AYUV,
181
+ ImageFormats.PAL32,
178
182
  ):
179
183
  return 32
180
184
  elif image_format in (ImageFormats.RGB48,
@@ -564,6 +564,7 @@ class ImageDecoder:
564
564
  ImageFormats.PAL8: 8,
565
565
  ImageFormats.PAL16: 16,
566
566
  ImageFormats.PAL_I8A8: 16,
567
+ ImageFormats.PAL32: 32,
567
568
  }
568
569
 
569
570
  def _get_endianess_format(self, endianess: str) -> str:
@@ -579,7 +580,7 @@ class ImageDecoder:
579
580
  decode_function, bits_per_pixel, image_entry_read_function = image_format
580
581
  image_handler = BytesHandler(image_data)
581
582
  texture_data = bytearray(img_width * img_height * 4)
582
- read_offset = 0
583
+ read_offset: int = 0
583
584
  image_endianess_format: str = self._get_endianess_format(image_endianess)
584
585
 
585
586
  if bits_per_pixel == 4:
@@ -648,20 +649,39 @@ class ImageDecoder:
648
649
  image_endianess_format: str = self._get_endianess_format(image_endianess)
649
650
  palette_endianess_format: str = self._get_endianess_format(palette_endianess)
650
651
 
651
- palette_data_ints = []
652
+ palette_data_ints: list = []
652
653
  for i in range(len(palette_data) // palette_entry_size):
653
654
  palette_entry = palette_handler.get_bytes(palette_offset, palette_entry_size)
654
655
  palette_entry_int = palette_entry_read_function(palette_entry, palette_endianess_format)
655
656
  palette_offset += palette_entry_size
656
657
  palette_data_ints.append(palette_entry_int)
657
658
 
658
- if img_bits_per_pixel == 16:
659
+ if img_bits_per_pixel == 4:
660
+ for i in range(0, img_width * img_height, 2):
661
+ palette_index: bytes = image_handler.get_bytes(image_offset, 1)
662
+ palette_index_int: int = struct.unpack(image_endianess_format + "B", palette_index or b'\x00')[0]
663
+ if image_endianess == "little":
664
+ texture_data[i * 4:(i + 1) * 4] = decode_function(self, palette_data_ints[palette_index_int & 0xf]) # noqa
665
+ texture_data[(i + 1) * 4:(i + 2) * 4] = decode_function(self, palette_data_ints[(palette_index_int >> 4) & 0xf]) # noqa
666
+ elif image_endianess == "big":
667
+ texture_data[i * 4:(i + 1) * 4] = decode_function(self, palette_data_ints[(palette_index_int >> 4) & 0xf]) # noqa
668
+ texture_data[(i + 1) * 4:(i + 2) * 4] =decode_function(self, palette_data_ints[palette_index_int & 0xf]) # noqa
669
+ else:
670
+ raise Exception(f"Endianess not supported! Endianess: {image_endianess}")
671
+ image_offset += 1
672
+ elif img_bits_per_pixel == 8:
673
+ for i in range(img_width * img_height):
674
+ palette_index: bytes = image_handler.get_bytes(image_offset, 1)
675
+ palette_index_int: int = struct.unpack(image_endianess_format + "B", palette_index or b'\x00')[0]
676
+ texture_data[i * 4:(i + 1) * 4] = decode_function(self, palette_data_ints[palette_index_int]) # noqa
677
+ image_offset += 1
678
+ elif img_bits_per_pixel == 16:
659
679
  for i in range(img_width * img_height):
660
- if "pal_i8a8" in image_format.value.lower():
680
+ if image_format is ImageFormats.PAL_I8A8:
661
681
  palette_index: bytes = image_handler.get_bytes(image_offset, 1)
662
682
  alpha_value: bytes = image_handler.get_bytes(image_offset+1, 1)
663
- palette_index_int: int = struct.unpack(image_endianess_format + "B", palette_index)[0]
664
- alpha_value_int: int = struct.unpack(image_endianess_format + "B", alpha_value)[0]
683
+ palette_index_int: int = struct.unpack(image_endianess_format + "B", palette_index or b'\x00')[0]
684
+ alpha_value_int: int = struct.unpack(image_endianess_format + "B", alpha_value or b'\x00')[0]
665
685
  output_bytes: bytes = decode_function(self, palette_data_ints[palette_index_int]) # noqa
666
686
 
667
687
  decoded_bytes: bytearray = bytearray(4)
@@ -678,29 +698,18 @@ class ImageDecoder:
678
698
 
679
699
  texture_data[i * 4:(i + 1) * 4] = decoded_bytes
680
700
  else:
681
- palette_index = image_handler.get_bytes(image_offset, 2)
682
- palette_index_int = struct.unpack(image_endianess_format + "H", palette_index)[0]
701
+ palette_index: bytes = image_handler.get_bytes(image_offset, 1) # PAL16 = I8P8
702
+ palette_index_int: int = struct.unpack(image_endianess_format + "B", palette_index or b'\x00')[0]
683
703
  texture_data[i * 4:(i + 1) * 4] = decode_function(self, palette_data_ints[palette_index_int]) # noqa
684
704
  image_offset += 2
685
- elif img_bits_per_pixel == 8:
705
+ elif img_bits_per_pixel == 32:
686
706
  for i in range(img_width * img_height):
687
- palette_index = image_handler.get_bytes(image_offset, 1)
688
- palette_index_int = struct.unpack(image_endianess_format + "B", palette_index)[0]
707
+ palette_index: bytes = image_handler.get_bytes(image_offset, 1) # PAL32 = I8P24
708
+ palette_index_int: int = struct.unpack(image_endianess_format + "B", palette_index or b'\x00')[0]
689
709
  texture_data[i * 4:(i + 1) * 4] = decode_function(self, palette_data_ints[palette_index_int]) # noqa
690
- image_offset += 1
691
- elif img_bits_per_pixel == 4:
692
- for i in range(0, img_width * img_height, 2):
693
- palette_index = image_handler.get_bytes(image_offset, 1)
694
- palette_index_int = struct.unpack(image_endianess_format + "B", palette_index)[0]
695
- if image_endianess == "little":
696
- texture_data[i * 4:(i + 1) * 4] = decode_function(self, palette_data_ints[palette_index_int & 0xf]) # noqa
697
- texture_data[(i + 1) * 4:(i + 2) * 4] = decode_function(self, palette_data_ints[(palette_index_int >> 4) & 0xf]) # noqa
698
- elif image_endianess == "big":
699
- texture_data[i * 4:(i + 1) * 4] = decode_function(self, palette_data_ints[(palette_index_int >> 4) & 0xf]) # noqa
700
- texture_data[(i + 1) * 4:(i + 2) * 4] =decode_function(self, palette_data_ints[palette_index_int & 0xf]) # noqa
701
- else:
702
- raise Exception(f"Endianess not supported! Endianess: {image_endianess}")
703
- image_offset += 1
710
+ image_offset += 4
711
+ else:
712
+ raise Exception(f"Bpp {img_bits_per_pixel} not supported!")
704
713
 
705
714
  return texture_data
706
715
 
@@ -87,6 +87,7 @@ class ImageFormats(Enum):
87
87
  PAL8 = "pal8"
88
88
  PAL16 = "pal16"
89
89
  PAL_I8A8 = "pal_i8a8"
90
+ PAL32 = "pal32"
90
91
 
91
92
  # N64 / WII formats
92
93
  N64_RGB5A3 = "n64_rgb5a3" # COLOR+ALPHA, 16bpp
@@ -8,7 +8,7 @@ from typing import Final
8
8
 
9
9
  import setuptools
10
10
 
11
- VERSION_NUM: Final[str] = "0.26.1"
11
+ VERSION_NUM: Final[str] = "0.26.2"
12
12
 
13
13
 
14
14
  def get_long_description() -> str:
File without changes
File without changes