mirror of
https://github.com/ZDoom/raze-gles.git
synced 2024-12-27 04:00:42 +00:00
- tested all of Duke's and RR's cutscenes.
This commit is contained in:
parent
06abc0cfe2
commit
3c27ec8cbd
13 changed files with 86 additions and 56 deletions
|
@ -138,6 +138,10 @@ void S_StopCustomStream(SoundStream *stream)
|
|||
|
||||
void S_PauseAllCustomStreams(bool on)
|
||||
{
|
||||
static bool paused = false;
|
||||
|
||||
if (paused == on) return;
|
||||
paused = on;
|
||||
for (auto s : customStreams)
|
||||
{
|
||||
s->SetPaused(on);
|
||||
|
|
|
@ -416,10 +416,8 @@ DEFINE_ACTION_FUNCTION_NATIVE(FDynArray_I32, Push, ArrayPush<FDynArray_I32 COMMA
|
|||
DEFINE_ACTION_FUNCTION(FDynArray_I32, PushV)
|
||||
{
|
||||
PARAM_SELF_STRUCT_PROLOGUE(FDynArray_I32);
|
||||
PARAM_INT(val);
|
||||
PARAM_VA_POINTER(va_reginfo); // Get the hidden type information array
|
||||
self->Push(val);
|
||||
VMVa_List args = { param + 3, 0, numparam - 4, va_reginfo + 3 };
|
||||
VMVa_List args = { param + 1, 0, numparam - 2, va_reginfo + 1 };
|
||||
while (args.curindex < args.numargs)
|
||||
{
|
||||
if (args.reginfo[args.curindex] == REGT_INT)
|
||||
|
|
|
@ -337,8 +337,7 @@ DEFINE_ACTION_FUNCTION(_TexMan, GetName)
|
|||
|
||||
static int CheckForTexture(const FString& name, int type, int flags)
|
||||
{
|
||||
// ForceLookup is intentionally blocked here, this flag is for internal use only.
|
||||
return TexMan.CheckForTexture(name, static_cast<ETextureType>(type), (flags & ~FTextureManager::TEXMAN_ForceLookup)).GetIndex();
|
||||
return TexMan.CheckForTexture(name, static_cast<ETextureType>(type), flags).GetIndex();
|
||||
}
|
||||
|
||||
DEFINE_ACTION_FUNCTION_NATIVE(_TexMan, CheckForTexture, CheckForTexture)
|
||||
|
|
|
@ -223,6 +223,13 @@ bool StartCutscene(CutsceneDef& cs, int flags, CompletionFunc completion_)
|
|||
return false;
|
||||
}
|
||||
|
||||
bool StartCutscene(const char* s, int flags, CompletionFunc completion)
|
||||
{
|
||||
CutsceneDef def;
|
||||
def.function = s;
|
||||
return StartCutscene(def, 0, completion);
|
||||
}
|
||||
|
||||
|
||||
void DeleteScreenJob()
|
||||
{
|
||||
|
@ -311,6 +318,28 @@ void PlayLogos(gameaction_t complete_ga, gameaction_t def_ga, bool stopmusic)
|
|||
}
|
||||
}
|
||||
|
||||
|
||||
CCMD(testcutscene)
|
||||
{
|
||||
if (argv.argc() < 2)
|
||||
{
|
||||
Printf("Usage: testcutscene <buildfunction>\n");
|
||||
return;
|
||||
}
|
||||
try
|
||||
{
|
||||
CutsceneDef def;
|
||||
def.function = argv[1];
|
||||
if (StartCutscene(def, 0, [](bool) { }))
|
||||
{
|
||||
C_HideConsole();
|
||||
}
|
||||
}
|
||||
catch (const CRecoverableError& err)
|
||||
{
|
||||
Printf("Unable to play cutscene\n");
|
||||
}
|
||||
}
|
||||
/*
|
||||
Duke:
|
||||
if (!userConfig.nologo) fi.ShowLogo([](bool) { gameaction = ga_mainmenunostopsound; });
|
||||
|
|
|
@ -200,4 +200,7 @@ bool ScreenJobResponder(event_t* ev);
|
|||
bool ScreenJobTick();
|
||||
void ScreenJobDraw();
|
||||
|
||||
struct CutsceneDef;
|
||||
bool StartCutscene(CutsceneDef& cs, int flags, CompletionFunc completion);
|
||||
bool StartCutscene(const char* s, int flags, CompletionFunc completion);
|
||||
void PlayLogos(gameaction_t complete_ga, gameaction_t def_ga, bool stopmusic);
|
||||
|
|
|
@ -145,34 +145,6 @@ static void BigText(double x, double y, const char* text, int align = -1, double
|
|||
DrawText(twod, BigFont, CR_UNTRANSLATED, x, y - 12, text, DTA_FullscreenScale, FSMode_Fit320x200, DTA_Alpha, alpha, TAG_DONE);
|
||||
}
|
||||
|
||||
//---------------------------------------------------------------------------
|
||||
//
|
||||
//
|
||||
//
|
||||
//---------------------------------------------------------------------------
|
||||
|
||||
void showtwoscreens(const CompletionFunc& completion)
|
||||
{
|
||||
#if 0
|
||||
TArray<DScreenJob*> jobs;
|
||||
|
||||
jobs.Push(Create<DImageScreen>(3291));
|
||||
jobs.Push(Create<DImageScreen>(3290));
|
||||
RunScreenJob(jobs, completion);
|
||||
#endif
|
||||
}
|
||||
|
||||
void doorders(const CompletionFunc& completion)
|
||||
{
|
||||
#if 0
|
||||
TArray<DScreenJob*> jobs;
|
||||
|
||||
for (int i = 0; i < 4; i++)
|
||||
jobs.Push(Create<DImageScreen>(ORDERING + i));
|
||||
RunScreenJob(jobs, completion);
|
||||
#endif
|
||||
}
|
||||
|
||||
//---------------------------------------------------------------------------
|
||||
//
|
||||
//
|
||||
|
|
|
@ -162,9 +162,6 @@ int hits(DDukeActor* snum);
|
|||
DDukeActor* LocateTheLocator(int n, int sectnum);
|
||||
void clearcamera(player_struct* ps);
|
||||
|
||||
void showtwoscreens(const CompletionFunc& func);
|
||||
void doorders(const CompletionFunc& func);
|
||||
|
||||
void LoadActor(DDukeActor* i, int p, int x);
|
||||
void execute(DDukeActor* s, int p, int d);
|
||||
void makeitfall(DDukeActor* s);
|
||||
|
|
|
@ -94,20 +94,20 @@ void GameInterface::ExitFromMenu()
|
|||
{
|
||||
auto runbonus = [=](auto completion)
|
||||
{
|
||||
// MP scoreboard
|
||||
// MP scoreboard
|
||||
if (playerswhenstarted > 1 && !ud.coop)
|
||||
{
|
||||
dobonus(1, completion);
|
||||
}
|
||||
else completion(false);
|
||||
{
|
||||
dobonus(1, completion);
|
||||
}
|
||||
else completion(false);
|
||||
};
|
||||
|
||||
auto runtwoscreens = [](auto completion)
|
||||
{
|
||||
// shareware and TEN screens
|
||||
if (isShareware() && !isRR())
|
||||
showtwoscreens(completion);
|
||||
else completion(false);
|
||||
// shareware and TEN screens
|
||||
if (isShareware() && !isRR())
|
||||
StartCutscene("DukeCutscenes.BuildSharewareExit", 0, completion);
|
||||
else completion(false);
|
||||
};
|
||||
|
||||
runbonus([=](bool aborted) { runtwoscreens(endthegame); });
|
||||
|
|
|
@ -926,7 +926,6 @@ void enterlevel(MapRecord *mi, int gamemode)
|
|||
OnEvent(EVENT_ENTERLEVEL);
|
||||
|
||||
// Stop all sounds
|
||||
S_ResumeSound(false);
|
||||
FX_StopAllSounds();
|
||||
FX_SetReverb(0);
|
||||
|
||||
|
@ -1078,7 +1077,7 @@ void exitlevel(MapRecord *nextlevel)
|
|||
if (ud.multimode < 2)
|
||||
{
|
||||
if (isShareware())
|
||||
doorders([](bool) { gameaction = ga_startup; });
|
||||
StartCutscene("DukeCutscenes.BuildSharewareOrder", 0, [](bool) { gameaction = ga_startup; });
|
||||
else gameaction = ga_startup;
|
||||
return;
|
||||
}
|
||||
|
|
25
wadsrc/static/filter/redneck/engine/engine.def
Normal file
25
wadsrc/static/filter/redneck/engine/engine.def
Normal file
|
@ -0,0 +1,25 @@
|
|||
// Cutscene definitions for Duke
|
||||
|
||||
definecutscene intro
|
||||
{
|
||||
function RRCutscenes.BuildIntro
|
||||
}
|
||||
|
||||
definecutscene map e1l7 // episode 1
|
||||
{
|
||||
outro
|
||||
{
|
||||
function RRCutscenes.BuildE1End
|
||||
}
|
||||
}
|
||||
|
||||
definecutscene episode 2
|
||||
{
|
||||
outro
|
||||
{
|
||||
function RRCutscenes.BuildE2End
|
||||
}
|
||||
}
|
||||
|
||||
definecutscene summary RRCutscenes.BuildSPSummary
|
||||
definecutscene mpsummary DukeCutscenes.BuildMPSummary // identical with Duke's
|
|
@ -181,14 +181,14 @@ class DukeCutscenes // Note: must be class, not struct, otherwise we cannot easi
|
|||
12, DukeSnd.SHORT_CIRCUIT + 1,
|
||||
18, DukeSnd.INTRO4_5 + 1,
|
||||
34, DukeSnd.SHORT_CIRCUIT + 1);
|
||||
runner.Append(MoviePlayerJob.CreateWithSoundinfo("vol41a1.anm", soundinfo, 0, 10, 10, 10));
|
||||
runner.Append(MoviePlayerJob.CreateWithSoundinfo("vol41a.anm", soundinfo, MoviePlayer.NOSOUNDCUTOFF, 10, 10, 10));
|
||||
|
||||
soundinfo.Pushv(
|
||||
1, DukeSnd.INTRO4_1 + 1,
|
||||
7, DukeSnd.INTRO4_3 + 1,
|
||||
12, DukeSnd.INTRO4_2 + 1,
|
||||
26, DukeSnd.INTRO4_4 + 1);
|
||||
runner.Append(MoviePlayerJob.CreateWithSoundinfo("vol42a.anm", soundinfo, 0, 14, 14, 14));
|
||||
runner.Append(MoviePlayerJob.CreateWithSoundinfo("vol42a.anm", soundinfo, MoviePlayer.NOSOUNDCUTOFF, 14, 14, 14));
|
||||
|
||||
soundinfo.Pushv(
|
||||
10, DukeSnd.INTRO4_6 + 1);
|
||||
|
@ -322,7 +322,7 @@ class RRCutscenes
|
|||
{
|
||||
Array<int> soundinfo;
|
||||
soundinfo.Pushv(1, RRSnd.LN_FINAL + 1);
|
||||
runner.Append(MoviePlayerJob.CreateWithSoundinfo("rr_outro.anm", soundinfo, 0, 9, 9, 9));
|
||||
runner.Append(MoviePlayerJob.CreateWithSoundinfo("rr_outro.anm", soundinfo, MoviePlayer.NOSOUNDCUTOFF, 9, 9, 9));
|
||||
runner.Append(ImageScreen.CreateNamed("TENSCREEN"));
|
||||
}
|
||||
else
|
||||
|
|
|
@ -412,11 +412,11 @@ class Episode4Text : SkippableScreenJob
|
|||
override void Draw(double sm)
|
||||
{
|
||||
Screen.ClearScreen();
|
||||
Duke.BigText(160, 60, "$Thanks to all our");
|
||||
Duke.BigText(160, 60 + 16, "$fans for giving");
|
||||
Duke.BigText(160, 60 + 16 + 16, "$us big heads.");
|
||||
Duke.BigText(160, 70 + 16 + 16 + 16, "$Look for a Duke Nukem 3D");
|
||||
Duke.BigText(160, 70 + 16 + 16 + 16 + 16, "$sequel soon.");
|
||||
Duke.BigText(160, 60, "$Thanks to all our", 0);
|
||||
Duke.BigText(160, 60 + 16, "$fans for giving", 0);
|
||||
Duke.BigText(160, 60 + 16 + 16, "$us big heads.", 0);
|
||||
Duke.BigText(160, 70 + 16 + 16 + 16, "$Look for a Duke Nukem 3D", 0);
|
||||
Duke.BigText(160, 70 + 16 + 16 + 16 + 16, "$sequel soon.", 0);
|
||||
}
|
||||
|
||||
override void Start()
|
||||
|
|
|
@ -437,7 +437,7 @@ class ScreenJobRunner : Object
|
|||
|
||||
virtual bool OnEvent(InputEvent ev)
|
||||
{
|
||||
if (paused || index >= jobs.Size()) return false;
|
||||
if (paused || index < 0 || index >= jobs.Size()) return false;
|
||||
if (jobs[index].jobstate != ScreenJob.running) return false;
|
||||
return jobs[index].OnEvent(ev);
|
||||
}
|
||||
|
@ -481,6 +481,10 @@ class ScreenJobRunner : Object
|
|||
|
||||
virtual bool RunFrame(double smoothratio)
|
||||
{
|
||||
if (index < 0)
|
||||
{
|
||||
AdvanceJob(false);
|
||||
}
|
||||
// ensure that we won't go back in time if the menu is dismissed without advancing our ticker
|
||||
if (index < jobs.Size())
|
||||
{
|
||||
|
|
Loading…
Reference in a new issue