mirror of
https://github.com/ZDoom/raze-gles.git
synced 2024-12-28 12:30:46 +00:00
- RR bonus screens.
This commit is contained in:
parent
69d9a98ead
commit
726ebec9ec
7 changed files with 172 additions and 255 deletions
|
@ -45,6 +45,34 @@
|
|||
|
||||
|
||||
IMPLEMENT_CLASS(DScreenJob, true, false)
|
||||
IMPLEMENT_CLASS(DImageScreen, true, false)
|
||||
|
||||
//---------------------------------------------------------------------------
|
||||
//
|
||||
//
|
||||
//
|
||||
//---------------------------------------------------------------------------
|
||||
|
||||
int DImageScreen::Frame(uint64_t clock, bool skiprequest)
|
||||
{
|
||||
if (tilenum > 0)
|
||||
{
|
||||
tex = tileGetTexture(tilenum, true);
|
||||
}
|
||||
if (!tex) return 0;
|
||||
int span = int(clock / 1'000'000);
|
||||
int light = 255;
|
||||
if (span < 255) light = span;
|
||||
else if (fadeoutstart > 0 && span > fadeoutstart - 255) light = fadeoutstart - span;
|
||||
light = clamp(light, 0, 255);
|
||||
PalEntry pe(255, light, light, light);
|
||||
twod->ClearScreen();
|
||||
DrawTexture(twod, tex, 0, 0, DTA_FullscreenEx, 3, DTA_Color, pe, DTA_LegacyRenderStyle, STYLE_Normal, TAG_DONE);
|
||||
// Only end after having faded out.
|
||||
if (skiprequest&& fadeoutstart < 0) fadeoutstart = span;
|
||||
return fadeoutstart > 0 && light == 0 ? -1 : 1;
|
||||
}
|
||||
|
||||
|
||||
//---------------------------------------------------------------------------
|
||||
//
|
||||
|
|
|
@ -12,6 +12,37 @@ public:
|
|||
virtual int Frame(uint64_t clock, bool skiprequest) = 0;
|
||||
};
|
||||
|
||||
//---------------------------------------------------------------------------
|
||||
//
|
||||
//
|
||||
//
|
||||
//---------------------------------------------------------------------------
|
||||
|
||||
class DImageScreen : public DScreenJob
|
||||
{
|
||||
DECLARE_CLASS(DImageScreen, DScreenJob)
|
||||
|
||||
int fadeoutstart = -1;
|
||||
int tilenum = -1;
|
||||
FGameTexture* tex = nullptr;
|
||||
|
||||
public:
|
||||
DImageScreen(FGameTexture* tile)
|
||||
{
|
||||
tex = tile;
|
||||
}
|
||||
|
||||
DImageScreen(int tile)
|
||||
{
|
||||
tilenum = tile;
|
||||
}
|
||||
|
||||
int Frame(uint64_t clock, bool skiprequest) override;
|
||||
};
|
||||
|
||||
|
||||
|
||||
|
||||
struct JobDesc
|
||||
{
|
||||
DScreenJob* job;
|
||||
|
|
|
@ -552,50 +552,6 @@ public:
|
|||
//
|
||||
//---------------------------------------------------------------------------
|
||||
|
||||
class DImageScreen : public DScreenJob
|
||||
{
|
||||
int fadeoutstart = -1;
|
||||
int tilenum = -1;
|
||||
FGameTexture* tex = nullptr;
|
||||
|
||||
public:
|
||||
DImageScreen(FGameTexture * tile)
|
||||
{
|
||||
tex = tile;
|
||||
}
|
||||
|
||||
DImageScreen(int tile)
|
||||
{
|
||||
tilenum = tile;
|
||||
}
|
||||
|
||||
int Frame(uint64_t clock, bool skiprequest) override
|
||||
{
|
||||
if (tilenum > 0)
|
||||
{
|
||||
tex = tileGetTexture(tilenum, true);
|
||||
}
|
||||
if (!tex) return 0;
|
||||
int span = int(clock / 1'000'000);
|
||||
int light = 255;
|
||||
if (span < 255) light = span;
|
||||
else if (fadeoutstart > 0 && span > fadeoutstart - 255) light = fadeoutstart - span;
|
||||
light = clamp(light, 0, 255);
|
||||
PalEntry pe(255, light, light, light);
|
||||
twod->ClearScreen();
|
||||
DrawTexture(twod, tex, 0, 0, DTA_FullscreenEx, 3, DTA_Color, pe, DTA_LegacyRenderStyle, STYLE_Normal, TAG_DONE);
|
||||
// Only end after having faded out.
|
||||
if (skiprequest && fadeoutstart < 0) fadeoutstart = span;
|
||||
return fadeoutstart > 0 && light == 0 ? -1 : 1;
|
||||
}
|
||||
};
|
||||
|
||||
//---------------------------------------------------------------------------
|
||||
//
|
||||
//
|
||||
//
|
||||
//---------------------------------------------------------------------------
|
||||
|
||||
class DBlackScreen : public DScreenJob
|
||||
{
|
||||
int wait;
|
||||
|
@ -809,12 +765,38 @@ void bonussequence_d(int num, CompletionFunc completion)
|
|||
|
||||
static const AnimSound vol4e3[] =
|
||||
{
|
||||
{ 1, BOSS4_DEADSPEECH },
|
||||
{ 40, VOL4ENDSND1 },
|
||||
{ 40, DUKE_UNDERWATER },
|
||||
{ 50, BIGBANG },
|
||||
{ 1, BOSS4_DEADSPEECH+1 },
|
||||
{ 40, VOL4ENDSND1+1 },
|
||||
{ 40, DUKE_UNDERWATER+1 },
|
||||
{ 50, BIGBANG+1 },
|
||||
{ -1,-1 }
|
||||
};
|
||||
|
||||
static const AnimSound vol42a[] =
|
||||
{
|
||||
{ 1, INTRO4_B +1 },
|
||||
{ 12, SHORT_CIRCUIT + 1 },
|
||||
{ 18, INTRO4_5 + 1 },
|
||||
{ 34, SHORT_CIRCUIT+1 },
|
||||
{ -1,-1 }
|
||||
};
|
||||
|
||||
static const AnimSound vol41a[] =
|
||||
{
|
||||
{ 1, INTRO4_1+1 },
|
||||
{ 7, INTRO4_3+1 },
|
||||
{ 12, INTRO4_2+1 },
|
||||
{ 26, INTRO4_4+1 },
|
||||
{ -1,-1 }
|
||||
};
|
||||
|
||||
static const AnimSound vol43a[] =
|
||||
{
|
||||
{ 10, INTRO4_6+1 },
|
||||
{ -1,-1 }
|
||||
};
|
||||
|
||||
|
||||
static const int framespeed_10[] = { 10, 10, 10 };
|
||||
static const int framespeed_14[] = { 14, 14, 14 };
|
||||
static const int framespeed_18[] = { 18, 18, 18 };
|
||||
|
@ -856,6 +838,12 @@ void bonussequence_d(int num, CompletionFunc completion)
|
|||
jobs[job++] = { Create<DEpisode5End>(), []() { FX_StopAllSounds(); } };
|
||||
break;
|
||||
|
||||
case 5: // Episode 4 start
|
||||
S_PlaySpecialMusic(MUS_BRIEFING);
|
||||
jobs[job++] = { PlayVideo("vol41a.anm", vol41a, framespeed_10), nullptr };
|
||||
jobs[job++] = { PlayVideo("vol42a.anm", vol42a, framespeed_14), nullptr };
|
||||
jobs[job++] = { PlayVideo("vol43a.anm", vol43a, framespeed_10), nullptr };
|
||||
break;
|
||||
}
|
||||
RunScreenJob(jobs, job, completion);
|
||||
}
|
||||
|
|
|
@ -761,6 +761,11 @@ void ShowMapFrame(void)
|
|||
|
||||
#endif
|
||||
|
||||
//---------------------------------------------------------------------------
|
||||
//
|
||||
//
|
||||
//
|
||||
//---------------------------------------------------------------------------
|
||||
|
||||
void Logo_r(CompletionFunc completion)
|
||||
{
|
||||
|
@ -785,16 +790,16 @@ void Logo_r(CompletionFunc completion)
|
|||
{ -1, -1 }
|
||||
};
|
||||
|
||||
static const int frametimes[] = { 9, 9, 9 }; // same for all 3 anims
|
||||
static const int framespeed[] = { 9, 9, 9 }; // same for all 3 anims
|
||||
|
||||
JobDesc jobs[3];
|
||||
int job = 0;
|
||||
|
||||
if (!isRRRA())
|
||||
{
|
||||
jobs[job++] = { PlayVideo("rr_intro.anm", introsound, frametimes), nullptr };
|
||||
jobs[job++] = { PlayVideo("redneck.anm", rednecksound, frametimes), nullptr };
|
||||
jobs[job++] = { PlayVideo("xatlogo.anm", xatrixsound, frametimes), nullptr };
|
||||
jobs[job++] = { PlayVideo("rr_intro.anm", introsound, framespeed), nullptr };
|
||||
jobs[job++] = { PlayVideo("redneck.anm", rednecksound, framespeed), nullptr };
|
||||
jobs[job++] = { PlayVideo("xatlogo.anm", xatrixsound, framespeed), nullptr };
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -803,6 +808,61 @@ void Logo_r(CompletionFunc completion)
|
|||
RunScreenJob(jobs, job, completion);
|
||||
}
|
||||
|
||||
//---------------------------------------------------------------------------
|
||||
//
|
||||
//
|
||||
//
|
||||
//---------------------------------------------------------------------------
|
||||
|
||||
void bonussequence_r(int num, CompletionFunc completion)
|
||||
{
|
||||
static const AnimSound turdmov[] =
|
||||
{
|
||||
{ 1, 82 + 1 },
|
||||
{ -1, -1 }
|
||||
};
|
||||
|
||||
static const AnimSound rr_outro[] =
|
||||
{
|
||||
{ 1, 35 + 1 },
|
||||
{ -1, -1 }
|
||||
};
|
||||
|
||||
static const int framespeed[] = { 9, 9, 9 }; // same for all 3 anims
|
||||
|
||||
Mus_Stop();
|
||||
FX_StopAllSounds();
|
||||
|
||||
JobDesc jobs[2];
|
||||
int job = 0;
|
||||
|
||||
switch (num)
|
||||
{
|
||||
case 0:
|
||||
jobs[job++] = { PlayVideo("turdmov.anm", turdmov, framespeed), nullptr };
|
||||
jobs[job++] = { Create<DImageScreen>(TENSCREEN), nullptr };
|
||||
break;
|
||||
|
||||
case 1:
|
||||
jobs[job++] = { PlayVideo("rr_outro.anm", rr_outro, framespeed), nullptr };
|
||||
jobs[job++] = { Create<DImageScreen>(TENSCREEN), nullptr };
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
RunScreenJob(jobs, job, completion);
|
||||
}
|
||||
|
||||
#if 0
|
||||
CCMD(testbonus)
|
||||
{
|
||||
if (argv.argc() > 1)
|
||||
{
|
||||
bonussequence_r(strtol(argv[1], nullptr, 0), nullptr);
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
#if 0
|
||||
|
||||
|
|
|
@ -90,104 +90,6 @@ void Anim_Init(void)
|
|||
uint8_t frame;
|
||||
};
|
||||
|
||||
static defaultanmsound const logo[] =
|
||||
{
|
||||
{ FLY_BY, 1 },
|
||||
{ PIPEBOMB_EXPLODE, 19 },
|
||||
};
|
||||
|
||||
static defaultanmsound const cineov2[] =
|
||||
{
|
||||
{ WIND_AMBIENCE, 1 },
|
||||
{ ENDSEQVOL2SND1, 26 },
|
||||
{ ENDSEQVOL2SND2, 36 },
|
||||
{ THUD, 54 },
|
||||
{ ENDSEQVOL2SND3, 62 },
|
||||
{ ENDSEQVOL2SND4, 75 },
|
||||
{ ENDSEQVOL2SND5, 81 },
|
||||
{ ENDSEQVOL2SND6, 115 },
|
||||
{ ENDSEQVOL2SND7, 124 },
|
||||
};
|
||||
|
||||
static defaultanmsound const cineov3[] =
|
||||
{
|
||||
{ WIND_REPEAT, 1 },
|
||||
{ DUKE_GRUNT, 98 },
|
||||
{ THUD, 82+20 },
|
||||
{ SQUISHED, 82+20 },
|
||||
{ ENDSEQVOL3SND3, 104+20 },
|
||||
{ ENDSEQVOL3SND2, 114+20 },
|
||||
{ PIPEBOMB_EXPLODE, 158 },
|
||||
};
|
||||
|
||||
static defaultanmsound const vol42a[] =
|
||||
{
|
||||
{ INTRO4_B, 1 },
|
||||
{ SHORT_CIRCUIT, 12 },
|
||||
{ INTRO4_5, 18 },
|
||||
{ SHORT_CIRCUIT, 34 },
|
||||
};
|
||||
|
||||
static defaultanmsound const vol41a[] =
|
||||
{
|
||||
{ INTRO4_1, 1 },
|
||||
{ INTRO4_3, 7 },
|
||||
{ INTRO4_2, 12 },
|
||||
{ INTRO4_4, 26 },
|
||||
};
|
||||
|
||||
static defaultanmsound const vol43a[] =
|
||||
{
|
||||
{ INTRO4_6, 10 },
|
||||
};
|
||||
|
||||
static defaultanmsound const vol4e1[] =
|
||||
{
|
||||
{ DUKE_UNDERWATER, 3 },
|
||||
{ VOL4ENDSND1, 35 },
|
||||
};
|
||||
|
||||
static defaultanmsound const vol4e2[] =
|
||||
{
|
||||
{ DUKE_UNDERWATER, 11 },
|
||||
{ VOL4ENDSND1, 20 },
|
||||
{ VOL4ENDSND2, 39 },
|
||||
{ StopAllSounds, 50 },
|
||||
};
|
||||
|
||||
static defaultanmsound const vol4e3[] =
|
||||
{
|
||||
{ BOSS4_DEADSPEECH, 1 },
|
||||
{ VOL4ENDSND1, 40 },
|
||||
{ DUKE_UNDERWATER, 40 },
|
||||
{ BIGBANG, 50 },
|
||||
};
|
||||
|
||||
static defaultanmsound const rr_intro[] =
|
||||
{
|
||||
{ 29, 1 },
|
||||
};
|
||||
|
||||
static defaultanmsound const redneck[] =
|
||||
{
|
||||
{ 478, 1 },
|
||||
};
|
||||
|
||||
static defaultanmsound const xatlogo[] =
|
||||
{
|
||||
{ 479, 1 },
|
||||
};
|
||||
|
||||
static defaultanmsound const turdmov[] =
|
||||
{
|
||||
{ 82, 1 },
|
||||
};
|
||||
|
||||
static defaultanmsound const rr_outro[] =
|
||||
{
|
||||
{ 35, 1 },
|
||||
};
|
||||
|
||||
struct defaultanm {
|
||||
char const *fn;
|
||||
defaultanmsound const *sounds;
|
||||
|
@ -198,23 +100,6 @@ void Anim_Init(void)
|
|||
#define anmsnd(x) (x), ARRAY_SIZE(x)
|
||||
static defaultanm const anms[] =
|
||||
{
|
||||
{ "logo.anm", anmsnd(logo), 9 },
|
||||
{ "3dr.anm", NULL, 0, 10 },
|
||||
{ "vol4e1.anm", anmsnd(vol4e1), 10 },
|
||||
{ "vol4e2.anm", anmsnd(vol4e2), 14 },
|
||||
{ "vol4e3.anm", anmsnd(vol4e3), 10 },
|
||||
{ "vol41a.anm", anmsnd(vol41a), 14 },
|
||||
{ "vol42a.anm", anmsnd(vol42a), 18 },
|
||||
{ "vol43a.anm", anmsnd(vol43a), 10 },
|
||||
{ "duketeam.anm", NULL, 0, 10 },
|
||||
{ "radlogo.anm", NULL, 0, 10 },
|
||||
{ "cineov2.anm", anmsnd(cineov2), 18 },
|
||||
{ "cineov3.anm", anmsnd(cineov3), 10 },
|
||||
{ "rr_intro.anm", anmsnd(rr_intro), 9 },
|
||||
{ "redneck.anm", anmsnd(redneck), 9 },
|
||||
{ "xatlogo.anm", anmsnd(xatlogo), 9 },
|
||||
{ "turdmov.anm", anmsnd(turdmov), 9 },
|
||||
{ "rr_outro.anm", anmsnd(rr_outro), 9 },
|
||||
{ "lvl1.anm", NULL, 0, 20 },
|
||||
{ "lvl2.anm", NULL, 0, 20 },
|
||||
{ "lvl3.anm", NULL, 0, 20 },
|
||||
|
|
|
@ -231,6 +231,7 @@ void G_InitRRRASkies(void)
|
|||
|
||||
void prelevel_d(int g);
|
||||
void prelevel_r(int g);
|
||||
void bonussequence_d(int num, CompletionFunc completion);
|
||||
|
||||
void G_NewGame(int volumeNum, int levelNum, int skillNum)
|
||||
{
|
||||
|
@ -270,31 +271,7 @@ void G_NewGame(int volumeNum, int levelNum, int skillNum)
|
|||
if (!RR && (!g_netServer && ud.multimode < 2) && UserMap == 0 &&
|
||||
levelNum == 0 && volumeNum == 3 && adult_lockout == 0)
|
||||
{
|
||||
S_PlaySpecialMusic(MUS_BRIEFING);
|
||||
|
||||
renderFlushPerms();
|
||||
videoSetViewableArea(0,0,xdim-1,ydim-1);
|
||||
twod->ClearScreen();
|
||||
videoNextPage();
|
||||
|
||||
int animReturn = Anim_Play("vol41a.anm");
|
||||
twod->ClearScreen();
|
||||
videoNextPage();
|
||||
if (animReturn)
|
||||
goto end_vol4a;
|
||||
|
||||
animReturn = Anim_Play("vol42a.anm");
|
||||
twod->ClearScreen();
|
||||
videoNextPage();
|
||||
if (animReturn)
|
||||
goto end_vol4a;
|
||||
|
||||
Anim_Play("vol43a.anm");
|
||||
twod->ClearScreen();
|
||||
videoNextPage();
|
||||
|
||||
end_vol4a:
|
||||
FX_StopAllSounds();
|
||||
bonussequence_d(5, [](bool) {});
|
||||
}
|
||||
|
||||
#ifdef EDUKE32_TOUCH_DEVICES
|
||||
|
|
|
@ -832,9 +832,7 @@ void G_DisplayRest(int32_t smoothratio)
|
|||
if (!DEER && g_player[myconnectindex].ps->newowner == -1 && ud.overhead_on == 0 && cl_crosshair && ud.camerasprite == -1)
|
||||
{
|
||||
int32_t a = TILE_CROSSHAIR;
|
||||
//ud.returnvar[0] = (160<<16) - (g_player[myconnectindex].ps->look_ang<<15);
|
||||
//ud.returnvar[1] = 100<<16;
|
||||
//int32_t a = VM_OnEventWithReturn(EVENT_DISPLAYCROSSHAIR, g_player[screenpeek].ps->i, screenpeek, TILE_CROSSHAIR);
|
||||
|
||||
if ((unsigned) a < MAXTILES)
|
||||
{
|
||||
vec2_t crosshairpos = { (160<<16) - (g_player[myconnectindex].ps->look_ang<<15), 100<<16 };
|
||||
|
@ -848,15 +846,6 @@ void G_DisplayRest(int32_t smoothratio)
|
|||
}
|
||||
}
|
||||
|
||||
/*
|
||||
if (VM_HaveEvent(EVENT_DISPLAYREST))
|
||||
{
|
||||
int32_t vr=viewingrange, asp=yxaspect;
|
||||
VM_ExecuteEvent(EVENT_DISPLAYREST, g_player[screenpeek].ps->i, screenpeek);
|
||||
renderSetAspect(vr, asp);
|
||||
}
|
||||
*/
|
||||
|
||||
if (ud.pause_on==1 && (g_player[myconnectindex].ps->gm&MODE_MENU) == 0)
|
||||
menutext_center(100, GStrings("Game Paused"));
|
||||
|
||||
|
@ -924,13 +913,11 @@ void G_DisplayRest(int32_t smoothratio)
|
|||
|
||||
Net_DisplaySyncMsg();
|
||||
|
||||
#ifndef EDUKE32_TOUCH_DEVICES
|
||||
if (VOLUMEONE)
|
||||
{
|
||||
if (g_showShareware > 0 && (g_player[myconnectindex].ps->gm&MODE_MENU) == 0)
|
||||
rotatesprite_fs((320-50)<<16, 9<<16, 65536L, 0, TILE_BETAVERSION, 0, 0, 2+8+16+128);
|
||||
}
|
||||
#endif
|
||||
|
||||
if (!Demo_IsProfiling())
|
||||
{
|
||||
|
@ -1090,6 +1077,7 @@ void G_DoOrderScreen(void)
|
|||
}
|
||||
|
||||
void bonussequence_d(int num, CompletionFunc completion);
|
||||
void bonussequence_r(int num, CompletionFunc completion);
|
||||
|
||||
static void G_BonusCutscenes(void)
|
||||
{
|
||||
|
@ -1100,65 +1088,25 @@ static void G_BonusCutscenes(void)
|
|||
|
||||
if (RR)
|
||||
{
|
||||
switch (ud.volume_number)
|
||||
bonussequence_r(ud.volume_number, [](bool) {});
|
||||
if (ud.volume_number == 0)
|
||||
{
|
||||
case 0:
|
||||
videoClearScreen(0L);
|
||||
videoNextPage();
|
||||
if (adult_lockout == 0)
|
||||
{
|
||||
Anim_Play("turdmov.anm");
|
||||
inputState.ClearAllInput();
|
||||
videoClearScreen(0L);
|
||||
videoNextPage();
|
||||
}
|
||||
// Todo: allow to return to the menu here
|
||||
m_level_number = ud.level_number = 0;
|
||||
ud.m_volume_number = ud.volume_number = 1;
|
||||
ud.eog = 0;
|
||||
fadepal(0, 0, 0, 0, 252, 4);
|
||||
inputState.ClearAllInput();
|
||||
P_SetGamePalette(g_player[myconnectindex].ps, BASEPAL, 0);
|
||||
rotatesprite_fs(0, 0, 65536L, 0, TILE_TENSCREEN, 0, 0, 2+8+16+64+128+BGSTRETCH);
|
||||
videoNextPage();
|
||||
fadepal(0, 0, 0, 252, 0, -4);
|
||||
inputState.ClearAllInput();
|
||||
G_HandleEventsWhileNoInput();
|
||||
fadepal(0, 0, 0, 0, 252, 4);
|
||||
FX_StopAllSounds();
|
||||
S_ClearSoundLocks();
|
||||
break;
|
||||
case 1:
|
||||
videoClearScreen(0L);
|
||||
videoNextPage();
|
||||
if (adult_lockout == 0)
|
||||
{
|
||||
Anim_Play("rr_outro.anm");
|
||||
inputState.ClearAllInput();
|
||||
videoClearScreen(0L);
|
||||
videoNextPage();
|
||||
}
|
||||
g_turdLevel = false;
|
||||
}
|
||||
else
|
||||
{
|
||||
g_lastLevel = 0;
|
||||
g_vixenLevel = 1;
|
||||
ud.level_number = 0;
|
||||
ud.volume_number = 0;
|
||||
fadepal(0, 0, 0, 0, 252, 4);
|
||||
videoSetViewableArea(0, 0, xdim-1, ydim-1);
|
||||
inputState.ClearAllInput();
|
||||
P_SetGamePalette(g_player[myconnectindex].ps, BASEPAL, 0);
|
||||
rotatesprite_fs(0, 0, 65536L, 0, TILE_TENSCREEN, 0, 0, 2 + 8 + 16 + 64 + 128 + BGSTRETCH);
|
||||
videoNextPage();
|
||||
fadepal(0, 0, 0, 252, 0, -4);
|
||||
inputState.ClearAllInput();
|
||||
G_HandleEventsWhileNoInput();
|
||||
fadepal(0, 0, 0, 0, 252, 4);
|
||||
FX_StopAllSounds();
|
||||
S_ClearSoundLocks();
|
||||
break;
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
bonussequence_d(ud.volume_number, [](bool){});
|
||||
else
|
||||
bonussequence_d(ud.volume_number, [](bool){});
|
||||
}
|
||||
|
||||
static void G_DisplayMPResultsScreen(void)
|
||||
|
|
Loading…
Reference in a new issue