KEMBAR78
Adventures in Data Compilation | PDF | Scheme (Programming Language) | C++
0% found this document useful (0 votes)
67 views23 pages

Adventures in Data Compilation

This document discusses an in-house data compilation system called Data Compilation (DC) that was created by Naughty Dog for use in their video games. DC was built using Scheme/Lisp to handle data elements that fall between strictly code or data, like particle definitions and animations. It allows defining types like vectors and quaternions that get translated to C++ for use in the game engine. The talk will provide examples of defining types in DC and compiling them to C++.

Uploaded by

Mark
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
67 views23 pages

Adventures in Data Compilation

This document discusses an in-house data compilation system called Data Compilation (DC) that was created by Naughty Dog for use in their video games. DC was built using Scheme/Lisp to handle data elements that fall between strictly code or data, like particle definitions and animations. It allows defining types like vectors and quaternions that get translated to C++ for use in the game engine. The talk will provide examples of defining types in DC and compiling them to C++.

Uploaded by

Mark
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 23

What is it, and why did we build it?

A crash course with examples

Adventures in Data Compilation


Uncharted: Drake’s Fortune

Dan Liebgold

Naughty Dog, Inc.


Santa Monica, CA

Game Developers Conference, 2008

Liebgold, Dan Adventures in Data Compilation


What is it, and why did we build it?
A crash course with examples

Outline

1 What is it, and why did we build it?

2 A crash course with examples

Liebgold, Dan Adventures in Data Compilation


What is it, and why did we build it?
A crash course with examples

Motivation

Code is compiled, data is “built”


What should be code, what should be data? Plenty, right?
Game logic, geometry, textures...
What is not clearly either?
Particle definitions, animation states & blend trees, event &
gameplay scripting/tuning, more...

Liebgold, Dan Adventures in Data Compilation


What is it, and why did we build it?
A crash course with examples

Motivation

Code is compiled, data is “built”


What should be code, what should be data? Plenty, right?
Game logic, geometry, textures...
What is not clearly either?
Particle definitions, animation states & blend trees, event &
gameplay scripting/tuning, more...

Liebgold, Dan Adventures in Data Compilation


What is it, and why did we build it?
A crash course with examples

Motivation

Code is compiled, data is “built”


What should be code, what should be data? Plenty, right?
Game logic, geometry, textures...
What is not clearly either?
Particle definitions, animation states & blend trees, event &
gameplay scripting/tuning, more...

Liebgold, Dan Adventures in Data Compilation


What is it, and why did we build it?
A crash course with examples

Motivation

Code is compiled, data is “built”


What should be code, what should be data? Plenty, right?
Game logic, geometry, textures...
What is not clearly either?
Particle definitions, animation states & blend trees, event &
gameplay scripting/tuning, more...

Liebgold, Dan Adventures in Data Compilation


What is it, and why did we build it?
A crash course with examples

Motivation

Code is compiled, data is “built”


What should be code, what should be data? Plenty, right?
Game logic, geometry, textures...
What is not clearly either?
Particle definitions, animation states & blend trees, event &
gameplay scripting/tuning, more...

Liebgold, Dan Adventures in Data Compilation


What is it, and why did we build it?
A crash course with examples

The in between stuff

We have a legacy of Lisp at Naughty Dog


Common Lisp, GOAL, GOOS, GOOL, scripting, animation
tools – more than a dozen Lisps all told.
GOAL is the primary influence. We stopped using it, so we
need something to replace some of its features.
Lisp supports the code/data duality implicitly
It also has features (like macros, symbol table) that open
unanticipated opportunities
We will build a solution in Lisp (well, Scheme actually)

Liebgold, Dan Adventures in Data Compilation


What is it, and why did we build it?
A crash course with examples

The in between stuff

We have a legacy of Lisp at Naughty Dog


Common Lisp, GOAL, GOOS, GOOL, scripting, animation
tools – more than a dozen Lisps all told.
GOAL is the primary influence. We stopped using it, so we
need something to replace some of its features.
Lisp supports the code/data duality implicitly
It also has features (like macros, symbol table) that open
unanticipated opportunities
We will build a solution in Lisp (well, Scheme actually)

Liebgold, Dan Adventures in Data Compilation


What is it, and why did we build it?
A crash course with examples

The in between stuff

We have a legacy of Lisp at Naughty Dog


Common Lisp, GOAL, GOOS, GOOL, scripting, animation
tools – more than a dozen Lisps all told.
GOAL is the primary influence. We stopped using it, so we
need something to replace some of its features.
Lisp supports the code/data duality implicitly
It also has features (like macros, symbol table) that open
unanticipated opportunities
We will build a solution in Lisp (well, Scheme actually)

Liebgold, Dan Adventures in Data Compilation


What is it, and why did we build it?
A crash course with examples

The in between stuff

We have a legacy of Lisp at Naughty Dog


