force billboard star numbers to fix romhacks that override star number actor

This commit is contained in:
Isaac0-dev 2025-03-04 16:44:57 +10:00
parent d6e243c4a7
commit 386417edc0
2 changed files with 9 additions and 13 deletions

View file

@ -16,7 +16,7 @@ void bhv_star_number_loop(void) {
obj_set_angle(o, 0, 0, 0);
obj_scale(o, 1.f);
o->oAnimState = o->oBehParams2ndByte = ((star->oBehParams >> 24) & 0xFF) + 1;
o->header.gfx.node.flags = star->header.gfx.node.flags;
o->header.gfx.node.flags = star->header.gfx.node.flags | GRAPH_RENDER_BILLBOARD;
} else {
cur_obj_disable_rendering();
cur_obj_hide();

View file

@ -1235,6 +1235,7 @@ static void geo_process_object(struct Object *node) {
}
}
bool noBillboard = (node->header.gfx.sharedChild && node->header.gfx.sharedChild->extraFlags & GRAPH_EXTRA_FORCE_3D);
if (node->header.gfx.areaIndex == gCurGraphNodeRoot->areaIndex) {
if (node->header.gfx.throwMatrix != NULL) {
@ -1247,14 +1248,13 @@ static void geo_process_object(struct Object *node) {
mtxf_copy(mtxf, node->header.gfx.prevThrowMatrix);
mtxf_mul(gMatStackPrev[gMatStackIndex + 1], mtxf, gMatStackPrev[gMatStackIndex]);
} else {
mtxf_mul(gMatStackPrev[gMatStackIndex + 1], (void *) node->header.gfx.throwMatrix,
gMatStackPrev[gMatStackIndex]);
mtxf_mul(gMatStackPrev[gMatStackIndex + 1], (void *) node->header.gfx.throwMatrix, gMatStackPrev[gMatStackIndex]);
}
mtxf_copy(node->header.gfx.prevThrowMatrix, *node->header.gfx.throwMatrix);
node->header.gfx.prevThrowMatrixTimestamp = gGlobalTimer;
} else if ((node->header.gfx.node.flags & GRAPH_RENDER_CYLBOARD) && !(node->header.gfx.sharedChild && node->header.gfx.sharedChild->extraFlags & GRAPH_EXTRA_FORCE_3D)) {
} else if (node->header.gfx.node.flags & GRAPH_RENDER_CYLBOARD && !noBillboard) {
Vec3f posPrev;
@ -1268,12 +1268,10 @@ static void geo_process_object(struct Object *node) {
vec3f_copy(node->header.gfx.prevPos, node->header.gfx.pos);
node->header.gfx.prevTimestamp = gGlobalTimer;
mtxf_cylboard(gMatStack[gMatStackIndex + 1], gMatStack[gMatStackIndex],
node->header.gfx.pos, gCurGraphNodeCamera->roll);
mtxf_cylboard(gMatStackPrev[gMatStackIndex + 1], gMatStackPrev[gMatStackIndex],
posPrev, gCurGraphNodeCamera->roll);
mtxf_cylboard(gMatStack[gMatStackIndex + 1], gMatStack[gMatStackIndex], node->header.gfx.pos, gCurGraphNodeCamera->roll);
mtxf_cylboard(gMatStackPrev[gMatStackIndex + 1], gMatStackPrev[gMatStackIndex], posPrev, gCurGraphNodeCamera->roll);
} else if ((node->header.gfx.node.flags & GRAPH_RENDER_BILLBOARD) && !(node->header.gfx.sharedChild && node->header.gfx.sharedChild->extraFlags & GRAPH_EXTRA_FORCE_3D)) {
} else if (node->header.gfx.node.flags & GRAPH_RENDER_BILLBOARD && !noBillboard) {
Vec3f posPrev;
@ -1287,10 +1285,8 @@ static void geo_process_object(struct Object *node) {
vec3f_copy(node->header.gfx.prevPos, node->header.gfx.pos);
node->header.gfx.prevTimestamp = gGlobalTimer;
mtxf_billboard(gMatStack[gMatStackIndex + 1], gMatStack[gMatStackIndex],
node->header.gfx.pos, gCurGraphNodeCamera->roll);
mtxf_billboard(gMatStackPrev[gMatStackIndex + 1], gMatStackPrev[gMatStackIndex],
posPrev, gCurGraphNodeCamera->roll);
mtxf_billboard(gMatStack[gMatStackIndex + 1], gMatStack[gMatStackIndex], node->header.gfx.pos, gCurGraphNodeCamera->roll);
mtxf_billboard(gMatStackPrev[gMatStackIndex + 1], gMatStackPrev[gMatStackIndex], posPrev, gCurGraphNodeCamera->roll);
} else {