nuclide/src/menu-fn/m_intro.qc

89 lines
2.2 KiB
Plaintext

/*
* Copyright (c) 2016-2022 Vera Visions LLC.
*
* Permission to use, copy, modify, and distribute this software for any
* purpose with or without fee is hereby granted, provided that the above
* copyright notice and this permission notice appear in all copies.
*
* THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
* WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
* MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
* ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
* WHATSOEVER RESULTING FROM LOSS OF MIND, USE, DATA OR PROFITS, WHETHER
* IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING
* OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
*/
enum
{
INTRO_START,
INTRO_FADETOWHITE,
INTRO_FADETOMENU,
INTRO_DONE
};
#define INTRO_TIME 8
var float g_intro_progress = 0.0f;
int g_intro_stage;
void
m_intro_skip(void)
{
g_intro_progress = INTRO_TIME;
g_intro_stage = INTRO_DONE;
}
void
m_intro_draw(void)
{
float alpha;
if (clientstate() == 2) {
g_intro_progress = INTRO_TIME;
g_intro_stage = INTRO_DONE;
}
if (g_intro_progress > 7.0f) {
alpha = (8 - g_intro_progress);
drawfill([0,0], [g_vidsize[0],g_vidsize[1]], [1,1,1], alpha);
if (g_intro_stage != INTRO_FADETOMENU) {
g_intro_stage = INTRO_FADETOMENU;
}
} else if (g_intro_progress > 5.0f) {
alpha = (6 - g_intro_progress);
drawpic([g_menuofs[0],g_menuofs[1]], g_bmp[SPLASH8BIT],
[640,480], [1,1,1], 1.0f, 0);
drawfill([0,0], [g_vidsize[0],g_vidsize[1]], [1,1,1], 1.0 - alpha);
if (g_intro_stage != INTRO_FADETOWHITE) {
localcmd("play debris/beamstart5.wav\n");
localcmd("menu_musicloop 3\n");
g_intro_stage = INTRO_FADETOWHITE;
}
} else {
drawpic([g_menuofs[0],g_menuofs[1]], g_bmp[SPLASH8BIT],
[640,480], [1,1,1], 1.0f);
}
if (g_intro_progress < 2.0f) {
drawfill([0,0], [g_vidsize[0],g_vidsize[1]], [0,0,0], 2-g_intro_progress);
}
g_intro_progress += frametime;
}
void
m_intro_input(float evtype, float scanx, float chary, float devid)
{
if (evtype == IE_KEYDOWN) {
if (scanx == K_ESCAPE) {
m_intro_skip();
} else if (scanx == K_ENTER) {
m_intro_skip();
} else if (scanx == K_SPACE) {
m_intro_skip();
}
}
}