Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[SM64] fix Whirlpool Object export for decomp/ultrasm64 #456

Open
wants to merge 3 commits into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from 2 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 8 additions & 0 deletions fast64_internal/sm64/sm64_constants.py
Original file line number Diff line number Diff line change
Expand Up @@ -1762,6 +1762,14 @@ def __init__(self, geoAddr, level, switchDict):
("macro_yellow_coin_2", "Yellow Coin 2", "Yellow Coin 2"),
]

enumWhirlpoolConditions = [
("Custom", "Custom", "Custom"),
("0", "Always on", "Always on"),
("1", "Pre Bowser 2", "Checks if Key 2 has not been collected"),
("2", "Post Bowser 2", "Checks if Key 2 has been collected and used"),
("3", "Not Act 1", "Only spawns if the current act >= 2"),
]

enumBehaviorMacros = [
("Custom", "Custom", ""),
("BEGIN", "BEGIN", "Starts the behavior, places it in a specific group"),
Expand Down
58 changes: 42 additions & 16 deletions fast64_internal/sm64/sm64_objects.py
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,7 @@
enumLevelNames,
enumModelIDs,
enumMacrosNames,
enumWhirlpoolConditions,
enumSpecialsNames,
enumBehaviourPresets,
enumBehaviorMacros,
Expand Down Expand Up @@ -136,7 +137,7 @@
("ENVFX_SNOW_BLIZZARD", "Blizzard", "Unused"),
("ENVFX_FLOWERS", "Flowers", "Unused"),
("ENVFX_LAVA_BUBBLES", "Lava Bubbles", "Used in LLL, BitFS, Bowser 2"),
("ENVFX_WHIRLPOOL_BUBBLES", "Whirpool Bubbles", "Used in DDD where whirpool is"),
("ENVFX_WHIRLPOOL_BUBBLES", "Whirlpool Bubbles", "Used in DDD where whirlpool is"),
("ENVFX_JETSTREAM_BUBBLES", "Jetstream Bubbles", "Used in JRB, DDD where jetstream is"),
]

Expand Down Expand Up @@ -341,7 +342,7 @@ def to_c(self):
)


class SM64_Whirpool:
class SM64_Whirlpool:
def __init__(self, index, condition, strength, position):
self.index = index
self.condition = condition
Expand All @@ -351,7 +352,7 @@ def __init__(self, index, condition, strength, position):

