From 81ff820c055de5bfd7def8ed06b3be56f4de61c9 Mon Sep 17 00:00:00 2001 From: Arceveti <73617174+Arceveti@users.noreply.github.com> Date: Sat, 11 Dec 2021 20:31:50 -0800 Subject: [PATCH 1/4] Add INTER mode for geo_update_layer_transparency --- actors/burn_smoke/geo.inc.c | 4 ++-- actors/tree/geo.inc.c | 16 ++++++++-------- src/game/object_helpers.c | 13 ++++++++----- src/game/object_helpers.h | 1 + 4 files changed, 19 insertions(+), 15 deletions(-) diff --git a/actors/burn_smoke/geo.inc.c b/actors/burn_smoke/geo.inc.c index 259077e81..e51f39c92 100644 --- a/actors/burn_smoke/geo.inc.c +++ b/actors/burn_smoke/geo.inc.c @@ -3,9 +3,9 @@ const GeoLayout burn_smoke_geo[] = { GEO_NODE_START(), GEO_OPEN_NODE(), #ifdef BURN_SMOKE_FIX - GEO_ASM(GEO_TRANSPARENCY_MODE_NORMAL, geo_update_layer_transparency), + GEO_ASM(GEO_TRANSPARENCY_MODE_INTER, geo_update_layer_transparency), #endif - GEO_DISPLAY_LIST(LAYER_TRANSPARENT, burn_smoke_seg4_dl), + GEO_DISPLAY_LIST(LAYER_TRANSPARENT_INTER, burn_smoke_seg4_dl), GEO_CLOSE_NODE(), GEO_END(), }; diff --git a/actors/tree/geo.inc.c b/actors/tree/geo.inc.c index 10cd0f4fb..a184abab2 100644 --- a/actors/tree/geo.inc.c +++ b/actors/tree/geo.inc.c @@ -3,13 +3,13 @@ const GeoLayout bubbly_tree_geo[] = { GEO_CULLING_RADIUS(800), GEO_OPEN_NODE(), #ifdef OBJ_OPACITY_BY_CAM_DIST - GEO_ASM(GEO_TRANSPARENCY_MODE_NORMAL, geo_update_layer_transparency), + GEO_ASM(GEO_TRANSPARENCY_MODE_INTER, geo_update_layer_transparency), GEO_SWITCH_CASE(2, geo_switch_anim_state), GEO_OPEN_NODE(), #endif GEO_DISPLAY_LIST(LAYER_ALPHA, tree_seg3_dl_bubbly), #ifdef OBJ_OPACITY_BY_CAM_DIST - GEO_DISPLAY_LIST(LAYER_TRANSPARENT, tree_seg3_dl_bubbly_transparent), + GEO_DISPLAY_LIST(LAYER_TRANSPARENT_INTER, tree_seg3_dl_bubbly_transparent), GEO_CLOSE_NODE(), #endif GEO_CLOSE_NODE(), @@ -21,13 +21,13 @@ const GeoLayout spiky_tree_geo[] = { GEO_CULLING_RADIUS(800), GEO_OPEN_NODE(), #ifdef OBJ_OPACITY_BY_CAM_DIST - GEO_ASM(GEO_TRANSPARENCY_MODE_NORMAL, geo_update_layer_transparency), + GEO_ASM(GEO_TRANSPARENCY_MODE_INTER, geo_update_layer_transparency), GEO_SWITCH_CASE(2, geo_switch_anim_state), GEO_OPEN_NODE(), #endif GEO_DISPLAY_LIST(LAYER_ALPHA, tree_seg3_dl_spiky), #ifdef OBJ_OPACITY_BY_CAM_DIST - GEO_DISPLAY_LIST(LAYER_TRANSPARENT, tree_seg3_dl_spiky_transparent), + GEO_DISPLAY_LIST(LAYER_TRANSPARENT_INTER, tree_seg3_dl_spiky_transparent), GEO_CLOSE_NODE(), #endif GEO_CLOSE_NODE(), @@ -39,13 +39,13 @@ const GeoLayout snow_tree_geo[] = { GEO_CULLING_RADIUS(800), GEO_OPEN_NODE(), #ifdef OBJ_OPACITY_BY_CAM_DIST - GEO_ASM(GEO_TRANSPARENCY_MODE_NORMAL, geo_update_layer_transparency), + GEO_ASM(GEO_TRANSPARENCY_MODE_INTER, geo_update_layer_transparency), GEO_SWITCH_CASE(2, geo_switch_anim_state), GEO_OPEN_NODE(), #endif GEO_DISPLAY_LIST(LAYER_ALPHA, tree_seg3_dl_snowy_pine), #ifdef OBJ_OPACITY_BY_CAM_DIST - GEO_DISPLAY_LIST(LAYER_TRANSPARENT, tree_seg3_dl_snowy_pine_transparent), + GEO_DISPLAY_LIST(LAYER_TRANSPARENT_INTER, tree_seg3_dl_snowy_pine_transparent), GEO_CLOSE_NODE(), #endif GEO_CLOSE_NODE(), @@ -57,13 +57,13 @@ const GeoLayout palm_tree_geo[] = { GEO_CULLING_RADIUS(800), GEO_OPEN_NODE(), #ifdef OBJ_OPACITY_BY_CAM_DIST - GEO_ASM(GEO_TRANSPARENCY_MODE_NORMAL, geo_update_layer_transparency), + GEO_ASM(GEO_TRANSPARENCY_MODE_INTER, geo_update_layer_transparency), GEO_SWITCH_CASE(2, geo_switch_anim_state), GEO_OPEN_NODE(), #endif GEO_DISPLAY_LIST(LAYER_ALPHA, tree_seg3_dl_palm), #ifdef OBJ_OPACITY_BY_CAM_DIST - GEO_DISPLAY_LIST(LAYER_TRANSPARENT, tree_seg3_dl_palm_transparent), + GEO_DISPLAY_LIST(LAYER_TRANSPARENT_INTER, tree_seg3_dl_palm_transparent), GEO_CLOSE_NODE(), #endif GEO_CLOSE_NODE(), diff --git a/src/game/object_helpers.c b/src/game/object_helpers.c index 459635a4b..836683a64 100644 --- a/src/game/object_helpers.c +++ b/src/game/object_helpers.c @@ -51,6 +51,7 @@ Gfx *geo_update_layer_transparency(s32 callContext, struct GraphNode *node, UNUS if (callContext == GEO_CONTEXT_RENDER) { struct Object *objectGraphNode = (struct Object *) gCurGraphNodeObject; // TODO: change this to object pointer? struct GraphNodeGenerated *currentGraphNode = (struct GraphNodeGenerated *) node; + s32 parameter = currentGraphNode->parameter; if (gCurGraphNodeHeldObject != NULL) { objectGraphNode = gCurGraphNodeHeldObject->objNode; @@ -62,7 +63,7 @@ Gfx *geo_update_layer_transparency(s32 callContext, struct GraphNode *node, UNUS Gfx *dlHead = dlStart; if (objectOpacity == 0xFF) { - if (currentGraphNode->parameter == GEO_TRANSPARENCY_MODE_DECAL) { + if (parameter == GEO_TRANSPARENCY_MODE_DECAL) { SET_GRAPH_NODE_LAYER(currentGraphNode->fnNode.node.flags, LAYER_TRANSPARENT_DECAL); } else { SET_GRAPH_NODE_LAYER(currentGraphNode->fnNode.node.flags, LAYER_OPAQUE); @@ -70,20 +71,22 @@ Gfx *geo_update_layer_transparency(s32 callContext, struct GraphNode *node, UNUS objectGraphNode->oAnimState = TRANSPARENCY_ANIM_STATE_OPAQUE; } else { - if (currentGraphNode->parameter == GEO_TRANSPARENCY_MODE_DECAL) { + if (parameter == GEO_TRANSPARENCY_MODE_DECAL) { SET_GRAPH_NODE_LAYER(currentGraphNode->fnNode.node.flags, LAYER_TRANSPARENT_DECAL); + } else if (parameter == GEO_TRANSPARENCY_MODE_INTER) { + SET_GRAPH_NODE_LAYER(currentGraphNode->fnNode.node.flags, LAYER_TRANSPARENT_INTER); } else { SET_GRAPH_NODE_LAYER(currentGraphNode->fnNode.node.flags, LAYER_TRANSPARENT); } objectGraphNode->oAnimState = TRANSPARENCY_ANIM_STATE_TRANSPARENT; - if (objectOpacity == 0x00 && segmented_to_virtual(bhvBowser) == objectGraphNode->behavior) { + if ((objectOpacity == 0x00) && segmented_to_virtual(bhvBowser) == objectGraphNode->behavior) { objectGraphNode->oAnimState = BOWSER_ANIM_STATE_INVISIBLE; } - if (currentGraphNode->parameter != GEO_TRANSPARENCY_MODE_NO_DITHER - && (objectGraphNode->activeFlags & ACTIVE_FLAG_DITHERED_ALPHA)) { + if ((parameter != GEO_TRANSPARENCY_MODE_NO_DITHER) + && (objectGraphNode->activeFlags & ACTIVE_FLAG_DITHERED_ALPHA)) { gDPSetAlphaCompare(dlHead++, G_AC_DITHER); } } diff --git a/src/game/object_helpers.h b/src/game/object_helpers.h index ca9cd8116..99169aa13 100644 --- a/src/game/object_helpers.h +++ b/src/game/object_helpers.h @@ -56,6 +56,7 @@ enum GeoUpdateLayerTransparencyModes { GEO_TRANSPARENCY_MODE_NORMAL = 0, GEO_TRANSPARENCY_MODE_NO_DITHER = 10, GEO_TRANSPARENCY_MODE_DECAL = 20, + GEO_TRANSPARENCY_MODE_INTER = 30, }; Gfx *geo_update_projectile_pos_from_parent(s32 callContext, UNUSED struct GraphNode *node, Mat4 mtx); From 552b765ed0294e78b19bced58f5e3a34dce22b1c Mon Sep 17 00:00:00 2001 From: Arceveti <73617174+Arceveti@users.noreply.github.com> Date: Wed, 15 Dec 2021 17:51:58 -0800 Subject: [PATCH 2/4] Move flames to LAYER_TRANSPARENT_INTER --- actors/flame/geo.inc.c | 32 ++++++++++++++++---------------- 1 file changed, 16 insertions(+), 16 deletions(-) diff --git a/actors/flame/geo.inc.c b/actors/flame/geo.inc.c index a4617ad2e..6365927af 100644 --- a/actors/flame/geo.inc.c +++ b/actors/flame/geo.inc.c @@ -13,14 +13,14 @@ const GeoLayout red_flame_geo[] = { GEO_OPEN_NODE(), GEO_SWITCH_CASE(8, geo_switch_anim_state), GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_TRANSPARENT, flame_seg3_dl_0301B3B0), - GEO_DISPLAY_LIST(LAYER_TRANSPARENT, flame_seg3_dl_0301B3C8), - GEO_DISPLAY_LIST(LAYER_TRANSPARENT, flame_seg3_dl_0301B3E0), - GEO_DISPLAY_LIST(LAYER_TRANSPARENT, flame_seg3_dl_0301B3F8), - GEO_DISPLAY_LIST(LAYER_TRANSPARENT, flame_seg3_dl_0301B410), - GEO_DISPLAY_LIST(LAYER_TRANSPARENT, flame_seg3_dl_0301B428), - GEO_DISPLAY_LIST(LAYER_TRANSPARENT, flame_seg3_dl_0301B440), - GEO_DISPLAY_LIST(LAYER_TRANSPARENT, flame_seg3_dl_0301B458), + GEO_DISPLAY_LIST(LAYER_TRANSPARENT_INTER, flame_seg3_dl_0301B3B0), + GEO_DISPLAY_LIST(LAYER_TRANSPARENT_INTER, flame_seg3_dl_0301B3C8), + GEO_DISPLAY_LIST(LAYER_TRANSPARENT_INTER, flame_seg3_dl_0301B3E0), + GEO_DISPLAY_LIST(LAYER_TRANSPARENT_INTER, flame_seg3_dl_0301B3F8), + GEO_DISPLAY_LIST(LAYER_TRANSPARENT_INTER, flame_seg3_dl_0301B410), + GEO_DISPLAY_LIST(LAYER_TRANSPARENT_INTER, flame_seg3_dl_0301B428), + GEO_DISPLAY_LIST(LAYER_TRANSPARENT_INTER, flame_seg3_dl_0301B440), + GEO_DISPLAY_LIST(LAYER_TRANSPARENT_INTER, flame_seg3_dl_0301B458), GEO_CLOSE_NODE(), GEO_CLOSE_NODE(), GEO_END(), @@ -32,14 +32,14 @@ const GeoLayout blue_flame_geo[] = { GEO_OPEN_NODE(), GEO_SWITCH_CASE(8, geo_switch_anim_state), GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_TRANSPARENT, flame_seg3_dl_0301B500), - GEO_DISPLAY_LIST(LAYER_TRANSPARENT, flame_seg3_dl_0301B518), - GEO_DISPLAY_LIST(LAYER_TRANSPARENT, flame_seg3_dl_0301B530), - GEO_DISPLAY_LIST(LAYER_TRANSPARENT, flame_seg3_dl_0301B548), - GEO_DISPLAY_LIST(LAYER_TRANSPARENT, flame_seg3_dl_0301B560), - GEO_DISPLAY_LIST(LAYER_TRANSPARENT, flame_seg3_dl_0301B578), - GEO_DISPLAY_LIST(LAYER_TRANSPARENT, flame_seg3_dl_0301B590), - GEO_DISPLAY_LIST(LAYER_TRANSPARENT, flame_seg3_dl_0301B5A8), + GEO_DISPLAY_LIST(LAYER_TRANSPARENT_INTER, flame_seg3_dl_0301B500), + GEO_DISPLAY_LIST(LAYER_TRANSPARENT_INTER, flame_seg3_dl_0301B518), + GEO_DISPLAY_LIST(LAYER_TRANSPARENT_INTER, flame_seg3_dl_0301B530), + GEO_DISPLAY_LIST(LAYER_TRANSPARENT_INTER, flame_seg3_dl_0301B548), + GEO_DISPLAY_LIST(LAYER_TRANSPARENT_INTER, flame_seg3_dl_0301B560), + GEO_DISPLAY_LIST(LAYER_TRANSPARENT_INTER, flame_seg3_dl_0301B578), + GEO_DISPLAY_LIST(LAYER_TRANSPARENT_INTER, flame_seg3_dl_0301B590), + GEO_DISPLAY_LIST(LAYER_TRANSPARENT_INTER, flame_seg3_dl_0301B5A8), GEO_CLOSE_NODE(), GEO_CLOSE_NODE(), GEO_END(), From a2faba2a930d0eeba8eb2063e22f77d51282ad7a Mon Sep 17 00:00:00 2001 From: Arceveti <73617174+Arceveti@users.noreply.github.com> Date: Fri, 17 Dec 2021 10:35:52 -0800 Subject: [PATCH 3/4] Update src/game/object_helpers.c Co-authored-by: thecozies <79979276+thecozies@users.noreply.github.com> --- src/game/object_helpers.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/game/object_helpers.c b/src/game/object_helpers.c index 836683a64..548c8c50a 100644 --- a/src/game/object_helpers.c +++ b/src/game/object_helpers.c @@ -81,7 +81,7 @@ Gfx *geo_update_layer_transparency(s32 callContext, struct GraphNode *node, UNUS objectGraphNode->oAnimState = TRANSPARENCY_ANIM_STATE_TRANSPARENT; - if ((objectOpacity == 0x00) && segmented_to_virtual(bhvBowser) == objectGraphNode->behavior) { + if (objectOpacity == 0x00 && segmented_to_virtual(bhvBowser) == objectGraphNode->behavior) { objectGraphNode->oAnimState = BOWSER_ANIM_STATE_INVISIBLE; } From b5f785d669f2609a073e45a89c346a751204732c Mon Sep 17 00:00:00 2001 From: Arceveti <73617174+Arceveti@users.noreply.github.com> Date: Fri, 17 Dec 2021 10:35:57 -0800 Subject: [PATCH 4/4] Update src/game/object_helpers.c Co-authored-by: thecozies <79979276+thecozies@users.noreply.github.com> --- src/game/object_helpers.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/game/object_helpers.c b/src/game/object_helpers.c index 548c8c50a..463f6d5b8 100644 --- a/src/game/object_helpers.c +++ b/src/game/object_helpers.c @@ -85,8 +85,8 @@ Gfx *geo_update_layer_transparency(s32 callContext, struct GraphNode *node, UNUS objectGraphNode->oAnimState = BOWSER_ANIM_STATE_INVISIBLE; } - if ((parameter != GEO_TRANSPARENCY_MODE_NO_DITHER) - && (objectGraphNode->activeFlags & ACTIVE_FLAG_DITHERED_ALPHA)) { + if (parameter != GEO_TRANSPARENCY_MODE_NO_DITHER + && (objectGraphNode->activeFlags & ACTIVE_FLAG_DITHERED_ALPHA)) { gDPSetAlphaCompare(dlHead++, G_AC_DITHER); } }