diff --git a/Chapter02/Assets/Character.txt b/Chapter02/Assets/Character.txt
new file mode 100644
index 0000000000000000000000000000000000000000..f1cfb0223466fd18051be476c49e146737d4e28f
--- /dev/null
+++ b/Chapter02/Assets/Character.txt
@@ -0,0 +1,3 @@
+Walking - 01 through 06
+Jumping - 07 through 15
+Punch - 16 through 18
\ No newline at end of file
diff --git a/Chapter02/Assets/Character01.png b/Chapter02/Assets/Character01.png
new file mode 100644
index 0000000000000000000000000000000000000000..7926bb9cf057a9ecaa3965ac5db863827507c959
Binary files /dev/null and b/Chapter02/Assets/Character01.png differ
diff --git a/Chapter02/Assets/Character02.png b/Chapter02/Assets/Character02.png
new file mode 100644
index 0000000000000000000000000000000000000000..cb3a88c1a8f514d0b011c185ecfc295b9c8d1b7d
Binary files /dev/null and b/Chapter02/Assets/Character02.png differ
diff --git a/Chapter02/Assets/Character03.png b/Chapter02/Assets/Character03.png
new file mode 100644
index 0000000000000000000000000000000000000000..38e3093f15bcf3a68e81bdee2585066415d02089
Binary files /dev/null and b/Chapter02/Assets/Character03.png differ
diff --git a/Chapter02/Assets/Character04.png b/Chapter02/Assets/Character04.png
new file mode 100644
index 0000000000000000000000000000000000000000..269e7ce72b357a52635195d3b23e088108ba26ca
Binary files /dev/null and b/Chapter02/Assets/Character04.png differ
diff --git a/Chapter02/Assets/Character05.png b/Chapter02/Assets/Character05.png
new file mode 100644
index 0000000000000000000000000000000000000000..c9d873c040c7493585e773ad1afb90eb706fc517
Binary files /dev/null and b/Chapter02/Assets/Character05.png differ
diff --git a/Chapter02/Assets/Character06.png b/Chapter02/Assets/Character06.png
new file mode 100644
index 0000000000000000000000000000000000000000..b30921f4ae85b6a61163753c449f298ec6a35d2d
Binary files /dev/null and b/Chapter02/Assets/Character06.png differ
diff --git a/Chapter02/Assets/Character07.png b/Chapter02/Assets/Character07.png
new file mode 100644
index 0000000000000000000000000000000000000000..5ac7a1e5f4fa17576d6170040fd07dde093adeff
Binary files /dev/null and b/Chapter02/Assets/Character07.png differ
diff --git a/Chapter02/Assets/Character08.png b/Chapter02/Assets/Character08.png
new file mode 100644
index 0000000000000000000000000000000000000000..1049f0f7076c7ea354fcd7f00e5cdf12a0032b70
Binary files /dev/null and b/Chapter02/Assets/Character08.png differ
diff --git a/Chapter02/Assets/Character09.png b/Chapter02/Assets/Character09.png
new file mode 100644
index 0000000000000000000000000000000000000000..b1ec28db71827298623977d7cd00e6d13c5310ca
Binary files /dev/null and b/Chapter02/Assets/Character09.png differ
diff --git a/Chapter02/Assets/Character10.png b/Chapter02/Assets/Character10.png
new file mode 100644
index 0000000000000000000000000000000000000000..1405000950e1b9f93a81579968702967df240dd5
Binary files /dev/null and b/Chapter02/Assets/Character10.png differ
diff --git a/Chapter02/Assets/Character11.png b/Chapter02/Assets/Character11.png
new file mode 100644
index 0000000000000000000000000000000000000000..124252cfda03bf7d4ae659d3a14d97296101afb5
Binary files /dev/null and b/Chapter02/Assets/Character11.png differ
diff --git a/Chapter02/Assets/Character12.png b/Chapter02/Assets/Character12.png
new file mode 100644
index 0000000000000000000000000000000000000000..f0a71d885ae3379bb946c6b8f53e1f7cf615e343
Binary files /dev/null and b/Chapter02/Assets/Character12.png differ
diff --git a/Chapter02/Assets/Character13.png b/Chapter02/Assets/Character13.png
new file mode 100644
index 0000000000000000000000000000000000000000..20a8bd3e72daba3e640a6fe43316cc62fb995e6b
Binary files /dev/null and b/Chapter02/Assets/Character13.png differ
diff --git a/Chapter02/Assets/Character14.png b/Chapter02/Assets/Character14.png
new file mode 100644
index 0000000000000000000000000000000000000000..8309f78d7512feefb4af7415d9826451a1b98ada
Binary files /dev/null and b/Chapter02/Assets/Character14.png differ
diff --git a/Chapter02/Assets/Character15.png b/Chapter02/Assets/Character15.png
new file mode 100644
index 0000000000000000000000000000000000000000..b1d7e1c593f9f4d69fafa10aa5b7eff42432c46b
Binary files /dev/null and b/Chapter02/Assets/Character15.png differ
diff --git a/Chapter02/Assets/Character16.png b/Chapter02/Assets/Character16.png
new file mode 100644
index 0000000000000000000000000000000000000000..cc10c323a76076f4bda8de0c2d2abf1f4348d979
Binary files /dev/null and b/Chapter02/Assets/Character16.png differ
diff --git a/Chapter02/Assets/Character17.png b/Chapter02/Assets/Character17.png
new file mode 100644
index 0000000000000000000000000000000000000000..9a27b1f910f8d8e3d9d8ad3ecaf631d9b0ca3010
Binary files /dev/null and b/Chapter02/Assets/Character17.png differ
diff --git a/Chapter02/Assets/Character18.png b/Chapter02/Assets/Character18.png
new file mode 100644
index 0000000000000000000000000000000000000000..f5892b78cbd2172dcaf59499ce5c258a0a5ccd88
Binary files /dev/null and b/Chapter02/Assets/Character18.png differ
diff --git a/Chapter07/Assets/Master Bank.bank b/Chapter07/Assets/Master Bank.bank
index 035b52efc4a6f1e31748c5ca09daf8d6d62c43aa..53b3744d07c01eed9dce995db2a937b3e9ff5889 100644
Binary files a/Chapter07/Assets/Master Bank.bank and b/Chapter07/Assets/Master Bank.bank differ
diff --git a/Chapter08/Game.cpp b/Chapter08/Game.cpp
index e3fff3a71706db47877356a22c5434c454ca72aa..6d86eda2f20f58b99c258f21a06710f222f4d242 100644
--- a/Chapter08/Game.cpp
+++ b/Chapter08/Game.cpp
@@ -52,7 +52,7 @@ bool Game::Initialize()
 	// Force OpenGL to use hardware acceleration
 	SDL_GL_SetAttribute(SDL_GL_ACCELERATED_VISUAL, 1);
 	
-	mWindow = SDL_CreateWindow("Game Programming in C++ (Chapter 5)", 100, 100,
+	mWindow = SDL_CreateWindow("Game Programming in C++ (Chapter 8)", 100, 100,
 							   1024, 768, SDL_WINDOW_OPENGL);
 	if (!mWindow)
 	{
diff --git a/Chapter11/Assets/Arrow.png b/Chapter11/Assets/Arrow.png
new file mode 100644
index 0000000000000000000000000000000000000000..9ccf531a5b1e27657e076bb771c76fb5714f0e6b
Binary files /dev/null and b/Chapter11/Assets/Arrow.png differ
diff --git a/Chapter11/Assets/BlipDown.png b/Chapter11/Assets/BlipDown.png
new file mode 100644
index 0000000000000000000000000000000000000000..41b50bbe733cee3b013b2937ab677c9642da1a49
Binary files /dev/null and b/Chapter11/Assets/BlipDown.png differ
diff --git a/Chapter11/Assets/BlipUp.png b/Chapter11/Assets/BlipUp.png
new file mode 100644
index 0000000000000000000000000000000000000000..931029b5088200cf0e8fe2ad823614c650874cd7
Binary files /dev/null and b/Chapter11/Assets/BlipUp.png differ
diff --git a/Chapter13/Assets/SpotLight.gpmesh b/Chapter13/Assets/SpotLight.gpmesh
new file mode 100644
index 0000000000000000000000000000000000000000..facfefa7393e9b38fc5bf148fc05e28409d7c025
--- /dev/null
+++ b/Chapter13/Assets/SpotLight.gpmesh
@@ -0,0 +1,495 @@
+{
+	"version":1,
+	"vertexformat":"PosNormTex",
+	"shader":"BasicMesh",
+	"textures":[
+		"Assets/Default.png"
+	],
+	"specularPower":100.0,
+	"vertices":[
+		[100.000000,-50.000000,0.000004,-0.443137,-0.898039,-0.003922,0.956055,1.000000],
+		[100.000000,-48.296295,-12.940946,-0.443137,-0.866667,-0.239216,1.000000,1.000000],
+		[80.000000,-38.637035,-10.352757,-0.443137,-0.866667,-0.239216,1.000000,0.779297],
+		[80.000000,-40.000000,0.000003,-0.443137,-0.898039,-0.003922,0.956055,0.779297],
+		[60.000000,-28.977776,-7.764568,-0.443137,-0.866667,-0.239216,1.000000,0.558594],
+		[100.000000,-48.296291,12.940954,-0.443137,-0.866667,0.223529,0.912109,1.000000],
+		[60.000000,-30.000000,0.000002,-0.443137,-0.898039,-0.003922,0.956055,0.558594],
+		[40.000000,-19.318518,-5.176378,-0.443137,-0.866667,-0.239216,1.000000,0.339111],
+		[80.000000,-38.637035,10.352763,-0.443137,-0.866667,0.223529,0.912109,0.779297],
+		[100.000000,-43.301273,24.999998,-0.443137,-0.780392,0.435294,0.869141,1.000000],
+		[40.000000,-19.999998,0.000002,-0.443137,-0.898039,-0.003922,0.956055,0.339111],
+		[20.000000,-9.659259,-2.588189,-0.443137,-0.866667,-0.239216,1.000000,0.121521],
+		[60.000000,-28.977776,7.764572,-0.443137,-0.866667,0.223529,0.912109,0.558594],
+		[80.000000,-34.641018,19.999998,-0.443137,-0.780392,0.435294,0.869141,0.779297],
+		[100.000000,-35.355339,35.355339,-0.443137,-0.639216,0.623530,0.826660,1.000000],
+		[20.000000,-9.999999,0.000001,-0.443137,-0.898039,-0.003922,0.956055,0.121521],
+		[0.000015,-0.096593,-0.025883,-0.443137,-0.866667,-0.239216,1.000000,0.000000],
+		[0.000015,-0.100001,-0.000001,-0.443137,-0.898039,-0.003922,0.956055,0.000000],
+		[80.000000,-28.284271,28.284271,-0.443137,-0.639216,0.623530,0.826660,0.779297],
+		[100.000000,-25.000000,43.301273,-0.450980,-0.458824,0.772549,0.784668,1.000000],
+		[20.000000,-9.659258,2.588191,-0.443137,-0.866667,0.223529,0.912109,0.121521],
+		[0.000015,-0.096593,0.025881,-0.443137,-0.866667,0.223529,0.912109,0.000000],
+		[40.000000,-19.318516,5.176381,-0.443137,-0.866667,0.223529,0.912109,0.339111],
+		[20.000000,-8.660254,5.000000,-0.443137,-0.780392,0.435294,0.869141,0.121521],
+		[0.000015,-0.086603,0.049999,-0.443137,-0.780392,0.435294,0.869141,0.000000],
+		[40.000000,-17.320507,9.999999,-0.443137,-0.780392,0.435294,0.869141,0.339111],
+		[60.000000,-25.980764,14.999999,-0.443137,-0.780392,0.435294,0.869141,0.558594],
+		[60.000000,-21.213203,21.213203,-0.443137,-0.639216,0.623530,0.826660,0.558594],
+		[40.000000,-14.142135,14.142135,-0.443137,-0.639216,0.623530,0.826660,0.339111],
+		[20.000000,-7.071067,7.071067,-0.443137,-0.639216,0.623530,0.826660,0.121521],
+		[0.000015,-0.070711,0.070710,-0.443137,-0.639216,0.623530,0.826660,0.000000],
+		[80.000000,-20.000000,34.641014,-0.450980,-0.458824,0.772549,0.784668,0.779297],
+		[100.000000,-12.940952,48.296291,-0.450980,-0.247059,0.858824,0.743652,1.000000],
+		[60.000000,-15.000000,25.980762,-0.450980,-0.458824,0.772549,0.784668,0.558594],
+		[80.000000,-10.352762,38.637035,-0.450980,-0.247059,0.858824,0.743652,0.779297],
+		[100.000000,-0.000000,50.000000,-0.450980,-0.011765,0.890196,0.702637,1.000000],
+		[40.000000,-9.999999,17.320507,-0.450980,-0.458824,0.772549,0.784668,0.339111],
+		[60.000000,-7.764572,28.977776,-0.450980,-0.247059,0.858824,0.743652,0.558594],
+		[80.000000,0.000000,40.000000,-0.450980,-0.011765,0.890196,0.702637,0.779297],
+		[100.000000,12.940989,48.296280,-0.450980,0.231373,0.858824,0.662598,1.000000],
+		[20.000000,-5.000000,8.660254,-0.450980,-0.458824,0.772549,0.784668,0.121521],
+		[0.000015,-0.050000,0.086601,-0.450980,-0.458824,0.772549,0.784668,0.000000],
+		[80.000000,10.352790,38.637028,-0.450980,0.231373,0.858824,0.662598,0.779297],
+		[100.000000,25.000029,43.301258,-0.450980,0.443137,0.772549,0.622559,1.000000],
+		[20.000000,-2.588190,9.659258,-0.450980,-0.247059,0.858824,0.743652,0.121521],
+		[0.000015,-0.025882,0.096591,-0.450980,-0.247059,0.858824,0.743652,0.000000],
+		[40.000000,-5.176380,19.318516,-0.450980,-0.247059,0.858824,0.743652,0.339111],
+		[20.000000,0.000000,9.999999,-0.450980,-0.011765,0.890196,0.702637,0.121521],
+		[0.000015,-0.000000,0.099999,-0.450980,-0.011765,0.890196,0.702637,0.000000],
+		[40.000000,0.000000,19.999998,-0.450980,-0.011765,0.890196,0.702637,0.339111],
+		[60.000000,0.000000,30.000000,-0.450980,-0.011765,0.890196,0.702637,0.558594],
+		[60.000000,7.764593,28.977768,-0.450980,0.231373,0.858824,0.662598,0.558594],
+		[40.000000,5.176395,19.318512,-0.450980,0.231373,0.858824,0.662598,0.339111],
+		[20.000000,2.588197,9.659256,-0.450980,0.231373,0.858824,0.662598,0.121521],
+		[0.000015,0.025882,0.096591,-0.450980,0.231373,0.858824,0.662598,0.000000],
+		[80.000000,20.000025,34.641003,-0.450980,0.443137,0.772549,0.622559,0.779297],
+		[100.000000,35.355362,35.355316,-0.450980,0.631373,0.631373,0.582520,1.000000],
+		[60.000000,15.000018,25.980751,-0.450980,0.443137,0.772549,0.622559,0.558594],
+		[80.000000,28.284290,28.284254,-0.450980,0.631373,0.631373,0.582520,0.779297],
+		[100.000000,43.301285,24.999975,-0.450980,0.772549,0.443137,0.542969,1.000000],
+		[40.000000,10.000011,17.320501,-0.450980,0.443137,0.772549,0.622559,0.339111],
+		[60.000000,21.213219,21.213192,-0.450980,0.631373,0.631373,0.582520,0.558594],
+		[80.000000,34.641029,19.999979,-0.450980,0.772549,0.443137,0.542969,0.779297],
+		[100.000000,48.296295,12.940927,-0.450980,0.858824,0.231373,0.502930,1.000000],
+		[20.000000,5.000006,8.660251,-0.450980,0.443137,0.772549,0.622559,0.121521],
+		[0.000015,0.050000,0.086601,-0.450980,0.443137,0.772549,0.622559,0.000000],
+		[80.000000,38.637039,10.352741,-0.450980,0.858824,0.231373,0.502930,0.779297],
+		[100.000000,50.000000,-0.000023,-0.450980,0.890196,-0.011765,0.463379,1.000000],
+		[20.000000,7.071072,7.071063,-0.450980,0.631373,0.631373,0.582520,0.121521],
+		[0.000015,0.070710,0.070709,-0.450980,0.631373,0.631373,0.582520,0.000000],
+		[40.000000,14.142144,14.142126,-0.450980,0.631373,0.631373,0.582520,0.339111],
+		[20.000000,8.660256,4.999995,-0.450980,0.772549,0.443137,0.542969,0.121521],
+		[0.000015,0.086602,0.049999,-0.450980,0.772549,0.443137,0.542969,0.000000],
+		[40.000000,17.320513,9.999990,-0.450980,0.772549,0.443137,0.542969,0.339111],
+		[60.000000,25.980772,14.999985,-0.450980,0.772549,0.443137,0.542969,0.558594],
+		[60.000000,28.977777,7.764556,-0.450980,0.858824,0.231373,0.502930,0.558594],
+		[40.000000,19.318518,5.176371,-0.450980,0.858824,0.231373,0.502930,0.339111],
+		[20.000000,9.659259,2.588185,-0.450980,0.858824,0.231373,0.502930,0.121521],
+		[0.000015,0.096592,0.025881,-0.450980,0.858824,0.231373,0.502930,0.000000],
+		[80.000000,40.000000,-0.000019,-0.450980,0.890196,-0.011765,0.463379,0.779297],
+		[100.000000,48.296288,-12.940971,-0.450980,0.858824,-0.247059,0.423584,1.000000],
+		[60.000000,30.000000,-0.000014,-0.450980,0.890196,-0.011765,0.463379,0.558594],
+		[80.000000,38.637028,-10.352777,-0.450980,0.858824,-0.247059,0.423584,0.779297],
+		[100.000000,43.301262,-25.000015,-0.450980,0.772549,-0.458824,0.383301,1.000000],
+		[40.000000,19.999998,-0.000009,-0.450980,0.890196,-0.011765,0.463379,0.339111],
+		[60.000000,28.977772,-7.764583,-0.450980,0.858824,-0.247059,0.423584,0.558594],
+		[80.000000,34.641006,-20.000011,-0.450980,0.772549,-0.458824,0.383301,0.779297],
+		[100.000000,35.355320,-35.355358,-0.443137,0.623530,-0.639216,0.343018,1.000000],
+		[20.000000,9.999999,-0.000005,-0.450980,0.890196,-0.011765,0.463379,0.121521],
+		[0.000015,0.099999,-0.000001,-0.450980,0.890196,-0.011765,0.463379,0.000000],
+		[80.000000,28.284258,-28.284288,-0.443137,0.623530,-0.639216,0.343018,0.779297],
+		[100.000000,24.999979,-43.301281,-0.443137,0.435294,-0.780392,0.302246,1.000000],
+		[20.000000,9.659257,-2.588194,-0.450980,0.858824,-0.247059,0.423584,0.121521],
+		[0.000015,0.096592,-0.025883,-0.450980,0.858824,-0.247059,0.423584,0.000000],
+		[40.000000,19.318514,-5.176388,-0.450980,0.858824,-0.247059,0.423584,0.339111],
+		[20.000000,8.660252,-5.000003,-0.450980,0.772549,-0.458824,0.383301,0.121521],
+		[0.000015,0.086602,-0.050001,-0.450980,0.772549,-0.458824,0.383301,0.000000],
+		[40.000000,17.320503,-10.000006,-0.450980,0.772549,-0.458824,0.383301,0.339111],
+		[60.000000,25.980757,-15.000009,-0.450980,0.772549,-0.458824,0.383301,0.558594],
+		[60.000000,21.213192,-21.213215,-0.443137,0.623530,-0.639216,0.343018,0.558594],
+		[40.000000,14.142127,-14.142143,-0.443137,0.623530,-0.639216,0.343018,0.339111],
+		[20.000000,7.071064,-7.071072,-0.443137,0.623530,-0.639216,0.343018,0.121521],
+		[0.000015,0.070710,-0.070712,-0.443137,0.623530,-0.639216,0.343018,0.000000],
+		[80.000000,19.999983,-34.641026,-0.443137,0.435294,-0.780392,0.302246,0.779297],
+		[100.000000,12.940931,-48.296295,-0.443137,0.223529,-0.866667,0.260742,1.000000],
+		[60.000000,14.999988,-25.980768,-0.443137,0.435294,-0.780392,0.302246,0.558594],
+		[80.000000,10.352745,-38.637039,-0.443137,0.223529,-0.866667,0.260742,0.779297],
+		[100.000000,-0.000019,-50.000000,-0.443137,-0.003922,-0.898039,0.218872,1.000000],
+		[40.000000,9.999991,-17.320511,-0.443137,0.435294,-0.780392,0.302246,0.339111],
+		[60.000000,7.764559,-28.977777,-0.443137,0.223529,-0.866667,0.260742,0.558594],
+		[80.000000,-0.000016,-40.000000,-0.443137,-0.003922,-0.898039,0.218872,0.779297],
+		[100.000000,-12.940969,-48.296288,-0.443137,-0.239216,-0.866667,0.176147,1.000000],
+		[20.000000,4.999996,-8.660255,-0.443137,0.435294,-0.780392,0.302246,0.121521],
+		[0.000015,0.050000,-0.086604,-0.443137,0.435294,-0.780392,0.302246,0.000000],
+		[80.000000,-10.352776,-38.637032,-0.443137,-0.239216,-0.866667,0.176147,0.779297],
+		[100.000000,-25.000011,-43.301262,-0.443137,-0.450980,-0.780392,0.132568,1.000000],
+		[20.000000,2.588186,-9.659259,-0.443137,0.223529,-0.866667,0.260742,0.121521],
+		[0.000015,0.025881,-0.096594,-0.443137,0.223529,-0.866667,0.260742,0.000000],
+		[40.000000,5.176373,-19.318518,-0.443137,0.223529,-0.866667,0.260742,0.339111],
+		[20.000000,-0.000004,-9.999999,-0.443137,-0.003922,-0.898039,0.218872,0.121521],
+		[0.000015,-0.000000,-0.100001,-0.443137,-0.003922,-0.898039,0.218872,0.000000],
+		[40.000000,-0.000008,-19.999998,-0.443137,-0.003922,-0.898039,0.218872,0.339111],
+		[60.000000,-0.000012,-30.000000,-0.443137,-0.003922,-0.898039,0.218872,0.558594],
+		[60.000000,-7.764581,-28.977774,-0.443137,-0.239216,-0.866667,0.176147,0.558594],
+		[40.000000,-5.176387,-19.318514,-0.443137,-0.239216,-0.866667,0.176147,0.339111],
+		[20.000000,-2.588193,-9.659257,-0.443137,-0.239216,-0.866667,0.176147,0.121521],
+		[0.000015,-0.025882,-0.096594,-0.443137,-0.239216,-0.866667,0.176147,0.000000],
+		[80.000000,-20.000010,-34.641010,-0.443137,-0.450980,-0.780392,0.132568,0.779297],
+		[100.000000,-35.355347,-35.355331,-0.443137,-0.639216,-0.639216,0.088196,1.000000],
+		[60.000000,-15.000008,-25.980759,-0.443137,-0.450980,-0.780392,0.132568,0.558594],
+		[80.000000,-28.284279,-28.284264,-0.443137,-0.639216,-0.639216,0.088196,0.779297],
+		[100.000000,-43.301277,-24.999992,-0.443137,-0.780392,-0.450980,0.043823,1.000000],
+		[40.000000,-10.000005,-17.320503,-0.443137,-0.450980,-0.780392,0.132568,0.339111],
+		[60.000000,-21.213209,-21.213200,-0.443137,-0.639216,-0.639216,0.088196,0.558594],
+		[80.000000,-34.641022,-19.999994,-0.443137,-0.780392,-0.450980,0.043823,0.779297],
+		[100.000000,-48.296295,-12.940946,-0.443137,-0.866667,-0.239216,0.000000,1.000000],
+		[80.000000,-38.637035,-10.352757,-0.443137,-0.866667,-0.239216,0.000000,0.779297],
+		[60.000000,-25.980766,-14.999995,-0.443137,-0.780392,-0.450980,0.043823,0.558594],
+		[60.000000,-28.977776,-7.764568,-0.443137,-0.866667,-0.239216,0.000000,0.558594],
+		[40.000000,-14.142138,-14.142131,-0.443137,-0.639216,-0.639216,0.088196,0.339111],
+		[40.000000,-17.320509,-9.999996,-0.443137,-0.780392,-0.450980,0.043823,0.339111],
+		[40.000000,-19.318518,-5.176378,-0.443137,-0.866667,-0.239216,0.000000,0.339111],
+		[20.000000,-5.000002,-8.660252,-0.443137,-0.450980,-0.780392,0.132568,0.121521],
+		[0.000015,-0.050000,-0.086604,-0.443137,-0.450980,-0.780392,0.132568,0.000000],
+		[20.000000,-7.071069,-7.071065,-0.443137,-0.639216,-0.639216,0.088196,0.121521],
+		[0.000015,-0.070711,-0.070712,-0.443137,-0.639216,-0.639216,0.088196,0.000000],
+		[20.000000,-8.660254,-4.999998,-0.443137,-0.780392,-0.450980,0.043823,0.121521],
+		[0.000015,-0.086603,-0.050001,-0.443137,-0.780392,-0.450980,0.043823,0.000000],
+		[20.000000,-9.659259,-2.588189,-0.443137,-0.866667,-0.239216,0.000000,0.121521],
+		[0.000015,-0.096593,-0.025883,-0.443137,-0.866667,-0.239216,0.000000,0.000000],
+		[0.000015,0.025882,0.096591,-1.000000,-0.003922,-0.003922,0.458252,0.330811],
+		[0.000015,-0.000000,0.099999,-1.000000,-0.003922,-0.003922,0.461670,0.324951],
+		[0.000015,-0.025882,0.096591,-1.000000,-0.003922,-0.003922,0.463379,0.318359],
+		[0.000015,-0.070711,0.070710,-1.000000,-0.003922,-0.003922,0.461670,0.304688],
+		[0.000015,-0.050000,0.086601,-1.000000,-0.003922,-0.003922,0.463379,0.311523],
+		[0.000015,0.050000,0.086601,-1.000000,-0.003922,-0.003922,0.453369,0.335693],
+		[0.000015,0.070710,0.070709,-1.000000,-0.003922,-0.003922,0.447510,0.339111],
+		[0.000015,0.086602,0.049999,-1.000000,-0.003922,-0.003922,0.440918,0.340820],
+		[0.000015,0.096592,0.025881,-1.000000,-0.003922,-0.003922,0.434082,0.340820],
+		[0.000015,0.099999,-0.000001,-1.000000,-0.003922,-0.003922,0.427246,0.339111],
+		[0.000015,0.096592,-0.025883,-1.000000,-0.003922,-0.003922,0.421387,0.335693],
+		[0.000015,0.086602,-0.050001,-1.000000,-0.003922,-0.003922,0.416504,0.330811],
+		[0.000015,0.070710,-0.070712,-1.000000,-0.003922,-0.003922,0.413086,0.324951],
+		[0.000015,0.050000,-0.086604,-1.000000,-0.003922,-0.003922,0.411377,0.318359],
+		[0.000015,0.025881,-0.096594,-1.000000,-0.003922,-0.003922,0.411377,0.311523],
+		[0.000015,-0.000000,-0.100001,-1.000000,-0.003922,-0.003922,0.413086,0.304688],
+		[0.000015,-0.025882,-0.096594,-1.000000,-0.003922,-0.003922,0.416504,0.298828],
+		[0.000015,-0.050000,-0.086604,-1.000000,-0.003922,-0.003922,0.421387,0.293945],
+		[0.000015,-0.070711,-0.070712,-1.000000,-0.003922,-0.003922,0.427246,0.290527],
+		[0.000015,-0.086603,-0.050001,-1.000000,-0.003922,-0.003922,0.434082,0.288818],
+		[0.000015,-0.096593,-0.025883,-1.000000,-0.003922,-0.003922,0.440918,0.288818],
+		[0.000015,-0.100001,-0.000001,-1.000000,-0.003922,-0.003922,0.447510,0.290527],
+		[0.000015,-0.096593,0.025881,-1.000000,-0.003922,-0.003922,0.453369,0.293945],
+		[0.000015,-0.086603,0.049999,-1.000000,-0.003922,-0.003922,0.458252,0.298828],
+		[100.000000,25.000029,43.301258,0.992157,-0.003922,-0.003922,0.750000,0.066956],
+		[100.000000,35.355362,35.355316,0.992157,-0.003922,-0.003922,0.853516,0.146362],
+		[100.000000,43.301285,24.999975,0.992157,-0.003922,-0.003922,0.932617,0.250000],
+		[100.000000,-0.000000,50.000000,0.992157,-0.003922,-0.003922,0.500000,0.000000],
+		[100.000000,12.940989,48.296280,0.992157,-0.003922,-0.003922,0.629395,0.017029],
+		[100.000000,48.296295,12.940927,0.992157,-0.003922,-0.003922,0.982910,0.370361],
+		[100.000000,50.000000,-0.000023,0.992157,-0.003922,-0.003922,1.000000,0.500000],
+		[100.000000,43.301262,-25.000015,0.992157,-0.003922,-0.003922,0.932617,0.750000],
+		[100.000000,48.296288,-12.940971,0.992157,-0.003922,-0.003922,0.982910,0.629395],
+		[100.000000,-25.000000,43.301273,0.992157,-0.003922,-0.003922,0.250000,0.066956],
+		[100.000000,-12.940952,48.296291,0.992157,-0.003922,-0.003922,0.370361,0.017029],
+		[100.000000,35.355320,-35.355358,0.992157,-0.003922,-0.003922,0.853516,0.853516],
+		[100.000000,24.999979,-43.301281,0.992157,-0.003922,-0.003922,0.749512,0.932617],
+		[100.000000,-43.301273,24.999998,0.992157,-0.003922,-0.003922,0.066956,0.250000],
+		[100.000000,-35.355339,35.355339,0.992157,-0.003922,-0.003922,0.146362,0.146362],
+		[100.000000,-43.301277,-24.999992,0.992157,-0.003922,-0.003922,0.066956,0.749512],
+		[100.000000,-0.000019,-50.000000,0.992157,-0.003922,-0.003922,0.499756,1.000000],
+		[100.000000,12.940931,-48.296295,0.992157,-0.003922,-0.003922,0.629395,0.982910],
+		[100.000000,-50.000000,0.000004,0.992157,-0.003922,-0.003922,0.000000,0.500000],
+		[100.000000,-48.296291,12.940954,0.992157,-0.003922,-0.003922,0.017029,0.370361],
+		[100.000000,-48.296295,-12.940946,0.992157,-0.003922,-0.003922,0.017029,0.629395],
+		[100.000000,-25.000011,-43.301262,0.992157,-0.003922,-0.003922,0.249878,0.932617],
+		[100.000000,-12.940969,-48.296288,0.992157,-0.003922,-0.003922,0.370361,0.982910],
+		[100.000000,-35.355347,-35.355331,0.992157,-0.003922,-0.003922,0.146362,0.853516]
+	],
+	"indices":[
+		[0,1,2],
+		[2,3,0],
+		[3,2,4],
+		[5,0,3],
+		[4,6,3],
+		[6,4,7],
+		[3,8,5],
+		[8,3,6],
+		[9,5,8],
+		[7,10,6],
+		[10,7,11],
+		[6,12,8],
+		[12,6,10],
+		[8,13,9],
+		[13,8,12],
+		[14,9,13],
+		[11,15,10],
+		[15,11,16],
+		[16,17,15],
+		[13,18,14],
+		[19,14,18],
+		[20,15,17],
+		[17,21,20],
+		[22,10,15],
+		[15,20,22],
+		[10,22,12],
+		[23,20,21],
+		[21,24,23],
+		[25,22,20],
+		[20,23,25],
+		[26,12,22],
+		[12,26,13],
+		[22,25,26],
+		[18,13,26],
+		[27,26,25],
+		[26,27,18],
+		[28,25,23],
+		[25,28,27],
+		[29,23,24],
+		[23,29,28],
+		[24,30,29],
+		[31,18,27],
+		[18,31,19],
+		[32,19,31],
+		[27,33,31],
+		[33,27,28],
+		[31,34,32],
+		[34,31,33],
+		[35,32,34],
+		[28,36,33],
+		[36,28,29],
+		[33,37,34],
+		[37,33,36],
+		[34,38,35],
+		[38,34,37],
+		[39,35,38],
+		[29,40,36],
+		[40,29,30],
+		[30,41,40],
+		[38,42,39],
+		[43,39,42],
+		[44,40,41],
+		[41,45,44],
+		[46,36,40],
+		[40,44,46],
+		[36,46,37],
+		[47,44,45],
+		[45,48,47],
+		[49,46,44],
+		[44,47,49],
+		[50,37,46],
+		[37,50,38],
+		[46,49,50],
+		[42,38,50],
+		[51,50,49],
+		[50,51,42],
+		[52,49,47],
+		[49,52,51],
+		[53,47,48],
+		[47,53,52],
+		[48,54,53],
+		[55,42,51],
+		[42,55,43],
+		[56,43,55],
+		[51,57,55],
+		[57,51,52],
+		[55,58,56],
+		[58,55,57],
+		[59,56,58],
+		[52,60,57],
+		[60,52,53],
+		[57,61,58],
+		[61,57,60],
+		[58,62,59],
+		[62,58,61],
+		[63,59,62],
+		[53,64,60],
+		[64,53,54],
+		[54,65,64],
+		[62,66,63],
+		[67,63,66],
+		[68,64,65],
+		[65,69,68],
+		[70,60,64],
+		[64,68,70],
+		[60,70,61],
+		[71,68,69],
+		[69,72,71],
+		[73,70,68],
+		[68,71,73],
+		[74,61,70],
+		[61,74,62],
+		[70,73,74],
+		[66,62,74],
+		[75,74,73],
+		[74,75,66],
+		[76,73,71],
+		[73,76,75],
+		[77,71,72],
+		[71,77,76],
+		[72,78,77],
+		[79,66,75],
+		[66,79,67],
+		[80,67,79],
+		[75,81,79],
+		[81,75,76],
+		[79,82,80],
+		[82,79,81],
+		[83,80,82],
+		[76,84,81],
+		[84,76,77],
+		[81,85,82],
+		[85,81,84],
+		[82,86,83],
+		[86,82,85],
+		[87,83,86],
+		[77,88,84],
+		[88,77,78],
+		[78,89,88],
+		[86,90,87],
+		[91,87,90],
+		[92,88,89],
+		[89,93,92],
+		[94,84,88],
+		[88,92,94],
+		[84,94,85],
+		[95,92,93],
+		[93,96,95],
+		[97,94,92],
+		[92,95,97],
+		[98,85,94],
+		[85,98,86],
+		[94,97,98],
+		[90,86,98],
+		[99,98,97],
+		[98,99,90],
+		[100,97,95],
+		[97,100,99],
+		[101,95,96],
+		[95,101,100],
+		[96,102,101],
+		[103,90,99],
+		[90,103,91],
+		[104,91,103],
+		[99,105,103],
+		[105,99,100],
+		[103,106,104],
+		[106,103,105],
+		[107,104,106],
+		[100,108,105],
+		[108,100,101],
+		[105,109,106],
+		[109,105,108],
+		[106,110,107],
+		[110,106,109],
+		[111,107,110],
+		[101,112,108],
+		[112,101,102],
+		[102,113,112],
+		[110,114,111],
+		[115,111,114],
+		[116,112,113],
+		[113,117,116],
+		[118,108,112],
+		[112,116,118],
+		[108,118,109],
+		[119,116,117],
+		[117,120,119],
+		[121,118,116],
+		[116,119,121],
+		[122,109,118],
+		[109,122,110],
+		[118,121,122],
+		[114,110,122],
+		[123,122,121],
+		[122,123,114],
+		[124,121,119],
+		[121,124,123],
+		[125,119,120],
+		[119,125,124],
+		[120,126,125],
+		[127,114,123],
+		[114,127,115],
+		[128,115,127],
+		[123,129,127],
+		[129,123,124],
+		[127,130,128],
+		[130,127,129],
+		[131,128,130],
+		[124,132,129],
+		[132,124,125],
+		[129,133,130],
+		[133,129,132],
+		[130,134,131],
+		[134,130,133],
+		[135,131,134],
+		[134,136,135],
+		[136,134,137],
+		[133,137,134],
+		[137,138,136],
+		[137,133,139],
+		[132,139,133],
+		[138,137,140],
+		[139,140,137],
+		[140,141,138],
+		[139,132,142],
+		[125,142,132],
+		[142,125,126],
+		[126,143,142],
+		[142,144,139],
+		[144,142,143],
+		[140,139,144],
+		[143,145,144],
+		[144,146,140],
+		[146,144,145],
+		[141,140,146],
+		[145,147,146],
+		[146,148,141],
+		[148,146,147],
+		[147,149,148],
+		[150,151,152],
+		[153,150,152],
+		[153,152,154],
+		[153,155,150],
+		[153,156,155],
+		[153,157,156],
+		[153,158,157],
+		[153,159,158],
+		[153,160,159],
+		[153,161,160],
+		[153,162,161],
+		[153,163,162],
+		[153,164,163],
+		[153,165,164],
+		[153,166,165],
+		[153,167,166],
+		[153,168,167],
+		[153,169,168],
+		[153,170,169],
+		[153,171,170],
+		[153,172,171],
+		[153,173,172],
+		[174,175,176],
+		[177,178,174],
+		[177,174,176],
+		[176,179,180],
+		[176,180,181],
+		[180,182,181],
+		[177,176,181],
+		[183,184,177],
+		[181,185,186],
+		[183,177,187],
+		[183,187,188],
+		[177,181,189],
+		[177,189,187],
+		[181,186,190],
+		[186,191,190],
+		[181,190,189],
+		[192,193,187],
+		[189,192,187],
+		[189,194,192],
+		[190,195,189],
+		[190,196,195],
+		[195,197,189]
+	]
+}
diff --git a/Chapter13/Shaders/GBufferGlobal.frag b/Chapter13/Shaders/GBufferGlobal.frag
index 1b28218487043e53a7f50464886ae1de9525f82c..edead31d438277ee4d48717c7c0c3aaf999c22a9 100644
--- a/Chapter13/Shaders/GBufferGlobal.frag
+++ b/Chapter13/Shaders/GBufferGlobal.frag
@@ -60,6 +60,7 @@ void main()
 	if (NdotL > 0)
 	{
 		vec3 Diffuse = uDirLight.mDiffuseColor * dot(N, L);
+		Phong += Diffuse;
 	}
 	// Clamp light between 0-1 RGB values
 	Phong = clamp(Phong, 0.0, 1.0);
diff --git a/Exercises/4.2/Actor.cpp b/Exercises/4.2/Actor.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..4b8eea91e2b71829e67e649fa022c5c600dda895
--- /dev/null
+++ b/Exercises/4.2/Actor.cpp
@@ -0,0 +1,101 @@
+// ----------------------------------------------------------------
+// From Game Programming in C++ by Sanjay Madhav
+// Copyright (C) 2017 Sanjay Madhav. All rights reserved.
+// 
+// Released under the BSD License
+// See LICENSE in root directory for full details.
+// ----------------------------------------------------------------
+
+#include "Actor.h"
+#include "Game.h"
+#include "Component.h"
+#include <algorithm>
+
+Actor::Actor(Game* game)
+	:mState(EActive)
+	, mPosition(Vector2::Zero)
+	, mScale(1.0f)
+	, mRotation(0.0f)
+	, mGame(game)
+{
+	mGame->AddActor(this);
+}
+
+Actor::~Actor()
+{
+	mGame->RemoveActor(this);
+	// Need to delete components
+	// Because ~Component calls RemoveComponent, need a different style loop
+	while (!mComponents.empty())
+	{
+		delete mComponents.back();
+	}
+}
+
+void Actor::Update(float deltaTime)
+{
+	if (mState == EActive)
+	{
+		UpdateComponents(deltaTime);
+		UpdateActor(deltaTime);
+	}
+}
+
+void Actor::UpdateComponents(float deltaTime)
+{
+	for (auto comp : mComponents)
+	{
+		comp->Update(deltaTime);
+	}
+}
+
+void Actor::UpdateActor(float deltaTime)
+{
+}
+
+void Actor::ProcessInput(const uint8_t* keyState)
+{
+	if (mState == EActive)
+	{
+		// First process input for components
+		for (auto comp : mComponents)
+		{
+			comp->ProcessInput(keyState);
+		}
+
+		ActorInput(keyState);
+	}
+}
+
+void Actor::ActorInput(const uint8_t* keyState)
+{
+}
+
+void Actor::AddComponent(Component* component)
+{
+	// Find the insertion point in the sorted vector
+	// (The first element with a order higher than me)
+	int myOrder = component->GetUpdateOrder();
+	auto iter = mComponents.begin();
+	for (;
+		iter != mComponents.end();
+		++iter)
+	{
+		if (myOrder < (*iter)->GetUpdateOrder())
+		{
+			break;
+		}
+	}
+
+	// Inserts element before position of iterator
+	mComponents.insert(iter, component);
+}
+
+void Actor::RemoveComponent(Component* component)
+{
+	auto iter = std::find(mComponents.begin(), mComponents.end(), component);
+	if (iter != mComponents.end())
+	{
+		mComponents.erase(iter);
+	}
+}
diff --git a/Exercises/4.2/Actor.h b/Exercises/4.2/Actor.h
new file mode 100644
index 0000000000000000000000000000000000000000..767d3c1a2e7b57616f5ab6ebcabb1dda0e3148a4
--- /dev/null
+++ b/Exercises/4.2/Actor.h
@@ -0,0 +1,69 @@
+// ----------------------------------------------------------------
+// From Game Programming in C++ by Sanjay Madhav
+// Copyright (C) 2017 Sanjay Madhav. All rights reserved.
+// 
+// Released under the BSD License
+// See LICENSE in root directory for full details.
+// ----------------------------------------------------------------
+
+#pragma once
+#include <vector>
+#include "Math.h"
+#include <cstdint>
+
+class Actor
+{
+public:
+	enum State
+	{
+		EActive,
+		EPaused,
+		EDead
+	};
+
+	Actor(class Game* game);
+	virtual ~Actor();
+
+	// Update function called from Game (not overridable)
+	void Update(float deltaTime);
+	// Updates all the components attached to the actor (not overridable)
+	void UpdateComponents(float deltaTime);
+	// Any actor-specific update code (overridable)
+	virtual void UpdateActor(float deltaTime);
+
+	// ProcessInput function called from Game (not overridable)
+	void ProcessInput(const uint8_t* keyState);
+	// Any actor-specific input code (overridable)
+	virtual void ActorInput(const uint8_t* keyState);
+
+	// Getters/setters
+	const Vector2& GetPosition() const { return mPosition; }
+	void SetPosition(const Vector2& pos) { mPosition = pos; }
+	float GetScale() const { return mScale; }
+	void SetScale(float scale) { mScale = scale; }
+	float GetRotation() const { return mRotation; }
+	void SetRotation(float rotation) { mRotation = rotation; }
+
+	Vector2 GetForward() const { return Vector2(Math::Cos(mRotation), -Math::Sin(mRotation)); }
+
+	State GetState() const { return mState; }
+	void SetState(State state) { mState = state; }
+
+	class Game* GetGame() { return mGame; }
+
+
+	// Add/remove components
+	void AddComponent(class Component* component);
+	void RemoveComponent(class Component* component);
+private:
+	// Actor's state
+	State mState;
+
+	// Transform
+	Vector2 mPosition;
+	float mScale;
+	float mRotation;
+
+	std::vector<class Component*> mComponents;
+	class Game* mGame;
+};
diff --git a/Exercises/4.2/Assets/Board.png b/Exercises/4.2/Assets/Board.png
new file mode 100644
index 0000000000000000000000000000000000000000..933925e429de390ba43a540c76f313916289a2b8
Binary files /dev/null and b/Exercises/4.2/Assets/Board.png differ
diff --git a/Exercises/4.2/Assets/RedPiece.png b/Exercises/4.2/Assets/RedPiece.png
new file mode 100644
index 0000000000000000000000000000000000000000..2bef54cce2b8c95e9ec62ff180507e8abbb21c9b
Binary files /dev/null and b/Exercises/4.2/Assets/RedPiece.png differ
diff --git a/Exercises/4.2/Assets/YellowPiece.png b/Exercises/4.2/Assets/YellowPiece.png
new file mode 100644
index 0000000000000000000000000000000000000000..4dc36966b003e8ba68502e529ebf50e740f72f3c
Binary files /dev/null and b/Exercises/4.2/Assets/YellowPiece.png differ
diff --git a/Exercises/4.2/Board.cpp b/Exercises/4.2/Board.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..65d013aa7dc053891adee6cc7eeda457097196e1
--- /dev/null
+++ b/Exercises/4.2/Board.cpp
@@ -0,0 +1,223 @@
+// ----------------------------------------------------------------
+// From Game Programming in C++ by Sanjay Madhav
+// Copyright (C) 2017 Sanjay Madhav. All rights reserved.
+// 
+// Released under the BSD License
+// See LICENSE in root directory for full details.
+// ----------------------------------------------------------------
+
+#include "Board.h"
+#include "Random.h"
+
+BoardState::BoardState()
+{
+	for (int i = 0; i < 6; i++)
+	{
+		for (int j = 0; j < 7; j++)
+		{
+			mBoard[i][j] = Empty;
+		}
+	}
+}
+
+std::vector<BoardState*> BoardState::GetPossibleMoves(SquareState player) const
+{
+	std::vector<BoardState*> retVal;
+
+	// For each column, find if a move is possible
+	for (int col = 0; col < 7; col++)
+	{
+		for (int row = 5; row >= 0; row--)
+		{
+			if (mBoard[row][col] == BoardState::Empty)
+			{
+				retVal.emplace_back(new BoardState(*this));
+				retVal.back()->mBoard[row][col] = player;
+				break;
+			}
+		}
+	}
+
+	return retVal;
+}
+
+bool BoardState::IsTerminal() const
+{
+	// Is the board full?
+	if (IsFull())
+	{
+		return true;
+	}
+
+	// Is there a four-in-a-row?
+	int fourInRow = GetFourInARow();
+	if (fourInRow != 0)
+	{
+		return true;
+	}
+
+	return false;
+}
+
+float BoardState::GetScore() const
+{
+	// If the board is full, the score is 0
+	if (IsFull())
+	{
+		return 0.0f;
+	}
+
+	// Is there a four-in-a-row?
+	int fourInRow = GetFourInARow();
+	if (fourInRow != 0)
+	{
+		return static_cast<float>(fourInRow);
+	}
+
+	return CalculateHeuristic();
+}
+
+bool BoardState::IsFull() const
+{
+	bool isFull = true;
+	for (int i = 0; i < 6; i++)
+	{
+		for (int j = 0; j < 7; j++)
+		{
+			if (mBoard[i][j] == Empty)
+			{
+				isFull = false;
+			}
+		}
+	}
+
+	return isFull;
+}
+
+int BoardState::GetFourInARow() const
+{
+	// Returns -1 if yellow wins, 1 if red wins, 0 otherwise
+
+	// Check if there's a row with four in a row
+	for (int row = 0; row < 6; row++)
+	{
+		for (int col = 0; col < 4; col++)
+		{
+			if (mBoard[row][col] == mBoard[row][col + 1] &&
+				mBoard[row][col] == mBoard[row][col + 2] &&
+				mBoard[row][col] == mBoard[row][col + 3])
+			{
+				if (mBoard[row][col] == BoardState::Yellow)
+				{
+					return -1;
+				}
+				else if (mBoard[row][col] == BoardState::Red)
+				{
+					return 1;
+				}
+			}
+		}
+	}
+
+	// Check if there's a column with four in a row
+	for (int col = 0; col < 7; col++)
+	{
+		for (int row = 0; row < 3; row++)
+		{
+			if (mBoard[row][col] == mBoard[row + 1][col] &&
+				mBoard[row][col] == mBoard[row + 2][col] &&
+				mBoard[row][col] == mBoard[row + 3][col])
+			{
+				if (mBoard[row][col] == BoardState::Yellow)
+				{
+					return -1;
+				}
+				else if (mBoard[row][col] == BoardState::Red)
+				{
+					return 1;
+				}
+			}
+		}
+	}
+
+	// Check if there's a right diagonal four in a row
+	for (int col = 0; col < 4; col++)
+	{
+		for (int row = 0; row < 3; row++)
+		{
+			if (mBoard[row][col] == mBoard[row + 1][col + 1] &&
+				mBoard[row][col] == mBoard[row + 2][col + 2] &&
+				mBoard[row][col] == mBoard[row + 3][col + 3])
+			{
+				if (mBoard[row][col] == BoardState::Yellow)
+				{
+					return -1;
+				}
+				else if (mBoard[row][col] == BoardState::Red)
+				{
+					return 1;
+				}
+			}
+		}
+	}
+
+	// Check if there's a left diagonal for in a row
+	for (int col = 0; col < 4; col++)
+	{
+		for (int row = 3; row < 6; row++)
+		{
+			if (mBoard[row][col] == mBoard[row - 1][col + 1] &&
+				mBoard[row][col] == mBoard[row - 2][col + 2] &&
+				mBoard[row][col] == mBoard[row - 3][col + 3])
+			{
+				if (mBoard[row][col] == BoardState::Yellow)
+				{
+					return -1;
+				}
+				else if (mBoard[row][col] == BoardState::Red)
+				{
+					return 1;
+				}
+			}
+		}
+	}
+	return 0;
+}
+
+float BoardState::CalculateHeuristic() const
+{
+	// TODO: You could change this to calculate an actual heuristic
+	return 0.0f;
+}
+
+bool TryPlayerMove(BoardState* state, int column)
+{
+	// Find the first row in that column that's available
+	// (if any)
+	for (int row = 5; row >= 0; row--)
+	{
+		if (state->mBoard[row][column] == BoardState::Empty)
+		{
+			state->mBoard[row][column] = BoardState::Yellow;
+			return true;
+		}
+	}
+
+	return false;
+}
+
+void CPUMove(BoardState* state)
+{
+	// For now, this just randomly picks one of the possible moves
+	std::vector<BoardState*> moves = state->GetPossibleMoves(BoardState::Red);
+
+	int index = Random::GetIntRange(0, moves.size() - 1);
+
+	*state = *moves[index];
+
+	// Clear up memory from possible moves
+	for (auto state : moves)
+	{
+		delete state;
+	}
+}
diff --git a/Exercises/4.2/Board.h b/Exercises/4.2/Board.h
new file mode 100644
index 0000000000000000000000000000000000000000..eff8393abfc8a4b9ae0e67adc40dfadb960f432a
--- /dev/null
+++ b/Exercises/4.2/Board.h
@@ -0,0 +1,32 @@
+// ----------------------------------------------------------------
+// From Game Programming in C++ by Sanjay Madhav
+// Copyright (C) 2017 Sanjay Madhav. All rights reserved.
+// 
+// Released under the BSD License
+// See LICENSE in root directory for full details.
+// ----------------------------------------------------------------
+
+#pragma once
+#include <vector>
+
+class BoardState
+{
+public:
+	enum SquareState { Empty, Red, Yellow };
+	BoardState();
+	std::vector<BoardState*> GetPossibleMoves(SquareState player) const;
+	bool IsTerminal() const;
+	float GetScore() const;
+
+	SquareState mBoard[6][7];
+protected:
+	bool IsFull() const;
+	int GetFourInARow() const;
+	float CalculateHeuristic() const;
+};
+
+// Try to place the player's piece
+bool TryPlayerMove(class BoardState* state, int column);
+
+// Make the next CPU move
+void CPUMove(class BoardState* state);
\ No newline at end of file
diff --git a/Exercises/4.2/Chapter04-mac.xcodeproj/project.pbxproj b/Exercises/4.2/Chapter04-mac.xcodeproj/project.pbxproj
new file mode 100644
index 0000000000000000000000000000000000000000..82443e7c200e49b9777121cc36e7f7fe417f79f8
--- /dev/null
+++ b/Exercises/4.2/Chapter04-mac.xcodeproj/project.pbxproj
@@ -0,0 +1,402 @@
+// !$*UTF8*$!
+{
+	archiveVersion = 1;
+	classes = {
+	};
+	objectVersion = 46;
+	objects = {
+
+/* Begin PBXBuildFile section */
+		9203E9F01F0DD69900F9FFC2 /* Tower.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9203E9EE1F0DD69900F9FFC2 /* Tower.cpp */; };
+		9203E9F31F0DE24000F9FFC2 /* Enemy.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9203E9F11F0DE24000F9FFC2 /* Enemy.cpp */; };
+		9203E9F61F0DF13600F9FFC2 /* NavComponent.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9203E9F41F0DF13600F9FFC2 /* NavComponent.cpp */; };
+		9203E9F91F0F12FE00F9FFC2 /* Bullet.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9203E9F71F0F12FE00F9FFC2 /* Bullet.cpp */; };
+		9223C4781F009428009A94D7 /* Game.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9223C4671F009428009A94D7 /* Game.cpp */; };
+		9223C4791F009428009A94D7 /* Actor.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9223C4681F009428009A94D7 /* Actor.cpp */; };
+		9223C47C1F009428009A94D7 /* Component.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9223C46E1F009428009A94D7 /* Component.cpp */; };
+		9223C47D1F009428009A94D7 /* Main.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9223C4711F009428009A94D7 /* Main.cpp */; };
+		9223C47E1F009428009A94D7 /* Math.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9223C4721F009428009A94D7 /* Math.cpp */; };
+		9223C4801F009428009A94D7 /* SpriteComponent.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9223C4761F009428009A94D7 /* SpriteComponent.cpp */; };
+		9223C48B1F0CA3CE009A94D7 /* MoveComponent.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9223C48A1F0CA3CE009A94D7 /* MoveComponent.cpp */; };
+		9223C48F1F0CA67A009A94D7 /* Tile.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9223C48D1F0CA67A009A94D7 /* Tile.cpp */; };
+		9223C4951F0CA766009A94D7 /* CircleComponent.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9223C4911F0CA766009A94D7 /* CircleComponent.cpp */; };
+		9223C4981F0DBD69009A94D7 /* Grid.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9223C4961F0DBD69009A94D7 /* Grid.cpp */; };
+		92D324FB1B697389005A86C7 /* CoreFoundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 92D324FA1B697389005A86C7 /* CoreFoundation.framework */; };
+		92E3918B1FE87D6000D8C362 /* AIState.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 92E391861FE87D6000D8C362 /* AIState.cpp */; };
+		92E3918C1FE87D6000D8C362 /* AIComponent.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 92E391881FE87D6000D8C362 /* AIComponent.cpp */; };
+		92E3918D1FE87D6000D8C362 /* Search.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 92E3918A1FE87D6000D8C362 /* Search.cpp */; };
+		92E46E941B6353E50035CD21 /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 92E46E931B6353E50035CD21 /* OpenGL.framework */; };
+/* End PBXBuildFile section */
+
+/* Begin PBXFileReference section */
+		9203E9EE1F0DD69900F9FFC2 /* Tower.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Tower.cpp; sourceTree = "<group>"; };
+		9203E9EF1F0DD69900F9FFC2 /* Tower.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Tower.h; sourceTree = "<group>"; };
+		9203E9F11F0DE24000F9FFC2 /* Enemy.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Enemy.cpp; sourceTree = "<group>"; };
+		9203E9F21F0DE24000F9FFC2 /* Enemy.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Enemy.h; sourceTree = "<group>"; };
+		9203E9F41F0DF13600F9FFC2 /* NavComponent.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = NavComponent.cpp; sourceTree = "<group>"; };
+		9203E9F51F0DF13600F9FFC2 /* NavComponent.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = NavComponent.h; sourceTree = "<group>"; };
+		9203E9F71F0F12FE00F9FFC2 /* Bullet.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Bullet.cpp; sourceTree = "<group>"; };
+		9203E9F81F0F12FE00F9FFC2 /* Bullet.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Bullet.h; sourceTree = "<group>"; };
+		9223C4671F009428009A94D7 /* Game.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Game.cpp; sourceTree = "<group>"; };
+		9223C4681F009428009A94D7 /* Actor.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Actor.cpp; sourceTree = "<group>"; };
+		9223C4691F009428009A94D7 /* Actor.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Actor.h; sourceTree = "<group>"; };
+		9223C46E1F009428009A94D7 /* Component.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Component.cpp; sourceTree = "<group>"; };
+		9223C46F1F009428009A94D7 /* Component.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Component.h; sourceTree = "<group>"; };
+		9223C4701F009428009A94D7 /* Game.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Game.h; sourceTree = "<group>"; };
+		9223C4711F009428009A94D7 /* Main.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Main.cpp; sourceTree = "<group>"; };
+		9223C4721F009428009A94D7 /* Math.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Math.cpp; sourceTree = "<group>"; };
+		9223C4731F009428009A94D7 /* Math.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Math.h; sourceTree = "<group>"; };
+		9223C4761F009428009A94D7 /* SpriteComponent.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = SpriteComponent.cpp; sourceTree = "<group>"; };
+		9223C4771F009428009A94D7 /* SpriteComponent.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SpriteComponent.h; sourceTree = "<group>"; };
+		9223C48A1F0CA3CE009A94D7 /* MoveComponent.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = MoveComponent.cpp; sourceTree = "<group>"; };
+		9223C48C1F0CA3D4009A94D7 /* MoveComponent.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MoveComponent.h; sourceTree = "<group>"; };
+		9223C48D1F0CA67A009A94D7 /* Tile.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Tile.cpp; sourceTree = "<group>"; };
+		9223C48E1F0CA67A009A94D7 /* Tile.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Tile.h; sourceTree = "<group>"; };
+		9223C4911F0CA766009A94D7 /* CircleComponent.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CircleComponent.cpp; sourceTree = "<group>"; };
+		9223C4931F0CA766009A94D7 /* CircleComponent.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CircleComponent.h; sourceTree = "<group>"; };
+		9223C4961F0DBD69009A94D7 /* Grid.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Grid.cpp; sourceTree = "<group>"; };
+		9223C4971F0DBD69009A94D7 /* Grid.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Grid.h; sourceTree = "<group>"; };
+		92D324FA1B697389005A86C7 /* CoreFoundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreFoundation.framework; path = System/Library/Frameworks/CoreFoundation.framework; sourceTree = SDKROOT; };
+		92E391861FE87D6000D8C362 /* AIState.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = AIState.cpp; sourceTree = "<group>"; };
+		92E391871FE87D6000D8C362 /* AIComponent.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AIComponent.h; sourceTree = "<group>"; };
+		92E391881FE87D6000D8C362 /* AIComponent.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = AIComponent.cpp; sourceTree = "<group>"; };
+		92E391891FE87D6000D8C362 /* AIState.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AIState.h; sourceTree = "<group>"; };
+		92E3918A1FE87D6000D8C362 /* Search.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Search.cpp; sourceTree = "<group>"; };
+		92E46DF71B634EA30035CD21 /* Game-mac */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = "Game-mac"; sourceTree = BUILT_PRODUCTS_DIR; };
+		92E46E931B6353E50035CD21 /* OpenGL.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = OpenGL.framework; path = System/Library/Frameworks/OpenGL.framework; sourceTree = SDKROOT; };
+/* End PBXFileReference section */
+
+/* Begin PBXFrameworksBuildPhase section */
+		92E46DF41B634EA30035CD21 /* Frameworks */ = {
+			isa = PBXFrameworksBuildPhase;
+			buildActionMask = 2147483647;
+			files = (
+				92D324FB1B697389005A86C7 /* CoreFoundation.framework in Frameworks */,
+				92E46E941B6353E50035CD21 /* OpenGL.framework in Frameworks */,
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+		};
+/* End PBXFrameworksBuildPhase section */
+
+/* Begin PBXGroup section */
+		92E46DEE1B634EA30035CD21 = {
+			isa = PBXGroup;
+			children = (
+				9223C4681F009428009A94D7 /* Actor.cpp */,
+				9223C4691F009428009A94D7 /* Actor.h */,
+				92E391881FE87D6000D8C362 /* AIComponent.cpp */,
+				92E391871FE87D6000D8C362 /* AIComponent.h */,
+				92E391861FE87D6000D8C362 /* AIState.cpp */,
+				92E391891FE87D6000D8C362 /* AIState.h */,
+				9203E9F71F0F12FE00F9FFC2 /* Bullet.cpp */,
+				9203E9F81F0F12FE00F9FFC2 /* Bullet.h */,
+				9223C46E1F009428009A94D7 /* Component.cpp */,
+				9223C46F1F009428009A94D7 /* Component.h */,
+				9223C4911F0CA766009A94D7 /* CircleComponent.cpp */,
+				9223C4931F0CA766009A94D7 /* CircleComponent.h */,
+				9203E9F11F0DE24000F9FFC2 /* Enemy.cpp */,
+				9203E9F21F0DE24000F9FFC2 /* Enemy.h */,
+				9223C4671F009428009A94D7 /* Game.cpp */,
+				9223C4701F009428009A94D7 /* Game.h */,
+				9223C4961F0DBD69009A94D7 /* Grid.cpp */,
+				9223C4971F0DBD69009A94D7 /* Grid.h */,
+				9223C4711F009428009A94D7 /* Main.cpp */,
+				9223C4721F009428009A94D7 /* Math.cpp */,
+				9223C4731F009428009A94D7 /* Math.h */,
+				9223C48A1F0CA3CE009A94D7 /* MoveComponent.cpp */,
+				9223C48C1F0CA3D4009A94D7 /* MoveComponent.h */,
+				9203E9F41F0DF13600F9FFC2 /* NavComponent.cpp */,
+				9203E9F51F0DF13600F9FFC2 /* NavComponent.h */,
+				92E3918A1FE87D6000D8C362 /* Search.cpp */,
+				9223C4761F009428009A94D7 /* SpriteComponent.cpp */,
+				9223C4771F009428009A94D7 /* SpriteComponent.h */,
+				9223C48D1F0CA67A009A94D7 /* Tile.cpp */,
+				9223C48E1F0CA67A009A94D7 /* Tile.h */,
+				9203E9EE1F0DD69900F9FFC2 /* Tower.cpp */,
+				9203E9EF1F0DD69900F9FFC2 /* Tower.h */,
+				92E46DF81B634EA30035CD21 /* Products */,
+				92D324FA1B697389005A86C7 /* CoreFoundation.framework */,
+				92E46E931B6353E50035CD21 /* OpenGL.framework */,
+			);
+			sourceTree = "<group>";
+		};
+		92E46DF81B634EA30035CD21 /* Products */ = {
+			isa = PBXGroup;
+			children = (
+				92E46DF71B634EA30035CD21 /* Game-mac */,
+			);
+			name = Products;
+			sourceTree = "<group>";
+		};
+/* End PBXGroup section */
+
+/* Begin PBXNativeTarget section */
+		92E46DF61B634EA30035CD21 /* Game-mac */ = {
+			isa = PBXNativeTarget;
+			buildConfigurationList = 92E46DFE1B634EA40035CD21 /* Build configuration list for PBXNativeTarget "Game-mac" */;
+			buildPhases = (
+				92E46DF31B634EA30035CD21 /* Sources */,
+				92E46DF41B634EA30035CD21 /* Frameworks */,
+				92E46EA11B63615B0035CD21 /* ShellScript */,
+			);
+			buildRules = (
+			);
+			dependencies = (
+			);
+			name = "Game-mac";
+			productName = "Game-mac";
+			productReference = 92E46DF71B634EA30035CD21 /* Game-mac */;
+			productType = "com.apple.product-type.tool";
+		};
+/* End PBXNativeTarget section */
+
+/* Begin PBXProject section */
+		92E46DEF1B634EA30035CD21 /* Project object */ = {
+			isa = PBXProject;
+			attributes = {
+				LastUpgradeCheck = 0920;
+				ORGANIZATIONNAME = "Sanjay Madhav";
+				TargetAttributes = {
+					92E46DF61B634EA30035CD21 = {
+						CreatedOnToolsVersion = 6.4;
+					};
+				};
+			};
+			buildConfigurationList = 92E46DF21B634EA30035CD21 /* Build configuration list for PBXProject "Chapter04-mac" */;
+			compatibilityVersion = "Xcode 3.2";
+			developmentRegion = English;
+			hasScannedForEncodings = 0;
+			knownRegions = (
+				en,
+			);
+			mainGroup = 92E46DEE1B634EA30035CD21;
+			productRefGroup = 92E46DF81B634EA30035CD21 /* Products */;
+			projectDirPath = "";
+			projectRoot = "";
+			targets = (
+				92E46DF61B634EA30035CD21 /* Game-mac */,
+			);
+		};
+/* End PBXProject section */
+
+/* Begin PBXShellScriptBuildPhase section */
+		92E46EA11B63615B0035CD21 /* ShellScript */ = {
+			isa = PBXShellScriptBuildPhase;
+			buildActionMask = 2147483647;
+			files = (
+			);
+			inputPaths = (
+			);
+			outputPaths = (
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+			shellPath = /bin/sh;
+			shellScript = "if [ -d \"$BUILD_DIR/Debug\" ]; then\n    cp \"$SRCROOT\"/../external/GLEW/lib/mac/*.dylib $BUILD_DIR/Debug\n    cp \"$SRCROOT\"/../external/SDL/lib/mac/*.dylib $BUILD_DIR/Debug\nfi\n\nif [ -d \"$BUILD_DIR/Release\" ]; then\n    cp \"$SRCROOT\"/../external/GLEW/lib/mac/*.dylib $BUILD_DIR/Release\n    cp \"$SRCROOT\"/../external/SDL/lib/mac/*.dylib $BUILD_DIR/Release\nfi";
+		};
+/* End PBXShellScriptBuildPhase section */
+
+/* Begin PBXSourcesBuildPhase section */
+		92E46DF31B634EA30035CD21 /* Sources */ = {
+			isa = PBXSourcesBuildPhase;
+			buildActionMask = 2147483647;
+			files = (
+				9223C47D1F009428009A94D7 /* Main.cpp in Sources */,
+				9223C47E1F009428009A94D7 /* Math.cpp in Sources */,
+				9203E9F01F0DD69900F9FFC2 /* Tower.cpp in Sources */,
+				9223C4781F009428009A94D7 /* Game.cpp in Sources */,
+				92E3918B1FE87D6000D8C362 /* AIState.cpp in Sources */,
+				9203E9F61F0DF13600F9FFC2 /* NavComponent.cpp in Sources */,
+				9223C4801F009428009A94D7 /* SpriteComponent.cpp in Sources */,
+				9223C48B1F0CA3CE009A94D7 /* MoveComponent.cpp in Sources */,
+				9203E9F31F0DE24000F9FFC2 /* Enemy.cpp in Sources */,
+				9223C4791F009428009A94D7 /* Actor.cpp in Sources */,
+				9203E9F91F0F12FE00F9FFC2 /* Bullet.cpp in Sources */,
+				9223C4951F0CA766009A94D7 /* CircleComponent.cpp in Sources */,
+				9223C47C1F009428009A94D7 /* Component.cpp in Sources */,
+				92E3918C1FE87D6000D8C362 /* AIComponent.cpp in Sources */,
+				92E3918D1FE87D6000D8C362 /* Search.cpp in Sources */,
+				9223C48F1F0CA67A009A94D7 /* Tile.cpp in Sources */,
+				9223C4981F0DBD69009A94D7 /* Grid.cpp in Sources */,
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+		};
+/* End PBXSourcesBuildPhase section */
+
+/* Begin XCBuildConfiguration section */
+		92E46DFC1B634EA40035CD21 /* Debug */ = {
+			isa = XCBuildConfiguration;
+			buildSettings = {
+				ALWAYS_SEARCH_USER_PATHS = NO;
+				CLANG_CXX_LANGUAGE_STANDARD = "c++14";
+				CLANG_CXX_LIBRARY = "libc++";
+				CLANG_ENABLE_MODULES = YES;
+				CLANG_ENABLE_OBJC_ARC = YES;
+				CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
+				CLANG_WARN_BOOL_CONVERSION = YES;
+				CLANG_WARN_COMMA = YES;
+				CLANG_WARN_CONSTANT_CONVERSION = YES;
+				CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
+				CLANG_WARN_EMPTY_BODY = YES;
+				CLANG_WARN_ENUM_CONVERSION = YES;
+				CLANG_WARN_INFINITE_RECURSION = YES;
+				CLANG_WARN_INT_CONVERSION = YES;
+				CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
+				CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
+				CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
+				CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
+				CLANG_WARN_STRICT_PROTOTYPES = YES;
+				CLANG_WARN_SUSPICIOUS_MOVE = YES;
+				CLANG_WARN_UNREACHABLE_CODE = YES;
+				CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
+				COPY_PHASE_STRIP = NO;
+				DEBUG_INFORMATION_FORMAT = dwarf;
+				ENABLE_STRICT_OBJC_MSGSEND = YES;
+				ENABLE_TESTABILITY = YES;
+				GCC_C_LANGUAGE_STANDARD = gnu99;
+				GCC_DYNAMIC_NO_PIC = NO;
+				GCC_NO_COMMON_BLOCKS = YES;
+				GCC_OPTIMIZATION_LEVEL = 0;
+				GCC_PREPROCESSOR_DEFINITIONS = (
+					"DEBUG=1",
+					"$(inherited)",
+				);
+				GCC_SYMBOLS_PRIVATE_EXTERN = NO;
+				GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
+				GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
+				GCC_WARN_UNDECLARED_SELECTOR = YES;
+				GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
+				GCC_WARN_UNUSED_FUNCTION = YES;
+				GCC_WARN_UNUSED_VARIABLE = YES;
+				MACOSX_DEPLOYMENT_TARGET = 10.10;
+				MTL_ENABLE_DEBUG_INFO = YES;
+				ONLY_ACTIVE_ARCH = YES;
+				SDKROOT = macosx;
+			};
+			name = Debug;
+		};
+		92E46DFD1B634EA40035CD21 /* Release */ = {
+			isa = XCBuildConfiguration;
+			buildSettings = {
+				ALWAYS_SEARCH_USER_PATHS = NO;
+				CLANG_CXX_LANGUAGE_STANDARD = "c++14";
+				CLANG_CXX_LIBRARY = "libc++";
+				CLANG_ENABLE_MODULES = YES;
+				CLANG_ENABLE_OBJC_ARC = YES;
+				CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
+				CLANG_WARN_BOOL_CONVERSION = YES;
+				CLANG_WARN_COMMA = YES;
+				CLANG_WARN_CONSTANT_CONVERSION = YES;
+				CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
+				CLANG_WARN_EMPTY_BODY = YES;
+				CLANG_WARN_ENUM_CONVERSION = YES;
+				CLANG_WARN_INFINITE_RECURSION = YES;
+				CLANG_WARN_INT_CONVERSION = YES;
+				CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
+				CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
+				CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
+				CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
+				CLANG_WARN_STRICT_PROTOTYPES = YES;
+				CLANG_WARN_SUSPICIOUS_MOVE = YES;
+				CLANG_WARN_UNREACHABLE_CODE = YES;
+				CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
+				COPY_PHASE_STRIP = NO;
+				DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
+				ENABLE_NS_ASSERTIONS = NO;
+				ENABLE_STRICT_OBJC_MSGSEND = YES;
+				GCC_C_LANGUAGE_STANDARD = gnu99;
+				GCC_NO_COMMON_BLOCKS = YES;
+				GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
+				GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
+				GCC_WARN_UNDECLARED_SELECTOR = YES;
+				GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
+				GCC_WARN_UNUSED_FUNCTION = YES;
+				GCC_WARN_UNUSED_VARIABLE = YES;
+				MACOSX_DEPLOYMENT_TARGET = 10.10;
+				MTL_ENABLE_DEBUG_INFO = NO;
+				SDKROOT = macosx;
+			};
+			name = Release;
+		};
+		92E46DFF1B634EA40035CD21 /* Debug */ = {
+			isa = XCBuildConfiguration;
+			buildSettings = {
+				FRAMEWORK_SEARCH_PATHS = "";
+				GCC_ENABLE_CPP_RTTI = YES;
+				HEADER_SEARCH_PATHS = (
+					"$(inherited)",
+					/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include,
+					"$(SRCROOT)/../external/SDL/include",
+					"$(SRCROOT)/../external/GLEW/include",
+					"$(SRCROOT)/../external/SOIL/include",
+				);
+				LIBRARY_SEARCH_PATHS = (
+					"$(SRCROOT)/../external/GLEW/lib/mac",
+					"$(SRCROOT)/../external/SDL/lib/mac",
+					"$(SRCROOT)/../external/SOIL/lib/mac",
+				);
+				OTHER_LDFLAGS = (
+					"-lGLEW.2.1.0",
+					"-lSDL2-2.0.0",
+					"-lSDL2_mixer-2.0.0",
+					"-lSDL2_ttf-2.0.0",
+					"-lSOIL",
+					"-lSDL2_image-2.0.0",
+				);
+				PRODUCT_NAME = "$(TARGET_NAME)";
+			};
+			name = Debug;
+		};
+		92E46E001B634EA40035CD21 /* Release */ = {
+			isa = XCBuildConfiguration;
+			buildSettings = {
+				FRAMEWORK_SEARCH_PATHS = "";
+				GCC_ENABLE_CPP_RTTI = YES;
+				HEADER_SEARCH_PATHS = (
+					"$(inherited)",
+					/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include,
+					"$(SRCROOT)/../external/SDL/include",
+					"$(SRCROOT)/../external/GLEW/include",
+					"$(SRCROOT)/../external/SOIL/include",
+				);
+				LIBRARY_SEARCH_PATHS = (
+					"$(SRCROOT)/../external/GLEW/lib/mac",
+					"$(SRCROOT)/../external/SDL/lib/mac",
+					"$(SRCROOT)/../external/SOIL/lib/mac",
+				);
+				OTHER_LDFLAGS = (
+					"-lGLEW.2.1.0",
+					"-lSDL2-2.0.0",
+					"-lSDL2_mixer-2.0.0",
+					"-lSDL2_ttf-2.0.0",
+					"-lSOIL",
+					"-lSDL2_image-2.0.0",
+				);
+				PRODUCT_NAME = "$(TARGET_NAME)";
+			};
+			name = Release;
+		};
+/* End XCBuildConfiguration section */
+
+/* Begin XCConfigurationList section */
+		92E46DF21B634EA30035CD21 /* Build configuration list for PBXProject "Chapter04-mac" */ = {
+			isa = XCConfigurationList;
+			buildConfigurations = (
+				92E46DFC1B634EA40035CD21 /* Debug */,
+				92E46DFD1B634EA40035CD21 /* Release */,
+			);
+			defaultConfigurationIsVisible = 0;
+			defaultConfigurationName = Release;
+		};
+		92E46DFE1B634EA40035CD21 /* Build configuration list for PBXNativeTarget "Game-mac" */ = {
+			isa = XCConfigurationList;
+			buildConfigurations = (
+				92E46DFF1B634EA40035CD21 /* Debug */,
+				92E46E001B634EA40035CD21 /* Release */,
+			);
+			defaultConfigurationIsVisible = 0;
+			defaultConfigurationName = Release;
+		};
+/* End XCConfigurationList section */
+	};
+	rootObject = 92E46DEF1B634EA30035CD21 /* Project object */;
+}
diff --git a/Exercises/4.2/Chapter04-mac.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/Exercises/4.2/Chapter04-mac.xcodeproj/project.xcworkspace/contents.xcworkspacedata
new file mode 100644
index 0000000000000000000000000000000000000000..b36b9db7f3bd3c6778a6c9afeb413daf09fb4d87
--- /dev/null
+++ b/Exercises/4.2/Chapter04-mac.xcodeproj/project.xcworkspace/contents.xcworkspacedata
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<Workspace
+   version = "1.0">
+   <FileRef
+      location = "self:/Users/Sanjay/gameprogcpp-final/Chapter04/Chapter04-mac.xcodeproj">
+   </FileRef>
+</Workspace>
diff --git a/Exercises/4.2/Chapter04-mac.xcodeproj/xcshareddata/xcschemes/Game-mac.xcscheme b/Exercises/4.2/Chapter04-mac.xcodeproj/xcshareddata/xcschemes/Game-mac.xcscheme
new file mode 100644
index 0000000000000000000000000000000000000000..2667789eaa871398f8491a33488ba5ee4bdc4958
--- /dev/null
+++ b/Exercises/4.2/Chapter04-mac.xcodeproj/xcshareddata/xcschemes/Game-mac.xcscheme
@@ -0,0 +1,94 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<Scheme
+   LastUpgradeVersion = "0920"
+   version = "1.3">
+   <BuildAction
+      parallelizeBuildables = "YES"
+      buildImplicitDependencies = "YES">
+      <BuildActionEntries>
+         <BuildActionEntry
+            buildForTesting = "YES"
+            buildForRunning = "YES"
+            buildForProfiling = "YES"
+            buildForArchiving = "YES"
+            buildForAnalyzing = "YES">
+            <BuildableReference
+               BuildableIdentifier = "primary"
+               BlueprintIdentifier = "92E46DF61B634EA30035CD21"
+               BuildableName = "Game-mac"
+               BlueprintName = "Game-mac"
+               ReferencedContainer = "container:Chapter04-mac.xcodeproj">
+            </BuildableReference>
+         </BuildActionEntry>
+      </BuildActionEntries>
+   </BuildAction>
+   <TestAction
+      buildConfiguration = "Debug"
+      selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
+      selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
+      language = ""
+      shouldUseLaunchSchemeArgsEnv = "YES">
+      <Testables>
+      </Testables>
+      <MacroExpansion>
+         <BuildableReference
+            BuildableIdentifier = "primary"
+            BlueprintIdentifier = "92E46DF61B634EA30035CD21"
+            BuildableName = "Game-mac"
+            BlueprintName = "Game-mac"
+            ReferencedContainer = "container:Chapter04-mac.xcodeproj">
+         </BuildableReference>
+      </MacroExpansion>
+      <AdditionalOptions>
+      </AdditionalOptions>
+   </TestAction>
+   <LaunchAction
+      buildConfiguration = "Debug"
+      selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
+      selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
+      language = ""
+      launchStyle = "0"
+      useCustomWorkingDirectory = "YES"
+      customWorkingDirectory = "$(SRCROOT)"
+      ignoresPersistentStateOnLaunch = "NO"
+      debugDocumentVersioning = "YES"
+      debugServiceExtension = "internal"
+      allowLocationSimulation = "YES">
+      <BuildableProductRunnable
+         runnableDebuggingMode = "0">
+         <BuildableReference
+            BuildableIdentifier = "primary"
+            BlueprintIdentifier = "92E46DF61B634EA30035CD21"
+            BuildableName = "Game-mac"
+            BlueprintName = "Game-mac"
+            ReferencedContainer = "container:Chapter04-mac.xcodeproj">
+         </BuildableReference>
+      </BuildableProductRunnable>
+      <AdditionalOptions>
+      </AdditionalOptions>
+   </LaunchAction>
+   <ProfileAction
+      buildConfiguration = "Release"
+      shouldUseLaunchSchemeArgsEnv = "YES"
+      savedToolIdentifier = ""
+      useCustomWorkingDirectory = "NO"
+      debugDocumentVersioning = "YES">
+      <BuildableProductRunnable
+         runnableDebuggingMode = "0">
+         <BuildableReference
+            BuildableIdentifier = "primary"
+            BlueprintIdentifier = "92E46DF61B634EA30035CD21"
+            BuildableName = "Game-mac"
+            BlueprintName = "Game-mac"
+            ReferencedContainer = "container:Chapter04-mac.xcodeproj">
+         </BuildableReference>
+      </BuildableProductRunnable>
+   </ProfileAction>
+   <AnalyzeAction
+      buildConfiguration = "Debug">
+   </AnalyzeAction>
+   <ArchiveAction
+      buildConfiguration = "Release"
+      revealArchiveInOrganizer = "YES">
+   </ArchiveAction>
+</Scheme>
diff --git a/Exercises/4.2/Chapter04-windows.sln b/Exercises/4.2/Chapter04-windows.sln
new file mode 100644
index 0000000000000000000000000000000000000000..f560df0f8119533f8a11c4bc20ee2fbb51e4c93b
--- /dev/null
+++ b/Exercises/4.2/Chapter04-windows.sln
@@ -0,0 +1,22 @@
+
+Microsoft Visual Studio Solution File, Format Version 12.00
+# Visual Studio 15
+VisualStudioVersion = 15.0.26430.12
+MinimumVisualStudioVersion = 10.0.40219.1
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Game", "Game.vcxproj", "{BC508D87-495F-4554-932D-DD68388B63CC}"
+EndProject
+Global
+	GlobalSection(SolutionConfigurationPlatforms) = preSolution
+		Debug|Win32 = Debug|Win32
+		Release|Win32 = Release|Win32
+	EndGlobalSection
+	GlobalSection(ProjectConfigurationPlatforms) = postSolution
+		{BC508D87-495F-4554-932D-DD68388B63CC}.Debug|Win32.ActiveCfg = Debug|Win32
+		{BC508D87-495F-4554-932D-DD68388B63CC}.Debug|Win32.Build.0 = Debug|Win32
+		{BC508D87-495F-4554-932D-DD68388B63CC}.Release|Win32.ActiveCfg = Release|Win32
+		{BC508D87-495F-4554-932D-DD68388B63CC}.Release|Win32.Build.0 = Release|Win32
+	EndGlobalSection
+	GlobalSection(SolutionProperties) = preSolution
+		HideSolutionNode = FALSE
+	EndGlobalSection
+EndGlobal
diff --git a/Exercises/4.2/CircleComponent.cpp b/Exercises/4.2/CircleComponent.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..d41aab2cbc11d0e4d0e5d1c2cddc0821cd4fe769
--- /dev/null
+++ b/Exercises/4.2/CircleComponent.cpp
@@ -0,0 +1,40 @@
+// ----------------------------------------------------------------
+// From Game Programming in C++ by Sanjay Madhav
+// Copyright (C) 2017 Sanjay Madhav. All rights reserved.
+// 
+// Released under the BSD License
+// See LICENSE in root directory for full details.
+// ----------------------------------------------------------------
+
+#include "CircleComponent.h"
+#include "Actor.h"
+
+CircleComponent::CircleComponent(class Actor* owner)
+:Component(owner)
+,mRadius(0.0f)
+{
+	
+}
+
+const Vector2& CircleComponent::GetCenter() const
+{
+	return mOwner->GetPosition();
+}
+
+float CircleComponent::GetRadius() const
+{
+	return mOwner->GetScale() * mRadius;
+}
+
+bool Intersect(const CircleComponent& a, const CircleComponent& b)
+{
+	// Calculate distance squared
+	Vector2 diff = a.GetCenter() - b.GetCenter();
+	float distSq = diff.LengthSq();
+
+	// Calculate sum of radii squared
+	float radiiSq = a.GetRadius() + b.GetRadius();
+	radiiSq *= radiiSq;
+
+	return distSq <= radiiSq;
+}
diff --git a/Exercises/4.2/CircleComponent.h b/Exercises/4.2/CircleComponent.h
new file mode 100644
index 0000000000000000000000000000000000000000..4eecb2a4b76f1a800cc224d0f44a06baa0a9dc5b
--- /dev/null
+++ b/Exercises/4.2/CircleComponent.h
@@ -0,0 +1,26 @@
+// ----------------------------------------------------------------
+// From Game Programming in C++ by Sanjay Madhav
+// Copyright (C) 2017 Sanjay Madhav. All rights reserved.
+// 
+// Released under the BSD License
+// See LICENSE in root directory for full details.
+// ----------------------------------------------------------------
+
+#pragma once
+#include "Component.h"
+#include "Math.h"
+
+class CircleComponent : public Component
+{
+public:
+	CircleComponent(class Actor* owner);
+	
+	void SetRadius(float radius) { mRadius = radius; }
+	float GetRadius() const;
+	
+	const Vector2& GetCenter() const;
+private:
+	float mRadius;
+};
+
+bool Intersect(const CircleComponent& a, const CircleComponent& b);
diff --git a/Exercises/4.2/Component.cpp b/Exercises/4.2/Component.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..c4ed432d4c1521522e1617b341e3fc35da3fee7d
--- /dev/null
+++ b/Exercises/4.2/Component.cpp
@@ -0,0 +1,27 @@
+// ----------------------------------------------------------------
+// From Game Programming in C++ by Sanjay Madhav
+// Copyright (C) 2017 Sanjay Madhav. All rights reserved.
+// 
+// Released under the BSD License
+// See LICENSE in root directory for full details.
+// ----------------------------------------------------------------
+
+#include "Component.h"
+#include "Actor.h"
+
+Component::Component(Actor* owner, int updateOrder)
+	:mOwner(owner)
+	,mUpdateOrder(updateOrder)
+{
+	// Add to actor's vector of components
+	mOwner->AddComponent(this);
+}
+
+Component::~Component()
+{
+	mOwner->RemoveComponent(this);
+}
+
+void Component::Update(float deltaTime)
+{
+}
diff --git a/Exercises/4.2/Component.h b/Exercises/4.2/Component.h
new file mode 100644
index 0000000000000000000000000000000000000000..fb41dd759a4f708c5aca0ab5a2b9fdf5609431f8
--- /dev/null
+++ b/Exercises/4.2/Component.h
@@ -0,0 +1,31 @@
+// ----------------------------------------------------------------
+// From Game Programming in C++ by Sanjay Madhav
+// Copyright (C) 2017 Sanjay Madhav. All rights reserved.
+// 
+// Released under the BSD License
+// See LICENSE in root directory for full details.
+// ----------------------------------------------------------------
+
+#pragma once
+#include <cstdint>
+
+class Component
+{
+public:
+	// Constructor
+	// (the lower the update order, the earlier the component updates)
+	Component(class Actor* owner, int updateOrder = 100);
+	// Destructor
+	virtual ~Component();
+	// Update this component by delta time
+	virtual void Update(float deltaTime);
+	// Process input for this component
+	virtual void ProcessInput(const uint8_t* keyState) {}
+
+	int GetUpdateOrder() const { return mUpdateOrder; }
+protected:
+	// Owning actor
+	class Actor* mOwner;
+	// Update order of component
+	int mUpdateOrder;
+};
diff --git a/Exercises/4.2/Game.cpp b/Exercises/4.2/Game.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..58779a9d662e88ce54d606e7a1ab5f979de8465a
--- /dev/null
+++ b/Exercises/4.2/Game.cpp
@@ -0,0 +1,344 @@
+// ----------------------------------------------------------------
+// From Game Programming in C++ by Sanjay Madhav
+// Copyright (C) 2017 Sanjay Madhav. All rights reserved.
+// 
+// Released under the BSD License
+// See LICENSE in root directory for full details.
+// ----------------------------------------------------------------
+
+#include "Game.h"
+#include "SDL/SDL_image.h"
+#include <algorithm>
+#include "Actor.h"
+#include "SpriteComponent.h"
+#include "Random.h"
+
+Game::Game()
+:mWindow(nullptr)
+,mRenderer(nullptr)
+,mIsRunning(true)
+,mUpdatingActors(false)
+{
+	
+}
+
+bool Game::Initialize()
+{
+	if (SDL_Init(SDL_INIT_VIDEO|SDL_INIT_AUDIO) != 0)
+	{
+		SDL_Log("Unable to initialize SDL: %s", SDL_GetError());
+		return false;
+	}
+	
+	mWindow = SDL_CreateWindow("Game Programming in C++ (Chapter 4)", 100, 100, 1024, 768, 0);
+	if (!mWindow)
+	{
+		SDL_Log("Failed to create window: %s", SDL_GetError());
+		return false;
+	}
+	
+	mRenderer = SDL_CreateRenderer(mWindow, -1, SDL_RENDERER_ACCELERATED | SDL_RENDERER_PRESENTVSYNC);
+	if (!mRenderer)
+	{
+		SDL_Log("Failed to create renderer: %s", SDL_GetError());
+		return false;
+	}
+	
+	if (IMG_Init(IMG_INIT_PNG) == 0)
+	{
+		SDL_Log("Unable to initialize SDL_image: %s", SDL_GetError());
+		return false;
+	}
+
+	Random::Init();
+
+	LoadData();
+
+	mTicksCount = SDL_GetTicks();
+	
+	return true;
+}
+
+void Game::RunLoop()
+{
+	while (mIsRunning)
+	{
+		ProcessInput();
+		UpdateGame();
+		GenerateOutput();
+	}
+}
+
+void Game::ProcessInput()
+{
+	SDL_Event event;
+	while (SDL_PollEvent(&event))
+	{
+		switch (event.type)
+		{
+			case SDL_QUIT:
+				mIsRunning = false;
+				break;
+			// Process mouse button event
+			case SDL_MOUSEBUTTONDOWN:
+				if (event.button.button == SDL_BUTTON_LEFT &&
+					!mBoardState.IsTerminal())
+				{
+					// Convert x into column
+					int col = event.button.x - 64;
+					if (col >= 0)
+					{
+						col /= 128;
+						if (col <= 6)
+						{
+							bool playerMoved = TryPlayerMove(&mBoardState, col);
+							if (playerMoved && !mBoardState.IsTerminal())
+							{
+								CPUMove(&mBoardState);
+							}
+						}
+					}
+				}
+				break;
+		}
+	}
+	
+	const Uint8* keyState = SDL_GetKeyboardState(NULL);
+	if (keyState[SDL_SCANCODE_ESCAPE])
+	{
+		mIsRunning = false;
+	}
+
+	mUpdatingActors = true;
+	for (auto actor : mActors)
+	{
+		actor->ProcessInput(keyState);
+	}
+	mUpdatingActors = false;
+}
+
+void Game::UpdateGame()
+{
+	// Compute delta time
+	// Wait until 16ms has elapsed since last frame
+	while (!SDL_TICKS_PASSED(SDL_GetTicks(), mTicksCount + 16))
+		;
+
+	float deltaTime = (SDL_GetTicks() - mTicksCount) / 1000.0f;
+	if (deltaTime > 0.05f)
+	{
+		deltaTime = 0.05f;
+	}
+	mTicksCount = SDL_GetTicks();
+
+	// Update all actors
+	mUpdatingActors = true;
+	for (auto actor : mActors)
+	{
+		actor->Update(deltaTime);
+	}
+	mUpdatingActors = false;
+
+	// Move any pending actors to mActors
+	for (auto pending : mPendingActors)
+	{
+		mActors.emplace_back(pending);
+	}
+	mPendingActors.clear();
+
+	// Add any dead actors to a temp vector
+	std::vector<Actor*> deadActors;
+	for (auto actor : mActors)
+	{
+		if (actor->GetState() == Actor::EDead)
+		{
+			deadActors.emplace_back(actor);
+		}
+	}
+
+	// Delete dead actors (which removes them from mActors)
+	for (auto actor : deadActors)
+	{
+		delete actor;
+	}
+}
+
+void Game::GenerateOutput()
+{
+	SDL_SetRenderDrawColor(mRenderer, 255, 255, 255, 255);
+	SDL_RenderClear(mRenderer);
+	
+	// Draw all sprite components
+	for (auto sprite : mSprites)
+	{
+		sprite->Draw(mRenderer);
+	}
+
+	// For Exercise 4.2
+	// Draw background
+	DrawTexture(GetTexture("Assets/Board.png"), Vector2(512.0f, 384.0f),
+		Vector2(896.0f, 768.0f));
+
+	// Draw pieces
+	for (int i = 0; i < 6; i++)
+	{
+		for (int j = 0; j < 7; j++)
+		{
+			Vector2 pos(j * 128.0f + 128.0f, i * 128.0f + 64.0f);
+			if (mBoardState.mBoard[i][j] == BoardState::Yellow)
+			{
+				DrawTexture(GetTexture("Assets/YellowPiece.png"), pos,
+					Vector2(128.0f, 128.0f));
+			}
+			else if (mBoardState.mBoard[i][j] == BoardState::Red)
+			{
+				DrawTexture(GetTexture("Assets/RedPiece.png"), pos,
+					Vector2(128.0f, 128.0f));
+			}
+		}
+	}
+
+	SDL_RenderPresent(mRenderer);
+}
+
+void Game::LoadData()
+{
+
+}
+
+void Game::UnloadData()
+{
+	// Delete actors
+	// Because ~Actor calls RemoveActor, have to use a different style loop
+	while (!mActors.empty())
+	{
+		delete mActors.back();
+	}
+
+	// Destroy textures
+	for (auto i : mTextures)
+	{
+		SDL_DestroyTexture(i.second);
+	}
+	mTextures.clear();
+}
+
+SDL_Texture* Game::GetTexture(const std::string& fileName)
+{
+	SDL_Texture* tex = nullptr;
+	// Is the texture already in the map?
+	auto iter = mTextures.find(fileName);
+	if (iter != mTextures.end())
+	{
+		tex = iter->second;
+	}
+	else
+	{
+		// Load from file
+		SDL_Surface* surf = IMG_Load(fileName.c_str());
+		if (!surf)
+		{
+			SDL_Log("Failed to load texture file %s", fileName.c_str());
+			return nullptr;
+		}
+
+		// Create texture from surface
+		tex = SDL_CreateTextureFromSurface(mRenderer, surf);
+		SDL_FreeSurface(surf);
+		if (!tex)
+		{
+			SDL_Log("Failed to convert surface to texture for %s", fileName.c_str());
+			return nullptr;
+		}
+
+		mTextures.emplace(fileName.c_str(), tex);
+	}
+	return tex;
+}
+
+void Game::DrawTexture(SDL_Texture* texture, const Vector2& pos, const Vector2& size)
+{
+	SDL_Rect r;
+	// Scale the width/height by owner's scale
+	r.w = static_cast<int>(size.x);
+	r.h = static_cast<int>(size.y);
+	// Center the rectangle around the position of the owner
+	r.x = static_cast<int>(pos.x) - r.w / 2;
+	r.y = static_cast<int>(pos.y) - r.h / 2;
+
+	// Draw (have to convert angle from radians to degrees, and clockwise to counter)
+	SDL_RenderCopy(mRenderer,
+		texture,
+		nullptr,
+		&r);
+}
+
+void Game::Shutdown()
+{
+	UnloadData();
+	IMG_Quit();
+	SDL_DestroyRenderer(mRenderer);
+	SDL_DestroyWindow(mWindow);
+	SDL_Quit();
+}
+
+void Game::AddActor(Actor* actor)
+{
+	// If we're updating actors, need to add to pending
+	if (mUpdatingActors)
+	{
+		mPendingActors.emplace_back(actor);
+	}
+	else
+	{
+		mActors.emplace_back(actor);
+	}
+}
+
+void Game::RemoveActor(Actor* actor)
+{
+	// Is it in pending actors?
+	auto iter = std::find(mPendingActors.begin(), mPendingActors.end(), actor);
+	if (iter != mPendingActors.end())
+	{
+		// Swap to end of vector and pop off (avoid erase copies)
+		std::iter_swap(iter, mPendingActors.end() - 1);
+		mPendingActors.pop_back();
+	}
+
+	// Is it in actors?
+	iter = std::find(mActors.begin(), mActors.end(), actor);
+	if (iter != mActors.end())
+	{
+		// Swap to end of vector and pop off (avoid erase copies)
+		std::iter_swap(iter, mActors.end() - 1);
+		mActors.pop_back();
+	}
+}
+
+void Game::AddSprite(SpriteComponent* sprite)
+{
+	// Find the insertion point in the sorted vector
+	// (The first element with a higher draw order than me)
+	int myDrawOrder = sprite->GetDrawOrder();
+	auto iter = mSprites.begin();
+	for ( ;
+		iter != mSprites.end();
+		++iter)
+	{
+		if (myDrawOrder < (*iter)->GetDrawOrder())
+		{
+			break;
+		}
+	}
+
+	// Inserts element before position of iterator
+	mSprites.insert(iter, sprite);
+}
+
+void Game::RemoveSprite(SpriteComponent* sprite)
+{
+	// (We can't swap because it ruins ordering)
+	auto iter = std::find(mSprites.begin(), mSprites.end(), sprite);
+	mSprites.erase(iter);
+}
diff --git a/Exercises/4.2/Game.h b/Exercises/4.2/Game.h
new file mode 100644
index 0000000000000000000000000000000000000000..c9f56225d9f3b51e80f9e5b33df549896b440372
--- /dev/null
+++ b/Exercises/4.2/Game.h
@@ -0,0 +1,61 @@
+// ----------------------------------------------------------------
+// From Game Programming in C++ by Sanjay Madhav
+// Copyright (C) 2017 Sanjay Madhav. All rights reserved.
+// 
+// Released under the BSD License
+// See LICENSE in root directory for full details.
+// ----------------------------------------------------------------
+
+#pragma once
+#include "SDL/SDL.h"
+#include <unordered_map>
+#include <string>
+#include <vector>
+#include "Math.h"
+#include "Board.h"
+
+class Game
+{
+public:
+	Game();
+	bool Initialize();
+	void RunLoop();
+	void Shutdown();
+
+	void AddActor(class Actor* actor);
+	void RemoveActor(class Actor* actor);
+
+	void AddSprite(class SpriteComponent* sprite);
+	void RemoveSprite(class SpriteComponent* sprite);
+	
+	SDL_Texture* GetTexture(const std::string& fileName);
+	// Helper to draw a texture without sprite components
+	void DrawTexture(SDL_Texture* texture, const Vector2& pos, const Vector2& size);
+private:
+	void ProcessInput();
+	void UpdateGame();
+	void GenerateOutput();
+	void LoadData();
+	void UnloadData();
+	
+	// Map of textures loaded
+	std::unordered_map<std::string, SDL_Texture*> mTextures;
+
+	// All the actors in the game
+	std::vector<class Actor*> mActors;
+	// Any pending actors
+	std::vector<class Actor*> mPendingActors;
+
+	// All the sprite components drawn
+	std::vector<class SpriteComponent*> mSprites;
+
+	SDL_Window* mWindow;
+	SDL_Renderer* mRenderer;
+	Uint32 mTicksCount;
+	bool mIsRunning;
+	// Track if we're updating actors right now
+	bool mUpdatingActors;
+
+	// Game-specific
+	BoardState mBoardState;
+};
diff --git a/Exercises/4.2/Game.vcxproj b/Exercises/4.2/Game.vcxproj
new file mode 100644
index 0000000000000000000000000000000000000000..3c041589ec81747b7ba1b848713f06fcc695c0fb
--- /dev/null
+++ b/Exercises/4.2/Game.vcxproj
@@ -0,0 +1,126 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <ItemGroup Label="ProjectConfigurations">
+    <ProjectConfiguration Include="Debug|Win32">
+      <Configuration>Debug</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Release|Win32">
+      <Configuration>Release</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+  </ItemGroup>
+  <ItemGroup>
+    <ClCompile Include="Actor.cpp" />
+    <ClCompile Include="Board.cpp" />
+    <ClCompile Include="CircleComponent.cpp" />
+    <ClCompile Include="Component.cpp" />
+    <ClCompile Include="Game.cpp" />
+    <ClCompile Include="Main.cpp" />
+    <ClCompile Include="Math.cpp" />
+    <ClCompile Include="MoveComponent.cpp" />
+    <ClCompile Include="Random.cpp" />
+    <ClCompile Include="SpriteComponent.cpp" />
+  </ItemGroup>
+  <ItemGroup>
+    <ClInclude Include="Actor.h" />
+    <ClInclude Include="Board.h" />
+    <ClInclude Include="CircleComponent.h" />
+    <ClInclude Include="Component.h" />
+    <ClInclude Include="Game.h" />
+    <ClInclude Include="Math.h" />
+    <ClInclude Include="MoveComponent.h" />
+    <ClInclude Include="Random.h" />
+    <ClInclude Include="SpriteComponent.h" />
+  </ItemGroup>
+  <PropertyGroup Label="Globals">
+    <ProjectGuid>{BC508D87-495F-4554-932D-DD68388B63CC}</ProjectGuid>
+    <Keyword>Win32Proj</Keyword>
+    <RootNamespace>Game</RootNamespace>
+    <WindowsTargetPlatformVersion>10.0.16299.0</WindowsTargetPlatformVersion>
+  </PropertyGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <UseDebugLibraries>true</UseDebugLibraries>
+    <PlatformToolset>v141</PlatformToolset>
+    <CharacterSet>Unicode</CharacterSet>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <UseDebugLibraries>false</UseDebugLibraries>
+    <PlatformToolset>v141</PlatformToolset>
+    <WholeProgramOptimization>true</WholeProgramOptimization>
+    <CharacterSet>Unicode</CharacterSet>
+  </PropertyGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
+  <ImportGroup Label="ExtensionSettings">
+  </ImportGroup>
+  <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <PropertyGroup Label="UserMacros" />
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+    <LinkIncremental>true</LinkIncremental>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+    <LinkIncremental>false</LinkIncremental>
+  </PropertyGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+    <ClCompile>
+      <PrecompiledHeader>
+      </PrecompiledHeader>
+      <WarningLevel>Level3</WarningLevel>
+      <Optimization>Disabled</Optimization>
+      <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <SDLCheck>true</SDLCheck>
+      <AdditionalIncludeDirectories>..\..\external\SDL\include;..\..\external\GLEW\include;..\..\external\SOIL\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <RuntimeTypeInfo>false</RuntimeTypeInfo>
+      <ExceptionHandling>Sync</ExceptionHandling>
+    </ClCompile>
+    <Link>
+      <SubSystem>Console</SubSystem>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <AdditionalLibraryDirectories>..\..\external\SDL\lib\win\x86;..\..\external\GLEW\lib\win\x86;..\..\external\SOIL\lib\win\x86;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
+      <AdditionalDependencies>opengl32.lib;SDL2.lib;SDL2main.lib;SDL2_ttf.lib;SDL2_mixer.lib;SDL2_image.lib;glew32.lib;SOIL.lib;%(AdditionalDependencies)</AdditionalDependencies>
+      <AdditionalOptions>/NODEFAULTLIB:msvcrt.lib %(AdditionalOptions)</AdditionalOptions>
+    </Link>
+    <PostBuildEvent>
+      <Command>xcopy "$(ProjectDir)\..\..\external\SDL\lib\win\x86\*.dll" "$(OutDir)" /i /s /y
+xcopy "$(ProjectDir)\..\..\external\GLEW\lib\win\x86\*.dll" "$(OutDir)" /i /s /y</Command>
+    </PostBuildEvent>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+    <ClCompile>
+      <WarningLevel>Level3</WarningLevel>
+      <PrecompiledHeader>
+      </PrecompiledHeader>
+      <Optimization>MaxSpeed</Optimization>
+      <FunctionLevelLinking>true</FunctionLevelLinking>
+      <IntrinsicFunctions>true</IntrinsicFunctions>
+      <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <SDLCheck>true</SDLCheck>
+      <AdditionalIncludeDirectories>..\..\external\SDL\include;..\..\external\GLEW\include;..\..\external\SOIL\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <RuntimeTypeInfo>false</RuntimeTypeInfo>
+      <ExceptionHandling>Sync</ExceptionHandling>
+    </ClCompile>
+    <Link>
+      <SubSystem>Console</SubSystem>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <EnableCOMDATFolding>true</EnableCOMDATFolding>
+      <OptimizeReferences>true</OptimizeReferences>
+      <AdditionalLibraryDirectories>..\..\external\SDL\lib\win\x86;..\..\external\GLEW\lib\win\x86;..\..\external\SOIL\lib\win\x86;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
+      <AdditionalDependencies>opengl32.lib;SDL2.lib;SDL2main.lib;SDL2_ttf.lib;SDL2_mixer.lib;SDL2_image.lib;glew32.lib;SOIL.lib;%(AdditionalDependencies)</AdditionalDependencies>
+    </Link>
+    <PostBuildEvent>
+      <Command>xcopy "$(ProjectDir)\..\..\external\SDL\lib\win\x86\*.dll" "$(OutDir)" /i /s /y
+xcopy "$(ProjectDir)\..\..\external\GLEW\lib\win\x86\*.dll" "$(OutDir)" /i /s /y</Command>
+    </PostBuildEvent>
+  </ItemDefinitionGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
+  <ImportGroup Label="ExtensionTargets">
+  </ImportGroup>
+</Project>
\ No newline at end of file
diff --git a/Exercises/4.2/Game.vcxproj.filters b/Exercises/4.2/Game.vcxproj.filters
new file mode 100644
index 0000000000000000000000000000000000000000..4321a926f81c014243b6ae1c2738cc4c10992e94
--- /dev/null
+++ b/Exercises/4.2/Game.vcxproj.filters
@@ -0,0 +1,70 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <ItemGroup>
+    <Filter Include="Source Files">
+      <UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier>
+      <Extensions>cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx</Extensions>
+    </Filter>
+  </ItemGroup>
+  <ItemGroup>
+    <ClCompile Include="Actor.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="Component.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="Game.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="Main.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="Math.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="SpriteComponent.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="CircleComponent.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="MoveComponent.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="Board.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="Random.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+  </ItemGroup>
+  <ItemGroup>
+    <ClInclude Include="Actor.h">
+      <Filter>Source Files</Filter>
+    </ClInclude>
+    <ClInclude Include="Component.h">
+      <Filter>Source Files</Filter>
+    </ClInclude>
+    <ClInclude Include="Game.h">
+      <Filter>Source Files</Filter>
+    </ClInclude>
+    <ClInclude Include="Math.h">
+      <Filter>Source Files</Filter>
+    </ClInclude>
+    <ClInclude Include="SpriteComponent.h">
+      <Filter>Source Files</Filter>
+    </ClInclude>
+    <ClInclude Include="CircleComponent.h">
+      <Filter>Source Files</Filter>
+    </ClInclude>
+    <ClInclude Include="MoveComponent.h">
+      <Filter>Source Files</Filter>
+    </ClInclude>
+    <ClInclude Include="Board.h">
+      <Filter>Source Files</Filter>
+    </ClInclude>
+    <ClInclude Include="Random.h">
+      <Filter>Source Files</Filter>
+    </ClInclude>
+  </ItemGroup>
+</Project>
\ No newline at end of file
diff --git a/Exercises/4.2/Main.cpp b/Exercises/4.2/Main.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..22ea0c69c1414fc377c9477f0b3d1f167964a9ae
--- /dev/null
+++ b/Exercises/4.2/Main.cpp
@@ -0,0 +1,21 @@
+// ----------------------------------------------------------------
+// From Game Programming in C++ by Sanjay Madhav
+// Copyright (C) 2017 Sanjay Madhav. All rights reserved.
+// 
+// Released under the BSD License
+// See LICENSE in root directory for full details.
+// ----------------------------------------------------------------
+
+#include "Game.h"
+
+int main(int argc, char** argv)
+{
+	Game game;
+	bool success = game.Initialize();
+	if (success)
+	{
+		game.RunLoop();
+	}
+	game.Shutdown();
+	return 0;
+}
diff --git a/Exercises/4.2/Math.cpp b/Exercises/4.2/Math.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..a16e72617657bc8b19a139c000b1212f24a9f144
--- /dev/null
+++ b/Exercises/4.2/Math.cpp
@@ -0,0 +1,239 @@
+// ----------------------------------------------------------------
+// From Game Programming in C++ by Sanjay Madhav
+// Copyright (C) 2017 Sanjay Madhav. All rights reserved.
+// 
+// Released under the BSD License
+// See LICENSE in root directory for full details.
+// ----------------------------------------------------------------
+
+#include "Math.h"
+
+const Vector2 Vector2::Zero(0.0f, 0.0f);
+const Vector2 Vector2::UnitX(1.0f, 0.0f);
+const Vector2 Vector2::UnitY(0.0f, 1.0f);
+const Vector2 Vector2::NegUnitX(-1.0f, 0.0f);
+const Vector2 Vector2::NegUnitY(0.0f, -1.0f);
+
+const Vector3 Vector3::Zero(0.0f, 0.0f, 0.f);
+const Vector3 Vector3::UnitX(1.0f, 0.0f, 0.0f);
+const Vector3 Vector3::UnitY(0.0f, 1.0f, 0.0f);
+const Vector3 Vector3::UnitZ(0.0f, 0.0f, 1.0f);
+const Vector3 Vector3::NegUnitX(-1.0f, 0.0f, 0.0f);
+const Vector3 Vector3::NegUnitY(0.0f, -1.0f, 0.0f);
+const Vector3 Vector3::NegUnitZ(0.0f, 0.0f, -1.0f);
+const Vector3 Vector3::Infinity(Math::Infinity, Math::Infinity, Math::Infinity);
+const Vector3 Vector3::NegInfinity(Math::NegInfinity, Math::NegInfinity, Math::NegInfinity);
+
+static float m3Ident[3][3] =
+{
+	{ 1.0f, 0.0f, 0.0f },
+	{ 0.0f, 1.0f, 0.0f },
+	{ 0.0f, 0.0f, 1.0f }
+};
+const Matrix3 Matrix3::Identity(m3Ident);
+
+static float m4Ident[4][4] =
+{
+	{ 1.0f, 0.0f, 0.0f, 0.0f },
+	{ 0.0f, 1.0f, 0.0f, 0.0f },
+	{ 0.0f, 0.0f, 1.0f, 0.0f },
+	{ 0.0f, 0.0f, 0.0f, 1.0f }
+};
+
+const Matrix4 Matrix4::Identity(m4Ident);
+
+const Quaternion Quaternion::Identity(0.0f, 0.0f, 0.0f, 1.0f);
+
+Vector2 Vector2::Transform(const Vector2& vec, const Matrix3& mat, float w /*= 1.0f*/)
+{
+	Vector2 retVal;
+	retVal.x = vec.x * mat.mat[0][0] + vec.y * mat.mat[1][0] + w * mat.mat[2][0];
+	retVal.y = vec.x * mat.mat[0][1] + vec.y * mat.mat[1][1] + w * mat.mat[2][1];
+	//ignore w since we aren't returning a new value for it...
+	return retVal;
+}
+
+Vector3 Vector3::Transform(const Vector3& vec, const Matrix4& mat, float w /*= 1.0f*/)
+{
+	Vector3 retVal;
+	retVal.x = vec.x * mat.mat[0][0] + vec.y * mat.mat[1][0] +
+		vec.z * mat.mat[2][0] + w * mat.mat[3][0];
+	retVal.y = vec.x * mat.mat[0][1] + vec.y * mat.mat[1][1] +
+		vec.z * mat.mat[2][1] + w * mat.mat[3][1];
+	retVal.z = vec.x * mat.mat[0][2] + vec.y * mat.mat[1][2] +
+		vec.z * mat.mat[2][2] + w * mat.mat[3][2];
+	//ignore w since we aren't returning a new value for it...
+	return retVal;
+}
+
+// This will transform the vector and renormalize the w component
+Vector3 Vector3::TransformWithPerspDiv(const Vector3& vec, const Matrix4& mat, float w /*= 1.0f*/)
+{
+	Vector3 retVal;
+	retVal.x = vec.x * mat.mat[0][0] + vec.y * mat.mat[1][0] +
+		vec.z * mat.mat[2][0] + w * mat.mat[3][0];
+	retVal.y = vec.x * mat.mat[0][1] + vec.y * mat.mat[1][1] +
+		vec.z * mat.mat[2][1] + w * mat.mat[3][1];
+	retVal.z = vec.x * mat.mat[0][2] + vec.y * mat.mat[1][2] +
+		vec.z * mat.mat[2][2] + w * mat.mat[3][2];
+	float transformedW = vec.x * mat.mat[0][3] + vec.y * mat.mat[1][3] +
+		vec.z * mat.mat[2][3] + w * mat.mat[3][3];
+	if (!Math::NearZero(Math::Abs(transformedW)))
+	{
+		transformedW = 1.0f / transformedW;
+		retVal *= transformedW;
+	}
+	return retVal;
+}
+
+// Transform a Vector3 by a quaternion
+Vector3 Vector3::Transform(const Vector3& v, const Quaternion& q)
+{
+	// v + 2.0*cross(q.xyz, cross(q.xyz,v) + q.w*v);
+	Vector3 qv(q.x, q.y, q.z);
+	Vector3 retVal = v;
+	retVal += 2.0f * Vector3::Cross(qv, Vector3::Cross(qv, v) + q.w * v);
+	return retVal;
+}
+
+void Matrix4::Invert()
+{
+	// Thanks slow math
+	// This is a really janky way to unroll everything...
+	float tmp[12];
+	float src[16];
+	float dst[16];
+	float det;
+
+	// Transpose matrix
+	// row 1 to col 1
+	src[0] = mat[0][0];
+	src[4] = mat[0][1];
+	src[8] = mat[0][2];
+	src[12] = mat[0][3];
+
+	// row 2 to col 2
+	src[1] = mat[1][0];
+	src[5] = mat[1][1];
+	src[9] = mat[1][2];
+	src[13] = mat[1][3];
+
+	// row 3 to col 3
+	src[2] = mat[2][0];
+	src[6] = mat[2][1];
+	src[10] = mat[2][2];
+	src[14] = mat[2][3];
+
+	// row 4 to col 4
+	src[3] = mat[3][0];
+	src[7] = mat[3][1];
+	src[11] = mat[3][2];
+	src[15] = mat[3][3];
+
+	// Calculate cofactors
+	tmp[0] = src[10] * src[15];
+	tmp[1] = src[11] * src[14];
+	tmp[2] = src[9] * src[15];
+	tmp[3] = src[11] * src[13];
+	tmp[4] = src[9] * src[14];
+	tmp[5] = src[10] * src[13];
+	tmp[6] = src[8] * src[15];
+	tmp[7] = src[11] * src[12];
+	tmp[8] = src[8] * src[14];
+	tmp[9] = src[10] * src[12];
+	tmp[10] = src[8] * src[13];
+	tmp[11] = src[9] * src[12];
+	
+	dst[0] = tmp[0] * src[5] + tmp[3] * src[6] + tmp[4] * src[7];
+	dst[0] -= tmp[1] * src[5] + tmp[2] * src[6] + tmp[5] * src[7];
+	dst[1] = tmp[1] * src[4] + tmp[6] * src[6] + tmp[9] * src[7];
+	dst[1] -= tmp[0] * src[4] + tmp[7] * src[6] + tmp[8] * src[7];
+	dst[2] = tmp[2] * src[4] + tmp[7] * src[5] + tmp[10] * src[7];
+	dst[2] -= tmp[3] * src[4] + tmp[6] * src[5] + tmp[11] * src[7];
+	dst[3] = tmp[5] * src[4] + tmp[8] * src[5] + tmp[11] * src[6];
+	dst[3] -= tmp[4] * src[4] + tmp[9] * src[5] + tmp[10] * src[6];
+	dst[4] = tmp[1] * src[1] + tmp[2] * src[2] + tmp[5] * src[3];
+	dst[4] -= tmp[0] * src[1] + tmp[3] * src[2] + tmp[4] * src[3];
+	dst[5] = tmp[0] * src[0] + tmp[7] * src[2] + tmp[8] * src[3];
+	dst[5] -= tmp[1] * src[0] + tmp[6] * src[2] + tmp[9] * src[3];
+	dst[6] = tmp[3] * src[0] + tmp[6] * src[1] + tmp[11] * src[3];
+	dst[6] -= tmp[2] * src[0] + tmp[7] * src[1] + tmp[10] * src[3];
+	dst[7] = tmp[4] * src[0] + tmp[9] * src[1] + tmp[10] * src[2];
+	dst[7] -= tmp[5] * src[0] + tmp[8] * src[1] + tmp[11] * src[2];
+	
+	tmp[0] = src[2] * src[7];
+	tmp[1] = src[3] * src[6];
+	tmp[2] = src[1] * src[7];
+	tmp[3] = src[3] * src[5];
+	tmp[4] = src[1] * src[6];
+	tmp[5] = src[2] * src[5];
+	tmp[6] = src[0] * src[7];
+	tmp[7] = src[3] * src[4];
+	tmp[8] = src[0] * src[6];
+	tmp[9] = src[2] * src[4];
+	tmp[10] = src[0] * src[5];
+	tmp[11] = src[1] * src[4];
+	
+	dst[8] = tmp[0] * src[13] + tmp[3] * src[14] + tmp[4] * src[15];
+	dst[8] -= tmp[1] * src[13] + tmp[2] * src[14] + tmp[5] * src[15];
+	dst[9] = tmp[1] * src[12] + tmp[6] * src[14] + tmp[9] * src[15];
+	dst[9] -= tmp[0] * src[12] + tmp[7] * src[14] + tmp[8] * src[15];
+	dst[10] = tmp[2] * src[12] + tmp[7] * src[13] + tmp[10] * src[15];
+	dst[10] -= tmp[3] * src[12] + tmp[6] * src[13] + tmp[11] * src[15];
+	dst[11] = tmp[5] * src[12] + tmp[8] * src[13] + tmp[11] * src[14];
+	dst[11] -= tmp[4] * src[12] + tmp[9] * src[13] + tmp[10] * src[14];
+	dst[12] = tmp[2] * src[10] + tmp[5] * src[11] + tmp[1] * src[9];
+	dst[12] -= tmp[4] * src[11] + tmp[0] * src[9] + tmp[3] * src[10];
+	dst[13] = tmp[8] * src[11] + tmp[0] * src[8] + tmp[7] * src[10];
+	dst[13] -= tmp[6] * src[10] + tmp[9] * src[11] + tmp[1] * src[8];
+	dst[14] = tmp[6] * src[9] + tmp[11] * src[11] + tmp[3] * src[8];
+	dst[14] -= tmp[10] * src[11] + tmp[2] * src[8] + tmp[7] * src[9];
+	dst[15] = tmp[10] * src[10] + tmp[4] * src[8] + tmp[9] * src[9];
+	dst[15] -= tmp[8] * src[9] + tmp[11] * src[10] + tmp[5] * src[8];
+	
+	// Calculate determinant
+	det = src[0] * dst[0] + src[1] * dst[1] + src[2] * dst[2] + src[3] * dst[3];
+	
+	// Inverse of matrix is divided by determinant
+	det = 1 / det;
+	for (int j = 0; j < 16; j++)
+	{
+		dst[j] *= det;
+	}
+
+	// Set it back
+	for (int i = 0; i < 4; i++)
+	{
+		for (int j = 0; j < 4; j++)
+		{
+			mat[i][j] = dst[i * 4 + j];
+		}
+	}
+}
+
+Matrix4 Matrix4::CreateFromQuaternion(const class Quaternion& q)
+{
+	float mat[4][4];
+	
+	mat[0][0] = 1.0f - 2.0f * q.y * q.y - 2.0f * q.z * q.z;
+	mat[0][1] = 2.0f * q.x * q.y + 2.0f * q.w * q.z;
+	mat[0][2] = 2.0f * q.x * q.z - 2.0f * q.w * q.y;
+	mat[0][3] = 0.0f;
+
+	mat[1][0] = 2.0f * q.x * q.y - 2.0f * q.w * q.z;
+	mat[1][1] = 1.0f - 2.0f * q.x * q.x - 2.0f * q.z * q.z;
+	mat[1][2] = 2.0f * q.y * q.z + 2.0f * q.w * q.x;
+	mat[1][3] = 0.0f;
+
+	mat[2][0] = 2.0f * q.x * q.z + 2.0f * q.w * q.y;
+	mat[2][1] = 2.0f * q.y * q.z - 2.0f * q.w * q.x;
+	mat[2][2] = 1.0f - 2.0f * q.x * q.x - 2.0f * q.y * q.y;
+	mat[2][3] = 0.0f;
+
+	mat[3][0] = 0.0f;
+	mat[3][1] = 0.0f;
+	mat[3][2] = 0.0f;
+	mat[3][3] = 1.0f;
+
+	return Matrix4(mat);
+}
diff --git a/Exercises/4.2/Math.h b/Exercises/4.2/Math.h
new file mode 100644
index 0000000000000000000000000000000000000000..752963f1540b8aea483a8c39ab2d6afb561c5d13
--- /dev/null
+++ b/Exercises/4.2/Math.h
@@ -0,0 +1,1033 @@
+// ----------------------------------------------------------------
+// From Game Programming in C++ by Sanjay Madhav
+// Copyright (C) 2017 Sanjay Madhav. All rights reserved.
+// 
+// Released under the BSD License
+// See LICENSE in root directory for full details.
+// ----------------------------------------------------------------
+
+#pragma once
+
+#include <cmath>
+#include <memory.h>
+#include <limits>
+
+namespace Math
+{
+	const float Pi = 3.1415926535f;
+	const float TwoPi = Pi * 2.0f;
+	const float PiOver2 = Pi / 2.0f;
+	const float Infinity = std::numeric_limits<float>::infinity();
+	const float NegInfinity = -std::numeric_limits<float>::infinity();
+
+	inline float ToRadians(float degrees)
+	{
+		return degrees * Pi / 180.0f;
+	}
+
+	inline float ToDegrees(float radians)
+	{
+		return radians * 180.0f / Pi;
+	}
+
+	inline bool NearZero(float val, float epsilon = 0.001f)
+	{
+		if (fabs(val) <= epsilon)
+		{
+			return true;
+		}
+		else
+		{
+			return false;
+		}
+	}
+
+	template <typename T>
+	T Max(const T& a, const T& b)
+	{
+		return (a < b ? b : a);
+	}
+
+	template <typename T>
+	T Min(const T& a, const T& b)
+	{
+		return (a < b ? a : b);
+	}
+
+	template <typename T>
+	T Clamp(const T& value, const T& lower, const T& upper)
+	{
+		return Min(upper, Max(lower, value));
+	}
+
+	inline float Abs(float value)
+	{
+		return fabs(value);
+	}
+
+	inline float Cos(float angle)
+	{
+		return cosf(angle);
+	}
+
+	inline float Sin(float angle)
+	{
+		return sinf(angle);
+	}
+
+	inline float Tan(float angle)
+	{
+		return tanf(angle);
+	}
+
+	inline float Acos(float value)
+	{
+		return acosf(value);
+	}
+	
+	inline float Atan2(float y, float x)
+	{
+		return atan2f(y, x);
+	}
+
+	inline float Cot(float angle)
+	{
+		return 1.0f / Tan(angle);
+	}
+
+	inline float Lerp(float a, float b, float f)
+	{
+		return a + f * (b - a);
+	}
+
+	inline float Sqrt(float value)
+	{
+		return sqrtf(value);
+	}
+	
+	inline float Fmod(float numer, float denom)
+	{
+		return fmod(numer, denom);
+	}
+}
+
+// 2D Vector
+class Vector2
+{
+public:
+	float x;
+	float y;
+
+	Vector2()
+		:x(0.0f)
+		,y(0.0f)
+	{}
+
+	explicit Vector2(float inX, float inY)
+		:x(inX)
+		,y(inY)
+	{}
+
+	// Set both components in one line
+	void Set(float inX, float inY)
+	{
+		x = inX;
+		y = inY;
+	}
+
+	// Vector addition (a + b)
+	friend Vector2 operator+(const Vector2& a, const Vector2& b)
+	{
+		return Vector2(a.x + b.x, a.y + b.y);
+	}
+
+	// Vector subtraction (a - b)
+	friend Vector2 operator-(const Vector2& a, const Vector2& b)
+	{
+		return Vector2(a.x - b.x, a.y - b.y);
+	}
+
+	// Component-wise multiplication
+	// (a.x * b.x, ...)
+	friend Vector2 operator*(const Vector2& a, const Vector2& b)
+	{
+		return Vector2(a.x * b.x, a.y * b.y);
+	}
+
+	// Scalar multiplication
+	friend Vector2 operator*(const Vector2& vec, float scalar)
+	{
+		return Vector2(vec.x * scalar, vec.y * scalar);
+	}
+
+	// Scalar multiplication
+	friend Vector2 operator*(float scalar, const Vector2& vec)
+	{
+		return Vector2(vec.x * scalar, vec.y * scalar);
+	}
+
+	// Scalar *=
+	Vector2& operator*=(float scalar)
+	{
+		x *= scalar;
+		y *= scalar;
+		return *this;
+	}
+
+	// Vector +=
+	Vector2& operator+=(const Vector2& right)
+	{
+		x += right.x;
+		y += right.y;
+		return *this;
+	}
+
+	// Vector -=
+	Vector2& operator-=(const Vector2& right)
+	{
+		x -= right.x;
+		y -= right.y;
+		return *this;
+	}
+
+	// Length squared of vector
+	float LengthSq() const
+	{
+		return (x*x + y*y);
+	}
+
+	// Length of vector
+	float Length() const
+	{
+		return (Math::Sqrt(LengthSq()));
+	}
+
+	// Normalize this vector
+	void Normalize()
+	{
+		float length = Length();
+		x /= length;
+		y /= length;
+	}
+
+	// Normalize the provided vector
+	static Vector2 Normalize(const Vector2& vec)
+	{
+		Vector2 temp = vec;
+		temp.Normalize();
+		return temp;
+	}
+
+	// Dot product between two vectors (a dot b)
+	static float Dot(const Vector2& a, const Vector2& b)
+	{
+		return (a.x * b.x + a.y * b.y);
+	}
+
+	// Lerp from A to B by f
+	static Vector2 Lerp(const Vector2& a, const Vector2& b, float f)
+	{
+		return Vector2(a + f * (b - a));
+	}
+	
+	// Reflect V about (normalized) N
+	static Vector2 Reflect(const Vector2& v, const Vector2& n)
+	{
+		return v - 2.0f * Vector2::Dot(v, n) * n;
+	}
+
+	// Transform vector by matrix
+	static Vector2 Transform(const Vector2& vec, const class Matrix3& mat, float w = 1.0f);
+
+	static const Vector2 Zero;
+	static const Vector2 UnitX;
+	static const Vector2 UnitY;
+	static const Vector2 NegUnitX;
+	static const Vector2 NegUnitY;
+};
+
+// 3D Vector
+class Vector3
+{
+public:
+	float x;
+	float y;
+	float z;
+
+	Vector3()
+		:x(0.0f)
+		,y(0.0f)
+		,z(0.0f)
+	{}
+
+	explicit Vector3(float inX, float inY, float inZ)
+		:x(inX)
+		,y(inY)
+		,z(inZ)
+	{}
+
+	// Cast to a const float pointer
+	const float* GetAsFloatPtr() const
+	{
+		return reinterpret_cast<const float*>(&x);
+	}
+
+	// Set all three components in one line
+	void Set(float inX, float inY, float inZ)
+	{
+		x = inX;
+		y = inY;
+		z = inZ;
+	}
+
+	// Vector addition (a + b)
+	friend Vector3 operator+(const Vector3& a, const Vector3& b)
+	{
+		return Vector3(a.x + b.x, a.y + b.y, a.z + b.z);
+	}
+
+	// Vector subtraction (a - b)
+	friend Vector3 operator-(const Vector3& a, const Vector3& b)
+	{
+		return Vector3(a.x - b.x, a.y - b.y, a.z - b.z);
+	}
+
+	// Component-wise multiplication
+	friend Vector3 operator*(const Vector3& left, const Vector3& right)
+	{
+		return Vector3(left.x * right.x, left.y * right.y, left.z * right.z);
+	}
+
+	// Scalar multiplication
+	friend Vector3 operator*(const Vector3& vec, float scalar)
+	{
+		return Vector3(vec.x * scalar, vec.y * scalar, vec.z * scalar);
+	}
+
+	// Scalar multiplication
+	friend Vector3 operator*(float scalar, const Vector3& vec)
+	{
+		return Vector3(vec.x * scalar, vec.y * scalar, vec.z * scalar);
+	}
+
+	// Scalar *=
+	Vector3& operator*=(float scalar)
+	{
+		x *= scalar;
+		y *= scalar;
+		z *= scalar;
+		return *this;
+	}
+
+	// Vector +=
+	Vector3& operator+=(const Vector3& right)
+	{
+		x += right.x;
+		y += right.y;
+		z += right.z;
+		return *this;
+	}
+
+	// Vector -=
+	Vector3& operator-=(const Vector3& right)
+	{
+		x -= right.x;
+		y -= right.y;
+		z -= right.z;
+		return *this;
+	}
+
+	// Length squared of vector
+	float LengthSq() const
+	{
+		return (x*x + y*y + z*z);
+	}
+
+	// Length of vector
+	float Length() const
+	{
+		return (Math::Sqrt(LengthSq()));
+	}
+
+	// Normalize this vector
+	void Normalize()
+	{
+		float length = Length();
+		x /= length;
+		y /= length;
+		z /= length;
+	}
+
+	// Normalize the provided vector
+	static Vector3 Normalize(const Vector3& vec)
+	{
+		Vector3 temp = vec;
+		temp.Normalize();
+		return temp;
+	}
+
+	// Dot product between two vectors (a dot b)
+	static float Dot(const Vector3& a, const Vector3& b)
+	{
+		return (a.x * b.x + a.y * b.y + a.z * b.z);
+	}
+
+	// Cross product between two vectors (a cross b)
+	static Vector3 Cross(const Vector3& a, const Vector3& b)
+	{
+		Vector3 temp;
+		temp.x = a.y * b.z - a.z * b.y;
+		temp.y = a.z * b.x - a.x * b.z;
+		temp.z = a.x * b.y - a.y * b.x;
+		return temp;
+	}
+
+	// Lerp from A to B by f
+	static Vector3 Lerp(const Vector3& a, const Vector3& b, float f)
+	{
+		return Vector3(a + f * (b - a));
+	}
+	
+	// Reflect V about (normalized) N
+	static Vector3 Reflect(const Vector3& v, const Vector3& n)
+	{
+		return v - 2.0f * Vector3::Dot(v, n) * n;
+	}
+
+	static Vector3 Transform(const Vector3& vec, const class Matrix4& mat, float w = 1.0f);
+	// This will transform the vector and renormalize the w component
+	static Vector3 TransformWithPerspDiv(const Vector3& vec, const class Matrix4& mat, float w = 1.0f);
+
+	// Transform a Vector3 by a quaternion
+	static Vector3 Transform(const Vector3& v, const class Quaternion& q);
+
+	static const Vector3 Zero;
+	static const Vector3 UnitX;
+	static const Vector3 UnitY;
+	static const Vector3 UnitZ;
+	static const Vector3 NegUnitX;
+	static const Vector3 NegUnitY;
+	static const Vector3 NegUnitZ;
+	static const Vector3 Infinity;
+	static const Vector3 NegInfinity;
+};
+
+// 3x3 Matrix
+class Matrix3
+{
+public:
+	float mat[3][3];
+
+	Matrix3()
+	{
+		*this = Matrix3::Identity;
+	}
+
+	explicit Matrix3(float inMat[3][3])
+	{
+		memcpy(mat, inMat, 9 * sizeof(float));
+	}
+
+	// Cast to a const float pointer
+	const float* GetAsFloatPtr() const
+	{
+		return reinterpret_cast<const float*>(&mat[0][0]);
+	}
+
+	// Matrix multiplication
+	friend Matrix3 operator*(const Matrix3& left, const Matrix3& right)
+	{
+		Matrix3 retVal;
+		// row 0
+		retVal.mat[0][0] = 
+			left.mat[0][0] * right.mat[0][0] +
+			left.mat[0][1] * right.mat[1][0] +
+			left.mat[0][2] * right.mat[2][0];
+
+		retVal.mat[0][1] = 
+			left.mat[0][0] * right.mat[0][1] +
+			left.mat[0][1] * right.mat[1][1] +
+			left.mat[0][2] * right.mat[2][1];
+
+		retVal.mat[0][2] = 
+			left.mat[0][0] * right.mat[0][2] +
+			left.mat[0][1] * right.mat[1][2] +
+			left.mat[0][2] * right.mat[2][2];
+		
+		// row 1
+		retVal.mat[1][0] = 
+			left.mat[1][0] * right.mat[0][0] +
+			left.mat[1][1] * right.mat[1][0] +
+			left.mat[1][2] * right.mat[2][0];
+
+		retVal.mat[1][1] = 
+			left.mat[1][0] * right.mat[0][1] +
+			left.mat[1][1] * right.mat[1][1] +
+			left.mat[1][2] * right.mat[2][1];
+
+		retVal.mat[1][2] = 
+			left.mat[1][0] * right.mat[0][2] +
+			left.mat[1][1] * right.mat[1][2] +
+			left.mat[1][2] * right.mat[2][2];
+		
+		// row 2
+		retVal.mat[2][0] = 
+			left.mat[2][0] * right.mat[0][0] +
+			left.mat[2][1] * right.mat[1][0] +
+			left.mat[2][2] * right.mat[2][0];
+
+		retVal.mat[2][1] =
+			left.mat[2][0] * right.mat[0][1] +
+			left.mat[2][1] * right.mat[1][1] +
+			left.mat[2][2] * right.mat[2][1];
+
+		retVal.mat[2][2] = 
+			left.mat[2][0] * right.mat[0][2] +
+			left.mat[2][1] * right.mat[1][2] +
+			left.mat[2][2] * right.mat[2][2];
+
+		return retVal;
+	}
+
+	Matrix3& operator*=(const Matrix3& right)
+	{
+		*this = *this * right;
+		return *this;
+	}
+
+	// Create a scale matrix with x and y scales
+	static Matrix3 CreateScale(float xScale, float yScale)
+	{
+		float temp[3][3] =
+		{
+			{ xScale, 0.0f, 0.0f },
+			{ 0.0f, yScale, 0.0f },
+			{ 0.0f, 0.0f, 1.0f },
+		};
+		return Matrix3(temp);
+	}
+
+	static Matrix3 CreateScale(const Vector2& scaleVector)
+	{
+		return CreateScale(scaleVector.x, scaleVector.y);
+	}
+
+	// Create a scale matrix with a uniform factor
+	static Matrix3 CreateScale(float scale)
+	{
+		return CreateScale(scale, scale);
+	}
+
+	// Create a rotation matrix about the Z axis
+	// theta is in radians
+	static Matrix3 CreateRotation(float theta)
+	{
+		float temp[3][3] =
+		{
+			{ Math::Cos(theta), Math::Sin(theta), 0.0f },
+			{ -Math::Sin(theta), Math::Cos(theta), 0.0f },
+			{ 0.0f, 0.0f, 1.0f },
+		};
+		return Matrix3(temp);
+	}
+
+	// Create a translation matrix (on the xy-plane)
+	static Matrix3 CreateTranslation(const Vector2& trans)
+	{
+		float temp[3][3] =
+		{
+			{ 1.0f, 0.0f, 0.0f },
+			{ 0.0f, 1.0f, 0.0f },
+			{ trans.x, trans.y, 1.0f },
+		};
+		return Matrix3(temp);
+	}
+
+	static const Matrix3 Identity;
+};
+
+// 4x4 Matrix
+class Matrix4
+{
+public:
+	float mat[4][4];
+
+	Matrix4()
+	{
+		*this = Matrix4::Identity;
+	}
+
+	explicit Matrix4(float inMat[4][4])
+	{
+		memcpy(mat, inMat, 16 * sizeof(float));
+	}
+
+	// Cast to a const float pointer
+	const float* GetAsFloatPtr() const
+	{
+		return reinterpret_cast<const float*>(&mat[0][0]);
+	}
+
+	// Matrix multiplication (a * b)
+	friend Matrix4 operator*(const Matrix4& a, const Matrix4& b)
+	{
+		Matrix4 retVal;
+		// row 0
+		retVal.mat[0][0] = 
+			a.mat[0][0] * b.mat[0][0] + 
+			a.mat[0][1] * b.mat[1][0] + 
+			a.mat[0][2] * b.mat[2][0] +
+			a.mat[0][3] * b.mat[3][0];
+
+		retVal.mat[0][1] = 
+			a.mat[0][0] * b.mat[0][1] + 
+			a.mat[0][1] * b.mat[1][1] + 
+			a.mat[0][2] * b.mat[2][1] + 
+			a.mat[0][3] * b.mat[3][1];
+
+		retVal.mat[0][2] = 
+			a.mat[0][0] * b.mat[0][2] + 
+			a.mat[0][1] * b.mat[1][2] + 
+			a.mat[0][2] * b.mat[2][2] + 
+			a.mat[0][3] * b.mat[3][2];
+		
+		retVal.mat[0][3] = 
+			a.mat[0][0] * b.mat[0][3] + 
+			a.mat[0][1] * b.mat[1][3] + 
+			a.mat[0][2] * b.mat[2][3] + 
+			a.mat[0][3] * b.mat[3][3];
+
+		// row 1
+		retVal.mat[1][0] = 
+			a.mat[1][0] * b.mat[0][0] + 
+			a.mat[1][1] * b.mat[1][0] + 
+			a.mat[1][2] * b.mat[2][0] + 
+			a.mat[1][3] * b.mat[3][0];
+
+		retVal.mat[1][1] = 
+			a.mat[1][0] * b.mat[0][1] + 
+			a.mat[1][1] * b.mat[1][1] + 
+			a.mat[1][2] * b.mat[2][1] + 
+			a.mat[1][3] * b.mat[3][1];
+
+		retVal.mat[1][2] = 
+			a.mat[1][0] * b.mat[0][2] + 
+			a.mat[1][1] * b.mat[1][2] + 
+			a.mat[1][2] * b.mat[2][2] + 
+			a.mat[1][3] * b.mat[3][2];
+
+		retVal.mat[1][3] = 
+			a.mat[1][0] * b.mat[0][3] +
+			a.mat[1][1] * b.mat[1][3] +
+			a.mat[1][2] * b.mat[2][3] +
+			a.mat[1][3] * b.mat[3][3];
+
+		// row 2
+		retVal.mat[2][0] = 
+			a.mat[2][0] * b.mat[0][0] +
+			a.mat[2][1] * b.mat[1][0] +
+			a.mat[2][2] * b.mat[2][0] +
+			a.mat[2][3] * b.mat[3][0];
+
+		retVal.mat[2][1] = 
+			a.mat[2][0] * b.mat[0][1] + 
+			a.mat[2][1] * b.mat[1][1] + 
+			a.mat[2][2] * b.mat[2][1] + 
+			a.mat[2][3] * b.mat[3][1];
+
+		retVal.mat[2][2] = 
+			a.mat[2][0] * b.mat[0][2] +
+			a.mat[2][1] * b.mat[1][2] + 
+			a.mat[2][2] * b.mat[2][2] + 
+			a.mat[2][3] * b.mat[3][2];
+
+		retVal.mat[2][3] = 
+			a.mat[2][0] * b.mat[0][3] + 
+			a.mat[2][1] * b.mat[1][3] + 
+			a.mat[2][2] * b.mat[2][3] + 
+			a.mat[2][3] * b.mat[3][3];
+
+		// row 3
+		retVal.mat[3][0] = 
+			a.mat[3][0] * b.mat[0][0] + 
+			a.mat[3][1] * b.mat[1][0] + 
+			a.mat[3][2] * b.mat[2][0] + 
+			a.mat[3][3] * b.mat[3][0];
+
+		retVal.mat[3][1] = 
+			a.mat[3][0] * b.mat[0][1] + 
+			a.mat[3][1] * b.mat[1][1] + 
+			a.mat[3][2] * b.mat[2][1] + 
+			a.mat[3][3] * b.mat[3][1];
+
+		retVal.mat[3][2] = 
+			a.mat[3][0] * b.mat[0][2] +
+			a.mat[3][1] * b.mat[1][2] +
+			a.mat[3][2] * b.mat[2][2] +
+			a.mat[3][3] * b.mat[3][2];
+
+		retVal.mat[3][3] = 
+			a.mat[3][0] * b.mat[0][3] +
+			a.mat[3][1] * b.mat[1][3] +
+			a.mat[3][2] * b.mat[2][3] +
+			a.mat[3][3] * b.mat[3][3];
+		
+		return retVal;
+	}
+
+	Matrix4& operator*=(const Matrix4& right)
+	{
+		*this = *this * right;
+		return *this;
+	}
+
+	// Invert the matrix - super slow
+	void Invert();
+
+	// Get the translation component of the matrix
+	Vector3 GetTranslation() const
+	{
+		return Vector3(mat[3][0], mat[3][1], mat[3][2]);
+	}
+	
+	// Get the X axis of the matrix (forward)
+	Vector3 GetXAxis() const
+	{
+		return Vector3::Normalize(Vector3(mat[0][0], mat[0][1], mat[0][2]));
+	}
+
+	// Get the Y axis of the matrix (left)
+	Vector3 GetYAxis() const
+	{
+		return Vector3::Normalize(Vector3(mat[1][0], mat[1][1], mat[1][2]));
+	}
+
+	// Get the Z axis of the matrix (up)
+	Vector3 GetZAxis() const
+	{
+		return Vector3::Normalize(Vector3(mat[2][0], mat[2][1], mat[2][2]));
+	}
+
+	// Extract the scale component from the matrix
+	Vector3 GetScale() const
+	{
+		Vector3 retVal;
+		retVal.x = Vector3(mat[0][0], mat[0][1], mat[0][2]).Length();
+		retVal.y = Vector3(mat[1][0], mat[1][1], mat[1][2]).Length();
+		retVal.z = Vector3(mat[2][0], mat[2][1], mat[2][2]).Length();
+		return retVal;
+	}
+
+	// Create a scale matrix with x, y, and z scales
+	static Matrix4 CreateScale(float xScale, float yScale, float zScale)
+	{
+		float temp[4][4] =
+		{
+			{ xScale, 0.0f, 0.0f, 0.0f },
+			{ 0.0f, yScale, 0.0f, 0.0f },
+			{ 0.0f, 0.0f, zScale, 0.0f },
+			{ 0.0f, 0.0f, 0.0f, 1.0f }
+		};
+		return Matrix4(temp);
+	}
+
+	static Matrix4 CreateScale(const Vector3& scaleVector)
+	{
+		return CreateScale(scaleVector.x, scaleVector.y, scaleVector.z);
+	}
+
+	// Create a scale matrix with a uniform factor
+	static Matrix4 CreateScale(float scale)
+	{
+		return CreateScale(scale, scale, scale);
+	}
+
+	// Rotation about x-axis
+	static Matrix4 CreateRotationX(float theta)
+	{
+		float temp[4][4] =
+		{
+			{ 1.0f, 0.0f, 0.0f , 0.0f },
+			{ 0.0f, Math::Cos(theta), Math::Sin(theta), 0.0f },
+			{ 0.0f, -Math::Sin(theta), Math::Cos(theta), 0.0f },
+			{ 0.0f, 0.0f, 0.0f, 1.0f },
+		};
+		return Matrix4(temp);
+	}
+
+	// Rotation about y-axis
+	static Matrix4 CreateRotationY(float theta)
+	{
+		float temp[4][4] =
+		{
+			{ Math::Cos(theta), 0.0f, -Math::Sin(theta), 0.0f },
+			{ 0.0f, 1.0f, 0.0f, 0.0f },
+			{ Math::Sin(theta), 0.0f, Math::Cos(theta), 0.0f },
+			{ 0.0f, 0.0f, 0.0f, 1.0f },
+		};
+		return Matrix4(temp);
+	}
+
+	// Rotation about z-axis
+	static Matrix4 CreateRotationZ(float theta)
+	{
+		float temp[4][4] =
+		{
+			{ Math::Cos(theta), Math::Sin(theta), 0.0f, 0.0f },
+			{ -Math::Sin(theta), Math::Cos(theta), 0.0f, 0.0f },
+			{ 0.0f, 0.0f, 1.0f, 0.0f },
+			{ 0.0f, 0.0f, 0.0f, 1.0f },
+		};
+		return Matrix4(temp);
+	}
+
+	// Create a rotation matrix from a quaternion
+	static Matrix4 CreateFromQuaternion(const class Quaternion& q);
+
+	static Matrix4 CreateTranslation(const Vector3& trans)
+	{
+		float temp[4][4] =
+		{
+			{ 1.0f, 0.0f, 0.0f, 0.0f },
+			{ 0.0f, 1.0f, 0.0f, 0.0f },
+			{ 0.0f, 0.0f, 1.0f, 0.0f },
+			{ trans.x, trans.y, trans.z, 1.0f }
+		};
+		return Matrix4(temp);
+	}
+
+	static Matrix4 CreateLookAt(const Vector3& eye, const Vector3& target, const Vector3& up)
+	{
+		Vector3 zaxis = Vector3::Normalize(target - eye);
+		Vector3 xaxis = Vector3::Normalize(Vector3::Cross(up, zaxis));
+		Vector3 yaxis = Vector3::Normalize(Vector3::Cross(zaxis, xaxis));
+		Vector3 trans;
+		trans.x = -Vector3::Dot(xaxis, eye);
+		trans.y = -Vector3::Dot(yaxis, eye);
+		trans.z = -Vector3::Dot(zaxis, eye);
+
+		float temp[4][4] =
+		{
+			{ xaxis.x, yaxis.x, zaxis.x, 0.0f },
+			{ xaxis.y, yaxis.y, zaxis.y, 0.0f },
+			{ xaxis.z, yaxis.z, zaxis.z, 0.0f },
+			{ trans.x, trans.y, trans.z, 1.0f }
+		};
+		return Matrix4(temp);
+	}
+
+	static Matrix4 CreateOrtho(float width, float height, float near, float far)
+	{
+		float temp[4][4] =
+		{
+			{ 2.0f / width, 0.0f, 0.0f, 0.0f },
+			{ 0.0f, 2.0f / height, 0.0f, 0.0f },
+			{ 0.0f, 0.0f, 1.0f / (far - near), 0.0f },
+			{ 0.0f, 0.0f, near / (near - far), 1.0f }
+		};
+		return Matrix4(temp);
+	}
+
+	static Matrix4 CreatePerspectiveFOV(float fovY, float width, float height, float near, float far)
+	{
+		float yScale = Math::Cot(fovY / 2.0f);
+		float xScale = yScale * height / width;
+		float temp[4][4] =
+		{
+			{ xScale, 0.0f, 0.0f, 0.0f },
+			{ 0.0f, yScale, 0.0f, 0.0f },
+			{ 0.0f, 0.0f, far / (far - near), 1.0f },
+			{ 0.0f, 0.0f, -near * far / (far - near), 0.0f }
+		};
+		return Matrix4(temp);
+	}
+
+	// Create "Simple" View-Projection Matrix from Chapter 6
+	static Matrix4 CreateSimpleViewProj(float width, float height)
+	{
+		float temp[4][4] =
+		{
+			{ 2.0f/width, 0.0f, 0.0f, 0.0f },
+			{ 0.0f, 2.0f/height, 0.0f, 0.0f },
+			{ 0.0f, 0.0f, 1.0f, 0.0f },
+			{ 0.0f, 0.0f, 1.0f, 1.0f }
+		};
+		return Matrix4(temp);
+	}
+	
+	static const Matrix4 Identity;
+};
+
+// (Unit) Quaternion
+class Quaternion
+{
+public:
+	float x;
+	float y;
+	float z;
+	float w;
+
+	Quaternion()
+	{
+		*this = Quaternion::Identity;
+	}
+
+	// This directly sets the quaternion components --
+	// don't use for axis/angle
+	explicit Quaternion(float inX, float inY, float inZ, float inW)
+	{
+		Set(inX, inY, inZ, inW);
+	}
+
+	// Construct the quaternion from an axis and angle
+	// It is assumed that axis is already normalized,
+	// and the angle is in radians
+	explicit Quaternion(const Vector3& axis, float angle)
+	{
+		float scalar = Math::Sin(angle / 2.0f);
+		x = axis.x * scalar;
+		y = axis.y * scalar;
+		z = axis.z * scalar;
+		w = Math::Cos(angle / 2.0f);
+	}
+
+	// Directly set the internal components
+	void Set(float inX, float inY, float inZ, float inW)
+	{
+		x = inX;
+		y = inY;
+		z = inZ;
+		w = inW;
+	}
+
+	void Conjugate()
+	{
+		x *= -1.0f;
+		y *= -1.0f;
+		z *= -1.0f;
+	}
+
+	float LengthSq() const
+	{
+		return (x*x + y*y + z*z + w*w);
+	}
+
+	float Length() const
+	{
+		return Math::Sqrt(LengthSq());
+	}
+
+	void Normalize()
+	{
+		float length = Length();
+		x /= length;
+		y /= length;
+		z /= length;
+		w /= length;
+	}
+
+	// Normalize the provided quaternion
+	static Quaternion Normalize(const Quaternion& q)
+	{
+		Quaternion retVal = q;
+		retVal.Normalize();
+		return retVal;
+	}
+
+	// Linear interpolation
+	static Quaternion Lerp(const Quaternion& a, const Quaternion& b, float f)
+	{
+		Quaternion retVal;
+		retVal.x = Math::Lerp(a.x, b.x, f);
+		retVal.y = Math::Lerp(a.y, b.y, f);
+		retVal.z = Math::Lerp(a.z, b.z, f);
+		retVal.w = Math::Lerp(a.w, b.w, f);
+		retVal.Normalize();
+		return retVal;
+	}
+
+	static float Dot(const Quaternion& a, const Quaternion& b)
+	{
+		return a.x * b.x + a.y * b.y + a.z * b.z + a.w * b.w;
+	}
+
+	// Spherical Linear Interpolation
+	static Quaternion Slerp(const Quaternion& a, const Quaternion& b, float f)
+	{
+		float rawCosm = Quaternion::Dot(a, b);
+
+		float cosom = -rawCosm;
+		if (rawCosm >= 0.0f)
+		{
+			cosom = rawCosm;
+		}
+
+		float scale0, scale1;
+
+		if (cosom < 0.9999f)
+		{
+			const float omega = Math::Acos(cosom);
+			const float invSin = 1.f / Math::Sin(omega);
+			scale0 = Math::Sin((1.f - f) * omega) * invSin;
+			scale1 = Math::Sin(f * omega) * invSin;
+		}
+		else
+		{
+			// Use linear interpolation if the quaternions
+			// are collinear
+			scale0 = 1.0f - f;
+			scale1 = f;
+		}
+
+		if (rawCosm < 0.0f)
+		{
+			scale1 = -scale1;
+		}
+
+		Quaternion retVal;
+		retVal.x = scale0 * a.x + scale1 * b.x;
+		retVal.y = scale0 * a.y + scale1 * b.y;
+		retVal.z = scale0 * a.z + scale1 * b.z;
+		retVal.w = scale0 * a.w + scale1 * b.w;
+		retVal.Normalize();
+		return retVal;
+	}
+
+	// Concatenate
+	// Rotate by q FOLLOWED BY p
+	static Quaternion Concatenate(const Quaternion& q, const Quaternion& p)
+	{
+		Quaternion retVal;
+
+		// Vector component is:
+		// ps * qv + qs * pv + pv x qv
+		Vector3 qv(q.x, q.y, q.z);
+		Vector3 pv(p.x, p.y, p.z);
+		Vector3 newVec = p.w * qv + q.w * pv + Vector3::Cross(pv, qv);
+		retVal.x = newVec.x;
+		retVal.y = newVec.y;
+		retVal.z = newVec.z;
+
+		// Scalar component is:
+		// ps * qs - pv . qv
+		retVal.w = p.w * q.w - Vector3::Dot(pv, qv);
+
+		return retVal;
+	}
+
+	static const Quaternion Identity;
+};
+
+namespace Color
+{
+	static const Vector3 Black(0.0f, 0.0f, 0.0f);
+	static const Vector3 White(1.0f, 1.0f, 1.0f);
+	static const Vector3 Red(1.0f, 0.0f, 0.0f);
+	static const Vector3 Green(0.0f, 1.0f, 0.0f);
+	static const Vector3 Blue(0.0f, 0.0f, 1.0f);
+	static const Vector3 Yellow(1.0f, 1.0f, 0.0f);
+	static const Vector3 LightYellow(1.0f, 1.0f, 0.88f);
+	static const Vector3 LightBlue(0.68f, 0.85f, 0.9f);
+	static const Vector3 LightPink(1.0f, 0.71f, 0.76f);
+	static const Vector3 LightGreen(0.56f, 0.93f, 0.56f);
+}
diff --git a/Exercises/4.2/MoveComponent.cpp b/Exercises/4.2/MoveComponent.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..cdf1fdf993b8e2df8843af77352a92c4e7b33050
--- /dev/null
+++ b/Exercises/4.2/MoveComponent.cpp
@@ -0,0 +1,35 @@
+// ----------------------------------------------------------------
+// From Game Programming in C++ by Sanjay Madhav
+// Copyright (C) 2017 Sanjay Madhav. All rights reserved.
+// 
+// Released under the BSD License
+// See LICENSE in root directory for full details.
+// ----------------------------------------------------------------
+
+#include "MoveComponent.h"
+#include "Actor.h"
+
+MoveComponent::MoveComponent(class Actor* owner, int updateOrder)
+:Component(owner, updateOrder)
+,mAngularSpeed(0.0f)
+,mForwardSpeed(0.0f)
+{
+	
+}
+
+void MoveComponent::Update(float deltaTime)
+{
+	if (!Math::NearZero(mAngularSpeed))
+	{
+		float rot = mOwner->GetRotation();
+		rot += mAngularSpeed * deltaTime;
+		mOwner->SetRotation(rot);
+	}
+	
+	if (!Math::NearZero(mForwardSpeed))
+	{
+		Vector2 pos = mOwner->GetPosition();
+		pos += mOwner->GetForward() * mForwardSpeed * deltaTime;		
+		mOwner->SetPosition(pos);
+	}
+}
diff --git a/Exercises/4.2/MoveComponent.h b/Exercises/4.2/MoveComponent.h
new file mode 100644
index 0000000000000000000000000000000000000000..def7d3895dbd384ef9e40d0d7a8e9c58d4fc2a8d
--- /dev/null
+++ b/Exercises/4.2/MoveComponent.h
@@ -0,0 +1,26 @@
+// ----------------------------------------------------------------
+// From Game Programming in C++ by Sanjay Madhav
+// Copyright (C) 2017 Sanjay Madhav. All rights reserved.
+// 
+// Released under the BSD License
+// See LICENSE in root directory for full details.
+// ----------------------------------------------------------------
+
+#pragma once
+#include "Component.h"
+
+class MoveComponent : public Component
+{
+public:
+	// Lower update order to update first
+	MoveComponent(class Actor* owner, int updateOrder = 10);
+	void Update(float deltaTime) override;
+	
+	float GetAngularSpeed() const { return mAngularSpeed; }
+	float GetForwardSpeed() const { return mForwardSpeed; }
+	void SetAngularSpeed(float speed) { mAngularSpeed = speed; }
+	void SetForwardSpeed(float speed) { mForwardSpeed = speed; }
+private:
+	float mAngularSpeed;
+	float mForwardSpeed;
+};
diff --git a/Exercises/4.2/Random.cpp b/Exercises/4.2/Random.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..05a3a32a9c78a670518a1106129c43c9b92ce45a
--- /dev/null
+++ b/Exercises/4.2/Random.cpp
@@ -0,0 +1,51 @@
+// ----------------------------------------------------------------
+// From Game Programming in C++ by Sanjay Madhav
+// Copyright (C) 2017 Sanjay Madhav. All rights reserved.
+// 
+// Released under the BSD License
+// See LICENSE in root directory for full details.
+// ----------------------------------------------------------------
+
+#include "Random.h"
+
+void Random::Init()
+{
+	std::random_device rd;
+	Random::Seed(rd());
+}
+
+void Random::Seed(unsigned int seed)
+{
+	sGenerator.seed(seed);
+}
+
+float Random::GetFloat()
+{
+	return GetFloatRange(0.0f, 1.0f);
+}
+
+float Random::GetFloatRange(float min, float max)
+{
+	std::uniform_real_distribution<float> dist(min, max);
+	return dist(sGenerator);
+}
+
+int Random::GetIntRange(int min, int max)
+{
+	std::uniform_int_distribution<int> dist(min, max);
+	return dist(sGenerator);
+}
+
+Vector2 Random::GetVector(const Vector2& min, const Vector2& max)
+{
+	Vector2 r = Vector2(GetFloat(), GetFloat());
+	return min + (max - min) * r;
+}
+
+Vector3 Random::GetVector(const Vector3& min, const Vector3& max)
+{
+	Vector3 r = Vector3(GetFloat(), GetFloat(), GetFloat());
+	return min + (max - min) * r;
+}
+
+std::mt19937 Random::sGenerator;
diff --git a/Exercises/4.2/Random.h b/Exercises/4.2/Random.h
new file mode 100644
index 0000000000000000000000000000000000000000..3ae92fe5bb3b4043c44c66cc30b104a4feee9db4
--- /dev/null
+++ b/Exercises/4.2/Random.h
@@ -0,0 +1,36 @@
+// ----------------------------------------------------------------
+// From Game Programming in C++ by Sanjay Madhav
+// Copyright (C) 2017 Sanjay Madhav. All rights reserved.
+// 
+// Released under the BSD License
+// See LICENSE in root directory for full details.
+// ----------------------------------------------------------------
+
+#pragma  once
+#include <random>
+#include "Math.h"
+
+class Random
+{
+public:
+	static void Init();
+
+	// Seed the generator with the specified int
+	// NOTE: You should generally not need to manually use this
+	static void Seed(unsigned int seed);
+
+	// Get a float between 0.0f and 1.0f
+	static float GetFloat();
+	
+	// Get a float from the specified range
+	static float GetFloatRange(float min, float max);
+
+	// Get an int from the specified range
+	static int GetIntRange(int min, int max);
+
+	// Get a random vector given the min/max bounds
+	static Vector2 GetVector(const Vector2& min, const Vector2& max);
+	static Vector3 GetVector(const Vector3& min, const Vector3& max);
+private:
+	static std::mt19937 sGenerator;
+};
diff --git a/Exercises/4.2/SpriteComponent.cpp b/Exercises/4.2/SpriteComponent.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..56884fbc341dc635e33664e0f4922133ec930f14
--- /dev/null
+++ b/Exercises/4.2/SpriteComponent.cpp
@@ -0,0 +1,56 @@
+// ----------------------------------------------------------------
+// From Game Programming in C++ by Sanjay Madhav
+// Copyright (C) 2017 Sanjay Madhav. All rights reserved.
+// 
+// Released under the BSD License
+// See LICENSE in root directory for full details.
+// ----------------------------------------------------------------
+
+#include "SpriteComponent.h"
+#include "Actor.h"
+#include "Game.h"
+
+SpriteComponent::SpriteComponent(Actor* owner, int drawOrder)
+	:Component(owner)
+	,mTexture(nullptr)
+	,mDrawOrder(drawOrder)
+	,mTexWidth(0)
+	,mTexHeight(0)
+{
+	mOwner->GetGame()->AddSprite(this);
+}
+
+SpriteComponent::~SpriteComponent()
+{
+	mOwner->GetGame()->RemoveSprite(this);
+}
+
+void SpriteComponent::Draw(SDL_Renderer* renderer)
+{
+	if (mTexture)
+	{
+		SDL_Rect r;
+		// Scale the width/height by owner's scale
+		r.w = static_cast<int>(mTexWidth * mOwner->GetScale());
+		r.h = static_cast<int>(mTexHeight * mOwner->GetScale());
+		// Center the rectangle around the position of the owner
+		r.x = static_cast<int>(mOwner->GetPosition().x - r.w / 2);
+		r.y = static_cast<int>(mOwner->GetPosition().y - r.h / 2);
+
+		// Draw (have to convert angle from radians to degrees, and clockwise to counter)
+		SDL_RenderCopyEx(renderer,
+			mTexture,
+			nullptr,
+			&r,
+			-Math::ToDegrees(mOwner->GetRotation()),
+			nullptr,
+			SDL_FLIP_NONE);
+	}
+}
+
+void SpriteComponent::SetTexture(SDL_Texture* texture)
+{
+	mTexture = texture;
+	// Set width/height
+	SDL_QueryTexture(texture, nullptr, nullptr, &mTexWidth, &mTexHeight);
+}
diff --git a/Exercises/4.2/SpriteComponent.h b/Exercises/4.2/SpriteComponent.h
new file mode 100644
index 0000000000000000000000000000000000000000..c430e888f9d9303f7ec0b389dab53932ac6b9d9d
--- /dev/null
+++ b/Exercises/4.2/SpriteComponent.h
@@ -0,0 +1,30 @@
+// ----------------------------------------------------------------
+// From Game Programming in C++ by Sanjay Madhav
+// Copyright (C) 2017 Sanjay Madhav. All rights reserved.
+// 
+// Released under the BSD License
+// See LICENSE in root directory for full details.
+// ----------------------------------------------------------------
+
+#pragma once
+#include "Component.h"
+#include "SDL/SDL.h"
+class SpriteComponent : public Component
+{
+public:
+	// (Lower draw order corresponds with further back)
+	SpriteComponent(class Actor* owner, int drawOrder = 100);
+	~SpriteComponent();
+
+	virtual void Draw(SDL_Renderer* renderer);
+	virtual void SetTexture(SDL_Texture* texture);
+
+	int GetDrawOrder() const { return mDrawOrder; }
+	int GetTexHeight() const { return mTexHeight; }
+	int GetTexWidth() const { return mTexWidth; }
+protected:
+	SDL_Texture* mTexture;
+	int mDrawOrder;
+	int mTexWidth;
+	int mTexHeight;
+};
diff --git a/Exercises/7.2/CameraActor.cpp b/Exercises/7.2/CameraActor.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..6099c612816d6f7e91b4065a1814e19f18b888c3
--- /dev/null
+++ b/Exercises/7.2/CameraActor.cpp
@@ -0,0 +1,84 @@
+// ----------------------------------------------------------------
+// From Game Programming in C++ by Sanjay Madhav
+// Copyright (C) 2017 Sanjay Madhav. All rights reserved.
+// 
+// Released under the BSD License
+// See LICENSE in root directory for full details.
+// ----------------------------------------------------------------
+
+#include "CameraActor.h"
+#include "MoveComponent.h"
+#include "SDL/SDL_scancode.h"
+#include "Renderer.h"
+#include "AudioSystem.h"
+#include "Game.h"
+#include "AudioComponent.h"
+#include "MeshComponent.h"
+
+CameraActor::CameraActor(Game* game)
+	:Actor(game)
+{
+	mMoveComp = new MoveComponent(this);
+	mAudioComp = new AudioComponent(this);
+	MeshComponent* mc = new MeshComponent(this);
+	mc->SetMesh(game->GetRenderer()->GetMesh("Assets/Sphere.gpmesh"));
+	mLastFootstep = 0.0f;
+	mFootstep = mAudioComp->PlayEvent("event:/Footstep");
+	mFootstep.SetPaused(true);
+}
+
+void CameraActor::UpdateActor(float deltaTime)
+{
+	Actor::UpdateActor(deltaTime);
+
+	// Play the footstep if we're moving and haven't recently
+	mLastFootstep -= deltaTime;
+	if (!Math::NearZero(mMoveComp->GetForwardSpeed()) && mLastFootstep <= 0.0f)
+	{
+		mFootstep.SetPaused(false);
+		mFootstep.Restart();
+		mLastFootstep = 0.5f;
+	}
+
+	// Compute new camera from this actor
+	mCameraPos = GetPosition() - GetForward() * 200.0f + Vector3::UnitZ * 100.0f;
+	Vector3 target = GetPosition() + GetForward() * 100.0f;
+	Vector3 up = Vector3::UnitZ;
+	Matrix4 view = Matrix4::CreateLookAt(mCameraPos, target, up);
+	GetGame()->GetRenderer()->SetViewMatrix(view);
+	GetGame()->GetAudioSystem()->SetListener(view);
+}
+
+void CameraActor::ActorInput(const uint8_t* keys)
+{
+	float forwardSpeed = 0.0f;
+	float angularSpeed = 0.0f;
+	// wasd movement
+	if (keys[SDL_SCANCODE_W])
+	{
+		forwardSpeed += 300.0f;
+	}
+	if (keys[SDL_SCANCODE_S])
+	{
+		forwardSpeed -= 300.0f;
+	}
+	if (keys[SDL_SCANCODE_A])
+	{
+		angularSpeed -= Math::TwoPi;
+	}
+	if (keys[SDL_SCANCODE_D])
+	{
+		angularSpeed += Math::TwoPi;
+	}
+
+	mMoveComp->SetForwardSpeed(forwardSpeed);
+	mMoveComp->SetAngularSpeed(angularSpeed);
+}
+
+void CameraActor::SetFootstepSurface(float value)
+{
+	// Pause here because the way I setup the parameter in FMOD
+	// changing it will play a footstep
+	mFootstep.SetPaused(true);
+	mFootstep.SetParameter("Surface", value);
+}
diff --git a/Exercises/7.2/CameraActor.h b/Exercises/7.2/CameraActor.h
new file mode 100644
index 0000000000000000000000000000000000000000..9768de42040ff29f066e4b0d62e5da2a73c51044
--- /dev/null
+++ b/Exercises/7.2/CameraActor.h
@@ -0,0 +1,29 @@
+// ----------------------------------------------------------------
+// From Game Programming in C++ by Sanjay Madhav
+// Copyright (C) 2017 Sanjay Madhav. All rights reserved.
+// 
+// Released under the BSD License
+// See LICENSE in root directory for full details.
+// ----------------------------------------------------------------
+
+#pragma once
+#include "Actor.h"
+#include "SoundEvent.h"
+
+class CameraActor : public Actor
+{
+public:
+	CameraActor(class Game* game);
+
+	void UpdateActor(float deltaTime) override;
+	void ActorInput(const uint8_t* keys) override;
+
+	void SetFootstepSurface(float value);
+	const Vector3& GetCameraPosition() const { return mCameraPos; }
+private:
+	class MoveComponent* mMoveComp;
+	class AudioComponent* mAudioComp;
+	Vector3 mCameraPos;
+	SoundEvent mFootstep;
+	float mLastFootstep;
+};
\ No newline at end of file
diff --git a/FMODStudio/Chapter07/Assets/396012__morganpurkis__rustling-grass-3.wav b/FMODStudio/Chapter07/Assets/396012__morganpurkis__rustling-grass-3.wav
new file mode 100644
index 0000000000000000000000000000000000000000..4989147a35824f3afd30c0e147937587a038777e
Binary files /dev/null and b/FMODStudio/Chapter07/Assets/396012__morganpurkis__rustling-grass-3.wav differ
diff --git a/FMODStudio/Chapter07/Assets/396013__morganpurkis__rustling-grass-2.wav b/FMODStudio/Chapter07/Assets/396013__morganpurkis__rustling-grass-2.wav
new file mode 100644
index 0000000000000000000000000000000000000000..6f14a56aff63491cdcd4ef993c73dc1e25b9f71b
Binary files /dev/null and b/FMODStudio/Chapter07/Assets/396013__morganpurkis__rustling-grass-2.wav differ
diff --git a/FMODStudio/Chapter07/Assets/396014__morganpurkis__rustling-grass-1.wav b/FMODStudio/Chapter07/Assets/396014__morganpurkis__rustling-grass-1.wav
new file mode 100644
index 0000000000000000000000000000000000000000..61eca2cfb6b746a71008d09f0c82836c6359d41f
Binary files /dev/null and b/FMODStudio/Chapter07/Assets/396014__morganpurkis__rustling-grass-1.wav differ
diff --git a/FMODStudio/Chapter07/Assets/396016__morganpurkis__rustling-grass-4.wav b/FMODStudio/Chapter07/Assets/396016__morganpurkis__rustling-grass-4.wav
new file mode 100644
index 0000000000000000000000000000000000000000..2464184bd6e0ead796eddc550b3279b3b14f316b
Binary files /dev/null and b/FMODStudio/Chapter07/Assets/396016__morganpurkis__rustling-grass-4.wav differ
diff --git a/FMODStudio/Chapter07/Assets/47835__tc630__fire2.wav b/FMODStudio/Chapter07/Assets/47835__tc630__fire2.wav
new file mode 100644
index 0000000000000000000000000000000000000000..7c92ce79f9adaedeb59affed95527e1709e3fe2a
Binary files /dev/null and b/FMODStudio/Chapter07/Assets/47835__tc630__fire2.wav differ
diff --git a/FMODStudio/Chapter07/Assets/OutThere.ogg b/FMODStudio/Chapter07/Assets/OutThere.ogg
new file mode 100644
index 0000000000000000000000000000000000000000..975ecb12fd620d986ddadec91e5e326799899146
Binary files /dev/null and b/FMODStudio/Chapter07/Assets/OutThere.ogg differ
diff --git a/FMODStudio/Chapter07/Assets/explosion-1.ogg b/FMODStudio/Chapter07/Assets/explosion-1.ogg
new file mode 100644
index 0000000000000000000000000000000000000000..ad8a1ba5ce14af778b17b12109824a58178a778f
Binary files /dev/null and b/FMODStudio/Chapter07/Assets/explosion-1.ogg differ
diff --git a/FMODStudio/Chapter07/Assets/footstep00.ogg b/FMODStudio/Chapter07/Assets/footstep00.ogg
new file mode 100644
index 0000000000000000000000000000000000000000..ca5dd2b6aa45f73f53685988aacec0a88f31887b
Binary files /dev/null and b/FMODStudio/Chapter07/Assets/footstep00.ogg differ
diff --git a/FMODStudio/Chapter07/Assets/footstep01.ogg b/FMODStudio/Chapter07/Assets/footstep01.ogg
new file mode 100644
index 0000000000000000000000000000000000000000..e784dbff4808267daebd9297674f6532b1a826f3
Binary files /dev/null and b/FMODStudio/Chapter07/Assets/footstep01.ogg differ
diff --git a/FMODStudio/Chapter07/Assets/footstep02.ogg b/FMODStudio/Chapter07/Assets/footstep02.ogg
new file mode 100644
index 0000000000000000000000000000000000000000..fffa607622ef1f834244636ceaebfbb60c20fed1
Binary files /dev/null and b/FMODStudio/Chapter07/Assets/footstep02.ogg differ
diff --git a/FMODStudio/Chapter07/Assets/footstep03.ogg b/FMODStudio/Chapter07/Assets/footstep03.ogg
new file mode 100644
index 0000000000000000000000000000000000000000..32ec6265fc61f1aa323ae94c4b6c5b77f39f46f2
Binary files /dev/null and b/FMODStudio/Chapter07/Assets/footstep03.ogg differ
diff --git a/FMODStudio/Chapter07/Assets/footstep04.ogg b/FMODStudio/Chapter07/Assets/footstep04.ogg
new file mode 100644
index 0000000000000000000000000000000000000000..da3d8ea6250081ca302af44eb496d3758137dd1b
Binary files /dev/null and b/FMODStudio/Chapter07/Assets/footstep04.ogg differ
diff --git a/FMODStudio/Chapter07/Assets/footstep05.ogg b/FMODStudio/Chapter07/Assets/footstep05.ogg
new file mode 100644
index 0000000000000000000000000000000000000000..ddf5ac6a2d5e0bd76b0c5931e35e78ead9df7c87
Binary files /dev/null and b/FMODStudio/Chapter07/Assets/footstep05.ogg differ
diff --git a/FMODStudio/Chapter07/Assets/footstep06.ogg b/FMODStudio/Chapter07/Assets/footstep06.ogg
new file mode 100644
index 0000000000000000000000000000000000000000..d4419f4e7e0691efaad6506751f04b7202b4f71d
Binary files /dev/null and b/FMODStudio/Chapter07/Assets/footstep06.ogg differ
diff --git a/FMODStudio/Chapter07/Assets/footstep07.ogg b/FMODStudio/Chapter07/Assets/footstep07.ogg
new file mode 100644
index 0000000000000000000000000000000000000000..2b2175ec4d57f93a8d673e9ff9a6febdd7bd266b
Binary files /dev/null and b/FMODStudio/Chapter07/Assets/footstep07.ogg differ
diff --git a/FMODStudio/Chapter07/Assets/footstep08.ogg b/FMODStudio/Chapter07/Assets/footstep08.ogg
new file mode 100644
index 0000000000000000000000000000000000000000..2b71f97adb59dbe6834a8ab8cde38ff6046ad152
Binary files /dev/null and b/FMODStudio/Chapter07/Assets/footstep08.ogg differ
diff --git a/FMODStudio/Chapter07/Assets/footstep09.ogg b/FMODStudio/Chapter07/Assets/footstep09.ogg
new file mode 100644
index 0000000000000000000000000000000000000000..52c39f52c84a4e5b92c0555b05e1c703bad6d93a
Binary files /dev/null and b/FMODStudio/Chapter07/Assets/footstep09.ogg differ
diff --git a/FMODStudio/Chapter07/Chapter07.fspro b/FMODStudio/Chapter07/Chapter07.fspro
new file mode 100644
index 0000000000000000000000000000000000000000..e41455e9db8dcfd44b0fe6c3d7f92cfaa15feeca
--- /dev/null
+++ b/FMODStudio/Chapter07/Chapter07.fspro
@@ -0,0 +1,2 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<objects serializationModel="Studio.01.09.00"/>
diff --git a/FMODStudio/Chapter07/Metadata/Asset/{ab2d50f9-072f-433d-950e-e62e89beb8cb}.xml b/FMODStudio/Chapter07/Metadata/Asset/{ab2d50f9-072f-433d-950e-e62e89beb8cb}.xml
new file mode 100644
index 0000000000000000000000000000000000000000..41ae102c0380bfa05f05401c8971a89747605439
--- /dev/null
+++ b/FMODStudio/Chapter07/Metadata/Asset/{ab2d50f9-072f-433d-950e-e62e89beb8cb}.xml
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<objects serializationModel="Studio.01.09.00">
+    <object class="MasterAssetFolder" id="{ab2d50f9-072f-433d-950e-e62e89beb8cb}"/>
+</objects>
diff --git a/FMODStudio/Chapter07/Metadata/AudioFile/{29f71484-f9b1-46e9-8a57-36225ff5b91e}.xml b/FMODStudio/Chapter07/Metadata/AudioFile/{29f71484-f9b1-46e9-8a57-36225ff5b91e}.xml
new file mode 100644
index 0000000000000000000000000000000000000000..61410eae17889ea253c0752f5a1969873bd2fe24
--- /dev/null
+++ b/FMODStudio/Chapter07/Metadata/AudioFile/{29f71484-f9b1-46e9-8a57-36225ff5b91e}.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<objects serializationModel="Studio.01.09.00">
+    <object class="AudioFile" id="{29f71484-f9b1-46e9-8a57-36225ff5b91e}">
+        <property name="assetPath">
+            <value>396013__morganpurkis__rustling-grass-2.wav</value>
+        </property>
+        <property name="frequencyInKHz">
+            <value>48</value>
+        </property>
+        <property name="channelCount">
+            <value>1</value>
+        </property>
+        <property name="length">
+            <value>0.35222916666666665</value>
+        </property>
+        <relationship name="masterAssetFolder">
+            <destination>{ab2d50f9-072f-433d-950e-e62e89beb8cb}</destination>
+        </relationship>
+    </object>
+</objects>
diff --git a/FMODStudio/Chapter07/Metadata/AudioFile/{30490f9e-6bbf-4f91-9413-3bbbaffdfbc6}.xml b/FMODStudio/Chapter07/Metadata/AudioFile/{30490f9e-6bbf-4f91-9413-3bbbaffdfbc6}.xml
new file mode 100644
index 0000000000000000000000000000000000000000..2541ae89b0052afb182821897332b325444c1641
--- /dev/null
+++ b/FMODStudio/Chapter07/Metadata/AudioFile/{30490f9e-6bbf-4f91-9413-3bbbaffdfbc6}.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<objects serializationModel="Studio.01.09.00">
+    <object class="AudioFile" id="{30490f9e-6bbf-4f91-9413-3bbbaffdfbc6}">
+        <property name="assetPath">
+            <value>396014__morganpurkis__rustling-grass-1.wav</value>
+        </property>
+        <property name="frequencyInKHz">
+            <value>48</value>
+        </property>
+        <property name="channelCount">
+            <value>1</value>
+        </property>
+        <property name="length">
+            <value>0.29720833333333335</value>
+        </property>
+        <relationship name="masterAssetFolder">
+            <destination>{ab2d50f9-072f-433d-950e-e62e89beb8cb}</destination>
+        </relationship>
+    </object>
+</objects>
diff --git a/FMODStudio/Chapter07/Metadata/AudioFile/{3af94ac0-fc0d-4d4d-b78f-e0a8a5c6fdc5}.xml b/FMODStudio/Chapter07/Metadata/AudioFile/{3af94ac0-fc0d-4d4d-b78f-e0a8a5c6fdc5}.xml
new file mode 100644
index 0000000000000000000000000000000000000000..c5cf4d46185b6605fb69f1b8c9a0596a5ab887f2
--- /dev/null
+++ b/FMODStudio/Chapter07/Metadata/AudioFile/{3af94ac0-fc0d-4d4d-b78f-e0a8a5c6fdc5}.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<objects serializationModel="Studio.01.09.00">
+    <object class="AudioFile" id="{3af94ac0-fc0d-4d4d-b78f-e0a8a5c6fdc5}">
+        <property name="assetPath">
+            <value>footstep02.ogg</value>
+        </property>
+        <property name="frequencyInKHz">
+            <value>48</value>
+        </property>
+        <property name="channelCount">
+            <value>2</value>
+        </property>
+        <property name="length">
+            <value>0.24214583333333334</value>
+        </property>
+        <relationship name="masterAssetFolder">
+            <destination>{ab2d50f9-072f-433d-950e-e62e89beb8cb}</destination>
+        </relationship>
+    </object>
+</objects>
diff --git a/FMODStudio/Chapter07/Metadata/AudioFile/{4621b1dc-a4bc-4ca2-8e1c-a37b94ac3ddc}.xml b/FMODStudio/Chapter07/Metadata/AudioFile/{4621b1dc-a4bc-4ca2-8e1c-a37b94ac3ddc}.xml
new file mode 100644
index 0000000000000000000000000000000000000000..7f7b1ee92add3b94d3f8a918f882091d80a320e1
--- /dev/null
+++ b/FMODStudio/Chapter07/Metadata/AudioFile/{4621b1dc-a4bc-4ca2-8e1c-a37b94ac3ddc}.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<objects serializationModel="Studio.01.09.00">
+    <object class="AudioFile" id="{4621b1dc-a4bc-4ca2-8e1c-a37b94ac3ddc}">
+        <property name="assetPath">
+            <value>footstep03.ogg</value>
+        </property>
+        <property name="frequencyInKHz">
+            <value>48</value>
+        </property>
+        <property name="channelCount">
+            <value>2</value>
+        </property>
+        <property name="length">
+            <value>0.26902083333333332</value>
+        </property>
+        <relationship name="masterAssetFolder">
+            <destination>{ab2d50f9-072f-433d-950e-e62e89beb8cb}</destination>
+        </relationship>
+    </object>
+</objects>
diff --git a/FMODStudio/Chapter07/Metadata/AudioFile/{4d461ddc-3906-4ed0-b3dd-c179f0724fa3}.xml b/FMODStudio/Chapter07/Metadata/AudioFile/{4d461ddc-3906-4ed0-b3dd-c179f0724fa3}.xml
new file mode 100644
index 0000000000000000000000000000000000000000..d1df0627c5c1f492d8b83a588a52a73d09fba394
--- /dev/null
+++ b/FMODStudio/Chapter07/Metadata/AudioFile/{4d461ddc-3906-4ed0-b3dd-c179f0724fa3}.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<objects serializationModel="Studio.01.09.00">
+    <object class="AudioFile" id="{4d461ddc-3906-4ed0-b3dd-c179f0724fa3}">
+        <property name="assetPath">
+            <value>396016__morganpurkis__rustling-grass-4.wav</value>
+        </property>
+        <property name="frequencyInKHz">
+            <value>48</value>
+        </property>
+        <property name="channelCount">
+            <value>1</value>
+        </property>
+        <property name="length">
+            <value>0.38</value>
+        </property>
+        <relationship name="masterAssetFolder">
+            <destination>{ab2d50f9-072f-433d-950e-e62e89beb8cb}</destination>
+        </relationship>
+    </object>
+</objects>
diff --git a/FMODStudio/Chapter07/Metadata/AudioFile/{781cd1cd-8da7-44db-995d-f67b0ab3eac4}.xml b/FMODStudio/Chapter07/Metadata/AudioFile/{781cd1cd-8da7-44db-995d-f67b0ab3eac4}.xml
new file mode 100644
index 0000000000000000000000000000000000000000..068b10071be67def95e0b96e3723b06afa822d6c
--- /dev/null
+++ b/FMODStudio/Chapter07/Metadata/AudioFile/{781cd1cd-8da7-44db-995d-f67b0ab3eac4}.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<objects serializationModel="Studio.01.09.00">
+    <object class="AudioFile" id="{781cd1cd-8da7-44db-995d-f67b0ab3eac4}">
+        <property name="assetPath">
+            <value>footstep00.ogg</value>
+        </property>
+        <property name="frequencyInKHz">
+            <value>48</value>
+        </property>
+        <property name="channelCount">
+            <value>2</value>
+        </property>
+        <property name="length">
+            <value>0.24885416666666665</value>
+        </property>
+        <relationship name="masterAssetFolder">
+            <destination>{ab2d50f9-072f-433d-950e-e62e89beb8cb}</destination>
+        </relationship>
+    </object>
+</objects>
diff --git a/FMODStudio/Chapter07/Metadata/AudioFile/{9b9edf48-2e21-4cbc-a4e0-d6d3410e0765}.xml b/FMODStudio/Chapter07/Metadata/AudioFile/{9b9edf48-2e21-4cbc-a4e0-d6d3410e0765}.xml
new file mode 100644
index 0000000000000000000000000000000000000000..d9d06e8ad3ba94ad908e33e817978121e83fcafb
--- /dev/null
+++ b/FMODStudio/Chapter07/Metadata/AudioFile/{9b9edf48-2e21-4cbc-a4e0-d6d3410e0765}.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<objects serializationModel="Studio.01.09.00">
+    <object class="AudioFile" id="{9b9edf48-2e21-4cbc-a4e0-d6d3410e0765}">
+        <property name="assetPath">
+            <value>explosion-1.ogg</value>
+        </property>
+        <property name="frequencyInKHz">
+            <value>96</value>
+        </property>
+        <property name="channelCount">
+            <value>1</value>
+        </property>
+        <property name="length">
+            <value>1.3077812499999999</value>
+        </property>
+        <relationship name="masterAssetFolder">
+            <destination>{ab2d50f9-072f-433d-950e-e62e89beb8cb}</destination>
+        </relationship>
+    </object>
+</objects>
diff --git a/FMODStudio/Chapter07/Metadata/AudioFile/{ae46332e-e218-48f0-a1d3-581dbfec953e}.xml b/FMODStudio/Chapter07/Metadata/AudioFile/{ae46332e-e218-48f0-a1d3-581dbfec953e}.xml
new file mode 100644
index 0000000000000000000000000000000000000000..121862b7427c090719fdb375232576b8d6c79c6d
--- /dev/null
+++ b/FMODStudio/Chapter07/Metadata/AudioFile/{ae46332e-e218-48f0-a1d3-581dbfec953e}.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<objects serializationModel="Studio.01.09.00">
+    <object class="AudioFile" id="{ae46332e-e218-48f0-a1d3-581dbfec953e}">
+        <property name="assetPath">
+            <value>footstep05.ogg</value>
+        </property>
+        <property name="frequencyInKHz">
+            <value>48</value>
+        </property>
+        <property name="channelCount">
+            <value>2</value>
+        </property>
+        <property name="length">
+            <value>0.27577083333333335</value>
+        </property>
+        <relationship name="masterAssetFolder">
+            <destination>{ab2d50f9-072f-433d-950e-e62e89beb8cb}</destination>
+        </relationship>
+    </object>
+</objects>
diff --git a/FMODStudio/Chapter07/Metadata/AudioFile/{afd51056-781b-47df-9c3a-254fcb7f8ae6}.xml b/FMODStudio/Chapter07/Metadata/AudioFile/{afd51056-781b-47df-9c3a-254fcb7f8ae6}.xml
new file mode 100644
index 0000000000000000000000000000000000000000..9debcfb3cfdf23bc13df3789439ff59dd6e62525
--- /dev/null
+++ b/FMODStudio/Chapter07/Metadata/AudioFile/{afd51056-781b-47df-9c3a-254fcb7f8ae6}.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<objects serializationModel="Studio.01.09.00">
+    <object class="AudioFile" id="{afd51056-781b-47df-9c3a-254fcb7f8ae6}">
+        <property name="assetPath">
+            <value>footstep01.ogg</value>
+        </property>
+        <property name="frequencyInKHz">
+            <value>48</value>
+        </property>
+        <property name="channelCount">
+            <value>2</value>
+        </property>
+        <property name="length">
+            <value>0.28247916666666667</value>
+        </property>
+        <relationship name="masterAssetFolder">
+            <destination>{ab2d50f9-072f-433d-950e-e62e89beb8cb}</destination>
+        </relationship>
+    </object>
+</objects>
diff --git a/FMODStudio/Chapter07/Metadata/AudioFile/{b7cf3153-7d60-4a0a-bdd4-a354ec6c8993}.xml b/FMODStudio/Chapter07/Metadata/AudioFile/{b7cf3153-7d60-4a0a-bdd4-a354ec6c8993}.xml
new file mode 100644
index 0000000000000000000000000000000000000000..37a82b98381196658bfc911e241676c94e101ae9
--- /dev/null
+++ b/FMODStudio/Chapter07/Metadata/AudioFile/{b7cf3153-7d60-4a0a-bdd4-a354ec6c8993}.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<objects serializationModel="Studio.01.09.00">
+    <object class="AudioFile" id="{b7cf3153-7d60-4a0a-bdd4-a354ec6c8993}">
+        <property name="assetPath">
+            <value>footstep09.ogg</value>
+        </property>
+        <property name="frequencyInKHz">
+            <value>48</value>
+        </property>
+        <property name="channelCount">
+            <value>2</value>
+        </property>
+        <property name="length">
+            <value>0.21522916666666667</value>
+        </property>
+        <relationship name="masterAssetFolder">
+            <destination>{ab2d50f9-072f-433d-950e-e62e89beb8cb}</destination>
+        </relationship>
+    </object>
+</objects>
diff --git a/FMODStudio/Chapter07/Metadata/AudioFile/{b90736d7-6748-46a4-8132-d9e364599d4d}.xml b/FMODStudio/Chapter07/Metadata/AudioFile/{b90736d7-6748-46a4-8132-d9e364599d4d}.xml
new file mode 100644
index 0000000000000000000000000000000000000000..0405a81760d3d44991016d482bba827e92f2dace
--- /dev/null
+++ b/FMODStudio/Chapter07/Metadata/AudioFile/{b90736d7-6748-46a4-8132-d9e364599d4d}.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<objects serializationModel="Studio.01.09.00">
+    <object class="AudioFile" id="{b90736d7-6748-46a4-8132-d9e364599d4d}">
+        <property name="assetPath">
+            <value>footstep08.ogg</value>
+        </property>
+        <property name="frequencyInKHz">
+            <value>48</value>
+        </property>
+        <property name="channelCount">
+            <value>2</value>
+        </property>
+        <property name="length">
+            <value>0.25558333333333333</value>
+        </property>
+        <relationship name="masterAssetFolder">
+            <destination>{ab2d50f9-072f-433d-950e-e62e89beb8cb}</destination>
+        </relationship>
+    </object>
+</objects>
diff --git a/FMODStudio/Chapter07/Metadata/AudioFile/{cb9d108d-5891-42f0-aa51-85c5d30a06d8}.xml b/FMODStudio/Chapter07/Metadata/AudioFile/{cb9d108d-5891-42f0-aa51-85c5d30a06d8}.xml
new file mode 100644
index 0000000000000000000000000000000000000000..69ad9c92d0d8d2fe467e8efc469f9664a88d9272
--- /dev/null
+++ b/FMODStudio/Chapter07/Metadata/AudioFile/{cb9d108d-5891-42f0-aa51-85c5d30a06d8}.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<objects serializationModel="Studio.01.09.00">
+    <object class="AudioFile" id="{cb9d108d-5891-42f0-aa51-85c5d30a06d8}">
+        <property name="assetPath">
+            <value>footstep04.ogg</value>
+        </property>
+        <property name="frequencyInKHz">
+            <value>48</value>
+        </property>
+        <property name="channelCount">
+            <value>2</value>
+        </property>
+        <property name="length">
+            <value>0.32283333333333336</value>
+        </property>
+        <relationship name="masterAssetFolder">
+            <destination>{ab2d50f9-072f-433d-950e-e62e89beb8cb}</destination>
+        </relationship>
+    </object>
+</objects>
diff --git a/FMODStudio/Chapter07/Metadata/AudioFile/{cd92a3be-e8c1-4aef-870a-53de1e4a2620}.xml b/FMODStudio/Chapter07/Metadata/AudioFile/{cd92a3be-e8c1-4aef-870a-53de1e4a2620}.xml
new file mode 100644
index 0000000000000000000000000000000000000000..68b46dbf7fd8ae79140315da9801c3c5c1ddfbdf
--- /dev/null
+++ b/FMODStudio/Chapter07/Metadata/AudioFile/{cd92a3be-e8c1-4aef-870a-53de1e4a2620}.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<objects serializationModel="Studio.01.09.00">
+    <object class="AudioFile" id="{cd92a3be-e8c1-4aef-870a-53de1e4a2620}">
+        <property name="assetPath">
+            <value>footstep06.ogg</value>
+        </property>
+        <property name="frequencyInKHz">
+            <value>48</value>
+        </property>
+        <property name="channelCount">
+            <value>2</value>
+        </property>
+        <property name="length">
+            <value>0.24212500000000001</value>
+        </property>
+        <relationship name="masterAssetFolder">
+            <destination>{ab2d50f9-072f-433d-950e-e62e89beb8cb}</destination>
+        </relationship>
+    </object>
+</objects>
diff --git a/FMODStudio/Chapter07/Metadata/AudioFile/{d0d48d00-9bc7-4dc5-96cf-5a0ce45ac0de}.xml b/FMODStudio/Chapter07/Metadata/AudioFile/{d0d48d00-9bc7-4dc5-96cf-5a0ce45ac0de}.xml
new file mode 100644
index 0000000000000000000000000000000000000000..fa3534eafc68216fcc29adad994541bf8d749dc1
--- /dev/null
+++ b/FMODStudio/Chapter07/Metadata/AudioFile/{d0d48d00-9bc7-4dc5-96cf-5a0ce45ac0de}.xml
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<objects serializationModel="Studio.01.09.00">
+    <object class="AudioFile" id="{d0d48d00-9bc7-4dc5-96cf-5a0ce45ac0de}">
+        <property name="assetPath">
+            <value>47835__tc630__fire2.wav</value>
+        </property>
+        <property name="isStreaming">
+            <value>true</value>
+        </property>
+        <property name="frequencyInKHz">
+            <value>48</value>
+        </property>
+        <property name="channelCount">
+            <value>2</value>
+        </property>
+        <property name="length">
+            <value>12</value>
+        </property>
+        <relationship name="masterAssetFolder">
+            <destination>{ab2d50f9-072f-433d-950e-e62e89beb8cb}</destination>
+        </relationship>
+    </object>
+</objects>
diff --git a/FMODStudio/Chapter07/Metadata/AudioFile/{d36fc405-0bac-458f-b9c1-1bdb47d98177}.xml b/FMODStudio/Chapter07/Metadata/AudioFile/{d36fc405-0bac-458f-b9c1-1bdb47d98177}.xml
new file mode 100644
index 0000000000000000000000000000000000000000..e944b93c0666a149850e81483854c9f895823bd1
--- /dev/null
+++ b/FMODStudio/Chapter07/Metadata/AudioFile/{d36fc405-0bac-458f-b9c1-1bdb47d98177}.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<objects serializationModel="Studio.01.09.00">
+    <object class="AudioFile" id="{d36fc405-0bac-458f-b9c1-1bdb47d98177}">
+        <property name="assetPath">
+            <value>396012__morganpurkis__rustling-grass-3.wav</value>
+        </property>
+        <property name="frequencyInKHz">
+            <value>48</value>
+        </property>
+        <property name="channelCount">
+            <value>1</value>
+        </property>
+        <property name="length">
+            <value>0.30106250000000001</value>
+        </property>
+        <relationship name="masterAssetFolder">
+            <destination>{ab2d50f9-072f-433d-950e-e62e89beb8cb}</destination>
+        </relationship>
+    </object>
+</objects>
diff --git a/FMODStudio/Chapter07/Metadata/AudioFile/{dce2073c-8d73-442b-a9ae-1ed541ed7de1}.xml b/FMODStudio/Chapter07/Metadata/AudioFile/{dce2073c-8d73-442b-a9ae-1ed541ed7de1}.xml
new file mode 100644
index 0000000000000000000000000000000000000000..3795fdb6584d4fc26c3590d1bb229582ad8fab14
--- /dev/null
+++ b/FMODStudio/Chapter07/Metadata/AudioFile/{dce2073c-8d73-442b-a9ae-1ed541ed7de1}.xml
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<objects serializationModel="Studio.01.09.00">
+    <object class="AudioFile" id="{dce2073c-8d73-442b-a9ae-1ed541ed7de1}">
+        <property name="assetPath">
+            <value>OutThere.ogg</value>
+        </property>
+        <property name="isStreaming">
+            <value>true</value>
+        </property>
+        <property name="frequencyInKHz">
+            <value>44.0999985</value>
+        </property>
+        <property name="channelCount">
+            <value>2</value>
+        </property>
+        <property name="length">
+            <value>242.00417233560091</value>
+        </property>
+        <relationship name="masterAssetFolder">
+            <destination>{ab2d50f9-072f-433d-950e-e62e89beb8cb}</destination>
+        </relationship>
+    </object>
+</objects>
diff --git a/FMODStudio/Chapter07/Metadata/AudioFile/{e8c8d3a3-c53a-49b8-85a0-6c46a7e81d03}.xml b/FMODStudio/Chapter07/Metadata/AudioFile/{e8c8d3a3-c53a-49b8-85a0-6c46a7e81d03}.xml
new file mode 100644
index 0000000000000000000000000000000000000000..de4cf7335e926689bedd432d98d35bed71e47bfb
--- /dev/null
+++ b/FMODStudio/Chapter07/Metadata/AudioFile/{e8c8d3a3-c53a-49b8-85a0-6c46a7e81d03}.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<objects serializationModel="Studio.01.09.00">
+    <object class="AudioFile" id="{e8c8d3a3-c53a-49b8-85a0-6c46a7e81d03}">
+        <property name="assetPath">
+            <value>footstep07.ogg</value>
+        </property>
+        <property name="frequencyInKHz">
+            <value>48</value>
+        </property>
+        <property name="channelCount">
+            <value>2</value>
+        </property>
+        <property name="length">
+            <value>0.25558333333333333</value>
+        </property>
+        <relationship name="masterAssetFolder">
+            <destination>{ab2d50f9-072f-433d-950e-e62e89beb8cb}</destination>
+        </relationship>
+    </object>
+</objects>
diff --git a/FMODStudio/Chapter07/Metadata/Bank/{1de7b457-2173-4205-b8b6-7583e593ccd6}.xml b/FMODStudio/Chapter07/Metadata/Bank/{1de7b457-2173-4205-b8b6-7583e593ccd6}.xml
new file mode 100644
index 0000000000000000000000000000000000000000..2360a63faa98802fd5019e8716f63036d98f3a77
--- /dev/null
+++ b/FMODStudio/Chapter07/Metadata/Bank/{1de7b457-2173-4205-b8b6-7583e593ccd6}.xml
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<objects serializationModel="Studio.01.09.00">
+    <object class="MasterBank" id="{1de7b457-2173-4205-b8b6-7583e593ccd6}">
+        <relationship name="folder">
+            <destination>{24acc9ed-98e6-4f97-b384-7cedad0817ab}</destination>
+        </relationship>
+    </object>
+</objects>
diff --git a/FMODStudio/Chapter07/Metadata/BankFolder/{24acc9ed-98e6-4f97-b384-7cedad0817ab}.xml b/FMODStudio/Chapter07/Metadata/BankFolder/{24acc9ed-98e6-4f97-b384-7cedad0817ab}.xml
new file mode 100644
index 0000000000000000000000000000000000000000..2f98f86eaadb4d478c0a3e298e70b229f0241b33
--- /dev/null
+++ b/FMODStudio/Chapter07/Metadata/BankFolder/{24acc9ed-98e6-4f97-b384-7cedad0817ab}.xml
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<objects serializationModel="Studio.01.09.00">
+    <object class="MasterBankFolder" id="{24acc9ed-98e6-4f97-b384-7cedad0817ab}"/>
+</objects>
diff --git a/FMODStudio/Chapter07/Metadata/EncodingSetting/{36713264-83a3-4399-9bbf-fc81c28a0bd4}.xml b/FMODStudio/Chapter07/Metadata/EncodingSetting/{36713264-83a3-4399-9bbf-fc81c28a0bd4}.xml
new file mode 100644
index 0000000000000000000000000000000000000000..20b5cf1e72ccc8d694eea3f123d10f2f18d4a61e
--- /dev/null
+++ b/FMODStudio/Chapter07/Metadata/EncodingSetting/{36713264-83a3-4399-9bbf-fc81c28a0bd4}.xml
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<objects serializationModel="Studio.01.09.00">
+    <object class="EncodingSetting" id="{36713264-83a3-4399-9bbf-fc81c28a0bd4}">
+        <property name="encodingFormat">
+            <value>3</value>
+        </property>
+        <property name="quality">
+            <value>37</value>
+        </property>
+        <relationship name="platform">
+            <destination>{3ceb98b4-072c-41c2-a593-48d343172e25}</destination>
+        </relationship>
+        <relationship name="encodable">
+            <destination>{3ceb98b4-072c-41c2-a593-48d343172e25}</destination>
+        </relationship>
+    </object>
+</objects>
diff --git a/FMODStudio/Chapter07/Metadata/Event/{24b533f4-bf66-45ae-b191-6b149b3af663}.xml b/FMODStudio/Chapter07/Metadata/Event/{24b533f4-bf66-45ae-b191-6b149b3af663}.xml
new file mode 100644
index 0000000000000000000000000000000000000000..b6af61519e734218e8a0b4803ac73adc8b8e8a59
--- /dev/null
+++ b/FMODStudio/Chapter07/Metadata/Event/{24b533f4-bf66-45ae-b191-6b149b3af663}.xml
@@ -0,0 +1,223 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<objects serializationModel="Studio.01.09.00">
+    <object class="Event" id="{24b533f4-bf66-45ae-b191-6b149b3af663}">
+        <property name="name">
+            <value>Footstep</value>
+        </property>
+        <property name="outputFormat">
+            <value>2</value>
+        </property>
+        <relationship name="folder">
+            <destination>{94ff31b1-83b7-438f-a0c7-6a5fdd8ccbe5}</destination>
+        </relationship>
+        <relationship name="mixer">
+            <destination>{a11de45e-e641-4cb8-abb5-86d699dd2612}</destination>
+        </relationship>
+        <relationship name="masterTrack">
+            <destination>{1ce222ba-e0b7-40dd-927a-1c45d2626972}</destination>
+        </relationship>
+        <relationship name="mixerInput">
+            <destination>{dbde1fad-5f73-49db-85b3-0d9fd720a94a}</destination>
+        </relationship>
+        <relationship name="automatableProperties">
+            <destination>{89e81650-d1a4-42b1-96b4-20995d141847}</destination>
+        </relationship>
+        <relationship name="markerTracks">
+            <destination>{b9305bb7-5c47-4c47-a83e-d21acd8ea659}</destination>
+        </relationship>
+        <relationship name="groupTracks">
+            <destination>{b177c451-f4e8-4c2b-8ce8-820f7f8e4a01}</destination>
+        </relationship>
+        <relationship name="timeline">
+            <destination>{92e5a1c5-6d35-4feb-8785-72dd1d39f9e4}</destination>
+        </relationship>
+        <relationship name="parameters">
+            <destination>{0f01a5ab-4580-4032-a1d5-62a9d0a407e3}</destination>
+        </relationship>
+        <relationship name="banks">
+            <destination>{1de7b457-2173-4205-b8b6-7583e593ccd6}</destination>
+        </relationship>
+    </object>
+    <object class="EventMixer" id="{a11de45e-e641-4cb8-abb5-86d699dd2612}">
+        <relationship name="masterBus">
+            <destination>{ba176c91-524d-4fc5-aae3-6255261929fe}</destination>
+        </relationship>
+    </object>
+    <object class="MasterTrack" id="{1ce222ba-e0b7-40dd-927a-1c45d2626972}">
+        <relationship name="mixerGroup">
+            <destination>{ba176c91-524d-4fc5-aae3-6255261929fe}</destination>
+        </relationship>
+    </object>
+    <object class="MixerInput" id="{dbde1fad-5f73-49db-85b3-0d9fd720a94a}">
+        <relationship name="effectChain">
+            <destination>{2ddd8554-18b8-41d8-afe1-a0e7b4ccc4a3}</destination>
+        </relationship>
+        <relationship name="panner">
+            <destination>{2c27bfa2-dcfb-49fe-85dd-d596551ddb28}</destination>
+        </relationship>
+        <relationship name="output">
+            <destination>{2f8936ee-464a-439f-87b1-fd6ef863df53}</destination>
+        </relationship>
+    </object>
+    <object class="EventAutomatableProperties" id="{89e81650-d1a4-42b1-96b4-20995d141847}"/>
+    <object class="MarkerTrack" id="{b9305bb7-5c47-4c47-a83e-d21acd8ea659}"/>
+    <object class="GroupTrack" id="{b177c451-f4e8-4c2b-8ce8-820f7f8e4a01}">
+        <relationship name="modules">
+            <destination>{b61e135e-9904-413a-b3dd-cdcee29b0e11}</destination>
+            <destination>{da122561-c0d8-4c38-9531-35f16186a94e}</destination>
+        </relationship>
+        <relationship name="mixerGroup">
+            <destination>{6b864293-94a4-4b88-a5f0-4021ab3b7c2e}</destination>
+        </relationship>
+    </object>
+    <object class="Timeline" id="{92e5a1c5-6d35-4feb-8785-72dd1d39f9e4}">
+        <relationship name="markers">
+            <destination>{acd77d61-1c73-4791-ae17-07caaa3ee1a4}</destination>
+        </relationship>
+    </object>
+    <object class="GameParameter" id="{0f01a5ab-4580-4032-a1d5-62a9d0a407e3}">
+        <property name="name">
+            <value>Surface</value>
+        </property>
+        <relationship name="modules">
+            <destination>{b61e135e-9904-413a-b3dd-cdcee29b0e11}</destination>
+            <destination>{da122561-c0d8-4c38-9531-35f16186a94e}</destination>
+        </relationship>
+    </object>
+    <object class="EventMixerMaster" id="{ba176c91-524d-4fc5-aae3-6255261929fe}">
+        <property name="volume">
+            <value>-3</value>
+        </property>
+        <relationship name="effectChain">
+            <destination>{c5a18e7d-f413-4e38-85e4-f9cb0cee9172}</destination>
+        </relationship>
+        <relationship name="panner">
+            <destination>{c54bfc2b-9db7-4243-81a6-5458ed074dda}</destination>
+        </relationship>
+        <relationship name="mixer">
+            <destination>{a11de45e-e641-4cb8-abb5-86d699dd2612}</destination>
+        </relationship>
+    </object>
+    <object class="MixerBusEffectChain" id="{2ddd8554-18b8-41d8-afe1-a0e7b4ccc4a3}">
+        <relationship name="effects">
+            <destination>{a4bcef17-1b03-4a39-983d-78510ef1dd80}</destination>
+        </relationship>
+    </object>
+    <object class="MixerBusPanner" id="{2c27bfa2-dcfb-49fe-85dd-d596551ddb28}"/>
+    <object class="MultiSound" id="{b61e135e-9904-413a-b3dd-cdcee29b0e11}">
+        <property name="length">
+            <value>0.47999999999999998</value>
+        </property>
+        <relationship name="sounds">
+            <destination>{5aa08a2a-6b3f-4974-8870-afe938dd6358}</destination>
+            <destination>{7b10fb66-c2e2-4c38-a3b4-8f8cd65b7c9c}</destination>
+            <destination>{057bef69-bebc-4a7a-9adc-975f7cea287c}</destination>
+            <destination>{6b3fc826-4269-498a-a638-cab18e36295f}</destination>
+            <destination>{22606bd2-deea-4cd9-8f89-0a1444a5200a}</destination>
+        </relationship>
+    </object>
+    <object class="MultiSound" id="{da122561-c0d8-4c38-9531-35f16186a94e}">
+        <property name="start">
+            <value>0.48999999999999999</value>
+        </property>
+        <property name="length">
+            <value>0.46000000000000002</value>
+        </property>
+        <relationship name="sounds">
+            <destination>{1696b7e7-faaf-436e-b037-ab66f17718ab}</destination>
+            <destination>{644228d3-30eb-405b-abdd-e784d00269cc}</destination>
+            <destination>{305eed1e-38f6-4ce2-b657-ffac64ed4c16}</destination>
+            <destination>{4c9b28cb-c4e5-46da-973f-f9fe7b9be8a6}</destination>
+        </relationship>
+    </object>
+    <object class="EventMixerGroup" id="{6b864293-94a4-4b88-a5f0-4021ab3b7c2e}">
+        <property name="name">
+            <value>Audio 1</value>
+        </property>
+        <relationship name="effectChain">
+            <destination>{6c61f038-2097-43bf-8008-e9858c5e9d17}</destination>
+        </relationship>
+        <relationship name="panner">
+            <destination>{89fe8be6-8c31-429c-a4f1-187fedf62d36}</destination>
+        </relationship>
+        <relationship name="output">
+            <destination>{ba176c91-524d-4fc5-aae3-6255261929fe}</destination>
+        </relationship>
+    </object>
+    <object class="LoopRegion" id="{acd77d61-1c73-4791-ae17-07caaa3ee1a4}">
+        <property name="position">
+            <value>0.5</value>
+        </property>
+        <property name="length">
+            <value>0.5</value>
+        </property>
+        <relationship name="timeline">
+            <destination>{92e5a1c5-6d35-4feb-8785-72dd1d39f9e4}</destination>
+        </relationship>
+        <relationship name="markerTrack">
+            <destination>{b9305bb7-5c47-4c47-a83e-d21acd8ea659}</destination>
+        </relationship>
+    </object>
+    <object class="MixerBusEffectChain" id="{c5a18e7d-f413-4e38-85e4-f9cb0cee9172}">
+        <relationship name="effects">
+            <destination>{a78fe94b-0eeb-4239-9188-1c89a67011c3}</destination>
+            <destination>{2f7e19fa-f8f8-4783-b19e-029bf94c9bc2}</destination>
+        </relationship>
+    </object>
+    <object class="MixerBusPanner" id="{c54bfc2b-9db7-4243-81a6-5458ed074dda}"/>
+    <object class="MixerBusFader" id="{a4bcef17-1b03-4a39-983d-78510ef1dd80}"/>
+    <object class="SingleSound" id="{5aa08a2a-6b3f-4974-8870-afe938dd6358}">
+        <relationship name="audioFile">
+            <destination>{3af94ac0-fc0d-4d4d-b78f-e0a8a5c6fdc5}</destination>
+        </relationship>
+    </object>
+    <object class="SingleSound" id="{7b10fb66-c2e2-4c38-a3b4-8f8cd65b7c9c}">
+        <relationship name="audioFile">
+            <destination>{cb9d108d-5891-42f0-aa51-85c5d30a06d8}</destination>
+        </relationship>
+    </object>
+    <object class="SingleSound" id="{057bef69-bebc-4a7a-9adc-975f7cea287c}">
+        <relationship name="audioFile">
+            <destination>{ae46332e-e218-48f0-a1d3-581dbfec953e}</destination>
+        </relationship>
+    </object>
+    <object class="SingleSound" id="{6b3fc826-4269-498a-a638-cab18e36295f}">
+        <relationship name="audioFile">
+            <destination>{cd92a3be-e8c1-4aef-870a-53de1e4a2620}</destination>
+        </relationship>
+    </object>
+    <object class="SingleSound" id="{22606bd2-deea-4cd9-8f89-0a1444a5200a}">
+        <relationship name="audioFile">
+            <destination>{b7cf3153-7d60-4a0a-bdd4-a354ec6c8993}</destination>
+        </relationship>
+    </object>
+    <object class="SingleSound" id="{1696b7e7-faaf-436e-b037-ab66f17718ab}">
+        <relationship name="audioFile">
+            <destination>{d36fc405-0bac-458f-b9c1-1bdb47d98177}</destination>
+        </relationship>
+    </object>
+    <object class="SingleSound" id="{644228d3-30eb-405b-abdd-e784d00269cc}">
+        <relationship name="audioFile">
+            <destination>{29f71484-f9b1-46e9-8a57-36225ff5b91e}</destination>
+        </relationship>
+    </object>
+    <object class="SingleSound" id="{305eed1e-38f6-4ce2-b657-ffac64ed4c16}">
+        <relationship name="audioFile">
+            <destination>{30490f9e-6bbf-4f91-9413-3bbbaffdfbc6}</destination>
+        </relationship>
+    </object>
+    <object class="SingleSound" id="{4c9b28cb-c4e5-46da-973f-f9fe7b9be8a6}">
+        <relationship name="audioFile">
+            <destination>{4d461ddc-3906-4ed0-b3dd-c179f0724fa3}</destination>
+        </relationship>
+    </object>
+    <object class="MixerBusEffectChain" id="{6c61f038-2097-43bf-8008-e9858c5e9d17}">
+        <relationship name="effects">
+            <destination>{2a5316f0-3b4f-41e9-b6f9-da90dad1bb89}</destination>
+        </relationship>
+    </object>
+    <object class="MixerBusPanner" id="{89fe8be6-8c31-429c-a4f1-187fedf62d36}"/>
+    <object class="MixerBusFader" id="{a78fe94b-0eeb-4239-9188-1c89a67011c3}"/>
+    <object class="SpatialiserEffect" id="{2f7e19fa-f8f8-4783-b19e-029bf94c9bc2}"/>
+    <object class="MixerBusFader" id="{2a5316f0-3b4f-41e9-b6f9-da90dad1bb89}"/>
+</objects>
diff --git a/FMODStudio/Chapter07/Metadata/Event/{8b09005b-94f1-42b6-94e0-2d2da4d59fd0}.xml b/FMODStudio/Chapter07/Metadata/Event/{8b09005b-94f1-42b6-94e0-2d2da4d59fd0}.xml
new file mode 100644
index 0000000000000000000000000000000000000000..f53a57ffebc1c7512b7bc13c1e88930e49f32c93
--- /dev/null
+++ b/FMODStudio/Chapter07/Metadata/Event/{8b09005b-94f1-42b6-94e0-2d2da4d59fd0}.xml
@@ -0,0 +1,149 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<objects serializationModel="Studio.01.09.00">
+    <object class="Event" id="{8b09005b-94f1-42b6-94e0-2d2da4d59fd0}">
+        <property name="name">
+            <value>Music</value>
+        </property>
+        <property name="outputFormat">
+            <value>1</value>
+        </property>
+        <relationship name="folder">
+            <destination>{94ff31b1-83b7-438f-a0c7-6a5fdd8ccbe5}</destination>
+        </relationship>
+        <relationship name="mixer">
+            <destination>{652ae7e8-15f7-4c27-b39b-1d5c449ec129}</destination>
+        </relationship>
+        <relationship name="masterTrack">
+            <destination>{b5d354bb-76ab-45cf-80d9-fd9a3a9e2bee}</destination>
+        </relationship>
+        <relationship name="mixerInput">
+            <destination>{2845a836-dd4a-4d11-a2b5-e3e0ec19d966}</destination>
+        </relationship>
+        <relationship name="automatableProperties">
+            <destination>{c24fb5a4-242c-4412-887a-f01127b56449}</destination>
+        </relationship>
+        <relationship name="markerTracks">
+            <destination>{2c9ab12d-8f90-4fb8-94a9-7c767ff5120e}</destination>
+        </relationship>
+        <relationship name="groupTracks">
+            <destination>{42b4ccd8-6d27-47b6-955b-8352c4718461}</destination>
+        </relationship>
+        <relationship name="timeline">
+            <destination>{95587d04-c275-449d-b518-bdd25bd9b4ad}</destination>
+        </relationship>
+        <relationship name="banks">
+            <destination>{1de7b457-2173-4205-b8b6-7583e593ccd6}</destination>
+        </relationship>
+    </object>
+    <object class="EventMixer" id="{652ae7e8-15f7-4c27-b39b-1d5c449ec129}">
+        <relationship name="masterBus">
+            <destination>{13deaf11-8357-46f5-8ec9-913dceeb7fa4}</destination>
+        </relationship>
+    </object>
+    <object class="MasterTrack" id="{b5d354bb-76ab-45cf-80d9-fd9a3a9e2bee}">
+        <relationship name="mixerGroup">
+            <destination>{13deaf11-8357-46f5-8ec9-913dceeb7fa4}</destination>
+        </relationship>
+    </object>
+    <object class="MixerInput" id="{2845a836-dd4a-4d11-a2b5-e3e0ec19d966}">
+        <relationship name="effectChain">
+            <destination>{5b3b422e-6f12-454c-9723-88b2fdb5aa84}</destination>
+        </relationship>
+        <relationship name="panner">
+            <destination>{8151b2c2-923f-445d-9d3a-1cc6430a7400}</destination>
+        </relationship>
+        <relationship name="output">
+            <destination>{76ef365d-f7b5-4307-94f2-d4ac2facaad5}</destination>
+        </relationship>
+    </object>
+    <object class="EventAutomatableProperties" id="{c24fb5a4-242c-4412-887a-f01127b56449}">
+        <property name="maxVoices">
+            <value>1</value>
+        </property>
+    </object>
+    <object class="MarkerTrack" id="{2c9ab12d-8f90-4fb8-94a9-7c767ff5120e}"/>
+    <object class="GroupTrack" id="{42b4ccd8-6d27-47b6-955b-8352c4718461}">
+        <relationship name="modules">
+            <destination>{bb0d2e20-4222-4fda-bd99-8750712452cd}</destination>
+        </relationship>
+        <relationship name="mixerGroup">
+            <destination>{f846effe-4954-457b-aede-6af0b4d6134d}</destination>
+        </relationship>
+    </object>
+    <object class="Timeline" id="{95587d04-c275-449d-b518-bdd25bd9b4ad}">
+        <relationship name="modules">
+            <destination>{bb0d2e20-4222-4fda-bd99-8750712452cd}</destination>
+        </relationship>
+        <relationship name="markers">
+            <destination>{882b9711-3d4f-486e-b3d4-24aa7276dab7}</destination>
+        </relationship>
+    </object>
+    <object class="EventMixerMaster" id="{13deaf11-8357-46f5-8ec9-913dceeb7fa4}">
+        <relationship name="effectChain">
+            <destination>{0f7b50c9-9036-4693-9b10-982ad43cb42e}</destination>
+        </relationship>
+        <relationship name="panner">
+            <destination>{34dbfcda-d83f-429a-ad6f-344394794ed5}</destination>
+        </relationship>
+        <relationship name="mixer">
+            <destination>{652ae7e8-15f7-4c27-b39b-1d5c449ec129}</destination>
+        </relationship>
+    </object>
+    <object class="MixerBusEffectChain" id="{5b3b422e-6f12-454c-9723-88b2fdb5aa84}">
+        <relationship name="effects">
+            <destination>{45ae97a9-da0d-45f3-973d-e8191b0df725}</destination>
+        </relationship>
+    </object>
+    <object class="MixerBusPanner" id="{8151b2c2-923f-445d-9d3a-1cc6430a7400}"/>
+    <object class="SingleSound" id="{bb0d2e20-4222-4fda-bd99-8750712452cd}">
+        <property name="length">
+            <value>242.00417233560091</value>
+        </property>
+        <relationship name="audioFile">
+            <destination>{dce2073c-8d73-442b-a9ae-1ed541ed7de1}</destination>
+        </relationship>
+    </object>
+    <object class="EventMixerGroup" id="{f846effe-4954-457b-aede-6af0b4d6134d}">
+        <property name="name">
+            <value>Audio 1</value>
+        </property>
+        <relationship name="effectChain">
+            <destination>{1f0bb221-045c-44f3-9630-81620b58a46f}</destination>
+        </relationship>
+        <relationship name="panner">
+            <destination>{f7ea7221-630d-4489-90ae-fe4b294fbe38}</destination>
+        </relationship>
+        <relationship name="output">
+            <destination>{13deaf11-8357-46f5-8ec9-913dceeb7fa4}</destination>
+        </relationship>
+    </object>
+    <object class="LoopRegion" id="{882b9711-3d4f-486e-b3d4-24aa7276dab7}">
+        <property name="position">
+            <value>0</value>
+        </property>
+        <property name="length">
+            <value>242.00417233560091</value>
+        </property>
+        <relationship name="timeline">
+            <destination>{95587d04-c275-449d-b518-bdd25bd9b4ad}</destination>
+        </relationship>
+        <relationship name="markerTrack">
+            <destination>{2c9ab12d-8f90-4fb8-94a9-7c767ff5120e}</destination>
+        </relationship>
+    </object>
+    <object class="MixerBusEffectChain" id="{0f7b50c9-9036-4693-9b10-982ad43cb42e}">
+        <relationship name="effects">
+            <destination>{fc06cce3-1e26-4354-a470-75f0126167b6}</destination>
+        </relationship>
+    </object>
+    <object class="MixerBusPanner" id="{34dbfcda-d83f-429a-ad6f-344394794ed5}"/>
+    <object class="MixerBusFader" id="{45ae97a9-da0d-45f3-973d-e8191b0df725}"/>
+    <object class="MixerBusEffectChain" id="{1f0bb221-045c-44f3-9630-81620b58a46f}">
+        <relationship name="effects">
+            <destination>{68a2a3fb-0579-45c6-ba8c-6ad9ac1bff7c}</destination>
+        </relationship>
+    </object>
+    <object class="MixerBusPanner" id="{f7ea7221-630d-4489-90ae-fe4b294fbe38}"/>
+    <object class="MixerBusFader" id="{fc06cce3-1e26-4354-a470-75f0126167b6}"/>
+    <object class="MixerBusFader" id="{68a2a3fb-0579-45c6-ba8c-6ad9ac1bff7c}"/>
+</objects>
diff --git a/FMODStudio/Chapter07/Metadata/Event/{a32c33d9-06f7-4dda-ad05-ca17ae0f080a}.xml b/FMODStudio/Chapter07/Metadata/Event/{a32c33d9-06f7-4dda-ad05-ca17ae0f080a}.xml
new file mode 100644
index 0000000000000000000000000000000000000000..366e90b427e8679dd0f403f3d7bc2a78d61bca9f
--- /dev/null
+++ b/FMODStudio/Chapter07/Metadata/Event/{a32c33d9-06f7-4dda-ad05-ca17ae0f080a}.xml
@@ -0,0 +1,128 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<objects serializationModel="Studio.01.09.00">
+    <object class="Event" id="{a32c33d9-06f7-4dda-ad05-ca17ae0f080a}">
+        <property name="name">
+            <value>Explosion2D</value>
+        </property>
+        <property name="outputFormat">
+            <value>0</value>
+        </property>
+        <relationship name="folder">
+            <destination>{94ff31b1-83b7-438f-a0c7-6a5fdd8ccbe5}</destination>
+        </relationship>
+        <relationship name="mixer">
+            <destination>{0c200fe8-ef03-41b2-a33e-f329ea70fa49}</destination>
+        </relationship>
+        <relationship name="masterTrack">
+            <destination>{5a576b5d-12f5-4fbf-b629-599050f183fd}</destination>
+        </relationship>
+        <relationship name="mixerInput">
+            <destination>{2a4c8bdc-1196-4954-a2a1-5898510d6bdf}</destination>
+        </relationship>
+        <relationship name="automatableProperties">
+            <destination>{10e583b7-75cc-4612-880c-5693be1465ec}</destination>
+        </relationship>
+        <relationship name="markerTracks">
+            <destination>{d0f8d6d6-d8de-48a0-8a19-c30a1c98a9b6}</destination>
+        </relationship>
+        <relationship name="groupTracks">
+            <destination>{276c7461-c265-487b-bff8-e7efcffa34c3}</destination>
+        </relationship>
+        <relationship name="timeline">
+            <destination>{fe779d63-2f9d-434f-9b16-f439515b3588}</destination>
+        </relationship>
+        <relationship name="banks">
+            <destination>{1de7b457-2173-4205-b8b6-7583e593ccd6}</destination>
+        </relationship>
+    </object>
+    <object class="EventMixer" id="{0c200fe8-ef03-41b2-a33e-f329ea70fa49}">
+        <relationship name="masterBus">
+            <destination>{f74471e8-1bd6-4cbb-9a5b-96a03303bad7}</destination>
+        </relationship>
+    </object>
+    <object class="MasterTrack" id="{5a576b5d-12f5-4fbf-b629-599050f183fd}">
+        <relationship name="mixerGroup">
+            <destination>{f74471e8-1bd6-4cbb-9a5b-96a03303bad7}</destination>
+        </relationship>
+    </object>
+    <object class="MixerInput" id="{2a4c8bdc-1196-4954-a2a1-5898510d6bdf}">
+        <relationship name="effectChain">
+            <destination>{c159b6c4-a2a1-4c5d-9fce-52e3e21725ec}</destination>
+        </relationship>
+        <relationship name="panner">
+            <destination>{785f6a4b-fae5-4f10-9a6e-dd62f6db7150}</destination>
+        </relationship>
+        <relationship name="output">
+            <destination>{2f8936ee-464a-439f-87b1-fd6ef863df53}</destination>
+        </relationship>
+    </object>
+    <object class="EventAutomatableProperties" id="{10e583b7-75cc-4612-880c-5693be1465ec}"/>
+    <object class="MarkerTrack" id="{d0f8d6d6-d8de-48a0-8a19-c30a1c98a9b6}"/>
+    <object class="GroupTrack" id="{276c7461-c265-487b-bff8-e7efcffa34c3}">
+        <relationship name="modules">
+            <destination>{05685d82-5fb6-43e2-9d32-008e5ac9cbbd}</destination>
+        </relationship>
+        <relationship name="mixerGroup">
+            <destination>{b894c117-c8bb-45d0-945c-241b252db332}</destination>
+        </relationship>
+    </object>
+    <object class="Timeline" id="{fe779d63-2f9d-434f-9b16-f439515b3588}">
+        <relationship name="modules">
+            <destination>{05685d82-5fb6-43e2-9d32-008e5ac9cbbd}</destination>
+        </relationship>
+    </object>
+    <object class="EventMixerMaster" id="{f74471e8-1bd6-4cbb-9a5b-96a03303bad7}">
+        <relationship name="effectChain">
+            <destination>{f5c90c8c-b038-4b9f-a0fc-8f3ac1431492}</destination>
+        </relationship>
+        <relationship name="panner">
+            <destination>{01a5cbcb-8140-403e-b030-6f358dd29798}</destination>
+        </relationship>
+        <relationship name="mixer">
+            <destination>{0c200fe8-ef03-41b2-a33e-f329ea70fa49}</destination>
+        </relationship>
+    </object>
+    <object class="MixerBusEffectChain" id="{c159b6c4-a2a1-4c5d-9fce-52e3e21725ec}">
+        <relationship name="effects">
+            <destination>{0c25f735-02f9-43f2-9e96-93a6efcbc942}</destination>
+        </relationship>
+    </object>
+    <object class="MixerBusPanner" id="{785f6a4b-fae5-4f10-9a6e-dd62f6db7150}"/>
+    <object class="SingleSound" id="{05685d82-5fb6-43e2-9d32-008e5ac9cbbd}">
+        <property name="length">
+            <value>1.3077812499999999</value>
+        </property>
+        <relationship name="audioFile">
+            <destination>{9b9edf48-2e21-4cbc-a4e0-d6d3410e0765}</destination>
+        </relationship>
+    </object>
+    <object class="EventMixerGroup" id="{b894c117-c8bb-45d0-945c-241b252db332}">
+        <property name="name">
+            <value>Audio 1</value>
+        </property>
+        <relationship name="effectChain">
+            <destination>{de1180ca-a608-424e-99e5-c5530494be4c}</destination>
+        </relationship>
+        <relationship name="panner">
+            <destination>{e645a15f-ace5-43dc-ac2f-e18066bce918}</destination>
+        </relationship>
+        <relationship name="output">
+            <destination>{f74471e8-1bd6-4cbb-9a5b-96a03303bad7}</destination>
+        </relationship>
+    </object>
+    <object class="MixerBusEffectChain" id="{f5c90c8c-b038-4b9f-a0fc-8f3ac1431492}">
+        <relationship name="effects">
+            <destination>{63b9b54c-7869-4b3f-a7fe-6a4319b98415}</destination>
+        </relationship>
+    </object>
+    <object class="MixerBusPanner" id="{01a5cbcb-8140-403e-b030-6f358dd29798}"/>
+    <object class="MixerBusFader" id="{0c25f735-02f9-43f2-9e96-93a6efcbc942}"/>
+    <object class="MixerBusEffectChain" id="{de1180ca-a608-424e-99e5-c5530494be4c}">
+        <relationship name="effects">
+            <destination>{02d36313-1557-497b-a362-f2785779ed3b}</destination>
+        </relationship>
+    </object>
+    <object class="MixerBusPanner" id="{e645a15f-ace5-43dc-ac2f-e18066bce918}"/>
+    <object class="MixerBusFader" id="{63b9b54c-7869-4b3f-a7fe-6a4319b98415}"/>
+    <object class="MixerBusFader" id="{02d36313-1557-497b-a362-f2785779ed3b}"/>
+</objects>
diff --git a/FMODStudio/Chapter07/Metadata/Event/{d0bd18e0-a471-46d7-98b4-c6255d379c57}.xml b/FMODStudio/Chapter07/Metadata/Event/{d0bd18e0-a471-46d7-98b4-c6255d379c57}.xml
new file mode 100644
index 0000000000000000000000000000000000000000..bb9fa5e54c857c42a1554c2fce815668c04ad889
--- /dev/null
+++ b/FMODStudio/Chapter07/Metadata/Event/{d0bd18e0-a471-46d7-98b4-c6255d379c57}.xml
@@ -0,0 +1,158 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<objects serializationModel="Studio.01.09.00">
+    <object class="Event" id="{d0bd18e0-a471-46d7-98b4-c6255d379c57}">
+        <property name="name">
+            <value>FireLoop</value>
+        </property>
+        <property name="outputFormat">
+            <value>2</value>
+        </property>
+        <relationship name="folder">
+            <destination>{94ff31b1-83b7-438f-a0c7-6a5fdd8ccbe5}</destination>
+        </relationship>
+        <relationship name="mixer">
+            <destination>{43ccff50-76bb-42ec-a323-1b1fadd93acd}</destination>
+        </relationship>
+        <relationship name="masterTrack">
+            <destination>{4b29d8d2-8590-4d74-93d9-667d16b6e64b}</destination>
+        </relationship>
+        <relationship name="mixerInput">
+            <destination>{43769adb-5da4-4782-a4fd-bb99c1bf16ab}</destination>
+        </relationship>
+        <relationship name="automatableProperties">
+            <destination>{f4ccddc0-edf3-407e-811e-aa81420df867}</destination>
+        </relationship>
+        <relationship name="markerTracks">
+            <destination>{d5d6e79d-d429-411f-beea-458acbad084d}</destination>
+        </relationship>
+        <relationship name="groupTracks">
+            <destination>{a7b7130f-b2e8-4d76-beb5-1e8f0d61f998}</destination>
+        </relationship>
+        <relationship name="timeline">
+            <destination>{b4607d8b-4038-4022-8a70-f663251bd602}</destination>
+        </relationship>
+        <relationship name="banks">
+            <destination>{1de7b457-2173-4205-b8b6-7583e593ccd6}</destination>
+        </relationship>
+    </object>
+    <object class="EventMixer" id="{43ccff50-76bb-42ec-a323-1b1fadd93acd}">
+        <relationship name="masterBus">
+            <destination>{167a6239-d50b-4574-8866-ca3ec901d7cc}</destination>
+        </relationship>
+    </object>
+    <object class="MasterTrack" id="{4b29d8d2-8590-4d74-93d9-667d16b6e64b}">
+        <relationship name="mixerGroup">
+            <destination>{167a6239-d50b-4574-8866-ca3ec901d7cc}</destination>
+        </relationship>
+    </object>
+    <object class="MixerInput" id="{43769adb-5da4-4782-a4fd-bb99c1bf16ab}">
+        <relationship name="effectChain">
+            <destination>{d6bac136-0d1f-4e55-866f-15a62cfc64ce}</destination>
+        </relationship>
+        <relationship name="panner">
+            <destination>{004f404c-6b97-4d73-986b-a1d7c2011782}</destination>
+        </relationship>
+        <relationship name="output">
+            <destination>{2f8936ee-464a-439f-87b1-fd6ef863df53}</destination>
+        </relationship>
+    </object>
+    <object class="EventAutomatableProperties" id="{f4ccddc0-edf3-407e-811e-aa81420df867}">
+        <property name="dopplerEnabled">
+            <value>true</value>
+        </property>
+    </object>
+    <object class="MarkerTrack" id="{d5d6e79d-d429-411f-beea-458acbad084d}"/>
+    <object class="GroupTrack" id="{a7b7130f-b2e8-4d76-beb5-1e8f0d61f998}">
+        <relationship name="modules">
+            <destination>{0b222f59-3adb-4f3a-8f1a-327ac8453859}</destination>
+        </relationship>
+        <relationship name="mixerGroup">
+            <destination>{ddfbcfb1-6025-414d-9954-7c0cd74bf455}</destination>
+        </relationship>
+    </object>
+    <object class="Timeline" id="{b4607d8b-4038-4022-8a70-f663251bd602}">
+        <relationship name="modules">
+            <destination>{0b222f59-3adb-4f3a-8f1a-327ac8453859}</destination>
+        </relationship>
+        <relationship name="markers">
+            <destination>{260658cb-ea39-48ba-b9ee-b3abfb6fb510}</destination>
+        </relationship>
+    </object>
+    <object class="EventMixerMaster" id="{167a6239-d50b-4574-8866-ca3ec901d7cc}">
+        <relationship name="effectChain">
+            <destination>{2a0c1f15-0452-4f46-b7e5-6488bb760951}</destination>
+        </relationship>
+        <relationship name="panner">
+            <destination>{d0441bf1-97be-4ddf-8e1c-288fd8b895c5}</destination>
+        </relationship>
+        <relationship name="mixer">
+            <destination>{43ccff50-76bb-42ec-a323-1b1fadd93acd}</destination>
+        </relationship>
+    </object>
+    <object class="MixerBusEffectChain" id="{d6bac136-0d1f-4e55-866f-15a62cfc64ce}">
+        <relationship name="effects">
+            <destination>{3047f345-1131-41f9-8c16-e3cf4461acc0}</destination>
+        </relationship>
+    </object>
+    <object class="MixerBusPanner" id="{004f404c-6b97-4d73-986b-a1d7c2011782}"/>
+    <object class="SingleSound" id="{0b222f59-3adb-4f3a-8f1a-327ac8453859}">
+        <property name="length">
+            <value>12</value>
+        </property>
+        <relationship name="audioFile">
+            <destination>{d0d48d00-9bc7-4dc5-96cf-5a0ce45ac0de}</destination>
+        </relationship>
+    </object>
+    <object class="EventMixerGroup" id="{ddfbcfb1-6025-414d-9954-7c0cd74bf455}">
+        <property name="name">
+            <value>Audio 1</value>
+        </property>
+        <relationship name="effectChain">
+            <destination>{dcbbeea6-daf6-4b5c-b5f9-9f8051c47161}</destination>
+        </relationship>
+        <relationship name="panner">
+            <destination>{fe4008bd-4375-44dc-997c-b5baaf862bcf}</destination>
+        </relationship>
+        <relationship name="output">
+            <destination>{167a6239-d50b-4574-8866-ca3ec901d7cc}</destination>
+        </relationship>
+    </object>
+    <object class="LoopRegion" id="{260658cb-ea39-48ba-b9ee-b3abfb6fb510}">
+        <property name="position">
+            <value>0</value>
+        </property>
+        <property name="length">
+            <value>12</value>
+        </property>
+        <relationship name="timeline">
+            <destination>{b4607d8b-4038-4022-8a70-f663251bd602}</destination>
+        </relationship>
+        <relationship name="markerTrack">
+            <destination>{d5d6e79d-d429-411f-beea-458acbad084d}</destination>
+        </relationship>
+    </object>
+    <object class="MixerBusEffectChain" id="{2a0c1f15-0452-4f46-b7e5-6488bb760951}">
+        <relationship name="effects">
+            <destination>{e1dd9176-d7ed-47e4-9dba-429d284c834a}</destination>
+            <destination>{4b38af07-b95f-4ced-ad3f-a30779a19fbe}</destination>
+        </relationship>
+    </object>
+    <object class="MixerBusPanner" id="{d0441bf1-97be-4ddf-8e1c-288fd8b895c5}"/>
+    <object class="MixerBusFader" id="{3047f345-1131-41f9-8c16-e3cf4461acc0}"/>
+    <object class="MixerBusEffectChain" id="{dcbbeea6-daf6-4b5c-b5f9-9f8051c47161}">
+        <relationship name="effects">
+            <destination>{faab69b2-7388-45d4-a359-fcc1b75e1941}</destination>
+        </relationship>
+    </object>
+    <object class="MixerBusPanner" id="{fe4008bd-4375-44dc-997c-b5baaf862bcf}"/>
+    <object class="MixerBusFader" id="{e1dd9176-d7ed-47e4-9dba-429d284c834a}"/>
+    <object class="SpatialiserEffect" id="{4b38af07-b95f-4ced-ad3f-a30779a19fbe}">
+        <property name="minimumDistance">
+            <value>10</value>
+        </property>
+        <property name="maximumDistance">
+            <value>500</value>
+        </property>
+    </object>
+    <object class="MixerBusFader" id="{faab69b2-7388-45d4-a359-fcc1b75e1941}"/>
+</objects>
diff --git a/FMODStudio/Chapter07/Metadata/EventFolder/{94ff31b1-83b7-438f-a0c7-6a5fdd8ccbe5}.xml b/FMODStudio/Chapter07/Metadata/EventFolder/{94ff31b1-83b7-438f-a0c7-6a5fdd8ccbe5}.xml
new file mode 100644
index 0000000000000000000000000000000000000000..ef49e5f2827f357f8e96daea36b23b70b4b4b532
--- /dev/null
+++ b/FMODStudio/Chapter07/Metadata/EventFolder/{94ff31b1-83b7-438f-a0c7-6a5fdd8ccbe5}.xml
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<objects serializationModel="Studio.01.09.00">
+    <object class="MasterEventFolder" id="{94ff31b1-83b7-438f-a0c7-6a5fdd8ccbe5}">
+        <property name="name">
+            <value>Master</value>
+        </property>
+    </object>
+</objects>
diff --git a/FMODStudio/Chapter07/Metadata/Group/{2f8936ee-464a-439f-87b1-fd6ef863df53}.xml b/FMODStudio/Chapter07/Metadata/Group/{2f8936ee-464a-439f-87b1-fd6ef863df53}.xml
new file mode 100644
index 0000000000000000000000000000000000000000..e9099772afb48ae7a72336d3726e81bfb4aaec04
--- /dev/null
+++ b/FMODStudio/Chapter07/Metadata/Group/{2f8936ee-464a-439f-87b1-fd6ef863df53}.xml
@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<objects serializationModel="Studio.01.09.00">
+    <object class="MixerGroup" id="{2f8936ee-464a-439f-87b1-fd6ef863df53}">
+        <property name="name">
+            <value>SFX</value>
+        </property>
+        <relationship name="effectChain">
+            <destination>{5842e9b3-7009-4375-baae-14ec06b49291}</destination>
+        </relationship>
+        <relationship name="panner">
+            <destination>{06e83998-8e4b-4159-b433-53e5d4bf09d0}</destination>
+        </relationship>
+        <relationship name="output">
+            <destination>{f6284d8c-9099-4e06-b8ed-f5b0509d696f}</destination>
+        </relationship>
+    </object>
+    <object class="MixerBusEffectChain" id="{5842e9b3-7009-4375-baae-14ec06b49291}">
+        <relationship name="effects">
+            <destination>{f51b3c20-1d85-4ebe-b925-2ac06fcfa234}</destination>
+            <destination>{93649bf1-d431-40b0-8bed-fc9eb1d3e422}</destination>
+        </relationship>
+    </object>
+    <object class="MixerBusPanner" id="{06e83998-8e4b-4159-b433-53e5d4bf09d0}"/>
+    <object class="MixerBusFader" id="{f51b3c20-1d85-4ebe-b925-2ac06fcfa234}"/>
+    <object class="MixerSend" id="{93649bf1-d431-40b0-8bed-fc9eb1d3e422}">
+        <property name="inputFormat">
+            <value>2</value>
+        </property>
+        <relationship name="mixerReturn">
+            <destination>{b34471c3-ebd2-4b54-b5e3-5f5beff1b202}</destination>
+        </relationship>
+    </object>
+</objects>
diff --git a/FMODStudio/Chapter07/Metadata/Group/{76ef365d-f7b5-4307-94f2-d4ac2facaad5}.xml b/FMODStudio/Chapter07/Metadata/Group/{76ef365d-f7b5-4307-94f2-d4ac2facaad5}.xml
new file mode 100644
index 0000000000000000000000000000000000000000..24b52537c30628f69e269ecc4283bb5f3f5d9207
--- /dev/null
+++ b/FMODStudio/Chapter07/Metadata/Group/{76ef365d-f7b5-4307-94f2-d4ac2facaad5}.xml
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<objects serializationModel="Studio.01.09.00">
+    <object class="MixerGroup" id="{76ef365d-f7b5-4307-94f2-d4ac2facaad5}">
+        <property name="name">
+            <value>Music</value>
+        </property>
+        <relationship name="effectChain">
+            <destination>{ca3d7968-34c3-45c1-bf77-5f54f7c0336f}</destination>
+        </relationship>
+        <relationship name="panner">
+            <destination>{7c58a011-e554-470e-979a-e30cb8c16c64}</destination>
+        </relationship>
+        <relationship name="output">
+            <destination>{f6284d8c-9099-4e06-b8ed-f5b0509d696f}</destination>
+        </relationship>
+    </object>
+    <object class="MixerBusEffectChain" id="{ca3d7968-34c3-45c1-bf77-5f54f7c0336f}">
+        <relationship name="effects">
+            <destination>{54f6181e-cb2c-4ce8-9267-1129ab157913}</destination>
+        </relationship>
+    </object>
+    <object class="MixerBusPanner" id="{7c58a011-e554-470e-979a-e30cb8c16c64}"/>
+    <object class="MixerBusFader" id="{54f6181e-cb2c-4ce8-9267-1129ab157913}"/>
+</objects>
diff --git a/FMODStudio/Chapter07/Metadata/Master.xml b/FMODStudio/Chapter07/Metadata/Master.xml
new file mode 100644
index 0000000000000000000000000000000000000000..a067d4aa8330fe34a0d2cf82a47115f46a97b594
--- /dev/null
+++ b/FMODStudio/Chapter07/Metadata/Master.xml
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<objects serializationModel="Studio.01.09.00">
+    <object class="MixerMaster" id="{f6284d8c-9099-4e06-b8ed-f5b0509d696f}">
+        <property name="name">
+            <value>Master Bus</value>
+        </property>
+        <relationship name="effectChain">
+            <destination>{6f6aaf39-d1e7-45c5-8c49-6711f0d04343}</destination>
+        </relationship>
+        <relationship name="panner">
+            <destination>{22f5cb64-aa51-40bb-bbf5-816d957b1265}</destination>
+        </relationship>
+        <relationship name="mixer">
+            <destination>{5130d9cb-07e8-4c02-885e-e27da18e8319}</destination>
+        </relationship>
+    </object>
+    <object class="MixerBusEffectChain" id="{6f6aaf39-d1e7-45c5-8c49-6711f0d04343}">
+        <relationship name="effects">
+            <destination>{55bed217-be2c-4489-8e9b-415c7c295e7d}</destination>
+        </relationship>
+    </object>
+    <object class="MixerBusPanner" id="{22f5cb64-aa51-40bb-bbf5-816d957b1265}"/>
+    <object class="MixerBusFader" id="{55bed217-be2c-4489-8e9b-415c7c295e7d}"/>
+</objects>
diff --git a/FMODStudio/Chapter07/Metadata/Mixer.xml b/FMODStudio/Chapter07/Metadata/Mixer.xml
new file mode 100644
index 0000000000000000000000000000000000000000..96e3852f915cc7ae252e9b5a227df93e70c6daf5
--- /dev/null
+++ b/FMODStudio/Chapter07/Metadata/Mixer.xml
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<objects serializationModel="Studio.01.09.00">
+    <object class="Mixer" id="{5130d9cb-07e8-4c02-885e-e27da18e8319}">
+        <relationship name="masterBus">
+            <destination>{f6284d8c-9099-4e06-b8ed-f5b0509d696f}</destination>
+        </relationship>
+        <relationship name="snapshotList">
+            <destination>{6dc45fff-38d8-417c-8652-91bba6f7500f}</destination>
+        </relationship>
+    </object>
+</objects>
diff --git a/FMODStudio/Chapter07/Metadata/Return/{b34471c3-ebd2-4b54-b5e3-5f5beff1b202}.xml b/FMODStudio/Chapter07/Metadata/Return/{b34471c3-ebd2-4b54-b5e3-5f5beff1b202}.xml
new file mode 100644
index 0000000000000000000000000000000000000000..ffac110dc71edd06bd1a2cdd6d427d26a91a3ee5
--- /dev/null
+++ b/FMODStudio/Chapter07/Metadata/Return/{b34471c3-ebd2-4b54-b5e3-5f5beff1b202}.xml
@@ -0,0 +1,39 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<objects serializationModel="Studio.01.09.00">
+    <object class="MixerReturn" id="{b34471c3-ebd2-4b54-b5e3-5f5beff1b202}">
+        <property name="overridingInputFormat">
+            <value>2</value>
+        </property>
+        <property name="inputFormatOverridden">
+            <value>true</value>
+        </property>
+        <property name="name">
+            <value>Reverb</value>
+        </property>
+        <relationship name="effectChain">
+            <destination>{7ba27032-da32-43d1-b1de-67394509150d}</destination>
+        </relationship>
+        <relationship name="panner">
+            <destination>{ea645dfd-3ced-4e6d-996b-2e727f18d8ce}</destination>
+        </relationship>
+        <relationship name="output">
+            <destination>{f6284d8c-9099-4e06-b8ed-f5b0509d696f}</destination>
+        </relationship>
+    </object>
+    <object class="MixerBusEffectChain" id="{7ba27032-da32-43d1-b1de-67394509150d}">
+        <relationship name="effects">
+            <destination>{86dcc538-5923-4ebb-a6aa-d1f286f1272d}</destination>
+            <destination>{0b091950-22de-4f23-8818-58efac44d769}</destination>
+        </relationship>
+    </object>
+    <object class="MixerBusPanner" id="{ea645dfd-3ced-4e6d-996b-2e727f18d8ce}"/>
+    <object class="SFXReverbEffect" id="{86dcc538-5923-4ebb-a6aa-d1f286f1272d}">
+        <property name="wetLevel">
+            <value>0</value>
+        </property>
+        <property name="dryLevel">
+            <value>-80</value>
+        </property>
+    </object>
+    <object class="MixerBusFader" id="{0b091950-22de-4f23-8818-58efac44d769}"/>
+</objects>
diff --git a/FMODStudio/Chapter07/Metadata/Snapshot/{5ff95cb9-9388-4a7b-a1d1-3d816aeb2fc8}.xml b/FMODStudio/Chapter07/Metadata/Snapshot/{5ff95cb9-9388-4a7b-a1d1-3d816aeb2fc8}.xml
new file mode 100644
index 0000000000000000000000000000000000000000..6c3081faa2779f52886ec2c3c1d449d9eea1cb81
--- /dev/null
+++ b/FMODStudio/Chapter07/Metadata/Snapshot/{5ff95cb9-9388-4a7b-a1d1-3d816aeb2fc8}.xml
@@ -0,0 +1,49 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<objects serializationModel="Studio.01.09.00">
+    <object class="Snapshot" id="{5ff95cb9-9388-4a7b-a1d1-3d816aeb2fc8}">
+        <property name="name">
+            <value>WithReverb</value>
+        </property>
+        <relationship name="mixer">
+            <destination>{5130d9cb-07e8-4c02-885e-e27da18e8319}</destination>
+        </relationship>
+        <relationship name="automatableProperties">
+            <destination>{115fd91e-eec5-4a9b-9b9f-1e36f67106fe}</destination>
+        </relationship>
+        <relationship name="markerTracks">
+            <destination>{329c7fbf-6fa8-4e63-87b4-b8a754c08a54}</destination>
+        </relationship>
+        <relationship name="timeline">
+            <destination>{05fb19ae-4d29-4ce4-a8bc-78d93c7e61e4}</destination>
+        </relationship>
+        <relationship name="snapshotMasterTrack">
+            <destination>{3a9ea0e3-7874-4a65-9010-cb8bf2cf1a8a}</destination>
+        </relationship>
+        <relationship name="snapshotProperties">
+            <destination>{da65a510-d6c6-44c1-b291-9ccf4ce76d7c}</destination>
+        </relationship>
+        <relationship name="snapshotTracks">
+            <destination>{76775df9-f6d2-443e-9f7d-6ae8ac974c22}</destination>
+        </relationship>
+    </object>
+    <object class="EventAutomatableProperties" id="{115fd91e-eec5-4a9b-9b9f-1e36f67106fe}"/>
+    <object class="MarkerTrack" id="{329c7fbf-6fa8-4e63-87b4-b8a754c08a54}"/>
+    <object class="Timeline" id="{05fb19ae-4d29-4ce4-a8bc-78d93c7e61e4}"/>
+    <object class="SnapshotMasterTrack" id="{3a9ea0e3-7874-4a65-9010-cb8bf2cf1a8a}"/>
+    <object class="SnapshotProperty" id="{da65a510-d6c6-44c1-b291-9ccf4ce76d7c}">
+        <property name="propertyName">
+            <value>level</value>
+        </property>
+        <property name="value">
+            <value>-8.5</value>
+        </property>
+        <relationship name="automatableObject">
+            <destination>{93649bf1-d431-40b0-8bed-fc9eb1d3e422}</destination>
+        </relationship>
+    </object>
+    <object class="SnapshotTrack" id="{76775df9-f6d2-443e-9f7d-6ae8ac974c22}">
+        <relationship name="mixerStrip">
+            <destination>{2f8936ee-464a-439f-87b1-fd6ef863df53}</destination>
+        </relationship>
+    </object>
+</objects>
diff --git a/FMODStudio/Chapter07/Metadata/SnapshotGroup/{6dc45fff-38d8-417c-8652-91bba6f7500f}.xml b/FMODStudio/Chapter07/Metadata/SnapshotGroup/{6dc45fff-38d8-417c-8652-91bba6f7500f}.xml
new file mode 100644
index 0000000000000000000000000000000000000000..e7146fa1c7f13aa95d18b358925ac3735ef5259a
--- /dev/null
+++ b/FMODStudio/Chapter07/Metadata/SnapshotGroup/{6dc45fff-38d8-417c-8652-91bba6f7500f}.xml
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<objects serializationModel="Studio.01.09.00">
+    <object class="SnapshotList" id="{6dc45fff-38d8-417c-8652-91bba6f7500f}">
+        <relationship name="items">
+            <destination>{5ff95cb9-9388-4a7b-a1d1-3d816aeb2fc8}</destination>
+        </relationship>
+        <relationship name="mixer">
+            <destination>{5130d9cb-07e8-4c02-885e-e27da18e8319}</destination>
+        </relationship>
+    </object>
+</objects>
diff --git a/FMODStudio/Chapter07/Metadata/Tags.xml b/FMODStudio/Chapter07/Metadata/Tags.xml
new file mode 100644
index 0000000000000000000000000000000000000000..dd25f3eac44304149f6e156385d9735649098324
--- /dev/null
+++ b/FMODStudio/Chapter07/Metadata/Tags.xml
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<objects serializationModel="Studio.01.09.00">
+    <object class="MasterTagFolder" id="{5c4ec9d8-a437-4d48-a923-6069be7e95e3}">
+        <property name="name">
+            <value>Master</value>
+        </property>
+    </object>
+</objects>
diff --git a/FMODStudio/Chapter07/Metadata/Workspace.xml b/FMODStudio/Chapter07/Metadata/Workspace.xml
new file mode 100644
index 0000000000000000000000000000000000000000..153248aa852940093b5737642d567b59ef535559
--- /dev/null
+++ b/FMODStudio/Chapter07/Metadata/Workspace.xml
@@ -0,0 +1,40 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<objects serializationModel="Studio.01.09.00">
+    <object class="Workspace" id="{4b471a38-78dc-4aa7-8065-e2a4be013d03}">
+        <property name="builtBanksOutputDirectory">
+            <value>../../Chapter07</value>
+        </property>
+        <relationship name="masterEventFolder">
+            <destination>{94ff31b1-83b7-438f-a0c7-6a5fdd8ccbe5}</destination>
+        </relationship>
+        <relationship name="masterTagFolder">
+            <destination>{5c4ec9d8-a437-4d48-a923-6069be7e95e3}</destination>
+        </relationship>
+        <relationship name="masterBankFolder">
+            <destination>{24acc9ed-98e6-4f97-b384-7cedad0817ab}</destination>
+        </relationship>
+        <relationship name="masterAssetFolder">
+            <destination>{ab2d50f9-072f-433d-950e-e62e89beb8cb}</destination>
+        </relationship>
+        <relationship name="mixer">
+            <destination>{5130d9cb-07e8-4c02-885e-e27da18e8319}</destination>
+        </relationship>
+        <relationship name="platforms">
+            <destination>{3ceb98b4-072c-41c2-a593-48d343172e25}</destination>
+        </relationship>
+    </object>
+    <object class="Platform" id="{3ceb98b4-072c-41c2-a593-48d343172e25}">
+        <property name="hardwareType">
+            <value>0</value>
+        </property>
+        <property name="name">
+            <value>Desktop</value>
+        </property>
+        <property name="subDirectory">
+            <value>Assets</value>
+        </property>
+        <property name="speakerFormat">
+            <value>6</value>
+        </property>
+    </object>
+</objects>
diff --git a/FMODStudio/Chapter10/Assets/264152__reitanna__microwave-ding.wav b/FMODStudio/Chapter10/Assets/264152__reitanna__microwave-ding.wav
new file mode 100644
index 0000000000000000000000000000000000000000..d2a8e5e8bf3f4c2716e7976ef97b76aea3a2689d
Binary files /dev/null and b/FMODStudio/Chapter10/Assets/264152__reitanna__microwave-ding.wav differ
diff --git a/FMODStudio/Chapter10/Assets/376351__mrthenoronha__single-nerf-shot.wav b/FMODStudio/Chapter10/Assets/376351__mrthenoronha__single-nerf-shot.wav
new file mode 100644
index 0000000000000000000000000000000000000000..a7f142b4b8da36b90d30f136fbe957db587b5642
Binary files /dev/null and b/FMODStudio/Chapter10/Assets/376351__mrthenoronha__single-nerf-shot.wav differ
diff --git a/FMODStudio/Chapter10/Assets/396012__morganpurkis__rustling-grass-3.wav b/FMODStudio/Chapter10/Assets/396012__morganpurkis__rustling-grass-3.wav
new file mode 100644
index 0000000000000000000000000000000000000000..4989147a35824f3afd30c0e147937587a038777e
Binary files /dev/null and b/FMODStudio/Chapter10/Assets/396012__morganpurkis__rustling-grass-3.wav differ
diff --git a/FMODStudio/Chapter10/Assets/396013__morganpurkis__rustling-grass-2.wav b/FMODStudio/Chapter10/Assets/396013__morganpurkis__rustling-grass-2.wav
new file mode 100644
index 0000000000000000000000000000000000000000..6f14a56aff63491cdcd4ef993c73dc1e25b9f71b
Binary files /dev/null and b/FMODStudio/Chapter10/Assets/396013__morganpurkis__rustling-grass-2.wav differ
diff --git a/FMODStudio/Chapter10/Assets/396014__morganpurkis__rustling-grass-1.wav b/FMODStudio/Chapter10/Assets/396014__morganpurkis__rustling-grass-1.wav
new file mode 100644
index 0000000000000000000000000000000000000000..61eca2cfb6b746a71008d09f0c82836c6359d41f
Binary files /dev/null and b/FMODStudio/Chapter10/Assets/396014__morganpurkis__rustling-grass-1.wav differ
diff --git a/FMODStudio/Chapter10/Assets/396016__morganpurkis__rustling-grass-4.wav b/FMODStudio/Chapter10/Assets/396016__morganpurkis__rustling-grass-4.wav
new file mode 100644
index 0000000000000000000000000000000000000000..2464184bd6e0ead796eddc550b3279b3b14f316b
Binary files /dev/null and b/FMODStudio/Chapter10/Assets/396016__morganpurkis__rustling-grass-4.wav differ
diff --git a/FMODStudio/Chapter10/Assets/47835__tc630__fire2.wav b/FMODStudio/Chapter10/Assets/47835__tc630__fire2.wav
new file mode 100644
index 0000000000000000000000000000000000000000..7c92ce79f9adaedeb59affed95527e1709e3fe2a
Binary files /dev/null and b/FMODStudio/Chapter10/Assets/47835__tc630__fire2.wav differ
diff --git a/FMODStudio/Chapter10/Assets/OutThere.ogg b/FMODStudio/Chapter10/Assets/OutThere.ogg
new file mode 100644
index 0000000000000000000000000000000000000000..975ecb12fd620d986ddadec91e5e326799899146
Binary files /dev/null and b/FMODStudio/Chapter10/Assets/OutThere.ogg differ
diff --git a/FMODStudio/Chapter10/Assets/explosion-1.ogg b/FMODStudio/Chapter10/Assets/explosion-1.ogg
new file mode 100644
index 0000000000000000000000000000000000000000..ad8a1ba5ce14af778b17b12109824a58178a778f
Binary files /dev/null and b/FMODStudio/Chapter10/Assets/explosion-1.ogg differ
diff --git a/FMODStudio/Chapter10/Assets/footstep00.ogg b/FMODStudio/Chapter10/Assets/footstep00.ogg
new file mode 100644
index 0000000000000000000000000000000000000000..ca5dd2b6aa45f73f53685988aacec0a88f31887b
Binary files /dev/null and b/FMODStudio/Chapter10/Assets/footstep00.ogg differ
diff --git a/FMODStudio/Chapter10/Assets/footstep01.ogg b/FMODStudio/Chapter10/Assets/footstep01.ogg
new file mode 100644
index 0000000000000000000000000000000000000000..e784dbff4808267daebd9297674f6532b1a826f3
Binary files /dev/null and b/FMODStudio/Chapter10/Assets/footstep01.ogg differ
diff --git a/FMODStudio/Chapter10/Assets/footstep02.ogg b/FMODStudio/Chapter10/Assets/footstep02.ogg
new file mode 100644
index 0000000000000000000000000000000000000000..fffa607622ef1f834244636ceaebfbb60c20fed1
Binary files /dev/null and b/FMODStudio/Chapter10/Assets/footstep02.ogg differ
diff --git a/FMODStudio/Chapter10/Assets/footstep03.ogg b/FMODStudio/Chapter10/Assets/footstep03.ogg
new file mode 100644
index 0000000000000000000000000000000000000000..32ec6265fc61f1aa323ae94c4b6c5b77f39f46f2
Binary files /dev/null and b/FMODStudio/Chapter10/Assets/footstep03.ogg differ
diff --git a/FMODStudio/Chapter10/Assets/footstep04.ogg b/FMODStudio/Chapter10/Assets/footstep04.ogg
new file mode 100644
index 0000000000000000000000000000000000000000..da3d8ea6250081ca302af44eb496d3758137dd1b
Binary files /dev/null and b/FMODStudio/Chapter10/Assets/footstep04.ogg differ
diff --git a/FMODStudio/Chapter10/Assets/footstep05.ogg b/FMODStudio/Chapter10/Assets/footstep05.ogg
new file mode 100644
index 0000000000000000000000000000000000000000..ddf5ac6a2d5e0bd76b0c5931e35e78ead9df7c87
Binary files /dev/null and b/FMODStudio/Chapter10/Assets/footstep05.ogg differ
diff --git a/FMODStudio/Chapter10/Assets/footstep06.ogg b/FMODStudio/Chapter10/Assets/footstep06.ogg
new file mode 100644
index 0000000000000000000000000000000000000000..d4419f4e7e0691efaad6506751f04b7202b4f71d
Binary files /dev/null and b/FMODStudio/Chapter10/Assets/footstep06.ogg differ
diff --git a/FMODStudio/Chapter10/Assets/footstep07.ogg b/FMODStudio/Chapter10/Assets/footstep07.ogg
new file mode 100644
index 0000000000000000000000000000000000000000..2b2175ec4d57f93a8d673e9ff9a6febdd7bd266b
Binary files /dev/null and b/FMODStudio/Chapter10/Assets/footstep07.ogg differ
diff --git a/FMODStudio/Chapter10/Assets/footstep08.ogg b/FMODStudio/Chapter10/Assets/footstep08.ogg
new file mode 100644
index 0000000000000000000000000000000000000000..2b71f97adb59dbe6834a8ab8cde38ff6046ad152
Binary files /dev/null and b/FMODStudio/Chapter10/Assets/footstep08.ogg differ
diff --git a/FMODStudio/Chapter10/Assets/footstep09.ogg b/FMODStudio/Chapter10/Assets/footstep09.ogg
new file mode 100644
index 0000000000000000000000000000000000000000..52c39f52c84a4e5b92c0555b05e1c703bad6d93a
Binary files /dev/null and b/FMODStudio/Chapter10/Assets/footstep09.ogg differ
diff --git a/FMODStudio/Chapter10/Chapter10.fspro b/FMODStudio/Chapter10/Chapter10.fspro
new file mode 100644
index 0000000000000000000000000000000000000000..e41455e9db8dcfd44b0fe6c3d7f92cfaa15feeca
--- /dev/null
+++ b/FMODStudio/Chapter10/Chapter10.fspro
@@ -0,0 +1,2 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<objects serializationModel="Studio.01.09.00"/>
diff --git a/FMODStudio/Chapter10/Metadata/Asset/{ab2d50f9-072f-433d-950e-e62e89beb8cb}.xml b/FMODStudio/Chapter10/Metadata/Asset/{ab2d50f9-072f-433d-950e-e62e89beb8cb}.xml
new file mode 100644
index 0000000000000000000000000000000000000000..41ae102c0380bfa05f05401c8971a89747605439
--- /dev/null
+++ b/FMODStudio/Chapter10/Metadata/Asset/{ab2d50f9-072f-433d-950e-e62e89beb8cb}.xml
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<objects serializationModel="Studio.01.09.00">
+    <object class="MasterAssetFolder" id="{ab2d50f9-072f-433d-950e-e62e89beb8cb}"/>
+</objects>
diff --git a/FMODStudio/Chapter10/Metadata/AudioFile/{124f51bb-6dfc-48fd-ad05-b9e44fdfd68d}.xml b/FMODStudio/Chapter10/Metadata/AudioFile/{124f51bb-6dfc-48fd-ad05-b9e44fdfd68d}.xml
new file mode 100644
index 0000000000000000000000000000000000000000..20b8b77322a51f8d5b753cac845072ccb24b7993
--- /dev/null
+++ b/FMODStudio/Chapter10/Metadata/AudioFile/{124f51bb-6dfc-48fd-ad05-b9e44fdfd68d}.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<objects serializationModel="Studio.01.09.00">
+    <object class="AudioFile" id="{124f51bb-6dfc-48fd-ad05-b9e44fdfd68d}">
+        <property name="assetPath">
+            <value>264152__reitanna__microwave-ding.wav</value>
+        </property>
+        <property name="frequencyInKHz">
+            <value>48</value>
+        </property>
+        <property name="channelCount">
+            <value>1</value>
+        </property>
+        <property name="length">
+            <value>1.1029374999999999</value>
+        </property>
+        <relationship name="masterAssetFolder">
+            <destination>{ab2d50f9-072f-433d-950e-e62e89beb8cb}</destination>
+        </relationship>
+    </object>
+</objects>
diff --git a/FMODStudio/Chapter10/Metadata/AudioFile/{29f71484-f9b1-46e9-8a57-36225ff5b91e}.xml b/FMODStudio/Chapter10/Metadata/AudioFile/{29f71484-f9b1-46e9-8a57-36225ff5b91e}.xml
new file mode 100644
index 0000000000000000000000000000000000000000..61410eae17889ea253c0752f5a1969873bd2fe24
--- /dev/null
+++ b/FMODStudio/Chapter10/Metadata/AudioFile/{29f71484-f9b1-46e9-8a57-36225ff5b91e}.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<objects serializationModel="Studio.01.09.00">
+    <object class="AudioFile" id="{29f71484-f9b1-46e9-8a57-36225ff5b91e}">
+        <property name="assetPath">
+            <value>396013__morganpurkis__rustling-grass-2.wav</value>
+        </property>
+        <property name="frequencyInKHz">
+            <value>48</value>
+        </property>
+        <property name="channelCount">
+            <value>1</value>
+        </property>
+        <property name="length">
+            <value>0.35222916666666665</value>
+        </property>
+        <relationship name="masterAssetFolder">
+            <destination>{ab2d50f9-072f-433d-950e-e62e89beb8cb}</destination>
+        </relationship>
+    </object>
+</objects>
diff --git a/FMODStudio/Chapter10/Metadata/AudioFile/{30490f9e-6bbf-4f91-9413-3bbbaffdfbc6}.xml b/FMODStudio/Chapter10/Metadata/AudioFile/{30490f9e-6bbf-4f91-9413-3bbbaffdfbc6}.xml
new file mode 100644
index 0000000000000000000000000000000000000000..2541ae89b0052afb182821897332b325444c1641
--- /dev/null
+++ b/FMODStudio/Chapter10/Metadata/AudioFile/{30490f9e-6bbf-4f91-9413-3bbbaffdfbc6}.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<objects serializationModel="Studio.01.09.00">
+    <object class="AudioFile" id="{30490f9e-6bbf-4f91-9413-3bbbaffdfbc6}">
+        <property name="assetPath">
+            <value>396014__morganpurkis__rustling-grass-1.wav</value>
+        </property>
+        <property name="frequencyInKHz">
+            <value>48</value>
+        </property>
+        <property name="channelCount">
+            <value>1</value>
+        </property>
+        <property name="length">
+            <value>0.29720833333333335</value>
+        </property>
+        <relationship name="masterAssetFolder">
+            <destination>{ab2d50f9-072f-433d-950e-e62e89beb8cb}</destination>
+        </relationship>
+    </object>
+</objects>
diff --git a/FMODStudio/Chapter10/Metadata/AudioFile/{3af94ac0-fc0d-4d4d-b78f-e0a8a5c6fdc5}.xml b/FMODStudio/Chapter10/Metadata/AudioFile/{3af94ac0-fc0d-4d4d-b78f-e0a8a5c6fdc5}.xml
new file mode 100644
index 0000000000000000000000000000000000000000..c5cf4d46185b6605fb69f1b8c9a0596a5ab887f2
--- /dev/null
+++ b/FMODStudio/Chapter10/Metadata/AudioFile/{3af94ac0-fc0d-4d4d-b78f-e0a8a5c6fdc5}.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<objects serializationModel="Studio.01.09.00">
+    <object class="AudioFile" id="{3af94ac0-fc0d-4d4d-b78f-e0a8a5c6fdc5}">
+        <property name="assetPath">
+            <value>footstep02.ogg</value>
+        </property>
+        <property name="frequencyInKHz">
+            <value>48</value>
+        </property>
+        <property name="channelCount">
+            <value>2</value>
+        </property>
+        <property name="length">
+            <value>0.24214583333333334</value>
+        </property>
+        <relationship name="masterAssetFolder">
+            <destination>{ab2d50f9-072f-433d-950e-e62e89beb8cb}</destination>
+        </relationship>
+    </object>
+</objects>
diff --git a/FMODStudio/Chapter10/Metadata/AudioFile/{4621b1dc-a4bc-4ca2-8e1c-a37b94ac3ddc}.xml b/FMODStudio/Chapter10/Metadata/AudioFile/{4621b1dc-a4bc-4ca2-8e1c-a37b94ac3ddc}.xml
new file mode 100644
index 0000000000000000000000000000000000000000..7f7b1ee92add3b94d3f8a918f882091d80a320e1
--- /dev/null
+++ b/FMODStudio/Chapter10/Metadata/AudioFile/{4621b1dc-a4bc-4ca2-8e1c-a37b94ac3ddc}.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<objects serializationModel="Studio.01.09.00">
+    <object class="AudioFile" id="{4621b1dc-a4bc-4ca2-8e1c-a37b94ac3ddc}">
+        <property name="assetPath">
+            <value>footstep03.ogg</value>
+        </property>
+        <property name="frequencyInKHz">
+            <value>48</value>
+        </property>
+        <property name="channelCount">
+            <value>2</value>
+        </property>
+        <property name="length">
+            <value>0.26902083333333332</value>
+        </property>
+        <relationship name="masterAssetFolder">
+            <destination>{ab2d50f9-072f-433d-950e-e62e89beb8cb}</destination>
+        </relationship>
+    </object>
+</objects>
diff --git a/FMODStudio/Chapter10/Metadata/AudioFile/{4d461ddc-3906-4ed0-b3dd-c179f0724fa3}.xml b/FMODStudio/Chapter10/Metadata/AudioFile/{4d461ddc-3906-4ed0-b3dd-c179f0724fa3}.xml
new file mode 100644
index 0000000000000000000000000000000000000000..d1df0627c5c1f492d8b83a588a52a73d09fba394
--- /dev/null
+++ b/FMODStudio/Chapter10/Metadata/AudioFile/{4d461ddc-3906-4ed0-b3dd-c179f0724fa3}.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<objects serializationModel="Studio.01.09.00">
+    <object class="AudioFile" id="{4d461ddc-3906-4ed0-b3dd-c179f0724fa3}">
+        <property name="assetPath">
+            <value>396016__morganpurkis__rustling-grass-4.wav</value>
+        </property>
+        <property name="frequencyInKHz">
+            <value>48</value>
+        </property>
+        <property name="channelCount">
+            <value>1</value>
+        </property>
+        <property name="length">
+            <value>0.38</value>
+        </property>
+        <relationship name="masterAssetFolder">
+            <destination>{ab2d50f9-072f-433d-950e-e62e89beb8cb}</destination>
+        </relationship>
+    </object>
+</objects>
diff --git a/FMODStudio/Chapter10/Metadata/AudioFile/{781cd1cd-8da7-44db-995d-f67b0ab3eac4}.xml b/FMODStudio/Chapter10/Metadata/AudioFile/{781cd1cd-8da7-44db-995d-f67b0ab3eac4}.xml
new file mode 100644
index 0000000000000000000000000000000000000000..068b10071be67def95e0b96e3723b06afa822d6c
--- /dev/null
+++ b/FMODStudio/Chapter10/Metadata/AudioFile/{781cd1cd-8da7-44db-995d-f67b0ab3eac4}.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<objects serializationModel="Studio.01.09.00">
+    <object class="AudioFile" id="{781cd1cd-8da7-44db-995d-f67b0ab3eac4}">
+        <property name="assetPath">
+            <value>footstep00.ogg</value>
+        </property>
+        <property name="frequencyInKHz">
+            <value>48</value>
+        </property>
+        <property name="channelCount">
+            <value>2</value>
+        </property>
+        <property name="length">
+            <value>0.24885416666666665</value>
+        </property>
+        <relationship name="masterAssetFolder">
+            <destination>{ab2d50f9-072f-433d-950e-e62e89beb8cb}</destination>
+        </relationship>
+    </object>
+</objects>
diff --git a/FMODStudio/Chapter10/Metadata/AudioFile/{9b9edf48-2e21-4cbc-a4e0-d6d3410e0765}.xml b/FMODStudio/Chapter10/Metadata/AudioFile/{9b9edf48-2e21-4cbc-a4e0-d6d3410e0765}.xml
new file mode 100644
index 0000000000000000000000000000000000000000..d9d06e8ad3ba94ad908e33e817978121e83fcafb
--- /dev/null
+++ b/FMODStudio/Chapter10/Metadata/AudioFile/{9b9edf48-2e21-4cbc-a4e0-d6d3410e0765}.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<objects serializationModel="Studio.01.09.00">
+    <object class="AudioFile" id="{9b9edf48-2e21-4cbc-a4e0-d6d3410e0765}">
+        <property name="assetPath">
+            <value>explosion-1.ogg</value>
+        </property>
+        <property name="frequencyInKHz">
+            <value>96</value>
+        </property>
+        <property name="channelCount">
+            <value>1</value>
+        </property>
+        <property name="length">
+            <value>1.3077812499999999</value>
+        </property>
+        <relationship name="masterAssetFolder">
+            <destination>{ab2d50f9-072f-433d-950e-e62e89beb8cb}</destination>
+        </relationship>
+    </object>
+</objects>
diff --git a/FMODStudio/Chapter10/Metadata/AudioFile/{ae46332e-e218-48f0-a1d3-581dbfec953e}.xml b/FMODStudio/Chapter10/Metadata/AudioFile/{ae46332e-e218-48f0-a1d3-581dbfec953e}.xml
new file mode 100644
index 0000000000000000000000000000000000000000..121862b7427c090719fdb375232576b8d6c79c6d
--- /dev/null
+++ b/FMODStudio/Chapter10/Metadata/AudioFile/{ae46332e-e218-48f0-a1d3-581dbfec953e}.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<objects serializationModel="Studio.01.09.00">
+    <object class="AudioFile" id="{ae46332e-e218-48f0-a1d3-581dbfec953e}">
+        <property name="assetPath">
+            <value>footstep05.ogg</value>
+        </property>
+        <property name="frequencyInKHz">
+            <value>48</value>
+        </property>
+        <property name="channelCount">
+            <value>2</value>
+        </property>
+        <property name="length">
+            <value>0.27577083333333335</value>
+        </property>
+        <relationship name="masterAssetFolder">
+            <destination>{ab2d50f9-072f-433d-950e-e62e89beb8cb}</destination>
+        </relationship>
+    </object>
+</objects>
diff --git a/FMODStudio/Chapter10/Metadata/AudioFile/{afd51056-781b-47df-9c3a-254fcb7f8ae6}.xml b/FMODStudio/Chapter10/Metadata/AudioFile/{afd51056-781b-47df-9c3a-254fcb7f8ae6}.xml
new file mode 100644
index 0000000000000000000000000000000000000000..9debcfb3cfdf23bc13df3789439ff59dd6e62525
--- /dev/null
+++ b/FMODStudio/Chapter10/Metadata/AudioFile/{afd51056-781b-47df-9c3a-254fcb7f8ae6}.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<objects serializationModel="Studio.01.09.00">
+    <object class="AudioFile" id="{afd51056-781b-47df-9c3a-254fcb7f8ae6}">
+        <property name="assetPath">
+            <value>footstep01.ogg</value>
+        </property>
+        <property name="frequencyInKHz">
+            <value>48</value>
+        </property>
+        <property name="channelCount">
+            <value>2</value>
+        </property>
+        <property name="length">
+            <value>0.28247916666666667</value>
+        </property>
+        <relationship name="masterAssetFolder">
+            <destination>{ab2d50f9-072f-433d-950e-e62e89beb8cb}</destination>
+        </relationship>
+    </object>
+</objects>
diff --git a/FMODStudio/Chapter10/Metadata/AudioFile/{b7cf3153-7d60-4a0a-bdd4-a354ec6c8993}.xml b/FMODStudio/Chapter10/Metadata/AudioFile/{b7cf3153-7d60-4a0a-bdd4-a354ec6c8993}.xml
new file mode 100644
index 0000000000000000000000000000000000000000..37a82b98381196658bfc911e241676c94e101ae9
--- /dev/null
+++ b/FMODStudio/Chapter10/Metadata/AudioFile/{b7cf3153-7d60-4a0a-bdd4-a354ec6c8993}.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<objects serializationModel="Studio.01.09.00">
+    <object class="AudioFile" id="{b7cf3153-7d60-4a0a-bdd4-a354ec6c8993}">
+        <property name="assetPath">
+            <value>footstep09.ogg</value>
+        </property>
+        <property name="frequencyInKHz">
+            <value>48</value>
+        </property>
+        <property name="channelCount">
+            <value>2</value>
+        </property>
+        <property name="length">
+            <value>0.21522916666666667</value>
+        </property>
+        <relationship name="masterAssetFolder">
+            <destination>{ab2d50f9-072f-433d-950e-e62e89beb8cb}</destination>
+        </relationship>
+    </object>
+</objects>
diff --git a/FMODStudio/Chapter10/Metadata/AudioFile/{b90736d7-6748-46a4-8132-d9e364599d4d}.xml b/FMODStudio/Chapter10/Metadata/AudioFile/{b90736d7-6748-46a4-8132-d9e364599d4d}.xml
new file mode 100644
index 0000000000000000000000000000000000000000..0405a81760d3d44991016d482bba827e92f2dace
--- /dev/null
+++ b/FMODStudio/Chapter10/Metadata/AudioFile/{b90736d7-6748-46a4-8132-d9e364599d4d}.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<objects serializationModel="Studio.01.09.00">
+    <object class="AudioFile" id="{b90736d7-6748-46a4-8132-d9e364599d4d}">
+        <property name="assetPath">
+            <value>footstep08.ogg</value>
+        </property>
+        <property name="frequencyInKHz">
+            <value>48</value>
+        </property>
+        <property name="channelCount">
+            <value>2</value>
+        </property>
+        <property name="length">
+            <value>0.25558333333333333</value>
+        </property>
+        <relationship name="masterAssetFolder">
+            <destination>{ab2d50f9-072f-433d-950e-e62e89beb8cb}</destination>
+        </relationship>
+    </object>
+</objects>
diff --git a/FMODStudio/Chapter10/Metadata/AudioFile/{cb9d108d-5891-42f0-aa51-85c5d30a06d8}.xml b/FMODStudio/Chapter10/Metadata/AudioFile/{cb9d108d-5891-42f0-aa51-85c5d30a06d8}.xml
new file mode 100644
index 0000000000000000000000000000000000000000..69ad9c92d0d8d2fe467e8efc469f9664a88d9272
--- /dev/null
+++ b/FMODStudio/Chapter10/Metadata/AudioFile/{cb9d108d-5891-42f0-aa51-85c5d30a06d8}.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<objects serializationModel="Studio.01.09.00">
+    <object class="AudioFile" id="{cb9d108d-5891-42f0-aa51-85c5d30a06d8}">
+        <property name="assetPath">
+            <value>footstep04.ogg</value>
+        </property>
+        <property name="frequencyInKHz">
+            <value>48</value>
+        </property>
+        <property name="channelCount">
+            <value>2</value>
+        </property>
+        <property name="length">
+            <value>0.32283333333333336</value>
+        </property>
+        <relationship name="masterAssetFolder">
+            <destination>{ab2d50f9-072f-433d-950e-e62e89beb8cb}</destination>
+        </relationship>
+    </object>
+</objects>
diff --git a/FMODStudio/Chapter10/Metadata/AudioFile/{cd92a3be-e8c1-4aef-870a-53de1e4a2620}.xml b/FMODStudio/Chapter10/Metadata/AudioFile/{cd92a3be-e8c1-4aef-870a-53de1e4a2620}.xml
new file mode 100644
index 0000000000000000000000000000000000000000..68b46dbf7fd8ae79140315da9801c3c5c1ddfbdf
--- /dev/null
+++ b/FMODStudio/Chapter10/Metadata/AudioFile/{cd92a3be-e8c1-4aef-870a-53de1e4a2620}.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<objects serializationModel="Studio.01.09.00">
+    <object class="AudioFile" id="{cd92a3be-e8c1-4aef-870a-53de1e4a2620}">
+        <property name="assetPath">
+            <value>footstep06.ogg</value>
+        </property>
+        <property name="frequencyInKHz">
+            <value>48</value>
+        </property>
+        <property name="channelCount">
+            <value>2</value>
+        </property>
+        <property name="length">
+            <value>0.24212500000000001</value>
+        </property>
+        <relationship name="masterAssetFolder">
+            <destination>{ab2d50f9-072f-433d-950e-e62e89beb8cb}</destination>
+        </relationship>
+    </object>
+</objects>
diff --git a/FMODStudio/Chapter10/Metadata/AudioFile/{d0d48d00-9bc7-4dc5-96cf-5a0ce45ac0de}.xml b/FMODStudio/Chapter10/Metadata/AudioFile/{d0d48d00-9bc7-4dc5-96cf-5a0ce45ac0de}.xml
new file mode 100644
index 0000000000000000000000000000000000000000..fa3534eafc68216fcc29adad994541bf8d749dc1
--- /dev/null
+++ b/FMODStudio/Chapter10/Metadata/AudioFile/{d0d48d00-9bc7-4dc5-96cf-5a0ce45ac0de}.xml
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<objects serializationModel="Studio.01.09.00">
+    <object class="AudioFile" id="{d0d48d00-9bc7-4dc5-96cf-5a0ce45ac0de}">
+        <property name="assetPath">
+            <value>47835__tc630__fire2.wav</value>
+        </property>
+        <property name="isStreaming">
+            <value>true</value>
+        </property>
+        <property name="frequencyInKHz">
+            <value>48</value>
+        </property>
+        <property name="channelCount">
+            <value>2</value>
+        </property>
+        <property name="length">
+            <value>12</value>
+        </property>
+        <relationship name="masterAssetFolder">
+            <destination>{ab2d50f9-072f-433d-950e-e62e89beb8cb}</destination>
+        </relationship>
+    </object>
+</objects>
diff --git a/FMODStudio/Chapter10/Metadata/AudioFile/{d36fc405-0bac-458f-b9c1-1bdb47d98177}.xml b/FMODStudio/Chapter10/Metadata/AudioFile/{d36fc405-0bac-458f-b9c1-1bdb47d98177}.xml
new file mode 100644
index 0000000000000000000000000000000000000000..e944b93c0666a149850e81483854c9f895823bd1
--- /dev/null
+++ b/FMODStudio/Chapter10/Metadata/AudioFile/{d36fc405-0bac-458f-b9c1-1bdb47d98177}.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<objects serializationModel="Studio.01.09.00">
+    <object class="AudioFile" id="{d36fc405-0bac-458f-b9c1-1bdb47d98177}">
+        <property name="assetPath">
+            <value>396012__morganpurkis__rustling-grass-3.wav</value>
+        </property>
+        <property name="frequencyInKHz">
+            <value>48</value>
+        </property>
+        <property name="channelCount">
+            <value>1</value>
+        </property>
+        <property name="length">
+            <value>0.30106250000000001</value>
+        </property>
+        <relationship name="masterAssetFolder">
+            <destination>{ab2d50f9-072f-433d-950e-e62e89beb8cb}</destination>
+        </relationship>
+    </object>
+</objects>
diff --git a/FMODStudio/Chapter10/Metadata/AudioFile/{dce2073c-8d73-442b-a9ae-1ed541ed7de1}.xml b/FMODStudio/Chapter10/Metadata/AudioFile/{dce2073c-8d73-442b-a9ae-1ed541ed7de1}.xml
new file mode 100644
index 0000000000000000000000000000000000000000..3795fdb6584d4fc26c3590d1bb229582ad8fab14
--- /dev/null
+++ b/FMODStudio/Chapter10/Metadata/AudioFile/{dce2073c-8d73-442b-a9ae-1ed541ed7de1}.xml
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<objects serializationModel="Studio.01.09.00">
+    <object class="AudioFile" id="{dce2073c-8d73-442b-a9ae-1ed541ed7de1}">
+        <property name="assetPath">
+            <value>OutThere.ogg</value>
+        </property>
+        <property name="isStreaming">
+            <value>true</value>
+        </property>
+        <property name="frequencyInKHz">
+            <value>44.0999985</value>
+        </property>
+        <property name="channelCount">
+            <value>2</value>
+        </property>
+        <property name="length">
+            <value>242.00417233560091</value>
+        </property>
+        <relationship name="masterAssetFolder">
+            <destination>{ab2d50f9-072f-433d-950e-e62e89beb8cb}</destination>
+        </relationship>
+    </object>
+</objects>
diff --git a/FMODStudio/Chapter10/Metadata/AudioFile/{e1063182-c444-4207-b774-b722ece392ce}.xml b/FMODStudio/Chapter10/Metadata/AudioFile/{e1063182-c444-4207-b774-b722ece392ce}.xml
new file mode 100644
index 0000000000000000000000000000000000000000..d6e4367e337cf91d91f77fedac88f3dfc719cfc2
--- /dev/null
+++ b/FMODStudio/Chapter10/Metadata/AudioFile/{e1063182-c444-4207-b774-b722ece392ce}.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<objects serializationModel="Studio.01.09.00">
+    <object class="AudioFile" id="{e1063182-c444-4207-b774-b722ece392ce}">
+        <property name="assetPath">
+            <value>376351__mrthenoronha__single-nerf-shot.wav</value>
+        </property>
+        <property name="frequencyInKHz">
+            <value>44.0999985</value>
+        </property>
+        <property name="channelCount">
+            <value>2</value>
+        </property>
+        <property name="length">
+            <value>0.54213151927437642</value>
+        </property>
+        <relationship name="masterAssetFolder">
+            <destination>{ab2d50f9-072f-433d-950e-e62e89beb8cb}</destination>
+        </relationship>
+    </object>
+</objects>
diff --git a/FMODStudio/Chapter10/Metadata/AudioFile/{e8c8d3a3-c53a-49b8-85a0-6c46a7e81d03}.xml b/FMODStudio/Chapter10/Metadata/AudioFile/{e8c8d3a3-c53a-49b8-85a0-6c46a7e81d03}.xml
new file mode 100644
index 0000000000000000000000000000000000000000..de4cf7335e926689bedd432d98d35bed71e47bfb
--- /dev/null
+++ b/FMODStudio/Chapter10/Metadata/AudioFile/{e8c8d3a3-c53a-49b8-85a0-6c46a7e81d03}.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<objects serializationModel="Studio.01.09.00">
+    <object class="AudioFile" id="{e8c8d3a3-c53a-49b8-85a0-6c46a7e81d03}">
+        <property name="assetPath">
+            <value>footstep07.ogg</value>
+        </property>
+        <property name="frequencyInKHz">
+            <value>48</value>
+        </property>
+        <property name="channelCount">
+            <value>2</value>
+        </property>
+        <property name="length">
+            <value>0.25558333333333333</value>
+        </property>
+        <relationship name="masterAssetFolder">
+            <destination>{ab2d50f9-072f-433d-950e-e62e89beb8cb}</destination>
+        </relationship>
+    </object>
+</objects>
diff --git a/FMODStudio/Chapter10/Metadata/Bank/{1de7b457-2173-4205-b8b6-7583e593ccd6}.xml b/FMODStudio/Chapter10/Metadata/Bank/{1de7b457-2173-4205-b8b6-7583e593ccd6}.xml
new file mode 100644
index 0000000000000000000000000000000000000000..2360a63faa98802fd5019e8716f63036d98f3a77
--- /dev/null
+++ b/FMODStudio/Chapter10/Metadata/Bank/{1de7b457-2173-4205-b8b6-7583e593ccd6}.xml
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<objects serializationModel="Studio.01.09.00">
+    <object class="MasterBank" id="{1de7b457-2173-4205-b8b6-7583e593ccd6}">
+        <relationship name="folder">
+            <destination>{24acc9ed-98e6-4f97-b384-7cedad0817ab}</destination>
+        </relationship>
+    </object>
+</objects>
diff --git a/FMODStudio/Chapter10/Metadata/BankFolder/{24acc9ed-98e6-4f97-b384-7cedad0817ab}.xml b/FMODStudio/Chapter10/Metadata/BankFolder/{24acc9ed-98e6-4f97-b384-7cedad0817ab}.xml
new file mode 100644
index 0000000000000000000000000000000000000000..2f98f86eaadb4d478c0a3e298e70b229f0241b33
--- /dev/null
+++ b/FMODStudio/Chapter10/Metadata/BankFolder/{24acc9ed-98e6-4f97-b384-7cedad0817ab}.xml
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<objects serializationModel="Studio.01.09.00">
+    <object class="MasterBankFolder" id="{24acc9ed-98e6-4f97-b384-7cedad0817ab}"/>
+</objects>
diff --git a/FMODStudio/Chapter10/Metadata/EncodingSetting/{36713264-83a3-4399-9bbf-fc81c28a0bd4}.xml b/FMODStudio/Chapter10/Metadata/EncodingSetting/{36713264-83a3-4399-9bbf-fc81c28a0bd4}.xml
new file mode 100644
index 0000000000000000000000000000000000000000..20b5cf1e72ccc8d694eea3f123d10f2f18d4a61e
--- /dev/null
+++ b/FMODStudio/Chapter10/Metadata/EncodingSetting/{36713264-83a3-4399-9bbf-fc81c28a0bd4}.xml
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<objects serializationModel="Studio.01.09.00">
+    <object class="EncodingSetting" id="{36713264-83a3-4399-9bbf-fc81c28a0bd4}">
+        <property name="encodingFormat">
+            <value>3</value>
+        </property>
+        <property name="quality">
+            <value>37</value>
+        </property>
+        <relationship name="platform">
+            <destination>{3ceb98b4-072c-41c2-a593-48d343172e25}</destination>
+        </relationship>
+        <relationship name="encodable">
+            <destination>{3ceb98b4-072c-41c2-a593-48d343172e25}</destination>
+        </relationship>
+    </object>
+</objects>
diff --git a/FMODStudio/Chapter10/Metadata/Event/{24b533f4-bf66-45ae-b191-6b149b3af663}.xml b/FMODStudio/Chapter10/Metadata/Event/{24b533f4-bf66-45ae-b191-6b149b3af663}.xml
new file mode 100644
index 0000000000000000000000000000000000000000..b6af61519e734218e8a0b4803ac73adc8b8e8a59
--- /dev/null
+++ b/FMODStudio/Chapter10/Metadata/Event/{24b533f4-bf66-45ae-b191-6b149b3af663}.xml
@@ -0,0 +1,223 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<objects serializationModel="Studio.01.09.00">
+    <object class="Event" id="{24b533f4-bf66-45ae-b191-6b149b3af663}">
+        <property name="name">
+            <value>Footstep</value>
+        </property>
+        <property name="outputFormat">
+            <value>2</value>
+        </property>
+        <relationship name="folder">
+            <destination>{94ff31b1-83b7-438f-a0c7-6a5fdd8ccbe5}</destination>
+        </relationship>
+        <relationship name="mixer">
+            <destination>{a11de45e-e641-4cb8-abb5-86d699dd2612}</destination>
+        </relationship>
+        <relationship name="masterTrack">
+            <destination>{1ce222ba-e0b7-40dd-927a-1c45d2626972}</destination>
+        </relationship>
+        <relationship name="mixerInput">
+            <destination>{dbde1fad-5f73-49db-85b3-0d9fd720a94a}</destination>
+        </relationship>
+        <relationship name="automatableProperties">
+            <destination>{89e81650-d1a4-42b1-96b4-20995d141847}</destination>
+        </relationship>
+        <relationship name="markerTracks">
+            <destination>{b9305bb7-5c47-4c47-a83e-d21acd8ea659}</destination>
+        </relationship>
+        <relationship name="groupTracks">
+            <destination>{b177c451-f4e8-4c2b-8ce8-820f7f8e4a01}</destination>
+        </relationship>
+        <relationship name="timeline">
+            <destination>{92e5a1c5-6d35-4feb-8785-72dd1d39f9e4}</destination>
+        </relationship>
+        <relationship name="parameters">
+            <destination>{0f01a5ab-4580-4032-a1d5-62a9d0a407e3}</destination>
+        </relationship>
+        <relationship name="banks">
+            <destination>{1de7b457-2173-4205-b8b6-7583e593ccd6}</destination>
+        </relationship>
+    </object>
+    <object class="EventMixer" id="{a11de45e-e641-4cb8-abb5-86d699dd2612}">
+        <relationship name="masterBus">
+            <destination>{ba176c91-524d-4fc5-aae3-6255261929fe}</destination>
+        </relationship>
+    </object>
+    <object class="MasterTrack" id="{1ce222ba-e0b7-40dd-927a-1c45d2626972}">
+        <relationship name="mixerGroup">
+            <destination>{ba176c91-524d-4fc5-aae3-6255261929fe}</destination>
+        </relationship>
+    </object>
+    <object class="MixerInput" id="{dbde1fad-5f73-49db-85b3-0d9fd720a94a}">
+        <relationship name="effectChain">
+            <destination>{2ddd8554-18b8-41d8-afe1-a0e7b4ccc4a3}</destination>
+        </relationship>
+        <relationship name="panner">
+            <destination>{2c27bfa2-dcfb-49fe-85dd-d596551ddb28}</destination>
+        </relationship>
+        <relationship name="output">
+            <destination>{2f8936ee-464a-439f-87b1-fd6ef863df53}</destination>
+        </relationship>
+    </object>
+    <object class="EventAutomatableProperties" id="{89e81650-d1a4-42b1-96b4-20995d141847}"/>
+    <object class="MarkerTrack" id="{b9305bb7-5c47-4c47-a83e-d21acd8ea659}"/>
+    <object class="GroupTrack" id="{b177c451-f4e8-4c2b-8ce8-820f7f8e4a01}">
+        <relationship name="modules">
+            <destination>{b61e135e-9904-413a-b3dd-cdcee29b0e11}</destination>
+            <destination>{da122561-c0d8-4c38-9531-35f16186a94e}</destination>
+        </relationship>
+        <relationship name="mixerGroup">
+            <destination>{6b864293-94a4-4b88-a5f0-4021ab3b7c2e}</destination>
+        </relationship>
+    </object>
+    <object class="Timeline" id="{92e5a1c5-6d35-4feb-8785-72dd1d39f9e4}">
+        <relationship name="markers">
+            <destination>{acd77d61-1c73-4791-ae17-07caaa3ee1a4}</destination>
+        </relationship>
+    </object>
+    <object class="GameParameter" id="{0f01a5ab-4580-4032-a1d5-62a9d0a407e3}">
+        <property name="name">
+            <value>Surface</value>
+        </property>
+        <relationship name="modules">
+            <destination>{b61e135e-9904-413a-b3dd-cdcee29b0e11}</destination>
+            <destination>{da122561-c0d8-4c38-9531-35f16186a94e}</destination>
+        </relationship>
+    </object>
+    <object class="EventMixerMaster" id="{ba176c91-524d-4fc5-aae3-6255261929fe}">
+        <property name="volume">
+            <value>-3</value>
+        </property>
+        <relationship name="effectChain">
+            <destination>{c5a18e7d-f413-4e38-85e4-f9cb0cee9172}</destination>
+        </relationship>
+        <relationship name="panner">
+            <destination>{c54bfc2b-9db7-4243-81a6-5458ed074dda}</destination>
+        </relationship>
+        <relationship name="mixer">
+            <destination>{a11de45e-e641-4cb8-abb5-86d699dd2612}</destination>
+        </relationship>
+    </object>
+    <object class="MixerBusEffectChain" id="{2ddd8554-18b8-41d8-afe1-a0e7b4ccc4a3}">
+        <relationship name="effects">
+            <destination>{a4bcef17-1b03-4a39-983d-78510ef1dd80}</destination>
+        </relationship>
+    </object>
+    <object class="MixerBusPanner" id="{2c27bfa2-dcfb-49fe-85dd-d596551ddb28}"/>
+    <object class="MultiSound" id="{b61e135e-9904-413a-b3dd-cdcee29b0e11}">
+        <property name="length">
+            <value>0.47999999999999998</value>
+        </property>
+        <relationship name="sounds">
+            <destination>{5aa08a2a-6b3f-4974-8870-afe938dd6358}</destination>
+            <destination>{7b10fb66-c2e2-4c38-a3b4-8f8cd65b7c9c}</destination>
+            <destination>{057bef69-bebc-4a7a-9adc-975f7cea287c}</destination>
+            <destination>{6b3fc826-4269-498a-a638-cab18e36295f}</destination>
+            <destination>{22606bd2-deea-4cd9-8f89-0a1444a5200a}</destination>
+        </relationship>
+    </object>
+    <object class="MultiSound" id="{da122561-c0d8-4c38-9531-35f16186a94e}">
+        <property name="start">
+            <value>0.48999999999999999</value>
+        </property>
+        <property name="length">
+            <value>0.46000000000000002</value>
+        </property>
+        <relationship name="sounds">
+            <destination>{1696b7e7-faaf-436e-b037-ab66f17718ab}</destination>
+            <destination>{644228d3-30eb-405b-abdd-e784d00269cc}</destination>
+            <destination>{305eed1e-38f6-4ce2-b657-ffac64ed4c16}</destination>
+            <destination>{4c9b28cb-c4e5-46da-973f-f9fe7b9be8a6}</destination>
+        </relationship>
+    </object>
+    <object class="EventMixerGroup" id="{6b864293-94a4-4b88-a5f0-4021ab3b7c2e}">
+        <property name="name">
+            <value>Audio 1</value>
+        </property>
+        <relationship name="effectChain">
+            <destination>{6c61f038-2097-43bf-8008-e9858c5e9d17}</destination>
+        </relationship>
+        <relationship name="panner">
+            <destination>{89fe8be6-8c31-429c-a4f1-187fedf62d36}</destination>
+        </relationship>
+        <relationship name="output">
+            <destination>{ba176c91-524d-4fc5-aae3-6255261929fe}</destination>
+        </relationship>
+    </object>
+    <object class="LoopRegion" id="{acd77d61-1c73-4791-ae17-07caaa3ee1a4}">
+        <property name="position">
+            <value>0.5</value>
+        </property>
+        <property name="length">
+            <value>0.5</value>
+        </property>
+        <relationship name="timeline">
+            <destination>{92e5a1c5-6d35-4feb-8785-72dd1d39f9e4}</destination>
+        </relationship>
+        <relationship name="markerTrack">
+            <destination>{b9305bb7-5c47-4c47-a83e-d21acd8ea659}</destination>
+        </relationship>
+    </object>
+    <object class="MixerBusEffectChain" id="{c5a18e7d-f413-4e38-85e4-f9cb0cee9172}">
+        <relationship name="effects">
+            <destination>{a78fe94b-0eeb-4239-9188-1c89a67011c3}</destination>
+            <destination>{2f7e19fa-f8f8-4783-b19e-029bf94c9bc2}</destination>
+        </relationship>
+    </object>
+    <object class="MixerBusPanner" id="{c54bfc2b-9db7-4243-81a6-5458ed074dda}"/>
+    <object class="MixerBusFader" id="{a4bcef17-1b03-4a39-983d-78510ef1dd80}"/>
+    <object class="SingleSound" id="{5aa08a2a-6b3f-4974-8870-afe938dd6358}">
+        <relationship name="audioFile">
+            <destination>{3af94ac0-fc0d-4d4d-b78f-e0a8a5c6fdc5}</destination>
+        </relationship>
+    </object>
+    <object class="SingleSound" id="{7b10fb66-c2e2-4c38-a3b4-8f8cd65b7c9c}">
+        <relationship name="audioFile">
+            <destination>{cb9d108d-5891-42f0-aa51-85c5d30a06d8}</destination>
+        </relationship>
+    </object>
+    <object class="SingleSound" id="{057bef69-bebc-4a7a-9adc-975f7cea287c}">
+        <relationship name="audioFile">
+            <destination>{ae46332e-e218-48f0-a1d3-581dbfec953e}</destination>
+        </relationship>
+    </object>
+    <object class="SingleSound" id="{6b3fc826-4269-498a-a638-cab18e36295f}">
+        <relationship name="audioFile">
+            <destination>{cd92a3be-e8c1-4aef-870a-53de1e4a2620}</destination>
+        </relationship>
+    </object>
+    <object class="SingleSound" id="{22606bd2-deea-4cd9-8f89-0a1444a5200a}">
+        <relationship name="audioFile">
+            <destination>{b7cf3153-7d60-4a0a-bdd4-a354ec6c8993}</destination>
+        </relationship>
+    </object>
+    <object class="SingleSound" id="{1696b7e7-faaf-436e-b037-ab66f17718ab}">
+        <relationship name="audioFile">
+            <destination>{d36fc405-0bac-458f-b9c1-1bdb47d98177}</destination>
+        </relationship>
+    </object>
+    <object class="SingleSound" id="{644228d3-30eb-405b-abdd-e784d00269cc}">
+        <relationship name="audioFile">
+            <destination>{29f71484-f9b1-46e9-8a57-36225ff5b91e}</destination>
+        </relationship>
+    </object>
+    <object class="SingleSound" id="{305eed1e-38f6-4ce2-b657-ffac64ed4c16}">
+        <relationship name="audioFile">
+            <destination>{30490f9e-6bbf-4f91-9413-3bbbaffdfbc6}</destination>
+        </relationship>
+    </object>
+    <object class="SingleSound" id="{4c9b28cb-c4e5-46da-973f-f9fe7b9be8a6}">
+        <relationship name="audioFile">
+            <destination>{4d461ddc-3906-4ed0-b3dd-c179f0724fa3}</destination>
+        </relationship>
+    </object>
+    <object class="MixerBusEffectChain" id="{6c61f038-2097-43bf-8008-e9858c5e9d17}">
+        <relationship name="effects">
+            <destination>{2a5316f0-3b4f-41e9-b6f9-da90dad1bb89}</destination>
+        </relationship>
+    </object>
+    <object class="MixerBusPanner" id="{89fe8be6-8c31-429c-a4f1-187fedf62d36}"/>
+    <object class="MixerBusFader" id="{a78fe94b-0eeb-4239-9188-1c89a67011c3}"/>
+    <object class="SpatialiserEffect" id="{2f7e19fa-f8f8-4783-b19e-029bf94c9bc2}"/>
+    <object class="MixerBusFader" id="{2a5316f0-3b4f-41e9-b6f9-da90dad1bb89}"/>
+</objects>
diff --git a/FMODStudio/Chapter10/Metadata/Event/{78c9f142-4f5e-4320-b98f-1c7870c9b48d}.xml b/FMODStudio/Chapter10/Metadata/Event/{78c9f142-4f5e-4320-b98f-1c7870c9b48d}.xml
new file mode 100644
index 0000000000000000000000000000000000000000..bd1cd85fe5e605499f75a945b250159d3f3ebc9e
--- /dev/null
+++ b/FMODStudio/Chapter10/Metadata/Event/{78c9f142-4f5e-4320-b98f-1c7870c9b48d}.xml
@@ -0,0 +1,128 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<objects serializationModel="Studio.01.09.00">
+    <object class="Event" id="{78c9f142-4f5e-4320-b98f-1c7870c9b48d}">
+        <property name="name">
+            <value>Ding</value>
+        </property>
+        <property name="outputFormat">
+            <value>0</value>
+        </property>
+        <relationship name="folder">
+            <destination>{94ff31b1-83b7-438f-a0c7-6a5fdd8ccbe5}</destination>
+        </relationship>
+        <relationship name="mixer">
+            <destination>{823e816f-ef02-4d1e-8e67-0403fe2ba4e6}</destination>
+        </relationship>
+        <relationship name="masterTrack">
+            <destination>{93581cec-9c09-4f16-8bc4-47446a3f804a}</destination>
+        </relationship>
+        <relationship name="mixerInput">
+            <destination>{5f0bf0b7-def6-4073-bcee-860d90e50cd7}</destination>
+        </relationship>
+        <relationship name="automatableProperties">
+            <destination>{64ed6413-cda8-4fe9-8f1f-2bb8b27cbebd}</destination>
+        </relationship>
+        <relationship name="markerTracks">
+            <destination>{77a5b55e-2148-4dd1-ae60-b200eadd1698}</destination>
+        </relationship>
+        <relationship name="groupTracks">
+            <destination>{b64aff34-70ca-495a-8a31-65a29638c8b9}</destination>
+        </relationship>
+        <relationship name="timeline">
+            <destination>{10de6407-ddfb-4bf5-93fd-785cab0b91fe}</destination>
+        </relationship>
+        <relationship name="banks">
+            <destination>{1de7b457-2173-4205-b8b6-7583e593ccd6}</destination>
+        </relationship>
+    </object>
+    <object class="EventMixer" id="{823e816f-ef02-4d1e-8e67-0403fe2ba4e6}">
+        <relationship name="masterBus">
+            <destination>{12f61a39-9573-46bc-822c-73144aa2893d}</destination>
+        </relationship>
+    </object>
+    <object class="MasterTrack" id="{93581cec-9c09-4f16-8bc4-47446a3f804a}">
+        <relationship name="mixerGroup">
+            <destination>{12f61a39-9573-46bc-822c-73144aa2893d}</destination>
+        </relationship>
+    </object>
+    <object class="MixerInput" id="{5f0bf0b7-def6-4073-bcee-860d90e50cd7}">
+        <relationship name="effectChain">
+            <destination>{0a4b7e7c-0bdd-49f2-a670-15ba5f2aa11d}</destination>
+        </relationship>
+        <relationship name="panner">
+            <destination>{c10dd396-5670-4308-b64c-e46610c1ac97}</destination>
+        </relationship>
+        <relationship name="output">
+            <destination>{2f8936ee-464a-439f-87b1-fd6ef863df53}</destination>
+        </relationship>
+    </object>
+    <object class="EventAutomatableProperties" id="{64ed6413-cda8-4fe9-8f1f-2bb8b27cbebd}"/>
+    <object class="MarkerTrack" id="{77a5b55e-2148-4dd1-ae60-b200eadd1698}"/>
+    <object class="GroupTrack" id="{b64aff34-70ca-495a-8a31-65a29638c8b9}">
+        <relationship name="modules">
+            <destination>{ac3b6abf-ccdf-4b8a-b1ea-4e8d23dc1f99}</destination>
+        </relationship>
+        <relationship name="mixerGroup">
+            <destination>{859170fc-04a4-49bb-a956-2946bad25f02}</destination>
+        </relationship>
+    </object>
+    <object class="Timeline" id="{10de6407-ddfb-4bf5-93fd-785cab0b91fe}">
+        <relationship name="modules">
+            <destination>{ac3b6abf-ccdf-4b8a-b1ea-4e8d23dc1f99}</destination>
+        </relationship>
+    </object>
+    <object class="EventMixerMaster" id="{12f61a39-9573-46bc-822c-73144aa2893d}">
+        <relationship name="effectChain">
+            <destination>{3ee61cb3-08de-4fc4-b7d7-fbfa1d36878f}</destination>
+        </relationship>
+        <relationship name="panner">
+            <destination>{de9855b6-b361-4d0d-9e45-65c11b2c2837}</destination>
+        </relationship>
+        <relationship name="mixer">
+            <destination>{823e816f-ef02-4d1e-8e67-0403fe2ba4e6}</destination>
+        </relationship>
+    </object>
+    <object class="MixerBusEffectChain" id="{0a4b7e7c-0bdd-49f2-a670-15ba5f2aa11d}">
+        <relationship name="effects">
+            <destination>{3c053c0b-dd4b-468e-a6ac-e18457d464f3}</destination>
+        </relationship>
+    </object>
+    <object class="MixerBusPanner" id="{c10dd396-5670-4308-b64c-e46610c1ac97}"/>
+    <object class="SingleSound" id="{ac3b6abf-ccdf-4b8a-b1ea-4e8d23dc1f99}">
+        <property name="length">
+            <value>1.1029374999999999</value>
+        </property>
+        <relationship name="audioFile">
+            <destination>{124f51bb-6dfc-48fd-ad05-b9e44fdfd68d}</destination>
+        </relationship>
+    </object>
+    <object class="EventMixerGroup" id="{859170fc-04a4-49bb-a956-2946bad25f02}">
+        <property name="name">
+            <value>Audio 1</value>
+        </property>
+        <relationship name="effectChain">
+            <destination>{85dfe3bc-4a52-4439-817e-cfbf07595d88}</destination>
+        </relationship>
+        <relationship name="panner">
+            <destination>{0c4c4955-eb39-4286-a691-61ecf571682f}</destination>
+        </relationship>
+        <relationship name="output">
+            <destination>{12f61a39-9573-46bc-822c-73144aa2893d}</destination>
+        </relationship>
+    </object>
+    <object class="MixerBusEffectChain" id="{3ee61cb3-08de-4fc4-b7d7-fbfa1d36878f}">
+        <relationship name="effects">
+            <destination>{117e1fed-744b-4040-8054-4f39b7b95929}</destination>
+        </relationship>
+    </object>
+    <object class="MixerBusPanner" id="{de9855b6-b361-4d0d-9e45-65c11b2c2837}"/>
+    <object class="MixerBusFader" id="{3c053c0b-dd4b-468e-a6ac-e18457d464f3}"/>
+    <object class="MixerBusEffectChain" id="{85dfe3bc-4a52-4439-817e-cfbf07595d88}">
+        <relationship name="effects">
+            <destination>{e2c46038-2c98-45cf-b1c4-76cd7838a044}</destination>
+        </relationship>
+    </object>
+    <object class="MixerBusPanner" id="{0c4c4955-eb39-4286-a691-61ecf571682f}"/>
+    <object class="MixerBusFader" id="{117e1fed-744b-4040-8054-4f39b7b95929}"/>
+    <object class="MixerBusFader" id="{e2c46038-2c98-45cf-b1c4-76cd7838a044}"/>
+</objects>
diff --git a/FMODStudio/Chapter10/Metadata/Event/{8b09005b-94f1-42b6-94e0-2d2da4d59fd0}.xml b/FMODStudio/Chapter10/Metadata/Event/{8b09005b-94f1-42b6-94e0-2d2da4d59fd0}.xml
new file mode 100644
index 0000000000000000000000000000000000000000..f53a57ffebc1c7512b7bc13c1e88930e49f32c93
--- /dev/null
+++ b/FMODStudio/Chapter10/Metadata/Event/{8b09005b-94f1-42b6-94e0-2d2da4d59fd0}.xml
@@ -0,0 +1,149 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<objects serializationModel="Studio.01.09.00">
+    <object class="Event" id="{8b09005b-94f1-42b6-94e0-2d2da4d59fd0}">
+        <property name="name">
+            <value>Music</value>
+        </property>
+        <property name="outputFormat">
+            <value>1</value>
+        </property>
+        <relationship name="folder">
+            <destination>{94ff31b1-83b7-438f-a0c7-6a5fdd8ccbe5}</destination>
+        </relationship>
+        <relationship name="mixer">
+            <destination>{652ae7e8-15f7-4c27-b39b-1d5c449ec129}</destination>
+        </relationship>
+        <relationship name="masterTrack">
+            <destination>{b5d354bb-76ab-45cf-80d9-fd9a3a9e2bee}</destination>
+        </relationship>
+        <relationship name="mixerInput">
+            <destination>{2845a836-dd4a-4d11-a2b5-e3e0ec19d966}</destination>
+        </relationship>
+        <relationship name="automatableProperties">
+            <destination>{c24fb5a4-242c-4412-887a-f01127b56449}</destination>
+        </relationship>
+        <relationship name="markerTracks">
+            <destination>{2c9ab12d-8f90-4fb8-94a9-7c767ff5120e}</destination>
+        </relationship>
+        <relationship name="groupTracks">
+            <destination>{42b4ccd8-6d27-47b6-955b-8352c4718461}</destination>
+        </relationship>
+        <relationship name="timeline">
+            <destination>{95587d04-c275-449d-b518-bdd25bd9b4ad}</destination>
+        </relationship>
+        <relationship name="banks">
+            <destination>{1de7b457-2173-4205-b8b6-7583e593ccd6}</destination>
+        </relationship>
+    </object>
+    <object class="EventMixer" id="{652ae7e8-15f7-4c27-b39b-1d5c449ec129}">
+        <relationship name="masterBus">
+            <destination>{13deaf11-8357-46f5-8ec9-913dceeb7fa4}</destination>
+        </relationship>
+    </object>
+    <object class="MasterTrack" id="{b5d354bb-76ab-45cf-80d9-fd9a3a9e2bee}">
+        <relationship name="mixerGroup">
+            <destination>{13deaf11-8357-46f5-8ec9-913dceeb7fa4}</destination>
+        </relationship>
+    </object>
+    <object class="MixerInput" id="{2845a836-dd4a-4d11-a2b5-e3e0ec19d966}">
+        <relationship name="effectChain">
+            <destination>{5b3b422e-6f12-454c-9723-88b2fdb5aa84}</destination>
+        </relationship>
+        <relationship name="panner">
+            <destination>{8151b2c2-923f-445d-9d3a-1cc6430a7400}</destination>
+        </relationship>
+        <relationship name="output">
+            <destination>{76ef365d-f7b5-4307-94f2-d4ac2facaad5}</destination>
+        </relationship>
+    </object>
+    <object class="EventAutomatableProperties" id="{c24fb5a4-242c-4412-887a-f01127b56449}">
+        <property name="maxVoices">
+            <value>1</value>
+        </property>
+    </object>
+    <object class="MarkerTrack" id="{2c9ab12d-8f90-4fb8-94a9-7c767ff5120e}"/>
+    <object class="GroupTrack" id="{42b4ccd8-6d27-47b6-955b-8352c4718461}">
+        <relationship name="modules">
+            <destination>{bb0d2e20-4222-4fda-bd99-8750712452cd}</destination>
+        </relationship>
+        <relationship name="mixerGroup">
+            <destination>{f846effe-4954-457b-aede-6af0b4d6134d}</destination>
+        </relationship>
+    </object>
+    <object class="Timeline" id="{95587d04-c275-449d-b518-bdd25bd9b4ad}">
+        <relationship name="modules">
+            <destination>{bb0d2e20-4222-4fda-bd99-8750712452cd}</destination>
+        </relationship>
+        <relationship name="markers">
+            <destination>{882b9711-3d4f-486e-b3d4-24aa7276dab7}</destination>
+        </relationship>
+    </object>
+    <object class="EventMixerMaster" id="{13deaf11-8357-46f5-8ec9-913dceeb7fa4}">
+        <relationship name="effectChain">
+            <destination>{0f7b50c9-9036-4693-9b10-982ad43cb42e}</destination>
+        </relationship>
+        <relationship name="panner">
+            <destination>{34dbfcda-d83f-429a-ad6f-344394794ed5}</destination>
+        </relationship>
+        <relationship name="mixer">
+            <destination>{652ae7e8-15f7-4c27-b39b-1d5c449ec129}</destination>
+        </relationship>
+    </object>
+    <object class="MixerBusEffectChain" id="{5b3b422e-6f12-454c-9723-88b2fdb5aa84}">
+        <relationship name="effects">
+            <destination>{45ae97a9-da0d-45f3-973d-e8191b0df725}</destination>
+        </relationship>
+    </object>
+    <object class="MixerBusPanner" id="{8151b2c2-923f-445d-9d3a-1cc6430a7400}"/>
+    <object class="SingleSound" id="{bb0d2e20-4222-4fda-bd99-8750712452cd}">
+        <property name="length">
+            <value>242.00417233560091</value>
+        </property>
+        <relationship name="audioFile">
+            <destination>{dce2073c-8d73-442b-a9ae-1ed541ed7de1}</destination>
+        </relationship>
+    </object>
+    <object class="EventMixerGroup" id="{f846effe-4954-457b-aede-6af0b4d6134d}">
+        <property name="name">
+            <value>Audio 1</value>
+        </property>
+        <relationship name="effectChain">
+            <destination>{1f0bb221-045c-44f3-9630-81620b58a46f}</destination>
+        </relationship>
+        <relationship name="panner">
+            <destination>{f7ea7221-630d-4489-90ae-fe4b294fbe38}</destination>
+        </relationship>
+        <relationship name="output">
+            <destination>{13deaf11-8357-46f5-8ec9-913dceeb7fa4}</destination>
+        </relationship>
+    </object>
+    <object class="LoopRegion" id="{882b9711-3d4f-486e-b3d4-24aa7276dab7}">
+        <property name="position">
+            <value>0</value>
+        </property>
+        <property name="length">
+            <value>242.00417233560091</value>
+        </property>
+        <relationship name="timeline">
+            <destination>{95587d04-c275-449d-b518-bdd25bd9b4ad}</destination>
+        </relationship>
+        <relationship name="markerTrack">
+            <destination>{2c9ab12d-8f90-4fb8-94a9-7c767ff5120e}</destination>
+        </relationship>
+    </object>
+    <object class="MixerBusEffectChain" id="{0f7b50c9-9036-4693-9b10-982ad43cb42e}">
+        <relationship name="effects">
+            <destination>{fc06cce3-1e26-4354-a470-75f0126167b6}</destination>
+        </relationship>
+    </object>
+    <object class="MixerBusPanner" id="{34dbfcda-d83f-429a-ad6f-344394794ed5}"/>
+    <object class="MixerBusFader" id="{45ae97a9-da0d-45f3-973d-e8191b0df725}"/>
+    <object class="MixerBusEffectChain" id="{1f0bb221-045c-44f3-9630-81620b58a46f}">
+        <relationship name="effects">
+            <destination>{68a2a3fb-0579-45c6-ba8c-6ad9ac1bff7c}</destination>
+        </relationship>
+    </object>
+    <object class="MixerBusPanner" id="{f7ea7221-630d-4489-90ae-fe4b294fbe38}"/>
+    <object class="MixerBusFader" id="{fc06cce3-1e26-4354-a470-75f0126167b6}"/>
+    <object class="MixerBusFader" id="{68a2a3fb-0579-45c6-ba8c-6ad9ac1bff7c}"/>
+</objects>
diff --git a/FMODStudio/Chapter10/Metadata/Event/{9a386bbd-0755-45a8-902d-4b494810b74e}.xml b/FMODStudio/Chapter10/Metadata/Event/{9a386bbd-0755-45a8-902d-4b494810b74e}.xml
new file mode 100644
index 0000000000000000000000000000000000000000..f96c9669dbc3966d8210fed755d707a451db2407
--- /dev/null
+++ b/FMODStudio/Chapter10/Metadata/Event/{9a386bbd-0755-45a8-902d-4b494810b74e}.xml
@@ -0,0 +1,133 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<objects serializationModel="Studio.01.09.00">
+    <object class="Event" id="{9a386bbd-0755-45a8-902d-4b494810b74e}">
+        <property name="name">
+            <value>Shot</value>
+        </property>
+        <property name="outputFormat">
+            <value>2</value>
+        </property>
+        <relationship name="folder">
+            <destination>{94ff31b1-83b7-438f-a0c7-6a5fdd8ccbe5}</destination>
+        </relationship>
+        <relationship name="mixer">
+            <destination>{54ac31c1-e7ac-457a-a526-3a0c7438a81a}</destination>
+        </relationship>
+        <relationship name="masterTrack">
+            <destination>{6a57e3c1-29d6-47df-879f-87966e416a34}</destination>
+        </relationship>
+        <relationship name="mixerInput">
+            <destination>{71c91ded-b814-4c31-9be5-4cdd4f85c371}</destination>
+        </relationship>
+        <relationship name="automatableProperties">
+            <destination>{1f51d393-ca48-4d6d-b663-d2e898c39ef3}</destination>
+        </relationship>
+        <relationship name="markerTracks">
+            <destination>{443f69b6-92bd-4674-856b-a06e687181d0}</destination>
+        </relationship>
+        <relationship name="groupTracks">
+            <destination>{713bb66c-4bdc-4eff-af68-daaae2ddb0b6}</destination>
+        </relationship>
+        <relationship name="timeline">
+            <destination>{c8d68b68-300a-46fe-97a5-a9998e0840f3}</destination>
+        </relationship>
+        <relationship name="banks">
+            <destination>{1de7b457-2173-4205-b8b6-7583e593ccd6}</destination>
+        </relationship>
+    </object>
+    <object class="EventMixer" id="{54ac31c1-e7ac-457a-a526-3a0c7438a81a}">
+        <relationship name="masterBus">
+            <destination>{d4f433b0-462c-4d44-9ac0-bb454a6b9435}</destination>
+        </relationship>
+    </object>
+    <object class="MasterTrack" id="{6a57e3c1-29d6-47df-879f-87966e416a34}">
+        <relationship name="mixerGroup">
+            <destination>{d4f433b0-462c-4d44-9ac0-bb454a6b9435}</destination>
+        </relationship>
+    </object>
+    <object class="MixerInput" id="{71c91ded-b814-4c31-9be5-4cdd4f85c371}">
+        <relationship name="effectChain">
+            <destination>{b50d2f84-ae0b-47f4-9ae5-20bdbf2372c3}</destination>
+        </relationship>
+        <relationship name="panner">
+            <destination>{174af3e7-8ccd-4920-9a9a-f9d734f4367e}</destination>
+        </relationship>
+        <relationship name="output">
+            <destination>{2f8936ee-464a-439f-87b1-fd6ef863df53}</destination>
+        </relationship>
+    </object>
+    <object class="EventAutomatableProperties" id="{1f51d393-ca48-4d6d-b663-d2e898c39ef3}"/>
+    <object class="MarkerTrack" id="{443f69b6-92bd-4674-856b-a06e687181d0}"/>
+    <object class="GroupTrack" id="{713bb66c-4bdc-4eff-af68-daaae2ddb0b6}">
+        <relationship name="modules">
+            <destination>{b05dcf32-77e6-4c0a-aa4a-98d5bbd68d85}</destination>
+        </relationship>
+        <relationship name="mixerGroup">
+            <destination>{f99afe23-34f7-4a1a-beb6-477cf4ec7b72}</destination>
+        </relationship>
+    </object>
+    <object class="Timeline" id="{c8d68b68-300a-46fe-97a5-a9998e0840f3}">
+        <relationship name="modules">
+            <destination>{b05dcf32-77e6-4c0a-aa4a-98d5bbd68d85}</destination>
+        </relationship>
+    </object>
+    <object class="EventMixerMaster" id="{d4f433b0-462c-4d44-9ac0-bb454a6b9435}">
+        <relationship name="effectChain">
+            <destination>{2d91eb08-3c78-43fb-9c9f-b265bafd1703}</destination>
+        </relationship>
+        <relationship name="panner">
+            <destination>{0c0f6e02-5776-4fd3-a1a1-f1f9f666de34}</destination>
+        </relationship>
+        <relationship name="mixer">
+            <destination>{54ac31c1-e7ac-457a-a526-3a0c7438a81a}</destination>
+        </relationship>
+    </object>
+    <object class="MixerBusEffectChain" id="{b50d2f84-ae0b-47f4-9ae5-20bdbf2372c3}">
+        <relationship name="effects">
+            <destination>{e67f829e-12f5-4cae-9e86-16eb9e04b7ce}</destination>
+        </relationship>
+    </object>
+    <object class="MixerBusPanner" id="{174af3e7-8ccd-4920-9a9a-f9d734f4367e}"/>
+    <object class="SingleSound" id="{b05dcf32-77e6-4c0a-aa4a-98d5bbd68d85}">
+        <property name="length">
+            <value>0.54213151927437642</value>
+        </property>
+        <property name="volume">
+            <value>-3</value>
+        </property>
+        <relationship name="audioFile">
+            <destination>{e1063182-c444-4207-b774-b722ece392ce}</destination>
+        </relationship>
+    </object>
+    <object class="EventMixerGroup" id="{f99afe23-34f7-4a1a-beb6-477cf4ec7b72}">
+        <property name="name">
+            <value>Audio 1</value>
+        </property>
+        <relationship name="effectChain">
+            <destination>{1ce4a228-9890-4e3c-9d9b-4fc6f797aca4}</destination>
+        </relationship>
+        <relationship name="panner">
+            <destination>{a125274a-4a78-4171-a93d-a10ea6ca6283}</destination>
+        </relationship>
+        <relationship name="output">
+            <destination>{d4f433b0-462c-4d44-9ac0-bb454a6b9435}</destination>
+        </relationship>
+    </object>
+    <object class="MixerBusEffectChain" id="{2d91eb08-3c78-43fb-9c9f-b265bafd1703}">
+        <relationship name="effects">
+            <destination>{1c09cd15-7fd4-46ab-b60d-8bcd701b47e6}</destination>
+            <destination>{35369419-3592-4bcd-8415-7739faf5f423}</destination>
+        </relationship>
+    </object>
+    <object class="MixerBusPanner" id="{0c0f6e02-5776-4fd3-a1a1-f1f9f666de34}"/>
+    <object class="MixerBusFader" id="{e67f829e-12f5-4cae-9e86-16eb9e04b7ce}"/>
+    <object class="MixerBusEffectChain" id="{1ce4a228-9890-4e3c-9d9b-4fc6f797aca4}">
+        <relationship name="effects">
+            <destination>{c6347975-4e75-4660-a9c8-0a06753e7105}</destination>
+        </relationship>
+    </object>
+    <object class="MixerBusPanner" id="{a125274a-4a78-4171-a93d-a10ea6ca6283}"/>
+    <object class="MixerBusFader" id="{1c09cd15-7fd4-46ab-b60d-8bcd701b47e6}"/>
+    <object class="SpatialiserEffect" id="{35369419-3592-4bcd-8415-7739faf5f423}"/>
+    <object class="MixerBusFader" id="{c6347975-4e75-4660-a9c8-0a06753e7105}"/>
+</objects>
diff --git a/FMODStudio/Chapter10/Metadata/Event/{a32c33d9-06f7-4dda-ad05-ca17ae0f080a}.xml b/FMODStudio/Chapter10/Metadata/Event/{a32c33d9-06f7-4dda-ad05-ca17ae0f080a}.xml
new file mode 100644
index 0000000000000000000000000000000000000000..366e90b427e8679dd0f403f3d7bc2a78d61bca9f
--- /dev/null
+++ b/FMODStudio/Chapter10/Metadata/Event/{a32c33d9-06f7-4dda-ad05-ca17ae0f080a}.xml
@@ -0,0 +1,128 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<objects serializationModel="Studio.01.09.00">
+    <object class="Event" id="{a32c33d9-06f7-4dda-ad05-ca17ae0f080a}">
+        <property name="name">
+            <value>Explosion2D</value>
+        </property>
+        <property name="outputFormat">
+            <value>0</value>
+        </property>
+        <relationship name="folder">
+            <destination>{94ff31b1-83b7-438f-a0c7-6a5fdd8ccbe5}</destination>
+        </relationship>
+        <relationship name="mixer">
+            <destination>{0c200fe8-ef03-41b2-a33e-f329ea70fa49}</destination>
+        </relationship>
+        <relationship name="masterTrack">
+            <destination>{5a576b5d-12f5-4fbf-b629-599050f183fd}</destination>
+        </relationship>
+        <relationship name="mixerInput">
+            <destination>{2a4c8bdc-1196-4954-a2a1-5898510d6bdf}</destination>
+        </relationship>
+        <relationship name="automatableProperties">
+            <destination>{10e583b7-75cc-4612-880c-5693be1465ec}</destination>
+        </relationship>
+        <relationship name="markerTracks">
+            <destination>{d0f8d6d6-d8de-48a0-8a19-c30a1c98a9b6}</destination>
+        </relationship>
+        <relationship name="groupTracks">
+            <destination>{276c7461-c265-487b-bff8-e7efcffa34c3}</destination>
+        </relationship>
+        <relationship name="timeline">
+            <destination>{fe779d63-2f9d-434f-9b16-f439515b3588}</destination>
+        </relationship>
+        <relationship name="banks">
+            <destination>{1de7b457-2173-4205-b8b6-7583e593ccd6}</destination>
+        </relationship>
+    </object>
+    <object class="EventMixer" id="{0c200fe8-ef03-41b2-a33e-f329ea70fa49}">
+        <relationship name="masterBus">
+            <destination>{f74471e8-1bd6-4cbb-9a5b-96a03303bad7}</destination>
+        </relationship>
+    </object>
+    <object class="MasterTrack" id="{5a576b5d-12f5-4fbf-b629-599050f183fd}">
+        <relationship name="mixerGroup">
+            <destination>{f74471e8-1bd6-4cbb-9a5b-96a03303bad7}</destination>
+        </relationship>
+    </object>
+    <object class="MixerInput" id="{2a4c8bdc-1196-4954-a2a1-5898510d6bdf}">
+        <relationship name="effectChain">
+            <destination>{c159b6c4-a2a1-4c5d-9fce-52e3e21725ec}</destination>
+        </relationship>
+        <relationship name="panner">
+            <destination>{785f6a4b-fae5-4f10-9a6e-dd62f6db7150}</destination>
+        </relationship>
+        <relationship name="output">
+            <destination>{2f8936ee-464a-439f-87b1-fd6ef863df53}</destination>
+        </relationship>
+    </object>
+    <object class="EventAutomatableProperties" id="{10e583b7-75cc-4612-880c-5693be1465ec}"/>
+    <object class="MarkerTrack" id="{d0f8d6d6-d8de-48a0-8a19-c30a1c98a9b6}"/>
+    <object class="GroupTrack" id="{276c7461-c265-487b-bff8-e7efcffa34c3}">
+        <relationship name="modules">
+            <destination>{05685d82-5fb6-43e2-9d32-008e5ac9cbbd}</destination>
+        </relationship>
+        <relationship name="mixerGroup">
+            <destination>{b894c117-c8bb-45d0-945c-241b252db332}</destination>
+        </relationship>
+    </object>
+    <object class="Timeline" id="{fe779d63-2f9d-434f-9b16-f439515b3588}">
+        <relationship name="modules">
+            <destination>{05685d82-5fb6-43e2-9d32-008e5ac9cbbd}</destination>
+        </relationship>
+    </object>
+    <object class="EventMixerMaster" id="{f74471e8-1bd6-4cbb-9a5b-96a03303bad7}">
+        <relationship name="effectChain">
+            <destination>{f5c90c8c-b038-4b9f-a0fc-8f3ac1431492}</destination>
+        </relationship>
+        <relationship name="panner">
+            <destination>{01a5cbcb-8140-403e-b030-6f358dd29798}</destination>
+        </relationship>
+        <relationship name="mixer">
+            <destination>{0c200fe8-ef03-41b2-a33e-f329ea70fa49}</destination>
+        </relationship>
+    </object>
+    <object class="MixerBusEffectChain" id="{c159b6c4-a2a1-4c5d-9fce-52e3e21725ec}">
+        <relationship name="effects">
+            <destination>{0c25f735-02f9-43f2-9e96-93a6efcbc942}</destination>
+        </relationship>
+    </object>
+    <object class="MixerBusPanner" id="{785f6a4b-fae5-4f10-9a6e-dd62f6db7150}"/>
+    <object class="SingleSound" id="{05685d82-5fb6-43e2-9d32-008e5ac9cbbd}">
+        <property name="length">
+            <value>1.3077812499999999</value>
+        </property>
+        <relationship name="audioFile">
+            <destination>{9b9edf48-2e21-4cbc-a4e0-d6d3410e0765}</destination>
+        </relationship>
+    </object>
+    <object class="EventMixerGroup" id="{b894c117-c8bb-45d0-945c-241b252db332}">
+        <property name="name">
+            <value>Audio 1</value>
+        </property>
+        <relationship name="effectChain">
+            <destination>{de1180ca-a608-424e-99e5-c5530494be4c}</destination>
+        </relationship>
+        <relationship name="panner">
+            <destination>{e645a15f-ace5-43dc-ac2f-e18066bce918}</destination>
+        </relationship>
+        <relationship name="output">
+            <destination>{f74471e8-1bd6-4cbb-9a5b-96a03303bad7}</destination>
+        </relationship>
+    </object>
+    <object class="MixerBusEffectChain" id="{f5c90c8c-b038-4b9f-a0fc-8f3ac1431492}">
+        <relationship name="effects">
+            <destination>{63b9b54c-7869-4b3f-a7fe-6a4319b98415}</destination>
+        </relationship>
+    </object>
+    <object class="MixerBusPanner" id="{01a5cbcb-8140-403e-b030-6f358dd29798}"/>
+    <object class="MixerBusFader" id="{0c25f735-02f9-43f2-9e96-93a6efcbc942}"/>
+    <object class="MixerBusEffectChain" id="{de1180ca-a608-424e-99e5-c5530494be4c}">
+        <relationship name="effects">
+            <destination>{02d36313-1557-497b-a362-f2785779ed3b}</destination>
+        </relationship>
+    </object>
+    <object class="MixerBusPanner" id="{e645a15f-ace5-43dc-ac2f-e18066bce918}"/>
+    <object class="MixerBusFader" id="{63b9b54c-7869-4b3f-a7fe-6a4319b98415}"/>
+    <object class="MixerBusFader" id="{02d36313-1557-497b-a362-f2785779ed3b}"/>
+</objects>
diff --git a/FMODStudio/Chapter10/Metadata/Event/{d0bd18e0-a471-46d7-98b4-c6255d379c57}.xml b/FMODStudio/Chapter10/Metadata/Event/{d0bd18e0-a471-46d7-98b4-c6255d379c57}.xml
new file mode 100644
index 0000000000000000000000000000000000000000..372b8e79569220a547c7aadf1c01da9167491b8d
--- /dev/null
+++ b/FMODStudio/Chapter10/Metadata/Event/{d0bd18e0-a471-46d7-98b4-c6255d379c57}.xml
@@ -0,0 +1,154 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<objects serializationModel="Studio.01.09.00">
+    <object class="Event" id="{d0bd18e0-a471-46d7-98b4-c6255d379c57}">
+        <property name="name">
+            <value>FireLoop</value>
+        </property>
+        <property name="outputFormat">
+            <value>2</value>
+        </property>
+        <relationship name="folder">
+            <destination>{94ff31b1-83b7-438f-a0c7-6a5fdd8ccbe5}</destination>
+        </relationship>
+        <relationship name="mixer">
+            <destination>{43ccff50-76bb-42ec-a323-1b1fadd93acd}</destination>
+        </relationship>
+        <relationship name="masterTrack">
+            <destination>{4b29d8d2-8590-4d74-93d9-667d16b6e64b}</destination>
+        </relationship>
+        <relationship name="mixerInput">
+            <destination>{43769adb-5da4-4782-a4fd-bb99c1bf16ab}</destination>
+        </relationship>
+        <relationship name="automatableProperties">
+            <destination>{f4ccddc0-edf3-407e-811e-aa81420df867}</destination>
+        </relationship>
+        <relationship name="markerTracks">
+            <destination>{d5d6e79d-d429-411f-beea-458acbad084d}</destination>
+        </relationship>
+        <relationship name="groupTracks">
+            <destination>{a7b7130f-b2e8-4d76-beb5-1e8f0d61f998}</destination>
+        </relationship>
+        <relationship name="timeline">
+            <destination>{b4607d8b-4038-4022-8a70-f663251bd602}</destination>
+        </relationship>
+        <relationship name="banks">
+            <destination>{1de7b457-2173-4205-b8b6-7583e593ccd6}</destination>
+        </relationship>
+    </object>
+    <object class="EventMixer" id="{43ccff50-76bb-42ec-a323-1b1fadd93acd}">
+        <relationship name="masterBus">
+            <destination>{167a6239-d50b-4574-8866-ca3ec901d7cc}</destination>
+        </relationship>
+    </object>
+    <object class="MasterTrack" id="{4b29d8d2-8590-4d74-93d9-667d16b6e64b}">
+        <relationship name="mixerGroup">
+            <destination>{167a6239-d50b-4574-8866-ca3ec901d7cc}</destination>
+        </relationship>
+    </object>
+    <object class="MixerInput" id="{43769adb-5da4-4782-a4fd-bb99c1bf16ab}">
+        <relationship name="effectChain">
+            <destination>{d6bac136-0d1f-4e55-866f-15a62cfc64ce}</destination>
+        </relationship>
+        <relationship name="panner">
+            <destination>{004f404c-6b97-4d73-986b-a1d7c2011782}</destination>
+        </relationship>
+        <relationship name="output">
+            <destination>{2f8936ee-464a-439f-87b1-fd6ef863df53}</destination>
+        </relationship>
+    </object>
+    <object class="EventAutomatableProperties" id="{f4ccddc0-edf3-407e-811e-aa81420df867}"/>
+    <object class="MarkerTrack" id="{d5d6e79d-d429-411f-beea-458acbad084d}"/>
+    <object class="GroupTrack" id="{a7b7130f-b2e8-4d76-beb5-1e8f0d61f998}">
+        <relationship name="modules">
+            <destination>{0b222f59-3adb-4f3a-8f1a-327ac8453859}</destination>
+        </relationship>
+        <relationship name="mixerGroup">
+            <destination>{ddfbcfb1-6025-414d-9954-7c0cd74bf455}</destination>
+        </relationship>
+    </object>
+    <object class="Timeline" id="{b4607d8b-4038-4022-8a70-f663251bd602}">
+        <relationship name="modules">
+            <destination>{0b222f59-3adb-4f3a-8f1a-327ac8453859}</destination>
+        </relationship>
+        <relationship name="markers">
+            <destination>{260658cb-ea39-48ba-b9ee-b3abfb6fb510}</destination>
+        </relationship>
+    </object>
+    <object class="EventMixerMaster" id="{167a6239-d50b-4574-8866-ca3ec901d7cc}">
+        <relationship name="effectChain">
+            <destination>{2a0c1f15-0452-4f46-b7e5-6488bb760951}</destination>
+        </relationship>
+        <relationship name="panner">
+            <destination>{d0441bf1-97be-4ddf-8e1c-288fd8b895c5}</destination>
+        </relationship>
+        <relationship name="mixer">
+            <destination>{43ccff50-76bb-42ec-a323-1b1fadd93acd}</destination>
+        </relationship>
+    </object>
+    <object class="MixerBusEffectChain" id="{d6bac136-0d1f-4e55-866f-15a62cfc64ce}">
+        <relationship name="effects">
+            <destination>{3047f345-1131-41f9-8c16-e3cf4461acc0}</destination>
+        </relationship>
+    </object>
+    <object class="MixerBusPanner" id="{004f404c-6b97-4d73-986b-a1d7c2011782}"/>
+    <object class="SingleSound" id="{0b222f59-3adb-4f3a-8f1a-327ac8453859}">
+        <property name="length">
+            <value>12</value>
+        </property>
+        <relationship name="audioFile">
+            <destination>{d0d48d00-9bc7-4dc5-96cf-5a0ce45ac0de}</destination>
+        </relationship>
+    </object>
+    <object class="EventMixerGroup" id="{ddfbcfb1-6025-414d-9954-7c0cd74bf455}">
+        <property name="name">
+            <value>Audio 1</value>
+        </property>
+        <relationship name="effectChain">
+            <destination>{dcbbeea6-daf6-4b5c-b5f9-9f8051c47161}</destination>
+        </relationship>
+        <relationship name="panner">
+            <destination>{fe4008bd-4375-44dc-997c-b5baaf862bcf}</destination>
+        </relationship>
+        <relationship name="output">
+            <destination>{167a6239-d50b-4574-8866-ca3ec901d7cc}</destination>
+        </relationship>
+    </object>
+    <object class="LoopRegion" id="{260658cb-ea39-48ba-b9ee-b3abfb6fb510}">
+        <property name="position">
+            <value>0</value>
+        </property>
+        <property name="length">
+            <value>12</value>
+        </property>
+        <relationship name="timeline">
+            <destination>{b4607d8b-4038-4022-8a70-f663251bd602}</destination>
+        </relationship>
+        <relationship name="markerTrack">
+            <destination>{d5d6e79d-d429-411f-beea-458acbad084d}</destination>
+        </relationship>
+    </object>
+    <object class="MixerBusEffectChain" id="{2a0c1f15-0452-4f46-b7e5-6488bb760951}">
+        <relationship name="effects">
+            <destination>{e1dd9176-d7ed-47e4-9dba-429d284c834a}</destination>
+            <destination>{4b38af07-b95f-4ced-ad3f-a30779a19fbe}</destination>
+        </relationship>
+    </object>
+    <object class="MixerBusPanner" id="{d0441bf1-97be-4ddf-8e1c-288fd8b895c5}"/>
+    <object class="MixerBusFader" id="{3047f345-1131-41f9-8c16-e3cf4461acc0}"/>
+    <object class="MixerBusEffectChain" id="{dcbbeea6-daf6-4b5c-b5f9-9f8051c47161}">
+        <relationship name="effects">
+            <destination>{faab69b2-7388-45d4-a359-fcc1b75e1941}</destination>
+        </relationship>
+    </object>
+    <object class="MixerBusPanner" id="{fe4008bd-4375-44dc-997c-b5baaf862bcf}"/>
+    <object class="MixerBusFader" id="{e1dd9176-d7ed-47e4-9dba-429d284c834a}"/>
+    <object class="SpatialiserEffect" id="{4b38af07-b95f-4ced-ad3f-a30779a19fbe}">
+        <property name="minimumDistance">
+            <value>10</value>
+        </property>
+        <property name="maximumDistance">
+            <value>500</value>
+        </property>
+    </object>
+    <object class="MixerBusFader" id="{faab69b2-7388-45d4-a359-fcc1b75e1941}"/>
+</objects>
diff --git a/FMODStudio/Chapter10/Metadata/EventFolder/{94ff31b1-83b7-438f-a0c7-6a5fdd8ccbe5}.xml b/FMODStudio/Chapter10/Metadata/EventFolder/{94ff31b1-83b7-438f-a0c7-6a5fdd8ccbe5}.xml
new file mode 100644
index 0000000000000000000000000000000000000000..ef49e5f2827f357f8e96daea36b23b70b4b4b532
--- /dev/null
+++ b/FMODStudio/Chapter10/Metadata/EventFolder/{94ff31b1-83b7-438f-a0c7-6a5fdd8ccbe5}.xml
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<objects serializationModel="Studio.01.09.00">
+    <object class="MasterEventFolder" id="{94ff31b1-83b7-438f-a0c7-6a5fdd8ccbe5}">
+        <property name="name">
+            <value>Master</value>
+        </property>
+    </object>
+</objects>
diff --git a/FMODStudio/Chapter10/Metadata/Group/{2f8936ee-464a-439f-87b1-fd6ef863df53}.xml b/FMODStudio/Chapter10/Metadata/Group/{2f8936ee-464a-439f-87b1-fd6ef863df53}.xml
new file mode 100644
index 0000000000000000000000000000000000000000..e9099772afb48ae7a72336d3726e81bfb4aaec04
--- /dev/null
+++ b/FMODStudio/Chapter10/Metadata/Group/{2f8936ee-464a-439f-87b1-fd6ef863df53}.xml
@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<objects serializationModel="Studio.01.09.00">
+    <object class="MixerGroup" id="{2f8936ee-464a-439f-87b1-fd6ef863df53}">
+        <property name="name">
+            <value>SFX</value>
+        </property>
+        <relationship name="effectChain">
+            <destination>{5842e9b3-7009-4375-baae-14ec06b49291}</destination>
+        </relationship>
+        <relationship name="panner">
+            <destination>{06e83998-8e4b-4159-b433-53e5d4bf09d0}</destination>
+        </relationship>
+        <relationship name="output">
+            <destination>{f6284d8c-9099-4e06-b8ed-f5b0509d696f}</destination>
+        </relationship>
+    </object>
+    <object class="MixerBusEffectChain" id="{5842e9b3-7009-4375-baae-14ec06b49291}">
+        <relationship name="effects">
+            <destination>{f51b3c20-1d85-4ebe-b925-2ac06fcfa234}</destination>
+            <destination>{93649bf1-d431-40b0-8bed-fc9eb1d3e422}</destination>
+        </relationship>
+    </object>
+    <object class="MixerBusPanner" id="{06e83998-8e4b-4159-b433-53e5d4bf09d0}"/>
+    <object class="MixerBusFader" id="{f51b3c20-1d85-4ebe-b925-2ac06fcfa234}"/>
+    <object class="MixerSend" id="{93649bf1-d431-40b0-8bed-fc9eb1d3e422}">
+        <property name="inputFormat">
+            <value>2</value>
+        </property>
+        <relationship name="mixerReturn">
+            <destination>{b34471c3-ebd2-4b54-b5e3-5f5beff1b202}</destination>
+        </relationship>
+    </object>
+</objects>
diff --git a/FMODStudio/Chapter10/Metadata/Group/{76ef365d-f7b5-4307-94f2-d4ac2facaad5}.xml b/FMODStudio/Chapter10/Metadata/Group/{76ef365d-f7b5-4307-94f2-d4ac2facaad5}.xml
new file mode 100644
index 0000000000000000000000000000000000000000..24b52537c30628f69e269ecc4283bb5f3f5d9207
--- /dev/null
+++ b/FMODStudio/Chapter10/Metadata/Group/{76ef365d-f7b5-4307-94f2-d4ac2facaad5}.xml
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<objects serializationModel="Studio.01.09.00">
+    <object class="MixerGroup" id="{76ef365d-f7b5-4307-94f2-d4ac2facaad5}">
+        <property name="name">
+            <value>Music</value>
+        </property>
+        <relationship name="effectChain">
+            <destination>{ca3d7968-34c3-45c1-bf77-5f54f7c0336f}</destination>
+        </relationship>
+        <relationship name="panner">
+            <destination>{7c58a011-e554-470e-979a-e30cb8c16c64}</destination>
+        </relationship>
+        <relationship name="output">
+            <destination>{f6284d8c-9099-4e06-b8ed-f5b0509d696f}</destination>
+        </relationship>
+    </object>
+    <object class="MixerBusEffectChain" id="{ca3d7968-34c3-45c1-bf77-5f54f7c0336f}">
+        <relationship name="effects">
+            <destination>{54f6181e-cb2c-4ce8-9267-1129ab157913}</destination>
+        </relationship>
+    </object>
+    <object class="MixerBusPanner" id="{7c58a011-e554-470e-979a-e30cb8c16c64}"/>
+    <object class="MixerBusFader" id="{54f6181e-cb2c-4ce8-9267-1129ab157913}"/>
+</objects>
diff --git a/FMODStudio/Chapter10/Metadata/Master.xml b/FMODStudio/Chapter10/Metadata/Master.xml
new file mode 100644
index 0000000000000000000000000000000000000000..a067d4aa8330fe34a0d2cf82a47115f46a97b594
--- /dev/null
+++ b/FMODStudio/Chapter10/Metadata/Master.xml
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<objects serializationModel="Studio.01.09.00">
+    <object class="MixerMaster" id="{f6284d8c-9099-4e06-b8ed-f5b0509d696f}">
+        <property name="name">
+            <value>Master Bus</value>
+        </property>
+        <relationship name="effectChain">
+            <destination>{6f6aaf39-d1e7-45c5-8c49-6711f0d04343}</destination>
+        </relationship>
+        <relationship name="panner">
+            <destination>{22f5cb64-aa51-40bb-bbf5-816d957b1265}</destination>
+        </relationship>
+        <relationship name="mixer">
+            <destination>{5130d9cb-07e8-4c02-885e-e27da18e8319}</destination>
+        </relationship>
+    </object>
+    <object class="MixerBusEffectChain" id="{6f6aaf39-d1e7-45c5-8c49-6711f0d04343}">
+        <relationship name="effects">
+            <destination>{55bed217-be2c-4489-8e9b-415c7c295e7d}</destination>
+        </relationship>
+    </object>
+    <object class="MixerBusPanner" id="{22f5cb64-aa51-40bb-bbf5-816d957b1265}"/>
+    <object class="MixerBusFader" id="{55bed217-be2c-4489-8e9b-415c7c295e7d}"/>
+</objects>
diff --git a/FMODStudio/Chapter10/Metadata/Mixer.xml b/FMODStudio/Chapter10/Metadata/Mixer.xml
new file mode 100644
index 0000000000000000000000000000000000000000..96e3852f915cc7ae252e9b5a227df93e70c6daf5
--- /dev/null
+++ b/FMODStudio/Chapter10/Metadata/Mixer.xml
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<objects serializationModel="Studio.01.09.00">
+    <object class="Mixer" id="{5130d9cb-07e8-4c02-885e-e27da18e8319}">
+        <relationship name="masterBus">
+            <destination>{f6284d8c-9099-4e06-b8ed-f5b0509d696f}</destination>
+        </relationship>
+        <relationship name="snapshotList">
+            <destination>{6dc45fff-38d8-417c-8652-91bba6f7500f}</destination>
+        </relationship>
+    </object>
+</objects>
diff --git a/FMODStudio/Chapter10/Metadata/Return/{b34471c3-ebd2-4b54-b5e3-5f5beff1b202}.xml b/FMODStudio/Chapter10/Metadata/Return/{b34471c3-ebd2-4b54-b5e3-5f5beff1b202}.xml
new file mode 100644
index 0000000000000000000000000000000000000000..ffac110dc71edd06bd1a2cdd6d427d26a91a3ee5
--- /dev/null
+++ b/FMODStudio/Chapter10/Metadata/Return/{b34471c3-ebd2-4b54-b5e3-5f5beff1b202}.xml
@@ -0,0 +1,39 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<objects serializationModel="Studio.01.09.00">
+    <object class="MixerReturn" id="{b34471c3-ebd2-4b54-b5e3-5f5beff1b202}">
+        <property name="overridingInputFormat">
+            <value>2</value>
+        </property>
+        <property name="inputFormatOverridden">
+            <value>true</value>
+        </property>
+        <property name="name">
+            <value>Reverb</value>
+        </property>
+        <relationship name="effectChain">
+            <destination>{7ba27032-da32-43d1-b1de-67394509150d}</destination>
+        </relationship>
+        <relationship name="panner">
+            <destination>{ea645dfd-3ced-4e6d-996b-2e727f18d8ce}</destination>
+        </relationship>
+        <relationship name="output">
+            <destination>{f6284d8c-9099-4e06-b8ed-f5b0509d696f}</destination>
+        </relationship>
+    </object>
+    <object class="MixerBusEffectChain" id="{7ba27032-da32-43d1-b1de-67394509150d}">
+        <relationship name="effects">
+            <destination>{86dcc538-5923-4ebb-a6aa-d1f286f1272d}</destination>
+            <destination>{0b091950-22de-4f23-8818-58efac44d769}</destination>
+        </relationship>
+    </object>
+    <object class="MixerBusPanner" id="{ea645dfd-3ced-4e6d-996b-2e727f18d8ce}"/>
+    <object class="SFXReverbEffect" id="{86dcc538-5923-4ebb-a6aa-d1f286f1272d}">
+        <property name="wetLevel">
+            <value>0</value>
+        </property>
+        <property name="dryLevel">
+            <value>-80</value>
+        </property>
+    </object>
+    <object class="MixerBusFader" id="{0b091950-22de-4f23-8818-58efac44d769}"/>
+</objects>
diff --git a/FMODStudio/Chapter10/Metadata/Snapshot/{5ff95cb9-9388-4a7b-a1d1-3d816aeb2fc8}.xml b/FMODStudio/Chapter10/Metadata/Snapshot/{5ff95cb9-9388-4a7b-a1d1-3d816aeb2fc8}.xml
new file mode 100644
index 0000000000000000000000000000000000000000..6c3081faa2779f52886ec2c3c1d449d9eea1cb81
--- /dev/null
+++ b/FMODStudio/Chapter10/Metadata/Snapshot/{5ff95cb9-9388-4a7b-a1d1-3d816aeb2fc8}.xml
@@ -0,0 +1,49 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<objects serializationModel="Studio.01.09.00">
+    <object class="Snapshot" id="{5ff95cb9-9388-4a7b-a1d1-3d816aeb2fc8}">
+        <property name="name">
+            <value>WithReverb</value>
+        </property>
+        <relationship name="mixer">
+            <destination>{5130d9cb-07e8-4c02-885e-e27da18e8319}</destination>
+        </relationship>
+        <relationship name="automatableProperties">
+            <destination>{115fd91e-eec5-4a9b-9b9f-1e36f67106fe}</destination>
+        </relationship>
+        <relationship name="markerTracks">
+            <destination>{329c7fbf-6fa8-4e63-87b4-b8a754c08a54}</destination>
+        </relationship>
+        <relationship name="timeline">
+            <destination>{05fb19ae-4d29-4ce4-a8bc-78d93c7e61e4}</destination>
+        </relationship>
+        <relationship name="snapshotMasterTrack">
+            <destination>{3a9ea0e3-7874-4a65-9010-cb8bf2cf1a8a}</destination>
+        </relationship>
+        <relationship name="snapshotProperties">
+            <destination>{da65a510-d6c6-44c1-b291-9ccf4ce76d7c}</destination>
+        </relationship>
+        <relationship name="snapshotTracks">
+            <destination>{76775df9-f6d2-443e-9f7d-6ae8ac974c22}</destination>
+        </relationship>
+    </object>
+    <object class="EventAutomatableProperties" id="{115fd91e-eec5-4a9b-9b9f-1e36f67106fe}"/>
+    <object class="MarkerTrack" id="{329c7fbf-6fa8-4e63-87b4-b8a754c08a54}"/>
+    <object class="Timeline" id="{05fb19ae-4d29-4ce4-a8bc-78d93c7e61e4}"/>
+    <object class="SnapshotMasterTrack" id="{3a9ea0e3-7874-4a65-9010-cb8bf2cf1a8a}"/>
+    <object class="SnapshotProperty" id="{da65a510-d6c6-44c1-b291-9ccf4ce76d7c}">
+        <property name="propertyName">
+            <value>level</value>
+        </property>
+        <property name="value">
+            <value>-8.5</value>
+        </property>
+        <relationship name="automatableObject">
+            <destination>{93649bf1-d431-40b0-8bed-fc9eb1d3e422}</destination>
+        </relationship>
+    </object>
+    <object class="SnapshotTrack" id="{76775df9-f6d2-443e-9f7d-6ae8ac974c22}">
+        <relationship name="mixerStrip">
+            <destination>{2f8936ee-464a-439f-87b1-fd6ef863df53}</destination>
+        </relationship>
+    </object>
+</objects>
diff --git a/FMODStudio/Chapter10/Metadata/SnapshotGroup/{6dc45fff-38d8-417c-8652-91bba6f7500f}.xml b/FMODStudio/Chapter10/Metadata/SnapshotGroup/{6dc45fff-38d8-417c-8652-91bba6f7500f}.xml
new file mode 100644
index 0000000000000000000000000000000000000000..e7146fa1c7f13aa95d18b358925ac3735ef5259a
--- /dev/null
+++ b/FMODStudio/Chapter10/Metadata/SnapshotGroup/{6dc45fff-38d8-417c-8652-91bba6f7500f}.xml
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<objects serializationModel="Studio.01.09.00">
+    <object class="SnapshotList" id="{6dc45fff-38d8-417c-8652-91bba6f7500f}">
+        <relationship name="items">
+            <destination>{5ff95cb9-9388-4a7b-a1d1-3d816aeb2fc8}</destination>
+        </relationship>
+        <relationship name="mixer">
+            <destination>{5130d9cb-07e8-4c02-885e-e27da18e8319}</destination>
+        </relationship>
+    </object>
+</objects>
diff --git a/FMODStudio/Chapter10/Metadata/Tags.xml b/FMODStudio/Chapter10/Metadata/Tags.xml
new file mode 100644
index 0000000000000000000000000000000000000000..dd25f3eac44304149f6e156385d9735649098324
--- /dev/null
+++ b/FMODStudio/Chapter10/Metadata/Tags.xml
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<objects serializationModel="Studio.01.09.00">
+    <object class="MasterTagFolder" id="{5c4ec9d8-a437-4d48-a923-6069be7e95e3}">
+        <property name="name">
+            <value>Master</value>
+        </property>
+    </object>
+</objects>
diff --git a/FMODStudio/Chapter10/Metadata/Workspace.xml b/FMODStudio/Chapter10/Metadata/Workspace.xml
new file mode 100644
index 0000000000000000000000000000000000000000..9c886d429c8885bdc389724357a32a77817d9273
--- /dev/null
+++ b/FMODStudio/Chapter10/Metadata/Workspace.xml
@@ -0,0 +1,40 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<objects serializationModel="Studio.01.09.00">
+    <object class="Workspace" id="{4b471a38-78dc-4aa7-8065-e2a4be013d03}">
+        <property name="builtBanksOutputDirectory">
+            <value>../../Chapter10</value>
+        </property>
+        <relationship name="masterEventFolder">
+            <destination>{94ff31b1-83b7-438f-a0c7-6a5fdd8ccbe5}</destination>
+        </relationship>
+        <relationship name="masterTagFolder">
+            <destination>{5c4ec9d8-a437-4d48-a923-6069be7e95e3}</destination>
+        </relationship>
+        <relationship name="masterBankFolder">
+            <destination>{24acc9ed-98e6-4f97-b384-7cedad0817ab}</destination>
+        </relationship>
+        <relationship name="masterAssetFolder">
+            <destination>{ab2d50f9-072f-433d-950e-e62e89beb8cb}</destination>
+        </relationship>
+        <relationship name="mixer">
+            <destination>{5130d9cb-07e8-4c02-885e-e27da18e8319}</destination>
+        </relationship>
+        <relationship name="platforms">
+            <destination>{3ceb98b4-072c-41c2-a593-48d343172e25}</destination>
+        </relationship>
+    </object>
+    <object class="Platform" id="{3ceb98b4-072c-41c2-a593-48d343172e25}">
+        <property name="hardwareType">
+            <value>0</value>
+        </property>
+        <property name="name">
+            <value>Desktop</value>
+        </property>
+        <property name="subDirectory">
+            <value>Assets</value>
+        </property>
+        <property name="speakerFormat">
+            <value>6</value>
+        </property>
+    </object>
+</objects>