Skip to content

Commit 8da1426

Browse files
committed
initial commit: allow for exporting custom object
1 parent c51e462 commit 8da1426

File tree

2 files changed

+38
-5
lines changed

2 files changed

+38
-5
lines changed

fast64_internal/sm64/settings/constants.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,4 +31,5 @@
3131
("Refresh 16", "Refresh 16", "Refresh 16"),
3232
("", "HackerSM64", ""),
3333
("HackerSM64 2.3.0", "HackerSM64 (v2.3.0)", "HackerSM64 (v2.3.0)"),
34+
("HackerSM64 3.0", "HackerSM64 (v3.0)", "HackerSM64 (v3.0)"),
3435
]

fast64_internal/sm64/sm64_objects.py

Lines changed: 37 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1611,9 +1611,33 @@ def export_model_id(self, context, props, offset):
16111611
PluginError("Could not find model_ids.h")
16121612

16131613
model_id_lines = open(model_ids, "r").readlines()
1614-
export_model_id = f"#define {props.model_id_define: <34}{props.model_id + offset}\n"
16151614
fast64_sig = "/* fast64 object exports get inserted here */"
16161615

1616+
# For hacker model ID enums add comma and no number
1617+
export_model_id = f" {props.model_id_define},\n"
1618+
1619+
# Check if hacker version is "3.0" or greater
1620+
refresh_version = bpy.context.scene.fast64.sm64.refresh_version
1621+
if refresh_version.startswith("HackerSM64"):
1622+
major_version = int(refresh_version.split()[1].split(".")[0])
1623+
if major_version >= 3:
1624+
# Check if the ID already exists
1625+
if any(props.model_id_define in line for line in model_id_lines):
1626+
print(f"Model ID '{props.model_id_define}' already exists. Skipping insertion.")
1627+
return
1628+
1629+
# Look for MODEL_ID_COUNT line
1630+
model_id_count_line = next(
1631+
(i for i, line in enumerate(model_id_lines) if "MODEL_ID_COUNT" in line), None
1632+
)
1633+
if model_id_count_line is not None:
1634+
# Insert new ID above MODEL_ID_COUNT with a comma
1635+
model_id_lines.insert(model_id_count_line, export_model_id)
1636+
self.write_file_lines(model_ids, model_id_lines)
1637+
return
1638+
1639+
# Default behavior if not enums
1640+
export_model_id_default = f"#define {props.model_id_define: <34}{props.model_id + offset}\n"
16171641
match_line, sig_insert_line, default_line = self.find_export_lines(
16181642
model_id_lines,
16191643
match_str=f"#define {props.model_id_define} ",
@@ -1622,13 +1646,13 @@ def export_model_id(self, context, props, offset):
16221646
)
16231647

16241648
if match_line:
1625-
model_id_lines[match_line] = export_model_id
1649+
model_id_lines[match_line] = export_model_id_default
16261650
elif sig_insert_line:
1627-
model_id_lines.insert(sig_insert_line + 1, export_model_id)
1651+
model_id_lines.insert(sig_insert_line + 1, export_model_id_default)
16281652
else:
16291653
export_line = default_line + 1 if default_line else len(model_id_lines)
16301654
model_id_lines.insert(export_line, f"\n{fast64_sig}\n")
1631-
model_id_lines.insert(export_line + 1, export_model_id)
1655+
model_id_lines.insert(export_line + 1, export_model_id_default)
16321656

16331657
self.write_file_lines(model_ids, model_id_lines)
16341658

@@ -2140,6 +2164,7 @@ def filter_name(self, name):
21402164
return name
21412165

21422166
def draw_export_options(self, layout):
2167+
refresh_version = bpy.context.scene.fast64.sm64.refresh_version
21432168
split = layout.row(align=True)
21442169

21452170
box = split.box()
@@ -2160,7 +2185,14 @@ def draw_export_options(self, layout):
21602185
if not self.export_all_selected:
21612186
box.prop(self, "graphics_object", icon_only=True)
21622187
if self.export_script_loads:
2163-
box.prop(self, "model_id", text="Model ID")
2188+
# Hide Model ID for HackerSM64 >= 3, show otherwise
2189+
if refresh_version.startswith("HackerSM64"):
2190+
major_version = int(refresh_version.split()[1].split(".")[0])
2191+
if major_version < 3:
2192+
box.prop(self, "model_id", text="Model ID")
2193+
else:
2194+
box.prop(self, "model_id", text="Model ID")
2195+
21642196
col = layout.column()
21652197
col.prop(self, "export_all_selected")
21662198
col.prop(self, "use_name_filtering")

0 commit comments

Comments
 (0)