ReverseBox 0.48.0__tar.gz → 0.48.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 (121) hide show
  1. {reversebox-0.48.0 → reversebox-0.48.2}/PKG-INFO +3 -1
  2. {reversebox-0.48.0 → reversebox-0.48.2}/README.md +2 -0
  3. {reversebox-0.48.0 → reversebox-0.48.2}/ReverseBox.egg-info/PKG-INFO +3 -1
  4. {reversebox-0.48.0 → reversebox-0.48.2}/reversebox/image/common.py +2 -0
  5. {reversebox-0.48.0 → reversebox-0.48.2}/reversebox/image/image_decoder.py +20 -0
  6. {reversebox-0.48.0 → reversebox-0.48.2}/reversebox/image/image_formats.py +2 -0
  7. {reversebox-0.48.0 → reversebox-0.48.2}/reversebox/image/swizzling/swizzle_x360.py +22 -14
  8. {reversebox-0.48.0 → reversebox-0.48.2}/setup.py +1 -1
  9. {reversebox-0.48.0 → reversebox-0.48.2}/LICENSE +0 -0
  10. {reversebox-0.48.0 → reversebox-0.48.2}/ReverseBox.egg-info/SOURCES.txt +0 -0
  11. {reversebox-0.48.0 → reversebox-0.48.2}/ReverseBox.egg-info/dependency_links.txt +0 -0
  12. {reversebox-0.48.0 → reversebox-0.48.2}/ReverseBox.egg-info/requires.txt +0 -0
  13. {reversebox-0.48.0 → reversebox-0.48.2}/ReverseBox.egg-info/top_level.txt +0 -0
  14. {reversebox-0.48.0 → reversebox-0.48.2}/reversebox/__init__.py +0 -0
  15. {reversebox-0.48.0 → reversebox-0.48.2}/reversebox/checksum/__init__.py +0 -0
  16. {reversebox-0.48.0 → reversebox-0.48.2}/reversebox/checksum/checksum_adler32.py +0 -0
  17. {reversebox-0.48.0 → reversebox-0.48.2}/reversebox/checksum/checksum_cocos2d_pvr.py +0 -0
  18. {reversebox-0.48.0 → reversebox-0.48.2}/reversebox/checksum/checksum_fletcher16.py +0 -0
  19. {reversebox-0.48.0 → reversebox-0.48.2}/reversebox/checksum/checksum_fletcher32.py +0 -0
  20. {reversebox-0.48.0 → reversebox-0.48.2}/reversebox/checksum/checksum_internet_ipv4_header.py +0 -0
  21. {reversebox-0.48.0 → reversebox-0.48.2}/reversebox/checksum/checksum_sum8.py +0 -0
  22. {reversebox-0.48.0 → reversebox-0.48.2}/reversebox/checksum/checksum_sum8_2s_complement.py +0 -0
  23. {reversebox-0.48.0 → reversebox-0.48.2}/reversebox/checksum/checksum_unix_sum_bsd16.py +0 -0
  24. {reversebox-0.48.0 → reversebox-0.48.2}/reversebox/checksum/checksum_unix_sum_sysv.py +0 -0
  25. {reversebox-0.48.0 → reversebox-0.48.2}/reversebox/checksum/checksum_xor8.py +0 -0
  26. {reversebox-0.48.0 → reversebox-0.48.2}/reversebox/common/__init__.py +0 -0
  27. {reversebox-0.48.0 → reversebox-0.48.2}/reversebox/common/common.py +0 -0
  28. {reversebox-0.48.0 → reversebox-0.48.2}/reversebox/common/logger.py +0 -0
  29. {reversebox-0.48.0 → reversebox-0.48.2}/reversebox/common/numpy_helper_functions.py +0 -0
  30. {reversebox-0.48.0 → reversebox-0.48.2}/reversebox/compression/__init__.py +0 -0
  31. {reversebox-0.48.0 → reversebox-0.48.2}/reversebox/compression/compression_jcalg1.py +0 -0
  32. {reversebox-0.48.0 → reversebox-0.48.2}/reversebox/compression/compression_lzo.py +0 -0
  33. {reversebox-0.48.0 → reversebox-0.48.2}/reversebox/compression/compression_mio0.py +0 -0
  34. {reversebox-0.48.0 → reversebox-0.48.2}/reversebox/compression/compression_re_tiyoruga_dat.py +0 -0
  35. {reversebox-0.48.0 → reversebox-0.48.2}/reversebox/compression/compression_refpack.py +0 -0
  36. {reversebox-0.48.0 → reversebox-0.48.2}/reversebox/compression/compression_zlib.py +0 -0
  37. {reversebox-0.48.0 → reversebox-0.48.2}/reversebox/crc/__init__.py +0 -0
  38. {reversebox-0.48.0 → reversebox-0.48.2}/reversebox/crc/crc16_arc.py +0 -0
  39. {reversebox-0.48.0 → reversebox-0.48.2}/reversebox/crc/crc16_ccitt.py +0 -0
  40. {reversebox-0.48.0 → reversebox-0.48.2}/reversebox/crc/crc16_dnp.py +0 -0
  41. {reversebox-0.48.0 → reversebox-0.48.2}/reversebox/crc/crc16_ea_crcf.py +0 -0
  42. {reversebox-0.48.0 → reversebox-0.48.2}/reversebox/crc/crc16_kermit.py +0 -0
  43. {reversebox-0.48.0 → reversebox-0.48.2}/reversebox/crc/crc16_modbus.py +0 -0
  44. {reversebox-0.48.0 → reversebox-0.48.2}/reversebox/crc/crc16_sick.py +0 -0
  45. {reversebox-0.48.0 → reversebox-0.48.2}/reversebox/crc/crc32_asobo.py +0 -0
  46. {reversebox-0.48.0 → reversebox-0.48.2}/reversebox/crc/crc32_iso_hdlc.py +0 -0
  47. {reversebox-0.48.0 → reversebox-0.48.2}/reversebox/crc/crc64_asobo.py +0 -0
  48. {reversebox-0.48.0 → reversebox-0.48.2}/reversebox/crc/crc64_go_iso.py +0 -0
  49. {reversebox-0.48.0 → reversebox-0.48.2}/reversebox/crc/crc8.py +0 -0
  50. {reversebox-0.48.0 → reversebox-0.48.2}/reversebox/crc/crc_unix_cksum.py +0 -0
  51. {reversebox-0.48.0 → reversebox-0.48.2}/reversebox/encryption/__init__.py +0 -0
  52. {reversebox-0.48.0 → reversebox-0.48.2}/reversebox/encryption/encryption_hatch_engine.py +0 -0
  53. {reversebox-0.48.0 → reversebox-0.48.2}/reversebox/encryption/encryption_rot13.py +0 -0
  54. {reversebox-0.48.0 → reversebox-0.48.2}/reversebox/encryption/encryption_xor_basic.py +0 -0
  55. {reversebox-0.48.0 → reversebox-0.48.2}/reversebox/encryption/encryption_xor_basic_key_guesser.py +0 -0
  56. {reversebox-0.48.0 → reversebox-0.48.2}/reversebox/encryption/encryption_xor_gianas_return_zda.py +0 -0
  57. {reversebox-0.48.0 → reversebox-0.48.2}/reversebox/encryption/encryption_xor_retro64_eco.py +0 -0
  58. {reversebox-0.48.0 → reversebox-0.48.2}/reversebox/hash/__init__.py +0 -0
  59. {reversebox-0.48.0 → reversebox-0.48.2}/reversebox/hash/hash_additive.py +0 -0
  60. {reversebox-0.48.0 → reversebox-0.48.2}/reversebox/hash/hash_ap.py +0 -0
  61. {reversebox-0.48.0 → reversebox-0.48.2}/reversebox/hash/hash_djb2.py +0 -0
  62. {reversebox-0.48.0 → reversebox-0.48.2}/reversebox/hash/hash_fnv.py +0 -0
  63. {reversebox-0.48.0 → reversebox-0.48.2}/reversebox/hash/hash_jenkins_one_at_a_time.py +0 -0
  64. {reversebox-0.48.0 → reversebox-0.48.2}/reversebox/hash/hash_md2.py +0 -0
  65. {reversebox-0.48.0 → reversebox-0.48.2}/reversebox/hash/hash_md5.py +0 -0
  66. {reversebox-0.48.0 → reversebox-0.48.2}/reversebox/hash/hash_murmur3.py +0 -0
  67. {reversebox-0.48.0 → reversebox-0.48.2}/reversebox/hash/hash_pivotal_games_dat.py +0 -0
  68. {reversebox-0.48.0 → reversebox-0.48.2}/reversebox/hash/hash_sdbm.py +0 -0
  69. {reversebox-0.48.0 → reversebox-0.48.2}/reversebox/hash/hash_sha1.py +0 -0
  70. {reversebox-0.48.0 → reversebox-0.48.2}/reversebox/hash/hash_sha2.py +0 -0
  71. {reversebox-0.48.0 → reversebox-0.48.2}/reversebox/image/__init__.py +0 -0
  72. {reversebox-0.48.0 → reversebox-0.48.2}/reversebox/image/byte_swap.py +0 -0
  73. {reversebox-0.48.0 → reversebox-0.48.2}/reversebox/image/compression/__init__.py +0 -0
  74. {reversebox-0.48.0 → reversebox-0.48.2}/reversebox/image/compression/compression_gst.py +0 -0
  75. {reversebox-0.48.0 → reversebox-0.48.2}/reversebox/image/compression/compression_lzw.py +0 -0
  76. {reversebox-0.48.0 → reversebox-0.48.2}/reversebox/image/compression/compression_packbits.py +0 -0
  77. {reversebox-0.48.0 → reversebox-0.48.2}/reversebox/image/compression/compression_rle_executioners.py +0 -0
  78. {reversebox-0.48.0 → reversebox-0.48.2}/reversebox/image/compression/compression_rle_tga.py +0 -0
  79. {reversebox-0.48.0 → reversebox-0.48.2}/reversebox/image/compression/compression_zlib.py +0 -0
  80. {reversebox-0.48.0 → reversebox-0.48.2}/reversebox/image/decoders/__init__.py +0 -0
  81. {reversebox-0.48.0 → reversebox-0.48.2}/reversebox/image/decoders/bumpmap_decoder.py +0 -0
  82. {reversebox-0.48.0 → reversebox-0.48.2}/reversebox/image/decoders/compressed_decoder_encoder.py +0 -0
  83. {reversebox-0.48.0 → reversebox-0.48.2}/reversebox/image/decoders/gst_decoder_encoder.py +0 -0
  84. {reversebox-0.48.0 → reversebox-0.48.2}/reversebox/image/decoders/n64_decoder.py +0 -0
  85. {reversebox-0.48.0 → reversebox-0.48.2}/reversebox/image/decoders/pvrtexlib_decoder_encoder.py +0 -0
  86. {reversebox-0.48.0 → reversebox-0.48.2}/reversebox/image/decoders/yuv_decoder.py +0 -0
  87. {reversebox-0.48.0 → reversebox-0.48.2}/reversebox/image/file_formats/__init__.py +0 -0
  88. {reversebox-0.48.0 → reversebox-0.48.2}/reversebox/image/file_formats/image_dds.py +0 -0
  89. {reversebox-0.48.0 → reversebox-0.48.2}/reversebox/image/image_encoder.py +0 -0
  90. {reversebox-0.48.0 → reversebox-0.48.2}/reversebox/image/palettes/__init__.py +0 -0
  91. {reversebox-0.48.0 → reversebox-0.48.2}/reversebox/image/palettes/palette_random.py +0 -0
  92. {reversebox-0.48.0 → reversebox-0.48.2}/reversebox/image/palettes/palette_vga.py +0 -0
  93. {reversebox-0.48.0 → reversebox-0.48.2}/reversebox/image/pillow_wrapper.py +0 -0
  94. {reversebox-0.48.0 → reversebox-0.48.2}/reversebox/image/swizzling/__init__.py +0 -0
  95. {reversebox-0.48.0 → reversebox-0.48.2}/reversebox/image/swizzling/swizzle_3ds.py +0 -0
  96. {reversebox-0.48.0 → reversebox-0.48.2}/reversebox/image/swizzling/swizzle_bc.py +0 -0
  97. {reversebox-0.48.0 → reversebox-0.48.2}/reversebox/image/swizzling/swizzle_cmpr.py +0 -0
  98. {reversebox-0.48.0 → reversebox-0.48.2}/reversebox/image/swizzling/swizzle_gamecube.py +0 -0
  99. {reversebox-0.48.0 → reversebox-0.48.2}/reversebox/image/swizzling/swizzle_gst.py +0 -0
  100. {reversebox-0.48.0 → reversebox-0.48.2}/reversebox/image/swizzling/swizzle_morton.py +0 -0
  101. {reversebox-0.48.0 → reversebox-0.48.2}/reversebox/image/swizzling/swizzle_morton_ps4.py +0 -0
  102. {reversebox-0.48.0 → reversebox-0.48.2}/reversebox/image/swizzling/swizzle_ps2.py +0 -0
  103. {reversebox-0.48.0 → reversebox-0.48.2}/reversebox/image/swizzling/swizzle_ps2_4bit.py +0 -0
  104. {reversebox-0.48.0 → reversebox-0.48.2}/reversebox/image/swizzling/swizzle_ps2_suba.py +0 -0
  105. {reversebox-0.48.0 → reversebox-0.48.2}/reversebox/image/swizzling/swizzle_psp.py +0 -0
  106. {reversebox-0.48.0 → reversebox-0.48.2}/reversebox/image/swizzling/swizzle_psvita_dreamcast.py +0 -0
  107. {reversebox-0.48.0 → reversebox-0.48.2}/reversebox/image/swizzling/swizzle_switch.py +0 -0
  108. {reversebox-0.48.0 → reversebox-0.48.2}/reversebox/image/swizzling/swizzle_wii_u.py +0 -0
  109. {reversebox-0.48.0 → reversebox-0.48.2}/reversebox/io_files/__init__.py +0 -0
  110. {reversebox-0.48.0 → reversebox-0.48.2}/reversebox/io_files/bytes_handler.py +0 -0
  111. {reversebox-0.48.0 → reversebox-0.48.2}/reversebox/io_files/bytes_helper_functions.py +0 -0
  112. {reversebox-0.48.0 → reversebox-0.48.2}/reversebox/io_files/check_file.py +0 -0
  113. {reversebox-0.48.0 → reversebox-0.48.2}/reversebox/io_files/file_handler.py +0 -0
  114. {reversebox-0.48.0 → reversebox-0.48.2}/reversebox/io_files/mod_handler.py +0 -0
  115. {reversebox-0.48.0 → reversebox-0.48.2}/reversebox/io_files/translation_text_handler.py +0 -0
  116. {reversebox-0.48.0 → reversebox-0.48.2}/reversebox/libs/DirectXTex.dll +0 -0
  117. {reversebox-0.48.0 → reversebox-0.48.2}/reversebox/libs/PVRTexLib.dll +0 -0
  118. {reversebox-0.48.0 → reversebox-0.48.2}/reversebox/libs/PVRTexLibWrapper.dll +0 -0
  119. {reversebox-0.48.0 → reversebox-0.48.2}/reversebox/libs/__init__.py +0 -0
  120. {reversebox-0.48.0 → reversebox-0.48.2}/reversebox/libs/refpack.dll +0 -0
  121. {reversebox-0.48.0 → reversebox-0.48.2}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: ReverseBox
3
- Version: 0.48.0
3
+ Version: 0.48.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
@@ -140,6 +140,8 @@ or software researchers).
140
140
 
141
141
  * Image
142
142
  - Decode RGB121 ✔️
143
+ - Decode ALPHA4 ✔️
144
+ - Decode RAWBMP2_PS2 ✔️
143
145
  - Decode RGB121_BYTE ✔️
144
146
  - Decode RGBA2222 ✔️
145
147
  - Decode RGBX2222 ✔️
@@ -103,6 +103,8 @@ or software researchers).
103
103
 
104
104
  * Image
105
105
  - Decode RGB121 ✔️
106
+ - Decode ALPHA4 ✔️
107
+ - Decode RAWBMP2_PS2 ✔️
106
108
  - Decode RGB121_BYTE ✔️
107
109
  - Decode RGBA2222 ✔️
108
110
  - Decode RGBX2222 ✔️
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: ReverseBox
3
- Version: 0.48.0
3
+ Version: 0.48.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
@@ -140,6 +140,8 @@ or software researchers).
140
140
 
141
141
  * Image
142
142
  - Decode RGB121 ✔️
143
+ - Decode ALPHA4 ✔️
144
+ - Decode RAWBMP2_PS2 ✔️
143
145
  - Decode RGB121_BYTE ✔️
