Skip to content

Commit d45fba6

Browse files
committed
1.6.2
1 parent 1252a91 commit d45fba6

4 files changed

Lines changed: 50 additions & 22 deletions

File tree

__init__.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@
3434
bl_info = {
3535
'name': 'Objex Exporter for N64 romhacking',
3636
'author': 'Campbell Barton, Bastien Montagne, OoT modding community',
37-
'version': (2, 6, 1),
37+
'version': (2, 6, 2),
3838
'blender': (2, 80, 0),
3939
'location': 'File > Export',
4040
'description': 'Allows to export to objex and provides new features for further customization',

export_objex_anim.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -297,14 +297,14 @@ def rad_to_shortang(r):
297297
if eyes_bone is not None:
298298
i = round(eyes_bone.head.x) # Want it in armature space, not transform space
299299
if i < -1 or i > 7:
300-
log.warning('Link eye index (Eyes bone X value) out of range -1 to 7')
300+
log.warning('Link eye index (Eyes bone X value) out of range -1 to 7, was {}', eyes_bone.head.x)
301301
if i < -1 or i > 14:
302302
i = -1
303303
texanimvalue |= i+1
304304
if mouth_bone is not None:
305305
i = round(mouth_bone.head.x)
306306
if i < -1 or i > 3:
307-
log.warning('Link mouth index (Mouth bone X value) out of range -1 to 3')
307+
log.warning('Link mouth index (Mouth bone X value) out of range -1 to 3, was {}', eyes_bone.head.x)
308308
if i < -1 or i > 14:
309309
i = -1
310310
texanimvalue |= (i+1) << 4

interface.py

Lines changed: 30 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -546,6 +546,11 @@ def draw(self, context):
546546
if foldable_menu(box, context.scene.objex_bonus, "menu_global"):
547547
box.prop(context.scene.objex_bonus, 'blend_scale')
548548

549+
box = self.layout.box()
550+
if foldable_menu(box, context.scene.objex_bonus, "menu_folding"):
551+
if armature:
552+
menu_draw_folding(box, armature, context)
553+
549554
# material
550555

551556
def stripPrefix(s, prefix):
@@ -1561,8 +1566,9 @@ def execute(self, context):
15611566
mat.node_tree.nodes["OBJEX_TransformUV1"].inputs[1].default_value = -mat.f3d_mat.tex1.S.shift
15621567
mat.node_tree.nodes["OBJEX_TransformUV1"].inputs[2].default_value = -mat.f3d_mat.tex1.T.shift
15631568
mat.node_tree.nodes["OBJEX_EnvColor"].inputs[1].default_value = mat.f3d_mat.env_color[3]
1564-
name = mat.node_tree.nodes["OBJEX_Texel1Texture"].image.name
1565-
bpy.data.images[name].objex_bonus.format = mat.f3d_mat.tex1.tex_format;
1569+
if mat.node_tree.nodes["OBJEX_Texel1Texture"].image:
1570+
name = mat.node_tree.nodes["OBJEX_Texel1Texture"].image.name
1571+
bpy.data.images[name].objex_bonus.format = mat.f3d_mat.tex1.tex_format
15661572

15671573
mat.node_tree.nodes["OBJEX_PrimColor"].inputs[0].default_value = (mat.f3d_mat.prim_color[0],mat.f3d_mat.prim_color[1],mat.f3d_mat.prim_color[2],mat.f3d_mat.prim_color[3])
15681574
mat.node_tree.nodes["OBJEX_PrimColor"].inputs[1].default_value = mat.f3d_mat.prim_color[3]
@@ -2158,6 +2164,8 @@ def menu_material(self, context):
21582164
sub_box.row().prop(data, "vertex_shading", expand=True)
21592165
sub_box.prop(data, "external_material_segment")
21602166

2167+
2168+
21612169
class OBJEX_OT_set_pixels_along_uv_from_image_dimensions(bpy.types.Operator):
21622170

21632171
bl_idname = "objex.set_pixels_along_uv_from_image_dimensions"
@@ -2190,6 +2198,26 @@ def execute(self, context):
21902198
node.inputs["Pixels along V"].default_value = image.size[1] * 2
21912199
return {"FINISHED"}
21922200

2201+
2202+
def menu_draw_folding(layout:bpy.types.UILayout, armature:bpy.types.Armature, context:bpy.types.Context):
2203+
box = layout
2204+
box.use_property_split = False
2205+
scene = context.scene
2206+
objex_scene = context.scene.objex_bonus
2207+
row = box.row()
2208+
row.alignment = 'CENTER'
2209+
row = box.row()
2210+
row.operator('objex.autofold_save_pose', text='Save pose')
2211+
row.operator('objex.autofold_restore_pose', text='Restore pose')
2212+
row = box.row()
2213+
row.operator('objex.autofold_fold_unfold', text='Fold').action = 'FOLD'
2214+
row.operator('objex.autofold_fold_unfold', text='Unfold').action = 'UNFOLD'
2215+
row.operator('objex.autofold_fold_unfold', text='Switch').action = 'SWITCH'
2216+
box.label(text='Default saved pose to use for folding:')
2217+
box.template_list('UI_UL_list', 'OBJEX_SavedPose', scene.objex_bonus, 'saved_poses', armature.data.objex_bonus, 'fold_unfold_saved_pose_index', rows=2)
2218+
box.operator('objex.autofold_delete_pose', text='Delete pose')
2219+
2220+
21932221
classes = (
21942222
OBJEX_UL_actions,
21952223
OBJEX_PT_armature_prop,

properties.py

Lines changed: 17 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -23,26 +23,25 @@
2323
from . import template
2424

2525
def hexify(segment: str):
26-
if len(segment) == 0:
26+
if not segment:
2727
return ""
2828

29-
if segment.startswith("0x"):
30-
if segment.startswith("0x0"):
31-
if segment.endswith("000000"):
32-
return segment
33-
segment = segment + "000000"
34-
else:
35-
if not segment.endswith("000000"):
36-
segment = segment + "000000"
37-
segment = segment[:2] + "0" + segment[2:]
38-
else:
39-
if len(segment) > 1:
29+
if not segment.startswith("0x"):
30+
if len(segment) != 1 or segment.upper() not in "0123456789ABCDEF":
4031
return ""
41-
segment = "0x0" + segment + "000000"
42-
43-
slist = list(segment.upper())
44-
slist[1] = 'x'
45-
return ''.join(slist)
32+
return "0x0" + segment.upper() + "000000"
33+
34+
hex_part = segment[2:].upper()
35+
36+
# If it already starts with 0x0, just pad to 8 digits
37+
if segment.startswith("0x0"):
38+
hex_part = hex_part.ljust(8, '0')
39+
return "0x" + hex_part
40+
41+
# If it starts with 0x but not 0x0, insert the extra 0 and then pad
42+
hex_part = "0" + hex_part
43+
hex_part = hex_part.ljust(8, '0')
44+
return "0x" + hex_part
4645

4746
# scene
4847
class SavedPoseBone(bpy.types.PropertyGroup):
@@ -109,6 +108,7 @@ class ObjexSceneProperties(bpy.types.PropertyGroup):
109108
menu_joint = bpy.props.BoolProperty(name='Joint Sphere')
110109
menu_mesh = bpy.props.BoolProperty(name='Mesh')
111110
menu_global = bpy.props.BoolProperty(name='Export Settings')
111+
menu_folding = bpy.props.BoolProperty(name='Folding')
112112
mode_menu = bpy.props.EnumProperty(
113113
items=[
114114
('menu_mode_combiner', 'Combiner', '(A-B)*C+D', 'SHADING_RENDERED', 0),

0 commit comments

Comments
 (0)