Skip to content

Commit 881a18e

Browse files
authored
feature set implementation (#61)
1 parent 7c86a4a commit 881a18e

29 files changed

Lines changed: 391 additions & 197 deletions

fast64_internal/f3d/f3d_material.py

Lines changed: 46 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -851,6 +851,9 @@ def ui_scale(self, material, layout):
851851
return inputGroup
852852

853853
def ui_dynamic_cosmetic_entry(self, f3dMat, layout, enabledProp, nameProp, categoryProp):
854+
if not is_hm64_feature_set():
855+
return
856+
854857
layout.prop(f3dMat, enabledProp, text="Dynamic Cosmetic Entry")
855858
if getattr(f3dMat, enabledProp):
856859
dynamicEntry = layout.column()
@@ -3262,10 +3265,11 @@ def to_dict(self):
32623265
}
32633266
if self.use_tex_reference:
32643267
data["reference"] = self.reference_to_dict()
3265-
if self.custom_palette_name:
3266-
data["customTLUTName"] = self.custom_palette_name
3267-
data["paletteColorCount"] = self.palette_color_count
3268-
data["isVanillaTexture"] = self.is_vanilla_texture
3268+
if is_hm64_feature_set():
3269+
if self.custom_palette_name:
3270+
data["customTLUTName"] = self.custom_palette_name
3271+
data["paletteColorCount"] = self.palette_color_count
3272+
data["isVanillaTexture"] = self.is_vanilla_texture
32693273
if self.texture_internal_path:
32703274
data["internalPath"] = self.texture_internal_path
32713275
return data
@@ -3285,9 +3289,10 @@ def from_dict(self, data: dict):
32853289
self.use_tex_reference = "reference" in data
32863290
if self.use_tex_reference:
32873291
self.reference_from_dict(data["reference"])
3288-
self.custom_palette_name = data.get("customTLUTName", self.custom_palette_name)
3289-
self.palette_color_count = data.get("paletteColorCount", self.palette_color_count)
3290-
self.is_vanilla_texture = data.get("isVanillaTexture", self.is_vanilla_texture)
3292+
if is_hm64_feature_set():
3293+
self.custom_palette_name = data.get("customTLUTName", self.custom_palette_name)
3294+
self.palette_color_count = data.get("paletteColorCount", self.palette_color_count)
3295+
self.is_vanilla_texture = data.get("isVanillaTexture", self.is_vanilla_texture)
32913296
self.texture_internal_path = data.get("internalPath", self.texture_internal_path)
32923297

