mirror of
https://github.com/ZDoom/Raze.git
synced 2024-11-15 17:01:28 +00:00
- safety commit.
This commit is contained in:
parent
7b7c64fc17
commit
6767b383e7
4 changed files with 332 additions and 266 deletions
|
@ -54,6 +54,11 @@ IMPLEMENT_CLASS(DScreenJob, true, false)
|
||||||
|
|
||||||
void RunScreenJob(DScreenJob *job, CompletionFunc completion, bool clearbefore)
|
void RunScreenJob(DScreenJob *job, CompletionFunc completion, bool clearbefore)
|
||||||
{
|
{
|
||||||
|
if (job == nullptr)
|
||||||
|
{
|
||||||
|
completion(false);
|
||||||
|
return;
|
||||||
|
}
|
||||||
if (clearbefore)
|
if (clearbefore)
|
||||||
{
|
{
|
||||||
twod->ClearScreen();
|
twod->ClearScreen();
|
||||||
|
@ -163,7 +168,7 @@ public:
|
||||||
if (sound == -1)
|
if (sound == -1)
|
||||||
soundEngine->StopAllChannels();
|
soundEngine->StopAllChannels();
|
||||||
else
|
else
|
||||||
soundEngine->StartSound(SOURCE_None, nullptr, nullptr, CHAN_BODY, CHANF_NONE, sound, 1.f, ATTN_NONE);
|
soundEngine->StartSound(SOURCE_None, nullptr, nullptr, CHAN_AUTO, CHANF_UI, sound, 1.f, ATTN_NONE);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
curframe++;
|
curframe++;
|
||||||
|
|
|
@ -538,7 +538,8 @@ class DDRealmsScreen : public DScreenJob
|
||||||
else if (span > duration - 255) light = duration - span;
|
else if (span > duration - 255) light = duration - span;
|
||||||
light = clamp(light, 0, 255);
|
light = clamp(light, 0, 255);
|
||||||
PalEntry pe(255, light, light, light);
|
PalEntry pe(255, light, light, light);
|
||||||
DrawTexture(twod, tex, 0, 0, DTA_FullscreenEx, 3, DTA_TranslationIndex, translation, DTA_Color, pe, TAG_DONE);
|
twod->ClearScreen();
|
||||||
|
DrawTexture(twod, tex, 0, 0, DTA_FullscreenEx, 3, DTA_TranslationIndex, translation, DTA_Color, pe, DTA_LegacyRenderStyle, STYLEF_Alpha1, TAG_DONE);
|
||||||
return skiprequest ? -1 : span < duration ? 1 : 0;
|
return skiprequest ? -1 : span < duration ? 1 : 0;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
@ -572,27 +573,27 @@ class DTitleScreen : public DScreenJob
|
||||||
PalEntry pe(255, light, light, light);
|
PalEntry pe(255, light, light, light);
|
||||||
|
|
||||||
twod->ClearScreen();
|
twod->ClearScreen();
|
||||||
DrawTexture(twod, tileGetTexture(BETASCREEN), 0, 0, DTA_FullscreenEx, 3, DTA_TranslationIndex, translation, DTA_Color, pe, TAG_DONE);
|
DrawTexture(twod, tileGetTexture(BETASCREEN), 0, 0, DTA_FullscreenEx, 3, DTA_TranslationIndex, translation, DTA_Color, pe, DTA_LegacyRenderStyle, STYLEF_Alpha1, TAG_DONE);
|
||||||
|
|
||||||
if (soundanm == 0 && clock >= 120 && clock < 120 + 60)
|
if (soundanm == 0 && clock >= 120 && clock < 120 + 60)
|
||||||
{
|
{
|
||||||
soundanm = 1;
|
soundanm = 1;
|
||||||
sound(PIPEBOMB_EXPLODE);
|
S_PlaySound(PIPEBOMB_EXPLODE, CHAN_AUTO, CHANF_UI);
|
||||||
}
|
}
|
||||||
if (soundanm == 1 && clock > 220 && clock < (220 + 30))
|
if (soundanm == 1 && clock > 220 && clock < (220 + 30))
|
||||||
{
|
{
|
||||||
soundanm = 2;
|
soundanm = 2;
|
||||||
sound(PIPEBOMB_EXPLODE);
|
S_PlaySound(PIPEBOMB_EXPLODE, CHAN_AUTO, CHANF_UI);
|
||||||
}
|
}
|
||||||
if (soundanm == 2 && clock >= 280 && clock < 395)
|
if (soundanm == 2 && clock >= 280 && clock < 395)
|
||||||
{
|
{
|
||||||
soundanm = 3;
|
soundanm = 3;
|
||||||
sound(FLY_BY);
|
S_PlaySound(FLY_BY, CHAN_AUTO, CHANF_UI);
|
||||||
}
|
}
|
||||||
else if (soundanm == 3 && clock >= 395)
|
else if (soundanm == 3 && clock >= 395)
|
||||||
{
|
{
|
||||||
soundanm = 4;
|
soundanm = 4;
|
||||||
sound(PIPEBOMB_EXPLODE);
|
S_PlaySound(PIPEBOMB_EXPLODE, CHAN_AUTO, CHANF_UI);
|
||||||
}
|
}
|
||||||
|
|
||||||
double scale = clamp(clock - 120, 0, 60) / 64.;
|
double scale = clamp(clock - 120, 0, 60) / 64.;
|
||||||
|
@ -642,13 +643,329 @@ void Logo_d(CompletionFunc completion)
|
||||||
{
|
{
|
||||||
RunScreenJob(Create<DTitleScreen>(), [=](bool skipped)
|
RunScreenJob(Create<DTitleScreen>(), [=](bool skipped)
|
||||||
{
|
{
|
||||||
sound(NITEVISION_ONOFF);
|
S_PlaySound(NITEVISION_ONOFF, CHAN_AUTO, CHANF_UI);
|
||||||
completion(skipped);
|
completion(skipped);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//---------------------------------------------------------------------------
|
||||||
|
//
|
||||||
|
//
|
||||||
|
//
|
||||||
|
//---------------------------------------------------------------------------
|
||||||
|
|
||||||
|
class DEpisode1End1 : public DScreenJob
|
||||||
|
{
|
||||||
|
int bonuscnt = 0;
|
||||||
|
int fadeoutstart = -1;
|
||||||
|
|
||||||
|
public:
|
||||||
|
int Frame(uint64_t nsclock, bool skiprequest) override
|
||||||
|
{
|
||||||
|
static const int breathe[] =
|
||||||
|
{
|
||||||
|
0, 30,VICTORY1 + 1,176,59,
|
||||||
|
30, 60,VICTORY1 + 2,176,59,
|
||||||
|
60, 90,VICTORY1 + 1,176,59,
|
||||||
|
90, 120,0 ,176,59
|
||||||
|
};
|
||||||
|
|
||||||
|
static const int bossmove[] =
|
||||||
|
{
|
||||||
|
0, 120,VICTORY1 + 3,86,59,
|
||||||
|
220, 260,VICTORY1 + 4,86,59,
|
||||||
|
260, 290,VICTORY1 + 5,86,59,
|
||||||
|
290, 320,VICTORY1 + 6,86,59,
|
||||||
|
320, 350,VICTORY1 + 7,86,59,
|
||||||
|
350, 380,VICTORY1 + 8,86,59
|
||||||
|
};
|
||||||
|
|
||||||
|
auto translation = TRANSLATION(Translation_BasePalettes, ENDINGPAL);
|
||||||
|
|
||||||
|
int totalclock = nsclock * 120 / 1'000'000'000;
|
||||||
|
if (skiprequest) fadeoutstart = totalclock;
|
||||||
|
|
||||||
|
auto translation = TRANSLATION(Translation_BasePalettes, TITLEPAL);
|
||||||
|
uint64_t span = nsclock / 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, tileGetTexture(VICTORY1), 0, 0, DTA_FullscreenEx, 3, DTA_TranslationIndex, translation, DTA_Color, pe, DTA_LegacyRenderStyle, STYLEF_Alpha1, TAG_DONE);
|
||||||
|
|
||||||
|
|
||||||
|
// boss
|
||||||
|
if (totalclock > 390 && totalclock < 780)
|
||||||
|
for (int t = 0; t < 35; t += 5) if (bossmove[t + 2] && (totalclock % 390) > bossmove[t] && (totalclock % 390) <= bossmove[t + 1])
|
||||||
|
{
|
||||||
|
if (t == 10 && bonuscnt == 1)
|
||||||
|
{
|
||||||
|
S_PlaySound(SHOTGUN_FIRE, CHAN_AUTO, CHANF_UI);
|
||||||
|
S_PlaySound(SQUISHED, CHAN_AUTO, CHANF_UI);
|
||||||
|
bonuscnt++;
|
||||||
|
}
|
||||||
|
DrawTexture(twod, tileGetTexture(bossmove[t + 2]), bossmove[t + 3], bossmove[t + 4], DTA_FullscreenScale, 3, DTA_VirtualWidth, 320, DTA_VirtualHeight, 200,
|
||||||
|
DTA_CenterOffset, true, DTA_TranslationIndex, translation, DTA_Color, pe, TAG_DONE);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Breathe
|
||||||
|
if (totalclock < 450 || totalclock >= 750)
|
||||||
|
{
|
||||||
|
if (totalclock >= 750)
|
||||||
|
{
|
||||||
|
DrawTexture(twod, tileGetTexture(VICTORY1 + 8), 86, 59, DTA_FullscreenScale, 3, DTA_VirtualWidth, 320, DTA_VirtualHeight, 200,
|
||||||
|
DTA_CenterOffset, true, DTA_TranslationIndex, translation, DTA_Color, pe, TAG_DONE);
|
||||||
|
if (totalclock >= 750 && bonuscnt == 2)
|
||||||
|
{
|
||||||
|
S_PlaySound(DUKETALKTOBOSS, CHAN_AUTO, CHANF_UI);
|
||||||
|
bonuscnt++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
for (int t = 0; t < 20; t += 5)
|
||||||
|
if (breathe[t + 2] && (totalclock % 120) > breathe[t] && (totalclock % 120) <= breathe[t + 1])
|
||||||
|
{
|
||||||
|
if (t == 5 && bonuscnt == 0)
|
||||||
|
{
|
||||||
|
S_PlaySound(BOSSTALKTODUKE, CHAN_AUTO, CHANF_UI);
|
||||||
|
bonuscnt++;
|
||||||
|
}
|
||||||
|
DrawTexture(twod, tileGetTexture(breathe[t + 2]), breathe[t + 3], breathe[t + 4], DTA_FullscreenScale, 3, DTA_VirtualWidth, 320, DTA_VirtualHeight, 200,
|
||||||
|
DTA_CenterOffset, true, DTA_TranslationIndex, translation, DTA_Color, pe, TAG_DONE);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// Only end after having faded out.
|
||||||
|
return fadeoutstart > 0 && light == 0 ? -1 : 1;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
//---------------------------------------------------------------------------
|
||||||
|
//
|
||||||
|
//
|
||||||
|
//
|
||||||
|
//---------------------------------------------------------------------------
|
||||||
|
|
||||||
|
class DEpisodeEnd2 : public DScreenJob
|
||||||
|
{
|
||||||
|
int fadeoutstart = -1;
|
||||||
|
FGameTexture* tex;
|
||||||
|
|
||||||
|
public:
|
||||||
|
DEpisodeEnd2(FGameTexture * tile)
|
||||||
|
{
|
||||||
|
tex = tile;
|
||||||
|
}
|
||||||
|
|
||||||
|
int Frame(uint64_t clock, bool skiprequest) override
|
||||||
|
{
|
||||||
|
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, STYLEF_Alpha1, TAG_DONE);
|
||||||
|
// Only end after having faded out.
|
||||||
|
return fadeoutstart > 0 && light == 0 ? -1 : 1;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
//---------------------------------------------------------------------------
|
||||||
|
//
|
||||||
|
//
|
||||||
|
//
|
||||||
|
//---------------------------------------------------------------------------
|
||||||
|
|
||||||
|
class DBlackScreen : public DScreenJob
|
||||||
|
{
|
||||||
|
int wait;
|
||||||
|
|
||||||
|
DBlackScreen(int w) : wait(w) {}
|
||||||
|
int Frame(uint64_t clock, bool skiprequest)
|
||||||
|
{
|
||||||
|
int span = int(clock / 1'000'000);
|
||||||
|
twod->ClearScreen();
|
||||||
|
return span < wait ? 1 : -1;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
//---------------------------------------------------------------------------
|
||||||
|
//
|
||||||
|
//
|
||||||
|
//
|
||||||
|
//---------------------------------------------------------------------------
|
||||||
|
|
||||||
|
class DEpisode3End : public DEpisodeEnd2
|
||||||
|
{
|
||||||
|
int sound = 0;
|
||||||
|
int64_t waittime = 0;
|
||||||
|
|
||||||
|
FGameTexture* getTexture()
|
||||||
|
{
|
||||||
|
// Here we must provide a real texture, even if invalid, so that the sounds play.
|
||||||
|
auto texid = TexMan.CheckForTexture("radlogo.anm", ETextureType::Any, FTextureManager::TEXMAN_TryAny | FTextureManager::TEXMAN_ForceLookup);
|
||||||
|
if (texid.isValid()) return TexMan.GetGameTexture(texid);
|
||||||
|
else return TexMan.GameByIndex(0);
|
||||||
|
}
|
||||||
|
|
||||||
|
public:
|
||||||
|
DEpisode3End() : DEpisodeEnd2(getTexture())
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
int Frame(uint64_t clock, bool skiprequest)
|
||||||
|
{
|
||||||
|
switch (sound)
|
||||||
|
{
|
||||||
|
case 0:
|
||||||
|
S_PlaySound(ENDSEQVOL3SND5, CHAN_AUTO, CHANF_UI);
|
||||||
|
sound++;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 1:
|
||||||
|
if (!S_CheckSoundPlaying(ENDSEQVOL3SND5, 0))
|
||||||
|
{
|
||||||
|
S_PlaySound(ENDSEQVOL3SND6, CHAN_AUTO, CHANF_UI);
|
||||||
|
sound++;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 2:
|
||||||
|
if (!S_CheckSoundPlaying(ENDSEQVOL3SND6, 0))
|
||||||
|
{
|
||||||
|
S_PlaySound(ENDSEQVOL3SND7, CHAN_AUTO, CHANF_UI);
|
||||||
|
sound++;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 3:
|
||||||
|
if (!S_CheckSoundPlaying(ENDSEQVOL3SND7, 0))
|
||||||
|
{
|
||||||
|
S_PlaySound(ENDSEQVOL3SND8, CHAN_AUTO, CHANF_UI);
|
||||||
|
sound++;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 4:
|
||||||
|
if (!S_CheckSoundPlaying(ENDSEQVOL3SND8, 0))
|
||||||
|
{
|
||||||
|
S_PlaySound(ENDSEQVOL3SND9, CHAN_AUTO, CHANF_UI);
|
||||||
|
sound++;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 5:
|
||||||
|
if (!S_CheckSoundPlaying(ENDSEQVOL3SND8, 0))
|
||||||
|
{
|
||||||
|
sound++;
|
||||||
|
waittime = clock + 1'000'000'000;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 6:
|
||||||
|
if (PLUTOPAK)
|
||||||
|
{
|
||||||
|
if (clock > waittime) skiprequest = true;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
int ret = DEpisodeEnd2::Frame(clock, skiprequest);
|
||||||
|
if (ret != 1) FX_StopAllSounds();
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
//---------------------------------------------------------------------------
|
||||||
|
//
|
||||||
|
//
|
||||||
|
//
|
||||||
|
//---------------------------------------------------------------------------
|
||||||
|
|
||||||
|
void bonussequence(int num, CompletionFunc completion)
|
||||||
|
{
|
||||||
|
static const AnimSound cineov2sound[] =
|
||||||
|
{
|
||||||
|
{ 1, WIND_AMBIENCE+1 },
|
||||||
|
{ 26, ENDSEQVOL2SND1+1 },
|
||||||
|
{ 36, ENDSEQVOL2SND2+1 },
|
||||||
|
{ 54, THUD+1 },
|
||||||
|
{ 62, ENDSEQVOL2SND3+1 },
|
||||||
|
{ 75, ENDSEQVOL2SND4 + 1 },
|
||||||
|
{ 81, ENDSEQVOL2SND5 + 1 },
|
||||||
|
{ 115, ENDSEQVOL2SND6 + 1 },
|
||||||
|
{ 124, ENDSEQVOL2SND7 + 1 },
|
||||||
|
{ -1, -1 }
|
||||||
|
};
|
||||||
|
static const int cineov2frames[] = { 18, 18, 18 };
|
||||||
|
|
||||||
|
static const AnimSound cineov3sound[] =
|
||||||
|
{
|
||||||
|
{ 1, WIND_REPEAT + 1 },
|
||||||
|
{ 98, DUKE_GRUNT + 1 },
|
||||||
|
{ 102, THUD + 1 },
|
||||||
|
{ 102, SQUISHED + 1 },
|
||||||
|
{ 124, ENDSEQVOL3SND3 + 1 },
|
||||||
|
{ 134, ENDSEQVOL3SND2 + 1 },
|
||||||
|
{ 158, PIPEBOMB_EXPLODE + 1 },
|
||||||
|
{ -1,-1 }
|
||||||
|
};
|
||||||
|
static const int cineov3frames[] = { 10, 10, 10 };
|
||||||
|
|
||||||
|
Mus_Stop();
|
||||||
|
FX_StopAllSounds();
|
||||||
|
|
||||||
|
switch (num)
|
||||||
|
{
|
||||||
|
case 0:
|
||||||
|
RunScreenJob(Create<DEpisode1End1>(), [=](bool skiprequest)
|
||||||
|
{
|
||||||
|
RunScreenJob(Create<DEpisodeEnd2>(tileGetTexture(E1ENDSCREEN)), completion);
|
||||||
|
});
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 1:
|
||||||
|
PlayVideo("cineov2.anm", cineov2sound, cineov2frames, [=](bool skiprequest)
|
||||||
|
{
|
||||||
|
S_PlaySound(PIPEBOMB_EXPLODE, CHAN_AUTO, CHANF_UI);
|
||||||
|
RunScreenJob(Create<DEpisodeEnd2>(tileGetTexture(E2ENDSCREEN)), completion);
|
||||||
|
});
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 2:
|
||||||
|
PlayVideo("cineov3.anm", cineov3sound, cineov3frames, [=](bool skiprequest)
|
||||||
|
{
|
||||||
|
RunScreenJob(Create<DBlackScreen>(skiprequest? 1 : 200), [=](bool skiprequest)
|
||||||
|
{
|
||||||
|
FX_StopAllSounds();
|
||||||
|
if (PLUTOPAK)
|
||||||
|
{
|
||||||
|
RunScreenJob(Create<DEpisode3End>(), completion);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
RunScreenJob(Create<DEpisode3End>(), [=](bool skiprequest)
|
||||||
|
{
|
||||||
|
S_PlaySound(ENDSEQVOL3SND4, CHAN_AUTO, CHANF_UI);
|
||||||
|
RunScreenJob(Create<DEpisodeEnd2>(TexMan.GetGameTextureByName("DUKETEAM.ANM", false, FTextureManager::TEXMAN_ForceLookup)), completion);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
});
|
||||||
|
});
|
||||||
|
break;
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
void dobonus(char bonusonly)
|
void dobonus(char bonusonly)
|
||||||
{
|
{
|
||||||
|
@ -656,29 +973,8 @@ void dobonus(char bonusonly)
|
||||||
//int i, y, xfragtotal, yfragtotal;
|
//int i, y, xfragtotal, yfragtotal;
|
||||||
short bonuscnt;
|
short bonuscnt;
|
||||||
|
|
||||||
static const int breathe[] =
|
|
||||||
{
|
|
||||||
0, 30,VICTORY1+1,176,59,
|
|
||||||
30, 60,VICTORY1+2,176,59,
|
|
||||||
60, 90,VICTORY1+1,176,59,
|
|
||||||
90, 120,0 ,176,59
|
|
||||||
};
|
|
||||||
|
|
||||||
static const int bossmove[] =
|
|
||||||
{
|
|
||||||
0, 120,VICTORY1+3,86,59,
|
|
||||||
220, 260,VICTORY1+4,86,59,
|
|
||||||
260, 290,VICTORY1+5,86,59,
|
|
||||||
290, 320,VICTORY1+6,86,59,
|
|
||||||
320, 350,VICTORY1+7,86,59,
|
|
||||||
350, 380,VICTORY1+8,86,59
|
|
||||||
};
|
|
||||||
|
|
||||||
bonuscnt = 0;
|
bonuscnt = 0;
|
||||||
|
|
||||||
twod->ClearScreen();
|
|
||||||
videoNextPage();
|
|
||||||
|
|
||||||
FX_StopAllSounds();
|
FX_StopAllSounds();
|
||||||
FX_SetReverb(0);
|
FX_SetReverb(0);
|
||||||
|
|
||||||
|
@ -688,96 +984,8 @@ void dobonus(char bonusonly)
|
||||||
switch(ud.volume_number)
|
switch(ud.volume_number)
|
||||||
{
|
{
|
||||||
case 0:
|
case 0:
|
||||||
if(ud.lockout == 0)
|
|
||||||
{
|
|
||||||
twod->ClearScreen();
|
|
||||||
rotatesprite(0, 50 << 16, 65536L, 0, VICTORY1, 0, 0, 2 + 8 + 16 + 64 + 128, 0, 0, xdim - 1, ydim - 1, nullptr, ENDINGPAL);
|
|
||||||
videoNextPage();
|
|
||||||
//for(t=63;t>=0;t--) palto(0,0,0,t);
|
|
||||||
|
|
||||||
inputState.ClearAllInput();
|
|
||||||
totalclock = 0; tinc = 0;
|
|
||||||
while( 1 )
|
|
||||||
{
|
|
||||||
twod->ClearScreen();
|
|
||||||
rotatesprite(0,50<<16,65536L,0,VICTORY1,0,0,2+8+16+64+128,0,0,xdim-1,ydim-1);
|
|
||||||
|
|
||||||
// boss
|
|
||||||
if( totalclock > 390 && totalclock < 780 )
|
|
||||||
for(t=0;t<35;t+=5) if( bossmove[t+2] && (totalclock%390) > bossmove[t] && (totalclock%390) <= bossmove[t+1] )
|
|
||||||
{
|
|
||||||
if(t==10 && bonuscnt == 1) { sound(SHOTGUN_FIRE);sound(SQUISHED); bonuscnt++; }
|
|
||||||
rotatesprite(bossmove[t+3]<<16,bossmove[t+4]<<16,65536L,0,bossmove[t+2],0,0,2+8+16+64+128,0,0,xdim-1,ydim-1);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Breathe
|
|
||||||
if( totalclock < 450 || totalclock >= 750 )
|
|
||||||
{
|
|
||||||
if(totalclock >= 750)
|
|
||||||
{
|
|
||||||
rotatesprite(86<<16,59<<16,65536L,0,VICTORY1+8,0,0,2+8+16+64+128,0,0,xdim-1,ydim-1);
|
|
||||||
if(totalclock >= 750 && bonuscnt == 2) { sound(DUKETALKTOBOSS); bonuscnt++; }
|
|
||||||
}
|
|
||||||
for(t=0;t<20;t+=5)
|
|
||||||
if( breathe[t+2] && (totalclock%120) > breathe[t] && (totalclock%120) <= breathe[t+1] )
|
|
||||||
{
|
|
||||||
if(t==5 && bonuscnt == 0)
|
|
||||||
{
|
|
||||||
sound(BOSSTALKTODUKE);
|
|
||||||
bonuscnt++;
|
|
||||||
}
|
|
||||||
rotatesprite(breathe[t+3]<<16,breathe[t+4]<<16,65536L,0,breathe[t+2],0,0,2+8+16+64+128,0,0,xdim-1,ydim-1);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
//getpackets();
|
|
||||||
videoNextPage();
|
|
||||||
if( inputState.CheckAllInput() ) break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
//for(t=0;t<64;t++) palto(0,0,0,t);
|
|
||||||
|
|
||||||
inputState.ClearAllInput();
|
|
||||||
|
|
||||||
do
|
|
||||||
{
|
|
||||||
twod->ClearScreen();
|
|
||||||
rotatesprite(0, 0, 65536L, 0, 3292, 0, 0, 2 + 8 + 16 + 64, 0, 0, xdim - 1, ydim - 1);
|
|
||||||
videoNextPage();
|
|
||||||
//for(t=63;t>0;t--) palto(0,0,0,t);
|
|
||||||
} while (!inputState.CheckAllInput()); //getpackets();
|
|
||||||
//for(t=0;t<64;t++) palto(0,0,0,t);
|
|
||||||
Mus_Stop();
|
|
||||||
FX_StopAllSounds();
|
|
||||||
break;
|
|
||||||
case 1:
|
case 1:
|
||||||
Mus_Stop();
|
|
||||||
twod->ClearScreen();
|
|
||||||
videoNextPage();
|
|
||||||
|
|
||||||
if(ud.lockout == 0)
|
|
||||||
{
|
|
||||||
playanm("cineov2.anm",1);
|
|
||||||
inputState.ClearAllInput();
|
|
||||||
twod->ClearScreen();
|
|
||||||
videoNextPage();
|
|
||||||
}
|
|
||||||
|
|
||||||
sound(PIPEBOMB_EXPLODE);
|
|
||||||
|
|
||||||
//for(t=0;t<64;t++) palto(0,0,0,t);
|
|
||||||
inputState.ClearAllInput();
|
|
||||||
do
|
|
||||||
{
|
|
||||||
twod->ClearScreen();
|
|
||||||
rotatesprite(0, 0, 65536L, 0, 3293, 0, 0, 2 + 8 + 16 + 64, 0, 0, xdim - 1, ydim - 1);
|
|
||||||
videoNextPage();
|
|
||||||
//for(t=63;t>0;t--) palto(0,0,0,t);
|
|
||||||
} while (!inputState.CheckAllInput()); //getpackets();
|
|
||||||
//for(t=0;t<64;t++) palto(0,0,0,t);
|
|
||||||
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 3:
|
case 3:
|
||||||
|
|
||||||
|
@ -833,56 +1041,6 @@ void dobonus(char bonusonly)
|
||||||
inputState.ClearAllInput();
|
inputState.ClearAllInput();
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 2:
|
|
||||||
|
|
||||||
Mus_Stop();
|
|
||||||
twod->ClearScreen();
|
|
||||||
videoNextPage();
|
|
||||||
if(ud.lockout == 0)
|
|
||||||
{
|
|
||||||
//for(t=63;t>=0;t--) palto(0,0,0,t);
|
|
||||||
playanm("cineov3.anm",2);
|
|
||||||
inputState.ClearAllInput();
|
|
||||||
ototalclock = totalclock+200;
|
|
||||||
while(totalclock < ototalclock) //getpackets();
|
|
||||||
twod->ClearScreen();
|
|
||||||
videoNextPage();
|
|
||||||
|
|
||||||
FX_StopAllSounds();
|
|
||||||
}
|
|
||||||
|
|
||||||
playanm("RADLOGO.ANM",3);
|
|
||||||
|
|
||||||
if( ud.lockout == 0 && !inputState.CheckAllInput() )
|
|
||||||
{
|
|
||||||
sound(ENDSEQVOL3SND5);
|
|
||||||
while (S_CheckSoundPlaying(ENDSEQVOL3SND5, 0)) { handleevents(); /*getpackets();*/ }
|
|
||||||
if (inputState.CheckAllInput()) goto ENDANM;
|
|
||||||
sound(ENDSEQVOL3SND6);
|
|
||||||
while (S_CheckSoundPlaying(ENDSEQVOL3SND6, 0)) { handleevents(); /*getpackets();*/ }
|
|
||||||
if (inputState.CheckAllInput()) goto ENDANM;
|
|
||||||
sound(ENDSEQVOL3SND7);
|
|
||||||
while (S_CheckSoundPlaying(ENDSEQVOL3SND7, 0)) { handleevents(); /*getpackets();*/ }
|
|
||||||
if (inputState.CheckAllInput()) goto ENDANM;
|
|
||||||
sound(ENDSEQVOL3SND8);
|
|
||||||
while (S_CheckSoundPlaying(ENDSEQVOL3SND8, 0)) { handleevents(); /*getpackets();*/ }
|
|
||||||
if (inputState.CheckAllInput()) goto ENDANM;
|
|
||||||
sound(ENDSEQVOL3SND9);
|
|
||||||
while (S_CheckSoundPlaying(ENDSEQVOL3SND9, 0)) { handleevents(); /*getpackets();*/ }
|
|
||||||
}
|
|
||||||
|
|
||||||
inputState.ClearAllInput();
|
|
||||||
totalclock = 0;
|
|
||||||
while(!inputState.CheckAllInput() && totalclock < 120) //getpackets();
|
|
||||||
|
|
||||||
ENDANM:
|
|
||||||
|
|
||||||
FX_StopAllSounds();
|
|
||||||
inputState.ClearAllInput();
|
|
||||||
twod->ClearScreen();
|
|
||||||
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 4:
|
case 4:
|
||||||
if (!isWorldTour())
|
if (!isWorldTour())
|
||||||
return;
|
return;
|
||||||
|
|
|
@ -613,6 +613,8 @@ enum
|
||||||
ORDERING = 3270,
|
ORDERING = 3270,
|
||||||
TEXTSTORY = 3280,
|
TEXTSTORY = 3280,
|
||||||
LOADSCREEN = 3281,
|
LOADSCREEN = 3281,
|
||||||
|
E1ENDSCREEN = 3292,
|
||||||
|
E2ENDSCREEN = 3293,
|
||||||
BORNTOBEWILDSCREEN = 3370,
|
BORNTOBEWILDSCREEN = 3370,
|
||||||
BLIMP = 3400,
|
BLIMP = 3400,
|
||||||
FEM9 = 3450,
|
FEM9 = 3450,
|
||||||
|
|
|
@ -1160,105 +1160,6 @@ static void G_BonusCutscenes(void)
|
||||||
switch (ud.volume_number)
|
switch (ud.volume_number)
|
||||||
{
|
{
|
||||||
case 0:
|
case 0:
|
||||||
if (adult_lockout == 0)
|
|
||||||
{
|
|
||||||
int32_t bonuscnt=0;
|
|
||||||
int32_t const bossmove [] =
|
|
||||||
{
|
|
||||||
0, 120, TILE_VICTORY1+3, 86, 59,
|
|
||||||
220, 260, TILE_VICTORY1+4, 86, 59,
|
|
||||||
260, 290, TILE_VICTORY1+5, 86, 59,
|
|
||||||
290, 320, TILE_VICTORY1+6, 86, 59,
|
|
||||||
320, 350, TILE_VICTORY1+7, 86, 59,
|
|
||||||
350, 380, TILE_VICTORY1+8, 86, 59,
|
|
||||||
350, 380, TILE_VICTORY1+8, 86, 59 // duplicate row to alleviate overflow in the for loop below "boss"
|
|
||||||
};
|
|
||||||
|
|
||||||
videoClearScreen(0L);
|
|
||||||
rotatesprite_fs(0, 50<<16, 65536L, 0, TILE_VICTORY1, 0, 0, 2+8+16+64+128+BGSTRETCH, nullptr, ENDINGPAL);
|
|
||||||
videoNextPage();
|
|
||||||
fadepal(0, 0, 0, 252, 0, -4);
|
|
||||||
|
|
||||||
inputState.ClearAllInput();
|
|
||||||
totalclock = 0;
|
|
||||||
|
|
||||||
while (1)
|
|
||||||
{
|
|
||||||
if (G_FPSLimit())
|
|
||||||
{
|
|
||||||
videoClearScreen(0L);
|
|
||||||
rotatesprite_fs(0, 50 << 16, 65536L, 0, TILE_VICTORY1, 0, 0, 2 + 8 + 16 + 64 + 128 + BGSTRETCH, nullptr, ENDINGPAL);
|
|
||||||
|
|
||||||
// boss
|
|
||||||
if (totalclock > 390 && totalclock < 780)
|
|
||||||
for (bssize_t t=0; t<35; t+=5) if (bossmove[t+2] && (totalclock%390) > bossmove[t] && (totalclock%390) <= bossmove[t+1])
|
|
||||||
{
|
|
||||||
if (t==10 && bonuscnt == 1)
|
|
||||||
{
|
|
||||||
S_PlaySound(SHOTGUN_FIRE, CHAN_AUTO, CHANF_UI);
|
|
||||||
S_PlaySound(SQUISHED, CHAN_AUTO, CHANF_UI);
|
|
||||||
bonuscnt++;
|
|
||||||
}
|
|
||||||
rotatesprite_fs(bossmove[t+3]<<16, bossmove[t+4]<<16, 65536L, 0, bossmove[t+2], 0, 0, 2+8+16+64+128+BGSTRETCH, nullptr, ENDINGPAL);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Breathe
|
|
||||||
if (totalclock < 450 || totalclock >= 750)
|
|
||||||
{
|
|
||||||
int32_t const breathe [] =
|
|
||||||
{
|
|
||||||
0, 30, TILE_VICTORY1+1, 176, 59,
|
|
||||||
30, 60, TILE_VICTORY1+2, 176, 59,
|
|
||||||
60, 90, TILE_VICTORY1+1, 176, 59,
|
|
||||||
90, 120, 0, 176, 59
|
|
||||||
};
|
|
||||||
|
|
||||||
if (totalclock >= 750)
|
|
||||||
{
|
|
||||||
rotatesprite_fs(86<<16, 59<<16, 65536L, 0, TILE_VICTORY1+8, 0, 0, 2+8+16+64+128+BGSTRETCH, nullptr, ENDINGPAL);
|
|
||||||
if (totalclock >= 750 && bonuscnt == 2)
|
|
||||||
{
|
|
||||||
S_PlaySound(DUKETALKTOBOSS, CHAN_AUTO, CHANF_UI);
|
|
||||||
bonuscnt++;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
for (bssize_t t=0; t<20; t+=5)
|
|
||||||
if (breathe[t+2] && (totalclock%120) > breathe[t] && (totalclock%120) <= breathe[t+1])
|
|
||||||
{
|
|
||||||
if (t==5 && bonuscnt == 0)
|
|
||||||
{
|
|
||||||
S_PlaySound(BOSSTALKTODUKE, CHAN_AUTO, CHANF_UI);
|
|
||||||
bonuscnt++;
|
|
||||||
}
|
|
||||||
rotatesprite_fs(breathe[t+3]<<16, breathe[t+4]<<16, 65536L, 0, breathe[t+2], 0, 0, 2+8+16+64+128+BGSTRETCH, nullptr, ENDINGPAL);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
videoNextPage();
|
|
||||||
}
|
|
||||||
|
|
||||||
G_HandleAsync();
|
|
||||||
|
|
||||||
if (inputState.CheckAllInput()) break;
|
|
||||||
}
|
|
||||||
|
|
||||||
fadepal(0, 0, 0, 0, 252, 4);
|
|
||||||
}
|
|
||||||
|
|
||||||
inputState.ClearAllInput();
|
|
||||||
P_SetGamePalette(g_player[myconnectindex].ps, BASEPAL, 0); // JBF 20040308
|
|
||||||
|
|
||||||
rotatesprite_fs(160<<16, 100<<16, 65536L, 0, 3292, 0, 0, 2+8+64+BGSTRETCH);
|
|
||||||
fadepal(0, 0, 0, 252, 0, -4);
|
|
||||||
G_HandleEventsWhileNoInput();
|
|
||||||
fadepal(0, 0, 0, 0, 252, 4);
|
|
||||||
|
|
||||||
Mus_Stop();
|
|
||||||
FX_StopAllSounds();
|
|
||||||
S_ClearSoundLocks();
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 1:
|
case 1:
|
||||||
videoSetViewableArea(0, 0, xdim-1, ydim-1);
|
videoSetViewableArea(0, 0, xdim-1, ydim-1);
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue