Computer Terminal

Tutorial written and coded by Doomguy0505 and later updated by kfpopeye.
Youtube video This is where the player can select an option and confirm it.

Demonstration Wad <- Updated link 07/04/2016

Changes Required

MenuCount is changed accordingly to the size of MenuOptions. Script 2's Teleport is in a "control room" without any enemies (see the example). The control room has a "Actor hits ceiling" (9996) special that calls script 4.

Notes

Since there is not PROP_CANSHOOT, the player can still shoot while they are at a terminal.

Code

//these scripts originally coded by Doomguy0505. Minor alterations to scripts and map by kfpopoeye
//a demonstration wad can be found here: https://www.doomworld.com/idgames/utils/level_edit/tutorials/compterm

bool TerminalDone, TerminalNo = false;
int MenuCount = 4, CurSel = 0, CamId = 0;
str MenuOptions[4] = {"Area 1 Security Camera", "Area 2 Security Camera", "Area 3 Security Camera", "Exit"};

#define ID_TERMINAL 1

function void TerminalSel(int sel)
{
	switch(sel)
	{
		case 0:
			TerminalCam(7);
		break;
		case 1:
			TerminalCam(8);
		break;
		case 2:
			TerminalCam(9);
		break;
		case 3:
			TerminalDone = true;
		break;
	}
}

function void TerminalCam(int tid)
{
	CamId = tid;
	Thing_Activate(tid);
	ChangeCamera(tid, 0, 0);
	FadeTo(0,0,0,0.0,0.0);
	TerminalNo = true;
}

function void NextSel(void)
{
	if (TerminalNo)
	{
		TerminalNo = false;
		Thing_Deactivate(CamId);
		FadeTo(0,0,0,1.0,0.0);
		ChangeCamera(0,0,0);
		return;
	}
	if (MenuCount == CurSel+1)
		CurSel = 0;
	else
		CurSel++;
}

//triggered by script 2. Displays instructions to player
script 1 (void)
{
	TerminalDone = false;
	int i;
	do
	{
		if (TerminalNo) {
			delay(1);
			continue;
		}
		HudMessage(s:"Terminal"; HUDMSG_PLAIN, 0, CR_BLUE, 0.5, 0.1, 0.03);
		HudMessage(s:"Press Use to change selection and Jump to confirm selection"; HUDMSG_PLAIN, 0, CR_GREEN, 0.5, 0.9, 0.03);
		for(i=0;i<MenuCount;i++)
		{
			if (i == CurSel)
				HudMessage(s:MenuOptions[i]; HUDMSG_PLAIN, 0, CR_GOLD, 0.5, 0.21+i*0.05, 0.03);
			else
				HudMessage(s:MenuOptions[i]; HUDMSG_PLAIN, 0, CR_RED, 0.5, 0.21+i*0.05, 0.03);
		}
		delay(1);
	} while(!TerminalDone);
	HudMessage(s:""; HUDMSG_PLAIN, ID_TERMINAL, CR_RED, 0.0, 0.0, 0.0);
	FadeTo(0,0,0,0.0,0.0);
	Teleport_NoFog(6);  //teleport player back to switch that triggers script 2
}

//moves player to control sector and starts the menu script
//triggered when player pushes the button
script 2 (void)
{
	FadeTo(0,0,0,1.0,0.0);  //fade to black
	Teleport_NoFog(5);  //teleport plaer to control sector
	ACS_Execute(1, 0, 0, 0, 0); //execute script 1
}

//highlights the next option in the list
//triggered when the player pushes use in the control sector
script 3 (void)
{
	NextSel();
}

//selects highlighted option
//triggered when the players jumps and hits the ceiling of the control sector
script 4 (void)
{
	TerminalSel(CurSel);
}

See Also

Tutorials

This article is issued from Zdoom. The text is licensed under Creative Commons - Attribution - Sharealike. Additional terms may apply for the media files.