diff --git a/src/actionspecials.h b/src/actionspecials.h index 6e77bff7..7bd89cbf 100644 --- a/src/actionspecials.h +++ b/src/actionspecials.h @@ -36,7 +36,7 @@ DEFINE_SPECIAL(ClearForceField, 34, 1, 1, 1) // [RH] Remove Strife's forcefie DEFINE_SPECIAL(Floor_RaiseByValueTimes8, 35, 3, 3, 3) DEFINE_SPECIAL(Floor_LowerByValueTimes8, 36, 3, 3, 3) DEFINE_SPECIAL(Floor_MoveToValue, 37, 3, 4, 4) -DEFINE_SPECIAL(Ceiling_Waggle, 38, 5, 5, 4) // [RH] Complement of Floor_Waggle +DEFINE_SPECIAL(Ceiling_Waggle, 38, 5, 5, 5) // [RH] Complement of Floor_Waggle DEFINE_SPECIAL(Teleport_ZombieChanger, 39, 2, 2, 2) // [RH] Needed for Strife DEFINE_SPECIAL(Ceiling_LowerByValue, 40, 3, 3, 3) DEFINE_SPECIAL(Ceiling_RaiseByValue, 41, 3, 3, 3) @@ -219,7 +219,7 @@ DEFINE_SPECIAL(Floor_RaiseToLowestCeiling, 238, 2, 2, 2) DEFINE_SPECIAL(Floor_RaiseByValueTxTy, 239, 3, 3, 3) DEFINE_SPECIAL(Floor_RaiseByTexture, 240, 2, 2, 2) DEFINE_SPECIAL(Floor_LowerToLowestTxTy, 241, 2, 2, 2) -DEFINE_SPECIAL(Floor_LowerToHighest, 242, 3, 3, 3) +DEFINE_SPECIAL(Floor_LowerToHighest, 242, 3, 4, 4) DEFINE_SPECIAL(Exit_Normal, 243, 1, 1, 1) DEFINE_SPECIAL(Exit_Secret, 244, 1, 1, 1) DEFINE_SPECIAL(Elevator_RaiseToNearest, 245, 2, 2, 2) diff --git a/src/compatibility.cpp b/src/compatibility.cpp index 57d2b3f7..80532c78 100644 --- a/src/compatibility.cpp +++ b/src/compatibility.cpp @@ -59,7 +59,14 @@ struct FCompatOption { const char *Name; int CompatFlags; - int BCompatFlags; + int WhichSlot; +}; + +enum +{ + SLOT_COMPAT, + SLOT_COMPAT2, + SLOT_BCOMPAT }; enum @@ -86,41 +93,43 @@ TMap BCompatMap; static FCompatOption Options[] = { - { "setslopeoverflow", 0, BCOMPATF_SETSLOPEOVERFLOW }, - { "resetplayerspeed", 0, BCOMPATF_RESETPLAYERSPEED }, - { "vileghosts", 0, BCOMPATF_VILEGHOSTS }, - { "ignoreteleporttags", 0, BCOMPATF_BADTELEPORTERS }, + { "setslopeoverflow", BCOMPATF_SETSLOPEOVERFLOW, SLOT_BCOMPAT }, + { "resetplayerspeed", BCOMPATF_RESETPLAYERSPEED, SLOT_BCOMPAT }, + { "vileghosts", BCOMPATF_VILEGHOSTS, SLOT_BCOMPAT }, + { "ignoreteleporttags", BCOMPATF_BADTELEPORTERS, SLOT_BCOMPAT }, // list copied from g_mapinfo.cpp - { "shorttex", COMPATF_SHORTTEX, 0 }, - { "stairs", COMPATF_STAIRINDEX, 0 }, - { "limitpain", COMPATF_LIMITPAIN, 0 }, - { "nopassover", COMPATF_NO_PASSMOBJ, 0 }, - { "notossdrops", COMPATF_NOTOSSDROPS, 0 }, - { "useblocking", COMPATF_USEBLOCKING, 0 }, - { "nodoorlight", COMPATF_NODOORLIGHT, 0 }, - { "ravenscroll", COMPATF_RAVENSCROLL, 0 }, - { "soundtarget", COMPATF_SOUNDTARGET, 0 }, - { "dehhealth", COMPATF_DEHHEALTH, 0 }, - { "trace", COMPATF_TRACE, 0 }, - { "dropoff", COMPATF_DROPOFF, 0 }, - { "boomscroll", COMPATF_BOOMSCROLL, 0 }, - { "invisibility", COMPATF_INVISIBILITY, 0 }, - { "silentinstantfloors", COMPATF_SILENT_INSTANT_FLOORS, 0 }, - { "sectorsounds", COMPATF_SECTORSOUNDS, 0 }, - { "missileclip", COMPATF_MISSILECLIP, 0 }, - { "crossdropoff", COMPATF_CROSSDROPOFF, 0 }, - { "wallrun", COMPATF_WALLRUN, 0 }, // [GZ] Added for CC MAP29 - { "anybossdeath", COMPATF_ANYBOSSDEATH, 0}, // [GZ] Added for UAC_DEAD - { "mushroom", COMPATF_MUSHROOM, 0}, - { "mbfmonstermove", COMPATF_MBFMONSTERMOVE, 0 }, - { "corpsegibs", COMPATF_CORPSEGIBS, 0 }, - { "noblockfriends", COMPATF_NOBLOCKFRIENDS, 0 }, - { "spritesort", COMPATF_SPRITESORT, 0 }, - { "hitscan", COMPATF_HITSCAN, 0 }, - { "lightlevel", COMPATF_LIGHT, 0 }, - { "polyobj", COMPATF_POLYOBJ, 0 }, - { "maskedmidtex", COMPATF_MASKEDMIDTEX, 0 }, + { "shorttex", COMPATF_SHORTTEX, SLOT_COMPAT }, + { "stairs", COMPATF_STAIRINDEX, SLOT_COMPAT }, + { "limitpain", COMPATF_LIMITPAIN, SLOT_COMPAT }, + { "nopassover", COMPATF_NO_PASSMOBJ, SLOT_COMPAT }, + { "notossdrops", COMPATF_NOTOSSDROPS, SLOT_COMPAT }, + { "useblocking", COMPATF_USEBLOCKING, SLOT_COMPAT }, + { "nodoorlight", COMPATF_NODOORLIGHT, SLOT_COMPAT }, + { "ravenscroll", COMPATF_RAVENSCROLL, SLOT_COMPAT }, + { "soundtarget", COMPATF_SOUNDTARGET, SLOT_COMPAT }, + { "dehhealth", COMPATF_DEHHEALTH, SLOT_COMPAT }, + { "trace", COMPATF_TRACE, SLOT_COMPAT }, + { "dropoff", COMPATF_DROPOFF, SLOT_COMPAT }, + { "boomscroll", COMPATF_BOOMSCROLL, SLOT_COMPAT }, + { "invisibility", COMPATF_INVISIBILITY, SLOT_COMPAT }, + { "silentinstantfloors", COMPATF_SILENT_INSTANT_FLOORS, SLOT_COMPAT }, + { "sectorsounds", COMPATF_SECTORSOUNDS, SLOT_COMPAT }, + { "missileclip", COMPATF_MISSILECLIP, SLOT_COMPAT }, + { "crossdropoff", COMPATF_CROSSDROPOFF, SLOT_COMPAT }, + { "wallrun", COMPATF_WALLRUN, SLOT_COMPAT }, // [GZ] Added for CC MAP29 + { "anybossdeath", COMPATF_ANYBOSSDEATH, SLOT_COMPAT },// [GZ] Added for UAC_DEAD + { "mushroom", COMPATF_MUSHROOM, SLOT_COMPAT }, + { "mbfmonstermove", COMPATF_MBFMONSTERMOVE, SLOT_COMPAT }, + { "corpsegibs", COMPATF_CORPSEGIBS, SLOT_COMPAT }, + { "noblockfriends", COMPATF_NOBLOCKFRIENDS, SLOT_COMPAT }, + { "spritesort", COMPATF_SPRITESORT, SLOT_COMPAT }, + { "hitscan", COMPATF_HITSCAN, SLOT_COMPAT }, + { "lightlevel", COMPATF_LIGHT, SLOT_COMPAT }, + { "polyobj", COMPATF_POLYOBJ, SLOT_COMPAT }, + { "maskedmidtex", COMPATF_MASKEDMIDTEX, SLOT_COMPAT }, + { "badangles", COMPATF2_BADANGLES, SLOT_COMPAT2 }, + { NULL, 0, 0 } }; @@ -189,15 +198,13 @@ void ParseCompatibility() md5array.Push(md5); sc.MustGetString(); } while (!sc.Compare("{")); - flags.CompatFlags = 0; - flags.BCompatFlags = 0; + memset(flags.CompatFlags, 0, sizeof(flags.CompatFlags)); flags.ExtCommandIndex = ~0u; while (sc.GetString()) { if ((i = sc.MatchString(&Options[0].Name, sizeof(*Options))) >= 0) { - flags.CompatFlags |= Options[i].CompatFlags; - flags.BCompatFlags |= Options[i].BCompatFlags; + flags.CompatFlags[Options[i].WhichSlot] |= Options[i].CompatFlags; } else if (sc.Compare("clearlineflags")) { @@ -226,7 +233,7 @@ void ParseCompatibility() sc.MustGetString(); CompatParams.Push(P_FindLineSpecial(sc.String, NULL, NULL)); - for(int i=0;i<5;i++) + for (int i = 0; i < 5; i++) { sc.MustGetNumber(); CompatParams.Push(sc.Number); @@ -269,18 +276,21 @@ void CheckCompatibility(MapData *map) { ii_compatflags = COMPATF_SHORTTEX|COMPATF_LIGHT; if (gameinfo.flags & GI_COMPATSTAIRS) ii_compatflags |= COMPATF_STAIRINDEX; + ii_compatflags2 = 0; ib_compatflags = 0; ii_compatparams = -1; } else if (Wads.GetLumpFile(map->lumpnum) == 1 && (gameinfo.flags & GI_COMPATPOLY1) && Wads.CheckLumpName(map->lumpnum, "MAP36")) { ii_compatflags = COMPATF_POLYOBJ; + ii_compatflags2 = 0; ib_compatflags = 0; ii_compatparams = -1; } else if (Wads.GetLumpFile(map->lumpnum) == 2 && (gameinfo.flags & GI_COMPATPOLY2) && Wads.CheckLumpName(map->lumpnum, "MAP47")) { ii_compatflags = COMPATF_POLYOBJ; + ii_compatflags2 = 0; ib_compatflags = 0; ii_compatparams = -1; } @@ -297,25 +307,35 @@ void CheckCompatibility(MapData *map) { Printf("%02X", md5.Bytes[j]); } - if (flags != NULL) Printf(", cflags = %08x, bflags = %08x\n", flags->CompatFlags, flags->BCompatFlags); - else Printf("\n"); + if (flags != NULL) + { + Printf(", cflags = %08x, cflags2 = %08x, bflags = %08x\n", + flags->CompatFlags[SLOT_COMPAT], flags->CompatFlags[SLOT_COMPAT2], flags->CompatFlags[SLOT_BCOMPAT]); + } + else + { + Printf("\n"); + } } if (flags != NULL) { - ii_compatflags = flags->CompatFlags; - ib_compatflags = flags->BCompatFlags; + ii_compatflags = flags->CompatFlags[SLOT_COMPAT]; + ii_compatflags2 = flags->CompatFlags[SLOT_COMPAT2]; + ib_compatflags = flags->CompatFlags[SLOT_BCOMPAT]; ii_compatparams = flags->ExtCommandIndex; } else { ii_compatflags = 0; + ii_compatflags2 = 0; ib_compatflags = 0; ii_compatparams = -1; } } // Reset i_compatflags compatflags.Callback(); + compatflags2.Callback(); } //========================================================================== @@ -416,5 +436,5 @@ CCMD (mapchecksum) CCMD (hiddencompatflags) { - Printf("%08x %08x\n", ii_compatflags, ib_compatflags); + Printf("%08x %08x %08x\n", ii_compatflags, ii_compatflags2, ib_compatflags); } diff --git a/src/compatibility.h b/src/compatibility.h index 5726955b..cf4dce2f 100644 --- a/src/compatibility.h +++ b/src/compatibility.h @@ -14,8 +14,7 @@ union FMD5Holder struct FCompatValues { - int CompatFlags; - int BCompatFlags; + int CompatFlags[3]; unsigned int ExtCommandIndex; }; diff --git a/src/d_main.cpp b/src/d_main.cpp index 86d0ba40..31e29aa1 100644 --- a/src/d_main.cpp +++ b/src/d_main.cpp @@ -515,8 +515,8 @@ CVAR (Flag, sv_nocountendmonst, dmflags2, DF2_NOCOUNTENDMONST); // //========================================================================== -int i_compatflags; // internal compatflags composed from the compatflags CVAR and MAPINFO settings -int ii_compatflags, ib_compatflags; +int i_compatflags, i_compatflags2; // internal compatflags composed from the compatflags CVAR and MAPINFO settings +int ii_compatflags, ii_compatflags2, ib_compatflags; EXTERN_CVAR(Int, compatmode) @@ -526,19 +526,30 @@ static int GetCompatibility(int mask) else return (mask & ~level.info->compatmask) | (level.info->compatflags & level.info->compatmask); } +static int GetCompatibility2(int mask) +{ + return (level.info == NULL) ? mask + : (mask & ~level.info->compatmask2) | (level.info->compatflags2 & level.info->compatmask2); +} + CUSTOM_CVAR (Int, compatflags, 0, CVAR_ARCHIVE|CVAR_SERVERINFO) { int old = i_compatflags; i_compatflags = GetCompatibility(self) | ii_compatflags; - if ((old ^i_compatflags) & COMPATF_POLYOBJ) + if ((old ^ i_compatflags) & COMPATF_POLYOBJ) { FPolyObj::ClearAllSubsectorLinks(); } } +CUSTOM_CVAR (Int, compatflags2, 0, CVAR_ARCHIVE|CVAR_SERVERINFO) +{ + i_compatflags2 = GetCompatibility2(self) | ii_compatflags2; +} + CUSTOM_CVAR(Int, compatmode, 0, CVAR_ARCHIVE|CVAR_NOINITCALL) { - int v; + int v, w = 0; switch (self) { @@ -558,6 +569,7 @@ CUSTOM_CVAR(Int, compatmode, 0, CVAR_ARCHIVE|CVAR_NOINITCALL) COMPATF_TRACE|COMPATF_MISSILECLIP|COMPATF_SOUNDTARGET|COMPATF_NO_PASSMOBJ|COMPATF_LIMITPAIN| COMPATF_DEHHEALTH|COMPATF_INVISIBILITY|COMPATF_CROSSDROPOFF|COMPATF_CORPSEGIBS|COMPATF_HITSCAN| COMPATF_WALLRUN|COMPATF_NOTOSSDROPS|COMPATF_LIGHT|COMPATF_MASKEDMIDTEX; + w = COMPATF2_BADANGLES; break; case 3: // Boom compat mode @@ -580,40 +592,42 @@ CUSTOM_CVAR(Int, compatmode, 0, CVAR_ARCHIVE|CVAR_NOINITCALL) } compatflags = v; + compatflags2 = w; } -CVAR (Flag, compat_shortTex, compatflags, COMPATF_SHORTTEX); -CVAR (Flag, compat_stairs, compatflags, COMPATF_STAIRINDEX); -CVAR (Flag, compat_limitpain, compatflags, COMPATF_LIMITPAIN); -CVAR (Flag, compat_silentpickup,compatflags, COMPATF_SILENTPICKUP); -CVAR (Flag, compat_nopassover, compatflags, COMPATF_NO_PASSMOBJ); -CVAR (Flag, compat_soundslots, compatflags, COMPATF_MAGICSILENCE); -CVAR (Flag, compat_wallrun, compatflags, COMPATF_WALLRUN); -CVAR (Flag, compat_notossdrops, compatflags, COMPATF_NOTOSSDROPS); -CVAR (Flag, compat_useblocking, compatflags, COMPATF_USEBLOCKING); -CVAR (Flag, compat_nodoorlight, compatflags, COMPATF_NODOORLIGHT); -CVAR (Flag, compat_ravenscroll, compatflags, COMPATF_RAVENSCROLL); -CVAR (Flag, compat_soundtarget, compatflags, COMPATF_SOUNDTARGET); -CVAR (Flag, compat_dehhealth, compatflags, COMPATF_DEHHEALTH); -CVAR (Flag, compat_trace, compatflags, COMPATF_TRACE); -CVAR (Flag, compat_dropoff, compatflags, COMPATF_DROPOFF); -CVAR (Flag, compat_boomscroll, compatflags, COMPATF_BOOMSCROLL); -CVAR (Flag, compat_invisibility,compatflags, COMPATF_INVISIBILITY); -CVAR (Flag, compat_silentinstantfloors,compatflags, COMPATF_SILENT_INSTANT_FLOORS); -CVAR (Flag, compat_sectorsounds,compatflags, COMPATF_SECTORSOUNDS); -CVAR (Flag, compat_missileclip, compatflags, COMPATF_MISSILECLIP); -CVAR (Flag, compat_crossdropoff,compatflags, COMPATF_CROSSDROPOFF); -CVAR (Flag, compat_anybossdeath,compatflags, COMPATF_ANYBOSSDEATH); -CVAR (Flag, compat_minotaur, compatflags, COMPATF_MINOTAUR); -CVAR (Flag, compat_mushroom, compatflags, COMPATF_MUSHROOM); -CVAR (Flag, compat_mbfmonstermove,compatflags, COMPATF_MBFMONSTERMOVE); -CVAR (Flag, compat_corpsegibs, compatflags, COMPATF_CORPSEGIBS); -CVAR (Flag, compat_noblockfriends,compatflags,COMPATF_NOBLOCKFRIENDS); -CVAR (Flag, compat_spritesort, compatflags,COMPATF_SPRITESORT); -CVAR (Flag, compat_hitscan, compatflags,COMPATF_HITSCAN); -CVAR (Flag, compat_light, compatflags,COMPATF_LIGHT); -CVAR (Flag, compat_polyobj, compatflags,COMPATF_POLYOBJ); -CVAR (Flag, compat_maskedmidtex,compatflags,COMPATF_MASKEDMIDTEX); +CVAR (Flag, compat_shortTex, compatflags, COMPATF_SHORTTEX); +CVAR (Flag, compat_stairs, compatflags, COMPATF_STAIRINDEX); +CVAR (Flag, compat_limitpain, compatflags, COMPATF_LIMITPAIN); +CVAR (Flag, compat_silentpickup, compatflags, COMPATF_SILENTPICKUP); +CVAR (Flag, compat_nopassover, compatflags, COMPATF_NO_PASSMOBJ); +CVAR (Flag, compat_soundslots, compatflags, COMPATF_MAGICSILENCE); +CVAR (Flag, compat_wallrun, compatflags, COMPATF_WALLRUN); +CVAR (Flag, compat_notossdrops, compatflags, COMPATF_NOTOSSDROPS); +CVAR (Flag, compat_useblocking, compatflags, COMPATF_USEBLOCKING); +CVAR (Flag, compat_nodoorlight, compatflags, COMPATF_NODOORLIGHT); +CVAR (Flag, compat_ravenscroll, compatflags, COMPATF_RAVENSCROLL); +CVAR (Flag, compat_soundtarget, compatflags, COMPATF_SOUNDTARGET); +CVAR (Flag, compat_dehhealth, compatflags, COMPATF_DEHHEALTH); +CVAR (Flag, compat_trace, compatflags, COMPATF_TRACE); +CVAR (Flag, compat_dropoff, compatflags, COMPATF_DROPOFF); +CVAR (Flag, compat_boomscroll, compatflags, COMPATF_BOOMSCROLL); +CVAR (Flag, compat_invisibility, compatflags, COMPATF_INVISIBILITY); +CVAR (Flag, compat_silentinstantfloors, compatflags, COMPATF_SILENT_INSTANT_FLOORS); +CVAR (Flag, compat_sectorsounds, compatflags, COMPATF_SECTORSOUNDS); +CVAR (Flag, compat_missileclip, compatflags, COMPATF_MISSILECLIP); +CVAR (Flag, compat_crossdropoff, compatflags, COMPATF_CROSSDROPOFF); +CVAR (Flag, compat_anybossdeath, compatflags, COMPATF_ANYBOSSDEATH); +CVAR (Flag, compat_minotaur, compatflags, COMPATF_MINOTAUR); +CVAR (Flag, compat_mushroom, compatflags, COMPATF_MUSHROOM); +CVAR (Flag, compat_mbfmonstermove, compatflags, COMPATF_MBFMONSTERMOVE); +CVAR (Flag, compat_corpsegibs, compatflags, COMPATF_CORPSEGIBS); +CVAR (Flag, compat_noblockfriends, compatflags, COMPATF_NOBLOCKFRIENDS); +CVAR (Flag, compat_spritesort, compatflags, COMPATF_SPRITESORT); +CVAR (Flag, compat_hitscan, compatflags, COMPATF_HITSCAN); +CVAR (Flag, compat_light, compatflags, COMPATF_LIGHT); +CVAR (Flag, compat_polyobj, compatflags, COMPATF_POLYOBJ); +CVAR (Flag, compat_maskedmidtex, compatflags, COMPATF_MASKEDMIDTEX); +CVAR (Flag, compat_badangles, compatflags2, COMPATF2_BADANGLES); //========================================================================== // diff --git a/src/doomdef.h b/src/doomdef.h index 03de866e..538f084d 100644 --- a/src/doomdef.h +++ b/src/doomdef.h @@ -334,6 +334,8 @@ enum COMPATF_LIGHT = 1 << 29, // Find neighboring light level like Doom COMPATF_POLYOBJ = 1 << 30, // Draw polyobjects the old fashioned way COMPATF_MASKEDMIDTEX = 1 << 31, // Ignore compositing when drawing masked midtextures + + COMPATF2_BADANGLES = 1 << 0, // It is impossible to face directly NSEW. }; // Emulate old bugs for select maps. These are not exposed by a cvar diff --git a/src/doomstat.h b/src/doomstat.h index 826c3199..0daa8d6b 100644 --- a/src/doomstat.h +++ b/src/doomstat.h @@ -240,6 +240,7 @@ EXTERN_CVAR (Int, dmflags); EXTERN_CVAR (Int, dmflags2); // [BC] EXTERN_CVAR (Int, compatflags); -extern int i_compatflags, ii_compatflags, ib_compatflags; +EXTERN_CVAR (Int, compatflags2); +extern int i_compatflags, i_compatflags2, ii_compatflags, ii_compatflags2, ib_compatflags; #endif diff --git a/src/g_level.cpp b/src/g_level.cpp index 0b89dafa..95b11f4a 100644 --- a/src/g_level.cpp +++ b/src/g_level.cpp @@ -664,6 +664,7 @@ void G_DoCompleted (void) } else { + level_info_t *nextinfo = FindLevelInfo (nextlevel); wminfo.next = nextinfo->mapname; wminfo.LName1 = TexMan[TexMan.CheckForTexture(nextinfo->pname, FTexture::TEX_MiscPatch)]; @@ -1253,6 +1254,7 @@ void G_InitLevelLocals () level.skypic2[8] = 0; compatflags.Callback(); + compatflags2.Callback(); NormalLight.ChangeFade (level.fadeto); diff --git a/src/g_level.h b/src/g_level.h index 8e0477f4..336b4710 100644 --- a/src/g_level.h +++ b/src/g_level.h @@ -299,8 +299,8 @@ struct level_info_t float aircontrol; int WarpTrans; int airsupply; - DWORD compatflags; - DWORD compatmask; + DWORD compatflags, compatflags2; + DWORD compatmask, compatmask2; FString Translator; // for converting Doom-format linedef and sector types. int DefaultEnvironment; // Default sound environment for the map. FName Intermission; @@ -561,6 +561,7 @@ struct FSkillInfo bool FastMonsters; bool DisableCheats; bool AutoUseHealth; + bool EasyBossBrain; int RespawnCounter; int RespawnLimit; diff --git a/src/g_mapinfo.cpp b/src/g_mapinfo.cpp index ea1c0d7c..3b6e6eb9 100644 --- a/src/g_mapinfo.cpp +++ b/src/g_mapinfo.cpp @@ -254,8 +254,8 @@ void level_info_t::Reset() aircontrol = 0.f; WarpTrans = 0; airsupply = 20; - compatflags = 0; - compatmask = 0; + compatflags = compatflags2 = 0; + compatmask = compatmask2 = 0; Translator = ""; RedirectType = 0; RedirectMap[0] = 0; @@ -1272,6 +1272,7 @@ MapFlagHandlers[] = { "compat_light", MITYPE_COMPATFLAG, COMPATF_LIGHT, 0 }, { "compat_polyobj", MITYPE_COMPATFLAG, COMPATF_POLYOBJ, 0 }, { "compat_maskedmidtex", MITYPE_COMPATFLAG, COMPATF_MASKEDMIDTEX, 0 }, + { "compat_badangles", MITYPE_COMPATFLAG, 0, COMPATF2_BADANGLES }, { "cd_start_track", MITYPE_EATNEXT, 0, 0 }, { "cd_end1_track", MITYPE_EATNEXT, 0, 0 }, { "cd_end2_track", MITYPE_EATNEXT, 0, 0 }, @@ -1353,9 +1354,18 @@ void FMapInfoParser::ParseMapDefinition(level_info_t &info) if (sc.CheckNumber()) set = sc.Number; } - if (set) info.compatflags |= handler->data1; - else info.compatflags &= ~handler->data1; + if (set) + { + info.compatflags |= handler->data1; + info.compatflags2 |= handler->data2; + } + else + { + info.compatflags &= ~handler->data1; + info.compatflags2 &= ~handler->data2; + } info.compatmask |= handler->data1; + info.compatmask2 |= handler->data2; } break; diff --git a/src/menu/optionmenu.cpp b/src/menu/optionmenu.cpp index 12294a36..4c5b2ef6 100644 --- a/src/menu/optionmenu.cpp +++ b/src/menu/optionmenu.cpp @@ -584,7 +584,7 @@ public: Super::Drawer(); char text[64]; - mysnprintf(text, 64, "compatflags = %d", *compatflags); + mysnprintf(text, 64, "compatflags = %d compatflags2 = %d", *compatflags, *compatflags2); screen->DrawText (SmallFont, OptionSettings.mFontColorValue, (screen->GetWidth() - SmallFont->StringWidth (text) * CleanXfac_1) / 2, 0, text, DTA_CleanNoMove_1, true, TAG_DONE); diff --git a/src/p_floor.cpp b/src/p_floor.cpp index d18a908b..e0381e73 100644 --- a/src/p_floor.cpp +++ b/src/p_floor.cpp @@ -272,11 +272,12 @@ DFloor::DFloor (sector_t *sec) // // HANDLE FLOOR TYPES // [RH] Added tag, speed, height, crush, change params. +// This functions starts too many different things. // //========================================================================== bool EV_DoFloor (DFloor::EFloor floortype, line_t *line, int tag, - fixed_t speed, fixed_t height, int crush, int change, bool hexencrush) + fixed_t speed, fixed_t height, int crush, int change, bool hexencrush, bool hereticlower) { int secnum; bool rtn; @@ -332,7 +333,7 @@ manual_floor: floor->m_FloorDestDist = sec->floorplane.PointToDist (spot, newheight); // [RH] DOOM's turboLower type did this. I've just extended it // to be applicable to all LowerToHighest types. - if (floor->m_FloorDestDist != sec->floorplane.d) + if (hereticlower || floor->m_FloorDestDist != sec->floorplane.d) floor->m_FloorDestDist = sec->floorplane.PointToDist (spot, newheight+height); break; diff --git a/src/p_lnspec.cpp b/src/p_lnspec.cpp index eb1c2b1c..96c9ac46 100644 --- a/src/p_lnspec.cpp +++ b/src/p_lnspec.cpp @@ -275,9 +275,9 @@ FUNC(LS_Floor_LowerToLowest) } FUNC(LS_Floor_LowerToHighest) -// Floor_LowerToHighest (tag, speed, adjust) +// Floor_LowerToHighest (tag, speed, adjust, hereticlower) { - return EV_DoFloor (DFloor::floorLowerToHighest, ln, arg0, SPEED(arg1), (arg2-128)*FRACUNIT, 0, 0, false); + return EV_DoFloor (DFloor::floorLowerToHighest, ln, arg0, SPEED(arg1), (arg2-128)*FRACUNIT, 0, 0, false, arg3==1); } FUNC(LS_Floor_LowerToNearest) diff --git a/src/p_mobj.cpp b/src/p_mobj.cpp index 7eb2d39b..c77128a2 100644 --- a/src/p_mobj.cpp +++ b/src/p_mobj.cpp @@ -1871,6 +1871,7 @@ fixed_t P_XYMovement (AActor *mo, fixed_t scrollx, fixed_t scrolly) goto explode; } + // Reflect the missile along angle mo->angle = angle; angle >>= ANGLETOFINESHIFT; @@ -3950,6 +3951,10 @@ APlayerPawn *P_SpawnPlayer (FMapThing *mthing, bool tempplayer) { spawn_angle = ANG45 * (mthing->angle / 45); } + if (i_compatflags2 & COMPATF2_BADANGLES) + { + spawn_angle += 1 << ANGLETOFINESHIFT; + } } mobj = static_cast diff --git a/src/p_spec.h b/src/p_spec.h index 19de4ce8..547154c1 100644 --- a/src/p_spec.h +++ b/src/p_spec.h @@ -755,7 +755,7 @@ protected: fixed_t stairsize, fixed_t speed, int delay, int reset, int igntxt, int usespecials); friend bool EV_DoFloor (DFloor::EFloor floortype, line_t *line, int tag, - fixed_t speed, fixed_t height, int crush, int change, bool hexencrush); + fixed_t speed, fixed_t height, int crush, int change, bool hexencrush, bool hereticlower=false); friend bool EV_FloorCrushStop (int tag); friend bool EV_DoDonut (int tag, line_t *line, fixed_t pillarspeed, fixed_t slimespeed); private: @@ -766,7 +766,7 @@ bool EV_BuildStairs (int tag, DFloor::EStair type, line_t *line, fixed_t stairsize, fixed_t speed, int delay, int reset, int igntxt, int usespecials); bool EV_DoFloor (DFloor::EFloor floortype, line_t *line, int tag, - fixed_t speed, fixed_t height, int crush, int change, bool hexencrush); + fixed_t speed, fixed_t height, int crush, int change, bool hexencrush, bool hereticlower); bool EV_FloorCrushStop (int tag); bool EV_DoDonut (int tag, line_t *line, fixed_t pillarspeed, fixed_t slimespeed); diff --git a/src/p_teleport.cpp b/src/p_teleport.cpp index 6d396923..d46df100 100644 --- a/src/p_teleport.cpp +++ b/src/p_teleport.cpp @@ -322,6 +322,7 @@ bool EV_Teleport (int tid, int tag, line_t *line, int side, AActor *thing, bool angle_t angle = 0; fixed_t s = 0, c = 0; fixed_t velx = 0, vely = 0; + angle_t badangle = 0; if (thing == NULL) { // Teleport function called with an invalid actor @@ -367,7 +368,11 @@ bool EV_Teleport (int tid, int tag, line_t *line, int side, AActor *thing, bool { z = ONFLOORZ; } - if (P_Teleport (thing, searcher->x, searcher->y, z, searcher->angle, fog, sourceFog, keepOrientation, haltVelocity)) + if ((i_compatflags2 & COMPATF2_BADANGLES) && (thing->player != NULL)) + { + badangle = 1 << ANGLETOFINESHIFT; + } + if (P_Teleport (thing, searcher->x, searcher->y, z, searcher->angle + badangle, fog, sourceFog, keepOrientation, haltVelocity)) { // [RH] Lee Killough's changes for silent teleporters from BOOM if (!fog && line && keepOrientation) diff --git a/src/r_plane.cpp b/src/r_plane.cpp index 9e754853..0652121f 100644 --- a/src/r_plane.cpp +++ b/src/r_plane.cpp @@ -1080,7 +1080,7 @@ void R_DrawSinglePlane (visplane_t *pl, fixed_t alpha, bool additive, bool maske } else { // regular flat - FTexture *tex = TexMan(pl->picnum); + FTexture *tex = TexMan(pl->picnum, true); if (tex->UseType == FTexture::TEX_Null) { @@ -1368,9 +1368,9 @@ void R_DrawSkyPlane (visplane_t *pl) if (!(pl->sky & PL_SKYFLAT)) { // use sky1 sky1: - frontskytex = TexMan(sky1tex); + frontskytex = TexMan(sky1tex, true); if (level.flags & LEVEL_DOUBLESKY) - backskytex = TexMan(sky2tex); + backskytex = TexMan(sky2tex, true); else backskytex = NULL; skyflip = 0; @@ -1381,7 +1381,7 @@ void R_DrawSkyPlane (visplane_t *pl) } else if (pl->sky == PL_SKYFLAT) { // use sky2 - frontskytex = TexMan(sky2tex); + frontskytex = TexMan(sky2tex, true); backskytex = NULL; frontcyl = sky2cyl; skyflip = 0; @@ -1407,7 +1407,7 @@ void R_DrawSkyPlane (visplane_t *pl) pos = side_t::top; } - frontskytex = TexMan(s->GetTexture(pos)); + frontskytex = TexMan(s->GetTexture(pos), true); if (frontskytex == NULL || frontskytex->UseType == FTexture::TEX_Null) { // [RH] The blank texture: Use normal sky instead. goto sky1; diff --git a/src/r_segs.cpp b/src/r_segs.cpp index 7e69190e..52505232 100644 --- a/src/r_segs.cpp +++ b/src/r_segs.cpp @@ -240,7 +240,7 @@ void R_RenderMaskedSegRange (drawseg_t *ds, int x1, int x2) frontsector = curline->frontsector; backsector = curline->backsector; - tex = TexMan(curline->sidedef->GetTexture(side_t::mid)); + tex = TexMan(curline->sidedef->GetTexture(side_t::mid), true); if (i_compatflags & COMPATF_MASKEDMIDTEX) { tex = tex->GetRawTexture(); @@ -705,15 +705,15 @@ void R_RenderFakeWallRange (drawseg_t *ds, int x1, int x2) } else if(fover->flags & FF_UPPERTEXTURE) { - rw_pic = TexMan(curline->sidedef->GetTexture(side_t::top)); + rw_pic = TexMan(curline->sidedef->GetTexture(side_t::top), true); } else if(fover->flags & FF_LOWERTEXTURE) { - rw_pic = TexMan(curline->sidedef->GetTexture(side_t::bottom)); + rw_pic = TexMan(curline->sidedef->GetTexture(side_t::bottom), true); } else { - rw_pic = TexMan(fover->master->sidedef[0]->GetTexture(side_t::mid)); + rw_pic = TexMan(fover->master->sidedef[0]->GetTexture(side_t::mid), true); } } else if (frontsector->e->XFloor.ffloors.Size()) @@ -764,15 +764,15 @@ void R_RenderFakeWallRange (drawseg_t *ds, int x1, int x2) fover = NULL; if (rover->flags & FF_UPPERTEXTURE) { - rw_pic = TexMan(curline->sidedef->GetTexture(side_t::top)); + rw_pic = TexMan(curline->sidedef->GetTexture(side_t::top), true); } else if(rover->flags & FF_LOWERTEXTURE) { - rw_pic = TexMan(curline->sidedef->GetTexture(side_t::bottom)); + rw_pic = TexMan(curline->sidedef->GetTexture(side_t::bottom), true); } else { - rw_pic = TexMan(rover->master->sidedef[0]->GetTexture(side_t::mid)); + rw_pic = TexMan(rover->master->sidedef[0]->GetTexture(side_t::mid), true); } } // correct colors now @@ -881,15 +881,15 @@ void R_RenderFakeWallRange (drawseg_t *ds, int x1, int x2) } else if (fover->flags & FF_UPPERTEXTURE) { - rw_pic = TexMan(curline->sidedef->GetTexture(side_t::top)); + rw_pic = TexMan(curline->sidedef->GetTexture(side_t::top), true); } else if (fover->flags & FF_LOWERTEXTURE) { - rw_pic = TexMan(curline->sidedef->GetTexture(side_t::bottom)); + rw_pic = TexMan(curline->sidedef->GetTexture(side_t::bottom), true); } else { - rw_pic = TexMan(fover->master->sidedef[0]->GetTexture(side_t::mid)); + rw_pic = TexMan(fover->master->sidedef[0]->GetTexture(side_t::mid), true); } } else if (frontsector->e->XFloor.ffloors.Size()) @@ -937,15 +937,15 @@ void R_RenderFakeWallRange (drawseg_t *ds, int x1, int x2) fover = NULL; if (rover->flags & FF_UPPERTEXTURE) { - rw_pic = TexMan(curline->sidedef->GetTexture(side_t::top)); + rw_pic = TexMan(curline->sidedef->GetTexture(side_t::top), true); } else if (rover->flags & FF_LOWERTEXTURE) { - rw_pic = TexMan(curline->sidedef->GetTexture(side_t::bottom)); + rw_pic = TexMan(curline->sidedef->GetTexture(side_t::bottom), true); } else { - rw_pic = TexMan(rover->master->sidedef[0]->GetTexture(side_t::mid)); + rw_pic = TexMan(rover->master->sidedef[0]->GetTexture(side_t::mid), true); } } // correct colors now @@ -1799,7 +1799,7 @@ void R_NewWall (bool needlights) // [RH] Horizon lines do not need to be textured if (linedef->special != Line_Horizon) { - midtexture = TexMan(sidedef->GetTexture(side_t::mid)); + midtexture = TexMan(sidedef->GetTexture(side_t::mid), true); rw_offset_mid = sidedef->GetTextureXOffset(side_t::mid); rowoffset = sidedef->GetTextureYOffset(side_t::mid); rw_midtexturescalex = sidedef->GetTextureXScale(side_t::mid); @@ -1943,7 +1943,7 @@ void R_NewWall (bool needlights) if (rw_havehigh) { // top texture - toptexture = TexMan(sidedef->GetTexture(side_t::top)); + toptexture = TexMan(sidedef->GetTexture(side_t::top), true); rw_offset_top = sidedef->GetTextureXOffset(side_t::top); rowoffset = sidedef->GetTextureYOffset(side_t::top); @@ -1973,7 +1973,7 @@ void R_NewWall (bool needlights) } if (rw_havelow) { // bottom texture - bottomtexture = TexMan(sidedef->GetTexture(side_t::bottom)); + bottomtexture = TexMan(sidedef->GetTexture(side_t::bottom), true); rw_offset_bottom = sidedef->GetTextureXOffset(side_t::bottom); rowoffset = sidedef->GetTextureYOffset(side_t::bottom); @@ -2016,7 +2016,7 @@ void R_NewWall (bool needlights) markceiling = false; } - FTexture *midtex = TexMan(sidedef->GetTexture(side_t::mid)); + FTexture *midtex = TexMan(sidedef->GetTexture(side_t::mid), true); segtextured = midtex != NULL || toptexture != NULL || bottomtexture != NULL; @@ -2218,7 +2218,7 @@ void R_StoreWallRange (int start, int stop) if(!ds_p->fake) // allocate space for masked texture tables, if needed // [RH] Don't just allocate the space; fill it in too. - if ((TexMan(sidedef->GetTexture(side_t::mid))->UseType != FTexture::TEX_Null || ds_p->bFakeBoundary || IsFogBoundary (frontsector, backsector)) && + if ((TexMan(sidedef->GetTexture(side_t::mid), true)->UseType != FTexture::TEX_Null || ds_p->bFakeBoundary || IsFogBoundary (frontsector, backsector)) && (rw_ceilstat != 12 || !sidedef->GetTexture(side_t::top).isValid()) && (rw_floorstat != 3 || !sidedef->GetTexture(side_t::bottom).isValid()) && (WallSZ1 >= TOO_CLOSE_Z && WallSZ2 >= TOO_CLOSE_Z)) @@ -2244,7 +2244,7 @@ void R_StoreWallRange (int start, int stop) lwal = (fixed_t *)(openings + ds_p->maskedtexturecol); swal = (fixed_t *)(openings + ds_p->swall); - FTexture *pic = TexMan(sidedef->GetTexture(side_t::mid)); + FTexture *pic = TexMan(sidedef->GetTexture(side_t::mid), true); fixed_t yrepeat = FixedMul(pic->yScale, sidedef->GetTextureYScale(side_t::mid)); fixed_t xoffset = sidedef->GetTextureXOffset(side_t::mid); @@ -2550,6 +2550,7 @@ int WallMost (short *mostbuf, const secplane_t &plane) { clearbufshort (&mostbuf[ix1], ix2-ix1, viewheight); return bad; + } if (bad&3) @@ -2759,7 +2760,7 @@ static void R_RenderDecal (side_t *wall, DBaseDecal *decal, drawseg_t *clipper, xscale = decal->ScaleX; yscale = decal->ScaleY; - WallSpriteTile = TexMan(decal->PicNum); + WallSpriteTile = TexMan(decal->PicNum, true); flipx = (BYTE)(decal->RenderFlags & RF_XFLIP); if (WallSpriteTile == NULL || WallSpriteTile->UseType == FTexture::TEX_Null) diff --git a/src/svnrevision.h b/src/svnrevision.h index b5a2a2a4..69ce996c 100644 --- a/src/svnrevision.h +++ b/src/svnrevision.h @@ -3,5 +3,5 @@ // This file was automatically generated by the // updaterevision tool. Do not edit by hand. -#define ZD_SVN_REVISION_STRING "3300" -#define ZD_SVN_REVISION_NUMBER 3300 +#define ZD_SVN_REVISION_STRING "3311" +#define ZD_SVN_REVISION_NUMBER 3311 diff --git a/src/textures/patchtexture.cpp b/src/textures/patchtexture.cpp index eb9487bc..e476cbad 100644 --- a/src/textures/patchtexture.cpp +++ b/src/textures/patchtexture.cpp @@ -94,7 +94,7 @@ static bool CheckIfPatch(FileReader & file) int height = LittleShort(foo->height); int width = LittleShort(foo->width); - if (height > 0 && height < 2048 && width > 0 && width <= 2048 && width < file.GetLength()/4) + if (height > 0 && height <= 2048 && width > 0 && width <= 2048 && width < file.GetLength()/4) { // The dimensions seem like they might be valid for a patch, so // check the column directory for extra security. At least one diff --git a/src/textures/texturemanager.cpp b/src/textures/texturemanager.cpp index 622d92f7..1abbab29 100644 --- a/src/textures/texturemanager.cpp +++ b/src/textures/texturemanager.cpp @@ -55,6 +55,8 @@ FTextureManager TexMan; +CVAR(Bool, vid_nopalsubstitutions, false, CVAR_ARCHIVE) + //========================================================================== // // FTextureManager :: FTextureManager @@ -749,7 +751,7 @@ void FTextureManager::AddPatches (int lumpnum) { file->Read (name, 8); - if (CheckForTexture (name, FTexture::TEX_WallPatch, false) == -1) + if (CheckForTexture (name, FTexture::TEX_WallPatch, 0) == -1) { CreateTexture (Wads.CheckNumForName (name, ns_patches), FTexture::TEX_WallPatch); } @@ -1001,6 +1003,57 @@ void FTextureManager::Init() InitAnimDefs(); FixAnimations(); InitSwitchList(); + InitPalettedVersions(); +} + +//========================================================================== +// +// FTextureManager :: InitPalettedVersions +// +//========================================================================== + +void FTextureManager::InitPalettedVersions() +{ + int lump, lastlump = 0; + + PalettedVersions.Clear(); + while ((lump = Wads.FindLump("PALVERS", &lastlump)) != -1) + { + FScanner sc(lump); + + while (sc.GetString()) + { + FTextureID pic1 = CheckForTexture(sc.String, FTexture::TEX_Any); + if (!pic1.isValid()) + { + sc.ScriptMessage("Unknown texture %s to replace"); + } + sc.MustGetString(); + FTextureID pic2 = CheckForTexture(sc.String, FTexture::TEX_Any); + if (!pic2.isValid()) + { + sc.ScriptMessage("Unknown texture %s to use as replacement"); + } + if (pic1.isValid() && pic2.isValid()) + { + PalettedVersions[pic1.GetIndex()] = pic2.GetIndex(); + } + } + } +} + +//========================================================================== +// +// FTextureManager :: PalCheck +// +//========================================================================== + +FTextureID FTextureManager::PalCheck(FTextureID tex) +{ + if (vid_nopalsubstitutions) return tex; + int *newtex = PalettedVersions.CheckKey(tex.GetIndex()); + if (newtex == NULL || *newtex == 0) return tex; + return *newtex; } //========================================================================== @@ -1152,6 +1205,7 @@ int FTextureManager::CountLumpTextures (int lumpnum) // // R_PrecacheLevel // + // Preloads all relevant graphics for the level. // //=========================================================================== diff --git a/src/textures/textures.h b/src/textures/textures.h index 5e001985..cec8c148 100644 --- a/src/textures/textures.h +++ b/src/textures/textures.h @@ -401,15 +401,20 @@ public: FTexture *FindTexture(const char *texname, int usetype = FTexture::TEX_MiscPatch, BITFIELD flags = TEXMAN_TryAny); // Get texture with translation - FTexture *operator() (FTextureID texnum) + FTexture *operator() (FTextureID texnum, bool withpalcheck=false) { if ((size_t)texnum.texnum >= Textures.Size()) return NULL; - return Textures[Translation[texnum.texnum]].Texture; + int picnum = Translation[texnum.texnum]; + if (withpalcheck) + { + picnum = PalCheck(picnum).GetIndex(); + } + return Textures[picnum].Texture; } FTexture *operator() (const char *texname) { FTextureID texnum = GetTexture (texname, FTexture::TEX_MiscPatch); - if (texnum.texnum==-1) return NULL; + if (texnum.texnum == -1) return NULL; return Textures[Translation[texnum.texnum]].Texture; } @@ -419,6 +424,8 @@ public: return Textures[Translation[i]].Texture; } + FTextureID PalCheck(FTextureID tex); + enum { TEXMAN_TryAny = 1, @@ -503,6 +510,8 @@ private: void SetTranslation (FTextureID fromtexnum, FTextureID totexnum); void ParseAnimatedDoor(FScanner &sc); + void InitPalettedVersions(); + // Switches void InitSwitchList (); @@ -521,6 +530,7 @@ private: int HashFirst[HASH_SIZE]; FTextureID DefaultTexture; TArray FirstTextureForFile; + TMap PalettedVersions; // maps from normal -> paletted version TArray mAnimations; TArray mSwitchDefs; @@ -598,6 +608,7 @@ public: void MakeTexture (); protected: + DSimpleCanvas *Canvas; BYTE *Pixels; Span DummySpans[2]; diff --git a/src/v_video.cpp b/src/v_video.cpp index 314ae22f..db0be369 100644 --- a/src/v_video.cpp +++ b/src/v_video.cpp @@ -1539,7 +1539,14 @@ void V_Init (bool restart) } screen = new DDummyFrameBuffer (width, height); } - + // Update screen palette when restarting + else + { + PalEntry *palette = screen->GetPalette (); + for (int i = 0; i < 256; ++i) + *palette++ = GPalette.BaseColors[i]; + screen->UpdatePalette(); + } BuildTransTable (GPalette.BaseColors); } diff --git a/wadsrc/static/compatibility.txt b/wadsrc/static/compatibility.txt index 4bfa156e..de05766c 100644 --- a/wadsrc/static/compatibility.txt +++ b/wadsrc/static/compatibility.txt @@ -141,3 +141,10 @@ DCE862393CAAA6FF1294FB7056B53057 // UAC Ultra map07: Contains a scroller dependi { ignoreteleporttags } + +8FF30D57F6CE64F085A6567EC302842A // Enjay's test map for this flag +9D7893D09FEE55C31B73C670DF850962 // Memento Mori II, map12 +{ + badangles +} + diff --git a/wadsrc/static/menudef.txt b/wadsrc/static/menudef.txt index eb6f09dd..03f0baea 100644 --- a/wadsrc/static/menudef.txt +++ b/wadsrc/static/menudef.txt @@ -1201,6 +1201,7 @@ OptionMenu "CompatibilityOptions" Option "Cripple sound for silent BFG trick", "compat_soundslots", "YesNo" Option "Draw polyobjects like Hexen", "compat_POLYOBJ", "YesNo" Option "Ignore Y offsets on masked midtextures", "compat_MASKEDMIDTEX", "YesNo" + Option "Cannot travel straight NSEW", "compat_badangles", "YesNo" Class "CompatibilityMenu" } diff --git a/wadsrc/static/xlat/heretic.txt b/wadsrc/static/xlat/heretic.txt index 8a2b696b..2ed3748b 100644 --- a/wadsrc/static/xlat/heretic.txt +++ b/wadsrc/static/xlat/heretic.txt @@ -3,6 +3,7 @@ include "xlat/base.txt" 7 = USE, Stairs_BuildUpDoom (tag, F_SLOW, 8) 8 = WALK, Stairs_BuildUpDoom (tag, F_SLOW, 8) 10 = WALK, Plat_DownWaitUpStayLip (tag, P_FAST, PLATWAIT, 0) + 36 = WALK, Floor_LowerToHighest (tag, F_FAST, 136, 1) 88 = WALK|REP, Plat_DownWaitUpStayLip (tag, P_FAST, PLATWAIT, 0) 99 = 0, Scroll_Texture_Right (SCROLL_UNIT) 100 = WALK|REP, Door_Raise (tag, D_SLOW*3, VDOORWAIT) diff --git a/wadsrc/static/xlat/strife.txt b/wadsrc/static/xlat/strife.txt index b1e17003..3d06cd7c 100644 --- a/wadsrc/static/xlat/strife.txt +++ b/wadsrc/static/xlat/strife.txt @@ -113,7 +113,7 @@ RetailOnly = 121 52 = WALK|REP, ACS_ExecuteAlways (0, 0, 52, tag) 53 = WALK, Plat_PerpetualRaiseLip (tag, P_SLOW, PLATWAIT, 0) 54 = WALK, Plat_Stop (tag) - 56 = WALK, Floor_RaiseAndCrush (tag, F_SLOW, 10) + 56 = WALK, Floor_RaiseAndCrush (tag, F_SLOW, 10, 2) 57 = WALK, Ceiling_CrushStop (tag) 58 = WALK, Floor_RaiseByValue (tag, F_SLOW, 64) 59 = WALK, Floor_RaiseByValueTxTy (tag, F_SLOW, 24) @@ -164,7 +164,7 @@ RetailOnly = 121 91 = WALK|REP, Floor_RaiseToLowestCeiling (tag, F_SLOW) 92 = WALK|REP, Floor_RaiseByValue (tag, F_SLOW, 64) 93 = WALK|REP, Floor_RaiseByValueTxTy (tag, F_SLOW, 24) - 94 = WALK|REP, Floor_RaiseAndCrush (tag, F_SLOW, 10) + 94 = WALK|REP, Floor_RaiseAndCrush (tag, F_SLOW, 10, 2) 95 = WALK|REP, Plat_RaiseAndStayTx0 (tag, P_SLOW/2) 96 = WALK|REP, Floor_RaiseByTexture (tag, F_SLOW) 97 = WALK|REP|MONST, Teleport (0, tag) @@ -247,7 +247,7 @@ RetailOnly = 121 49 = USE, Ceiling_CrushAndRaiseA (tag, C_SLOW, C_SLOW, 10) 50 = USE, Door_Close (tag, D_SLOW) 51 = USE, Teleport_EndGame (0) - 55 = USE, Floor_RaiseAndCrush (tag, F_SLOW, 10) + 55 = USE, Floor_RaiseAndCrush (tag, F_SLOW, 10, 2) 101 = USE, Floor_RaiseToLowestCeiling (tag, F_SLOW) 102 = USE, Floor_LowerToHighest (tag, F_SLOW, 128) 103 = USE, Door_Open (tag, D_SLOW) @@ -278,7 +278,7 @@ RetailOnly = 121 235 = USE, ACS_ExecuteWithResult (0, 235, tag) // Buttons - 11 = USE|REP, Exit_Normal (0) + 11 = USE|REP, ACS_ExecuteWithResult (0, 52, tag) 42 = USE|REP, Door_Close (tag, D_SLOW) 43 = USE|REP, Ceiling_LowerToFloor (tag, C_SLOW) 45 = USE|REP, Floor_LowerToHighest (tag, F_SLOW, 128) @@ -289,7 +289,7 @@ RetailOnly = 121 64 = USE|REP, Floor_RaiseToLowestCeiling (tag, F_SLOW) 66 = USE|REP, Plat_UpByValueStayTx (tag, P_SLOW/2, 3) 67 = USE|REP, Plat_UpByValueStayTx (tag, P_SLOW/2, 4) - 65 = USE|REP, Floor_RaiseAndCrush (tag, F_SLOW, 10) + 65 = USE|REP, Floor_RaiseAndCrush (tag, F_SLOW, 10, 2) 68 = USE|REP, Plat_RaiseAndStayTx0 (tag, P_SLOW/2) 69 = USE|REP, Floor_RaiseToNearest (tag, F_SLOW) 70 = USE|REP, Floor_LowerToHighest (tag, F_FAST, 128)