WEBVTT 00:00:00.000 --> 00:00:03.190 align:middle line:90% 00:00:03.190 --> 00:00:04.400 align:middle line:90% GUY WHITE: Hello, everybody. 00:00:04.400 --> 00:00:07.500 align:middle line:90% This is Guy White with Harvard CS50. 00:00:07.500 --> 00:00:09.250 align:middle line:84% And thank you so much for joining us today 00:00:09.250 --> 00:00:14.350 align:middle line:84% with Making Small-Scale 2D Games with LOVE and Lua. 00:00:14.350 --> 00:00:20.530 align:middle line:84% I'm so excited to be with you here today and be presenting this topic. 00:00:20.530 --> 00:00:25.000 align:middle line:84% Before we get started, what I'd like to do is just simply see who's with us 00:00:25.000 --> 00:00:26.560 align:middle line:90% today. 00:00:26.560 --> 00:00:29.480 align:middle line:90% If you would, go to the chat box. 00:00:29.480 --> 00:00:34.210 align:middle line:84% And in that chat box, let's figure out how experienced 00:00:34.210 --> 00:00:36.700 align:middle line:90% you are with game programming. 00:00:36.700 --> 00:00:41.530 align:middle line:84% If you are a die-hard game programmer, and for some reason 00:00:41.530 --> 00:00:44.335 align:middle line:84% you found your way into this introductory seminar, 00:00:44.335 --> 00:00:45.460 align:middle line:90% you're going to put a five. 00:00:45.460 --> 00:00:51.310 align:middle line:84% If you are brand new to the idea of programming games, 00:00:51.310 --> 00:00:54.910 align:middle line:84% you've not programmed games previously, if you'd put a one. 00:00:54.910 --> 00:00:59.410 align:middle line:84% And give yourself a rating somewhere between one and five-- one, brand new; 00:00:59.410 --> 00:01:02.590 align:middle line:84% five, a seasoned expert, you probably could teach this. 00:01:02.590 --> 00:01:04.580 align:middle line:84% Go and pop that in there in the chat box. 00:01:04.580 --> 00:01:08.470 align:middle line:84% And what I'm seeing is lots of ones, a few twos. 00:01:08.470 --> 00:01:11.170 align:middle line:84% And I wanted to say thank you for being here 00:01:11.170 --> 00:01:16.660 align:middle line:84% today, because this seminar is going to offer you the chance 00:01:16.660 --> 00:01:20.800 align:middle line:84% to dip your toe into the world of 2D games 00:01:20.800 --> 00:01:28.750 align:middle line:84% through an amazing framework called LOVE that implements the Lua programming 00:01:28.750 --> 00:01:30.190 align:middle line:90% language. 00:01:30.190 --> 00:01:31.690 align:middle line:90% I am Guy White. 00:01:31.690 --> 00:01:35.560 align:middle line:84% I'm a teacher in Harvard CS50, a teaching fellow at Harvard CS50. 00:01:35.560 --> 00:01:40.030 align:middle line:84% I'm a business owner, and I am a small-scale game designer. 00:01:40.030 --> 00:01:44.500 align:middle line:84% I reside in Portland, Oregon with my three soon-to-be black belt 00:01:44.500 --> 00:01:47.740 align:middle line:90% children and my awesome spouse. 00:01:47.740 --> 00:01:54.880 align:middle line:84% And this presentation is really the culmination, at least for me, 00:01:54.880 --> 00:01:59.740 align:middle line:84% of what led me into wanting to do game making, 00:01:59.740 --> 00:02:05.950 align:middle line:84% and how could I assist you in avoiding some of the major roadblocks that 00:02:05.950 --> 00:02:10.479 align:middle line:84% get in the way when you are getting your start in game design and game 00:02:10.479 --> 00:02:12.740 align:middle line:90% programming. 00:02:12.740 --> 00:02:14.960 align:middle line:90% I want to thank you for your time. 00:02:14.960 --> 00:02:17.590 align:middle line:84% I want to give you my commitment today that I'm 00:02:17.590 --> 00:02:21.520 align:middle line:84% going to do everything in my power to hand you as much as I possibly 00:02:21.520 --> 00:02:24.520 align:middle line:90% can during this about one-hour session. 00:02:24.520 --> 00:02:28.090 align:middle line:84% And I give you that commitment with the idea that at the end, 00:02:28.090 --> 00:02:30.670 align:middle line:84% I'm going to be providing you some resources about where 00:02:30.670 --> 00:02:33.010 align:middle line:90% you can take this next. 00:02:33.010 --> 00:02:37.630 align:middle line:84% Here, in this CS50 ecosystem, there are plenty of supports for you 00:02:37.630 --> 00:02:39.100 align:middle line:90% to take this work further. 00:02:39.100 --> 00:02:42.620 align:middle line:84% And I'm really excited to share those with you. 00:02:42.620 --> 00:02:47.800 align:middle line:84% I grew up in the golden age of console gaming. 00:02:47.800 --> 00:02:50.440 align:middle line:84% I grew up in the golden age of PC gaming, 00:02:50.440 --> 00:02:56.170 align:middle line:84% where games were relatively small, they were often expensive. 00:02:56.170 --> 00:03:00.490 align:middle line:84% You would go to stores and there would be boxes on the shelves 00:03:00.490 --> 00:03:03.220 align:middle line:84% that you would peruse, and you would make 00:03:03.220 --> 00:03:09.400 align:middle line:84% your selection based upon, usually, the box art and the type 00:03:09.400 --> 00:03:11.350 align:middle line:90% on the back of those boxes. 00:03:11.350 --> 00:03:13.690 align:middle line:84% During that time, when I was exposed, and maybe you 00:03:13.690 --> 00:03:16.780 align:middle line:84% can relate, where you first got into gaming, 00:03:16.780 --> 00:03:22.390 align:middle line:84% where you really longed for a teacher to teach you about how to get 00:03:22.390 --> 00:03:24.940 align:middle line:90% started in game design and programming. 00:03:24.940 --> 00:03:28.840 align:middle line:84% Now, in my 30s as I sort of entered into my, 00:03:28.840 --> 00:03:32.170 align:middle line:84% I guess, second or third career with programming. 00:03:32.170 --> 00:03:36.490 align:middle line:84% And through Harvard Extension School, initially dipping my toe 00:03:36.490 --> 00:03:40.570 align:middle line:84% into the edX world, I really wanted someone 00:03:40.570 --> 00:03:45.820 align:middle line:84% to hand me a pathway where I can make my own games 00:03:45.820 --> 00:03:49.580 align:middle line:84% and bring my own creations out into the world. 00:03:49.580 --> 00:03:52.330 align:middle line:84% And now, finally, when I started my first game, 00:03:52.330 --> 00:03:56.440 align:middle line:84% when I was taking Harvard CS50, I really wanted to make sure 00:03:56.440 --> 00:03:59.650 align:middle line:90% that all my time was properly invested. 00:03:59.650 --> 00:04:03.460 align:middle line:84% Because for those of you that are engaged right now in Harvard CS50, 00:04:03.460 --> 00:04:06.850 align:middle line:84% whether through Harvard Extension School or through our edX 00:04:06.850 --> 00:04:11.770 align:middle line:84% platform or OpenCourseWare, you know how much of a time commitment 00:04:11.770 --> 00:04:13.480 align:middle line:90% a lot of this work is. 00:04:13.480 --> 00:04:16.510 align:middle line:84% My hope is that, through the steps that we talk about today, 00:04:16.510 --> 00:04:18.850 align:middle line:84% that you're going to feel like, OK, not only do 00:04:18.850 --> 00:04:21.700 align:middle line:84% I know how to get started in game design, 00:04:21.700 --> 00:04:25.720 align:middle line:84% but I really know how not to waste time in the process. 00:04:25.720 --> 00:04:30.385 align:middle line:84% This seminar is specifically for you if you're interested in 2D game design. 00:04:30.385 --> 00:04:33.010 align:middle line:84% Though, surely, much of what we're going to be discussing today 00:04:33.010 --> 00:04:36.440 align:middle line:90% is applicable to the 3D world, as well. 00:04:36.440 --> 00:04:40.690 align:middle line:84% And you want to create a very clear, or at least 00:04:40.690 --> 00:04:44.740 align:middle line:84% find a very clear, worthwhile, pathway that will help you 00:04:44.740 --> 00:04:46.390 align:middle line:90% in getting that game started. 00:04:46.390 --> 00:04:49.510 align:middle line:84% And you want to make sure you're not wasting your time. 00:04:49.510 --> 00:04:53.590 align:middle line:84% Today, we have three, I guess four objectives today. 00:04:53.590 --> 00:04:58.390 align:middle line:84% First, I'm going to be talking about how to design a small-scope game that 00:04:58.390 --> 00:05:00.670 align:middle line:90% can be created within only 14 days. 00:05:00.670 --> 00:05:02.410 align:middle line:90% These are not massive projects. 00:05:02.410 --> 00:05:06.680 align:middle line:84% These are ones that you could probably use for if you're in a computer science 00:05:06.680 --> 00:05:07.180 align:middle line:90% class. 00:05:07.180 --> 00:05:11.500 align:middle line:84% If you're in CS50, you could probably use this for your final project. 00:05:11.500 --> 00:05:14.380 align:middle line:84% Or another small-scale project that you'd 00:05:14.380 --> 00:05:16.807 align:middle line:84% like to work on with a short turnaround time. 00:05:16.807 --> 00:05:18.640 align:middle line:84% We're going to talk about how to get started 00:05:18.640 --> 00:05:25.010 align:middle line:84% using the LOVE 2D framework to create that 2D game of your initial dreams. 00:05:25.010 --> 00:05:28.180 align:middle line:84% And we're going to end today by talking about the three 00:05:28.180 --> 00:05:32.350 align:middle line:84% landmines of small-scope game design that get in the way of programmers 00:05:32.350 --> 00:05:34.480 align:middle line:90% finishing, game designers finishing. 00:05:34.480 --> 00:05:38.020 align:middle line:84% And a fourth and final objective our time together is I 00:05:38.020 --> 00:05:41.560 align:middle line:84% want to provide some opportunity for you to ask some questions. 00:05:41.560 --> 00:05:44.590 align:middle line:84% That chat box is right down there right now. 00:05:44.590 --> 00:05:49.660 align:middle line:84% And I want to tell you that you can be asking questions throughout. 00:05:49.660 --> 00:05:51.430 align:middle line:84% Many of the questions, though, we're going 00:05:51.430 --> 00:05:53.950 align:middle line:84% to be addressing there at the end of the session, probably 00:05:53.950 --> 00:05:57.110 align:middle line:90% in about 30 or 40 minutes or so. 00:05:57.110 --> 00:06:04.240 align:middle line:84% So with that, I'd like us to jump in to how to design a small-scope game that 00:06:04.240 --> 00:06:07.490 align:middle line:90% can be created within 14 days. 00:06:07.490 --> 00:06:12.920 align:middle line:84% Now, to that chat box, I would like all of you to take a stab at this. 00:06:12.920 --> 00:06:17.350 align:middle line:84% What do you think that scope means, in terms of game design? 00:06:17.350 --> 00:06:18.790 align:middle line:90% What is scope? 00:06:18.790 --> 00:06:20.860 align:middle line:90% And why might that be important? 00:06:20.860 --> 00:06:25.643 align:middle line:84% Just your quick one, two, three word definition is perfectly fine. 00:06:25.643 --> 00:06:28.310 align:middle line:84% If you want to write a paragraph in that chat box, that is fine. 00:06:28.310 --> 00:06:31.970 align:middle line:84% But I probably won't see it in time before I hit the next three slides. 00:06:31.970 --> 00:06:35.890 align:middle line:90% So one, two, or three word definition. 00:06:35.890 --> 00:06:37.390 align:middle line:90% Yeah, "your aim," Maria says. 00:06:37.390 --> 00:06:38.950 align:middle line:90% Thank you, Maria, for that. 00:06:38.950 --> 00:06:39.970 align:middle line:90% "Who will play?" 00:06:39.970 --> 00:06:43.540 align:middle line:84% Cecilia says Connell says, "the entire idea." 00:06:43.540 --> 00:06:46.960 align:middle line:90% And most definitely what scope is-- 00:06:46.960 --> 00:06:54.160 align:middle line:84% it's defined as the extent of a player's possible in-game activity. 00:06:54.160 --> 00:06:57.550 align:middle line:84% The extent of the players in-game activity 00:06:57.550 --> 00:07:01.840 align:middle line:84% that is going to create certain restrictions 00:07:01.840 --> 00:07:05.660 align:middle line:84% and demands upon the person that's creating the game. 00:07:05.660 --> 00:07:10.600 align:middle line:84% So I want you to think about the games that you enjoy right now. 00:07:10.600 --> 00:07:13.510 align:middle line:84% I want you to, in your mind, start envisioning 00:07:13.510 --> 00:07:17.890 align:middle line:84% what games have led you to this seminar today. 00:07:17.890 --> 00:07:21.170 align:middle line:84% And as you're thinking about that, I want you to ask yourself, 00:07:21.170 --> 00:07:23.530 align:middle line:90% is this a small-scope game? 00:07:23.530 --> 00:07:28.480 align:middle line:84% A tight game, where, essentially, it can be played within a matter of minutes? 00:07:28.480 --> 00:07:33.610 align:middle line:84% Or is this a massive-scope game, games that can take hundreds of hours to play 00:07:33.610 --> 00:07:39.040 align:middle line:84% and probably took thousands of individuals-- 00:07:39.040 --> 00:07:41.950 align:middle line:90% without exaggeration-- years to program. 00:07:41.950 --> 00:07:48.040 align:middle line:84% A lot of those big blockbuster games often can be just like that. 00:07:48.040 --> 00:07:54.550 align:middle line:84% You see, the most common and persistent mistake that game designers can make 00:07:54.550 --> 00:08:00.700 align:middle line:84% is overcommitment to the scope of the game. 00:08:00.700 --> 00:08:04.360 align:middle line:84% Usually, those overcommitments in scope often 00:08:04.360 --> 00:08:08.800 align:middle line:84% come in terms of the features that are in the game, 00:08:08.800 --> 00:08:13.540 align:middle line:90% the artwork of the game, the storyline. 00:08:13.540 --> 00:08:16.720 align:middle line:84% Often, the expanse of the in-game universe that you're creating 00:08:16.720 --> 00:08:22.000 align:middle line:84% can often be places where you or any other game designer 00:08:22.000 --> 00:08:24.880 align:middle line:90% might find themselves overcommitting. 00:08:24.880 --> 00:08:31.320 align:middle line:84% When you think about it, chances are you're on some sort of time frame. 00:08:31.320 --> 00:08:34.710 align:middle line:84% You might be somewhat on your own, just learning 00:08:34.710 --> 00:08:36.690 align:middle line:90% about computer science on your own. 00:08:36.690 --> 00:08:41.640 align:middle line:84% You might be engaged with one of our classes here at CS50. 00:08:41.640 --> 00:08:47.250 align:middle line:84% But a challenge is that you want to do useful things within a useful time 00:08:47.250 --> 00:08:48.220 align:middle line:90% period. 00:08:48.220 --> 00:08:52.230 align:middle line:84% So in your mind right now, I want to budget you. 00:08:52.230 --> 00:08:55.140 align:middle line:84% I want to ask you really directly, how much time 00:08:55.140 --> 00:09:02.280 align:middle line:84% are you willing to invest in this first project into 2D gaming? 00:09:02.280 --> 00:09:06.990 align:middle line:84% Are you willing to invest years in this first project? 00:09:06.990 --> 00:09:13.470 align:middle line:84% Or is this something small, something that you can get your effort behind, 00:09:13.470 --> 00:09:15.420 align:middle line:90% organize your time around? 00:09:15.420 --> 00:09:17.970 align:middle line:84% And so, in your mind right now, consider-- 00:09:17.970 --> 00:09:20.370 align:middle line:84% is this a two-week project that I'm working on? 00:09:20.370 --> 00:09:21.660 align:middle line:90% Is this a three or four-week? 00:09:21.660 --> 00:09:24.570 align:middle line:84% Or is this a many month project that I'm working on? 00:09:24.570 --> 00:09:27.030 align:middle line:84% And chances are, if it's your first game, 00:09:27.030 --> 00:09:32.700 align:middle line:84% I would implore you to choose a small time frame, somewhere probably around 00:09:32.700 --> 00:09:36.780 align:middle line:90% 14 days, maybe 10 days at most. 00:09:36.780 --> 00:09:39.570 align:middle line:84% The big question that I hope you have on your mind 00:09:39.570 --> 00:09:42.830 align:middle line:84% is, how, then, do I make sure that I'm not 00:09:42.830 --> 00:09:46.890 align:middle line:84% overcommitting to a game scope that's going to exceed my capabilities 00:09:46.890 --> 00:09:48.480 align:middle line:90% and my available time? 00:09:48.480 --> 00:09:50.970 align:middle line:84% Because, indeed, one of the worst things that could happen 00:09:50.970 --> 00:09:55.680 align:middle line:84% is that you get into this project some direction and then you give up 00:09:55.680 --> 00:09:57.360 align:middle line:90% and you walk away. 00:09:57.360 --> 00:10:05.680 align:middle line:84% It's those unfinished ideas that often become like cuts in oneself, where 00:10:05.680 --> 00:10:09.970 align:middle line:84% I have this unfinished project that I didn't bring to fruition, 00:10:09.970 --> 00:10:13.960 align:middle line:84% and, accordingly, I'm less likely to bring my future projects into fruition, 00:10:13.960 --> 00:10:18.310 align:middle line:84% because I started developing this habit of not finishing. 00:10:18.310 --> 00:10:25.510 align:middle line:84% So there are three steps that I'd like to discuss about preventing 00:10:25.510 --> 00:10:27.640 align:middle line:90% that level of overcommitment. 00:10:27.640 --> 00:10:31.420 align:middle line:84% And that first step in making sure you don't overcommit 00:10:31.420 --> 00:10:40.300 align:middle line:84% is taking stock of the game dynamic that is the core of your desire for a game. 00:10:40.300 --> 00:10:43.930 align:middle line:84% Now, you might be asking, well, what is a game dynamic? 00:10:43.930 --> 00:10:53.370 align:middle line:84% A game dynamic is essentially what the basic gameplay is about. 00:10:53.370 --> 00:10:57.480 align:middle line:84% I want you to picture any sport that you might have played recently, 00:10:57.480 --> 00:10:59.130 align:middle line:90% or perhaps as a child. 00:10:59.130 --> 00:11:03.600 align:middle line:84% There are a certain set of dynamics that go 00:11:03.600 --> 00:11:09.390 align:middle line:84% into making a game a game, like catching a ball, or throwing a ball, 00:11:09.390 --> 00:11:14.280 align:middle line:84% or throwing a ball at a target, putting a ball in a hole, 00:11:14.280 --> 00:11:19.500 align:middle line:84% keeping a ball out of a hole, touching your opponent, 00:11:19.500 --> 00:11:22.830 align:middle line:84% running away and not being touched by your opponent, 00:11:22.830 --> 00:11:28.020 align:middle line:84% hiding or finding your opponent, hiding from or finding your opponent, 00:11:28.020 --> 00:11:30.960 align:middle line:84% avoiding an obstacle, amongst many others. 00:11:30.960 --> 00:11:34.210 align:middle line:84% And these are the things that make games fun. 00:11:34.210 --> 00:11:42.240 align:middle line:84% And at the core of every game, there is some sort of core game dynamic. 00:11:42.240 --> 00:11:45.960 align:middle line:84% The authors Romero and Schreiber, in their book, 00:11:45.960 --> 00:11:52.380 align:middle line:84% Challenges for Game Designers, they talk about 10 core game dynamics. 00:11:52.380 --> 00:11:58.740 align:middle line:84% And those core dynamics are quite familiar to if you think about some 00:11:58.740 --> 00:12:03.570 align:middle line:84% of your favorite games, games that involve territorial acquisition, 00:12:03.570 --> 00:12:09.090 align:middle line:84% prediction, spatial reasoning, survival, perhaps is a type of game you really 00:12:09.090 --> 00:12:14.940 align:middle line:84% enjoy playing, destruction, collection-- my Pokémon fans-- 00:12:14.940 --> 00:12:18.810 align:middle line:84% chasing or evading, trading, and race to the end 00:12:18.810 --> 00:12:23.410 align:middle line:84% are common core game dynamics that you might be used to. 00:12:23.410 --> 00:12:27.600 align:middle line:84% And so, right now, I want you to start thinking about, what 00:12:27.600 --> 00:12:30.550 align:middle line:90% is my game going to be about? 00:12:30.550 --> 00:12:35.800 align:middle line:84% Could I distill-- could you distill your game down 00:12:35.800 --> 00:12:40.270 align:middle line:90% to one of these 10 core game dynamics? 00:12:40.270 --> 00:12:43.520 align:middle line:84% And so go ahead and go to the chat box when 00:12:43.520 --> 00:12:49.540 align:middle line:84% you think that you have chosen yours as we talk just for a minute about Mario. 00:12:49.540 --> 00:12:53.650 align:middle line:84% So if you think about Mario, the core game dynamic 00:12:53.650 --> 00:12:59.170 align:middle line:84% is mostly avoiding being touched, avoiding being touched. 00:12:59.170 --> 00:13:01.780 align:middle line:84% Now, it just so happens that there is the option 00:13:01.780 --> 00:13:03.950 align:middle line:90% to stomp on top of your enemies. 00:13:03.950 --> 00:13:07.480 align:middle line:84% But in general, Mario is all about not being 00:13:07.480 --> 00:13:12.080 align:middle line:84% touched by these evil characters that are running around the screen. 00:13:12.080 --> 00:13:16.540 align:middle line:84% And for those of you that were exposed to this game as a child, 00:13:16.540 --> 00:13:21.790 align:middle line:84% or even perhaps recently if you have a classic system, in that opening 00:13:21.790 --> 00:13:27.850 align:middle line:84% frame of this game, you're presented with a coin box and a platform 00:13:27.850 --> 00:13:31.300 align:middle line:84% and a Goomba, a little enemy walking towards you. 00:13:31.300 --> 00:13:37.330 align:middle line:84% And chances are in those first moments that you played, 00:13:37.330 --> 00:13:41.950 align:middle line:84% you ran right into that Goomba sideways and you died. 00:13:41.950 --> 00:13:43.970 align:middle line:90% And the game started over again. 00:13:43.970 --> 00:13:48.160 align:middle line:84% So right away, Mario sets up this game dynamic 00:13:48.160 --> 00:13:52.360 align:middle line:84% that there are objects that we can touch and are OK 00:13:52.360 --> 00:13:56.080 align:middle line:84% and other things onscreen that we can touch and they are not OK. 00:13:56.080 --> 00:13:59.560 align:middle line:84% And we are basically on an obstacle course. 00:13:59.560 --> 00:14:05.080 align:middle line:84% It is, in a way, a race to the end game, where the dynamic is don't be touched. 00:14:05.080 --> 00:14:07.900 align:middle line:84% And that makes this game what it is today. 00:14:07.900 --> 00:14:13.120 align:middle line:84% If this game was anything else, if it was territorial acquisition, 00:14:13.120 --> 00:14:15.760 align:middle line:90% this would not be Mario as we know it. 00:14:15.760 --> 00:14:19.010 align:middle line:90% It becomes an entirely different game. 00:14:19.010 --> 00:14:23.080 align:middle line:84% So as you take a look at these game dynamics, 00:14:23.080 --> 00:14:26.530 align:middle line:84% my beautiful people, please go and take one of these 00:14:26.530 --> 00:14:29.320 align:middle line:84% and write down in the chat box, which one do you 00:14:29.320 --> 00:14:31.848 align:middle line:90% think that you are going to be pursuing. 00:14:31.848 --> 00:14:34.390 align:middle line:84% And for those of you that are listening to this on recording, 00:14:34.390 --> 00:14:38.800 align:middle line:84% whether on YouTube or one of our websites, what I would just simply say 00:14:38.800 --> 00:14:43.060 align:middle line:84% is take notes on your side about what we're talking about during this time. 00:14:43.060 --> 00:14:44.085 align:middle line:90% And I'll be cuing you. 00:14:44.085 --> 00:14:46.210 align:middle line:84% As I'm saying to write things down in the chat box, 00:14:46.210 --> 00:14:50.620 align:middle line:84% probably a great thing to write down on your side. 00:14:50.620 --> 00:14:53.380 align:middle line:84% And so lots of-- wow, lots of race to the ends here. 00:14:53.380 --> 00:14:54.700 align:middle line:90% And a few survival people. 00:14:54.700 --> 00:14:56.410 align:middle line:90% And one spatial reasoning. 00:14:56.410 --> 00:14:57.470 align:middle line:90% Really great. 00:14:57.470 --> 00:15:01.240 align:middle line:84% So the second step in making sure that the scope of your game 00:15:01.240 --> 00:15:04.150 align:middle line:84% is just right, probably for about a two-week game, 00:15:04.150 --> 00:15:07.600 align:middle line:84% is to take stock of what you'd like to create. 00:15:07.600 --> 00:15:12.410 align:middle line:84% And, in general, when you're thinking about this, 00:15:12.410 --> 00:15:16.510 align:middle line:84% you would probably think about it in terms of game features. 00:15:16.510 --> 00:15:20.650 align:middle line:84% This becomes a dangerous area for us as game designers 00:15:20.650 --> 00:15:24.070 align:middle line:84% or as programmers, because it can be really tempting when you're 00:15:24.070 --> 00:15:30.310 align:middle line:84% working on your own or in a small team to load up on features as an overcommit 00:15:30.310 --> 00:15:34.030 align:middle line:84% to the number of features that are going to be present in your game. 00:15:34.030 --> 00:15:36.820 align:middle line:84% I want you to think about some really core questions right now. 00:15:36.820 --> 00:15:41.050 align:middle line:84% I want you to think about this game that you're producing. 00:15:41.050 --> 00:15:43.540 align:middle line:90% What is this game about, anyway? 00:15:43.540 --> 00:15:48.600 align:middle line:90% And how does one win the game? 00:15:48.600 --> 00:15:50.440 align:middle line:90% How does one play the game? 00:15:50.440 --> 00:15:53.340 align:middle line:90% What are the basic gameplay rules? 00:15:53.340 --> 00:15:56.910 align:middle line:84% And what are those features that are going 00:15:56.910 --> 00:16:01.770 align:middle line:84% to be in your game that support that core dynamic? 00:16:01.770 --> 00:16:04.250 align:middle line:84% And so linking us to what we were discussing before, 00:16:04.250 --> 00:16:11.210 align:middle line:84% if your game has a core dynamic, a specific purpose for playing 00:16:11.210 --> 00:16:15.870 align:middle line:84% the game, what are the bare number of features 00:16:15.870 --> 00:16:18.610 align:middle line:90% that you would need to accomplish that? 00:16:18.610 --> 00:16:19.660 align:middle line:90% How do you win the game? 00:16:19.660 --> 00:16:21.060 align:middle line:90% And how do you play it? 00:16:21.060 --> 00:16:25.620 align:middle line:84% And it's that, those essential pieces, that 00:16:25.620 --> 00:16:30.630 align:middle line:84% become the start of a very tight game, a game 00:16:30.630 --> 00:16:34.900 align:middle line:84% that you, perhaps, could produce in your limited time. 00:16:34.900 --> 00:16:37.260 align:middle line:84% Now, there are a lot of different game features 00:16:37.260 --> 00:16:39.660 align:middle line:90% that you'd have to pay attention to. 00:16:39.660 --> 00:16:41.940 align:middle line:84% You'd have to ask yourself about the player. 00:16:41.940 --> 00:16:43.380 align:middle line:90% Who is the player? 00:16:43.380 --> 00:16:46.270 align:middle line:90% And how does the player move? 00:16:46.270 --> 00:16:49.680 align:middle line:84% What's the environment in which the player is living? 00:16:49.680 --> 00:16:54.820 align:middle line:84% And are there other characters that that player is going to be interacting with? 00:16:54.820 --> 00:16:59.860 align:middle line:84% A concern that tends to come up rather quick in one's work is the artwork. 00:16:59.860 --> 00:17:06.970 align:middle line:84% And, often, programmers can get distracted in that artwork, 00:17:06.970 --> 00:17:09.280 align:middle line:84% and sort of live there instead of working 00:17:09.280 --> 00:17:11.050 align:middle line:90% on the core dynamic of their game. 00:17:11.050 --> 00:17:16.030 align:middle line:84% The abilities of the characters and the player also become of interest. 00:17:16.030 --> 00:17:19.510 align:middle line:84% The levels in which they are going to be working, the power ups they can get, 00:17:19.510 --> 00:17:21.190 align:middle line:90% and the score that they can get. 00:17:21.190 --> 00:17:26.140 align:middle line:84% These are all pieces about what makes your game unique and yours. 00:17:26.140 --> 00:17:32.380 align:middle line:84% For example, if we think about probably my favorite open-source game, 00:17:32.380 --> 00:17:35.250 align:middle line:90% Endless Sky-- 00:17:35.250 --> 00:17:36.270 align:middle line:90% pretty amazing. 00:17:36.270 --> 00:17:38.670 align:middle line:84% This is designed as an open-source game that you 00:17:38.670 --> 00:17:43.920 align:middle line:84% can download right now for free, available on great Steam 00:17:43.920 --> 00:17:46.020 align:middle line:90% applications everywhere. 00:17:46.020 --> 00:17:51.540 align:middle line:84% We have a game where a player is in their own shuttle, 00:17:51.540 --> 00:17:59.370 align:middle line:84% and they're floating in this star system amongst this seemingly endless 00:17:59.370 --> 00:18:00.720 align:middle line:90% universe. 00:18:00.720 --> 00:18:03.960 align:middle line:84% And they're alongside other NPC ships that 00:18:03.960 --> 00:18:10.260 align:middle line:84% are attacking them, or stealing items from them, engaging in trade with them, 00:18:10.260 --> 00:18:15.210 align:middle line:84% drawn with this high-density, professional art. 00:18:15.210 --> 00:18:18.810 align:middle line:84% And every single one of these ships-- enemy ships and the main ship-- 00:18:18.810 --> 00:18:24.120 align:middle line:84% are able to expand their capabilities using thousands of different power ups. 00:18:24.120 --> 00:18:29.190 align:middle line:84% And you, with your own whimsy, get to decide where in this universe 00:18:29.190 --> 00:18:30.930 align:middle line:90% you are able to travel. 00:18:30.930 --> 00:18:33.450 align:middle line:84% Hundreds and hundreds of star systems, searching 00:18:33.450 --> 00:18:37.020 align:middle line:84% for power ups, all for the purpose of building 00:18:37.020 --> 00:18:39.120 align:middle line:90% the ultimate fleet of your own. 00:18:39.120 --> 00:18:43.530 align:middle line:84% And you can understand how confusing and how big 00:18:43.530 --> 00:18:47.490 align:middle line:84% this project can get if you're not reigning in each one of those features. 00:18:47.490 --> 00:18:51.960 align:middle line:84% Because, in the end, you could end up with designing a game 00:18:51.960 --> 00:18:55.290 align:middle line:84% that could take hundreds of individuals or thousands of individuals years 00:18:55.290 --> 00:18:55.890 align:middle line:90% to create. 00:18:55.890 --> 00:19:00.060 align:middle line:84% That game might be in your mind, but what is the specific type of game 00:19:00.060 --> 00:19:03.030 align:middle line:84% that you are capable in making in the time frame 00:19:03.030 --> 00:19:05.770 align:middle line:90% that you have available to you? 00:19:05.770 --> 00:19:09.835 align:middle line:84% And so, likewise-- if I can get to my next slide-- 00:19:09.835 --> 00:19:13.050 align:middle line:90% 00:19:13.050 --> 00:19:14.335 align:middle line:90% that's always interesting. 00:19:14.335 --> 00:19:17.660 align:middle line:90% 00:19:17.660 --> 00:19:19.010 align:middle line:90% This is Death by Layers' team. 00:19:19.010 --> 00:19:24.120 align:middle line:90% 00:19:24.120 --> 00:19:25.470 align:middle line:90% There we go. 00:19:25.470 --> 00:19:27.990 align:middle line:84% So let's think about game features for a moment. 00:19:27.990 --> 00:19:29.460 align:middle line:90% Let's think about Mario. 00:19:29.460 --> 00:19:36.550 align:middle line:84% So in Mario, we have dozens upon dozens of levels-- just the original Mario. 00:19:36.550 --> 00:19:40.055 align:middle line:84% So you as a game designer, I want you to make some guesses. 00:19:40.055 --> 00:19:41.680 align:middle line:90% Yeah, "the meme broke it," Angela said. 00:19:41.680 --> 00:19:44.550 align:middle line:90% Yep, the meme did break it. 00:19:44.550 --> 00:19:48.720 align:middle line:84% I want you to think about if you were a game designer 00:19:48.720 --> 00:19:52.050 align:middle line:84% and you were creating a game within two weeks, 00:19:52.050 --> 00:19:56.280 align:middle line:84% what will you have to do to make it possible to create something like Mario 00:19:56.280 --> 00:19:58.250 align:middle line:90% in that short amount of time? 00:19:58.250 --> 00:20:01.520 align:middle line:84% Well, you probably the first step that you would take 00:20:01.520 --> 00:20:05.090 align:middle line:84% is you would look at all these levels that you potentially create and you 00:20:05.090 --> 00:20:07.070 align:middle line:84% probably would limit it just down to one. 00:20:07.070 --> 00:20:10.520 align:middle line:84% You would say, given that this is two weeks long, 00:20:10.520 --> 00:20:11.990 align:middle line:90% I'm just going to take only-- 00:20:11.990 --> 00:20:16.380 align:middle line:84% of all the different things I could do, I'm just going to create one level. 00:20:16.380 --> 00:20:20.720 align:middle line:84% In fact, just to get started, rather than doing one level, 00:20:20.720 --> 00:20:24.980 align:middle line:84% I'm saying do one frame, one little piece of that giant level. 00:20:24.980 --> 00:20:28.430 align:middle line:84% So that way, I can get the core game dynamic down 00:20:28.430 --> 00:20:33.430 align:middle line:84% and get it working before I expand out to something greater if I have time. 00:20:33.430 --> 00:20:37.000 align:middle line:84% Indeed, rather than having all the different Marios 00:20:37.000 --> 00:20:38.380 align:middle line:90% you could possibly have-- 00:20:38.380 --> 00:20:41.530 align:middle line:90% small Mario, big Mario, fire Mario-- 00:20:41.530 --> 00:20:45.580 align:middle line:84% you would say, you know what, just for this project for the next two weeks, 00:20:45.580 --> 00:20:47.900 align:middle line:90% just small Mario. 00:20:47.900 --> 00:20:51.980 align:middle line:84% Likewise you think about in Mario there are dozens and dozens 00:20:51.980 --> 00:20:54.380 align:middle line:90% of potential bad guys. 00:20:54.380 --> 00:20:58.490 align:middle line:84% I guess in the original Mario, there's only about a dozen or so characters. 00:20:58.490 --> 00:21:02.420 align:middle line:84% And you would probably just resort down to one. 00:21:02.420 --> 00:21:05.060 align:middle line:84% One single character would be in the game. 00:21:05.060 --> 00:21:07.730 align:middle line:84% And by doing this, what you're essentially 00:21:07.730 --> 00:21:13.610 align:middle line:84% doing is taking all of this what could be and boiling it down, saying, 00:21:13.610 --> 00:21:16.040 align:middle line:84% what is the core game dynamic that I want 00:21:16.040 --> 00:21:19.040 align:middle line:84% to communicate in my game that is possible for me 00:21:19.040 --> 00:21:22.760 align:middle line:84% to produce in this two-week or so time period? 00:21:22.760 --> 00:21:25.340 align:middle line:90% And you think about it-- 00:21:25.340 --> 00:21:29.760 align:middle line:84% a finished prototype of this game that you potentially amp up into something 00:21:29.760 --> 00:21:33.630 align:middle line:84% greater is far more effective than an unfinished, massive game 00:21:33.630 --> 00:21:37.200 align:middle line:90% that you attempted but never finish. 00:21:37.200 --> 00:21:41.750 align:middle line:84% So step three, step three of producing a game that is of the correct scope 00:21:41.750 --> 00:21:45.000 align:middle line:84% would be to reduce the game down to that minimal viable product. 00:21:45.000 --> 00:21:47.270 align:middle line:90% And so the way to do that-- 00:21:47.270 --> 00:21:52.440 align:middle line:84% when I say minimal viable product I want you to think about 00:21:52.440 --> 00:21:56.690 align:middle line:84% if you are producing something for the marketplace, 00:21:56.690 --> 00:21:59.860 align:middle line:84% what is the minimum product that you could create 00:21:59.860 --> 00:22:03.000 align:middle line:90% that could be viable in and of itself? 00:22:03.000 --> 00:22:08.190 align:middle line:84% One of the big games that I was interacting with early on 00:22:08.190 --> 00:22:10.020 align:middle line:90% was Minecraft. 00:22:10.020 --> 00:22:13.830 align:middle line:84% And you got to think about what makes Minecraft a great game. 00:22:13.830 --> 00:22:16.500 align:middle line:84% For those of you that have played Minecraft, go to that chat box 00:22:16.500 --> 00:22:20.070 align:middle line:84% and tell me, in one or two words, what makes-- 00:22:20.070 --> 00:22:24.278 align:middle line:84% I'll give you three, even-- what makes Minecraft a great game? 00:22:24.278 --> 00:22:25.320 align:middle line:90% One, two, or three words. 00:22:25.320 --> 00:22:28.280 align:middle line:90% 00:22:28.280 --> 00:22:30.065 align:middle line:90% "Voxels," someone says. 00:22:30.065 --> 00:22:34.340 align:middle line:90% 00:22:34.340 --> 00:22:36.110 align:middle line:90% "The freedom you have." 00:22:36.110 --> 00:22:36.740 align:middle line:90% Absolutely. 00:22:36.740 --> 00:22:39.140 align:middle line:84% "Open-endedness creativity, and exploring." 00:22:39.140 --> 00:22:48.180 align:middle line:84% And notice that we just took this game that has loads of features 00:22:48.180 --> 00:22:50.700 align:middle line:90% and we boiled it down to a core dynamic. 00:22:50.700 --> 00:22:55.410 align:middle line:84% And that core dynamic is something around freedom and exploration. 00:22:55.410 --> 00:22:58.950 align:middle line:90% You're able to do something creatively. 00:22:58.950 --> 00:23:01.120 align:middle line:90% What does it take to do that? 00:23:01.120 --> 00:23:05.460 align:middle line:84% I mean, now, of course, Minecraft is completely massive in a way 00:23:05.460 --> 00:23:07.230 align:middle line:90% that I can't even comprehend. 00:23:07.230 --> 00:23:10.360 align:middle line:84% But if you were designing something of that, 00:23:10.360 --> 00:23:13.312 align:middle line:84% imagine the features that would make it in the game 00:23:13.312 --> 00:23:16.020 align:middle line:84% and that wouldn't make it in the game in your two-week time span. 00:23:16.020 --> 00:23:18.960 align:middle line:84% Something you could bring forth to others, present to others, 00:23:18.960 --> 00:23:22.200 align:middle line:84% perhaps even turn in as a final project, maybe even 00:23:22.200 --> 00:23:27.240 align:middle line:84% bring to market as some introductory game, your first game. 00:23:27.240 --> 00:23:33.480 align:middle line:84% But it still has that core, because you knew from the start what that core was. 00:23:33.480 --> 00:23:37.890 align:middle line:84% Just looking at this, this doesn't look like much. 00:23:37.890 --> 00:23:47.180 align:middle line:84% We have a good, green box, we have a bad, red circle, and we have a star. 00:23:47.180 --> 00:23:50.440 align:middle line:90% And it's OK for us to touch the star. 00:23:50.440 --> 00:23:54.550 align:middle line:84% And it's not OK for us to touch that red circle as the green box. 00:23:54.550 --> 00:23:56.390 align:middle line:90% We are the green box. 00:23:56.390 --> 00:23:59.320 align:middle line:90% Notice, it's exactly what Mario is. 00:23:59.320 --> 00:24:00.670 align:middle line:90% It's just like that. 00:24:00.670 --> 00:24:03.500 align:middle line:84% Boiling it down to that essential core dynamic. 00:24:03.500 --> 00:24:05.740 align:middle line:84% And so when you're producing something, I 00:24:05.740 --> 00:24:08.002 align:middle line:84% encourage you to start thinking about, rather than 00:24:08.002 --> 00:24:10.960 align:middle line:84% think about all the thousands or hundreds of features that might end up 00:24:10.960 --> 00:24:13.418 align:middle line:84% in your game, even the dozens of features that might end up 00:24:13.418 --> 00:24:16.540 align:middle line:84% in your game, take that entire list of your greatest desires, 00:24:16.540 --> 00:24:20.560 align:middle line:84% take a piece of paper, fold it in half, and on the left hand side, 00:24:20.560 --> 00:24:23.200 align:middle line:84% put the must-haves, the things that make up your game. 00:24:23.200 --> 00:24:27.430 align:middle line:90% Without them your game does not exist. 00:24:27.430 --> 00:24:30.870 align:middle line:84% And then on the right hand side, put the things that are the nice-to-haves, 00:24:30.870 --> 00:24:32.850 align:middle line:84% the things that you'd like to add on later 00:24:32.850 --> 00:24:35.340 align:middle line:84% that could create an even better game, perhaps 00:24:35.340 --> 00:24:40.110 align:middle line:84% a second version of this great game, but are not the essential core dynamic. 00:24:40.110 --> 00:24:42.690 align:middle line:84% Because if you think about it, you have an opportunity 00:24:42.690 --> 00:24:44.970 align:middle line:84% to create something that in and of itself 00:24:44.970 --> 00:24:48.690 align:middle line:84% is complete and whole, based upon that minimal-- 00:24:48.690 --> 00:24:51.540 align:middle line:84% the core game dynamic, or you could create 00:24:51.540 --> 00:24:56.970 align:middle line:84% something that is potentially massive but you just simply don't finish. 00:24:56.970 --> 00:25:00.050 align:middle line:90% So with that, to our third step-- 00:25:00.050 --> 00:25:06.380 align:middle line:84% or excuse me, I'd like to talk briefly now about getting started in LOVE 2D, 00:25:06.380 --> 00:25:09.120 align:middle line:84% because that's what a lot of you have come here for today. 00:25:09.120 --> 00:25:14.770 align:middle line:84% So just to give you some background, I want-- 00:25:14.770 --> 00:25:17.860 align:middle line:84% for those of you that have prior coding experience, 00:25:17.860 --> 00:25:23.380 align:middle line:84% you can imagine how building a game engine that would run something like 00:25:23.380 --> 00:25:23.920 align:middle line:90% Mario-- 00:25:23.920 --> 00:25:30.310 align:middle line:84% that is the physics, the way sprites are drawn on the screen, the way 00:25:30.310 --> 00:25:34.870 align:middle line:84% that levels load, the way memory is handled-- 00:25:34.870 --> 00:25:41.320 align:middle line:84% all those things, traditionally, once upon a time were handled in very 00:25:41.320 --> 00:25:43.190 align:middle line:90% low-level programming languages-- 00:25:43.190 --> 00:25:47.680 align:middle line:84% C, C++, even C#, of course, many of you touched on now. 00:25:47.680 --> 00:25:51.040 align:middle line:84% And, of course, over time programmers have 00:25:51.040 --> 00:25:54.640 align:middle line:84% had benefited from layers and levels of abstraction 00:25:54.640 --> 00:25:58.592 align:middle line:84% moving away from those languages because-- 00:25:58.592 --> 00:25:59.550 align:middle line:90% well, for many reasons. 00:25:59.550 --> 00:26:03.850 align:middle line:84% I suppose a chief reason is, if you think about old games, games, 00:26:03.850 --> 00:26:07.000 align:middle line:84% potentially, that were created either before you were born, 00:26:07.000 --> 00:26:11.560 align:middle line:84% or games, perhaps, in your early life, those games 00:26:11.560 --> 00:26:15.830 align:middle line:84% were produced during a time when there was very limited system resources. 00:26:15.830 --> 00:26:19.210 align:middle line:84% And those resources were exceedingly expensive. 00:26:19.210 --> 00:26:24.460 align:middle line:84% Games like DOOM were created, Wolfenstein were created in C. 00:26:24.460 --> 00:26:29.020 align:middle line:84% And they needed to do that, because one, that was one of the few things 00:26:29.020 --> 00:26:33.460 align:middle line:84% available to them when creating this, but also because they needed 00:26:33.460 --> 00:26:35.980 align:middle line:84% to go as close to the hardware as possible 00:26:35.980 --> 00:26:40.210 align:middle line:84% to pump out as much as they possibly could from that limited and very 00:26:40.210 --> 00:26:42.490 align:middle line:90% expensive hardware. 00:26:42.490 --> 00:26:48.040 align:middle line:84% Well now, because of the popularity of game programming, 00:26:48.040 --> 00:26:52.150 align:middle line:84% there are tools out there that you can use, frameworks, 00:26:52.150 --> 00:26:55.600 align:middle line:84% that allow you to get a quick start at your game work. 00:26:55.600 --> 00:27:06.278 align:middle line:84% Probably my favorite growing up was, oh gosh, was it's not Game Workshop. 00:27:06.278 --> 00:27:08.570 align:middle line:84% Carter, what is that thing called that I'm thinking of? 00:27:08.570 --> 00:27:09.540 align:middle line:90% Not Game Workshop. 00:27:09.540 --> 00:27:12.230 align:middle line:90% What is that framework called? 00:27:12.230 --> 00:27:13.340 align:middle line:90% CARTER: Game Creator? 00:27:13.340 --> 00:27:17.840 align:middle line:84% GUY WHITE: Game Creator, absolutely, was where I got my start, most definitely. 00:27:17.840 --> 00:27:20.957 align:middle line:84% LOVE 2D is another framework that's, absolutely, of course, 00:27:20.957 --> 00:27:22.040 align:middle line:90% we'll be discussing today. 00:27:22.040 --> 00:27:26.420 align:middle line:84% And then Unity is one that's out there and usable by most people today. 00:27:26.420 --> 00:27:29.700 align:middle line:84% And so where you get your start is really up to you. 00:27:29.700 --> 00:27:33.380 align:middle line:84% I want you to go into this by asking yourself, really, 00:27:33.380 --> 00:27:35.840 align:middle line:90% some really fundamental, core questions. 00:27:35.840 --> 00:27:39.200 align:middle line:84% They're almost existential questions of, who am I? 00:27:39.200 --> 00:27:44.330 align:middle line:84% Am I the type of person that wants to design a game in code? 00:27:44.330 --> 00:27:47.360 align:middle line:84% That is, am I a person who wants to iterate through code, 00:27:47.360 --> 00:27:54.140 align:middle line:84% creating functions and code in a coding environment that produces a game, 00:27:54.140 --> 00:27:58.130 align:middle line:84% or am I one that wants to work in a graphical environment 00:27:58.130 --> 00:28:00.920 align:middle line:84% where I can see a lot of these sprites on the screen 00:28:00.920 --> 00:28:05.240 align:middle line:84% as I develop them, move them in a 3D environment, potentially. 00:28:05.240 --> 00:28:09.200 align:middle line:84% That choice, who you are and how you'd like to work, 00:28:09.200 --> 00:28:12.470 align:middle line:84% could really determine which direction you go. 00:28:12.470 --> 00:28:15.140 align:middle line:84% For those of you that are interested in creating 00:28:15.140 --> 00:28:17.780 align:middle line:84% a game without any coding at all, Game Creator 00:28:17.780 --> 00:28:20.420 align:middle line:84% is actually a really fantastic option for you. 00:28:20.420 --> 00:28:24.500 align:middle line:84% For those of you that are really wanting to learn and work 00:28:24.500 --> 00:28:28.610 align:middle line:84% in the coding environment, LOVE 2D is absolutely a fantastic framework. 00:28:28.610 --> 00:28:29.690 align:middle line:90% Unity also. 00:28:29.690 --> 00:28:32.540 align:middle line:84% But Unity is a very graphical environment 00:28:32.540 --> 00:28:34.200 align:middle line:90% and offers you different things. 00:28:34.200 --> 00:28:40.410 align:middle line:84% So as we're talking about these basics, just know that you have a choice. 00:28:40.410 --> 00:28:45.750 align:middle line:84% And the great hope is that if you decide that a tool is not working for you, 00:28:45.750 --> 00:28:49.130 align:middle line:84% you can go find another tool that perhaps functions better, 00:28:49.130 --> 00:28:51.770 align:middle line:84% more in the way that you think about game creation, 00:28:51.770 --> 00:28:57.580 align:middle line:84% and more in line with who you are as a person, as a creator. 00:28:57.580 --> 00:29:02.950 align:middle line:84% So with LOVE 2D, the main dot lua file, which 00:29:02.950 --> 00:29:07.810 align:middle line:84% is the essential file that runs any LOVE program, 00:29:07.810 --> 00:29:11.620 align:middle line:84% has simply three main functions, and that's it. 00:29:11.620 --> 00:29:14.990 align:middle line:84% We have the love.load function, as you see here, 00:29:14.990 --> 00:29:18.820 align:middle line:84% and we have the love.update, and the love.draw. 00:29:18.820 --> 00:29:23.680 align:middle line:84% And as long as those three functions are present in our main dot lua 00:29:23.680 --> 00:29:28.090 align:middle line:84% file, what this will do is this will allow our game to run. 00:29:28.090 --> 00:29:32.110 align:middle line:84% And right now, this is as basic as it gets. 00:29:32.110 --> 00:29:39.430 align:middle line:84% All I'm doing is I'm saying, draw, when we run this program, a rectangle. 00:29:39.430 --> 00:29:42.160 align:middle line:84% And we're going to use a line to draw that. 00:29:42.160 --> 00:29:44.380 align:middle line:84% And what we're going to do is we're going to have 00:29:44.380 --> 00:29:47.500 align:middle line:90% it 100 pixels wide, 100 pixels tall. 00:29:47.500 --> 00:29:51.880 align:middle line:84% And I'm going to put it at position 200, 200 00:29:51.880 --> 00:29:56.950 align:middle line:84% on our screen, which is, from the top left, it's 200 over and 200 down. 00:29:56.950 --> 00:30:02.770 align:middle line:84% And the other functions here, love.load, are the pieces of code 00:30:02.770 --> 00:30:05.980 align:middle line:84% that run only once, once the file is loaded. 00:30:05.980 --> 00:30:09.550 align:middle line:84% And also love.update is what happens as a function of time, 00:30:09.550 --> 00:30:13.000 align:middle line:84% what happens every single moment as a function of time 00:30:13.000 --> 00:30:16.580 align:middle line:84% that we are running through our program, running our program. 00:30:16.580 --> 00:30:19.658 align:middle line:84% And, as you can imagine, this doesn't do much. 00:30:19.658 --> 00:30:21.700 align:middle line:84% As you can see here on our screen, what this does 00:30:21.700 --> 00:30:27.820 align:middle line:90% is it simply just displays a box. 00:30:27.820 --> 00:30:29.920 align:middle line:84% Angela is mentioning Adventure Construction Set, 00:30:29.920 --> 00:30:34.630 align:middle line:84% which is absolutely another interesting tool you should take a look at. 00:30:34.630 --> 00:30:39.820 align:middle line:84% Now, to our second level, what we could do is-- notice what we're doing now. 00:30:39.820 --> 00:30:42.020 align:middle line:90% We're adding some features here. 00:30:42.020 --> 00:30:45.970 align:middle line:84% So in the previous, notice at the bottom where 00:30:45.970 --> 00:30:49.150 align:middle line:84% we started, love.draw, all the way at the bottom of the screen. 00:30:49.150 --> 00:30:53.800 align:middle line:84% What we have is we have the rectangle being drawn, 00:30:53.800 --> 00:30:58.720 align:middle line:84% but this time, rather than telling as hard coding the compiler 00:30:58.720 --> 00:31:04.630 align:middle line:84% to run this with 100 pixels wide and 100 pixels tall, what we're going to do 00:31:04.630 --> 00:31:07.540 align:middle line:84% is, this time, we're going to go up into our love.load function 00:31:07.540 --> 00:31:11.025 align:middle line:84% and we're going to add those as variables there. 00:31:11.025 --> 00:31:13.150 align:middle line:84% And we're doing that for the purpose of the ability 00:31:13.150 --> 00:31:16.580 align:middle line:90% to manipulate those items later. 00:31:16.580 --> 00:31:20.020 align:middle line:84% And as you can see in the love.update, as a function of time 00:31:20.020 --> 00:31:22.480 align:middle line:84% throughout our program as it's running, what 00:31:22.480 --> 00:31:26.620 align:middle line:84% we're going to be listening for using these if statements is, 00:31:26.620 --> 00:31:29.620 align:middle line:90% is the keyboard being pressed? 00:31:29.620 --> 00:31:33.670 align:middle line:90% Is our W, S, A, or D key being pressed? 00:31:33.670 --> 00:31:37.580 align:middle line:84% And depending upon which we press, we're going to take an action. 00:31:37.580 --> 00:31:42.850 align:middle line:84% So in the case of the W, we're withdrawing from the y, 00:31:42.850 --> 00:31:47.560 align:middle line:84% we're moving our object up closer to zero and so on. 00:31:47.560 --> 00:31:52.960 align:middle line:84% So our y up here at our top and our love.load function, is moving up, 00:31:52.960 --> 00:31:56.170 align:middle line:90% and hence, our rectangle is moving, too. 00:31:56.170 --> 00:31:58.000 align:middle line:90% And the opposite being true. 00:31:58.000 --> 00:32:03.370 align:middle line:84% And, of course, using our A and D keys, we can move that box left or right. 00:32:03.370 --> 00:32:09.190 align:middle line:84% Now, as you implement this in LOVE, what you'll find 00:32:09.190 --> 00:32:17.380 align:middle line:84% is an immediate challenge we have is this box can leave the screen. 00:32:17.380 --> 00:32:20.110 align:middle line:84% And it almost infinitely can leave the screen. 00:32:20.110 --> 00:32:24.520 align:middle line:84% I don't know, I have not held down that A key for an hour 00:32:24.520 --> 00:32:28.018 align:middle line:84% to see if it would cause an error, but I know that the box leaves the screen. 00:32:28.018 --> 00:32:30.310 align:middle line:84% And at some point, it takes a great deal of time for it 00:32:30.310 --> 00:32:32.000 align:middle line:90% to come back, if you'd like to. 00:32:32.000 --> 00:32:37.990 align:middle line:84% So what we can do is we can create some, in a way, some collision where 00:32:37.990 --> 00:32:43.800 align:middle line:84% it checks, where it says, are we out, are we 00:32:43.800 --> 00:32:47.460 align:middle line:90% hitting the boundary of our screen? 00:32:47.460 --> 00:32:50.910 align:middle line:84% And so adding, again, another layer of abstraction here. 00:32:50.910 --> 00:32:55.170 align:middle line:84% Rather than just simply having x and y-coordinates, what I might do 00:32:55.170 --> 00:32:58.530 align:middle line:84% is I might create an object called mySquare. 00:32:58.530 --> 00:33:03.000 align:middle line:84% And what I'm now doing is I'm assigning an x-value to it, and a y-value to it, 00:33:03.000 --> 00:33:05.730 align:middle line:84% and a height and a width to it, and so on. 00:33:05.730 --> 00:33:11.490 align:middle line:84% And rather than just simply controlling the x or the y, I'm actually-- 00:33:11.490 --> 00:33:15.660 align:middle line:84% or x and y arbitrarily, I'm working with only mySquare's 00:33:15.660 --> 00:33:19.890 align:middle line:84% x and y, as you can see that I changed here in the update function. 00:33:19.890 --> 00:33:27.120 align:middle line:84% And most poignant for this part is this second piece of our code 00:33:27.120 --> 00:33:31.650 align:middle line:84% where we start adding some if statements checking to see 00:33:31.650 --> 00:33:36.270 align:middle line:84% is the x and the y-value of the square moving 00:33:36.270 --> 00:33:40.200 align:middle line:90% outside the bounds of our screen? 00:33:40.200 --> 00:33:44.730 align:middle line:84% And if it does attempt to go outside the bounds, 00:33:44.730 --> 00:33:48.070 align:middle line:84% we're going to push it back just a little bit, not enough for the user 00:33:48.070 --> 00:33:51.630 align:middle line:84% to say, whoa, that's a big jump, but enough just to make it stick there 00:33:51.630 --> 00:33:54.270 align:middle line:90% and prevent it from moving any further. 00:33:54.270 --> 00:33:57.585 align:middle line:84% We're having it bump all the walls, as it were. 00:33:57.585 --> 00:33:59.460 align:middle line:84% And as you can see in the love.draw function, 00:33:59.460 --> 00:34:02.830 align:middle line:84% we are adding that level of abstraction down there, as well. 00:34:02.830 --> 00:34:04.170 align:middle line:90% So what do we have now? 00:34:04.170 --> 00:34:07.410 align:middle line:84% Well, we have a box that appears on the screen. 00:34:07.410 --> 00:34:10.360 align:middle line:84% And we have the ability to move the box around the screen. 00:34:10.360 --> 00:34:14.250 align:middle line:84% And now, we have the ability to keep that box inside. 00:34:14.250 --> 00:34:22.090 align:middle line:84% Now, you could take this small, very small-scale game to a game level 00:34:22.090 --> 00:34:25.120 align:middle line:90% by simply adding something to it. 00:34:25.120 --> 00:34:29.199 align:middle line:90% And the options are almost limitless. 00:34:29.199 --> 00:34:32.730 align:middle line:84% All my team here on the chat box, what is one thing 00:34:32.730 --> 00:34:34.949 align:middle line:84% we could add, in just a couple of words, what's 00:34:34.949 --> 00:34:39.960 align:middle line:84% one thing you could add to this game to potentially, now, make it a full game? 00:34:39.960 --> 00:34:41.699 align:middle line:90% Just one little thing you could add. 00:34:41.699 --> 00:34:44.250 align:middle line:90% So we have a box moving around a screen. 00:34:44.250 --> 00:34:46.889 align:middle line:84% Yeah, we can have a platform, absolutely. 00:34:46.889 --> 00:34:49.750 align:middle line:84% So as Greg says, we could have it on a platform. 00:34:49.750 --> 00:34:53.699 align:middle line:84% And if we step off the platform, it falls. 00:34:53.699 --> 00:34:57.000 align:middle line:84% We could have items to collect, where the box has to move around the screen 00:34:57.000 --> 00:34:58.560 align:middle line:90% and grab items. 00:34:58.560 --> 00:35:00.300 align:middle line:90% Angela says, "something to dodge." 00:35:00.300 --> 00:35:01.530 align:middle line:90% Absolutely. 00:35:01.530 --> 00:35:05.430 align:middle line:84% So notice, just based upon a box on a screen, 00:35:05.430 --> 00:35:08.610 align:middle line:84% how you three just came up with three different games 00:35:08.610 --> 00:35:10.890 align:middle line:90% with three different core dynamics. 00:35:10.890 --> 00:35:12.700 align:middle line:90% What an interesting thing. 00:35:12.700 --> 00:35:18.820 align:middle line:84% So how, then, complicated could you make your game? 00:35:18.820 --> 00:35:25.100 align:middle line:84% How feature-filled could you make your game, then, within two weeks? 00:35:25.100 --> 00:35:26.920 align:middle line:90% And so imagine that. 00:35:26.920 --> 00:35:30.820 align:middle line:84% Imagine where, instead of creating-- just setting out to say, 00:35:30.820 --> 00:35:33.760 align:middle line:84% I'm going to create the next whatever that big game is, 00:35:33.760 --> 00:35:36.940 align:middle line:84% imagine, for one of your first games, that you say, 00:35:36.940 --> 00:35:40.990 align:middle line:84% I'm going to distill something that I think is fun down 00:35:40.990 --> 00:35:43.630 align:middle line:90% to its most essential core dynamic. 00:35:43.630 --> 00:35:46.410 align:middle line:90% And I'm going to implement that. 00:35:46.410 --> 00:35:49.920 align:middle line:84% And if you think about those two sides of the piece of paper I talked about, 00:35:49.920 --> 00:35:53.790 align:middle line:84% the must-haves and the good-to-haves, imagine, then, 00:35:53.790 --> 00:35:57.420 align:middle line:84% within two weeks looking at your side with the must-haves, 00:35:57.420 --> 00:36:01.770 align:middle line:84% accomplishing all those, and then bringing those over, bringing 00:36:01.770 --> 00:36:05.460 align:middle line:84% over the nice-to-haves into the feature list, and saying, OK, now 00:36:05.460 --> 00:36:07.350 align:middle line:84% that I've implemented the core of the game, 00:36:07.350 --> 00:36:10.030 align:middle line:90% what would I like to implement next? 00:36:10.030 --> 00:36:13.800 align:middle line:84% And this is where I bring up my warning about artwork. 00:36:13.800 --> 00:36:16.920 align:middle line:90% I am not blessed artistically. 00:36:16.920 --> 00:36:20.040 align:middle line:84% Many of you are, and congratulations on that. 00:36:20.040 --> 00:36:21.570 align:middle line:90% I might hire you one day. 00:36:21.570 --> 00:36:24.960 align:middle line:84% But for the majority of us that are not artistically blessed, 00:36:24.960 --> 00:36:27.990 align:middle line:84% it can be really distracting to get stuck 00:36:27.990 --> 00:36:30.760 align:middle line:90% in the artwork phase of your project. 00:36:30.760 --> 00:36:33.300 align:middle line:84% And so what I encourage you to do is as your prototyping, 00:36:33.300 --> 00:36:36.210 align:middle line:84% as you're building out your minimal viable product, 00:36:36.210 --> 00:36:40.492 align:middle line:84% try to avoid getting stuck in places that you really 00:36:40.492 --> 00:36:43.200 align:middle line:84% don't need to address at this moment-- artwork being one of them. 00:36:43.200 --> 00:36:46.450 align:middle line:84% Artwork, you can most definitely address later. 00:36:46.450 --> 00:36:51.360 align:middle line:84% But to get the core dynamic working, probably not. 00:36:51.360 --> 00:36:55.610 align:middle line:84% So I'd like to talk to you about the phases, then, of producing a LOVE game. 00:36:55.610 --> 00:36:59.420 align:middle line:84% And this, in a way, speaks back to those existential questions 00:36:59.420 --> 00:37:00.950 align:middle line:90% that we spoke about a moment ago. 00:37:00.950 --> 00:37:03.800 align:middle line:90% One is-- there's the setup phase. 00:37:03.800 --> 00:37:07.970 align:middle line:84% That's where you go to the LOVE2D.org website. 00:37:07.970 --> 00:37:09.530 align:middle line:90% I hope I'm getting that URL right. 00:37:09.530 --> 00:37:12.540 align:middle line:90% And you run the setup there. 00:37:12.540 --> 00:37:14.810 align:middle line:90% You follow the setup instructions. 00:37:14.810 --> 00:37:19.290 align:middle line:84% If you're on the Mac platform, there are some specific terminal-related things 00:37:19.290 --> 00:37:20.370 align:middle line:90% that you'll need to do. 00:37:20.370 --> 00:37:22.560 align:middle line:84% Same thing for the Windows setup as well. 00:37:22.560 --> 00:37:24.440 align:middle line:90% And you get running on your computer. 00:37:24.440 --> 00:37:30.560 align:middle line:84% You know that you finished this phase when you can open a LOVE file 00:37:30.560 --> 00:37:31.970 align:middle line:90% and it will run on your screen. 00:37:31.970 --> 00:37:35.580 align:middle line:84% And they provide some sample LOVE files that you can download, 00:37:35.580 --> 00:37:38.360 align:middle line:84% so that way, you can test your setup to make sure it works. 00:37:38.360 --> 00:37:42.510 align:middle line:84% The next step is really the gut-check phase. 00:37:42.510 --> 00:37:47.400 align:middle line:84% And the main question that I'd like you to ponder as you're engaging in this 00:37:47.400 --> 00:37:51.000 align:middle line:90% is, is this framework right for me? 00:37:51.000 --> 00:37:57.050 align:middle line:84% Is this way of making a game the way that I'd like to make a game? 00:37:57.050 --> 00:37:58.940 align:middle line:90% If the answer is no, that's OK. 00:37:58.940 --> 00:38:04.710 align:middle line:84% Go find a tool that works well for you, a framework that works well for you. 00:38:04.710 --> 00:38:09.680 align:middle line:84% Choose one granular element that is going 00:38:09.680 --> 00:38:14.990 align:middle line:84% to make your game your game, just one little piece, and ask yourself, 00:38:14.990 --> 00:38:19.190 align:middle line:84% is this really what I want to be doing with my time, 00:38:19.190 --> 00:38:24.290 align:middle line:84% implementing this type of thing in this type of way? 00:38:24.290 --> 00:38:28.580 align:middle line:84% GameMaker Studio is open to you, Unity is open to you, Godot is open to you, 00:38:28.580 --> 00:38:31.490 align:middle line:90% LOVE 2D is an amazing tool. 00:38:31.490 --> 00:38:33.380 align:middle line:90% Corona SDK is open up, too. 00:38:33.380 --> 00:38:37.550 align:middle line:84% There's so many different frameworks that are out there, ready for you. 00:38:37.550 --> 00:38:39.000 align:middle line:90% So you have a choice. 00:38:39.000 --> 00:38:42.950 align:middle line:84% And the day to choose that is just a matter-- 00:38:42.950 --> 00:38:46.220 align:middle line:84% the time to choose that is just a matter of an hour or two, probably, 00:38:46.220 --> 00:38:49.160 align:middle line:90% into the process of working on the game. 00:38:49.160 --> 00:38:51.590 align:middle line:90% Next is the game dynamic phase. 00:38:51.590 --> 00:38:57.880 align:middle line:84% In this place, you're going to be choosing the core game dynamic, 00:38:57.880 --> 00:39:01.000 align:middle line:84% and you're going to be implementing it there in your game. 00:39:01.000 --> 00:39:02.920 align:middle line:90% And you want to test it. 00:39:02.920 --> 00:39:08.490 align:middle line:84% And you want to get it to a point where you have a playable copy of your game 00:39:08.490 --> 00:39:11.550 align:middle line:84% where you can show other people and have them play it, 00:39:11.550 --> 00:39:16.530 align:middle line:84% and watch how they react to getting the core, the most basic, the must-haves 00:39:16.530 --> 00:39:18.520 align:middle line:90% of your game running. 00:39:18.520 --> 00:39:20.760 align:middle line:90% And then, from there is the MVP phase. 00:39:20.760 --> 00:39:24.000 align:middle line:84% And this is taking it from a prototype that's 00:39:24.000 --> 00:39:26.730 align:middle line:84% playable into something that is, in fact, finished, 00:39:26.730 --> 00:39:30.780 align:middle line:84% something that is releasable, something that-- it might not be the best 00:39:30.780 --> 00:39:34.590 align:middle line:84% release ever, but it's something that you can give to others, 00:39:34.590 --> 00:39:36.150 align:middle line:90% and it's a completed game. 00:39:36.150 --> 00:39:39.510 align:middle line:84% It's something that has a beginning and an ending, 00:39:39.510 --> 00:39:44.040 align:middle line:84% or at least has the potential of being perpetual forever, potentially. 00:39:44.040 --> 00:39:47.310 align:middle line:90% And, finally, there's the feature phase. 00:39:47.310 --> 00:39:50.460 align:middle line:84% And this is where, after you've produced that minimal viable product, 00:39:50.460 --> 00:39:53.190 align:middle line:84% you're adding in more features to make it an even better game. 00:39:53.190 --> 00:39:55.350 align:middle line:84% You're adding menus, you're adding levels, 00:39:55.350 --> 00:40:02.466 align:middle line:84% you're potentially adding power ups. And that way, the material that you're-- 00:40:02.466 --> 00:40:07.700 align:middle line:84% that way, what you're putting into the game 00:40:07.700 --> 00:40:10.730 align:middle line:84% is on top of what has already been deemed essential. 00:40:10.730 --> 00:40:14.480 align:middle line:84% Because you've already created a game that accomplishes the goal that you 00:40:14.480 --> 00:40:17.870 align:middle line:84% set forth, that core dynamic, and the features 00:40:17.870 --> 00:40:23.090 align:middle line:84% are something that are going to want to further enhance that core dynamic. 00:40:23.090 --> 00:40:27.350 align:middle line:84% Many of you have played games before where the game was absolutely almost 00:40:27.350 --> 00:40:30.710 align:middle line:84% perfect as is, but then they added a new element to it, 00:40:30.710 --> 00:40:32.840 align:middle line:90% and it actually took away from the game. 00:40:32.840 --> 00:40:34.970 align:middle line:84% And so you'll be doing some soul searching 00:40:34.970 --> 00:40:38.930 align:middle line:84% during this period of your work in LOVE to decide, 00:40:38.930 --> 00:40:41.855 align:middle line:84% is this a feature that really should be implemented now? 00:40:41.855 --> 00:40:47.050 align:middle line:90% 00:40:47.050 --> 00:40:51.220 align:middle line:84% The best resources that I can hand you to get started, 00:40:51.220 --> 00:40:55.000 align:middle line:84% flat out, is first of all, is Sheepolution's How to LOVE. 00:40:55.000 --> 00:40:59.200 align:middle line:84% It is, perhaps, the most comprehensive, step-by-step tutorial 00:40:59.200 --> 00:41:01.330 align:middle line:90% that I've ever seen. 00:41:01.330 --> 00:41:03.790 align:middle line:84% What I like about Sheepolution's tutorial 00:41:03.790 --> 00:41:07.300 align:middle line:84% is it gets you to a built game very quickly. 00:41:07.300 --> 00:41:13.510 align:middle line:84% And getting to a built game, building a prototype game 00:41:13.510 --> 00:41:15.610 align:middle line:84% using someone else's instruction is a great way 00:41:15.610 --> 00:41:22.120 align:middle line:84% to familiarize yourself with this framework and what is possible, 00:41:22.120 --> 00:41:23.620 align:middle line:90% what it can possibly do. 00:41:23.620 --> 00:41:28.967 align:middle line:84% And on top of it, to learn about how you can use this, 00:41:28.967 --> 00:41:31.300 align:middle line:84% how you can implement each of the individual pieces that 00:41:31.300 --> 00:41:33.460 align:middle line:84% are discussed there in that tutorial, like 00:41:33.460 --> 00:41:37.360 align:middle line:84% how to implement a different level, and game states, and so on. 00:41:37.360 --> 00:41:40.390 align:middle line:84% Simple Game Tutorials is another amazing one, as well. 00:41:40.390 --> 00:41:43.030 align:middle line:84% What I appreciate about Simple Game Tutorials above all 00:41:43.030 --> 00:41:46.240 align:middle line:84% is you are reimplementing games you already 00:41:46.240 --> 00:41:49.340 align:middle line:90% know about out there in the world. 00:41:49.340 --> 00:41:55.510 align:middle line:84% And so games like Pong are on there where you can reimplement. 00:41:55.510 --> 00:41:58.580 align:middle line:84% Creating a basic pinball machine is one on there as well. 00:41:58.580 --> 00:42:02.200 align:middle line:84% And it's by building from those very basic templates 00:42:02.200 --> 00:42:06.380 align:middle line:84% that you could potentially create your own game as well. 00:42:06.380 --> 00:42:09.400 align:middle line:84% I would be quite remiss if I did not mention 00:42:09.400 --> 00:42:14.290 align:middle line:84% Brenda Romero and Ian Schreiber's book, Challenges for Game Designers. 00:42:14.290 --> 00:42:20.230 align:middle line:84% This book is a huge guide for me in my life, has been very helpful. 00:42:20.230 --> 00:42:23.140 align:middle line:84% Both of these authors have another book about breaking into the game 00:42:23.140 --> 00:42:25.480 align:middle line:90% industry, which is exceptionally good. 00:42:25.480 --> 00:42:28.177 align:middle line:84% But for you, in your stage of creating your first game, 00:42:28.177 --> 00:42:30.010 align:middle line:84% I think this book is probably the best place 00:42:30.010 --> 00:42:33.790 align:middle line:90% to start if you are a book person. 00:42:33.790 --> 00:42:36.860 align:middle line:84% I love listening to YouTube videos, watching YouTube videos, 00:42:36.860 --> 00:42:38.240 align:middle line:90% especially as I'm on the go. 00:42:38.240 --> 00:42:40.970 align:middle line:90% And so Extra Credits is an amazing site. 00:42:40.970 --> 00:42:43.822 align:middle line:90% Many of you have absolutely-- 00:42:43.822 --> 00:42:46.780 align:middle line:84% you've been exposed to this before, probably, if you've been on YouTube 00:42:46.780 --> 00:42:47.822 align:middle line:90% and searched game design. 00:42:47.822 --> 00:42:52.900 align:middle line:84% And I, of course, can't think Colton Ogden enough for his work 00:42:52.900 --> 00:42:55.000 align:middle line:90% in CS50's Introduction to Game Design. 00:42:55.000 --> 00:42:58.240 align:middle line:84% I took that class while I was at Harvard Extension. 00:42:58.240 --> 00:43:02.530 align:middle line:84% And it was instrumental in allowing me to produce the games that I've 00:43:02.530 --> 00:43:03.580 align:middle line:90% produced to this date. 00:43:03.580 --> 00:43:08.050 align:middle line:90% And you can access it there at that URL. 00:43:08.050 --> 00:43:10.810 align:middle line:84% However, do know that as you go in, it is a full course. 00:43:10.810 --> 00:43:14.410 align:middle line:84% So don't fall down the rabbit hole too much as you're 00:43:14.410 --> 00:43:17.130 align:middle line:90% creating your two-week-long game. 00:43:17.130 --> 00:43:21.748 align:middle line:84% So lastly, as parting before we get to your questions-- 00:43:21.748 --> 00:43:24.040 align:middle line:84% and by the way, this is a great chance for those of you 00:43:24.040 --> 00:43:25.960 align:middle line:90% that are here with us live. 00:43:25.960 --> 00:43:29.740 align:middle line:84% If you have questions for us, please direct them to that chat box 00:43:29.740 --> 00:43:33.070 align:middle line:84% now, as we're engaging in the final moments of our time together. 00:43:33.070 --> 00:43:36.700 align:middle line:84% Because I'd love to answer your questions and just say 00:43:36.700 --> 00:43:38.480 align:middle line:90% thank you to you by name. 00:43:38.480 --> 00:43:44.350 align:middle line:84% So how do you avoid the three landmines of small-scope game design? 00:43:44.350 --> 00:43:46.900 align:middle line:84% And this is for, really, I suppose this applies 00:43:46.900 --> 00:43:52.630 align:middle line:84% for really well seasoned programmers as brand new ones alike. 00:43:52.630 --> 00:43:56.830 align:middle line:84% The first landmine is skipping the prototyping stage. 00:43:56.830 --> 00:44:01.180 align:middle line:84% The prototyping stage is where you create a product-- 00:44:01.180 --> 00:44:04.090 align:middle line:84% that is, create a game that is playable-- 00:44:04.090 --> 00:44:06.970 align:middle line:84% that implements the most core game dynamic. 00:44:06.970 --> 00:44:09.580 align:middle line:90% And it is not the prettiest thing. 00:44:09.580 --> 00:44:12.440 align:middle line:84% It is not fancy, probably, in any way at all. 00:44:12.440 --> 00:44:18.820 align:middle line:84% But it's playable and allows you to test to see if the core game dynamic works. 00:44:18.820 --> 00:44:22.585 align:middle line:84% This phase is what tells you whether or not your game is going to work. 00:44:22.585 --> 00:44:25.190 align:middle line:90% 00:44:25.190 --> 00:44:29.050 align:middle line:84% Taking a stone and dipping it in chocolate 00:44:29.050 --> 00:44:30.830 align:middle line:90% is not going to make it taste better. 00:44:30.830 --> 00:44:32.950 align:middle line:90% It is still a stone dipped in chocolate. 00:44:32.950 --> 00:44:34.898 align:middle line:90% And so, likewise-- 00:44:34.898 --> 00:44:36.190 align:middle line:90% I appreciate the smile, Bernie. 00:44:36.190 --> 00:44:38.200 align:middle line:90% Thank you. 00:44:38.200 --> 00:44:41.920 align:middle line:84% So that, likewise, prototyping enables you to see, 00:44:41.920 --> 00:44:46.780 align:middle line:84% is this thing viable in its most core state? 00:44:46.780 --> 00:44:51.260 align:middle line:84% Adding on 16 levels of bad is not going to make it better. 00:44:51.260 --> 00:44:53.020 align:middle line:90% It's still a bad game. 00:44:53.020 --> 00:44:56.050 align:middle line:84% And only you can decide, I suppose, if it's 00:44:56.050 --> 00:44:59.410 align:middle line:90% a bad game or not by your own standard. 00:44:59.410 --> 00:45:02.890 align:middle line:84% And then, you can put it out to others and see is it worth it. 00:45:02.890 --> 00:45:07.120 align:middle line:84% Sometimes, what game designers can do is they can really overcommit to an idea 00:45:07.120 --> 00:45:10.390 align:middle line:84% and they get so far down the production pipeline 00:45:10.390 --> 00:45:13.120 align:middle line:84% that it's almost like, I don't want to turn from this bad idea, 00:45:13.120 --> 00:45:14.980 align:middle line:84% because I've just invested so much into it. 00:45:14.980 --> 00:45:19.270 align:middle line:84% If one had taken just the time even a few hours, just a prototype, 00:45:19.270 --> 00:45:21.820 align:middle line:84% we would have seen if this was a good direction or a bad. 00:45:21.820 --> 00:45:24.820 align:middle line:84% Naturally, the big thing we've been talking about today is over scoping. 00:45:24.820 --> 00:45:26.800 align:middle line:84% That is the second land mine, is producing 00:45:26.800 --> 00:45:30.340 align:middle line:84% a game that's just simply too large, beyond your capability, 00:45:30.340 --> 00:45:35.290 align:middle line:84% potentially, but more about your time than about your capability. 00:45:35.290 --> 00:45:37.390 align:middle line:90% Because capability can always be-- 00:45:37.390 --> 00:45:39.100 align:middle line:90% not for an academic course-- 00:45:39.100 --> 00:45:42.400 align:middle line:84% but for business pursuits, you can always outsource creativity. 00:45:42.400 --> 00:45:45.700 align:middle line:84% You can always go find great people that can do work with you. 00:45:45.700 --> 00:45:49.130 align:middle line:84% For those of you that are engaging this in an academic environment, 00:45:49.130 --> 00:45:52.280 align:middle line:84% like a class, such as CS50, you might be working 00:45:52.280 --> 00:45:56.690 align:middle line:84% with a partner who might complement your strengths, complement your weaknesses. 00:45:56.690 --> 00:46:00.230 align:middle line:84% But still, if the game is over scoped in terms of time, 00:46:00.230 --> 00:46:02.750 align:middle line:84% that's going to prevent you from finishing this project. 00:46:02.750 --> 00:46:05.930 align:middle line:84% The final landmine is focusing on features over function. 00:46:05.930 --> 00:46:08.550 align:middle line:84% We've been talking about that all the way through here today. 00:46:08.550 --> 00:46:13.970 align:middle line:84% But I really want to hit home that this is the biggest problem that all game 00:46:13.970 --> 00:46:18.320 align:middle line:84% programmers face, is sometimes they can lose sight of what creates 00:46:18.320 --> 00:46:23.570 align:middle line:84% the essential greatness of their game and try to add 00:46:23.570 --> 00:46:26.240 align:middle line:90% features that get away from that core. 00:46:26.240 --> 00:46:31.400 align:middle line:84% And so focus on the minimal viable, the core dynamic of this game 00:46:31.400 --> 00:46:35.900 align:middle line:84% before you go and create a million features on top of that core dynamic. 00:46:35.900 --> 00:46:40.700 align:middle line:84% So it's with that, beautiful team, that I would love to take your questions. 00:46:40.700 --> 00:46:46.790 align:middle line:84% And I see Ezra is asking, "what are some examples of recent games that 00:46:46.790 --> 00:46:50.240 align:middle line:90% have innovative game mechanics?" 00:46:50.240 --> 00:46:52.970 align:middle line:84% Well, first of all, I pose that to everyone here in the chat box. 00:46:52.970 --> 00:46:55.520 align:middle line:84% Anyone here have some innovative game mechanics 00:46:55.520 --> 00:46:58.250 align:middle line:90% that you would like to bring forward? 00:46:58.250 --> 00:47:00.620 align:middle line:84% And as you're typing those out, like games that 00:47:00.620 --> 00:47:03.410 align:middle line:90% have really innovative game mechanics-- 00:47:03.410 --> 00:47:07.580 align:middle line:84% one thing that I think is really fascinating, there's a game on LOVE 2D 00:47:07.580 --> 00:47:18.320 align:middle line:84% called Stray, and the game dynamic is it is a boiled-down survival 00:47:18.320 --> 00:47:22.190 align:middle line:84% game, the most boiled-down it can be, but it 00:47:22.190 --> 00:47:28.610 align:middle line:84% looks like you're watching the whole thing on a CRT security monitor. 00:47:28.610 --> 00:47:34.430 align:middle line:84% And I think the game dynamic that works so well in that is it 00:47:34.430 --> 00:47:37.670 align:middle line:84% takes all the things we'd expect of a survival game 00:47:37.670 --> 00:47:41.520 align:middle line:84% and it distills it down to its most essential elements. 00:47:41.520 --> 00:47:43.580 align:middle line:84% And when you take something and you distill 00:47:43.580 --> 00:47:47.720 align:middle line:84% it down like that and your brain fills in the gaps, 00:47:47.720 --> 00:47:51.140 align:middle line:84% because it doesn't have anything extra in it, 00:47:51.140 --> 00:47:55.940 align:middle line:84% that is really fun, a really great game dynamic. 00:47:55.940 --> 00:47:59.120 align:middle line:84% As far as the templates for this, number one 00:47:59.120 --> 00:48:03.527 align:middle line:84% is these slides are going to be released on the CS50 website. 00:48:03.527 --> 00:48:05.360 align:middle line:84% If you're watching this on YouTube, there'll 00:48:05.360 --> 00:48:09.470 align:middle line:84% be a link appearing below that where you can also access those files. 00:48:09.470 --> 00:48:12.540 align:middle line:90% And those templates will be there. 00:48:12.540 --> 00:48:17.510 align:middle line:84% In addition to that, if you're talking about the Simple Games Tutorial, 00:48:17.510 --> 00:48:19.940 align:middle line:84% the link is provided in the slides which you'll also 00:48:19.940 --> 00:48:23.610 align:middle line:84% have access to at the conclusion of our time together today. 00:48:23.610 --> 00:48:25.910 align:middle line:84% So this is our final opportunity for any questions. 00:48:25.910 --> 00:48:30.000 align:middle line:84% If you quickly type, I can surely answer your question. 00:48:30.000 --> 00:48:33.510 align:middle line:84% And so my encouragement for all of you, first 00:48:33.510 --> 00:48:35.670 align:middle line:84% of all, number one, what I want you to do 00:48:35.670 --> 00:48:38.610 align:middle line:90% is I want you to dip your toe into LOVE. 00:48:38.610 --> 00:48:40.470 align:middle line:90% And I want you to gut-check-- 00:48:40.470 --> 00:48:43.450 align:middle line:90% is this the framework for me? 00:48:43.450 --> 00:48:47.130 align:middle line:84% Or is there another framework that can potentially 00:48:47.130 --> 00:48:51.960 align:middle line:84% allow you to express yourself more quickly or more in line 00:48:51.960 --> 00:48:55.040 align:middle line:90% with who you are trying to be? 00:48:55.040 --> 00:48:59.810 align:middle line:84% John is saying, "I am self-taught and trying to get a job as soon as I can. 00:48:59.810 --> 00:49:02.420 align:middle line:84% Building a game sounds really fun, but is it 00:49:02.420 --> 00:49:04.490 align:middle line:84% something that many employers want to see 00:49:04.490 --> 00:49:07.310 align:middle line:84% in a portfolio for an entry-level position?" 00:49:07.310 --> 00:49:11.210 align:middle line:84% I would say if it's an entry-level position in game design or game 00:49:11.210 --> 00:49:13.230 align:middle line:90% programming, absolutely. 00:49:13.230 --> 00:49:16.670 align:middle line:84% In fact, I think what, as Romero and Schreiber 00:49:16.670 --> 00:49:19.910 align:middle line:84% both say in their other book, what they're looking for is-- 00:49:19.910 --> 00:49:23.210 align:middle line:84% often, employers are looking for are you creating games, 00:49:23.210 --> 00:49:24.800 align:middle line:90% or is this a theoretical idea? 00:49:24.800 --> 00:49:29.000 align:middle line:84% So, yes, spending a week or two and creating a small-scope game, 00:49:29.000 --> 00:49:31.070 align:middle line:90% that could be really beneficial, John. 00:49:31.070 --> 00:49:35.690 align:middle line:84% If you're asking for a general job, whether it's in computer science 00:49:35.690 --> 00:49:39.680 align:middle line:84% and programming or one of those associated fields, 00:49:39.680 --> 00:49:45.710 align:middle line:84% I would say creating something you can show others is really great, 00:49:45.710 --> 00:49:50.960 align:middle line:84% because, often, the people that are hiring in entry-level positions-- 00:49:50.960 --> 00:49:52.790 align:middle line:90% I suppose it depends where. 00:49:52.790 --> 00:49:57.740 align:middle line:84% If you're talking about a small company, a mid-sized company that's 00:49:57.740 --> 00:50:02.090 align:middle line:84% not traditionally working in computer science or in those associated fields, 00:50:02.090 --> 00:50:05.810 align:middle line:84% the people hiring you might not be entirely familiar with programming. 00:50:05.810 --> 00:50:08.260 align:middle line:84% So being able to show them something is useful. 00:50:08.260 --> 00:50:10.010 align:middle line:84% For those of you, though, that are looking 00:50:10.010 --> 00:50:13.827 align:middle line:84% for entry-level positions in a technology-related field, 00:50:13.827 --> 00:50:16.910 align:middle line:84% and you're probably going to an employer that's hired many people like you 00:50:16.910 --> 00:50:19.970 align:middle line:84% before, they know exactly what they want to ask you. 00:50:19.970 --> 00:50:21.650 align:middle line:90% Is it an absolute necessity? 00:50:21.650 --> 00:50:23.120 align:middle line:90% No, I don't think so. 00:50:23.120 --> 00:50:26.540 align:middle line:84% But your ability to show the type of work you've 00:50:26.540 --> 00:50:28.850 align:middle line:84% done before, that you can manage your time, 00:50:28.850 --> 00:50:32.420 align:middle line:84% that you can manage workflow, and also answer their coding questions. 00:50:32.420 --> 00:50:35.550 align:middle line:84% And we have a great video, by the way, in CS50 about the coding interview. 00:50:35.550 --> 00:50:36.800 align:middle line:90% I think you should also watch. 00:50:36.800 --> 00:50:38.840 align:middle line:90% You can see that on our YouTube channel. 00:50:38.840 --> 00:50:40.650 align:middle line:84% That could be potentially useful as well. 00:50:40.650 --> 00:50:43.580 align:middle line:84% So my encouragement is yes, create a game. 00:50:43.580 --> 00:50:48.260 align:middle line:84% One to two weeks, you'll have something that you can show. 00:50:48.260 --> 00:50:49.640 align:middle line:90% Let's see here. 00:50:49.640 --> 00:50:53.420 align:middle line:84% Nathaniel is saying, "with all the noise in the gaming environment, 00:50:53.420 --> 00:50:55.310 align:middle line:84% what is the best way to break down the noise 00:50:55.310 --> 00:50:59.180 align:middle line:90% and find a new area to focus on a game?" 00:50:59.180 --> 00:51:01.430 align:middle line:90% Gosh, so many different sources. 00:51:01.430 --> 00:51:03.290 align:middle line:84% I would just go to any source of creativity. 00:51:03.290 --> 00:51:09.120 align:middle line:84% I would say the most creative people aren't necessarily the people that 00:51:09.120 --> 00:51:12.150 align:middle line:90% think the most deepest, necessarily. 00:51:12.150 --> 00:51:14.340 align:middle line:84% I think, often, people that are most creative 00:51:14.340 --> 00:51:17.950 align:middle line:84% are those people that notice things more than other people. 00:51:17.950 --> 00:51:20.640 align:middle line:84% And so what I encourage you to do is, as you're walking, 00:51:20.640 --> 00:51:22.830 align:middle line:84% Nathaniel, throughout your life and your day, 00:51:22.830 --> 00:51:26.550 align:middle line:84% is I want you to notice what interests you. 00:51:26.550 --> 00:51:31.110 align:middle line:84% And if you start noticing things that interest you, certain dynamics in life 00:51:31.110 --> 00:51:34.710 align:middle line:84% or certain things that are happening out in the world today, 00:51:34.710 --> 00:51:37.710 align:middle line:84% see if you could somehow bring that into a game. 00:51:37.710 --> 00:51:39.930 align:middle line:84% Because if it interests you in your life, 00:51:39.930 --> 00:51:43.342 align:middle line:84% surely it can be something that would be interesting to others as well. 00:51:43.342 --> 00:51:45.300 align:middle line:84% If we're talking about game marketing, I am not 00:51:45.300 --> 00:51:47.100 align:middle line:90% the person to ask about game marketing. 00:51:47.100 --> 00:51:49.350 align:middle line:84% But there's a lot of great experts out there 00:51:49.350 --> 00:51:51.210 align:middle line:90% that you can most definitely find. 00:51:51.210 --> 00:51:56.400 align:middle line:84% GDC, the Game Developers Conference, is an excellent resource for marketing 00:51:56.400 --> 00:51:57.675 align:middle line:90% and things of that nature. 00:51:57.675 --> 00:52:01.790 align:middle line:90% 00:52:01.790 --> 00:52:04.515 align:middle line:84% And forgive me if I get your name incorrectly, Alercio says, 00:52:04.515 --> 00:52:06.140 align:middle line:90% "can I make larger games with LOVE 2D?" 00:52:06.140 --> 00:52:07.957 align:middle line:90% You absolutely can. 00:52:07.957 --> 00:52:10.040 align:middle line:84% You can take the small game you've already created 00:52:10.040 --> 00:52:11.060 align:middle line:90% and create something big. 00:52:11.060 --> 00:52:12.185 align:middle line:90% You can create large games. 00:52:12.185 --> 00:52:14.510 align:middle line:84% In fact, as you go to LOVE 2D's website, you 00:52:14.510 --> 00:52:17.960 align:middle line:84% can most definitely find other games that have done quite well in the space. 00:52:17.960 --> 00:52:21.730 align:middle line:90% 00:52:21.730 --> 00:52:24.670 align:middle line:84% Angela is offering that "people want to hear a good story." 00:52:24.670 --> 00:52:26.470 align:middle line:90% Sometimes. 00:52:26.470 --> 00:52:28.660 align:middle line:84% Many of you know games that tell no story. 00:52:28.660 --> 00:52:30.280 align:middle line:90% There's no story at all. 00:52:30.280 --> 00:52:33.910 align:middle line:84% And that's part of the fun, as you fill it in with what you need. 00:52:33.910 --> 00:52:36.187 align:middle line:84% But there's lots of games that have a great story. 00:52:36.187 --> 00:52:38.770 align:middle line:84% And, Angela, it sounds to me like you love games with a story. 00:52:38.770 --> 00:52:42.670 align:middle line:84% So an interesting point while we're talking 00:52:42.670 --> 00:52:46.910 align:middle line:84% about a minimum viable product, the question becomes, how much of a story 00:52:46.910 --> 00:52:48.220 align:middle line:90% can you tell in that? 00:52:48.220 --> 00:52:51.310 align:middle line:84% If this is a two-week-long game that you're creating, 00:52:51.310 --> 00:52:53.050 align:middle line:90% how much story can go in that? 00:52:53.050 --> 00:52:57.280 align:middle line:84% Is the five paragraph background of the main character going to make it? 00:52:57.280 --> 00:52:58.360 align:middle line:90% Probably not. 00:52:58.360 --> 00:53:02.053 align:middle line:84% You probably only have a few sentences to get across that main idea. 00:53:02.053 --> 00:53:04.970 align:middle line:84% Jonathan's asking, "is there a simpler graphical game design framework 00:53:04.970 --> 00:53:06.470 align:middle line:90% for beginners similar to Scratch?" 00:53:06.470 --> 00:53:07.980 align:middle line:90% Well, Scratch is a great one. 00:53:07.980 --> 00:53:09.860 align:middle line:90% I would take a look at Godot. 00:53:09.860 --> 00:53:13.160 align:middle line:84% I would look at GameMaker Studio are all ones that can get you started, 00:53:13.160 --> 00:53:15.440 align:middle line:90% most definitely. 00:53:15.440 --> 00:53:20.270 align:middle line:84% I'll also offer, Jonathan, that it might not be as difficult as you think. 00:53:20.270 --> 00:53:23.810 align:middle line:84% But if you're looking for a graphical game design tool, 00:53:23.810 --> 00:53:29.690 align:middle line:84% GameMaker Studio, as well as Godot might be ones that are helpful. 00:53:29.690 --> 00:53:33.200 align:middle line:84% Unity also has amazing training available. 00:53:33.200 --> 00:53:38.120 align:middle line:84% The docs are really helpful and wonderful. 00:53:38.120 --> 00:53:41.560 align:middle line:84% Ezra's asking, "what are some key things to keep in mind when designing sound 00:53:41.560 --> 00:53:42.700 align:middle line:90% for a game?" 00:53:42.700 --> 00:53:44.380 align:middle line:90% You know, I'm not a huge-- 00:53:44.380 --> 00:53:46.720 align:middle line:84% I'm not a sound expert, but what I would say 00:53:46.720 --> 00:53:51.500 align:middle line:84% is that one is simplicity over anything else. 00:53:51.500 --> 00:53:55.060 align:middle line:84% And if you're looking for someone that is an expert in sound, 00:53:55.060 --> 00:53:56.290 align:middle line:90% I would go find an expert. 00:53:56.290 --> 00:54:00.250 align:middle line:84% Go find someone that's really great in sound design. 00:54:00.250 --> 00:54:05.122 align:middle line:84% You can go on to most musicianal hire websites. 00:54:05.122 --> 00:54:07.330 align:middle line:84% And you'll type in sound design, and there are people 00:54:07.330 --> 00:54:09.413 align:middle line:84% there that you can hire if you're wanting to hire. 00:54:09.413 --> 00:54:15.340 align:middle line:84% If not, go to YouTube and type in "how to design sound for a great game." 00:54:15.340 --> 00:54:17.720 align:middle line:90% There is a great tool-- 00:54:17.720 --> 00:54:19.840 align:middle line:84% in fact, this is one of the unexpected things. 00:54:19.840 --> 00:54:25.030 align:middle line:84% That's why I love Q&A. There is a tool out there called BFXR-- 00:54:25.030 --> 00:54:32.470 align:middle line:84% like Bob, Frank, X like X-ray, R as in ray-- 00:54:32.470 --> 00:54:33.170 align:middle line:90% BFXR. 00:54:33.170 --> 00:54:37.910 align:middle line:84% And this tool is a synthesis tool, like a sound synthesis tool, 00:54:37.910 --> 00:54:43.460 align:middle line:84% and it creates free, usable sound effects for your game. 00:54:43.460 --> 00:54:47.000 align:middle line:84% Like, there's a coin button, and it knows what a coin sounds like, 00:54:47.000 --> 00:54:50.450 align:middle line:84% and it will join, it will hit, it will do a random coin. 00:54:50.450 --> 00:54:53.270 align:middle line:84% If you want a power up, it has power ups there. 00:54:53.270 --> 00:54:56.180 align:middle line:84% And again, I want to think Colton Ogden for pointing that out to me. 00:54:56.180 --> 00:54:56.680 align:middle line:90% BFXR. 00:54:56.680 --> 00:54:59.610 align:middle line:90% 00:54:59.610 --> 00:55:02.550 align:middle line:84% So with that, team, I want to say thank you for being here today. 00:55:02.550 --> 00:55:06.300 align:middle line:84% If you want to go deeper in this, I encourage you, first of all, 00:55:06.300 --> 00:55:10.170 align:middle line:90% to check out our offerings here in CS50. 00:55:10.170 --> 00:55:13.260 align:middle line:84% If you're watching this on YouTube, just simply go down below this video 00:55:13.260 --> 00:55:16.350 align:middle line:84% and you're going to see a host of links for you to access. 00:55:16.350 --> 00:55:24.310 align:middle line:84% I would encourage you to delve deep into the next two weeks or so into one 00:55:24.310 --> 00:55:28.120 align:middle line:84% project and not give up on that project unless you're absolutely 00:55:28.120 --> 00:55:30.370 align:middle line:90% sure that it's simply not viable. 00:55:30.370 --> 00:55:33.190 align:middle line:84% And if it isn't, immediately turn around and decide 00:55:33.190 --> 00:55:35.800 align:middle line:84% to create something that's viable and work in that project. 00:55:35.800 --> 00:55:39.470 align:middle line:84% So an absolute honor working with all of you. 00:55:39.470 --> 00:55:42.970 align:middle line:84% And I wish you a great day as you go out and you create the game of your dreams. 00:55:42.970 --> 00:55:43.928 align:middle line:90% Have a great day, team. 00:55:43.928 --> 00:55:45.630 align:middle line:90% Thanks again. 00:55:45.630 --> 00:55:47.000 align:middle line:90%