How do a make a cutscene in workshop?

I want everyone in the match to be forced to watch the cutscene, and while it is happening they can’t move. I want to cutscene camera location to be just infront of the event player, with the event player facing the camera. Any help would be great!

Maybe this is useful as a starting point:

variables
{
	global:
		0: CutsceneSequence

	player:
		0: CamPosition
		1: CamEndPosition
}

rule("Workshop Settings")
{
	event
	{
		Ongoing - Global;
	}

	actions
	{
		Global.CutsceneSequence = Workshop Setting Toggle(Custom String("Settings"), Custom String(
			"Play cutscene sequence at setup phase"), False, 0);
	}
}

rule("Start Sequence for all Players")
{
	event
	{
		Ongoing - Each Player;
		All;
		All;
	}

	conditions
	{
		Is In Setup == True;
		!Is Assembling Heroes == True;
		Global.CutsceneSequence == True;
		Is Alive(Event Player) == True;
		Has Spawned(Event Player) == True;
	}

	actions
	{
		Set Status(Event Player, Null, Rooted, 9999);
		Event Player.CamPosition = Ray Cast Hit Position(Eye Position(Event Player), Eye Position(Event Player) + Vector(Random Real(-3,
			3), 0.750, 0) + Facing Direction Of(Event Player) * 7, Null, Event Player, False);
		Event Player.CamEndPosition = Ray Cast Hit Position(Eye Position(Event Player), Eye Position(Event Player) + Facing Direction Of(
			Event Player) * 2, Null, Event Player, False);
		Start Camera(Event Player, Event Player.CamPosition, Eye Position(Event Player), 50);
		Start Facing(Event Player, Direction Towards(Eye Position(Event Player), Event Player.CamPosition), 100, To World,
			Direction and Turn Rate);
		Wait(1, Ignore Condition);
		Chase Player Variable Over Time(Event Player, CamPosition, Event Player.CamEndPosition, 3, Destination and Duration);
	}
}

rule("End Sequence")
{
	event
	{
		Ongoing - Each Player;
		All;
		All;
	}

	conditions
	{
		"Precision improvement of tracking chase variable CamPosition"
		Update Every Frame(Event Player.CamPosition) == Event Player.CamEndPosition;
	}

	actions
	{
		Stop Chasing Player Variable(Event Player, CamPosition);
		Stop Camera(Event Player);
		Clear Status(Event Player, Rooted);
		Stop Facing(Event Player);
	}
}

I just have one problem. I want every player to view the player who triggered the cutscene, not themselves.

Well for that i need to know how one player should trigger the cutscene? What did you imagined the more detail the more it can be put down into workshop code. By saying that i already knew some ways to do that but i need to get what you and how you excactly want it.

Okay I have a code where Hammond is stuck at ball form in the start. To get out of ball for and into normal form, he must either touch objective, or deal damage to the enemy in ball. I’ve already programmed so when this happens, he changes. I just want that whenever a Hammond in the game transforms from ball to robot mode, it makes every player get stuck and be able to see him transform.

This should do the trick i tried to replicate the form change and added the cutscene sequence as suggested, all players should watch the Ball transform:

variables
{
	player:
		0: WreckingBallStartCamPosi
		1: WreckingBallEndCamPos
		2: ChangedForm
		3: SafeSpot
}

subroutines
{
	0: Cutscene
}

rule("Go into Ball")
{
	event
	{
		Ongoing - Each Player;
		All;
		Wrecking Ball;
	}

	conditions
	{
		Is Alive(Event Player) == True;
		Has Spawned(Event Player) == True;
	}

	actions
	{
		If(Is In Alternate Form(Event Player));
			Wait(1, Ignore Condition);
			Set Ability 1 Enabled(Event Player, False);
			Set Primary Fire Enabled(Event Player, False);
			Disallow Button(Event Player, Button(Ability 1));
			Event Player.ChangedForm = False;
		Else;
			Wait(1, Ignore Condition);
			Press Button(Event Player, Button(Ability 1));
			Wait(1, Ignore Condition);
			Set Ability 1 Enabled(Event Player, False);
			Set Primary Fire Enabled(Event Player, False);
			Disallow Button(Event Player, Button(Ability 1));
			Event Player.ChangedForm = False;
		End;
	}
}

rule("Start cutscene")
{
	event
	{
		Subroutine;
		Cutscene;
	}

	actions
	{
		Allow Button(Event Player, Button(Ability 1));
		Set Ability 1 Enabled(Event Player, True);
		Event Player.SafeSpot = Position Of(Event Player);
		Start Forcing Player Position(Event Player, Event Player.SafeSpot, False);
		Set Status(Remove From Array(All Players(All Teams), Event Player), Null, Rooted, 9999);
		Event Player.WreckingBallStartCamPosi = Ray Cast Hit Position(Eye Position(Event Player), Eye Position(Event Player) + Vector(
			Random Real(-5, 5), Random Real(1, 5), 0) + Facing Direction Of(Event Player) * Random Real(2, 7), Null, Event Player, False);
		Event Player.WreckingBallEndCamPos = Ray Cast Hit Position(Eye Position(Event Player), Eye Position(Event Player) + Vector(0, 1, 0)
			+ Facing Direction Of(Event Player) * 2, Null, Event Player, False);
		Start Camera(All Players(All Teams), Event Player.WreckingBallStartCamPosi, Eye Position(Event Player), 50);
		Wait(2, Ignore Condition);
		Press Button(Event Player, Button(Ability 1));
		Start Facing(Event Player, Direction Towards(Eye Position(Event Player), Event Player.WreckingBallStartCamPosi), 100, To World,
			Direction and Turn Rate);
		Chase Player Variable Over Time(Event Player, WreckingBallStartCamPosi, Event Player.WreckingBallEndCamPos, 3,
			Destination and Duration);
		Event Player.ChangedForm = True;
		Set Primary Fire Enabled(Event Player, True);
	}
}

rule("Wrecking Ball is on objective")
{
	event
	{
		Ongoing - Each Player;
		All;
		Wrecking Ball;
	}

	conditions
	{
		Is In Alternate Form(Event Player) == True;
		Is On Objective(Event Player) == True;
		Event Player.ChangedForm == False;
	}

	actions
	{
		Call Subroutine(Cutscene);
	}
}

rule("Wrecking Ball dealt damage")
{
	event
	{
		Player Dealt Damage;
		All;
		Wrecking Ball;
	}

	conditions
	{
		Is In Alternate Form(Event Player) == True;
		Event Player.ChangedForm == False;
	}

	actions
	{
		Call Subroutine(Cutscene);
	}
}

rule("Cutscene ends")
{
	event
	{
		Ongoing - Each Player;
		All;
		Wrecking Ball;
	}

	conditions
	{
		Event Player.ChangedForm == True;
		Event Player.WreckingBallStartCamPosi == Event Player.WreckingBallEndCamPos;
	}

	actions
	{
		Stop Chasing Player Variable(Event Player, WreckingBallStartCamPosi);
		Clear Status(Remove From Array(All Players(All Teams), Event Player), Rooted);
		Stop Camera(All Players(All Teams));
		Stop Forcing Player Position(Event Player);
		Stop Facing(Event Player);
	}
}

trying to re-enter this on my playstation is gonna be a nightmare :l

You Don’t have to
1BG83
should let you copy and paste his rules

3 Likes