add enum for transition shape

This commit is contained in:
Henny022p 2025-03-03 15:39:15 +00:00
parent e62e1d01cd
commit b5eab6fc2b
3 changed files with 787 additions and 766 deletions

View File

@ -28,6 +28,26 @@ typedef enum {
TRANSITION_TYPE_FLY_IN, TRANSITION_TYPE_FLY_IN,
} TransitionType; } TransitionType;
typedef enum {
TRANSITION_SHAPE_AREA_12x12,
TRANSITION_SHAPE_AREA_12x28,
TRANSITION_SHAPE_AREA_28x12,
TRANSITION_SHAPE_AREA_44x12,
TRANSITION_SHAPE_BORDER_NORTH_WEST = 0x01,
TRANSITION_SHAPE_BORDER_NORTH_EAST = 0x02,
TRANSITION_SHAPE_BORDER_NORTH = 0x03,
TRANSITION_SHAPE_BORDER_EAST_NORTH = 0x04,
TRANSITION_SHAPE_BORDER_EAST_SOUTH = 0x08,
TRANSITION_SHAPE_BORDER_EAST = 0x0c,
TRANSITION_SHAPE_BORDER_SOUTH_WEST = 0x10,
TRANSITION_SHAPE_BORDER_SOUTH_EAST = 0x20,
TRANSITION_SHAPE_BORDER_SOUTH = 0x30,
TRANSITION_SHAPE_BORDER_WEST_NORTH = 0x40,
TRANSITION_SHAPE_BORDER_WEST_SOUTH = 0x80,
TRANSITION_SHAPE_BORDER_WEST = 0xc0,
} TransitionShape;
typedef struct Transition { typedef struct Transition {
u16 warp_type; /**< @see WarpType */ u16 warp_type; /**< @see WarpType */
u16 startX; u16 startX;

File diff suppressed because it is too large Load Diff

View File

@ -55,8 +55,8 @@ u32 sub_08080278();
void sub_08080C80(MapDataDefinition*); void sub_08080C80(MapDataDefinition*);
void sub_08080368(); void sub_08080368();
void FillActTileForLayer(MapLayer* mapLayer); void FillActTileForLayer(MapLayer* mapLayer);
bool32 IsPosInBorderTransitionRegion(const Transition* transition, u32 param_2, u32 param_3, u32 direction); bool32 IsPosInBorderTransitionRegion(const Transition* transition, u32 param_2, u32 param_3, u32 facing_direction);
bool32 IsPosInTransitionRect(const Transition* transition, u32 param_2, u32 param_3, u32 unused); bool32 IsPosInTransitionRect(const Transition* transition, u32 param_2, u32 param_3, u32 facing_direction);
void sub_080808D8(s32); void sub_080808D8(s32);
void sub_080808E4(s32); void sub_080808E4(s32);
void sub_08080904(s32); void sub_08080904(s32);
@ -616,7 +616,8 @@ const Transition* sub_08080734(u32 param_1, u32 param_2) {
const Transition* transition = gArea.pCurrentRoomInfo->exits; const Transition* transition = gArea.pCurrentRoomInfo->exits;
u32 warp_types = 0xa; u32 warp_types = 0xa;
while (transition->warp_type != WARP_TYPE_END_OF_LIST) { while (transition->warp_type != WARP_TYPE_END_OF_LIST) {
if (((1 << transition->warp_type) & warp_types) != 0 && IsPosInTransitionRect(transition, param_1, param_2, 0)) { if (((1 << transition->warp_type) & warp_types) != 0 &&
IsPosInTransitionRect(transition, param_1, param_2, 0)) {
return transition; return transition;
} }
transition++; transition++;
@ -624,38 +625,38 @@ const Transition* sub_08080734(u32 param_1, u32 param_2) {
return NULL; return NULL;
} }
bool32 IsPosInBorderTransitionRegion(const Transition* transition, u32 pos_x, u32 pos_y, u32 direction) { bool32 IsPosInBorderTransitionRegion(const Transition* transition, u32 pos_x, u32 pos_y, u32 facing_direction) {
u32 shapeBitmask; u32 shapeBitmask;
switch (direction) { switch (facing_direction) {
default: default:
return 0; return FALSE;
case 0: case 0:
if (gRoomControls.width / 2 < pos_x) { if (gRoomControls.width / 2 < pos_x) {
shapeBitmask = 2; shapeBitmask = TRANSITION_SHAPE_BORDER_NORTH_EAST;
} else { } else {
shapeBitmask = 1; shapeBitmask = TRANSITION_SHAPE_BORDER_NORTH_WEST;
} }
break; break;
case 1: case 1:
if (gRoomControls.height / 2 < pos_y) { if (gRoomControls.height / 2 < pos_y) {
shapeBitmask = 8; shapeBitmask = TRANSITION_SHAPE_BORDER_EAST_SOUTH;
} else { } else {
shapeBitmask = 4; shapeBitmask = TRANSITION_SHAPE_BORDER_EAST_NORTH;
} }
break; break;
case 2: case 2:
if (gRoomControls.width / 2 < pos_x) { if (gRoomControls.width / 2 < pos_x) {
shapeBitmask = 0x20; shapeBitmask = TRANSITION_SHAPE_BORDER_SOUTH_EAST;
} else { } else {
shapeBitmask = 0x10; shapeBitmask = TRANSITION_SHAPE_BORDER_SOUTH_WEST;
} }
break; break;
case 3: case 3:
if (gRoomControls.height / 2 < pos_y) { if (gRoomControls.height / 2 < pos_y) {
shapeBitmask = 0x80; shapeBitmask = TRANSITION_SHAPE_BORDER_WEST_SOUTH;
} else { } else {
shapeBitmask = 0x40; shapeBitmask = TRANSITION_SHAPE_BORDER_WEST_NORTH;
} }
break; break;
} }
@ -666,7 +667,7 @@ bool32 IsPosInBorderTransitionRegion(const Transition* transition, u32 pos_x, u3
return FALSE; return FALSE;
} }
bool32 IsPosInTransitionRect(const Transition* transition, u32 pos_x, u32 pos_y, u32 unused) { bool32 IsPosInTransitionRect(const Transition* transition, u32 pos_x, u32 pos_y, u32 facing_direction) {
static const u8 gShapeDimensions[] = { 6, 6, 6, 14, 14, 6, 22, 6 }; static const u8 gShapeDimensions[] = { 6, 6, 6, 14, 14, 6, 22, 6 };
const u8* shape; const u8* shape;
u32 shape_x; u32 shape_x;