diff --git a/src/d_main.c b/src/d_main.c index b61ec41435f08f991d1d5bcaf82f0bbfadb2a620..fcec1726f913327f059fa7cdea1a1c3d8c6619a7 100644 --- a/src/d_main.c +++ b/src/d_main.c @@ -446,8 +446,24 @@ static void D_Display(void) if (rendermode != render_none) { - F_WipeEndScreen(); - F_RunWipe(wipedefs[wipedefindex], gamestate != GS_TIMEATTACK); + // miru: we can use the mapheaderinfo to change the forced wipe the instant the map loads + if (!mapheaderinfo[gamemap-1]->postlevelwipe) + { + F_WipeEndScreen(); + F_RunWipe(wipedefs[wipedefindex], gamestate != GS_TIMEATTACK); + } + else + { + if (mapheaderinfo[gamemap-1]->postlevelwipe < 100) + { + F_WipeStartScreen(); + V_DrawFill(0, 0, BASEVIDWIDTH, BASEVIDHEIGHT, mapheaderinfo[gamemap-1]->wipecolor); + F_WipeEndScreen(); + F_RunWipe(mapheaderinfo[gamemap-1]->postlevelwipe, gamestate != GS_TIMEATTACK); + } + } + //F_WipeEndScreen(); + //F_RunWipe(wipedefs[wipedefindex], gamestate != GS_TIMEATTACK); } } diff --git a/src/dehacked.c b/src/dehacked.c index c31c2264308562c8d4a32f91f757ea1f9728a711..dde986a47e65f982699a3ce8b981caeeb7fc393a 100644 --- a/src/dehacked.c +++ b/src/dehacked.c @@ -1321,6 +1321,20 @@ static void readlevelheader(MYFILE *f, INT32 num) else mapheaderinfo[num-1]->menuflags &= ~LF2_NOVISITNEEDED; } + + // miru: we can build custom map header words here + else if (fastcmp(word, "LEVELWIPE")) + { + mapheaderinfo[num-1]->levelwipe = (INT16)i; + } + else if (fastcmp(word, "POSTLEVELWIPE")) + { + mapheaderinfo[num-1]->postlevelwipe = (INT16)i; + } + else if (fastcmp(word, "WIPECOLOR")) + { + mapheaderinfo[num-1]->wipecolor = (INT16)i; + } else deh_warning("Level header %d: unknown word '%s'", num, word); } diff --git a/src/doomstat.h b/src/doomstat.h index 8072a15528f56a23727da9a6d7b32bcf86db4166..4aa7984b7469a7390433c6838ac78beb5935dccd 100644 --- a/src/doomstat.h +++ b/src/doomstat.h @@ -245,6 +245,11 @@ typedef struct UINT8 numGradedMares; ///< Internal. For grade support. nightsgrades_t *grades; ///< NiGHTS grades. Allocated dynamically for space reasons. Be careful. + // miru: to use custom mapheaderinfo options, we need to add them to the struct first + INT16 levelwipe; + INT16 postlevelwipe; + INT16 wipecolor; + // Lua stuff. // (This is not ifdeffed so the map header structure can stay identical, just in case.) UINT8 numCustomOptions; ///< Internal. For Lua custom value support. diff --git a/src/g_game.c b/src/g_game.c index 6effd9f09d87cb55dbea0591e1f9e3976d682d1d..196ef98f36395e995cddd3e928ba049059d2b4ef 100644 --- a/src/g_game.c +++ b/src/g_game.c @@ -1620,8 +1620,17 @@ void G_DoLoadLevel(boolean resetplayer) levelstarttic = gametic; // for time calculation - if (wipegamestate == GS_LEVEL) - wipegamestate = -1; // force a wipe + // miru: postlevelwipe - just in case + if (!mapheaderinfo[gamemap-1]->postlevelwipe) + { + if (wipegamestate == GS_LEVEL) + wipegamestate = -1; // force a wipe + } + else + { + if (wipegamestate == GS_LEVEL) + wipegamestate = -1; // force a wipe + } if (gamestate == GS_INTERMISSION) Y_EndIntermission(); diff --git a/src/p_setup.c b/src/p_setup.c index e56c44c70616814a2f6f216864f07aaa0e2e8b8f..76a3c5bf0e864b8217395e08936641ca3fe057b6 100644 --- a/src/p_setup.c +++ b/src/p_setup.c @@ -223,6 +223,15 @@ static void P_ClearSingleMapHeaderInfo(INT16 i) mapheaderinfo[num]->levelflags = 0; DEH_WriteUndoline("MENUFLAGS", va("%d", mapheaderinfo[num]->menuflags), UNDO_NONE); mapheaderinfo[num]->menuflags = 0; + + // miru: in order for the custom mapheaderinfo values to work properly, we need to do this + DEH_WriteUndoline("LEVELWIPE", va("%d", mapheaderinfo[num]->levelwipe), UNDO_NONE); + mapheaderinfo[num]->levelwipe = 0; + DEH_WriteUndoline("POSTLEVELWIPE", va("%d", mapheaderinfo[num]->postlevelwipe), UNDO_NONE); + mapheaderinfo[num]->postlevelwipe = 0; + DEH_WriteUndoline("WIPECOLOR", va("%d", mapheaderinfo[num]->wipecolor), UNDO_NONE); + mapheaderinfo[num]->wipecolor = 31; + // TODO grades support for delfile (pfft yeah right) P_DeleteGrades(num); // an even further impossibility, delfile custom opts support @@ -2529,11 +2538,30 @@ boolean P_SetupLevel(boolean skipprecip) // But only if we didn't do the special stage wipe if (rendermode != render_none && !ranspecialwipe) { - F_WipeStartScreen(); - V_DrawFill(0, 0, BASEVIDWIDTH, BASEVIDHEIGHT, 31); + // miru: we could add the option to render different wipes here - F_WipeEndScreen(); - F_RunWipe(wipedefs[wipe_level_toblack], false); + // if the map header doesn't even call the option + // then don't bother turning off + if (!mapheaderinfo[gamemap-1]->levelwipe) + { + F_WipeStartScreen(); + V_DrawFill(0, 0, BASEVIDWIDTH, BASEVIDHEIGHT, 31); + + F_WipeEndScreen(); + F_RunWipe(wipedefs[wipe_level_toblack], false); + } + // if it does then we can load custom fades from the fadingmask + else + { + if (mapheaderinfo[gamemap-1]->levelwipe < 100) + { + F_WipeStartScreen(); + V_DrawFill(0, 0, BASEVIDWIDTH, BASEVIDHEIGHT, mapheaderinfo[gamemap-1]->wipecolor); + + F_WipeEndScreen(); + F_RunWipe(mapheaderinfo[gamemap-1]->levelwipe, false); + } + } } // Print "SPEEDING OFF TO [ZONE] [ACT 1]..."