mirror of https://github.com/zeldaret/mm.git
parent
7ea2474b71
commit
cabb14e4b7
|
@ -0,0 +1,7 @@
|
||||||
|
<Root>
|
||||||
|
<File Name="ovl_Obj_Smork" BaseAddress="0x80A3D680" RangeStart="0x0C10" RangeEnd="0x0C80">
|
||||||
|
<Array Name="ovl_Obj_Smork_Vtx_000C10" Count="7" Offset="0xC10">
|
||||||
|
<Vtx/>
|
||||||
|
</Array>
|
||||||
|
</File>
|
||||||
|
</Root>
|
3
spec
3
spec
|
@ -2788,8 +2788,7 @@ beginseg
|
||||||
name "ovl_Obj_Smork"
|
name "ovl_Obj_Smork"
|
||||||
compress
|
compress
|
||||||
include "build/src/overlays/actors/ovl_Obj_Smork/z_obj_smork.o"
|
include "build/src/overlays/actors/ovl_Obj_Smork/z_obj_smork.o"
|
||||||
include "build/data/ovl_Obj_Smork/ovl_Obj_Smork.data.o"
|
include "build/src/overlays/actors/ovl_Obj_Smork/ovl_Obj_Smork_reloc.o"
|
||||||
include "build/data/ovl_Obj_Smork/ovl_Obj_Smork.reloc.o"
|
|
||||||
endseg
|
endseg
|
||||||
|
|
||||||
beginseg
|
beginseg
|
||||||
|
|
|
@ -66,7 +66,7 @@ typedef enum {
|
||||||
|
|
||||||
typedef struct EnKanban {
|
typedef struct EnKanban {
|
||||||
/* 0x000 */ Actor actor;
|
/* 0x000 */ Actor actor;
|
||||||
/* 0x144 */ UNK_TYPE1 unk144[4]; // actionFunc?
|
/* 0x144 */ UNK_TYPE1 unk_144[4]; // actionFunc?
|
||||||
/* 0x148 */ u8 frameCount;
|
/* 0x148 */ u8 frameCount;
|
||||||
/* 0x14A */ s16 airTimer;
|
/* 0x14A */ s16 airTimer;
|
||||||
/* 0x14C */ u8 actionState;
|
/* 0x14C */ u8 actionState;
|
||||||
|
|
|
@ -5,6 +5,7 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "z_obj_smork.h"
|
#include "z_obj_smork.h"
|
||||||
|
#include "objects/object_f53_obj/object_f53_obj.h"
|
||||||
|
|
||||||
#define FLAGS (ACTOR_FLAG_10 | ACTOR_FLAG_20)
|
#define FLAGS (ACTOR_FLAG_10 | ACTOR_FLAG_20)
|
||||||
|
|
||||||
|
@ -15,7 +16,6 @@ void ObjSmork_Destroy(Actor* thisx, GlobalContext* globalCtx);
|
||||||
void ObjSmork_Update(Actor* thisx, GlobalContext* globalCtx);
|
void ObjSmork_Update(Actor* thisx, GlobalContext* globalCtx);
|
||||||
void ObjSmork_Draw(Actor* thisx, GlobalContext* globalCtx);
|
void ObjSmork_Draw(Actor* thisx, GlobalContext* globalCtx);
|
||||||
|
|
||||||
#if 0
|
|
||||||
const ActorInit Obj_Smork_InitVars = {
|
const ActorInit Obj_Smork_InitVars = {
|
||||||
ACTOR_OBJ_SMORK,
|
ACTOR_OBJ_SMORK,
|
||||||
ACTORCAT_PROP,
|
ACTORCAT_PROP,
|
||||||
|
@ -28,20 +28,125 @@ const ActorInit Obj_Smork_InitVars = {
|
||||||
(ActorFunc)ObjSmork_Draw,
|
(ActorFunc)ObjSmork_Draw,
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif
|
#include "overlays/ovl_Obj_Smork/ovl_Obj_Smork.c"
|
||||||
|
|
||||||
extern UNK_TYPE D_06001C00;
|
u8 func_80A3D680(s16 arg0) {
|
||||||
|
u8 ret = 0;
|
||||||
|
s16 temp_f18 = TIME_TO_MINUTES_F(gSaveContext.save.time);
|
||||||
|
s32 hours = temp_f18 / 60;
|
||||||
|
s32 minutes = temp_f18 % 60;
|
||||||
|
|
||||||
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Obj_Smork/func_80A3D680.s")
|
if (hours >= 16) {
|
||||||
|
if ((hours == 16) && (minutes < arg0)) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Obj_Smork/func_80A3D940.s")
|
if (hours >= 20) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Obj_Smork/func_80A3D9C4.s")
|
if ((hours == 19) && (arg0 < minutes)) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
ret = 3;
|
||||||
|
} else if (hours >= 11) {
|
||||||
|
if ((hours == 11) && (minutes < arg0)) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Obj_Smork/ObjSmork_Init.s")
|
if (hours >= 14) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Obj_Smork/ObjSmork_Destroy.s")
|
if ((hours == 13) && (arg0 < minutes)) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
ret = 2;
|
||||||
|
} else if (hours >= 6) {
|
||||||
|
if ((hours == 6) && (minutes < arg0)) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
if (hours >= 9) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Obj_Smork/ObjSmork_Update.s")
|
if ((hours == 8) && (arg0 < minutes)) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
ret = 1;
|
||||||
|
}
|
||||||
|
|
||||||
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Obj_Smork/ObjSmork_Draw.s")
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
void func_80A3D940(ObjSmork* this) {
|
||||||
|
u8 temp_v0 = func_80A3D680(this->unk_1C6);
|
||||||
|
|
||||||
|
if (temp_v0 != this->unk_1C4) {
|
||||||
|
this->unk_1C4 = temp_v0;
|
||||||
|
this->unk_1C6 = Rand_S16Offset(0, 59);
|
||||||
|
}
|
||||||
|
|
||||||
|
Math_ApproachF(&this->unk_1B8, (this->unk_1C4 == 0) ? 0.0f : 1.0f, 0.02f, 1000.0f);
|
||||||
|
}
|
||||||
|
|
||||||
|
void func_80A3D9C4(ObjSmork* this, GlobalContext* globalCtx) {
|
||||||
|
u8 sp57;
|
||||||
|
u8 sp56;
|
||||||
|
s32 i;
|
||||||
|
|
||||||
|
this->unk_1BC += 1.8f;
|
||||||
|
this->unk_1C0 += 0.6f;
|
||||||
|
|
||||||
|
sp57 = 127 - (u8)this->unk_1BC;
|
||||||
|
sp56 = 127 - (u8)this->unk_1C0;
|
||||||
|
|
||||||
|
this->unk_1B8 = CLAMP(this->unk_1B8, 0.0f, 1.0f);
|
||||||
|
|
||||||
|
for (i = 0; i < ARRAY_COUNT(this->unk_148); i++) {
|
||||||
|
this->unk_148[i].v.cn[3] = ovl_Obj_Smork_Vtx_000C10[i].v.cn[3] * this->unk_1B8;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (this->unk_1B8 > 0.0f) {
|
||||||
|
Matrix_InsertTranslation(this->actor.world.pos.x, this->actor.world.pos.y, this->actor.world.pos.z,
|
||||||
|
MTXMODE_NEW);
|
||||||
|
this->actor.shape.rot.y = BINANG_ROT180(Camera_GetCamDirYaw(GET_ACTIVE_CAM(globalCtx)));
|
||||||
|
Matrix_RotateY(this->actor.shape.rot.y, MTXMODE_APPLY);
|
||||||
|
Matrix_Scale(0.1f, 0.1f, 0.0f, MTXMODE_APPLY);
|
||||||
|
|
||||||
|
OPEN_DISPS(globalCtx->state.gfxCtx);
|
||||||
|
|
||||||
|
func_8012C28C(globalCtx->state.gfxCtx);
|
||||||
|
|
||||||
|
gSPSegment(POLY_XLU_DISP++, 0x08,
|
||||||
|
Gfx_TwoTexScroll(globalCtx->state.gfxCtx, 0, 0, sp57, 0x20, 0x20, 1, 0, sp56, 0x20, 0x20));
|
||||||
|
gSPSegment(POLY_XLU_DISP++, 0x09, Lib_SegmentedToVirtual(this->unk_148));
|
||||||
|
gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(globalCtx->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
|
||||||
|
gSPDisplayList(POLY_XLU_DISP++, object_f53_obj_DL_001C00);
|
||||||
|
|
||||||
|
CLOSE_DISPS(globalCtx->state.gfxCtx);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void ObjSmork_Init(Actor* thisx, GlobalContext* globalCtx) {
|
||||||
|
ObjSmork* this = THIS;
|
||||||
|
|
||||||
|
Lib_MemCpy(this->unk_148, ovl_Obj_Smork_Vtx_000C10, sizeof(Vtx) * ARRAY_COUNT(ovl_Obj_Smork_Vtx_000C10));
|
||||||
|
this->unk_1C6 = Rand_S16Offset(0, 59);
|
||||||
|
this->unk_1C4 = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
void ObjSmork_Destroy(Actor* thisx, GlobalContext* globalCtx) {
|
||||||
|
}
|
||||||
|
|
||||||
|
void ObjSmork_Update(Actor* thisx, GlobalContext* globalCtx) {
|
||||||
|
ObjSmork* this = THIS;
|
||||||
|
|
||||||
|
func_80A3D940(this);
|
||||||
|
}
|
||||||
|
|
||||||
|
void ObjSmork_Draw(Actor* thisx, GlobalContext* globalCtx) {
|
||||||
|
ObjSmork* this = THIS;
|
||||||
|
|
||||||
|
func_80A3D9C4(this, globalCtx);
|
||||||
|
}
|
||||||
|
|
|
@ -7,7 +7,13 @@ struct ObjSmork;
|
||||||
|
|
||||||
typedef struct ObjSmork {
|
typedef struct ObjSmork {
|
||||||
/* 0x000 */ Actor actor;
|
/* 0x000 */ Actor actor;
|
||||||
/* 0x144 */ char unk_144[0x84];
|
/* 0x144 */ UNK_TYPE1 unk_144[4];
|
||||||
|
/* 0x148 */ Vtx unk_148[7];
|
||||||
|
/* 0x1B8 */ f32 unk_1B8;
|
||||||
|
/* 0x1BC */ f32 unk_1BC;
|
||||||
|
/* 0x1C0 */ f32 unk_1C0;
|
||||||
|
/* 0x1C4 */ u8 unk_1C4;
|
||||||
|
/* 0x1C6 */ s16 unk_1C6;
|
||||||
} ObjSmork; // size = 0x1C8
|
} ObjSmork; // size = 0x1C8
|
||||||
|
|
||||||
extern const ActorInit Obj_Smork_InitVars;
|
extern const ActorInit Obj_Smork_InitVars;
|
||||||
|
|
|
@ -1721,10 +1721,6 @@ D_060048D0 = 0x060048D0;
|
||||||
|
|
||||||
D_060011E0 = 0x060011E0;
|
D_060011E0 = 0x060011E0;
|
||||||
|
|
||||||
// ovl_Obj_Smork
|
|
||||||
|
|
||||||
D_06001C00 = 0x06001C00;
|
|
||||||
|
|
||||||
// ovl_Obj_Takaraya_Wall
|
// ovl_Obj_Takaraya_Wall
|
||||||
|
|
||||||
D_06000B70 = 0x06000B70;
|
D_06000B70 = 0x06000B70;
|
||||||
|
|
Loading…
Reference in New Issue