Skip to content

Commit

Permalink
Fill TexImg node data
Browse files Browse the repository at this point in the history
  • Loading branch information
1r3n33 committed Aug 20, 2020
1 parent 0ab4d56 commit 6444af8
Show file tree
Hide file tree
Showing 6 changed files with 43 additions and 33 deletions.
15 changes: 12 additions & 3 deletions blend2niff/exporter.py
Original file line number Diff line number Diff line change
Expand Up @@ -84,6 +84,7 @@ class Exporter:
def __init__(self):
self.names = [] # All names
self.textures = [] # All textures
self.tex_images = [] # All texture images
self.materials = [] # All materials, 0 is default material
self.materials_by_mesh = {} # NIFF2 materials by Blender mesh
self.vtx_groups = [] # All vertex groups
Expand Down Expand Up @@ -130,10 +131,16 @@ def create_textures(self, objs):
png_reader = png.Reader(filepath)
image = png_reader.read()

tex_img = niff2_tex_img_node_builder(
len(self.tex_images), [byte for row in image[2] for byte in row])
self.tex_images.append(tex_img)

tex_name = self.create_name(
bpy.path.display_name_from_filepath(filepath)+".tex")

tex = niff2_tex_node_builder(len(self.textures),
tex_name.index(),
tex_img.index,
width=image[0],
height=image[1])
self.textures.append(tex)
Expand Down Expand Up @@ -588,7 +595,8 @@ def write_niff2(data, filepath):
part_list_header = niff2_part_list_header_builder(exporter.parts)
mat_list_header = niff2_mat_list_header_builder(exporter.materials)
tex_list_header = niff2_tex_list_header_builder(exporter.textures)
tex_img_list_header = niff2_tex_img_list_header_builder([])
tex_img_list_header = niff2_tex_img_list_header_builder(
exporter.tex_images)
anim_list_header = niff2_anim_list_header_builder(exporter.anim_groups)
coll_list_header = niff2_coll_list_header_builder()
switch_list_header = niff2_switch_list_header_builder()
Expand Down Expand Up @@ -726,8 +734,9 @@ def write_niff2(data, filepath):
for tex in exporter.textures:
niff2_tex_node_writer(tex, buf)

niff2_tex_img_list_header_writer(tex_img_list_header, [], buf)
for tex_img in []:
niff2_tex_img_list_header_writer(
tex_img_list_header, exporter.tex_images, buf)
for tex_img in exporter.tex_images:
niff2_tex_img_node_writer(tex_img, buf)

niff2_anim_list_header_writer(anim_list_header, exporter.anim_groups, buf)
Expand Down
10 changes: 5 additions & 5 deletions blend2niff/niff2/niff2_tex.py
Original file line number Diff line number Diff line change
Expand Up @@ -80,7 +80,7 @@ def niff2_tex_list_header_writer(tex_list_header, tex_nodes, buf):


class Niff2TexNode:
def __init__(self, index, name_index, width, height):
def __init__(self, index, name_index, tex_img_index, width, height):
self.tex_tag = TAG_TEX
self.this_tex_index = index
self.tex_header_size = (13*4)
Expand All @@ -100,16 +100,16 @@ def __init__(self, index, name_index, width, height):
self.tex_tile_height = height
self.tex_offset_x = 0
self.tex_offset_y = 0
self.tex_img_index = BAD_INDEX
self.tex_img_index = tex_img_index
self.tex_filter = NIFF2_TEX_FILTER_BILERP
self.use_perspective_correction = NIFF2_PERSPECTIVE_CORRECTION
self.mipmap_level = NIFF2_NO_MIPMAP
self.use_color_palette = NIFF2_NO_USE_COLOR_PALETTE
self.external_tex_img_num = 0 # Do not use BAD_INDEX
self.external_tex_img_num = 0


def niff2_tex_node_builder(index, name_index, width, height):
return Niff2TexNode(index, name_index, width, height)
def niff2_tex_node_builder(index, name_index, tex_img_index, width, height):
return Niff2TexNode(index, name_index, tex_img_index, width, height)


