Skip to content

Commit

Permalink
[SM64] fix Whirlpool Object export for decomp/ultrasm64
Browse files Browse the repository at this point in the history
  • Loading branch information
s4Ys369 committed Sep 12, 2024
1 parent 84c650e commit 6f08c20
Show file tree
Hide file tree
Showing 2 changed files with 50 additions and 14 deletions.
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
56 changes: 42 additions & 14 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,9 +853,10 @@ 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":
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_Whirpool(obj.whirlpool_index, obj.whirpool_condition, obj.whirpool_strength, translation)
SM64_Whirlpool(obj.whirlpool_index, condition, obj.whirlpool_strength, translation)
)
elif obj.sm64_obj_type == "Camera Volume":
checkIdentityRotation(obj, rotation.to_quaternion(), True)
Expand Down Expand Up @@ -1049,6 +1051,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 +1243,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 +2832,7 @@ def upgrade_changed_props():
SearchBehaviourEnumOperator,
SearchSpecialEnumOperator,
SearchMacroEnumOperator,
SearchWhirlpoolEnumOperator,
StarGetCutscenesProperty,
PuppycamProperty,
PuppycamSetupCamera,
Expand Down Expand Up @@ -2878,9 +2905,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")

bpy.types.Object.waterBoxType = bpy.props.EnumProperty(
name="Water Box Type", items=enumWaterBoxType, default="Water"
)
Expand Down Expand Up @@ -3016,6 +3044,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 +3056,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

0 comments on commit 6f08c20

Please sign in to comment.