diff --git a/source/core/g_mapinfo.cpp b/source/core/g_mapinfo.cpp index fb04cef7d..8315c4675 100644 --- a/source/core/g_mapinfo.cpp +++ b/source/core/g_mapinfo.cpp @@ -484,6 +484,101 @@ void FMapInfoParser::ParseBreakCeiling() // //========================================================================== +void FMapInfoParser::ParseSwitches() +{ + + sc.MustGetStringName("{"); + while (!sc.CheckString("}")) + { + SwitchDef sd{}; + if (switches.Size() == 0) switches.Push(sd); // entry 0 is a non-switch + sc.MustGetString(); + static const char* types[] = { "switch", "comboswitch", "multiswitch", "accessswitch", nullptr }; + int type = sc.MatchString(types); + int count = type == 2 ? 4 : 2; + sd.type = type + 1; + + bool more = false; + int state = 0; + ParseAssign(); + for (int i = 0; i < count; i++) + { + next: + sc.MustGetString(); + auto thisframe = TexMan.CheckForTexture(sc.String, ETextureType::Any); + if (!thisframe.isValid()) + { + sc.ScriptMessage("Unknown texture '%s' in switch definition", sc.String); + } + sd.states[state++] = thisframe; + if (!sc.CheckString(",")) + { + more = false; + if (i < count - 1) + { + sc.ScriptMessage("Insufficient arguments in switch definition"); + goto next; + } + } + else more = true; + } + if (more) + { + do + { + sc.MustGetString(); + if (more) + { + // check if this is a sound + auto sound = S_FindSound(sc.String); + if (sound == NO_SOUND) more = false; + sd.soundid = sound; + } + if (!more) + { + if (sc.Compare("shootable")) + { + sd.flags |= SwitchDef::shootable; + } + else if (sc.Compare("oneway")) + { + sd.flags |= SwitchDef::oneway; + } + else if (sc.Compare("resettable")) + { + sd.flags |= SwitchDef::resettable; + } + else if (sc.Compare("nofilter")) + { + sd.flags |= SwitchDef::nofilter; + } + else + { + sc.ScriptMessage("%s: Unknown switch flag ", sc.String); + } + } + more = false; + } while (sc.CheckString(",")); + } + unsigned ndx = switches.Push(sd); + if (sd.flags & SwitchDef::oneway) + { + count = 1; + } + for (int i = 0; i < count; i++) + { + AccessExtInfo(sd.states[i]).switchindex = ndx; + AccessExtInfo(sd.states[i]).switchphase = i; + } + } +} + +//========================================================================== +// +// +// +//========================================================================== + void FMapInfoParser::ParseTextureFlags() { int num = -1; @@ -1621,6 +1716,10 @@ void FMapInfoParser::ParseMapInfo (int lump, MapRecord &gamedefaults, MapRecord { ParseBreakCeiling(); } + else if (sc.Compare("switches")) + { + ParseSwitches(); + } else if (sc.Compare("textureflags")) { ParseTextureFlags(); diff --git a/source/core/g_mapinfo.h b/source/core/g_mapinfo.h index c0aecdaa1..3bdeac67b 100644 --- a/source/core/g_mapinfo.h +++ b/source/core/g_mapinfo.h @@ -95,6 +95,7 @@ struct FMapInfoParser void ParseBreakCeiling(); void ParseTextureFlags(); void ParseSurfaceTypes(); + void ParseSwitches(); void ParseConstants(); void ParseMapInfo (int lump, MapRecord &gamedefaults, MapRecord &defaultinfo); diff --git a/source/core/maptypes.h b/source/core/maptypes.h index a680e049c..dad4a8b29 100644 --- a/source/core/maptypes.h +++ b/source/core/maptypes.h @@ -498,6 +498,7 @@ struct spritetypebase } const FTextureID spritetexture() const; + void setspritetexture(FTextureID tex); }; diff --git a/source/core/textures/buildtiles.h b/source/core/textures/buildtiles.h index f5c4f2298..bfe6a180d 100644 --- a/source/core/textures/buildtiles.h +++ b/source/core/textures/buildtiles.h @@ -29,6 +29,12 @@ inline const FTextureID spritetypebase::spritetexture() const return tileGetTextureID(picnum); } +inline void spritetypebase::setspritetexture(FTextureID tex) +{ + picnum = legacyTileNum(tex); +} + + inline void walltype::setwalltexture(FTextureID tex) { wallpicnum = legacyTileNum(tex); diff --git a/source/core/textures/texinfo.h b/source/core/textures/texinfo.h index 3e04ee4da..23142dcce 100644 --- a/source/core/textures/texinfo.h +++ b/source/core/textures/texinfo.h @@ -3,6 +3,7 @@ #include #include "gamefuncs.h" #include "tiletexture.h" +#include "s_soundinternal.h" // extended texture info for which there is no room in the texture manager. @@ -55,16 +56,47 @@ struct TileOffs int16_t xsize, ysize, xoffs, yoffs; }; +// probably only useful for Duke. We'll see +struct SwitchDef +{ + enum + { + shootable = 1, + oneway = 2, + resettable = 4, + nofilter = 8, + }; + enum + { + None = 0, // no switch, so that all non-switches can use an empty entry to avoid validation checks + Regular = 1, + Combo = 2, + Multi = 3, + Access = 4 + }; + uint8_t type; + uint8_t flags; + FSoundID soundid; + FTextureID states[4]; +}; + +inline TArray switches; + struct TexExtInfo { - // TexAnim *texanim // todo: extended texture animation like ZDoom's ANIMDEFS. + uint16_t animindex; // not used yet - for ZDoom-style animations. + uint16_t switchindex; uint8_t surftype; // Contents depend on the game, e.g. this holds Blood's surfType. Other games have hard coded handling for similar effects. - uint8_t tileshade; // Blood's shade.dat + union + { + uint8_t switchphase; // For Duke: index of texture in switch sequence. + uint8_t tileshade; // Blood's shade.dat + }; int16_t tiletovox; // engine-side voxel index picanm_t picanm; // tile-based animation data. uint32_t flags; // contents are game dependent. TileOffs hiofs; -}; +}; inline TArray texExtInfo; inline int firstarttile, maxarttile; // we need this for conversion between tile numbers and texture IDs @@ -110,6 +142,16 @@ inline TexExtInfo& AccessExtInfo(FTextureID tex) // this is for modifying and sh return texExtInfo[index]; } +inline bool isaccessswitch(FTextureID texid) +{ + return switches[GetExtInfo(texid).switchindex].type == SwitchDef::Access; +} + +inline bool isshootableswitch(FTextureID texid) +{ + return switches[GetExtInfo(texid).switchindex].flags & SwitchDef::shootable; +} + inline int tilehasvoxel(FTextureID texid) { if (r_voxels) diff --git a/source/games/duke/src/actors.cpp b/source/games/duke/src/actors.cpp index 4861ab19b..d05360e0d 100644 --- a/source/games/duke/src/actors.cpp +++ b/source/games/duke/src/actors.cpp @@ -2489,8 +2489,7 @@ void handle_se24(DDukeActor *actor, bool scroll, double mult) continue; } - if (actorflag(a2, SFLAG_SE24_NOCARRY) || - wallswitchcheck(a2)) + if (actorflag(a2, SFLAG_SE24_NOCARRY) || wallswitchcheck(a2) || GetExtInfo(a2->spr.spritetexture()).switchindex > 0) continue; if (a2->spr.pos.Z > a2->floorz - 16) diff --git a/source/games/duke/src/flags_d.cpp b/source/games/duke/src/flags_d.cpp index 9aba9c482..9e950d42f 100644 --- a/source/games/duke/src/flags_d.cpp +++ b/source/games/duke/src/flags_d.cpp @@ -291,8 +291,6 @@ void initactorflags_d() TILE_SMALLSMOKE = DTILE_SMALLSMOKE; TILE_BLOODPOOL = DTILE_BLOODPOOL; TILE_CLOUDYSKIES = DTILE_CLOUDYSKIES; - TILE_ACCESSSWITCH = DTILE_ACCESSSWITCH; - TILE_ACCESSSWITCH2 = DTILE_ACCESSSWITCH2; TILE_MIRRORBROKE = DTILE_MIRRORBROKE; TILE_LOADSCREEN = DTILE_LOADSCREEN; TILE_CROSSHAIR = DTILE_CROSSHAIR; diff --git a/source/games/duke/src/flags_r.cpp b/source/games/duke/src/flags_r.cpp index 2729004e5..a63ce4df7 100644 --- a/source/games/duke/src/flags_r.cpp +++ b/source/games/duke/src/flags_r.cpp @@ -291,8 +291,6 @@ void initactorflags_r() TILE_SMALLSMOKE = RTILE_SMALLSMOKE; TILE_BLOODPOOL = RTILE_BLOODPOOL; TILE_CLOUDYSKIES = RTILE_CLOUDYSKIES; - TILE_ACCESSSWITCH = RTILE_ACCESSSWITCH; - TILE_ACCESSSWITCH2 = RTILE_ACCESSSWITCH2; TILE_MIRRORBROKE = RTILE_MIRRORBROKE; TILE_HEN = RTILE_HEN; TILE_LOADSCREEN = RTILE_LOADSCREEN; diff --git a/source/games/duke/src/namelist_d.h b/source/games/duke/src/namelist_d.h index f7be8df43..842c6c2f1 100644 --- a/source/games/duke/src/namelist_d.h +++ b/source/games/duke/src/namelist_d.h @@ -56,6 +56,7 @@ x(TECHLIGHTBUST4, 123) x(WALLLIGHT4, 124) x(WALLLIGHTBUST4, 125) x(ACCESSSWITCH, 130) +x(ACCESSSWITCHON, 131) x(SLOTDOOR, 132) x(SLOTDOORON, 133) x(LIGHTSWITCH, 134) @@ -94,6 +95,7 @@ x(TECHSWITCHON, 167) x(DIPSWITCH3, 168) x(DIPSWITCH3ON, 169) x(ACCESSSWITCH2, 170) +x(ACCESSSWITCH2ON, 171) x(REFLECTWATERTILE, 180) x(FLOORSLIME, 200) x(FLOORSLIME1, 201) diff --git a/source/games/duke/src/namelist_r.h b/source/games/duke/src/namelist_r.h index 925e0f6fe..dd70d326a 100644 --- a/source/games/duke/src/namelist_r.h +++ b/source/games/duke/src/namelist_r.h @@ -63,6 +63,7 @@ x(WALLLIGHTBUST4, 77) x(MOTOAMMO, 78) x(BUTTON1, 80) x(ACCESSSWITCH, 82) +x(ACCESSSWITCHON, 83) x(SLOTDOOR, 84) x(SLOTDOORON, 85) x(LIGHTSWITCH, 86) @@ -103,6 +104,7 @@ x(TECHSWITCHON, 126) x(DIPSWITCH3, 127) x(DIPSWITCH3ON, 128) x(ACCESSSWITCH2, 129) +x(ACCESSSWITCH2ON, 130) x(REFLECTWATERTILE, 131) x(FLOORSLIME, 132) x(FLOORSLIME1, 133) @@ -415,7 +417,7 @@ x(PLUG, 1272) x(OOZFILTER, 1273) x(FLOORPLASMA, 1276) x(HANDPRINTSWITCH, 1278) -x(HANDPRINTSWITCHON, 1278) +x(HANDPRINTSWITCHON, 1279) x(BOTTLE10, 1280) x(BOTTLE11, 1281) x(BOTTLE12, 1282) @@ -708,7 +710,8 @@ y(RRTILE2175, 2175) y(RRTILE2176, 2176) y(RRTILE2178, 2178) y(RRTILE2186, 2186) -y(RRTILE2214, 2214) +y(CONTESTSWITCH, 2214) +y(CONTESTSWITCHON, 2215) x(WAITTOBESEATED, 2215) x(OJ, 2217) x(HURTRAIL, 2221) @@ -786,9 +789,11 @@ y(RRTILE2654, 2654) y(RRTILE2656, 2656) y(RRTILE2676, 2676) y(RRTILE2689, 2689) -y(RRTILE2697, 2697) +y(ALERTSWITCH, 2697) +y(ALERTSWITCHON, 2698) y(MUDDYPATH, 2702) -y(RRTILE2707, 2707) +y(HANDLESWITCH, 2707) +y(HANDLESWITCHON, 2708) y(RRTILE2732, 2732) x(HATRACK, 2717) x(DESKLAMP, 2719) @@ -1392,7 +1397,9 @@ y(RRTILE8622, 8622) y(RRTILE8623, 8623) y(RRTILE8640, 8640) y(RRTILE8651, 8651) -y(RRTILE8660, 8660) +y(BELLSWITCH, 8660) +y(BELLSWITCHON, 8661) +y(BELLSWITCHOFF, 8662) x(ENDGAME, 8677) x(ENDGAME2, 8678) y(SNAKERIVERSIGN, 8679) diff --git a/source/games/duke/src/names.h b/source/games/duke/src/names.h index 3cb4a97e5..03c16658a 100644 --- a/source/games/duke/src/names.h +++ b/source/games/duke/src/names.h @@ -18,8 +18,6 @@ extern int TILE_WATERBUBBLE; extern int TILE_SMALLSMOKE; extern int TILE_BLOODPOOL; extern int TILE_CLOUDYSKIES; -extern int TILE_ACCESSSWITCH; -extern int TILE_ACCESSSWITCH2; extern int TILE_HEN; extern int TILE_MIRRORBROKE; extern int TILE_LOADSCREEN; diff --git a/source/games/duke/src/player_r.cpp b/source/games/duke/src/player_r.cpp index 442beb436..81c56dfba 100644 --- a/source/games/duke/src/player_r.cpp +++ b/source/games/duke/src/player_r.cpp @@ -341,7 +341,7 @@ static void shootweapon(DDukeActor* actor, int p, DVector3 pos, DAngle ang, int hit.actor()->spr.picnum == RTILE_DIPSWITCH2ON || hit.actor()->spr.picnum == RTILE_DIPSWITCH3 || hit.actor()->spr.picnum == RTILE_DIPSWITCH3ON || - (isRRRA() && hit.actor()->spr.picnum == RTILE_RRTILE8660) || + (isRRRA() && hit.actor()->spr.picnum == RTILE_BELLSWITCH) || hit.actor()->spr.picnum == RTILE_HANDSWITCH || hit.actor()->spr.picnum == RTILE_HANDSWITCHON)) { @@ -364,7 +364,7 @@ static void shootweapon(DDukeActor* actor, int p, DVector3 pos, DAngle ang, int hit.hitWall->wallpicnum == RTILE_DIPSWITCH2ON || hit.hitWall->wallpicnum == RTILE_DIPSWITCH3 || hit.hitWall->wallpicnum == RTILE_DIPSWITCH3ON || - (isRRRA() && hit.hitWall->wallpicnum == RTILE_RRTILE8660) || + (isRRRA() && hit.hitWall->wallpicnum == RTILE_BELLSWITCH) || hit.hitWall->wallpicnum == RTILE_HANDSWITCH || hit.hitWall->wallpicnum == RTILE_HANDSWITCHON)) { diff --git a/source/games/duke/src/sectors_r.cpp b/source/games/duke/src/sectors_r.cpp index db15da38b..bd894833e 100644 --- a/source/games/duke/src/sectors_r.cpp +++ b/source/games/duke/src/sectors_r.cpp @@ -225,7 +225,7 @@ bool checkhitswitch_r(int snum, walltype* wwal, DDukeActor* act) case RTILE_MULTISWITCH2_3: case RTILE_MULTISWITCH2_4: case RTILE_IRONWHEELSWITCH: - case RTILE_RRTILE8660: + case RTILE_BELLSWITCH: if (!isRRRA()) break; [[fallthrough]]; case RTILE_DIPSWITCH2: @@ -260,11 +260,11 @@ bool checkhitswitch_r(int snum, walltype* wwal, DDukeActor* act) case RTILE_POWERSWITCH2ON: case RTILE_CHICKENPLANTBUTTON: case RTILE_CHICKENPLANTBUTTONON: - case RTILE_RRTILE2214: - case RTILE_RRTILE2697: - case RTILE_RRTILE2697 + 1: - case RTILE_RRTILE2707: - case RTILE_RRTILE2707 + 1: + case RTILE_CONTESTSWITCH: + case RTILE_ALERTSWITCH: + case RTILE_ALERTSWITCHON: + case RTILE_HANDLESWITCH: + case RTILE_HANDLESWITCHON: goOn1: if (check_activator_motion(lotag)) return 0; break; @@ -310,10 +310,10 @@ bool checkhitswitch_r(int snum, walltype* wwal, DDukeActor* act) other->spr.picnum = RTILE_MULTISWITCH2; break; - case RTILE_RRTILE2214: + case RTILE_CONTESTSWITCH: other->spr.picnum++; break; - case RTILE_RRTILE8660: + case RTILE_BELLSWITCH: if (!isRRRA()) break; [[fallthrough]]; case RTILE_ACCESSSWITCH: @@ -332,8 +332,8 @@ bool checkhitswitch_r(int snum, walltype* wwal, DDukeActor* act) case RTILE_DIPSWITCH2: case RTILE_DIPSWITCH3: case RTILE_CHICKENPLANTBUTTON: - case RTILE_RRTILE2697: - case RTILE_RRTILE2707: + case RTILE_ALERTSWITCH: + case RTILE_HANDLESWITCH: if (other->spr.picnum == RTILE_DIPSWITCH3) if (other->spr.hitag == 999) { @@ -347,7 +347,7 @@ bool checkhitswitch_r(int snum, walltype* wwal, DDukeActor* act) } if (other->spr.picnum == RTILE_CHICKENPLANTBUTTON) ud.chickenplant = 0; - if (other->spr.picnum == RTILE_RRTILE8660) + if (other->spr.picnum == RTILE_BELLSWITCH) { BellTime = 132; BellSprite = other; @@ -368,8 +368,8 @@ bool checkhitswitch_r(int snum, walltype* wwal, DDukeActor* act) case RTILE_DIPSWITCH2ON: case RTILE_DIPSWITCH3ON: case RTILE_CHICKENPLANTBUTTONON: - case RTILE_RRTILE2697 + 1: - case RTILE_RRTILE2707 + 1: + case RTILE_ALERTSWITCHON: + case RTILE_HANDLESWITCHON: if (other->spr.picnum == RTILE_CHICKENPLANTBUTTONON) ud.chickenplant = 1; if (other->spr.hitag != 999) @@ -414,7 +414,7 @@ bool checkhitswitch_r(int snum, walltype* wwal, DDukeActor* act) if (wal.wallpicnum > (RTILE_MULTISWITCH2_4)) wal.wallpicnum = RTILE_MULTISWITCH2; break; - case RTILE_RRTILE8660: + case RTILE_BELLSWITCH: if (!isRRRA()) break; [[fallthrough]]; case RTILE_ACCESSSWITCH: @@ -431,8 +431,8 @@ bool checkhitswitch_r(int snum, walltype* wwal, DDukeActor* act) case RTILE_HANDSWITCH: case RTILE_DIPSWITCH2: case RTILE_DIPSWITCH3: - case RTILE_RRTILE2697: - case RTILE_RRTILE2707: + case RTILE_ALERTSWITCH: + case RTILE_HANDLESWITCH: wal.wallpicnum++; break; case RTILE_HANDSWITCHON: @@ -447,8 +447,8 @@ bool checkhitswitch_r(int snum, walltype* wwal, DDukeActor* act) case RTILE_SPACEDOORSWITCHON: case RTILE_DIPSWITCH2ON: case RTILE_DIPSWITCH3ON: - case RTILE_RRTILE2697 + 1: - case RTILE_RRTILE2707 + 1: + case RTILE_ALERTSWITCHON: + case RTILE_HANDLESWITCHON: wal.wallpicnum--; break; } @@ -496,7 +496,7 @@ bool checkhitswitch_r(int snum, walltype* wwal, DDukeActor* act) case RTILE_MULTISWITCH2_3: case RTILE_MULTISWITCH2_4: case RTILE_IRONWHEELSWITCH: - case RTILE_RRTILE8660: + case RTILE_BELLSWITCH: if (!isRRRA()) break; [[fallthrough]]; case RTILE_DIPSWITCH2: @@ -531,14 +531,14 @@ bool checkhitswitch_r(int snum, walltype* wwal, DDukeActor* act) case RTILE_HANDSWITCHON: case RTILE_PULLSWITCH: case RTILE_PULLSWITCHON: - case RTILE_RRTILE2697: - case RTILE_RRTILE2697 + 1: - case RTILE_RRTILE2707: - case RTILE_RRTILE2707 + 1: + case RTILE_ALERTSWITCH: + case RTILE_ALERTSWITCHON: + case RTILE_HANDLESWITCH: + case RTILE_HANDLESWITCHON: goOn2: if (isRRRA()) { - if (picnum == RTILE_RRTILE8660 && act) + if (picnum == RTILE_BELLSWITCH && act) { BellTime = 132; BellSprite = act; diff --git a/source/games/duke/src/spawn.cpp b/source/games/duke/src/spawn.cpp index 25985dc81..f32401815 100644 --- a/source/games/duke/src/spawn.cpp +++ b/source/games/duke/src/spawn.cpp @@ -194,9 +194,15 @@ bool initspriteforspawn(DDukeActor* act) act->temp_angle = nullAngle; act->temp_pos = DVector3(0, 0, 0); - if (wallswitchcheck(act) && (act->spr.cstat & CSTAT_SPRITE_ALIGNMENT_WALL)) + auto ext = GetExtInfo(act->spr.spritetexture()); + + if (act->spr.cstat & CSTAT_SPRITE_ALIGNMENT_WALL && (wallswitchcheck(act) || ext.switchindex > 0)) { - if (act->spr.picnum != TILE_ACCESSSWITCH && act->spr.picnum != TILE_ACCESSSWITCH2 && act->spr.pal) + // this is a bit more complicated than needed thanks to some bugs in the original code that must be retained for the multiplayer filter. + // Not all switches were properly included here. + bool shouldfilter = wallswitchcheck(act) || !(switches[ext.switchindex].flags & SwitchDef::nofilter); + + if (shouldfilter && act->spr.pal > 0) { if ((ud.multimode < 2) || (ud.multimode > 1 && ud.coop == 1)) { @@ -205,11 +211,11 @@ bool initspriteforspawn(DDukeActor* act) act->spr.lotag = act->spr.hitag = 0; return false; } + act->spr.pal = 0; } act->spr.cstat |= CSTAT_SPRITE_BLOCK_ALL; - if (act->spr.pal && act->spr.picnum != TILE_ACCESSSWITCH && act->spr.picnum != TILE_ACCESSSWITCH2) - act->spr.pal = 0; return false; + } if (!actorflag(act, SFLAG_NOFALLER) && (act->spr.cstat & CSTAT_SPRITE_ALIGNMENT_MASK)) diff --git a/wadsrc/static/filter/dukelike/rmapinfo.texflags b/wadsrc/static/filter/dukelike/rmapinfo.texflags index 84c00fdec..d333502ad 100644 --- a/wadsrc/static/filter/dukelike/rmapinfo.texflags +++ b/wadsrc/static/filter/dukelike/rmapinfo.texflags @@ -4,47 +4,10 @@ include "constants.mi" textureflags { + // switches that are not really switches. TFLAG_WALLSWITCH = HANDPRINTSWITCH, - HANDPRINTSWITCHON, - ALIENSWITCH, - ALIENSWITCHON, - MULTISWITCH, - MULTISWITCH_2, - MULTISWITCH_3, - MULTISWITCH_4, - ACCESSSWITCH, - ACCESSSWITCH2, - PULLSWITCH, - PULLSWITCHON, - HANDSWITCH, - HANDSWITCHON, - SLOTDOOR, - SLOTDOORON, - LIGHTSWITCH, - LIGHTSWITCHON, - SPACELIGHTSWITCH, - SPACELIGHTSWITCHON, - SPACEDOORSWITCH, - SPACEDOORSWITCHON, - FRANKENSTINESWITCH, - FRANKENSTINESWITCHON, - LIGHTSWITCH2, - LIGHTSWITCH2ON, - POWERSWITCH1, - POWERSWITCH1ON, - LOCKSWITCH1, - LOCKSWITCH1ON, - POWERSWITCH2, - POWERSWITCH2ON, - DIPSWITCH, - DIPSWITCHON, - DIPSWITCH2, - DIPSWITCH2ON, - TECHSWITCH, - TECHSWITCHON, - DIPSWITCH3, - DIPSWITCH3ON + HANDPRINTSWITCHON // Raze does not use this because the game never handled it well. TFLAG_ADULT = @@ -138,4 +101,28 @@ surfacetypes TSURF_PLASMA = FLOORPLASMA TSURF_SCROLLSKY = CLOUDYSKIES TSURF_METALDUCTS = PANNEL1, PANNEL2 -} \ No newline at end of file +} + +switches +{ + comboswitch = "DIPSWITCH", "DIPSWITCHON", shootable + comboswitch = "TECHSWITCH", "TECHSWITCHON" + comboswitch = "ALIENSWITCH", "ALIENSWITCHON" + accessswitch = "ACCESSSWITCH", "ACCESSSWITCHON", nofilter, oneway + accessswitch = "ACCESSSWITCH2", "ACCESSSWITCH2", nofilter, oneway + switch = "DIPSWITCH2", "DIPSWITCH2ON", shootable + switch = "DIPSWITCH3", "DIPSWITCH3ON", shootable + multiswitch = "MULTISWITCH", "MULTISWITCH_2", "MULTISWITCH_3", "MULTISWITCH_4" + switch = "PULLSWITCH", "PULLSWITCHON" + switch = "HANDSWITCH", "HANDSWITCHON", shootable + switch = "SLOTDOOR", "SLOTDOORON" + switch = "LIGHTSWITCH", "LIGHTSWITCHON" + switch = "SPACELIGHTSWITCH", "SPACELIGHTSWITCHON" + switch = "SPACEDOORSWITCH", "SPACEDOORSWITCHON" + switch = "FRANKENSTINESWITCH", "FRANKENSTINESWITCHON" + switch = "LIGHTSWITCH2", "LIGHTSWITCH2ON" + switch = "POWERSWITCH1", "POWERSWITCH1ON" + switch = "LOCKSWITCH1", "LOCKSWITCH1ON" + switch = "POWERSWITCH2", "POWERSWITCH2ON" +} + diff --git a/wadsrc/static/filter/redneck.ridesagain/rmapinfo.texflags b/wadsrc/static/filter/redneck.ridesagain/rmapinfo.texflags index f08c395c6..f68a0622f 100644 --- a/wadsrc/static/filter/redneck.ridesagain/rmapinfo.texflags +++ b/wadsrc/static/filter/redneck.ridesagain/rmapinfo.texflags @@ -2,15 +2,6 @@ include "constants.mi" textureflags { - - TFLAG_WALLSWITCH = - MULTISWITCH2, - MULTISWITCH2_2, - MULTISWITCH2_3, - MULTISWITCH2_4, - IRONWHEELSWITCH, - IRONWHEELSWITCHON - TFLAG_BLOCKDOOR = RRTILE1996, RRTILE2382, @@ -42,3 +33,10 @@ surfacetypes TSURF_OIL = OIL1, OIL2 TSURF_DEEPMUD = DEEPMUD } + +switches +{ + multiswitch = "MULTISWITCH2", "MULTISWITCH2_2", "MULTISWITCH2_3", "MULTISWITCH2_4" + switch = "IRONWHEELSWITCH", "IRONWHEELSWITCHON", oneway + switch = "BELLSWITCH", "BELLSWITCHON", oneway, shootable, nofilter +} diff --git a/wadsrc/static/filter/redneck/rmapinfo.texflags b/wadsrc/static/filter/redneck/rmapinfo.texflags index 5e9ad353f..f06433236 100644 --- a/wadsrc/static/filter/redneck/rmapinfo.texflags +++ b/wadsrc/static/filter/redneck/rmapinfo.texflags @@ -5,47 +5,7 @@ textureflags TFLAG_WALLSWITCH = HANDPRINTSWITCH, - HANDPRINTSWITCHON, - ALIENSWITCH, - ALIENSWITCHON, - MULTISWITCH, - MULTISWITCH_2, - MULTISWITCH_3, - MULTISWITCH_4, - ACCESSSWITCH, - ACCESSSWITCH2, - PULLSWITCH, - PULLSWITCHON, - HANDSWITCH, - HANDSWITCHON, - SLOTDOOR, - SLOTDOORON, - LIGHTSWITCH, - LIGHTSWITCHON, - SPACELIGHTSWITCH, - SPACELIGHTSWITCHON, - SPACEDOORSWITCH, - SPACEDOORSWITCHON, - FRANKENSTINESWITCH, - FRANKENSTINESWITCHON, - LIGHTSWITCH2, - LIGHTSWITCH2ON, - POWERSWITCH1, - POWERSWITCH1ON, - LOCKSWITCH1, - LOCKSWITCH1ON, - POWERSWITCH2, - POWERSWITCH2ON, - DIPSWITCH, - DIPSWITCHON, - DIPSWITCH2, - DIPSWITCH2ON, - TECHSWITCH, - TECHSWITCHON, - DIPSWITCH3, - DIPSWITCH3ON, - CHICKENPLANTBUTTON, - CHICKENPLANTBUTTONON + HANDPRINTSWITCHON TFLAG_DOORWALL = DOORTILE1, @@ -174,3 +134,30 @@ surfacetypes TSURF_SPECIALWATER = WATERTILE2 } + +switches +{ + comboswitch = "DIPSWITCH", "DIPSWITCHON", shootable + comboswitch = "TECHSWITCH", "TECHSWITCHON" + comboswitch = "ALIENSWITCH", "ALIENSWITCHON" + accessswitch = "ACCESSSWITCH", "ACCESSSWITCHON", nofilter, oneway + accessswitch = "ACCESSSWITCH2", "ACCESSSWITCH2ON", nofilter, oneway + switch = "DIPSWITCH2", "DIPSWITCH2ON", shootable + switch = "DIPSWITCH3", "DIPSWITCH3ON", shootable, resettable + multiswitch = "MULTISWITCH", "MULTISWITCH_2", "MULTISWITCH_3", "MULTISWITCH_4" + switch = "PULLSWITCH", "PULLSWITCHON" + switch = "HANDSWITCH", "HANDSWITCHON", shootable + switch = "SLOTDOOR", "SLOTDOORON" + switch = "LIGHTSWITCH", "LIGHTSWITCHON" + switch = "SPACELIGHTSWITCH", "SPACELIGHTSWITCHON" + switch = "SPACEDOORSWITCH", "SPACEDOORSWITCHON" + switch = "FRANKENSTINESWITCH", "FRANKENSTINESWITCHON" + switch = "LIGHTSWITCH2", "LIGHTSWITCH2ON" + switch = "POWERSWITCH1", "POWERSWITCH1ON" + switch = "LOCKSWITCH1", "LOCKSWITCH1ON" + switch = "POWERSWITCH2", "POWERSWITCH2ON" + switch = "CHICKENPLANTBUTTON", "CHICKENPLANTBUTTONON" // this one uses its own class. + switch = "CONTESTSWITCH", "CONTESTSWITCHON", oneway, nofilter + switch = "ALERTSWITCH", "ALERTSWITCHON", nofilter + switch = "HANDLESWITCH", "HANDLESWITCHON", nofilter +} diff --git a/wadsrc/static/filter/redneck/sndinfo.txt b/wadsrc/static/filter/redneck/sndinfo.txt index e774eefb5..71ddf9f98 100644 --- a/wadsrc/static/filter/redneck/sndinfo.txt +++ b/wadsrc/static/filter/redneck/sndinfo.txt @@ -81,7 +81,7 @@ $conreserve LN_BNCH 72 $conreserve GBELEV02 73 $conreserve FROG1 74 $conreserve TRUCK_LP 75 -$conreserve SWITCH1 76 +$conreserve SWITCH_ON 76 $conreserve E1L3 77 $conreserve LN_HOTDM 78 $conreserve FLUSH 79 diff --git a/wadsrc/static/zscript/games/duke/dukegame.zs b/wadsrc/static/zscript/games/duke/dukegame.zs index 48131d809..351016e00 100644 --- a/wadsrc/static/zscript/games/duke/dukegame.zs +++ b/wadsrc/static/zscript/games/duke/dukegame.zs @@ -474,9 +474,9 @@ struct DukeUserDefs native native readonly int coop; native readonly int respawn_monsters, respawn_items, respawn_inventory, recstat, monsters_off, brightness; native readonly int ffire, multimode; - native readonly int player_skill, marker, chickenplant; + native readonly int player_skill, marker; - native int earthquaketime; + native int earthquaketime, chickenplant; native uint8 ufospawnsminion; native int16 bomb_tag; native DukeActor cameraactor;