From 806ef115fe15722ead2f74b39a6248639d6a8dee Mon Sep 17 00:00:00 2001 From: XProger Date: Mon, 27 May 2019 04:05:17 +0300 Subject: [PATCH] #183 fix "Last FMV don't play" --- src/game.h | 4 +++- src/gameflow.h | 44 ++++++++++++++++++++++++++++++++------------ src/level.h | 2 ++ 3 files changed, 37 insertions(+), 13 deletions(-) diff --git a/src/game.h b/src/game.h index 4cfe2f3..a24d370 100644 --- a/src/game.h +++ b/src/game.h @@ -52,7 +52,7 @@ namespace Game { bool playLogo = level->level.isTitle() && id == TR::LVL_MAX; playVideo = playVideo && (id != level->level.id); - if (level->level.isTitle() && id != TR::LVL_MAX) + if (level->level.isTitle() && id != TR::LVL_MAX && !TR::isGameEnded) playVideo = false; level->init(playLogo, playVideo); @@ -152,6 +152,8 @@ namespace Game { #endif char fileName[255]; + TR::isGameEnded = false; + TR::Version version = TR::getGameVersion(); if (!lvlName) TR::getGameLevelFile(fileName, version, TR::getTitleId(version)); diff --git a/src/gameflow.h b/src/gameflow.h index 5d2dd6a..74fc14f 100644 --- a/src/gameflow.h +++ b/src/gameflow.h @@ -9,6 +9,7 @@ namespace TR { bool useEasyStart; + bool isGameEnded; enum { NO_TRACK = 0xFF, @@ -949,7 +950,7 @@ namespace TR { StringID getVideoSubs(LevelID id) { switch (id) { // TR1 - case LVL_TR1_TITLE : return STR_TR1_SUB_CAFE; + case LVL_TR1_TITLE : return isGameEnded ? STR_EMPTY : STR_TR1_SUB_CAFE; case LVL_TR1_4 : return STR_TR1_SUB_LIFT; case LVL_TR1_10A : return STR_TR1_SUB_CANYON; case LVL_TR1_CUT_4 : return STR_TR1_SUB_PRISON; @@ -963,10 +964,12 @@ namespace TR { const char *str = NULL; switch (id) { // TR1 - case LVL_TR1_TITLE : str = "CAFE"; break; + case LVL_TR1_TITLE : str = isGameEnded ? NULL : "CAFE"; break; case LVL_TR1_4 : str = "LIFT"; break; case LVL_TR1_10A : str = "CANYON"; break; case LVL_TR1_CUT_4 : str = "PRISON"; break; + // TR2 TODO + // TR3 TODO default : return false; } @@ -983,6 +986,7 @@ namespace TR { if ((version & VER_TR1) && (track >= 22 && track <= 56 && track != 24)) { return StringID(STR_TR1_SUB_22 + (track - 22)); } + // TR2, TR3 TODO return STR_EMPTY; } @@ -1234,12 +1238,21 @@ namespace TR { switch (id) { // TR1 case LVL_TR1_TITLE : - CHECK_FILE("FMV/CAFE.FMV"); - CHECK_FILE("FMV/CAFE.RPL"); - CHECK_FILE("FMV/CAFE.CPK"); - CHECK_FILE("video/1/CAFE.FMV"); - CHECK_FILE("video/1/CAFE.RPL"); - CHECK_FILE("video/1/CAFE.CPK"); + if (isGameEnded) { + CHECK_FILE("FMV/END.FMV"); + CHECK_FILE("FMV/END.RPL"); + CHECK_FILE("FMV/END.CPK"); + CHECK_FILE("video/1/END.FMV"); + CHECK_FILE("video/1/END.RPL"); + CHECK_FILE("video/1/END.CPK"); + } else { + CHECK_FILE("FMV/CAFE.FMV"); + CHECK_FILE("FMV/CAFE.RPL"); + CHECK_FILE("FMV/CAFE.CPK"); + CHECK_FILE("video/1/CAFE.FMV"); + CHECK_FILE("video/1/CAFE.RPL"); + CHECK_FILE("video/1/CAFE.CPK"); + } break; case LVL_TR1_GYM : CHECK_FILE("FMV/MANSION.FMV"); @@ -1350,10 +1363,17 @@ namespace TR { break; // TR3 case LVL_TR3_TITLE : - CHECK_FILE("FMV/INTRO.FMV"); - CHECK_FILE("fmv/Intr_Eng.rpl"); - CHECK_FILE("video/3/INTRO.FMV"); - CHECK_FILE("video/3/Intr_Eng.rpl"); + if (isGameEnded) { + CHECK_FILE("FMV/END.FMV"); + CHECK_FILE("fmv/Endgame.rpl"); + CHECK_FILE("video/3/END.FMV"); + CHECK_FILE("video/3/Endgame.rpl"); + } else { + CHECK_FILE("FMV/INTRO.FMV"); + CHECK_FILE("fmv/Intr_Eng.rpl"); + CHECK_FILE("video/3/INTRO.FMV"); + CHECK_FILE("video/3/Intr_Eng.rpl"); + } break; case LVL_TR3_SHORE : CHECK_FILE("FMV/LAGOON.FMV"); diff --git a/src/level.h b/src/level.h index bbc819b..0a62c7c 100644 --- a/src/level.h +++ b/src/level.h @@ -98,6 +98,8 @@ struct Level : IGame { #endif id = (level.isEnd() || level.isHome()) ? level.getTitleId() : TR::LevelID(level.id + 1); + TR::isGameEnded = level.isEnd(); + if (!level.isTitle() && loadSlot == -1) { // update statistics info for current level if (!TR::isCutsceneLevel(level.id) && !level.isHome())