by: Joe Stachnik
The "kick" mechanic introduces the concept to players that death, or a situation that causes death, is not the means for a game over. Rather, it is a way to solve a puzzle, or progress to a different place in the game.
In this particular instance, players find themselves in an otherworldly place, a sort of "dream world" where they must find a way out of. Death is the only escape.Players find themselves in a very strange place, not normal.
Player's trigger the collapse of a building.
The building proceeds to fall on the player.
If they allow it to, the building will "crush" the player, killing them, and "kicking" them out of the dream world (or in this case, teleporting them to a different location)
How?
To create the otherworldly feel of the space, a post process volume was drawn around the entire level.
an orange-colored filter visually separated this world from the normal world.
the Depth-of-Field effects were greatly exaggerated to create a murky feeling in vision.
a challenge was keeping the goal of the collapsing building clear, so the Depth-of-Field effect that was utilized was DOF Focus Type = FOCUS_position. Using the vector coordinates of a Note attached to the collapsing building, the post process volume amplifies the DOF haze of the screen when the player isn't looking at the building. The building always stays in focus to the player, so they still have a clear goal and sense of direction.
A trigger was placed so that when the player touches it, the building begins to collapse.
To make the building collapse, it had to be a KActor so real-time physics could be applied to it. No other type of mesh can utilize these properties.
A LineImpulse_Actor was created, targeting the Kactor to knock it over once the player touched the trigger.
A physical material had to be applied to the KActor. Because it was so large, it would not fall from a physics push by the trigger. The physical material had to create a lower density on the KActor, so the LineImpulse_Actor could knock it over onto the player.
A trigger volume was placed exactly around the outline of the KActor building, and then attached to the Kactor.
when the building falls, so does the trigger volume.
In kismet, the trigger volume then teleports a player to a different location when they are "crushed" by the building. It also disables the post process volume set up earlier, creating the illusion that the player is now out of the "dream world."
Kismet:
Begin Object Class=SeqEvent_Touch Name=SeqEvent_Touch_0
Originator=Trigger'Trigger_0'
MaxTriggerCount=0
MaxWidth=118
OutputLinks(0)=(Links=((LinkedOp=SeqAct_Toggle'SeqAct_Toggle_0')),DrawY=125)
OutputLinks(1)=(DrawY=146)
OutputLinks(2)=(DrawY=167)
VariableLinks(0)=(DrawX=267)
ObjInstanceVersion=2
ParentSequence=Sequence'Main_Sequence'
ObjPosX=208
ObjPosY=56
ObjName="Trigger_0 Touch"
DrawWidth=104
DrawHeight=176
Name="SeqEvent_Touch_0"
ObjectArchetype=SeqEvent_Touch'Engine.Default__SeqEvent_Touch'
End Object
Begin Object Class=SeqVar_Object Name=SeqVar_Object_0
ObjValue=RB_LineImpulseActor'RB_LineImpulseActor_0'
ObjInstanceVersion=1
ParentSequence=Sequence'Main_Sequence'
ObjPosX=472
ObjPosY=248
DrawWidth=32
DrawHeight=32
Name="SeqVar_Object_0"
ObjectArchetype=SeqVar_Object'Engine.Default__SeqVar_Object'
End Object
Begin Object Class=SeqAct_Toggle Name=SeqAct_Toggle_0
InputLinks(0)=(DrawY=149)
InputLinks(1)=(DrawY=170)
InputLinks(2)=(DrawY=191)
OutputLinks(0)=(DrawY=170)
VariableLinks(0)=(LinkedVariables=(SeqVar_Object'SeqVar_Object_0'),DrawX=486)
VariableLinks(1)=(DrawX=537)
EventLinks(0)=(DrawX=586)
ObjInstanceVersion=1
ParentSequence=Sequence'Main_Sequence'
ObjPosX=448
ObjPosY=112
DrawWidth=173
DrawHeight=109
Name="SeqAct_Toggle_0"
ObjectArchetype=SeqAct_Toggle'Engine.Default__SeqAct_Toggle'
End Object
Begin Object Class=SeqEvent_Touch Name=SeqEvent_Touch_1
Originator=DynamicTriggerVolume'DynamicTriggerVolume_0'
MaxWidth=220
OutputLinks(0)=(Links=((LinkedOp=SeqAct_Toggle'SeqAct_Toggle_1',InputLinkIdx=1)),DrawY=437)
OutputLinks(1)=(DrawY=458)
OutputLinks(2)=(DrawY=479)
VariableLinks(0)=(DrawX=278)
ObjInstanceVersion=2
ParentSequence=Sequence'Main_Sequence'
ObjPosX=168
ObjPosY=368
ObjName="DynamicTriggerVolume_0 Touch"
DrawWidth=155
DrawHeight=176
Name="SeqEvent_Touch_1"
ObjectArchetype=SeqEvent_Touch'Engine.Default__SeqEvent_Touch'
End Object
Begin Object Class=SeqEvent_LevelLoaded Name=SeqEvent_LevelLoaded_0
MaxWidth=136
OutputLinks(0)=(Links=((LinkedOp=SeqAct_AttachToActor'SeqAct_AttachToActor_0'),(LinkedOp=SeqAct_ConsoleCommand'SeqAct_ConsoleCommand_1')),DrawY=-43)
OutputLinks(1)=(DrawY=-22)
OutputLinks(2)=(DrawY=-1)
ObjInstanceVersion=3
ParentSequence=Sequence'Main_Sequence'
ObjPosX=104
ObjPosY=-112
DrawWidth=137
Name="SeqEvent_LevelLoaded_0"
ObjectArchetype=SeqEvent_LevelLoaded'Engine.Default__SeqEvent_LevelLoaded'
End Object
Begin Object Class=SeqAct_AttachToActor Name=SeqAct_AttachToActor_0
InputLinks(0)=(DrawY=-110)
OutputLinks(0)=(DrawY=-110)
VariableLinks(0)=(LinkedVariables=(SeqVar_Object'SeqVar_Object_4'),DrawX=374)
VariableLinks(1)=(LinkedVariables=(SeqVar_Object'SeqVar_Object_3'),DrawX=451)
ObjInstanceVersion=2
ParentSequence=Sequence'Main_Sequence'
ObjPosX=336
ObjPosY=-144
DrawWidth=170
DrawHeight=61
Name="SeqAct_AttachToActor_0"
ObjectArchetype=SeqAct_AttachToActor'Engine.Default__SeqAct_AttachToActor'
End Object
Begin Object Class=SeqVar_Object Name=SeqVar_Object_3
ObjValue=DynamicTriggerVolume'DynamicTriggerVolume_0'
ObjInstanceVersion=1
ParentSequence=Sequence'Main_Sequence'
ObjPosX=432
ObjPosY=-40
DrawWidth=32
DrawHeight=32
Name="SeqVar_Object_3"
ObjectArchetype=SeqVar_Object'Engine.Default__SeqVar_Object'
End Object
Begin Object Class=SeqVar_Object Name=SeqVar_Object_4
ObjValue=KActor'KActor_0'
ObjInstanceVersion=1
ParentSequence=Sequence'Main_Sequence'
ObjPosX=312
ObjPosY=-32
DrawWidth=32
DrawHeight=32
Name="SeqVar_Object_4"
ObjectArchetype=SeqVar_Object'Engine.Default__SeqVar_Object'
End Object
Begin Object Class=SeqAct_ConsoleCommand Name=SeqAct_ConsoleCommand_1
Commands(0)="togglescreenshotmode"
InputLinks(0)=(DrawY=-310)
OutputLinks(0)=(Links=((LinkedOp=SeqAct_ConsoleCommand'SeqAct_ConsoleCommand_0')),DrawY=-310)
VariableLinks(0)=(LinkedVariables=(SeqVar_Player'SeqVar_Player_1'),DrawX=344)
ObjInstanceVersion=2
ParentSequence=Sequence'Main_Sequence'
ObjPosX=280
ObjPosY=-344
DrawWidth=129
DrawHeight=61
Name="SeqAct_ConsoleCommand_1"
ObjectArchetype=SeqAct_ConsoleCommand'Engine.Default__SeqAct_ConsoleCommand'
End Object
Begin Object Class=SeqAct_ConsoleCommand Name=SeqAct_ConsoleCommand_0
Commands(0)="togglescreenshotmode"
InputLinks(0)=(DrawY=-302)
OutputLinks(0)=(DrawY=-302)
VariableLinks(0)=(LinkedVariables=(SeqVar_Player'SeqVar_Player_1'),DrawX=552)
ObjInstanceVersion=2
ParentSequence=Sequence'Main_Sequence'
ObjPosX=488
ObjPosY=-336
DrawWidth=129
DrawHeight=61
Name="SeqAct_ConsoleCommand_0"
ObjectArchetype=SeqAct_ConsoleCommand'Engine.Default__SeqAct_ConsoleCommand'
End Object
Begin Object Class=SeqVar_Player Name=SeqVar_Player_1
bAllPlayers=False
ObjInstanceVersion=1
ParentSequence=Sequence'Main_Sequence'
ObjPosX=344
ObjPosY=-224
DrawWidth=32
DrawHeight=32
Name="SeqVar_Player_1"
ObjectArchetype=SeqVar_Player'Engine.Default__SeqVar_Player'
End Object
Begin Object Class=SeqAct_Toggle Name=SeqAct_Toggle_1
InputLinks(0)=(DrawY=413)
InputLinks(1)=(DrawY=434)
InputLinks(2)=(DrawY=455)
OutputLinks(0)=(Links=((LinkedOp=SeqAct_Teleport'SeqAct_Teleport_0')),DrawY=434)
VariableLinks(0)=(LinkedVariables=(SeqVar_Object'SeqVar_Object_7'),DrawX=822)
VariableLinks(1)=(DrawX=873)
EventLinks(0)=(DrawX=922)
ObjInstanceVersion=1
ParentSequence=Sequence'Main_Sequence'
ObjPosX=784
ObjPosY=376
DrawWidth=173
DrawHeight=109
Name="SeqAct_Toggle_1"
ObjectArchetype=SeqAct_Toggle'Engine.Default__SeqAct_Toggle'
End Object
Begin Object Class=SeqVar_Object Name=SeqVar_Object_7
ObjValue=PostProcessVolume'PostProcessVolume_0'
ObjInstanceVersion=1
ParentSequence=Sequence'Main_Sequence'
ObjPosX=832
ObjPosY=576
DrawWidth=32
DrawHeight=32
Name="SeqVar_Object_7"
ObjectArchetype=SeqVar_Object'Engine.Default__SeqVar_Object'
End Object
Begin Object Class=SeqVar_Object Name=SeqVar_Object_5
ObjValue=Note'Note_0'
ObjInstanceVersion=1
ParentSequence=Sequence'Main_Sequence'
ObjPosX=1224
ObjPosY=512
DrawWidth=32
DrawHeight=32
Name="SeqVar_Object_5"
ObjectArchetype=SeqVar_Object'Engine.Default__SeqVar_Object'
End Object
Begin Object Class=SeqVar_Player Name=SeqVar_Player_0
bAllPlayers=False
ObjInstanceVersion=1
ParentSequence=Sequence'Main_Sequence'
ObjPosX=1080
ObjPosY=488
DrawWidth=32
DrawHeight=32
Name="SeqVar_Player_0"
ObjectArchetype=SeqVar_Player'Engine.Default__SeqVar_Player'
End Object
Begin Object Class=SeqAct_Teleport Name=SeqAct_Teleport_0
InputLinks(0)=(DrawY=402)
OutputLinks(0)=(DrawY=402)
VariableLinks(0)=(LinkedVariables=(SeqVar_Player'SeqVar_Player_0'),DrawX=1110)
VariableLinks(1)=(LinkedVariables=(SeqVar_Object'SeqVar_Object_5'),DrawX=1185)
VariableLinks(2)=()
ObjInstanceVersion=2
ParentSequence=Sequence'Main_Sequence'
ObjPosX=1072
ObjPosY=368
DrawWidth=166
DrawHeight=61
Name="SeqAct_Teleport_0"
ObjectArchetype=SeqAct_Teleport'Engine.Default__SeqAct_Teleport'
End Object