mirror of
https://github.com/izzy2lost/2ship2harkinian-Android.git
synced 2026-06-19 01:20:08 -07:00
EnGe1 OK and documented, document z_snap (#952)
* Move PictoActor typedefs to z64actor.h * OK, data imported * Minor snap stuff * Name most functions and variables * Name most of object, apart from animations * Document snap * Fix actors to use the PictoActor struct * Format * Finish documenting EnGe1 * Finish documenting z_snap and related actors * Format * Review, format * Name last couple of things * bss * Review * Review * bss * Introduce z64snap.h, add SCREEN_TO_DEVICE macros * Back to PROJECTED_TO_SCREEN
This commit is contained in:
@@ -1,63 +1,83 @@
|
||||
<Root>
|
||||
<!-- Assets for white-clothed Gerudo -->
|
||||
<File Name="object_ge1" Segment="6">
|
||||
<Animation Name="object_ge1_Anim_000594" Offset="0x594" />
|
||||
<Animation Name="object_ge1_Anim_000ABC" Offset="0xABC" />
|
||||
<Animation Name="object_ge1_Anim_000CF8" Offset="0xCF8" />
|
||||
<Animation Name="object_ge1_Anim_0013CC" Offset="0x13CC" />
|
||||
<Animation Name="object_ge1_Anim_00202C" Offset="0x202C" />
|
||||
<Animation Name="object_ge1_Anim_002148" Offset="0x2148" />
|
||||
<Animation Name="object_ge1_Anim_002954" Offset="0x2954" />
|
||||
<Animation Name="object_ge1_Anim_002AD8" Offset="0x2AD8" />
|
||||
<Animation Name="object_ge1_Anim_002B98" Offset="0x2B98" />
|
||||
<Limb Name="object_ge1_Standardlimb_002BB0" Type="Standard" EnumName="OBJECT_GE1_LIMB_01" Offset="0x2BB0" />
|
||||
<Limb Name="object_ge1_Standardlimb_002BBC" Type="Standard" EnumName="OBJECT_GE1_LIMB_02" Offset="0x2BBC" />
|
||||
<Limb Name="object_ge1_Standardlimb_002BC8" Type="Standard" EnumName="OBJECT_GE1_LIMB_03" Offset="0x2BC8" />
|
||||
<Limb Name="object_ge1_Standardlimb_002BD4" Type="Standard" EnumName="OBJECT_GE1_LIMB_04" Offset="0x2BD4" />
|
||||
<Limb Name="object_ge1_Standardlimb_002BE0" Type="Standard" EnumName="OBJECT_GE1_LIMB_05" Offset="0x2BE0" />
|
||||
<Limb Name="object_ge1_Standardlimb_002BEC" Type="Standard" EnumName="OBJECT_GE1_LIMB_06" Offset="0x2BEC" />
|
||||
<Limb Name="object_ge1_Standardlimb_002BF8" Type="Standard" EnumName="OBJECT_GE1_LIMB_07" Offset="0x2BF8" />
|
||||
<Limb Name="object_ge1_Standardlimb_002C04" Type="Standard" EnumName="OBJECT_GE1_LIMB_08" Offset="0x2C04" />
|
||||
<Limb Name="object_ge1_Standardlimb_002C10" Type="Standard" EnumName="OBJECT_GE1_LIMB_09" Offset="0x2C10" />
|
||||
<Limb Name="object_ge1_Standardlimb_002C1C" Type="Standard" EnumName="OBJECT_GE1_LIMB_0A" Offset="0x2C1C" />
|
||||
<Limb Name="object_ge1_Standardlimb_002C28" Type="Standard" EnumName="OBJECT_GE1_LIMB_0B" Offset="0x2C28" />
|
||||
<Limb Name="object_ge1_Standardlimb_002C34" Type="Standard" EnumName="OBJECT_GE1_LIMB_0C" Offset="0x2C34" />
|
||||
<Limb Name="object_ge1_Standardlimb_002C40" Type="Standard" EnumName="OBJECT_GE1_LIMB_0D" Offset="0x2C40" />
|
||||
<Limb Name="object_ge1_Standardlimb_002C4C" Type="Standard" EnumName="OBJECT_GE1_LIMB_0E" Offset="0x2C4C" />
|
||||
<Limb Name="object_ge1_Standardlimb_002C58" Type="Standard" EnumName="OBJECT_GE1_LIMB_0F" Offset="0x2C58" />
|
||||
<Skeleton Name="object_ge1_Skel_002CA0" Type="Flex" LimbType="Standard" LimbNone="OBJECT_GE1_LIMB_NONE" LimbMax="OBJECT_GE1_LIMB_MAX" EnumName="object_ge1_Limbs" Offset="0x2CA0" />
|
||||
<Texture Name="object_ge1_TLUT_002CB8" OutName="tlut_002CB8" Format="rgba16" Width="16" Height="16" Offset="0x2CB8" />
|
||||
<Texture Name="object_ge1_Tex_002EB8" OutName="tex_002EB8" Format="ci8" Width="8" Height="8" Offset="0x2EB8" />
|
||||
<Texture Name="object_ge1_Tex_002EF8" OutName="tex_002EF8" Format="ci8" Width="16" Height="16" Offset="0x2EF8" />
|
||||
<Texture Name="object_ge1_Tex_002FF8" OutName="tex_002FF8" Format="ci8" Width="8" Height="16" Offset="0x2FF8" />
|
||||
<!-- <Blob Name="object_ge1_Blob_003078" Size="0x1800" Offset="0x3078" /> -->
|
||||
<Texture Name="object_ge1_Tex_004878" OutName="tex_004878" Format="ci8" Width="32" Height="32" Offset="0x4878" />
|
||||
<Texture Name="object_ge1_Tex_004C78" OutName="tex_004C78" Format="ci8" Width="8" Height="16" Offset="0x4C78" />
|
||||
<Texture Name="object_ge1_Tex_004CF8" OutName="tex_004CF8" Format="ci8" Width="16" Height="16" Offset="0x4CF8" />
|
||||
<Texture Name="object_ge1_Tex_004DF8" OutName="tex_004DF8" Format="ci8" Width="16" Height="16" Offset="0x4DF8" />
|
||||
<Texture Name="object_ge1_Tex_004EF8" OutName="tex_004EF8" Format="ci8" Width="16" Height="16" Offset="0x4EF8" />
|
||||
<Texture Name="object_ge1_Tex_004FF8" OutName="tex_004FF8" Format="ci8" Width="8" Height="8" Offset="0x4FF8" />
|
||||
<Texture Name="object_ge1_Tex_005038" OutName="tex_005038" Format="ci8" Width="8" Height="16" Offset="0x5038" />
|
||||
<Texture Name="object_ge1_Tex_0050B8" OutName="tex_0050B8" Format="ci8" Width="8" Height="8" Offset="0x50B8" />
|
||||
<Texture Name="object_ge1_Tex_0050F8" OutName="tex_0050F8" Format="rgba16" Width="8" Height="8" Offset="0x50F8" />
|
||||
<Texture Name="object_ge1_TLUT_005178" OutName="tlut_005178" Format="rgba16" Width="16" Height="16" Offset="0x5178" />
|
||||
<Texture Name="object_ge1_Tex_005378" OutName="tex_005378" Format="ci8" Width="16" Height="16" Offset="0x5378" />
|
||||
<DList Name="object_ge1_DL_007F78" Offset="0x7F78" />
|
||||
<DList Name="object_ge1_DL_0085A8" Offset="0x85A8" />
|
||||
<DList Name="object_ge1_DL_0089B0" Offset="0x89B0" />
|
||||
<DList Name="object_ge1_DL_008B58" Offset="0x8B58" />
|
||||
<DList Name="object_ge1_DL_008C88" Offset="0x8C88" />
|
||||
<DList Name="object_ge1_DL_008E80" Offset="0x8E80" />
|
||||
<DList Name="object_ge1_DL_009028" Offset="0x9028" />
|
||||
<DList Name="object_ge1_DL_009158" Offset="0x9158" />
|
||||
<DList Name="object_ge1_DL_009350" Offset="0x9350" />
|
||||
<DList Name="object_ge1_DL_009440" Offset="0x9440" />
|
||||
<DList Name="object_ge1_DL_009570" Offset="0x9570" />
|
||||
<DList Name="object_ge1_DL_0097C0" Offset="0x97C0" />
|
||||
<DList Name="object_ge1_DL_009A20" Offset="0x9A20" />
|
||||
<DList Name="object_ge1_DL_009B50" Offset="0x9B50" />
|
||||
<DList Name="object_ge1_DL_009D18" Offset="0x9D18" />
|
||||
<DList Name="object_ge1_DL_00BB08" Offset="0xBB08" />
|
||||
<DList Name="object_ge1_DL_00BDA0" Offset="0xBDA0" />
|
||||
<DList Name="object_ge1_DL_00C000" Offset="0xC000" />
|
||||
<!-- White-clothed Gerudo Animations -->
|
||||
<Animation Name="gGerudoWhiteStandingHeadBowedAnim" Offset="0x594" /><!-- Original name may be "gb_ie" ("home")? -->
|
||||
<Animation Name="gGerudoWhiteSaluteAnim" Offset="0xABC" /><!-- Original name: "gb_keirei" ("salute/bow") -->
|
||||
<Animation Name="gGerudoWhiteStiffeningAnim" Offset="0xCF8" /><!-- Original name: "gb_kochoku" ("stiffening/rigidity") -->
|
||||
<Animation Name="gGerudoWhiteStiffShiveringAnim" Offset="0x13CC" /><!-- Original name: "gb_kochoku_loop" ("stiffening loop") -->
|
||||
<Animation Name="gGerudoWhiteTrudgingOffAnim" Offset="0x202C" /><!-- Original name: "gb_tobotobo" ("totteringly/trudgingly") -->
|
||||
<Animation Name="gGerudoWhiteGreatBayCutsceneAnim" Offset="0x2148" /><!-- one frame used for each part of Great Bay Temple first entry cutscene. Original name: "gb_twister" -->
|
||||
<Animation Name="gGerudoWhiteExcitedClappingAnim" Offset="0x2954" /><!-- Original name: "gb_wakuwaku", ("excited") -->
|
||||
<Animation Name="gGerudoWhiteUnfoldingArmsAnim" Offset="0x2AD8" /><!-- Original name: "ge1_hanasi" ("talk") -->
|
||||
|
||||
<!-- From here to the end this file is identical to OoT's object_ge1, offset 0x0-0x9860 -->
|
||||
<Animation Name="gGerudoWhiteArmsFoldedAnim" Offset="0x2B98" /><!-- Original name: "ge1_matsu" ("waiting") -->
|
||||
|
||||
<!-- White-clothed Gerudo Limbs -->
|
||||
<Limb Name="gGerudoWhiteWaistLimb" Type="Standard" EnumName="GERUDO_WHITE_LIMB_WAIST" Offset="0x2BB0" />
|
||||
<Limb Name="gGerudoWhiteLeftThighLimb" Type="Standard" EnumName="GERUDO_WHITE_LIMB_LEFT_THIGH" Offset="0x2BBC" />
|
||||
<Limb Name="gGerudoWhiteLeftShinLimb" Type="Standard" EnumName="GERUDO_WHITE_LIMB_LEFT_LOWER_LEG" Offset="0x2BC8" />
|
||||
<Limb Name="gGerudoWhiteLeftFootLimb" Type="Standard" EnumName="GERUDO_WHITE_LIMB_LEFT_FOOT" Offset="0x2BD4" />
|
||||
<Limb Name="gGerudoWhiteRightThighLimb" Type="Standard" EnumName="GERUDO_WHITE_LIMB_RIGHT_THIGH" Offset="0x2BE0" />
|
||||
<Limb Name="gGerudoWhiteRightShinLimb" Type="Standard" EnumName="GERUDO_WHITE_LIMB_RIGHT_LOWER_LEG" Offset="0x2BEC" />
|
||||
<Limb Name="gGerudoWhiteRightFootLimb" Type="Standard" EnumName="GERUDO_WHITE_LIMB_RIGHT_FOOT" Offset="0x2BF8" />
|
||||
<Limb Name="gGerudoWhiteTorsoLimb" Type="Standard" EnumName="GERUDO_WHITE_LIMB_TORSO" Offset="0x2C04" />
|
||||
<Limb Name="gGerudoWhiteLeftUpperArmLimb" Type="Standard" EnumName="GERUDO_WHITE_LIMB_LEFT_UPPER_ARM" Offset="0x2C10" />
|
||||
<Limb Name="gGerudoWhiteLeftForearmLimb" Type="Standard" EnumName="GERUDO_WHITE_LIMB_LEFT_FOREARM" Offset="0x2C1C" />
|
||||
<Limb Name="gGerudoWhiteLeftHandLimb" Type="Standard" EnumName="GERUDO_WHITE_LIMB_LEFT_HAND" Offset="0x2C28" />
|
||||
<Limb Name="gGerudoWhiteRightUpperArmLimb" Type="Standard" EnumName="GERUDO_WHITE_LIMB_RIGHT_UPPER_ARM" Offset="0x2C34" />
|
||||
<Limb Name="gGerudoWhiteRightForearmLimb" Type="Standard" EnumName="GERUDO_WHITE_LIMB_RIGHT_FOREARM" Offset="0x2C40" />
|
||||
<Limb Name="gGerudoWhiteRightHandLimb" Type="Standard" EnumName="GERUDO_WHITE_LIMB_RIGHT_HAND" Offset="0x2C4C" />
|
||||
<Limb Name="gGerudoWhiteHeadLimb" Type="Standard" EnumName="GERUDO_WHITE_LIMB_HEAD" Offset="0x2C58" />
|
||||
|
||||
<!-- White-clothed Gerudo Skeleton -->
|
||||
<Skeleton Name="gGerudoWhiteSkel" Type="Flex" LimbType="Standard" LimbNone="GERUDO_WHITE_LIMB_NONE" LimbMax="GERUDO_WHITE_LIMB_MAX" EnumName="GerudoWhiteLimb" Offset="0x2CA0" />
|
||||
|
||||
<Texture Name="gGerudoWhiteGeneralTLUT" OutName="gerudo_white_general_tlut" Format="rgba16" Width="16" Height="16" Offset="0x2CB8" />
|
||||
<Texture Name="gGerudoWhiteSkinGradientTex" OutName="gerudo_white_skin_gradient" Format="ci8" Width="8" Height="8" Offset="0x2EB8" TlutOffset="0x2CB8" />
|
||||
<Texture Name="gGerudoWhiteWhiteFabricLipsTex" OutName="gerudo_white_white_fabric_lips" Format="ci8" Width="16" Height="16" Offset="0x2EF8" TlutOffset="0x2CB8" />
|
||||
<Texture Name="gGerudoWhiteEarTex" OutName="gerudo_white_ear" Format="ci8" Width="8" Height="16" Offset="0x2FF8" TlutOffset="0x2CB8" />
|
||||
|
||||
<!-- White-clothed Gerudo Eye Textures -->
|
||||
<Texture Name="gGerudoWhiteEyeOpenTex" OutName="gerudo_white_eye_open" Format="rgba16" Width="32" Height="32" Offset="0x3078"/>
|
||||
<Texture Name="gGerudoWhiteEyeHalfTex" OutName="gerudo_white_eye_half" Format="rgba16" Width="32" Height="32" Offset="0x3878"/>
|
||||
<Texture Name="gGerudoWhiteEyeClosedTex" OutName="gerudo_white_eye_closed" Format="rgba16" Width="32" Height="32" Offset="0x4078"/>
|
||||
|
||||
<Texture Name="gGerudoWhiteFingersTex" OutName="gerudo_white_fingers" Format="ci8" Width="32" Height="32" Offset="0x4878" TlutOffset="0x2CB8" />
|
||||
<Texture Name="gGerudoWhiteArmletTex" OutName="gerudo_white_armlet" Format="ci8" Width="8" Height="16" Offset="0x4C78" TlutOffset="0x2CB8" />
|
||||
<Texture Name="gGerudoWhiteJacketTex" OutName="gerudo_white_jacket" Format="ci8" Width="16" Height="16" Offset="0x4CF8" TlutOffset="0x2CB8" />
|
||||
<Texture Name="gGerudoWhiteTubeTopTex" OutName="gerudo_white_tube_top" Format="ci8" Width="16" Height="16" Offset="0x4DF8" TlutOffset="0x2CB8" />
|
||||
<Texture Name="gGerudoWhiteNavelTex" OutName="gerudo_white_navel" Format="ci8" Width="16" Height="16" Offset="0x4EF8" TlutOffset="0x2CB8" />
|
||||
<Texture Name="gGerudoWhiteCleavageTex" OutName="gerudo_white_cleavage" Format="ci8" Width="8" Height="8" Offset="0x4FF8" TlutOffset="0x2CB8" />
|
||||
<Texture Name="gGerudoWhiteShoeUpperTex" OutName="gerudo_white_shoe_upper" Format="ci8" Width="8" Height="16" Offset="0x5038" TlutOffset="0x2CB8" />
|
||||
<Texture Name="gGerudoWhiteShoeSoleTex" OutName="gerudo_white_shoe_sole" Format="ci8" Width="8" Height="8" Offset="0x50B8" TlutOffset="0x2CB8" />
|
||||
<Texture Name="gGerudoWhiteCrotchTex" OutName="gerudo_white_crotch" Format="rgba16" Width="8" Height="8" Offset="0x50F8" />
|
||||
|
||||
<!-- White-clothed Gerudo Hair Textures -->
|
||||
<Texture Name="gGerudoWhiteHairTLUT" OutName="gerudo_white_hair_tlut" Format="rgba16" Width="16" Height="16" Offset="0x5178" />
|
||||
<Texture Name="gGerudoWhiteHairTex" OutName="gerudo_white_hair" Format="ci8" Width="16" Height="16" Offset="0x5378" TlutOffset="0x5178" />
|
||||
|
||||
<!-- White-clothed Gerudo Limb DisplayLists -->
|
||||
<DList Name="gGerudoWhiteWaistDL" Offset="0x7F78" />
|
||||
<DList Name="gGerudoWhiteLeftThighDL" Offset="0x85A8" />
|
||||
<DList Name="gGerudoWhiteLeftShinDL" Offset="0x89B0" />
|
||||
<DList Name="gGerudoWhiteLeftFootDL" Offset="0x8B58" />
|
||||
<DList Name="gGerudoWhiteRightThighDL" Offset="0x8C88" />
|
||||
<DList Name="gGerudoWhiteRightShinDL" Offset="0x8E80" />
|
||||
<DList Name="gGerudoWhiteRightFootDL" Offset="0x9028" />
|
||||
<DList Name="gGerudoWhiteTorsoDL" Offset="0x9158" />
|
||||
<DList Name="gGerudoWhiteLeftUpperArmDL" Offset="0x9350" />
|
||||
<DList Name="gGerudoWhiteLeftForearmDL" Offset="0x9440" />
|
||||
<DList Name="gGerudoWhiteLeftHandDL" Offset="0x9570" />
|
||||
<DList Name="gGerudoWhiteRightUpperArmDL" Offset="0x97C0" />
|
||||
<DList Name="gGerudoWhiteRightForearmDL" Offset="0x9A20" />
|
||||
<DList Name="gGerudoWhiteRightHandDL" Offset="0x9B50" />
|
||||
<DList Name="gGerudoWhiteHeadDL" Offset="0x9D18" />
|
||||
|
||||
<!-- White-clothed Gerudo Hairstyle DisplayLists -->
|
||||
<DList Name="gGerudoWhiteHairstyleBobDL" Offset="0xBB08" />
|
||||
<DList Name="gGerudoWhiteHairstyleStraightFringeDL" Offset="0xBDA0" />
|
||||
<DList Name="gGerudoWhiteHairstyleSpikyDL" Offset="0xC000" />
|
||||
</File>
|
||||
</Root>
|
||||
|
||||
+1
-8
@@ -594,7 +594,7 @@ void ActorShadow_DrawFeet(Actor* actor, Lights* mapper, PlayState* play);
|
||||
void Actor_SetFeetPos(Actor* actor, s32 limbIndex, s32 leftFootIndex, Vec3f* leftFootPos, s32 rightFootIndex, Vec3f* rightFootPos);
|
||||
void func_800B4AEC(PlayState* play, Actor* actor, f32 y);
|
||||
void func_800B4B50(Actor* actor, Lights* mapper, PlayState* play);
|
||||
void Actor_GetProjectedPos(PlayState* play, Vec3f* arg1, Vec3f* arg2, f32* arg3);
|
||||
void Actor_GetProjectedPos(PlayState* play, Vec3f* worldPos, Vec3f* projectedPos, f32* invW);
|
||||
|
||||
void Actor_DrawZTarget(TargetContext* targetCtx, PlayState* play);
|
||||
|
||||
@@ -2345,13 +2345,6 @@ void SkinMatrix_SetYRotation(MtxF* mf, s16 a);
|
||||
void SkinMatrix_MulYRotation(MtxF* mf, s16 a);
|
||||
void SkinMatrix_SetZRotation(MtxF* mf, s16 a);
|
||||
|
||||
s32 func_8013A240(PlayState* play);
|
||||
void func_8013A41C(s32 flag);
|
||||
void func_8013A46C(s32 flag);
|
||||
u32 func_8013A4C4(s32 flag);
|
||||
s16 func_8013A504(s16 val);
|
||||
s32 func_8013A530(PlayState* play, Actor* actor, s32 flag, Vec3f* pos, Vec3s* rot, f32 distanceMin, f32 distanceMax, s16 angleError);
|
||||
|
||||
void View_ViewportToVp(Vp* dest, Viewport* src);
|
||||
void View_Init(View* view, GraphicsContext* gfxCtx);
|
||||
void View_SetViewOrientation(View* view, Vec3f* eye, Vec3f* at, Vec3f* up);
|
||||
|
||||
@@ -11,6 +11,9 @@
|
||||
#define SCREEN_WIDTH_HIGH_RES 576
|
||||
#define SCREEN_HEIGHT_HIGH_RES 454
|
||||
|
||||
#define PROJECTED_TO_SCREEN_X(projectedPos, invW) ((projectedPos).x * (invW) * (SCREEN_WIDTH / 2) + (SCREEN_WIDTH / 2))
|
||||
#define PROJECTED_TO_SCREEN_Y(projectedPos, invW) ((projectedPos).y * (invW) * (-SCREEN_HEIGHT / 2) + (SCREEN_HEIGHT / 2))
|
||||
|
||||
#define ARRAY_COUNT(arr) (s32)(sizeof(arr) / sizeof(arr[0]))
|
||||
#define ARRAY_COUNTU(arr) (u32)(sizeof(arr) / sizeof(arr[0]))
|
||||
|
||||
|
||||
@@ -9,6 +9,7 @@
|
||||
|
||||
// This value is hardcoded to be the size of ovl_Arrow_Fire which currently is the biggest actor that uses the AM_FIELD.
|
||||
#define AM_FIELD_SIZE SEGMENT_SIZE(ovl_Arrow_Fire)
|
||||
|
||||
#define MASS_IMMOVABLE 0xFF // Cannot be pushed by OC collisions
|
||||
#define MASS_HEAVY 0xFE // Can only be pushed by OC collisions with IMMOVABLE and HEAVY objects.
|
||||
|
||||
@@ -222,6 +223,7 @@ typedef struct {
|
||||
/* 0x15A */ s16 pad15A;
|
||||
} DynaPolyActor; // size = 0x15C
|
||||
|
||||
|
||||
typedef enum {
|
||||
/* 0x00 */ ITEM00_RUPEE_GREEN,
|
||||
/* 0x01 */ ITEM00_RUPEE_BLUE,
|
||||
|
||||
+1
-1
@@ -558,7 +558,7 @@ typedef enum {
|
||||
typedef enum {
|
||||
/* -1 */ EXCH_ITEM_MINUS1 = -1, // Unknown usage or function
|
||||
/* 0x00 */ EXCH_ITEM_NONE,
|
||||
/* 0x13 */ EXCH_ITEM_13 = 0x13,
|
||||
/* 0x13 */ EXCH_ITEM_PICTO_BOX = 0x13,
|
||||
/* 0x1E */ EXCH_ITEM_1E = 0x1E, // BOTTLE_MUSHROOM
|
||||
/* 0x2A */ EXCH_ITEM_MOON_TEAR = 0x2A,
|
||||
/* 0x2B */ EXCH_ITEM_DEED_LAND,
|
||||
|
||||
+2
-2
@@ -143,8 +143,8 @@ typedef struct Save {
|
||||
/* 0x00F8 */ PermanentSceneFlags permanentSceneFlags[120];
|
||||
/* 0x0E18 */ u8 unk_E18[0x54];
|
||||
/* 0x0E6C */ u32 dekuPlaygroundHighScores[3];
|
||||
/* 0x0E78 */ u32 pictoFlags0;
|
||||
/* 0x0E7C */ u32 pictoFlags1;
|
||||
/* 0x0E78 */ u32 pictoFlags0; // Flags set by `PictoActor`s if pictograph is valid
|
||||
/* 0x0E7C */ u32 pictoFlags1; // Flags set by Snap_ValidatePictograph() to record errors; volatile since that function is run many times in succession
|
||||
/* 0x0E80 */ u32 unk_E80;
|
||||
/* 0x0E84 */ u32 unk_E84;
|
||||
/* 0x0E88 */ u32 unk_E88[7]; // Invadepoh flags
|
||||
|
||||
@@ -0,0 +1,52 @@
|
||||
#ifndef Z64_SNAP_H
|
||||
#define Z64_SNAP_H
|
||||
|
||||
#include "PR/ultratypes.h"
|
||||
#include "z64actor.h"
|
||||
|
||||
typedef s32 (*PictoValidationFunc)(struct PlayState*, Actor*);
|
||||
|
||||
typedef struct {
|
||||
/* 0x000 */ Actor actor;
|
||||
/* 0x144 */ PictoValidationFunc validationFunc;
|
||||
} PictoActor;
|
||||
|
||||
// Picto box flags
|
||||
|
||||
typedef enum {
|
||||
// Used externally, set and read by actors
|
||||
/* 0x00 */ PICTOGRAPH_0,
|
||||
/* 0x01 */ PICTOGRAPH_IN_SWAMP,
|
||||
/* 0x02 */ PICTOGRAPH_MONKEY,
|
||||
/* 0x03 */ PICTOGRAPH_BIG_OCTO,
|
||||
/* 0x04 */ PICTOGRAPH_LULU_HEAD,
|
||||
/* 0x05 */ PICTOGRAPH_LULU_RIGHT_ARM,
|
||||
/* 0x06 */ PICTOGRAPH_LULU_LEFT_ARM, // Need all three of these to qualify as a good picture
|
||||
/* 0x07 */ PICTOGRAPH_SCARECROW,
|
||||
/* 0x08 */ PICTOGRAPH_TINGLE,
|
||||
/* 0x09 */ PICTOGRAPH_PIRATE_GOOD,
|
||||
/* 0x0A */ PICTOGRAPH_DEKU_KING,
|
||||
/* 0x0B */ PICTOGRAPH_PIRATE_TOO_FAR, // overlaps with PICTOGRAPH_PIRATE_GOOD, but that is checked first
|
||||
|
||||
// Used internally, test for failures of position, angle etc.
|
||||
/* 0x3B */ PICTOGRAPH_BEHIND_COLLISION = 0x3B,
|
||||
/* 0x3C */ PICTOGRAPH_BEHIND_BG,
|
||||
/* 0x3D */ PICTOGRAPH_NOT_IN_VIEW,
|
||||
/* 0x3E */ PICTOGRAPH_BAD_ANGLE,
|
||||
/* 0x3F */ PICTOGRAPH_BAD_DISTANCE
|
||||
} PictographFlag;
|
||||
|
||||
// The following macros are subject to renaming once the capture system is better understood
|
||||
#define PICTO_RESOLUTION_HORIZONTAL 150
|
||||
#define PICTO_RESOLUTION_VERTICAL 105
|
||||
#define PICTO_CAPTURE_REGION_TOPLEFT_X ((SCREEN_WIDTH - PICTO_RESOLUTION_HORIZONTAL) / 2)
|
||||
#define PICTO_CAPTURE_REGION_TOPLEFT_Y ((SCREEN_HEIGHT - PICTO_RESOLUTION_VERTICAL) / 2)
|
||||
|
||||
s32 Snap_RecordPictographedActors(PlayState* play);
|
||||
void Snap_SetFlag(s32 flag);
|
||||
void Snap_UnsetFlag(s32 flag);
|
||||
u32 Snap_CheckFlag(s32 flag);
|
||||
s16 Snap_AbsS(s16 val);
|
||||
s32 Snap_ValidatePictograph(PlayState* play, Actor* actor, s32 flag, Vec3f* pos, Vec3s* rot, f32 distanceMin, f32 distanceMax, s16 angleRange);
|
||||
|
||||
#endif
|
||||
@@ -1499,8 +1499,7 @@ beginseg
|
||||
name "ovl_En_Ge1"
|
||||
compress
|
||||
include "build/src/overlays/actors/ovl_En_Ge1/z_en_ge1.o"
|
||||
include "build/data/ovl_En_Ge1/ovl_En_Ge1.data.o"
|
||||
include "build/data/ovl_En_Ge1/ovl_En_Ge1.reloc.o"
|
||||
include "build/src/overlays/actors/ovl_En_Ge1/ovl_En_Ge1_reloc.o"
|
||||
endseg
|
||||
|
||||
beginseg
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
#include "prevent_bss_reordering.h"
|
||||
#include "global.h"
|
||||
#include "system_malloc.h"
|
||||
#include "overlays/gamestates/ovl_daytelop/z_daytelop.h"
|
||||
|
||||
+22
-21
@@ -391,12 +391,12 @@ void func_800B4B50(Actor* actor, Lights* mapper, PlayState* play) {
|
||||
}
|
||||
}
|
||||
|
||||
void Actor_GetProjectedPos(PlayState* play, Vec3f* arg1, Vec3f* arg2, f32* arg3) {
|
||||
SkinMatrix_Vec3fMtxFMultXYZW(&play->viewProjectionMtxF, arg1, arg2, arg3);
|
||||
if (*arg3 < 1.0f) {
|
||||
*arg3 = 1.0f;
|
||||
void Actor_GetProjectedPos(PlayState* play, Vec3f* worldPos, Vec3f* projectedPos, f32* invW) {
|
||||
SkinMatrix_Vec3fMtxFMultXYZW(&play->viewProjectionMtxF, worldPos, projectedPos, invW);
|
||||
if (*invW < 1.0f) {
|
||||
*invW = 1.0f;
|
||||
} else {
|
||||
*arg3 = 1.0f / *arg3;
|
||||
*invW = 1.0f / *invW;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -419,7 +419,7 @@ TatlColor sTatlColorList[] = {
|
||||
{ { 0, 255, 0, 255 }, { 0, 255, 0, 0 } }, { { 0, 255, 0, 255 }, { 0, 255, 0, 0 } },
|
||||
{ { 0, 255, 0, 255 }, { 0, 255, 0, 0 } }, { { 255, 255, 0, 255 }, { 200, 155, 0, 0 } },
|
||||
{ { 0, 255, 0, 255 }, { 0, 255, 0, 0 } }, { { 0, 255, 0, 255 }, { 0, 255, 0, 0 } },
|
||||
{ { 0, 255, 0, 255 }, { 0, 255, 0, 0 } }
|
||||
{ { 0, 255, 0, 255 }, { 0, 255, 0, 0 } },
|
||||
};
|
||||
|
||||
void func_800B4F78(TargetContext* targetCtx, s32 type, PlayState* play) {
|
||||
@@ -480,9 +480,9 @@ void Actor_DrawZTarget(TargetContext* targetCtx, PlayState* play) {
|
||||
TargetContextEntry* entry;
|
||||
s16 alpha = 255;
|
||||
f32 var1 = 1.0f;
|
||||
Vec3f spBC;
|
||||
Vec3f projectedPos;
|
||||
s32 spB8;
|
||||
f32 spB4;
|
||||
f32 invW;
|
||||
s32 spB0;
|
||||
s32 spAC;
|
||||
f32 var2;
|
||||
@@ -505,22 +505,22 @@ void Actor_DrawZTarget(TargetContext* targetCtx, PlayState* play) {
|
||||
alpha = targetCtx->unk48;
|
||||
}
|
||||
|
||||
Actor_GetProjectedPos(play, &targetCtx->targetCenterPos, &spBC, &spB4);
|
||||
Actor_GetProjectedPos(play, &targetCtx->targetCenterPos, &projectedPos, &invW);
|
||||
|
||||
spBC.x = (160 * (spBC.x * spB4)) * var1;
|
||||
spBC.x = CLAMP(spBC.x, -320.0f, 320.0f);
|
||||
projectedPos.x = (160 * (projectedPos.x * invW)) * var1;
|
||||
projectedPos.x = CLAMP(projectedPos.x, -320.0f, 320.0f);
|
||||
|
||||
spBC.y = (120 * (spBC.y * spB4)) * var1;
|
||||
spBC.y = CLAMP(spBC.y, -240.0f, 240.0f);
|
||||
projectedPos.y = (120 * (projectedPos.y * invW)) * var1;
|
||||
projectedPos.y = CLAMP(projectedPos.y, -240.0f, 240.0f);
|
||||
|
||||
spBC.z = spBC.z * var1;
|
||||
projectedPos.z = projectedPos.z * var1;
|
||||
|
||||
targetCtx->unk4C--;
|
||||
if (targetCtx->unk4C < 0) {
|
||||
targetCtx->unk4C = 2;
|
||||
}
|
||||
|
||||
Target_SetPos(targetCtx, targetCtx->unk4C, spBC.x, spBC.y, spBC.z);
|
||||
Target_SetPos(targetCtx, targetCtx->unk4C, projectedPos.x, projectedPos.y, projectedPos.z);
|
||||
|
||||
if ((!(player->stateFlags1 & 0x40)) || (actor != player->unk_730)) {
|
||||
OVERLAY_DISP = Gfx_CallSetupDL(OVERLAY_DISP, 0x39);
|
||||
@@ -1966,18 +1966,19 @@ void Actor_GetScreenPos(PlayState* play, Actor* actor, s16* x, s16* y) {
|
||||
f32 w;
|
||||
|
||||
Actor_GetProjectedPos(play, &actor->focus.pos, &projectedPos, &w);
|
||||
*x = (projectedPos.x * w * (SCREEN_WIDTH / 2)) + (SCREEN_WIDTH / 2);
|
||||
*y = (projectedPos.y * w * -(SCREEN_HEIGHT / 2)) + (SCREEN_HEIGHT / 2);
|
||||
*x = PROJECTED_TO_SCREEN_X(projectedPos, w);
|
||||
*y = PROJECTED_TO_SCREEN_Y(projectedPos, w);
|
||||
}
|
||||
|
||||
s32 func_800B8934(PlayState* play, Actor* actor) {
|
||||
Vec3f sp2C;
|
||||
f32 sp28;
|
||||
Vec3f projectedPos;
|
||||
f32 invW;
|
||||
s32 pad[2];
|
||||
|
||||
Actor_GetProjectedPos(play, &actor->focus.pos, &sp2C, &sp28);
|
||||
Actor_GetProjectedPos(play, &actor->focus.pos, &projectedPos, &invW);
|
||||
|
||||
return (sp2C.x * sp28 >= -1.0f) && (sp2C.x * sp28 <= 1.0f) && (sp2C.y * sp28 >= -1.0f) && (sp2C.y * sp28 <= 1.0f);
|
||||
return (projectedPos.x * invW >= -1.0f) && (projectedPos.x * invW <= 1.0f) && (projectedPos.y * invW >= -1.0f) &&
|
||||
(projectedPos.y * invW <= 1.0f);
|
||||
}
|
||||
|
||||
s32 Actor_HasParent(Actor* actor, PlayState* play) {
|
||||
|
||||
+7
-7
@@ -380,20 +380,20 @@ void Lights_GlowCheck(PlayState* play) {
|
||||
|
||||
if (light->info->type == LIGHT_POINT_GLOW) {
|
||||
Vec3f pos;
|
||||
Vec3f multDest;
|
||||
f32 wDest;
|
||||
Vec3f projectedPos;
|
||||
f32 invW;
|
||||
|
||||
pos.x = params->x;
|
||||
pos.y = params->y;
|
||||
pos.z = params->z;
|
||||
Actor_GetProjectedPos(play, &pos, &multDest, &wDest);
|
||||
Actor_GetProjectedPos(play, &pos, &projectedPos, &invW);
|
||||
|
||||
params->drawGlow = 0;
|
||||
|
||||
if ((multDest.z > 1) && (fabsf(multDest.x * wDest) < 1) && (fabsf(multDest.y * wDest) < 1)) {
|
||||
s32 wX = multDest.x * wDest * 160 + 160;
|
||||
s32 wY = multDest.y * wDest * -120 + 120;
|
||||
s32 wZ = (s32)((multDest.z * wDest) * 16352) + 16352;
|
||||
if ((projectedPos.z > 1) && (fabsf(projectedPos.x * invW) < 1) && (fabsf(projectedPos.y * invW) < 1)) {
|
||||
s32 wX = PROJECTED_TO_SCREEN_X(projectedPos, invW);
|
||||
s32 wY = PROJECTED_TO_SCREEN_Y(projectedPos, invW);
|
||||
s32 wZ = (s32)((projectedPos.z * invW) * 16352) + 16352;
|
||||
s32 zBuf = func_80178A94(wX, wY);
|
||||
|
||||
if (wZ < zBuf) {
|
||||
|
||||
+228
-228
@@ -7,119 +7,119 @@
|
||||
{ { 0, 0 }, 0, 0, 0, 0 }
|
||||
|
||||
SceneTableEntry gSceneTable[] = {
|
||||
SCENE_ENTRY(Z2_20SICHITAI2, 0x0116, SCENE_DRAW_CFG_MAT_ANIM),
|
||||
SCENE_ENTRY_NONE(),
|
||||
SCENE_ENTRY_NONE(),
|
||||
SCENE_ENTRY_NONE(),
|
||||
SCENE_ENTRY_NONE(),
|
||||
SCENE_ENTRY_NONE(),
|
||||
SCENE_ENTRY_NONE(),
|
||||
SCENE_ENTRY(KAKUSIANA, 0x0000, SCENE_DRAW_CFG_MAT_ANIM),
|
||||
SCENE_ENTRY(SPOT00, 0x0000, SCENE_DRAW_CFG_NOTHING),
|
||||
SCENE_ENTRY_NONE(),
|
||||
SCENE_ENTRY(Z2_WITCH_SHOP, 0x011A, SCENE_DRAW_CFG_MAT_ANIM),
|
||||
SCENE_ENTRY(Z2_LAST_BS, 0x0000, SCENE_DRAW_CFG_MAT_ANIM),
|
||||
SCENE_ENTRY(Z2_HAKASHITA, 0x0113, SCENE_DRAW_CFG_MAT_ANIM),
|
||||
SCENE_ENTRY(Z2_AYASHIISHOP, 0x010E, SCENE_DRAW_CFG_MAT_ANIM),
|
||||
SCENE_ENTRY_NONE(),
|
||||
SCENE_ENTRY_NONE(),
|
||||
SCENE_ENTRY(Z2_OMOYA, 0x0132, SCENE_DRAW_CFG_DEFAULT),
|
||||
SCENE_ENTRY(Z2_BOWLING, 0x0108, SCENE_DRAW_CFG_MAT_ANIM),
|
||||
SCENE_ENTRY(Z2_SONCHONOIE, 0x010B, SCENE_DRAW_CFG_DEFAULT),
|
||||
SCENE_ENTRY(Z2_IKANA, 0x0141, SCENE_DRAW_CFG_MAT_ANIM),
|
||||
SCENE_ENTRY(Z2_KAIZOKU, 0x0000, SCENE_DRAW_CFG_MAT_ANIM),
|
||||
SCENE_ENTRY(Z2_MILK_BAR, 0x010C, SCENE_DRAW_CFG_MAT_ANIM),
|
||||
SCENE_ENTRY(Z2_INISIE_N, 0x0144, SCENE_DRAW_CFG_MAT_ANIM),
|
||||
SCENE_ENTRY(Z2_TAKARAYA, 0x0109, SCENE_DRAW_CFG_DEFAULT),
|
||||
SCENE_ENTRY(Z2_INISIE_R, 0x0144, SCENE_DRAW_CFG_MAT_ANIM),
|
||||
SCENE_ENTRY(Z2_OKUJOU, 0x0000, SCENE_DRAW_CFG_DEFAULT),
|
||||
SCENE_ENTRY(Z2_OPENINGDAN, 0x0000, SCENE_DRAW_CFG_MAT_ANIM),
|
||||
SCENE_ENTRY(Z2_MITURIN, 0x011F, SCENE_DRAW_CFG_MAT_ANIM),
|
||||
SCENE_ENTRY(Z2_13HUBUKINOMITI, 0x0000, SCENE_DRAW_CFG_DEFAULT),
|
||||
SCENE_ENTRY(Z2_CASTLE, 0x0142, SCENE_DRAW_CFG_MAT_ANIM),
|
||||
SCENE_ENTRY(Z2_DEKUTES, 0x0000, SCENE_DRAW_CFG_MAT_ANIM),
|
||||
SCENE_ENTRY(Z2_MITURIN_BS, 0x0000, SCENE_DRAW_CFG_DEFAULT),
|
||||
SCENE_ENTRY(Z2_SYATEKI_MIZU, 0x0107, SCENE_DRAW_CFG_MAT_ANIM),
|
||||
SCENE_ENTRY(Z2_HAKUGIN, 0x012B, SCENE_DRAW_CFG_MAT_ANIM),
|
||||
SCENE_ENTRY(Z2_ROMANYMAE, 0x0149, SCENE_DRAW_CFG_DEFAULT),
|
||||
SCENE_ENTRY(Z2_PIRATE, 0x0000, SCENE_DRAW_CFG_MAT_ANIM),
|
||||
SCENE_ENTRY(Z2_SYATEKI_MORI, 0x011B, SCENE_DRAW_CFG_DEFAULT),
|
||||
SCENE_ENTRY(Z2_SINKAI, 0x0135, SCENE_DRAW_CFG_MAT_ANIM),
|
||||
SCENE_ENTRY(Z2_YOUSEI_IZUMI, 0x013E, SCENE_DRAW_CFG_MAT_ANIM),
|
||||
SCENE_ENTRY(Z2_KINSTA1, 0x011E, SCENE_DRAW_CFG_MAT_ANIM),
|
||||
SCENE_ENTRY(Z2_KINDAN2, 0x013F, SCENE_DRAW_CFG_MAT_ANIM),
|
||||
SCENE_ENTRY(Z2_TENMON_DAI, 0x0114, SCENE_DRAW_CFG_MAT_ANIM),
|
||||
SCENE_ENTRY(Z2_LAST_DEKU, 0x0000, SCENE_DRAW_CFG_DEFAULT),
|
||||
SCENE_ENTRY(Z2_22DEKUCITY, 0x0118, SCENE_DRAW_CFG_MAT_ANIM),
|
||||
SCENE_ENTRY(Z2_KAJIYA, 0x0127, SCENE_DRAW_CFG_MAT_ANIM),
|
||||
SCENE_ENTRY(Z2_00KEIKOKU, 0x0100, SCENE_DRAW_CFG_MAT_ANIM),
|
||||
SCENE_ENTRY(Z2_POSTHOUSE, 0x0111, SCENE_DRAW_CFG_DEFAULT),
|
||||
SCENE_ENTRY(Z2_LABO, 0x013A, SCENE_DRAW_CFG_MAT_ANIM),
|
||||
SCENE_ENTRY(Z2_DANPEI2TEST, 0x0113, SCENE_DRAW_CFG_MAT_ANIM),
|
||||
SCENE_ENTRY_NONE(),
|
||||
SCENE_ENTRY(Z2_16GORON_HOUSE, 0x0124, SCENE_DRAW_CFG_DEFAULT),
|
||||
SCENE_ENTRY(Z2_33ZORACITY, 0x0136, SCENE_DRAW_CFG_MAT_ANIM),
|
||||
SCENE_ENTRY(Z2_8ITEMSHOP, 0x010F, SCENE_DRAW_CFG_MAT_ANIM),
|
||||
SCENE_ENTRY(Z2_F01, 0x012E, SCENE_DRAW_CFG_DEFAULT),
|
||||
SCENE_ENTRY(Z2_INISIE_BS, 0x0000, SCENE_DRAW_CFG_MAT_ANIM),
|
||||
SCENE_ENTRY(Z2_30GYOSON, 0x0134, SCENE_DRAW_CFG_MAT_ANIM),
|
||||
SCENE_ENTRY(Z2_31MISAKI, 0x0134, SCENE_DRAW_CFG_MAT_ANIM),
|
||||
SCENE_ENTRY(Z2_TAKARAKUJI, 0x0112, SCENE_DRAW_CFG_DEFAULT),
|
||||
SCENE_ENTRY_NONE(),
|
||||
SCENE_ENTRY(Z2_TORIDE, 0x0138, SCENE_DRAW_CFG_MAT_ANIM),
|
||||
SCENE_ENTRY(Z2_FISHERMAN, 0x013B, SCENE_DRAW_CFG_MAT_ANIM),
|
||||
SCENE_ENTRY(Z2_GORONSHOP, 0x0129, SCENE_DRAW_CFG_MAT_ANIM),
|
||||
SCENE_ENTRY(Z2_DEKU_KING, 0x011C, SCENE_DRAW_CFG_MAT_ANIM),
|
||||
SCENE_ENTRY(Z2_LAST_GORON, 0x0000, SCENE_DRAW_CFG_DEFAULT),
|
||||
SCENE_ENTRY(Z2_24KEMONOMITI, 0x0000, SCENE_DRAW_CFG_MAT_ANIM),
|
||||
SCENE_ENTRY(Z2_F01_B, 0x0130, SCENE_DRAW_CFG_DEFAULT),
|
||||
SCENE_ENTRY(Z2_F01C, 0x012F, SCENE_DRAW_CFG_DEFAULT),
|
||||
SCENE_ENTRY(Z2_BOTI, 0x0106, SCENE_DRAW_CFG_DEFAULT),
|
||||
SCENE_ENTRY(Z2_HAKUGIN_BS, 0x0000, SCENE_DRAW_CFG_DEFAULT),
|
||||
SCENE_ENTRY(Z2_20SICHITAI, 0x0116, SCENE_DRAW_CFG_MAT_ANIM),
|
||||
SCENE_ENTRY(Z2_21MITURINMAE, 0x0117, SCENE_DRAW_CFG_MAT_ANIM),
|
||||
SCENE_ENTRY(Z2_LAST_ZORA, 0x0000, SCENE_DRAW_CFG_MAT_ANIM),
|
||||
SCENE_ENTRY(Z2_11GORONNOSATO2, 0x0123, SCENE_DRAW_CFG_MAT_ANIM),
|
||||
SCENE_ENTRY(Z2_SEA, 0x013D, SCENE_DRAW_CFG_GREAT_BAY_TEMPLE),
|
||||
SCENE_ENTRY(Z2_35TAKI, 0x0137, SCENE_DRAW_CFG_MAT_ANIM),
|
||||
SCENE_ENTRY(Z2_REDEAD, 0x0145, SCENE_DRAW_CFG_MAT_ANIM),
|
||||
SCENE_ENTRY(Z2_BANDROOM, 0x0000, SCENE_DRAW_CFG_MAT_ANIM),
|
||||
SCENE_ENTRY(Z2_11GORONNOSATO, 0x0123, SCENE_DRAW_CFG_MAT_ANIM),
|
||||
SCENE_ENTRY(Z2_GORON_HAKA, 0x012A, SCENE_DRAW_CFG_MAT_ANIM),
|
||||
SCENE_ENTRY(Z2_SECOM, 0x0143, SCENE_DRAW_CFG_MAT_ANIM_MANUAL_STEP),
|
||||
SCENE_ENTRY(Z2_10YUKIYAMANOMURA, 0x0122, SCENE_DRAW_CFG_MAT_ANIM),
|
||||
SCENE_ENTRY(Z2_TOUGITES, 0x0146, SCENE_DRAW_CFG_DEFAULT),
|
||||
SCENE_ENTRY(Z2_DANPEI, 0x0120, SCENE_DRAW_CFG_MAT_ANIM),
|
||||
SCENE_ENTRY(Z2_IKANAMAE, 0x0000, SCENE_DRAW_CFG_DEFAULT),
|
||||
SCENE_ENTRY(Z2_DOUJOU, 0x0110, SCENE_DRAW_CFG_DEFAULT),
|
||||
SCENE_ENTRY(Z2_MUSICHOUSE, 0x0147, SCENE_DRAW_CFG_MAT_ANIM_MANUAL_STEP),
|
||||
SCENE_ENTRY(Z2_IKNINSIDE, 0x0142, SCENE_DRAW_CFG_MAT_ANIM),
|
||||
SCENE_ENTRY(Z2_MAP_SHOP, 0x0119, SCENE_DRAW_CFG_DEFAULT),
|
||||
SCENE_ENTRY(Z2_F40, 0x0140, SCENE_DRAW_CFG_DEFAULT),
|
||||
SCENE_ENTRY(Z2_F41, 0x0000, SCENE_DRAW_CFG_DEFAULT),
|
||||
SCENE_ENTRY(Z2_10YUKIYAMANOMURA2, 0x0122, SCENE_DRAW_CFG_MAT_ANIM),
|
||||
SCENE_ENTRY(Z2_14YUKIDAMANOMITI, 0x0000, SCENE_DRAW_CFG_DEFAULT),
|
||||
SCENE_ENTRY(Z2_12HAKUGINMAE, 0x0125, SCENE_DRAW_CFG_MAT_ANIM),
|
||||
SCENE_ENTRY(Z2_17SETUGEN, 0x0000, SCENE_DRAW_CFG_MAT_ANIM),
|
||||
SCENE_ENTRY(Z2_17SETUGEN2, 0x0000, SCENE_DRAW_CFG_MAT_ANIM),
|
||||
SCENE_ENTRY(Z2_SEA_BS, 0x0000, SCENE_DRAW_CFG_MAT_ANIM),
|
||||
SCENE_ENTRY(Z2_RANDOM, 0x012C, SCENE_DRAW_CFG_MAT_ANIM),
|
||||
SCENE_ENTRY(Z2_YADOYA, 0x010A, SCENE_DRAW_CFG_MAT_ANIM),
|
||||
SCENE_ENTRY(Z2_KONPEKI_ENT, 0x0139, SCENE_DRAW_CFG_MAT_ANIM),
|
||||
SCENE_ENTRY(Z2_INSIDETOWER, 0x0000, SCENE_DRAW_CFG_MAT_ANIM),
|
||||
SCENE_ENTRY(Z2_26SARUNOMORI, 0x011D, SCENE_DRAW_CFG_MAT_ANIM),
|
||||
SCENE_ENTRY(Z2_LOST_WOODS, 0x0000, SCENE_DRAW_CFG_MAT_ANIM),
|
||||
SCENE_ENTRY(Z2_LAST_LINK, 0x0000, SCENE_DRAW_CFG_DEFAULT),
|
||||
SCENE_ENTRY(Z2_SOUGEN, 0x0000, SCENE_DRAW_CFG_DEFAULT),
|
||||
SCENE_ENTRY(Z2_BOMYA, 0x010D, SCENE_DRAW_CFG_DEFAULT),
|
||||
SCENE_ENTRY(Z2_KYOJINNOMA, 0x0000, SCENE_DRAW_CFG_MAT_ANIM),
|
||||
SCENE_ENTRY(Z2_KOEPONARACE, 0x0131, SCENE_DRAW_CFG_MAT_ANIM),
|
||||
SCENE_ENTRY(Z2_GORONRACE, 0x0126, SCENE_DRAW_CFG_DEFAULT),
|
||||
SCENE_ENTRY(Z2_TOWN, 0x0101, SCENE_DRAW_CFG_DEFAULT),
|
||||
SCENE_ENTRY(Z2_ICHIBA, 0x0102, SCENE_DRAW_CFG_DEFAULT),
|
||||
SCENE_ENTRY(Z2_BACKTOWN, 0x0103, SCENE_DRAW_CFG_DEFAULT),
|
||||
SCENE_ENTRY(Z2_CLOCKTOWER, 0x0104, SCENE_DRAW_CFG_MAT_ANIM),
|
||||
SCENE_ENTRY(Z2_ALLEY, 0x0105, SCENE_DRAW_CFG_MAT_ANIM),
|
||||
/* 0x00 */ SCENE_ENTRY(Z2_20SICHITAI2, 0x0116, SCENE_DRAW_CFG_MAT_ANIM),
|
||||
/* 0x01 */ SCENE_ENTRY_NONE(),
|
||||
/* 0x02 */ SCENE_ENTRY_NONE(),
|
||||
/* 0x03 */ SCENE_ENTRY_NONE(),
|
||||
/* 0x04 */ SCENE_ENTRY_NONE(),
|
||||
/* 0x05 */ SCENE_ENTRY_NONE(),
|
||||
/* 0x06 */ SCENE_ENTRY_NONE(),
|
||||
/* 0x07 */ SCENE_ENTRY(KAKUSIANA, 0x0000, SCENE_DRAW_CFG_MAT_ANIM),
|
||||
/* 0x08 */ SCENE_ENTRY(SPOT00, 0x0000, SCENE_DRAW_CFG_NOTHING),
|
||||
/* 0x09 */ SCENE_ENTRY_NONE(),
|
||||
/* 0x0A */ SCENE_ENTRY(Z2_WITCH_SHOP, 0x011A, SCENE_DRAW_CFG_MAT_ANIM),
|
||||
/* 0x0B */ SCENE_ENTRY(Z2_LAST_BS, 0x0000, SCENE_DRAW_CFG_MAT_ANIM),
|
||||
/* 0x0C */ SCENE_ENTRY(Z2_HAKASHITA, 0x0113, SCENE_DRAW_CFG_MAT_ANIM),
|
||||
/* 0x0D */ SCENE_ENTRY(Z2_AYASHIISHOP, 0x010E, SCENE_DRAW_CFG_MAT_ANIM),
|
||||
/* 0x0E */ SCENE_ENTRY_NONE(),
|
||||
/* 0x0F */ SCENE_ENTRY_NONE(),
|
||||
/* 0x10 */ SCENE_ENTRY(Z2_OMOYA, 0x0132, SCENE_DRAW_CFG_DEFAULT),
|
||||
/* 0x11 */ SCENE_ENTRY(Z2_BOWLING, 0x0108, SCENE_DRAW_CFG_MAT_ANIM),
|
||||
/* 0x12 */ SCENE_ENTRY(Z2_SONCHONOIE, 0x010B, SCENE_DRAW_CFG_DEFAULT),
|
||||
/* 0x13 */ SCENE_ENTRY(Z2_IKANA, 0x0141, SCENE_DRAW_CFG_MAT_ANIM),
|
||||
/* 0x14 */ SCENE_ENTRY(Z2_KAIZOKU, 0x0000, SCENE_DRAW_CFG_MAT_ANIM),
|
||||
/* 0x15 */ SCENE_ENTRY(Z2_MILK_BAR, 0x010C, SCENE_DRAW_CFG_MAT_ANIM),
|
||||
/* 0x16 */ SCENE_ENTRY(Z2_INISIE_N, 0x0144, SCENE_DRAW_CFG_MAT_ANIM),
|
||||
/* 0x17 */ SCENE_ENTRY(Z2_TAKARAYA, 0x0109, SCENE_DRAW_CFG_DEFAULT),
|
||||
/* 0x18 */ SCENE_ENTRY(Z2_INISIE_R, 0x0144, SCENE_DRAW_CFG_MAT_ANIM),
|
||||
/* 0x19 */ SCENE_ENTRY(Z2_OKUJOU, 0x0000, SCENE_DRAW_CFG_DEFAULT),
|
||||
/* 0x1A */ SCENE_ENTRY(Z2_OPENINGDAN, 0x0000, SCENE_DRAW_CFG_MAT_ANIM),
|
||||
/* 0x1B */ SCENE_ENTRY(Z2_MITURIN, 0x011F, SCENE_DRAW_CFG_MAT_ANIM),
|
||||
/* 0x1C */ SCENE_ENTRY(Z2_13HUBUKINOMITI, 0x0000, SCENE_DRAW_CFG_DEFAULT),
|
||||
/* 0x1D */ SCENE_ENTRY(Z2_CASTLE, 0x0142, SCENE_DRAW_CFG_MAT_ANIM),
|
||||
/* 0x1E */ SCENE_ENTRY(Z2_DEKUTES, 0x0000, SCENE_DRAW_CFG_MAT_ANIM),
|
||||
/* 0x1F */ SCENE_ENTRY(Z2_MITURIN_BS, 0x0000, SCENE_DRAW_CFG_DEFAULT),
|
||||
/* 0x20 */ SCENE_ENTRY(Z2_SYATEKI_MIZU, 0x0107, SCENE_DRAW_CFG_MAT_ANIM),
|
||||
/* 0x21 */ SCENE_ENTRY(Z2_HAKUGIN, 0x012B, SCENE_DRAW_CFG_MAT_ANIM),
|
||||
/* 0x22 */ SCENE_ENTRY(Z2_ROMANYMAE, 0x0149, SCENE_DRAW_CFG_DEFAULT),
|
||||
/* 0x23 */ SCENE_ENTRY(Z2_PIRATE, 0x0000, SCENE_DRAW_CFG_MAT_ANIM),
|
||||
/* 0x24 */ SCENE_ENTRY(Z2_SYATEKI_MORI, 0x011B, SCENE_DRAW_CFG_DEFAULT),
|
||||
/* 0x25 */ SCENE_ENTRY(Z2_SINKAI, 0x0135, SCENE_DRAW_CFG_MAT_ANIM),
|
||||
/* 0x26 */ SCENE_ENTRY(Z2_YOUSEI_IZUMI, 0x013E, SCENE_DRAW_CFG_MAT_ANIM),
|
||||
/* 0x27 */ SCENE_ENTRY(Z2_KINSTA1, 0x011E, SCENE_DRAW_CFG_MAT_ANIM),
|
||||
/* 0x28 */ SCENE_ENTRY(Z2_KINDAN2, 0x013F, SCENE_DRAW_CFG_MAT_ANIM),
|
||||
/* 0x29 */ SCENE_ENTRY(Z2_TENMON_DAI, 0x0114, SCENE_DRAW_CFG_MAT_ANIM),
|
||||
/* 0x2A */ SCENE_ENTRY(Z2_LAST_DEKU, 0x0000, SCENE_DRAW_CFG_DEFAULT),
|
||||
/* 0x2B */ SCENE_ENTRY(Z2_22DEKUCITY, 0x0118, SCENE_DRAW_CFG_MAT_ANIM),
|
||||
/* 0x2C */ SCENE_ENTRY(Z2_KAJIYA, 0x0127, SCENE_DRAW_CFG_MAT_ANIM),
|
||||
/* 0x2D */ SCENE_ENTRY(Z2_00KEIKOKU, 0x0100, SCENE_DRAW_CFG_MAT_ANIM),
|
||||
/* 0x2E */ SCENE_ENTRY(Z2_POSTHOUSE, 0x0111, SCENE_DRAW_CFG_DEFAULT),
|
||||
/* 0x2F */ SCENE_ENTRY(Z2_LABO, 0x013A, SCENE_DRAW_CFG_MAT_ANIM),
|
||||
/* 0x30 */ SCENE_ENTRY(Z2_DANPEI2TEST, 0x0113, SCENE_DRAW_CFG_MAT_ANIM),
|
||||
/* 0x31 */ SCENE_ENTRY_NONE(),
|
||||
/* 0x32 */ SCENE_ENTRY(Z2_16GORON_HOUSE, 0x0124, SCENE_DRAW_CFG_DEFAULT),
|
||||
/* 0x33 */ SCENE_ENTRY(Z2_33ZORACITY, 0x0136, SCENE_DRAW_CFG_MAT_ANIM),
|
||||
/* 0x34 */ SCENE_ENTRY(Z2_8ITEMSHOP, 0x010F, SCENE_DRAW_CFG_MAT_ANIM),
|
||||
/* 0x35 */ SCENE_ENTRY(Z2_F01, 0x012E, SCENE_DRAW_CFG_DEFAULT),
|
||||
/* 0x36 */ SCENE_ENTRY(Z2_INISIE_BS, 0x0000, SCENE_DRAW_CFG_MAT_ANIM),
|
||||
/* 0x37 */ SCENE_ENTRY(Z2_30GYOSON, 0x0134, SCENE_DRAW_CFG_MAT_ANIM),
|
||||
/* 0x38 */ SCENE_ENTRY(Z2_31MISAKI, 0x0134, SCENE_DRAW_CFG_MAT_ANIM),
|
||||
/* 0x39 */ SCENE_ENTRY(Z2_TAKARAKUJI, 0x0112, SCENE_DRAW_CFG_DEFAULT),
|
||||
/* 0x3A */ SCENE_ENTRY_NONE(),
|
||||
/* 0x3B */ SCENE_ENTRY(Z2_TORIDE, 0x0138, SCENE_DRAW_CFG_MAT_ANIM),
|
||||
/* 0x3C */ SCENE_ENTRY(Z2_FISHERMAN, 0x013B, SCENE_DRAW_CFG_MAT_ANIM),
|
||||
/* 0x3D */ SCENE_ENTRY(Z2_GORONSHOP, 0x0129, SCENE_DRAW_CFG_MAT_ANIM),
|
||||
/* 0x3E */ SCENE_ENTRY(Z2_DEKU_KING, 0x011C, SCENE_DRAW_CFG_MAT_ANIM),
|
||||
/* 0x3F */ SCENE_ENTRY(Z2_LAST_GORON, 0x0000, SCENE_DRAW_CFG_DEFAULT),
|
||||
/* 0x40 */ SCENE_ENTRY(Z2_24KEMONOMITI, 0x0000, SCENE_DRAW_CFG_MAT_ANIM),
|
||||
/* 0x41 */ SCENE_ENTRY(Z2_F01_B, 0x0130, SCENE_DRAW_CFG_DEFAULT),
|
||||
/* 0x42 */ SCENE_ENTRY(Z2_F01C, 0x012F, SCENE_DRAW_CFG_DEFAULT),
|
||||
/* 0x43 */ SCENE_ENTRY(Z2_BOTI, 0x0106, SCENE_DRAW_CFG_DEFAULT),
|
||||
/* 0x44 */ SCENE_ENTRY(Z2_HAKUGIN_BS, 0x0000, SCENE_DRAW_CFG_DEFAULT),
|
||||
/* 0x45 */ SCENE_ENTRY(Z2_20SICHITAI, 0x0116, SCENE_DRAW_CFG_MAT_ANIM),
|
||||
/* 0x46 */ SCENE_ENTRY(Z2_21MITURINMAE, 0x0117, SCENE_DRAW_CFG_MAT_ANIM),
|
||||
/* 0x47 */ SCENE_ENTRY(Z2_LAST_ZORA, 0x0000, SCENE_DRAW_CFG_MAT_ANIM),
|
||||
/* 0x48 */ SCENE_ENTRY(Z2_11GORONNOSATO2, 0x0123, SCENE_DRAW_CFG_MAT_ANIM),
|
||||
/* 0x49 */ SCENE_ENTRY(Z2_SEA, 0x013D, SCENE_DRAW_CFG_GREAT_BAY_TEMPLE),
|
||||
/* 0x4A */ SCENE_ENTRY(Z2_35TAKI, 0x0137, SCENE_DRAW_CFG_MAT_ANIM),
|
||||
/* 0x4B */ SCENE_ENTRY(Z2_REDEAD, 0x0145, SCENE_DRAW_CFG_MAT_ANIM),
|
||||
/* 0x4C */ SCENE_ENTRY(Z2_BANDROOM, 0x0000, SCENE_DRAW_CFG_MAT_ANIM),
|
||||
/* 0x4D */ SCENE_ENTRY(Z2_11GORONNOSATO, 0x0123, SCENE_DRAW_CFG_MAT_ANIM),
|
||||
/* 0x4E */ SCENE_ENTRY(Z2_GORON_HAKA, 0x012A, SCENE_DRAW_CFG_MAT_ANIM),
|
||||
/* 0x4F */ SCENE_ENTRY(Z2_SECOM, 0x0143, SCENE_DRAW_CFG_MAT_ANIM_MANUAL_STEP),
|
||||
/* 0x50 */ SCENE_ENTRY(Z2_10YUKIYAMANOMURA, 0x0122, SCENE_DRAW_CFG_MAT_ANIM),
|
||||
/* 0x51 */ SCENE_ENTRY(Z2_TOUGITES, 0x0146, SCENE_DRAW_CFG_DEFAULT),
|
||||
/* 0x52 */ SCENE_ENTRY(Z2_DANPEI, 0x0120, SCENE_DRAW_CFG_MAT_ANIM),
|
||||
/* 0x53 */ SCENE_ENTRY(Z2_IKANAMAE, 0x0000, SCENE_DRAW_CFG_DEFAULT),
|
||||
/* 0x54 */ SCENE_ENTRY(Z2_DOUJOU, 0x0110, SCENE_DRAW_CFG_DEFAULT),
|
||||
/* 0x55 */ SCENE_ENTRY(Z2_MUSICHOUSE, 0x0147, SCENE_DRAW_CFG_MAT_ANIM_MANUAL_STEP),
|
||||
/* 0x56 */ SCENE_ENTRY(Z2_IKNINSIDE, 0x0142, SCENE_DRAW_CFG_MAT_ANIM),
|
||||
/* 0x57 */ SCENE_ENTRY(Z2_MAP_SHOP, 0x0119, SCENE_DRAW_CFG_DEFAULT),
|
||||
/* 0x58 */ SCENE_ENTRY(Z2_F40, 0x0140, SCENE_DRAW_CFG_DEFAULT),
|
||||
/* 0x59 */ SCENE_ENTRY(Z2_F41, 0x0000, SCENE_DRAW_CFG_DEFAULT),
|
||||
/* 0x5A */ SCENE_ENTRY(Z2_10YUKIYAMANOMURA2, 0x0122, SCENE_DRAW_CFG_MAT_ANIM),
|
||||
/* 0x5B */ SCENE_ENTRY(Z2_14YUKIDAMANOMITI, 0x0000, SCENE_DRAW_CFG_DEFAULT),
|
||||
/* 0x5C */ SCENE_ENTRY(Z2_12HAKUGINMAE, 0x0125, SCENE_DRAW_CFG_MAT_ANIM),
|
||||
/* 0x5D */ SCENE_ENTRY(Z2_17SETUGEN, 0x0000, SCENE_DRAW_CFG_MAT_ANIM),
|
||||
/* 0x5E */ SCENE_ENTRY(Z2_17SETUGEN2, 0x0000, SCENE_DRAW_CFG_MAT_ANIM),
|
||||
/* 0x5F */ SCENE_ENTRY(Z2_SEA_BS, 0x0000, SCENE_DRAW_CFG_MAT_ANIM),
|
||||
/* 0x60 */ SCENE_ENTRY(Z2_RANDOM, 0x012C, SCENE_DRAW_CFG_MAT_ANIM),
|
||||
/* 0x61 */ SCENE_ENTRY(Z2_YADOYA, 0x010A, SCENE_DRAW_CFG_MAT_ANIM),
|
||||
/* 0x62 */ SCENE_ENTRY(Z2_KONPEKI_ENT, 0x0139, SCENE_DRAW_CFG_MAT_ANIM),
|
||||
/* 0x63 */ SCENE_ENTRY(Z2_INSIDETOWER, 0x0000, SCENE_DRAW_CFG_MAT_ANIM),
|
||||
/* 0x64 */ SCENE_ENTRY(Z2_26SARUNOMORI, 0x011D, SCENE_DRAW_CFG_MAT_ANIM),
|
||||
/* 0x65 */ SCENE_ENTRY(Z2_LOST_WOODS, 0x0000, SCENE_DRAW_CFG_MAT_ANIM),
|
||||
/* 0x66 */ SCENE_ENTRY(Z2_LAST_LINK, 0x0000, SCENE_DRAW_CFG_DEFAULT),
|
||||
/* 0x67 */ SCENE_ENTRY(Z2_SOUGEN, 0x0000, SCENE_DRAW_CFG_DEFAULT),
|
||||
/* 0x68 */ SCENE_ENTRY(Z2_BOMYA, 0x010D, SCENE_DRAW_CFG_DEFAULT),
|
||||
/* 0x69 */ SCENE_ENTRY(Z2_KYOJINNOMA, 0x0000, SCENE_DRAW_CFG_MAT_ANIM),
|
||||
/* 0x6A */ SCENE_ENTRY(Z2_KOEPONARACE, 0x0131, SCENE_DRAW_CFG_MAT_ANIM),
|
||||
/* 0x6B */ SCENE_ENTRY(Z2_GORONRACE, 0x0126, SCENE_DRAW_CFG_DEFAULT),
|
||||
/* 0x6C */ SCENE_ENTRY(Z2_TOWN, 0x0101, SCENE_DRAW_CFG_DEFAULT),
|
||||
/* 0x6D */ SCENE_ENTRY(Z2_ICHIBA, 0x0102, SCENE_DRAW_CFG_DEFAULT),
|
||||
/* 0x6E */ SCENE_ENTRY(Z2_BACKTOWN, 0x0103, SCENE_DRAW_CFG_DEFAULT),
|
||||
/* 0x6F */ SCENE_ENTRY(Z2_CLOCKTOWER, 0x0104, SCENE_DRAW_CFG_MAT_ANIM),
|
||||
/* 0x70 */ SCENE_ENTRY(Z2_ALLEY, 0x0105, SCENE_DRAW_CFG_MAT_ANIM),
|
||||
};
|
||||
|
||||
static EntranceTableEntry sMayorsResidenceEntrance0[] = {
|
||||
@@ -782,17 +782,17 @@ static EntranceTableEntry* sSwampShootingGalleryEntranceTable[] = {
|
||||
sSwampShootingGalleryEntrance0,
|
||||
};
|
||||
|
||||
static EntranceTableEntry sPinaccleRockEntrance0[] = {
|
||||
static EntranceTableEntry sPinnacleRockEntrance0[] = {
|
||||
{ 0x25, 0x00, 0x4A14 },
|
||||
};
|
||||
|
||||
static EntranceTableEntry sPinaccleRockEntrance1[] = {
|
||||
static EntranceTableEntry sPinnacleRockEntrance1[] = {
|
||||
{ 0x25, 0x01, 0x0A14 },
|
||||
};
|
||||
|
||||
static EntranceTableEntry* sPinaccleRockEntranceTable[] = {
|
||||
sPinaccleRockEntrance0,
|
||||
sPinaccleRockEntrance1,
|
||||
static EntranceTableEntry* sPinnacleRockEntranceTable[] = {
|
||||
sPinnacleRockEntrance0,
|
||||
sPinnacleRockEntrance1,
|
||||
};
|
||||
|
||||
static EntranceTableEntry sFairyFountainEntrance0[] = {
|
||||
@@ -2657,116 +2657,116 @@ static EntranceTableEntry* sCutsceneEntranceTable[] = {
|
||||
{ 0, NULL, NULL }
|
||||
|
||||
static SceneEntranceTableEntry sSceneEntranceTable[] = {
|
||||
SCENE_ENTRANCE(sMayorsResidenceEntranceTable, "Z2_SONCHONOIE"),
|
||||
SCENE_ENTRANCE(sMajorasLairEntranceTable, "Z2_LAST_BS"),
|
||||
SCENE_ENTRANCE(sMagicHagsPotionShopEntranceTable, "Z2_WITCH_SHOP"),
|
||||
SCENE_ENTRANCE(sRanchHouseEntranceTable, "Z2_OMOYA"),
|
||||
SCENE_ENTRANCE(sHoneyAndDarlingsShopEntranceTable, "Z2_BOWLING"),
|
||||
SCENE_ENTRANCE(sBeneathTheGraveryardEntranceTable, "Z2_HAKASHITA"),
|
||||
SCENE_ENTRANCE(sSouthernSwampClearedEntranceTable, "Z2_20SICHITAI2"),
|
||||
SCENE_ENTRANCE(sCuriosityShopEntranceTable, "Z2_AYASHIISHOP"),
|
||||
SCENE_ENTRANCE_NONE(),
|
||||
SCENE_ENTRANCE_NONE(),
|
||||
SCENE_ENTRANCE(sGrottosEntranceTable, "KAKUSIANA"),
|
||||
SCENE_ENTRANCE_NONE(),
|
||||
SCENE_ENTRANCE_NONE(),
|
||||
SCENE_ENTRANCE_NONE(),
|
||||
SCENE_ENTRANCE(sCutsceneEntranceTable, "SPOT00"),
|
||||
SCENE_ENTRANCE_NONE(),
|
||||
SCENE_ENTRANCE(sIkanaCanyonEntranceTable, "Z2_IKANA"),
|
||||
SCENE_ENTRANCE(sPiratesFortressEntranceTable, "Z2_KAIZOKU"),
|
||||
SCENE_ENTRANCE(sMilkBarEntranceTable, "Z2_MILK_BAR"),
|
||||
SCENE_ENTRANCE(sStoneTowerTempleEntranceTable, "Z2_INISIE_N"),
|
||||
SCENE_ENTRANCE(sTreasureChestShopEntranceTable, "Z2_TAKARAYA"),
|
||||
SCENE_ENTRANCE(sStoneTowerTempleReversedEntranceTable, "Z2_INISIE_R"),
|
||||
SCENE_ENTRANCE(sClockTowerRooftopEntranceTable, "Z2_OKUJOU"),
|
||||
SCENE_ENTRANCE(sOpeningDungeonEntranceTable, "Z2_OPENINGDAN"),
|
||||
SCENE_ENTRANCE(sWoodfallTempleEntranceTable, "Z2_MITURIN"),
|
||||
SCENE_ENTRANCE(sPathToMountainVillageEntranceTable, "Z2_13HUBUKINOMITI"),
|
||||
SCENE_ENTRANCE(sIkanaCastleEntranceTable, "Z2_CASTLE"),
|
||||
SCENE_ENTRANCE(sDekuScrubPlaygroundEntranceTable, "Z2_DEKUTES"),
|
||||
SCENE_ENTRANCE(sOdolwasLairEntranceTable, "Z2_MITURIN_BS"),
|
||||
SCENE_ENTRANCE(sTownShootingGalleryEntranceTable, "Z2_SYATEKI_MIZU"),
|
||||
SCENE_ENTRANCE(sSnowheadTempleEntranceTable, "Z2_HAKUGIN"),
|
||||
SCENE_ENTRANCE(sMilkRoadEntranceTable, "Z2_ROMANYMAE"),
|
||||
SCENE_ENTRANCE(sPiratesFortressInteriorEntranceTable, "Z2_PIRATE"),
|
||||
SCENE_ENTRANCE(sSwampShootingGalleryEntranceTable, "Z2_SYATEKI_MORI"),
|
||||
SCENE_ENTRANCE(sPinaccleRockEntranceTable, "Z2_SINKAI"),
|
||||
SCENE_ENTRANCE(sFairyFountainEntranceTable, "Z2_YOUSEI_IZUMI"),
|
||||
SCENE_ENTRANCE(sSwampSpiderHouseEntranceTable, "Z2_KINSTA1"),
|
||||
SCENE_ENTRANCE(sOceansideSpiderHouseEntranceTable, "Z2_KINDAN2"),
|
||||
SCENE_ENTRANCE(sAstralObservatoryEntranceTable, "Z2_TENMON_DAI"),
|
||||
SCENE_ENTRANCE(sMoonDekuTrialEntranceTable, "Z2_LAST_DEKU"),
|
||||
SCENE_ENTRANCE(sDekuPalaceEntranceTable, "Z2_22DEKUCITY"),
|
||||
SCENE_ENTRANCE(sMountainSmithyEntranceTable, "Z2_KAJIYA"),
|
||||
SCENE_ENTRANCE(sTerminaFieldEntranceTable, "Z2_00KEIKOKU"),
|
||||
SCENE_ENTRANCE(sPostOfficeEntranceTable, "Z2_POSTHOUSE"),
|
||||
SCENE_ENTRANCE(sMarineResearchLabEntranceTable, "Z2_LABO"),
|
||||
SCENE_ENTRANCE(sDampesHouseEntranceTable, "Z2_DANPEI2TEST"),
|
||||
SCENE_ENTRANCE_NONE(),
|
||||
SCENE_ENTRANCE(sGoronShrineEntranceTable, "Z2_16GORON_HOUSE"),
|
||||
SCENE_ENTRANCE(sZoraHallEntranceTable, "Z2_33ZORACITY"),
|
||||
SCENE_ENTRANCE(sTradingPostEntranceTable, "Z2_8ITEMSHOP"),
|
||||
SCENE_ENTRANCE(sRomaniRanchEntranceTable, "Z2_F01"),
|
||||
SCENE_ENTRANCE(sTwinmoldsLairEntranceTable, "Z2_INISIE_BS"),
|
||||
SCENE_ENTRANCE(sGreatBayCoastEntranceTable, "Z2_30GYOSON"),
|
||||
SCENE_ENTRANCE(sZoraCapeEntranceTable, "Z2_31MISAKI"),
|
||||
SCENE_ENTRANCE(sLotteryShopEntranceTable, "Z2_TAKARAKUJI"),
|
||||
SCENE_ENTRANCE_NONE(),
|
||||
SCENE_ENTRANCE(sPiratesFortressExteriorEntranceTable, "Z2_TORIDE"),
|
||||
SCENE_ENTRANCE(sFishermansHutEntranceTable, "Z2_FISHERMAN"),
|
||||
SCENE_ENTRANCE(sGoronShopEntranceTable, "Z2_GORONSHOP"),
|
||||
SCENE_ENTRANCE(sDekuKingsChamberEntranceTable, "Z2_DEKU_KING"),
|
||||
SCENE_ENTRANCE(sMoonGoronTrialEntranceTable, "Z2_LAST_GORON"),
|
||||
SCENE_ENTRANCE(sRoadToSouthernSwampEntranceTable, "Z2_24KEMONOMITI"),
|
||||
SCENE_ENTRANCE(sDoggyRacetrackEntranceTable, "Z2_F01_B"),
|
||||
SCENE_ENTRANCE(sCuccoShackEntranceTable, "Z2_F01C"),
|
||||
SCENE_ENTRANCE(sIkanaGraveyardEntranceTable, "Z2_BOTI"),
|
||||
SCENE_ENTRANCE(sGohtsLairEntranceTable, "Z2_HAKUGIN_BS"),
|
||||
SCENE_ENTRANCE(sSouthernSwampPoisonedEntranceTable, "Z2_20SICHITAI"),
|
||||
SCENE_ENTRANCE(sWoodfallEntranceTable, "Z2_21MITURINMAE"),
|
||||
SCENE_ENTRANCE(sMoonZoraTrialEntranceTable, "Z2_LAST_ZORA"),
|
||||
SCENE_ENTRANCE(sGoronVillageSpringEntranceTable, "Z2_11GORONNOSATO2"),
|
||||
SCENE_ENTRANCE(sGreatBayTempleEntranceTable, "Z2_SEA"),
|
||||
SCENE_ENTRANCE(sWaterfallRapidsEntranceTable, "Z2_35TAKI"),
|
||||
SCENE_ENTRANCE(sBeneathTheWellEntranceTable, "Z2_REDEAD"),
|
||||
SCENE_ENTRANCE(sZoraHallRoomsEntranceTable, "Z2_BANDROOM"),
|
||||
SCENE_ENTRANCE(sGoronVillageWinterEntranceTable, "Z2_11GORONNOSATO"),
|
||||
SCENE_ENTRANCE(sGoronGraveryardEntranceTable, "Z2_GORON_HAKA"),
|
||||
SCENE_ENTRANCE(sSakonsHideoutEntranceTable, "Z2_SECOM"),
|
||||
SCENE_ENTRANCE(sMountainVillageWinterEntranceTable, "Z2_10YUKIYAMANOMURA"),
|
||||
SCENE_ENTRANCE(sGhostHutEntranceTable, "Z2_TOUGITES"),
|
||||
SCENE_ENTRANCE(sDekuShrineEntranceTable, "Z2_DANPEI"),
|
||||
SCENE_ENTRANCE(sRoadToIkanaEntranceTable, "Z2_IKANAMAE"),
|
||||
SCENE_ENTRANCE(sSwordmansSchoolEntranceTable, "Z2_DOUJOU"),
|
||||
SCENE_ENTRANCE(sMusicBoxHouseEntranceTable, "Z2_MUSICHOUSE"),
|
||||
SCENE_ENTRANCE(sIgosDuIkanasLairEntranceTable, "Z2_IKNINSIDE"),
|
||||
SCENE_ENTRANCE(sTouristInformationEntranceTable, "Z2_MAP_SHOP"),
|
||||
SCENE_ENTRANCE(sStoneTowerEntranceTable, "Z2_F40"),
|
||||
SCENE_ENTRANCE(sStoneTowerInvertedEntranceTable, "Z2_F41"),
|
||||
SCENE_ENTRANCE(sMountainVillageSpringEntranceTable, "Z2_10YUKIYAMANOMURA2"),
|
||||
SCENE_ENTRANCE(sPathToSnowheadEntranceTable, "Z2_14YUKIDAMANOMITI"),
|
||||
SCENE_ENTRANCE(sSnowheadEntranceTable, "Z2_12HAKUGINMAE"),
|
||||
SCENE_ENTRANCE(sPathToGoronVillageWinterEntranceTable, "Z2_17SETUGEN"),
|
||||
SCENE_ENTRANCE(sPathToGoronVillageSpringEntranceTable, "Z2_17SETUGEN2"),
|
||||
SCENE_ENTRANCE(sGyorgsLairEntranceTable, "Z2_SEA_BS"),
|
||||
SCENE_ENTRANCE(sSecretShrineEntranceTable, "Z2_RANDOM"),
|
||||
SCENE_ENTRANCE(sStockPotInnEntranceTable, "Z2_YADOYA"),
|
||||
SCENE_ENTRANCE(sGreatBayCutsceneEntranceTable, "Z2_KONPEKI_ENT"),
|
||||
SCENE_ENTRANCE(sClockTowerInteriorEntranceTable, "Z2_INSIDETOWER"),
|
||||
SCENE_ENTRANCE(sWoodsOfMysteryEntranceTable, "Z2_26SARUNOMORI"),
|
||||
SCENE_ENTRANCE(sLostWoodsEntranceTable, "Z2_LOST_WOODS"),
|
||||
SCENE_ENTRANCE(sMoonLinkTrialEntranceTable, "Z2_LAST_LINK"),
|
||||
SCENE_ENTRANCE(sTheMoonEntranceTable, "Z2_SOUGEN"),
|
||||
SCENE_ENTRANCE(sBombShopEntranceTable, "Z2_BOMYA"),
|
||||
SCENE_ENTRANCE(sGiantsChamberEntranceTable, "Z2_KYOJINNOMA"),
|
||||
SCENE_ENTRANCE(sGormanTrackEntranceTable, "Z2_KOEPONARACE"),
|
||||
SCENE_ENTRANCE(sGoronRacetrackEntranceTable, "Z2_GORONRACE"),
|
||||
SCENE_ENTRANCE(sEastClockTownEntranceTable, "Z2_TOWN"),
|
||||
SCENE_ENTRANCE(sWestClockTownEntranceTable, "Z2_ICHIBA"),
|
||||
SCENE_ENTRANCE(sNorthClockTownEntranceTable, "Z2_BACKTOWN"),
|
||||
SCENE_ENTRANCE(sSouthClockTownEntranceTable, "Z2_CLOCKTOWER"),
|
||||
SCENE_ENTRANCE(sLaundryPoolEntranceTable, "Z2_ALLEY"),
|
||||
/* 0x00 */ SCENE_ENTRANCE(sMayorsResidenceEntranceTable, "Z2_SONCHONOIE"),
|
||||
/* 0x01 */ SCENE_ENTRANCE(sMajorasLairEntranceTable, "Z2_LAST_BS"),
|
||||
/* 0x02 */ SCENE_ENTRANCE(sMagicHagsPotionShopEntranceTable, "Z2_WITCH_SHOP"),
|
||||
/* 0x03 */ SCENE_ENTRANCE(sRanchHouseEntranceTable, "Z2_OMOYA"),
|
||||
/* 0x04 */ SCENE_ENTRANCE(sHoneyAndDarlingsShopEntranceTable, "Z2_BOWLING"),
|
||||
/* 0x05 */ SCENE_ENTRANCE(sBeneathTheGraveryardEntranceTable, "Z2_HAKASHITA"),
|
||||
/* 0x06 */ SCENE_ENTRANCE(sSouthernSwampClearedEntranceTable, "Z2_20SICHITAI2"),
|
||||
/* 0x07 */ SCENE_ENTRANCE(sCuriosityShopEntranceTable, "Z2_AYASHIISHOP"),
|
||||
/* 0x08 */ SCENE_ENTRANCE_NONE(),
|
||||
/* 0x09 */ SCENE_ENTRANCE_NONE(),
|
||||
/* 0x0A */ SCENE_ENTRANCE(sGrottosEntranceTable, "KAKUSIANA"),
|
||||
/* 0x0B */ SCENE_ENTRANCE_NONE(),
|
||||
/* 0x0C */ SCENE_ENTRANCE_NONE(),
|
||||
/* 0x0D */ SCENE_ENTRANCE_NONE(),
|
||||
/* 0x0E */ SCENE_ENTRANCE(sCutsceneEntranceTable, "SPOT00"),
|
||||
/* 0x0F */ SCENE_ENTRANCE_NONE(),
|
||||
/* 0x10 */ SCENE_ENTRANCE(sIkanaCanyonEntranceTable, "Z2_IKANA"),
|
||||
/* 0x11 */ SCENE_ENTRANCE(sPiratesFortressEntranceTable, "Z2_KAIZOKU"),
|
||||
/* 0x12 */ SCENE_ENTRANCE(sMilkBarEntranceTable, "Z2_MILK_BAR"),
|
||||
/* 0x13 */ SCENE_ENTRANCE(sStoneTowerTempleEntranceTable, "Z2_INISIE_N"),
|
||||
/* 0x14 */ SCENE_ENTRANCE(sTreasureChestShopEntranceTable, "Z2_TAKARAYA"),
|
||||
/* 0x15 */ SCENE_ENTRANCE(sStoneTowerTempleReversedEntranceTable, "Z2_INISIE_R"),
|
||||
/* 0x16 */ SCENE_ENTRANCE(sClockTowerRooftopEntranceTable, "Z2_OKUJOU"),
|
||||
/* 0x17 */ SCENE_ENTRANCE(sOpeningDungeonEntranceTable, "Z2_OPENINGDAN"),
|
||||
/* 0x18 */ SCENE_ENTRANCE(sWoodfallTempleEntranceTable, "Z2_MITURIN"),
|
||||
/* 0x19 */ SCENE_ENTRANCE(sPathToMountainVillageEntranceTable, "Z2_13HUBUKINOMITI"),
|
||||
/* 0x1A */ SCENE_ENTRANCE(sIkanaCastleEntranceTable, "Z2_CASTLE"),
|
||||
/* 0x1B */ SCENE_ENTRANCE(sDekuScrubPlaygroundEntranceTable, "Z2_DEKUTES"),
|
||||
/* 0x1C */ SCENE_ENTRANCE(sOdolwasLairEntranceTable, "Z2_MITURIN_BS"),
|
||||
/* 0x1D */ SCENE_ENTRANCE(sTownShootingGalleryEntranceTable, "Z2_SYATEKI_MIZU"),
|
||||
/* 0x1E */ SCENE_ENTRANCE(sSnowheadTempleEntranceTable, "Z2_HAKUGIN"),
|
||||
/* 0x1F */ SCENE_ENTRANCE(sMilkRoadEntranceTable, "Z2_ROMANYMAE"),
|
||||
/* 0x20 */ SCENE_ENTRANCE(sPiratesFortressInteriorEntranceTable, "Z2_PIRATE"),
|
||||
/* 0x21 */ SCENE_ENTRANCE(sSwampShootingGalleryEntranceTable, "Z2_SYATEKI_MORI"),
|
||||
/* 0x22 */ SCENE_ENTRANCE(sPinnacleRockEntranceTable, "Z2_SINKAI"),
|
||||
/* 0x23 */ SCENE_ENTRANCE(sFairyFountainEntranceTable, "Z2_YOUSEI_IZUMI"),
|
||||
/* 0x24 */ SCENE_ENTRANCE(sSwampSpiderHouseEntranceTable, "Z2_KINSTA1"),
|
||||
/* 0x25 */ SCENE_ENTRANCE(sOceansideSpiderHouseEntranceTable, "Z2_KINDAN2"),
|
||||
/* 0x26 */ SCENE_ENTRANCE(sAstralObservatoryEntranceTable, "Z2_TENMON_DAI"),
|
||||
/* 0x27 */ SCENE_ENTRANCE(sMoonDekuTrialEntranceTable, "Z2_LAST_DEKU"),
|
||||
/* 0x28 */ SCENE_ENTRANCE(sDekuPalaceEntranceTable, "Z2_22DEKUCITY"),
|
||||
/* 0x29 */ SCENE_ENTRANCE(sMountainSmithyEntranceTable, "Z2_KAJIYA"),
|
||||
/* 0x2A */ SCENE_ENTRANCE(sTerminaFieldEntranceTable, "Z2_00KEIKOKU"),
|
||||
/* 0x2B */ SCENE_ENTRANCE(sPostOfficeEntranceTable, "Z2_POSTHOUSE"),
|
||||
/* 0x2C */ SCENE_ENTRANCE(sMarineResearchLabEntranceTable, "Z2_LABO"),
|
||||
/* 0x2D */ SCENE_ENTRANCE(sDampesHouseEntranceTable, "Z2_DANPEI2TEST"),
|
||||
/* 0x2E */ SCENE_ENTRANCE_NONE(),
|
||||
/* 0x2F */ SCENE_ENTRANCE(sGoronShrineEntranceTable, "Z2_16GORON_HOUSE"),
|
||||
/* 0x30 */ SCENE_ENTRANCE(sZoraHallEntranceTable, "Z2_33ZORACITY"),
|
||||
/* 0x31 */ SCENE_ENTRANCE(sTradingPostEntranceTable, "Z2_8ITEMSHOP"),
|
||||
/* 0x32 */ SCENE_ENTRANCE(sRomaniRanchEntranceTable, "Z2_F01"),
|
||||
/* 0x33 */ SCENE_ENTRANCE(sTwinmoldsLairEntranceTable, "Z2_INISIE_BS"),
|
||||
/* 0x34 */ SCENE_ENTRANCE(sGreatBayCoastEntranceTable, "Z2_30GYOSON"),
|
||||
/* 0x35 */ SCENE_ENTRANCE(sZoraCapeEntranceTable, "Z2_31MISAKI"),
|
||||
/* 0x36 */ SCENE_ENTRANCE(sLotteryShopEntranceTable, "Z2_TAKARAKUJI"),
|
||||
/* 0x37 */ SCENE_ENTRANCE_NONE(),
|
||||
/* 0x38 */ SCENE_ENTRANCE(sPiratesFortressExteriorEntranceTable, "Z2_TORIDE"),
|
||||
/* 0x39 */ SCENE_ENTRANCE(sFishermansHutEntranceTable, "Z2_FISHERMAN"),
|
||||
/* 0x3A */ SCENE_ENTRANCE(sGoronShopEntranceTable, "Z2_GORONSHOP"),
|
||||
/* 0x3B */ SCENE_ENTRANCE(sDekuKingsChamberEntranceTable, "Z2_DEKU_KING"),
|
||||
/* 0x3C */ SCENE_ENTRANCE(sMoonGoronTrialEntranceTable, "Z2_LAST_GORON"),
|
||||
/* 0x3D */ SCENE_ENTRANCE(sRoadToSouthernSwampEntranceTable, "Z2_24KEMONOMITI"),
|
||||
/* 0x3E */ SCENE_ENTRANCE(sDoggyRacetrackEntranceTable, "Z2_F01_B"),
|
||||
/* 0x3F */ SCENE_ENTRANCE(sCuccoShackEntranceTable, "Z2_F01C"),
|
||||
/* 0x40 */ SCENE_ENTRANCE(sIkanaGraveyardEntranceTable, "Z2_BOTI"),
|
||||
/* 0x41 */ SCENE_ENTRANCE(sGohtsLairEntranceTable, "Z2_HAKUGIN_BS"),
|
||||
/* 0x42 */ SCENE_ENTRANCE(sSouthernSwampPoisonedEntranceTable, "Z2_20SICHITAI"),
|
||||
/* 0x43 */ SCENE_ENTRANCE(sWoodfallEntranceTable, "Z2_21MITURINMAE"),
|
||||
/* 0x44 */ SCENE_ENTRANCE(sMoonZoraTrialEntranceTable, "Z2_LAST_ZORA"),
|
||||
/* 0x45 */ SCENE_ENTRANCE(sGoronVillageSpringEntranceTable, "Z2_11GORONNOSATO2"),
|
||||
/* 0x46 */ SCENE_ENTRANCE(sGreatBayTempleEntranceTable, "Z2_SEA"),
|
||||
/* 0x47 */ SCENE_ENTRANCE(sWaterfallRapidsEntranceTable, "Z2_35TAKI"),
|
||||
/* 0x48 */ SCENE_ENTRANCE(sBeneathTheWellEntranceTable, "Z2_REDEAD"),
|
||||
/* 0x49 */ SCENE_ENTRANCE(sZoraHallRoomsEntranceTable, "Z2_BANDROOM"),
|
||||
/* 0x4A */ SCENE_ENTRANCE(sGoronVillageWinterEntranceTable, "Z2_11GORONNOSATO"),
|
||||
/* 0x4B */ SCENE_ENTRANCE(sGoronGraveryardEntranceTable, "Z2_GORON_HAKA"),
|
||||
/* 0x4C */ SCENE_ENTRANCE(sSakonsHideoutEntranceTable, "Z2_SECOM"),
|
||||
/* 0x4D */ SCENE_ENTRANCE(sMountainVillageWinterEntranceTable, "Z2_10YUKIYAMANOMURA"),
|
||||
/* 0x4E */ SCENE_ENTRANCE(sGhostHutEntranceTable, "Z2_TOUGITES"),
|
||||
/* 0x4F */ SCENE_ENTRANCE(sDekuShrineEntranceTable, "Z2_DANPEI"),
|
||||
/* 0x50 */ SCENE_ENTRANCE(sRoadToIkanaEntranceTable, "Z2_IKANAMAE"),
|
||||
/* 0x51 */ SCENE_ENTRANCE(sSwordmansSchoolEntranceTable, "Z2_DOUJOU"),
|
||||
/* 0x52 */ SCENE_ENTRANCE(sMusicBoxHouseEntranceTable, "Z2_MUSICHOUSE"),
|
||||
/* 0x53 */ SCENE_ENTRANCE(sIgosDuIkanasLairEntranceTable, "Z2_IKNINSIDE"),
|
||||
/* 0x54 */ SCENE_ENTRANCE(sTouristInformationEntranceTable, "Z2_MAP_SHOP"),
|
||||
/* 0x55 */ SCENE_ENTRANCE(sStoneTowerEntranceTable, "Z2_F40"),
|
||||
/* 0x56 */ SCENE_ENTRANCE(sStoneTowerInvertedEntranceTable, "Z2_F41"),
|
||||
/* 0x57 */ SCENE_ENTRANCE(sMountainVillageSpringEntranceTable, "Z2_10YUKIYAMANOMURA2"),
|
||||
/* 0x58 */ SCENE_ENTRANCE(sPathToSnowheadEntranceTable, "Z2_14YUKIDAMANOMITI"),
|
||||
/* 0x59 */ SCENE_ENTRANCE(sSnowheadEntranceTable, "Z2_12HAKUGINMAE"),
|
||||
/* 0x5A */ SCENE_ENTRANCE(sPathToGoronVillageWinterEntranceTable, "Z2_17SETUGEN"),
|
||||
/* 0x5B */ SCENE_ENTRANCE(sPathToGoronVillageSpringEntranceTable, "Z2_17SETUGEN2"),
|
||||
/* 0x5C */ SCENE_ENTRANCE(sGyorgsLairEntranceTable, "Z2_SEA_BS"),
|
||||
/* 0x5D */ SCENE_ENTRANCE(sSecretShrineEntranceTable, "Z2_RANDOM"),
|
||||
/* 0x5E */ SCENE_ENTRANCE(sStockPotInnEntranceTable, "Z2_YADOYA"),
|
||||
/* 0x5F */ SCENE_ENTRANCE(sGreatBayCutsceneEntranceTable, "Z2_KONPEKI_ENT"),
|
||||
/* 0x60 */ SCENE_ENTRANCE(sClockTowerInteriorEntranceTable, "Z2_INSIDETOWER"),
|
||||
/* 0x61 */ SCENE_ENTRANCE(sWoodsOfMysteryEntranceTable, "Z2_26SARUNOMORI"),
|
||||
/* 0x62 */ SCENE_ENTRANCE(sLostWoodsEntranceTable, "Z2_LOST_WOODS"),
|
||||
/* 0x63 */ SCENE_ENTRANCE(sMoonLinkTrialEntranceTable, "Z2_LAST_LINK"),
|
||||
/* 0x64 */ SCENE_ENTRANCE(sTheMoonEntranceTable, "Z2_SOUGEN"),
|
||||
/* 0x65 */ SCENE_ENTRANCE(sBombShopEntranceTable, "Z2_BOMYA"),
|
||||
/* 0x66 */ SCENE_ENTRANCE(sGiantsChamberEntranceTable, "Z2_KYOJINNOMA"),
|
||||
/* 0x67 */ SCENE_ENTRANCE(sGormanTrackEntranceTable, "Z2_KOEPONARACE"),
|
||||
/* 0x68 */ SCENE_ENTRANCE(sGoronRacetrackEntranceTable, "Z2_GORONRACE"),
|
||||
/* 0x69 */ SCENE_ENTRANCE(sEastClockTownEntranceTable, "Z2_TOWN"),
|
||||
/* 0x6A */ SCENE_ENTRANCE(sWestClockTownEntranceTable, "Z2_ICHIBA"),
|
||||
/* 0x6B */ SCENE_ENTRANCE(sNorthClockTownEntranceTable, "Z2_BACKTOWN"),
|
||||
/* 0x6C */ SCENE_ENTRANCE(sSouthClockTownEntranceTable, "Z2_CLOCKTOWER"),
|
||||
/* 0x6D */ SCENE_ENTRANCE(sLaundryPoolEntranceTable, "Z2_ALLEY"),
|
||||
};
|
||||
|
||||
/**
|
||||
|
||||
+91
-49
@@ -1,80 +1,96 @@
|
||||
#include "global.h"
|
||||
#include "z64snap.h"
|
||||
#include "overlays/actors/ovl_En_Kakasi/z_en_kakasi.h"
|
||||
|
||||
typedef struct {
|
||||
Actor actor;
|
||||
s32 (*pictoFunc)(PlayState* play, Actor* actor);
|
||||
} PictoActor;
|
||||
#define PICTO_SEEN_IN_SCENE 1
|
||||
#define PICTO_SEEN_ANYWHERE 2
|
||||
|
||||
s32 func_8013A240(PlayState* play) {
|
||||
/**
|
||||
* Test every loaded actor to see if it is a pictographable `PictoActor`, and if so, run its `validationFunc` to set
|
||||
* appropriate flags.
|
||||
*
|
||||
* @return s32 Number of pictograph actors validly captured.
|
||||
*/
|
||||
s32 Snap_RecordPictographedActors(PlayState* play) {
|
||||
PictoActor* pictoActor;
|
||||
Actor* actor;
|
||||
s32 type = 0;
|
||||
s32 category = 0;
|
||||
s32 seen;
|
||||
s32 count = 0;
|
||||
s32 validCount = 0;
|
||||
|
||||
gSaveContext.save.pictoFlags0 = 0;
|
||||
gSaveContext.save.pictoFlags1 = 0;
|
||||
|
||||
if (play->sceneNum == SCENE_20SICHITAI) {
|
||||
func_8013A41C(1);
|
||||
Snap_SetFlag(PICTOGRAPH_IN_SWAMP);
|
||||
}
|
||||
|
||||
for (; type < 12; type++) {
|
||||
for (actor = play->actorCtx.actorLists[type].first; actor != NULL; actor = actor->next) {
|
||||
for (; category < ACTORCAT_MAX; category++) {
|
||||
for (actor = play->actorCtx.actorLists[category].first; actor != NULL; actor = actor->next) {
|
||||
seen = 0;
|
||||
|
||||
// Actors which must be pictographed in a specific scene
|
||||
switch (play->sceneNum) {
|
||||
case SCENE_20SICHITAI:
|
||||
if ((actor->id == ACTOR_EN_MNK) || (actor->id == ACTOR_EN_BIGOKUTA)) {
|
||||
seen = 1;
|
||||
seen = PICTO_SEEN_IN_SCENE;
|
||||
}
|
||||
break;
|
||||
|
||||
default:
|
||||
seen = 0;
|
||||
break;
|
||||
}
|
||||
|
||||
if (actor->id) {
|
||||
; // Needed to match
|
||||
}
|
||||
|
||||
// Actors which may be pictographed anywhere
|
||||
switch (actor->id) {
|
||||
case ACTOR_EN_KAKASI:
|
||||
if ((actor->params & 1) == 1) {
|
||||
seen |= 2;
|
||||
if (GET_KAKASI_ABOVE_GROUND(actor) == 1) {
|
||||
seen |= PICTO_SEEN_ANYWHERE;
|
||||
break; //! @bug break is inside conditional, meaning it falls through if it is false
|
||||
}
|
||||
// FALLTHROUGH
|
||||
case ACTOR_EN_ZOV:
|
||||
seen |= 2;
|
||||
seen |= PICTO_SEEN_ANYWHERE;
|
||||
break;
|
||||
|
||||
case ACTOR_EN_BAL:
|
||||
seen |= 2;
|
||||
seen |= PICTO_SEEN_ANYWHERE;
|
||||
break;
|
||||
|
||||
case ACTOR_EN_DNQ:
|
||||
seen |= 2;
|
||||
seen |= PICTO_SEEN_ANYWHERE;
|
||||
break;
|
||||
|
||||
case ACTOR_EN_GE1:
|
||||
case ACTOR_EN_GE3:
|
||||
case ACTOR_EN_KAIZOKU:
|
||||
case ACTOR_EN_GE2:
|
||||
seen |= 2;
|
||||
seen |= PICTO_SEEN_ANYWHERE;
|
||||
break;
|
||||
}
|
||||
|
||||
if (seen != 0) {
|
||||
// If actor is recordable, run its validity function and record if valid
|
||||
if (seen) {
|
||||
pictoActor = (PictoActor*)actor;
|
||||
if (pictoActor->pictoFunc != NULL) {
|
||||
if ((pictoActor->pictoFunc)(play, actor) == 0) {
|
||||
count++;
|
||||
if (pictoActor->validationFunc != NULL) {
|
||||
if ((pictoActor->validationFunc)(play, actor) == 0) {
|
||||
validCount++;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return count;
|
||||
return validCount;
|
||||
}
|
||||
|
||||
void func_8013A41C(s32 flag) {
|
||||
// Only used in this file
|
||||
void Snap_SetFlag(s32 flag) {
|
||||
if (flag < 0x20) {
|
||||
gSaveContext.save.pictoFlags0 |= (1 << flag);
|
||||
} else {
|
||||
@@ -83,7 +99,8 @@ void func_8013A41C(s32 flag) {
|
||||
}
|
||||
}
|
||||
|
||||
void func_8013A46C(s32 flag) {
|
||||
// Unused
|
||||
void Snap_UnsetFlag(s32 flag) {
|
||||
if (flag < 0x20) {
|
||||
gSaveContext.save.pictoFlags0 &= ~(1 << flag);
|
||||
} else {
|
||||
@@ -92,7 +109,7 @@ void func_8013A46C(s32 flag) {
|
||||
}
|
||||
}
|
||||
|
||||
u32 func_8013A4C4(s32 flag) {
|
||||
u32 Snap_CheckFlag(s32 flag) {
|
||||
SaveContext* saveCtx = &gSaveContext;
|
||||
|
||||
if (flag < 0x20) {
|
||||
@@ -103,13 +120,29 @@ u32 func_8013A4C4(s32 flag) {
|
||||
}
|
||||
}
|
||||
|
||||
s16 func_8013A504(s16 val) {
|
||||
return (val >= 0) ? val : -val;
|
||||
s16 Snap_AbsS(s16 val) {
|
||||
return ABS(val);
|
||||
}
|
||||
|
||||
s32 func_8013A530(PlayState* play, Actor* actor, s32 flag, Vec3f* pos, Vec3s* rot, f32 distanceMin, f32 distanceMax,
|
||||
s16 angleError) {
|
||||
Vec3f screenSpace;
|
||||
/**
|
||||
* Test if a pictograph is a valid pictograph of an actor
|
||||
*
|
||||
* @param play
|
||||
* @param actor Actor to test
|
||||
* @param flag Flag to set if checks successful
|
||||
* @param pos position of point to test (generally a particular point in the actor's model)
|
||||
* @param rot rotation of point to test (for facing camera)
|
||||
* @param distanceMin closest point may be
|
||||
* @param distanceMax farthest away point may be
|
||||
* @param angleRange Size of range that counts as facing the camera (-1 is used for any allowed)
|
||||
* @return s32 0 on success, `or`ed combination of the validity flag indices if not
|
||||
*
|
||||
* @note It is generally not possible to recover the actual failure mode(s) from the return value: oring `ret` with the
|
||||
* actual flag rather than its index would rectify this.
|
||||
*/
|
||||
s32 Snap_ValidatePictograph(PlayState* play, Actor* actor, s32 flag, Vec3f* pos, Vec3s* rot, f32 distanceMin,
|
||||
f32 distanceMax, s16 angleRange) {
|
||||
Vec3f projectedPos;
|
||||
s16 x;
|
||||
s16 y;
|
||||
f32 distance;
|
||||
@@ -119,42 +152,51 @@ s32 func_8013A530(PlayState* play, Actor* actor, s32 flag, Vec3f* pos, Vec3s* ro
|
||||
s32 ret = 0;
|
||||
s32 bgId;
|
||||
|
||||
// Check distance
|
||||
distance = OLib_Vec3fDist(pos, &camera->eye);
|
||||
if ((distance < distanceMin) || (distanceMax < distance)) {
|
||||
func_8013A41C(0x3F);
|
||||
ret = 0x3F;
|
||||
Snap_SetFlag(PICTOGRAPH_BAD_DISTANCE);
|
||||
ret = PICTOGRAPH_BAD_DISTANCE;
|
||||
}
|
||||
|
||||
x = func_8013A504(Camera_GetCamDirPitch(camera) + rot->x);
|
||||
y = func_8013A504(Camera_GetCamDirYaw(camera) - BINANG_SUB(rot->y, 0x7FFF));
|
||||
if ((0 < angleError) && ((angleError < x) || (angleError < y))) {
|
||||
func_8013A41C(0x3E);
|
||||
ret |= 0x3E;
|
||||
// Check rot is facing camera?
|
||||
x = Snap_AbsS(Camera_GetCamDirPitch(camera) + rot->x);
|
||||
y = Snap_AbsS(Camera_GetCamDirYaw(camera) - BINANG_SUB(rot->y, 0x7FFF));
|
||||
if ((0 < angleRange) && ((angleRange < x) || (angleRange < y))) {
|
||||
Snap_SetFlag(PICTOGRAPH_BAD_ANGLE);
|
||||
ret |= PICTOGRAPH_BAD_ANGLE;
|
||||
}
|
||||
|
||||
Actor_GetProjectedPos(play, pos, &screenSpace, &distance);
|
||||
x = (s16)(screenSpace.x * distance * 160.0f + 160.0f) - 85;
|
||||
y = (s16)(screenSpace.y * distance * -120.0f + 120.0f) - 67;
|
||||
if ((x < 0) || (150 < x) || (y < 0) || (105 < y)) {
|
||||
func_8013A41C(0x3D);
|
||||
ret |= 0x3D;
|
||||
// Check in capture region
|
||||
Actor_GetProjectedPos(play, pos, &projectedPos, &distance);
|
||||
// Convert to projected position to device coordinates, shift to be relative to the capture region's top-left corner
|
||||
x = (s16)PROJECTED_TO_SCREEN_X(projectedPos, distance) - PICTO_CAPTURE_REGION_TOPLEFT_X;
|
||||
y = (s16)PROJECTED_TO_SCREEN_Y(projectedPos, distance) - PICTO_CAPTURE_REGION_TOPLEFT_Y;
|
||||
|
||||
// checks if the coordinates are within the capture region
|
||||
if ((x < 0) || (x > PICTO_RESOLUTION_HORIZONTAL) || (y < 0) || (y > PICTO_RESOLUTION_VERTICAL)) {
|
||||
Snap_SetFlag(PICTOGRAPH_NOT_IN_VIEW);
|
||||
ret |= PICTOGRAPH_NOT_IN_VIEW;
|
||||
}
|
||||
|
||||
if (BgCheck_ProjectileLineTest(&play->colCtx, pos, &camera->eye, &screenSpace, &poly, true, true, true, true,
|
||||
// Check not obscured by bg collision
|
||||
if (BgCheck_ProjectileLineTest(&play->colCtx, pos, &camera->eye, &projectedPos, &poly, true, true, true, true,
|
||||
&bgId)) {
|
||||
func_8013A41C(0x3C);
|
||||
ret |= 0x3C;
|
||||
Snap_SetFlag(PICTOGRAPH_BEHIND_BG);
|
||||
ret |= PICTOGRAPH_BEHIND_BG;
|
||||
}
|
||||
|
||||
// Check not obscured by actor collision
|
||||
actors[0] = actor;
|
||||
actors[1] = &GET_PLAYER(play)->actor;
|
||||
if (CollisionCheck_LineOCCheck(play, &play->colChkCtx, pos, &camera->eye, actors, 2)) {
|
||||
func_8013A41C(0x3B);
|
||||
ret |= 0x3B;
|
||||
Snap_SetFlag(PICTOGRAPH_BEHIND_COLLISION);
|
||||
ret |= PICTOGRAPH_BEHIND_COLLISION;
|
||||
}
|
||||
|
||||
// If all of the above checks pass, set the flag
|
||||
if (ret == 0) {
|
||||
func_8013A41C(flag);
|
||||
Snap_SetFlag(flag);
|
||||
}
|
||||
|
||||
return ret;
|
||||
|
||||
@@ -183,19 +183,19 @@ void func_80C168D0(DemoSyoten* this, PlayState* play) {
|
||||
s32 pad;
|
||||
Path* path = this->unk_3E8;
|
||||
Vec3s* points;
|
||||
Vec3f sp30;
|
||||
Vec3f sp24;
|
||||
f32 sp20;
|
||||
Vec3f worldPos;
|
||||
Vec3f projectedPos;
|
||||
f32 invW;
|
||||
|
||||
if (path != NULL) {
|
||||
points = Lib_SegmentedToVirtual(this->unk_3E8->points);
|
||||
points += this->unk_3EC;
|
||||
Math_Vec3s_ToVec3f(&sp30, points);
|
||||
Actor_GetProjectedPos(play, &sp30, &sp24, &sp20);
|
||||
Math_Vec3f_Copy(&sp30, &this->actor.projectedPos);
|
||||
sp30.z = sp30.y;
|
||||
sp24.z = sp24.y;
|
||||
this->actor.shape.rot.z = -Math_Vec3f_Yaw(&sp24, &sp30);
|
||||
Math_Vec3s_ToVec3f(&worldPos, points);
|
||||
Actor_GetProjectedPos(play, &worldPos, &projectedPos, &invW);
|
||||
Math_Vec3f_Copy(&worldPos, &this->actor.projectedPos);
|
||||
worldPos.z = worldPos.y;
|
||||
projectedPos.z = projectedPos.y;
|
||||
this->actor.shape.rot.z = -Math_Vec3f_Yaw(&projectedPos, &worldPos);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -100,7 +100,7 @@ extern UNK_TYPE D_0600D530;
|
||||
|
||||
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Bal/func_80A61A44.s")
|
||||
|
||||
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Bal/func_80A61A6C.s")
|
||||
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Bal/EnBal_ValidatePictograph.s")
|
||||
|
||||
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Bal/func_80A61ADC.s")
|
||||
|
||||
|
||||
@@ -2,14 +2,15 @@
|
||||
#define Z_EN_BAL_H
|
||||
|
||||
#include "global.h"
|
||||
#include "z64snap.h"
|
||||
|
||||
struct EnBal;
|
||||
|
||||
typedef void (*EnBalActionFunc)(struct EnBal*, PlayState*);
|
||||
|
||||
typedef struct EnBal {
|
||||
/* 0x000 */ Actor actor;
|
||||
/* 0x144 */ char unk_144[0x48];
|
||||
/* 0x000 */ PictoActor picto;
|
||||
/* 0x148 */ char unk_148[0x44];
|
||||
/* 0x18C */ EnBalActionFunc actionFunc;
|
||||
/* 0x190 */ char unk_190[0x224];
|
||||
} EnBal; // size = 0x3B4
|
||||
|
||||
@@ -15,7 +15,7 @@ void EnBigokuta_Destroy(Actor* thisx, PlayState* play);
|
||||
void EnBigokuta_Update(Actor* thisx, PlayState* play);
|
||||
void EnBigokuta_Draw(Actor* thisx, PlayState* play);
|
||||
|
||||
void func_80AC2B4C(PlayState* play, EnBigokuta* this);
|
||||
s32 EnBigokuta_ValidatePictograph(PlayState* play, Actor* thisx);
|
||||
void EnBigokuta_SetupIdle(EnBigokuta* this);
|
||||
void EnBigokuta_Idle(EnBigokuta* this, PlayState* play);
|
||||
void EnBigokuta_SetupRise(EnBigokuta* this, PlayState* play);
|
||||
@@ -95,28 +95,28 @@ static InitChainEntry sInitChain[] = {
|
||||
void EnBigokuta_Init(Actor* thisx, PlayState* play) {
|
||||
EnBigokuta* this = THIS;
|
||||
|
||||
Actor_ProcessInitChain(&this->actor, sInitChain);
|
||||
Actor_ProcessInitChain(&this->picto.actor, sInitChain);
|
||||
SkelAnime_InitFlex(play, &this->skelAnime, &gBigOctoSkel, &gBigOctoIdleAnim, this->jointTable, this->morphTable,
|
||||
BIGOKUTA_LIMB_MAX);
|
||||
|
||||
Collider_InitAndSetCylinder(play, &this->shellCollider, &this->actor, &sShellCylinderInit);
|
||||
Collider_InitAndSetCylinder(play, &this->bodyCollider, &this->actor, &sBodyCylinderInit);
|
||||
CollisionCheck_SetInfo(&this->actor.colChkInfo, NULL, &sColChkInfoInit);
|
||||
this->cutscene = ActorCutscene_GetAdditionalCutscene(this->actor.cutscene);
|
||||
Collider_InitAndSetCylinder(play, &this->shellCollider, &this->picto.actor, &sShellCylinderInit);
|
||||
Collider_InitAndSetCylinder(play, &this->bodyCollider, &this->picto.actor, &sBodyCylinderInit);
|
||||
CollisionCheck_SetInfo(&this->picto.actor.colChkInfo, NULL, &sColChkInfoInit);
|
||||
this->cutscene = ActorCutscene_GetAdditionalCutscene(this->picto.actor.cutscene);
|
||||
|
||||
if (gSaveContext.save.weekEventReg[20] & 2 ||
|
||||
((this->actor.params != 0xFF) && Flags_GetSwitch(play, this->actor.params))) {
|
||||
Actor_MarkForDeath(&this->actor);
|
||||
((this->picto.actor.params != 0xFF) && Flags_GetSwitch(play, this->picto.actor.params))) {
|
||||
Actor_MarkForDeath(&this->picto.actor);
|
||||
} else {
|
||||
this->actor.world.pos.y -= 99.0f;
|
||||
this->picto.actor.world.pos.y -= 99.0f;
|
||||
EnBigokuta_SetupIdle(this);
|
||||
}
|
||||
|
||||
this->subCamAt.x = (Math_SinS(this->actor.home.rot.y) * 66.0f) + this->actor.world.pos.x;
|
||||
this->subCamAt.y = (this->actor.home.pos.y - 49.5f) + 42.899998f;
|
||||
this->subCamAt.z = (Math_CosS(this->actor.home.rot.y) * 66.0f) + this->actor.world.pos.z;
|
||||
this->subCamAt.x = (Math_SinS(this->picto.actor.home.rot.y) * 66.0f) + this->picto.actor.world.pos.x;
|
||||
this->subCamAt.y = (this->picto.actor.home.pos.y - 49.5f) + 42.899998f;
|
||||
this->subCamAt.z = (Math_CosS(this->picto.actor.home.rot.y) * 66.0f) + this->picto.actor.world.pos.z;
|
||||
|
||||
this->unkFunc = func_80AC2B4C; // set but never called
|
||||
this->picto.validationFunc = EnBigokuta_ValidatePictograph;
|
||||
}
|
||||
|
||||
void EnBigokuta_Destroy(Actor* thisx, PlayState* play) {
|
||||
@@ -129,15 +129,15 @@ void EnBigokuta_Destroy(Actor* thisx, PlayState* play) {
|
||||
void EnBigokuta_SetupCutsceneCamera(EnBigokuta* this, PlayState* play, Vec3f* subCamAt, Vec3f* subCamEye) {
|
||||
s16 angle;
|
||||
|
||||
ActorCutscene_Start(this->actor.cutscene, &this->actor);
|
||||
this->subCamId = ActorCutscene_GetCurrentSubCamId(this->actor.cutscene);
|
||||
ActorCutscene_Start(this->picto.actor.cutscene, &this->picto.actor);
|
||||
this->subCamId = ActorCutscene_GetCurrentSubCamId(this->picto.actor.cutscene);
|
||||
Play_CameraSetAtEye(play, this->subCamId, subCamAt, subCamEye);
|
||||
|
||||
angle = BINANG_SUB(Actor_YawToPoint(&this->actor, subCamEye), this->actor.home.rot.y);
|
||||
angle = BINANG_SUB(Actor_YawToPoint(&this->picto.actor, subCamEye), this->picto.actor.home.rot.y);
|
||||
if (angle > 0) {
|
||||
angle = BINANG_ADD(this->actor.home.rot.y, 0x1800);
|
||||
angle = BINANG_ADD(this->picto.actor.home.rot.y, 0x1800);
|
||||
} else {
|
||||
angle = BINANG_SUB(this->actor.home.rot.y, 0x1800);
|
||||
angle = BINANG_SUB(this->picto.actor.home.rot.y, 0x1800);
|
||||
}
|
||||
|
||||
this->subCamEye.x = (Math_SinS(angle) * 250.0f) + this->subCamAt.x;
|
||||
@@ -160,37 +160,38 @@ void EnBigokuta_ResetCamera(EnBigokuta* this, PlayState* play) {
|
||||
subCam = Play_GetCamera(play, this->subCamId);
|
||||
Play_CameraSetAtEye(play, CAM_ID_MAIN, &subCam->at, &subCam->eye);
|
||||
this->subCamId = SUB_CAM_ID_DONE;
|
||||
ActorCutscene_Stop(this->actor.cutscene);
|
||||
ActorCutscene_Stop(this->picto.actor.cutscene);
|
||||
}
|
||||
}
|
||||
|
||||
void EnBigokuta_ShootPlayer(EnBigokuta* this, PlayState* play) {
|
||||
Player* player = GET_PLAYER(play);
|
||||
|
||||
if (&this->actor == player->actor.parent) {
|
||||
if (&this->picto.actor == player->actor.parent) {
|
||||
player->actor.parent = NULL;
|
||||
player->unk_AE8 = 100;
|
||||
player->actor.velocity.y = 0.0f;
|
||||
player->actor.world.pos.x += 20.0f * Math_SinS(this->actor.home.rot.y);
|
||||
player->actor.world.pos.z += 20.0f * Math_CosS(this->actor.home.rot.y);
|
||||
func_800B8D50(play, &this->actor, 10.0f, this->actor.home.rot.y, 10.0f, 4);
|
||||
player->actor.world.pos.x += 20.0f * Math_SinS(this->picto.actor.home.rot.y);
|
||||
player->actor.world.pos.z += 20.0f * Math_CosS(this->picto.actor.home.rot.y);
|
||||
func_800B8D50(play, &this->picto.actor, 10.0f, this->picto.actor.home.rot.y, 10.0f, 4);
|
||||
}
|
||||
EnBigokuta_ResetCamera(this, play);
|
||||
}
|
||||
|
||||
void func_80AC2B4C(PlayState* play, EnBigokuta* this) {
|
||||
func_8013A530(play, &this->actor, 3, &this->actor.focus.pos, &this->actor.shape.rot, 280.0f, 1800.0f, -1);
|
||||
s32 EnBigokuta_ValidatePictograph(PlayState* play, Actor* thisx) {
|
||||
return Snap_ValidatePictograph(play, thisx, PICTOGRAPH_BIG_OCTO, &thisx->focus.pos, &thisx->shape.rot, 280.0f,
|
||||
1800.0f, -1);
|
||||
}
|
||||
|
||||
s32 EnBigokuta_IsInWater(EnBigokuta* this, PlayState* play) {
|
||||
WaterBox* box;
|
||||
s32 bgId;
|
||||
|
||||
this->actor.floorHeight =
|
||||
BgCheck_EntityRaycastFloor5(&play->colCtx, &this->actor.floorPoly, &bgId, &this->actor, &this->actor.world.pos);
|
||||
if (!WaterBox_GetSurface1_2(play, &play->colCtx, this->actor.world.pos.x, this->actor.world.pos.z,
|
||||
&this->actor.home.pos.y, &box) ||
|
||||
(this->actor.home.pos.y <= this->actor.floorHeight)) {
|
||||
this->picto.actor.floorHeight = BgCheck_EntityRaycastFloor5(&play->colCtx, &this->picto.actor.floorPoly, &bgId,
|
||||
&this->picto.actor, &this->picto.actor.world.pos);
|
||||
if (!WaterBox_GetSurface1_2(play, &play->colCtx, this->picto.actor.world.pos.x, this->picto.actor.world.pos.z,
|
||||
&this->picto.actor.home.pos.y, &box) ||
|
||||
(this->picto.actor.home.pos.y <= this->picto.actor.floorHeight)) {
|
||||
return false;
|
||||
} else {
|
||||
return true;
|
||||
@@ -200,9 +201,9 @@ s32 EnBigokuta_IsInWater(EnBigokuta* this, PlayState* play) {
|
||||
void EnBigokuta_SpawnRipple(EnBigokuta* this, PlayState* play) {
|
||||
Vec3f ripplePos;
|
||||
|
||||
ripplePos.x = this->actor.world.pos.x;
|
||||
ripplePos.y = this->actor.home.pos.y;
|
||||
ripplePos.z = this->actor.world.pos.z;
|
||||
ripplePos.x = this->picto.actor.world.pos.x;
|
||||
ripplePos.y = this->picto.actor.home.pos.y;
|
||||
ripplePos.z = this->picto.actor.world.pos.z;
|
||||
EffectSsGRipple_Spawn(play, &ripplePos, 1000, 1400, 0);
|
||||
}
|
||||
|
||||
@@ -215,9 +216,10 @@ void EnBigokuta_Idle(EnBigokuta* this, PlayState* play) {
|
||||
Player* player = GET_PLAYER(play);
|
||||
|
||||
SkelAnime_Update(&this->skelAnime);
|
||||
Math_StepToF(&this->actor.world.pos.y, this->actor.home.pos.y - 99.0f, 2.5f);
|
||||
Math_ApproachS(&this->actor.shape.rot.y, this->actor.yawTowardsPlayer, 5, 0x1000);
|
||||
if ((this->actor.xzDistToPlayer < 300.0f) && ((player->actor.world.pos.y - this->actor.home.pos.y) < 100.0f)) {
|
||||
Math_StepToF(&this->picto.actor.world.pos.y, this->picto.actor.home.pos.y - 99.0f, 2.5f);
|
||||
Math_ApproachS(&this->picto.actor.shape.rot.y, this->picto.actor.yawTowardsPlayer, 5, 0x1000);
|
||||
if ((this->picto.actor.xzDistToPlayer < 300.0f) &&
|
||||
((player->actor.world.pos.y - this->picto.actor.home.pos.y) < 100.0f)) {
|
||||
EnBigokuta_SetupRise(this, play);
|
||||
}
|
||||
}
|
||||
@@ -228,19 +230,19 @@ void EnBigokuta_SetupRise(EnBigokuta* this, PlayState* play) {
|
||||
s16 angle = 0;
|
||||
|
||||
Animation_PlayOnce(&this->skelAnime, &gBigOctoRiseOutOfWaterAnim);
|
||||
splashPos.y = this->actor.home.pos.y;
|
||||
splashPos.y = this->picto.actor.home.pos.y;
|
||||
for (i = 0; i < 8; i++) {
|
||||
splashPos.x = Math_SinS(angle) * 70.0f + this->actor.world.pos.x;
|
||||
splashPos.z = Math_CosS(angle) * 70.0f + this->actor.world.pos.z;
|
||||
splashPos.x = Math_SinS(angle) * 70.0f + this->picto.actor.world.pos.x;
|
||||
splashPos.z = Math_CosS(angle) * 70.0f + this->picto.actor.world.pos.z;
|
||||
EffectSsGSplash_Spawn(play, &splashPos, NULL, NULL, 0, Rand_S16Offset(1000, 200));
|
||||
angle = BINANG_ADD(angle, 0x2000);
|
||||
}
|
||||
Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_DAIOCTA_LAND);
|
||||
Actor_PlaySfxAtPos(&this->picto.actor, NA_SE_EN_DAIOCTA_LAND);
|
||||
this->actionFunc = EnBigokuta_RiseOutOfWater;
|
||||
}
|
||||
|
||||
void EnBigokuta_RiseOutOfWater(EnBigokuta* this, PlayState* play) {
|
||||
Math_StepToF(&this->actor.world.pos.y, this->actor.home.pos.y - 16.5f, 15.0f);
|
||||
Math_StepToF(&this->picto.actor.world.pos.y, this->picto.actor.home.pos.y - 16.5f, 15.0f);
|
||||
if (SkelAnime_Update(&this->skelAnime)) {
|
||||
EnBigokuta_SetupIdleAboveWater(this);
|
||||
}
|
||||
@@ -253,27 +255,27 @@ void EnBigokuta_SetupIdleAboveWater(EnBigokuta* this) {
|
||||
|
||||
void EnBigokuta_IdleAboveWater(EnBigokuta* this, PlayState* play) {
|
||||
SkelAnime_Update(&this->skelAnime);
|
||||
Math_StepToF(&this->actor.world.pos.y, this->actor.home.pos.y - 16.5f, 2.5f);
|
||||
Math_ApproachS(&this->actor.shape.rot.y, this->actor.yawTowardsPlayer, 5, 0x1000);
|
||||
Math_StepToF(&this->picto.actor.world.pos.y, this->picto.actor.home.pos.y - 16.5f, 2.5f);
|
||||
Math_ApproachS(&this->picto.actor.shape.rot.y, this->picto.actor.yawTowardsPlayer, 5, 0x1000);
|
||||
|
||||
if ((this->actor.xzDistToPlayer > 400.0f) || (this->actor.playerHeightRel > 200.0f)) {
|
||||
Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_DAIOCTA_SINK);
|
||||
if ((this->picto.actor.xzDistToPlayer > 400.0f) || (this->picto.actor.playerHeightRel > 200.0f)) {
|
||||
Actor_PlaySfxAtPos(&this->picto.actor, NA_SE_EN_DAIOCTA_SINK);
|
||||
EnBigokuta_SetupIdle(this);
|
||||
} else if ((this->actor.xzDistToPlayer < 200.0f) && play->grabPlayer(play, GET_PLAYER(play))) {
|
||||
} else if ((this->picto.actor.xzDistToPlayer < 200.0f) && play->grabPlayer(play, GET_PLAYER(play))) {
|
||||
EnBigokuta_SetupSuckInPlayer(this, play);
|
||||
}
|
||||
}
|
||||
|
||||
void EnBigokuta_UpdateOrSetupCam(EnBigokuta* this, PlayState* play) {
|
||||
if (this->actor.cutscene != -1) {
|
||||
if (this->picto.actor.cutscene != -1) {
|
||||
if (this->subCamId != SUB_CAM_ID_DONE) {
|
||||
EnBigokuta_MoveCamera(this, play);
|
||||
} else if (ActorCutscene_GetCanPlayNext(this->actor.cutscene)) {
|
||||
} else if (ActorCutscene_GetCanPlayNext(this->picto.actor.cutscene)) {
|
||||
Camera* mainCam = Play_GetCamera(play, CAM_ID_MAIN);
|
||||
|
||||
EnBigokuta_SetupCutsceneCamera(this, play, &mainCam->at, &mainCam->eye);
|
||||
} else {
|
||||
ActorCutscene_SetIntentToPlay(this->actor.cutscene);
|
||||
ActorCutscene_SetIntentToPlay(this->picto.actor.cutscene);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -281,19 +283,19 @@ void EnBigokuta_UpdateOrSetupCam(EnBigokuta* this, PlayState* play) {
|
||||
void EnBigokuta_SetupSuckInPlayer(EnBigokuta* this, PlayState* play) {
|
||||
Player* player = GET_PLAYER(play);
|
||||
|
||||
player->actor.parent = &this->actor;
|
||||
this->actor.shape.rot.y = this->actor.yawTowardsPlayer;
|
||||
player->actor.parent = &this->picto.actor;
|
||||
this->picto.actor.shape.rot.y = this->picto.actor.yawTowardsPlayer;
|
||||
Math_Vec3f_Copy(&this->playerPos, &player->actor.world.pos);
|
||||
this->timer = 0;
|
||||
|
||||
Animation_Change(&this->skelAnime, &gBigOctoIdleAnim, 1.0f, 12.0f, 12.0f, ANIMMODE_ONCE, -3.0f);
|
||||
ActorCutscene_SetIntentToPlay(this->actor.cutscene);
|
||||
ActorCutscene_SetIntentToPlay(this->picto.actor.cutscene);
|
||||
|
||||
this->playerHoldPos.x = (Math_SinS(this->actor.shape.rot.y) * 66.0f) + this->actor.world.pos.x;
|
||||
this->playerHoldPos.y = (this->actor.home.pos.y - 49.5f) + 42.899998f;
|
||||
this->playerHoldPos.z = (Math_CosS(this->actor.shape.rot.y) * 66.0f) + this->actor.world.pos.z;
|
||||
this->playerHoldPos.x = (Math_SinS(this->picto.actor.shape.rot.y) * 66.0f) + this->picto.actor.world.pos.x;
|
||||
this->playerHoldPos.y = (this->picto.actor.home.pos.y - 49.5f) + 42.899998f;
|
||||
this->playerHoldPos.z = (Math_CosS(this->picto.actor.shape.rot.y) * 66.0f) + this->picto.actor.world.pos.z;
|
||||
|
||||
Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_SLIME_DEAD);
|
||||
Actor_PlaySfxAtPos(&this->picto.actor, NA_SE_EN_SLIME_DEAD);
|
||||
this->actionFunc = EnBigokuta_SuckInPlayer;
|
||||
}
|
||||
|
||||
@@ -302,7 +304,7 @@ void EnBigokuta_SuckInPlayer(EnBigokuta* this, PlayState* play) {
|
||||
|
||||
EnBigokuta_UpdateOrSetupCam(this, play);
|
||||
SkelAnime_Update(&this->skelAnime);
|
||||
Math_StepToF(&this->actor.world.pos.y, this->actor.home.pos.y - 49.5f, 10.0f);
|
||||
Math_StepToF(&this->picto.actor.world.pos.y, this->picto.actor.home.pos.y - 49.5f, 10.0f);
|
||||
|
||||
if (this->timer < 9) {
|
||||
this->timer++;
|
||||
@@ -311,19 +313,19 @@ void EnBigokuta_SuckInPlayer(EnBigokuta* this, PlayState* play) {
|
||||
player->unk_AE8 = 0;
|
||||
Math_Vec3f_Copy(&player->actor.world.pos, &this->playerPos);
|
||||
if (Math_Vec3f_StepTo(&player->actor.world.pos, &this->playerHoldPos, sqrtf(this->timer) * 5.0f) < 0.1f) {
|
||||
s16 rotY = this->actor.shape.rot.y;
|
||||
s16 rotY = this->picto.actor.shape.rot.y;
|
||||
|
||||
if (Math_ScaledStepToS(&this->actor.shape.rot.y, this->actor.home.rot.y, 0x800)) {
|
||||
if (Math_ScaledStepToS(&this->picto.actor.shape.rot.y, this->picto.actor.home.rot.y, 0x800)) {
|
||||
EnBigokuta_SetupHoldPlayer(this);
|
||||
}
|
||||
|
||||
this->playerHoldPos.x = (Math_SinS(this->actor.shape.rot.y) * 66.0f) + this->actor.world.pos.x;
|
||||
this->playerHoldPos.y = (this->actor.home.pos.y - 49.5f) + 42.899998f;
|
||||
this->playerHoldPos.z = (Math_CosS(this->actor.shape.rot.y) * 66.0f) + this->actor.world.pos.z;
|
||||
this->playerHoldPos.x = (Math_SinS(this->picto.actor.shape.rot.y) * 66.0f) + this->picto.actor.world.pos.x;
|
||||
this->playerHoldPos.y = (this->picto.actor.home.pos.y - 49.5f) + 42.899998f;
|
||||
this->playerHoldPos.z = (Math_CosS(this->picto.actor.shape.rot.y) * 66.0f) + this->picto.actor.world.pos.z;
|
||||
|
||||
Math_Vec3f_Copy(&player->actor.world.pos, &this->playerHoldPos);
|
||||
Math_Vec3f_Copy(&this->playerPos, &player->actor.world.pos);
|
||||
player->actor.shape.rot.y += BINANG_SUB(this->actor.shape.rot.y, rotY);
|
||||
player->actor.shape.rot.y += BINANG_SUB(this->picto.actor.shape.rot.y, rotY);
|
||||
} else {
|
||||
Math_Vec3f_Copy(&this->playerPos, &player->actor.world.pos);
|
||||
player->actor.velocity.y = 0.0f;
|
||||
@@ -345,7 +347,7 @@ void EnBigokuta_HoldPlayer(EnBigokuta* this, PlayState* play) {
|
||||
|
||||
if (this->timer == 0) {
|
||||
EnBigokuta_ShootPlayer(this, play);
|
||||
Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_DAIOCTA_REVERSE);
|
||||
Actor_PlaySfxAtPos(&this->picto.actor, NA_SE_EN_DAIOCTA_REVERSE);
|
||||
}
|
||||
} else if (this->timer == -24) {
|
||||
EnBigokuta_SetupIdleAboveWater(this);
|
||||
@@ -362,21 +364,21 @@ void EnBigokuta_SetupDeathCutscene(EnBigokuta* this) {
|
||||
void EnBigokuta_PlayDeathCutscene(EnBigokuta* this, PlayState* play) {
|
||||
Player* player;
|
||||
|
||||
this->actor.colorFilterTimer = Animation_GetLastFrame(&gBigOctoDeathAnim);
|
||||
this->picto.actor.colorFilterTimer = Animation_GetLastFrame(&gBigOctoDeathAnim);
|
||||
|
||||
if (this->timer != 0) {
|
||||
this->timer--;
|
||||
if (this->timer == 0) {
|
||||
this->drawDmgEffType = ACTOR_DRAW_DMGEFF_FIRE;
|
||||
this->drawDmgEffAlpha = 0.0f;
|
||||
Actor_SpawnIceEffects(play, &this->actor, this->limbPos, ARRAY_COUNT(this->limbPos), 2, 0.5f, 0.35f);
|
||||
Actor_SpawnIceEffects(play, &this->picto.actor, this->limbPos, ARRAY_COUNT(this->limbPos), 2, 0.5f, 0.35f);
|
||||
EnBigokuta_SetupDeathEffects(this);
|
||||
}
|
||||
} else if (ActorCutscene_GetCanPlayNext(this->cutscene)) {
|
||||
ActorCutscene_Start(this->cutscene, &this->actor);
|
||||
ActorCutscene_Start(this->cutscene, &this->picto.actor);
|
||||
|
||||
if (!(gSaveContext.eventInf[4] & 2) && !(gSaveContext.eventInf[3] & 0x20)) {
|
||||
func_800B724C(play, &this->actor, 7);
|
||||
func_800B724C(play, &this->picto.actor, 7);
|
||||
} else {
|
||||
player = GET_PLAYER(play);
|
||||
player->stateFlags1 |= 0x20;
|
||||
@@ -394,8 +396,8 @@ void EnBigokuta_PlayDeathCutscene(EnBigokuta* this, PlayState* play) {
|
||||
|
||||
void EnBigokuta_SetupDeathEffects(EnBigokuta* this) {
|
||||
Animation_MorphToPlayOnce(&this->skelAnime, &gBigOctoDeathAnim, -5.0f);
|
||||
Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_DAIOCTA_DEAD2);
|
||||
this->actor.flags &= ~1;
|
||||
Actor_PlaySfxAtPos(&this->picto.actor, NA_SE_EN_DAIOCTA_DEAD2);
|
||||
this->picto.actor.flags &= ~1;
|
||||
this->timer = 10;
|
||||
this->actionFunc = EnBigokuta_PlayDeathEffects;
|
||||
}
|
||||
@@ -407,7 +409,7 @@ void EnBigokuta_PlayDeathEffects(EnBigokuta* this, PlayState* play) {
|
||||
static Color_RGBA8 D_80AC45B8 = { 150, 150, 150, 0 };
|
||||
|
||||
if (SkelAnime_Update(&this->skelAnime)) {
|
||||
this->actor.world.pos.y -= 0.2f;
|
||||
this->picto.actor.world.pos.y -= 0.2f;
|
||||
|
||||
if (this->timer > 0) {
|
||||
this->timer--;
|
||||
@@ -415,44 +417,44 @@ void EnBigokuta_PlayDeathEffects(EnBigokuta* this, PlayState* play) {
|
||||
if (this->timer == 6) {
|
||||
Vec3f dustPos;
|
||||
|
||||
dustPos.x = this->actor.world.pos.x;
|
||||
dustPos.y = this->actor.world.pos.y + 150.0f;
|
||||
dustPos.z = this->actor.world.pos.z;
|
||||
dustPos.x = this->picto.actor.world.pos.x;
|
||||
dustPos.y = this->picto.actor.world.pos.y + 150.0f;
|
||||
dustPos.z = this->picto.actor.world.pos.z;
|
||||
|
||||
func_800B0DE0(play, &dustPos, &gZeroVec3f, &gZeroVec3f, &D_80AC45B0, &D_80AC45B4, 1200, 20);
|
||||
Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_OCTAROCK_DEAD2);
|
||||
Actor_PlaySfxAtPos(&this->picto.actor, NA_SE_EN_OCTAROCK_DEAD2);
|
||||
}
|
||||
} else {
|
||||
this->actor.world.pos.y -= 0.2f;
|
||||
this->picto.actor.world.pos.y -= 0.2f;
|
||||
|
||||
if (Math_StepToF(&this->actor.scale.y, 0.001f, 0.001f)) {
|
||||
if (Math_StepToF(&this->picto.actor.scale.y, 0.001f, 0.001f)) {
|
||||
s32 i;
|
||||
Vec3f bubbleVel;
|
||||
Vec3f bubblePos;
|
||||
|
||||
SoundSource_PlaySfxAtFixedWorldPos(play, &this->actor.world.pos, 50, NA_SE_EN_COMMON_WATER_MID);
|
||||
bubblePos.y = this->actor.world.pos.y;
|
||||
SoundSource_PlaySfxAtFixedWorldPos(play, &this->picto.actor.world.pos, 50, NA_SE_EN_COMMON_WATER_MID);
|
||||
bubblePos.y = this->picto.actor.world.pos.y;
|
||||
|
||||
for (i = 0; i < 20; i++) {
|
||||
bubbleVel.x = randPlusMinusPoint5Scaled(10.0f);
|
||||
bubbleVel.y = Rand_ZeroFloat(5.5f) + 5.5f;
|
||||
bubbleVel.z = randPlusMinusPoint5Scaled(10.0f);
|
||||
bubblePos.x = this->actor.world.pos.x + (2.0f * bubbleVel.x);
|
||||
bubblePos.z = this->actor.world.pos.z + (2.0f * bubbleVel.z);
|
||||
bubblePos.x = this->picto.actor.world.pos.x + (2.0f * bubbleVel.x);
|
||||
bubblePos.z = this->picto.actor.world.pos.z + (2.0f * bubbleVel.z);
|
||||
|
||||
EffectSsDtBubble_SpawnCustomColor(play, &bubblePos, &bubbleVel, &D_80AC45A4, &D_80AC45B0,
|
||||
&D_80AC45B8, Rand_S16Offset(150, 50), 25, 0);
|
||||
}
|
||||
|
||||
if (this->actor.params != 0xFF) {
|
||||
Flags_SetSwitch(play, this->actor.params);
|
||||
if (this->picto.actor.params != 0xFF) {
|
||||
Flags_SetSwitch(play, this->picto.actor.params);
|
||||
}
|
||||
|
||||
ActorCutscene_Stop(this->cutscene);
|
||||
Actor_MarkForDeath(&this->actor);
|
||||
Actor_MarkForDeath(&this->picto.actor);
|
||||
|
||||
if (!(gSaveContext.eventInf[4] & 2) && !(gSaveContext.eventInf[3] & 0x20)) {
|
||||
func_800B724C(play, &this->actor, 6);
|
||||
func_800B724C(play, &this->picto.actor, 6);
|
||||
} else {
|
||||
Player* player = GET_PLAYER(play);
|
||||
|
||||
@@ -461,18 +463,19 @@ void EnBigokuta_PlayDeathEffects(EnBigokuta* this, PlayState* play) {
|
||||
}
|
||||
|
||||
if (this->drawDmgEffAlpha > 0.0f) {
|
||||
this->drawDmgEffAlpha = this->actor.scale.y * 30.30303f;
|
||||
this->drawDmgEffAlpha = this->picto.actor.scale.y * 30.30303f;
|
||||
}
|
||||
}
|
||||
} else {
|
||||
Math_StepToF(&this->actor.world.pos.y, this->actor.home.pos.y - 16.5f, 15.0f);
|
||||
Math_StepToF(&this->picto.actor.world.pos.y, this->picto.actor.home.pos.y - 16.5f, 15.0f);
|
||||
}
|
||||
}
|
||||
|
||||
s32 EnBigokuta_IsNearSwampBoat(EnBigokuta* this, PlayState* play) {
|
||||
this->actor.child = SubS_FindActor(play, NULL, ACTORCAT_BG, ACTOR_BG_INGATE);
|
||||
this->picto.actor.child = SubS_FindActor(play, NULL, ACTORCAT_BG, ACTOR_BG_INGATE);
|
||||
|
||||
if ((this->actor.child != NULL) && (Actor_XZDistanceBetweenActors(&this->actor, this->actor.child) < 250.0f)) {
|
||||
if ((this->picto.actor.child != NULL) &&
|
||||
(Actor_XZDistanceBetweenActors(&this->picto.actor, this->picto.actor.child) < 250.0f)) {
|
||||
return true;
|
||||
} else {
|
||||
return false;
|
||||
@@ -484,7 +487,7 @@ void EnBigokuta_CheckOneHitKill(EnBigokuta* this, PlayState* play) {
|
||||
((this->bodyCollider.base.acFlags & AC_HIT) ||
|
||||
((play->sceneNum == SCENE_20SICHITAI || play->sceneNum == SCENE_20SICHITAI2) &&
|
||||
EnBigokuta_IsNearSwampBoat(this, play)))) {
|
||||
Enemy_StartFinishingBlow(play, &this->actor);
|
||||
Enemy_StartFinishingBlow(play, &this->picto.actor);
|
||||
|
||||
if (this->bodyCollider.base.acFlags & AC_HIT) {
|
||||
if (this->bodyCollider.info.acHitInfo->toucher.dmgFlags & 0x1000) { // Ice Arrow
|
||||
@@ -503,7 +506,7 @@ void EnBigokuta_CheckOneHitKill(EnBigokuta* this, PlayState* play) {
|
||||
}
|
||||
|
||||
this->bodyCollider.base.acFlags &= ~AC_HIT;
|
||||
Actor_SetColorFilter(&this->actor, 0x4000, 255, 0, Animation_GetLastFrame(&gBigOctoDeathAnim));
|
||||
Actor_SetColorFilter(&this->picto.actor, 0x4000, 255, 0, Animation_GetLastFrame(&gBigOctoDeathAnim));
|
||||
EnBigokuta_ShootPlayer(this, play);
|
||||
EnBigokuta_SetupDeathCutscene(this);
|
||||
}
|
||||
@@ -514,7 +517,7 @@ void EnBigokuta_Update(Actor* thisx, PlayState* play) {
|
||||
EnBigokuta* this = THIS;
|
||||
|
||||
if (!EnBigokuta_IsInWater(this, play)) {
|
||||
Actor_MarkForDeath(&this->actor);
|
||||
Actor_MarkForDeath(&this->picto.actor);
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -526,9 +529,11 @@ void EnBigokuta_Update(Actor* thisx, PlayState* play) {
|
||||
this->actionFunc(this, play);
|
||||
|
||||
if ((this->bodyCollider.base.acFlags & AC_ON)) {
|
||||
this->shellCollider.dim.pos.x = Math_SinS(this->actor.shape.rot.y) * -20.0f + this->actor.world.pos.x;
|
||||
this->shellCollider.dim.pos.y = this->actor.world.pos.y;
|
||||
this->shellCollider.dim.pos.z = Math_CosS(this->actor.shape.rot.y) * -20.0f + this->actor.world.pos.z;
|
||||
this->shellCollider.dim.pos.x =
|
||||
Math_SinS(this->picto.actor.shape.rot.y) * -20.0f + this->picto.actor.world.pos.x;
|
||||
this->shellCollider.dim.pos.y = this->picto.actor.world.pos.y;
|
||||
this->shellCollider.dim.pos.z =
|
||||
Math_CosS(this->picto.actor.shape.rot.y) * -20.0f + this->picto.actor.world.pos.z;
|
||||
|
||||
this->bodyCollider.dim.pos.x = this->shellCollider.dim.pos.x;
|
||||
this->bodyCollider.dim.pos.y = this->shellCollider.dim.pos.y;
|
||||
@@ -537,7 +542,7 @@ void EnBigokuta_Update(Actor* thisx, PlayState* play) {
|
||||
CollisionCheck_SetAC(play, &play->colChkCtx, &this->bodyCollider.base);
|
||||
CollisionCheck_SetAC(play, &play->colChkCtx, &this->shellCollider.base);
|
||||
CollisionCheck_SetOC(play, &play->colChkCtx, &this->shellCollider.base);
|
||||
Actor_SetFocus(&this->actor, 82.5f);
|
||||
Actor_SetFocus(&this->picto.actor, 82.5f);
|
||||
}
|
||||
|
||||
if (this->drawDmgEffAlpha > 0.0f) {
|
||||
@@ -546,7 +551,7 @@ void EnBigokuta_Update(Actor* thisx, PlayState* play) {
|
||||
this->drawDmgEffScale = (this->drawDmgEffAlpha + 1.0f) * 0.6f;
|
||||
this->drawDmgEffScale = CLAMP_MAX(this->drawDmgEffScale, 1.2f);
|
||||
} else if (!Math_StepToF(&this->drawDmgEffFrozenSteamScale, 1.2f, 0.030000001f)) {
|
||||
func_800B9010(&this->actor, NA_SE_EV_ICE_FREEZE - SFX_FLAG);
|
||||
func_800B9010(&this->picto.actor, NA_SE_EV_ICE_FREEZE - SFX_FLAG);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -658,18 +663,18 @@ void EnBigokuta_Draw(Actor* thisx, PlayState* play) {
|
||||
gDPSetEnvColor(&gfx[1], 255, 255, 255, 255);
|
||||
POLY_OPA_DISP =
|
||||
SkelAnime_DrawFlex(play, this->skelAnime.skeleton, this->skelAnime.jointTable, this->skelAnime.dListCount,
|
||||
EnBigokuta_OverrideLimbDraw, EnBigokuta_PostLimbDraw, &this->actor, &gfx[2]);
|
||||
EnBigokuta_OverrideLimbDraw, EnBigokuta_PostLimbDraw, &this->picto.actor, &gfx[2]);
|
||||
} else {
|
||||
Scene_SetRenderModeXlu(play, 1, 2);
|
||||
gfx = POLY_XLU_DISP;
|
||||
gSPDisplayList(&gfx[0], &sSetupDL[6 * 25]);
|
||||
gDPSetEnvColor(&gfx[1], 0, 0, 0, (this->actor.scale.y * 7727.273f));
|
||||
gDPSetEnvColor(&gfx[1], 0, 0, 0, (this->picto.actor.scale.y * 7727.273f));
|
||||
POLY_XLU_DISP =
|
||||
SkelAnime_DrawFlex(play, this->skelAnime.skeleton, this->skelAnime.jointTable, this->skelAnime.dListCount,
|
||||
NULL, EnBigokuta_PostLimbDraw, &this->actor, &gfx[2]);
|
||||
NULL, EnBigokuta_PostLimbDraw, &this->picto.actor, &gfx[2]);
|
||||
}
|
||||
|
||||
Actor_DrawDamageEffects(play, &this->actor, this->limbPos, ARRAY_COUNT(this->limbPos), this->drawDmgEffScale,
|
||||
Actor_DrawDamageEffects(play, &this->picto.actor, this->limbPos, ARRAY_COUNT(this->limbPos), this->drawDmgEffScale,
|
||||
this->drawDmgEffFrozenSteamScale, this->drawDmgEffAlpha, this->drawDmgEffType);
|
||||
|
||||
CLOSE_DISPS(play->state.gfxCtx);
|
||||
|
||||
@@ -2,16 +2,15 @@
|
||||
#define Z_EN_BIGOKUTA_H
|
||||
|
||||
#include "global.h"
|
||||
#include "z64snap.h"
|
||||
#include "assets/objects/object_bigokuta/object_bigokuta.h"
|
||||
|
||||
struct EnBigokuta;
|
||||
|
||||
typedef void (*EnBigokutaActionFunc)(struct EnBigokuta*, PlayState*);
|
||||
typedef void (*EnBigokutaUnkFunc)(PlayState*, struct EnBigokuta*);
|
||||
|
||||
typedef struct EnBigokuta {
|
||||
/* 0x000 */ Actor actor;
|
||||
/* 0x144 */ EnBigokutaUnkFunc unkFunc; // possibly something to do with photographing
|
||||
/* 0x000 */ PictoActor picto;
|
||||
/* 0x148 */ SkelAnime skelAnime;
|
||||
/* 0x18C */ EnBigokutaActionFunc actionFunc;
|
||||
/* 0x190 */ u8 drawDmgEffType;
|
||||
|
||||
@@ -80,8 +80,9 @@ static AnimationInfoS D_80A5349C[] = {
|
||||
{ &object_dnq_Anim_003DBC, 1.0f, 0, -1, ANIMMODE_LOOP, -4 },
|
||||
};
|
||||
|
||||
void func_80A52530(PlayState* play, EnDnq* this) {
|
||||
func_8013A530(play, &this->actor, 10, &this->actor.focus.pos, &this->actor.world.rot, 120.0f, 480.0f, 0x38E3);
|
||||
s32 EnDnq_ValidatePictograph(PlayState* play, Actor* thisx) {
|
||||
return Snap_ValidatePictograph(play, thisx, PICTOGRAPH_DEKU_KING, &thisx->focus.pos, &thisx->world.rot, 120.0f,
|
||||
480.0f, 0x38E3);
|
||||
}
|
||||
|
||||
s32 func_80A5257C(EnDnq* this, s32 arg1) {
|
||||
@@ -111,7 +112,7 @@ s32 func_80A5257C(EnDnq* this, s32 arg1) {
|
||||
}
|
||||
|
||||
void func_80A52604(EnDnq* this, PlayState* play) {
|
||||
Collider_UpdateCylinder(&this->actor, &this->collider);
|
||||
Collider_UpdateCylinder(&this->picto.actor, &this->collider);
|
||||
CollisionCheck_SetOC(play, &play->colChkCtx, &this->collider.base);
|
||||
}
|
||||
|
||||
@@ -120,7 +121,7 @@ s32 func_80A52648(EnDnq* this, PlayState* play) {
|
||||
|
||||
if (play->csCtx.state != 0) {
|
||||
if (!(this->unk_37C & 0x20)) {
|
||||
this->actor.flags &= ~ACTOR_FLAG_1;
|
||||
this->picto.actor.flags &= ~ACTOR_FLAG_1;
|
||||
this->unk_1DC = 0xFF;
|
||||
this->unk_37C |= 0x20;
|
||||
}
|
||||
@@ -128,7 +129,7 @@ s32 func_80A52648(EnDnq* this, PlayState* play) {
|
||||
ret = true;
|
||||
} else {
|
||||
if (this->unk_37C & 0x20) {
|
||||
this->actor.flags |= ACTOR_FLAG_1;
|
||||
this->picto.actor.flags |= ACTOR_FLAG_1;
|
||||
this->unk_1DC = 0xFF;
|
||||
this->unk_37C &= ~0x20;
|
||||
SubS_UpdateFlags(&this->unk_37C, 3, 7);
|
||||
@@ -196,10 +197,10 @@ s32 func_80A52944(EnDnq* this) {
|
||||
if (this->unk_386 == 0) {
|
||||
func_80A5257C(this, 12);
|
||||
this->unk_38C = 1;
|
||||
this->actor.shape.rot.y = this->actor.world.rot.y;
|
||||
this->picto.actor.shape.rot.y = this->picto.actor.world.rot.y;
|
||||
this->unk_386 = 1;
|
||||
phi_v1 = this->unk_38C * 0x2000;
|
||||
this->actor.shape.rot.y += phi_v1;
|
||||
this->picto.actor.shape.rot.y += phi_v1;
|
||||
} else if (Animation_OnFrame(&this->skelAnime, this->skelAnime.endFrame)) {
|
||||
this->unk_386++;
|
||||
if (this->unk_386 >= 6) {
|
||||
@@ -214,8 +215,8 @@ s32 func_80A52944(EnDnq* this) {
|
||||
func_80A5257C(this, 13);
|
||||
this->skelAnime.curFrame = 0.0f;
|
||||
}
|
||||
this->actor.shape.rot.y = this->actor.world.rot.y;
|
||||
this->actor.shape.rot.y += phi_v1;
|
||||
this->picto.actor.shape.rot.y = this->picto.actor.world.rot.y;
|
||||
this->picto.actor.shape.rot.y += phi_v1;
|
||||
}
|
||||
|
||||
this->unk_38A = 0;
|
||||
@@ -233,7 +234,7 @@ s32 func_80A52A78(EnDnq* this, PlayState* play) {
|
||||
this->unk_388 = play->state.frames % 5;
|
||||
}
|
||||
|
||||
this->actor.shape.rot.y = this->actor.world.rot.y;
|
||||
this->picto.actor.shape.rot.y = this->picto.actor.world.rot.y;
|
||||
if (this->unk_38C != 0) {
|
||||
this->unk_38C--;
|
||||
}
|
||||
@@ -256,7 +257,7 @@ s32 func_80A52B68(EnDnq* this, PlayState* play) {
|
||||
Player* player = GET_PLAYER(play);
|
||||
u16 temp = play->msgCtx.currentTextId;
|
||||
|
||||
if ((player->stateFlags1 & 0x40) && (player->targetActor == &this->actor)) {
|
||||
if ((player->stateFlags1 & 0x40) && (player->targetActor == &this->picto.actor)) {
|
||||
switch (temp) {
|
||||
case 0x89B:
|
||||
func_80A5257C(this, 18);
|
||||
@@ -300,9 +301,9 @@ void func_80A52C6C(EnDnq* this, PlayState* play) {
|
||||
Vec3f sp1C;
|
||||
|
||||
Math_Vec3f_Copy(&sp1C, &player->actor.world.pos);
|
||||
Lib_Vec3f_TranslateAndRotateY(&this->actor.world.pos, this->actor.world.rot.y, &sp34, &sp28);
|
||||
Lib_Vec3f_TranslateAndRotateY(&this->picto.actor.world.pos, this->picto.actor.world.rot.y, &sp34, &sp28);
|
||||
Math_Vec3f_Copy(&this->unk_370, &sp28);
|
||||
this->actor.xzDistToPlayer = Math_Vec3f_DistXZ(&sp28, &sp1C);
|
||||
this->picto.actor.xzDistToPlayer = Math_Vec3f_DistXZ(&sp28, &sp1C);
|
||||
}
|
||||
|
||||
s32* func_80A52CF8(EnDnq* this, PlayState* play) {
|
||||
@@ -320,7 +321,7 @@ s32* func_80A52CF8(EnDnq* this, PlayState* play) {
|
||||
s32 func_80A52D44(EnDnq* this, PlayState* play) {
|
||||
s32 ret = false;
|
||||
|
||||
if ((this->unk_37C & 7) && Actor_ProcessTalkRequest(&this->actor, &play->state)) {
|
||||
if ((this->unk_37C & 7) && Actor_ProcessTalkRequest(&this->picto.actor, &play->state)) {
|
||||
SubS_UpdateFlags(&this->unk_37C, 0, 7);
|
||||
this->unk_380 = func_80A52CF8(this, play);
|
||||
this->actionFunc = func_80A52FB8;
|
||||
@@ -332,7 +333,7 @@ s32 func_80A52D44(EnDnq* this, PlayState* play) {
|
||||
|
||||
void func_80A52DC8(EnDnq* this, PlayState* play) {
|
||||
Player* player = GET_PLAYER(play);
|
||||
s16 yaw = this->actor.yawTowardsPlayer - this->actor.world.rot.y;
|
||||
s16 yaw = this->picto.actor.yawTowardsPlayer - this->picto.actor.world.rot.y;
|
||||
|
||||
if (yaw <= 0x3800) {
|
||||
SubS_UpdateFlags(&this->unk_37C, 3, 7);
|
||||
@@ -350,37 +351,37 @@ void func_80A52DC8(EnDnq* this, PlayState* play) {
|
||||
}
|
||||
}
|
||||
|
||||
this->unk_394 = this->actor.xzDistToPlayer;
|
||||
this->unk_394 = this->picto.actor.xzDistToPlayer;
|
||||
func_80A52C6C(this, play);
|
||||
if (this->actor.xzDistToPlayer < this->unk_390) {
|
||||
if (this->picto.actor.xzDistToPlayer < this->unk_390) {
|
||||
player->unk_B2B = 0x1A;
|
||||
}
|
||||
|
||||
this->actor.xzDistToPlayer = this->unk_394;
|
||||
this->picto.actor.xzDistToPlayer = this->unk_394;
|
||||
|
||||
if (gSaveContext.save.weekEventReg[83] & 8) {
|
||||
func_80A52A78(this, play);
|
||||
} else if (this->unk_3A4 == 0) {
|
||||
Math_ApproachS(&this->actor.shape.rot.y, this->actor.world.rot.y, 3, 0x2AA8);
|
||||
Math_ApproachS(&this->picto.actor.shape.rot.y, this->picto.actor.world.rot.y, 3, 0x2AA8);
|
||||
func_80A526F8(this);
|
||||
} else {
|
||||
func_80A52944(this);
|
||||
}
|
||||
} else {
|
||||
Math_ApproachS(&this->actor.shape.rot.y, this->actor.world.rot.y, 3, 0x2AA8);
|
||||
Math_ApproachS(&this->picto.actor.shape.rot.y, this->picto.actor.world.rot.y, 3, 0x2AA8);
|
||||
this->unk_390 = 70.0f;
|
||||
}
|
||||
}
|
||||
|
||||
void func_80A52FB8(EnDnq* this, PlayState* play) {
|
||||
s16 sp2E = this->actor.yawTowardsPlayer;
|
||||
s16 sp2E = this->picto.actor.yawTowardsPlayer;
|
||||
|
||||
if (func_8010BF58(&this->actor, play, this->unk_380, NULL, &this->unk_1E0)) {
|
||||
if (func_8010BF58(&this->picto.actor, play, this->unk_380, NULL, &this->unk_1E0)) {
|
||||
SubS_UpdateFlags(&this->unk_37C, 3, 7);
|
||||
this->unk_386 = 0;
|
||||
this->actionFunc = func_80A52DC8;
|
||||
} else {
|
||||
Math_ApproachS(&this->actor.shape.rot.y, sp2E, 3, 0x2AA8);
|
||||
Math_ApproachS(&this->picto.actor.shape.rot.y, sp2E, 3, 0x2AA8);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -400,7 +401,7 @@ void func_80A53038(EnDnq* this, PlayState* play) {
|
||||
}
|
||||
|
||||
if ((this->unk_398 == 4) && Animation_OnFrame(&this->skelAnime, 2.0f)) {
|
||||
Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_KINGNUTS_DAMAGE);
|
||||
Actor_PlaySfxAtPos(&this->picto.actor, NA_SE_EN_KINGNUTS_DAMAGE);
|
||||
}
|
||||
|
||||
if (((this->unk_398 == 3) || (this->unk_398 == 6)) &&
|
||||
@@ -408,21 +409,21 @@ void func_80A53038(EnDnq* this, PlayState* play) {
|
||||
func_80A5257C(this, this->unk_398 + 1);
|
||||
}
|
||||
|
||||
Cutscene_ActorTranslateAndYaw(&this->actor, play, temp_v0);
|
||||
Cutscene_ActorTranslateAndYaw(&this->picto.actor, play, temp_v0);
|
||||
}
|
||||
}
|
||||
|
||||
void EnDnq_Init(Actor* thisx, PlayState* play) {
|
||||
EnDnq* this = THIS;
|
||||
|
||||
ActorShape_Init(&this->actor.shape, 0.0f, NULL, 14.0f);
|
||||
ActorShape_Init(&this->picto.actor.shape, 0.0f, NULL, 14.0f);
|
||||
SkelAnime_InitFlex(play, &this->skelAnime, &object_dnq_Skel_00EB48, NULL, this->jointTable, this->morphTable, 33);
|
||||
this->unk_398 = -1;
|
||||
func_80A5257C(this, 0);
|
||||
Collider_InitAndSetCylinder(play, &this->collider, &this->actor, &sCylinderInit);
|
||||
CollisionCheck_SetInfo2(&this->actor.colChkInfo, DamageTable_Get(0x16), &sColChkInfoInit);
|
||||
Actor_SetScale(&this->actor, 0.02f);
|
||||
this->actor.targetMode = 1;
|
||||
Collider_InitAndSetCylinder(play, &this->collider, &this->picto.actor, &sCylinderInit);
|
||||
CollisionCheck_SetInfo2(&this->picto.actor.colChkInfo, DamageTable_Get(0x16), &sColChkInfoInit);
|
||||
Actor_SetScale(&this->picto.actor, 0.02f);
|
||||
this->picto.actor.targetMode = 1;
|
||||
this->unk_386 = 0;
|
||||
this->unk_37C = 0;
|
||||
SubS_UpdateFlags(&this->unk_37C, 3, 7);
|
||||
@@ -431,7 +432,7 @@ void EnDnq_Init(Actor* thisx, PlayState* play) {
|
||||
} else {
|
||||
this->unk_3A4 = 0;
|
||||
}
|
||||
this->unk_144 = func_80A52530;
|
||||
this->picto.validationFunc = EnDnq_ValidatePictograph;
|
||||
this->actionFunc = func_80A52DC8;
|
||||
}
|
||||
|
||||
@@ -451,13 +452,13 @@ void EnDnq_Update(Actor* thisx, PlayState* play) {
|
||||
this->actionFunc(this, play);
|
||||
func_80A52B68(this, play);
|
||||
SkelAnime_Update(&this->skelAnime);
|
||||
Actor_UpdateBgCheckInfo(play, &this->actor, 30.0f, 12.0f, 0.0f, 4);
|
||||
this->unk_394 = this->actor.xzDistToPlayer;
|
||||
Actor_UpdateBgCheckInfo(play, &this->picto.actor, 30.0f, 12.0f, 0.0f, 4);
|
||||
this->unk_394 = this->picto.actor.xzDistToPlayer;
|
||||
func_80A52C6C(this, play);
|
||||
func_8013C964(&this->actor, play, this->unk_390, fabsf(this->actor.playerHeightRel) + 1.0f, EXCH_ITEM_NONE,
|
||||
this->unk_37C & 7);
|
||||
this->actor.xzDistToPlayer = this->unk_394;
|
||||
Actor_SetFocus(&this->actor, 46.0f);
|
||||
func_8013C964(&this->picto.actor, play, this->unk_390, fabsf(this->picto.actor.playerHeightRel) + 1.0f,
|
||||
EXCH_ITEM_NONE, this->unk_37C & 7);
|
||||
this->picto.actor.xzDistToPlayer = this->unk_394;
|
||||
Actor_SetFocus(&this->picto.actor, 46.0f);
|
||||
func_80A52604(this, play);
|
||||
}
|
||||
}
|
||||
@@ -467,5 +468,5 @@ void EnDnq_Draw(Actor* thisx, PlayState* play) {
|
||||
|
||||
func_8012C28C(play->state.gfxCtx);
|
||||
SkelAnime_DrawFlexOpa(play, this->skelAnime.skeleton, this->skelAnime.jointTable, this->skelAnime.dListCount, NULL,
|
||||
NULL, &this->actor);
|
||||
NULL, &this->picto.actor);
|
||||
}
|
||||
|
||||
@@ -2,15 +2,14 @@
|
||||
#define Z_EN_DNQ_H
|
||||
|
||||
#include "global.h"
|
||||
#include "z64snap.h"
|
||||
|
||||
struct EnDnq;
|
||||
|
||||
typedef void (*EnDnqActionFunc)(struct EnDnq*, PlayState*);
|
||||
typedef void (*EnDnqFunc)(PlayState*, struct EnDnq*);
|
||||
|
||||
typedef struct EnDnq {
|
||||
/* 0x000 */ Actor actor;
|
||||
/* 0x144 */ EnDnqFunc unk_144;
|
||||
/* 0x000 */ PictoActor picto;
|
||||
/* 0x148 */ SkelAnime skelAnime;
|
||||
/* 0x18C */ EnDnqActionFunc actionFunc;
|
||||
/* 0x190 */ ColliderCylinder collider;
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user