From 39775651a0e6c2620d203f6a5e055cb0c5acfbb6 Mon Sep 17 00:00:00 2001 From: Carl Kenner Date: Mon, 3 Jun 2019 14:03:05 +0930 Subject: [PATCH] Add Doom 1 Episode 5: SIGIL by John Romero I also had to add support for MIDI files in WADs. DOOM 3 BFG Edition is NOT a limit-removing port, so this episode may be broken in some places. --- .gitignore | 1 + README.txt | 8 +- doomclassic/doom/constructs.h | 20 +++- doomclassic/doom/d_englsh.h | 20 ++++ doomclassic/doom/d_player.h | 2 +- doomclassic/doom/doomdef.h | 4 +- doomclassic/doom/doomlib.cpp | 5 +- doomclassic/doom/f_finale.cpp | 9 ++ doomclassic/doom/g_game.cpp | 15 ++- doomclassic/doom/i_sound_win32.cpp | 10 +- doomclassic/doom/i_system.cpp | 2 +- doomclassic/doom/m_menu.cpp | 6 + doomclassic/doom/s_sound.cpp | 15 ++- doomclassic/doom/sounds.h | 11 ++ doomclassic/doom/st_stuff.cpp | 4 +- doomclassic/doom/structs.h | 1 + doomclassic/doom/vars.h | 2 +- doomclassic/doom/w_wad.cpp | 31 ++++- doomclassic/doom/wi_stuff.cpp | 4 + vr_assets/Fully Possessed/wads/SIGIL.txt | 140 +++++++++++++++++++++++ 20 files changed, 286 insertions(+), 24 deletions(-) create mode 100644 vr_assets/Fully Possessed/wads/SIGIL.txt diff --git a/.gitignore b/.gitignore index dbfdddbf3..fce22d223 100644 --- a/.gitignore +++ b/.gitignore @@ -43,3 +43,4 @@ msvc* Doom3BFGVR_Alpha020.exe Doom3BFGVR_Fully_Possessed_Alpha020.exe PrivateStuff/ +/vr_assets/Fully Possessed/wads/SIGIL.wad diff --git a/README.txt b/README.txt index 1fc4b014a..eece3e1f4 100644 --- a/README.txt +++ b/README.txt @@ -2477,15 +2477,17 @@ __________________________________________________________ 9. Extract the FFmpeg DLLs to your current build directory (eg. Release) under DOOM-3-BFG-VR/build/ -10. Copy the Fully Possessed folder from Doom3-BFG-VR\vr_assets\ to your DOOM 3 BFG Edition folder. +10. (NEW) Download SIGIL from https://www.romerogames.ie/si6il and extract SIGIL.WAD to Doom3-BFG-VR\vr_assets\wads -11. (OPTIONAL) If Doom 3 BFG wasn't installed from Steam or GOG, set the path in Visual Studio. +11. Copy the Fully Possessed folder from Doom3-BFG-VR\vr_assets\ to your DOOM 3 BFG Edition folder. + +12. (OPTIONAL) If Doom 3 BFG wasn't installed from Steam or GOG, set the path in Visual Studio. Right click project Doom3BFGVR, click Properties. Set Configuration to All Configurations. Choose Debugging, set Command Arguments to: +set fs_basepath "C:\Program Files (x86)\Steam\steamapps\common\DOOM 3 BFG Edition" or wherever you installed Doom 3 BFG edition -12. To create the installer, download and install NSIS. Build the release version in visual +13. To create the installer, download and install NSIS. Build the release version in visual studio. Right click on the installer.nsi file and choose Compile NSIS Script. __________________________________ diff --git a/doomclassic/doom/constructs.h b/doomclassic/doom/constructs.h index 109f8fe42..4103e2008 100644 --- a/doomclassic/doom/constructs.h +++ b/doomclassic/doom/constructs.h @@ -149,11 +149,12 @@ menu_t temp_MainDef = { memcpy( &::g->MainDef, &temp_MainDef, sizeof(temp_MainDef) ); -menuitem_t temp_EpisodeMenu[4] = { +menuitem_t temp_EpisodeMenu[5] = { {1,"M_EPI1", M_Episode,'k'}, {1,"M_EPI2", M_Episode,'t'}, {1,"M_EPI3", M_Episode,'i'}, - {1,"M_EPI4", M_Episode,'t'} + {1,"M_EPI4", M_Episode,'t'}, + {1,"M_EPI5", M_Episode,'s'} }; memcpy( ::g->EpisodeMenu, temp_EpisodeMenu, sizeof(temp_EpisodeMenu) ); menu_t temp_EpiDef = { @@ -416,7 +417,7 @@ memcpy( ::g->fuzzoffset, temp_fuzzoffset, sizeof(temp_fuzzoffset) ); ::g->validcount = 1; // r_main.constructs end // // sounds.constructs begin // -musicinfo_t temp_S_music[80] = { +musicinfo_t temp_S_music[90] = { { 0 }, { "e1m1", 0 }, { "e1m2", 0 }, @@ -484,7 +485,18 @@ musicinfo_t temp_S_music[80] = { { "ultima", 0 }, { "read_m", 0 }, { "dm2ttl", 0 }, - { "dm2int", 0 } + { "dm2int", 0 }, + { "e5m1", 0 }, + { "e5m2", 0 }, + { "e5m3", 0 }, + { "e5m4", 0 }, + { "e5m5", 0 }, + { "e5m6", 0 }, + { "e5m7", 0 }, + { "e5m8", 0 }, + { "e5m9", 0 }, + { "intro5", 0 }, + { "inter5", 0 } }; memcpy( ::g->S_music, temp_S_music, sizeof(temp_S_music) ); // sounds.constructs end // diff --git a/doomclassic/doom/d_englsh.h b/doomclassic/doom/d_englsh.h index 0f1f5c49e..e5ce7a4a8 100644 --- a/doomclassic/doom/d_englsh.h +++ b/doomclassic/doom/d_englsh.h @@ -186,6 +186,17 @@ If you have questions concerning this license or the applicable additional terms #define HUSTR_E4M8 "E4M8: Unto The Cruel" #define HUSTR_E4M9 "E4M9: Fear" +#define HUSTR_EPI5 = "SIGIL"; +#define HUSTR_E5M1 = "E5M1: Baphomet's Demesne"; +#define HUSTR_E5M2 = "E5M2: Sheol"; +#define HUSTR_E5M3 = "E5M3: Cages of the Damned"; +#define HUSTR_E5M4 = "E5M4: Paths of Wretchedness"; +#define HUSTR_E5M5 = "E5M5: Abaddon's Void"; +#define HUSTR_E5M6 = "E5M6: Unspeakable Persecution"; +#define HUSTR_E5M7 = "E5M7: Nightmare Underworld"; +#define HUSTR_E5M8 = "E5M8: Halls of Perdition"; +#define HUSTR_E5M9 = "E5M9: Realm of Iblis"; + #define HUSTR_1 "level 1: entryway" #define HUSTR_2 "level 2: underhalls" #define HUSTR_3 "level 3: the gantlet" @@ -440,6 +451,15 @@ If you have questions concerning this license or the applicable additional terms "\n"\ "next stop, hell on earth!" +#define E5TEXT \ +"Baphomet was only doing Satan's bidding\n"\ +"by bringing you back to Hell. Somehow they\n"\ +"didn't understand that you're the reason\n"\ +"they failed in the first place.\n\n"\ +"After mopping up the place with your\n"\ +"arsenal, you're ready to face the more\n"\ +"advanced demons that were sent to Earth.\n\n"\ +"Lock and load. Rip and tear."; // after level 6, put this: diff --git a/doomclassic/doom/d_player.h b/doomclassic/doom/d_player.h index ded41ea46..c65ef7e55 100644 --- a/doomclassic/doom/d_player.h +++ b/doomclassic/doom/d_player.h @@ -199,7 +199,7 @@ typedef struct typedef struct { - int epsd; // episode # (0-2) + int epsd; // episode # (0-4) // if true, splash the secret level qboolean didsecret; diff --git a/doomclassic/doom/doomdef.h b/doomclassic/doom/doomdef.h index 787c6ed6a..5a1f2d7eb 100644 --- a/doomclassic/doom/doomdef.h +++ b/doomclassic/doom/doomdef.h @@ -49,7 +49,7 @@ typedef enum registered, // DOOM 1 registered, E3, M27 commercial, // DOOM 2 retail, E1 M34 // DOOM 2 german edition not handled - retail, // DOOM 1 retail, E4, M36 + retail, // DOOM 1 retail with SIGIL, E5, M45 indetermined // Well, no IWAD found. } GameMode_t; @@ -64,7 +64,7 @@ typedef enum pack_plut, // Plutonia pack pack_master, // Master levels pack_nerve, // Nerve levels - + pack_sigil, // SIGIL (John Romero) levels none } GameMission_t; diff --git a/doomclassic/doom/doomlib.cpp b/doomclassic/doom/doomlib.cpp index 741509396..44b637241 100644 --- a/doomclassic/doom/doomlib.cpp +++ b/doomclassic/doom/doomlib.cpp @@ -74,7 +74,8 @@ namespace DoomLib "E1M1: Hangar", "E1M2: Nuclear Plant", "E1M3: Toxin Refinery", "E1M4: Command Control", "E1M5: Phobos Lab", "E1M6: Central Processing", "E1M7: Computer Station", "E1M8: Phobos Anomaly", "E1M9: Military Base", "E2M1: Deimos Anomaly", "E2M2: Containment Area", "E2M3: Refinery", "E2M4: Deimos Lab", "E2M5: Command Center", "E2M6: Halls of the Damned", "E2M7: Spawning Vats", "E2M8: Tower of Babel", "E2M9: Fortress of Mystery", "E3M1: Hell Keep", "E3M2: Slough of Despair", "E3M3: Pandemonium", "E3M4: House of Pain", "E3M5: Unholy Cathedral", "E3M6: MT. Erebus", "E3M7: Gate to Limbo", "E3M8: DIS", "E3M9: Warrens", - "E4M1: Hell Beneath", "E4M2: Perfect Hatred", "E4M3: Sever The Wicked", "E4M4: Unruly Evil", "E4M5: They Will Repent", "E4M6: Against Thee Wickedly", "E4M7: And Hell Followed", "E4M8: Unto The Cruel", "E4M9: Fear" + "E4M1: Hell Beneath", "E4M2: Perfect Hatred", "E4M3: Sever The Wicked", "E4M4: Unruly Evil", "E4M5: They Will Repent", "E4M6: Against Thee Wickedly", "E4M7: And Hell Followed", "E4M8: Unto The Cruel", "E4M9: Fear", + "E5M1: Baphomet's Demesne", "E5M2: Sheol", "E5M3: Cages of the Damned", "E5M4: Paths of Wretchedness", "E5M5: Abaddon's Void", "E5M6: Unspeakable Persecution", "E5M7: Nightmare Underworld", "E5M8: Halls of Perdition", "E5M9: Realm of Iblis" }; static const char * Doom2_MapNames[] = { @@ -106,7 +107,7 @@ namespace DoomLib }; const ExpansionData App_Expansion_Data_Local[] = { - { ExpansionData::IWAD, retail, doom, "DOOM", DOOMWADDIR"DOOM.WAD", NULL, "base/textures/DOOMICON.PNG" , Doom_MapNames }, + { ExpansionData::PWAD, retail, doom, "DOOM", DOOMWADDIR"DOOM.WAD", DOOMWADDIR"SIGIL.WAD", "base/textures/DOOMICON.PNG" , Doom_MapNames }, { ExpansionData::IWAD, commercial, doom2, "DOOM 2", DOOMWADDIR"DOOM2.WAD", NULL, "base/textures/DOOM2ICON.PNG" , Doom2_MapNames }, { ExpansionData::IWAD, commercial, pack_tnt, "FINAL DOOM: TNT EVILUTION", DOOMWADDIR"TNT.WAD", NULL, "base/textures/TNTICON.PNG" , TNT_MapNames }, { ExpansionData::IWAD, commercial, pack_plut, "FINAL DOOM: PLUTONIA EXPERIMENT", DOOMWADDIR"PLUTONIA.WAD", NULL, "base/textures/PLUTICON.PNG" , Plut_MapNames }, diff --git a/doomclassic/doom/f_finale.cpp b/doomclassic/doom/f_finale.cpp index 79dafc9a7..0322fc4da 100644 --- a/doomclassic/doom/f_finale.cpp +++ b/doomclassic/doom/f_finale.cpp @@ -63,6 +63,7 @@ const char* e1text = E1TEXT; const char* e2text = E2TEXT; const char* e3text = E3TEXT; const char* e4text = E4TEXT; +const char* e5text = E5TEXT; const char* c1text = C1TEXT; const char* c2text = C2TEXT; @@ -151,6 +152,10 @@ void F_StartFinale (void) finaleflat = "MFLR8_3"; finaletext = e4text; break; + case 5: + finaleflat = "FLOOR7_2"; + finaletext = e5text; + break; default: // Ouch. break; @@ -807,6 +812,10 @@ void F_Drawer (void) V_DrawPatch (0,0,0, (patch_t*)W_CacheLumpName("ENDPIC",PU_CACHE_SHARED)); break; + case 5: + V_DrawPatch (0,0,0, + (patch_t*)W_CacheLumpName("SIGILEND",PU_CACHE_SHARED)); + break; } } diff --git a/doomclassic/doom/g_game.cpp b/doomclassic/doom/g_game.cpp index 52e752cd2..3fef9f614 100644 --- a/doomclassic/doom/g_game.cpp +++ b/doomclassic/doom/g_game.cpp @@ -1156,13 +1156,14 @@ void G_ScreenShot (void) // DHM - Nerve :: Added episode 4 par times // DOOM Par Times -const int pars[5][10] = +const int pars[6][10] = { {0}, {0,30,75,120,90,165,180,180,30,165}, {0,90,90,90,120,90,360,240,30,170}, {0,90,45,90,150,90,90,165,30,135}, - {0,165,255,135,150,180,390,135,360,180} + {0,165,255,135,150,180,390,135,360,180}, + {0,0,0,0,0,0,0,0,0,0} }; // DOOM II Par Times @@ -1303,6 +1304,9 @@ void G_DoCompleted (void) case 4: ::g->wminfo.next = 2; break; + case 5: + ::g->wminfo.next = 6; + break; } } else @@ -1666,8 +1670,8 @@ G_InitNew if ( ::g->gamemode == retail ) { - if (episode > 4) - episode = 4; + if (episode > 5) + episode = 5; } else if ( ::g->gamemode == shareware ) { @@ -1732,6 +1736,9 @@ G_InitNew case 4: // Special Edition sky ::g->skytexture = R_TextureNumForName ("SKY4"); break; + case 5: // Special Edition sky + ::g->skytexture = R_TextureNumForName ("SKY5"); + break; default: ::g->skytexture = R_TextureNumForName ("SKY1"); break; diff --git a/doomclassic/doom/i_sound_win32.cpp b/doomclassic/doom/i_sound_win32.cpp index 12c45bd8d..d18886939 100644 --- a/doomclassic/doom/i_sound_win32.cpp +++ b/doomclassic/doom/i_sound_win32.cpp @@ -908,7 +908,15 @@ DWORD WINAPI I_LoadSong( LPVOID songname ) { unsigned char * musFile = static_cast< unsigned char * >( W_CacheLumpName( lumpName.c_str(), PU_STATIC_SHARED ) ); int length = 0; - Mus2Midi( musFile, midiConversionBuffer, &length ); + + MidiHeaderChunk_t* midi = (MidiHeaderChunk_t*)musFile; + if ( midi->name[0] == 'M' && midi->name[1] == 'T' && midi->name[2] == 'h' && + midi->name[3] == 'd' ) { + length = W_LumpLength( W_GetNumForName( lumpName.c_str() ) ); + memcpy( &midiConversionBuffer, musFile, length ); + } else { + Mus2Midi( musFile, midiConversionBuffer, &length ); + } doomMusic = Timidity_LoadSongMem( midiConversionBuffer, length ); diff --git a/doomclassic/doom/i_system.cpp b/doomclassic/doom/i_system.cpp index 8a35e6bc8..cb5472dcc 100644 --- a/doomclassic/doom/i_system.cpp +++ b/doomclassic/doom/i_system.cpp @@ -181,7 +181,7 @@ void I_Error(const char *error, ...) // CRASH DUMP - enable this to get extra info on error from crash dumps //*(int*)0x0 = 21; DoomLib::Interface.QuitCurrentGame(); - idLib::Printf( "DOOM Classic error: %s", error_msg ); + idLib::Printf( "DOOM Classic error: %s\n", error_msg ); common->SwitchToGame( DOOM3_BFG ); } diff --git a/doomclassic/doom/m_menu.cpp b/doomclassic/doom/m_menu.cpp index 57b9366c8..24c2ffcfd 100644 --- a/doomclassic/doom/m_menu.cpp +++ b/doomclassic/doom/m_menu.cpp @@ -726,6 +726,12 @@ void M_Episode(int choice) { I_PrintfE("M_Episode: 4th episode requires UltimateDOOM\n"); choice = 0; + } else if ( (::g->gamemode == retail) + && (choice == 4)) + { + // Play the SIGIL opening music if we're starting Episode 5, + // otherwise we'll never have a chance to hear it + S_ChangeMusic(mus_intro5, true); } ::g->epi = choice; diff --git a/doomclassic/doom/s_sound.cpp b/doomclassic/doom/s_sound.cpp index efd8a0d66..ddf035a23 100644 --- a/doomclassic/doom/s_sound.cpp +++ b/doomclassic/doom/s_sound.cpp @@ -209,13 +209,24 @@ void S_Start(void) mus_e2m4, // Romero e4m6 mus_e2m6, // J.Anderson e4m7 CHIRON.WAD mus_e2m5, // Shawn e4m8 - mus_e1m9 // Tim e4m9 + mus_e1m9, // Tim e4m9 + mus_e5m1, // E5M1: Hate Machine by James Paddock + mus_e5m2, // E5M2: You Ain't the Boss O' Me by James Paddock + mus_e5m3, // E5M3: Quell the Beast by James Paddock + mus_e5m4, // E5M4: Riot Squadron by James Paddock + mus_e5m5, // E5M5: Alice by James Paddock + mus_e5m6, // E5M6: Besieged City by James Paddock + mus_e5m7, // E5M7: Watching You by James Paddock + mus_e5m8, // E5M8: Easel by James Paddock + mus_e5m9, // E5M9: Adrenaline in the Blood by James Paddock + mus_intro5, // E5 Intro: Lands of Ire + mus_inter5 // E5 Intermission screen: Big Guns }; if (::g->gameepisode < 4) mnum = mus_e1m1 + (::g->gameepisode-1)*9 + ::g->gamemap-1; else - mnum = spmus[::g->gamemap-1]; + mnum = spmus[::g->gamemap-1 + (::g->gameepisode-4)*9]; } S_StopMusic(); diff --git a/doomclassic/doom/sounds.h b/doomclassic/doom/sounds.h index b06ef809e..e6c8d85ce 100644 --- a/doomclassic/doom/sounds.h +++ b/doomclassic/doom/sounds.h @@ -172,6 +172,17 @@ typedef enum mus_read_m, mus_dm2ttl, mus_dm2int, + mus_e5m1, + mus_e5m2, + mus_e5m3, + mus_e5m4, + mus_e5m5, + mus_e5m6, + mus_e5m7, + mus_e5m8, + mus_e5m9, + mus_intro5, + mus_inter5, NUMMUSIC } musicenum_t; diff --git a/doomclassic/doom/st_stuff.cpp b/doomclassic/doom/st_stuff.cpp index 766b5f463..f23dc3530 100644 --- a/doomclassic/doom/st_stuff.cpp +++ b/doomclassic/doom/st_stuff.cpp @@ -544,7 +544,7 @@ ST_Responder (event_t* ev) // Ohmygod - this is not going to work. if ((::g->gamemode == retail) - && ((epsd > 4) || (map > 9))) + && ((epsd > 5) || (map > 9))) return false; if ((::g->gamemode == registered) @@ -1451,7 +1451,7 @@ CONSOLE_COMMAND_SHIP( idclev, "warp to next level", 0 ) { // Ohmygod - this is not going to work. if ((::g->gamemode == retail) - && ((epsd > 4) || (map > 9))) + && ((epsd > 5) || (map > 9))) return; if ((::g->gamemode == registered) diff --git a/doomclassic/doom/structs.h b/doomclassic/doom/structs.h index 04e40b82a..9a58d50ae 100644 --- a/doomclassic/doom/structs.h +++ b/doomclassic/doom/structs.h @@ -151,6 +151,7 @@ typedef enum ep2, ep3, ep4, + ep5, ep_end } episodes_e; typedef enum diff --git a/doomclassic/doom/vars.h b/doomclassic/doom/vars.h index aaca3e926..99f8cf957 100644 --- a/doomclassic/doom/vars.h +++ b/doomclassic/doom/vars.h @@ -358,7 +358,7 @@ menuitem_t MainMenu[5]; menu_t QuitDef; menuitem_t QuitMenu[3]; menu_t MainDef; -menuitem_t EpisodeMenu[4]; +menuitem_t EpisodeMenu[5]; menu_t EpiDef; menuitem_t ExpansionMenu[2]; menu_t ExpDef; diff --git a/doomclassic/doom/w_wad.cpp b/doomclassic/doom/w_wad.cpp index 36f74197b..237136d45 100644 --- a/doomclassic/doom/w_wad.cpp +++ b/doomclassic/doom/w_wad.cpp @@ -143,6 +143,7 @@ void W_AddFile ( const char *filename) int length; int startlump; std::vector fileinfo( 1 ); + bool isSigil = false; // open the file and add to directory if ( (handle = fileSystem->OpenFileRead(filename)) == 0) @@ -165,6 +166,8 @@ void W_AddFile ( const char *filename) else { // WAD file + if (strstr(filename, "SIGIL")) + isSigil = true; handle->Read( &header, sizeof( header ) ); if ( idStr::Cmpn( header.identification,"IWAD",4 ) ) { @@ -207,7 +210,33 @@ void W_AddFile ( const char *filename) lump_p->handle = handle; lump_p->position = LONG(filelumpPointer->filepos); lump_p->size = LONG(filelumpPointer->size); - strncpy (lump_p->name, filelumpPointer->name, 8); + if (isSigil) + { + if (strcmp(filelumpPointer->name, "DEMO1") == 0) + strncpy(lump_p->name, "DEMO5", 8); + else if (strcmp(filelumpPointer->name, "DEMO2") == 0) + strncpy(lump_p->name, "DEMO6", 8); + else if (strcmp(filelumpPointer->name, "DEMO3") == 0) + strncpy(lump_p->name, "DEMO7", 8); + else if (strcmp(filelumpPointer->name, "DEMO4") == 0) + strncpy(lump_p->name, "DEMO8", 8); + else if (strcmp(filelumpPointer->name, "TITLEPIC") == 0) + strncpy(lump_p->name, "SIGILPIC", 8); + else if (strcmp(filelumpPointer->name, "CREDIT") == 0) + strncpy(lump_p->name, "SIGILCRD", 8); + else if (strcmp(filelumpPointer->name, "HELP1") == 0) + strncpy(lump_p->name, "SIGILHLP", 8); + else if (strcmp(filelumpPointer->name, "D_INTER") == 0) + strncpy(lump_p->name, "D_INTER5", 8); + else if (strcmp(filelumpPointer->name, "D_INTRO") == 0) + strncpy(lump_p->name, "D_INTRO5", 8); + else + strncpy(lump_p->name, filelumpPointer->name, 8); + } + else + { + strncpy (lump_p->name, filelumpPointer->name, 8); + } } } diff --git a/doomclassic/doom/wi_stuff.cpp b/doomclassic/doom/wi_stuff.cpp index b9bbdce01..4d848c1b1 100644 --- a/doomclassic/doom/wi_stuff.cpp +++ b/doomclassic/doom/wi_stuff.cpp @@ -1474,6 +1474,8 @@ void WI_Ticker(void) // intermission music if ( ::g->gamemode == commercial ) S_ChangeMusic(mus_dm2int, true); + else if ( ::g->gameepisode == 5 ) + S_ChangeMusic(mus_inter5, true); else S_ChangeMusic(mus_inter, true); } @@ -1517,6 +1519,8 @@ void WI_loadData(void) { if (::g->wbs->epsd == 3) strcpy(name,"INTERPIC"); + else if (::g->wbs->epsd == 4) + strcpy(name,"SIGILINT"); } // background diff --git a/vr_assets/Fully Possessed/wads/SIGIL.txt b/vr_assets/Fully Possessed/wads/SIGIL.txt new file mode 100644 index 000000000..9d5c6f4cd --- /dev/null +++ b/vr_assets/Fully Possessed/wads/SIGIL.txt @@ -0,0 +1,140 @@ +=========================================================================== +Primary purpose : Single play, Co-op play, Deathmatch +Advanced engine needed : Limit-removing; playing E5 ingame requires + either ZDoom or Eternity, though E5 is available + as a separate add-on (SIGIL_COMPAT.wad) for vanilla. + SIGIL.wad contains some maps, which may not be 100% + vanilla compatible. +=========================================================================== +Title : SIGIL +Filename : SIGIL.wad, SIGIL_COMPAT.wad + (and SIGIL_SHREDS.wad/SIGIL_SHREDS_COMPAT.wad if purchased) +Release date : v1.0: May 1, 2019 + : v1.1: May 31,2019 +Version : 1.1 +Author : John Romero +Email Address : john@romero.com +Other WADs by Author : DOOM.WAD, DOOM1.WAD, DOOM2.WAD, E1M8B.wad, E1M4B.wad + +Description : Baphomet was only doing Satan's bidding by placing + a powerful sigil in the teleporter out of E4M8 to + bring you back to Hell. Somehow they didn't + understand that you're the reason they failed in the + first place. + + It's time to trash the place with your arsenal, get out + of Hell, and back to Earth to face the more advanced + demons that were sent ahead. + + Lock and load. Rip and tear. + +Additional Credits to : Technical Diligence and Testing: + Boris Klimes + Xaser + Kurt Baumgardner + Flambeau + keyboard_doomer + + Artist: + Christopher Lovell + + MIDI Music: + James Paddock + + MP3 Music: + Buckethead + +=========================================================================== +* What is included * + +New levels : 18 (Single-player and Deathmatch areas in each level WAD) +Sounds : No +Music : No +Graphics : Yes +Dehacked/BEX Patch : Yes +Demos : Yes +Other : No +Other files required : None + + +* Play Information * + +Game : Doom +Map # : E5M1-E5M9 (SIGIL.wad) + : E3M1-E3M9 (SIGIL_COMPAT.wad) +Single Player : Yes +Cooperative 2-4 Player : Yes +Deathmatch 2-4 Player : Yes +Other game styles : None +Difficulty Settings : Yes + +While in deathmatch maps, two players can agree to open the single-player area by flipping +one switch each at the same time to open a teleporter. Going through the teleporter will +take each player into the single-player area and permanently keep the teleporter open to +allow players to go between deathmatch and single-player maps. + + +* Construction * + +Base : Hell +Build Time : One year, part-time +Editor(s) used : Doom Builder 2, Slade +May Not Run With... : Versions of Doom prior to 1.9 + + +* Map Names * + +E5M1: "Baphomet's Demesne" +E5M2: "Sheol" +E5M3: "Cages of the Damned" +E5M4: "Paths of Wretchedness" +E5M5: "Abaddon's Void" +E5M6: "Unspeakable Persecution" +E5M7: "Nightmare Underworld" +E5M8: "Halls of Perdition" +E5M9: "Realm of Iblis" + +* Buckethead Music Names * + +E5M1: Romero One Mind Any Weapon +E5M2: 13th Floor +E5M3: Buildor 2 +E5M4: The Patrolman +E5M5: Cold Frost part 6 +E5M6: Melting Man part 2 +E5M7: Far 5 +E5M8: Poseidon 4-6 +E5M9: Fastpass + +* MIDI Music Names * + +E5M1: Hate Machine +E5M2: You Ain't the Boss O' Me +E5M3: Quell the Beast +E5M4: Riot Squadron +E5M5: Alice +E5M6: Besieged City +E5M7: Watching You +E5M8: Easel +E5M9: Adrenaline in the Blood + + +* Copyright / Permissions * + +Authors may NOT use the contents of this file as a base for modification or +reuse without explicit permission of the original mappers. Permissions +have been obtained from original authors for any of their resources modified +or included in this file. + +You MAY distribute this file, provided you include this text file, with no +modifications. You may distribute this file in any electronic format (BBS, +Diskette, CD, etc) as long as you include this file intact. I have +received permission from the original authors of any modified or included +content in this file to allow further distribution. + + +* Where to get the file that this text file describes * + +The Usual: ftp://archives.3dgamers.com/pub/idgames/ and mirror mazes +Web sites: http://rome.ro/ +