1
0
Fork 0
mirror of https://github.com/zeldaret/oot.git synced 2025-05-09 18:43:45 +00:00
This commit is contained in:
Leonid Kapitonov 2025-05-07 05:54:34 +09:00 committed by GitHub
commit 236f3d77ae
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
6 changed files with 850 additions and 747 deletions

View file

@ -1,26 +1,67 @@
<Root>
<!-- Goron -->
<File Name="object_oF1d_map" Segment="6">
<!-- animations -->
<Animation Name="gGoronAnim_000750" Offset="0x750"/>
<Animation Name="gGoronAnim_000D5C" Offset="0xD5C"/>
<Animation Name="gGoronAnim_00161C" Offset="0x161C"/>
<Animation Name="gGoronAnim_001A00" Offset="0x1A00"/>
<Animation Name="gGoronAnim_0021D0" Offset="0x21D0"/>
<Animation Name="gGoronAnim_0029A8" Offset="0x29A8"/>
<Animation Name="gGoronAnim_002D80" Offset="0x2D80"/>
<Animation Name="gGoronAnim_003768" Offset="0x3768"/>
<Animation Name="gGoronAnim_0038E4" Offset="0x38E4"/>
<Animation Name="gGoronAnim_004930" Offset="0x4930"/>
<Animation Name="gGoronAnim_010590" Offset="0x10590"/>
<DList Name="gGoronDL_00BD80" Offset="0xBD80"/>
<DList Name="gGoronDL_00C140" Offset="0xC140"/>
<DList Name="gGoronDL_00FD40" Offset="0xFD40"/>
<DList Name="gGoronDL_00FD50" Offset="0xFD50"/>
<Animation Name="gGoronSobbingAnim" Offset="0x750"/>
<Animation Name="gGoronShakingAnim" Offset="0xD5C"/>
<Animation Name="gGoronUncurlToProneAnim" Offset="0x161C"/>
<Animation Name="gGoronProneAnim" Offset="0x1A00"/>
<Animation Name="gGoronScratchingAnim" Offset="0x21D0"/>
<Animation Name="gGoronWalkingAnim" Offset="0x29A8"/>
<Animation Name="gGoronEyedropsTakenAnim" Offset="0x2D80"/>
<Animation Name="gGoronCryingAnim" Offset="0x3768"/>
<Animation Name="gGoronEyedropsAnim" Offset="0x38E4"/>
<Animation Name="gGoronUncurlSitStandAnim" Offset="0x4930"/>
<Animation Name="gGoronSidestepAnim" Offset="0x10590"/>
<!-- skeleton, limb none -->
<Skeleton Name="gGoronSkel" Type="Flex" LimbType="Standard" Offset="0xFEF0"/>
<!-- limbs -->
<Limb Name="gGoronRootLimb" LimbType="Standard" Offset="0xFDE0"/>
<Limb Name="gGoronWaistLimb" LimbType="Standard" Offset="0xFDEC"/>
<Limb Name="gGoronLegsLimb" LimbType="Standard" Offset="0xFDF8"/>
<Limb Name="gGoronLeftThighLimb" LimbType="Standard" Offset="0xFE04"/>
<Limb Name="gGoronLeftShinLimb" LimbType="Standard" Offset="0xFE10"/>
<Limb Name="gGoronLeftFootLimb" LimbType="Standard" Offset="0xFE1C"/>
<Limb Name="gGoronRightThighLimb" LimbType="Standard" Offset="0xFE28"/>
<Limb Name="gGoronRightShinLimb" LimbType="Standard" Offset="0xFE34"/>
<Limb Name="gGoronRightFootLimb" LimbType="Standard" Offset="0xFE40"/>
<Limb Name="gGoronTorsoLimb" LimbType="Standard" Offset="0xFE4C"/>
<Limb Name="gGoronLeftArmLimb" LimbType="Standard" Offset="0xFE58"/>
<Limb Name="gGoronLeftForearmLimb" LimbType="Standard" Offset="0xFE64"/>
<Limb Name="gGoronLeftHandLimb" LimbType="Standard" Offset="0xFE70"/>
<Limb Name="gGoronRightArmLimb" LimbType="Standard" Offset="0xFE7C"/>
<Limb Name="gGoronRightForearmLimb" LimbType="Standard" Offset="0xFE88"/>
<Limb Name="gGoronRightHandLimb" LimbType="Standard" Offset="0xFE94"/>
<Limb Name="gGoronHeadLimb" LimbType="Standard" Offset="0xFEA0"/>
<!-- limb display lists -->
<DList Name="gGoronWaistDL" Offset="0x8708"/>
<DList Name="gGoronLeftThighDL" Offset="0x8C80"/>
<DList Name="gGoronLeftShinDL" Offset="0x8D70"/>
<DList Name="gGoronLeftFootDL" Offset="0x8EC0"/>
<DList Name="gGoronRightThighDL" Offset="0x87D0"/>
<DList Name="gGoronRightShinDL" Offset="0x88C0"/>
<DList Name="gGoronRightFootDL" Offset="0x8A10"/>
<DList Name="gGoronTorsoDL" Offset="0x6F90"/>
<DList Name="gGoronLeftArmDL" Offset="0x8218"/>
<DList Name="gGoronLeftForearmDL" Offset="0x83A0"/>
<DList Name="gGoronLeftHandDL" Offset="0x84E0"/>
<DList Name="gGoronRightArmDL" Offset="0x7D28"/>
<DList Name="gGoronRightForearmDL" Offset="0x7EB0"/>
<DList Name="gGoronRightHandDL" Offset="0x7FF0"/>
<DList Name="gGoronHeadDL" Offset="0x7458"/>
<!-- states display lists -->
<DList Name="gGoronCurledUpDL" Offset="0xBD80"/>
<DList Name="gGoronRollingDL" Offset="0xC140"/>
<!-- effects display lists -->
<DList Name="gGoronParticleMaterialDL" Offset="0xFD40"/>
<DList Name="gGoronParticleDL" Offset="0xFD50"/>
<!-- palettes -->
<Texture Name="object_oF1d_map_TLUT_00C640" OutName="tlut_0000C640" Format="rgba16" Width="16" Height="16" Offset="0xC640"/>
<!-- Eye textures -->

