1 00:00:00,000 --> 00:00:03,190 2 00:00:03,190 --> 00:00:04,400 GUY WHITE: Hello, everybody. 3 00:00:04,400 --> 00:00:07,500 This is Guy White with Harvard CS50. 4 00:00:07,500 --> 00:00:09,250 And thank you so much for joining us today 5 00:00:09,250 --> 00:00:14,350 with Making Small-Scale 2D Games with LOVE and Lua. 6 00:00:14,350 --> 00:00:20,530 I'm so excited to be with you here today and be presenting this topic. 7 00:00:20,530 --> 00:00:25,000 Before we get started, what I'd like to do is just simply see who's with us 8 00:00:25,000 --> 00:00:26,560 today. 9 00:00:26,560 --> 00:00:29,480 If you would, go to the chat box. 10 00:00:29,480 --> 00:00:34,210 And in that chat box, let's figure out how experienced 11 00:00:34,210 --> 00:00:36,700 you are with game programming. 12 00:00:36,700 --> 00:00:41,530 If you are a die-hard game programmer, and for some reason 13 00:00:41,530 --> 00:00:44,335 you found your way into this introductory seminar, 14 00:00:44,335 --> 00:00:45,460 you're going to put a five. 15 00:00:45,460 --> 00:00:51,310 If you are brand new to the idea of programming games, 16 00:00:51,310 --> 00:00:54,910 you've not programmed games previously, if you'd put a one. 17 00:00:54,910 --> 00:00:59,410 And give yourself a rating somewhere between one and five-- one, brand new; 18 00:00:59,410 --> 00:01:02,590 five, a seasoned expert, you probably could teach this. 19 00:01:02,590 --> 00:01:04,580 Go and pop that in there in the chat box. 20 00:01:04,580 --> 00:01:08,470 And what I'm seeing is lots of ones, a few twos. 21 00:01:08,470 --> 00:01:11,170 And I wanted to say thank you for being here 22 00:01:11,170 --> 00:01:16,660 today, because this seminar is going to offer you the chance 23 00:01:16,660 --> 00:01:20,800 to dip your toe into the world of 2D games 24 00:01:20,800 --> 00:01:28,750 through an amazing framework called LOVE that implements the Lua programming 25 00:01:28,750 --> 00:01:30,190 language. 26 00:01:30,190 --> 00:01:31,690 I am Guy White. 27 00:01:31,690 --> 00:01:35,560 I'm a teacher in Harvard CS50, a teaching fellow at Harvard CS50. 28 00:01:35,560 --> 00:01:40,030 I'm a business owner, and I am a small-scale game designer. 29 00:01:40,030 --> 00:01:44,500 I reside in Portland, Oregon with my three soon-to-be black belt 30 00:01:44,500 --> 00:01:47,740 children and my awesome spouse. 31 00:01:47,740 --> 00:01:54,880 And this presentation is really the culmination, at least for me, 32 00:01:54,880 --> 00:01:59,740 of what led me into wanting to do game making, 33 00:01:59,740 --> 00:02:05,950 and how could I assist you in avoiding some of the major roadblocks that 34 00:02:05,950 --> 00:02:10,479 get in the way when you are getting your start in game design and game 35 00:02:10,479 --> 00:02:12,740 programming. 36 00:02:12,740 --> 00:02:14,960 I want to thank you for your time. 37 00:02:14,960 --> 00:02:17,590 I want to give you my commitment today that I'm 38 00:02:17,590 --> 00:02:21,520 going to do everything in my power to hand you as much as I possibly 39 00:02:21,520 --> 00:02:24,520 can during this about one-hour session. 40 00:02:24,520 --> 00:02:28,090 And I give you that commitment with the idea that at the end, 41 00:02:28,090 --> 00:02:30,670 I'm going to be providing you some resources about where 42 00:02:30,670 --> 00:02:33,010 you can take this next. 43 00:02:33,010 --> 00:02:37,630 Here, in this CS50 ecosystem, there are plenty of supports for you 44 00:02:37,630 --> 00:02:39,100 to take this work further. 45 00:02:39,100 --> 00:02:42,620 And I'm really excited to share those with you. 46 00:02:42,620 --> 00:02:47,800 I grew up in the golden age of console gaming. 47 00:02:47,800 --> 00:02:50,440 I grew up in the golden age of PC gaming, 48 00:02:50,440 --> 00:02:56,170 where games were relatively small, they were often expensive. 49 00:02:56,170 --> 00:03:00,490 You would go to stores and there would be boxes on the shelves 50 00:03:00,490 --> 00:03:03,220 that you would peruse, and you would make 51 00:03:03,220 --> 00:03:09,400 your selection based upon, usually, the box art and the type 52 00:03:09,400 --> 00:03:11,350 on the back of those boxes. 53 00:03:11,350 --> 00:03:13,690 During that time, when I was exposed, and maybe you 54 00:03:13,690 --> 00:03:16,780 can relate, where you first got into gaming, 55 00:03:16,780 --> 00:03:22,390 where you really longed for a teacher to teach you about how to get 56 00:03:22,390 --> 00:03:24,940 started in game design and programming. 57 00:03:24,940 --> 00:03:28,840 Now, in my 30s as I sort of entered into my, 58 00:03:28,840 --> 00:03:32,170 I guess, second or third career with programming. 59 00:03:32,170 --> 00:03:36,490 And through Harvard Extension School, initially dipping my toe 60 00:03:36,490 --> 00:03:40,570 into the edX world, I really wanted someone 61 00:03:40,570 --> 00:03:45,820 to hand me a pathway where I can make my own games 62 00:03:45,820 --> 00:03:49,580 and bring my own creations out into the world. 63 00:03:49,580 --> 00:03:52,330 And now, finally, when I started my first game, 64 00:03:52,330 --> 00:03:56,440 when I was taking Harvard CS50, I really wanted to make sure 65 00:03:56,440 --> 00:03:59,650 that all my time was properly invested. 66 00:03:59,650 --> 00:04:03,460 Because for those of you that are engaged right now in Harvard CS50, 67 00:04:03,460 --> 00:04:06,850 whether through Harvard Extension School or through our edX 68 00:04:06,850 --> 00:04:11,770 platform or OpenCourseWare, you know how much of a time commitment 69 00:04:11,770 --> 00:04:13,480 a lot of this work is. 70 00:04:13,480 --> 00:04:16,510 My hope is that, through the steps that we talk about today, 71 00:04:16,510 --> 00:04:18,850 that you're going to feel like, OK, not only do 72 00:04:18,850 --> 00:04:21,700 I know how to get started in game design, 73 00:04:21,700 --> 00:04:25,720 but I really know how not to waste time in the process. 74 00:04:25,720 --> 00:04:30,385 This seminar is specifically for you if you're interested in 2D game design. 75 00:04:30,385 --> 00:04:33,010 Though, surely, much of what we're going to be discussing today 76 00:04:33,010 --> 00:04:36,440 is applicable to the 3D world, as well. 77 00:04:36,440 --> 00:04:40,690 And you want to create a very clear, or at least 78 00:04:40,690 --> 00:04:44,740 find a very clear, worthwhile, pathway that will help you 79 00:04:44,740 --> 00:04:46,390 in getting that game started. 80 00:04:46,390 --> 00:04:49,510 And you want to make sure you're not wasting your time. 81 00:04:49,510 --> 00:04:53,590 Today, we have three, I guess four objectives today. 82 00:04:53,590 --> 00:04:58,390 First, I'm going to be talking about how to design a small-scope game that 83 00:04:58,390 --> 00:05:00,670 can be created within only 14 days. 84 00:05:00,670 --> 00:05:02,410 These are not massive projects. 85 00:05:02,410 --> 00:05:06,680 These are ones that you could probably use for if you're in a computer science 86 00:05:06,680 --> 00:05:07,180 class. 87 00:05:07,180 --> 00:05:11,500 If you're in CS50, you could probably use this for your final project. 88 00:05:11,500 --> 00:05:14,380 Or another small-scale project that you'd 89 00:05:14,380 --> 00:05:16,807 like to work on with a short turnaround time. 90 00:05:16,807 --> 00:05:18,640 We're going to talk about how to get started 91 00:05:18,640 --> 00:05:25,010 using the LOVE 2D framework to create that 2D game of your initial dreams. 92 00:05:25,010 --> 00:05:28,180 And we're going to end today by talking about the three 93 00:05:28,180 --> 00:05:32,350 landmines of small-scope game design that get in the way of programmers 94 00:05:32,350 --> 00:05:34,480 finishing, game designers finishing. 95 00:05:34,480 --> 00:05:38,020 And a fourth and final objective our time together is I 96 00:05:38,020 --> 00:05:41,560 want to provide some opportunity for you to ask some questions. 97 00:05:41,560 --> 00:05:44,590 That chat box is right down there right now. 98 00:05:44,590 --> 00:05:49,660 And I want to tell you that you can be asking questions throughout. 99 00:05:49,660 --> 00:05:51,430 Many of the questions, though, we're going 100 00:05:51,430 --> 00:05:53,950 to be addressing there at the end of the session, probably 101 00:05:53,950 --> 00:05:57,110 in about 30 or 40 minutes or so. 102 00:05:57,110 --> 00:06:04,240 So with that, I'd like us to jump in to how to design a small-scope game that 103 00:06:04,240 --> 00:06:07,490 can be created within 14 days. 104 00:06:07,490 --> 00:06:12,920 Now, to that chat box, I would like all of you to take a stab at this. 105 00:06:12,920 --> 00:06:17,350 What do you think that scope means, in terms of game design? 106 00:06:17,350 --> 00:06:18,790 What is scope? 107 00:06:18,790 --> 00:06:20,860 And why might that be important? 108 00:06:20,860 --> 00:06:25,643 Just your quick one, two, three word definition is perfectly fine. 109 00:06:25,643 --> 00:06:28,310 If you want to write a paragraph in that chat box, that is fine. 110 00:06:28,310 --> 00:06:31,970 But I probably won't see it in time before I hit the next three slides. 111 00:06:31,970 --> 00:06:35,890 So one, two, or three word definition. 112 00:06:35,890 --> 00:06:37,390 Yeah, "your aim," Maria says. 113 00:06:37,390 --> 00:06:38,950 Thank you, Maria, for that. 114 00:06:38,950 --> 00:06:39,970 "Who will play?" 115 00:06:39,970 --> 00:06:43,540 Cecilia says Connell says, "the entire idea." 116 00:06:43,540 --> 00:06:46,960 And most definitely what scope is-- 117 00:06:46,960 --> 00:06:54,160 it's defined as the extent of a player's possible in-game activity. 118 00:06:54,160 --> 00:06:57,550 The extent of the players in-game activity 119 00:06:57,550 --> 00:07:01,840 that is going to create certain restrictions 120 00:07:01,840 --> 00:07:05,660 and demands upon the person that's creating the game. 121 00:07:05,660 --> 00:07:10,600 So I want you to think about the games that you enjoy right now. 122 00:07:10,600 --> 00:07:13,510 I want you to, in your mind, start envisioning 123 00:07:13,510 --> 00:07:17,890 what games have led you to this seminar today. 124 00:07:17,890 --> 00:07:21,170 And as you're thinking about that, I want you to ask yourself, 125 00:07:21,170 --> 00:07:23,530 is this a small-scope game? 126 00:07:23,530 --> 00:07:28,480 A tight game, where, essentially, it can be played within a matter of minutes? 127 00:07:28,480 --> 00:07:33,610 Or is this a massive-scope game, games that can take hundreds of hours to play 128 00:07:33,610 --> 00:07:39,040 and probably took thousands of individuals-- 129 00:07:39,040 --> 00:07:41,950 without exaggeration-- years to program. 130 00:07:41,950 --> 00:07:48,040 A lot of those big blockbuster games often can be just like that. 131 00:07:48,040 --> 00:07:54,550 You see, the most common and persistent mistake that game designers can make 132 00:07:54,550 --> 00:08:00,700 is overcommitment to the scope of the game. 133 00:08:00,700 --> 00:08:04,360 Usually, those overcommitments in scope often 134 00:08:04,360 --> 00:08:08,800 come in terms of the features that are in the game, 135 00:08:08,800 --> 00:08:13,540 the artwork of the game, the storyline. 136 00:08:13,540 --> 00:08:16,720 Often, the expanse of the in-game universe that you're creating 137 00:08:16,720 --> 00:08:22,000 can often be places where you or any other game designer 138 00:08:22,000 --> 00:08:24,880 might find themselves overcommitting. 139 00:08:24,880 --> 00:08:31,320 When you think about it, chances are you're on some sort of time frame. 140 00:08:31,320 --> 00:08:34,710 You might be somewhat on your own, just learning 141 00:08:34,710 --> 00:08:36,690 about computer science on your own. 142 00:08:36,690 --> 00:08:41,640 You might be engaged with one of our classes here at CS50. 143 00:08:41,640 --> 00:08:47,250 But a challenge is that you want to do useful things within a useful time 144 00:08:47,250 --> 00:08:48,220 period. 145 00:08:48,220 --> 00:08:52,230 So in your mind right now, I want to budget you. 146 00:08:52,230 --> 00:08:55,140 I want to ask you really directly, how much time 147 00:08:55,140 --> 00:09:02,280 are you willing to invest in this first project into 2D gaming? 148 00:09:02,280 --> 00:09:06,990 Are you willing to invest years in this first project? 149 00:09:06,990 --> 00:09:13,470 Or is this something small, something that you can get your effort behind, 150 00:09:13,470 --> 00:09:15,420 organize your time around? 151 00:09:15,420 --> 00:09:17,970 And so, in your mind right now, consider-- 152 00:09:17,970 --> 00:09:20,370 is this a two-week project that I'm working on? 153 00:09:20,370 --> 00:09:21,660 Is this a three or four-week? 154 00:09:21,660 --> 00:09:24,570 Or is this a many month project that I'm working on? 155 00:09:24,570 --> 00:09:27,030 And chances are, if it's your first game, 156 00:09:27,030 --> 00:09:32,700 I would implore you to choose a small time frame, somewhere probably around 157 00:09:32,700 --> 00:09:36,780 14 days, maybe 10 days at most. 158 00:09:36,780 --> 00:09:39,570 The big question that I hope you have on your mind 159 00:09:39,570 --> 00:09:42,830 is, how, then, do I make sure that I'm not 160 00:09:42,830 --> 00:09:46,890 overcommitting to a game scope that's going to exceed my capabilities 161 00:09:46,890 --> 00:09:48,480 and my available time? 162 00:09:48,480 --> 00:09:50,970 Because, indeed, one of the worst things that could happen 163 00:09:50,970 --> 00:09:55,680 is that you get into this project some direction and then you give up 164 00:09:55,680 --> 00:09:57,360 and you walk away. 165 00:09:57,360 --> 00:10:05,680 It's those unfinished ideas that often become like cuts in oneself, where 166 00:10:05,680 --> 00:10:09,970 I have this unfinished project that I didn't bring to fruition, 167 00:10:09,970 --> 00:10:13,960 and, accordingly, I'm less likely to bring my future projects into fruition, 168 00:10:13,960 --> 00:10:18,310 because I started developing this habit of not finishing. 169 00:10:18,310 --> 00:10:25,510 So there are three steps that I'd like to discuss about preventing 170 00:10:25,510 --> 00:10:27,640 that level of overcommitment. 171 00:10:27,640 --> 00:10:31,420 And that first step in making sure you don't overcommit 172 00:10:31,420 --> 00:10:40,300 is taking stock of the game dynamic that is the core of your desire for a game. 173 00:10:40,300 --> 00:10:43,930 Now, you might be asking, well, what is a game dynamic? 174 00:10:43,930 --> 00:10:53,370 A game dynamic is essentially what the basic gameplay is about. 175 00:10:53,370 --> 00:10:57,480 I want you to picture any sport that you might have played recently, 176 00:10:57,480 --> 00:10:59,130 or perhaps as a child. 177 00:10:59,130 --> 00:11:03,600 There are a certain set of dynamics that go 178 00:11:03,600 --> 00:11:09,390 into making a game a game, like catching a ball, or throwing a ball, 179 00:11:09,390 --> 00:11:14,280 or throwing a ball at a target, putting a ball in a hole, 180 00:11:14,280 --> 00:11:19,500 keeping a ball out of a hole, touching your opponent, 181 00:11:19,500 --> 00:11:22,830 running away and not being touched by your opponent, 182 00:11:22,830 --> 00:11:28,020 hiding or finding your opponent, hiding from or finding your opponent, 183 00:11:28,020 --> 00:11:30,960 avoiding an obstacle, amongst many others. 184 00:11:30,960 --> 00:11:34,210 And these are the things that make games fun. 185 00:11:34,210 --> 00:11:42,240 And at the core of every game, there is some sort of core game dynamic. 186 00:11:42,240 --> 00:11:45,960 The authors Romero and Schreiber, in their book, 187 00:11:45,960 --> 00:11:52,380 Challenges for Game Designers, they talk about 10 core game dynamics. 188 00:11:52,380 --> 00:11:58,740 And those core dynamics are quite familiar to if you think about some 189 00:11:58,740 --> 00:12:03,570 of your favorite games, games that involve territorial acquisition, 190 00:12:03,570 --> 00:12:09,090 prediction, spatial reasoning, survival, perhaps is a type of game you really 191 00:12:09,090 --> 00:12:14,940 enjoy playing, destruction, collection-- my Pokémon fans-- 192 00:12:14,940 --> 00:12:18,810 chasing or evading, trading, and race to the end 193 00:12:18,810 --> 00:12:23,410 are common core game dynamics that you might be used to. 194 00:12:23,410 --> 00:12:27,600 And so, right now, I want you to start thinking about, what 195 00:12:27,600 --> 00:12:30,550 is my game going to be about? 196 00:12:30,550 --> 00:12:35,800 Could I distill-- could you distill your game down 197 00:12:35,800 --> 00:12:40,270 to one of these 10 core game dynamics? 198 00:12:40,270 --> 00:12:43,520 And so go ahead and go to the chat box when 199 00:12:43,520 --> 00:12:49,540 you think that you have chosen yours as we talk just for a minute about Mario. 200 00:12:49,540 --> 00:12:53,650 So if you think about Mario, the core game dynamic 201 00:12:53,650 --> 00:12:59,170 is mostly avoiding being touched, avoiding being touched. 202 00:12:59,170 --> 00:13:01,780 Now, it just so happens that there is the option 203 00:13:01,780 --> 00:13:03,950 to stomp on top of your enemies. 204 00:13:03,950 --> 00:13:07,480 But in general, Mario is all about not being 205 00:13:07,480 --> 00:13:12,080 touched by these evil characters that are running around the screen. 206 00:13:12,080 --> 00:13:16,540 And for those of you that were exposed to this game as a child, 207 00:13:16,540 --> 00:13:21,790 or even perhaps recently if you have a classic system, in that opening 208 00:13:21,790 --> 00:13:27,850 frame of this game, you're presented with a coin box and a platform 209 00:13:27,850 --> 00:13:31,300 and a Goomba, a little enemy walking towards you. 210 00:13:31,300 --> 00:13:37,330 And chances are in those first moments that you played, 211 00:13:37,330 --> 00:13:41,950 you ran right into that Goomba sideways and you died. 212 00:13:41,950 --> 00:13:43,970 And the game started over again. 213 00:13:43,970 --> 00:13:48,160 So right away, Mario sets up this game dynamic 214 00:13:48,160 --> 00:13:52,360 that there are objects that we can touch and are OK 215 00:13:52,360 --> 00:13:56,080 and other things onscreen that we can touch and they are not OK. 216 00:13:56,080 --> 00:13:59,560 And we are basically on an obstacle course. 217 00:13:59,560 --> 00:14:05,080 It is, in a way, a race to the end game, where the dynamic is don't be touched. 218 00:14:05,080 --> 00:14:07,900 And that makes this game what it is today. 219 00:14:07,900 --> 00:14:13,120 If this game was anything else, if it was territorial acquisition, 220 00:14:13,120 --> 00:14:15,760 this would not be Mario as we know it. 221 00:14:15,760 --> 00:14:19,010 It becomes an entirely different game. 222 00:14:19,010 --> 00:14:23,080 So as you take a look at these game dynamics, 223 00:14:23,080 --> 00:14:26,530 my beautiful people, please go and take one of these 224 00:14:26,530 --> 00:14:29,320 and write down in the chat box, which one do you 225 00:14:29,320 --> 00:14:31,848 think that you are going to be pursuing. 226 00:14:31,848 --> 00:14:34,390 And for those of you that are listening to this on recording, 227 00:14:34,390 --> 00:14:38,800 whether on YouTube or one of our websites, what I would just simply say 228 00:14:38,800 --> 00:14:43,060 is take notes on your side about what we're talking about during this time. 229 00:14:43,060 --> 00:14:44,085 And I'll be cuing you. 230 00:14:44,085 --> 00:14:46,210 As I'm saying to write things down in the chat box, 231 00:14:46,210 --> 00:14:50,620 probably a great thing to write down on your side. 232 00:14:50,620 --> 00:14:53,380 And so lots of-- wow, lots of race to the ends here. 233 00:14:53,380 --> 00:14:54,700 And a few survival people. 234 00:14:54,700 --> 00:14:56,410 And one spatial reasoning. 235 00:14:56,410 --> 00:14:57,470 Really great. 236 00:14:57,470 --> 00:15:01,240 So the second step in making sure that the scope of your game 237 00:15:01,240 --> 00:15:04,150 is just right, probably for about a two-week game, 238 00:15:04,150 --> 00:15:07,600 is to take stock of what you'd like to create. 239 00:15:07,600 --> 00:15:12,410 And, in general, when you're thinking about this, 240 00:15:12,410 --> 00:15:16,510 you would probably think about it in terms of game features. 241 00:15:16,510 --> 00:15:20,650 This becomes a dangerous area for us as game designers 242 00:15:20,650 --> 00:15:24,070 or as programmers, because it can be really tempting when you're 243 00:15:24,070 --> 00:15:30,310 working on your own or in a small team to load up on features as an overcommit 244 00:15:30,310 --> 00:15:34,030 to the number of features that are going to be present in your game. 245 00:15:34,030 --> 00:15:36,820 I want you to think about some really core questions right now. 246 00:15:36,820 --> 00:15:41,050 I want you to think about this game that you're producing. 247 00:15:41,050 --> 00:15:43,540 What is this game about, anyway? 248 00:15:43,540 --> 00:15:48,600 And how does one win the game? 249 00:15:48,600 --> 00:15:50,440 How does one play the game? 250 00:15:50,440 --> 00:15:53,340 What are the basic gameplay rules? 251 00:15:53,340 --> 00:15:56,910 And what are those features that are going 252 00:15:56,910 --> 00:16:01,770 to be in your game that support that core dynamic? 253 00:16:01,770 --> 00:16:04,250 And so linking us to what we were discussing before, 254 00:16:04,250 --> 00:16:11,210 if your game has a core dynamic, a specific purpose for playing 255 00:16:11,210 --> 00:16:15,870 the game, what are the bare number of features 256 00:16:15,870 --> 00:16:18,610 that you would need to accomplish that? 257 00:16:18,610 --> 00:16:19,660 How do you win the game? 258 00:16:19,660 --> 00:16:21,060 And how do you play it? 259 00:16:21,060 --> 00:16:25,620 And it's that, those essential pieces, that 260 00:16:25,620 --> 00:16:30,630 become the start of a very tight game, a game 261 00:16:30,630 --> 00:16:34,900 that you, perhaps, could produce in your limited time. 262 00:16:34,900 --> 00:16:37,260 Now, there are a lot of different game features 263 00:16:37,260 --> 00:16:39,660 that you'd have to pay attention to. 264 00:16:39,660 --> 00:16:41,940 You'd have to ask yourself about the player. 265 00:16:41,940 --> 00:16:43,380 Who is the player? 266 00:16:43,380 --> 00:16:46,270 And how does the player move? 267 00:16:46,270 --> 00:16:49,680 What's the environment in which the player is living? 268 00:16:49,680 --> 00:16:54,820 And are there other characters that that player is going to be interacting with? 269 00:16:54,820 --> 00:16:59,860 A concern that tends to come up rather quick in one's work is the artwork. 270 00:16:59,860 --> 00:17:06,970 And, often, programmers can get distracted in that artwork, 271 00:17:06,970 --> 00:17:09,280 and sort of live there instead of working 272 00:17:09,280 --> 00:17:11,050 on the core dynamic of their game. 273 00:17:11,050 --> 00:17:16,030 The abilities of the characters and the player also become of interest. 274 00:17:16,030 --> 00:17:19,510 The levels in which they are going to be working, the power ups they can get, 275 00:17:19,510 --> 00:17:21,190 and the score that they can get. 276 00:17:21,190 --> 00:17:26,140 These are all pieces about what makes your game unique and yours. 277 00:17:26,140 --> 00:17:32,380 For example, if we think about probably my favorite open-source game, 278 00:17:32,380 --> 00:17:35,250 Endless Sky-- 279 00:17:35,250 --> 00:17:36,270 pretty amazing. 280 00:17:36,270 --> 00:17:38,670 This is designed as an open-source game that you 281 00:17:38,670 --> 00:17:43,920 can download right now for free, available on great Steam 282 00:17:43,920 --> 00:17:46,020 applications everywhere. 283 00:17:46,020 --> 00:17:51,540 We have a game where a player is in their own shuttle, 284 00:17:51,540 --> 00:17:59,370 and they're floating in this star system amongst this seemingly endless 285 00:17:59,370 --> 00:18:00,720 universe. 286 00:18:00,720 --> 00:18:03,960 And they're alongside other NPC ships that 287 00:18:03,960 --> 00:18:10,260 are attacking them, or stealing items from them, engaging in trade with them, 288 00:18:10,260 --> 00:18:15,210 drawn with this high-density, professional art. 289 00:18:15,210 --> 00:18:18,810 And every single one of these ships-- enemy ships and the main ship-- 290 00:18:18,810 --> 00:18:24,120 are able to expand their capabilities using thousands of different power ups. 291 00:18:24,120 --> 00:18:29,190 And you, with your own whimsy, get to decide where in this universe 292 00:18:29,190 --> 00:18:30,930 you are able to travel. 293 00:18:30,930 --> 00:18:33,450 Hundreds and hundreds of star systems, searching 294 00:18:33,450 --> 00:18:37,020 for power ups, all for the purpose of building 295 00:18:37,020 --> 00:18:39,120 the ultimate fleet of your own. 296 00:18:39,120 --> 00:18:43,530 And you can understand how confusing and how big 297 00:18:43,530 --> 00:18:47,490 this project can get if you're not reigning in each one of those features. 298 00:18:47,490 --> 00:18:51,960 Because, in the end, you could end up with designing a game 299 00:18:51,960 --> 00:18:55,290 that could take hundreds of individuals or thousands of individuals years 300 00:18:55,290 --> 00:18:55,890 to create. 301 00:18:55,890 --> 00:19:00,060 That game might be in your mind, but what is the specific type of game 302 00:19:00,060 --> 00:19:03,030 that you are capable in making in the time frame 303 00:19:03,030 --> 00:19:05,770 that you have available to you? 304 00:19:05,770 --> 00:19:09,835 And so, likewise-- if I can get to my next slide-- 305 00:19:09,835 --> 00:19:13,050 306 00:19:13,050 --> 00:19:14,335 that's always interesting. 307 00:19:14,335 --> 00:19:17,660 308 00:19:17,660 --> 00:19:19,010 This is Death by Layers' team. 309 00:19:19,010 --> 00:19:24,120 310 00:19:24,120 --> 00:19:25,470 There we go. 311 00:19:25,470 --> 00:19:27,990 So let's think about game features for a moment. 312 00:19:27,990 --> 00:19:29,460 Let's think about Mario. 313 00:19:29,460 --> 00:19:36,550 So in Mario, we have dozens upon dozens of levels-- just the original Mario. 314 00:19:36,550 --> 00:19:40,055 So you as a game designer, I want you to make some guesses. 315 00:19:40,055 --> 00:19:41,680 Yeah, "the meme broke it," Angela said. 316 00:19:41,680 --> 00:19:44,550 Yep, the meme did break it. 317 00:19:44,550 --> 00:19:48,720 I want you to think about if you were a game designer 318 00:19:48,720 --> 00:19:52,050 and you were creating a game within two weeks, 319 00:19:52,050 --> 00:19:56,280 what will you have to do to make it possible to create something like Mario 320 00:19:56,280 --> 00:19:58,250 in that short amount of time? 321 00:19:58,250 --> 00:20:01,520 Well, you probably the first step that you would take 322 00:20:01,520 --> 00:20:05,090 is you would look at all these levels that you potentially create and you 323 00:20:05,090 --> 00:20:07,070 probably would limit it just down to one. 324 00:20:07,070 --> 00:20:10,520 You would say, given that this is two weeks long, 325 00:20:10,520 --> 00:20:11,990 I'm just going to take only-- 326 00:20:11,990 --> 00:20:16,380 of all the different things I could do, I'm just going to create one level. 327 00:20:16,380 --> 00:20:20,720 In fact, just to get started, rather than doing one level, 328 00:20:20,720 --> 00:20:24,980 I'm saying do one frame, one little piece of that giant level. 329 00:20:24,980 --> 00:20:28,430 So that way, I can get the core game dynamic down 330 00:20:28,430 --> 00:20:33,430 and get it working before I expand out to something greater if I have time. 331 00:20:33,430 --> 00:20:37,000 Indeed, rather than having all the different Marios 332 00:20:37,000 --> 00:20:38,380 you could possibly have-- 333 00:20:38,380 --> 00:20:41,530 small Mario, big Mario, fire Mario-- 334 00:20:41,530 --> 00:20:45,580 you would say, you know what, just for this project for the next two weeks, 335 00:20:45,580 --> 00:20:47,900 just small Mario. 336 00:20:47,900 --> 00:20:51,980 Likewise you think about in Mario there are dozens and dozens 337 00:20:51,980 --> 00:20:54,380 of potential bad guys. 338 00:20:54,380 --> 00:20:58,490 I guess in the original Mario, there's only about a dozen or so characters. 339 00:20:58,490 --> 00:21:02,420 And you would probably just resort down to one. 340 00:21:02,420 --> 00:21:05,060 One single character would be in the game. 341 00:21:05,060 --> 00:21:07,730 And by doing this, what you're essentially 342 00:21:07,730 --> 00:21:13,610 doing is taking all of this what could be and boiling it down, saying, 343 00:21:13,610 --> 00:21:16,040 what is the core game dynamic that I want 344 00:21:16,040 --> 00:21:19,040 to communicate in my game that is possible for me 345 00:21:19,040 --> 00:21:22,760 to produce in this two-week or so time period? 346 00:21:22,760 --> 00:21:25,340 And you think about it-- 347 00:21:25,340 --> 00:21:29,760 a finished prototype of this game that you potentially amp up into something 348 00:21:29,760 --> 00:21:33,630 greater is far more effective than an unfinished, massive game 349 00:21:33,630 --> 00:21:37,200 that you attempted but never finish. 350 00:21:37,200 --> 00:21:41,750 So step three, step three of producing a game that is of the correct scope 351 00:21:41,750 --> 00:21:45,000 would be to reduce the game down to that minimal viable product. 352 00:21:45,000 --> 00:21:47,270 And so the way to do that-- 353 00:21:47,270 --> 00:21:52,440 when I say minimal viable product I want you to think about 354 00:21:52,440 --> 00:21:56,690 if you are producing something for the marketplace, 355 00:21:56,690 --> 00:21:59,860 what is the minimum product that you could create 356 00:21:59,860 --> 00:22:03,000 that could be viable in and of itself? 357 00:22:03,000 --> 00:22:08,190 One of the big games that I was interacting with early on 358 00:22:08,190 --> 00:22:10,020 was Minecraft. 359 00:22:10,020 --> 00:22:13,830 And you got to think about what makes Minecraft a great game. 360 00:22:13,830 --> 00:22:16,500 For those of you that have played Minecraft, go to that chat box 361 00:22:16,500 --> 00:22:20,070 and tell me, in one or two words, what makes-- 362 00:22:20,070 --> 00:22:24,278 I'll give you three, even-- what makes Minecraft a great game? 363 00:22:24,278 --> 00:22:25,320 One, two, or three words. 364 00:22:25,320 --> 00:22:28,280 365 00:22:28,280 --> 00:22:30,065 "Voxels," someone says. 366 00:22:30,065 --> 00:22:34,340 367 00:22:34,340 --> 00:22:36,110 "The freedom you have." 368 00:22:36,110 --> 00:22:36,740 Absolutely. 369 00:22:36,740 --> 00:22:39,140 "Open-endedness creativity, and exploring." 370 00:22:39,140 --> 00:22:48,180 And notice that we just took this game that has loads of features 371 00:22:48,180 --> 00:22:50,700 and we boiled it down to a core dynamic. 372 00:22:50,700 --> 00:22:55,410 And that core dynamic is something around freedom and exploration. 373 00:22:55,410 --> 00:22:58,950 You're able to do something creatively. 374 00:22:58,950 --> 00:23:01,120 What does it take to do that? 375 00:23:01,120 --> 00:23:05,460 I mean, now, of course, Minecraft is completely massive in a way 376 00:23:05,460 --> 00:23:07,230 that I can't even comprehend. 377 00:23:07,230 --> 00:23:10,360 But if you were designing something of that, 378 00:23:10,360 --> 00:23:13,312 imagine the features that would make it in the game 379 00:23:13,312 --> 00:23:16,020 and that wouldn't make it in the game in your two-week time span. 380 00:23:16,020 --> 00:23:18,960 Something you could bring forth to others, present to others, 381 00:23:18,960 --> 00:23:22,200 perhaps even turn in as a final project, maybe even 382 00:23:22,200 --> 00:23:27,240 bring to market as some introductory game, your first game. 383 00:23:27,240 --> 00:23:33,480 But it still has that core, because you knew from the start what that core was. 384 00:23:33,480 --> 00:23:37,890 Just looking at this, this doesn't look like much. 385 00:23:37,890 --> 00:23:47,180 We have a good, green box, we have a bad, red circle, and we have a star. 386 00:23:47,180 --> 00:23:50,440 And it's OK for us to touch the star. 387 00:23:50,440 --> 00:23:54,550 And it's not OK for us to touch that red circle as the green box. 388 00:23:54,550 --> 00:23:56,390 We are the green box. 389 00:23:56,390 --> 00:23:59,320 Notice, it's exactly what Mario is. 390 00:23:59,320 --> 00:24:00,670 It's just like that. 391 00:24:00,670 --> 00:24:03,500 Boiling it down to that essential core dynamic. 392 00:24:03,500 --> 00:24:05,740 And so when you're producing something, I 393 00:24:05,740 --> 00:24:08,002 encourage you to start thinking about, rather than 394 00:24:08,002 --> 00:24:10,960 think about all the thousands or hundreds of features that might end up 395 00:24:10,960 --> 00:24:13,418 in your game, even the dozens of features that might end up 396 00:24:13,418 --> 00:24:16,540 in your game, take that entire list of your greatest desires, 397 00:24:16,540 --> 00:24:20,560 take a piece of paper, fold it in half, and on the left hand side, 398 00:24:20,560 --> 00:24:23,200 put the must-haves, the things that make up your game. 399 00:24:23,200 --> 00:24:27,430 Without them your game does not exist. 400 00:24:27,430 --> 00:24:30,870 And then on the right hand side, put the things that are the nice-to-haves, 401 00:24:30,870 --> 00:24:32,850 the things that you'd like to add on later 402 00:24:32,850 --> 00:24:35,340 that could create an even better game, perhaps 403 00:24:35,340 --> 00:24:40,110 a second version of this great game, but are not the essential core dynamic. 404 00:24:40,110 --> 00:24:42,690 Because if you think about it, you have an opportunity 405 00:24:42,690 --> 00:24:44,970 to create something that in and of itself 406 00:24:44,970 --> 00:24:48,690 is complete and whole, based upon that minimal-- 407 00:24:48,690 --> 00:24:51,540 the core game dynamic, or you could create 408 00:24:51,540 --> 00:24:56,970 something that is potentially massive but you just simply don't finish. 409 00:24:56,970 --> 00:25:00,050 So with that, to our third step-- 410 00:25:00,050 --> 00:25:06,380 or excuse me, I'd like to talk briefly now about getting started in LOVE 2D, 411 00:25:06,380 --> 00:25:09,120 because that's what a lot of you have come here for today. 412 00:25:09,120 --> 00:25:14,770 So just to give you some background, I want-- 413 00:25:14,770 --> 00:25:17,860 for those of you that have prior coding experience, 414 00:25:17,860 --> 00:25:23,380 you can imagine how building a game engine that would run something like 415 00:25:23,380 --> 00:25:23,920 Mario-- 416 00:25:23,920 --> 00:25:30,310 that is the physics, the way sprites are drawn on the screen, the way 417 00:25:30,310 --> 00:25:34,870 that levels load, the way memory is handled-- 418 00:25:34,870 --> 00:25:41,320 all those things, traditionally, once upon a time were handled in very 419 00:25:41,320 --> 00:25:43,190 low-level programming languages-- 420 00:25:43,190 --> 00:25:47,680 C, C++, even C#, of course, many of you touched on now. 421 00:25:47,680 --> 00:25:51,040 And, of course, over time programmers have 422 00:25:51,040 --> 00:25:54,640 had benefited from layers and levels of abstraction 423 00:25:54,640 --> 00:25:58,592 moving away from those languages because-- 424 00:25:58,592 --> 00:25:59,550 well, for many reasons. 425 00:25:59,550 --> 00:26:03,850 I suppose a chief reason is, if you think about old games, games, 426 00:26:03,850 --> 00:26:07,000 potentially, that were created either before you were born, 427 00:26:07,000 --> 00:26:11,560 or games, perhaps, in your early life, those games 428 00:26:11,560 --> 00:26:15,830 were produced during a time when there was very limited system resources. 429 00:26:15,830 --> 00:26:19,210 And those resources were exceedingly expensive. 430 00:26:19,210 --> 00:26:24,460 Games like DOOM were created, Wolfenstein were created in C. 431 00:26:24,460 --> 00:26:29,020 And they needed to do that, because one, that was one of the few things 432 00:26:29,020 --> 00:26:33,460 available to them when creating this, but also because they needed 433 00:26:33,460 --> 00:26:35,980 to go as close to the hardware as possible 434 00:26:35,980 --> 00:26:40,210 to pump out as much as they possibly could from that limited and very 435 00:26:40,210 --> 00:26:42,490 expensive hardware. 436 00:26:42,490 --> 00:26:48,040 Well now, because of the popularity of game programming, 437 00:26:48,040 --> 00:26:52,150 there are tools out there that you can use, frameworks, 438 00:26:52,150 --> 00:26:55,600 that allow you to get a quick start at your game work. 439 00:26:55,600 --> 00:27:06,278 Probably my favorite growing up was, oh gosh, was it's not Game Workshop. 440 00:27:06,278 --> 00:27:08,570 Carter, what is that thing called that I'm thinking of? 441 00:27:08,570 --> 00:27:09,540 Not Game Workshop. 442 00:27:09,540 --> 00:27:12,230 What is that framework called? 443 00:27:12,230 --> 00:27:13,340 CARTER: Game Creator? 444 00:27:13,340 --> 00:27:17,840 GUY WHITE: Game Creator, absolutely, was where I got my start, most definitely. 445 00:27:17,840 --> 00:27:20,957 LOVE 2D is another framework that's, absolutely, of course, 446 00:27:20,957 --> 00:27:22,040 we'll be discussing today. 447 00:27:22,040 --> 00:27:26,420 And then Unity is one that's out there and usable by most people today. 448 00:27:26,420 --> 00:27:29,700 And so where you get your start is really up to you. 449 00:27:29,700 --> 00:27:33,380 I want you to go into this by asking yourself, really, 450 00:27:33,380 --> 00:27:35,840 some really fundamental, core questions. 451 00:27:35,840 --> 00:27:39,200 They're almost existential questions of, who am I? 452 00:27:39,200 --> 00:27:44,330 Am I the type of person that wants to design a game in code? 453 00:27:44,330 --> 00:27:47,360 That is, am I a person who wants to iterate through code, 454 00:27:47,360 --> 00:27:54,140 creating functions and code in a coding environment that produces a game, 455 00:27:54,140 --> 00:27:58,130 or am I one that wants to work in a graphical environment 456 00:27:58,130 --> 00:28:00,920 where I can see a lot of these sprites on the screen 457 00:28:00,920 --> 00:28:05,240 as I develop them, move them in a 3D environment, potentially. 458 00:28:05,240 --> 00:28:09,200 That choice, who you are and how you'd like to work, 459 00:28:09,200 --> 00:28:12,470 could really determine which direction you go. 460 00:28:12,470 --> 00:28:15,140 For those of you that are interested in creating 461 00:28:15,140 --> 00:28:17,780 a game without any coding at all, Game Creator 462 00:28:17,780 --> 00:28:20,420 is actually a really fantastic option for you. 463 00:28:20,420 --> 00:28:24,500 For those of you that are really wanting to learn and work 464 00:28:24,500 --> 00:28:28,610 in the coding environment, LOVE 2D is absolutely a fantastic framework. 465 00:28:28,610 --> 00:28:29,690 Unity also. 466 00:28:29,690 --> 00:28:32,540 But Unity is a very graphical environment 467 00:28:32,540 --> 00:28:34,200 and offers you different things. 468 00:28:34,200 --> 00:28:40,410 So as we're talking about these basics, just know that you have a choice. 469 00:28:40,410 --> 00:28:45,750 And the great hope is that if you decide that a tool is not working for you, 470 00:28:45,750 --> 00:28:49,130 you can go find another tool that perhaps functions better, 471 00:28:49,130 --> 00:28:51,770 more in the way that you think about game creation, 472 00:28:51,770 --> 00:28:57,580 and more in line with who you are as a person, as a creator. 473 00:28:57,580 --> 00:29:02,950 So with LOVE 2D, the main dot lua file, which 474 00:29:02,950 --> 00:29:07,810 is the essential file that runs any LOVE program, 475 00:29:07,810 --> 00:29:11,620 has simply three main functions, and that's it. 476 00:29:11,620 --> 00:29:14,990 We have the love.load function, as you see here, 477 00:29:14,990 --> 00:29:18,820 and we have the love.update, and the love.draw. 478 00:29:18,820 --> 00:29:23,680 And as long as those three functions are present in our main dot lua 479 00:29:23,680 --> 00:29:28,090 file, what this will do is this will allow our game to run. 480 00:29:28,090 --> 00:29:32,110 And right now, this is as basic as it gets. 481 00:29:32,110 --> 00:29:39,430 All I'm doing is I'm saying, draw, when we run this program, a rectangle. 482 00:29:39,430 --> 00:29:42,160 And we're going to use a line to draw that. 483 00:29:42,160 --> 00:29:44,380 And what we're going to do is we're going to have 484 00:29:44,380 --> 00:29:47,500 it 100 pixels wide, 100 pixels tall. 485 00:29:47,500 --> 00:29:51,880 And I'm going to put it at position 200, 200 486 00:29:51,880 --> 00:29:56,950 on our screen, which is, from the top left, it's 200 over and 200 down. 487 00:29:56,950 --> 00:30:02,770 And the other functions here, love.load, are the pieces of code 488 00:30:02,770 --> 00:30:05,980 that run only once, once the file is loaded. 489 00:30:05,980 --> 00:30:09,550 And also love.update is what happens as a function of time, 490 00:30:09,550 --> 00:30:13,000 what happens every single moment as a function of time 491 00:30:13,000 --> 00:30:16,580 that we are running through our program, running our program. 492 00:30:16,580 --> 00:30:19,658 And, as you can imagine, this doesn't do much. 493 00:30:19,658 --> 00:30:21,700 As you can see here on our screen, what this does 494 00:30:21,700 --> 00:30:27,820 is it simply just displays a box. 495 00:30:27,820 --> 00:30:29,920 Angela is mentioning Adventure Construction Set, 496 00:30:29,920 --> 00:30:34,630 which is absolutely another interesting tool you should take a look at. 497 00:30:34,630 --> 00:30:39,820 Now, to our second level, what we could do is-- notice what we're doing now. 498 00:30:39,820 --> 00:30:42,020 We're adding some features here. 499 00:30:42,020 --> 00:30:45,970 So in the previous, notice at the bottom where 500 00:30:45,970 --> 00:30:49,150 we started, love.draw, all the way at the bottom of the screen. 501 00:30:49,150 --> 00:30:53,800 What we have is we have the rectangle being drawn, 502 00:30:53,800 --> 00:30:58,720 but this time, rather than telling as hard coding the compiler 503 00:30:58,720 --> 00:31:04,630 to run this with 100 pixels wide and 100 pixels tall, what we're going to do 504 00:31:04,630 --> 00:31:07,540 is, this time, we're going to go up into our love.load function 505 00:31:07,540 --> 00:31:11,025 and we're going to add those as variables there. 506 00:31:11,025 --> 00:31:13,150 And we're doing that for the purpose of the ability 507 00:31:13,150 --> 00:31:16,580 to manipulate those items later. 508 00:31:16,580 --> 00:31:20,020 And as you can see in the love.update, as a function of time 509 00:31:20,020 --> 00:31:22,480 throughout our program as it's running, what 510 00:31:22,480 --> 00:31:26,620 we're going to be listening for using these if statements is, 511 00:31:26,620 --> 00:31:29,620 is the keyboard being pressed? 512 00:31:29,620 --> 00:31:33,670 Is our W, S, A, or D key being pressed? 513 00:31:33,670 --> 00:31:37,580 And depending upon which we press, we're going to take an action. 514 00:31:37,580 --> 00:31:42,850 So in the case of the W, we're withdrawing from the y, 515 00:31:42,850 --> 00:31:47,560 we're moving our object up closer to zero and so on. 516 00:31:47,560 --> 00:31:52,960 So our y up here at our top and our love.load function, is moving up, 517 00:31:52,960 --> 00:31:56,170 and hence, our rectangle is moving, too. 518 00:31:56,170 --> 00:31:58,000 And the opposite being true. 519 00:31:58,000 --> 00:32:03,370 And, of course, using our A and D keys, we can move that box left or right. 520 00:32:03,370 --> 00:32:09,190 Now, as you implement this in LOVE, what you'll find 521 00:32:09,190 --> 00:32:17,380 is an immediate challenge we have is this box can leave the screen. 522 00:32:17,380 --> 00:32:20,110 And it almost infinitely can leave the screen. 523 00:32:20,110 --> 00:32:24,520 I don't know, I have not held down that A key for an hour 524 00:32:24,520 --> 00:32:28,018 to see if it would cause an error, but I know that the box leaves the screen. 525 00:32:28,018 --> 00:32:30,310 And at some point, it takes a great deal of time for it 526 00:32:30,310 --> 00:32:32,000 to come back, if you'd like to. 527 00:32:32,000 --> 00:32:37,990 So what we can do is we can create some, in a way, some collision where 528 00:32:37,990 --> 00:32:43,800 it checks, where it says, are we out, are we 529 00:32:43,800 --> 00:32:47,460 hitting the boundary of our screen? 530 00:32:47,460 --> 00:32:50,910 And so adding, again, another layer of abstraction here. 531 00:32:50,910 --> 00:32:55,170 Rather than just simply having x and y-coordinates, what I might do 532 00:32:55,170 --> 00:32:58,530 is I might create an object called mySquare. 533 00:32:58,530 --> 00:33:03,000 And what I'm now doing is I'm assigning an x-value to it, and a y-value to it, 534 00:33:03,000 --> 00:33:05,730 and a height and a width to it, and so on. 535 00:33:05,730 --> 00:33:11,490 And rather than just simply controlling the x or the y, I'm actually-- 536 00:33:11,490 --> 00:33:15,660 or x and y arbitrarily, I'm working with only mySquare's 537 00:33:15,660 --> 00:33:19,890 x and y, as you can see that I changed here in the update function. 538 00:33:19,890 --> 00:33:27,120 And most poignant for this part is this second piece of our code 539 00:33:27,120 --> 00:33:31,650 where we start adding some if statements checking to see 540 00:33:31,650 --> 00:33:36,270 is the x and the y-value of the square moving 541 00:33:36,270 --> 00:33:40,200 outside the bounds of our screen? 542 00:33:40,200 --> 00:33:44,730 And if it does attempt to go outside the bounds, 543 00:33:44,730 --> 00:33:48,070 we're going to push it back just a little bit, not enough for the user 544 00:33:48,070 --> 00:33:51,630 to say, whoa, that's a big jump, but enough just to make it stick there 545 00:33:51,630 --> 00:33:54,270 and prevent it from moving any further. 546 00:33:54,270 --> 00:33:57,585 We're having it bump all the walls, as it were. 547 00:33:57,585 --> 00:33:59,460 And as you can see in the love.draw function, 548 00:33:59,460 --> 00:34:02,830 we are adding that level of abstraction down there, as well. 549 00:34:02,830 --> 00:34:04,170 So what do we have now? 550 00:34:04,170 --> 00:34:07,410 Well, we have a box that appears on the screen. 551 00:34:07,410 --> 00:34:10,360 And we have the ability to move the box around the screen. 552 00:34:10,360 --> 00:34:14,250 And now, we have the ability to keep that box inside. 553 00:34:14,250 --> 00:34:22,090 Now, you could take this small, very small-scale game to a game level 554 00:34:22,090 --> 00:34:25,120 by simply adding something to it. 555 00:34:25,120 --> 00:34:29,199 And the options are almost limitless. 556 00:34:29,199 --> 00:34:32,730 All my team here on the chat box, what is one thing 557 00:34:32,730 --> 00:34:34,949 we could add, in just a couple of words, what's 558 00:34:34,949 --> 00:34:39,960 one thing you could add to this game to potentially, now, make it a full game? 559 00:34:39,960 --> 00:34:41,699 Just one little thing you could add. 560 00:34:41,699 --> 00:34:44,250 So we have a box moving around a screen. 561 00:34:44,250 --> 00:34:46,889 Yeah, we can have a platform, absolutely. 562 00:34:46,889 --> 00:34:49,750 So as Greg says, we could have it on a platform. 563 00:34:49,750 --> 00:34:53,699 And if we step off the platform, it falls. 564 00:34:53,699 --> 00:34:57,000 We could have items to collect, where the box has to move around the screen 565 00:34:57,000 --> 00:34:58,560 and grab items. 566 00:34:58,560 --> 00:35:00,300 Angela says, "something to dodge." 567 00:35:00,300 --> 00:35:01,530 Absolutely. 568 00:35:01,530 --> 00:35:05,430 So notice, just based upon a box on a screen, 569 00:35:05,430 --> 00:35:08,610 how you three just came up with three different games 570 00:35:08,610 --> 00:35:10,890 with three different core dynamics. 571 00:35:10,890 --> 00:35:12,700 What an interesting thing. 572 00:35:12,700 --> 00:35:18,820 So how, then, complicated could you make your game? 573 00:35:18,820 --> 00:35:25,100 How feature-filled could you make your game, then, within two weeks? 574 00:35:25,100 --> 00:35:26,920 And so imagine that. 575 00:35:26,920 --> 00:35:30,820 Imagine where, instead of creating-- just setting out to say, 576 00:35:30,820 --> 00:35:33,760 I'm going to create the next whatever that big game is, 577 00:35:33,760 --> 00:35:36,940 imagine, for one of your first games, that you say, 578 00:35:36,940 --> 00:35:40,990 I'm going to distill something that I think is fun down 579 00:35:40,990 --> 00:35:43,630 to its most essential core dynamic. 580 00:35:43,630 --> 00:35:46,410 And I'm going to implement that. 581 00:35:46,410 --> 00:35:49,920 And if you think about those two sides of the piece of paper I talked about, 582 00:35:49,920 --> 00:35:53,790 the must-haves and the good-to-haves, imagine, then, 583 00:35:53,790 --> 00:35:57,420 within two weeks looking at your side with the must-haves, 584 00:35:57,420 --> 00:36:01,770 accomplishing all those, and then bringing those over, bringing 585 00:36:01,770 --> 00:36:05,460 over the nice-to-haves into the feature list, and saying, OK, now 586 00:36:05,460 --> 00:36:07,350 that I've implemented the core of the game, 587 00:36:07,350 --> 00:36:10,030 what would I like to implement next? 588 00:36:10,030 --> 00:36:13,800 And this is where I bring up my warning about artwork. 589 00:36:13,800 --> 00:36:16,920 I am not blessed artistically. 590 00:36:16,920 --> 00:36:20,040 Many of you are, and congratulations on that. 591 00:36:20,040 --> 00:36:21,570 I might hire you one day. 592 00:36:21,570 --> 00:36:24,960 But for the majority of us that are not artistically blessed, 593 00:36:24,960 --> 00:36:27,990 it can be really distracting to get stuck 594 00:36:27,990 --> 00:36:30,760 in the artwork phase of your project. 595 00:36:30,760 --> 00:36:33,300 And so what I encourage you to do is as your prototyping, 596 00:36:33,300 --> 00:36:36,210 as you're building out your minimal viable product, 597 00:36:36,210 --> 00:36:40,492 try to avoid getting stuck in places that you really 598 00:36:40,492 --> 00:36:43,200 don't need to address at this moment-- artwork being one of them. 599 00:36:43,200 --> 00:36:46,450 Artwork, you can most definitely address later. 600 00:36:46,450 --> 00:36:51,360 But to get the core dynamic working, probably not. 601 00:36:51,360 --> 00:36:55,610 So I'd like to talk to you about the phases, then, of producing a LOVE game. 602 00:36:55,610 --> 00:36:59,420 And this, in a way, speaks back to those existential questions 603 00:36:59,420 --> 00:37:00,950 that we spoke about a moment ago. 604 00:37:00,950 --> 00:37:03,800 One is-- there's the setup phase. 605 00:37:03,800 --> 00:37:07,970 That's where you go to the LOVE2D.org website. 606 00:37:07,970 --> 00:37:09,530 I hope I'm getting that URL right. 607 00:37:09,530 --> 00:37:12,540 And you run the setup there. 608 00:37:12,540 --> 00:37:14,810 You follow the setup instructions. 609 00:37:14,810 --> 00:37:19,290 If you're on the Mac platform, there are some specific terminal-related things 610 00:37:19,290 --> 00:37:20,370 that you'll need to do. 611 00:37:20,370 --> 00:37:22,560 Same thing for the Windows setup as well. 612 00:37:22,560 --> 00:37:24,440 And you get running on your computer. 613 00:37:24,440 --> 00:37:30,560 You know that you finished this phase when you can open a LOVE file 614 00:37:30,560 --> 00:37:31,970 and it will run on your screen. 615 00:37:31,970 --> 00:37:35,580 And they provide some sample LOVE files that you can download, 616 00:37:35,580 --> 00:37:38,360 so that way, you can test your setup to make sure it works. 617 00:37:38,360 --> 00:37:42,510 The next step is really the gut-check phase. 618 00:37:42,510 --> 00:37:47,400 And the main question that I'd like you to ponder as you're engaging in this 619 00:37:47,400 --> 00:37:51,000 is, is this framework right for me? 620 00:37:51,000 --> 00:37:57,050 Is this way of making a game the way that I'd like to make a game? 621 00:37:57,050 --> 00:37:58,940 If the answer is no, that's OK. 622 00:37:58,940 --> 00:38:04,710 Go find a tool that works well for you, a framework that works well for you. 623 00:38:04,710 --> 00:38:09,680 Choose one granular element that is going 624 00:38:09,680 --> 00:38:14,990 to make your game your game, just one little piece, and ask yourself, 625 00:38:14,990 --> 00:38:19,190 is this really what I want to be doing with my time, 626 00:38:19,190 --> 00:38:24,290 implementing this type of thing in this type of way? 627 00:38:24,290 --> 00:38:28,580 GameMaker Studio is open to you, Unity is open to you, Godot is open to you, 628 00:38:28,580 --> 00:38:31,490 LOVE 2D is an amazing tool. 629 00:38:31,490 --> 00:38:33,380 Corona SDK is open up, too. 630 00:38:33,380 --> 00:38:37,550 There's so many different frameworks that are out there, ready for you. 631 00:38:37,550 --> 00:38:39,000 So you have a choice. 632 00:38:39,000 --> 00:38:42,950 And the day to choose that is just a matter-- 633 00:38:42,950 --> 00:38:46,220 the time to choose that is just a matter of an hour or two, probably, 634 00:38:46,220 --> 00:38:49,160 into the process of working on the game. 635 00:38:49,160 --> 00:38:51,590 Next is the game dynamic phase. 636 00:38:51,590 --> 00:38:57,880 In this place, you're going to be choosing the core game dynamic, 637 00:38:57,880 --> 00:39:01,000 and you're going to be implementing it there in your game. 638 00:39:01,000 --> 00:39:02,920 And you want to test it. 639 00:39:02,920 --> 00:39:08,490 And you want to get it to a point where you have a playable copy of your game 640 00:39:08,490 --> 00:39:11,550 where you can show other people and have them play it, 641 00:39:11,550 --> 00:39:16,530 and watch how they react to getting the core, the most basic, the must-haves 642 00:39:16,530 --> 00:39:18,520 of your game running. 643 00:39:18,520 --> 00:39:20,760 And then, from there is the MVP phase. 644 00:39:20,760 --> 00:39:24,000 And this is taking it from a prototype that's 645 00:39:24,000 --> 00:39:26,730 playable into something that is, in fact, finished, 646 00:39:26,730 --> 00:39:30,780 something that is releasable, something that-- it might not be the best 647 00:39:30,780 --> 00:39:34,590 release ever, but it's something that you can give to others, 648 00:39:34,590 --> 00:39:36,150 and it's a completed game. 649 00:39:36,150 --> 00:39:39,510 It's something that has a beginning and an ending, 650 00:39:39,510 --> 00:39:44,040 or at least has the potential of being perpetual forever, potentially. 651 00:39:44,040 --> 00:39:47,310 And, finally, there's the feature phase. 652 00:39:47,310 --> 00:39:50,460 And this is where, after you've produced that minimal viable product, 653 00:39:50,460 --> 00:39:53,190 you're adding in more features to make it an even better game. 654 00:39:53,190 --> 00:39:55,350 You're adding menus, you're adding levels, 655 00:39:55,350 --> 00:40:02,466 you're potentially adding power ups. And that way, the material that you're-- 656 00:40:02,466 --> 00:40:07,700 that way, what you're putting into the game 657 00:40:07,700 --> 00:40:10,730 is on top of what has already been deemed essential. 658 00:40:10,730 --> 00:40:14,480 Because you've already created a game that accomplishes the goal that you 659 00:40:14,480 --> 00:40:17,870 set forth, that core dynamic, and the features 660 00:40:17,870 --> 00:40:23,090 are something that are going to want to further enhance that core dynamic. 661 00:40:23,090 --> 00:40:27,350 Many of you have played games before where the game was absolutely almost 662 00:40:27,350 --> 00:40:30,710 perfect as is, but then they added a new element to it, 663 00:40:30,710 --> 00:40:32,840 and it actually took away from the game. 664 00:40:32,840 --> 00:40:34,970 And so you'll be doing some soul searching 665 00:40:34,970 --> 00:40:38,930 during this period of your work in LOVE to decide, 666 00:40:38,930 --> 00:40:41,855 is this a feature that really should be implemented now? 667 00:40:41,855 --> 00:40:47,050 668 00:40:47,050 --> 00:40:51,220 The best resources that I can hand you to get started, 669 00:40:51,220 --> 00:40:55,000 flat out, is first of all, is Sheepolution's How to LOVE. 670 00:40:55,000 --> 00:40:59,200 It is, perhaps, the most comprehensive, step-by-step tutorial 671 00:40:59,200 --> 00:41:01,330 that I've ever seen. 672 00:41:01,330 --> 00:41:03,790 What I like about Sheepolution's tutorial 673 00:41:03,790 --> 00:41:07,300 is it gets you to a built game very quickly. 674 00:41:07,300 --> 00:41:13,510 And getting to a built game, building a prototype game 675 00:41:13,510 --> 00:41:15,610 using someone else's instruction is a great way 676 00:41:15,610 --> 00:41:22,120 to familiarize yourself with this framework and what is possible, 677 00:41:22,120 --> 00:41:23,620 what it can possibly do. 678 00:41:23,620 --> 00:41:28,967 And on top of it, to learn about how you can use this, 679 00:41:28,967 --> 00:41:31,300 how you can implement each of the individual pieces that 680 00:41:31,300 --> 00:41:33,460 are discussed there in that tutorial, like 681 00:41:33,460 --> 00:41:37,360 how to implement a different level, and game states, and so on. 682 00:41:37,360 --> 00:41:40,390 Simple Game Tutorials is another amazing one, as well. 683 00:41:40,390 --> 00:41:43,030 What I appreciate about Simple Game Tutorials above all 684 00:41:43,030 --> 00:41:46,240 is you are reimplementing games you already 685 00:41:46,240 --> 00:41:49,340 know about out there in the world. 686 00:41:49,340 --> 00:41:55,510 And so games like Pong are on there where you can reimplement. 687 00:41:55,510 --> 00:41:58,580 Creating a basic pinball machine is one on there as well. 688 00:41:58,580 --> 00:42:02,200 And it's by building from those very basic templates 689 00:42:02,200 --> 00:42:06,380 that you could potentially create your own game as well. 690 00:42:06,380 --> 00:42:09,400 I would be quite remiss if I did not mention 691 00:42:09,400 --> 00:42:14,290 Brenda Romero and Ian Schreiber's book, Challenges for Game Designers. 692 00:42:14,290 --> 00:42:20,230 This book is a huge guide for me in my life, has been very helpful. 693 00:42:20,230 --> 00:42:23,140 Both of these authors have another book about breaking into the game 694 00:42:23,140 --> 00:42:25,480 industry, which is exceptionally good. 695 00:42:25,480 --> 00:42:28,177 But for you, in your stage of creating your first game, 696 00:42:28,177 --> 00:42:30,010 I think this book is probably the best place 697 00:42:30,010 --> 00:42:33,790 to start if you are a book person. 698 00:42:33,790 --> 00:42:36,860 I love listening to YouTube videos, watching YouTube videos, 699 00:42:36,860 --> 00:42:38,240 especially as I'm on the go. 700 00:42:38,240 --> 00:42:40,970 And so Extra Credits is an amazing site. 701 00:42:40,970 --> 00:42:43,822 Many of you have absolutely-- 702 00:42:43,822 --> 00:42:46,780 you've been exposed to this before, probably, if you've been on YouTube 703 00:42:46,780 --> 00:42:47,822 and searched game design. 704 00:42:47,822 --> 00:42:52,900 And I, of course, can't think Colton Ogden enough for his work 705 00:42:52,900 --> 00:42:55,000 in CS50's Introduction to Game Design. 706 00:42:55,000 --> 00:42:58,240 I took that class while I was at Harvard Extension. 707 00:42:58,240 --> 00:43:02,530 And it was instrumental in allowing me to produce the games that I've 708 00:43:02,530 --> 00:43:03,580 produced to this date. 709 00:43:03,580 --> 00:43:08,050 And you can access it there at that URL. 710 00:43:08,050 --> 00:43:10,810 However, do know that as you go in, it is a full course. 711 00:43:10,810 --> 00:43:14,410 So don't fall down the rabbit hole too much as you're 712 00:43:14,410 --> 00:43:17,130 creating your two-week-long game. 713 00:43:17,130 --> 00:43:21,748 So lastly, as parting before we get to your questions-- 714 00:43:21,748 --> 00:43:24,040 and by the way, this is a great chance for those of you 715 00:43:24,040 --> 00:43:25,960 that are here with us live. 716 00:43:25,960 --> 00:43:29,740 If you have questions for us, please direct them to that chat box 717 00:43:29,740 --> 00:43:33,070 now, as we're engaging in the final moments of our time together. 718 00:43:33,070 --> 00:43:36,700 Because I'd love to answer your questions and just say 719 00:43:36,700 --> 00:43:38,480 thank you to you by name. 720 00:43:38,480 --> 00:43:44,350 So how do you avoid the three landmines of small-scope game design? 721 00:43:44,350 --> 00:43:46,900 And this is for, really, I suppose this applies 722 00:43:46,900 --> 00:43:52,630 for really well seasoned programmers as brand new ones alike. 723 00:43:52,630 --> 00:43:56,830 The first landmine is skipping the prototyping stage. 724 00:43:56,830 --> 00:44:01,180 The prototyping stage is where you create a product-- 725 00:44:01,180 --> 00:44:04,090 that is, create a game that is playable-- 726 00:44:04,090 --> 00:44:06,970 that implements the most core game dynamic. 727 00:44:06,970 --> 00:44:09,580 And it is not the prettiest thing. 728 00:44:09,580 --> 00:44:12,440 It is not fancy, probably, in any way at all. 729 00:44:12,440 --> 00:44:18,820 But it's playable and allows you to test to see if the core game dynamic works. 730 00:44:18,820 --> 00:44:22,585 This phase is what tells you whether or not your game is going to work. 731 00:44:22,585 --> 00:44:25,190 732 00:44:25,190 --> 00:44:29,050 Taking a stone and dipping it in chocolate 733 00:44:29,050 --> 00:44:30,830 is not going to make it taste better. 734 00:44:30,830 --> 00:44:32,950 It is still a stone dipped in chocolate. 735 00:44:32,950 --> 00:44:34,898 And so, likewise-- 736 00:44:34,898 --> 00:44:36,190 I appreciate the smile, Bernie. 737 00:44:36,190 --> 00:44:38,200 Thank you. 738 00:44:38,200 --> 00:44:41,920 So that, likewise, prototyping enables you to see, 739 00:44:41,920 --> 00:44:46,780 is this thing viable in its most core state? 740 00:44:46,780 --> 00:44:51,260 Adding on 16 levels of bad is not going to make it better. 741 00:44:51,260 --> 00:44:53,020 It's still a bad game. 742 00:44:53,020 --> 00:44:56,050 And only you can decide, I suppose, if it's 743 00:44:56,050 --> 00:44:59,410 a bad game or not by your own standard. 744 00:44:59,410 --> 00:45:02,890 And then, you can put it out to others and see is it worth it. 745 00:45:02,890 --> 00:45:07,120 Sometimes, what game designers can do is they can really overcommit to an idea 746 00:45:07,120 --> 00:45:10,390 and they get so far down the production pipeline 747 00:45:10,390 --> 00:45:13,120 that it's almost like, I don't want to turn from this bad idea, 748 00:45:13,120 --> 00:45:14,980 because I've just invested so much into it. 749 00:45:14,980 --> 00:45:19,270 If one had taken just the time even a few hours, just a prototype, 750 00:45:19,270 --> 00:45:21,820 we would have seen if this was a good direction or a bad. 751 00:45:21,820 --> 00:45:24,820 Naturally, the big thing we've been talking about today is over scoping. 752 00:45:24,820 --> 00:45:26,800 That is the second land mine, is producing 753 00:45:26,800 --> 00:45:30,340 a game that's just simply too large, beyond your capability, 754 00:45:30,340 --> 00:45:35,290 potentially, but more about your time than about your capability. 755 00:45:35,290 --> 00:45:37,390 Because capability can always be-- 756 00:45:37,390 --> 00:45:39,100 not for an academic course-- 757 00:45:39,100 --> 00:45:42,400 but for business pursuits, you can always outsource creativity. 758 00:45:42,400 --> 00:45:45,700 You can always go find great people that can do work with you. 759 00:45:45,700 --> 00:45:49,130 For those of you that are engaging this in an academic environment, 760 00:45:49,130 --> 00:45:52,280 like a class, such as CS50, you might be working 761 00:45:52,280 --> 00:45:56,690 with a partner who might complement your strengths, complement your weaknesses. 762 00:45:56,690 --> 00:46:00,230 But still, if the game is over scoped in terms of time, 763 00:46:00,230 --> 00:46:02,750 that's going to prevent you from finishing this project. 764 00:46:02,750 --> 00:46:05,930 The final landmine is focusing on features over function. 765 00:46:05,930 --> 00:46:08,550 We've been talking about that all the way through here today. 766 00:46:08,550 --> 00:46:13,970 But I really want to hit home that this is the biggest problem that all game 767 00:46:13,970 --> 00:46:18,320 programmers face, is sometimes they can lose sight of what creates 768 00:46:18,320 --> 00:46:23,570 the essential greatness of their game and try to add 769 00:46:23,570 --> 00:46:26,240 features that get away from that core. 770 00:46:26,240 --> 00:46:31,400 And so focus on the minimal viable, the core dynamic of this game 771 00:46:31,400 --> 00:46:35,900 before you go and create a million features on top of that core dynamic. 772 00:46:35,900 --> 00:46:40,700 So it's with that, beautiful team, that I would love to take your questions. 773 00:46:40,700 --> 00:46:46,790 And I see Ezra is asking, "what are some examples of recent games that 774 00:46:46,790 --> 00:46:50,240 have innovative game mechanics?" 775 00:46:50,240 --> 00:46:52,970 Well, first of all, I pose that to everyone here in the chat box. 776 00:46:52,970 --> 00:46:55,520 Anyone here have some innovative game mechanics 777 00:46:55,520 --> 00:46:58,250 that you would like to bring forward? 778 00:46:58,250 --> 00:47:00,620 And as you're typing those out, like games that 779 00:47:00,620 --> 00:47:03,410 have really innovative game mechanics-- 780 00:47:03,410 --> 00:47:07,580 one thing that I think is really fascinating, there's a game on LOVE 2D 781 00:47:07,580 --> 00:47:18,320 called Stray, and the game dynamic is it is a boiled-down survival 782 00:47:18,320 --> 00:47:22,190 game, the most boiled-down it can be, but it 783 00:47:22,190 --> 00:47:28,610 looks like you're watching the whole thing on a CRT security monitor. 784 00:47:28,610 --> 00:47:34,430 And I think the game dynamic that works so well in that is it 785 00:47:34,430 --> 00:47:37,670 takes all the things we'd expect of a survival game 786 00:47:37,670 --> 00:47:41,520 and it distills it down to its most essential elements. 787 00:47:41,520 --> 00:47:43,580 And when you take something and you distill 788 00:47:43,580 --> 00:47:47,720 it down like that and your brain fills in the gaps, 789 00:47:47,720 --> 00:47:51,140 because it doesn't have anything extra in it, 790 00:47:51,140 --> 00:47:55,940 that is really fun, a really great game dynamic. 791 00:47:55,940 --> 00:47:59,120 As far as the templates for this, number one 792 00:47:59,120 --> 00:48:03,527 is these slides are going to be released on the CS50 website. 793 00:48:03,527 --> 00:48:05,360 If you're watching this on YouTube, there'll 794 00:48:05,360 --> 00:48:09,470 be a link appearing below that where you can also access those files. 795 00:48:09,470 --> 00:48:12,540 And those templates will be there. 796 00:48:12,540 --> 00:48:17,510 In addition to that, if you're talking about the Simple Games Tutorial, 797 00:48:17,510 --> 00:48:19,940 the link is provided in the slides which you'll also 798 00:48:19,940 --> 00:48:23,610 have access to at the conclusion of our time together today. 799 00:48:23,610 --> 00:48:25,910 So this is our final opportunity for any questions. 800 00:48:25,910 --> 00:48:30,000 If you quickly type, I can surely answer your question. 801 00:48:30,000 --> 00:48:33,510 And so my encouragement for all of you, first 802 00:48:33,510 --> 00:48:35,670 of all, number one, what I want you to do 803 00:48:35,670 --> 00:48:38,610 is I want you to dip your toe into LOVE. 804 00:48:38,610 --> 00:48:40,470 And I want you to gut-check-- 805 00:48:40,470 --> 00:48:43,450 is this the framework for me? 806 00:48:43,450 --> 00:48:47,130 Or is there another framework that can potentially 807 00:48:47,130 --> 00:48:51,960 allow you to express yourself more quickly or more in line 808 00:48:51,960 --> 00:48:55,040 with who you are trying to be? 809 00:48:55,040 --> 00:48:59,810 John is saying, "I am self-taught and trying to get a job as soon as I can. 810 00:48:59,810 --> 00:49:02,420 Building a game sounds really fun, but is it 811 00:49:02,420 --> 00:49:04,490 something that many employers want to see 812 00:49:04,490 --> 00:49:07,310 in a portfolio for an entry-level position?" 813 00:49:07,310 --> 00:49:11,210 I would say if it's an entry-level position in game design or game 814 00:49:11,210 --> 00:49:13,230 programming, absolutely. 815 00:49:13,230 --> 00:49:16,670 In fact, I think what, as Romero and Schreiber 816 00:49:16,670 --> 00:49:19,910 both say in their other book, what they're looking for is-- 817 00:49:19,910 --> 00:49:23,210 often, employers are looking for are you creating games, 818 00:49:23,210 --> 00:49:24,800 or is this a theoretical idea? 819 00:49:24,800 --> 00:49:29,000 So, yes, spending a week or two and creating a small-scope game, 820 00:49:29,000 --> 00:49:31,070 that could be really beneficial, John. 821 00:49:31,070 --> 00:49:35,690 If you're asking for a general job, whether it's in computer science 822 00:49:35,690 --> 00:49:39,680 and programming or one of those associated fields, 823 00:49:39,680 --> 00:49:45,710 I would say creating something you can show others is really great, 824 00:49:45,710 --> 00:49:50,960 because, often, the people that are hiring in entry-level positions-- 825 00:49:50,960 --> 00:49:52,790 I suppose it depends where. 826 00:49:52,790 --> 00:49:57,740 If you're talking about a small company, a mid-sized company that's 827 00:49:57,740 --> 00:50:02,090 not traditionally working in computer science or in those associated fields, 828 00:50:02,090 --> 00:50:05,810 the people hiring you might not be entirely familiar with programming. 829 00:50:05,810 --> 00:50:08,260 So being able to show them something is useful. 830 00:50:08,260 --> 00:50:10,010 For those of you, though, that are looking 831 00:50:10,010 --> 00:50:13,827 for entry-level positions in a technology-related field, 832 00:50:13,827 --> 00:50:16,910 and you're probably going to an employer that's hired many people like you 833 00:50:16,910 --> 00:50:19,970 before, they know exactly what they want to ask you. 834 00:50:19,970 --> 00:50:21,650 Is it an absolute necessity? 835 00:50:21,650 --> 00:50:23,120 No, I don't think so. 836 00:50:23,120 --> 00:50:26,540 But your ability to show the type of work you've 837 00:50:26,540 --> 00:50:28,850 done before, that you can manage your time, 838 00:50:28,850 --> 00:50:32,420 that you can manage workflow, and also answer their coding questions. 839 00:50:32,420 --> 00:50:35,550 And we have a great video, by the way, in CS50 about the coding interview. 840 00:50:35,550 --> 00:50:36,800 I think you should also watch. 841 00:50:36,800 --> 00:50:38,840 You can see that on our YouTube channel. 842 00:50:38,840 --> 00:50:40,650 That could be potentially useful as well. 843 00:50:40,650 --> 00:50:43,580 So my encouragement is yes, create a game. 844 00:50:43,580 --> 00:50:48,260 One to two weeks, you'll have something that you can show. 845 00:50:48,260 --> 00:50:49,640 Let's see here. 846 00:50:49,640 --> 00:50:53,420 Nathaniel is saying, "with all the noise in the gaming environment, 847 00:50:53,420 --> 00:50:55,310 what is the best way to break down the noise 848 00:50:55,310 --> 00:50:59,180 and find a new area to focus on a game?" 849 00:50:59,180 --> 00:51:01,430 Gosh, so many different sources. 850 00:51:01,430 --> 00:51:03,290 I would just go to any source of creativity. 851 00:51:03,290 --> 00:51:09,120 I would say the most creative people aren't necessarily the people that 852 00:51:09,120 --> 00:51:12,150 think the most deepest, necessarily. 853 00:51:12,150 --> 00:51:14,340 I think, often, people that are most creative 854 00:51:14,340 --> 00:51:17,950 are those people that notice things more than other people. 855 00:51:17,950 --> 00:51:20,640 And so what I encourage you to do is, as you're walking, 856 00:51:20,640 --> 00:51:22,830 Nathaniel, throughout your life and your day, 857 00:51:22,830 --> 00:51:26,550 is I want you to notice what interests you. 858 00:51:26,550 --> 00:51:31,110 And if you start noticing things that interest you, certain dynamics in life 859 00:51:31,110 --> 00:51:34,710 or certain things that are happening out in the world today, 860 00:51:34,710 --> 00:51:37,710 see if you could somehow bring that into a game. 861 00:51:37,710 --> 00:51:39,930 Because if it interests you in your life, 862 00:51:39,930 --> 00:51:43,342 surely it can be something that would be interesting to others as well. 863 00:51:43,342 --> 00:51:45,300 If we're talking about game marketing, I am not 864 00:51:45,300 --> 00:51:47,100 the person to ask about game marketing. 865 00:51:47,100 --> 00:51:49,350 But there's a lot of great experts out there 866 00:51:49,350 --> 00:51:51,210 that you can most definitely find. 867 00:51:51,210 --> 00:51:56,400 GDC, the Game Developers Conference, is an excellent resource for marketing 868 00:51:56,400 --> 00:51:57,675 and things of that nature. 869 00:51:57,675 --> 00:52:01,790 870 00:52:01,790 --> 00:52:04,515 And forgive me if I get your name incorrectly, Alercio says, 871 00:52:04,515 --> 00:52:06,140 "can I make larger games with LOVE 2D?" 872 00:52:06,140 --> 00:52:07,957 You absolutely can. 873 00:52:07,957 --> 00:52:10,040 You can take the small game you've already created 874 00:52:10,040 --> 00:52:11,060 and create something big. 875 00:52:11,060 --> 00:52:12,185 You can create large games. 876 00:52:12,185 --> 00:52:14,510 In fact, as you go to LOVE 2D's website, you 877 00:52:14,510 --> 00:52:17,960 can most definitely find other games that have done quite well in the space. 878 00:52:17,960 --> 00:52:21,730 879 00:52:21,730 --> 00:52:24,670 Angela is offering that "people want to hear a good story." 880 00:52:24,670 --> 00:52:26,470 Sometimes. 881 00:52:26,470 --> 00:52:28,660 Many of you know games that tell no story. 882 00:52:28,660 --> 00:52:30,280 There's no story at all. 883 00:52:30,280 --> 00:52:33,910 And that's part of the fun, as you fill it in with what you need. 884 00:52:33,910 --> 00:52:36,187 But there's lots of games that have a great story. 885 00:52:36,187 --> 00:52:38,770 And, Angela, it sounds to me like you love games with a story. 886 00:52:38,770 --> 00:52:42,670 So an interesting point while we're talking 887 00:52:42,670 --> 00:52:46,910 about a minimum viable product, the question becomes, how much of a story 888 00:52:46,910 --> 00:52:48,220 can you tell in that? 889 00:52:48,220 --> 00:52:51,310 If this is a two-week-long game that you're creating, 890 00:52:51,310 --> 00:52:53,050 how much story can go in that? 891 00:52:53,050 --> 00:52:57,280 Is the five paragraph background of the main character going to make it? 892 00:52:57,280 --> 00:52:58,360 Probably not. 893 00:52:58,360 --> 00:53:02,053 You probably only have a few sentences to get across that main idea. 894 00:53:02,053 --> 00:53:04,970 Jonathan's asking, "is there a simpler graphical game design framework 895 00:53:04,970 --> 00:53:06,470 for beginners similar to Scratch?" 896 00:53:06,470 --> 00:53:07,980 Well, Scratch is a great one. 897 00:53:07,980 --> 00:53:09,860 I would take a look at Godot. 898 00:53:09,860 --> 00:53:13,160 I would look at GameMaker Studio are all ones that can get you started, 899 00:53:13,160 --> 00:53:15,440 most definitely. 900 00:53:15,440 --> 00:53:20,270 I'll also offer, Jonathan, that it might not be as difficult as you think. 901 00:53:20,270 --> 00:53:23,810 But if you're looking for a graphical game design tool, 902 00:53:23,810 --> 00:53:29,690 GameMaker Studio, as well as Godot might be ones that are helpful. 903 00:53:29,690 --> 00:53:33,200 Unity also has amazing training available. 904 00:53:33,200 --> 00:53:38,120 The docs are really helpful and wonderful. 905 00:53:38,120 --> 00:53:41,560 Ezra's asking, "what are some key things to keep in mind when designing sound 906 00:53:41,560 --> 00:53:42,700 for a game?" 907 00:53:42,700 --> 00:53:44,380 You know, I'm not a huge-- 908 00:53:44,380 --> 00:53:46,720 I'm not a sound expert, but what I would say 909 00:53:46,720 --> 00:53:51,500 is that one is simplicity over anything else. 910 00:53:51,500 --> 00:53:55,060 And if you're looking for someone that is an expert in sound, 911 00:53:55,060 --> 00:53:56,290 I would go find an expert. 912 00:53:56,290 --> 00:54:00,250 Go find someone that's really great in sound design. 913 00:54:00,250 --> 00:54:05,122 You can go on to most musicianal hire websites. 914 00:54:05,122 --> 00:54:07,330 And you'll type in sound design, and there are people 915 00:54:07,330 --> 00:54:09,413 there that you can hire if you're wanting to hire. 916 00:54:09,413 --> 00:54:15,340 If not, go to YouTube and type in "how to design sound for a great game." 917 00:54:15,340 --> 00:54:17,720 There is a great tool-- 918 00:54:17,720 --> 00:54:19,840 in fact, this is one of the unexpected things. 919 00:54:19,840 --> 00:54:25,030 That's why I love Q&A. There is a tool out there called BFXR-- 920 00:54:25,030 --> 00:54:32,470 like Bob, Frank, X like X-ray, R as in ray-- 921 00:54:32,470 --> 00:54:33,170 BFXR. 922 00:54:33,170 --> 00:54:37,910 And this tool is a synthesis tool, like a sound synthesis tool, 923 00:54:37,910 --> 00:54:43,460 and it creates free, usable sound effects for your game. 924 00:54:43,460 --> 00:54:47,000 Like, there's a coin button, and it knows what a coin sounds like, 925 00:54:47,000 --> 00:54:50,450 and it will join, it will hit, it will do a random coin. 926 00:54:50,450 --> 00:54:53,270 If you want a power up, it has power ups there. 927 00:54:53,270 --> 00:54:56,180 And again, I want to think Colton Ogden for pointing that out to me. 928 00:54:56,180 --> 00:54:56,680 BFXR. 929 00:54:56,680 --> 00:54:59,610 930 00:54:59,610 --> 00:55:02,550 So with that, team, I want to say thank you for being here today. 931 00:55:02,550 --> 00:55:06,300 If you want to go deeper in this, I encourage you, first of all, 932 00:55:06,300 --> 00:55:10,170 to check out our offerings here in CS50. 933 00:55:10,170 --> 00:55:13,260 If you're watching this on YouTube, just simply go down below this video 934 00:55:13,260 --> 00:55:16,350 and you're going to see a host of links for you to access. 935 00:55:16,350 --> 00:55:24,310 I would encourage you to delve deep into the next two weeks or so into one 936 00:55:24,310 --> 00:55:28,120 project and not give up on that project unless you're absolutely 937 00:55:28,120 --> 00:55:30,370 sure that it's simply not viable. 938 00:55:30,370 --> 00:55:33,190 And if it isn't, immediately turn around and decide 939 00:55:33,190 --> 00:55:35,800 to create something that's viable and work in that project. 940 00:55:35,800 --> 00:55:39,470 So an absolute honor working with all of you. 941 00:55:39,470 --> 00:55:42,970 And I wish you a great day as you go out and you create the game of your dreams. 942 00:55:42,970 --> 00:55:43,928 Have a great day, team. 943 00:55:43,928 --> 00:55:45,630 Thanks again. 944 00:55:45,630 --> 00:55:47,000