diff --git a/CMakeLists.txt b/CMakeLists.txt index d45c9c100..dd2c7730f 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -2,8 +2,12 @@ cmake_minimum_required( VERSION 2.4 ) project(ZDoom) if( COMMAND cmake_policy ) - cmake_policy( SET CMP0011 NEW ) - cmake_policy( SET CMP0054 NEW ) + if( POLICY CMP0011 ) + cmake_policy( SET CMP0011 NEW ) + endif( POLICY CMP0011 ) + if( POLICY CMP0054 ) + cmake_policy( SET CMP0054 NEW ) + endif( POLICY CMP0054 ) endif( COMMAND cmake_policy ) list( APPEND CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR} ) diff --git a/CreateLaunchers.cmake b/CreateLaunchers.cmake index 83cc08b44..bd2b3e473 100644 --- a/CreateLaunchers.cmake +++ b/CreateLaunchers.cmake @@ -44,7 +44,9 @@ if(__create_launchers) endif() set(__create_launchers YES) -cmake_policy( SET CMP0026 OLD ) +if( POLICY CMP0026 ) + cmake_policy( SET CMP0026 OLD ) +endif( POLICY CMP0026 ) include(CleanDirectoryList) diff --git a/specs/udmf_zdoom.txt b/specs/udmf_zdoom.txt index cbb5b902c..6541e9a02 100644 --- a/specs/udmf_zdoom.txt +++ b/specs/udmf_zdoom.txt @@ -119,6 +119,7 @@ Note: All fields default to false unless mentioned otherwise. blockhitscan = ; // Line blocks hitscan attacks locknumber = ; // Line special is locked arg0str = ; // Alternate string-based version of arg0 + moreids = ; // Additional line IDs, specified as a space separated list of numbers (e.g. "2 666 1003 4505") transparent = ; // true = line is a Strife transparent line (alpha 0.25) @@ -201,6 +202,7 @@ Note: All fields default to false unless mentioned otherwise. // sound sequence thing in the sector will override this property. hidden = ; // if true this sector will not be drawn on the textured automap. waterzone = ; // Sector is under water and swimmable + moreids = ; // Additional sector IDs/tags, specified as a space separated list of numbers (e.g. "2 666 1003 4505") * Note about dropactors @@ -370,6 +372,9 @@ Added transparent line property (to be folded back to core UDMF standard), and h Added plane equations for sector slopes. (Please read carefully to ensure proper use!) Changed language describing the DIALOGUE lump to mention USDF as an option. +1.25 19.04.2015 +Added 'moreids' for linedefs and sectors. + =============================================================================== EOF =============================================================================== diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index f68480fae..50acfe2cb 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -783,6 +783,7 @@ set( NOT_COMPILED_SOURCE_FILES g_hexen/a_fighterquietus.cpp g_hexen/a_firedemon.cpp g_hexen/a_flechette.cpp + g_hexen/a_flies.cpp g_hexen/a_fog.cpp g_hexen/a_healingradius.cpp g_hexen/a_heresiarch.cpp @@ -875,6 +876,7 @@ add_executable( zdoom WIN32 MACOSX_BUNDLE f_wipe.cpp farchive.cpp files.cpp + g_doomedmap.cpp g_game.cpp g_hub.cpp g_level.cpp @@ -935,6 +937,7 @@ add_executable( zdoom WIN32 MACOSX_BUNDLE p_spec.cpp p_states.cpp p_switch.cpp + p_tags.cpp p_teleport.cpp p_terrain.cpp p_things.cpp diff --git a/src/actor.h b/src/actor.h index 78c82066c..862858b32 100644 --- a/src/actor.h +++ b/src/actor.h @@ -1035,7 +1035,7 @@ public: virtual bool UpdateWaterLevel (fixed_t oldz, bool splash=true); bool isFast(); bool isSlow(); - void SetIdle(); + void SetIdle(bool nofunction=false); void ClearCounters(); FState *GetRaiseState(); void Revive(); diff --git a/src/c_bind.cpp b/src/c_bind.cpp index 1a62469bc..0231820dc 100644 --- a/src/c_bind.cpp +++ b/src/c_bind.cpp @@ -43,158 +43,11 @@ #include "configfile.h" #include "i_system.h" #include "d_event.h" +#include "w_wad.h" #include #include -/* Default keybindings for Doom (and all other games) - */ -static const FBinding DefBindings[] = -{ - { "`", "toggleconsole" }, - { "1", "slot 1" }, - { "2", "slot 2" }, - { "3", "slot 3" }, - { "4", "slot 4" }, - { "5", "slot 5" }, - { "6", "slot 6" }, - { "7", "slot 7" }, - { "8", "slot 8" }, - { "9", "slot 9" }, - { "0", "slot 0" }, - { "[", "invprev" }, - { "]", "invnext" }, - { "mwheelleft", "invprev" }, - { "mwheelright", "invnext" }, - { "enter", "invuse" }, - { "-", "sizedown" }, - { "=", "sizeup" }, - { "ctrl", "+attack" }, - { "alt", "+strafe" }, - { "shift", "+speed" }, - { "space", "+use" }, - { "rightarrow", "+right" }, - { "leftarrow", "+left" }, - { "uparrow", "+forward" }, - { "downarrow", "+back" }, - { ",", "+moveleft" }, - { ".", "+moveright" }, - { "mouse1", "+attack" }, - { "mouse2", "+strafe" }, - { "mouse3", "+forward" }, - { "mouse4", "+speed" }, - { "capslock", "toggle cl_run" }, - { "f1", "menu_help" }, - { "f2", "menu_save" }, - { "f3", "menu_load" }, - { "f4", "menu_options" }, - { "f5", "menu_display" }, - { "f6", "quicksave" }, - { "f7", "menu_endgame" }, - { "f8", "togglemessages" }, - { "f9", "quickload" }, - { "f11", "bumpgamma" }, - { "f10", "menu_quit" }, - { "tab", "togglemap" }, - { "pause", "pause" }, - { "sysrq", "screenshot" }, - { "t", "messagemode" }, - { "\\", "+showscores" }, - { "f12", "spynext" }, - { "mwheeldown", "weapnext" }, - { "mwheelup", "weapprev" }, - - // Generic joystick buttons - { "joy1", "+attack" }, - { "joy2", "+strafe" }, - { "joy3", "+speed" }, - { "joy4", "+use" }, - - // Xbox 360 / PS2 controllers - { "pad_a", "+use" }, - { "pad_y", "+jump" }, - { "rtrigger", "+attack" }, - { "ltrigger", "+altattack" }, - { "lshoulder", "weapprev" }, - { "rshoulder", "weapnext" }, - { "dpadleft", "invprev" }, - { "dpadright", "invnext" }, - { "dpaddown", "invuse" }, - { "dpadup", "togglemap" }, - { "pad_start", "pause" }, - { "pad_back", "menu_main" }, - { "lthumb", "crouch" }, - { NULL, NULL } -}; - -static const FBinding DefRavenBindings[] = -{ - { "pgup", "+moveup" }, - { "ins", "+movedown" }, - { "home", "land" }, - { "pgdn", "+lookup" }, - { "del", "+lookdown" }, - { "end", "centerview" }, - { NULL, NULL } -}; - -static const FBinding DefHereticBindings[] = -{ - { "backspace", "use ArtiTomeOfPower" }, - { NULL, NULL } -}; - -static const FBinding DefHexenBindings[] = -{ - { "/", "+jump" }, - { "backspace", "invuseall" }, - { "\\", "use ArtiHealth" }, - { "0", "useflechette" }, - { "9", "use ArtiBlastRadius" }, - { "8", "use ArtiTeleport" }, - { "7", "use ArtiTeleportOther" }, - { "6", "use ArtiPork" }, - { "5", "use ArtiInvulnerability2" }, - { "scroll", "+showscores" }, - { NULL, NULL } -}; - -static const FBinding DefStrifeBindings[] = -{ - { "a", "+jump" }, - { "w", "showpop 1" }, - { "backspace", "invdrop" }, - { "z", "showpop 3" }, - { "k", "showpop 2" }, - { "q", "invquery" }, - { NULL, NULL } - // not done - // h - use health -}; - -static const FBinding DefAutomapBindings[] = -{ - { "f", "am_togglefollow" }, - { "g", "am_togglegrid" }, - { "p", "am_toggletexture" }, - { "m", "am_setmark" }, - { "c", "am_clearmarks" }, - { "0", "am_gobig" }, - { "rightarrow", "+am_panright" }, - { "leftarrow", "+am_panleft" }, - { "uparrow", "+am_panup" }, - { "downarrow", "+am_pandown" }, - { "-", "+am_zoomout" }, - { "=", "+am_zoomin" }, - { "kp-", "+am_zoomout" }, - { "kp+", "+am_zoomin" }, - { "mwheelup", "am_zoom 1.2" }, - { "mwheeldown", "am_zoom -1.2" }, - { NULL, NULL } -}; - - - const char *KeyNames[NUM_KEYS] = { // This array is dependant on the particular keyboard input @@ -452,21 +305,6 @@ void FKeyBindings::DoBind (const char *key, const char *bind) // //============================================================================= -void FKeyBindings::SetBinds(const FBinding *binds) -{ - while (binds->Key) - { - DoBind (binds->Key, binds->Bind); - binds++; - } -} - -//============================================================================= -// -// -// -//============================================================================= - void FKeyBindings::UnbindAll () { for (int i = 0; i < NUM_KEYS; ++i) @@ -785,29 +623,37 @@ CCMD (rebind) void C_BindDefaults () { - Bindings.SetBinds (DefBindings); + int lump, lastlump = 0; - if (gameinfo.gametype & (GAME_Raven|GAME_Strife)) + while ((lump = Wads.FindLump("DEFBINDS", &lastlump)) != -1) { - Bindings.SetBinds (DefRavenBindings); - } + FScanner sc(lump); - if (gameinfo.gametype == GAME_Heretic) - { - Bindings.SetBinds (DefHereticBindings); - } + while (sc.GetString()) + { + FKeyBindings *dest = &Bindings; + int key; - if (gameinfo.gametype == GAME_Hexen) - { - Bindings.SetBinds (DefHexenBindings); + // bind destination is optional and is the same as the console command + if (sc.Compare("bind")) + { + sc.MustGetString(); + } + else if (sc.Compare("doublebind")) + { + dest = &DoubleBindings; + sc.MustGetString(); + } + else if (sc.Compare("mapbind")) + { + dest = &AutomapBindings; + sc.MustGetString(); + } + key = GetConfigKeyFromName(sc.String); + sc.MustGetString(); + dest->SetBind(key, sc.String); + } } - - if (gameinfo.gametype == GAME_Strife) - { - Bindings.SetBinds (DefStrifeBindings); - } - - AutomapBindings.SetBinds(DefAutomapBindings); } CCMD(binddefaults) diff --git a/src/c_bind.h b/src/c_bind.h index 4c9edb2bb..394d313c9 100644 --- a/src/c_bind.h +++ b/src/c_bind.h @@ -42,19 +42,12 @@ class FCommandLine; void C_NameKeys (char *str, int first, int second); -struct FBinding -{ - const char *Key; - const char *Bind; -}; - class FKeyBindings { FString Binds[NUM_KEYS]; public: void PerformBind(FCommandLine &argv, const char *msg); - void SetBinds(const FBinding *binds); bool DoKey(event_t *ev); void ArchiveBindings(FConfigFile *F, const char *matchcmd = NULL); int GetKeysForCommand (const char *cmd, int *first, int *second); diff --git a/src/c_cmds.cpp b/src/c_cmds.cpp index 5fc7f0fd8..a40f1f1a2 100644 --- a/src/c_cmds.cpp +++ b/src/c_cmds.cpp @@ -450,11 +450,10 @@ CCMD (exec) for (int i = 1; i < argv.argc(); ++i) { - switch (C_ExecFile (argv[i], gamestate == GS_STARTUP)) + if (!C_ExecFile(argv[i])) { - case 1: Printf ("Could not open \"%s\"\n", argv[1]); break; - case 2: Printf ("Error parsing \"%s\"\n", argv[1]); break; - default: break; + Printf ("Could not exec \"%s\"\n", argv[i]); + break; } } } @@ -641,6 +640,23 @@ CCMD (error_fatal) } } +//========================================================================== +// +// CCMD crashout +// +// Debugging routine for testing the crash logger. +// Useless in a win32 debug build, because that doesn't enable the crash logger. +// +//========================================================================== + +#if !defined(_WIN32) || !defined(_DEBUG) +CCMD (crashout) +{ + *(volatile int *)0 = 0; +} +#endif + + CCMD (dir) { FString dir, path; @@ -889,21 +905,42 @@ CCMD(info) "the NOBLOCKMAP flag or have height/radius of 0.\n"); } -//----------------------------------------------------------------------------- -// -// -// -//----------------------------------------------------------------------------- -CCMD(monster) -{ - AActor * mo; +typedef bool (*ActorTypeChecker) (AActor *); - if (CheckCheatmode ()) return; +static bool IsActorAMonster(AActor *mo) +{ + return mo->flags3&MF3_ISMONSTER && !(mo->flags&MF_CORPSE) && !(mo->flags&MF_FRIENDLY); +} + +static bool IsActorAnItem(AActor *mo) +{ + return mo->IsKindOf(RUNTIME_CLASS(AInventory)) && mo->flags&MF_SPECIAL; +} + +static bool IsActorACountItem(AActor *mo) +{ + return mo->IsKindOf(RUNTIME_CLASS(AInventory)) && mo->flags&MF_SPECIAL && mo->flags&MF_COUNTITEM; +} + +static void PrintFilteredActorList(const ActorTypeChecker IsActorType, const char *FilterName) +{ + AActor *mo; + const PClass *FilterClass = NULL; + + if (FilterName != NULL) + { + FilterClass = PClass::FindClass(FilterName); + if (FilterClass == NULL || FilterClass->ActorInfo == NULL) + { + Printf("%s is not an actor class.\n", FilterName); + return; + } + } TThinkerIterator it; while ( (mo = it.Next()) ) { - if (mo->flags3&MF3_ISMONSTER && !(mo->flags&MF_CORPSE) && !(mo->flags&MF_FRIENDLY)) + if ((FilterClass == NULL || mo->IsA(FilterClass)) && IsActorType(mo)) { Printf ("%s at (%d,%d,%d)\n", mo->GetClass()->TypeName.GetChars(), @@ -912,6 +949,18 @@ CCMD(monster) } } +//----------------------------------------------------------------------------- +// +// +// +//----------------------------------------------------------------------------- +CCMD(monster) +{ + if (CheckCheatmode ()) return; + + PrintFilteredActorList(IsActorAMonster, argv.argc() > 1 ? argv[1] : NULL); +} + //----------------------------------------------------------------------------- // // @@ -919,20 +968,21 @@ CCMD(monster) //----------------------------------------------------------------------------- CCMD(items) { - AActor * mo; - if (CheckCheatmode ()) return; - TThinkerIterator it; - while ( (mo = it.Next()) ) - { - if (mo->IsKindOf(RUNTIME_CLASS(AInventory)) && mo->flags&MF_SPECIAL) - { - Printf ("%s at (%d,%d,%d)\n", - mo->GetClass()->TypeName.GetChars(), - mo->x >> FRACBITS, mo->y >> FRACBITS, mo->z >> FRACBITS); - } - } + PrintFilteredActorList(IsActorAnItem, argv.argc() > 1 ? argv[1] : NULL); +} + +//----------------------------------------------------------------------------- +// +// +// +//----------------------------------------------------------------------------- +CCMD(countitems) +{ + if (CheckCheatmode ()) return; + + PrintFilteredActorList(IsActorACountItem, argv.argc() > 1 ? argv[1] : NULL); } //----------------------------------------------------------------------------- diff --git a/src/c_dispatch.cpp b/src/c_dispatch.cpp index 6a526a661..d72993cb7 100644 --- a/src/c_dispatch.cpp +++ b/src/c_dispatch.cpp @@ -185,9 +185,6 @@ static const char *KeyConfCommands[] = "clearplayerclasses" }; -static TArray StoredStartupSets; -static bool RunningStoredStartups; - // CODE -------------------------------------------------------------------- IMPLEMENT_CLASS (DWaitingCommand) @@ -540,18 +537,6 @@ void ResetButtonStates () } } -void C_ExecStoredSets() -{ - assert(!RunningStoredStartups); - RunningStoredStartups = true; - for (unsigned i = 0; i < StoredStartupSets.Size(); ++i) - { - C_DoCommand(StoredStartupSets[i]); - } - StoredStartupSets.Clear(); - RunningStoredStartups = false; -} - void C_DoCommand (const char *cmd, int keynum) { FConsoleCommand *com; @@ -627,22 +612,7 @@ void C_DoCommand (const char *cmd, int keynum) if ( (com = FindNameInHashTable (Commands, beg, len)) ) { - if (gamestate == GS_STARTUP && !RunningStoredStartups && - len == 3 && strnicmp(beg, "set", 3) == 0) - { - // Save setting of unknown cvars for later, in case a loaded wad has a - // CVARINFO that defines it. - FCommandLine args(beg); - if (args.argc() > 1 && FindCVar(args[1], NULL) == NULL) - { - StoredStartupSets.Push(beg); - } - else - { - com->Run(args, players[consoleplayer].mo, keynum); - } - } - else if (gamestate != GS_STARTUP || ParsingKeyConf || + if (gamestate != GS_STARTUP || ParsingKeyConf || (len == 3 && strnicmp (beg, "set", 3) == 0) || (len == 7 && strnicmp (beg, "logfile", 7) == 0) || (len == 9 && strnicmp (beg, "unbindall", 9) == 0) || @@ -687,15 +657,7 @@ void C_DoCommand (const char *cmd, int keynum) } else { // We don't know how to handle this command - if (gamestate == GS_STARTUP && !RunningStoredStartups) - { - // Save it for later, in case a CVARINFO defines it. - StoredStartupSets.Push(beg); - } - else - { - Printf ("Unknown command \"%.*s\"\n", (int)len, beg); - } + Printf ("Unknown command \"%.*s\"\n", (int)len, beg); } } } @@ -1368,7 +1330,7 @@ CCMD (key) // Execute any console commands specified on the command line. // These all begin with '+' as opposed to '-'. -void C_ExecCmdLineParams () +FExecList *C_ParseCmdLineParams(FExecList *exec) { for (int currArg = 1; currArg < Args->NumArgs(); ) { @@ -1389,10 +1351,15 @@ void C_ExecCmdLineParams () cmdString = BuildString (cmdlen, Args->GetArgList (argstart)); if (!cmdString.IsEmpty()) { - C_DoCommand (&cmdString[1]); + if (exec == NULL) + { + exec = new FExecList; + } + exec->AddCommand(&cmdString[1]); } } } + return exec; } bool FConsoleCommand::IsAlias () @@ -1469,28 +1436,60 @@ void FConsoleAlias::SafeDelete () } } -static BYTE PullinBad = 2; -static const char *PullinFile; -extern TArray allwads; +void FExecList::AddCommand(const char *cmd, const char *file) +{ + // Pullins are special and need to be separated from general commands. + // They also turned out to be a really bad idea, since they make things + // more complicated. :( + if (file != NULL && strnicmp(cmd, "pullin", 6) == 0 && isspace(cmd[6])) + { + FCommandLine line(cmd); + C_SearchForPullins(this, file, line); + } + // Recursive exec: Parse this file now. + else if (strnicmp(cmd, "exec", 4) == 0 && isspace(cmd[4])) + { + FCommandLine argv(cmd); + for (int i = 1; i < argv.argc(); ++i) + { + C_ParseExecFile(argv[i], this); + } + } + else + { + Commands.Push(cmd); + } +} -int C_ExecFile (const char *file, bool usePullin) +void FExecList::ExecCommands() const +{ + for (unsigned i = 0; i < Commands.Size(); ++i) + { + AddCommandString(Commands[i].LockBuffer()); + Commands[i].UnlockBuffer(); + } +} + +void FExecList::AddPullins(TArray &wads) const +{ + for (unsigned i = 0; i < Pullins.Size(); ++i) + { + D_AddFile(wads, Pullins[i]); + } +} + +FExecList *C_ParseExecFile(const char *file, FExecList *exec) { FILE *f; char cmd[4096]; int retval = 0; - BYTE pullinSaved = PullinBad; - const char *fileSaved = PullinFile; - if ( (f = fopen (file, "r")) ) { - PullinBad = 1-usePullin; - PullinFile = file; - - while (fgets (cmd, 4095, f)) + while (fgets(cmd, countof(cmd)-1, f)) { // Comments begin with // - char *stop = cmd + strlen (cmd) - 1; + char *stop = cmd + strlen(cmd) - 1; char *comment = cmd; int inQuote = 0; @@ -1517,88 +1516,78 @@ int C_ExecFile (const char *file, bool usePullin) { // Comment in middle of line *comment = 0; } - - AddCommandString (cmd); + if (exec == NULL) + { + exec = new FExecList; + } + exec->AddCommand(cmd, file); } - if (!feof (f)) + if (!feof(f)) { - retval = 2; + Printf("Error parsing \"%s\"\n", file); } - fclose (f); + fclose(f); } else { - retval = 1; + Printf ("Could not open \"%s\"\n", file); + } + return exec; +} + +bool C_ExecFile (const char *file) +{ + FExecList *exec = C_ParseExecFile(file, NULL); + if (exec != NULL) + { + exec->ExecCommands(); + if (exec->Pullins.Size() > 0) + { + Printf(TEXTCOLOR_BOLD "Notice: Pullin files were ignored.\n"); + } + delete exec; + } + return exec != NULL; +} + +void C_SearchForPullins(FExecList *exec, const char *file, FCommandLine &argv) +{ + const char *lastSlash; + + assert(exec != NULL); + assert(file != NULL); +#ifdef __unix__ + lastSlash = strrchr(file, '/'); +#else + const char *lastSlash1, *lastSlash2; + + lastSlash1 = strrchr(file, '/'); + lastSlash2 = strrchr(file, '\\'); + lastSlash = MAX(lastSlash1, lastSlash2); +#endif + + for (int i = 1; i < argv.argc(); ++i) + { + // Try looking for the wad in the same directory as the .cfg + // before looking for it in the current directory. + if (lastSlash != NULL) + { + FString path(file, (lastSlash - file) + 1); + path += argv[i]; + if (FileExists(path)) + { + exec->Pullins.Push(path); + continue; + } + } + exec->Pullins.Push(argv[i]); } - PullinBad = pullinSaved; - PullinFile = fileSaved; - return retval; } CCMD (pullin) { - if (PullinBad == 2) - { - Printf ("This command is only valid from .cfg\n" - "files and only when used at startup.\n"); - } - else if (argv.argc() > 1) - { - const char *lastSlash; - -#ifdef __unix__ - lastSlash = strrchr (PullinFile, '/'); -#else - const char *lastSlash1, *lastSlash2; - - lastSlash1 = strrchr (PullinFile, '/'); - lastSlash2 = strrchr (PullinFile, '\\'); - lastSlash = MAX (lastSlash1, lastSlash2); -#endif - - if (PullinBad) - { - Printf ("Not loading:"); - } - for (int i = 1; i < argv.argc(); ++i) - { - if (PullinBad) - { - Printf (" %s", argv[i]); - } - else - { - // Try looking for the wad in the same directory as the .cfg - // before looking for it in the current directory. - char *path = argv[i]; - - if (lastSlash != NULL) - { - size_t pathlen = lastSlash - PullinFile + strlen (argv[i]) + 2; - path = new char[pathlen]; - strncpy (path, PullinFile, (lastSlash - PullinFile) + 1); - strcpy (path + (lastSlash - PullinFile) + 1, argv[i]); - if (!FileExists (path)) - { - delete[] path; - path = argv[i]; - } - else - { - FixPathSeperator (path); - } - } - D_AddFile (allwads, path); - if (path != argv[i]) - { - delete[] path; - } - } - } - if (PullinBad) - { - Printf ("\n"); - } - } + // Actual handling for pullin is now completely special-cased above + Printf (TEXTCOLOR_BOLD "Pullin" TEXTCOLOR_NORMAL " is only valid from .cfg\n" + "files and only when used at startup.\n"); } diff --git a/src/c_dispatch.h b/src/c_dispatch.h index b494005c7..f9aeb0dc3 100644 --- a/src/c_dispatch.h +++ b/src/c_dispatch.h @@ -39,31 +39,6 @@ class FConfigFile; class APlayerPawn; -extern bool CheckCheatmode (bool printmsg = true); - -void C_ExecCmdLineParams (); -void C_ExecStoredSets(); - -// Add commands to the console as if they were typed in. Can handle wait -// and semicolon-separated commands. This function may modify the source -// string, but the string will be restored to its original state before -// returning. Therefore, commands passed must not be in read-only memory. -void AddCommandString (char *text, int keynum=0); - -// Process a single console command. Does not handle wait. -void C_DoCommand (const char *cmd, int keynum=0); - -int C_ExecFile (const char *cmd, bool usePullin); - -// Write out alias commands to a file for all current aliases. -void C_ArchiveAliases (FConfigFile *f); - -void C_SetAlias (const char *name, const char *cmd); -void C_ClearAliases (); - -// build a single string out of multiple strings -FString BuildString (int argc, FString *argv); - // Class that can parse command lines class FCommandLine { @@ -83,6 +58,44 @@ private: bool noescapes; }; +// Contains the contents of an exec'ed file +struct FExecList +{ + TArray Commands; + TArray Pullins; + + void AddCommand(const char *cmd, const char *file = NULL); + void ExecCommands() const; + void AddPullins(TArray &wads) const; +}; + + +extern bool CheckCheatmode (bool printmsg = true); + +FExecList *C_ParseCmdLineParams(FExecList *exec); + +// Add commands to the console as if they were typed in. Can handle wait +// and semicolon-separated commands. This function may modify the source +// string, but the string will be restored to its original state before +// returning. Therefore, commands passed must not be in read-only memory. +void AddCommandString (char *text, int keynum=0); + +// Process a single console command. Does not handle wait. +void C_DoCommand (const char *cmd, int keynum=0); + +FExecList *C_ParseExecFile(const char *file, FExecList *source); +void C_SearchForPullins(FExecList *exec, const char *file, class FCommandLine &args); +bool C_ExecFile(const char *file); + +// Write out alias commands to a file for all current aliases. +void C_ArchiveAliases (FConfigFile *f); + +void C_SetAlias (const char *name, const char *cmd); +void C_ClearAliases (); + +// build a single string out of multiple strings +FString BuildString (int argc, FString *argv); + typedef void (*CCmdRun) (FCommandLine &argv, APlayerPawn *instigator, int key); class FConsoleCommand diff --git a/src/cmdlib.cpp b/src/cmdlib.cpp index 557c80cf8..b3c406ee0 100644 --- a/src/cmdlib.cpp +++ b/src/cmdlib.cpp @@ -957,7 +957,7 @@ void ScanDirectory(TArray &list, const char *dirpath) } } -#elif defined(__sun) || defined(linux) +#elif defined(__sun) || defined(__linux__) //========================================================================== // diff --git a/src/compatibility.cpp b/src/compatibility.cpp index da4ab4945..d60677f64 100644 --- a/src/compatibility.cpp +++ b/src/compatibility.cpp @@ -49,6 +49,7 @@ #include "gi.h" #include "g_level.h" #include "p_lnspec.h" +#include "p_tags.h" #include "r_state.h" #include "w_wad.h" @@ -551,7 +552,8 @@ void SetCompatibilityParams() { if ((unsigned)CompatParams[i + 1] < (unsigned)numsectors) { - sectors[CompatParams[i + 1]].tag = CompatParams[i + 2]; + // this assumes that the sector does not have any tags yet! + tagManager.AddSectorTag(CompatParams[i + 1], CompatParams[i + 2]); } i += 3; break; @@ -595,12 +597,13 @@ CCMD (mapchecksum) else { map->GetChecksum(cksum); + const char *wadname = Wads.GetWadName(Wads.GetLumpFile(map->lumpnum)); delete map; for (size_t j = 0; j < sizeof(cksum); ++j) { Printf("%02X", cksum[j]); } - Printf(" // %s\n", argv[i]); + Printf(" // %s %s\n", wadname, argv[i]); } } } diff --git a/src/configfile.cpp b/src/configfile.cpp index 177c019fb..b8db74eb3 100644 --- a/src/configfile.cpp +++ b/src/configfile.cpp @@ -66,15 +66,13 @@ FConfigFile::FConfigFile () // //==================================================================== -FConfigFile::FConfigFile (const char *pathname, - void (*nosechandler)(const char *pathname, FConfigFile *config, void *userdata), - void *userdata) +FConfigFile::FConfigFile (const char *pathname) { Sections = CurrentSection = NULL; LastSectionPtr = &Sections; CurrentEntry = NULL; ChangePathName (pathname); - LoadConfigFile (nosechandler, userdata); + LoadConfigFile (); OkayToWrite = true; FileExisted = true; } @@ -118,8 +116,7 @@ FConfigFile::~FConfigFile () delete[] (char *)entry; entry = nextentry; } - section->~FConfigSection(); - delete[] (char *)section; + delete section; section = nextsection; } } @@ -140,7 +137,7 @@ FConfigFile &FConfigFile::operator = (const FConfigFile &other) while (fromsection != NULL) { fromentry = fromsection->RootEntry; - tosection = NewConfigSection (fromsection->Name); + tosection = NewConfigSection (fromsection->SectionName); while (fromentry != NULL) { NewConfigEntry (tosection, fromentry->Key, fromentry->Value); @@ -311,7 +308,7 @@ const char *FConfigFile::GetCurrentSection () const { if (CurrentSection != NULL) { - return CurrentSection->Name; + return CurrentSection->SectionName.GetChars(); } return NULL; } @@ -508,13 +505,29 @@ FConfigFile::FConfigSection *FConfigFile::FindSection (const char *name) const { FConfigSection *section = Sections; - while (section != NULL && stricmp (section->Name, name) != 0) + while (section != NULL && section->SectionName.CompareNoCase(name) != 0) { section = section->Next; } return section; } +//==================================================================== +// +// FConfigFile :: RenameSection +// +//==================================================================== + +void FConfigFile::RenameSection (const char *oldname, const char *newname) const +{ + FConfigSection *section = FindSection(oldname); + + if (section != NULL) + { + section->SectionName = newname; + } +} + //==================================================================== // // FConfigFile :: FindEntry @@ -542,19 +555,15 @@ FConfigFile::FConfigEntry *FConfigFile::FindEntry ( FConfigFile::FConfigSection *FConfigFile::NewConfigSection (const char *name) { FConfigSection *section; - char *memblock; section = FindSection (name); if (section == NULL) { - size_t namelen = strlen (name); - memblock = new char[sizeof(*section)+namelen]; - section = ::new(memblock) FConfigSection; + section = new FConfigSection; section->RootEntry = NULL; section->LastEntryPtr = §ion->RootEntry; section->Next = NULL; - memcpy (section->Name, name, namelen); - section->Name[namelen] = 0; + section->SectionName = name; *LastSectionPtr = section; LastSectionPtr = §ion->Next; } @@ -591,7 +600,7 @@ FConfigFile::FConfigEntry *FConfigFile::NewConfigEntry ( // //==================================================================== -void FConfigFile::LoadConfigFile (void (*nosechandler)(const char *pathname, FConfigFile *config, void *userdata), void *userdata) +void FConfigFile::LoadConfigFile () { FILE *file = fopen (PathName, "r"); bool succ; @@ -605,14 +614,6 @@ void FConfigFile::LoadConfigFile (void (*nosechandler)(const char *pathname, FCo succ = ReadConfig (file); fclose (file); FileExisted = succ; - - if (!succ) - { // First valid line did not define a section - if (nosechandler != NULL) - { - nosechandler (PathName, this, userdata); - } - } } //==================================================================== @@ -787,7 +788,7 @@ bool FConfigFile::WriteConfigFile () const { fputs (section->Note.GetChars(), file); } - fprintf (file, "[%s]\n", section->Name); + fprintf (file, "[%s]\n", section->SectionName.GetChars()); while (entry != NULL) { if (strpbrk(entry->Value, "\r\n") == NULL) diff --git a/src/configfile.h b/src/configfile.h index 25c366f01..e125351dc 100644 --- a/src/configfile.h +++ b/src/configfile.h @@ -41,8 +41,7 @@ class FConfigFile { public: FConfigFile (); - FConfigFile (const char *pathname, - void (*nosechandler)(const char *pathname, FConfigFile *config, void *userdata)=0, void *userdata=NULL); + FConfigFile (const char *pathname); FConfigFile (const FConfigFile &other); virtual ~FConfigFile (); @@ -70,7 +69,7 @@ public: const char *GetPathName () const { return PathName.GetChars(); } void ChangePathName (const char *path); - void LoadConfigFile (void (*nosechandler)(const char *pathname, FConfigFile *config, void *userdata), void *userdata); + void LoadConfigFile (); bool WriteConfigFile () const; protected: @@ -79,6 +78,7 @@ protected: virtual char *ReadLine (char *string, int n, void *file) const; bool ReadConfig (void *file); static const char *GenerateEndTag(const char *value); + void RenameSection(const char *oldname, const char *newname) const; bool OkayToWrite; bool FileExisted; @@ -94,11 +94,12 @@ private: }; struct FConfigSection { + FString SectionName; FConfigEntry *RootEntry; FConfigEntry **LastEntryPtr; FConfigSection *Next; FString Note; - char Name[1]; // + length of name + //char Name[1]; // + length of name }; FConfigSection *Sections; diff --git a/src/d_iwad.cpp b/src/d_iwad.cpp index 393ca11cc..3fc365e8c 100644 --- a/src/d_iwad.cpp +++ b/src/d_iwad.cpp @@ -47,6 +47,7 @@ #include "v_video.h" #include "gameconfigfile.h" #include "resourcefiles/resourcefile.h" +#include "version.h" CVAR (Bool, queryiwad, true, CVAR_ARCHIVE|CVAR_GLOBALCONFIG); @@ -137,12 +138,6 @@ void FIWadManager::ParseIWadInfo(const char *fn, const char *data, int datasize) sc.MustGetString(); iwad->Autoname = sc.String; } - else if (sc.Compare("Group")) - { - sc.MustGetStringName("="); - sc.MustGetString(); - iwad->Group = sc.String; - } else if (sc.Compare("Config")) { sc.MustGetStringName("="); @@ -224,6 +219,11 @@ void FIWadManager::ParseIWadInfo(const char *fn, const char *data, int datasize) sc.ScriptError("Unknown keyword '%s'", sc.String); } } + if (iwad->MapInfo.IsEmpty()) + { + // We must at least load the minimum defaults to allow the engine to run. + iwad->MapInfo = "mapinfo/mindefaults.txt"; + } } else if (sc.Compare("NAMES")) { @@ -252,7 +252,7 @@ void FIWadManager::ParseIWadInfo(const char *fn, const char *data, int datasize) //========================================================================== // -// Lool for IWAD definition lump +// Look for IWAD definition lump // //========================================================================== @@ -301,11 +301,11 @@ int FIWadManager::ScanIWAD (const char *iwad) FResourceLump *lump = iwadfile->GetLump(ii); CheckLumpName(lump->Name); - if (lump->FullName != NULL) + if (lump->FullName.IsNotEmpty()) { if (strnicmp(lump->FullName, "maps/", 5) == 0) { - FString mapname(lump->FullName+5, strcspn(lump->FullName+5, ".")); + FString mapname(&lump->FullName[5], strcspn(&lump->FullName[5], ".")); CheckLumpName(mapname); } } @@ -392,7 +392,6 @@ int FIWadManager::IdentifyVersion (TArray &wadfiles, const char *iwad, bool iwadparmfound = false; FString custwad; - ParseIWadInfos(zdoom_wad); wads.Resize(mIWadNames.Size()); foundwads.Resize(mIWads.Size()); memset(&foundwads[0], 0, foundwads.Size() * sizeof(foundwads[0])); @@ -504,19 +503,19 @@ int FIWadManager::IdentifyVersion (TArray &wadfiles, const char *iwad, if (numwads == 0) { I_FatalError ("Cannot find a game IWAD (doom.wad, doom2.wad, heretic.wad, etc.).\n" - "Did you install ZDoom properly? You can do either of the following:\n" + "Did you install " GAMENAME " properly? You can do either of the following:\n" "\n" #if defined(_WIN32) - "1. Place one or more of these wads in the same directory as ZDoom.\n" - "2. Edit your zdoom-username.ini and add the directories of your iwads\n" + "1. Place one or more of these wads in the same directory as " GAMENAME ".\n" + "2. Edit your " GAMENAMELOWERCASE "-username.ini and add the directories of your iwads\n" "to the list beneath [IWADSearch.Directories]"); #elif defined(__APPLE__) - "1. Place one or more of these wads in ~/Library/Application Support/zdoom/\n" - "2. Edit your ~/Library/Preferences/zdoom.ini and add the directories\n" + "1. Place one or more of these wads in ~/Library/Application Support/" GAMENAMELOWERCASE "/\n" + "2. Edit your ~/Library/Preferences/" GAMENAMELOWERCASE ".ini and add the directories\n" "of your iwads to the list beneath [IWADSearch.Directories]"); #else - "1. Place one or more of these wads in ~/.config/zdoom/.\n" - "2. Edit your ~/.config/zdoom/zdoom.ini and add the directories of your\n" + "1. Place one or more of these wads in ~/.config/" GAMENAMELOWERCASE "/.\n" + "2. Edit your ~/.config/" GAMENAMELOWERCASE "/" GAMENAMELOWERCASE ".ini and add the directories of your\n" "iwads to the list beneath [IWADSearch.Directories]"); #endif } diff --git a/src/d_main.cpp b/src/d_main.cpp index 5e21867bb..9b46d42c2 100644 --- a/src/d_main.cpp +++ b/src/d_main.cpp @@ -214,6 +214,7 @@ bool autostart; FString StoredWarp; bool advancedemo; FILE *debugfile; +FILE *hashfile; event_t events[MAXEVENTS]; int eventhead; int eventtail; @@ -1656,7 +1657,7 @@ static const char *BaseFileSearch (const char *file, const char *ext, bool lookf return wad; } - if (GameConfig->SetSection ("FileSearch.Directories")) + if (GameConfig != NULL && GameConfig->SetSection ("FileSearch.Directories")) { const char *key; const char *value; @@ -1722,12 +1723,13 @@ bool ConsiderPatches (const char *arg) // //========================================================================== -void D_MultiExec (DArgs *list, bool usePullin) +FExecList *D_MultiExec (DArgs *list, FExecList *exec) { for (int i = 0; i < list->NumArgs(); ++i) { - C_ExecFile (list->GetArg (i), usePullin); + exec = C_ParseExecFile(list->GetArg(i), exec); } + return exec; } static void GetCmdLineFiles(TArray &wadfiles) @@ -1977,10 +1979,6 @@ static void D_DoomInit() } FRandom::StaticClearRandom (); - - Printf ("M_LoadDefaults: Load system defaults.\n"); - M_LoadDefaults (); // load before initing other systems - } //========================================================================== @@ -1989,8 +1987,10 @@ static void D_DoomInit() // //========================================================================== -static void AddAutoloadFiles(const char *group, const char *autoname) +static void AddAutoloadFiles(const char *autoname) { + LumpFilterIWAD.Format("%s.", autoname); // The '.' is appened to simplify parsing the string + if (!(gameinfo.flags & GI_SHAREWARE) && !Args->CheckParm("-noautoload")) { FString file; @@ -2021,25 +2021,14 @@ static void AddAutoloadFiles(const char *group, const char *autoname) // Add common (global) wads D_AddConfigWads (allwads, "Global.Autoload"); - // Add game-specific wads - file = gameinfo.ConfigName; - file += ".Autoload"; - D_AddConfigWads (allwads, file); + long len; + int lastpos = -1; - // Add group-specific wads - if (group != NULL) - { - file = group; - file += ".Autoload"; - D_AddConfigWads(allwads, file); - } - - // Add IWAD-specific wads - if (autoname != NULL) + while ((len = LumpFilterIWAD.IndexOf('.', lastpos+1)) > 0) { - file = autoname; - file += ".Autoload"; + file = LumpFilterIWAD.Left(len) + ".Autoload"; D_AddConfigWads(allwads, file); + lastpos = len; } } } @@ -2211,7 +2200,8 @@ void D_DoomMain (void) DArgs *execFiles; TArray pwads; FString *args; - int argcount; + int argcount; + FIWadManager *iwad_man; // +logfile gets checked too late to catch the full startup log in the logfile so do some extra check for it here. FString logfile = Args->TakeValue("+logfile"); @@ -2220,9 +2210,27 @@ void D_DoomMain (void) execLogfile(logfile); } + if (Args->CheckParm("-hashfiles")) + { + const char *filename = "fileinfo.txt"; + Printf("Hashing loaded content to: %s\n", filename); + hashfile = fopen(filename, "w"); + if (hashfile) + { + fprintf(hashfile, "%s version %s (%s)\n", GAMENAME, GetVersionString(), GetGitHash()); +#ifdef __VERSION__ + fprintf(hashfile, "Compiler version: %s\n", __VERSION__); +#endif + fprintf(hashfile, "Command line:"); + for (int i = 0; i < Args->NumArgs(); ++i) + { + fprintf(hashfile, " %s", Args->GetArg(i)); + } + fprintf(hashfile, "\n"); + } + } + D_DoomInit(); - PClass::StaticInit (); - atterm(FinalGC); // [RH] Make sure zdoom.pk3 is always loaded, // as it contains magic stuff we need. @@ -2234,6 +2242,14 @@ void D_DoomMain (void) } FString basewad = wad; + iwad_man = new FIWadManager; + iwad_man->ParseIWadInfos(basewad); + + Printf ("M_LoadDefaults: Load system defaults.\n"); + M_LoadDefaults (iwad_man); // load before initing other systems + + PClass::StaticInit (); + atterm(FinalGC); // reinit from here @@ -2255,7 +2271,11 @@ void D_DoomMain (void) // restart is initiated without a defined IWAD assume for now that it's not going to change. if (iwad.IsEmpty()) iwad = lastIWAD; - FIWadManager *iwad_man = new FIWadManager; + if (iwad_man == NULL) + { + iwad_man = new FIWadManager; + iwad_man->ParseIWadInfos(basewad); + } const FIWADInfo *iwad_info = iwad_man->FindIWAD(allwads, iwad, basewad); gameinfo.gametype = iwad_info->gametype; gameinfo.flags = iwad_info->flags; @@ -2270,36 +2290,54 @@ void D_DoomMain (void) FBaseCVar::DisableCallbacks(); GameConfig->DoGameSetup (gameinfo.ConfigName); - AddAutoloadFiles(iwad_info->Group, iwad_info->Autoname); + AddAutoloadFiles(iwad_info->Autoname); - // Run automatically executed files + // Process automatically executed files + FExecList *exec; execFiles = new DArgs; - GameConfig->AddAutoexec (execFiles, gameinfo.ConfigName); - D_MultiExec (execFiles, true); + GameConfig->AddAutoexec(execFiles, gameinfo.ConfigName); + exec = D_MultiExec(execFiles, NULL); - // Run .cfg files at the start of the command line. + // Process .cfg files at the start of the command line. execFiles = Args->GatherFiles ("-exec"); - D_MultiExec (execFiles, true); + exec = D_MultiExec(execFiles, exec); - C_ExecCmdLineParams (); // [RH] do all +set commands on the command line + // [RH] process all + commands on the command line + exec = C_ParseCmdLineParams(exec); CopyFiles(allwads, pwads); + if (exec != NULL) + { + exec->AddPullins(allwads); + } // Since this function will never leave we must delete this array here manually. pwads.Clear(); pwads.ShrinkToFit(); + if (hashfile) + { + Printf("Notice: File hashing is incredibly verbose. Expect loading files to take much longer than usual.\n"); + } + Printf ("W_Init: Init WADfiles.\n"); Wads.InitMultipleFiles (allwads); allwads.Clear(); allwads.ShrinkToFit(); SetMapxxFlag(); + GameConfig->DoKeySetup(gameinfo.ConfigName); + // Now that wads are loaded, define mod-specific cvars. ParseCVarInfo(); - // Try setting previously unknown cvars again, as a CVARINFO may have made them known. - C_ExecStoredSets(); + // Actually exec command line commands and exec files. + if (exec != NULL) + { + exec->ExecCommands(); + delete exec; + exec = NULL; + } // [RH] Initialize localizable strings. GStrings.LoadStrings (false); @@ -2414,6 +2452,8 @@ void D_DoomMain (void) // Create replacements for dehacked pickups FinishDehPatch(); + InitActorNumsFromMapinfo(); + InitSpawnablesFromMapinfo(); FActorInfo::StaticSetActorNums (); //Added by MC: @@ -2465,6 +2505,7 @@ void D_DoomMain (void) FBaseCVar::EnableNoSet (); delete iwad_man; // now we won't need this anymore + iwad_man = NULL; // [RH] Run any saved commands from the command line or autoexec.cfg now. gamestate = GS_FULLCONSOLE; diff --git a/src/d_main.h b/src/d_main.h index dd2ffc409..afca8bc3b 100644 --- a/src/d_main.h +++ b/src/d_main.h @@ -75,7 +75,6 @@ struct FIWADInfo { FString Name; // Title banner text for this IWAD FString Autoname; // Name of autoload ini section for this IWAD - FString Group; // Groupname for this IWAD FString Configname; // Name of config section for this IWAD FString Required; // Requires another IWAD DWORD FgColor; // Foreground color for title banner @@ -116,15 +115,13 @@ extern FStartupInfo DoomStartupInfo; // //========================================================================== -struct FIWadManager +class FIWadManager { -private: TArray mIWads; TArray mIWadNames; TArray mLumpsFound; void ParseIWadInfo(const char *fn, const char *data, int datasize); - void ParseIWadInfos(const char *fn); void ClearChecks(); void CheckLumpName(const char *name); int GetIWadInfo(); @@ -132,7 +129,19 @@ private: int CheckIWAD (const char *doomwaddir, WadStuff *wads); int IdentifyVersion (TArray &wadfiles, const char *iwad, const char *zdoom_wad); public: + void ParseIWadInfos(const char *fn); const FIWADInfo *FindIWAD(TArray &wadfiles, const char *iwad, const char *basewad); + const FString *GetAutoname(unsigned int num) const + { + if (num < mIWads.Size()) return &mIWads[num].Autoname; + else return NULL; + } + int GetIWadFlags(unsigned int num) const + { + if (num < mIWads.Size()) return mIWads[num].flags; + else return false; + } + }; diff --git a/src/d_player.h b/src/d_player.h index e5644e8cb..e27bf1087 100644 --- a/src/d_player.h +++ b/src/d_player.h @@ -443,10 +443,15 @@ public: FName LastDamageType; // [RH] For damage-specific pain and death sounds - //Added by MC: - TObjPtr Bot; + TObjPtr MUSINFOactor; // For MUSINFO purposes + SBYTE MUSINFOtics; bool settings_controller; // Player can control game settings. + SBYTE crouching; + SBYTE crouchdir; + + //Added by MC: + TObjPtr Bot; float BlendR; // [RH] Final blending values float BlendG; @@ -458,8 +463,6 @@ public: int MinPitch; // Viewpitch limits (negative is up, positive is down) int MaxPitch; - SBYTE crouching; - SBYTE crouchdir; fixed_t crouchfactor; fixed_t crouchoffset; fixed_t crouchviewdelta; diff --git a/src/dobjtype.cpp b/src/dobjtype.cpp index 5798648cd..76233d4d5 100644 --- a/src/dobjtype.cpp +++ b/src/dobjtype.cpp @@ -328,6 +328,7 @@ PClass *PClass::CreateDerivedClass (FName name, unsigned int size) info->Class = type; info->GameFilter = GAME_Any; info->SpawnID = 0; + info->ConversationID = 0; info->DoomEdNum = -1; info->OwnedStates = NULL; info->NumOwnedStates = 0; @@ -423,6 +424,7 @@ void PClass::InitializeActorInfo () info->Class = this; info->GameFilter = GAME_Any; info->SpawnID = 0; + info->ConversationID = 0; info->DoomEdNum = -1; info->OwnedStates = NULL; info->NumOwnedStates = 0; diff --git a/src/doomdata.h b/src/doomdata.h index f190be37d..71e581e26 100644 --- a/src/doomdata.h +++ b/src/doomdata.h @@ -337,6 +337,7 @@ struct mapthinghexen_t }; class FArchive; +struct FDoomEdEntry; // Internal representation of a mapthing struct FMapThing @@ -346,9 +347,10 @@ struct FMapThing fixed_t y; fixed_t z; short angle; - short type; WORD SkillFilter; WORD ClassFilter; + short EdNum; + FDoomEdEntry *info; DWORD flags; int special; int args[5]; @@ -363,8 +365,6 @@ struct FMapThing short pitch; short roll; DWORD RenderStyle; - - void Serialize (FArchive &); }; @@ -429,10 +429,10 @@ struct FPlayerStart short angle, type; FPlayerStart() { } - FPlayerStart(const FMapThing *mthing) + FPlayerStart(const FMapThing *mthing, int pnum) : x(mthing->x), y(mthing->y), z(mthing->z), angle(mthing->angle), - type(mthing->type) + type(pnum) { } }; // Player spawn spots for deathmatch. diff --git a/src/doomstat.cpp b/src/doomstat.cpp index 27c50b81e..2ec72db9d 100644 --- a/src/doomstat.cpp +++ b/src/doomstat.cpp @@ -69,3 +69,4 @@ int SinglePlayerClass[MAXPLAYERS]; bool ToggleFullscreen; int BorderTopRefresh; +FString LumpFilterIWAD; diff --git a/src/doomstat.h b/src/doomstat.h index 565d15bd6..835ef73fb 100644 --- a/src/doomstat.h +++ b/src/doomstat.h @@ -172,6 +172,7 @@ extern bool playeringame[/*MAXPLAYERS*/]; // File handling stuff. extern FILE* debugfile; +extern FILE* hashfile; // if true, load all graphics at level load extern bool precache; @@ -249,4 +250,7 @@ EXTERN_CVAR (Int, compatflags); EXTERN_CVAR (Int, compatflags2); extern int i_compatflags, i_compatflags2, ii_compatflags, ii_compatflags2, ib_compatflags; +// Filters from AddAutoloadFiles(). Used to filter files from archives. +extern FString LumpFilterIWAD; + #endif diff --git a/src/doomtype.h b/src/doomtype.h index d201ca71d..98e6e7b65 100644 --- a/src/doomtype.h +++ b/src/doomtype.h @@ -46,6 +46,9 @@ #include "zstring.h" #include "vectors.h" +struct PClass; +typedef TMap FClassMap; + // Since this file is included by everything, it seems an appropriate place // to check the NOASM/USEASM macros. diff --git a/src/fragglescript/t_cmd.cpp b/src/fragglescript/t_cmd.cpp index 190c6b984..74f366357 100644 --- a/src/fragglescript/t_cmd.cpp +++ b/src/fragglescript/t_cmd.cpp @@ -169,6 +169,7 @@ void FS_EmulateCmd(char * string) { // No, this is not correct. But this is the way Legacy WADs expect it to be handled! if (players[i].mo != NULL) players[i].mo->ViewHeight = playerviewheight; + players[i].viewheight = playerviewheight; players[i].Uncrouch(); } while (sc.GetString()) diff --git a/src/fragglescript/t_func.cpp b/src/fragglescript/t_func.cpp index 4825fe06b..6583d1510 100644 --- a/src/fragglescript/t_func.cpp +++ b/src/fragglescript/t_func.cpp @@ -67,6 +67,7 @@ #include "v_font.h" #include "r_data/colormaps.h" #include "farchive.h" +#include "p_setup.h" static FRandom pr_script("FScript"); @@ -312,18 +313,24 @@ static int T_GetPlayerNum(const svalue_t &arg) // sectors directly by passing a negative value // //========================================================================== -int T_FindSectorFromTag(int tagnum,int startsector) +class FSSectorTagIterator : public FSectorTagIterator { - if (tagnum<=0) +public: + FSSectorTagIterator(int tag) + : FSectorTagIterator(tag) { - if (startsector<0) + if (tag < 0) { - if (tagnum==-32768) return 0; - if (-tagnumSector->tag : 0; // nullptr check + t_return.value.i = mo ? tagManager.GetFirstSectorTag(mo->Sector) : 0; // nullptr check } //========================================================================== @@ -1420,7 +1427,7 @@ void FParser::SF_PointToDist(void) double y = floatvalue(t_argv[3]) - floatvalue(t_argv[1]); t_return.type = svt_fixed; - t_return.value.f = FLOAT2FIXED(sqrt(x*x+y*y)*65536.f); + t_return.value.f = FLOAT2FIXED(sqrt(x*x+y*y)); } } @@ -1536,7 +1543,8 @@ void FParser::SF_StartSectorSound(void) tagnum = intvalue(t_argv[0]); int i=-1; - while ((i = T_FindSectorFromTag(tagnum, i)) >= 0) + FSSectorTagIterator itr(tagnum); + while ((i = itr.Next()) >= 0) { sector = §ors[i]; S_Sound(sector, CHAN_BODY, T_FindSound(stringvalue(t_argv[1])), 1.0f, ATTN_NORM); @@ -1595,7 +1603,8 @@ void FParser::SF_FloorHeight(void) // set all sectors with tag - while ((i = T_FindSectorFromTag(tagnum, i)) >= 0) + FSSectorTagIterator itr(tagnum); + while ((i = itr.Next()) >= 0) { if (sectors[i].floordata) continue; // don't move floors that are active! @@ -1612,7 +1621,7 @@ void FParser::SF_FloorHeight(void) } else { - secnum = T_FindSectorFromTag(tagnum, -1); + secnum = T_FindFirstSectorFromTag(tagnum); if(secnum < 0) { script_error("sector not found with tagnum %i\n", tagnum); @@ -1671,7 +1680,8 @@ void FParser::SF_MoveFloor(void) // move all sectors with tag - while ((secnum = T_FindSectorFromTag(tagnum, secnum)) >= 0) + FSSectorTagIterator itr(tagnum); + while ((secnum = itr.Next()) >= 0) { sec = §ors[secnum]; // Don't start a second thinker on the same floor @@ -1733,7 +1743,8 @@ void FParser::SF_CeilingHeight(void) dest = fixedvalue(t_argv[1]); // set all sectors with tag - while ((i = T_FindSectorFromTag(tagnum, i)) >= 0) + FSSectorTagIterator itr(tagnum); + while ((i = itr.Next()) >= 0) { if (sectors[i].ceilingdata) continue; // don't move ceilings that are active! @@ -1750,7 +1761,7 @@ void FParser::SF_CeilingHeight(void) } else { - secnum = T_FindSectorFromTag(tagnum, -1); + secnum = T_FindFirstSectorFromTag(tagnum); if(secnum < 0) { script_error("sector not found with tagnum %i\n", tagnum); @@ -1823,7 +1834,8 @@ void FParser::SF_MoveCeiling(void) silent=t_argc>4 ? intvalue(t_argv[4]):1; // move all sectors with tag - while ((secnum = T_FindSectorFromTag(tagnum, secnum)) >= 0) + FSSectorTagIterator itr(tagnum); + while ((secnum = itr.Next()) >= 0) { sec = §ors[secnum]; @@ -1851,7 +1863,7 @@ void FParser::SF_LightLevel(void) tagnum = intvalue(t_argv[0]); // argv is sector tag - secnum = T_FindSectorFromTag(tagnum, -1); + secnum = T_FindFirstSectorFromTag(tagnum); if(secnum < 0) { @@ -1865,7 +1877,8 @@ void FParser::SF_LightLevel(void) int i = -1; // set all sectors with tag - while ((i = T_FindSectorFromTag(tagnum, i)) >= 0) + FSSectorTagIterator itr(tagnum); + while ((i = itr.Next()) >= 0) { sectors[i].SetLightLevel(intvalue(t_argv[1])); } @@ -1984,7 +1997,8 @@ void FParser::SF_FadeLight(void) destlevel = intvalue(t_argv[1]); speed = t_argc>2 ? intvalue(t_argv[2]) : 1; - for (i = -1; (i = P_FindSectorFromTag(sectag,i)) >= 0;) + FSectorTagIterator it(sectag); + while ((i = it.Next()) >= 0) { if (!sectors[i].lightingdata) new DLightLevel(§ors[i],destlevel,speed); } @@ -2006,7 +2020,7 @@ void FParser::SF_FloorTexture(void) tagnum = intvalue(t_argv[0]); // argv is sector tag - secnum = T_FindSectorFromTag(tagnum, -1); + secnum = T_FindFirstSectorFromTag(tagnum); if(secnum < 0) { script_error("sector not found with tagnum %i\n", tagnum); return;} @@ -2019,7 +2033,8 @@ void FParser::SF_FloorTexture(void) FTextureID picnum = TexMan.GetTexture(t_argv[1].string, FTexture::TEX_Flat, FTextureManager::TEXMAN_Overridable); // set all sectors with tag - while ((i = T_FindSectorFromTag(tagnum, i)) >= 0) + FSSectorTagIterator itr(tagnum); + while ((i = itr.Next()) >= 0) { sectors[i].SetTexture(sector_t::floor, picnum); } @@ -2057,7 +2072,7 @@ void FParser::SF_SectorColormap(void) tagnum = intvalue(t_argv[0]); // argv is sector tag - secnum = T_FindSectorFromTag(tagnum, -1); + secnum = T_FindFirstSectorFromTag(tagnum); if(secnum < 0) { script_error("sector not found with tagnum %i\n", tagnum); return;} @@ -2068,7 +2083,8 @@ void FParser::SF_SectorColormap(void) { DWORD cm = R_ColormapNumForName(t_argv[1].value.s); - while ((i = T_FindSectorFromTag(tagnum, i)) >= 0) + FSSectorTagIterator itr(tagnum); + while ((i = itr.Next()) >= 0) { sectors[i].midmap=cm; sectors[i].heightsec=§ors[i]; @@ -2094,7 +2110,7 @@ void FParser::SF_CeilingTexture(void) tagnum = intvalue(t_argv[0]); // argv is sector tag - secnum = T_FindSectorFromTag(tagnum, -1); + secnum = T_FindFirstSectorFromTag(tagnum); if(secnum < 0) { script_error("sector not found with tagnum %i\n", tagnum); return;} @@ -2107,7 +2123,8 @@ void FParser::SF_CeilingTexture(void) FTextureID picnum = TexMan.GetTexture(t_argv[1].string, FTexture::TEX_Flat, FTextureManager::TEXMAN_Overridable); // set all sectors with tag - while ((i = T_FindSectorFromTag(tagnum, i)) >= 0) + FSSectorTagIterator itr(tagnum); + while ((i = itr.Next()) >= 0) { sectors[i].SetTexture(sector_t::ceiling, picnum); } @@ -2210,9 +2227,6 @@ void FParser::SF_RunCommand(void) // //========================================================================== -// any linedef type -extern void P_TranslateLineDef (line_t *ld, maplinedef_t *mld); - void FParser::SF_LineTrigger() { if (CheckArgs(1)) @@ -2281,9 +2295,11 @@ void FParser::SF_SetLineBlocking(void) { blocking=blocks[blocking]; int tag=intvalue(t_argv[0]); - for (int i = -1; (i = P_FindLineFromID(tag, i)) >= 0;) + FLineIdIterator itr(tag); + int i; + while ((i = itr.Next()) >= 0) { - lines[i].flags = (lines[i].flags & ~(ML_BLOCKING|ML_BLOCKEVERYTHING)) | blocking; + lines[i].flags = (lines[i].flags & ~(ML_BLOCKING | ML_BLOCKEVERYTHING)) | blocking; } } } @@ -2302,7 +2318,9 @@ void FParser::SF_SetLineMonsterBlocking(void) int blocking = intvalue(t_argv[1]) ? ML_BLOCKMONSTERS : 0; int tag=intvalue(t_argv[0]); - for (int i = -1; (i = P_FindLineFromID(tag, i)) >= 0;) + FLineIdIterator itr(tag); + int i; + while ((i = itr.Next()) >= 0) { lines[i].flags = (lines[i].flags & ~ML_BLOCKMONSTERS) | blocking; } @@ -2357,12 +2375,13 @@ void FParser::SF_SetLineTexture(void) texture = stringvalue(t_argv[3]); texturenum = TexMan.GetTexture(texture, FTexture::TEX_Wall, FTextureManager::TEXMAN_Overridable); - for (i = -1; (i = P_FindLineFromID(tag, i)) >= 0;) + FLineIdIterator itr(tag); + while ((i = itr.Next()) >= 0) { // bad sidedef, Hexen just SEGV'd here! - if(lines[i].sidedef[side] != NULL) + if (lines[i].sidedef[side] != NULL) { - if (position >=0 && position <=2) + if (position >= 0 && position <= 2) { lines[i].sidedef[side]->SetTexture(position, texturenum); } @@ -2376,7 +2395,8 @@ void FParser::SF_SetLineTexture(void) int sections = intvalue(t_argv[3]); // set all sectors with tag - for (i = -1; (i = P_FindLineFromID(tag, i)) >= 0;) + FLineIdIterator itr(tag); + while ((i = itr.Next()) >= 0) { side_t *sided = lines[i].sidedef[side]; if(sided != NULL) @@ -4201,7 +4221,7 @@ void FParser::SF_SetColor(void) { tagnum = intvalue(t_argv[0]); - secnum = T_FindSectorFromTag(tagnum, -1); + secnum = T_FindFirstSectorFromTag(tagnum); if(secnum < 0) { @@ -4222,7 +4242,8 @@ void FParser::SF_SetColor(void) else return; // set all sectors with tag - while ((i = T_FindSectorFromTag(tagnum, i)) >= 0) + FSSectorTagIterator itr(tagnum); + while ((i = itr.Next()) >= 0) { sectors[i].ColorMap = GetSpecialLights (color, sectors[i].ColorMap->Fade, 0); } @@ -4291,7 +4312,7 @@ void FParser::SF_KillInSector() while ((mo=it.Next())) { - if (mo->flags3&MF3_ISMONSTER && mo->Sector->tag==tag) P_DamageMobj(mo, NULL, NULL, 1000000, NAME_Massacre); + if (mo->flags3&MF3_ISMONSTER && tagManager.SectorHasTag(mo->Sector, tag)) P_DamageMobj(mo, NULL, NULL, 1000000, NAME_Massacre); } } } @@ -4314,7 +4335,7 @@ void FParser::SF_SectorType(void) tagnum = intvalue(t_argv[0]); // argv is sector tag - secnum = T_FindSectorFromTag(tagnum, -1); + secnum = T_FindFirstSectorFromTag(tagnum); if(secnum < 0) { script_error("sector not found with tagnum %i\n", tagnum); return;} @@ -4327,7 +4348,8 @@ void FParser::SF_SectorType(void) int spec = intvalue(t_argv[1]); // set all sectors with tag - while ((i = T_FindSectorFromTag(tagnum, i)) >= 0) + FSSectorTagIterator itr(tagnum); + while ((i = itr.Next()) >= 0) { sectors[i].special = spec; } @@ -4355,18 +4377,17 @@ void FParser::SF_SetLineTrigger() id=intvalue(t_argv[0]); spec=intvalue(t_argv[1]); if (t_argc>2) tag=intvalue(t_argv[2]); - for (i = -1; (i = P_FindLineFromID (id, i)) >= 0; ) + FLineIdIterator itr(id); + while ((i = itr.Next()) >= 0) { - if (t_argc==2) tag=lines[i].id; maplinedef_t mld; - mld.special=spec; - mld.tag=tag; - mld.flags=0; + mld.special = spec; + mld.tag = tag; + mld.flags = 0; int f = lines[i].flags; - P_TranslateLineDef(&lines[i], &mld); - lines[i].id=tag; - lines[i].flags = (lines[i].flags & (ML_MONSTERSCANACTIVATE|ML_REPEAT_SPECIAL|ML_SPAC_MASK|ML_FIRSTSIDEONLY)) | - (f & ~(ML_MONSTERSCANACTIVATE|ML_REPEAT_SPECIAL|ML_SPAC_MASK|ML_FIRSTSIDEONLY)); + P_TranslateLineDef(&lines[i], &mld); + lines[i].flags = (lines[i].flags & (ML_MONSTERSCANACTIVATE | ML_REPEAT_SPECIAL | ML_SPAC_MASK | ML_FIRSTSIDEONLY)) | + (f & ~(ML_MONSTERSCANACTIVATE | ML_REPEAT_SPECIAL | ML_SPAC_MASK | ML_FIRSTSIDEONLY)); } } @@ -4375,33 +4396,13 @@ void FParser::SF_SetLineTrigger() //========================================================================== // -// new for GZDoom: Changes a sector's tag -// (I only need this because MAP02 in RTC-3057 has some issues with the GL -// renderer that I can't fix without the scripts. But loading a FS on top on -// ACS still works so I can hack around it with this.) +// // //========================================================================== void FParser::SF_ChangeTag() { - if (CheckArgs(2)) - { - for (int secnum = -1; (secnum = P_FindSectorFromTag (t_argv[0].value.i, secnum)) >= 0; ) - { - sectors[secnum].tag=t_argv[1].value.i; - } - - // Recreate the hash tables - int i; - - for (i=numsectors; --i>=0; ) sectors[i].firsttag = -1; - for (i=numsectors; --i>=0; ) - { - int j = (unsigned) sectors[i].tag % (unsigned) numsectors; - sectors[i].nexttag = sectors[j].firsttag; - sectors[j].firsttag = i; - } - } + // Development garbage! } diff --git a/src/fragglescript/t_script.cpp b/src/fragglescript/t_script.cpp index 09c65d073..98911a418 100644 --- a/src/fragglescript/t_script.cpp +++ b/src/fragglescript/t_script.cpp @@ -452,9 +452,9 @@ bool DFraggleThinker::wait_finished(DRunningScript *script) case wt_tagwait: { - int secnum = -1; - - while ((secnum = P_FindSectorFromTag(script->wait_data, secnum)) >= 0) + int secnum; + FSectorTagIterator itr(script->wait_data); + while ((secnum = itr.Next()) >= 0) { sector_t *sec = §ors[secnum]; if(sec->floordata || sec->ceilingdata || sec->lightingdata) diff --git a/src/g_doom/a_doomweaps.cpp b/src/g_doom/a_doomweaps.cpp index 05e1677c6..6dbf3d1ec 100644 --- a/src/g_doom/a_doomweaps.cpp +++ b/src/g_doom/a_doomweaps.cpp @@ -584,7 +584,6 @@ DEFINE_ACTION_FUNCTION_PARAMS(AActor, A_BFGSpray) int j; int damage; angle_t an; - AActor *thingToHit; AActor *linetarget; ACTION_PARAM_START(7); @@ -615,42 +614,42 @@ DEFINE_ACTION_FUNCTION_PARAMS(AActor, A_BFGSpray) // self->target is the originator (player) of the missile P_AimLineAttack(self->target, an, distance, &linetarget, vrange); - if (!linetarget) - continue; - - AActor *spray = Spawn(spraytype, linetarget->x, linetarget->y, - linetarget->z + (linetarget->height >> 2), ALLOW_REPLACE); - - if (spray) + if (linetarget != NULL) { - if (spray->flags6 & MF6_MTHRUSPECIES && spray->GetSpecies() == linetarget->GetSpecies()) + AActor *spray = Spawn(spraytype, linetarget->x, linetarget->y, + linetarget->z + (linetarget->height >> 2), ALLOW_REPLACE); + + int dmgFlags = 0; + FName dmgType = NAME_BFGSplash; + + if (spray != NULL) { - spray->Destroy(); // [MC] Remove it because technically, the spray isn't trying to "hit" them. - continue; + if (spray->flags6 & MF6_MTHRUSPECIES && spray->GetSpecies() == linetarget->GetSpecies()) + { + spray->Destroy(); // [MC] Remove it because technically, the spray isn't trying to "hit" them. + continue; + } + if (spray->flags5 & MF5_PUFFGETSOWNER) spray->target = self->target; + if (spray->flags3 & MF3_FOILINVUL) dmgFlags |= DMG_FOILINVUL; + if (spray->flags7 & MF7_FOILBUDDHA) dmgFlags |= DMG_FOILBUDDHA; + dmgType = spray->DamageType; } - if (spray->flags5 & MF5_PUFFGETSOWNER) - spray->target = self->target; - } - if (defdamage == 0) - { - damage = 0; - for (j = 0; j < damagecnt; ++j) - damage += (pr_bfgspray() & 7) + 1; - } - else - { - // if this is used, damagecnt will be ignored - damage = defdamage; - } + if (defdamage == 0) + { + damage = 0; + for (j = 0; j < damagecnt; ++j) + damage += (pr_bfgspray() & 7) + 1; + } + else + { + // if this is used, damagecnt will be ignored + damage = defdamage; + } - int dmgFlagPass = 0; - dmgFlagPass += (spray != NULL && (spray->flags3 & MF3_FOILINVUL)) ? DMG_FOILINVUL : 0; //[MC]Because the original foilinvul wasn't working. - dmgFlagPass += (spray != NULL && (spray->flags7 & MF7_FOILBUDDHA)) ? DMG_FOILBUDDHA : 0; - thingToHit = linetarget; - int newdam = P_DamageMobj (thingToHit, self->target, self->target, damage, spray != NULL? FName(spray->DamageType) : FName(NAME_BFGSplash), - dmgFlagPass); - P_TraceBleed (newdam > 0 ? newdam : damage, thingToHit, self->target); + int newdam = P_DamageMobj(linetarget, self->target, self->target, damage, dmgType, dmgFlags); + P_TraceBleed(newdam > 0 ? newdam : damage, linetarget, self->target); + } } } diff --git a/src/g_doomedmap.cpp b/src/g_doomedmap.cpp new file mode 100644 index 000000000..45224329d --- /dev/null +++ b/src/g_doomedmap.cpp @@ -0,0 +1,277 @@ +/* +** g_doomedmap.cpp +** +**--------------------------------------------------------------------------- +** Copyright 1998-2015 Randy Heit +** Copyright 2015 Christoph Oelckers +** All rights reserved. +** +** Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions +** are met: +** +** 1. Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** 2. Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in the +** documentation and/or other materials provided with the distribution. +** 3. The name of the author may not be used to endorse or promote products +** derived from this software without specific prior written permission. +** +** THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR +** IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +** OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +** IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, +** INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +** NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +** THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +**--------------------------------------------------------------------------- +** +** +*/ + +#include "info.h" +#include "p_lnspec.h" +#include "m_fixed.h" +#include "c_dispatch.h" +#include "templates.h" +#include "cmdlib.h" +#include "g_level.h" +#include "v_text.h" +#include "i_system.h" + + +const char *SpecialMapthingNames[] = { + "$Player1Start", + "$Player2Start", + "$Player3Start", + "$Player4Start", + "$Player5Start", + "$Player6Start", + "$Player7Start", + "$Player8Start", + "$DeathmatchStart", + "$SSeqOverride", + "$PolyAnchor", + "$PolySpawn", + "$PolySpawnCrush", + "$PolySpawnHurt", + "$SlopeFloorPointLine", + "$SlopeCeilingPointLine", + "$SetFloorSlope", + "$SetCeilingSlope", + "$VavoomFloor", + "$VavoomCeiling", + "$CopyFloorPlane", + "$CopyCeilingPlane", + "$VertexFloorZ", + "$VertexCeilingZ", + +}; +//========================================================================== +// +// Stuff that's only valid during definition time +// +//========================================================================== + +struct MapinfoEdMapItem +{ + FName classname; // DECORATE is read after MAPINFO so we do not have the actual classes available here yet. + short special; + bool argsdefined; + int args[5]; + // These are for error reporting. We must store the file information because it's no longer available when these items get resolved. + FString filename; + int linenum; +}; + +typedef TMap IdMap; + +static IdMap DoomEdFromMapinfo; + +//========================================================================== +// +// +//========================================================================== + +FDoomEdMap DoomEdMap; + +static int STACK_ARGS sortnums (const void *a, const void *b) +{ + return (*(const FDoomEdMap::Pair**)a)->Key - (*(const FDoomEdMap::Pair**)b)->Key; +} + +CCMD (dumpmapthings) +{ + TArray infos(DoomEdMap.CountUsed()); + FDoomEdMap::Iterator it(DoomEdMap); + FDoomEdMap::Pair *pair; + + while (it.NextPair(pair)) + { + infos.Push(pair); + } + + if (infos.Size () == 0) + { + Printf ("No map things registered\n"); + } + else + { + qsort (&infos[0], infos.Size (), sizeof(FDoomEdMap::Pair*), sortnums); + + for (unsigned i = 0; i < infos.Size (); ++i) + { + if (infos[i]->Value.Type != NULL) + { + Printf("%6d %s\n", infos[i]->Key, infos[i]->Value.Type->TypeName.GetChars()); + } + else if (infos[i]->Value.Special > 0) + { + Printf("%6d %s\n", infos[i]->Key, SpecialMapthingNames[infos[i]->Value.Special - 1]); + } + else + { + Printf("%6d none", infos[i]->Key); + } + + } + } +} + + +void FMapInfoParser::ParseDoomEdNums() +{ + TMap defined; + int error = 0; + + MapinfoEdMapItem editem; + + editem.filename = sc.ScriptName; + + ParseOpenBrace(); + while (true) + { + if (sc.CheckString("}")) return; + else if (sc.CheckNumber()) + { + int ednum = sc.Number; + sc.MustGetStringName("="); + sc.MustGetString(); + + bool *def = defined.CheckKey(ednum); + if (def != NULL) + { + sc.ScriptMessage("Editor Number %d defined more than once", ednum); + error++; + } + defined[ednum] = true; + if (sc.String[0] == '$') + { + // todo: add special stuff like playerstarts and sound sequence overrides here, too. + editem.classname = NAME_None; + editem.special = sc.MustMatchString(SpecialMapthingNames) + 1; // todo: assign proper constants + } + else + { + editem.classname = sc.String; + editem.special = -1; + } + memset(editem.args, 0, sizeof(editem.args)); + editem.argsdefined = false; + + int minargs = 0; + int maxargs = 5; + FString specialname; + if (sc.CheckString(",")) + { + editem.argsdefined = true; // mark args as used - if this is done we need to prevent assignment of map args in P_SpawnMapThing. + if (editem.special < 0) editem.special = 0; + if (!sc.CheckNumber()) + { + sc.MustGetString(); + specialname = sc.String; // save for later error reporting. + editem.special = P_FindLineSpecial(sc.String, &minargs, &maxargs); + if (editem.special == 0 || minargs == -1) + { + sc.ScriptMessage("Invalid special %s for Editor Number %d", sc.String, ednum); + error++; + minargs = 0; + maxargs = 5; + } + if (!sc.CheckString(",")) + { + // special case: Special without arguments + if (minargs != 0) + { + sc.ScriptMessage("Incorrect number of args for special %s, min = %d, max = %d, found = 0", specialname.GetChars(), minargs, maxargs); + error++; + } + DoomEdFromMapinfo.Insert(ednum, editem); + continue; + } + sc.MustGetNumber(); + } + int i = 0; + while (i < 5) + { + editem.args[i] = sc.Number; + i++; + if (!sc.CheckString(",")) break; + sc.MustGetNumber(); + } + if (specialname.IsNotEmpty() && (i < minargs || i > maxargs)) + { + sc.ScriptMessage("Incorrect number of args for special %s, min = %d, max = %d, found = %d", specialname.GetChars(), minargs, maxargs, i); + error++; + } + } + DoomEdFromMapinfo.Insert(ednum, editem); + } + else + { + sc.ScriptError("Number expected"); + } + } + if (error > 0) + { + sc.ScriptError("%d errors encountered in DoomEdNum definition"); + } +} + +void InitActorNumsFromMapinfo() +{ + DoomEdMap.Clear(); + IdMap::Iterator it(DoomEdFromMapinfo); + IdMap::Pair *pair; + int error = 0; + + while (it.NextPair(pair)) + { + const PClass *cls = NULL; + if (pair->Value.classname != NAME_None) + { + cls = PClass::FindClass(pair->Value.classname); + if (cls == NULL) + { + Printf(TEXTCOLOR_RED "Script error, \"%s\" line %d:\nUnknown actor class %s\n", + pair->Value.filename.GetChars(), pair->Value.linenum, pair->Value.classname.GetChars()); + error++; + } + } + FDoomEdEntry ent; + ent.Type = cls; + ent.Special = pair->Value.special; + ent.ArgsDefined = pair->Value.argsdefined; + memcpy(ent.Args, pair->Value.args, sizeof(ent.Args)); + DoomEdMap.Insert(pair->Key, ent); + } + if (error > 0) + { + I_Error("%d unknown actor classes found", error); + } + DoomEdFromMapinfo.Clear(); // we do not need this any longer +} diff --git a/src/g_game.cpp b/src/g_game.cpp index c442ee875..8101ca23d 100644 --- a/src/g_game.cpp +++ b/src/g_game.cpp @@ -2516,7 +2516,7 @@ bool G_ProcessIFFDemo (FString &mapname) id = ReadLong (&demo_p); if (id != ZDEM_ID) { - Printf ("Not a ZDoom demo file!\n"); + Printf ("Not a " GAMENAME " demo file!\n"); return true; } @@ -2541,12 +2541,12 @@ bool G_ProcessIFFDemo (FString &mapname) demover = ReadWord (&demo_p); // ZDoom version demo was created with if (demover < MINDEMOVERSION) { - Printf ("Demo requires an older version of ZDoom!\n"); + Printf ("Demo requires an older version of " GAMENAME "!\n"); //return true; } if (ReadWord (&demo_p) > DEMOGAMEVERSION) // Minimum ZDoom version { - Printf ("Demo requires a newer version of ZDoom!\n"); + Printf ("Demo requires a newer version of " GAMENAME "!\n"); return true; } if (demover >= 0x21a) @@ -2673,7 +2673,7 @@ void G_DoPlayDemo (void) if (ReadLong (&demo_p) != FORM_ID) { - const char *eek = "Cannot play non-ZDoom demos.\n"; + const char *eek = "Cannot play non-" GAMENAME " demos.\n"; C_ForgetCVars(); M_Free(demobuffer); diff --git a/src/g_hexen/a_flies.cpp b/src/g_hexen/a_flies.cpp new file mode 100644 index 000000000..3c677d5cb --- /dev/null +++ b/src/g_hexen/a_flies.cpp @@ -0,0 +1,106 @@ +static FRandom pr_fly("GetOffMeFly"); + +//=========================================================================== +// +// FindCorpse +// +// Finds a corpse to buzz around. We can't use a blockmap check because +// corpses generally aren't linked into the blockmap. +// +//=========================================================================== + +static AActor *FindCorpse(AActor *fly, sector_t *sec, int recurselimit) +{ + AActor *fallback = NULL; + sec->validcount = validcount; + + // Search the current sector + for (AActor *check = sec->thinglist; check != NULL; check = check->snext) + { + if (check == fly) + continue; + if (!(check->flags & MF_CORPSE)) + continue; + if (!P_CheckSight(fly, check)) + continue; + fallback = check; + if (pr_fly(2)) // 50% chance to try to pick a different corpse + continue; + return check; + } + if (--recurselimit <= 0 || (fallback != NULL && pr_fly(2))) + { + return fallback; + } + // Try neighboring sectors + for (int i = 0; i < sec->linecount; ++i) + { + line_t *line = sec->lines[i]; + sector_t *sec2 = (line->frontsector == sec) ? line->backsector : line->frontsector; + if (sec2 != NULL && sec2->validcount != validcount) + { + AActor *neighbor = FindCorpse(fly, sec2, recurselimit); + if (neighbor != NULL) + { + return neighbor; + } + } + } + return fallback; +} + +DEFINE_ACTION_FUNCTION(AActor, A_FlySearch) +{ + // The version from the retail beta is not so great for general use: + // 1. Pick one of the first fifty thinkers at random. + // 2. Starting from that thinker, find one that is an actor, not itself, + // and within sight. Give up after 100 sequential thinkers. + // It's effectively useless if there are more than 150 thinkers on a map. + // + // So search the sectors instead. We can't potentially find something all + // the way on the other side of the map and we can't find invisible corpses, + // but at least we aren't crippled on maps with lots of stuff going on. + validcount++; + AActor *other = FindCorpse(self, self->Sector, 5); + if (other != NULL) + { + self->target = other; + self->SetState(self->FindState("Buzz")); + } +} + +DEFINE_ACTION_FUNCTION(AActor, A_FlyBuzz) +{ + AActor *targ = self->target; + + if (targ == NULL || !(targ->flags & MF_CORPSE) || pr_fly() < 5) + { + self->SetIdle(); + return; + } + + angle_t ang = R_PointToAngle2(self->x, self->y, targ->x, targ->y); + self->angle = ang; + self->args[0]++; + ang >>= ANGLETOFINESHIFT; + if (!P_TryMove(self, self->x + 6 * finecosine[ang], self->y + 6 * finesine[ang], true)) + { + self->SetIdle(true); + return; + } + if (self->args[0] & 2) + { + self->velx += (pr_fly() - 128) << BOBTOFINESHIFT; + self->vely += (pr_fly() - 128) << BOBTOFINESHIFT; + } + int zrand = pr_fly(); + if (targ->z + 5*FRACUNIT < self->z && zrand > 150) + { + zrand = -zrand; + } + self->velz = zrand << BOBTOFINESHIFT; + if (pr_fly() < 40) + { + S_Sound(self, CHAN_VOICE, self->ActiveSound, 0.5f, ATTN_STATIC); + } +} diff --git a/src/g_hexen/a_hexenmisc.cpp b/src/g_hexen/a_hexenmisc.cpp index fa07a6759..1141f381f 100644 --- a/src/g_hexen/a_hexenmisc.cpp +++ b/src/g_hexen/a_hexenmisc.cpp @@ -38,6 +38,7 @@ #include "a_fighterquietus.cpp" #include "a_firedemon.cpp" #include "a_flechette.cpp" +#include "a_flies.cpp" #include "a_fog.cpp" #include "a_healingradius.cpp" #include "a_heresiarch.cpp" diff --git a/src/g_level.cpp b/src/g_level.cpp index 60609050a..713205f6f 100644 --- a/src/g_level.cpp +++ b/src/g_level.cpp @@ -1229,6 +1229,7 @@ void G_FinishTravel () pawn->lastenemy = NULL; pawn->player->mo = pawn; pawn->player->camera = pawn; + pawn->player->viewheight = pawn->ViewHeight; pawn->flags2 &= ~MF2_BLASTED; DObject::StaticPointerSubstitution (oldpawn, pawn); oldpawn->Destroy(); @@ -1457,7 +1458,9 @@ void G_SerializeLevel (FArchive &arc, bool hubLoad) if (SaveVersion >= 3313) { - arc << level.nextmusic; + // This is a player property now + int nextmusic; + arc << nextmusic; } // Hub transitions must keep the current total time diff --git a/src/g_level.h b/src/g_level.h index 6e07b0c74..496c5c0f4 100644 --- a/src/g_level.h +++ b/src/g_level.h @@ -104,6 +104,9 @@ struct FMapInfoParser void ParseIntermissionAction(FIntermissionDescriptor *Desc); void ParseIntermission(); + void ParseDoomEdNums(); + void ParseSpawnNums(); + void ParseConversationIDs(); void ParseAMColors(bool); FName CheckEndSequence(); FName ParseEndGame(); @@ -336,6 +339,7 @@ struct level_info_t TArray specialactions; TArray PrecacheSounds; + TArray PrecacheTextures; level_info_t() { @@ -412,7 +416,6 @@ struct FLevelLocals int musicorder; int cdtrack; unsigned int cdid; - int nextmusic; // For MUSINFO purposes FTextureID skytexture1; FTextureID skytexture2; diff --git a/src/g_mapinfo.cpp b/src/g_mapinfo.cpp index 6d49b9c17..4d7b3c7d2 100644 --- a/src/g_mapinfo.cpp +++ b/src/g_mapinfo.cpp @@ -1065,6 +1065,25 @@ DEFINE_MAP_OPTION(PrecacheSounds, true) } while (parse.sc.CheckString(",")); } +DEFINE_MAP_OPTION(PrecacheTextures, true) +{ + parse.ParseAssign(); + + do + { + parse.sc.MustGetString(); + FTextureID tex = TexMan.CheckForTexture(parse.sc.String, FTexture::TEX_Wall, FTextureManager::TEXMAN_Overridable|FTextureManager::TEXMAN_TryAny|FTextureManager::TEXMAN_ReturnFirst); + if (!tex.isValid()) + { + parse.sc.ScriptMessage("Unknown texture \"%s\"", parse.sc.String); + } + else + { + info->PrecacheTextures.Push(tex); + } + } while (parse.sc.CheckString(",")); +} + DEFINE_MAP_OPTION(redirect, true) { parse.ParseAssign(); @@ -1857,6 +1876,42 @@ void FMapInfoParser::ParseMapInfo (int lump, level_info_t &gamedefaults, level_i sc.ScriptError("intermission definitions not supported with old MAPINFO syntax"); } } + else if (sc.Compare("doomednums")) + { + if (format_type != FMT_Old) + { + format_type = FMT_New; + ParseDoomEdNums(); + } + else + { + sc.ScriptError("doomednums definitions not supported with old MAPINFO syntax"); + } + } + else if (sc.Compare("spawnnums")) + { + if (format_type != FMT_Old) + { + format_type = FMT_New; + ParseSpawnNums(); + } + else + { + sc.ScriptError("spawnnums definitions not supported with old MAPINFO syntax"); + } + } + else if (sc.Compare("conversationids")) + { + if (format_type != FMT_Old) + { + format_type = FMT_New; + ParseConversationIDs(); + } + else + { + sc.ScriptError("conversationids definitions not supported with old MAPINFO syntax"); + } + } else if (sc.Compare("automap") || sc.Compare("automap_overlay")) { if (format_type != FMT_Old) diff --git a/src/g_shared/a_artifacts.cpp b/src/g_shared/a_artifacts.cpp index 14b270435..87491073e 100644 --- a/src/g_shared/a_artifacts.cpp +++ b/src/g_shared/a_artifacts.cpp @@ -1757,6 +1757,7 @@ IMPLEMENT_CLASS(APowerRegeneration) void APowerRegeneration::DoEffect() { + Super::DoEffect(); if (Owner != NULL && Owner->health > 0 && (level.time & 31) == 0) { if (P_GiveBody(Owner, Strength/FRACUNIT)) diff --git a/src/g_shared/a_pickups.cpp b/src/g_shared/a_pickups.cpp index 2888ea2b6..5eda53ad6 100644 --- a/src/g_shared/a_pickups.cpp +++ b/src/g_shared/a_pickups.cpp @@ -593,7 +593,7 @@ bool AInventory::HandlePickup (AInventory *item) { if (item->GetClass() == GetClass()) { - if (Amount < MaxAmount || sv_unlimited_pickup) + if (Amount < MaxAmount || (sv_unlimited_pickup && !item->ShouldStay())) { if (Amount > 0 && Amount + item->Amount < 0) { diff --git a/src/g_shared/a_skies.cpp b/src/g_shared/a_skies.cpp index 616b87c9e..d62a2a07b 100644 --- a/src/g_shared/a_skies.cpp +++ b/src/g_shared/a_skies.cpp @@ -119,7 +119,9 @@ void ASkyCamCompat::BeginPlay () // Finally, skyboxify all tagged sectors // This involves changing their texture to the sky flat, because while // EE works with any texture for its skybox portals, ZDoom doesn't. - for (int secnum =-1; (secnum = P_FindSectorFromTag (skybox_id, secnum)) != -1; ) + FSectorTagIterator it(skybox_id); + int secnum; + while ((secnum = it.Next()) >= 0) { // plane: 0=floor, 1=ceiling, 2=both if (refline->args[2] == 1 || refline->args[2] == 2) diff --git a/src/g_shared/shared_sbar.cpp b/src/g_shared/shared_sbar.cpp index d8e113824..c0442fc74 100644 --- a/src/g_shared/shared_sbar.cpp +++ b/src/g_shared/shared_sbar.cpp @@ -1502,7 +1502,7 @@ void DBaseStatusBar::DrawTopStuff (EHudState state) { screen->DrawText (SmallFont, CR_TAN, 0, ST_Y - 40 * CleanYfac, "Demo was recorded with a different version\n" - "of ZDoom. Expect it to go out of sync.", + "of " GAMENAME ". Expect it to go out of sync.", DTA_CleanNoMove, true, TAG_DONE); } diff --git a/src/g_strife/a_strifestuff.cpp b/src/g_strife/a_strifestuff.cpp index 95b0030a0..1edea19fa 100644 --- a/src/g_strife/a_strifestuff.cpp +++ b/src/g_strife/a_strifestuff.cpp @@ -636,7 +636,7 @@ DEFINE_ACTION_FUNCTION(AActor, A_CheckTerrain) } else if ((sec->special & 0xFF) == Scroll_StrifeCurrent) { - int anglespeed = sec->tag - 100; + int anglespeed = tagManager.GetFirstSectorTag(sec) - 100; fixed_t speed = (anglespeed % 10) << (FRACBITS - 4); angle_t finean = (anglespeed / 10) << (32-3); finean >>= ANGLETOFINESHIFT; diff --git a/src/gameconfigfile.cpp b/src/gameconfigfile.cpp index deb870774..30dc2276d 100644 --- a/src/gameconfigfile.cpp +++ b/src/gameconfigfile.cpp @@ -61,6 +61,7 @@ extern HWND Window; #include "doomstat.h" #include "i_system.h" #include "gi.h" +#include "d_main.h" EXTERN_CVAR (Bool, con_centernotify) EXTERN_CVAR (Int, msg0color) @@ -75,7 +76,7 @@ EXTERN_CVAR (Color, am_cdwallcolor) EXTERN_CVAR (Float, spc_amp) EXTERN_CVAR (Bool, wi_percents) -FGameConfigFile::FGameConfigFile () +FGameConfigFile::FGameConfigFile (FIWadManager *iwad_man) { #ifdef __APPLE__ FString user_docs, user_app_support, local_app_support; @@ -83,16 +84,10 @@ FGameConfigFile::FGameConfigFile () FString pathname; OkayToWrite = false; // Do not allow saving of the config before DoGameSetup() - bMigrating = false; bModSetup = false; pathname = GetConfigPath (true); ChangePathName (pathname); - LoadConfigFile (MigrateStub, NULL); - - if (!HaveSections ()) - { // Config file not found; try the old one - MigrateOldConfig (); - } + LoadConfigFile (); // If zdoom.ini was read from the program directory, switch // to the user directory now. If it was read from the user @@ -169,28 +164,49 @@ FGameConfigFile::FGameConfigFile () // Create auto-load sections, so users know what's available. // Note that this totem pole is the reverse of the order that // they will appear in the file. - CreateSectionAtStart("Harmony.Autoload"); - CreateSectionAtStart("UrbanBrawl.Autoload"); - CreateSectionAtStart("Chex3.Autoload"); - CreateSectionAtStart("Chex1.Autoload"); - CreateSectionAtStart("Chex.Autoload"); - CreateSectionAtStart("Strife.Autoload"); - CreateSectionAtStart("HexenDK.Autoload"); - CreateSectionAtStart("Hexen.Autoload"); - CreateSectionAtStart("HereticSR.Autoload"); - CreateSectionAtStart("Heretic.Autoload"); - CreateSectionAtStart("FreeDM.Autoload"); - CreateSectionAtStart("Freedoom2.Autoload"); - CreateSectionAtStart("Freedoom1.Autoload"); - CreateSectionAtStart("Freedoom.Autoload"); - CreateSectionAtStart("Plutonia.Autoload"); - CreateSectionAtStart("TNT.Autoload"); - CreateSectionAtStart("Doom2BFG.Autoload"); - CreateSectionAtStart("Doom2.Autoload"); - CreateSectionAtStart("DoomBFG.Autoload"); - CreateSectionAtStart("DoomU.Autoload"); - CreateSectionAtStart("Doom1.Autoload"); - CreateSectionAtStart("Doom.Autoload"); + + double last = 0; + if (SetSection ("LastRun")) + { + const char *lastver = GetValueForKey ("Version"); + if (lastver != NULL) last = atof(lastver); + } + + if (last < 211) + { + RenameSection("Chex3.Autoload", "chex.chex3.Autoload"); + RenameSection("Chex1.Autoload", "chex.chex1.Autoload"); + RenameSection("HexenDK.Autoload", "hexen.deathkings.Autoload"); + RenameSection("HereticSR.Autoload", "heretic.shadow.Autoload"); + RenameSection("FreeDM.Autoload", "doom.freedoom.freedm.Autoload"); + RenameSection("Freedoom2.Autoload", "doom.freedoom.phase2.Autoload"); + RenameSection("Freedoom1.Autoload", "doom.freedoom.phase1.Autoload"); + RenameSection("Freedoom.Autoload", "doom.freedoom.Autoload"); + RenameSection("DoomBFG.Autoload", "doom.doom1.bfg.Autoload"); + RenameSection("DoomU.Autoload", "doom.doom1.ultimate.Autoload"); + RenameSection("Doom1.Autoload", "doom.doom1.registered.Autoload"); + RenameSection("TNT.Autoload", "doom.doom2.tnt.Autoload"); + RenameSection("Plutonia.Autoload", "doom.doom2.plutonia.Autoload"); + RenameSection("Doom2BFG.Autoload", "doom.doom2.bfg.Autoload"); + RenameSection("Doom2.Autoload", "doom.doom2.commercial.Autoload"); + } + const FString *pAuto; + for (int num = 0; (pAuto = iwad_man->GetAutoname(num)) != NULL; num++) + { + if (!(iwad_man->GetIWadFlags(num) & GI_SHAREWARE)) // we do not want autoload sections for shareware IWADs (which may have an autoname for resource filtering) + { + FString workname = *pAuto; + + while (workname.IsNotEmpty()) + { + FString section = workname + ".Autoload"; + CreateSectionAtStart(section.GetChars()); + long dotpos = workname.LastIndexOf('.'); + if (dotpos < 0) break; + workname.Truncate(dotpos); + } + } + } CreateSectionAtStart("Global.Autoload"); // The same goes for auto-exec files. @@ -223,9 +239,10 @@ FGameConfigFile::FGameConfigFile () "# Wad files to automatically load depending on the game and IWAD you are\n" "# playing. You may have have files that are loaded for all similar IWADs\n" "# (the game) and files that are only loaded for particular IWADs. For example,\n" - "# any files listed under Doom.Autoload will be loaded for any version of Doom,\n" - "# but files listed under Doom2.Autoload will only load when you are\n" - "# playing Doom 2.\n\n"); + "# any files listed under 'doom.Autoload' will be loaded for any version of Doom,\n" + "# but files listed under 'doom.doom2.Autoload' will only load when you are\n" + "# playing a Doom 2 based game (doom2.wad, tnt.wad or plutonia.wad), and files listed under\n" + "# 'doom.doom2.commercial.Autoload' only when playing doom2.wad.\n\n"); } FGameConfigFile::~FGameConfigFile () @@ -237,18 +254,6 @@ void FGameConfigFile::WriteCommentHeader (FILE *file) const fprintf (file, "# This file was generated by " GAMENAME " %s on %s\n", GetVersionString(), myasctime()); } -void FGameConfigFile::MigrateStub (const char *pathname, FConfigFile *config, void *userdata) -{ - static_cast(config)->bMigrating = true; -} - -void FGameConfigFile::MigrateOldConfig () -{ - // Set default key bindings. These will be overridden - // by the bindings in the config file if it exists. - C_SetDefaultBindings (); -} - void FGameConfigFile::DoGlobalSetup () { if (SetSection ("GlobalSettings.Unknown")) @@ -361,10 +366,6 @@ void FGameConfigFile::DoGameSetup (const char *gamename) const char *key; const char *value; - if (bMigrating) - { - MigrateOldConfig (); - } sublen = countof(section) - 1 - mysnprintf (section, countof(section), "%s.", gamename); subsection = section + countof(section) - sublen - 1; section[countof(section) - 1] = '\0'; @@ -400,41 +401,6 @@ void FGameConfigFile::DoGameSetup (const char *gamename) ReadCVars (0); } - if (!bMigrating) - { - C_SetDefaultBindings (); - } - - strncpy (subsection, "Bindings", sublen); - if (SetSection (section)) - { - Bindings.UnbindAll(); - while (NextInSection (key, value)) - { - Bindings.DoBind (key, value); - } - } - - strncpy (subsection, "DoubleBindings", sublen); - if (SetSection (section)) - { - DoubleBindings.UnbindAll(); - while (NextInSection (key, value)) - { - DoubleBindings.DoBind (key, value); - } - } - - strncpy (subsection, "AutomapBindings", sublen); - if (SetSection (section)) - { - AutomapBindings.UnbindAll(); - while (NextInSection (key, value)) - { - AutomapBindings.DoBind (key, value); - } - } - strncpy (subsection, "ConsoleAliases", sublen); if (SetSection (section)) { @@ -455,6 +421,39 @@ void FGameConfigFile::DoGameSetup (const char *gamename) OkayToWrite = true; } +// Moved from DoGameSetup so that it can happen after wads are loaded +void FGameConfigFile::DoKeySetup(const char *gamename) +{ + static const struct { const char *label; FKeyBindings *bindings; } binders[] = + { + { "Bindings", &Bindings }, + { "DoubleBindings", &DoubleBindings }, + { "AutomapBindings", &AutomapBindings }, + { NULL, NULL } + }; + const char *key, *value; + + sublen = countof(section) - 1 - mysnprintf(section, countof(section), "%s.", gamename); + subsection = section + countof(section) - sublen - 1; + section[countof(section) - 1] = '\0'; + + C_SetDefaultBindings (); + + for (int i = 0; binders[i].label != NULL; ++i) + { + strncpy(subsection, binders[i].label, sublen); + if (SetSection(section)) + { + FKeyBindings *bindings = binders[i].bindings; + bindings->UnbindAll(); + while (NextInSection(key, value)) + { + bindings->DoBind(key, value); + } + } + } +} + // Like DoGameSetup(), but for mod-specific cvars. // Called after CVARINFO has been parsed. void FGameConfigFile::DoModSetup(const char *gamename) @@ -628,41 +627,20 @@ void FGameConfigFile::AddAutoexec (DArgs *list, const char *game) mysnprintf (section, countof(section), "%s.AutoExec", game); - if (bMigrating) + // If .AutoExec section does not exist, create it + // with a default autoexec.cfg file present. + CreateStandardAutoExec(section, false); + // Run any files listed in the .AutoExec section + if (!SectionIsEmpty()) { - FBaseCVar *autoexec = FindCVar ("autoexec", NULL); - - if (autoexec != NULL) + while (NextInSection (key, value)) { - UCVarValue val; - char *path; - - val = autoexec->GetGenericRep (CVAR_String); - path = copystring (val.String); - delete autoexec; - SetSection (section, true); - SetValueForKey ("Path", path); - list->AppendArg (path); - delete[] path; - } - } - else - { - // If .AutoExec section does not exist, create it - // with a default autoexec.cfg file present. - CreateStandardAutoExec(section, false); - // Run any files listed in the .AutoExec section - if (!SectionIsEmpty()) - { - while (NextInSection (key, value)) + if (stricmp (key, "Path") == 0 && *value != '\0') { - if (stricmp (key, "Path") == 0 && *value != '\0') + FString expanded_path = ExpandEnvVars(value); + if (FileExists(expanded_path)) { - FString expanded_path = ExpandEnvVars(value); - if (FileExists(expanded_path)) - { - list->AppendArg (ExpandEnvVars(value)); - } + list->AppendArg (ExpandEnvVars(value)); } } } @@ -673,13 +651,6 @@ void FGameConfigFile::SetRavenDefaults (bool isHexen) { UCVarValue val; - if (bMigrating) - { - con_centernotify.ResetToDefault (); - msg0color.ResetToDefault (); - color.ResetToDefault (); - } - val.Bool = false; wi_percents.SetGenericRepDefault (val, CVAR_Bool); val.Bool = true; diff --git a/src/gameconfigfile.h b/src/gameconfigfile.h index 74376b583..5862bb79e 100644 --- a/src/gameconfigfile.h +++ b/src/gameconfigfile.h @@ -38,15 +38,17 @@ #include "configfile.h" class DArgs; +class FIWadManager; class FGameConfigFile : public FConfigFile { public: - FGameConfigFile (); + FGameConfigFile (FIWadManager *iwad_man); ~FGameConfigFile (); void DoGlobalSetup (); void DoGameSetup (const char *gamename); + void DoKeySetup (const char *gamename); void DoModSetup (const char *gamename); void ArchiveGlobalData (); void ArchiveGameData (const char *gamename); @@ -59,13 +61,9 @@ protected: void CreateStandardAutoExec (const char *section, bool start); private: - static void MigrateStub (const char *pathname, FConfigFile *config, void *userdata); - - void MigrateOldConfig (); void SetRavenDefaults (bool isHexen); void ReadCVars (DWORD flags); - bool bMigrating; bool bModSetup; char section[64]; diff --git a/src/gi.cpp b/src/gi.cpp index b0edf2a04..ac3818870 100644 --- a/src/gi.cpp +++ b/src/gi.cpp @@ -335,7 +335,6 @@ void FMapInfoParser::ParseGameInfo() GAMEINFOKEY_INT(defaultrespawntime, "defaultrespawntime") GAMEINFOKEY_INT(defaultdropstyle, "defaultdropstyle") GAMEINFOKEY_STRING(Endoom, "endoom") - GAMEINFOKEY_INT(player5start, "player5start") GAMEINFOKEY_STRINGARRAY(quitmessages, "addquitmessages", 0, false) GAMEINFOKEY_STRINGARRAY(quitmessages, "quitmessages", 0, true) GAMEINFOKEY_STRING(mTitleColor, "menufontcolor_title") diff --git a/src/gi.h b/src/gi.h index d8d19a14b..490981f77 100644 --- a/src/gi.h +++ b/src/gi.h @@ -153,7 +153,6 @@ struct gameinfo_t int definventorymaxamount; int defaultrespawntime; int defaultdropstyle; - int player5start; DWORD pickupcolor; TArray quitmessages; FName mTitleColor; diff --git a/src/i_net.cpp b/src/i_net.cpp index d3958e1e1..5957846d2 100644 --- a/src/i_net.cpp +++ b/src/i_net.cpp @@ -319,7 +319,11 @@ void PacketGet (void) } else if (c > 0) { //The packet is not from any in-game node, so we might as well discard it. - Printf("Dropped packet: Unknown host (%s:%d)\n", inet_ntoa(fromaddress.sin_addr), fromaddress.sin_port); + // Don't show the message for disconnect notifications. + if (c != 2 || TransmitBuffer[0] != PRE_FAKE || TransmitBuffer[1] != PRE_DISCONNECT) + { + DPrintf("Dropped packet: Unknown host (%s:%d)\n", inet_ntoa(fromaddress.sin_addr), fromaddress.sin_port); + } doomcom.remotenode = -1; return; } diff --git a/src/info.cpp b/src/info.cpp index e26ac3b8e..21eb7896a 100644 --- a/src/info.cpp +++ b/src/info.cpp @@ -141,9 +141,6 @@ void FActorInfo::StaticInit () void FActorInfo::StaticSetActorNums () { - SpawnableThings.Clear(); - DoomEdMap.Empty (); - for (unsigned int i = 0; i < PClass::m_RuntimeActors.Size(); ++i) { PClass::m_RuntimeActors[i]->ActorInfo->RegisterIDs (); @@ -159,6 +156,15 @@ void FActorInfo::RegisterIDs () { const PClass *cls = PClass::FindClass(Class->TypeName); + // Conversation IDs have never been filtered by game so we cannot start doing that. + if (ConversationID > 0) + { + StrifeTypes[ConversationID] = cls; + if (cls != Class) + { + Printf(TEXTCOLOR_RED"Conversation ID %d refers to hidden class type '%s'\n", SpawnID, cls->TypeName.GetChars()); + } + } if (GameFilter == GAME_Any || (GameFilter & gameinfo.gametype)) { if (SpawnID > 0) @@ -171,23 +177,22 @@ void FActorInfo::RegisterIDs () } if (DoomEdNum != -1) { - DoomEdMap.AddType (DoomEdNum, cls); + FDoomEdEntry *oldent = DoomEdMap.CheckKey(DoomEdNum); + if (oldent != NULL && oldent->Special == -2) + { + Printf(TEXTCOLOR_RED"Editor number %d defined twice for classes '%s' and '%s'\n", DoomEdNum, cls->TypeName.GetChars(), oldent->Type->TypeName.GetChars()); + } + FDoomEdEntry ent; + memset(&ent, 0, sizeof(ent)); + ent.Type = cls; + ent.Special = -2; // use -2 instead of -1 so that we can recognize DECORATE defined entries and print a warning message if duplicates occur. + DoomEdMap.Insert(DoomEdNum, ent); if (cls != Class) { Printf(TEXTCOLOR_RED"Editor number %d refers to hidden class type '%s'\n", DoomEdNum, cls->TypeName.GetChars()); } } } - // Fill out the list for Chex Quest with Doom's actors - if (gameinfo.gametype == GAME_Chex && DoomEdMap.FindType(DoomEdNum) == NULL && - (GameFilter & GAME_Doom)) - { - DoomEdMap.AddType (DoomEdNum, Class, true); - if (cls != Class) - { - Printf(TEXTCOLOR_RED"Editor number %d refers to hidden class type '%s'\n", DoomEdNum, cls->TypeName.GetChars()); - } - } } //========================================================================== @@ -389,139 +394,6 @@ fixed_t *DmgFactors::CheckFactor(FName type) return pdf; } -//========================================================================== -// -// -//========================================================================== - -FDoomEdMap DoomEdMap; - -FDoomEdMap::FDoomEdEntry *FDoomEdMap::DoomEdHash[DOOMED_HASHSIZE]; - -FDoomEdMap::~FDoomEdMap() -{ - Empty(); -} - -void FDoomEdMap::AddType (int doomednum, const PClass *type, bool temporary) -{ - unsigned int hash = (unsigned int)doomednum % DOOMED_HASHSIZE; - FDoomEdEntry *entry = DoomEdHash[hash]; - while (entry && entry->DoomEdNum != doomednum) - { - entry = entry->HashNext; - } - if (entry == NULL) - { - entry = new FDoomEdEntry; - entry->HashNext = DoomEdHash[hash]; - entry->DoomEdNum = doomednum; - DoomEdHash[hash] = entry; - } - else if (!entry->temp) - { - Printf (PRINT_BOLD, "Warning: %s and %s both have doomednum %d.\n", - type->TypeName.GetChars(), entry->Type->TypeName.GetChars(), doomednum); - } - entry->temp = temporary; - entry->Type = type; -} - -void FDoomEdMap::DelType (int doomednum) -{ - unsigned int hash = (unsigned int)doomednum % DOOMED_HASHSIZE; - FDoomEdEntry **prev = &DoomEdHash[hash]; - FDoomEdEntry *entry = *prev; - while (entry && entry->DoomEdNum != doomednum) - { - prev = &entry->HashNext; - entry = entry->HashNext; - } - if (entry != NULL) - { - *prev = entry->HashNext; - delete entry; - } -} - -void FDoomEdMap::Empty () -{ - int bucket; - - for (bucket = 0; bucket < DOOMED_HASHSIZE; ++bucket) - { - FDoomEdEntry *probe = DoomEdHash[bucket]; - - while (probe != NULL) - { - FDoomEdEntry *next = probe->HashNext; - delete probe; - probe = next; - } - DoomEdHash[bucket] = NULL; - } -} - -const PClass *FDoomEdMap::FindType (int doomednum) const -{ - unsigned int hash = (unsigned int)doomednum % DOOMED_HASHSIZE; - FDoomEdEntry *entry = DoomEdHash[hash]; - while (entry && entry->DoomEdNum != doomednum) - entry = entry->HashNext; - return entry ? entry->Type : NULL; -} - -struct EdSorting -{ - const PClass *Type; - int DoomEdNum; -}; - -static int STACK_ARGS sortnums (const void *a, const void *b) -{ - return ((const EdSorting *)a)->DoomEdNum - - ((const EdSorting *)b)->DoomEdNum; -} - -void FDoomEdMap::DumpMapThings () -{ - TArray infos (PClass::m_Types.Size()); - int i; - - for (i = 0; i < DOOMED_HASHSIZE; ++i) - { - FDoomEdEntry *probe = DoomEdHash[i]; - - while (probe != NULL) - { - EdSorting sorting = { probe->Type, probe->DoomEdNum }; - infos.Push (sorting); - probe = probe->HashNext; - } - } - - if (infos.Size () == 0) - { - Printf ("No map things registered\n"); - } - else - { - qsort (&infos[0], infos.Size (), sizeof(EdSorting), sortnums); - - for (i = 0; i < (int)infos.Size (); ++i) - { - Printf ("%6d %s\n", - infos[i].DoomEdNum, infos[i].Type->TypeName.GetChars()); - } - } -} - -CCMD (dumpmapthings) -{ - FDoomEdMap::DumpMapThings (); -} - - static void SummonActor (int command, int command2, FCommandLine argv) { if (CheckCheatmode ()) diff --git a/src/info.h b/src/info.h index 13a8eb5e1..bdbb69940 100644 --- a/src/info.h +++ b/src/info.h @@ -266,7 +266,8 @@ struct FActorInfo FActorInfo *Replacee; int NumOwnedStates; BYTE GameFilter; - BYTE SpawnID; + WORD SpawnID; + WORD ConversationID; SWORD DoomEdNum; FStateLabels *StateList; DmgFactors *DamageFactors; @@ -278,34 +279,51 @@ struct FActorInfo TArray ForbiddenToPlayerClass; }; -class FDoomEdMap +struct FDoomEdEntry { -public: - ~FDoomEdMap(); - - const PClass *FindType (int doomednum) const; - void AddType (int doomednum, const PClass *type, bool temporary = false); - void DelType (int doomednum); - void Empty (); - - static void DumpMapThings (); - -private: - enum { DOOMED_HASHSIZE = 256 }; - - struct FDoomEdEntry - { - FDoomEdEntry *HashNext; - const PClass *Type; - int DoomEdNum; - bool temp; - }; - - static FDoomEdEntry *DoomEdHash[DOOMED_HASHSIZE]; + const PClass *Type; + short Special; + bool ArgsDefined; + int Args[5]; }; +enum ESpecialMapthings +{ + SMT_Player1Start = 1, + SMT_Player2Start, + SMT_Player3Start, + SMT_Player4Start, + SMT_Player5Start, + SMT_Player6Start, + SMT_Player7Start, + SMT_Player8Start, + SMT_DeathmatchStart, + SMT_SSeqOverride, + SMT_PolyAnchor, + SMT_PolySpawn, + SMT_PolySpawnCrush, + SMT_PolySpawnHurt, + SMT_SlopeFloorPointLine, + SMT_SlopeCeilingPointLine, + SMT_SetFloorSlope, + SMT_SetCeilingSlope, + SMT_VavoomFloor, + SMT_VavoomCeiling, + SMT_CopyFloorPlane, + SMT_CopyCeilingPlane, + SMT_VertexFloorZ, + SMT_VertexCeilingZ, + +}; + + +typedef TMap FDoomEdMap; + extern FDoomEdMap DoomEdMap; +void InitActorNumsFromMapinfo(); + + int GetSpriteIndex(const char * spritename, bool add = true); TArray &MakeStateNameList(const char * fname); void AddStateLight(FState *state, const char *lname); diff --git a/src/m_misc.cpp b/src/m_misc.cpp index 7f4fa482d..1369bdb52 100644 --- a/src/m_misc.cpp +++ b/src/m_misc.cpp @@ -410,9 +410,9 @@ CCMD (writeini) // M_LoadDefaults // -void M_LoadDefaults () +void M_LoadDefaults (FIWadManager *iwad_man) { - GameConfig = new FGameConfigFile; + GameConfig = new FGameConfigFile(iwad_man); GameConfig->DoGlobalSetup (); atterm (M_SaveDefaultsFinal); } diff --git a/src/m_misc.h b/src/m_misc.h index 9599306de..ea146c690 100644 --- a/src/m_misc.h +++ b/src/m_misc.h @@ -28,6 +28,7 @@ class FConfigFile; class FGameConfigFile; +class FIWadManager; extern FGameConfigFile *GameConfig; @@ -40,7 +41,7 @@ void M_FindResponseFile (void); // Pass a NULL to get the original behavior. void M_ScreenShot (const char *filename); -void M_LoadDefaults (); +void M_LoadDefaults (FIWadManager *iwad_man); bool M_SaveDefaults (const char *filename); void M_SaveCustomKeys (FConfigFile *config, char *section, char *subsection, size_t sublen); diff --git a/src/m_specialpaths.cpp b/src/m_specialpaths.cpp index e6f74eda6..a45c23dc7 100644 --- a/src/m_specialpaths.cpp +++ b/src/m_specialpaths.cpp @@ -204,7 +204,7 @@ FString M_GetConfigPath(bool for_reading) { path += "/" GAME_DIR; CreatePath(path); - path += "/zdoom.ini"; + path += "/" GAMENAMELOWERCASE ".ini"; } else { // construct "$PROGDIR/zdoom-$USER.ini" @@ -224,11 +224,11 @@ FString M_GetConfigPath(bool for_reading) *probe = '_'; ++probe; } - path << "zdoom-" << uname << ".ini"; + path << GAMENAMELOWERCASE "-" << uname << ".ini"; } else { // Couldn't get user name, so just use zdoom.ini - path += "zdoom.ini"; + path += GAMENAMELOWERCASE ".ini"; } } @@ -239,7 +239,7 @@ FString M_GetConfigPath(bool for_reading) if (!FileExists(path)) { path = progdir; - path << "zdoom.ini"; + path << GAMENAMELOWERCASE ".ini"; } } @@ -411,11 +411,11 @@ FString M_GetConfigPath(bool for_reading) noErr == FSRefMakePath(&folder, (UInt8*)cpath, PATH_MAX)) { FString path; - path << cpath << "/zdoom.ini"; + path << cpath << "/" GAMENAMELOWERCASE ".ini"; return path; } // Ungh. - return "zdoom.ini"; + return GAMENAMELOWERCASE ".ini"; } //=========================================================================== @@ -497,12 +497,12 @@ FString GetUserFile (const char *file) // This can be removed after a release or two // Transfer the old zdoom directory to the new location bool moved = false; - FString oldpath = NicePath("~/.zdoom/"); + FString oldpath = NicePath("~/." GAMENAMELOWERCASE "/"); if (stat (oldpath, &extrainfo) != -1) { if (rename(oldpath, path) == -1) { - I_Error ("Failed to move old zdoom directory (%s) to new location (%s).", + I_Error ("Failed to move old " GAMENAMELOWERCASE " directory (%s) to new location (%s).", oldpath.GetChars(), path.GetChars()); } else @@ -598,7 +598,7 @@ FString M_GetCajunPath(const char *botfilename) FString M_GetConfigPath(bool for_reading) { - return GetUserFile("zdoom.ini"); + return GetUserFile(GAMENAMELOWERCASE ".ini"); } //=========================================================================== diff --git a/src/menu/optionmenu.cpp b/src/menu/optionmenu.cpp index 9a7715265..57e69cfab 100644 --- a/src/menu/optionmenu.cpp +++ b/src/menu/optionmenu.cpp @@ -489,7 +489,13 @@ bool FOptionMenuItem::MouseEvent(int type, int x, int y) int FOptionMenuItem::GetIndent() { - return mCentered? 0 : SmallFont->StringWidth(mLabel); + if (mCentered) + { + return 0; + } + const char *label = mLabel; + if (*label == '$') label = GStrings(label+1); + return SmallFont->StringWidth(label); } void FOptionMenuItem::drawLabel(int indent, int y, EColorRange color, bool grayed) diff --git a/src/namedef.h b/src/namedef.h index 89d819f42..0d49bba76 100644 --- a/src/namedef.h +++ b/src/namedef.h @@ -326,6 +326,7 @@ xx(Arg4) xx(Arg0Str) xx(Arg1Str) xx(Id) +xx(MoreIds) xx(V1) xx(V2) diff --git a/src/oplsynth/music_opldumper_mididevice.cpp b/src/oplsynth/music_opldumper_mididevice.cpp index 74bef0677..33e026c07 100644 --- a/src/oplsynth/music_opldumper_mididevice.cpp +++ b/src/oplsynth/music_opldumper_mididevice.cpp @@ -45,6 +45,35 @@ // TYPES ------------------------------------------------------------------- +class OPLDump : public OPLEmul +{ +public: + OPLDump(FILE *file) : File(file), TimePerTick(0), CurTime(0), + CurIntTime(0), TickMul(1), CurChip(0) {} + + // If we're doing things right, these should never be reset. + virtual void Reset() { assert(0); } + + // Update() is only used for getting waveform data, which dumps don't do. + virtual void Update(float *buffer, int length) { assert(0); } + + // OPL dumps don't pan beyond what OPL3 is capable of (which is + // already written using registers from the original data). + virtual void SetPanning(int c, float left, float right) {} + + // Only for the OPL dumpers, not the emulators + virtual void SetClockRate(double samples_per_tick) {} + virtual void WriteDelay(int ticks) = 0; + +protected: + FILE *File; + double TimePerTick; // in milliseconds + double CurTime; + int CurIntTime; + int TickMul; + BYTE CurChip; +}; + // EXTERNAL FUNCTION PROTOTYPES -------------------------------------------- // PUBLIC FUNCTION PROTOTYPES ---------------------------------------------- @@ -59,6 +88,173 @@ // CODE -------------------------------------------------------------------- +class OPL_RDOSdump : public OPLDump +{ +public: + OPL_RDOSdump(FILE *file) : OPLDump(file) + { + assert(File != NULL); + fwrite("RAWADATA\0", 1, 10, File); + NeedClockRate = true; + } + virtual ~OPL_RDOSdump() + { + if (File != NULL) + { + WORD endmark = 0xFFFF; + fwrite(&endmark, 2, 1, File); + fclose(File); + } + } + + virtual void WriteReg(int reg, int v) + { + assert(File != NULL); + BYTE chipnum = reg >> 8; + if (chipnum != CurChip) + { + BYTE switcher[2] = { chipnum + 1, 2 }; + fwrite(switcher, 1, 2, File); + } + reg &= 255; + if (reg != 0 && reg != 2 && (reg != 255 || v != 255)) + { + BYTE cmd[2] = { BYTE(v), BYTE(reg) }; + fwrite(cmd, 1, 2, File); + } + } + + virtual void SetClockRate(double samples_per_tick) + { + TimePerTick = samples_per_tick / OPL_SAMPLE_RATE * 1000.0; + + double clock_rate; + int clock_mul; + WORD clock_word; + + clock_rate = samples_per_tick * ADLIB_CLOCK_MUL; + clock_mul = 1; + + // The RDos raw format's clock rate is stored in a word. Therefore, + // the longest tick that can be stored is only ~55 ms. + while (clock_rate / clock_mul + 0.5 > 65535.0) + { + clock_mul++; + } + clock_word = WORD(clock_rate / clock_mul + 0.5); + + if (NeedClockRate) + { // Set the initial clock rate. + clock_word = LittleShort(clock_word); + fseek(File, 8, SEEK_SET); + fwrite(&clock_word, 2, 1, File); + fseek(File, 0, SEEK_END); + NeedClockRate = false; + } + else + { // Change the clock rate in the middle of the song. + BYTE clock_change[4] = { 0, 2, BYTE(clock_word & 255), BYTE(clock_word >> 8) }; + fwrite(clock_change, 1, 4, File); + } + } + virtual void WriteDelay(int ticks) + { + if (ticks > 0) + { // RDos raw has very precise delays but isn't very efficient at + // storing long delays. + BYTE delay[2]; + + ticks *= TickMul; + delay[1] = 0; + while (ticks > 255) + { + ticks -= 255; + delay[0] = 255; + fwrite(delay, 1, 2, File); + } + delay[0] = BYTE(ticks); + fwrite(delay, 1, 2, File); + } + } +protected: + bool NeedClockRate; +}; + +class OPL_DOSBOXdump : public OPLDump +{ +public: + OPL_DOSBOXdump(FILE *file, bool dual) : OPLDump(file), Dual(dual) + { + assert(File != NULL); + fwrite("DBRAWOPL" + "\0\0" // Minor version number + "\1\0" // Major version number + "\0\0\0\0" // Total milliseconds + "\0\0\0", // Total data + 1, 20, File); + char type[4] = { Dual * 2, 0, 0, 0 }; // Single or dual OPL-2 + fwrite(type, 1, 4, File); + } + virtual ~OPL_DOSBOXdump() + { + if (File != NULL) + { + long where_am_i = ftell(File); + DWORD len[2]; + + fseek(File, 12, SEEK_SET); + len[0] = LittleLong(CurIntTime); + len[1] = LittleLong(DWORD(where_am_i - 24)); + fwrite(len, 4, 2, File); + fclose(File); + } + } + virtual void WriteReg(int reg, int v) + { + assert(File != NULL); + BYTE chipnum = reg >> 8; + if (chipnum != CurChip) + { + CurChip = chipnum; + fputc(chipnum + 2, File); + } + reg &= 255; + BYTE cmd[3] = { 4, BYTE(reg), BYTE(v) }; + fwrite (cmd + (reg > 4), 1, 3 - (reg > 4), File); + } + virtual void WriteDelay(int ticks) + { + if (ticks > 0) + { // DosBox only has millisecond-precise delays. + int delay; + + CurTime += TimePerTick * ticks; + delay = int(CurTime + 0.5) - CurIntTime; + CurIntTime += delay; + while (delay > 65536) + { + BYTE cmd[3] = { 1, 255, 255 }; + fwrite(cmd, 1, 2, File); + delay -= 65536; + } + delay--; + if (delay <= 255) + { + BYTE cmd[2] = { 0, BYTE(delay) }; + fwrite(cmd, 1, 2, File); + } + else + { + assert(delay <= 65535); + BYTE cmd[3] = { 1, BYTE(delay & 255), BYTE(delay >> 8) }; + fwrite(cmd, 1, 3, File); + } + } + } +protected: + bool Dual; +}; + //========================================================================== // // OPLDumperMIDIDevice Constructor @@ -139,139 +335,34 @@ DiskWriterIO::~DiskWriterIO() // //========================================================================== -int DiskWriterIO::OPLinit(uint numchips, bool, bool) +int DiskWriterIO::OPLinit(uint numchips, bool, bool initopl3) { - // If the file extension is unknown or not present, the default format - // is RAW. Otherwise, you can use DRO. - if (Filename.Len() < 5 || stricmp(&Filename[Filename.Len() - 4], ".dro") != 0) - { - Format = FMT_RDOS; - } - else - { - Format = FMT_DOSBOX; - } - File = fopen(Filename, "wb"); - if (File == NULL) + FILE *file = fopen(Filename, "wb"); + if (file == NULL) { Printf("Could not open %s for writing.\n", Filename.GetChars()); return 0; } - if (Format == FMT_RDOS) + numchips = clamp(numchips, 1u, 2u); + memset(chips, 0, sizeof(chips)); + // If the file extension is unknown or not present, the default format + // is RAW. Otherwise, you can use DRO. + if (Filename.Len() < 5 || stricmp(&Filename[Filename.Len() - 4], ".dro") != 0) { - fwrite("RAWADATA\0", 1, 10, File); - NeedClockRate = true; + chips[0] = new OPL_RDOSdump(file); } else { - fwrite("DBRAWOPL" - "\0\0" // Minor version number - "\1\0" // Major version number - "\0\0\0\0" // Total milliseconds - "\0\0\0", // Total data - 1, 20, File); - if (numchips == 1) - { - fwrite("\0\0\0", 1, 4, File); // Single OPL-2 - } - else - { - fwrite("\2\0\0", 1, 4, File); // Dual OPL-2 - } - NeedClockRate = false; + chips[0] = new OPL_DOSBOXdump(file, numchips > 1); } - - TimePerTick = 0; - TickMul = 1; - CurTime = 0; - CurIntTime = 0; - CurChip = 0; OPLchannels = OPL2CHANNELS * numchips; - OPLwriteInitState(false); + NumChips = numchips; + IsOPL3 = numchips > 1; + OPLwriteInitState(initopl3); return numchips; } -//========================================================================== -// -// DiskWriterIO :: OPLdeinit -// -//========================================================================== - -void DiskWriterIO::OPLdeinit() -{ - if (File != NULL) - { - if (Format == FMT_RDOS) - { - WORD endmark = 65535; - fwrite(&endmark, 2, 1, File); - } - else - { - long where_am_i = ftell(File); - DWORD len[2]; - - fseek(File, 12, SEEK_SET); - len[0] = LittleLong(CurIntTime); - len[1] = LittleLong(DWORD(where_am_i - 24)); - fwrite(len, 4, 2, File); - } - fclose(File); - File = NULL; - } -} - -//========================================================================== -// -// DiskWriterIO :: OPLwriteReg -// -//========================================================================== - -void DiskWriterIO::OPLwriteReg(int which, uint reg, uchar data) -{ - SetChip(which); - if (Format == FMT_RDOS) - { - if (reg != 0 && reg != 2 && (reg != 255 || data != 255)) - { - BYTE cmd[2] = { data, BYTE(reg) }; - fwrite(cmd, 1, 2, File); - } - } - else - { - BYTE cmd[3] = { 4, BYTE(reg), data }; - fwrite (cmd + (reg > 4), 1, 3 - (reg > 4), File); - } -} - -//========================================================================== -// -// DiskWriterIO :: SetChip -// -//========================================================================== - -void DiskWriterIO :: SetChip(int chipnum) -{ - assert(chipnum == 0 || chipnum == 1); - - if (chipnum != CurChip) - { - CurChip = chipnum; - if (Format == FMT_RDOS) - { - BYTE switcher[2] = { BYTE(chipnum + 1), 2 }; - fwrite(switcher, 1, 2, File); - } - else - { - BYTE switcher = chipnum + 2; - fwrite(&switcher, 1, 1, File); - } - } -} - //========================================================================== // // DiskWriterIO :: SetClockRate @@ -280,39 +371,7 @@ void DiskWriterIO :: SetChip(int chipnum) void DiskWriterIO::SetClockRate(double samples_per_tick) { - TimePerTick = samples_per_tick / OPL_SAMPLE_RATE * 1000.0; - - if (Format == FMT_RDOS) - { - double clock_rate; - int clock_mul; - WORD clock_word; - - clock_rate = samples_per_tick * ADLIB_CLOCK_MUL; - clock_mul = 1; - - // The RDos raw format's clock rate is stored in a word. Therefore, - // the longest tick that can be stored is only ~55 ms. - while (clock_rate / clock_mul + 0.5 > 65535.0) - { - clock_mul++; - } - clock_word = WORD(clock_rate / clock_mul + 0.5); - - if (NeedClockRate) - { // Set the initial clock rate. - clock_word = LittleShort(clock_word); - fseek(File, 8, SEEK_SET); - fwrite(&clock_word, 2, 1, File); - fseek(File, 0, SEEK_END); - NeedClockRate = false; - } - else - { // Change the clock rate in the middle of the song. - BYTE clock_change[4] = { 0, 2, BYTE(clock_word & 255), BYTE(clock_word >> 8) }; - fwrite(clock_change, 1, 4, File); - } - } + static_cast(chips[0])->SetClockRate(samples_per_tick); } //========================================================================== @@ -323,50 +382,5 @@ void DiskWriterIO::SetClockRate(double samples_per_tick) void DiskWriterIO :: WriteDelay(int ticks) { - if (ticks <= 0) - { - return; - } - if (Format == FMT_RDOS) - { // RDos raw has very precise delays but isn't very efficient at - // storing long delays. - BYTE delay[2]; - - ticks *= TickMul; - delay[1] = 0; - while (ticks > 255) - { - ticks -= 255; - delay[0] = 255; - fwrite(delay, 1, 2, File); - } - delay[0] = BYTE(ticks); - fwrite(delay, 1, 2, File); - } - else - { // DosBox only has millisecond-precise delays. - int delay; - - CurTime += TimePerTick * ticks; - delay = int(CurTime + 0.5) - CurIntTime; - CurIntTime += delay; - while (delay > 65536) - { - BYTE cmd[3] = { 1, 255, 255 }; - fwrite(cmd, 1, 2, File); - delay -= 65536; - } - delay--; - if (delay <= 255) - { - BYTE cmd[2] = { 0, BYTE(delay) }; - fwrite(cmd, 1, 2, File); - } - else - { - assert(delay <= 65535); - BYTE cmd[3] = { 1, BYTE(delay & 255), BYTE(delay >> 8) }; - fwrite(cmd, 1, 3, File); - } - } + static_cast(chips[0])->WriteDelay(ticks); } diff --git a/src/oplsynth/muslib.h b/src/oplsynth/muslib.h index 6cfb5bd55..8499a6bed 100644 --- a/src/oplsynth/muslib.h +++ b/src/oplsynth/muslib.h @@ -195,25 +195,11 @@ struct DiskWriterIO : public OPLio DiskWriterIO(const char *filename); ~DiskWriterIO(); - int OPLinit(uint numchips, bool notused=false, bool notused2=false); - void OPLdeinit(); - void OPLwriteReg(int which, uint reg, uchar data); + int OPLinit(uint numchips, bool notused, bool initopl3); void SetClockRate(double samples_per_tick); void WriteDelay(int ticks); - void SetChip(int chipnum); - - FILE *File; FString Filename; - int Format; - bool NeedClockRate; - double TimePerTick; // In milliseconds - double CurTime; - int CurIntTime; - int TickMul; - int CurChip; - - enum { FMT_RDOS, FMT_DOSBOX }; }; struct musicBlock { diff --git a/src/p_3dfloors.cpp b/src/p_3dfloors.cpp index 58c2dbde7..cc76beaa3 100644 --- a/src/p_3dfloors.cpp +++ b/src/p_3dfloors.cpp @@ -220,7 +220,8 @@ static int P_Set3DFloor(line_t * line, int param, int param2, int alpha) int tag=line->args[0]; sector_t * sec = line->frontsector, * ss; - for (s=-1; (s = P_FindSectorFromTag(tag,s)) >= 0;) + FSectorTagIterator it(tag); + while ((s = it.Next()) >= 0) { ss=§ors[s]; @@ -488,7 +489,7 @@ void P_Recalculate3DFloors(sector_t * sector) // by the clipping code below. ffloors.Push(pick); } - else if ((pick->flags&(FF_SWIMMABLE|FF_TRANSLUCENT) || (!(pick->flags&(FF_ALLSIDES|FF_BOTHPLANES)))) && pick->flags&FF_EXISTS) + else if ((pick->flags&(FF_SWIMMABLE|FF_TRANSLUCENT) || (!(pick->flags&FF_RENDERALL))) && pick->flags&FF_EXISTS) { // We must check if this nonsolid segment gets clipped from the top by another 3D floor if (solid != NULL && solid_bottom < height) @@ -843,7 +844,7 @@ void P_Spawn3DFloors (void) { if (line->args[1]&8) { - line->id = line->args[4]; + tagManager.AddLineID(i, line->args[4]); } else { diff --git a/src/p_3dmidtex.cpp b/src/p_3dmidtex.cpp index 7f934e2f5..9a9492e08 100644 --- a/src/p_3dmidtex.cpp +++ b/src/p_3dmidtex.cpp @@ -143,7 +143,9 @@ void P_Attach3dMidtexLinesToSector(sector_t *sector, int lineid, int tag, bool c if (tag == 0) { - for(int line = -1; (line = P_FindLineFromID(lineid,line)) >= 0; ) + FLineIdIterator itr(lineid); + int line; + while ((line = itr.Next()) >= 0) { line_t *ln = &lines[line]; @@ -157,13 +159,15 @@ void P_Attach3dMidtexLinesToSector(sector_t *sector, int lineid, int tag, bool c } else { - for(int sec = -1; (sec = P_FindSectorFromTag(tag, sec)) >= 0; ) + FSectorTagIterator it(tag); + int sec; + while ((sec = it.Next()) >= 0) { for (int line = 0; line < sectors[sec].linecount; line ++) { line_t *ln = sectors[sec].lines[line]; - if (lineid != 0 && ln->id != lineid) continue; + if (lineid != 0 && !tagManager.LineHasID(ln, lineid)) continue; if (ln->frontsector == NULL || ln->backsector == NULL || !(ln->flags & ML_3DMIDTEX)) { diff --git a/src/p_acs.cpp b/src/p_acs.cpp index 2bbbc944a..43d7c7bd5 100644 --- a/src/p_acs.cpp +++ b/src/p_acs.cpp @@ -1341,7 +1341,7 @@ DPlaneWatcher::DPlaneWatcher (AActor *it, line_t *line, int lineSide, bool ceili { int secnum; - secnum = P_FindSectorFromTag (tag, -1); + secnum = P_FindFirstSectorFromTag (tag); if (secnum >= 0) { secplane_t plane; @@ -1409,12 +1409,6 @@ void DPlaneWatcher::Tick () // own behavior is loaded (if it has one). void FBehavior::StaticLoadDefaultModules () { - // When playing Strife, STRFHELP is always loaded. - if (gameinfo.gametype == GAME_Strife) - { - StaticLoadModule (Wads.CheckNumForName ("STRFHELP", ns_acslibrary)); - } - // Scan each LOADACS lump and load the specified modules in order int lump, lastlump = 0; @@ -3217,7 +3211,7 @@ do_count: if (actor->health > 0 && (kind == NULL || actor->IsA (kind))) { - if (actor->Sector->tag == tag || tag == -1) + if (tag == -1 || tagManager.SectorHasTag(actor->Sector, tag)) { // Don't count items in somebody's inventory if (!actor->IsKindOf (RUNTIME_CLASS(AInventory)) || @@ -3237,7 +3231,7 @@ do_count: if (actor->health > 0 && (kind == NULL || actor->IsA (kind))) { - if (actor->Sector->tag == tag || tag == -1) + if (tag == -1 || tagManager.SectorHasTag(actor->Sector, tag)) { // Don't count items in somebody's inventory if (!actor->IsKindOf (RUNTIME_CLASS(AInventory)) || @@ -3274,7 +3268,8 @@ void DLevelScript::ChangeFlat (int tag, int name, bool floorOrCeiling) flat = TexMan.GetTexture (flatname, FTexture::TEX_Flat, FTextureManager::TEXMAN_Overridable); - while ((secnum = P_FindSectorFromTag (tag, secnum)) >= 0) + FSectorTagIterator it(tag); + while ((secnum = it.Next()) >= 0) { int pos = floorOrCeiling? sector_t::ceiling : sector_t::floor; sectors[secnum].SetTexture(pos, flat); @@ -3305,7 +3300,8 @@ void DLevelScript::SetLineTexture (int lineid, int side, int position, int name) texture = TexMan.GetTexture (texname, FTexture::TEX_Wall, FTextureManager::TEXMAN_Overridable); - while ((linenum = P_FindLineFromID (lineid, linenum)) >= 0) + FLineIdIterator itr(lineid); + while ((linenum = itr.Next()) >= 0) { side_t *sidedef; @@ -3903,7 +3899,13 @@ void DLevelScript::DoSetActorProperty (AActor *actor, int property, int value) case APROP_ViewHeight: if (actor->IsKindOf (RUNTIME_CLASS (APlayerPawn))) + { static_cast(actor)->ViewHeight = value; + if (actor->player != NULL) + { + actor->player->viewheight = value; + } + } break; case APROP_AttackZOffset: @@ -4463,7 +4465,7 @@ int DLevelScript::SideFromID(int id, int side) } else { - int line = P_FindLineFromID(id, -1); + int line = P_FindFirstLineFromID(id); if (line == -1) return -1; if (lines[line].sidedef[side] == NULL) return -1; return lines[line].sidedef[side]->Index; @@ -4479,7 +4481,7 @@ int DLevelScript::LineFromID(int id) } else { - return P_FindLineFromID(id, -1); + return P_FindFirstLineFromID(id); } } @@ -4767,25 +4769,19 @@ static void SetActorRoll(AActor *activator, int tid, int angle, bool interpolate } } -static void SetActorTeleFog(AActor *activator, int tid, FName telefogsrc, FName telefogdest) +static void SetActorTeleFog(AActor *activator, int tid, FString telefogsrc, FString telefogdest) { - //Simply put, if it doesn't exist, it won't change. One can use "" in this scenario. - const PClass *check; + // Set the actor's telefog to the specified actor. Handle "" as "don't + // change" since "None" should work just fine for disabling the fog (given + // that it will resolve to NAME_None which is not a valid actor name). if (tid == 0) { if (activator != NULL) { - check = PClass::FindClass(telefogsrc); - if (check == NULL || !stricmp(telefogsrc, "none") || !stricmp(telefogsrc, "null")) - activator->TeleFogSourceType = NULL; - else - activator->TeleFogSourceType = check; - - check = PClass::FindClass(telefogdest); - if (check == NULL || !stricmp(telefogdest, "none") || !stricmp(telefogdest, "null")) - activator->TeleFogDestType = NULL; - else - activator->TeleFogDestType = check; + if (telefogsrc.IsNotEmpty()) + activator->TeleFogSourceType = PClass::FindClass(telefogsrc); + if (telefogdest.IsNotEmpty()) + activator->TeleFogDestType = PClass::FindClass(telefogdest); } } else @@ -4793,19 +4789,14 @@ static void SetActorTeleFog(AActor *activator, int tid, FName telefogsrc, FName FActorIterator iterator(tid); AActor *actor; + const PClass * const src = telefogsrc.IsNotEmpty() ? PClass::FindClass(telefogsrc) : NULL; + const PClass * const dest = telefogdest.IsNotEmpty() ? PClass::FindClass(telefogdest) : NULL; while ((actor = iterator.Next())) { - check = PClass::FindClass(telefogsrc); - if (check == NULL || !stricmp(telefogsrc, "none") || !stricmp(telefogsrc, "null")) - actor->TeleFogSourceType = NULL; - else - actor->TeleFogSourceType = check; - - check = PClass::FindClass(telefogdest); - if (check == NULL || !stricmp(telefogdest, "none") || !stricmp(telefogdest, "null")) - actor->TeleFogDestType = NULL; - else - actor->TeleFogDestType = check; + if (telefogsrc.IsNotEmpty()) + actor->TeleFogSourceType = src; + if (telefogdest.IsNotEmpty()) + actor->TeleFogDestType = dest; } } } @@ -4856,10 +4847,10 @@ int DLevelScript::CallFunction(int argCount, int funcIndex, SDWORD *args, const return 0; // Not implemented yet case ACSF_GetSectorUDMFInt: - return GetUDMFInt(UDMF_Sector, P_FindSectorFromTag(args[0], -1), FBehavior::StaticLookupString(args[1])); + return GetUDMFInt(UDMF_Sector, P_FindFirstSectorFromTag(args[0]), FBehavior::StaticLookupString(args[1])); case ACSF_GetSectorUDMFFixed: - return GetUDMFFixed(UDMF_Sector, P_FindSectorFromTag(args[0], -1), FBehavior::StaticLookupString(args[1])); + return GetUDMFFixed(UDMF_Sector, P_FindFirstSectorFromTag(args[0]), FBehavior::StaticLookupString(args[1])); case ACSF_GetSideUDMFInt: return GetUDMFInt(UDMF_Side, SideFromID(args[0], args[1]), FBehavior::StaticLookupString(args[2])); @@ -5186,11 +5177,11 @@ int DLevelScript::CallFunction(int argCount, int funcIndex, SDWORD *args, const int space = args[2] < CHAN_FLOOR || args[2] > CHAN_INTERIOR ? CHAN_FULLHEIGHT : args[2]; if (seqname != NULL) { - int secnum = -1; - - while ((secnum = P_FindSectorFromTag(args[0], secnum)) >= 0) + FSectorTagIterator it(args[0]); + int s; + while ((s = it.Next()) >= 0) { - SN_StartSequence(§ors[secnum], args[2], seqname, 0); + SN_StartSequence(§ors[s], args[2], seqname, 0); } } } @@ -5709,9 +5700,9 @@ doplaysound: if (funcIndex == ACSF_PlayActorSound) case ACSF_SetLineActivation: if (argCount >= 2) { - int line = -1; - - while ((line = P_FindLineFromID(args[0], line)) >= 0) + int line; + FLineIdIterator itr(args[0]); + while ((line = itr.Next()) >= 0) { lines[line].activation = args[1]; } @@ -5721,7 +5712,7 @@ doplaysound: if (funcIndex == ACSF_PlayActorSound) case ACSF_GetLineActivation: if (argCount > 0) { - int line = P_FindLineFromID(args[0], -1); + int line = P_FindFirstLineFromID(args[0]); return line >= 0 ? lines[line].activation : 0; } break; @@ -5969,11 +5960,13 @@ int DLevelScript::RunScript () // Wait for tagged sector(s) to go inactive, then enter // state running { - int secnum = -1; - - while ((secnum = P_FindSectorFromTag (statedata, secnum)) >= 0) + int secnum; + FSectorTagIterator it(statedata); + while ((secnum = it.Next()) >= 0) + { if (sectors[secnum].floordata || sectors[secnum].ceilingdata) return resultValue; + } // If we got here, none of the tagged sectors were busy state = SCRIPT_Running; @@ -8013,9 +8006,10 @@ scriptwait: case PCD_SETLINEBLOCKING: { - int line = -1; + int line; - while ((line = P_FindLineFromID (STACK(2), line)) >= 0) + FLineIdIterator itr(STACK(2)); + while ((line = itr.Next()) >= 0) { switch (STACK(1)) { @@ -8048,9 +8042,10 @@ scriptwait: case PCD_SETLINEMONSTERBLOCKING: { - int line = -1; + int line; - while ((line = P_FindLineFromID (STACK(2), line)) >= 0) + FLineIdIterator itr(STACK(2)); + while ((line = itr.Next()) >= 0) { if (STACK(1)) lines[line].flags |= ML_BLOCKMONSTERS; @@ -8075,7 +8070,8 @@ scriptwait: arg0 = -FName(FBehavior::StaticLookupString(arg0)); } - while ((linenum = P_FindLineFromID (STACK(7), linenum)) >= 0) + FLineIdIterator itr(STACK(7)); + while ((linenum = itr.Next()) >= 0) { line_t *line = &lines[linenum]; line->special = specnum; @@ -8535,7 +8531,7 @@ scriptwait: fixed_t z = 0; if (tag != 0) - secnum = P_FindSectorFromTag (tag, -1); + secnum = P_FindFirstSectorFromTag (tag); else secnum = int(P_PointInSector (x, y) - sectors); @@ -8557,7 +8553,7 @@ scriptwait: case PCD_GETSECTORLIGHTLEVEL: { - int secnum = P_FindSectorFromTag (STACK(1), -1); + int secnum = P_FindFirstSectorFromTag (STACK(1)); int z = -1; if (secnum >= 0) diff --git a/src/p_buildmap.cpp b/src/p_buildmap.cpp index 2ee2ae83a..ddfa0e2ec 100644 --- a/src/p_buildmap.cpp +++ b/src/p_buildmap.cpp @@ -716,30 +716,31 @@ static int LoadSprites (spritetype *sprites, Xsprite *xsprites, int numsprites, mapthings[count].args[1] = xsprites[i].Data4; mapthings[count].args[2] = xsprites[i].Data1; mapthings[count].args[3] = xsprites[i].Data2; - mapthings[count].type = 14065; + mapthings[count].EdNum = 14065; } else if (xsprites != NULL && sprites[i].lotag == 1) { // Blood player start if (xsprites[i].Data1 < 4) - mapthings[count].type = 1 + xsprites[i].Data1; + mapthings[count].EdNum= 1 + xsprites[i].Data1; else - mapthings[count].type = gameinfo.player5start + xsprites[i].Data1 - 4; + mapthings[count].EdNum = 4001 + xsprites[i].Data1 - 4; } else if (xsprites != NULL && sprites[i].lotag == 2) { // Bloodbath start - mapthings[count].type = 11; + mapthings[count].EdNum = 11; } else { if (sprites[i].cstat & 32768) continue; if (sprites[i].xrepeat == 0 || sprites[i].yrepeat == 0) continue; - mapthings[count].type = 9988; + mapthings[count].EdNum = 9988; mapthings[count].args[0] = sprites[i].picnum; mapthings[count].args[2] = sprites[i].xrepeat; mapthings[count].args[3] = sprites[i].yrepeat; mapthings[count].args[4] = sprites[i].cstat; } + mapthings[count].info = DoomEdMap.CheckKey(mapthings[count].EdNum); count++; } return count; @@ -780,14 +781,14 @@ vertex_t *FindVertex (fixed_t x, fixed_t y) static void CreateStartSpot (fixed_t *pos, FMapThing *start) { short angle = LittleShort(*(WORD *)(&pos[3])); - FMapThing mt = - { - 0, (LittleLong(pos[0])<<12), ((-LittleLong(pos[1]))<<12), 0,// tid, x, y, z - short(Scale ((2048-angle)&2047, 360, 2048)), 1, // angle, type - 0, 0, // Skillfilter, Classfilter - 7|MTF_SINGLE|224, // flags - 0, {0}, 0 // special is 0, args and Conversation are 0 - }; + FMapThing mt = { 0, }; + + mt.x = LittleLong(pos[0])<<12; + mt.y = (-LittleLong(pos[1]))<<12; + mt.angle = short(Scale((2048-angle)&2047, 360, 2048)); + mt.info = DoomEdMap.CheckKey(1); + mt.EdNum = 1; + mt.flags = 7|MTF_SINGLE|224; *start = mt; } diff --git a/src/p_ceiling.cpp b/src/p_ceiling.cpp index d0c54761a..7efef80a5 100644 --- a/src/p_ceiling.cpp +++ b/src/p_ceiling.cpp @@ -510,9 +510,9 @@ bool EV_DoCeiling (DCeiling::ECeiling type, line_t *line, P_ActivateInStasisCeiling (tag); } - secnum = -1; // affects all sectors with the same tag as the linedef - while ((secnum = P_FindSectorFromTag (tag, secnum)) >= 0) + FSectorTagIterator it(tag); + while ((secnum = it.Next()) >= 0) { rtn |= !!DCeiling::Create(§ors[secnum], type, line, tag, speed, speed2, height, crush, silent, change, hexencrush); } diff --git a/src/p_conversation.cpp b/src/p_conversation.cpp index 09f2d49d6..4fd6f2fa6 100644 --- a/src/p_conversation.cpp +++ b/src/p_conversation.cpp @@ -60,6 +60,7 @@ #include "farchive.h" #include "p_lnspec.h" #include "r_utility.h" +#include "p_local.h" #include "menu/menu.h" // The conversations as they exist inside a SCRIPTxx lump. @@ -105,11 +106,10 @@ void GiveSpawner (player_t *player, const PClass *type); TArray StrifeDialogues; -typedef TMap FStrifeTypeMap; // maps conversation IDs to actor classes typedef TMap FDialogueIDMap; // maps dialogue IDs to dialogue array index (for ACS) typedef TMap FDialogueMap; // maps actor class names to dialogue array index -static FStrifeTypeMap StrifeTypes; +FClassMap StrifeTypes; static FDialogueIDMap DialogueRoots; static FDialogueMap ClassRoots; static int ConversationMenuY; diff --git a/src/p_doors.cpp b/src/p_doors.cpp index 844f23af9..49ed20f46 100644 --- a/src/p_doors.cpp +++ b/src/p_doors.cpp @@ -484,8 +484,8 @@ bool EV_DoDoor (DDoor::EVlDoor type, line_t *line, AActor *thing, else { // [RH] Remote door - secnum = -1; - while ((secnum = P_FindSectorFromTag (tag,secnum)) >= 0) + FSectorTagIterator it(tag); + while ((secnum = it.Next()) >= 0) { sec = §ors[secnum]; // if the ceiling is already moving, don't start the door action @@ -812,7 +812,8 @@ bool EV_SlidingDoor (line_t *line, AActor *actor, int tag, int speed, int delay) return false; } - while ((secnum = P_FindSectorFromTag (tag, secnum)) >= 0) + FSectorTagIterator it(tag); + while ((secnum = it.Next()) >= 0) { sec = §ors[secnum]; if (sec->ceilingdata != NULL) diff --git a/src/p_effect.cpp b/src/p_effect.cpp index 5633b4bff..1b7ce0bc8 100644 --- a/src/p_effect.cpp +++ b/src/p_effect.cpp @@ -586,7 +586,7 @@ void P_DrawSplash2 (int count, fixed_t x, fixed_t y, fixed_t z, angle_t angle, i } } -void P_DrawRailTrail (AActor *source, const FVector3 &start, const FVector3 &end, int color1, int color2, float maxdiff, int flags, const PClass *spawnclass, angle_t angle, int duration, float sparsity, float drift) +void P_DrawRailTrail (AActor *source, const FVector3 &start, const FVector3 &end, int color1, int color2, float maxdiff, int flags, const PClass *spawnclass, angle_t angle, int duration, float sparsity, float drift, int SpiralOffset) { double length, lengthsquared; int steps, i; @@ -678,7 +678,7 @@ void P_DrawRailTrail (AActor *source, const FVector3 &start, const FVector3 &end color1 = color1 == 0 ? -1 : ParticleColor(color1); pos = start; - deg = FAngle(270); + deg = FAngle(SpiralOffset); for (i = spiral_steps; i; i--) { particle_t *p = NewParticle (); diff --git a/src/p_effect.h b/src/p_effect.h index 755dd9ff3..6ca9dfea9 100644 --- a/src/p_effect.h +++ b/src/p_effect.h @@ -88,7 +88,7 @@ void P_RunEffects (void); void P_RunEffect (AActor *actor, int effects); -void P_DrawRailTrail (AActor *source, const FVector3 &start, const FVector3 &end, int color1, int color2, float maxdiff = 0, int flags = 0, const PClass *spawnclass = NULL, angle_t angle = 0, int duration = 35, float sparsity = 1.0, float drift = 1.0); +void P_DrawRailTrail (AActor *source, const FVector3 &start, const FVector3 &end, int color1, int color2, float maxdiff = 0, int flags = 0, const PClass *spawnclass = NULL, angle_t angle = 0, int duration = 35, float sparsity = 1.0, float drift = 1.0, int SpiralOffset = 270); void P_DrawSplash (int count, fixed_t x, fixed_t y, fixed_t z, angle_t angle, int kind); void P_DrawSplash2 (int count, fixed_t x, fixed_t y, fixed_t z, angle_t angle, int updown, int kind); void P_DisconnectEffect (AActor *actor); diff --git a/src/p_enemy.cpp b/src/p_enemy.cpp index 55b49b65e..540aa119e 100644 --- a/src/p_enemy.cpp +++ b/src/p_enemy.cpp @@ -44,6 +44,7 @@ #include "thingdef/thingdef.h" #include "d_dehacked.h" #include "g_level.h" +#include "r_data/r_translate.h" #include "teaminfo.h" #include "gi.h" @@ -2615,7 +2616,7 @@ static bool P_CheckForResurrection(AActor *self, bool usevilestates) S_Sound(corpsehit, CHAN_BODY, "vile/raise", 1, ATTN_IDLE); info = corpsehit->GetDefault(); - if (corpsehit->state == corpsehit->FindState(NAME_GenericCrush)) + if (GetTranslationType(corpsehit->Translation) == TRANSLATION_Blood) { corpsehit->Translation = info->Translation; // Clean up bloodcolor translation from crushed corpses } @@ -3203,10 +3204,7 @@ DEFINE_ACTION_FUNCTION_PARAMS(AActor, A_Die) ACTION_PARAM_START(1); ACTION_PARAM_NAME(damagetype, 0); - if (self->flags & MF_MISSILE) - P_ExplodeMissile(self, NULL, NULL); - else - P_DamageMobj (self, NULL, NULL, self->health, damagetype, DMG_FORCED); + P_DamageMobj (self, NULL, NULL, self->health, damagetype, DMG_FORCED); } // diff --git a/src/p_floor.cpp b/src/p_floor.cpp index 9a5a6eaf8..97e23571b 100644 --- a/src/p_floor.cpp +++ b/src/p_floor.cpp @@ -290,28 +290,13 @@ bool EV_DoFloor (DFloor::EFloor floortype, line_t *line, int tag, rtn = false; // check if a manual trigger; if so do just the sector on the backside - if (tag == 0) - { - if (!line || !(sec = line->backsector)) - return rtn; - secnum = (int)(sec-sectors); - goto manual_floor; - } - - secnum = -1; - while (tag && (secnum = P_FindSectorFromTag (tag, secnum)) >= 0) + FSectorTagIterator it(tag, line); + while ((secnum = it.Next()) >= 0) { sec = §ors[secnum]; - -manual_floor: // ALREADY MOVING? IF SO, KEEP GOING... if (sec->PlaneMoving(sector_t::floor)) { - // There was a test for 0/non-0 here, supposed to prevent 0-tags from executing "continue" and searching for unrelated sectors - // Unfortunately, the condition had been reversed, so that searches for tag-0 would continue, - // while numbered tags would abort (return false, even if some floors have been successfully triggered) - - // All occurences of the condition (faulty or not) have been replaced by a looping condition: Looping only occurs if we're looking for a non-0 tag. continue; } @@ -545,9 +530,9 @@ manual_floor: bool EV_FloorCrushStop (int tag) { - int secnum = -1; - - while ((secnum = P_FindSectorFromTag (tag, secnum)) >= 0) + int secnum; + FSectorTagIterator it(tag); + while ((secnum = it.Next()) >= 0) { sector_t *sec = sectors + secnum; @@ -562,21 +547,6 @@ bool EV_FloorCrushStop (int tag) return true; } -//========================================================================== -// -// Linear tag search to emulate stair building from Doom.exe -// -//========================================================================== - -static int P_FindSectorFromTagLinear (int tag, int start) -{ - for (int i=start+1;i> FRACBITS; - int (* FindSector) (int tag, int start) = - (i_compatflags & COMPATF_STAIRINDEX)? P_FindSectorFromTagLinear : P_FindSectorFromTag; - // check if a manual trigger, if so do just the sector on the backside - if (tag == 0) - { - if (!line || !(sec = line->backsector)) - return rtn; - secnum = (int)(sec-sectors); - manual = true; - goto manual_stair; - } - + FSectorTagIterator itr(tag, line); // The compatibility mode doesn't work with a hashing algorithm. // It needs the original linear search method. This was broken in Boom. - - secnum = -1; - while ((secnum = FindSector (tag, secnum)) >= 0) + bool compatible = tag != 0 && (i_compatflags & COMPATF_STAIRINDEX); + while ((secnum = itr.NextCompat(compatible, secnum)) >= 0) { sec = §ors[secnum]; -manual_stair: // ALREADY MOVING? IF SO, KEEP GOING... //jff 2/26/98 add special lockout condition to wait for entire //staircase to build before retriggering if (sec->PlaneMoving(sector_t::floor) || sec->stairlock) { - if (!manual) - continue; - else - return rtn; + continue; } // new floor thinker @@ -781,14 +734,6 @@ manual_stair: // [RH] make sure the first sector doesn't point to a previous one, otherwise // it can infinite loop when the first sector stops moving. sectors[osecnum].prevsec = -1; - if (manual) - { - return rtn; - } - if (!(i_compatflags & COMPATF_STAIRINDEX)) - { - secnum = osecnum; //jff 3/4/98 restore loop index - } } return rtn; } @@ -811,21 +756,13 @@ bool EV_DoDonut (int tag, line_t *line, fixed_t pillarspeed, fixed_t slimespeed) vertex_t* spot; fixed_t height; - secnum = -1; rtn = false; - if (tag == 0) - { - if (!line || !(s1 = line->backsector)) - return rtn; - goto manual_donut; - } - - while (tag && (secnum = P_FindSectorFromTag(tag,secnum)) >= 0) + FSectorTagIterator itr(tag, line); + while ((secnum = itr.Next()) >= 0) { s1 = §ors[secnum]; // s1 is pillar's sector -manual_donut: // ALREADY MOVING? IF SO, KEEP GOING... if (s1->PlaneMoving(sector_t::floor)) continue; // safe now, because we check that tag is non-0 in the looping condition [fdari] @@ -1042,19 +979,12 @@ bool EV_DoElevator (line_t *line, DElevator::EElevator elevtype, secnum = -1; rtn = false; - if (tag == 0) - { - if (!line || !(sec = line->backsector)) - return rtn; - goto manual_elevator; - } - + FSectorTagIterator itr(tag, line); // act on all sectors with the same tag as the triggering linedef - while (tag && (secnum = P_FindSectorFromTag (tag, secnum)) >= 0) // never loop for a non-0 tag (condition moved to beginning of loop) [FDARI] + while ((secnum = itr.Next()) >= 0) { sec = §ors[secnum]; -manual_elevator: // If either floor or ceiling is already activated, skip it if (sec->PlaneMoving(sector_t::floor) || sec->ceilingdata) //jff 2/22/98 continue; // the loop used to break at the end if tag were 0, but would miss that step if "continue" occured [FDARI] @@ -1142,10 +1072,10 @@ bool EV_DoChange (line_t *line, EChange changetype, int tag) sector_t *sec; sector_t *secm; - secnum = -1; rtn = false; // change all sectors with the same tag as the linedef - while ((secnum = P_FindSectorFromTag (tag, secnum)) >= 0) + FSectorTagIterator it(tag); + while ((secnum = it.Next()) >= 0) { sec = §ors[secnum]; @@ -1374,20 +1304,12 @@ bool EV_StartWaggle (int tag, line_t *line, int height, int speed, int offset, bool retCode; retCode = false; - sectorIndex = -1; - if (tag == 0) - { - if (!line || !(sector = line->backsector)) - return retCode; - goto manual_waggle; - } + FSectorTagIterator itr(tag, line); - - while (tag && (sectorIndex = P_FindSectorFromTag(tag, sectorIndex)) >= 0) + while ((sectorIndex = itr.Next()) >= 0) { sector = §ors[sectorIndex]; -manual_waggle: if ((!ceiling && sector->PlaneMoving(sector_t::floor)) || (ceiling && sector->PlaneMoving(sector_t::ceiling))) { // Already busy with another thinker diff --git a/src/p_glnodes.cpp b/src/p_glnodes.cpp index 1b34e8bbc..547cecace 100644 --- a/src/p_glnodes.cpp +++ b/src/p_glnodes.cpp @@ -338,7 +338,14 @@ static bool LoadGLSegs(FileReader * lump) ml->side=LittleShort(ml->side); segs[i].sidedef = ldef->sidedef[ml->side]; - segs[i].frontsector = ldef->sidedef[ml->side]->sector; + if (ldef->sidedef[ml->side] != NULL) + { + segs[i].frontsector = ldef->sidedef[ml->side]->sector; + } + else + { + segs[i].frontsector = NULL; + } if (ldef->flags & ML_TWOSIDED && ldef->sidedef[ml->side^1] != NULL) { segs[i].backsector = ldef->sidedef[ml->side^1]->sector; @@ -346,7 +353,7 @@ static bool LoadGLSegs(FileReader * lump) else { ldef->flags &= ~ML_TWOSIDED; - segs[i].backsector = 0; + segs[i].backsector = NULL; } } @@ -385,7 +392,14 @@ static bool LoadGLSegs(FileReader * lump) ml->side=LittleShort(ml->side); segs[i].sidedef = ldef->sidedef[ml->side]; - segs[i].frontsector = ldef->sidedef[ml->side]->sector; + if (ldef->sidedef[ml->side] != NULL) + { + segs[i].frontsector = ldef->sidedef[ml->side]->sector; + } + else + { + segs[i].frontsector = NULL; + } if (ldef->flags & ML_TWOSIDED && ldef->sidedef[ml->side^1] != NULL) { segs[i].backsector = ldef->sidedef[ml->side^1]->sector; @@ -393,7 +407,7 @@ static bool LoadGLSegs(FileReader * lump) else { ldef->flags &= ~ML_TWOSIDED; - segs[i].backsector = 0; + segs[i].backsector = NULL; } } diff --git a/src/p_interaction.cpp b/src/p_interaction.cpp index d9d7971ca..1e9dbf9b6 100644 --- a/src/p_interaction.cpp +++ b/src/p_interaction.cpp @@ -925,9 +925,9 @@ static inline bool MustForcePain(AActor *target, AActor *inflictor) (inflictor->flags6 & MF6_FORCEPAIN) && !(inflictor->flags5 & MF5_PAINLESS)); } -static inline bool isFakePain(AActor *target, AActor *inflictor) +static inline bool isFakePain(AActor *target, AActor *inflictor, int damage) { - return ((target->flags7 & MF7_ALLOWPAIN) || ((inflictor != NULL) && (inflictor->flags7 & MF7_CAUSEPAIN))); + return ((target->flags7 & MF7_ALLOWPAIN && damage > 0) || ((inflictor != NULL) && (inflictor->flags7 & MF7_CAUSEPAIN))); } @@ -950,13 +950,15 @@ int P_DamageMobj (AActor *target, AActor *inflictor, AActor *source, int damage, int fakeDamage = 0; int holdDamage = 0; + if (damage < 0) damage = 0; + if (target == NULL || !((target->flags & MF_SHOOTABLE) || (target->flags6 & MF6_VULNERABLE))) { // Shouldn't happen return -1; } //Rather than unnecessarily call the function over and over again, let's be a little more efficient. - fakedPain = (isFakePain(target, inflictor)); + fakedPain = (isFakePain(target, inflictor, damage)); forcedPain = (MustForcePain(target, inflictor)); // Spectral targets only take damage from spectral projectiles. @@ -989,9 +991,11 @@ int P_DamageMobj (AActor *target, AActor *inflictor, AActor *source, int damage, { if (fakedPain) { - invulpain = true; //This returns -1 later. - fakeDamage = damage; - goto fakepain; //The label is above the massive pile of checks. + // big mess here: What do we use for the pain threshold? + // We cannot run the various damage filters below so for consistency it needs to be 0. + damage = 0; + invulpain = true; + goto fakepain; } else return -1; @@ -1010,12 +1014,6 @@ int P_DamageMobj (AActor *target, AActor *inflictor, AActor *source, int damage, } } - if ((fakedPain) && (damage < TELEFRAG_DAMAGE)) - { - //Intentionally do not jump to fakepain because the damage hasn't been dished out yet. - //Once it's dished out, THEN we can disregard damage factors affecting pain chances. - fakeDamage = damage; - } if (inflictor != NULL) { @@ -1035,7 +1033,9 @@ int P_DamageMobj (AActor *target, AActor *inflictor, AActor *source, int damage, { target->velx = target->vely = target->velz = 0; } - if (!(flags & DMG_FORCED)) // DMG_FORCED skips all special damage checks + + player = target->player; + if (!(flags & DMG_FORCED)) // DMG_FORCED skips all special damage checks, TELEFRAG_DAMAGE may not be reduced at all { if (target->flags2 & MF2_DORMANT) { @@ -1043,105 +1043,97 @@ int P_DamageMobj (AActor *target, AActor *inflictor, AActor *source, int damage, return -1; } - player = target->player; - if (player && damage > 1 && damage < TELEFRAG_DAMAGE) + if (damage < TELEFRAG_DAMAGE) // TELEFRAG_DAMAGE may not be reduced at all or it may not guarantee its effect. { - // Take half damage in trainer mode - damage = FixedMul(damage, G_SkillProperty(SKILLP_DamageFactor)); - } - // Special damage types - if (inflictor) - { - if (inflictor->flags4 & MF4_SPECTRAL) + if (player && damage > 1) { - if (player != NULL) + // Take half damage in trainer mode + damage = FixedMul(damage, G_SkillProperty(SKILLP_DamageFactor)); + } + // Special damage types + if (inflictor) + { + if (inflictor->flags4 & MF4_SPECTRAL) { - if (!deathmatch && inflictor->FriendPlayer > 0) - return -1; + if (player != NULL) + { + if (!deathmatch && inflictor->FriendPlayer > 0) + return -1; + } + else if (target->flags4 & MF4_SPECTRAL) + { + if (inflictor->FriendPlayer == 0 && !target->IsHostile(inflictor)) + return -1; + } } - else if (target->flags4 & MF4_SPECTRAL) + + damage = inflictor->DoSpecialDamage(target, damage, mod); + if (damage < 0) { - if (inflictor->FriendPlayer == 0 && !target->IsHostile(inflictor)) - return -1; + return -1; } } - if (damage > 0) - damage = inflictor->DoSpecialDamage (target, damage, mod); - if ((damage == -1) && (target->player == NULL)) //This isn't meant for the player. - { - if (fakedPain) //Hold off ending the function before we can deal the pain chances. - goto fakepain; - return -1; - } - } - // Handle active damage modifiers (e.g. PowerDamage) - if (source != NULL) - { int olddam = damage; - if (source->Inventory != NULL) + if (damage > 0 && source != NULL) { - source->Inventory->ModifyDamage(olddam, mod, damage, false); + damage = FixedMul(damage, source->DamageMultiply); + + // Handle active damage modifiers (e.g. PowerDamage) + if (damage > 0 && source->Inventory != NULL) + { + source->Inventory->ModifyDamage(damage, mod, damage, false); + } } - damage = FixedMul(damage, source->DamageMultiply); - - if (((source->flags7 & MF7_CAUSEPAIN) && (fakeDamage <= 0)) || (olddam != damage && damage <= 0)) - { // Still allow FORCEPAIN - if (forcedPain) - goto dopain; - else if (fakedPain) - goto fakepain; - - return -1; - } - } - // Handle passive damage modifiers (e.g. PowerProtection), provided they are not afflicted with protection penetrating powers. - if ((target->Inventory != NULL) && !(flags & DMG_NO_PROTECT)) - { - int olddam = damage; - target->Inventory->ModifyDamage(olddam, mod, damage, true); - if ((olddam != damage && damage <= 0) && target->player == NULL) - { // Still allow FORCEPAIN and make sure we're still passing along fake damage to hit enemies for their pain states. - if (forcedPain) - goto dopain; - else if (fakedPain) - goto fakepain; - - return -1; - } - } - - if (!(flags & DMG_NO_FACTOR)) - { - damage = FixedMul(damage, target->DamageFactor); - if (damage > 0) + // Handle passive damage modifiers (e.g. PowerProtection), provided they are not afflicted with protection penetrating powers. + if (damage > 0 && (target->Inventory != NULL) && !(flags & DMG_NO_PROTECT)) { - damage = DamageTypeDefinition::ApplyMobjDamageFactor(damage, mod, target->GetClass()->ActorInfo->DamageFactors); + target->Inventory->ModifyDamage(damage, mod, damage, true); + } + if (damage > 0 && !(flags & DMG_NO_FACTOR)) + { + damage = FixedMul(damage, target->DamageFactor); + if (damage > 0) + { + damage = DamageTypeDefinition::ApplyMobjDamageFactor(damage, mod, target->GetClass()->ActorInfo->DamageFactors); + } } - if (damage <= 0 && target->player == NULL) - { // Still allow FORCEPAIN - if (forcedPain) - goto dopain; - else if (fakedPain) - goto fakepain; - return -1; + if (damage >= 0) + { + damage = target->TakeSpecialDamage(inflictor, source, damage, mod); + } + + // '<0' is handled below. This only handles the case where damage gets reduced to 0. + if (damage == 0 && olddam > 0) + { + { // Still allow FORCEPAIN + if (forcedPain) + { + goto dopain; + } + else if (fakedPain) + { + goto fakepain; + } + return -1; + } } } - if (damage > 0) - damage = target->TakeSpecialDamage (inflictor, source, damage, mod); + if (target->flags5 & MF5_NODAMAGE) + { + damage = 0; + } } - if (damage == -1 && target->player == NULL) //Make sure it's not a player, the pain has yet to be processed with cheats. + if (damage < 0) { - if (fakedPain) - goto fakepain; - + // any negative value means that something in the above chain has cancelled out all damage and all damage effects, including pain. return -1; } // Push the target unless the source's weapon's kickback is 0. // (i.e. Gauntlets/Chainsaw) - if (!(plrDontThrust) && inflictor && inflictor != target // [RH] Not if hurting own self + if (!plrDontThrust && inflictor && inflictor != target // [RH] Not if hurting own self && !(target->flags & MF_NOCLIP) && !(inflictor->flags2 & MF2_NODMGTHRUST) && !(flags & DMG_THRUSTLESS) @@ -1182,10 +1174,11 @@ int P_DamageMobj (AActor *target, AActor *inflictor, AActor *source, int damage, { fltthrust = clamp((damage * 0.125 * kickback) / target->Mass, 0., fltthrust); } + thrust = FLOAT2FIXED(fltthrust); - // Don't apply ultra-small damage thrust. - if (thrust < FRACUNIT / 100) - thrust = 0; + + // Don't apply ultra-small damage thrust + if (thrust < FRACUNIT/100) thrust = 0; // make fall forwards sometimes if ((damage < 40) && (damage > target->health) @@ -1194,7 +1187,8 @@ int P_DamageMobj (AActor *target, AActor *inflictor, AActor *source, int damage, // [RH] But only if not too fast and not flying && thrust < 10*FRACUNIT && !(target->flags & MF_NOGRAVITY) - && (inflictor == NULL || !(inflictor->flags5 & MF5_NOFORWARDFALL))) + && (inflictor == NULL || !(inflictor->flags5 & MF5_NOFORWARDFALL)) + ) { ang += ANG180; thrust *= 4; @@ -1230,8 +1224,22 @@ int P_DamageMobj (AActor *target, AActor *inflictor, AActor *source, int damage, if (damage < TELEFRAG_DAMAGE) { // Still allow telefragging :-( damage = (int)((float)damage * level.teamdamage); - if (damage <= 0) + if (damage < 0) + { return damage; + } + else if (damage == 0) + { + if (forcedPain) + { + goto dopain; + } + else if (fakedPain) + { + goto fakepain; + } + return -1; + } } } @@ -1268,7 +1276,6 @@ int P_DamageMobj (AActor *target, AActor *inflictor, AActor *source, int damage, else if ((((player->mo->flags7 & MF7_ALLOWPAIN) || (player->mo->flags5 & MF5_NODAMAGE)) || ((inflictor != NULL) && (inflictor->flags7 & MF7_CAUSEPAIN)))) { invulpain = true; - fakeDamage = damage; goto fakepain; } else @@ -1325,7 +1332,7 @@ int P_DamageMobj (AActor *target, AActor *inflictor, AActor *source, int damage, // but telefragging should still do enough damage to kill the player) // Ignore players that are already dead. // [MC]Buddha2 absorbs telefrag damage, and anything else thrown their way. - if (((player->cheats & CF_BUDDHA2) || (((player->cheats & CF_BUDDHA) || (player->mo->flags7 & MF7_BUDDHA)) && (damage < TELEFRAG_DAMAGE))) && (player->playerstate != PST_DEAD)) + if (!(flags & DMG_FORCED) && (((player->cheats & CF_BUDDHA2) || (((player->cheats & CF_BUDDHA) || (player->mo->flags7 & MF7_BUDDHA)) && (damage < TELEFRAG_DAMAGE))) && (player->playerstate != PST_DEAD))) { // If this is a voodoo doll we need to handle the real player as well. player->mo->health = target->health = player->health = 1; @@ -1390,7 +1397,7 @@ int P_DamageMobj (AActor *target, AActor *inflictor, AActor *source, int damage, if (target->health <= 0) { //[MC]Buddha flag for monsters. - if ((target->flags7 & MF7_BUDDHA) && (damage < TELEFRAG_DAMAGE) && ((inflictor == NULL || !(inflictor->flags3 & MF7_FOILBUDDHA)) && !(flags & DMG_FOILBUDDHA))) + if (!(flags & DMG_FORCED) && ((target->flags7 & MF7_BUDDHA) && (damage < TELEFRAG_DAMAGE) && ((inflictor == NULL || !(inflictor->flags7 & MF7_FOILBUDDHA)) && !(flags & DMG_FOILBUDDHA)))) { //FOILBUDDHA or Telefrag damage must kill it. target->health = 1; } @@ -1451,15 +1458,6 @@ int P_DamageMobj (AActor *target, AActor *inflictor, AActor *source, int damage, fakepain: //Needed so we can skip the rest of the above, but still obey the original rules. - //CAUSEPAIN can always attempt to trigger the chances of pain. - //ALLOWPAIN can do the same, only if the (unfiltered aka fake) damage is greater than 0. - if ((((target->flags7 & MF7_ALLOWPAIN) && (fakeDamage > 0)) - || ((inflictor != NULL) && (inflictor->flags7 & MF7_CAUSEPAIN)))) - { - holdDamage = damage; //Store the modified damage away after factors are taken into account. - damage = fakeDamage; //Retrieve the original damage. - } - if (!(target->flags5 & MF5_NOPAIN) && (inflictor == NULL || !(inflictor->flags5 & MF5_PAINLESS)) && (target->player != NULL || !G_SkillProperty(SKILLP_NoPain)) && !(target->flags & MF_SKULLFLY)) { @@ -1474,7 +1472,7 @@ fakepain: //Needed so we can skip the rest of the above, but still obey the orig } } - if ((((damage >= target->PainThreshold)) && (pr_damagemobj() < painchance)) + if (((damage >= target->PainThreshold) && (pr_damagemobj() < painchance)) || (inflictor != NULL && (inflictor->flags6 & MF6_FORCEPAIN))) { dopain: @@ -1555,10 +1553,6 @@ dopain: { return -1; //NOW we return -1! } - else if (fakedPain) - { - return holdDamage; //This is the calculated damage after all is said and done. - } return damage; } diff --git a/src/p_lights.cpp b/src/p_lights.cpp index 878b1f5c3..49ef130e8 100644 --- a/src/p_lights.cpp +++ b/src/p_lights.cpp @@ -189,9 +189,8 @@ DFlicker::DFlicker (sector_t *sector, int upper, int lower) void EV_StartLightFlickering (int tag, int upper, int lower) { int secnum; - - secnum = -1; - while ((secnum = P_FindSectorFromTag (tag,secnum)) >= 0) + FSectorTagIterator it(tag); + while ((secnum = it.Next()) >= 0) { new DFlicker (§ors[secnum], upper, lower); } @@ -359,9 +358,8 @@ DStrobe::DStrobe (sector_t *sector, int utics, int ltics, bool inSync) void EV_StartLightStrobing (int tag, int upper, int lower, int utics, int ltics) { int secnum; - - secnum = -1; - while ((secnum = P_FindSectorFromTag (tag,secnum)) >= 0) + FSectorTagIterator it(tag); + while ((secnum = it.Next()) >= 0) { sector_t *sec = §ors[secnum]; if (sec->lightingdata) @@ -374,9 +372,8 @@ void EV_StartLightStrobing (int tag, int upper, int lower, int utics, int ltics) void EV_StartLightStrobing (int tag, int utics, int ltics) { int secnum; - - secnum = -1; - while ((secnum = P_FindSectorFromTag (tag,secnum)) >= 0) + FSectorTagIterator it(tag); + while ((secnum = it.Next()) >= 0) { sector_t *sec = §ors[secnum]; if (sec->lightingdata) @@ -396,16 +393,14 @@ void EV_StartLightStrobing (int tag, int utics, int ltics) void EV_TurnTagLightsOff (int tag) { - int i; int secnum; - - // [RH] Don't do a linear search - for (secnum = -1; (secnum = P_FindSectorFromTag (tag, secnum)) >= 0; ) + FSectorTagIterator it(tag); + while ((secnum = it.Next()) >= 0) { sector_t *sector = sectors + secnum; int min = sector->lightlevel; - for (i = 0; i < sector->linecount; i++) + for (int i = 0; i < sector->linecount; i++) { sector_t *tsec = getNextSector (sector->lines[i],sector); if (!tsec) @@ -427,10 +422,9 @@ void EV_TurnTagLightsOff (int tag) void EV_LightTurnOn (int tag, int bright) { - int secnum = -1; - - // [RH] Don't do a linear search - while ((secnum = P_FindSectorFromTag (tag, secnum)) >= 0) + int secnum; + FSectorTagIterator it(tag); + while ((secnum = it.Next()) >= 0) { sector_t *sector = sectors + secnum; int tbright = bright; //jff 5/17/98 search for maximum PER sector @@ -480,15 +474,14 @@ void EV_LightTurnOn (int tag, int bright) void EV_LightTurnOnPartway (int tag, fixed_t frac) { - int i; - frac = clamp (frac, 0, FRACUNIT); // Search all sectors for ones with same tag as activating line - i = -1; - while ((i = P_FindSectorFromTag (tag, i)) >= 0) + int secnum; + FSectorTagIterator it(tag); + while ((secnum = it.Next()) >= 0) { - sector_t *temp, *sector = sectors + i; + sector_t *temp, *sector = §ors[secnum]; int j, bright = 0, min = sector->lightlevel; for (j = 0; j < sector->linecount; ++j) @@ -520,9 +513,9 @@ void EV_LightTurnOnPartway (int tag, fixed_t frac) void EV_LightChange (int tag, int value) { - int secnum = -1; - - while ((secnum = P_FindSectorFromTag (tag, secnum)) >= 0) + int secnum; + FSectorTagIterator it(tag); + while ((secnum = it.Next()) >= 0) { sectors[secnum].SetLightLevel(sectors[secnum].lightlevel + value); } @@ -681,8 +674,8 @@ void EV_StartLightGlowing (int tag, int upper, int lower, int tics) lower = temp; } - secnum = -1; - while ((secnum = P_FindSectorFromTag (tag,secnum)) >= 0) + FSectorTagIterator it(tag); + while ((secnum = it.Next()) >= 0) { sector_t *sec = §ors[secnum]; if (sec->lightingdata) @@ -701,9 +694,8 @@ void EV_StartLightGlowing (int tag, int upper, int lower, int tics) void EV_StartLightFading (int tag, int value, int tics) { int secnum; - - secnum = -1; - while ((secnum = P_FindSectorFromTag (tag,secnum)) >= 0) + FSectorTagIterator it(tag); + while ((secnum = it.Next()) >= 0) { sector_t *sec = §ors[secnum]; if (sec->lightingdata) @@ -846,7 +838,7 @@ void EV_StopLightEffect (int tag) while ((effect = iterator.Next()) != NULL) { - if (effect->GetSector()->tag == tag) + if (tagManager.SectorHasTag(effect->GetSector(), tag)) { effect->Destroy(); } diff --git a/src/p_linkedsectors.cpp b/src/p_linkedsectors.cpp index 2d06bc043..b9ef8b100 100644 --- a/src/p_linkedsectors.cpp +++ b/src/p_linkedsectors.cpp @@ -278,7 +278,7 @@ static void RemoveTaggedSectors(extsector_t::linked::plane &scrollplane, int tag { for(int i = scrollplane.Sectors.Size()-1; i>=0; i--) { - if (scrollplane.Sectors[i].Sector->tag == tag) + if (tagManager.SectorHasTag(scrollplane.Sectors[i].Sector, tag)) { scrollplane.Sectors.Delete(i); } @@ -316,7 +316,9 @@ bool P_AddSectorLinks(sector_t *control, int tag, INTBOOL ceiling, int movetype) if (movetype > 0) { - for(int sec = -1; (sec = P_FindSectorFromTag(tag, sec)) >= 0; ) + int sec; + FSectorTagIterator itr(tag); + while ((sec = itr.Next()) >= 0) { // Don't attach to self! if (control != §ors[sec]) @@ -346,7 +348,9 @@ void P_AddSectorLinksByID(sector_t *control, int id, INTBOOL ceiling) { extsector_t::linked::plane &scrollplane = ceiling? control->e->Linked.Ceiling : control->e->Linked.Floor; - for(int line = -1; (line = P_FindLineFromID(id, line)) >= 0; ) + FLineIdIterator itr(id); + int line; + while ((line = itr.Next()) >= 0) { line_t *ld = &lines[line]; diff --git a/src/p_lnspec.cpp b/src/p_lnspec.cpp index b550eeb77..37d6d6058 100644 --- a/src/p_lnspec.cpp +++ b/src/p_lnspec.cpp @@ -1266,7 +1266,7 @@ FUNC(LS_Thing_Destroy) while (actor) { AActor *temp = iterator.Next (); - if (actor->flags & MF_SHOOTABLE && actor->Sector->tag == arg2) + if (actor->flags & MF_SHOOTABLE && tagManager.SectorHasTag(actor->Sector, arg2)) P_DamageMobj (actor, NULL, it, arg1 ? TELEFRAG_DAMAGE : actor->health, NAME_None); actor = temp; } @@ -1279,7 +1279,7 @@ FUNC(LS_Thing_Destroy) while (actor) { AActor *temp = iterator.Next (); - if (actor->flags & MF_SHOOTABLE && (arg2 == 0 || actor->Sector->tag == arg2)) + if (actor->flags & MF_SHOOTABLE && (arg2 == 0 || tagManager.SectorHasTag(actor->Sector, arg2))) P_DamageMobj (actor, NULL, it, arg1 ? TELEFRAG_DAMAGE : actor->health, NAME_None); actor = temp; } @@ -1914,9 +1914,9 @@ FUNC(LS_Sector_ChangeSound) if (!arg0) return false; - secNum = -1; rtn = false; - while ((secNum = P_FindSectorFromTag (arg0, secNum)) >= 0) + FSectorTagIterator itr(arg0); + while ((secNum = itr.Next()) >= 0) { sectors[secNum].seqType = arg1; rtn = true; @@ -1933,9 +1933,9 @@ FUNC(LS_Sector_ChangeFlags) if (!arg0) return false; - secNum = -1; rtn = false; - while ((secNum = P_FindSectorFromTag (arg0, secNum)) >= 0) + FSectorTagIterator itr(arg0); + while ((secNum = itr.Next()) >= 0) { sectors[secNum].Flags = (sectors[secNum].Flags | arg1) & ~arg2; rtn = true; @@ -1969,10 +1969,11 @@ void AdjustPusher (int tag, int magnitude, int angle, DPusher::EPusher type) } size_t numcollected = Collection.Size (); - int secnum = -1; + int secnum; // Now create pushers for any sectors that don't already have them. - while ((secnum = P_FindSectorFromTag (tag, secnum)) >= 0) + FSectorTagIterator itr(tag); + while ((secnum = itr.Next()) >= 0) { unsigned int i; for (i = 0; i < numcollected; i++) @@ -2020,9 +2021,9 @@ FUNC(LS_Sector_SetTranslucent) { if (arg0 != 0) { - int secnum = -1; - - while ((secnum = P_FindSectorFromTag (arg0, secnum)) >= 0) + int secnum; + FSectorTagIterator itr(arg0); + while ((secnum = itr.Next()) >= 0) { sectors[secnum].SetAlpha(arg1, Scale(arg2, OPAQUE, 255)); sectors[secnum].ChangeFlags(arg1, ~PLANEF_ADDITIVE, arg3? PLANEF_ADDITIVE:0); @@ -2037,7 +2038,7 @@ FUNC(LS_Sector_SetLink) { if (arg0 != 0) // control tag == 0 is for static initialization and must not be handled here { - int control = P_FindSectorFromTag(arg0, -1); + int control = P_FindFirstSectorFromTag(arg0); if (control >= 0) { return P_AddSectorLinks(§ors[control], arg1, arg2, arg3); @@ -2062,7 +2063,7 @@ static void SetWallScroller (int id, int sidechoice, fixed_t dx, fixed_t dy, int { int wallnum = scroller->GetWallNum (); - if (wallnum >= 0 && sides[wallnum].linedef->id == id && + if (wallnum >= 0 && tagManager.LineHasID(sides[wallnum].linedef, id) && int(sides[wallnum].linedef->sidedef[sidechoice] - sides) == wallnum && Where == scroller->GetScrollParts()) { @@ -2081,7 +2082,7 @@ static void SetWallScroller (int id, int sidechoice, fixed_t dx, fixed_t dy, int while ( (collect.Obj = iterator.Next ()) ) { if ((collect.RefNum = ((DScroller *)collect.Obj)->GetWallNum ()) != -1 && - sides[collect.RefNum].linedef->id == id && + tagManager.LineHasID(sides[collect.RefNum].linedef, id) && int(sides[collect.RefNum].linedef->sidedef[sidechoice] - sides) == collect.RefNum && Where == ((DScroller *)collect.Obj)->GetScrollParts()) { @@ -2092,10 +2093,11 @@ static void SetWallScroller (int id, int sidechoice, fixed_t dx, fixed_t dy, int } size_t numcollected = Collection.Size (); - int linenum = -1; + int linenum; // Now create scrollers for any walls that don't already have them. - while ((linenum = P_FindLineFromID (id, linenum)) >= 0) + FLineIdIterator itr(id); + while ((linenum = itr.Next()) >= 0) { if (lines[linenum].sidedef[sidechoice] != NULL) { @@ -2167,7 +2169,7 @@ static void SetScroller (int tag, DScroller::EScrollType type, fixed_t dx, fixed { if (scroller->IsType (type)) { - if (sectors[scroller->GetAffectee ()].tag == tag) + if (tagManager.SectorHasTag(scroller->GetAffectee (), tag)) { i++; scroller->SetRate (dx, dy); @@ -2181,7 +2183,8 @@ static void SetScroller (int tag, DScroller::EScrollType type, fixed_t dx, fixed } // Need to create scrollers for the sector(s) - for (i = -1; (i = P_FindSectorFromTag (tag, i)) >= 0; ) + FSectorTagIterator itr(tag); + while ((i = itr.Next()) >= 0) { new DScroller (type, dx, dy, -1, i, 0); } @@ -2240,8 +2243,10 @@ FUNC(LS_Sector_SetDamage) // problems by adding an unwanted constructor. // Since it doesn't really matter whether the type is translated // here or in P_PlayerInSpecialSector I think it's the best solution. - int secnum = -1; - while ((secnum = P_FindSectorFromTag (arg0, secnum)) >= 0) { + FSectorTagIterator itr(arg0); + int secnum; + while ((secnum = itr.Next()) >= 0) + { sectors[secnum].damage = arg1; sectors[secnum].mod = arg2; } @@ -2251,14 +2256,15 @@ FUNC(LS_Sector_SetDamage) FUNC(LS_Sector_SetGravity) // Sector_SetGravity (tag, intpart, fracpart) { - int secnum = -1; float gravity; if (arg2 > 99) arg2 = 99; gravity = (float)arg1 + (float)arg2 * 0.01f; - while ((secnum = P_FindSectorFromTag (arg0, secnum)) >= 0) + FSectorTagIterator itr(arg0); + int secnum; + while ((secnum = itr.Next()) >= 0) sectors[secnum].gravity = gravity; return true; @@ -2267,9 +2273,9 @@ FUNC(LS_Sector_SetGravity) FUNC(LS_Sector_SetColor) // Sector_SetColor (tag, r, g, b, desaturate) { - int secnum = -1; - - while ((secnum = P_FindSectorFromTag (arg0, secnum)) >= 0) + FSectorTagIterator itr(arg0); + int secnum; + while ((secnum = itr.Next()) >= 0) { sectors[secnum].SetColor(arg1, arg2, arg3, arg4); } @@ -2280,9 +2286,9 @@ FUNC(LS_Sector_SetColor) FUNC(LS_Sector_SetFade) // Sector_SetFade (tag, r, g, b) { - int secnum = -1; - - while ((secnum = P_FindSectorFromTag (arg0, secnum)) >= 0) + FSectorTagIterator itr(arg0); + int secnum; + while ((secnum = itr.Next()) >= 0) { sectors[secnum].SetFade(arg1, arg2, arg3); } @@ -2292,11 +2298,12 @@ FUNC(LS_Sector_SetFade) FUNC(LS_Sector_SetCeilingPanning) // Sector_SetCeilingPanning (tag, x-int, x-frac, y-int, y-frac) { - int secnum = -1; fixed_t xofs = arg1 * FRACUNIT + arg2 * (FRACUNIT/100); fixed_t yofs = arg3 * FRACUNIT + arg4 * (FRACUNIT/100); - while ((secnum = P_FindSectorFromTag (arg0, secnum)) >= 0) + FSectorTagIterator itr(arg0); + int secnum; + while ((secnum = itr.Next()) >= 0) { sectors[secnum].SetXOffset(sector_t::ceiling, xofs); sectors[secnum].SetYOffset(sector_t::ceiling, yofs); @@ -2307,11 +2314,12 @@ FUNC(LS_Sector_SetCeilingPanning) FUNC(LS_Sector_SetFloorPanning) // Sector_SetFloorPanning (tag, x-int, x-frac, y-int, y-frac) { - int secnum = -1; fixed_t xofs = arg1 * FRACUNIT + arg2 * (FRACUNIT/100); fixed_t yofs = arg3 * FRACUNIT + arg4 * (FRACUNIT/100); - while ((secnum = P_FindSectorFromTag (arg0, secnum)) >= 0) + FSectorTagIterator itr(arg0); + int secnum; + while ((secnum = itr.Next()) >= 0) { sectors[secnum].SetXOffset(sector_t::floor, xofs); sectors[secnum].SetYOffset(sector_t::floor, yofs); @@ -2322,7 +2330,6 @@ FUNC(LS_Sector_SetFloorPanning) FUNC(LS_Sector_SetFloorScale) // Sector_SetFloorScale (tag, x-int, x-frac, y-int, y-frac) { - int secnum = -1; fixed_t xscale = arg1 * FRACUNIT + arg2 * (FRACUNIT/100); fixed_t yscale = arg3 * FRACUNIT + arg4 * (FRACUNIT/100); @@ -2331,7 +2338,9 @@ FUNC(LS_Sector_SetFloorScale) if (yscale) yscale = FixedDiv (FRACUNIT, yscale); - while ((secnum = P_FindSectorFromTag (arg0, secnum)) >= 0) + FSectorTagIterator itr(arg0); + int secnum; + while ((secnum = itr.Next()) >= 0) { if (xscale) sectors[secnum].SetXScale(sector_t::floor, xscale); @@ -2344,7 +2353,6 @@ FUNC(LS_Sector_SetFloorScale) FUNC(LS_Sector_SetCeilingScale) // Sector_SetCeilingScale (tag, x-int, x-frac, y-int, y-frac) { - int secnum = -1; fixed_t xscale = arg1 * FRACUNIT + arg2 * (FRACUNIT/100); fixed_t yscale = arg3 * FRACUNIT + arg4 * (FRACUNIT/100); @@ -2353,7 +2361,9 @@ FUNC(LS_Sector_SetCeilingScale) if (yscale) yscale = FixedDiv (FRACUNIT, yscale); - while ((secnum = P_FindSectorFromTag (arg0, secnum)) >= 0) + FSectorTagIterator itr(arg0); + int secnum; + while ((secnum = itr.Next()) >= 0) { if (xscale) sectors[secnum].SetXScale(sector_t::ceiling, xscale); @@ -2366,14 +2376,14 @@ FUNC(LS_Sector_SetCeilingScale) FUNC(LS_Sector_SetFloorScale2) // Sector_SetFloorScale2 (tag, x-factor, y-factor) { - int secnum = -1; - if (arg1) arg1 = FixedDiv (FRACUNIT, arg1); if (arg2) arg2 = FixedDiv (FRACUNIT, arg2); - while ((secnum = P_FindSectorFromTag (arg0, secnum)) >= 0) + FSectorTagIterator itr(arg0); + int secnum; + while ((secnum = itr.Next()) >= 0) { if (arg1) sectors[secnum].SetXScale(sector_t::floor, arg1); @@ -2386,14 +2396,14 @@ FUNC(LS_Sector_SetFloorScale2) FUNC(LS_Sector_SetCeilingScale2) // Sector_SetFloorScale2 (tag, x-factor, y-factor) { - int secnum = -1; - if (arg1) arg1 = FixedDiv (FRACUNIT, arg1); if (arg2) arg2 = FixedDiv (FRACUNIT, arg2); - while ((secnum = P_FindSectorFromTag (arg0, secnum)) >= 0) + FSectorTagIterator itr(arg0); + int secnum; + while ((secnum = itr.Next()) >= 0) { if (arg1) sectors[secnum].SetXScale(sector_t::ceiling, arg1); @@ -2406,11 +2416,12 @@ FUNC(LS_Sector_SetCeilingScale2) FUNC(LS_Sector_SetRotation) // Sector_SetRotation (tag, floor-angle, ceiling-angle) { - int secnum = -1; angle_t ceiling = arg2 * ANGLE_1; angle_t floor = arg1 * ANGLE_1; - while ((secnum = P_FindSectorFromTag (arg0, secnum)) >= 0) + FSectorTagIterator itr(arg0); + int secnum; + while ((secnum = itr.Next()) >= 0) { sectors[secnum].SetAngle(sector_t::floor, floor); sectors[secnum].SetAngle(sector_t::ceiling, ceiling); @@ -2421,30 +2432,28 @@ FUNC(LS_Sector_SetRotation) FUNC(LS_Line_AlignCeiling) // Line_AlignCeiling (lineid, side) { - int line = P_FindLineFromID (arg0, -1); bool ret = 0; - if (line < 0) - I_Error ("Sector_AlignCeiling: Lineid %d is undefined", arg0); - do + FLineIdIterator itr(arg0); + int line; + while ((line = itr.Next()) >= 0) { ret |= P_AlignFlat (line, !!arg1, 1); - } while ( (line = P_FindLineFromID (arg0, line)) >= 0); + } return ret; } FUNC(LS_Line_AlignFloor) // Line_AlignFloor (lineid, side) { - int line = P_FindLineFromID (arg0, -1); bool ret = 0; - if (line < 0) - I_Error ("Sector_AlignFloor: Lineid %d is undefined", arg0); - do + FLineIdIterator itr(arg0); + int line; + while ((line = itr.Next()) >= 0) { ret |= P_AlignFlat (line, !!arg1, 0); - } while ( (line = P_FindLineFromID (arg0, line)) >= 0); + } return ret; } @@ -2456,7 +2465,9 @@ FUNC(LS_Line_SetTextureOffset) if (arg0 == 0 || arg3 < 0 || arg3 > 1) return false; - for(int line = -1; (line = P_FindLineFromID (arg0, line)) >= 0; ) + FLineIdIterator itr(arg0); + int line; + while ((line = itr.Next()) >= 0) { side_t *side = lines[line].sidedef[arg3]; if (side != NULL) @@ -2507,7 +2518,9 @@ FUNC(LS_Line_SetTextureScale) if (arg0 == 0 || arg3 < 0 || arg3 > 1) return false; - for(int line = -1; (line = P_FindLineFromID (arg0, line)) >= 0; ) + FLineIdIterator itr(arg0); + int line; + while ((line = itr.Next()) >= 0) { side_t *side = lines[line].sidedef[arg3]; if (side != NULL) @@ -2578,7 +2591,9 @@ FUNC(LS_Line_SetBlocking) if (arg2 & 1) clearflags |= flagtrans[i]; } - for(int line = -1; (line = P_FindLineFromID (arg0, line)) >= 0; ) + FLineIdIterator itr(arg0); + int line; + while ((line = itr.Next()) >= 0) { lines[line].flags = (lines[line].flags & ~clearflags) | setflags; } @@ -2871,8 +2886,9 @@ FUNC(LS_SetPlayerProperty) FUNC(LS_TranslucentLine) // TranslucentLine (id, amount, type) { - int linenum = -1; - while ((linenum = P_FindLineFromID (arg0, linenum)) >= 0) + FLineIdIterator itr(arg0); + int linenum; + while ((linenum = itr.Next()) >= 0) { lines[linenum].Alpha = Scale(clamp(arg1, 0, 255), FRACUNIT, 255); if (arg2 == 0) @@ -2997,10 +3013,11 @@ FUNC(LS_ForceField) FUNC(LS_ClearForceField) // ClearForceField (tag) { - int secnum = -1; bool rtn = false; - while ((secnum = P_FindSectorFromTag (arg0, secnum)) >= 0) + FSectorTagIterator itr(arg0); + int secnum; + while ((secnum = itr.Next()) >= 0) { sector_t *sec = §ors[secnum]; rtn = true; diff --git a/src/p_local.h b/src/p_local.h index fe7958807..682101e7f 100644 --- a/src/p_local.h +++ b/src/p_local.h @@ -160,7 +160,8 @@ void P_CheckFakeFloorTriggers (AActor *mo, fixed_t oldz, bool oldz_has_viewheigh // // [RH] P_THINGS // -extern TMap SpawnableThings; +extern FClassMap SpawnableThings; +extern FClassMap StrifeTypes; bool P_Thing_Spawn (int tid, AActor *source, int type, angle_t angle, bool fog, int newtid); bool P_Thing_Projectile (int tid, AActor *source, int type, const char * type_name, angle_t angle, @@ -174,6 +175,7 @@ void P_RemoveThing(AActor * actor); bool P_Thing_Raise(AActor *thing, AActor *raiser); bool P_Thing_CanRaise(AActor *thing); const PClass *P_GetSpawnableType(int spawnnum); +void InitSpawnablesFromMapinfo(); // // P_MAPUTL @@ -472,7 +474,7 @@ void P_TraceBleed (int damage, AActor *target); // random direction version bool P_HitFloor (AActor *thing); bool P_HitWater (AActor *thing, sector_t *sec, fixed_t splashx = FIXED_MIN, fixed_t splashy = FIXED_MIN, fixed_t splashz=FIXED_MIN, bool checkabove = false, bool alert = true); void P_CheckSplash(AActor *self, fixed_t distance); -void P_RailAttack (AActor *source, int damage, int offset_xy, fixed_t offset_z = 0, int color1 = 0, int color2 = 0, float maxdiff = 0, int flags = 0, const PClass *puff = NULL, angle_t angleoffset = 0, angle_t pitchoffset = 0, fixed_t distance = 8192*FRACUNIT, int duration = 0, float sparsity = 1.0, float drift = 1.0, const PClass *spawnclass = NULL); // [RH] Shoot a railgun +void P_RailAttack (AActor *source, int damage, int offset_xy, fixed_t offset_z = 0, int color1 = 0, int color2 = 0, float maxdiff = 0, int flags = 0, const PClass *puff = NULL, angle_t angleoffset = 0, angle_t pitchoffset = 0, fixed_t distance = 8192*FRACUNIT, int duration = 0, float sparsity = 1.0, float drift = 1.0, const PClass *spawnclass = NULL, int SpiralOffset = 270); // [RH] Shoot a railgun enum // P_RailAttack / A_RailAttack / A_CustomRailgun / P_DrawRailTrail flags { @@ -591,19 +593,6 @@ struct polyspawns_t short type; }; -enum -{ - PO_HEX_ANCHOR_TYPE = 3000, - PO_HEX_SPAWN_TYPE, - PO_HEX_SPAWNCRUSH_TYPE, - - // [RH] Thing numbers that don't conflict with Doom things - PO_ANCHOR_TYPE = 9300, - PO_SPAWN_TYPE, - PO_SPAWNCRUSH_TYPE, - PO_SPAWNHURT_TYPE -}; - extern int po_NumPolyobjs; extern polyspawns_t *polyspawns; // [RH] list of polyobject things to spawn diff --git a/src/p_map.cpp b/src/p_map.cpp index fa13274ef..6370fa849 100644 --- a/src/p_map.cpp +++ b/src/p_map.cpp @@ -1034,7 +1034,7 @@ bool PIT_CheckThing(AActor *thing, FCheckPosition &tm) // Both things overlap in x or y direction bool unblocking = false; - if (tm.FromPMove) + if (tm.FromPMove || tm.thing->player != NULL) { // Both actors already overlap. To prevent them from remaining stuck allow the move if it // takes them further apart or the move does not change the position (when called from P_ChangeSector.) @@ -1288,7 +1288,7 @@ bool PIT_CheckThing(AActor *thing, FCheckPosition &tm) // Do damage damage = tm.thing->GetMissileDamage((tm.thing->flags4 & MF4_STRIFEDAMAGE) ? 3 : 7, 1); - if ((damage > 0) || (tm.thing->flags6 & MF6_FORCEPAIN)) + if ((damage > 0) || (tm.thing->flags6 & MF6_FORCEPAIN) || (tm.thing->flags7 & MF7_CAUSEPAIN)) { int newdam = P_DamageMobj(thing, tm.thing, tm.thing->target, damage, tm.thing->DamageType); if (damage > 0) @@ -4140,7 +4140,7 @@ static ETraceStatus ProcessRailHit(FTraceResults &res, void *userdata) // // //========================================================================== -void P_RailAttack(AActor *source, int damage, int offset_xy, fixed_t offset_z, int color1, int color2, float maxdiff, int railflags, const PClass *puffclass, angle_t angleoffset, angle_t pitchoffset, fixed_t distance, int duration, float sparsity, float drift, const PClass *spawnclass) +void P_RailAttack(AActor *source, int damage, int offset_xy, fixed_t offset_z, int color1, int color2, float maxdiff, int railflags, const PClass *puffclass, angle_t angleoffset, angle_t pitchoffset, fixed_t distance, int duration, float sparsity, float drift, const PClass *spawnclass, int SpiralOffset) { fixed_t vx, vy, vz; angle_t angle, pitch; @@ -4243,13 +4243,16 @@ void P_RailAttack(AActor *source, int damage, int offset_xy, fixed_t offset_z, i P_SpawnPuff(source, puffclass, x, y, z, (source->angle + angleoffset) - ANG90, 1, puffflags, hitactor); } - if (puffDefaults && puffDefaults->PoisonDamage > 0 && puffDefaults->PoisonDuration != INT_MIN) - { - P_PoisonMobj(hitactor, thepuff ? thepuff : source, source, puffDefaults->PoisonDamage, puffDefaults->PoisonDuration, puffDefaults->PoisonPeriod, puffDefaults->PoisonDamageType); - } int dmgFlagPass = DMG_INFLICTOR_IS_PUFF; - dmgFlagPass += (puffDefaults->flags3 & MF3_FOILINVUL) ? DMG_FOILINVUL : 0; //[MC]Because the original foilinvul check wasn't working. - dmgFlagPass += (puffDefaults->flags7 & MF7_FOILBUDDHA) ? DMG_FOILBUDDHA : 0; + if (puffDefaults != NULL) // is this even possible? + { + if (puffDefaults->PoisonDamage > 0 && puffDefaults->PoisonDuration != INT_MIN) + { + P_PoisonMobj(hitactor, thepuff ? thepuff : source, source, puffDefaults->PoisonDamage, puffDefaults->PoisonDuration, puffDefaults->PoisonPeriod, puffDefaults->PoisonDamageType); + } + if (puffDefaults->flags3 & MF3_FOILINVUL) dmgFlagPass |= DMG_FOILINVUL; + if (puffDefaults->flags7 & MF7_FOILBUDDHA) dmgFlagPass |= DMG_FOILBUDDHA; + } int newdam = P_DamageMobj(hitactor, thepuff ? thepuff : source, source, damage, damagetype, dmgFlagPass); if (bleed) @@ -4289,7 +4292,7 @@ void P_RailAttack(AActor *source, int damage, int offset_xy, fixed_t offset_z, i end.X = FIXED2FLOAT(trace.X); end.Y = FIXED2FLOAT(trace.Y); end.Z = FIXED2FLOAT(trace.Z); - P_DrawRailTrail(source, start, end, color1, color2, maxdiff, railflags, spawnclass, source->angle + angleoffset, duration, sparsity, drift); + P_DrawRailTrail(source, start, end, color1, color2, maxdiff, railflags, spawnclass, source->angle + angleoffset, duration, sparsity, drift, SpiralOffset); } //========================================================================== @@ -4787,7 +4790,7 @@ void P_RadiusAttack(AActor *bombspot, AActor *bombsource, int bombdamage, int bo points *= thing->GetClass()->Meta.GetMetaFixed(AMETA_RDFactor, FRACUNIT) / (double)FRACUNIT; // points and bombdamage should be the same sign - if (((bombspot->flags7 & MF7_CAUSEPAIN) || (points * bombdamage) > 0) && P_CheckSight(thing, bombspot, SF_IGNOREVISIBILITY | SF_IGNOREWATERBOUNDARY)) + if (((points * bombdamage) > 0) && P_CheckSight(thing, bombspot, SF_IGNOREVISIBILITY | SF_IGNOREWATERBOUNDARY)) { // OK to damage; target is in direct path double velz; double thrust; diff --git a/src/p_mobj.cpp b/src/p_mobj.cpp index 608ecb407..5921f97e7 100644 --- a/src/p_mobj.cpp +++ b/src/p_mobj.cpp @@ -384,11 +384,6 @@ void AActor::Serialize (FArchive &arc) } } -void FMapThing::Serialize (FArchive &arc) -{ - arc << thingid << x << y << z << angle << type << flags << special - << args[0] << args[1] << args[2] << args[3] << args[4]; -} AActor::AActor () throw() { @@ -3442,7 +3437,7 @@ void AActor::Tick () } else if (scrolltype == Scroll_StrifeCurrent) { // Strife scroll special - int anglespeed = sec->tag - 100; + int anglespeed = tagManager.GetFirstSectorTag(sec) - 100; fixed_t carryspeed = DivScale32 (anglespeed % 10, 16*CARRYFACTOR); angle_t fineangle = (anglespeed / 10) << (32-3); fineangle >>= ANGLETOFINESHIFT; @@ -4480,7 +4475,8 @@ APlayerPawn *P_SpawnPlayer (FPlayerStart *mthing, int playernum, int flags) p->mo->ResetAirSupply(false); p->Uncrouch(); p->MinPitch = p->MaxPitch = 0; // will be filled in by PostBeginPlay()/netcode - + p->MUSINFOactor = NULL; + p->MUSINFOtics = -1; p->velx = p->vely = 0; // killough 10/98: initialize bobbing to 0. @@ -4596,70 +4592,83 @@ AActor *P_SpawnMapThing (FMapThing *mthing, int position) AActor *mobj; fixed_t x, y, z; - if (mthing->type == 0 || mthing->type == -1) + if (mthing->EdNum == 0 || mthing->EdNum == -1) return NULL; - // count deathmatch start positions - if (mthing->type == 11) - { - FPlayerStart start(mthing); - deathmatchstarts.Push(start); - return NULL; - } + // find which type to spawn + FDoomEdEntry *mentry = mthing->info; - // Convert Strife starts to Hexen-style starts - if (gameinfo.gametype == GAME_Strife && mthing->type >= 118 && mthing->type <= 127) + if (mentry == NULL) { - mthing->args[0] = mthing->type - 117; - mthing->type = 1; - } - - // [RH] Record polyobject-related things - if (gameinfo.gametype == GAME_Hexen) - { - switch (mthing->type) + // [RH] Don't die if the map tries to spawn an unknown thing + Printf ("Unknown type %i at (%i, %i)\n", + mthing->EdNum, + mthing->x>>FRACBITS, mthing->y>>FRACBITS); + mentry = DoomEdMap.CheckKey(0); + if (mentry == NULL) // we need a valid entry for the rest of this function so if we can't find a default, let's exit right away. { - case PO_HEX_ANCHOR_TYPE: - mthing->type = PO_ANCHOR_TYPE; - break; - case PO_HEX_SPAWN_TYPE: - mthing->type = PO_SPAWN_TYPE; - break; - case PO_HEX_SPAWNCRUSH_TYPE: - mthing->type = PO_SPAWNCRUSH_TYPE; - break; + return NULL; } } - - if (mthing->type == PO_ANCHOR_TYPE || - mthing->type == PO_SPAWN_TYPE || - mthing->type == PO_SPAWNCRUSH_TYPE || - mthing->type == PO_SPAWNHURT_TYPE) + if (mentry->Type == NULL && mentry->Special <= 0) { - polyspawns_t *polyspawn = new polyspawns_t; - polyspawn->next = polyspawns; - polyspawn->x = mthing->x; - polyspawn->y = mthing->y; - polyspawn->angle = mthing->angle; - polyspawn->type = mthing->type; - polyspawns = polyspawn; - if (mthing->type != PO_ANCHOR_TYPE) - po_NumPolyobjs++; + // has been explicitly set to not spawning anything. return NULL; } - // check for players specially - int pnum = -1; - - if (mthing->type <= 4 && mthing->type > 0) + // copy args to mapthing so that we have them in one place for the rest of this function + if (mentry->ArgsDefined) { - pnum = mthing->type - 1; + if (mentry->Type!= NULL) mthing->special = mentry->Special; + memcpy(mthing->args, mentry->Args, sizeof(mthing->args)); } - else + + int pnum = -1; + if (mentry->Type == NULL) { - if (mthing->type >= gameinfo.player5start && mthing->type < gameinfo.player5start + MAXPLAYERS - 4) + + switch (mentry->Special) { - pnum = mthing->type - gameinfo.player5start + 4; + case SMT_DeathmatchStart: + { + // count deathmatch start positions + FPlayerStart start(mthing, 0); + deathmatchstarts.Push(start); + return NULL; + } + + case SMT_PolyAnchor: + case SMT_PolySpawn: + case SMT_PolySpawnCrush: + case SMT_PolySpawnHurt: + { + polyspawns_t *polyspawn = new polyspawns_t; + polyspawn->next = polyspawns; + polyspawn->x = mthing->x; + polyspawn->y = mthing->y; + polyspawn->angle = mthing->angle; + polyspawn->type = mentry->Special; + polyspawns = polyspawn; + if (mentry->Special != SMT_PolyAnchor) + po_NumPolyobjs++; + return NULL; + } + + case SMT_Player1Start: + case SMT_Player2Start: + case SMT_Player3Start: + case SMT_Player4Start: + case SMT_Player5Start: + case SMT_Player6Start: + case SMT_Player7Start: + case SMT_Player8Start: + pnum = mentry->Special - SMT_Player1Start; + break; + + // Sound sequence override will be handled later + default: + break; + } } @@ -4727,7 +4736,7 @@ AActor *P_SpawnMapThing (FMapThing *mthing, int position) return NULL; // save spots for respawning in network games - FPlayerStart start(mthing); + FPlayerStart start(mthing, pnum+1); playerstarts[pnum] = start; AllPlayerStarts.Push(start); if (!deathmatch && !(level.flags2 & LEVEL2_RANDOMPLAYERSTARTS)) @@ -4738,20 +4747,10 @@ AActor *P_SpawnMapThing (FMapThing *mthing, int position) } // [RH] sound sequence overriders - if (mthing->type >= 1400 && mthing->type < 1410) + if (mentry->Type == NULL && mentry->Special == SMT_SSeqOverride) { - P_PointInSector (mthing->x, mthing->y)->seqType = mthing->type - 1400; - return NULL; - } - else if (mthing->type == 1411) - { - int type; - - if (mthing->args[0] == 255) - type = -1; - else - type = mthing->args[0]; - + int type = mentry->Args[0]; + if (type == 255) type = -1; if (type > 63) { Printf ("Sound sequence %d out of range\n", type); @@ -4763,51 +4762,25 @@ AActor *P_SpawnMapThing (FMapThing *mthing, int position) return NULL; } - // [RH] Determine if it is an old ambient thing, and if so, - // map it to MT_AMBIENT with the proper parameter. - if (mthing->type >= 14001 && mthing->type <= 14064) - { - mthing->args[0] = mthing->type - 14000; - mthing->type = 14065; - } - else if (mthing->type >= 14101 && mthing->type <= 14164) - { - mthing->args[0] = mthing->type - 14100; - mthing->type = 14165; - } - // find which type to spawn - i = DoomEdMap.FindType (mthing->type); - - if (i == NULL) - { - // [RH] Don't die if the map tries to spawn an unknown thing - Printf ("Unknown type %i at (%i, %i)\n", - mthing->type, - mthing->x>>FRACBITS, mthing->y>>FRACBITS); - i = PClass::FindClass("Unknown"); - } // [RH] If the thing's corresponding sprite has no frames, also map // it to the unknown thing. - else + // Handle decorate replacements explicitly here + // to check for missing frames in the replacement object. + i = mentry->Type->GetReplacement(); + + const AActor *defaults = GetDefaultByType (i); + if (defaults->SpawnState == NULL || + sprites[defaults->SpawnState->sprite].numframes == 0) { - // Handle decorate replacements explicitly here - // to check for missing frames in the replacement object. - i = i->GetReplacement(); + // We don't load mods for shareware games so we'll just ignore + // missing actors. Heretic needs this since the shareware includes + // the retail weapons in Deathmatch. + if (gameinfo.flags & GI_SHAREWARE) + return NULL; - const AActor *defaults = GetDefaultByType (i); - if (defaults->SpawnState == NULL || - sprites[defaults->SpawnState->sprite].numframes == 0) - { - // We don't load mods for shareware games so we'll just ignore - // missing actors. Heretic needs this since the shareware includes - // the retail weapons in Deathmatch. - if (gameinfo.flags & GI_SHAREWARE) - return NULL; - - Printf ("%s at (%i, %i) has no frames\n", - i->TypeName.GetChars(), mthing->x>>FRACBITS, mthing->y>>FRACBITS); - i = PClass::FindClass("Unknown"); - } + Printf ("%s at (%i, %i) has no frames\n", + i->TypeName.GetChars(), mthing->x>>FRACBITS, mthing->y>>FRACBITS); + i = PClass::FindClass("Unknown"); } const AActor *info = GetDefaultByType (i); @@ -4897,6 +4870,7 @@ AActor *P_SpawnMapThing (FMapThing *mthing, int position) P_FindFloorCeiling(mobj, FFCF_SAMESECTOR | FFCF_ONLY3DFLOORS | FFCF_3DRESTRICT); } + // if the actor got args defined either in DECORATE or MAPINFO we must ignore the map's properties. if (!(mobj->flags2 & MF2_ARGSDEFINED)) { // [RH] Set the thing's special @@ -6158,11 +6132,6 @@ int AActor::TakeSpecialDamage (AActor *inflictor, AActor *source, int damage, FN { FState *death; - if (flags5 & MF5_NODAMAGE) - { - return 0; - } - // If the actor does not have a corresponding death state, then it does not take damage. // Note that DeathState matches every kind of damagetype, so an actor has that, it can // be hurt with any type of damage. Exception: Massacre damage always succeeds, because @@ -6240,11 +6209,11 @@ void AActor::Crash() } } -void AActor::SetIdle() +void AActor::SetIdle(bool nofunction) { FState *idle = FindState (NAME_Idle); if (idle == NULL) idle = SpawnState; - SetState(idle); + SetState(idle, nofunction); } int AActor::SpawnHealth() @@ -6442,7 +6411,8 @@ void PrintMiscActorInfo(AActor *query) } } static const char * renderstyles[]= {"None", "Normal", "Fuzzy", "SoulTrans", - "OptFuzzy", "Stencil", "Translucent", "Add", "Shaded", "TranslucentStencil"}; + "OptFuzzy", "Stencil", "Translucent", "Add", "Shaded", "TranslucentStencil", + "Shadow", "Subtract", "AddStencil", "AddShaded"}; Printf("%s @ %p has the following flags:\n flags: %x", query->GetTag(), query, query->flags); for (flagi = 0; flagi <= 31; flagi++) diff --git a/src/p_pillar.cpp b/src/p_pillar.cpp index 809542949..884218bee 100644 --- a/src/p_pillar.cpp +++ b/src/p_pillar.cpp @@ -220,20 +220,11 @@ bool EV_DoPillar (DPillar::EPillar type, line_t *line, int tag, bool rtn = false; // check if a manual trigger; if so do just the sector on the backside - if (tag == 0) - { - if (!line || !(sec = line->backsector)) - return rtn; - secnum = (int)(sec-sectors); - goto manual_pillar; - } - - secnum = -1; - while (tag && (secnum = P_FindSectorFromTag (tag, secnum)) >= 0) + FSectorTagIterator itr(tag, line); + while ((secnum = itr.Next()) >= 0) { sec = §ors[secnum]; -manual_pillar: if (sec->PlaneMoving(sector_t::floor) || sec->PlaneMoving(sector_t::ceiling)) continue; diff --git a/src/p_plats.cpp b/src/p_plats.cpp index d87c30991..7600637b2 100644 --- a/src/p_plats.cpp +++ b/src/p_plats.cpp @@ -233,42 +233,33 @@ bool EV_DoPlat (int tag, line_t *line, DPlat::EPlatType type, int height, fixed_t newheight = 0; vertex_t *spot; + if (tag != 0) + { + // Activate all plats that are in_stasis + switch (type) + { + case DPlat::platToggle: + rtn = true; + case DPlat::platPerpetualRaise: + P_ActivateInStasis (tag); + break; + + default: + break; + } + } + + // [RH] If tag is zero, use the sector on the back side // of the activating line (if any). - if (!tag) - { - if (!line || !(sec = line->backsector)) - return false; - secnum = (int)(sec - sectors); - manual = true; - goto manual_plat; - } - - // Activate all plats that are in_stasis - switch (type) - { - case DPlat::platToggle: - rtn = true; - case DPlat::platPerpetualRaise: - P_ActivateInStasis (tag); - break; - - default: - break; - } - - secnum = -1; - while ((secnum = P_FindSectorFromTag (tag, secnum)) >= 0) + FSectorTagIterator itr(tag, line); + while ((secnum = itr.Next()) >= 0) { sec = §ors[secnum]; -manual_plat: if (sec->PlaneMoving(sector_t::floor)) { - if (!manual) - continue; - else - return false; + continue; } // Find lowest & highest floors around sector @@ -406,8 +397,6 @@ manual_plat: default: break; } - if (manual) - return rtn; } return rtn; } diff --git a/src/p_saveg.cpp b/src/p_saveg.cpp index 119d92a9c..480494320 100644 --- a/src/p_saveg.cpp +++ b/src/p_saveg.cpp @@ -348,9 +348,13 @@ void P_SerializeWorld (FArchive &arc) { arc << sec->lightlevel; } - arc << sec->special - << sec->tag - << sec->soundtraversed + arc << sec->special; + if (SaveVersion < 4523) + { + short tag; + arc << tag; + } + arc << sec->soundtraversed << sec->seqType << sec->friction << sec->movefactor @@ -405,8 +409,13 @@ void P_SerializeWorld (FArchive &arc) arc << li->flags << li->activation << li->special - << li->Alpha - << li->id; + << li->Alpha; + + if (SaveVersion < 4523) + { + int id; + arc << id; + } if (P_IsACSSpecial(li->special)) { P_SerializeACSScriptNumber(arc, li->args[0], false); diff --git a/src/p_setup.cpp b/src/p_setup.cpp index e374f0249..f22979eac 100644 --- a/src/p_setup.cpp +++ b/src/p_setup.cpp @@ -96,7 +96,6 @@ CVAR (Bool, gennodes, false, CVAR_SERVERINFO|CVAR_GLOBALCONFIG); CVAR (Bool, genglnodes, false, CVAR_SERVERINFO); CVAR (Bool, showloadtimes, false, 0); -static void P_InitTagLists (); static void P_Shutdown (); bool P_IsBuildMap(MapData *map); @@ -1514,7 +1513,7 @@ void P_LoadSectors (MapData *map, FMissingTextureTracker &missingtex) else // [RH] Translate to new sector special ss->special = P_TranslateSectorSpecial (LittleShort(ms->special)); ss->secretsector = !!(ss->special&SECRET_MASK); - ss->tag = LittleShort(ms->tag); + tagManager.AddSectorTag(i, LittleShort(ms->tag)); ss->thinglist = NULL; ss->touching_thinglist = NULL; // phares 3/14/98 ss->seqType = defSeqType; @@ -1665,7 +1664,7 @@ AActor *SpawnMapThing(int index, FMapThing *mt, int position) if (dumpspawnedthings) { Printf("%5d: (%5d, %5d, %5d), doomednum = %5d, flags = %04x, type = %s\n", - index, mt->x>>FRACBITS, mt->y>>FRACBITS, mt->z>>FRACBITS, mt->type, mt->flags, + index, mt->x>>FRACBITS, mt->y>>FRACBITS, mt->z>>FRACBITS, mt->EdNum, mt->flags, spawned? spawned->GetClass()->TypeName.GetChars() : "(none)"); } T_AddSpawnedThing(spawned); @@ -1785,7 +1784,8 @@ void P_LoadThings (MapData * map) mti[i].x = LittleShort(mt->x) << FRACBITS; mti[i].y = LittleShort(mt->y) << FRACBITS; mti[i].angle = LittleShort(mt->angle); - mti[i].type = LittleShort(mt->type); + mti[i].EdNum = LittleShort(mt->type); + mti[i].info = DoomEdMap.CheckKey(mti[i].EdNum); } delete [] mtp; } @@ -1825,7 +1825,8 @@ void P_LoadThings2 (MapData * map) mti[i].y = LittleShort(mth[i].y)<special) { case Line_SetIdentification: if (!(level.flags2 & LEVEL2_HEXENHACK)) { - ld->id = ld->args[0] + 256 * ld->args[4]; + setid = ld->args[0] + 256 * ld->args[4]; ld->flags |= ld->args[1]<<16; } else { - ld->id = ld->args[0]; + setid = ld->args[0]; } ld->special = 0; break; case TranslucentLine: - ld->id = ld->args[0]; + setid = ld->args[0]; ld->flags |= ld->args[3]<<16; break; case Teleport_Line: case Scroll_Texture_Model: - ld->id = ld->args[0]; + setid = ld->args[0]; break; case Polyobj_StartLine: - ld->id = ld->args[3]; + setid = ld->args[3]; break; case Polyobj_ExplicitLine: - ld->id = ld->args[4]; + setid = ld->args[4]; break; case Plane_Align: - ld->id = ld->args[2]; + setid = ld->args[2]; break; case Static_Init: - if (ld->args[1] == Init_SectorLink) ld->id = ld->args[0]; + if (ld->args[1] == Init_SectorLink) setid = ld->args[0]; break; } + if (setid != -1) + { + tagManager.AddLineID(i, setid); + } } } @@ -2036,7 +2042,7 @@ void P_FinishLoadingLineDef(line_t *ld, int alpha) { for (j = 0; j < numlines; j++) { - if (lines[j].id == ld->args[0]) + if (tagManager.LineHasID(j, ld->args[0])) { lines[j].Alpha = alpha; if (additive) @@ -2138,17 +2144,16 @@ void P_LoadLineDefs (MapData * map) mld = (maplinedef_t *)mldf; ld = lines; - for (i = numlines; i > 0; i--, mld++, ld++) + for (i = 0; i < numlines; i++, mld++, ld++) { ld->Alpha = FRACUNIT; // [RH] Opaque by default // [RH] Translate old linedef special and flags to be // compatible with the new format. - P_TranslateLineDef (ld, mld); + P_TranslateLineDef (ld, mld, i); ld->v1 = &vertexes[LittleShort(mld->v1)]; ld->v2 = &vertexes[LittleShort(mld->v2)]; - //ld->id = -1; ID has been assigned in P_TranslateLineDef P_SetSideNum (&ld->sidedef[0], LittleShort(mld->sidenum[0])); P_SetSideNum (&ld->sidedef[1], LittleShort(mld->sidenum[1])); @@ -2218,7 +2223,7 @@ void P_LoadLineDefs2 (MapData * map) mld = (maplinedef2_t *)mldf; ld = lines; - for (i = numlines; i > 0; i--, mld++, ld++) + for (i = 0; i < numlines; i++, mld++, ld++) { int j; @@ -2231,13 +2236,12 @@ void P_LoadLineDefs2 (MapData * map) ld->v1 = &vertexes[LittleShort(mld->v1)]; ld->v2 = &vertexes[LittleShort(mld->v2)]; ld->Alpha = FRACUNIT; // [RH] Opaque by default - ld->id = -1; P_SetSideNum (&ld->sidedef[0], LittleShort(mld->sidenum[0])); P_SetSideNum (&ld->sidedef[1], LittleShort(mld->sidenum[1])); P_AdjustLine (ld); - P_SetLineID(ld); + P_SetLineID(i, ld); P_SaveLineSpecial (ld); if (level.flags2 & LEVEL2_CLIPMIDTEX) ld->flags |= ML_CLIP_MIDTEX; if (level.flags2 & LEVEL2_WRAPMIDTEX) ld->flags |= ML_WRAP_MIDTEX; @@ -2493,7 +2497,7 @@ void P_ProcessSideTextures(bool checktranmap, side_t *sd, sector_t *sec, intmaps for (s = 0; s < numsectors; s++) { - if (sectors[s].tag == tag) + if (tagManager.SectorHasTag(s, tag)) { if (!colorgood) color = sectors[s].ColorMap->Color; if (!foggood) fog = sectors[s].ColorMap->Fade; @@ -3129,9 +3133,9 @@ static void P_GroupLines (bool buildmap) { if (sector->linecount == 0) { - Printf ("Sector %i (tag %i) has no lines\n", i, sector->tag); + Printf ("Sector %i (tag %i) has no lines\n", i, tagManager.GetFirstSectorTag(sector)); // 0 the sector's tag so that no specials can use it - sector->tag = 0; + tagManager.RemoveSectorTags(i); } else { @@ -3207,7 +3211,8 @@ static void P_GroupLines (bool buildmap) // [RH] Moved this here times[4].Clock(); - P_InitTagLists(); // killough 1/30/98: Create xref tables for tags + // killough 1/30/98: Create xref tables for tags + tagManager.HashTags(); times[4].Unclock(); times[5].Clock(); @@ -3304,62 +3309,20 @@ void P_LoadBehavior (MapData * map) } } -// Hash the sector tags across the sectors and linedefs. -static void P_InitTagLists () -{ - int i; - - for (i=numsectors; --i>=0; ) // Initially make all slots empty. - sectors[i].firsttag = -1; - for (i=numsectors; --i>=0; ) // Proceed from last to first sector - { // so that lower sectors appear first - int j = (unsigned) sectors[i].tag % (unsigned) numsectors; // Hash func - sectors[i].nexttag = sectors[j].firsttag; // Prepend sector to chain - sectors[j].firsttag = i; - } - - // killough 4/17/98: same thing, only for linedefs - - for (i=numlines; --i>=0; ) // Initially make all slots empty. - lines[i].firstid = -1; - for (i=numlines; --i>=0; ) // Proceed from last to first linedef - { // so that lower linedefs appear first - int j = (unsigned) lines[i].id % (unsigned) numlines; // Hash func - lines[i].nextid = lines[j].firstid; // Prepend linedef to chain - lines[j].firstid = i; - } -} - void P_GetPolySpots (MapData * map, TArray &spots, TArray &anchors) { if (map->HasBehavior) { - int spot1, spot2, spot3, anchor; - - if (gameinfo.gametype == GAME_Hexen) - { - spot1 = PO_HEX_SPAWN_TYPE; - spot2 = PO_HEX_SPAWNCRUSH_TYPE; - anchor = PO_HEX_ANCHOR_TYPE; - } - else - { - spot1 = PO_SPAWN_TYPE; - spot2 = PO_SPAWNCRUSH_TYPE; - anchor = PO_ANCHOR_TYPE; - } - spot3 = PO_SPAWNHURT_TYPE; - for (unsigned int i = 0; i < MapThingsConverted.Size(); ++i) { - if (MapThingsConverted[i].type == spot1 || MapThingsConverted[i].type == spot2 || - MapThingsConverted[i].type == spot3 || MapThingsConverted[i].type == anchor) + FDoomEdEntry *mentry = MapThingsConverted[i].info; + if (mentry != NULL && mentry->Type == NULL && mentry->Special >= SMT_PolyAnchor && mentry->Special <= SMT_PolySpawnHurt) { FNodeBuilder::FPolyStart newvert; newvert.x = MapThingsConverted[i].x; newvert.y = MapThingsConverted[i].y; newvert.polynum = MapThingsConverted[i].angle; - if (MapThingsConverted[i].type == anchor) + if (mentry->Special == SMT_PolyAnchor) { anchors.Push (newvert); } @@ -3380,6 +3343,7 @@ void P_FreeLevelData () FPolyObj::ClearAllSubsectorLinks(); // can't be done as part of the polyobj deletion process. SN_StopAllSequences (); DThinker::DestroyAllThinkers (); + tagManager.Clear(); level.total_monsters = level.total_items = level.total_secrets = level.killed_monsters = level.found_items = level.found_secrets = wminfo.maxfrags = 0; diff --git a/src/p_setup.h b/src/p_setup.h index ee26f4c57..cbd423a10 100644 --- a/src/p_setup.h +++ b/src/p_setup.h @@ -115,7 +115,7 @@ struct line_t; struct maplinedef_t; void P_LoadTranslator(const char *lumpname); -void P_TranslateLineDef (line_t *ld, maplinedef_t *mld); +void P_TranslateLineDef (line_t *ld, maplinedef_t *mld, int lineindexforid = -1); int P_TranslateSectorSpecial (int); int GetUDMFInt(int type, int index, const char *key); diff --git a/src/p_slopes.cpp b/src/p_slopes.cpp index 2cce53a92..c0b9b5ef0 100644 --- a/src/p_slopes.cpp +++ b/src/p_slopes.cpp @@ -45,9 +45,10 @@ static void P_SlopeLineToPoint (int lineid, fixed_t x, fixed_t y, fixed_t z, bool slopeCeil) { - int linenum = -1; + int linenum; - while ((linenum = P_FindLineFromID (lineid, linenum)) != -1) + FLineIdIterator itr(lineid); + while ((linenum = itr.Next()) >= 0) { const line_t *line = &lines[linenum]; sector_t *sec; @@ -123,7 +124,7 @@ static void P_CopyPlane (int tag, sector_t *dest, bool copyCeil) int secnum; size_t planeofs; - secnum = P_FindSectorFromTag (tag, -1); + secnum = P_FindFirstSectorFromTag (tag); if (secnum == -1) { return; @@ -266,20 +267,6 @@ void P_VavoomSlope(sector_t * sec, int id, fixed_t x, fixed_t y, fixed_t z, int } } -enum -{ - THING_SlopeFloorPointLine = 9500, - THING_SlopeCeilingPointLine = 9501, - THING_SetFloorSlope = 9502, - THING_SetCeilingSlope = 9503, - THING_CopyFloorPlane = 9510, - THING_CopyCeilingPlane = 9511, - THING_VavoomFloor=1500, - THING_VavoomCeiling=1501, - THING_VertexFloorZ=1504, - THING_VertexCeilingZ=1505, -}; - //========================================================================== // // P_SetSlopesFromVertexHeights @@ -294,24 +281,27 @@ static void P_SetSlopesFromVertexHeights(FMapThing *firstmt, FMapThing *lastmt, for (mt = firstmt; mt < lastmt; ++mt) { - if (mt->type == THING_VertexFloorZ || mt->type == THING_VertexCeilingZ) + if (mt->info != NULL && mt->info->Type == NULL) { - for(int i=0; iinfo->Special == SMT_VertexFloorZ || mt->info->Special == SMT_VertexCeilingZ) { - if (vertexes[i].x == mt->x && vertexes[i].y == mt->y) + for (int i = 0; i < numvertexes; i++) { - if (mt->type == THING_VertexFloorZ) + if (vertexes[i].x == mt->x && vertexes[i].y == mt->y) { - vt_heights[0][i] = mt->z; + if (mt->info->Special == SMT_VertexFloorZ) + { + vt_heights[0][i] = mt->z; + } + else + { + vt_heights[1][i] = mt->z; + } + vt_found = true; } - else - { - vt_heights[1][i] = mt->z; - } - vt_found = true; } + mt->EdNum = 0; } - mt->type = 0; } } @@ -427,49 +417,51 @@ void P_SpawnSlopeMakers (FMapThing *firstmt, FMapThing *lastmt, const int *oldve for (mt = firstmt; mt < lastmt; ++mt) { - if ((mt->type >= THING_SlopeFloorPointLine && - mt->type <= THING_SetCeilingSlope) || - mt->type == THING_VavoomFloor || mt->type == THING_VavoomCeiling) + if (mt->info != NULL && mt->info->Type == NULL && + (mt->info->Special >= SMT_SlopeFloorPointLine && mt->info->Special <= SMT_VavoomCeiling)) { fixed_t x, y, z; secplane_t *refplane; sector_t *sec; + bool ceiling; x = mt->x; y = mt->y; sec = P_PointInSector (x, y); - if (mt->type & 1) + if (mt->info->Special == SMT_SlopeCeilingPointLine || mt->info->Special == SMT_VavoomCeiling || mt->info->Special == SMT_SetCeilingSlope) { refplane = &sec->ceilingplane; + ceiling = true; } else { refplane = &sec->floorplane; + ceiling = false; } z = refplane->ZatPoint (x, y) + (mt->z); - if (mt->type == THING_VavoomFloor || mt->type == THING_VavoomCeiling) - { - P_VavoomSlope(sec, mt->thingid, x, y, mt->z, mt->type & 1); + if (mt->info->Special <= SMT_SlopeCeilingPointLine) + { // SlopeFloorPointLine and SlopCeilingPointLine + P_SlopeLineToPoint (mt->args[0], x, y, z, ceiling); } - else if (mt->type <= THING_SlopeCeilingPointLine) - { // THING_SlopeFloorPointLine and THING_SlopCeilingPointLine - P_SlopeLineToPoint (mt->args[0], x, y, z, mt->type & 1); + else if (mt->info->Special <= SMT_SetCeilingSlope) + { // SetFloorSlope and SetCeilingSlope + P_SetSlope (refplane, ceiling, mt->angle, mt->args[0], x, y, z); } - else - { // THING_SetFloorSlope and THING_SetCeilingSlope - P_SetSlope (refplane, mt->type & 1, mt->angle, mt->args[0], x, y, z); + else + { // VavoomFloor and VavoomCeiling + P_VavoomSlope(sec, mt->thingid, x, y, mt->z, ceiling); } - mt->type = 0; + mt->EdNum = 0; } } for (mt = firstmt; mt < lastmt; ++mt) { - if (mt->type == THING_CopyFloorPlane || - mt->type == THING_CopyCeilingPlane) + if (mt->info != NULL && mt->info->Type == NULL && + (mt->info->Special == SMT_CopyFloorPlane || mt->info->Special == SMT_CopyCeilingPlane)) { - P_CopyPlane (mt->args[0], mt->x, mt->y, mt->type & 1); - mt->type = 0; + P_CopyPlane (mt->args[0], mt->x, mt->y, mt->info->Special == SMT_CopyCeilingPlane); + mt->EdNum = 0; } } diff --git a/src/p_spec.cpp b/src/p_spec.cpp index 676191555..81f4a27e4 100644 --- a/src/p_spec.cpp +++ b/src/p_spec.cpp @@ -186,38 +186,6 @@ bool CheckIfExitIsGood (AActor *self, level_info_t *info) // UTILITIES // - - -// -// RETURN NEXT SECTOR # THAT LINE TAG REFERS TO -// - -// Find the next sector with a specified tag. -// Rewritten by Lee Killough to use chained hashing to improve speed - -int P_FindSectorFromTag (int tag, int start) -{ - start = start >= 0 ? sectors[start].nexttag : - sectors[(unsigned) tag % (unsigned) numsectors].firsttag; - while (start >= 0 && sectors[start].tag != tag) - start = sectors[start].nexttag; - return start; -} - -// killough 4/16/98: Same thing, only for linedefs - -int P_FindLineFromID (int id, int start) -{ - start = start >= 0 ? lines[start].nextid : - lines[(unsigned) id % (unsigned) numlines].firstid; - while (start >= 0 && lines[start].id != id) - start = lines[start].nextid; - return start; -} - - - - //============================================================================ // // P_ActivateLine @@ -260,13 +228,13 @@ bool P_ActivateLine (line_t *line, AActor *mo, int side, int activationType) } // some old WADs use this method to create walls that change the texture when shot. else if (activationType == SPAC_Impact && // only for shootable triggers - (level.flags2 & LEVEL2_DUMMYSWITCHES) && // this is only a compatibility setting for an old hack! + (level.flags2 & LEVEL2_DUMMYSWITCHES) && // this is only a compatibility setting for an old hack! !repeat && // only non-repeatable triggers (specialGeneric_Crusher) && // not for Boom's generalized linedefs special && // not for lines without a special - line->args[0] == line->id && // Safety check: exclude edited UDMF linedefs or ones that don't map the tag to args[0] + tagManager.LineHasID(line, line->args[0]) && // Safety check: exclude edited UDMF linedefs or ones that don't map the tag to args[0] line->args[0] && // only if there's a tag (which is stored in the first arg) - P_FindSectorFromTag (line->args[0], -1) == -1) // only if no sector is tagged to this linedef + P_FindFirstSectorFromTag (line->args[0]) == -1) // only if no sector is tagged to this linedef { P_ChangeSwitchTexture (line->sidedef[0], repeat, special); line->special = 0; @@ -657,9 +625,9 @@ static void DoSectorDamage(AActor *actor, sector_t *sec, int amount, FName type, void P_SectorDamage(int tag, int amount, FName type, const PClass *protectClass, int flags) { - int secnum = -1; - - while ((secnum = P_FindSectorFromTag (tag, secnum)) >= 0) + FSectorTagIterator itr(tag); + int secnum; + while ((secnum = itr.Next()) >= 0) { AActor *actor, *next; sector_t *sec = §ors[secnum]; @@ -884,12 +852,14 @@ DLightTransfer::DLightTransfer (sector_t *srcSec, int target, bool copyFloor) if (copyFloor) { - for (secnum = -1; (secnum = P_FindSectorFromTag (target, secnum)) >= 0; ) + FSectorTagIterator itr(target); + while ((secnum = itr.Next()) >= 0) sectors[secnum].ChangeFlags(sector_t::floor, 0, PLANEF_ABSLIGHTING); } else { - for (secnum = -1; (secnum = P_FindSectorFromTag (target, secnum)) >= 0; ) + FSectorTagIterator itr(target); + while ((secnum = itr.Next()) >= 0) sectors[secnum].ChangeFlags(sector_t::ceiling, 0, PLANEF_ABSLIGHTING); } ChangeStatNum (STAT_LIGHTTRANSFER); @@ -912,12 +882,14 @@ void DLightTransfer::DoTransfer (int level, int target, bool floor) if (floor) { - for (secnum = -1; (secnum = P_FindSectorFromTag (target, secnum)) >= 0; ) + FSectorTagIterator itr(target); + while ((secnum = itr.Next()) >= 0) sectors[secnum].SetPlaneLight(sector_t::floor, level); } else { - for (secnum = -1; (secnum = P_FindSectorFromTag (target, secnum)) >= 0; ) + FSectorTagIterator itr(target); + while ((secnum = itr.Next()) >= 0) sectors[secnum].SetPlaneLight(sector_t::ceiling, level); } } @@ -985,7 +957,8 @@ DWallLightTransfer::DWallLightTransfer (sector_t *srcSec, int target, BYTE flags wallflags = WALLF_ABSLIGHTING | WALLF_NOFAKECONTRAST; } - for (linenum = -1; (linenum = P_FindLineFromID (target, linenum)) >= 0; ) + FLineIdIterator itr(target); + while ((linenum = itr.Next()) >= 0) { if (flags & WLF_SIDE1 && lines[linenum].sidedef[0] != NULL) { @@ -1015,7 +988,8 @@ void DWallLightTransfer::DoTransfer (short lightlevel, int target, BYTE flags) { int linenum; - for (linenum = -1; (linenum = P_FindLineFromID (target, linenum)) >= 0; ) + FLineIdIterator itr(target); + while ((linenum = itr.Next()) >= 0) { line_t *line = &lines[linenum]; @@ -1173,7 +1147,9 @@ void P_SpawnPortal(line_t *line, int sectortag, int plane, int alpha) reference->flags |= MF_JUSTATTACKED; anchor->flags |= MF_JUSTATTACKED; - for (int s=-1; (s = P_FindSectorFromTag(sectortag,s)) >= 0;) + int s; + FSectorTagIterator itr(sectortag); + while ((s = itr.Next()) >= 0) { SetPortal(§ors[s], plane, reference, alpha); } @@ -1193,7 +1169,8 @@ void P_SpawnPortal(line_t *line, int sectortag, int plane, int alpha) } else { - for (int s=-1; (s = P_FindSectorFromTag(lines[j].args[0],s)) >= 0;) + FSectorTagIterator itr(lines[j].args[0]); + while ((s = itr.Next()) >= 0) { SetPortal(§ors[s], plane, reference, alpha); } @@ -1374,38 +1351,41 @@ void P_SpawnSpecials (void) // killough 3/7/98: // support for drawn heights coming from different sector case Transfer_Heights: - sec = lines[i].frontsector; - if (lines[i].args[1] & 2) { - sec->MoreFlags |= SECF_FAKEFLOORONLY; + sec = lines[i].frontsector; + if (lines[i].args[1] & 2) + { + sec->MoreFlags |= SECF_FAKEFLOORONLY; + } + if (lines[i].args[1] & 4) + { + sec->MoreFlags |= SECF_CLIPFAKEPLANES; + } + if (lines[i].args[1] & 8) + { + sec->MoreFlags |= SECF_UNDERWATER; + } + else if (forcewater) + { + sec->MoreFlags |= SECF_FORCEDUNDERWATER; + } + if (lines[i].args[1] & 16) + { + sec->MoreFlags |= SECF_IGNOREHEIGHTSEC; + } + if (lines[i].args[1] & 32) + { + sec->MoreFlags |= SECF_NOFAKELIGHT; + } + FSectorTagIterator itr(lines[i].args[0]); + while ((s = itr.Next()) >= 0) + { + sectors[s].heightsec = sec; + sec->e->FakeFloor.Sectors.Push(§ors[s]); + sectors[s].AdjustFloorClip(); + } + break; } - if (lines[i].args[1] & 4) - { - sec->MoreFlags |= SECF_CLIPFAKEPLANES; - } - if (lines[i].args[1] & 8) - { - sec->MoreFlags |= SECF_UNDERWATER; - } - else if (forcewater) - { - sec->MoreFlags |= SECF_FORCEDUNDERWATER; - } - if (lines[i].args[1] & 16) - { - sec->MoreFlags |= SECF_IGNOREHEIGHTSEC; - } - if (lines[i].args[1] & 32) - { - sec->MoreFlags |= SECF_NOFAKELIGHT; - } - for (s = -1; (s = P_FindSectorFromTag(lines[i].args[0],s)) >= 0;) - { - sectors[s].heightsec = sec; - sec->e->FakeFloor.Sectors.Push(§ors[s]); - sectors[s].AdjustFloorClip(); - } - break; // killough 3/16/98: Add support for setting // floor lighting independently (e.g. lava) @@ -1458,9 +1438,10 @@ void P_SpawnSpecials (void) { case Init_Gravity: { - float grav = ((float)P_AproxDistance (lines[i].dx, lines[i].dy)) / (FRACUNIT * 100.0f); - for (s = -1; (s = P_FindSectorFromTag(lines[i].args[0],s)) >= 0;) - sectors[s].gravity = grav; + float grav = ((float)P_AproxDistance (lines[i].dx, lines[i].dy)) / (FRACUNIT * 100.0f); + FSectorTagIterator itr(lines[i].args[0]); + while ((s = itr.Next()) >= 0) + sectors[s].gravity = grav; } break; @@ -1470,7 +1451,8 @@ void P_SpawnSpecials (void) case Init_Damage: { int damage = P_AproxDistance (lines[i].dx, lines[i].dy) >> FRACBITS; - for (s = -1; (s = P_FindSectorFromTag(lines[i].args[0],s)) >= 0;) + FSectorTagIterator itr(lines[i].args[0]); + while ((s = itr.Next()) >= 0) { sectors[s].damage = damage; sectors[s].mod = 0;//MOD_UNKNOWN; @@ -1493,9 +1475,12 @@ void P_SpawnSpecials (void) // or ceiling texture, to distinguish floor and ceiling sky. case Init_TransferSky: - for (s = -1; (s = P_FindSectorFromTag(lines[i].args[0],s)) >= 0;) - sectors[s].sky = (i+1) | PL_SKYFLAT; - break; + { + FSectorTagIterator itr(lines[i].args[0]); + while ((s = itr.Next()) >= 0) + sectors[s].sky = (i + 1) | PL_SKYFLAT; + break; + } } break; } @@ -1756,7 +1741,7 @@ static void P_SpawnScrollers(void) if (lines[i].special == Sector_CopyScroller) { // don't allow copying the scroller if the sector has the same tag as it would just duplicate it. - if (lines[i].args[0] != lines[i].frontsector->tag) + if (tagManager.SectorHasTag(lines[i].frontsector, lines[i].args[0])) { copyscrollers.Push(i); } @@ -1832,25 +1817,29 @@ static void P_SpawnScrollers(void) register int s; case Scroll_Ceiling: - for (s=-1; (s = P_FindSectorFromTag (l->args[0],s)) >= 0;) + { + FSectorTagIterator itr(l->args[0]); + while ((s = itr.Next()) >= 0) { - new DScroller (DScroller::sc_ceiling, -dx, dy, control, s, accel); + new DScroller(DScroller::sc_ceiling, -dx, dy, control, s, accel); } - for(unsigned j = 0;j < copyscrollers.Size(); j++) + for (unsigned j = 0; j < copyscrollers.Size(); j++) { line_t *line = &lines[copyscrollers[j]]; if (line->args[0] == l->args[0] && (line->args[1] & 1)) { - new DScroller (DScroller::sc_ceiling, -dx, dy, control, int(line->frontsector-sectors), accel); + new DScroller(DScroller::sc_ceiling, -dx, dy, control, int(line->frontsector - sectors), accel); } } break; + } case Scroll_Floor: if (l->args[2] != 1) { // scroll the floor texture - for (s=-1; (s = P_FindSectorFromTag (l->args[0],s)) >= 0;) + FSectorTagIterator itr(l->args[0]); + while ((s = itr.Next()) >= 0) { new DScroller (DScroller::sc_floor, -dx, dy, control, s, accel); } @@ -1867,7 +1856,8 @@ static void P_SpawnScrollers(void) if (l->args[2] > 0) { // carry objects on the floor - for (s=-1; (s = P_FindSectorFromTag (l->args[0],s)) >= 0;) + FSectorTagIterator itr(l->args[0]); + while ((s = itr.Next()) >= 0) { new DScroller (DScroller::sc_carry, dx, dy, control, s, accel); } @@ -1886,10 +1876,15 @@ static void P_SpawnScrollers(void) // killough 3/1/98: scroll wall according to linedef // (same direction and speed as scrolling floors) case Scroll_Texture_Model: - for (s=-1; (s = P_FindLineFromID (l->args[0],s)) >= 0;) + { + FLineIdIterator itr(l->args[0]); + while ((s = itr.Next()) >= 0) + { if (s != i) - new DScroller (dx, dy, lines+s, control, accel); + new DScroller(dx, dy, lines + s, control, accel); + } break; + } case Scroll_Texture_Offsets: // killough 3/2/98: scroll according to sidedef offsets @@ -2041,7 +2036,8 @@ void P_SetSectorFriction (int tag, int amount, bool alterFlag) // higher friction value actually means 'less friction'. movefactor = FrictionToMoveFactor(friction); - for (s = -1; (s = P_FindSectorFromTag (tag,s)) >= 0; ) + FSectorTagIterator itr(tag); + while ((s = itr.Next()) >= 0) { // killough 8/28/98: // @@ -2153,7 +2149,7 @@ DPusher::DPusher (DPusher::EPusher type, line_t *l, int magnitude, int angle, int DPusher::CheckForSectorMatch (EPusher type, int tag) { - if (m_Type == type && sectors[m_Affectee].tag == tag) + if (m_Type == type && tagManager.SectorHasTag(m_Affectee, tag)) return m_Affectee; else return -1; @@ -2356,20 +2352,27 @@ static void P_SpawnPushers () switch (l->special) { case Sector_SetWind: // wind - for (s = -1; (s = P_FindSectorFromTag (l->args[0],s)) >= 0 ; ) - new DPusher (DPusher::p_wind, l->args[3] ? l : NULL, l->args[1], l->args[2], NULL, s); + { + FSectorTagIterator itr(l->args[0]); + while ((s = itr.Next()) >= 0) + new DPusher(DPusher::p_wind, l->args[3] ? l : NULL, l->args[1], l->args[2], NULL, s); l->special = 0; break; + } case Sector_SetCurrent: // current - for (s = -1; (s = P_FindSectorFromTag (l->args[0],s)) >= 0 ; ) - new DPusher (DPusher::p_current, l->args[3] ? l : NULL, l->args[1], l->args[2], NULL, s); + { + FSectorTagIterator itr(l->args[0]); + while ((s = itr.Next()) >= 0) + new DPusher(DPusher::p_current, l->args[3] ? l : NULL, l->args[1], l->args[2], NULL, s); l->special = 0; break; + } case PointPush_SetForce: // push/pull if (l->args[0]) { // [RH] Find thing by sector - for (s = -1; (s = P_FindSectorFromTag (l->args[0], s)) >= 0 ; ) + FSectorTagIterator itr(l->args[0]); + while ((s = itr.Next()) >= 0) { AActor *thing = P_GetPushThing (s); if (thing) { // No MT_P* means no effect diff --git a/src/p_spec.h b/src/p_spec.h index 5b4f0ba99..0c3ee8745 100644 --- a/src/p_spec.h +++ b/src/p_spec.h @@ -243,9 +243,7 @@ inline sector_t *getNextSector (line_t *line, const sector_t *sec) } -int P_FindSectorFromTag (int tag, int start); -int P_FindLineFromID (int id, int start); - +#include "p_tags.h" // // P_LIGHTS diff --git a/src/p_tags.cpp b/src/p_tags.cpp new file mode 100644 index 000000000..d5c03ec9d --- /dev/null +++ b/src/p_tags.cpp @@ -0,0 +1,353 @@ +/* +** p_tags.cpp +** everything to do with tags and their management +** +**--------------------------------------------------------------------------- +** Copyright 2015 Christoph Oelckers +** All rights reserved. +** +** Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions +** are met: +** +** 1. Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** 2. Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in the +** documentation and/or other materials provided with the distribution. +** 3. The name of the author may not be used to endorse or promote products +** derived from this software without specific prior written permission. +** +** THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR +** IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +** OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +** IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, +** INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +** NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +** THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +**--------------------------------------------------------------------------- +** +** +*/ + + +#include "p_tags.h" +#include "c_dispatch.h" + +FTagManager tagManager; + +//----------------------------------------------------------------------------- +// +// +// +//----------------------------------------------------------------------------- + +static inline int sectindex(const sector_t *sector) +{ + return (int)(intptr_t)(sector - sectors); +} + +static inline int lineindex(const line_t *line) +{ + return (int)(intptr_t)(line - lines); +} + +//----------------------------------------------------------------------------- +// +// +// +//----------------------------------------------------------------------------- + +void FTagManager::AddSectorTag(int sector, int tag) +{ + if (tag == 0) return; + + // This function assumes that all tags for a single sector get added sequentially. + // Should there ever be some need for compatibility.txt to add tags to sectors which already have a tag this function needs to be changed to adjust the startForSector indices. + while (startForSector.Size() <= (unsigned int)sector) + { + startForSector.Push(-1); + } + if (startForSector[sector] == -1) + { + startForSector[sector] = allTags.Size(); + } + else + { + // check if the key was already defined + for (unsigned i = startForSector[sector]; i < allTags.Size(); i++) + { + if (allTags[i].tag == tag) + { + return; + } + } + } + FTagItem it = { sector, tag, -1 }; + allTags.Push(it); +} + +//----------------------------------------------------------------------------- +// +// +// +//----------------------------------------------------------------------------- + +void FTagManager::RemoveSectorTags(int sect) +{ + int start = startForSector[sect]; + if (start >= 0) + { + while (allTags[start].target == sect) + { + allTags[start].tag = allTags[start].target = -1; + start++; + } + } +} + +//----------------------------------------------------------------------------- +// +// +// +//----------------------------------------------------------------------------- + +void FTagManager::AddLineID(int line, int tag) +{ + if (tag == -1) return; // For line IDs -1 means 'not set', unlike sectors. + + // This function assumes that all ids for a single line get added sequentially. + while (startForLine.Size() <= (unsigned int)line) + { + startForLine.Push(-1); + } + if (startForLine[line] == -1) + { + startForLine[line] = allIDs.Size(); + } + else + { + // check if the key was already defined + for (unsigned i = startForLine[line]; i < allIDs.Size(); i++) + { + if (allIDs[i].tag == tag) + { + return; + } + } + } + FTagItem it = { line, tag, -1 }; + allIDs.Push(it); +} + +//----------------------------------------------------------------------------- +// +// +// +//----------------------------------------------------------------------------- + +void FTagManager::HashTags() +{ + // add an end marker so we do not need to check for the array's size in the other functions. + static FTagItem it = { -1, -1, -1 }; + allTags.Push(it); + allIDs.Push(it); + + // Initially make all slots empty. + memset(TagHashFirst, -1, sizeof(TagHashFirst)); + memset(IDHashFirst, -1, sizeof(IDHashFirst)); + + // Proceed from last to first so that lower targets appear first + for (int i = allTags.Size() - 1; i >= 0; i--) + { + if (allTags[i].target >= 0) // only link valid entries + { + int hash = ((unsigned int)allTags[i].tag) % FTagManager::TAG_HASH_SIZE; + allTags[i].nexttag = TagHashFirst[hash]; + TagHashFirst[hash] = i; + } + } + + for (int i = allIDs.Size() - 1; i >= 0; i--) + { + if (allIDs[i].target >= 0) // only link valid entries + { + int hash = ((unsigned int)allIDs[i].tag) % FTagManager::TAG_HASH_SIZE; + allIDs[i].nexttag = IDHashFirst[hash]; + IDHashFirst[hash] = i; + } + } + +} + +//----------------------------------------------------------------------------- +// +// +// +//----------------------------------------------------------------------------- + +bool FTagManager::SectorHasTags(const sector_t *sector) const +{ + int i = sectindex(sector); + return SectorHasTags(i); +} + +//----------------------------------------------------------------------------- +// +// +// +//----------------------------------------------------------------------------- + +int FTagManager::GetFirstSectorTag(const sector_t *sect) const +{ + int i = sectindex(sect); + return SectorHasTags(i) ? allTags[startForSector[i]].tag : 0; +} + +//----------------------------------------------------------------------------- +// +// +// +//----------------------------------------------------------------------------- + +bool FTagManager::SectorHasTag(int i, int tag) const +{ + if (SectorHasTags(i)) + { + int ndx = startForSector[i]; + while (allTags[ndx].target == i) + { + if (allTags[ndx].tag == tag) return true; + ndx++; + } + } + return false; +} + +//----------------------------------------------------------------------------- +// +// +// +//----------------------------------------------------------------------------- + +bool FTagManager::SectorHasTag(const sector_t *sector, int tag) const +{ + return SectorHasTag(sectindex(sector), tag); +} + +//----------------------------------------------------------------------------- +// +// +// +//----------------------------------------------------------------------------- + +bool FTagManager::LineHasID(int i, int tag) const +{ + if (LineHasIDs(i)) + { + int ndx = startForLine[i]; + while (allIDs[ndx].target == i) + { + if (allIDs[ndx].tag == tag) return true; + ndx++; + } + } + return false; +} + +//----------------------------------------------------------------------------- +// +// +// +//----------------------------------------------------------------------------- + +bool FTagManager::LineHasID(const line_t *line, int tag) const +{ + return LineHasID(lineindex(line), tag); +} + +//----------------------------------------------------------------------------- +// +// +// +//----------------------------------------------------------------------------- + +void FTagManager::DumpTags() +{ + for (unsigned i = 0; i < allTags.Size(); i++) + { + Printf("Sector %d, tag %d\n", allTags[i].target, allTags[i].tag); + } + for (unsigned i = 0; i < allIDs.Size(); i++) + { + Printf("Line %d, ID %d\n", allIDs[i].target, allIDs[i].tag); + } +} + +CCMD(dumptags) +{ + tagManager.DumpTags(); +} + +//----------------------------------------------------------------------------- +// +// RETURN NEXT SECTOR # THAT LINE TAG REFERS TO +// +// Find the next sector with a specified tag. +// Rewritten by Lee Killough to use chained hashing to improve speed +// +//----------------------------------------------------------------------------- + +int FSectorTagIterator::Next() +{ + int ret; + if (searchtag == INT_MIN) + { + ret = start; + start = -1; + } + else + { + while (start >= 0 && tagManager.allTags[start].tag != searchtag) start = tagManager.allTags[start].nexttag; + if (start == -1) return -1; + ret = tagManager.allTags[start].target; + start = start = tagManager.allTags[start].nexttag; + } + return ret; +} + +//----------------------------------------------------------------------------- +// +// linear search for compatible stair building +// +//----------------------------------------------------------------------------- + +int FSectorTagIterator::NextCompat(bool compat, int start) +{ + if (!compat) return Next(); + + for (int i = start + 1; i < numsectors; i++) + { + if (tagManager.SectorHasTag(i, searchtag)) return i; + } + return -1; +} + + +//----------------------------------------------------------------------------- +// +// killough 4/16/98: Same thing, only for linedefs +// +//----------------------------------------------------------------------------- + +int FLineIdIterator::Next() +{ + while (start >= 0 && tagManager.allIDs[start].tag != searchtag) start = tagManager.allIDs[start].nexttag; + if (start == -1) return -1; + int ret = tagManager.allIDs[start].target; + start = start = tagManager.allIDs[start].nexttag; + return ret; +} diff --git a/src/p_tags.h b/src/p_tags.h new file mode 100644 index 000000000..2195821c1 --- /dev/null +++ b/src/p_tags.h @@ -0,0 +1,133 @@ +#ifndef P_TAGS_H +#define P_TAGS_H 1 + +#include "r_defs.h" +#include "r_state.h" + +struct FTagItem +{ + int target; // either sector or line + int tag; + int nexttag; // for hashing +}; + +class FSectorTagIterator; +class FLineIdIterator; + +class FTagManager +{ + enum + { + TAG_HASH_SIZE = 256 + }; + + friend class FSectorTagIterator; + friend class FLineIdIterator; + + TArray allTags; + TArray allIDs; + TArray startForSector; + TArray startForLine; + int TagHashFirst[TAG_HASH_SIZE]; + int IDHashFirst[TAG_HASH_SIZE]; + + bool SectorHasTags(int sect) const + { + return sect >= 0 && sect < (int)startForSector.Size() && startForSector[sect] >= 0; + } + + bool LineHasIDs(int sect) const + { + return sect >= 0 && sect < (int)startForLine.Size() && startForLine[sect] >= 0; + } + +public: + void Clear() + { + allTags.Clear(); + allIDs.Clear(); + startForSector.Clear(); + startForLine.Clear(); + memset(TagHashFirst, -1, sizeof(TagHashFirst)); + } + + bool SectorHasTags(const sector_t *sector) const; + int GetFirstSectorTag(const sector_t *sect) const; + bool SectorHasTag(int sector, int tag) const; + bool SectorHasTag(const sector_t *sector, int tag) const; + + bool LineHasID(int line, int id) const; + bool LineHasID(const line_t *line, int id) const; + + void HashTags(); + void AddSectorTag(int sector, int tag); + void AddLineID(int line, int tag); + void RemoveSectorTags(int sect); + + void DumpTags(); +}; + +extern FTagManager tagManager; + +class FSectorTagIterator +{ +protected: + int searchtag; + int start; + +public: + FSectorTagIterator(int tag) + { + searchtag = tag; + start = tagManager.TagHashFirst[((unsigned int)tag) % FTagManager::TAG_HASH_SIZE]; + } + + // Special constructor for actions that treat tag 0 as 'back of activation line' + FSectorTagIterator(int tag, line_t *line) + { + if (tag == 0) + { + searchtag = INT_MIN; + start = (line == NULL || line->backsector == NULL)? -1 : (int)(line->backsector - sectors); + } + else + { + searchtag = tag; + start = tagManager.TagHashFirst[((unsigned int)tag) % FTagManager::TAG_HASH_SIZE]; + } + } + + int Next(); + int NextCompat(bool compat, int secnum); +}; + +class FLineIdIterator +{ +protected: + int searchtag; + int start; + +public: + FLineIdIterator(int id) + { + searchtag = id; + start = tagManager.IDHashFirst[((unsigned int)id) % FTagManager::TAG_HASH_SIZE]; + } + + int Next(); +}; + + +inline int P_FindFirstSectorFromTag(int tag) +{ + FSectorTagIterator it(tag); + return it.Next(); +} + +inline int P_FindFirstLineFromID(int tag) +{ + FLineIdIterator it(tag); + return it.Next(); +} + +#endif diff --git a/src/p_teleport.cpp b/src/p_teleport.cpp index 3e3b03c4e..82359f4e0 100644 --- a/src/p_teleport.cpp +++ b/src/p_teleport.cpp @@ -250,7 +250,7 @@ static AActor *SelectTeleDest (int tid, int tag, bool norandom) int count = 0; while ( (searcher = iterator.Next ()) ) { - if (tag == 0 || searcher->Sector->tag == tag) + if (tag == 0 || tagManager.SectorHasTag(searcher->Sector, tag)) { count++; } @@ -289,7 +289,7 @@ static AActor *SelectTeleDest (int tid, int tag, bool norandom) while (count > 0) { searcher = iterator.Next (); - if (tag == 0 || searcher->Sector->tag == tag) + if (tag == 0 || tagManager.SectorHasTag(searcher->Sector, tag)) { count--; } @@ -300,9 +300,10 @@ static AActor *SelectTeleDest (int tid, int tag, bool norandom) if (tag != 0) { - int secnum = -1; + int secnum; - while ((secnum = P_FindSectorFromTag (tag, secnum)) >= 0) + FSectorTagIterator itr(tag); + while ((secnum = itr.Next()) >= 0) { // Scanning the snext links of things in the sector will not work, because // TeleportDests have MF_NOSECTOR set. So you have to search *everything*. @@ -423,7 +424,8 @@ bool EV_SilentLineTeleport (line_t *line, int side, AActor *thing, int id, INTBO if (side || thing->flags2 & MF2_NOTELEPORT || !line || line->sidedef[1] == NULL) return false; - for (i = -1; (i = P_FindLineFromID (id, i)) >= 0; ) + FLineIdIterator itr(id); + while ((i = itr.Next()) >= 0) { if (line-lines == i) continue; @@ -726,7 +728,8 @@ bool EV_TeleportSector (int tag, int source_tid, int dest_tid, bool fog, int gro int secnum; secnum = -1; - while ((secnum = P_FindSectorFromTag (tag, secnum)) >= 0) + FSectorTagIterator itr(tag); + while ((secnum = itr.Next()) >= 0) { msecnode_t *node; const sector_t * const sec = §ors[secnum]; diff --git a/src/p_terrain.h b/src/p_terrain.h index 9f00d07bc..482c66b00 100644 --- a/src/p_terrain.h +++ b/src/p_terrain.h @@ -69,6 +69,12 @@ public: } void Set(int index, int value) { + if ((unsigned)index >= Types.Size()) + { + int oldsize = Types.Size(); + Resize(index + 1); + memset(&Types[oldsize], 0xff, (index + 1 - oldsize)*sizeof(WORD)); + } Types[index] = value; } }; diff --git a/src/p_things.cpp b/src/p_things.cpp index a8a34c384..50e15a1a8 100644 --- a/src/p_things.cpp +++ b/src/p_things.cpp @@ -45,9 +45,11 @@ #include "gi.h" #include "templates.h" #include "g_level.h" +#include "v_text.h" +#include "i_system.h" // Set of spawnable things for the Thing_Spawn and Thing_Projectile specials. -TMap SpawnableThings; +FClassMap SpawnableThings; static FRandom pr_leadtarget ("LeadTarget"); @@ -530,22 +532,32 @@ const PClass *P_GetSpawnableType(int spawnnum) return NULL; } -typedef TMap::Pair SpawnablePair; +struct MapinfoSpawnItem +{ + FName classname; // DECORATE is read after MAPINFO so we do not have the actual classes available here yet. + // These are for error reporting. We must store the file information because it's no longer available when these items get resolved. + FString filename; + int linenum; +}; + +typedef TMap SpawnMap; +static SpawnMap SpawnablesFromMapinfo; +static SpawnMap ConversationIDsFromMapinfo; static int STACK_ARGS SpawnableSort(const void *a, const void *b) { - return (*((SpawnablePair **)a))->Key - (*((SpawnablePair **)b))->Key; + return (*((FClassMap::Pair **)a))->Key - (*((FClassMap::Pair **)b))->Key; } -CCMD (dumpspawnables) +static void DumpClassMap(FClassMap &themap) { - TMapIterator it(SpawnableThings); - SpawnablePair *pair, **allpairs; + FClassMap::Iterator it(themap); + FClassMap::Pair *pair, **allpairs; int i = 0; // Sort into numerical order, since their arrangement in the map can // be in an unspecified order. - allpairs = new TMap::Pair *[SpawnableThings.CountUsed()]; + allpairs = new FClassMap::Pair *[themap.CountUsed()]; while (it.NextPair(pair)) { allpairs[i++] = pair; @@ -559,3 +571,110 @@ CCMD (dumpspawnables) delete[] allpairs; } +CCMD(dumpspawnables) +{ + DumpClassMap(SpawnableThings); +} + +CCMD (dumpconversationids) +{ + DumpClassMap(StrifeTypes); +} + + +static void ParseSpawnMap(FScanner &sc, SpawnMap & themap, const char *descript) +{ + TMap defined; + int error = 0; + + MapinfoSpawnItem editem; + + editem.filename = sc.ScriptName; + + while (true) + { + if (sc.CheckString("}")) return; + else if (sc.CheckNumber()) + { + int ednum = sc.Number; + sc.MustGetStringName("="); + sc.MustGetString(); + + bool *def = defined.CheckKey(ednum); + if (def != NULL) + { + sc.ScriptMessage("%s %d defined more than once", descript, ednum); + error++; + } + else if (ednum < 0) + { + sc.ScriptMessage("%s must be positive, got %d", descript, ednum); + error++; + } + defined[ednum] = true; + editem.classname = sc.String; + + themap.Insert(ednum, editem); + } + else + { + sc.ScriptError("Number expected"); + } + } + if (error > 0) + { + sc.ScriptError("%d errors encountered in %s definition", error, descript); + } +} + +void FMapInfoParser::ParseSpawnNums() +{ + ParseOpenBrace(); + ParseSpawnMap(sc, SpawnablesFromMapinfo, "Spawn number"); +} + +void FMapInfoParser::ParseConversationIDs() +{ + ParseOpenBrace(); + ParseSpawnMap(sc, ConversationIDsFromMapinfo, "Conversation ID"); +} + + +void InitClassMap(FClassMap &themap, SpawnMap &thedata) +{ + themap.Clear(); + SpawnMap::Iterator it(thedata); + SpawnMap::Pair *pair; + int error = 0; + + while (it.NextPair(pair)) + { + const PClass *cls = NULL; + if (pair->Value.classname != NAME_None) + { + cls = PClass::FindClass(pair->Value.classname); + if (cls == NULL) + { + Printf(TEXTCOLOR_RED "Script error, \"%s\" line %d:\nUnknown actor class %s\n", + pair->Value.filename.GetChars(), pair->Value.linenum, pair->Value.classname.GetChars()); + error++; + } + themap.Insert(pair->Key, cls); + } + else + { + themap.Remove(pair->Key); + } + } + if (error > 0) + { + I_Error("%d unknown actor classes found", error); + } + thedata.Clear(); // we do not need this any longer +} + +void InitSpawnablesFromMapinfo() +{ + InitClassMap(SpawnableThings, SpawnablesFromMapinfo); + InitClassMap(StrifeTypes, ConversationIDsFromMapinfo); +} diff --git a/src/p_udmf.cpp b/src/p_udmf.cpp index f0fb79690..0434d8bce 100644 --- a/src/p_udmf.cpp +++ b/src/p_udmf.cpp @@ -46,6 +46,7 @@ #include "r_state.h" #include "r_data/colormaps.h" #include "w_wad.h" +#include "p_tags.h" //=========================================================================== // @@ -500,7 +501,8 @@ public: break; case NAME_Type: - th->type = (short)CheckInt(key); + th->EdNum = (short)CheckInt(key); + th->info = DoomEdMap.CheckKey(th->EdNum); break; case NAME_Conversation: @@ -721,6 +723,7 @@ public: break; default: + CHECK_N(Zd | Zdt) if (0 == strnicmp("user_", key.GetChars(), 5)) { // Custom user key - Sets an actor's user variable directly FMapThingUserData ud; @@ -776,10 +779,11 @@ public: bool strifetrans = false; bool strifetrans2 = false; FString arg0str, arg1str; + int lineid; // forZDoomTranslated namespace + FString tagstring; memset(ld, 0, sizeof(*ld)); ld->Alpha = FRACUNIT; - ld->id = -1; ld->sidedef[0] = ld->sidedef[1] = NULL; if (level.flags2 & LEVEL2_CLIPMIDTEX) ld->flags |= ML_CLIP_MIDTEX; if (level.flags2 & LEVEL2_WRAPMIDTEX) ld->flags |= ML_WRAP_MIDTEX; @@ -812,7 +816,8 @@ public: continue; case NAME_Id: - ld->id = CheckInt(key); + lineid = CheckInt(key); + tagManager.AddLineID(index, lineid); continue; case NAME_Sidefront: @@ -1035,16 +1040,35 @@ public: Flag(ld->flags, ML_3DMIDTEX_IMPASS, key); continue; + case NAME_MoreIds: + // delay parsing of the tag string until parsing of the sector is complete + // This ensures that the ID is always the first tag in the list. + tagstring = CheckString(key); + break; + + default: break; } - if (!strnicmp("user_", key.GetChars(), 5)) + + if ((namespace_bits & (Zd | Zdt)) && !strnicmp("user_", key.GetChars(), 5)) { AddUserKey(key, UDMF_Line, index); } } + if (tagstring.IsNotEmpty()) + { + FScanner sc; + sc.OpenString("tagstring", tagstring); + // scan the string as long as valid numbers can be found + while (sc.CheckNumber()) + { + if (sc.Number != 0) tagManager.AddLineID(index, sc.Number); + } + } + if (isTranslated) { int saved = ld->flags; @@ -1052,7 +1076,7 @@ public: maplinedef_t mld; memset(&mld, 0, sizeof(mld)); mld.special = ld->special; - mld.tag = ld->id; + mld.tag = lineid; P_TranslateLineDef(ld, &mld); ld->flags = saved | (ld->flags&(ML_MONSTERSCANACTIVATE|ML_REPEAT_SPECIAL|ML_FIRSTSIDEONLY)); } @@ -1225,7 +1249,7 @@ public: break; } - if (!strnicmp("user_", key.GetChars(), 5)) + if ((namespace_bits & (Zd | Zdt)) && !strnicmp("user_", key.GetChars(), 5)) { AddUserKey(key, UDMF_Side, index); } @@ -1252,6 +1276,7 @@ public: int desaturation = -1; int fplaneflags = 0, cplaneflags = 0; double fp[4] = { 0 }, cp[4] = { 0 }; + FString tagstring; memset(sec, 0, sizeof(*sec)); sec->lightlevel = 160; @@ -1315,7 +1340,7 @@ public: continue; case NAME_Id: - sec->tag = (short)CheckInt(key); + tagManager.AddSectorTag(index, CheckInt(key)); continue; default: @@ -1493,16 +1518,32 @@ public: cp[3] = CheckFloat(key); break; + case NAME_MoreIds: + // delay parsing of the tag string until parsing of the sector is complete + // This ensures that the ID is always the first tag in the list. + tagstring = CheckString(key); + break; + default: break; } - - if (!strnicmp("user_", key.GetChars(), 5)) + if ((namespace_bits & (Zd | Zdt)) && !strnicmp("user_", key.GetChars(), 5)) { AddUserKey(key, UDMF_Sector, index); } } + if (tagstring.IsNotEmpty()) + { + FScanner sc; + sc.OpenString("tagstring", tagstring); + // scan the string as long as valid numbers can be found + while (sc.CheckNumber()) + { + if (sc.Number != 0) tagManager.AddSectorTag(index, sc.Number); + } + } + sec->secretsector = !!(sec->special&SECRET_MASK); // Reset the planes to their defaults if not all of the plane equation's parameters were found. diff --git a/src/p_user.cpp b/src/p_user.cpp index 4d05d2660..5f9a69c3a 100644 --- a/src/p_user.cpp +++ b/src/p_user.cpp @@ -295,14 +295,16 @@ player_t::player_t() respawn_time(0), camera(0), air_finished(0), + MUSINFOactor(0), + MUSINFOtics(-1), + crouching(0), + crouchdir(0), Bot(0), BlendR(0), BlendG(0), BlendB(0), BlendA(0), LogText(), - crouching(0), - crouchdir(0), crouchfactor(0), crouchoffset(0), crouchviewdelta(0), @@ -400,6 +402,8 @@ player_t &player_t::operator=(const player_t &p) ConversationPC = p.ConversationPC; ConversationNPCAngle = p.ConversationNPCAngle; ConversationFaceTalker = p.ConversationFaceTalker; + MUSINFOactor = p.MUSINFOactor; + MUSINFOtics = p.MUSINFOtics; return *this; } @@ -430,6 +434,7 @@ size_t player_t::FixPointers (const DObject *old, DObject *rep) if (*&PremorphWeapon == old) PremorphWeapon = static_cast(rep), changed++; if (*&ConversationNPC == old) ConversationNPC = replacement, changed++; if (*&ConversationPC == old) ConversationPC = replacement, changed++; + if (*&MUSINFOactor == old) MUSINFOactor = replacement, changed++; return changed; } @@ -443,6 +448,7 @@ size_t player_t::PropagateMark() GC::Mark(ReadyWeapon); GC::Mark(ConversationNPC); GC::Mark(ConversationPC); + GC::Mark(MUSINFOactor); GC::Mark(PremorphWeapon); if (PendingWeapon != WP_NOCHANGE) { @@ -2331,6 +2337,30 @@ void P_PlayerThink (player_t *player) player->crouchoffset = -FixedMul(player->mo->ViewHeight, (FRACUNIT - player->crouchfactor)); + // MUSINFO stuff + if (player->MUSINFOtics >= 0 && player->MUSINFOactor != NULL) + { + if (--player->MUSINFOtics < 0) + { + if (player - players == consoleplayer) + { + if (player->MUSINFOactor->args[0] != 0) + { + FName *music = level.info->MusicMap.CheckKey(player->MUSINFOactor->args[0]); + + if (music != NULL) + { + S_ChangeMusic(music->GetChars(), player->MUSINFOactor->args[1]); + } + } + else + { + S_ChangeMusic("*"); + } + } + DPrintf("MUSINFO change for player %d to %d\n", (int)(player - players), player->MUSINFOactor->args[0]); + } + } if (player->playerstate == PST_DEAD) { @@ -3105,6 +3135,10 @@ void player_t::Serialize (FArchive &arc) { userinfo.SkinChanged(skinname, CurrentPlayerClass); } + if (SaveVersion >= 4522) + { + arc << MUSINFOactor << MUSINFOtics; + } } diff --git a/src/p_writemap.cpp b/src/p_writemap.cpp index 83ed40b5b..e31d2c4c3 100644 --- a/src/p_writemap.cpp +++ b/src/p_writemap.cpp @@ -262,7 +262,7 @@ static int WriteSECTORS (FILE *file) uppercopy (ms.ceilingpic, GetTextureName (sectors[i].GetTexture(sector_t::ceiling))); ms.lightlevel = LittleShort((short)sectors[i].lightlevel); ms.special = LittleShort(sectors[i].special); - ms.tag = LittleShort(sectors[i].tag); + ms.tag = LittleShort(tagManager.GetFirstSectorTag(§ors[i])); fwrite (&ms, sizeof(ms), 1, file); } return numsectors * sizeof(ms); diff --git a/src/p_xlat.cpp b/src/p_xlat.cpp index be2d154c3..6e1718273 100644 --- a/src/p_xlat.cpp +++ b/src/p_xlat.cpp @@ -60,7 +60,7 @@ typedef enum PushMany, } triggertype_e; -void P_TranslateLineDef (line_t *ld, maplinedef_t *mld) +void P_TranslateLineDef (line_t *ld, maplinedef_t *mld, int lineindexforid) { unsigned short special = (unsigned short) LittleShort(mld->special); short tag = LittleShort(mld->tag); @@ -100,11 +100,14 @@ void P_TranslateLineDef (line_t *ld, maplinedef_t *mld) } flags = newflags; - // For purposes of maintaining BOOM compatibility, each - // line also needs to have its ID set to the same as its tag. - // An external conversion program would need to do this more - // intelligently. - ld->id = tag; + if (lineindexforid >= 0) + { + // For purposes of maintaining BOOM compatibility, each + // line also needs to have its ID set to the same as its tag. + // An external conversion program would need to do this more + // intelligently. + tagManager.AddLineID(lineindexforid, tag); + } // 0 specials are never translated. if (special == 0) @@ -304,7 +307,7 @@ void P_TranslateTeleportThings () while ( (dest = iterator.Next()) ) { - if (dest->Sector->tag == 0) + if (!tagManager.SectorHasTags(dest->Sector)) { dest->tid = 1; dest->AddToHash (); diff --git a/src/po_man.cpp b/src/po_man.cpp index 4a3345d5b..60627e4f3 100644 --- a/src/po_man.cpp +++ b/src/po_man.cpp @@ -1561,8 +1561,8 @@ static void SpawnPolyobj (int index, int tag, int type) sd->linedef->args[0] = 0; IterFindPolySides(&polyobjs[index], sd); po->MirrorNum = sd->linedef->args[1]; - po->crush = (type != PO_SPAWN_TYPE) ? 3 : 0; - po->bHurtOnTouch = (type == PO_SPAWNHURT_TYPE); + po->crush = (type != SMT_PolySpawn) ? 3 : 0; + po->bHurtOnTouch = (type == SMT_PolySpawnHurt); po->tag = tag; po->seqType = sd->linedef->args[2]; if (po->seqType < 0 || po->seqType > 63) @@ -1632,8 +1632,8 @@ static void SpawnPolyobj (int index, int tag, int type) } if (po->Sidedefs.Size() > 0) { - po->crush = (type != PO_SPAWN_TYPE) ? 3 : 0; - po->bHurtOnTouch = (type == PO_SPAWNHURT_TYPE); + po->crush = (type != SMT_PolySpawn) ? 3 : 0; + po->bHurtOnTouch = (type == SMT_PolySpawnHurt); po->tag = tag; po->seqType = po->Sidedefs[0]->linedef->args[3]; po->MirrorNum = po->Sidedefs[0]->linedef->args[2]; @@ -1756,9 +1756,7 @@ void PO_Init (void) for (polyspawn = polyspawns, prev = &polyspawns; polyspawn;) { // 9301 (3001) = no crush, 9302 (3002) = crushing, 9303 = hurting touch - if (polyspawn->type == PO_SPAWN_TYPE || - polyspawn->type == PO_SPAWNCRUSH_TYPE || - polyspawn->type == PO_SPAWNHURT_TYPE) + if (polyspawn->type >= SMT_PolySpawn && polyspawn->type <= SMT_PolySpawnHurt) { // Polyobj StartSpot Pt. polyobjs[polyIndex].StartSpot.x = polyspawn->x; @@ -1778,7 +1776,7 @@ void PO_Init (void) for (polyspawn = polyspawns; polyspawn;) { polyspawns_t *next = polyspawn->next; - if (polyspawn->type == PO_ANCHOR_TYPE) + if (polyspawn->type == SMT_PolyAnchor) { // Polyobj Anchor Pt. TranslateToStartSpot (polyspawn->angle, polyspawn->x, polyspawn->y); diff --git a/src/posix/cocoa/i_common.h b/src/posix/cocoa/i_common.h index 081466e87..545540b2f 100644 --- a/src/posix/cocoa/i_common.h +++ b/src/posix/cocoa/i_common.h @@ -128,6 +128,8 @@ enum kVK_UpArrow = 0x7E }; +static const NSOpenGLPixelFormatAttribute NSOpenGLPFAAllowOfflineRenderers = NSOpenGLPixelFormatAttribute(96); + #endif // prior to 10.5 diff --git a/src/posix/cocoa/i_video.mm b/src/posix/cocoa/i_video.mm index 350202a13..29e6bf4d4 100644 --- a/src/posix/cocoa/i_video.mm +++ b/src/posix/cocoa/i_video.mm @@ -72,6 +72,11 @@ CUSTOM_CVAR(Bool, fullscreen, false, CVAR_ARCHIVE | CVAR_GLOBALCONFIG) setmodeneeded = true; } +CUSTOM_CVAR(Bool, vid_autoswitch, true, CVAR_ARCHIVE | CVAR_GLOBALCONFIG | CVAR_NOINITCALL) +{ + Printf("You must restart " GAMENAME " to apply graphics switching mode\n"); +} + RenderBufferOptions rbOpts; @@ -399,6 +404,11 @@ CocoaVideo::CocoaVideo(const int multisample) attributes[i++] = NSOpenGLPFAStencilSize; attributes[i++] = NSOpenGLPixelFormatAttribute(8); + if (!vid_autoswitch) + { + attributes[i++] = NSOpenGLPFAAllowOfflineRenderers; + } + if (multisample) { attributes[i++] = NSOpenGLPFAMultisample; diff --git a/src/posix/i_system.cpp b/src/posix/i_system.cpp index b3de61419..fd6bb4c0c 100644 --- a/src/posix/i_system.cpp +++ b/src/posix/i_system.cpp @@ -331,7 +331,7 @@ int I_PickIWad_Gtk (WadStuff *wads, int numwads, bool showwin, int defaultiwad) gtk_container_add (GTK_CONTAINER(window), vbox); // Create the top label. - widget = gtk_label_new ("ZDoom found more than one IWAD\nSelect from the list below to determine which one to use:"); + widget = gtk_label_new (GAMENAME " found more than one IWAD\nSelect from the list below to determine which one to use:"); gtk_box_pack_start (GTK_BOX(vbox), widget, false, false, 0); gtk_misc_set_alignment (GTK_MISC(widget), 0, 0); @@ -450,7 +450,7 @@ int I_PickIWad (WadStuff *wads, int numwads, bool showwin, int defaultiwad) { FString cmd("kdialog --title \"" GAMESIG " "); cmd << GetVersionString() << ": Select an IWAD to use\"" - " --menu \"ZDoom found more than one IWAD\n" + " --menu \"" GAMENAME " found more than one IWAD\n" "Select from the list below to determine which one to use:\""; for(i = 0; i < numwads; ++i) @@ -603,6 +603,15 @@ int I_FindAttr (findstate_t *fileinfo) #ifdef __APPLE__ static PasteboardRef s_clipboard; + +static CFDataRef GetPasteboardData(const PasteboardItemID itemID, const CFStringRef flavorType) +{ + CFDataRef data = NULL; + + const OSStatus result = PasteboardCopyItemFlavorData(s_clipboard, itemID, flavorType, &data); + + return noErr == result ? data : NULL; +} #endif // __APPLE__ // Clipboard support requires GTK+ @@ -688,35 +697,41 @@ FString I_GetFromClipboard (bool use_primary_selection) return FString(); } - CFArrayRef flavorTypeArray; - - if (0 != PasteboardCopyItemFlavors(s_clipboard, itemID, &flavorTypeArray)) + if (CFDataRef data = GetPasteboardData(itemID, kUTTypeUTF8PlainText)) { - return FString(); + const CFIndex bufferLength = CFDataGetLength(data); + char* const buffer = result.LockNewBuffer(bufferLength); + + memcpy(buffer, CFDataGetBytePtr(data), bufferLength); + + result.UnlockBuffer(); } - - const CFIndex flavorCount = CFArrayGetCount(flavorTypeArray); - - for (CFIndex flavorIndex = 0; flavorIndex < flavorCount; ++flavorIndex) + else if (CFDataRef data = GetPasteboardData(itemID, kUTTypeUTF16PlainText)) { - const CFStringRef flavorType = static_cast( - CFArrayGetValueAtIndex(flavorTypeArray, flavorIndex)); +#ifdef __LITTLE_ENDIAN__ + static const CFStringEncoding ENCODING = kCFStringEncodingUTF16LE; +#else // __BIG_ENDIAN__ + static const CFStringEncoding ENCODING = kCFStringEncodingUTF16BE; +#endif // __LITTLE_ENDIAN__ - if (UTTypeConformsTo(flavorType, CFSTR("public.utf8-plain-text"))) + if (const CFStringRef utf16 = CFStringCreateFromExternalRepresentation(kCFAllocatorDefault, data, ENCODING)) { - CFDataRef flavorData; + const CFRange range = { 0, CFStringGetLength(utf16) }; + CFIndex bufferLength = 0; - if (0 == PasteboardCopyItemFlavorData(s_clipboard, itemID, flavorType, &flavorData)) + if (CFStringGetBytes(utf16, range, kCFStringEncodingUTF8, '?', false, NULL, 0, &bufferLength) > 0) { - result += reinterpret_cast(CFDataGetBytePtr(flavorData)); + UInt8* const buffer = reinterpret_cast(result.LockNewBuffer(bufferLength)); + + CFStringGetBytes(utf16, range, kCFStringEncodingUTF8, '?', false, buffer, bufferLength, NULL); + + result.UnlockBuffer(); } - CFRelease(flavorData); + CFRelease(utf16); } } - CFRelease(flavorTypeArray); - return result; #endif return ""; diff --git a/src/posix/osx/zdoom-info.plist b/src/posix/osx/zdoom-info.plist index 2a1911cdf..73be09aa8 100644 --- a/src/posix/osx/zdoom-info.plist +++ b/src/posix/osx/zdoom-info.plist @@ -43,5 +43,7 @@ NSPrincipalClass NSApplication + NSSupportsAutomaticGraphicsSwitching + YES diff --git a/src/posix/sdl/crashcatcher.c b/src/posix/sdl/crashcatcher.c index 4754a369a..f85713e31 100644 --- a/src/posix/sdl/crashcatcher.c +++ b/src/posix/sdl/crashcatcher.c @@ -37,7 +37,7 @@ static struct { pid_t pid; int has_siginfo; siginfo_t siginfo; - char buf[1024]; + char buf[4096]; } crash_info; diff --git a/src/posix/sdl/i_input.cpp b/src/posix/sdl/i_input.cpp index 6fff2d2a9..372b23446 100644 --- a/src/posix/sdl/i_input.cpp +++ b/src/posix/sdl/i_input.cpp @@ -18,8 +18,6 @@ #include "templates.h" #include "s_sound.h" -void ScaleWithAspect (int &w, int &h, int Width, int Height); - static void I_CheckGUICapture (); static void I_CheckNativeMouse (); @@ -320,35 +318,11 @@ void MessagePump (const SDL_Event &sev) int x, y; SDL_GetMouseState (&x, &y); - // Detect if we're doing scaling in the Window and adjust the mouse - // coordinates accordingly. This could be more efficent, but I - // don't think performance is an issue in the menus. - SDL_Window *focus; - if (screen->IsFullscreen() && (focus = SDL_GetMouseFocus ())) - { - int w, h; - SDL_GetWindowSize (focus, &w, &h); - int realw = w, realh = h; - ScaleWithAspect (realw, realh, SCREENWIDTH, SCREENHEIGHT); - if (realw != SCREENWIDTH || realh != SCREENHEIGHT) - { - double xratio = (double)SCREENWIDTH/realw; - double yratio = (double)SCREENHEIGHT/realh; - if (realw < w) - { - x = (x - (w - realw)/2)*xratio; - y *= yratio; - } - else - { - y = (y - (h - realh)/2)*yratio; - x *= xratio; - } - } - } - event.data1 = x; event.data2 = y; + + screen->ScaleCoordsFromWindow(event.data1, event.data2); + event.type = EV_GUI_Event; if(sev.type == SDL_MOUSEMOTION) event.subtype = EV_GUI_MouseMove; diff --git a/src/posix/sdl/i_main.cpp b/src/posix/sdl/i_main.cpp index d60494d1a..7c08dacdb 100644 --- a/src/posix/sdl/i_main.cpp +++ b/src/posix/sdl/i_main.cpp @@ -240,7 +240,7 @@ int main (int argc, char **argv) #if !defined (__APPLE__) { int s[4] = { SIGSEGV, SIGILL, SIGFPE, SIGBUS }; - cc_install_handlers(argc, argv, 4, s, "zdoom-crash.log", DoomSpecificInfo); + cc_install_handlers(argc, argv, 4, s, GAMENAMELOWERCASE "-crash.log", DoomSpecificInfo); } #endif // !__APPLE__ diff --git a/src/posix/sdl/sdlvideo.cpp b/src/posix/sdl/sdlvideo.cpp index 309002456..c24fd797a 100644 --- a/src/posix/sdl/sdlvideo.cpp +++ b/src/posix/sdl/sdlvideo.cpp @@ -50,6 +50,7 @@ public: friend class SDLVideo; virtual void SetVSync (bool vsync); + virtual void ScaleCoordsFromWindow(SWORD &x, SWORD &y); private: PalEntry SourcePalette[256]; @@ -723,6 +724,35 @@ void SDLFB::SetVSync (bool vsync) #endif // __APPLE__ } +void SDLFB::ScaleCoordsFromWindow(SWORD &x, SWORD &y) +{ + // Detect if we're doing scaling in the Window and adjust the mouse + // coordinates accordingly. This could be more efficent, but I + // don't think performance is an issue in the menus. + if(IsFullscreen()) + { + int w, h; + SDL_GetWindowSize (Screen, &w, &h); + int realw = w, realh = h; + ScaleWithAspect (realw, realh, SCREENWIDTH, SCREENHEIGHT); + if (realw != SCREENWIDTH || realh != SCREENHEIGHT) + { + double xratio = (double)SCREENWIDTH/realw; + double yratio = (double)SCREENHEIGHT/realh; + if (realw < w) + { + x = (x - (w - realw)/2)*xratio; + y *= yratio; + } + else + { + y = (y - (h - realh)/2)*yratio; + x *= xratio; + } + } + } +} + ADD_STAT (blit) { FString out; diff --git a/src/r_defs.h b/src/r_defs.h index dd2136508..afda92089 100644 --- a/src/r_defs.h +++ b/src/r_defs.h @@ -633,6 +633,7 @@ struct sector_t return pos == floor? floorplane:ceilingplane; } + bool PlaneMoving(int pos); @@ -650,12 +651,9 @@ struct sector_t TObjPtr SoundTarget; short special; - short tag; short lightlevel; short seqType; // this sector's sound sequence - int nexttag,firsttag; // killough 1/30/98: improves searches for tags. - int sky; FNameNoInit SeqName; // Sound sequence name. Setting seqType non-negative will override this. @@ -890,11 +888,8 @@ struct line_t DWORD activation; // activation type int special; fixed_t Alpha; // <--- translucency (0=invisibile, FRACUNIT=opaque) - int id; // <--- same as tag or set with Line_SetIdentification int args[5]; // <--- hexen-style arguments (expanded to ZDoom's full width) - int firstid, nextid; side_t *sidedef[2]; - //DWORD sidenum[2]; // sidenum[1] will be NO_SIDE if one sided fixed_t bbox[4]; // bounding box, for the extent of the LineDef. sector_t *frontsector, *backsector; int validcount; // if == validcount, already checked diff --git a/src/r_swrenderer.cpp b/src/r_swrenderer.cpp index fb54b6f0a..df928b25e 100644 --- a/src/r_swrenderer.cpp +++ b/src/r_swrenderer.cpp @@ -84,7 +84,7 @@ void FSoftwareRenderer::PrecacheTexture(FTexture *tex, int cache) { if (tex != NULL) { - if (cache & 1) + if (cache & FTextureManager::HIT_Columnmode) { const FTexture::Span *spanp; tex->GetColumn(0, &spanp); diff --git a/src/r_things.cpp b/src/r_things.cpp index 515364970..8e53fb6d1 100644 --- a/src/r_things.cpp +++ b/src/r_things.cpp @@ -1359,6 +1359,11 @@ void R_DrawPSprite (pspdef_t* psp, int pspnum, AActor *owner, fixed_t sx, fixed_ { noaccel = true; } + // If drawing with a BOOM colormap, disable acceleration. + if (mybasecolormap == &NormalLight && NormalLight.Maps != realcolormaps) + { + noaccel = true; + } // If the main colormap has fixed lights, and this sprite is being drawn with that // colormap, disable acceleration so that the lights can remain fixed. if (!noaccel && realfixedcolormap == NULL && diff --git a/src/resourcefiles/file_7z.cpp b/src/resourcefiles/file_7z.cpp index 21c11ed25..1fb553932 100644 --- a/src/resourcefiles/file_7z.cpp +++ b/src/resourcefiles/file_7z.cpp @@ -179,7 +179,7 @@ struct F7ZLump : public FResourceLump //========================================================================== // -// Zip file +// 7-zip file // //========================================================================== @@ -190,8 +190,6 @@ class F7ZFile : public FResourceFile F7ZLump *Lumps; C7zArchive *Archive; - static int STACK_ARGS lumpcmp(const void * a, const void * b); - public: F7ZFile(const char * filename, FileReader *filer); bool Open(bool quiet); @@ -201,15 +199,6 @@ public: -int STACK_ARGS F7ZFile::lumpcmp(const void * a, const void * b) -{ - F7ZLump * rec1 = (F7ZLump *)a; - F7ZLump * rec2 = (F7ZLump *)b; - - return stricmp(rec1->FullName, rec2->FullName); -} - - //========================================================================== // // 7Z file @@ -328,8 +317,7 @@ bool F7ZFile::Open(bool quiet) if (!quiet) Printf(", %d lumps\n", NumLumps); - // Entries in archives are sorted alphabetically - qsort(&Lumps[0], NumLumps, sizeof(F7ZLump), lumpcmp); + PostProcessArchive(&Lumps[0], sizeof(F7ZLump)); return true; } diff --git a/src/resourcefiles/file_directory.cpp b/src/resourcefiles/file_directory.cpp index 024ef0633..8b85425f1 100644 --- a/src/resourcefiles/file_directory.cpp +++ b/src/resourcefiles/file_directory.cpp @@ -72,7 +72,7 @@ struct FDirectoryLump : public FResourceLump virtual FileReader *NewReader(); virtual int FillCache(); -private: + FString mFullPath; }; @@ -86,8 +86,6 @@ class FDirectory : public FResourceFile { TArray Lumps; - static int STACK_ARGS lumpcmp(const void * a, const void * b); - int AddDirectory(const char *dirpath); void AddEntry(const char *fullpath, int size); @@ -113,29 +111,18 @@ FDirectory::FDirectory(const char * directory) #ifdef _WIN32 directory = _fullpath(NULL, directory, _MAX_PATH); #else - // Todo for Linux: Resolve the path befire using it + // Todo for Linux: Resolve the path before using it #endif dirname = directory; + #ifdef _WIN32 + free((void *)directory); + #endif dirname.ReplaceChars('\\', '/'); if (dirname[dirname.Len()-1] != '/') dirname += '/'; Filename = copystring(dirname); } -//========================================================================== -// -// -// -//========================================================================== - -int STACK_ARGS FDirectory::lumpcmp(const void * a, const void * b) -{ - FDirectoryLump * rec1 = (FDirectoryLump *)a; - FDirectoryLump * rec2 = (FDirectoryLump *)b; - - return stricmp(rec1->FullName, rec2->FullName); -} - #ifdef _WIN32 //========================================================================== // @@ -299,8 +286,7 @@ bool FDirectory::Open(bool quiet) { NumLumps = AddDirectory(Filename); if (!quiet) Printf(", %d lumps\n", NumLumps); - // Entries in Zips are sorted alphabetically. - qsort(&Lumps[0], NumLumps, sizeof(FDirectoryLump), lumpcmp); + PostProcessArchive(&Lumps[0], sizeof(FDirectoryLump)); return true; } @@ -314,6 +300,8 @@ void FDirectory::AddEntry(const char *fullpath, int size) { FDirectoryLump *lump_p = &Lumps[Lumps.Reserve(1)]; + // Store the full path here so that we can access the file later, even if it is from a filter directory. + lump_p->mFullPath = fullpath; // The lump's name is only the part relative to the main directory lump_p->LumpNameSetup(fullpath + strlen(Filename)); lump_p->LumpSize = size; @@ -333,9 +321,7 @@ FileReader *FDirectoryLump::NewReader() { try { - FString fullpath = Owner->Filename; - fullpath += FullName; - return new FileReader(fullpath); + return new FileReader(mFullPath); } catch (CRecoverableError &) { @@ -353,6 +339,11 @@ int FDirectoryLump::FillCache() { Cache = new char[LumpSize]; FileReader *reader = NewReader(); + if (reader == NULL) + { + memset(Cache, 0, LumpSize); + return 0; + } reader->Read(Cache, LumpSize); delete reader; RefCount = 1; diff --git a/src/resourcefiles/file_zip.cpp b/src/resourcefiles/file_zip.cpp index 7ae0e90a5..c7e787c70 100644 --- a/src/resourcefiles/file_zip.cpp +++ b/src/resourcefiles/file_zip.cpp @@ -138,8 +138,6 @@ class FZipFile : public FResourceFile { FZipLump *Lumps; - static int STACK_ARGS lumpcmp(const void * a, const void * b); - public: FZipFile(const char * filename, FileReader *file); virtual ~FZipFile(); @@ -148,16 +146,6 @@ public: }; - -int STACK_ARGS FZipFile::lumpcmp(const void * a, const void * b) -{ - FZipLump * rec1 = (FZipLump *)a; - FZipLump * rec2 = (FZipLump *)b; - - return stricmp(rec1->FullName, rec2->FullName); -} - - //========================================================================== // // Zip file @@ -180,7 +168,7 @@ bool FZipFile::Open(bool quiet) if (centraldir == 0) { - if (!quiet) Printf("\n%s: ZIP file corrupt!\n", Filename); + if (!quiet) Printf(TEXTCOLOR_RED "\n%s: ZIP file corrupt!\n", Filename); return false; } @@ -192,7 +180,7 @@ bool FZipFile::Open(bool quiet) if (info.NumEntries != info.NumEntriesOnAllDisks || info.FirstDisk != 0 || info.DiskNumber != 0) { - if (!quiet) Printf("\n%s: Multipart Zip files are not supported.\n", Filename); + if (!quiet) Printf(TEXTCOLOR_RED "\n%s: Multipart Zip files are not supported.\n", Filename); return false; } @@ -200,9 +188,10 @@ bool FZipFile::Open(bool quiet) Lumps = new FZipLump[NumLumps]; // Load the entire central directory. Too bad that this contains variable length entries... - void *directory = malloc(LittleLong(info.DirectorySize)); + int dirsize = LittleLong(info.DirectorySize); + void *directory = malloc(dirsize); Reader->Seek(LittleLong(info.DirectoryOffset), SEEK_SET); - Reader->Read(directory, LittleLong(info.DirectorySize)); + Reader->Read(directory, dirsize); char *dirptr = (char*)directory; FZipLump *lump_p = Lumps; @@ -216,6 +205,13 @@ bool FZipFile::Open(bool quiet) LittleShort(zip_fh->NameLength) + LittleShort(zip_fh->ExtraLength) + LittleShort(zip_fh->CommentLength); + + if (dirptr > ((char*)directory) + dirsize) // This directory entry goes beyond the end of the file. + { + free(directory); + if (!quiet) Printf(TEXTCOLOR_RED "\n%s: Central directory corrupted.", Filename); + return false; + } // skip Directories if (name[len - 1] == '/' && LittleLong(zip_fh->UncompressedSize) == 0) @@ -233,7 +229,7 @@ bool FZipFile::Open(bool quiet) zip_fh->Method != METHOD_IMPLODE && zip_fh->Method != METHOD_SHRINK) { - if (!quiet) Printf("\n%s: '%s' uses an unsupported compression algorithm (#%d).\n", Filename, name.GetChars(), zip_fh->Method); + if (!quiet) Printf(TEXTCOLOR_YELLOW "\n%s: '%s' uses an unsupported compression algorithm (#%d).\n", Filename, name.GetChars(), zip_fh->Method); skipped++; continue; } @@ -241,7 +237,7 @@ bool FZipFile::Open(bool quiet) zip_fh->Flags = LittleShort(zip_fh->Flags); if (zip_fh->Flags & ZF_ENCRYPTED) { - if (!quiet) Printf("\n%s: '%s' is encrypted. Encryption is not supported.\n", Filename, name.GetChars()); + if (!quiet) Printf(TEXTCOLOR_YELLOW "\n%s: '%s' is encrypted. Encryption is not supported.\n", Filename, name.GetChars()); skipped++; continue; } @@ -272,10 +268,9 @@ bool FZipFile::Open(bool quiet) NumLumps -= skipped; free(directory); - if (!quiet) Printf(", %d lumps\n", NumLumps); + if (!quiet) Printf(TEXTCOLOR_NORMAL ", %d lumps\n", NumLumps); - // Entries in Zips are sorted alphabetically. - qsort(Lumps, NumLumps, sizeof(FZipLump), lumpcmp); + PostProcessArchive(&Lumps[0], sizeof(FZipLump)); return true; } diff --git a/src/resourcefiles/resourcefile.cpp b/src/resourcefiles/resourcefile.cpp index 15a4337b1..11d60795e 100644 --- a/src/resourcefiles/resourcefile.cpp +++ b/src/resourcefiles/resourcefile.cpp @@ -38,7 +38,8 @@ #include "cmdlib.h" #include "w_wad.h" #include "doomerrors.h" - +#include "gi.h" +#include "doomstat.h" //========================================================================== @@ -74,11 +75,6 @@ public: FResourceLump::~FResourceLump() { - if (FullName != NULL) - { - delete [] FullName; - FullName = NULL; - } if (Cache != NULL && RefCount >= 0) { delete [] Cache; @@ -94,15 +90,14 @@ FResourceLump::~FResourceLump() // //========================================================================== -void FResourceLump::LumpNameSetup(const char *iname) +void FResourceLump::LumpNameSetup(FString iname) { - const char *lname = strrchr(iname,'/'); - lname = (lname == NULL) ? iname : lname + 1; - FString base = lname; - base = base.Left(base.LastIndexOf('.')); + long slash = iname.LastIndexOf('/'); + FString base = (slash >= 0) ? iname.Mid(slash + 1) : iname; + base.Truncate(base.LastIndexOf('.')); uppercopy(Name, base); Name[8] = 0; - FullName = copystring(iname); + FullName = iname; // Map some directories to WAD namespaces. // Note that some of these namespaces don't exist in WADS. @@ -120,12 +115,12 @@ void FResourceLump::LumpNameSetup(const char *iname) !strncmp(iname, "sounds/", 7) ? ns_sounds : !strncmp(iname, "music/", 6) ? ns_music : !strchr(iname, '/') ? ns_global : - -1; + ns_hidden; // Anything that is not in one of these subdirectories or the main directory // should not be accessible through the standard WAD functions but only through // the ones which look for the full name. - if (Namespace == -1) + if (Namespace == ns_hidden) { memset(Name, 0, 8); } @@ -321,6 +316,239 @@ FResourceFile::~FResourceFile() delete Reader; } +int STACK_ARGS lumpcmp(const void * a, const void * b) +{ + FResourceLump * rec1 = (FResourceLump *)a; + FResourceLump * rec2 = (FResourceLump *)b; + + return rec1->FullName.CompareNoCase(rec2->FullName); +} + +//========================================================================== +// +// FResourceFile :: PostProcessArchive +// +// Sorts files by name. +// For files named "filter//*": Using the same filter rules as config +// autoloading, move them to the end and rename them without the "filter/" +// prefix. Filtered files that don't match are deleted. +// +//========================================================================== + +void FResourceFile::PostProcessArchive(void *lumps, size_t lumpsize) +{ + // Entries in archives are sorted alphabetically + qsort(lumps, NumLumps, lumpsize, lumpcmp); + + // Filter out lumps using the same names as the Autoload.* sections + // in the ini file use. We reduce the maximum lump concidered after + // each one so that we don't risk refiltering already filtered lumps. + DWORD max = NumLumps; + max -= FilterLumpsByGameType(gameinfo.gametype, lumps, lumpsize, max); + + long len; + int lastpos = -1; + FString file; + + while ((len = LumpFilterIWAD.IndexOf('.', lastpos+1)) > 0) + { + max -= FilterLumps(LumpFilterIWAD.Left(len), lumps, lumpsize, max); + lastpos = len; + } + JunkLeftoverFilters(lumps, lumpsize, max); +} + +//========================================================================== +// +// FResourceFile :: FilterLumps +// +// Finds any lumps between [0,) that match the pattern +// "filter//*" and moves them to the end of the lump list. +// Returns the number of lumps moved. +// +//========================================================================== + +int FResourceFile::FilterLumps(FString filtername, void *lumps, size_t lumpsize, DWORD max) +{ + FString filter; + DWORD start, end; + + if (filtername.IsEmpty()) + { + return 0; + } + filter << "filter/" << filtername << '/'; + if (FindPrefixRange(filter, lumps, lumpsize, max, start, end)) + { + void *from = (BYTE *)lumps + start * lumpsize; + + // Remove filter prefix from every name + void *lump_p = from; + for (DWORD i = start; i < end; ++i, lump_p = (BYTE *)lump_p + lumpsize) + { + FResourceLump *lump = (FResourceLump *)lump_p; + assert(lump->FullName.CompareNoCase(filter, (int)filter.Len()) == 0); + lump->LumpNameSetup(lump->FullName.Mid(filter.Len())); + } + + // Move filtered lumps to the end of the lump list. + size_t count = (end - start) * lumpsize; + void *to = (BYTE *)lumps + NumLumps * lumpsize - count; + assert (to >= from); + + if (from != to) + { + // Copy filtered lumps to a temporary buffer. + BYTE *filteredlumps = new BYTE[count]; + memcpy(filteredlumps, from, count); + + // Shift lumps left to make room for the filtered ones at the end. + memmove(from, (BYTE *)from + count, (NumLumps - end) * lumpsize); + + // Copy temporary buffer to newly freed space. + memcpy(to, filteredlumps, count); + + delete[] filteredlumps; + } + } + return end - start; +} + +//========================================================================== +// +// FResourceFile :: FilterLumpsByGameType +// +// Matches any lumps that match "filter/game-/*". Includes +// inclusive gametypes like Raven. +// +//========================================================================== + +int FResourceFile::FilterLumpsByGameType(int type, void *lumps, size_t lumpsize, DWORD max) +{ + static const struct { int match; const char *name; } blanket[] = + { + { GAME_Raven, "game-Raven" }, + { GAME_DoomStrifeChex, "game-DoomStrifeChex" }, + { GAME_DoomChex, "game-DoomChex" }, + { GAME_Any, NULL } + }; + if (type == 0) + { + return 0; + } + int count = 0; + for (int i = 0; blanket[i].name != NULL; ++i) + { + if (type & blanket[i].match) + { + count += FilterLumps(blanket[i].name, lumps, lumpsize, max); + } + } + FString filter = "game-"; + filter += GameNames[type]; + return count + FilterLumps(filter, lumps, lumpsize, max); +} + +//========================================================================== +// +// FResourceFile :: JunkLeftoverFilters +// +// Deletes any lumps beginning with "filter/" that were not matched. +// +//========================================================================== + +void FResourceFile::JunkLeftoverFilters(void *lumps, size_t lumpsize, DWORD max) +{ + DWORD start, end; + if (FindPrefixRange("filter/", lumps, lumpsize, max, start, end)) + { + // Since the resource lumps may contain non-POD data besides the + // full name, we "delete" them by erasing their names so they + // can't be found. + void *stop = (BYTE *)lumps + end * lumpsize; + for (void *p = (BYTE *)lumps + start * lumpsize; p < stop; p = (BYTE *)p + lumpsize) + { + FResourceLump *lump = (FResourceLump *)p; + lump->FullName = 0; + lump->Name[0] = '\0'; + lump->Namespace = ns_hidden; + } + } +} + +//========================================================================== +// +// FResourceFile :: FindPrefixRange +// +// Finds a range of lumps that start with the prefix string. is left +// indicating the first matching one. is left at one plus the last +// matching one. +// +//========================================================================== + +bool FResourceFile::FindPrefixRange(FString filter, void *lumps, size_t lumpsize, DWORD maxlump, DWORD &start, DWORD &end) +{ + DWORD min, max, mid, inside; + FResourceLump *lump; + int cmp; + + end = start = 0; + + // Pretend that our range starts at 1 instead of 0 so that we can avoid + // unsigned overflow if the range starts at the first lump. + lumps = (BYTE *)lumps - lumpsize; + + // Binary search to find any match at all. + min = 1, max = maxlump; + while (min <= max) + { + mid = min + (max - min) / 2; + lump = (FResourceLump *)((BYTE *)lumps + mid * lumpsize); + cmp = lump->FullName.CompareNoCase(filter, (int)filter.Len()); + if (cmp == 0) + break; + else if (cmp < 0) + min = mid + 1; + else + max = mid - 1; + } + if (max < min) + { // matched nothing + return false; + } + + // Binary search to find first match. + inside = mid; + min = 1, max = mid; + while (min <= max) + { + mid = min + (max - min) / 2; + lump = (FResourceLump *)((BYTE *)lumps + mid * lumpsize); + cmp = lump->FullName.CompareNoCase(filter, (int)filter.Len()); + // Go left on matches and right on misses. + if (cmp == 0) + max = mid - 1; + else + min = mid + 1; + } + start = mid + (cmp != 0) - 1; + + // Binary search to find last match. + min = inside, max = maxlump; + while (min <= max) + { + mid = min + (max - min) / 2; + lump = (FResourceLump *)((BYTE *)lumps + mid * lumpsize); + cmp = lump->FullName.CompareNoCase(filter, (int)filter.Len()); + // Go right on matches and left on misses. + if (cmp == 0) + min = mid + 1; + else + max = mid - 1; + } + end = mid - (cmp != 0); + return true; +} //========================================================================== // diff --git a/src/resourcefiles/resourcefile.h b/src/resourcefiles/resourcefile.h index 517b5eef4..e84967a24 100644 --- a/src/resourcefiles/resourcefile.h +++ b/src/resourcefiles/resourcefile.h @@ -13,7 +13,7 @@ struct FResourceLump friend class FResourceFile; int LumpSize; - char * FullName; // only valid for files loaded from a .zip file + FString FullName; // only valid for files loaded from a non-wad archive union { char Name[9]; @@ -30,7 +30,6 @@ struct FResourceLump FResourceLump() { - FullName = NULL; Cache = NULL; Owner = NULL; Flags = 0; @@ -45,7 +44,7 @@ struct FResourceLump virtual FileReader *NewReader(); virtual int GetFileOffset() { return -1; } virtual int GetIndexNum() const { return 0; } - void LumpNameSetup(const char *iname); + void LumpNameSetup(FString iname); void CheckEmbedded(); void *CacheLump(); @@ -66,9 +65,17 @@ protected: FResourceFile(const char *filename, FileReader *r); + // for archives that can contain directories + void PostProcessArchive(void *lumps, size_t lumpsize); + private: DWORD FirstLump; + int FilterLumps(FString filtername, void *lumps, size_t lumpsize, DWORD max); + int FilterLumpsByGameType(int gametype, void *lumps, size_t lumpsize, DWORD max); + bool FindPrefixRange(FString filter, void *lumps, size_t lumpsize, DWORD max, DWORD &start, DWORD &end); + void JunkLeftoverFilters(void *lumps, size_t lumpsize, DWORD max); + public: static FResourceFile *OpenResourceFile(const char *filename, FileReader *file, bool quiet = false); static FResourceFile *OpenDirectory(const char *filename, bool quiet = false); diff --git a/src/s_advsound.cpp b/src/s_advsound.cpp index 7a5d0bda8..c72005813 100644 --- a/src/s_advsound.cpp +++ b/src/s_advsound.cpp @@ -2348,7 +2348,6 @@ class AMusicChanger : public ASectorAction DECLARE_CLASS (AMusicChanger, ASectorAction) public: virtual bool DoTriggerAction (AActor *triggerer, int activationType); - virtual void Tick(); virtual void PostBeginPlay(); }; @@ -2356,49 +2355,27 @@ IMPLEMENT_CLASS(AMusicChanger) bool AMusicChanger::DoTriggerAction (AActor *triggerer, int activationType) { - if (activationType & SECSPAC_Enter) + if (activationType & SECSPAC_Enter && triggerer->player != NULL) { - if (args[0] == 0 || level.info->MusicMap.CheckKey(args[0])) - { - level.nextmusic = args[0]; - reactiontime = 30; + if (triggerer->player->MUSINFOactor != this) + { + triggerer->player->MUSINFOactor = this; + triggerer->player->MUSINFOtics = 30; } } return Super::DoTriggerAction (triggerer, activationType); } -void AMusicChanger::Tick() -{ - Super::Tick(); - if (reactiontime > -1 && --reactiontime == 0) - { - // Is it our music that's queued for being played? - if (level.nextmusic == args[0]) - { - if (args[0] != 0) - { - FName *music = level.info->MusicMap.CheckKey(args[0]); - - if (music != NULL) - { - S_ChangeMusic(music->GetChars(), args[1]); - } - } - else - { - S_ChangeMusic("*"); - } - } - } - } - void AMusicChanger::PostBeginPlay() { // The music changer should consider itself activated if the player // spawns in its sector as well as if it enters the sector during a P_TryMove. Super::PostBeginPlay(); - if (players[consoleplayer].mo && players[consoleplayer].mo->Sector == this->Sector) + for (int i = 0; i < MAXPLAYERS; ++i) { - TriggerAction(players[consoleplayer].mo, SECSPAC_Enter); + if (playeringame[i] && players[i].mo && players[i].mo->Sector == this->Sector) + { + TriggerAction(players[i].mo, SECSPAC_Enter); + } } } diff --git a/src/s_sound.cpp b/src/s_sound.cpp index 87e804fb8..316f31a2e 100644 --- a/src/s_sound.cpp +++ b/src/s_sound.cpp @@ -384,7 +384,7 @@ void S_Start () { // kill all playing sounds at start of level (trust me - a good idea) S_StopAllChannels(); - + // Check for local sound definitions. Only reload if they differ // from the previous ones. FString LocalSndInfo; @@ -488,6 +488,11 @@ void S_PrecacheLevel () { level.info->PrecacheSounds[i].MarkUsed(); } + // Don't unload sounds that are playing right now. + for (FSoundChan *chan = Channels; chan != NULL; chan = chan->NextChan) + { + chan->SoundID.MarkUsed(); + } for (i = 1; i < S_sfx.Size(); ++i) { @@ -2067,12 +2072,6 @@ void S_ChannelEnded(FISoundChannel *ichan) evicted = (pos < len); } } - /* - else - { - evicted = false; - } - */ if (!evicted) { S_ReturnChannel(schan); diff --git a/src/sc_man.cpp b/src/sc_man.cpp index 4b9d710a3..9babe2e9c 100644 --- a/src/sc_man.cpp +++ b/src/sc_man.cpp @@ -195,9 +195,22 @@ void FScanner::OpenFile (const char *name) //========================================================================== void FScanner::OpenMem (const char *name, const char *buffer, int size) +{ + OpenString(name, FString(buffer, size)); +} + +//========================================================================== +// +// FScanner :: OpenString +// +// Like OpenMem, but takes a string directly. +// +//========================================================================== + +void FScanner::OpenString (const char *name, FString buffer) { Close (); - ScriptBuffer = FString(buffer, size); + ScriptBuffer = buffer; ScriptName = name; LumpNum = -1; PrepareScript (); diff --git a/src/sc_man.h b/src/sc_man.h index 3d9c2bec9..ba84cd00c 100644 --- a/src/sc_man.h +++ b/src/sc_man.h @@ -21,6 +21,7 @@ public: void Open(const char *lumpname); void OpenFile(const char *filename); void OpenMem(const char *name, const char *buffer, int size); + void OpenString(const char *name, FString buffer); void OpenLumpNum(int lump); void Close(); diff --git a/src/sound/fmodsound.cpp b/src/sound/fmodsound.cpp index eac26486d..e54569e79 100644 --- a/src/sound/fmodsound.cpp +++ b/src/sound/fmodsound.cpp @@ -167,9 +167,6 @@ static const FEnumList OutputNames[] = { "Windows Multimedia", FMOD_OUTPUTTYPE_WINMM }, { "WinMM", FMOD_OUTPUTTYPE_WINMM }, { "WaveOut", FMOD_OUTPUTTYPE_WINMM }, -#if FMOD_VERSION < 0x43400 - { "OpenAL", FMOD_OUTPUTTYPE_OPENAL }, -#endif { "WASAPI", FMOD_OUTPUTTYPE_WASAPI }, { "ASIO", FMOD_OUTPUTTYPE_ASIO }, @@ -184,9 +181,6 @@ static const FEnumList OutputNames[] = { "SDL", 666 }, // Mac -#if FMOD_VERSION < 0x43000 - { "Sound Manager", FMOD_OUTPUTTYPE_SOUNDMANAGER }, -#endif { "Core Audio", FMOD_OUTPUTTYPE_COREAUDIO }, { NULL, 0 } @@ -905,6 +899,15 @@ bool FMODSoundRenderer::Init() // Set software format eval = Enum_NumForName(SoundFormatNames, snd_output_format); format = eval >= 0 ? FMOD_SOUND_FORMAT(eval) : FMOD_SOUND_FORMAT_PCM16; + if (format == FMOD_SOUND_FORMAT_PCM8) + { + // PCM-8 sounds like garbage with anything but DirectSound. + FMOD_OUTPUTTYPE output; + if (FMOD_OK != Sys->getOutput(&output) || output != FMOD_OUTPUTTYPE_DSOUND) + { + format = FMOD_SOUND_FORMAT_PCM16; + } + } eval = Enum_NumForName(ResamplerNames, snd_resampler); resampler = eval >= 0 ? FMOD_DSP_RESAMPLER(eval) : FMOD_DSP_RESAMPLER_LINEAR; // These represented the frequency limits for hardware channels, which we never used anyway. @@ -2145,7 +2148,7 @@ FISoundChannel *FMODSoundRenderer::CommonChannelSetup(FMOD::Channel *chan, FISou //========================================================================== // -// FMODSoundRenderer :: StopSound +// FMODSoundRenderer :: StopChannel // //========================================================================== @@ -2153,7 +2156,10 @@ void FMODSoundRenderer::StopChannel(FISoundChannel *chan) { if (chan != NULL && chan->SysChannel != NULL) { - ((FMOD::Channel *)chan->SysChannel)->stop(); + if (((FMOD::Channel *)chan->SysChannel)->stop() == FMOD_ERR_INVALID_HANDLE) + { // The channel handle was invalid; pretend it ended. + S_ChannelEnded(chan); + } } } diff --git a/src/sound/music_midi_timidity.cpp b/src/sound/music_midi_timidity.cpp index 21e72958e..ec2843c79 100644 --- a/src/sound/music_midi_timidity.cpp +++ b/src/sound/music_midi_timidity.cpp @@ -2,6 +2,7 @@ #include "c_cvars.h" #include "cmdlib.h" #include "templates.h" +#include "version.h" #ifndef _WIN32 #include @@ -20,9 +21,11 @@ void ChildSigHandler (int signum) #endif #ifdef _WIN32 + + BOOL SafeTerminateProcess(HANDLE hProcess, UINT uExitCode); -static char TimidityTitle[] = "TiMidity (ZDoom Launched)"; +static char TimidityTitle[] = "TiMidity (" GAMENAME " Launched)"; const char TimidityPPMIDIDevice::EventName[] = "TiMidity Killer"; CVAR (String, timidity_exe, "timidity.exe", CVAR_ARCHIVE|CVAR_GLOBALCONFIG) @@ -347,7 +350,7 @@ bool TimidityPPMIDIDevice::ValidateTimidity() } if (!good) { - Printf(PRINT_BOLD, "ZDoom requires a special version of TiMidity++\n"); + Printf(PRINT_BOLD, GAMENAME " requires a special version of TiMidity++\n"); } UnmapViewOfFile((LPVOID)exeBase); diff --git a/src/textures/animations.cpp b/src/textures/animations.cpp index ffff062c6..0290a293f 100644 --- a/src/textures/animations.cpp +++ b/src/textures/animations.cpp @@ -177,8 +177,8 @@ void FTextureManager::InitAnimated (void) { FMemLump animatedlump = Wads.ReadLump (lumpnum); int animatedlen = Wads.LumpLength(lumpnum); - const char *animdefs = (const char *)animatedlump.GetMem(); - const char *anim_p; + const BYTE *animdefs = (const BYTE *)animatedlump.GetMem(); + const BYTE *anim_p; FTextureID pic1, pic2; int animtype; DWORD animspeed; @@ -186,7 +186,7 @@ void FTextureManager::InitAnimated (void) // Init animation animtype = FAnimDef::ANIM_Forward; - for (anim_p = animdefs; *anim_p != -1; anim_p += 23) + for (anim_p = animdefs; *anim_p != 0xFF; anim_p += 23) { // make sure the current chunk of data is inside the lump boundaries. if (anim_p + 22 >= animdefs + animatedlen) @@ -196,8 +196,8 @@ void FTextureManager::InitAnimated (void) if (*anim_p /* .istexture */ & 1) { // different episode ? - if (!(pic1 = CheckForTexture (anim_p + 10 /* .startname */, FTexture::TEX_Wall, texflags)).Exists() || - !(pic2 = CheckForTexture (anim_p + 1 /* .endname */, FTexture::TEX_Wall, texflags)).Exists()) + if (!(pic1 = CheckForTexture ((const char*)(anim_p + 10) /* .startname */, FTexture::TEX_Wall, texflags)).Exists() || + !(pic2 = CheckForTexture ((const char*)(anim_p + 1) /* .endname */, FTexture::TEX_Wall, texflags)).Exists()) continue; // [RH] Bit 1 set means allow decals on walls with this texture @@ -205,16 +205,16 @@ void FTextureManager::InitAnimated (void) } else { - if (!(pic1 = CheckForTexture (anim_p + 10 /* .startname */, FTexture::TEX_Flat, texflags)).Exists() || - !(pic2 = CheckForTexture (anim_p + 1 /* .startname */, FTexture::TEX_Flat, texflags)).Exists()) + if (!(pic1 = CheckForTexture ((const char*)(anim_p + 10) /* .startname */, FTexture::TEX_Flat, texflags)).Exists() || + !(pic2 = CheckForTexture ((const char*)(anim_p + 1) /* .startname */, FTexture::TEX_Flat, texflags)).Exists()) continue; } FTexture *tex1 = Texture(pic1); FTexture *tex2 = Texture(pic2); - animspeed = (BYTE(anim_p[19]) << 0) | (BYTE(anim_p[20]) << 8) | - (BYTE(anim_p[21]) << 16) | (BYTE(anim_p[22]) << 24); + animspeed = (anim_p[19] << 0) | (anim_p[20] << 8) | + (anim_p[21] << 16) | (anim_p[22] << 24); // SMMU-style swirly hack? Don't apply on already-warping texture if (animspeed > 65535 && tex1 != NULL && !tex1->bWarped) @@ -242,7 +242,7 @@ void FTextureManager::InitAnimated (void) if (pic1 == pic2) { // This animation only has one frame. Skip it. (Doom aborted instead.) - Printf ("Animation %s in ANIMATED has only one frame\n", anim_p + 10); + Printf ("Animation %s in ANIMATED has only one frame\n", (const char*)(anim_p + 10)); continue; } // [RH] Allow for backward animations as well as forward. diff --git a/src/textures/texturemanager.cpp b/src/textures/texturemanager.cpp index b8256bc65..2944e4200 100644 --- a/src/textures/texturemanager.cpp +++ b/src/textures/texturemanager.cpp @@ -1243,6 +1243,12 @@ void FTextureManager::PrecacheLevel (void) memset (hitlist, 0, cnt); screen->GetHitlist(hitlist); + + for (unsigned i = 0; i < level.info->PrecacheTextures.Size(); i++) + { + hitlist[level.info->PrecacheTextures[i].GetIndex()] |= FTextureManager::HIT_Wall; + } + for (int i = cnt - 1; i >= 0; i--) { Renderer->PrecacheTexture(ByIndex(i), hitlist[i]); diff --git a/src/textures/textures.h b/src/textures/textures.h index aa8505d4e..cb3680ead 100644 --- a/src/textures/textures.h +++ b/src/textures/textures.h @@ -365,6 +365,16 @@ public: TEXMAN_DontCreate = 32 }; + enum + { + HIT_Wall = 1, + HIT_Flat = 2, + HIT_Sky = 4, + HIT_Sprite = 8, + + HIT_Columnmode = HIT_Wall|HIT_Sky|HIT_Sprite + }; + FTextureID CheckForTexture (const char *name, int usetype, BITFIELD flags=TEXMAN_TryAny); FTextureID GetTexture (const char *name, int usetype, BITFIELD flags=0); int ListTextures (const char *name, TArray &list); diff --git a/src/thingdef/thingdef_codeptr.cpp b/src/thingdef/thingdef_codeptr.cpp index fc577afcd..b4c6a219a 100644 --- a/src/thingdef/thingdef_codeptr.cpp +++ b/src/thingdef/thingdef_codeptr.cpp @@ -70,6 +70,7 @@ #include "m_bbox.h" #include "r_data/r_translate.h" #include "p_trace.h" +#include "p_setup.h" #include "gstrings.h" @@ -1494,7 +1495,7 @@ DEFINE_ACTION_FUNCTION_PARAMS(AActor, A_CustomPunch) //========================================================================== DEFINE_ACTION_FUNCTION_PARAMS(AActor, A_RailAttack) { - ACTION_PARAM_START(16); + ACTION_PARAM_START(17); ACTION_PARAM_INT(Damage, 0); ACTION_PARAM_INT(Spawnofs_XY, 1); ACTION_PARAM_BOOL(UseAmmo, 2); @@ -1511,6 +1512,7 @@ DEFINE_ACTION_FUNCTION_PARAMS(AActor, A_RailAttack) ACTION_PARAM_FLOAT(DriftSpeed, 13); ACTION_PARAM_CLASS(SpawnClass, 14); ACTION_PARAM_FIXED(Spawnofs_Z, 15); + ACTION_PARAM_INT(SpiralOffset, 16); if(Range==0) Range=8192*FRACUNIT; if(Sparsity==0) Sparsity=1.0; @@ -1539,7 +1541,7 @@ DEFINE_ACTION_FUNCTION_PARAMS(AActor, A_RailAttack) slope = pr_crailgun.Random2() * (Spread_Z / 255); } - P_RailAttack (self, Damage, Spawnofs_XY, Spawnofs_Z, Color1, Color2, MaxDiff, Flags, PuffType, angle, slope, Range, Duration, Sparsity, DriftSpeed, SpawnClass); + P_RailAttack (self, Damage, Spawnofs_XY, Spawnofs_Z, Color1, Color2, MaxDiff, Flags, PuffType, angle, slope, Range, Duration, Sparsity, DriftSpeed, SpawnClass, SpiralOffset); } //========================================================================== @@ -1557,7 +1559,7 @@ enum DEFINE_ACTION_FUNCTION_PARAMS(AActor, A_CustomRailgun) { - ACTION_PARAM_START(16); + ACTION_PARAM_START(17); ACTION_PARAM_INT(Damage, 0); ACTION_PARAM_INT(Spawnofs_XY, 1); ACTION_PARAM_COLOR(Color1, 2); @@ -1574,6 +1576,7 @@ DEFINE_ACTION_FUNCTION_PARAMS(AActor, A_CustomRailgun) ACTION_PARAM_FLOAT(DriftSpeed, 13); ACTION_PARAM_CLASS(SpawnClass, 14); ACTION_PARAM_FIXED(Spawnofs_Z, 15); + ACTION_PARAM_INT(SpiralOffset, 16); if(Range==0) Range=8192*FRACUNIT; if(Sparsity==0) Sparsity=1.0; @@ -1657,7 +1660,7 @@ DEFINE_ACTION_FUNCTION_PARAMS(AActor, A_CustomRailgun) slopeoffset = pr_crailgun.Random2() * (Spread_Z / 255); } - P_RailAttack (self, Damage, Spawnofs_XY, Spawnofs_Z, Color1, Color2, MaxDiff, Flags, PuffType, angleoffset, slopeoffset, Range, Duration, Sparsity, DriftSpeed, SpawnClass); + P_RailAttack (self, Damage, Spawnofs_XY, Spawnofs_Z, Color1, Color2, MaxDiff, Flags, PuffType, angleoffset, slopeoffset, Range, Duration, Sparsity, DriftSpeed, SpawnClass, SpiralOffset); self->x = saved_x; self->y = saved_y; @@ -4506,7 +4509,6 @@ DEFINE_ACTION_FUNCTION_PARAMS(AActor, A_Weave) //=========================================================================== -void P_TranslateLineDef (line_t *ld, maplinedef_t *mld); DEFINE_ACTION_FUNCTION_PARAMS(AActor, A_LineEffect) { ACTION_PARAM_START(2); @@ -5186,15 +5188,18 @@ DEFINE_ACTION_FUNCTION_PARAMS(AActor, A_SetSpeed) ref->Speed = speed; } -static bool DoCheckSpecies(AActor *mo, FName species, bool exclude) +static bool DoCheckSpecies(AActor *mo, FName filterSpecies, bool exclude) { - return (!(species) || mo->Species == NAME_None || (species && ((exclude) ? (mo->Species != species) : (mo->Species == species)))); + FName actorSpecies = mo->GetSpecies(); + if (filterSpecies == NAME_None) return true; + return exclude ? (actorSpecies != filterSpecies) : (actorSpecies == filterSpecies); } -static bool DoCheckFilter(AActor *mo, const PClass *filter, bool exclude) +static bool DoCheckClass(AActor *mo, const PClass *filterClass, bool exclude) { - const PClass *c1 = mo->GetClass(); - return (!(filter) || (filter == NULL) || (filter && ((exclude) ? (c1 != filter) : (c1 == filter)))); + const PClass *actorClass = mo->GetClass(); + if (filterClass == NULL) return true; + return exclude ? (actorClass != filterClass) : (actorClass == filterClass); } //=========================================================================== @@ -5228,23 +5233,23 @@ enum DMSS static void DoDamage(AActor *dmgtarget, AActor *self, int amount, FName DamageType, int flags, const PClass *filter, FName species) { - bool filterpass = DoCheckFilter(dmgtarget, filter, (flags & DMSS_EXFILTER) ? true : false), - speciespass = DoCheckSpecies(dmgtarget, species, (flags & DMSS_EXSPECIES) ? true : false); + bool filterpass = DoCheckClass(dmgtarget, filter, !!(flags & DMSS_EXFILTER)), + speciespass = DoCheckSpecies(dmgtarget, species, !!(flags & DMSS_EXSPECIES)); if ((flags & DMSS_EITHER) ? (filterpass || speciespass) : (filterpass && speciespass)) { int dmgFlags = 0; if (flags & DMSS_FOILINVUL) - dmgFlags += DMG_FOILINVUL; + dmgFlags |= DMG_FOILINVUL; if (flags & DMSS_FOILBUDDHA) - dmgFlags += DMG_FOILBUDDHA; - if ((flags & DMSS_KILL) || (flags & DMSS_NOFACTOR)) //Kill implies NoFactor - dmgFlags += DMG_NO_FACTOR; + dmgFlags |= DMG_FOILBUDDHA; + if (flags & (DMSS_KILL | DMSS_NOFACTOR)) //Kill implies NoFactor + dmgFlags |= DMG_NO_FACTOR; if (!(flags & DMSS_AFFECTARMOR) || (flags & DMSS_KILL)) //Kill overrides AffectArmor - dmgFlags += DMG_NO_ARMOR; + dmgFlags |= DMG_NO_ARMOR; if (flags & DMSS_KILL) //Kill adds the value of the damage done to it. Allows for more controlled extreme death types. amount += dmgtarget->health; if (flags & DMSS_NOPROTECT) //Ignore PowerProtection. - dmgFlags += DMG_NO_PROTECT; + dmgFlags |= DMG_NO_PROTECT; if (amount > 0) P_DamageMobj(dmgtarget, self, self, amount, DamageType, dmgFlags); //Should wind up passing them through just fine. @@ -5408,16 +5413,16 @@ enum KILS static void DoKill(AActor *killtarget, AActor *self, FName damagetype, int flags, const PClass *filter, FName species) { - bool filterpass = DoCheckFilter(killtarget, filter, (flags & KILS_EXFILTER) ? true : false), - speciespass = DoCheckSpecies(killtarget, species, (flags & KILS_EXSPECIES) ? true : false); + bool filterpass = DoCheckClass(killtarget, filter, !!(flags & KILS_EXFILTER)), + speciespass = DoCheckSpecies(killtarget, species, !!(flags & KILS_EXSPECIES)); if ((flags & KILS_EITHER) ? (filterpass || speciespass) : (filterpass && speciespass)) //Check this first. I think it'll save the engine a lot more time this way. { - int dmgFlags = DMG_NO_ARMOR + DMG_NO_FACTOR; + int dmgFlags = DMG_NO_ARMOR | DMG_NO_FACTOR; if (KILS_FOILINVUL) - dmgFlags += DMG_FOILINVUL; + dmgFlags |= DMG_FOILINVUL; if (KILS_FOILBUDDHA) - dmgFlags += DMG_FOILBUDDHA; + dmgFlags |= DMG_FOILBUDDHA; if ((killtarget->flags & MF_MISSILE) && (flags & KILS_KILLMISSILES)) @@ -5426,7 +5431,8 @@ static void DoKill(AActor *killtarget, AActor *self, FName damagetype, int flags //Check to see if it's invulnerable. Disregarded if foilinvul is on, but never works on a missile with NODAMAGE //since that's the whole point of it. if ((!(killtarget->flags2 & MF2_INVULNERABLE) || (flags & KILS_FOILINVUL)) && - (!(killtarget->flags2 & MF7_BUDDHA) || (flags & KILS_FOILBUDDHA)) && !(killtarget->flags5 & MF5_NODAMAGE)) + (!(killtarget->flags7 & MF7_BUDDHA) || (flags & KILS_FOILBUDDHA)) && + !(killtarget->flags5 & MF5_NODAMAGE)) { P_ExplodeMissile(killtarget, NULL, NULL); } @@ -5568,8 +5574,8 @@ enum RMVF_flags static void DoRemove(AActor *removetarget, int flags, const PClass *filter, FName species) { - bool filterpass = DoCheckFilter(removetarget, filter, (flags & RMVF_EXFILTER) ? true : false), - speciespass = DoCheckSpecies(removetarget, species, (flags & RMVF_EXSPECIES) ? true : false); + bool filterpass = DoCheckClass(removetarget, filter, !!(flags & RMVF_EXFILTER)), + speciespass = DoCheckSpecies(removetarget, species, !!(flags & RMVF_EXSPECIES)); if ((flags & RMVF_EITHER) ? (filterpass || speciespass) : (filterpass && speciespass)) { if ((flags & RMVF_EVERYTHING)) @@ -5722,33 +5728,17 @@ DEFINE_ACTION_FUNCTION_PARAMS(AActor, A_Remove) // A_SetTeleFog // // Sets the teleport fog(s) for the calling actor. -// Takes a name of the classes for te source and destination. -// Can set both at the same time. Use "" to retain the previous fog without -// changing it. +// Takes a name of the classes for the source and destination. //=========================================================================== DEFINE_ACTION_FUNCTION_PARAMS(AActor, A_SetTeleFog) { ACTION_PARAM_START(2); - ACTION_PARAM_NAME(oldpos, 0); - ACTION_PARAM_NAME(newpos, 1); - const PClass *check = PClass::FindClass(oldpos); - if (check == NULL || !stricmp(oldpos, "none") || !stricmp(oldpos, "null")) - self->TeleFogSourceType = NULL; - else if (!stricmp(oldpos, "")) - { //Don't change it if it's just "" - } - else - self->TeleFogSourceType = check; + ACTION_PARAM_CLASS(oldpos, 0); + ACTION_PARAM_CLASS(newpos, 1); - check = PClass::FindClass(newpos); - if (check == NULL || !stricmp(newpos, "none") || !stricmp(newpos, "null")) - self->TeleFogDestType = NULL; - else if (!stricmp(newpos, "")) - { //Don't change it if it's just "" - } - else - self->TeleFogDestType = check; + self->TeleFogSourceType = oldpos; + self->TeleFogDestType = newpos; } //=========================================================================== diff --git a/src/thingdef/thingdef_properties.cpp b/src/thingdef/thingdef_properties.cpp index 677979276..95f1c463c 100644 --- a/src/thingdef/thingdef_properties.cpp +++ b/src/thingdef/thingdef_properties.cpp @@ -404,11 +404,11 @@ DEFINE_INFO_PROPERTY(game, S, Actor) DEFINE_INFO_PROPERTY(spawnid, I, Actor) { PROP_INT_PARM(id, 0); - if (id<0 || id>255) + if (id<0 || id>65535) { - I_Error ("SpawnID must be in the range [0,255]"); + I_Error ("SpawnID must be in the range [0,65535]"); } - else info->SpawnID=(BYTE)id; + else info->SpawnID=(WORD)id; } //========================================================================== @@ -420,20 +420,8 @@ DEFINE_INFO_PROPERTY(conversationid, IiI, Actor) PROP_INT_PARM(id1, 1); PROP_INT_PARM(id2, 2); - // Handling for Strife teaser IDs - only of meaning for the standard items - // as PWADs cannot be loaded with the teasers. - if (PROP_PARM_COUNT > 1) - { - if ((gameinfo.flags & (GI_SHAREWARE|GI_TEASER2)) == (GI_SHAREWARE)) - convid=id1; - - if ((gameinfo.flags & (GI_SHAREWARE|GI_TEASER2)) == (GI_SHAREWARE|GI_TEASER2)) - convid=id2; - - } - - if (convid <= 0) return; // 0 is not usable because the dialogue scripts use it as 'no object'. - SetStrifeType(convid, info->Class); + if (convid <= 0 || convid > 65535) return; // 0 is not usable because the dialogue scripts use it as 'no object'. + else info->ConversationID=(WORD)convid; } //========================================================================== @@ -976,7 +964,7 @@ DEFINE_PROPERTY(translation, L, Actor) if (type == 0) { PROP_INT_PARM(trans, 1); - int max = (gameinfo.gametype==GAME_Strife || (info->GameFilter&GAME_Strife)) ? 6:2; + int max = 6;// (gameinfo.gametype == GAME_Strife || (info->GameFilter&GAME_Strife)) ? 6 : 2; if (trans < 0 || trans > max) { I_Error ("Translation must be in the range [0,%d]", max); @@ -1422,7 +1410,7 @@ DEFINE_PROPERTY(stamina, I, Actor) DEFINE_PROPERTY(telefogsourcetype, S, Actor) { PROP_STRING_PARM(str, 0); - if (!stricmp(str, "") || (!stricmp(str, "none")) || (!stricmp(str, "null")) || *str == 0) defaults->TeleFogSourceType = NULL; + if (!stricmp(str, "") || !stricmp(str, "none")) defaults->TeleFogSourceType = NULL; else defaults->TeleFogSourceType = FindClassTentative(str,"TeleportFog"); } @@ -1432,7 +1420,7 @@ DEFINE_PROPERTY(telefogsourcetype, S, Actor) DEFINE_PROPERTY(telefogdesttype, S, Actor) { PROP_STRING_PARM(str, 0); - if (!stricmp(str, "") || (!stricmp(str, "none")) || (!stricmp(str, "null")) || *str == 0) defaults->TeleFogDestType = NULL; + if (!stricmp(str, "") || !stricmp(str, "none")) defaults->TeleFogDestType = NULL; else defaults->TeleFogDestType = FindClassTentative(str, "TeleportFog"); } diff --git a/src/v_draw.cpp b/src/v_draw.cpp index e2890841b..ce502c772 100644 --- a/src/v_draw.cpp +++ b/src/v_draw.cpp @@ -333,6 +333,7 @@ bool DCanvas::ParseDrawTextureTags (FTexture *img, double x, double y, DWORD tag int intval; bool translationset = false; bool virtBottom; + bool fillcolorset = false; if (img == NULL || img->UseType == FTexture::TEX_Null) { @@ -539,6 +540,7 @@ bool DCanvas::ParseDrawTextureTags (FTexture *img, double x, double y, DWORD tag case DTA_FillColor: parms->fillcolor = va_arg(tags, uint32); + fillcolorset = true; break; case DTA_Translation: @@ -711,7 +713,7 @@ bool DCanvas::ParseDrawTextureTags (FTexture *img, double x, double y, DWORD tag if (parms->style.BlendOp == 255) { - if (parms->fillcolor != ~0u) + if (fillcolorset) { if (parms->alphaChannel) { diff --git a/src/v_video.cpp b/src/v_video.cpp index 453772886..d48bd91ae 100644 --- a/src/v_video.cpp +++ b/src/v_video.cpp @@ -1245,7 +1245,7 @@ void DFrameBuffer::GetHitlist(BYTE *hitlist) FTextureID pic = frame->Texture[k]; if (pic.isValid()) { - hitlist[pic.GetIndex()] = 1; + hitlist[pic.GetIndex()] = FTextureManager::HIT_Sprite; } } } @@ -1257,14 +1257,14 @@ void DFrameBuffer::GetHitlist(BYTE *hitlist) for (i = numsectors - 1; i >= 0; i--) { hitlist[sectors[i].GetTexture(sector_t::floor).GetIndex()] = - hitlist[sectors[i].GetTexture(sector_t::ceiling).GetIndex()] |= 2; + hitlist[sectors[i].GetTexture(sector_t::ceiling).GetIndex()] |= FTextureManager::HIT_Flat; } for (i = numsides - 1; i >= 0; i--) { hitlist[sides[i].GetTexture(side_t::top).GetIndex()] = hitlist[sides[i].GetTexture(side_t::mid).GetIndex()] = - hitlist[sides[i].GetTexture(side_t::bottom).GetIndex()] |= 1; + hitlist[sides[i].GetTexture(side_t::bottom).GetIndex()] |= FTextureManager::HIT_Wall; } // Sky texture is always present. @@ -1276,11 +1276,11 @@ void DFrameBuffer::GetHitlist(BYTE *hitlist) if (sky1texture.isValid()) { - hitlist[sky1texture.GetIndex()] |= 1; + hitlist[sky1texture.GetIndex()] |= FTextureManager::HIT_Sky; } if (sky2texture.isValid()) { - hitlist[sky2texture.GetIndex()] |= 1; + hitlist[sky2texture.GetIndex()] |= FTextureManager::HIT_Sky; } } diff --git a/src/v_video.h b/src/v_video.h index 69741c7f8..7593b7b4b 100644 --- a/src/v_video.h +++ b/src/v_video.h @@ -74,7 +74,7 @@ enum DTA_DestWidth, // width of area to draw to DTA_DestHeight, // height of area to draw to DTA_Alpha, // alpha value for translucency - DTA_FillColor, // color to stencil onto the destination + DTA_FillColor, // color to stencil onto the destination (RGB is the color for truecolor drawers, A is the palette index for paletted drawers) DTA_Translation, // translation table to recolor the source DTA_AlphaChannel, // bool: the source is an alpha channel; used with DTA_FillColor DTA_Clean, // bool: scale texture size and position by CleanXfac and CleanYfac @@ -398,8 +398,8 @@ public: virtual void WipeEndScreen(); virtual bool WipeDo(int ticks); virtual void WipeCleanup(); - virtual int GetPixelDoubling() const { return 0; } - virtual int GetTrueHeight() { return GetHeight(); } + + virtual void ScaleCoordsFromWindow(SWORD &x, SWORD &y) {} uint32 GetLastFPS() const { return LastCount; } diff --git a/src/version.h b/src/version.h index de33e93a7..3d28dd2ac 100644 --- a/src/version.h +++ b/src/version.h @@ -56,7 +56,7 @@ const char *GetVersionString(); // Version stored in the ini's [LastRun] section. // Bump it if you made some configuration change that you want to // be able to migrate in FGameConfigFile::DoGlobalSetup(). -#define LASTRUNVERSION "210" +#define LASTRUNVERSION "211" // Protocol version used in demos. // Bump it if you change existing DEM_ commands or add new ones. @@ -76,7 +76,7 @@ const char *GetVersionString(); // Use 4500 as the base git save version, since it's higher than the // SVN revision ever got. -#define SAVEVER 4521 +#define SAVEVER 4523 #define SAVEVERSTRINGIFY2(x) #x #define SAVEVERSTRINGIFY(x) SAVEVERSTRINGIFY2(x) @@ -88,13 +88,14 @@ const char *GetVersionString(); // More stuff that needs to be different for derivatives. #define GAMENAME "ZDoom" +#define GAMENAMELOWERCASE "zdoom" #define FORUM_URL "http://forum.zdoom.org" #define BUGS_FORUM_URL "http://forum.zdoom.org/index.php?c=3" #if defined(__APPLE__) || defined(_WIN32) #define GAME_DIR GAMENAME #else -#define GAME_DIR ".config/zdoom" +#define GAME_DIR ".config/" GAMENAMELOWERCASE #endif diff --git a/src/w_wad.cpp b/src/w_wad.cpp index 9455817db..2b3413460 100644 --- a/src/w_wad.cpp +++ b/src/w_wad.cpp @@ -56,6 +56,7 @@ #include "doomerrors.h" #include "resourcefiles/resourcefile.h" #include "md5.h" +#include "doomstat.h" // MACROS ------------------------------------------------------------------ @@ -289,17 +290,64 @@ void FWadCollection::AddFile (const char *filename, FileReader *wadinfo) FResourceLump *lump = resfile->GetLump(i); if (lump->Flags & LUMPF_EMBEDDED) { - char path[256]; - - mysnprintf(path, countof(path), "%s:", filename); - char *wadstr = path + strlen(path); - + FString path; + path.Format("%s:%s", filename, lump->FullName.GetChars()); FileReader *embedded = lump->NewReader(); - strcpy(wadstr, lump->FullName); - AddFile(path, embedded); } } + + if (hashfile) + { + BYTE cksum[16]; + char cksumout[33]; + memset(cksumout, 0, sizeof(cksumout)); + + FileReader *reader = wadinfo; + + if (reader != NULL) + { + MD5Context md5; + reader->Seek(0, SEEK_SET); + md5.Update(reader, reader->GetLength()); + md5.Final(cksum); + + for (size_t j = 0; j < sizeof(cksum); ++j) + { + sprintf(cksumout + (j * 2), "%02X", cksum[j]); + } + + fprintf(hashfile, "file: %s, hash: %s, size: %ld\n", filename, cksumout, reader->GetLength()); + } + + else + fprintf(hashfile, "file: %s, Directory structure\n", filename); + + for (DWORD i = 0; i < resfile->LumpCount(); i++) + { + FResourceLump *lump = resfile->GetLump(i); + + if (!(lump->Flags & LUMPF_EMBEDDED)) + { + reader = lump->NewReader(); + + MD5Context md5; + md5.Update(reader, lump->LumpSize); + md5.Final(cksum); + + for (size_t j = 0; j < sizeof(cksum); ++j) + { + sprintf(cksumout + (j * 2), "%02X", cksum[j]); + } + + fprintf(hashfile, "file: %s, lump: %s, hash: %s, size: %d\n", filename, + lump->FullName.IsNotEmpty() ? lump->FullName.GetChars() : lump->Name, + cksumout, lump->LumpSize); + + delete reader; + } + } + } return; } } @@ -686,7 +734,7 @@ void FWadCollection::InitHashChains (void) FirstLumpIndex[j] = i; // Do the same for the full paths - if (LumpInfo[i].lump->FullName!=NULL) + if (LumpInfo[i].lump->FullName.IsNotEmpty()) { j = MakeKey(LumpInfo[i].lump->FullName) % NumLumps; NextLumpIndex_FullName[i] = FirstLumpIndex_FullName[j]; @@ -1037,7 +1085,7 @@ const char *FWadCollection::GetLumpFullName (int lump) const { if ((size_t)lump >= NumLumps) return NULL; - else if (LumpInfo[lump].lump->FullName != NULL) + else if (LumpInfo[lump].lump->FullName.IsNotEmpty()) return LumpInfo[lump].lump->FullName; else return LumpInfo[lump].lump->Name; @@ -1523,3 +1571,33 @@ static void PrintLastError () Printf (TEXTCOLOR_RED " %s\n", strerror(errno)); } #endif + +#ifdef _DEBUG +//========================================================================== +// +// CCMD LumpNum +// +//========================================================================== + +CCMD(lumpnum) +{ + for (int i = 1; i < argv.argc(); ++i) + { + Printf("%s: %d\n", argv[i], Wads.CheckNumForName(argv[i])); + } +} + +//========================================================================== +// +// CCMD LumpNumFull +// +//========================================================================== + +CCMD(lumpnumfull) +{ + for (int i = 1; i < argv.argc(); ++i) + { + Printf("%s: %d\n", argv[i], Wads.CheckNumForFullName(argv[i])); + } +} +#endif diff --git a/src/w_wad.h b/src/w_wad.h index 4dfe3434d..63912373e 100644 --- a/src/w_wad.h +++ b/src/w_wad.h @@ -52,6 +52,8 @@ struct wadlump_t // [RH] Namespaces from BOOM. typedef enum { + ns_hidden = -1, + ns_global = 0, ns_sprites, ns_flats, diff --git a/src/win32/i_cd.cpp b/src/win32/i_cd.cpp index b4982b865..29167f276 100644 --- a/src/win32/i_cd.cpp +++ b/src/win32/i_cd.cpp @@ -45,6 +45,7 @@ #include "c_dispatch.h" #include "m_argv.h" #include "i_system.h" +#include "version.h" #include "i_cd.h" #include "helperthread.h" @@ -175,7 +176,7 @@ bool FCDThread::Init () CD_WindowClass.style = CS_NOCLOSE; CD_WindowClass.lpfnWndProc = CD_WndProc; CD_WindowClass.hInstance = g_hInst; - CD_WindowClass.lpszClassName = "ZDoom CD Player"; + CD_WindowClass.lpszClassName = GAMENAME " CD Player"; CD_WindowAtom = RegisterClass (&CD_WindowClass); if (CD_WindowAtom == 0) @@ -183,7 +184,7 @@ bool FCDThread::Init () CD_Window = CreateWindow ( (LPCTSTR)(INT_PTR)(int)CD_WindowAtom, - "ZDoom CD Player", + GAMENAME " CD Player", 0, 0, 0, 10, 10, NULL, diff --git a/src/win32/i_crash.cpp b/src/win32/i_crash.cpp index 453549ab7..0735e3553 100644 --- a/src/win32/i_crash.cpp +++ b/src/win32/i_crash.cpp @@ -125,10 +125,7 @@ RtlVirtualUnwind ( #define UPLOAD_BOUNDARY "Von-DnrNbJl0 P9d_BD;cEEsQVWpYMq0pbZ6NUmYHus;yIbFbkgB?.N=YC5O=BGZm+Rab5" #define DBGHELP_URI "/msredist/dbghelp.dl_" -// If you are working on your own modified version of ZDoom, change -// the last part of the UPLOAD_AGENT (between parentheses) to your -// own program's name. e.g. (Skulltag) or (ZDaemon) or (ZDoomFu) -#define UPLOAD_AGENT "ZDoom/" VERSIONSTR " (" GAMESIG ")" +#define UPLOAD_AGENT GAMENAME "/" VERSIONSTR " (" GAMESIG ")" // Time, in milliseconds, to wait for a send() or recv() to complete. #define TIMEOUT 60000 diff --git a/src/win32/i_input.cpp b/src/win32/i_input.cpp index ed7c81cf1..a26ff320e 100644 --- a/src/win32/i_input.cpp +++ b/src/win32/i_input.cpp @@ -323,11 +323,11 @@ bool GUIWndProcHook(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam, LRESU if (BlockMouseMove > 0) return true; } + ev.data1 = LOWORD(lParam); + ev.data2 = HIWORD(lParam); + if (screen != NULL) { - int shift = screen? screen->GetPixelDoubling() : 0; - ev.data1 = LOWORD(lParam) >> shift; - ev.data2 = HIWORD(lParam) >> shift; - if (screen) ev.data2 -= (screen->GetTrueHeight() - screen->GetHeight())/2; + screen->ScaleCoordsFromWindow(ev.data1, ev.data2); } if (wParam & MK_SHIFT) ev.data3 |= GKM_SHIFT; diff --git a/src/win32/i_main.cpp b/src/win32/i_main.cpp index f2a4fab4d..ea167428f 100644 --- a/src/win32/i_main.cpp +++ b/src/win32/i_main.cpp @@ -143,7 +143,7 @@ LONG ErrorIconChar; // PRIVATE DATA DEFINITIONS ------------------------------------------------ -static const char WinClassName[] = "ZDoomMainWindow"; +static const char WinClassName[] = GAMENAME "MainWindow"; static HMODULE hwtsapi32; // handle to wtsapi32.dll static void (*TermFuncs[MAX_TERMS])(void); static int NumTerms; @@ -1224,7 +1224,7 @@ int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE nothing, LPSTR cmdline, int n // This should only happen on basic Windows 95 installations, but since we // don't support Windows 95, we have no obligation to provide assistance in // getting it installed. - MessageBoxA(NULL, "Could not load riched20.dll", "ZDoom Error", MB_OK | MB_ICONSTOP); + MessageBoxA(NULL, "Could not load riched20.dll", GAMENAME " Error", MB_OK | MB_ICONSTOP); exit(0); } @@ -1288,20 +1288,3 @@ int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE nothing, LPSTR cmdline, int n MainThread = INVALID_HANDLE_VALUE; return 0; } - -//========================================================================== -// -// CCMD crashout -// -// Debugging routine for testing the crash logger. -// Useless in a debug build, because that doesn't enable the crash logger. -// -//========================================================================== - -#ifndef _DEBUG -#include "c_dispatch.h" -CCMD (crashout) -{ - *(int *)0 = 0; -} -#endif diff --git a/src/win32/i_system.cpp b/src/win32/i_system.cpp index 71cc42af0..2dabe7de9 100644 --- a/src/win32/i_system.cpp +++ b/src/win32/i_system.cpp @@ -561,37 +561,26 @@ void I_DetectOS(void) { if (info.dwMinorVersion == 0) { - if (info.wProductType == VER_NT_WORKSTATION) - { - osname = "Vista"; - } - else - { - osname = "Server 2008"; - } + osname = (info.wProductType == VER_NT_WORKSTATION) ? "Vista" : "Server 2008"; } else if (info.dwMinorVersion == 1) { - if (info.wProductType == VER_NT_WORKSTATION) - { - osname = "7"; - } - else - { - osname = "Server 2008 R2"; - } + osname = (info.wProductType == VER_NT_WORKSTATION) ? "7" : "Server 2008 R2"; } else if (info.dwMinorVersion == 2) { - // Microsoft broke this API for 8.1 so without jumping through hoops it won't be possible anymore to detect never versions aside from the build number, especially for older compilers. - if (info.wProductType == VER_NT_WORKSTATION) - { - osname = "8 (or higher)"; - } - else - { - osname = "Server 2012 (or higher)"; - } + // Starting with Windows 8.1, you need to specify in your manifest + // the highest version of Windows you support, which will also be the + // highest version of Windows this function returns. + osname = (info.wProductType == VER_NT_WORKSTATION) ? "8" : "Server 2012"; + } + else if (info.dwMinorVersion == 3) + { + osname = (info.wProductType == VER_NT_WORKSTATION) ? "8.1" : "Server 2012 R2"; + } + else if (info.dwMinorVersion == 4) + { + osname = (info.wProductType == VER_NT_WORKSTATION) ? "10 (or higher)" : "Server 10 (or higher)"; } } break; diff --git a/src/win32/win32iface.h b/src/win32/win32iface.h index 2704de0fa..934931ea0 100644 --- a/src/win32/win32iface.h +++ b/src/win32/win32iface.h @@ -127,10 +127,12 @@ public: virtual void Blank () = 0; virtual bool PaintToWindow () = 0; virtual HRESULT GetHR () = 0; + virtual void ScaleCoordsFromWindow(SWORD &x, SWORD &y); protected: virtual bool CreateResources () = 0; virtual void ReleaseResources () = 0; + virtual int GetTrueHeight() { return GetHeight(); } bool Windowed; @@ -164,8 +166,8 @@ public: void SetVSync (bool vsync); void NewRefreshRate(); HRESULT GetHR (); - virtual int GetTrueHeight() { return TrueHeight; } bool Is8BitMode(); + virtual int GetTrueHeight() { return TrueHeight; } void Blank (); bool PaintToWindow (); @@ -269,8 +271,8 @@ public: bool WipeDo(int ticks); void WipeCleanup(); HRESULT GetHR (); - virtual int GetTrueHeight() { return TrueHeight; } bool Is8BitMode() { return false; } + virtual int GetTrueHeight() { return TrueHeight; } private: friend class D3DTex; @@ -380,7 +382,6 @@ private: void EndLineBatch(); void EndBatch(); void CopyNextFrontBuffer(); - int GetPixelDoubling() const { return PixelDoubling; } D3DCAPS9 DeviceCaps; diff --git a/src/win32/win32video.cpp b/src/win32/win32video.cpp index b6d6d670e..8aa74bfb5 100644 --- a/src/win32/win32video.cpp +++ b/src/win32/win32video.cpp @@ -70,6 +70,7 @@ #include "r_defs.h" #include "v_text.h" #include "r_swrenderer.h" +#include "version.h" #include "win32iface.h" @@ -301,7 +302,7 @@ void Win32Video::InitDDraw () DDraw->Release (); DDraw = NULL; I_FatalError ("DirectDraw returned no display modes.\n\n" - "If you started ZDoom from a fullscreen DOS box, run it from " + "If you started " GAMENAME " from a fullscreen DOS box, run it from " "a DOS window instead. If that does not work, you may need to reboot."); } if (Args->CheckParm ("-2")) @@ -735,6 +736,29 @@ void Win32Video::SetWindowedScale (float scale) // FIXME } +//========================================================================== +// +// BaseWinFB :: ScaleCoordsFromWindow +// +// Given coordinates in window space, return coordinates in what the game +// thinks screen space is. +// +//========================================================================== + +void BaseWinFB::ScaleCoordsFromWindow(SWORD &x, SWORD &y) +{ + RECT rect; + + int TrueHeight = GetTrueHeight(); + if (GetClientRect(Window, &rect)) + { + x = SWORD(x * Width / (rect.right - rect.left)); + y = SWORD(y * TrueHeight / (rect.bottom - rect.top)); + } + // Subtract letterboxing borders + y -= (TrueHeight - Height) / 2; +} + //========================================================================== // // SetFPSLimit diff --git a/src/win32/zdoom.exe.manifest b/src/win32/zdoom.exe.manifest index 4aee7a96c..0d2074069 100644 --- a/src/win32/zdoom.exe.manifest +++ b/src/win32/zdoom.exe.manifest @@ -5,4 +5,23 @@ + + + true + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/zstring.cpp b/src/zstring.cpp index 14d19f46f..510ff19d7 100644 --- a/src/zstring.cpp +++ b/src/zstring.cpp @@ -1096,7 +1096,7 @@ void FString::ReallocBuffer (size_t newlen) { // If more than one reference, we must use a new copy FStringData *old = Data(); AllocBuffer (newlen); - StrCopy (Chars, old->Chars(), old->Len); + StrCopy (Chars, old->Chars(), newlen < old->Len ? newlen : old->Len); old->Release(); } else diff --git a/wadsrc/static/actors/actor.txt b/wadsrc/static/actors/actor.txt index f84151d18..8a31b05c0 100644 --- a/wadsrc/static/actors/actor.txt +++ b/wadsrc/static/actors/actor.txt @@ -210,7 +210,7 @@ ACTOR Actor native //: Thinker action native A_Jump(int chance = 256, state label, ...); action native A_CustomMissile(class missiletype, float spawnheight = 32, int spawnofs_xy = 0, float angle = 0, int flags = 0, float pitch = 0, int ptr = AAPTR_TARGET); action native A_CustomBulletAttack(float spread_xy, float spread_z, int numbullets, int damageperbullet, class pufftype = "BulletPuff", float range = 0, int flags = 0, int ptr = AAPTR_TARGET); - action native A_CustomRailgun(int damage, int spawnofs_xy = 0, color color1 = "", color color2 = "", int flags = 0, bool aim = false, float maxdiff = 0, class pufftype = "BulletPuff", float spread_xy = 0, float spread_z = 0, float range = 0, int duration = 0, float sparsity = 1.0, float driftspeed = 1.0, class spawnclass = "none", float spawnofs_z = 0); + action native A_CustomRailgun(int damage, int spawnofs_xy = 0, color color1 = "", color color2 = "", int flags = 0, bool aim = false, float maxdiff = 0, class pufftype = "BulletPuff", float spread_xy = 0, float spread_z = 0, float range = 0, int duration = 0, float sparsity = 1.0, float driftspeed = 1.0, class spawnclass = "none", float spawnofs_z = 0, int spiraloffset = 270); action native A_JumpIfHealthLower(int health, state label, int ptr_selector = AAPTR_DEFAULT); action native A_JumpIfCloser(float distance, state label); action native A_JumpIfTracerCloser(float distance, state label); @@ -325,7 +325,7 @@ ACTOR Actor native //: Thinker action native A_GiveToSiblings(class itemtype, int amount = 0); action native A_TakeFromChildren(class itemtype, int amount = 0); action native A_TakeFromSiblings(class itemtype, int amount = 0); - action native A_SetTeleFog(name oldpos, name newpos); + action native A_SetTeleFog(class oldpos, class newpos); action native A_SwapTeleFog(); action native A_SetFloatBobPhase(int bob); action native A_SetHealth(int health, int ptr = AAPTR_DEFAULT); diff --git a/wadsrc/static/actors/chex/chexammo.txt b/wadsrc/static/actors/chex/chexammo.txt index b7d644876..27c5d419b 100644 --- a/wadsrc/static/actors/chex/chexammo.txt +++ b/wadsrc/static/actors/chex/chexammo.txt @@ -2,15 +2,13 @@ // Mini Zorch ----------------------------------------------------------------- -actor MiniZorchRecharge : Clip 2007 +actor MiniZorchRecharge : Clip { - Game Chex inventory.pickupmessage "$GOTZORCHRECHARGE" } -actor MiniZorchPack : Clip 2048 +actor MiniZorchPack : Clip { - Game Chex Inventory.PickupMessage "$GOTMINIZORCHPACK" Inventory.Amount 50 States @@ -23,15 +21,13 @@ actor MiniZorchPack : Clip 2048 // Large Zorch ---------------------------------------------------------------- -actor LargeZorchRecharge : Shell 2008 +actor LargeZorchRecharge : Shell { - Game Chex inventory.pickupmessage "$GOTLARGEZORCHERRECHARGE" } -actor LargeZorchPack : Shell 2049 +actor LargeZorchPack : Shell { - Game Chex Inventory.PickupMessage "$GOTLARGEZORCHERPACK" Inventory.Amount 20 States @@ -44,15 +40,13 @@ actor LargeZorchPack : Shell 2049 // Zorch Propulsor ------------------------------------------------------------ -actor PropulsorZorch : RocketAmmo 2010 +actor PropulsorZorch : RocketAmmo { - Game Chex inventory.pickupmessage "$GOTPROPULSORRECHARGE" } -actor PropulsorZorchPack : RocketAmmo 2046 +actor PropulsorZorchPack : RocketAmmo { - Game Chex Inventory.PickupMessage "$GOTPROPULSORPACK" Inventory.Amount 5 States @@ -65,16 +59,13 @@ actor PropulsorZorchPack : RocketAmmo 2046 // Phasing Zorch -------------------------------------------------------------- -actor PhasingZorch : Cell 2047 +actor PhasingZorch : Cell { - Game Chex inventory.pickupmessage "$GOTPHASINGZORCHERRECHARGE" } -actor PhasingZorchPack : Cell 17 +actor PhasingZorchPack : Cell { - Game Chex - SpawnID 142 Inventory.PickupMessage "$GOTPHASINGZORCHERPACK" Inventory.Amount 100 States diff --git a/wadsrc/static/actors/chex/chexdecorations.txt b/wadsrc/static/actors/chex/chexdecorations.txt index 29b0099c1..6515061c5 100644 --- a/wadsrc/static/actors/chex/chexdecorations.txt +++ b/wadsrc/static/actors/chex/chexdecorations.txt @@ -2,81 +2,69 @@ // Civilians ------------------------------------------------------------------ -actor ChexCivilian1 : GreenTorch 45 +actor ChexCivilian1 : GreenTorch { - game Chex height 54 } -actor ChexCivilian2 : ShortGreenTorch 56 +actor ChexCivilian2 : ShortGreenTorch { - game Chex height 54 } -actor ChexCivilian3 : ShortRedTorch 57 +actor ChexCivilian3 : ShortRedTorch { - game Chex height 48 } // Landing Zone --------------------------------------------------------------- -actor ChexLandingLight : Column 2028 +actor ChexLandingLight : Column { - game Chex height 35 } -actor ChexSpaceship : TechPillar 48 +actor ChexSpaceship : TechPillar { - game Chex height 52 } // Trees and Plants ----------------------------------------------------------- -actor ChexAppleTree : Stalagtite 47 +actor ChexAppleTree : Stalagtite { - game Chex height 92 } -actor ChexBananaTree : BigTree 54 +actor ChexBananaTree : BigTree { - game Chex height 108 } -actor ChexOrangeTree : TorchTree 43 +actor ChexOrangeTree : TorchTree { - game Chex height 92 } -actor ChexSubmergedPlant : ShortGreenColumn 31 +actor ChexSubmergedPlant : ShortGreenColumn { - game Chex height 42 } -actor ChexTallFlower : HeadsOnAStick 28 +actor ChexTallFlower : HeadsOnAStick { - game Chex height 25 } -actor ChexTallFlower2 : DeadStick 25 +actor ChexTallFlower2 : DeadStick { - game Chex height 25 } // Slime Fountain ------------------------------------------------------------- -actor ChexSlimeFountain : BlueTorch 44 +actor ChexSlimeFountain : BlueTorch { - game Chex height 48 States { @@ -88,53 +76,45 @@ actor ChexSlimeFountain : BlueTorch 44 // Cavern Decorations --------------------------------------------------------- -actor ChexCavernColumn : TallRedColumn 32 +actor ChexCavernColumn : TallRedColumn { - game Chex height 128 } -actor ChexCavernStalagmite : TallGreenColumn 30 +actor ChexCavernStalagmite : TallGreenColumn { - game Chex height 60 } // Misc. Props ---------------------------------------------------------------- -actor ChexChemicalBurner : EvilEye 41 +actor ChexChemicalBurner : EvilEye { - game Chex height 25 } -actor ChexChemicalFlask : Candlestick 34 +actor ChexChemicalFlask : Candlestick { - game Chex renderstyle translucent alpha 0.75 } -actor ChexFlagOnPole : SkullColumn 37 +actor ChexFlagOnPole : SkullColumn { - game Chex height 128 } -actor ChexGasTank : Candelabra 35 +actor ChexGasTank : Candelabra { - game Chex height 36 } -actor ChexLightColumn : ShortBlueTorch 55 +actor ChexLightColumn : ShortBlueTorch { - game Chex height 86 } -actor ChexMineCart : ShortRedColumn 33 +actor ChexMineCart : ShortRedColumn { - game Chex height 30 } diff --git a/wadsrc/static/actors/chex/chexitems.txt b/wadsrc/static/actors/chex/chexitems.txt index bbdc68dea..431728e07 100644 --- a/wadsrc/static/actors/chex/chexitems.txt +++ b/wadsrc/static/actors/chex/chexitems.txt @@ -3,67 +3,57 @@ // Health --------------------------------------------------------------------- -actor GlassOfWater : HealthBonus 2014 +actor GlassOfWater : HealthBonus { - game Chex inventory.pickupmessage "$GOTWATER" } -actor BowlOfFruit : Stimpack 2011 +actor BowlOfFruit : Stimpack { - game Chex inventory.pickupmessage "$GOTFRUIT" } -actor BowlOfVegetables : Medikit 2012 +actor BowlOfVegetables : Medikit { - game Chex inventory.pickupmessage "$GOTVEGETABLES" health.lowmessage 25, "$GOTVEGETABLESNEED" } -actor SuperchargeBreakfast : Soulsphere 2013 +actor SuperchargeBreakfast : Soulsphere { - game Chex inventory.pickupmessage "$GOTBREAKFAST" } // Armor ---------------------------------------------------------------------- -actor SlimeRepellent : ArmorBonus 2015 +actor SlimeRepellent : ArmorBonus { - game Chex inventory.pickupmessage "$GOTREPELLENT" } -actor ChexArmor : GreenArmor 2018 +actor ChexArmor : GreenArmor { - game Chex inventory.pickupmessage "$GOTCHEXARMOR" } -actor SuperChexArmor : BlueArmor 2019 +actor SuperChexArmor : BlueArmor { - game Chex inventory.pickupmessage "$GOTSUPERCHEXARMOR" } // Powerups =================================================================== -actor ComputerAreaMap : Allmap 2026 +actor ComputerAreaMap : Allmap { - game Chex inventory.pickupmessage "$GOTCHEXMAP" } -actor SlimeProofSuit : RadSuit 2025 +actor SlimeProofSuit : RadSuit { - game Chex inventory.pickupmessage "$GOTSLIMESUIT" } -actor Zorchpack : Backpack 8 +actor Zorchpack : Backpack { - game Chex inventory.pickupmessage "$GOTZORCHPACK" } diff --git a/wadsrc/static/actors/chex/chexkeys.txt b/wadsrc/static/actors/chex/chexkeys.txt index 60c9ce54e..0d5156392 100644 --- a/wadsrc/static/actors/chex/chexkeys.txt +++ b/wadsrc/static/actors/chex/chexkeys.txt @@ -1,19 +1,16 @@ // These are merely renames of the Doom cards -actor ChexBlueCard : BlueCard 5 +actor ChexBlueCard : BlueCard { - Game Chex inventory.pickupmessage "$GOTCBLUEKEY" } -actor ChexYellowCard : YellowCard 6 +actor ChexYellowCard : YellowCard { - Game Chex inventory.pickupmessage "$GOTCYELLOWKEY" } -actor ChexRedCard : RedCard 13 +actor ChexRedCard : RedCard { - Game Chex inventory.pickupmessage "$GOTCREDKEY" } diff --git a/wadsrc/static/actors/chex/chexmonsters.txt b/wadsrc/static/actors/chex/chexmonsters.txt index 3941e8eb9..0ee3c34c5 100644 --- a/wadsrc/static/actors/chex/chexmonsters.txt +++ b/wadsrc/static/actors/chex/chexmonsters.txt @@ -5,9 +5,8 @@ // //=========================================================================== -actor FlemoidusCommonus : ZombieMan 3004 +actor FlemoidusCommonus : ZombieMan { - Game Chex DropItem "" Obituary "$OB_COMMONUS" States @@ -25,9 +24,8 @@ actor FlemoidusCommonus : ZombieMan 3004 // //=========================================================================== -actor FlemoidusBipedicus : ShotgunGuy 9 +actor FlemoidusBipedicus : ShotgunGuy { - Game Chex DropItem "" Obituary "$OB_BIPEDICUS" States @@ -45,9 +43,8 @@ actor FlemoidusBipedicus : ShotgunGuy 9 // //=========================================================================== -actor ArmoredFlemoidusBipedicus : DoomImp 3001 +actor ArmoredFlemoidusBipedicus : DoomImp { - Game Chex Obituary "$OB_BIPEDICUS2" HitObituary "$OB_BIPEDICUS2" } @@ -58,9 +55,8 @@ actor ArmoredFlemoidusBipedicus : DoomImp 3001 // //=========================================================================== -actor FlemoidusCycloptisCommonus : Demon 3002 +actor FlemoidusCycloptisCommonus : Demon { - Game Chex Obituary "$OB_CYCLOPTIS" } @@ -70,9 +66,8 @@ actor FlemoidusCycloptisCommonus : Demon 3002 // //=========================================================================== -actor Flembrane : BaronOfHell 3003 +actor Flembrane : BaronOfHell { - Game Chex radius 44 height 100 speed 0 @@ -88,8 +83,7 @@ actor Flembrane : BaronOfHell 3003 //=========================================================================== -actor ChexSoul : LostSoul 3006 +actor ChexSoul : LostSoul { - Game Chex height 0 } diff --git a/wadsrc/static/actors/chex/chexweapons.txt b/wadsrc/static/actors/chex/chexweapons.txt index 96d8b4c4b..755e7ad45 100644 --- a/wadsrc/static/actors/chex/chexweapons.txt +++ b/wadsrc/static/actors/chex/chexweapons.txt @@ -2,14 +2,12 @@ actor Bootspoon : Fist { - game Chex obituary "$OB_MPSPOON" Tag "$TAG_SPOON" } -actor SuperBootspork : Chainsaw 2005 +actor SuperBootspork : Chainsaw { - game Chex obituary "$OB_MPBOOTSPORK" Inventory.PickupMessage "$GOTSUPERBOOTSPORK" Tag "$TAG_SPORK" @@ -17,7 +15,6 @@ actor SuperBootspork : Chainsaw 2005 actor MiniZorcher : Pistol { - game Chex obituary "$OB_MPZORCH" inventory.pickupmessage "$GOTMINIZORCHER" Tag "$TAG_MINIZORCHER" @@ -28,33 +25,29 @@ actor MiniZorcher : Pistol } } -actor LargeZorcher : Shotgun 2001 +actor LargeZorcher : Shotgun { - game Chex obituary "$OB_MPZORCH" inventory.pickupmessage "$GOTLARGEZORCHER" Tag "$TAG_LARGEZORCHER" } -actor SuperLargeZorcher : SuperShotgun 82 +actor SuperLargeZorcher : SuperShotgun { - game Chex obituary "$OB_MPMEGAZORCH" inventory.pickupmessage "$GOTSUPERLARGEZORCHER" Tag "$TAG_SUPERLARGEZORCHER" } -actor RapidZorcher : Chaingun 2002 +actor RapidZorcher : Chaingun { - game Chex obituary "$OB_MPRAPIDZORCH" inventory.pickupmessage "$GOTRAPIDZORCHER" Tag "$TAG_RAPIDZORCHER" } -actor ZorchPropulsor : RocketLauncher 2003 +actor ZorchPropulsor : RocketLauncher { - game Chex obituary "" inventory.pickupmessage "$GOTZORCHPROPULSOR" Tag "$TAG_ZORCHPROPULSOR" @@ -77,9 +70,8 @@ actor PropulsorMissile : Rocket Alpha 0.75 } -actor PhasingZorcher : PlasmaRifle 2004 +actor PhasingZorcher : PlasmaRifle { - game Chex obituary "" inventory.pickupmessage "$GOTPHASINGZORCHER" Tag "$TAG_PHASINGZORCHER" @@ -107,9 +99,8 @@ actor PhaseZorchMissile : PlasmaBall Alpha 0.75 } -actor LAZDevice : BFG9000 2006 +actor LAZDevice : BFG9000 { - game Chex obituary "" inventory.pickupmessage "$GOTLAZDEVICE" Tag "$TAG_LAZDEVICE" diff --git a/wadsrc/static/actors/doom/arachnotron.txt b/wadsrc/static/actors/doom/arachnotron.txt index 9348339d5..16e4ebe55 100644 --- a/wadsrc/static/actors/doom/arachnotron.txt +++ b/wadsrc/static/actors/doom/arachnotron.txt @@ -3,10 +3,8 @@ // Arachnotron // //=========================================================================== -ACTOR Arachnotron 68 +ACTOR Arachnotron { - Game Doom - SpawnID 6 Health 500 Radius 64 Height 64 @@ -63,8 +61,6 @@ ACTOR Arachnotron 68 //=========================================================================== ACTOR ArachnotronPlasma { - Game Doom - SpawnID 129 Radius 13 Height 8 Speed 25 diff --git a/wadsrc/static/actors/doom/archvile.txt b/wadsrc/static/actors/doom/archvile.txt index 96503d717..29108cda2 100644 --- a/wadsrc/static/actors/doom/archvile.txt +++ b/wadsrc/static/actors/doom/archvile.txt @@ -4,10 +4,8 @@ // //=========================================================================== -ACTOR Archvile 64 +ACTOR Archvile { - Game Doom - SpawnID 111 Health 700 Radius 20 Height 56 @@ -67,8 +65,6 @@ ACTOR Archvile 64 ACTOR ArchvileFire { - Game Doom - SpawnID 98 +NOBLOCKMAP +NOGRAVITY RenderStyle Add Alpha 1 diff --git a/wadsrc/static/actors/doom/bossbrain.txt b/wadsrc/static/actors/doom/bossbrain.txt index 492cb1f80..999f2da62 100644 --- a/wadsrc/static/actors/doom/bossbrain.txt +++ b/wadsrc/static/actors/doom/bossbrain.txt @@ -5,9 +5,8 @@ // //=========================================================================== -ACTOR BossBrain 88 +ACTOR BossBrain { - Game Doom Health 250 Mass 10000000 PainChance 255 @@ -43,9 +42,8 @@ ACTOR BossBrain 88 // //=========================================================================== -ACTOR BossEye 89 +ACTOR BossEye { - Game Doom Height 32 +NOBLOCKMAP +NOSECTOR @@ -67,9 +65,8 @@ ACTOR BossEye 89 // //=========================================================================== -ACTOR BossTarget : SpecialSpot 87 +ACTOR BossTarget : SpecialSpot { - Game Doom Height 32 +NOBLOCKMAP +NOSECTOR diff --git a/wadsrc/static/actors/doom/bruiser.txt b/wadsrc/static/actors/doom/bruiser.txt index 3f461f585..0bc4a7f96 100644 --- a/wadsrc/static/actors/doom/bruiser.txt +++ b/wadsrc/static/actors/doom/bruiser.txt @@ -3,10 +3,8 @@ // Baron of Hell // //=========================================================================== -ACTOR BaronOfHell 3003 +ACTOR BaronOfHell { - Game Doom - SpawnID 3 Health 1000 Radius 24 Height 64 @@ -59,10 +57,8 @@ ACTOR BaronOfHell 3003 // Hell Knight // //=========================================================================== -ACTOR HellKnight : BaronOfHell 69 +ACTOR HellKnight : BaronOfHell { - Game Doom - SpawnID 113 Health 500 -BOSSDEATH SeeSound "knight/sight" @@ -110,8 +106,6 @@ ACTOR HellKnight : BaronOfHell 69 //=========================================================================== ACTOR BaronBall { - Game Doom - SpawnID 154 Radius 6 Height 16 Speed 15 diff --git a/wadsrc/static/actors/doom/cacodemon.txt b/wadsrc/static/actors/doom/cacodemon.txt index 89761e014..bf7b8ddf2 100644 --- a/wadsrc/static/actors/doom/cacodemon.txt +++ b/wadsrc/static/actors/doom/cacodemon.txt @@ -3,10 +3,8 @@ // Cacodemon // //=========================================================================== -ACTOR Cacodemon 3005 +ACTOR Cacodemon { - Game Doom - SpawnID 19 Health 400 Radius 31 Height 56 @@ -61,8 +59,6 @@ ACTOR Cacodemon 3005 //=========================================================================== ACTOR CacodemonBall { - Game Doom - SpawnID 126 Radius 6 Height 8 Speed 10 diff --git a/wadsrc/static/actors/doom/cyberdemon.txt b/wadsrc/static/actors/doom/cyberdemon.txt index 60bcbcc4b..80c1ba2da 100644 --- a/wadsrc/static/actors/doom/cyberdemon.txt +++ b/wadsrc/static/actors/doom/cyberdemon.txt @@ -4,10 +4,8 @@ // Cyberdemon // //=========================================================================== -ACTOR Cyberdemon 16 +ACTOR Cyberdemon { - Game Doom - SpawnID 114 Health 4000 Radius 40 Height 110 diff --git a/wadsrc/static/actors/doom/deadthings.txt b/wadsrc/static/actors/doom/deadthings.txt index b8faa2288..5b9835e79 100644 --- a/wadsrc/static/actors/doom/deadthings.txt +++ b/wadsrc/static/actors/doom/deadthings.txt @@ -1,9 +1,7 @@ // Gibbed marine ----------------------------------------------------------- -actor GibbedMarine 10 +actor GibbedMarine { - Game Doom - SpawnID 145 States { Spawn: @@ -14,16 +12,14 @@ actor GibbedMarine 10 // Gibbed marine (extra copy) ---------------------------------------------- -actor GibbedMarineExtra : GibbedMarine 12 +actor GibbedMarineExtra : GibbedMarine { - Game Doom } // Dead marine ------------------------------------------------------------- -actor DeadMarine 15 +actor DeadMarine { - Game Doom States { Spawn: @@ -39,10 +35,9 @@ actor DeadMarine 15 // Dead zombie man --------------------------------------------------------- -actor DeadZombieMan : ZombieMan 18 +actor DeadZombieMan : ZombieMan { Skip_Super - Game Doom DropItem None States { @@ -53,10 +48,9 @@ actor DeadZombieMan : ZombieMan 18 // Dead shotgun guy -------------------------------------------------------- -actor DeadShotgunGuy : ShotgunGuy 19 +actor DeadShotgunGuy : ShotgunGuy { Skip_Super - Game Doom DropItem None States { @@ -67,10 +61,9 @@ actor DeadShotgunGuy : ShotgunGuy 19 // Dead imp ---------------------------------------------------------------- -actor DeadDoomImp : DoomImp 20 +actor DeadDoomImp : DoomImp { Skip_Super - Game Doom States { Spawn: @@ -80,10 +73,9 @@ actor DeadDoomImp : DoomImp 20 // Dead demon -------------------------------------------------------------- -actor DeadDemon : Demon 21 +actor DeadDemon : Demon { Skip_Super - Game Doom States { Spawn: @@ -93,10 +85,9 @@ actor DeadDemon : Demon 21 // Dead cacodemon ---------------------------------------------------------- -actor DeadCacodemon : Cacodemon 22 +actor DeadCacodemon : Cacodemon { Skip_Super - Game Doom States { Spawn: @@ -112,10 +103,9 @@ actor DeadCacodemon : Cacodemon 22 * a holdover from that.) */ -actor DeadLostSoul : LostSoul 23 +actor DeadLostSoul : LostSoul { Skip_Super - Game Doom States { Spawn: diff --git a/wadsrc/static/actors/doom/demon.txt b/wadsrc/static/actors/doom/demon.txt index ecd6fa8a6..a1ff8ccfb 100644 --- a/wadsrc/static/actors/doom/demon.txt +++ b/wadsrc/static/actors/doom/demon.txt @@ -3,10 +3,8 @@ // Pink Demon // //=========================================================================== -ACTOR Demon 3002 +ACTOR Demon { - Game Doom - SpawnID 8 Health 150 PainChance 180 Speed 10 @@ -57,10 +55,8 @@ ACTOR Demon 3002 // Spectre // //=========================================================================== -ACTOR Spectre : Demon 58 +ACTOR Spectre : Demon { - Game Doom - SpawnID 9 +SHADOW RenderStyle OptFuzzy Alpha 0.5 diff --git a/wadsrc/static/actors/doom/doomammo.txt b/wadsrc/static/actors/doom/doomammo.txt index 78ddc0af9..8e137b3a8 100644 --- a/wadsrc/static/actors/doom/doomammo.txt +++ b/wadsrc/static/actors/doom/doomammo.txt @@ -1,9 +1,7 @@ // Clip -------------------------------------------------------------------- -ACTOR Clip : Ammo 2007 +ACTOR Clip : Ammo { - Game Doom - SpawnID 11 Inventory.PickupMessage "$GOTCLIP" Inventory.Amount 10 Inventory.MaxAmount 200 @@ -20,10 +18,8 @@ ACTOR Clip : Ammo 2007 // Clip box ---------------------------------------------------------------- -ACTOR ClipBox : Clip 2048 +ACTOR ClipBox : Clip { - Game Doom - SpawnID 139 Inventory.PickupMessage "$GOTCLIPBOX" Inventory.Amount 50 States @@ -36,10 +32,8 @@ ACTOR ClipBox : Clip 2048 // Rocket ------------------------------------------------------------------ -ACTOR RocketAmmo : Ammo 2010 +ACTOR RocketAmmo : Ammo { - Game Doom - SpawnID 140 Inventory.PickupMessage "$GOTROCKET" Inventory.Amount 1 Inventory.MaxAmount 50 @@ -56,10 +50,8 @@ ACTOR RocketAmmo : Ammo 2010 // Rocket box -------------------------------------------------------------- -ACTOR RocketBox : RocketAmmo 2046 +ACTOR RocketBox : RocketAmmo { - Game Doom - SpawnID 141 Inventory.PickupMessage "$GOTROCKBOX" Inventory.Amount 5 States @@ -72,10 +64,8 @@ ACTOR RocketBox : RocketAmmo 2046 // Cell -------------------------------------------------------------------- -ACTOR Cell : Ammo 2047 +ACTOR Cell : Ammo { - Game Doom - SpawnID 75 Inventory.PickupMessage "$GOTCELL" Inventory.Amount 20 Inventory.MaxAmount 300 @@ -92,10 +82,8 @@ ACTOR Cell : Ammo 2047 // Cell pack --------------------------------------------------------------- -ACTOR CellPack : Cell 17 +ACTOR CellPack : Cell { - Game Doom - SpawnID 142 Inventory.PickupMessage "$GOTCELLBOX" Inventory.Amount 100 States @@ -108,10 +96,8 @@ ACTOR CellPack : Cell 17 // Shells ------------------------------------------------------------------ -ACTOR Shell : Ammo 2008 +ACTOR Shell : Ammo { - Game Doom - SpawnID 12 Inventory.PickupMessage "$GOTSHELLS" Inventory.Amount 4 Inventory.MaxAmount 50 @@ -128,10 +114,8 @@ ACTOR Shell : Ammo 2008 // Shell box --------------------------------------------------------------- -ACTOR ShellBox : Shell 2049 +ACTOR ShellBox : Shell { - Game Doom - SpawnID 143 Inventory.PickupMessage "$GOTSHELLBOX" Inventory.Amount 20 States @@ -144,10 +128,8 @@ ACTOR ShellBox : Shell 2049 // Backpack --------------------------------------------------------------- -ACTOR Backpack : BackpackItem 8 +ACTOR Backpack : BackpackItem { - Game Doom - SpawnID 144 Height 26 Inventory.PickupMessage "$GOTBACKPACK" States diff --git a/wadsrc/static/actors/doom/doomarmor.txt b/wadsrc/static/actors/doom/doomarmor.txt index 486fc0611..3b518bab8 100644 --- a/wadsrc/static/actors/doom/doomarmor.txt +++ b/wadsrc/static/actors/doom/doomarmor.txt @@ -1,10 +1,8 @@ // Armor bonus -------------------------------------------------------------- -Actor ArmorBonus : BasicArmorBonus 2015 +Actor ArmorBonus : BasicArmorBonus { - Game Doom - SpawnID 22 Radius 20 Height 16 Inventory.Pickupmessage "$GOTARMBONUS" @@ -24,10 +22,8 @@ Actor ArmorBonus : BasicArmorBonus 2015 // Green armor -------------------------------------------------------------- -Actor GreenArmor : BasicArmorPickup 2018 +Actor GreenArmor : BasicArmorPickup { - Game Doom - SpawnID 68 Radius 20 Height 16 Inventory.Pickupmessage "$GOTARMOR" @@ -45,10 +41,8 @@ Actor GreenArmor : BasicArmorPickup 2018 // Blue armor --------------------------------------------------------------- -Actor BlueArmor : BasicArmorPickup 2019 +Actor BlueArmor : BasicArmorPickup { - Game Doom - SpawnID 69 Radius 20 Height 16 Inventory.Pickupmessage "$GOTMEGA" diff --git a/wadsrc/static/actors/doom/doomartifacts.txt b/wadsrc/static/actors/doom/doomartifacts.txt index fb822f30f..8702155e8 100644 --- a/wadsrc/static/actors/doom/doomartifacts.txt +++ b/wadsrc/static/actors/doom/doomartifacts.txt @@ -1,9 +1,7 @@ // Invulnerability Sphere --------------------------------------------------- -ACTOR InvulnerabilitySphere : PowerupGiver 2022 +ACTOR InvulnerabilitySphere : PowerupGiver { - Game Doom - SpawnID 133 +COUNTITEM +INVENTORY.AUTOACTIVATE +INVENTORY.ALWAYSPICKUP @@ -22,10 +20,8 @@ ACTOR InvulnerabilitySphere : PowerupGiver 2022 // Soulsphere -------------------------------------------------------------- -ACTOR Soulsphere : Health 2013 +ACTOR Soulsphere : Health { - Game Doom - SpawnID 25 +COUNTITEM +INVENTORY.AUTOACTIVATE +INVENTORY.ALWAYSPICKUP @@ -58,10 +54,8 @@ actor BlueArmorForMegasphere : BlueArmor Armor.SaveAmount 200 } -ACTOR Megasphere : CustomInventory 83 +ACTOR Megasphere : CustomInventory { - Game Doom - SpawnID 132 +COUNTITEM +INVENTORY.ALWAYSPICKUP Inventory.PickupMessage "$GOTMSPHERE" @@ -80,10 +74,8 @@ ACTOR Megasphere : CustomInventory 83 // Invisibility ------------------------------------------------------------- -ACTOR BlurSphere : PowerupGiver 2024 +ACTOR BlurSphere : PowerupGiver { - Game Doom - SpawnID 135 +COUNTITEM +VISIBILITYPULSE +INVENTORY.AUTOACTIVATE @@ -103,10 +95,8 @@ ACTOR BlurSphere : PowerupGiver 2024 // Radiation suit (aka iron feet) ------------------------------------------- -ACTOR RadSuit : PowerupGiver 2025 +ACTOR RadSuit : PowerupGiver { - Game Doom - SpawnID 136 Height 46 +INVENTORY.AUTOACTIVATE +INVENTORY.ALWAYSPICKUP @@ -123,10 +113,8 @@ ACTOR RadSuit : PowerupGiver 2025 // infrared ----------------------------------------------------------------- -ACTOR Infrared : PowerupGiver 2045 +ACTOR Infrared : PowerupGiver { - Game Doom - SpawnID 138 +COUNTITEM +INVENTORY.AUTOACTIVATE +INVENTORY.ALWAYSPICKUP @@ -144,10 +132,8 @@ ACTOR Infrared : PowerupGiver 2045 // Allmap ------------------------------------------------------------------- -ACTOR Allmap : MapRevealer 2026 +ACTOR Allmap : MapRevealer { - Game Doom - SpawnID 137 +COUNTITEM +INVENTORY.FANCYPICKUPSOUND +INVENTORY.ALWAYSPICKUP @@ -164,10 +150,8 @@ ACTOR Allmap : MapRevealer 2026 // Berserk ------------------------------------------------------------------ -ACTOR Berserk : CustomInventory 2023 +ACTOR Berserk : CustomInventory { - Game Doom - SpawnID 134 +COUNTITEM +INVENTORY.ALWAYSPICKUP Inventory.PickupMessage "$GOTBERSERK" diff --git a/wadsrc/static/actors/doom/doomdecorations.txt b/wadsrc/static/actors/doom/doomdecorations.txt index 9d2d230eb..1a5688b58 100644 --- a/wadsrc/static/actors/doom/doomdecorations.txt +++ b/wadsrc/static/actors/doom/doomdecorations.txt @@ -1,9 +1,8 @@ // Tech lamp --------------------------------------------------------------- -ACTOR TechLamp 85 +ACTOR TechLamp { - Game Doom Radius 16 Height 80 ProjectilePassHeight -16 @@ -18,9 +17,8 @@ ACTOR TechLamp 85 // Tech lamp 2 ------------------------------------------------------------- -ACTOR TechLamp2 86 +ACTOR TechLamp2 { - Game Doom Radius 16 Height 60 ProjectilePassHeight -16 @@ -35,9 +33,8 @@ ACTOR TechLamp2 86 // Column ------------------------------------------------------------------ -ACTOR Column 2028 +ACTOR Column { - Game Doom Radius 16 Height 48 ProjectilePassHeight -16 @@ -52,9 +49,8 @@ ACTOR Column 2028 // Tall green column ------------------------------------------------------- -ACTOR TallGreenColumn 30 +ACTOR TallGreenColumn { - Game Doom Radius 16 Height 52 ProjectilePassHeight -16 @@ -69,9 +65,8 @@ ACTOR TallGreenColumn 30 // Short green column ------------------------------------------------------ -ACTOR ShortGreenColumn 31 +ACTOR ShortGreenColumn { - Game Doom Radius 16 Height 40 ProjectilePassHeight -16 @@ -86,9 +81,8 @@ ACTOR ShortGreenColumn 31 // Tall red column --------------------------------------------------------- -ACTOR TallRedColumn 32 +ACTOR TallRedColumn { - Game Doom Radius 16 Height 52 ProjectilePassHeight -16 @@ -103,9 +97,8 @@ ACTOR TallRedColumn 32 // Short red column -------------------------------------------------------- -ACTOR ShortRedColumn 33 +ACTOR ShortRedColumn { - Game Doom Radius 16 Height 40 ProjectilePassHeight -16 @@ -120,9 +113,8 @@ ACTOR ShortRedColumn 33 // Skull column ------------------------------------------------------------ -ACTOR SkullColumn 37 +ACTOR SkullColumn { - Game Doom Radius 16 Height 40 ProjectilePassHeight -16 @@ -137,9 +129,8 @@ ACTOR SkullColumn 37 // Heart column ------------------------------------------------------------ -ACTOR HeartColumn 36 +ACTOR HeartColumn { - Game Doom Radius 16 Height 40 ProjectilePassHeight -16 @@ -154,9 +145,8 @@ ACTOR HeartColumn 36 // Evil eye ---------------------------------------------------------------- -ACTOR EvilEye 41 +ACTOR EvilEye { - Game Doom Radius 16 Height 54 ProjectilePassHeight -16 @@ -171,9 +161,8 @@ ACTOR EvilEye 41 // Floating skull ---------------------------------------------------------- -ACTOR FloatingSkull 42 +ACTOR FloatingSkull { - Game Doom Radius 16 Height 26 ProjectilePassHeight -16 @@ -188,9 +177,8 @@ ACTOR FloatingSkull 42 // Torch tree -------------------------------------------------------------- -ACTOR TorchTree 43 +ACTOR TorchTree { - Game Doom Radius 16 Height 56 ProjectilePassHeight -16 @@ -205,9 +193,8 @@ ACTOR TorchTree 43 // Blue torch -------------------------------------------------------------- -ACTOR BlueTorch 44 +ACTOR BlueTorch { - Game Doom Radius 16 Height 68 ProjectilePassHeight -16 @@ -222,9 +209,8 @@ ACTOR BlueTorch 44 // Green torch ------------------------------------------------------------- -ACTOR GreenTorch 45 +ACTOR GreenTorch { - Game Doom Radius 16 Height 68 ProjectilePassHeight -16 @@ -239,9 +225,8 @@ ACTOR GreenTorch 45 // Red torch --------------------------------------------------------------- -ACTOR RedTorch 46 +ACTOR RedTorch { - Game Doom Radius 16 Height 68 ProjectilePassHeight -16 @@ -256,9 +241,8 @@ ACTOR RedTorch 46 // Short blue torch -------------------------------------------------------- -ACTOR ShortBlueTorch 55 +ACTOR ShortBlueTorch { - Game Doom Radius 16 Height 37 ProjectilePassHeight -16 @@ -273,9 +257,8 @@ ACTOR ShortBlueTorch 55 // Short green torch ------------------------------------------------------- -ACTOR ShortGreenTorch 56 +ACTOR ShortGreenTorch { - Game Doom Radius 16 Height 37 ProjectilePassHeight -16 @@ -290,9 +273,8 @@ ACTOR ShortGreenTorch 56 // Short red torch --------------------------------------------------------- -ACTOR ShortRedTorch 57 +ACTOR ShortRedTorch { - Game Doom Radius 16 Height 37 ProjectilePassHeight -16 @@ -307,9 +289,8 @@ ACTOR ShortRedTorch 57 // Stalagtite -------------------------------------------------------------- -ACTOR Stalagtite 47 +ACTOR Stalagtite { - Game Doom Radius 16 Height 40 ProjectilePassHeight -16 @@ -324,9 +305,8 @@ ACTOR Stalagtite 47 // Tech pillar ------------------------------------------------------------- -ACTOR TechPillar 48 +ACTOR TechPillar { - Game Doom Radius 16 Height 128 ProjectilePassHeight -16 @@ -341,9 +321,8 @@ ACTOR TechPillar 48 // Candle stick ------------------------------------------------------------ -ACTOR Candlestick 34 +ACTOR Candlestick { - Game Doom Radius 20 Height 14 ProjectilePassHeight -16 @@ -357,9 +336,8 @@ ACTOR Candlestick 34 // Candelabra -------------------------------------------------------------- -ACTOR Candelabra 35 +ACTOR Candelabra { - Game Doom Radius 16 Height 60 ProjectilePassHeight -16 @@ -374,9 +352,8 @@ ACTOR Candelabra 35 // Bloody twitch ----------------------------------------------------------- -ACTOR BloodyTwitch 49 +ACTOR BloodyTwitch { - Game Doom Radius 16 Height 68 +SOLID @@ -395,9 +372,8 @@ ACTOR BloodyTwitch 49 // Meat 2 ------------------------------------------------------------------ -ACTOR Meat2 50 +ACTOR Meat2 { - Game Doom Radius 16 Height 84 +SOLID @@ -413,9 +389,8 @@ ACTOR Meat2 50 // Meat 3 ------------------------------------------------------------------ -ACTOR Meat3 51 +ACTOR Meat3 { - Game Doom Radius 16 Height 84 +SOLID @@ -431,9 +406,8 @@ ACTOR Meat3 51 // Meat 4 ------------------------------------------------------------------ -ACTOR Meat4 52 +ACTOR Meat4 { - Game Doom Radius 16 Height 68 +SOLID @@ -449,9 +423,8 @@ ACTOR Meat4 52 // Meat 5 ------------------------------------------------------------------ -ACTOR Meat5 53 +ACTOR Meat5 { - Game Doom Radius 16 Height 52 +SOLID @@ -467,48 +440,42 @@ ACTOR Meat5 53 // Nonsolid meat ----------------------------------------------------------- -ACTOR NonsolidMeat2 : Meat2 59 +ACTOR NonsolidMeat2 : Meat2 { - Game Doom -SOLID Radius 20 } -ACTOR NonsolidMeat3 : Meat3 61 +ACTOR NonsolidMeat3 : Meat3 { - Game Doom -SOLID Radius 20 } -ACTOR NonsolidMeat4 : Meat4 60 +ACTOR NonsolidMeat4 : Meat4 { - Game Doom -SOLID Radius 20 } -ACTOR NonsolidMeat5 : Meat5 62 +ACTOR NonsolidMeat5 : Meat5 { - Game Doom -SOLID Radius 20 } // Nonsolid bloody twitch -------------------------------------------------- -ACTOR NonsolidTwitch : BloodyTwitch 63 +ACTOR NonsolidTwitch : BloodyTwitch { - Game Doom -SOLID Radius 20 } // Head on a stick --------------------------------------------------------- -ACTOR HeadOnAStick 27 +ACTOR HeadOnAStick { - Game Doom Radius 16 Height 56 ProjectilePassHeight -16 @@ -523,9 +490,8 @@ ACTOR HeadOnAStick 27 // Heads (plural!) on a stick ---------------------------------------------- -ACTOR HeadsOnAStick 28 +ACTOR HeadsOnAStick { - Game Doom Radius 16 Height 64 ProjectilePassHeight -16 @@ -540,9 +506,8 @@ ACTOR HeadsOnAStick 28 // Head candles ------------------------------------------------------------ -ACTOR HeadCandles 29 +ACTOR HeadCandles { - Game Doom Radius 16 Height 42 ProjectilePassHeight -16 @@ -557,9 +522,8 @@ ACTOR HeadCandles 29 // Dead on a stick --------------------------------------------------------- -ACTOR DeadStick 25 +ACTOR DeadStick { - Game Doom Radius 16 Height 64 ProjectilePassHeight -16 @@ -574,9 +538,8 @@ ACTOR DeadStick 25 // Still alive on a stick -------------------------------------------------- -ACTOR LiveStick 26 +ACTOR LiveStick { - Game Doom Radius 16 Height 64 ProjectilePassHeight -16 @@ -592,9 +555,8 @@ ACTOR LiveStick 26 // Big tree ---------------------------------------------------------------- -ACTOR BigTree 54 +ACTOR BigTree { - Game Doom Radius 32 Height 108 ProjectilePassHeight -16 @@ -609,10 +571,8 @@ ACTOR BigTree 54 // Burning barrel ---------------------------------------------------------- -ACTOR BurningBarrel 70 +ACTOR BurningBarrel { - Game Doom - SpawnID 149 Radius 16 Height 32 ProjectilePassHeight -16 @@ -627,9 +587,8 @@ ACTOR BurningBarrel 70 // Hanging with no guts ---------------------------------------------------- -ACTOR HangNoGuts 73 +ACTOR HangNoGuts { - Game Doom Radius 16 Height 88 +SOLID @@ -645,9 +604,8 @@ ACTOR HangNoGuts 73 // Hanging from bottom with no brain --------------------------------------- -ACTOR HangBNoBrain 74 +ACTOR HangBNoBrain { - Game Doom Radius 16 Height 88 +SOLID @@ -663,9 +621,8 @@ ACTOR HangBNoBrain 74 // Hanging from top, looking down ------------------------------------------ -ACTOR HangTLookingDown 75 +ACTOR HangTLookingDown { - Game Doom Radius 16 Height 64 +SOLID @@ -681,9 +638,8 @@ ACTOR HangTLookingDown 75 // Hanging from top, looking up -------------------------------------------- -ACTOR HangTLookingUp 77 +ACTOR HangTLookingUp { - Game Doom Radius 16 Height 64 +SOLID @@ -699,9 +655,8 @@ ACTOR HangTLookingUp 77 // Hanging from top, skully ------------------------------------------------ -ACTOR HangTSkull 76 +ACTOR HangTSkull { - Game Doom Radius 16 Height 64 +SOLID @@ -717,9 +672,8 @@ ACTOR HangTSkull 76 // Hanging from top without a brain ---------------------------------------- -ACTOR HangTNoBrain 78 +ACTOR HangTNoBrain { - Game Doom Radius 16 Height 64 +SOLID @@ -735,10 +689,8 @@ ACTOR HangTNoBrain 78 // Colon gibs -------------------------------------------------------------- -ACTOR ColonGibs 79 +ACTOR ColonGibs { - Game Doom - SpawnID 147 Radius 20 Height 4 +NOBLOCKMAP @@ -753,10 +705,8 @@ ACTOR ColonGibs 79 // Small pool o' blood ----------------------------------------------------- -ACTOR SmallBloodPool 80 +ACTOR SmallBloodPool { - Game Doom - SpawnID 148 Radius 20 Height 1 +NOBLOCKMAP @@ -771,10 +721,8 @@ ACTOR SmallBloodPool 80 // brain stem lying on the ground ------------------------------------------ -ACTOR BrainStem 81 +ACTOR BrainStem { - Game Doom - SpawnID 150 Radius 20 Height 4 +NOBLOCKMAP @@ -790,9 +738,8 @@ ACTOR BrainStem 81 // Grey stalagmite (unused Doom sprite, definition taken from Skulltag ----- -ACTOR Stalagmite 5050 +ACTOR Stalagmite { - Game Doom Radius 16 Height 48 +SOLID diff --git a/wadsrc/static/actors/doom/doomhealth.txt b/wadsrc/static/actors/doom/doomhealth.txt index dce00ace9..77fc6eaeb 100644 --- a/wadsrc/static/actors/doom/doomhealth.txt +++ b/wadsrc/static/actors/doom/doomhealth.txt @@ -1,9 +1,7 @@ // Health bonus ------------------------------------------------------------- -ACTOR HealthBonus : Health 2014 +ACTOR HealthBonus : Health { - Game Doom - SpawnID 152 +COUNTITEM +INVENTORY.ALWAYSPICKUP Inventory.Amount 1 @@ -19,10 +17,8 @@ ACTOR HealthBonus : Health 2014 // Stimpack ----------------------------------------------------------------- -ACTOR Stimpack : Health 2011 +ACTOR Stimpack : Health { - Game Doom - SpawnID 23 Inventory.Amount 10 Inventory.PickupMessage "$GOTSTIM" States @@ -35,10 +31,8 @@ ACTOR Stimpack : Health 2011 // Medikit ----------------------------------------------------------------- -ACTOR Medikit : Health 2012 +ACTOR Medikit : Health { - Game Doom - SpawnID 24 Inventory.Amount 25 Inventory.PickupMessage "$GOTMEDIKIT" Health.LowMessage 25, "$GOTMEDINEED" diff --git a/wadsrc/static/actors/doom/doomimp.txt b/wadsrc/static/actors/doom/doomimp.txt index d91227484..938663e35 100644 --- a/wadsrc/static/actors/doom/doomimp.txt +++ b/wadsrc/static/actors/doom/doomimp.txt @@ -3,10 +3,8 @@ // Imp // //=========================================================================== -ACTOR DoomImp 3001 +ACTOR DoomImp { - Game Doom - SpawnID 5 Health 60 Radius 20 Height 56 @@ -66,8 +64,6 @@ ACTOR DoomImp 3001 //=========================================================================== ACTOR DoomImpBall { - Game Doom - SpawnID 10 Radius 6 Height 8 Speed 10 diff --git a/wadsrc/static/actors/doom/doomkeys.txt b/wadsrc/static/actors/doom/doomkeys.txt index 9072582d1..5472193af 100644 --- a/wadsrc/static/actors/doom/doomkeys.txt +++ b/wadsrc/static/actors/doom/doomkeys.txt @@ -8,10 +8,8 @@ Actor DoomKey : Key // Blue key card ------------------------------------------------------------ -Actor BlueCard : DoomKey 5 +Actor BlueCard : DoomKey { - Game Doom - SpawnID 85 Inventory.Pickupmessage "$GOTBLUECARD" Inventory.Icon "STKEYS0" States @@ -25,10 +23,8 @@ Actor BlueCard : DoomKey 5 // Yellow key card ---------------------------------------------------------- -Actor YellowCard : DoomKey 6 +Actor YellowCard : DoomKey { - Game Doom - SpawnID 87 Inventory.Pickupmessage "$GOTYELWCARD" Inventory.Icon "STKEYS1" States @@ -42,10 +38,8 @@ Actor YellowCard : DoomKey 6 // Red key card ------------------------------------------------------------- -Actor RedCard : DoomKey 13 +Actor RedCard : DoomKey { - Game Doom - SpawnID 86 Inventory.Pickupmessage "$GOTREDCARD" Inventory.Icon "STKEYS2" States @@ -59,10 +53,8 @@ Actor RedCard : DoomKey 13 // Blue skull key ----------------------------------------------------------- -Actor BlueSkull : DoomKey 40 +Actor BlueSkull : DoomKey { - Game Doom - SpawnID 90 Inventory.Pickupmessage "$GOTBLUESKUL" Inventory.Icon "STKEYS3" States @@ -76,10 +68,8 @@ Actor BlueSkull : DoomKey 40 // Yellow skull key --------------------------------------------------------- -Actor YellowSkull : DoomKey 39 +Actor YellowSkull : DoomKey { - Game Doom - SpawnID 88 Inventory.Pickupmessage "$GOTYELWSKUL" Inventory.Icon "STKEYS4" States @@ -93,10 +83,8 @@ Actor YellowSkull : DoomKey 39 // Red skull key ------------------------------------------------------------ -Actor RedSkull : DoomKey 38 +Actor RedSkull : DoomKey { - Game Doom - SpawnID 89 Inventory.Pickupmessage "$GOTREDSKUL" Inventory.Icon "STKEYS5" States diff --git a/wadsrc/static/actors/doom/doommisc.txt b/wadsrc/static/actors/doom/doommisc.txt index fadab2b05..d860f855a 100644 --- a/wadsrc/static/actors/doom/doommisc.txt +++ b/wadsrc/static/actors/doom/doommisc.txt @@ -1,9 +1,7 @@ // The barrel of green goop ------------------------------------------------ -ACTOR ExplosiveBarrel 2035 +ACTOR ExplosiveBarrel { - Game Doom - SpawnID 125 Health 20 Radius 10 Height 42 @@ -37,8 +35,6 @@ ACTOR ExplosiveBarrel 2035 ACTOR BulletPuff { - Game Doom - SpawnID 131 +NOBLOCKMAP +NOGRAVITY +ALLOWPARTICLES @@ -85,9 +81,8 @@ ACTOR DoomUnusedStates // MBF Beta emulation items -Actor EvilSceptre : ScoreItem 2016 +Actor EvilSceptre : ScoreItem { - Game Doom Inventory.PickupMessage "$BETA_BONUS3" States { @@ -97,9 +92,8 @@ Actor EvilSceptre : ScoreItem 2016 } } -Actor UnholyBible : ScoreItem 2017 +Actor UnholyBible : ScoreItem { - Game Doom Inventory.PickupMessage "$BETA_BONUS4" States { diff --git a/wadsrc/static/actors/doom/doomweapons.txt b/wadsrc/static/actors/doom/doomweapons.txt index 8be33c0ca..59ce07361 100644 --- a/wadsrc/static/actors/doom/doomweapons.txt +++ b/wadsrc/static/actors/doom/doomweapons.txt @@ -17,7 +17,6 @@ ACTOR DoomWeapon : Weapon ACTOR Fist : Weapon { - Game Doom Weapon.SelectionOrder 3700 Weapon.Kickback 100 Obituary "$OB_MPFIST" @@ -52,9 +51,8 @@ ACTOR Fist : Weapon // // -------------------------------------------------------------------------- -ACTOR Pistol : DoomWeapon 5010 +ACTOR Pistol : DoomWeapon { - Game Doom Weapon.SelectionOrder 1900 Weapon.AmmoUse 1 Weapon.AmmoGive 20 @@ -97,10 +95,8 @@ ACTOR Pistol : DoomWeapon 5010 // // -------------------------------------------------------------------------- -ACTOR Chainsaw : Weapon 2005 +ACTOR Chainsaw : Weapon { - Game Doom - SpawnID 32 Weapon.Kickback 0 Weapon.SelectionOrder 2200 Weapon.UpSound "weapons/sawup" @@ -137,10 +133,8 @@ ACTOR Chainsaw : Weapon 2005 // // -------------------------------------------------------------------------- -ACTOR Shotgun : DoomWeapon 2001 +ACTOR Shotgun : DoomWeapon { - Game Doom - SpawnID 27 Weapon.SelectionOrder 1300 Weapon.AmmoUse 1 Weapon.AmmoGive 8 @@ -184,10 +178,8 @@ ACTOR Shotgun : DoomWeapon 2001 // // -------------------------------------------------------------------------- -ACTOR SuperShotgun : DoomWeapon 82 +ACTOR SuperShotgun : DoomWeapon { - Game Doom - SpawnID 33 Weapon.SelectionOrder 400 Weapon.AmmoUse 2 Weapon.AmmoGive 8 @@ -238,10 +230,8 @@ ACTOR SuperShotgun : DoomWeapon 82 // // -------------------------------------------------------------------------- -ACTOR Chaingun : DoomWeapon 2002 +ACTOR Chaingun : DoomWeapon { - Game Doom - SpawnID 28 Weapon.SelectionOrder 700 Weapon.AmmoUse 1 Weapon.AmmoGive 20 @@ -281,10 +271,8 @@ ACTOR Chaingun : DoomWeapon 2002 // // -------------------------------------------------------------------------- -ACTOR RocketLauncher : DoomWeapon 2003 +ACTOR RocketLauncher : DoomWeapon { - Game Doom - SpawnID 29 Weapon.SelectionOrder 2500 Weapon.AmmoUse 1 Weapon.AmmoGive 2 @@ -321,8 +309,6 @@ ACTOR RocketLauncher : DoomWeapon 2003 ACTOR Rocket { - Game Doom - SpawnID 127 Radius 11 Height 8 Speed 20 @@ -355,8 +341,6 @@ ACTOR Rocket ACTOR Grenade { - Game Doom - SpawnID 216 Radius 8 Height 8 Speed 25 @@ -404,10 +388,8 @@ ACTOR Grenade // // -------------------------------------------------------------------------- -ACTOR PlasmaRifle : DoomWeapon 2004 +ACTOR PlasmaRifle : DoomWeapon { - Game Doom - SpawnID 30 Weapon.SelectionOrder 100 Weapon.AmmoUse 1 Weapon.AmmoGive 40 @@ -442,8 +424,6 @@ ACTOR PlasmaRifle : DoomWeapon 2004 ACTOR PlasmaBall { - Game Doom - SpawnID 51 Radius 13 Height 8 Speed 25 @@ -508,11 +488,9 @@ ACTOR PlasmaBall2 : PlasmaBall1 // // -------------------------------------------------------------------------- -ACTOR BFG9000 : DoomWeapon 2006 +ACTOR BFG9000 : DoomWeapon { - Game Doom Height 20 - SpawnID 31 Weapon.SelectionOrder 2800 Weapon.AmmoUse 40 Weapon.AmmoGive 40 @@ -556,8 +534,6 @@ ACTOR BFG9000 : DoomWeapon 2006 ACTOR BFGBall { - Game Doom - SpawnID 128 Radius 13 Height 8 Speed 25 diff --git a/wadsrc/static/actors/doom/fatso.txt b/wadsrc/static/actors/doom/fatso.txt index 63ae511aa..1ad40fd93 100644 --- a/wadsrc/static/actors/doom/fatso.txt +++ b/wadsrc/static/actors/doom/fatso.txt @@ -3,10 +3,8 @@ // Mancubus // //=========================================================================== -ACTOR Fatso 67 +ACTOR Fatso { - Game Doom - SpawnID 112 Health 600 Radius 48 Height 64 @@ -65,8 +63,6 @@ ACTOR Fatso 67 //=========================================================================== ACTOR FatShot { - Game Doom - SpawnID 153 Radius 6 Height 8 Speed 20 diff --git a/wadsrc/static/actors/doom/keen.txt b/wadsrc/static/actors/doom/keen.txt index fef060435..2c07e5b32 100644 --- a/wadsrc/static/actors/doom/keen.txt +++ b/wadsrc/static/actors/doom/keen.txt @@ -3,9 +3,8 @@ // Commander Keen // //=========================================================================== -ACTOR CommanderKeen 72 +ACTOR CommanderKeen { - Game Doom Health 100 Radius 16 Height 72 diff --git a/wadsrc/static/actors/doom/lostsoul.txt b/wadsrc/static/actors/doom/lostsoul.txt index beb9ef4dd..80599d62a 100644 --- a/wadsrc/static/actors/doom/lostsoul.txt +++ b/wadsrc/static/actors/doom/lostsoul.txt @@ -3,10 +3,8 @@ // Lost Soul // //=========================================================================== -ACTOR LostSoul 3006 +ACTOR LostSoul { - Game Doom - SpawnID 110 Health 100 Radius 16 Height 56 @@ -50,7 +48,7 @@ ACTOR LostSoul 3006 } } -Actor BetaSkull : LostSoul 9037 +Actor BetaSkull : LostSoul { States { diff --git a/wadsrc/static/actors/doom/painelemental.txt b/wadsrc/static/actors/doom/painelemental.txt index e8e359cf3..5951afd6b 100644 --- a/wadsrc/static/actors/doom/painelemental.txt +++ b/wadsrc/static/actors/doom/painelemental.txt @@ -3,10 +3,8 @@ // Pain Elemental // //=========================================================================== -ACTOR PainElemental 71 +ACTOR PainElemental { - Game Doom - SpawnID 115 Health 400 Radius 31 Height 56 diff --git a/wadsrc/static/actors/doom/possessed.txt b/wadsrc/static/actors/doom/possessed.txt index 62a41a80a..7dfee1f9e 100644 --- a/wadsrc/static/actors/doom/possessed.txt +++ b/wadsrc/static/actors/doom/possessed.txt @@ -4,10 +4,8 @@ // Zombie man // //=========================================================================== -ACTOR ZombieMan 3004 +ACTOR ZombieMan { - Game Doom - SpawnID 4 Health 20 Radius 20 Height 56 @@ -65,10 +63,8 @@ ACTOR ZombieMan 3004 // Sergeant / Shotgun guy // //=========================================================================== -ACTOR ShotgunGuy 9 +ACTOR ShotgunGuy { - Game Doom - SpawnID 1 Health 30 Radius 20 Height 56 @@ -127,10 +123,8 @@ ACTOR ShotgunGuy 9 // Chaingunner // //=========================================================================== -ACTOR ChaingunGuy 65 +ACTOR ChaingunGuy { - Game Doom - SpawnID 2 Health 70 Radius 20 Height 56 @@ -189,10 +183,8 @@ ACTOR ChaingunGuy 65 // SS Nazi // //=========================================================================== -ACTOR WolfensteinSS 84 +ACTOR WolfensteinSS { - Game Doom - SpawnID 116 Health 50 Radius 20 Height 56 diff --git a/wadsrc/static/actors/doom/revenant.txt b/wadsrc/static/actors/doom/revenant.txt index 5ef97789b..ce072bec4 100644 --- a/wadsrc/static/actors/doom/revenant.txt +++ b/wadsrc/static/actors/doom/revenant.txt @@ -3,10 +3,8 @@ // Revenant // //=========================================================================== -ACTOR Revenant 66 +ACTOR Revenant { - Game Doom - SpawnID 20 Health 300 Radius 20 Height 56 @@ -70,8 +68,6 @@ ACTOR Revenant 66 //=========================================================================== ACTOR RevenantTracer { - Game Doom - SpawnID 53 Radius 11 Height 8 Speed 10 diff --git a/wadsrc/static/actors/doom/scriptedmarine.txt b/wadsrc/static/actors/doom/scriptedmarine.txt index fecd0ac0d..7341498be 100644 --- a/wadsrc/static/actors/doom/scriptedmarine.txt +++ b/wadsrc/static/actors/doom/scriptedmarine.txt @@ -1,10 +1,8 @@ // Scriptable marine ------------------------------------------------------- -ACTOR ScriptedMarine 9100 native +ACTOR ScriptedMarine native { - Game Doom - SpawnID 151 Health 100 Radius 16 Height 56 @@ -172,9 +170,8 @@ ACTOR ScriptedMarine 9100 native //--------------------------------------------------------------------------- -ACTOR MarineFist : ScriptedMarine 9101 +ACTOR MarineFist : ScriptedMarine { - Game Doom States { Melee: @@ -187,9 +184,8 @@ ACTOR MarineFist : ScriptedMarine 9101 //--------------------------------------------------------------------------- -ACTOR MarineBerserk : MarineFist 9102 +ACTOR MarineBerserk : MarineFist { - Game Doom States { Melee: @@ -200,9 +196,8 @@ ACTOR MarineBerserk : MarineFist 9102 } //--------------------------------------------------------------------------- -ACTOR MarineChainsaw : ScriptedMarine 9103 +ACTOR MarineChainsaw : ScriptedMarine { - Game Doom States { Melee: @@ -216,9 +211,8 @@ ACTOR MarineChainsaw : ScriptedMarine 9103 //--------------------------------------------------------------------------- -ACTOR MarinePistol : ScriptedMarine 9104 +ACTOR MarinePistol : ScriptedMarine { - Game Doom States { Missile: @@ -229,9 +223,8 @@ ACTOR MarinePistol : ScriptedMarine 9104 //--------------------------------------------------------------------------- -ACTOR MarineShotgun : ScriptedMarine 9105 +ACTOR MarineShotgun : ScriptedMarine { - Game Doom States { Missile: @@ -244,9 +237,8 @@ ACTOR MarineShotgun : ScriptedMarine 9105 //--------------------------------------------------------------------------- -ACTOR MarineSSG : ScriptedMarine 9106 +ACTOR MarineSSG : ScriptedMarine { - Game Doom States { Missile: @@ -256,9 +248,8 @@ ACTOR MarineSSG : ScriptedMarine 9106 //--------------------------------------------------------------------------- -ACTOR MarineChaingun : ScriptedMarine 9107 +ACTOR MarineChaingun : ScriptedMarine { - Game Doom States { Missile: @@ -269,9 +260,8 @@ ACTOR MarineChaingun : ScriptedMarine 9107 //--------------------------------------------------------------------------- -ACTOR MarineRocket : MarineFist 9108 +ACTOR MarineRocket : MarineFist { - Game Doom States { Missile: @@ -282,9 +272,8 @@ ACTOR MarineRocket : MarineFist 9108 //--------------------------------------------------------------------------- -ACTOR MarinePlasma : ScriptedMarine 9109 +ACTOR MarinePlasma : ScriptedMarine { - Game Doom States { Missile: @@ -295,9 +284,8 @@ ACTOR MarinePlasma : ScriptedMarine 9109 //--------------------------------------------------------------------------- -ACTOR MarineRailgun : ScriptedMarine 9110 +ACTOR MarineRailgun : ScriptedMarine { - Game Doom States { Missile: @@ -308,9 +296,8 @@ ACTOR MarineRailgun : ScriptedMarine 9110 //--------------------------------------------------------------------------- -ACTOR MarineBFG : ScriptedMarine 9111 +ACTOR MarineBFG : ScriptedMarine { - Game Doom States { Missile: diff --git a/wadsrc/static/actors/doom/spidermaster.txt b/wadsrc/static/actors/doom/spidermaster.txt index d2939c8ea..97ebbf143 100644 --- a/wadsrc/static/actors/doom/spidermaster.txt +++ b/wadsrc/static/actors/doom/spidermaster.txt @@ -3,10 +3,8 @@ // Spider boss // //=========================================================================== -ACTOR SpiderMastermind 7 +ACTOR SpiderMastermind { - Game Doom - SpawnID 7 Health 3000 Radius 100 Height 100 diff --git a/wadsrc/static/actors/doom/stealthmonsters.txt b/wadsrc/static/actors/doom/stealthmonsters.txt index f5d7ae31b..5a35533ea 100644 --- a/wadsrc/static/actors/doom/stealthmonsters.txt +++ b/wadsrc/static/actors/doom/stealthmonsters.txt @@ -1,28 +1,22 @@ -ACTOR StealthArachnotron : Arachnotron 9050 +ACTOR StealthArachnotron : Arachnotron { - Game Doom - SpawnID 117 +STEALTH RenderStyle Translucent Alpha 0 Obituary "$OB_STEALTHBABY" } -ACTOR StealthArchvile : Archvile 9051 +ACTOR StealthArchvile : Archvile { - Game Doom - SpawnID 118 +STEALTH RenderStyle Translucent Alpha 0 Obituary "$OB_STEALTHVILE" } -ACTOR StealthBaron : BaronOfHell 9052 +ACTOR StealthBaron : BaronOfHell { - Game Doom - SpawnID 100 +STEALTH RenderStyle Translucent Alpha 0 @@ -30,10 +24,8 @@ ACTOR StealthBaron : BaronOfHell 9052 HitObituary "$OB_STEALTHBARON" } -ACTOR StealthCacodemon : Cacodemon 9053 +ACTOR StealthCacodemon : Cacodemon { - Game Doom - SpawnID 119 +STEALTH RenderStyle Translucent Alpha 0 @@ -41,20 +33,16 @@ ACTOR StealthCacodemon : Cacodemon 9053 HitObituary "$OB_STEALTHCACO" } -ACTOR StealthChaingunGuy : ChaingunGuy 9054 +ACTOR StealthChaingunGuy : ChaingunGuy { - Game Doom - SpawnID 120 +STEALTH RenderStyle Translucent Alpha 0 Obituary "$OB_STEALTHCHAINGUY" } -ACTOR StealthDemon : Demon 9055 +ACTOR StealthDemon : Demon { - Game Doom - SpawnID 121 +STEALTH RenderStyle Translucent Alpha 0 @@ -62,10 +50,8 @@ ACTOR StealthDemon : Demon 9055 HitObituary "$OB_STEALTHDEMON" } -ACTOR StealthHellKnight : HellKnight 9056 +ACTOR StealthHellKnight : HellKnight { - Game Doom - SpawnID 101 +STEALTH RenderStyle Translucent Alpha 0 @@ -73,10 +59,8 @@ ACTOR StealthHellKnight : HellKnight 9056 HitObituary "$OB_STEALTHKNIGHT" } -ACTOR StealthDoomImp : DoomImp 9057 +ACTOR StealthDoomImp : DoomImp { - Game Doom - SpawnID 122 +STEALTH RenderStyle Translucent Alpha 0 @@ -84,20 +68,16 @@ ACTOR StealthDoomImp : DoomImp 9057 HitObituary "$OB_STEALTHIMP" } -ACTOR StealthFatso : Fatso 9058 +ACTOR StealthFatso : Fatso { - Game Doom - SpawnID 123 +STEALTH RenderStyle Translucent Alpha 0 Obituary "$OB_STEALTHFATSO" } -ACTOR StealthRevenant : Revenant 9059 +ACTOR StealthRevenant : Revenant { - Game Doom - SpawnID 124 +STEALTH RenderStyle Translucent Alpha 0 @@ -105,20 +85,16 @@ ACTOR StealthRevenant : Revenant 9059 HitObituary "$OB_STEALTHUNDEAD" } -ACTOR StealthShotgunGuy : ShotgunGuy 9060 +ACTOR StealthShotgunGuy : ShotgunGuy { - Game Doom - SpawnID 103 +STEALTH RenderStyle Translucent Alpha 0 Obituary "$OB_STEALTHSHOTGUNGUY" } -ACTOR StealthZombieMan : ZombieMan 9061 +ACTOR StealthZombieMan : ZombieMan { - Game Doom - SpawnID 102 +STEALTH RenderStyle Translucent Alpha 0 diff --git a/wadsrc/static/actors/heretic/beast.txt b/wadsrc/static/actors/heretic/beast.txt index 7f54c3442..757414883 100644 --- a/wadsrc/static/actors/heretic/beast.txt +++ b/wadsrc/static/actors/heretic/beast.txt @@ -1,10 +1,8 @@ // Beast -------------------------------------------------------------------- -ACTOR Beast 70 +ACTOR Beast { - Game Heretic - SpawnID 3 Health 220 Radius 32 Height 74 @@ -61,8 +59,6 @@ ACTOR Beast 70 ACTOR BeastBall { - Game Heretic - SpawnID 120 Radius 9 Height 8 Speed 12 diff --git a/wadsrc/static/actors/heretic/chicken.txt b/wadsrc/static/actors/heretic/chicken.txt index 029dca014..62982f944 100644 --- a/wadsrc/static/actors/heretic/chicken.txt +++ b/wadsrc/static/actors/heretic/chicken.txt @@ -113,8 +113,6 @@ ACTOR ChickenPlayer : PlayerPawn native ACTOR Chicken : MorphedMonster { - Game Heretic - SpawnID 122 Health 10 Radius 9 Height 22 @@ -164,8 +162,6 @@ ACTOR Chicken : MorphedMonster ACTOR Feather { - Game Heretic - SpawnID 121 Radius 2 Height 4 +MISSILE +DROPOFF diff --git a/wadsrc/static/actors/heretic/clink.txt b/wadsrc/static/actors/heretic/clink.txt index ec8cf6b9c..f7a483331 100644 --- a/wadsrc/static/actors/heretic/clink.txt +++ b/wadsrc/static/actors/heretic/clink.txt @@ -1,8 +1,6 @@ -ACTOR Clink 90 +ACTOR Clink { - Game Heretic - SpawnID 1 Health 150 Radius 20 Height 64 diff --git a/wadsrc/static/actors/heretic/dsparil.txt b/wadsrc/static/actors/heretic/dsparil.txt index 6ecef5b5c..47fada3e6 100644 --- a/wadsrc/static/actors/heretic/dsparil.txt +++ b/wadsrc/static/actors/heretic/dsparil.txt @@ -1,19 +1,15 @@ // Boss spot ---------------------------------------------------------------- -ACTOR BossSpot : SpecialSpot 56 +ACTOR BossSpot : SpecialSpot { - Game Heretic - SpawnID 141 +INVISIBLE } // Sorcerer (D'Sparil on his serpent) --------------------------------------- -ACTOR Sorcerer1 7 +ACTOR Sorcerer1 { - Game Heretic - SpawnID 142 Health 2000 Radius 28 Height 100 @@ -84,8 +80,6 @@ ACTOR Sorcerer1 7 ACTOR SorcererFX1 { - Game Heretic - SpawnID 144 Radius 10 Height 10 Speed 20 @@ -112,8 +106,6 @@ ACTOR SorcererFX1 ACTOR Sorcerer2 { - Game Heretic - SpawnID 143 Health 3500 Radius 16 Height 70 @@ -192,8 +184,6 @@ ACTOR Sorcerer2 ACTOR Sorcerer2FX1 { - Game Heretic - SpawnID 145 Radius 10 Height 6 Speed 20 @@ -241,8 +231,6 @@ ACTOR Sorcerer2FXSpark ACTOR Sorcerer2FX2 { - Game Heretic - SpawnID 146 Radius 10 Height 6 Speed 6 diff --git a/wadsrc/static/actors/heretic/hereticammo.txt b/wadsrc/static/actors/heretic/hereticammo.txt index 96a20352b..cfbc29702 100644 --- a/wadsrc/static/actors/heretic/hereticammo.txt +++ b/wadsrc/static/actors/heretic/hereticammo.txt @@ -1,10 +1,8 @@ // Wimpy ammo --------------------------------------------------------------- -ACTOR GoldWandAmmo : Ammo 10 +ACTOR GoldWandAmmo : Ammo { - Game Heretic - SpawnID 11 Inventory.PickupMessage "$TXT_AMMOGOLDWAND1" Inventory.Amount 10 Inventory.MaxAmount 100 @@ -21,10 +19,8 @@ ACTOR GoldWandAmmo : Ammo 10 // Hefty ammo --------------------------------------------------------------- -ACTOR GoldWandHefty : GoldWandAmmo 12 +ACTOR GoldWandHefty : GoldWandAmmo { - Game Heretic - SpawnID 12 Inventory.PickupMessage "$TXT_AMMOGOLDWAND2" Inventory.Amount 50 States @@ -36,10 +32,8 @@ ACTOR GoldWandHefty : GoldWandAmmo 12 } // Wimpy ammo --------------------------------------------------------------- -ACTOR CrossbowAmmo : Ammo 18 +ACTOR CrossbowAmmo : Ammo { - Game Heretic - SpawnID 33 Inventory.PickupMessage "$TXT_AMMOCROSSBOW1" Inventory.Amount 5 Inventory.MaxAmount 50 @@ -56,10 +50,8 @@ ACTOR CrossbowAmmo : Ammo 18 // Hefty ammo --------------------------------------------------------------- -ACTOR CrossbowHefty : CrossbowAmmo 19 +ACTOR CrossbowHefty : CrossbowAmmo { - Game Heretic - SpawnID 34 Inventory.PickupMessage "$TXT_AMMOCROSSBOW2" Inventory.Amount 20 States @@ -71,10 +63,8 @@ ACTOR CrossbowHefty : CrossbowAmmo 19 } // Wimpy ammo --------------------------------------------------------------- -ACTOR MaceAmmo : Ammo 13 +ACTOR MaceAmmo : Ammo { - Game Heretic - SpawnID 35 Inventory.PickupMessage "$TXT_AMMOMACE1" Inventory.Amount 20 Inventory.MaxAmount 150 @@ -91,10 +81,8 @@ ACTOR MaceAmmo : Ammo 13 // Hefty ammo --------------------------------------------------------------- -ACTOR MaceHefty : MaceAmmo 16 +ACTOR MaceHefty : MaceAmmo { - Game Heretic - SpawnID 36 Inventory.PickupMessage "$TXT_AMMOMACE2" Inventory.Amount 100 States @@ -107,10 +95,8 @@ ACTOR MaceHefty : MaceAmmo 16 // Wimpy ammo --------------------------------------------------------------- -ACTOR BlasterAmmo : Ammo 54 +ACTOR BlasterAmmo : Ammo { - Game Heretic - SpawnID 37 Inventory.PickupMessage "$TXT_AMMOBLASTER1" Inventory.Amount 10 Inventory.MaxAmount 200 @@ -127,10 +113,8 @@ ACTOR BlasterAmmo : Ammo 54 // Hefty ammo --------------------------------------------------------------- -ACTOR BlasterHefty : BlasterAmmo 55 +ACTOR BlasterHefty : BlasterAmmo { - Game Heretic - SpawnID 38 Inventory.PickupMessage "$TXT_AMMOBLASTER2" Inventory.Amount 25 States @@ -143,10 +127,8 @@ ACTOR BlasterHefty : BlasterAmmo 55 // Wimpy ammo --------------------------------------------------------------- -ACTOR SkullRodAmmo : Ammo 20 +ACTOR SkullRodAmmo : Ammo { - Game Heretic - SpawnID 158 Inventory.PickupMessage "$TXT_AMMOSKULLROD1" Inventory.Amount 20 Inventory.MaxAmount 200 @@ -163,10 +145,8 @@ ACTOR SkullRodAmmo : Ammo 20 // Hefty ammo --------------------------------------------------------------- -ACTOR SkullRodHefty : SkullRodAmmo 21 +ACTOR SkullRodHefty : SkullRodAmmo { - Game Heretic - SpawnID 159 Inventory.PickupMessage "$TXT_AMMOSKULLROD2" Inventory.Amount 100 States @@ -179,10 +159,8 @@ ACTOR SkullRodHefty : SkullRodAmmo 21 // Wimpy ammo --------------------------------------------------------------- -ACTOR PhoenixRodAmmo : Ammo 22 +ACTOR PhoenixRodAmmo : Ammo { - Game Heretic - SpawnID 161 Inventory.PickupMessage "$TXT_AMMOPHOENIXROD1" Inventory.Amount 1 Inventory.MaxAmount 20 @@ -198,10 +176,8 @@ ACTOR PhoenixRodAmmo : Ammo 22 } // Hefty ammo --------------------------------------------------------------- -ACTOR PhoenixRodHefty : PhoenixRodAmmo 23 +ACTOR PhoenixRodHefty : PhoenixRodAmmo { - Game Heretic - SpawnID 162 Inventory.PickupMessage "$TXT_AMMOPHOENIXROD2" Inventory.Amount 10 States @@ -214,10 +190,8 @@ ACTOR PhoenixRodHefty : PhoenixRodAmmo 23 // --- Bag of holding ------------------------------------------------------- -ACTOR BagOfHolding : BackpackItem 8 +ACTOR BagOfHolding : BackpackItem { - Game Heretic - SpawnID 136 Inventory.PickupMessage "$TXT_ITEMBAGOFHOLDING" +COUNTITEM +FLOATBOB diff --git a/wadsrc/static/actors/heretic/hereticarmor.txt b/wadsrc/static/actors/heretic/hereticarmor.txt index e027f4f47..c6e28b030 100644 --- a/wadsrc/static/actors/heretic/hereticarmor.txt +++ b/wadsrc/static/actors/heretic/hereticarmor.txt @@ -1,10 +1,8 @@ // Silver Shield (Shield1) -------------------------------------------------- -Actor SilverShield : BasicArmorPickup 85 +Actor SilverShield : BasicArmorPickup { - Game Heretic - SpawnID 68 +FLOATBOB Inventory.Pickupmessage "$TXT_ITEMSHIELD1" Inventory.Icon "SHLDA0" @@ -20,10 +18,8 @@ Actor SilverShield : BasicArmorPickup 85 // Enchanted shield (Shield2) ----------------------------------------------- -Actor EnchantedShield : BasicArmorPickup 31 +Actor EnchantedShield : BasicArmorPickup { - Game Heretic - SpawnID 69 +FLOATBOB Inventory.Pickupmessage "$TXT_ITEMSHIELD2" Inventory.Icon "SHD2A0" diff --git a/wadsrc/static/actors/heretic/hereticartifacts.txt b/wadsrc/static/actors/heretic/hereticartifacts.txt index 67d3946b9..91e954b1b 100644 --- a/wadsrc/static/actors/heretic/hereticartifacts.txt +++ b/wadsrc/static/actors/heretic/hereticartifacts.txt @@ -1,9 +1,7 @@ // Super map ---------------------------------------------------------------- -ACTOR SuperMap : MapRevealer 35 +ACTOR SuperMap : MapRevealer { - Game Heretic - SpawnID 137 +COUNTITEM +INVENTORY.ALWAYSPICKUP +FLOATBOB @@ -20,10 +18,8 @@ ACTOR SuperMap : MapRevealer 35 // Invisibility ------------------------------------------------------------- -ACTOR ArtiInvisibility : PowerupGiver 75 +ACTOR ArtiInvisibility : PowerupGiver { - Game Heretic - SpawnID 135 +COUNTITEM +FLOATBOB +INVENTORY.PICKUPFLASH @@ -45,10 +41,8 @@ ACTOR ArtiInvisibility : PowerupGiver 75 // Tome of power ------------------------------------------------------------ -ACTOR ArtiTomeOfPower : PowerupGiver 86 native +ACTOR ArtiTomeOfPower : PowerupGiver native { - Game Heretic - SpawnID 134 +COUNTITEM +FLOATBOB +INVENTORY.PICKUPFLASH @@ -88,10 +82,8 @@ ACTOR ActivatedTimeBomb } -ACTOR ArtiTimeBomb : Inventory 34 native +ACTOR ArtiTimeBomb : Inventory native { - Game Heretic - SpawnID 72 +COUNTITEM +FLOATBOB +INVENTORY.PICKUPFLASH diff --git a/wadsrc/static/actors/heretic/hereticdecorations.txt b/wadsrc/static/actors/heretic/hereticdecorations.txt index cb090d0ea..27bd98540 100644 --- a/wadsrc/static/actors/heretic/hereticdecorations.txt +++ b/wadsrc/static/actors/heretic/hereticdecorations.txt @@ -1,6 +1,5 @@ -ACTOR SkullHang70 17 +ACTOR SkullHang70 { - Game Heretic Radius 20 Height 70 +SPAWNCEILING @@ -13,9 +12,8 @@ ACTOR SkullHang70 17 } } -ACTOR SkullHang60 24 +ACTOR SkullHang60 { - Game Heretic Radius 20 Height 60 +SPAWNCEILING @@ -28,9 +26,8 @@ ACTOR SkullHang60 24 } } -ACTOR SkullHang45 25 +ACTOR SkullHang45 { - Game Heretic Radius 20 Height 45 +SPAWNCEILING @@ -43,9 +40,8 @@ ACTOR SkullHang45 25 } } -ACTOR SkullHang35 26 +ACTOR SkullHang35 { - Game Heretic Radius 20 Height 35 +SPAWNCEILING @@ -58,9 +54,8 @@ ACTOR SkullHang35 26 } } -ACTOR Chandelier 28 +ACTOR Chandelier { - Game Heretic Radius 20 Height 60 +SPAWNCEILING @@ -73,9 +68,8 @@ ACTOR Chandelier 28 } } -ACTOR SerpentTorch 27 +ACTOR SerpentTorch { - Game Heretic Radius 12 Height 54 +SOLID @@ -87,9 +81,8 @@ ACTOR SerpentTorch 27 } } -ACTOR SmallPillar 29 +ACTOR SmallPillar { - Game Heretic Radius 16 Height 34 +SOLID @@ -101,9 +94,8 @@ ACTOR SmallPillar 29 } } -ACTOR StalagmiteSmall 37 +ACTOR StalagmiteSmall { - Game Heretic Radius 8 Height 32 +SOLID @@ -115,9 +107,8 @@ ACTOR StalagmiteSmall 37 } } -ACTOR StalagmiteLarge 38 +ACTOR StalagmiteLarge { - Game Heretic Radius 12 Height 64 +SOLID @@ -129,9 +120,8 @@ ACTOR StalagmiteLarge 38 } } -ACTOR StalactiteSmall 39 +ACTOR StalactiteSmall { - Game Heretic Radius 8 Height 36 +SOLID @@ -145,9 +135,8 @@ ACTOR StalactiteSmall 39 } } -ACTOR StalactiteLarge 40 +ACTOR StalactiteLarge { - Game Heretic Radius 12 Height 68 +SOLID @@ -161,9 +150,8 @@ ACTOR StalactiteLarge 40 } } -ACTOR FireBrazier 76 +ACTOR FireBrazier { - Game Heretic Radius 16 Height 44 +SOLID @@ -175,9 +163,8 @@ ACTOR FireBrazier 76 } } -ACTOR Barrel 44 +ACTOR Barrel { - Game Heretic Radius 12 Height 32 +SOLID @@ -189,9 +176,8 @@ ACTOR Barrel 44 } } -ACTOR BrownPillar 47 +ACTOR BrownPillar { - Game Heretic Radius 14 Height 128 +SOLID @@ -203,9 +189,8 @@ ACTOR BrownPillar 47 } } -ACTOR Moss1 48 +ACTOR Moss1 { - Game Heretic Radius 20 Height 23 +SPAWNCEILING @@ -218,9 +203,8 @@ ACTOR Moss1 48 } } -ACTOR Moss2 49 +ACTOR Moss2 { - Game Heretic Radius 20 Height 27 +SPAWNCEILING @@ -233,9 +217,8 @@ ACTOR Moss2 49 } } -ACTOR WallTorch 50 +ACTOR WallTorch { - Game Heretic Radius 6 Height 16 +NOGRAVITY @@ -248,9 +231,8 @@ ACTOR WallTorch 50 } } -ACTOR HangingCorpse 51 +ACTOR HangingCorpse { - Game Heretic Radius 8 Height 104 +SOLID diff --git a/wadsrc/static/actors/heretic/hereticimp.txt b/wadsrc/static/actors/heretic/hereticimp.txt index 2659d248a..b91cf1160 100644 --- a/wadsrc/static/actors/heretic/hereticimp.txt +++ b/wadsrc/static/actors/heretic/hereticimp.txt @@ -1,10 +1,8 @@ // Heretic imp (as opposed to the Doom variety) ----------------------------- -ACTOR HereticImp 66 +ACTOR HereticImp { - Game Heretic - SpawnID 5 Health 40 Radius 16 Height 36 @@ -78,10 +76,8 @@ ACTOR HereticImp 66 // Heretic imp leader ------------------------------------------------------- -ACTOR HereticImpLeader : HereticImp 5 +ACTOR HereticImpLeader : HereticImp { - Game Heretic - SpawnID 7 Species "HereticImpLeader" Health 80 -MISSILEMORE @@ -135,8 +131,6 @@ ACTOR HereticImpChunk2 ACTOR HereticImpBall { - Game Heretic - SpawnID 10 Radius 8 Height 8 Speed 10 diff --git a/wadsrc/static/actors/heretic/heretickeys.txt b/wadsrc/static/actors/heretic/heretickeys.txt index 71beab253..69d906e55 100644 --- a/wadsrc/static/actors/heretic/heretickeys.txt +++ b/wadsrc/static/actors/heretic/heretickeys.txt @@ -8,10 +8,8 @@ ACTOR HereticKey : Key // Green key ------------------------------------------------------------ -ACTOR KeyGreen : HereticKey 73 +ACTOR KeyGreen : HereticKey { - Game Heretic - SpawnID 86 Inventory.PickupMessage "$TXT_GOTGREENKEY" Inventory.Icon "GKEYICON" States @@ -24,10 +22,8 @@ ACTOR KeyGreen : HereticKey 73 // Blue key ----------------------------------------------------------------- -ACTOR KeyBlue : HereticKey 79 +ACTOR KeyBlue : HereticKey { - Game Heretic - SpawnID 85 Inventory.PickupMessage "$TXT_GOTBLUEKEY" Inventory.Icon "BKEYICON" States @@ -40,10 +36,8 @@ ACTOR KeyBlue : HereticKey 79 // Yellow key --------------------------------------------------------------- -ACTOR KeyYellow : HereticKey 80 +ACTOR KeyYellow : HereticKey { - Game Heretic - SpawnID 87 Inventory.PickupMessage "$TXT_GOTYELLOWKEY" Inventory.Icon "YKEYICON" States @@ -57,9 +51,8 @@ ACTOR KeyYellow : HereticKey 80 // --- Blue Key gizmo ----------------------------------------------------------- -ACTOR KeyGizmoBlue 94 +ACTOR KeyGizmoBlue { - Game Heretic Radius 16 Height 50 +SOLID @@ -89,9 +82,8 @@ ACTOR KeyGizmoFloatBlue // --- Green Key gizmo ----------------------------------------------------------- -ACTOR KeyGizmoGreen 95 +ACTOR KeyGizmoGreen { - Game Heretic Radius 16 Height 50 +SOLID @@ -121,9 +113,8 @@ ACTOR KeyGizmoFloatGreen // --- Yellow Key gizmo ----------------------------------------------------------- -ACTOR KeyGizmoYellow 96 +ACTOR KeyGizmoYellow { - Game Heretic Radius 16 Height 50 +SOLID diff --git a/wadsrc/static/actors/heretic/hereticmisc.txt b/wadsrc/static/actors/heretic/hereticmisc.txt index b6644e444..a8ef81b5d 100644 --- a/wadsrc/static/actors/heretic/hereticmisc.txt +++ b/wadsrc/static/actors/heretic/hereticmisc.txt @@ -1,10 +1,8 @@ // Pod ---------------------------------------------------------------------- -ACTOR Pod 2035 +ACTOR Pod { - Game Heretic - SpawnID 125 Health 45 Radius 16 Height 54 @@ -62,10 +60,8 @@ ACTOR PodGoo // Pod generator ------------------------------------------------------------ -ACTOR PodGenerator 43 +ACTOR PodGenerator { - Game Heretic - SpawnID 126 +NOBLOCKMAP +NOSECTOR +DONTSPLASH @@ -84,10 +80,8 @@ ACTOR PodGenerator 43 // Teleglitter generator 1 -------------------------------------------------- -ACTOR TeleGlitterGenerator1 74 +ACTOR TeleGlitterGenerator1 { - Game Heretic - SpawnID 166 +NOBLOCKMAP +NOGRAVITY +DONTSPLASH @@ -102,10 +96,8 @@ ACTOR TeleGlitterGenerator1 74 // Teleglitter generator 2 -------------------------------------------------- -ACTOR TeleGlitterGenerator2 52 +ACTOR TeleGlitterGenerator2 { - Game Heretic - SpawnID 167 +NOBLOCKMAP +NOGRAVITY +DONTSPLASH @@ -160,10 +152,8 @@ ACTOR TeleGlitter2 : TeleGlitter1 // --- Volcano -------------------------------------------------------------- -ACTOR Volcano 87 +ACTOR Volcano { - Game Heretic - SpawnID 150 Radius 12 Height 20 +SOLID @@ -187,8 +177,6 @@ ACTOR Volcano 87 ACTOR VolcanoBlast { - Game Heretic - SpawnID 123 Radius 8 Height 8 Speed 2 @@ -219,8 +207,6 @@ ACTOR VolcanoBlast ACTOR VolcanoTBlast { - Game Heretic - SpawnID 124 Radius 8 Height 6 Speed 2 diff --git a/wadsrc/static/actors/heretic/hereticweaps.txt b/wadsrc/static/actors/heretic/hereticweaps.txt index ca85437e0..711c3fd29 100644 --- a/wadsrc/static/actors/heretic/hereticweaps.txt +++ b/wadsrc/static/actors/heretic/hereticweaps.txt @@ -9,7 +9,6 @@ ACTOR HereticWeapon : Weapon ACTOR Staff : HereticWeapon { - Game Heretic Weapon.SelectionOrder 3800 +THRUGHOST +WIMPY_WEAPON @@ -41,7 +40,6 @@ ACTOR Staff : HereticWeapon ACTOR StaffPowered : Staff { - Game Heretic Weapon.sisterweapon "Staff" Weapon.ReadySound "weapons/staffcrackle" +WEAPON.POWERED_UP @@ -110,9 +108,8 @@ ACTOR StaffPuff2 // Gold wand ---------------------------------------------------------------- -ACTOR GoldWand : HereticWeapon 9042 +ACTOR GoldWand : HereticWeapon { - Game Heretic +BLOODSPLATTER Weapon.SelectionOrder 2000 Weapon.AmmoGive 25 @@ -151,7 +148,6 @@ ACTOR GoldWand : HereticWeapon 9042 ACTOR GoldWandPowered : GoldWand { - Game Heretic +WEAPON.POWERED_UP Weapon.AmmoGive 0 Weapon.SisterWeapon "GoldWand" @@ -176,8 +172,6 @@ ACTOR GoldWandPowered : GoldWand ACTOR GoldWandFX1 { - Game Heretic - SpawnID 151 Radius 10 Height 6 Speed 22 @@ -201,8 +195,6 @@ ACTOR GoldWandFX1 ACTOR GoldWandFX2 : GoldWandFX1 { - Game Heretic - SpawnID 152 Speed 18 Damage 1 DeathSound "" @@ -248,10 +240,8 @@ ACTOR GoldWandPuff2 : GoldWandFX1 // Crossbow ----------------------------------------------------------------- -ACTOR Crossbow : HereticWeapon 2001 +ACTOR Crossbow : HereticWeapon { - Game Heretic - SpawnID 27 Weapon.SelectionOrder 800 Weapon.AmmoUse 1 Weapon.AmmoGive 10 @@ -289,7 +279,6 @@ ACTOR Crossbow : HereticWeapon 2001 ACTOR CrossbowPowered : Crossbow { - Game Heretic +WEAPON.POWERED_UP Weapon.AmmoGive 0 Weapon.SisterWeapon "Crossbow" @@ -317,8 +306,6 @@ ACTOR CrossbowPowered : Crossbow ACTOR CrossbowFX1 { - Game Heretic - SpawnID 147 Radius 11 Height 8 Speed 30 @@ -344,8 +331,6 @@ ACTOR CrossbowFX1 ACTOR CrossbowFX2 : CrossbowFX1 { - Game Heretic - SpawnID 148 Speed 32 Damage 6 Obituary "$OB_MPPCROSSBOW" @@ -361,8 +346,6 @@ ACTOR CrossbowFX2 : CrossbowFX1 ACTOR CrossbowFX3 : CrossbowFX1 { - Game Heretic - SpawnID 149 Speed 20 Damage 2 SeeSound "" @@ -400,10 +383,8 @@ ACTOR CrossbowFX4 // Gauntlets ---------------------------------------------------------------- -ACTOR Gauntlets : Weapon 2005 +ACTOR Gauntlets : Weapon { - Game Heretic - SpawnID 32 +BLOODSPLATTER Weapon.SelectionOrder 2300 +WEAPON.WIMPY_WEAPON @@ -446,7 +427,6 @@ ACTOR Gauntlets : Weapon 2005 ACTOR GauntletsPowered : Gauntlets { - Game Heretic +POWERED_UP Tag "$TAG_GAUNTLETSP" Obituary "$OB_MPPGAUNTLETS" @@ -509,8 +489,6 @@ ACTOR GauntletPuff2 : GauntletPuff1 ACTOR Mace : HereticWeapon { - Game Heretic - SpawnID 31 Weapon.SelectionOrder 1400 Weapon.AmmoUse 1 Weapon.AmmoGive1 50 @@ -548,7 +526,6 @@ ACTOR Mace : HereticWeapon ACTOR MacePowered : Mace { - Game Heretic +WEAPON.POWERED_UP Weapon.AmmoUse 5 Weapon.AmmoGive 0 @@ -573,8 +550,6 @@ ACTOR MacePowered : Mace ACTOR MaceFX1 { - Game Heretic - SpawnID 154 Radius 8 Height 6 Speed 20 @@ -604,8 +579,6 @@ ACTOR MaceFX1 ACTOR MaceFX2 : MaceFX1 { - Game Heretic - SpawnID 156 Speed 10 Damage 6 Gravity 0.125 @@ -629,8 +602,6 @@ ACTOR MaceFX2 : MaceFX1 ACTOR MaceFX3 : MaceFX1 { - Game Heretic - SpawnID 155 Speed 7 Damage 4 -NOGRAVITY @@ -648,8 +619,6 @@ ACTOR MaceFX3 : MaceFX1 ACTOR MaceFX4 native { - Game Heretic - SpawnID 153 Radius 8 Height 6 Speed 7 @@ -681,9 +650,8 @@ ACTOR MaceFX4 native // Mace spawn spot ---------------------------------------------------------- -ACTOR MaceSpawner : SpecialSpot 2002 +ACTOR MaceSpawner : SpecialSpot { - Game Heretic +NOSECTOR +NOBLOCKMAP States @@ -698,10 +666,8 @@ ACTOR MaceSpawner : SpecialSpot 2002 // Blaster ------------------------------------------------------------------ -ACTOR Blaster : HereticWeapon 53 +ACTOR Blaster : HereticWeapon { - Game Heretic - SpawnID 28 +BLOODSPLATTER Weapon.SelectionOrder 500 Weapon.AmmoUse 1 @@ -741,7 +707,6 @@ ACTOR Blaster : HereticWeapon 53 ACTOR BlasterPowered : Blaster { - Game Heretic +WEAPON.POWERED_UP Weapon.AmmoUse 5 Weapon.AmmoGive 0 @@ -809,8 +774,6 @@ ACTOR BlasterSmoke ACTOR Ripper native { - Game Heretic - SpawnID 157 Radius 8 Height 6 Speed 14 @@ -854,10 +817,8 @@ ACTOR BlasterPuff // Skull (Horn) Rod --------------------------------------------------------- -ACTOR SkullRod : HereticWeapon 2004 +ACTOR SkullRod : HereticWeapon { - Game Heretic - SpawnID 30 Weapon.SelectionOrder 200 Weapon.AmmoUse1 1 Weapon.AmmoGive1 50 @@ -892,7 +853,6 @@ ACTOR SkullRod : HereticWeapon 2004 ACTOR SkullRodPowered : SkullRod { - Game Heretic +WEAPON.POWERED_UP Weapon.AmmoUse1 5 Weapon.AmmoGive1 0 @@ -921,8 +881,6 @@ ACTOR SkullRodPowered : SkullRod ACTOR HornRodFX1 { - Game Heretic - SpawnID 160 Radius 12 Height 8 Speed 22 @@ -1028,10 +986,8 @@ ACTOR RainTracker : Inventory native // Phoenix Rod -------------------------------------------------------------- -ACTOR PhoenixRod : Weapon 2003 native +ACTOR PhoenixRod : Weapon native { - Game Heretic - SpawnID 29 +WEAPON.NOAUTOFIRE Weapon.SelectionOrder 2600 Weapon.Kickback 150 @@ -1070,7 +1026,6 @@ ACTOR PhoenixRod : Weapon 2003 native ACTOR PhoenixRodPowered : PhoenixRod native { - Game Heretic +WEAPON.POWERED_UP +WEAPON.MELEEWEAPON Weapon.SisterWeapon "PhoenixRod" @@ -1098,8 +1053,6 @@ ACTOR PhoenixRodPowered : PhoenixRod native ACTOR PhoenixFX1 native { - Game Heretic - SpawnID 163 Radius 11 Height 8 Speed 20 diff --git a/wadsrc/static/actors/heretic/ironlich.txt b/wadsrc/static/actors/heretic/ironlich.txt index 21234cf52..4b3527a4f 100644 --- a/wadsrc/static/actors/heretic/ironlich.txt +++ b/wadsrc/static/actors/heretic/ironlich.txt @@ -1,10 +1,8 @@ // Ironlich ----------------------------------------------------------------- -ACTOR Ironlich 6 +ACTOR Ironlich { - Game Heretic - SpawnID 20 Health 700 Radius 40 Height 72 @@ -59,8 +57,6 @@ ACTOR Ironlich 6 ACTOR HeadFX1 { - Game Heretic - SpawnID 164 Radius 12 Height 6 Speed 13 @@ -147,8 +143,6 @@ ACTOR HeadFX3 ACTOR Whirlwind native { - Game Heretic - SpawnID 165 Radius 16 Height 74 Speed 10 diff --git a/wadsrc/static/actors/heretic/knight.txt b/wadsrc/static/actors/heretic/knight.txt index 584bcd72e..4249f9549 100644 --- a/wadsrc/static/actors/heretic/knight.txt +++ b/wadsrc/static/actors/heretic/knight.txt @@ -1,10 +1,8 @@ // Knight ------------------------------------------------------------------- -ACTOR Knight 64 +ACTOR Knight { - Game Heretic - SpawnID 6 Health 200 Radius 24 Height 78 @@ -60,10 +58,8 @@ ACTOR Knight 64 // Knight ghost ------------------------------------------------------------- -ACTOR KnightGhost : Knight 65 +ACTOR KnightGhost : Knight { - Game Heretic - SpawnID 129 +SHADOW +GHOST RenderStyle Translucent @@ -74,8 +70,6 @@ ACTOR KnightGhost : Knight 65 ACTOR KnightAxe { - Game Heretic - SpawnID 127 Radius 10 Height 8 Speed 9 @@ -105,8 +99,6 @@ ACTOR KnightAxe ACTOR RedAxe : KnightAxe { - Game Heretic - SpawnID 128 +NOBLOCKMAP -WINDTHRUST Damage 7 diff --git a/wadsrc/static/actors/heretic/mummy.txt b/wadsrc/static/actors/heretic/mummy.txt index af4ff0c23..46e9deaba 100644 --- a/wadsrc/static/actors/heretic/mummy.txt +++ b/wadsrc/static/actors/heretic/mummy.txt @@ -1,10 +1,8 @@ // Mummy -------------------------------------------------------------------- -ACTOR Mummy 68 +ACTOR Mummy { - Game Heretic - SpawnID 4 Health 80 Radius 22 Height 62 @@ -51,10 +49,8 @@ ACTOR Mummy 68 // Mummy leader ------------------------------------------------------------- -ACTOR MummyLeader : Mummy 45 +ACTOR MummyLeader : Mummy { - Game Heretic - SpawnID 2 Species "MummyLeader" Health 100 Painchance 64 @@ -74,10 +70,8 @@ ACTOR MummyLeader : Mummy 45 // Mummy ghost -------------------------------------------------------------- -ACTOR MummyGhost : Mummy 69 +ACTOR MummyGhost : Mummy { - Game Heretic - SpawnID 8 +SHADOW +GHOST RenderStyle Translucent @@ -86,10 +80,8 @@ ACTOR MummyGhost : Mummy 69 // Mummy leader ghost ------------------------------------------------------- -ACTOR MummyLeaderGhost : MummyLeader 46 +ACTOR MummyLeaderGhost : MummyLeader { - Game Heretic - SpawnID 9 Species "MummyLeaderGhost" +SHADOW +GHOST @@ -116,8 +108,6 @@ ACTOR MummySoul ACTOR MummyFX1 { - Game Heretic - SpawnID 131 Radius 8 Height 14 Speed 9 diff --git a/wadsrc/static/actors/heretic/snake.txt b/wadsrc/static/actors/heretic/snake.txt index 0184da170..93ed830db 100644 --- a/wadsrc/static/actors/heretic/snake.txt +++ b/wadsrc/static/actors/heretic/snake.txt @@ -1,8 +1,6 @@ -ACTOR Snake 92 +ACTOR Snake { - Game Heretic - SpawnID 132 Health 280 Radius 22 Height 70 @@ -50,8 +48,6 @@ ACTOR Snake 92 ACTOR SnakeProjA { - Game Heretic - SpawnID 138 Radius 12 Height 8 Speed 14 @@ -82,8 +78,6 @@ ACTOR SnakeProjA ACTOR SnakeProjB : SnakeProjA { - Game Heretic - SpawnID 139 Damage 3 +NOBLOCKMAP -WINDTHRUST diff --git a/wadsrc/static/actors/heretic/wizard.txt b/wadsrc/static/actors/heretic/wizard.txt index 18188a321..f8f59a0ac 100644 --- a/wadsrc/static/actors/heretic/wizard.txt +++ b/wadsrc/static/actors/heretic/wizard.txt @@ -1,10 +1,8 @@ // Wizard -------------------------------------------------------- -ACTOR Wizard 15 +ACTOR Wizard { - Game Heretic - SpawnID 19 Health 180 Radius 16 Height 68 @@ -75,8 +73,6 @@ ACTOR Wizard 15 ACTOR WizardFX1 { - Game Heretic - SpawnID 140 Radius 10 Height 6 Speed 18 diff --git a/wadsrc/static/actors/hexen/bats.txt b/wadsrc/static/actors/hexen/bats.txt index 0d1e08081..e7c5b9de7 100644 --- a/wadsrc/static/actors/hexen/bats.txt +++ b/wadsrc/static/actors/hexen/bats.txt @@ -1,9 +1,8 @@ // Bat Spawner -------------------------------------------------------------- -ACTOR BatSpawner : SwitchableDecoration 10225 +ACTOR BatSpawner : SwitchableDecoration { - Game Hexen +NOBLOCKMAP +NOSECTOR +NOGRAVITY RenderStyle None diff --git a/wadsrc/static/actors/hexen/bishop.txt b/wadsrc/static/actors/hexen/bishop.txt index 8901a95b3..6d08d8d7b 100644 --- a/wadsrc/static/actors/hexen/bishop.txt +++ b/wadsrc/static/actors/hexen/bishop.txt @@ -1,10 +1,8 @@ // Bishop ------------------------------------------------------------------- -ACTOR Bishop 114 +ACTOR Bishop { - Game Hexen - SpawnID 19 Health 130 Radius 22 Height 65 @@ -81,7 +79,6 @@ ACTOR Bishop 114 ACTOR BishopPuff { - Game Hexen +NOBLOCKMAP +NOGRAVITY RenderStyle Translucent Alpha 0.6 @@ -99,7 +96,6 @@ ACTOR BishopPuff ACTOR BishopPainBlur { - Game Hexen +NOBLOCKMAP +NOGRAVITY RenderStyle Translucent Alpha 0.6 @@ -115,7 +111,6 @@ ACTOR BishopPainBlur ACTOR BishopFX { - Game Hexen Radius 10 Height 6 Speed 10 diff --git a/wadsrc/static/actors/hexen/blastradius.txt b/wadsrc/static/actors/hexen/blastradius.txt index ad98d7ecc..47802de5d 100644 --- a/wadsrc/static/actors/hexen/blastradius.txt +++ b/wadsrc/static/actors/hexen/blastradius.txt @@ -1,8 +1,6 @@ -ACTOR ArtiBlastRadius : CustomInventory 10110 +ACTOR ArtiBlastRadius : CustomInventory { - Game Hexen - SpawnID 74 +FLOATBOB Inventory.DefMaxAmount Inventory.PickupFlash "PickupFlash" diff --git a/wadsrc/static/actors/hexen/boostarmor.txt b/wadsrc/static/actors/hexen/boostarmor.txt index 607c8d66a..f06ffa7ca 100644 --- a/wadsrc/static/actors/hexen/boostarmor.txt +++ b/wadsrc/static/actors/hexen/boostarmor.txt @@ -1,10 +1,8 @@ // Boost Armor Artifact (Dragonskin Bracers) -------------------------------- -ACTOR ArtiBoostArmor : Inventory 8041 native +ACTOR ArtiBoostArmor : Inventory native { - Game Hexen - SpawnID 22 +COUNTITEM +FLOATBOB Inventory.DefMaxAmount diff --git a/wadsrc/static/actors/hexen/centaur.txt b/wadsrc/static/actors/hexen/centaur.txt index 8044fa2ab..7ea7f5f32 100644 --- a/wadsrc/static/actors/hexen/centaur.txt +++ b/wadsrc/static/actors/hexen/centaur.txt @@ -1,9 +1,7 @@ // Centaur ------------------------------------------------------------------ -ACTOR Centaur 107 +ACTOR Centaur { - Game Hexen - SpawnID 1 Health 200 Painchance 135 Speed 13 @@ -78,10 +76,8 @@ ACTOR Centaur 107 // Centaur Leader ----------------------------------------------------------- -ACTOR CentaurLeader : Centaur 115 +ACTOR CentaurLeader : Centaur { - Game Hexen - SpawnID 2 Health 250 PainChance 96 Speed 10 @@ -105,8 +101,6 @@ ACTOR CentaurLeader : Centaur 115 ACTOR CentaurMash : Centaur { - Game Hexen - SpawnID 103 +NOBLOOD +BLASTED -TELESTOMP diff --git a/wadsrc/static/actors/hexen/clericboss.txt b/wadsrc/static/actors/hexen/clericboss.txt index 3947f6c6d..e3b028b32 100644 --- a/wadsrc/static/actors/hexen/clericboss.txt +++ b/wadsrc/static/actors/hexen/clericboss.txt @@ -1,9 +1,8 @@ // Cleric Boss (Traductus) -------------------------------------------------- -ACTOR ClericBoss 10101 +ACTOR ClericBoss { - Game Hexen Health 800 PainChance 50 Speed 25 diff --git a/wadsrc/static/actors/hexen/clericflame.txt b/wadsrc/static/actors/hexen/clericflame.txt index 5fb4175fd..c467c8469 100644 --- a/wadsrc/static/actors/hexen/clericflame.txt +++ b/wadsrc/static/actors/hexen/clericflame.txt @@ -1,9 +1,8 @@ // The Cleric's Flame Strike ------------------------------------------------ -ACTOR CWeapFlame : ClericWeapon 8009 +ACTOR CWeapFlame : ClericWeapon { - Game Hexen +NOGRAVITY Weapon.SelectionOrder 1000 Weapon.AmmoUse 4 diff --git a/wadsrc/static/actors/hexen/clericholy.txt b/wadsrc/static/actors/hexen/clericholy.txt index e97be8b17..745d58fd8 100644 --- a/wadsrc/static/actors/hexen/clericholy.txt +++ b/wadsrc/static/actors/hexen/clericholy.txt @@ -12,10 +12,8 @@ ACTOR ClericWeaponPiece : WeaponPiece // Cleric Weapon Piece 1 ---------------------------------------------------- -ACTOR CWeaponPiece1 : ClericWeaponPiece 18 +ACTOR CWeaponPiece1 : ClericWeaponPiece { - Game Hexen - SpawnID 33 WeaponPiece.Number 1 States { @@ -27,10 +25,8 @@ ACTOR CWeaponPiece1 : ClericWeaponPiece 18 // Cleric Weapon Piece 2 ---------------------------------------------------- -ACTOR CWeaponPiece2 : ClericWeaponPiece 19 +ACTOR CWeaponPiece2 : ClericWeaponPiece { - Game Hexen - SpawnID 34 WeaponPiece.Number 2 States { @@ -42,10 +38,8 @@ ACTOR CWeaponPiece2 : ClericWeaponPiece 19 // Cleric Weapon Piece 3 ---------------------------------------------------- -ACTOR CWeaponPiece3 : ClericWeaponPiece 20 +ACTOR CWeaponPiece3 : ClericWeaponPiece { - Game Hexen - SpawnID 35 WeaponPiece.Number 3 States { @@ -72,7 +66,6 @@ ACTOR WraithvergeDrop ACTOR CWeapWraithverge : ClericWeapon native { - Game Hexen Health 3 Weapon.SelectionOrder 3000 +WEAPON.PRIMARY_USES_BOTH diff --git a/wadsrc/static/actors/hexen/clericmace.txt b/wadsrc/static/actors/hexen/clericmace.txt index 14ef4b00f..bbeda50aa 100644 --- a/wadsrc/static/actors/hexen/clericmace.txt +++ b/wadsrc/static/actors/hexen/clericmace.txt @@ -3,7 +3,6 @@ ACTOR CWeapMace : ClericWeapon { - Game Hexen Weapon.SelectionOrder 3500 Weapon.KickBack 150 Weapon.YAdjust -8 diff --git a/wadsrc/static/actors/hexen/clericstaff.txt b/wadsrc/static/actors/hexen/clericstaff.txt index e55674fa5..7a2926023 100644 --- a/wadsrc/static/actors/hexen/clericstaff.txt +++ b/wadsrc/static/actors/hexen/clericstaff.txt @@ -1,10 +1,8 @@ // The Cleric's Serpent Staff ----------------------------------------------- -ACTOR CWeapStaff : ClericWeapon 10 +ACTOR CWeapStaff : ClericWeapon { - Game Hexen - SpawnID 32 Weapon.SelectionOrder 1600 Weapon.AmmoUse1 1 Weapon.AmmoGive1 25 diff --git a/wadsrc/static/actors/hexen/demons.txt b/wadsrc/static/actors/hexen/demons.txt index 1ecb2222c..561608f64 100644 --- a/wadsrc/static/actors/hexen/demons.txt +++ b/wadsrc/static/actors/hexen/demons.txt @@ -1,10 +1,8 @@ // Demon, type 1 (green, like D'Sparil's) ----------------------------------- -ACTOR Demon1 31 +ACTOR Demon1 { - Game Hexen - SpawnID 3 Health 250 Painchance 50 Speed 13 @@ -70,8 +68,6 @@ ACTOR Demon1 31 ACTOR Demon1Mash : Demon1 { - Game Hexen - SpawnID 100 +NOBLOOD +BLASTED -TELESTOMP @@ -212,9 +208,8 @@ ACTOR Demon1FX1 // Demon, type 2 (brown) ---------------------------------------------------- -ACTOR Demon2 : Demon1 8080 +ACTOR Demon2 : Demon1 { - Game Hexen Obituary "$OB_DEMON2" Species "Demon2" States @@ -262,8 +257,6 @@ ACTOR Demon2 : Demon1 8080 ACTOR Demon2Mash : Demon2 { - Game Hexen - SpawnID 101 +NOBLOOD +BLASTED -TELESTOMP diff --git a/wadsrc/static/actors/hexen/dragon.txt b/wadsrc/static/actors/hexen/dragon.txt index 904b2f953..ea3b01293 100644 --- a/wadsrc/static/actors/hexen/dragon.txt +++ b/wadsrc/static/actors/hexen/dragon.txt @@ -1,9 +1,8 @@ // Dragon ------------------------------------------------------------------- -ACTOR Dragon 254 +ACTOR Dragon { - Game Hexen Health 640 PainChance 128 Speed 10 diff --git a/wadsrc/static/actors/hexen/ettin.txt b/wadsrc/static/actors/hexen/ettin.txt index e5104aa11..04f920aa1 100644 --- a/wadsrc/static/actors/hexen/ettin.txt +++ b/wadsrc/static/actors/hexen/ettin.txt @@ -1,10 +1,8 @@ // Ettin -------------------------------------------------------------------- -ACTOR Ettin 10030 +ACTOR Ettin { - Game Hexen - SpawnID 4 Health 175 Radius 25 Height 68 @@ -91,8 +89,6 @@ ACTOR EttinMace ACTOR EttinMash : Ettin { - Game Hexen - SpawnID 102 +NOBLOOD +NOICEDEATH RenderStyle Translucent diff --git a/wadsrc/static/actors/hexen/fighteraxe.txt b/wadsrc/static/actors/hexen/fighteraxe.txt index 502de5030..b3bea4007 100644 --- a/wadsrc/static/actors/hexen/fighteraxe.txt +++ b/wadsrc/static/actors/hexen/fighteraxe.txt @@ -1,10 +1,8 @@ // The Fighter's Axe -------------------------------------------------------- -ACTOR FWeapAxe : FighterWeapon 8010 native +ACTOR FWeapAxe : FighterWeapon native { - Game Hexen - SpawnID 27 Weapon.SelectionOrder 1500 +WEAPON.AXEBLOOD +WEAPON.AMMO_OPTIONAL +WEAPON.MELEEWEAPON Weapon.AmmoUse1 2 diff --git a/wadsrc/static/actors/hexen/fighterboss.txt b/wadsrc/static/actors/hexen/fighterboss.txt index 1caf10d12..a41dd422c 100644 --- a/wadsrc/static/actors/hexen/fighterboss.txt +++ b/wadsrc/static/actors/hexen/fighterboss.txt @@ -1,9 +1,8 @@ // Fighter Boss (Zedek) ----------------------------------------------------- -ACTOR FighterBoss 10100 +ACTOR FighterBoss { - Game Hexen health 800 PainChance 50 Speed 25 diff --git a/wadsrc/static/actors/hexen/fighterfist.txt b/wadsrc/static/actors/hexen/fighterfist.txt index 0122d7f74..43a8b9862 100644 --- a/wadsrc/static/actors/hexen/fighterfist.txt +++ b/wadsrc/static/actors/hexen/fighterfist.txt @@ -3,7 +3,6 @@ ACTOR FWeapFist : FighterWeapon { - Game Hexen +BLOODSPLATTER Weapon.SelectionOrder 3400 +WEAPON.MELEEWEAPON diff --git a/wadsrc/static/actors/hexen/fighterhammer.txt b/wadsrc/static/actors/hexen/fighterhammer.txt index 5c7d6dc25..f2b53ea93 100644 --- a/wadsrc/static/actors/hexen/fighterhammer.txt +++ b/wadsrc/static/actors/hexen/fighterhammer.txt @@ -1,10 +1,8 @@ // The Fighter's Hammer ----------------------------------------------------- -ACTOR FWeapHammer : FighterWeapon 123 +ACTOR FWeapHammer : FighterWeapon { - Game Hexen - SpawnID 28 +BLOODSPLATTER Weapon.SelectionOrder 900 +WEAPON.AMMO_OPTIONAL +WEAPON.MELEEWEAPON diff --git a/wadsrc/static/actors/hexen/fighterplayer.txt b/wadsrc/static/actors/hexen/fighterplayer.txt index 809b1f9e9..14f28b3a8 100644 --- a/wadsrc/static/actors/hexen/fighterplayer.txt +++ b/wadsrc/static/actors/hexen/fighterplayer.txt @@ -104,7 +104,6 @@ ACTOR FighterPlayer : PlayerPawn Actor BloodyFighterSkull : PlayerChunk { - Game Hexen Radius 4 Height 4 +NOBLOCKMAP diff --git a/wadsrc/static/actors/hexen/fighterquietus.txt b/wadsrc/static/actors/hexen/fighterquietus.txt index a77e851d8..fa249a932 100644 --- a/wadsrc/static/actors/hexen/fighterquietus.txt +++ b/wadsrc/static/actors/hexen/fighterquietus.txt @@ -12,10 +12,8 @@ ACTOR FighterWeaponPiece : WeaponPiece // Fighter Weapon Piece 1 --------------------------------------------------- -ACTOR FWeaponPiece1 : FighterWeaponPiece 12 +ACTOR FWeaponPiece1 : FighterWeaponPiece { - Game Hexen - SpawnID 29 WeaponPiece.Number 1 States { @@ -27,10 +25,8 @@ ACTOR FWeaponPiece1 : FighterWeaponPiece 12 // Fighter Weapon Piece 2 --------------------------------------------------- -ACTOR FWeaponPiece2 : FighterWeaponPiece 13 +ACTOR FWeaponPiece2 : FighterWeaponPiece { - Game Hexen - SpawnID 30 WeaponPiece.Number 2 States { @@ -42,10 +38,8 @@ ACTOR FWeaponPiece2 : FighterWeaponPiece 13 // Fighter Weapon Piece 3 --------------------------------------------------- -ACTOR FWeaponPiece3 : FighterWeaponPiece 16 +ACTOR FWeaponPiece3 : FighterWeaponPiece { - Game Hexen - SpawnID 31 WeaponPiece.Number 3 States { @@ -72,7 +66,6 @@ ACTOR QuietusDrop ACTOR FWeapQuietus : FighterWeapon { - Game Hexen Health 3 Weapon.SelectionOrder 2900 +WEAPON.PRIMARY_USES_BOTH diff --git a/wadsrc/static/actors/hexen/firedemon.txt b/wadsrc/static/actors/hexen/firedemon.txt index 4873e2609..5a735f106 100644 --- a/wadsrc/static/actors/hexen/firedemon.txt +++ b/wadsrc/static/actors/hexen/firedemon.txt @@ -1,10 +1,8 @@ // FireDemon ---------------------------------------------------------------- -ACTOR FireDemon 10060 +ACTOR FireDemon { - Game Hexen - SpawnID 5 Health 80 ReactionTime 8 PainChance 1 @@ -76,7 +74,6 @@ ACTOR FireDemon 10060 ACTOR FireDemonSplotch1 { - Game Hexen Health 1000 ReactionTime 8 Radius 3 @@ -112,7 +109,6 @@ ACTOR FireDemonSplotch2 : FireDemonSplotch1 ACTOR FireDemonRock1 { - Game Hexen Health 1000 ReactionTime 8 Radius 3 @@ -140,7 +136,6 @@ ACTOR FireDemonRock1 ACTOR FireDemonRock2 : FireDemonRock1 { - Game Hexen States { Spawn: @@ -158,7 +153,6 @@ ACTOR FireDemonRock2 : FireDemonRock1 ACTOR FireDemonRock3 : FireDemonRock1 { - Game Hexen States { Spawn: @@ -176,7 +170,6 @@ ACTOR FireDemonRock3 : FireDemonRock1 ACTOR FireDemonRock4 : FireDemonRock1 { - Game Hexen States { Spawn: @@ -194,7 +187,6 @@ ACTOR FireDemonRock4 : FireDemonRock1 ACTOR FireDemonRock5 : FireDemonRock1 { - Game Hexen States { Spawn: diff --git a/wadsrc/static/actors/hexen/flame.txt b/wadsrc/static/actors/hexen/flame.txt index 984c2d90c..3fc9fa595 100644 --- a/wadsrc/static/actors/hexen/flame.txt +++ b/wadsrc/static/actors/hexen/flame.txt @@ -1,9 +1,7 @@ // Temp Small Flame -------------------------------------------------------- -ACTOR FlameSmallTemp 10500 +ACTOR FlameSmallTemp { - Game Hexen - SpawnID 96 +NOTELEPORT RenderStyle Add States @@ -21,10 +19,8 @@ ACTOR FlameSmallTemp 10500 // Temp Large Flame --------------------------------------------------------- -ACTOR FlameLargeTemp 10502 +ACTOR FlameLargeTemp { - Game Hexen - SpawnID 98 +NOTELEPORT RenderStyle Add States @@ -52,10 +48,8 @@ ACTOR FlameLargeTemp 10502 // Small Flame -------------------------------------------------------------- -ACTOR FlameSmall : SwitchableDecoration 10501 +ACTOR FlameSmall : SwitchableDecoration { - Game Hexen - SpawnID 97 +NOTELEPORT +INVISIBLE Radius 15 @@ -79,16 +73,12 @@ ACTOR FlameSmall : SwitchableDecoration 10501 ACTOR FlameSmall2 : FlameSmall { - Game Hexen - SpawnID 66 } // Large Flame -------------------------------------------------------------- -ACTOR FlameLarge : SwitchableDecoration 10503 +ACTOR FlameLarge : SwitchableDecoration { - Game Hexen - SpawnID 99 +NOTELEPORT +INVISIBLE Radius 15 @@ -112,7 +102,5 @@ ACTOR FlameLarge : SwitchableDecoration 10503 ACTOR FlameLarge2 : FlameLarge { - Game Hexen - SpawnID 67 } diff --git a/wadsrc/static/actors/hexen/flechette.txt b/wadsrc/static/actors/hexen/flechette.txt index 6e12bff53..137e72cab 100644 --- a/wadsrc/static/actors/hexen/flechette.txt +++ b/wadsrc/static/actors/hexen/flechette.txt @@ -3,7 +3,6 @@ ACTOR PoisonBag { - Game Hexen Radius 5 Height 5 +NOBLOCKMAP +NOGRAVITY @@ -51,7 +50,6 @@ ACTOR FireBomb ACTOR ThrowingBomb { - Game Hexen Health 48 Speed 12 Radius 8 @@ -94,10 +92,8 @@ ACTOR ThrowingBomb // Poison Bag Artifact (Flechette) ------------------------------------------ -ACTOR ArtiPoisonBag : Inventory 8000 native +ACTOR ArtiPoisonBag : Inventory native { - Game Hexen - SpawnID 72 +FLOATBOB Inventory.DefMaxAmount Inventory.PickupFlash "PickupFlash" @@ -189,9 +185,8 @@ ACTOR PoisonCloud native // Poison Shroom ------------------------------------------------------------ -ACTOR ZPoisonShroom : PoisonBag 8104 +ACTOR ZPoisonShroom : PoisonBag { - Game Hexen Radius 6 Height 20 PainChance 255 diff --git a/wadsrc/static/actors/hexen/flies.txt b/wadsrc/static/actors/hexen/flies.txt new file mode 100644 index 000000000..e297cc289 --- /dev/null +++ b/wadsrc/static/actors/hexen/flies.txt @@ -0,0 +1,27 @@ + +// Buzzy fly ---------------------------------------------------------------- + +ACTOR LittleFly +{ + +NOBLOCKMAP +NOGRAVITY + +CANPASS + + Speed 6 + Radius 5 + Height 5 + Mass 2 + ActiveSound "FlyBuzz" + + action native A_FlySearch(); + action native A_FlyBuzz(); + + States + { + Spawn: + TNT1 A 20 A_FlySearch // [RH] Invisible when not flying + Loop + Buzz: + AFLY ABCD 3 A_FlyBuzz + Loop + } +} diff --git a/wadsrc/static/actors/hexen/fog.txt b/wadsrc/static/actors/hexen/fog.txt index 91fdfc3ee..1689b5061 100644 --- a/wadsrc/static/actors/hexen/fog.txt +++ b/wadsrc/static/actors/hexen/fog.txt @@ -1,9 +1,8 @@ // Fog Spawner -------------------------------------------------------------- -ACTOR FogSpawner 10000 +ACTOR FogSpawner { - Game Hexen +NOSECTOR +NOBLOCKMAP +FLOATBOB +NOGRAVITY @@ -21,9 +20,8 @@ ACTOR FogSpawner 10000 // Small Fog Patch ---------------------------------------------------------- -ACTOR FogPatchSmall 10001 +ACTOR FogPatchSmall { - Game Hexen Speed 1 +NOBLOCKMAP +NOGRAVITY +NOCLIP +FLOAT +NOTELEPORT @@ -45,9 +43,8 @@ ACTOR FogPatchSmall 10001 // Medium Fog Patch --------------------------------------------------------- -ACTOR FogPatchMedium : FogPatchSmall 10002 +ACTOR FogPatchMedium : FogPatchSmall { - Game Hexen States { Spawn: @@ -61,9 +58,8 @@ ACTOR FogPatchMedium : FogPatchSmall 10002 // Large Fog Patch ---------------------------------------------------------- -ACTOR FogPatchLarge : FogPatchMedium 10003 +ACTOR FogPatchLarge : FogPatchMedium { - Game Hexen States { Spawn: diff --git a/wadsrc/static/actors/hexen/healingradius.txt b/wadsrc/static/actors/hexen/healingradius.txt index e0556915b..04187c898 100644 --- a/wadsrc/static/actors/hexen/healingradius.txt +++ b/wadsrc/static/actors/hexen/healingradius.txt @@ -1,9 +1,8 @@ // Healing Radius Artifact -------------------------------------------------- -ACTOR ArtiHealingRadius : Inventory 10120 native +ACTOR ArtiHealingRadius : Inventory native { - Game Hexen +COUNTITEM +FLOATBOB Inventory.DefMaxAmount diff --git a/wadsrc/static/actors/hexen/heresiarch.txt b/wadsrc/static/actors/hexen/heresiarch.txt index 5a77240fc..90f11bfb0 100644 --- a/wadsrc/static/actors/hexen/heresiarch.txt +++ b/wadsrc/static/actors/hexen/heresiarch.txt @@ -1,9 +1,8 @@ // The Heresiarch him/itself ------------------------------------------------ -ACTOR Heresiarch 10080 native +ACTOR Heresiarch native { - Game Hexen Health 5000 Painchance 10 Speed 16 diff --git a/wadsrc/static/actors/hexen/hexenarmor.txt b/wadsrc/static/actors/hexen/hexenarmor.txt index 8aa830654..97b9e0266 100644 --- a/wadsrc/static/actors/hexen/hexenarmor.txt +++ b/wadsrc/static/actors/hexen/hexenarmor.txt @@ -1,10 +1,8 @@ // Mesh Armor (1) ----------------------------------------------------------- -ACTOR MeshArmor : HexenArmor 8005 +ACTOR MeshArmor : HexenArmor { - Game Hexen - SpawnID 68 +NOGRAVITY Health 0 // Armor class Inventory.Amount 0 @@ -19,10 +17,8 @@ ACTOR MeshArmor : HexenArmor 8005 // Falcon Shield (2) -------------------------------------------------------- -ACTOR FalconShield : HexenArmor 8006 +ACTOR FalconShield : HexenArmor { - Game Hexen - SpawnID 69 +NOGRAVITY Health 1 // Armor class Inventory.Amount 0 @@ -37,10 +33,8 @@ ACTOR FalconShield : HexenArmor 8006 // Platinum Helm (3) -------------------------------------------------------- -ACTOR PlatinumHelm : HexenArmor 8007 +ACTOR PlatinumHelm : HexenArmor { - Game Hexen - SpawnID 70 +NOGRAVITY Health 2 // Armor class Inventory.Amount 0 @@ -55,10 +49,8 @@ ACTOR PlatinumHelm : HexenArmor 8007 // Amulet of Warding (4) ---------------------------------------------------- -ACTOR AmuletOfWarding : HexenArmor 8008 +ACTOR AmuletOfWarding : HexenArmor { - Game Hexen - SpawnID 71 +NOGRAVITY Health 3 // Armor class Inventory.Amount 0 diff --git a/wadsrc/static/actors/hexen/hexendecorations.txt b/wadsrc/static/actors/hexen/hexendecorations.txt index 572c29568..4fd673a44 100644 --- a/wadsrc/static/actors/hexen/hexendecorations.txt +++ b/wadsrc/static/actors/hexen/hexendecorations.txt @@ -1,6 +1,5 @@ -ACTOR ZWingedStatue 5 +ACTOR ZWingedStatue { - Game Hexen Radius 10 Height 62 +SOLID @@ -12,9 +11,8 @@ ACTOR ZWingedStatue 5 } } -ACTOR ZRock1 6 +ACTOR ZRock1 { - Game Hexen Radius 20 Height 16 States @@ -25,9 +23,8 @@ ACTOR ZRock1 6 } } -ACTOR ZRock2 7 +ACTOR ZRock2 { - Game Hexen Radius 20 Height 16 States @@ -38,9 +35,8 @@ ACTOR ZRock2 7 } } -ACTOR ZRock3 9 +ACTOR ZRock3 { - Game Hexen Radius 20 Height 16 States @@ -51,9 +47,8 @@ ACTOR ZRock3 9 } } -ACTOR ZRock4 15 +ACTOR ZRock4 { - Game Hexen Radius 20 Height 16 States @@ -64,9 +59,8 @@ ACTOR ZRock4 15 } } -ACTOR ZChandelier 17 +ACTOR ZChandelier { - Game Hexen Radius 20 Height 60 +SPAWNCEILING @@ -79,9 +73,8 @@ ACTOR ZChandelier 17 } } -ACTOR ZChandelierUnlit 8063 +ACTOR ZChandelierUnlit { - Game Hexen Radius 20 Height 60 +SPAWNCEILING @@ -94,9 +87,8 @@ ACTOR ZChandelierUnlit 8063 } } -ACTOR ZTreeDead 24 +ACTOR ZTreeDead { - Game Hexen Radius 10 Height 96 +SOLID @@ -108,9 +100,8 @@ ACTOR ZTreeDead 24 } } -ACTOR ZTree 25 +ACTOR ZTree { - Game Hexen Radius 15 Height 128 +SOLID @@ -122,9 +113,8 @@ ACTOR ZTree 25 } } -ACTOR ZTreeSwamp150 26 +ACTOR ZTreeSwamp150 { - Game Hexen Radius 10 Height 150 +SOLID @@ -136,9 +126,8 @@ ACTOR ZTreeSwamp150 26 } } -ACTOR ZTreeSwamp120 27 +ACTOR ZTreeSwamp120 { - Game Hexen Radius 10 Height 120 +SOLID @@ -150,9 +139,8 @@ ACTOR ZTreeSwamp120 27 } } -ACTOR ZStumpBurned 28 +ACTOR ZStumpBurned { - Game Hexen Radius 12 Height 20 +SOLID @@ -164,9 +152,8 @@ ACTOR ZStumpBurned 28 } } -ACTOR ZStumpBare 29 +ACTOR ZStumpBare { - Game Hexen Radius 12 Height 20 +SOLID @@ -178,9 +165,8 @@ ACTOR ZStumpBare 29 } } -ACTOR ZStumpSwamp1 37 +ACTOR ZStumpSwamp1 { - Game Hexen Radius 20 Height 16 States @@ -191,9 +177,8 @@ ACTOR ZStumpSwamp1 37 } } -ACTOR ZStumpSwamp2 38 +ACTOR ZStumpSwamp2 { - Game Hexen Radius 20 Height 16 States @@ -204,9 +189,8 @@ ACTOR ZStumpSwamp2 38 } } -ACTOR ZShroomLarge1 39 +ACTOR ZShroomLarge1 { - Game Hexen Radius 20 Height 16 States @@ -217,9 +201,8 @@ ACTOR ZShroomLarge1 39 } } -ACTOR ZShroomLarge2 40 +ACTOR ZShroomLarge2 { - Game Hexen Radius 20 Height 16 States @@ -230,9 +213,8 @@ ACTOR ZShroomLarge2 40 } } -ACTOR ZShroomLarge3 41 +ACTOR ZShroomLarge3 { - Game Hexen Radius 20 Height 16 States @@ -243,9 +225,8 @@ ACTOR ZShroomLarge3 41 } } -ACTOR ZShroomSmall1 42 +ACTOR ZShroomSmall1 { - Game Hexen Radius 20 Height 16 States @@ -256,9 +237,8 @@ ACTOR ZShroomSmall1 42 } } -ACTOR ZShroomSmall2 44 +ACTOR ZShroomSmall2 { - Game Hexen Radius 20 Height 16 States @@ -269,9 +249,8 @@ ACTOR ZShroomSmall2 44 } } -ACTOR ZShroomSmall3 45 +ACTOR ZShroomSmall3 { - Game Hexen Radius 20 Height 16 States @@ -282,9 +261,8 @@ ACTOR ZShroomSmall3 45 } } -ACTOR ZShroomSmall4 46 +ACTOR ZShroomSmall4 { - Game Hexen Radius 20 Height 16 States @@ -295,9 +273,8 @@ ACTOR ZShroomSmall4 46 } } -ACTOR ZShroomSmall5 47 +ACTOR ZShroomSmall5 { - Game Hexen Radius 20 Height 16 States @@ -308,9 +285,8 @@ ACTOR ZShroomSmall5 47 } } -ACTOR ZStalagmitePillar 48 +ACTOR ZStalagmitePillar { - Game Hexen Radius 8 Height 138 +SOLID @@ -322,9 +298,8 @@ ACTOR ZStalagmitePillar 48 } } -ACTOR ZStalagmiteLarge 49 +ACTOR ZStalagmiteLarge { - Game Hexen Radius 8 Height 48 +SOLID @@ -336,9 +311,8 @@ ACTOR ZStalagmiteLarge 49 } } -ACTOR ZStalagmiteMedium 50 +ACTOR ZStalagmiteMedium { - Game Hexen Radius 6 Height 40 +SOLID @@ -350,9 +324,8 @@ ACTOR ZStalagmiteMedium 50 } } -ACTOR ZStalagmiteSmall 51 +ACTOR ZStalagmiteSmall { - Game Hexen Radius 8 Height 36 +SOLID @@ -364,9 +337,8 @@ ACTOR ZStalagmiteSmall 51 } } -ACTOR ZStalactiteLarge 52 +ACTOR ZStalactiteLarge { - Game Hexen Radius 8 Height 66 +SOLID @@ -380,9 +352,8 @@ ACTOR ZStalactiteLarge 52 } } -ACTOR ZStalactiteMedium 56 +ACTOR ZStalactiteMedium { - Game Hexen Radius 6 Height 50 +SOLID @@ -396,9 +367,8 @@ ACTOR ZStalactiteMedium 56 } } -ACTOR ZStalactiteSmall 57 +ACTOR ZStalactiteSmall { - Game Hexen Radius 8 Height 40 +SOLID @@ -412,9 +382,8 @@ ACTOR ZStalactiteSmall 57 } } -ACTOR ZMossCeiling1 58 +ACTOR ZMossCeiling1 { - Game Hexen Radius 20 Height 20 +SPAWNCEILING @@ -427,9 +396,8 @@ ACTOR ZMossCeiling1 58 } } -ACTOR ZMossCeiling2 59 +ACTOR ZMossCeiling2 { - Game Hexen Radius 20 Height 24 +SPAWNCEILING @@ -442,9 +410,8 @@ ACTOR ZMossCeiling2 59 } } -ACTOR ZSwampVine 60 +ACTOR ZSwampVine { - Game Hexen Radius 8 Height 52 +SOLID @@ -456,9 +423,8 @@ ACTOR ZSwampVine 60 } } -ACTOR ZCorpseKabob 61 +ACTOR ZCorpseKabob { - Game Hexen Radius 10 Height 92 +SOLID @@ -470,9 +436,8 @@ ACTOR ZCorpseKabob 61 } } -ACTOR ZCorpseSleeping 62 +ACTOR ZCorpseSleeping { - Game Hexen Radius 20 Height 16 States @@ -483,9 +448,8 @@ ACTOR ZCorpseSleeping 62 } } -ACTOR ZTombstoneRIP 63 +ACTOR ZTombstoneRIP { - Game Hexen Radius 10 Height 46 +SOLID @@ -497,9 +461,8 @@ ACTOR ZTombstoneRIP 63 } } -ACTOR ZTombstoneShane 64 +ACTOR ZTombstoneShane { - Game Hexen Radius 10 Height 46 +SOLID @@ -511,9 +474,8 @@ ACTOR ZTombstoneShane 64 } } -ACTOR ZTombstoneBigCross 65 +ACTOR ZTombstoneBigCross { - Game Hexen Radius 10 Height 46 +SOLID @@ -525,9 +487,8 @@ ACTOR ZTombstoneBigCross 65 } } -ACTOR ZTombstoneBrianR 66 +ACTOR ZTombstoneBrianR { - Game Hexen Radius 10 Height 52 +SOLID @@ -539,9 +500,8 @@ ACTOR ZTombstoneBrianR 66 } } -ACTOR ZTombstoneCrossCircle 67 +ACTOR ZTombstoneCrossCircle { - Game Hexen Radius 10 Height 52 +SOLID @@ -553,9 +513,8 @@ ACTOR ZTombstoneCrossCircle 67 } } -ACTOR ZTombstoneSmallCross 68 +ACTOR ZTombstoneSmallCross { - Game Hexen Radius 8 Height 46 +SOLID @@ -567,9 +526,8 @@ ACTOR ZTombstoneSmallCross 68 } } -ACTOR ZTombstoneBrianP 69 +ACTOR ZTombstoneBrianP { - Game Hexen Radius 8 Height 46 +SOLID @@ -581,9 +539,8 @@ ACTOR ZTombstoneBrianP 69 } } -ACTOR ZCorpseHanging 71 +ACTOR ZCorpseHanging { - Game Hexen Radius 6 Height 75 +SOLID @@ -597,9 +554,8 @@ ACTOR ZCorpseHanging 71 } } -ACTOR ZStatueGargoyleGreenTall 72 +ACTOR ZStatueGargoyleGreenTall { - Game Hexen Radius 14 Height 108 +SOLID @@ -611,9 +567,8 @@ ACTOR ZStatueGargoyleGreenTall 72 } } -ACTOR ZStatueGargoyleBlueTall 73 +ACTOR ZStatueGargoyleBlueTall { - Game Hexen Radius 14 Height 108 +SOLID @@ -625,9 +580,8 @@ ACTOR ZStatueGargoyleBlueTall 73 } } -ACTOR ZStatueGargoyleGreenShort 74 +ACTOR ZStatueGargoyleGreenShort { - Game Hexen Radius 14 Height 62 +SOLID @@ -639,9 +593,8 @@ ACTOR ZStatueGargoyleGreenShort 74 } } -ACTOR ZStatueGargoyleBlueShort 76 +ACTOR ZStatueGargoyleBlueShort { - Game Hexen Radius 14 Height 62 +SOLID @@ -653,9 +606,8 @@ ACTOR ZStatueGargoyleBlueShort 76 } } -ACTOR ZStatueGargoyleStripeTall 8044 +ACTOR ZStatueGargoyleStripeTall { - Game Hexen Radius 14 Height 108 +SOLID @@ -667,9 +619,8 @@ ACTOR ZStatueGargoyleStripeTall 8044 } } -ACTOR ZStatueGargoyleDarkRedTall 8045 +ACTOR ZStatueGargoyleDarkRedTall { - Game Hexen Radius 14 Height 108 +SOLID @@ -681,9 +632,8 @@ ACTOR ZStatueGargoyleDarkRedTall 8045 } } -ACTOR ZStatueGargoyleRedTall 8046 +ACTOR ZStatueGargoyleRedTall { - Game Hexen Radius 14 Height 108 +SOLID @@ -695,9 +645,8 @@ ACTOR ZStatueGargoyleRedTall 8046 } } -ACTOR ZStatueGargoyleTanTall 8047 +ACTOR ZStatueGargoyleTanTall { - Game Hexen Radius 14 Height 108 +SOLID @@ -709,9 +658,8 @@ ACTOR ZStatueGargoyleTanTall 8047 } } -ACTOR ZStatueGargoyleRustTall 8048 +ACTOR ZStatueGargoyleRustTall { - Game Hexen Radius 14 Height 108 +SOLID @@ -723,9 +671,8 @@ ACTOR ZStatueGargoyleRustTall 8048 } } -ACTOR ZStatueGargoyleDarkRedShort 8049 +ACTOR ZStatueGargoyleDarkRedShort { - Game Hexen Radius 14 Height 62 +SOLID @@ -737,9 +684,8 @@ ACTOR ZStatueGargoyleDarkRedShort 8049 } } -ACTOR ZStatueGargoyleRedShort 8050 +ACTOR ZStatueGargoyleRedShort { - Game Hexen Radius 14 Height 62 +SOLID @@ -751,9 +697,8 @@ ACTOR ZStatueGargoyleRedShort 8050 } } -ACTOR ZStatueGargoyleTanShort 8051 +ACTOR ZStatueGargoyleTanShort { - Game Hexen Radius 14 Height 62 +SOLID @@ -765,9 +710,8 @@ ACTOR ZStatueGargoyleTanShort 8051 } } -ACTOR ZStatueGargoyleRustShort 8052 +ACTOR ZStatueGargoyleRustShort { - Game Hexen Radius 14 Height 62 +SOLID @@ -779,9 +723,8 @@ ACTOR ZStatueGargoyleRustShort 8052 } } -ACTOR ZBannerTattered 77 +ACTOR ZBannerTattered { - Game Hexen Radius 8 Height 120 +SOLID @@ -793,9 +736,8 @@ ACTOR ZBannerTattered 77 } } -ACTOR ZTreeLarge1 78 +ACTOR ZTreeLarge1 { - Game Hexen Radius 15 Height 180 +SOLID @@ -807,9 +749,8 @@ ACTOR ZTreeLarge1 78 } } -ACTOR ZTreeLarge2 79 +ACTOR ZTreeLarge2 { - Game Hexen Radius 15 Height 180 +SOLID @@ -821,9 +762,8 @@ ACTOR ZTreeLarge2 79 } } -ACTOR ZTreeGnarled1 80 +ACTOR ZTreeGnarled1 { - Game Hexen Radius 22 Height 100 +SOLID @@ -835,9 +775,8 @@ ACTOR ZTreeGnarled1 80 } } -ACTOR ZTreeGnarled2 87 +ACTOR ZTreeGnarled2 { - Game Hexen Radius 22 Height 100 +SOLID @@ -849,9 +788,8 @@ ACTOR ZTreeGnarled2 87 } } -ACTOR ZLog 88 +ACTOR ZLog { - Game Hexen Radius 20 Height 25 +SOLID @@ -863,9 +801,8 @@ ACTOR ZLog 88 } } -ACTOR ZStalactiteIceLarge 89 +ACTOR ZStalactiteIceLarge { - Game Hexen Radius 8 Height 66 +SOLID @@ -879,9 +816,8 @@ ACTOR ZStalactiteIceLarge 89 } } -ACTOR ZStalactiteIceMedium 90 +ACTOR ZStalactiteIceMedium { - Game Hexen Radius 5 Height 50 +SOLID @@ -895,9 +831,8 @@ ACTOR ZStalactiteIceMedium 90 } } -ACTOR ZStalactiteIceSmall 91 +ACTOR ZStalactiteIceSmall { - Game Hexen Radius 4 Height 32 +SOLID @@ -911,9 +846,8 @@ ACTOR ZStalactiteIceSmall 91 } } -ACTOR ZStalactiteIceTiny 92 +ACTOR ZStalactiteIceTiny { - Game Hexen Radius 4 Height 8 +SOLID @@ -927,9 +861,8 @@ ACTOR ZStalactiteIceTiny 92 } } -ACTOR ZStalagmiteIceLarge 93 +ACTOR ZStalagmiteIceLarge { - Game Hexen Radius 8 Height 66 +SOLID @@ -941,9 +874,8 @@ ACTOR ZStalagmiteIceLarge 93 } } -ACTOR ZStalagmiteIceMedium 94 +ACTOR ZStalagmiteIceMedium { - Game Hexen Radius 5 Height 50 +SOLID @@ -955,9 +887,8 @@ ACTOR ZStalagmiteIceMedium 94 } } -ACTOR ZStalagmiteIceSmall 95 +ACTOR ZStalagmiteIceSmall { - Game Hexen Radius 4 Height 32 +SOLID @@ -969,9 +900,8 @@ ACTOR ZStalagmiteIceSmall 95 } } -ACTOR ZStalagmiteIceTiny 96 +ACTOR ZStalagmiteIceTiny { - Game Hexen Radius 4 Height 8 +SOLID @@ -983,9 +913,8 @@ ACTOR ZStalagmiteIceTiny 96 } } -ACTOR ZRockBrown1 97 +ACTOR ZRockBrown1 { - Game Hexen Radius 17 Height 72 +SOLID @@ -997,9 +926,8 @@ ACTOR ZRockBrown1 97 } } -ACTOR ZRockBrown2 98 +ACTOR ZRockBrown2 { - Game Hexen Radius 15 Height 50 +SOLID @@ -1011,9 +939,8 @@ ACTOR ZRockBrown2 98 } } -ACTOR ZRockBlack 99 +ACTOR ZRockBlack { - Game Hexen Radius 20 Height 40 +SOLID @@ -1025,9 +952,8 @@ ACTOR ZRockBlack 99 } } -ACTOR ZRubble1 100 +ACTOR ZRubble1 { - Game Hexen Radius 20 Height 16 States @@ -1038,9 +964,8 @@ ACTOR ZRubble1 100 } } -ACTOR ZRubble2 101 +ACTOR ZRubble2 { - Game Hexen Radius 20 Height 16 States @@ -1051,9 +976,8 @@ ACTOR ZRubble2 101 } } -ACTOR ZRubble3 102 +ACTOR ZRubble3 { - Game Hexen Radius 20 Height 16 States @@ -1064,9 +988,8 @@ ACTOR ZRubble3 102 } } -ACTOR ZVasePillar 103 +ACTOR ZVasePillar { - Game Hexen Radius 12 Height 54 +SOLID @@ -1078,9 +1001,8 @@ ACTOR ZVasePillar 103 } } -ACTOR ZCorpseLynched 108 +ACTOR ZCorpseLynched { - Game Hexen Radius 11 Height 95 +SOLID @@ -1094,9 +1016,8 @@ ACTOR ZCorpseLynched 108 } } -ACTOR ZCandle 119 +ACTOR ZCandle { - Game Hexen Radius 20 Height 16 +NOGRAVITY @@ -1109,9 +1030,8 @@ ACTOR ZCandle 119 } } -ACTOR ZBarrel 8100 +ACTOR ZBarrel { - Game Hexen Radius 15 Height 32 +SOLID @@ -1123,9 +1043,8 @@ ACTOR ZBarrel 8100 } } -ACTOR ZBucket 8103 +ACTOR ZBucket { - Game Hexen Radius 8 Height 72 +SOLID @@ -1139,9 +1058,8 @@ ACTOR ZBucket 8103 } } -ACTOR FireThing 8060 +ACTOR FireThing { - Game Hexen Radius 5 Height 10 +SOLID @@ -1161,9 +1079,8 @@ ACTOR FireThing 8060 } } -ACTOR BrassTorch 8061 +ACTOR BrassTorch { - Game Hexen Radius 6 Height 35 +SOLID @@ -1175,9 +1092,8 @@ ACTOR BrassTorch 8061 } } -ACTOR ZBlueCandle 8066 +ACTOR ZBlueCandle { - Game Hexen Radius 20 Height 16 +NOBLOCKMAP @@ -1189,9 +1105,8 @@ ACTOR ZBlueCandle 8066 } } -ACTOR ZIronMaiden 8067 +ACTOR ZIronMaiden { - Game Hexen Radius 12 Height 60 +SOLID @@ -1203,9 +1118,8 @@ ACTOR ZIronMaiden 8067 } } -ACTOR ZChainBit32 8071 +ACTOR ZChainBit32 { - Game Hexen Radius 4 Height 32 +SPAWNCEILING @@ -1219,9 +1133,8 @@ ACTOR ZChainBit32 8071 } } -ACTOR ZChainBit64 8072 +ACTOR ZChainBit64 { - Game Hexen Radius 4 Height 64 +SPAWNCEILING @@ -1235,9 +1148,8 @@ ACTOR ZChainBit64 8072 } } -ACTOR ZChainEndHeart 8073 +ACTOR ZChainEndHeart { - Game Hexen Radius 4 Height 32 +SPAWNCEILING @@ -1251,9 +1163,8 @@ ACTOR ZChainEndHeart 8073 } } -ACTOR ZChainEndHook1 8074 +ACTOR ZChainEndHook1 { - Game Hexen Radius 4 Height 32 +SPAWNCEILING @@ -1267,9 +1178,8 @@ ACTOR ZChainEndHook1 8074 } } -ACTOR ZChainEndHook2 8075 +ACTOR ZChainEndHook2 { - Game Hexen Radius 4 Height 32 +SPAWNCEILING @@ -1283,9 +1193,8 @@ ACTOR ZChainEndHook2 8075 } } -ACTOR ZChainEndSpike 8076 +ACTOR ZChainEndSpike { - Game Hexen Radius 4 Height 32 +SPAWNCEILING @@ -1299,9 +1208,8 @@ ACTOR ZChainEndSpike 8076 } } -ACTOR ZChainEndSkull 8077 +ACTOR ZChainEndSkull { - Game Hexen Radius 4 Height 32 +SPAWNCEILING @@ -1315,9 +1223,8 @@ ACTOR ZChainEndSkull 8077 } } -ACTOR TableShit1 8500 +ACTOR TableShit1 { - Game Hexen Radius 20 Height 16 +NOBLOCKMAP @@ -1329,9 +1236,8 @@ ACTOR TableShit1 8500 } } -ACTOR TableShit2 8501 +ACTOR TableShit2 { - Game Hexen Radius 20 Height 16 +NOBLOCKMAP @@ -1343,9 +1249,8 @@ ACTOR TableShit2 8501 } } -ACTOR TableShit3 8502 +ACTOR TableShit3 { - Game Hexen Radius 20 Height 16 +NOBLOCKMAP @@ -1357,9 +1262,8 @@ ACTOR TableShit3 8502 } } -ACTOR TableShit4 8503 +ACTOR TableShit4 { - Game Hexen Radius 20 Height 16 +NOBLOCKMAP @@ -1371,9 +1275,8 @@ ACTOR TableShit4 8503 } } -ACTOR TableShit5 8504 +ACTOR TableShit5 { - Game Hexen Radius 20 Height 16 +NOBLOCKMAP @@ -1385,9 +1288,8 @@ ACTOR TableShit5 8504 } } -ACTOR TableShit6 8505 +ACTOR TableShit6 { - Game Hexen Radius 20 Height 16 +NOBLOCKMAP @@ -1399,9 +1301,8 @@ ACTOR TableShit6 8505 } } -ACTOR TableShit7 8506 +ACTOR TableShit7 { - Game Hexen Radius 20 Height 16 +NOBLOCKMAP @@ -1413,9 +1314,8 @@ ACTOR TableShit7 8506 } } -ACTOR TableShit8 8507 +ACTOR TableShit8 { - Game Hexen Radius 20 Height 16 +NOBLOCKMAP @@ -1427,9 +1327,8 @@ ACTOR TableShit8 8507 } } -ACTOR TableShit9 8508 +ACTOR TableShit9 { - Game Hexen Radius 20 Height 16 +NOBLOCKMAP @@ -1441,9 +1340,8 @@ ACTOR TableShit9 8508 } } -ACTOR TableShit10 8509 +ACTOR TableShit10 { - Game Hexen Radius 20 Height 16 +NOBLOCKMAP @@ -1455,9 +1353,8 @@ ACTOR TableShit10 8509 } } -ACTOR TeleSmoke 140 +ACTOR TeleSmoke { - Game Hexen Radius 20 Height 16 +NOGRAVITY diff --git a/wadsrc/static/actors/hexen/hexenkeys.txt b/wadsrc/static/actors/hexen/hexenkeys.txt index e58693e69..54e0a52ec 100644 --- a/wadsrc/static/actors/hexen/hexenkeys.txt +++ b/wadsrc/static/actors/hexen/hexenkeys.txt @@ -5,10 +5,8 @@ ACTOR HexenKey : Key Height 20 } -ACTOR KeySteel : HexenKey 8030 +ACTOR KeySteel : HexenKey { - Game Hexen - SpawnID 85 Inventory.Icon KEYSLOT1 Inventory.PickupMessage "$TXT_KEY_STEEL" States @@ -19,10 +17,8 @@ ACTOR KeySteel : HexenKey 8030 } } -ACTOR KeyCave : HexenKey 8031 +ACTOR KeyCave : HexenKey { - Game Hexen - SpawnID 86 Inventory.Icon KEYSLOT2 Inventory.PickupMessage "$TXT_KEY_CAVE" States @@ -33,10 +29,8 @@ ACTOR KeyCave : HexenKey 8031 } } -ACTOR KeyAxe : HexenKey 8032 +ACTOR KeyAxe : HexenKey { - Game Hexen - SpawnID 87 Inventory.Icon KEYSLOT3 Inventory.PickupMessage "$TXT_KEY_AXE" States @@ -47,10 +41,8 @@ ACTOR KeyAxe : HexenKey 8032 } } -ACTOR KeyFire : HexenKey 8033 +ACTOR KeyFire : HexenKey { - Game Hexen - SpawnID 88 Inventory.Icon KEYSLOT4 Inventory.PickupMessage "$TXT_KEY_FIRE" States @@ -61,10 +53,8 @@ ACTOR KeyFire : HexenKey 8033 } } -ACTOR KeyEmerald : HexenKey 8034 +ACTOR KeyEmerald : HexenKey { - Game Hexen - SpawnID 89 Inventory.Icon KEYSLOT5 Inventory.PickupMessage "$TXT_KEY_EMERALD" States @@ -75,10 +65,8 @@ ACTOR KeyEmerald : HexenKey 8034 } } -ACTOR KeyDungeon : HexenKey 8035 +ACTOR KeyDungeon : HexenKey { - Game Hexen - SpawnID 90 Inventory.Icon KEYSLOT6 Inventory.PickupMessage "$TXT_KEY_DUNGEON" States @@ -89,10 +77,8 @@ ACTOR KeyDungeon : HexenKey 8035 } } -ACTOR KeySilver : HexenKey 8036 +ACTOR KeySilver : HexenKey { - Game Hexen - SpawnID 91 Inventory.Icon KEYSLOT7 Inventory.PickupMessage "$TXT_KEY_SILVER" States @@ -103,10 +89,8 @@ ACTOR KeySilver : HexenKey 8036 } } -ACTOR KeyRusted : HexenKey 8037 +ACTOR KeyRusted : HexenKey { - Game Hexen - SpawnID 92 Inventory.Icon KEYSLOT8 Inventory.PickupMessage "$TXT_KEY_RUSTED" States @@ -117,10 +101,8 @@ ACTOR KeyRusted : HexenKey 8037 } } -ACTOR KeyHorn : HexenKey 8038 +ACTOR KeyHorn : HexenKey { - Game Hexen - SpawnID 93 Inventory.Icon KEYSLOT9 Inventory.PickupMessage "$TXT_KEY_HORN" States @@ -131,10 +113,8 @@ ACTOR KeyHorn : HexenKey 8038 } } -ACTOR KeySwamp : HexenKey 8039 +ACTOR KeySwamp : HexenKey { - Game Hexen - SpawnID 94 Inventory.Icon KEYSLOTA Inventory.PickupMessage "$TXT_KEY_SWAMP" States @@ -145,9 +125,8 @@ ACTOR KeySwamp : HexenKey 8039 } } -ACTOR KeyCastle : HexenKey 8200 +ACTOR KeyCastle : HexenKey { - Game Hexen Inventory.Icon KEYSLOTB Inventory.PickupMessage "$TXT_KEY_CASTLE" States diff --git a/wadsrc/static/actors/hexen/hexenspecialdecs.txt b/wadsrc/static/actors/hexen/hexenspecialdecs.txt index e36451e7f..33ce577c7 100644 --- a/wadsrc/static/actors/hexen/hexenspecialdecs.txt +++ b/wadsrc/static/actors/hexen/hexenspecialdecs.txt @@ -1,9 +1,8 @@ // Winged Statue (no skull) ------------------------------------------------- -ACTOR ZWingedStatueNoSkull : SwitchingDecoration 9011 +ACTOR ZWingedStatueNoSkull : SwitchingDecoration { - Game Hexen Radius 10 Height 62 +SOLID @@ -21,9 +20,8 @@ ACTOR ZWingedStatueNoSkull : SwitchingDecoration 9011 // Gem pedestal ------------------------------------------------------------- -ACTOR ZGemPedestal : SwitchingDecoration 9012 +ACTOR ZGemPedestal : SwitchingDecoration { - Game Hexen Radius 10 Height 40 +SOLID @@ -41,9 +39,8 @@ ACTOR ZGemPedestal : SwitchingDecoration 9012 // Tree (destructible) ------------------------------------------------------ -ACTOR TreeDestructible 8062 +ACTOR TreeDestructible { - Game Hexen Health 70 Radius 15 Height 180 @@ -77,9 +74,8 @@ ACTOR TreeDestructible 8062 // Pottery1 ------------------------------------------------------------------ -ACTOR Pottery1 104 native +ACTOR Pottery1 native { - Game Hexen Health 15 Speed 10 Height 32 @@ -102,9 +98,8 @@ ACTOR Pottery1 104 native // Pottery2 ----------------------------------------------------------------- -ACTOR Pottery2 : Pottery1 105 +ACTOR Pottery2 : Pottery1 { - Game Hexen Height 25 States { @@ -116,9 +111,8 @@ ACTOR Pottery2 : Pottery1 105 // Pottery3 ----------------------------------------------------------------- -ACTOR Pottery3 : Pottery1 106 +ACTOR Pottery3 : Pottery1 { - Game Hexen Height 25 States { @@ -175,9 +169,8 @@ ACTOR PotteryBit // Blood pool --------------------------------------------------------------- -ACTOR BloodPool 111 +ACTOR BloodPool { - Game Hexen States { Spawn: @@ -189,9 +182,8 @@ ACTOR BloodPool 111 // Lynched corpse (no heart) ------------------------------------------------ -ACTOR ZCorpseLynchedNoHeart 109 native +ACTOR ZCorpseLynchedNoHeart native { - Game Hexen Radius 10 Height 100 +SOLID +SPAWNCEILING +NOGRAVITY @@ -255,9 +247,8 @@ ACTOR CorpseBit // Corpse (sitting, splatterable) ------------------------------------------- -ACTOR ZCorpseSitting 110 +ACTOR ZCorpseSitting { - Game Hexen Health 30 Radius 15 Height 35 @@ -281,9 +272,8 @@ ACTOR ZCorpseSitting 110 // Leaf Spawner ------------------------------------------------------------- -ACTOR LeafSpawner 113 +ACTOR LeafSpawner { - Game Hexen +NOBLOCKMAP +NOSECTOR +INVISIBLE @@ -357,9 +347,8 @@ ACTOR Leaf2 : Leaf1 // Twined torch ------------------------------------------------------------- -ACTOR ZTwinedTorch : SwitchableDecoration 116 +ACTOR ZTwinedTorch : SwitchableDecoration { - Game Hexen Radius 10 Height 64 +SOLID @@ -376,9 +365,8 @@ ACTOR ZTwinedTorch : SwitchableDecoration 116 } } -ACTOR ZTwinedTorchUnlit : ZTwinedTorch 117 +ACTOR ZTwinedTorchUnlit : ZTwinedTorch { - Game Hexen States { Spawn: @@ -389,9 +377,8 @@ ACTOR ZTwinedTorchUnlit : ZTwinedTorch 117 // Wall torch --------------------------------------------------------------- -ACTOR ZWallTorch : SwitchableDecoration 54 +ACTOR ZWallTorch : SwitchableDecoration { - Game Hexen +NOBLOCKMAP +NOGRAVITY +FIXMAPTHINGPOS @@ -409,9 +396,8 @@ ACTOR ZWallTorch : SwitchableDecoration 54 } } -ACTOR ZWallTorchUnlit : ZWallTorch 55 +ACTOR ZWallTorchUnlit : ZWallTorch { - Game Hexen States { Spawn: @@ -422,9 +408,8 @@ ACTOR ZWallTorchUnlit : ZWallTorch 55 // Shrub1 ------------------------------------------------------------------- -ACTOR ZShrub1 8101 +ACTOR ZShrub1 { - Game Hexen Radius 8 Height 24 Health 20 @@ -447,9 +432,8 @@ ACTOR ZShrub1 8101 // Shrub2 ------------------------------------------------------------------- -ACTOR ZShrub2 8102 +ACTOR ZShrub2 { - Game Hexen Radius 16 Height 40 Health 20 @@ -473,9 +457,8 @@ ACTOR ZShrub2 8102 // Fire Bull ---------------------------------------------------------------- -ACTOR ZFireBull : SwitchableDecoration 8042 +ACTOR ZFireBull : SwitchableDecoration { - Game Hexen Radius 20 Height 80 +SOLID @@ -494,9 +477,8 @@ ACTOR ZFireBull : SwitchableDecoration 8042 } } -ACTOR ZFireBullUnlit : ZFireBull 8043 +ACTOR ZFireBullUnlit : ZFireBull { - Game Hexen States { Spawn: @@ -507,9 +489,8 @@ ACTOR ZFireBullUnlit : ZFireBull 8043 // Suit of armor ------------------------------------------------------------ -ACTOR ZSuitOfArmor 8064 +ACTOR ZSuitOfArmor { - Game Hexen Health 60 Radius 16 Height 72 @@ -567,9 +548,8 @@ ACTOR ZArmorChunk // Bell --------------------------------------------------------------------- -ACTOR ZBell 8065 native +ACTOR ZBell native { - Game Hexen Health 5 Radius 56 Height 120 @@ -627,9 +607,8 @@ ACTOR ZBell 8065 native // "Christmas" Tree --------------------------------------------------------- -ACTOR ZXmasTree 8068 +ACTOR ZXmasTree { - Game Hexen Radius 11 Height 130 Health 20 @@ -658,9 +637,8 @@ ACTOR ZXmasTree 8068 // Cauldron ----------------------------------------------------------------- -ACTOR ZCauldron : SwitchableDecoration 8069 +ACTOR ZCauldron : SwitchableDecoration { - Game Hexen Radius 12 Height 26 +SOLID @@ -677,9 +655,8 @@ ACTOR ZCauldron : SwitchableDecoration 8069 } } -ACTOR ZCauldronUnlit : ZCauldron 8070 +ACTOR ZCauldronUnlit : ZCauldron { - Game Hexen States { Spawn: @@ -692,8 +669,6 @@ ACTOR ZCauldronUnlit : ZCauldron 8070 ACTOR HWaterDrip { - Game Hexen - SpawnID 95 +MISSILE +LOWGRAVITY +NOTELEPORT diff --git a/wadsrc/static/actors/hexen/iceguy.txt b/wadsrc/static/actors/hexen/iceguy.txt index 0a5fdce3f..a972c48e0 100644 --- a/wadsrc/static/actors/hexen/iceguy.txt +++ b/wadsrc/static/actors/hexen/iceguy.txt @@ -1,10 +1,8 @@ // Ice Guy ------------------------------------------------------------------ -ACTOR IceGuy 8020 +ACTOR IceGuy { - Game Hexen - SpawnID 20 Health 120 PainChance 144 Speed 14 diff --git a/wadsrc/static/actors/hexen/korax.txt b/wadsrc/static/actors/hexen/korax.txt index 3c857df95..e0d634bbe 100644 --- a/wadsrc/static/actors/hexen/korax.txt +++ b/wadsrc/static/actors/hexen/korax.txt @@ -1,6 +1,5 @@ -ACTOR Korax 10200 +ACTOR Korax { - Game Hexen Health 5000 Painchance 20 Speed 10 diff --git a/wadsrc/static/actors/hexen/mageboss.txt b/wadsrc/static/actors/hexen/mageboss.txt index 7e11d2cd1..16aaee985 100644 --- a/wadsrc/static/actors/hexen/mageboss.txt +++ b/wadsrc/static/actors/hexen/mageboss.txt @@ -1,9 +1,8 @@ // Mage Boss (Menelkir) ----------------------------------------------------- -ACTOR MageBoss 10102 +ACTOR MageBoss { - Game Hexen Health 800 PainChance 50 Speed 25 diff --git a/wadsrc/static/actors/hexen/magecone.txt b/wadsrc/static/actors/hexen/magecone.txt index b5dfdb546..ac37f98b8 100644 --- a/wadsrc/static/actors/hexen/magecone.txt +++ b/wadsrc/static/actors/hexen/magecone.txt @@ -1,10 +1,8 @@ // The Mage's Frost Cone ---------------------------------------------------- -ACTOR MWeapFrost : MageWeapon 53 +ACTOR MWeapFrost : MageWeapon { - Game Hexen - SpawnID 36 +BLOODSPLATTER Weapon.SelectionOrder 1700 Weapon.AmmoUse1 3 @@ -79,8 +77,6 @@ ACTOR FrostMissile native ACTOR IceShard : FrostMissile { - Game Hexen - SpawnID 65 DamageType "Ice" -ACTIVATEIMPACT -ACTIVATEPCROSS diff --git a/wadsrc/static/actors/hexen/magelightning.txt b/wadsrc/static/actors/hexen/magelightning.txt index 85402f223..daf65df95 100644 --- a/wadsrc/static/actors/hexen/magelightning.txt +++ b/wadsrc/static/actors/hexen/magelightning.txt @@ -1,9 +1,8 @@ // The Mage's Lightning Arc of Death ---------------------------------------- -ACTOR MWeapLightning : MageWeapon 8040 +ACTOR MWeapLightning : MageWeapon { - Game Hexen +NOGRAVITY Weapon.SelectionOrder 1100 Weapon.AmmoUse1 5 diff --git a/wadsrc/static/actors/hexen/magestaff.txt b/wadsrc/static/actors/hexen/magestaff.txt index aa75ed446..4d56432bd 100644 --- a/wadsrc/static/actors/hexen/magestaff.txt +++ b/wadsrc/static/actors/hexen/magestaff.txt @@ -12,10 +12,8 @@ ACTOR MageWeaponPiece : WeaponPiece // Mage Weapon Piece 1 ------------------------------------------------------ -ACTOR MWeaponPiece1 : MageWeaponPiece 21 +ACTOR MWeaponPiece1 : MageWeaponPiece { - Game Hexen - SpawnID 37 WeaponPiece.Number 1 States { @@ -27,10 +25,8 @@ ACTOR MWeaponPiece1 : MageWeaponPiece 21 // Mage Weapon Piece 2 ------------------------------------------------------ -ACTOR MWeaponPiece2 : MageWeaponPiece 22 +ACTOR MWeaponPiece2 : MageWeaponPiece { - Game Hexen - SpawnID 38 WeaponPiece.Number 2 States { @@ -42,10 +38,8 @@ ACTOR MWeaponPiece2 : MageWeaponPiece 22 // Mage Weapon Piece 3 ------------------------------------------------------ -ACTOR MWeaponPiece3 : MageWeaponPiece 23 +ACTOR MWeaponPiece3 : MageWeaponPiece { - Game Hexen - SpawnID 39 WeaponPiece.Number 3 States { @@ -72,7 +66,6 @@ ACTOR BloodscourgeDrop ACTOR MWeapBloodscourge : MageWeapon native { - Game Hexen Health 3 Weapon.SelectionOrder 3100 Weapon.AmmoUse1 15 diff --git a/wadsrc/static/actors/hexen/magewand.txt b/wadsrc/static/actors/hexen/magewand.txt index aaac9e5da..a27d6c446 100644 --- a/wadsrc/static/actors/hexen/magewand.txt +++ b/wadsrc/static/actors/hexen/magewand.txt @@ -3,7 +3,6 @@ ACTOR MWeapWand : MageWeapon { - Game Hexen Weapon.SelectionOrder 3600 Weapon.KickBack 0 Weapon.YAdjust 9 diff --git a/wadsrc/static/actors/hexen/mana.txt b/wadsrc/static/actors/hexen/mana.txt index ee7ddd37c..8123c3eb5 100644 --- a/wadsrc/static/actors/hexen/mana.txt +++ b/wadsrc/static/actors/hexen/mana.txt @@ -1,9 +1,7 @@ // Blue mana ---------------------------------------------------------------- -ACTOR Mana1 : Ammo 122 +ACTOR Mana1 : Ammo { - Game Hexen - SpawnID 11 Inventory.Amount 15 Inventory.MaxAmount 200 Ammo.BackpackAmount 15 @@ -23,10 +21,8 @@ ACTOR Mana1 : Ammo 122 // Green mana --------------------------------------------------------------- -ACTOR Mana2 : Ammo 124 +ACTOR Mana2 : Ammo { - Game Hexen - SpawnID 12 Inventory.Amount 15 Inventory.MaxAmount 200 Ammo.BackpackAmount 15 @@ -46,10 +42,8 @@ ACTOR Mana2 : Ammo 124 // Combined mana ------------------------------------------------------------ -ACTOR Mana3 : CustomInventory 8004 +ACTOR Mana3 : CustomInventory { - Game Hexen - SpawnID 75 Radius 8 Height 8 +FLOATBOB @@ -68,10 +62,8 @@ ACTOR Mana3 : CustomInventory 8004 // Boost Mana Artifact Krater of Might ------------------------------------ -ACTOR ArtiBoostMana : CustomInventory 8003 +ACTOR ArtiBoostMana : CustomInventory { - Game Hexen - SpawnID 26 +FLOATBOB +COUNTITEM +INVENTORY.INVBAR diff --git a/wadsrc/static/actors/hexen/puzzleitems.txt b/wadsrc/static/actors/hexen/puzzleitems.txt index dd15fc8fd..b28470580 100644 --- a/wadsrc/static/actors/hexen/puzzleitems.txt +++ b/wadsrc/static/actors/hexen/puzzleitems.txt @@ -1,10 +1,8 @@ // Yorick's Skull ----------------------------------------------------------- -ACTOR PuzzSkull : PuzzleItem 9002 +ACTOR PuzzSkull : PuzzleItem { - Game Hexen - SpawnID 76 PuzzleItem.Number 0 Inventory.Icon ARTISKLL Inventory.PickupMessage "$TXT_ARTIPUZZSKULL" @@ -20,10 +18,8 @@ ACTOR PuzzSkull : PuzzleItem 9002 // Heart of D'Sparil -------------------------------------------------------- -ACTOR PuzzGemBig : PuzzleItem 9003 +ACTOR PuzzGemBig : PuzzleItem { - Game Hexen - SpawnID 77 PuzzleItem.Number 1 Inventory.Icon ARTIBGEM Inventory.PickupMessage "$TXT_ARTIPUZZGEMBIG" @@ -38,10 +34,8 @@ ACTOR PuzzGemBig : PuzzleItem 9003 // Red Gem (Ruby Planet) ---------------------------------------------------- -ACTOR PuzzGemRed : PuzzleItem 9004 +ACTOR PuzzGemRed : PuzzleItem { - Game Hexen - SpawnID 78 PuzzleItem.Number 2 Inventory.Icon ARTIGEMR Inventory.PickupMessage "$TXT_ARTIPUZZGEMRED" @@ -57,10 +51,8 @@ ACTOR PuzzGemRed : PuzzleItem 9004 // Green Gem 1 (Emerald Planet) --------------------------------------------- -ACTOR PuzzGemGreen1 : PuzzleItem 9005 +ACTOR PuzzGemGreen1 : PuzzleItem { - Game Hexen - SpawnID 79 PuzzleItem.Number 3 Inventory.Icon ARTIGEMG Inventory.PickupMessage "$TXT_ARTIPUZZGEMGREEN1" @@ -76,10 +68,8 @@ ACTOR PuzzGemGreen1 : PuzzleItem 9005 // Green Gem 2 (Emerald Planet) --------------------------------------------- -ACTOR PuzzGemGreen2 : PuzzleItem 9009 +ACTOR PuzzGemGreen2 : PuzzleItem { - Game Hexen - SpawnID 80 PuzzleItem.Number 4 Inventory.Icon ARTIGMG2 Inventory.PickupMessage "$TXT_ARTIPUZZGEMGREEN2" @@ -95,10 +85,8 @@ ACTOR PuzzGemGreen2 : PuzzleItem 9009 // Blue Gem 1 (Sapphire Planet) --------------------------------------------- -ACTOR PuzzGemBlue1 : PuzzleItem 9006 +ACTOR PuzzGemBlue1 : PuzzleItem { - Game Hexen - SpawnID 81 PuzzleItem.Number 5 Inventory.Icon ARTIGEMB Inventory.PickupMessage "$TXT_ARTIPUZZGEMBLUE1" @@ -114,10 +102,8 @@ ACTOR PuzzGemBlue1 : PuzzleItem 9006 // Blue Gem 2 (Sapphire Planet) --------------------------------------------- -ACTOR PuzzGemBlue2 : PuzzleItem 9010 +ACTOR PuzzGemBlue2 : PuzzleItem { - Game Hexen - SpawnID 82 PuzzleItem.Number 6 Inventory.Icon ARTIGMB2 Inventory.PickupMessage "$TXT_ARTIPUZZGEMBLUE2" @@ -133,10 +119,8 @@ ACTOR PuzzGemBlue2 : PuzzleItem 9010 // Book 1 (Daemon Codex) ---------------------------------------------------- -ACTOR PuzzBook1 : PuzzleItem 9007 +ACTOR PuzzBook1 : PuzzleItem { - Game Hexen - SpawnID 83 PuzzleItem.Number 7 Inventory.Icon ARTIBOK1 Inventory.PickupMessage "$TXT_ARTIPUZZBOOK1" @@ -152,10 +136,8 @@ ACTOR PuzzBook1 : PuzzleItem 9007 // Book 2 (Liber Oscura) ---------------------------------------------------- -ACTOR PuzzBook2 : PuzzleItem 9008 +ACTOR PuzzBook2 : PuzzleItem { - Game Hexen - SpawnID 84 PuzzleItem.Number 8 Inventory.Icon ARTIBOK2 Inventory.PickupMessage "$TXT_ARTIPUZZBOOK2" @@ -172,9 +154,8 @@ ACTOR PuzzBook2 : PuzzleItem 9008 // Flame Mask --------------------------------------------------------------- -ACTOR PuzzFlameMask : PuzzleItem 9014 +ACTOR PuzzFlameMask : PuzzleItem { - Game Hexen PuzzleItem.Number 9 Inventory.Icon ARTISKL2 Inventory.PickupMessage "$TXT_ARTIPUZZSKULL2" @@ -189,9 +170,8 @@ ACTOR PuzzFlameMask : PuzzleItem 9014 // Fighter Weapon (Glaive Seal) --------------------------------------------- -ACTOR PuzzFWeapon : PuzzleItem 9015 +ACTOR PuzzFWeapon : PuzzleItem { - Game Hexen PuzzleItem.Number 10 Inventory.Icon ARTIFWEP Inventory.PickupMessage "$TXT_ARTIPUZZFWEAPON" @@ -207,9 +187,8 @@ ACTOR PuzzFWeapon : PuzzleItem 9015 // Cleric Weapon (Holy Relic) ----------------------------------------------- -ACTOR PuzzCWeapon : PuzzleItem 9016 +ACTOR PuzzCWeapon : PuzzleItem { - Game Hexen PuzzleItem.Number 11 Inventory.Icon ARTICWEP Inventory.PickupMessage "$TXT_ARTIPUZZCWEAPON" @@ -225,9 +204,8 @@ ACTOR PuzzCWeapon : PuzzleItem 9016 // Mage Weapon (Sigil of the Magus) ----------------------------------------- -ACTOR PuzzMWeapon : PuzzleItem 9017 +ACTOR PuzzMWeapon : PuzzleItem { - Game Hexen PuzzleItem.Number 12 Inventory.Icon ARTIMWEP Inventory.PickupMessage "$TXT_ARTIPUZZMWEAPON" @@ -242,9 +220,8 @@ ACTOR PuzzMWeapon : PuzzleItem 9017 // Clock Gear 1 ------------------------------------------------------------- -ACTOR PuzzGear1 : PuzzleItem 9018 +ACTOR PuzzGear1 : PuzzleItem { - Game Hexen PuzzleItem.Number 13 Inventory.Icon ARTIGEAR Inventory.PickupMessage "$TXT_ARTIPUZZGEAR" @@ -260,9 +237,8 @@ ACTOR PuzzGear1 : PuzzleItem 9018 // Clock Gear 2 ------------------------------------------------------------- -ACTOR PuzzGear2 : PuzzleItem 9019 +ACTOR PuzzGear2 : PuzzleItem { - Game Hexen PuzzleItem.Number 14 Inventory.Icon ARTIGER2 Inventory.PickupMessage "$TXT_ARTIPUZZGEAR" @@ -278,9 +254,8 @@ ACTOR PuzzGear2 : PuzzleItem 9019 // Clock Gear 3 ------------------------------------------------------------- -ACTOR PuzzGear3 : PuzzleItem 9020 +ACTOR PuzzGear3 : PuzzleItem { - Game Hexen PuzzleItem.Number 15 Inventory.Icon ARTIGER3 Inventory.PickupMessage "$TXT_ARTIPUZZGEAR" @@ -296,9 +271,8 @@ ACTOR PuzzGear3 : PuzzleItem 9020 // Clock Gear 4 ------------------------------------------------------------- -ACTOR PuzzGear4 : PuzzleItem 9021 +ACTOR PuzzGear4 : PuzzleItem { - Game Hexen PuzzleItem.Number 16 Inventory.Icon ARTIGER4 Inventory.PickupMessage "$TXT_ARTIPUZZGEAR" diff --git a/wadsrc/static/actors/hexen/scriptprojectiles.txt b/wadsrc/static/actors/hexen/scriptprojectiles.txt index 9ad06b07b..d4d79f6e7 100644 --- a/wadsrc/static/actors/hexen/scriptprojectiles.txt +++ b/wadsrc/static/actors/hexen/scriptprojectiles.txt @@ -2,8 +2,6 @@ ACTOR FireBall { - Game Hexen - SpawnID 10 Speed 2 Radius 8 Height 8 @@ -28,8 +26,6 @@ ACTOR FireBall ACTOR Arrow { - Game Hexen - SpawnID 50 Speed 6 Radius 8 Height 4 @@ -51,8 +47,6 @@ ACTOR Arrow ACTOR Dart { - Game Hexen - SpawnID 51 Speed 6 Radius 8 Height 4 @@ -74,8 +68,6 @@ ACTOR Dart ACTOR PoisonDart : Dart { - Game Hexen - SpawnID 52 PoisonDamage 20 } @@ -83,8 +75,6 @@ ACTOR PoisonDart : Dart ACTOR RipperBall { - Game Hexen - SpawnID 53 Speed 6 Radius 8 Damage 2 @@ -114,8 +104,6 @@ ACTOR RipperBall ACTOR ProjectileBlade { - Game Hexen - SpawnID 64 Speed 6 Radius 6 Height 6 diff --git a/wadsrc/static/actors/hexen/serpent.txt b/wadsrc/static/actors/hexen/serpent.txt index 41d69fe1b..b0337ccbe 100644 --- a/wadsrc/static/actors/hexen/serpent.txt +++ b/wadsrc/static/actors/hexen/serpent.txt @@ -1,10 +1,8 @@ // Serpent ------------------------------------------------------------------ -ACTOR Serpent 121 +ACTOR Serpent { - Game Hexen - SpawnID 6 Health 90 PainChance 96 Speed 12 @@ -102,10 +100,8 @@ ACTOR Serpent 121 // Serpent Leader ----------------------------------------------------------- -ACTOR SerpentLeader : Serpent 120 +ACTOR SerpentLeader : Serpent { - Game Hexen - SpawnID 7 Mass 200 Obituary "$OB_SERPENT" States diff --git a/wadsrc/static/actors/hexen/speedboots.txt b/wadsrc/static/actors/hexen/speedboots.txt index 5fd6703b8..45c78472b 100644 --- a/wadsrc/static/actors/hexen/speedboots.txt +++ b/wadsrc/static/actors/hexen/speedboots.txt @@ -1,9 +1,7 @@ -ACTOR ArtiSpeedBoots : PowerupGiver 8002 +ACTOR ArtiSpeedBoots : PowerupGiver { - Game Hexen - SpawnID 13 +FLOATBOB +COUNTITEM +INVENTORY.PICKUPFLASH diff --git a/wadsrc/static/actors/hexen/spike.txt b/wadsrc/static/actors/hexen/spike.txt index 13b1a9c9b..9ca580970 100644 --- a/wadsrc/static/actors/hexen/spike.txt +++ b/wadsrc/static/actors/hexen/spike.txt @@ -79,10 +79,8 @@ ACTOR ThrustFloor native // Spike up ----------------------------------------------------------------- -ACTOR ThrustFloorUp : ThrustFloor 10091 +ACTOR ThrustFloorUp : ThrustFloor { - Game Hexen - SpawnID 104 +SOLID +NOTELEPORT +FLOORCLIP States @@ -94,12 +92,10 @@ ACTOR ThrustFloorUp : ThrustFloor 10091 // Spike down --------------------------------------------------------------- -ACTOR ThrustFloorDown : ThrustFloor 10090 +ACTOR ThrustFloorDown : ThrustFloor { - Game Hexen +NOTELEPORT +FLOORCLIP +INVISIBLE - SpawnID 105 States { Spawn: diff --git a/wadsrc/static/actors/hexen/summon.txt b/wadsrc/static/actors/hexen/summon.txt index a4b3b8584..ce76ceb77 100644 --- a/wadsrc/static/actors/hexen/summon.txt +++ b/wadsrc/static/actors/hexen/summon.txt @@ -1,10 +1,8 @@ // Dark Servant Artifact ---------------------------------------------------- -ACTOR ArtiDarkServant : Inventory 86 native +ACTOR ArtiDarkServant : Inventory native { - Game Hexen - SpawnID 16 +COUNTITEM +FLOATBOB Inventory.RespawnTics 4230 @@ -27,7 +25,6 @@ ACTOR ArtiDarkServant : Inventory 86 native ACTOR SummoningDoll { - Game Hexen Speed 20 +NOBLOCKMAP +DROPOFF +MISSILE +NOTELEPORT @@ -50,7 +47,6 @@ ACTOR SummoningDoll ACTOR MinotaurSmoke { - Game Hexen +NOBLOCKMAP +NOGRAVITY +NOTELEPORT RenderStyle Translucent diff --git a/wadsrc/static/actors/hexen/teleportother.txt b/wadsrc/static/actors/hexen/teleportother.txt index 77a05f6af..c74eeec8c 100644 --- a/wadsrc/static/actors/hexen/teleportother.txt +++ b/wadsrc/static/actors/hexen/teleportother.txt @@ -1,10 +1,8 @@ // Teleport Other Artifact -------------------------------------------------- -ACTOR ArtiTeleportOther : Inventory 10040 native +ACTOR ArtiTeleportOther : Inventory native { - Game Hexen - SpawnID 17 +COUNTITEM +FLOATBOB +INVENTORY.INVBAR diff --git a/wadsrc/static/actors/hexen/wraith.txt b/wadsrc/static/actors/hexen/wraith.txt index 0472427fc..2bada5209 100644 --- a/wadsrc/static/actors/hexen/wraith.txt +++ b/wadsrc/static/actors/hexen/wraith.txt @@ -1,10 +1,8 @@ // Wraith ------------------------------------------------------------------- -ACTOR Wraith 34 +ACTOR Wraith { - Game Hexen - SpawnID 8 Health 150 PainChance 25 Speed 11 @@ -81,10 +79,8 @@ ACTOR Wraith 34 // Buried wraith ------------------------------------------------------------ -ACTOR WraithBuried : Wraith 10011 +ACTOR WraithBuried : Wraith { - Game Hexen - SpawnID 9 Height 68 -SHOOTABLE -SOLID @@ -151,8 +147,6 @@ ACTOR WraithFX1 ACTOR WraithFX2 { - Game Hexen - SpawnID 108 Radius 2 Height 5 Mass 5 @@ -191,8 +185,6 @@ ACTOR WraithFX3 ACTOR WraithFX4 { - Game Hexen - SpawnID 106 Radius 2 Height 5 Mass 5 @@ -214,8 +206,6 @@ ACTOR WraithFX4 ACTOR WraithFX5 : WraithFX4 { - Game Hexen - SpawnID 107 States { Spawn: diff --git a/wadsrc/static/actors/raven/artiegg.txt b/wadsrc/static/actors/raven/artiegg.txt index d94f00151..33fde6d86 100644 --- a/wadsrc/static/actors/raven/artiegg.txt +++ b/wadsrc/static/actors/raven/artiegg.txt @@ -3,8 +3,6 @@ ACTOR EggFX : MorphProjectile { - Game Heretic - SpawnID 40 Radius 8 Height 8 Speed 18 @@ -25,10 +23,8 @@ ACTOR EggFX : MorphProjectile // Morph Ovum ---------------------------------------------------------------- -ACTOR ArtiEgg : CustomInventory 30 +ACTOR ArtiEgg : CustomInventory { - Game Heretic - SpawnID 14 +COUNTITEM +FLOATBOB +INVENTORY.INVBAR @@ -58,8 +54,6 @@ ACTOR ArtiEgg : CustomInventory 30 ACTOR PorkFX : MorphProjectile { - Game Hexen - SpawnID 40 Radius 8 Height 8 Speed 18 @@ -79,10 +73,8 @@ ACTOR PorkFX : MorphProjectile // Porkalator --------------------------------------------------------------- -ACTOR ArtiPork : CustomInventory 30 +ACTOR ArtiPork : CustomInventory { - Game Hexen - SpawnID 14 +COUNTITEM +FLOATBOB +INVENTORY.INVBAR diff --git a/wadsrc/static/actors/raven/artitele.txt b/wadsrc/static/actors/raven/artitele.txt index 79811fd53..216c99c4a 100644 --- a/wadsrc/static/actors/raven/artitele.txt +++ b/wadsrc/static/actors/raven/artitele.txt @@ -1,10 +1,8 @@ // Teleport (self) ---------------------------------------------------------- -ACTOR ArtiTeleport : Inventory 36 native +ACTOR ArtiTeleport : Inventory native { - Game Raven - SpawnID 18 +COUNTITEM +FLOATBOB +INVENTORY.INVBAR diff --git a/wadsrc/static/actors/raven/minotaur.txt b/wadsrc/static/actors/raven/minotaur.txt index 81d20efeb..6597b6adb 100644 --- a/wadsrc/static/actors/raven/minotaur.txt +++ b/wadsrc/static/actors/raven/minotaur.txt @@ -1,6 +1,5 @@ -ACTOR Minotaur 9 native +ACTOR Minotaur native { - Game Heretic Health 3000 Radius 28 Height 100 diff --git a/wadsrc/static/actors/raven/ravenambient.txt b/wadsrc/static/actors/raven/ravenambient.txt index 8489803e5..b0dd64807 100644 --- a/wadsrc/static/actors/raven/ravenambient.txt +++ b/wadsrc/static/actors/raven/ravenambient.txt @@ -2,10 +2,8 @@ // Wind --------------------------------------------------------------------- -ACTOR SoundWind 42 +ACTOR SoundWind { - Game Heretic - SpawnID 110 +NOBLOCKMAP +NOSECTOR +DONTSPLASH @@ -17,19 +15,15 @@ ACTOR SoundWind 42 } } -ACTOR SoundWindHexen : SoundWind 1410 +ACTOR SoundWindHexen : SoundWind { - Game Hexen - SpawnID 110 } // Waterfall ---------------------------------------------------------------- -ACTOR SoundWaterfall 41 +ACTOR SoundWaterfall { - Game Heretic - SpawnID 111 +NOBLOCKMAP +NOSECTOR +DONTSPLASH diff --git a/wadsrc/static/actors/raven/ravenartifacts.txt b/wadsrc/static/actors/raven/ravenartifacts.txt index c02c19c3b..6e48faeae 100644 --- a/wadsrc/static/actors/raven/ravenartifacts.txt +++ b/wadsrc/static/actors/raven/ravenartifacts.txt @@ -1,10 +1,8 @@ // Health ------------------------------------------------------------------- -ACTOR ArtiHealth : HealthPickup 82 +ACTOR ArtiHealth : HealthPickup { - Game Raven - SpawnID 24 Health 25 +COUNTITEM +FLOATBOB @@ -25,10 +23,8 @@ ACTOR ArtiHealth : HealthPickup 82 // Super health ------------------------------------------------------------- -ACTOR ArtiSuperHealth : HealthPickup 32 +ACTOR ArtiSuperHealth : HealthPickup { - Game Raven - SpawnID 25 Health 100 +COUNTITEM +FLOATBOB @@ -49,10 +45,8 @@ ACTOR ArtiSuperHealth : HealthPickup 32 // Flight ------------------------------------------------------------------- -ACTOR ArtiFly : PowerupGiver 83 +ACTOR ArtiFly : PowerupGiver { - Game Raven - SpawnID 15 +COUNTITEM +FLOATBOB +INVENTORY.PICKUPFLASH @@ -72,10 +66,8 @@ ACTOR ArtiFly : PowerupGiver 83 // Invulnerability Heretic (Ring of invincibility) -------------------------- -ACTOR ArtiInvulnerability : PowerupGiver 84 +ACTOR ArtiInvulnerability : PowerupGiver { - Game Heretic - SpawnID 133 +COUNTITEM +FLOATBOB +INVENTORY.PICKUPFLASH @@ -95,10 +87,8 @@ ACTOR ArtiInvulnerability : PowerupGiver 84 // Invulnerability Hexen (Icon of the defender) ----------------------------- -ACTOR ArtiInvulnerability2 : PowerupGiver 84 +ACTOR ArtiInvulnerability2 : PowerupGiver { - Game Hexen - SpawnID 133 +COUNTITEM +FLOATBOB +INVENTORY.PICKUPFLASH @@ -117,10 +107,8 @@ ACTOR ArtiInvulnerability2 : PowerupGiver 84 // Torch -------------------------------------------------------------------- -ACTOR ArtiTorch : PowerupGiver 33 +ACTOR ArtiTorch : PowerupGiver { - Game Raven - SpawnID 73 +COUNTITEM +FLOATBOB +INVENTORY.PICKUPFLASH diff --git a/wadsrc/static/actors/raven/ravenhealth.txt b/wadsrc/static/actors/raven/ravenhealth.txt index af951be1b..861239839 100644 --- a/wadsrc/static/actors/raven/ravenhealth.txt +++ b/wadsrc/static/actors/raven/ravenhealth.txt @@ -1,7 +1,5 @@ -ACTOR CrystalVial : Health 81 +ACTOR CrystalVial : Health { - Game Raven - SpawnID 23 +FLOATBOB Inventory.Amount 10 Inventory.PickupMessage "$TXT_ITEMHEALTH" diff --git a/wadsrc/static/actors/shared/blood.txt b/wadsrc/static/actors/shared/blood.txt index 1a294c6af..9cde14858 100644 --- a/wadsrc/static/actors/shared/blood.txt +++ b/wadsrc/static/actors/shared/blood.txt @@ -3,7 +3,6 @@ ACTOR Blood { - SpawnID 130 Mass 5 +NOBLOCKMAP +NOTELEPORT diff --git a/wadsrc/static/actors/shared/bridge.txt b/wadsrc/static/actors/shared/bridge.txt index f4d979738..8386f25b9 100644 --- a/wadsrc/static/actors/shared/bridge.txt +++ b/wadsrc/static/actors/shared/bridge.txt @@ -20,7 +20,7 @@ ACTOR BridgeBall // The bridge itself ------------------------------------------------------- -ACTOR CustomBridge 9991 native +ACTOR CustomBridge native { +SOLID +NOGRAVITY @@ -51,27 +51,23 @@ ACTOR CustomBridge 9991 native // The Hexen bridge ------------------------------------------------------- -ACTOR Bridge : CustomBridge 118 +ACTOR Bridge : CustomBridge { - Game Raven - SpawnID 21 RenderStyle None Args 32, 2, 3, 0 } // The ZDoom bridge ------------------------------------------------------- -ACTOR ZBridge : CustomBridge 118 +ACTOR ZBridge : CustomBridge { - Game Doom - SpawnID 21 Args 36, 4, 0, 0 } // Invisible bridge -------------------------------------------------------- -ACTOR InvisibleBridge 9990 native +ACTOR InvisibleBridge native { RenderStyle None Radius 32 @@ -90,19 +86,19 @@ ACTOR InvisibleBridge 9990 native // And some invisible bridges from Skull Tag ------------------------------- -ACTOR InvisibleBridge32 : InvisibleBridge 5061 +ACTOR InvisibleBridge32 : InvisibleBridge { Radius 32 Height 8 } -ACTOR InvisibleBridge16 : InvisibleBridge 5064 +ACTOR InvisibleBridge16 : InvisibleBridge { Radius 16 Height 8 } -ACTOR InvisibleBridge8 : InvisibleBridge 5065 +ACTOR InvisibleBridge8 : InvisibleBridge { Radius 8 Height 8 diff --git a/wadsrc/static/actors/shared/camera.txt b/wadsrc/static/actors/shared/camera.txt index f2b0220b5..2868c7ec9 100644 --- a/wadsrc/static/actors/shared/camera.txt +++ b/wadsrc/static/actors/shared/camera.txt @@ -1,4 +1,4 @@ -ACTOR DoomBuilderCamera 32000 +ACTOR DoomBuilderCamera { States { @@ -9,7 +9,7 @@ ACTOR DoomBuilderCamera 32000 } -ACTOR SecurityCamera 9025 native +ACTOR SecurityCamera native { +NOBLOCKMAP +NOGRAVITY @@ -17,6 +17,6 @@ ACTOR SecurityCamera 9025 native RenderStyle None } -ACTOR AimingCamera : SecurityCamera 9073 native +ACTOR AimingCamera : SecurityCamera native { } diff --git a/wadsrc/static/actors/shared/debris.txt b/wadsrc/static/actors/shared/debris.txt index 5d48a2217..eb2eb0358 100644 --- a/wadsrc/static/actors/shared/debris.txt +++ b/wadsrc/static/actors/shared/debris.txt @@ -3,7 +3,6 @@ ACTOR Rock1 { - SpawnID 41 +NOBLOCKMAP +DROPOFF +MISSILE @@ -21,7 +20,6 @@ ACTOR Rock1 ACTOR Rock2 { - SpawnID 42 +NOBLOCKMAP +DROPOFF +MISSILE @@ -40,7 +38,6 @@ ACTOR Rock2 ACTOR Rock3 { - SpawnID 43 +NOBLOCKMAP +DROPOFF +MISSILE @@ -61,7 +58,6 @@ ACTOR Rock3 ACTOR Dirt1 { - SpawnID 44 +NOBLOCKMAP +DROPOFF +MISSILE @@ -79,7 +75,6 @@ ACTOR Dirt1 ACTOR Dirt2 { - SpawnID 45 +NOBLOCKMAP +DROPOFF +MISSILE @@ -97,7 +92,6 @@ ACTOR Dirt2 ACTOR Dirt3 { - SpawnID 46 +NOBLOCKMAP +DROPOFF +MISSILE @@ -115,7 +109,6 @@ ACTOR Dirt3 ACTOR Dirt4 { - SpawnID 47 +NOBLOCKMAP +DROPOFF +MISSILE @@ -133,7 +126,6 @@ ACTOR Dirt4 ACTOR Dirt5 { - SpawnID 48 +NOBLOCKMAP +DROPOFF +MISSILE @@ -151,7 +143,6 @@ ACTOR Dirt5 ACTOR Dirt6 { - SpawnID 49 +NOBLOCKMAP +DROPOFF +MISSILE @@ -182,7 +173,6 @@ ACTOR GlassShard native ACTOR SGShard1 : GlassShard { - SpawnID 54 States { Spawn: @@ -196,7 +186,6 @@ ACTOR SGShard1 : GlassShard ACTOR SGShard2 : GlassShard { - SpawnID 55 States { Spawn: @@ -210,7 +199,6 @@ ACTOR SGShard2 : GlassShard ACTOR SGShard3 : GlassShard { - SpawnID 56 States { Spawn: @@ -224,7 +212,6 @@ ACTOR SGShard3 : GlassShard ACTOR SGShard4 : GlassShard { - SpawnID 57 States { Spawn: @@ -238,7 +225,6 @@ ACTOR SGShard4 : GlassShard ACTOR SGShard5 : GlassShard { - SpawnID 58 States { Spawn: @@ -252,7 +238,6 @@ ACTOR SGShard5 : GlassShard ACTOR SGShard6 : GlassShard { - SpawnID 59 States { Spawn: @@ -266,7 +251,6 @@ ACTOR SGShard6 : GlassShard ACTOR SGShard7 : GlassShard { - SpawnID 60 States { Spawn: @@ -280,7 +264,6 @@ ACTOR SGShard7 : GlassShard ACTOR SGShard8 : GlassShard { - SpawnID 61 States { Spawn: @@ -294,7 +277,6 @@ ACTOR SGShard8 : GlassShard ACTOR SGShard9 : GlassShard { - SpawnID 62 States { Spawn: @@ -308,7 +290,6 @@ ACTOR SGShard9 : GlassShard ACTOR SGShard0 : GlassShard { - SpawnID 63 States { Spawn: diff --git a/wadsrc/static/actors/shared/decal.txt b/wadsrc/static/actors/shared/decal.txt index 132d226f9..ed887ca2f 100644 --- a/wadsrc/static/actors/shared/decal.txt +++ b/wadsrc/static/actors/shared/decal.txt @@ -1,3 +1,3 @@ -ACTOR Decal 9200 native +ACTOR Decal native { } diff --git a/wadsrc/static/actors/shared/dog.txt b/wadsrc/static/actors/shared/dog.txt index 439060d41..5aa88d721 100644 --- a/wadsrc/static/actors/shared/dog.txt +++ b/wadsrc/static/actors/shared/dog.txt @@ -1,4 +1,4 @@ -ACTOR MBFHelperDog 888 +ACTOR MBFHelperDog { Health 500 Speed 10 diff --git a/wadsrc/static/actors/shared/fountain.txt b/wadsrc/static/actors/shared/fountain.txt index 35062d888..e7a66ed0b 100644 --- a/wadsrc/static/actors/shared/fountain.txt +++ b/wadsrc/static/actors/shared/fountain.txt @@ -6,37 +6,37 @@ ACTOR ParticleFountain native +INVISIBLE } -ACTOR RedParticleFountain : ParticleFountain 9027 +ACTOR RedParticleFountain : ParticleFountain { Health 1 } -ACTOR GreenParticleFountain : ParticleFountain 9028 +ACTOR GreenParticleFountain : ParticleFountain { Health 2 } -ACTOR BlueParticleFountain : ParticleFountain 9029 +ACTOR BlueParticleFountain : ParticleFountain { Health 3 } -ACTOR YellowParticleFountain : ParticleFountain 9030 +ACTOR YellowParticleFountain : ParticleFountain { Health 4 } -ACTOR PurpleParticleFountain : ParticleFountain 9031 +ACTOR PurpleParticleFountain : ParticleFountain { Health 5 } -ACTOR BlackParticleFountain : ParticleFountain 9032 +ACTOR BlackParticleFountain : ParticleFountain { Health 6 } -ACTOR WhiteParticleFountain : ParticleFountain 9033 +ACTOR WhiteParticleFountain : ParticleFountain { Health 7 } diff --git a/wadsrc/static/actors/shared/hatetarget.txt b/wadsrc/static/actors/shared/hatetarget.txt index 293656d40..fccf21444 100644 --- a/wadsrc/static/actors/shared/hatetarget.txt +++ b/wadsrc/static/actors/shared/hatetarget.txt @@ -2,7 +2,7 @@ // Hate Target -------------------------------------------------------------- -ACTOR HateTarget 9076 native +ACTOR HateTarget native { Radius 20 Height 56 diff --git a/wadsrc/static/actors/shared/inventory.txt b/wadsrc/static/actors/shared/inventory.txt index 7860b9387..0c106417b 100644 --- a/wadsrc/static/actors/shared/inventory.txt +++ b/wadsrc/static/actors/shared/inventory.txt @@ -11,7 +11,7 @@ ACTOR Inventory native action native A_CustomPunch(int damage, bool norandom = false, int flags = CPF_USEAMMO, class pufftype = "BulletPuff", float range = 0, float lifesteal = 0, int lifestealmax = 0, class armorbonustype = "ArmorBonus"); action native A_FireBullets(float spread_xy, float spread_z, int numbullets, int damageperbullet, class pufftype = "BulletPuff", int flags = 1, float range = 0); action native A_FireCustomMissile(class missiletype, float angle = 0, bool useammo = true, int spawnofs_xy = 0, float spawnheight = 0, bool aimatangle = false, float pitch = 0); - action native A_RailAttack(int damage, int spawnofs_xy = 0, int useammo = true, color color1 = "", color color2 = "", int flags = 0, float maxdiff = 0, class pufftype = "BulletPuff", float spread_xy = 0, float spread_z = 0, float range = 0, int duration = 0, float sparsity = 1.0, float driftspeed = 1.0, class spawnclass = "none", float spawnofs_z = 0); + action native A_RailAttack(int damage, int spawnofs_xy = 0, int useammo = true, color color1 = "", color color2 = "", int flags = 0, float maxdiff = 0, class pufftype = "BulletPuff", float spread_xy = 0, float spread_z = 0, float range = 0, int duration = 0, float sparsity = 1.0, float driftspeed = 1.0, class spawnclass = "none", float spawnofs_z = 0, int spiraloffset = 270); action native A_Light(int extralight); action native A_Light0(); action native A_Light1(); diff --git a/wadsrc/static/actors/shared/mapmarker.txt b/wadsrc/static/actors/shared/mapmarker.txt index 8333a550a..24cf11e8f 100644 --- a/wadsrc/static/actors/shared/mapmarker.txt +++ b/wadsrc/static/actors/shared/mapmarker.txt @@ -1,5 +1,5 @@ -ACTOR MapMarker 9040 native +ACTOR MapMarker native { +NOBLOCKMAP +NOGRAVITY diff --git a/wadsrc/static/actors/shared/movingcamera.txt b/wadsrc/static/actors/shared/movingcamera.txt index 435368b3a..22473512f 100644 --- a/wadsrc/static/actors/shared/movingcamera.txt +++ b/wadsrc/static/actors/shared/movingcamera.txt @@ -1,4 +1,4 @@ -ACTOR InterpolationPoint 9070 native +ACTOR InterpolationPoint native { +NOBLOCKMAP +NOGRAVITY @@ -6,7 +6,7 @@ ACTOR InterpolationPoint 9070 native RenderStyle None } -ACTOR InterpolationSpecial 9075 native +ACTOR InterpolationSpecial native { +NOBLOCKMAP +NOSECTOR @@ -14,7 +14,7 @@ ACTOR InterpolationSpecial 9075 native +DONTSPLASH } -ACTOR PathFollower 9071 native +ACTOR PathFollower native { +NOBLOCKMAP +NOSECTOR @@ -22,11 +22,11 @@ ACTOR PathFollower 9071 native +DONTSPLASH } -ACTOR ActorMover : PathFollower 9074 native +ACTOR ActorMover : PathFollower native { } -ACTOR MovingCamera : PathFollower 9072 native +ACTOR MovingCamera : PathFollower native { } diff --git a/wadsrc/static/actors/shared/secrettrigger.txt b/wadsrc/static/actors/shared/secrettrigger.txt index b131ac588..498138046 100644 --- a/wadsrc/static/actors/shared/secrettrigger.txt +++ b/wadsrc/static/actors/shared/secrettrigger.txt @@ -1,5 +1,5 @@ -ACTOR SecretTrigger 9046 native +ACTOR SecretTrigger native { +NOBLOCKMAP +NOSECTOR diff --git a/wadsrc/static/actors/shared/sectoraction.txt b/wadsrc/static/actors/shared/sectoraction.txt index 2d7fe2a80..233364331 100644 --- a/wadsrc/static/actors/shared/sectoraction.txt +++ b/wadsrc/static/actors/shared/sectoraction.txt @@ -9,73 +9,73 @@ ACTOR SectorAction native // Triggered when entering sector ------------------------------------------- -ACTOR SecActEnter : SectorAction 9998 native +ACTOR SecActEnter : SectorAction native { } // Triggered when leaving sector -------------------------------------------- -ACTOR SecActExit : SectorAction 9997 native +ACTOR SecActExit : SectorAction native { } // Triggered when hitting sector's floor ------------------------------------ -ACTOR SecActHitFloor : SectorAction 9999 native +ACTOR SecActHitFloor : SectorAction native { } // Triggered when hitting sector's ceiling ---------------------------------- -ACTOR SecActHitCeil : SectorAction 9996 native +ACTOR SecActHitCeil : SectorAction native { } // Triggered when using inside sector --------------------------------------- -ACTOR SecActUse : SectorAction 9995 native +ACTOR SecActUse : SectorAction native { } // Triggered when using a sector's wall ------------------------------------- -ACTOR SecActUseWall : SectorAction 9994 native +ACTOR SecActUseWall : SectorAction native { } // Triggered when eyes go below fake floor ---------------------------------- -ACTOR SecActEyesDive : SectorAction 9993 native +ACTOR SecActEyesDive : SectorAction native { } // Triggered when eyes go above fake floor ---------------------------------- -ACTOR SecActEyesSurface : SectorAction 9992 native +ACTOR SecActEyesSurface : SectorAction native { } // Triggered when eyes go below fake floor ---------------------------------- -ACTOR SecActEyesBelowC : SectorAction 9983 native +ACTOR SecActEyesBelowC : SectorAction native { } // Triggered when eyes go above fake floor ---------------------------------- -ACTOR SecActEyesAboveC : SectorAction 9982 native +ACTOR SecActEyesAboveC : SectorAction native { } // Triggered when eyes go below fake floor ---------------------------------- -ACTOR SecActHitFakeFloor : SectorAction 9989 native +ACTOR SecActHitFakeFloor : SectorAction native { } // Music changer ---------------------------------- -ACTOR MusicChanger : SectorAction 14165 native +ACTOR MusicChanger : SectorAction native { } diff --git a/wadsrc/static/actors/shared/setcolor.txt b/wadsrc/static/actors/shared/setcolor.txt index a41a62926..5b5fcd911 100644 --- a/wadsrc/static/actors/shared/setcolor.txt +++ b/wadsrc/static/actors/shared/setcolor.txt @@ -1,4 +1,4 @@ -ACTOR ColorSetter 9038 native +ACTOR ColorSetter native { +NOBLOCKMAP +NOGRAVITY @@ -7,7 +7,7 @@ ACTOR ColorSetter 9038 native } -ACTOR FadeSetter 9039 native +ACTOR FadeSetter native { +NOBLOCKMAP +NOGRAVITY diff --git a/wadsrc/static/actors/shared/sharedmisc.txt b/wadsrc/static/actors/shared/sharedmisc.txt index 6a71025d2..69b1abb15 100644 --- a/wadsrc/static/actors/shared/sharedmisc.txt +++ b/wadsrc/static/actors/shared/sharedmisc.txt @@ -18,7 +18,7 @@ ACTOR Unknown // Route node for monster patrols ------------------------------------------- -ACTOR PatrolPoint 9024 +ACTOR PatrolPoint { Radius 8 Height 8 @@ -31,7 +31,7 @@ ACTOR PatrolPoint 9024 // A special to execute when a monster reaches a matching patrol point ------ -ACTOR PatrolSpecial 9047 +ACTOR PatrolSpecial { Radius 8 Height 8 @@ -44,7 +44,7 @@ ACTOR PatrolSpecial 9047 // Map spot ---------------------------------------------------------------- -ACTOR MapSpot 9001 +ACTOR MapSpot { +NOBLOCKMAP +NOSECTOR @@ -55,13 +55,13 @@ ACTOR MapSpot 9001 // same with different editor number for Legacy maps ----------------------- -ACTOR FS_Mapspot : Mapspot 5004 +ACTOR FS_Mapspot : Mapspot { } // Map spot with gravity --------------------------------------------------- -ACTOR MapSpotGravity : MapSpot 9013 +ACTOR MapSpotGravity : MapSpot { -NOBLOCKMAP -NOSECTOR @@ -70,13 +70,13 @@ ACTOR MapSpotGravity : MapSpot 9013 // Point Pushers ----------------------------------------------------------- -ACTOR PointPusher 5001 +ACTOR PointPusher { +NOBLOCKMAP +INVISIBLE } -ACTOR PointPuller 5002 +ACTOR PointPuller { +NOBLOCKMAP +INVISIBLE @@ -103,16 +103,14 @@ ACTOR RealGibs // a deh patch to change the gibs, since ZDoom actually creates a gib actor // for actors that get crushed instead of changing their state as Doom did. -ACTOR Gibs : RealGibs 24 +ACTOR Gibs : RealGibs { - Game Doom - SpawnID 146 ClearFlags } // Needed for loading Build maps ------------------------------------------- -ACTOR CustomSprite 9988 native +ACTOR CustomSprite native { +NOBLOCKMAP +NOGRAVITY @@ -154,7 +152,7 @@ ACTOR FastProjectile native // Sector flag setter ------------------------------------------------------ -ACTOR SectorFlagSetter 9041 native +ACTOR SectorFlagSetter native { +NOBLOCKMAP +NOGRAVITY diff --git a/wadsrc/static/actors/shared/skies.txt b/wadsrc/static/actors/shared/skies.txt index 3b531d527..b21b02f3d 100644 --- a/wadsrc/static/actors/shared/skies.txt +++ b/wadsrc/static/actors/shared/skies.txt @@ -1,4 +1,4 @@ -ACTOR SkyViewpoint 9080 native +ACTOR SkyViewpoint native { +NOSECTOR +NOBLOCKMAP @@ -6,7 +6,7 @@ ACTOR SkyViewpoint 9080 native +DONTSPLASH } -ACTOR SkyPicker 9081 native +ACTOR SkyPicker native { +NOSECTOR +NOBLOCKMAP @@ -14,7 +14,7 @@ ACTOR SkyPicker 9081 native +DONTSPLASH } -Actor SkyCamCompat : SkyViewpoint 9083 native +Actor SkyCamCompat : SkyViewpoint native { } @@ -22,16 +22,16 @@ ACTOR StackPoint : SkyViewpoint native { } -ACTOR UpperStackLookOnly : StackPoint 9077 +ACTOR UpperStackLookOnly : StackPoint { } -ACTOR LowerStackLookOnly : StackPoint 9078 +ACTOR LowerStackLookOnly : StackPoint { } -ACTOR SectorSilencer 9082 native +ACTOR SectorSilencer native { +NOBLOCKMAP +NOGRAVITY diff --git a/wadsrc/static/actors/shared/soundenvironment.txt b/wadsrc/static/actors/shared/soundenvironment.txt index 9e6dad381..8d325909e 100644 --- a/wadsrc/static/actors/shared/soundenvironment.txt +++ b/wadsrc/static/actors/shared/soundenvironment.txt @@ -1,5 +1,5 @@ -ACTOR SoundEnvironment 9048 native +ACTOR SoundEnvironment native { +NOSECTOR +NOBLOCKMAP diff --git a/wadsrc/static/actors/shared/soundsequence.txt b/wadsrc/static/actors/shared/soundsequence.txt index ff240ba9c..463d582ae 100644 --- a/wadsrc/static/actors/shared/soundsequence.txt +++ b/wadsrc/static/actors/shared/soundsequence.txt @@ -1,12 +1,12 @@ -ACTOR AmbientSound 14065 native +ACTOR AmbientSound native { +NOBLOCKMAP +NOSECTOR +DONTSPLASH } -ACTOR AmbientSoundNoGravity : AmbientSound 14067 +ACTOR AmbientSoundNoGravity : AmbientSound { +NOGRAVITY } @@ -18,7 +18,7 @@ ACTOR SoundSequenceSlot native +DONTSPLASH } -ACTOR SoundSequence 14066 native +ACTOR SoundSequence native { +NOSECTOR +NOBLOCKMAP @@ -27,63 +27,53 @@ ACTOR SoundSequence 14066 native // Heretic Sound sequences ----------------------------------------------------------- -ACTOR HereticSoundSequence1 : SoundSequence 1200 +ACTOR HereticSoundSequence1 : SoundSequence { - Game Heretic Args 0 } -ACTOR HereticSoundSequence2 : SoundSequence 1201 +ACTOR HereticSoundSequence2 : SoundSequence { - Game Heretic Args 1 } -ACTOR HereticSoundSequence3 : SoundSequence 1202 +ACTOR HereticSoundSequence3 : SoundSequence { - Game Heretic Args 2 } -ACTOR HereticSoundSequence4 : SoundSequence 1203 +ACTOR HereticSoundSequence4 : SoundSequence { - Game Heretic Args 3 } -ACTOR HereticSoundSequence5 : SoundSequence 1204 +ACTOR HereticSoundSequence5 : SoundSequence { - Game Heretic Args 4 } -ACTOR HereticSoundSequence6 : SoundSequence 1205 +ACTOR HereticSoundSequence6 : SoundSequence { - Game Heretic Args 5 } -ACTOR HereticSoundSequence7 : SoundSequence 1206 +ACTOR HereticSoundSequence7 : SoundSequence { - Game Heretic Args 6 } -ACTOR HereticSoundSequence8 : SoundSequence 1207 +ACTOR HereticSoundSequence8 : SoundSequence { - Game Heretic Args 7 } -ACTOR HereticSoundSequence9 : SoundSequence 1208 +ACTOR HereticSoundSequence9 : SoundSequence { - Game Heretic Args 8 } -ACTOR HereticSoundSequence10 : SoundSequence 1209 +ACTOR HereticSoundSequence10 : SoundSequence { - Game Heretic Args 9 } diff --git a/wadsrc/static/actors/shared/spark.txt b/wadsrc/static/actors/shared/spark.txt index 4637ccaa9..008a27d40 100644 --- a/wadsrc/static/actors/shared/spark.txt +++ b/wadsrc/static/actors/shared/spark.txt @@ -1,5 +1,5 @@ -ACTOR Spark 9026 native +ACTOR Spark native { +NOSECTOR +NOBLOCKMAP diff --git a/wadsrc/static/actors/shared/teleport.txt b/wadsrc/static/actors/shared/teleport.txt index a91eaf9d4..d45dbbd7b 100644 --- a/wadsrc/static/actors/shared/teleport.txt +++ b/wadsrc/static/actors/shared/teleport.txt @@ -23,19 +23,19 @@ ACTOR TeleportFog native -ACTOR TeleportDest 14 +ACTOR TeleportDest { +NOBLOCKMAP +NOSECTOR +DONTSPLASH } -ACTOR TeleportDest2 : TeleportDest 9044 +ACTOR TeleportDest2 : TeleportDest { +NOGRAVITY } -ACTOR TeleportDest3 : TeleportDest2 9043 +ACTOR TeleportDest3 : TeleportDest2 { -NOGRAVITY } diff --git a/wadsrc/static/actors/shared/waterzone.txt b/wadsrc/static/actors/shared/waterzone.txt index 6bd5dbbb7..ddb223e2d 100644 --- a/wadsrc/static/actors/shared/waterzone.txt +++ b/wadsrc/static/actors/shared/waterzone.txt @@ -1,4 +1,4 @@ -ACTOR WaterZone 9045 native +ACTOR WaterZone native { +NOSECTOR +NOBLOCKMAP diff --git a/wadsrc/static/actors/strife/acolyte.txt b/wadsrc/static/actors/strife/acolyte.txt index 3ca1dec62..68ebbbb8a 100644 --- a/wadsrc/static/actors/strife/acolyte.txt +++ b/wadsrc/static/actors/strife/acolyte.txt @@ -78,90 +78,72 @@ ACTOR Acolyte : StrifeHumanoid // Acolyte 1 ---------------------------------------------------------------- -ACTOR AcolyteTan : Acolyte 3002 +ACTOR AcolyteTan : Acolyte { - Game Strife - ConversationID 53, 52, 53 +MISSILEMORE +MISSILEEVENMORE DropItem "ClipOfBullets" } // Acolyte 2 ---------------------------------------------------------------- -ACTOR AcolyteRed : Acolyte 142 +ACTOR AcolyteRed : Acolyte { - Game Strife - ConversationID 54, 53, 54 +MISSILEMORE +MISSILEEVENMORE Translation 0 } // Acolyte 3 ---------------------------------------------------------------- -ACTOR AcolyteRust : Acolyte 143 +ACTOR AcolyteRust : Acolyte { - Game Strife - ConversationID 55, 54, 55 +MISSILEMORE +MISSILEEVENMORE Translation 1 } // Acolyte 4 ---------------------------------------------------------------- -ACTOR AcolyteGray : Acolyte 146 +ACTOR AcolyteGray : Acolyte { - Game Strife - ConversationID 56, 55, 56 +MISSILEMORE +MISSILEEVENMORE Translation 2 } // Acolyte 5 ---------------------------------------------------------------- -ACTOR AcolyteDGreen : Acolyte 147 +ACTOR AcolyteDGreen : Acolyte { - Game Strife - ConversationID 57, 56, 57 +MISSILEMORE +MISSILEEVENMORE Translation 3 } // Acolyte 6 ---------------------------------------------------------------- -ACTOR AcolyteGold : Acolyte 148 +ACTOR AcolyteGold : Acolyte { - Game Strife - ConversationID 58, 57, 58 +MISSILEMORE +MISSILEEVENMORE Translation 4 } // Acolyte 7 ---------------------------------------------------------------- -ACTOR AcolyteLGreen : Acolyte 232 +ACTOR AcolyteLGreen : Acolyte { - Game Strife Health 60 - ConversationID 59, -1, -1 Translation 5 } // Acolyte 8 ---------------------------------------------------------------- -ACTOR AcolyteBlue : Acolyte 231 +ACTOR AcolyteBlue : Acolyte { - Game Strife Health 60 - ConversationID 60, -1, -1 Translation 6 } // Shadow Acolyte ----------------------------------------------------------- -ACTOR AcolyteShadow : Acolyte 58 +ACTOR AcolyteShadow : Acolyte { - Game Strife - ConversationID 61, 58, 59 +MISSILEMORE DropItem "ClipOfBullets" States @@ -178,10 +160,8 @@ ACTOR AcolyteShadow : Acolyte 58 // Some guy turning into an acolyte ----------------------------------------- -ACTOR AcolyteToBe : Acolyte 201 +ACTOR AcolyteToBe : Acolyte { - Game Strife - ConversationID 29, -1, -1 Health 61 Radius 20 Height 56 diff --git a/wadsrc/static/actors/strife/alienspectres.txt b/wadsrc/static/actors/strife/alienspectres.txt index 6e56f680d..fae75de77 100644 --- a/wadsrc/static/actors/strife/alienspectres.txt +++ b/wadsrc/static/actors/strife/alienspectres.txt @@ -1,10 +1,8 @@ // Alien Spectre 1 ----------------------------------------------------------- -ACTOR AlienSpectre1 : SpectralMonster 129 +ACTOR AlienSpectre1 : SpectralMonster { - Game Strife - ConversationID 67,-1,-1 Health 1000 Painchance 250 Speed 12 @@ -80,10 +78,8 @@ ACTOR AlienSpectre1 : SpectralMonster 129 // Alien Spectre 2 ----------------------------------------------------------- -ACTOR AlienSpectre2 : AlienSpectre1 75 +ACTOR AlienSpectre2 : AlienSpectre1 { - Game Strife - ConversationID 70 Health 1200 Painchance 50 Radius 24 @@ -101,10 +97,8 @@ ACTOR AlienSpectre2 : AlienSpectre1 75 // Alien Spectre 3 ---------------------------------------------------------- // This is the Oracle's personal spectre, so it's a little different. -ACTOR AlienSpectre3 : AlienSpectre1 76 +ACTOR AlienSpectre3 : AlienSpectre1 { - Game Strife - ConversationID 71,-1,-1 Health 1500 Painchance 50 Radius 24 @@ -143,10 +137,8 @@ ACTOR AlienSpectre3 : AlienSpectre1 76 // Alien Spectre 4 ----------------------------------------------------------- -ACTOR AlienSpectre4 : AlienSpectre1 167 +ACTOR AlienSpectre4 : AlienSpectre1 { - Game Strife - ConversationID 72,-1,-1 Health 1700 Painchance 50 Radius 24 @@ -164,10 +156,8 @@ ACTOR AlienSpectre4 : AlienSpectre1 167 // Alien Spectre 5 ----------------------------------------------------------- -ACTOR AlienSpectre5 : AlienSpectre1 168 +ACTOR AlienSpectre5 : AlienSpectre1 { - Game Strife - ConversationID 73,-1,-1 Health 2000 Painchance 50 Radius 24 @@ -186,7 +176,6 @@ ACTOR AlienSpectre5 : AlienSpectre1 168 ACTOR AlienChunkSmall { - ConversationID 68,-1,-1 +NOBLOCKMAP +NOCLIP States @@ -201,7 +190,6 @@ ACTOR AlienChunkSmall ACTOR AlienChunkLarge { - ConversationID 69,-1,-1 +NOBLOCKMAP +NOCLIP States diff --git a/wadsrc/static/actors/strife/beggars.txt b/wadsrc/static/actors/strife/beggars.txt index b24080b1a..48c7ec92a 100644 --- a/wadsrc/static/actors/strife/beggars.txt +++ b/wadsrc/static/actors/strife/beggars.txt @@ -62,36 +62,26 @@ ACTOR Beggar : StrifeHumanoid // Beggars ----------------------------------------------------------------- -ACTOR Beggar1 : Beggar 141 +ACTOR Beggar1 : Beggar { - Game Strife - ConversationID 38, 37, 38 } -ACTOR Beggar2 : Beggar 155 +ACTOR Beggar2 : Beggar { - Game Strife - ConversationID 39, 38, 39 } -ACTOR Beggar3 : Beggar 156 +ACTOR Beggar3 : Beggar { - Game Strife - ConversationID 40, 39, 40 } -ACTOR Beggar4 : Beggar 157 +ACTOR Beggar4 : Beggar { - Game Strife - ConversationID 41, 40, 41 } -ACTOR Beggar5 : Beggar 158 +ACTOR Beggar5 : Beggar { - Game Strife - ConversationID 42, 41, 42 } diff --git a/wadsrc/static/actors/strife/coin.txt b/wadsrc/static/actors/strife/coin.txt index e4e50af77..e7a8c65bd 100644 --- a/wadsrc/static/actors/strife/coin.txt +++ b/wadsrc/static/actors/strife/coin.txt @@ -1,10 +1,8 @@ // Coin --------------------------------------------------------------------- -ACTOR Coin : Inventory 93 native +ACTOR Coin : Inventory native { - Game Strife - ConversationID 168, 161, 165 +DROPPED +NOTDMATCH +FLOORCLIP @@ -24,10 +22,8 @@ ACTOR Coin : Inventory 93 native // 10 Gold ------------------------------------------------------------------ -ACTOR Gold10 : Coin 138 +ACTOR Gold10 : Coin { - Game Strife - ConversationID 169, 162, 166 Inventory.Amount 10 Tag "$TAG_10GOLD" Inventory.PickupMessage "$TXT_10GOLD" @@ -41,10 +37,8 @@ ACTOR Gold10 : Coin 138 // 25 Gold ------------------------------------------------------------------ -ACTOR Gold25 : Coin 139 +ACTOR Gold25 : Coin { - Game Strife - ConversationID 170, 163, 167 Inventory.Amount 25 Tag "$TAG_25GOLD" Inventory.PickupMessage "$TXT_25GOLD" @@ -58,10 +52,8 @@ ACTOR Gold25 : Coin 139 // 50 Gold ------------------------------------------------------------------ -ACTOR Gold50 : Coin 140 +ACTOR Gold50 : Coin { - Game Strife - ConversationID 171, 164, 168 Inventory.Amount 50 Tag "$TAG_50GOLD" Inventory.PickupMessage "$TXT_50GOLD" @@ -77,7 +69,6 @@ ACTOR Gold50 : Coin 140 ACTOR Gold300 : Coin { - ConversationID 172, -1, -1 Inventory.Amount 300 Tag "$TAG_300GOLD" Inventory.PickupMessage "$TXT_300GOLD" diff --git a/wadsrc/static/actors/strife/crusader.txt b/wadsrc/static/actors/strife/crusader.txt index eb1ceec6d..b8d7a564f 100644 --- a/wadsrc/static/actors/strife/crusader.txt +++ b/wadsrc/static/actors/strife/crusader.txt @@ -1,10 +1,8 @@ // Crusader ----------------------------------------------------------------- -ACTOR Crusader 3005 +ACTOR Crusader { - Game Strife - ConversationID 63,-1,-1 Speed 8 Radius 40 Height 56 @@ -110,10 +108,8 @@ ACTOR CrusaderMissile // Dead Crusader ------------------------------------------------------------ -ACTOR DeadCrusader 22 +ACTOR DeadCrusader { - Game Strife - ConversationID 230 States { Spawn: diff --git a/wadsrc/static/actors/strife/entityboss.txt b/wadsrc/static/actors/strife/entityboss.txt index 3980eb04e..10b493ffe 100644 --- a/wadsrc/static/actors/strife/entityboss.txt +++ b/wadsrc/static/actors/strife/entityboss.txt @@ -1,10 +1,8 @@ // Entity Nest -------------------------------------------------------------- -ACTOR EntityNest 26 +ACTOR EntityNest { - Game Strife - ConversationID 76,-1,-1 Radius 84 Height 47 +SOLID @@ -20,10 +18,8 @@ ACTOR EntityNest 26 // Entity Pod --------------------------------------------------------------- -ACTOR EntityPod 198 +ACTOR EntityPod { - Game Strife - ConversationID 77,-1,-1 Radius 25 Height 91 +SOLID @@ -50,10 +46,8 @@ ACTOR EntityPod 198 // Entity Boss -------------------------------------------------------------- -ACTOR EntityBoss : SpectralMonster 128 +ACTOR EntityBoss : SpectralMonster { - Game Strife - ConversationID 74,-1,-1 Health 2500 Painchance 255 Speed 13 @@ -132,7 +126,6 @@ ACTOR EntityBoss : SpectralMonster 128 ACTOR EntitySecond : SpectralMonster { - ConversationID 75,-1,-1 Health 990 Painchance 255 Speed 14 diff --git a/wadsrc/static/actors/strife/inquisitor.txt b/wadsrc/static/actors/strife/inquisitor.txt index e792e5803..c25b2e2f7 100644 --- a/wadsrc/static/actors/strife/inquisitor.txt +++ b/wadsrc/static/actors/strife/inquisitor.txt @@ -1,10 +1,8 @@ // Inquisitor --------------------------------------------------------------- -ACTOR Inquisitor 16 +ACTOR Inquisitor { - Game Strife - ConversationID 93,-1,-1 Health 1000 Speed 12 Radius 40 @@ -87,7 +85,6 @@ ACTOR Inquisitor 16 ACTOR InquisitorShot { - ConversationID 108,-1,-1 ReactionTime 15 Speed 25 Radius 13 @@ -127,7 +124,6 @@ ACTOR InquisitorShot ACTOR InquisitorArm { - ConversationID 94 Speed 25 +NOBLOCKMAP +NOCLIP diff --git a/wadsrc/static/actors/strife/loremaster.txt b/wadsrc/static/actors/strife/loremaster.txt index fee3eb0f0..c231a3112 100644 --- a/wadsrc/static/actors/strife/loremaster.txt +++ b/wadsrc/static/actors/strife/loremaster.txt @@ -1,10 +1,8 @@ // Loremaster (aka Priest) -------------------------------------------------- -ACTOR Loremaster 12 +ACTOR Loremaster { - Game Strife - ConversationID 66, 63, 64 Health 800 Speed 10 Radius 15 @@ -77,7 +75,6 @@ ACTOR Loremaster 12 ACTOR LoreShot native { - ConversationID 97,-1,-1 Speed 20 Height 14 Radius 10 @@ -105,7 +102,6 @@ ACTOR LoreShot native ACTOR LoreShot2 { - ConversationID 98,-1,-1 +NOBLOCKMAP +NOGRAVITY States diff --git a/wadsrc/static/actors/strife/macil.txt b/wadsrc/static/actors/strife/macil.txt index ac23e4e66..24af35ada 100644 --- a/wadsrc/static/actors/strife/macil.txt +++ b/wadsrc/static/actors/strife/macil.txt @@ -1,10 +1,8 @@ // Macil (version 1) --------------------------------------------------------- -ACTOR Macil1 64 +ACTOR Macil1 { - Game Strife - ConversationID 49, 48, 49 Health 95 Radius 20 Height 56 @@ -58,10 +56,8 @@ ACTOR Macil1 64 // Macil (version 2) --------------------------------------------------------- -ACTOR Macil2 : Macil1 200 +ACTOR Macil2 : Macil1 { - Game Strife - ConversationID 50, 49, 50 Painchance 200 +COUNTKILL +SPECTRAL diff --git a/wadsrc/static/actors/strife/merchants.txt b/wadsrc/static/actors/strife/merchants.txt index b6a2e09a5..517e96cfe 100644 --- a/wadsrc/static/actors/strife/merchants.txt +++ b/wadsrc/static/actors/strife/merchants.txt @@ -54,10 +54,8 @@ ACTOR Merchant // Weapon Smith ------------------------------------------------------------- -ACTOR WeaponSmith : Merchant 116 +ACTOR WeaponSmith : Merchant { - Game Strife - ConversationID 2 PainSound "smith/pain" Tag "$TAG_WEAPONSMITH" } @@ -65,11 +63,9 @@ ACTOR WeaponSmith : Merchant 116 // Bar Keep ----------------------------------------------------------------- -ACTOR BarKeep : Merchant 72 +ACTOR BarKeep : Merchant { - Game Strife Translation 4 - ConversationID 3 PainSound "barkeep/pain" ActiveSound "barkeep/active" Tag "$TAG_BARKEEP" @@ -78,11 +74,9 @@ ACTOR BarKeep : Merchant 72 // Armorer ------------------------------------------------------------------ -ACTOR Armorer : Merchant 73 +ACTOR Armorer : Merchant { - Game Strife Translation 5 - ConversationID 4 PainSound "armorer/pain" Tag "$TAG_ARMORER" } @@ -90,11 +84,9 @@ ACTOR Armorer : Merchant 73 // Medic -------------------------------------------------------------------- -ACTOR Medic : Merchant 74 +ACTOR Medic : Merchant { - Game Strife Translation 6 - ConversationID 5 PainSound "medic/pain" Tag "$TAG_MEDIC" } diff --git a/wadsrc/static/actors/strife/oracle.txt b/wadsrc/static/actors/strife/oracle.txt index 2e0aff948..f6f5df1cc 100644 --- a/wadsrc/static/actors/strife/oracle.txt +++ b/wadsrc/static/actors/strife/oracle.txt @@ -1,10 +1,8 @@ // Oracle ------------------------------------------------------------------- -ACTOR Oracle 199 +ACTOR Oracle { - Game Strife - ConversationID 65, 62, 63 Health 1 Radius 15 Height 56 diff --git a/wadsrc/static/actors/strife/peasants.txt b/wadsrc/static/actors/strife/peasants.txt index af12b75df..4e8a72c90 100644 --- a/wadsrc/static/actors/strife/peasants.txt +++ b/wadsrc/static/actors/strife/peasants.txt @@ -67,160 +67,116 @@ ACTOR Peasant : StrifeHumanoid // Peasant Variant 1 -------------------------------------------------------- -ACTOR Peasant1 : Peasant 3004 +ACTOR Peasant1 : Peasant { - Game Strife - ConversationID 6 Speed 4 } -ACTOR Peasant2 : Peasant 130 +ACTOR Peasant2 : Peasant { - Game Strife - ConversationID 7 Speed 5 } -ACTOR Peasant3 : Peasant 131 +ACTOR Peasant3 : Peasant { - Game Strife - ConversationID 8 Speed 5 } -ACTOR Peasant4 : Peasant 65 +ACTOR Peasant4 : Peasant { - Game Strife Translation 0 - ConversationID 9 Speed 7 } -ACTOR Peasant5 : Peasant 132 +ACTOR Peasant5 : Peasant { - Game Strife Translation 0 - ConversationID 10 Speed 7 } -ACTOR Peasant6 : Peasant 133 +ACTOR Peasant6 : Peasant { - Game Strife Translation 0 - ConversationID 11 Speed 7 } -ACTOR Peasant7 : Peasant 66 +ACTOR Peasant7 : Peasant { - Game Strife Translation 2 - ConversationID 12 } -ACTOR Peasant8 : Peasant 134 +ACTOR Peasant8 : Peasant { - Game Strife Translation 2 - ConversationID 13 } -ACTOR Peasant9 : Peasant 135 +ACTOR Peasant9 : Peasant { - Game Strife Translation 2 - ConversationID 14 } -ACTOR Peasant10 : Peasant 67 +ACTOR Peasant10 : Peasant { - Game Strife Translation 1 - ConversationID 15 } -ACTOR Peasant11 : Peasant 136 +ACTOR Peasant11 : Peasant { - Game Strife Translation 1 - ConversationID 16 } -ACTOR Peasant12 : Peasant 137 +ACTOR Peasant12 : Peasant { - Game Strife Translation 1 - ConversationID 17 } -ACTOR Peasant13 : Peasant 172 +ACTOR Peasant13 : Peasant { - Game Strife Translation 3 - ConversationID 18 } -ACTOR Peasant14 : Peasant 173 +ACTOR Peasant14 : Peasant { - Game Strife Translation 3 - ConversationID 19 } -ACTOR Peasant15 : Peasant 174 +ACTOR Peasant15 : Peasant { - Game Strife Translation 3 - ConversationID 20 } -ACTOR Peasant16 : Peasant 175 +ACTOR Peasant16 : Peasant { - Game Strife Translation 5 - ConversationID 21 } -ACTOR Peasant17 : Peasant 176 +ACTOR Peasant17 : Peasant { - Game Strife Translation 5 - ConversationID 22 } -ACTOR Peasant18 : Peasant 177 +ACTOR Peasant18 : Peasant { - Game Strife Translation 5 - ConversationID 23 } -ACTOR Peasant19 : Peasant 178 +ACTOR Peasant19 : Peasant { - Game Strife Translation 4 - ConversationID 24 } -ACTOR Peasant20 : Peasant 179 +ACTOR Peasant20 : Peasant { - Game Strife Translation 4 - ConversationID 25 } -ACTOR Peasant21 : Peasant 180 +ACTOR Peasant21 : Peasant { - Game Strife Translation 4 - ConversationID 26 } -ACTOR Peasant22 : Peasant 181 +ACTOR Peasant22 : Peasant { - Game Strife Translation 6 - ConversationID 27 } diff --git a/wadsrc/static/actors/strife/programmer.txt b/wadsrc/static/actors/strife/programmer.txt index 755b453be..7df34eb68 100644 --- a/wadsrc/static/actors/strife/programmer.txt +++ b/wadsrc/static/actors/strife/programmer.txt @@ -1,10 +1,8 @@ // Programmer --------------------------------------------------------------- -ACTOR Programmer 71 +ACTOR Programmer { - Game Strife - ConversationID 95, -1, -1 Health 1100 PainChance 50 Speed 26 @@ -86,7 +84,6 @@ ACTOR Programmer 71 ACTOR ProgrammerBase { - ConversationID 96,-1,-1 +NOBLOCKMAP +NOCLIP +NOBLOOD diff --git a/wadsrc/static/actors/strife/questitems.txt b/wadsrc/static/actors/strife/questitems.txt index cf6b98b0b..70645789c 100644 --- a/wadsrc/static/actors/strife/questitems.txt +++ b/wadsrc/static/actors/strife/questitems.txt @@ -48,159 +48,128 @@ ACTOR QuestItem : Inventory ACTOR QuestItem1 : QuestItem { - ConversationID 312, 293, 310 } ACTOR QuestItem2 : QuestItem { - ConversationID 313, 294, 311 } ACTOR QuestItem3 : QuestItem { - ConversationID 314, 295, 312 } ACTOR QuestItem4 : QuestItem { - ConversationID 315, 296, 313 Tag "$TAG_QUEST4" } ACTOR QuestItem5 : QuestItem { - ConversationID 316, 297, 314 Tag "$TAG_QUEST5" } ACTOR QuestItem6 : QuestItem { - ConversationID 317, 298, 315 Tag "TAG_QUEST6" } ACTOR QuestItem7 : QuestItem { - ConversationID 318, -1, -1 } ACTOR QuestItem8 : QuestItem { - ConversationID 319, -1, -1 } ACTOR QuestItem9 : QuestItem { - ConversationID 320, -1, -1 } ACTOR QuestItem10 : QuestItem { - ConversationID 321, -1, -1 } ACTOR QuestItem11 : QuestItem { - ConversationID 322, -1, -1 } ACTOR QuestItem12 : QuestItem { - ConversationID 323, -1, -1 } ACTOR QuestItem13 : QuestItem { - ConversationID 324, -1, -1 } ACTOR QuestItem14 : QuestItem { - ConversationID 325, -1, -1 } ACTOR QuestItem15 : QuestItem { - ConversationID 326, -1, -1 } ACTOR QuestItem16 : QuestItem { - ConversationID 327, -1, -1 } ACTOR QuestItem17 : QuestItem { - ConversationID 328, -1, -1 } ACTOR QuestItem18 : QuestItem { - ConversationID 329, -1, -1 } ACTOR QuestItem19 : QuestItem { - ConversationID 330, -1, -1 } ACTOR QuestItem20 : QuestItem { - ConversationID 331, -1, -1 } ACTOR QuestItem21 : QuestItem { - ConversationID 332, -1, -1 } ACTOR QuestItem22 : QuestItem { - ConversationID 333, -1, -1 } ACTOR QuestItem23 : QuestItem { - ConversationID 334, -1, -1 } ACTOR QuestItem24 : QuestItem { - ConversationID 335, -1, -1 } ACTOR QuestItem25 : QuestItem { - ConversationID 336, -1, -1 } ACTOR QuestItem26 : QuestItem { - ConversationID 337, -1, -1 } ACTOR QuestItem27 : QuestItem { - ConversationID 338, -1, -1 } ACTOR QuestItem28 : QuestItem { - ConversationID 339, -1, -1 } ACTOR QuestItem29 : QuestItem { - ConversationID 340, -1, -1 } ACTOR QuestItem30 : QuestItem { - ConversationID 341, -1, -1 } ACTOR QuestItem31 : QuestItem { - ConversationID 342, -1, -1 } diff --git a/wadsrc/static/actors/strife/ratbuddy.txt b/wadsrc/static/actors/strife/ratbuddy.txt index eaefda35d..4e586c0ab 100644 --- a/wadsrc/static/actors/strife/ratbuddy.txt +++ b/wadsrc/static/actors/strife/ratbuddy.txt @@ -1,8 +1,6 @@ -ACTOR RatBuddy 85 +ACTOR RatBuddy { - Game Strife - ConversationID 202, 196, 200 Health 5 Speed 13 Radius 10 diff --git a/wadsrc/static/actors/strife/reaver.txt b/wadsrc/static/actors/strife/reaver.txt index a69947373..f881230b4 100644 --- a/wadsrc/static/actors/strife/reaver.txt +++ b/wadsrc/static/actors/strife/reaver.txt @@ -1,7 +1,6 @@ -ACTOR Reaver 3001 +ACTOR Reaver { - Game Strife Health 150 Painchance 128 Speed 12 @@ -13,7 +12,6 @@ ACTOR Reaver 3001 MinMissileChance 150 MaxDropoffHeight 32 Mass 500 - ConversationID 52, -1, -1 SeeSound "reaver/sight" PainSound "reaver/pain" DeathSound "reaver/death" diff --git a/wadsrc/static/actors/strife/rebels.txt b/wadsrc/static/actors/strife/rebels.txt index 3c539bca4..a9615055b 100644 --- a/wadsrc/static/actors/strife/rebels.txt +++ b/wadsrc/static/actors/strife/rebels.txt @@ -64,59 +64,45 @@ ACTOR Rebel : StrifeHumanoid // Rebel 1 ------------------------------------------------------------------ -ACTOR Rebel1 : Rebel 9 +ACTOR Rebel1 : Rebel { - Game Strife - ConversationID 43, 42, 43 DropItem "ClipOfBullets" } // Rebel 2 ------------------------------------------------------------------ -ACTOR Rebel2 : Rebel 144 +ACTOR Rebel2 : Rebel { - Game Strife - ConversationID 44, 43, 44 } // Rebel 3 ------------------------------------------------------------------ -ACTOR Rebel3 : Rebel 145 +ACTOR Rebel3 : Rebel { - Game Strife - ConversationID 45, 44, 45 } // Rebel 4 ------------------------------------------------------------------ -ACTOR Rebel4 : Rebel 149 +ACTOR Rebel4 : Rebel { - Game Strife - ConversationID 46, 45, 56 } // Rebel 5 ------------------------------------------------------------------ -ACTOR Rebel5 : Rebel 150 +ACTOR Rebel5 : Rebel { - Game Strife - ConversationID 47, 46, 47 } // Rebel 6 ------------------------------------------------------------------ -ACTOR Rebel6 : Rebel 151 +ACTOR Rebel6 : Rebel { - Game Strife - ConversationID 48, 47, 48 } // Teleporter Beacon -------------------------------------------------------- -ACTOR TeleporterBeacon : Inventory 10 native +ACTOR TeleporterBeacon : Inventory native { - Game Strife - ConversationID 166,-1,-1 Health 5 Radius 16 Height 16 diff --git a/wadsrc/static/actors/strife/sentinel.txt b/wadsrc/static/actors/strife/sentinel.txt index 14bbaf8e1..370601027 100644 --- a/wadsrc/static/actors/strife/sentinel.txt +++ b/wadsrc/static/actors/strife/sentinel.txt @@ -1,10 +1,8 @@ // Sentinel ----------------------------------------------------------------- -ACTOR Sentinel 3006 +ACTOR Sentinel { - Game Strife - ConversationID 91,-1,-1 Health 100 Painchance 255 Speed 7 diff --git a/wadsrc/static/actors/strife/sigil.txt b/wadsrc/static/actors/strife/sigil.txt index a2cc66c7b..b3ab5b40f 100644 --- a/wadsrc/static/actors/strife/sigil.txt +++ b/wadsrc/static/actors/strife/sigil.txt @@ -3,7 +3,6 @@ ACTOR Sigil : Weapon native { - Game Strife Weapon.Kickback 100 Weapon.SelectionOrder 4000 @@ -123,50 +122,40 @@ ACTOR Sigil : Weapon native // Sigil 1 ------------------------------------------------------------------ -ACTOR Sigil1 : Sigil 77 +ACTOR Sigil1 : Sigil { - Game Strife - ConversationID 196, 190, 194 Inventory.Icon "I_SGL1" Health 1 } // Sigil 2 ------------------------------------------------------------------ -ACTOR Sigil2 : Sigil 78 +ACTOR Sigil2 : Sigil { - Game Strife - ConversationID 197, 191, 195 Inventory.Icon "I_SGL2" Health 2 } // Sigil 3 ------------------------------------------------------------------ -ACTOR Sigil3 : Sigil 79 +ACTOR Sigil3 : Sigil { - Game Strife - ConversationID 198, 192, 196 Inventory.Icon "I_SGL3" Health 3 } // Sigil 4 ------------------------------------------------------------------ -ACTOR Sigil4 : Sigil 80 +ACTOR Sigil4 : Sigil { - Game Strife - ConversationID 199, 193, 197 Inventory.Icon "I_SGL4" Health 4 } // Sigil 5 ------------------------------------------------------------------ -ACTOR Sigil5 : Sigil 81 +ACTOR Sigil5 : Sigil { - Game Strife - ConversationID 200, 194, 198 Inventory.Icon "I_SGL5" Health 5 } diff --git a/wadsrc/static/actors/strife/spectral.txt b/wadsrc/static/actors/strife/spectral.txt index fecd77e1f..94b1c3153 100644 --- a/wadsrc/static/actors/strife/spectral.txt +++ b/wadsrc/static/actors/strife/spectral.txt @@ -77,7 +77,6 @@ ACTOR SpectralLightningDeathShort : SpectralLightningBase ACTOR SpectralLightningBall1 : SpectralLightningBase { - ConversationID 80,-1,-1 Speed 30 Radius 8 Height 16 @@ -96,7 +95,6 @@ ACTOR SpectralLightningBall1 : SpectralLightningBase ACTOR SpectralLightningBall2 : SpectralLightningBall1 { - ConversationID 81,-1,-1 Damage 20 } @@ -104,7 +102,6 @@ ACTOR SpectralLightningBall2 : SpectralLightningBall1 ACTOR SpectralLightningH1 : SpectralLightningBase { - ConversationID 78,-1,-1 Speed 30 Radius 8 Height 16 @@ -128,7 +125,6 @@ ACTOR SpectralLightningH1 : SpectralLightningBase ACTOR SpectralLightningH2 : SpectralLightningH1 { - ConversationID 79,-1,-1 Damage 20 } @@ -136,7 +132,6 @@ ACTOR SpectralLightningH2 : SpectralLightningH1 ACTOR SpectralLightningH3 : SpectralLightningH1 { - ConversationID 82,-1,-1 Damage 10 } @@ -160,7 +155,6 @@ ACTOR SpectralLightningHTail ACTOR SpectralLightningBigBall1 : SpectralLightningDeath2 { - ConversationID 84,-1,-1 Speed 18 Radius 20 Height 40 @@ -184,7 +178,6 @@ ACTOR SpectralLightningBigBall1 : SpectralLightningDeath2 ACTOR SpectralLightningBigBall2 : SpectralLightningBigBall1 { - ConversationID 85,-1,-1 Damage 30 } @@ -192,7 +185,6 @@ ACTOR SpectralLightningBigBall2 : SpectralLightningBigBall1 ACTOR SpectralLightningV1 : SpectralLightningDeathShort { - ConversationID 86,-1,-1 Speed 22 Radius 8 Height 24 @@ -213,7 +205,6 @@ ACTOR SpectralLightningV1 : SpectralLightningDeathShort ACTOR SpectralLightningV2 : SpectralLightningV1 { - ConversationID 87,-1,-1 Damage 50 } @@ -221,7 +212,6 @@ ACTOR SpectralLightningV2 : SpectralLightningV1 ACTOR SpectralLightningSpot : SpectralLightningDeath1 { - ConversationID 88,-1,-1 Speed 18 ReactionTime 70 +NOBLOCKMAP @@ -246,7 +236,6 @@ ACTOR SpectralLightningSpot : SpectralLightningDeath1 ACTOR SpectralLightningBigV1 : SpectralLightningDeath1 { - ConversationID 89,-1,-1 Speed 28 Radius 8 Height 16 @@ -265,7 +254,6 @@ ACTOR SpectralLightningBigV1 : SpectralLightningDeath1 ACTOR SpectralLightningBigV2 : SpectralLightningBigV1 { - ConversationID 90, -1, -1 Damage 60 } diff --git a/wadsrc/static/actors/strife/stalker.txt b/wadsrc/static/actors/strife/stalker.txt index 0a537c762..e9f2ae107 100644 --- a/wadsrc/static/actors/strife/stalker.txt +++ b/wadsrc/static/actors/strife/stalker.txt @@ -2,10 +2,8 @@ // Stalker ------------------------------------------------------------------ -ACTOR Stalker 186 +ACTOR Stalker { - Game Strife - ConversationID 92,-1,-1 Health 80 Painchance 40 Speed 16 diff --git a/wadsrc/static/actors/strife/strifeammo.txt b/wadsrc/static/actors/strife/strifeammo.txt index 801714434..dd15b13f6 100644 --- a/wadsrc/static/actors/strife/strifeammo.txt +++ b/wadsrc/static/actors/strife/strifeammo.txt @@ -1,10 +1,8 @@ // HE-Grenade Rounds -------------------------------------------------------- -ACTOR HEGrenadeRounds : Ammo 152 +ACTOR HEGrenadeRounds : Ammo { - Game Strife +FLOORCLIP - ConversationID 177, 170, 174 Inventory.Amount 6 Inventory.MaxAmount 30 Ammo.BackpackAmount 6 @@ -22,11 +20,9 @@ ACTOR HEGrenadeRounds : Ammo 152 // Phosphorus-Grenade Rounds ------------------------------------------------ -ACTOR PhosphorusGrenadeRounds : Ammo 153 +ACTOR PhosphorusGrenadeRounds : Ammo { - Game Strife +FLOORCLIP - ConversationID 178, 171, 175 Inventory.Amount 4 Inventory.MaxAmount 16 Ammo.BackpackAmount 4 @@ -44,11 +40,8 @@ ACTOR PhosphorusGrenadeRounds : Ammo 153 // Clip of Bullets ---------------------------------------------------------- -ACTOR ClipOfBullets : Ammo 2007 +ACTOR ClipOfBullets : Ammo { - Game Strife - SpawnID 11 - ConversationID 179, 173, 177 +FLOORCLIP Inventory.Amount 10 Inventory.MaxAmount 250 @@ -67,11 +60,8 @@ ACTOR ClipOfBullets : Ammo 2007 // Box of Bullets ----------------------------------------------------------- -ACTOR BoxOfBullets : ClipOfBullets 2048 +ACTOR BoxOfBullets : ClipOfBullets { - Game Strife - SpawnID 139 - ConversationID 180, 174, 178 Inventory.Amount 50 Tag "$TAG_BOXOFBULLETS" Inventory.PickupMessage "$TXT_BOXOFBULLETS" @@ -85,11 +75,8 @@ ACTOR BoxOfBullets : ClipOfBullets 2048 // Mini Missiles ------------------------------------------------------------ -ACTOR MiniMissiles : Ammo 2010 +ACTOR MiniMissiles : Ammo { - Game Strife - SpawnID 140 - ConversationID 181, 175, 179 +FLOORCLIP Inventory.Amount 4 Inventory.MaxAmount 100 @@ -108,11 +95,8 @@ ACTOR MiniMissiles : Ammo 2010 // Crate of Missiles -------------------------------------------------------- -ACTOR CrateOfMissiles : MiniMissiles 2046 +ACTOR CrateOfMissiles : MiniMissiles { - Game Strife - SpawnID 141 - ConversationID 182, 176, 180 Inventory.Amount 20 Tag "$TAG_CRATEOFMISSILES" Inventory.PickupMessage "$TXT_CRATEOFMISSILES" @@ -126,11 +110,8 @@ ACTOR CrateOfMissiles : MiniMissiles 2046 // Energy Pod --------------------------------------------------------------- -ACTOR EnergyPod : Ammo 2047 +ACTOR EnergyPod : Ammo { - Game Strife - SpawnID 75 - ConversationID 183, 177, 181 +FLOORCLIP Inventory.Amount 20 Inventory.MaxAmount 400 @@ -150,11 +131,8 @@ ACTOR EnergyPod : Ammo 2047 // Energy pack --------------------------------------------------------------- -ACTOR EnergyPack : EnergyPod 17 +ACTOR EnergyPack : EnergyPod { - Game Strife - SpawnID 142 - ConversationID 184, 178, 182 Inventory.Amount 100 Tag "$TAG_ENERGYPACK" Inventory.PickupMessage "$TXT_ENERGYPACK" @@ -168,10 +146,8 @@ ACTOR EnergyPack : EnergyPod 17 // Poison Bolt Quiver ------------------------------------------------------- -ACTOR PoisonBolts : Ammo 115 +ACTOR PoisonBolts : Ammo { - Game Strife - ConversationID 185, 179, 183 +FLOORCLIP Inventory.Amount 10 Inventory.MaxAmount 25 @@ -190,10 +166,8 @@ ACTOR PoisonBolts : Ammo 115 // Electric Bolt Quiver ------------------------------------------------------- -ACTOR ElectricBolts : Ammo 114 +ACTOR ElectricBolts : Ammo { - Game Strife - ConversationID 186, 180, 184 +FLOORCLIP Inventory.Amount 20 Inventory.MaxAmount 50 @@ -212,11 +186,8 @@ ACTOR ElectricBolts : Ammo 114 // Ammo Satchel ------------------------------------------------------------- -ACTOR AmmoSatchel : BackpackItem 183 +ACTOR AmmoSatchel : BackpackItem { - Game Strife - SpawnID 144 - ConversationID 187, 181, 184 +FLOORCLIP Inventory.Icon "I_BKPK" Tag "$TAG_AMMOSATCHEL" diff --git a/wadsrc/static/actors/strife/strifearmor.txt b/wadsrc/static/actors/strife/strifearmor.txt index 2431e9438..c04d32cc9 100644 --- a/wadsrc/static/actors/strife/strifearmor.txt +++ b/wadsrc/static/actors/strife/strifearmor.txt @@ -1,9 +1,6 @@ -ACTOR MetalArmor : BasicArmorPickup 2019 +ACTOR MetalArmor : BasicArmorPickup { - Game Strife - SpawnID 69 - ConversationID 129, 125, 128 Radius 20 Height 16 +FLOORCLIP @@ -23,11 +20,8 @@ ACTOR MetalArmor : BasicArmorPickup 2019 } } -ACTOR LeatherArmor : BasicArmorPickup 2018 +ACTOR LeatherArmor : BasicArmorPickup { - Game Strife - SpawnID 68 - ConversationID 130, 126, 129 Radius 20 Height 16 +FLOORCLIP diff --git a/wadsrc/static/actors/strife/strifebishop.txt b/wadsrc/static/actors/strife/strifebishop.txt index 6f38247fb..7452e1708 100644 --- a/wadsrc/static/actors/strife/strifebishop.txt +++ b/wadsrc/static/actors/strife/strifebishop.txt @@ -1,10 +1,8 @@ // Bishop ------------------------------------------------------------------- -ACTOR StrifeBishop 187 +ACTOR StrifeBishop { - Game Strife - ConversationID 64,-1,-1 Health 500 Painchance 128 Speed 8 diff --git a/wadsrc/static/actors/strife/strifehumanoid.txt b/wadsrc/static/actors/strife/strifehumanoid.txt index 375f5bbcf..0a366b38f 100644 --- a/wadsrc/static/actors/strife/strifehumanoid.txt +++ b/wadsrc/static/actors/strife/strifehumanoid.txt @@ -40,7 +40,6 @@ ACTOR StrifeHumanoid ACTOR FireDroplet { - ConversationID 297, -1, -1 +NOBLOCKMAP +NOCLIP States diff --git a/wadsrc/static/actors/strife/strifeitems.txt b/wadsrc/static/actors/strife/strifeitems.txt index 74b957b83..d196705b3 100644 --- a/wadsrc/static/actors/strife/strifeitems.txt +++ b/wadsrc/static/actors/strife/strifeitems.txt @@ -1,9 +1,7 @@ // Med patch ----------------------------------------------------------------- -ACTOR MedPatch : HealthPickup 2011 +ACTOR MedPatch : HealthPickup { - Game Strife - ConversationID 125, 121, 124 Health 10 +FLOORCLIP +INVENTORY.INVBAR @@ -23,10 +21,8 @@ ACTOR MedPatch : HealthPickup 2011 // Medical Kit --------------------------------------------------------------- -ACTOR MedicalKit : HealthPickup 2012 +ACTOR MedicalKit : HealthPickup { - Game Strife - ConversationID 126, 122, 125 Health 25 +FLOORCLIP +INVENTORY.INVBAR @@ -46,10 +42,8 @@ ACTOR MedicalKit : HealthPickup 2012 // Surgery Kit -------------------------------------------------------------- -ACTOR SurgeryKit : HealthPickup 83 +ACTOR SurgeryKit : HealthPickup { - Game Strife - ConversationID 127, 123, 126 +FLOORCLIP +INVENTORY.INVBAR Health -100 @@ -68,11 +62,8 @@ ACTOR SurgeryKit : HealthPickup 83 // StrifeMap ---------------------------------------------------------------- -ACTOR StrifeMap : MapRevealer 2026 +ACTOR StrifeMap : MapRevealer { - Game Strife - SpawnID 137 - ConversationID 164, 160, 163 +FLOORCLIP Inventory.PickupSound "misc/p_pkup" Inventory.PickupMessage "$TXT_STRIFEMAP" @@ -89,11 +80,9 @@ ACTOR StrifeMap : MapRevealer 2026 ACTOR BeldinsRing : Inventory { - Game Strife +NOTDMATCH +FLOORCLIP +INVENTORY.INVBAR - ConversationID 173, 165, 169 Tag "$TAG_BELDINSRING" Inventory.Icon "I_RING" Inventory.GiveQuest 1 @@ -109,13 +98,11 @@ ACTOR BeldinsRing : Inventory // Offering Chalice --------------------------------------------------------- -ACTOR OfferingChalice : Inventory 205 +ACTOR OfferingChalice : Inventory { - Game Strife +DROPPED +FLOORCLIP +INVENTORY.INVBAR - ConversationID 174, 166, 170 Radius 10 Height 16 Tag "$TAG_OFFERINGCHALICE" @@ -135,10 +122,8 @@ ACTOR OfferingChalice : Inventory 205 ACTOR Ear : Inventory { - Game Strife +FLOORCLIP +INVENTORY.INVBAR - ConversationID 175, 167, 171 Tag "$TAG_EAR" Inventory.Icon "I_EARS" Inventory.PickupMessage "$TXT_EAR" @@ -154,10 +139,8 @@ ACTOR Ear : Inventory // Broken Power Coupling ---------------------------------------------------- -ACTOR BrokenPowerCoupling : Inventory 226 +ACTOR BrokenPowerCoupling : Inventory { - Game Strife - ConversationID 289, -1, -1 Health 40 +DROPPED +FLOORCLIP @@ -180,11 +163,8 @@ ACTOR BrokenPowerCoupling : Inventory 226 // Shadow Armor ------------------------------------------------------------- -ACTOR ShadowArmor : PowerupGiver 2024 +ACTOR ShadowArmor : PowerupGiver { - Game Strife - SpawnID 135 - ConversationID 160, 156, 159 +FLOORCLIP +VISIBILITYPULSE +INVENTORY.INVBAR @@ -207,11 +187,8 @@ ACTOR ShadowArmor : PowerupGiver 2024 // Environmental suit ------------------------------------------------------- -ACTOR EnvironmentalSuit : PowerupGiver 2025 +ACTOR EnvironmentalSuit : PowerupGiver { - Game Strife - SpawnID 136 - ConversationID 161, 157, 160 +FLOORCLIP +INVENTORY.INVBAR -INVENTORY.FANCYPICKUPSOUND @@ -232,10 +209,8 @@ ACTOR EnvironmentalSuit : PowerupGiver 2025 // Guard Uniform ------------------------------------------------------------ -ACTOR GuardUniform : Inventory 90 +ACTOR GuardUniform : Inventory { - Game Strife - ConversationID 162, 158, 161 +FLOORCLIP +INVENTORY.INVBAR Tag "$TAG_GUARDUNIFORM" @@ -253,10 +228,8 @@ ACTOR GuardUniform : Inventory 90 // Officer's Uniform -------------------------------------------------------- -ACTOR OfficersUniform : Inventory 52 +ACTOR OfficersUniform : Inventory { - Game Strife - ConversationID 163, 159, 162 +FLOORCLIP +INVENTORY.INVBAR Tag "$TAG_OFFICERSUNIFORM" @@ -275,8 +248,6 @@ ACTOR OfficersUniform : Inventory 52 ACTOR FlameThrowerParts : Inventory { - Game Strife - ConversationID 191, 185, 189 +FLOORCLIP +INVENTORY.INVBAR Inventory.Icon "I_BFLM" @@ -297,8 +268,6 @@ ACTOR FlameThrowerParts : Inventory ACTOR InterrogatorReport : Inventory { - Game Strife - ConversationID 308, 289, 306 +FLOORCLIP Tag "$TAG_REPORT" Inventory.PickupMessage "$TXT_REPORT" @@ -315,8 +284,6 @@ ACTOR InterrogatorReport : Inventory ACTOR Info : Inventory { - Game Strife - ConversationID 300, 282, 299 +FLOORCLIP +INVENTORY.INVBAR Tag "$TAG_INFO" @@ -333,10 +300,8 @@ ACTOR Info : Inventory // Targeter ----------------------------------------------------------------- -ACTOR Targeter : PowerupGiver 207 +ACTOR Targeter : PowerupGiver { - Game Strife - ConversationID 167, 169, 173 +FLOORCLIP +INVENTORY.INVBAR -INVENTORY.FANCYPICKUPSOUND @@ -356,10 +321,8 @@ ACTOR Targeter : PowerupGiver 207 // Communicator ----------------------------------------------------------------- -ACTOR Communicator : Inventory 206 +ACTOR Communicator : Inventory { - Game Strife - ConversationID 176, 168, 172 +NOTDMATCH Tag "$TAG_COMMUNICATOR" Inventory.Icon "I_COMM" @@ -375,10 +338,8 @@ ACTOR Communicator : Inventory 206 // Degnin Ore --------------------------------------------------------------- -ACTOR DegninOre : Inventory 59 native +ACTOR DegninOre : Inventory native { - Game Strife - ConversationID 128, 124, 127 Health 10 Radius 16 Height 16 @@ -412,8 +373,6 @@ ACTOR DegninOre : Inventory 59 native ACTOR GunTraining : Inventory { - Game Strife - ConversationID 310,-1,-1 +FLOORCLIP +INVENTORY.INVBAR +INVENTORY.UNDROPPABLE @@ -432,8 +391,6 @@ ACTOR GunTraining : Inventory ACTOR HealthTraining : Inventory native { - Game Strife - ConversationID 309,-1,-1 +FLOORCLIP +INVENTORY.INVBAR +INVENTORY.UNDROPPABLE @@ -452,10 +409,8 @@ ACTOR HealthTraining : Inventory native // Scanner ------------------------------------------------------------------ -ACTOR Scanner : PowerupGiver 2027 native +ACTOR Scanner : PowerupGiver native { - Game Strife - ConversationID 165,-1,-1 +FLOORCLIP +INVENTORY.FANCYPICKUPSOUND Inventory.MaxAmount 1 @@ -476,8 +431,6 @@ ACTOR Scanner : PowerupGiver 2027 native ACTOR PrisonPass : Key native { - Game Strife - ConversationID 304, 286, 303 Inventory.Icon "I_TOKN" Tag "$TAG_PRISONPASS" Inventory.PickupMessage "$TXT_PRISONPASS" @@ -508,7 +461,6 @@ ACTOR DummyStrifeItem : Inventory native ACTOR RaiseAlarm : DummyStrifeItem native { - ConversationID 301, 283, 300 Tag "$TAG_ALARM" } @@ -516,28 +468,24 @@ ACTOR RaiseAlarm : DummyStrifeItem native ACTOR OpenDoor222 : DummyStrifeItem native { - ConversationID 302, 284, 301 } // Close door tag 222 ------------------------------------------------------- ACTOR CloseDoor222 : DummyStrifeItem native { - ConversationID 303, 285, 302 } // Open door tag 224 -------------------------------------------------------- ACTOR OpenDoor224 : DummyStrifeItem native { - ConversationID 305, -1, -1 } // Ammo --------------------------------------------------------------------- ACTOR AmmoFillup : DummyStrifeItem native { - ConversationID 298,280,297 Tag "$TAG_AMMOFILLUP" } @@ -545,7 +493,6 @@ ACTOR AmmoFillup : DummyStrifeItem native ACTOR HealthFillup : DummyStrifeItem native { - ConversationID 299,281,298 Tag "$TAG_HEALTHFILLUP" } @@ -553,7 +500,6 @@ ACTOR HealthFillup : DummyStrifeItem native ACTOR UpgradeStamina : DummyStrifeItem native { - ConversationID 306, 287, 307 Inventory.Amount 10 Inventory.MaxAmount 100 } @@ -562,14 +508,12 @@ ACTOR UpgradeStamina : DummyStrifeItem native ACTOR UpgradeAccuracy : DummyStrifeItem native { - ConversationID 307, 288, 308 } // Start a slideshow -------------------------------------------------------- ACTOR SlideshowStarter : DummyStrifeItem native { - ConversationID 343,-1,-1 } diff --git a/wadsrc/static/actors/strife/strifekeys.txt b/wadsrc/static/actors/strife/strifekeys.txt index b304f83bc..265d2268f 100644 --- a/wadsrc/static/actors/strife/strifekeys.txt +++ b/wadsrc/static/actors/strife/strifekeys.txt @@ -8,10 +8,8 @@ ACTOR StrifeKey : Key // Base Key ----------------------------------------------------------------- -ACTOR BaseKey : StrifeKey 230 +ACTOR BaseKey : StrifeKey { - Game Strife - ConversationID 133, 129, 132 Inventory.Icon "I_FUSL" Tag "$TAG_BASEKEY" Inventory.PickupMessage "$TXT_BASEKEY" @@ -28,8 +26,6 @@ ACTOR BaseKey : StrifeKey 230 ACTOR GovsKey : StrifeKey { - Game Strife - ConversationID 134, 130, 133 Inventory.Icon "I_REBL" Tag "$TAG_GOVSKEY" Inventory.PickupMessage "$TXT_GOVSKEY" @@ -44,10 +40,8 @@ ACTOR GovsKey : StrifeKey // Passcard ----------------------------------------------------------------- -ACTOR Passcard : StrifeKey 185 +ACTOR Passcard : StrifeKey { - Game Strife - ConversationID 135, 131, 134 Inventory.Icon "I_TPAS" Tag "$TAG_PASSCARD" Inventory.PickupMessage "$TXT_PASSCARD" @@ -62,10 +56,8 @@ ACTOR Passcard : StrifeKey 185 // ID Badge ----------------------------------------------------------------- -ACTOR IDBadge : StrifeKey 184 +ACTOR IDBadge : StrifeKey { - Game Strife - ConversationID 136, 132, 135 Inventory.Icon "I_CRD1" Tag "$TAG_IDBADGE" Inventory.PickupMessage "$TXT_IDBADGE" @@ -82,8 +74,6 @@ ACTOR IDBadge : StrifeKey 184 ACTOR PrisonKey : StrifeKey { - Game Strife - ConversationID 137, 133, 136 Inventory.Icon "I_PRIS" Tag "$TAG_PRISONKEY" Inventory.GiveQuest 11 @@ -99,10 +89,8 @@ ACTOR PrisonKey : StrifeKey // Severed Hand ------------------------------------------------------------- -ACTOR SeveredHand : StrifeKey 91 +ACTOR SeveredHand : StrifeKey { - Game Strife - ConversationID 138, 134, 137 Inventory.Icon "I_HAND" Tag "$TAG_SEVEREDHAND" Inventory.GiveQuest 12 @@ -120,8 +108,6 @@ ACTOR SeveredHand : StrifeKey 91 ACTOR Power1Key : StrifeKey { - Game Strife - ConversationID 139, 135, 138 Inventory.Icon "I_PWR1" Tag "$TAG_POWER1KEY" Inventory.PickupMessage "$TXT_POWER1KEY" @@ -138,8 +124,6 @@ ACTOR Power1Key : StrifeKey ACTOR Power2Key : StrifeKey { - Game Strife - ConversationID 140, 136, 139 Inventory.Icon "I_PWR2" Tag "$TAG_POWER2KEY" Inventory.PickupMessage "$TXT_POWER2KEY" @@ -156,8 +140,6 @@ ACTOR Power2Key : StrifeKey ACTOR Power3Key : StrifeKey { - Game Strife - ConversationID 141, 137, 140 Inventory.Icon "I_PWR3" Tag "$TAG_POWER3KEY" Inventory.PickupMessage "$TXT_POWER3KEY" @@ -172,10 +154,8 @@ ACTOR Power3Key : StrifeKey // Gold Key ----------------------------------------------------------------- -ACTOR GoldKey : StrifeKey 40 +ACTOR GoldKey : StrifeKey { - Game Strife - ConversationID 142, 138, 141 Inventory.Icon "I_KY1G" Tag "$TAG_GOLDKEY" Inventory.PickupMessage "$TXT_GOLDKEY" @@ -190,10 +170,8 @@ ACTOR GoldKey : StrifeKey 40 // ID Card ------------------------------------------------------------------ -ACTOR IDCard : StrifeKey 13 +ACTOR IDCard : StrifeKey { - Game Strife - ConversationID 143, 139, 142 Inventory.Icon "I_CRD2" Tag "$TAG_IDCARD" Inventory.PickupMessage "$TXT_IDCARD" @@ -208,10 +186,8 @@ ACTOR IDCard : StrifeKey 13 // Silver Key --------------------------------------------------------------- -ACTOR SilverKey : StrifeKey 38 +ACTOR SilverKey : StrifeKey { - Game Strife - ConversationID 144, 140, 143 Inventory.Icon "I_KY2S" Tag "$TAG_SILVERKEY" Inventory.PickupMessage "$TXT_SILVERKEY" @@ -226,10 +202,8 @@ ACTOR SilverKey : StrifeKey 38 // Oracle Key --------------------------------------------------------------- -ACTOR OracleKey : StrifeKey 61 +ACTOR OracleKey : StrifeKey { - Game Strife - ConversationID 145, 141, 144 Inventory.Icon "I_ORAC" Tag "$TAG_ORACLEKEY" Inventory.PickupMessage "$TXT_ORACLEKEY" @@ -246,8 +220,6 @@ ACTOR OracleKey : StrifeKey 61 ACTOR MilitaryID : StrifeKey { - Game Strife - ConversationID 146, 142, 145 Inventory.Icon "I_GYID" Tag "$TAG_MILITARYID" Inventory.PickupMessage "$TXT_MILITARYID" @@ -262,10 +234,8 @@ ACTOR MilitaryID : StrifeKey // Order Key ---------------------------------------------------------------- -ACTOR OrderKey : StrifeKey 86 +ACTOR OrderKey : StrifeKey { - Game Strife - ConversationID 147, 143, 146 Inventory.Icon "I_FUBR" Tag "$TAG_ORDERKEY" Inventory.PickupMessage "$TXT_ORDERKEY" @@ -280,10 +250,8 @@ ACTOR OrderKey : StrifeKey 86 // Warehouse Key ------------------------------------------------------------ -ACTOR WarehouseKey : StrifeKey 166 +ACTOR WarehouseKey : StrifeKey { - Game Strife - ConversationID 148, 144, 147 Inventory.Icon "I_WARE" Tag "$TAG_WAREHOUSEKEY" Inventory.PickupMessage "$TXT_WAREHOUSEKEY" @@ -298,10 +266,8 @@ ACTOR WarehouseKey : StrifeKey 166 // Brass Key ---------------------------------------------------------------- -ACTOR BrassKey : StrifeKey 39 +ACTOR BrassKey : StrifeKey { - Game Strife - ConversationID 149, 145, 148 Inventory.Icon "I_KY3B" Tag "$TAG_BRASSKEY" Inventory.PickupMessage "$TXT_BRASSKEY" @@ -316,10 +282,8 @@ ACTOR BrassKey : StrifeKey 39 // Red Crystal Key ---------------------------------------------------------- -ACTOR RedCrystalKey : StrifeKey 192 +ACTOR RedCrystalKey : StrifeKey { - Game Strife - ConversationID 150, 146, 149 Inventory.Icon "I_RCRY" Tag "$TAG_REDCRYSTALKEY" Inventory.PickupMessage "$TXT_REDCRYSTAL" @@ -334,10 +298,8 @@ ACTOR RedCrystalKey : StrifeKey 192 // Blue Crystal Key --------------------------------------------------------- -ACTOR BlueCrystalKey : StrifeKey 193 +ACTOR BlueCrystalKey : StrifeKey { - Game Strife - ConversationID 151, 147, 150 Inventory.Icon "I_BCRY" Tag "$TAG_BLUECRYSTALKEY" Inventory.PickupMessage "$TXT_BLUECRYSTAL" @@ -352,10 +314,8 @@ ACTOR BlueCrystalKey : StrifeKey 193 // Chapel Key --------------------------------------------------------------- -ACTOR ChapelKey : StrifeKey 195 +ACTOR ChapelKey : StrifeKey { - Game Strife - ConversationID 152, 148, 151 Inventory.Icon "I_CHAP" Tag "$TAG_CHAPELKEY" Inventory.PickupMessage "$TXT_CHAPELKEY" @@ -372,8 +332,6 @@ ACTOR ChapelKey : StrifeKey 195 ACTOR CatacombKey : StrifeKey { - Game Strife - ConversationID 153, 149, 152 Inventory.Icon "I_TUNL" Tag "$TAG_CATACOMBKEY" Inventory.GiveQuest 28 @@ -391,8 +349,6 @@ ACTOR CatacombKey : StrifeKey ACTOR SecurityKey : StrifeKey { - Game Strife - ConversationID 154, 150, 153 Inventory.Icon "I_SECK" Tag "$TAG_SECURITYKEY" Inventory.PickupMessage "$TXT_SECURITYKEY" @@ -407,10 +363,8 @@ ACTOR SecurityKey : StrifeKey // Core Key ----------------------------------------------------------------- -ACTOR CoreKey : StrifeKey 236 +ACTOR CoreKey : StrifeKey { - Game Strife - ConversationID 155, 151, 154 Inventory.Icon "I_GOID" Tag "$TAG_COREKEY" Inventory.PickupMessage "$TXT_COREKEY" @@ -425,10 +379,8 @@ ACTOR CoreKey : StrifeKey 236 // Mauler Key --------------------------------------------------------------- -ACTOR MaulerKey : StrifeKey 233 +ACTOR MaulerKey : StrifeKey { - Game Strife - ConversationID 156, 152, 155 Inventory.Icon "I_BLTK" Tag "$TAG_MAULERKEY" Inventory.PickupMessage "$TXT_MAULERKEY" @@ -443,10 +395,8 @@ ACTOR MaulerKey : StrifeKey 233 // Factory Key -------------------------------------------------------------- -ACTOR FactoryKey : StrifeKey 234 +ACTOR FactoryKey : StrifeKey { - Game Strife - ConversationID 157, 153, 156 Inventory.Icon "I_PROC" Tag "$TAG_FACTORYKEY" Inventory.PickupMessage "$TXT_FACTORYKEY" @@ -461,10 +411,8 @@ ACTOR FactoryKey : StrifeKey 234 // Mine Key ----------------------------------------------------------------- -ACTOR MineKey : StrifeKey 235 +ACTOR MineKey : StrifeKey { - Game Strife - ConversationID 158, 154, 157 Inventory.Icon "I_MINE" Tag "$TAG_MINEKEY" Inventory.PickupMessage "$TXT_MINEKEY" @@ -481,8 +429,6 @@ ACTOR MineKey : StrifeKey 235 ACTOR NewKey5 : StrifeKey { - Game Strife - ConversationID 159, 155, 158 Inventory.Icon "I_BLTK" Tag "$TAG_NEWKEY5" Inventory.PickupMessage "$TXT_NEWKEY5" @@ -499,8 +445,6 @@ ACTOR NewKey5 : StrifeKey ACTOR OraclePass : Inventory { - Game Strife - ConversationID 311, 292, 309 +INVENTORY.INVBAR Inventory.Icon "I_OTOK" Inventory.GiveQuest 18 diff --git a/wadsrc/static/actors/strife/strifestuff.txt b/wadsrc/static/actors/strife/strifestuff.txt index ef762cbb6..8880ec8a1 100644 --- a/wadsrc/static/actors/strife/strifestuff.txt +++ b/wadsrc/static/actors/strife/strifestuff.txt @@ -1,12 +1,10 @@ // Tank 1 Huge ------------------------------------------------------------ -ACTOR Tank1 209 +ACTOR Tank1 { - Game Strife Radius 16 Height 192 +SOLID - ConversationID 31, -1, -1 States { Spawn: @@ -19,13 +17,11 @@ ACTOR Tank1 209 // Tank 2 Huge ------------------------------------------------------------ -ACTOR Tank2 210 +ACTOR Tank2 { - Game Strife Radius 16 Height 192 +SOLID - ConversationID 32, -1, -1 States { Spawn: @@ -38,13 +34,11 @@ ACTOR Tank2 210 // Tank 3 Huge ------------------------------------------------------------ -ACTOR Tank3 211 +ACTOR Tank3 { - Game Strife Radius 16 Height 192 +SOLID - ConversationID 33, -1, -1 States { Spawn: @@ -57,13 +51,11 @@ ACTOR Tank3 211 // Tank 4 ------------------------------------------------------------------- -ACTOR Tank4 213 +ACTOR Tank4 { - Game Strife Radius 16 Height 56 +SOLID - ConversationID 34, -1, -1 States { Spawn: @@ -76,13 +68,11 @@ ACTOR Tank4 213 // Tank 5 ------------------------------------------------------------------- -ACTOR Tank5 214 +ACTOR Tank5 { - Game Strife Radius 16 Height 56 +SOLID - ConversationID 35, -1, -1 States { Spawn: @@ -95,13 +85,11 @@ ACTOR Tank5 214 // Tank 6 ------------------------------------------------------------------- -ACTOR Tank6 229 +ACTOR Tank6 { - Game Strife Radius 16 Height 56 +SOLID - ConversationID 36, -1, -1 States { Spawn: @@ -114,10 +102,8 @@ ACTOR Tank6 229 // Water Bottle ------------------------------------------------------------- -ACTOR WaterBottle 2014 +ACTOR WaterBottle { - Game Strife - ConversationID 131, -1, -1 States { Spawn: @@ -128,10 +114,8 @@ ACTOR WaterBottle 2014 // Mug ---------------------------------------------------------------------- -ACTOR Mug 164 +ACTOR Mug { - Game Strife - ConversationID 132, -1, -1 States { Spawn: @@ -142,15 +126,13 @@ ACTOR Mug 164 // Wooden Barrel ------------------------------------------------------------ -ACTOR WoodenBarrel 82 +ACTOR WoodenBarrel { - Game Strife Health 10 Radius 10 Height 32 +SOLID +SHOOTABLE +NOBLOOD +INCOMBAT - ConversationID 203, -1, -1 DeathSound "woodenbarrel/death" States { @@ -169,13 +151,11 @@ ACTOR WoodenBarrel 82 // Strife's explosive barrel ------------------------------------------------ -ACTOR ExplosiveBarrel2 94 +ACTOR ExplosiveBarrel2 { - Game Strife Health 30 Radius 10 Height 32 - ConversationID 204, -1, -1 +SOLID +SHOOTABLE +NOBLOOD +OLDRADIUSDMG DeathSound "world/barrelx" +INCOMBAT @@ -198,14 +178,12 @@ ACTOR ExplosiveBarrel2 94 // Light Silver, Fluorescent ---------------------------------------------- -ACTOR LightSilverFluorescent 95 +ACTOR LightSilverFluorescent { - Game Strife Radius 2.5 Height 16 +NOBLOCKMAP +FIXMAPTHINGPOS - ConversationID 206, -1, -1 States { Spawn: @@ -216,14 +194,12 @@ ACTOR LightSilverFluorescent 95 // Light Brown, Fluorescent ----------------------------------------------- -ACTOR LightBrownFluorescent 96 +ACTOR LightBrownFluorescent { - Game Strife Radius 2.5 Height 16 +NOBLOCKMAP +FIXMAPTHINGPOS - ConversationID 207, -1, -1 States { Spawn: @@ -234,14 +210,12 @@ ACTOR LightBrownFluorescent 96 // Light Gold, Fluorescent ------------------------------------------------ -ACTOR LightGoldFluorescent 97 +ACTOR LightGoldFluorescent { - Game Strife Radius 2.5 Height 16 +NOBLOCKMAP +FIXMAPTHINGPOS - ConversationID 208, -1, -1 States { Spawn: @@ -252,13 +226,11 @@ ACTOR LightGoldFluorescent 97 // Light Globe -------------------------------------------------------------- -ACTOR LightGlobe 2028 +ACTOR LightGlobe { - Game Strife Radius 16 Height 16 +SOLID - ConversationID 209, -1, -1 States { Spawn: @@ -269,13 +241,11 @@ ACTOR LightGlobe 2028 // Techno Pillar ------------------------------------------------------------ -ACTOR PillarTechno 48 +ACTOR PillarTechno { - Game Strife Radius 20 Height 128 +SOLID - ConversationID 210, -1, -1 States { Spawn: @@ -286,13 +256,11 @@ ACTOR PillarTechno 48 // Aztec Pillar ------------------------------------------------------------- -ACTOR PillarAztec 54 +ACTOR PillarAztec { - Game Strife Radius 16 Height 128 +SOLID - ConversationID 211, -1, -1 States { Spawn: @@ -303,13 +271,11 @@ ACTOR PillarAztec 54 // Damaged Aztec Pillar ----------------------------------------------------- -ACTOR PillarAztecDamaged 55 +ACTOR PillarAztecDamaged { - Game Strife Radius 16 Height 80 +SOLID - ConversationID 212, -1, -1 States { Spawn: @@ -320,13 +286,11 @@ ACTOR PillarAztecDamaged 55 // Ruined Aztec Pillar ------------------------------------------------------ -ACTOR PillarAztecRuined 56 +ACTOR PillarAztecRuined { - Game Strife Radius 16 Height 40 +SOLID - ConversationID 213, -1, -1 States { Spawn: @@ -337,13 +301,11 @@ ACTOR PillarAztecRuined 56 // Huge Tech Pillar --------------------------------------------------------- -ACTOR PillarHugeTech 57 +ACTOR PillarHugeTech { - Game Strife Radius 24 Height 192 +SOLID - ConversationID 214, -1, -1 States { Spawn: @@ -354,13 +316,11 @@ ACTOR PillarHugeTech 57 // Alien Power Crystal in a Pillar ------------------------------------------ -ACTOR PillarAlienPower 227 +ACTOR PillarAlienPower { - Game Strife Radius 24 Height 192 +SOLID - ConversationID 215, -1, -1 ActiveSound "ambient/alien2" States { @@ -372,13 +332,11 @@ ACTOR PillarAlienPower 227 // SStalactiteBig ----------------------------------------------------------- -ACTOR SStalactiteBig 98 +ACTOR SStalactiteBig { - Game Strife Radius 16 Height 54 +SOLID +SPAWNCEILING +NOGRAVITY - ConversationID 216, -1, -1 States { Spawn: @@ -389,13 +347,11 @@ ACTOR SStalactiteBig 98 // SStalactiteSmall --------------------------------------------------------- -ACTOR SStalactiteSmall 161 +ACTOR SStalactiteSmall { - Game Strife Radius 16 Height 40 +SOLID +SPAWNCEILING +NOGRAVITY - ConversationID 217, -1, -1 States { Spawn: @@ -406,13 +362,11 @@ ACTOR SStalactiteSmall 161 // SStalagmiteBig ----------------------------------------------------------- -ACTOR SStalagmiteBig 160 +ACTOR SStalagmiteBig { - Game Strife Radius 16 Height 40 +SOLID - ConversationID 218, -1, -1 States { Spawn: @@ -423,13 +377,11 @@ ACTOR SStalagmiteBig 160 // Cave Pillar Top ---------------------------------------------------------- -ACTOR CavePillarTop 159 +ACTOR CavePillarTop { - Game Strife Radius 16 Height 128 +SOLID +SPAWNCEILING +NOGRAVITY - ConversationID 219, -1, -1 States { Spawn: @@ -440,13 +392,11 @@ ACTOR CavePillarTop 159 // Cave Pillar Bottom ------------------------------------------------------- -ACTOR CavePillarBottom 162 +ACTOR CavePillarBottom { - Game Strife Radius 16 Height 128 +SOLID - ConversationID 220, -1, -1 States { Spawn: @@ -457,13 +407,11 @@ ACTOR CavePillarBottom 162 // SStalagmiteSmall --------------------------------------------------------- -ACTOR SStalagmiteSmall 163 +ACTOR SStalagmiteSmall { - Game Strife Radius 16 Height 25 +SOLID - ConversationID 221, -1, -1 States { Spawn: @@ -474,10 +422,8 @@ ACTOR SStalagmiteSmall 163 // Candle ------------------------------------------------------------------- -ACTOR Candle 34 +ACTOR Candle { - Game Strife - ConversationID 222, -1, -1 States { Spawn: @@ -488,13 +434,11 @@ ACTOR Candle 34 // StrifeCandelabra --------------------------------------------------------- -ACTOR StrifeCandelabra 35 +ACTOR StrifeCandelabra { - Game Strife Radius 16 Height 40 +SOLID - ConversationID 223, -1, -1 States { Spawn: @@ -505,11 +449,9 @@ ACTOR StrifeCandelabra 35 // Floor Water Drop --------------------------------------------------------- -ACTOR WaterDropOnFloor 103 +ACTOR WaterDropOnFloor { - Game Strife +NOBLOCKMAP - ConversationID 224, -1, -1 ActiveSound "world/waterdrip" States { @@ -526,11 +468,9 @@ ACTOR WaterDropOnFloor 103 // Waterfall Splash --------------------------------------------------------- -ACTOR WaterfallSplash 104 +ACTOR WaterfallSplash { - Game Strife +NOBLOCKMAP - ConversationID 225, -1, -1 ActiveSound "world/waterfall" States { @@ -543,12 +483,10 @@ ACTOR WaterfallSplash 104 // Ceiling Water Drip ------------------------------------------------------- -ACTOR WaterDrip 53 +ACTOR WaterDrip { - Game Strife Height 1 +NOBLOCKMAP +SPAWNCEILING +NOGRAVITY - ConversationID 226, -1, -1 States { Spawn: @@ -560,11 +498,9 @@ ACTOR WaterDrip 53 // WaterFountain ------------------------------------------------------------ -ACTOR WaterFountain 112 +ACTOR WaterFountain { - Game Strife +NOBLOCKMAP - ConversationID 227, -1, -1 ActiveSound "world/watersplash" States { @@ -577,13 +513,11 @@ ACTOR WaterFountain 112 // Hearts in Tank ----------------------------------------------------------- -ACTOR HeartsInTank 113 +ACTOR HeartsInTank { - Game Strife Radius 16 Height 56 +SOLID - ConversationID 228, -1, -1 States { Spawn: @@ -594,13 +528,11 @@ ACTOR HeartsInTank 113 // Teleport Swirl ----------------------------------------------------------- -ACTOR TeleportSwirl 23 +ACTOR TeleportSwirl { - Game Strife +NOBLOCKMAP RenderStyle Add Alpha 0.25 - ConversationID 229, -1, -1 States { Spawn: @@ -612,10 +544,8 @@ ACTOR TeleportSwirl 23 // Dead Player -------------------------------------------------------------- // Strife's disappeared. This one doesn't. -ACTOR DeadStrifePlayer 15 +ACTOR DeadStrifePlayer { - Game Strife - ConversationID 231, -1, -1 States { Spawn: @@ -628,10 +558,8 @@ ACTOR DeadStrifePlayer 15 // Dead Peasant ------------------------------------------------------------- // Unlike Strife's, this one does not turn into gibs and disappear. -ACTOR DeadPeasant 18 +ACTOR DeadPeasant { - Game Strife - ConversationID 232, -1, -1 States { Spawn: @@ -643,10 +571,8 @@ ACTOR DeadPeasant 18 // Dead Acolyte ------------------------------------------------------------- // Unlike Strife's, this one does not turn into gibs and disappear. -ACTOR DeadAcolyte 21 +ACTOR DeadAcolyte { - Game Strife - ConversationID 233, -1, -1 States { Spawn: @@ -657,10 +583,8 @@ ACTOR DeadAcolyte 21 // Dead Reaver -------------------------------------------------------------- -ACTOR DeadReaver 20 +ACTOR DeadReaver { - Game Strife - ConversationID 234, -1, -1 States { Spawn: @@ -671,10 +595,8 @@ ACTOR DeadReaver 20 // Dead Rebel --------------------------------------------------------------- -ACTOR DeadRebel 19 +ACTOR DeadRebel { - Game Strife - ConversationID 235, -1, -1 States { Spawn: @@ -685,10 +607,8 @@ ACTOR DeadRebel 19 // Sacrificed Guy ----------------------------------------------------------- -ACTOR SacrificedGuy 212 +ACTOR SacrificedGuy { - Game Strife - ConversationID 236, -1, -1 States { Spawn: @@ -704,8 +624,6 @@ ACTOR PileOfGuts // Strife used a doomednum, which is the same as the Aztec Pillar. Since // the pillar came first in the mobjinfo list, you could not spawn this // in a map. Pity. - Game Strife - ConversationID 237, -1, -1 States { Spawn: @@ -716,13 +634,11 @@ ACTOR PileOfGuts // Burning Barrel ----------------------------------------------------------- -ACTOR StrifeBurningBarrel 70 +ACTOR StrifeBurningBarrel { - Game Strife Radius 16 Height 48 +SOLID - ConversationID 238, -1, -1 States { Spawn: @@ -733,13 +649,11 @@ ACTOR StrifeBurningBarrel 70 // Burning Bowl ----------------------------------------------------------- -ACTOR BurningBowl 105 +ACTOR BurningBowl { - Game Strife Radius 16 Height 16 +SOLID - ConversationID 239, -1, -1 ActiveSound "world/smallfire" States { @@ -751,13 +665,11 @@ ACTOR BurningBowl 105 // Burning Brazier ----------------------------------------------------------- -ACTOR BurningBrazier 106 +ACTOR BurningBrazier { - Game Strife Radius 10 Height 32 +SOLID - ConversationID 240, -1, -1 ActiveSound "world/smallfire" States { @@ -769,14 +681,12 @@ ACTOR BurningBrazier 106 // Small Torch Lit -------------------------------------------------------- -ACTOR SmallTorchLit 107 +ACTOR SmallTorchLit { - Game Strife Radius 2.5 Height 16 +NOBLOCKMAP +FIXMAPTHINGPOS - ConversationID 241, -1, -1 // It doesn't have any action functions, so how does it use this sound? ActiveSound "world/smallfire" @@ -790,14 +700,12 @@ ACTOR SmallTorchLit 107 // Small Torch Unlit -------------------------------------------------------- -ACTOR SmallTorchUnlit 108 +ACTOR SmallTorchUnlit { - Game Strife Radius 2.5 Height 16 +NOBLOCKMAP +FIXMAPTHINGPOS - ConversationID 242, -1, -1 States { Spawn: @@ -808,13 +716,11 @@ ACTOR SmallTorchUnlit 108 // Ceiling Chain ------------------------------------------------------------ -ACTOR CeilingChain 109 +ACTOR CeilingChain { - Game Strife Radius 20 Height 93 +NOBLOCKMAP +SPAWNCEILING +NOGRAVITY - ConversationID 243, -1, -1 States { Spawn: @@ -825,13 +731,11 @@ ACTOR CeilingChain 109 // Cage Light --------------------------------------------------------------- -ACTOR CageLight 28 +ACTOR CageLight { // No, it's not bright even though it's a light. - Game Strife Height 3 +NOBLOCKMAP +SPAWNCEILING +NOGRAVITY - ConversationID 244, -1, -1 States { Spawn: @@ -842,13 +746,11 @@ ACTOR CageLight 28 // Statue ------------------------------------------------------------------- -ACTOR Statue 110 +ACTOR Statue { - Game Strife Radius 20 Height 64 +SOLID - ConversationID 245, -1, -1 States { Spawn: @@ -859,13 +761,11 @@ ACTOR Statue 110 // Ruined Statue ------------------------------------------------------------ -ACTOR StatueRuined 44 +ACTOR StatueRuined { - Game Strife Radius 20 Height 56 +SOLID - ConversationID 246, -1, -1 States { Spawn: @@ -876,13 +776,11 @@ ACTOR StatueRuined 44 // Medium Torch ------------------------------------------------------------- -ACTOR MediumTorch 111 +ACTOR MediumTorch { - Game Strife Radius 4 Height 72 +SOLID - ConversationID 247, -1, -1 States { Spawn: @@ -893,14 +791,12 @@ ACTOR MediumTorch 111 // Outside Lamp ------------------------------------------------------------- -ACTOR OutsideLamp 43 +ACTOR OutsideLamp { // No, it's not bright. - Game Strife Radius 3 Height 80 +SOLID - ConversationID 248, -1, -1 States { Spawn: @@ -911,14 +807,12 @@ ACTOR OutsideLamp 43 // Pole Lantern ------------------------------------------------------------- -ACTOR PoleLantern 46 +ACTOR PoleLantern { // No, it's not bright. - Game Strife Radius 3 Height 80 +SOLID - ConversationID 249, -1, -1 States { Spawn: @@ -929,11 +823,9 @@ ACTOR PoleLantern 46 // Rock 1 ------------------------------------------------------------------- -ACTOR SRock1 99 +ACTOR SRock1 { - Game Strife +NOBLOCKMAP - ConversationID 250, -1, -1 States { Spawn: @@ -944,11 +836,9 @@ ACTOR SRock1 99 // Rock 2 ------------------------------------------------------------------- -ACTOR SRock2 100 +ACTOR SRock2 { - Game Strife +NOBLOCKMAP - ConversationID 251, -1, -1 States { Spawn: @@ -959,11 +849,9 @@ ACTOR SRock2 100 // Rock 3 ------------------------------------------------------------------- -ACTOR SRock3 101 +ACTOR SRock3 { - Game Strife +NOBLOCKMAP - ConversationID 252, -1, -1 States { Spawn: @@ -974,11 +862,9 @@ ACTOR SRock3 101 // Rock 4 ------------------------------------------------------------------- -ACTOR SRock4 102 +ACTOR SRock4 { - Game Strife +NOBLOCKMAP - ConversationID 253, -1, -1 States { Spawn: @@ -989,12 +875,10 @@ ACTOR SRock4 102 // Stick in Water ----------------------------------------------------------- -ACTOR StickInWater 215 +ACTOR StickInWater { - Game Strife +NOBLOCKMAP +FLOORCLIP - ConversationID 254, -1, -1 ActiveSound "world/river" States { @@ -1006,11 +890,9 @@ ACTOR StickInWater 215 // Rubble 1 ----------------------------------------------------------------- -ACTOR Rubble1 29 +ACTOR Rubble1 { - Game Strife +NOBLOCKMAP +NOCLIP - ConversationID 255, -1, -1 States { Spawn: @@ -1021,11 +903,9 @@ ACTOR Rubble1 29 // Rubble 2 ----------------------------------------------------------------- -ACTOR Rubble2 30 +ACTOR Rubble2 { - Game Strife +NOBLOCKMAP +NOCLIP - ConversationID 256, -1, -1 States { Spawn: @@ -1036,11 +916,9 @@ ACTOR Rubble2 30 // Rubble 3 ----------------------------------------------------------------- -ACTOR Rubble3 31 +ACTOR Rubble3 { - Game Strife +NOBLOCKMAP +NOCLIP - ConversationID 257, -1, -1 States { Spawn: @@ -1051,11 +929,9 @@ ACTOR Rubble3 31 // Rubble 4 ----------------------------------------------------------------- -ACTOR Rubble4 32 +ACTOR Rubble4 { - Game Strife +NOBLOCKMAP +NOCLIP - ConversationID 258, -1, -1 States { Spawn: @@ -1066,11 +942,9 @@ ACTOR Rubble4 32 // Rubble 5 ----------------------------------------------------------------- -ACTOR Rubble5 36 +ACTOR Rubble5 { - Game Strife +NOBLOCKMAP +NOCLIP - ConversationID 259, -1, -1 States { Spawn: @@ -1081,11 +955,9 @@ ACTOR Rubble5 36 // Rubble 6 ----------------------------------------------------------------- -ACTOR Rubble6 37 +ACTOR Rubble6 { - Game Strife +NOBLOCKMAP +NOCLIP - ConversationID 260, -1, -1 States { Spawn: @@ -1096,11 +968,9 @@ ACTOR Rubble6 37 // Rubble 7 ----------------------------------------------------------------- -ACTOR Rubble7 41 +ACTOR Rubble7 { - Game Strife +NOBLOCKMAP +NOCLIP - ConversationID 261, -1, -1 States { Spawn: @@ -1111,11 +981,9 @@ ACTOR Rubble7 41 // Rubble 8 ----------------------------------------------------------------- -ACTOR Rubble8 42 +ACTOR Rubble8 { - Game Strife +NOBLOCKMAP +NOCLIP - ConversationID 262, -1, -1 States { Spawn: @@ -1126,13 +994,11 @@ ACTOR Rubble8 42 // Surgery Crab ------------------------------------------------------------- -ACTOR SurgeryCrab 117 +ACTOR SurgeryCrab { - Game Strife +SOLID +SPAWNCEILING +NOGRAVITY Radius 20 Height 16 - ConversationID 263, -1, -1 States { Spawn: @@ -1143,13 +1009,11 @@ ACTOR SurgeryCrab 117 // Large Torch -------------------------------------------------------------- -ACTOR LargeTorch 47 +ACTOR LargeTorch { - Game Strife Radius 10 Height 72 +SOLID - ConversationID 264, -1, -1 ActiveSound "world/smallfire" States { @@ -1161,13 +1025,11 @@ ACTOR LargeTorch 47 // Huge Torch -------------------------------------------------------------- -ACTOR HugeTorch 50 +ACTOR HugeTorch { - Game Strife Radius 10 Height 80 +SOLID - ConversationID 265, -1, -1 ActiveSound "world/smallfire" States { @@ -1179,13 +1041,11 @@ ACTOR HugeTorch 50 // Palm Tree ---------------------------------------------------------------- -ACTOR PalmTree 51 +ACTOR PalmTree { - Game Strife Radius 15 Height 109 +SOLID - ConversationID 266, -1, -1 States { Spawn: @@ -1196,13 +1056,11 @@ ACTOR PalmTree 51 // Big Tree ---------------------------------------------------------------- -ACTOR BigTree2 202 +ACTOR BigTree2 { - Game Strife Radius 15 Height 109 +SOLID - ConversationID 267, -1, -1 States { Spawn: @@ -1213,13 +1071,11 @@ ACTOR BigTree2 202 // Potted Tree ---------------------------------------------------------------- -ACTOR PottedTree 203 +ACTOR PottedTree { - Game Strife Radius 15 Height 64 +SOLID - ConversationID 268, -1, -1 States { Spawn: @@ -1230,13 +1086,11 @@ ACTOR PottedTree 203 // Tree Stub ---------------------------------------------------------------- -ACTOR TreeStub 33 +ACTOR TreeStub { - Game Strife Radius 15 Height 80 +SOLID - ConversationID 269, -1, -1 States { Spawn: @@ -1247,13 +1101,11 @@ ACTOR TreeStub 33 // Short Bush --------------------------------------------------------------- -ACTOR ShortBush 60 +ACTOR ShortBush { - Game Strife Radius 15 Height 40 +SOLID - ConversationID 270, -1, -1 States { Spawn: @@ -1264,13 +1116,11 @@ ACTOR ShortBush 60 // Tall Bush --------------------------------------------------------------- -ACTOR TallBush 62 +ACTOR TallBush { - Game Strife Radius 20 Height 64 +SOLID - ConversationID 271, -1, -1 States { Spawn: @@ -1281,13 +1131,11 @@ ACTOR TallBush 62 // Chimney Stack ------------------------------------------------------------ -ACTOR ChimneyStack 63 +ACTOR ChimneyStack { - Game Strife Radius 20 Height 64 // This height does not fit the sprite +SOLID - ConversationID 272, -1, -1 States { Spawn: @@ -1298,13 +1146,11 @@ ACTOR ChimneyStack 63 // Barricade Column --------------------------------------------------------- -ACTOR BarricadeColumn 69 +ACTOR BarricadeColumn { - Game Strife Radius 16 Height 128 +SOLID - ConversationID 273, -1, -1 States { Spawn: @@ -1315,13 +1161,11 @@ ACTOR BarricadeColumn 69 // Pot ---------------------------------------------------------------------- -ACTOR Pot 165 +ACTOR Pot { - Game Strife Radius 12 Height 24 +SOLID - ConversationID 274, -1, -1 States { Spawn: @@ -1332,13 +1176,11 @@ ACTOR Pot 165 // Pitcher ------------------------------------------------------------------ -ACTOR Pitcher 188 +ACTOR Pitcher { - Game Strife Radius 12 Height 32 +SOLID - ConversationID 275, -1, -1 States { Spawn: @@ -1349,13 +1191,11 @@ ACTOR Pitcher 188 // Stool -------------------------------------------------------------------- -ACTOR Stool 189 +ACTOR Stool { - Game Strife Radius 6 Height 24 +SOLID - ConversationID 276, -1, -1 States { Spawn: @@ -1366,11 +1206,9 @@ ACTOR Stool 189 // Metal Pot ---------------------------------------------------------------- -ACTOR MetalPot 190 +ACTOR MetalPot { - Game Strife +NOBLOCKMAP - ConversationID 277, -1, -1 States { Spawn: @@ -1381,11 +1219,9 @@ ACTOR MetalPot 190 // Tub ---------------------------------------------------------------------- -ACTOR Tub 191 +ACTOR Tub { - Game Strife +NOBLOCKMAP - ConversationID 278, -1, -1 States { Spawn: @@ -1396,13 +1232,11 @@ ACTOR Tub 191 // Anvil -------------------------------------------------------------------- -ACTOR Anvil 194 +ACTOR Anvil { - Game Strife Radius 16 Height 32 +SOLID - ConversationID 279, -1, -1 States { Spawn: @@ -1413,13 +1247,11 @@ ACTOR Anvil 194 // Silver Tech Lamp ---------------------------------------------------------- -ACTOR TechLampSilver 196 +ACTOR TechLampSilver { - Game Strife Radius 11 Height 64 +SOLID - ConversationID 280, -1, -1 States { Spawn: @@ -1430,13 +1262,11 @@ ACTOR TechLampSilver 196 // Brass Tech Lamp ---------------------------------------------------------- -ACTOR TechLampBrass 197 +ACTOR TechLampBrass { - Game Strife Radius 8 Height 64 +SOLID - ConversationID 281, -1, -1 States { Spawn: @@ -1447,13 +1277,11 @@ ACTOR TechLampBrass 197 // Tray -------------------------------------------------------------------- -ACTOR Tray 68 +ACTOR Tray { - Game Strife Radius 24 Height 40 +SOLID - ConversationID 282, -1, -1 States { Spawn: @@ -1464,13 +1292,11 @@ ACTOR Tray 68 // AmmoFiller --------------------------------------------------------------- -ACTOR AmmoFiller 228 +ACTOR AmmoFiller { - Game Strife Radius 12 Height 24 +SOLID - ConversationID 283, -1, -1 States { Spawn: @@ -1481,13 +1307,11 @@ ACTOR AmmoFiller 228 // Sigil Banner ------------------------------------------------------------- -ACTOR SigilBanner 216 +ACTOR SigilBanner { - Game Strife Radius 24 Height 96 +NOBLOCKMAP // I take it this was once solid, yes? - ConversationID 284, -1, -1 States { Spawn: @@ -1498,11 +1322,9 @@ ACTOR SigilBanner 216 // RebelBoots --------------------------------------------------------------- -ACTOR RebelBoots 217 +ACTOR RebelBoots { - Game Strife +NOBLOCKMAP - ConversationID 285, -1, -1 States { Spawn: @@ -1513,11 +1335,9 @@ ACTOR RebelBoots 217 // RebelHelmet -------------------------------------------------------------- -ACTOR RebelHelmet 218 +ACTOR RebelHelmet { - Game Strife +NOBLOCKMAP - ConversationID 286, -1, -1 States { Spawn: @@ -1528,11 +1348,9 @@ ACTOR RebelHelmet 218 // RebelShirt --------------------------------------------------------------- -ACTOR RebelShirt 219 +ACTOR RebelShirt { - Game Strife +NOBLOCKMAP - ConversationID 287, -1, -1 States { Spawn: @@ -1543,13 +1361,11 @@ ACTOR RebelShirt 219 // Alien Bubble Column ------------------------------------------------------ -ACTOR AlienBubbleColumn 221 +ACTOR AlienBubbleColumn { - Game Strife Radius 16 Height 128 +SOLID - ConversationID 290, -1, -1 ActiveSound "ambient/alien5" States { @@ -1561,13 +1377,11 @@ ACTOR AlienBubbleColumn 221 // Alien Floor Bubble ------------------------------------------------------- -ACTOR AlienFloorBubble 222 +ACTOR AlienFloorBubble { - Game Strife Radius 16 Height 72 +SOLID - ConversationID 291, -1, -1 ActiveSound "ambient/alien6" States { @@ -1579,13 +1393,11 @@ ACTOR AlienFloorBubble 222 // Alien Ceiling Bubble ----------------------------------------------------- -ACTOR AlienCeilingBubble 223 +ACTOR AlienCeilingBubble { - Game Strife Radius 16 Height 72 +SOLID +SPAWNCEILING +NOGRAVITY - ConversationID 292, -1, -1 ActiveSound "ambient/alien4" States { @@ -1597,13 +1409,11 @@ ACTOR AlienCeilingBubble 223 // Alien Asp Climber -------------------------------------------------------- -ACTOR AlienAspClimber 224 +ACTOR AlienAspClimber { - Game Strife Radius 16 Height 128 +SOLID - ConversationID 293, -1, -1 ActiveSound "ambient/alien3" States { @@ -1615,13 +1425,11 @@ ACTOR AlienAspClimber 224 // Alien Spider Light ------------------------------------------------------- -ACTOR AlienSpiderLight 225 +ACTOR AlienSpiderLight { - Game Strife Radius 32 Height 56 +SOLID - ConversationID 294, -1, -1 ActiveSound "ambient/alien1" States { @@ -1633,9 +1441,8 @@ ACTOR AlienSpiderLight 225 // Target Practice ----------------------------------------------------------- -ACTOR TargetPractice 208 +ACTOR TargetPractice { - Game Strife Health 99999999 PainChance 255 Radius 10 @@ -1643,7 +1450,6 @@ ACTOR TargetPractice 208 Mass 9999999 +SOLID +SHOOTABLE +NOBLOOD +INCOMBAT +NODAMAGE - ConversationID 205, -1, -1 PainSound "misc/metalhit" States { @@ -1659,9 +1465,8 @@ ACTOR TargetPractice 208 // Force Field Guard -------------------------------------------------------- -ACTOR ForceFieldGuard 25 native +ACTOR ForceFieldGuard native { - Game Strife Health 10 Radius 2 Height 1 @@ -1683,10 +1488,8 @@ ACTOR ForceFieldGuard 25 native // Kneeling Guy ------------------------------------------------------------- -ACTOR KneelingGuy 204 +ACTOR KneelingGuy { - Game Strife - ConversationID 37,-1,-1 Health 51 Painchance 255 Radius 6 @@ -1732,10 +1535,8 @@ ACTOR KneelingGuy 204 // Klaxon Warning Light ----------------------------------------------------- -ACTOR KlaxonWarningLight 24 +ACTOR KlaxonWarningLight { - Game Strife - ConversationID 121,-1,-1 ReactionTime 60 Radius 5 +NOBLOCKMAP +AMBUSH @@ -1757,10 +1558,8 @@ ACTOR KlaxonWarningLight 24 // CeilingTurret ------------------------------------------------------------ -ACTOR CeilingTurret 27 +ACTOR CeilingTurret { - Game Strife - ConversationID 122,-1,-1 Health 125 Speed 0 Painchance 0 @@ -1801,10 +1600,8 @@ ACTOR CeilingTurret 27 // Power Coupling ----------------------------------------------------------- -ACTOR PowerCoupling 220 native +ACTOR PowerCoupling native { - Game Strife - ConversationID 288,-1,-1 Health 40 Radius 17 Height 64 diff --git a/wadsrc/static/actors/strife/strifeweapons.txt b/wadsrc/static/actors/strife/strifeweapons.txt index 3b256e226..bbd837e69 100644 --- a/wadsrc/static/actors/strife/strifeweapons.txt +++ b/wadsrc/static/actors/strife/strifeweapons.txt @@ -45,7 +45,6 @@ ACTOR StrifeSpark : StrifePuff ACTOR PunchDagger : StrifeWeapon { - Game Strife Weapon.SelectionOrder 3900 +WEAPON.NOALERT Obituary "$OB_MPPUNCHDAGGER" @@ -100,7 +99,6 @@ ACTOR StrifeZap1 ACTOR ElectricBolt : StrifeZap1 { - ConversationID 102,-1,-1 Speed 30 Radius 10 Height 10 @@ -125,7 +123,6 @@ ACTOR ElectricBolt : StrifeZap1 ACTOR PoisonBolt native { - ConversationID 102,-1,-1 Speed 30 Radius 10 Height 10 @@ -150,11 +147,9 @@ ACTOR PoisonBolt native // Strife's Crossbow -------------------------------------------------------- -ACTOR StrifeCrossbow : StrifeWeapon 2001 +ACTOR StrifeCrossbow : StrifeWeapon { - Game Strife +FLOORCLIP - ConversationID 194, 188, 192 Weapon.SelectionOrder 1200 +WEAPON.NOALERT Weapon.AmmoUse1 1 @@ -203,7 +198,6 @@ ACTOR StrifeCrossbow : StrifeWeapon 2001 ACTOR StrifeCrossbow2 : StrifeCrossbow { - Game Strife Weapon.SelectionOrder 2700 Weapon.AmmoUse1 1 Weapon.AmmoGive1 0 @@ -238,10 +232,8 @@ ACTOR StrifeCrossbow2 : StrifeCrossbow // Assault Gun -------------------------------------------------------------- -actor AssaultGun : StrifeWeapon 2002 +actor AssaultGun : StrifeWeapon { - Game Strife - ConversationID 188, 182, 186 +FLOORCLIP Weapon.SelectionOrder 600 Weapon.AmmoUse1 1 @@ -277,10 +269,8 @@ actor AssaultGun : StrifeWeapon 2002 // Standing variant of the assault gun -------------------------------------- -ACTOR AssaultGunStanding : WeaponGiver 2006 +ACTOR AssaultGunStanding : WeaponGiver { - Game Strife - ConversationID 189, 183, 187 DropItem "AssaultGun" Inventory.PickupMessage "$TXT_ASSAULTGUN" States @@ -295,10 +285,8 @@ ACTOR AssaultGunStanding : WeaponGiver 2006 // Mini-Missile Launcher ---------------------------------------------------- -ACTOR MiniMissileLauncher : StrifeWeapon 2003 +ACTOR MiniMissileLauncher : StrifeWeapon { - Game Strife - ConversationID 192, 186, 190 +FLOORCLIP Weapon.SelectionOrder 1800 Weapon.AmmoUse1 1 @@ -341,7 +329,6 @@ ACTOR MiniMissileLauncher : StrifeWeapon 2003 ACTOR RocketTrail { - ConversationID 51,-1,-1 +NOBLOCKMAP +NOGRAVITY RenderStyle Translucent @@ -371,8 +358,6 @@ ACTOR MiniMissilePuff : StrifePuff ACTOR MiniMissile { - Game Strife - ConversationID 99,-1,-1 Speed 20 Radius 10 Height 14 @@ -401,10 +386,8 @@ ACTOR MiniMissile // Flame Thrower ------------------------------------------------------------ -ACTOR FlameThrower : StrifeWeapon 2005 +ACTOR FlameThrower : StrifeWeapon { - Game Strife - ConversationID 190, 184, 188 +FLOORCLIP Weapon.SelectionOrder 2100 Weapon.Kickback 0 @@ -480,10 +463,8 @@ ACTOR FlameMissile // Mauler ------------------------------------------------------------------- // The scatter version -ACTOR Mauler : StrifeWeapon 2004 +ACTOR Mauler : StrifeWeapon { - Game Strife - ConversationID 193, 187, 191 +FLOORCLIP Weapon.SelectionOrder 300 Weapon.AmmoUse1 20 @@ -528,7 +509,6 @@ ACTOR Mauler : StrifeWeapon 2004 ACTOR Mauler2 : Mauler { - Game Strife Weapon.SelectionOrder 3300 Weapon.AmmoUse1 30 Weapon.AmmoGive1 0 @@ -643,8 +623,6 @@ ACTOR MaulerTorpedoWave ACTOR HEGrenade { - Game Strife - ConversationID 106,-1,-1 Speed 15 Radius 13 Height 13 @@ -681,8 +659,6 @@ ACTOR HEGrenade ACTOR PhosphorousGrenade { - Game Strife - ConversationID 107,-1,-1 Speed 15 Radius 13 Height 13 @@ -752,10 +728,8 @@ ACTOR PhosphorousFire native // High-Explosive Grenade Launcher ------------------------------------------ -ACTOR StrifeGrenadeLauncher : StrifeWeapon 154 +ACTOR StrifeGrenadeLauncher : StrifeWeapon { - Game Strife - ConversationID 195, 189, 193 +FLOORCLIP Weapon.SelectionOrder 2400 Weapon.AmmoUse1 1 @@ -803,7 +777,6 @@ ACTOR StrifeGrenadeLauncher : StrifeWeapon 154 ACTOR StrifeGrenadeLauncher2 : StrifeGrenadeLauncher { - Game Strife Weapon.SelectionOrder 3200 Weapon.AmmoUse1 1 Weapon.AmmoGive1 0 diff --git a/wadsrc/static/actors/strife/templar.txt b/wadsrc/static/actors/strife/templar.txt index c20aed49b..95e9394cc 100644 --- a/wadsrc/static/actors/strife/templar.txt +++ b/wadsrc/static/actors/strife/templar.txt @@ -1,8 +1,6 @@ -ACTOR Templar 3003 +ACTOR Templar { - Game Strife - ConversationID 62, 61, 62 Health 300 Painchance 100 Speed 8 diff --git a/wadsrc/static/actors/strife/thingstoblowup.txt b/wadsrc/static/actors/strife/thingstoblowup.txt index 2b8f3d93e..91019ce14 100644 --- a/wadsrc/static/actors/strife/thingstoblowup.txt +++ b/wadsrc/static/actors/strife/thingstoblowup.txt @@ -21,10 +21,8 @@ ACTOR Bang4Cloud // Piston ------------------------------------------------------------------- -ACTOR Piston 45 +ACTOR Piston { - Game Strife - ConversationID 123,-1,-1 Health 100 Speed 16 Radius 20 @@ -58,10 +56,8 @@ ACTOR Piston 45 // Computer ----------------------------------------------------------------- -ACTOR Computer 182 +ACTOR Computer { - Game Strife - ConversationID 124,-1,-1 Health 80 Speed 27 Radius 26 @@ -98,10 +94,8 @@ ACTOR Computer 182 // Power Crystal ------------------------------------------------------------ -ACTOR PowerCrystal 92 +ACTOR PowerCrystal { - Game Strife - ConversationID 201,-1,-1 Health 50 Speed 14 Radius 20 diff --git a/wadsrc/static/actors/strife/zombie.txt b/wadsrc/static/actors/strife/zombie.txt index 9788bc00f..6a5b0cbfc 100644 --- a/wadsrc/static/actors/strife/zombie.txt +++ b/wadsrc/static/actors/strife/zombie.txt @@ -1,9 +1,8 @@ // Zombie ------------------------------------------------------------------- -ACTOR Zombie : StrifeHumanoid 169 +ACTOR Zombie : StrifeHumanoid { - Game Strife Health 31 Radius 20 Height 56 @@ -18,7 +17,6 @@ ACTOR Zombie : StrifeHumanoid 169 MaxStepHeight 16 MaxDropOffHeight 32 Translation 0 - ConversationID 28, -1, -1 DeathSound "zombie/death" CrushPainSound "misc/pcrush" States @@ -43,14 +41,12 @@ ACTOR Zombie : StrifeHumanoid 169 // Zombie Spawner ----------------------------------------------------------- -ACTOR ZombieSpawner 170 +ACTOR ZombieSpawner { - Game Strife Health 20 +SHOOTABLE +NOSECTOR RenderStyle None - ConversationID 30, -1, -1 ActiveSound "zombie/spawner" // Does Strife use this somewhere else? States { diff --git a/wadsrc/static/compatibility.txt b/wadsrc/static/compatibility.txt index 152e55825..3a675f275 100644 --- a/wadsrc/static/compatibility.txt +++ b/wadsrc/static/compatibility.txt @@ -124,6 +124,14 @@ BA530202AF0BA0C6CBAE6A0C7076FB72 // Requiem map04 3CA5493FEFF2E27BFD4181E6C4A3C2BF // The Waterfront map01 CBDFEFAC579A62DE8F1B48CA4A09D381 // gather2.wad map05 and darkside.wad map01 C7A2FAFB0AFB2632C50AD625CDB50E51 // Reverie map18 +9E5724BC6135AA6F86EE54FD4D91F1E2 // Project X map14 +6DA6FCBA8089161BDEC6A1D3F6C8D60F // Eternal Doom map25 +01899825FFEAE016D39C02A7DA4B218F // Archie map01 +1D9F3AFDC2517C2E450491ED13896712 // Seej map01 +0AE745A3AB86D15FB2FB74489962C421 // 6pack2 map02 +2EA635C6B6AEC76B6BC77448DAB22F9A // Squadron 417 map21 +1E998262EE319B7D088E01DE782E6B41 // Mayhem 2013 map05 +A81E2734F735A82720D8E0F1442BA0C9 // Imp's [sic] are Ghost Gods map01 { corpsegibs vileghosts diff --git a/wadsrc/static/decorate.txt b/wadsrc/static/decorate.txt index ae4b6f851..46f1854b9 100644 --- a/wadsrc/static/decorate.txt +++ b/wadsrc/static/decorate.txt @@ -93,6 +93,7 @@ #include "actors/hexen/mageplayer.txt" #include "actors/hexen/pig.txt" #include "actors/hexen/flame.txt" +#include "actors/hexen/flies.txt" #include "actors/hexen/hexenarmor.txt" #include "actors/hexen/hexendecorations.txt" #include "actors/hexen/hexenkeys.txt" diff --git a/wadsrc/static/defbinds.txt b/wadsrc/static/defbinds.txt new file mode 100644 index 000000000..420d22432 --- /dev/null +++ b/wadsrc/static/defbinds.txt @@ -0,0 +1,103 @@ +/* Default keybindings for all games */ + +` toggleconsole +1 "slot 1" +2 "slot 2" +3 "slot 3" +4 "slot 4" +5 "slot 5" +6 "slot 6" +7 "slot 7" +8 "slot 8" +9 "slot 9" +0 "slot 0" +[ invprev +] invnext +mwheelleft invprev +mwheelright invnext +enter invuse +- sizedown += sizeup +ctrl +attack +alt +strafe +shift +speed +space +use +rightarrow +right +leftarrow +left +uparrow +forward +downarrow +back +, +moveleft +. +moveright +mouse1 +attack +mouse2 +strafe +mouse3 +forward +mouse4 +speed +capslock "toggle cl_run" +f1 menu_help +f2 menu_save +f3 menu_load +f4 menu_options +f5 menu_display +f6 quicksave +f7 menu_endgame +f8 togglemessages +f9 quickload +f11 bumpgamma +f10 menu_quit +tab togglemap +pause pause +sysrq screenshot +t messagemode +\ +showscores +f12 spynext +mwheeldown weapnext +mwheelup weapprev + +// Originally just for Heretic, Hexen, and Strife. +// I can't see why they shouldn't be for Doom or Chex either. +pgup +moveup +ins +movedown +home land +pgdn +lookup +del +lookdown +end centerview + +// Generic joystick buttons +joy1 +attack +joy2 +strafe +joy3 +speed +joy4 +use + +// Xbox 360 / PS2 controllers +pad_a +use +pad_y +jump +rtrigger +attack +ltrigger +altattack +lshoulder weapprev +rshoulder weapnext +dpadleft invprev +dpadright invnext +dpaddown invuse +dpadup togglemap +pad_start pause +pad_back menu_main +lthumb crouch + + +/* Default automap bindings */ +mapbind f am_togglefollow +mapbind g am_togglegrid +mapbind p am_toggletexture +mapbind m am_setmark +mapbind c am_clearmarks +mapbind 0 am_gobig +mapbind rightarrow +am_panright +mapbind leftarrow +am_panleft +mapbind uparrow +am_panup +mapbind downarrow +am_pandown +mapbind - +am_zoomout +mapbind = +am_zoomin +mapbind kp- +am_zoomout +mapbind kp+ +am_zoomin +mapbind mwheelup "am_zoom 1.2" +mapbind mwheeldown "am_zoom -1.2" diff --git a/wadsrc/static/filter/game-doomchex/sndinfo.txt b/wadsrc/static/filter/game-doomchex/sndinfo.txt new file mode 100644 index 000000000..c103f493c --- /dev/null +++ b/wadsrc/static/filter/game-doomchex/sndinfo.txt @@ -0,0 +1,452 @@ + +/****************************************************************************/ +/* */ +/* DOOM SOUNDS */ +/* */ +/****************************************************************************/ + +// BOOM has pitch shifting equivalent to a range of 4. I never got to hear +// Doom when it used pitch shifting, so I don't know if this is correct or not. +$pitchshiftrange 4 + +// This sound is never actually used. It's just defined here for +// compatibility with DeHackEd patches that reference dsskldth. +misc/unused dsskldth // Sounds just like dsoof + +//=========================================================================== +// +// Doom-specific player sounds +// +//=========================================================================== + +$playersound player male *death dspldeth +$playersound player male *xdeath dspdiehi +$playersound player male *gibbed dsslop +$playersound player male *pain100 dsplpain +$playersounddup player male *pain75 *pain100 +$playersounddup player male *pain50 *pain100 +$playersounddup player male *pain25 *pain100 +$playersound player male *grunt dsoof +$playersounddup player male *land *grunt +$playersound player male *jump dsjump +$playersound player male *fist dspunch +$playersound player male *usefail dsnoway + +$playersound player female *death dsfldeth +$playersound player female *xdeath dsfdiehi +$playersound player female *gibbed dsslop +$playersound player female *pain100 dsflpain +$playersounddup player female *pain75 *pain100 +$playersounddup player female *pain50 *pain100 +$playersounddup player female *pain25 *pain100 +$playersound player female *grunt dsfoof +$playersounddup player female *land *grunt +$playersound player female *jump dsfjump +$playersound player female *fist dspunch +$playersound player female *usefail dsfnoway + +$playersound player other *death dscldeth +$playersound player other *xdeath dscdiehi +$playersound player other *gibbed dsslop +$playersound player other *pain100 dsclpain +$playersounddup player other *pain75 *pain100 +$playersounddup player other *pain50 *pain100 +$playersounddup player other *pain25 *pain100 +$playersound player other *grunt dscoof +$playersounddup player other *land *grunt +$playersound player other *jump dscjump +$playersound player other *fist dspunch +$playersound player other *usefail dscnoway + +// Alternate names for some player sounds needed for ZDoom <= 1.22 compatibility +// +// If any sounds with these names are defined later, they will redefine +// the corresponding player sounds instead. Likewise, if they are played, +// they will play the corresponding player sound instead. + +$playercompat player male *death player/male/death1 +$playercompat player male *death player/male/death2 +$playercompat player male *death player/male/death3 +$playercompat player male *death player/male/death4 +$playercompat player male *xdeath player/male/xdeath1 +$playercompat player male *pain100 player/male/pain100_1 +$playercompat player male *pain100 player/male/pain100_2 +$playercompat player male *pain75 player/male/pain75_1 +$playercompat player male *pain75 player/male/pain75_2 +$playercompat player male *pain50 player/male/pain50_1 +$playercompat player male *pain50 player/male/pain50_2 +$playercompat player male *pain25 player/male/pain25_1 +$playercompat player male *pain25 player/male/pain25_2 +$playercompat player male *grunt player/male/grunt1 +$playercompat player male *land player/male/land1 +$playercompat player male *jump player/male/jump1 +$playercompat player male *gibbed player/male/gibbed +$playercompat player male *fist player/male/fist + +$playercompat player female *death player/female/death1 +$playercompat player female *death player/female/death2 +$playercompat player female *death player/female/death3 +$playercompat player female *death player/female/death4 +$playercompat player female *xdeath player/female/xdeath1 +$playercompat player female *pain100 player/female/pain100_1 +$playercompat player female *pain100 player/female/pain100_2 +$playercompat player female *pain75 player/female/pain75_1 +$playercompat player female *pain75 player/female/pain75_2 +$playercompat player female *pain50 player/female/pain50_1 +$playercompat player female *pain50 player/female/pain50_2 +$playercompat player female *pain25 player/female/pain25_1 +$playercompat player female *pain25 player/female/pain25_2 +$playercompat player female *grunt player/female/grunt1 +$playercompat player female *land player/female/land1 +$playercompat player female *jump player/female/jump1 +$playercompat player female *gibbed player/female/gibbed +$playercompat player female *fist player/female/fist + +$playercompat player other *death player/cyborg/death1 +$playercompat player other *death player/cyborg/death2 +$playercompat player other *death player/cyborg/death3 +$playercompat player other *death player/cyborg/death4 +$playercompat player other *xdeath player/cyborg/xdeath1 +$playercompat player other *pain100 player/cyborg/pain100_1 +$playercompat player other *pain100 player/cyborg/pain100_2 +$playercompat player other *pain75 player/cyborg/pain75_1 +$playercompat player other *pain75 player/cyborg/pain75_2 +$playercompat player other *pain50 player/cyborg/pain50_1 +$playercompat player other *pain50 player/cyborg/pain50_2 +$playercompat player other *pain25 player/cyborg/pain25_1 +$playercompat player other *pain25 player/cyborg/pain25_2 +$playercompat player other *grunt player/cyborg/grunt1 +$playercompat player other *land player/cyborg/land1 +$playercompat player other *jump player/cyborg/jump1 +$playercompat player other *gibbed player/cyborg/gibbed +$playercompat player other *fist player/cyborg/fist + +// +// Weapons +// + +$pitchshiftrange 3 +weapons/sawup dssawup +weapons/sawidle dssawidl +weapons/sawfull dssawful +weapons/sawhit dssawhit +$pitchshiftrange 4 + +weapons/pistol dspistol +weapons/shotgf dsshotgn +weapons/shotgr dssgcock +weapons/sshotf dsdshtgn +weapons/sshoto dsdbopn +weapons/sshotc dsdbcls +weapons/sshotl dsdbload +weapons/chngun dspistol +weapons/rocklx dsbarexp +weapons/rocklf dsrlaunc +weapons/plasmaf dsplasma +weapons/plasmax dsfirxpl +weapons/bfgf dsbfg +weapons/bfgx dsrxplod +weapons/railgf railgf1 +weapons/grbnce dsbounce +weapons/grenlx dsgrnexp +weapons/grenlf dsglaunc + +// Problem: weapons/rocklx needs to be unlimited but +// is also used for the MAP30 brain explosion. +// This alias remaps to the original but has its own limit +// attached so that it doesn't become too loud. +$alias misc/brainexplode weapons/rocklx +$limit misc/brainexplode 4 + +$limit weapons/plasmaf 0 +$limit weapons/chngun 0 +$limit weapons/rocklf 0 // because normal running is almost as fast as a rocket +$limit weapons/rocklx 0 // and the cyberdemon shoots 3 at once + +//=========================================================================== +// +// MONSTER SOUNDS +// +//=========================================================================== + +misc/gibbed dsslop + +// Zombie man + +$random grunt/sight { grunt/sight1 grunt/sight2 grunt/sight3 } +$random grunt/death { grunt/death1 grunt/death2 grunt/death3 } +grunt/sight1 dsposit1 +grunt/sight2 dsposit2 +grunt/sight3 dsposit3 +grunt/active dsposact +grunt/pain dspopain +grunt/death1 dspodth1 +grunt/death2 dspodth2 +grunt/death3 dspodth3 +grunt/attack dspistol + +// Shotgun guy + +$random shotguy/sight { shotguy/sight1 shotguy/sight2 shotguy/sight3 } +$random shotguy/death { shotguy/death1 shotguy/death2 shotguy/death3 } +shotguy/sight1 dsposit1 +shotguy/sight2 dsposit2 +shotguy/sight3 dsposit3 +shotguy/active dsposact +shotguy/pain dspopain +shotguy/death1 dspodth1 +shotguy/death2 dspodth2 +shotguy/death3 dspodth3 +shotguy/attack dsshotgn + +// Archvile + +vile/sight dsvilsit +vile/active dsvilact +vile/pain dsvipain +vile/death dsvildth +vile/raise dsslop +vile/start dsvilatk +vile/stop dsbarexp +vile/firestrt dsflamst +vile/firecrkl dsflame + +// Revenant + +skeleton/sight dsskesit +skeleton/active dsskeact +skeleton/pain dspopain +skeleton/melee dsskepch +skeleton/swing dsskeswg +skeleton/death dsskedth +skeleton/attack dsskeatk +skeleton/tracex dsbarexp + +// Fatso + +fatso/sight dsmansit +fatso/active dsposact +fatso/pain dsmnpain +fatso/raiseguns dsmanatk +fatso/death dsmandth +fatso/attack dsfirsht +fatso/shotx dsfirxpl + +// Chainguy + +$random chainguy/sight { chainguy/sight1 chainguy/sight2 chainguy/sight3 } +$random chainguy/death { chainguy/death1 chainguy/death2 chainguy/death3 } +chainguy/sight1 dsposit1 +chainguy/sight2 dsposit2 +chainguy/sight3 dsposit3 +chainguy/active dsposact +chainguy/pain dspopain +chainguy/death1 dspodth1 +chainguy/death2 dspodth2 +chainguy/death3 dspodth3 +chainguy/attack dsshotgn +$limit chainguy/attack 0 + +// Imp + +$random imp/sight { imp/sight1 imp/sight2 } +$random imp/death { imp/death1 imp/death2 } +imp/sight1 dsbgsit1 +imp/sight2 dsbgsit2 +imp/active dsbgact +imp/pain dspopain +imp/melee dsclaw +imp/death1 dsbgdth1 +imp/death2 dsbgdth2 +imp/attack dsfirsht +imp/shotx dsfirxpl +$limit imp/active 6 + +// Demon + +demon/sight dssgtsit +demon/active dsdmact +demon/pain dsdmpain +demon/melee dssgtatk +demon/death dssgtdth +$limit demon/melee 4 + +// Spectre + +spectre/sight dssgtsit +spectre/active dsdmact +spectre/pain dsdmpain +spectre/melee dssgtatk +spectre/death dssgtdth + +// Cacodemon + +caco/sight dscacsit +caco/active dsdmact +caco/pain dsdmpain +caco/death dscacdth +caco/attack dsfirsht +caco/shotx dsfirxpl + +// Baron of Hell + +baron/sight dsbrssit +baron/active dsdmact +baron/pain dsdmpain +baron/melee dsclaw +baron/death dsbrsdth +baron/attack dsfirsht +baron/shotx dsfirxpl + +// Hell Knight + +knight/sight dskntsit +knight/active dsdmact +knight/pain dsdmpain +knight/death dskntdth + +// Lost Soul + +skull/active dsdmact +skull/pain dsdmpain +skull/melee dssklatk +skull/death dsfirxpl + +// Spider Mastermind + +spider/sight dsspisit +spider/active dsdmact +spider/pain dsdmpain +spider/attack dsshotgn +spider/death dsspidth +spider/walk dsmetal + +// Arachnotron + +baby/sight dsbspsit +baby/active dsbspact +baby/pain dsdmpain +baby/death dsbspdth +baby/walk dsbspwlk +baby/attack dsplasma +baby/shotx dsfirxpl + +$limit baby/attack 0 + +// Cyber Demon + +cyber/sight dscybsit +cyber/active dsdmact +cyber/pain dsdmpain +cyber/death dscybdth +cyber/hoof dshoof + +// Pain Elemental + +pain/sight dspesit +pain/active dsdmact +pain/pain dspepain +pain/death dspedth + +// Wolfenstein SS + +wolfss/sight dssssit +wolfss/active dsposact +wolfss/pain dspopain +wolfss/death dsssdth +wolfss/attack dsshotgn + +// Commander Keen + +keen/pain dskeenpn +keen/death dskeendt + +// Boss Brain + +brain/sight dsbossit +brain/pain dsbospn +brain/death dsbosdth +brain/spit dsbospit +brain/cube dsboscub +brain/cubeboom dsfirxpl +$alias brain/spawn misc/teleport + + +//============================================================================ +// +// WORLD SOUNDS +// +//=========================================================================== + +world/barrelx dsbarexp + +world/drip dsempty +world/watersplash dsempty +world/sludgegloop dsempty +world/lavasizzle dsempty + +// +// +// Platform Sounds +// + +plats/pt1_strt dspstart +plats/pt1_stop dspstop +plats/pt1_mid dsstnmov + +// +// Door Sounds +// + +doors/dr1_open dsdoropn +doors/dr1_clos dsdorcls +doors/dr2_open dsbdopn +doors/dr2_clos dsbdcls + +//=========================================================================== +// +// MISCELLANEOUS SOUNDS +// +//=========================================================================== + +misc/secret dssecret +misc/w_pkup dswpnup // Pickup weapon +misc/p_pkup dsgetpow // Pickup powerup +misc/i_pkup dsitemup // Pickup item +misc/k_pkup dsitemup // Pickup key +misc/spawn dsitmbk // Item respawn +misc/chat dsradio // Doom 2 chat sound +misc/chat2 dstink // Chat sound for everything else + +$limit misc/i_pkup 1 +$limit misc/k_pkup 1 +$limit misc/w_pkup 1 +$limit misc/p_pkup 1 +$pitchshift misc/i_pkup 0 +$pitchshift misc/k_pkup 0 +$pitchshift misc/chat2 0 + +switches/normbutn dsswtchn +switches/exitbutn dsswtchx + +misc/teleport dstelept + +menu/activate dsswtchn // Activate a new menu +menu/backup dsswtchn // Backup to previous menu +menu/prompt dsswtchn // Activate a prompt "menu" +menu/cursor dspstop // Move cursor up/down +menu/change dsstnmov // Select new value for option +menu/invalid dsoof // Menu not available +menu/dismiss dsswtchx // Dismiss a prompt message +menu/choose dspistol // Choose a menu item +menu/clear dsswtchx // Close top menu + +$random menu/quit1 { player/male/death1 demon/pain grunt/pain misc/gibbed misc/teleport grunt/sight1 grunt/sight3 demon/melee } +$random menu/quit2 { vile/active misc/p_pkup brain/cube misc/gibbed skeleton/swing knight/death baby/active demon/melee } + +$alias intermission/tick weapons/pistol +$alias intermission/cooptotal *death +$alias intermission/nextstage weapons/rocklx +$alias intermission/paststats weapons/shotgr +$alias intermission/pastcoopstats weapons/shotgr +$alias intermission/pastdmstats *gibbed diff --git a/wadsrc/static/filter/game-heretic/defbinds.txt b/wadsrc/static/filter/game-heretic/defbinds.txt new file mode 100644 index 000000000..ed820a378 --- /dev/null +++ b/wadsrc/static/filter/game-heretic/defbinds.txt @@ -0,0 +1,3 @@ +/* Default keybindings for Heretic */ + +backspace "use ArtiTomeOfPower" \ No newline at end of file diff --git a/wadsrc/static/filter/game-heretic/sndinfo.txt b/wadsrc/static/filter/game-heretic/sndinfo.txt new file mode 100644 index 000000000..b9f1fd7c3 --- /dev/null +++ b/wadsrc/static/filter/game-heretic/sndinfo.txt @@ -0,0 +1,292 @@ + +/****************************************************************************/ +/* */ +/* HERETIC SOUNDS */ +/* */ +/****************************************************************************/ + +$rolloff * custom 0 1600 + +$pitchshiftrange 2 + +$playersound player male *wimpydeath plrwdth +$playersound player male *death plrdth +$playersound player male *crazydeath plrcdth +$playersound player male *gibbed gibdth +$playersound player male *pain100 plrpai +$playersounddup player male *pain75 *pain100 +$playersounddup player male *pain50 *pain100 +$playersounddup player male *pain25 *pain100 +$playersound player male *weaponlaugh wpnup +$playersounddup player male *evillaugh *weaponlaugh +$playersound player male *grunt plroof +$playersounddup player male *usefail *grunt +$playersounddup player male *land *grunt +$playersound player male *jump plrjmp +$playersound player male *burndeath hedat1 + +$playeralias chicken male *usefail chicken/peck +$PlayerAlias Chicken Male *Grunt chicken/pain +$PlayerAlias Chicken Male *Land chicken/pain +$PlayerAlias Chicken Male *Jump chicken/active +$PlayerAlias Chicken Male *EvilLaugh chicken/active + +chicken/sight chicpai +chicken/pain chicpai +chicken/death chicdth +chicken/attack chicatk + +misc/burn hedat1 + +weapons/staffhit stfhit +weapons/staffpowerhit stfpow +weapons/staffcrackle stfcrk +weapons/wandhit gldhit +weapons/bowshoot bowsht +weapons/bowhit hrnhit +weapons/gauntletsactivate gntact +weapons/gauntletsuse gntuse +weapons/gauntletson gntful +weapons/gauntletshit gnthit +weapons/gauntletspowhit gntpow +weapons/maceshoot lobsht +weapons/macebounce bounce +weapons/macehit lobhit +weapons/macestop pstop +weapons/maceexplode phohit +weapons/blasterhit blshit +weapons/blasterpowhit hrnhit +weapons/blastershoot blssht +weapons/hornrodshoot hrnsht +weapons/hornrodhit hrnhit +weapons/hornrodpowshoot hrnpow +weapons/hornrodpowhit ramphit +weapons/phoenixshoot phosht +weapons/phoenixhit phohit +weapons/phoenixpowshoot phopow + +$limit weapons/gauntletson 0 +$limit weapons/gauntletshit 0 +$limit weapons/gauntletspowhit 0 +$limit weapons/gauntletsactivate 0 +$limit weapons/gauntletsuse 0 +$limit weapons/maceexplode 0 +$limit weapons/phoenixhit 0 +$limit weapons/phoenixpowshoot 1 + +// [RH] Heretic didn't have these limitless, but they can sound bad if they're not +$limit weapons/bowhit 0 +$limit weapons/hornrodshoot 0 +$limit weapons/hornrodhit 0 +$limit weapons/maceshoot 0 + +himp/sight impsit +himp/attack impat1 +himp/pain imppai +himp/death impdth +himp/active impsit +himp/leaderattack impat2 + +misc/invuse artiuse + +$limit misc/invuse 1 + +world/podexplode podexp +world/podgrow newpod +world/wind wind +world/waterfall waterfl + +$limit world/podexplode 0 +$limit world/podgrow 0 +$limit world/wind 1 + +misc/i_pkup itemup +misc/k_pkup keyup +misc/p_pkup artiup +$alias misc/w_pkup *weaponlaugh + +misc/rain ramrain +misc/spawn respawn + +$limit misc/spawn 1 + +// +// Minotaur sounds +// + +minotaur/sight minsit +minotaur/melee stfpow +minotaur/attack1 minat1 +minotaur/attack2 minat2 +minotaur/attack3 minat3 +minotaur/pain minpai +minotaur/death mindth +minotaur/active minact +minotaur/fx2hit phohit +minotaur/fx3hit phohit + +// +// Wizard sounds +// + +wizard/sight wizsit +wizard/attack wizatk +wizard/death wizdth +wizard/pain wizpai +wizard/active1 wizact +$random wizard/active { wizard/sight wizard/active1 } + +// +// Switch sounds +// + +switches/normbutn switch +$alias switches/exitbutn switches/normbutn // Heretic has no special exit button sound + +// +// +// Platform Sounds +// + +plats/pt1_strt pstart +plats/pt1_stop pstop +plats/pt1_mid dormov + +// +// Door Sounds +// + +doors/dr1_open doropn +doors/dr1_clos dorcls +doors/dr2_open doropn +doors/dr2_clos dorcls + +// +// Ambient sounds +// + +world/amb1 amb1 +world/amb2 amb2 +world/amb3 amb3 +world/amb4 amb4 +world/amb5 amb5 +world/amb6 amb6 +world/amb7 amb7 +world/amb8 amb8 +world/amb9 amb9 +world/amb10 amb10 +world/amb11 amb11 +world/amb12 bstsit + +$limit world/amb1 1 +$limit world/amb2 1 +$limit world/amb3 1 +$limit world/amb4 1 +$limit world/amb5 1 +$limit world/amb6 1 +$limit world/amb7 1 +$limit world/amb8 1 +$limit world/amb9 1 +$limit world/amb10 1 +$limit world/amb11 0 + +misc/chat chat +misc/teleport telept +misc/ripslop ripslop + +$limit misc/chat 1 + +world/drip gloop +world/watersplash gloop +world/lavasizzle burn +world/sludgegloop dsempty + +mummy/sight mumsit +mummy/attack1 mumat1 +mummy/attack2 mumat2 +mummy/pain mumpai +mummy/death mumdth +mummy/active mumsit +mummy/head mumhed + +beast/sight bstsit +beast/attack bstatk +beast/pain bstpai +beast/death bstdth +beast/active bstact + +snake/attack snkatk +snake/sight snksit +snake/pain snkpai +snake/death snkdth +snake/active snkact + +clink/sight clksit +clink/attack clkatk +clink/pain clkpai +clink/death clkdth +clink/active clkact + +hknight/sight kgtsit +hknight/attack kgtatk +hknight/melee kgtat2 +hknight/pain kgtpai +hknight/death kgtdth +hknight/active kgtsit +hknight/hit hrnhit +hknight/axewhoosh kgtatk + +misc/timebomb phohit +world/volcano/blast lobhit +world/volcano/shoot bstatk + +ironlich/sight hedsit +ironlich/attack1 hedat1 +ironlich/attack2 hedat2 +ironlich/attack3 hedat3 +ironlich/pain hedpai +ironlich/death heddth +ironlich/active hedact + +dsparilserpent/sight bstsit +dsparilserpent/attack bstatk +dsparilserpent/pain sbtpai +dsparilserpent/death sbtdth +dsparilserpent/active sbtact + +dsparil/sight sorsit +dsparil/attack soratk +dsparil/pain sorpai +dsparil/active soract +dsparil/rise sorrise +dsparil/zap sorzap +dsparil/scream sordsph +dsparil/explode sordexp +dsparil/bones sordbon + +chicken/active chicact +chicken/attack chicatk +chicken/pain chicpai +chicken/death chicdth +chicken/peck1 chicpk1 +chicken/peck2 chicpk2 +chicken/peck3 chicpk3 +$random chicken/peck { chicken/peck1 chicken/peck2 chicken/peck3 } + +menu/activate dorcls +menu/backup switch +menu/prompt chat +menu/choose dorcls +menu/cursor switch +menu/change keyup +menu/invalid plroof +menu/dismiss dorcls +menu/clear dorcls + +misc/secret dssecret + +$alias intermission/cooptotal *death +$alias intermission/nextstage doors/dr1_clos +$alias intermission/paststats plats/pt1_stop +$alias intermission/pastcoopstats plats/pt1_stop +$alias intermission/pastdmstats *gibbed diff --git a/wadsrc/static/filter/game-hexen/defbinds.txt b/wadsrc/static/filter/game-hexen/defbinds.txt new file mode 100644 index 000000000..58167f57e --- /dev/null +++ b/wadsrc/static/filter/game-hexen/defbinds.txt @@ -0,0 +1,12 @@ +/* Default keybindings for Hexen */ + +/ +jump +backspace invuseall +\ "use ArtiHealth" +0 useflechette +9 "use ArtiBlastRadius" +8 "use ArtiTeleport" +7 "use ArtiTeleportOther" +6 "use ArtiPork" +5 "use ArtiInvulnerability2" +scroll +showscores \ No newline at end of file diff --git a/wadsrc/static/filter/game-hexen/sndinfo.txt b/wadsrc/static/filter/game-hexen/sndinfo.txt new file mode 100644 index 000000000..a1169dcb9 --- /dev/null +++ b/wadsrc/static/filter/game-hexen/sndinfo.txt @@ -0,0 +1,191 @@ + +/****************************************************************************/ +/* */ +/* HEXEN SOUNDS */ +/* */ +/****************************************************************************/ + +$rolloff * custom 0 2025 + +$pitchshiftrange 3 + +$random PlayerFighterExtremeDeathPicker { PlayerFighterExtreme1Death + PlayerFighterExtreme2Death + PlayerFighterExtreme3Death } + +$playeralias fighter male *death PlayerFighterNormalDeath +$playeralias fighter male *crazydeath PlayerFighterCrazyDeath +$playeralias fighter male *burndeath PlayerFighterBurnDeath +$playeralias fighter male *xdeath PlayerFighterExtremeDeathPicker +$playeralias fighter male *pain100 PlayerFighterPain +$playersounddup fighter male *pain75 *pain100 +$playersounddup fighter male *pain50 *pain100 +$playersounddup fighter male *pain25 *pain100 +$playeralias fighter male *grunt PlayerFighterGrunt +$playeralias fighter male *land PlayerLand +$playeralias fighter male *poison PlayerPoisonCough +$playeralias fighter male *falling PlayerFighterFallingScream +$playeralias fighter male *splat PlayerFallingSplat +$playeralias fighter male *usefail PlayerFighterFailedUse +$playeralias fighter male *puzzfail PuzzleFailFighter +$playersound fighter male *jump fgtjump +$playeralias fighter male *fistgrunt FighterGrunt + +$random PlayerClericExtremeDeathPicker { PlayerClericExtreme1Death + PlayerClericExtreme2Death + PlayerClericExtreme3Death } + +$playeralias cleric male *death PlayerClericNormalDeath +$playeralias cleric male *crazydeath PlayerClericCrazyDeath +$playeralias cleric male *burndeath PlayerClericBurnDeath +$playeralias cleric male *xdeath PlayerClericExtremeDeathPicker +$playeralias cleric male *pain100 PlayerClericPain +$playersounddup cleric male *pain75 *pain100 +$playersounddup cleric male *pain50 *pain100 +$playersounddup cleric male *pain25 *pain100 +$playeralias cleric male *grunt PlayerClericGrunt +$playeralias cleric male *land PlayerLand +$playeralias cleric male *poison PlayerPoisonCough +$playeralias cleric male *falling PlayerClericFallingScream +$playeralias cleric male *splat PlayerFallingSplat +$playeralias cleric male *usefail PlayerClericFailedUse +$playeralias cleric male *puzzfail PuzzleFailCleric +$playersound cleric male *jump plrjump + +$random PlayerMageExtremeDeathPicker { PlayerMageExtreme1Death + PlayerMageExtreme2Death + PlayerMageExtreme3Death } + +$playeralias mage male *death PlayerMageNormalDeath +$playeralias mage male *crazydeath PlayerMageCrazyDeath +$playeralias mage male *burndeath PlayerMageBurnDeath +$playeralias mage male *xdeath PlayerMageExtremeDeathPicker +$playeralias mage male *pain100 PlayerMagePain +$playersounddup mage male *pain75 *pain100 +$playersounddup mage male *pain50 *pain100 +$playersounddup mage male *pain25 *pain100 +$playeralias mage male *grunt PlayerMageGrunt +$playeralias mage male *land PlayerLand +$playeralias mage male *poison PlayerPoisonCough +$playeralias mage male *falling PlayerMageFallingScream +$playeralias mage male *splat PlayerFallingSplat +$playeralias mage male *usefail PlayerMageFailedUse +$playeralias mage male *puzzfail PuzzleFailMage +$playersound mage male *jump mgjump + +$playeralias pig male *usefail PigActive1 +$playeralias pig male *puzzfail PigActive2 +$playeralias pig male *grunt PigActive1 +$playeralias pig male *land PigActive2 +$playeralias pig male *jump PigActive1 +$playeralias pig male *poison PigActive2 +$playeralias pig male *falling PigPain +$playeralias pig male *splat PigDeath + +$alias world/drip Ambient10 +$alias world/watersplash WaterSplash +$alias world/lavasizzle LavaSizzle +$alias world/sludgegloop SludgeGloop +$alias world/wind Wind +$alias world/quake Earthquake +$alias world/thunder ThunderCrash + +$alias misc/w_pkup PickupWeapon +$alias misc/p_pkup PickupArtifact +$alias misc/k_pkup PickupKey +$alias misc/i_pkup PickupItem +$alias misc/spawn Respawn +$alias misc/teleport Teleport +$alias misc/keytry DoorLocked +$alias misc/invuse UseArtifact +$alias misc/freeze FreezeDeath +$alias misc/icebreak FreezeShatter + +$alias misc/chat Chat +$alias misc/chat2 Chat + +$alias misc/fallingsplat PlayerFallingSplat + +$alias minotaur/sight MaulatorSight +$alias minotaur/pain MaulatorPain +$alias minotaur/death MaulatorDeath +$alias minotaur/active MaulatorActive +$alias minotaur/attack1 MaulatorHamHit +$alias minotaur/attack2 MaulatorHamSwing + +$random BishopActiveSounds { BishopActive BishopSight } +$random PigActive { PigActive1 PigActive2 } + +$limit PlayerFighterFailedUse 1 +$limit PlayerClericFailedUse 1 +$limit PlayerMageFailedUse 1 +$limit SorcererBallWoosh 4 +$limit SorcererBallBounce 3 +$limit SorcererBallExplode 3 +$limit SorcererBallPop 3 +$limit SorcererBigBallExplode 3 +$limit Ambient1 1 +$limit Ambient2 1 +$limit Ambient3 1 +$limit Ambient4 1 +$limit Ambient5 1 +$limit Ambient6 1 +$limit Ambient7 1 +$limit Ambient8 1 +$limit Ambient9 1 +$limit Ambient10 1 +$limit Ambient11 1 +$limit Ambient12 1 +$limit Ambient13 1 +$limit Ambient14 1 +$limit Ambient15 1 +$limit MysticIncant 4 + +$pitchshift PlayerMageNormalDeath 0 +$pitchshift PlayerMageCrazyDeath 0 +$pitchshift PlayerMageExtreme1Death 0 +$pitchshift PlayerMageExtreme2Death 0 +$pitchshift PlayerMageExtreme3Death 0 +$pitchshift PlayerMageBurnDeath 0 +$pitchshift PlayerMagePain 0 +$pitchshift PlayerMageGrunt 0 +$pitchshift PlayerMageFallingScream 0 +$pitchshift PlayerMageFailedUse 0 +$pitchshift PickupWeapon 0 +$pitchshift PickupPiece 0 +$pitchshift WeaponBuild 0 +$pitchshift BellRing 0 + +$alias menu/activate DoorCloseLight +$alias menu/backup PickupKey +$alias menu/prompt Chat +$alias menu/cursor FighterHammerHitWall +$alias menu/change PickupKey +$alias menu/invalid DoorCloseMetal // Hexen does not use this, but I do +$alias menu/dismiss PlatformStop +$alias menu/choose DoorCloseLight +$alias menu/clear PlatformStop + +// Hexen does not have ripslop sound like Heretic +misc/ripslop dsempty +misc/netnotch blddrp1 + +$alias intermission/cooptotal *death +$alias intermission/nextstage DoorCloseLight +$alias intermission/paststats PlatformStop +$alias intermission/pastcoopstats PlatformStop +$alias intermission/pastdmstats *gibbed + +$limit DoorCloseLight 4 + +$limit PuppyBeat 0 +$limit CeantaurPain 0 +$limit BishopPain 0 +$limit SerpentPain 0 +$limit DemonPain 0 +$limit WraithPain 0 +$limit MaulatorPain 0 +$limit EttinPain 0 +$limit FireDemonPain 0 +$limit SorcererPain 0 +$limit DragonPain 0 diff --git a/wadsrc/static/acs/strfhelp.o b/wadsrc/static/filter/game-strife/acs/strfhelp.o similarity index 100% rename from wadsrc/static/acs/strfhelp.o rename to wadsrc/static/filter/game-strife/acs/strfhelp.o diff --git a/wadsrc/static/filter/game-strife/defbinds.txt b/wadsrc/static/filter/game-strife/defbinds.txt new file mode 100644 index 000000000..9370896a0 --- /dev/null +++ b/wadsrc/static/filter/game-strife/defbinds.txt @@ -0,0 +1,11 @@ +/* Default keybindings for Strife */ + +a +jump +w "showpop 1" +backspace invdrop +z "showpop 3" +k "showpop 2" +q invquery + +; not done +; h - use health diff --git a/wadsrc/static/filter/game-strife/loadacs.txt b/wadsrc/static/filter/game-strife/loadacs.txt new file mode 100644 index 000000000..eb41c01ae --- /dev/null +++ b/wadsrc/static/filter/game-strife/loadacs.txt @@ -0,0 +1 @@ +strfhelp diff --git a/wadsrc/static/filter/game-strife/sndinfo.txt b/wadsrc/static/filter/game-strife/sndinfo.txt new file mode 100644 index 000000000..22f9b8356 --- /dev/null +++ b/wadsrc/static/filter/game-strife/sndinfo.txt @@ -0,0 +1,315 @@ + +/****************************************************************************/ +/* */ +/* STRIFE SOUNDS */ +/* */ +/****************************************************************************/ + +$rolloff * 200 1200 + +$playersound player male *death dspldeth +$playersound player male *xdeath dspdiehi +$playersound player male *gibbed dsslop +$playersound player male *pain100 dsplpain +$playersounddup player male *pain75 *pain100 +$playersounddup player male *pain50 *pain100 +$playersounddup player male *pain25 *pain100 +$playersound player male *grunt dsoof +$playersounddup player male *land *grunt +$playersound player male *jump dsjump +$playersound player male *fist dspunch +$playersound player male *usefail dsnoway + +$playersound player female *death dsfldeth +$playersound player female *xdeath dsfdiehi +$playersound player female *gibbed dsslop +$playersound player female *pain100 dsflpain +$playersounddup player female *pain75 *pain100 +$playersounddup player female *pain50 *pain100 +$playersounddup player female *pain25 *pain100 +$playersound player female *grunt dsfoof +$playersounddup player female *land *grunt +$playersound player female *jump dsfjump +$playersound player female *fist dspunch +$playersound player female *usefail dsfnoway + +$playersound player other *death dscldeth +$playersound player other *xdeath dscdiehi +$playersound player other *gibbed dsslop +$playersound player other *pain100 dsclpain +$playersounddup player other *pain75 *pain100 +$playersounddup player other *pain50 *pain100 +$playersounddup player other *pain25 *pain100 +$playersound player other *grunt dscoof +$playersounddup player other *land *grunt +$playersound player other *jump dscjump +$playersound player other *fist dspunch +$playersound player other *usefail dscnoway + +weapons/xbowshoot dsxbow +weapons/xbowhit dsfirxpl +weapons/assaultgun dsrifle +weapons/minimissile dsrlaunc +weapons/minimissilehit dsmislht +weapons/flamethrower dsflburn +weapons/flameidle dsflidl +weapons/mauler1 dspgrdat +weapons/mauler2charge dsproton +weapons/mauler2fire dsprotfl +weapons/mauler2hit dsexplod +weapons/hegrenadeshoot dsphoot +weapons/hegrenadebang dsexplod +weapons/phgrenadeshoot dsphoot +weapons/phgrenadebang dsexplod +weapons/sigil dssigil +weapons/sigilhit dssglhit +weapons/sigilcharge dssiglup + +monsters/rifle dsrifle + +switches/normbutn dsswtchn +$alias switches/exitbutn switches/normbutn +switches/chain dspulchn +switches/knob dsswknob +switches/keycard dskeycrd +switches/stone dsswston +switches/bolt dsswbolt +switches/boltback dsempty +switches/scanner dsswscan +switches/fool dsdifool +switches/valve dsvalve +switches/sizzle dsfirxpl + +world/glassbreak dsbglass +world/barrelx dsbarexp +world/smallfire dssmfire +world/largefire dslgfire +world/river dswriver +world/waterfall dswfall +world/waterdrip dswdrip +world/watersplash dswsplsh + +$limit world/river 1 +$limit world/waterfall 1 +$limit world/waterdrip 1 + +world/drip dsempty // These four satisfy the Heretic/Hexen terrain definitions +world/sludgegloop dsempty +world/lavasizzle dsempty +world/lavasizzle dsempty + +menu/activate dsswtchn // Activate a new menu +menu/backup dsswtchn // Backup to previous menu +menu/prompt dsswtchn // Activate a prompt "menu" +menu/cursor dspstop // Move cursor up/down +menu/change dsstnmov // Select new value for option +menu/invalid dsoof // Menu not available +menu/dismiss dsswish // Dismiss a prompt message +menu/choose dsrifl // Choose a menu item +menu/clear dsmtalht // Close top menu + +misc/startupdone dspsdtha +misc/teleport dstelept +misc/swish dsswish +misc/meathit dsmeatht +misc/metalhit dsmtalht +misc/pcrush dspcrush +misc/gibbed dsslop +misc/explosion dsexplod +misc/reactor dsreactr +misc/missileinflight dsrflite +misc/static dsstatic +misc/chant dschant +misc/alarm dsalarm +misc/disruptordeath dsdsrptr +$singular misc/alarm + +misc/secret dsyeah +misc/w_pkup dswpnup +misc/p_pkup dsyeah +misc/i_pkup dsitemup +misc/k_pkup dsitemup +misc/spawn dsitmbk +misc/chat dsradio +misc/invuse dsitemup +misc/mask dsmask + +plats/pt1_strt dspstart +plats/pt1_stop dspstop +plats/pt1_mid dsstnmov + +doors/dr2_open dsbdopn +doors/dr2_clos dsbdcls + +doors/stone_open dsdrston +doors/stone_close dsdrston + +doors/large_metal_open dsdrlmto +doors/large_metal_close dsdrlmtc + +doors/small_metal_open dsdrsmto +doors/small_metal_close dsdrsmtc + +doors/large_wood_open dsdrlwud +doors/large_wood_close dsdrlwud + +doors/small_wood_open dsdrswud +doors/small_wood_close dsdrswud + +doors/airlock_open dsairlck +doors/airlock_close dsairlck + +doors/chain_open dsdrchno +doors/chain_close dsdrchnc + +woodenbarrel/death dswbrldt + +human/imonfire dsburnme + +ambient/alien1 dsamaln1 +ambient/alien2 dsamaln2 +ambient/alien3 dsamaln3 +ambient/alien4 dsamaln4 +ambient/alien5 dsamaln5 +ambient/alien6 dsamaln6 + +reaver/sight dsrevsee +reaver/pain dsreavpn +reaver/death dsrevdth +reaver/active dsrevact +reaver/attack dsreavat +reaver/blade dsrevbld + +crusader/sight dsrb2see +crusader/pain dsrb2pn +crusader/death dsrb2dth +crusader/active dsrb2act +crusader/misl dsrlaunc +crusader/mislx dsmislht + +bishop/sight dsrb2see +bishop/pain dsrb2pn +bishop/death dspgrdth +bishop/active dsrb2act +bishop/misl dsrlaunc +bishop/mislx dsmislht + +sentinel/sight dssntsee +sentinel/death dssntdth +sentinel/active dssntact +sentinel/plasma dsplasma + +$random peasant/pain { peasant/pain1 peasant/pain2 peasant/pain3 peasant/pain4 } +peasant/pain1 dspespna +peasant/pain2 dspespnb +peasant/pain3 dspespnc +peasant/pain4 dspespnd + +//$random peasant/death { peasant/death1 peasant/death2 peasant/death3 } +$alias peasant/death peasant/death1 +peasant/death1 dspsdtha +peasant/death2 dspsdthb +peasant/death3 dspsdthc + +peasant/sight dsrebact +peasant/attack dsmeatht +peasant/active dsrebact + +beggar/attack dsmeatht +$alias beggar/pain peasant/pain +$alias beggar/death peasant/death + +rebel/sight dswpnup +$alias rebel/pain peasant/pain +rebel/death dsrebdth +rebel/active dsrebact + +barkeep/pain dsambbar +barkeep/active dsambppl +$singular barkeep/pain +$singular barkeep/active + +$alias smith/pain peasant/pain +$alias armorer/pain peasant/pain +$alias medic/pain peasant/pain +$alias zombie/death peasant/death +$alias becoming/death peasant/death +zombie/spawner dstelept + +acolyte/sight dsagrsee +acolyte/pain dsagrdpn +acolyte/death dsagrdth +acolyte/rifle dsrifle +$random acolyte/active { acolyte/active1 acolyte/active2 acolyte/active3 acolyte/active4 } +acolyte/active1 dsagrac1 +acolyte/active2 dsagrac2 +acolyte/active3 dsagrac3 +acolyte/active4 dsagrac4 + +macil/sight dsagrsee +$alias macil/pain peasant/pain +macil/active dsrebact +macil/slop dsslop + +alienspectre/sight dsalnsee +alienspectre/blade dsrevbld +alienspectre/pain dsalnpn +alienspectre/death dsalndth +alienspectre/active dsalnact + +turret/death dsmislht + +ore/explode dsexplod + +rat/sight dsratact +rat/death dsratact +rat/active dsratact +$singular rat/sight + +loremaster/chain dschain +loremaster/swish dsswish +loremaster/sight dslorsee +loremaster/attack dsrevbld +loremaster/pain dslorpn +loremaster/death dsslop +loremaster/active dstend + +stalker/sight dsspisit +stalker/attack dsspdatk +stalker/pain dsspdatk +stalker/death dsspidth +stalker/active dsspisit +stalker/walk dsspdwlk + +templar/sight dspgrsee +templar/pain dspgrdpn +templar/death dspgrdth +templar/active dspgract +templar/shoot dspgrdat + +inquisitor/sight dsinqsee +inquisitor/death dsinqdth +inquisitor/active dsinqact +inquisitor/walk dsinqact +inquisitor/jump dsinqjmp +inquisitor/attack dsphoot +inquisitor/atkexplode dsexplod + +programmer/clank dsmtalht +programmer/attack dsrevbld // Unused? +programmer/pain dsprgpn +programmer/death dsrb2dth +programmer/active dsprogac + +entity/sight dsmnalse +entity/melee dsrevbld +entity/pain dsalnpn +entity/death dsmnaldt +entity/active dsalnact + +$alias intermission/tick weapons/assaultgun +$alias intermission/cooptotal *death +$alias intermission/nextstage misc/explosion +$alias intermission/paststats world/barrelx +$alias intermission/pastcoopstats world/barrelx +$alias intermission/pastdmstats *gibbed diff --git a/wadsrc/static/filter/strifeteaser1/mapinfo/conversationids.txt b/wadsrc/static/filter/strifeteaser1/mapinfo/conversationids.txt new file mode 100644 index 000000000..b1b6ae380 --- /dev/null +++ b/wadsrc/static/filter/strifeteaser1/mapinfo/conversationids.txt @@ -0,0 +1,144 @@ +conversationids +{ + 2 = WeaponSmith + 3 = BarKeep + 4 = Armorer + 5 = Medic + 6 = Peasant1 + 7 = Peasant2 + 8 = Peasant3 + 9 = Peasant4 + 10 = Peasant5 + 11 = Peasant6 + 12 = Peasant7 + 13 = Peasant8 + 14 = Peasant9 + 15 = Peasant10 + 16 = Peasant11 + 17 = Peasant12 + 18 = Peasant13 + 19 = Peasant14 + 20 = Peasant15 + 21 = Peasant16 + 22 = Peasant17 + 23 = Peasant18 + 24 = Peasant19 + 25 = Peasant20 + 26 = Peasant21 + 27 = Peasant22 + 37 = Beggar1 + 38 = Beggar2 + 39 = Beggar3 + 40 = Beggar4 + 41 = Beggar5 + 42 = Rebel1 + 43 = Rebel2 + 44 = Rebel3 + 45 = Rebel4 + 46 = Rebel5 + 47 = Rebel6 + 48 = Macil1 + 49 = Macil2 + 52 = AcolyteTan + 53 = AcolyteRed + 54 = AcolyteRust + 55 = AcolyteGray + 56 = AcolyteDGreen + 57 = AcolyteGold + 58 = AcolyteShadow + 61 = Templar + 62 = Oracle + 63 = Loremaster + 70 = AlienSpectre2 + 94 = InquisitorArm + 121 = MedPatch + 122 = MedicalKit + 123 = SurgeryKit + 124 = DegninOre + 125 = MetalArmor + 126 = LeatherArmor + 129 = BaseKey + 130 = GovsKey + 131 = Passcard + 132 = IDBadge + 133 = PrisonKey + 134 = SeveredHand + 135 = Power1Key + 136 = Power2Key + 137 = Power3Key + 138 = GoldKey + 139 = IDCard + 140 = SilverKey + 141 = OracleKey + 142 = MilitaryID + 143 = OrderKey + 144 = WarehouseKey + 145 = BrassKey + 146 = RedCrystalKey + 147 = BlueCrystalKey + 148 = ChapelKey + 149 = CatacombKey + 150 = SecurityKey + 151 = CoreKey + 152 = MaulerKey + 153 = FactoryKey + 154 = MineKey + 155 = NewKey5 + 156 = ShadowArmor + 157 = EnvironmentalSuit + 158 = GuardUniform + 159 = OfficersUniform + 160 = StrifeMap + 161 = Coin + 162 = Gold10 + 163 = Gold25 + 164 = Gold50 + 165 = BeldinsRing + 166 = OfferingChalice + 167 = Ear + 168 = Communicator + 169 = Targeter + 170 = HEGrenadeRounds + 171 = PhosphorusGrenadeRounds + 173 = ClipOfBullets + 174 = BoxOfBullets + 175 = MiniMissiles + 176 = CrateOfMissiles + 177 = EnergyPod + 178 = EnergyPack + 179 = PoisonBolts + 180 = ElectricBolts + 181 = AmmoSatchel + 182 = AssaultGun + 183 = AssaultGunStanding + 184 = FlameThrower + 185 = FlameThrowerParts + 186 = MiniMissileLauncher + 187 = Mauler + 188 = StrifeCrossbow + 189 = StrifeGrenadeLauncher + 190 = Sigil1 + 191 = Sigil2 + 192 = Sigil3 + 193 = Sigil4 + 194 = Sigil5 + 196 = RatBuddy + 230 = DeadCrusader + 280 = AmmoFillup + 281 = HealthFillup + 282 = info + 283 = RaiseAlarm + 284 = OpenDoor222 + 285 = CloseDoor222 + 286 = PrisonPass + 287 = UpgradeStamina + 288 = UpgradeAccuracy + 289 = InterrogatorReport + 292 = OraclePass + 293 = QuestItem1 + 294 = QuestItem2 + 295 = QuestItem3 + 296 = QuestItem4 + 297 = QuestItem5 + 298 = QuestItem6 +} diff --git a/wadsrc/static/filter/strifeteaser2/mapinfo/conversationids.txt b/wadsrc/static/filter/strifeteaser2/mapinfo/conversationids.txt new file mode 100644 index 000000000..2dae7daea --- /dev/null +++ b/wadsrc/static/filter/strifeteaser2/mapinfo/conversationids.txt @@ -0,0 +1,142 @@ +conversationids +{ + 2 = WeaponSmith + 3 = BarKeep + 4 = Armorer + 5 = Medic + 6 = Peasant1 + 7 = Peasant2 + 8 = Peasant3 + 9 = Peasant4 + 10 = Peasant5 + 11 = Peasant6 + 12 = Peasant7 + 13 = Peasant8 + 14 = Peasant9 + 15 = Peasant10 + 16 = Peasant11 + 17 = Peasant12 + 18 = Peasant13 + 19 = Peasant14 + 20 = Peasant15 + 21 = Peasant16 + 22 = Peasant17 + 23 = Peasant18 + 24 = Peasant19 + 25 = Peasant20 + 26 = Peasant21 + 27 = Peasant22 + 38 = Beggar1 + 39 = Beggar2 + 40 = Beggar3 + 41 = Beggar4 + 42 = Beggar5 + 43 = Rebel1 + 44 = Rebel2 + 45 = Rebel3 + 47 = Rebel5 + 48 = Rebel6 + 49 = Macil1 + 50 = Macil2 + 53 = AcolyteTan + 54 = AcolyteRed + 55 = AcolyteRust + 56 = Rebel4 + 57 = AcolyteDGreen + 58 = AcolyteGold + 59 = AcolyteShadow + 62 = Templar + 63 = Oracle + 64 = Loremaster + 70 = AlienSpectre2 + 94 = InquisitorArm + 124 = MedPatch + 125 = MedicalKit + 126 = SurgeryKit + 127 = DegninOre + 128 = MetalArmor + 129 = LeatherArmor + 132 = BaseKey + 133 = GovsKey + 134 = Passcard + 135 = IDBadge + 136 = PrisonKey + 137 = SeveredHand + 138 = Power1Key + 139 = Power2Key + 140 = Power3Key + 141 = GoldKey + 142 = IDCard + 143 = SilverKey + 144 = OracleKey + 145 = MilitaryID + 146 = OrderKey + 147 = WarehouseKey + 148 = BrassKey + 149 = RedCrystalKey + 150 = BlueCrystalKey + 151 = ChapelKey + 152 = CatacombKey + 153 = SecurityKey + 154 = CoreKey + 155 = MaulerKey + 156 = FactoryKey + 157 = MineKey + 158 = NewKey5 + 159 = ShadowArmor + 160 = EnvironmentalSuit + 161 = GuardUniform + 162 = OfficersUniform + 163 = StrifeMap + 165 = Coin + 166 = Gold10 + 167 = Gold25 + 168 = Gold50 + 169 = BeldinsRing + 170 = OfferingChalice + 171 = Ear + 172 = Communicator + 173 = Targeter + 174 = HEGrenadeRounds + 175 = PhosphorusGrenadeRounds + 177 = ClipOfBullets + 178 = BoxOfBullets + 179 = MiniMissiles + 180 = CrateOfMissiles + 181 = EnergyPod + 182 = EnergyPack + 183 = PoisonBolts + 184 = AmmoSatchel + 186 = AssaultGun + 187 = AssaultGunStanding + 188 = FlameThrower + 189 = FlameThrowerParts + 190 = MiniMissileLauncher + 191 = Mauler + 192 = StrifeCrossbow + 193 = StrifeGrenadeLauncher + 194 = Sigil1 + 195 = Sigil2 + 196 = Sigil3 + 197 = Sigil4 + 198 = Sigil5 + 200 = RatBuddy + 230 = DeadCrusader + 297 = AmmoFillup + 298 = HealthFillup + 299 = info + 300 = RaiseAlarm + 301 = OpenDoor222 + 302 = CloseDoor222 + 303 = PrisonPass + 306 = InterrogatorReport + 307 = UpgradeStamina + 308 = UpgradeAccuracy + 309 = OraclePass + 310 = QuestItem1 + 311 = QuestItem2 + 312 = QuestItem3 + 313 = QuestItem4 + 314 = QuestItem5 + 315 = QuestItem6 +} \ No newline at end of file diff --git a/wadsrc/static/iwadinfo.txt b/wadsrc/static/iwadinfo.txt index d5ccd46a8..6c958ddfa 100644 --- a/wadsrc/static/iwadinfo.txt +++ b/wadsrc/static/iwadinfo.txt @@ -3,8 +3,10 @@ IWad { Name = "The Adventures of Square" + Autoname = "square.square" Game = "Doom" Config = "Square" + Mapinfo = "mapinfo/mindefaults.txt" MustContain = "SQU-IWAD", "E1A1" BannerColors = "ff ff ff", "80 00 80" } @@ -12,8 +14,10 @@ IWad IWad { Name = "The Adventures of Square (Square-ware)" + Autoname = "square.squareware" Game = "Doom" Config = "Square" + Mapinfo = "mapinfo/mindefaults.txt" MustContain = "SQU-SWE1", "E1A1" BannerColors = "ff ff ff", "80 00 80" } @@ -21,6 +25,7 @@ IWad IWad { Name = "Harmony" + Autoname = "harmony" Game = "Doom" Config = "Harmony" Mapinfo = "mapinfo/hacxharm.txt" @@ -33,6 +38,7 @@ IWad Name = "Hacx 2.0" Game = "Doom" Config = "Hacx" + Autoname = "hacx.hacx2" Mapinfo = "mapinfo/hacxharm.txt" MustContain = "MAP01", "HACX-E" BannerColors = "ff ff ff", "00 88 22" @@ -43,6 +49,7 @@ IWad Name = "Hacx: Twitch'n Kill" Game = "Doom" Config = "Hacx" + Autoname = "hacx.hacx1" Mapinfo = "mapinfo/hacxharm.txt" MustContain = "MAP01", "HACX-R" BannerColors = "00 00 a8", "a8 a8 a8" @@ -51,6 +58,7 @@ IWad IWad { Name = "Action Doom 2: Urban Brawl" + Autoname = "urbanbrawl" Game = "Doom" Config = "UrbanBrawl" Mapinfo = "mapinfo/urbanbrawl.txt" @@ -61,7 +69,7 @@ IWad IWad { Name = "Chex(R) Quest 3" - Autoname = "Chex3" + Autoname = "chex.chex3" Game = "Chex" Config = "Chex" Mapinfo = "mapinfo/chex.txt" @@ -73,7 +81,7 @@ IWad IWad { Name = "Chex(R) Quest" - Autoname = "Chex1" + Autoname = "chex.chex1" Game = "Chex" Config = "Chex" Mapinfo = "mapinfo/chex.txt" @@ -84,6 +92,7 @@ IWad IWad { Name = "Strife: Quest for the Sigil" + Autoname = "strife" Game = "Strife" Config = "Strife" Mapinfo = "mapinfo/strife.txt" @@ -97,6 +106,7 @@ IWad Name = "Strife: Teaser (New Version)" Game = "Strife" Config = "Strife" + Autoname = "strifeteaser2" Mapinfo = "mapinfo/strife.txt" Compatibility = "Shareware", "Teaser2" MustContain = "MAP33", "ENDSTRF", "INVCURS" @@ -108,6 +118,7 @@ IWad Name = "Strife: Teaser (Old Version)" Game = "Strife" Config = "Strife" + Autoname = "strifeteaser1" Mapinfo = "mapinfo/strife.txt" Compatibility = "Shareware" MustContain = "MAP33", "ENDSTRF" @@ -119,6 +130,7 @@ IWad Name = "Hexen: Beyond Heretic" Game = "Hexen" Config = "Hexen" + Autoname = "hexen.hexen" Mapinfo = "mapinfo/hexen.txt" Compatibility = "Poly1" MustContain = "TITLE", "MAP01", "MAP40", "WINNOWR" @@ -128,7 +140,7 @@ IWad IWad { Name = "Hexen: Deathkings of the Dark Citadel" - Autoname = "HexenDK" + Autoname = "hexen.deathkings" Game = "Hexen" Config = "Hexen" Mapinfo = "mapinfo/hexen.txt" @@ -152,7 +164,7 @@ IWad IWad { Name = "Blasphemer" - Autoname = "Blasphemer" + Autoname = "blasphemer" Game = "Heretic" Config = "Heretic" Mapinfo = "mapinfo/heretic.txt" @@ -163,7 +175,7 @@ IWad IWad { Name = "Heretic: Shadow of the Serpent Riders" - Autoname = "HereticSR" + Autoname = "heretic.shadow" Game = "Heretic" Config = "Heretic" Mapinfo = "mapinfo/heretic.txt" @@ -177,6 +189,7 @@ IWad Name = "Heretic" Game = "Heretic" Config = "Heretic" + Autoname = "heretic.heretic" Mapinfo = "mapinfo/heretic.txt" MustContain = "E1M1", "E2M1", "TITLE", "MUS_E1M1" BannerColors = "fc fc 00", "a8 00 00" @@ -196,8 +209,7 @@ IWad IWad { Name = "FreeDM" - Autoname = "FreeDM" - Group = "Freedoom" + Autoname = "doom.freedoom.freedm" Game = "Doom" Config = "Doom" Mapinfo = "mapinfo/doom2.txt" @@ -208,8 +220,7 @@ IWad IWad { Name = "Freedoom: Phase 2" - Autoname = "Freedoom2" - Group = "Freedoom" + Autoname = "doom.freedoom.phase2" Game = "Doom" Config = "Doom" Mapinfo = "mapinfo/doom2.txt" @@ -220,8 +231,7 @@ IWad IWad { Name = "Freedoom: Phase 1" - Autoname = "Freedoom1" - Group = "Freedoom" + Autoname = "doom.freedoom.phase1" Game = "Doom" Config = "Doom" Mapinfo = "mapinfo/doom1.txt" @@ -232,8 +242,7 @@ IWad IWad { Name = "Freedoom: Demo Version" - Autoname = "Freedoom1" - Group = "Freedoom" + Autoname = "doom.freedoom.demo" Game = "Doom" Config = "Doom" Mapinfo = "mapinfo/doom1.txt" @@ -244,7 +253,7 @@ IWad IWad { Name = "DOOM: BFG Edition" - Autoname = "DoomBFG" + Autoname = "doom.doom1.bfg" Game = "Doom" Config = "Doom" Mapinfo = "mapinfo/ultdoom.txt" @@ -259,7 +268,7 @@ IWad IWad { Name = "The Ultimate DOOM" - Autoname = "DoomU" + Autoname = "doom.doom1.ultimate" Game = "Doom" Config = "Doom" Mapinfo = "mapinfo/ultdoom.txt" @@ -273,7 +282,7 @@ IWad IWad { Name = "DOOM Registered" - Autoname = "Doom1" + Autoname = "doom.doom1.registered" Game = "Doom" Config = "Doom" Mapinfo = "mapinfo/doom1.txt" @@ -298,7 +307,7 @@ IWad IWad { Name = "Final Doom: TNT - Evilution" - Autoname = "TNT" + Autoname = "doom.doom2.tnt" Game = "Doom" Config = "Doom" Mapinfo = "mapinfo/tnt.txt" @@ -310,7 +319,7 @@ IWad IWad { Name = "Final Doom: Plutonia Experiment" - Autoname = "Plutonia" + Autoname = "doom.doom2.plutonia" Game = "Doom" Config = "Doom" Mapinfo = "mapinfo/plutonia.txt" @@ -322,7 +331,7 @@ IWad IWad { Name = "DOOM 2: BFG Edition" - Autoname = "Doom2BFG" + Autoname = "doom.doom2.bfg" Game = "Doom" Config = "Doom" Mapinfo = "mapinfo/doom2bfg.txt" @@ -336,7 +345,7 @@ IWad IWad { Name = "DOOM 2: Hell on Earth" - Autoname = "Doom2" + Autoname = "doom.doom2.commercial" Game = "Doom" Config = "Doom" Mapinfo = "mapinfo/doom2.txt" diff --git a/wadsrc/static/mapinfo/chex.txt b/wadsrc/static/mapinfo/chex.txt index 1edaf9256..9bd974bc7 100644 --- a/wadsrc/static/mapinfo/chex.txt +++ b/wadsrc/static/mapinfo/chex.txt @@ -1,5 +1,6 @@ // MAPINFO for Chex Quest include "mapinfo/common.txt" +include "mapinfo/doomitems.txt" gameinfo { @@ -67,6 +68,64 @@ gameinfo statscreen_enteringpatch = "WIENTER" } +DoomEdNums +{ + 5 = ChexBlueCard + 6 = ChexYellowCard + 8 = Zorchpack + 9 = FlemoidusBipedicus + 13 = ChexRedCard + 17 = PhasingZorchPack + 25 = ChexTallFlower2 + 28 = ChexTallFlower + 30 = ChexCavernStalagmite + 31 = ChexSubmergedPlant + 32 = ChexCavernColumn + 33 = ChexMineCart + 34 = ChexChemicalFlask + 35 = ChexGasTank + 37 = ChexFlagOnPole + 41 = ChexChemicalBurner + 43 = ChexOrangeTree + 44 = ChexSlimeFountain + 45 = ChexCivilian1 + 47 = ChexAppleTree + 48 = ChexSpaceship + 54 = ChexBananaTree + 55 = ChexLightColumn + 56 = ChexCivilian2 + 57 = ChexCivilian3 + 82 = SuperLargeZorcher + 2001 = LargeZorcher + 2002 = RapidZorcher + 2003 = ZorchPropulsor + 2004 = PhasingZorcher + 2005 = SuperBootspork + 2006 = LAZDevice + 2007 = MiniZorchRecharge + 2008 = LargeZorchRecharge + 2010 = PropulsorZorch + 2011 = BowlOfFruit + 2012 = BowlOfVegetables + 2013 = SuperchargeBreakfast + 2014 = GlassOfWater + 2015 = SlimeRepellent + 2018 = ChexArmor + 2019 = SuperChexArmor + 2025 = SlimeProofSuit + 2026 = ComputerAreaMap + 2028 = ChexLandingLight + 2046 = PropulsorZorchPack + 2047 = PhasingZorch + 2048 = MiniZorchPack + 2049 = LargeZorchPack + 3001 = ArmoredFlemoidusBipedicus + 3002 = FlemoidusCycloptisCommonus + 3003 = Flembrane + 3004 = FlemoidusCommonus + 3006 = ChexSoul +} + skill baby { AutoUseHealth diff --git a/wadsrc/static/mapinfo/common.txt b/wadsrc/static/mapinfo/common.txt index fc6379d01..eece14c84 100644 --- a/wadsrc/static/mapinfo/common.txt +++ b/wadsrc/static/mapinfo/common.txt @@ -1,9 +1,282 @@ +include "mapinfo/conversationids.txt" + Gameinfo { CheatKey = "maparrows/key.txt" EasyKey = "maparrows/ravenkey.txt" } +DoomEdNums +{ + 0 = Unknown + 1 = "$Player1Start" + 2 = "$Player2Start" + 3 = "$Player3Start" + 4 = "$Player4Start" + 11 = "$DeathmatchStart" + 14 = TeleportDest + 118 = ZBridge + 888 = MBFHelperDog + 1400 = "$SSeqOverride", 0 + 1401 = "$SSeqOverride", 1 + 1402 = "$SSeqOverride", 2 + 1403 = "$SSeqOverride", 3 + 1404 = "$SSeqOverride", 4 + 1405 = "$SSeqOverride", 5 + 1406 = "$SSeqOverride", 6 + 1407 = "$SSeqOverride", 7 + 1408 = "$SSeqOverride", 8 + 1409 = "$SSeqOverride", 9 + 1411 = "$SSeqOverride" + 1500 = "$VavoomFloor" + 1501 = "$VavoomCeiling" + 1502 = none + 1503 = none + 1504 = "$VertexFloorZ" + 1505 = "$VertexCeilingZ" + 5001 = PointPusher + 5002 = PointPuller + 5004 = FS_Mapspot + 5061 = InvisibleBridge32 + 5064 = InvisibleBridge16 + 5065 = InvisibleBridge8 + 9001 = MapSpot + 9013 = MapSpotGravity + 9024 = PatrolPoint + 9025 = SecurityCamera + 9026 = Spark + 9027 = RedParticleFountain + 9028 = GreenParticleFountain + 9029 = BlueParticleFountain + 9030 = YellowParticleFountain + 9031 = PurpleParticleFountain + 9032 = BlackParticleFountain + 9033 = WhiteParticleFountain + 9037 = BetaSkull + 9038 = ColorSetter + 9039 = FadeSetter + 9040 = MapMarker + 9041 = SectorFlagSetter + 9043 = TeleportDest3 + 9044 = TeleportDest2 + 9045 = Waterzone + 9046 = SecretTrigger + 9047 = PatrolSpecial + 9048 = SoundEnvironment + 9070 = InterpolationPoint + 9071 = PathFollower + 9072 = MovingCamera + 9073 = AimingCamera + 9074 = ActorMover + 9075 = InterpolationSpecial + 9076 = HateTarget + 9077 = UpperStackLookOnly + 9078 = LowerStackLookOnly + 9080 = SkyViewpoint + 9081 = SkyPicker + 9082 = SectorSilencer + 9083 = SkyCamCompat + 9200 = Decal + 9300 = "$PolyAnchor" + 9301 = "$PolySpawn" + 9302 = "$PolySpawnCrush" + 9303 = "$PolySpawnHurt" + 9500 = "$SlopeFloorPointLine" + 9501 = "$SlopeCeilingPointLine" + 9502 = "$SetFloorSlope" + 9503 = "$SetCeilingSlope" + 9510 = "$CopyFloorPlane" + 9511 = "$CopyCeilingPlane" + 9800 = none + 9801 = none + 9802 = none + 9803 = none + 9804 = none + 9810 = none + 9811 = none + 9812 = none + 9813 = none + 9814 = none + 9820 = none + 9821 = none + 9822 = none + 9823 = none + 9824 = none + 9825 = none + 9982 = SecActEyesAboveC + 9983 = SecActEyesBelowC + 9988 = CustomSprite + 9989 = SecActHitFakeFloor + 9990 = InvisibleBridge + 9991 = CustomBridge + 9992 = SecActEyesSurface + 9993 = SecActEyesDive + 9994 = SecActUseWall + 9995 = SecActUse + 9996 = SecActHitCeil + 9997 = SecActExit + 9998 = SecActEnter + 9999 = SecActHitFloor + 14001 = AmbientSound, 1 + 14002 = AmbientSound, 2 + 14003 = AmbientSound, 3 + 14004 = AmbientSound, 4 + 14005 = AmbientSound, 5 + 14006 = AmbientSound, 6 + 14007 = AmbientSound, 7 + 14008 = AmbientSound, 8 + 14009 = AmbientSound, 9 + 14010 = AmbientSound, 10 + 14011 = AmbientSound, 11 + 14012 = AmbientSound, 12 + 14013 = AmbientSound, 13 + 14014 = AmbientSound, 14 + 14015 = AmbientSound, 15 + 14016 = AmbientSound, 16 + 14017 = AmbientSound, 17 + 14018 = AmbientSound, 18 + 14019 = AmbientSound, 19 + 14020 = AmbientSound, 20 + 14021 = AmbientSound, 21 + 14022 = AmbientSound, 22 + 14023 = AmbientSound, 23 + 14024 = AmbientSound, 24 + 14025 = AmbientSound, 25 + 14026 = AmbientSound, 26 + 14027 = AmbientSound, 27 + 14028 = AmbientSound, 28 + 14029 = AmbientSound, 29 + 14030 = AmbientSound, 30 + 14031 = AmbientSound, 31 + 14032 = AmbientSound, 32 + 14033 = AmbientSound, 33 + 14034 = AmbientSound, 34 + 14035 = AmbientSound, 35 + 14036 = AmbientSound, 36 + 14037 = AmbientSound, 37 + 14038 = AmbientSound, 38 + 14039 = AmbientSound, 39 + 14040 = AmbientSound, 40 + 14041 = AmbientSound, 41 + 14042 = AmbientSound, 42 + 14043 = AmbientSound, 43 + 14044 = AmbientSound, 44 + 14045 = AmbientSound, 45 + 14046 = AmbientSound, 46 + 14047 = AmbientSound, 47 + 14048 = AmbientSound, 48 + 14049 = AmbientSound, 49 + 14050 = AmbientSound, 50 + 14051 = AmbientSound, 51 + 14052 = AmbientSound, 52 + 14053 = AmbientSound, 53 + 14054 = AmbientSound, 54 + 14055 = AmbientSound, 55 + 14056 = AmbientSound, 56 + 14057 = AmbientSound, 57 + 14058 = AmbientSound, 58 + 14059 = AmbientSound, 59 + 14060 = AmbientSound, 60 + 14061 = AmbientSound, 61 + 14062 = AmbientSound, 62 + 14063 = AmbientSound, 63 + 14064 = AmbientSound, 64 + 14065 = AmbientSound + 14066 = SoundSequence + 14067 = AmbientSoundNoGravity + 14101 = MusicChanger, 1 + 14102 = MusicChanger, 2 + 14103 = MusicChanger, 3 + 14104 = MusicChanger, 4 + 14105 = MusicChanger, 5 + 14106 = MusicChanger, 6 + 14107 = MusicChanger, 7 + 14108 = MusicChanger, 8 + 14109 = MusicChanger, 9 + 14110 = MusicChanger, 10 + 14111 = MusicChanger, 11 + 14112 = MusicChanger, 12 + 14113 = MusicChanger, 13 + 14114 = MusicChanger, 14 + 14115 = MusicChanger, 15 + 14116 = MusicChanger, 16 + 14117 = MusicChanger, 17 + 14118 = MusicChanger, 18 + 14119 = MusicChanger, 19 + 14120 = MusicChanger, 20 + 14121 = MusicChanger, 21 + 14122 = MusicChanger, 22 + 14123 = MusicChanger, 23 + 14124 = MusicChanger, 24 + 14125 = MusicChanger, 25 + 14126 = MusicChanger, 26 + 14127 = MusicChanger, 27 + 14128 = MusicChanger, 28 + 14129 = MusicChanger, 29 + 14130 = MusicChanger, 30 + 14131 = MusicChanger, 31 + 14132 = MusicChanger, 32 + 14133 = MusicChanger, 33 + 14134 = MusicChanger, 34 + 14135 = MusicChanger, 35 + 14136 = MusicChanger, 36 + 14137 = MusicChanger, 37 + 14138 = MusicChanger, 38 + 14139 = MusicChanger, 39 + 14140 = MusicChanger, 40 + 14141 = MusicChanger, 41 + 14142 = MusicChanger, 42 + 14143 = MusicChanger, 43 + 14144 = MusicChanger, 44 + 14145 = MusicChanger, 45 + 14146 = MusicChanger, 46 + 14147 = MusicChanger, 47 + 14148 = MusicChanger, 48 + 14149 = MusicChanger, 49 + 14150 = MusicChanger, 50 + 14151 = MusicChanger, 51 + 14152 = MusicChanger, 52 + 14153 = MusicChanger, 53 + 14154 = MusicChanger, 54 + 14155 = MusicChanger, 55 + 14156 = MusicChanger, 56 + 14157 = MusicChanger, 57 + 14158 = MusicChanger, 58 + 14159 = MusicChanger, 59 + 14160 = MusicChanger, 60 + 14161 = MusicChanger, 61 + 14162 = MusicChanger, 62 + 14163 = MusicChanger, 63 + 14164 = MusicChanger, 64 + 14165 = MusicChanger + 32000 = DoomBuilderCamera +} + +SpawnNums +{ + 41 = Rock1 + 42 = Rock2 + 43 = Rock3 + 44 = Dirt1 + 45 = Dirt2 + 46 = Dirt3 + 47 = Dirt4 + 48 = Dirt5 + 49 = Dirt6 + 54 = SGShard1 + 55 = SGShard2 + 56 = SGShard3 + 57 = SGShard4 + 58 = SGShard5 + 59 = SGShard6 + 60 = SGShard7 + 61 = SGShard8 + 62 = SGShard9 + 63 = SGShard0 + 130 = Blood +} + + Intermission Inter_Titlescreen { GotoTitle diff --git a/wadsrc/static/mapinfo/conversationids.txt b/wadsrc/static/mapinfo/conversationids.txt new file mode 100644 index 000000000..f1e6cd171 --- /dev/null +++ b/wadsrc/static/mapinfo/conversationids.txt @@ -0,0 +1,326 @@ +conversationids +{ + // no conversation IDs were ever defined for other Games than Strife so this is all there is. + 2 = WeaponSmith + 3 = BarKeep + 4 = Armorer + 5 = Medic + 6 = Peasant1 + 7 = Peasant2 + 8 = Peasant3 + 9 = Peasant4 + 10 = Peasant5 + 11 = Peasant6 + 12 = Peasant7 + 13 = Peasant8 + 14 = Peasant9 + 15 = Peasant10 + 16 = Peasant11 + 17 = Peasant12 + 18 = Peasant13 + 19 = Peasant14 + 20 = Peasant15 + 21 = Peasant16 + 22 = Peasant17 + 23 = Peasant18 + 24 = Peasant19 + 25 = Peasant20 + 26 = Peasant21 + 27 = Peasant22 + 28 = Zombie + 29 = AcolyteToBe + 30 = ZombieSpawner + 31 = Tank1 + 32 = Tank2 + 33 = Tank3 + 34 = Tank4 + 35 = Tank5 + 36 = Tank6 + 37 = KneelingGuy + 38 = Beggar1 + 39 = Beggar2 + 40 = Beggar3 + 41 = Beggar4 + 42 = Beggar5 + 43 = Rebel1 + 44 = Rebel2 + 45 = Rebel3 + 46 = Rebel4 + 47 = Rebel5 + 48 = Rebel6 + 49 = Macil1 + 50 = Macil2 + 51 = RocketTrail + 52 = Reaver + 53 = AcolyteTan + 54 = AcolyteRed + 55 = AcolyteRust + 56 = AcolyteGray + 57 = AcolyteDGreen + 58 = AcolyteGold + 59 = AcolyteLGreen + 60 = AcolyteBlue + 61 = AcolyteShadow + 62 = Templar + 63 = Crusader + 64 = StrifeBishop + 65 = Oracle + 66 = Loremaster + 67 = AlienSpectre1 + 68 = AlienChunkSmall + 69 = AlienChunkLarge + 70 = AlienSpectre2 + 71 = AlienSpectre3 + 72 = AlienSpectre4 + 73 = AlienSpectre5 + 74 = EntityBoss + 75 = EntitySecond + 76 = EntityNest + 77 = EntityPod + 78 = SpectralLightningH1 + 79 = SpectralLightningH2 + 80 = SpectralLightningBall1 + 81 = SpectralLightningBall2 + 82 = SpectralLightningH3 + 84 = SpectralLightningBigBall1 + 85 = SpectralLightningBigBall2 + 86 = SpectralLightningV1 + 87 = SpectralLightningV2 + 88 = SpectralLightningSpot + 89 = SpectralLightningBigV1 + 90 = SpectralLightningBigV2 + 91 = Sentinel + 92 = Stalker + 93 = Inquisitor + 94 = InquisitorArm + 95 = Programmer + 96 = ProgrammerBase + 97 = LoreShot + 98 = LoreShot2 + 99 = MiniMissile + 102 = PoisonBolt + 106 = HEGrenade + 107 = PhosphorousGrenade + 108 = InquisitorShot + 121 = KlaxonWarningLight + 122 = CeilingTurret + 123 = Piston + 124 = Computer + 125 = MedPatch + 126 = MedicalKit + 127 = SurgeryKit + 128 = DegninOre + 129 = MetalArmor + 130 = LeatherArmor + 131 = WaterBottle + 132 = Mug + 133 = BaseKey + 134 = GovsKey + 135 = Passcard + 136 = IDBadge + 137 = PrisonKey + 138 = SeveredHand + 139 = Power1Key + 140 = Power2Key + 141 = Power3Key + 142 = GoldKey + 143 = IDCard + 144 = SilverKey + 145 = OracleKey + 146 = MilitaryID + 147 = OrderKey + 148 = WarehouseKey + 149 = BrassKey + 150 = RedCrystalKey + 151 = BlueCrystalKey + 152 = ChapelKey + 153 = CatacombKey + 154 = SecurityKey + 155 = CoreKey + 156 = MaulerKey + 157 = FactoryKey + 158 = MineKey + 159 = NewKey5 + 160 = ShadowArmor + 161 = EnvironmentalSuit + 162 = GuardUniform + 163 = OfficersUniform + 164 = StrifeMap + 165 = Scanner + 166 = TeleporterBeacon + 167 = Targeter + 168 = Coin + 169 = Gold10 + 170 = Gold25 + 171 = Gold50 + 172 = Gold300 + 173 = BeldinsRing + 174 = OfferingChalice + 175 = Ear + 176 = Communicator + 177 = HEGrenadeRounds + 178 = PhosphorusGrenadeRounds + 179 = ClipOfBullets + 180 = BoxOfBullets + 181 = MiniMissiles + 182 = CrateOfMissiles + 183 = EnergyPod + 184 = EnergyPack + 185 = PoisonBolts + 186 = ElectricBolts + 187 = AmmoSatchel + 188 = AssaultGun + 189 = AssaultGunStanding + 190 = FlameThrower + 191 = FlameThrowerParts + 192 = MiniMissileLauncher + 193 = Mauler + 194 = StrifeCrossbow + 195 = StrifeGrenadeLauncher + 196 = Sigil1 + 197 = Sigil2 + 198 = Sigil3 + 199 = Sigil4 + 200 = Sigil5 + 201 = PowerCrystal + 202 = RatBuddy + 203 = WoodenBarrel + 204 = ExplosiveBarrel2 + 205 = TargetPractice + 206 = LightSilverFluorescent + 207 = LightBrownFluorescent + 208 = LightGoldFluorescent + 209 = LightGlobe + 210 = PillarTechno + 211 = PillarAztec + 212 = PillarAztecDamaged + 213 = PillarAztecRuined + 214 = PillarHugeTech + 215 = PillarAlienPower + 216 = SStalactiteBig + 217 = SStalactiteSmall + 218 = SStalagmiteBig + 219 = CavePillarTop + 220 = CavePillarBottom + 221 = SStalagmiteSmall + 222 = Candle + 223 = StrifeCandelabra + 224 = WaterDropOnFloor + 225 = WaterfallSplash + 226 = WaterDrip + 227 = WaterFountain + 228 = HeartsInTank + 229 = TeleportSwirl + 230 = DeadCrusader + 231 = DeadStrifePlayer + 232 = DeadPeasant + 233 = DeadAcolyte + 234 = DeadReaver + 235 = DeadRebel + 236 = SacrificedGuy + 237 = PileOfGuts + 238 = StrifeBurningBarrel + 239 = BurningBowl + 240 = BurningBrazier + 241 = SmallTorchLit + 242 = SmallTorchUnlit + 243 = CeilingChain + 244 = CageLight + 245 = Statue + 246 = StatueRuined + 247 = MediumTorch + 248 = OutsideLamp + 249 = PoleLantern + 250 = SRock1 + 251 = SRock2 + 252 = SRock3 + 253 = SRock4 + 254 = StickInWater + 255 = Rubble1 + 256 = Rubble2 + 257 = Rubble3 + 258 = Rubble4 + 259 = Rubble5 + 260 = Rubble6 + 261 = Rubble7 + 262 = Rubble8 + 263 = SurgeryCrab + 264 = LargeTorch + 265 = HugeTorch + 266 = PalmTree + 267 = BigTree2 + 268 = PottedTree + 269 = TreeStub + 270 = ShortBush + 271 = TallBush + 272 = ChimneyStack + 273 = BarricadeColumn + 274 = Pot + 275 = Pitcher + 276 = Stool + 277 = MetalPot + 278 = Tub + 279 = Anvil + 280 = TechLampSilver + 281 = TechLampBrass + 282 = Tray + 283 = AmmoFiller + 284 = SigilBanner + 285 = RebelBoots + 286 = RebelHelmet + 287 = RebelShirt + 288 = PowerCoupling + 289 = BrokenPowerCoupling + 290 = AlienBubbleColumn + 291 = AlienFloorBubble + 292 = AlienCeilingBubble + 293 = AlienAspClimber + 294 = AlienSpiderLight + 297 = FireDroplet + 298 = AmmoFillup + 299 = HealthFillup + 300 = info + 301 = RaiseAlarm + 302 = OpenDoor222 + 303 = CloseDoor222 + 304 = PrisonPass + 305 = OpenDoor224 + 306 = UpgradeStamina + 307 = UpgradeAccuracy + 308 = InterrogatorReport + 309 = HealthTraining + 310 = GunTraining + 311 = OraclePass + 312 = QuestItem1 + 313 = QuestItem2 + 314 = QuestItem3 + 315 = QuestItem4 + 316 = QuestItem5 + 317 = QuestItem6 + 318 = QuestItem7 + 319 = QuestItem8 + 320 = QuestItem9 + 321 = QuestItem10 + 322 = QuestItem11 + 323 = QuestItem12 + 324 = QuestItem13 + 325 = QuestItem14 + 326 = QuestItem15 + 327 = QuestItem16 + 328 = QuestItem17 + 329 = QuestItem18 + 330 = QuestItem19 + 331 = QuestItem20 + 332 = QuestItem21 + 333 = QuestItem22 + 334 = QuestItem23 + 335 = QuestItem24 + 336 = QuestItem25 + 337 = QuestItem26 + 338 = QuestItem27 + 339 = QuestItem28 + 340 = QuestItem29 + 341 = QuestItem30 + 342 = QuestItem31 + 343 = SlideshowStarter +} \ No newline at end of file diff --git a/wadsrc/static/mapinfo/doomcommon.txt b/wadsrc/static/mapinfo/doomcommon.txt index 9e3665533..60be71ea4 100644 --- a/wadsrc/static/mapinfo/doomcommon.txt +++ b/wadsrc/static/mapinfo/doomcommon.txt @@ -1,4 +1,5 @@ include "mapinfo/common.txt" +include "mapinfo/doomitems.txt" gameinfo { @@ -41,7 +42,6 @@ gameinfo defaultrespawntime = 12 defaultdropstyle = 1 endoom = "ENDOOM" - player5start = 4001 pickupcolor = "d7 ba 45" quitmessages = "$QUITMSG", "$QUITMSG1", "$QUITMSG2", "$QUITMSG3", "$QUITMSG4", "$QUITMSG5", "$QUITMSG6", "$QUITMSG7", "$QUITMSG8", "$QUITMSG9", "$QUITMSG10", "$QUITMSG11", "$QUITMSG12", "$QUITMSG13", "$QUITMSG14" @@ -67,6 +67,97 @@ gameinfo statscreen_enteringpatch = "WIENTER" } +spawnnums +{ + 1 = ShotgunGuy + 2 = ChaingunGuy + 3 = BaronOfHell + 4 = Zombieman + 5 = DoomImp + 6 = Arachnotron + 7 = SpiderMastermind + 8 = Demon + 9 = Spectre + 10 = DoomImpBall + 11 = Clip + 12 = Shell + 19 = Cacodemon + 20 = Revenant + 21 = ZBridge + 22 = ArmorBonus + 23 = Stimpack + 24 = Medikit + 25 = Soulsphere + 27 = Shotgun + 28 = Chaingun + 29 = RocketLauncher + 30 = PlasmaRifle + 31 = BFG9000 + 32 = Chainsaw + 33 = SuperShotgun + 51 = PlasmaBall + 53 = RevenantTracer + 68 = GreenArmor + 69 = BlueArmor + 75 = Cell + 85 = BlueCard + 86 = RedCard + 87 = YellowCard + 88 = YellowSkull + 89 = RedSkull + 90 = BlueSkull + 98 = ArchvileFire + 100 = StealthBaron + 101 = StealthHellKnight + 102 = StealthZombieMan + 103 = StealthShotgunGuy + 110 = LostSoul + 111 = Archvile + 112 = Fatso + 113 = HellKnight + 114 = Cyberdemon + 115 = PainElemental + 116 = WolfensteinSS + 117 = StealthArachnotron + 118 = StealthArchvile + 119 = StealthCacodemon + 120 = StealthChaingunGuy + 121 = StealthDemon + 122 = StealthDoomImp + 123 = StealthFatso + 124 = StealthRevenant + 125 = ExplosiveBarrel + 126 = CacodemonBall + 127 = Rocket + 128 = BFGBall + 129 = ArachnotronPlasma + 131 = BulletPuff + 132 = Megasphere + 133 = InvulnerabilitySphere + 134 = Berserk + 135 = BlurSphere + 136 = RadSuit + 137 = Allmap + 138 = Infrared + 139 = ClipBox + 140 = RocketAmmo + 141 = RocketBox + 142 = CellPack + 143 = ShellBox + 144 = Backpack + 145 = GibbedMarine + 146 = Gibs + 147 = ColonGibs + 148 = SmallBloodPool + 149 = BurningBarrel + 150 = BrainStem + 151 = ScriptedMarine + 152 = HealthBonus + 153 = FatShot + 154 = BaronBall + 216 = Grenade +} + skill baby { AutoUseHealth diff --git a/wadsrc/static/mapinfo/doomitems.txt b/wadsrc/static/mapinfo/doomitems.txt new file mode 100644 index 000000000..95f02cdb1 --- /dev/null +++ b/wadsrc/static/mapinfo/doomitems.txt @@ -0,0 +1,152 @@ +DoomEdNums +{ + 5 = BlueCard + 6 = YellowCard + 7 = SpiderMastermind + 8 = Backpack + 9 = ShotgunGuy + 10 = GibbedMarine + 12 = GibbedMarineExtra + 13 = RedCard + 15 = DeadMarine + 16 = Cyberdemon + 17 = CellPack + 18 = DeadZombieMan + 19 = DeadShotgunGuy + 20 = DeadDoomImp + 21 = DeadDemon + 22 = DeadCacodemon + 23 = DeadLostSoul + 24 = Gibs + 25 = DeadStick + 26 = LiveStick + 27 = HeadOnAStick + 28 = HeadsOnAStick + 29 = HeadCandles + 30 = TallGreenColumn + 31 = ShortGreenColumn + 32 = TallRedColumn + 33 = ShortRedColumn + 34 = Candlestick + 35 = Candelabra + 36 = HeartColumn + 37 = SkullColumn + 38 = RedSkull + 39 = YellowSkull + 40 = BlueSkull + 41 = EvilEye + 42 = FloatingSkull + 43 = TorchTree + 44 = BlueTorch + 45 = GreenTorch + 46 = RedTorch + 47 = Stalagtite + 48 = TechPillar + 49 = BloodyTwitch + 50 = Meat2 + 51 = Meat3 + 52 = Meat4 + 53 = Meat5 + 54 = BigTree + 55 = ShortBlueTorch + 56 = ShortGreenTorch + 57 = ShortRedTorch + 58 = Spectre + 59 = NonsolidMeat2 + 60 = NonsolidMeat4 + 61 = NonsolidMeat3 + 62 = NonsolidMeat5 + 63 = NonsolidTwitch + 64 = Archvile + 65 = ChaingunGuy + 66 = Revenant + 67 = Fatso + 68 = Arachnotron + 69 = HellKnight + 70 = BurningBarrel + 71 = PainElemental + 72 = CommanderKeen + 73 = HangNoGuts + 74 = HangBNoBrain + 75 = HangTLookingDown + 76 = HangTSkull + 77 = HangTLookingUp + 78 = HangTNoBrain + 79 = ColonGibs + 80 = SmallBloodPool + 81 = BrainStem + 82 = SuperShotgun + 83 = Megasphere + 84 = WolfensteinSS + 85 = TechLamp + 86 = TechLamp2 + 87 = BossTarget + 88 = BossBrain + 89 = BossEye + 2001 = Shotgun + 2002 = Chaingun + 2003 = RocketLauncher + 2004 = PlasmaRifle + 2005 = Chainsaw + 2006 = BFG9000 + 2007 = Clip + 2008 = Shell + 2010 = RocketAmmo + 2011 = Stimpack + 2012 = Medikit + 2013 = Soulsphere + 2014 = HealthBonus + 2015 = ArmorBonus + 2016 = EvilSceptre + 2017 = UnholyBible + 2018 = GreenArmor + 2019 = BlueArmor + 2022 = InvulnerabilitySphere + 2023 = Berserk + 2024 = BlurSphere + 2025 = RadSuit + 2026 = Allmap + 2028 = Column + 2035 = ExplosiveBarrel + 2045 = Infrared + 2046 = RocketBox + 2047 = Cell + 2048 = ClipBox + 2049 = ShellBox + 3001 = DoomImp + 3002 = Demon + 3003 = BaronOfHell + 3004 = Zombieman + 3005 = Cacodemon + 3006 = LostSoul + 4001 = "$Player5Start" + 4002 = "$Player6Start" + 4003 = "$Player7Start" + 4004 = "$Player8Start" + 5010 = Pistol + 5050 = Stalagmite + 9050 = StealthArachnotron + 9051 = StealthArchvile + 9052 = StealthBaron + 9053 = StealthCacodemon + 9054 = StealthChaingunGuy + 9055 = StealthDemon + 9056 = StealthHellKnight + 9057 = StealthDoomImp + 9058 = StealthFatso + 9059 = StealthRevenant + 9060 = StealthShotgunGuy + 9061 = StealthZombieMan + 9100 = ScriptedMarine + 9101 = MarineFist + 9102 = MarineBerserk + 9103 = MarineChainsaw + 9104 = MarinePistol + 9105 = MarineShotgun + 9106 = MarineSSG + 9107 = MarineChaingun + 9108 = MarineRocket + 9109 = MarinePlasma + 9110 = MarineRailgun + 9111 = MarineBFG +} \ No newline at end of file diff --git a/wadsrc/static/mapinfo/heretic.txt b/wadsrc/static/mapinfo/heretic.txt index 196e81c50..71d9a9949 100644 --- a/wadsrc/static/mapinfo/heretic.txt +++ b/wadsrc/static/mapinfo/heretic.txt @@ -41,7 +41,6 @@ gameinfo defaultrespawntime = 12 defaultdropstyle = 1 endoom = "ENDTEXT" - player5start = 4001 pickupcolor = "d7 ba 45" quitmessages = "$*RAVENQUITMSG" menufontcolor_title = "UNTRANSLATED" @@ -66,6 +65,200 @@ gameinfo statscreen_enteringfont = "SmallFont" } +DoomEdNums +{ + 5 = HereticImpLeader + 6 = Ironlich + 7 = Sorcerer1 + 8 = BagOfHolding + 9 = Minotaur + 10 = GoldWandAmmo + 12 = GoldWandHefty + 13 = MaceAmmo + 15 = Wizard + 16 = MaceHefty + 17 = SkullHang70 + 18 = CrossbowAmmo + 19 = CrossbowHefty + 20 = SkullRodAmmo + 21 = SkullRodHefty + 22 = PhoenixRodAmmo + 23 = PhoenixRodHefty + 24 = SkullHang60 + 25 = SkullHang45 + 26 = SkullHang35 + 27 = SerpentTorch + 28 = Chandelier + 29 = SmallPillar + 30 = ArtiEgg + 31 = EnchantedShield + 32 = ArtiSuperHealth + 33 = ArtiTorch + 34 = ArtiTimeBomb + 35 = SuperMap + 36 = ArtiTeleport + 37 = StalagmiteSmall + 38 = StalagmiteLarge + 39 = StalactiteSmall + 40 = StalactiteLarge + 41 = SoundWaterfall + 42 = SoundWind + 43 = PodGenerator + 44 = Barrel + 45 = MummyLeader + 46 = MummyLeaderGhost + 47 = BrownPillar + 48 = Moss1 + 49 = Moss2 + 50 = WallTorch + 51 = HangingCorpse + 52 = TeleGlitterGenerator2 + 53 = Blaster + 54 = BlasterAmmo + 55 = BlasterHefty + 56 = BossSpot + 64 = Knight + 65 = KnightGhost + 66 = HereticImp + 68 = Mummy + 69 = MummyGhost + 70 = Beast + 73 = KeyGreen + 74 = TeleGlitterGenerator1 + 75 = ArtiInvisibility + 76 = FireBrazier + 79 = KeyBlue + 80 = KeyYellow + 81 = CrystalVial + 82 = ArtiHealth + 83 = ArtiFly + 84 = ArtiInvulnerability + 85 = SilverShield + 86 = ArtiTomeOfPower + 87 = Volcano + 90 = Clink + 92 = Snake + 94 = KeyGizmoBlue + 95 = KeyGizmoGreen + 96 = KeyGizmoYellow + 118 = Bridge + 1200 = HereticSoundSequence1 + 1201 = HereticSoundSequence2 + 1202 = HereticSoundSequence3 + 1203 = HereticSoundSequence4 + 1204 = HereticSoundSequence5 + 1205 = HereticSoundSequence6 + 1206 = HereticSoundSequence7 + 1207 = HereticSoundSequence8 + 1208 = HereticSoundSequence9 + 1209 = HereticSoundSequence10 + 2001 = Crossbow + 2002 = MaceSpawner + 2003 = PhoenixRod + 2004 = SkullRod + 2005 = Gauntlets + 2035 = Pod + 4001 = "$Player5Start" + 4002 = "$Player6Start" + 4003 = "$Player7Start" + 4004 = "$Player8Start" + 9042 = GoldWand +} + +SpawnNums +{ + 1 = Clink + 2 = MummyLeader + 3 = Beast + 4 = Mummy + 5 = HereticImp + 6 = Knight + 7 = HereticImpLeader + 8 = MummyGhost + 9 = MummyLeaderGhost + 10 = HereticImpBall + 11 = GoldWandAmmo + 12 = GoldWandHefty + 14 = ArtiEgg + 15 = ArtiFly + 18 = ArtiTeleport + 19 = Wizard + 20 = Ironlich + 21 = Bridge + 23 = CrystalVial + 24 = ArtiHealth + 25 = ArtiSuperHealth + 27 = Crossbow + 28 = Blaster + 29 = PhoenixRod + 30 = SkullRod + 31 = Mace + 32 = Gauntlets + 33 = CrossbowAmmo + 34 = CrossbowHefty + 35 = MaceAmmo + 36 = MaceHefty + 37 = BlasterAmmo + 38 = BlasterHefty + 40 = EggFX + 68 = SilverShield + 69 = EnchantedShield + 72 = ArtiTimeBomb + 73 = ArtiTorch + 85 = KeyBlue + 86 = KeyGreen + 87 = KeyYellow + 110 = SoundWind + 111 = SoundWaterfall + 120 = BeastBall + 121 = Feather + 122 = Chicken + 123 = VolcanoBlast + 124 = VolcanoTBlast + 125 = Pod + 126 = PodGenerator + 127 = KnightAxe + 128 = RedAxe + 129 = KnightGhost + 131 = MummyFX1 + 132 = Snake + 133 = ArtiInvulnerability + 134 = ArtiTomeOfPower + 135 = ArtiInvisibility + 136 = BagOfHolding + 137 = SuperMap + 138 = SnakeProjA + 139 = SnakeProjB + 140 = WizardFX1 + 141 = BossSpot + 142 = Sorcerer1 + 143 = Sorcerer2 + 144 = SorcererFX1 + 145 = Sorcerer2FX1 + 146 = Sorcerer2FX2 + 147 = CrossbowFX1 + 148 = CrossbowFX2 + 149 = CrossbowFX3 + 150 = Volcano + 151 = GoldWandFX1 + 152 = GoldWandFX2 + 153 = MaceFX4 + 154 = MaceFX1 + 155 = MaceFX3 + 156 = MaceFX2 + 157 = Ripper + 158 = SkullRodAmmo + 159 = SkullRodHefty + 160 = HornRodFX1 + 161 = PhoenixRodAmmo + 162 = PhoenixRodHefty + 163 = PhoenixFX1 + 164 = HeadFX1 + 165 = Whirlwind + 166 = TeleGlitterGenerator1 + 167 = TeleGlitterGenerator2 +} + skill baby { AutoUseHealth diff --git a/wadsrc/static/mapinfo/hexen.txt b/wadsrc/static/mapinfo/hexen.txt index 631c6d1e9..508d546aa 100644 --- a/wadsrc/static/mapinfo/hexen.txt +++ b/wadsrc/static/mapinfo/hexen.txt @@ -39,7 +39,6 @@ gameinfo definventorymaxamount = 25 defaultrespawntime = 12 defaultdropstyle = 1 - player5start = 9100 pickupcolor = "d7 ba 45" quitmessages = "$*RAVENQUITMSG" menufontcolor_title = "UNTRANSLATED" @@ -64,6 +63,337 @@ gameinfo statscreen_enteringfont = "SmallFont" } +DoomEdNums +{ + 5 = ZWingedStatue + 6 = ZRock1 + 7 = ZRock2 + 9 = ZRock3 + 10 = CWeapStaff + 12 = FWeaponPiece1 + 13 = FWeaponPiece2 + 15 = ZRock4 + 16 = FWeaponPiece3 + 17 = ZChandelier + 18 = CWeaponPiece1 + 19 = CWeaponPiece2 + 20 = CWeaponPiece3 + 21 = MWeaponPiece1 + 22 = MWeaponPiece2 + 23 = MWeaponPiece3 + 24 = ZTreeDead + 25 = ZTree + 26 = ZTreeSwamp150 + 27 = ZTreeSwamp120 + 28 = ZStumpBurned + 29 = ZStumpBare + 30 = ArtiPork + 31 = Demon1 + 32 = ArtiSuperHealth + 33 = ArtiTorch + 34 = Wraith + 36 = ArtiTeleport + 37 = ZStumpSwamp1 + 38 = ZStumpSwamp2 + 39 = ZShroomLarge1 + 40 = ZShroomLarge2 + 41 = ZShroomLarge3 + 42 = ZShroomSmall1 + 44 = ZShroomSmall2 + 45 = ZShroomSmall3 + 46 = ZShroomSmall4 + 47 = ZShroomSmall5 + 48 = ZStalagmitePillar + 49 = ZStalagmiteLarge + 50 = ZStalagmiteMedium + 51 = ZStalagmiteSmall + 52 = ZStalactiteLarge + 53 = MWeapFrost + 54 = ZWallTorch + 55 = ZWallTorchUnlit + 56 = ZStalactiteMedium + 57 = ZStalactiteSmall + 58 = ZMossCeiling1 + 59 = ZMossCeiling2 + 60 = ZSwampVine + 61 = ZCorpseKabob + 62 = ZCorpseSleeping + 63 = ZTombstoneRIP + 64 = ZTombstoneShane + 65 = ZTombstoneBigCross + 66 = ZTombstoneBrianR + 67 = ZTombstoneCrossCircle + 68 = ZTombstoneSmallCross + 69 = ZTombstoneBrianP + 71 = ZCorpseHanging + 72 = ZStatueGargoyleGreenTall + 73 = ZStatueGargoyleBlueTall + 74 = ZStatueGargoyleGreenShort + 76 = ZStatueGargoyleBlueShort + 77 = ZBannerTattered + 78 = ZTreeLarge1 + 79 = ZTreeLarge2 + 80 = ZTreeGnarled1 + 81 = CrystalVial + 82 = ArtiHealth + 83 = ArtiFly + 84 = ArtiInvulnerability2 + 86 = ArtiDarkServant + 87 = ZTreeGnarled2 + 88 = ZLog + 89 = ZStalactiteIceLarge + 90 = ZStalactiteIceMedium + 91 = ZStalactiteIceSmall + 92 = ZStalactiteIceTiny + 93 = ZStalagmiteIceLarge + 94 = ZStalagmiteIceMedium + 95 = ZStalagmiteIceSmall + 96 = ZStalagmiteIceTiny + 97 = ZRockBrown1 + 98 = ZRockBrown2 + 99 = ZRockBlack + 100 = ZRubble1 + 101 = ZRubble2 + 102 = ZRubble3 + 103 = ZVasePillar + 104 = Pottery1 + 105 = Pottery2 + 106 = Pottery3 + 107 = Centaur + 108 = ZCorpseLynched + 109 = ZCorpseLynchedNoHeart + 110 = ZCorpseSitting + 111 = BloodPool + 112 = LittleFly + 113 = LeafSpawner + 114 = Bishop + 115 = CentaurLeader + 116 = ZTwinedTorch + 117 = ZTwinedTorchUnlit + 118 = Bridge + 119 = ZCandle + 120 = SerpentLeader + 121 = Serpent + 122 = Mana1 + 123 = FWeapHammer + 124 = Mana2 + 140 = TeleSmoke + 254 = Dragon + 1410 = SoundWindHexen + 3000 = "$PolyAnchor" + 3001 = "$PolySpawn" + 3002 = "$PolySpawnCrush" + 8000 = ArtiPoisonBag + 8002 = ArtiSpeedBoots + 8003 = ArtiBoostMana + 8004 = Mana3 + 8005 = MeshArmor + 8006 = FalconShield + 8007 = PlatinumHelm + 8008 = AmuletOfWarding + 8009 = CWeapFlame + 8010 = FWeapAxe + 8020 = IceGuy + 8030 = KeySteel + 8031 = KeyCave + 8032 = KeyAxe + 8033 = KeyFire + 8034 = KeyEmerald + 8035 = KeyDungeon + 8036 = KeySilver + 8037 = KeyRusted + 8038 = KeyHorn + 8039 = KeySwamp + 8040 = MWeapLightning + 8041 = ArtiBoostArmor + 8042 = ZFireBull + 8043 = ZFireBullUnlit + 8044 = ZStatueGargoyleStripeTall + 8045 = ZStatueGargoyleDarkRedTall + 8046 = ZStatueGargoyleRedTall + 8047 = ZStatueGargoyleTanTall + 8048 = ZStatueGargoyleRustTall + 8049 = ZStatueGargoyleDarkRedShort + 8050 = ZStatueGargoyleRedShort + 8051 = ZStatueGargoyleTanShort + 8052 = ZStatueGargoyleRustShort + 8060 = FireThing + 8061 = BrassTorch + 8062 = TreeDestructible + 8063 = ZChandelierUnlit + 8064 = ZSuitOfArmor + 8065 = ZBell + 8066 = ZBlueCandle + 8067 = ZIronMaiden + 8068 = ZXmasTree + 8069 = ZCauldron + 8070 = ZCauldronUnlit + 8071 = ZChainBit32 + 8072 = ZChainBit64 + 8073 = ZChainEndHeart + 8074 = ZChainEndHook1 + 8075 = ZChainEndHook2 + 8076 = ZChainEndSpike + 8077 = ZChainEndSkull + 8080 = Demon2 + 8100 = ZBarrel + 8101 = ZShrub1 + 8102 = ZShrub2 + 8103 = ZBucket + 8104 = ZPoisonShroom + 8200 = KeyCastle + 8500 = TableShit1 + 8501 = TableShit2 + 8502 = TableShit3 + 8503 = TableShit4 + 8504 = TableShit5 + 8505 = TableShit6 + 8506 = TableShit7 + 8507 = TableShit8 + 8508 = TableShit9 + 8509 = TableShit10 + 9002 = PuzzSkull + 9003 = PuzzGemBig + 9004 = PuzzGemRed + 9005 = PuzzGemGreen1 + 9006 = PuzzGemBlue1 + 9007 = PuzzBook1 + 9008 = PuzzBook2 + 9009 = PuzzGemGreen2 + 9010 = PuzzGemBlue2 + 9011 = ZWingedStatueNoSkull + 9012 = ZGemPedestal + 9014 = PuzzFlameMask + 9015 = PuzzFWeapon + 9016 = PuzzCWeapon + 9017 = PuzzMWeapon + 9018 = PuzzGear1 + 9019 = PuzzGear2 + 9020 = PuzzGear3 + 9021 = PuzzGear4 + 9100 = "$Player5Start" + 9101 = "$Player6Start" + 9102 = "$Player7Start" + 9103 = "$Player8Start" + 10000 = FogSpawner + 10001 = FogPatchSmall + 10002 = FogPatchMedium + 10003 = FogPatchLarge + 10011 = WraithBuried + 10030 = Ettin + 10040 = ArtiTeleportOther + 10060 = FireDemon + 10080 = Heresiarch + 10090 = ThrustFloorDown + 10091 = ThrustFloorUp + 10100 = FighterBoss + 10101 = ClericBoss + 10102 = MageBoss + 10110 = ArtiBlastRadius + 10120 = ArtiHealingRadius + 10200 = Korax + 10225 = BatSpawner + 10500 = FlameSmallTemp + 10501 = FlameSmall + 10502 = FlameLargeTemp + 10503 = FlameLarge +} + +SpawnNums +{ + 1 = Centaur + 2 = CentaurLeader + 3 = Demon1 + 4 = Ettin + 5 = FireDemon + 6 = Serpent + 7 = SerpentLeader + 8 = Wraith + 9 = WraithBuried + 10 = FireBall + 11 = Mana1 + 12 = Mana2 + 13 = ArtiSpeedBoots + 14 = ArtiPork + 15 = ArtiFly + 16 = ArtiDarkServant + 17 = ArtiTeleportOther + 18 = ArtiTeleport + 19 = Bishop + 20 = IceGuy + 21 = Bridge + 22 = ArtiBoostArmor + 23 = CrystalVial + 24 = ArtiHealth + 25 = ArtiSuperHealth + 26 = ArtiBoostMana + 27 = FWeapAxe + 28 = FWeapHammer + 29 = FWeaponPiece1 + 30 = FWeaponPiece2 + 31 = FWeaponPiece3 + 32 = CWeapStaff + 33 = CWeaponPiece1 + 34 = CWeaponPiece2 + 35 = CWeaponPiece3 + 36 = MWeapFrost + 37 = MWeaponPiece1 + 38 = MWeaponPiece2 + 39 = MWeaponPiece3 + 40 = PorkFX + 50 = Arrow + 51 = Dart + 52 = PoisonDart + 53 = RipperBall + 64 = ProjectileBlade + 65 = IceShard + 66 = FlameSmall2 + 67 = FlameLarge2 + 68 = MeshArmor + 69 = FalconShield + 70 = PlatinumHelm + 71 = AmuletOfWarding + 72 = ArtiPoisonBag + 73 = ArtiTorch + 74 = ArtiBlastRadius + 75 = Mana3 + 76 = PuzzSkull + 77 = PuzzGemBig + 78 = PuzzGemRed + 79 = PuzzGemGreen1 + 80 = PuzzGemGreen2 + 81 = PuzzGemBlue1 + 82 = PuzzGemBlue2 + 83 = PuzzBook1 + 84 = PuzzBook2 + 85 = KeySteel + 86 = KeyCave + 87 = KeyAxe + 88 = KeyFire + 89 = KeyEmerald + 90 = KeyDungeon + 91 = KeySilver + 92 = KeyRusted + 93 = KeyHorn + 94 = KeySwamp + 95 = HWaterDrip + 96 = FlameSmallTemp + 97 = FlameSmall + 98 = FlameLargeTemp + 99 = FlameLarge + 100 = Demon1Mash + 101 = Demon2Mash + 102 = EttinMash + 103 = CentaurMash + 104 = ThrustFloorUp + 105 = ThrustFloorDown + 106 = WraithFX4 + 107 = WraithFX5 + 108 = WraithFX2 + 110 = SoundWindHexen + 133 = ArtiInvulnerability2 +} + skill baby { AutoUseHealth diff --git a/wadsrc/static/mapinfo/mindefaults.txt b/wadsrc/static/mapinfo/mindefaults.txt new file mode 100644 index 000000000..cbb3fa06b --- /dev/null +++ b/wadsrc/static/mapinfo/mindefaults.txt @@ -0,0 +1,59 @@ +// defines the minimum needed entries to let an unknown IWAD run + +gameinfo +{ + titlepage = "-NOFLAT-" + titletime = 999 + infopage = "-NOFLAT-" + titlemusic = "" + advisorytime = 0 + chatsound = "" + finalemusic = "" + finaleflat = "-NOFLAT-" + finalepage = "-NOFLAT-" + quitsound = "" + borderflat = "-NOFLAT-" + border = DoomBorder + telefogheight = 0 + defkickback = 100 + skyflatname = "F_SKY1" + translator = "xlat/doom.txt" + defaultbloodcolor = "68 00 00" + defaultbloodparticlecolor = "ff 00 00" + backpacktype = "Backpack" + armoricons = "AICNA0", 0.75, "AICNC0" + statusbar = "sbarinfo/doom.txt" + intermissionmusic = "" + intermissioncounter = true + dimcolor = "6f 00 6b" + dimamount = 0.8 + definventorymaxamount = 25 + defaultrespawntime = 12 + defaultdropstyle = 1 + endoom = "ENDOOM" + player5start = 4001 + pickupcolor = "c0 c0 c0" + quitmessages = "Do you want to quit?" + + menufontcolor_title = "purple" + menufontcolor_label = "default" + menufontcolor_value = "gray" + menufontcolor_action = "gray" + menufontcolor_header = "blue" + menufontcolor_highlight = "lightblue" + menufontcolor_selection = "purple" + menubackbutton = "M_BACK_D" + playerclasses = "DoomPlayer" + pausesign = "-NOFLAT-" + gibfactor = 1 + cursorpic = "doomcurs" + textscreenx = 10 + textscreeny = 10 + defaultendsequence = "Inter_Cast" + maparrow = "maparrows/arrow.txt", "maparrows/ddtarrow.txt" + statscreen_mapnamefont = "BigFont" + statscreen_finishedpatch = "WIF" + statscreen_enteringpatch = "WIENTER" +} + +include "mapinfo/common.txt" diff --git a/wadsrc/static/mapinfo/strife.txt b/wadsrc/static/mapinfo/strife.txt index 5a25f3779..06fb13fbe 100644 --- a/wadsrc/static/mapinfo/strife.txt +++ b/wadsrc/static/mapinfo/strife.txt @@ -66,6 +66,277 @@ gameinfo statscreen_enteringfont = "BigFont", "white" } +DoomEdNums +{ + 5 = "$Player5Start" + 6 = "$Player6Start" + 7 = "$Player7Start" + 8 = "$Player8Start" + 9 = Rebel1 + 10 = TeleporterBeacon + 12 = Loremaster + 13 = IDCard + 15 = DeadStrifePlayer + 16 = Inquisitor + 17 = EnergyPack + 18 = DeadPeasant + 19 = DeadRebel + 20 = DeadReaver + 21 = DeadAcolyte + 22 = DeadCrusader + 23 = TeleportSwirl + 24 = KlaxonWarningLight + 25 = ForceFieldGuard + 26 = EntityNest + 27 = CeilingTurret + 28 = CageLight + 29 = Rubble1 + 30 = Rubble2 + 31 = Rubble3 + 32 = Rubble4 + 33 = TreeStub + 34 = Candle + 35 = StrifeCandelabra + 36 = Rubble5 + 37 = Rubble6 + 38 = SilverKey + 39 = BrassKey + 40 = GoldKey + 41 = Rubble7 + 42 = Rubble8 + 43 = OutsideLamp + 44 = StatueRuined + 45 = Piston + 46 = PoleLantern + 47 = LargeTorch + 48 = PillarTechno + 50 = HugeTorch + 51 = PalmTree + 52 = OfficersUniform + 53 = WaterDrip + 54 = PillarAztec + 55 = PillarAztecDamaged + 56 = PillarAztecRuined + 57 = PillarHugeTech + 58 = AcolyteShadow + 59 = DegninOre + 60 = ShortBush + 61 = OracleKey + 62 = TallBush + 63 = ChimneyStack + 64 = Macil1 + 65 = Peasant4 + 66 = Peasant7 + 67 = Peasant10 + 68 = Tray + 69 = BarricadeColumn + 70 = StrifeBurningBarrel + 71 = Programmer + 72 = BarKeep + 73 = Armorer + 74 = Medic + 75 = AlienSpectre2 + 76 = AlienSpectre3 + 77 = Sigil1 + 78 = Sigil2 + 79 = Sigil3 + 80 = Sigil4 + 81 = Sigil5 + 82 = WoodenBarrel + 83 = SurgeryKit + 85 = RatBuddy + 86 = OrderKey + 90 = GuardUniform + 91 = SeveredHand + 92 = PowerCrystal + 93 = Coin + 94 = ExplosiveBarrel2 + 95 = LightSilverFluorescent + 96 = LightBrownFluorescent + 97 = LightGoldFluorescent + 98 = SStalactiteBig + 99 = SRock1 + 100 = SRock2 + 101 = SRock3 + 102 = SRock4 + 103 = WaterDropOnFloor + 104 = WaterfallSplash + 105 = BurningBowl + 106 = BurningBrazier + 107 = SmallTorchLit + 108 = SmallTorchUnlit + 109 = CeilingChain + 110 = Statue + 111 = MediumTorch + 112 = WaterFountain + 113 = HeartsInTank + 114 = ElectricBolts + 115 = PoisonBolts + 116 = WeaponSmith + 117 = SurgeryCrab + 118 = "$Player1Start", 1 + 119 = "$Player1Start", 2 + 120 = "$Player1Start", 3 + 121 = "$Player1Start", 4 + 122 = "$Player1Start", 5 + 123 = "$Player1Start", 6 + 124 = "$Player1Start", 7 + 125 = "$Player1Start", 8 + 126 = "$Player1Start", 9 + 127 = "$Player1Start", 10 + 128 = EntityBoss + 129 = AlienSpectre1 + 130 = Peasant2 + 131 = Peasant3 + 132 = Peasant5 + 133 = Peasant6 + 134 = Peasant8 + 135 = Peasant9 + 136 = Peasant11 + 137 = Peasant12 + 138 = Gold10 + 139 = Gold25 + 140 = Gold50 + 141 = Beggar1 + 142 = AcolyteRed + 143 = AcolyteRust + 144 = Rebel2 + 145 = Rebel3 + 146 = AcolyteGray + 147 = AcolyteDGreen + 148 = AcolyteGold + 149 = Rebel4 + 150 = Rebel5 + 151 = Rebel6 + 152 = HEGrenadeRounds + 153 = PhosphorusGrenadeRounds + 154 = StrifeGrenadeLauncher + 155 = Beggar2 + 156 = Beggar3 + 157 = Beggar4 + 158 = Beggar5 + 159 = CavePillarTop + 160 = SStalagmiteBig + 161 = SStalactiteSmall + 162 = CavePillarBottom + 163 = SStalagmiteSmall + 164 = Mug + 165 = Pot + 166 = WarehouseKey + 167 = AlienSpectre4 + 168 = AlienSpectre5 + 169 = Zombie + 170 = ZombieSpawner + 172 = Peasant13 + 173 = Peasant14 + 174 = Peasant15 + 175 = Peasant16 + 176 = Peasant17 + 177 = Peasant18 + 178 = Peasant19 + 179 = Peasant20 + 180 = Peasant21 + 181 = Peasant22 + 182 = Computer + 183 = AmmoSatchel + 184 = IDBadge + 185 = Passcard + 186 = Stalker + 187 = StrifeBishop + 188 = Pitcher + 189 = Stool + 190 = MetalPot + 191 = Tub + 192 = RedCrystalKey + 193 = BlueCrystalKey + 194 = Anvil + 195 = ChapelKey + 196 = TechLampSilver + 197 = TechLampBrass + 198 = EntityPod + 199 = Oracle + 200 = Macil2 + 201 = AcolyteToBe + 202 = BigTree2 + 203 = PottedTree + 204 = KneelingGuy + 205 = OfferingChalice + 206 = Communicator + 207 = Targeter + 208 = TargetPractice + 209 = Tank1 + 210 = Tank2 + 211 = Tank3 + 212 = SacrificedGuy + 213 = Tank4 + 214 = Tank5 + 215 = StickInWater + 216 = SigilBanner + 217 = RebelBoots + 218 = RebelHelmet + 219 = RebelShirt + 220 = PowerCoupling + 221 = AlienBubbleColumn + 222 = AlienFloorBubble + 223 = AlienCeilingBubble + 224 = AlienAspClimber + 225 = AlienSpiderLight + 226 = BrokenPowerCoupling + 227 = PillarAlienPower + 228 = AmmoFiller + 229 = Tank6 + 230 = BaseKey + 231 = AcolyteBlue + 232 = AcolyteLGreen + 233 = MaulerKey + 234 = FactoryKey + 235 = MineKey + 236 = CoreKey + 2001 = StrifeCrossbow + 2002 = AssaultGun + 2003 = MiniMissileLauncher + 2004 = Mauler + 2005 = FlameThrower + 2006 = AssaultGunStanding + 2007 = ClipOfBullets + 2010 = MiniMissiles + 2011 = MedPatch + 2012 = MedicalKit + 2014 = WaterBottle + 2018 = LeatherArmor + 2019 = MetalArmor + 2024 = ShadowArmor + 2025 = EnvironmentalSuit + 2026 = StrifeMap + 2027 = Scanner + 2028 = LightGlobe + 2046 = CrateOfMissiles + 2047 = EnergyPod + 2048 = BoxOfBullets + 3001 = Reaver + 3002 = AcolyteTan + 3003 = Templar + 3004 = Peasant1 + 3005 = Crusader + 3006 = Sentinel +} + +SpawnNums +{ + 11 = ClipOfBullets + 68 = LeatherArmor + 69 = MetalArmor + 75 = EnergyPod + 135 = ShadowArmor + 136 = EnvironmentalSuit + 137 = StrifeMap + 139 = BoxOfBullets + 140 = MiniMissiles + 141 = CrateOfMissiles + 142 = EnergyPack + 144 = AmmoSatchel +} + Intermission Inter_Strife_Good { Image diff --git a/wadsrc/static/menudef.txt b/wadsrc/static/menudef.txt index 114dbe98c..c7ce861d5 100644 --- a/wadsrc/static/menudef.txt +++ b/wadsrc/static/menudef.txt @@ -1390,7 +1390,6 @@ OptionString SoundOutputsWindows "WASAPI", "Vista WASAPI" "ASIO", "ASIO" "WaveOut", "WaveOut" - "OpenAL", "OpenAL (very beta)" "No sound", "No sound" } @@ -1408,7 +1407,6 @@ OptionString SoundOutputsUnix OptionString SoundOutputsMac { - "Sound Manager", "Sound Manager" "Core Audio", "Core Audio" "No sound", "No sound" } diff --git a/wadsrc/static/sndinfo.txt b/wadsrc/static/sndinfo.txt index be2ecd987..562681043 100644 --- a/wadsrc/static/sndinfo.txt +++ b/wadsrc/static/sndinfo.txt @@ -56,1274 +56,3 @@ dog/attack dsdgatk dog/death dsdgdth dog/pain dsdgpain dog/sight dsdgsit - -/****************************************************************************/ -/* */ -/* DOOM SOUNDS */ -/* */ -/****************************************************************************/ - -$ifdoom - - -// BOOM has pitch shifting equivalent to a range of 4. I never got to hear -// Doom when it used pitch shifting, so I don't know if this is correct or not. -$pitchshiftrange 4 - -// This sound is never actually used. It's just defined here for -// compatibility with DeHackEd patches that reference dsskldth. -misc/unused dsskldth // Sounds just like dsoof - -//=========================================================================== -// -// Doom-specific player sounds -// -//=========================================================================== - -$playersound player male *death dspldeth -$playersound player male *xdeath dspdiehi -$playersound player male *gibbed dsslop -$playersound player male *pain100 dsplpain -$playersounddup player male *pain75 *pain100 -$playersounddup player male *pain50 *pain100 -$playersounddup player male *pain25 *pain100 -$playersound player male *grunt dsoof -$playersounddup player male *land *grunt -$playersound player male *jump dsjump -$playersound player male *fist dspunch -$playersound player male *usefail dsnoway - -$playersound player female *death dsfldeth -$playersound player female *xdeath dsfdiehi -$playersound player female *gibbed dsslop -$playersound player female *pain100 dsflpain -$playersounddup player female *pain75 *pain100 -$playersounddup player female *pain50 *pain100 -$playersounddup player female *pain25 *pain100 -$playersound player female *grunt dsfoof -$playersounddup player female *land *grunt -$playersound player female *jump dsfjump -$playersound player female *fist dspunch -$playersound player female *usefail dsfnoway - -$playersound player other *death dscldeth -$playersound player other *xdeath dscdiehi -$playersound player other *gibbed dsslop -$playersound player other *pain100 dsclpain -$playersounddup player other *pain75 *pain100 -$playersounddup player other *pain50 *pain100 -$playersounddup player other *pain25 *pain100 -$playersound player other *grunt dscoof -$playersounddup player other *land *grunt -$playersound player other *jump dscjump -$playersound player other *fist dspunch -$playersound player other *usefail dscnoway - -// Alternate names for some player sounds needed for ZDoom <= 1.22 compatibility -// -// If any sounds with these names are defined later, they will redefine -// the corresponding player sounds instead. Likewise, if they are played, -// they will play the corresponding player sound instead. - -$playercompat player male *death player/male/death1 -$playercompat player male *death player/male/death2 -$playercompat player male *death player/male/death3 -$playercompat player male *death player/male/death4 -$playercompat player male *xdeath player/male/xdeath1 -$playercompat player male *pain100 player/male/pain100_1 -$playercompat player male *pain100 player/male/pain100_2 -$playercompat player male *pain75 player/male/pain75_1 -$playercompat player male *pain75 player/male/pain75_2 -$playercompat player male *pain50 player/male/pain50_1 -$playercompat player male *pain50 player/male/pain50_2 -$playercompat player male *pain25 player/male/pain25_1 -$playercompat player male *pain25 player/male/pain25_2 -$playercompat player male *grunt player/male/grunt1 -$playercompat player male *land player/male/land1 -$playercompat player male *jump player/male/jump1 -$playercompat player male *gibbed player/male/gibbed -$playercompat player male *fist player/male/fist - -$playercompat player female *death player/female/death1 -$playercompat player female *death player/female/death2 -$playercompat player female *death player/female/death3 -$playercompat player female *death player/female/death4 -$playercompat player female *xdeath player/female/xdeath1 -$playercompat player female *pain100 player/female/pain100_1 -$playercompat player female *pain100 player/female/pain100_2 -$playercompat player female *pain75 player/female/pain75_1 -$playercompat player female *pain75 player/female/pain75_2 -$playercompat player female *pain50 player/female/pain50_1 -$playercompat player female *pain50 player/female/pain50_2 -$playercompat player female *pain25 player/female/pain25_1 -$playercompat player female *pain25 player/female/pain25_2 -$playercompat player female *grunt player/female/grunt1 -$playercompat player female *land player/female/land1 -$playercompat player female *jump player/female/jump1 -$playercompat player female *gibbed player/female/gibbed -$playercompat player female *fist player/female/fist - -$playercompat player other *death player/cyborg/death1 -$playercompat player other *death player/cyborg/death2 -$playercompat player other *death player/cyborg/death3 -$playercompat player other *death player/cyborg/death4 -$playercompat player other *xdeath player/cyborg/xdeath1 -$playercompat player other *pain100 player/cyborg/pain100_1 -$playercompat player other *pain100 player/cyborg/pain100_2 -$playercompat player other *pain75 player/cyborg/pain75_1 -$playercompat player other *pain75 player/cyborg/pain75_2 -$playercompat player other *pain50 player/cyborg/pain50_1 -$playercompat player other *pain50 player/cyborg/pain50_2 -$playercompat player other *pain25 player/cyborg/pain25_1 -$playercompat player other *pain25 player/cyborg/pain25_2 -$playercompat player other *grunt player/cyborg/grunt1 -$playercompat player other *land player/cyborg/land1 -$playercompat player other *jump player/cyborg/jump1 -$playercompat player other *gibbed player/cyborg/gibbed -$playercompat player other *fist player/cyborg/fist - -// -// Weapons -// - -$pitchshiftrange 3 -weapons/sawup dssawup -weapons/sawidle dssawidl -weapons/sawfull dssawful -weapons/sawhit dssawhit -$pitchshiftrange 4 - -weapons/pistol dspistol -weapons/shotgf dsshotgn -weapons/shotgr dssgcock -weapons/sshotf dsdshtgn -weapons/sshoto dsdbopn -weapons/sshotc dsdbcls -weapons/sshotl dsdbload -weapons/chngun dspistol -weapons/rocklx dsbarexp -weapons/rocklf dsrlaunc -weapons/plasmaf dsplasma -weapons/plasmax dsfirxpl -weapons/bfgf dsbfg -weapons/bfgx dsrxplod -weapons/railgf railgf1 -weapons/grbnce dsbounce -weapons/grenlx dsgrnexp -weapons/grenlf dsglaunc - -// Problem: weapons/rocklx needs to be unlimited but -// is also used for the MAP30 brain explosion. -// This alias remaps to the original but has its own limit -// attached so that it doesn't become too loud. -$alias misc/brainexplode weapons/rocklx -$limit misc/brainexplode 4 - -$limit weapons/plasmaf 0 -$limit weapons/chngun 0 -$limit weapons/rocklf 0 // because normal running is almost as fast as a rocket -$limit weapons/rocklx 0 // and the cyberdemon shoots 3 at once - -//=========================================================================== -// -// MONSTER SOUNDS -// -//=========================================================================== - -misc/gibbed dsslop - -// Zombie man - -$random grunt/sight { grunt/sight1 grunt/sight2 grunt/sight3 } -$random grunt/death { grunt/death1 grunt/death2 grunt/death3 } -grunt/sight1 dsposit1 -grunt/sight2 dsposit2 -grunt/sight3 dsposit3 -grunt/active dsposact -grunt/pain dspopain -grunt/death1 dspodth1 -grunt/death2 dspodth2 -grunt/death3 dspodth3 -grunt/attack dspistol - -// Shotgun guy - -$random shotguy/sight { shotguy/sight1 shotguy/sight2 shotguy/sight3 } -$random shotguy/death { shotguy/death1 shotguy/death2 shotguy/death3 } -shotguy/sight1 dsposit1 -shotguy/sight2 dsposit2 -shotguy/sight3 dsposit3 -shotguy/active dsposact -shotguy/pain dspopain -shotguy/death1 dspodth1 -shotguy/death2 dspodth2 -shotguy/death3 dspodth3 -shotguy/attack dsshotgn - -// Archvile - -vile/sight dsvilsit -vile/active dsvilact -vile/pain dsvipain -vile/death dsvildth -vile/raise dsslop -vile/start dsvilatk -vile/stop dsbarexp -vile/firestrt dsflamst -vile/firecrkl dsflame - -// Revenant - -skeleton/sight dsskesit -skeleton/active dsskeact -skeleton/pain dspopain -skeleton/melee dsskepch -skeleton/swing dsskeswg -skeleton/death dsskedth -skeleton/attack dsskeatk -skeleton/tracex dsbarexp - -// Fatso - -fatso/sight dsmansit -fatso/active dsposact -fatso/pain dsmnpain -fatso/raiseguns dsmanatk -fatso/death dsmandth -fatso/attack dsfirsht -fatso/shotx dsfirxpl - -// Chainguy - -$random chainguy/sight { chainguy/sight1 chainguy/sight2 chainguy/sight3 } -$random chainguy/death { chainguy/death1 chainguy/death2 chainguy/death3 } -chainguy/sight1 dsposit1 -chainguy/sight2 dsposit2 -chainguy/sight3 dsposit3 -chainguy/active dsposact -chainguy/pain dspopain -chainguy/death1 dspodth1 -chainguy/death2 dspodth2 -chainguy/death3 dspodth3 -chainguy/attack dsshotgn -$limit chainguy/attack 0 - -// Imp - -$random imp/sight { imp/sight1 imp/sight2 } -$random imp/death { imp/death1 imp/death2 } -imp/sight1 dsbgsit1 -imp/sight2 dsbgsit2 -imp/active dsbgact -imp/pain dspopain -imp/melee dsclaw -imp/death1 dsbgdth1 -imp/death2 dsbgdth2 -imp/attack dsfirsht -imp/shotx dsfirxpl -$limit imp/active 6 - -// Demon - -demon/sight dssgtsit -demon/active dsdmact -demon/pain dsdmpain -demon/melee dssgtatk -demon/death dssgtdth -$limit demon/melee 4 - -// Spectre - -spectre/sight dssgtsit -spectre/active dsdmact -spectre/pain dsdmpain -spectre/melee dssgtatk -spectre/death dssgtdth - -// Cacodemon - -caco/sight dscacsit -caco/active dsdmact -caco/pain dsdmpain -caco/death dscacdth -caco/attack dsfirsht -caco/shotx dsfirxpl - -// Baron of Hell - -baron/sight dsbrssit -baron/active dsdmact -baron/pain dsdmpain -baron/melee dsclaw -baron/death dsbrsdth -baron/attack dsfirsht -baron/shotx dsfirxpl - -// Hell Knight - -knight/sight dskntsit -knight/active dsdmact -knight/pain dsdmpain -knight/death dskntdth - -// Lost Soul - -skull/active dsdmact -skull/pain dsdmpain -skull/melee dssklatk -skull/death dsfirxpl - -// Spider Mastermind - -spider/sight dsspisit -spider/active dsdmact -spider/pain dsdmpain -spider/attack dsshotgn -spider/death dsspidth -spider/walk dsmetal - -// Arachnotron - -baby/sight dsbspsit -baby/active dsbspact -baby/pain dsdmpain -baby/death dsbspdth -baby/walk dsbspwlk -baby/attack dsplasma -baby/shotx dsfirxpl - -$limit baby/attack 0 - -// Cyber Demon - -cyber/sight dscybsit -cyber/active dsdmact -cyber/pain dsdmpain -cyber/death dscybdth -cyber/hoof dshoof - -// Pain Elemental - -pain/sight dspesit -pain/active dsdmact -pain/pain dspepain -pain/death dspedth - -// Wolfenstein SS - -wolfss/sight dssssit -wolfss/active dsposact -wolfss/pain dspopain -wolfss/death dsssdth -wolfss/attack dsshotgn - -// Commander Keen - -keen/pain dskeenpn -keen/death dskeendt - -// Boss Brain - -brain/sight dsbossit -brain/pain dsbospn -brain/death dsbosdth -brain/spit dsbospit -brain/cube dsboscub -brain/cubeboom dsfirxpl -$alias brain/spawn misc/teleport - - -//============================================================================ -// -// WORLD SOUNDS -// -//=========================================================================== - -world/barrelx dsbarexp - -world/drip dsempty -world/watersplash dsempty -world/sludgegloop dsempty -world/lavasizzle dsempty - -// -// -// Platform Sounds -// - -plats/pt1_strt dspstart -plats/pt1_stop dspstop -plats/pt1_mid dsstnmov - -// -// Door Sounds -// - -doors/dr1_open dsdoropn -doors/dr1_clos dsdorcls -doors/dr2_open dsbdopn -doors/dr2_clos dsbdcls - -//=========================================================================== -// -// MISCELLANEOUS SOUNDS -// -//=========================================================================== - -misc/secret dssecret -misc/w_pkup dswpnup // Pickup weapon -misc/p_pkup dsgetpow // Pickup powerup -misc/i_pkup dsitemup // Pickup item -misc/k_pkup dsitemup // Pickup key -misc/spawn dsitmbk // Item respawn -misc/chat dsradio // Doom 2 chat sound -misc/chat2 dstink // Chat sound for everything else - -$limit misc/i_pkup 1 -$limit misc/k_pkup 1 -$limit misc/w_pkup 1 -$limit misc/p_pkup 1 -$pitchshift misc/i_pkup 0 -$pitchshift misc/k_pkup 0 -$pitchshift misc/chat2 0 - -switches/normbutn dsswtchn -switches/exitbutn dsswtchx - -misc/teleport dstelept - -menu/activate dsswtchn // Activate a new menu -menu/backup dsswtchn // Backup to previous menu -menu/prompt dsswtchn // Activate a prompt "menu" -menu/cursor dspstop // Move cursor up/down -menu/change dsstnmov // Select new value for option -menu/invalid dsoof // Menu not available -menu/dismiss dsswtchx // Dismiss a prompt message -menu/choose dspistol // Choose a menu item -menu/clear dsswtchx // Close top menu - -$random menu/quit1 { player/male/death1 demon/pain grunt/pain misc/gibbed misc/teleport grunt/sight1 grunt/sight3 demon/melee } -$random menu/quit2 { vile/active misc/p_pkup brain/cube misc/gibbed skeleton/swing knight/death baby/active demon/melee } - -$alias intermission/tick weapons/pistol -$alias intermission/cooptotal *death -$alias intermission/nextstage weapons/rocklx -$alias intermission/paststats weapons/shotgr -$alias intermission/pastcoopstats weapons/shotgr -$alias intermission/pastdmstats *gibbed - - -$endif // ifdoom - - -/****************************************************************************/ -/* */ -/* HERETIC SOUNDS */ -/* */ -/****************************************************************************/ - -$ifheretic - -$rolloff * custom 0 1600 - -$pitchshiftrange 2 - -$playersound player male *wimpydeath plrwdth -$playersound player male *death plrdth -$playersound player male *crazydeath plrcdth -$playersound player male *gibbed gibdth -$playersound player male *pain100 plrpai -$playersounddup player male *pain75 *pain100 -$playersounddup player male *pain50 *pain100 -$playersounddup player male *pain25 *pain100 -$playersound player male *weaponlaugh wpnup -$playersounddup player male *evillaugh *weaponlaugh -$playersound player male *grunt plroof -$playersounddup player male *usefail *grunt -$playersounddup player male *land *grunt -$playersound player male *jump plrjmp -$playersound player male *burndeath hedat1 - -$playeralias chicken male *usefail chicken/peck -$PlayerAlias Chicken Male *Grunt chicken/pain -$PlayerAlias Chicken Male *Land chicken/pain -$PlayerAlias Chicken Male *Jump chicken/active -$PlayerAlias Chicken Male *EvilLaugh chicken/active - -chicken/sight chicpai -chicken/pain chicpai -chicken/death chicdth -chicken/attack chicatk - -misc/burn hedat1 - -weapons/staffhit stfhit -weapons/staffpowerhit stfpow -weapons/staffcrackle stfcrk -weapons/wandhit gldhit -weapons/bowshoot bowsht -weapons/bowhit hrnhit -weapons/gauntletsactivate gntact -weapons/gauntletsuse gntuse -weapons/gauntletson gntful -weapons/gauntletshit gnthit -weapons/gauntletspowhit gntpow -weapons/maceshoot lobsht -weapons/macebounce bounce -weapons/macehit lobhit -weapons/macestop pstop -weapons/maceexplode phohit -weapons/blasterhit blshit -weapons/blasterpowhit hrnhit -weapons/blastershoot blssht -weapons/hornrodshoot hrnsht -weapons/hornrodhit hrnhit -weapons/hornrodpowshoot hrnpow -weapons/hornrodpowhit ramphit -weapons/phoenixshoot phosht -weapons/phoenixhit phohit -weapons/phoenixpowshoot phopow - -$limit weapons/gauntletson 0 -$limit weapons/gauntletshit 0 -$limit weapons/gauntletspowhit 0 -$limit weapons/gauntletsactivate 0 -$limit weapons/gauntletsuse 0 -$limit weapons/maceexplode 0 -$limit weapons/phoenixhit 0 -$limit weapons/phoenixpowshoot 1 - -// [RH] Heretic didn't have these limitless, but they can sound bad if they're not -$limit weapons/bowhit 0 -$limit weapons/hornrodshoot 0 -$limit weapons/hornrodhit 0 -$limit weapons/maceshoot 0 - -himp/sight impsit -himp/attack impat1 -himp/pain imppai -himp/death impdth -himp/active impsit -himp/leaderattack impat2 - -misc/invuse artiuse - -$limit misc/invuse 1 - -world/podexplode podexp -world/podgrow newpod -world/wind wind -world/waterfall waterfl - -$limit world/podexplode 0 -$limit world/podgrow 0 -$limit world/wind 1 - -misc/i_pkup itemup -misc/k_pkup keyup -misc/p_pkup artiup -$alias misc/w_pkup *weaponlaugh - -misc/rain ramrain -misc/spawn respawn - -$limit misc/spawn 1 - -// -// Minotaur sounds -// - -minotaur/sight minsit -minotaur/melee stfpow -minotaur/attack1 minat1 -minotaur/attack2 minat2 -minotaur/attack3 minat3 -minotaur/pain minpai -minotaur/death mindth -minotaur/active minact -minotaur/fx2hit phohit -minotaur/fx3hit phohit - -// -// Wizard sounds -// - -wizard/sight wizsit -wizard/attack wizatk -wizard/death wizdth -wizard/pain wizpai -wizard/active1 wizact -$random wizard/active { wizard/sight wizard/active1 } - -// -// Switch sounds -// - -switches/normbutn switch -$alias switches/exitbutn switches/normbutn // Heretic has no special exit button sound - -// -// -// Platform Sounds -// - -plats/pt1_strt pstart -plats/pt1_stop pstop -plats/pt1_mid dormov - -// -// Door Sounds -// - -doors/dr1_open doropn -doors/dr1_clos dorcls -doors/dr2_open doropn -doors/dr2_clos dorcls - -// -// Ambient sounds -// - -world/amb1 amb1 -world/amb2 amb2 -world/amb3 amb3 -world/amb4 amb4 -world/amb5 amb5 -world/amb6 amb6 -world/amb7 amb7 -world/amb8 amb8 -world/amb9 amb9 -world/amb10 amb10 -world/amb11 amb11 -world/amb12 bstsit - -$limit world/amb1 1 -$limit world/amb2 1 -$limit world/amb3 1 -$limit world/amb4 1 -$limit world/amb5 1 -$limit world/amb6 1 -$limit world/amb7 1 -$limit world/amb8 1 -$limit world/amb9 1 -$limit world/amb10 1 -$limit world/amb11 0 - -misc/chat chat -misc/teleport telept -misc/ripslop ripslop - -$limit misc/chat 1 - -world/drip gloop -world/watersplash gloop -world/lavasizzle burn -world/sludgegloop dsempty - -mummy/sight mumsit -mummy/attack1 mumat1 -mummy/attack2 mumat2 -mummy/pain mumpai -mummy/death mumdth -mummy/active mumsit -mummy/head mumhed - -beast/sight bstsit -beast/attack bstatk -beast/pain bstpai -beast/death bstdth -beast/active bstact - -snake/attack snkatk -snake/sight snksit -snake/pain snkpai -snake/death snkdth -snake/active snkact - -clink/sight clksit -clink/attack clkatk -clink/pain clkpai -clink/death clkdth -clink/active clkact - -hknight/sight kgtsit -hknight/attack kgtatk -hknight/melee kgtat2 -hknight/pain kgtpai -hknight/death kgtdth -hknight/active kgtsit -hknight/hit hrnhit -hknight/axewhoosh kgtatk - -misc/timebomb phohit -world/volcano/blast lobhit -world/volcano/shoot bstatk - -ironlich/sight hedsit -ironlich/attack1 hedat1 -ironlich/attack2 hedat2 -ironlich/attack3 hedat3 -ironlich/pain hedpai -ironlich/death heddth -ironlich/active hedact - -dsparilserpent/sight bstsit -dsparilserpent/attack bstatk -dsparilserpent/pain sbtpai -dsparilserpent/death sbtdth -dsparilserpent/active sbtact - -dsparil/sight sorsit -dsparil/attack soratk -dsparil/pain sorpai -dsparil/active soract -dsparil/rise sorrise -dsparil/zap sorzap -dsparil/scream sordsph -dsparil/explode sordexp -dsparil/bones sordbon - -chicken/active chicact -chicken/attack chicatk -chicken/pain chicpai -chicken/death chicdth -chicken/peck1 chicpk1 -chicken/peck2 chicpk2 -chicken/peck3 chicpk3 -$random chicken/peck { chicken/peck1 chicken/peck2 chicken/peck3 } - -menu/activate dorcls -menu/backup switch -menu/prompt chat -menu/choose dorcls -menu/cursor switch -menu/change keyup -menu/invalid plroof -menu/dismiss dorcls -menu/clear dorcls - -misc/secret dssecret - -$alias intermission/cooptotal *death -$alias intermission/nextstage doors/dr1_clos -$alias intermission/paststats plats/pt1_stop -$alias intermission/pastcoopstats plats/pt1_stop -$alias intermission/pastdmstats *gibbed - - -$endif // ifheretic - - -/****************************************************************************/ -/* */ -/* HEXEN SOUNDS */ -/* */ -/****************************************************************************/ - -$ifhexen - -$rolloff * custom 0 2025 - -$pitchshiftrange 3 - -$random PlayerFighterExtremeDeathPicker { PlayerFighterExtreme1Death - PlayerFighterExtreme2Death - PlayerFighterExtreme3Death } - -$playeralias fighter male *death PlayerFighterNormalDeath -$playeralias fighter male *crazydeath PlayerFighterCrazyDeath -$playeralias fighter male *burndeath PlayerFighterBurnDeath -$playeralias fighter male *xdeath PlayerFighterExtremeDeathPicker -$playeralias fighter male *pain100 PlayerFighterPain -$playersounddup fighter male *pain75 *pain100 -$playersounddup fighter male *pain50 *pain100 -$playersounddup fighter male *pain25 *pain100 -$playeralias fighter male *grunt PlayerFighterGrunt -$playeralias fighter male *land PlayerLand -$playeralias fighter male *poison PlayerPoisonCough -$playeralias fighter male *falling PlayerFighterFallingScream -$playeralias fighter male *splat PlayerFallingSplat -$playeralias fighter male *usefail PlayerFighterFailedUse -$playeralias fighter male *puzzfail PuzzleFailFighter -$playersound fighter male *jump fgtjump -$playeralias fighter male *fistgrunt FighterGrunt - -$random PlayerClericExtremeDeathPicker { PlayerClericExtreme1Death - PlayerClericExtreme2Death - PlayerClericExtreme3Death } - -$playeralias cleric male *death PlayerClericNormalDeath -$playeralias cleric male *crazydeath PlayerClericCrazyDeath -$playeralias cleric male *burndeath PlayerClericBurnDeath -$playeralias cleric male *xdeath PlayerClericExtremeDeathPicker -$playeralias cleric male *pain100 PlayerClericPain -$playersounddup cleric male *pain75 *pain100 -$playersounddup cleric male *pain50 *pain100 -$playersounddup cleric male *pain25 *pain100 -$playeralias cleric male *grunt PlayerClericGrunt -$playeralias cleric male *land PlayerLand -$playeralias cleric male *poison PlayerPoisonCough -$playeralias cleric male *falling PlayerClericFallingScream -$playeralias cleric male *splat PlayerFallingSplat -$playeralias cleric male *usefail PlayerClericFailedUse -$playeralias cleric male *puzzfail PuzzleFailCleric -$playersound cleric male *jump plrjump - -$random PlayerMageExtremeDeathPicker { PlayerMageExtreme1Death - PlayerMageExtreme2Death - PlayerMageExtreme3Death } - -$playeralias mage male *death PlayerMageNormalDeath -$playeralias mage male *crazydeath PlayerMageCrazyDeath -$playeralias mage male *burndeath PlayerMageBurnDeath -$playeralias mage male *xdeath PlayerMageExtremeDeathPicker -$playeralias mage male *pain100 PlayerMagePain -$playersounddup mage male *pain75 *pain100 -$playersounddup mage male *pain50 *pain100 -$playersounddup mage male *pain25 *pain100 -$playeralias mage male *grunt PlayerMageGrunt -$playeralias mage male *land PlayerLand -$playeralias mage male *poison PlayerPoisonCough -$playeralias mage male *falling PlayerMageFallingScream -$playeralias mage male *splat PlayerFallingSplat -$playeralias mage male *usefail PlayerMageFailedUse -$playeralias mage male *puzzfail PuzzleFailMage -$playersound mage male *jump mgjump - -$playeralias pig male *usefail PigActive1 -$playeralias pig male *puzzfail PigActive2 -$playeralias pig male *grunt PigActive1 -$playeralias pig male *land PigActive2 -$playeralias pig male *jump PigActive1 -$playeralias pig male *poison PigActive2 -$playeralias pig male *falling PigPain -$playeralias pig male *splat PigDeath - -$alias world/drip Ambient10 -$alias world/watersplash WaterSplash -$alias world/lavasizzle LavaSizzle -$alias world/sludgegloop SludgeGloop -$alias world/wind Wind -$alias world/quake Earthquake -$alias world/thunder ThunderCrash - -$alias misc/w_pkup PickupWeapon -$alias misc/p_pkup PickupArtifact -$alias misc/k_pkup PickupKey -$alias misc/i_pkup PickupItem -$alias misc/spawn Respawn -$alias misc/teleport Teleport -$alias misc/keytry DoorLocked -$alias misc/invuse UseArtifact -$alias misc/freeze FreezeDeath -$alias misc/icebreak FreezeShatter - -$alias misc/chat Chat -$alias misc/chat2 Chat - -$alias misc/fallingsplat PlayerFallingSplat - -$alias minotaur/sight MaulatorSight -$alias minotaur/pain MaulatorPain -$alias minotaur/death MaulatorDeath -$alias minotaur/active MaulatorActive -$alias minotaur/attack1 MaulatorHamHit -$alias minotaur/attack2 MaulatorHamSwing - -$random BishopActiveSounds { BishopActive BishopSight } -$random PigActive { PigActive1 PigActive2 } - -$limit PlayerFighterFailedUse 1 -$limit PlayerClericFailedUse 1 -$limit PlayerMageFailedUse 1 -$limit SorcererBallWoosh 4 -$limit SorcererBallBounce 3 -$limit SorcererBallExplode 3 -$limit SorcererBallPop 3 -$limit SorcererBigBallExplode 3 -$limit Ambient1 1 -$limit Ambient2 1 -$limit Ambient3 1 -$limit Ambient4 1 -$limit Ambient5 1 -$limit Ambient6 1 -$limit Ambient7 1 -$limit Ambient8 1 -$limit Ambient9 1 -$limit Ambient10 1 -$limit Ambient11 1 -$limit Ambient12 1 -$limit Ambient13 1 -$limit Ambient14 1 -$limit Ambient15 1 -$limit MysticIncant 4 - -$pitchshift PlayerMageNormalDeath 0 -$pitchshift PlayerMageCrazyDeath 0 -$pitchshift PlayerMageExtreme1Death 0 -$pitchshift PlayerMageExtreme2Death 0 -$pitchshift PlayerMageExtreme3Death 0 -$pitchshift PlayerMageBurnDeath 0 -$pitchshift PlayerMagePain 0 -$pitchshift PlayerMageGrunt 0 -$pitchshift PlayerMageFallingScream 0 -$pitchshift PlayerMageFailedUse 0 -$pitchshift PickupWeapon 0 -$pitchshift PickupPiece 0 -$pitchshift WeaponBuild 0 -$pitchshift BellRing 0 - -$alias menu/activate DoorCloseLight -$alias menu/backup PickupKey -$alias menu/prompt Chat -$alias menu/cursor FighterHammerHitWall -$alias menu/change PickupKey -$alias menu/invalid DoorCloseMetal // Hexen does not use this, but I do -$alias menu/dismiss PlatformStop -$alias menu/choose DoorCloseLight -$alias menu/clear PlatformStop - -// Hexen does not have ripslop sound like Heretic -misc/ripslop dsempty -misc/netnotch blddrp1 - -$alias intermission/cooptotal *death -$alias intermission/nextstage DoorCloseLight -$alias intermission/paststats PlatformStop -$alias intermission/pastcoopstats PlatformStop -$alias intermission/pastdmstats *gibbed - -$limit DoorCloseLight 4 - -$limit PuppyBeat 0 -$limit CeantaurPain 0 -$limit BishopPain 0 -$limit SerpentPain 0 -$limit DemonPain 0 -$limit WraithPain 0 -$limit MaulatorPain 0 -$limit EttinPain 0 -$limit FireDemonPain 0 -$limit SorcererPain 0 -$limit DragonPain 0 - -$endif // ifhexen - -/****************************************************************************/ -/* */ -/* STRIFE SOUNDS */ -/* */ -/****************************************************************************/ - -$ifstrife - -$rolloff * 200 1200 - -$playersound player male *death dspldeth -$playersound player male *xdeath dspdiehi -$playersound player male *gibbed dsslop -$playersound player male *pain100 dsplpain -$playersounddup player male *pain75 *pain100 -$playersounddup player male *pain50 *pain100 -$playersounddup player male *pain25 *pain100 -$playersound player male *grunt dsoof -$playersounddup player male *land *grunt -$playersound player male *jump dsjump -$playersound player male *fist dspunch -$playersound player male *usefail dsnoway - -$playersound player female *death dsfldeth -$playersound player female *xdeath dsfdiehi -$playersound player female *gibbed dsslop -$playersound player female *pain100 dsflpain -$playersounddup player female *pain75 *pain100 -$playersounddup player female *pain50 *pain100 -$playersounddup player female *pain25 *pain100 -$playersound player female *grunt dsfoof -$playersounddup player female *land *grunt -$playersound player female *jump dsfjump -$playersound player female *fist dspunch -$playersound player female *usefail dsfnoway - -$playersound player other *death dscldeth -$playersound player other *xdeath dscdiehi -$playersound player other *gibbed dsslop -$playersound player other *pain100 dsclpain -$playersounddup player other *pain75 *pain100 -$playersounddup player other *pain50 *pain100 -$playersounddup player other *pain25 *pain100 -$playersound player other *grunt dscoof -$playersounddup player other *land *grunt -$playersound player other *jump dscjump -$playersound player other *fist dspunch -$playersound player other *usefail dscnoway - -weapons/xbowshoot dsxbow -weapons/xbowhit dsfirxpl -weapons/assaultgun dsrifle -weapons/minimissile dsrlaunc -weapons/minimissilehit dsmislht -weapons/flamethrower dsflburn -weapons/flameidle dsflidl -weapons/mauler1 dspgrdat -weapons/mauler2charge dsproton -weapons/mauler2fire dsprotfl -weapons/mauler2hit dsexplod -weapons/hegrenadeshoot dsphoot -weapons/hegrenadebang dsexplod -weapons/phgrenadeshoot dsphoot -weapons/phgrenadebang dsexplod -weapons/sigil dssigil -weapons/sigilhit dssglhit -weapons/sigilcharge dssiglup - -monsters/rifle dsrifle - -switches/normbutn dsswtchn -$alias switches/exitbutn switches/normbutn -switches/chain dspulchn -switches/knob dsswknob -switches/keycard dskeycrd -switches/stone dsswston -switches/bolt dsswbolt -switches/boltback dsempty -switches/scanner dsswscan -switches/fool dsdifool -switches/valve dsvalve -switches/sizzle dsfirxpl - -world/glassbreak dsbglass -world/barrelx dsbarexp -world/smallfire dssmfire -world/largefire dslgfire -world/river dswriver -world/waterfall dswfall -world/waterdrip dswdrip -world/watersplash dswsplsh - -$limit world/river 1 -$limit world/waterfall 1 -$limit world/waterdrip 1 - -world/drip dsempty // These four satisfy the Heretic/Hexen terrain definitions -world/sludgegloop dsempty -world/lavasizzle dsempty -world/lavasizzle dsempty - -menu/activate dsswtchn // Activate a new menu -menu/backup dsswtchn // Backup to previous menu -menu/prompt dsswtchn // Activate a prompt "menu" -menu/cursor dspstop // Move cursor up/down -menu/change dsstnmov // Select new value for option -menu/invalid dsoof // Menu not available -menu/dismiss dsswish // Dismiss a prompt message -menu/choose dsrifl // Choose a menu item -menu/clear dsmtalht // Close top menu - -misc/startupdone dspsdtha -misc/teleport dstelept -misc/swish dsswish -misc/meathit dsmeatht -misc/metalhit dsmtalht -misc/pcrush dspcrush -misc/gibbed dsslop -misc/explosion dsexplod -misc/reactor dsreactr -misc/missileinflight dsrflite -misc/static dsstatic -misc/chant dschant -misc/alarm dsalarm -misc/disruptordeath dsdsrptr -$singular misc/alarm - -misc/secret dsyeah -misc/w_pkup dswpnup -misc/p_pkup dsyeah -misc/i_pkup dsitemup -misc/k_pkup dsitemup -misc/spawn dsitmbk -misc/chat dsradio -misc/invuse dsitemup -misc/mask dsmask - -plats/pt1_strt dspstart -plats/pt1_stop dspstop -plats/pt1_mid dsstnmov - -doors/dr2_open dsbdopn -doors/dr2_clos dsbdcls - -doors/stone_open dsdrston -doors/stone_close dsdrston - -doors/large_metal_open dsdrlmto -doors/large_metal_close dsdrlmtc - -doors/small_metal_open dsdrsmto -doors/small_metal_close dsdrsmtc - -doors/large_wood_open dsdrlwud -doors/large_wood_close dsdrlwud - -doors/small_wood_open dsdrswud -doors/small_wood_close dsdrswud - -doors/airlock_open dsairlck -doors/airlock_close dsairlck - -doors/chain_open dsdrchno -doors/chain_close dsdrchnc - -woodenbarrel/death dswbrldt - -human/imonfire dsburnme - -ambient/alien1 dsamaln1 -ambient/alien2 dsamaln2 -ambient/alien3 dsamaln3 -ambient/alien4 dsamaln4 -ambient/alien5 dsamaln5 -ambient/alien6 dsamaln6 - -reaver/sight dsrevsee -reaver/pain dsreavpn -reaver/death dsrevdth -reaver/active dsrevact -reaver/attack dsreavat -reaver/blade dsrevbld - -crusader/sight dsrb2see -crusader/pain dsrb2pn -crusader/death dsrb2dth -crusader/active dsrb2act -crusader/misl dsrlaunc -crusader/mislx dsmislht - -bishop/sight dsrb2see -bishop/pain dsrb2pn -bishop/death dspgrdth -bishop/active dsrb2act -bishop/misl dsrlaunc -bishop/mislx dsmislht - -sentinel/sight dssntsee -sentinel/death dssntdth -sentinel/active dssntact -sentinel/plasma dsplasma - -$random peasant/pain { peasant/pain1 peasant/pain2 peasant/pain3 peasant/pain4 } -peasant/pain1 dspespna -peasant/pain2 dspespnb -peasant/pain3 dspespnc -peasant/pain4 dspespnd - -//$random peasant/death { peasant/death1 peasant/death2 peasant/death3 } -$alias peasant/death peasant/death1 -peasant/death1 dspsdtha -peasant/death2 dspsdthb -peasant/death3 dspsdthc - -peasant/sight dsrebact -peasant/attack dsmeatht -peasant/active dsrebact - -beggar/attack dsmeatht -$alias beggar/pain peasant/pain -$alias beggar/death peasant/death - -rebel/sight dswpnup -$alias rebel/pain peasant/pain -rebel/death dsrebdth -rebel/active dsrebact - -barkeep/pain dsambbar -barkeep/active dsambppl -$singular barkeep/pain -$singular barkeep/active - -$alias smith/pain peasant/pain -$alias armorer/pain peasant/pain -$alias medic/pain peasant/pain -$alias zombie/death peasant/death -$alias becoming/death peasant/death -zombie/spawner dstelept - -acolyte/sight dsagrsee -acolyte/pain dsagrdpn -acolyte/death dsagrdth -acolyte/rifle dsrifle -$random acolyte/active { acolyte/active1 acolyte/active2 acolyte/active3 acolyte/active4 } -acolyte/active1 dsagrac1 -acolyte/active2 dsagrac2 -acolyte/active3 dsagrac3 -acolyte/active4 dsagrac4 - -macil/sight dsagrsee -$alias macil/pain peasant/pain -macil/active dsrebact -macil/slop dsslop - -alienspectre/sight dsalnsee -alienspectre/blade dsrevbld -alienspectre/pain dsalnpn -alienspectre/death dsalndth -alienspectre/active dsalnact - -turret/death dsmislht - -ore/explode dsexplod - -rat/sight dsratact -rat/death dsratact -rat/active dsratact -$singular rat/sight - -loremaster/chain dschain -loremaster/swish dsswish -loremaster/sight dslorsee -loremaster/attack dsrevbld -loremaster/pain dslorpn -loremaster/death dsslop -loremaster/active dstend - -stalker/sight dsspisit -stalker/attack dsspdatk -stalker/pain dsspdatk -stalker/death dsspidth -stalker/active dsspisit -stalker/walk dsspdwlk - -templar/sight dspgrsee -templar/pain dspgrdpn -templar/death dspgrdth -templar/active dspgract -templar/shoot dspgrdat - -inquisitor/sight dsinqsee -inquisitor/death dsinqdth -inquisitor/active dsinqact -inquisitor/walk dsinqact -inquisitor/jump dsinqjmp -inquisitor/attack dsphoot -inquisitor/atkexplode dsexplod - -programmer/clank dsmtalht -programmer/attack dsrevbld // Unused? -programmer/pain dsprgpn -programmer/death dsrb2dth -programmer/active dsprogac - -entity/sight dsmnalse -entity/melee dsrevbld -entity/pain dsalnpn -entity/death dsmnaldt -entity/active dsalnact - -$alias intermission/tick weapons/assaultgun -$alias intermission/cooptotal *death -$alias intermission/nextstage misc/explosion -$alias intermission/paststats world/barrelx -$alias intermission/pastcoopstats world/barrelx -$alias intermission/pastdmstats *gibbed - -$endif diff --git a/wadsrc/static/sprites/AFLYA0.png b/wadsrc/static/sprites/AFLYA0.png new file mode 100644 index 000000000..d12ca16c6 Binary files /dev/null and b/wadsrc/static/sprites/AFLYA0.png differ diff --git a/wadsrc/static/sprites/AFLYB0.png b/wadsrc/static/sprites/AFLYB0.png new file mode 100644 index 000000000..6f39e47d4 Binary files /dev/null and b/wadsrc/static/sprites/AFLYB0.png differ diff --git a/wadsrc/static/sprites/AFLYC0.png b/wadsrc/static/sprites/AFLYC0.png new file mode 100644 index 000000000..bc2a9a371 Binary files /dev/null and b/wadsrc/static/sprites/AFLYC0.png differ diff --git a/wadsrc/static/sprites/AFLYD0.png b/wadsrc/static/sprites/AFLYD0.png new file mode 100644 index 000000000..8509a127d Binary files /dev/null and b/wadsrc/static/sprites/AFLYD0.png differ diff --git a/zdoom.vcproj b/zdoom.vcproj index 7a10b4fbf..c7e321775 100644 --- a/zdoom.vcproj +++ b/zdoom.vcproj @@ -117,6 +117,7 @@ /> @@ -233,6 +234,7 @@ /> + + @@ -1447,6 +1455,10 @@ RelativePath=".\src\p_spec.h" > + + @@ -1938,6 +1950,10 @@ RelativePath=".\src\win32\fb_ddraw.cpp" > + + @@ -2628,6 +2644,14 @@ RelativePath=".\src\oplsynth\muslib.h" > + + + + @@ -2644,14 +2668,6 @@ RelativePath=".\src\oplsynth\opl_mus_player.h" > - - - - @@ -5236,6 +5252,42 @@ /> + + + + + + + + + + + + + +