You've already forked HackerSM64
mirror of
https://github.com/HackerN64/HackerSM64.git
synced 2026-01-21 10:35:32 -08:00
Merge pull request #166 from Reonu/object_transparency
Fix some transparent objects rendering behind env boxes.
This commit is contained in:
@@ -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(),
|
||||
};
|
||||
|
||||
@@ -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(),
|
||||
|
||||
@@ -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(),
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user