diff --git a/src/engine/graph_node.h b/src/engine/graph_node.h index fc56ebe76..274a0412e 100644 --- a/src/engine/graph_node.h +++ b/src/engine/graph_node.h @@ -126,7 +126,6 @@ struct DisplayListNode Mtx *transform; void *transformPrev; void *displayList; - void *displayListPrev; struct DisplayListNode *next; }; diff --git a/src/game/rendering_graph_node.c b/src/game/rendering_graph_node.c index a4ec8159f..f32054321 100644 --- a/src/game/rendering_graph_node.c +++ b/src/game/rendering_graph_node.c @@ -227,12 +227,11 @@ void patch_mtx_interpolated(f32 delta) { gCurGraphNodeRoot = sBackgroundNodeRoot; vec3f_copy(posCopy, gLakituState.pos); vec3f_copy(focusCopy, gLakituState.focus); - /*if (gGlobalTimer == sBackgroundNode->prevCameraTimestamp + 1 && - gGlobalTimer != gLakituState.skipCameraInterpolationTimestamp) {*/ + if (gGlobalTimer != gLakituState.skipCameraInterpolationTimestamp) { delta_interpolate_vec3f(gLakituState.pos, sBackgroundNode->prevCameraPos, posCopy, delta); delta_interpolate_vec3f(gLakituState.focus, sBackgroundNode->prevCameraFocus, focusCopy, delta); - //} - /*list = */sBackgroundNode->fnNode.func(GEO_CONTEXT_RENDER, &sBackgroundNode->fnNode.node, NULL); + } + sBackgroundNode->fnNode.func(GEO_CONTEXT_RENDER, &sBackgroundNode->fnNode.node, NULL); vec3f_copy(gLakituState.pos, posCopy); vec3f_copy(gLakituState.focus, focusCopy); @@ -245,9 +244,6 @@ void patch_mtx_interpolated(f32 delta) { gShadowInterpCurrent = interp; Vec3f posInterp; delta_interpolate_vec3f(posInterp, interp->shadowPosPrev, interp->shadowPos, delta); - if (i == 0) { - printf("XXX: %f <--> %f == %f\n", interp->shadowPosPrev[1], interp->shadowPos[1], posInterp[1]); - } gCurGraphNodeObject = interp->obj; create_shadow_below_xyz(posInterp[0], posInterp[1], posInterp[2], interp->shadowScale, interp->node->shadowSolidity, interp->node->shadowType); } @@ -315,7 +311,7 @@ static void geo_process_master_list_sub(struct GraphNodeMasterList *node) { } gSPMatrix(gDisplayListHead++, VIRTUAL_TO_PHYSICAL(currList->transformPrev), G_MTX_MODELVIEW | G_MTX_LOAD | G_MTX_NOPUSH); - gSPDisplayList(gDisplayListHead++, currList->displayListPrev); + gSPDisplayList(gDisplayListHead++, currList->displayList); currList = currList->next; } } @@ -331,7 +327,7 @@ static void geo_process_master_list_sub(struct GraphNodeMasterList *node) { * parameter. Look at the RenderModeContainer struct to see the corresponding * render modes of layers. */ -static void geo_append_display_list2(void *displayList, void *displayListPrev, s16 layer) { +static void geo_append_display_list(void *displayList, s16 layer) { #ifdef F3DEX_GBI_2 gSPLookAt(gDisplayListHead++, &lookAt); @@ -343,7 +339,6 @@ static void geo_append_display_list2(void *displayList, void *displayListPrev, s listNode->transform = gMatStackFixed[gMatStackIndex]; listNode->transformPrev = gMatStackPrevFixed[gMatStackIndex]; listNode->displayList = displayList; - listNode->displayListPrev = displayListPrev; listNode->next = 0; if (gCurGraphNodeMasterList->listHeads[layer] == 0) { gCurGraphNodeMasterList->listHeads[layer] = listNode; @@ -354,10 +349,6 @@ static void geo_append_display_list2(void *displayList, void *displayListPrev, s } } -static void geo_append_display_list(void *displayList, s16 layer) { - geo_append_display_list2(displayList, displayList, layer); -} - /** * Process the master list node. */ @@ -724,20 +715,19 @@ static void geo_process_background(struct GraphNodeBackground *node) { vec3f_copy(posCopy, gLakituState.pos); vec3f_copy(focusCopy, gLakituState.focus); - /*if (gGlobalTimer == node->prevCameraTimestamp + 1 && - gGlobalTimer != gLakituState.skipCameraInterpolationTimestamp) {*/ + if (gGlobalTimer != gLakituState.skipCameraInterpolationTimestamp) { vec3f_copy(gLakituState.pos, node->prevCameraPos); vec3f_copy(gLakituState.focus, node->prevCameraFocus); sBackgroundNode = node; sBackgroundNodeRoot = gCurGraphNodeRoot; - //} + } list = node->fnNode.func(GEO_CONTEXT_RENDER, &node->fnNode.node, NULL); vec3f_copy(gLakituState.pos, posCopy); vec3f_copy(gLakituState.focus, focusCopy); } if (list != NULL) { - geo_append_display_list2((void *) VIRTUAL_TO_PHYSICAL(list), (void *) VIRTUAL_TO_PHYSICAL(list), node->fnNode.node.flags >> 8); + geo_append_display_list((void *) VIRTUAL_TO_PHYSICAL(list), node->fnNode.node.flags >> 8); } else if (gCurGraphNodeMasterList != NULL) { #ifndef F3DEX_GBI_2E Gfx *gfxStart = alloc_display_list(sizeof(Gfx) * 7); @@ -1002,14 +992,11 @@ static void geo_process_shadow(struct GraphNodeShadow *node) { if (!increment_mat_stack()) { return; } if (gShadowAboveWaterOrLava == TRUE) { - geo_append_display_list2((void *) VIRTUAL_TO_PHYSICAL(shadowListPrev), - (void *) VIRTUAL_TO_PHYSICAL(shadowListPrev), 4); + geo_append_display_list((void *) VIRTUAL_TO_PHYSICAL(shadowListPrev), 4); } else if (gMarioOnIceOrCarpet == TRUE) { - geo_append_display_list2((void *) VIRTUAL_TO_PHYSICAL(shadowListPrev), - (void *) VIRTUAL_TO_PHYSICAL(shadowListPrev), 5); + geo_append_display_list((void *) VIRTUAL_TO_PHYSICAL(shadowListPrev), 5); } else { - geo_append_display_list2((void *) VIRTUAL_TO_PHYSICAL(shadowListPrev), - (void *) VIRTUAL_TO_PHYSICAL(shadowListPrev), 6); + geo_append_display_list((void *) VIRTUAL_TO_PHYSICAL(shadowListPrev), 6); } gMatStackIndex--; } diff --git a/src/pc/controller/controller_keyboard_debug.c b/src/pc/controller/controller_keyboard_debug.c index 645fbc44d..09a72e585 100644 --- a/src/pc/controller/controller_keyboard_debug.c +++ b/src/pc/controller/controller_keyboard_debug.c @@ -42,7 +42,7 @@ static void debug_warp_level1() { //set_mario_action(&gMarioStates[0], ACT_JUMBO_STAR_CUTSCENE, 0); //return; - dynos_warp_to_level(LEVEL_CCM, 1, 1); + dynos_warp_to_level(LEVEL_BOB, 1, 1); } static void debug_warp_level2() { diff --git a/src/pc/djui/djui.c b/src/pc/djui/djui.c index e63467e7d..bbf96e747 100644 --- a/src/pc/djui/djui.c +++ b/src/pc/djui/djui.c @@ -5,6 +5,8 @@ #include "pc/lua/smlua_hooks.h" #include "djui_panel_playerlist.h" #include "djui_hud_utils.h" +#include "engine/math_util.h" +#include "pc/utils/misc.h" static Gfx* sSavedDisplayListHead = NULL; @@ -15,6 +17,24 @@ static u32 sDjuiLuaErrorTimeout = 0; bool gDjuiInMainMenu = true; bool gDjuiDisabled = false; +bool sDjuiRendered60fps = false; + +void patch_djui_before(void) { + sDjuiRendered60fps = false; +} + +void patch_djui_interpolated(UNUSED f32 delta) { + // reset the head and re-render DJUI + if (delta >= 0.5f && !sDjuiRendered60fps) { + sDjuiRendered60fps = true; + if (sSavedDisplayListHead == NULL) { return; } + gDisplayListHead = sSavedDisplayListHead; + djui_render(); + gDPFullSync(gDisplayListHead++); + gSPEndDisplayList(gDisplayListHead++); + } +} + void djui_init(void) { gDjuiRoot = djui_root_create(); @@ -58,15 +78,6 @@ void djui_lua_error(char* text) { sDjuiLuaErrorTimeout = 30 * 5; } -void djui_render_patch(void) { - // reset the head and re-render DJUI - if (sSavedDisplayListHead == NULL) { return; } - gDisplayListHead = sSavedDisplayListHead; - djui_render(); - gDPFullSync(gDisplayListHead++); - gSPEndDisplayList(gDisplayListHead++); -} - void djui_render(void) { if (gDjuiDisabled) { return; } sSavedDisplayListHead = gDisplayListHead; diff --git a/src/pc/djui/djui.h b/src/pc/djui/djui.h index d35562552..02dba6b79 100644 --- a/src/pc/djui/djui.h +++ b/src/pc/djui/djui.h @@ -66,5 +66,4 @@ extern bool gDjuiDisabled; void djui_init(void); void djui_connect_menu_open(void); void djui_lua_error(char* text); -void djui_render_patch(void); void djui_render(void); diff --git a/src/pc/pc_main.c b/src/pc/pc_main.c index bca22f4c7..34b1cd1a2 100644 --- a/src/pc/pc_main.c +++ b/src/pc/pc_main.c @@ -109,6 +109,7 @@ static void patch_interpolations_before(void) { extern void patch_paintings_before(void); extern void patch_bubble_particles_before(void); extern void patch_snow_particles_before(void); + extern void patch_djui_before(void); patch_mtx_before(); patch_screen_transition_before(); patch_title_screen_before(); @@ -117,6 +118,7 @@ static void patch_interpolations_before(void) { patch_paintings_before(); patch_bubble_particles_before(); patch_snow_particles_before(); + patch_djui_before(); } static inline void patch_interpolations(f32 delta) { @@ -128,7 +130,7 @@ static inline void patch_interpolations(f32 delta) { extern void patch_paintings_interpolated(f32 delta); extern void patch_bubble_particles_interpolated(f32 delta); extern void patch_snow_particles_interpolated(f32 delta); - extern void djui_render_patch(void); + extern void patch_djui_interpolated(f32 delta); patch_mtx_interpolated(delta); patch_screen_transition_interpolated(delta); patch_title_screen_interpolated(delta); @@ -137,7 +139,7 @@ static inline void patch_interpolations(f32 delta) { patch_paintings_interpolated(delta); patch_bubble_particles_interpolated(delta); patch_snow_particles_interpolated(delta); - /*djui_render_patch();*/ + patch_djui_interpolated(delta); } void produce_uncapped_frames(void) {