* progress

* it matches mostly

* symbols

* done for now

* fix warnings and stuff

* formatter

* NON_EQUIVALENT

* pr fixes

* formatter and actorfixer

* fix pm

* more fixes

* PR fixes

* it actually builds again

* matching function

Co-authored-by: Louis <louist103@pop-os.localdomain>
This commit is contained in:
louist103 2022-02-27 17:37:24 -05:00 committed by GitHub
parent 91b983776e
commit 684df37ebc
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
22 changed files with 600 additions and 117 deletions

View File

@ -26,12 +26,12 @@
<DList Name="gameplay_field_keep_DL_003870" Offset="0x3870" />
<DList Name="gameplay_field_keep_DL_003938" Offset="0x3938" />
<Collision Name="gameplay_field_keep_Colheader_003A60" Offset="0x3A60" />
<DList Name="gameplay_field_keep_DL_003FD0" Offset="0x3FD0" />
<DList Name="gameplay_field_keep_DL_004050" Offset="0x4050" />
<DList Name="gameplay_field_keep_DL_004228" Offset="0x4228" />
<DList Name="gFieldWoodDoorFrameDL" Offset="0x3FD0" />
<DList Name="gFieldWoodDoorLeftDL" Offset="0x4050" />
<DList Name="gFieldWoodDoorRightDL" Offset="0x4228" />
<Texture Name="gameplay_field_keep_Tex_004400" OutName="tex_004400" Format="rgba16" Width="16" Height="16" Offset="0x4400" />
<Texture Name="gameplay_field_keep_Tex_004600" OutName="tex_004600" Format="rgba16" Width="16" Height="16" Offset="0x4600" />
<Texture Name="gameplay_field_keep_Tex_004800" OutName="tex_004800" Format="i4" Width="64" Height="128" Offset="0x4800" />
<Texture Name="gFieldWoodDoorTex" OutName="wood_door" Format="i4" Width="64" Height="128" Offset="0x4800" />
<Texture Name="gameplay_field_keep_TLUT_005800" OutName="tlut_005800" Format="rgba16" Width="4" Height="4" Offset="0x5800" />
<Texture Name="gameplay_field_keep_Tex_005828" OutName="tex_005828" Format="ci4" Width="64" Height="64" Offset="0x5828" />
<DList Name="gameplay_field_keep_DL_0061E8" Offset="0x61E8" />

View File

@ -882,8 +882,8 @@
<Animation Name="gameplay_keep_Anim_0205A0" Offset="0x205A0" />
<Animation Name="gameplay_keep_Anim_020658" Offset="0x20658" />
<DList Name="gameplay_keep_DL_020B30" Offset="0x20B30" />
<DList Name="gameplay_keep_DL_020BB8" Offset="0x20BB8" />
<DList Name="gameplay_keep_DL_020D00" Offset="0x20D00" />
<DList Name="gDoorLeftDL" Offset="0x20BB8" />
<DList Name="gDoorRightDL" Offset="0x20D00" />
<Texture Name="gameplay_keep_Tex_020E38" OutName="tex_020E38" Format="rgba16" Width="32" Height="64" Offset="0x20E38" />
<DList Name="gameplay_keep_DL_0221B8" Offset="0x221B8" />
<Texture Name="gameplay_keep_Tex_0222E8" OutName="tex_0222E8" Format="i4" Width="32" Height="64" Offset="0x222E8" />
@ -892,14 +892,14 @@
<Limb Name="gameplay_keep_Standardlimb_022AF4" Type="Standard" Offset="0x22AF4" />
<Limb Name="gameplay_keep_Standardlimb_022B00" Type="Standard" Offset="0x22B00" />
<Limb Name="gameplay_keep_Standardlimb_022B0C" Type="Standard" Offset="0x22B0C" />
<Skeleton Name="gameplay_keep_Skel_022B28" Type="Normal" LimbType="Standard" Offset="0x22B28" />
<Skeleton Name="gDoorSkel" Type="Normal" LimbType="Standard" Offset="0x22B28" />
<Animation Name="gameplay_keep_Anim_022BE8" Offset="0x22BE8" />
<Animation Name="gameplay_keep_Anim_022CA8" Offset="0x22CA8" />
<Animation Name="gameplay_keep_Anim_022D90" Offset="0x22D90" />
<Animation Name="gameplay_keep_Anim_022E68" Offset="0x22E68" />
<Blob Name="gameplay_keep_zeroes_unk_00022E78" Size="0xA8" Offset="0x22E78" />
<Animation Name="gameplay_keep_Anim_022FF0" Offset="0x22FF0" />
<Collision Name="gameplay_keep_Colheader_023100" Offset="0x23100" />
<Collision Name="gDoorCol" Offset="0x23100" />
<DList Name="gameplay_keep_DL_023130" Offset="0x23130" />
<DList Name="gOwlStatueWhiteFlashDL" Offset="0x23210" />
<DList Name="gameplay_keep_DL_023288" Offset="0x23288" />

View File

@ -1,7 +1,7 @@
<Root>
<File Name="object_dor02" Segment="6">
<DList Name="object_dor02_DL_000420" Offset="0x420" />
<DList Name="object_dor02_DL_000428" Offset="0x428" />
<Texture Name="object_dor02_Tex_000610" OutName="tex_000610" Format="rgba16" Width="32" Height="64" Offset="0x610" />
<DList Name="object_dor02_DL_000420" Offset="0x420"/>
<DList Name="gZoraHallDoorDL" Offset="0x428"/>
<Texture Name="gZoraHallDoorTex" OutName="zora_hall_door" Format="rgba16" Width="32" Height="64" Offset="0x610"/>
</File>
</Root>

View File

@ -1,6 +1,6 @@
<Root>
<File Name="object_dor03" Segment="6">
<DList Name="object_dor03_DL_0003C0" Offset="0x3C0" />
<Texture Name="object_dor03_Tex_0004D0" OutName="tex_0004D0" Format="rgba16" Width="32" Height="64" Offset="0x4D0" />
<DList Name="gSwampDoorDL" Offset="0x3C0" />
<Texture Name="gSwampDoorTex" OutName="swamp_door" Format="rgba16" Width="32" Height="64" Offset="0x4D0" />
</File>
</Root>

View File

@ -1,7 +1,7 @@
<Root>
<File Name="object_dor04" Segment="6">
<DList Name="object_dor04_DL_000460" Offset="0x460" />
<DList Name="object_dor04_DL_000468" Offset="0x468" />
<Texture Name="object_dor04_Tex_000658" OutName="tex_000658" Format="rgba16" Width="64" Height="32" Offset="0x658" />
<DList Name="gMagicHagPotionShopDoorEndDL" Offset="0x460"/>
<DList Name="gMagicHagPotionShopDoorDL" Offset="0x468"/>
<Texture Name="gMagicHagPotionShopDoorTex" OutName="magic_hag_potion_shop_door" Format="rgba16" Width="64" Height="32" Offset="0x658"/>
</File>
</Root>

View File

@ -28,8 +28,8 @@
<Texture Name="object_kaizoku_obj_Tex_009108" OutName="tex_009108" Format="ci8" Width="32" Height="32" Offset="0x9108" />
<Texture Name="object_kaizoku_obj_Tex_009508" OutName="tex_009508" Format="ci4" Width="4" Height="4" Offset="0x9508" />
<Collision Name="object_kaizoku_obj_Colheader_009A88" Offset="0x9A88" />
<DList Name="object_kaizoku_obj_DL_009F20" Offset="0x9F20" />
<Texture Name="object_kaizoku_obj_Tex_00A210" OutName="tex_00A210" Format="rgba16" Width="16" Height="64" Offset="0xA210" />
<DList Name="gPiratesFortressDoorDL" Offset="0x9F20" />
<Texture Name="gPiratesFortressDoorTexDL" OutName="door_tex" Format="rgba16" Width="16" Height="64" Offset="0xA210" />
<Texture Name="object_kaizoku_obj_Tex_00AA10" OutName="tex_00AA10" Format="i4" Width="32" Height="32" Offset="0xAA10" />
<DList Name="object_kaizoku_obj_DL_00AD50" Offset="0xAD50" />
<Texture Name="object_kaizoku_obj_TLUT_00AF38" OutName="tlut_00AF38" Format="rgba16" Width="4" Height="4" Offset="0xAF38" />

