shithub: choc

Download patch

ref: 3d8f10ef325d2d03f1f9535d9f201eca3d56d37f
parent: 5aa95863f364142d404a989eec0d28844352811a
author: James Haley <[email protected]>
date: Wed Sep 22 00:49:57 EDT 2010

P_CrossSpecialLine is approximately 95% complete.

Subversion-branch: /branches/strife-branch
Subversion-revision: 2129

--- a/src/strife/doomdef.h
+++ b/src/strife/doomdef.h
@@ -201,8 +201,8 @@
 // villsa [STRIFE]
 // quest numbers
 typedef enum
-{               // Hex          Watcom Name   
-    tk_quest1,  // 0x00000001   questflags & 1
+{               // Hex          Watcom Name               player_t offset
+    tk_quest1,  // 0x00000001   questflags & 1            0x4D
     tk_quest2,  // 0x00000002   questflags & 2
     tk_quest3,  // 0x00000004   questflags & 4
     tk_quest4,  // 0x00000008   questflags & 8
@@ -210,7 +210,7 @@
     tk_quest6,  // 0x00000020   questflags & 20h
     tk_quest7,  // 0x00000040   questflags & 40h
     tk_quest8,  // 0x00000080   questflags & 80h
-    tk_quest9,  // 0x00000100   BYTE1(questflags) & 1
+    tk_quest9,  // 0x00000100   BYTE1(questflags) & 1     0x4E
     tk_quest10, // 0x00000200   BYTE1(questflags) & 2
     tk_quest11, // 0x00000400   BYTE1(questflags) & 4
     tk_quest12, // 0x00000800   BYTE1(questflags) & 8
@@ -218,7 +218,7 @@
     tk_quest14, // 0x00002000   BYTE1(questflags) & 20h
     tk_quest15, // 0x00004000   BYTE1(questflags) & 40h
     tk_quest16, // 0x00008000   BYTE1(questflags) & 80h
-    tk_quest17, // 0x00010000   BYTE2(questflags) & 1
+    tk_quest17, // 0x00010000   BYTE2(questflags) & 1     0x4F
     tk_quest18, // 0x00020000   BYTE2(questflags) & 2
     tk_quest19, // 0x00040000   BYTE2(questflags) & 4
     tk_quest20, // 0x00080000   BYTE2(questflags) & 8
@@ -226,7 +226,7 @@
     tk_quest22, // 0x00200000   BYTE2(questflags) & 20h
     tk_quest23, // 0x00400000   BYTE2(questflags) & 40h
     tk_quest24, // 0x00800000   BYTE2(questflags) & 80h
-    tk_quest25, // 0x01000000   BYTE3(questflags) & 1
+    tk_quest25, // 0x01000000   BYTE3(questflags) & 1     0x50
     tk_quest26, // 0x02000000   BYTE3(questflags) & 2
     tk_quest27, // 0x04000000   BYTE3(questflags) & 4
     tk_quest28, // 0x08000000   BYTE3(questflags) & 8
@@ -256,7 +256,7 @@
     QF_QUEST13 = (1 << tk_quest13),
     QF_QUEST14 = (1 << tk_quest14),
     QF_QUEST15 = (1 << tk_quest15),
-    QF_QUEST16 = (1 << tk_quest16),
+    QF_QUEST16 = (1 << tk_quest16), // Destroyed the Gate Mechanism
     QF_QUEST17 = (1 << tk_quest17),
     QF_QUEST18 = (1 << tk_quest18), // Obtained Oracle Pass
     QF_QUEST19 = (1 << tk_quest19),
@@ -268,7 +268,7 @@
     QF_QUEST25 = (1 << tk_quest25), // Destroyed the Converter
     QF_QUEST26 = (1 << tk_quest26), // Killed Loremaster
     QF_QUEST27 = (1 << tk_quest27),
-    QF_QUEST28 = (1 << tk_quest28),
+    QF_QUEST28 = (1 << tk_quest28), // ???? - checked by line type 228 STRIFE-TODO
     QF_QUEST29 = (1 << tk_quest29), // Destroyed the Mines Transmitter
     QF_QUEST30 = (1 << tk_quest30),
     QF_QUEST31 = (1 << tk_quest31),
--- a/src/strife/g_game.c
+++ b/src/strife/g_game.c
@@ -1458,6 +1458,19 @@
 */
 
 //
+// G_StartFinale
+//
+// haleyjd 09/21/10: [STRIFE] New function.
+// This replaced G_SecretExitLevel in Strife. I don't know that it's actually
+// used anywhere in the game, but it *is* usable in mods via linetype 124,
+// W1 Start Finale.
+//
+void G_StartFinale(void)
+{
+    gameaction = ga_victory;
+}
+
+//
 // G_DoCompleted
 //
 // haleyjd 08/23/10: [STRIFE]:
--- a/src/strife/g_game.h
+++ b/src/strife/g_game.h
@@ -69,6 +69,8 @@
 void G_ExitLevel (int dest);
 //void G_SecretExitLevel (void);
 
+void G_StartFinale(void); // [STRIFE]
+
 //void G_WorldDone (void);
 
 boolean G_RiftCheat(int riftSpotNum); // [STRIFE]
--- a/src/strife/p_spec.c
+++ b/src/strife/p_spec.c
@@ -57,6 +57,7 @@
 
 // [STRIFE]
 #include "hu_stuff.h"
+#include "p_dialog.h"
 
 
 //
@@ -581,6 +582,9 @@
 // or shooting special lines, or by timed thinkers.
 //
 
+// [STRIFE]
+static char crosslinestr[90];
+
 //
 // P_CrossSpecialLine - TRIGGER
 // Called every time a thing origin is about
@@ -593,29 +597,25 @@
   mobj_t*       thing )
 {
     line_t*     line;
+    side_t*     sidedef; // [STRIFE]
+    int         flag;    // [STRIFE]
     int         ok;
 
     line = &lines[linenum];
 
+    // haleyjd 09/21/10: corpses and missiles cannot activate any cross-over
+    // line types, *except* 182 (which is for the sake of missiles).
+    if((thing->flags & (MF_MISSILE|MF_CORPSE)) && line->special != 182)
+        return;
+
     //	Triggers that other things can activate
     if (!thing->player)
     {
         // Things that should NOT trigger specials...
-        switch(thing->type)
-        {
-            // villsa [STRIFE] unused
-            //case MT_ROCKET:
-            //case MT_PLASMA:
-            //case MT_BFG:
-            //case MT_TROOPSHOT:
-            //case MT_HEADSHOT:
-            //case MT_BRUISERSHOT:
-            //return;
-            //break;
-
-        default: break;
-        }
-
+        // villsa [STRIFE] unused
+        //   haleyjd: removed dead switch. Strife only excludes missiles and
+        //   corpses, which is handled above.
+ 
         ok = 0;
 
         // [STRIFE] Added several line types. Removed none.
@@ -627,7 +627,7 @@
         case 231:       // haleyjd: STRIFE-TODO: Identify type
         case 125:       // TELEPORT MONSTERONLY TRIGGER
         case 126:       // TELEPORT MONSTERONLY RETRIGGER
-        case 182:       // haleyjd: [STRIFE] Break glass - it's a cross type too!
+        case 182:       // haleyjd: [STRIFE] Break glass - it's a W1 type too!
         case 10:        // PLAT DOWN-WAIT-UP-STAY TRIGGER
         case 39:        // TELEPORT TRIGGER
         case 88:        // PLAT DOWN-WAIT-UP-STAY RETRIGGER
@@ -643,83 +643,99 @@
     // Note: could use some const's here.
     switch (line->special)
     {
-        //
-        // TRIGGERS.
-        // All from here to RETRIGGERS.
-        //
+    //
+    // TRIGGERS.
+    // All from here to RETRIGGERS.
+    //
+    case 230:
+        // haleyjd 09/21/10: [STRIFE] W1 Open Door if Quest
+        sidedef = &sides[line->sidenum[0]];
+        flag = (sidedef->rowoffset >> FRACBITS) - 1;
+
+        if(!(thing->player->questflags & (1 << flag)))
+            break;
+        // fall-through:
     case 2:
-        // Open Door
+        // Open Door - [STRIFE] Verified unmodified.
         EV_DoDoor(line,open);
         line->special = 0;
         break;
 
+    case 227:
+        // haleyjd 09/21/10: [STRIFE] W1 Close Door if Quest
+        sidedef = &sides[line->sidenum[0]];
+        flag = (sidedef->rowoffset >> FRACBITS) - 1;
+
+        if(!(thing->player->questflags & (1 << flag)))
+            break;
+        // fall-through:
     case 3:
-        // Close Door
+        // Close Door - [STRIFE] Verified unmodified.
         EV_DoDoor(line,close);
         line->special = 0;
         break;
 
     case 4:
-        // Raise Door
+        // Raise Door - [STRIFE] Verified unmodified.
         EV_DoDoor(line,normal);
         line->special = 0;
         break;
 
     case 5:
-        // Raise Floor
+        // Raise Floor - [STRIFE] Verified unmodified.
         EV_DoFloor(line,raiseFloor);
         line->special = 0;
         break;
 
     case 6:
-        // Fast Ceiling Crush & Raise
+        // Fast Ceiling Crush & Raise - [STRIFE] Verified unmodified.
         EV_DoCeiling(line,fastCrushAndRaise);
         line->special = 0;
         break;
 
     case 8:
-        // Build Stairs
+        // Build Stairs - [STRIFE] Verified unmodified.
         EV_BuildStairs(line,build8);
         line->special = 0;
         break;
 
     case 10:
-        // PlatDownWaitUp
+        // PlatDownWaitUp - [STRIFE] Verified unmodified.
         EV_DoPlat(line,downWaitUpStay,0);
         line->special = 0;
         break;
 
     case 12:
-        // Light Turn On - brightest near
+        // Light Turn On - brightest near - [STRIFE] Verified unmodified.
         EV_LightTurnOn(line,0);
         line->special = 0;
         break;
 
     case 13:
-        // Light Turn On 255
+        // Light Turn On 255 - [STRIFE] Verified unmodified.
         EV_LightTurnOn(line,255);
         line->special = 0;
         break;
 
     case 16:
-        // Close Door 30
+        // Close Door 30 - [STRIFE] Verified unmodified.
         EV_DoDoor(line,close30ThenOpen);
         line->special = 0;
         break;
 
     case 17:
-        // Start Light Strobing
+        // Start Light Strobing - [STRIFE] Verified unmodified.
         EV_StartLightStrobing(line);
         line->special = 0;
         break;
 
     case 19:
-        // Lower Floor
+        // Lower Floor - [STRIFE] Verified unmodified.
         EV_DoFloor(line,lowerFloor);
         line->special = 0;
         break;
 
-    case 22:
+    case 22: // STRIFE-TODO: Something is different about this type - uses plat type 4
         // Raise floor to nearest height and change texture
         EV_DoPlat(line,raiseToNearestAndChange,0);
         line->special = 0;
@@ -726,13 +742,13 @@
         break;
 
     case 25:
-        // Ceiling Crush and Raise
+        // Ceiling Crush and Raise - [STRIFE] Verified unmodified.
         EV_DoCeiling(line,crushAndRaise);
         line->special = 0;
         break;
 
     case 30:
-        // Raise floor to shortest texture height
+        // Raise floor to shortest texture height - [STRIFE] Verified unmodified.
         //  on either side of lines.
         EV_DoFloor(line,raiseToTexture);
         line->special = 0;
@@ -739,31 +755,40 @@
         break;
 
     case 35:
-        // Lights Very Dark
+        // Lights Very Dark - [STRIFE] Verified unmodified.
         EV_LightTurnOn(line,35);
         line->special = 0;
         break;
 
     case 36:
-        // Lower Floor (TURBO)
+        // Lower Floor (TURBO) - [STRIFE] Verified unmodified.
         EV_DoFloor(line,turboLower);
         line->special = 0;
         break;
 
     case 37:
-        // LowerAndChange
+        // LowerAndChange - [STRIFE] Verified unmodified.
         EV_DoFloor(line,lowerAndChange);
         line->special = 0;
         break;
 
-    case 38:
-        // Lower Floor To Lowest
+    case 193:
+        // haleyjd 09/21/10: [STRIFE] W1 Floor Lower to Lowest if Quest
+        sidedef = &sides[line->sidenum[0]];
+        flag = (sidedef->rowoffset >> FRACBITS) - 1; // note is fixed_t
+
+        // must have the questflag indicated in the line's y offset
+        if(!(thing->player->questflags & (1 << flag)))
+            break;
+        // fall-through:
+    case 38: 
+        // Lower Floor To Lowest - [STRIFE] Verified unmodified.
         EV_DoFloor( line, lowerFloorToLowest );
         line->special = 0;
         break;
 
     case 39:
-        // TELEPORT!
+        // TELEPORT! - [STRIFE] Verified unmodified.
         EV_Teleport( line, side, thing );
         line->special = 0;
         break;
@@ -776,36 +801,36 @@
         break;*/
 
     case 44:
-        // Ceiling Crush
+        // Ceiling Crush - [STRIFE] Verified unmodified.
         EV_DoCeiling( line, lowerAndCrush );
         line->special = 0;
         break;
 
     case 52:
-        // EXIT!
-        G_ExitLevel (0);
+        // EXIT! - haleyjd 09/21/10: [STRIFE] Exit to level tag/100
+        G_ExitLevel (line->tag / 100);
         break;
 
     case 53:
-        // Perpetual Platform Raise
+        // Perpetual Platform Raise - [STRIFE] Verified unmodified.
         EV_DoPlat(line,perpetualRaise,0);
         line->special = 0;
         break;
 
     case 54:
-        // Platform Stop
+        // Platform Stop - [STRIFE] Verified unmodified.
         EV_StopPlat(line);
         line->special = 0;
         break;
 
     case 56:
-        // Raise Floor Crush
+        // Raise Floor Crush - [STRIFE] Verified unmodified.
         EV_DoFloor(line,raiseFloorCrush);
         line->special = 0;
         break;
 
     case 57:
-        // Ceiling Crush Stop
+        // Ceiling Crush Stop - [STRIFE] Verified unmodified.
         EV_CeilingCrushStop(line);
         line->special = 0;
         break;
@@ -818,48 +843,53 @@
         break;
 
     case 59:
-        // Raise Floor 24 And Change
+        // Raise Floor 24 And Change - [STRIFE] Verified unmodified.
         EV_DoFloor(line,raiseFloor24AndChange);
         line->special = 0;
         break;
 
     case 104:
-        // Turn lights off in sector(tag)
+        // Turn lights off in sector(tag) - [STRIFE] Verified unmodified.
         EV_TurnTagLightsOff(line);
         line->special = 0;
         break;
 
     case 108:
-        // Blazing Door Raise (faster than TURBO!)
+        // Blazing Door Raise (faster than TURBO!) - [STRIFE] Verified unmodified.
         EV_DoDoor (line,blazeRaise);
         line->special = 0;
         break;
 
     case 109:
-        // Blazing Door Open (faster than TURBO!)
+        // Blazing Door Open (faster than TURBO!) - [STRIFE] Verified unmodified.
         EV_DoDoor (line,blazeOpen);
         line->special = 0;
         break;
 
     case 100:
-        // Build Stairs Turbo 16
+        // Build Stairs Turbo 16 - [STRIFE] Verified unmodified.
         EV_BuildStairs(line,turbo16);
         line->special = 0;
         break;
 
+    case 197:
+        // haleyjd 09/21/10: [STRIFE] Blazing Door Close if Has Sigil B
+        if(thing->player->sigiltype <= 0)
+            break;
+        // fall-through:
     case 110:
-        // Blazing Door Close (faster than TURBO!)
+        // Blazing Door Close (faster than TURBO!) - [STRIFE] Verified unmodified.
         EV_DoDoor (line,blazeClose);
         line->special = 0;
         break;
 
     case 119:
-        // Raise floor to nearest surr. floor
+        // Raise floor to nearest surr. floor - [STRIFE] Verified unmodified.
         EV_DoFloor(line,raiseFloorToNearest);
         line->special = 0;
         break;
 
-    case 121:
+    case 121: // STRIFE-TODO: This has been modified! - uses plat type 5
         // Blazing PlatDownWaitUpStay
         EV_DoPlat(line,blazeDWUS,0);
         line->special = 0;
@@ -866,14 +896,13 @@
         break;
 
     case 124:
-        // Secret EXIT
-        // [STRIFE] No secret exits;
-        // STRIFE-TODO: is this reused for something else?
-        //G_SecretExitLevel ();
+        // haleyjd 09/21/10: [STRIFE] W1 Start Finale
+        // Altered from G_SecretExitLevel.
+        G_StartFinale();
         break;
 
     case 125:
-        // TELEPORT MonsterONLY
+        // TELEPORT MonsterONLY - [STRIFE] Verified unmodified.
         if (!thing->player)
         {
             EV_Teleport( line, side, thing );
@@ -882,13 +911,13 @@
         break;
 
     case 130:
-        // Raise Floor Turbo
+        // Raise Floor Turbo - [STRIFE] Verified unmodified.
         EV_DoFloor(line,raiseFloorTurbo);
         line->special = 0;
         break;
 
     case 141:
-        // Silent Ceiling Crush & Raise
+        // Silent Ceiling Crush & Raise - [STRIFE] Verified unmodified.
         EV_DoCeiling(line,silentCrushAndRaise);
         line->special = 0;
         break;
@@ -899,8 +928,24 @@
         line->special = 0;
         break;
 
+    case 183:
+        // villsa [STRIFE] Split Raise Nearest
+        EV_DoDoor(line, splitRaiseNearest);
+        line->special = 0;
+        break;
+
+    case 178: // STRIFE-TODO: new Stairs type?
+        // EV_BuildStairs(line, 2);
+        line->special = 0;
+        break;
+
+    case 179: // STRIFE-TODO: new Ceiling type?
+        // EV_DoCeiling(line, 0);
+        line->special = 0;
+        break;
+
     case 182:
-        // haleyjd 09/21/10: [STRIFE]
+        // haleyjd 09/21/10: [STRIFE] Break Glass
         // 182 is a unique linetype in that it is both a G1 and a W1 linetype,
         // but only missiles may activate it as a W1 type.
         if(thing->flags & MF_MISSILE)
@@ -907,102 +952,242 @@
             P_ChangeSwitchTexture(line, 1); // why 1? it will be cleared anyway.
         break;
 
-    case 183:
-        // villsa [STRIFE] Split Raise Nearest
-        EV_DoDoor(line, splitRaiseNearest);
+    case 187:
+        // haleyjd 09/21/10: [STRIFE] W1 Clear Force Fields if Quest
+        sidedef = &sides[line->sidenum[0]];
+        flag = (sidedef->rowoffset >> FRACBITS) - 1; // note is fixed_t
+
+        // must have the questflag indicated in the line's y offset
+        if(!(thing->player->questflags & (1 << flag)))
+            break;
+
+        // Do it!
+        EV_ClearForceFields(line);
         line->special = 0;
         break;
 
+    case 188:
+        // haleyjd 09/21/10: [STRIFE] W1 Open Door if Quest 16 (Gate Mechanism 
+        // Destroyed)
+        if(!(thing->player->questflags & QF_QUEST16))
+            break;
+        EV_DoDoor(line, open);
+        line->special = 0;
+        break;
+
+    case 200:
+        // haleyjd 09/21/10: [STRIFE] W1 Open Door if Sigil Owned
+        if(!(thing->player->weaponowned[wp_sigil]))
+            break;
+        EV_DoDoor(line, open);
+        line->special = 0;
+        break;
+
+    case 201:
+        // haleyjd 09/21/10: [STRIFE] W1 Voiced Objective (First Side Only)
+        if(side == 1)
+            break;
+        // fall-through:
+    case 202:
+        // haleyjd 09/21/10: [STRIFE] W1 Voiced Objective (Tag = VOC/LOG #)
+        // must be consoleplayer
+        if(thing->player != &players[consoleplayer])
+            break;
+
+        // must have comm unit
+        if(!(thing->player->powers[pw_communicator]))
+            break;
+
+        // load voice
+        DEH_snprintf(crosslinestr, sizeof(crosslinestr), "voc%i", line->tag);
+        I_StartVoice(crosslinestr);
+
+        // load objective
+        DEH_snprintf(crosslinestr, sizeof(crosslinestr), "log%i", line->tag);
+        GiveObjective(crosslinestr, 0);
+
+        // Put up a message
+        thing->player->message = DEH_String("Incoming Message...");
+        line->special = 0;
+        break;
+
+    case 210:
+        // haleyjd 09/21/10: [STRIFE] W1 Voiced Objective if Flamethrower????
+        // I don't think this is actually used anywhere o_O
+        // must be player 1...
+        if(thing->player != &players[0])
+            break;
+
+        // must have comm unit
+        if(!(thing->player->powers[pw_communicator]))
+            break;
+
+        // must have... the flamethrower?!
+        if(!(thing->player->weaponowned[wp_flame]))
+            break;
+
+        // load voice
+        DEH_snprintf(crosslinestr, sizeof(crosslinestr), "voc%i", line->tag);
+        I_StartVoice(crosslinestr);
+
+        // load objective
+        DEH_snprintf(crosslinestr, sizeof(crosslinestr), "log%i", line->tag);
+        GiveObjective(crosslinestr, 0);
+
+        // Put up a message
+        thing->player->message = DEH_String("Incoming Message from BlackBird...");
+        line->special = 0;
+        break;
+
+    case 215:
+        // haleyjd 09/21/10: [STRIFE] W1 Voiced Objective if Quest (Tag/100, Tag%100)
+        // must be player 1...
+        if(thing->player != &players[0])
+            break;
+
+        // must have comm unit
+        if(!(thing->player->powers[pw_communicator]))
+            break;
+
+        if(line->tag != 0)
+        {
+            // test for questflag
+            if(!(thing->player->questflags & (1 << (line->tag % 100 - 1))))
+                break;
+        }
+
+        // start voice
+        DEH_snprintf(crosslinestr, sizeof(crosslinestr), "voc%i", line->tag/100);
+        I_StartVoice(crosslinestr);
+
+        // give objective
+        DEH_snprintf(crosslinestr, sizeof(crosslinestr), "log%i", line->tag/100);
+        GiveObjective(crosslinestr, 0);
+
+        // Put up a message
+        thing->player->message = DEH_String("Incoming Message from BlackBird...");
+        line->special = 0;
+        break;
+
+    case 204:
+        // haleyjd 09/21/10: [STRIFE] W1 Change Music (unused!)
+        if(thing->player != &players[0])
+            break;
+        S_ChangeMusic(line->tag, 1);
+        line->special = 0;
+        break;
+
+    case 228:
+        // haleyjd 09/21/10: [STRIFE] W1 Entity Voice?
+        if(!(thing->player->questflags & QF_QUEST24)) // Not killed Macil???
+            break; // STRIFE-TODO: verify...
+
+        if(!(thing->player->questflags & QF_QUEST28)) // ????? STRIFE-TODO
+            I_StartVoice(DEH_String("voc128"));
+        else
+            I_StartVoice(DEH_String("voc130"));
+        
+        line->special = 0;
+        break;
+
         //
         // RETRIGGERS.  All from here till end.
         //
     case 72:
-        // Ceiling Crush
+        // Ceiling Crush - [STRIFE] Verified unmodified.
         EV_DoCeiling( line, lowerAndCrush );
         break;
 
     case 73:
-        // Ceiling Crush and Raise
+        // Ceiling Crush and Raise - [STRIFE] Verified unmodified.
         EV_DoCeiling(line,crushAndRaise);
         break;
 
     case 74:
-        // Ceiling Crush Stop
+        // Ceiling Crush Stop - [STRIFE] Verified unmodified.
         EV_CeilingCrushStop(line);
         break;
 
     case 75:
-        // Close Door
+        // Close Door - [STRIFE] Verified unmodified.
         EV_DoDoor(line,close);
         break;
 
     case 76:
-        // Close Door 30
+        // Close Door 30 - [STRIFE] Verified unmodified.
         EV_DoDoor(line,close30ThenOpen);
         break;
 
     case 77:
-        // Fast Ceiling Crush & Raise
+        // Fast Ceiling Crush & Raise - [STRIFE] Verified unmodified.
         EV_DoCeiling(line,fastCrushAndRaise);
         break;
 
     case 79:
-        // Lights Very Dark
+        // Lights Very Dark - [STRIFE] Verified unmodified.
         EV_LightTurnOn(line,35);
         break;
 
     case 80:
-        // Light Turn On - brightest near
+        // Light Turn On - brightest near - [STRIFE] Verified unmodified.
         EV_LightTurnOn(line,0);
         break;
 
     case 81:
-        // Light Turn On 255
+        // Light Turn On 255 - [STRIFE] Verified unmodified.
         EV_LightTurnOn(line,255);
         break;
 
     case 82:
-        // Lower Floor To Lowest
+        // Lower Floor To Lowest - [STRIFE] Verified unmodified.
         EV_DoFloor( line, lowerFloorToLowest );
         break;
 
     case 83:
-        // Lower Floor
+        // Lower Floor - [STRIFE] Verified unmodified.
         EV_DoFloor(line,lowerFloor);
         break;
 
     case 84:
-        // LowerAndChange
+        // LowerAndChange - [STRIFE] Verified unmodified.
         EV_DoFloor(line,lowerAndChange);
         break;
 
     case 86:
-        // Open Door
+        // Open Door - [STRIFE] Verified unmodified.
         EV_DoDoor(line,open);
         break;
 
     case 87:
-        // Perpetual Platform Raise
+        // Perpetual Platform Raise - [STRIFE] Verified unmodified.
         EV_DoPlat(line,perpetualRaise,0);
         break;
 
     case 88:
-        // PlatDownWaitUp
+        // PlatDownWaitUp - [STRIFE] Verified unmodified.
         EV_DoPlat(line,downWaitUpStay,0);
         break;
 
     case 89:
-        // Platform Stop
+        // Platform Stop - [STRIFE] Verified unmodified.
         EV_StopPlat(line);
         break;
 
-    case 90:
-        // Raise Door
+    case 216:
+        // haleyjd 09/21/10: [STRIFE] WR Raise Door if Quest
+        sidedef = &sides[line->sidenum[0]];
+        flag = (sidedef->rowoffset >> FRACBITS) - 1; // note is fixed_t.
+
+        if(!(thing->player->questflags & (1 << flag)))
+            break;
+        // fall-through:
+    case 90: 
+        // Raise Door - [STRIFE] Verified unmodified.
         EV_DoDoor(line,normal);
         break;
 
     case 91:
-        // Raise Floor
+        // Raise Floor - [STRIFE] Verified unmodified.
         EV_DoFloor(line,raiseFloor);
         break;
 
@@ -1013,16 +1198,16 @@
         break;
 
     case 93:
-        // Raise Floor 24 And Change
+        // Raise Floor 24 And Change - [STRIFE] Verified unmodified.
         EV_DoFloor(line,raiseFloor24AndChange);
         break;
 
     case 94:
-        // Raise Floor Crush
+        // Raise Floor Crush - [STRIFE] Verified unmodified.
         EV_DoFloor(line,raiseFloorCrush);
         break;
 
-    case 95:
+    case 95: // STRIFE-TODO: changed to use plat type 4...
         // Raise floor to nearest height
         // and change texture.
         EV_DoPlat(line,raiseToNearestAndChange,0);
@@ -1029,57 +1214,62 @@
         break;
 
     case 96:
-        // Raise floor to shortest texture height
+        // Raise floor to shortest texture height - [STRIFE] Verified unmodified.
         // on either side of lines.
         EV_DoFloor(line,raiseToTexture);
         break;
 
     case 97:
-        // TELEPORT!
+        // TELEPORT! - [STRIFE] Verified unmodified.
         EV_Teleport( line, side, thing );
         break;
 
     case 98:
-        // Lower Floor (TURBO)
+        // Lower Floor (TURBO) - [STRIFE] Verified unmodified.
         EV_DoFloor(line,turboLower);
         break;
 
     case 105:
-        // Blazing Door Raise (faster than TURBO!)
+        // Blazing Door Raise (faster than TURBO!) - [STRIFE] Verified unmodified.
         EV_DoDoor (line,blazeRaise);
         break;
 
     case 106:
-        // Blazing Door Open (faster than TURBO!)
+        // Blazing Door Open (faster than TURBO!) - [STRIFE] Verified unmodified.
         EV_DoDoor (line,blazeOpen);
         break;
 
     case 107:
-        // Blazing Door Close (faster than TURBO!)
+        // Blazing Door Close (faster than TURBO!) - [STRIFE] Verified unmodified.
         EV_DoDoor (line,blazeClose);
         break;
 
-    case 120:
+    case 120: // STRIFE-TODO: changed - uses plat type 5
         // Blazing PlatDownWaitUpStay.
         EV_DoPlat(line,blazeDWUS,0);
         break;
 
     case 126:
-        // TELEPORT MonsterONLY.
+        // TELEPORT MonsterONLY. - [STRIFE] Verified unmodified.
         if (!thing->player)
             EV_Teleport( line, side, thing );
         break;
 
     case 128:
-        // Raise To Nearest Floor
+        // Raise To Nearest Floor - [STRIFE] Verified unmodified.
         EV_DoFloor(line,raiseFloorToNearest);
         break;
 
     case 129:
-        // Raise Floor Turbo
+        // Raise Floor Turbo - [STRIFE] Verified unmodified.
         EV_DoFloor(line,raiseFloorTurbo);
         break;
 
+    case 186:
+        // haleyjd [STRIFE] Exit Level to Spot, First Side Only
+        if(side == 1)
+            break;
+        // fall-through:
     case 145:
         // haleyjd [STRIFE] Exit Level to Spot
         thing->momx = thing->momy = thing->momz = 0;
@@ -1086,7 +1276,6 @@
         {
             int map  = line->tag / 100;
             int spot = line->tag % 100;
-            static char msgbuf[90];
 
             if(thing->player->weaponowned[wp_sigil])
             {
@@ -1096,17 +1285,19 @@
                     map = 10;
             }
 
-            DEH_snprintf(msgbuf, sizeof(msgbuf), "Entering%s", 
+            DEH_snprintf(crosslinestr, sizeof(crosslinestr), 
+                         "Entering%s", 
                          DEH_String(mapnames[map - 1]) + 8);
-            thing->player->message = msgbuf;
+            thing->player->message = crosslinestr;
 
             if(netgame && deathmatch)
             {
                 if(levelTimer && levelTimeCount != 0)
                 {
-                    DEH_snprintf(msgbuf, sizeof(msgbuf), "%d min left", 
+                    DEH_snprintf(crosslinestr, sizeof(crosslinestr), 
+                                 "%d min left", 
                                  (levelTimeCount/TICRATE)/60);
-                    return;
+                    break;
                 }
 
                 // raise switch from floor
@@ -1121,11 +1312,75 @@
                 // that this is incorrect, as that they forgot to add such a 
                 // check to the other kind of exit lines too ;)
                 if(thing->player->health <= 0)
-                    return;
+                    break;
 
                 G_RiftExitLevel(map, spot, thing->angle);
             }
         }
+        break;
+
+    case 175:
+        // haleyjd 09/21/10: [STRIFE] WR Raise Alarm if < 16 Above Floor
+        if(thing->z < thing->floorz + 16 * FRACUNIT)
+            P_NoiseAlert(thing->player->mo, thing->player->mo);
+        break;
+
+    case 198:
+        // haleyjd 09/21/10: [STRIFE] WR Raise Alarm if No Guard Uniform
+        if(P_PlayerHasItem(thing->player, MT_QUEST_GUARD_UNIFORM))
+            break;
+        // fall-through:
+    case 150:
+        // haleyjd 09/21/10: [STRIFE] WR Raise Alarm
+        P_NoiseAlert(thing->player->mo, thing->player->mo);
+        break;
+
+    case 208:
+        // haleyjd 09/21/10: [STRIFE] WR Raise Alarm if Have Flamethrower
+        // O_o - this is definitely unused. Was an entire flamethrower quest
+        // cut out of the game before release?
+        if(thing->player->weaponowned[wp_flame])
+            P_NoiseAlert(thing->player->mo, thing->player->mo);
+        break;
+
+    case 206:
+        // haleyjd 09/21/10: [STRIFE] WR Raise Alarm if Have Chalice
+        // This *is* used, inside the Tavern in Tarnhill. Oddly there is also
+        // one just randomly placed outside the entrance to the Power Station.
+        if(P_PlayerHasItem(thing->player, MT_INV_CHALICE))
+            P_NoiseAlert(thing->player->mo, thing->player->mo);
+        break;
+
+    case 184:
+        // STRIFE-TODO: New plat type?
+        break;
+
+    case 185:
+        // haleyjd 09/21/10: [STRIFE] Silent Teleport (used for Converter)
+        // STRIFE-TODO: Figure out the flags that have been added to EV_Teleport!
+        // flag = 51;
+        EV_Teleport(line, side, thing /*, flag*/);
+        break;
+
+    case 195:
+        // haleyjd 09/21/10: [STRIFE] Silent Teleport and Change Zombie
+        // STRIFE-TODO: Figure out the flags that have been added to EV_Teleport!
+        // flag = 51;
+        EV_Teleport(line, side, thing /*, flag*/);
+        P_SetMobjState(thing, S_AGRD_00); // 419
+        break;
+
+    case 203:
+        // haleyjd 09/21/10: [STRIFE] WR Change Music
+        if(thing->player != &players[0])
+            break;
+        S_ChangeMusic(line->tag, 1);
+        break;
+
+    case 231:
+        // haleyjd 09/21/10: [STRIFE] WR Teleport ???? - STRIFE-TODO: figure out flags
+        // flag = 33;
+        EV_Teleport(line, side, thing /*, flag*/);
         break;
         
         // haleyjd 09/21/10: Moved one-time-use lines up above with the others.