diff options
Diffstat (limited to 'bck_funcs.py')
-rw-r--r-- | bck_funcs.py | 28 |
1 files changed, 17 insertions, 11 deletions
diff --git a/bck_funcs.py b/bck_funcs.py index 8ea2c72..d8c1162 100644 --- a/bck_funcs.py +++ b/bck_funcs.py @@ -1,4 +1,5 @@ import os, struct, math +from . import smg_common # python file to read the important information out of a BCK file # will try its best to decode the information either on big/little endian @@ -200,7 +201,7 @@ class smg_bck_anim: bck_raw_info = None bck_error_str = "bck-error: " bck_anim_error_str = "bck-anim-error: " -pad_str = "This is padding data to alignme" +pad_str = "hoot" f = None # main function @@ -563,7 +564,7 @@ def create_smg_bck_raw(anim): # header raw.header.magic = "J3D1" raw.header.ftype = "btp1" - raw.header.file_size = 32 # update later + raw.header.file_size = 0 # update later raw.header.section_count = 1 raw.header.unknown1 = [0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, @@ -576,7 +577,7 @@ def create_smg_bck_raw(anim): # ank1 section raw.ank1.magic = "ANK1" - raw.ank1.size = 36 # update at the end + raw.ank1.size = 0 # update at the end raw.ank1.loop_mode = anim.loop_mode raw.ank1.rot_lshift = 0 # update now raw.ank1.anim_length = anim.anim_length @@ -706,15 +707,20 @@ def create_smg_bck_raw(anim): raw.ank1.scale_arr_length = len(raw.ank1.scale_arr) raw.ank1.rot_arr_length = len(raw.ank1.rot_arr) raw.ank1.transl_arr_length = len(raw.ank1.transl_arr) - raw.ank1.anim_data_offset = 0x40 - raw.ank1.scale_arr_offset = None - raw.ank1.rot_arr_offset = None - raw.ank1.transl_arr_offset = None - raw.ank1.anim_data = [] # list of length bone_count - raw.ank1.scale_arr = [] # list of length scale_arr_length - raw.ank1.rot_arr = [] # list of length rot_arr_length - raw.ank1.transl_arr = [] # list of length transl_arr_length + pad_str = smg_common.padding() + raw.ank1.anim_data_offset = 0x40 # yes + raw.ank1.scale_arr_offset = raw.ank1.anim_data_offset + (raw.ank1.bone_count * 9 * 6) + raw.ank1.scale_arr_offset += len(pad_str.string_fill(32, raw.ank1.scale_arr_offset)) + raw.ank1.rot_arr_offset = raw.ank1.scale_arr_offset + (raw.ank1.scale_arr_length * 4) + raw.ank1.rot_arr_offset += len(pad_str.string_fill(32, raw.ank1.rot_arr_offset)) + raw.ank1.transl_arr_offset = raw.ank1.rot_arr_offset + (raw.ank1.rot_arr_length * 2) + raw.ank1.transl_arr_offset += len(pad_str.string_fill(32, raw.ank1.transl_arr_offset)) + # section size and file size + raw.ank1.size = raw.ank1.transl_arr_offset + (raw.ank1.transl_arr_length * 4) + raw.ank1.size += len(pad_str.string_fill(32, raw.ank1.size)) + 1 + raw.header.file_size = 32 + raw.ank1.size + # done! return raw # write smg_bck_raw |