mirror of
https://github.com/ZDoom/raze-gles.git
synced 2025-01-14 11:50:49 +00:00
- Exhumed's intro screens.
This commit is contained in:
parent
4950b556c9
commit
fed15a79e4
3 changed files with 51 additions and 35 deletions
|
@ -62,6 +62,7 @@ public:
|
||||||
|
|
||||||
int Frame(uint64_t clock, bool skiprequest, double smoothratio)
|
int Frame(uint64_t clock, bool skiprequest, double smoothratio)
|
||||||
{
|
{
|
||||||
|
if (state != running) smoothratio = 1; // this is necessary because the ticker won't be incremented anymore to avoid having a negative time span.
|
||||||
Draw(smoothratio);
|
Draw(smoothratio);
|
||||||
if (state == skipped) return -1;
|
if (state == skipped) return -1;
|
||||||
if (state == finished) return 0;
|
if (state == finished) return 0;
|
||||||
|
|
|
@ -38,6 +38,7 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||||
#include "v_draw.h"
|
#include "v_draw.h"
|
||||||
#include "m_random.h"
|
#include "m_random.h"
|
||||||
#include "gstrings.h"
|
#include "gstrings.h"
|
||||||
|
#include "c_bind.h"
|
||||||
|
|
||||||
#include <string>
|
#include <string>
|
||||||
|
|
||||||
|
@ -382,13 +383,19 @@ class DLobotomyScreen : public DImageScreen
|
||||||
public:
|
public:
|
||||||
DLobotomyScreen(FGameTexture *tex, int fade) : DImageScreen(tex, fade)
|
DLobotomyScreen(FGameTexture *tex, int fade) : DImageScreen(tex, fade)
|
||||||
{}
|
{}
|
||||||
|
|
||||||
int Frame(uint64_t clock, bool skiprequest) override
|
void Skipped() override
|
||||||
{
|
{
|
||||||
if (clock == 0) PlayLocalSound(StaticSound[kSoundJonLaugh2], 7000, false, CHANF_UI);
|
StopLocalSound();
|
||||||
if (skiprequest) StopLocalSound();
|
}
|
||||||
return DImageScreen::Frame(clock, skiprequest);
|
|
||||||
}
|
void OnTick() override
|
||||||
|
{
|
||||||
|
if (ticks == 1) PlayLocalSound(StaticSound[kSoundJonLaugh2], 7000, false, CHANF_UI);
|
||||||
|
|
||||||
|
DImageScreen::OnTick();
|
||||||
|
if (state == finished) StopLocalSound();
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
//---------------------------------------------------------------------------
|
//---------------------------------------------------------------------------
|
||||||
|
@ -399,12 +406,12 @@ public:
|
||||||
|
|
||||||
static const short skullDurations[] = { 6, 25, 43, 50, 68, 78, 101, 111, 134, 158, 173, 230, 600 };
|
static const short skullDurations[] = { 6, 25, 43, 50, 68, 78, 101, 111, 134, 158, 173, 230, 600 };
|
||||||
|
|
||||||
class DMainTitle : public DScreenJob
|
class DMainTitle : public DSkippableScreenJob
|
||||||
{
|
{
|
||||||
const char* a;
|
const char* a;
|
||||||
const char* b;
|
const char* b;
|
||||||
int state = 0;
|
int state = 0;
|
||||||
int var_18;
|
int duration;
|
||||||
int var_4 = 0;
|
int var_4 = 0;
|
||||||
int esi = 130;
|
int esi = 130;
|
||||||
int nCount = 0;
|
int nCount = 0;
|
||||||
|
@ -412,56 +419,64 @@ class DMainTitle : public DScreenJob
|
||||||
|
|
||||||
|
|
||||||
public:
|
public:
|
||||||
DMainTitle() : DScreenJob(fadein)
|
DMainTitle() : DSkippableScreenJob(fadein)
|
||||||
{
|
{
|
||||||
a = GStrings("TXT_EX_COPYRIGHT1");
|
a = GStrings("TXT_EX_COPYRIGHT1");
|
||||||
b = GStrings("TXT_EX_COPYRIGHT2");
|
b = GStrings("TXT_EX_COPYRIGHT2");
|
||||||
var_18 = skullDurations[0];
|
duration = skullDurations[0];
|
||||||
}
|
}
|
||||||
|
|
||||||
int Frame(uint64_t clock, bool skiprequest) override
|
void OnTick() override
|
||||||
{
|
{
|
||||||
int ticker = clock * 120 / 1'000'000'000;
|
int ticker = ticks * 120 / GameTicRate;
|
||||||
if (clock == 0)
|
if (ticks == 1)
|
||||||
{
|
{
|
||||||
PlayLocalSound(StaticSound[59], 0, true, CHANF_UI);
|
PlayLocalSound(StaticSound[59], 0, true, CHANF_UI);
|
||||||
playCDtrack(19, true);
|
playCDtrack(19, true);
|
||||||
}
|
}
|
||||||
if (clock > 1'000'000 && state == 0 && !soundEngine->IsSourcePlayingSomething(SOURCE_None, nullptr,CHAN_AUTO, -1))
|
if (ticks > 1 && state == 0 && !soundEngine->IsSourcePlayingSomething(SOURCE_None, nullptr, CHAN_AUTO, -1))
|
||||||
{
|
{
|
||||||
if (time(0) & 0xF)
|
if (time(0) & 0xF) // cheap-ass random...
|
||||||
PlayGameOverSound();
|
PlayGameOverSound();
|
||||||
else
|
else
|
||||||
PlayLocalSound(StaticSound[61], 0, false, CHANF_UI);
|
PlayLocalSound(StaticSound[61], 0, false, CHANF_UI);
|
||||||
state = 1;
|
state = 1;
|
||||||
start = ticker;
|
start = ticker;
|
||||||
}
|
}
|
||||||
|
if (state == 1)
|
||||||
|
{
|
||||||
|
if (ticker > duration)
|
||||||
|
{
|
||||||
|
nCount++;
|
||||||
|
if (nCount > 12)
|
||||||
|
{
|
||||||
|
state = finished;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
duration = start + skullDurations[nCount];
|
||||||
|
var_4 = var_4 == 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void Draw(double) override
|
||||||
|
{
|
||||||
twod->ClearScreen();
|
twod->ClearScreen();
|
||||||
|
|
||||||
menu_DoPlasma();
|
menu_DoPlasma();
|
||||||
|
|
||||||
DrawRel(kSkullHead, 160, 100);
|
DrawRel(kSkullHead, 160, 100);
|
||||||
switch (state)
|
if (state == 0)
|
||||||
{
|
{
|
||||||
case 0:
|
|
||||||
DrawRel(kSkullJaw, 161, 130);
|
DrawRel(kSkullJaw, 161, 130);
|
||||||
break;
|
}
|
||||||
|
else
|
||||||
case 1:
|
|
||||||
{
|
{
|
||||||
int nStringWidth = SmallFont->StringWidth(a);
|
int nStringWidth = SmallFont->StringWidth(a);
|
||||||
DrawText(twod, SmallFont, CR_UNTRANSLATED, 160 - nStringWidth / 2, 200 - 24, a, DTA_FullscreenScale, FSMode_Fit320x200, TAG_DONE);
|
DrawText(twod, SmallFont, CR_UNTRANSLATED, 160 - nStringWidth / 2, 200 - 24, a, DTA_FullscreenScale, FSMode_Fit320x200, TAG_DONE);
|
||||||
nStringWidth = SmallFont->StringWidth(b);
|
nStringWidth = SmallFont->StringWidth(b);
|
||||||
DrawText(twod, SmallFont, CR_UNTRANSLATED, 160 - nStringWidth / 2, 200 - 16, b, DTA_FullscreenScale, FSMode_Fit320x200, TAG_DONE);
|
DrawText(twod, SmallFont, CR_UNTRANSLATED, 160 - nStringWidth / 2, 200 - 16, b, DTA_FullscreenScale, FSMode_Fit320x200, TAG_DONE);
|
||||||
|
|
||||||
if (ticker > var_18)
|
|
||||||
{
|
|
||||||
nCount++;
|
|
||||||
if (nCount > 12) return 0;
|
|
||||||
var_18 = start + skullDurations[nCount];
|
|
||||||
var_4 = var_4 == 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
short nTile = kSkullJaw;
|
short nTile = kSkullJaw;
|
||||||
|
|
||||||
|
@ -486,10 +501,7 @@ public:
|
||||||
}
|
}
|
||||||
|
|
||||||
DrawRel(nTile, 161, y);
|
DrawRel(nTile, 161, y);
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
}
|
|
||||||
return skiprequest? -1 : 1;
|
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -200,7 +200,7 @@ public:
|
||||||
//
|
//
|
||||||
//---------------------------------------------------------------------------
|
//---------------------------------------------------------------------------
|
||||||
|
|
||||||
class DLmfPlayer : public DScreenJob
|
class DLmfPlayer : public DSkippableScreenJob
|
||||||
{
|
{
|
||||||
LMFPlayer decoder;
|
LMFPlayer decoder;
|
||||||
double angle = 1536;
|
double angle = 1536;
|
||||||
|
@ -216,6 +216,7 @@ public:
|
||||||
lastclock = 0;
|
lastclock = 0;
|
||||||
nextclock = 0;
|
nextclock = 0;
|
||||||
fp = std::move(fr);
|
fp = std::move(fr);
|
||||||
|
pausable = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
//---------------------------------------------------------------------------
|
//---------------------------------------------------------------------------
|
||||||
|
@ -224,14 +225,16 @@ public:
|
||||||
//
|
//
|
||||||
//---------------------------------------------------------------------------
|
//---------------------------------------------------------------------------
|
||||||
|
|
||||||
int Frame(uint64_t clock, bool skiprequest) override
|
void Draw(double smoothratio) override
|
||||||
{
|
{
|
||||||
|
uint64_t clock = (ticks + smoothratio) * 1'000'000'000. / GameTicRate;
|
||||||
if (clock >= nextclock)
|
if (clock >= nextclock)
|
||||||
{
|
{
|
||||||
nextclock += 100'000'000;
|
nextclock += 100'000'000;
|
||||||
if (decoder.ReadFrame(fp) == 0)
|
if (decoder.ReadFrame(fp) == 0)
|
||||||
{
|
{
|
||||||
return 0;
|
state = finished;
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -246,6 +249,7 @@ public:
|
||||||
angle = 0;
|
angle = 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
assert(z < 65536);
|
||||||
|
|
||||||
{
|
{
|
||||||
twod->ClearScreen();
|
twod->ClearScreen();
|
||||||
|
@ -254,7 +258,6 @@ public:
|
||||||
}
|
}
|
||||||
|
|
||||||
lastclock = clock;
|
lastclock = clock;
|
||||||
return skiprequest ? -1 : 1;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void OnDestroy() override
|
void OnDestroy() override
|
||||||
|
|
Loading…
Reference in a new issue