Common Lisp, GOAL, GOOS, GOOL, scripting, animation
tools – more than a dozen Lisps all told.
GOAL is the primary influence. We stopped using it, so we
need something to replace some of its features.
Lisp supports the code/data duality implicitly
It also has features (like macros, symbol table) that open
unanticipated opportunities
We will build a solution in Lisp (well, Scheme actually)

Liebgold, Dan Adventures in Data Compilation


What is it, and why did we build it?
A crash course with examples

The in between stuff

We have a legacy of Lisp at Naughty Dog


Common Lisp, GOAL, GOOS, GOOL, scripting, animation
tools – more than a dozen Lisps all told.
GOAL is the primary influence. We stopped using it, so we
need something to replace some of its features.
Lisp supports the code/data duality implicitly
It also has features (like macros, symbol table) that open
unanticipated opportunities
We will build a solution in Lisp (well, Scheme actually)

Liebgold, Dan Adventures in Data Compilation


What is it, and why did we build it?
A crash course with examples

The in between stuff

We have a legacy of Lisp at Naughty Dog


Common Lisp, GOAL, GOOS, GOOL, scripting, animation
tools – more than a dozen Lisps all told.
GOAL is the primary influence. We stopped using it, so we
need something to replace some of its features.
Lisp supports the code/data duality implicitly
It also has features (like macros, symbol table) that open
unanticipated opportunities
We will build a solution in Lisp (well, Scheme actually)

Liebgold, Dan Adventures in Data Compilation


What is it, and why did we build it?
A crash course with examples

Let’s define some types

A DC type declaration:
(deftype vec4 (:align 16)
((x float)
(y float)
(z float)
(w float :default 0)
))
Automatically gets translated to a C++ declaration:
struct Vec4
{
float m_x;
float m_y;
...
};
Liebgold, Dan Adventures in Data Compilation
What is it, and why did we build it?
A crash course with examples

Let’s define some types

A DC type declaration:
(deftype vec4 (:align 16)
((x float)
(y float)
(z float)
(w float :default 0)
))
Automatically gets translated to a C++ declaration:
struct Vec4
{
float m_x;
float m_y;
...
};
Liebgold, Dan Adventures in Data Compilation
What is it, and why did we build it?
A crash course with examples

Types continued

We define some more 3D types

(deftype quaternion (:parent vec4)


())

(deftype point (:parent vec4)


((w float :default 1)
))

(deftype locator ()
((trans point :inline #t)
(rot quaternion :inline #t)
)
)

Liebgold, Dan Adventures in Data Compilation


What is it, and why did we build it?
A crash course with examples

Types continued

We define some more 3D types

(deftype quaternion (:parent vec4)


())

(deftype point (:parent vec4)


((w float :default 1)
))

(deftype locator ()
((trans point :inline #t)
(rot quaternion :inline #t)
)
)

Liebgold, Dan Adventures in Data Compilation


What is it, and why did we build it?
A crash course with examples

Types continued

We define some more 3D types

(deftype quaternion (:parent vec4)


())

(deftype point (:parent vec4)


((w float :default 1)
))

(deftype locator ()
((trans point :inline #t)
(rot quaternion :inline #t)
)
)

Liebgold, Dan Adventures in Data Compilation


What is it, and why did we build it?
A crash course with examples

Types continued

We define some more 3D types

(deftype quaternion (:parent vec4)


())

(deftype point (:parent vec4)


((w float :default 1)
))

struct Locator
{
Point m_trans;
Quaternion m_rot;
};

Liebgold, Dan Adventures in Data Compilation


What is it, and why did we build it?
A crash course with examples

Define some instances

(define *y-axis* (new vec4 :x 0 :y 1 :z 0))


(define *origin* (new point :x 0 :y 0 :z 0))

This instance will be exported (available at runtime):

(define-export *player-start*
(new locator
:trans *origin*
:rot (axis-angle->quaternion *y-axis* 45)
))

Liebgold, Dan Adventures in Data Compilation


What is it, and why did we build it?
A crash course with examples

Define some instances

(define *y-axis* (new vec4 :x 0 :y 1 :z 0))


(define *origin* (new point :x 0 :y 0 :z 0))

This instance will be exported (available at runtime):

(define-export *player-start*
(new locator
:trans *origin*
:rot (axis-angle->quaternion *y-axis* 45)
))

Liebgold, Dan Adventures in Data Compilation


What is it, and why did we build it?
A crash course with examples

How we use these definitions in C++ code

In our runtime C++ code:

...
#include "dc-types.h"
...
const Locator * pLoc =
DcLookupSymbol("*player-start*");
Point pos = pLoc->m_trans;
...

Liebgold, Dan Adventures in Data Compilation


What is it, and why did we build it?
A crash course with examples

Build upon this basis

We build upon this basis to create many many things


Particle definitions
Animation states
Gameplay scripts
Scripted in-game cinematics
Weapons tuning
Sound and voice setup
Overall game sequencing and control
...and more

Liebgold, Dan Adventures in Data Compilation

You might also like