Obj_Smork (#758)

* Obj_Smork

* PR

* PR
This commit is contained in:
Maide 2022-03-29 21:29:35 +01:00 committed by GitHub
parent 7ea2474b71
commit cabb14e4b7
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
6 changed files with 131 additions and 18 deletions

View File

@ -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
View File

@ -2788,8 +2788,7 @@ beginseg
name "ovl_Obj_Smork"
compress
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/data/ovl_Obj_Smork/ovl_Obj_Smork.reloc.o"
include "build/src/overlays/actors/ovl_Obj_Smork/ovl_Obj_Smork_reloc.o"
endseg
beginseg

View File

@ -66,7 +66,7 @@ typedef enum {
typedef struct EnKanban {
/* 0x000 */ Actor actor;
/* 0x144 */ UNK_TYPE1 unk144[4]; // actionFunc?
/* 0x144 */ UNK_TYPE1 unk_144[4]; // actionFunc?
/* 0x148 */ u8 frameCount;
/* 0x14A */ s16 airTimer;
/* 0x14C */ u8 actionState;

View File

@ -5,6 +5,7 @@
*/
#include "z_obj_smork.h"
#include "objects/object_f53_obj/object_f53_obj.h"
#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_Draw(Actor* thisx, GlobalContext* globalCtx);
#if 0
const ActorInit Obj_Smork_InitVars = {
ACTOR_OBJ_SMORK,
ACTORCAT_PROP,
@ -28,20 +28,125 @@ const ActorInit Obj_Smork_InitVars = {
(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);
}

View File

@ -7,7 +7,13 @@ struct ObjSmork;
typedef struct ObjSmork {
/* 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
extern const ActorInit Obj_Smork_InitVars;

View File

@ -1721,10 +1721,6 @@ D_060048D0 = 0x060048D0;
D_060011E0 = 0x060011E0;
// ovl_Obj_Smork
D_06001C00 = 0x06001C00;
// ovl_Obj_Takaraya_Wall
D_06000B70 = 0x06000B70;