1
0
Fork 0
mirror of https://github.com/zeldaret/oot.git synced 2024-11-14 05:19:36 +00:00

Match more retail actors (#1711)

* More actors

* Format
This commit is contained in:
cadmic 2024-02-04 19:28:18 -08:00 committed by GitHub
parent d674dad3da
commit 454b1caa52
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
10 changed files with 75 additions and 51 deletions

View file

@ -469,7 +469,7 @@ void ObjBean_Init(Actor* thisx, PlayState* play) {
Actor_ProcessInitChain(&this->dyna.actor, sInitChain); Actor_ProcessInitChain(&this->dyna.actor, sInitChain);
if (LINK_AGE_IN_YEARS == YEARS_ADULT) { if (LINK_AGE_IN_YEARS == YEARS_ADULT) {
if (Flags_GetSwitch(play, this->dyna.actor.params & 0x3F) || (mREG(1) == 1)) { if (Flags_GetSwitch(play, this->dyna.actor.params & 0x3F) || (OOT_DEBUG && mREG(1) == 1)) {
path = (this->dyna.actor.params >> 8) & 0x1F; path = (this->dyna.actor.params >> 8) & 0x1F;
if (path == 0x1F) { if (path == 0x1F) {
PRINTF(VT_COL(RED, WHITE)); PRINTF(VT_COL(RED, WHITE));
@ -504,7 +504,7 @@ void ObjBean_Init(Actor* thisx, PlayState* play) {
Actor_Kill(&this->dyna.actor); Actor_Kill(&this->dyna.actor);
return; return;
} }
} else if ((Flags_GetSwitch(play, this->dyna.actor.params & 0x3F) != 0) || (mREG(1) == 1)) { } else if ((Flags_GetSwitch(play, this->dyna.actor.params & 0x3F) != 0) || (OOT_DEBUG && mREG(1) == 1)) {
ObjBean_SetupWaitForWater(this); ObjBean_SetupWaitForWater(this);
} else { } else {
ObjBean_SetupWaitForBean(this); ObjBean_SetupWaitForBean(this);

View file

@ -94,9 +94,11 @@ void ObjHsblock_Init(Actor* thisx, PlayState* play) {
} }
} }
#if OOT_DEBUG
mREG(13) = 255; mREG(13) = 255;
mREG(14) = 255; mREG(14) = 255;
mREG(15) = 255; mREG(15) = 255;
#endif
} }
void ObjHsblock_Destroy(Actor* thisx, PlayState* play) { void ObjHsblock_Destroy(Actor* thisx, PlayState* play) {
@ -158,9 +160,16 @@ void ObjHsblock_Draw(Actor* thisx, PlayState* play) {
if (play->sceneId == SCENE_FIRE_TEMPLE) { if (play->sceneId == SCENE_FIRE_TEMPLE) {
color = &sFireTempleColor; color = &sFireTempleColor;
} else { } else {
#if OOT_DEBUG
defaultColor.r = mREG(13); defaultColor.r = mREG(13);
defaultColor.g = mREG(14); defaultColor.g = mREG(14);
defaultColor.b = mREG(15); defaultColor.b = mREG(15);
#else
defaultColor.r = 255;
defaultColor.g = 255;
defaultColor.b = 255;
#endif
color = &defaultColor; color = &defaultColor;
} }

View file

@ -125,8 +125,8 @@ void ObjKibako2_Init(Actor* thisx, PlayState* play) {
ObjKibako2_InitCollider(thisx, play); ObjKibako2_InitCollider(thisx, play);
CollisionHeader_GetVirtual(&gLargeCrateCol, &colHeader); CollisionHeader_GetVirtual(&gLargeCrateCol, &colHeader);
bgId = DynaPoly_SetBgActor(play, &play->colCtx.dyna, &this->dyna.actor, colHeader); bgId = DynaPoly_SetBgActor(play, &play->colCtx.dyna, &this->dyna.actor, colHeader);
this->collectibleFlag = this->dyna.actor.home.rot.z & 0x3F;
this->dyna.bgId = bgId; this->dyna.bgId = bgId;
this->collectibleFlag = this->dyna.actor.home.rot.z & 0x3F;
this->actionFunc = ObjKibako2_Idle; this->actionFunc = ObjKibako2_Idle;
this->dyna.actor.home.rot.z = this->dyna.actor.world.rot.z = this->dyna.actor.shape.rot.z = this->dyna.actor.home.rot.z = this->dyna.actor.world.rot.z = this->dyna.actor.shape.rot.z =
this->dyna.actor.world.rot.x = this->dyna.actor.shape.rot.x = 0; this->dyna.actor.world.rot.x = this->dyna.actor.shape.rot.x = 0;

View file

@ -109,9 +109,12 @@ void ObjMure_Init(Actor* thisx, PlayState* play) {
this->actionFunc = ObjMure_InitialAction; this->actionFunc = ObjMure_InitialAction;
PRINTF("群れな敵 (arg_data 0x%04x)(chNum(%d) ptn(%d) svNum(%d) type(%d))\n", thisx->params, this->chNum, this->ptn, PRINTF("群れな敵 (arg_data 0x%04x)(chNum(%d) ptn(%d) svNum(%d) type(%d))\n", thisx->params, this->chNum, this->ptn,
this->svNum, this->type); this->svNum, this->type);
#if OOT_DEBUG
if (ObjMure_GetMaxChildSpawns(this) <= 0) { if (ObjMure_GetMaxChildSpawns(this) <= 0) {
PRINTF("Warning : 個体数が設定されていません(%s %d)(arg_data 0x%04x)\n", "../z_obj_mure.c", 268, thisx->params); PRINTF("Warning : 個体数が設定されていません(%s %d)(arg_data 0x%04x)\n", "../z_obj_mure.c", 268, thisx->params);
} }
#endif
} }
void ObjMure_Destroy(Actor* thisx, PlayState* play) { void ObjMure_Destroy(Actor* thisx, PlayState* play) {
@ -125,48 +128,52 @@ s32 ObjMure_GetMaxChildSpawns(ObjMure* this) {
} }
void ObjMure_GetSpawnPos(Vec3f* outPos, Vec3f* inPos, s32 ptn, s32 idx) { void ObjMure_GetSpawnPos(Vec3f* outPos, Vec3f* inPos, s32 ptn, s32 idx) {
#if OOT_DEBUG
if (ptn >= 4) { if (ptn >= 4) {
PRINTF("おかしなの (%s %d)\n", "../z_obj_mure.c", 307); PRINTF("おかしなの (%s %d)\n", "../z_obj_mure.c", 307);
} }
#endif
*outPos = *inPos; *outPos = *inPos;
} }
void ObjMure_SpawnActors0(ObjMure* this, PlayState* play) { void ObjMure_SpawnActors0(ObjMure* this, PlayState* play) {
ActorContext* ac; Actor* actor = &this->actor;
s32 i; s32 i;
Vec3f pos; Vec3f pos;
s32 pad; s32 pad;
s32 maxChildren = ObjMure_GetMaxChildSpawns(this); s32 maxChildren = ObjMure_GetMaxChildSpawns(this);
for (i = 0; i < maxChildren; i++) { for (i = 0; i < maxChildren; i++) {
#if OOT_DEBUG
if (this->children[i] != NULL) { if (this->children[i] != NULL) {
// "Error: I already have a child(%s %d)(arg_data 0x%04x)" // "Error: I already have a child(%s %d)(arg_data 0x%04x)"
PRINTF("Error : 既に子供がいる(%s %d)(arg_data 0x%04x)\n", "../z_obj_mure.c", 333, this->actor.params); PRINTF("Error : 既に子供がいる(%s %d)(arg_data 0x%04x)\n", "../z_obj_mure.c", 333, actor->params);
} }
#endif
switch (this->childrenStates[i]) { switch (this->childrenStates[i]) {
case OBJMURE_CHILD_STATE_1: case OBJMURE_CHILD_STATE_1:
break; break;
case OBJMURE_CHILD_STATE_2: case OBJMURE_CHILD_STATE_2:
ac = &play->actorCtx; ObjMure_GetSpawnPos(&pos, &actor->world.pos, this->ptn, i);
ObjMure_GetSpawnPos(&pos, &this->actor.world.pos, this->ptn, i);
this->children[i] = this->children[i] =
Actor_Spawn(ac, play, sSpawnActorIds[this->type], pos.x, pos.y, pos.z, this->actor.world.rot.x, Actor_Spawn(&play->actorCtx, play, sSpawnActorIds[this->type], pos.x, pos.y, pos.z,
this->actor.world.rot.y, this->actor.world.rot.z, sSpawnParams[this->type]); actor->world.rot.x, actor->world.rot.y, actor->world.rot.z, sSpawnParams[this->type]);
if (this->children[i] != NULL) { if (this->children[i] != NULL) {
this->children[i]->flags |= ACTOR_FLAG_ENKUSA_CUT; this->children[i]->flags |= ACTOR_FLAG_ENKUSA_CUT;
this->children[i]->room = this->actor.room; this->children[i]->room = actor->room;
} else { } else {
PRINTF("warning 発生失敗 (%s %d)\n", "../z_obj_mure.c", 359); PRINTF("warning 発生失敗 (%s %d)\n", "../z_obj_mure.c", 359);
} }
break; break;
default: default:
ac = &play->actorCtx; ObjMure_GetSpawnPos(&pos, &actor->world.pos, this->ptn, i);
ObjMure_GetSpawnPos(&pos, &this->actor.world.pos, this->ptn, i);
this->children[i] = this->children[i] =
Actor_Spawn(ac, play, sSpawnActorIds[this->type], pos.x, pos.y, pos.z, this->actor.world.rot.x, Actor_Spawn(&play->actorCtx, play, sSpawnActorIds[this->type], pos.x, pos.y, pos.z,
this->actor.world.rot.y, this->actor.world.rot.z, sSpawnParams[this->type]); actor->world.rot.x, actor->world.rot.y, actor->world.rot.z, sSpawnParams[this->type]);
if (this->children[i] != NULL) { if (this->children[i] != NULL) {
this->children[i]->room = this->actor.room; this->children[i]->room = actor->room;
} else { } else {
PRINTF("warning 発生失敗 (%s %d)\n", "../z_obj_mure.c", 382); PRINTF("warning 発生失敗 (%s %d)\n", "../z_obj_mure.c", 382);
} }
@ -175,21 +182,23 @@ void ObjMure_SpawnActors0(ObjMure* this, PlayState* play) {
} }
} }
void ObjMure_SpawnActors1(ObjMure* this, PlayState* play) { void ObjMure_SpawnActors1(ObjMure* this, PlayState* play2) {
ActorContext* ac = (ActorContext*)play; // fake match PlayState* play = play2;
Actor* actor = &this->actor; Actor* actor = &this->actor;
Vec3f spawnPos; Vec3f spawnPos;
s32 maxChildren = ObjMure_GetMaxChildSpawns(this); s32 maxChildren = ObjMure_GetMaxChildSpawns(this);
s32 i; s32 i;
for (i = 0; i < maxChildren; i++) { for (i = 0; i < maxChildren; i++) {
#if OOT_DEBUG
if (this->children[i] != NULL) { if (this->children[i] != NULL) {
PRINTF("Error : 既に子供がいる(%s %d)(arg_data 0x%04x)\n", "../z_obj_mure.c", 407, actor->params); PRINTF("Error : 既に子供がいる(%s %d)(arg_data 0x%04x)\n", "../z_obj_mure.c", 407, actor->params);
} }
ac = &play->actorCtx; #endif
ObjMure_GetSpawnPos(&spawnPos, &actor->world.pos, this->ptn, i); ObjMure_GetSpawnPos(&spawnPos, &actor->world.pos, this->ptn, i);
this->children[i] = Actor_Spawn(ac, play, sSpawnActorIds[this->type], spawnPos.x, spawnPos.y, spawnPos.z, this->children[i] = Actor_Spawn(&play2->actorCtx, play, sSpawnActorIds[this->type], spawnPos.x, spawnPos.y,
actor->world.rot.x, actor->world.rot.y, actor->world.rot.z, spawnPos.z, actor->world.rot.x, actor->world.rot.y, actor->world.rot.z,
(this->type == 4 && i == 0) ? 1 : sSpawnParams[this->type]); (this->type == 4 && i == 0) ? 1 : sSpawnParams[this->type]);
if (this->children[i] != NULL) { if (this->children[i] != NULL) {
this->childrenStates[i] = OBJMURE_CHILD_STATE_0; this->childrenStates[i] = OBJMURE_CHILD_STATE_0;

View file

@ -106,9 +106,10 @@ void func_80B9ABA0(ObjMure3* this, PlayState* play) {
void func_80B9ACE4(ObjMure3* this, PlayState* play) { void func_80B9ACE4(ObjMure3* this, PlayState* play) {
s16 count = sRupeeCounts[(this->actor.params >> 13) & 7]; s16 count = sRupeeCounts[(this->actor.params >> 13) & 7];
s32 i; s32 i;
EnItem00** collectible;
for (i = 0; i < count; i++) { for (i = 0; i < count; i++) {
EnItem00** collectible = &this->unk_150[i]; collectible = &this->unk_150[i];
if (!((this->unk_16C >> i) & 1) && (*collectible != NULL)) { if (!((this->unk_16C >> i) & 1) && (*collectible != NULL)) {
if (Actor_HasParent(&(*collectible)->actor, play) || ((*collectible)->actor.update == NULL)) { if (Actor_HasParent(&(*collectible)->actor, play) || ((*collectible)->actor.update == NULL)) {

View file

@ -283,6 +283,8 @@ void ObjSyokudai_Draw(Actor* thisx, PlayState* play) {
} }
flameScale *= 0.0027f; flameScale *= 0.0027f;
if (1) {}
Gfx_SetupDL_25Xlu(play->state.gfxCtx); Gfx_SetupDL_25Xlu(play->state.gfxCtx);
gSPSegment(POLY_XLU_DISP++, 0x08, gSPSegment(POLY_XLU_DISP++, 0x08,

View file

@ -74,18 +74,15 @@ void ObjWarp2block_Spawn(ObjWarp2block* this, PlayState* play) {
} }
s32 func_80BA1ECC(ObjWarp2block* this, PlayState* play) { s32 func_80BA1ECC(ObjWarp2block* this, PlayState* play) {
if (DynaPolyActor_IsPlayerAbove(&this->dyna)) {
return 0;
} else {
s32 pad; s32 pad;
Actor* temp_a3; Actor* temp_a3 = this->dyna.actor.child;
Player* player; Player* player = GET_PLAYER(play);
Vec3f sp20; Vec3f sp20;
f32 temp_f2; f32 temp_f2;
if (DynaPolyActor_IsPlayerAbove(&this->dyna)) {
return 0;
}
temp_a3 = this->dyna.actor.child;
player = GET_PLAYER(play);
if ((this->dyna.actor.xzDistToPlayer <= sDistances[(((this->dyna.actor.params >> 0xB) & 7))]) || if ((this->dyna.actor.xzDistToPlayer <= sDistances[(((this->dyna.actor.params >> 0xB) & 7))]) ||
(temp_a3->xzDistToPlayer <= sDistances[(((temp_a3->params >> 0xB) & 7))])) { (temp_a3->xzDistToPlayer <= sDistances[(((temp_a3->params >> 0xB) & 7))])) {
@ -107,6 +104,7 @@ s32 func_80BA1ECC(ObjWarp2block* this, PlayState* play) {
} }
return 1; return 1;
}
} }
void ObjWarp2block_SwapWithChild(ObjWarp2block* this, PlayState* play) { void ObjWarp2block_SwapWithChild(ObjWarp2block* this, PlayState* play) {

View file

@ -860,6 +860,8 @@ void ObjectKankyo_DrawSunGraveSpark(Actor* thisx, PlayState* play2) {
(u8)(255 * this->effects[0].amplitude), 255 - (u8)(255 * this->effects[0].amplitude), (u8)(255 * this->effects[0].amplitude), 255 - (u8)(255 * this->effects[0].amplitude),
this->effects[0].alpha); this->effects[0].alpha);
if (1) {}
Matrix_Mult(&play->billboardMtxF, MTXMODE_APPLY); Matrix_Mult(&play->billboardMtxF, MTXMODE_APPLY);
gSPMatrix(POLY_XLU_DISP++, MATRIX_NEW(play->state.gfxCtx, "../z_object_kankyo.c", 1416), G_MTX_LOAD); gSPMatrix(POLY_XLU_DISP++, MATRIX_NEW(play->state.gfxCtx, "../z_object_kankyo.c", 1416), G_MTX_LOAD);

View file

@ -124,5 +124,7 @@ void OceffWipe_Draw(Actor* thisx, PlayState* play) {
32, 1, 0 - scroll, scroll * (-2), 32, 32)); 32, 1, 0 - scroll, scroll * (-2), 32, 32));
gSPDisplayList(POLY_XLU_DISP++, sFrustumDL); gSPDisplayList(POLY_XLU_DISP++, sFrustumDL);
if (1) {}
CLOSE_DISPS(play->state.gfxCtx, "../z_oceff_wipe.c", 398); CLOSE_DISPS(play->state.gfxCtx, "../z_oceff_wipe.c", 398);
} }

View file

@ -163,7 +163,6 @@ void ShotSun_UpdateHyliaSun(ShotSun* this, PlayState* play) {
Player* player = GET_PLAYER(play); Player* player = GET_PLAYER(play);
EnItem00* collectible; EnItem00* collectible;
s32 pad; s32 pad;
Vec3f spawnPos;
if (this->collider.base.acFlags & AC_HIT) { if (this->collider.base.acFlags & AC_HIT) {
Sfx_PlaySfxCentered(NA_SE_SY_CORRECT_CHIME); Sfx_PlaySfxCentered(NA_SE_SY_CORRECT_CHIME);
@ -174,6 +173,8 @@ void ShotSun_UpdateHyliaSun(ShotSun* this, PlayState* play) {
if (1) {} if (1) {}
gSaveContext.cutsceneTrigger = 1; gSaveContext.cutsceneTrigger = 1;
} else { } else {
Vec3f spawnPos;
spawnPos.x = 700.0f; spawnPos.x = 700.0f;
spawnPos.y = -800.0f; spawnPos.y = -800.0f;
spawnPos.z = 7261.0f; spawnPos.z = 7261.0f;