diff --git a/src/d_clisrv.c b/src/d_clisrv.c index 782241c40..5cee6c816 100644 --- a/src/d_clisrv.c +++ b/src/d_clisrv.c @@ -4026,6 +4026,7 @@ void SV_StopServer(void) if (gamestate == GS_VOTING) Y_EndVote(); gamestate = wipegamestate = GS_NULL; + P_UnloadLevel(); for (i = 0; i < MAXSPLITSCREENPLAYERS; i++) ((UINT16*)localtextcmd[i])[0] = 0; diff --git a/src/d_main.cpp b/src/d_main.cpp index 370564828..813126e4d 100644 --- a/src/d_main.cpp +++ b/src/d_main.cpp @@ -275,10 +275,13 @@ void D_ProcessEvents(void) recursioncheck = false; } -static void D_RenderLevel(void) +boolean D_RenderLevel(void) { UINT8 i; + if (automapactive || dedicated || !cv_renderview.value || !levelloaded) + return false; + R_ApplyLevelInterpolators(R_UsingFrameInterpolation() ? rendertimefrac : FRACUNIT); viewwindowy = 0; @@ -387,6 +390,7 @@ static void D_RenderLevel(void) ps_rendercalltime = I_GetPreciseTime() - ps_rendercalltime; R_RestoreLevelInterpolators(); + return true; } // @@ -511,12 +515,7 @@ static void D_Display(void) // intermission background if (lastdraw) { - if (rendermode == render_soft && !automapactive && !dedicated && cv_renderview.value) - { - D_RenderLevel(); - Y_ConsiderScreenBuffer(); - usebuffer = true; - } + Y_ConsiderScreenBuffer(); lastdraw = false; } @@ -607,8 +606,7 @@ static void D_Display(void) // see if the border needs to be initially drawn if (gamestate == GS_LEVEL || (gamestate == GS_TITLESCREEN && titlemapinaction && curbghide && (!hidetitlemap))) { - if (!automapactive && !dedicated && cv_renderview.value) - D_RenderLevel(); + D_RenderLevel(); ps_uitime = I_GetPreciseTime(); diff --git a/src/d_main.h b/src/d_main.h index a9749408a..e190464df 100644 --- a/src/d_main.h +++ b/src/d_main.h @@ -61,6 +61,8 @@ extern char srb2path[256]; //Alam: SRB2's Home // the infinite loop of D_SRB2Loop() called from win_main for windows version void D_SRB2Loop(void) FUNCNORETURN; +boolean D_RenderLevel(void); + typedef enum { WIPELOOP_RUNWIPE, diff --git a/src/hardware/hw_drv.h b/src/hardware/hw_drv.h index ad1b11538..5ec09450d 100644 --- a/src/hardware/hw_drv.h +++ b/src/hardware/hw_drv.h @@ -61,6 +61,7 @@ EXPORT void HWRAPI(FlushScreenTextures) (void); EXPORT void HWRAPI(StartScreenWipe) (void); EXPORT void HWRAPI(EndScreenWipe) (void); EXPORT void HWRAPI(DoScreenWipe) (void); +EXPORT void HWRAPI(MakeIntermissionBG) (void); EXPORT void HWRAPI(DrawIntermissionBG) (void); EXPORT void HWRAPI(MakeScreenTexture) (void); EXPORT void HWRAPI(RenderVhsEffect) (INT16 upbary, INT16 downbary, UINT8 updistort, UINT8 downdistort, UINT8 barsize); @@ -114,6 +115,7 @@ struct hwdriver_s StartScreenWipe pfnStartScreenWipe; EndScreenWipe pfnEndScreenWipe; DoScreenWipe pfnDoScreenWipe; + MakeIntermissionBG pfnMakeIntermissionBG; DrawIntermissionBG pfnDrawIntermissionBG; MakeScreenTexture pfnMakeScreenTexture; RenderVhsEffect pfnRenderVhsEffect; diff --git a/src/hardware/hw_main.c b/src/hardware/hw_main.c index 1dab35638..eb4c43380 100644 --- a/src/hardware/hw_main.c +++ b/src/hardware/hw_main.c @@ -6431,8 +6431,7 @@ void HWR_DoPostProcessor(player_t *player) } // Capture the screen for intermission and screen waving - if(gamestate != GS_INTERMISSION) - HWD.pfnMakeScreenTexture(); + HWD.pfnMakeScreenTexture(); if (r_splitscreen) // Not supported in splitscreen - someone want to add support? return; @@ -6477,10 +6476,6 @@ void HWR_DoPostProcessor(player_t *player) } } HWD.pfnPostImgRedraw(v); - - // Capture the screen again for screen waving on the intermission - if(gamestate != GS_INTERMISSION) - HWD.pfnMakeScreenTexture(); } // Flipping of the screen isn't done here anymore } @@ -6497,6 +6492,11 @@ void HWR_EndScreenWipe(void) HWD.pfnEndScreenWipe(); } +void HWR_MakeIntermissionBG(void) +{ + HWD.pfnMakeIntermissionBG(); +} + void HWR_DrawIntermissionBG(void) { HWD.pfnDrawIntermissionBG(); diff --git a/src/hardware/hw_main.h b/src/hardware/hw_main.h index a247cd60a..83503176c 100644 --- a/src/hardware/hw_main.h +++ b/src/hardware/hw_main.h @@ -64,6 +64,7 @@ INT32 HWR_GetTextureUsed(void); void HWR_DoPostProcessor(player_t *player); void HWR_StartScreenWipe(void); void HWR_EndScreenWipe(void); +void HWR_MakeIntermissionBG(void); void HWR_DrawIntermissionBG(void); void HWR_DoWipe(UINT8 wipenum, UINT8 scrnnum); void HWR_DoTintedWipe(UINT8 wipenum, UINT8 scrnnum); diff --git a/src/hardware/r_opengl/r_opengl.c b/src/hardware/r_opengl/r_opengl.c index 6357f9a8f..52c5070f1 100644 --- a/src/hardware/r_opengl/r_opengl.c +++ b/src/hardware/r_opengl/r_opengl.c @@ -94,6 +94,7 @@ static GLint viewport[4]; // These need to start at 0 and be set to their number, and be reset to 0 when deleted so that intel GPUs // can know when the textures aren't there, as textures are always considered resident in their virtual memory static GLuint screentexture = 0; +static GLuint intermissionbg = 0; static GLuint startScreenWipe = 0; static GLuint endScreenWipe = 0; static GLuint finalScreenTexture = 0; @@ -3264,24 +3265,25 @@ EXPORT void HWRAPI(PostImgRedraw) (float points[SCREENVERTS][SCREENVERTS][2]) EXPORT void HWRAPI(FlushScreenTextures) (void) { pglDeleteTextures(1, &screentexture); + pglDeleteTextures(1, &intermissionbg); pglDeleteTextures(1, &startScreenWipe); pglDeleteTextures(1, &endScreenWipe); pglDeleteTextures(1, &finalScreenTexture); screentexture = 0; + intermissionbg = 0; startScreenWipe = 0; endScreenWipe = 0; finalScreenTexture = 0; } -// Create Screen to fade from -EXPORT void HWRAPI(StartScreenWipe) (void) +static void GetScreenTexture(GLuint *texnum) { - boolean firstTime = (startScreenWipe == 0); + boolean firstTime = (*texnum == 0); // Create screen texture if (firstTime) - pglGenTextures(1, &startScreenWipe); - pglBindTexture(GL_TEXTURE_2D, startScreenWipe); + pglGenTextures(1, texnum); + pglBindTexture(GL_TEXTURE_2D, *texnum); if (firstTime) { @@ -3294,33 +3296,25 @@ EXPORT void HWRAPI(StartScreenWipe) (void) else pglCopyTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, 0, 0, texsize, texsize); - tex_downloaded = startScreenWipe; + tex_downloaded = *texnum; +} + +// Create Screen to fade from +EXPORT void HWRAPI(StartScreenWipe) (void) +{ + GetScreenTexture(&startScreenWipe); } // Create Screen to fade to EXPORT void HWRAPI(EndScreenWipe)(void) { - boolean firstTime = (endScreenWipe == 0); - - // Create screen texture - if (firstTime) - pglGenTextures(1, &endScreenWipe); - pglBindTexture(GL_TEXTURE_2D, endScreenWipe); - - if (firstTime) - { - pglTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); - pglTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); - Clamp2D(GL_TEXTURE_WRAP_S); - Clamp2D(GL_TEXTURE_WRAP_T); - pglCopyTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, 0, 0, texsize, texsize, 0); - } - else - pglCopyTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, 0, 0, texsize, texsize); - - tex_downloaded = endScreenWipe; + GetScreenTexture(&endScreenWipe); } +EXPORT void HWRAPI(MakeIntermissionBG) (void) +{ + GetScreenTexture(&intermissionbg); +} // Draw the last scene under the intermission EXPORT void HWRAPI(DrawIntermissionBG)(void) @@ -3354,14 +3348,14 @@ EXPORT void HWRAPI(DrawIntermissionBG)(void) pglClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT); - pglBindTexture(GL_TEXTURE_2D, screentexture); + pglBindTexture(GL_TEXTURE_2D, intermissionbg); pglColor4ubv(white); pglTexCoordPointer(2, GL_FLOAT, 0, fix); pglVertexPointer(3, GL_FLOAT, 0, screenVerts); pglDrawArrays(GL_TRIANGLE_FAN, 0, 4); - tex_downloaded = screentexture; + tex_downloaded = intermissionbg; } // Do screen fades! @@ -3451,25 +3445,7 @@ EXPORT void HWRAPI(DoScreenWipe)(void) // Create a texture from the screen. EXPORT void HWRAPI(MakeScreenTexture) (void) { - boolean firstTime = (screentexture == 0); - - // Create screen texture - if (firstTime) - pglGenTextures(1, &screentexture); - pglBindTexture(GL_TEXTURE_2D, screentexture); - - if (firstTime) - { - pglTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); - pglTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); - Clamp2D(GL_TEXTURE_WRAP_S); - Clamp2D(GL_TEXTURE_WRAP_T); - pglCopyTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, 0, 0, texsize, texsize, 0); - } - else - pglCopyTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, 0, 0, texsize, texsize); - - tex_downloaded = screentexture; + GetScreenTexture(&screentexture); } EXPORT void HWRAPI(RenderVhsEffect) (INT16 upbary, INT16 downbary, UINT8 updistort, UINT8 downdistort, UINT8 barsize) @@ -3554,25 +3530,7 @@ EXPORT void HWRAPI(RenderVhsEffect) (INT16 upbary, INT16 downbary, UINT8 updisto EXPORT void HWRAPI(MakeScreenFinalTexture) (void) { - boolean firstTime = (finalScreenTexture == 0); - - // Create screen texture - if (firstTime) - pglGenTextures(1, &finalScreenTexture); - pglBindTexture(GL_TEXTURE_2D, finalScreenTexture); - - if (firstTime) - { - pglTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); - pglTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); - Clamp2D(GL_TEXTURE_WRAP_S); - Clamp2D(GL_TEXTURE_WRAP_T); - pglCopyTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, 0, 0, texsize, texsize, 0); - } - else - pglCopyTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, 0, 0, texsize, texsize); - - tex_downloaded = finalScreenTexture; + GetScreenTexture(&finalScreenTexture); } EXPORT void HWRAPI(DrawScreenFinalTexture)(int width, int height) diff --git a/src/p_setup.c b/src/p_setup.c index b5f060757..e93fc6abc 100644 --- a/src/p_setup.c +++ b/src/p_setup.c @@ -156,6 +156,7 @@ boolean draftingactive; UINT16 bossdisabled; boolean stoppedclock; boolean levelloading; +boolean levelloaded = false; UINT8 levelfadecol; virtres_t *curmapvirt; @@ -9016,6 +9017,10 @@ boolean P_LoadLevel(boolean fromnetsave, boolean reloadinggamestate) levelloading = false; } + // the level is THOROUGHLY loaded now... + // set this before starting the titlecard though + levelloaded = true; + if (reloadinggamestate == false) { if (rendermode != render_none) @@ -9109,6 +9114,12 @@ void P_PostLoadLevel(void) TracyCZoneEnd(__zone); } +void P_UnloadLevel(void) +{ + // this doesn't actually free any memory. i'm not messing with that... + // just clear the level loaded flag + levelloaded = false; +} // // P_RunSOC diff --git a/src/p_setup.h b/src/p_setup.h index 6647790f1..8c6d03bf1 100644 --- a/src/p_setup.h +++ b/src/p_setup.h @@ -33,6 +33,8 @@ extern mapthing_t *deathmatchstarts[MAX_DM_STARTS]; extern INT32 numdmstarts, numcoopstarts, numredctfstarts, numbluectfstarts; extern boolean levelloading; +extern boolean levelloaded; // is there an actual level loaded? for intermission + // (i.e. is it safe to call D_RenderLevel?) extern UINT8 levelfadecol; extern lumpnum_t lastloadedmaplumpnum; // for comparative savegame @@ -85,6 +87,7 @@ void P_PostLoadLevel(void); #ifdef HWRENDER void HWR_LoadLevel(void); #endif +void P_UnloadLevel(void); boolean P_AddWadFile(const char *wadfilename, wadcompat_t compat); #define MAPRET_ADDED (1) diff --git a/src/screen.c b/src/screen.c index dc8c09607..441f0d821 100644 --- a/src/screen.c +++ b/src/screen.c @@ -328,6 +328,9 @@ void SCR_SetMode(void) SCR_SetDrawFuncs(); + // Shoot! The screen texture was flushed! + Y_CleanupScreenBuffer(); + // set the apprpriate drawer for the sky (tall or INT16) setmodeneeded = 0; setrenderneeded = 0; @@ -382,12 +385,6 @@ void SCR_Recalc(void) // vid.recalc lasts only for the next refresh... con_recalc = true; am_recalc = true; - -#ifdef HWRENDER - // Shoot! The screen texture was flushed! - if ((rendermode == render_opengl) && (gamestate == GS_INTERMISSION)) - usebuffer = false; -#endif } // Check for screen cmd-line parms: to force a resolution. diff --git a/src/sdl/hwsym_sdl.c b/src/sdl/hwsym_sdl.c index 16a8c9478..a00995698 100644 --- a/src/sdl/hwsym_sdl.c +++ b/src/sdl/hwsym_sdl.c @@ -100,6 +100,7 @@ void *hwSym(const char *funcName,void *handle) GETFUNC(StartScreenWipe); GETFUNC(EndScreenWipe); GETFUNC(DoScreenWipe); + GETFUNC(MakeIntermissionBG); GETFUNC(DrawIntermissionBG); GETFUNC(MakeScreenTexture); GETFUNC(RenderVhsEffect); diff --git a/src/sdl/i_video.cpp b/src/sdl/i_video.cpp index 9e8e11e56..1dab793d7 100644 --- a/src/sdl/i_video.cpp +++ b/src/sdl/i_video.cpp @@ -1784,6 +1784,7 @@ static void Impl_InitOpenGL(void) *(void**)&HWD.pfnEndScreenWipe = hwSym("EndScreenWipe",NULL); *(void**)&HWD.pfnDoScreenWipe = hwSym("DoScreenWipe",NULL); *(void**)&HWD.pfnDrawIntermissionBG=hwSym("DrawIntermissionBG",NULL); + *(void**)&HWD.pfnMakeIntermissionBG=hwSym("MakeIntermissionBG",NULL); *(void**)&HWD.pfnMakeScreenTexture= hwSym("MakeScreenTexture",NULL); *(void**)&HWD.pfnRenderVhsEffect = hwSym("RenderVhsEffect",NULL); *(void**)&HWD.pfnMakeScreenFinalTexture=hwSym("MakeScreenFinalTexture",NULL); diff --git a/src/y_inter.c b/src/y_inter.c index 823530556..3eec15980 100644 --- a/src/y_inter.c +++ b/src/y_inter.c @@ -86,25 +86,13 @@ static y_data data; // graphics static patch_t *bgtile = NULL; // SPECTILE/SRB2BACK static patch_t *interpic = NULL; // custom picture defined in map header -static boolean usetile; static INT32 timer; -typedef struct -{ - INT32 source_width, source_height; - INT32 source_bpp, source_rowbytes; - UINT8 *source_picture; - INT32 target_width, target_height; - INT32 target_bpp, target_rowbytes; - UINT8 *target_picture; -} y_buffer_t; - -boolean usebuffer = false; static boolean useinterpic; static INT32 powertype = PWRLV_DISABLED; -static y_buffer_t *y_buffer; +static UINT8 *y_screenbuffer; static INT32 intertic; static INT32 endtic = -1; @@ -118,7 +106,6 @@ static huddrawlist_h luahuddrawlist_vote; static void Y_FollowIntermission(void); -static void Y_RescaleScreenBuffer(void); static void Y_UnloadData(void); // SRB2Kart: voting stuff @@ -346,63 +333,27 @@ static void Y_CalculateMatchData(UINT8 rankingsmode, void (*comparison)(INT32)) // // Y_ConsiderScreenBuffer // -// Can we copy the current screen to a buffer? -// G: Yes we can, because now D_Display forces a redraw for the sake of the intermission background +// Draw a frame, and save it for the intermission background. // void Y_ConsiderScreenBuffer(void) { - if (y_buffer == NULL) - y_buffer = Z_Calloc(sizeof(y_buffer_t), PU_STATIC, NULL); - else - return; + Y_CleanupScreenBuffer(); - y_buffer->source_width = vid.width; - y_buffer->source_height = vid.height; - y_buffer->source_bpp = vid.bpp; - y_buffer->source_rowbytes = vid.rowbytes; - y_buffer->source_picture = ZZ_Alloc(y_buffer->source_width*vid.bpp * y_buffer->source_height); - VID_BlitLinearScreen(screens[0], y_buffer->source_picture, vid.width*vid.bpp, vid.height, vid.width*vid.bpp, vid.rowbytes); + if (!D_RenderLevel()) + return; // we need a frame to copy! - // Make the rescaled screen buffer - Y_RescaleScreenBuffer(); -} - -// -// Y_RescaleScreenBuffer -// -// Write the rescaled source picture, to the destination picture that has the current screen's resolutions. -// -static void Y_RescaleScreenBuffer(void) -{ - INT32 sx, sy; // source - INT32 dx, dy; // dest - fixed_t scalefac, yscalefac; - fixed_t rowfrac, colfrac; - UINT8 *dest; - - // Who knows? - if (y_buffer == NULL) - return; - - if (y_buffer->target_picture) - Z_Free(y_buffer->target_picture); - - y_buffer->target_width = vid.width; - y_buffer->target_height = vid.height; - y_buffer->target_rowbytes = vid.rowbytes; - y_buffer->target_bpp = vid.bpp; - y_buffer->target_picture = ZZ_Alloc(y_buffer->target_width*vid.bpp * y_buffer->target_height); - dest = y_buffer->target_picture; - - scalefac = FixedDiv(y_buffer->target_width*FRACUNIT, y_buffer->source_width*FRACUNIT); - yscalefac = FixedDiv(y_buffer->target_height*FRACUNIT, y_buffer->source_height*FRACUNIT); - - rowfrac = FixedDiv(FRACUNIT, yscalefac); - colfrac = FixedDiv(FRACUNIT, scalefac); - - for (sy = 0, dy = 0; sy < (y_buffer->source_height << FRACBITS) && dy < y_buffer->target_height; sy += rowfrac, dy++) - for (sx = 0, dx = 0; sx < (y_buffer->source_width << FRACBITS) && dx < y_buffer->target_width; sx += colfrac, dx += y_buffer->target_bpp) - dest[(dy * y_buffer->target_rowbytes) + dx] = y_buffer->source_picture[((sy>>FRACBITS) * y_buffer->source_width) + (sx>>FRACBITS)]; + if (rendermode == render_soft) + { + y_screenbuffer = Z_Malloc(vid.width*vid.bpp * vid.height, PU_STATIC, NULL); + VID_BlitLinearScreen(screens[0], y_screenbuffer, vid.width*vid.bpp, vid.height, vid.width*vid.bpp, vid.rowbytes); + } +#ifdef HWRENDER + else if (rendermode == render_opengl) + { + y_screenbuffer = Z_Malloc(0, PU_STATIC, NULL); + HWR_MakeIntermissionBG(); + } +#endif } // @@ -413,17 +364,11 @@ static void Y_RescaleScreenBuffer(void) void Y_CleanupScreenBuffer(void) { // Who knows? - if (y_buffer == NULL) + if (y_screenbuffer == NULL) return; - if (y_buffer->target_picture) - Z_Free(y_buffer->target_picture); - - if (y_buffer->source_picture) - Z_Free(y_buffer->source_picture); - - Z_Free(y_buffer); - y_buffer = NULL; + Z_Free(y_screenbuffer); + y_screenbuffer = NULL; } // @@ -439,37 +384,32 @@ void Y_IntermissionDrawer(void) if (intertype == int_none || rendermode == render_none) return; + if (!useinterpic && y_screenbuffer == NULL +#ifdef HWRENDER + // TODO resolution changes breaks the screentexture capture, I have no clue why + && rendermode != render_opengl +#endif + ) + Y_ConsiderScreenBuffer(); + if (useinterpic) V_DrawScaledPatch(0, 0, 0, interpic); - else if (!usetile) + else if (y_screenbuffer != NULL) { - if (rendermode == render_soft && usebuffer) - { - // no y_buffer - if (y_buffer == NULL) - V_DrawPatchFill(W_CachePatchName("SRB2BACK", PU_CACHE)); - else - { - // Maybe the resolution changed? - if ((y_buffer->target_width != vid.width) || (y_buffer->target_height != vid.height)) - Y_RescaleScreenBuffer(); - - // Blit the already-scaled screen buffer to the current screen - VID_BlitLinearScreen(y_buffer->target_picture, screens[0], vid.width*vid.bpp, vid.height, vid.width*vid.bpp, vid.rowbytes); - } - } + if (rendermode == render_soft) + VID_BlitLinearScreen(y_screenbuffer, screens[0], vid.width*vid.bpp, vid.height, vid.width*vid.bpp, vid.rowbytes); #ifdef HWRENDER - else if (rendermode != render_soft && usebuffer) + else if (rendermode == render_opengl) HWR_DrawIntermissionBG(); #endif - else if (VoteScreen.bgpatch) - { - fixed_t hs = vid.width * FRACUNIT / BASEVIDWIDTH; - fixed_t vs = vid.height * FRACUNIT / BASEVIDHEIGHT; - V_DrawStretchyFixedPatch(0, 0, hs, vs, V_NOSCALEPATCH, VoteScreen.bgpatch, NULL); - } } - else if (bgtile) + else if (VoteScreen.bgpatch) + { + fixed_t hs = vid.width * FRACUNIT / BASEVIDWIDTH; + fixed_t vs = vid.height * FRACUNIT / BASEVIDHEIGHT; + V_DrawStretchyFixedPatch(0, 0, hs, vs, V_NOSCALEPATCH, VoteScreen.bgpatch, NULL); + } + else // in case nothing else works... V_DrawPatchFill(bgtile); if (renderisnewtic) @@ -482,8 +422,8 @@ void Y_IntermissionDrawer(void) if (!LUA_HudEnabled(hud_intermissiontally)) goto skiptallydrawer; - if (usebuffer) // Fade everything out - V_DrawFadeScreen(0xFF00, 22); + // Fade everything out + V_DrawFadeScreen(0xFF00, 22); if (!r_splitscreen) whiteplayer = demo.playback ? displayplayers[0] : consoleplayer; @@ -1011,12 +951,8 @@ void Y_StartIntermission(void) K_CashInPowerLevels(); } - //if (intertype == int_race || intertype == int_battle) - { - //bgtile = W_CachePatchName("SRB2BACK", PU_STATIC); - usetile = useinterpic = false; - usebuffer = true; - } + bgtile = W_CachePatchName("SRB2BACK", PU_STATIC); + useinterpic = false; Automate_Run(AEV_INTERMISSIONSTART); } @@ -1038,7 +974,6 @@ void Y_EndIntermission(void) endtic = -1; sorttic = -1; intertype = int_none; - usebuffer = false; } //