def to_c(self):
return (
"WHIRPOOL("
"WHIRLPOOL("
+ str(self.index)
+ ", "
+ str(self.condition)
Expand Down Expand Up @@ -852,10 +853,9 @@ def process_sm64_objects(obj, area, rootMatrix, transformMatrix, specialsOnly):
area.mario_start = mario_start
elif obj.sm64_obj_type == "Trajectory":
pass
elif obj.sm64_obj_type == "Whirpool":
area.objects.append(
SM64_Whirpool(obj.whirlpool_index, obj.whirpool_condition, obj.whirpool_strength, translation)
)
elif obj.sm64_obj_type == "Whirlpool":
condition = obj.sm64_whirlpool_enum if obj.sm64_whirlpool_enum != "Custom" else obj.sm64_obj_preset
area.objects.append(SM64_Whirlpool(obj.whirlpool_index, condition, obj.whirlpool_strength, translation))
elif obj.sm64_obj_type == "Camera Volume":
checkIdentityRotation(obj, rotation.to_quaternion(), True)
if obj.cameraVolumeGlobal:
Expand Down Expand Up @@ -1049,6 +1049,25 @@ def invoke(self, context, event):
return {"RUNNING_MODAL"}


class SearchWhirlpoolEnumOperator(bpy.types.Operator):
bl_idname = "object.search_whirlpool_enum_operator"
bl_label = "Search Whirlpool Conditions"
bl_property = "sm64_whirlpool_enum"
bl_options = {"REGISTER", "UNDO"}

sm64_whirlpool_enum: bpy.props.EnumProperty(items=enumWhirlpoolConditions)

def execute(self, context):
context.object.sm64_whirlpool_enum = self.sm64_whirlpool_enum
bpy.context.region.tag_redraw()
self.report({"INFO"}, "Selected: " + self.sm64_whirlpool_enum)
return {"FINISHED"}

def invoke(self, context, event):
context.window_manager.invoke_search_popup(self)
return {"RUNNING_MODAL"}


class SearchSpecialEnumOperator(bpy.types.Operator):
bl_idname = "object.search_special_enum_operator"
bl_label = "Search Specials"
Expand Down Expand Up @@ -1222,9 +1241,14 @@ def draw(self, context):
pass

elif obj.sm64_obj_type == "Whirlpool":
prop_split(box, obj, "whirpool_index", "Index")
prop_split(box, obj, "whirpool_condition", "Condition")
prop_split(box, obj, "whirpool_strength", "Strength")
prop_split(box, obj, "sm64_whirlpool_enum", "Condition")
if obj.sm64_whirlpool_enum == "Custom":
prop_split(box, obj, "sm64_obj_preset", "Condition Name")
box.operator(SearchWhirlpoolEnumOperator.bl_idname, icon="VIEWZOOM")
box.box().label(text="Whirlpool conditions defined in include/level_commands.h.")
prop_split(box, obj, "whirlpool_index", "Index")
prop_split(box, obj, "whirlpool_strength", "Strength")
box.box().label(text="Negative strength pushs, positive strength pulls.")
pass

elif obj.sm64_obj_type == "Water Box":
Expand Down Expand Up @@ -2806,6 +2830,7 @@ def upgrade_changed_props():
SearchBehaviourEnumOperator,
SearchSpecialEnumOperator,
SearchMacroEnumOperator,
SearchWhirlpoolEnumOperator,
StarGetCutscenesProperty,
PuppycamProperty,
PuppycamSetupCamera,
Expand Down Expand Up @@ -2878,9 +2903,10 @@ def sm64_obj_register():

bpy.types.Object.sm64_obj_mario_start_area = bpy.props.StringProperty(name="Area", default="0x01")

bpy.types.Object.whirpool_index = bpy.props.StringProperty(name="Index", default="0")
bpy.types.Object.whirpool_condition = bpy.props.StringProperty(name="Condition", default="3")
bpy.types.Object.whirpool_strength = bpy.props.StringProperty(name="Strength", default="-30")
bpy.types.Object.whirlpool_index = bpy.props.StringProperty(name="Index", default="0")
bpy.types.Object.sm64_whirlpool_enum = bpy.props.EnumProperty(name="Condition", items=enumWhirlpoolConditions)
bpy.types.Object.whirlpool_strength = bpy.props.StringProperty(name="Strength", default="20")
Comment on lines +2885 to +2887
Copy link
Collaborator

@Lilaa3 Lilaa3 Sep 12, 2024

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

New props should be in their respective property groups, in this case these properties would be in ̶S̶M̶6̶4̶_̶G̶a̶m̶e̶O̶b̶j̶e̶c̶t̶P̶r̶o̶p̶e̶r̶t̶i̶e̶s̶ actually maybe it should be a prop group in SM64_ObjectProperties? techinically whirlpools are objects lol


bpy.types.Object.waterBoxType = bpy.props.EnumProperty(
name="Water Box Type", items=enumWaterBoxType, default="Water"
)
Expand Down Expand Up @@ -3016,6 +3042,7 @@ def sm64_obj_unregister():
del bpy.types.Object.sm64_macro_enum
del bpy.types.Object.sm64_special_enum
del bpy.types.Object.sm64_behaviour_enum
del bpy.types.Object.sm64_whirlpool_enum

# del bpy.types.Object.sm64_model
# del bpy.types.Object.sm64_macro
Expand All @@ -3027,9 +3054,8 @@ def sm64_obj_unregister():
del bpy.types.Object.sm64_obj_preset
del bpy.types.Object.sm64_obj_behaviour

del bpy.types.Object.whirpool_index
del bpy.types.Object.whirpool_condition
del bpy.types.Object.whirpool_strength
del bpy.types.Object.whirlpool_index
del bpy.types.Object.whirlpool_strength

del bpy.types.Object.waterBoxType

Expand Down
Loading