def niff2_tex_node_writer(tex_node, buf):
Expand Down
8 changes: 4 additions & 4 deletions blend2niff/niff2/niff2_tex_img.py
Original file line number Diff line number Diff line change
Expand Up @@ -47,9 +47,9 @@ def niff2_tex_img_list_header_writer(tex_img_list_header, tex_img_nodes, buf):
class Niff2TexImgNode:
def __init__(self, index, tex_img_data):
self.tex_img_tag = TAG_TEX_IMG
self.this_tex_img_index = index
self.tex_img_header_size = (7*4)
self.tex_img_size = (7*4) + (1*4) + len(tex_img_data)
self.index = index
self.tex_img_header_size = (6*4)
self.tex_img_size = (6*4) + (1*4) + len(tex_img_data)
self.nintendo_extension_block_size = (1*4)
self.user_extension_block_size = 0
self.tex_img_data = tex_img_data
Expand All @@ -62,7 +62,7 @@ def niff2_tex_img_node_builder(index, tex_img_data):

def niff2_tex_img_node_writer(tex_img_node, buf):
buf += tex_img_node.tex_img_tag.to_bytes(4, BYTE_ORDER)
buf += tex_img_node.this_tex_img_index.to_bytes(4, BYTE_ORDER)
buf += tex_img_node.index.to_bytes(4, BYTE_ORDER)
buf += tex_img_node.tex_img_header_size.to_bytes(4, BYTE_ORDER)
buf += tex_img_node.tex_img_size.to_bytes(4, BYTE_ORDER)
buf += tex_img_node.nintendo_extension_block_size.to_bytes(4, BYTE_ORDER)
Expand Down
3 changes: 2 additions & 1 deletion tests/test_exporter.py
Original file line number Diff line number Diff line change
Expand Up @@ -56,7 +56,7 @@ def test_create_textures(self):
bpy.path.display_name_from_filepath = Mock(return_value="texture")

reader = Mock()
reader.read = Mock(return_value=[12, 34])
reader.read = Mock(return_value=[12, 34, [[0x05, 0x06], [0x07, 0x08]]])
png.Reader = Mock(return_value=reader)

exporter = Exporter()
Expand All @@ -70,6 +70,7 @@ def test_create_textures(self):
reader.read.assert_called_once()

self.assertEqual(exporter.names[0].node_name, "texture.tex")
self.assertEqual(exporter.tex_images[0].tex_img_data, [5, 6, 7, 8])
self.assertEqual(exporter.textures[0].tex_img_width, 12)
self.assertEqual(exporter.textures[0].tex_img_height, 34)

Expand Down
24 changes: 12 additions & 12 deletions tests/test_niff2_tex.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@

class TestNiff2Tex(unittest.TestCase):
def test_niff2_tex_list_header_builder(self):
tex_node = niff2_tex_node_builder(12, 34, 56, 78)
tex_node = niff2_tex_node_builder(12, 34, 56, 78, 90)
tex_nodes = [tex_node]*4
tex_list_header = niff2_tex_list_header_builder(tex_nodes)
self.assertEqual(tex_list_header.tex_list_tag, 0x000B0000)
Expand All @@ -20,7 +20,7 @@ def test_niff2_tex_list_header_builder(self):
self.assertEqual(tex_list_header.user_extension_block_size, 0)

