diff --git a/src/p_acs.cpp b/src/p_acs.cpp index 467bc4e3..639f7031 100644 --- a/src/p_acs.cpp +++ b/src/p_acs.cpp @@ -2771,6 +2771,7 @@ void DLevelScript::DoSetActorProperty (AActor *actor, int property, int value) case APROP_Score: actor->Score = value; + break; case APROP_NameTag: actor->SetTag(FBehavior::StaticLookupString(value)); @@ -3675,6 +3676,9 @@ int DLevelScript::RunScript () FRemapTable *translation = 0; int resultValue = 1; + // Hexen truncates all special arguments to bytes. + const int specialargmask = (level.flags2 & LEVEL2_HEXENHACK) ? 255 : ~0; + switch (state) { case SCRIPT_Delayed: @@ -3844,78 +3848,100 @@ int DLevelScript::RunScript () case PCD_LSPEC1: P_ExecuteSpecial(NEXTBYTE, activationline, activator, backSide, - STACK(1), 0, 0, 0, 0); + STACK(1) & specialargmask, 0, 0, 0, 0); sp -= 1; break; case PCD_LSPEC2: P_ExecuteSpecial(NEXTBYTE, activationline, activator, backSide, - STACK(2), STACK(1), 0, 0, 0); + STACK(2) & specialargmask, + STACK(1) & specialargmask, 0, 0, 0); sp -= 2; break; case PCD_LSPEC3: P_ExecuteSpecial(NEXTBYTE, activationline, activator, backSide, - STACK(3), STACK(2), STACK(1), 0, 0); + STACK(3) & specialargmask, + STACK(2) & specialargmask, + STACK(1) & specialargmask, 0, 0); sp -= 3; break; case PCD_LSPEC4: P_ExecuteSpecial(NEXTBYTE, activationline, activator, backSide, - STACK(4), STACK(3), STACK(2), - STACK(1), 0); + STACK(4) & specialargmask, + STACK(3) & specialargmask, + STACK(2) & specialargmask, + STACK(1) & specialargmask, 0); sp -= 4; break; case PCD_LSPEC5: P_ExecuteSpecial(NEXTBYTE, activationline, activator, backSide, - STACK(5), STACK(4), STACK(3), - STACK(2), STACK(1)); + STACK(5) & specialargmask, + STACK(4) & specialargmask, + STACK(3) & specialargmask, + STACK(2) & specialargmask, + STACK(1) & specialargmask); sp -= 5; break; case PCD_LSPEC5RESULT: STACK(5) = P_ExecuteSpecial(NEXTBYTE, activationline, activator, backSide, - STACK(5), STACK(4), STACK(3), - STACK(2), STACK(1)); + STACK(5) & specialargmask, + STACK(4) & specialargmask, + STACK(3) & specialargmask, + STACK(2) & specialargmask, + STACK(1) & specialargmask); sp -= 4; break; case PCD_LSPEC1DIRECT: temp = NEXTBYTE; P_ExecuteSpecial(temp, activationline, activator, backSide, - uallong(pc[0]), 0, 0, 0, 0); + uallong(pc[0]) & specialargmask ,0, 0, 0, 0); pc += 1; break; case PCD_LSPEC2DIRECT: temp = NEXTBYTE; P_ExecuteSpecial(temp, activationline, activator, backSide, - uallong(pc[0]), uallong(pc[1]), 0, 0, 0); + uallong(pc[0]) & specialargmask, + uallong(pc[1]) & specialargmask, 0, 0, 0); pc += 2; break; case PCD_LSPEC3DIRECT: temp = NEXTBYTE; P_ExecuteSpecial(temp, activationline, activator, backSide, - uallong(pc[0]), uallong(pc[1]), uallong(pc[2]), 0, 0); + uallong(pc[0]) & specialargmask, + uallong(pc[1]) & specialargmask, + uallong(pc[2]) & specialargmask, 0, 0); pc += 3; break; case PCD_LSPEC4DIRECT: temp = NEXTBYTE; P_ExecuteSpecial(temp, activationline, activator, backSide, - uallong(pc[0]), uallong(pc[1]), uallong(pc[2]), uallong(pc[3]), 0); + uallong(pc[0]) & specialargmask, + uallong(pc[1]) & specialargmask, + uallong(pc[2]) & specialargmask, + uallong(pc[3]) & specialargmask, 0); pc += 4; break; case PCD_LSPEC5DIRECT: temp = NEXTBYTE; P_ExecuteSpecial(temp, activationline, activator, backSide, - uallong(pc[0]), uallong(pc[1]), uallong(pc[2]), uallong(pc[3]), uallong(pc[4])); + uallong(pc[0]) & specialargmask, + uallong(pc[1]) & specialargmask, + uallong(pc[2]) & specialargmask, + uallong(pc[3]) & specialargmask, + uallong(pc[4]) & specialargmask); pc += 5; break; + // Parameters for PCD_LSPEC?DIRECTB are by definition bytes so never need and-ing. case PCD_LSPEC1DIRECTB: P_ExecuteSpecial(((BYTE *)pc)[0], activationline, activator, backSide, ((BYTE *)pc)[1], 0, 0, 0, 0); diff --git a/src/p_glnodes.cpp b/src/p_glnodes.cpp index 3ca7fc6d..7203b775 100644 --- a/src/p_glnodes.cpp +++ b/src/p_glnodes.cpp @@ -208,7 +208,7 @@ bool P_CheckForGLNodes() int missing = CheckForMissingSegs(); if (missing > 0) { - Printf("%d missing segs counted\nThe BSP needs to be rebuilt", missing); + Printf("%d missing segs counted\nThe BSP needs to be rebuilt.\n", missing); } return missing == 0; } @@ -718,7 +718,7 @@ static bool DoLoadGLNodes(FileReader * f, wadlump_t * lumps) int missing = CheckForMissingSegs(); if (missing > 0) { - Printf("%d missing segs counted in GL nodes.\nThe BSP has to be rebuilt", missing); + Printf("%d missing segs counted in GL nodes.\nThe BSP has to be rebuilt.\n", missing); } return missing == 0; } diff --git a/src/p_spec.cpp b/src/p_spec.cpp index 6624b60b..5522a6fa 100644 --- a/src/p_spec.cpp +++ b/src/p_spec.cpp @@ -236,7 +236,7 @@ bool P_ActivateLine (line_t *line, AActor *mo, int side, int activationType) { return false; } - bool remote = (line->special != 7 && line->special != 8 && (line->special < 11 || line->special > 14)); + bool remote = (line->special != 7 && line->special != 8 && (line->special < 11 || line->special > 14)); if (line->locknumber > 0 && !P_CheckKeys (mo, line->locknumber, remote)) return false; lineActivation = line->activation; repeat = line->flags & ML_REPEAT_SPECIAL; @@ -603,7 +603,7 @@ void P_GiveSecret(AActor *actor, bool printmessage, bool playsound) if (actor->CheckLocalView (consoleplayer)) { if (printmessage) C_MidPrint (SmallFont, secretmessage); - if (playsound) S_Sound (CHAN_AUTO, "misc/secret", 1, ATTN_NORM); + if (playsound) S_Sound (CHAN_AUTO | CHAN_UI, "misc/secret", 1, ATTN_NORM); } } level.found_secrets++; diff --git a/src/r_defs.h b/src/r_defs.h index 3a3559fa..659e8166 100644 --- a/src/r_defs.h +++ b/src/r_defs.h @@ -985,13 +985,13 @@ struct line_t 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. - slopetype_t slopetype; // To aid move clipping. - sector_t *frontsector, *backsector; - int validcount; // if == validcount, already checked - int locknumber; // [Dusk] lock number for special -}; - -// phares 3/14/98 + slopetype_t slopetype; // To aid move clipping. + sector_t *frontsector, *backsector; + int validcount; // if == validcount, already checked + int locknumber; // [Dusk] lock number for special +}; + +// phares 3/14/98 // // Sector list node showing all sectors an object appears in. // diff --git a/src/r_main.h b/src/r_main.h index 776d1b16..0126d390 100644 --- a/src/r_main.h +++ b/src/r_main.h @@ -74,7 +74,7 @@ extern bool r_dontmaplines; // Convert a light level into an unbounded colormap index (shade). Result is // fixed point. Why the +12? I wish I knew, but experimentation indicates it // is necessary in order to best reproduce Doom's original lighting. -#define LIGHT2SHADE(l) ((NUMCOLORMAPS*2*FRACUNIT)-(((l)+12)*FRACUNIT*NUMCOLORMAPS/128)) +#define LIGHT2SHADE(l) ((NUMCOLORMAPS*2*FRACUNIT)-(((l)+12)*(FRACUNIT*NUMCOLORMAPS/128))) // MAXLIGHTSCALE from original DOOM, divided by 2. #define MAXLIGHTVIS (24*FRACUNIT) diff --git a/src/svnrevision.h b/src/svnrevision.h index 71592e60..a36f1d8b 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 "3334" -#define ZD_SVN_REVISION_NUMBER 3334 +#define ZD_SVN_REVISION_STRING "3340" +#define ZD_SVN_REVISION_NUMBER 3340