123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147 |
- //**************************************************************************
- //**
- //** p_switch.c : Heretic 2 : Raven Software, Corp.
- //**
- //** $RCSfile: p_switch.c,v $
- //** $Revision: 1.8 $
- //** $Date: 95/09/05 13:58:59 $
- //** $Author: cjr $
- //**
- //**************************************************************************
- #include "h2def.h"
- #include "p_local.h"
- #include "soundst.h"
- //==================================================================
- //
- // CHANGE THE TEXTURE OF A WALL SWITCH TO ITS OPPOSITE
- //
- //==================================================================
- switchlist_t alphSwitchList[] =
- {
- { "SW_1_UP", "SW_1_DN", SFX_SWITCH1 },
- { "SW_2_UP", "SW_2_DN", SFX_SWITCH1 },
- { "VALVE1", "VALVE2", SFX_VALVE_TURN },
- { "SW51_OFF", "SW51_ON", SFX_SWITCH2 },
- { "SW52_OFF", "SW52_ON", SFX_SWITCH2 },
- { "SW53_UP", "SW53_DN", SFX_ROPE_PULL },
- { "PUZZLE5", "PUZZLE9", SFX_SWITCH1 },
- { "PUZZLE6", "PUZZLE10", SFX_SWITCH1 },
- { "PUZZLE7", "PUZZLE11", SFX_SWITCH1 },
- { "PUZZLE8", "PUZZLE12", SFX_SWITCH1 },
- {"\0", "\0", 0}
- };
- 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;
- for (index = 0, i = 0; i < MAXSWITCHES; i++)
- {
- if(!alphSwitchList[i].soundID)
- {
- numswitches = index/2;
- switchlist[index] = -1;
- break;
- }
- switchlist[index++] = R_TextureNumForName(alphSwitchList[i].name1);
- switchlist[index++] = R_TextureNumForName(alphSwitchList[i].name2);
- }
- }
- //==================================================================
- //
- // Start a button counting down till it turns off.
- //
- //==================================================================
- void P_StartButton(line_t *line,bwhere_e w,int texture,int time)
- {
- int i;
- 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 = (mobj_t *)&line->frontsector->soundorg;
- return;
- }
- }
- I_Error("P_StartButton: no button slots left!");
- }
- //==================================================================
- //
- // 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;
- texTop = sides[line->sidenum[0]].toptexture;
- texMid = sides[line->sidenum[0]].midtexture;
- texBot = sides[line->sidenum[0]].bottomtexture;
- for (i = 0; i < numswitches*2; i++)
- {
- if (switchlist[i] == texTop)
- {
- S_StartSound((mobj_t *)&line->frontsector->soundorg,
- alphSwitchList[i/2].soundID);
- sides[line->sidenum[0]].toptexture = switchlist[i^1];
- if(useAgain)
- {
- P_StartButton(line, SWTCH_TOP, switchlist[i], BUTTONTIME);
- }
- return;
- }
- else if (switchlist[i] == texMid)
- {
- S_StartSound((mobj_t *)&line->frontsector->soundorg,
- alphSwitchList[i/2].soundID);
- sides[line->sidenum[0]].midtexture = switchlist[i^1];
- if(useAgain)
- {
- P_StartButton(line, SWTCH_MIDDLE, switchlist[i], BUTTONTIME);
- }
- return;
- }
- else if (switchlist[i] == texBot)
- {
- S_StartSound((mobj_t *)&line->frontsector->soundorg,
- alphSwitchList[i/2].soundID);
- sides[line->sidenum[0]].bottomtexture = switchlist[i^1];
- if(useAgain)
- {
- P_StartButton(line, SWTCH_BOTTOM, switchlist[i], BUTTONTIME);
- }
- return;
- }
- }
- }
|