mirror of https://github.com/zeldaret/mm.git
Ovl_En_Drs OK and Documented (#669)
* done * merged master, some cleanup * more cleanup * review 1 * removed the skelAnime temp * format * prototype newline * globalctx2
This commit is contained in:
parent
cf98c4e7e8
commit
aa6c316102
|
|
@ -1,20 +1,21 @@
|
|||
<Root>
|
||||
<!-- Object for the mannequin inside Anju's room which holds her wedding dress -->
|
||||
<File Name="object_drs" Segment="6">
|
||||
<Animation Name="object_drs_Anim_00001C" Offset="0x1C" />
|
||||
<DList Name="object_drs_DL_003120" Offset="0x3120" />
|
||||
<DList Name="object_drs_DL_003EA8" Offset="0x3EA8" />
|
||||
<DList Name="object_drs_DL_003F80" Offset="0x3F80" />
|
||||
<Texture Name="object_drs_Tex_004008" OutName="tex_004008" Format="rgba16" Width="16" Height="16" Offset="0x4008" />
|
||||
<Texture Name="object_drs_Tex_004208" OutName="tex_004208" Format="rgba16" Width="16" Height="16" Offset="0x4208" />
|
||||
<Texture Name="object_drs_Tex_004408" OutName="tex_004408" Format="i8" Width="8" Height="8" Offset="0x4408" />
|
||||
<Texture Name="object_drs_Tex_004448" OutName="tex_004448" Format="i8" Width="32" Height="32" Offset="0x4448" />
|
||||
<Texture Name="object_drs_Tex_004848" OutName="tex_004848" Format="rgba16" Width="32" Height="16" Offset="0x4848" />
|
||||
<Texture Name="object_drs_Tex_004C48" OutName="tex_004C48" Format="rgba16" Width="16" Height="16" Offset="0x4C48" />
|
||||
<Texture Name="object_drs_Tex_004E48" OutName="tex_004E48" Format="i8" Width="32" Height="64" Offset="0x4E48" />
|
||||
<Texture Name="object_drs_Tex_005648" OutName="tex_005648" Format="i8" Width="32" Height="32" Offset="0x5648" />
|
||||
<Limb Name="object_drs_Standardlimb_005A48" Type="Standard" Offset="0x5A48" />
|
||||
<Limb Name="object_drs_Standardlimb_005A54" Type="Standard" Offset="0x5A54" />
|
||||
<Limb Name="object_drs_Standardlimb_005A60" Type="Standard" Offset="0x5A60" />
|
||||
<Skeleton Name="object_drs_Skel_005A78" Type="Flex" LimbType="Standard" Offset="0x5A78" />
|
||||
<Animation Name="gWeddingDressMannequinIdleAnim" Offset="0x1C" />
|
||||
<DList Name="gWeddingDressMannequinDL" Offset="0x3120" />
|
||||
<DList Name="gWeddingDressMannequinPatternDL" Offset="0x3EA8" />
|
||||
<DList Name="gWeddingDressMannequinMaskDL" Offset="0x3F80" />
|
||||
<Texture Name="gWeddingDressMannequinWoodTex" OutName="wood" Format="rgba16" Width="16" Height="16" Offset="0x4008" />
|
||||
<Texture Name="gWeddingDressMannequinWoodCornerTex" OutName="wood_corner" Format="rgba16" Width="16" Height="16" Offset="0x4208" />
|
||||
<Texture Name="gWeddingDressMannequinShoulderGradientTex" OutName="drs_shoulder_gradient" Format="i8" Width="8" Height="8" Offset="0x4408" />
|
||||
<Texture Name="gWeddingDressMannequinPatternTex" OutName="pattern" Format="i8" Width="32" Height="32" Offset="0x4448" />
|
||||
<Texture Name="gWeddingDressMannequinVineTex" OutName="vine" Format="rgba16" Width="32" Height="16" Offset="0x4848" />
|
||||
<Texture Name="gWeddingDressMannequinFlowerTex" OutName="flower" Format="rgba16" Width="16" Height="16" Offset="0x4C48" />
|
||||
<Texture Name="gWeddingDressMannequinFabricHighlightsTex" OutName="fabric_highlight" Format="i8" Width="32" Height="64" Offset="0x4E48" />
|
||||
<Texture Name="gWeddingDressMannequinFabricSheerTex" OutName="fabric_sheer" Format="i8" Width="32" Height="32" Offset="0x5648" />
|
||||
<Limb Name="gWeddingDressMannequinLimb" Type="Standard" EnumName="WEDDING_DRESS_MANNEQUIN_LIMB" Offset="0x5A48" />
|
||||
<Limb Name="gWeddingDressMannequinMaskLimb" Type="Standard" EnumName="WEDDING_DRESS_MANNEQUIN_LIMB_MASK" Offset="0x5A54" />
|
||||
<Limb Name="gWeddingDressMannequinPatternLimb" Type="Standard" EnumName="WEDDING_DRESS_MANNEQUIN_LIMB_PATTERN" Offset="0x5A60" />
|
||||
<Skeleton Name="gWeddingDressMannequinSkel" Type="Flex" LimbType="Standard" LimbNone="WEDDING_DRESS_MANNEQUIN_LIMB_NONE" LimbMax="WEDDING_DRESS_MANNEQUIN_LIMB_MAX" EnumName="WeddingDressMannequinLimbs" Offset="0x5A78" />
|
||||
</File>
|
||||
</Root>
|
||||
|
|
|
|||
|
|
@ -1,9 +1,10 @@
|
|||
<Root>
|
||||
<!-- Object for the Moon Mask -->
|
||||
<File Name="object_msmo" Segment="6">
|
||||
<DList Name="object_msmo_DL_000E70" Offset="0xE70" />
|
||||
<Texture Name="object_msmo_Tex_001320" OutName="tex_001320" Format="i8" Width="16" Height="16" Offset="0x1320" />
|
||||
<Texture Name="object_msmo_Tex_001420" OutName="tex_001420" Format="i8" Width="16" Height="16" Offset="0x1420" />
|
||||
<Texture Name="object_msmo_Tex_001520" OutName="tex_001520" Format="i8" Width="16" Height="16" Offset="0x1520" />
|
||||
<Texture Name="object_msmo_Tex_001620" OutName="tex_001620" Format="i4" Width="16" Height="16" Offset="0x1620" />
|
||||
<DList Name="gMoonMaskDL" Offset="0xE70" />
|
||||
<Texture Name="gMoonMaskEyeTex" OutName="eye" Format="i8" Width="16" Height="16" Offset="0x1320" />
|
||||
<Texture Name="gMoonMaskPatternTex" OutName="pattern" Format="i8" Width="16" Height="16" Offset="0x1420" />
|
||||
<Texture Name="gMoonMaskSilverTex" OutName="silver" Format="i8" Width="16" Height="16" Offset="0x1520" />
|
||||
<Texture Name="gMoonMaskGoldTex" OutName="gold" Format="i4" Width="16" Height="16" Offset="0x1620" />
|
||||
</File>
|
||||
</Root>
|
||||
|
|
|
|||
3
spec
3
spec
|
|
@ -5308,8 +5308,7 @@ beginseg
|
|||
name "ovl_En_Drs"
|
||||
compress
|
||||
include "build/src/overlays/actors/ovl_En_Drs/z_en_drs.o"
|
||||
include "build/data/ovl_En_Drs/ovl_En_Drs.data.o"
|
||||
include "build/data/ovl_En_Drs/ovl_En_Drs.reloc.o"
|
||||
include "build/src/overlays/actors/ovl_En_Drs/ovl_En_Drs_reloc.o"
|
||||
endseg
|
||||
|
||||
beginseg
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
/*
|
||||
* File: z_en_drs.c
|
||||
* Overlay: ovl_En_Drs
|
||||
* Description: Wedding dress manequin
|
||||
* Description: Anju's Wedding Dress Mannequin
|
||||
*/
|
||||
|
||||
#include "z_en_drs.h"
|
||||
|
|
@ -13,11 +13,10 @@
|
|||
void EnDrs_Init(Actor* thisx, GlobalContext* globalCtx);
|
||||
void EnDrs_Destroy(Actor* thisx, GlobalContext* globalCtx);
|
||||
void EnDrs_Update(Actor* thisx, GlobalContext* globalCtx);
|
||||
void EnDrs_Draw(Actor* thisx, GlobalContext* globalCtx);
|
||||
|
||||
void func_80C1E2D4(EnDrs* this, GlobalContext* globalCtx);
|
||||
void func_80C1E3DC(EnDrs* this, GlobalContext* globalCtx);
|
||||
void EnDrs_Idle(EnDrs* this, GlobalContext* globalCtx);
|
||||
|
||||
#if 0
|
||||
const ActorInit En_Drs_InitVars = {
|
||||
ACTOR_EN_DRS,
|
||||
ACTORCAT_PROP,
|
||||
|
|
@ -30,36 +29,98 @@ const ActorInit En_Drs_InitVars = {
|
|||
(ActorFunc)NULL,
|
||||
};
|
||||
|
||||
// static ColliderCylinderInit sCylinderInit = {
|
||||
static ColliderCylinderInit D_80C1E5E0 = {
|
||||
{ COLTYPE_HIT1, AT_NONE, AC_NONE, OC1_ON | OC1_TYPE_ALL, OC2_TYPE_1, COLSHAPE_CYLINDER, },
|
||||
{ ELEMTYPE_UNK1, { 0x00000000, 0x00, 0x00 }, { 0x00000000, 0x00, 0x00 }, TOUCH_NONE | TOUCH_SFX_NORMAL, BUMP_NONE, OCELEM_ON, },
|
||||
static ColliderCylinderInit sCylinderInit = {
|
||||
{
|
||||
COLTYPE_HIT1,
|
||||
AT_NONE,
|
||||
AC_NONE,
|
||||
OC1_ON | OC1_TYPE_ALL,
|
||||
OC2_TYPE_1,
|
||||
COLSHAPE_CYLINDER,
|
||||
},
|
||||
{
|
||||
ELEMTYPE_UNK1,
|
||||
{ 0x00000000, 0x00, 0x00 },
|
||||
{ 0x00000000, 0x00, 0x00 },
|
||||
TOUCH_NONE | TOUCH_SFX_NORMAL,
|
||||
BUMP_NONE,
|
||||
OCELEM_ON,
|
||||
},
|
||||
{ 16, 62, 0, { 0, 0, 0 } },
|
||||
};
|
||||
|
||||
// sColChkInfoInit
|
||||
static CollisionCheckInfoInit2 D_80C1E60C = { 0, 0, 0, 0, MASS_IMMOVABLE };
|
||||
static CollisionCheckInfoInit2 sColChkInfoInit = { 0, 0, 0, 0, MASS_IMMOVABLE };
|
||||
|
||||
#endif
|
||||
static AnimationInfoS sAnimations = { &gWeddingDressMannequinIdleAnim, 1.0f, 0, -1, ANIMMODE_LOOP, 0 };
|
||||
|
||||
extern ColliderCylinderInit D_80C1E5E0;
|
||||
extern CollisionCheckInfoInit2 D_80C1E60C;
|
||||
void EnDrs_CollisionUpdate(EnDrs* this, GlobalContext* globalCtx) {
|
||||
Collider_UpdateCylinder(&this->actor, &this->collider);
|
||||
CollisionCheck_SetOC(globalCtx, &globalCtx->colChkCtx, &this->collider.base);
|
||||
}
|
||||
|
||||
extern UNK_TYPE D_06000E70;
|
||||
extern UNK_TYPE D_06005A78;
|
||||
void EnDrs_Setup(EnDrs* this, GlobalContext* globalCtx) {
|
||||
s32 pad[2];
|
||||
|
||||
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Drs/func_80C1E290.s")
|
||||
if ((this->moonMaskObjBankIndex >= 0) && SubS_IsObjectLoaded(this->moonMaskObjBankIndex, globalCtx)) {
|
||||
ActorShape_Init(&this->actor.shape, 0.0f, NULL, 0.0f);
|
||||
SkelAnime_InitFlex(globalCtx, &this->skelAnime, &gWeddingDressMannequinSkel, NULL, this->jointTable,
|
||||
this->morphTable, WEDDING_DRESS_MANNEQUIN_LIMB_MAX);
|
||||
SubS_ChangeAnimationByInfoS(&this->skelAnime, &sAnimations, 0);
|
||||
Collider_InitAndSetCylinder(globalCtx, &this->collider, &this->actor, &sCylinderInit);
|
||||
CollisionCheck_SetInfo2(&this->actor.colChkInfo, DamageTable_Get(0x16), &sColChkInfoInit);
|
||||
Actor_SetScale(&this->actor, 0.01f);
|
||||
this->actor.draw = EnDrs_Draw;
|
||||
this->actionFunc = EnDrs_Idle;
|
||||
}
|
||||
}
|
||||
|
||||
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Drs/func_80C1E2D4.s")
|
||||
void EnDrs_Idle(EnDrs* this, GlobalContext* globalCtx) {
|
||||
}
|
||||
|
||||
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Drs/func_80C1E3DC.s")
|
||||
void EnDrs_Init(Actor* thisx, GlobalContext* globalCtx) {
|
||||
EnDrs* this = THIS;
|
||||
|
||||
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Drs/EnDrs_Init.s")
|
||||
this->moonMaskObjBankIndex = SubS_GetObjectIndex(OBJECT_MSMO, globalCtx);
|
||||
this->actionFunc = EnDrs_Setup;
|
||||
}
|
||||
|
||||
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Drs/EnDrs_Destroy.s")
|
||||
void EnDrs_Destroy(Actor* thisx, GlobalContext* globalCtx) {
|
||||
EnDrs* this = THIS;
|
||||
|
||||
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Drs/EnDrs_Update.s")
|
||||
Collider_DestroyCylinder(globalCtx, &this->collider);
|
||||
}
|
||||
|
||||
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Drs/func_80C1E4B0.s")
|
||||
void EnDrs_Update(Actor* thisx, GlobalContext* globalCtx) {
|
||||
EnDrs* this = THIS;
|
||||
|
||||
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Drs/func_80C1E568.s")
|
||||
this->actionFunc(this, globalCtx);
|
||||
if (this->actor.draw != NULL) {
|
||||
SkelAnime_Update(&this->skelAnime);
|
||||
EnDrs_CollisionUpdate(this, globalCtx);
|
||||
}
|
||||
}
|
||||
|
||||
void EnDrs_PostLimbDraw(GlobalContext* globalCtx2, s32 limbIndex, Gfx** dList, Vec3s* rot, Actor* thisx) {
|
||||
EnDrs* this = THIS;
|
||||
GlobalContext* globalCtx = globalCtx2;
|
||||
s8 temp = this->moonMaskObjBankIndex;
|
||||
s8 temp2 = this->actor.objBankIndex;
|
||||
|
||||
// Anju removes the Moon Mask at the start of the Couple's Mask cutscene
|
||||
// after that it will no longer be rendered.
|
||||
if (!(gSaveContext.weekEventReg[87] & 2) && (limbIndex == WEDDING_DRESS_MANNEQUIN_LIMB_MASK)) {
|
||||
OPEN_DISPS(globalCtx->state.gfxCtx);
|
||||
gSPSegment(POLY_OPA_DISP++, 0x06, globalCtx->objectCtx.status[temp].segment);
|
||||
gSPDisplayList(POLY_OPA_DISP++, &gMoonMaskDL);
|
||||
gSPSegment(POLY_OPA_DISP++, 0x06, globalCtx->objectCtx.status[temp2].segment);
|
||||
CLOSE_DISPS(globalCtx->state.gfxCtx);
|
||||
}
|
||||
}
|
||||
|
||||
void EnDrs_Draw(Actor* thisx, GlobalContext* globalCtx) {
|
||||
EnDrs* this = THIS;
|
||||
|
||||
func_8012C5B0(globalCtx->state.gfxCtx);
|
||||
SkelAnime_DrawFlexOpa(globalCtx, this->skelAnime.skeleton, this->skelAnime.jointTable, this->skelAnime.dListCount,
|
||||
NULL, EnDrs_PostLimbDraw, &this->actor);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -2,17 +2,22 @@
|
|||
#define Z_EN_DRS_H
|
||||
|
||||
#include "global.h"
|
||||
#include "objects/object_drs/object_drs.h"
|
||||
#include "objects/object_msmo/object_msmo.h"
|
||||
|
||||
struct EnDrs;
|
||||
|
||||
typedef void (*EnDrsActionFunc)(struct EnDrs*, GlobalContext*);
|
||||
|
||||
typedef struct EnDrs {
|
||||
/* 0x0000 */ Actor actor;
|
||||
/* 0x0144 */ char unk_144[0x44];
|
||||
/* 0x0188 */ EnDrsActionFunc actionFunc;
|
||||
/* 0x018C */ char unk_18C[0x80];
|
||||
} EnDrs; // size = 0x20C
|
||||
/* 0x000 */ Actor actor;
|
||||
/* 0x144 */ SkelAnime skelAnime;
|
||||
/* 0x188 */ EnDrsActionFunc actionFunc;
|
||||
/* 0x18C */ ColliderCylinder collider;
|
||||
/* 0x1D8 */ Vec3s jointTable[WEDDING_DRESS_MANNEQUIN_LIMB_MAX];
|
||||
/* 0x1F0 */ Vec3s morphTable[WEDDING_DRESS_MANNEQUIN_LIMB_MAX];
|
||||
/* 0x208 */ s8 moonMaskObjBankIndex;
|
||||
} EnDrs; // size = 0x20C */
|
||||
|
||||
extern const ActorInit En_Drs_InitVars;
|
||||
|
||||
|
|
|
|||
|
|
@ -16974,14 +16974,14 @@
|
|||
0x80C1E108:("DmNb_Update",),
|
||||
0x80C1E168:("DmNb_TransformLimbDraw",),
|
||||
0x80C1E17C:("DmNb_Draw",),
|
||||
0x80C1E290:("func_80C1E290",),
|
||||
0x80C1E2D4:("func_80C1E2D4",),
|
||||
0x80C1E3DC:("func_80C1E3DC",),
|
||||
0x80C1E290:("EnDrs_CollisionUpdate",),
|
||||
0x80C1E2D4:("EnDrs_Setup",),
|
||||
0x80C1E3DC:("EnDrs_Idle",),
|
||||
0x80C1E3EC:("EnDrs_Init",),
|
||||
0x80C1E424:("EnDrs_Destroy",),
|
||||
0x80C1E450:("EnDrs_Update",),
|
||||
0x80C1E4B0:("func_80C1E4B0",),
|
||||
0x80C1E568:("func_80C1E568",),
|
||||
0x80C1E4B0:("EnDrs_PostLimbDraw",),
|
||||
0x80C1E568:("EnDrs_Draw",),
|
||||
0x80C1E690:("EnEndingHero_Init",),
|
||||
0x80C1E738:("EnEndingHero_Destroy",),
|
||||
0x80C1E748:("func_80C1E748",),
|
||||
|
|
|
|||
|
|
@ -1272,11 +1272,6 @@ D_801C20C0 = 0x801C20C0;
|
|||
D_06004398 = 0x06004398;
|
||||
D_060048B8 = 0x060048B8;
|
||||
|
||||
// ovl_En_Drs
|
||||
|
||||
D_06000E70 = 0x06000E70;
|
||||
D_06005A78 = 0x06005A78;
|
||||
|
||||
// ovl_En_Ds2n
|
||||
|
||||
D_06008038 = 0x06008038;
|
||||
|
|
|
|||
Loading…
Reference in New Issue