From ef3ad690dab8ca8613b53190f85c804c92cd289e Mon Sep 17 00:00:00 2001 From: Christoph Oelckers Date: Thu, 28 Nov 2019 00:02:36 +0100 Subject: [PATCH] - initial work on credits screens. --- source/duke3d/src/d_menu.cpp | 157 +++++++++++++++++++++++++++++++++++ source/duke3d/src/menus.cpp | 150 --------------------------------- 2 files changed, 157 insertions(+), 150 deletions(-) diff --git a/source/duke3d/src/d_menu.cpp b/source/duke3d/src/d_menu.cpp index 310b6743c..1341f646b 100644 --- a/source/duke3d/src/d_menu.cpp +++ b/source/duke3d/src/d_menu.cpp @@ -132,6 +132,11 @@ void Menu_Init(void) #endif } +static void Menu_DrawBackground(const DVector2 &origin) +{ + rotatesprite_fs(int(origin.X * 65536) + (MENU_MARGIN_CENTER << 16), int(origin.Y * 65536) + (100 << 16), 65536L, 0, MENUSCREEN, 16, 0, 10 + 64); +} + static void Menu_DrawTopBar(const DVector2 &origin) { if ((G_GetLogoFlags() & LOGO_NOTITLEBAR) == 0) @@ -196,6 +201,15 @@ static vec2_t Menu_Text(int32_t x, int32_t y, const MenuFont_t* font, const char return G_ScreenText(font->tilenum, x, y, z, 0, 0, t, s, p, 2 | 8 | 16 | ROTATESPRITE_FULL16, 0, font->emptychar.x, font->emptychar.y, font->between.x, ybetween, f, 0, ydim_upper, xdim - 1, ydim_lower); } +static vec2_t mgametextcenterat(int32_t x, int32_t y, char const* t, int32_t f = 0) +{ + return G_ScreenText(MF_Bluefont.tilenum, x, y, MF_Bluefont.zoom, 0, 0, t, 0, MF_Bluefont.pal, 2 | 8 | 16 | ROTATESPRITE_FULL16, 0, MF_Bluefont.emptychar.x, MF_Bluefont.emptychar.y, MF_Bluefont.between.x, MF_Bluefont.between.y, MF_Bluefont.textflags | f | TEXT_XCENTER, 0, 0, xdim - 1, ydim - 1); +} +static vec2_t mgametextcenter(int32_t x, int32_t y, char const* t, int32_t f = 0) +{ + return mgametextcenterat((MENU_MARGIN_CENTER << 16) + x, y, t, f); +} + static int32_t Menu_CursorShade(void) { return VM_OnEventWithReturn(EVENT_MENUCURSORSHADE, -1, myconnectindex, 4 - (sintable[((int32_t)totalclock << 4) & 2047] >> 11)); @@ -387,6 +401,149 @@ class MainMenu : public DukeListMenu } }; +class DukeCreditScreen : public DMenu +{ + int screen; + + void shadowminitext(int32_t x, int32_t y, const char* t, int32_t p) + { + int32_t f = 0; + + if (!minitext_lowercase) + f |= TEXT_UPPERCASE; + + G_ScreenTextShadow(1, 1, MINIFONT, x, y, 65536, 0, 0, t, 0, p, 2 | 8 | 16 | ROTATESPRITE_FULL16, 0, 4 << 16, 8 << 16, 1 << 16, 0, f, 0, 0, xdim - 1, ydim - 1); + } + + + void Drawer() + { + if (VOLUMEALL && PLUTOPAK) + { + rotatesprite_fs(int(origin.X * 65536) + (MENU_MARGIN_CENTER << 16), int(origin.Y * 65536) + (100 << 16), 65536L, 0, 2504 + screen, 0, 0, 10 + 64); + return; + } + Menu_DrawBackground(origin); + + // On the latest version there's real graphics for this. + int32_t m, l; + switch (screen) + { + case 0: + m = int(origin.X * 65536) + (20 << 16); + l = int(origin.Y * 65536) + (33 << 16); + + shadowminitext(m, l, "Original Concept", 12); l += 7 << 16; + shadowminitext(m, l, "Todd Replogle and Allen H. Blum III", 12); l += 7 << 16; + l += 3 << 16; + shadowminitext(m, l, "Produced & Directed By", 12); l += 7 << 16; + shadowminitext(m, l, "Greg Malone", 12); l += 7 << 16; + l += 3 << 16; + shadowminitext(m, l, "Executive Producer", 12); l += 7 << 16; + shadowminitext(m, l, "George Broussard", 12); l += 7 << 16; + l += 3 << 16; + shadowminitext(m, l, "BUILD Engine", 12); l += 7 << 16; + shadowminitext(m, l, "Ken Silverman", 12); l += 7 << 16; + l += 3 << 16; + shadowminitext(m, l, "Game Programming", 12); l += 7 << 16; + shadowminitext(m, l, "Todd Replogle", 12); l += 7 << 16; + l += 3 << 16; + shadowminitext(m, l, "3D Engine/Tools/Net", 12); l += 7 << 16; + shadowminitext(m, l, "Ken Silverman", 12); l += 7 << 16; + l += 3 << 16; + shadowminitext(m, l, "Network Layer/Setup Program", 12); l += 7 << 16; + shadowminitext(m, l, "Mark Dochtermann", 12); l += 7 << 16; + l += 3 << 16; + shadowminitext(m, l, "Map Design", 12); l += 7 << 16; + shadowminitext(m, l, "Allen H. Blum III", 12); l += 7 << 16; + shadowminitext(m, l, "Richard Gray", 12); l += 7 << 16; + + m = int(origin.X * 65536) + (180 << 16); + l = int(origin.Y * 65536) + (33 << 16); + + shadowminitext(m, l, "3D Modeling", 12); l += 7 << 16; + shadowminitext(m, l, "Chuck Jones", 12); l += 7 << 16; + shadowminitext(m, l, "Sapphire Corporation", 12); l += 7 << 16; + l += 3 << 16; + shadowminitext(m, l, "Artwork", 12); l += 7 << 16; + shadowminitext(m, l, "Dirk Jones, Stephen Hornback", 12); l += 7 << 16; + shadowminitext(m, l, "James Storey, David Demaret", 12); l += 7 << 16; + shadowminitext(m, l, "Douglas R. Wood", 12); l += 7 << 16; + l += 3 << 16; + shadowminitext(m, l, "Sound Engine", 12); l += 7 << 16; + shadowminitext(m, l, "Jim Dose", 12); l += 7 << 16; + l += 3 << 16; + shadowminitext(m, l, "Sound & Music Development", 12); l += 7 << 16; + shadowminitext(m, l, "Robert Prince", 12); l += 7 << 16; + shadowminitext(m, l, "Lee Jackson", 12); l += 7 << 16; + l += 3 << 16; + shadowminitext(m, l, "Voice Talent", 12); l += 7 << 16; + shadowminitext(m, l, "Lani Minella - Voice Producer", 12); l += 7 << 16; + shadowminitext(m, l, "Jon St. John as \"Duke Nukem\"", 12); l += 7 << 16; + l += 3 << 16; + shadowminitext(m, l, "Graphic Design", 12); l += 7 << 16; + shadowminitext(m, l, "Packaging, Manual, Ads", 12); l += 7 << 16; + shadowminitext(m, l, "Robert M. Atkins", 12); l += 7 << 16; + shadowminitext(m, l, "Michael Hadwin", 12); l += 7 << 16; + break; + + case 1: + m = int(origin.X * 65536) + (20 << 16); + l = int(origin.Y * 65536) + (33 << 16); + + shadowminitext(m, l, "Special Thanks To", 12); l += 7 << 16; + shadowminitext(m, l, "Steven Blackburn, Tom Hall", 12); l += 7 << 16; + shadowminitext(m, l, "Scott Miller, Joe Siegler", 12); l += 7 << 16; + shadowminitext(m, l, "Terry Nagy, Colleen Compton", 12); l += 7 << 16; + shadowminitext(m, l, "HASH, Inc., FormGen, Inc.", 12); l += 7 << 16; + l += 3 << 16; + shadowminitext(m, l, "The 3D Realms Beta Testers", 12); l += 7 << 16; + l += 3 << 16; + shadowminitext(m, l, "Nathan Anderson, Wayne Benner", 12); l += 7 << 16; + shadowminitext(m, l, "Glenn Brensinger, Rob Brown", 12); l += 7 << 16; + shadowminitext(m, l, "Erik Harris, Ken Heckbert", 12); l += 7 << 16; + shadowminitext(m, l, "Terry Herrin, Greg Hively", 12); l += 7 << 16; + shadowminitext(m, l, "Hank Leukart, Eric Baker", 12); l += 7 << 16; + shadowminitext(m, l, "Jeff Rausch, Kelly Rogers", 12); l += 7 << 16; + shadowminitext(m, l, "Mike Duncan, Doug Howell", 12); l += 7 << 16; + shadowminitext(m, l, "Bill Blair", 12); l += 7 << 16; + + m = int(origin.X * 65536) + (160 << 16); + l = int(origin.Y * 65536) + (33 << 16); + + shadowminitext(m, l, "Company Product Support", 12); l += 7 << 16; + l += 3 << 16; + shadowminitext(m, l, "The following companies were cool", 12); l += 7 << 16; + shadowminitext(m, l, "enough to give us lots of stuff", 12); l += 7 << 16; + shadowminitext(m, l, "during the making of Duke Nukem 3D.", 12); l += 7 << 16; + l += 3 << 16; + shadowminitext(m, l, "Altec Lansing Multimedia", 12); l += 7 << 16; + shadowminitext(m, l, "for tons of speakers and the", 12); l += 7 << 16; + shadowminitext(m, l, "THX-licensed sound system.", 12); l += 7 << 16; + shadowminitext(m, l, "For info call 1-800-548-0620", 12); l += 7 << 16; + l += 3 << 16; + shadowminitext(m, l, "Creative Labs, Inc.", 12); l += 7 << 16; + l += 3 << 16; + shadowminitext(m, l, "Thanks for the hardware, guys.", 12); l += 7 << 16; + break; + + case 2: + mgametextcenter(int(origin.X * 65536), int(origin.Y * 65536) + (50 << 16), "Duke Nukem 3D is a trademark of\n" + "3D Realms Entertainment" + "\n" + "Duke Nukem 3D\n" + "(C) 1996 3D Realms Entertainment"); + + if (VOLUMEONE) + { + mgametextcenter(int(origin.X * 65536), int(origin.Y * 65536) + (106 << 16), "Please read LICENSE.DOC for shareware\n" + "distribution grants and restrictions."); + } + mgametextcenter(int(origin.X * 65536), int(origin.Y * 65536) + ((VOLUMEONE ? 134 : 115) << 16), "Made in Dallas, Texas USA"); + break; + } + } +}; void GameInterface::MenuOpened() { diff --git a/source/duke3d/src/menus.cpp b/source/duke3d/src/menus.cpp index 840a304ca..fb332a782 100644 --- a/source/duke3d/src/menus.cpp +++ b/source/duke3d/src/menus.cpp @@ -75,28 +75,11 @@ static void mgametext(int32_t x, int32_t y, char const * t) G_ScreenText(MF_Bluefont.tilenum, x, y, MF_Bluefont.zoom, 0, 0, t, 0, MF_Bluefont.pal, 2|8|16|ROTATESPRITE_FULL16, 0, MF_Bluefont.emptychar.x, MF_Bluefont.emptychar.y, MF_Bluefont.between.x, MF_Bluefont.between.y, MF_Bluefont.textflags, 0, 0, xdim-1, ydim-1); } -static vec2_t mgametextcenterat(int32_t x, int32_t y, char const * t, int32_t f = 0) -{ - return G_ScreenText(MF_Bluefont.tilenum, x, y, MF_Bluefont.zoom, 0, 0, t, 0, MF_Bluefont.pal, 2|8|16|ROTATESPRITE_FULL16, 0, MF_Bluefont.emptychar.x, MF_Bluefont.emptychar.y, MF_Bluefont.between.x, MF_Bluefont.between.y, MF_Bluefont.textflags|f|TEXT_XCENTER, 0, 0, xdim-1, ydim-1); -} -static vec2_t mgametextcenter(int32_t x, int32_t y, char const * t, int32_t f = 0) -{ - return mgametextcenterat((MENU_MARGIN_CENTER<<16) + x, y, t, f); -} #define mminitext(x,y,t,p) minitext_(x, y, t, 0, p, 2|8|16|ROTATESPRITE_FULL16) #define mmenutext menutext #ifndef EDUKE32_STANDALONE -static void shadowminitext(int32_t x, int32_t y, const char *t, int32_t p) -{ - int32_t f = 0; - - if (!minitext_lowercase) - f |= TEXT_UPPERCASE; - - G_ScreenTextShadow(1, 1, MINIFONT, x, y, 65536, 0, 0, t, 0, p, 2|8|16|ROTATESPRITE_FULL16, 0, 4<<16, 8<<16, 1<<16, 0, f, 0, 0, xdim-1, ydim-1); -} #endif static void creditsminitext(int32_t x, int32_t y, const char *t, int32_t p) { @@ -112,11 +95,6 @@ static void creditsminitext(int32_t x, int32_t y, const char *t, int32_t p) static savehead_t savehead; #pragma pack(pop) -static void Menu_DrawBackground(const vec2_t origin) -{ - rotatesprite_fs(origin.x + (MENU_MARGIN_CENTER<<16), origin.y + (100<<16), 65536L,0,MENUSCREEN,16,0,10+64); -} - static void Menu_DrawTopBar(const vec2_t origin) { if ((G_GetLogoFlags() & LOGO_NOTITLEBAR) == 0) @@ -1955,11 +1933,6 @@ static void Menu_PreDrawBackground(MenuID_t cm, const vec2_t origin) case MENU_CREDITS: case MENU_CREDITS2: case MENU_CREDITS3: - if (!VOLUMEALL || !PLUTOPAK) - Menu_DrawBackground(origin); - else - rotatesprite_fs(origin.x + (MENU_MARGIN_CENTER<<16), origin.y + (100<<16), 65536L,0,2504+cm-MENU_CREDITS,0,0,10+64); - break; case MENU_LOAD: case MENU_SAVE: @@ -2304,129 +2277,6 @@ static void Menu_PreDraw(MenuID_t cm, MenuEntry_t *entry, const vec2_t origin) mgametextcenter(origin.x, origin.y + ((148+16)<<16), "Press any key or button..."); break; #endif - case MENU_CREDITS: - case MENU_CREDITS2: - case MENU_CREDITS3: -#ifndef EDUKE32_STANDALONE - if (!VOLUMEALL || !PLUTOPAK) - { - int32_t m; - switch (cm) - { - case MENU_CREDITS: - m = origin.x + (20<<16); - l = origin.y + (33<<16); - - shadowminitext(m, l, "Original Concept", 12); l += 7<<16; - shadowminitext(m, l, "Todd Replogle and Allen H. Blum III", 12); l += 7<<16; - l += 3<<16; - shadowminitext(m, l, "Produced & Directed By", 12); l += 7<<16; - shadowminitext(m, l, "Greg Malone", 12); l += 7<<16; - l += 3<<16; - shadowminitext(m, l, "Executive Producer", 12); l += 7<<16; - shadowminitext(m, l, "George Broussard", 12); l += 7<<16; - l += 3<<16; - shadowminitext(m, l, "BUILD Engine", 12); l += 7<<16; - shadowminitext(m, l, "Ken Silverman", 12); l += 7<<16; - l += 3<<16; - shadowminitext(m, l, "Game Programming", 12); l += 7<<16; - shadowminitext(m, l, "Todd Replogle", 12); l += 7<<16; - l += 3<<16; - shadowminitext(m, l, "3D Engine/Tools/Net", 12); l += 7<<16; - shadowminitext(m, l, "Ken Silverman", 12); l += 7<<16; - l += 3<<16; - shadowminitext(m, l, "Network Layer/Setup Program", 12); l += 7<<16; - shadowminitext(m, l, "Mark Dochtermann", 12); l += 7<<16; - l += 3<<16; - shadowminitext(m, l, "Map Design", 12); l += 7<<16; - shadowminitext(m, l, "Allen H. Blum III", 12); l += 7<<16; - shadowminitext(m, l, "Richard Gray", 12); l += 7<<16; - - m = origin.x + (180<<16); - l = origin.y + (33<<16); - - shadowminitext(m, l, "3D Modeling", 12); l += 7<<16; - shadowminitext(m, l, "Chuck Jones", 12); l += 7<<16; - shadowminitext(m, l, "Sapphire Corporation", 12); l += 7<<16; - l += 3<<16; - shadowminitext(m, l, "Artwork", 12); l += 7<<16; - shadowminitext(m, l, "Dirk Jones, Stephen Hornback", 12); l += 7<<16; - shadowminitext(m, l, "James Storey, David Demaret", 12); l += 7<<16; - shadowminitext(m, l, "Douglas R. Wood", 12); l += 7<<16; - l += 3<<16; - shadowminitext(m, l, "Sound Engine", 12); l += 7<<16; - shadowminitext(m, l, "Jim Dose", 12); l += 7<<16; - l += 3<<16; - shadowminitext(m, l, "Sound & Music Development", 12); l += 7<<16; - shadowminitext(m, l, "Robert Prince", 12); l += 7<<16; - shadowminitext(m, l, "Lee Jackson", 12); l += 7<<16; - l += 3<<16; - shadowminitext(m, l, "Voice Talent", 12); l += 7<<16; - shadowminitext(m, l, "Lani Minella - Voice Producer", 12); l += 7<<16; - shadowminitext(m, l, "Jon St. John as \"Duke Nukem\"", 12); l += 7<<16; - l += 3<<16; - shadowminitext(m, l, "Graphic Design", 12); l += 7<<16; - shadowminitext(m, l, "Packaging, Manual, Ads", 12); l += 7<<16; - shadowminitext(m, l, "Robert M. Atkins", 12); l += 7<<16; - shadowminitext(m, l, "Michael Hadwin", 12); l += 7<<16; - break; - - case MENU_CREDITS2: - m = origin.x + (20<<16); - l = origin.y + (33<<16); - - shadowminitext(m, l, "Special Thanks To", 12); l += 7<<16; - shadowminitext(m, l, "Steven Blackburn, Tom Hall", 12); l += 7<<16; - shadowminitext(m, l, "Scott Miller, Joe Siegler", 12); l += 7<<16; - shadowminitext(m, l, "Terry Nagy, Colleen Compton", 12); l += 7<<16; - shadowminitext(m, l, "HASH, Inc., FormGen, Inc.", 12); l += 7<<16; - l += 3<<16; - shadowminitext(m, l, "The 3D Realms Beta Testers", 12); l += 7<<16; - l += 3<<16; - shadowminitext(m, l, "Nathan Anderson, Wayne Benner", 12); l += 7<<16; - shadowminitext(m, l, "Glenn Brensinger, Rob Brown", 12); l += 7<<16; - shadowminitext(m, l, "Erik Harris, Ken Heckbert", 12); l += 7<<16; - shadowminitext(m, l, "Terry Herrin, Greg Hively", 12); l += 7<<16; - shadowminitext(m, l, "Hank Leukart, Eric Baker", 12); l += 7<<16; - shadowminitext(m, l, "Jeff Rausch, Kelly Rogers", 12); l += 7<<16; - shadowminitext(m, l, "Mike Duncan, Doug Howell", 12); l += 7<<16; - shadowminitext(m, l, "Bill Blair", 12); l += 7<<16; - - m = origin.x + (160<<16); - l = origin.y + (33<<16); - - shadowminitext(m, l, "Company Product Support", 12); l += 7<<16; - l += 3<<16; - shadowminitext(m, l, "The following companies were cool", 12); l += 7<<16; - shadowminitext(m, l, "enough to give us lots of stuff", 12); l += 7<<16; - shadowminitext(m, l, "during the making of Duke Nukem 3D.", 12); l += 7<<16; - l += 3<<16; - shadowminitext(m, l, "Altec Lansing Multimedia", 12); l += 7<<16; - shadowminitext(m, l, "for tons of speakers and the", 12); l += 7<<16; - shadowminitext(m, l, "THX-licensed sound system.", 12); l += 7<<16; - shadowminitext(m, l, "For info call 1-800-548-0620", 12); l += 7<<16; - l += 3<<16; - shadowminitext(m, l, "Creative Labs, Inc.", 12); l += 7<<16; - l += 3<<16; - shadowminitext(m, l, "Thanks for the hardware, guys.", 12); l += 7<<16; - break; - - case MENU_CREDITS3: - mgametextcenter(origin.x, origin.y + (50<<16), "Duke Nukem 3D is a trademark of\n" - "3D Realms Entertainment" - "\n" - "Duke Nukem 3D\n" - "(C) 1996 3D Realms Entertainment"); - -#if !defined(EDUKE32_ANDROID_MENU) && !defined(EDUKE32_STANDALONE) - if (VOLUMEONE) - { - mgametextcenter(origin.x, origin.y + (106<<16), "Please read LICENSE.DOC for shareware\n" - "distribution grants and restrictions."); - } -#endif - mgametextcenter(origin.x, origin.y + ((VOLUMEONE?134:115)<<16), "Made in Dallas, Texas USA"); - break; } } break;