From e61d16e73d5d63f6e18431fd3423ff33d3ae7e55 Mon Sep 17 00:00:00 2001 From: Lila Date: Sun, 15 Sep 2024 12:11:09 +0100 Subject: [PATCH 1/3] [F3D] Backport point lit ucode from AC pr --- __init__.py | 4 +- fast64_internal/f3d/f3d_bleed.py | 15 +++--- fast64_internal/f3d/f3d_enums.py | 25 +++++++--- fast64_internal/f3d/f3d_gbi.py | 13 ++++-- fast64_internal/f3d/f3d_material.py | 33 ++++++++++--- fast64_internal/f3d/f3d_material_presets.py | 52 +++++++++++++++++++++ fast64_internal/f3d/f3d_parser.py | 7 +++ fast64_internal/f3d/f3d_writer.py | 7 ++- fast64_internal/oot/oot_constants.py | 1 + fast64_internal/sm64/sm64_constants.py | 1 + 10 files changed, 130 insertions(+), 28 deletions(-) diff --git a/__init__.py b/__init__.py index d3e5c548c..a918e6bdd 100644 --- a/__init__.py +++ b/__init__.py @@ -331,9 +331,9 @@ def upgrade_changed_props(): OOT_ObjectProperties.upgrade_changed_props() for scene in bpy.data.scenes: settings: Fast64Settings_Properties = scene.fast64.settings - if settings.internal_game_update_ver != 1: + if settings.internal_game_update_ver < 2: set_game_defaults(scene, False) - settings.internal_game_update_ver = 1 + settings.internal_game_update_ver = 2 if scene.get("decomp_compatible", False): scene.gameEditorMode = "Homebrew" del scene["decomp_compatible"] diff --git a/fast64_internal/f3d/f3d_bleed.py b/fast64_internal/f3d/f3d_bleed.py index 0e6faaa9b..5fd34d2b7 100644 --- a/fast64_internal/f3d/f3d_bleed.py +++ b/fast64_internal/f3d/f3d_bleed.py @@ -45,6 +45,7 @@ GfxList, FTriGroup, GbiMacro, + get_F3D_GBI, ) @@ -58,8 +59,7 @@ class BleedGraphics: def __init__(self): self.bled_gfx_lists = dict() # build world default cmds to compare against, f3d types needed for reset cmd building - self.is_f3d_old = bpy.context.scene.f3d_type == "F3D" - self.is_f3dex2 = "F3DEX2" in bpy.context.scene.f3d_type + self.f3d = get_F3D_GBI() self.build_default_geo() self.build_default_othermodes() @@ -84,9 +84,10 @@ def place_in_flaglist(flag: bool, enum: str, set_list: SPSetGeometryMode, clear_ place_in_flaglist(defaults.g_tex_gen, "G_TEXTURE_GEN", setGeo, clearGeo) place_in_flaglist(defaults.g_tex_gen_linear, "G_TEXTURE_GEN_LINEAR", setGeo, clearGeo) place_in_flaglist(defaults.g_shade_smooth, "G_SHADING_SMOOTH", setGeo, clearGeo) - if bpy.context.scene.f3d_type == "F3DEX_GBI_2" or bpy.context.scene.f3d_type == "F3DEX_GBI": + if self.f3d.F3DEX_GBI: place_in_flaglist(defaults.g_clipping, "G_CLIPPING", setGeo, clearGeo) - + if self.f3d.POINT_LIT_GBI: + place_in_flaglist(defaults.g_lighting_positional, "G_LIGHTING_POSITIONAL", setGeo, clearGeo) self.default_load_geo = SPLoadGeometryMode(setGeo.flagList) self.default_set_geo = setGeo self.default_clear_geo = clearGeo @@ -94,9 +95,9 @@ def place_in_flaglist(flag: bool, enum: str, set_list: SPSetGeometryMode, clear_ def build_default_othermodes(self): defaults = create_or_get_world(bpy.context.scene).rdp_defaults - othermode_H = SPSetOtherMode("G_SETOTHERMODE_H", 4, 20 - self.is_f3d_old, []) + othermode_H = SPSetOtherMode("G_SETOTHERMODE_H", 4, 20 - self.f3d.F3D_OLD_GBI, []) # if the render mode is set, it will be consider non-default a priori - othermode_L = SPSetOtherMode("G_SETOTHERMODE_L", 0, 3 - self.is_f3d_old, []) + othermode_L = SPSetOtherMode("G_SETOTHERMODE_L", 0, 3 - self.f3d.F3D_OLD_GBI, []) othermode_L.flagList.append(defaults.g_mdsft_alpha_compare) othermode_L.flagList.append(defaults.g_mdsft_zsrcsel) @@ -399,7 +400,7 @@ def create_reset_cmds(self, reset_cmd_dict: dict[GbiMacro], default_render_mode: SPSetOtherMode( "G_SETOTHERMODE_L", 0, - 32 - self.is_f3d_old, + 32 - self.f3d.F3D_OLD_GBI, [*self.default_othermode_L.flagList, *default_render_mode], ) ) diff --git a/fast64_internal/f3d/f3d_enums.py b/fast64_internal/f3d/f3d_enums.py index 993a87316..9ebf9f0d1 100644 --- a/fast64_internal/f3d/f3d_enums.py +++ b/fast64_internal/f3d/f3d_enums.py @@ -378,13 +378,24 @@ } enumF3D = [ - ("F3D", "F3D", "Original microcode used in SM64"), - ("F3DEX/LX", "F3DEX/LX", "F3DEX version 1"), - ("F3DLX.Rej", "F3DLX.Rej", "F3DLX.Rej"), - ("F3DLP.Rej", "F3DLP.Rej", "F3DLP.Rej"), - ("F3DEX2/LX2", "F3DEX2/LX2/ZEX", "Family of microcodes used in later N64 games including OoT and MM"), - ("F3DEX2.Rej/LX2.Rej", "F3DEX2.Rej/LX2.Rej", "Variant of F3DEX2 family using vertex rejection instead of clipping"), - ("F3DEX3", "F3DEX3", "Custom microcode by Sauraen"), + ("F3D", "F3D", "Original microcode used in SM64", 0), + ("F3DEX/LX", "F3DEX/LX", "F3DEX version 1", 1), + ("F3DLX.Rej", "F3DLX.Rej", "F3DLX.Rej", 2), + ("F3DLP.Rej", "F3DLP.Rej", "F3DLP.Rej", 3), + ("F3DEX2/LX2", "F3DEX2/LX2/ZEX", "Family of microcodes used in later N64 games including OoT", 4), + ( + "F3DEX2.Rej/LX2.Rej", + "F3DEX2.Rej/LX2.Rej", + "Variant of F3DEX2 family using vertex rejection instead of clipping", + 5, + ), + ( + "F3DEX2_PL", + "F3DEX2 (Point Lit)", + "Variant of F3DEX2 family with support for point lighting used in a few games including MM", + 7, + ), + ("F3DEX3", "F3DEX3", "Custom microcode by Sauraen", 6), ] enumLargeEdges = [ diff --git a/fast64_internal/f3d/f3d_gbi.py b/fast64_internal/f3d/f3d_gbi.py index 1eb5b7d80..1101f941e 100644 --- a/fast64_internal/f3d/f3d_gbi.py +++ b/fast64_internal/f3d/f3d_gbi.py @@ -68,6 +68,7 @@ class GfxMatWriteMethod(enum.Enum): "F3DLX.Rej": (64, 32), "F3DLP.Rej": (80, 32), "F3DEX2/LX2": (32, 32), + "F3DEX2_PL": (32, 32), "F3DEX2.Rej/LX2.Rej": (64, 64), "F3DEX3": (56, 56), } @@ -137,13 +138,17 @@ def isUcodeF3DEX1(F3D_VER: str) -> bool: def isUcodeF3DEX2(F3D_VER: str) -> bool: - return F3D_VER in {"F3DEX2.Rej/LX2.Rej", "F3DEX2/LX2"} + return F3D_VER in {"F3DEX2.Rej/LX2.Rej", "F3DEX2/LX2", "F3DEX2_PL"} def isUcodeF3DEX3(F3D_VER: str) -> bool: return F3D_VER == "F3DEX3" +def is_ucode_point_lit(F3D_VER: str) -> bool: + return F3D_VER in {"F3DEX3", "F3DEX2_PL"} + + class F3D: """NOTE: do not initialize this class manually! use get_F3D_GBI so that the single instance is cached from the microcode type.""" @@ -154,6 +159,7 @@ def __init__(self, F3D_VER): F3DEX_GBI_3 = self.F3DEX_GBI_3 = isUcodeF3DEX3(F3D_VER) F3DLP_GBI = self.F3DLP_GBI = self.F3DEX_GBI self.F3D_OLD_GBI = not (F3DEX_GBI or F3DEX_GBI_2 or F3DEX_GBI_3) + POINT_LIT_GBI = self.POINT_LIT_GBI = is_ucode_point_lit(F3D_VER) # F3DEX2 is F3DEX1 and F3DEX3 is F3DEX2, but F3DEX3 is not F3DEX1 if F3DEX_GBI_2: @@ -358,7 +364,6 @@ def __init__(self, F3D_VER): self.G_LIGHTING_SPECULAR = 0x00002000 self.G_FRESNEL_COLOR = 0x00004000 self.G_FRESNEL_ALPHA = 0x00008000 - self.G_LIGHTING_POSITIONAL = 0x00400000 # Ignored, always on self.allGeomModeFlags = { "G_ZBUFFER", @@ -373,7 +378,6 @@ def __init__(self, F3D_VER): "G_TEXTURE_GEN_LINEAR", "G_LOD", "G_SHADING_SMOOTH", - "G_LIGHTING_POSITIONAL", "G_CLIPPING", } if F3DEX_GBI_3: @@ -387,6 +391,9 @@ def __init__(self, F3D_VER): "G_FRESNEL_COLOR", "G_FRESNEL_ALPHA", } + if POINT_LIT_GBI: + self.G_LIGHTING_POSITIONAL = 0x00400000 + self.allGeomModeFlags.add("G_LIGHTING_POSITIONAL") self.G_FOG_H = self.G_FOG / 0x10000 self.G_LIGHTING_H = self.G_LIGHTING / 0x10000 diff --git a/fast64_internal/f3d/f3d_material.py b/fast64_internal/f3d/f3d_material.py index 1f0970553..abe987bcb 100644 --- a/fast64_internal/f3d/f3d_material.py +++ b/fast64_internal/f3d/f3d_material.py @@ -468,8 +468,9 @@ def indentGroup(parent: UILayout, textOrProp: Union[str, "F3DMaterialProperty"], c.enabled = enable or not disable_dependent return c - isF3DEX3 = bpy.context.scene.f3d_type == "F3DEX3" - lightFxPrereq = isF3DEX3 and settings.g_lighting + f3d = get_F3D_GBI() + + lightFxPrereq = f3d.F3DEX_GBI_3 and settings.g_lighting ccWarnings = shadeInCC = False blendWarnings = shadeInBlender = zInBlender = False if isinstance(dataHolder, F3DMaterialProperty): @@ -487,11 +488,13 @@ def indentGroup(parent: UILayout, textOrProp: Union[str, "F3DMaterialProperty"], c = indentGroup(inputGroup, "g_lighting", False) if ccWarnings and not shadeInCC and settings.g_lighting and not settings.g_tex_gen: multilineLabel(c, "Shade not used in CC, can disable\nlighting.", icon="INFO") - if isF3DEX3: + if f3d.F3DEX_GBI_3: c.prop(settings, "g_packed_normals") c.prop(settings, "g_lighting_specular") c.prop(settings, "g_ambocclusion") c.prop(settings, "g_fresnel_color") + elif f3d.POINT_LIT_GBI: # Draw this flag in Not Useful for f3dex3 + c.prop(settings, "g_lighting_positional") d = indentGroup(c, "g_tex_gen", False) d.prop(settings, "g_tex_gen_linear") @@ -518,7 +521,7 @@ def indentGroup(parent: UILayout, textOrProp: Union[str, "F3DMaterialProperty"], else: shadeAlphaLabel = "Vtx alpha" c = indentGroup(inputGroup, f"Shade alpha = {shadeAlphaLabel}:", True) - if isF3DEX3: + if f3d.F3DEX_GBI_3: lighting_group = c.column(align=True) lighting_group.enabled = settings.g_lighting or not disable_dependent lighting_group.prop(settings, "g_lighttoalpha") @@ -539,7 +542,7 @@ def indentGroup(parent: UILayout, textOrProp: Union[str, "F3DMaterialProperty"], elif blendWarnings and not shadeInBlender and settings.g_fog: c.label(text="Fog not used in rendermode / blender, can disable.", icon="INFO") - if isF3DEX3: + if f3d.F3DEX_GBI_3: c = indentGroup(inputGroup, "Attribute offsets:", True) c.prop(settings, "g_attroffset_st_enable") c.prop(settings, "g_attroffset_z_enable") @@ -570,8 +573,10 @@ def indentGroup(parent: UILayout, textOrProp: Union[str, "F3DMaterialProperty"], c = indentGroup(inputGroup, "Not useful:", True) c.prop(settings, "g_lod") - if isUcodeF3DEX1(bpy.context.scene.f3d_type): + if f3d.F3DEX_GBI: c.prop(settings, "g_clipping") + elif f3d.F3DEX_GBI_3: + c.prop(settings, "g_lighting_positional", text="Positional Lighting (Always enabled in EX3)") def ui_upper_mode(settings, dataHolder, layout: UILayout, useDropdown): @@ -3314,6 +3319,12 @@ class RDPSettings(PropertyGroup): update=update_node_values_with_preset, description="F3DEX1/LX only, exact function unknown", ) + g_lighting_positional: bpy.props.BoolProperty( + name="Positional Lighting", + default=False, + update=update_node_values_with_preset, + description="F3DEX2 (Point Lit): Enables calculating shade color using positional lights along with directional, ignored in F3DEX3", + ) # upper half mode # v2 only @@ -3594,6 +3605,10 @@ def attributes_from_dict(self, data: dict, info: dict): ("clipping", "g_clipping", True), ] + geo_mode_pl_attributes = [ + ("positionalLighting", "g_lighting_positional", False), + ] + geo_mode_f3dex3_attributes = [ ("ambientOcclusion", "g_ambocclusion", False), ("attroffsetZ", "g_attroffset_z_enable", False), @@ -3604,13 +3619,17 @@ def attributes_from_dict(self, data: dict, info: dict): ("fresnelToColor", "g_fresnel_color", False), ("fresnelToAlpha", "g_fresnel_alpha", False), ] - geo_mode_attributes = geo_mode_all_attributes + geo_mode_f3dex_attributes + geo_mode_f3dex3_attributes + geo_mode_attributes = ( + geo_mode_all_attributes + geo_mode_f3dex_attributes + geo_mode_pl_attributes + geo_mode_f3dex3_attributes + ) def geo_mode_to_dict(self, f3d=None): f3d = f3d if f3d else get_F3D_GBI() data = self.attributes_to_dict(self.geo_mode_all_attributes) if f3d.F3DEX_GBI or f3d.F3DLP_GBI: data.update(self.attributes_to_dict(self.geo_mode_f3dex_attributes)) + if f3d.POINT_LIT_GBI: + data.update(self.attributes_to_dict(self.geo_mode_pl_attributes)) if f3d.F3DEX_GBI_3: data.update(self.attributes_to_dict(self.geo_mode_f3dex3_attributes)) return data diff --git a/fast64_internal/f3d/f3d_material_presets.py b/fast64_internal/f3d/f3d_material_presets.py index 2a9c26a2b..974d184e5 100644 --- a/fast64_internal/f3d/f3d_material_presets.py +++ b/fast64_internal/f3d/f3d_material_presets.py @@ -88,6 +88,7 @@ f3d_mat.rdp_settings.g_lod = False f3d_mat.rdp_settings.g_shade_smooth = True f3d_mat.rdp_settings.g_clipping = False +f3d_mat.rdp_settings.g_lighting_positional = True f3d_mat.rdp_settings.g_mdsft_alpha_dither = 'G_AD_NOISE' f3d_mat.rdp_settings.g_mdsft_rgb_dither = 'G_CD_MAGICSQ' f3d_mat.rdp_settings.g_mdsft_combkey = 'G_CK_NONE' @@ -201,6 +202,7 @@ f3d_mat.rdp_settings.g_lod = False f3d_mat.rdp_settings.g_shade_smooth = True f3d_mat.rdp_settings.g_clipping = False +f3d_mat.rdp_settings.g_lighting_positional = True f3d_mat.rdp_settings.g_mdsft_alpha_dither = 'G_AD_NOISE' f3d_mat.rdp_settings.g_mdsft_rgb_dither = 'G_CD_MAGICSQ' f3d_mat.rdp_settings.g_mdsft_combkey = 'G_CK_NONE' @@ -314,6 +316,7 @@ f3d_mat.rdp_settings.g_lod = False f3d_mat.rdp_settings.g_shade_smooth = True f3d_mat.rdp_settings.g_clipping = False +f3d_mat.rdp_settings.g_lighting_positional = True f3d_mat.rdp_settings.g_mdsft_alpha_dither = 'G_AD_NOISE' f3d_mat.rdp_settings.g_mdsft_rgb_dither = 'G_CD_MAGICSQ' f3d_mat.rdp_settings.g_mdsft_combkey = 'G_CK_NONE' @@ -427,6 +430,7 @@ f3d_mat.rdp_settings.g_lod = False f3d_mat.rdp_settings.g_shade_smooth = True f3d_mat.rdp_settings.g_clipping = False +f3d_mat.rdp_settings.g_lighting_positional = True f3d_mat.rdp_settings.g_mdsft_alpha_dither = 'G_AD_NOISE' f3d_mat.rdp_settings.g_mdsft_rgb_dither = 'G_CD_MAGICSQ' f3d_mat.rdp_settings.g_mdsft_combkey = 'G_CK_NONE' @@ -540,6 +544,7 @@ f3d_mat.rdp_settings.g_lod = False f3d_mat.rdp_settings.g_shade_smooth = True f3d_mat.rdp_settings.g_clipping = False +f3d_mat.rdp_settings.g_lighting_positional = True f3d_mat.rdp_settings.g_mdsft_alpha_dither = 'G_AD_NOISE' f3d_mat.rdp_settings.g_mdsft_rgb_dither = 'G_CD_MAGICSQ' f3d_mat.rdp_settings.g_mdsft_combkey = 'G_CK_NONE' @@ -653,6 +658,7 @@ f3d_mat.rdp_settings.g_lod = False f3d_mat.rdp_settings.g_shade_smooth = True f3d_mat.rdp_settings.g_clipping = False +f3d_mat.rdp_settings.g_lighting_positional = True f3d_mat.rdp_settings.g_mdsft_alpha_dither = 'G_AD_NOISE' f3d_mat.rdp_settings.g_mdsft_rgb_dither = 'G_CD_MAGICSQ' f3d_mat.rdp_settings.g_mdsft_combkey = 'G_CK_NONE' @@ -766,6 +772,7 @@ f3d_mat.rdp_settings.g_lod = False f3d_mat.rdp_settings.g_shade_smooth = True f3d_mat.rdp_settings.g_clipping = False +f3d_mat.rdp_settings.g_lighting_positional = True f3d_mat.rdp_settings.g_mdsft_alpha_dither = 'G_AD_NOISE' f3d_mat.rdp_settings.g_mdsft_rgb_dither = 'G_CD_MAGICSQ' f3d_mat.rdp_settings.g_mdsft_combkey = 'G_CK_NONE' @@ -879,6 +886,7 @@ f3d_mat.rdp_settings.g_lod = False f3d_mat.rdp_settings.g_shade_smooth = True f3d_mat.rdp_settings.g_clipping = False +f3d_mat.rdp_settings.g_lighting_positional = True f3d_mat.rdp_settings.g_mdsft_alpha_dither = 'G_AD_NOISE' f3d_mat.rdp_settings.g_mdsft_rgb_dither = 'G_CD_MAGICSQ' f3d_mat.rdp_settings.g_mdsft_combkey = 'G_CK_NONE' @@ -992,6 +1000,7 @@ f3d_mat.rdp_settings.g_lod = False f3d_mat.rdp_settings.g_shade_smooth = True f3d_mat.rdp_settings.g_clipping = False +f3d_mat.rdp_settings.g_lighting_positional = True f3d_mat.rdp_settings.g_mdsft_alpha_dither = 'G_AD_NOISE' f3d_mat.rdp_settings.g_mdsft_rgb_dither = 'G_CD_MAGICSQ' f3d_mat.rdp_settings.g_mdsft_combkey = 'G_CK_NONE' @@ -1105,6 +1114,7 @@ f3d_mat.rdp_settings.g_lod = False f3d_mat.rdp_settings.g_shade_smooth = True f3d_mat.rdp_settings.g_clipping = False +f3d_mat.rdp_settings.g_lighting_positional = True f3d_mat.rdp_settings.g_mdsft_alpha_dither = 'G_AD_NOISE' f3d_mat.rdp_settings.g_mdsft_rgb_dither = 'G_CD_MAGICSQ' f3d_mat.rdp_settings.g_mdsft_combkey = 'G_CK_NONE' @@ -1218,6 +1228,7 @@ f3d_mat.rdp_settings.g_lod = False f3d_mat.rdp_settings.g_shade_smooth = True f3d_mat.rdp_settings.g_clipping = False +f3d_mat.rdp_settings.g_lighting_positional = True f3d_mat.rdp_settings.g_mdsft_alpha_dither = 'G_AD_NOISE' f3d_mat.rdp_settings.g_mdsft_rgb_dither = 'G_CD_MAGICSQ' f3d_mat.rdp_settings.g_mdsft_combkey = 'G_CK_NONE' @@ -1331,6 +1342,7 @@ f3d_mat.rdp_settings.g_lod = False f3d_mat.rdp_settings.g_shade_smooth = True f3d_mat.rdp_settings.g_clipping = False +f3d_mat.rdp_settings.g_lighting_positional = True f3d_mat.rdp_settings.g_mdsft_alpha_dither = 'G_AD_NOISE' f3d_mat.rdp_settings.g_mdsft_rgb_dither = 'G_CD_MAGICSQ' f3d_mat.rdp_settings.g_mdsft_combkey = 'G_CK_NONE' @@ -1444,6 +1456,7 @@ f3d_mat.rdp_settings.g_lod = False f3d_mat.rdp_settings.g_shade_smooth = True f3d_mat.rdp_settings.g_clipping = False +f3d_mat.rdp_settings.g_lighting_positional = True f3d_mat.rdp_settings.g_mdsft_alpha_dither = 'G_AD_NOISE' f3d_mat.rdp_settings.g_mdsft_rgb_dither = 'G_CD_MAGICSQ' f3d_mat.rdp_settings.g_mdsft_combkey = 'G_CK_NONE' @@ -1557,6 +1570,7 @@ f3d_mat.rdp_settings.g_lod = False f3d_mat.rdp_settings.g_shade_smooth = True f3d_mat.rdp_settings.g_clipping = False +f3d_mat.rdp_settings.g_lighting_positional = True f3d_mat.rdp_settings.g_mdsft_alpha_dither = 'G_AD_NOISE' f3d_mat.rdp_settings.g_mdsft_rgb_dither = 'G_CD_MAGICSQ' f3d_mat.rdp_settings.g_mdsft_combkey = 'G_CK_NONE' @@ -1670,6 +1684,7 @@ f3d_mat.rdp_settings.g_lod = False f3d_mat.rdp_settings.g_shade_smooth = True f3d_mat.rdp_settings.g_clipping = False +f3d_mat.rdp_settings.g_lighting_positional = True f3d_mat.rdp_settings.g_mdsft_alpha_dither = 'G_AD_NOISE' f3d_mat.rdp_settings.g_mdsft_rgb_dither = 'G_CD_MAGICSQ' f3d_mat.rdp_settings.g_mdsft_combkey = 'G_CK_NONE' @@ -1783,6 +1798,7 @@ f3d_mat.rdp_settings.g_lod = False f3d_mat.rdp_settings.g_shade_smooth = True f3d_mat.rdp_settings.g_clipping = False +f3d_mat.rdp_settings.g_lighting_positional = True f3d_mat.rdp_settings.g_mdsft_alpha_dither = 'G_AD_NOISE' f3d_mat.rdp_settings.g_mdsft_rgb_dither = 'G_CD_MAGICSQ' f3d_mat.rdp_settings.g_mdsft_combkey = 'G_CK_NONE' @@ -1895,6 +1911,7 @@ f3d_mat.rdp_settings.g_lod = False f3d_mat.rdp_settings.g_shade_smooth = True f3d_mat.rdp_settings.g_clipping = False +f3d_mat.rdp_settings.g_lighting_positional = True f3d_mat.rdp_settings.g_mdsft_alpha_dither = 'G_AD_NOISE' f3d_mat.rdp_settings.g_mdsft_rgb_dither = 'G_CD_MAGICSQ' f3d_mat.rdp_settings.g_mdsft_combkey = 'G_CK_NONE' @@ -2007,6 +2024,7 @@ f3d_mat.rdp_settings.g_lod = False f3d_mat.rdp_settings.g_shade_smooth = True f3d_mat.rdp_settings.g_clipping = False +f3d_mat.rdp_settings.g_lighting_positional = True f3d_mat.rdp_settings.g_mdsft_alpha_dither = 'G_AD_NOISE' f3d_mat.rdp_settings.g_mdsft_rgb_dither = 'G_CD_MAGICSQ' f3d_mat.rdp_settings.g_mdsft_combkey = 'G_CK_NONE' @@ -2119,6 +2137,7 @@ f3d_mat.rdp_settings.g_lod = False f3d_mat.rdp_settings.g_shade_smooth = True f3d_mat.rdp_settings.g_clipping = False +f3d_mat.rdp_settings.g_lighting_positional = True f3d_mat.rdp_settings.g_mdsft_alpha_dither = 'G_AD_NOISE' f3d_mat.rdp_settings.g_mdsft_rgb_dither = 'G_CD_MAGICSQ' f3d_mat.rdp_settings.g_mdsft_combkey = 'G_CK_NONE' @@ -2231,6 +2250,7 @@ f3d_mat.rdp_settings.g_lod = False f3d_mat.rdp_settings.g_shade_smooth = True f3d_mat.rdp_settings.g_clipping = False +f3d_mat.rdp_settings.g_lighting_positional = True f3d_mat.rdp_settings.g_mdsft_alpha_dither = 'G_AD_NOISE' f3d_mat.rdp_settings.g_mdsft_rgb_dither = 'G_CD_MAGICSQ' f3d_mat.rdp_settings.g_mdsft_combkey = 'G_CK_NONE' @@ -2343,6 +2363,7 @@ f3d_mat.rdp_settings.g_lod = False f3d_mat.rdp_settings.g_shade_smooth = True f3d_mat.rdp_settings.g_clipping = False +f3d_mat.rdp_settings.g_lighting_positional = True f3d_mat.rdp_settings.g_mdsft_alpha_dither = 'G_AD_NOISE' f3d_mat.rdp_settings.g_mdsft_rgb_dither = 'G_CD_MAGICSQ' f3d_mat.rdp_settings.g_mdsft_combkey = 'G_CK_NONE' @@ -2455,6 +2476,7 @@ f3d_mat.rdp_settings.g_lod = False f3d_mat.rdp_settings.g_shade_smooth = True f3d_mat.rdp_settings.g_clipping = False +f3d_mat.rdp_settings.g_lighting_positional = True f3d_mat.rdp_settings.g_mdsft_alpha_dither = 'G_AD_NOISE' f3d_mat.rdp_settings.g_mdsft_rgb_dither = 'G_CD_MAGICSQ' f3d_mat.rdp_settings.g_mdsft_combkey = 'G_CK_NONE' @@ -2567,6 +2589,7 @@ f3d_mat.rdp_settings.g_lod = False f3d_mat.rdp_settings.g_shade_smooth = True f3d_mat.rdp_settings.g_clipping = False +f3d_mat.rdp_settings.g_lighting_positional = True f3d_mat.rdp_settings.g_mdsft_alpha_dither = 'G_AD_NOISE' f3d_mat.rdp_settings.g_mdsft_rgb_dither = 'G_CD_MAGICSQ' f3d_mat.rdp_settings.g_mdsft_combkey = 'G_CK_NONE' @@ -2679,6 +2702,7 @@ f3d_mat.rdp_settings.g_lod = False f3d_mat.rdp_settings.g_shade_smooth = True f3d_mat.rdp_settings.g_clipping = False +f3d_mat.rdp_settings.g_lighting_positional = True f3d_mat.rdp_settings.g_mdsft_alpha_dither = 'G_AD_NOISE' f3d_mat.rdp_settings.g_mdsft_rgb_dither = 'G_CD_MAGICSQ' f3d_mat.rdp_settings.g_mdsft_combkey = 'G_CK_NONE' @@ -2791,6 +2815,7 @@ f3d_mat.rdp_settings.g_lod = False f3d_mat.rdp_settings.g_shade_smooth = True f3d_mat.rdp_settings.g_clipping = False +f3d_mat.rdp_settings.g_lighting_positional = True f3d_mat.rdp_settings.g_mdsft_alpha_dither = 'G_AD_NOISE' f3d_mat.rdp_settings.g_mdsft_rgb_dither = 'G_CD_MAGICSQ' f3d_mat.rdp_settings.g_mdsft_combkey = 'G_CK_NONE' @@ -2903,6 +2928,7 @@ f3d_mat.rdp_settings.g_lod = False f3d_mat.rdp_settings.g_shade_smooth = True f3d_mat.rdp_settings.g_clipping = False +f3d_mat.rdp_settings.g_lighting_positional = True f3d_mat.rdp_settings.g_mdsft_alpha_dither = 'G_AD_NOISE' f3d_mat.rdp_settings.g_mdsft_rgb_dither = 'G_CD_MAGICSQ' f3d_mat.rdp_settings.g_mdsft_combkey = 'G_CK_NONE' @@ -3015,6 +3041,7 @@ f3d_mat.rdp_settings.g_lod = False f3d_mat.rdp_settings.g_shade_smooth = True f3d_mat.rdp_settings.g_clipping = False +f3d_mat.rdp_settings.g_lighting_positional = True f3d_mat.rdp_settings.g_mdsft_alpha_dither = 'G_AD_NOISE' f3d_mat.rdp_settings.g_mdsft_rgb_dither = 'G_CD_MAGICSQ' f3d_mat.rdp_settings.g_mdsft_combkey = 'G_CK_NONE' @@ -3127,6 +3154,7 @@ f3d_mat.rdp_settings.g_lod = False f3d_mat.rdp_settings.g_shade_smooth = True f3d_mat.rdp_settings.g_clipping = False +f3d_mat.rdp_settings.g_lighting_positional = True f3d_mat.rdp_settings.g_mdsft_alpha_dither = 'G_AD_NOISE' f3d_mat.rdp_settings.g_mdsft_rgb_dither = 'G_CD_MAGICSQ' f3d_mat.rdp_settings.g_mdsft_combkey = 'G_CK_NONE' @@ -3239,6 +3267,7 @@ f3d_mat.rdp_settings.g_lod = False f3d_mat.rdp_settings.g_shade_smooth = True f3d_mat.rdp_settings.g_clipping = False +f3d_mat.rdp_settings.g_lighting_positional = True f3d_mat.rdp_settings.g_mdsft_alpha_dither = 'G_AD_NOISE' f3d_mat.rdp_settings.g_mdsft_rgb_dither = 'G_CD_MAGICSQ' f3d_mat.rdp_settings.g_mdsft_combkey = 'G_CK_NONE' @@ -3352,6 +3381,7 @@ f3d_mat.rdp_settings.g_lod = False f3d_mat.rdp_settings.g_shade_smooth = True f3d_mat.rdp_settings.g_clipping = False +f3d_mat.rdp_settings.g_lighting_positional = True f3d_mat.rdp_settings.g_mdsft_alpha_dither = 'G_AD_NOISE' f3d_mat.rdp_settings.g_mdsft_rgb_dither = 'G_CD_MAGICSQ' f3d_mat.rdp_settings.g_mdsft_combkey = 'G_CK_NONE' @@ -3466,6 +3496,7 @@ f3d_mat.rdp_settings.g_lod = False f3d_mat.rdp_settings.g_shade_smooth = True f3d_mat.rdp_settings.g_clipping = False +f3d_mat.rdp_settings.g_lighting_positional = True f3d_mat.rdp_settings.g_mdsft_alpha_dither = 'G_AD_NOISE' f3d_mat.rdp_settings.g_mdsft_rgb_dither = 'G_CD_MAGICSQ' f3d_mat.rdp_settings.g_mdsft_combkey = 'G_CK_NONE' @@ -3587,6 +3618,7 @@ f3d_mat.rdp_settings.g_lod = False f3d_mat.rdp_settings.g_shade_smooth = True f3d_mat.rdp_settings.g_clipping = False +f3d_mat.rdp_settings.g_lighting_positional = True f3d_mat.rdp_settings.g_mdsft_alpha_dither = 'G_AD_DISABLE' f3d_mat.rdp_settings.g_mdsft_rgb_dither = 'G_CD_MAGICSQ' f3d_mat.rdp_settings.g_mdsft_combkey = 'G_CK_NONE' @@ -3758,6 +3790,7 @@ f3d_mat.rdp_settings.g_lod = False f3d_mat.rdp_settings.g_shade_smooth = True f3d_mat.rdp_settings.g_clipping = False +f3d_mat.rdp_settings.g_lighting_positional = True f3d_mat.rdp_settings.g_mdsft_alpha_dither = 'G_AD_DISABLE' f3d_mat.rdp_settings.g_mdsft_rgb_dither = 'G_CD_MAGICSQ' f3d_mat.rdp_settings.g_mdsft_combkey = 'G_CK_NONE' @@ -3909,6 +3942,7 @@ f3d_mat.rdp_settings.g_lod = False f3d_mat.rdp_settings.g_shade_smooth = True f3d_mat.rdp_settings.g_clipping = False +f3d_mat.rdp_settings.g_lighting_positional = True f3d_mat.rdp_settings.g_mdsft_alpha_dither = 'G_AD_DISABLE' f3d_mat.rdp_settings.g_mdsft_rgb_dither = 'G_CD_MAGICSQ' f3d_mat.rdp_settings.g_mdsft_combkey = 'G_CK_NONE' @@ -4060,6 +4094,7 @@ f3d_mat.rdp_settings.g_lod = False f3d_mat.rdp_settings.g_shade_smooth = True f3d_mat.rdp_settings.g_clipping = False +f3d_mat.rdp_settings.g_lighting_positional = True f3d_mat.rdp_settings.g_mdsft_alpha_dither = 'G_AD_DISABLE' f3d_mat.rdp_settings.g_mdsft_rgb_dither = 'G_CD_MAGICSQ' f3d_mat.rdp_settings.g_mdsft_combkey = 'G_CK_NONE' @@ -4211,6 +4246,7 @@ f3d_mat.rdp_settings.g_lod = False f3d_mat.rdp_settings.g_shade_smooth = True f3d_mat.rdp_settings.g_clipping = False +f3d_mat.rdp_settings.g_lighting_positional = True f3d_mat.rdp_settings.g_mdsft_alpha_dither = 'G_AD_DISABLE' f3d_mat.rdp_settings.g_mdsft_rgb_dither = 'G_CD_MAGICSQ' f3d_mat.rdp_settings.g_mdsft_combkey = 'G_CK_NONE' @@ -4362,6 +4398,7 @@ f3d_mat.rdp_settings.g_lod = False f3d_mat.rdp_settings.g_shade_smooth = True f3d_mat.rdp_settings.g_clipping = False +f3d_mat.rdp_settings.g_lighting_positional = True f3d_mat.rdp_settings.g_mdsft_alpha_dither = 'G_AD_NOISE' f3d_mat.rdp_settings.g_mdsft_rgb_dither = 'G_CD_MAGICSQ' f3d_mat.rdp_settings.g_mdsft_combkey = 'G_CK_NONE' @@ -4494,6 +4531,7 @@ f3d_mat.rdp_settings.g_lod = False f3d_mat.rdp_settings.g_shade_smooth = True f3d_mat.rdp_settings.g_clipping = False +f3d_mat.rdp_settings.g_lighting_positional = True f3d_mat.rdp_settings.g_mdsft_alpha_dither = 'G_AD_NOISE' f3d_mat.rdp_settings.g_mdsft_rgb_dither = 'G_CD_MAGICSQ' f3d_mat.rdp_settings.g_mdsft_combkey = 'G_CK_NONE' @@ -4626,6 +4664,7 @@ f3d_mat.rdp_settings.g_lod = False f3d_mat.rdp_settings.g_shade_smooth = True f3d_mat.rdp_settings.g_clipping = False +f3d_mat.rdp_settings.g_lighting_positional = True f3d_mat.rdp_settings.g_mdsft_alpha_dither = 'G_AD_NOISE' f3d_mat.rdp_settings.g_mdsft_rgb_dither = 'G_CD_MAGICSQ' f3d_mat.rdp_settings.g_mdsft_combkey = 'G_CK_NONE' @@ -4758,6 +4797,7 @@ f3d_mat.rdp_settings.g_lod = False f3d_mat.rdp_settings.g_shade_smooth = True f3d_mat.rdp_settings.g_clipping = False +f3d_mat.rdp_settings.g_lighting_positional = True f3d_mat.rdp_settings.g_mdsft_alpha_dither = 'G_AD_NOISE' f3d_mat.rdp_settings.g_mdsft_rgb_dither = 'G_CD_MAGICSQ' f3d_mat.rdp_settings.g_mdsft_combkey = 'G_CK_NONE' @@ -4890,6 +4930,7 @@ f3d_mat.rdp_settings.g_lod = False f3d_mat.rdp_settings.g_shade_smooth = True f3d_mat.rdp_settings.g_clipping = False +f3d_mat.rdp_settings.g_lighting_positional = True f3d_mat.rdp_settings.g_mdsft_alpha_dither = 'G_AD_NOISE' f3d_mat.rdp_settings.g_mdsft_rgb_dither = 'G_CD_MAGICSQ' f3d_mat.rdp_settings.g_mdsft_combkey = 'G_CK_NONE' @@ -5022,6 +5063,7 @@ f3d_mat.rdp_settings.g_lod = False f3d_mat.rdp_settings.g_shade_smooth = True f3d_mat.rdp_settings.g_clipping = False +f3d_mat.rdp_settings.g_lighting_positional = True f3d_mat.rdp_settings.g_mdsft_alpha_dither = 'G_AD_NOISE' f3d_mat.rdp_settings.g_mdsft_rgb_dither = 'G_CD_MAGICSQ' f3d_mat.rdp_settings.g_mdsft_combkey = 'G_CK_NONE' @@ -5154,6 +5196,7 @@ f3d_mat.rdp_settings.g_lod = False f3d_mat.rdp_settings.g_shade_smooth = True f3d_mat.rdp_settings.g_clipping = False +f3d_mat.rdp_settings.g_lighting_positional = True f3d_mat.rdp_settings.g_mdsft_alpha_dither = 'G_AD_NOISE' f3d_mat.rdp_settings.g_mdsft_rgb_dither = 'G_CD_MAGICSQ' f3d_mat.rdp_settings.g_mdsft_combkey = 'G_CK_NONE' @@ -5286,6 +5329,7 @@ f3d_mat.rdp_settings.g_lod = False f3d_mat.rdp_settings.g_shade_smooth = True f3d_mat.rdp_settings.g_clipping = False +f3d_mat.rdp_settings.g_lighting_positional = True f3d_mat.rdp_settings.g_mdsft_alpha_dither = 'G_AD_NOISE' f3d_mat.rdp_settings.g_mdsft_rgb_dither = 'G_CD_MAGICSQ' f3d_mat.rdp_settings.g_mdsft_combkey = 'G_CK_NONE' @@ -5418,6 +5462,7 @@ f3d_mat.rdp_settings.g_lod = False f3d_mat.rdp_settings.g_shade_smooth = True f3d_mat.rdp_settings.g_clipping = False +f3d_mat.rdp_settings.g_lighting_positional = True f3d_mat.rdp_settings.g_mdsft_alpha_dither = 'G_AD_NOISE' f3d_mat.rdp_settings.g_mdsft_rgb_dither = 'G_CD_MAGICSQ' f3d_mat.rdp_settings.g_mdsft_combkey = 'G_CK_NONE' @@ -5550,6 +5595,7 @@ f3d_mat.rdp_settings.g_lod = False f3d_mat.rdp_settings.g_shade_smooth = True f3d_mat.rdp_settings.g_clipping = False +f3d_mat.rdp_settings.g_lighting_positional = True f3d_mat.rdp_settings.g_mdsft_alpha_dither = 'G_AD_NOISE' f3d_mat.rdp_settings.g_mdsft_rgb_dither = 'G_CD_MAGICSQ' f3d_mat.rdp_settings.g_mdsft_combkey = 'G_CK_NONE' @@ -5682,6 +5728,7 @@ f3d_mat.rdp_settings.g_lod = False f3d_mat.rdp_settings.g_shade_smooth = True f3d_mat.rdp_settings.g_clipping = False +f3d_mat.rdp_settings.g_lighting_positional = True f3d_mat.rdp_settings.g_mdsft_alpha_dither = 'G_AD_NOISE' f3d_mat.rdp_settings.g_mdsft_rgb_dither = 'G_CD_MAGICSQ' f3d_mat.rdp_settings.g_mdsft_combkey = 'G_CK_NONE' @@ -5814,6 +5861,7 @@ f3d_mat.rdp_settings.g_lod = False f3d_mat.rdp_settings.g_shade_smooth = True f3d_mat.rdp_settings.g_clipping = False +f3d_mat.rdp_settings.g_lighting_positional = True f3d_mat.rdp_settings.g_mdsft_alpha_dither = 'G_AD_NOISE' f3d_mat.rdp_settings.g_mdsft_rgb_dither = 'G_CD_MAGICSQ' f3d_mat.rdp_settings.g_mdsft_combkey = 'G_CK_NONE' @@ -5946,6 +5994,7 @@ f3d_mat.rdp_settings.g_lod = False f3d_mat.rdp_settings.g_shade_smooth = True f3d_mat.rdp_settings.g_clipping = False +f3d_mat.rdp_settings.g_lighting_positional = True f3d_mat.rdp_settings.g_mdsft_alpha_dither = 'G_AD_NOISE' f3d_mat.rdp_settings.g_mdsft_rgb_dither = 'G_CD_MAGICSQ' f3d_mat.rdp_settings.g_mdsft_combkey = 'G_CK_NONE' @@ -6078,6 +6127,7 @@ f3d_mat.rdp_settings.g_lod = False f3d_mat.rdp_settings.g_shade_smooth = True f3d_mat.rdp_settings.g_clipping = False +f3d_mat.rdp_settings.g_lighting_positional = True f3d_mat.rdp_settings.g_mdsft_alpha_dither = 'G_AD_NOISE' f3d_mat.rdp_settings.g_mdsft_rgb_dither = 'G_CD_MAGICSQ' f3d_mat.rdp_settings.g_mdsft_combkey = 'G_CK_NONE' @@ -6210,6 +6260,7 @@ f3d_mat.rdp_settings.g_lod = False f3d_mat.rdp_settings.g_shade_smooth = True f3d_mat.rdp_settings.g_clipping = False +f3d_mat.rdp_settings.g_lighting_positional = True f3d_mat.rdp_settings.g_mdsft_alpha_dither = 'G_AD_NOISE' f3d_mat.rdp_settings.g_mdsft_rgb_dither = 'G_CD_MAGICSQ' f3d_mat.rdp_settings.g_mdsft_combkey = 'G_CK_NONE' @@ -6342,6 +6393,7 @@ f3d_mat.rdp_settings.g_lod = False f3d_mat.rdp_settings.g_shade_smooth = True f3d_mat.rdp_settings.g_clipping = False +f3d_mat.rdp_settings.g_lighting_positional = True f3d_mat.rdp_settings.g_mdsft_alpha_dither = 'G_AD_NOISE' f3d_mat.rdp_settings.g_mdsft_rgb_dither = 'G_CD_MAGICSQ' f3d_mat.rdp_settings.g_mdsft_combkey = 'G_CK_NONE' diff --git a/fast64_internal/f3d/f3d_parser.py b/fast64_internal/f3d/f3d_parser.py index b91154916..9afc928bb 100644 --- a/fast64_internal/f3d/f3d_parser.py +++ b/fast64_internal/f3d/f3d_parser.py @@ -900,6 +900,9 @@ def setGeoFlags(self, command: "ParsedMacro", value: bool): rdp_settings.g_fresnel_color = value if bitFlags & self.f3d.G_FRESNEL_ALPHA: rdp_settings.g_fresnel_alpha = value + if self.f3d.POINT_LIT_GBI: + if bitFlags & self.f3d.G_LIGHTING_POSITIONAL: + rdp_settings.g_lighting_positional = value if bitFlags & self.f3d.G_FOG: rdp_settings.g_fog = value if bitFlags & self.f3d.G_LIGHTING: @@ -944,6 +947,10 @@ def loadGeoFlags(self, command: "ParsedMacro"): rdp_settings.g_lighting_specular = False rdp_settings.g_fresnel_color = False rdp_settings.g_fresnel_alpha = False + if self.f3d.POINT_LIT_GBI: + rdp_settings.g_lighting_positional = bitFlags & self.f3d.G_LIGHTING_POSITIONAL != 0 + else: + rdp_settings.g_lighting_positional = False rdp_settings.g_fog = bitFlags & self.f3d.G_FOG != 0 rdp_settings.g_lighting = bitFlags & self.f3d.G_LIGHTING != 0 rdp_settings.g_tex_gen = bitFlags & self.f3d.G_TEXTURE_GEN != 0 diff --git a/fast64_internal/f3d/f3d_writer.py b/fast64_internal/f3d/f3d_writer.py index c73a6e50d..7fa6842bf 100644 --- a/fast64_internal/f3d/f3d_writer.py +++ b/fast64_internal/f3d/f3d_writer.py @@ -1611,7 +1611,8 @@ def saveGeoModeCommon(saveFunc: Callable, settings: RDPSettings, defaults: RDPSe saveFunc(settings.g_shade, defaults.g_shade, "G_SHADE", *args) saveFunc(settings.g_cull_front, defaults.g_cull_front, "G_CULL_FRONT", *args) saveFunc(settings.g_cull_back, defaults.g_cull_back, "G_CULL_BACK", *args) - if bpy.context.scene.f3d_type == "F3DEX3": + f3d = get_F3D_GBI() + if f3d.F3DEX_GBI_3: saveFunc(settings.g_ambocclusion, defaults.g_ambocclusion, "G_AMBOCCLUSION", *args) saveFunc(settings.g_attroffset_z_enable, defaults.g_attroffset_z_enable, "G_ATTROFFSET_Z_ENABLE", *args) saveFunc(settings.g_attroffset_st_enable, defaults.g_attroffset_st_enable, "G_ATTROFFSET_ST_ENABLE", *args) @@ -1626,8 +1627,10 @@ def saveGeoModeCommon(saveFunc: Callable, settings: RDPSettings, defaults: RDPSe saveFunc(settings.g_tex_gen_linear, defaults.g_tex_gen_linear, "G_TEXTURE_GEN_LINEAR", *args) saveFunc(settings.g_lod, defaults.g_lod, "G_LOD", *args) saveFunc(settings.g_shade_smooth, defaults.g_shade_smooth, "G_SHADING_SMOOTH", *args) - if isUcodeF3DEX1(bpy.context.scene.f3d_type): + if f3d.F3DEX_GBI: saveFunc(settings.g_clipping, defaults.g_clipping, "G_CLIPPING", *args) + if f3d.POINT_LIT_GBI: + saveFunc(settings.g_lighting_positional, defaults.g_lighting_positional, "G_LIGHTING_POSITIONAL", *args) def saveGeoModeDefinitionF3DEX2(fMaterial, settings, defaults, matWriteMethod): diff --git a/fast64_internal/oot/oot_constants.py b/fast64_internal/oot/oot_constants.py index a0b33813c..e2e55f754 100644 --- a/fast64_internal/oot/oot_constants.py +++ b/fast64_internal/oot/oot_constants.py @@ -610,6 +610,7 @@ "cullBack": True, "lighting": True, "shadeSmooth": True, + "positionalLighting": True, }, "otherModeH": { "alphaDither": "G_AD_NOISE", diff --git a/fast64_internal/sm64/sm64_constants.py b/fast64_internal/sm64/sm64_constants.py index fd1893770..b56ae0185 100644 --- a/fast64_internal/sm64/sm64_constants.py +++ b/fast64_internal/sm64/sm64_constants.py @@ -2359,6 +2359,7 @@ def __init__(self, geoAddr, level, switchDict): "cullBack": True, "lighting": True, "shadeSmooth": True, + "positionalLighting": True, }, "otherModeH": { "textureFilter": "G_TF_BILERP", From 2b49d6d52bd69f2faca7068014b44d1c926af9b9 Mon Sep 17 00:00:00 2001 From: Lila Date: Wed, 9 Oct 2024 13:35:38 +0100 Subject: [PATCH 2/3] Noted issue Co-Authored-By: Dragorn421 --- fast64_internal/f3d/f3d_material.py | 2 +- fast64_internal/f3d/f3d_writer.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/fast64_internal/f3d/f3d_material.py b/fast64_internal/f3d/f3d_material.py index abe987bcb..abd64f250 100644 --- a/fast64_internal/f3d/f3d_material.py +++ b/fast64_internal/f3d/f3d_material.py @@ -573,7 +573,7 @@ def indentGroup(parent: UILayout, textOrProp: Union[str, "F3DMaterialProperty"], c = indentGroup(inputGroup, "Not useful:", True) c.prop(settings, "g_lod") - if f3d.F3DEX_GBI: + if f3d.F3DLP_GBI: c.prop(settings, "g_clipping") elif f3d.F3DEX_GBI_3: c.prop(settings, "g_lighting_positional", text="Positional Lighting (Always enabled in EX3)") diff --git a/fast64_internal/f3d/f3d_writer.py b/fast64_internal/f3d/f3d_writer.py index 7fa6842bf..fe9ee7eb9 100644 --- a/fast64_internal/f3d/f3d_writer.py +++ b/fast64_internal/f3d/f3d_writer.py @@ -1627,7 +1627,7 @@ def saveGeoModeCommon(saveFunc: Callable, settings: RDPSettings, defaults: RDPSe saveFunc(settings.g_tex_gen_linear, defaults.g_tex_gen_linear, "G_TEXTURE_GEN_LINEAR", *args) saveFunc(settings.g_lod, defaults.g_lod, "G_LOD", *args) saveFunc(settings.g_shade_smooth, defaults.g_shade_smooth, "G_SHADING_SMOOTH", *args) - if f3d.F3DEX_GBI: + if f3d.F3DLP_GBI: saveFunc(settings.g_clipping, defaults.g_clipping, "G_CLIPPING", *args) if f3d.POINT_LIT_GBI: saveFunc(settings.g_lighting_positional, defaults.g_lighting_positional, "G_LIGHTING_POSITIONAL", *args) From 5e9cc7a1d4da61459fd4770b91b47663bc9b3c9a Mon Sep 17 00:00:00 2001 From: Lila Date: Wed, 9 Oct 2024 13:55:13 +0100 Subject: [PATCH 3/3] Hopefully fix ucode being set --- __init__.py | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/__init__.py b/__init__.py index a918e6bdd..97ec5da0e 100644 --- a/__init__.py +++ b/__init__.py @@ -331,13 +331,17 @@ def upgrade_changed_props(): OOT_ObjectProperties.upgrade_changed_props() for scene in bpy.data.scenes: settings: Fast64Settings_Properties = scene.fast64.settings - if settings.internal_game_update_ver < 2: - set_game_defaults(scene, False) - settings.internal_game_update_ver = 2 + if scene.get("decomp_compatible", False): scene.gameEditorMode = "Homebrew" del scene["decomp_compatible"] + if settings.internal_game_update_ver == 0: # set world defaults, since we default to ucode defaults + set_game_defaults(scene, False) + if settings.internal_game_update_ver <= 1 and scene.gameEditorMode != "Homebrew" and scene.world is not None: + scene.world.rdp_defaults.g_lighting_positional = True # set lighting positional in old/new files + settings.internal_game_update_ver = 2 + settings = scene.fast64.renderSettings light0Color = settings.pop("lightColor", None) if light0Color is not None: