summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/overlays/actors/ovl_En_Ru1/z_en_ru1.c228
-rw-r--r--src/overlays/actors/ovl_En_Ru1/z_en_ru1.h16
2 files changed, 127 insertions, 117 deletions
diff --git a/src/overlays/actors/ovl_En_Ru1/z_en_ru1.c b/src/overlays/actors/ovl_En_Ru1/z_en_ru1.c
index 07c80bbf7..8ce2e814a 100644
--- a/src/overlays/actors/ovl_En_Ru1/z_en_ru1.c
+++ b/src/overlays/actors/ovl_En_Ru1/z_en_ru1.c
@@ -52,13 +52,13 @@ void EnRu1_Meeting_WalkingAwayAccel(EnRu1* this, PlayState* play);
void EnRu1_Meeting_WalkingAwayConstant(EnRu1* this, PlayState* play);
void EnRu1_Meeting_FallingDownHole(EnRu1* this, PlayState* play);
void EnRu1_Meeting_End(EnRu1* this, PlayState* play);
-void func_80AED304(EnRu1* this, PlayState* play);
-void func_80AED324(EnRu1* this, PlayState* play);
-void func_80AED344(EnRu1* this, PlayState* play);
-void func_80AED374(EnRu1* this, PlayState* play);
-void func_80AED3A4(EnRu1* this, PlayState* play);
-void func_80AED3E0(EnRu1* this, PlayState* play);
-void func_80AED414(EnRu1* this, PlayState* play);
+void EnRu1_BossRoom_PreSpawn(EnRu1* this, PlayState* play);
+void EnRu1_BossRoom_Spawn(EnRu1* this, PlayState* play);
+void EnRu1_BossRoom_RiseThroughBlueWarp(EnRu1* this, PlayState* play);
+void EnRu1_BossRoom_WaitInsideBlueWarp(EnRu1* this, PlayState* play);
+void EnRu1_BossRoom_LinkWalksToPointInBlueWarp(EnRu1* this, PlayState* play);
+void EnRu1_BossRoom_WhatTookYouSoLong(EnRu1* this, PlayState* play);
+void EnRu1_BossRoom_WarpingOut(EnRu1* this, PlayState* play);
void func_80AEF29C(EnRu1* this, PlayState* play);
void func_80AEF2AC(EnRu1* this, PlayState* play);
void func_80AEF2D0(EnRu1* this, PlayState* play);
@@ -146,52 +146,52 @@ static s32 sUnused = 0;
static u32 D_80AF1938 = 0;
static EnRu1ActionFunc sActionFuncs[] = {
- EnRu1_Fountain_GazingAtLink, // ENRU1_ACTION_FOUNTAIN_GAZING_AT_LINK
- EnRu1_Fountain_Diving, // ENRU1_ACTION_FOUNTAIN_DIVING
- EnRu1_Fountain_Resurfacing, // ENRU1_ACTION_FOUNTAIN_RESURFACING
- EnRu1_Fountain_TreadingWater, // ENRU1_ACTION_FOUNTAIN_TREADING_WATER
- EnRu1_Fountain_StartingSwimBack, // ENRU1_ACTION_FOUNTAIN_STARTING_SWIM_BACK
- EnRu1_Fountain_SwimmingBack, // ENRU1_ACTION_FOUNTAIN_SWIMMING_BACK
- EnRu1_Fountain_FinishingSwimBack, // ENRU1_ACTION_FOUNTAIN_FINISHING_SWIM_BACK
- EnRu1_Meeting_RangeCheck, // ENRU1_ACTION_MEETING_RANGE_CHECK
- EnRu1_Meeting_InitPosition, // ENRU1_ACTION_MEETING_INIT_POSITION
- EnRu1_Meeting_FacingLink, // ENRU1_ACTION_MEETING_FACING_LINK
- EnRu1_Meeting_TurningAround, // ENRU1_ACTION_MEETING_TURNING_AROUND
- EnRu1_Meeting_WalkingAwayAccel, // ENRU1_ACTION_MEETING_WALKING_AWAY_ACCEL
- EnRu1_Meeting_WalkingAwayConstant, // ENRU1_ACTION_MEETING_WALKING_AWAY_CONSTANT
- EnRu1_Meeting_FallingDownHole, // ENRU1_ACTION_MEETING_FALLING_DOWN_HOLE
- EnRu1_Meeting_End, // ENRU1_ACTION_MEETING_END
- func_80AED304, // ENRU1_ACTION_15
- func_80AED324, // ENRU1_ACTION_16
- func_80AED344, // ENRU1_ACTION_17
- func_80AED374, // ENRU1_ACTION_18
- func_80AED3A4, // ENRU1_ACTION_19
- func_80AED3E0, // ENRU1_ACTION_20
- func_80AED414, // ENRU1_ACTION_21
- func_80AEF29C, // ENRU1_ACTION_22
- func_80AEF2AC, // ENRU1_ACTION_23
- func_80AEF2D0, // ENRU1_ACTION_24
- func_80AEF354, // ENRU1_ACTION_25
- func_80AEF3A8, // ENRU1_ACTION_26
- func_80AEEBD4, // ENRU1_ACTION_27
- func_80AEEC5C, // ENRU1_ACTION_28
- func_80AEECF0, // ENRU1_ACTION_29
- func_80AEED58, // ENRU1_ACTION_30
- func_80AEEDCC, // ENRU1_ACTION_31
- func_80AEEE34, // ENRU1_ACTION_32
- func_80AEEE9C, // ENRU1_ACTION_33
- func_80AEEF08, // ENRU1_ACTION_34
- func_80AEEF5C, // ENRU1_ACTION_35
- func_80AEF9D8, // ENRU1_ACTION_36
- func_80AEFA2C, // ENRU1_ACTION_37
- func_80AEFAAC, // ENRU1_ACTION_38
- func_80AEFB04, // ENRU1_ACTION_39
- func_80AEFB68, // ENRU1_ACTION_40
- func_80AEFCE8, // ENRU1_ACTION_41
- func_80AEFBC8, // ENRU1_ACTION_42
- func_80AEFC24, // ENRU1_ACTION_43
- func_80AEFECC, // ENRU1_ACTION_44
- func_80AEFF40, // ENRU1_ACTION_45
+ EnRu1_Fountain_GazingAtLink, // ENRU1_ACTION_FOUNTAIN_GAZING_AT_LINK
+ EnRu1_Fountain_Diving, // ENRU1_ACTION_FOUNTAIN_DIVING
+ EnRu1_Fountain_Resurfacing, // ENRU1_ACTION_FOUNTAIN_RESURFACING
+ EnRu1_Fountain_TreadingWater, // ENRU1_ACTION_FOUNTAIN_TREADING_WATER
+ EnRu1_Fountain_StartingSwimBack, // ENRU1_ACTION_FOUNTAIN_STARTING_SWIM_BACK
+ EnRu1_Fountain_SwimmingBack, // ENRU1_ACTION_FOUNTAIN_SWIMMING_BACK
+ EnRu1_Fountain_FinishingSwimBack, // ENRU1_ACTION_FOUNTAIN_FINISHING_SWIM_BACK
+ EnRu1_Meeting_RangeCheck, // ENRU1_ACTION_MEETING_RANGE_CHECK
+ EnRu1_Meeting_InitPosition, // ENRU1_ACTION_MEETING_INIT_POSITION
+ EnRu1_Meeting_FacingLink, // ENRU1_ACTION_MEETING_FACING_LINK
+ EnRu1_Meeting_TurningAround, // ENRU1_ACTION_MEETING_TURNING_AROUND
+ EnRu1_Meeting_WalkingAwayAccel, // ENRU1_ACTION_MEETING_WALKING_AWAY_ACCEL
+ EnRu1_Meeting_WalkingAwayConstant, // ENRU1_ACTION_MEETING_WALKING_AWAY_CONSTANT
+ EnRu1_Meeting_FallingDownHole, // ENRU1_ACTION_MEETING_FALLING_DOWN_HOLE
+ EnRu1_Meeting_End, // ENRU1_ACTION_MEETING_END
+ EnRu1_BossRoom_PreSpawn, // ENRU1_ACTION_PRE_SPAWN_BOSS_ROOM
+ EnRu1_BossRoom_Spawn, // ENRU1_ACTION_SPAWN_BOSS_ROOM
+ EnRu1_BossRoom_RiseThroughBlueWarp, // ENRU1_ACTION_RISE_THROUGH_BLUE_WARP
+ EnRu1_BossRoom_WaitInsideBlueWarp, // ENRU1_ACTION_WAIT_INSIDE_BLUE_WARP
+ EnRu1_BossRoom_LinkWalksToPointInBlueWarp, // ENRU1_ACTION_LINK_WALKS_TO_POINT_IN_BLUE_WARP
+ EnRu1_BossRoom_WhatTookYouSoLong, // ENRU1_ACTION_WHAT_TOOK_YOU_SO_LONG
+ EnRu1_BossRoom_WarpingOut, // ENRU1_ACTION_WARPING_OUT
+ func_80AEF29C, // ENRU1_ACTION_22
+ func_80AEF2AC, // ENRU1_ACTION_23
+ func_80AEF2D0, // ENRU1_ACTION_24
+ func_80AEF354, // ENRU1_ACTION_25
+ func_80AEF3A8, // ENRU1_ACTION_26
+ func_80AEEBD4, // ENRU1_ACTION_27
+ func_80AEEC5C, // ENRU1_ACTION_28
+ func_80AEECF0, // ENRU1_ACTION_29
+ func_80AEED58, // ENRU1_ACTION_30
+ func_80AEEDCC, // ENRU1_ACTION_31
+ func_80AEEE34, // ENRU1_ACTION_32
+ func_80AEEE9C, // ENRU1_ACTION_33
+ func_80AEEF08, // ENRU1_ACTION_34
+ func_80AEEF5C, // ENRU1_ACTION_35
+ func_80AEF9D8, // ENRU1_ACTION_36
+ func_80AEFA2C, // ENRU1_ACTION_37
+ func_80AEFAAC, // ENRU1_ACTION_38
+ func_80AEFB04, // ENRU1_ACTION_39
+ func_80AEFB68, // ENRU1_ACTION_40
+ func_80AEFCE8, // ENRU1_ACTION_41
+ func_80AEFBC8, // ENRU1_ACTION_42
+ func_80AEFC24, // ENRU1_ACTION_43
+ func_80AEFECC, // ENRU1_ACTION_44
+ func_80AEFF40, // ENRU1_ACTION_45
};
static EnRu1PreLimbDrawFunc sPreLimbDrawFuncs[] = {
@@ -1083,7 +1083,7 @@ void EnRu1_Meeting_End(EnRu1* this, PlayState* play) {
}
}
-void func_80AECCB0(EnRu1* this, PlayState* play) {
+void EnRu1_SpawnBlueWarp(EnRu1* this, PlayState* play) {
s32 pad;
Vec3f* pos;
s16 yawTowardsPlayer;
@@ -1103,31 +1103,37 @@ void func_80AECCB0(EnRu1* this, PlayState* play) {
void EnRu1_InitInBossRoom(EnRu1* this, PlayState* play) {
EnRu1_AnimationChange(this, &gRutoChildWaitHandsOnHipsAnim, ANIMMODE_LOOP, 0, false);
- this->action = ENRU1_ACTION_15;
+ this->action = ENRU1_ACTION_PRE_SPAWN_BOSS_ROOM;
this->actor.shape.yOffset = -10000.0f;
EnRu1_SetEyes(this, ENRU1_EYES_BLUSH);
EnRu1_SetMouth(this, ENRU1_MOUTH_OPEN);
}
-void func_80AECE04(EnRu1* this, PlayState* play) {
+/**
+ * Ruto rises up through the floor within the field of the blue warp.
+ */
+void EnRu1_Rise(EnRu1* this, PlayState* play) {
this->actor.shape.yOffset += (250.0f / 3.0f);
}
-void func_80AECE20(EnRu1* this, PlayState* play) {
+/**
+ * Ruto rises up in sync with Link as they warp out together.
+ */
+void EnRu1_RiseWithLink(EnRu1* this, PlayState* play) {
s32 pad2;
Player* player = GET_PLAYER(play);
Vec3f* playerPos = &player->actor.world.pos;
s16 shapeRotY = player->actor.shape.rot.y;
s32 pad;
- f32 unk_27C = this->unk_27C;
+ f32 xzDistToPlayer = this->xzDistToPlayerInBlueWarp;
Vec3f* pos = &this->actor.world.pos;
- pos->x = (Math_SinS(shapeRotY) * unk_27C) + playerPos->x;
+ pos->x = (Math_SinS(shapeRotY) * xzDistToPlayer) + playerPos->x;
pos->y = playerPos->y;
- pos->z = (Math_CosS(shapeRotY) * unk_27C) + playerPos->z;
+ pos->z = (Math_CosS(shapeRotY) * xzDistToPlayer) + playerPos->z;
}
-void func_80AECEB4(EnRu1* this, PlayState* play) {
+void EnRu1_SetPlayerMarkInBlueWarp(EnRu1* this, PlayState* play) {
s32 pad;
Player* player = GET_PLAYER(play);
Vec3f* player_unk_450 = &player->unk_450;
@@ -1138,13 +1144,17 @@ void func_80AECEB4(EnRu1* this, PlayState* play) {
player_unk_450->z = ((kREG(2) + 30.0f) * Math_CosS(shapeRotY)) + pos->z;
}
-s32 func_80AECF6C(EnRu1* this, PlayState* play) {
+/**
+ * Checks if Link is in position inside the blue warp, facing Ruto.
+ * This is the condition for when Ruto starts chiding him.
+ */
+s32 EnRu1_IsLinkInBlueWarp(EnRu1* this, PlayState* play) {
s16* shapeRotY;
Player* player = GET_PLAYER(play);
Player* otherPlayer;
- s16 temp_f16;
- f32 temp1;
- f32 temp2;
+ s16 targetRotY;
+ f32 dx;
+ f32 dz;
s32 pad2[5];
this->walkingFrame += 1.0f;
@@ -1154,11 +1164,11 @@ s32 func_80AECF6C(EnRu1* this, PlayState* play) {
player->actor.world.pos.y = otherPlayer->unk_450.y;
player->actor.world.pos.z = otherPlayer->unk_450.z;
shapeRotY = &player->actor.shape.rot.y;
- temp1 = this->actor.world.pos.x - player->actor.world.pos.x;
- temp2 = this->actor.world.pos.z - player->actor.world.pos.z;
- temp_f16 = RAD_TO_BINANG(Math_FAtan2F(temp1, temp2));
- if (*shapeRotY != temp_f16) {
- Math_SmoothStepToS(shapeRotY, temp_f16, 0x14, 0x1838, 0x64);
+ dx = this->actor.world.pos.x - player->actor.world.pos.x;
+ dz = this->actor.world.pos.z - player->actor.world.pos.z;
+ targetRotY = RAD_TO_BINANG(Math_FAtan2F(dx, dz));
+ if (*shapeRotY != targetRotY) {
+ Math_SmoothStepToS(shapeRotY, targetRotY, 0x14, 0x1838, 0x64);
player->actor.world.rot.y = *shapeRotY;
} else {
return true;
@@ -1167,102 +1177,102 @@ s32 func_80AECF6C(EnRu1* this, PlayState* play) {
return false;
}
-s32 func_80AED084(EnRu1* this, s32 state) {
+s32 EnRu1_CheckBlueWarpState(EnRu1* this, s32 state) {
if (this->blueWarp != NULL && this->blueWarp->rutoWarpState == state) {
return true;
}
return false;
}
-void func_80AED0B0(EnRu1* this, s32 state) {
+void EnRu1_SetBlueWarpState(EnRu1* this, s32 state) {
if (this->blueWarp != NULL) {
this->blueWarp->rutoWarpState = state;
}
}
-void func_80AED0C8(EnRu1* this, PlayState* play) {
- this->action = ENRU1_ACTION_16;
+void EnRu1_TriggerSpawnInBossRoom(EnRu1* this, PlayState* play) {
+ this->action = ENRU1_ACTION_SPAWN_BOSS_ROOM;
}
-void func_80AED0D8(EnRu1* this, PlayState* play) {
- this->action = ENRU1_ACTION_17;
+void EnRu1_SetupRiseThroughBlueWarp(EnRu1* this, PlayState* play) {
+ this->action = ENRU1_ACTION_RISE_THROUGH_BLUE_WARP;
this->drawConfig = ENRU1_DRAW_OPA;
this->actor.world.rot.y = this->actor.yawTowardsPlayer;
this->actor.shape.rot.y = this->actor.yawTowardsPlayer;
- func_80AECCB0(this, play);
+ EnRu1_SpawnBlueWarp(this, play);
}
-void func_80AED110(EnRu1* this) {
+void EnRu1_EndRise(EnRu1* this) {
if (this->actor.shape.yOffset >= 0.0f) {
- this->action = ENRU1_ACTION_18;
+ this->action = ENRU1_ACTION_WAIT_INSIDE_BLUE_WARP;
this->actor.shape.yOffset = 0.0f;
- func_80AED0B0(this, WARP_BLUE_RUTO_STATE_READY);
+ EnRu1_SetBlueWarpState(this, WARP_BLUE_RUTO_STATE_READY);
}
}
-void func_80AED154(EnRu1* this, PlayState* play) {
- if (func_80AED084(this, WARP_BLUE_RUTO_STATE_ENTERED)) {
- this->action = ENRU1_ACTION_19;
+void EnRu1_CheckLinkEnteredBlueWarp(EnRu1* this, PlayState* play) {
+ if (EnRu1_CheckBlueWarpState(this, WARP_BLUE_RUTO_STATE_ENTERED)) {
+ this->action = ENRU1_ACTION_LINK_WALKS_TO_POINT_IN_BLUE_WARP;
this->walkingFrame = 0.0f;
- func_80AECEB4(this, play);
+ EnRu1_SetPlayerMarkInBlueWarp(this, play);
}
}
-void func_80AED19C(EnRu1* this, s32 cond) {
- if (cond) {
+void EnRu1_StartCrossingArmsAndLegs(EnRu1* this, s32 shouldStart) {
+ if (shouldStart) {
Animation_Change(&this->skelAnime, &gRutoChildTransitionHandsOnHipToCrossArmsAndLegsAnim, 1.0f, 0,
Animation_GetLastFrame(&gRutoChildTransitionHandsOnHipToCrossArmsAndLegsAnim), ANIMMODE_ONCE,
-8.0f);
- this->action = ENRU1_ACTION_20;
- func_80AED0B0(this, WARP_BLUE_RUTO_STATE_3);
+ this->action = ENRU1_ACTION_WHAT_TOOK_YOU_SO_LONG;
+ EnRu1_SetBlueWarpState(this, WARP_BLUE_RUTO_STATE_3);
}
}
-void func_80AED218(EnRu1* this, UNK_TYPE arg1) {
- if (func_80AED084(this, WARP_BLUE_RUTO_STATE_TALKING)) {
- if (arg1 != 0) {
+void EnRu1_AdvanceAngryAnimation(EnRu1* this, s32 isTalking) {
+ if (EnRu1_CheckBlueWarpState(this, WARP_BLUE_RUTO_STATE_TALKING)) {
+ if (isTalking) {
Animation_Change(&this->skelAnime, &gRutoChildWaitSittingAnim, 1.0f, 0,
Animation_GetLastFrame(&gRutoChildWaitSittingAnim), ANIMMODE_LOOP, -8.0f);
}
- } else if (func_80AED084(this, WARP_BLUE_RUTO_STATE_WARPING)) {
+ } else if (EnRu1_CheckBlueWarpState(this, WARP_BLUE_RUTO_STATE_WARPING)) {
Animation_Change(&this->skelAnime, &gRutoChildWaitInBlueWarpAnim, 1.0f, 0,
Animation_GetLastFrame(&gRutoChildWaitInBlueWarpAnim), ANIMMODE_ONCE, -8.0f);
- this->action = ENRU1_ACTION_21;
- this->unk_27C = this->actor.xzDistToPlayer;
+ this->action = ENRU1_ACTION_WARPING_OUT;
+ this->xzDistToPlayerInBlueWarp = this->actor.xzDistToPlayer;
}
}
-void func_80AED304(EnRu1* this, PlayState* play) {
- func_80AED0C8(this, play);
+void EnRu1_BossRoom_PreSpawn(EnRu1* this, PlayState* play) {
+ EnRu1_TriggerSpawnInBossRoom(this, play);
}
-void func_80AED324(EnRu1* this, PlayState* play) {
- func_80AED0D8(this, play);
+void EnRu1_BossRoom_Spawn(EnRu1* this, PlayState* play) {
+ EnRu1_SetupRiseThroughBlueWarp(this, play);
}
-void func_80AED344(EnRu1* this, PlayState* play) {
- func_80AECE04(this, play);
+void EnRu1_BossRoom_RiseThroughBlueWarp(EnRu1* this, PlayState* play) {
+ EnRu1_Rise(this, play);
EnRu1_UpdateSkelAnime(this);
- func_80AED110(this);
+ EnRu1_EndRise(this);
}
-void func_80AED374(EnRu1* this, PlayState* play) {
+void EnRu1_BossRoom_WaitInsideBlueWarp(EnRu1* this, PlayState* play) {
EnRu1_UpdateSkelAnime(this);
- func_80AED154(this, play);
+ EnRu1_CheckLinkEnteredBlueWarp(this, play);
}
-void func_80AED3A4(EnRu1* this, PlayState* play) {
+void EnRu1_BossRoom_LinkWalksToPointInBlueWarp(EnRu1* this, PlayState* play) {
EnRu1_UpdateSkelAnime(this);
- func_80AED19C(this, func_80AECF6C(this, play));
+ EnRu1_StartCrossingArmsAndLegs(this, EnRu1_IsLinkInBlueWarp(this, play));
}
-void func_80AED3E0(EnRu1* this, PlayState* play) {
+void EnRu1_BossRoom_WhatTookYouSoLong(EnRu1* this, PlayState* play) {
func_80AEAECC(this, play);
- func_80AED218(this, EnRu1_UpdateSkelAnime(this));
+ EnRu1_AdvanceAngryAnimation(this, EnRu1_UpdateSkelAnime(this));
}
-void func_80AED414(EnRu1* this, PlayState* play) {
- func_80AECE20(this, play);
+void EnRu1_BossRoom_WarpingOut(EnRu1* this, PlayState* play) {
+ EnRu1_RiseWithLink(this, play);
func_80AEAECC(this, play);
EnRu1_UpdateSkelAnime(this);
}
diff --git a/src/overlays/actors/ovl_En_Ru1/z_en_ru1.h b/src/overlays/actors/ovl_En_Ru1/z_en_ru1.h
index 62f7ff4ff..b36a0e32f 100644
--- a/src/overlays/actors/ovl_En_Ru1/z_en_ru1.h
+++ b/src/overlays/actors/ovl_En_Ru1/z_en_ru1.h
@@ -30,7 +30,7 @@ typedef struct EnRu1 {
/* 0x0270 */ f32 treadTimer;
/* 0x0274 */ char unk_274[0x4];
/* 0x0278 */ DoorWarp1* blueWarp;
- /* 0x027C */ f32 unk_27C;
+ /* 0x027C */ f32 xzDistToPlayerInBlueWarp;
/* 0x0280 */ s32 isFalling;
/* 0x0284 */ s8 roomNum1;
/* 0x0285 */ s8 roomNum2;
@@ -76,13 +76,13 @@ typedef enum EnRu1Action {
/* 12 */ ENRU1_ACTION_MEETING_WALKING_AWAY_CONSTANT,
/* 13 */ ENRU1_ACTION_MEETING_FALLING_DOWN_HOLE,
/* 14 */ ENRU1_ACTION_MEETING_END,
- /* 15 */ ENRU1_ACTION_15,
- /* 16 */ ENRU1_ACTION_16,
- /* 17 */ ENRU1_ACTION_17,
- /* 18 */ ENRU1_ACTION_18,
- /* 19 */ ENRU1_ACTION_19,
- /* 20 */ ENRU1_ACTION_20,
- /* 21 */ ENRU1_ACTION_21,
+ /* 15 */ ENRU1_ACTION_PRE_SPAWN_BOSS_ROOM,
+ /* 16 */ ENRU1_ACTION_SPAWN_BOSS_ROOM,
+ /* 17 */ ENRU1_ACTION_RISE_THROUGH_BLUE_WARP,
+ /* 18 */ ENRU1_ACTION_WAIT_INSIDE_BLUE_WARP,
+ /* 19 */ ENRU1_ACTION_LINK_WALKS_TO_POINT_IN_BLUE_WARP,
+ /* 20 */ ENRU1_ACTION_WHAT_TOOK_YOU_SO_LONG,
+ /* 21 */ ENRU1_ACTION_WARPING_OUT,
/* 22 */ ENRU1_ACTION_22,
/* 23 */ ENRU1_ACTION_23,
/* 24 */ ENRU1_ACTION_24,