def test_niff2_tex_list_header_writer(self):
tex_node = niff2_tex_node_builder(12, 34, 56, 78)
tex_node = niff2_tex_node_builder(12, 34, 56, 78, 90)
tex_nodes = [tex_node]*4
tex_list_header = niff2_tex_list_header_builder(tex_nodes)
buf = niff2_tex_list_header_writer(
Expand All @@ -38,7 +38,7 @@ def test_niff2_tex_list_header_writer(self):
self.assertEqual(list(buf), byte_list)

def test_niff2_tex_node_builder(self):
tex_node = niff2_tex_node_builder(12, 34, 56, 78)
tex_node = niff2_tex_node_builder(12, 34, 56, 78, 90)
self.assertEqual(tex_node.tex_tag, 0x000B0100)
self.assertEqual(tex_node.this_tex_index, 12)
self.assertEqual(tex_node.tex_header_size, 52)
Expand All @@ -52,21 +52,21 @@ def test_niff2_tex_node_builder(self):
self.assertEqual(tex_node.tex_anim_frame_rate, 0)
self.assertEqual(tex_node.nintendo_extension_block_size, 20)
self.assertEqual(tex_node.user_extension_block_size, 0)
self.assertEqual(tex_node.tex_img_width, 56)
self.assertEqual(tex_node.tex_img_height, 78)
self.assertEqual(tex_node.tex_tile_width, 56)
self.assertEqual(tex_node.tex_tile_height, 78)
self.assertEqual(tex_node.tex_img_width, 78)
self.assertEqual(tex_node.tex_img_height, 90)
self.assertEqual(tex_node.tex_tile_width, 78)
self.assertEqual(tex_node.tex_tile_height, 90)
self.assertEqual(tex_node.tex_offset_x, 0)
self.assertEqual(tex_node.tex_offset_y, 0)
self.assertEqual(tex_node.tex_img_index, 0xFFFFFFFF)
self.assertEqual(tex_node.tex_img_index, 56)
self.assertEqual(tex_node.tex_filter, 1)
self.assertEqual(tex_node.use_perspective_correction, 1)
self.assertEqual(tex_node.mipmap_level, 0)
self.assertEqual(tex_node.use_color_palette, 0)
self.assertEqual(tex_node.external_tex_img_num, 0)

def test_niff2_tex_node_writer(self):
tex_node = niff2_tex_node_builder(12, 34, 56, 78)
tex_node = niff2_tex_node_builder(12, 34, 56, 78, 90)
buf = niff2_tex_node_writer(tex_node, bytearray())
byte_list = [0x00, 0x0B, 0x01, 0x00,
0x00, 0x00, 0x00, 0x0C,
Expand All @@ -81,13 +81,13 @@ def test_niff2_tex_node_writer(self):
0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x14,
0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x38,
0x00, 0x00, 0x00, 0x4E,
0x00, 0x00, 0x00, 0x38,
0x00, 0x00, 0x00, 0x5A,
0x00, 0x00, 0x00, 0x4E,
0x00, 0x00, 0x00, 0x5A,
0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00,
0xFF, 0xFF, 0xFF, 0xFF,
0x00, 0x00, 0x00, 0x38,
0x00, 0x00, 0x00, 0x01,
0x00, 0x00, 0x00, 0x01,
0x00, 0x00, 0x00, 0x00,
Expand Down
16 changes: 8 additions & 8 deletions tests/test_niff2_tex_img.py
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ def test_niff2_tex_img_list_header_builder(self):
tex_img_list_header = niff2_tex_img_list_header_builder([tex_img_node])
self.assertEqual(tex_img_list_header.tex_img_list_tag, 0x00120000)
self.assertEqual(tex_img_list_header.tex_img_list_header_size, 28)
self.assertEqual(tex_img_list_header.tex_img_list_size, 64)
self.assertEqual(tex_img_list_header.tex_img_list_size, 60)
self.assertEqual(tex_img_list_header.tex_img_num, 1)
self.assertEqual(tex_img_list_header.nintendo_extension_block_size, 0)
self.assertEqual(tex_img_list_header.user_extension_block_size, 0)
Expand All @@ -27,20 +27,20 @@ def test_niff2_tex_img_list_header_writer(self):
tex_img_list_header, [tex_img_node], bytearray())
byte_list = [0x00, 0x12, 0x00, 0x00,
0x00, 0x00, 0x00, 0x1C,
0x00, 0x00, 0x00, 0x40,
0x00, 0x00, 0x00, 0x3C,
0x00, 0x00, 0x00, 0x01,
0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x24]
0x00, 0x00, 0x00, 0x20]
self.assertEqual(list(buf), byte_list)

def test_niff2_tex_img_node_builder(self):
tex_img_node = niff2_tex_img_node_builder(
123, [0x00, 0x01, 0x02, 0x03])
self.assertEqual(tex_img_node.tex_img_tag, 0x00120100)
self.assertEqual(tex_img_node.this_tex_img_index, 123)
self.assertEqual(tex_img_node.tex_img_header_size, 28)
self.assertEqual(tex_img_node.tex_img_size, 36)
self.assertEqual(tex_img_node.index, 123)
self.assertEqual(tex_img_node.tex_img_header_size, 24)
self.assertEqual(tex_img_node.tex_img_size, 32)
self.assertEqual(tex_img_node.nintendo_extension_block_size, 4)
self.assertEqual(tex_img_node.user_extension_block_size, 0)
self.assertEqual(tex_img_node.tex_img_data, [0x00, 0x01, 0x02, 0x03])
Expand All @@ -52,8 +52,8 @@ def test_niff2_tex_img_node_writer(self):
buf = niff2_tex_img_node_writer(tex_img_node, bytearray())
byte_list = [0x00, 0x12, 0x01, 0x00,
0x00, 0x00, 0x00, 0x7B,
0x00, 0x00, 0x00, 0x1C,
0x00, 0x00, 0x00, 0x28,
0x00, 0x00, 0x00, 0x18,
0x00, 0x00, 0x00, 0x24,
0x00, 0x00, 0x00, 0x04,
0x00, 0x00, 0x00, 0x00,
0x00, 0x01, 0x02, 0x03,
Expand Down

0 comments on commit 6444af8

Please sign in to comment.