Document object_obj_tokeidai and improve documentation on ovl_Obj_Tokeidai (#569)

* Document object_obj_tokeidai XML

* Change "outer ring" to "minute ring" to better describe what it is

* Rename "sun and moon disk" to "sun and moon panel"

* Preserve ordering

* Standardize on "staircase to rooftop"

* Standardize on calling it "Exterior Gear" to contrast with all the interior stuff

* Lots more documentation

* Make it more obvious that the macros refer to clock time, not regular time

* More documentation and spacing

* Better document counterweight draw

* Respond to Anghelo's and engineer's reviews

* Split tokeidai into separate files

* Revert "Split tokeidai into separate files"

This reverts commit eed1fe5ff63c9dee7a6799b42090b27d62f60773.
This commit is contained in:
Tom Overton
2022-01-30 17:41:21 -03:00
committed by GitHub
parent 5ebc7c0e35
commit 4543b5ade6
4 changed files with 270 additions and 202 deletions
+77 -55
View File
@@ -1,59 +1,81 @@
<Root>
<!-- Contains objects related to the Clock Tower and various wall clocks. -->
<File Name="object_obj_tokeidai" Segment="6">
<Texture Name="object_obj_tokeidai_TLUT_000000" OutName="tlut_000000" Format="rgba16" Width="4" Height="4" Offset="0x0" />
<Texture Name="object_obj_tokeidai_TLUT_000020" OutName="tlut_000020" Format="rgba16" Width="4" Height="4" Offset="0x20" />
<Texture Name="object_obj_tokeidai_Tex_000040" OutName="tex_000040" Format="i8" Width="64" Height="64" Offset="0x40" />
<Texture Name="object_obj_tokeidai_Tex_001040" OutName="tex_001040" Format="rgba16" Width="32" Height="32" Offset="0x1040" />
<Texture Name="object_obj_tokeidai_Tex_001840" OutName="tex_001840" Format="rgba16" Width="32" Height="32" Offset="0x1840" />
<Texture Name="object_obj_tokeidai_Tex_002040" OutName="tex_002040" Format="rgba16" Width="32" Height="32" Offset="0x2040" />
<Texture Name="object_obj_tokeidai_Tex_002840" OutName="tex_002840" Format="rgba16" Width="32" Height="32" Offset="0x2840" />
<Texture Name="object_obj_tokeidai_Tex_003040" OutName="tex_003040" Format="rgba16" Width="16" Height="32" Offset="0x3040" />
<Texture Name="object_obj_tokeidai_Tex_003440" OutName="tex_003440" Format="rgba16" Width="8" Height="32" Offset="0x3440" />
<Texture Name="object_obj_tokeidai_Tex_003640" OutName="tex_003640" Format="rgba16" Width="16" Height="16" Offset="0x3640" />
<Texture Name="object_obj_tokeidai_Tex_003840" OutName="tex_003840" Format="rgba16" Width="16" Height="16" Offset="0x3840" />
<Texture Name="object_obj_tokeidai_Tex_003A40" OutName="tex_003A40" Format="rgba16" Width="16" Height="16" Offset="0x3A40" />
<Texture Name="object_obj_tokeidai_Tex_003C40" OutName="tex_003C40" Format="rgba16" Width="16" Height="32" Offset="0x3C40" />
<Texture Name="object_obj_tokeidai_Tex_004040" OutName="tex_004040" Format="rgba16" Width="16" Height="16" Offset="0x4040" />
<Texture Name="object_obj_tokeidai_Tex_004240" OutName="tex_004240" Format="rgba16" Width="32" Height="16" Offset="0x4240" />
<Texture Name="object_obj_tokeidai_Tex_004640" OutName="tex_004640" Format="rgba16" Width="32" Height="16" Offset="0x4640" />
<Texture Name="object_obj_tokeidai_Tex_004A40" OutName="tex_004A40" Format="rgba16" Width="32" Height="16" Offset="0x4A40" />
<Texture Name="object_obj_tokeidai_Tex_004E40" OutName="tex_004E40" Format="rgba16" Width="32" Height="16" Offset="0x4E40" />
<Texture Name="object_obj_tokeidai_Tex_005240" OutName="tex_005240" Format="ci4" Width="64" Height="64" Offset="0x5240" />
<Texture Name="object_obj_tokeidai_Tex_005A40" OutName="tex_005A40" Format="ci4" Width="64" Height="64" Offset="0x5A40" />
<Texture Name="object_obj_tokeidai_Tex_006240" OutName="tex_006240" Format="rgba16" Width="8" Height="8" Offset="0x6240" />
<!-- <Blob Name="object_obj_tokeidai_Blob_0062C0" Size="0x1000" Offset="0x62C0" /> -->
<Texture Name="object_obj_tokeidai_Tex_0072C0" OutName="tex_0072C0" Format="ia8" Width="32" Height="64" Offset="0x72C0" />
<Texture Name="object_obj_tokeidai_Tex_007AC0" OutName="tex_007AC0" Format="i8" Width="32" Height="32" Offset="0x7AC0" />
<Texture Name="object_obj_tokeidai_Tex_007EC0" OutName="tex_007EC0" Format="i4" Width="64" Height="64" Offset="0x7EC0" />
<Texture Name="object_obj_tokeidai_Tex_0086C0" OutName="tex_0086C0" Format="i4" Width="64" Height="64" Offset="0x86C0" />
<Texture Name="object_obj_tokeidai_Tex_008EC0" OutName="tex_008EC0" Format="i4" Width="64" Height="64" Offset="0x8EC0" />
<DList Name="object_obj_tokeidai_DL_009A00" Offset="0x9A00" />
<DList Name="object_obj_tokeidai_DL_009A08" Offset="0x9A08" />
<Texture Name="object_obj_tokeidai_Tex_009B48" OutName="tex_009B48" Format="rgba16" Width="32" Height="32" Offset="0x9B48" />
<Texture Name="object_obj_tokeidai_Tex_00A348" OutName="tex_00A348" Format="i4" Width="64" Height="64" Offset="0xA348" />
<DList Name="object_obj_tokeidai_DL_00B0C0" Offset="0xB0C0" />
<DList Name="object_obj_tokeidai_DL_00B208" Offset="0xB208" />
<TextureAnimation Name="object_obj_tokeidai_Matanimheader_00B4E4" Offset="0xB4E4" />
<DList Name="object_obj_tokeidai_DL_00BA70" Offset="0xBA70" />
<DList Name="object_obj_tokeidai_DL_00BA78" Offset="0xBA78" />
<DList Name="object_obj_tokeidai_DL_00BEE0" Offset="0xBEE0" />
<DList Name="object_obj_tokeidai_DL_00BEE8" Offset="0xBEE8" />
<DList Name="object_obj_tokeidai_DL_00C360" Offset="0xC360" />
<DList Name="object_obj_tokeidai_DL_00C368" Offset="0xC368" />
<DList Name="object_obj_tokeidai_DL_00CF20" Offset="0xCF20" />
<DList Name="object_obj_tokeidai_DL_00CF28" Offset="0xCF28" />
<DList Name="object_obj_tokeidai_DL_00D380" Offset="0xD380" />
<DList Name="object_obj_tokeidai_DL_00D388" Offset="0xD388" />
<DList Name="object_obj_tokeidai_DL_00D8E0" Offset="0xD8E0" />
<DList Name="object_obj_tokeidai_DL_00D8E8" Offset="0xD8E8" />
<Texture Name="object_obj_tokeidai_Tex_00DAC0" OutName="tex_00DAC0" Format="rgba16" Width="16" Height="32" Offset="0xDAC0" />
<DList Name="object_obj_tokeidai_DL_00E810" Offset="0xE810" />
<DList Name="object_obj_tokeidai_DL_00E818" Offset="0xE818" />
<DList Name="object_obj_tokeidai_DL_00F510" Offset="0xF510" />
<DList Name="object_obj_tokeidai_DL_00F518" Offset="0xF518" />
<Texture Name="object_obj_tokeidai_Tex_00F7F8" OutName="tex_00F7F8" Format="rgba16" Width="16" Height="32" Offset="0xF7F8" />
<Texture Name="object_obj_tokeidai_Tex_00FBF8" OutName="tex_00FBF8" Format="rgba16" Width="64" Height="32" Offset="0xFBF8" />
<Texture Name="object_obj_tokeidai_Tex_010BF8" OutName="tex_010BF8" Format="rgba16" Width="64" Height="32" Offset="0x10BF8" />
<Texture Name="object_obj_tokeidai_Tex_011BF8" OutName="tex_011BF8" Format="rgba16" Width="8" Height="8" Offset="0x11BF8" />
<Texture Name="gClockTowerClockFaceTopTLUT" OutName="clock_tower_clock_face_top_tlut" Format="rgba16" Width="4" Height="4" Offset="0x0" />
<Texture Name="gClockTowerClockFaceBottomTLUT" OutName="clock_tower_clock_face_bottom_tlut" Format="rgba16" Width="4" Height="4" Offset="0x20" />
<Texture Name="gClockTowerSpotlightShineTex" OutName="clock_tower_spotlight_shine" Format="i8" Width="64" Height="64" Offset="0x40" />
<!-- Generic brick texture used for multiple pieces of the Clock Tower (counterweight, unused tower wall, staircase to rooftop) -->
<Texture Name="gClockTowerBrickTex" OutName="clock_tower_bricks" Format="rgba16" Width="32" Height="32" Offset="0x1040" />
<Texture Name="gClockTowerCounterweightBeamSide1Tex" OutName="clock_tower_counterweight_beam_side1" Format="rgba16" Width="32" Height="32" Offset="0x1840" />
<Texture Name="gClockTowerCounterweightBeamSide2Tex" OutName="clock_tower_counterweight_beam_side2" Format="rgba16" Width="32" Height="32" Offset="0x2040" />
<Texture Name="gClockTowerExteriorGearFaceTex" OutName="clock_tower_exterior_gear_face" Format="rgba16" Width="32" Height="32" Offset="0x2840" />
<Texture Name="gClockTowerExteriorGearSidesAndMinuteRingBackTex" OutName="clock_tower_exterior_gear_sides_and_minute_ring_back" Format="rgba16" Width="16" Height="32" Offset="0x3040" />
<Texture Name="gClockTowerClockCenterTex" OutName="clock_tower_clock_center" Format="rgba16" Width="8" Height="32" Offset="0x3440" />
<Texture Name="gClockTowerClockCenterSidesTex" OutName="clock_tower_clock_center_sides" Format="rgba16" Width="16" Height="16" Offset="0x3640" />
<Texture Name="gClockTowerHandTex" OutName="clock_tower_hand" Format="rgba16" Width="16" Height="16" Offset="0x3840" />
<Texture Name="gClockTowerSunAndMoonPanelSidesTex" OutName="clock_tower_sun_and_moon_panel_sides" Format="rgba16" Width="16" Height="16" Offset="0x3A40" />
<Texture Name="gClockTowerSunAndMoonPanelMoonTex" OutName="clock_tower_sun_and_moon_panel_moon" Format="rgba16" Width="16" Height="32" Offset="0x3C40" />
<Texture Name="gClockTowerSunAndMoonPanelSunTex" OutName="clock_tower_sun_and_moon_panel_sun" Format="rgba16" Width="16" Height="16" Offset="0x4040" />
<Texture Name="gClockTowerMinuteRingFace1Tex" OutName="clock_tower_minute_ring_face_1" Format="rgba16" Width="32" Height="16" Offset="0x4240" />
<Texture Name="gClockTowerMinuteRingFace2Tex" OutName="clock_tower_minute_ring_face_2" Format="rgba16" Width="32" Height="16" Offset="0x4640" />
<Texture Name="gClockTowerMinuteRingFace3Tex" OutName="clock_tower_minute_ring_face_3" Format="rgba16" Width="32" Height="16" Offset="0x4A40" />
<Texture Name="gClockTowerMinuteRingSidesTex" OutName="clock_tower_minute_ring_sides" Format="rgba16" Width="32" Height="16" Offset="0x4E40" />
<Texture Name="gClockTowerClockFaceTopTex" OutName="clock_tower_clock_face_top" Format="ci4" Width="64" Height="64" Offset="0x5240" />
<Texture Name="gClockTowerClockFaceBottomTex" OutName="clock_tower_clock_face_bottom" Format="ci4" Width="64" Height="64" Offset="0x5A40" />
<Texture Name="gClockTowerClockFacePanelBarTex" OutName="clock_tower_clock_face_panel_bar" Format="rgba16" Width="8" Height="8" Offset="0x6240" />
<Texture Name="gClockTowerUnusedBrickTex" OutName="clock_tower_unused_bricks" Format="rgba16" Width="32" Height="32" Offset="0x62C0" />
<Texture Name="gClockTowerUnusedMaskTex" OutName="clock_tower_unused_mask" Format="i4" Width="64" Height="64" Offset="0x6AC0" />
<Texture Name="gClockTowerSpotlightBeamTex" OutName="clock_tower_spotlight_beam" Format="ia8" Width="32" Height="64" Offset="0x72C0" />
<Texture Name="gClockTowerSpotlightMaskTex" OutName="clock_tower_spotlight_mask" Format="i8" Width="32" Height="32" Offset="0x7AC0" />
<Texture Name="gClockTowerCounterweightMaskTex" OutName="clock_tower_counterweight_mask" Format="i4" Width="64" Height="64" Offset="0x7EC0" />
<Texture Name="gClockTowerUnusedTowerWallMaskTex" OutName="clock_tower_unused_tower_wall_mask" Format="i4" Width="64" Height="64" Offset="0x86C0" />
<Texture Name="gClockTowerStaircaseToRooftopMaskTex" OutName="clock_tower_staircase_to_rooftop_mask" Format="i4" Width="64" Height="64" Offset="0x8EC0" />
<!-- Probably intended to be used as the xluDList for Clock Tower Termina Field Walls -->
<DList Name="gClockTowerUnusedEmpty1DL" Offset="0x9A00" />
<DList Name="gClockTowerTerminaFieldWallsDL" Offset="0x9A08" />
<Texture Name="gClockTowerTerminaFieldWallsBrickTex" OutName="clock_tower_termina_field_walls_brick" Format="rgba16" Width="32" Height="32" Offset="0x9B48" />
<Texture Name="gClockTowerTerminaFieldWallsMask" OutName="clock_tower_termina_field_walls_mask" Format="i4" Width="64" Height="64" Offset="0xA348" />
<DList Name="gClockTowerSpotlightDL" Offset="0xB0C0" />
<DList Name="gClockTowerCounterweightDL" Offset="0xB208" />
<TextureAnimation Name="gClockTowerUnusedTexAnim" Offset="0xB4E4" />
<!-- Probably intended to be used as the xluDList for Clock Tower Exterior Gear -->
<DList Name="gClockTowerUnusedEmpty2DL" Offset="0xBA70" />
<DList Name="gClockTowerExteriorGearDL" Offset="0xBA78" />
<!-- Probably intended to be used as the xluDList for Clock Tower Center and Hand -->
<DList Name="gClockTowerUnusedEmpty3DL" Offset="0xBEE0" />
<DList Name="gClockTowerClockCenterAndHandDL" Offset="0xBEE8" />
<!-- Probably intended to be used as the xluDList for Clock Tower Sun and Moon Panel -->
<DList Name="gClockTowerUnusedEmpty4DL" Offset="0xC360" />
<DList Name="gClockTowerSunAndMoonPanelDL" Offset="0xC368" />
<!-- Probably intended to be used as the xluDList for Clock Tower Minute Ring -->
<DList Name="gClockTowerUnusedEmpty5DL" Offset="0xCF20" />
<DList Name="gClockTowerMinuteRingDL" Offset="0xCF28" />
<!-- Probably intended to be used as the xluDList for Clock Tower Unused Tower Wall -->
<DList Name="gClockTowerUnusedEmpty6DL" Offset="0xD380" />
<DList Name="gClockTowerUnusedTowerWallDL" Offset="0xD388" />
<!-- Used as the xluDList for Staircase to Rooftop -->
<DList Name="gClockTowerEmptyDL" Offset="0xD8E0" />
<DList Name="gClockTowerStaircaseToRooftopDL" Offset="0xD8E8" />
<Texture Name="gClockTowerClockFaceBackTex" OutName="clock_tower_clock_face_back" Format="rgba16" Width="16" Height="32" Offset="0xDAC0" />
<!-- Probably intended to be used as the xluDList for Clock Tower Clock Face -->
<DList Name="gClockTowerUnusedEmpty7DL" Offset="0xE810" />
<DList Name="gClockTowerClockFace" Offset="0xE818" />
<!-- Probably intended to be used as the xluDList for Wall Clock Clock Face -->
<DList Name="gClockTowerUnusedEmpty8DL" Offset="0xF510" />
<DList Name="gWallClockClockFace" Offset="0xF518" />
<Texture Name="gWallClockClockFaceBackTex" OutName="wall_clock_clock_face_back" Format="rgba16" Width="16" Height="32" Offset="0xF7F8" />
<Texture Name="gWallClockClockFaceBottomTex" OutName="wall_clock_clock_face_bottom" Format="rgba16" Width="64" Height="32" Offset="0xFBF8" />
<Texture Name="gWallClockClockFaceTopTex" OutName="wall_clock_clock_face_top" Format="rgba16" Width="64" Height="32" Offset="0x10BF8" />
<Texture Name="gWallClockClockFacePanelBarTex" OutName="wall_clock_clock_face_panel_bar" Format="rgba16" Width="8" Height="8" Offset="0x11BF8" />
</File>
</Root>
File diff suppressed because it is too large Load Diff
@@ -6,17 +6,17 @@
#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,
/* 9 */ OBJ_TOKEIDAI_TYPE_WALL_CLOCK,
/* 10 */ OBJ_TOKEIDAI_TYPE_SMALL_WALL_CLOCK,
/* 11 */ OBJ_TOKEIDAI_TYPE_STAIRCASE_INTO_TOWER,
/* 11 */ OBJ_TOKEIDAI_TYPE_STAIRCASE_TO_ROOFTOP,
} ObjTokeidaiType;
struct ObjTokeidai;
@@ -27,9 +27,9 @@ typedef struct ObjTokeidai {
/* 0x000 */ Actor actor;
/* 0x144 */ Gfx* opaDList;
/* 0x148 */ Gfx* xluDList;
/* 0x14C */ s16 outerRingOrGearRotation;
/* 0x14E */ s16 outerRingOrGearRotationalVelocity;
/* 0x150 */ s16 outerRingOrGearRotationTimer;
/* 0x14C */ s16 minuteRingOrExteriorGearRotation;
/* 0x14E */ s16 minuteRingOrExteriorGearRotationalVelocity;
/* 0x150 */ s16 minuteRingOrExteriorGearRotationTimer;
/* 0x152 */ s16 clockFaceRotation;
/* 0x154 */ union {
s16 clockFaceRotationalVelocity;
@@ -44,9 +44,9 @@ typedef struct ObjTokeidai {
s16 counterweightRotationalAcceleration;
s16 aerialClockFaceSpeed;
};
/* 0x158 */ s32 sunMoonDiskRotation;
/* 0x158 */ s32 sunMoonPanelRotation;
/* 0x15C */ union {
s16 sunMoonDiskRotationalVelocity;
s16 sunMoonPanelRotationalVelocity;
s16 fallingClockFaceRotationalVelocity;
};
/* 0x15E */ s16 yTranslation;
@@ -58,7 +58,7 @@ typedef struct ObjTokeidai {
s32 clockHour;
s32 spotlightIntensity;
};
/* 0x170 */ u16 currentTime;
/* 0x170 */ u16 clockTime; // can differ from the actual time, e.g., in cutscenes
/* 0x174 */ ObjTokeidaiActionFunc actionFunc;
} ObjTokeidai; // size = 0x178
+10 -10
View File
@@ -11667,24 +11667,24 @@
0x80AB2544:("DmChar09_Update",),
0x80AB25D8:("func_80AB25D8",),
0x80AB261C:("DmChar09_Draw",),
0x80AB2790:("ObjTokeidai_GetTargetSunMoonDiskRotation",),
0x80AB27B4:("ObjTokeidai_SetupClockOrGear",),
0x80AB2790:("ObjTokeidai_GetTargetSunMoonPanelRotation",),
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",),
0x80AB3544:("ObjTokeidai_Counterweight_Collapse",),
0x80AB3598:("ObjTokeidai_Counterweight_OpenedIdle",),
0x80AB363C:("ObjTokeidai_Walls_Collapse",),
0x80AB365C:("ObjTokeidai_Walls_Idle",),
0x80AB363C:("ObjTokeidai_TerminaFieldWalls_Collapse",),
0x80AB365C:("ObjTokeidai_TerminaFieldWalls_Idle",),
0x80AB36C4:("ObjTokeidai_TowerTransformation_EndCutscene",),
0x80AB3808:("ObjTokeidai_TowerOpening_FinishOpening",),
0x80AB3880:("ObjTokeidai_TowerOpening_Wait",),
@@ -11694,18 +11694,18 @@
0x80AB3B34:("ObjTokeidai_TowerOpening_Start",),
0x80AB3BB0:("ObjTokeidai_SetupTowerOpening",),
0x80AB3BD8:("ObjTokeidai_DoNothing",),
0x80AB3BE8:("ObjTokeidai_StaircaseIntoTower_Idle",),
0x80AB3BE8:("ObjTokeidai_StaircaseToRooftop_Idle",),
0x80AB3C50:("ObjTokeidai_IsPostFirstCycleFinalHours",),
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",),