mirror of https://github.com/zeldaret/mm.git
ovl_Obj_Boyo OK (#112)
* start * more functions * fix bg thingy * finish boyo * conflict fix1
This commit is contained in:
parent
f0cd2db055
commit
536a484f73
|
|
@ -259,7 +259,10 @@ typedef struct {
|
|||
/* 0xAE7 */ s8 unkAE7;
|
||||
/* 0xAE8 */ UNK_TYPE1 padAE8[0x40];
|
||||
/* 0xB28 */ s16 unkB28;
|
||||
/* 0xB2A */ UNK_TYPE1 padB2A[0x72];
|
||||
/* 0xB2A */ UNK_TYPE1 padB2A[0x56];
|
||||
/* 0xB80 */ f32 unk_B80;
|
||||
/* 0xB84 */ s16 unk_B84;
|
||||
/* 0xB86 */ char unk_B86[0x16];
|
||||
/* 0xB9C */ Vec3f unkB9C;
|
||||
/* 0xBA8 */ UNK_TYPE1 padBA8[0x44];
|
||||
/* 0xBEC */ Vec3f bodyPartsPos[18];
|
||||
|
|
|
|||
|
|
@ -3563,9 +3563,9 @@ SECTIONS
|
|||
ovl_Obj_Boyo : AT(RomLocation)
|
||||
{
|
||||
build/src/overlays/actors/ovl_Obj_Boyo/z_obj_boyo.o(.text)
|
||||
build/asm/overlays/ovl_Obj_Boyo_data.o(.data)
|
||||
build/src/overlays/actors/ovl_Obj_Boyo/z_obj_boyo.o(.data)
|
||||
build/src/overlays/actors/ovl_Obj_Boyo/z_obj_boyo.o(.rodata)
|
||||
build/asm/overlays/ovl_Obj_Boyo_rodata.o(.rodata)
|
||||
build/src/overlays/actors/ovl_Obj_Boyo/z_obj_boyo_overlay.o(.ovl)
|
||||
}
|
||||
SegmentEnd = .;
|
||||
SegmentSize = SegmentEnd - SegmentStart;
|
||||
|
|
|
|||
|
|
@ -110,6 +110,10 @@ D_0600DEF0 = 0x0600DEF0;
|
|||
/* arms_hook */
|
||||
D_0601D960 = 0x0601D960;
|
||||
|
||||
/* z_obj_boyo */
|
||||
D_06000300 = 0x06000300;
|
||||
D_06000E88 = 0x06000E88;
|
||||
|
||||
/* en_ending_hero */
|
||||
D_0600B0CC = 0x0600B0CC;
|
||||
D_06000BE0 = 0x06000BE0;
|
||||
|
|
|
|||
|
|
@ -7,7 +7,9 @@ struct EnBom;
|
|||
|
||||
typedef struct EnBom {
|
||||
/* 0x000 */ Actor actor;
|
||||
/* 0x144 */ char unk_144[0xC0];
|
||||
/* 0x144 */ char unk_144[0xAC];
|
||||
/* 0x1F0 */ s16 timer;
|
||||
/* 0x1F2 */ char unk_1F2[0x12];
|
||||
} EnBom; // size = 0x204
|
||||
|
||||
extern const ActorInit En_Bom_InitVars;
|
||||
|
|
|
|||
|
|
@ -7,7 +7,10 @@ struct EnKaizoku;
|
|||
|
||||
typedef struct EnKaizoku {
|
||||
/* 0x000 */ Actor actor;
|
||||
/* 0x144 */ char unk_144[0x4AC];
|
||||
/* 0x144 */ char unk_144[0x1AC];
|
||||
/* 0x2F0 */ f32 unk_2F0;
|
||||
/* 0x2F4 */ s16 unk_2F4;
|
||||
/* 0x2F6 */ char unk_2F6[0x2FA];
|
||||
} EnKaizoku; // size = 0x5F0
|
||||
|
||||
extern const ActorInit En_Kaizoku_InitVars;
|
||||
|
|
|
|||
|
|
@ -1,15 +1,22 @@
|
|||
/*
|
||||
* File: z_obj_boyo.c
|
||||
* Overlay: ovl_Obj_Boyo
|
||||
* Description: Unused Bumper
|
||||
*/
|
||||
|
||||
#include "z_obj_boyo.h"
|
||||
#include "../ovl_En_Kaizoku/z_en_kaizoku.h"
|
||||
#include "../ovl_En_Bom/z_en_bom.h"
|
||||
|
||||
#define FLAGS 0x00000010
|
||||
|
||||
#define THIS ((ObjBoyo*)thisx)
|
||||
|
||||
void ObjBoyo_Init(Actor* thisx, GlobalContext* globalCtx);
|
||||
void ObjBoyo_Destroy(Actor* thisx, GlobalContext* globalCtx);
|
||||
void ObjBoyo_Update(Actor* thisx, GlobalContext* globalCtx);
|
||||
void ObjBoyo_Destroy(Actor* thisx, GlobalContext* globalCtx2);
|
||||
void ObjBoyo_Update(Actor* thisx, GlobalContext* globalCtx2);
|
||||
void ObjBoyo_Draw(Actor* thisx, GlobalContext* globalCtx);
|
||||
|
||||
/*
|
||||
const ActorInit Obj_Boyo_InitVars = {
|
||||
ACTOR_OBJ_BOYO,
|
||||
ACTORCAT_PROP,
|
||||
|
|
@ -19,22 +26,161 @@ const ActorInit Obj_Boyo_InitVars = {
|
|||
(ActorFunc)ObjBoyo_Init,
|
||||
(ActorFunc)ObjBoyo_Destroy,
|
||||
(ActorFunc)ObjBoyo_Update,
|
||||
(ActorFunc)ObjBoyo_Draw
|
||||
(ActorFunc)ObjBoyo_Draw,
|
||||
};
|
||||
*/
|
||||
|
||||
#pragma GLOBAL_ASM("./asm/non_matchings/overlays/ovl_Obj_Boyo_0x809A5D10/ObjBoyo_Init.asm")
|
||||
static ColliderCylinderInit sCylinderInit = {
|
||||
{
|
||||
COLTYPE_NONE,
|
||||
AT_NONE,
|
||||
AC_ON | AC_HARD | AC_TYPE_PLAYER,
|
||||
OC1_ON | OC1_TYPE_ALL,
|
||||
OC2_TYPE_2,
|
||||
COLSHAPE_CYLINDER,
|
||||
},
|
||||
{
|
||||
ELEMTYPE_UNK0,
|
||||
{ 0x00000000, 0x00, 0x00 },
|
||||
{ 0x01CBFFBE, 0x00, 0x00 },
|
||||
TOUCH_NONE | TOUCH_SFX_NORMAL,
|
||||
BUMP_ON,
|
||||
OCELEM_ON,
|
||||
},
|
||||
{ 60, 140, 0, { 0, 0, 0 } },
|
||||
};
|
||||
|
||||
#pragma GLOBAL_ASM("./asm/non_matchings/overlays/ovl_Obj_Boyo_0x809A5D10/ObjBoyo_Destroy.asm")
|
||||
static InitChainEntry sInitChain[] = {
|
||||
ICHAIN_F32(uncullZoneForward, 4000, ICHAIN_CONTINUE),
|
||||
ICHAIN_F32(uncullZoneScale, 300, ICHAIN_CONTINUE),
|
||||
ICHAIN_F32(uncullZoneDownward, 300, ICHAIN_CONTINUE),
|
||||
ICHAIN_VEC3F_DIV1000(scale, 100, ICHAIN_STOP),
|
||||
};
|
||||
|
||||
#pragma GLOBAL_ASM("./asm/non_matchings/overlays/ovl_Obj_Boyo_0x809A5D10/func_809A5DC0.asm")
|
||||
extern Gfx D_06000300[];
|
||||
extern AnimatedTexture D_06000E88;
|
||||
|
||||
#pragma GLOBAL_ASM("./asm/non_matchings/overlays/ovl_Obj_Boyo_0x809A5D10/func_809A5DE0.asm")
|
||||
void ObjBoyo_Init(Actor* thisx, GlobalContext* globalCtx) {
|
||||
ObjBoyo* this = THIS;
|
||||
|
||||
#pragma GLOBAL_ASM("./asm/non_matchings/overlays/ovl_Obj_Boyo_0x809A5D10/func_809A5E14.asm")
|
||||
Actor_ProcessInitChain(&this->actor, &sInitChain);
|
||||
Collider_InitCylinder(globalCtx, &this->collider);
|
||||
Collider_SetCylinder(globalCtx, &this->collider, &this->actor, &sCylinderInit);
|
||||
Collider_UpdateCylinder(this, &this->collider);
|
||||
this->actor.colChkInfo.mass = MASS_IMMOVABLE;
|
||||
this->unk_190 = Lib_SegmentedToVirtual(&D_06000E88);
|
||||
}
|
||||
|
||||
#pragma GLOBAL_ASM("./asm/non_matchings/overlays/ovl_Obj_Boyo_0x809A5D10/func_809A5E24.asm")
|
||||
void ObjBoyo_Destroy(Actor* thisx, GlobalContext* globalCtx2) {
|
||||
GlobalContext* globalCtx = globalCtx2;
|
||||
ObjBoyo* this = THIS;
|
||||
|
||||
#pragma GLOBAL_ASM("./asm/non_matchings/overlays/ovl_Obj_Boyo_0x809A5D10/ObjBoyo_Update.asm")
|
||||
Collider_DestroyCylinder(globalCtx, &this->collider);
|
||||
}
|
||||
|
||||
#pragma GLOBAL_ASM("./asm/non_matchings/overlays/ovl_Obj_Boyo_0x809A5D10/ObjBoyo_Draw.asm")
|
||||
void ObjBoyo_UpdatePlayerBumpValues(ObjBoyo* this, ActorPlayer* target) {
|
||||
target->unk_B80 = 30.0f;
|
||||
target->unk_B84 = this->actor.yawTowardsPlayer;
|
||||
}
|
||||
|
||||
void ObjBoyo_UpdatePirateBumpValues(ObjBoyo* src, EnKaizoku* target) {
|
||||
target->unk_2F0 = 30.0f;
|
||||
target->unk_2F4 = Actor_YawBetweenActors(src, target);
|
||||
}
|
||||
|
||||
void ObjBoyo_UpdateBombBumpValues(ObjBoyo* src, EnBom* target) {
|
||||
target->timer = 0;
|
||||
}
|
||||
|
||||
BumperCollideInfo sBumperCollideInfo[] = {
|
||||
{ ACTOR_PLAYER, ObjBoyo_UpdatePlayerBumpValues },
|
||||
{ ACTOR_EN_KAIZOKU, ObjBoyo_UpdatePirateBumpValues },
|
||||
{ ACTOR_EN_BOM, ObjBoyo_UpdateBombBumpValues },
|
||||
};
|
||||
|
||||
Actor* ObjBoyo_GetCollidedActor(ObjBoyo* this, GlobalContext* globalCtx, s32* num) {
|
||||
Actor* collideActor;
|
||||
BumperCollideInfo* collideInfo;
|
||||
s32 i;
|
||||
|
||||
if (this->collider.base.ocFlags2 & 1) {
|
||||
*num = 0;
|
||||
return globalCtx->actorCtx.actorList[2].first;
|
||||
}
|
||||
|
||||
if (this->collider.base.ocFlags1 & 2) {
|
||||
for (collideActor = this->collider.base.oc, collideInfo = &sBumperCollideInfo[1], i = 1; i < 3;
|
||||
collideInfo++, i++) {
|
||||
if (collideInfo->id == collideActor->id) {
|
||||
*num = i;
|
||||
return collideActor;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
||||
void ObjBoyo_Update(Actor* thisx, GlobalContext* globalCtx2) {
|
||||
ObjBoyo* this = THIS;
|
||||
GlobalContext* globalCtx = globalCtx2;
|
||||
Actor* target;
|
||||
s32 num;
|
||||
|
||||
target = ObjBoyo_GetCollidedActor(thisx, globalCtx, &num);
|
||||
|
||||
if (target != NULL) {
|
||||
sBumperCollideInfo[num].actorCollideFunc(this, (void*)target);
|
||||
this->unk_194 = 100;
|
||||
this->unk_196 = 3;
|
||||
this->unk_198 = 0.01f;
|
||||
this->unk_19C = this->unk_1A0 = 0.03f;
|
||||
this->unk_1A4 = 0x3F40;
|
||||
this->unk_1A6 = 2000;
|
||||
this->unk_1A8 = 0;
|
||||
this->unk_1AA = 0x2DF7;
|
||||
this->unk_1AC = 600;
|
||||
}
|
||||
|
||||
if (this->unk_194 > 0) {
|
||||
this->unk_194 -= this->unk_196;
|
||||
this->unk_1AA += this->unk_1AC;
|
||||
this->unk_1A8 += this->unk_1AA;
|
||||
|
||||
this->actor.scale.x = this->actor.scale.z =
|
||||
(Math_CosS(this->unk_1A8 + this->unk_1A4) * this->unk_194 * this->unk_19C * this->unk_198) + 0.1f;
|
||||
this->actor.scale.y =
|
||||
(Math_CosS(this->unk_1A8 + this->unk_1A6) * this->unk_194 * this->unk_1A0 * this->unk_198) + 0.1f;
|
||||
} else {
|
||||
Actor_SetScale(&this->actor, 0.1f);
|
||||
|
||||
if (this->collider.base.acFlags & 2) {
|
||||
this->unk_194 = 30;
|
||||
this->unk_196 = 2;
|
||||
this->unk_198 = 0.033333335f;
|
||||
this->unk_19C = 0.012f;
|
||||
this->unk_1A0 = 0.006f;
|
||||
this->unk_1A4 = 0x3F40;
|
||||
this->unk_1A6 = 2000;
|
||||
this->unk_1A8 = 0;
|
||||
this->unk_1AA = 15000;
|
||||
this->unk_1AC = 1600;
|
||||
}
|
||||
}
|
||||
|
||||
this->collider.base.acFlags &= ~2;
|
||||
this->collider.base.ocFlags1 &= ~2;
|
||||
this->collider.base.ocFlags2 &= ~1;
|
||||
|
||||
CollisionCheck_SetOC(globalCtx, &globalCtx->colCheckCtx, &this->collider.base);
|
||||
|
||||
if (thisx->xzDistToPlayer < 2000.0f) {
|
||||
CollisionCheck_SetAC(globalCtx, &globalCtx->colCheckCtx, &this->collider.base);
|
||||
}
|
||||
}
|
||||
|
||||
void ObjBoyo_Draw(Actor* thisx, GlobalContext* globalCtx) {
|
||||
ObjBoyo* this = THIS;
|
||||
|
||||
SceneProc_DrawAllSceneAnimatedTextures(globalCtx, this->unk_190);
|
||||
func_800BDFC0(globalCtx, D_06000300);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -5,9 +5,27 @@
|
|||
|
||||
struct ObjBoyo;
|
||||
|
||||
typedef void (*BumperCollideActorFunc)(struct ObjBoyo*, void*);
|
||||
|
||||
typedef struct {
|
||||
/* 0x0 */ s16 id;
|
||||
/* 0x4 */ BumperCollideActorFunc actorCollideFunc;
|
||||
} BumperCollideInfo;
|
||||
|
||||
typedef struct ObjBoyo {
|
||||
/* 0x000 */ Actor actor;
|
||||
/* 0x144 */ char unk_144[0x6C];
|
||||
/* 0x144 */ ColliderCylinder collider;
|
||||
/* 0x190 */ AnimatedTexture* unk_190;
|
||||
/* 0x194 */ s16 unk_194;
|
||||
/* 0x196 */ s16 unk_196;
|
||||
/* 0x198 */ f32 unk_198;
|
||||
/* 0x19C */ f32 unk_19C;
|
||||
/* 0x1A0 */ f32 unk_1A0;
|
||||
/* 0x1A4 */ s16 unk_1A4;
|
||||
/* 0x1A6 */ s16 unk_1A6;
|
||||
/* 0x1A8 */ s16 unk_1A8;
|
||||
/* 0x1AA */ s16 unk_1AA;
|
||||
/* 0x1AC */ s16 unk_1AC;
|
||||
} ObjBoyo; // size = 0x1B0
|
||||
|
||||
extern const ActorInit Obj_Boyo_InitVars;
|
||||
|
|
|
|||
|
|
@ -10539,7 +10539,7 @@
|
|||
0x809A6150:("Obj_Boyo_InitVars","UNK_TYPE1","",0x1),
|
||||
0x809A6170:("D_809A6170","UNK_TYPE1","",0x1),
|
||||
0x809A619C:("D_809A619C","UNK_TYPE1","",0x1),
|
||||
0x809A61B0:("D_809A61B0","UNK_TYPE1","",0x1),
|
||||
0x809A61B0:("sBumperCollideInfo","UNK_TYPE1","",0x1),
|
||||
0x809A61B4:("D_809A61B4","UNK_TYPE2","",0x2),
|
||||
0x809A61D0:("D_809A61D0","f32","",0x4),
|
||||
0x809A61D4:("D_809A61D4","f32","",0x4),
|
||||
|
|
|
|||
Loading…
Reference in New Issue