`ovl_Obj_Um` OK (#887)

* Pass the whole actor in mips2c

* hacky way to fix some types

* decomp a few functions and second mips2c pass

* draw

* another mips2c pass

* some functions

* Init almost matching

* mips2c pass

* Match update and a few more

* A bunch of functions

* horses gonna horse

* func_80B7A860

* mips2c pass

* func_80B7984C

* func_80B795A0

* func_80B783E0

* func_80B78764

* Tried func_80B7BEA4

* func_80B79BA0

* func_80B7A494

* func_80B7A614

* lots of non equivalents

* fix

* Match func_80B77770

* func_80B7BEA4

* import data

* func_80B7B93C

* minor fixes

* ObjUm_Init

* func_80B7AF30

* func_80B7B18C

* func_80B7BABC

* func_80B77FA4

* func_80B7B598

* func_80B781DC is equivalent

* func_80B781DC

* func_80B7BABC

* Cleanup

* limbs

* minor members renames

* First docs pass

* small pass

* yes

* another pass

* more renames

* flags defines

* arePotsBroken

* some flags

* yet another docs pass

* Some members named

* Add weekEventReg docs

* small rename

* And more

* Another 2

* actorfixer and other fixes

* format

* Use extracted object symbols

* fixes

* Some stuff improved

* very minor naming

* format

* remove debugging stuff

* cleanup

* Some EnHorse stuff

* horse params

* ! FAKE

* Update include/functions.h

Co-authored-by: Derek Hensley <hensley.derek58@gmail.com>

* review

Co-authored-by: Derek Hensley <hensley.derek58@gmail.com>

* review

Co-authored-by: Tom Overton <tom-overton@users.noreply.github.com>

* Update assets/xml/objects/object_um.xml

* IS_BANDIT_TYPE

Co-authored-by: Derek Hensley <hensley.derek58@gmail.com>

* review

Co-authored-by: Derek Hensley <hensley.derek58@gmail.com>

* Update src/overlays/actors/ovl_Obj_Um/z_obj_um.c

Co-authored-by: Derek Hensley <hensley.derek58@gmail.com>

* remove a fake match

Co-authored-by: Tom Overton <tom-overton@users.noreply.github.com>

* Update src/overlays/actors/ovl_En_Horse/z_en_horse.h

Co-authored-by: EllipticEllipsis <elliptic.ellipsis@gmail.com>

* Update src/overlays/actors/ovl_En_Ma_Yto/z_en_ma_yto.c

Co-authored-by: EllipticEllipsis <elliptic.ellipsis@gmail.com>

* Update src/overlays/actors/ovl_Obj_Um/z_obj_um.c

Co-authored-by: EllipticEllipsis <elliptic.ellipsis@gmail.com>

* Update src/overlays/actors/ovl_Obj_Um/z_obj_um.c

Co-authored-by: EllipticEllipsis <elliptic.ellipsis@gmail.com>

* Update src/overlays/actors/ovl_Obj_Um/z_obj_um.c

Co-authored-by: EllipticEllipsis <elliptic.ellipsis@gmail.com>

* review

Co-authored-by: EllipticEllipsis <elliptic.ellipsis@gmail.com>

* anim enum

* name anim enum

* Update src/overlays/actors/ovl_Obj_Um/z_obj_um.c

Co-authored-by: engineer124 <47598039+engineer124@users.noreply.github.com>

* Update src/overlays/actors/ovl_Obj_Um/z_obj_um.c

Co-authored-by: engineer124 <47598039+engineer124@users.noreply.github.com>

* Update src/overlays/actors/ovl_Obj_Um/z_obj_um.c

Co-authored-by: engineer124 <47598039+engineer124@users.noreply.github.com>

* Update src/overlays/actors/ovl_Obj_Um/z_obj_um.c

Co-authored-by: engineer124 <47598039+engineer124@users.noreply.github.com>

* Update src/overlays/actors/ovl_Obj_Um/z_obj_um.c

Co-authored-by: engineer124 <47598039+engineer124@users.noreply.github.com>

* Update src/overlays/actors/ovl_Obj_Um/z_obj_um.c

Co-authored-by: engineer124 <47598039+engineer124@users.noreply.github.com>

* Update src/overlays/actors/ovl_Obj_Um/z_obj_um.c

Co-authored-by: engineer124 <47598039+engineer124@users.noreply.github.com>

* Update src/overlays/actors/ovl_Obj_Um/z_obj_um.c

Co-authored-by: engineer124 <47598039+engineer124@users.noreply.github.com>

* review

Co-authored-by: engineer124 <47598039+engineer124@users.noreply.github.com>

* remove repeated forward declarations

* fixes

* Update src/overlays/actors/ovl_Obj_Um/z_obj_um.c

Co-authored-by: Tom Overton <tom-overton@users.noreply.github.com>

* Update src/overlays/actors/ovl_Obj_Um/z_obj_um.c

Co-authored-by: Tom Overton <tom-overton@users.noreply.github.com>

* Update src/overlays/actors/ovl_Obj_Um/z_obj_um.c

Co-authored-by: Tom Overton <tom-overton@users.noreply.github.com>

* Update src/overlays/actors/ovl_Obj_Um/z_obj_um.c

Co-authored-by: Tom Overton <tom-overton@users.noreply.github.com>

* Update src/overlays/actors/ovl_Obj_Um/z_obj_um.c

Co-authored-by: Tom Overton <tom-overton@users.noreply.github.com>

* Update src/overlays/actors/ovl_Obj_Um/z_obj_um.c

Co-authored-by: Tom Overton <tom-overton@users.noreply.github.com>

* Update src/overlays/actors/ovl_Obj_Um/z_obj_um.c

Co-authored-by: Tom Overton <tom-overton@users.noreply.github.com>

* Update src/overlays/actors/ovl_Obj_Um/z_obj_um.c

Co-authored-by: Tom Overton <tom-overton@users.noreply.github.com>

* review

Co-authored-by: Derek Hensley <hensley.derek58@gmail.com>
Co-authored-by: Tom Overton <tom-overton@users.noreply.github.com>

* comment

* review

Co-authored-by: EllipticEllipsis <elliptic.ellipsis@gmail.com>

* areAllPotsBroken

Co-authored-by: EllipticEllipsis <elliptic.ellipsis@gmail.com>

* fix merge

Co-authored-by: Derek Hensley <hensley.derek58@gmail.com>
Co-authored-by: Tom Overton <tom-overton@users.noreply.github.com>
Co-authored-by: EllipticEllipsis <elliptic.ellipsis@gmail.com>
Co-authored-by: engineer124 <47598039+engineer124@users.noreply.github.com>
This commit is contained in:
Anghelo Carvajal 2022-07-23 14:00:32 -04:00 committed by GitHub
parent aa87f0de89
commit 3f49adb91d
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
14 changed files with 2235 additions and 278 deletions

View File

@ -10,26 +10,31 @@
<Texture Name="object_um_Tex_002148" OutName="tex_002148" Format="rgba16" Width="32" Height="32" Offset="0x2148" />
<Texture Name="object_um_Tex_002948" OutName="tex_002948" Format="rgba16" Width="32" Height="32" Offset="0x2948" />
<Texture Name="object_um_Tex_003148" OutName="tex_003148" Format="rgba16" Width="32" Height="32" Offset="0x3148" />
<DList Name="object_um_DL_003C60" Offset="0x3C60" />
<!-- The bottles which the bandits try to destroy in the milk-run minigame. Referred as "milk-bottles" by Cremia in-game. -->
<DList Name="gUmMinigamePotDL" Offset="0x3C60" />
<Texture Name="object_um_Tex_003F00" OutName="tex_003F00" Format="rgba16" Width="16" Height="16" Offset="0x3F00" />
<Texture Name="object_um_Tex_004100" OutName="tex_004100" Format="rgba16" Width="8" Height="8" Offset="0x4100" />
<DList Name="object_um_DL_0043E0" Offset="0x43E0" />
<Texture Name="object_um_Tex_004500" OutName="tex_004500" Format="i8" Width="32" Height="32" Offset="0x4500" />
<DList Name="object_um_DL_004B60" Offset="0x4B60" />
<Texture Name="object_um_Tex_004C80" OutName="tex_004C80" Format="i8" Width="32" Height="32" Offset="0x4C80" />
<DList Name="object_um_DL_0052B0" Offset="0x52B0" />
<DList Name="gUmBrokenMinigamePotDL" Offset="0x52B0" />
<Texture Name="object_um_TLUT_0054D0" OutName="tlut_0054D0" Format="rgba16" Width="16" Height="16" Offset="0x54D0" />
<Texture Name="object_um_Tex_0056D0" OutName="tex_0056D0" Format="ci8" Width="8" Height="8" Offset="0x56D0" />
<Texture Name="object_um_Tex_005710" OutName="tex_005710" Format="ci8" Width="32" Height="64" Offset="0x5710" />
<Texture Name="object_um_Tex_005F10" OutName="tex_005F10" Format="ci8" Width="32" Height="32" Offset="0x5F10" />
<DList Name="object_um_DL_0067C0" Offset="0x67C0" />
<DList Name="object_um_DL_0067C0" Offset="0x67C0" /> <!-- pre-minigame pot? -->
<Texture Name="object_um_TLUT_006AD0" OutName="tlut_006AD0" Format="rgba16" Width="16" Height="16" Offset="0x6AD0" />
<Texture Name="object_um_Tex_006CD0" OutName="tex_006CD0" Format="ci8" Width="8" Height="8" Offset="0x6CD0" />
<Texture Name="object_um_Tex_006D10" OutName="tex_006D10" Format="ci8" Width="32" Height="64" Offset="0x6D10" />
<Texture Name="object_um_Tex_007510" OutName="tex_007510" Format="rgba16" Width="32" Height="32" Offset="0x7510" />
<!-- <Blob Name="object_um_Blob_007D10" Size="0x10" Offset="0x7D10" /> -->
<Collision Name="object_um_Colheader_007E20" Offset="0x7E20" />
<Collision Name="object_um_Colheader_007F50" Offset="0x7F50" />
<DList Name="object_um_DL_00DF20" Offset="0xDF20" />
<DList Name="object_um_DL_00E2F0" Offset="0xE2F0" />
<DList Name="object_um_DL_00E6A8" Offset="0xE6A8" />
@ -49,31 +54,35 @@
<DList Name="object_um_DL_010BD8" Offset="0x10BD8" />
<DList Name="object_um_DL_010CC8" Offset="0x10CC8" />
<DList Name="object_um_DL_0114B8" Offset="0x114B8" />
<Limb Name="object_um_Standardlimb_011CA8" Type="Standard" EnumName="OBJECT_UM_LIMB_01" Offset="0x11CA8" />
<Limb Name="object_um_Standardlimb_011CB4" Type="Standard" EnumName="OBJECT_UM_LIMB_02" Offset="0x11CB4" />
<Limb Name="object_um_Standardlimb_011CC0" Type="Standard" EnumName="OBJECT_UM_LIMB_03" Offset="0x11CC0" />
<Limb Name="object_um_Standardlimb_011CCC" Type="Standard" EnumName="OBJECT_UM_LIMB_04" Offset="0x11CCC" />
<Limb Name="object_um_Standardlimb_011CD8" Type="Standard" EnumName="OBJECT_UM_LIMB_05" Offset="0x11CD8" />
<Limb Name="object_um_Standardlimb_011CE4" Type="Standard" EnumName="OBJECT_UM_LIMB_06" Offset="0x11CE4" />
<Limb Name="object_um_Standardlimb_011CF0" Type="Standard" EnumName="OBJECT_UM_LIMB_07" Offset="0x11CF0" />
<Limb Name="object_um_Standardlimb_011CFC" Type="Standard" EnumName="OBJECT_UM_LIMB_08" Offset="0x11CFC" />
<Limb Name="object_um_Standardlimb_011D08" Type="Standard" EnumName="OBJECT_UM_LIMB_09" Offset="0x11D08" />
<Limb Name="object_um_Standardlimb_011D14" Type="Standard" EnumName="OBJECT_UM_LIMB_0A" Offset="0x11D14" />
<Limb Name="object_um_Standardlimb_011D20" Type="Standard" EnumName="OBJECT_UM_LIMB_0B" Offset="0x11D20" />
<Limb Name="object_um_Standardlimb_011D2C" Type="Standard" EnumName="OBJECT_UM_LIMB_0C" Offset="0x11D2C" />
<Limb Name="object_um_Standardlimb_011D38" Type="Standard" EnumName="OBJECT_UM_LIMB_0D" Offset="0x11D38" />
<Limb Name="object_um_Standardlimb_011D44" Type="Standard" EnumName="OBJECT_UM_LIMB_0E" Offset="0x11D44" />
<Limb Name="object_um_Standardlimb_011D50" Type="Standard" EnumName="OBJECT_UM_LIMB_0F" Offset="0x11D50" />
<Limb Name="object_um_Standardlimb_011D5C" Type="Standard" EnumName="OBJECT_UM_LIMB_10" Offset="0x11D5C" />
<Limb Name="object_um_Standardlimb_011D68" Type="Standard" EnumName="OBJECT_UM_LIMB_11" Offset="0x11D68" />
<Limb Name="object_um_Standardlimb_011D74" Type="Standard" EnumName="OBJECT_UM_LIMB_12" Offset="0x11D74" />
<Limb Name="object_um_Standardlimb_011D80" Type="Standard" EnumName="OBJECT_UM_LIMB_13" Offset="0x11D80" />
<Limb Name="object_um_Standardlimb_011D8C" Type="Standard" EnumName="OBJECT_UM_LIMB_14" Offset="0x11D8C" />
<Limb Name="object_um_Standardlimb_011D98" Type="Standard" EnumName="OBJECT_UM_LIMB_15" Offset="0x11D98" />
<Skeleton Name="object_um_Skel_011DF8" Type="Flex" LimbType="Standard" LimbNone="OBJECT_UM_LIMB_NONE" LimbMax="OBJECT_UM_LIMB_MAX" EnumName="object_um_Limbs" Offset="0x11DF8" />
<Animation Name="object_um_Anim_01213C" Offset="0x1213C" />
<Animation Name="object_um_Anim_0126C4" Offset="0x126C4" />
<Animation Name="object_um_Anim_012CC0" Offset="0x12CC0" />
<Limb Name="gUmWagonSeatAndShaftsLimb" Type="Standard" EnumName="UM_LIMB_SEAT_AND_SHAFTS" Offset="0x11CA8" /> <!-- Chair and donkey attachment -->
<Limb Name="gUmWagonRootLimb" Type="Standard" EnumName="UM_LIMB_WAGON_ROOT" Offset="0x11CB4" />
<Limb Name="gUmWagonRightWheelLimb" Type="Standard" EnumName="UM_LIMB_WAGON_RIGHT_WHEEL" Offset="0x11CC0" />
<Limb Name="gUmWagonLeftWheelLimb" Type="Standard" EnumName="UM_LIMB_WAGON_LEFT_WHEEL" Offset="0x11CCC" />
<Limb Name="gUmWagonCartBedLimb" Type="Standard" EnumName="UM_LIMB_WAGON_CART_BED" Offset="0x11CD8" />
<Limb Name="gUmWagonHandBrakeLimb" Type="Standard" EnumName="UM_LIMB_WAGON_HAND_BRAKE" Offset="0x11CE4" />
<Limb Name="gUmWagonCartCoverLimb" Type="Standard" EnumName="UM_LIMB_WAGON_CART_COVER" Offset="0x11CF0" />
<Limb Name="gUmWagonLeftLeafSpringLimb" Type="Standard" EnumName="UM_LIMB_WAGON_LEFT_LEAF_SPRING" Offset="0x11CFC" />
<Limb Name="gUmWagonRightLeafSpringLimb" Type="Standard" EnumName="UM_LIMB_WAGON_RIGHT_LEAF_SPRING" Offset="0x11D08" />
<Limb Name="gUmWagonSteeringWheelLimb" Type="Standard" EnumName="UM_LIMB_WAGON_STEERING_WHEEL" Offset="0x11D14" />
<Limb Name="gUmCremiaRootLimb" Type="Standard" EnumName="UM_LIMB_CREMIA_ROOT" Offset="0x11D20" />
<Limb Name="gUmCremiaTorsoLimb" Type="Standard" EnumName="UM_LIMB_CREMIA_TORSO" Offset="0x11D2C" />
<Limb Name="gUmCremiaHeadLimb" Type="Standard" EnumName="UM_LIMB_CREMIA_HEAD" Offset="0x11D38" />
<Limb Name="gUmCremiaHairEndLimb" Type="Standard" EnumName="UM_LIMB_CREMIA_HAIR_END" Offset="0x11D44" />
<Limb Name="gUmCremiaLeftUpperArmLimb" Type="Standard" EnumName="UM_LIMB_CREMIA_LEFT_UPPER_ARM" Offset="0x11D50" />
<Limb Name="gUmCremiaLeftForearmLimb" Type="Standard" EnumName="UM_LIMB_CREMIA_LEFT_FOREARM" Offset="0x11D5C" />
<Limb Name="gUmCremiaLeftHandLimb" Type="Standard" EnumName="UM_LIMB_CREMIA_LEFT_HAND" Offset="0x11D68" />
<Limb Name="gUmCremiaRightUpperArmLimb" Type="Standard" EnumName="UM_LIMB_CREMIA_RIGHT_UPPER_ARM" Offset="0x11D74" />
<Limb Name="gUmCremiaRightForearmLimb" Type="Standard" EnumName="UM_LIMB_CREMIA_RIGHT_FOREARM" Offset="0x11D80" />
<Limb Name="gUmCremiaRightHandLimb" Type="Standard" EnumName="UM_LIMB_CREMIA_RIGHT_HAND" Offset="0x11D8C" />
<Limb Name="gUmCremiaLowerBodyLimb" Type="Standard" EnumName="UM_LIMB_CREMIA_LOWER_BODY" Offset="0x11D98" />
<Skeleton Name="gUmSkel" Type="Flex" LimbType="Standard" LimbNone="UM_LIMB_NONE" LimbMax="UM_LIMB_MAX" EnumName="ObjectUmLimbs" Offset="0x11DF8" />
<Animation Name="gUmGallopAnim" Offset="0x1213C" />
<Animation Name="gUmLookBackAnim" Offset="0x126C4" />
<Animation Name="gUmTrotAnim" Offset="0x12CC0" />
<Texture Name="object_um_TLUT_012CD0" OutName="tlut_012CD0" Format="rgba16" Width="16" Height="16" Offset="0x12CD0" />
<Texture Name="object_um_TLUT_012ED0" OutName="tlut_012ED0" Format="rgba16" Width="16" Height="16" Offset="0x12ED0" />
<Texture Name="object_um_TLUT_0130D0" OutName="tlut_0130D0" Format="rgba16" Width="16" Height="16" Offset="0x130D0" />
@ -85,7 +94,19 @@
<Texture Name="object_um_Tex_014CD0" OutName="tex_014CD0" Format="ci8" Width="32" Height="64" Offset="0x14CD0" />
<Texture Name="object_um_Tex_0154D0" OutName="tex_0154D0" Format="ci8" Width="32" Height="64" Offset="0x154D0" />
<Texture Name="object_um_Tex_015CD0" OutName="tex_015CD0" Format="rgba16" Width="32" Height="32" Offset="0x15CD0" />
<!-- <Blob Name="object_um_Blob_0164D0" Size="0x2000" Offset="0x164D0" /> -->
<Texture Name="gUmCremiaEyeOpenTex" OutName="cremia_eye_open" Format="ci8" Width="32" Height="32" Offset="0x164D0" TlutOffset="0x130D0" />
<Texture Name="gUmCremiaEyeHalfTex" OutName="cremia_eye_half" Format="ci8" Width="32" Height="32" Offset="0x168D0" TlutOffset="0x130D0" />
<Texture Name="gUmCremiaEyeClosedTex" OutName="cremia_eye_closed" Format="ci8" Width="32" Height="32" Offset="0x16CD0" TlutOffset="0x130D0" />
<Texture Name="gUmCremiaEyeHappyTex" OutName="cremia_eye_happy" Format="ci8" Width="32" Height="32" Offset="0x170D0" TlutOffset="0x130D0" />
<Texture Name="gUmCremiaEyeAngryTex" OutName="cremia_eye_angry" Format="ci8" Width="32" Height="32" Offset="0x174D0" TlutOffset="0x130D0" />
<Texture Name="gUmCremiaEyeSadTex" OutName="cremia_eye_sad" Format="ci8" Width="32" Height="32" Offset="0x178D0" TlutOffset="0x130D0" />
<Texture Name="gUmMouthNormalTex" OutName="mouth_normal" Format="ci8" Width="32" Height="16" Offset="0x17CD0" TlutOffset="0x130D0" />
<Texture Name="gUmMouthHappyTex" OutName="mouth_happy" Format="ci8" Width="32" Height="16" Offset="0x17ED0" TlutOffset="0x130D0" />
<Texture Name="gUmMouthFrownTex" OutName="mouth_frown" Format="ci8" Width="32" Height="16" Offset="0x180D0" TlutOffset="0x130D0" />
<Texture Name="gUmMouthHangingOpenTex" OutName="mouth_hanging_open" Format="ci8" Width="32" Height="16" Offset="0x182D0" TlutOffset="0x130D0" />
<Texture Name="object_um_Tex_0184D0" OutName="tex_0184D0" Format="ci8" Width="8" Height="8" Offset="0x184D0" />
<Texture Name="object_um_Tex_018510" OutName="tex_018510" Format="ci8" Width="16" Height="16" Offset="0x18510" />
<Texture Name="object_um_Tex_018610" OutName="tex_018610" Format="ci8" Width="16" Height="16" Offset="0x18610" />
@ -100,6 +121,6 @@
<Texture Name="object_um_Tex_019210" OutName="tex_019210" Format="ci8" Width="16" Height="16" Offset="0x19210" />
<Texture Name="object_um_Tex_019310" OutName="tex_019310" Format="ci8" Width="16" Height="32" Offset="0x19310" />
<Texture Name="object_um_Tex_019510" OutName="tex_019510" Format="ci8" Width="64" Height="16" Offset="0x19510" />
<Animation Name="object_um_Anim_019E10" Offset="0x19E10" />
<Animation Name="gUmIdleAnim" Offset="0x19E10" />
</File>
</Root>

View File

@ -130,6 +130,7 @@ u32 StackCheck_Check(StackEntry* entry);
void MtxConv_F2L(Mtx* m1, MtxF* m2);
void MtxConv_L2F(MtxF* m1, Mtx* m2);
void __assert(const char* file, u32 lineNum);
// void func_800862B4(void);
void* SystemArena_MallocMin1(u32 size);

3
spec
View File

@ -4064,8 +4064,7 @@ beginseg
name "ovl_Obj_Um"
compress
include "build/src/overlays/actors/ovl_Obj_Um/z_obj_um.o"
include "build/data/ovl_Obj_Um/ovl_Obj_Um.data.o"
include "build/data/ovl_Obj_Um/ovl_Obj_Um.reloc.o"
include "build/src/overlays/actors/ovl_Obj_Um/ovl_Obj_Um_reloc.o"
endseg
beginseg

View File

@ -6,6 +6,8 @@
#include "z_en_horse.h"
#include "z64rumble.h"
#include "overlays/actors/ovl_En_In/z_en_in.h"
#include "overlays/actors/ovl_Obj_Um/z_obj_um.h"
#include "overlays/actors/ovl_En_Horse_Game_Check/z_en_horse_game_check.h"
#include "objects/object_horse_link_child/object_horse_link_child.h"
@ -122,7 +124,9 @@ static AnimationHeader** sAnimationHeaders[] = {
NULL, NULL, sEponaAnimHeaders, sHniAnimHeaders, sHniAnimHeaders,
};
static f32 sPlaybackSpeeds[] = { 2.0f / 3.0f, 2.0f / 3.0f, 1.0f, 1.0f, 1.0f, 1.0f, 1.0f, 2.0f / 3.0f, 2.0f / 3.0f };
static f32 sPlaybackSpeeds[] = {
2.0f / 3.0f, 2.0f / 3.0f, 3.0f / 3.0f, 3.0f / 3.0f, 3.0f / 3.0f, 3.0f / 3.0f, 3.0f / 3.0f, 2.0f / 3.0f, 2.0f / 3.0f,
};
static SkeletonHeader* sSkeletonHeaders[] = {
NULL, NULL, &object_horse_link_child_Skel_00A480, NULL, NULL,
@ -468,7 +472,7 @@ void EnHorse_PlayWalkingSound(EnHorse* this) {
return;
}
if (this->type == HORSE_2) {
if (this->type == HORSE_TYPE_2) {
Audio_PlaySfxAtPos(&this->actor.projectedPos, NA_SE_EV_KID_HORSE_WALK);
} else {
Audio_PlaySfxAtPos(&this->actor.projectedPos, NA_SE_EV_HORSE_WALK);
@ -482,7 +486,7 @@ void EnHorse_PlayWalkingSound(EnHorse* this) {
}
void func_8087C178(EnHorse* this) {
if (this->type == HORSE_2) {
if (this->type == HORSE_TYPE_2) {
Audio_PlaySfxAtPos(&this->actor.projectedPos, NA_SE_EV_KID_HORSE_RUN);
} else {
Audio_PlaySfxAtPos(&this->actor.projectedPos, NA_SE_EV_HORSE_RUN);
@ -490,7 +494,7 @@ void func_8087C178(EnHorse* this) {
}
void func_8087C1C0(EnHorse* this) {
if (this->type == HORSE_2) {
if (this->type == HORSE_TYPE_2) {
Audio_PlaySfxAtPos(&this->actor.projectedPos, NA_SE_EV_KID_HORSE_RUN);
} else {
Audio_PlaySfxAtPos(&this->actor.projectedPos, NA_SE_EV_HORSE_RUN);
@ -546,19 +550,19 @@ s32 func_8087C38C(PlayState* play, EnHorse* this, Vec3f* arg2) {
void EnHorse_IdleAnimSounds(EnHorse* this, PlayState* play) {
if ((this->animationIdx == ENHORSE_ANIM_IDLE) &&
(((this->curFrame > 35.0f) && (this->type == HORSE_EPONA)) ||
((this->curFrame > 28.0f) && (this->type == HORSE_HNI)) ||
((this->curFrame > 25.0f) && (this->type == HORSE_2))) &&
(((this->curFrame > 35.0f) && (this->type == HORSE_TYPE_EPONA)) ||
((this->curFrame > 28.0f) && (this->type == HORSE_TYPE_HNI)) ||
((this->curFrame > 25.0f) && (this->type == HORSE_TYPE_2))) &&
!(this->stateFlags & ENHORSE_SANDDUST_SOUND)) {
this->stateFlags |= ENHORSE_SANDDUST_SOUND;
if (this->type == HORSE_2) {
if (this->type == HORSE_TYPE_2) {
Audio_PlaySfxAtPos(&this->actor.projectedPos, NA_SE_EV_KID_HORSE_SANDDUST);
} else {
Audio_PlaySfxAtPos(&this->actor.projectedPos, NA_SE_EV_KID_HORSE_SANDDUST);
}
} else if ((this->animationIdx == 3) && (this->curFrame > 25.0f) && !(this->stateFlags & ENHORSE_LAND2_SOUND)) {
this->stateFlags |= ENHORSE_LAND2_SOUND;
if (this->type == HORSE_2) {
if (this->type == HORSE_TYPE_2) {
Audio_PlaySfxAtPos(&this->actor.projectedPos, NA_SE_EV_KID_HORSE_LAND2);
} else {
Audio_PlaySfxAtPos(&this->actor.projectedPos, NA_SE_EV_KID_HORSE_LAND2);
@ -694,8 +698,8 @@ void EnHorse_Init(Actor* thisx, PlayState* play2) {
this->unk_3E8 = 0.0f;
this->unk_528 = 100.0f;
if (ENHORSE_GET_8000(&this->actor)) {
this->type = HORSE_4;
if (ENHORSE_IS_DONKEY_TYPE(&this->actor)) {
this->type = HORSE_TYPE_DONKEY;
this->unk_528 = 80.0f;
this->boostSpeed = 12;
if ((this->bankIndex = Object_GetIndex(&play->objectCtx, OBJECT_HA)) < 0) {
@ -704,8 +708,8 @@ void EnHorse_Init(Actor* thisx, PlayState* play2) {
}
this->unk_1EC |= 1;
thisx->update = func_8087D540;
} else if (ENHORSE_GET_4000(&this->actor)) {
this->type = HORSE_2;
} else if (ENHORSE_IS_4000_TYPE(&this->actor)) {
this->type = HORSE_TYPE_2;
this->unk_528 = 64.8f;
this->boostSpeed = 15;
if ((this->bankIndex = Object_GetIndex(&play->objectCtx, OBJECT_HORSE_LINK_CHILD)) < 0) {
@ -717,8 +721,8 @@ void EnHorse_Init(Actor* thisx, PlayState* play2) {
} else {
thisx->update = func_8087D540;
}
} else if (ENHORSE_GET_2000(&this->actor)) {
this->type = HORSE_3;
} else if (ENHORSE_IS_BANDIT_TYPE(&this->actor)) {
this->type = HORSE_TYPE_BANDIT;
this->boostSpeed = 12;
if ((this->bankIndex = Object_GetIndex(&play->objectCtx, OBJECT_HA)) < 0) {
Actor_MarkForDeath(&this->actor);
@ -727,14 +731,14 @@ void EnHorse_Init(Actor* thisx, PlayState* play2) {
this->unk_1EC |= 1;
thisx->update = func_8087D540;
} else {
this->type = HORSE_EPONA;
this->type = HORSE_TYPE_EPONA;
this->boostSpeed = 15;
Actor_MarkForDeath(&this->actor);
}
thisx->params &= ~0xE000;
if (thisx->params == 0x1FFF) {
thisx->params = ENHORSE_1;
this->actor.params &= ~(ENHORSE_PARAM_DONKEY | ENHORSE_PARAM_4000 | ENHORSE_PARAM_BANDIT);
if (this->actor.params == 0x1FFF) {
this->actor.params = ENHORSE_1;
}
if (thisx->params == ENHORSE_3) {
@ -780,9 +784,9 @@ void EnHorse_Init(Actor* thisx, PlayState* play2) {
this->action = ENHORSE_ACT_IDLE;
thisx->speedXZ = 0.0f;
if (this->type == HORSE_2) {
if (this->type == HORSE_TYPE_2) {
sJntSphInit.elements[0].dim.limb = 13;
} else if ((this->type == HORSE_3) || (this->type == HORSE_4)) {
} else if ((this->type == HORSE_TYPE_BANDIT) || (this->type == HORSE_TYPE_DONKEY)) {
sJntSphInit.elements[0].dim.limb = 10;
}
@ -793,19 +797,19 @@ void EnHorse_Init(Actor* thisx, PlayState* play2) {
Collider_InitJntSph(play, &this->colliderJntSph);
Collider_SetJntSph(play, &this->colliderJntSph, &this->actor, &sJntSphInit, this->colliderJntSphElements);
if (this->type == HORSE_2) {
if (this->type == HORSE_TYPE_2) {
this->colliderCylinder1.dim.radius = this->colliderCylinder1.dim.radius * 0.8f;
this->colliderCylinder2.dim.radius = this->colliderCylinder2.dim.radius * 0.8f;
this->colliderJntSph.elements[0].dim.modelSphere.radius *= 0.6f;
} else if (this->type == HORSE_4) {
} else if (this->type == HORSE_TYPE_DONKEY) {
this->colliderCylinder1.dim.radius = 50;
}
CollisionCheck_SetInfo(&thisx->colChkInfo, NULL, &sColChkInfoInit);
if (this->type == HORSE_2) {
if (this->type == HORSE_TYPE_2) {
Actor_SetScale(&this->actor, 0.00648f);
} else if (this->type == HORSE_4) {
} else if (this->type == HORSE_TYPE_DONKEY) {
Actor_SetScale(&this->actor, 0.008f);
} else {
Actor_SetScale(&this->actor, 0.01f);
@ -889,7 +893,7 @@ void EnHorse_Init(Actor* thisx, PlayState* play2) {
thisx->world.rot.z = thisx->shape.rot.z;
thisx->home.rot.z = thisx->shape.rot.z;
this->unk_3EC = thisx->world.rot.y;
this->unk_538 = 0;
this->unk_538 = OBJ_UM_ANIM_TROT;
if (this->unk_1EC & 0x100) {
this->colliderCylinder1.base.colType = COLTYPE_HIT3;
@ -903,6 +907,7 @@ void EnHorse_Init(Actor* thisx, PlayState* play2) {
}
}
// EnHorse_WaitForObject
void func_8087D540(Actor* thisx, PlayState* play) {
EnHorse* this = THIS;
@ -911,7 +916,7 @@ void func_8087D540(Actor* thisx, PlayState* play) {
Actor_SetObjectDependency(play, &this->actor);
this->actor.update = EnHorse_Update;
if (this->unk_1EC & 1) {
if (this->type == HORSE_3) {
if (this->type == HORSE_TYPE_BANDIT) {
SkelAnime_InitFlex(play, &this->skin.skelAnime, &object_ha_Skel_008C68, NULL, this->jointTable,
this->morphTable, OBJECT_HA_1_LIMB_MAX);
} else {
@ -1097,11 +1102,11 @@ void EnHorse_StartMountedIdle(EnHorse* this) {
this->action = ENHORSE_ACT_MOUNTED_TURN;
this->animationIdx = ENHORSE_ANIM_IDLE;
if (((this->curFrame > 35.0f) && (this->type == HORSE_EPONA)) ||
((this->curFrame > 28.0f) && (this->type == HORSE_HNI))) {
if (((this->curFrame > 35.0f) && (this->type == HORSE_TYPE_EPONA)) ||
((this->curFrame > 28.0f) && (this->type == HORSE_TYPE_HNI))) {
if (!(this->stateFlags & ENHORSE_SANDDUST_SOUND)) {
this->stateFlags |= ENHORSE_SANDDUST_SOUND;
if (this->type == HORSE_2) {
if (this->type == HORSE_TYPE_2) {
Audio_PlaySfxAtPos(&this->actor.projectedPos, NA_SE_EV_KID_HORSE_SANDDUST);
} else {
Audio_PlaySfxAtPos(&this->actor.projectedPos, NA_SE_EV_KID_HORSE_SANDDUST);
@ -1152,7 +1157,7 @@ void EnHorse_MountedIdleWhinney(EnHorse* this) {
Animation_Change(&this->skin.skelAnime, sAnimationHeaders[this->type][this->animationIdx], 1.0f, curFrame,
Animation_GetLastFrame(sAnimationHeaders[this->type][1]), ANIMMODE_ONCE, -3.0f);
if (this->stateFlags & ENHORSE_DRAW) {
if (this->type == HORSE_2) {
if (this->type == HORSE_TYPE_2) {
Audio_PlaySfxAtPos(&this->unk_218, NA_SE_EV_KID_HORSE_GROAN);
} else {
Audio_PlaySfxAtPos(&this->unk_218, NA_SE_EV_HORSE_GROAN);
@ -1437,7 +1442,7 @@ void EnHorse_StartRearing(EnHorse* this) {
if (sAnimationHeaders[this->type][this->animationIdx] == NULL) {
if (Rand_ZeroOne() > 0.5f) {
if (this->stateFlags & ENHORSE_DRAW) {
if (this->type == HORSE_2) {
if (this->type == HORSE_TYPE_2) {
Audio_PlaySfxAtPos(&this->unk_218, NA_SE_EV_KID_HORSE_NEIGH);
} else {
Audio_PlaySfxAtPos(&this->unk_218, NA_SE_EV_HORSE_NEIGH);
@ -1451,7 +1456,7 @@ void EnHorse_StartRearing(EnHorse* this) {
this->stateFlags &= ~ENHORSE_LAND2_SOUND;
if (this->stateFlags & ENHORSE_DRAW) {
if (this->type == HORSE_2) {
if (this->type == HORSE_TYPE_2) {
Audio_PlaySfxAtPos(&this->unk_218, NA_SE_EV_KID_HORSE_NEIGH);
} else {
Audio_PlaySfxAtPos(&this->unk_218, NA_SE_EV_HORSE_NEIGH);
@ -1471,7 +1476,7 @@ void EnHorse_MountedRearing(EnHorse* this, PlayState* play) {
if (this->curFrame > 25.0f) {
if (!(this->stateFlags & ENHORSE_LAND2_SOUND)) {
this->stateFlags |= ENHORSE_LAND2_SOUND;
if (this->type == HORSE_2) {
if (this->type == HORSE_TYPE_2) {
Audio_PlaySfxAtPos(&this->actor.projectedPos, NA_SE_EV_KID_HORSE_LAND2);
} else {
Audio_PlaySfxAtPos(&this->actor.projectedPos, NA_SE_EV_KID_HORSE_LAND2);
@ -1511,7 +1516,7 @@ void EnHorse_StartBraking(EnHorse* this, PlayState* play) {
if (sAnimationHeaders[this->type][this->animationIdx] == NULL) {
if (Rand_ZeroOne() > 0.5f) {
if (this->stateFlags & ENHORSE_DRAW) {
if (this->type == HORSE_2) {
if (this->type == HORSE_TYPE_2) {
Audio_PlaySfxAtPos(&this->unk_218, NA_SE_EV_KID_HORSE_NEIGH);
} else {
Audio_PlaySfxAtPos(&this->unk_218, NA_SE_EV_HORSE_NEIGH);
@ -1523,7 +1528,7 @@ void EnHorse_StartBraking(EnHorse* this, PlayState* play) {
EnHorse_StartMountedIdleResetAnim(this);
}
if (this->type == HORSE_2) {
if (this->type == HORSE_TYPE_2) {
Audio_PlaySfxAtPos(&this->actor.projectedPos, NA_SE_EV_HORSE_SLIP);
} else {
Audio_PlaySfxAtPos(&this->actor.projectedPos, NA_SE_EV_HORSE_SLIP);
@ -1548,7 +1553,7 @@ void EnHorse_Stopping(EnHorse* this, PlayState* play) {
if ((Rand_ZeroOne() > 0.5f) &&
((gSaveContext.save.entranceIndex != 0x6400) || !Cutscene_GetSceneSetupIndex(play))) {
if (this->stateFlags & ENHORSE_DRAW) {
if (this->type == HORSE_2) {
if (this->type == HORSE_TYPE_2) {
Audio_PlaySfxAtPos(&this->unk_218, NA_SE_EV_KID_HORSE_NEIGH);
} else {
Audio_PlaySfxAtPos(&this->unk_218, NA_SE_EV_HORSE_NEIGH);
@ -1681,7 +1686,7 @@ void EnHorse_StartLowJump(EnHorse* this, PlayState* play) {
y = jointTable->y;
this->riderPos.y -= ((y * 0.01f) * this->unk_528) * 0.01f;
if (this->type == HORSE_2) {
if (this->type == HORSE_TYPE_2) {
Audio_PlaySfxAtPos(&this->actor.projectedPos, NA_SE_EV_HORSE_JUMP);
} else {
Audio_PlaySfxAtPos(&this->actor.projectedPos, NA_SE_EV_HORSE_JUMP);
@ -1740,7 +1745,7 @@ void EnHorse_LowJump(EnHorse* this, PlayState* play) {
if (SkelAnime_Update(&this->skin.skelAnime) ||
((curFrame > 17.0f) &&
(this->actor.world.pos.y < ((this->actor.floorHeight - this->actor.velocity.y) + 80.0f)))) {
if (this->type == HORSE_2) {
if (this->type == HORSE_TYPE_2) {
Audio_PlaySfxAtPos(&this->actor.projectedPos, NA_SE_EV_HORSE_LAND);
} else {
Audio_PlaySfxAtPos(&this->actor.projectedPos, NA_SE_EV_HORSE_LAND);
@ -1779,7 +1784,7 @@ void EnHorse_StartHighJump(EnHorse* this, PlayState* play) {
this->riderPos.y -= ((y * 0.01f) * this->unk_528) * 0.01f;
this->stateFlags |= ENHORSE_CALC_RIDER_POS;
if (this->type == HORSE_2) {
if (this->type == HORSE_TYPE_2) {
Audio_PlaySfxAtPos(&this->actor.projectedPos, NA_SE_EV_HORSE_JUMP);
} else {
Audio_PlaySfxAtPos(&this->actor.projectedPos, NA_SE_EV_HORSE_JUMP);
@ -1837,7 +1842,7 @@ void EnHorse_HighJump(EnHorse* this, PlayState* play) {
if (SkelAnime_Update(&this->skin.skelAnime) ||
((curFrame > 23.0f) &&
(this->actor.world.pos.y < ((this->actor.floorHeight - this->actor.velocity.y) + 80.0f)))) {
if (this->type == HORSE_2) {
if (this->type == HORSE_TYPE_2) {
Audio_PlaySfxAtPos(&this->actor.projectedPos, NA_SE_EV_HORSE_LAND);
} else {
Audio_PlaySfxAtPos(&this->actor.projectedPos, NA_SE_EV_HORSE_LAND);
@ -1862,10 +1867,10 @@ void EnHorse_InitInactive(EnHorse* this) {
}
void EnHorse_Inactive(EnHorse* this, PlayState* play) {
if ((D_801BDAA4 != 0) && (this->type == HORSE_2)) {
if ((D_801BDAA4 != 0) && (this->type == HORSE_TYPE_2)) {
D_801BDAA4 = 0;
if (EnHorse_Spawn(this, play)) {
if (this->type == HORSE_2) {
if (this->type == HORSE_TYPE_2) {
Audio_PlaySfxAtPos(&this->actor.projectedPos, NA_SE_EV_KID_HORSE_NEIGH);
}
this->stateFlags &= ~ENHORSE_INACTIVE;
@ -1901,7 +1906,7 @@ void EnHorse_PlayIdleAnimation(EnHorse* this, s32 anim, f32 morphFrames, f32 sta
} else {
if (this->animationIdx == ENHORSE_ANIM_WHINNEY) {
if (this->stateFlags & ENHORSE_DRAW) {
if (this->type == HORSE_2) {
if (this->type == HORSE_TYPE_2) {
Audio_PlaySfxAtPos(&this->unk_218, NA_SE_EV_KID_HORSE_GROAN);
} else {
Audio_PlaySfxAtPos(&this->unk_218, NA_SE_EV_HORSE_GROAN);
@ -1909,7 +1914,7 @@ void EnHorse_PlayIdleAnimation(EnHorse* this, s32 anim, f32 morphFrames, f32 sta
}
} else if (this->animationIdx == ENHORSE_ANIM_REARING) {
if (this->stateFlags & ENHORSE_DRAW) {
if (this->type == HORSE_2) {
if (this->type == HORSE_TYPE_2) {
Audio_PlaySfxAtPos(&this->unk_218, NA_SE_EV_KID_HORSE_NEIGH);
} else {
Audio_PlaySfxAtPos(&this->unk_218, NA_SE_EV_HORSE_NEIGH);
@ -1942,11 +1947,11 @@ void EnHorse_Idle(EnHorse* this, PlayState* play) {
this->actor.speedXZ = 0.0f;
EnHorse_IdleAnimSounds(this, play);
if ((D_801BDAA4 != 0) && (this->type == HORSE_2)) {
if ((D_801BDAA4 != 0) && (this->type == HORSE_TYPE_2)) {
D_801BDAA4 = 0;
if (!func_8087C38C(play, this, &this->actor.world.pos)) {
if (EnHorse_Spawn(this, play)) {
if (this->type == HORSE_2) {
if (this->type == HORSE_TYPE_2) {
Audio_PlaySfxAtPos(&this->actor.projectedPos, NA_SE_EV_KID_HORSE_NEIGH);
} else {
Audio_PlaySfxAtPos(&this->actor.projectedPos, NA_SE_EV_HORSE_NEIGH);
@ -1955,7 +1960,7 @@ void EnHorse_Idle(EnHorse* this, PlayState* play) {
EnHorse_SetFollowAnimation(this, play);
}
} else {
if (this->type == HORSE_2) {
if (this->type == HORSE_TYPE_2) {
Audio_PlaySfxAtPos(&this->actor.projectedPos, NA_SE_EV_KID_HORSE_NEIGH);
} else {
Audio_PlaySfxAtPos(&this->actor.projectedPos, NA_SE_EV_HORSE_NEIGH);
@ -2067,7 +2072,7 @@ void EnHorse_FollowPlayer(EnHorse* this, PlayState* play) {
this->actor.shape.rot.y = this->actor.world.rot.y;
if ((this->curFrame > 25.0f) && !(this->stateFlags & ENHORSE_LAND2_SOUND)) {
this->stateFlags |= ENHORSE_LAND2_SOUND;
if (this->type == HORSE_2) {
if (this->type == HORSE_TYPE_2) {
Audio_PlaySfxAtPos(&this->actor.projectedPos, NA_SE_EV_KID_HORSE_LAND2);
} else {
Audio_PlaySfxAtPos(&this->actor.projectedPos, NA_SE_EV_KID_HORSE_LAND2);
@ -2099,7 +2104,7 @@ void EnHorse_FollowPlayer(EnHorse* this, PlayState* play) {
if (this->followTimer > 300) {
EnHorse_StartIdleRidable(this);
if (this->stateFlags & ENHORSE_DRAW) {
if (this->type == HORSE_2) {
if (this->type == HORSE_TYPE_2) {
Audio_PlaySfxAtPos(&this->unk_218, NA_SE_EV_KID_HORSE_NEIGH);
} else {
Audio_PlaySfxAtPos(&this->unk_218, NA_SE_EV_HORSE_NEIGH);
@ -2179,14 +2184,14 @@ void EnHorse_UpdateIngoHorseAnim(EnHorse* this) {
animSpeed = this->actor.speedXZ * 0.5f;
} else if (this->animationIdx == ENHORSE_ANIM_TROT) {
animSpeed = this->actor.speedXZ * 0.25f;
if (this->type == HORSE_2) {
if (this->type == HORSE_TYPE_2) {
Audio_PlaySfxAtPos(&this->actor.projectedPos, NA_SE_EV_KID_HORSE_RUN);
} else {
Audio_PlaySfxAtPos(&this->actor.projectedPos, NA_SE_EV_HORSE_RUN);
}
} else if (this->animationIdx == ENHORSE_ANIM_GALLOP) {
animSpeed = this->actor.speedXZ * 0.2f;
if (this->type == HORSE_2) {
if (this->type == HORSE_TYPE_2) {
Audio_PlaySfxAtPos(&this->actor.projectedPos, NA_SE_EV_KID_HORSE_RUN);
} else {
Audio_PlaySfxAtPos(&this->actor.projectedPos, NA_SE_EV_HORSE_RUN);
@ -2259,7 +2264,7 @@ void func_80881290(EnHorse* this, PlayState* play) {
this->actor.gravity = 0.0f;
this->actor.velocity.y = 0.0f;
this->jumpStartY = this->actor.world.pos.y;
if (this->type == HORSE_2) {
if (this->type == HORSE_TYPE_2) {
Audio_PlaySfxAtPos(&this->actor.projectedPos, NA_SE_EV_HORSE_JUMP);
} else {
Audio_PlaySfxAtPos(&this->actor.projectedPos, NA_SE_EV_HORSE_JUMP);
@ -2299,7 +2304,7 @@ void func_80881398(EnHorse* this, PlayState* play) {
if (animeUpdated || ((curFrame > 17.0f) &&
(this->actor.world.pos.y < ((this->actor.floorHeight - this->actor.velocity.y) + 80.0f)))) {
if (this->type == HORSE_2) {
if (this->type == HORSE_TYPE_2) {
Audio_PlaySfxAtPos(&this->actor.projectedPos, NA_SE_EV_HORSE_LAND);
} else {
Audio_PlaySfxAtPos(&this->actor.projectedPos, NA_SE_EV_HORSE_LAND);
@ -2371,14 +2376,14 @@ void func_8088168C(EnHorse* this) {
animSpeed = this->actor.speedXZ * 0.5f;
} else if (this->animationIdx == ENHORSE_ANIM_TROT) {
animSpeed = this->actor.speedXZ * 0.25f;
if (this->type == HORSE_2) {
if (this->type == HORSE_TYPE_2) {
Audio_PlaySfxAtPos(&this->actor.projectedPos, NA_SE_EV_KID_HORSE_RUN);
} else {
Audio_PlaySfxAtPos(&this->actor.projectedPos, NA_SE_EV_HORSE_RUN);
}
} else if (this->animationIdx == ENHORSE_ANIM_GALLOP) {
animSpeed = this->actor.speedXZ * 0.2f;
if (this->type == HORSE_2) {
if (this->type == HORSE_TYPE_2) {
Audio_PlaySfxAtPos(&this->actor.projectedPos, NA_SE_EV_KID_HORSE_RUN);
} else {
Audio_PlaySfxAtPos(&this->actor.projectedPos, NA_SE_EV_HORSE_RUN);
@ -2516,7 +2521,7 @@ void EnHorse_CsPlayHighJumpAnim(EnHorse* this, PlayState* play) {
this->riderPos.y -= y * 0.01f * this->unk_528 * 0.01f;
this->stateFlags |= ENHORSE_ANIM_HIGH_JUMP;
if (this->type == HORSE_2) {
if (this->type == HORSE_TYPE_2) {
Audio_PlaySfxAtPos(&this->actor.projectedPos, NA_SE_EV_HORSE_JUMP);
} else {
Audio_PlaySfxAtPos(&this->actor.projectedPos, NA_SE_EV_HORSE_JUMP);
@ -2566,7 +2571,7 @@ void EnHorse_CsJump(EnHorse* this, PlayState* play, CsCmdActorAction* action) {
((curFrame > 19.0f) &&
(this->actor.world.pos.y < ((this->actor.floorHeight - this->actor.velocity.y) + 80.0f)))) {
this->cutsceneFlags |= 1;
if (this->type == HORSE_2) {
if (this->type == HORSE_TYPE_2) {
Audio_PlaySfxAtPos(&this->actor.projectedPos, NA_SE_EV_HORSE_LAND);
} else {
Audio_PlaySfxAtPos(&this->actor.projectedPos, NA_SE_EV_HORSE_LAND);
@ -2595,7 +2600,7 @@ void EnHorse_CsRearingInit(EnHorse* this, PlayState* play, CsCmdActorAction* act
this->cutsceneFlags &= ~4;
this->stateFlags &= ~ENHORSE_LAND2_SOUND;
if (this->stateFlags & ENHORSE_DRAW) {
if (this->type == HORSE_2) {
if (this->type == HORSE_TYPE_2) {
Audio_PlaySfxAtPos(&this->unk_218, NA_SE_EV_KID_HORSE_NEIGH);
} else {
Audio_PlaySfxAtPos(&this->unk_218, NA_SE_EV_HORSE_NEIGH);
@ -2610,7 +2615,7 @@ void EnHorse_CsRearing(EnHorse* this, PlayState* play, CsCmdActorAction* action)
if (this->curFrame > 25.0f) {
if (!(this->stateFlags & ENHORSE_LAND2_SOUND)) {
this->stateFlags |= ENHORSE_LAND2_SOUND;
if (this->type == HORSE_2) {
if (this->type == HORSE_TYPE_2) {
Audio_PlaySfxAtPos(&this->actor.projectedPos, NA_SE_EV_KID_HORSE_LAND2);
} else {
Audio_PlaySfxAtPos(&this->actor.projectedPos, NA_SE_EV_KID_HORSE_LAND2);
@ -2688,7 +2693,7 @@ void EnHorse_CsWarpRearingInit(EnHorse* this, PlayState* play, CsCmdActorAction*
this->stateFlags &= ~ENHORSE_LAND2_SOUND;
if (this->stateFlags & ENHORSE_DRAW) {
if (this->type == HORSE_2) {
if (this->type == HORSE_TYPE_2) {
Audio_PlaySfxAtPos(&this->unk_218, NA_SE_EV_KID_HORSE_NEIGH);
} else {
Audio_PlaySfxAtPos(&this->unk_218, NA_SE_EV_HORSE_NEIGH);
@ -2703,7 +2708,7 @@ void EnHorse_CsWarpRearing(EnHorse* this, PlayState* play, CsCmdActorAction* act
if (this->curFrame > 25.0f) {
if (!(this->stateFlags & ENHORSE_LAND2_SOUND)) {
this->stateFlags |= ENHORSE_LAND2_SOUND;
if (this->type == HORSE_2) {
if (this->type == HORSE_TYPE_2) {
Audio_PlaySfxAtPos(&this->actor.projectedPos, NA_SE_EV_KID_HORSE_LAND2);
} else {
Audio_PlaySfxAtPos(&this->actor.projectedPos, NA_SE_EV_KID_HORSE_LAND2);
@ -2860,7 +2865,7 @@ void EnHorse_UpdateHbaAnim(EnHorse* this) {
animSpeed = this->actor.speedXZ * 0.5f;
} else if (this->animationIdx == ENHORSE_ANIM_TROT) {
animSpeed = this->actor.speedXZ * 0.25f;
if (this->type == HORSE_2) {
if (this->type == HORSE_TYPE_2) {
Audio_PlaySfxAtPos(&this->actor.projectedPos, NA_SE_EV_KID_HORSE_RUN);
} else {
Audio_PlaySfxAtPos(&this->actor.projectedPos, NA_SE_EV_HORSE_RUN);
@ -2868,7 +2873,7 @@ void EnHorse_UpdateHbaAnim(EnHorse* this) {
Rumble_Request(0.0f, 60, 8, 255);
} else if (this->animationIdx == ENHORSE_ANIM_GALLOP) {
animSpeed = this->actor.speedXZ * 0.2f;
if (this->type == HORSE_2) {
if (this->type == HORSE_TYPE_2) {
Audio_PlaySfxAtPos(&this->actor.projectedPos, NA_SE_EV_KID_HORSE_RUN);
} else {
Audio_PlaySfxAtPos(&this->actor.projectedPos, NA_SE_EV_HORSE_RUN);
@ -2952,9 +2957,9 @@ void EnHorse_FleePlayer(EnHorse* this, PlayState* play) {
s32 animFinished;
s16 yaw;
if ((D_801BDAA4 != 0) || (this->type == HORSE_HNI)) {
if ((D_801BDAA4 != 0) || (this->type == HORSE_TYPE_HNI)) {
EnHorse_StartIdleRidable(this);
if (this->type == HORSE_2) {
if (this->type == HORSE_TYPE_2) {
Audio_PlaySfxAtPos(&this->actor.projectedPos, NA_SE_EV_KID_HORSE_NEIGH);
} else {
Audio_PlaySfxAtPos(&this->actor.projectedPos, NA_SE_EV_HORSE_NEIGH);
@ -3059,7 +3064,7 @@ void EnHorse_FleePlayer(EnHorse* this, PlayState* play) {
} else {
this->animationIdx = ENHORSE_ANIM_WHINNEY;
if (this->stateFlags & ENHORSE_DRAW) {
if (this->type == HORSE_2) {
if (this->type == HORSE_TYPE_2) {
Audio_PlaySfxAtPos(&this->unk_218, NA_SE_EV_KID_HORSE_GROAN);
} else {
Audio_PlaySfxAtPos(&this->unk_218, NA_SE_EV_HORSE_GROAN);
@ -3331,12 +3336,12 @@ void func_80884994(EnHorse* this) {
}
void func_80884A40(EnHorse* this, PlayState* play) {
s32 sp44[] = { 5, 6, 0 };
s32 sp44[] = { ENHORSE_ANIM_TROT, ENHORSE_ANIM_GALLOP, ENHORSE_ANIM_IDLE };
s32 sp40;
s32 temp_v0;
if (this->animationIdx == ENHORSE_ANIM_WHINNEY) {
temp_v0 = 0;
temp_v0 = ENHORSE_ANIM_IDLE;
} else {
temp_v0 = this->animationIdx;
}
@ -3366,9 +3371,9 @@ void func_80884A40(EnHorse* this, PlayState* play) {
0.0f);
}
if ((this->unk_538 == 0) || (this->unk_538 == 1)) {
if ((this->unk_538 == OBJ_UM_ANIM_TROT) || (this->unk_538 == OBJ_UM_ANIM_GALLOP)) {
Actor_PlaySfxAtPos(&this->actor, NA_SE_EV_HORSE_RUN);
} else if (this->unk_538 == 2) {
} else if (this->unk_538 == OBJ_UM_ANIM_IDLE) {
if (this->animationIdx == ENHORSE_ANIM_IDLE) {
EnHorse_IdleAnimSounds(this, play);
} else if (this->animationIdx == ENHORSE_ANIM_WHINNEY) {
@ -3392,6 +3397,7 @@ void func_80884D04(EnHorse* this, PlayState* play) {
Animation_GetLastFrame(sAnimationHeaders[this->type][this->animationIdx]), ANIMMODE_ONCE, 0.0f);
}
// Action func: EnHorse_UpdateBandit?
void func_80884E0C(EnHorse* this, PlayState* play) {
f32 playSpeed = (this->unk_56C * 0.2f * 0.5f) + 1.0f;
Vec3f pos;
@ -3408,8 +3414,8 @@ void func_80884E0C(EnHorse* this, PlayState* play) {
}
this->unk_57C = this->actor.world.pos;
this->actor.world.pos.x = this->unk_570.x;
this->actor.world.pos.z = this->unk_570.z;
this->actor.world.pos.x = this->banditPosition.x;
this->actor.world.pos.z = this->banditPosition.z;
this->unk_56C = Math3D_Distance(&this->actor.world.pos, &this->actor.prevPos);
if (((this->unk_550 == 5) || (this->unk_550 == 7)) && (Player_GetMask(play) != PLAYER_MASK_CIRCUS_LEADER)) {
@ -3429,7 +3435,7 @@ void func_80884E0C(EnHorse* this, PlayState* play) {
}
this->actor.world.pos.y += this->actor.velocity.y * 0.5f;
} else {
this->actor.world.pos.y = this->unk_570.y;
this->actor.world.pos.y = this->banditPosition.y;
}
}
@ -3536,7 +3542,7 @@ void EnHorse_CheckFloors(EnHorse* this, PlayState* play) {
return;
}
if (this->type != HORSE_2) {
if (this->type != HORSE_TYPE_2) {
EnHorse_Vec3fOffset(&this->actor.world.pos, this->actor.shape.rot.y, 30.0f, 55.0f, &frontPos);
} else {
EnHorse_Vec3fOffset(&this->actor.world.pos, this->actor.shape.rot.y, 15.0f, 30.0f, &frontPos);
@ -3555,7 +3561,7 @@ void EnHorse_CheckFloors(EnHorse* this, PlayState* play) {
return;
}
if (this->type != HORSE_2) {
if (this->type != HORSE_TYPE_2) {
EnHorse_Vec3fOffset(&this->actor.world.pos, this->actor.shape.rot.y, -30.0f, 55.0f, &backPos);
} else {
EnHorse_Vec3fOffset(&this->actor.world.pos, this->actor.shape.rot.y, -15.0f, 30.0f, &backPos);
@ -3732,7 +3738,7 @@ void EnHorse_UpdateBgCheckInfo(EnHorse* this, PlayState* play) {
if ((this->actor.bgCheckFlags & 8) && (Math_CosS(this->actor.wallYaw - this->actor.world.rot.y) < -0.3f)) {
if (this->actor.speedXZ > 4.0f) {
this->actor.speedXZ -= 1.0f;
if (this->type == HORSE_2) {
if (this->type == HORSE_TYPE_2) {
Audio_PlaySfxAtPos(&this->actor.projectedPos, NA_SE_EV_KID_HORSE_SANDDUST);
} else {
Audio_PlaySfxAtPos(&this->actor.projectedPos, NA_SE_EV_KID_HORSE_SANDDUST);
@ -3749,7 +3755,7 @@ void EnHorse_UpdateBgCheckInfo(EnHorse* this, PlayState* play) {
this->unk_3E8 += ((-10.0f / this->actor.scale.y) - this->unk_3E8) * 0.5f;
if (this->actor.speedXZ > 2.0f) {
this->actor.speedXZ -= 1.0f;
if (this->type == HORSE_2) {
if (this->type == HORSE_TYPE_2) {
Audio_PlaySfxAtPos(&this->actor.projectedPos, NA_SE_EV_KID_HORSE_SANDDUST);
} else {
Audio_PlaySfxAtPos(&this->actor.projectedPos, NA_SE_EV_KID_HORSE_SANDDUST);
@ -3990,7 +3996,7 @@ void func_80886C00(EnHorse* this, PlayState* play) {
this->boostTimer = 0;
if (this->numBoosts == 0) {
this->boostRegenTime = 140;
} else if (this->type == HORSE_EPONA) {
} else if (this->type == HORSE_TYPE_EPONA) {
if (this->stateFlags & ENHORSE_FIRST_BOOST_REGEN) {
this->boostRegenTime = 60;
this->stateFlags &= ~ENHORSE_FIRST_BOOST_REGEN;
@ -4001,7 +4007,7 @@ void func_80886C00(EnHorse* this, PlayState* play) {
this->boostRegenTime = 70;
}
} else if ((this->stateFlags & ENHORSE_DRAW) && (Rand_ZeroOne() < 0.1f)) {
if (this->type == HORSE_2) {
if (this->type == HORSE_TYPE_2) {
Audio_PlaySfxAtPos(&this->unk_218, NA_SE_EV_KID_HORSE_NEIGH);
} else {
Audio_PlaySfxAtPos(&this->unk_218, NA_SE_EV_HORSE_NEIGH);
@ -4056,7 +4062,7 @@ void EnHorse_RegenBoost(EnHorse* this, PlayState* play) {
if (this->boostTimer == 8) {
if ((Rand_ZeroOne() < 0.25f) && (this->stateFlags & ENHORSE_DRAW)) {
if (this->type == HORSE_2) {
if (this->type == HORSE_TYPE_2) {
Audio_PlaySfxAtPos(&this->unk_218, NA_SE_EV_KID_HORSE_NEIGH);
} else {
Audio_PlaySfxAtPos(&this->unk_218, NA_SE_EV_HORSE_NEIGH);
@ -4175,9 +4181,9 @@ void EnHorse_Update(Actor* thisx, PlayState* play2) {
Vec3f dustVel = { 0.0f, 1.0f, 0.0f };
Player* player = GET_PLAYER(play);
if (this->type == HORSE_2) {
if (this->type == HORSE_TYPE_2) {
Actor_SetScale(&this->actor, 0.00648f);
} else if (this->type == HORSE_4) {
} else if (this->type == HORSE_TYPE_DONKEY) {
Actor_SetScale(&this->actor, 0.008f);
} else {
Actor_SetScale(&this->actor, 0.01f);
@ -4258,7 +4264,7 @@ void EnHorse_Update(Actor* thisx, PlayState* play2) {
}
if ((this->colliderJntSph.base.acFlags & AC_HIT) && (this->stateFlags & ENHORSE_DRAW)) {
if (this->type == HORSE_2) {
if (this->type == HORSE_TYPE_2) {
Audio_PlaySfxAtPos(&this->unk_218, NA_SE_EV_KID_HORSE_NEIGH);
} else {
Audio_PlaySfxAtPos(&this->unk_218, NA_SE_EV_HORSE_NEIGH);
@ -4290,7 +4296,7 @@ void EnHorse_Update(Actor* thisx, PlayState* play2) {
Collider_UpdateCylinder(&this->actor, &this->colliderCylinder1);
Collider_UpdateCylinder(&this->actor, &this->colliderCylinder2);
if (this->type == HORSE_2) {
if (this->type == HORSE_TYPE_2) {
this->colliderCylinder1.dim.pos.x =
(s16)(Math_SinS(thisx->shape.rot.y) * 11.0f) + this->colliderCylinder1.dim.pos.x;
this->colliderCylinder1.dim.pos.z =
@ -4456,7 +4462,7 @@ void EnHorse_PostDraw(Actor* thisx, PlayState* play, Skin* skin) {
f32 sp34;
if (!(this->stateFlags & ENHORSE_CALC_RIDER_POS)) {
if (this->type == HORSE_2) {
if (this->type == HORSE_TYPE_2) {
Skin_GetVertexPos(skin, 5, 120, &this->riderPos);
this->riderPos.y += 13.0f;
} else {
@ -4471,7 +4477,7 @@ void EnHorse_PostDraw(Actor* thisx, PlayState* play, Skin* skin) {
this->stateFlags &= ~ENHORSE_CALC_RIDER_POS;
}
if (this->type == HORSE_2) {
if (this->type == HORSE_TYPE_2) {
Skin_GetLimbPos(skin, 13, &sp7C, &sp38);
} else {
Skin_GetLimbPos(skin, 13, &sp7C, &sp38);
@ -4492,7 +4498,7 @@ void EnHorse_PostDraw(Actor* thisx, PlayState* play, Skin* skin) {
if (((curFrame > 10.0f) && (curFrame < 13.0f)) || ((curFrame > 25.0f) && (curFrame < 33.0f))) {
if (Rand_ZeroOne() < 0.02f) {
this->dustFlags |= 2;
if (this->type == HORSE_2) {
if (this->type == HORSE_TYPE_2) {
Skin_GetLimbPos(skin, 20, &hoofOffset, &sp64);
} else {
Skin_GetLimbPos(skin, 20, &hoofOffset, &sp64);
@ -4502,7 +4508,7 @@ void EnHorse_PostDraw(Actor* thisx, PlayState* play, Skin* skin) {
if (Rand_ZeroOne() < 0.02f) {
this->dustFlags |= 1;
if (this->type == HORSE_2) {
if (this->type == HORSE_TYPE_2) {
Skin_GetLimbPos(skin, 28, &hoofOffset, &sp64);
} else {
Skin_GetLimbPos(skin, 28, &hoofOffset, &sp64);
@ -4514,7 +4520,7 @@ void EnHorse_PostDraw(Actor* thisx, PlayState* play, Skin* skin) {
if (((curFrame > 6.0f) && (curFrame < 10.0f)) || ((curFrame > 23.0f) && (curFrame < 29.0f))) {
if (Rand_ZeroOne() < 0.02f) {
this->dustFlags |= 8;
if (this->type == HORSE_2) {
if (this->type == HORSE_TYPE_2) {
Skin_GetLimbPos(skin, 36, &hoofOffset, &sp64);
} else {
Skin_GetLimbPos(skin, 37, &hoofOffset, &sp64);
@ -4526,7 +4532,7 @@ void EnHorse_PostDraw(Actor* thisx, PlayState* play, Skin* skin) {
if ((((curFrame > 7.0f) && (curFrame < 14.0f)) || ((curFrame > 26.0f) && (curFrame < 30.0f))) &&
(Rand_ZeroOne() < 0.02f)) {
this->dustFlags |= 4;
if (this->type == HORSE_2) {
if (this->type == HORSE_TYPE_2) {
Skin_GetLimbPos(skin, 44, &hoofOffset, &sp64);
} else {
Skin_GetLimbPos(skin, 45, &hoofOffset, &sp64);
@ -4536,7 +4542,7 @@ void EnHorse_PostDraw(Actor* thisx, PlayState* play, Skin* skin) {
} else if (this->animationIdx == ENHORSE_ANIM_GALLOP) {
if ((curFrame > 14.0f) && (curFrame < 16.0f) && (Rand_ZeroOne() < 0.02f)) {
this->dustFlags |= 1;
if (this->type == HORSE_2) {
if (this->type == HORSE_TYPE_2) {
Skin_GetLimbPos(skin, 28, &hoofOffset, &sp64);
} else {
Skin_GetLimbPos(skin, 28, &hoofOffset, &sp64);
@ -4544,7 +4550,7 @@ void EnHorse_PostDraw(Actor* thisx, PlayState* play, Skin* skin) {
EnHorse_RandomOffset(&sp64, 5.0f, &this->frontRightHoof);
} else if ((curFrame > 8.0f) && (curFrame < 10.0f) && (Rand_ZeroOne() < 0.02f)) {
this->dustFlags |= 2;
if (this->type == HORSE_2) {
if (this->type == HORSE_TYPE_2) {
Skin_GetLimbPos(skin, 20, &hoofOffset, &sp64);
} else {
Skin_GetLimbPos(skin, 20, &hoofOffset, &sp64);
@ -4552,7 +4558,7 @@ void EnHorse_PostDraw(Actor* thisx, PlayState* play, Skin* skin) {
EnHorse_RandomOffset(&sp64, 10.0f, &this->frontLeftHoof);
} else if ((curFrame > 1.0f) && (curFrame < 3.0f) && (Rand_ZeroOne() < 0.02f)) {
this->dustFlags |= 4;
if (this->type == HORSE_2) {
if (this->type == HORSE_TYPE_2) {
Skin_GetLimbPos(skin, 44, &hoofOffset, &sp64);
} else {
Skin_GetLimbPos(skin, 45, &hoofOffset, &sp64);
@ -4560,7 +4566,7 @@ void EnHorse_PostDraw(Actor* thisx, PlayState* play, Skin* skin) {
EnHorse_RandomOffset(&sp64, 10.0f, &this->backRightHoof);
} else if ((curFrame > 26.0f) && (curFrame < 28.0f) && (Rand_ZeroOne() < 0.02f)) {
this->dustFlags |= 8;
if (this->type == HORSE_2) {
if (this->type == HORSE_TYPE_2) {
Skin_GetLimbPos(skin, 36, &hoofOffset, &sp64);
} else {
Skin_GetLimbPos(skin, 37, &hoofOffset, &sp64);
@ -4571,7 +4577,7 @@ void EnHorse_PostDraw(Actor* thisx, PlayState* play, Skin* skin) {
(Rand_ZeroOne() < (1.0f - ((curFrame - 6.0f) * (1.0f / 17.0f))))) {
if (Rand_ZeroOne() < 0.05f) {
this->dustFlags |= 8;
if (this->type == HORSE_2) {
if (this->type == HORSE_TYPE_2) {
Skin_GetLimbPos(skin, 36, &hoofOffset, &sp64);
} else {
Skin_GetLimbPos(skin, 37, &hoofOffset, &sp64);
@ -4580,7 +4586,7 @@ void EnHorse_PostDraw(Actor* thisx, PlayState* play, Skin* skin) {
}
if (Rand_ZeroOne() < 0.02f) {
this->dustFlags |= 4;
if (this->type == HORSE_2) {
if (this->type == HORSE_TYPE_2) {
Skin_GetLimbPos(skin, 44, &hoofOffset, &sp64);
} else {
Skin_GetLimbPos(skin, 45, &hoofOffset, &sp64);
@ -4591,7 +4597,7 @@ void EnHorse_PostDraw(Actor* thisx, PlayState* play, Skin* skin) {
if (Rand_ZeroOne() < (1.0f - ((curFrame - 5.0f) * 0.04f))) {
if (Rand_ZeroOne() < 0.05f) {
this->dustFlags |= 8;
if (this->type == HORSE_2) {
if (this->type == HORSE_TYPE_2) {
Skin_GetLimbPos(skin, 36, &hoofOffset, &sp64);
} else {
Skin_GetLimbPos(skin, 37, &hoofOffset, &sp64);
@ -4601,7 +4607,7 @@ void EnHorse_PostDraw(Actor* thisx, PlayState* play, Skin* skin) {
if (Rand_ZeroOne() < 0.02f) {
this->dustFlags |= 4;
if (this->type == HORSE_2) {
if (this->type == HORSE_TYPE_2) {
Skin_GetLimbPos(skin, 44, &hoofOffset, &sp64);
} else {
Skin_GetLimbPos(skin, 45, &hoofOffset, &sp64);
@ -4649,12 +4655,12 @@ s32 EnHorse_OverrideLimbDraw(Actor* thisx, PlayState* play, s32 limbIndex, Skin*
OPEN_DISPS(play->state.gfxCtx);
if ((limbIndex != 13) || (this->type != HORSE_EPONA)) {
if ((limbIndex == 13) && (this->type == HORSE_2)) {
if ((limbIndex != 13) || (this->type != HORSE_TYPE_EPONA)) {
if ((limbIndex == 13) && (this->type == HORSE_TYPE_2)) {
u8 idx = D_80889210[this->blinkTimer];
gSPSegment(POLY_OPA_DISP++, 0x08, Lib_SegmentedToVirtual(D_80889204[idx]));
} else if ((this->type == HORSE_HNI) && (this->stateFlags & ENHORSE_FLAG_18) && (limbIndex == 30)) {
} else if ((this->type == HORSE_TYPE_HNI) && (this->stateFlags & ENHORSE_FLAG_18) && (limbIndex == 30)) {
drawOriginalLimb = false;
}
}

View File

@ -3,11 +3,11 @@
#include "global.h"
#include "z64skin.h"
#include "overlays/actors/ovl_En_In/z_en_in.h"
#include "objects/gameplay_keep/gameplay_keep.h"
#include "objects/object_ha/object_ha.h"
struct EnHorse;
struct EnIn;
typedef void (*EnHorseActionFunc)(struct EnHorse*, PlayState*);
typedef void (*EnHorsePostdrawFunc)(struct EnHorse*, PlayState*);
@ -97,18 +97,22 @@ typedef enum {
} EnHorseAnimationIndex;
typedef enum {
/* 0 */ HORSE_EPONA,
/* 1 */ HORSE_HNI,
/* 2 */ HORSE_2,
/* 3 */ HORSE_3,
/* 4 */ HORSE_4
/* 0 */ HORSE_TYPE_EPONA,
/* 1 */ HORSE_TYPE_HNI,
/* 2 */ HORSE_TYPE_2,
/* 3 */ HORSE_TYPE_BANDIT,
/* 4 */ HORSE_TYPE_DONKEY // Cremia's donkey
} HorseType;
#define ENHORSE_GET_2000(thisx) ((thisx)->params & 0x2000)
#define ENHORSE_GET_4000(thisx) ((thisx)->params & 0x4000)
#define ENHORSE_GET_8000(thisx) ((thisx)->params & 0x8000)
#define ENHORSE_PARAM_BANDIT 0x2000
#define ENHORSE_PARAM_4000 0x4000
#define ENHORSE_PARAM_DONKEY 0x8000
enum {
#define ENHORSE_IS_BANDIT_TYPE(thisx) ((thisx)->params & ENHORSE_PARAM_BANDIT)
#define ENHORSE_IS_4000_TYPE(thisx) ((thisx)->params & ENHORSE_PARAM_4000)
#define ENHORSE_IS_DONKEY_TYPE(thisx) ((thisx)->params & ENHORSE_PARAM_DONKEY)
typedef enum {
/* 0 */ ENHORSE_0,
/* 1 */ ENHORSE_1,
/* 2 */ ENHORSE_2,
@ -130,7 +134,13 @@ enum {
/* 18 */ ENHORSE_18,
/* 19 */ ENHORSE_19,
/* 20 */ ENHORSE_20,
};
} EnHorseParam;
/**
* `paramtype` should be `ENHORSE_PARAM_BANDIT`, `ENHORSE_PARAM_4000` or `ENHORSE_PARAM_DONKEY`
* `lower` should be a value of the enum `EnHorseParam`
*/
#define ENHORSE_PARAMS(type, lower) ((type) | (lower))
typedef struct EnHorse {
/* 0x000 */ Actor actor;
@ -180,7 +190,7 @@ typedef struct EnHorse {
/* 0x384 */ u16 cutsceneFlags;
/* 0x388 */ s32 inRace;
/* 0x38C */ struct EnIn* rider;
/* 0x390 */ UNK_TYPE1 unk390[0x4];
/* 0x390 */ UNK_TYPE1 unk_390[0x4];
/* 0x394 */ u16 unk_394;
/* 0x398 */ f32 unk_398;
/* 0x39C */ s32 unk_39C;
@ -193,7 +203,7 @@ typedef struct EnHorse {
/* 0x3C8 */ Vec3f backRightHoof;
/* 0x3D4 */ Vec3f backLeftHoof;
/* 0x3E0 */ s32 unk_3E0;
/* 0x3E4 */ UNK_TYPE1 unk3E4[0x4];
/* 0x3E4 */ UNK_TYPE1 unk_3E4[0x4];
/* 0x3E8 */ f32 unk_3E8;
/* 0x3EC */ s16 unk_3EC;
/* 0x3EE */ Vec3s jointTable[OBJECT_HA_1_LIMB_MAX];
@ -205,13 +215,19 @@ typedef struct EnHorse {
/* 0x538 */ s32 unk_538;
/* 0x53C */ s32 unk_53C;
/* 0x540 */ Vec3f unk_540;
/* 0x54C */ UNK_TYPE1 unk54C[0x4];
/* 0x54C */ UNK_TYPE unk_54C;
/* 0x550 */ s32 unk_550;
/* 0x554 */ UNK_TYPE1 unk554[0x18];
/* 0x554 */ UNK_TYPE unk_554;
/* 0x558 */ UNK_TYPE unk_558;
/* 0x55C */ s32 unk_55C; // maybe currentDistanceToCart... it isn't really a distance tho
/* 0x560 */ s32 unk_560; // maybe initialDistanceToCart
/* 0x564 */ s32 unk_564; // set but not used
/* 0x568 */ f32 unk_568; // set but not used
/* 0x56C */ f32 unk_56C;
/* 0x570 */ Vec3f unk_570;
/* 0x570 */ Vec3f banditPosition; // Milk run minigame bandit
/* 0x57C */ Vec3f unk_57C;
/* 0x588 */ UNK_TYPE1 unk588[0x4];
/* 0x588 */ s16 unk_588;
/* 0x58A */ UNK_TYPE1 unk_58A[0x2]; // struct padding?
/* 0x58C */ s32 unk_58C;
/* 0x590 */ s32 unk_590;
} EnHorse; // size = 0x594

View File

@ -124,14 +124,14 @@ s32 func_808F8CCC(EnHorseGameCheck* this, PlayState* play2) {
func_8010E9F0(4, 0);
play->interfaceCtx.unk_280 = 1;
this->horse1 =
(EnHorse*)Actor_Spawn(&play->actorCtx, play, ACTOR_EN_HORSE, -1149.0f, -106.0f, 470.0f, 0, 0x7FFF, 0, 0x2004);
this->horse1 = (EnHorse*)Actor_Spawn(&play->actorCtx, play, ACTOR_EN_HORSE, -1149.0f, -106.0f, 470.0f, 0, 0x7FFF, 0,
ENHORSE_PARAMS(ENHORSE_PARAM_BANDIT, ENHORSE_4));
if (this->horse1 == NULL) {
__assert("../z_en_horse_game_check.c", 1517);
}
this->horse2 =
(EnHorse*)Actor_Spawn(&play->actorCtx, play, ACTOR_EN_HORSE, -1376.0f, -106.0f, 470.0f, 0, 0x7FFF, 0, 0x2005);
this->horse2 = (EnHorse*)Actor_Spawn(&play->actorCtx, play, ACTOR_EN_HORSE, -1376.0f, -106.0f, 470.0f, 0, 0x7FFF, 0,
ENHORSE_PARAMS(ENHORSE_PARAM_BANDIT, ENHORSE_5));
if (this->horse2 == NULL) {
__assert("../z_en_horse_game_check.c", 1526);
}

View File

@ -404,7 +404,7 @@ void func_80A42AB8(EnTest4* this, PlayState* play) {
if (player->stateFlags1 & 0x800000) {
EnHorse* rideActor = (EnHorse*)player->rideActor;
if ((rideActor->type == HORSE_EPONA) || (rideActor->type == HORSE_2)) {
if ((rideActor->type == HORSE_TYPE_EPONA) || (rideActor->type == HORSE_TYPE_2)) {
if (CURRENT_DAY < 3) {
D_801BDA9C = 1;
} else {

File diff suppressed because it is too large Load Diff

View File

@ -2,18 +2,93 @@
#define Z_OBJ_UM_H
#include "global.h"
#include "objects/object_um/object_um.h"
#include "overlays/actors/ovl_En_Horse/z_en_horse.h"
struct ObjUm;
typedef void (*ObjUmActionFunc)(struct ObjUm*, PlayState*);
#define MILK_POTS_COUNT 3
typedef enum ObjUmAnimimations {
/* -1 */ OBJ_UM_ANIM_MINUS_1 = -1,
/* 0 */ OBJ_UM_ANIM_TROT,
/* 1 */ OBJ_UM_ANIM_GALLOP,
/* 2 */ OBJ_UM_ANIM_IDLE,
/* 3 */ OBJ_UM_ANIM_3, // NULL pointer
/* 4 */ OBJ_UM_ANIM_LOOK_BACK
} ObjUmAnimimations;
typedef struct ObjUm {
/* 0x000 */ Actor actor;
/* 0x144 */ char unk_144[0x18];
/* 0x000 */ DynaPolyActor dyna;
/* 0x15C */ ObjUmActionFunc actionFunc;
/* 0x160 */ char unk_160[0x384];
/* 0x160 */ SkelAnime skelAnime;
/* 0x1A4 */ Vec3s jointTable[UM_LIMB_MAX];
/* 0x228 */ Vec3s morphTable[UM_LIMB_MAX];
/* 0x2AC */ s16 wheelRot;
/* 0x2AE */ s16 type;
/* 0x2B0 */ s16 initialPathIndex;
/* 0x2B4 */ s32 unk_2B4;
/* 0x2B8 */ EnHorse* donkey;
/* 0x2BC */ s32 pathIndex;
/* 0x2BE */ s32 pointIndex;
/* 0x2C4 */ Vec3f unk_2C4;
/* 0x2D0 */ Vec3f unk_2D0;
/* 0x2DC */ Vec3f unk_2DC;
/* 0x2E8 */ Vec3f unk_2E8;
/* 0x2F4 */ s32 flags;
/* 0x2BC */ Vec3s unk_2F8;
/* 0x2FE */ Vec3s unk_2FE;
/* 0x304 */ ObjUmAnimimations currentAnimIndex;
/* 0x308 */ Vec3f unk_308;
/* 0x314 */ s32 potsLife[MILK_POTS_COUNT];
/* 0x320 */ s32 wasPotHit[MILK_POTS_COUNT]; // resets to false in the same frame
/* 0x32C */ Vec3f potPos[MILK_POTS_COUNT];
/* 0x350 */ s32 unk_350; // unused counter?
/* 0x354 */ s32 unk_354; // unused?
/* 0x358 */ EnHorse* bandit1;
/* 0x35C */ EnHorse* bandit2;
/* 0x360 */ Vec3f unk_360[16];
/* 0x420 */ s32 unk_420; // ?
/* 0x424 */ ColliderCylinder banditsCollisions[2];
/* 0x4BC */ Vec3f cartBedPos;
/* 0x4C8 */ u16 lastTime;
/* 0x4CC */ s32 unk_4CC;
/* 0x4D0 */ s32 eyeTexIndex;
/* 0x4D4 */ s32 mouthTexIndex;
/* 0x4D8 */ s32 unk_4D8;
/* 0x4DC */ s32 unk_4DC;
/* 0x4E0 */ s32 areAllPotsBroken; // true when all of the pots have been broken
} ObjUm; // size = 0x4E4
extern const ActorInit Obj_Um_InitVars;
typedef enum {
/* 0 */ OBJ_UM_TYPE_TERMINA_FIELD,
/* 1 */ OBJ_UM_TYPE_RANCH,
/* 2 */ OBJ_UM_TYPE_PRE_MILK_RUN, // milk road, pre-minigame
/* 3 */ OBJ_UM_TYPE_MILK_RUN_MINIGAME,
/* 4 */ OBJ_UM_TYPE_POST_MILK_RUN // milk road, post-minigame
} ObjUmType;
#define OBJ_UM_PARSE_TYPE(thisx) (((thisx)->params & 0xFF00) >> 8)
#define OBJ_UM_PARSE_PATH_INDEX(thisx) ((thisx)->params & 0xFF)
#define OBJ_UM_FLAG_NONE (0)
#define OBJ_UM_FLAG_0001 (1 << 0)
#define OBJ_UM_FLAG_MOVING (1 << 1)
#define OBJ_UM_FLAG_0004 (1 << 2)
#define OBJ_UM_FLAG_WAITING (1 << 3) // Waiting in the Ranch
#define OBJ_UM_FLAG_0010 (1 << 4)
#define OBJ_UM_FLAG_DRAWN_FLOOR (1 << 5)
#define OBJ_UM_FLAG_0040 (1 << 6)
#define OBJ_UM_FLAG_PLAYING_MINIGAME (1 << 7)
#define OBJ_UM_FLAG_0100 (1 << 8)
#define OBJ_UM_FLAG_0200 (1 << 9) // Something bandit1
#define OBJ_UM_FLAG_0400 (1 << 10) // Something bandit2
#define OBJ_UM_FLAG_LOOK_BACK (1 << 11)
#define OBJ_UM_FLAG_1000 (1 << 12)
#define OBJ_UM_FLAG_MINIGAME_FINISHED (1 << 13)
#endif // Z_OBJ_UM_H

View File

@ -14462,57 +14462,57 @@
0x80B77354:("EnTruMt_TransformLimbDraw",),
0x80B773D0:("EnTruMt_Draw",),
0x80B77770:("func_80B77770",),
0x80B77FA4:("func_80B77FA4",),
0x80B77FA4:("ObjUm_InitBandits",),
0x80B781DC:("func_80B781DC",),
0x80B783E0:("func_80B783E0",),
0x80B78764:("func_80B78764",),
0x80B78A54:("func_80B78A54",),
0x80B78C18:("func_80B78C18",),
0x80B78D08:("func_80B78D08",),
0x80B78D08:("ObjUm_UpdateBanditsCollisions",),
0x80B78DF0:("func_80B78DF0",),
0x80B78E2C:("ObjUm_SetupAction",),
0x80B78E38:("func_80B78E38",),
0x80B78E88:("func_80B78E88",),
0x80B78E38:("ObjUm_SetPlayerPosition",),
0x80B78E88:("ObjUm_RotatePlayer",),
0x80B78EBC:("func_80B78EBC",),
0x80B78EFC:("func_80B78EFC",),
0x80B78EFC:("ObjUm_RotatePlayerView",),
0x80B78F24:("ObjUm_Init",),
0x80B7949C:("ObjUm_Destroy",),
0x80B79524:("func_80B79524",),
0x80B79560:("func_80B79560",),
0x80B795A0:("func_80B795A0",),
0x80B79734:("func_80B79734",),
0x80B797EC:("func_80B797EC",),
0x80B797EC:("ObjUm_RanchGetDialogue",),
0x80B7984C:("func_80B7984C",),
0x80B79A24:("func_80B79A24",),
0x80B79A50:("func_80B79A50",),
0x80B79BA0:("func_80B79BA0",),
0x80B79F10:("func_80B79F10",),
0x80B79FFC:("func_80B79FFC",),
0x80B79A50:("ObjUm_RanchWait",),
0x80B79BA0:("ObjUm_UpdatePath",),
0x80B79F10:("ObjUm_RanchWaitPathFinished",),
0x80B79FFC:("ObjUm_RanchStartCs",),
0x80B7A070:("func_80B7A070",),
0x80B7A0E0:("func_80B7A0E0",),
0x80B7A144:("func_80B7A144",),
0x80B7A1B4:("func_80B7A1B4",),
0x80B7A1B4:("ObjUm_PreMilkRunDialogueHandler",),
0x80B7A240:("func_80B7A240",),
0x80B7A2AC:("func_80B7A2AC",),
0x80B7A394:("func_80B7A394",),
0x80B7A400:("func_80B7A400",),
0x80B7A494:("func_80B7A494",),
0x80B7A400:("ObjUm_PreMilkRunStartCs",),
0x80B7A494:("ObjUm_RunMinigame",),
0x80B7A614:("func_80B7A614",),
0x80B7A7AC:("func_80B7A7AC",),
0x80B7A860:("func_80B7A860",),
0x80B7AB78:("func_80B7AB78",),
0x80B7ABE4:("func_80B7ABE4",),
0x80B7AC94:("func_80B7AC94",),
0x80B7AD34:("func_80B7AD34",),
0x80B7AE58:("func_80B7AE58",),
0x80B7AEFC:("func_80B7AEFC",),
0x80B7AC94:("ObjUm_StartCs",),
0x80B7AD34:("ObjUm_PostMilkRunWaitPathFinished",),
0x80B7AE58:("ObjUm_PostMilkRunStartCs",),
0x80B7AEFC:("ObjUm_TerminaFieldIdle",),
0x80B7AF30:("func_80B7AF30",),
0x80B7B154:("func_80B7B154",),
0x80B7B18C:("func_80B7B18C",),
0x80B7B154:("ObjUm_DefaultAnim",),
0x80B7B18C:("ObjUm_UpdateAnim",),
0x80B7B368:("ObjUm_Update",),
0x80B7B598:("func_80B7B598",),
0x80B7B93C:("func_80B7B93C",),
0x80B7BABC:("func_80B7BABC",),
0x80B7B598:("ObjUm_OverrideLimbDraw",),
0x80B7B93C:("ObjUm_SpawnFragments",),
0x80B7BABC:("ObjUm_PostLimbDraw",),
0x80B7BEA4:("func_80B7BEA4",),
0x80B7C03C:("ObjUm_Draw",),
0x80B7C890:("EnNeoReeba_Init",),

View File

@ -15003,14 +15003,12 @@
0x80B77684:("D_80B77684","f32","",0x4),
0x80B77688:("D_80B77688","f32","",0x4),
0x80B7C0F0:("Obj_Um_InitVars","UNK_TYPE1","",0x1),
0x80B7C110:("D_80B7C110","UNK_TYPE1","",0x1),
0x80B7C128:("D_80B7C128","UNK_TYPE1","",0x1),
0x80B7C138:("D_80B7C138","UNK_TYPE1","",0x1),
0x80B7C110:("sEyeTextures","UNK_TYPE1","",0x1),
0x80B7C128:("sMouthTextures","UNK_TYPE1","",0x1),
0x80B7C138:("sCylinderInit","UNK_TYPE1","",0x1),
0x80B7C164:("D_80B7C164","UNK_TYPE4","",0x4),
0x80B7C254:("D_80B7C254","UNK_TYPE4","",0x4),
0x80B7C25C:("D_80B7C25C","UNK_TYPE1","",0x1),
0x80B7C260:("D_80B7C260","UNK_TYPE1","",0x1),
0x80B7C274:("D_80B7C274","UNK_TYPE1","",0x1),
0x80B7C254:("sInitChain","UNK_TYPE4","",0x4),
0x80B7C25C:("sUmAnims","UNK_TYPE1","[5]",0x28),
0x80B7C284:("D_80B7C284","UNK_TYPE4","",0x4),
0x80B7C290:("D_80B7C290","UNK_TYPE4","",0x4),
0x80B7C29C:("D_80B7C29C","UNK_TYPE4","",0x4),

View File

@ -576,6 +576,7 @@ wordReplace = {
"func_800E8F08": "Actor_TrackNone",
"func_800E8FA4": "Actor_TrackPoint",
"func_800E9250": "Actor_TrackPlayer",
"func_800E8EA0": "Actor_ContinueText",
"func_8010A000": "Map_GetDungeonOrBossAreaIndex",
"func_8010A074": "Map_IsInDungeonOrBossArea",

View File

@ -11,6 +11,8 @@ CLOSE_DISPS = "void"
ABS = "int"
ABS_ALT = "int"
SQ = "int"
ARRAY_COUNT = "int"
ARRAY_COUNTU = "int"
CLAMP = "int"
CLOCK_TIME = "int"
CURRENT_DAY = "int"

View File

@ -1480,13 +1480,6 @@ D_06001100 = 0x06001100;
D_06001140 = 0x06001140;
D_06001CB0 = 0x06001CB0;
// ovl_Obj_Um
D_06007E20 = 0x06007E20;
D_06007F50 = 0x06007F50;
D_06011DF8 = 0x06011DF8;
D_06012CC0 = 0x06012CC0;
// ovl_Obj_Usiyane
D_06000098 = 0x06000098;