1
0
Fork 0
mirror of https://github.com/zeldaret/oot.git synced 2025-08-06 14:20:11 +00:00

Merge branch 'master' into z_en_tk

This commit is contained in:
glank 2020-03-21 12:31:29 +01:00
commit fa4c848cad
72 changed files with 994 additions and 2402 deletions

View file

@ -45,7 +45,7 @@ static ColliderCylinderInit colliderInit =
0x00, 0x00, 0x00, 0x00,
0x00, 0x01, 0x00, 0x00,
0x0032, 0x000A, 0x0000,
0x0000, 0x0000, 0x0000
0x0000, 0x0000, 0x0000,
};
// array of entrance table entries to grotto destinations
@ -53,7 +53,7 @@ static s16 entrances[] = {
0x036D, 0x003F, 0x0598, 0x059C,
0x05A0, 0x05A4, 0x05A8, 0x05AC,
0x05B0, 0x05B4, 0x05B8, 0x05BC,
0x05C0, 0x05C4, 0x05FC
0x05C0, 0x05C4, 0x05FC,
};
// display list

View file

@ -1,14 +1,19 @@
/*
* File: z_en_lightbox.c
* Overlay: ovl_En_Lightbox
* Description:
*/
#include "z_en_lightbox.h"
#define ROOM 0x00
#define FLAGS 0x00000010
void EnLightbox_Init(EnLightbox* this, GlobalContext* globalCtx);
void EnLightbox_Destroy(EnLightbox* this, GlobalContext* globalCtx);
void EnLightbox_Update(EnLightbox* this, GlobalContext* globalCtx);
void EnLightbox_Draw(EnLightbox* this, GlobalContext* globalCtx);
static void EnLightbox_Init(EnLightbox* this, GlobalContext* globalCtx);
static void EnLightbox_Destroy(EnLightbox* this, GlobalContext* globalCtx);
static void EnLightbox_Update(EnLightbox* this, GlobalContext* globalCtx);
static void EnLightbox_Draw(EnLightbox* this, GlobalContext* globalCtx);
/*
const ActorInit En_Lightbox_InitVars =
{
ACTOR_EN_LIGHTBOX,
@ -22,11 +27,105 @@ const ActorInit En_Lightbox_InitVars =
(ActorFunc)EnLightbox_Update,
(ActorFunc)EnLightbox_Draw,
};
*/
#pragma GLOBAL_ASM("asm/non_matchings/overlays/actors/ovl_En_Lightbox/EnLightbox_Init.s")
#pragma GLOBAL_ASM("asm/non_matchings/overlays/actors/ovl_En_Lightbox/EnLightbox_Destroy.s")
extern u32 D_06000B70;
extern u32 D_06001F10;
#pragma GLOBAL_ASM("asm/non_matchings/overlays/actors/ovl_En_Lightbox/EnLightbox_Update.s")
static void EnLightbox_Init(EnLightbox* this, GlobalContext* globalCtx)
{
u32 local_c = 0;
Actor* thisx = &this->dyna.actor;
s32 pad[4];
#pragma GLOBAL_ASM("asm/non_matchings/overlays/actors/ovl_En_Lightbox/EnLightbox_Draw.s")
switch(thisx->params){
case 0:
Actor_SetScale(thisx, 0.025f);
break;
case 1:
Actor_SetScale(thisx, 0.05f);
break;
case 2:
Actor_SetScale(thisx, 0.075f);
break;
case 3:
Actor_SetScale(thisx, 0.1f);
default:
break;
}
thisx->posRot2.pos = thisx->posRot.pos;
thisx->sub_98.unk_10 = 0x1E;
thisx->sub_98.unk_12 = 0x32;
ActorShape_Init(&thisx->shape, 0.0f, ActorShadow_DrawFunc_Circle, 6.0f);
this->dyna.unk_160 = 0;
this->dyna.unk_15C = 0;
thisx->unk_1F = 0;
thisx->gravity = -2.0f;
DynaPolyInfo_Alloc(&D_06001F10, &local_c);
this->dyna.dynaPolyId = DynaPolyInfo_RegisterActor(globalCtx, &globalCtx->colCtx.dyna, thisx, local_c);
}
static void EnLightbox_Destroy(EnLightbox* this, GlobalContext* globalCtx)
{
DynaPolyInfo_Free(globalCtx, &globalCtx->colCtx.dyna, this->dyna.dynaPolyId);
}
static void EnLightbox_Update(EnLightbox* this, GlobalContext* globalCtx)
{
Actor* thisx = &this->dyna.actor;
if (this->dyna.unk_162 != 0)
{
if (func_8002F5A0(thisx, globalCtx))
{
this->dyna.unk_162 = 0;
}
}
else
{
if (func_8002F410(thisx, globalCtx))
{
this->dyna.unk_162++;
}
else
{
if (thisx->speedXZ)
{
if (thisx->bgCheckFlags & 8)
{
thisx->posRot.rot.y = (thisx->posRot.rot.y + thisx->unk_7E) - thisx->posRot.rot.y;
Audio_PlaySoundGeneral(NA_SE_EV_BOMB_BOUND, &thisx->unk_E4, 4, &D_801333E0, &D_801333E0, &D_801333E8);
thisx->speedXZ *= 0.7f;
thisx->bgCheckFlags &= ~0x8;
}
}
if ((thisx->bgCheckFlags & 1) == 0)
{
Math_ApproxF(&thisx->speedXZ, 0, IREG(57) / 100.0f);
}
else
{
Math_ApproxF(&thisx->speedXZ, 0, IREG(58) / 100.0f);
if ((thisx->bgCheckFlags & 2) && (thisx->velocity.y < IREG(59) / 100.0f))
{
Audio_PlaySoundGeneral(NA_SE_EV_BOMB_BOUND, &thisx->unk_E4, 4, &D_801333E0, &D_801333E0, &D_801333E8);
thisx->velocity.y *= IREG(60) / 100.0f;
thisx->bgCheckFlags &= ~0x1;
}
else
{
func_8002F580(thisx, globalCtx);
}
}
}
}
Actor_MoveForward(thisx);
func_8002E4B4(globalCtx, thisx, thisx->sub_98.unk_12, thisx->sub_98.unk_10, thisx->sub_98.unk_10, 0x1D);
thisx->posRot2.pos = thisx->posRot.pos;
}
static void EnLightbox_Draw(EnLightbox* this, GlobalContext* globalCtx)
{
Draw_DListOpa(globalCtx, &D_06000B70);
}

