summaryrefslogtreecommitdiff
path: root/src/strife/p_switch.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/strife/p_switch.c')
-rw-r--r--src/strife/p_switch.c1082
1 files changed, 1082 insertions, 0 deletions
diff --git a/src/strife/p_switch.c b/src/strife/p_switch.c
new file mode 100644
index 00000000..bb70f890
--- /dev/null
+++ b/src/strife/p_switch.c
@@ -0,0 +1,1082 @@
+// Emacs style mode select -*- C++ -*-
+//-----------------------------------------------------------------------------
+//
+// Copyright(C) 1993-1996 Id Software, Inc.
+// Copyright(C) 2005 Simon Howard
+//
+// This program is free software; you can redistribute it and/or
+// modify it under the terms of the GNU General Public License
+// as published by the Free Software Foundation; either version 2
+// of the License, or (at your option) any later version.
+//
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with this program; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
+// 02111-1307, USA.
+//
+//
+// DESCRIPTION:
+// Switches, buttons. Two-state animation. Exits.
+//
+//-----------------------------------------------------------------------------
+
+#include <stdio.h>
+
+#include "i_system.h"
+#include "deh_main.h"
+#include "doomdef.h"
+#include "p_local.h"
+
+#include "g_game.h"
+#include "d_main.h" // villsa [STRIFE]
+#include "z_zone.h" // villsa [STRIFE]
+#include "w_wad.h" // villsa [STRIFE]
+#include "s_sound.h"
+#include "m_random.h" // haleyjd [STRIFE]
+#include "p_dialog.h"
+#include "p_local.h" // haleyjd [STRIFE]
+#include "m_bbox.h" // villsa [STRIFE]
+
+// Data.
+#include "sounds.h"
+
+// State.
+#include "doomstat.h"
+#include "r_state.h"
+
+//
+// CHANGE THE TEXTURE OF A WALL SWITCH TO ITS OPPOSITE
+//
+// villsa [STRIFE] new switch list
+switchlist_t alphSwitchList[] =
+{
+ { "GLASS01", "GLASS02", 1, sfx_bglass },
+ { "GLASS03", "GLASS04", 1, sfx_bglass },
+ { "GLASS05", "GLASS06", 1, sfx_bglass },
+ { "GLASS07", "GLASS08", 1, sfx_bglass },
+ { "GLASS17", "GLASS18", 1, sfx_bglass },
+ { "GLASS19", "GLASS20", 1, sfx_bglass },
+ { "SWKNOB01", "SWKNOB02", 1, sfx_swknob },
+ { "SWLITE01", "SWLITE02", 1, sfx_None },
+ { "SWCHN01", "SWCHN02", 1, sfx_pulchn },
+ { "COMP01", "COMP04B", 1, sfx_bglass },
+ { "COMP05", "COMP12B", 1, sfx_bglass },
+ { "COMP09", "COMP12B", 1, sfx_bglass },
+ { "COMP12", "COMP04B", 1, sfx_bglass },
+ { "COMP13", "COMP12B", 1, sfx_bglass },
+ { "COMP17", "COMP20B", 1, sfx_bglass },
+ { "COMP21", "COMP28B", 1, sfx_bglass },
+ { "WALTEK09", "WALTEKB1", 1, sfx_None },
+ { "WALTEK10", "WALTEKB1", 1, sfx_None },
+ { "WALTEK15", "WALTEKB1", 1, sfx_None },
+ { "SWFORC01", "SWFORC02", 1, sfx_None },
+ { "SWEXIT01", "SWEXIT02", 1, sfx_None },
+ { "DORSBK01", "DORSBK02", 1, sfx_swston },
+ { "SWSLD01", "SWSLD02", 1, sfx_None },
+ { "DORWS04", "DORWS05", 1, sfx_swbolt },
+ { "SWIRON01", "SWIRON02", 1, sfx_None },
+ { "GLASS09", "GLASS10", 2, sfx_bglass },
+ { "GLASS11", "GLASS12", 2, sfx_bglass },
+ { "GLASS13", "GLASS14", 2, sfx_bglass },
+ { "GLASS15", "GLASS16", 2, sfx_bglass },
+ { "SWFORC03", "SWFORC04", 2, sfx_None },
+ { "SWCIT01", "SWCIT02", 2, sfx_None },
+ { "SWTRMG01", "SWTRMG04", 2, sfx_None },
+ { "SWMETL01", "SWMETL02", 2, sfx_None },
+ { "SWWOOD01", "SWWOOD02", 2, sfx_None },
+ { "SWTKBL01", "SWTKBL02", 2, sfx_None },
+ { "AZWAL21", "AZWAL22", 2, sfx_None },
+ { "SWINDT01", "SWINDT02", 2, sfx_None },
+ { "SWRUST01", "SWRUST02", 2, sfx_None },
+ { "SWCHAP01", "SWCHAP02", 2, sfx_None },
+ { "SWALIN01", "SWALIN02", 2, sfx_None },
+ { "SWWALG01", "SWWALG02", 2, sfx_None },
+ { "SWWALG03", "SWWALG04", 2, sfx_None },
+ { "SWTRAM01", "SWTRAM02", 2, sfx_None },
+ { "SWTRAM03", "SWTRAM04", 2, sfx_None },
+ { "SWORC01", "SWORC02", 2, sfx_None },
+ { "SWBRIK01", "SWBRIK02", 2, sfx_None },
+ { "SWIRON03", "SWIRON04", 2, sfx_None },
+ { "SWIRON05", "SWIRON06", 2, sfx_None },
+ { "SWIRON07", "SWIRON08", 2, sfx_None },
+ { "SWCARD01", "SWCARD02", 2, sfx_keycrd },
+ { "SWSIGN01", "SWSIGN02", 2, sfx_None },
+ { "SWLEV01", "SWLEV02", 2, sfx_None },
+ { "SWLEV03", "SWLEV04", 2, sfx_None },
+ { "SWLEV05", "SWLEV06", 2, sfx_None },
+ { "SWBRN01", "SWBRN02", 2, sfx_keycrd },
+ { "SWPIP01", "SWPIP02", 2, sfx_valve },
+ { "SWPALM01", "SWPALM02", 2, sfx_swscan },
+ { "SWKNOB03", "SWKNOB04", 2, sfx_swknob },
+ { "ALTSW01", "ALTSW02", 2, sfx_None },
+ { "COMP25", "COMP28B", 2, sfx_bglass },
+ { "COMP29", "COMP20B", 2, sfx_bglass },
+ { "COMP33", "COMP50", 2, sfx_bglass },
+ { "COMP42", "COMP51", 2, sfx_bglass },
+ { "GODSCRN1", "GODSCRN2", 2, sfx_difool },
+ { "ALIEN04", "ALIEN05", 2, sfx_None },
+ { "CITADL04", "CITADL05", 2, sfx_None },
+ { "SWITE03", "SWITE04", 2, sfx_None },
+ { "SWTELP01", "SWTELP02", 2, sfx_None },
+ { "BRNSCN01", "BRNSCN05", 2, sfx_firxpl },
+ { "\0", "\0", 0, sfx_None }
+};
+
+int switchlist[MAXSWITCHES * 2];
+int numswitches;
+button_t buttonlist[MAXBUTTONS];
+
+//
+// P_InitSwitchList
+// Only called at game initialization.
+//
+void P_InitSwitchList(void)
+{
+ int i;
+ int index;
+ int episode;
+
+ episode = 1;
+
+ if(isregistered)
+ episode = 2;
+ // villsa [STRIFE] unused
+ /*else
+ if ( gamemode == commercial )
+ episode = 3;*/
+
+ for(index = 0, i = 0; i < MAXSWITCHES; i++)
+ {
+ if(!alphSwitchList[i].episode)
+ {
+ numswitches = index/2;
+ switchlist[index] = -1;
+ break;
+ }
+
+ if (alphSwitchList[i].episode <= episode)
+ {
+ switchlist[index++] = R_TextureNumForName(DEH_String(alphSwitchList[i].name1));
+ switchlist[index++] = R_TextureNumForName(DEH_String(alphSwitchList[i].name2));
+ }
+ }
+}
+
+
+//
+// P_StartButton
+// Start a button counting down till it turns off.
+//
+void P_StartButton(line_t* line, bwhere_e w, int texture, int time)
+{
+ int i;
+
+ // See if button is already pressed
+ for(i = 0; i < MAXBUTTONS; i++)
+ {
+ if(buttonlist[i].btimer && buttonlist[i].line == line)
+ return;
+ }
+
+
+
+ for(i = 0; i < MAXBUTTONS; i++)
+ {
+ if(!buttonlist[i].btimer)
+ {
+ buttonlist[i].line = line;
+ buttonlist[i].where = w;
+ buttonlist[i].btexture = texture;
+ buttonlist[i].btimer = time;
+ buttonlist[i].soundorg = &line->frontsector->soundorg;
+ return;
+ }
+ }
+
+ I_Error("P_StartButton: no button slots left!");
+}
+
+
+//
+// P_SpawnBrokenGlass
+// villsa [STRIFE] new function
+//
+static void P_SpawnBrokenGlass(line_t* line)
+{
+ fixed_t x1;
+ fixed_t x2;
+ fixed_t y1;
+ fixed_t y2;
+ int i;
+ mobj_t* glass;
+ angle_t an;
+
+ x1 = (line->v2->x + line->v1->x) / 2;
+ y1 = (line->v2->y + line->v1->y) / 2;
+ x2 = ((line->frontsector->soundorg.x - x1) / 5) + x1;
+ y2 = ((line->frontsector->soundorg.y - y1) / 5) + y1;
+
+ for(i = 0; i < 7; i++)
+ {
+ glass = P_SpawnMobj(x2, y2, ONFLOORZ, MT_JUNK);
+ glass->z += (24*FRACUNIT);
+ glass->flags |= (MF_SHADOW|MF_MVIS);
+
+ P_SetMobjState(glass, P_Random() % 3 + S_SHRD_03); // 284
+
+ an = ((P_Random() << 13) / 255);
+
+ glass->angle = (an << ANGLETOFINESHIFT);
+ glass->momx = FixedMul(finecosine[an], (P_Random() & 3) << FRACBITS);
+ glass->momy = FixedMul(finesine[an], (P_Random() & 3) << FRACBITS);
+ glass->momz = (P_Random() & 7) << FRACBITS;
+ glass->tics += (P_Random() + 7) & 7;
+ }
+}
+
+
+//
+// Function that changes wall texture.
+// Tell it if switch is ok to use again (1=yes, it's a button).
+//
+void P_ChangeSwitchTexture(line_t* line, int useAgain)
+{
+ int texTop;
+ int texMid;
+ int texBot;
+ int i;
+ int sound;
+ boolean breakglass; // villsa [STRIFE]
+ switchlist_t* sl; // villsa [STRIFE]
+
+ breakglass = false; // villsa [STRIFE]
+
+ texTop = sides[line->sidenum[0]].toptexture;
+ texMid = sides[line->sidenum[0]].midtexture;
+ texBot = sides[line->sidenum[0]].bottomtexture;
+
+ sound = sfx_swtchn;
+
+ // villsa [STRIFE] check for linetype 182 (break glass)
+ if(line->special == 182)
+ {
+ line->flags &= ~ML_BLOCKING;
+ breakglass = true;
+
+ if(useAgain)
+ {
+ // haleyjd 09/21/10: Corrected (>> 16 == next field)
+ texTop = 0;
+ texBot = 0;
+ }
+
+ if(texMid) // haleyjd 09/21/10: Corrected (>> 16 == next field)
+ useAgain = 0;
+
+ sound = sfx_bglass;
+ }
+
+ if(!useAgain)
+ line->special = 0;
+
+ for(i = 0; i < numswitches*2; i++)
+ {
+ sl = &alphSwitchList[i / 2]; // villsa [STRIFE]
+
+ if(switchlist[i] == texTop)
+ {
+ // villsa [STRIFE] set sound
+ if(sl->sound)
+ sound = sl->sound;
+
+ S_StartSound(buttonlist->soundorg, sound);
+ sides[line->sidenum[0]].toptexture = switchlist[i^1];
+
+ if(useAgain)
+ P_StartButton(line,top,switchlist[i],BUTTONTIME);
+
+ if(breakglass)
+ P_SpawnBrokenGlass(line);
+
+ return;
+ }
+ else
+ {
+ if(switchlist[i] == texMid)
+ {
+ // villsa [STRIFE] set sound
+ if(sl->sound)
+ sound = sl->sound;
+
+ S_StartSound(buttonlist->soundorg,sound);
+ sides[line->sidenum[0]].midtexture = switchlist[i^1];
+
+ // villsa [STRIFE] affect second side of line
+ // BUG: will crash if 1S line is marked with TWOSIDED flag!
+ if(line->flags & ML_TWOSIDED)
+ sides[line->sidenum[1]].midtexture = switchlist[i^1];
+
+ if(useAgain)
+ P_StartButton(line, middle,switchlist[i],BUTTONTIME);
+
+ // villsa [STRIFE]: Mines Transmitter hack
+ if(sound == sfx_firxpl)
+ {
+ breakglass = true;
+
+ // give quest flag 29 to player
+ players[0].questflags |= QF_QUEST29;
+
+ // give stamina/accuracy items
+ if(!netgame)
+ {
+ P_GiveItemToPlayer(players, SPR_TOKN, MT_TOKEN_STAMINA);
+ P_GiveItemToPlayer(players, SPR_TOKN, MT_TOKEN_NEW_ACCURACY);
+ }
+
+ }
+
+ // villsa [STRIFE]
+ if(breakglass || sound == sfx_bglass)
+ P_SpawnBrokenGlass(line);
+
+ return;
+ }
+ else
+ {
+ if(switchlist[i] == texBot)
+ {
+ // villsa [STRIFE] set sound
+ if(sl->sound)
+ sound = sl->sound;
+
+ S_StartSound(buttonlist->soundorg,sound);
+ sides[line->sidenum[0]].bottomtexture = switchlist[i^1];
+
+ if(useAgain)
+ P_StartButton(line, bottom,switchlist[i],BUTTONTIME);
+
+ if(breakglass)
+ P_SpawnBrokenGlass(line);
+
+ return;
+ }
+ }
+ }
+ }
+}
+
+//
+// P_MoveWall
+//
+// villsa [STRIFE] New function.
+// Dynamically move a solid line. Unused in Strife
+//
+static void P_MoveWall(line_t *line, mobj_t *thing)
+{
+ vertex_t *v2;
+ vertex_t *v1;
+ fixed_t x;
+ fixed_t y;
+
+ v1 = line->v1;
+ v2 = line->v2;
+ S_StartSound(thing, sfx_stnmov);
+
+ if (line->dx)
+ {
+ if (thing->x >= v1->x)
+ {
+ v1->y -= (8 * FRACUNIT);
+ v2->y -= (8 * FRACUNIT);
+ }
+ else
+ {
+ v1->y += (8 * FRACUNIT);
+ v2->y += (8 * FRACUNIT);
+ }
+ }
+ else
+ {
+ if (thing->y >= v1->y)
+ {
+ v1->x -= (8 * FRACUNIT);
+ v2->x -= (8 * FRACUNIT);
+ }
+ else
+ {
+ v1->x += (8 * FRACUNIT);
+ v2->x += (8 * FRACUNIT);
+ }
+ }
+
+ if (v1->x >= v2->x)
+ {
+ line->bbox[BOXLEFT] = v2->x;
+ x = v1->x;
+ }
+ else
+ {
+ line->bbox[BOXLEFT] = v1->x;
+ x = v2->x;
+ }
+
+ line->bbox[BOXRIGHT] = x;
+
+ if (v1->y >= v2->y)
+ {
+ line->bbox[BOXBOTTOM] = v2->y;
+ y = v1->y;
+ }
+ else
+ {
+ line->bbox[BOXBOTTOM] = v1->y;
+ y = v2->y;
+ }
+
+ line->bbox[BOXTOP] = y;
+}
+
+// villsa [STRIFE]
+static char usemessage[92];
+
+//
+// P_UseSpecialLine
+// Called when a thing uses a special line.
+// Only the front sides of lines are usable.
+//
+boolean P_UseSpecialLine(mobj_t* thing, line_t* line, int side)
+{
+ // Err...
+ // Use the back sides of VERY SPECIAL lines...
+ if (side)
+ {
+ switch(line->special)
+ {
+ case 148: // haleyjd [STRIFE]
+ break;
+
+ default:
+ return false;
+ }
+ }
+
+ // Switches that other things can activate.
+ if (!thing->player)
+ {
+ // never open secret doors
+ if (line->flags & ML_SECRET)
+ return false;
+
+ switch(line->special)
+ {
+ case 1: // MANUAL DOOR RAISE
+ case 31: // haleyjd [STRIFE]
+ case 144: // haleyjd [STRIFE] Manual sliding door
+ break;
+
+ default:
+ return false;
+ break;
+ }
+ }
+
+ // do something
+ switch(line->special)
+ {
+ // MANUALS
+ case 1: // Vertical Door
+ case 26: // DR ID Card
+ case 27: // DR Pass Card
+ case 28: // DR ID Badge
+ case 31: // Manual door open
+ case 32: // D1 ID Card
+ case 33: // D1 ID Badge
+ case 34: // D1 Pass Card
+ case 117: // Blazing door raise
+ case 118: // Blazing door open
+ case 156: // haleyjd [STRIFE] D1 Brass Key
+ case 157: // haleyjd [STRIFE] D1 Silver Key
+ case 158: // haleyjd [STRIFE] D1 Gold Key
+ case 159: // haleyjd [STRIFE] DR Gold Key
+ case 160: // haleyjd [STRIFE] DR Silver Key
+ case 161: // haleyjd [STRIFE] DR Brass Key
+ case 165: // villsa [STRIFE] That doesn't seem to work
+ case 166: // haleyjd [STRIFE] DR Hand Print
+ case 169: // haleyjd [STRIFE] DR Base Key
+ case 170: // haleyjd [STRIFE] DR Gov's Key
+ case 190: // haleyjd [STRIFE] DR Order Key
+ case 205: // villsa [STRIFE] Available in retail only
+ case 213: // haleyjd [STRIFE] DR Chalice
+ case 217: // haleyjd [STRIFE] DR Core Key
+ case 221: // haleyjd [STRIFE] DR Mauler Key
+ case 224: // haleyjd [STRIFE] DR Chapel Key
+ case 225: // haleyjd [STRIFE] DR Catacomb Key
+ case 232: // villsa [STRIFE] DR Oracle Pass
+ EV_VerticalDoor (line, thing);
+ break;
+
+ // haleyjd: For the sake of our sanity, I have reordered all the line
+ // specials from this point down so that they are strictly in numeric
+ // order, and not divided up in a semi-arbitrary fashion.
+
+ case 7:
+ // Build Stairs - [STRIFE] Verified unmodified
+ if (EV_BuildStairs(line,build8))
+ P_ChangeSwitchTexture(line,0);
+ break;
+
+ case 9:
+ // Change Donut - [STRIFE] Verified unmodified
+ if (EV_DoDonut(line))
+ P_ChangeSwitchTexture(line,0);
+ break;
+
+ case 11:
+ // Exit level - [STRIFE] Modified to take tag, etc.
+ P_ChangeSwitchTexture(line, 1);
+ if(levelTimer && levelTimeCount)
+ break;
+ G_ExitLevel(line->tag);
+ break;
+
+ case 14:
+ // Raise Floor 32 and change texture - [STRIFE] Verified unmodified
+ if (EV_DoPlat(line, raiseAndChange,32))
+ P_ChangeSwitchTexture(line,0);
+ break;
+
+ case 15:
+ // Raise Floor 24 and change texture
+ if (EV_DoPlat(line, raiseAndChange,24))
+ P_ChangeSwitchTexture(line,0);
+ break;
+
+ case 18:
+ // Raise Floor to next highest floor - [STRIFE] Verified unmodified
+ if (EV_DoFloor(line, raiseFloorToNearest))
+ P_ChangeSwitchTexture(line,0);
+ break;
+
+ case 20:
+ // Raise Plat next highest floor and change texture - [STRIFE] Verified unmodified
+ if(EV_DoPlat(line, raiseToNearestAndChange, 0))
+ P_ChangeSwitchTexture(line,0);
+ break;
+
+ case 21:
+ // PlatDownWaitUpStay - [STRIFE] Verified unmodified
+ if (EV_DoPlat(line, downWaitUpStay,0))
+ P_ChangeSwitchTexture(line,0);
+ break;
+
+ case 23:
+ // Lower Floor to Lowest - [STRIFE] Verified unmodified
+ if (EV_DoFloor(line,lowerFloorToLowest))
+ P_ChangeSwitchTexture(line,0);
+ break;
+
+ case 29:
+ // Raise Door - [STRIFE] Verified unmodified
+ if (EV_DoDoor(line,normal))
+ P_ChangeSwitchTexture(line,0);
+ break;
+
+ case 40:
+ // villsa [STRIFE] Split Open Door
+ if(EV_DoDoor(line, splitOpen))
+ P_ChangeSwitchTexture(line, 0);
+ break; // haleyjd
+
+ case 41:
+ // Lower Ceiling to Floor - [STRIFE] Verified unmodified
+ if (EV_DoCeiling(line,lowerToFloor))
+ P_ChangeSwitchTexture(line,0);
+ break;
+
+ case 42:
+ // Close Door - [STRIFE] Verified unmodified
+ if (EV_DoDoor(line,close))
+ P_ChangeSwitchTexture(line,1);
+ break;
+
+ case 43:
+ // Lower Ceiling to Floor - [STRIFE] Verified unmodified
+ if (EV_DoCeiling(line,lowerToFloor))
+ P_ChangeSwitchTexture(line,1);
+ break;
+
+ case 45:
+ // Lower Floor to Surrounding floor height - [STRIFE] Verified unmodified
+ if (EV_DoFloor(line,lowerFloor))
+ P_ChangeSwitchTexture(line,1);
+ break;
+
+ case 49:
+ // Ceiling Crush And Raise - [STRIFE] Verified unmodified
+ if (EV_DoCeiling(line,crushAndRaise))
+ P_ChangeSwitchTexture(line,0);
+ break;
+
+ case 50:
+ // Close Door - [STRIFE] Verified unmodified
+ if (EV_DoDoor(line,close))
+ P_ChangeSwitchTexture(line,0);
+ break;
+
+ case 51:
+ // [STRIFE] Modifed into S1 Start Finale (was Secret Exit)
+ P_ChangeSwitchTexture(line,0);
+ G_StartFinale();
+ break;
+
+ case 55:
+ // Raise Floor Crush - [STRIFE] Verified unmodified
+ if (EV_DoFloor(line,raiseFloorCrush))
+ P_ChangeSwitchTexture(line,0);
+ break;
+
+ case 60:
+ // Lower Floor to Lowest - [STRIFE] Verified unmodified
+ if (EV_DoFloor(line,lowerFloorToLowest))
+ P_ChangeSwitchTexture(line,1);
+ break;
+
+ case 61:
+ // Open Door - [STRIFE] Verified unmodified
+ if (EV_DoDoor(line,open))
+ P_ChangeSwitchTexture(line,1);
+ break;
+
+ case 62:
+ // PlatDownWaitUpStay - [STRIFE] Verified unmodified
+ if (EV_DoPlat(line, downWaitUpStay,1))
+ P_ChangeSwitchTexture(line,1);
+ break;
+
+ case 63:
+ // Raise Door - [STRIFE] Verified unmodified
+ if (EV_DoDoor(line,normal))
+ P_ChangeSwitchTexture(line,1);
+ break;
+
+ case 64:
+ // Raise Floor to ceiling - [STRIFE] Verified unmodified
+ if (EV_DoFloor(line,raiseFloor))
+ P_ChangeSwitchTexture(line,1);
+ break;
+
+ case 65:
+ // Raise Floor Crush - [STRIFE] Verified unmodified
+ if (EV_DoFloor(line,raiseFloorCrush))
+ P_ChangeSwitchTexture(line,1);
+ break;
+
+ case 66:
+ // Raise Floor 24 and change texture - [STRIFE] Verified unmodified
+ if (EV_DoPlat(line, raiseAndChange, 24))
+ P_ChangeSwitchTexture(line,1);
+ break;
+
+ case 67:
+ // Raise Floor 32 and change texture - [STRIFE] Verified unmodified
+ if (EV_DoPlat(line, raiseAndChange, 32))
+ P_ChangeSwitchTexture(line,1);
+ break;
+
+ case 68:
+ // Raise Plat to next highest floor and change texture - [STRIFE] Verified unmodified
+ if (EV_DoPlat(line, raiseToNearestAndChange, 0))
+ P_ChangeSwitchTexture(line,1);
+ break;
+
+ case 69:
+ // Raise Floor to next highest floor - [STRIFE] Verified unmodified
+ if (EV_DoFloor(line, raiseFloorToNearest))
+ P_ChangeSwitchTexture(line,1);
+ break;
+
+ case 70:
+ // Turbo Lower Floor - [STRIFE] Verified unmodified
+ if (EV_DoFloor(line,turboLower))
+ P_ChangeSwitchTexture(line,1);
+ break;
+
+ case 71:
+ // Turbo Lower Floor - [STRIFE] Verified unmodified
+ if (EV_DoFloor(line,turboLower))
+ P_ChangeSwitchTexture(line,0);
+ break;
+
+ case 101:
+ // Raise Floor - [STRIFE] Verified unmodified
+ if (EV_DoFloor(line,raiseFloor))
+ P_ChangeSwitchTexture(line,0);
+ break;
+
+ case 102:
+ // Lower Floor to Surrounding floor height - [STRIFE] Verified unmodified
+ if (EV_DoFloor(line,lowerFloor))
+ P_ChangeSwitchTexture(line,0);
+ break;
+
+ case 103:
+ // Open Door - [STRIFE] Verified unmodified
+ if (EV_DoDoor(line,open))
+ P_ChangeSwitchTexture(line,0);
+ break;
+
+ case 111:
+ // Blazing Door Raise (faster than TURBO!) - [STRIFE] Verified unmodified
+ if (EV_DoDoor (line,blazeRaise))
+ P_ChangeSwitchTexture(line,0);
+ break;
+
+ case 112:
+ // Blazing Door Open (faster than TURBO!) - [STRIFE] Verified unmodified
+ if (EV_DoDoor (line,blazeOpen))
+ P_ChangeSwitchTexture(line,0);
+ break;
+
+ case 113:
+ // Blazing Door Close (faster than TURBO!) - [STRIFE] Verified unmodified
+ if (EV_DoDoor (line,blazeClose))
+ P_ChangeSwitchTexture(line,0);
+ break;
+
+ case 114:
+ // Blazing Door Raise (faster than TURBO!) - [STRIFE] Verified unmodified
+ if (EV_DoDoor (line,blazeRaise))
+ P_ChangeSwitchTexture(line,1);
+ break;
+
+ case 115:
+ // Blazing Door Open (faster than TURBO!) - [STRIFE] Verified unmodified
+ if (EV_DoDoor (line,blazeOpen))
+ P_ChangeSwitchTexture(line,1);
+ break;
+
+ case 116:
+ // Blazing Door Close (faster than TURBO!) - [STRIFE] Verified unmodified
+ if (EV_DoDoor (line,blazeClose))
+ P_ChangeSwitchTexture(line,1);
+ break;
+
+ case 122:
+ // Blazing PlatDownWaitUpStay - [STRIFE] Verified unmodified
+ if(EV_DoPlat(line, blazeDWUS, 0))
+ P_ChangeSwitchTexture(line,0);
+ break;
+
+ case 123:
+ // Blazing PlatDownWaitUpStay - [STRIFE] Verified unmodified
+ if(EV_DoPlat(line, blazeDWUS, 0))
+ P_ChangeSwitchTexture(line,1);
+ break;
+
+ case 127:
+ // Build Stairs Turbo 16 - [STRIFE] Verified unmodified
+ if (EV_BuildStairs(line,turbo16))
+ P_ChangeSwitchTexture(line,0);
+ break;
+
+ case 131:
+ // Raise Floor Turbo - [STRIFE] Verified unmodified
+ if (EV_DoFloor(line,raiseFloorTurbo))
+ P_ChangeSwitchTexture(line,0);
+ break;
+
+ case 132:
+ // Raise Floor Turbo - [STRIFE] Verified unmodified
+ if (EV_DoFloor(line,raiseFloorTurbo))
+ P_ChangeSwitchTexture(line,1);
+ break;
+
+ case 133: // [STRIFE] TODO - which key is it?
+ case 135: // [STRIFE] TODO - which key is it?
+ case 137: // [STRIFE] TODO - which key is it?
+ if (EV_DoLockedDoor (line,blazeOpen,thing))
+ P_ChangeSwitchTexture(line,0);
+ break;
+
+ case 99: // [STRIFE] TODO: which key is it?
+ case 134: // [STRIFE] TODO: which key is it?
+ case 136: // [STRIFE] TODO: which key is it?
+ if (EV_DoLockedDoor (line,blazeOpen,thing))
+ P_ChangeSwitchTexture(line,1);
+ break;
+
+ case 138:
+ // Light Turn On - [STRIFE] Verified unmodified
+ EV_LightTurnOn(line,255);
+ P_ChangeSwitchTexture(line,1);
+ break;
+
+ case 139:
+ // Light Turn Off - [STRIFE] Verified unmodified
+ EV_LightTurnOn(line,35);
+ P_ChangeSwitchTexture(line,1);
+ break;
+
+ case 140:
+ // Raise Floor 512 - [STRIFE] Verified unmodified
+ if (EV_DoFloor(line,raiseFloor512))
+ P_ChangeSwitchTexture(line,0);
+ break;
+
+ case 144:
+ // villsa [STRIFE] manual sliding door
+ EV_SlidingDoor(line, thing);
+ break;
+
+ case 146:
+ // haleyjd 09/24/10: [STRIFE] S1 Build Stairs Down 16 (new type)
+ if(EV_BuildStairs(line, buildDown16))
+ P_ChangeSwitchTexture(line, 0);
+ break;
+
+ case 147:
+ // haleyjd 09/24/10: [STRIFE] S1 Clear Force Fields
+ if(EV_ClearForceFields(line))
+ P_ChangeSwitchTexture(line, 0);
+ break;
+
+ case 148:
+ // haleyjd 09/16/10: [STRIFE] using forcefields hurts
+ P_DamageMobj(thing, NULL, NULL, 16);
+ P_Thrust(thing->player, thing->angle + ANG180, 125*FRACUNIT/16);
+ break;
+
+ case 151: // villsa [STRIFE] BlzOpenDoor Gold key
+ case 152: // [STRIFE] TODO: which key is it?
+ case 153: // [STRIFE] TODO: which key is it?
+ if(EV_DoLockedDoor(line, blazeOpen, thing))
+ P_ChangeSwitchTexture(line, 1);
+ break;
+
+ case 154:
+ // villsa [STRIFE] plat lower wait rise if have gold key
+ if(thing->player->cards[key_GoldKey])
+ {
+ if(EV_DoPlat(line, downWaitUpStay, 0))
+ P_ChangeSwitchTexture(line, 1);
+ }
+ else
+ {
+ thing->player->message = DEH_String("You need a gold key");
+ S_StartSound(thing, sfx_oof);
+ }
+ break;
+
+ case 155:
+ // villsa [STRIFE] raise plat wait lower
+ if(EV_DoPlat(line, upWaitDownStay, 0))
+ P_ChangeSwitchTexture(line, 1);
+ break;
+
+ case 162: // [STRIFE] TODO: which key is it?
+ case 163: // [STRIFE] TODO: which key is it?
+ case 164: // villsa [STRIFE] BlzOpenDoor Gold key
+ case 167: // [STRIFE] TODO: which key is it?
+ if(EV_DoLockedDoor(line, blazeOpen, thing))
+ P_ChangeSwitchTexture(line, 0);
+ break;
+
+ case 168: // [STRIFE] TODO: which key is it?
+ // haleyjd 09/25/10: [STRIFE] SR Blaze Open Door ???? Key
+ if(EV_DoLockedDoor(line, blazeOpen, thing))
+ P_ChangeSwitchTexture(line, 1);
+ break;
+
+ case 171: // [STRIFE] TODO: which key is it?
+ // haleyjd 09/25/10: [STRIFE] S1 Open Door ???? Key
+ if(EV_DoLockedDoor(line, open, thing))
+ P_ChangeSwitchTexture(line, 0);
+ break;
+
+ case 172: // [STRIFE] TODO: which key is it?
+ case 173: // [STRIFE] TODO: which key is it?
+ case 176: // [STRIFE] TODO: which key is it?
+ case 191: // [STRIFE] TODO: which key is it?
+ case 192: // [STRIFE] TODO: which key is it?
+ case 223: // [STRIFE] TODO: which key is it?
+ if(EV_DoLockedDoor(line, normal, thing))
+ P_ChangeSwitchTexture(line, 1);
+ break;
+
+ case 177:
+ // villsa [STRIFE] plat lower wait rise if have power3 key
+ if(thing->player->cards[key_Power3Key])
+ {
+ if(EV_DoPlat(line, downWaitUpStay, 0))
+ P_ChangeSwitchTexture(line, 1);
+ }
+ else
+ {
+ thing->player->message = DEH_String("You don't have the key");
+ S_StartSound(thing, sfx_oof);
+ }
+ break;
+
+ case 181:
+ // haleyjd 09/25/10: [STRIFE] S1 Floor Raise 512 & Change
+ if(EV_DoFloor(line, raiseFloor512AndChange))
+ P_ChangeSwitchTexture(line, 0);
+ break;
+
+ case 189: // [STRIFE] TODO: which key is it???
+ // haleyjd 09/25/10: [STRIFE] S1 Split Open Door ???? Key
+ if(EV_DoLockedDoor(line, splitOpen, thing))
+ P_ChangeSwitchTexture(line, 0);
+ break;
+
+ case 194:
+ // villsa [STRIFE] S1 Free Prisoners
+ if(EV_DoDoor(line, open))
+ {
+ P_ChangeSwitchTexture(line, 0);
+ P_FreePrisoners();
+ }
+ break;
+
+ case 199:
+ // haleyjd 09/25/10: [STRIFE] S1 Destroy Converter
+ if(EV_DoCeiling(line, lowerAndCrush))
+ {
+ P_ChangeSwitchTexture(line, 0);
+ P_DestroyConverter();
+ }
+ break;
+
+ case 207:
+ // villsa [STRIFE] SR Remote Sliding Door
+ if(EV_RemoteSlidingDoor(line, thing))
+ P_ChangeSwitchTexture(line, 1);
+ break; // haleyjd
+
+ case 209:
+ // haleyjd 09/24/10: [STRIFE] S1 Build Stairs Down 16 if Have Chalice
+ if(!P_PlayerHasItem(thing->player, MT_INV_CHALICE))
+ {
+ DEH_snprintf(usemessage, sizeof(usemessage), "You need the chalice!");
+ thing->player->message = usemessage;
+ S_StartSound(thing, sfx_oof);
+ break;
+ }
+ else if(EV_BuildStairs(line, buildDown16))
+ P_ChangeSwitchTexture(line, 0);
+ break;
+
+ case 211:
+ // villsa [STRIFE] S1 Play VOC## sound
+ if(&players[consoleplayer] == thing->player &&
+ thing->player->powers[pw_communicator])
+ {
+ DEH_snprintf(usemessage, sizeof(usemessage), "voc%i", line->tag);
+ I_StartVoice(usemessage);
+ line->special = 0;
+ }
+ break;
+
+ case 214:
+ // villsa [STRIFE] S1 slow lift lower wait up stay
+ if(EV_DoPlat(line, slowDWUS, 1))
+ P_ChangeSwitchTexture(line, 1);
+ break;
+
+ case 219:
+ // haleyjd 09/25/10: S1 Lower Floor Blue Crystal
+ if(!thing->player->cards[key_BlueCrystalKey])
+ {
+ thing->player->message = DEH_String("You need the Blue Crystal");
+ S_StartSound(thing, sfx_oof);
+ }
+ else if(EV_DoFloor(line, lowerFloor))
+ P_ChangeSwitchTexture(line, 0);
+ break;
+
+ case 220:
+ // haleyjd 09/25/10: S1 Lower Floor Red Crystal
+ if(!thing->player->cards[key_RedCrystalKey])
+ {
+ thing->player->message = DEH_String("You need the Red Crystal");
+ S_StartSound(thing, sfx_oof);
+ }
+ else if(EV_DoFloor(line, lowerFloor))
+ P_ChangeSwitchTexture(line, 0);
+ break;
+
+ case 226:
+ // villsa [STRIFE] S1 Complete Training Area
+ if(EV_DoFloor(line, lowerFloor))
+ {
+ P_GiveItemToPlayer(thing->player, SPR_TOKN, MT_TOKEN_STAMINA);
+ P_GiveItemToPlayer(thing->player, SPR_TOKN, MT_TOKEN_NEW_ACCURACY);
+ P_ChangeSwitchTexture(line, 0);
+ DEH_snprintf(usemessage, sizeof(usemessage),
+ DEH_String("Congratulations! You have completed the training area."));
+ thing->player->message = usemessage;
+ }
+ break;
+
+ case 229:
+ // villsa [STRIFE] SR Sigil Sliding Door
+ if(thing->player->sigiltype == 4)
+ {
+ if(EV_RemoteSlidingDoor(line, thing))
+ P_ChangeSwitchTexture(line, 1);
+ }
+ break; // haleyjd
+
+ case 233:
+ // villsa [STRIFE] objective given after revealing the computer
+ if(!EV_DoDoor(line, splitOpen))
+ return true;
+
+ P_ChangeSwitchTexture(line, 1);
+ GiveVoiceObjective("voc70", "log70", 0);
+
+ // haleyjd: Strife used sprintf here, not a direct set.
+ DEH_snprintf(usemessage, sizeof(usemessage),
+ "Incoming Message from BlackBird...");
+ thing->player->message = usemessage;
+
+ break;
+
+ case 234:
+ // haleyjd 09/24/10: [STRIFE] SR Raise Door if Quest 3
+ if(!(thing->player->questflags & QF_QUEST3)) // QUEST3 == Irale
+ {
+ // BUG: doesn't make sfx_oof sound like all other message-
+ // giving door types. I highly doubt this was intentional.
+ DEH_snprintf(usemessage, sizeof(usemessage),
+ "That doesn't seem to work!");
+ thing->player->message = usemessage;
+ }
+ else if(EV_DoDoor(line, normal))
+ P_ChangeSwitchTexture(line, 1);
+ break;
+
+ case 235:
+ // haleyjd 09/25/10: [STRIFE] S1 Split Open Door if Have Sigil 4
+ if(thing->player->sigiltype == 4)
+ {
+ if(EV_DoDoor(line, splitOpen))
+ P_ChangeSwitchTexture(line, 0);
+ }
+ break;
+
+ case 666:
+ // villsa [STRIFE] SR Move Wall
+ P_MoveWall(line, thing);
+ break;
+ }
+
+ return true;
+}
+