1
0
Fork 0
mirror of https://github.com/zeldaret/oot.git synced 2025-07-04 06:54:33 +00:00

Some names and docs on dynapoly (#1287)

* Add `BG_DYNA_ACTOR_FLAG_` for `DynaCollisionContext.bgActorFlags`

* Document 3/4 bgActor flags

* `func_8003EE6C` -> `DynaPoly_InvalidateLookup`

* `DynaPoly_ExpandSRT` -> `DynaPoly_AddBgActorToLookup`

* Add `DYNAPOLYACTOR_UNK160_` for `DynaPolyActor.unk_160`

* More dynapoly docs

* One comment

* Some `DynaPoly_` -> `DynaPolyActor_`

* run formatter

* .

* `BG_DYNA_ACTOR_FLAG_IS_USED` -> `BG_DYNA_ACTOR_FLAG_IN_USE`

* `BG_DYNA_ACTOR_FLAG_` -> `BGACTOR_`

* `DYNAPOLYACTOR_INTERACT_FLAG_` -> `DYNA_INTERACT_`

* `ResetInteractFlags` -> `ClearInteractFlags`

* Remove Has/Is prefix on dyna interact flags getters

* format

* remove now useless comments

* Remove `!= 0` on interact flags getter usage

* ceilings collision -> ceiling collision

* `ClearInteractFlags` -> `UnsetInteractFlags` (pepega)

* `UnsetInteractFlags` -> `UnsetAllInteractFlags` (pepega x2)

* Add back `Is` prefix (no `Has` this time) to dyna interact flags getters
This commit is contained in:
Dragorn421 2022-06-25 06:53:26 -07:00 committed by GitHub
parent 397e481f9a
commit ed0ab877c9
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
51 changed files with 206 additions and 190 deletions

View file

@ -60,7 +60,7 @@ void func_80043334(CollisionContext* colCtx, Actor* actor, s32 bgId) {
if (DynaPoly_IsBgIdBgActor(bgId)) {
DynaPolyActor* dynaActor = DynaPoly_GetActor(colCtx, bgId);
if (dynaActor != NULL) {
func_800434A8(dynaActor);
DynaPolyActor_SetActorOnTop(dynaActor);
if (CHECK_FLAG_ALL(actor->flags, ACTOR_FLAG_26)) {
func_80043538(dynaActor);
@ -81,7 +81,7 @@ s32 func_800433A4(CollisionContext* colCtx, s32 bgId, Actor* actor) {
return false;
}
if ((colCtx->dyna.bgActorFlags[bgId] & 2) || !(colCtx->dyna.bgActorFlags[bgId] & 1)) {
if ((colCtx->dyna.bgActorFlags[bgId] & BGACTOR_1) || !(colCtx->dyna.bgActorFlags[bgId] & BGACTOR_IN_USE)) {
return false;
}

View file

@ -3,65 +3,65 @@
void DynaPolyActor_Init(DynaPolyActor* dynaActor, s32 flags) {
dynaActor->bgId = -1;
dynaActor->unk_15C = flags;
dynaActor->unk_160 = 0;
dynaActor->interactFlags = 0;
dynaActor->unk_150 = 0.0f;
dynaActor->unk_154 = 0.0f;
}
void func_800434A0(DynaPolyActor* dynaActor) {
dynaActor->unk_160 = 0;
void DynaPolyActor_UnsetAllInteractFlags(DynaPolyActor* dynaActor) {
dynaActor->interactFlags = 0;
}
void func_800434A8(DynaPolyActor* dynaActor) {
dynaActor->unk_160 |= 1;
void DynaPolyActor_SetActorOnTop(DynaPolyActor* dynaActor) {
dynaActor->interactFlags |= DYNA_INTERACT_ACTOR_ON_TOP;
}
void func_800434B8(DynaPolyActor* dynaActor) {
dynaActor->unk_160 |= 2;
void DynaPolyActor_SetPlayerOnTop(DynaPolyActor* dynaActor) {
dynaActor->interactFlags |= DYNA_INTERACT_PLAYER_ON_TOP;
}
void func_800434C8(CollisionContext* colCtx, s32 floorBgId) {
void DynaPoly_SetPlayerOnTop(CollisionContext* colCtx, s32 floorBgId) {
DynaPolyActor* dynaActor = DynaPoly_GetActor(colCtx, floorBgId);
if (dynaActor != NULL) {
func_800434B8(dynaActor);
DynaPolyActor_SetPlayerOnTop(dynaActor);
}
}
void func_800434F8(DynaPolyActor* dynaActor) {
dynaActor->unk_160 |= 4;
void DynaPolyActor_SetPlayerAbove(DynaPolyActor* dynaActor) {
dynaActor->interactFlags |= DYNA_INTERACT_PLAYER_ABOVE;
}
void func_80043508(CollisionContext* colCtx, s32 floorBgId) {
void DynaPoly_SetPlayerAbove(CollisionContext* colCtx, s32 floorBgId) {
DynaPolyActor* dynaActor = DynaPoly_GetActor(colCtx, floorBgId);
if (dynaActor != NULL) {
func_800434F8(dynaActor);
DynaPolyActor_SetPlayerAbove(dynaActor);
}
}
void func_80043538(DynaPolyActor* dynaActor) {
dynaActor->unk_160 |= 8;
dynaActor->interactFlags |= DYNA_INTERACT_3;
}
s32 func_80043548(DynaPolyActor* dynaActor) {
if (dynaActor->unk_160 & 1) {
s32 DynaPolyActor_IsActorOnTop(DynaPolyActor* dynaActor) {
if (dynaActor->interactFlags & DYNA_INTERACT_ACTOR_ON_TOP) {
return true;
} else {
return false;
}
}
s32 func_8004356C(DynaPolyActor* dynaActor) {
if (dynaActor->unk_160 & 2) {
s32 DynaPolyActor_IsPlayerOnTop(DynaPolyActor* dynaActor) {
if (dynaActor->interactFlags & DYNA_INTERACT_PLAYER_ON_TOP) {
return true;
} else {
return false;
}
}
s32 func_80043590(DynaPolyActor* dynaActor) {
if (dynaActor->unk_160 & 4) {
s32 DynaPolyActor_IsPlayerAbove(DynaPolyActor* dynaActor) {
if (dynaActor->interactFlags & DYNA_INTERACT_PLAYER_ABOVE) {
return true;
} else {
return false;
@ -69,7 +69,7 @@ s32 func_80043590(DynaPolyActor* dynaActor) {
}
s32 func_800435B4(DynaPolyActor* dynaActor) {
if (dynaActor->unk_160 & 8) {
if (dynaActor->interactFlags & DYNA_INTERACT_3) {
return true;
} else {
return false;

View file

@ -2111,7 +2111,7 @@ void Actor_UpdateAll(PlayState* play, ActorContext* actorCtx) {
actor->colorFilterTimer--;
}
actor->update(actor, play);
func_8003F8EC(play, &play->colCtx.dyna, actor);
DynaPoly_UnsetAllInteractFlags(play, &play->colCtx.dyna, actor);
}
CollisionCheck_ResetDamage(&actor->colChkInfo);
@ -2121,7 +2121,7 @@ void Actor_UpdateAll(PlayState* play, ActorContext* actorCtx) {
}
if (i == ACTORCAT_BG) {
DynaPoly_Setup(play, &play->colCtx.dyna);
DynaPoly_UpdateContext(play, &play->colCtx.dyna);
}
}

View file

@ -1623,7 +1623,7 @@ CollisionHeader* BgCheck_GetCollisionHeader(CollisionContext* colCtx, s32 bgId)
if (bgId < 0 || bgId > BG_ACTOR_MAX) {
return NULL;
}
if (!(colCtx->dyna.bgActorFlags[bgId] & 1)) {
if (!(colCtx->dyna.bgActorFlags[bgId] & BGACTOR_IN_USE)) {
osSyncPrintf(VT_COL(YELLOW, BLACK));
osSyncPrintf("T_BGCheck_getBGDataInfo():そのbg_actor_indexは使われておりません。index=%d\n");
osSyncPrintf(VT_RST);
@ -2626,8 +2626,8 @@ s32 DynaPoly_SetBgActor(PlayState* play, DynaCollisionContext* dyna, Actor* acto
s32 foundSlot = false;
for (bgId = 0; bgId < BG_ACTOR_MAX; bgId++) {
if (!(dyna->bgActorFlags[bgId] & 1)) {
dyna->bgActorFlags[bgId] |= 1;
if (!(dyna->bgActorFlags[bgId] & BGACTOR_IN_USE)) {
dyna->bgActorFlags[bgId] |= BGACTOR_IN_USE;
foundSlot = true;
break;
}
@ -2643,7 +2643,7 @@ s32 DynaPoly_SetBgActor(PlayState* play, DynaCollisionContext* dyna, Actor* acto
BgActor_SetActor(&dyna->bgActors[bgId], actor, colHeader);
dyna->bitFlag |= DYNAPOLY_INVALIDATE_LOOKUP;
dyna->bgActorFlags[bgId] &= ~2;
dyna->bgActorFlags[bgId] &= ~BGACTOR_1;
osSyncPrintf(VT_FGCOL(GREEN));
osSyncPrintf("DynaPolyInfo_setActor():index %d\n", bgId);
osSyncPrintf(VT_RST);
@ -2655,37 +2655,37 @@ s32 DynaPoly_SetBgActor(PlayState* play, DynaCollisionContext* dyna, Actor* acto
* possible orginal name: DynaPolyInfo_getActor
*/
DynaPolyActor* DynaPoly_GetActor(CollisionContext* colCtx, s32 bgId) {
if (!DynaPoly_IsBgIdBgActor(bgId) || !(colCtx->dyna.bgActorFlags[bgId] & 1) ||
colCtx->dyna.bgActorFlags[bgId] & 2) {
if (!DynaPoly_IsBgIdBgActor(bgId) || !(colCtx->dyna.bgActorFlags[bgId] & BGACTOR_IN_USE) ||
colCtx->dyna.bgActorFlags[bgId] & BGACTOR_1) {
return NULL;
}
return (DynaPolyActor*)colCtx->dyna.bgActors[bgId].actor;
}
void func_8003EBF8(PlayState* play, DynaCollisionContext* dyna, s32 bgId) {
void DynaPoly_DisableCollision(PlayState* play, DynaCollisionContext* dyna, s32 bgId) {
if (DynaPoly_IsBgIdBgActor(bgId)) {
dyna->bgActorFlags[bgId] |= 4;
dyna->bgActorFlags[bgId] |= BGACTOR_COLLISION_DISABLED;
dyna->bitFlag |= DYNAPOLY_INVALIDATE_LOOKUP;
}
}
void func_8003EC50(PlayState* play, DynaCollisionContext* dyna, s32 bgId) {
void DynaPoly_EnableCollision(PlayState* play, DynaCollisionContext* dyna, s32 bgId) {
if (DynaPoly_IsBgIdBgActor(bgId)) {
dyna->bgActorFlags[bgId] &= ~4;
dyna->bgActorFlags[bgId] &= ~BGACTOR_COLLISION_DISABLED;
dyna->bitFlag |= DYNAPOLY_INVALIDATE_LOOKUP;
}
}
void func_8003ECA8(PlayState* play, DynaCollisionContext* dyna, s32 bgId) {
void DynaPoly_DisableCeilingCollision(PlayState* play, DynaCollisionContext* dyna, s32 bgId) {
if (DynaPoly_IsBgIdBgActor(bgId)) {
dyna->bgActorFlags[bgId] |= 8;
dyna->bgActorFlags[bgId] |= BGACTOR_CEILING_COLLISION_DISABLED;
dyna->bitFlag |= DYNAPOLY_INVALIDATE_LOOKUP;
}
}
void func_8003ED00(PlayState* play, DynaCollisionContext* dyna, s32 bgId) {
void DynaPoly_EnableCeilingCollision(PlayState* play, DynaCollisionContext* dyna, s32 bgId) {
if (DynaPoly_IsBgIdBgActor(bgId)) {
dyna->bgActorFlags[bgId] &= ~8;
dyna->bgActorFlags[bgId] &= ~BGACTOR_CEILING_COLLISION_DISABLED;
dyna->bitFlag |= DYNAPOLY_INVALIDATE_LOOKUP;
}
}
@ -2723,19 +2723,19 @@ void DynaPoly_DeleteBgActor(PlayState* play, DynaCollisionContext* dyna, s32 bgI
actor->bgId = BGACTOR_NEG_ONE;
dyna->bgActors[bgId].actor = NULL;
dyna->bgActorFlags[bgId] |= 2;
dyna->bgActorFlags[bgId] |= BGACTOR_1;
}
}
void func_8003EE6C(PlayState* play, DynaCollisionContext* dyna) {
void DynaPoly_InvalidateLookup(PlayState* play, DynaCollisionContext* dyna) {
dyna->bitFlag |= DYNAPOLY_INVALIDATE_LOOKUP;
}
/**
* original name: DynaPolyInfo_expandSRT
*/
void DynaPoly_ExpandSRT(PlayState* play, DynaCollisionContext* dyna, s32 bgId, s32* vtxStartIndex,
s32* polyStartIndex) {
void DynaPoly_AddBgActorToLookup(PlayState* play, DynaCollisionContext* dyna, s32 bgId, s32* vtxStartIndex,
s32* polyStartIndex) {
MtxF mtx;
Actor* actor;
s32 pad;
@ -2765,7 +2765,7 @@ void DynaPoly_ExpandSRT(PlayState* play, DynaCollisionContext* dyna, s32 bgId, s
ScaleRotPos_SetValue(&dyna->bgActors[bgId].curTransform, &actor->scale, &actor->shape.rot, &pos);
if (dyna->bgActorFlags[bgId] & 4) {
if (dyna->bgActorFlags[bgId] & BGACTOR_COLLISION_DISABLED) {
return;
}
@ -2799,7 +2799,7 @@ void DynaPoly_ExpandSRT(PlayState* play, DynaCollisionContext* dyna, s32 bgId, s
s16 polyIndex = pi;
DynaSSNodeList_SetSSListHead(&dyna->polyNodes, &dyna->bgActors[bgId].dynaLookup.floor, &polyIndex);
} else if (normalY < COLPOLY_SNORMAL(-0.8f)) {
if (!(dyna->bgActorFlags[bgId] & 8)) {
if (!(dyna->bgActorFlags[bgId] & BGACTOR_CEILING_COLLISION_DISABLED)) {
s16 polyIndex = pi;
DynaSSNodeList_SetSSListHead(&dyna->polyNodes, &dyna->bgActors[bgId].dynaLookup.ceiling,
&polyIndex);
@ -2915,15 +2915,15 @@ void DynaPoly_ExpandSRT(PlayState* play, DynaCollisionContext* dyna, s32 bgId, s
}
}
void func_8003F8EC(PlayState* play, DynaCollisionContext* dyna, Actor* actor) {
void DynaPoly_UnsetAllInteractFlags(PlayState* play, DynaCollisionContext* dyna, Actor* actor) {
DynaPolyActor* dynaActor;
s32 i;
for (i = 0; i < BG_ACTOR_MAX; i++) {
if (dyna->bgActorFlags[i] & 1) {
if (dyna->bgActorFlags[i] & BGACTOR_IN_USE) {
dynaActor = DynaPoly_GetActor(&play->colCtx, i);
if (dynaActor != NULL && &dynaActor->actor == actor) {
func_800434A0((DynaPolyActor*)actor);
DynaPolyActor_UnsetAllInteractFlags((DynaPolyActor*)actor);
return;
}
}
@ -2931,9 +2931,9 @@ void func_8003F8EC(PlayState* play, DynaCollisionContext* dyna, Actor* actor) {
}
/**
* DynaPolyInfo_setup
* Original name: "DynaPolyInfo_setup"
*/
void DynaPoly_Setup(PlayState* play, DynaCollisionContext* dyna) {
void DynaPoly_UpdateContext(PlayState* play, DynaCollisionContext* dyna) {
DynaPolyActor* actor;
s32 vtxStartIndex;
s32 polyStartIndex;
@ -2946,7 +2946,7 @@ void DynaPoly_Setup(PlayState* play, DynaCollisionContext* dyna) {
}
for (i = 0; i < BG_ACTOR_MAX; i++) {
if (dyna->bgActorFlags[i] & 2) {
if (dyna->bgActorFlags[i] & BGACTOR_1) {
// Initialize BgActor
osSyncPrintf(VT_FGCOL(GREEN));
osSyncPrintf("DynaPolyInfo_setup():削除 index=%d\n", i);
@ -2975,8 +2975,8 @@ void DynaPoly_Setup(PlayState* play, DynaCollisionContext* dyna) {
vtxStartIndex = 0;
polyStartIndex = 0;
for (i = 0; i < BG_ACTOR_MAX; i++) {
if (dyna->bgActorFlags[i] & 1) {
DynaPoly_ExpandSRT(play, dyna, i, &vtxStartIndex, &polyStartIndex);
if (dyna->bgActorFlags[i] & BGACTOR_IN_USE) {
DynaPoly_AddBgActorToLookup(play, dyna, i, &vtxStartIndex, &polyStartIndex);
}
}
dyna->bitFlag &= ~DYNAPOLY_INVALIDATE_LOOKUP;
@ -2989,7 +2989,7 @@ void DynaPoly_UpdateBgActorTransforms(PlayState* play, DynaCollisionContext* dyn
s32 i;
for (i = 0; i < BG_ACTOR_MAX; i++) {
if (dyna->bgActorFlags[i] & 1) {
if (dyna->bgActorFlags[i] & BGACTOR_IN_USE) {
DynaPoly_SetBgActorPrevTransform(play, &dyna->bgActors[i]);
}
}
@ -3081,7 +3081,7 @@ f32 BgCheck_RaycastFloorDyna(DynaRaycast* dynaRaycast) {
*dynaRaycast->bgId = BGCHECK_SCENE;
for (i = 0; i < BG_ACTOR_MAX; i++) {
if (!(dynaRaycast->colCtx->dyna.bgActorFlags[i] & 1)) {
if (!(dynaRaycast->colCtx->dyna.bgActorFlags[i] & BGACTOR_IN_USE)) {
continue;
}
@ -3134,7 +3134,7 @@ f32 BgCheck_RaycastFloorDyna(DynaRaycast* dynaRaycast) {
if (pauseState == 0) {
pauseState = dynaRaycast->play->pauseCtx.debugState != 0;
}
if (!pauseState && (dynaRaycast->colCtx->dyna.bgActorFlags[*dynaRaycast->bgId] & 2)) {
if (!pauseState && (dynaRaycast->colCtx->dyna.bgActorFlags[*dynaRaycast->bgId] & BGACTOR_1)) {
curTransform = &dynaRaycast->dyna->bgActors[*dynaRaycast->bgId].curTransform;
polyMin =
&dynaRaycast->dyna->polyList[dynaRaycast->dyna->bgActors[*dynaRaycast->bgId].dynaLookup.polyStartIndex];
@ -3387,7 +3387,7 @@ s32 BgCheck_SphVsDynaWall(CollisionContext* colCtx, u16 xpFlags, f32* outX, f32*
resultPos = *pos;
for (i = 0; i < BG_ACTOR_MAX; i++) {
if (!(colCtx->dyna.bgActorFlags[i] & 1)) {
if (!(colCtx->dyna.bgActorFlags[i] & BGACTOR_IN_USE)) {
continue;
}
if ((colCtx->dyna.bgActors + i)->actor == actor) {
@ -3506,7 +3506,7 @@ s32 BgCheck_CheckDynaCeiling(CollisionContext* colCtx, u16 xpFlags, f32* outY, V
resultY = tempY;
for (i = 0; i < BG_ACTOR_MAX; i++) {
if (!(colCtx->dyna.bgActorFlags[i] & 1)) {
if (!(colCtx->dyna.bgActorFlags[i] & BGACTOR_IN_USE)) {
continue;
}
if (actor == colCtx->dyna.bgActors[i].actor) {
@ -3641,7 +3641,7 @@ s32 BgCheck_CheckLineAgainstDyna(CollisionContext* colCtx, u16 xpFlags, Vec3f* p
f32 by;
for (i = 0; i < BG_ACTOR_MAX; i++) {
if (colCtx->dyna.bgActorFlags[i] & 1) {
if (colCtx->dyna.bgActorFlags[i] & BGACTOR_IN_USE) {
if (actor != colCtx->dyna.bgActors[i].actor) {
ay = posA->y;
by = posB->y;
@ -3745,7 +3745,7 @@ s32 BgCheck_SphVsFirstDynaPoly(CollisionContext* colCtx, u16 xpFlags, CollisionP
Sphere16 testSphere;
for (i = 0; i < BG_ACTOR_MAX; i++) {
if (!(colCtx->dyna.bgActorFlags[i] & 1)) {
if (!(colCtx->dyna.bgActorFlags[i] & BGACTOR_IN_USE)) {
continue;
}
if (colCtx->dyna.bgActors[i].actor == actor) {
@ -3794,7 +3794,7 @@ void func_800418D0(CollisionContext* colCtx, PlayState* play) {
for (i = 0; i < BG_ACTOR_MAX; i++) {
flag = dyna->bgActorFlags[i];
if ((flag & 1) && !(flag & 2)) {
if ((flag & BGACTOR_IN_USE) && !(flag & BGACTOR_1)) {
Actor_SetObjectDependency(play, dyna->bgActors[i].actor);
CollisionHeader_SegmentedToVirtual(dyna->bgActors[i].colHeader);
}
@ -4453,7 +4453,7 @@ void BgCheck_DrawDynaCollision(PlayState* play, CollisionContext* colCtx) {
for (bgId = 0; bgId < BG_ACTOR_MAX; bgId++) {
if (!(colCtx->dyna.bgActorFlags[bgId] & 1)) {
if (!(colCtx->dyna.bgActorFlags[bgId] & BGACTOR_IN_USE)) {
continue;
}
BgCheck_DrawBgActor(play, colCtx, bgId);

View file

@ -113,7 +113,7 @@ void EnAObj_Init(Actor* thisx, PlayState* play) {
thisx->focus.pos = thisx->world.pos;
this->dyna.bgId = BGACTOR_NEG_ONE;
this->dyna.unk_160 = 0;
this->dyna.interactFlags = 0;
this->dyna.unk_15C = DPM_UNK;
thisx->uncullZoneDownward = 1200.0f;
thisx->uncullZoneScale = 200.0f;
@ -224,7 +224,7 @@ void EnAObj_SetupBlockRot(EnAObj* this, s16 type) {
void EnAObj_BlockRot(EnAObj* this, PlayState* play) {
if (this->rotateState == 0) {
if (this->dyna.unk_160 != 0) {
if (this->dyna.interactFlags != 0) {
this->rotateState++;
this->rotateForTimer = 20;

View file

@ -560,7 +560,7 @@ void EnItem00_Update(Actor* thisx, PlayState* play) {
D_80157D90 = play->gameplayFrames;
D_80157D94[0] = 0;
for (i = 0; i < 50; i++) {
if (play->colCtx.dyna.bgActorFlags[i] & 1) {
if (play->colCtx.dyna.bgActorFlags[i] & BGACTOR_IN_USE) {
dynaActor = play->colCtx.dyna.bgActors[i].actor;
if ((dynaActor != NULL) && (dynaActor->update != NULL)) {
if ((dynaActor->world.pos.x != dynaActor->prevPos.x) ||