@@ -362,12 +362,13 @@ void play_transition_after_delay(s16 transType, s16 time, u8 red, u8 green, u8 b
362362}
363363
364364void render_game (void ) {
365- #ifdef ENABLE_N3DS_3D_MODE
366- gDPSet2d (gDisplayListHead ++ , 0 ); // reset 2d mode
367- #endif
368365 if (gCurrentArea != NULL && !gWarpTransition .pauseRendering ) {
369366 geo_process_root (gCurrentArea -> unk04 , D_8032CE74 , D_8032CE78 , gFBSetColor );
370367
368+ #ifdef ENABLE_N3DS_3D_MODE
369+ gDPForceFlush (gDisplayListHead ++ ); // flush 3D scene
370+ gDPSet2d (gDisplayListHead ++ , 1 ); // HUD is 2D
371+ #endif
371372 gSPViewport (gDisplayListHead ++ , VIRTUAL_TO_PHYSICAL (& D_8032CF00 ));
372373
373374 gDPSetScissor (gDisplayListHead ++ , G_SC_NON_INTERLACE , 0 , BORDER_HEIGHT , SCREEN_WIDTH ,
@@ -376,12 +377,24 @@ void render_game(void) {
376377
377378 gDPSetScissor (gDisplayListHead ++ , G_SC_NON_INTERLACE , 0 , 0 , SCREEN_WIDTH , SCREEN_HEIGHT );
378379 render_text_labels ();
380+ #ifdef ENABLE_N3DS_3D_MODE
381+ gDPForceFlush (gDisplayListHead ++ ); // flush hud
382+ gDPSet2d (gDisplayListHead ++ , 0 ); // reset 2D mode
383+ #endif
379384 do_cutscene_handler ();
380385 print_displaying_credits_entry ();
386+
387+ #ifdef ENABLE_N3DS_3D_MODE
388+ gDPForceFlush (gDisplayListHead ++ ); // flush credits
389+ gDPSet2d (gDisplayListHead ++ , 1 ); // dialog/menus are 2D
390+ #endif
381391 gDPSetScissor (gDisplayListHead ++ , G_SC_NON_INTERLACE , 0 , BORDER_HEIGHT , SCREEN_WIDTH ,
382392 SCREEN_HEIGHT - BORDER_HEIGHT );
383393 gPauseScreenMode = render_menus_and_dialogs ();
384-
394+ #ifdef ENABLE_N3DS_3D_MODE
395+ gDPForceFlush (gDisplayListHead ++ ); // flush dialog/menus
396+ gDPSet2d (gDisplayListHead ++ , 0 ); // reset 2D mode
397+ #endif
385398 if (gPauseScreenMode != 0 ) {
386399 gSaveOptSelectIndex = gPauseScreenMode ;
387400 }
@@ -408,7 +421,15 @@ void render_game(void) {
408421 }
409422 }
410423 } else {
424+ #ifdef ENABLE_N3DS_3D_MODE
425+ gDPForceFlush (gDisplayListHead ++ ); // flush anything
426+ gDPSet2d (gDisplayListHead ++ , 1 ); // text labels are 2D
427+ #endif
411428 render_text_labels ();
429+ #ifdef ENABLE_N3DS_3D_MODE
430+ gDPForceFlush (gDisplayListHead ++ ); // flush text labels
431+ gDPSet2d (gDisplayListHead ++ , 0 ); // reset 2D mode
432+ #endif
412433 if (D_8032CE78 != 0 ) {
413434 clear_viewport (D_8032CE78 , gWarpTransFBSetColor );
414435 } else {
0 commit comments