View File

@ -12,7 +12,7 @@
<DList Name="object_numa_obj_DL_004448" Offset="0x4448" />
<DList Name="object_numa_obj_DL_0051B0" Offset="0x51B0" />
<DList Name="object_numa_obj_DL_0051B8" Offset="0x51B8" />
<DList Name="object_numa_obj_DL_005DF0" Offset="0x5DF0" />
<DList Name="gWoodfallDoorDL" Offset="0x5DF0" />
<Texture Name="object_numa_obj_Tex_005FC0" OutName="tex_005FC0" Format="rgba16" Width="32" Height="64" Offset="0x5FC0" />
<DList Name="object_numa_obj_DL_007150" Offset="0x7150" />
<Texture Name="object_numa_obj_Tex_0072B0" OutName="tex_0072B0" Format="rgba16" Width="32" Height="64" Offset="0x72B0" />

View File

@ -1,7 +1,7 @@
<Root>
<File Name="object_wdor04" Segment="6">
<DList Name="object_wdor04_DL_000500" Offset="0x500" />
<DList Name="object_wdor04_DL_000508" Offset="0x508" />
<Texture Name="object_wdor04_Tex_000670" OutName="tex_000670" Format="rgba16" Width="32" Height="64" Offset="0x670" />
<DList Name="gMilkBarDoorEndDL" Offset="0x500"/>
<DList Name="gMilkBarDoorDL" Offset="0x508"/>
<Texture Name="gMilkBarDoorTex" OutName="milk_bar_door_tex" Format="rgba16" Width="32" Height="64" Offset="0x670"/>
</File>
</Root>

View File

@ -1,7 +1,7 @@
<Root>
<File Name="object_wdor05" Segment="6">
<DList Name="object_wdor05_DL_000500" Offset="0x500" />
<DList Name="object_wdor05_DL_000508" Offset="0x508" />
<Texture Name="object_wdor05_Tex_000670" OutName="tex_000670" Format="rgba16" Width="32" Height="64" Offset="0x670" />
<DList Name="gMusicBoxHouseEndDL" Offset="0x500"/>
<DList Name="gMusicBoxHouseDoorDL" Offset="0x508"/>
<Texture Name="gMusicBoxHouseDoorTex" OutName="music_box_house_door" Format="rgba16" Width="32" Height="64" Offset="0x670"/>
</File>
</Root>

2
spec
View File

@ -775,8 +775,6 @@ beginseg
name "ovl_En_Door"
compress
include "build/src/overlays/actors/ovl_En_Door/z_en_door.o"
include "build/data/ovl_En_Door/ovl_En_Door.data.o"
include "build/data/ovl_En_Door/ovl_En_Door.bss.o"
include "build/data/ovl_En_Door/ovl_En_Door.reloc.o"
endseg

View File

