summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorKristopher Early <1191258+MrPolymorph@users.noreply.github.com>2022-03-26 01:00:21 +0000
committerGitHub <noreply@github.com>2022-03-26 01:00:21 +0000
commitad9e6e2ae5c2284b08ca186bb5b072333bf792ea (patch)
tree7b8e5a2c965cb1999fdce3ac10ec39825df68084 /src
parentfa8c723da8b3ca1265a568a3d96719a6ca538eb6 (diff)
ovl_Obj_Yasi (#719)
* parking * z_obj_yasi successfully decompiled and matched * removed commented code. * more cleanup.. * Code Styling changes. * Swapped to use BINANG_SUB macro. * Formatting. * addressing PR comments * formatting
Diffstat (limited to 'src')
-rw-r--r--src/overlays/actors/ovl_Obj_Yasi/z_obj_yasi.c71
-rw-r--r--src/overlays/actors/ovl_Obj_Yasi/z_obj_yasi.h5
2 files changed, 63 insertions, 13 deletions
diff --git a/src/overlays/actors/ovl_Obj_Yasi/z_obj_yasi.c b/src/overlays/actors/ovl_Obj_Yasi/z_obj_yasi.c
index 5668371fb..3ed787918 100644
--- a/src/overlays/actors/ovl_Obj_Yasi/z_obj_yasi.c
+++ b/src/overlays/actors/ovl_Obj_Yasi/z_obj_yasi.c
@@ -5,17 +5,19 @@
*/
#include "z_obj_yasi.h"
+#include "objects/object_obj_yasi/object_obj_yasi.h"
#define FLAGS 0x00000000
#define THIS ((ObjYasi*)thisx)
+#define CAN_DROP_NUT(thisx) (thisx->params < 0)
+
void ObjYasi_Init(Actor* thisx, GlobalContext* globalCtx);
void ObjYasi_Destroy(Actor* thisx, GlobalContext* globalCtx);
void ObjYasi_Update(Actor* thisx, GlobalContext* globalCtx);
void ObjYasi_Draw(Actor* thisx, GlobalContext* globalCtx);
-#if 0
const ActorInit Obj_Yasi_InitVars = {
ACTOR_OBJ_YASI,
ACTORCAT_PROP,
@@ -28,25 +30,72 @@ const ActorInit Obj_Yasi_InitVars = {
(ActorFunc)ObjYasi_Draw,
};
-// static InitChainEntry sInitChain[] = {
-static InitChainEntry D_80BB4D90[] = {
+static InitChainEntry sInitChain[] = {
ICHAIN_VEC3F_DIV1000(scale, 100, ICHAIN_CONTINUE),
ICHAIN_F32(uncullZoneForward, 4000, ICHAIN_CONTINUE),
ICHAIN_F32(uncullZoneScale, 400, ICHAIN_CONTINUE),
ICHAIN_F32(uncullZoneDownward, 800, ICHAIN_STOP),
};
-#endif
+void ObjYasi_Init(Actor* thisx, GlobalContext* globalCtx) {
+ ObjYasi* this = THIS;
+
+ Actor_ProcessInitChain(&this->dyna.actor, sInitChain);
+ DynaPolyActor_Init(&this->dyna, 0);
+ DynaPolyActor_LoadMesh(globalCtx, &this->dyna, &object_obj_yasi_Colheader_001428);
+
+ this->dyna.actor.home.rot.y = 0;
+
+ if (OBJYASI_IS_WIDE(thisx)) {
+ this->dyna.actor.scale.x = 0.2f;
+ this->dyna.actor.scale.z = 0.2f;
+ }
+}
+
+void ObjYasi_Destroy(Actor* thisx, GlobalContext* globalCtx) {
+ ObjYasi* this = THIS;
+
+ DynaPoly_DeleteBgActor(globalCtx, &globalCtx->colCtx.dyna, this->dyna.bgId);
+}
-extern InitChainEntry D_80BB4D90[];
+void ObjYasi_Update(Actor* thisx, GlobalContext* globalCtx) {
+ ObjYasi* this = THIS;
+ s16 temp;
+ Vec3f dropPos;
-extern UNK_TYPE D_06000360;
-extern UNK_TYPE D_06001428;
+ if (this->dyna.actor.home.rot.z != 0) {
+ if (CAN_DROP_NUT(thisx)) {
+ if (Rand_ZeroOne() < 0.5f) {
+ dropPos.x = this->dyna.actor.world.pos.x;
+ dropPos.y = this->dyna.actor.world.pos.y + 280.0f;
+ dropPos.z = this->dyna.actor.world.pos.z;
+ Item_DropCollectible(globalCtx, &dropPos, ITEM00_NUTS_1);
+ }
+ }
+ this->dyna.actor.home.rot.y = GET_PLAYER(globalCtx)->actor.shape.rot.y;
+ this->dyna.actor.home.rot.x = 400;
+ this->dyna.actor.home.rot.z = 0;
+ }
+ temp = (s16)(this->dyna.actor.shape.rot.x * 0.1f);
+ this->dyna.actor.home.rot.x -= temp;
+ this->dyna.actor.shape.rot.x +=
+ BINANG_SUB(this->dyna.actor.home.rot.x, (s16)(this->dyna.actor.shape.rot.x * 0.08f));
+}
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Obj_Yasi/ObjYasi_Init.s")
+void ObjYasi_Draw(Actor* thisx, GlobalContext* globalCtx) {
+ ObjYasi* this = THIS;
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Obj_Yasi/ObjYasi_Destroy.s")
+ Matrix_InsertTranslation(this->dyna.actor.world.pos.x, this->dyna.actor.world.pos.y, this->dyna.actor.world.pos.z,
+ MTXMODE_NEW);
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Obj_Yasi/ObjYasi_Update.s")
+ if (this->dyna.actor.shape.rot.x != 0) {
+ Matrix_RotateY(this->dyna.actor.home.rot.y, MTXMODE_APPLY);
+ Matrix_InsertXRotation_s(this->dyna.actor.shape.rot.x, MTXMODE_APPLY);
+ Matrix_RotateY(BINANG_SUB(this->dyna.actor.shape.rot.y, this->dyna.actor.home.rot.y), MTXMODE_APPLY);
+ } else {
+ Matrix_RotateY(this->dyna.actor.shape.rot.y, MTXMODE_APPLY);
+ }
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Obj_Yasi/ObjYasi_Draw.s")
+ Matrix_Scale(0.1f, 0.1f, 0.1f, MTXMODE_APPLY);
+ Gfx_DrawDListOpa(globalCtx, object_obj_yasi_DL_000360);
+}
diff --git a/src/overlays/actors/ovl_Obj_Yasi/z_obj_yasi.h b/src/overlays/actors/ovl_Obj_Yasi/z_obj_yasi.h
index 3671a776c..f4ab9ca9c 100644
--- a/src/overlays/actors/ovl_Obj_Yasi/z_obj_yasi.h
+++ b/src/overlays/actors/ovl_Obj_Yasi/z_obj_yasi.h
@@ -6,10 +6,11 @@
struct ObjYasi;
typedef struct ObjYasi {
- /* 0x000 */ Actor actor;
- /* 0x144 */ char unk_144[0x18];
+ /* 0x000 */ DynaPolyActor dyna;
} ObjYasi; // size = 0x15C
extern const ActorInit Obj_Yasi_InitVars;
+#define OBJYASI_IS_WIDE(thisx) ((thisx)->params & 1)
+
#endif // Z_OBJ_YASI_H