| Hour 1 | Coding Your First Project | p. 1 |
| Installing Roblox Studio | p. 1 |
| Let's Take a Tour | p. 2 |
| Opening the Output Window | p. 5 |
| Writing Your First Script | p. 6 |
| Error Messages | p. 11 |
| Leaving Yourself Comments | p. 12 |
| Hour 2 | Properties and Variables | p. 17 |
| Object Hierarchy | p. 18 |
| Keywords | p. 19 |
| Properties | p. 20 |
| Finding Properties and Data Types | p. 22 |
| Creating Variables | p. 22 |
| Changing the Color Property | p. 25 |
| Instances | p. 26 |
| Hour 3 | Creating and Using Functions | p. 31 |
| Creating and Calling Functions | p. 31 |
| Understanding Scope | p. 33 |
| Using Events to Call Functions | p. 33 |
| Understanding Order and Placement | p. 36 |
| Hour 4 | Working with Parameters and Arguments | p. 43 |
| Giving Functions Information to Use | p. 43 |
| Working with Multiple Parameters and Arguments | p. 45 |
| Returning Values from Functions | p. 49 |
| Returning Multiple Values | p. 50 |
| Returning Nil | p. 51 |
| Dealing with Mismatched Arguments and Parameters | p. 51 |
| Working with Anonymous Functions | p. 52 |
| Hour 5 | Conditional Structures | p. 57 |
| If/then Statements | p. 58 |
| Elseif | p. 62 |
| Logical Operators | p. 62 |
| Else | p. 63 |
| Hour 6 | Debouncing and Debugging | p. 73 |
| Don't Destroy, Debounce | p. 73 |
| Figuring Out Where Things Go Wrong | p. 82 |
| Hour 7 | While Loops | p. 91 |
| Repeat Forever, while true do | p. 91 |
| Some Things to Keep in Mind | p. 92 |
| While Loops and Scope | p. 98 |
| Hour 8 | For Loops | p. 101 |
| How for Loops Work | p. 102 |
| Nested Loops | p. 109 |
| Breaking Out of Loops | p. 110 |
| Hour 9 | Working with Arrays | p. 113 |
| What Are Arrays? | p. 113 |
| Adding Items Later | p. 114 |
| Getting Information from a Specific Index | p. 114 |
| Printing an Entire List with ipairs () | p. 115 |
| Folders and ipairs () | p. 116 |
| Finding a Value on the List and Printing the Index | p. 121 |
| Removing Values from an Array | p. 122 |
| Numeric for Loops and Arrays | p. 123 |
| Hour 10 | Working with Dictionaries | p. 127 |
| Intro to Dictionaries | p. 127 |
| Adding and Removing from Dictionaries | p. 130 |
| Removing Key-Value Pairs | p. 130 |
| Working with Dictionaries and Pairs | p. 132 |
| Returning Values from Tables | p. 133 |
| Hour 11 | Client Versus Server | p. 145 |
| Understanding the Client and the Server | p. 145 |
| Working with GUIs | p. 146 |
| Understanding RemoteFunctions | p. 149 |
| Using RemoteFunctions | p. 149 |
| Hour 12 | Remote Events: One-Way Communication | p. 161 |
| Remote Events: A One-Way Street | p. 161 |
| Communicating from the Server to All Clients | p. 162 |
| Communicating from the Client to the Server | p. 165 |
| Communicating from the Server to One Client | p. 170 |
| Communicating from Client to Client | p. 171 |
| Hour 13 | Using ModuleScripts | p. 173 |
| Coding Things Just Once | p. 173 |
| Placing ModuleScripts | p. 174 |
| Understanding How ModuleScripts Work | p. 174 |
| Naming ModuleScripts | p. 174 |
| Adding Functions and Variables | p. 175 |
| Understanding Scope in ModuleScripts | p. 176 |
| Using Modules in Other Scripts | p. 177 |
| Don't Repeat Yourself | p. 183 |
| Dealing in Abstractions | p. 183 |
| Hour 14 | Coding in 3D World Space | p. 187 |
| Understanding X, Y, and Z Coordinates | p. 187 |
| Refining Placement with CFrame Coordinates | p. 189 |
| Offsetting CFrames | p. 191 |
| Adding Rotations to CFrames | p. 191 |
| Working with Models | p. 192 |
| Understanding World Coordinates and Local Object Coordinates | p. 193 |
| Hour 15 | Smoothly Animating Objects | p. 199 |
| Understanding Tweens | p. 199 |
| Setting TweenInfo Parameters | p. 201 |
| Chaining Tweens Together | p. 205 |
| Hour 16 | Solving Problems with Algorithms | p. 209 |
| Defining Algorithms | p. 209 |
| Sorting an Array | p. 210 |
| Sorting in Descending Order | p. 212 |
| Sorting a Dictionary | p. 213 |
| Sorting by Multiple Pieces of Information | p. 216 |
| Hour 17 | Saving Data | p. 219 |
| Enabling Data Stores | p. 219 |
| Creating a Data Store | p. 220 |
| Using Data in the Store | p. 220 |
| Limiting the Number of Calls | p. 225 |
| Protecting Your Data | p. 225 |
| Saving Player Data | p. 226 |
| Using UpdateAsync to Update a Data Store | p. 226 |
| Hour 18 | Creating a Game Loop | p. 229 |
| Setting Up Game Loops | p. 229 |
| Working with BindableEvents | p. 230 |
| Hour 19 | Monetization: One-Time Purchases | p. 243 |
| Adding Passes to Your Experience | p. 243 |
| Configuring the Pass | p. 246 |
| Prompting In-Game Purchases | p. 247 |
| Hour 20 | Object-Oriented Programming | p. 259 |
| What Is OOP? | p. 259 |
| Organizing Code and Projects | p. 259 |
| Making a New Class | p. 260 |
| Adding Class Properties | p. 261 |
| Using Class Functions | p. 263 |
| Hour 21 | Inheritance | p. 271 |
| Setting Up Inheritance | p. 272 |
| Inheriting Properties | p. 274 |
| Working with Multiple Child Classes | p. 277 |
| Inheriting Functions | p. 278 |
| Understanding Polymorphism | p. 278 |
| Calling Parent Functions | p. 282 |
| Hour 22 | Raycasting | p. 287 |
| Setting Up the Function to Raycast | p. 287 |
| 3D Math Trick: Getting the Direction | p. 289 |
| Setting Raycast Parameters | p. 290 |
| 3D Math Trick: Limit Direction | p. 293 |
| Hour 23 | Plopping Objects in an Experience: Part 1 | p. 297 |
| Setting Up the Object | p. 298 |
| Creating a Plop Button | p. 302 |
| Tracking Mouse Movements | p. 303 |
| Previewing the Object | p. 307 |
| Hour 24 | Plopping Objects in an Experience: Part 2 | p. 313 |
| Detecting Mouse Input | p. 314 |
| Sending a Message to the Server | p. 316 |
| Getting the Message | p. 317 |
| Appendix A | Roblox Basics | p. 321 |
| Keywords | p. 322 |
| DataType Index | p. 322 |
| Operators | p. 324 |
| Naming Conventions | p. 325 |
| Animation Easing | p. 325 |
| Possible Solutions to Exercises | p. 326 |
| Index | p. 355 |