mirror of
https://github.com/KartKrewDev/RingRacers.git
synced 2026-04-27 12:31:54 +00:00
Merge branch 'disclaimer-introscene' into 'master'
Disclaimer intro scene See merge request KartKrew/Kart!2104
This commit is contained in:
commit
1da7a5c1da
2 changed files with 210 additions and 1 deletions
203
src/f_finale.c
203
src/f_finale.c
|
|
@ -285,6 +285,7 @@ static void F_TitleBGScroll(INT32 scrollspeed)
|
||||||
// INTRO SCENE
|
// INTRO SCENE
|
||||||
// =============
|
// =============
|
||||||
#define NUMINTROSCENES 5
|
#define NUMINTROSCENES 5
|
||||||
|
#define INTROSCENE_DISCLAIMER 1
|
||||||
#define INTROSCENE_KREW 2 // first scene with Kart Krew Dev
|
#define INTROSCENE_KREW 2 // first scene with Kart Krew Dev
|
||||||
INT32 intro_scenenum = 0;
|
INT32 intro_scenenum = 0;
|
||||||
INT32 intro_curtime = 0;
|
INT32 intro_curtime = 0;
|
||||||
|
|
@ -294,7 +295,7 @@ const char *introtext[NUMINTROSCENES];
|
||||||
static tic_t introscenetime[NUMINTROSCENES] =
|
static tic_t introscenetime[NUMINTROSCENES] =
|
||||||
{
|
{
|
||||||
2*TICRATE, // OUR SRB2 ASSOCIATES
|
2*TICRATE, // OUR SRB2 ASSOCIATES
|
||||||
TICRATE, // Listen to Funtown USA by tv room
|
9*TICRATE, // Disclaimer and Epilepsy Warning
|
||||||
(3*TICRATE)/2, // KKD
|
(3*TICRATE)/2, // KKD
|
||||||
(2*TICRATE)/3, // S&K
|
(2*TICRATE)/3, // S&K
|
||||||
TICRATE + (TICRATE/3), // Get ready !!
|
TICRATE + (TICRATE/3), // Get ready !!
|
||||||
|
|
@ -433,6 +434,191 @@ static void F_IntroDrawScene(void)
|
||||||
//V_DrawString(cx, cy, 0, cutscene_disptext);
|
//V_DrawString(cx, cy, 0, cutscene_disptext);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
typedef enum
|
||||||
|
{
|
||||||
|
DISCLAIMER_SHINE = 0,
|
||||||
|
DISCLAIMER_WHITEHOLD,
|
||||||
|
DISCLAIMER_FADE,
|
||||||
|
DISCLAIMER_SOUNDHOLD,
|
||||||
|
DISCLAIMER_SLIDE,
|
||||||
|
DISCLAIMER_FINAL,
|
||||||
|
DISCLAIMER_OUT,
|
||||||
|
} disclaimerstate;
|
||||||
|
|
||||||
|
static disclaimerstate dc_state = 0;
|
||||||
|
static UINT8 dc_tics = 0;
|
||||||
|
static UINT8 dc_segaframe = 1;
|
||||||
|
static UINT8 dc_bgcol = 0;
|
||||||
|
static UINT8 dc_lasttime = 0;
|
||||||
|
static boolean dc_ticking = false;
|
||||||
|
static UINT8 dc_bluesegafade = 0;
|
||||||
|
static UINT8 dc_textfade = 9;
|
||||||
|
static UINT8 dc_subtextfade = 9;
|
||||||
|
static UINT8 dc_screenfade = 9;
|
||||||
|
|
||||||
|
static void F_DisclaimerAdvanceState(void)
|
||||||
|
{
|
||||||
|
dc_state++;
|
||||||
|
dc_tics = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void F_DisclaimerDrawScene(void)
|
||||||
|
{
|
||||||
|
// ================================= SETUP
|
||||||
|
|
||||||
|
if (intro_curtime == 0)
|
||||||
|
{
|
||||||
|
dc_state = 0;
|
||||||
|
dc_segaframe = 1;
|
||||||
|
dc_bgcol = 0;
|
||||||
|
dc_bluesegafade = 0;
|
||||||
|
dc_textfade = 9;
|
||||||
|
dc_subtextfade = 9;
|
||||||
|
dc_screenfade = 9;
|
||||||
|
dc_lasttime = intro_curtime;
|
||||||
|
}
|
||||||
|
|
||||||
|
// ================================= TICK?
|
||||||
|
|
||||||
|
if (intro_curtime != dc_lasttime) // This function is once-per-frame, advance time only once per tic
|
||||||
|
dc_ticking = true;
|
||||||
|
else
|
||||||
|
dc_ticking = false;
|
||||||
|
|
||||||
|
dc_lasttime = intro_curtime;
|
||||||
|
|
||||||
|
// ================================= DRAWING
|
||||||
|
|
||||||
|
V_DrawFill(0, 0, BASEVIDWIDTH, BASEVIDHEIGHT, dc_bgcol);
|
||||||
|
|
||||||
|
/*
|
||||||
|
V_DrawFill(0, 0, 320, 10, 254);
|
||||||
|
V_DrawMenuString(1, 1, V_ORANGEMAP, va("ST: %d (%d) - SF: SEGA_A%02d - BG: %d - FADE A %d B %d C %d",
|
||||||
|
dc_state, dc_tics, dc_segaframe, dc_bgcol, dc_bluesegafade, dc_textfade, dc_subtextfade));
|
||||||
|
*/
|
||||||
|
|
||||||
|
if (intro_curtime == 0)
|
||||||
|
return;
|
||||||
|
|
||||||
|
// Anaglyph SEGA
|
||||||
|
if (dc_state >= DISCLAIMER_SLIDE)
|
||||||
|
V_DrawFixedPatch(0, 0, FRACUNIT, 0, W_CachePatchName(va("SEGA_B%02d", dc_segaframe), PU_CACHE), 0);
|
||||||
|
|
||||||
|
// Blue SEGA
|
||||||
|
if (dc_bluesegafade < 10)
|
||||||
|
{
|
||||||
|
UINT32 overlayalpha = 0;
|
||||||
|
|
||||||
|
if (dc_state >= DISCLAIMER_SLIDE)
|
||||||
|
overlayalpha = dc_bluesegafade << V_ALPHASHIFT;
|
||||||
|
|
||||||
|
V_DrawFixedPatch(0, 0, FRACUNIT, overlayalpha, W_CachePatchName(va("SEGA_A%02d", dc_segaframe), PU_CACHE), 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Disclaimer text
|
||||||
|
if (dc_state >= DISCLAIMER_FINAL)
|
||||||
|
{
|
||||||
|
UINT32 textalpha = 0;
|
||||||
|
if (dc_textfade > 0)
|
||||||
|
textalpha = dc_textfade << V_ALPHASHIFT;
|
||||||
|
|
||||||
|
UINT32 subtextalpha = 0;
|
||||||
|
if (dc_subtextfade > 0)
|
||||||
|
subtextalpha = dc_subtextfade << V_ALPHASHIFT;
|
||||||
|
|
||||||
|
V_DrawCenteredMenuString(160, 25, textalpha, "Original games and designs by");
|
||||||
|
|
||||||
|
char* newText = V_ScaledWordWrap(
|
||||||
|
290 << FRACBITS,
|
||||||
|
FRACUNIT, FRACUNIT, FRACUNIT,
|
||||||
|
0, MENU_FONT,
|
||||||
|
"\"Dr. Robotnik's Ring Racers\" is a not-for-profit fangame. All registered trademarks belong to their respective owners.\nThis game contains flashing lights and high-contrast patterns. Photosensitive? Use caution and the Profiles>Accessibility menu."
|
||||||
|
);
|
||||||
|
|
||||||
|
V_DrawCenteredMenuString(160, 125, subtextalpha, newText);
|
||||||
|
|
||||||
|
Z_Free(newText);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Fade out (would love to use a wipe here, but lmao how the fuck do wipes work)
|
||||||
|
if (dc_state >= DISCLAIMER_OUT)
|
||||||
|
{
|
||||||
|
UINT32 screenalpha = 0;
|
||||||
|
|
||||||
|
if (dc_screenfade > 0)
|
||||||
|
screenalpha = dc_screenfade << V_ALPHASHIFT;
|
||||||
|
|
||||||
|
V_DrawFill(0, 0, BASEVIDWIDTH, BASEVIDHEIGHT, 31|screenalpha);
|
||||||
|
}
|
||||||
|
|
||||||
|
// ================================= STATE LOGIC
|
||||||
|
|
||||||
|
if (!dc_ticking)
|
||||||
|
return;
|
||||||
|
|
||||||
|
// Advance SEGA animation
|
||||||
|
if (dc_state == DISCLAIMER_SHINE || dc_state == DISCLAIMER_FADE || (dc_state == DISCLAIMER_SLIDE && dc_tics%2))
|
||||||
|
dc_segaframe++;
|
||||||
|
|
||||||
|
// Fade BG to black
|
||||||
|
if (dc_state >= DISCLAIMER_SLIDE)
|
||||||
|
{
|
||||||
|
if (dc_bgcol < 31)
|
||||||
|
dc_bgcol++;
|
||||||
|
else
|
||||||
|
dc_bgcol = 31;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Fade out blue SEGA overlay
|
||||||
|
if (dc_state == DISCLAIMER_SLIDE)
|
||||||
|
{
|
||||||
|
if (dc_bluesegafade < 10 && !(dc_tics%2))
|
||||||
|
dc_bluesegafade++;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Fade in text
|
||||||
|
if (dc_state == DISCLAIMER_FINAL)
|
||||||
|
{
|
||||||
|
if (dc_textfade > 0 && !(dc_tics%3))
|
||||||
|
dc_textfade--;
|
||||||
|
|
||||||
|
if (dc_subtextfade > 5 && !(dc_tics%6))
|
||||||
|
dc_subtextfade--;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Fade out screen
|
||||||
|
if (dc_state == DISCLAIMER_OUT)
|
||||||
|
{
|
||||||
|
if (dc_screenfade > 0 && !(dc_tics%10))
|
||||||
|
dc_screenfade--;
|
||||||
|
}
|
||||||
|
|
||||||
|
// ================================= STATE TRANSITIONS
|
||||||
|
|
||||||
|
dc_tics++;
|
||||||
|
|
||||||
|
if (dc_state == DISCLAIMER_SHINE && dc_segaframe == 18) // End of shine
|
||||||
|
F_DisclaimerAdvanceState();
|
||||||
|
|
||||||
|
if (dc_state == DISCLAIMER_WHITEHOLD && dc_tics == 15)
|
||||||
|
F_DisclaimerAdvanceState();
|
||||||
|
|
||||||
|
if (dc_state == DISCLAIMER_FADE && dc_segaframe == 23) // Solid blue SEGA
|
||||||
|
{
|
||||||
|
F_DisclaimerAdvanceState();
|
||||||
|
Music_Play("lawyer");
|
||||||
|
}
|
||||||
|
|
||||||
|
if (dc_state == DISCLAIMER_SOUNDHOLD && dc_tics == TICRATE*2-5)
|
||||||
|
F_DisclaimerAdvanceState();
|
||||||
|
|
||||||
|
if (dc_state == DISCLAIMER_SLIDE && dc_segaframe == 37) // End of animation
|
||||||
|
F_DisclaimerAdvanceState();
|
||||||
|
|
||||||
|
if (dc_state == DISCLAIMER_FINAL && dc_tics == TICRATE*5)
|
||||||
|
F_DisclaimerAdvanceState();
|
||||||
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
// F_IntroDrawer
|
// F_IntroDrawer
|
||||||
//
|
//
|
||||||
|
|
@ -453,6 +639,13 @@ void F_IntroDrawer(void)
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (intro_scenenum == INTROSCENE_DISCLAIMER)
|
||||||
|
{
|
||||||
|
F_DisclaimerDrawScene();
|
||||||
|
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
F_IntroDrawScene();
|
F_IntroDrawScene();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -488,6 +681,8 @@ void F_IntroTicker(void)
|
||||||
//F_NewCutscene(introtext[intro_scenenum]);
|
//F_NewCutscene(introtext[intro_scenenum]);
|
||||||
timetonext = introscenetime[intro_scenenum];
|
timetonext = introscenetime[intro_scenenum];
|
||||||
animtimer = stoptimer = 0;
|
animtimer = stoptimer = 0;
|
||||||
|
if (intro_scenenum == INTROSCENE_DISCLAIMER)
|
||||||
|
wipegamestate = -1;
|
||||||
if (intro_scenenum == INTROSCENE_KREW)
|
if (intro_scenenum == INTROSCENE_KREW)
|
||||||
wipegamestate = -1;
|
wipegamestate = -1;
|
||||||
}
|
}
|
||||||
|
|
@ -575,6 +770,12 @@ boolean F_IntroResponder(event_t *event)
|
||||||
if (keypressed)
|
if (keypressed)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
|
if (intro_scenenum <= INTROSCENE_DISCLAIMER)
|
||||||
|
{
|
||||||
|
// do not allow skipping the disclaimer
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
keypressed = true;
|
keypressed = true;
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -203,6 +203,14 @@ void Music_Init(void)
|
||||||
tune.resist = true;
|
tune.resist = true;
|
||||||
tune.credit = true;
|
tune.credit = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
{
|
||||||
|
Tune& tune = g_tunes.insert("lawyer");
|
||||||
|
|
||||||
|
tune.song = "lawyer";
|
||||||
|
tune.priority = 35;
|
||||||
|
tune.loop = false;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void Music_Tick(void)
|
void Music_Tick(void)
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue