Full transcript
0:00You don't know how to finish your games.
0:03I know, controversial, but I do think
0:05that's a problem. And it's a problem
0:07that affects most aspiring game
0:08developers. Yeah. Yeah. I can't finish
0:10games either. See, we are alike.
0:12Smoothly gained your trust, didn't I?
0:14Let's take my case. I wanted to make a
0:162D survival game, so why not add a
0:18necessary procedural generation to it? A
0:20pointlessly complex character model.
0:22Cacti. How the hell did they even get in
0:23here? Project abandoned. And despite
0:25that, it seemed too simple to me. Even
0:27though in reality, it's completely not
0:29the case. So, I went to make another
0:30game, reading the board. This one I
0:32finished, released, and a lot of people
0:34actually liked it. Hell, even I myself
0:36when I have absolutely nothing to do,
0:37whether in the subway, an airplane,
0:39taking a will occasionally open up
0:41the game to beat high scores on the
0:42levels. Reading the board seems like a
0:44black ship in this context, but soon
0:46everything will fall into place. For
0:47now, let's talk about my current
0:49project. It doesn't have a name, but
0:51that's not the point. The point is that
0:52in one form or another, I've been
0:54working on it for almost 2 years at the
0:56time of writing the script. And if it's
0:57somehow not obvious, the game does not
0:59look like I've been working on it for
1:00almost 2 years. I'm terrified that this
1:02project will meet the same fate as the
1:04game before last and the games I made
1:05before that. I don't want that. So, I
1:08wondered what made reading the board
1:10stand out so much. Why was it the only
1:12one I managed to create from start to
1:13finish? I believe the main reason for
1:15this is adding a wider range of tasks
1:17and ideas to the game that I could have
1:19implemented on my own or in the word
1:21over scope or rather the opposite
1:23absence. Back in the very first video
1:25about reading the board, I said it was
1:27just a remake of the most generic and
1:29remarkable mobile time killer. It was
1:30called Ryder. Ryder is a small game with
1:32a simple idea. It already has a finished
1:35form. And copying something complete is
1:36incomparably easier than creating
1:38something of your own from scratch, as
1:40you know, or you think that you know,
1:41most likely. A lot of people
1:43underestimate the insane amount of time
1:45required to polish an idea that's
1:46completely new to them. What's more,
1:48even an idea that's been thought through
1:49from beginning to end often turns out to
1:51be less interesting after implementation
1:53than it seemed at first. And once that
1:55becomes clear, one of two things usually
1:57happens. Either you pile and plan
1:58changes and additions onto that already
2:00fully polished implemented idea. Things
2:02which by definition will have little
2:03connection to the core of the original
2:05idea or you remove the implementation
2:07from the game entirely. In the second
2:08case, it's obvious where the time is
2:10wasted. Come up with an idea, let it
2:11marinate, implement it, realize it
2:13doesn't fit the game, delete it. And in
2:15the first case, the time is wasted in
2:16all the unforeseen additions. Because no
2:18matter how hyper modular,
2:20object-oriented ECSbased JavaScript
2:22artificially intelligent your game is.
2:23You simply won't be able to bolt on
2:25functionality you didn't plan for
2:27beforehand as efficiently as you could
2:28if the whole thing had been designed
2:30from the start. And by the way, when I
2:32say waste time, I mean time wasted in
2:33the context of developing a specific
2:35game. Obviously, every time you
2:37implement something new for you, you
2:38gain invaluable practical experience
2:40that they couldn't have gotten any other
2:41way. That's not what I'm talking about.
2:43I'm talking about how by constantly
2:45piling new functionality on top of your
2:46ideas like this, you unknowingly
2:48multiply, and I'm not exaggregating,
2:50multiply the total amount of time you
2:52need to invest into making the game. And
2:54that's only one source of overcore. I
2:56haven't even mentioned the most obvious
2:57one. A huge number of major difficult to
3:00implement ideas right from the planning
3:01stage. And you remember what tends to
3:03happen to them after implementation,
3:04right? It's worth noting that for the
3:06most part, even ideas that seem trivial
3:08at first will gradually start creating
3:10new problems once you actually start
3:11typing them out. And solving those
3:13problems will often take more time than
3:15implementing the idea itself. That's how
3:16so many projects made by so many
3:18different people end up in the trash.
3:20And my projects are no exception. And
3:22now using all this information, let's
3:24think once again. Why was I able to
3:26finish already in the board? Yes, I
3:28added a few mechanics of my own,
3:30improved and fixed the things that
3:31annoyed me in the original, but at its
3:33core, it's copying a finished idea. And
3:36I believe it was exactly this simplicity
3:38that allowed me to finish my game. I
3:40didn't have to design the flow of the
3:41core mechanics, the gameplay loop, all
3:43the countless smaller ideas. Most of
3:45that work had already been done before
3:46me. Let's take something really simple
3:48as an example, almost primitive. Pong.
3:51>> Everyone knows Pong. It's basically one
3:53of the first video games ever. So, it's
3:55simple as a pair of cheap underwear.
3:56There is nothing to invent there.
3:58Whatever game logic existed half a
4:00century ago remains exactly the same. In
4:02a couple of days, in between bathroom
4:03breaks, I wrote Pong. I got into this to
4:05test my theory. Would even the simplest
4:07possible game turn out to have a
4:09disproportionately large number of
4:10unexpected problems during
4:11implementation? And oh boy, yes, the
4:14theory was confirmed on the surface.
4:15What do we have? Two paddles and a ball
4:17with a score counter. But it's unlikely
4:19that the first thing you thought about
4:20was calculating the ball's bounce angle
4:22of the paddle, which by the way
4:23shouldn't just equal the angle of
4:24incidence, or the opponent's paddle
4:26movement logic, because simply following
4:28the ball's Y value would be way too
4:29boring and predictable, or any of the
4:31many other pitfalls, some of which I'll
4:33tell you about right now, I won't. I
4:35wrote a script where I went into great
4:37detail about most of the non-obvious
4:38problems that came up, explained how I
4:40solved them and all that But then
4:41I somehow snapped out of it and realized
4:44that well that's not what the video is
4:46about. It's just a regular punk. But
4:48just to put things in the context,
4:49here's what I added. Smooth paddle
4:51controls, opponent movement logic, which
4:52actually turned out pretty interesting.
4:54Bouncing the ball at different angles,
4:56increasing difficulty over time,
4:57scoring, frame rate independence, and at
4:59this point you're good listening to me,
5:01so I'll stop. And if anyone is still
5:03interested in seeing the implementation,
5:04even though I'm pretty sure there are
5:06like a million different points on
5:07GitHub, I left a link to the repo in the
5:09description. However, to have something
5:11to actually analyze as an example, let's
5:13look at the controls. Not even the
5:14controls themselves, but one corner
5:16case. In some games, if you hold forward
5:18and then hold backward, you keep moving
5:19straight. In some, you start moving
5:21backward. In some, you come to a
5:22complete stop. And what happens if you
5:24release the backward button after that?
5:25What if you release the forward button?
5:27These are all questions whose answers
5:28need to be well thought out because
5:30there simply is no single correct
5:31answer. Each option fits its own case.
5:33For me, for example, the most suitable
5:35model was to have the paddle keep moving
5:36in the direction of the last key
5:38pressed. But for your particular game,
5:39the answer could be anything. Did I
5:41think about this beforehand? No. The
5:43need to think about it only appeared
5:45after I already implemented paddle
5:46movement. Adding the logic I described
5:48might be easy. But the problem is that
5:50there are going to be so many little
5:51additions like this things you never
5:53even realize you need that they will be
5:55enough on their own to make you wonder
5:57is this game even worth finishing? I
5:59certainly didn't expect a game as
6:00primitive as punk to require that many
6:02little additions. Now imagine how many
6:04there will be in a more complex game.
6:06And you have to understand that in a
6:07more complex game those additions
6:09themselves are going to be much more
6:11complex. Therefore, to fill all of this
6:13for yourself, I recommend each of you
6:14who has the same problem as me to write
6:16something simple, something that already
6:18exists. That same punk, Space Invaders,
6:20Breakout, Asteroids, Flappy
6:22Bird. Why not? Not an MMO RPG, please.
6:24And then when you see that project
6:26sitting in your repository, you'll know
6:28that it's a finished piece of software.
6:29You can add something of your own to it,
6:31but it's no longer necessary because
6:33it's a complete thing. You made it from
6:35start to finish. Only start working on
6:37projects that seem much simpler than
6:39what you think you can handle because
6:40along the way you're going to run into
6:42time-conuming problems that you couldn't
6:44possibly have thought of beforehand.
6:46That's like the moral of the video.