View file

@ -266,7 +266,7 @@ void func_8097CEEC(DemoGo* this, PlayState* play) {
}
void func_8097CF20(DemoGo* this, PlayState* play, s32 arg2) {
AnimationHeader* animation = &gGoronAnim_0029A8;
AnimationHeader* animation = &gGoronWalkingAnim;
if (arg2 != 0) {
Animation_Change(&this->skelAnime, animation, 1.0f, 0.0f, Animation_GetLastFrame(animation), ANIMMODE_LOOP,
-8.0f);
@ -341,7 +341,7 @@ void DemoGo_Update(Actor* thisx, PlayState* play) {
void DemoGo_Init(Actor* thisx, PlayState* play) {
DemoGo* this = (DemoGo*)thisx;
AnimationHeader* animation = &gGoronAnim_004930;
AnimationHeader* animation = &gGoronUncurlSitStandAnim;
ActorShape_Init(&this->actor.shape, 0.0f, ActorShadow_DrawCircle, 30.0f);
SkelAnime_InitFlex(play, &this->skelAnime, &gGoronSkel, NULL, NULL, NULL, 0);

File diff suppressed because it is too large Load diff

View file

@ -7,20 +7,47 @@
struct EnGo;
typedef void (*EnGoActionFunc)(struct EnGo*, struct PlayState*);
typedef u16 (*callback1_80A3ED24)(struct PlayState*, struct EnGo*);
typedef s16 (*callback2_80A3ED24)(struct PlayState*, struct EnGo*);
// WIP type docs
// /* 0x00 */ GORON1_CITY_LINK,
// /* 0x10 */ GORON1_FIRE_GENERIC,
// /* 0x20 */ GORON1_DMT_DC_ENTRANCE,
// /* 0x30 */ GORON1_DMT_ROLLING_SMALL,
// /* 0x40 */ GORON1_DMT_BOMB_FLOWER,
// /* 0x50 */ GORON1_CITY_ENTRANCE,
// /* 0x60 */ GORON1_CITY_ISLAND,
// /* 0x70 */ GORON1_CITY_LOST_WOODS,
// /* 0x80 */ // Not Used
// /* 0x90 */ GORON1_DMT_BIGGORON,
typedef enum GoronLimb {
/* 0 */ GORON_LIMB_NONE, // skeleton itself
/* 1 */ GORON_LIMB_ROOT,
/* 2 */ GORON_LIMB_WAIST, // drives bottom submesh
/* 3 */ GORON_LIMB_LEGS,
/* 4 */ GORON_LIMB_LEFT_THIGH,
/* 5 */ GORON_LIMB_LEFT_SHIN,
/* 6 */ GORON_LIMB_LEFT_FOOT,
/* 7 */ GORON_LIMB_RIGHT_THIGH,
/* 8 */ GORON_LIMB_RIGHT_SHIN,
/* 9 */ GORON_LIMB_RIGHT_FOOT,
/* 10 */ GORON_LIMB_TORSO, // drives top submesh
/* 11 */ GORON_LIMB_LEFT_ARM,
/* 12 */ GORON_LIMB_LEFT_FOREARM,
/* 13 */ GORON_LIMB_LEFT_HAND,
/* 14 */ GORON_LIMB_RIGHT_ARM,
/* 15 */ GORON_LIMB_RIGHT_FOREARM,
/* 16 */ GORON_LIMB_RIGHT_HAND,
/* 17 */ GORON_LIMB_HEAD,
/* 18 */ GORON_LIMB_MAX
} GoronLimb;
typedef enum EnGoType {
ENGO_TYPE_CITY_LINK = (0 << 4),
ENGO_TYPE_FIRE_GENERIC = (1 << 4),
ENGO_TYPE_DMT_DC_ENTRANCE = (2 << 4),
ENGO_TYPE_DMT_ROLLING_SMALL = (3 << 4),
ENGO_TYPE_DMT_BOMB_FLOWER = (4 << 4),
ENGO_TYPE_CITY_ENTRANCE = (5 << 4),
ENGO_TYPE_CITY_ISLAND = (6 << 4),
ENGO_TYPE_CITY_LOST_WOODS = (7 << 4),
ENGO_TYPE_DMT_BIGGORON = (9 << 4)
} EnGoType;
#define ENGO_GET_PATH_INDEX(this) PARAMS_GET_U((this)->actor.params, 0, 4)
#define ENGO_GET_TYPE(this) PARAMS_GET_NOSHIFT((this)->actor.params, 4, 4)
#define ENGO_IS_CAGE_OPEN_SWITCH_FLAG(this) PARAMS_GET_NOMASK((this)->actor.params, 8)
#define ENGO_PATH_NONE NBITS_TO_MASK(4)
#define ENGO_GET_SPEED_SCALE(this) (ENGO_GET_TYPE(this) == ENGO_TYPE_DMT_BIGGORON ? 0.5f : 1.0f)
#define EN_GO_EFFECT_COUNT 20
@ -44,18 +71,18 @@ typedef struct EnGo {
/* 0x0194 */ ColliderCylinder collider;
/* 0x01E0 */ NpcInteractInfo interactInfo;
/* 0x0208 */ char unk_208[0x4];
/* 0x020C */ s16 unk_20C;
/* 0x020E */ s16 unk_20E;
/* 0x0210 */ s16 unk_210;
/* 0x0212 */ s16 unk_212;
/* 0x0214 */ s16 unk_214;
/* 0x0216 */ s16 unk_216;
/* 0x0218 */ s16 unk_218;
/* 0x021A */ s16 unk_21A;
/* 0x021C */ s16 unk_21C;
/* 0x021E */ s16 unk_21E;
/* 0x0220 */ s16 fidgetTableY[18];
/* 0x0244 */ s16 fidgetTableZ[18];
/* 0x020C */ s16 gaveSword;
/* 0x020E */ s16 knockbackCooldown;
/* 0x0210 */ s16 curledTimer;
/* 0x0212 */ s16 attentionCooldown;
/* 0x0214 */ s16 blinkTimer; // unused
/* 0x0216 */ s16 eyeTexIndex; // unused
/* 0x0218 */ s16 waypoint;
/* 0x021A */ s16 bounceCounter;
/* 0x021C */ s16 bounceTimer;
/* 0x021E */ s16 eyedropsTimer;
/* 0x0220 */ s16 fidgetTableY[GORON_LIMB_MAX];
/* 0x0244 */ s16 fidgetTableZ[GORON_LIMB_MAX];
/* 0x0268 */ EnGoEffect effects[EN_GO_EFFECT_COUNT];
} EnGo; // size = 0x06C8

File diff suppressed because it is too large Load diff

View file

@ -9,23 +9,6 @@ struct EnGo2;
typedef void (*EnGo2ActionFunc)(struct EnGo2*, struct PlayState*);
typedef enum GoronType {
/* 0x00 */ GORON_CITY_ROLLING_BIG,
/* 0x01 */ GORON_CITY_LINK,
/* 0x02 */ GORON_DMT_BIGGORON,
/* 0x03 */ GORON_FIRE_GENERIC,
/* 0x04 */ GORON_DMT_BOMB_FLOWER,
/* 0x05 */ GORON_DMT_ROLLING_SMALL,
/* 0x06 */ GORON_DMT_DC_ENTRANCE,
/* 0x07 */ GORON_CITY_ENTRANCE,
/* 0x08 */ GORON_CITY_ISLAND,
/* 0x09 */ GORON_CITY_LOWEST_FLOOR,
/* 0x0A */ GORON_CITY_STAIRWELL,
/* 0x0B */ GORON_CITY_LOST_WOODS,
/* 0x0C */ GORON_DMT_FAIRY_HINT,
/* 0x0D */ GORON_MARKET_BAZAAR
} GoronType;
// WIP fire temple type docs
// /* 0x00 */ UNUSED
// /* 0x01 */ GORON_FIRE_LAVA_ROOM_OPEN
@ -40,21 +23,20 @@ typedef enum GoronType {
// /* 0x0A */ GORON_FIRE_MAZE_UPPER,
// /* 0x0B */ GORON_FIRE_HIGHEST
typedef struct EnGo2DataStruct1 {
typedef struct EnGo2ColliderData {
s16 unused;
s16 yDist;
s16 xzDist;
s16 radius;
s16 height;
} EnGo2DataStruct1; // size = 0xA
} EnGo2ColliderData; // size = 0xA
typedef struct EnGo2DataStruct2 {
f32 shape_unk_10;
typedef struct EnGo2ShapeData {
f32 shadowScale;
f32 scale;
s8 actor_unk_1F;
s8 attentionRangeType;
f32 interactRange;
} EnGo2DataStruct2; // size = 0x10
} EnGo2ShapeData; // size = 0x10
typedef struct EnGo2DustEffectData {
u8 initialTimer;
@ -65,6 +47,30 @@ typedef struct EnGo2DustEffectData {
f32 yAccel;
} EnGo2DustEffectData; // size = 0x18
typedef enum GoronType {
/* 0x0 */ GORON_CITY_HOT_RODDER,
/* 0x1 */ GORON_CITY_LINK,
/* 0x2 */ GORON_DMT_BIGGORON,
/* 0x3 */ GORON_FIRE_GENERIC,
/* 0x4 */ GORON_DMT_BOMB_FLOWER,
/* 0x5 */ GORON_DMT_ROLLING_SMALL,
/* 0x6 */ GORON_DMT_DC_ENTRANCE,
/* 0x7 */ GORON_CITY_ENTRANCE,
/* 0x8 */ GORON_CITY_ISLAND,
/* 0x9 */ GORON_CITY_LOWEST_FLOOR,
/* 0xA */ GORON_CITY_STAIRWELL,
/* 0xB */ GORON_CITY_LOST_WOODS,
/* 0xC */ GORON_DMT_FAIRY_HINT,
/* 0xD */ GORON_MARKET_BAZAAR
} GoronType;
#define ENGO2_GET_TYPE(this) PARAMS_GET_S((this)->actor.params, 0, 5)
#define ENGO2_GET_PATH_INDEX(this) PARAMS_GET_S((this)->actor.params, 5, 5)
#define ENGO2_CAGED_SWITCH_FLAG(this) PARAMS_GET_S((this)->actor.params, 10, 6)
#define ENGO2_PATH_INDEX_MAX NBITS_TO_MASK(5)
#define ENGO2_IS_CAGE_OPEN(play, this) Flags_GetSwitch(play, ENGO2_CAGED_SWITCH_FLAG(this))
#define EN_GO2_EFFECT_COUNT 10
typedef struct EnGo2 {
@ -74,38 +80,35 @@ typedef struct EnGo2 {
/* 0x0194 */ NpcInteractInfo interactInfo;
/* 0x01BC */ ColliderCylinder collider;
/* 0x0208 */ struct Path* path;
/* 0x020C */ u8 unk_20C; // counter for GORON_CITY_LINK animation
/* 0x020D */ u8 dialogState;
/* 0x020C */ u8 messageEntry; // tracks message state changes, like with `BOX_BREAK` or `TEXTID`
/* 0x020D */ u8 messageState; // last known result of `Message_GetState`
/* 0x020E */ u8 reverse;
/* 0x020F */ u8 isAwake; // Conditional
/* 0x020F */ u8 isTalkative;
/* 0x0210 */ s8 waypoint;
/* 0x0211 */ u8 unk_211; // Conditional
// goron link: 0 - rolling, 1 - frozen
// biggoron: 0 - give eyedrops, 1 - applying eyedrops, 2 - getting claimcheck
// generic fire: 0 -
/* 0x0211 */ u8 isUncurled;
/* 0x0212 */ u8 goronState;
/* 0x0213 */ u8 eyeMouthTexState; // 0, 1, 2, 3
/* 0x0213 */ u8 eyeMouthTexState;
/* 0x0214 */ u8 eyeTexIndex;
/* 0x0215 */ u8 mouthTexIndex;
/* 0x0216 */ u8 unk_216; // Set to z rotation, checked by waypoint
/* 0x0216 */ u8 reverseWaypoint; // Set to z rotation, checked by waypoint
/* 0x0218 */ f32 interactRange;
/* 0x021C */ char unk_21C[0x04];
/* 0x0220 */ f32 alpha; // Set to 0, used by func_80A45360, smoothed to this->actor.shape.shadowAlpha from either 0 or 255.0f
/* 0x0220 */ f32 shadowAlpha;
/* 0x0224 */ s16 blinkTimer;
/* 0x0226 */ s16 fidgetTableY[18];
/* 0x024A */ s16 fidgetTableZ[18];
/* 0x0226 */ s16 fidgetTableY[GORON_LIMB_MAX];
/* 0x024A */ s16 fidgetTableZ[GORON_LIMB_MAX];
/* 0x026E */ u16 trackingMode;
/* 0x0270 */ EnGoEffect effects[EN_GO2_EFFECT_COUNT];
/* 0x04A0 */ Vec3f subCamEye;
/* 0x04AC */ Vec3f subCamAt;
/* 0x04B8 */ Vec3s jointTable[18];
/* 0x0524 */ Vec3s morphTable[18];
/* 0x0590 */ s16 unk_590; // timer
/* 0x0592 */ s16 animTimer; // animTimer. Plays NA_SE_EN_MORIBLIN_WALK, NA_SE_EV_IRON_DOOR_OPEN, NA_SE_EV_IRON_DOOR_CLOSE
/* 0x04B8 */ Vec3s jointTable[GORON_LIMB_MAX];
/* 0x0524 */ Vec3s morphTable[GORON_LIMB_MAX];
/* 0x0590 */ s16 bounceTimer;
/* 0x0592 */ s16 animTimer;
/* 0x0594 */ s32 getItemId;
/* 0x0598 */ char unk_598[0x02];
/* 0x059A */ s16 subCamId;
/* 0x059C */ s16 unk_59C;
/* 0x059C */ s16 bounceCounter;
} EnGo2; // size = 0x05A0
#endif