144
146
  - Decode RGBA2222 ✔️
145
147
  - Decode RGBX2222 ✔️
@@ -84,6 +84,8 @@ def get_bpp_for_image_format(image_format: ImageFormats) -> int:
84
84
  ImageFormats.BC1_DXT1,
85
85
  ImageFormats.BC4_UNORM,
86
86
  ImageFormats.PAL4,
87
+ ImageFormats.ALPHA4,
88
+ ImageFormats.RAWBMP2_PS2
87
89
  ):
88
90
  return 4
89
91
  elif image_format in (ImageFormats.RGBX2222,
@@ -74,6 +74,24 @@ class ImageDecoder:
74
74
  p[3] = 0xFF
75
75
  return p
76
76
 
77
+ # A4 (Alpha 4-bit)
78
+ def _decode_alpha4_pixel(self, pixel_int: int) -> bytes:
79
+ p = bytearray(4)
80
+ p[0] = 0xFF
81
+ p[1] = 0xFF
82
+ p[2] = 0xFF
83
+ p[3] = pixel_int & 0xFF
84
+ return p
85
+
86
+ # RAWBMP/2 PS2 (4-bit)
87
+ def _decode_rawbmp2_ps2_pixel(self, pixel_int: int) -> bytes:
88
+ p = bytearray(4)
89
+ p[0] = 0xFF
90
+ p[1] = 0xFF
91
+ p[2] = 0xFF
92
+ p[3] = (16 * pixel_int) & 0xFF
93
+ return p
94
+
77
95
  # A8 (Alpha 8-bit)
78
96
  def _decode_alpha8_pixel(self, pixel_int: int) -> bytes:
79
97
  p = bytearray(4)
@@ -566,6 +584,8 @@ class ImageDecoder:
566
584
  # image_format: (decode_function, bits_per_pixel, image_entry_read_function)
567
585
  ImageFormats.RGB121: (_decode_rgb121_byte_pixel, 4, get_uint8),
568
586
  ImageFormats.N64_I4: (_decode_i4_pixel, 4, get_uint8), # GRAY, 4bpp
587
+ ImageFormats.ALPHA4: (_decode_alpha4_pixel, 4, get_uint8),
588
+ ImageFormats.RAWBMP2_PS2: (_decode_rawbmp2_ps2_pixel, 4, get_uint8),
569
589
 
570
590
  ImageFormats.RGB121_BYTE: (_decode_rgb121_byte_pixel, 8, get_uint8),
571
591
  ImageFormats.GRAY8: (_decode_gray8_pixel, 8, get_uint8),
@@ -19,6 +19,8 @@ class ImageFormats(Enum):
19
19
  # Generic Formats
20
20
  # 4-bit
21
21
  RGB121 = "rgb121" # PIX_FMT_RGB4 / packed RGB 1:2:1 bitstream, 4bpp, (msb)1R 2G 1B(lsb)
22
+ ALPHA4 = "alpha4" # (A4 / Alpha 4-bit)
23
+ RAWBMP2_PS2 = "rawbmp2_ps2" # RAWBMP/2 PS2 (4-bit)
22
24
 
23
25
  # 8-bit
24
26
  RGBX2222 = "rgbx2222"
@@ -41,27 +41,35 @@ def _xg_address_2d_tiled_y(block_offset: int, width_in_blocks: int, texel_byte_p
41
41
 
42
42
 
43
43
  def _convert_x360_image_data(image_data: bytes, image_width: int, image_height: int, block_pixel_size: int, texel_byte_pitch: int, swizzle_flag: bool) -> bytes:
44
- converted_data: bytearray = bytearray(len(image_data))
45
-
46
44
  width_in_blocks: int = image_width // block_pixel_size
47
45
  height_in_blocks: int = image_height // block_pixel_size
48
46
 
49
- for j in range(height_in_blocks):
50
- for i in range(width_in_blocks):
51
- block_offset = j * width_in_blocks + i
52
- x = _xg_address_2d_tiled_x(block_offset, width_in_blocks, texel_byte_pitch)
53
- y = _xg_address_2d_tiled_y(block_offset, width_in_blocks, texel_byte_pitch)
54
- src_byte_offset = (j * width_in_blocks * texel_byte_pitch + i * texel_byte_pitch)
55
- dest_byte_offset = (y * width_in_blocks * texel_byte_pitch + x * texel_byte_pitch)
47
+ padded_width_in_blocks: int = (width_in_blocks + 31) & ~31
48
+ padded_height_in_blocks: int = (height_in_blocks + 31) & ~31
49
+ total_padded_blocks = padded_width_in_blocks * padded_height_in_blocks
50
+
51
+ if not swizzle_flag:
52
+ converted_data: bytearray = bytearray(width_in_blocks * height_in_blocks * texel_byte_pitch)
53
+ else:
54
+ converted_data: bytearray = bytearray(total_padded_blocks * texel_byte_pitch) # type: ignore
55
+
56
+ for block_offset in range(total_padded_blocks):
57
+ x = _xg_address_2d_tiled_x(block_offset, padded_width_in_blocks, texel_byte_pitch)
58
+ y = _xg_address_2d_tiled_y(block_offset, padded_width_in_blocks, texel_byte_pitch)
56
59
 
57
- if dest_byte_offset + texel_byte_pitch > len(converted_data):
58
- continue
60
+ if x < width_in_blocks and y < height_in_blocks:
59
61
  if not swizzle_flag:
60
- converted_data[dest_byte_offset: dest_byte_offset + texel_byte_pitch] = image_data[src_byte_offset: src_byte_offset + texel_byte_pitch]
62
+ src_byte_offset = block_offset * texel_byte_pitch
63
+ dest_byte_offset = (y * width_in_blocks + x) * texel_byte_pitch
64
+ if src_byte_offset + texel_byte_pitch <= len(image_data):
65
+ converted_data[dest_byte_offset: dest_byte_offset + texel_byte_pitch] = image_data[src_byte_offset: src_byte_offset + texel_byte_pitch]
61
66
  else:
62
- converted_data[src_byte_offset: src_byte_offset + texel_byte_pitch] = image_data[dest_byte_offset: dest_byte_offset + texel_byte_pitch]
67
+ src_byte_offset = (y * width_in_blocks + x) * texel_byte_pitch
68
+ dest_byte_offset = block_offset * texel_byte_pitch
69
+ if src_byte_offset + texel_byte_pitch <= len(image_data):
70
+ converted_data[dest_byte_offset: dest_byte_offset + texel_byte_pitch] = image_data[src_byte_offset: src_byte_offset + texel_byte_pitch]
63
71
 
64
- return converted_data
72
+ return bytes(converted_data)
65
73
 
66
74
 
67
75
  def unswizzle_x360(image_data: bytes, img_width: int, img_height: int, block_pixel_size: int = 4, texel_byte_pitch: int = 8) -> bytes:
@@ -8,7 +8,7 @@ from typing import Final
8
8
 
9
9
  import setuptools
10
10
 
11
- VERSION_NUM: Final[str] = "0.48.0"
11
+ VERSION_NUM: Final[str] = "0.48.2"
12
12
 
13
13
 
14
14
  def get_long_description() -> str:
File without changes
File without changes