View file

@ -6,8 +6,7 @@
typedef struct
{
/* 0x0000 */ Actor actor;
/* 0x014C */ char unk_14C[0x18];
/* 0x0000 */ DynaPolyActor dyna;
} EnLightbox; // size = 0x0164
extern const ActorInit En_Lightbox_InitVars;

View file

@ -1,14 +1,22 @@
/*
* File: z_obj_bombiwa.c
* Overlay: ovl_Obj_Bombiwa
* Description: Round, brown, breakable boulder
*/
#include "z_obj_bombiwa.h"
#define ROOM 0x00
#define FLAGS 0x00000000
void ObjBombiwa_Init(ObjBombiwa* this, GlobalContext* globalCtx);
void ObjBombiwa_Destroy(ObjBombiwa* this, GlobalContext* globalCtx);
void ObjBombiwa_Update(ObjBombiwa* this, GlobalContext* globalCtx);
void ObjBombiwa_Draw(ObjBombiwa* this, GlobalContext* globalCtx);
static void ObjBombiwa_Init(ObjBombiwa* this, GlobalContext* globalCtx);
static void ObjBombiwa_Destroy(ObjBombiwa* this, GlobalContext* globalCtx);
static void ObjBombiwa_Update(ObjBombiwa* this, GlobalContext* globalCtx);
static void ObjBombiwa_Draw(ObjBombiwa* this, GlobalContext* globalCtx);
static void ObjBombiwa_InitCollision(ObjBombiwa* this, GlobalContext* globalCtx);
static void ObjBombiwa_Break(ObjBombiwa* this, GlobalContext* globalCtx);
/*
const ActorInit Obj_Bombiwa_InitVars =
{
ACTOR_OBJ_BOMBIWA,
@ -22,18 +30,133 @@ const ActorInit Obj_Bombiwa_InitVars =
(ActorFunc)ObjBombiwa_Update,
(ActorFunc)ObjBombiwa_Draw,
};
*/
#pragma GLOBAL_ASM("asm/non_matchings/overlays/actors/ovl_Obj_Bombiwa/func_80B915F0.s")
#pragma GLOBAL_ASM("asm/non_matchings/overlays/actors/ovl_Obj_Bombiwa/ObjBombiwa_Init.s")
static ColliderCylinderInit colliderInit =
{
0x0C, 0x00, 0x0D, 0x39,
0x20, 0x01, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00,
0x00000000, 0x00, 0x00,
0x00, 0x00, 0x4FC1FFFE,
0x00, 0x00, 0x00, 0x00,
0x00, 0x01, 0x01, 0x00,
0x0037, 0x0046, 0x0000,
0x0000, 0x0000, 0x0000,
};
#pragma GLOBAL_ASM("asm/non_matchings/overlays/actors/ovl_Obj_Bombiwa/ObjBombiwa_Destroy.s")
static u32 damageChart[] =
{
0x0000000C, 0x003CFF00,
};
#pragma GLOBAL_ASM("asm/non_matchings/overlays/actors/ovl_Obj_Bombiwa/func_80B91738.s")
static InitChainEntry initChain[] =
{
ICHAIN_VEC3F_DIV1000(scale, 0x64, ICHAIN_CONTINUE),
ICHAIN_F32(unk_F4, 0x7D0, ICHAIN_CONTINUE),
ICHAIN_F32(unk_F8, 0x15E, ICHAIN_CONTINUE),
ICHAIN_F32(unk_FC, 0x3E8, ICHAIN_STOP),
};
#pragma GLOBAL_ASM("asm/non_matchings/overlays/actors/ovl_Obj_Bombiwa/ObjBombiwa_Update.s")
static s16 effectScales[] =
{
17, 14, 10, 8, 7, 5, 3, 2,
};
#pragma GLOBAL_ASM("asm/non_matchings/overlays/actors/ovl_Obj_Bombiwa/ObjBombiwa_Draw.s")
extern Gfx* D_060009E0; //dlist
static void ObjBombiwa_InitCollision(ObjBombiwa* this, GlobalContext* globalCtx)
{
ObjBombiwa* thisLocal = this;
ActorCollider_AllocCylinder(globalCtx, &thisLocal->collider);
ActorCollider_InitCylinder(globalCtx, &thisLocal->collider, &thisLocal->actor, &colliderInit);
ActorCollider_Cylinder_Update(&thisLocal->actor, &thisLocal->collider);
}
static void ObjBombiwa_Init(ObjBombiwa* this, GlobalContext* globalCtx)
{
Actor_ProcessInitChain(&this->actor, initChain);
ObjBombiwa_InitCollision(this, globalCtx);
if ((Flags_GetSwitch(globalCtx, this->actor.params & 0x3F) != 0))
{
Actor_Kill(&this->actor);
}
else
{
func_80061ED4(&this->actor.sub_98.damageChart, NULL, damageChart);
if (this->actor.shape.rot.y == 0)
{
s16 rand = (s16) Math_Rand_ZeroFloat(65536.0f);
this->actor.posRot.rot.y = rand;
this->actor.shape.rot.y = rand;
}
this->actor.shape.unk_08 = -200.0f;
this->actor.posRot.pos.y = this->actor.initPosRot.pos.y + 20.0f;
}
}
static void ObjBombiwa_Destroy(ObjBombiwa* this, GlobalContext* globalCtx)
{
ActorCollider_FreeCylinder(globalCtx, &this->collider);
}
static void ObjBombiwa_Break(ObjBombiwa *this, GlobalContext *globalCtx)
{
Vec3f temp_s2;
Vec3f temp_s3;
Gfx** dlist;
s16 u0;
s16 scale;
s32 i;
dlist = &D_060009E0;
for (i = 0; i < ARRAY_COUNT(effectScales); i++)
{
temp_s2.x = ((Math_Rand_ZeroOne() - 0.5f) * 10.0f) + this->actor.initPosRot.pos.x;
temp_s2.y = ((Math_Rand_ZeroOne() * 5.0f) + this->actor.initPosRot.pos.y) + 8.0f;
temp_s2.z = ((Math_Rand_ZeroOne() - 0.5f) * 10.0f) + this->actor.initPosRot.pos.z;
temp_s3.x = (Math_Rand_ZeroOne() - 0.5f) * 15.0f;
temp_s3.y = (Math_Rand_ZeroOne() * 16.0f) + 5.0f;
temp_s3.z = (Math_Rand_ZeroOne() - 0.5f) * 15.0f;
scale = effectScales[i];
u0 = (scale >= 11) ? 37 : 33;
Effect_SpawnFragment(globalCtx, &temp_s2, &temp_s3, &temp_s2, -400, u0, 10, 2, 0, scale, 1, 0, 80, -1, OBJECT_BOMBIWA, dlist);
}
func_80033480(globalCtx, &this->actor.posRot.pos, 60.0f, 8, 100, 160, 1);
}
static void ObjBombiwa_Update(ObjBombiwa* this, GlobalContext* globalCtx)
{
SubGlobalContext11E60* sub_11E60;
ColliderCylinderMain* collider;
if (func_80033684(globalCtx, &this->actor) != NULL ||
((this->collider.base.collideFlags & 2) != 0 &&
(this->collider.body.colliding->toucher.flags & 0x40000040) != 0))
{
ObjBombiwa_Break(this, globalCtx);
Flags_SetSwitch(globalCtx, this->actor.params & 0x3F);
Audio_PlaySoundAtPosition(globalCtx, &this->actor.posRot.pos, 80, NA_SE_EV_WALL_BROKEN);
if (((this->actor.params >> 0xF) & 1) != 0)
{
func_80078884(NA_SE_SY_CORRECT_CHIME);
}
Actor_Kill(&this->actor);
}
else
{
this->collider.base.collideFlags &= ~0x2;
if (this->actor.xzDistanceFromLink < 800.0f)
{
sub_11E60 = &globalCtx->sub_11E60;
collider = &this->collider;
Actor_CollisionCheck_SetAC(globalCtx, sub_11E60, collider);
Actor_CollisionCheck_SetOT(globalCtx, sub_11E60, collider);
}
}
}
static void ObjBombiwa_Draw(ObjBombiwa* this, GlobalContext* globalCtx)
{
Draw_DListOpa(globalCtx, &D_060009E0);
}

View file

@ -7,7 +7,7 @@
typedef struct
{
/* 0x0000 */ Actor actor;
/* 0x014C */ char unk_14C[0x4C];
/* 0x014C */ ColliderCylinderMain collider;
} ObjBombiwa; // size = 0x0198
extern const ActorInit Obj_Bombiwa_InitVars;