mirror of
https://github.com/DrBeef/Raze.git
synced 2024-11-25 13:31:55 +00:00
- implemented the switch parser and set up the external definitions.
This commit is contained in:
parent
03aedda7da
commit
0d9fe83cba
19 changed files with 268 additions and 139 deletions
|
@ -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();
|
||||
|
|
|
@ -95,6 +95,7 @@ struct FMapInfoParser
|
|||
void ParseBreakCeiling();
|
||||
void ParseTextureFlags();
|
||||
void ParseSurfaceTypes();
|
||||
void ParseSwitches();
|
||||
void ParseConstants();
|
||||
void ParseMapInfo (int lump, MapRecord &gamedefaults, MapRecord &defaultinfo);
|
||||
|
||||
|
|
|
@ -498,6 +498,7 @@ struct spritetypebase
|
|||
}
|
||||
|
||||
const FTextureID spritetexture() const;
|
||||
void setspritetexture(FTextureID tex);
|
||||
};
|
||||
|
||||
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -3,6 +3,7 @@
|
|||
#include <stdint.h>
|
||||
#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<SwitchDef> 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> 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)
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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))
|
||||
{
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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))
|
||||
|
|
|
@ -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
|
||||
}
|
||||
}
|
||||
|
||||
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"
|
||||
}
|
||||
|
||||
|
|
|
@ -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
|
||||
}
|
||||
|
|
|
@ -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
|
||||
}
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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;
|
||||
|
|
Loading…
Reference in a new issue