summaryrefslogtreecommitdiff
path: root/bck_funcs.py
diff options
context:
space:
mode:
Diffstat (limited to 'bck_funcs.py')
-rw-r--r--bck_funcs.py28
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