@@ -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