mirror of https://github.com/zeldaret/mm.git
EnGe3 (Aveil) OK and documented, object_geldb documented (#1072)
* OK * Import data * Name functions and variables * CSACTION enum * Finish code documentation, do most of object * Document object * Finish docs * Apply suggestions from code review Co-authored-by: Derek Hensley <hensley.derek58@gmail.com> * More review * Format * Review * Format * fix merge * weekEventReg * PR * review * format --------- Co-authored-by: Derek Hensley <hensley.derek58@gmail.com> Co-authored-by: angie <angheloalf95@gmail.com>
This commit is contained in:
parent
b88aa2c0fc
commit
17e7f470e2
|
@ -1,78 +1,84 @@
|
||||||
<Root>
|
<Root>
|
||||||
|
<!-- Assets for Gerudo wearing red, i.e. Aveil -->
|
||||||
<File Name="object_geldb" Segment="6">
|
<File Name="object_geldb" Segment="6">
|
||||||
<Animation Name="object_geldb_Anim_000734" Offset="0x734" /> <!-- Original name is "ga_asonde" -->
|
<Animation Name="gGerudoRedBegAnim" Offset="0x734" /> <!-- Original name is "ga_asonde" begging? "idle"? -->
|
||||||
<Animation Name="object_geldb_Anim_000CB0" Offset="0xCB0" /> <!-- Original name is "ga_hayaku" -->
|
<Animation Name="gGerudoRedDismissAnim" Offset="0xCB0" /> <!-- Original name is "ga_hayaku" "hurry" -->
|
||||||
<Animation Name="object_geldb_Anim_000EE0" Offset="0xEE0" /> <!-- Original name is "ga_matu" -->
|
<Animation Name="gGerudoRedTurnHeadAnim" Offset="0xEE0" /> <!-- Original name is "ga_matu" "wait" -->
|
||||||
<Animation Name="object_geldb_Anim_0014CC" Offset="0x14CC" /> <!-- Original name is "ga_matu_loop" -->
|
<Animation Name="gGerudoRedWaitAnim" Offset="0x14CC" /> <!-- Original name is "ga_matu_loop" "wait_loop" -->
|
||||||
<Animation Name="object_geldb_Anim_001AC8" Offset="0x1AC8" /> <!-- Original name is "ga_naniyatte" -->
|
<Animation Name="gGerudoRedDemandAnim" Offset="0x1AC8" /> <!-- hands on hips leaning forward (demanding?). Original name is "ga_naniyatte" -->
|
||||||
<Animation Name="object_geldb_Anim_001DFC" Offset="0x1DFC" /> <!-- Original name is "ga_nigedasu" -->
|
<Animation Name="gGerudoRedRunAwayAnim" Offset="0x1DFC" /> <!-- Running away from the bees. Original name is "ga_nigedasu" -->
|
||||||
<Animation Name="object_geldb_Anim_001EFC" Offset="0x1EFC" /> <!-- Original name is "gelb_wait" -->
|
<Animation Name="gGerudoRedHandOnHipWaitAnim" Offset="0x1EFC" /> <!-- Single frame pose with hand on hip. Original name is "gelb_wait" -->
|
||||||
<Animation Name="object_geldb_Anim_0028A0" Offset="0x28A0" /> <!-- Original name is "gelb_walk" -->
|
<Animation Name="gGerudoRedWalkAnim" Offset="0x28A0" /> <!-- Walking. Original name is "gelb_walk" -->
|
||||||
<Texture Name="object_geldb_TLUT_0028B0" OutName="tlut_0028B0" Format="rgba16" Width="16" Height="16" Offset="0x28B0" />
|
|
||||||
<Texture Name="object_geldb_Tex_002AB0" OutName="tex_002AB0" Format="ci8" Width="8" Height="8" Offset="0x2AB0" />
|
<!-- Model, same as OoT object_geldb 0x2500-0xA470 -->
|
||||||
<Texture Name="object_geldb_Tex_002AF0" OutName="tex_002AF0" Format="ci8" Width="8" Height="8" Offset="0x2AF0" />
|
<Texture Name="gGerudoRed1TLUT" OutName="gerudo_red_1_tlut" Format="rgba16" Width="16" Height="16" Offset="0x28B0" />
|
||||||
<Texture Name="object_geldb_Tex_002B30" OutName="tex_002B30" Format="ci8" Width="16" Height="16" Offset="0x2B30" />
|
<Texture Name="gGerudoRedSkinShadowTex" OutName="gerudo_red_skin_shadow" Format="ci8" Width="8" Height="8" Offset="0x2AB0" TlutOffset="0x28B0" />
|
||||||
<Texture Name="object_geldb_Tex_002C30" OutName="tex_002C30" Format="i8" Width="16" Height="16" Offset="0x2C30" />
|
<Texture Name="gGerudoRedDarkRedFabricTex" OutName="gerudo_red_dark_red_fabric" Format="ci8" Width="8" Height="8" Offset="0x2AF0" TlutOffset="0x28B0" />
|
||||||
<Texture Name="object_geldb_Tex_002D30" OutName="tex_002D30" Format="ci8" Width="16" Height="16" Offset="0x2D30" />
|
<Texture Name="gGerudoRedYellowJewel1Tex" OutName="gerudo_red_yellow_jewel_1" Format="ci8" Width="16" Height="16" Offset="0x2B30" /> <!-- also used for gauntlets and greaves -->
|
||||||
<Texture Name="object_geldb_Tex_002E30" OutName="tex_002E30" Format="i8" Width="16" Height="16" Offset="0x2E30" />
|
<Texture Name="gGerudoRedGerudoPatternFabricTex" OutName="gerudo_red_gerudo_pattern_fabric" Format="i8" Width="16" Height="16" Offset="0x2C30" />
|
||||||
<Texture Name="object_geldb_Tex_002F30" OutName="tex_002F30" Format="i8" Width="8" Height="16" Offset="0x2F30" />
|
<Texture Name="gGerudoRedMidriffTex" OutName="gerudo_red_midriff" Format="ci8" Width="16" Height="16" Offset="0x2D30" TlutOffset="0x28B0" />
|
||||||
<DList Name="object_geldb_DL_004C90" Offset="0x4C90" />
|
<Texture Name="gGerudoTrousersTex" OutName="gerudo_red_trousers" Format="i8" Width="16" Height="16" Offset="0x2E30" />
|
||||||
<DList Name="object_geldb_DL_005110" Offset="0x5110" />
|
<Texture Name="gGerudoMail1Tex" OutName="gerudo_red_mail_1" Format="i8" Width="8" Height="16" Offset="0x2F30" />
|
||||||
<DList Name="object_geldb_DL_005248" Offset="0x5248" />
|
<DList Name="gGerudoRedTorsoDL" Offset="0x4C90" />
|
||||||
<DList Name="object_geldb_DL_005470" Offset="0x5470" />
|
<DList Name="gGerudoRedRightUpperArmDL" Offset="0x5110" />
|
||||||
<DList Name="object_geldb_DL_0055A8" Offset="0x55A8" />
|
<DList Name="gGerudoRedRightForearmDL" Offset="0x5248" />
|
||||||
<DList Name="object_geldb_DL_0057D0" Offset="0x57D0" />
|
<DList Name="gGerudoRedLeftUpperArmDL" Offset="0x5470" />
|
||||||
<DList Name="object_geldb_DL_0059F0" Offset="0x59F0" />
|
<DList Name="gGerudoRedLeftForearmDL" Offset="0x55A8" />
|
||||||
<DList Name="object_geldb_DL_005AF0" Offset="0x5AF0" />
|
<DList Name="gGerudoRedPelvisDL" Offset="0x57D0" />
|
||||||
<DList Name="object_geldb_DL_005D60" Offset="0x5D60" />
|
<DList Name="gGerudoRedRightThighDL" Offset="0x59F0" />
|
||||||
<DList Name="object_geldb_DL_005E60" Offset="0x5E60" />
|
<DList Name="gGerudoRedRightLowerLegDL" Offset="0x5AF0" />
|
||||||
<!-- <Texture Name="object_geldb_TLUT_0060E0" OutName="tlut_0060E0" Format="rgba16" Width="16" Height="16" Offset="0x60E0" /> -->
|
<DList Name="gGerudoRedLeftThighDL" Offset="0x5D60" />
|
||||||
<!-- <Blob Name="object_geldb_Blob_0062E0" Size="0x38" Offset="0x62E0" /> -->
|
<DList Name="gGerudoRedLeftLowerLegDL" Offset="0x5E60" />
|
||||||
<Texture Name="object_geldb_Tex_006318" OutName="tex_006318" Format="ci8" Width="8" Height="16" Offset="0x6318" />
|
<Texture Name="gGerudoRed2TLUT" OutName="gerudo_red_2_tlut" Format="rgba16" Width="18" Height="14" Offset="0x60E0" />
|
||||||
<!-- <Blob Name="object_geldb_Blob_006398" Size="0x400" Offset="0x6398" /> -->
|
<Texture Name="gGerudoRedSkinGradientTex" OutName="gerudo_red_skin_gradient" Format="ci8" Width="8" Height="8" Offset="0x62D8" /> <!-- also used on head -->
|
||||||
<Texture Name="object_geldb_Tex_006798" OutName="tex_006798" Format="i8" Width="16" Height="16" Offset="0x6798" />
|
<Texture Name="gGerudoRedEarTex" OutName="gerudo_red_ear" Format="ci8" Width="8" Height="16" Offset="0x6318" />
|
||||||
<Texture Name="object_geldb_Tex_006898" OutName="tex_006898" Format="ci8" Width="8" Height="16" Offset="0x6898" />
|
<Texture Name="gGerudoRedEyeOpenTex" OutName="gerudo_red_eye_open" Format="ci8" Width="32" Height="32" Offset="0x6398" TlutOffset="0x60E0" />
|
||||||
<Texture Name="object_geldb_Tex_006918" OutName="tex_006918" Format="ci8" Width="8" Height="8" Offset="0x6918" />
|
<Texture Name="gGerudoRedVeilFabricTex" OutName="gerudo_red_veil_fabric" Format="i8" Width="16" Height="16" Offset="0x6798" />
|
||||||
<!-- <Blob Name="object_geldb_Blob_006958" Size="0x400" Offset="0x6958" /> -->
|
<Texture Name="gGerudoRedShoeUpperTex" OutName="gerudo_red_shoe_upper" Format="ci8" Width="8" Height="16" Offset="0x6898" />
|
||||||
<Texture Name="object_geldb_Tex_006D58" OutName="tex_006D58" Format="i8" Width="8" Height="16" Offset="0x6D58" />
|
<Texture Name="gGerudoRedShoeSoleTex" OutName="gerudo_red_shoe_sole" Format="ci8" Width="8" Height="8" Offset="0x6918" />
|
||||||
<Texture Name="object_geldb_Tex_006DD8" OutName="tex_006DD8" Format="ci8" Width="16" Height="16" Offset="0x6DD8" />
|
<Texture Name="gGerudoRedEyeHalfTex" OutName="gerudo_red_eye_half" Format="ci8" Width="32" Height="32" Offset="0x6958" TlutOffset="0x60E0" />
|
||||||
<Texture Name="object_geldb_Tex_006ED8" OutName="tex_006ED8" Format="ci8" Width="16" Height="16" Offset="0x6ED8" />
|
<Texture Name="gGerudoRedMail2Tex" OutName="gerudo_red_mail_2" Format="i8" Width="8" Height="16" Offset="0x6D58" />
|
||||||
<Texture Name="object_geldb_Tex_006FD8" OutName="tex_006FD8" Format="ci8" Width="16" Height="16" Offset="0x6FD8" />
|
<Texture Name="gGerudoRedHairTex" OutName="gerudo_red_hair" Format="ci8" Width="16" Height="16" Offset="0x6DD8" />
|
||||||
<!-- <Blob Name="object_geldb_Blob_0070D8" Size="0x400" Offset="0x70D8" /> -->
|
<Texture Name="gGerudoRedFingersTex" OutName="gerudo_red_fingers" Format="ci8" Width="16" Height="16" Offset="0x6ED8" />
|
||||||
<DList Name="object_geldb_DL_0092F8" Offset="0x92F8" />
|
<Texture Name="gGerudoRedYellowJewel2Tex" OutName="gerudo_red_yellow_jewel_2" Format="ci8" Width="16" Height="16" Offset="0x6FD8" /> <!-- used for head and sword guards -->
|
||||||
<DList Name="object_geldb_DL_0094B8" Offset="0x94B8" />
|
<Texture Name="gGerudoRedEyeClosedTex" OutName="gerudo_red_eye_closed" Format="ci8" Width="32" Height="32" Offset="0x70D8" TlutOffset="0x60E0" />
|
||||||
<DList Name="object_geldb_DL_009678" Offset="0x9678" />
|
<DList Name="gGerudoRedLeftFootDL" Offset="0x92F8" />
|
||||||
<DList Name="object_geldb_DL_009810" Offset="0x9810" />
|
<DList Name="gGerudoRedRightFootDL" Offset="0x94B8" />
|
||||||
<DList Name="object_geldb_DL_0099E8" Offset="0x99E8" />
|
<DList Name="gGerudoRedLeftHandDL" Offset="0x9678" />
|
||||||
<DList Name="object_geldb_DL_009B80" Offset="0x9B80" />
|
<DList Name="gGerudoRedLeftSwordDL" Offset="0x9810" />
|
||||||
<DList Name="object_geldb_DL_009D58" Offset="0x9D58" />
|
<DList Name="gGerudoRedRightHandDL" Offset="0x99E8" />
|
||||||
<DList Name="object_geldb_DL_009E10" Offset="0x9E10" />
|
<DList Name="gGerudoRedRightSwordDL" Offset="0x9B80" />
|
||||||
<DList Name="object_geldb_DL_009F00" Offset="0x9F00" />
|
<DList Name="gGerudoRedVeilDL" Offset="0x9D58" />
|
||||||
<Limb Name="object_geldb_Standardlimb_00A698" Type="Standard" EnumName="OBJECT_GELDB_LIMB_01" Offset="0xA698" />
|
<DList Name="gGerudoRedPonytailDL" Offset="0x9E10" />
|
||||||
<Limb Name="object_geldb_Standardlimb_00A6A4" Type="Standard" EnumName="OBJECT_GELDB_LIMB_02" Offset="0xA6A4" />
|
<DList Name="gGerudoRedHeadDL" Offset="0x9F00" />
|
||||||
<Limb Name="object_geldb_Standardlimb_00A6B0" Type="Standard" EnumName="OBJECT_GELDB_LIMB_03" Offset="0xA6B0" />
|
|
||||||
<Limb Name="object_geldb_Standardlimb_00A6BC" Type="Standard" EnumName="OBJECT_GELDB_LIMB_04" Offset="0xA6BC" />
|
<Limb Name="gGerudoRedRootLimb" Type="Standard" EnumName="GERUDO_RED_LIMB_ROOT" Offset="0xA698" />
|
||||||
<Limb Name="object_geldb_Standardlimb_00A6C8" Type="Standard" EnumName="OBJECT_GELDB_LIMB_05" Offset="0xA6C8" />
|
<Limb Name="gGerudoRedTorsoLimb" Type="Standard" EnumName="GERUDO_RED_LIMB_TORSO" Offset="0xA6A4" />
|
||||||
<Limb Name="object_geldb_Standardlimb_00A6D4" Type="Standard" EnumName="OBJECT_GELDB_LIMB_06" Offset="0xA6D4" />
|
<Limb Name="gGerudoRedNeckLimb" Type="Standard" EnumName="GERUDO_RED_LIMB_NECK" Offset="0xA6B0" />
|
||||||
<Limb Name="object_geldb_Standardlimb_00A6E0" Type="Standard" EnumName="OBJECT_GELDB_LIMB_07" Offset="0xA6E0" />
|
<Limb Name="gGerudoRedPonytailLimb" Type="Standard" EnumName="GERUDO_RED_LIMB_PONYTAIL" Offset="0xA6BC" />
|
||||||
<Limb Name="object_geldb_Standardlimb_00A6EC" Type="Standard" EnumName="OBJECT_GELDB_LIMB_08" Offset="0xA6EC" />
|
<Limb Name="gGerudoRedVeilLimb" Type="Standard" EnumName="GERUDO_RED_LIMB_VEIL" Offset="0xA6C8" />
|
||||||
<Limb Name="object_geldb_Standardlimb_00A6F8" Type="Standard" EnumName="OBJECT_GELDB_LIMB_09" Offset="0xA6F8" />
|
<Limb Name="gGerudoRedHeadLimb" Type="Standard" EnumName="GERUDO_RED_LIMB_HEAD" Offset="0xA6D4" />
|
||||||
<Limb Name="object_geldb_Standardlimb_00A704" Type="Standard" EnumName="OBJECT_GELDB_LIMB_0A" Offset="0xA704" />
|
<Limb Name="gGerudoRedRightUpperArmLimb" Type="Standard" EnumName="GERUDO_RED_LIMB_RIGHT_UPPER_ARM" Offset="0xA6E0" />
|
||||||
<Limb Name="object_geldb_Standardlimb_00A710" Type="Standard" EnumName="OBJECT_GELDB_LIMB_0B" Offset="0xA710" />
|
<Limb Name="gGerudoRedRightForearmLimb" Type="Standard" EnumName="GERUDO_RED_LIMB_RIGHT_FOREARM" Offset="0xA6EC" />
|
||||||
<Limb Name="object_geldb_Standardlimb_00A71C" Type="Standard" EnumName="OBJECT_GELDB_LIMB_0C" Offset="0xA71C" />
|
<Limb Name="gGerudoRedRightWristLimb" Type="Standard" EnumName="GERUDO_RED_LIMB_RIGHT_WRIST" Offset="0xA6F8" />
|
||||||
<Limb Name="object_geldb_Standardlimb_00A728" Type="Standard" EnumName="OBJECT_GELDB_LIMB_0D" Offset="0xA728" />
|
<Limb Name="gGerudoRedRightHandLimb" Type="Standard" EnumName="GERUDO_RED_LIMB_RIGHT_HAND" Offset="0xA704" />
|
||||||
<Limb Name="object_geldb_Standardlimb_00A734" Type="Standard" EnumName="OBJECT_GELDB_LIMB_0E" Offset="0xA734" />
|
<Limb Name="gGerudoRedRightSwordLimb" Type="Standard" EnumName="GERUDO_RED_LIMB_RIGHT_SWORD" Offset="0xA710" />
|
||||||
<Limb Name="object_geldb_Standardlimb_00A740" Type="Standard" EnumName="OBJECT_GELDB_LIMB_0F" Offset="0xA740" />
|
<Limb Name="gGerudoRedLeftUpperArmLimb" Type="Standard" EnumName="GERUDO_RED_LIMB_LEFT_UPPER_ARM" Offset="0xA71C" />
|
||||||
<Limb Name="object_geldb_Standardlimb_00A74C" Type="Standard" EnumName="OBJECT_GELDB_LIMB_10" Offset="0xA74C" />
|
<Limb Name="gGerudoRedLeftForearmLimb" Type="Standard" EnumName="GERUDO_RED_LIMB_LEFT_FOREARM" Offset="0xA728" />
|
||||||
<Limb Name="object_geldb_Standardlimb_00A758" Type="Standard" EnumName="OBJECT_GELDB_LIMB_11" Offset="0xA758" />
|
<Limb Name="gGerudoRedLeftWristLimb" Type="Standard" EnumName="GERUDO_RED_LIMB_LEFT_WRIST" Offset="0xA734" />
|
||||||
<Limb Name="object_geldb_Standardlimb_00A764" Type="Standard" EnumName="OBJECT_GELDB_LIMB_12" Offset="0xA764" />
|
<Limb Name="gGerudoRedLeftHandLimb" Type="Standard" EnumName="GERUDO_RED_LIMB_LEFT_HAND" Offset="0xA740" />
|
||||||
<Limb Name="object_geldb_Standardlimb_00A770" Type="Standard" EnumName="OBJECT_GELDB_LIMB_13" Offset="0xA770" />
|
<Limb Name="gGerudoRedLeftSwordLimb" Type="Standard" EnumName="GERUDO_RED_LIMB_LEFT_SWORD" Offset="0xA74C" />
|
||||||
<Limb Name="object_geldb_Standardlimb_00A77C" Type="Standard" EnumName="OBJECT_GELDB_LIMB_14" Offset="0xA77C" />
|
<Limb Name="gGerudoRedLeftThighLimb" Type="Standard" EnumName="GERUDO_RED_LIMB_LEFT_THIGH" Offset="0xA758" />
|
||||||
<Limb Name="object_geldb_Standardlimb_00A788" Type="Standard" EnumName="OBJECT_GELDB_LIMB_15" Offset="0xA788" />
|
<Limb Name="gGerudoRedLeftLowerLegLimb" Type="Standard" EnumName="GERUDO_RED_LIMB_LEFT_LOWER_LEG" Offset="0xA764" />
|
||||||
<Limb Name="object_geldb_Standardlimb_00A794" Type="Standard" EnumName="OBJECT_GELDB_LIMB_16" Offset="0xA794" />
|
<Limb Name="gGerudoRedLeftFootLimb" Type="Standard" EnumName="GERUDO_RED_LIMB_LEFT_FOOT" Offset="0xA770" />
|
||||||
<Limb Name="object_geldb_Standardlimb_00A7A0" Type="Standard" EnumName="OBJECT_GELDB_LIMB_17" Offset="0xA7A0" />
|
<Limb Name="gGerudoRedRightThighLimb" Type="Standard" EnumName="GERUDO_RED_LIMB_RIGHT_THIGH" Offset="0xA77C" />
|
||||||
<Skeleton Name="object_geldb_Skel_00A808" Type="Flex" LimbType="Standard" LimbNone="OBJECT_GELDB_LIMB_NONE" LimbMax="OBJECT_GELDB_LIMB_MAX" EnumName="ObjectGeldbLimb" Offset="0xA808" />
|
<Limb Name="gGerudoRedRightLowerLegLimb" Type="Standard" EnumName="GERUDO_RED_LIMB_RIGHT_LOWER_LEG" Offset="0xA788" />
|
||||||
<Animation Name="object_geldb_Anim_00AA8C" Offset="0xAA8C" /> <!-- Original name is "geldB_talk" -->
|
<Limb Name="gGerudoRedRightFootLimb" Type="Standard" EnumName="GERUDO_RED_LIMB_RIGHT_FOOT" Offset="0xA794" />
|
||||||
<Animation Name="object_geldb_Anim_00B0E4" Offset="0xB0E4" /> <!-- Original name is "geldB_wait" -->
|
<Limb Name="gGerudoRedPelvisLimb" Type="Standard" EnumName="GERUDO_RED_LIMB_PELVIS" Offset="0xA7A0" />
|
||||||
|
<Skeleton Name="gGerudoRedSkel" Type="Flex" LimbType="Standard" LimbNone="GERUDO_RED_LIMB_NONE" LimbMax="GERUDO_RED_LIMB_MAX" EnumName="GerudoRedLimb" Offset="0xA808" />
|
||||||
|
|
||||||
|
<!-- Same as OoT object_geldb 0xAE10-end -->
|
||||||
|
<Animation Name="gGerudoRedStandAnim" Offset="0xAA8C" /> <!-- Original name is "geldB_talk" -->
|
||||||
|
<Animation Name="gGerudoRedNeutralAnim" Offset="0xB0E4" /> <!-- Original name is "geldB_wait" -->
|
||||||
</File>
|
</File>
|
||||||
</Root>
|
</Root>
|
||||||
|
|
3
spec
3
spec
|
@ -2057,8 +2057,7 @@ beginseg
|
||||||
name "ovl_En_Ge3"
|
name "ovl_En_Ge3"
|
||||||
compress
|
compress
|
||||||
include "build/src/overlays/actors/ovl_En_Ge3/z_en_ge3.o"
|
include "build/src/overlays/actors/ovl_En_Ge3/z_en_ge3.o"
|
||||||
include "build/data/ovl_En_Ge3/ovl_En_Ge3.data.o"
|
include "build/src/overlays/actors/ovl_En_Ge3/ovl_En_Ge3_reloc.o"
|
||||||
include "build/data/ovl_En_Ge3/ovl_En_Ge3.reloc.o"
|
|
||||||
endseg
|
endseg
|
||||||
|
|
||||||
beginseg
|
beginseg
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
/*
|
/*
|
||||||
* File: z_en_ge3.c
|
* File: z_en_ge3.c
|
||||||
* Overlay: ovl_En_Ge3
|
* Overlay: ovl_En_Ge3
|
||||||
* Description: Aviel
|
* Description: Aviel, leader of the Gerudo Pirates
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "z_en_ge3.h"
|
#include "z_en_ge3.h"
|
||||||
|
@ -15,7 +15,26 @@ void EnGe3_Destroy(Actor* thisx, PlayState* play);
|
||||||
void EnGe3_Update(Actor* thisx, PlayState* play);
|
void EnGe3_Update(Actor* thisx, PlayState* play);
|
||||||
void EnGe3_Draw(Actor* thisx, PlayState* play);
|
void EnGe3_Draw(Actor* thisx, PlayState* play);
|
||||||
|
|
||||||
#if 0
|
void EnGe3_ChangeAnim(EnGe3* this, s16 animIndex, u8 mode, f32 morphFrames);
|
||||||
|
void EnGe3_SetupPath(EnGe3* this, PlayState* play);
|
||||||
|
void EnGe3_Idle(EnGe3* this, PlayState* play);
|
||||||
|
void EnGe3_AveilsChamberIdle(EnGe3* this, PlayState* play);
|
||||||
|
s32 EnGe3_ValidatePictograph(PlayState* play, Actor* thisx);
|
||||||
|
|
||||||
|
typedef enum GerudoAveilAnimation {
|
||||||
|
/* -1 */ GERUDO_AVEIL_ANIM_NONE = -1,
|
||||||
|
/* 0 */ GERUDO_AVEIL_ANIM_STAND,
|
||||||
|
/* 1 */ GERUDO_AVEIL_ANIM_WALK,
|
||||||
|
/* 2 */ GERUDO_AVEIL_ANIM_HAND_ON_HIP_WAIT,
|
||||||
|
/* 3 */ GERUDO_AVEIL_ANIM_TURN_HEAD,
|
||||||
|
/* 4 */ GERUDO_AVEIL_ANIM_WAIT,
|
||||||
|
/* 5 */ GERUDO_AVEIL_ANIM_DEMAND,
|
||||||
|
/* 6 */ GERUDO_AVEIL_ANIM_DISMISS,
|
||||||
|
/* 7 */ GERUDO_AVEIL_ANIM_BEG,
|
||||||
|
/* 8 */ GERUDO_AVEIL_ANIM_RUN_AWAY,
|
||||||
|
/* 9 */ GERUDO_AVEIL_ANIM_MAX
|
||||||
|
} GerudoAveilAnimation;
|
||||||
|
|
||||||
ActorInit En_Ge3_InitVars = {
|
ActorInit En_Ge3_InitVars = {
|
||||||
ACTOR_EN_GE3,
|
ACTOR_EN_GE3,
|
||||||
ACTORCAT_NPC,
|
ACTORCAT_NPC,
|
||||||
|
@ -28,49 +47,386 @@ ActorInit En_Ge3_InitVars = {
|
||||||
(ActorFunc)EnGe3_Draw,
|
(ActorFunc)EnGe3_Draw,
|
||||||
};
|
};
|
||||||
|
|
||||||
// static ColliderCylinderInit sCylinderInit = {
|
static ColliderCylinderInit sCylinderInit = {
|
||||||
static ColliderCylinderInit D_809A0DA0 = {
|
{
|
||||||
{ COLTYPE_NONE, AT_NONE, AC_ON | AC_TYPE_PLAYER, OC1_ON | OC1_TYPE_ALL, OC2_TYPE_1, COLSHAPE_CYLINDER, },
|
COLTYPE_NONE,
|
||||||
{ ELEMTYPE_UNK0, { 0x00000000, 0x00, 0x00 }, { 0x01000222, 0x00, 0x00 }, TOUCH_NONE | TOUCH_SFX_NORMAL, BUMP_ON, OCELEM_ON, },
|
AT_NONE,
|
||||||
|
AC_ON | AC_TYPE_PLAYER,
|
||||||
|
OC1_ON | OC1_TYPE_ALL,
|
||||||
|
OC2_TYPE_1,
|
||||||
|
COLSHAPE_CYLINDER,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
ELEMTYPE_UNK0,
|
||||||
|
{ 0x00000000, 0x00, 0x00 },
|
||||||
|
{ 0x01000222, 0x00, 0x00 },
|
||||||
|
TOUCH_NONE | TOUCH_SFX_NORMAL,
|
||||||
|
BUMP_ON,
|
||||||
|
OCELEM_ON,
|
||||||
|
},
|
||||||
{ 20, 50, 0, { 0, 0, 0 } },
|
{ 20, 50, 0, { 0, 0, 0 } },
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif
|
void EnGe3_Init(Actor* thisx, PlayState* play) {
|
||||||
|
s32 pad;
|
||||||
|
EnGe3* this = THIS;
|
||||||
|
|
||||||
extern ColliderCylinderInit D_809A0DA0;
|
ActorShape_Init(&this->picto.actor.shape, 0.0f, ActorShadow_DrawCircle, 20.0f);
|
||||||
|
SkelAnime_InitFlex(play, &this->skelAnime, &gGerudoRedSkel, NULL, this->jointTable, this->morphTable,
|
||||||
|
GERUDO_RED_LIMB_MAX);
|
||||||
|
Animation_PlayLoop(&this->skelAnime, &gGerudoRedHandOnHipWaitAnim);
|
||||||
|
Collider_InitAndSetCylinder(play, &this->collider, &this->picto.actor, &sCylinderInit);
|
||||||
|
this->picto.actor.colChkInfo.mass = MASS_IMMOVABLE;
|
||||||
|
Actor_SetScale(&this->picto.actor, 0.01f);
|
||||||
|
|
||||||
extern UNK_TYPE D_0600A808;
|
this->animIndex = GERUDO_AVEIL_ANIM_NONE;
|
||||||
|
this->cueId = GERUDO_AVEIL_CUEID_NONE;
|
||||||
|
this->picto.validationFunc = EnGe3_ValidatePictograph;
|
||||||
|
EnGe3_SetupPath(this, play);
|
||||||
|
|
||||||
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Ge3/EnGe3_Init.s")
|
if (GERUDO_AVEIL_GET_TYPE(&this->picto.actor) == GERUDO_AVEIL_TYPE_AVEILS_CHAMBER) {
|
||||||
|
EnGe3_ChangeAnim(this, GERUDO_AVEIL_ANIM_HAND_ON_HIP_WAIT, ANIMMODE_LOOP, 0.0f);
|
||||||
|
this->actionFunc = EnGe3_AveilsChamberIdle;
|
||||||
|
|
||||||
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Ge3/EnGe3_Destroy.s")
|
if (CHECK_WEEKEVENTREG(WEEKEVENTREG_83_02)) {
|
||||||
|
Actor_Kill(&this->picto.actor);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
EnGe3_ChangeAnim(this, GERUDO_AVEIL_ANIM_WALK, ANIMMODE_LOOP, 0.0f);
|
||||||
|
this->actionFunc = EnGe3_Idle;
|
||||||
|
this->picto.actor.speed = 1.5f;
|
||||||
|
}
|
||||||
|
|
||||||
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Ge3/func_809A0070.s")
|
this->stateFlags = 0;
|
||||||
|
this->picto.actor.targetMode = 6;
|
||||||
|
this->picto.actor.terminalVelocity = -4.0f;
|
||||||
|
this->picto.actor.gravity = -1.0f;
|
||||||
|
CLEAR_WEEKEVENTREG(WEEKEVENTREG_80_08);
|
||||||
|
}
|
||||||
|
|
||||||
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Ge3/func_809A00F8.s")
|
void EnGe3_Destroy(Actor* thisx, PlayState* play) {
|
||||||
|
EnGe3* this = THIS;
|
||||||
|
|
||||||
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Ge3/func_809A020C.s")
|
Collider_DestroyCylinder(play, &this->collider);
|
||||||
|
}
|
||||||
|
|
||||||
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Ge3/func_809A024C.s")
|
void EnGe3_ChangeAnim(EnGe3* this, s16 animIndex, u8 mode, f32 morphFrames) {
|
||||||
|
static AnimationHeader* sAnimations[GERUDO_AVEIL_ANIM_MAX] = {
|
||||||
|
&gGerudoRedStandAnim, // GERUDO_AVEIL_ANIM_STAND
|
||||||
|
&gGerudoRedWalkAnim, // GERUDO_AVEIL_ANIM_WALK
|
||||||
|
&gGerudoRedHandOnHipWaitAnim, // GERUDO_AVEIL_ANIM_HAND_ON_HIP_WAIT
|
||||||
|
&gGerudoRedTurnHeadAnim, // GERUDO_AVEIL_ANIM_TURN_HEAD
|
||||||
|
&gGerudoRedWaitAnim, // GERUDO_AVEIL_ANIM_WAIT
|
||||||
|
&gGerudoRedDemandAnim, // GERUDO_AVEIL_ANIM_DEMAND
|
||||||
|
&gGerudoRedDismissAnim, // GERUDO_AVEIL_ANIM_DISMISS
|
||||||
|
&gGerudoRedBegAnim, // GERUDO_AVEIL_ANIM_BEG
|
||||||
|
&gGerudoRedRunAwayAnim, // GERUDO_AVEIL_ANIM_RUN_AWAY
|
||||||
|
};
|
||||||
|
|
||||||
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Ge3/func_809A0350.s")
|
Animation_Change(&this->skelAnime, sAnimations[animIndex], 1.0f, 0.0f,
|
||||||
|
Animation_GetLastFrame(sAnimations[animIndex]), mode, morphFrames);
|
||||||
|
this->animIndex = animIndex;
|
||||||
|
}
|
||||||
|
|
||||||
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Ge3/func_809A03AC.s")
|
void EnGe3_LookAtPlayer(EnGe3* this, PlayState* play) {
|
||||||
|
s16 yawDiff = this->picto.actor.yawTowardsPlayer - this->picto.actor.shape.rot.y;
|
||||||
|
|
||||||
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Ge3/func_809A03FC.s")
|
if ((ABS_ALT(yawDiff) <= 0x2300) && (this->picto.actor.xzDistToPlayer < 100.0f)) {
|
||||||
|
Actor_TrackPlayer(play, &this->picto.actor, &this->headRot, &this->torsoRot, this->picto.actor.focus.pos);
|
||||||
|
} else {
|
||||||
|
Math_SmoothStepToS(&this->headRot.x, 0, 6, 0x1838, 0x64);
|
||||||
|
Math_SmoothStepToS(&this->headRot.y, 0, 6, 0x1838, 0x64);
|
||||||
|
Math_SmoothStepToS(&this->torsoRot.x, 0, 6, 0x1838, 0x64);
|
||||||
|
Math_SmoothStepToS(&this->torsoRot.y, 0, 6, 0x1838, 0x64);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Ge3/func_809A04D0.s")
|
void EnGe3_SetupPath(EnGe3* this, PlayState* play) {
|
||||||
|
this->curPointIndex = 0;
|
||||||
|
|
||||||
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Ge3/func_809A0820.s")
|
if (GERUDO_AVEIL_GET_PATH(&this->picto.actor) != GERUDO_AVEIL_PATH_INDEX_NONE) {
|
||||||
|
this->path = &play->setupPathList[GERUDO_AVEIL_GET_PATH(&this->picto.actor)];
|
||||||
|
} else {
|
||||||
|
this->path = NULL;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Ge3/func_809A08A4.s")
|
/**
|
||||||
|
* @return true if no path or reached end of path
|
||||||
|
*/
|
||||||
|
s32 EnGe3_FollowPath(EnGe3* this) {
|
||||||
|
Path* path = this->path;
|
||||||
|
Vec3s* curPoint;
|
||||||
|
f32 diffX;
|
||||||
|
f32 diffZ;
|
||||||
|
|
||||||
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Ge3/EnGe3_Update.s")
|
if (path == NULL) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Ge3/func_809A096C.s")
|
curPoint = Lib_SegmentedToVirtual(path->points);
|
||||||
|
curPoint += this->curPointIndex;
|
||||||
|
diffX = curPoint->x - this->picto.actor.world.pos.x;
|
||||||
|
diffZ = curPoint->z - this->picto.actor.world.pos.z;
|
||||||
|
this->picto.actor.world.rot.y = Math_Atan2S(diffX, diffZ);
|
||||||
|
Math_SmoothStepToS(&this->picto.actor.shape.rot.y, this->picto.actor.world.rot.y, 2, 0x7D0, 0xC8);
|
||||||
|
|
||||||
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Ge3/func_809A0A14.s")
|
if ((SQ(diffX) + SQ(diffZ)) < SQ(10.0f)) {
|
||||||
|
this->curPointIndex++;
|
||||||
|
if (this->curPointIndex >= path->count) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Ge3/func_809A0C60.s")
|
void EnGe3_Scream(EnGe3* this) {
|
||||||
|
if ((s32)Rand_ZeroFloat(2.0f) == 0) {
|
||||||
|
Actor_PlaySfx(&this->picto.actor, NA_SE_VO_FPVO00);
|
||||||
|
} else {
|
||||||
|
Actor_PlaySfx(&this->picto.actor, NA_SE_VO_FPVO01);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Ge3/EnGe3_Draw.s")
|
void EnGe3_Idle(EnGe3* this, PlayState* play) {
|
||||||
|
SkelAnime_Update(&this->skelAnime);
|
||||||
|
EnGe3_LookAtPlayer(this, play);
|
||||||
|
|
||||||
|
if (EnGe3_FollowPath(this)) {
|
||||||
|
EnGe3_SetupPath(this, play);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void EnGe3_ThrowPlayerOut(EnGe3* this, PlayState* play) {
|
||||||
|
SkelAnime_Update(&this->skelAnime);
|
||||||
|
Math_SmoothStepToS(&this->picto.actor.shape.rot.y, this->picto.actor.yawTowardsPlayer, 2, 0x400, 0x100);
|
||||||
|
|
||||||
|
if (this->actionTimer > 0) {
|
||||||
|
this->actionTimer--;
|
||||||
|
} else if (play->nextEntrance != play->setupExitList[GERUDO_AVEIL_GET_EXIT(&this->picto.actor)]) {
|
||||||
|
play->nextEntrance = play->setupExitList[GERUDO_AVEIL_GET_EXIT(&this->picto.actor)];
|
||||||
|
play->transitionTrigger = TRANS_TRIGGER_START;
|
||||||
|
play->transitionType = TRANS_TYPE_38;
|
||||||
|
CLEAR_WEEKEVENTREG(WEEKEVENTREG_80_08);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void EnGe3_AveilsChamberIdle(EnGe3* this, PlayState* play) {
|
||||||
|
if (SkelAnime_Update(&this->skelAnime) && (this->cueId == GERUDO_AVEIL_CUEID_INSTRUCT)) {
|
||||||
|
EnGe3_ChangeAnim(this, GERUDO_AVEIL_ANIM_WAIT, ANIMMODE_ONCE, 0.0f);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (Cutscene_IsCueInChannel(play, CS_CMD_ACTOR_CUE_108)) {
|
||||||
|
s16 cueId = play->csCtx.actorCues[Cutscene_GetCueChannel(play, CS_CMD_ACTOR_CUE_108)]->id;
|
||||||
|
|
||||||
|
if (this->cueId != GERUDO_AVEIL_CUEID_BEEHIVE_RUN_AWAY) {
|
||||||
|
Cutscene_ActorTranslateAndYaw(&this->picto.actor, play, Cutscene_GetCueChannel(play, CS_CMD_ACTOR_CUE_108));
|
||||||
|
}
|
||||||
|
|
||||||
|
if (this->cueId != cueId) {
|
||||||
|
this->cueId = cueId;
|
||||||
|
switch (this->cueId) {
|
||||||
|
// Both cutscenes
|
||||||
|
case GERUDO_AVEIL_CUEID_WAIT:
|
||||||
|
EnGe3_ChangeAnim(this, GERUDO_AVEIL_ANIM_HAND_ON_HIP_WAIT, ANIMMODE_LOOP, 0.0f);
|
||||||
|
break;
|
||||||
|
|
||||||
|
// Instructing expedition leader cutscene
|
||||||
|
case GERUDO_AVEIL_CUEID_PAUSE:
|
||||||
|
EnGe3_ChangeAnim(this, GERUDO_AVEIL_ANIM_TURN_HEAD, ANIMMODE_ONCE, 0.0f);
|
||||||
|
this->skelAnime.playSpeed = 0.0f;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case GERUDO_AVEIL_CUEID_INSTRUCT:
|
||||||
|
EnGe3_ChangeAnim(this, GERUDO_AVEIL_ANIM_TURN_HEAD, ANIMMODE_ONCE, 0.0f);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case GERUDO_AVEIL_CUEID_DEMAND:
|
||||||
|
EnGe3_ChangeAnim(this, GERUDO_AVEIL_ANIM_DEMAND, ANIMMODE_LOOP, 0.0f);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case GERUDO_AVEIL_CUEID_DISMISS:
|
||||||
|
EnGe3_ChangeAnim(this, GERUDO_AVEIL_ANIM_DISMISS, ANIMMODE_ONCE, 0.0f);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case GERUDO_AVEIL_CUEID_BEG:
|
||||||
|
EnGe3_ChangeAnim(this, GERUDO_AVEIL_ANIM_BEG, ANIMMODE_LOOP, 0.0f);
|
||||||
|
break;
|
||||||
|
|
||||||
|
// Fleeing from bees cutscene
|
||||||
|
case GERUDO_AVEIL_CUEID_BEEHIVE_RUN_AWAY:
|
||||||
|
EnGe3_ChangeAnim(this, GERUDO_AVEIL_ANIM_RUN_AWAY, ANIMMODE_LOOP, 0.0f);
|
||||||
|
this->picto.actor.speed = 5.0f;
|
||||||
|
this->screamTimer = (s32)(Rand_ZeroFloat(10.0f) + 20.0f);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case GERUDO_AVEIL_CUEID_BEEHIVE_VANISH:
|
||||||
|
Actor_Kill(&this->picto.actor);
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
SkelAnime_Update(&this->skelAnime);
|
||||||
|
}
|
||||||
|
} else if ((this->picto.actor.xzDistToPlayer < 700.0f) && (fabsf(this->picto.actor.playerHeightRel) < 100.0f) &&
|
||||||
|
!Play_InCsMode(play)) {
|
||||||
|
func_800B7298(play, &this->picto.actor, PLAYER_CSMODE_26);
|
||||||
|
Lib_PlaySfx(NA_SE_SY_FOUND);
|
||||||
|
|
||||||
|
if (Player_GetMask(play) == PLAYER_MASK_STONE) { // Not fooled by Stone Mask
|
||||||
|
Message_StartTextbox(play, 0x11AF, &this->picto.actor);
|
||||||
|
} else {
|
||||||
|
Message_StartTextbox(play, 0x11AE, &this->picto.actor);
|
||||||
|
}
|
||||||
|
|
||||||
|
this->actionFunc = EnGe3_ThrowPlayerOut;
|
||||||
|
this->actionTimer = 50;
|
||||||
|
SET_WEEKEVENTREG(WEEKEVENTREG_80_08);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (this->cueId == GERUDO_AVEIL_CUEID_BEEHIVE_RUN_AWAY) {
|
||||||
|
this->picto.actor.speed = 5.0f;
|
||||||
|
EnGe3_FollowPath(this);
|
||||||
|
|
||||||
|
if (Animation_OnFrame(&this->skelAnime, 2.0f) || Animation_OnFrame(&this->skelAnime, 6.0f)) {
|
||||||
|
Actor_PlaySfx(&this->picto.actor, NA_SE_EV_PIRATE_WALK);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (this->screamTimer > 0) {
|
||||||
|
this->screamTimer--;
|
||||||
|
} else {
|
||||||
|
this->screamTimer = (s32)(Rand_ZeroFloat(10.0f) + 20.0f);
|
||||||
|
EnGe3_Scream(this);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void EnGe3_UpdateColliderAndMove(Actor* thisx, PlayState* play) {
|
||||||
|
s32 pad;
|
||||||
|
EnGe3* this = THIS;
|
||||||
|
|
||||||
|
Collider_UpdateCylinder(&this->picto.actor, &this->collider);
|
||||||
|
CollisionCheck_SetOC(play, &play->colChkCtx, &this->collider.base);
|
||||||
|
Actor_MoveWithGravity(&this->picto.actor);
|
||||||
|
Actor_UpdateBgCheckInfo(play, &this->picto.actor, 40.0f, 25.0f, 40.0f, UPDBGCHECKINFO_FLAG_4);
|
||||||
|
}
|
||||||
|
|
||||||
|
void EnGe3_Blink(EnGe3* this, PlayState* play) {
|
||||||
|
if (DECR(this->blinkTimer) == 0) {
|
||||||
|
this->blinkTimer = Rand_S16Offset(60, 60);
|
||||||
|
}
|
||||||
|
|
||||||
|
this->eyeIndex = this->blinkTimer;
|
||||||
|
|
||||||
|
if (this->eyeIndex >= 3) {
|
||||||
|
this->eyeIndex = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void EnGe3_Update(Actor* thisx, PlayState* play) {
|
||||||
|
EnGe3* this = THIS;
|
||||||
|
|
||||||
|
EnGe3_UpdateColliderAndMove(&this->picto.actor, play);
|
||||||
|
this->actionFunc(this, play);
|
||||||
|
EnGe3_Blink(this, play);
|
||||||
|
}
|
||||||
|
|
||||||
|
s32 EnGe3_ValidatePictograph(PlayState* play, Actor* thisx) {
|
||||||
|
s32 ret = Snap_ValidatePictograph(play, thisx, PICTO_VALID_PIRATE_GOOD, &thisx->focus.pos, &thisx->shape.rot, 10.0f,
|
||||||
|
400.0f, -1);
|
||||||
|
|
||||||
|
ret |= Snap_ValidatePictograph(play, thisx, PICTO_VALID_PIRATE_TOO_FAR, &thisx->focus.pos, &thisx->shape.rot, 10.0f,
|
||||||
|
1200.0f, -1);
|
||||||
|
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
s32 EnGe3_OverrideLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3f* pos, Vec3s* rot, Actor* thisx) {
|
||||||
|
EnGe3* this = THIS;
|
||||||
|
|
||||||
|
switch (limbIndex) {
|
||||||
|
case GERUDO_RED_LIMB_VEIL:
|
||||||
|
case GERUDO_RED_LIMB_RIGHT_SWORD:
|
||||||
|
case GERUDO_RED_LIMB_LEFT_SWORD:
|
||||||
|
*dList = NULL;
|
||||||
|
return false;
|
||||||
|
|
||||||
|
case GERUDO_RED_LIMB_HEAD:
|
||||||
|
rot->x += this->headRot.y;
|
||||||
|
// fallthrough
|
||||||
|
default:
|
||||||
|
// This is required since EnGe3 shares a skeleton with EnKaizoku; it avoids stale colours being used in the
|
||||||
|
// displaylists.
|
||||||
|
OPEN_DISPS(play->state.gfxCtx);
|
||||||
|
|
||||||
|
switch (limbIndex) {
|
||||||
|
case GERUDO_RED_LIMB_NECK:
|
||||||
|
break;
|
||||||
|
|
||||||
|
case GERUDO_RED_LIMB_HEAD:
|
||||||
|
gDPPipeSync(POLY_OPA_DISP++);
|
||||||
|
gDPSetEnvColor(POLY_OPA_DISP++, 80, 60, 10, 255);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case GERUDO_RED_LIMB_RIGHT_SWORD:
|
||||||
|
case GERUDO_RED_LIMB_LEFT_SWORD:
|
||||||
|
gDPPipeSync(POLY_OPA_DISP++);
|
||||||
|
gDPSetEnvColor(POLY_OPA_DISP++, 140, 170, 230, 255);
|
||||||
|
gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, 255, 255, 255, 255);
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
gDPPipeSync(POLY_OPA_DISP++);
|
||||||
|
gDPSetEnvColor(POLY_OPA_DISP++, 140, 0, 0, 255);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
CLOSE_DISPS(play->state.gfxCtx);
|
||||||
|
|
||||||
|
if (this->animIndex == GERUDO_AVEIL_ANIM_HAND_ON_HIP_WAIT) {
|
||||||
|
// Fidget
|
||||||
|
if ((limbIndex == GERUDO_RED_LIMB_RIGHT_FOREARM) || (limbIndex == GERUDO_RED_LIMB_LEFT_FOREARM) ||
|
||||||
|
(limbIndex == GERUDO_RED_LIMB_TORSO)) {
|
||||||
|
s32 temp = limbIndex * 50;
|
||||||
|
|
||||||
|
// required to match
|
||||||
|
rot->y = rot->y + (s32)(Math_SinS(play->state.frames * (temp + 0x814)) * 200.0f);
|
||||||
|
rot->z = rot->z + (s32)(Math_CosS(play->state.frames * (temp + 0x940)) * 200.0f);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
void EnGe3_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* rot, Actor* thisx) {
|
||||||
|
EnGe3* this = THIS;
|
||||||
|
Vec3f sFocusOffset = { 600.0f, 700.0f, 0.0f };
|
||||||
|
|
||||||
|
if (limbIndex == GERUDO_RED_LIMB_HEAD) {
|
||||||
|
Matrix_MultVec3f(&sFocusOffset, &this->picto.actor.focus.pos);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void EnGe3_Draw(Actor* thisx, PlayState* play) {
|
||||||
|
static TexturePtr sEyeTextures[] = {
|
||||||
|
gGerudoRedEyeOpenTex,
|
||||||
|
gGerudoRedEyeHalfTex,
|
||||||
|
gGerudoRedEyeClosedTex,
|
||||||
|
};
|
||||||
|
s32 pad;
|
||||||
|
EnGe3* this = THIS;
|
||||||
|
|
||||||
|
OPEN_DISPS(play->state.gfxCtx);
|
||||||
|
|
||||||
|
Gfx_SetupDL37_Opa(play->state.gfxCtx);
|
||||||
|
gSPSegment(POLY_OPA_DISP++, 0x08, Lib_SegmentedToVirtual(sEyeTextures[this->eyeIndex]));
|
||||||
|
func_800B8050(&this->picto.actor, play, 0);
|
||||||
|
SkelAnime_DrawFlexOpa(play, this->skelAnime.skeleton, this->skelAnime.jointTable, this->skelAnime.dListCount,
|
||||||
|
EnGe3_OverrideLimbDraw, EnGe3_PostLimbDraw, &this->picto.actor);
|
||||||
|
|
||||||
|
CLOSE_DISPS(play->state.gfxCtx);
|
||||||
|
}
|
||||||
|
|
|
@ -2,14 +2,54 @@
|
||||||
#define Z_EN_GE3_H
|
#define Z_EN_GE3_H
|
||||||
|
|
||||||
#include "global.h"
|
#include "global.h"
|
||||||
|
#include "z64snap.h"
|
||||||
|
#include "objects/object_geldb/object_geldb.h"
|
||||||
|
|
||||||
struct EnGe3;
|
struct EnGe3;
|
||||||
|
|
||||||
typedef void (*EnGe3ActionFunc)(struct EnGe3*, PlayState*);
|
typedef void (*EnGe3ActionFunc)(struct EnGe3*, PlayState*);
|
||||||
|
|
||||||
|
#define GERUDO_AVEIL_GET_PATH(thisx) (((thisx)->params & 0xFC00) >> 10)
|
||||||
|
#define GERUDO_AVEIL_GET_EXIT(thisx) (((thisx)->params & 0x1F0) >> 4)
|
||||||
|
#define GERUDO_AVEIL_GET_TYPE(thisx) ((thisx)->params & 1)
|
||||||
|
|
||||||
|
#define GERUDO_AVEIL_PATH_INDEX_NONE 0x3F
|
||||||
|
|
||||||
|
typedef enum GerudoAveilType {
|
||||||
|
/* 0 */ GERUDO_AVEIL_TYPE_0, // Unused, just walks forwards
|
||||||
|
/* 1 */ GERUDO_AVEIL_TYPE_AVEILS_CHAMBER
|
||||||
|
} GerudoAveilType;
|
||||||
|
|
||||||
|
typedef enum GerudoAveilCueId {
|
||||||
|
/* -1 */ GERUDO_AVEIL_CUEID_NONE = -1,
|
||||||
|
/* 0 */ GERUDO_AVEIL_CUEID_0, // Unused
|
||||||
|
/* 1 */ GERUDO_AVEIL_CUEID_WAIT,
|
||||||
|
/* 2 */ GERUDO_AVEIL_CUEID_PAUSE,
|
||||||
|
/* 3 */ GERUDO_AVEIL_CUEID_INSTRUCT,
|
||||||
|
/* 4 */ GERUDO_AVEIL_CUEID_DEMAND,
|
||||||
|
/* 5 */ GERUDO_AVEIL_CUEID_DISMISS,
|
||||||
|
/* 6 */ GERUDO_AVEIL_CUEID_BEG,
|
||||||
|
/* 7 */ GERUDO_AVEIL_CUEID_BEEHIVE_RUN_AWAY,
|
||||||
|
/* 8 */ GERUDO_AVEIL_CUEID_BEEHIVE_VANISH
|
||||||
|
} GerudoAveilCueId;
|
||||||
|
|
||||||
typedef struct EnGe3 {
|
typedef struct EnGe3 {
|
||||||
/* 0x000 */ Actor actor;
|
/* 0x000 */ PictoActor picto;
|
||||||
/* 0x144 */ char unk_144[0x1D8];
|
/* 0x148 */ ColliderCylinder collider;
|
||||||
|
/* 0x194 */ SkelAnime skelAnime;
|
||||||
|
/* 0x1D8 */ Vec3s jointTable[GERUDO_RED_LIMB_MAX];
|
||||||
|
/* 0x268 */ Vec3s morphTable[GERUDO_RED_LIMB_MAX];
|
||||||
|
/* 0x2F8 */ s16 eyeIndex;
|
||||||
|
/* 0x2FA */ s16 blinkTimer;
|
||||||
|
/* 0x2FC */ Path* path;
|
||||||
|
/* 0x300 */ s32 curPointIndex;
|
||||||
|
/* 0x304 */ Vec3s headRot;
|
||||||
|
/* 0x30A */ Vec3s torsoRot;
|
||||||
|
/* 0x310 */ s16 stateFlags; // Set and not used, named based on OoT use
|
||||||
|
/* 0x312 */ s16 animIndex;
|
||||||
|
/* 0x314 */ s16 cueId;
|
||||||
|
/* 0x316 */ s16 actionTimer;
|
||||||
|
/* 0x318 */ s16 screamTimer;
|
||||||
/* 0x31C */ EnGe3ActionFunc actionFunc;
|
/* 0x31C */ EnGe3ActionFunc actionFunc;
|
||||||
} EnGe3; // size = 0x320
|
} EnGe3; // size = 0x320
|
||||||
|
|
||||||
|
|
|
@ -8641,20 +8641,20 @@
|
||||||
0x8099FD7C:("func_8099FD7C",),
|
0x8099FD7C:("func_8099FD7C",),
|
||||||
0x8099FEB0:("EnGe3_Init",),
|
0x8099FEB0:("EnGe3_Init",),
|
||||||
0x809A0044:("EnGe3_Destroy",),
|
0x809A0044:("EnGe3_Destroy",),
|
||||||
0x809A0070:("func_809A0070",),
|
0x809A0070:("EnGe3_ChangeAnim",),
|
||||||
0x809A00F8:("func_809A00F8",),
|
0x809A00F8:("EnGe3_LookAtPlayer",),
|
||||||
0x809A020C:("func_809A020C",),
|
0x809A020C:("EnGe3_SetupPath",),
|
||||||
0x809A024C:("func_809A024C",),
|
0x809A024C:("EnGe3_FollowPath",),
|
||||||
0x809A0350:("func_809A0350",),
|
0x809A0350:("EnGe3_Scream",),
|
||||||
0x809A03AC:("func_809A03AC",),
|
0x809A03AC:("EnGe3_Idle",),
|
||||||
0x809A03FC:("func_809A03FC",),
|
0x809A03FC:("EnGe3_ThrowPlayerOut",),
|
||||||
0x809A04D0:("func_809A04D0",),
|
0x809A04D0:("EnGe3_AveilsChamberIdle",),
|
||||||
0x809A0820:("func_809A0820",),
|
0x809A0820:("EnGe3_UpdateColliderAndMove",),
|
||||||
0x809A08A4:("func_809A08A4",),
|
0x809A08A4:("EnGe3_Blink",),
|
||||||
0x809A0920:("EnGe3_Update",),
|
0x809A0920:("EnGe3_Update",),
|
||||||
0x809A096C:("func_809A096C",),
|
0x809A096C:("EnGe3_ValidatePictograph",),
|
||||||
0x809A0A14:("func_809A0A14",),
|
0x809A0A14:("EnGe3_OverrideLimbDraw",),
|
||||||
0x809A0C60:("func_809A0C60",),
|
0x809A0C60:("EnGe3_PostLimbDraw",),
|
||||||
0x809A0CBC:("EnGe3_Draw",),
|
0x809A0CBC:("EnGe3_Draw",),
|
||||||
0x809A0F20:("func_809A0F20",),
|
0x809A0F20:("func_809A0F20",),
|
||||||
0x809A0F78:("func_809A0F78",),
|
0x809A0F78:("func_809A0F78",),
|
||||||
|
|
|
@ -9342,10 +9342,10 @@
|
||||||
0x8099FE3C:("D_8099FE3C","UNK_TYPE1","",0x1),
|
0x8099FE3C:("D_8099FE3C","UNK_TYPE1","",0x1),
|
||||||
0x8099FE50:("D_8099FE50","UNK_TYPE1","",0x1),
|
0x8099FE50:("D_8099FE50","UNK_TYPE1","",0x1),
|
||||||
0x809A0D80:("En_Ge3_InitVars","UNK_TYPE1","",0x1),
|
0x809A0D80:("En_Ge3_InitVars","UNK_TYPE1","",0x1),
|
||||||
0x809A0DA0:("D_809A0DA0","UNK_TYPE1","",0x1),
|
0x809A0DA0:("sCylinderInit","ColliderCylinderInit","",0x2C),
|
||||||
0x809A0DCC:("D_809A0DCC","UNK_TYPE1","",0x1),
|
0x809A0DCC:("sAnimations","AnimationHeader*","[9]",0x24),
|
||||||
0x809A0DF0:("D_809A0DF0","UNK_TYPE4","",0x4),
|
0x809A0DF0:("sFocusOffset","Vec3f","",0xC),
|
||||||
0x809A0DFC:("D_809A0DFC","UNK_TYPE1","",0x1),
|
0x809A0DFC:("sEyeTextures","TexturePtr","[3]",0xC),
|
||||||
0x809A0E10:("jtbl_809A0E10","UNK_PTR","",0x4),
|
0x809A0E10:("jtbl_809A0E10","UNK_PTR","",0x4),
|
||||||
0x809A1A80:("Obj_Hamishi_InitVars","UNK_TYPE1","",0x1),
|
0x809A1A80:("Obj_Hamishi_InitVars","UNK_TYPE1","",0x1),
|
||||||
0x809A1AA0:("D_809A1AA0","UNK_TYPE1","",0x1),
|
0x809A1AA0:("D_809A1AA0","UNK_TYPE1","",0x1),
|
||||||
|
|
Loading…
Reference in New Issue