Modular SandboxDesign: Tools and Workflows for Hitman
Marinus RørbechSenior Programmer, Io-Interactive
2/68
Who Am I?
• Marinus Rørbech
• Senior Programmer, Io-Interactive
• 8 years in the industry
3/68
Agenda
• Motivation
• Introducing ”Bricks”
• Impact
• Wrap Up
4/68
• Motivation
•
•
•
5/68
Traditional level structure at IOI
• Scene
• Tree hierarchy of ”entities”• Geometry
• Logic from C++
• Logic from visual programming
• Hitman: Absolution
• 1 checkpoint = 1 scene ≈ 30.000 entities
6/68
Traditional level design at IOI
• Defining entity logic
7/68
Traditional level design at IOI
• Defining entity logic
• Entity references wire entities together
• Set property values
• Register event handlers
8/68
Vision For Hitman
• Freedom of approach
• High-definition sandbox
• Many ways of completing a mission
• More load-out options
• Replayability
9/68
Vision For Hitman
• Ever expanding
• New missions appear over time
• More than one mission in the same location
• Time-limited targets
• React to community
10/68
Vision For Hitman
• Contracts mode
• Asynchronous multiplayer
• Players define their own missions• Mark target(s)
• Define intended murder weapon
• Planned escape route
• Etc.
• Increase player options
11/68
Challenges
• Static level structure
• When a level is shipped, that’s how it is
• (Almost) no sharing of set-ups across missions
• Duplicated set-ups leading to repetitive work
• Other systems get abused for workarounds
• Download size
12/68
•
• Introducing ”Bricks”
•
•
13/68
• Scenes are split into parts
Introducing ”Bricks”
14/68
• Scenes are split into parts
• 1 brick = 1 partial scene
• 1 scene = N bricks
Brick CBrick A Brick B
Introducing ”Bricks”
15/68
• Scene is defined by a brick
Brick CBrick A Brick B
Introducing ”Bricks”
16/68
• Scene is defined by a brick
• Brick references define which bricks are loaded
• Backwards compatibility
Brick CBrick A Brick B
Main Brick
Brick Dependencies
• Old scenes are bricks with no other references
17/68
Brick Dependencies
Brick CBrick A Brick B
Main Brick
• Entity references
• Entities have unique ids
18/68
Brick Dependencies
Brick CBrick A Brick B
Main Brick
• Entity references
• Entities have unique ids
• Ensure availability of target entities by adding brick references
19/68
Brick CBrick A Brick B
Main Brick A
Sharing Bricks
20/68
• Bricks can be referenced more than once
Brick C
Sharing Bricks
Main Brick B
Brick D
21/68
• Changes to a brick affect all scenes that use it
Brick C
Main Brick A
Sharing Bricks
Main Brick B
22/68
Sharing Bricks
• Use bricks as building blocks
• Reduces duplicated set-ups
• Reduces repetitive bug-fixing
• Find the right granularity
23/68
Library bricks• Generic logic/content• Can be used in all missions
Agent 47 In-game menu Core elements
24/68
Library bricks• Generic logic/content• Can be used in all missions
Location bricks• Basic environment geometry• Max. 1 per mission
Location
Agent 47 In-game menu Core elements
25/68
Library bricks• Generic logic/content• Can be used in all missions
Location bricks• Basic environment geometry• Max. 1 per mission
Ambient bricks• Mission-agnostic set-ups• Location-specific
Agent 47 In-game menu Core elements
Location
NPCset-up
NPCset-up
26/68
Library bricks• Generic logic/content• Can be used in all missions
Location bricks• Basic environment geometry• Max. 1 per mission
Ambient bricks• Mission-agnostic set-ups• Location-specific
Mission bricks• Mission-specific set-ups• Mission definition
Agent 47 In-game menu Core elements
Location
NPCset-up
Mission
NPCset-up
27/68
Library bricks• Generic logic/content• Can be used in all missions
Location bricks• Basic environment geometry• Max. 1 per mission
Ambient bricks• Mission-agnostic set-ups• Location-specific
Mission bricks• Mission-specific set-ups• Mission definition
Agent 47 In-game menu Core elements
Location
NPCset-up
Mission Mission
NPCset-up
NPCset-up
Location
28/68
Library bricks• Generic logic/content• Can be used in all missions
Location bricks• Basic environment geometry• Max. 1 per mission
Ambient bricks• Mission-agnostic set-ups• Location-specific
Mission bricks• Mission-specific set-ups• Mission definition
Agent 47 In-game menu Core elements
Location
NPCset-up
Mission Mission
NPCset-up
NPCset-up
Location
Mission
NPCset-up
29/68
Library bricks• Generic logic/content• Can be used in all missions
Location bricks• Basic environment geometry• Max. 1 per mission
Ambient bricks• Mission-agnostic set-ups• Location-specific
Mission bricks• Mission-specific set-ups• Mission definition
Agent 47 In-game menu Core elements
Location
NPCset-up
Mission Mission
NPCset-up
NPCset-up
Location
Mission
NPCset-up
Mission
NPCset-up
30/68
Location brick
31/68
Location brick + ambient brick(s)
32/68
This is really great... but....
• Tree hierarchy is important
• For humans
• For gameplay logic
• New requirement:
• Inject entities anywhere in the scene tree
33/68
• Parent relations are similar to entity references
Extending a Tree Hierarchy
Brick CBrick A Brick B
Main Brick
34/68
• Parent relations are similar to entity references
• Entities can refer to parents in other bricks
Extending a Tree Hierarchy
Brick CBrick A Brick B
Main Brick
35/68
• Parent relations are similar to entity references
• Entities can refer to parents in other bricks
• Ensure availability of parents by adding brick references
Extending a Tree Hierarchy
Brick CBrick A Brick B
Main Brick
36/68
Now we can almost use the brick system... but...
• Properties are too static
• New requirement:
• Override properties in other bricks
37/68
Property Overrides
Brick CBrick A Brick B
Main Brick
38/68
• Specify new value for target property
• Original brick is unchanged
Property Overrides
Brick CBrick A Brick B
Main Brick
Color = RedPos = (3, 1, 4)
39/68
• Specify new value for target property
• Original brick is unchanged
Property Overrides
Brick CBrick A Brick B
Main Brick
• Ensure availability of target entity by adding brick references
40/68
Location brick+ ambient brick(s)
41/68
Location brick+ ambient brick(s)
42/68
Location brick+ ambient brick(s)+ overriding brick
43/68
NOW we can almost use the brick system... but...
• Scene tree is too static
• New requirement:
• Remove entities in other bricks
44/68
Override Deletes
Brick CBrick A Brick B
Main Brick
45/68
Override Deletes
• Specify entity to remove
• Implicitly removes children
• Original brick is unchanged
Brick CBrick A Brick B
Main Brick
Delete Delete
46/68
• Specify entity to remove
• Implicitly removes children
• Original brick is unchanged
Override Deletes
Brick CBrick A Brick B
Main Brick
• Ensure availability of entities to remove by adding brick references
Delete Delete
47/68
Location brick
48/68
Location brick
49/68
Location brick + deleting brick
50/68
Dynamic Brick Configurations
• Dynamically change existing set-ups
• Toggled by players
• User-configurable missions (Contracts)
• Toggled from a server
• Seasonal content
• Time-limited mission goals
51/68
Dynamic Brick Configurations
Agent 47 In-game menu Core elements
Mission
NPCset-up
Location
NPCset-up
52/68
Dynamic Brick Configurations
Agent 47 In-game menu Core elements
Mission
NPCset-up
Location
NPCset-up
Tweak NPC behavior
53/68
Dynamic Brick Configurations
Agent 47 In-game menu Core elements
Mission
NPCset-up
Location
NPCset-up
Christmas decoration
Tweak NPC behavior
54/68
Overview
•
•
• Impact
•
55/68
Implementation plan
• 1-2 level designers start using bricks
• Get experience with tools and workflow
• Discover missing tools and features
• Iron out introductory hiccups
• Full team roll-out
• Embraced by entire team
• Brick tool engineers are heroes
56/68
Basic Brick Management
• New view: Brick View
• Create new bricks
• Load/unload existing bricks
• Navigate brick references
• Manage brick references• Manual process: connection by
design – not chance
57/68
Basic Brick Management
• Brick references define a graph
• Navigating a graph using lists view is hard
• New view: Brick Graph
58/68
59/68
New Concept: Work Scopes
• Active brick• Selected by the user
• New entities, property overrides and override deletes are added to the active brick
• Reachable bricks• Bricks with direct reference from the active brick
• Entities in reachable bricks can referenced
• Cannot be edited
• Unreachable bricks• Bricks with no direct reference from the active brick
• Entities in these brick cannot be referenced
• Cannot be edited
60/68
Updated View: Scene Tree
• Reflecting work scopes
• Active brick selection
• Entities in active brick• Original style
• Reachable entities• Light gray background
• Unreachable entities• Dark gray background
• Gray scaled icons
61/68
Updated View: Scene Tree
• Reflecting override deletes
• Directly deleted entities
• Implicitely deleted children
62/68
Centralized constraint system
• All operations constrainted wrt. work scope
• Move entities between bricks....
• ...uh oh... disable constraints, please
• New view: Scene Issues
• Issues related to bricks (”What did I break”)
• Bonus: Can show misc. legacy issues
• Automatic bulk fixing of issues
63/68
64/68
Effects on Production
• Challenges
• Cultural change in the way levels are made
• Added complexity to level design
• Harder to get an overview
• Initial level construction is slower
65/68
Effects on Production
• Benefits
• Production speed improves as the brick toolbox grows
• Making level-variations is much faster
• Prototyping is easier
• Allows for set-ups that were not possible before
66/68
Overview
•
•
•
• Wrap Up
67/68
Credits
• Tobias Sicheritz, Mi’pu’mi Games
• Kasper Fauerby
• Søren Seeberg
• Torbjørn V. Christensen
68/68
Q&A
?