From 287741c18baaf91f95fa5b2b3596ef3f6274f7c7 Mon Sep 17 00:00:00 2001 From: Christoph Oelckers Date: Sat, 2 Oct 2010 11:26:35 +0000 Subject: [PATCH] - create intermission descriptor objects from EndGame definitions. SVN r2878 (finale) --- src/intermission/intermission.h | 1 + src/intermission/intermission_parse.cpp | 67 +++++++++++++++++++++---- 2 files changed, 57 insertions(+), 11 deletions(-) diff --git a/src/intermission/intermission.h b/src/intermission/intermission.h index 51671fffd4..38e173a8db 100644 --- a/src/intermission/intermission.h +++ b/src/intermission/intermission.h @@ -80,6 +80,7 @@ struct FIntermissionAction FString mPalette; FString mSound; bool mFlatfill; + bool mMusicLooping; TArray mOverlays; FName mLink; diff --git a/src/intermission/intermission_parse.cpp b/src/intermission/intermission_parse.cpp index 91b9e94cfb..18b45c616b 100644 --- a/src/intermission/intermission_parse.cpp +++ b/src/intermission/intermission_parse.cpp @@ -39,6 +39,14 @@ #include "w_wad.h" #include "gi.h" + +static void ReplaceIntermission(FName intname,FIntermissionDescriptor *desc) +{ + FIntermissionDescriptor ** pDesc = IntermissionDescriptors.CheckKey(intname); + if (pDesc != NULL && *pDesc != NULL) delete *pDesc; + IntermissionDescriptors[intname] = desc; +} + //========================================================================== // // FIntermissionAction @@ -54,6 +62,7 @@ FIntermissionAction::FIntermissionAction() mCdTrack = mDuration = 0; mFlatfill = false; + mMusicLooping = true; } bool FIntermissionAction::ParseKey(FScanner &sc) @@ -490,13 +499,9 @@ void FMapInfoParser::ParseIntermission() { sc.MustGetString(); FName intname = sc.String; - - FIntermissionDescriptor ** pDesc = IntermissionDescriptors.CheckKey(intname); - if (pDesc != NULL && *pDesc != NULL) delete *pDesc; - FIntermissionDescriptor *desc = new FIntermissionDescriptor(); - IntermissionDescriptors[intname] = desc; + ReplaceIntermission(intname, desc); sc.MustGetToken('{'); while (!sc.CheckToken('}')) { @@ -598,16 +603,53 @@ FName FMapInfoParser::ParseEndGame() } } + FIntermissionDescriptor *desc = new FIntermissionDescriptor; + FIntermissionAction *action; + switch (newSeq.EndType) { case END_Pic: + action = new FIntermissionAction; + break; + case END_Bunny: - case END_Cast: - case END_Demon: - ; + { + FIntermissionActionScroller *bunny = new FIntermissionActionScroller; + bunny->mSecondPic = newSeq.PicName2; + bunny->mScrollDir = SCROLL_Right; + bunny->mScrollDelay = 230; + bunny->mScrollTime = 640; + bunny->mDuration = 1130; + action = bunny; + if (newSeq.PlayTheEnd) action->mLink = "TheEnd"; + break; } + + case END_Demon: + { + FIntermissionActionScroller *demon = new FIntermissionActionScroller; + demon->mSecondPic = newSeq.PicName2; + demon->mScrollDir = SCROLL_Up; + demon->mScrollDelay = 70; + demon->mScrollTime = 600; + action = demon; + break; + } + + case END_Cast: + action = new FIntermissionAction; + action->mDuration = 1; + action->mLink = "Doom2Cast"; + break; + } + + action->mBackground = newSeq.PicName; + action->mMusic = newSeq.Music; + action->mMusicLooping = newSeq.MusicLooping; + FString seq; - seq.Format("EndSequence_%d_", generated++); + seq.Format("@EndSequence_%d_", generated++); + ReplaceIntermission(seq, desc); return FName(seq); } @@ -650,8 +692,11 @@ FName FMapInfoParser::CheckEndSequence() ParseComma(); sc.MustGetString (); FString seqname; - seqname << "EndPic_" << sc.String; - // create sequence here + seqname << "@EndPic_" << sc.String; + FIntermissionDescriptor *desc = new FIntermissionDescriptor; + FIntermissionAction *action = new FIntermissionAction; + action->mBackground = sc.String; + ReplaceIntermission(seqname, desc); return FName(seqname); } else if (sc.Compare("endbunny"))