Starting an indie studio from scratch—Moving Pieces' journey into game dev | Inside Unreal

Video Statistics and Information

Video
Captions Word Cloud
Reddit Comments
Captions
AMANDA: Hey, folks! This summer, we asked 1,000 artists if they wanted to learn Unreal Engine in four weeks, and boy, did they ever! Feast your eyes on some of the incredible projects that came out of Escape's most ambitious bootcamp to date in our "Summer of Unreal" sizzle, now on the Unreal Engine YouTube channel. One of the most common questions we hear about digital twins is, "How do I get started?" While a digital twin is usually a large-scale project, there are many steps you can take right away. Explore our guide on the Unreal Engine feed to learn how to start prototyping today! With Unreal Engine 4.27, both the Path Tracer and GPU Lightmass received enhancements--the Path Tracer makes it viable to create final pixel output, typically reserved for offline renderings and GPU Lightmass reduces the time needed to bake your lighting in complex scenes. Check out the brief overview of these updated features to 4.27 on the YouTube channel as well. And now over to this week's top karma earners. Many, many thanks to: Everynone, Shadowriver, ClockworkOcean, B O B c a t, BotsU1e, Powill, Jnat, miyagi1, Dokoro36, and terishrimp. Onto this week's community spotlights--J Hill is showing off his character creating muscles with FLEX, a spunky cyborg. Created to play with features in Unreal Engine, head over to his ArtStation page to see how the mighty FLEX was developed and see more of their outstanding artistry. Congrats to Mpact Games! After 14 years in the making, Hanako: Honor & Blade officially released into the wild! Developed as a passion project to remember those lost to cancer, take up arms to cleanse the scourge of Japan to restore peace and beauty to the land. Download Hanako: Honor & Blade on Steam now. And coming next year, take a look at Icelandic studio Parity's Island of Winds, an adventure set in a fantastical 17th century Iceland. Assume the role of Brynhild, the Balance Keeper, who sets out on a journey of discovery where she'll face creatures of legend and challenging puzzles. Stay up to date on their development at islandofwinds.com. Thanks for watching this week's News and Community Spotlight! [AUDIO OUT] KYLE ERF: Hey. AMANDA SCHADE: [AUDIO OUT] KYLE ERF: My audio is not coming through. [AUDIO OUT] AMANDA SCHADE: Oh. How about now? Sorry about that, folks. KYLE ERF: Inside Unreal. AMANDA SCHADE: We're doing it live. OK. Yeah, all right, good. Thanks, everyone. It's always an exciting start to our Wednesdays but-- or Thursdays. Well, let's nail it. Again welcome to Inside Unreal, a weekly show where we learn, explore, and celebrate everything Unreal. As I said, I'm your host Amanda Schade and we're really, really excited to bring the team from Moving Pieces on the show today. So we have Patrick McAvena, President. And Kyle Erf, Director of Technology. KYLE ERF: Hey there. AMANDA SCHADE: So, if you all are unfamiliar, Moving Pieces team is the creators of two really, really awesome games. So we have Dodo Peak, which is your, what? Vibrant, I would say, retro platformer? And then you're currently working on Shoulders of Giants, the action roguelike, which seems to feature the friendship, or at least camaraderie, between a frog and a robot. We're really, really excited to hear, not only how you got started as a studio, but it sounds like there are some much requested how-tos that you're going to be sharing with us today. KYLE ERF: Right. PATRICK MCAVENA: Excited to show those, off. Yes. Awesome. So, Amanda, thanks so much for having us. We're really excited to be here and to share a couple of projects, and just our general game dev history with everyone. So to start things off, just to tell you a little bit about the studio, we started off in 2019 with Dodo Peak. Which, as Amanda said, is a Retro Arcade platformer, which is out on Apple Arcade and Nintendo Switch. And Dodo Peak actually started as my first game project ever in 2017. I didn't have any programming or game development experience. I had been tinkering around in Unreal a little bit, and did a couple really interesting first projects that I won't show anyone. AMANDA SCHADE: Like prototypes? PATRICK MCAVENA: Yeah, prototypes. Just kind of learning and seeing what I can do. I did have a lot of experiences with 3D artists, working in commercials and visual effects. So I did understand how 3D works and all that stuff. So that definitely helped me out starting to learn Unreal. But because of my lack of game development experience, and also programming experience, everyone tells you, OK, when you make your first game, you should make it really simple. You should have a very small scope. So I tried to do that. I tried to do something that I was excited about making, but also I felt like I could make. So I started developing Dodo Peak, with a friend, James, who did a lot of the design and UI and characters. We collaborated on the game design. And like I said, I was actually the only developer and programmer on the project up until 2019, when we brought Kyle on board. Dodo Peak interestingly was actually started as a AR game. We were really excited about Apple's AR kits. So we're like, OK, maybe we could do something in AR. I don't know if it's easy to transition to my screen. But I do have a picture of the early AR demo. If we can show that. KYLE ERF: Also-- PATRICK MCAVENA: Yeah, awesome. So yeah, this was the crazy-- you could play Dodo Peak on the floor in the living room. Sorry, Kyle. What were you going to say? KYLE ERF: I was going to say, I don't know if we played the teaser yet. So if we want to also provide a before and after? PATRICK MCAVENA: Oh, yeah. That's probably smart. Yeah, actually, if we could go ahead and play the teaser now-- the trailer, that's probably a good place to do it. [MUSIC PLAYING] KYLE ERF: Straightforward game with influences like the arcade platformers of the 1980s. AMANDA SCHADE: It seemed like it translated to that AR experience pretty well, though. PATRICK MCAVENA: Yeah. I think I have just kind of always been fascinated with like, little worlds, where you could just look at them and move around. And it kind of seemed like it made sense. Some of the challenges with this game mode was we wanted to ship with an AR mode. And also a normal mode that you could play on your phone. So because of this 360 degree level, and you could-- the camera kind of, like, swam around. It was a little vomity. So when people played that, they were like, I don't know if this actually makes for a really good, normal game. It's cool if you are in AR. So we actually decided just to cut the scope and let's just make it a non-AR game, and just take it where we can. So in 2019 we actually had the opportunity to scale up the team, add a lot more content and polish to the game. And at the time there were a lot of technical challenges that I was already facing, with my lack of programming experience. So I actually took a Unity course, which is where I met Kyle, ironically. And I could see that he was actually a really, really good programmer. So I bought him a pumpkin spice latte at Starbucks, and I sat him down, and I was like, you should join our team. And you should make this game really cool. And if we can-- actually, I'm going to open up to editor now. If we can just switch to my screen. So with a long project-- it had been in development for about a year and a half, and like I said before, I didn't really have a lot of programming experience. So this is kind of what happens. So this is basically the player controller. We call it the mother Blueprint, where basically a lot of the player logic happens. So as you can see, there's definitely a little bit of spaghetti going on. So when Kyle started I think he kind of had to make some decisions like, OK, do we clean up some of the code? There's a lot of moving things going here. Do we just keep adding features to the game? Or what do we do? So, Kyle, what was your kind of on-boarding experience like? KYLE ERF: Well I mean look at this, Pat. What do you think? PATRICK MCAVENA: [LAUGH] True! KYLE ERF: So first of all, I like that you're showing this. I want this to be sort of unfiltered. And I really like-- there's another Inside Unreal with the Mortal Shell people. It's a really great one. People should check it out. I mean, keep watching this stream, but after that. And they show some stuff that's like Blueprints, that you wouldn't normally show in a talk. But this all shipped. And what Patrick had on his screen just now all shipped. So coming on, I should say a couple of things just for some more context. When I came onto the project there was maybe-- I think we were like three months and some change away from when we needed this out. So the approach you have to take when you're in that sort of situation is less like-- if I had a year, yeah, we would probably rewrite a lot of the code. But because there were all these requirements-- and I'll get to those requirements in a second-- you kind of just leave what works. And as hard as Patrick's initial code is to follow, it works. And you know, God bless him. He figured out a lot just for someone who didn't know how to program. And I'm actually curious, Patrick. How did you learn any of this stuff? Because you did Blueprints, you also learned some C++, which you had never done. PATRICK MCAVENA: I did. I actually ended up writing my first code on the project. Like a lot of the enemies we're all originally in Blueprint, but they were very buggy. So I was like, OK, I'm going to take this upon myself. I'm going to learn C++, and rewrite these in code. And they actually ended up working pretty good. And we still use that code today in the game that shipped. But interestingly, one of the early challenges-- and Kyle can speak to this part, like I was saying before-- like some of the pathfinding, since this is not-- I wasn't using the character component, this is like on a grid. There wasn't any kind of out-of-the-box solution for AI pathfinding to really work. So I came up with, like a kind of not really great solution. That worked most of the time, but as we started designing more levels, it became kind of a bottleneck. So one of the first things that Kyle did was he actually helped solve this problem. And Kyle, you can probably explain a bit more about how you approached it. KYLE ERF: Yeah, let's throw up my screen. So I think I have yours up here. I have like three Unreal projects open. Suites. If anyone has any questions, this editor is Rider by JetBrains by the way. Highly recommended. I can talk more about that if people want to know, but it's a good drop in replacement for using Visual Studio to edit Unreal code. So Patrick wrote this thing called set SMART path. Patrick knew what pathfinding finding was, but he's not a game developer. And I should say my background was also not in games development, we kind of just hit the ground running there. But I've been just a normal programmer for the last decade or so. And I wanted to get into games. I wanted to do something more creative. That's always been sort of the dream. So anyway, coming on to this I was familiar with things like A*, and stuff. But Patrick solved pathfinding the way that a person who's just kind of figuring this out on their own might. Which I actually-- I'm pretty impressed with what he came up with. PATRICK MCAVENA: Hey, Kyle, just curious, do you have an example of that level seven? I think that might be interesting context. KYLE ERF: Oh, yeah. So a big issue we had with the game was when you start. All the eggs come out and go to where the eggs are supposed to go. And they use this very basic pathfinding. And so you couldn't do something like this, where they come out of the level and then fly all the way around and come up on the other side. Let me just play that again. So we needed actual pathfinding. We couldn't just try and move in the direction you're supposed to move. But what Patrick came up with-- this is a little grid, this is a tool called Snip and Sketch, it's like a window screenshot tool. It's probably the most useful tool in game development. Unreal Engine is also pretty good. But-- AMANDA SCHADE: [INAUDIBLE] KYLE ERF: --Snip & Sketch is really useful. So this is just a grid. I think this might be like a Guinea pig cage, or something. But it's good for our purposes. So say we have some obstacles in the world. And I'll just put some here. Black is obstacles. And then this nice gold color, that's our target, where we're trying to go. And so let's say you were pathfinding. Patrick's code that I had up earlier basically tries to go towards something, and if it can't go towards something, it goes another direction. And it avoids going to places that it's been before. Which is a pretty reasonable way to try and get through the world, frankly. So that might look a little something like this, where you're coming in from the top, and you're trying to get to this point here. And you get down, you hit this juncture here, you can no longer go forward any further. So that's out. You try to go-- it's also to the right of you, so you try to go to the right. That's out. And you're like, what are my other options? Well, I've already been up, so I go this way. And then it's like, OK, well now I can go down. So I'll go down. I can't go to the right. Left makes absolutely no sense. And I can't go up because I've already been up. So I go down and then to the right. And then you kind of follow through. And that pathfinding actually works really well if there's sparse things. And it's just a total layman's solution. And I think it's really cool. But that doesn't work for actually solving a maze. So what people usually think we did here to get these eggs to fly around this path as well as they do, is you implement something like A*. But the solution we actually went with is a simple breadth-first search. For those who aren't familiar with that, there's a million explanations online. But basically-- to BFS-- Oh, man, my shortcut didn't work. But basically you're-- instead of doing anything directed based on where you're trying to get, you just sort of go in every direction, like one layer at a time. And I can pull the code up for that. It's probably not the most interesting thing in the world for someone to just stare at the code. But the benefits of doing breadth-first search versus something smarter is, the simplicity is useful, first of all, for modeling in your head. So it's just easier to understand exactly what the code is doing. Second of all, it's a lot easier to change and add things to. So we eventually added these teleporters that move you from one side of the level to the next. And those completely break locality. Those break relative positions. So something like breadth-first search is actually really good for finding those. And that's just one of the things we had to contend with. Patrick, is there anything else on that you wanted to touch on? PATRICK MCAVENA: I think it was just really cool seeing this. Like I was saying, I spent a lot of time on this problem. And then Kyle comes in, he does it in like a couple hours. And then I was like, Oh, man, what else can this guy do? But no, creating a solution like that, it's just-- you don't want to be road blocked by certain problems like that. So we were able to actually make a lot more interesting levels, having that pathfinding implemented, which is really cool. KYLE ERF: Oh, I will say, the reason that we even still have this old code is that we do still use it. And this goes also back in to simplicity. Like the monkey AI-- there's these monkeys that will chase you in the game-- It's kind of dumb. And we kind of want it that way. So having something that can move and get caught up in a maze-like situation is actually kind of OK for gameplay. And if you do research on like Pac-Man, or-- I mean Pac-Man is a very-- there's a ton of YouTube videos explaining the AI of Pac-Man. The ghosts don't all move in a way that is perfect for catching you, right? It's more fun if they all do kind of different things. And this is sort of the same thing that we have going here. Where, yeah, this isn't perfect AI. We tried giving the monkeys perfect pathfinding, and it actually wasn't fun to play at all. They were just too good. You just couldn't get any breathing room. So actually kind of more naive solutions like this can be a really good choice for AI in a game like ours. PATRICK MCAVENA: Awesome. Right. I guess, Amanda, does anybody have any questions right now? AMANDA SCHADE: Yeah, so there's actually a few. So [? saxam13 ?] was wondering, how did you get past any project breaking hurdles that you may have encountered? Because you are working with a small team, you don't have tons of people you can go pester for help. So how do you how do you overcome them? PATRICK MCAVENA: It's a really good one. I want Kyle to take this mostly. I just want to set it up and say that, yeah, we are definitely a very small team. And we basically released on Apple Arcade, which is essentially like releasing on three platforms and supporting a bunch of different SDKs like iCloud, and different types of input devices. So, Kyle, when he came on, his big decision was, let's tackle the unknowns first, as opposed to tackling them last. But I'll let you speak to that more, Kyle. KYLE ERF: Yeah. So that's a very prescient question, because everything broke. The gameplay was solid. The game was working, and that's like when I came on, when the game was working. Which is in some ways a huge privilege, because I didn't have to be there for figuring out what is fun. But just showing up, I had never used Unreal before. That's a huge other thing that I might touch on in as second, is how to get situated with Unreal. But to answer this question, you got to, first of all, definitely start on things that you aren't sure are going to work as soon as is reasonable. PATRICK MCAVENA: Identify the things that you're most unsure about first. I think that's the most important first step too. KYLE ERF: Yeah, so when I came on, the first thing I did was, let's get this working on Apple TV. Let's at least make it run on Apple TV. PATRICK MCAVENA: Because up to that point it had just run on phones, essentially. KYLE ERF: Yeah. So we did that, and that hit a blocker right away, if I recall correctly, Pat. PATRICK MCAVENA: Yeah, it crashed. KYLE ERF: It would just crash. It crashed immediately [LAUGHTER] PATRICK MCAVENA: So getting stable builds on all the platforms you're going to ship on first is pretty important. KYLE ERF: So if I'm-- this was literally over two years ago. I think I'm remembering correctly. It was some setting with the rendering that just didn't work on Apple TV. PATRICK MCAVENA: Yeah, it was like, the shader effect, or something. Yeah. KYLE ERF: And the way we figured that out was starting a new project that was just empty, and seeing if we could get that to run on Apple TV. And we could. PATRICK MCAVENA: That's always a smart technique. KYLE ERF: Yeah. It's a great feeling when that works. It's also a horrible feeling, because it means now you have to figure out what the heck the difference is. AMANDA SCHADE: What is it about your project. PATRICK MCAVENA: Right. What's wrong with our project? Oh, no! KYLE ERF: It could be literally thousands of things. So I think we're eventually manually diffing project [? seconds. ?] PATRICK MCAVENA: And we found out that Unreal doesn't actually work with extinct animals. So that was the biggest problem. But no, thank you for asking that question. Anything else? AMANDA SCHADE: Yeah. From [? HPplus, ?] they're wondering, how did you go about actually funding your game as a small studio? Did you do Kickstarter? Or work with a publisher? PATRICK MCAVENA: Yeah, that's a really good question. It's one of the most important things that independent developers face. For a long time I basically freelanced. And then I would take time off to work on the game. But then we weren't able to scale up the team that way. So we basically went around and we just kind of pitched the game to publishers and investors. And we ended up finding a partner that was into it. And that's kind of what worked for us. It's not super easy, but I think that's the approach that most people take. There's also Kickstarter and stuff like that. And other crowdfunding methods as well. KYLE ERF: Yeah, I would say the vast majority of the game's development was quote, unquote, "self-funded," or whatever you'd want to say. Patrick working instead of doing paying jobs. PATRICK MCAVENA: Yeah, watching the savings go down a little bit. But it all end up working out, so I'm happy I did it. AMANDA SCHADE: Still sort of on this side of having a game, David Ricardo is asking, how did you build up your audience for it? So what kinds of marketing or advertising did you do to reach players? PATRICK MCAVENA: Yeah, that's something we didn't do a lot of, unfortunately. Because we didn't have a lot of experience in that realm. I mean we got really lucky in the sense where, if you could get the platform you're releasing on to help you out in any way, that's huge. So luckily launching on Apple Arcade, the game was in front a lot of people. And we didn't really have the resources to do much more than that. But I think that helped us immensely. It's something that we're starting to work with more now on our next project. And they say you should start marketing your game right when you start making it. I think to a certain extent that's true. As the game evolved we tried to basically add in features to the game that people could share and compete with. So we ended up adding some weekly challenges, and daily activities, and stuff like that, to kind of encourage some social aspects of the game. And I think that did help us as well. AMANDA SCHADE: OK. That's good information. But we always say, definitely don't forget about marketing. Don't leave it until the end. Whatever platform you're shipping on, if you can reach out to them, obviously you're making something in Unreal. Let us know what you're working on. There's lots of different avenues for that. You can make the best game in the world, but if nobody hears about it, then, unfortunately, nobody plays it. And so really make sure you're getting the word out. PATRICK MCAVENA: Yeah, you want to get the word out there. For sure. AMANDA SCHADE: Absolutely. A little more technical, [? YoTaco14 ?] is wondering how do you approach making tools for building your grid base levels? PATRICK MCAVENA: Oh, OK! KYLE ERF: That's a great question! PATRICK MCAVENA: I could show a little, just a very quick example of that. KYLE ERF: The answer might surprise you. How it's-- PATRICK MCAVENA: Yeah, it's very simple. So Unreal has this lovely grid snapping tool. So basically everything is 100 by 100 in our world, right? We pre-defined that. So when the character moves, it jumps by 100 units, and up, down, left, or right. So we basically have on grid snapping at 100. And then we have basically-- we call this our cube element. So it has all the game logic for a grid, it has-- I could click an obstacle so the player can't go there. And it will just basically add in, like a tree in this instance. I can override it and change it to something else. So if I move this around, move it over here, I've just added another one. And then on that same cube actor I have some other things I can say. Like, OK, I want a baby to spawn here. So when I click Play, there'll be an egg that's there, that the player has to get and bring back to the beginning. And then a couple other technical art things, like spawning grass and stuff like that. But that's basically it. We kept it really, really simple. And for us that seemed to work pretty well. And James, who designed a lot of the levels, he didn't have any Unreal or game development experience either, and he was able to just use those simple tools. And he did a lot of really cool level work with that. KYLE ERF: Yeah, I'll say I think that just having things be placeable like that was really helpful. From a back-end standpoint, our cube tiles themselves are totally overloaded in the amount of logic in them. Which is sort of a symptom of starting a game where you have never programmed before. But, it still works. Basically, the navigation actually is built around doing ray casts to figure out where things are. So if I were to maybe start from scratch, I would maybe have things be more aware of where they are on a grid that isn't 3D space. But for what it is, just doing traces from the sky, essentially, just from above, to figure out what's next to you. That's how this works, and the upside is there's no calculating some sort of back-end view of things. There's no simplified view that can get out of sync with the real world. And again, it works! I'm always surprised at how much some of these things-- like the bottleneck in this game is always the GPU. It's never the CPU. And it runs well on 10-year-old phones, and stuff. So seemingly, that approach was fine. AMANDA SCHADE: Yeah, and kind of based on your comment, there was another question from [? DC147. ?] What is the one thing you would change about your development project now that you're on the other side? What would you change about your approach, or do you feel like there are some of the-- [INTERPOSING VOICES] PATRICK MCAVENA: I have probably a different answer than Kyle does. But I'll just say mine. I would have brought Kyle on sooner. That would have been my change. KYLE ERF: [INAUDIBLE] AMANDA SCHADE: Aw. More resources sooner, specifically. KYLE ERF: Oh, is that your whole answer? PATRICK MCAVENA: That's my answer. AMANDA SCHADE: That's fair! KYLE ERF: Yeah, so my first suggestion to all of you is to hire me. So what I would do is probably-- I mean we could give it to our talk just on what we shouldn't have done. I think the good news and the takeaway from all of this is, we made a ton of mistakes. And if I pull up the mother Blueprints-- this is basically pornographic. But if we cut to my screen-- So let me just walk you through how movement works. I'm not actually going to explain it because it'll take too long. But imagine you've never opened this project before. That won't be hard for anyone to imagine, none of you have open this project before. So when I was getting situated with the code base, first thing I try to do is figure out, how does this bird move? So I found this touch input node, and just sort of follow that. And so it's getting locations on the screen and calculating the direction based on that. Pretty standard. And then it's just keeps going, and keeps going, and keeps going. And then we're getting to obstacle checks. And then it keeps going. And this is where we actually find the tile to jump to. And that keeps going. And now we get to the actual animation. Timelines are great for simple movement like this. And then that's where the animation happens. And that runs the whole length of this window. So first off, I think all of the individual pieces here are not bad. But encapsulating the code is really useful, especially if you're going to be working with more than one person. Or even be working on a project for longer than a year. You're going to forget how things work. So at the very least-- [INTERPOSING VOICES] Yeah, and having functions is a great way to do that, because you have to name the functions. So if every one of these things was its own function or subgraph, just from an organizational standpoint, that would be really, really helpful. I know if people are more experienced and are hearing my answer, they're like, yeah, duh. But it's useful. There's a reason you do it. AMANDA SCHADE: Yeah, you may not be singing the chat, but folks are talking about how their Blueprints look similar. They're just getting started and may also be in the state. And that's the thing. You don't have to be super experienced or have a lot of skill with Blueprint or programming in general to get off the ground. And I think that's an absolute testament. Like you all released a game. And it plays great, it works-- that whole thing-- it's on the platforms. PATRICK MCAVENA: No phone has caught fire, that we're aware of. So that's a win. KYLE ERF: Yeah, Blueprint's also, I think to Unreal's credit, I think it's a great way to learn programming. Like a lot of people who are like, oh, I'm not a programmer. It's like, you've written 2000 Blueprint nodes. That's programming, dude. PATRICK MCAVENA: Yeah, I mean you don't have to worry about the syntax. But the logic is pretty similar. KYLE ERF: So you'll work with people. And someone who has a stronger programming background will have a better intuition about what to encapsulate. I will say the reason that all this stuff is still so crafty and in there is, like I said, I came on and we didn't have that much time left. And I think an experienced but not as experienced programmer might have done something like, oh, let's rewrite this and make it really good and bug free. PATRICK MCAVENA: Yeah, I was going to say, it's always nice once you have-- you're like, OK, this is a cool feature. I'm happy with this. Take time then to go back. And you should always try to work clean as you're going, but then you can take time to refactor it a bit and to move on from there. I didn't do that as much as I should have. But that's definitely a good practice to get in the habit of for people-- KYLE ERF: And Patrick's not on trial here. So that's good. And as I was saying, a good programmer might have thought to do that. But if I had done that, we would not have shipped on time. That's the thing. PATRICK MCAVENA: Right. KYLE ERF: This works. So I spent time getting iCloud working, making things package on Mac OS. There's a blog post-- I won't go into the details because it doesn't show well on this stream-- if you're interested in developing in the Apple ecosystem, there's a blog post I wrote for the Unreal tech blog. If you just search for-- where did it go? It's Unreal-- If you just Google "Unreal Mac Ecosystem," that's the blog post. And it has code, it teaches you about objective C++, which is how you integrate with all those APIs. Teaches you about Plists, and I don't think I'll go into that anymore unless people have questions on the stream. Because it's really just listing off API names. AMANDA SCHADE: Well, we can pick up the post for folks and share that so that they can take the time to digest it. Because I imagine there's-- we do have other things we want to get to here, but there's certainly a lot of questions coming in. They are wondering, these are Blueprints, but you left them as is. [? LucasMachado ?] was asking if you converted them to C++, or you just left them, right? PATRICK MCAVENA: So, I could speak to that a bit. So the main actors in the project, you've got the player and you have the enemies. And those are probably the most complex. At least until Kyle got on board. I did end up rewriting the enemies in C++, kind of like a challenge and exercise to myself. And since they're being used a lot, I wanted some level of inheritance. So I could have one kind of base enemy class, and then if we wanted like a certain type of enemy to inherit from that. So I felt like that was meaningful. So I don't know if there's like a hard and fast rule. But for me that worked. And if you're going to be using that a lot, and then a bunch of different actors, and you're going to have a lot of inheritance-- and you feel comfortable doing it, and you're not a huge programmer, but someone that wants to learn more and you are up to the challenge, I think it's definitely worth doing. KYLE ERF: Yeah, I think, again, if it works, there's lots of ways to move things. Move your code, your current execution path back and forth between C++ and Blueprints as is reasonable. I'm a huge fan of-- even in our new project, Shoulders of Giants, making C++ Blueprint nodes, and just chaining those together. So if there's something you're doing that's data heavy, or it does a lot of data manipulation. Or like a lot of graph search-- our pathfinding. Our pathfinding probably would have actually been slow if I did it in Blueprints. It would have probably been a bottleneck. So things like that are really good candidates for C++. Anything that involves a ton of for-loops, basically. PATRICK MCAVENA: Yeah, there's also certain things that I ran into that weren't exposed as Blueprints. Like I wanted to change the mobility of actors. I can't remember exactly why. But I just went in and made my own custom Blueprint node, exposed that. And stuff like that is really helpful and useful, too. AMANDA SCHADE: Nice. This goes into your workflow a little bit. [? JamesDKSmith ?] was wondering, do you have a general agile or waterfall development plan? Or any tips or suggestions on how to track your progress or the work that you're doing? PATRICK MCAVENA: So we didn't then. But we do now. KYLE ERF: I'll field this one a little bit. So, man, this is always the eternal question. I've done various amounts of project management as part of my previous jobs. I'm kind of the de facto project manager in the studio at this point. Like I'll make a Gantt chart now and again, just to make sure we're not going to miss any important dates. I think for Dodo Peak, it was definitely more what you would call waterfall. I mean the first three months I was on was basically agile. And we were like, fix this bug, oh, my God, we've got to get this working! And so in that way there was just a constant undefined stream of work coming in. But I found-- and I've been working in various tech jobs for about a decade now-- and every team finds a thing that works for them. There's no silver bullet. Usually everyone ends up with a mix between agile, like scrum, and having more long-term planning and milestones. And I think, especially for creative works like games, unless you're building a game that is in a really fortunate place with early access or as a live service, I think you do have to have some amount of quote, unquote, "waterfall," which is where you're planning out exactly what's going to happen. And this is just my opinion. But I think it's very useful to have, OK, in three months this all needs to be done, or else this can't happen. Especially with a small team. We don't have the luxury of having, like seven people building out seven different systems. It's me and Patrick building out all of the core systems on our current project. And then we have other people, but they're sort of like glomping on to those. So I realize that's a tough question to answer. PATRICK MCAVENA: It's a good one, though. KYLE ERF: If I had a perfect answer, then I would be-- I don't know, I'd be famous, right? AMANDA SCHADE: Any tools-- are there any tools you felt helped you're helping your teams as part of that process? KYLE ERF: Oh, that's a good question. So for Shoulders of Giants, we're using a lot of Trello, just to keep track of a stack of work we need for a milestone. And I use this tool called Team Gantt, which is just a really good online app for just roughing out really ugly-- or not ugly, if you put the time in-- charts that can help you schedule things. But mostly Slack, mostly just talking with Patrick. Again, part of the benefits of a small team is there's really never any confusion about what needs to get worked on next. AMANDA SCHADE: Even in this format. Yeah. KYLE ERF: Yeah, exactly. PATRICK MCAVENA: Like, oh, one of the [INAUDIBLE] will do it. AMANDA SCHADE: Kind of on workflows, and things like that, and seeing that you don't have a team, what about art? How are you creating these models or these assets for the project? Is that you, or are you outsourcing? PATRICK MCAVENA: So it's the same for Dodo Peak. We have an art team. Basically prototyping Dodo Peak, it was me and then my friend James. James did a lot of the art. I did the programming and a good amount of art, too. And then once we kind of had a rough draft prototype, we decided that we wanted to find someone like an art director, that could help us flesh out more of the art. So we found someone, his name is Max. He's amazing. And so we brought him on. He's actually working with us on Shoulders of Giants now, too. So we do have an art team that is doing modeling, animation, concept art. But in the early part of Shoulders of Giants, we were figuring out what it was before we kind of-- we only recently started full production. That was basically me and Kyle. We did have a little bit of help externally with art, but now we have a lot more. Which has been really great, to see that progress. AMANDA SCHADE: Well, I feel like this is a good spot to kind of move on to your next project. KYLE ERF: Oh, wait. I have one thing-- AMANDA SCHADE: You have another thing you wanted to cover on Dodo Peak? KYLE ERF: Yeah. We deviated from the plan, slightly. But people might find this interesting. And Patrick gets to show all the cool stuff in the half about Shoulders of Giants, because he's the technical artist, and that stuff all shows really well. But there's a feature in Dodo Peak that's sort of an endless runner mode, that I think people might be interested in. Because I know people love Procgen. And people love randomly-- PATRICK MCAVENA: It's a hot topic these days. KYLE ERF: And it's one of the few things that I can talk about that looks kind of cool. So if we cut to my screen really quickly. So this is sort of the last big feature we added to Dodo Peak, which is a mode that is, basically you climb up this hill endlessly. And the goal, rather than just saving all of your eggs, it's about collecting as many as you can and dropping them off at these points. While the water is slowly rising below you. So we're generating these hills that go on forever, and when there's no bugs, which there usually aren't anymore, you can just keep going. Essentially until you run out of battery. So I wanted to talk a little bit about how we got to this point, because you can see there's kind of a mix of existing structures and random stuff here. And the feedback has actually been really positive on it. For me, personally, this is the only part of the game that I still like. But again, we've had the game out for two years. It's got 60 levels, once you play-test all those levels like 100 times, this is the only way you-- [INTERPOSING VOICES] PATRICK MCAVENA: You want something fresh. Even us. One of the cool things I just wanted to say real quick, Kyle, is we have a daily challenge. And every player basically uses the same seed for the level generation. So they can all play the same level every day. And then every day it's obviously a new seed. So it's basically a new level, which is pretty cool. KYLE ERF: Yeah, that's weirdly one of the most gratifying feelings as a game developer. Like I won't think about Dodo Peak for a day or two, and I'll just look at the daily challenge leaderboards. And there's people getting super competitive on there. And that's really cool. Right? Like people I didn't ask to play it. That's neat. So I want-- [INTERPOSING VOICES] AMANDA SCHADE: --your levels were previously explicitly designed, right? And then this is procedural, so what was the mindset and the approach to that? KYLE ERF: What a perfect question. So there's a lot of great talks about endless procedural generation out there. I think the biggest piece of advice for anything, regardless of if it's a grid base, if it's an endless runner, if you're designing, like, No Man's Sky, is figure out what is a good thing you're trying to generate. What is a good version of that? For Dodo Peak we were really lucky in that the game was already out for a year when we started doing this. PATRICK MCAVENA: We knew what a good level was, and what was fun and what wasn't. KYLE ERF: Yeah, so like the things you would say that makes a good level in an arcade platform, or like Dodo Peak, is having a few critical paths, and little offshoots, and things to collect. And enemies guarding essential things. And you build an intuition about like what's fun. And so I set off on a quest at the end of last year to figure that out. And the first thing I did in that process-- and let's open up my screen again, because this is where-- this is the stuff that no one's seen before. I'm not even sure Patrick seen a lot of this. So I'm a huge advocate of, if you're going to do any sort of bold change to your project, just make a new game. Not a new game, sorry. Make a new Unreal project. Make a new-- literally, make a new game. Don't make a new game-- you know what I mean. PATRICK MCAVENA: Every time you build a new game, yeah. KYLE ERF: So the same thing happens-- and we can talk about this with multiplayer and Shoulders of Giants-- making a new project to test certain things before you start trying three different drafts in your actual code base. It's so much easier to just keep it all contained. So I made this level with these really crappy default skin blocks. PATRICK MCAVENA: It's important to use programmer art too, I think. KYLE ERF: Yeah. When the artists are away, Kyle's going to play. So you can make your own tree out of a cylinder and some cones. And that's pretty fun. But even more fun than that-- PATRICK MCAVENA: Oh, is that the Unreal grass material on there? Very nice. KYLE ERF: That's grass, yeah. PATRICK MCAVENA: The starter project. KYLE ERF: So aside from getting to make your own trees like it's kindergarten, you can also experiment with different ways to approach level generation. And so the first thing I did was-- what is it like if you're just generating rows of tiles and you can just kind of flip a coin and turn them on and off? And in this case, it's really more of a dice roll, because it's like a fractional percentage. But basically this is a generator that just either renders a tile or it doesn't. Or it puts an obstacle on it. And sometimes it puts these little eggs out. And frankly the first thing I noticed was, these levels aren't awful. Like after playing the game enough, you kind of know what might be fun. And just turning things on and off was kind of cool. But there is still some huge problems. So I'll see if I can find an example. You can get to a point very quickly where you hit a spot where you can't go any further, right? This is all just completely random. You're going to hit here and there's-- I mean, pretend that's gone. And now you're stuck, right? So first thing-- well, not the first thing I did, the first thing I did was I went out and I did a lot of research. So I bought this book, Procedural Generation and Game Design. Highly recommend. Even though I didn't do anything in it specifically, it's just a really good resource for methodology. And it dawned on me, oh, we should have a critical path that you can follow through this level. So you're always guaranteed to be able to move forward. And so that's the next iteration that I wrote in this little tool. I should just take this here, and then I'll find it easier. OK. So now you can see there's these paths laid out. And those are unbroken in this visualization. Obviously, that cuts down on some of the foliage and stuff, and we'll get to that in a second. But basically we're defining these loops. I went with loops rather than just straight lines because in any good Dodo Peak level, there's usually more than one way out of a situation. There are very few dead ends. So by using loops rather than just a wiggly line to define this critical path, I think it's probably the only actually interesting, smart thing I did in all of this. Because it guarantees you always have options. And most games, that's what you want. So you can imagine sort of following this up. But these levels are still pretty boring, if I would say so. So we wanted to, after playing this, it's cool and you can drop random things in. But we really wanted some pre-made elements. Like stuff that Patrick and I could go and define. And the way we decided to do that was defining this grammar of-- this is just a really ugly data table. I wish I could zoom in on this, but I don't think you can actually do that. Basically we have text definitions of groups of blocks, and we need to put those in the level. PATRICK MCAVENA: By the way, data tables are really cool. And I didn't know that they existed until Kyle showed me. In Unreal. KYLE ERF: Yeah, data tables are great. You can export this as like as CSV file, which is really nice. PATRICK MCAVENA: Upload it to Google Docs. KYLE ERF: Yeah, literally we've done that for things that aren't this. It's very nice. So we have this grammar. And this is just for this demo project, the real one is much more intense than that. But basically you define these groups of tiles, and then those get put into the level. And I'll show you how that looks really quickly. Then I'll explain what it does, and then I'll show you it working in the main game. So let me edit this. Plug this into the new one. And you can see now when I generate a level it has these groups in it. So we see this one here. These numbers are just there to identify what's part of a group and what isn't. So this one has a hole in it. This is the one with the hole in it. And this one is a bridge with an egg on it. And it just kind of throws these in. The process of figuring out how to actually put these in the level was, I'd say, not trivial. There's kind of a problem with something that is endlessly growing upward, and you want to put random pieces inside of it. My first thought was we'll have this sort of Canvas. And we'll move in big sections. And we'll just pick random parts and put random groups in there. And that works, to a degree. It didn't let us stack things as tightly as we wanted. So ideally, it would have been cool to have the entire level made from hundreds of different pre-made sections. So what we really wanted was some sort of tightly packed thing, but also something that wasn't going to take a bunch of random guesses and find things that don't work, because that's bad for streaming in new layers of the level. We want something that's pretty deterministic. And so I was thinking about, what is a good way to pack different sized objects upwards, sort of indefinitely? And I realized, this is actually something people have been doing for a long time. It's called building a wall. [LAUGHTER] So these are pictures of what is commonly referred to as cyclopean architecture. PATRICK MCAVENA: It's basically like LEGOs, right? KYLE ERF: Yeah, it's a little bit like LEGOs. A little bit like Tetris. But if you have to build a wall and you have a bunch of different sized rocks, this is essentially what every person just knows deep inside themselves they have to do. You put down a big rock, and you put small rocks next to it. And you put another big rock, and you do this from the bottom up. And you just sort of go layer by layer. And so we devised a fairly simple algorithm to do this that I have a very silly animation for. So the way it works is you start on an empty row, you put down-- you find the longest empty section and you put just a random group in there that fits. Then now we have this section to the right of that, you put something in there that fits. It's taller, but we're still just concerned with this bottom row. And so we fill the next biggest section, and then we like fill this small little gap. We move up to the next row. We fill that. We move up to the next row. We have this three section here. So we put something in there that fits. In this case, it would happen to be three wide, but it doesn't have to be that wide. And then we continue filling the rest of the row, move on to the next row, we put something in that slot. Put something on there. Put something over there. Move up. And then start filling that row. And you get it. I'm not going to animate the whole thing. But basically all of these rectangles are different pre-made groups, and these gray ones are just sort of one by one, just random tiles that aren't predefined. And so you end up with something that looks like this. And the benefit of it is it runs really quickly, it's sort of like a greedy algorithm for doing this. And it goes on. You can do this on forever, which is what we wanted. We didn't want something that had to backtrack. So to wrap this up, I was playing endless mode earlier, and this is what it does. There's actually a handy debug mode for this, because believe it or not designing procedural generation, things break constantly. So you need really good tools. So if you go to the level generator, and turn on display debug visuals, you can see pretty much everything I was just talking about. So you can visualize these rectangles, those are like the critical path. And then on every block it says the name of the group it's a part of. So this is called like "diag tree." At some point you're just naming weird collections of blocks. So it gets kind of silly. This is a "space tree," this is a "meh zero." Two-by-two empty, so you can see all of these different groups are getting stacked on top of each other. And if you want to make a tile-based endless runner, I think this is a decent way to approach it. And that's kind of all I have planned to say on that. AMANDA SCHADE: That's great. I do have a question. What is your high score? PATRICK MCAVENA: Oh, wow. KYLE ERF: It's not that high. It's like 200. PATRICK MCAVENA: I'm going to look. KYLE ERF: You can look. You can look. It's really cool to make a thing that people are better than you at. That's one of the real charming things in game development, I think. AMANDA SCHADE: I do think, breaking down your grid and approach to solving the problem is something, sometimes, we forget, that these problems exist in the real world in various ways. And so sometimes stepping back from your code or trying to think of that, and just, how would I solve this problem in a real life experience? Or what does it translate to? And that can help you come up with a very thoughtful approach to-- Like, OK, now that I have an idea of how I want it to actually function, you can then think about how to program it and put it into Blueprints, or C++ then, to build that way. PATRICK MCAVENA: Break it into smaller pieces. KYLE ERF: My one regret is I didn't get a pack of LEGOs to do this. PATRICK MCAVENA: You really should. KYLE ERF: I had some in my Amazon cart, and then it was like, I don't know if I want to be responsible for 1,000 LEGOs. AMANDA SCHADE: You'll step on them later, it would be bad. KYLE ERF: So my high score is 226, and Patrick's high score is 109. PATRICK MCAVENA: OK. I'm going to be playing after this is over. AMANDA SCHADE: Awesome. So was there anything else you wanted to share about Dodo Peak. PATRICK MCAVENA: No I think that's it. KYLE ERF: No, I think that's all the prepared stuff. AMANDA SCHADE: Cool. So I feel like it makes sense to move on to your latest project. It's the frog, robot friendship. So you want to tell us a little more about-- I guess we have the trailer right? KYLE ERF: Yeah, let's play the teaser. PATRICK MCAVENA: Yeah, maybe we can play the teaser. That'd be cool. We had maybe another-- Yeah, there we go. Beautiful. [MUSIC PLAYING] Cool. AMANDA SCHADE: That was awesome. PATRICK MCAVENA: Thank you so much. AMANDA SCHADE: I loved seeing the light emerge from it. It's so pretty. PATRICK MCAVENA: Oh, I'm going to be going into that in a little bit. AMANDA SCHADE: Oh, man! PATRICK MCAVENA: But, yeah. So Shoulders of Giants is our current and new project. When we were wrapping up Dodo Peak, as a very small studio, we were like, OK, do we want to be safer and do something similar in scope to what we've done before? Or do we want to be crazy? And do something a little crazier? So we opted to be crazy. And we started making something that's a little bigger in scope. Well, a lot bigger in scope than the Dodo Peak. And to give you a little of context into how we decided to make this project, other than the scope, we were really interested in making a game that had a big character and a small character. And just that juxtaposition in scale is just kind of what started us on this path. But, as Amanda was saying, Shoulders of Giants is an action roguelike, where you simultaneously control a sharp-shooting space frog perched atop a sword-wielding robot, and you scavenge the universe for an arsenal of randomized abilities, and you use them to spread light and life back to dark worlds. And I always like to see-- I'm always interested when I see other games, OK, how did you start off on your development journey? What changed? So we actually have a video kind of showing the evolution of Shoulders of Giants over the course of development so far. And if we could just play that. KYLE ERF: Beautiful. PATRICK MCAVENA: Awesome. Beautiful. KYLE ERF: This game has a lot of things, right? PATRICK MCAVENA: It changed a lot, yeah. KYLE ERF: It started as kind of a walking simulator, weirdly enough. I personally am extremely into death stranding. That's not what this is now, but it kind of started as the idea of you're moving through this big landscape, and you have to direct this dumb giant around. And it kind of then turned into a real time strategy game. And then just became an exploration 3D character action situation that you see now. PATRICK MCAVENA: Yeah, we always tried to make sure to play tests as much as we can. And just based on the play testing, we just kind of moved in the direction that it is currently. So like I was saying, one of the biggest thematic aspects of the game is this idea of bringing back light and life to a world. And we had to figure out, what does that look like? How is that going to work? And not only did we want that kind of effect to happen for thematic and story reasons in the game, but we also wanted the majority of the characters abilities and weapons to also spread light and life too. So we explored a couple of different techniques, and if we transfer it to my screen I can kind of show you guys what we ended up doing. So this is one of the first levels in the game. And I love sliders, so I'm just going to slide this here and you'll see this effect start to happen. So not only is there like a color change, but as you can see, there's other types of foliage, and there's leaves on trees, and there's this kind of bleeding edge of this glowing life coming back to this planet. So if I kind of zoom into the ground, I can see a little more clearly. There's also a little bit of world position offset happening as things kind of scale up. Like flowers, and different plants. And also there's things like God rays coming to view. And a bunch of materials are going to change the way they look. And also, if I play the game, if I go over to a safe spot where no one can kill me-- so if I give myself an ability like a light grenade, I go over to these guys, I fired at them. So this ability is also going to spread light too. And you'll see that they actually take damage when they're in the light area too. So if I fire it at a place where I know there's more pretty looking stuff, like here, it's basically the same effect that happens. AMANDA SCHADE: That is so absolutely lovely. PATRICK MCAVENA: Thank you very much. Thank you. Appreciate that. It's actually a very, very simple technique. And the way that it works is-- as you can see, I have like a material collection here. So this material collection's got two things. And it's got a lot of those two things. It's got a position in the world. And it's got a radius. So when I drag this slider, this is basically the world position of this point. And as I drag it, the radius is getting bigger. So if I move this around, you can see the position of this effect is changing. And what happens is, this material collection-- we have a material function that reads all of these material collections. So we have a bunch of them because we have a lot of different abilities and things that use all this stuff. So we basically use a sphere mask and we take the world position for the material collection. We pump it in there. We pump in the radius. And we basically add all those together. So we have a bunch of-- KYLE ERF: It's pretty big. PATRICK MCAVENA: It's pretty big. And then you basically end up with a mass, black and white mass, that's in world space, which is pretty cool. And you can do a lot of different things with it. So as you can see, there's some kind of warping and distortion and stuff. So it's not just like a straight line, because that wouldn't be as visually interesting. So to do that, we basically take-- where am I? Here where we go. We take all those sphere masks added together, and we basically run it through a texture. And we use a height lerp node, which, if you've never used it before, is really cool. Basically anything that's between 0 and 1, you can use a texture to define the transition of it. So it's not just flat, and you can make it a lot more interesting. So we run it through there. And then basically a given material will just have that material function. And then we use that to lerp between colors and opacity, and in some instances, world position offset. And then to get this bleeding edge here, as I call it, we basically just take that-- I call it the light dark function, which is basically all the sphere masks added together. And then we just apply a negative contrast. And what that does is kind of suck everything up. So you basically just get this kind of bleeding edge around everything. And then we add a mix of color to that, and then whatever material we want to have to that effect, we just add that to the emissive channel of that material. And that's basically how the visual system works. And then there's an actor in the world that's spawned that kind of handles the writing of the information to the material collection. So the radiuses I was talking about, we also have a sphere collision that will scale up its radius as well. So actors will know if they're inside or outside of the light area. AMANDA SCHADE: You just make it sound like it's so easy. KYLE ERF: Well, unfortunately, it's-- PATRICK MCAVENA: Well, I will say this. I didn't come to this-- I think the best solution to everything is always the simplest one. But it's not like I just settled on this in the beginning. Like actually at the beginning, I was using render targets, like a couple different methods. And so it took me a while until I ended up staying on this. And then it was pretty unorganized. And I was like, oh, I'm going to organize it into material functions. And so it's not like I just sat down and make this in like an hour. KYLE ERF: Easily months of R&D. I mean not solid months, but this took so long to arrive at. PATRICK MCAVENA: Yeah, it took a while to figure out exactly. I mean, just from a creative perspective too, how we wanted it to look, and then how we wanted it to work. But, Amanda, did anybody have questions on that technique? AMANDA SCHADE: They're actually wondering how expensive is it? Does it take a lot of processing? PATRICK MCAVENA: It's a very good question. So our platform plans right now are console and PC. So we're targeting not super low tier hardware, but actually it runs great even on phones. So there is a cost, for sure. I think it's like 150 shader instructions basically added to everything. But I can show you guys the shader complexity. So it's greenish brown. Which is not terrible. The red is basically the transparency, like the God rays. So the interesting thing too is-- and I am not a super, super expert in terms of how efficient all of-- like the GPU cost of these things. But if I do slide this on in the shadergraph, I don't see anything in the shader complexity until these objects are on. So it does get a little red, like when the effect is fully in place. But on a lower end PC, we're getting 60 FPS. And I think there's actually-- this is not a bottleneck. There's things that are a much better bottleneck. KYLE ERF: Weirdly-- PATRICK MCAVENA: You can go ahead. Sorry. KYLE ERF: The bottleneck with this that we found was actually CPU just from having the sphere collision. PATRICK MCAVENA: Yeah, that's true. KYLE ERF: You get a sphere that goes up to the size of the whole level, which is how levels end. It's like everything. That'll lag. That'll lag pretty good if you're constantly changing the size of a sphere. PATRICK MCAVENA: If you have a huge overlap that has to check everything, that was the bottleneck for us. So we basically kind of cheated it. Instead of scaling up over time, it just goes from 0 to 1, like over one frame. And no one really seems to notice that is happening. KYLE ERF: That's only-- I will say, to my credit, it's only on the end of level one. But, yeah, fixed it completely. Yeah, it's not the GPU, weirdly. I'm also really impressed by that. PATRICK MCAVENA: Yeah, I was a little bit scared, but after testing it was actually not too bad. AMANDA SCHADE: That's great. Let's see, as far as the questions specific to that effect at least, there aren't any more. PATRICK MCAVENA: Cool. I can move on to my next thing. Unless we want to do-- OK, cool. So the other cool thing that we did was-- let me just open up another level here. So our levels aren't procedurally generated, but there are a lot of randomized elements. And one of the visual randomized elements that we wanted to have, was we wanted to have randomized colors. So we don't actually have every color randomized, because I don't think that would be very visually appealing. So what we ended up doing is we have just color palettes. Like predefined color palettes. So if I click on this actor in this level, it'll basically swap between the different color palettes that I have like assigned as options in this level. And the cool thing, too, is this is basically a material collection. There's a lot of different color options in here. So basically every one of these corresponds to a certain prop or color that we want to have in the level. But I could-- as we further develop the game-- our library of color palettes is going to really grow. And I can reuse them all over the place. Because all of our materials are set up to use that light transition, to use the random color effects. And not only does it affect the materials, like static meshes, but also the sky box, and the fog color, and all that stuff. So the goal is to have the level feel pretty different. And the way that it works at runtime is, we just have this actor that basically you tell, OK, these are the possible color sets that I want to be able to use. And then at runtime we have basically a hero material collection that all of the materials are referencing to get their color information from. And then at runtime we'll basically pick from one of those possible sets, and then this is basically an array of strings that it's just the same list of the material collection. And it will just take the colors from the template and then push them into the hero color collection at runtime. And this also works very quickly and fast. So there's probably a lot of different methods of doing this type of technique. But this is the one that made sense for us. And one of the other cool things-- a cool tool that Kyle made, actually-- as I'm making these color palettes in game, one of the problems that I had was-- I basically have a hero material collection that all the materials are referencing, but let's say I want to go back to a material set that I previously made. And I want to update it or change it, or further look at it. Or use it as a template for viewing something else. As you can see here-- where did my color sets go? Oh here we go. So I have, for example, in this I have three color sets. I have these three. So let's say that this one here, I wanted to tweak the rock. So I double click it, I open it up. Siri said something. [LAUGHTER] KYLE ERF: That was so scary. [INTERPOSING VOICES] PATRICK MCAVENA: That was terrifying. Oh, my God. OK. So if I wanted to change this rock color, you won't see it update, because all the materials are referencing not this material collection, they're referencing another one. Like the hero one. So I could click this button, which will then eventually pick the color set that I want. And will update. But if I want to do this in real time, how can we do that? So Kyle actually made an editor function, so if I click this preview editor set 0-- KYLE ERF: Sorry, Pat, can you scroll down a bit? Your face is in front of your-- PATRICK MCAVENA: Oh, no! OK. Yeah let me-- AMANDA SCHADE: We just did it. KYLE ERF: It's faded out. Faded out. It's beautiful. Thank you. PATRICK MCAVENA: OK, cool. So if I click this preview color set 0, this will actually execute on TIC only on editor, that same function that will update the materials or the material collection. So then I can make a beautiful pink rock, or I want to make a fully green rock, and it updates in real time. And that way it's very easy to iterate. And Kyle, I don't know if you want to just like-- this is actually a really cool tool for editor stuff. I don't know if you want to talk about it a bit more, Kyle? I can kind of show it on the screen here. KYLE ERF: Yeah, if you just stick on your screen. So I'm not going to take credit for this. This is completely based on a YouTube tutorial. If you want to look it up, it's Editor TIC Tutorial Using Blueprint by someone named Sili, S-I-L-I. But basically what it does is it creates an Editor Utility Blueprints that is outside of this color setter Blueprint that runs in game. And if, Pat, if you go to the construction script. If you have that checkbox that he mentioned checked, it'll create this child actor. And that actor has its own sort of timer that it runs off, and every, I think tenth of a second, it calls an interface function on the color center Blueprint. Which is just called Editor TIC. And that'll just run it. And it just does what it would do in game. Just copies all the colors over. And you can kind use this as a way to, if you want an external object's settings to be reflected in an in-game object, or an editor object like this, normally you could just use your construction script to automatically reflect variable changes in properties like in the editor. But because this is an external object, having a TIC like that, just constantly updating while that checkbox is on, is a great way to work around that for prototyping. AMANDA SCHADE: And we can give a huge shout out to Sili, because they're in chat and hanging out. KYLE ERF: Oh! Yeah! AMANDA SCHADE: Great work. KYLE ERF: Thank you so much. Thank you. PATRICK MCAVENA: Yeah, thanks man. You saved us a lot of time. KYLE ERF: Thank you. Thank you for that. I'm going to give you-- I realize I didn't give the video a thumbs up, so giving it a thumbs up. And everyone check it out. And it's super useful. Thank you so much for doing that. I spent weirdly long trying to figure out-- there's 100 different ways to kind of do that. But just having the editor TIC was so much easier and simpler. AMANDA SCHADE: Well I think that's what's great about having a community. And yeah, maybe somebody else has figured out something and you can just leverage that knowledge from someone else's experience. And take it, and utilize it where it makes sense. And then if you're going in and sharing-- you're sharing today how you worked on your effects, and hopefully somebody else can be like, oh, yeah, Thanks to Kyle and Patrick, now I know how to do this cool thing. So that's really fun. PATRICK MCAVENA: I guess you could say, in a way, Kyle was standing on the Shoulders of Giants with the knowledge. KYLE ERF: How do I leave this call? How do I leave this call? [LAUGHTER] Awesome. What a charmed life? Yeah, that's very cool. AMANDA SCHADE: Love it. PATRICK MCAVENA: Cool. So I did have one more sort of tech art thing that I wanted to show. So going with the theme that obviously I think a lot of indie does, experience of having a really small team, you wear a lot of different hats. So not only do I do the environment art, but I do most of the level design, at least thus far. So I don't think it's an official term, but I think a pretty common term in designing levels is "gray boxing." So using gray boxes to layout your level is something that I do. So I thought, OK, what if we not only laid out the level in boxes, but we actually took those boxes and we did something to them to actually make them look good. And actually not have to then model a landscape, and just be able to use them as pretty landscape art in game. So I'm going to show you guys how I did that. So this is the level mesh landscape that I'm just going to turn off. I'm going to turn on my level prototype, which is basically a bunch of boxes. Oh wait, why is it not on? KYLE ERF: Oh no. PATRICK MCAVENA: Oh no! Why are my boxers not turning on? Oh, no! Let's see. There's got to be some reason. It's always fun to troubleshoot. AMANDA SCHADE: But this is a good chance-- we're trying to figure it out too, when things like this happen to you, what is your approach to figuring it out? PATRICK MCAVENA: Yeah, it's good. OK, so this says the visibility is on. But it's not, because I don't see it. You know what I'm going to do in this? I have another level that I can open. KYLE ERF: Yeah, I was just going to suggest like, hey, let's go to the other turkey that's already been cooked. AMANDA SCHADE: They're suggesting press G. PATRICK MCAVENA: Oh, yeah. G's a good one. Let's see, these cubes. Poor visibility. OK, there we go. OK, so this is the actual level that I laid out just using cubes. As you can see, it's not as pretty as what I just had. So what I did was-- I'm a big Houdini user, so I actually utilized the Houdini engine plug-in for Unreal. And I basically have an HDA file, Houdini Digital Asset, and I basically tell it, OK, take all these pieces of cubes, or whatever type of static mesh I want, and then run it through these series of operations. So to show that a little more interactively, I'm going to open up another level. But before I do that, again this is the end result of taking all those boxes. And I didn't end up modeling anything else, I obviously added in a lot of props and stuff. But the actual landscape, this is what you end up with. But to demo the actual tool-- So this is a very simple level with just a couple of boxes. But let's say, OK, this is a cool level. Maybe I land here, and go up, or whatever. I click on this HDA file. Basically the way it works is, I just basically add in all the static meshes I want. And it basically will Boolean them all together. It will re-mesh them appropriately. And then add in a couple of different types of procedural noise. And do some bubbles. And it will also add in some vertex color based on the normal slope, to get the nice color stuff that I want for some of my masks I have going on. So for example, if I move this box out-- it has to turn on the plugin. Just a second. Normally you don't have to do this part, but I forgot to turn it on. OK, it's actually pretty quick. OK, so now you see, OK, it updated. And these blocks, this is ugly right now, but you can imagine if you actually laid out a level and massaged it a bit, you could get something that's actually usable, and you wouldn't have to rely on another person or yourself to do another step to make the landscape look good. If I click Play I got all my collisions. And yeah, it's a pretty simple tool, but it's pretty powerful. And we're definitely using it quite a bit. AMANDA SCHADE: Yeah, that's great. KYLE ERF: It's pretty-- frankly it's amazing. I had nothing to do with that. I was begging Patrick for a long time to make it just do this. And then one day he just showed up at work and is like, hey, look at that. AMANDA SCHADE: Yeah, I feel like that makes iteration and change. And it's like, oh, if the level doesn't feel quite right, you can make these quick adjustments that aren't hours of work or anything. PATRICK MCAVENA: Anything to save you time. And there could be certain circumstances where we might do something like a custom mesh, or landscape, or whatever. But for the look of our game and what we have going on, this seems to really work for us, for the most part. AMANDA SCHADE: That's great. Anything else you want to show off? KYLE ERF: I think. I think we're good-- PATRICK MCAVENA: Kyle, did you want to show anything off? KYLE ERF: --on demo stuff. AMANDA SCHADE: OK. KYLE ERF: I don't have anything that interesting to look at. So I think that's a good place to sort of cut to questions. I will say our game, just for reference, Shoulders of Giants, part of it is we deal with multiplayer, and we use the gameplay ability system. If people have specific questions about that in chat, I can talk about it. But I don't have a demo. So I'm not going to just bucket off time to be like, look, more Blueprint nodes! Yeah, any questions about what Patrick just talked about, or the game, or kind of anything at this point. I think we're open to. PATRICK MCAVENA: Yeah, totally. AMANDA SCHADE: All right, so it's open season on questions. They're wondering, OK, going back to the materials that you were working on, are you using instancing with those materials, or how are you handling those? PATRICK MCAVENA: Yeah, definitely. There's certain subsets of things. Like for example this landscape. There's an instance that I've made that I'll reuse for all the landscapes. Or like a rock. You know, there might be some different properties that I want. So yes, I'm definitely using instancing when appropriate. And kind of different foliage. I'm using the same base material class for. And that's definitely a very, very handy thing to do. AMANDA SCHADE: OK. Mitch was wondering, regarding the Houdini pipeline, does the HDA assign the materials based off the vertex color through a string path to Unreal? It is a very specific question. PATRICK MCAVENA: So there's one-- no, it doesn't do that. I'm familiar with what you're talking about. For my purposes, I would actually just use one material, and inside of that material I'm just using the vertex color as a lerp between different colors or textures that I have. AMANDA SCHADE: Gotcha. KYLE ERF: I think I understood that. That's smart. I like that. AMANDA SCHADE: Let's see. I think this was related to Dodo Peak, but I think it could also be applicable to Shoulders of Giants. How do you go about determining who your audience is? KYLE ERF: Oh, boy. PATRICK MCAVENA: That's a very good question. That's very-- KYLE ERF: That's another one of those where, if I knew the answer, you'd be on my live stream. PATRICK MCAVENA: To be honest, one thing that is really helpful is, I mean you have an idea for who your audience is. But generally-- I'm not an expert on this, but we try our hardest because we have to. But actually, seeing people play it, like at events-- obviously, right now it's hard to do. But we did actually do an in-person event in August. And we actually, for the first time, got real strangers to play our game. And I think from that, you can really learn a lot about who really likes your game and who's not liking it as much. And for me personally, I think that is a very, very valuable tool to figure that out with. AMANDA SCHADE: Well I think that leads a little into play testing too. How do you go about finding play testers? Is it always asking-- because we encounter this even with Game Jam games. Like if you play your own game, sometimes the difficulty is not quite adjusted to other players, or what they can experience or are capable of. That learning curve is steep. So is it mostly friends and family? Do you connect with circles-- obviously, in the world of conferences, you could take a booth and have people play it there. But in lieu of that, what do you do? PATRICK MCAVENA: Yeah, that's a good question. I mean I think, for us, we obviously have game developer friends. And it's cool to have that feedback. But I find that people that are non game developers, generally their feedback is, I think, more relevant normally. So of course, our immediate go to is friends and family. We haven't-- aside from events, we haven't done a lot of just getting strangers to play the game. That's probably something we're going to try to do more in the future, like outside of events. But I know, Kyle, what else do you have? Do you think about it? KYLE ERF: Yeah, I think one of the realities of being a team-- like the core of our company is two people, and then there's other people who are really involved in the project. But we're so small, we don't have a huge network of play testers to bring in that we don't know, outside of events. So friends and family are great, people at game development events are great. But like Patrick said, you can get feedback that's a little too, like, "this is how I would make the game." Which can also be very useful if it's like someone who's really good at game development. But, yeah, just friends and family unfortunately. We'd love to ask that question to someone too and get an answer of how to find people who you don't know who will play your game in a secure and reasonably priced way. PATRICK MCAVENA: I think there's one other small thing that I can add. And that's that I think there's two different types of play testers too. It's like the person that's never played the game before, so it's super fresh, and that's very valuable. Because obviously your players first experience is the most important part. But then it's also interesting to get-- we have a couple of people who play the game throughout development. And they have a unique perspective too. And I think trying to get both of those sets of perspective is important, if you can. AMANDA SCHADE: Oh, totally. I mean the new players are the ones that will teach-- there's that sort of tutorial, or the on-boarding experience at the front of the game. And if you have folks that have played it, they kind of know what to expect, or they know how to get in. Even if you make some changes, you'll see sort of their shift. But that's still not the same as a brand new, somebody that's never played the game before PATRICK MCAVENA: Yeah, a fresh set of eyes. For sure. AMANDA SCHADE: Again, I think this does go back to Dodo Peak, but could apply to both. So Rare Bird Games is asking, what was the one thing-- and there's probably many-- that you found helps you optimize your frame rate? KYLE ERF: That's a great question. PATRICK MCAVENA: We probably both have, maybe similar-- But I will say, from my perspective, the first thing that I always try to do is figure out if it's GPU bound or CPU bound. So I do the stat unit command. And if it's CPU bound, then I talk to Kyle, because he is more involved in that stuff than I am. And so far on our projects-- So we did initially do some builds. Like we wanted to see how it ran on mobile devices. In that sense it was actually GPU bound. So we had to go in there and kind of just one by one, OK, just turn things off. You know what I mean? Like turn different features off. Turn the post-processing off, turn off shadows. Get more aggressive with your LODs. I think there are some GPU debugging tools, like Xcode and stuff. But just that kind of basic thing. Just turning different things off and seeing how it affects their frame rate is really important. And then obviously, if it's CPU bound, Kyle, what do you use for that? KYLE ERF: So in terms of tooling, the profiler is your best friend. It's like developer tools. Oh my God I just forgot everything I ever knew. Session front end. I'll see. I have that up on my screen. I don't think anything useful will happen there. PATRICK MCAVENA: Do you want to talk about the enemy health bars as like-- KYLE ERF: Yeah, so I was going to get to-- my editor froze and my brain froze at the same time. So the main thing is, make good things with the profiler in Unreal. And I am not super qualified to give a good tutorial on that. But basically you can record things in a development build of the game. Or also just in editor, which you generally shouldn't do. But in our case, we've actually had almost all of our performance issues with Shoulders of Giants have been like the editor being weird. PATRICK MCAVENA: Yeah, the build was fine, but the editor-- KYLE ERF: Maybe you have to build it out. And everything is fine. PATRICK MCAVENA: Yeah. KYLE ERF: So in that case, profiling in the editor is actually kind of OK. You just need to look for the game thread. But this is all a long way of saying the issue is almost always slate. It's pretty much always something with slate, unfortunately. PATRICK MCAVENA: It's like something that you normally wouldn't-- for example, it'll ask, oh, is the light dark transition effect, how expensive is that? Well, I would think that it would be. But in reality it really wasn't. But what was bottlenecking us was, we have these 3D widgets over the top of the enemies. And actually that was like really slowing it down a crazy amount. So it's not always what you think it is. So that's why profiling is really important to tell you exactly what's wrong. KYLE ERF: If we cut to my screen, this is the most expensive part of Dodo Peak, is the main menu. It's literally just all of these main menu widgets, that all, I believe, TIC, because that's how we wrote. It should all probably be event driven. And that would have helped a lot. But just having all of these widgets. Like that is crazy. PATRICK MCAVENA: You can really get-- KYLE ERF: The game would run 60 on everything. PATRICK MCAVENA: You can make widgets that are not very performative. Very easily. And so you definitely have to be careful with that. KYLE ERF: And if this is how you learn to program, you're going to do it that way. So that was it. I ended up writing a really hacky thing because time was so of the essence, that it basically just turned the TIC off for things that were off screen. But anyway, same thing in Shoulders of Giants. Enemy health bars where what was slowing down the game. It was GPU-- It was CPU bound because we were re-rendering the health bars of all the enemies every tick. PATRICK MCAVENA: And updating all their information. KYLE ERF: Yeah. Still haven't fixed it to be event driven, I just made it so it runs off a timer and just does it every second, or something. As a workaround for now. But slate tick will kill you, is my big weird answer to that question. It was never pathfinding. Sometimes AI in Shoulders of Giants can be a little expensive, but it's so far always been slate ticking. AMANDA SCHADE: Well, I say tick will get you. It's definitely a much safer way to go. Kind of speaking to some of that, you're talking about learning. Where did you all kind of take your approach to learning Unreal Engine, and where have you found some of your best resources? And then at what point-- following up on that-- at what point do you decide that it's actually more valuable to bring on somebody else that maybe has experience there, versus buckling down and figuring out that system for yourself? PATRICK MCAVENA: That's a really good question. I think for me, I didn't have-- there's one part of game development which is art, which I had a big background in. But the other component, like programming, I didn't really have any experience. So I felt like in order for me to learn on Unreal, I wanted to get better at the part that I wasn't good at. I'm still not nearly as good at it as someone like Kyle, but I can at least understand it and do some of it now. But when I was learning Unreal, frankly I just watched a lot of your guys' YouTube videos. And just like some general YouTube programming information. But then to answer the second part of that question, which I think is really important, which is when do you identify bringing someone else on, or collaborating? I think different people work in different ways. I really like working with other people. And I feel like it's good to know your strengths and weaknesses. So like I was saying, I'm better at the art aspect, but not the programming aspect. So if you can find someone that can help with the part that you're not as good at, or that you don't like doing as much-- that's the other important thing. If you're really not good at something, but you really like learning it, that's cool too. And that's incentive to try to get better at it. But if there's a part you don't enjoy, and you also feel like you're not good at it, then that can be an important opportunity to try to find someone that could help you. KYLE ERF: I'd echo basically all of that. AMANDA SCHADE: Perfect. Good, you're in alignment. Based on the idea of things that you like and you don't, how do you stay motivated? It can be a long process, right? Making a game. And there's a lot of challenges and hurdles to overcome in development. So how do you stay creative? How do you stay motivated throughout the process, and keep at it? KYLE ERF: I can speak for myself. I think trying to be-- there's so many different ways to answer this question. The first thing that comes to mind, because it's been a pretty tough month for us just in terms of things move in fits and starts. And also just working, trying to get alpha together pretty soon, and also putting together stuff for this awesome opportunity to talk to you on this stream, Amanda. But all of this is to say, you can get tired doing this. And I think it's important to take breaks if you have that luxury. I realize not everyone is in a job where that's always an option. But, boy, you can resent the coolest thing in the world, if you overwork yourself on it. PATRICK MCAVENA: Yeah. That's definitely true. KYLE ERF: So I just want to open saying that. I think it's also important to-- if some problem is giving you so much trouble-- like if there's a project you're working on, or a small task that you just can't get done, put it down and do something else. I try, personally, to get one notable thing done every day. And then after like a year, that's like 300 significant things you've done. That's a gain. So I've lost a whole day on debugging something. And that feels awful. And rather than spending the next day, I might just move on to something else. PATRICK MCAVENA: Yeah I think it's good to have-- I think what helps me, like Kyle said, definitely don't want to overwork yourself. But if you can set little goals, once you accomplish something that you wanted to accomplish, that can feel really good. And that can help motivate you to get to the next thing. And it's also good to break them up into-- like, oh, I want to finish the game! But that's the finish line. This is a marathon. You got to think, OK, I want to get it to run on my computer without crashing. Or I just want to get a build that I can share to a friend. Or something small like that, that you can accomplish in a day or two, I think goes a long way into keeping you motivated for the long haul. AMANDA SCHADE: I think those are great tips. So it's fantastic, for the folks that are working on projects, find ways to take breaks. If there's a part of your project that's not exciting, or not encouraging at the moment, find something to reignite that spark, and then come back and face that. [? MrJohn10.LWebb, ?] is wondering how large is your game dev team at this point? PATRICK MCAVENA: So right now there's four of us on Shoulders of Giants, and we're adding a fifth person to the team shortly. AMANDA SCHADE: [INAUDIBLE] KYLE ERF: Yeah, it's like a 25% increase, actually. PATRICK MCAVENA: That's true. So that's going to be big for us. So we're going to have to figure that out. Going to have to do some more production management, for sure. KYLE ERF: Yeah. That's 100% true, weirdly enough. You know, when it's two people, again, you can just bounce ideas. Two people you can kind of manage the same as one people. You can just kind of bounce ideas, and have sort of a group mind, but once you have a remote team with five people-- we're going to be upping doing check ins and things like that. But it's five people core, and then we also have some contractors we know who have helped with specific things here and there. AMANDA SCHADE: Gotcha. Let's see. [? Andrej ?] was wondering if you have ever found that you were able to C++ your way out of a bottleneck, or something, with Blueprint instead? So have you felt like you're kind of hitting a wall with something in Blueprints, and then moving over to C++ actually helped you solve or accomplish what you were looking to do? KYLE ERF: That's-- I think-- so, kind of? This, again, speaks to-- for better or worse the stuff we work on has been fairly simplistic in terms of what the gameplay is. We're not simulating an economy, we're not running some sort of like Nemesis system. We're just go to the place-- PATRICK MCAVENA: It's not like a crazy amount of dependency or anything. KYLE ERF: Yeah, I mean the Dodo Peak gameplay loop is the amount of features of like an '80s arcade game. It just looks really, really, really nice. PATRICK MCAVENA: I will say, from my perspective like I was saying in the early part of the talk, I started Blueprinting the enemies in Dodo Peak. And then I eventually rewrote them in code. And that process actually helped me a lot. I don't know if it was as much just rewriting it in code, but it was kind of an opportunity to totally refactor the whole thing. And that I think helped the process quite a bit. KYLE ERF: Yeah. And I will say, this is kind of doing offloading C++. Just make use of the nav mesh if you can. Like if you have a game with pathfinding. There's different ways that someone might hack together to find a random spot to spawn something. And there are just hooks that are like, find a random spot on the nav mesh within a radius. Like there's Blueprint nodes that do that. And those are obviously calling out to C++. And it's way faster than shooting out a bunch of random line traces to figure out where to go. Which is something I did before realizing there's a better way to do it. So it's stuff like that. Make use of the systems in Unreal that are already there for you. AMANDA SCHADE: Absolutely. [? Bett33 ?] is wondering how you handle the music for the games. PATRICK MCAVENA: It's a Good question. So for the first game we have a good friend of mine, Nathan McKee, who's the composer. Who I actually played in a band with. And he did the music for my other collaborator, James's, first app. So that was a pretty easy pick. We're actually still figuring out our music plans for Shoulders of Giants. So we will keep you all posted on that. AMANDA SCHADE: All right, well I guess we'll stay tuned @ShouldersOfG on Twitter. So keep an eye on it. They're wondering, with remote teams, how do you allow people to work? What was your process, working together remotely, sharing different project pieces, and concurrent development, and all that? PATRICK MCAVENA: Yeah, you want to take that one, Kyle? KYLE ERF: There's so many angles to this. So Shoulders of Giants has been in development in one way or another basically since exactly when the pandemic started. We didn't plan it that way. But that was sort of a thing that-- PATRICK MCAVENA: Yeah, we did. We planned it. To develop a game during the pandemic. KYLE ERF: We actually-- well, we had a game, and we knew we should probably have a pandemic. So I got working on that. PATRICK MCAVENA: We should wait until a pandemic, yeah. KYLE ERF: Patrick was starting work on-- we were doing a prototyping phase. And we didn't really know-- Shoulders of Giants was just one of many ideas that we were working on. And during that time I was also porting Dodo Peak to the Nintendo Switch. Or I shouldn't say porting, it's the same game. I was making it run on the Nintendo Switch. And so that was a bit of a mess, because dev kits are a thing. If you're fully focused on PC, it's pretty easy. But we also have a studio full of Apple hardware for quality assurance on Dodo Peak. So luckily we're a small team, and we could go into the office if we really needed to. PATRICK MCAVENA: And luckily, when we were doing the Nintendo Switch development, at the time, Kyle lived two blocks from me. So it was pretty easy to actually physically move the development stuff back and forth. KYLE ERF: Yeah, I could just hand it to him, and be like, figure out what values make this look good. Like just hand it off. Not everyone has that luxury. There's a lot of remote desktop stuff that happens. Yeah, it's not easy. PATRICK MCAVENA: I think especially during the beginning of a project. Like during the brainstorming phase, it can present some unique challenges, for sure. KYLE ERF: Yeah, like in addition to just daily stand-ups, or check-ins, or whatever you want to call them. I think it's really useful. Like Patrick and I both contribute, I'd say, equally to the creative vision of Shoulders of Giants. And being able to even just open up a call and just talk for an hour, that's so huge. PATRICK MCAVENA: Yeah, share your screen. KYLE ERF: Just being able to bounce ideas around. PATRICK MCAVENA: Yeah, exactly. KYLE ERF: I think for a smaller team it's easier than moving like an org structure of thousands of people to remote. Again, it's just kind of like calling your buddy. It's tough, but also it's not the worst. I don't know. AMANDA SCHADE: Well they're also wondering, kind of digging into that a little bit, like what source control did you-- KYLE ERF: Oh, right! Yes. Great question. So Dodo Peak is on Get. That was, Patrick, I think you set that up. Do you remember how you came to that? PATRICK MCAVENA: Yeah, and they told me to get out of here. KYLE ERF: Get is really good. So I worked in open source software for a long time. And it is an amazing tool. It's not, in my opinion, not especially good for Unreal. It doesn't handle large files well. You can make it handle large files well. GitHub is amazing. And that's what I think people really like. But I'll save that dumb nerd rant. Get is great, but we started developing Shoulders of Giants on Get. And just the file contention, like people modifying the same files was so much of a thing. We ended up moving to Perforce. We host our own Perforce server. And that's been really great for us. The integration is phenomenal. It's beautiful. We love it. So that's how we do things. And like I mentioned before, we're always talking about slack. We have a Trello for tracking work. We have a Gantt chart for tracking schedules. And through some combination of all of those things, the work gets around. Patrick, I know the way art works is maybe a little different. Or like how people get-- PATRICK MCAVENA: It's pretty similar. It's kind of like just giving feedback. You know. KYLE ERF: Right. A lot of Google Drive. AMANDA SCHADE: Yeah. Lots of different ways. So I think that's the curiosity too. Like which approach did you find worked for you? Obviously it varies by team, but always having the insight into what you found useful, and other people can take advice from that. KYLE ERF: They got to a point where I was offering to get James and Pat like a steak dinner if they learned to use Get on the command line. No one took me up on it. But boy, it was-- I will say, like if you learn your tools, that's so much nicer to the programmer who has to come over and help you-- Get is so complicated! Anyway, I don't want to besmirch anyone on this stream. But it's very complicated. I made my living working on Get related stuff for a few years. Like continuous integration, but that's a whole other talk. AMANDA SCHADE: OK, going back into something a little more inspirational. Thomas Franklin is wondering what-- I think this goes back to Dodo Peak, but I think it would be an interesting question for both. What were your visual styles pulled from? Or what inspired you to go in the direction that you took on those games? PATRICK MCAVENA: Yeah, I think there's probably a lot of different things going on. I think, from my perspective, I always, professionally, worked in photo-realism. So I really kind of got bored of making things real. And I wanted to make something that was more stylized. So kind of the look at both of those games kind of fall under that. Just me as an artist, like what I am like interested in making. But then our Art Director, Max, I think we kind of found him because that's his style. He's got this beautifully illustrated, stylized, kind of modern aesthetic. And that really comes through. He did all the concept art and really defined a lot of the look for both games. So big kudos to him. AMANDA SCHADE: Let's see. So Bernardo was wondering, were there any beliefs about game development that you found out weren't true? So things that you had general assumptions about going into game development, that once you're in it like, oh, it's not like that at all? KYLE ERF: That's such a cool question! PATRICK MCAVENA: Yeah, I mean, I think everyone's situation is so different. But I think the thing that everyone-- like Kyle and I both had jobs where we made a living, unrelated to game development. And I think a lot of people will tell you, oh, well if you want to be an indie developer, it's not possible. Or you can't make a living making games. And it is definitely hard, but it's definitely possible as well. And I think Kyle and I really try to not overwork ourselves, too. We try to maintain a balance, like work, life balance. And that's something that I think the games industry-- I think a lot of people will associate crunch and all that stuff. And I think that's something that, if you try to avoid, then it's definitely possible. But Kyle, what do you think about that? KYLE ERF: I mean I agree with all of that. I'm trying to think of a different angle. I don't know. Multiplayer is not a checkbox that you just turn on. Despite what Reddit would have you believe. PATRICK MCAVENA: That's actually a very good one. AMANDA SCHADE: Just add multiplayer. KYLE ERF: Yeah, it's just so easy. PATRICK MCAVENA: If you want to add multiplayer, don't do it at the end, because it won't happen. KYLE ERF: Yeah. I would definitely recommend that. Wow. I feel like I have to think about this question for a whole year. I think you don't have to listen to everyone's feedback is one thing. PATRICK MCAVENA: Yeah, that's true too. KYLE ERF: I don't know if people say you should. But people will tell you all kinds of bad advice. And people will give you suggestions that are-- PATRICK MCAVENA: They will also give you really good advice, but-- if there's a lot of feedback that's similar, you know, OK, a lot of people are experiencing this. So this is something I should probably look into. But if you have the odd feedback that you only hear one time, you probably don't need to worry about it as much. KYLE ERF: Don't let it get inside your head. You don't have to do one thing just because one person said it. That sounds like I have a grudge. I don't. I am not thinking about anything in particular. It's just I could definitely rabbit hole on that kind of thing. AMANDA SCHADE: [? Sarah3D ?] was wondering, have you found it hard to structure social media posts for the game as you're working on it? They feel like they never have enough to show off in development, and I guess on that, do you have somebody dedicated? Or is it-- it's you two, isn't it? PATRICK MCAVENA: You're looking at him. With the glasses. KYLE ERF: Yeah, I'm pretty online. I'm also a professional comedy writer outside of games. So that's another thing before I was doing this. So I'm very online. I do our posts. We never do them enough. We're all so technically-- PATRICK MCAVENA: It's hard. It's so hard to make enough content. Like I'll make a lot of the content, and then Kyle will decide how to show it and when to show it. And we'll actually show it. And also obviously make other stuff too. But it is a lot of work. And it's hard. I think it's definitely going to be a challenge to make meaningful posts. And deciding when and how often and what type of things. It's not easy. KYLE ERF: Yeah. Some things I'll just throw out there, every platform's different. So we mostly stick to Twitter and-- that's actually kind of it, in terms of social media right now. Twitter and Reddit. Everyone has their own scales. Like some people really love starting at Discord, some people do a lot on Imgur. But Twitter's where I live, and I'm the person doing it, so that's where we are. There's a lot of game stuff on Twitter. I will say, first off, where we are in marketing now, we kind of have only soft announced the game. Obviously we're here talking about it. But we have not done a huge campaign. We haven't announced any platforms, we don't have any wish list you can do. It's just something we put out there, partly to see if people would be interested in it. And that was a big thing. Like if you had talked to us in February, we wouldn't be sure if we were making Shoulders of Giants. It was just the biggest prototype we had. So in that way, putting it out on social media was great, because it showed us, oh, people want to play this. And also people really like frogs. PATRICK MCAVENA: It's an important tool. Kyle, like you said, I think you can use as-- if you show something a bit earlier on, and do some posts, you can kind of generally see if people are feeling it. Or maybe you want to go back to the idea, or not. That's something we tried to use it for. And I think it was successful in that sense. KYLE ERF: Yeah, I'm happy with how it's gone. But it's a constant struggle. I know everyone's like, you've got to hit up Screenshot Saturday. And people look at Screenshot Saturday. But Saturday it turns out is actually a terrible day for social media in general. So you're only going to get the people that look at Screenshot Saturday. It's like an endless array of things to get very beaten down by. And my advice, that I haven't taken is just be consistent. PATRICK MCAVENA: Yeah, that is true. AMANDA SCHADE: That is very important. I think that's one of the things we've talked about during the whole stream on here. Just sitting down with teams and talking about social strategies. KYLE ERF: That would be great two hours just on that. AMANDA SCHADE: That would be whole side thing. So [? DJV808 ?] was wondering, as an indie studio, how do you go about recruiting new talent? KYLE ERF: Oh, how timely. PATRICK MCAVENA: That's a good question. My background, I was a freelance 3D artist for a really long time. So I do know a lot-- I have a network of people from the art world that we work with. But for the first time we actually did make our first ever job post, and we got a lot of people that way. And it's definitely challenging to find the right person. And I think, obviously, you use your network. But also you always want to expand your network, too. And there's events. We've had people that have come up to us during events, so we've actually hired some people that way too. Like we met a really good animator at PAX and worked with him quite a bit. I don't know, do you have anything else to add, Kyle? KYLE ERF: No, not really. Specifically if people are curious, we had to a post, yeah, and worked with indies, and also just promoted it around our networks on Twitter. It's really hard to find people in general. I'm sure the person asking the question knows that. Just internal recommendations for people is always, in my opinion, the most useful. PATRICK MCAVENA: Yeah, if you can get a recommendation, that is really good. KYLE ERF: I worked in hiring for a long time. Like literally, I worked on hiring-- the systems of hiring at a big tech company. And we did a lot of research on interviews and hiring, and the sad takeaway was it's really hard to predict how good someone will be based on an interview. So knowing people-- knowing people that other people think are good is very useful. But can also perpetuate all kinds of awful systemic problems. So I don't know. I have no idea. AMANDA SCHADE: But basically it's like, yeah, it's been good encounters with people at conferences, sometimes it's listings. I think another way to go is finding the communities where the people you're trying to hire are, right? Like if you're looking for an animator, going to an animation network. Or Polygon would be a great place for 3D artists. So finding the communities that those folks spend their time in, and seeing if you can see some of their work, or can you see if they're looking for jobs. Or things like that. [? 2020HonestDanGames ?] was wondering how do you manage versions of the engine? Do you always upgrade to the latest? Or settle on a release and sit there for a little while? KYLE ERF: That's a great practical question. So for Dodo Peak we updated pretty regularly. And we're always quick to check preview builds, especially the first year of Apple Arcade. There were some fairly significant changes to Apple APIs. And the easiest way to get those in is to just upgrade the engine. Which is scary. I don't have any advice on upgrading the engine, other than make sure you have a backup. Clearly if you have version control, that should be like a thing that you can just do. But if you don't, make sure you have a backup. PATRICK MCAVENA: If you upgrade it, make a build on your platform to make sure everything still works. KYLE ERF: Yeah. And you have to, unfortunately, every time you upgrade you have to do a full QA of the entire game because, like, oh, now Arabic doesn't work. Like anything can go wrong after you upgrade the engine. Like any API might have changed. So we typically, until very recently, we were upgrading to every single engine that came out like the second it came out. Just out of necessity. Shoulders of Giants I believe is still on 4.26. Not for any reason, we just haven't done it. We have been pretty lucky with upgrades, where things haven't gotten too crazy. But we'll upgrade it at some point. AMANDA SCHADE: If it's working, right? And there's not-- KYLE ERF: Yeah exactly. [INTERPOSING VOICES] AMANDA SCHADE: Yeah. Let's see. As an indie studio, or an indie company-- this is from [? Dorlan-- ?] what do you do to try and stand out? PATRICK MCAVENA: It's a good question. AMANDA SCHADE: I know. Chat's been really, really thoughtful this week. I love it. PATRICK MCAVENA: I think you-- how can I answer that? Obviously it's like we want to make something unique. I think for games in general, just the way that people see them, it's so visual. People see the screen shots. They'll read the copy of the description of the game, but if you have a really good screenshot that has some unique art-- or people can kind of imagine, OK, maybe there's a unique story, or unique gameplay. Like if they can look at something and kind of infer what it is and feel gravitated towards that, I think that's the most important thing that you can do to get people interested in your game. But I don't know exactly the magic formula for that. KYLE ERF: Once again, if I could just answer that perfectly, this would be our live stream. But to answer your question from a different angle, also in terms of getting yourself stood out by others-- developing relationships, both with other game companies, but also with any middleware or platforms that you use. So we've had a pretty long-- despite being a tiny studio-- we've had a very strong relationship with Epic Games. And you can be on a stream like this, if you've been doing stuff and showing off the engine, and writing blog posts. And everything. And showing people that you can make a game that looks like a cartoon with Unreal. So build those relationships Patrick's done streams for Houdini, because he's so cool at that stuff. And so even though we're a small indie studio, it'll be Insomniac, and like another triple-A studio, and then him. And that's super cool. As someone who's kind of on the outside of that to see. So showing off your skills and developing relationships with other companies is the more practical advice I can give. Like, just put yourself out there. Community managers and evangelists are always people who are being positive and have cool stuff to show, because that's kind of your job is to find that stuff. So make it easy to find, and show it to people. And develop those relationships. AMANDA SCHADE: Thanks for making my job easier. Really appreciate it. You guys have cool stuff to share. It's great. I have one question that I would like-- this is going to be our last question for today. And from [? Pinnel? ?] I don't know how to say their name. Sorry. What do you like most about your game dev experience so far? KYLE ERF: Oh wow. PATRICK MCAVENA: That's a really good one. KYLE ERF: That's a good question. PATRICK MCAVENA: I can personally say that the coolest thing for me is just to be able to make an idea and have it come to light. And have people play it. And not everyone likes it, but at least some people. That's definitely the most rewarding part for me. Just being able to work on something that you're really into and that you're really excited about. KYLE ERF: Yeah, I would echo that. And then from the indie perspective. Like being on this journey with Patrick for the last two and a half years. I love being in a position where we're making our thing. Having worked at big companies, or stuff like that, before this-- having control over my own life, even though it's a lot scarier, is really cool. And I think that's something that a lot of people are fighting for in their lives. And I feel extremely privileged to have even a modicum of that in mine. AMANDA SCHADE: Oh, that's wonderful. Well I'm glad this journey has been exciting, if not scary sometimes, for you. But Dodo Peaks is awesome. And I hope you all at home will check it out and give it a download. Check it out. Your endless runner mode is-- this year, right? It was released early this year? PATRICK MCAVENA: Yeah. Yeah, early spring, I think. AMANDA SCHADE: What it's time? You know? PATRICK MCAVENA: What is time? It's still 2020 as far as I'm concerned. AMANDA SCHADE: So you can see more about Dodo Peak at dodopeak.com. Your website itself is MovingPieces.io. And then you can find Shoulders of Giants there. [? Skye's ?] doing awesome in linking these all in chat too. So you can also follow on Twitter @ShouldersOfG. Is there anything you'd like to leave them with before I do my little outro spiel? PATRICK MCAVENA: Just wanted to say thank you so much, Amanda, and thank you all for watching. KYLE ERF: Right. PATRICK MCAVENA: We're still pretty new to this whole game development thing. So thanks for listening to what we had to say. And hope you guys all got something out of it. KYLE ERF: Thank you. AMANDA SCHADE: Well thank you both so, so much for joining us today. It's really nice to sit down and just hear about your journey. A lot of times we're diving into the editor and getting into the nitty gritty, but this has been a little bit of a change of pace. But really wonderful. And again, your effects are still really awesome. So getting to see a bit of both. Make sure to follow them. Keep up on their awesome work. We're really, really excited to see your progress on Shoulders of Giants. From the Unreal Engine side, stay up to date on everything Unreal Engine at UnrealEngine.com. We're on all the social channels, slash, Unreal Engine or @unrealengine, whichever sites are following that way. If you're looking for people to talk to, or you have questions, always hit the forums .unrealengine.com. This spot, if you need to go back and see how they were making those effects, or want to review some of our questions, you can always watch them here on Twitch, or at our YouTube channel. So we have a little survey if you want to let us know what you thought of the stream. If you're interested in sharing with us requests for future events. And next week, I think we have Intel on to talk about TPA. Get ready for that. So thank you so much Kyle and Patrick, this has been wonderful. PATRICK MCAVENA: Thank you. KYLE ERF: Thank you. AMANDA SCHADE: And everybody for all the great questions this week, they were really phenomenal out there. Thanks, and have a wonderful week everyone. PATRICK MCAVENA: All right.
Info
Channel: Unreal Engine
Views: 21,331
Rating: 4.9508381 out of 5
Keywords: Unreal Engine, Epic Games, UE4, Unreal, Game Engine, Game Dev, Game Development, early access, game feature, game features, plugin
Id: wanToB8YF_c
Channel Id: undefined
Length: 133min 23sec (8003 seconds)
Published: Thu Sep 16 2021
Related Videos
Note
Please note that this website is currently a work in progress! Lots of interesting data and statistics to come.