32933298
def key(self):
@@ -3371,14 +3376,15 @@ def ui_image(
33713376
if tex is not None:
33723377
prop_input.label(text="Size: " + str(tex.size[0]) + " x " + str(tex.size[1]))
33733378

3374-
if not textureProp.use_tex_reference and textureProp.tex_format[:2] == "CI":
3379+
if is_hm64_feature_set() and not textureProp.use_tex_reference and textureProp.tex_format[:2] == "CI":
33753380
row = prop_input.row(align=True)
33763381
row.prop(textureProp, "custom_palette_name", text="TLUT Name")
33773382
row = prop_input.row(align=True)
33783383
row.prop(textureProp, "palette_color_count", text="Color Count")
33793384
if not textureProp.use_tex_reference:
3380-
row = prop_input.row(align=True)
3381-
row.prop(textureProp, "is_vanilla_texture", text="Is Vanilla Texture?")
3385+
if is_hm64_feature_set():
3386+
row = prop_input.row(align=True)
3387+
row.prop(textureProp, "is_vanilla_texture", text="Is Vanilla Texture?")
33823388
row = prop_input.row(align=True)
33833389
row.prop(textureProp, "texture_internal_path", text="Internal Path")
33843390

@@ -5185,23 +5191,35 @@ def f3d_colors_from_dict(self, data: dict):
51855191
def n64_colors_to_dict(self, use_dict: dict[str]):
51865192
data = {}
51875193
if use_dict["Environment"]:
5188-
data["environment"] = {
5194+
environment = {
51895195
"set": self.set_env,
51905196
"color": get_clean_color(self.env_color, include_alpha=True),
5191-
"dynamicEntry": self.env_dynamic_entry,
5192-
"dynamicEntryName": self.env_dynamic_entry_name,
5193-
"dynamicEntryCategory": self.env_dynamic_entry_category,
51945197
}
5198+
if is_hm64_feature_set():
5199+
environment.update(
5200+
{
5201+
"dynamicEntry": self.env_dynamic_entry,
5202+
"dynamicEntryName": self.env_dynamic_entry_name,
5203+
"dynamicEntryCategory": self.env_dynamic_entry_category,
5204+
}
5205+
)
5206+
data["environment"] = environment
51955207
if use_dict["Primitive"]:
5196-
data["primitive"] = {
5208+
primitive = {
51975209
"set": self.set_prim,
51985210
"color": get_clean_color(self.prim_color, include_alpha=True),
51995211
"minLoDRatio": self.prim_lod_min,
52005212
"loDFraction": self.prim_lod_frac,
5201-
"dynamicEntry": self.prim_dynamic_entry,
5202-
"dynamicEntryName": self.prim_dynamic_entry_name,
5203-
"dynamicEntryCategory": self.prim_dynamic_entry_category,
52045213
}
5214+
if is_hm64_feature_set():
5215+
primitive.update(
5216+
{
5217+
"dynamicEntry": self.prim_dynamic_entry,
5218+
"dynamicEntryName": self.prim_dynamic_entry_name,
5219+
"dynamicEntryCategory": self.prim_dynamic_entry_category,
5220+
}
5221+
)
5222+
data["primitive"] = primitive
52055223
if use_dict["Key"]:
52065224
data["chromaKey"] = {
52075225
"set": self.set_key,
@@ -5233,9 +5251,10 @@ def n64_colors_from_dict(self, data: dict):
52335251
self.set_env = enviroment.get("set", self.set_env)
52345252
if "color" in enviroment:
52355253
self.env_color = enviroment.get("color")
5236-
self.env_dynamic_entry = enviroment.get("dynamicEntry", self.env_dynamic_entry)
5237-
self.env_dynamic_entry_name = enviroment.get("dynamicEntryName", self.env_dynamic_entry_name)
5238-
self.env_dynamic_entry_category = enviroment.get("dynamicEntryCategory", self.env_dynamic_entry_category)
5254+
if is_hm64_feature_set():
5255+
self.env_dynamic_entry = enviroment.get("dynamicEntry", self.env_dynamic_entry)
5256+
self.env_dynamic_entry_name = enviroment.get("dynamicEntryName", self.env_dynamic_entry_name)
5257+
self.env_dynamic_entry_category = enviroment.get("dynamicEntryCategory", self.env_dynamic_entry_category)
52395258
primitive = data.get("primitive", {})
52405259
self.set_prim = primitive.get("set", self.set_prim)
52415260
if "color" in primitive:
@@ -5244,9 +5263,12 @@ def n64_colors_from_dict(self, data: dict):
52445263
primitive.get("minLoDRatio", self.prim_lod_min),
52455264
primitive.get("loDFraction", self.prim_lod_frac),
52465265
)
5247-
self.prim_dynamic_entry = primitive.get("dynamicEntry", self.prim_dynamic_entry)
5248-
self.prim_dynamic_entry_name = primitive.get("dynamicEntryName", self.prim_dynamic_entry_name)
5249-
self.prim_dynamic_entry_category = primitive.get("dynamicEntryCategory", self.prim_dynamic_entry_category)
5266+
if is_hm64_feature_set():
5267+
self.prim_dynamic_entry = primitive.get("dynamicEntry", self.prim_dynamic_entry)
5268+
self.prim_dynamic_entry_name = primitive.get("dynamicEntryName", self.prim_dynamic_entry_name)
5269+
self.prim_dynamic_entry_category = primitive.get(
5270+
"dynamicEntryCategory", self.prim_dynamic_entry_category
5271+
)
52505272
key = data.get("chromaKey", {})
52515273
self.set_key = key.get("set", self.set_key)
52525274
if "center" in key:
@@ -5635,4 +5657,3 @@ def mat_unregister():
56355657
"Vertex Colored Texture (No Vertex Alpha)",
56365658
),
56375659
]
5638-

fast64_internal/f3d/f3d_texture_writer.py

Lines changed: 13 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -420,7 +420,7 @@ def saveOrGetPaletteDefinition(
420420
if texProp and texProp.texture_internal_path:
421421
fPalette.internal_path = sanitize_internal_asset_path(texProp.texture_internal_path)
422422
if texProp:
423-
fPalette.skip_export = texProp.is_vanilla_texture
423+
fPalette.skip_export = is_hm64_feature_set() and texProp.is_vanilla_texture
424424
return paletteKey, fPalette
425425

426426
paletteName, filename = getTextureNamesFromBasename(
@@ -430,7 +430,7 @@ def saveOrGetPaletteDefinition(
430430
if texProp:
431431
fPalette.internal_path = sanitize_internal_asset_path(texProp.texture_internal_path)
432432
if texProp:
433-
fPalette.skip_export = texProp.is_vanilla_texture
433+
fPalette.skip_export = is_hm64_feature_set() and texProp.is_vanilla_texture
434434

435435
parent.addTexture(paletteKey, fPalette, fMaterial)
436436
return paletteKey, fPalette
@@ -461,7 +461,7 @@ def saveOrGetTextureDefinition(
461461
if texProp and texProp.texture_internal_path:
462462
fImage.internal_path = sanitize_internal_asset_path(texProp.texture_internal_path)
463463
if texProp:
464-
fImage.skip_export = texProp.is_vanilla_texture
464+
fImage.skip_export = is_hm64_feature_set() and texProp.is_vanilla_texture
465465
return imageKey, fImage
466466

467467
imageName, filename = getTextureNamesFromProp(texProp, parent)
@@ -470,7 +470,7 @@ def saveOrGetTextureDefinition(
470470
if texProp:
471471
fImage.internal_path = sanitize_internal_asset_path(texProp.texture_internal_path)
472472
if texProp:
473-
fImage.skip_export = texProp.is_vanilla_texture
473+
fImage.skip_export = is_hm64_feature_set() and texProp.is_vanilla_texture
474474

475475
parent.addTexture(imageKey, fImage, fMaterial)
476476
return imageKey, fImage
@@ -627,7 +627,7 @@ def getPaletteName(self):
627627
if not self.useTex or self.isPalRef:
628628
return None
629629
self.custom_palette_requested = False
630-
if self.texProp is not None:
630+
if is_hm64_feature_set() and self.texProp is not None:
631631
custom_name = getattr(self.texProp, "custom_palette_name", "")
632632
if custom_name:
633633
stripped = custom_name.strip()
@@ -697,7 +697,11 @@ def writeAll(
697697
f3d = fModel.f3d
698698
palette_load_cmd = None
699699
if self.loadPal:
700-
override = self.texProp.palette_color_count if self.texProp is not None else None
700+
override = (
701+
self.texProp.palette_color_count
702+
if is_hm64_feature_set() and self.texProp is not None
703+
else None
704+
)
701705
palette_load_cmd = savePaletteLoad(
702706
loadGfx,
703707
fPalette,
@@ -722,7 +726,9 @@ def writeAll(
722726

723727
# Write texture data
724728
texProp = self.texProp
725-
should_write_data = convertTextureData and not (texProp and texProp.is_vanilla_texture)
729+
should_write_data = convertTextureData and not (
730+
is_hm64_feature_set() and texProp and texProp.is_vanilla_texture
731+
)
726732
if should_write_data:
727733
if self.isTexRef:
728734
if self.loadPal and not self.isPalRef:

fast64_internal/f3d/f3d_writer.py

Lines changed: 20 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1466,8 +1466,16 @@ def saveOrGetF3DMaterial(material, fModel, _obj, drawLayer, convertTextureData):
14661466
scaleToU8(f3dMat.prim_lod_min),
14671467
scaleToU8(f3dMat.prim_lod_frac),
14681468
*color,
1469-
cosmeticEntry=f3dMat.prim_dynamic_entry_name if f3dMat.prim_dynamic_entry else "",
1470-
cosmeticCategory=f3dMat.prim_dynamic_entry_category if f3dMat.prim_dynamic_entry else "",
1469+
cosmeticEntry=(
1470+
f3dMat.prim_dynamic_entry_name
1471+
if is_hm64_feature_set() and f3dMat.prim_dynamic_entry
1472+
else ""
1473+
),
1474+
cosmeticCategory=(
1475+
f3dMat.prim_dynamic_entry_category
1476+
if is_hm64_feature_set() and f3dMat.prim_dynamic_entry
1477+
else ""
1478+
),
14711479
)
14721480
)
14731481

@@ -1476,8 +1484,16 @@ def saveOrGetF3DMaterial(material, fModel, _obj, drawLayer, convertTextureData):
14761484
fMaterial.mat_only_DL.commands.append(
14771485
DPSetEnvColor(
14781486
*color,
1479-
cosmeticEntry=f3dMat.env_dynamic_entry_name if f3dMat.env_dynamic_entry else "",
1480-
cosmeticCategory=f3dMat.env_dynamic_entry_category if f3dMat.env_dynamic_entry else "",
1487+
cosmeticEntry=(
1488+
f3dMat.env_dynamic_entry_name
1489+
if is_hm64_feature_set() and f3dMat.env_dynamic_entry
1490+
else ""
1491+
),
1492+
cosmeticCategory=(
1493+
f3dMat.env_dynamic_entry_category
1494+
if is_hm64_feature_set() and f3dMat.env_dynamic_entry
1495+
else ""
1496+
),
14811497
)
14821498
)
14831499

fast64_internal/hm64/__init__.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,14 +5,18 @@
55
def hm64_register():
66
from .f3d.soh_xml_exporter import register as register_soh_xml
77
from .z64.panels import register as register_z64_panels
8+
from .mm.skeleton.operators import mm_skeleton_ops_register
89

910
register_soh_xml()
1011
register_z64_panels()
12+
mm_skeleton_ops_register()
1113

1214

1315
def hm64_unregister():
1416
from .f3d.soh_xml_exporter import unregister as unregister_soh_xml
1517
from .z64.panels import unregister as unregister_z64_panels
18+
from .mm.skeleton.operators import mm_skeleton_ops_unregister
1619

20+
mm_skeleton_ops_unregister()
1721
unregister_z64_panels()
1822
unregister_soh_xml()

fast64_internal/hm64/mm/mm_f3d_writer.py

Lines changed: 20 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1471,8 +1471,16 @@ def saveOrGetF3DMaterial(material, fModel, obj, drawLayer, convertTextureData):
14711471
scaleToU8(f3dMat.prim_lod_min),
14721472
scaleToU8(f3dMat.prim_lod_frac),
14731473
*color,
1474-
cosmeticEntry=f3dMat.prim_dynamic_entry_name if f3dMat.prim_dynamic_entry else "",
1475-
cosmeticCategory=f3dMat.prim_dynamic_entry_category if f3dMat.prim_dynamic_entry else "",
1474+
cosmeticEntry=(
1475+
f3dMat.prim_dynamic_entry_name
1476+
if is_hm64_feature_set() and f3dMat.prim_dynamic_entry
1477+
else ""
1478+
),
1479+
cosmeticCategory=(
1480+
f3dMat.prim_dynamic_entry_category
1481+
if is_hm64_feature_set() and f3dMat.prim_dynamic_entry
1482+
else ""
1483+
),
14761484
)
14771485
)
14781486

@@ -1481,8 +1489,16 @@ def saveOrGetF3DMaterial(material, fModel, obj, drawLayer, convertTextureData):
14811489
fMaterial.mat_only_DL.commands.append(
14821490
DPSetEnvColor(
14831491
*color,
1484-
cosmeticEntry=f3dMat.env_dynamic_entry_name if f3dMat.env_dynamic_entry else "",
1485-
cosmeticCategory=f3dMat.env_dynamic_entry_category if f3dMat.env_dynamic_entry else "",
1492+
cosmeticEntry=(
1493+
f3dMat.env_dynamic_entry_name
1494+
if is_hm64_feature_set() and f3dMat.env_dynamic_entry
1495+
else ""
1496+
),
1497+
cosmeticCategory=(
1498+
f3dMat.env_dynamic_entry_category
1499+
if is_hm64_feature_set() and f3dMat.env_dynamic_entry
1500+
else ""
1501+
),
14861502
)
14871503
)
14881504

@@ -1993,4 +2009,3 @@ def f3d_writer_unregister():
19932009
unregister_class(cls)
19942010

19952011
del bpy.types.Scene.matWriteMethod
1996-

fast64_internal/hm64/mm/skeleton/operators.py

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66

77
from ....f3d.f3d_gbi import DLFormat
88
from ....z64.skeleton.properties import OOTSkeletonExportSettings
9-
from ....z64.utility import getOOTScale
9+
from ....z64.utility import getOOTScale, is_hm64
1010
from ....utility import ExportUtils, PluginError, raisePluginError
1111
from .functions import ootConvertArmatureToO2R
1212

@@ -16,6 +16,10 @@ class MM_ExportSkeleton(Operator):
1616
bl_label = "Export MM Skeleton"
1717
bl_options = {"REGISTER", "UNDO", "PRESET"}
1818

19+
@classmethod
20+
def poll(cls, context):
21+
return context.scene.gameEditorMode == "MM" and is_hm64()
22+
1923
def execute(self, context):
2024
with ExportUtils() as export_utils:
2125
armatureObj = None

fast64_internal/hm64/z64/operators.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -83,7 +83,7 @@ def ootConvertMeshToXML(
8383
):
8484
folderName = settings.folder
8585
exportPath = resolve_custom_export_base(settings)
86-
isCustomExport = settings.isCustom
86+
isCustomExport = True
8787
name = resolve_dl_export_name(originalObj, settings)
8888
overlayName = settings.actorOverlayName
8989
flipbookUses2DArray = settings.flipbookUses2DArray

0 commit comments

Comments
 (0)