Skip to main content

Lessons about game dev

 Meet Bobby (not Kotick)! He is going to taught you a lesson about how NOT to make games.

Bobby is a very sharp bussinessman, that sees everybody is playing games. More important, everybody is spending money in games. What would any smart bussinessman do? Well, get into the games bussiness, and he knows he has an advantage. See, Bobby is not going to spend hundredths of thousands dollars to make a game, when he can make it much cheaper. 

And here comes the first mistake. Bobby goes to his birth city, in a shitty third class communist country, where it is easier to find a honest politician than a game developer. There, he assembles the Avengers... I mean, a team of talented guys that... never made a game in their lives. He invests in hardware, with good workstations equipped with fairly modern GPUs, pairde with the worst, cheapest 18 inches display you can get. Also, a server with a 24 VRAM GPU, because any game studio needs a server for... nobody knows exactly for what, but they have a server and no one can use it to work (because servers are not for working).

The second mistake: Bobby is not a gamer himself. Never played, even in his phone. Neither is a developer (probably you figured out that when I mentioned the useless server), or an artist. Yet, he insists in design the game, organize the development process, design levels, have the last word about colors and art... he decides about everything. Third mistake: he chooses Unreal as game engine. Don´t underestand me wrong, Unreal is a great engine, when you have a couple of veterans on your team. 

Through the next two years the team will go from one project to another, struggling with ever changing members, irrational scopes (multiplayer games are not the best way to start learning), and poor process management. Design document? We don´t do that here, we improvise and we communicate the ideas to the team through constant phone calls, two ro three every day, stealing an hour of work or more. Technical limits? No way! Bobby doesn´t only wants to make a game, he wants to prove a point: that he can make games in Cuba, for a fraction of the price, and make it AAA quality. Levels quickly get out of hand: larger and full of stuff. The more polygons the better: when I joined, the project was a... platform (sort of) for mobiles. One single shoe of the character had 170k polygons. When I told him that it had to be remade, he answered that it wasn´t possible because visual quality was strictly required. It was not only a platform game, it has to be the damn best looking platform game on Google Play, the Crysis of the mobile platform games. The team was neither convinced that retopology was required. "Look here", they showed me the shader complexity viewin Unreal, "the character model is green, so, it doesnt requires optimization".

The project died under its own weight like many others, yet, the lessons were not learned. From the beginning, same mistakes were made. Need a shiny surface? Use lights! Emissive materials? No way, they are more expensive than using lights and they don´t shine enough (perhaps because the value was 1.0, instead of trying more to see what happens?). Look here and see, lights are dark green in the shader complexity view, so they are optimized! The lights had shadows, but dont worry, the light areas don´t overlap each other (at least, most of them), so, no problem if we have 20-30 lights in scene at same time! 

We wanted to make the game in one month. Me and another guy, who had experience with Godot, ensured that we could make a endless runner in a month, yet, we were not authorized to change engine. After 8 months, the project is... hard to say. Features keep coming, and more crazy features has been discarded, becasue of course, the project can not be just a runner, it has to be a runner with original mechanics, with bosses you had to fight, and lots of things falling onto you from everywhere all the time. Actual content for the players to buy is still missing (but a lot of effort has been invested in cinematics, filler NPCs and things that will not generate direct sales, or any profit at all). And when finnally the game was tested in a phone... it rana t 15 FPS. Yeah, that´s another one: only one PC could build and the user was too busy to build. So, we, the developers, got one build to test every 2-3 months.

Well, would you say, it is impossible that after three years they haven´t learned anything. Yes, a couple of things were learned the hard way. The main artist had to discard scene lights. I discarded lights in place of emissive surfaces, without asking permission or telling anyone (nobody noticed it). We couldn´t cut the massive amount of assets used on each scene type, but at least the trees were replaced by a billboard. And no, it was not enough, we barely get 30-32 FPS in a mid range phone.

Ok, then, first lesson. If you don´t know about something, get somebody who knows and pay him to do the job. Specially that: get somebody who actually knows what he is doing (second lesson). Making games is not about placing assets in the editor, is about knowing what are the best assets to place in the editor for the kind of game I am doing and my target platform. What a nice looking 3D game? not gonna happen in mobile platforms, unless you have some really great 3d artists that can texturize like real geniuses. Third lesson: listen to the people who know. Not sure if this is the place, but here is fourth lesson: principles are fine, and wanting to prove yourself is great, but ultimately, game industry is about making money. Wanna impress? Make a game that makes money. Simple is not bad. Fancy graphics does not make a game good by themselves. Focus on making something fun. That´s more like several lessons in one, but right now I lost the count, and I have to go back to work. Without consulting me, Bobby decided that in some specific level, the player skates instead of running, which means the mode made for the rest of the game and the careful work I made to support multiple playable characters with equippable items is gonna go throught the drain. If it is even remotely possible to implement such thing.


Comments

Popular posts from this blog

Isometric camera with Godot

Took some effort and some of my sleep hours, but at last, I made it. Here is my first videotutorial: implementing an isometric camera in 3D, with Godot. Useful if you want to emulate the look of old classics like Fallout 2, but with some extra features. Considering that my voice is not so nice, and my english pronounciation is even worse, I also added texts to help you underestand what Im saying. You will also notice some background noise, but cant do anything to solve that. Any suggestion is welcome. Expect another tutorial soon.... or sor tof. This time, will be about my AI system.

Unity3d isometric camera tutorial

I had pending this since a month ago, so Im forcing myself to post it today. The goal is to provide a fully functional isometric like system that you can use with few or none modifications in your own game. So, lets get started. Start Unity3d and in your scene, add an empty GameObject, we will call it target . Create a camera object and drag it to target to make it child. The result looks like this: Now select Camera and set the values to this: For a true isometric like feeling, ortho projection is essential. You could use perspective, but it is not the same. Play with Size to suit your needs (we will be using this later, when implementing zoom). Now, lets create an script named CameraController, or whatever, and drag it to target GameObject. Lets implement scrolling, the easier part: go to Update() and add the following code: if (Input.GetKeyDown(KeyCode.W)) {             dir = UP;         } e...

Tutorial: building a modular character

Building character models with body parts have been an obsession for me in the last weeks. I have googled, asked, googled, and asked again, played with Unity3d editor, tested code, and so on. You can see the result of my work in the previous post . First of all, I have to say that what I achieved is mostly derived from this thread and the sample posted there. My code is a copy&paste of that sample. Also, you can find a more extense solution in this Gamedev.net forum thread . First, lets start with the model, which obviously, is divided in the required sections. Lets say we have head, torso and legs. Each part must be exported to a separate fbx file, but it must include the skeleton. Then, export the skeleton without geometry to another fbx. Im going to assume that you want to instantiate all components, and even player, at runtime, from a  C# script (no Unity editor involved, except for creating prefab an position marker), so, we will place the sections, the skeleton and ...