Move thing 4 ways -- prl_thing_move4.cog
This cog allows you to use sectors, things, or surfaces (switch) to activate the movement of a thing in four possible directions: from frame 1 to frame 0 or 2 and return; or from frame 4 to frame 3 or 5 and return. 23 March 2002

# Jedi Knight Missions Cog Script
#
# prl_thing_move4.cog
# Sylvicolus [PRL] 23 March 2002
#
# Thing_to_move can be an elevator, platform, or any thing
# (if a door then adjoins, light not affected).
# **Thing is set up to have 6 frames (0-5).
# **Thing is started from and returned to frame 1.
# **Frame 1 and frame 4 must be identical.
# All frames should be in the same sector (but not required).
# Thing is called/sent to frame 0 or frame 2 from frame 1.
# Thing is called/sent to frame 3 or frame 5 from frame 4.
#
# Only supply values for the types of triggers you want to use.
# Trigger number sends thing to that frame, for example:
# surface_trigger0 (linkid=0) sends thing to frame 0
# thing_trigger5 (linkid=5) sends thing to frame 5
# GetSenderId(); is used to determine which frame to move to.
#
# If you need more triggers for a particular frame 
# just add them to the symbols section.
#
# This cog is not supported by LucasArts Entertainment Co.


symbols

message	startup
message	activated
message	entered

thing	thing_to_move           nolink
surface	surface_trigger0        linkid=0
sector	sector_trigger0         linkid=0
thing	thing_trigger0          linkid=0
surface	surface_trigger2        linkid=2
sector	sector_trigger2         linkid=2
thing	thing_trigger2          linkid=2
surface	surface_trigger3        linkid=3
sector	sector_trigger3         linkid=3
thing	thing_trigger3          linkid=3
surface	surface_trigger5        linkid=5
sector	sector_trigger5         linkid=5
thing	thing_trigger5          linkid=5
flex	start_wait=0.5    desc=pause_before_moving
flex	sleeptime=2.0
flex	speed=4.0
sound	trigger_sound=Activate02.wav
sound	return_sound=beep2.wav
int	active=0     local
int	trigger=0    local
int	triggerid    local
int	triggertype  local
sector	thingSector  local

end

# ========================================================

code

startup:
	sleep(1.0);
	MoveToFrame(thing_to_move,1,speed);
	thingSector = GetThingSector(thing_to_move);
	return;

activated:
entered:
	if (active) return;
	active=1;
	triggertype = GetSenderType();
	triggerid = GetSenderId();
	trigger = GetSenderRef();
	sleep(0.2);
	if (triggertype==3)             //trigger is a thing
	{
		PlaySoundThing(trigger_sound, GetThingPos(trigger), 1, -1, -1, 0 );
		call movething;
		PlaySoundThing(return_sound, GetThingPos(trigger), 1, -1, -1, 0 );
	}
	else if (triggertype==5)	//trigger is a sector
	{
		PlaySoundThing(trigger_sound, GetThingPos(thing_to_move), 1, -1, -1, 0 );
		call movething;
		PlaySoundThing(return_sound, GetThingPos(thing_to_move), 1, -1, -1, 0 );
	}
	else if (triggertype==6)	//trigger is a surface
	{
		PlaySoundPos(trigger_sound, SurfaceCenter(trigger), 1, -1, -1, 0 );
		SetWallCel(trigger,1);
		call movething;
		PlaySoundPos(return_sound, SurfaceCenter(trigger), 1, -1, -1, 0 );
		SetWallCel(trigger,0);
	}
	active=0;
	return;

movething:
	if (triggerid >= 3) JumptoFrame(thing_to_move,4,thingSector);
	sleep(start_wait);
	MoveToFrame(thing_to_move,triggerid,speed);
	WaitForStop(thing_to_move);
	sleep(sleeptime);
	if (triggerid <= 2) MoveToFrame(thing_to_move,1,speed);
	if (triggerid >= 3) MoveToFrame(thing_to_move,4,speed);
	WaitForStop(thing_to_move);
	if (getcurframe(thing_to_move) == 4) JumptoFrame(thing_to_move,1,thingSector);
	return;

end