mirror of
https://github.com/zeldaret/oot
synced 2026-05-22 22:44:26 -04:00
Format extracted params: ObjSwitch (#2722)
* ObjSwitch params macros * format extracted ObjSwitch params
This commit is contained in:
@@ -26,13 +26,6 @@
|
||||
|
||||
#define FLAGS ACTOR_FLAG_UPDATE_CULLING_DISABLED
|
||||
|
||||
#define OBJSWITCH_TYPE(thisx) PARAMS_GET_U((thisx)->params, 0, 3)
|
||||
#define OBJSWITCH_SUBTYPE(thisx) PARAMS_GET_U((thisx)->params, 4, 3)
|
||||
#define OBJSWITCH_SWITCH_FLAG(thisx) PARAMS_GET_U((thisx)->params, 8, 6)
|
||||
#define OBJSWITCH_FROZEN(thisx) PARAMS_GET_U((thisx)->params, 7, 1)
|
||||
|
||||
#define OBJSWITCH_FROZEN_FLAG (1 << 7)
|
||||
|
||||
void ObjSwitch_Init(Actor* thisx, PlayState* play);
|
||||
void ObjSwitch_Destroy(Actor* thisx, PlayState* play);
|
||||
void ObjSwitch_Update(Actor* thisx, PlayState* play);
|
||||
|
||||
@@ -4,6 +4,18 @@
|
||||
#include "ultra64.h"
|
||||
#include "actor.h"
|
||||
|
||||
#define OBJSWITCH_TYPE(thisx) PARAMS_GET_U((thisx)->params, 0, 3)
|
||||
#define OBJSWITCH_SUBTYPE(thisx) PARAMS_GET_U((thisx)->params, 4, 3)
|
||||
#define OBJSWITCH_SWITCH_FLAG(thisx) PARAMS_GET_U((thisx)->params, 8, 6)
|
||||
#define OBJSWITCH_FROZEN(thisx) PARAMS_GET_U((thisx)->params, 7, 1)
|
||||
|
||||
#define OBJSWITCH_FROZEN_FLAG (1 << 7)
|
||||
|
||||
#define OBJSWITCH_PARAMS(type, subType, switchFlag) ((type) | ((subType) << 4) | ((switchFlag) << 8))
|
||||
// Same as OBJSWITCH_PARAMS but also sets two unused bits
|
||||
#define OBJSWITCH_PARAMS_ALT(type, subType, switchFlag) (OBJSWITCH_PARAMS(type, subType, switchFlag) | (0xC000))
|
||||
#define OBJSWITCH_PARAMS_EYE(subType, switchFlag, isFrozen) (OBJSWITCH_PARAMS(OBJSWITCH_TYPE_EYE, subType, switchFlag) | ((isFrozen) ? OBJSWITCH_FROZEN_FLAG : 0))
|
||||
|
||||
struct ObjSwitch;
|
||||
|
||||
typedef void (*ObjSwitchActionFunc)(struct ObjSwitch*, struct PlayState*);
|
||||
|
||||
@@ -27,11 +27,15 @@ def params_en_door(params: int):
|
||||
elif type_name == "DOOR_CHECKABLE":
|
||||
unused_mask &= ~0b0011_1111
|
||||
textIdMinux0x0200 = bits(params, 0, 6)
|
||||
params_str = f"ENDOOR_PARAMS_CHECKABLE({cbool(isDoubleDoor)}, {textIdMinux0x0200})"
|
||||
params_str = (
|
||||
f"ENDOOR_PARAMS_CHECKABLE({cbool(isDoubleDoor)}, {textIdMinux0x0200})"
|
||||
)
|
||||
elif type_name == "DOOR_EVENING":
|
||||
unused_mask &= ~0b0011_1111
|
||||
textIdMinux0x0200 = bits(params, 0, 6)
|
||||
params_str = f"ENDOOR_PARAMS_EVENING({cbool(isDoubleDoor)}, {textIdMinux0x0200})"
|
||||
params_str = (
|
||||
f"ENDOOR_PARAMS_EVENING({cbool(isDoubleDoor)}, {textIdMinux0x0200})"
|
||||
)
|
||||
else:
|
||||
unused_mask &= ~0b0011_1111
|
||||
data = bits(params, 0, 6)
|
||||
@@ -41,10 +45,49 @@ def params_en_door(params: int):
|
||||
return params_str
|
||||
|
||||
|
||||
def params_obj_switch(params: int):
|
||||
unused_mask = 0b0000_0000_1000_1000
|
||||
type = bits(params, 0, 3)
|
||||
subType = bits(params, 4, 3)
|
||||
switchFlag = bits(params, 8, 6)
|
||||
unused_bits = bits(params, 14, 2)
|
||||
type_name = [
|
||||
"OBJSWITCH_TYPE_FLOOR",
|
||||
"OBJSWITCH_TYPE_FLOOR_RUSTY",
|
||||
"OBJSWITCH_TYPE_EYE",
|
||||
"OBJSWITCH_TYPE_CRYSTAL",
|
||||
"OBJSWITCH_TYPE_CRYSTAL_TARGETABLE",
|
||||
][type]
|
||||
subType_name = [
|
||||
"OBJSWITCH_SUBTYPE_ONCE",
|
||||
"OBJSWITCH_SUBTYPE_TOGGLE",
|
||||
"OBJSWITCH_SUBTYPE_HOLD",
|
||||
"OBJSWITCH_SUBTYPE_HOLD_INVERTED",
|
||||
"OBJSWITCH_SUBTYPE_SYNC",
|
||||
][subType]
|
||||
if type_name == "OBJSWITCH_TYPE_EYE":
|
||||
unused_mask &= ~0b1000_0000
|
||||
isFrozen = bits(params, 7, 1) != 0
|
||||
assert unused_bits == 0
|
||||
params_str = (
|
||||
f"OBJSWITCH_PARAMS_EYE({subType_name}, {switchFlag}, {cbool(isFrozen)})"
|
||||
)
|
||||
else:
|
||||
macro_name = {
|
||||
0b00: "OBJSWITCH_PARAMS",
|
||||
0b11: "OBJSWITCH_PARAMS_ALT",
|
||||
}[unused_bits]
|
||||
params_str = f"{macro_name}({type_name}, {subType_name}, {switchFlag})"
|
||||
assert (params & unused_mask) == 0, (f"{params:#06X}", params_str)
|
||||
return params_str
|
||||
|
||||
|
||||
PARAMS_FMT = {
|
||||
"ACTOR_EN_DOOR": params_en_door,
|
||||
"ACTOR_OBJ_SWITCH": params_obj_switch,
|
||||
}
|
||||
|
||||
INCLUDES = {
|
||||
"ACTOR_EN_DOOR": ["src/overlays/actors/ovl_En_Door/z_en_door.h"],
|
||||
"ACTOR_OBJ_SWITCH": ["src/overlays/actors/ovl_Obj_Switch/z_obj_switch.h"],
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user