@ -61,21 +61,21 @@ s32 EnHy_ChangeAnim(SkelAnime* skelAnime, s16 animIndex) {
EnDoor* EnHy_FindNearestDoor(Actor* actor, GlobalContext* globalCtx) {
EnDoor* nearestDoor = NULL;
Actor* doorIter = NULL;
EnDoor* door;
f32 dist;
EnDoor* door;
s32 isSetup = false;
f32 minDist = 0.0f;
do {
doorIter = SubS_FindActor(globalCtx, doorIter, ACTORCAT_DOOR, ACTOR_EN_DOOR);
door = (EnDoor*)doorIter;
dist = Actor_DistanceBetweenActors(actor, &door->actor);
dist = Actor_DistanceBetweenActors(actor, &door->dyna.actor);
if (!isSetup || (dist < minDist)) {
nearestDoor = door;
minDist = dist;
isSetup = true;
}
doorIter = door->actor.next;
doorIter = door->dyna.actor.next;
} while (doorIter != NULL);
if (1) {}
@ -130,20 +130,20 @@ s32 EnHy_Init(EnHy* enHy, GlobalContext* globalCtx, FlexSkeletonHeader* skeleton
void func_800F0BB4(EnHy* enHy, GlobalContext* globalCtx, EnDoor* door, s16 arg3, s16 arg4) {
s32 pad;
s8 sp3B;
s8 animIndex;
Vec3f offset;
f32 phi_f0;
Actor_OffsetOfPointInActorCoords(&door->actor, &offset, &enHy->actor.world.pos);
Actor_OffsetOfPointInActorCoords(&door->dyna.actor, &offset, &enHy->actor.world.pos);
phi_f0 = (offset.z >= 0.0f) ? 1.0f : -1.0f;
sp3B = ((s8)phi_f0 < 0) ? 0 : 2;
EnHy_ChangeObjectAndAnim(enHy, globalCtx, (sp3B == 0) ? arg3 : arg4);
animIndex = ((s8)phi_f0 < 0) ? 0 : 2;
EnHy_ChangeObjectAndAnim(enHy, globalCtx, (animIndex == 0) ? arg3 : arg4);
enHy->skelAnime.baseTransl = *enHy->skelAnime.jointTable;
enHy->skelAnime.prevTransl = *enHy->skelAnime.jointTable;
enHy->skelAnime.moveFlags |= 3;
AnimationContext_SetMoveActor(globalCtx, &enHy->actor, &enHy->skelAnime, 1.0f);
door->unk_1A1 = 1;
door->unk_1A0 = sp3B;
door->animIndex = animIndex;
}
s32 func_800F0CE4(EnHy* enHy, GlobalContext* globalCtx, ActorFunc draw, s16 arg3, s16 arg4, f32 arg5) {
@ -157,7 +157,7 @@ s32 func_800F0CE4(EnHy* enHy, GlobalContext* globalCtx, ActorFunc draw, s16 arg3
if (door != NULL) {
ret = true;
func_800F0BB4(enHy, globalCtx, door, arg3, arg4);
yaw = Math_Vec3f_Yaw(&enHy->actor.world.pos, &door->actor.world.pos);
yaw = Math_Vec3f_Yaw(&enHy->actor.world.pos, &door->dyna.actor.world.pos);
enHy->actor.world.pos.x += arg5 * Math_SinS(yaw);
enHy->actor.world.pos.z += arg5 * Math_CosS(yaw);
enHy->actor.world.rot.y = -yaw;
@ -179,7 +179,7 @@ s32 func_800F0DD4(EnHy* enHy, GlobalContext* globalCtx, s16 arg2, s16 arg3) {
if (door != NULL) {
ret = true;
func_800F0BB4(enHy, globalCtx, door, arg2, arg3);
enHy->actor.shape.rot.y = Math_Vec3f_Yaw(&enHy->actor.world.pos, &door->actor.world.pos);
enHy->actor.shape.rot.y = Math_Vec3f_Yaw(&enHy->actor.world.pos, &door->dyna.actor.world.pos);
enHy->actor.world.rot.y = enHy->actor.shape.rot.y;
enHy->actor.gravity = 0.0f;
enHy->actor.flags &= ~ACTOR_FLAG_1;

View File

@ -21,7 +21,7 @@ EnDoor* SubS_FindDoor(GlobalContext* globalCtx, s32 unk_1A5) {
break;
}
if ((door->unk_1A4 == 5) && (door->unk_1A5 == (u8)unk_1A5)) {
if ((door->unk_1A4 == 5) && (door->switchFlag == (u8)unk_1A5)) {
break;
}

View File

@ -5,6 +5,20 @@
*/
#include "z_en_door.h"
#include "objects/object_mkk/object_mkk.h"
#include "objects/object_dor01/object_dor01.h"
#include "objects/object_dor02/object_dor02.h"
#include "objects/object_dor03/object_dor03.h"
#include "objects/object_dor04/object_dor04.h"
#include "objects/object_wdor01/object_wdor01.h"
#include "objects/object_wdor02/object_wdor02.h"
#include "objects/object_wdor03/object_wdor03.h"
#include "objects/object_wdor04/object_wdor04.h"
#include "objects/object_wdor05/object_wdor05.h"
#include "objects/gameplay_keep/gameplay_keep.h"
#include "objects/object_numa_obj/object_numa_obj.h"
#include "objects/object_kaizoku_obj/object_kaizoku_obj.h"
#include "objects/gameplay_field_keep/gameplay_field_keep.h"
#define FLAGS (ACTOR_FLAG_10)
@ -15,7 +29,115 @@ void EnDoor_Destroy(Actor* thisx, GlobalContext* globalCtx);
void EnDoor_Update(Actor* thisx, GlobalContext* globalCtx);
void EnDoor_Draw(Actor* thisx, GlobalContext* globalCtx);
#if 0
void func_80866B20(EnDoor*, GlobalContext*);
void func_8086704C(EnDoor*, GlobalContext*);
void func_80866F94(EnDoor*, GlobalContext*);
void func_80867080(EnDoor*, GlobalContext*);
void func_80867144(EnDoor*, GlobalContext*);
void func_808670F0(EnDoor*, GlobalContext*);
void func_80866A5C(EnDoor*, GlobalContext*);
u8 D_808675D0[] = {
0x0C, 0x00, 0x03, 0x0E, 0x02, 0x06, 0x00, 0x17, 0x00, 0x08,
0x02, 0x00, 0x00, 0x06, 0x00, 0x02, 0x09, 0x07, 0x05, 0x00,
};
u8 D_808675E4[] = {
0x0F, 0x09, 0x00, 0x47, 0x0F, 0x0C, 0x00, 0x15, 0x0C, 0x00, 0x01, 0x13, 0x11, 0x00, 0x0F, 0x0D,
0x00, 0x0A, 0x0F, 0x0F, 0x00, 0x07, 0x0F, 0x00, 0x00, 0x02, 0x09, 0x09, 0x05, 0x09, 0x08, 0x0C,
0x00, 0x02, 0x19, 0x00, 0x1C, 0x08, 0x07, 0x0F, 0x0D, 0x00, 0x02, 0x09, 0x09, 0x05, 0x0F, 0x0D,
0x00, 0xEA, 0x0F, 0x11, 0x00, 0xE7, 0x0F, 0x00, 0x00, 0xE2, 0x09, 0x09, 0x0F, 0x0D, 0x00, 0xDC,
0x0F, 0x0D, 0x00, 0xD9, 0x0F, 0x12, 0x00, 0x01, 0x05, 0x09, 0x09, 0x09, 0x09, 0x00, 0x00, 0x00,
};
u8 D_80867634[] = {
0x02, 0x06, 0x00, 0x17, 0x00, 0x02, 0x09, 0x1C, 0x05, 0x00, 0x00, 0x00,
};
u8 D_80867640[] = {
0x02, 0x15, 0x00, 0x16, 0x00, 0x01, 0x05, 0x09, 0x0B, 0x00, 0x00, 0x00,
};
u8 D_8086764C[] = {
0x02, 0x16, 0x00, 0x05, 0x00, 0x02, 0x09, 0x0A, 0x05, 0x00, 0x00, 0x00,
};
u8 D_80867658[] = {
0x0C, 0x00, 0x02, 0x0F, 0x00, 0x1C, 0x08, 0x02, 0x09, 0x0C, 0x02, 0x0F, 0x0A, 0x16, 0x00,
0x02, 0x09, 0x0C, 0x05, 0x0C, 0x00, 0x03, 0x11, 0x0F, 0x0D, 0x00, 0x0D, 0x00, 0x33, 0x08,
0x02, 0x09, 0x0C, 0x0F, 0x16, 0x00, 0x02, 0x09, 0x0C, 0x05, 0x09, 0x0C, 0x00, 0x00,
};
u8 D_80867684[] = { 0x05, 0x00, 0x00, 0x00 };
u8 D_80867688[] = { 0x0F, 0x16, 0x00, 0x02, 0x09, 0x0F, 0x05, 0x00 };
u8 D_80867690[] = { 0x0F, 0x16, 0x00, 0x02, 0x09, 0x10, 0x05, 0x00 };
u8 D_80867698[] = { 0x0F, 0x16, 0x00, 0x02, 0x09, 0x11, 0x05, 0x00 };
u8 D_808676A0[] = {
0x02, 0x0A, 0x00, 0x15, 0x00, 0x0F, 0x02, 0x16, 0x00, 0x05, 0x00, 0x02,
0x09, 0x12, 0x08, 0x02, 0x02, 0x09, 0x22, 0x09, 0x21, 0x05, 0x00, 0x00,
};
u8 D_808676B8[] = {
0x08, 0x00, 0x14, 0x0C, 0x00, 0x03, 0x07, 0x0F, 0x08, 0x00, 0x01, 0x05,
0x09, 0x13, 0x02, 0x08, 0x00, 0x14, 0x1E, 0x02, 0x09, 0x13, 0x05, 0x05,
};
u8 D_808676D0[] = { 0x05, 0x00, 0x00, 0x00 };
u8 D_808676D4[] = { 0x05, 0x00, 0x00, 0x00 };
u8 D_808676D8[] = { 0x0C, 0x00, 0x03, 0x05, 0x0F, 0x12, 0x00, 0x01, 0x05, 0x09, 0x14, 0x00 };
u8 D_808676E4[] = { 0x08, 0x00, 0x02, 0x09, 0x16, 0x05, 0x00, 0x00 };
u8 D_808676EC[] = { 0x05, 0x00, 0x00, 0x00 };
u8 D_808676F0[] = {
0x0C, 0x00, 0x03, 0x05, 0x0F, 0x0A, 0x00, 0x07, 0x05, 0x02,
0x0A, 0x00, 0x14, 0x00, 0xF9, 0x09, 0x15, 0x00, 0x00, 0x00,
};
u8 D_80867704[] = { 0x05, 0x00, 0x00, 0x00 };
u8 D_80867708[] = { 0x05, 0x00, 0x00, 0x00 };
u8 D_8086770C[] = { 0x05, 0x00, 0x00, 0x00 };
u8 D_80867710[] = { 0x05, 0x00, 0x00, 0x00 };
u8 D_80867714[] = { 0x0F, 0x14, 0x00, 0x02, 0x09, 0x17, 0x05, 0x00 };
u8 D_8086771C[] = {
0x0C, 0x00, 0x01, 0x07, 0x0F, 0x02, 0x1E, 0x02, 0x09, 0x18, 0x05, 0x0C,
0x00, 0x03, 0xFB, 0x0F, 0x14, 0x00, 0xF7, 0x09, 0x0C, 0x00, 0x00, 0x00,
};
u8 D_80867734[] = { 0x0F, 0x14, 0x00, 0x02, 0x09, 0x19, 0x05, 0x00 };
u8 D_8086773C[] = { 0x0F, 0x14, 0x00, 0x02, 0x09, 0x1A, 0x05, 0x00 };
u8 D_80867744[] = {
0x0C, 0x00, 0x02, 0x04, 0x00, 0x63, 0x80, 0x06, 0x0F, 0x14, 0x00, 0x08,
0x09, 0x1B, 0x0F, 0x12, 0x00, 0x02, 0x09, 0x1B, 0x05, 0x00, 0x00, 0x00,
};
u8 D_8086775C[] = {
0x00, 0x34, 0x20, 0x17, 0x00, 0x4B, 0x20, 0x13, 0x00, 0x0E, 0x04, 0x02, 0x09, 0x1D,
0x00, 0x3B, 0x01, 0x08, 0x00, 0x3D, 0x02, 0x02, 0x09, 0x1E, 0x09, 0x1F, 0x05, 0x05,
};
u8 D_80867778[] = { 0x09, 0x20, 0x00, 0x00 };
u8 D_8086777C[] = { 0x05, 0x00, 0x00, 0x00 };
u8 D_80867780[] = { 0x05, 0x00, 0x00, 0x00 };
u8 D_80867784[] = { 0x0F, 0x16, 0x00, 0x02, 0x09, 0x23, 0x05, 0x00 };
// void* seems to keep the compiler happy.
void* D_8086778C[] = {
&D_808675D0, &D_808675E4, &D_80867634, &D_80867640, &D_8086764C, &D_80867658, &D_80867684, &D_80867688,
&D_80867690, &D_80867698, &D_808676A0, &D_808676B8, &D_808676D0, &D_808676D4, &D_808676D8, &D_808676E4,
&D_808676EC, &D_808676F0, &D_80867704, &D_80867708, &D_8086770C, &D_80867710, &D_80867714, &D_8086771C,
&D_80867734, &D_8086773C, &D_80867744, &D_8086775C, &D_80867778, &D_8086777C, &D_80867780, &D_80867784,
};
const ActorInit En_Door_InitVars = {
ACTOR_EN_DOOR,
ACTORCAT_DOOR,
@ -28,38 +150,395 @@ const ActorInit En_Door_InitVars = {
(ActorFunc)EnDoor_Draw,
};
// static InitChainEntry sInitChain[] = {
static InitChainEntry D_80867954[] = {
typedef struct {
/* 0x00 */ s16 sceneNum;
/* 0x02 */ u8 dListIndex;
/* 0x04 */ s16 objectId;
} EnDoorInfo;
static EnDoorInfo sObjInfo[] = {
{ SCENE_MITURIN, 0x01, OBJECT_NUMA_OBJ },
{ SCENE_TENMON_DAI, 0x02, OBJECT_DOR01 },
{ SCENE_00KEIKOKU, 0x02, OBJECT_DOR01 },
{ SCENE_30GYOSON, 0x02, OBJECT_DOR01 },
{ SCENE_LABO, 0x02, OBJECT_DOR01 },
{ SCENE_33ZORACITY, 0x03, OBJECT_DOR02 },
{ SCENE_UNSET_31, 0x03, OBJECT_DOR02 },
{ SCENE_BANDROOM, 0x03, OBJECT_DOR02 },
{ SCENE_20SICHITAI, 0x04, OBJECT_DOR03 },
{ SCENE_20SICHITAI2, 0x04, OBJECT_DOR03 },
{ SCENE_MAP_SHOP, 0x04, OBJECT_DOR03 },
{ SCENE_KAIZOKU, 0x0B, OBJECT_KAIZOKU_OBJ },
{ SCENE_PIRATE, 0x0B, OBJECT_KAIZOKU_OBJ },
{ SCENE_TORIDE, 0x0B, OBJECT_KAIZOKU_OBJ },
{ SCENE_KINDAN2, 0x0C, OBJECT_KINSTA2_OBJ },
{ -1, 0x00, GAMEPLAY_KEEP },
{ -1, 0x0D, GAMEPLAY_FIELD_KEEP },
{ -1, 0x08, OBJECT_WDOR03 },
{ -1, 0x07, OBJECT_WDOR02 },
{ -1, 0x06, OBJECT_WDOR01 },
{ -1, 0x07, OBJECT_WDOR02 },
{ -1, 0x06, OBJECT_WDOR01 },
{ -1, 0x00, GAMEPLAY_KEEP },
{ -1, 0x00, GAMEPLAY_KEEP },
{ -1, 0x00, GAMEPLAY_KEEP },
{ -1, 0x00, GAMEPLAY_KEEP },
{ -1, 0x00, GAMEPLAY_KEEP },
{ -1, 0x09, OBJECT_WDOR04 },
{ -1, 0x08, OBJECT_WDOR03 },
{ -1, 0x08, OBJECT_WDOR03 },
{ -1, 0x0D, GAMEPLAY_FIELD_KEEP },
{ -1, 0x0D, GAMEPLAY_FIELD_KEEP },
{ -1, 0x0D, GAMEPLAY_FIELD_KEEP },
{ -1, 0x0D, GAMEPLAY_FIELD_KEEP },
{ -1, 0x06, OBJECT_WDOR01 },
{ -1, 0x00, GAMEPLAY_KEEP },
{ -1, 0x00, GAMEPLAY_KEEP },
{ -1, 0x00, GAMEPLAY_KEEP },
{ -1, 0x00, GAMEPLAY_KEEP },
{ -1, 0x0D, GAMEPLAY_FIELD_KEEP },
{ -1, 0x0D, GAMEPLAY_FIELD_KEEP },
{ -1, 0x0D, GAMEPLAY_FIELD_KEEP },
{ -1, 0x0D, GAMEPLAY_FIELD_KEEP },
{ -1, 0x00, GAMEPLAY_KEEP },
{ -1, 0x0A, OBJECT_WDOR05 },
{ -1, 0x0D, GAMEPLAY_FIELD_KEEP },
{ -1, 0x05, OBJECT_DOR04 },
{ -1, 0x09, OBJECT_WDOR04 },
{ -1, 0x04, OBJECT_DOR03 },
};
static InitChainEntry sInitChain[] = {
ICHAIN_U8(targetMode, 0, ICHAIN_CONTINUE),
ICHAIN_F32(uncullZoneForward, 4000, ICHAIN_CONTINUE),
ICHAIN_U16(shape.rot.x, 0, ICHAIN_CONTINUE),
ICHAIN_U16(shape.rot.z, 0, ICHAIN_STOP),
};
#endif
static AnimationHeader* sAnimations[] = {
&gameplay_keep_Anim_020658, &gameplay_keep_Anim_022CA8, &gameplay_keep_Anim_020658, &gameplay_keep_Anim_022E68,
&gameplay_keep_Anim_0204B4, &gameplay_keep_Anim_022BE8, &gameplay_keep_Anim_022D90, &gameplay_keep_Anim_022BE8,
&gameplay_keep_Anim_022FF0, &gameplay_keep_Anim_0205A0,
};
static u8 sAnimOpenFrames[10] = {
25, 25, 25, 25, 25, 25, 25, 25, 25, 25,
};
extern InitChainEntry D_80867954[];
static u8 sAnimCloseFrames[10] = {
60, 60, 60, 70, 70, 60, 60, 60, 60, 70,
};
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Door/EnDoor_Init.s")
static Gfx* D_808679A4[14][2] = {
{ gDoorLeftDL, gDoorRightDL },
{ gWoodfallDoorDL, gWoodfallDoorDL },
{ object_dor01_DL_000448, object_dor01_DL_000448 },
{ gZoraHallDoorDL, gZoraHallDoorDL },
{ gSwampDoorDL, gSwampDoorDL },
{ gMagicHagPotionShopDoorDL, gMagicHagPotionShopDoorDL },
{ object_wdor01_DL_000548, object_wdor01_DL_000548 }, // Lottery Shop / Curiosity Shop / Mayor's House Door
{ object_wdor02_DL_000548, object_wdor02_DL_000548 }, // Trading Post / Post Office Door
{ object_wdor03_DL_000548, object_wdor03_DL_000548 }, // Stockpot Inn & Swordsman's School Door
{ gMilkBarDoorDL, gMilkBarDoorDL },
{ gMusicBoxHouseDoorDL, gMusicBoxHouseDoorDL },
{ gPiratesFortressDoorDL, gPiratesFortressDoorDL },
{ object_mkk_DL_000310, object_mkk_DL_000310 },
{ gFieldWoodDoorLeftDL, gFieldWoodDoorRightDL },
};
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Door/EnDoor_Destroy.s")
void EnDoor_Init(Actor* thisx, GlobalContext* globalCtx2) {
GlobalContext* globalCtx = globalCtx2;
s32 objectBankIndex;
EnDoorInfo* objectInfo = sObjInfo;
EnDoor* this = THIS;
s32 i;
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Door/func_80866A5C.s")
Actor_ProcessInitChain(&this->dyna.actor, sInitChain);
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Door/func_80866B20.s")
this->unk_1A4 = ENDOOR_GET_PARAMS_7(thisx);
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Door/func_80866F94.s")
this->switchFlag = ENDOOR_GET_PARAMS_7F(thisx);
if ((this->unk_1A4 == 7) && (this->switchFlag == 0)) {
DynaPolyActor_Init(&this->dyna, 0);
DynaPolyActor_LoadMesh(globalCtx, &this->dyna, &gDoorCol);
}
SkelAnime_Init(globalCtx, &this->skelAnime, &gDoorSkel, &gameplay_keep_Anim_020658, this->limbTable,
this->limbTable, 5);
if (this->unk_1A4 == 5) {
objectInfo = &sObjInfo[17 + this->switchFlag];
} else {
for (i = 0; i < ARRAY_COUNT(sObjInfo) - 34; i++, objectInfo++) {
if (globalCtx->sceneNum == objectInfo->sceneNum) {
break;
}
}
if ((i >= ARRAY_COUNT(sObjInfo) - 34) && (Object_GetIndex(&globalCtx->objectCtx, GAMEPLAY_FIELD_KEEP) >= 0)) {
objectInfo++;
}
}
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Door/func_8086704C.s")
this->dlIndex = objectInfo->dListIndex;
objectBankIndex = Object_GetIndex(&globalCtx->objectCtx, objectInfo->objectId);
if (objectBankIndex < 0) {
objectInfo = &sObjInfo[15];
objectBankIndex = Object_GetIndex(&globalCtx->objectCtx, objectInfo->objectId);
if (objectBankIndex != 0) {
Actor_MarkForDeath(&this->dyna.actor);
return;
}
}
this->requiredObjBankIndex = objectBankIndex;
this->dlIndex = objectInfo->dListIndex; // Set twice?
if (this->dyna.actor.objBankIndex == this->requiredObjBankIndex) {
func_80866A5C(this, globalCtx);
} else {
this->actionFunc = func_80866A5C;
}
Actor_SetFocus(&this->dyna.actor, 35.0f);
}
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Door/func_80867080.s")
void EnDoor_Destroy(Actor* thisx, GlobalContext* globalCtx) {
EnDoor* this = (EnDoor*)thisx;
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Door/func_808670F0.s")
if (this->unk_1A4 != 7) {
TransitionActorEntry* transitionEntry =
&globalCtx->doorCtx.transitionActorList[(u16)this->dyna.actor.params >> 0xA];
if (transitionEntry->id < 0) {
transitionEntry->id = -transitionEntry->id;
}
} else if (this->switchFlag == 0) {
DynaPoly_DeleteBgActor(globalCtx, &globalCtx->colCtx.dyna, this->dyna.bgId);
}
}
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Door/func_80867144.s")
void func_80866A5C(EnDoor* this, GlobalContext* globalCtx) {
if (Object_IsLoaded(&globalCtx->objectCtx, this->requiredObjBankIndex)) {
this->dyna.actor.objBankIndex = this->requiredObjBankIndex;
this->actionFunc = func_80866B20;
this->dyna.actor.world.rot.y = 0;
if (this->unk_1A4 == 1) {
if (!Flags_GetSwitch(globalCtx, this->switchFlag)) {
this->unk_1A6 = 10;
}
} else if ((this->unk_1A4 == 4) &&
(Actor_XZDistanceBetweenActors(&this->dyna.actor, &GET_PLAYER(globalCtx)->actor) > 120.0f)) {
this->actionFunc = func_8086704C;
this->dyna.actor.world.rot.y = -0x1800;
}
}
}
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Door/EnDoor_Update.s")
void func_80866B20(EnDoor* this, GlobalContext* globalCtx) {
static s32 D_80867BC0[4];
Player* player = GET_PLAYER(globalCtx);
Vec3f playerPosRelToDoor;
s16 temp_a2;
s16 yawDiff;
s32 temp_a1_2;
s32 temp_t0;
u8 temp_a1;
s32 pad;
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Door/func_80867350.s")
if (Actor_ProcessTalkRequest(&this->dyna.actor, &globalCtx->state) && (this->dyna.actor.textId == 0x1821)) {
D_80867BC0[0] = 1;
}
if (this->unk_1A1 != 0) {
this->actionFunc = func_80867144;
Animation_PlayOnceSetSpeed(&this->skelAnime, sAnimations[this->animIndex],
(player->stateFlags1 & 0x8000000) ? 0.75f : 1.5f);
if (this->unk_1A6 != 0) {
gSaveContext.inventory.dungeonKeys[gSaveContext.mapIndex]--;
Flags_SetSwitch(globalCtx, this->switchFlag);
Actor_PlaySfxAtPos(&this->dyna.actor, NA_SE_EV_CHAIN_KEY_UNLOCK);
}
} else if (this->unk_1A7 != 0) {
this->actionFunc = func_80866F94;
Actor_PlaySfxAtPos(&this->dyna.actor, NA_SE_EV_DOOR_OPEN);
} else if (!Player_InCsMode(&globalCtx->state)) {
Actor_OffsetOfPointInActorCoords(&this->dyna.actor, &playerPosRelToDoor, &player->actor.world.pos);
if ((D_80867BC0[0] != 0) || ((fabsf(playerPosRelToDoor.y) < 20.0f) && (fabsf(playerPosRelToDoor.x) < 20.0f) &&
(fabsf(playerPosRelToDoor.z) < 50.0f))) {
yawDiff = player->actor.shape.rot.y - this->dyna.actor.shape.rot.y;
if (playerPosRelToDoor.z > 0.0f) {
yawDiff = (0x8000 - yawDiff);
}
if (ABS_ALT(yawDiff) < 0x3000) {
player->doorType = 1;
player->doorDirection = playerPosRelToDoor.z >= 0.0f ? 1.0f : -1.0f;
player->doorActor = &this->dyna.actor;
if (this->unk_1A6 != 0) {
if (gSaveContext.inventory.dungeonKeys[((void)0, gSaveContext.mapIndex)] <= 0) {
player->doorType = -1;
this->dyna.actor.textId = 0x1802;
} else {
player->doorTimer = 10;
}
} else if (this->unk_1A4 == 4) {
player->doorType = -1;
this->dyna.actor.textId = 0x1800;
} else if ((this->unk_1A4 == 0) || (this->unk_1A4 == 2) || (this->unk_1A4 == 3)) {
s32 textIdOffset;
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Door/EnDoor_Draw.s")
temp_t0 = (globalCtx->actorCtx.unkC & 0x2AA) >> 1;
temp_a2 = D_801AED48[this->switchFlag & 7];
temp_a1_2 = globalCtx->actorCtx.unkC & 0x155;
textIdOffset = (this->switchFlag >> 3) & 0xF;
if (((this->unk_1A4 == 0) && (((temp_t0 | temp_a1_2) & temp_a2) == 0)) ||
((this->unk_1A4 == 2) && ((temp_a2 & temp_a1_2) == 0)) ||
((this->unk_1A4 == 3) && ((temp_a2 & temp_t0) == 0))) {
s16 baseTextId = 0x182D;
if (this->unk_1A4 == 3) {
baseTextId = 0x180D;
} else if (this->unk_1A4 == 2) {
baseTextId = 0x181D;
}
player->doorType = -1;
this->dyna.actor.textId = baseTextId + textIdOffset;
}
} else if ((this->unk_1A4 == 5) && (playerPosRelToDoor.z > 0.0f)) {
struct_80133038_arg2 sp30;
if (func_80133038(globalCtx, D_8086778C[this->switchFlag], &sp30) != 0) {
this->dyna.actor.textId = sp30.unk0 + 0x1800;
player->doorType = ((this->dyna.actor.textId == 0x1821) && (D_80867BC0[0] != 0)) ? 5 : -1;
}
}
func_80122F28(player);
}
} else if ((this->unk_1A4 == 4) && (this->dyna.actor.xzDistToPlayer > 240.0f)) {
Actor_PlaySfxAtPos(&this->dyna.actor, NA_SE_EV_DOOR_OPEN);
this->actionFunc = func_80867080;
}
}
}
void func_80866F94(EnDoor* this, GlobalContext* globalCtx) {
s32 direction;
if (this->unk_1A7 != 0) {
if (this->unk_1A7 >= 0) {
direction = 1;
} else {
direction = -1;
}
if (Math_ScaledStepToS(&this->dyna.actor.world.rot.y, direction * 0x3E80, 0x7D0)) {
Math_StepToC(&this->unk_1A7, 0, 1);
}
} else {
if (Math_ScaledStepToS(&this->dyna.actor.world.rot.y, 0, 0x7D0)) {
this->actionFunc = func_80866B20;
Actor_PlaySfxAtPos(&this->dyna.actor, NA_SE_EV_AUTO_DOOR_CLOSE);
}
}
}
void func_8086704C(EnDoor* this, GlobalContext* globalCtx) {
if (this->dyna.actor.xzDistToPlayer < 120.0f) {
this->actionFunc = func_808670F0;
}
}
void func_80867080(EnDoor* this, GlobalContext* globalCtx) {
if (this->dyna.actor.xzDistToPlayer < 120.0f) {
this->actionFunc = func_808670F0;
} else if (Math_ScaledStepToS(&this->dyna.actor.world.rot.y, -0x1800, 0x100)) {
this->actionFunc = func_8086704C;
}
}
void func_808670F0(EnDoor* this, GlobalContext* globalCtx) {
if (Math_ScaledStepToS(&this->dyna.actor.world.rot.y, 0, 0x700)) {
Actor_PlaySfxAtPos(&this->dyna.actor, NA_SE_EV_DOOR_CLOSE);
this->actionFunc = func_80866B20;
}
}
void func_80867144(EnDoor* this, GlobalContext* globalCtx) {
s32 numEffects;
s32 i;
if (DECR(this->unk_1A6) == 0) {
if (SkelAnime_Update(&this->skelAnime) != 0) {
this->actionFunc = func_80866B20;
this->unk_1A1 = 0;
} else if (Animation_OnFrame(&this->skelAnime, sAnimOpenFrames[this->animIndex])) {
Actor_PlaySfxAtPos(&this->dyna.actor, NA_SE_OC_DOOR_OPEN);
if (this->skelAnime.playSpeed < 1.5f) {
numEffects = (s32)(Rand_ZeroOne() * 30.0f) + 50;
for (i = 0; i < numEffects; i++) {
EffectSsBubble_Spawn(globalCtx, &this->dyna.actor.world.pos, 60.0, 100.0f, 50.0f, 0.15f);
}
}
} else if (Animation_OnFrame(&this->skelAnime, sAnimCloseFrames[this->animIndex])) {
Actor_PlaySfxAtPos(&this->dyna.actor, NA_SE_EV_DOOR_CLOSE);
}
}
}
void EnDoor_Update(Actor* thisx, GlobalContext* globalCtx) {
EnDoor* this = THIS;
this->actionFunc(this, globalCtx);
}
s32 EnDoor_OverrideLimbDraw(GlobalContext* globalCtx, s32 limbIndex, Gfx** dList, Vec3f* pos, Vec3s* rot,
Actor* thisx) {
TransitionActorEntry* transitionEntry;
EnDoor* this = THIS;
if (limbIndex == 4) {
Gfx** dl = D_808679A4[this->dlIndex];
s16 temp;
s32 dlIndex;
transitionEntry = NULL;
if (this->unk_1A4 != 7) {
transitionEntry = &globalCtx->doorCtx.transitionActorList[(u16)this->dyna.actor.params >> 0xA];
}
rot->z += this->dyna.actor.world.rot.y;
if ((this->unk_1A4 == 7) || (globalCtx->roomCtx.prevRoom.num >= 0) ||
(transitionEntry->sides[0].room == transitionEntry->sides[1].room)) {
s32 pad;
temp = (this->dyna.actor.shape.rot.y + this->skelAnime.jointTable[3].z + rot->z) -
Math_Vec3f_Yaw(&globalCtx->view.eye, &this->dyna.actor.world.pos);
*dList = (ABS_ALT(temp) < 0x4000) ? dl[0] : dl[1];
} else {
dlIndex = 0;
if (transitionEntry->sides[0].room != this->dyna.actor.room) {
dlIndex = 1;
}
*dList = dl[dlIndex];
}
}
return 0;
}
void EnDoor_Draw(Actor* thisx, GlobalContext* globalCtx) {
EnDoor* this = THIS;
if (this->dyna.actor.objBankIndex == this->requiredObjBankIndex) {
OPEN_DISPS(globalCtx->state.gfxCtx);
if ((this->unk_1A4 == 7) && (this->switchFlag == 0)) {
Gfx_DrawDListOpa(globalCtx, gameplay_keep_DL_0221B8);
} else {
func_8012C28C(globalCtx->state.gfxCtx);
}
SkelAnime_DrawOpa(globalCtx, this->skelAnime.skeleton, this->skelAnime.jointTable, EnDoor_OverrideLimbDraw,
NULL, &this->dyna.actor);
if (this->dyna.actor.world.rot.y != 0) {
if (this->dyna.actor.world.rot.y > 0) {
gSPDisplayList(POLY_OPA_DISP++, gDoorRightDL);
} else {
gSPDisplayList(POLY_OPA_DISP++, gDoorLeftDL);
}
}
if (this->unk_1A6) {
Actor_DrawDoorLock(globalCtx, this->unk_1A6, 0);
}
CLOSE_DISPS(globalCtx->state.gfxCtx);
}
}

View File

@ -7,19 +7,24 @@ struct EnDoor;
typedef void (*EnDoorActionFunc)(struct EnDoor*, GlobalContext*);
#define ENDOOR_GET_PARAMS_7(thisx) (((thisx)->params >> 7) & 7)
#define ENDOOR_GET_PARAMS_7F(thisx) (((thisx)->params) & 0x7F)
typedef struct EnDoor {
/* 0x000 */ Actor actor;
/* 0x144 */ char unk_144[0x5C];
/* 0x1A0 */ s8 unk_1A0;
/* 0x1A1 */ s8 unk_1A1;
/* 0x1A2 */ char unk_1A2[0x2];
/* 0x000 */ DynaPolyActor dyna;
/* 0x15C */ SkelAnime skelAnime;
/* 0x1A0 */ u8 animIndex;
/* 0x1A1 */ u8 unk_1A1;
/* 0x1A2 */ s8 requiredObjBankIndex;
/* 0x1A3 */ s8 dlIndex;
/* 0x1A4 */ u8 unk_1A4;
/* 0x1A5 */ u8 unk_1A5;
/* 0x1A6 */ s8 unk_1A6;
/* 0x1A5 */ u8 switchFlag;
/* 0x1A6 */ u8 unk_1A6;
/* 0x1A7 */ s8 unk_1A7;
/* 0x1A8 */ char unk_1A8[0x20];
/* 0x1A8 */ Vec3s limbTable[5];
/* 0x1C8 */ EnDoorActionFunc actionFunc;
} EnDoor; // size = 0x1CC
} EnDoor;
extern const ActorInit En_Door_InitVars;

View File

@ -922,7 +922,7 @@ s32 func_8094F7D0(EnGm* this, GlobalContext* globalCtx, struct_80133038_arg2* ar
s32 func_8094F904(EnGm* this, GlobalContext* globalCtx, struct_80133038_arg2* arg2) {
u16 sp56 = gSaveContext.time - 0x3FFC;
u8 sp55 = ENGM_GET_FF(&this->actor);
EnDoor* sp50;
EnDoor* door;
Vec3s* sp4C;
Vec3f sp40;
Vec3f sp34;
@ -930,13 +930,13 @@ s32 func_8094F904(EnGm* this, GlobalContext* globalCtx, struct_80133038_arg2* ar
s32 ret = false;
this->unk_234 = NULL;
sp50 = func_8094DF90(globalCtx, arg2->unk0);
door = func_8094DF90(globalCtx, arg2->unk0);
if (D_80951A0C[arg2->unk0] >= 0) {
this->unk_234 = func_8013BB34(globalCtx, sp55, D_80951A0C[arg2->unk0]);
}
if ((sp50 != NULL) && (sp50->actor.update != NULL)) {
if ((door != NULL) && (door->dyna.actor.update != NULL)) {
if (this->unk_234 != NULL) {
sp4C = (Vec3s*)Lib_SegmentedToVirtual(this->unk_234->points);
Math_Vec3s_ToVec3f(&sp40, &sp4C[0]);
@ -946,7 +946,7 @@ s32 func_8094F904(EnGm* this, GlobalContext* globalCtx, struct_80133038_arg2* ar
this->actor.world.rot.y = Math_Vec3f_Yaw(&sp40, &sp34);
Math_Vec3f_Copy(&this->actor.world.pos, &sp40);
if (ABS_ALT(BINANG_SUB(this->actor.world.rot.y, sp50->actor.shape.rot.y)) <= 0x4000) {
if (ABS_ALT(BINANG_SUB(this->actor.world.rot.y, door->dyna.actor.shape.rot.y)) <= 0x4000) {
this->unk_261 = -75;
} else {
this->unk_261 = 75;
@ -1357,18 +1357,18 @@ s32 func_80950690(EnGm* this, GlobalContext* globalCtx) {
}
s32 func_80950804(EnGm* this, GlobalContext* globalCtx) {
EnDoor* sp44;
EnDoor* door;
Vec3f sp38;
s32 pad;
f32 temp_f0;
sp44 = func_8094DF90(globalCtx, this->unk_258);
door = func_8094DF90(globalCtx, this->unk_258);
if (!func_8013AD6C(globalCtx) && (this->unk_3C4 != 0)) {
if ((sp44 != NULL) && (sp44->actor.update != NULL)) {
if ((door != NULL) && (door->dyna.actor.update != NULL)) {
if ((this->unk_3BA / (f32)this->unk_3B8) <= 0.9f) {
sp44->unk_1A7 = this->unk_261;
door->unk_1A7 = this->unk_261;
} else {
sp44->unk_1A7 = 0;
door->unk_1A7 = 0;
}
}

View File

@ -511,7 +511,7 @@ s32 func_80BF1D78(EnIg* this, GlobalContext* globalCtx, struct_80133038_arg2* ar
s32 func_80BF1DF4(EnIg* this, GlobalContext* globalCtx, struct_80133038_arg2* arg2) {
u16 sp56 = gSaveContext.time - 0x3FFC;
u8 sp55 = ENIG_GET_FF(&this->actor);
EnDoor* sp50;
EnDoor* door;
Vec3s* sp4C;
Vec3f sp40;
Vec3f sp34;
@ -519,13 +519,13 @@ s32 func_80BF1DF4(EnIg* this, GlobalContext* globalCtx, struct_80133038_arg2* ar
s32 ret = false;
this->unk_274 = NULL;
sp50 = func_80BF1200(globalCtx, arg2->unk0);
door = func_80BF1200(globalCtx, arg2->unk0);
if (D_80BF3318[arg2->unk0] >= 0) {
this->unk_274 = func_8013BB34(globalCtx, sp55, D_80BF3318[arg2->unk0]);
}
if ((sp50 != NULL) && (sp50->actor.update != NULL)) {
if ((door != NULL) && (door->dyna.actor.update != NULL)) {
if (this->unk_274 != NULL) {
sp4C = Lib_SegmentedToVirtual(this->unk_274->points);
Math_Vec3s_ToVec3f(&sp40, &sp4C[0]);
@ -535,7 +535,7 @@ s32 func_80BF1DF4(EnIg* this, GlobalContext* globalCtx, struct_80133038_arg2* ar
this->actor.world.rot.y = Math_Vec3f_Yaw(&sp40, &sp34);
Math_Vec3f_Copy(&this->actor.world.pos, &sp40);
if (ABS_ALT(BINANG_SUB(this->actor.world.rot.y, sp50->actor.shape.rot.y)) <= 0x4000) {
if (ABS_ALT(BINANG_SUB(this->actor.world.rot.y, door->dyna.actor.shape.rot.y)) <= 0x4000) {
this->unk_2A4 = -75;
} else {
this->unk_2A4 = 75;
@ -697,17 +697,17 @@ s32 func_80BF2400(EnIg* this, GlobalContext* globalCtx) {
}
s32 func_80BF2470(EnIg* this, GlobalContext* globalCtx) {
EnDoor* sp44 = func_80BF1200(globalCtx, this->unk_298.unk0);
EnDoor* door = func_80BF1200(globalCtx, this->unk_298.unk0);
Vec3f sp38;
f32 temp;
s32 pad;
if (!func_8013AD6C(globalCtx) && (this->unk_3EC != 0)) {
if ((sp44 != NULL) && (sp44->actor.update != NULL)) {
if ((door != NULL) && (door->dyna.actor.update != NULL)) {
if (((f32)this->unk_3E2 / this->unk_3E0) <= 0.9f) {
sp44->unk_1A7 = this->unk_2A4;
door->unk_1A7 = this->unk_2A4;
} else {
sp44->unk_1A7 = 0;
door->unk_1A7 = 0;
}
}
this->unk_3E2 = CLAMP(this->unk_3E2, 0, this->unk_3E0);

View File

@ -935,7 +935,7 @@ s32 func_80AF8ED4(EnPm* this, GlobalContext* globalCtx, struct_80133038_arg2* ar
s32 func_80AF9008(EnPm* this, GlobalContext* globalCtx, struct_80133038_arg2* arg2) {
u16 sp56 = gSaveContext.time - 0x3FFC;
u8 sp55 = this->actor.params & 0xFF;
EnDoor* sp50;
EnDoor* door;
Vec3s* sp4C;
Vec3f sp40;
Vec3f sp34;
@ -943,12 +943,12 @@ s32 func_80AF9008(EnPm* this, GlobalContext* globalCtx, struct_80133038_arg2* ar
s32 ret = false;
this->unk_234 = NULL;
sp50 = func_80AF7D60(globalCtx, arg2->unk0);
door = func_80AF7D60(globalCtx, arg2->unk0);
if (D_80AFB430[arg2->unk0] >= 0) {
this->unk_234 = func_8013BB34(globalCtx, sp55, D_80AFB430[arg2->unk0]);
}
if ((sp50 != NULL) && (sp50->actor.update != NULL)) {
if ((door != NULL) && (door->dyna.actor.update != NULL)) {
if (this->unk_234 != 0) {
sp4C = (Vec3s*)Lib_SegmentedToVirtual(this->unk_234->points);
Math_Vec3s_ToVec3f(&sp40, &sp4C[0]);
@ -957,7 +957,7 @@ s32 func_80AF9008(EnPm* this, GlobalContext* globalCtx, struct_80133038_arg2* ar
Math_Vec3f_Copy(&this->unk_278, &sp34);
this->actor.world.rot.y = Math_Vec3f_Yaw(&sp40, &sp34);
Math_Vec3f_Copy(&this->actor.world.pos, &sp40);
temp = this->actor.world.rot.y - sp50->actor.shape.rot.y;
temp = this->actor.world.rot.y - door->dyna.actor.shape.rot.y;
if (ABS_ALT(temp) <= 0x4000) {
this->unk_260 = -0x4B;
} else {
@ -1402,17 +1402,17 @@ s32 func_80AF9BF8(EnPm* this, GlobalContext* globalCtx, struct_80133038_arg2* ar
}
s32 func_80AF9D04(EnPm* this, GlobalContext* globalCtx) {
EnDoor* sp44 = func_80AF7D60(globalCtx, this->unk_258);
EnDoor* door = (EnDoor*)func_80AF7D60(globalCtx, this->unk_258);
Vec3f sp38;
Vec3f* sp28;
f32 temp;
if (!func_8013AD6C(globalCtx) && (this->unk_374 != 0)) {
if ((sp44 != NULL) && (sp44->actor.update != NULL)) {
if ((door != NULL) && (door->dyna.actor.update != NULL)) {
if (((f32)this->unk_36E / this->unk_36C) <= 0.9f) {
sp44->unk_1A7 = this->unk_260;
door->unk_1A7 = this->unk_260;
} else {
sp44->unk_1A7 = 0;
door->unk_1A7 = 0;
}
}
this->unk_36E = CLAMP(this->unk_36E, 0, this->unk_36C);

View File

@ -383,7 +383,7 @@ void func_80AECE0C(EnTk* this, GlobalContext* globalCtx) {
}
s32 func_80AECE60(EnTk* this, GlobalContext* globalCtx) {
EnDoor* sp4C4;
EnDoor* door;
f32 spA0[265];
Vec3f sp94;
Vec3f sp88;
@ -436,7 +436,7 @@ s32 func_80AECE60(EnTk* this, GlobalContext* globalCtx) {
this->unk_3D4 = sp7C;
}
sp4C4 = NULL;
door = NULL;
if (!(this->unk_2CA & 0xC00)) {
door1 = NULL;
label:
@ -447,7 +447,7 @@ s32 func_80AECE60(EnTk* this, GlobalContext* globalCtx) {
if (ABS(BINANG_SUB(Actor_YawToPoint(&this->actor, &door1->world.pos), this->actor.shape.rot.y)) <=
0x2000) {
this->unk_2CA |= 0x400;
sp4C4 = (EnDoor*)door1;
door = (EnDoor*)door1;
break;
}
}
@ -460,7 +460,7 @@ s32 func_80AECE60(EnTk* this, GlobalContext* globalCtx) {
door2 = SubS_FindActor(globalCtx, door2, ACTORCAT_DOOR, ACTOR_EN_DOOR);
if (door2 != NULL) {
if (Actor_XZDistanceBetweenActors(&this->actor, door2) <= 160.0f) {
sp4C4 = (EnDoor*)door2;
door = (EnDoor*)door2;
break;
}
door2 = door2->next;
@ -468,19 +468,19 @@ s32 func_80AECE60(EnTk* this, GlobalContext* globalCtx) {
} while (door2 != NULL);
}
if ((sp4C4 != NULL) && (this->unk_2CA & 0x400)) {
if ((door != NULL) && (this->unk_2CA & 0x400)) {
Vec3f sp5C;
Actor_OffsetOfPointInActorCoords(&this->actor, &sp5C, &sp4C4->actor.world.pos);
sp4C4->unk_1A7 = 2;
Actor_OffsetOfPointInActorCoords(&this->actor, &sp5C, &door->dyna.actor.world.pos);
door->unk_1A7 = 2;
if (sp5C.z < -20.0f) {
this->unk_2CA &= ~0x400;
this->unk_2CA |= 0x800;
}
}
if (sp4C4 != NULL) {
if ((this->unk_2CA & 0x800) && (sp4C4->unk_1A7 == 0)) {
if (door != NULL) {
if ((this->unk_2CA & 0x800) && (door->unk_1A7 == 0)) {
this->unk_2CA &= ~0x800;
}
}

View File

@ -247,6 +247,8 @@ animdict = {
"BgCheck_CreateVertexFromVec3f": "BgCheck_Vec3fToVec3s",
"BgCheck_PolygonGetMinY": "CollisionPoly_GetMinY",
"BgCheck_PolygonGetNormal": "CollisionPoly_GetNormalF",
"BcCheck3_BgActorInit": "DynaPolyActor_Init",
"BgCheck3_LoadMesh": "DynaPolyActor_LoadMesh",
"func_800C01B8": "CollisionPoly_GetPointDistanceFromPlane",
"BgCheck_CreateTriNormFromPolygon": "CollisionPoly_GetVertices",
"func_800C02C0": "CollisionPoly_GetVerticesByBgId",
@ -411,6 +413,7 @@ animdict = {
"func_800A81F0": "EffectBlure_AddVertex",
"func_800A8514": "EffectBlure_AddSpace",
"Effect_GetParams": "Effect_GetByIndex",
"func_801343C0": "SkelAnime_DrawTransformFlexOpa",
"func_80134148": "SkelAnime_DrawTransformFlexLimbOpa",
"func_8013AB00": "SubS_DrawTransformFlex",
@ -446,6 +449,7 @@ animdict = {
"skelAnime.prevFrameRot": "skelAnime.prevRot",
"skelAnime.prevFramePos": "skelAnime.prevTransl",
"skelAnime.unk3E": "skelAnime.baseTransl",
"actor.minVelocityY": "actor.terminalVelocity",
"actor.yDistToWater": "actor.depthInWater",
"actor.yDistToPlayer": "actor.playerHeightRel",
@ -464,12 +468,13 @@ animdict = {
"globalCtx->msgCtx.unk1202C": "globalCtx->msgCtx.ocarinaAction",
"globalCtx->msgCtx.unk11F22": "globalCtx->msgCtx.msgMode",
# Variables
"D_0407D590": "gGameplayKeepDrawFlameDL",
"D_801D15B0": "gZeroVec3f",
"D_801D15BC": "gZeroVec3s",
"D_801D1DE0": "gIdentityMtx",
"D_801D1E20": "gIdentityMtxF",
"D_801D15B0" : "gZeroVec3f",
"D_801D15BC" : "gZeroVec3s",
"D_801D1DE0" : "gIdentityMtx",
"D_801D1E20" : "gIdentityMtxF",
"D_04020658" : "gameplay_keep_Anim_020658",
"D_04022B28" : "gDoorSkel",
"D_04023100" : "gDoorCol",
# Structs
"ActorAnimationEntry": "AnimationInfo",
@ -513,20 +518,20 @@ def replace_anim_all(repo):
for filename in files:
if(filename.endswith('.s')):
file = subdir + os.sep + filename
replace_anim(file)
replace_anim(file)
for subdir, dirs, files in os.walk(repo + os.sep + 'data'):
for filename in files:
if(filename.endswith('.s')):
file = subdir + os.sep + filename
replace_anim(file)
for subdir, dirs, files in os.walk(repo + os.sep + 'docs'):
for filename in files:
if(filename.endswith('.md')):
file = subdir + os.sep + filename
replace_anim(file)
for subdir, dirs, files in os.walk(repo + os.sep + 'tools' + os.sep + 'sizes'):
for filename in files:
if(filename.endswith('.csv')):

View File

@ -4960,7 +4960,7 @@
0x808670F0:("func_808670F0",),
0x80867144:("func_80867144",),
0x8086732C:("EnDoor_Update",),
0x80867350:("func_80867350",),
0x80867350:("EnDoor_OverrideLimbDraw",),
0x808674B0:("EnDoor_Draw",),
0x80867BD0:("func_80867BD0",),
0x80867BDC:("func_80867BDC",),

View File

@ -5618,13 +5618,11 @@
0x80867784:("D_80867784","UNK_TYPE1","",0x1),
0x8086778C:("D_8086778C","UNK_PTR","",0x4),
0x8086780C:("En_Door_InitVars","UNK_TYPE1","",0x1),
0x8086782C:("D_8086782C","UNK_TYPE2","",0x2),
0x80867886:("D_80867886","UNK_TYPE1","",0x1),
0x8086788A:("D_8086788A","UNK_TYPE2","",0x2),
0x80867954:("D_80867954","UNK_TYPE1","",0x1),
0x80867964:("D_80867964","UNK_TYPE1","",0x1),
0x8086798C:("D_8086798C","UNK_TYPE1","",0x1),
0x80867998:("D_80867998","UNK_TYPE1","",0x1),
0x8086782C:("sObjInfo","UNK_TYPE2","",0x126),
0x80867954:("sInitChain","UNK_TYPE1","",0x1),
0x80867964:("sAnimations","AnimationHeader","[10]",0x28),
0x8086798C:("sAnimOpenFrames","u8","[10]",0x10),
0x80867998:("sAnimCloseFrames","u8","[10]",0x10),
0x808679A4:("D_808679A4","UNK_TYPE1","",0x1),
0x80867A20:("D_80867A20","f32","",0x4),
0x80867BC0:("D_80867BC0","UNK_TYPE1","",0x1),

View File

@ -396,8 +396,6 @@ D_04020658 = 0x04020658;
D_04020BB8 = 0x04020BB8;
D_04020D00 = 0x04020D00;
D_040221B8 = 0x040221B8;
D_04022B28 = 0x04022B28;
D_04023100 = 0x04023100;
D_04023130 = 0x04023130;
D_04023210 = 0x04023210;
D_04023288 = 0x04023288;