diff --git a/source/build/include/baselayer.h b/source/build/include/baselayer.h index dec688c0a..e45646689 100644 --- a/source/build/include/baselayer.h +++ b/source/build/include/baselayer.h @@ -210,6 +210,8 @@ struct GameInterface virtual void CustomMenuSelection(int menu, int item) {} virtual void StartGame(FGameStartup& gs) {} virtual FSavegameInfo GetSaveSig() { return { "", 0, 0}; } + virtual bool DrawSpecialScreen(const DVector2 &origin, int tilenum) { return false; } + virtual void DrawCenteredTextScreen(const DVector2 &origin, const char *text, int position); }; extern GameInterface* gi; diff --git a/source/common/gamecontrol.cpp b/source/common/gamecontrol.cpp index 12981b4c7..29909e7c5 100644 --- a/source/common/gamecontrol.cpp +++ b/source/common/gamecontrol.cpp @@ -38,7 +38,8 @@ bool gHaveNetworking; FString currentGame; FString LumpFilter; - +TMap NameToTileIndex; // for assigning names to tiles. The menu accesses this list. By default it gets everything from the dynamic tile map in Duke Nukem and Redneck Rampage. + // Todo: Add additional definition file for the other games or textures not in that list so that the menu does not have to rely on indices. CVAR(Int, cl_defaultconfiguration, 2, CVAR_ARCHIVE | CVAR_GLOBALCONFIG) diff --git a/source/common/gamecontrol.h b/source/common/gamecontrol.h index 61d3a1068..876c82d54 100644 --- a/source/common/gamecontrol.h +++ b/source/common/gamecontrol.h @@ -7,6 +7,8 @@ #include "zstring.h" #include "inputstate.h" #include "gamecvars.h" +#include "tarray.h" +#include "name.h" EXTERN_CVAR(Int, cl_defaultconfiguration) @@ -14,6 +16,8 @@ extern FString currentGame; extern FString LumpFilter; class FArgs; +extern TMap NameToTileIndex; + void D_AddWildFile(TArray& wadfiles, const char* value); int CONFIG_Init(); diff --git a/source/common/menu/listmenu.cpp b/source/common/menu/listmenu.cpp index b6033dd28..8ec1259e3 100644 --- a/source/common/menu/listmenu.cpp +++ b/source/common/menu/listmenu.cpp @@ -40,6 +40,8 @@ #include "menu.h" #include "v_draw.h" #include "baselayer.h" +#include "gamecontrol.h" +#include "build.h" //============================================================================= // @@ -619,3 +621,34 @@ int FListMenuItemPatch::GetWidth() : 0; } +//============================================================================= +// +// Fullscreen image drawer (move to its own source file!) +// +//============================================================================= + +void ImageScreen::Drawer() +{ + if (mDesc->mType == 0) + { + auto tileindexp = NameToTileIndex.CheckKey(mDesc->mText); + int tileindex; + if (tileindexp == nullptr) + { + // If this isn't a name, try a literal tile index; + auto c = mDesc->mMenuName.GetChars(); + if (*c == '#') tileindex = (int)strtoll(c+1, nullptr, 0); + // Error out if the screen cannot be found, this is always a definition error that needs to be reported. + else I_Error("Invalid menu screen '%s'", mDesc->mMenuName.GetChars()); + } + else tileindex = *tileindexp; + if (!gi->DrawSpecialScreen(origin, tileindex)) // allows the front end to do custom handling for a given image. + { + rotatesprite_fs(int(origin.X * 65536) + (160<<16), int(origin.Y * 65536) + (100<<16), 65536L,0,tileindex,0,0,10+64); + } + } + else + { + gi->DrawCenteredTextScreen(origin, mDesc->mText, mDesc->type); + } +} diff --git a/source/common/menu/menu.cpp b/source/common/menu/menu.cpp index df7a8d36c..3478b1890 100644 --- a/source/common/menu/menu.cpp +++ b/source/common/menu/menu.cpp @@ -53,6 +53,7 @@ #include "build.h" void RegisterDukeMenus(); +void RegisterSpecialMenus(); extern bool rotatesprite_2doverride; bool help_disabled, credits_disabled; int g_currentMenu; // accessible by CON scripts - contains the current menu's script ID if defined or INT_MAX if none given. @@ -872,6 +873,7 @@ void Menu_Close(int playerid) void M_Init (void) { + RegisterSpecialMenus(); RegisterDukeMenus(); timerSetCallback(M_Ticker); M_ParseMenuDefs(); diff --git a/source/common/menu/menu.h b/source/common/menu/menu.h index 6167ecaa4..611ae0ad9 100644 --- a/source/common/menu/menu.h +++ b/source/common/menu/menu.h @@ -141,6 +141,7 @@ enum EMenuDescriptorType { MDESC_ListMenu, MDESC_OptionsMenu, + MDESC_ImageScroller, }; struct FMenuDescriptor @@ -252,7 +253,20 @@ struct FOptionMenuDescriptor : public FMenuDescriptor } }; - + +struct FImageScrollerDescriptor : public FMenuDescriptor +{ + struct ScrollerItem + { + int type; // 0: fullscreen image; 1: centered text + int scriptID; + FString text; + }; + + TArray mItems; +}; + + typedef TMap MenuDescriptorList; @@ -494,11 +508,11 @@ public: DListMenu(DMenu *parent = NULL, FListMenuDescriptor *desc = NULL); virtual void Init(DMenu *parent = NULL, FListMenuDescriptor *desc = NULL); FListMenuItem *GetItem(FName name); - bool Responder (event_t *ev); - bool MenuEvent (int mkey, bool fromcontroller); - bool MouseEvent(int type, int x, int y); - void Ticker (); - void Drawer (); + bool Responder (event_t *ev) override; + bool MenuEvent (int mkey, bool fromcontroller) override; + bool MouseEvent(int type, int x, int y) override; + void Ticker () override; + void Drawer () override; virtual void SelectionChanged() {} void SetFocus(FListMenuItem *fc) { @@ -613,6 +627,33 @@ public: }; +//============================================================================= +// +// ImageScroller +// +//============================================================================= + +class DImageScrollerMenu : public DMenu +{ + +}; + +//============================================================================= +// +// Show a fullscreen image / centered text screen for an image scroller +// +//============================================================================= + +class ImageScreen : public DMenu // Todo: This should be global +{ + const FImageScrollerDescriptor::ScrollerItem *mDesc; + ImageScreen(const FImageScrollerDescriptor::ScrollerItem *it) + { + mDesc = it; + } + void Drawer() override; +}; + //============================================================================= // // Input some text diff --git a/source/common/menu/menudef.cpp b/source/common/menu/menudef.cpp index 2a7ca894c..eef422731 100644 --- a/source/common/menu/menudef.cpp +++ b/source/common/menu/menudef.cpp @@ -142,6 +142,8 @@ struct gamefilter static const gamefilter games[] = { { "Duke", GAMEFLAG_DUKE}, { "Nam", GAMEFLAG_NAM|GAMEFLAG_NAPALM}, + { "NamOnly", GAMEFLAG_NAM}, // for cases where the difference matters. + { "Napalm", GAMEFLAG_NAPALM}, { "WW2GI", GAMEFLAG_WW2GI}, { "Fury", GAMEFLAG_FURY}, { "Redneck", GAMEFLAG_RR}, @@ -150,6 +152,19 @@ static const gamefilter games[] = { { "ShadowWarrior", GAMEFLAG_SW}, }; +// for other parts that need to filter by game name. +bool validFilter(const char *str) +{ + for (auto &gf : games) + { + if (g_gameType & gf.gameflag) + { + if (!stricmp(str, gf.gamename)) return true; + } + } + return false; +} + static bool CheckSkipGameBlock(FScanner &sc) { @@ -542,6 +557,85 @@ static void ParseListMenu(FScanner &sc) // //============================================================================= +static void ParseImageScrollerBody(FScanner &sc, FImageScrollerDescriptor *desc) +{ + sc.MustGetStringName("{"); + while (!sc.CheckString("}")) + { + sc.MustGetString(); + if (sc.Compare("else")) + { + SkipSubBlock(sc); + } + else if (sc.Compare("ifgame")) + { + if (!CheckSkipGameBlock(sc)) + { + // recursively parse sub-block + ParseImageScrollerBody(sc, desc); + } + } + else if (sc.Compare("ifoption")) + { + if (!CheckSkipOptionBlock(sc)) + { + // recursively parse sub-block + ParseImageScrollerBody(sc, desc); + } + } + else if (sc.Compare("TextItem") || sc.Compare("ImageItem")) + { + FImageScrollerDescriptor::ScrollerItem item; + sc.MustGetString(); + item.text = sc.String; + int type = sc.Compare("TextItem"); + if (type) + { + sc.MustGetStringName(","); + sc.MustGetNumber(); + item.type = sc.Number; // y-coordinate + } + item.scriptID = INT_MAX; + if (sc.CheckString(",")) + { + sc.MustGetNumber(); + item.scriptID = sc.Number; + } + desc->mItems.Push(item); + } + else + { + sc.ScriptError("Unknown keyword '%s'", sc.String); + } + } +} + + +//============================================================================= +// +// +// +//============================================================================= + +static void ParseImageScroller(FScanner &sc) +{ + sc.MustGetString(); + + FImageScrollerDescriptor *desc = new FImageScrollerDescriptor; + desc->mType = MDESC_ImageScroller; + desc->mMenuName = sc.String; + + ParseImageScrollerBody(sc, desc); + bool scratch = ReplaceMenu(sc, desc); + if (scratch) delete desc; +} + +//============================================================================= +// +// +// +//============================================================================= + static void ParseOptionValue(FScanner &sc) { FName optname; @@ -948,6 +1042,10 @@ void M_ParseMenuDefs() { ParseListMenu(sc); } + if (sc.Compare("ImageScroller")) + { + ParseImageScroller(sc); + } else if (sc.Compare("DEFAULTLISTMENU")) { ParseListMenuBody(sc, &DefaultListMenuSettings); diff --git a/source/common/utility/namedef.h b/source/common/utility/namedef.h index ad19352e1..dfb6d7eb4 100644 --- a/source/common/utility/namedef.h +++ b/source/common/utility/namedef.h @@ -35,4 +35,5 @@ xx(CustomSubMenu5) xx(CustomSubMenu6) xx(CustomSubMenu7) xx(UsermapMenu) -xx(StartGame) \ No newline at end of file +xx(StartGame) +xx(ImageScroller) diff --git a/source/common/utility/stringtable.cpp b/source/common/utility/stringtable.cpp index 838af71fa..0307b26ac 100644 --- a/source/common/utility/stringtable.cpp +++ b/source/common/utility/stringtable.cpp @@ -43,6 +43,7 @@ #include "c_cvars.h" #include "printf.h" +bool validFilter(const char *str); EXTERN_CVAR(String, language) CUSTOM_CVAR(Int, cl_gender, 0, CVAR_ARCHIVE | CVAR_GLOBALCONFIG) { @@ -239,12 +240,21 @@ bool FStringTable::ParseLanguageCSV(int lumpnum, const TArray &buffer) for (unsigned i = 1; i < data.Size(); i++) { auto &row = data[i]; -#if 0 +#if 1 if (filtercol > -1) { auto filterstr = row[filtercol]; auto filter = filterstr.Split(" ", FString::TOK_SKIPEMPTY); - if (filter.Size() > 0 && filter.FindEx([](const auto &str) { return str.CompareNoCase(GameNames[gameinfo.gametype]) == 0; }) == filter.Size()) + bool ok = false; + for (auto &entry : filter) + { + if (validFilter(entry)) + { + ok = true; + break; + } + } + if (!ok) continue; continue; } #endif diff --git a/source/duke3d/src/d_menu.cpp b/source/duke3d/src/d_menu.cpp index 1341f646b..935b1b152 100644 --- a/source/duke3d/src/d_menu.cpp +++ b/source/duke3d/src/d_menu.cpp @@ -37,6 +37,7 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. #include "menu/menu.h" #include "gstrings.h" #include "version.h" +#include "namesdyn.h" #include "../../glbackend/glbackend.h" BEGIN_DUKE_NS @@ -279,6 +280,14 @@ void GameInterface::DrawNativeMenuText(int fontnum, int state, int xpos, int ypo +//---------------------------------------------------------------------------- +// +// Implements the native looking menu used for the main menu +// and the episode/skill selection screens, i.e. the parts +// that need to look authentic +// +//---------------------------------------------------------------------------- + class DukeListMenu : public DListMenu { using Super = DListMenu; @@ -401,149 +410,11 @@ 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; - } - } -}; +//---------------------------------------------------------------------------- +// +// Menu related game interface functions +// +//---------------------------------------------------------------------------- void GameInterface::MenuOpened() { @@ -638,9 +509,181 @@ FSavegameInfo GameInterface::GetSaveSig() return { SAVESIG_DN3D, MINSAVEVER_DN3D, SAVEVER_DN3D }; } +//---------------------------------------------------------------------------- +// +// +// +//---------------------------------------------------------------------------- + +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); +} + +//---------------------------------------------------------------------------- +// +// allows the front end to override certain fullscreen image menus +// with custom implementations. +// +// This is needed because the credits screens in Duke Nukem +// are eithrr done by providing an image or by printing text, based on the version used. +// +//---------------------------------------------------------------------------- + +bool GameInterface::DrawSpecialScreen(const DVector2 &origin, int tilenum) +{ + // Older versions of Duke Nukem create the credits screens manually. + // On the latest version there's real graphics for this. + bool haveCredits = VOLUMEALL && PLUTOPAK; + + int32_t m, l; + if (!haveCredits) + { + if (tilenum == CREDITSTEXT1) + { + Menu_DrawBackground(origin); + 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; + return true; + } + else if (tilenum == CREDITSTEXT2__STATIC) + { + Menu_DrawBackground(origin); + 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; + return true; + } + else if (tilenum == CREDITSTEXT3) + { + Menu_DrawBackground(origin); + 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"); + return true; + } + } + return false; +} + + +void GameInterface::DrawCenteredTextScreen(const DVector2 &origin, const char *text, int position) +{ + Menu_DrawBackground(origin); + mgametextcenter(int(origin.X * 65536), int((origin.Y + position) * 65536), text); +} + END_DUKE_NS +//---------------------------------------------------------------------------- +// +// Class registration +// +//---------------------------------------------------------------------------- + + static TMenuClassDescriptor _mm("Duke.MainMenu"); static TMenuClassDescriptor _lm("Duke.ListMenu"); static TMenuClassDescriptor _ngcsm("Duke.NewGameCustomSubMenu"); diff --git a/source/duke3d/src/duke3d.h b/source/duke3d/src/duke3d.h index ebf34735c..8cdd71442 100644 --- a/source/duke3d/src/duke3d.h +++ b/source/duke3d/src/duke3d.h @@ -164,6 +164,8 @@ struct GameInterface : ::GameInterface void CustomMenuSelection(int menu, int item) override; void StartGame(FGameStartup& gs) override; FSavegameInfo GetSaveSig() override; + bool DrawSpecialScreen(const DVector2 &origin, int tilenum) override; + void DrawCenteredTextScreen(const DVector2 &origin, const char *text, int position) override; }; diff --git a/source/duke3d/src/gamedef.cpp b/source/duke3d/src/gamedef.cpp index ce83c0d40..62d4b52dd 100644 --- a/source/duke3d/src/gamedef.cpp +++ b/source/duke3d/src/gamedef.cpp @@ -3560,19 +3560,7 @@ DO_DEFSTATE: initprintf("%s:%d: warning: duplicate dynamicremap statement\n",g_scriptFileName,g_lineNumber); g_warningCnt++; } -#ifdef DYNTILEREMAP_ENABLE -#ifdef DEBUGGINGAIDS - else - initprintf("Using dynamic tile remapping\n"); -#endif g_dynamicTileMapping = 1; -#else - else - { - initprintf("%s:%d: warning: dynamic tile remapping is disabled in this build\n",g_scriptFileName,g_lineNumber); - g_warningCnt++; - } -#endif continue; case CON_DYNAMICSOUNDREMAP: diff --git a/source/duke3d/src/menus.cpp b/source/duke3d/src/menus.cpp index fb332a782..0bf1c9322 100644 --- a/source/duke3d/src/menus.cpp +++ b/source/duke3d/src/menus.cpp @@ -1926,35 +1926,6 @@ static void Menu_Pre(MenuID_t cm) } -static void Menu_PreDrawBackground(MenuID_t cm, const vec2_t origin) -{ - switch (cm) - { - case MENU_CREDITS: - case MENU_CREDITS2: - case MENU_CREDITS3: - - case MENU_LOAD: - case MENU_SAVE: - if (FURY) - break; - fallthrough__; - case MENU_CREDITS4: - case MENU_CREDITS5: - Menu_DrawBackground(origin); - break; - - case MENU_STORY: - rotatesprite_fs(origin.x + (MENU_MARGIN_CENTER<<16), origin.y + (100<<16), 65536L,0,TEXTSTORY,0,0,10+64); - break; - - case MENU_F1HELP: - rotatesprite_fs(origin.x + (MENU_MARGIN_CENTER<<16), origin.y + (100<<16), 65536L,0,F1HELP,0,0,10+64); - break; - } -} - - static void Menu_DrawVerifyPrompt(int32_t x, int32_t y, const char * text, int numlines = 1) { mgametextcenter(x, y + (90<<16), text); diff --git a/source/duke3d/src/names.h b/source/duke3d/src/names.h deleted file mode 100644 index 5e1fffec5..000000000 --- a/source/duke3d/src/names.h +++ /dev/null @@ -1,764 +0,0 @@ -//------------------------------------------------------------------------- -/* -Copyright (C) 2010 EDuke32 developers and contributors - -This file is part of EDuke32. - -EDuke32 is free software; you can redistribute it and/or -modify it under the terms of the GNU General Public License version 2 -as published by the Free Software Foundation. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - -See the GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program; if not, write to the Free Software -Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. -*/ -//------------------------------------------------------------------------- - -#define SECTOREFFECTOR 1 -#define ACTIVATOR 2 -#define TOUCHPLATE 3 -#define ACTIVATORLOCKED 4 -#define MUSICANDSFX 5 -#define LOCATORS 6 -#define CYCLER 7 -#define MASTERSWITCH 8 -#define RESPAWN 9 -#define GPSPEED 10 -#define FOF 13 -#define ARROW 20 -#define FIRSTGUNSPRITE 21 -#define CHAINGUNSPRITE 22 -#define RPGSPRITE 23 -#define FREEZESPRITE 24 -#define SHRINKERSPRITE 25 -#define HEAVYHBOMB 26 -#define TRIPBOMBSPRITE 27 -#define SHOTGUNSPRITE 28 -#define DEVISTATORSPRITE 29 -#define HEALTHBOX 30 -#define AMMOBOX 31 -#define GROWSPRITEICON 32 -#define INVENTORYBOX 33 -#define FREEZEAMMO 37 -#define AMMO 40 -#define BATTERYAMMO 41 -#define DEVISTATORAMMO 42 -#define RPGAMMO 44 -#define GROWAMMO 45 -#define CRYSTALAMMO 46 -#define HBOMBAMMO 47 -#define AMMOLOTS 48 -#define SHOTGUNAMMO 49 -#define COLA 51 -#define SIXPAK 52 -#define FIRSTAID 53 -#define SHIELD 54 -#define STEROIDS 55 -#define AIRTANK 56 -#define JETPACK 57 -#define HEATSENSOR 59 -#define ACCESSCARD 60 -#define BOOTS 61 -#define MIRRORBROKE 70 -#define CLOUDYOCEAN 78 -#define CLOUDYSKIES 79 -#define MOONSKY1 80 -#define MOONSKY2 81 -#define MOONSKY3 82 -#define MOONSKY4 83 -#define BIGORBIT1 84 -#define BIGORBIT2 85 -#define BIGORBIT3 86 -#define BIGORBIT4 87 -#define BIGORBIT5 88 -#define LA 89 -#define REDSKY1 98 -#define REDSKY2 99 -#define ATOMICHEALTH 100 -#define TECHLIGHT2 120 -#define TECHLIGHTBUST2 121 -#define TECHLIGHT4 122 -#define TECHLIGHTBUST4 123 -#define WALLLIGHT4 124 -#define WALLLIGHTBUST4 125 -#define ACCESSSWITCH 130 -#define SLOTDOOR 132 -#define LIGHTSWITCH 134 -#define SPACEDOORSWITCH 136 -#define SPACELIGHTSWITCH 138 -#define FRANKENSTINESWITCH 140 -#define NUKEBUTTON 142 -#define MULTISWITCH 146 -#define DOORTILE5 150 -#define DOORTILE6 151 -#define DOORTILE1 152 -#define DOORTILE2 153 -#define DOORTILE3 154 -#define DOORTILE4 155 -#define DOORTILE7 156 -#define DOORTILE8 157 -#define DOORTILE9 158 -#define DOORTILE10 159 -#define DOORSHOCK 160 -#define DIPSWITCH 162 -#define DIPSWITCH2 164 -#define TECHSWITCH 166 -#define DIPSWITCH3 168 -#define ACCESSSWITCH2 170 -#define REFLECTWATERTILE 180 -#define FLOORSLIME 200 -#define BIGFORCE 230 -#define EPISODE 247 -#define MASKWALL9 255 -#define W_LIGHT 260 -#define SCREENBREAK1 263 -#define SCREENBREAK2 264 -#define SCREENBREAK3 265 -#define SCREENBREAK4 266 -#define SCREENBREAK5 267 -#define SCREENBREAK6 268 -#define SCREENBREAK7 269 -#define SCREENBREAK8 270 -#define SCREENBREAK9 271 -#define SCREENBREAK10 272 -#define SCREENBREAK11 273 -#define SCREENBREAK12 274 -#define SCREENBREAK13 275 -#define MASKWALL1 285 -#define W_TECHWALL1 293 -#define W_TECHWALL2 297 -#define W_TECHWALL15 299 -#define W_TECHWALL3 301 -#define W_TECHWALL4 305 -#define W_TECHWALL10 306 -#define W_TECHWALL16 307 -#define WATERTILE2 336 -#define BPANNEL1 341 -#define PANNEL1 342 -#define PANNEL2 343 -#define WATERTILE 344 -#define STATIC 351 -#define W_SCREENBREAK 357 -#define W_HITTECHWALL3 360 -#define W_HITTECHWALL4 361 -#define W_HITTECHWALL2 362 -#define W_HITTECHWALL1 363 -#define MASKWALL10 387 -#define MASKWALL11 391 -#define DOORTILE22 395 -#define FANSPRITE 407 -#define FANSPRITEBROKE 411 -#define FANSHADOW 412 -#define FANSHADOWBROKE 416 -#define DOORTILE18 447 -#define DOORTILE19 448 -#define DOORTILE20 449 -#define SPACESHUTTLE 487 -#define SATELLITE 489 -#define VIEWSCREEN2 499 -#define VIEWSCREENBROKE 501 -#define VIEWSCREEN 502 -#define GLASS 503 -#define GLASS2 504 -#define STAINGLASS1 510 -#define MASKWALL5 514 -#define SATELITE 516 -#define FUELPOD 517 -#define SLIMEPIPE 538 -#define CRACK1 546 -#define CRACK2 547 -#define CRACK3 548 -#define CRACK4 549 -#define FOOTPRINTS 550 -#define DOMELITE 551 -#define CAMERAPOLE 554 -#define CHAIR1 556 -#define CHAIR2 557 -#define BROKENCHAIR 559 -#define MIRROR 560 -#define WATERFOUNTAIN 563 -#define WATERFOUNTAINBROKE 567 -#define FEMMAG1 568 -#define TOILET 569 -#define STALL 571 -#define STALLBROKE 573 -#define FEMMAG2 577 -#define REACTOR2 578 -#define REACTOR2BURNT 579 -#define REACTOR2SPARK 580 -#define GRATE1 595 -#define BGRATE1 596 -#define SOLARPANNEL 602 -#define NAKED1 603 -#define ANTENNA 607 -#define MASKWALL12 609 -#define TOILETBROKE 615 -#define PIPE2 616 -#define PIPE1B 617 -#define PIPE3 618 -#define PIPE1 619 -#define CAMERA1 621 -#define BRICK 626 -#define SPLINTERWOOD 630 -#define PIPE2B 633 -#define BOLT1 634 -#define W_NUMBERS 640 -#define WATERDRIP 660 -#define WATERBUBBLE 661 -#define WATERBUBBLEMAKER 662 -#define W_FORCEFIELD 663 -#define VACUUM 669 -#define FOOTPRINTS2 672 -#define FOOTPRINTS3 673 -#define FOOTPRINTS4 674 -#define EGG 675 -#define SCALE 678 -#define CHAIR3 680 -#define CAMERALIGHT 685 -#define MOVIECAMERA 686 -#define IVUNIT 689 -#define POT1 694 -#define POT2 695 -#define POT3 697 -#define PIPE3B 700 -#define WALLLIGHT3 701 -#define WALLLIGHTBUST3 702 -#define WALLLIGHT1 703 -#define WALLLIGHTBUST1 704 -#define WALLLIGHT2 705 -#define WALLLIGHTBUST2 706 -#define LIGHTSWITCH2 712 -#define WAITTOBESEATED 716 -#define DOORTILE14 717 -#define STATUE 753 -#define MIKE 762 -#define VASE 765 -#define SUSHIPLATE1 768 -#define SUSHIPLATE2 769 -#define SUSHIPLATE3 774 -#define SUSHIPLATE4 779 -#define DOORTILE16 781 -#define SUSHIPLATE5 792 -#define OJ 806 -#define MASKWALL13 830 -#define HURTRAIL 859 -#define POWERSWITCH1 860 -#define LOCKSWITCH1 862 -#define POWERSWITCH2 864 -#define ATM 867 -#define STATUEFLASH 869 -#define ATMBROKE 888 -#define BIGHOLE2 893 -#define STRIPEBALL 901 -#define QUEBALL 902 -#define POCKET 903 -#define WOODENHORSE 904 -#define TREE1 908 -#define TREE2 910 -#define CACTUS 911 -#define MASKWALL2 913 -#define MASKWALL3 914 -#define MASKWALL4 915 -#define FIREEXT 916 -#define TOILETWATER 921 -#define NEON1 925 -#define NEON2 926 -#define CACTUSBROKE 939 -#define BOUNCEMINE 940 -#define BROKEFIREHYDRENT 950 -#define BOX 951 -#define BULLETHOLE 952 -#define BOTTLE1 954 -#define BOTTLE2 955 -#define BOTTLE3 956 -#define BOTTLE4 957 -#define FEMPIC5 963 -#define FEMPIC6 964 -#define FEMPIC7 965 -#define HYDROPLANT 969 -#define OCEANSPRITE1 971 -#define OCEANSPRITE2 972 -#define OCEANSPRITE3 973 -#define OCEANSPRITE4 974 -#define OCEANSPRITE5 975 -#define GENERICPOLE 977 -#define CONE 978 -#define HANGLIGHT 979 -#define HYDRENT 981 -#define MASKWALL14 988 -#define TIRE 990 -#define PIPE5 994 -#define PIPE6 995 -#define PIPE4 996 -#define PIPE4B 997 -#define BROKEHYDROPLANT 1003 -#define PIPE5B 1005 -#define NEON3 1007 -#define NEON4 1008 -#define NEON5 1009 -#define BOTTLE5 1012 -#define BOTTLE6 1013 -#define BOTTLE8 1014 -#define SPOTLITE 1020 -#define HANGOOZ 1022 -#define MASKWALL15 1024 -#define BOTTLE7 1025 -#define HORSEONSIDE 1026 -#define GLASSPIECES 1031 -#define HORSELITE 1034 -#define DONUTS 1045 -#define NEON6 1046 -#define MASKWALL6 1059 -#define CLOCK 1060 -#define RUBBERCAN 1062 -#define BROKENCLOCK 1067 -#define PLUG 1069 -#define OOZFILTER 1079 -#define FLOORPLASMA 1082 -#define REACTOR 1088 -#define REACTORSPARK 1092 -#define REACTORBURNT 1096 -#define DOORTILE15 1102 -#define HANDSWITCH 1111 -#define CIRCLEPANNEL 1113 -#define CIRCLEPANNELBROKE 1114 -#define PULLSWITCH 1122 -#define MASKWALL8 1124 -#define BIGHOLE 1141 -#define ALIENSWITCH 1142 -#define DOORTILE21 1144 -#define HANDPRINTSWITCH 1155 -#define BOTTLE10 1157 -#define BOTTLE11 1158 -#define BOTTLE12 1159 -#define BOTTLE13 1160 -#define BOTTLE14 1161 -#define BOTTLE15 1162 -#define BOTTLE16 1163 -#define BOTTLE17 1164 -#define BOTTLE18 1165 -#define BOTTLE19 1166 -#define DOORTILE17 1169 -#define MASKWALL7 1174 -#define JAILBARBREAK 1175 -#define DOORTILE11 1178 -#define DOORTILE12 1179 -#define VENDMACHINE 1212 -#define VENDMACHINEBROKE 1214 -#define COLAMACHINE 1215 -#define COLAMACHINEBROKE 1217 -#define CRANEPOLE 1221 -#define CRANE 1222 -#define BARBROKE 1225 -#define BLOODPOOL 1226 -#define NUKEBARREL 1227 -#define NUKEBARRELDENTED 1228 -#define NUKEBARRELLEAKED 1229 -#define CANWITHSOMETHING 1232 -#define MONEY 1233 -#define BANNER 1236 -#define EXPLODINGBARREL 1238 -#define EXPLODINGBARREL2 1239 -#define FIREBARREL 1240 -#define SEENINE 1247 -#define SEENINEDEAD 1248 -#define STEAM 1250 -#define CEILINGSTEAM 1255 -#define PIPE6B 1260 -#define TRANSPORTERBEAM 1261 -#define RAT 1267 -#define TRASH 1272 -#define FEMPIC1 1280 -#define FEMPIC2 1289 -#define BLANKSCREEN 1293 -#define PODFEM1 1294 -#define FEMPIC3 1298 -#define FEMPIC4 1306 -#define FEM1 1312 -#define FEM2 1317 -#define FEM3 1321 -#define FEM5 1323 -#define BLOODYPOLE 1324 -#define FEM4 1325 -#define FEM6 1334 -#define FEM6PAD 1335 -#define FEM8 1336 -#define HELECOPT 1346 -#define FETUSJIB 1347 -#define HOLODUKE 1348 -#define SPACEMARINE 1353 -#define INDY 1355 -#define FETUS 1358 -#define FETUSBROKE 1359 -#define MONK 1352 -#define LUKE 1354 -#define COOLEXPLOSION1 1360 -#define WATERSPLASH2 1380 -#define FIREVASE 1390 -#define SCRATCH 1393 -#define FEM7 1395 -#define APLAYERTOP 1400 -#define APLAYER 1405 -#define PLAYERONWATER 1420 -#define DUKELYINGDEAD 1518 -#define DUKETORSO 1520 -#define DUKEGUN 1528 -#define DUKELEG 1536 -#define SHARK 1550 -#define BLOOD 1620 -#define FIRELASER 1625 -#define TRANSPORTERSTAR 1630 -#define SPIT 1636 -#define LOOGIE 1637 -#define FIST 1640 -#define FREEZEBLAST 1641 -#define DEVISTATORBLAST 1642 -#define SHRINKSPARK 1646 -#define TONGUE 1647 -#define MORTER 1650 -#define SHRINKEREXPLOSION 1656 -#define RADIUSEXPLOSION 1670 -#define FORCERIPPLE 1671 -#define LIZTROOP 1680 -#define LIZTROOPRUNNING 1681 -#define LIZTROOPSTAYPUT 1682 -#define LIZTOP 1705 -#define LIZTROOPSHOOT 1715 -#define LIZTROOPJETPACK 1725 -#define LIZTROOPDSPRITE 1734 -#define LIZTROOPONTOILET 1741 -#define LIZTROOPJUSTSIT 1742 -#define LIZTROOPDUCKING 1744 -#define HEADJIB1 1768 -#define ARMJIB1 1772 -#define LEGJIB1 1776 -#define CANNON 1810 -#define CANNONBALL 1817 -#define CANNONBALLS 1818 -#define OCTABRAIN 1820 -#define OCTABRAINSTAYPUT 1821 -#define OCTATOP 1845 -#define OCTADEADSPRITE 1855 -#define INNERJAW 1860 -#define DRONE 1880 -#define EXPLOSION2 1890 -#define COMMANDER 1920 -#define COMMANDERSTAYPUT 1921 -#define RECON 1960 -#define TANK 1975 -#define PIGCOP 2000 -#define PIGCOPSTAYPUT 2001 -#define PIGCOPDIVE 2045 -#define PIGCOPDEADSPRITE 2060 -#define PIGTOP 2061 -#define LIZMAN 2120 -#define LIZMANSTAYPUT 2121 -#define LIZMANSPITTING 2150 -#define LIZMANFEEDING 2160 -#define LIZMANJUMP 2165 -#define LIZMANDEADSPRITE 2185 -#define FECES 2200 -#define LIZMANHEAD1 2201 -#define LIZMANARM1 2205 -#define LIZMANLEG1 2209 -#define EXPLOSION2BOT 2219 -#define USERWEAPON 2235 -#define HEADERBAR 2242 -#define JIBS1 2245 -#define JIBS2 2250 -#define JIBS3 2255 -#define JIBS4 2260 -#define JIBS5 2265 -#define BURNING 2270 -#define FIRE 2271 -#define JIBS6 2286 -#define BLOODSPLAT1 2296 -#define BLOODSPLAT3 2297 -#define BLOODSPLAT2 2298 -#define BLOODSPLAT4 2299 -#define OOZ 2300 -#define OOZ2 2309 -#define WALLBLOOD1 2301 -#define WALLBLOOD2 2302 -#define WALLBLOOD3 2303 -#define WALLBLOOD4 2304 -#define WALLBLOOD5 2305 -#define WALLBLOOD6 2306 -#define WALLBLOOD7 2307 -#define WALLBLOOD8 2308 -#define BURNING2 2310 -#define FIRE2 2311 -#define CRACKKNUCKLES 2324 -#define SMALLSMOKE 2329 -#define SMALLSMOKEMAKER 2330 -#define FLOORFLAME 2333 -#define ROTATEGUN 2360 -#define GREENSLIME 2370 -#define WATERDRIPSPLASH 2380 -#define SCRAP6 2390 -#define SCRAP1 2400 -#define SCRAP2 2404 -#define SCRAP3 2408 -#define SCRAP4 2412 -#define SCRAP5 2416 -#define ORGANTIC 2420 -#define BETAVERSION 2440 -#define PLAYERISHERE 2442 -#define PLAYERWASHERE 2443 -#define SELECTDIR 2444 -#define F1HELP 2445 -#define NOTCHON 2446 -#define NOTCHOFF 2447 -#define GROWSPARK 2448 -#define DUKEICON 2452 -#define BADGUYICON 2453 -#define FOODICON 2454 -#define GETICON 2455 -#define MENUSCREEN 2456 -#define MENUBAR 2457 -#define KILLSICON 2458 -#define FIRSTAID_ICON 2460 -#define HEAT_ICON 2461 -#define BOTTOMSTATUSBAR 2462 -#define BOOT_ICON 2463 -#define FRAGBAR 2465 -#define JETPACK_ICON 2467 -#define AIRTANK_ICON 2468 -#define STEROIDS_ICON 2469 -#define HOLODUKE_ICON 2470 -#define ACCESS_ICON 2471 -#define DIGITALNUM 2472 -#define DUKECAR 2491 -#define CAMCORNER 2482 -#define CAMLIGHT 2484 -#define LOGO 2485 -#define TITLE 2486 -#define NUKEWARNINGICON 2487 -#define MOUSECURSOR 2488 -#define SLIDEBAR 2489 -#define DREALMS 2492 -#define BETASCREEN 2493 -#define WINDOWBORDER1 2494 -#define TEXTBOX 2495 -#define WINDOWBORDER2 2496 -#define DUKENUKEM 2497 -#define THREEDEE 2498 -#define INGAMEDUKETHREEDEE 2499 -#define TENSCREEN 2500 -#define PLUTOPAKSPRITE 2501 -#define DEVISTATOR 2510 -#define KNEE 2521 -#define CROSSHAIR 2523 -#define FIRSTGUN 2524 -#define FIRSTGUNRELOAD 2528 -#define FALLINGCLIP 2530 -#define CLIPINHAND 2531 -#define HAND 2532 -#define SHELL 2533 -#define SHOTGUNSHELL 2535 -#define CHAINGUN 2536 -#define RPGGUN 2544 -#define RPGMUZZLEFLASH 2545 -#define FREEZE 2548 -#define CATLITE 2552 -#define SHRINKER 2556 -#define HANDHOLDINGLASER 2563 -#define TRIPBOMB 2566 -#define LASERLINE 2567 -#define HANDHOLDINGACCESS 2568 -#define HANDREMOTE 2570 -#define HANDTHROW 2573 -#define TIP 2576 -#define GLAIR 2578 -#define SCUBAMASK 2581 -#define SPACEMASK 2584 -#define FORCESPHERE 2590 -#define SHOTSPARK1 2595 -#define RPG 2605 -#define LASERSITE 2612 -#define SHOTGUN 2613 -#define BOSS1 2630 -#define BOSS1STAYPUT 2631 -#define BOSS1SHOOT 2660 -#define BOSS1LOB 2670 -#define BOSSTOP 2696 -#define BOSS2 2710 -#define BOSS3 2760 -#define SPINNINGNUKEICON 2813 -#define BIGFNTCURSOR 2820 -#define SMALLFNTCURSOR 2821 -#define STARTALPHANUM 2822 -#define ENDALPHANUM 2915 -#define BIGALPHANUM 2940 -#define BIGPERIOD 3002 -#define BIGCOMMA 3003 -#define BIGX 3004 -#define BIGQ 3005 -#define BIGSEMI 3006 -#define BIGCOLIN 3007 -#define THREEBYFIVE 3010 -#define BIGAPPOS 3022 -#define BLANK 3026 -#define MINIFONT 3072 -#define BUTTON1 3164 -#define GLASS3 3187 -#define RESPAWNMARKERRED 3190 -#define RESPAWNMARKERYELLOW 3200 -#define RESPAWNMARKERGREEN 3210 -#define BONUSSCREEN 3240 -#define VIEWBORDER 3250 -#define VICTORY1 3260 -#define ORDERING 3270 -#define TEXTSTORY 3280 -#define LOADSCREEN 3281 -#define BORNTOBEWILDSCREEN 3370 -#define BLIMP 3400 -#define FEM9 3450 -#define FOOTPRINT 3701 -#define FRAMEEFFECT1_13 3999 -#define POOP 4094 -#define FRAMEEFFECT1 4095 -#define PANNEL3 4099 -#define SCREENBREAK14 4120 -#define SCREENBREAK15 4123 -#define SCREENBREAK19 4125 -#define SCREENBREAK16 4127 -#define SCREENBREAK17 4128 -#define SCREENBREAK18 4129 -#define W_TECHWALL11 4130 -#define W_TECHWALL12 4131 -#define W_TECHWALL13 4132 -#define W_TECHWALL14 4133 -#define W_TECHWALL5 4134 -#define W_TECHWALL6 4136 -#define W_TECHWALL7 4138 -#define W_TECHWALL8 4140 -#define W_TECHWALL9 4142 -#define BPANNEL3 4100 -#define W_HITTECHWALL16 4144 -#define W_HITTECHWALL10 4145 -#define W_HITTECHWALL15 4147 -#define W_MILKSHELF 4181 -#define W_MILKSHELFBROKE 4203 -#define PURPLELAVA 4240 -#define LAVABUBBLE 4340 -#define DUKECUTOUT 4352 -#define TARGET 4359 -#define GUNPOWDERBARREL 4360 -#define DUCK 4361 -#define HATRACK 4367 -#define DESKLAMP 4370 -#define COFFEEMACHINE 4372 -#define CUPS 4373 -#define GAVALS 4374 -#define GAVALS2 4375 -#define POLICELIGHTPOLE 4377 -#define FLOORBASKET 4388 -#define PUKE 4389 -#define DOORTILE23 4391 -#define TOPSECRET 4396 -#define SPEAKER 4397 -#define TEDDYBEAR 4400 -#define ROBOTDOG 4402 -#define ROBOTPIRATE 4404 -#define ROBOTMOUSE 4407 -#define MAIL 4410 -#define MAILBAG 4413 -#define HOTMEAT 4427 -#define COFFEEMUG 4438 -#define DONUTS2 4440 -#define TRIPODCAMERA 4444 -#define METER 4453 -#define DESKPHONE 4454 -#define GUMBALLMACHINE 4458 -#define GUMBALLMACHINEBROKE 4459 -#define PAPER 4460 -#define MACE 4464 -#define GENERICPOLE2 4465 -#define XXXSTACY 4470 -#define WETFLOOR 4495 -#define BROOM 4496 -#define MOP 4497 -#define LETTER 4502 -#define PIRATE1A 4510 -#define PIRATE4A 4511 -#define PIRATE2A 4512 -#define PIRATE5A 4513 -#define PIRATE3A 4514 -#define PIRATE6A 4515 -#define PIRATEHALF 4516 -#define CHESTOFGOLD 4520 -#define SIDEBOLT1 4525 -#define FOODOBJECT1 4530 -#define FOODOBJECT2 4531 -#define FOODOBJECT3 4532 -#define FOODOBJECT4 4533 -#define FOODOBJECT5 4534 -#define FOODOBJECT6 4535 -#define FOODOBJECT7 4536 -#define FOODOBJECT8 4537 -#define FOODOBJECT9 4538 -#define FOODOBJECT10 4539 -#define FOODOBJECT11 4540 -#define FOODOBJECT12 4541 -#define FOODOBJECT13 4542 -#define FOODOBJECT14 4543 -#define FOODOBJECT15 4544 -#define FOODOBJECT16 4545 -#define FOODOBJECT17 4546 -#define FOODOBJECT18 4547 -#define FOODOBJECT19 4548 -#define FOODOBJECT20 4549 -#define HEADLAMP 4550 -#define TAMPON 4557 -#define SKINNEDCHICKEN 4554 -#define FEATHEREDCHICKEN 4555 -#define ROBOTDOG2 4560 -#define JOLLYMEAL 4569 -#define DUKEBURGER 4570 -#define SHOPPINGCART 4576 -#define CANWITHSOMETHING2 4580 -#define CANWITHSOMETHING3 4581 -#define CANWITHSOMETHING4 4582 -#define SNAKEP 4590 -#define DOLPHIN1 4591 -#define DOLPHIN2 4592 -#define NEWBEAST 4610 -#define NEWBEASTSTAYPUT 4611 -#define NEWBEASTJUMP 4690 -#define NEWBEASTHANG 4670 -#define NEWBEASTHANGDEAD 4671 -#define BOSS4 4740 -#define BOSS4STAYPUT 4741 -#define FEM10 4864 -#define TOUGHGAL 4866 -#define MAN 4871 -#define MAN2 4872 -#define WOMAN 4874 -#define PLEASEWAIT 4887 -#define NATURALLIGHTNING 4890 -#define WEATHERWARN 4893 -#define DUKETAG 4900 -#define SIGN1 4909 -#define SIGN2 4912 -#define JURYGUY 4943 - -// These tile positions are reserved! -#define RESERVEDSLOT1 6132 -#define RESERVEDSLOT2 6133 -#define RESERVEDSLOT3 6134 -#define RESERVEDSLOT4 6135 -#define RESERVEDSLOT5 6136 -#define RESERVEDSLOT6 6137 -#define RESERVEDSLOT7 6138 -#define RESERVEDSLOT8 6139 -#define RESERVEDSLOT9 6140 -#define RESERVEDSLOT10 6141 -#define RESERVEDSLOT11 6142 -#define RESERVEDSLOT12 6143 diff --git a/source/duke3d/src/namesdyn.cpp b/source/duke3d/src/namesdyn.cpp index ac381ca07..d4b8fb520 100644 --- a/source/duke3d/src/namesdyn.cpp +++ b/source/duke3d/src/namesdyn.cpp @@ -27,14 +27,11 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. #include "namesdyn.h" #include "global.h" +#include "gamecontrol.h" BEGIN_DUKE_NS -#ifdef DYNTILEREMAP_ENABLE # define DVPTR(x) &x -#else -# define DVPTR(x) NULL -#endif int16_t DynamicTileMap[MAXTILES]; @@ -170,6 +167,9 @@ LUNATIC_EXTERN struct dynitem g_dynTileList[] = { "CRACKKNUCKLES", DVPTR(CRACKKNUCKLES), CRACKKNUCKLES__STATIC }, { "CRANE", DVPTR(CRANE), CRANE__STATIC }, { "CRANEPOLE", DVPTR(CRANEPOLE), CRANEPOLE__STATIC }, + { "CREDITSTEXT1", DVPTR(CREDITSTEXT1), CREDITSTEXT1__STATIC }, + { "CREDITSTEXT2", DVPTR(CREDITSTEXT2), CREDITSTEXT2__STATIC }, + { "CREDITSTEXT3", DVPTR(CREDITSTEXT3), CREDITSTEXT3__STATIC }, { "CROSSHAIR", DVPTR(CROSSHAIR), CROSSHAIR__STATIC }, { "CRYSTALAMMO", DVPTR(CRYSTALAMMO), CRYSTALAMMO__STATIC }, { "CYCLER", DVPTR(CYCLER), CYCLER__STATIC }, @@ -642,7 +642,7 @@ LUNATIC_EXTERN struct dynitem g_dynTileList[] = { "XXXSTACY", DVPTR(XXXSTACY), XXXSTACY__STATIC }, }; -#ifdef DYNTILEREMAP_ENABLE + int32_t ACCESS_ICON = ACCESS_ICON__STATIC; int32_t ACCESSCARD = ACCESSCARD__STATIC; int32_t ACCESSSWITCH = ACCESSSWITCH__STATIC; @@ -766,6 +766,9 @@ int32_t CRACK4 = CRACK4__STATIC; int32_t CRACKKNUCKLES = CRACKKNUCKLES__STATIC; int32_t CRANE = CRANE__STATIC; int32_t CRANEPOLE = CRANEPOLE__STATIC; +int32_t CREDITSTEXT1 = CREDITSTEXT1__STATIC; +int32_t CREDITSTEXT2 = CREDITSTEXT2__STATIC; +int32_t CREDITSTEXT3 = CREDITSTEXT3__STATIC; int32_t CROSSHAIR = CROSSHAIR__STATIC; int32_t CRYSTALAMMO = CRYSTALAMMO__STATIC; int32_t CYCLER = CYCLER__STATIC; @@ -1237,7 +1240,6 @@ int32_t WOMAN = WOMAN__STATIC; int32_t WOODENHORSE = WOODENHORSE__STATIC; int32_t XXXSTACY = XXXSTACY__STATIC; -#if !defined LUNATIC static hashtable_t h_names = {512, NULL}; void G_ProcessDynamicTileMapping(const char *szLabel, int32_t lValue) @@ -1250,10 +1252,6 @@ void G_ProcessDynamicTileMapping(const char *szLabel, int32_t lValue) if (i>=0) { struct dynitem *di = &g_dynTileList[i]; -#ifdef DEBUGGINGAIDS - if (g_scriptDebug && di->staticval != lValue) - OSD_Printf("REMAP %s (%d) --> %d\n", di->str, di->staticval, lValue); -#endif *di->dynvalptr = lValue; } } @@ -1270,8 +1268,6 @@ void freehashnames(void) { hash_free(&h_names); } -#endif -#endif // This is run after all CON define's have been processed to set up the // dynamic->static tile mapping. @@ -1280,11 +1276,10 @@ void G_InitDynamicTiles(void) Bmemset(DynamicTileMap, 0, sizeof(DynamicTileMap)); for (auto & i : g_dynTileList) -#ifdef DYNTILEREMAP_ENABLE + { DynamicTileMap[*(i.dynvalptr)] = i.staticval; -#else - DynamicTileMap[i.staticval] = i.staticval; -#endif + NameToTileIndex.Insert(i.str, *(i.dynvalptr)); + } g_blimpSpawnItems[0] = RPGSPRITE; g_blimpSpawnItems[1] = CHAINGUNSPRITE; @@ -1314,10 +1309,5 @@ void G_InitDynamicTiles(void) WeaponPickupSprites[9] = FREEZESPRITE; WeaponPickupSprites[10] = HEAVYHBOMB; WeaponPickupSprites[11] = SHRINKERSPRITE; - - // ouch... the big background image takes up a fuckload of memory and takes a second to load! -#ifdef EDUKE32_GLES - MENUSCREEN = LOADSCREEN = BETASCREEN; -#endif } END_DUKE_NS diff --git a/source/duke3d/src/namesdyn.h b/source/duke3d/src/namesdyn.h index c87b2e06a..6b5dcfe24 100644 --- a/source/duke3d/src/namesdyn.h +++ b/source/duke3d/src/namesdyn.h @@ -26,9 +26,6 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. BEGIN_DUKE_NS -#define DYNTILEREMAP_ENABLE - - #define SECTOREFFECTOR__STATIC 1 #define ACTIVATOR__STATIC 2 #define TOUCHPLATE__STATIC 3 @@ -505,6 +502,9 @@ BEGIN_DUKE_NS #define INGAMEDUKETHREEDEE__STATIC 2499 #define TENSCREEN__STATIC 2500 #define PLUTOPAKSPRITE__STATIC 2501 +#define CREDITSTEXT1__STATIC 2504 +#define CREDITSTEXT2__STATIC 2505 +#define CREDITSTEXT3__STATIC 2506 #define DEVISTATOR__STATIC 2510 #define KNEE__STATIC 2521 #define CROSSHAIR__STATIC 2523 @@ -627,8 +627,6 @@ extern int16_t DynamicTileMap[MAXTILES]; void G_InitDynamicTiles(void); -#ifdef DYNTILEREMAP_ENABLE - void G_ProcessDynamicTileMapping(const char *szLabel, int32_t lValue); #if !defined LUNATIC @@ -759,6 +757,9 @@ extern int32_t CRACK4; extern int32_t CRACKKNUCKLES; extern int32_t CRANE; extern int32_t CRANEPOLE; +extern int32_t CREDITSTEXT1; +extern int32_t CREDITSTEXT2; +extern int32_t CREDITSTEXT3; extern int32_t CROSSHAIR; extern int32_t CRYSTALAMMO; extern int32_t CYCLER; @@ -1232,22 +1233,6 @@ extern int32_t XXXSTACY; #define DYNAMICTILEMAP(Tilenum) (DynamicTileMap[Tilenum]) -#else /* if !defined DYNTILEREMAP_ENABLE */ - -#define G_ProcessDynamicTileMapping(x, y) ((void)(0)) - -#define inithashnames() ((void)0) -#define freehashnames() ((void)0) - -#include "names.h" -#undef SPACESHUTTLE -#undef CANNON -#undef CANNONBALLS - -#define DYNAMICTILEMAP(Tilenum) (Tilenum) - -#endif - END_DUKE_NS #endif // namesdyn_h__ diff --git a/source/rr/src/namesdyn.cpp b/source/rr/src/namesdyn.cpp index 4a3ee6a87..99bea9a07 100644 --- a/source/rr/src/namesdyn.cpp +++ b/source/rr/src/namesdyn.cpp @@ -26,6 +26,7 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. #include "namesdyn.h" #include "global.h" +#include "gamecontrol.h" BEGIN_RR_NS @@ -2965,6 +2966,7 @@ void G_InitDynamicTiles(void) *(g_dynTileList[i].dynvalptr) = -g_dynTileList[i].staticval_rr; if (RRRA && *(g_dynTileList[i].dynvalptr) == -UFO1__STATICRR) *(g_dynTileList[i].dynvalptr) = -UFO1__STATICRRRA; DynamicTileMap[*(g_dynTileList[i].dynvalptr)] = g_dynTileList[i].staticval_rr; + NameToTileIndex.Insert(g_dynTileList[i].str, *(g_dynTileList[i].dynvalptr)); } for (i = 0; g_dynWeaponList[i].staticval >= 0; i++) *(g_dynWeaponList[i].dynvalptr) = g_dynWeaponList[i].staticval_rr; @@ -2974,7 +2976,10 @@ void G_InitDynamicTiles(void) for (i=0; g_dynTileList[i].staticval >= 0; i++) if (g_dynTileList[i].staticval > 0) + { DynamicTileMap[*(g_dynTileList[i].dynvalptr)] = g_dynTileList[i].staticval; + NameToTileIndex.Insert(g_dynTileList[i].str, *(g_dynTileList[i].dynvalptr)); + } for (i=0; g_dynWeaponList[i].staticval >= 0; i++) DynamicWeaponMap[*(g_dynWeaponList[i].dynvalptr)] = g_dynWeaponList[i].staticval; diff --git a/wadsrc/static/demolition/menudef.txt b/wadsrc/static/demolition/menudef.txt index 3fc40df5a..d8f9c80eb 100644 --- a/wadsrc/static/demolition/menudef.txt +++ b/wadsrc/static/demolition/menudef.txt @@ -1,13 +1,13 @@ //------------------------------------------------------------------------------------------- // -// +// Main Memu // //------------------------------------------------------------------------------------------- LISTMENU "MainMenu" { ScriptId 0 - ifgame(Duke, Nam, WW2GI, Fury) + ifgame(Duke, Nam, WW2GI, Fury, Redneck, RedneckRides) { ifgame(fury) { @@ -20,7 +20,14 @@ LISTMENU "MainMenu" centermenu animatedtransition } - class "Duke.MainMenu" + ifgame(Duke, Nam, WW2GI, Fury) + { + class "Duke.ListMenu" + } + else + { + class "Redneck.ListMenu" + } NativeTextItem "$MNU_NEWGAME", "n", "EpisodeMenu" //NativeTextItem "$MNU_NEWGAME", "m", "MultiMenu" // In EDuke this replaces "New Game" when in networking mode. Kept here as a reminder (I'm not going to support EDuke's C/S implementation) ifgame(fury) @@ -36,16 +43,6 @@ LISTMENU "MainMenu" NativeTextItem "$MNU_CREDITS", "c", "CreditsMenu" NativeTextItem "$MNU_QUITGAME", "q", "QuitMenu" } - ifgame(Redneck, RedneckRides) - { - NativeTextItem "$MNU_NEWGAME", "n", "EpisodeMenu" - //NativeTextItem "$MNU_NEWGAME", "m", "MultiMenu" // In EDuke this replaces "New Game" when in networking mode. Kept here as a reminder (I'm not going to support EDuke's C/S implementation) - NativeTextItem "$MNU_LOADGAME", "l", "LoadGameMenu" - NativeTextItem "$MNU_OPTIONS", "o", "OptionsMenu" - NativeTextItem "$MNU_HELP", "h", "HelpMenu" - NativeTextItem "$MNU_CREDITS", "c", "CreditsMenu" - NativeTextItem "$MNU_QUITGAME", "q", "QuitMenu" - } ifgame(Blood) { NativeTextItem "$MNU_NEWGAME", "n", "EpisodeMenu" @@ -67,6 +64,11 @@ LISTMENU "MainMenu" } } +//------------------------------------------------------------------------------------------- +// +// Ingame Memu (same as above with a few more options) +// +//------------------------------------------------------------------------------------------- LISTMENU "IngameMenu" { @@ -84,19 +86,14 @@ LISTMENU "IngameMenu" centermenu animatedtransition } - linespacing 15 - class "Duke.MainMenu" - NativeTextItem "$MNU_NEWGAME", "n", "EpisodeMenu" - NativeTextItem "$MNU_SAVEGAME", "s", "SaveGameMenu" - NativeTextItem "$MNU_LOADGAME", "l", "LoadGameMenu" - NativeTextItem "$MNU_OPTIONS", "o", "OptionsMenu" - NativeTextItem "$MNU_HELP", "h", "HelpMenu" - NativeTextItem "$MNU_ENDGAME", "e", "QuitToMenu" - NativeTextItem "$MNU_QUITGAME", "q", "QuitMenu" - } - ifgame(Redneck, RedneckRides) - { - linespacing 15 + ifgame(Duke, Nam, WW2GI, Fury) + { + class "Duke.ListMenu" + } + else + { + class "Redneck.ListMenu" + } NativeTextItem "$MNU_NEWGAME", "n", "EpisodeMenu" NativeTextItem "$MNU_SAVEGAME", "s", "SaveGameMenu" NativeTextItem "$MNU_LOADGAME", "l", "LoadGameMenu" @@ -128,24 +125,36 @@ LISTMENU "IngameMenu" } } +//------------------------------------------------------------------------------------------- +// +// Episode and skill menu are filled in programmatically +// +//------------------------------------------------------------------------------------------- + LISTMENU "EpisodeMenu" { - ifgame(Duke, Nam, WW2GI, Fury) // Ion Fury does not use this menu. + ifgame(Duke, Nam, WW2GI, Fury, Redneck, RedneckRides) // Ion Fury does not use this menu. { caption "$MNU_SELECTEPISODE" position 160, 48, 142 centermenu fixedspacing 5 animatedtransition - class "Duke.ListMenu" + ifgame(Duke, Nam, WW2GI, Fury) + { + class "Duke.ListMenu" + } + else + { + class "Redneck.ListMenu" + } } - ScriptId 100 } LISTMENU "SkillMenu" { - ifgame(Duke, Nam, WW2GI, Fury) // Ion Fury does not use this menu. + ifgame(Duke, Nam, WW2GI, Fury, Redneck, RedneckRides) { ifgame(fury) { @@ -160,13 +169,25 @@ LISTMENU "SkillMenu" } caption "$MNU_SELECTSKILL" fixedspacing 5 - class "Duke.ListMenu" + ifgame(Duke, Nam, WW2GI, Fury) + { + class "Duke.ListMenu" + } + else + { + class "Redneck.ListMenu" + } animatedtransition } ScriptId 110 } +//------------------------------------------------------------------------------------------- +// // The custom menus are only supported by the EDuke32 frontend. +// +//------------------------------------------------------------------------------------------- + LISTMENU "CustomGameMenu" { caption "$MNU_NEWGAME" @@ -305,14 +326,27 @@ LISTMENU "CustomSubMenu7" class "Duke.ListMenu" } +//------------------------------------------------------------------------------------------- +// +// No multiplayer support for now, but kept as a reminder. +// +//------------------------------------------------------------------------------------------- + LISTMENU "MultiMenu" { - ifgame(Duke, Nam, WW2GI, Fury) // Ion Fury does not use this menu. + ifgame(Duke, Nam, WW2GI, Fury) { position 160, 55, 135 centermenu fixedspacing 5 - class "Duke.ListMenu" + ifgame(Duke, Nam, WW2GI, Fury) + { + class "Duke.ListMenu" + } + else + { + class "Redneck.ListMenu" + } animatedtransition } @@ -321,3 +355,106 @@ LISTMENU "MultiMenu" NativeTextItem "$MNU_JOINGAME", "j", "JoinGameMenu" NativeTextItem "$MNU_HOSTGAME", "h", "HostGameMenu" } + +//------------------------------------------------------------------------------------------- +// +// +// +//------------------------------------------------------------------------------------------- + +ImageScroller "HelpMenu" +{ + ifgame(Duke, Nam, WW2GI, Fury) + { + ImageItem "TEXTSTORY", 400 + ImageItem "F1HELP", 401 + } + ifgame(Redneck, RedneckRides) + { + ImageItem "TEXTSTORY" + ImageItem "F1HELP" + ImageItem "RRTILE1636" + } +} + +//------------------------------------------------------------------------------------------- +// +// Credits menu. This is logically highly game specific. +// Note that this has been split into two submenus so that the engine +// credits can be handled in a generic fashion instead of having to define +// them for each game natively. +// +// Engine credits are now in the options menu, i.e. the generic part of the menu. +// +//------------------------------------------------------------------------------------------- + +ImageScroller "CreditsMenu" +{ + ifgame(Duke, Nam, WW2GI, Fury) + { + ImageItem "CREDITSTEXT1", 990 + ImageItem "CREDITSTEXT2", 991 + ImageItem "CREDITSTEXT3", 992 + } + ifgame(Redneck) + { + // no point putting this into the string table. + TextItem "ORIGINAL CONCEPT, DESIGN AND DIRECTION\n\nDREW MARKHAM", 80 + TextItem "PRODUCED BY\n\nGREG GOODRICH", 80 + TextItem "GAME PROGRAMMING\n\nRAFAEL PAIZ", 80 + TextItem "ART DIRECTORS\n\nCLAIRE PRADERIE MAXX KAUFMAN ", 80 + TextItem "LEAD LEVEL DESIGNER\nALEX MAYBERRY\n\nLEVEL DESIGN\nMAL BLACKWELL\nSVERRE KVERNMO", 80 + TextItem "SENIOR ANIMATOR AND ARTIST\n\nJASON HOOVER", 80 + TextItem "TECHNICAL DIRECTOR\n\nBARRY DEMPSEY", 80 + TextItem "MOTION CAPTURE SPECIALIST AND\nCHARACTER ANIMATION\nAMIT DORON\n\nA.I. PROGRAMMING\nARTHUR DONAVAN\n\nADDITIONAL ANIMATION\nGEORGE KARL", 60 + TextItem "CHARACTER DESIGN\nCORKY LEHMKUHL\n\nMAP PAINTERS\n"VIKTOR ANTONOV\nMATTHIAS BEEGUER\nSTEPHAN BURLE\n\nSCULPTORS\nGEORGE ENGEL\nJAKE GARBER\nJEFF HIMMEL", 50 + TextItem "CHARACTER VOICES\n\nLEONARD\nBURTON GILLIAM\n\nBUBBA, BILLY RAY, SKINNY OL' COOT\nAND THE TURD MINION\nDREW MARKHAM\n\nSHERIFF LESTER T. HOBBES\nMOJO NIXON\n\nALIEN VIXEN\nPEGGY JO JACOBS", 40 + TextItem "SOUND DESIGN\nGARY BRADFIELD\n\nMUSIC\nMOJO NIXON\nTHE BEAT FARMERS\nTHE REVEREND HORTON HEAT\nCEMENT POND\n\nADDITIONAL SOUND EFFECTS\nJIM SPURGIN", 50 + TextItem "MOTION CAPTURE ACTOR\nJ.P. MANOUX\n\nMOTION CAPTURE VIXEN\nSHAWN WOLFE", 80 + TextItem "PRODUCTION ASSISTANCE\nMINERVA MAYBERRY\n\nNUTS AND BOLTS\nSTEVE GOLDBERG\nMARCUS HUTCHINSON\n\nBEAN COUNTING\nMAX YOSHIKAWA\n\nADMINISTRATIVE ASSISTANCE\nSERAFIN LEWIS", 50 + TextItem "LOCATION MANAGER, LOUISIANA\nRICK SKINNER\n\nLOCATION SCOUT, LOUISIANA\nBRIAN BENOS\n\nPHOTOGRAPHER\nCARLOS SERRAO", 70 + TextItem "ADDITIONAL 3D MODELING BY\n3 NAME 3D\nVIEWPOINT DATALABS INTERNATIONAL\n\nAUDIO RECORDED AT\nPACIFIC OCEAN POST, SANTA MONICA, C.A.\n\nCEMENT POND TRACKS RECORDED AT\nDREAMSTATE RECORDING, BURBANK, C.A.\n\nRECORDING ENGINEER\nDAVE AHLERT", 50 + TextItem "3D BUILD ENGINE LICENSED FROM\n3D REALMS ENTERTAINMENT\n\nBUILD ENGINE AND RELATED TOOLS\nCREATED BY KEN SILVERMAN", 80 + TextItem "FOR INTERPLAY\n\nLEAD TESTER\nDARRELL JONES\n\nTESTERS\nTIM ANDERSON\nERICK LUJAN\nTIEN TRAN", 60 + TextItem "IS TECHS\nBILL DELK\nAARON MEYERS\n\nCOMPATIBILITY TECHS\nMARC DURAN\nDAN FORSYTH\nDEREK GIBBS\nAARON OLAIZ\nJACK PARKER", 60 + TextItem "DIRECTOR OF COMPATIBILITY\nPHUONG NGUYEN\n\nASSISTANT QA DIRECTOR\nCOLIN TOTMAN\n\nQA DIRECTOR\nCHAD ALLISON", 70 + TextItem "INTERPLAY PRODUCER\nBILL DUGAN\n\nINTERPLAY LINE PRODUCER\nCHRIS BENSON\n\nPRODUCT MANAGER\nJIM VEEVAERT\n\nPUBLIC RELATIONS\nERIKA PRICE", 50 + TextItem "SPECIAL THANKS\n\nJIM GAUER\nPAUL VAIS\nSCOTT MILLER\nTODD REPLOGLE\nCHUCK BUECHE\nCARTER LIPSCOMB\nJOHN CONLEY\nDON MAGGI", 60 + TextItem "EXTRA SPECIAL THANKS\n\nBRIAN FARGO", 80 + TextItem "REDNECK RAMPAGE\n(c) 1997 XATRIX ENTERTAINMENT, INC.\n\nREDNECK RAMPAGE IS A TRADEMARK OF\nINTERPLAY PRODUCTIONS", 60 + } + ifgame(RedneckRides) + { + TextItem "ORIGINAL CONCEPT, DESIGN AND DIRECTION\n\nDREW MARKHAM", 80 + TextItem "ART DIRECTION AND ADDITIONAL DESIGN\n\nCORKY LEHMKUHL", 80 + TextItem "PRODUCED BY\n\nGREG GOODRICH", 80 + TextItem "GAME PROGRAMMING\n\nJOSEPH AURILI", 80 + TextItem "ORIGINAL GAME PROGRAMMING\n\nRAFAEL PAIZ", 80 + TextItem "LEVEL DESIGN\n\nRHETT BALDWIN & AARON BARBER", 80 + TextItem "ORIGINAL ART DIRECTION AND SUPPORT\n\nMAXX KAUFMAN & CLAIRE PRADERIE-MARKHAM", 80 + TextItem "COMPUTER GRAPHICS SUPERVISOR &\nCHARACTER ANIMATION DIRECTION\n\nBARRY DEMPSEY", 80 + TextItem "SENIOR ANIMATOR & MODELER\n\nJASON HOOVER", 80 + TextItem "CHARACTER ANIMATION &\nMOTION CAPTURE SPECIALIST\n\nAMIT DORON", 80 + TextItem "SOUND DESIGN &\nMUSIC PRODUCTION COORDINATION\n\nGARY BRADFIELD", 80 + TextItem "INTRODUCTION ANIMATION\n\nDOMINIQUE DROZDZ", 80 + TextItem "ARTIST\n\nMATTHIAS BEEGUER", 80 + TextItem "ADDITIONAL ART\n\nVIKTOR ANTONOV", 80 + TextItem "PRODUCTION COORDINATOR\n\nVICTORIA SYLVESTER", 80 + TextItem "CHARACTER VOICES\n\nLEONARD\nBURTON GILLIAM\n\nDAISY MAE\nTARA CHARENDOFF\n\nBUBBA, BILLY RAY, SKINNY OL' COOT,\nFRANK THE BIKER, THE TURD MINION\n& ALL OTHER VARIOUS RAMBLINGS...\nDREW MARKHAM", 40 + TextItem "SPECIAL APPEARENCE BY\n\nSHERIFF LESTER T. HOBBES\nMOJO NIXON\n\nALIEN VIXEN\nPEGGY JO JACOBS", 70 + TextItem "REDNECK RAMPAGE TITLE TRACK & CYBERSEX\nWRITTEN & PERFORMED BY\nMOJO NIXON\n\n(c) MUFFIN'STUFFIN' MUSIC (BMI)\nADMINISTERED BY BUG.", 70 + TextItem "MUSIC\n\nDISGRACELAND\nTINY D & THE SOFA KINGS\n\nBANJO AND GUITAR PICKIN\nJOHN SCHLOCKER\nHOWARD YEARWOOD", 60 + TextItem "RECORDING ENGINEER\nDAVE AHLERT\n\nRECORDING ASSISTANCE\nJEFF GILBERT", 80 + TextItem "MOTION CAPTURE ACTOR\nJ.P. MANOUX\n\nMOTION CAPTURE ACTRESS\nSHAWN WOLFE", 80 + TextItem "THIS GAME COULD NOT HAVE BEEN MADE WITHOUT\nALEX MAYBERRY\nMAL BLACKWELL\n\nNUTS AND BOLTS\nSTEVE GOLDBERG\n\nBEAN COUNTING\nMAX YOSHIKAWA\n\nADMINISTRATIVE ASSISTANCE\nMINERVA MAYBERRY", 50 + TextItem "FOR INTERPLAY\n\nPRODUCER\nBILL DUGAN\n\nLINE PRODUCER\nCHRIS BENSON\n\nLEAD TESTER\nDARRELL JONES", 60 + TextItem "TESTERS\n\nTIM ANDERSON\nPRIMO PULANCO\nMARK MCCARTY\nBRIAN AXLINE", 70 + TextItem "PRODUCTION BABY\n\nPAULINE MARIE MARKHAM", 80 + TextItem "ORIGINAL PRODUCTION BABY\n\nALYSON KAUFMAN", 80 + TextItem "3D BUILD ENGINE LICENSED FROM\n3D REALMS ENTERTAINMENT\n\nBUILD ENGINE AND RELATED TOOLS\nCREATED BY KEN SILVERMAN", 80 + TextItem "SPECIAL THANKS\n\nSCOTT MILLER\nGEORGE BROUSSARD", 80 + TextItem "EXTRA SPECIAL THANKS\n\nBRIAN FARGO", 80 + TextItem "REDNECK RAMPAGE RIDES AGAIN\n(c) 1998 XATRIX ENTERTAINMENT, INC.\n\nREDNECK RAMPAGE RIDES AGAIN\nIS A TRADEMARK OF\nINTERPLAY PRODUCTIONS", 70 + } +} +