diff options
author | Simon Howard | 2008-09-04 23:15:36 +0000 |
---|---|---|
committer | Simon Howard | 2008-09-04 23:15:36 +0000 |
commit | 0df2cb80cf03d7259746834220d209b306a8c503 (patch) | |
tree | fdc5037429c91dcbc8207c3e75fc787ef96e207a /src/hexen/p_switch.c | |
parent | 6a294daa7859eaf0250aa4a77484dd11550e5c5e (diff) | |
download | chocolate-doom-0df2cb80cf03d7259746834220d209b306a8c503.tar.gz chocolate-doom-0df2cb80cf03d7259746834220d209b306a8c503.tar.bz2 chocolate-doom-0df2cb80cf03d7259746834220d209b306a8c503.zip |
Add GPLed Heretic/Hexen source.
Subversion-branch: /branches/raven-branch
Subversion-revision: 1195
Diffstat (limited to 'src/hexen/p_switch.c')
-rw-r--r-- | src/hexen/p_switch.c | 146 |
1 files changed, 146 insertions, 0 deletions
diff --git a/src/hexen/p_switch.c b/src/hexen/p_switch.c new file mode 100644 index 00000000..fe5aecd0 --- /dev/null +++ b/src/hexen/p_switch.c @@ -0,0 +1,146 @@ + +//************************************************************************** +//** +//** 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; + } + } +} |