mirror of https://github.com/zeldaret/mm.git
Standardize on calling it "Exterior Gear" to contrast with all the interior stuff
This commit is contained in:
parent
ad3b2ee190
commit
36e31307bc
|
|
@ -24,7 +24,7 @@
|
|||
#define GET_CURRENT_HOUR(this) ((s32)((this)->currentTime * (24.0f / 0x10000)))
|
||||
#define GET_CURRENT_MINUTE(this) ((s32)((this)->currentTime * (360 * 2.0f / 0x10000)) % 30)
|
||||
#define GET_CLOCK_FACE_ROTATION(currentHour) ((s16)(currentHour * (0x10000 / 24.0f)))
|
||||
#define GET_MINUTE_RING_OR_GEAR_ROTATION(currentMinute) ((s16)(currentMinute * (0x10000 * 12.0f / 360)))
|
||||
#define GET_MINUTE_RING_OR_EXTERIOR_GEAR_ROTATION(currentMinute) ((s16)(currentMinute * (0x10000 * 12.0f / 360)))
|
||||
|
||||
void ObjTokeidai_Init(Actor* thisx, GlobalContext* globalCtx);
|
||||
void ObjTokeidai_Destroy(Actor* thisx, GlobalContext* globalCtx);
|
||||
|
|
@ -33,18 +33,18 @@ void ObjTokeidai_Draw(Actor* thisx, GlobalContext* globalCtx);
|
|||
|
||||
void ObjTokeidai_DoNothing(ObjTokeidai* this, GlobalContext* globalCtx);
|
||||
void ObjTokeidai_TowerClock_OpenedIdle(ObjTokeidai* this, GlobalContext* globalCtx);
|
||||
void ObjTokeidai_TowerGear_OpenedIdle(ObjTokeidai* this, GlobalContext* globalCtx);
|
||||
void ObjTokeidai_ExteriorGear_OpenedIdle(ObjTokeidai* this, GlobalContext* globalCtx);
|
||||
void ObjTokeidai_Counterweight_OpenedIdle(ObjTokeidai* this, GlobalContext* globalCtx);
|
||||
void ObjTokeidai_TowerClock_Idle(ObjTokeidai* this, GlobalContext* globalCtx);
|
||||
void ObjTokeidai_WallClock_Idle(ObjTokeidai* this, GlobalContext* globalCtx);
|
||||
void ObjTokeidai_TowerGear_Idle(ObjTokeidai* this, GlobalContext* globalCtx);
|
||||
void ObjTokeidai_ExteriorGear_Idle(ObjTokeidai* this, GlobalContext* globalCtx);
|
||||
void ObjTokeidai_Counterweight_Idle(ObjTokeidai* this, GlobalContext* globalCtx);
|
||||
void ObjTokeidai_Walls_Idle(ObjTokeidai* this, GlobalContext* globalCtx);
|
||||
void ObjTokeidai_StaircaseToRooftop_Idle(ObjTokeidai* this, GlobalContext* globalCtx);
|
||||
void ObjTokeidai_SetupTowerOpening(ObjTokeidai* this);
|
||||
void ObjTokeidai_Clock_Draw(Actor* thisx, GlobalContext* globalCtx);
|
||||
void ObjTokeidai_Counterweight_Draw(Actor* thisx, GlobalContext* globalCtx);
|
||||
void ObjTokeidai_TowerGear_Draw(Actor* thisx, GlobalContext* globalCtx);
|
||||
void ObjTokeidai_ExteriorGear_Draw(Actor* thisx, GlobalContext* globalCtx);
|
||||
|
||||
const ActorInit Obj_Tokeidai_InitVars = {
|
||||
ACTOR_OBJ_TOKEIDAI,
|
||||
|
|
@ -78,19 +78,19 @@ s32 ObjTokeidai_GetTargetSunMoonPanelRotation() {
|
|||
return 0;
|
||||
}
|
||||
|
||||
void ObjTokeidai_SetupClockOrGear(ObjTokeidai* this) {
|
||||
void ObjTokeidai_SetupClockOrExteriorGear(ObjTokeidai* this) {
|
||||
s32 currentMinute = GET_CURRENT_MINUTE(this);
|
||||
|
||||
this->clockMinute = currentMinute;
|
||||
this->minuteRingOrGearRotation = GET_MINUTE_RING_OR_GEAR_ROTATION(currentMinute);
|
||||
this->minuteRingOrGearRotationalVelocity = 0x3C;
|
||||
this->minuteRingOrGearRotationTimer = 0;
|
||||
this->minuteRingOrExteriorGearRotation = GET_MINUTE_RING_OR_EXTERIOR_GEAR_ROTATION(currentMinute);
|
||||
this->minuteRingOrExteriorGearRotationalVelocity = 0x3C;
|
||||
this->minuteRingOrExteriorGearRotationTimer = 0;
|
||||
}
|
||||
|
||||
void ObjTokeidai_Clock_Init(ObjTokeidai* this) {
|
||||
s32 currentHour;
|
||||
|
||||
ObjTokeidai_SetupClockOrGear(this);
|
||||
ObjTokeidai_SetupClockOrExteriorGear(this);
|
||||
currentHour = GET_CURRENT_HOUR(this);
|
||||
this->clockHour = currentHour;
|
||||
this->clockFaceRotation = GET_CLOCK_FACE_ROTATION(currentHour);
|
||||
|
|
@ -100,10 +100,10 @@ void ObjTokeidai_Clock_Init(ObjTokeidai* this) {
|
|||
this->sunMoonPanelRotation = ObjTokeidai_GetTargetSunMoonPanelRotation();
|
||||
}
|
||||
|
||||
void ObjTokeidai_TowerGear_Init(ObjTokeidai* this, GlobalContext* globalCtx) {
|
||||
this->actor.draw = ObjTokeidai_TowerGear_Draw;
|
||||
void ObjTokeidai_ExteriorGear_Init(ObjTokeidai* this, GlobalContext* globalCtx) {
|
||||
this->actor.draw = ObjTokeidai_ExteriorGear_Draw;
|
||||
this->opaDList = gClockTowerExteriorGearDL;
|
||||
ObjTokeidai_SetupClockOrGear(this);
|
||||
ObjTokeidai_SetupClockOrExteriorGear(this);
|
||||
|
||||
if (((globalCtx->sceneNum == SCENE_CLOCKTOWER) && (gSaveContext.sceneSetupIndex == 2) &&
|
||||
(globalCtx->csCtx.unk_12 == 0)) ||
|
||||
|
|
@ -111,12 +111,12 @@ void ObjTokeidai_TowerGear_Init(ObjTokeidai* this, GlobalContext* globalCtx) {
|
|||
(globalCtx->csCtx.unk_12 == 0))) {
|
||||
ObjTokeidai_SetupTowerOpening(this);
|
||||
} else if ((CURRENT_DAY == 3 && gSaveContext.time < CLOCK_TIME(6, 0)) || CURRENT_DAY >= 4) {
|
||||
this->actionFunc = ObjTokeidai_TowerGear_OpenedIdle;
|
||||
this->actionFunc = ObjTokeidai_ExteriorGear_OpenedIdle;
|
||||
this->actor.world.pos.y += this->actor.scale.y * 1900.0f;
|
||||
this->actor.shape.yOffset = 1500.0f;
|
||||
gSaveContext.weekEventReg[8] |= 0x40;
|
||||
} else {
|
||||
this->actionFunc = ObjTokeidai_TowerGear_Idle;
|
||||
this->actionFunc = ObjTokeidai_ExteriorGear_Idle;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -204,12 +204,12 @@ void ObjTokeidai_Init(Actor* thisx, GlobalContext* globalCtx) {
|
|||
this->actor.home.rot.x = 0;
|
||||
|
||||
switch (OBJ_TOKEIDAI_TYPE(&this->actor)) {
|
||||
case OBJ_TOKEIDAI_TYPE_TOWER_GEAR_TERMINA_FIELD:
|
||||
case OBJ_TOKEIDAI_TYPE_EXTERIOR_GEAR_TERMINA_FIELD:
|
||||
Actor_SetScale(&this->actor, 0.15f);
|
||||
ObjTokeidai_TowerGear_Init(this, globalCtx);
|
||||
ObjTokeidai_ExteriorGear_Init(this, globalCtx);
|
||||
break;
|
||||
case OBJ_TOKEIDAI_TYPE_TOWER_GEAR_CLOCK_TOWN:
|
||||
ObjTokeidai_TowerGear_Init(this, globalCtx);
|
||||
case OBJ_TOKEIDAI_TYPE_EXTERIOR_GEAR_CLOCK_TOWN:
|
||||
ObjTokeidai_ExteriorGear_Init(this, globalCtx);
|
||||
break;
|
||||
case OBJ_TOKEIDAI_TYPE_UNUSED_WALL:
|
||||
this->opaDList = gClockTowerUnusedTowerWallDL;
|
||||
|
|
@ -260,38 +260,39 @@ void ObjTokeidai_RotateOnMinuteChange(ObjTokeidai* this, s32 playSfx) {
|
|||
s32 currentMinute = GET_CURRENT_MINUTE(this);
|
||||
|
||||
if (currentMinute != this->clockMinute) {
|
||||
if (this->minuteRingOrGearRotationTimer == 8 && playSfx) {
|
||||
if (this->minuteRingOrExteriorGearRotationTimer == 8 && playSfx) {
|
||||
Audio_PlayActorSound2(&this->actor, NA_SE_EV_CLOCK_TOWER_SECOND_HAND);
|
||||
}
|
||||
|
||||
if (this->minuteRingOrGearRotationTimer > 8) {
|
||||
if (this->minuteRingOrExteriorGearRotationTimer > 8) {
|
||||
// This actually performs the rotation to the next minute
|
||||
// for the minute ring or gear.
|
||||
this->minuteRingOrGearRotationalVelocity += 0x3C;
|
||||
this->minuteRingOrGearRotation += this->minuteRingOrGearRotationalVelocity;
|
||||
// for the minute ring or exterior gear.
|
||||
this->minuteRingOrExteriorGearRotationalVelocity += 0x3C;
|
||||
this->minuteRingOrExteriorGearRotation += this->minuteRingOrExteriorGearRotationalVelocity;
|
||||
} else {
|
||||
// This makes the minute ring or gear wiggle in place for a bit
|
||||
// This makes the minute ring or exterior gear wiggle in place for a bit
|
||||
// before rotating to the next position.
|
||||
if ((this->minuteRingOrGearRotationTimer & 3) == 0) {
|
||||
this->minuteRingOrGearRotation += 0x5A;
|
||||
if ((this->minuteRingOrExteriorGearRotationTimer & 3) == 0) {
|
||||
this->minuteRingOrExteriorGearRotation += 0x5A;
|
||||
}
|
||||
if ((this->minuteRingOrGearRotationTimer & 3) == 1) {
|
||||
this->minuteRingOrGearRotation -= 0x5A;
|
||||
if ((this->minuteRingOrExteriorGearRotationTimer & 3) == 1) {
|
||||
this->minuteRingOrExteriorGearRotation -= 0x5A;
|
||||
}
|
||||
}
|
||||
|
||||
this->minuteRingOrGearRotationTimer++;
|
||||
if ((currentMinute == 15 && this->minuteRingOrGearRotation < 0) ||
|
||||
(currentMinute != 15 && this->minuteRingOrGearRotation > GET_MINUTE_RING_OR_GEAR_ROTATION(currentMinute))) {
|
||||
this->minuteRingOrGearRotation = GET_MINUTE_RING_OR_GEAR_ROTATION(currentMinute);
|
||||
this->minuteRingOrExteriorGearRotationTimer++;
|
||||
if ((currentMinute == 15 && this->minuteRingOrExteriorGearRotation < 0) ||
|
||||
(currentMinute != 15 &&
|
||||
this->minuteRingOrExteriorGearRotation > GET_MINUTE_RING_OR_EXTERIOR_GEAR_ROTATION(currentMinute))) {
|
||||
this->minuteRingOrExteriorGearRotation = GET_MINUTE_RING_OR_EXTERIOR_GEAR_ROTATION(currentMinute);
|
||||
this->clockMinute = currentMinute;
|
||||
this->minuteRingOrGearRotationalVelocity = 0x5A;
|
||||
this->minuteRingOrGearRotationTimer = 0;
|
||||
this->minuteRingOrExteriorGearRotationalVelocity = 0x5A;
|
||||
this->minuteRingOrExteriorGearRotationTimer = 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void ObjTokeidai_TowerGear_Collapse(ObjTokeidai* this, GlobalContext* globalCtx) {
|
||||
void ObjTokeidai_ExteriorGear_Collapse(ObjTokeidai* this, GlobalContext* globalCtx) {
|
||||
if ((this->actor.bgCheckFlags & 1) || this->actor.world.pos.y < 0.0f) {
|
||||
this->actionFunc = ObjTokeidai_DoNothing;
|
||||
} else {
|
||||
|
|
@ -302,9 +303,9 @@ void ObjTokeidai_TowerGear_Collapse(ObjTokeidai* this, GlobalContext* globalCtx)
|
|||
}
|
||||
}
|
||||
|
||||
void ObjTokeidai_TowerGear_OpenedIdle(ObjTokeidai* this, GlobalContext* globalCtx) {
|
||||
void ObjTokeidai_ExteriorGear_OpenedIdle(ObjTokeidai* this, GlobalContext* globalCtx) {
|
||||
if (func_800EE29C(globalCtx, 0x84) && globalCtx->csCtx.npcActions[func_800EE200(globalCtx, 0x84)]->unk0 == 2) {
|
||||
this->actionFunc = ObjTokeidai_TowerGear_Collapse;
|
||||
this->actionFunc = ObjTokeidai_ExteriorGear_Collapse;
|
||||
this->actor.speedXZ = this->actor.scale.y * 5.0f;
|
||||
this->actor.velocity.y = 0.0f;
|
||||
this->actor.minVelocityY = this->actor.scale.y * -50.0f;
|
||||
|
|
@ -689,23 +690,23 @@ void ObjTokeidai_WallClock_Idle(ObjTokeidai* this, GlobalContext* globalCtx) {
|
|||
ObjTokeidai_RotateOnHourChange(this, globalCtx);
|
||||
}
|
||||
|
||||
void ObjTokeidai_TowerGear_Idle(ObjTokeidai* this, GlobalContext* globalCtx) {
|
||||
void ObjTokeidai_ExteriorGear_Idle(ObjTokeidai* this, GlobalContext* globalCtx) {
|
||||
if (ObjTokeidai_IsPostFirstCycleFinalHours(this, globalCtx)) {
|
||||
this->actor.draw = ObjTokeidai_TowerGear_Draw;
|
||||
this->actor.draw = ObjTokeidai_ExteriorGear_Draw;
|
||||
} else {
|
||||
if (globalCtx->csCtx.state != 0) {
|
||||
this->actor.home.rot.x = 1;
|
||||
this->currentTime += 3;
|
||||
this->actor.draw = ObjTokeidai_TowerGear_Draw;
|
||||
this->actor.draw = ObjTokeidai_ExteriorGear_Draw;
|
||||
} else {
|
||||
if ((globalCtx->actorCtx.unk5 & 2) == 0 &&
|
||||
OBJ_TOKEIDAI_TYPE(&this->actor) == OBJ_TOKEIDAI_TYPE_TOWER_GEAR_TERMINA_FIELD &&
|
||||
OBJ_TOKEIDAI_TYPE(&this->actor) == OBJ_TOKEIDAI_TYPE_EXTERIOR_GEAR_TERMINA_FIELD &&
|
||||
ActorCutscene_GetCurrentIndex() == -1) {
|
||||
this->actor.draw = NULL;
|
||||
}
|
||||
this->currentTime = gSaveContext.time;
|
||||
if (this->actor.home.rot.x != 0) {
|
||||
ObjTokeidai_SetupClockOrGear(this);
|
||||
ObjTokeidai_SetupClockOrExteriorGear(this);
|
||||
this->actor.home.rot.x = 0;
|
||||
}
|
||||
}
|
||||
|
|
@ -781,7 +782,7 @@ void ObjTokeidai_Clock_Draw(Actor* thisx, GlobalContext* globalCtx) {
|
|||
Matrix_InsertXRotation_s(-this->xRotation, MTXMODE_APPLY);
|
||||
Matrix_InsertTranslation(0.0f, 0.0f, 1791.0f, MTXMODE_APPLY);
|
||||
Matrix_StatePush();
|
||||
Matrix_InsertZRotation_s(-this->minuteRingOrGearRotation, MTXMODE_APPLY);
|
||||
Matrix_InsertZRotation_s(-this->minuteRingOrExteriorGearRotation, MTXMODE_APPLY);
|
||||
gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(globalCtx->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
|
||||
gSPDisplayList(POLY_OPA_DISP++, gClockTowerMinuteRingDL);
|
||||
Matrix_StatePop();
|
||||
|
|
@ -831,7 +832,7 @@ void ObjTokeidai_Counterweight_Draw(Actor* thisx, GlobalContext* globalCtx) {
|
|||
CLOSE_DISPS(globalCtx->state.gfxCtx);
|
||||
}
|
||||
|
||||
void ObjTokeidai_TowerGear_Draw(Actor* thisx, GlobalContext* globalCtx) {
|
||||
void ObjTokeidai_ExteriorGear_Draw(Actor* thisx, GlobalContext* globalCtx) {
|
||||
ObjTokeidai* this = THIS;
|
||||
|
||||
OPEN_DISPS(globalCtx->state.gfxCtx);
|
||||
|
|
@ -842,7 +843,7 @@ void ObjTokeidai_TowerGear_Draw(Actor* thisx, GlobalContext* globalCtx) {
|
|||
Matrix_InsertXRotation_s(-this->xRotation, MTXMODE_APPLY);
|
||||
Matrix_RotateY(thisx->shape.rot.y, MTXMODE_APPLY);
|
||||
Matrix_InsertTranslation(0.0f, 0.0f, 1791.0f, MTXMODE_APPLY);
|
||||
Matrix_InsertZRotation_s(this->minuteRingOrGearRotation, MTXMODE_APPLY);
|
||||
Matrix_InsertZRotation_s(this->minuteRingOrExteriorGearRotation, MTXMODE_APPLY);
|
||||
gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(globalCtx->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
|
||||
func_8012C28C(globalCtx->state.gfxCtx);
|
||||
gSPDisplayList(POLY_OPA_DISP++, gClockTowerExteriorGearDL);
|
||||
|
|
|
|||
|
|
@ -6,11 +6,11 @@
|
|||
#define OBJ_TOKEIDAI_TYPE(thisx) (((thisx)->params & 0xF000) >> 12)
|
||||
|
||||
typedef enum {
|
||||
/* 0 */ OBJ_TOKEIDAI_TYPE_TOWER_GEAR_CLOCK_TOWN,
|
||||
/* 0 */ OBJ_TOKEIDAI_TYPE_EXTERIOR_GEAR_CLOCK_TOWN,
|
||||
/* 1 */ OBJ_TOKEIDAI_TYPE_UNUSED_WALL,
|
||||
/* 2 */ OBJ_TOKEIDAI_TYPE_TOWER_CLOCK_CLOCK_TOWN,
|
||||
/* 3 */ OBJ_TOKEIDAI_TYPE_COUNTERWEIGHT_CLOCK_TOWN,
|
||||
/* 4 */ OBJ_TOKEIDAI_TYPE_TOWER_GEAR_TERMINA_FIELD,
|
||||
/* 4 */ OBJ_TOKEIDAI_TYPE_EXTERIOR_GEAR_TERMINA_FIELD,
|
||||
/* 5 */ OBJ_TOKEIDAI_TYPE_TOWER_CLOCK_TERMINA_FIELD,
|
||||
/* 6 */ OBJ_TOKEIDAI_TYPE_COUNTERWEIGHT_TERMINA_FIELD,
|
||||
/* 8 */ OBJ_TOKEIDAI_TYPE_TOWER_WALLS_TERMINA_FIELD = 8,
|
||||
|
|
@ -27,9 +27,9 @@ typedef struct ObjTokeidai {
|
|||
/* 0x000 */ Actor actor;
|
||||
/* 0x144 */ Gfx* opaDList;
|
||||
/* 0x148 */ Gfx* xluDList;
|
||||
/* 0x14C */ s16 minuteRingOrGearRotation;
|
||||
/* 0x14E */ s16 minuteRingOrGearRotationalVelocity;
|
||||
/* 0x150 */ s16 minuteRingOrGearRotationTimer;
|
||||
/* 0x14C */ s16 minuteRingOrExteriorGearRotation;
|
||||
/* 0x14E */ s16 minuteRingOrExteriorGearRotationalVelocity;
|
||||
/* 0x150 */ s16 minuteRingOrExteriorGearRotationTimer;
|
||||
/* 0x152 */ s16 clockFaceRotation;
|
||||
/* 0x154 */ union {
|
||||
s16 clockFaceRotationalVelocity;
|
||||
|
|
|
|||
|
|
@ -11668,16 +11668,16 @@
|
|||
0x80AB25D8:("func_80AB25D8",),
|
||||
0x80AB261C:("DmChar09_Draw",),
|
||||
0x80AB2790:("ObjTokeidai_GetTargetSunMoonPanelRotation",),
|
||||
0x80AB27B4:("ObjTokeidai_SetupClockOrGear",),
|
||||
0x80AB27B4:("ObjTokeidai_SetupClockOrExteriorGear",),
|
||||
0x80AB2834:("ObjTokeidai_Clock_Init",),
|
||||
0x80AB28C8:("ObjTokeidai_TowerGear_Init",),
|
||||
0x80AB28C8:("ObjTokeidai_ExteriorGear_Init",),
|
||||
0x80AB29F8:("ObjTokeidai_TowerClock_Init",),
|
||||
0x80AB2BBC:("ObjTokeidai_Counterweight_Init",),
|
||||
0x80AB2DEC:("ObjTokeidai_Init",),
|
||||
0x80AB3000:("ObjTokeidai_Destroy",),
|
||||
0x80AB3010:("ObjTokeidai_RotateOnMinuteChange",),
|
||||
0x80AB319C:("ObjTokeidai_TowerGear_Collapse",),
|
||||
0x80AB3240:("ObjTokeidai_TowerGear_OpenedIdle",),
|
||||
0x80AB319C:("ObjTokeidai_ExteriorGear_Collapse",),
|
||||
0x80AB3240:("ObjTokeidai_ExteriorGear_OpenedIdle",),
|
||||
0x80AB32F0:("ObjTokeidai_TowerClock_Fall",),
|
||||
0x80AB3370:("ObjTokeidai_TowerClock_SlideOff",),
|
||||
0x80AB34CC:("ObjTokeidai_TowerClock_OpenedIdle",),
|
||||
|
|
@ -11699,13 +11699,13 @@
|
|||
0x80AB3CCC:("ObjTokeidai_RotateOnHourChange",),
|
||||
0x80AB3ED0:("ObjTokeidai_TowerClock_Idle",),
|
||||
0x80AB4040:("ObjTokeidai_WallClock_Idle",),
|
||||
0x80AB4080:("ObjTokeidai_TowerGear_Idle",),
|
||||
0x80AB4080:("ObjTokeidai_ExteriorGear_Idle",),
|
||||
0x80AB4160:("ObjTokeidai_Counterweight_Idle",),
|
||||
0x80AB4278:("ObjTokeidai_Update",),
|
||||
0x80AB429C:("ObjTokeidai_Draw",),
|
||||
0x80AB4394:("ObjTokeidai_Clock_Draw",),
|
||||
0x80AB4664:("ObjTokeidai_Counterweight_Draw",),
|
||||
0x80AB4894:("ObjTokeidai_TowerGear_Draw",),
|
||||
0x80AB4894:("ObjTokeidai_ExteriorGear_Draw",),
|
||||
0x80AB4D10:("func_80AB4D10",),
|
||||
0x80AB4E34:("func_80AB4E34",),
|
||||
0x80AB4E58:("func_80AB4E58",),
|
||||
|
|
|
|||
Loading…
Reference in New Issue