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/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(), 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 617e51b30..c63dd3bec 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,8 +71,10 @@ 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); } @@ -82,7 +85,7 @@ Gfx *geo_update_layer_transparency(s32 callContext, struct GraphNode *node, UNUS objectGraphNode->oAnimState = BOWSER_ANIM_STATE_INVISIBLE; } - if (currentGraphNode->parameter != GEO_TRANSPARENCY_MODE_NO_DITHER + 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);