Indie Minds With Programmer Diogo Braga
Introducing Our Third Indie Mind
Diogo Braga is a game developer and data science enthusiast and the current CTO of Lamina Studios, as well as, at the time of this writing, the Lead Developer of Dungeon Souls. He is specialized in computer graphics and artificial intelligence, having more focus in Machine Learning and Optimization techniques in the latter. In recent years, Diogo Braga has developed a website for the detection of neurodegenerative diseases through voice for his bachelor’s degree. He has also developed a detection module for the website that can detect early signs of Parkinson’s disease through voice, using machine learning algorithms, with 92.38% accuracy. He is currently writing papers to tune the algorithm furthermore.
Explain your role and responsibilities as a game programmer
As a game programmer, my role is to implement the game system designed by the game designer and game developer. Usually, the term programmer and developer get used as synonyms, but they mean differently. Game Developer is the person who is responsible for designing how different parts of the game’s system interact with each other (for example, how does the inventory system interact with the HUD?). The design usually gets specified in diagrams and the programmer’s role is just to follow the instructions on the design and implement it, making sure that there are no implementation bugs, as well as testing for any possible flaws
- What are the different tools you use while creating a game? The engine, plugins, Text Editor/IDE. And why do you prefer these?
It really depends on what type of game I’m working on, especially in regard to the target platform. If it’s a 2D game, I’d prefer either Unity or Game Maker, since both of these languages, engines and editors are quite well prepared for 2D games. If it’s a 3D game, I prefer Unreal, since it has a lot of technologies that help make a game of any kind. Apart from these, I usually develop any side tools needed that may ease the development process!
What is your programming process when creating a game?
In regard to programming, I usually take a granular approach at the development. I start by defining what the system will need (in terms of ‘components’) and how the different parts of the system will interact with each other. Afterwards, I define what each component must do and the possible future changes that these will support, as to keep modularity at a maximum, within the project’s scope. Finally, I start implementing each specific task of each component.
What are the design patterns you recommend using while programming a game? Also, any general best practices in game programming?
I usually recommend patterns such as polymorphism, inheritance, template pattern (very useful, especially in Game Maker) and adapter pattern. However, most of the implementations of game mechanics can be well implemented and designed by following best practices and principles such as the SOLID principle and GRASP. From SOLID, I especially like the “Single Responsibility Principle”, which states that a class/object/component (depending on the type of game engine you’re using) should only have one responsibility and one reason to be changed. By having this thought in your mind at all times, it will help you make a much modular code.
What are your tips and tricks when dealing with graphics in the game engine you prefer?
Again, depends on the engine I’m working on! But, general tips are to cache as many art assets as possible, as to avoid re-processing images that could be stored temporarily, therefore increasing the workload on the GPU and reducing FPS. I also use some shaders, particle systems and computer graphics algorithms to do some sweet effects! I do find that always having a separate project to test graphical effects is key.
How do you manage a team of programmers when working on a game? Also, how do you communicate with the rest of the team like artists, game designers, musicians and so on? What tools do you prefer and your best practices in communication?
Usually, the best strategy is to divide the system-to-be-implemented into several components, which, in turn, are divided into several tasks. This way, everyone can be coding a part of the system without necessarily messing with someone else’s code, making sure the version control system (for example, Git) doesn’t complain in merges! I use tools such as Discord, Skype, Trello and Bitbucket to communicate with the team, since each one of these tools provide different ways of communicating, whether it’s a short text, voice meeting, task management or documentation sharing. I can also recommend Hipchat and Slack for communication! As a best practice for communication: respect everyone on the team, but make sure you communicate everything you can. In a team project, communication and understanding is vital for the project’s success. No one wants to feel like they are being ignored, nor have the feeling that they’ve just implemented something that was already done. Especially, no one likes it when the project is behind just because someone was too shy to ask for help. A concept to keep in mind is that a team stays together and moves together.
Whenever you get stuck during game development, if it’s something in regard to technical aspects, usually googling your problem will help you (especially StackOverflow). However, if you feel like this at often, you may want to reach out to companies that offer mentoring initiatives. Usually, they’ll help you out in your conundrum and you might even get an interesting connection with them! Also, make sure that, when developing, you always make your code easy to understand and easy to change. Be kind to either your future self or the future developer who’ll have to navigate through your code!
Thank you, Diogo, for sharing your experience and knowledge with our Alnins. You're always welcome to join us again!
Feel free to comment below to ask Diogo about game programming. He will be available for few days after publishing this post to answer your questions. So, hurry!
Also, don't forget to share share share!