1
0
Fork 0
mirror of https://github.com/zeldaret/oot.git synced 2024-12-26 14:46:16 +00:00

Match retail text for some actors ❤️ (#1912)

* Match retail text for some of my dear actors

* Fix fake `EnDoor_SetupType` match, ty cadmic
This commit is contained in:
Dragorn421 2024-03-02 21:36:38 +01:00 committed by GitHub
parent ff81e2a891
commit feb64e6ad8
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
5 changed files with 43 additions and 43 deletions

View file

@ -896,9 +896,7 @@ void DoorShutter_PhantomGanonBarsRaise(DoorShutter* this, PlayState* play) {
f32 targetOffsetY; f32 targetOffsetY;
PRINTF("FHG SAKU START !!\n"); PRINTF("FHG SAKU START !!\n");
if (this->isActive != 0) { DECR(this->isActive);
this->isActive--;
}
targetOffsetY = (this->isActive % 2 != 0) ? -3.0f : 0.0f; targetOffsetY = (this->isActive % 2 != 0) ? -3.0f : 0.0f;
Math_SmoothStepToF(&this->dyna.actor.world.pos.y, -34.0f + targetOffsetY, 1.0f, 20.0f, 0.0f); Math_SmoothStepToF(&this->dyna.actor.world.pos.y, -34.0f + targetOffsetY, 1.0f, 20.0f, 0.0f);
PRINTF("FHG SAKU END !!\n"); PRINTF("FHG SAKU END !!\n");
@ -975,6 +973,9 @@ s32 DoorShutter_ShouldDraw(DoorShutter* this, PlayState* play) {
void DoorShutter_Draw(Actor* thisx, PlayState* play) { void DoorShutter_Draw(Actor* thisx, PlayState* play) {
DoorShutter* this = (DoorShutter*)thisx; DoorShutter* this = (DoorShutter*)thisx;
if (1) {}
if (1) {}
//! @bug This actor is not fully initialized until the required object dependency is loaded. //! @bug This actor is not fully initialized until the required object dependency is loaded.
//! In most cases, the check for objectSlot to equal requiredObjectSlot prevents the actor //! In most cases, the check for objectSlot to equal requiredObjectSlot prevents the actor
//! from drawing until initialization is complete. However if the required object is the same as the //! from drawing until initialization is complete. However if the required object is the same as the

View file

@ -488,14 +488,15 @@ void EnDaiku_UpdateSubCamera(EnDaiku* this, PlayState* play) {
void EnDaiku_EscapeSuccess(EnDaiku* this, PlayState* play) { void EnDaiku_EscapeSuccess(EnDaiku* this, PlayState* play) {
static Vec3f D_809E4148 = { 0.0f, 0.0f, 120.0f }; static Vec3f D_809E4148 = { 0.0f, 0.0f, 120.0f };
Actor* gerudoGuard;
Vec3f vec;
Play_ClearCamera(play, this->subCamId); Play_ClearCamera(play, this->subCamId);
Play_ChangeCameraStatus(play, CAM_ID_MAIN, CAM_STAT_ACTIVE); Play_ChangeCameraStatus(play, CAM_ID_MAIN, CAM_STAT_ACTIVE);
this->subCamActive = false; this->subCamActive = false;
if (GET_EVENTCHKINF_CARPENTERS_FREE_ALL()) { if (GET_EVENTCHKINF_CARPENTERS_FREE_ALL()) {
Actor* gerudoGuard;
Vec3f vec;
Matrix_RotateY(BINANG_TO_RAD(this->initRot.y), MTXMODE_NEW); Matrix_RotateY(BINANG_TO_RAD(this->initRot.y), MTXMODE_NEW);
Matrix_MultVec3f(&D_809E4148, &vec); Matrix_MultVec3f(&D_809E4148, &vec);
gerudoGuard = Actor_Spawn(&play->actorCtx, play, ACTOR_EN_GE3, this->initPos.x + vec.x, this->initPos.y + vec.y, gerudoGuard = Actor_Spawn(&play->actorCtx, play, ACTOR_EN_GE3, this->initPos.x + vec.x, this->initPos.y + vec.y,
@ -504,9 +505,10 @@ void EnDaiku_EscapeSuccess(EnDaiku* this, PlayState* play) {
if (gerudoGuard == NULL) { if (gerudoGuard == NULL) {
Actor_Kill(&this->actor); Actor_Kill(&this->actor);
} }
} else { return;
Player_SetCsActionWithHaltedActors(play, &this->actor, PLAYER_CSACTION_7);
} }
Player_SetCsActionWithHaltedActors(play, &this->actor, PLAYER_CSACTION_7);
} }
/** /**
@ -605,6 +607,8 @@ void EnDaiku_Draw(Actor* thisx, PlayState* play) {
SkelAnime_DrawFlexOpa(play, this->skelAnime.skeleton, this->skelAnime.jointTable, this->skelAnime.dListCount, SkelAnime_DrawFlexOpa(play, this->skelAnime.skeleton, this->skelAnime.jointTable, this->skelAnime.dListCount,
EnDaiku_OverrideLimbDraw, EnDaiku_PostLimbDraw, this); EnDaiku_OverrideLimbDraw, EnDaiku_PostLimbDraw, this);
if (1) {}
CLOSE_DISPS(play->state.gfxCtx, "../z_en_daiku.c", 1255); CLOSE_DISPS(play->state.gfxCtx, "../z_en_daiku.c", 1255);
} }

View file

@ -562,5 +562,7 @@ void EnDaikuKakariko_Draw(Actor* thisx, PlayState* play) {
SkelAnime_DrawFlexOpa(play, this->skelAnime.skeleton, this->skelAnime.jointTable, this->skelAnime.dListCount, SkelAnime_DrawFlexOpa(play, this->skelAnime.skeleton, this->skelAnime.jointTable, this->skelAnime.dListCount,
EnDaikuKakariko_OverrideLimbDraw, EnDaikuKakariko_PostLimbDraw, thisx); EnDaikuKakariko_OverrideLimbDraw, EnDaikuKakariko_PostLimbDraw, thisx);
if (1) {}
CLOSE_DISPS(play->state.gfxCtx, "../z_en_daiku_kakariko.c", 1151); CLOSE_DISPS(play->state.gfxCtx, "../z_en_daiku_kakariko.c", 1151);
} }

View file

@ -173,10 +173,9 @@ void EnDoor_Destroy(Actor* thisx, PlayState* play) {
} }
void EnDoor_SetupType(EnDoor* this, PlayState* play) { void EnDoor_SetupType(EnDoor* this, PlayState* play) {
s32 doorType;
if (Object_IsLoaded(&play->objectCtx, this->requiredObjectSlot)) { if (Object_IsLoaded(&play->objectCtx, this->requiredObjectSlot)) {
doorType = ENDOOR_GET_TYPE(&this->actor); s32 doorType = ENDOOR_GET_TYPE(&this->actor);
this->actor.flags &= ~ACTOR_FLAG_4; this->actor.flags &= ~ACTOR_FLAG_4;
this->actor.objectSlot = this->requiredObjectSlot; this->actor.objectSlot = this->requiredObjectSlot;
this->actionFunc = EnDoor_Idle; this->actionFunc = EnDoor_Idle;
@ -191,7 +190,9 @@ void EnDoor_SetupType(EnDoor* this, PlayState* play) {
this->lockTimer = 10; this->lockTimer = 10;
} }
} else if (doorType == DOOR_AJAR) { } else if (doorType == DOOR_AJAR) {
if (Actor_WorldDistXZToActor(&this->actor, &GET_PLAYER(play)->actor) > DOOR_AJAR_SLAM_RANGE) { Player* player = GET_PLAYER(play);
if (Actor_WorldDistXZToActor(&this->actor, &player->actor) > DOOR_AJAR_SLAM_RANGE) {
this->actionFunc = EnDoor_AjarWait; this->actionFunc = EnDoor_AjarWait;
this->actor.world.rot.y = -0x1800; this->actor.world.rot.y = -0x1800;
} }
@ -217,7 +218,6 @@ void EnDoor_Idle(EnDoor* this, PlayState* play) {
Player* player = GET_PLAYER(play); Player* player = GET_PLAYER(play);
s32 doorType; s32 doorType;
Vec3f playerPosRelToDoor; Vec3f playerPosRelToDoor;
s16 yawDiff;
doorType = ENDOOR_GET_TYPE(&this->actor); doorType = ENDOOR_GET_TYPE(&this->actor);
func_8002DBD0(&this->actor, &playerPosRelToDoor, &player->actor.world.pos); func_8002DBD0(&this->actor, &playerPosRelToDoor, &player->actor.world.pos);
@ -233,7 +233,8 @@ void EnDoor_Idle(EnDoor* this, PlayState* play) {
} else if (!Player_InCsMode(play)) { } else if (!Player_InCsMode(play)) {
if (fabsf(playerPosRelToDoor.y) < 20.0f && fabsf(playerPosRelToDoor.x) < 20.0f && if (fabsf(playerPosRelToDoor.y) < 20.0f && fabsf(playerPosRelToDoor.x) < 20.0f &&
fabsf(playerPosRelToDoor.z) < 50.0f) { fabsf(playerPosRelToDoor.z) < 50.0f) {
yawDiff = player->actor.shape.rot.y - this->actor.shape.rot.y; s16 yawDiff = player->actor.shape.rot.y - this->actor.shape.rot.y;
if (playerPosRelToDoor.z > 0.0f) { if (playerPosRelToDoor.z > 0.0f) {
yawDiff = 0x8000 - yawDiff; yawDiff = 0x8000 - yawDiff;
} }
@ -293,9 +294,6 @@ void EnDoor_AjarClose(EnDoor* this, PlayState* play) {
} }
void EnDoor_Open(EnDoor* this, PlayState* play) { void EnDoor_Open(EnDoor* this, PlayState* play) {
s32 i;
s32 numEffects;
if (DECR(this->lockTimer) == 0) { if (DECR(this->lockTimer) == 0) {
if (SkelAnime_Update(&this->skelAnime)) { if (SkelAnime_Update(&this->skelAnime)) {
this->actionFunc = EnDoor_Idle; this->actionFunc = EnDoor_Idle;
@ -307,7 +305,9 @@ void EnDoor_Open(EnDoor* this, PlayState* play) {
? NA_SE_EV_IRON_DOOR_OPEN ? NA_SE_EV_IRON_DOOR_OPEN
: NA_SE_OC_DOOR_OPEN); : NA_SE_OC_DOOR_OPEN);
if (this->skelAnime.playSpeed < 1.5f) { if (this->skelAnime.playSpeed < 1.5f) {
numEffects = (s32)(Rand_ZeroOne() * 30.0f) + 50; s32 numEffects = (s32)(Rand_ZeroOne() * 30.0f) + 50;
s32 i;
for (i = 0; i < numEffects; i++) { for (i = 0; i < numEffects; i++) {
EffectSsBubble_Spawn(play, &this->actor.world.pos, 60.0f, 100.0f, 50.0f, 0.15f); EffectSsBubble_Spawn(play, &this->actor.world.pos, 60.0f, 100.0f, 50.0f, 0.15f);
} }
@ -329,25 +329,22 @@ void EnDoor_Update(Actor* thisx, PlayState* play) {
} }
s32 EnDoor_OverrideLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3f* pos, Vec3s* rot, void* thisx) { s32 EnDoor_OverrideLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3f* pos, Vec3s* rot, void* thisx) {
s32 pad;
TransitionActorEntry* transitionEntry;
Gfx** doorDLists;
s32 pad2;
s16 rotDiff;
s32 doorDListIndex;
EnDoor* this = (EnDoor*)thisx;
if (limbIndex == 4) { if (limbIndex == 4) {
doorDLists = sDoorDLists[this->dListIndex]; EnDoor* this = (EnDoor*)thisx;
TransitionActorEntry* transitionEntry;
Gfx** doorDLists = sDoorDLists[this->dListIndex];
transitionEntry = &play->transiActorCtx.list[GET_TRANSITION_ACTOR_INDEX(&this->actor)]; transitionEntry = &play->transiActorCtx.list[GET_TRANSITION_ACTOR_INDEX(&this->actor)];
rot->z += this->actor.world.rot.y; rot->z += this->actor.world.rot.y;
if ((play->roomCtx.prevRoom.num >= 0) || (transitionEntry->sides[0].room == transitionEntry->sides[1].room)) { if ((play->roomCtx.prevRoom.num >= 0) || (transitionEntry->sides[0].room == transitionEntry->sides[1].room)) {
// Draw the side of the door that is visible to the camera // Draw the side of the door that is visible to the camera
rotDiff = this->actor.shape.rot.y + this->skelAnime.jointTable[3].z + rot->z - s16 rotDiff = this->actor.shape.rot.y + this->skelAnime.jointTable[3].z + rot->z -
Math_Vec3f_Yaw(&play->view.eye, &this->actor.world.pos); Math_Vec3f_Yaw(&play->view.eye, &this->actor.world.pos);
*dList = (ABS(rotDiff) < 0x4000) ? doorDLists[0] : doorDLists[1]; *dList = (ABS(rotDiff) < 0x4000) ? doorDLists[0] : doorDLists[1];
} else { } else {
doorDListIndex = this->unk_192; s32 doorDListIndex = this->unk_192;
if (transitionEntry->sides[0].room != this->actor.room) { if (transitionEntry->sides[0].room != this->actor.room) {
doorDListIndex ^= 1; doorDListIndex ^= 1;
} }

View file

@ -256,14 +256,12 @@ void EnHoll_HorizontalInvisible(EnHoll* this, PlayState* play) {
void EnHoll_VerticalDownBgCoverLarge(EnHoll* this, PlayState* play) { void EnHoll_VerticalDownBgCoverLarge(EnHoll* this, PlayState* play) {
Player* player = GET_PLAYER(play); Player* player = GET_PLAYER(play);
f32 absYDistToPlayer = fabsf(this->actor.yDistToPlayer); f32 absYDistToPlayer = fabsf(this->actor.yDistToPlayer);
s32 transitionActorIndex;
if (this->actor.xzDistToPlayer < ENHOLL_V_DOWN_RADIUS && if (this->actor.xzDistToPlayer < ENHOLL_V_DOWN_RADIUS &&
// Nothing happens if `absYDistToPlayer > ENHOLL_V_DOWN_BGCOVER_YDIST`, // Nothing happens if `absYDistToPlayer > ENHOLL_V_DOWN_BGCOVER_YDIST`,
// so this check may as well compare to ENHOLL_V_DOWN_BGCOVER_YDIST // so this check may as well compare to ENHOLL_V_DOWN_BGCOVER_YDIST
absYDistToPlayer < (ENHOLL_V_DOWN_BGCOVER_YDIST + 95.0f)) { absYDistToPlayer < (ENHOLL_V_DOWN_BGCOVER_YDIST + 95.0f)) {
s32 transitionActorIndex = GET_TRANSITION_ACTOR_INDEX(&this->actor);
transitionActorIndex = GET_TRANSITION_ACTOR_INDEX(&this->actor);
if (absYDistToPlayer < ENHOLL_V_DOWN_LOAD_YDIST) { if (absYDistToPlayer < ENHOLL_V_DOWN_LOAD_YDIST) {
play->bgCoverAlpha = 255; play->bgCoverAlpha = 255;
@ -295,8 +293,6 @@ void EnHoll_VerticalDownBgCoverLarge(EnHoll* this, PlayState* play) {
void EnHoll_VerticalBgCover(EnHoll* this, PlayState* play) { void EnHoll_VerticalBgCover(EnHoll* this, PlayState* play) {
f32 absYDistToPlayer; f32 absYDistToPlayer;
s32 side;
s32 transitionActorIndex;
if ((this->actor.xzDistToPlayer < ENHOLL_V_RADIUS) && if ((this->actor.xzDistToPlayer < ENHOLL_V_RADIUS) &&
(absYDistToPlayer = fabsf(this->actor.yDistToPlayer), absYDistToPlayer < ENHOLL_V_BGCOVER_BGCOVER_YDIST)) { (absYDistToPlayer = fabsf(this->actor.yDistToPlayer), absYDistToPlayer < ENHOLL_V_BGCOVER_BGCOVER_YDIST)) {
@ -309,8 +305,9 @@ void EnHoll_VerticalBgCover(EnHoll* this, PlayState* play) {
} }
if (absYDistToPlayer > ENHOLL_V_BGCOVER_LOAD_YDIST) { if (absYDistToPlayer > ENHOLL_V_BGCOVER_LOAD_YDIST) {
transitionActorIndex = GET_TRANSITION_ACTOR_INDEX(&this->actor); s32 transitionActorIndex = GET_TRANSITION_ACTOR_INDEX(&this->actor);
side = (this->actor.yDistToPlayer > 0.0f) ? 0 : 1; s32 side = (this->actor.yDistToPlayer > 0.0f) ? 0 : 1;
this->actor.room = play->transiActorCtx.list[transitionActorIndex].sides[side].room; this->actor.room = play->transiActorCtx.list[transitionActorIndex].sides[side].room;
if (this->actor.room != play->roomCtx.curRoom.num && if (this->actor.room != play->roomCtx.curRoom.num &&
func_8009728C(play, &play->roomCtx, this->actor.room)) { func_8009728C(play, &play->roomCtx, this->actor.room)) {
@ -348,10 +345,6 @@ void EnHoll_VerticalInvisible(EnHoll* this, PlayState* play) {
void EnHoll_HorizontalBgCoverSwitchFlag(EnHoll* this, PlayState* play) { void EnHoll_HorizontalBgCoverSwitchFlag(EnHoll* this, PlayState* play) {
Player* player = GET_PLAYER(play); Player* player = GET_PLAYER(play);
Vec3f relPlayerPos;
f32 orthogonalDistToPlayer;
s32 side;
s32 transitionActorIndex;
if (!Flags_GetSwitch(play, ENHOLL_GET_SWITCH_FLAG(&this->actor))) { if (!Flags_GetSwitch(play, ENHOLL_GET_SWITCH_FLAG(&this->actor))) {
if (this->resetBgCoverAlpha) { if (this->resetBgCoverAlpha) {
@ -359,15 +352,17 @@ void EnHoll_HorizontalBgCoverSwitchFlag(EnHoll* this, PlayState* play) {
this->resetBgCoverAlpha = false; this->resetBgCoverAlpha = false;
} }
} else { } else {
Vec3f relPlayerPos;
f32 orthogonalDistToPlayer;
func_8002DBD0(&this->actor, &relPlayerPos, &player->actor.world.pos); func_8002DBD0(&this->actor, &relPlayerPos, &player->actor.world.pos);
orthogonalDistToPlayer = fabsf(relPlayerPos.z); orthogonalDistToPlayer = fabsf(relPlayerPos.z);
if (ENHOLL_H_Y_MIN < relPlayerPos.y && relPlayerPos.y < ENHOLL_H_Y_MAX && if (ENHOLL_H_Y_MIN < relPlayerPos.y && relPlayerPos.y < ENHOLL_H_Y_MAX &&
fabsf(relPlayerPos.x) < ENHOLL_H_HALFWIDTH && orthogonalDistToPlayer < ENHOLL_H_SWITCHFLAG_BGCOVER_DEPTH) { fabsf(relPlayerPos.x) < ENHOLL_H_HALFWIDTH && orthogonalDistToPlayer < ENHOLL_H_SWITCHFLAG_BGCOVER_DEPTH) {
s32 transitionActorIndex = GET_TRANSITION_ACTOR_INDEX(&this->actor);
this->resetBgCoverAlpha = true; this->resetBgCoverAlpha = true;
transitionActorIndex = GET_TRANSITION_ACTOR_INDEX(&this->actor);
play->bgCoverAlpha = play->bgCoverAlpha =
255 - (s32)((orthogonalDistToPlayer - ENHOLL_H_SWITCHFLAG_LOAD_DEPTH) * 255 - (s32)((orthogonalDistToPlayer - ENHOLL_H_SWITCHFLAG_LOAD_DEPTH) *
(255 / (ENHOLL_H_SWITCHFLAG_BGCOVER_DEPTH - ENHOLL_H_SWITCHFLAG_LOAD_DEPTH) + 0.8f)); (255 / (ENHOLL_H_SWITCHFLAG_BGCOVER_DEPTH - ENHOLL_H_SWITCHFLAG_LOAD_DEPTH) + 0.8f));
@ -378,7 +373,8 @@ void EnHoll_HorizontalBgCoverSwitchFlag(EnHoll* this, PlayState* play) {
} }
if (orthogonalDistToPlayer < ENHOLL_H_SWITCHFLAG_LOAD_DEPTH) { if (orthogonalDistToPlayer < ENHOLL_H_SWITCHFLAG_LOAD_DEPTH) {
side = (relPlayerPos.z < 0.0f) ? 0 : 1; s32 side = (relPlayerPos.z < 0.0f) ? 0 : 1;
this->actor.room = play->transiActorCtx.list[transitionActorIndex].sides[side].room; this->actor.room = play->transiActorCtx.list[transitionActorIndex].sides[side].room;
if (this->actor.room != play->roomCtx.curRoom.num && if (this->actor.room != play->roomCtx.curRoom.num &&
func_8009728C(play, &play->roomCtx, this->actor.room)) { func_8009728C(play, &play->roomCtx, this->actor.room)) {