Project Theseus
August 30th, 2021 by Marvin Spahn, János Weyhknecht, Thorben Borghoff, Henrik Dudaczy, Philipp Berger Tolkun, Sarah Rac, Joshua Knapp, Karam AkkilProject Theseus is a 3rd-person game which pits two players controlling different characters in a dynamic, hostile and dark environment. Players need to carefully explore their surroundings, paying attention to every movement and sound while outsmarting their lethal opponent.
Deep underground a sinister research program pursues experiments with modified human DNA to find eternal life. After a devastating seismic event a specimen escapes and tries to flee the facility, with only one last standing guard able to prevent that.
Responsibilites
- Art Direction
- Level Design
- Environment Art
In this project my main concern was to develop and iterate on the overall level design from a gameplay as well as visual perspective. My role as the Art Director of the project was to oversee the visual development of the game as well as provide concepts to realize the original vision of the project. Furthermore the curation and working with Unreal’s Marketplace allowed me to quickly concept a level and expanded the game in terms of content what wouldn’t been possible in just 3-4 months we were given.
Examples
The following code snippet is an excerpt of a ceiling tile effect that uses physics simulation to drop tiles during an earthquake event in the game.
Another area I worked on was the creation of destructible environmental objects that would randomly open up the game world and allow for different routing in the level. This was done through a prebaked animation of skeletal meshes that were constrained to a rigidbody animation in Blender with a small Python script.
# This is a script for placing and constraining bones
# to selected objects. It is useful for baking physics
# simulations to armatures for export to game engines
import bpy
selObj = []
for j in bpy.context.selected_objects:
selObj.append(j)
for i in selObj:
vg = i.vertex_groups.new(name=i.name)
verts = []
for vert in i.data.vertices:
verts.append(vert.index)
vg.add(verts, 1.0, 'ADD')
bpy.ops.object.armature_add()
bpy.ops.object.editmode_toggle()
bpy.ops.armature.select_all(action='SELECT')
bpy.ops.armature.delete()
for e in selObj:
bpy.ops.armature.bone_primitive_add(name=e.name)
bpy.ops.object.posemode_toggle()
bpy.ops.pose.select_all(action='SELECT')
for bone in bpy.context.selected_pose_bones:
lc = bone.constraints.new(type='COPY_LOCATION')
lc.target = bpy.data.objects[bone.name]
rc = bone.constraints.new(type='COPY_ROTATION')
rc.target = bpy.data.objects[bone.name]
sc = bone.constraints.new(type='COPY_SCALE')
sc.target = bpy.data.objects[bone.name]
bpy.ops.pose.select_all(action='SELECT')
bpy.ops.pose.armature_apply(selected=False)
bpy.ops.object.posemode_toggle()
The animations were then expanded with particle systems and sfx that spawn at certain bone locations and finally used as a blueprint actor that can be destroyed through an earthquake event.
In the end I created most of the levels structures, layout and interactivity, allowing for a semi dynamic gameplay experience in a tense setting. The following images show sections from the level which range from an underground laboratory to a logistical train station.