Charles Max_Wood:
Hey, and welcome back to another episode of the Ruby Rogues podcast. This week on our panel, we have Valentino Stoll.
Valentino_Stoll:
Hey now.
Charles Max_Wood:
I'm Charles Max Wood from Top End Devs. And this week we are talking to Brett Chalupa. Brett, do you wanna say hello and introduce yourself to everybody?
Brett_Chalupa:
Yeah, I'd love to. I'm Brett. I have been working with Ruby for about 12 years, primarily paying the bills with Rails, but have done a bunch of Sinatra and like fun non-web Ruby programming before. I organized a Ruby conference in Burlington, Vermont for three years that, you know, in the early 2000, like the mid 2010s, people might
Charles Max_Wood:
Mm-hmm.
Brett_Chalupa:
have remembered that Burlington Ruby conference. Yeah, just been a happy member of the Ruby community for a long time. And I recently started making games with it and trying to share what I've been learning and create information and resources relating to that. So I think we'll be talking a bit about making games with Ruby. I think maybe people might know some of my RSpec video tutorials, which are just like basically free videos of me writing tests to try to teach people RSpec. And that has been maybe the most widely known successful thing I've done that's linked to from the Odin project, which is like a free
Charles Max_Wood:
Mm-hmm.
Brett_Chalupa:
curriculum for learning Rails. And yeah, so I love testing, really like Ruby. And been making a bunch of games lately and having fun with it.
Charles Max_Wood:
Awesome, and yeah, I think I said this before the show, but I'm a little bit sad we're doing this during the school day, because my 17-year-old wants to be a video game developer when he doesn't grow up. And yeah, I mean, it's something that I've always kind of wanted to see if I could do is write a video game as well. So this is exciting. I also want to preface this by saying that not too terribly long ago, we did talk to Amir Rajan about Dragon Ruby, of that, but he kind of gave us the fundamentals and an idea of where to start. And so I'm thinking that what we may want to do is just talk about Dragon Ruby for like five, 10 minutes. And then what I'd like to do is talk about, okay, now what's the process, right, for actually building a game, right? And let's walk through, okay, you got to get this together, you got to get that together, you got to start doing these kinds of things with Ruby. Sound good?
Brett_Chalupa:
Yeah, that sounds great. And I...
Valentino_Stoll:
Wait, before we do that, how did you get started? Like what brought you to Dragon Ruby and be like, yeah, I wanna dig in on this.
Brett_Chalupa:
Yeah, so I think that's a good story that will segue into a background on Dragon Ruby and like a kind of pitch for it and an explanation of what it is. So here's what led to all of this. Whenever I'm learning a new technology, I wanna focus on learning the technology, not spend a bunch of time trying to think about what to build. So I've kept this private list ideas in a note file for years. And it's always like, you know, a clone of this, what if I built an RSS reader, that kind of thing, right? Things that I know would exercise the language in a way that would help me learn it, not necessarily a project that makes a good business. And so I wrote this book called Project Book. And it's a free online book that has over 100 project ideas with like, I made mockups and wireframes. So if you're not a designer you could at least go and see the flow of what it would look like to build this app. And it could be a command line app, it could be desktop GUI, a web app, a library, like a RubyGem. And then I was like, I should have a section in this called games. So I went and researched and thought about and looked at my own notes on what would be really good games to learn to start for learning. You know, maybe you want to learn a new programming language or library. making. A lot of clones of things, snakes, ponds, breakouts, infinite runners, those types of things. That'll have the fundamental core of what most games have in them. So I went, I wrote those, there's like 30 games in Project Book. And that just got me, it reignited this flame of this interesting game development. I went to college for game programming. hobby. I like accidentally started doing Rails and then just really enjoyed doing Ruby and Rails programming. That was, I was making money before I was graduated from college. So I left college and just started working full time and haven't really looked back since, but that desire and that interest to make games never went away. So 10, 12 years later, as I'm writing the summary for these with making games, I was like, I'm gonna start making games again. And this is like the weeks leading up to my wife having our first baby. So
Charles Max_Wood:
Hahaha
Brett_Chalupa:
we're like, you know, at the hospital, there's not much doing, our baby's born, our baby's doing really great, healthy, everything is wonderful, you know, my life has changed. Right? And, but you have this downtime where the baby's sleeping, you're holding the baby, hanging out. games. So it was just all coming together. And then I was randomly browsing itch.io, which is this website where people, it's an open platform for publishing your games, that
Charles Max_Wood:
Mm-hmm.
Brett_Chalupa:
you can just go add a game right now. It can play in the browser, you can download it for desktop operating systems. It's basically like, what if you could just go and put a thing on Steam, right? games, small games, big games. It's a really awesome place. I was browsing it and I saw this engine was there, Dragon Ruby. I was like, what is this? I've been using Ruby for so long. I have checked out the other Ruby libraries for game making, Gosu and Ruby 2D. And I don't know if people ever
Charles Max_Wood:
Mm-hmm.
Brett_Chalupa:
use like Hackety Hack and Shoes and you know, the different GUI apps for Ruby. But you know, I've used all those. I never heard of Dragon Ruby. So I found it. read the docs, when my baby was asleep, I would go and work on things. It just combining like 12 years of Ruby, loving Ruby, and this thing I'm interested in of games, really just ignited this fire that has me wanting to have other people feel that same way and be encouraged. So
Charles Max_Wood:
Mm-hmm.
Brett_Chalupa:
yeah, that's how we get to Dragon Ruby. And then since then, Mad Dash to learn it, share what I've learned, and try to encourage other people to check it out.
Charles Max_Wood:
Right. Cool.
Brett_Chalupa:
I think the things that make Dragon Ruby unique or special or like what really captured me when I found it was, guess you have Ruby, which I know all the listeners know about, right? So there's no point in really extolling the virtues of Ruby. But what's special about it is, and I don't know, I don't think people generally think about Ruby this way, but you have a bunch of runtimes for Ruby. You have JRuby, which is Ruby running on the JVM. You have CRuby or MRI, right? The original Ruby.
Charles Max_Wood:
Mm-hmm.
Brett_Chalupa:
have Truffle Ruby and you have, there's a bunch of different implementations of Ruby. One of those implementations of Ruby that's different than the main canonical Ruby is mRuby, which is this side project that Matz, the creator of Ruby, started funded by, I want to say grants for the Japanese government to build a small portable implementation of Ruby. when you compile it, it's like less than four megabytes or something. It's really small and really slim. And because of that, it's missing some of the language features like in Ruby, like in C Ruby, you can pass a range into rand
Charles Max_Wood:
Mm-hmm.
Brett_Chalupa:
and you can get a random number back between, you know, the range within that range. That doesn't exist in an M Ruby. So anyway, that's just an example of how it's different. But for the most part, it's really similar, right? You have hashes and arrays and classes programming and all that stuff exists. So what DragonRuby does is it takes mRuby, it adjusts it a little bit, it connects it with STL, which is a free open source library for game programming that handles things like displaying a window
Valentino_Stoll:
I'm sorry, I'm sorry.
Brett_Chalupa:
and like making it full screen,
Valentino_Stoll:
I'm sorry, I'm sorry.
Brett_Chalupa:
querying the operating system,
Valentino_Stoll:
I'm sorry, I'm sorry.
Brett_Chalupa:
handling controller input, displaying images,
Valentino_Stoll:
I'm sorry, I'm sorry.
Brett_Chalupa:
all that stuff, it wraps it
Valentino_Stoll:
I'm sorry, I'm sorry.
Brett_Chalupa:
into a nice API
Valentino_Stoll:
I'm sorry, I'm sorry.
Brett_Chalupa:
and then gives you tooling
Valentino_Stoll:
I'm sorry, I'm sorry.
Brett_Chalupa:
easily
Valentino_Stoll:
I'm sorry, I'm sorry.
Brett_Chalupa:
deploy your game to
Valentino_Stoll:
I'm sorry, I'm sorry.
Brett_Chalupa:
iOS,
Valentino_Stoll:
I'm sorry, I'm sorry. I'm sorry, I'm sorry. I'm sorry, I'm sorry. I'm sorry, I'm sorry. I'm sorry, I'm sorry.
Brett_Chalupa:
Android, the desktop operating systems, web, and even consoles like Amir, his big
Charles Max_Wood:
Mm-hmm.
Brett_Chalupa:
game, A Dark Room, is on Nintendo Switch. And just so that's like what it is, right? It combines these different technologies in a really unique, compelling
Valentino_Stoll:
I'm sorry, I'm sorry.
Brett_Chalupa:
way. And then
Valentino_Stoll:
I'm sorry, I'm sorry.
Brett_Chalupa:
what it gives you is
Valentino_Stoll:
I'm sorry, I'm sorry.
Brett_Chalupa:
hot reloading. So as you're
Valentino_Stoll:
I'm sorry, I'm sorry.
Brett_Chalupa:
writing your game code,
Valentino_Stoll:
I'm sorry, I'm sorry. I'm sorry, I'm sorry. I'm sorry, I'm sorry. I'm sorry, I'm sorry. I'm sorry, I'm sorry. I'm sorry, I'm sorry. I'm sorry, I'm sorry. I'm sorry, I'm sorry. I'm sorry, I'm sorry. I'm sorry, I'm sorry.
Brett_Chalupa:
and you change your Ruby files, the game is still running. And just like when you update CSS in the browser, it just refreshes your code. And the new code is there. So let's say you had a player who's
Valentino_Stoll:
I'm sorry, I'm sorry.
Brett_Chalupa:
running around on the screen, and
Valentino_Stoll:
I'm sorry, I'm sorry.
Brett_Chalupa:
you go and change their speed
Valentino_Stoll:
I'm sorry, I'm sorry.
Brett_Chalupa:
to go from
Valentino_Stoll:
I'm sorry, I'm sorry.
Brett_Chalupa:
eight pixels every
Valentino_Stoll:
I'm sorry, I'm sorry.
Brett_Chalupa:
1.6 of a second
Valentino_Stoll:
I'm sorry, I'm sorry.
Brett_Chalupa:
to 10 pixels. You just save that
Valentino_Stoll:
I'm sorry, I'm sorry.
Brett_Chalupa:
in your editor
Valentino_Stoll:
I'm sorry, I'm sorry.
Brett_Chalupa:
and then test it. And
Valentino_Stoll:
I'm sorry, I'm sorry. I'm sorry, I'm sorry. I'm sorry, I'm sorry. I'm sorry, I'm sorry. I'm sorry, I'm sorry. I'm sorry, I'm sorry.
Brett_Chalupa:
it's immediate, which is so different compared to
Valentino_Stoll:
I'm sorry, I'm sorry.
Brett_Chalupa:
every other
Valentino_Stoll:
I'm sorry, I'm sorry.
Brett_Chalupa:
game development tooling I've used. So
Valentino_Stoll:
I'm sorry, I'm sorry.
Brett_Chalupa:
it's got hot
Charles Max_Wood:
Mm-hmm.
Brett_Chalupa:
reloading of your
Valentino_Stoll:
I'm sorry, I'm sorry.
Brett_Chalupa:
code. It's extremely portable,
Valentino_Stoll:
I'm sorry, I'm sorry.
Brett_Chalupa:
and it's got a really
Valentino_Stoll:
I'm sorry, I'm sorry.
Brett_Chalupa:
slim
Valentino_Stoll:
I'm sorry, I'm sorry.
Brett_Chalupa:
focused
Valentino_Stoll:
I'm sorry, I'm sorry.
Brett_Chalupa:
API. So like you can,
Valentino_Stoll:
I'm sorry, I'm sorry.
Brett_Chalupa:
you can within
Valentino_Stoll:
I'm sorry, I'm sorry. I'm sorry, I'm sorry. I'm sorry, I'm sorry. I'm sorry, I'm sorry. I'm sorry, I'm sorry.
Brett_Chalupa:
your head have it memorized, right? The data structures and the primitives and the core methods that you need to know. You can keep that all in your head and you don't need to think about that too
Charles Max_Wood:
Right.
Brett_Chalupa:
much, There's not a hundred classes, there's not all these different
Valentino_Stoll:
you
Brett_Chalupa:
data types and structures to remember. It's a really intentional and well-designed library. So yeah, that's basically what it is.
Charles Max_Wood:
So,
Valentino_Stoll:
In a nutshell.
Charles Max_Wood:
yeah. Well,
Valentino_Stoll:
You make
Charles Max_Wood:
I think
Valentino_Stoll:
it sound
Charles Max_Wood:
it's
Valentino_Stoll:
so
Charles Max_Wood:
interesting
Valentino_Stoll:
easy.
Charles Max_Wood:
just, yeah, from the standpoint of, I have a friend that does, I think it's Unity that he teaches, Unity 3D. And, you know, I mean, he's got like this big mega course on it, right? And, you know, he sells a ton of it. So, you know, I don't know. But the thing that's interesting about it is that, Yeah, you know, when I was talking to Amir, it sounded like this was fairly approachable and I could just pick it up. I know Ruby, you know, I might have to pick up some of the semantics of writing a game, but I can do that pretty fast and be up and running and I can use some of the examples and start modifying those to get what I want.
Brett_Chalupa:
100%
Valentino_Stoll:
So you
Charles Max_Wood:
So.
Valentino_Stoll:
discover this Dragon Ruby, right? And you're like, all right, this is something I'm super excited about. What's the next step from there? Do you just start running the examples? How do you start getting kind of involved in it?
Brett_Chalupa:
Yeah, that process has been really interesting. And... I just like that project book thing that I made. I really believe in learning through doing things. So I like reading books about programming and watching screencasts, especially when I'm stuck or I don't understand something. Like a lot of game programming is math related. And I don't know if you all remember like how to determine, if you have an X and Y position and another X and Y coordinate and you need
Charles Max_Wood:
Mm-hmm.
Brett_Chalupa:
to determine the angle between those, I completely forget all of that math from
Charles Max_Wood:
right.
Brett_Chalupa:
high school and before. So I have to go and I watch videos about linear algebra and geometry and stuff. So I love resources like that for concepts. But when it comes to just learning a library, I just love taking an idea and making it, building it, and finishing it. So that is the core of it. So the first thing I did was, okay, let's make a game. is like reverse Blade Runner. I love Blade Runner and sci-fi and like the do Android stream of electric sheep. Then there's this test in it for people who don't know it called the Voight Comp test where it, you get asked questions and it monitors your eyes and your emotional response to determine whether or not you're an Android, right? And
Charles Max_Wood:
Mm-hmm.
Brett_Chalupa:
this is like a comedy joke game where the Androids
Valentino_Stoll:
you
Brett_Chalupa:
have taken over and you are a human, So the questions are all like, you know, really ridiculous and silly, but mostly intended for you to laugh. And it's the questions you get asked are random and based upon how you answer the scenario of the story plays out differently. It's like a minimalist, like
Valentino_Stoll:
I'm sorry, I'm sorry.
Brett_Chalupa:
cyberpunk comedy game. But I made
Valentino_Stoll:
I'm sorry, I'm sorry.
Brett_Chalupa:
it in a few days, finished it, published
Valentino_Stoll:
I'm sorry, I'm sorry.
Brett_Chalupa:
it, and people played it and enjoyed
Valentino_Stoll:
I'm sorry, I'm sorry.
Brett_Chalupa:
it. Right. So like, so that was
Valentino_Stoll:
I'm sorry, I'm sorry.
Brett_Chalupa:
the first step was I made a simple game.
Valentino_Stoll:
I'm sorry, I'm sorry. I'm sorry, I'm sorry. I'm sorry, I'm sorry.
Brett_Chalupa:
at making projects
Valentino_Stoll:
I'm sorry, I'm sorry.
Brett_Chalupa:
before, especially when being new to something
Valentino_Stoll:
I'm sorry, I'm sorry.
Brett_Chalupa:
and learning, is you have to take your
Valentino_Stoll:
I'm sorry, I'm sorry.
Brett_Chalupa:
ambition
Valentino_Stoll:
I'm sorry, I'm sorry. I'm sorry, I'm sorry. I'm sorry, I'm sorry.
Brett_Chalupa:
and you have to scale it down massively. You have to make something that's so trivial that it seems silly, and you have to almost be embarrassed by how simple it is. But that is how simple you need to make things to learn. And then you take that, and then the second time you make it, and you finish it. You have to finish what you start. That's my number one core value, is if I start something, I finish it. That wasn't that
Charles Max_Wood:
Mm-hmm.
Brett_Chalupa:
way for 10 years. I have to really scale back and be intentional. But this amazing thing happens where when you finish things, it starts snowballing. So I made that game. It's called Zeno Test. And it's just a silly little free game. And it's open source and public domain. So the code's there. If someone wants to make a similar game or adapt parts of it, code is totally there, uses the unlicensed. So you don't have to do anything. You just take the code and use it. So I made that. And then I started working on this game Goblins, which is just this quick arcade action game where you run around and collect gems. And then when you get a gem, you get a different random weapon. And then enemies spawn and flow down on you. So you have to fight them off while collecting gems. And you're just going for the high score. It's like an arcade game. And that's a little bit more complex than the first game. So I just take these ideas, make them a little more complex. how to do most of it and then I figured the other stuff out and it keeps compounding. So then once I was finished with that, I said, okay, I'm going to take what I've learned and write a book and share this knowledge because I think something that Dragon Ruby is lacking is just information and resources. It just needs someone to love it, right? It needs some fans and some cheerleaders. So I'm like, I'll be the de facto public
Valentino_Stoll:
I'm sorry, I'm sorry.
Brett_Chalupa:
cheerleader. I'll make videos, I'll write this
Valentino_Stoll:
I'm sorry, I'm sorry.
Brett_Chalupa:
book, I'll create documentation,
Valentino_Stoll:
I'm sorry, I'm sorry.
Brett_Chalupa:
like advanced tutorials
Valentino_Stoll:
I'm sorry, I'm sorry.
Brett_Chalupa:
share
Charles Max_Wood:
Mm-hmm.
Brett_Chalupa:
it for free.
Valentino_Stoll:
I'm sorry, I'm sorry.
Brett_Chalupa:
And so I wrote this book, it's
Valentino_Stoll:
I'm sorry, I'm sorry.
Brett_Chalupa:
called Building Games with Dragon
Valentino_Stoll:
I'm sorry, I'm sorry.
Brett_Chalupa:
Ruby, and it just walks you
Valentino_Stoll:
I'm sorry, I'm sorry.
Brett_Chalupa:
through step by step.
Valentino_Stoll:
I'm sorry, I'm sorry. I'm sorry, I'm sorry. I'm sorry, I'm sorry. I'm sorry, I'm sorry. I'm sorry, I'm sorry. I'm sorry, I'm sorry.
Brett_Chalupa:
Okay, here's how you make a game. And this is the stuff that might not be obvious, but like you have this Ruby knowledge, but then you want to apply it to making games. And making a game is so different than writing like scripts for your computer or writing a web server app, where like, when you have to requests and you have the request-response lifecycle. That's pretty easy to think about. And it's pretty easy to test and simulate and wrap
Valentino_Stoll:
I'm sorry, I'm sorry.
Brett_Chalupa:
your head around. Games, though,
Valentino_Stoll:
I'm sorry, I'm sorry.
Brett_Chalupa:
run 60 frames per second.
Valentino_Stoll:
I'm sorry, I'm sorry.
Brett_Chalupa:
So you have this thing called the game loop that's
Valentino_Stoll:
I'm sorry, I'm sorry.
Brett_Chalupa:
running. And
Valentino_Stoll:
I'm sorry, I'm sorry.
Brett_Chalupa:
every time in that game loop, it checks the state
Valentino_Stoll:
I'm sorry, I'm sorry.
Brett_Chalupa:
of the world, the state of your input,
Valentino_Stoll:
I'm sorry, I'm sorry.
Brett_Chalupa:
whether or not you press a certain key or your
Valentino_Stoll:
I'm sorry, I'm sorry.
Brett_Chalupa:
keyboard or your gamepad has
Valentino_Stoll:
I'm sorry, I'm sorry.
Brett_Chalupa:
certain input. And then it adjusts
Valentino_Stoll:
I'm sorry, I'm sorry.
Brett_Chalupa:
things. Maybe it changes
Valentino_Stoll:
I'm sorry, I'm sorry. I'm sorry, I'm sorry. I'm sorry, I'm sorry. I'm sorry, I'm sorry.
Brett_Chalupa:
the x, y coordinates. sound effect. There's so many things that can happen and it's happening in a loop so fast. So it's a little harder to test. It's a little harder to really understand what's happening there. But once you start thinking in the game loop and you start thinking about how things move and how things intersect and then you have collision detection and that sort of thinking is a little different than other programming. So the book walks
Charles Max_Wood:
Mm-hmm.
Brett_Chalupa:
through Let's move the character. Okay, let's
Valentino_Stoll:
I'm sorry, I'm sorry.
Brett_Chalupa:
make the character fire a fireball
Valentino_Stoll:
I'm sorry, I'm sorry.
Brett_Chalupa:
when you press a button. Okay,
Valentino_Stoll:
I'm sorry, I'm sorry.
Brett_Chalupa:
now let's display some targets
Valentino_Stoll:
I'm sorry, I'm sorry.
Brett_Chalupa:
and play some music, some sound effects,
Valentino_Stoll:
I'm sorry, I'm sorry.
Brett_Chalupa:
pretty normal game stuff.
Valentino_Stoll:
I'm sorry, I'm sorry.
Brett_Chalupa:
Oh, let's save your
Valentino_Stoll:
I'm sorry, I'm sorry.
Brett_Chalupa:
game's high score to disk
Valentino_Stoll:
I'm sorry, I'm sorry.
Brett_Chalupa:
and then load it
Valentino_Stoll:
I'm sorry, I'm sorry. I'm sorry, I'm sorry. I'm sorry, I'm sorry. I'm sorry, I'm sorry. I'm sorry, I'm sorry. I'm sorry, I'm sorry.
Brett_Chalupa:
and compare it, right? Like all these little building blocks that you can take and take those explained concepts and there's like a little bit of humor in the book. It's got a silly voice. Take it and then hopefully Hopefully you can make your own game from that and go from there. But yeah, it's, it's, you're taking games, you have ideas, you pair them down, you figure out how it works
Charles Max_Wood:
Mm-hmm.
Brett_Chalupa:
and then you finish it and then make the next one.
Charles Max_Wood:
Okay, I wanna just back up for a second, because you talked about collision detection and a lot of these things that involve math. And I'm gonna make my 17-year-old listen to this, because we fought over math last night. So can you just say about 18 times, you have to know math?
Brett_Chalupa:
not only do you have to know math, I would argue that game programming makes math fun. Right?
Charles Max_Wood:
Yeah,
Brett_Chalupa:
If you're
Charles Max_Wood:
oh
Brett_Chalupa:
sitting,
Charles Max_Wood:
totally.
Brett_Chalupa:
that's the best part of it. So you're like, oh, this makes sense, right? Like, oh, okay, I want to make it so that, like, here's an example. I, because Dragon Ruby can be put on iPhone and Android, I built this playground that I put on my phone and on my Android test If you've ever played game like real-time strategy games like Starcraft or Warcraft and you like click somewhere and then your units move to it, like that sounds simplistic, but there's so much math involved with that, right? You have to
Charles Max_Wood:
Oh
Brett_Chalupa:
keep
Charles Max_Wood:
yeah.
Brett_Chalupa:
track of where the unit is, where you clicked, and then you have to determine the angle so they're properly, you know, they're then you have to move toward it. And then like even that kind of basic math is, yeah, you got to know it. And you got to, I think you'll
Charles Max_Wood:
Yeah.
Brett_Chalupa:
love it, right? Because
Charles Max_Wood:
Right.
Brett_Chalupa:
the math is what powers all.
Charles Max_Wood:
Well, and I think, because he keeps telling me he's never gonna use it. And this is the thing, and then I'll get off my high horse. But this is the thing too, is that yeah, it makes it fun. It makes it interesting, it's applicable, and it's not a math test. So if you don't understand how to figure out how far something is, or the shortest path, or whatever, like there are libraries and algorithms and explanations online that you can use to figure this stuff out. But yeah, I just wanna play it back for him No math.
Brett_Chalupa:
Yeah, just loop it.
Charles Max_Wood:
Anyway, so this is the part that I kind of want to get into, right? Because Amir, he kind of just talked about, hey, we've got all these different samples and you can go modify the samples. But I want to know like, yeah, you know, and it sounds like this is what you're booked at. How do I build a freaking game, right? How do I go, okay, like his favorite game is Undertale, right? I don't know if you've played Undertale,
Brett_Chalupa:
Yeah,
Charles Max_Wood:
right?
Brett_Chalupa:
I have,
Charles Max_Wood:
So
Brett_Chalupa:
yep.
Charles Max_Wood:
it's a top-down platform game, Zelda. I'm old. It's like Legend of Zelda. Okay. And so yeah, so where do I start with this? Like how do I
Valentino_Stoll:
you
Charles Max_Wood:
start to go, okay, this is the game. I mean, am I jotting pictures down with my pencil or setting up the project or what do I do?
Brett_Chalupa:
Yeah, I love this question and thinking about this because this is, games are huge, right? If you wanna build an enterprise piece of software, you don't need a ton of creativity. You need some design skills, you need the code skills. But what's so interesting to me about games and what's so different than my day job work is like, it combines all of these different creative mediums from the sound effect sounding just right when you press a button in the menu, to the graphics, to the storytelling and the writing and the pros that exist within there, to the actual game design, like these systems that happen where like, you know, in Zelda, or let's use Mario, in Mario when you get a mushroom you get bigger and then when you're bigger it changes the flow of the game, right? Like
Charles Max_Wood:
Mm-hmm.
Brett_Chalupa:
that, the ability of how high you can jump and those kinds of systems, right? So you have game design
Valentino_Stoll:
I'm sorry, I'm sorry.
Brett_Chalupa:
and then you have code within that.
Valentino_Stoll:
I'm sorry, I'm sorry. I'm sorry, I'm sorry.
Brett_Chalupa:
It's both a blessing and a curse
Valentino_Stoll:
I'm sorry, I'm sorry.
Brett_Chalupa:
that even the simplest
Valentino_Stoll:
I'm sorry, I'm sorry.
Brett_Chalupa:
games are extremely
Valentino_Stoll:
I'm sorry, I'm sorry.
Brett_Chalupa:
complex
Valentino_Stoll:
I'm sorry, I'm sorry. I'm sorry, I'm sorry. I'm sorry, I'm sorry. I'm sorry, I'm sorry. I'm sorry, I'm sorry. I'm sorry, I'm sorry. I'm sorry, I'm sorry. I'm sorry, I'm sorry.
Brett_Chalupa:
and that they require a bunch of creative mediums. So what I tend to do or how I tend to think of it is you take a game idea you want. So like, let's say we wanted to make a game like Zelda. I would love to make a game like A Link to the Past, right? Let's say that's the premise we're going off of. Let's make
Charles Max_Wood:
Mm-hmm.
Brett_Chalupa:
something like A Link to the Past, but let's make it so the dungeons are randomly rated so that
Charles Max_Wood:
Okay.
Brett_Chalupa:
you go into a dungeon and the enemies you see and the boss at the end is different. You just take that big idea and you just try to pare it down into the smallest bits. So like what I would do if I for our procedural Zelda, I would take I would find some free assets online. There's open game art dot org and itch dot io has a bunch of free assets
Charles Max_Wood:
Mm-hmm.
Brett_Chalupa:
and I would take those and not worry about art at the beginning, especially could put some squares in. But
Charles Max_Wood:
Right.
Brett_Chalupa:
putting in some art that has animations, and it feels good, right? It gives
Charles Max_Wood:
Mm-hmm.
Brett_Chalupa:
your game an atmosphere that's more exciting. So I would start with free art. Find that. Get a bit inspired. Drop that in. You can pay for them, too, right? There are some really great people who sell assets, and you can buy and use those, too. I would take that. And then what I would do is I would get that little character, our little Link-esque displaying. And then I would make it so that you could slash. And that's the whole thing, right? It's like, okay, when a sword slashes, what it is, it's a rectangle rotating around a centered point. So you take it, you code it in that game loop where, like, you press the A button, and your little rectangle swirls around, blink, and then, okay, that's kind of interesting. What if that little rectangle intersects with another rectangle that's an enemy? Right? You just start
Charles Max_Wood:
Hmm
Brett_Chalupa:
where you add in different enemies and then you add in health and then if the enemy hits you, you lose health. Or maybe certain enemies like spit fireballs and you have to dodge them. So, okay, great. We've got a character, we've got enemies, we've got the ability to attack. Let's drop it into a dungeon. So, you know, you write an algorithm or you find something that says, then you have to go and you have collision detection for balls, right? It's like each time you want to like
Charles Max_Wood:
Mm-hmm.
Brett_Chalupa:
make move the game forward, you're going to encounter something you need to handle. But if you start at the smallest slice, like the smallest little piece, which is your movable character, and then you keep adding on, it just like happens really organically. And what's fascinating to me about that process is that ideas come, right?
Valentino_Stoll:
I'm sorry, I'm sorry.
Brett_Chalupa:
Ideas bubble. David Lynch, the film
Valentino_Stoll:
I'm sorry, I'm sorry.
Brett_Chalupa:
director, has this saying that's,
Valentino_Stoll:
I'm sorry, I'm sorry.
Brett_Chalupa:
Creativity follows
Valentino_Stoll:
I'm sorry, I'm sorry.
Brett_Chalupa:
focus and attention.
Valentino_Stoll:
I'm sorry, I'm sorry.
Brett_Chalupa:
So if you're thinking about something or working on something,
Valentino_Stoll:
I'm sorry, I'm sorry.
Brett_Chalupa:
new ideas will bubble up.
Valentino_Stoll:
I'm sorry, I'm sorry.
Brett_Chalupa:
It's just
Valentino_Stoll:
I'm sorry, I'm sorry.
Brett_Chalupa:
so true. So like, sure, you could
Valentino_Stoll:
I'm sorry, I'm sorry. I'm sorry, I'm sorry. I'm sorry, I'm sorry. I'm sorry, I'm sorry. I'm sorry, I'm sorry. I'm sorry, I'm sorry.
Brett_Chalupa:
go and you could write like a really long design document about our procedural dungeon crawler, or you could just start making it and see what ideas come up and the ideas will come up. And then the like process of being a game developer is... saying no, because you're gonna have these big ideas, but they're gonna,
Valentino_Stoll:
you
Brett_Chalupa:
you know, it could take weeks or months to do these huge
Valentino_Stoll:
you
Brett_Chalupa:
ideas. And I think when you're starting out at the beginning, it's about saying no, what's the like, what am I trying to accomplish here? What's the simplest version of getting this complete and then do it in the next game or, you know, do it in a version
Charles Max_Wood:
Mm-hmm.
Brett_Chalupa:
two, but yeah.
Valentino_Stoll:
That makes a lot of sense. I mean, so how much of this stuff comes packaged with it? You mentioned collision detection a lot. Is that part of Dragon Ruby? Are there libraries? At what point do you be like, well, this should already exist. What is
Brett_Chalupa:
Yes,
Valentino_Stoll:
there?
Brett_Chalupa:
that is a very big question that, because Ruby is a high level language, right? You're thinking, the way I think is not far from what I write in Ruby code, which is like the beauty of Ruby. I think a reason why people really like it. It's really expressive. It's a high level language. The Dragon Ruby API is pretty low level. It gives you a couple helpers, but there's not like a... Other engines will give you more. But the community will, like for example, in Dragon Ruby, you can check to see if two rectangles or squares intersect with each other, which is a form of collision detection. But then you need to determine what happens after that. Do they separate?
Charles Max_Wood:
Mm-hmm.
Brett_Chalupa:
Do they get damaged, whatever? And you have to then take all these different ingredients that Dragon Ruby gives you and piece them together. And that's why Amir's samples are so great because it shows you like dozens of ways And something that I found is, with the projects that I'm working on, is that there are... really common things that almost every game, especially 2D game has. And I don't wanna keep recoding them. And you can't use RubyGems as your library. Like there's no dependency management quite at the maturity level of RubyGems. So there's some options out there that are early days and that you can use. There's one called smog. But a lot of it is like, you're just dropping in functions and methods hoping it works. But something I found is that there's these commonalities. So what I did is I made a framework called scale that gives you like everything you need to make a game that you don't want to think about. So it gives you saved data, it gives you menus, it gives you a nice API for a couple things, it gives you a testing DSL that's a bit more expanded. So it's like, imagine Rails for game development is kind of how I think about it. And it's still early days, right? Like, it's functioning, I just use it for a new game that I started. And and then I'll go back and add what I learned to it with the next version. But it's like, there are just these things I don't wanna think about. I wanna be creative and make the game and not worry too much about pathfinding or collision detection or how to save JSON and that kind of stuff. So I think that there's space within Dragon Ruby and the Ruby 2D game dev world well-documented, full of tutorials on how to do things with it, tight frameworks. So that's something I've been working on. And that's on GitHub and available. And kind of like a neat thing
Charles Max_Wood:
Mm-hmm.
Brett_Chalupa:
that I'm hoping can help fill in those gaps.
Charles Max_Wood:
So one thing that I'm looking at, you know, is we kind of pull this together. So, you know, I move, I figure out collision detection. I start, you know, adding some of these elements. I guess the parts of the, I mean, some of these, I'm better than others, right? So like, you know, story, for example, you know, I think I could probably do okay, you know, coming up with a story and, you know, maybe adding some of the humor to it. But, you know, to have custom artwork or I want to have music and add music or you know how do I figure that out and the other question I have well let's
Valentino_Stoll:
you
Charles Max_Wood:
let's do that one first and then I'll ask my other question.
Brett_Chalupa:
Yeah, I think about this stuff and maybe my mind has been slightly poisoned by years of enterprise business software development, but I think of it agile. And I think
Charles Max_Wood:
Ha
Brett_Chalupa:
there's
Charles Max_Wood:
ha
Brett_Chalupa:
some
Charles Max_Wood:
ha!
Brett_Chalupa:
really important values there that the agile manifesto, I think about those all the time,
Charles Max_Wood:
Huh.
Brett_Chalupa:
which is release early, release often. Let's get this thing out in its simplest version and iterate on the game, where if you think about it like a map where you're getting from the start to the finish, that's daunting and exhausting. But if you're like, I've got this playable and functioning and yeah, it's a little simplistic, but okay, what if I take that and then spend another week on improving it? Okay, yeah, that's not so bad. Like put in some bad art, let's go make it better in the next week. And
Charles Max_Wood:
Mm-hmm.
Brett_Chalupa:
you know, you can do that while people are playing it and getting feedback. So I just think this iterative approach to making games is is really important, especially when you're starting out, because the beautiful thing about that is like, you can at any point say this is done, right?
Charles Max_Wood:
Mm-hmm.
Brett_Chalupa:
Especially when it's low stakes and you're having fun and you're learning. If you're like, I've gone three or four cycles, I've iterated on this, I made the music better, I made the graphics better, I fixed some bugs, it's
Valentino_Stoll:
I'm sorry, I'm sorry.
Brett_Chalupa:
playable, like you can just say
Valentino_Stoll:
I'm sorry, I'm sorry.
Brett_Chalupa:
I'm done. This is 1.0 and
Valentino_Stoll:
I'm sorry, I'm sorry.
Brett_Chalupa:
I've iterated and I'm pleased
Valentino_Stoll:
I'm sorry, I'm sorry.
Brett_Chalupa:
and now it's done and you can move on to the next thing.
Valentino_Stoll:
I'm sorry, I'm sorry. I'm sorry, I'm sorry.
Brett_Chalupa:
a real trap that I've seen throughout
Valentino_Stoll:
I'm sorry, I'm sorry.
Brett_Chalupa:
my entire life,
Valentino_Stoll:
I'm sorry, I'm sorry.
Brett_Chalupa:
which is
Valentino_Stoll:
I'm sorry, I'm sorry.
Brett_Chalupa:
people have this big dream idea,
Valentino_Stoll:
I'm sorry, I'm sorry.
Brett_Chalupa:
right? Like, I've been
Valentino_Stoll:
I'm sorry, I'm sorry.
Brett_Chalupa:
thinking about this idea forever.
Valentino_Stoll:
I'm sorry, I'm sorry.
Brett_Chalupa:
It is a VR
Valentino_Stoll:
I'm sorry, I'm sorry. I'm sorry, I'm sorry.
Brett_Chalupa:
3D MMORPG like Pokemon where, and it's just, it's gonna blow your mind. It's gonna be the best game that's ever existed, right? And then people go and spend like five years working on it. And they'll
Charles Max_Wood:
Mm-hmm.
Brett_Chalupa:
have this thing and it kind of works. And, but you're like, you just spent five years a half-baked thing that barely works. Like, what if you instead
Charles Max_Wood:
Yeah.
Brett_Chalupa:
said, I'm gonna make one game every month for one year. I'm gonna make 12 small freeware games and just learn
Charles Max_Wood:
Mm-hmm.
Brett_Chalupa:
a ton and really build that finishing muscle.
Valentino_Stoll:
I'm sorry, I'm sorry.
Brett_Chalupa:
That's
Valentino_Stoll:
I'm sorry, I'm sorry.
Brett_Chalupa:
the kind of mindset that I think will
Valentino_Stoll:
I'm sorry, I'm sorry.
Brett_Chalupa:
really help at the beginning is keep
Valentino_Stoll:
I'm sorry, I'm sorry.
Brett_Chalupa:
it small and then you iterate on it
Valentino_Stoll:
I'm sorry, I'm sorry.
Brett_Chalupa:
and you just keep making it better. And
Valentino_Stoll:
I'm sorry, I'm sorry.
Brett_Chalupa:
there are certain
Valentino_Stoll:
I'm sorry, I'm sorry. I'm sorry, I'm sorry. I'm sorry, I'm sorry. I'm sorry, I'm sorry. I'm sorry, I'm sorry. I'm sorry, I'm sorry. I'm sorry, I'm sorry. I'm sorry, I'm sorry.
Brett_Chalupa:
like game types that will accommodate that better. like, if you want to make a huge RPG, like, Final Fantasy, right? Like, those are some of my favorite games. I love Final Fantasy and Dragon Quest. And they're like, if the game is under 40 hours, it's like a, it's a negative, right? They're like, no, it was kind of short. It was only 38 hours. Like, because people just want
Charles Max_Wood:
Ahaha,
Brett_Chalupa:
to play these
Charles Max_Wood:
right.
Brett_Chalupa:
games for 80 hours or more. I can't work on a game that can give you 80 hours of content, right? So I really like the idea of taking it and saying, how can I remove elements to still make something that simulates that and feels really good? So for the idea of an RPG, like a turn-based RPG,
Charles Max_Wood:
Mm-hmm.
Brett_Chalupa:
okay, what if you made a battle system that feels good? Oh, that's not too bad, right? This idea of there's turns and you have some attacks and spells and defense and there are enemies.
Charles Max_Wood:
Uh
Brett_Chalupa:
You
Charles Max_Wood:
huh.
Brett_Chalupa:
can code something like that up in a few hours, right? You could even just do that with Ruby. Like you could write a Ruby script that's just a command line game as
Charles Max_Wood:
Right.
Brett_Chalupa:
you know gets and puts and you know and
Charles Max_Wood:
No. It's a zork.
Brett_Chalupa:
you yeah totally you can make a text adventure with
Charles Max_Wood:
Right,
Brett_Chalupa:
a battle
Charles Max_Wood:
shoot,
Brett_Chalupa:
system.
Charles Max_Wood:
well, just for the battle system, right? Shoot fire, then you take damage, you know, and it gives you the feedback, yeah.
Brett_Chalupa:
100%. So you just take that.
Valentino_Stoll:
So, I'm going to go ahead and start the presentation.
Brett_Chalupa:
Okay, great. We have our battle system. It's
Valentino_Stoll:
So, I'm going to start with the presentation of the
Brett_Chalupa:
simplistic, it's text-based. Maybe there's some
Valentino_Stoll:
first item, the
Brett_Chalupa:
free assets that display. Oh,
Valentino_Stoll:
first item, the
Brett_Chalupa:
okay, great. There's a game. Oh,
Valentino_Stoll:
first item, the
Brett_Chalupa:
I have this story. It's about,
Valentino_Stoll:
first item, the
Brett_Chalupa:
you know, this princess who
Valentino_Stoll:
first item, the
Brett_Chalupa:
her evil uncle like stormed the
Valentino_Stoll:
first item, the
Brett_Chalupa:
castle and like
Valentino_Stoll:
first item, the
Brett_Chalupa:
killed the princess's father and
Valentino_Stoll:
first item, the
Brett_Chalupa:
now she's in hiding and is going and seeking
Valentino_Stoll:
first item, the
Brett_Chalupa:
revenge. Right? Here's this little story.
Charles Max_Wood:
Mm-hmm.
Valentino_Stoll:
first item, the
Brett_Chalupa:
Okay. Can I take that simplistic
Valentino_Stoll:
first item, the
Brett_Chalupa:
combat system
Valentino_Stoll:
first item, the
Brett_Chalupa:
throwing out there, can I combine that into something I can make in a month? Like, what would that look like? And I think it would look something like you have a couple towns and it's linear, but you're progressing and you still have those
Charles Max_Wood:
right.
Brett_Chalupa:
like great trappings of an RPG. You can talk to NPCs and, you know, you can go and get the aesthetics of a feeling of an area. You can go and grind through combat and there are boss battles, but like, you could you could make a 30 minute minimal RPG in less than a month. I think you'd be surprised when you reduce things, how almost exciting that is when you take it, reduce it, and go, oh yeah, I could do that pretty quick, and that would actually be pretty fun. So yeah, I love thinking about that. There's just so many, you have these big games, and then you go, how can I make it small? How
Valentino_Stoll:
Thanks for watching!
Brett_Chalupa:
can I just
Charles Max_Wood:
Right.
Brett_Chalupa:
really keep the essence of it? way to start.
Valentino_Stoll:
MVP.
Brett_Chalupa:
Yeah, totally.
Charles Max_Wood:
Yep.
Brett_Chalupa:
Yep.
Charles Max_Wood:
Yep.
Valentino_Stoll:
It's an endless cycle of minimal viable product.
Charles Max_Wood:
Yeah, well, no, go ahead.
Valentino_Stoll:
I was going to say, I remember the days of flash, right? For those that don't know, Adobe Flash was this web product where it ran in your browser and was just kind of like its own VM. And it was a frame by frame animated tool that you can make whatever you wanted that was frame by frame. And it was super easy to use. And I loved it. And it made, there was websites upon websites just full of games that you could play, flash games and submit them. And it's kind of like coming back to that, with Dragon Ruby, I feel like, and it's super cool. And I mean, thinking about like the small games, like it would be even cooler if you could have like a transition to pipe games together, you know, where like, okay, you're playing
Charles Max_Wood:
..
Valentino_Stoll:
one game and hey, I wanna pipe the end of this one into the other one. And then like, oh no, I'm playing a new game. Like, am I playing a new, you know, There's just so much opportunity with how easy it is to make these.
Charles Max_Wood:
Right.
Brett_Chalupa:
Yeah, you can be experimental, right? And that's the creative part that I think meshes really well with Ruby.
Valentino_Stoll:
So where do you go for the playground? Like where do you go for inspiration of Dragon Ruby specific apps or games?
Brett_Chalupa:
Yeah, there's a really great community that exists in Discord, which is like modern day IRC. I think Discord is kind of like, it's expanded and it's not just people who play games and that use it because it's kind of got the mind share, but there's a really great Discord community. And within there are people who are sharing their progress and talking about ideas for games. We even have, I started this thing called the Monthly Game Club, games and I roll a fake die. And whatever number it lands on is the game we play and we play it for a month and we talk about it. We talk about the design, what works, what doesn't. Oh, how would we even do that in Dragon Ruby? That kind of thing. So we have this, there's a good community there. People, there's like people who are as interested in as open source as I am. So they'll, a bunch of people have their games online, the sources available. So like you can go and look at those which I really love and value. So yeah, we've got, and also like this really interesting thing happens because the community is pretty small. It's not like you go in and there and it's just like a sea of people talking about things. It's really manageable and it feels cozy, but this really interesting thing happens where like there's some healthy competition. Like you see someone do something and you're just like, that's incredible, right? Like that is
Charles Max_Wood:
Mm-hmm.
Brett_Chalupa:
just a really, you're pushing it forward. So then it makes me wanna go further too. And I think that that just friendly community really makes a big difference where if I was just doing this by myself and then shouting it to the internet and maybe no one cares, that's really hard when you're beginning something. When you're new, like if you just picked up a guitar and you started wailing and making some like noise rock and playing some chords and you put it online, no one's gonna care or listen to it. Maybe like family or friends might and they'll tell you they like it because they're nice and they're like, it's really cool to have, that's why people form bands, right? Because you're with other people, you are pushing each other to be better, you're creating things together. And yeah, that's, oh, here's another interesting thing. So I don't know, there's this art exercise called exquisite corpse, where
Valentino_Stoll:
I'm sorry, I'm sorry.
Brett_Chalupa:
maybe you take a piece of
Valentino_Stoll:
I'm sorry, I'm sorry.
Brett_Chalupa:
paper and you divide it into four
Valentino_Stoll:
I'm sorry, I'm sorry.
Brett_Chalupa:
quadrants. I
Valentino_Stoll:
I'm sorry, I'm sorry.
Brett_Chalupa:
start drawing in the upper left, I hand it to you, Chuck, and you start drawing, you connect the lines I started.
Charles Max_Wood:
Mm-hmm.
Brett_Chalupa:
drew a snake and then you turned it into like, you know, a bowl of ramen. And then I give it to you, Valentino, and you keep it going. Right. And it's just, you don't know what you're going to get till you get it. And then you just do the best you can and you have fun with it. So I thought, why don't we take that as the DragonRuby community, but do it with a game. So I'm going to work on this game for a week and then I'm going to hand it to the next person. And then they're going to hand it to the next person. And it encourages like not being precious with your code. you're just going to have some level of standards because you know someone else is going to look at that code. So you'll get blame it, and they'll be like, why did this person do this? It's really fun and allows for some creative game design. And right now, we're in week three of it. So we have 12 people signed up. So it'll take three months to run its full cycle, and we're calling it exquisite
Charles Max_Wood:
Mm-hmm.
Brett_Chalupa:
core. I don't know if you ever played Contra Hardcore, but it's a pun on the spelling and stuff. So that's this way. We're like directly, and you don't know what it is till it's your week. So we have a private thread for the alumnus who can go and we're talking about it as it's going. And like, it's just, it's really fun. And I like to tease what the game isn't. Like I'll keep saying it's, you know, like a dating simulator or whatever, to try
Valentino_Stoll:
I'm not sure if I'm going to be able to do it.
Brett_Chalupa:
to just, so people have no clue what it is, but yeah,
Valentino_Stoll:
I'm not sure if I'm going to be able to do it.
Brett_Chalupa:
it's been really
Valentino_Stoll:
I'm not sure if I'm going to be able to do it.
Brett_Chalupa:
just an awesome community too. technical stuff.
Valentino_Stoll:
That sounds so fun.
Charles Max_Wood:
Yep. So one thing that I kind of wanted to dive into here is, and this was kind of the other question that I had, and I'm assuming you're gonna say something like play test, but how do you make sure that you have the right balance? So it's not too easy, it's not too hard, maybe understand enough about your audience to know, yeah, you said some people want the 80 hour game, and that's not what I'm gonna build on my own. So how do we kind of pull that together? How do I make sure that the concepts to line up with what people expect.
Brett_Chalupa:
Yeah, that's a hard part because what happens is that as you're making
Valentino_Stoll:
you
Brett_Chalupa:
the game, you're playing it constantly. You're just
Charles Max_Wood:
Mm-hmm.
Brett_Chalupa:
getting really good at it. And then you hand it to
Charles Max_Wood:
Right.
Brett_Chalupa:
someone who's never played it and it seems just like disturbingly hard.
Charles Max_Wood:
Right.
Brett_Chalupa:
And I think that's just...
Valentino_Stoll:
I'm sorry, I'm sorry.
Brett_Chalupa:
But the thing is that there
Valentino_Stoll:
I'm sorry, I'm sorry.
Brett_Chalupa:
are certain games and certain
Valentino_Stoll:
I'm sorry, I'm sorry.
Brett_Chalupa:
genres of games that
Valentino_Stoll:
I'm sorry, I'm sorry.
Brett_Chalupa:
target a particular
Valentino_Stoll:
I'm sorry, I'm sorry.
Brett_Chalupa:
player
Valentino_Stoll:
I'm sorry, I'm sorry.
Brett_Chalupa:
that genre and they're expecting that
Valentino_Stoll:
I'm sorry, I'm sorry.
Brett_Chalupa:
and they'll exceed
Valentino_Stoll:
I'm sorry, I'm sorry. I'm sorry, I'm sorry. I'm sorry, I'm sorry. I'm sorry, I'm sorry. I'm sorry, I'm sorry. I'm sorry, I'm sorry. I'm sorry, I'm sorry.
Brett_Chalupa:
that skill level or exceed
Valentino_Stoll:
you
Brett_Chalupa:
your skill level even as a developer or you know so it's about kind of knowing who you're making the game for and I think that's another part of the design aspect which is like oh yeah if I'm making a snake game a casual game you can play on your phone on the web like it should be pretty approachable right as a simple interface
Charles Max_Wood:
Right.
Brett_Chalupa:
and inputs and you know that should be pretty
Valentino_Stoll:
you
Brett_Chalupa:
And maybe it scales up in difficulty, but ideally
Valentino_Stoll:
you
Brett_Chalupa:
you should be able to hand that game to anyone. They should be able to play it. Like for our dungeon crawler, our procedural dungeon crawler, like, well, maybe we make that harder because we know that people who play those types of games are, want it to be difficult. And that's part of the fun of the game. And I think you see that with like the rise of
Valentino_Stoll:
I'm sorry, I'm sorry.
Brett_Chalupa:
challenging games these days, like
Valentino_Stoll:
I'm sorry, I'm sorry.
Brett_Chalupa:
Dark Souls and Elden Ring and
Valentino_Stoll:
I'm sorry, I'm sorry.
Brett_Chalupa:
games like Spelunky and
Valentino_Stoll:
I'm sorry, I'm sorry.
Brett_Chalupa:
where it's challenging.
Valentino_Stoll:
I'm sorry, I'm sorry.
Brett_Chalupa:
But
Valentino_Stoll:
I'm sorry, I'm sorry.
Brett_Chalupa:
the reward
Valentino_Stoll:
I'm sorry, I'm sorry. I'm sorry, I'm sorry. I'm sorry, I'm sorry. I'm sorry, I'm sorry. I'm sorry, I'm sorry. I'm sorry, I'm sorry. I'm sorry, I'm sorry. I'm sorry, I'm sorry.
Brett_Chalupa:
is that you learn the game and the systems and that's the fun of it. So it just, yeah, it's so hard to know though. I've fallen in this trap where it's like you work on it for a few weeks and it's unplayable by someone else because you know all the secrets and the tricks and how to play it.
Valentino_Stoll:
So
Charles Max_Wood:
Right.
Valentino_Stoll:
do you have, do you make, you know, secret cheat codes just for you?
Brett_Chalupa:
Yes, and I would love to talk about this because I think this, just like the game loop and some other things that are unique to making games is, you have to code shortcuts for yourself. It makes developing so much faster. So like, I'll give you some examples. I'm making a sneak game. It's called Slither. The unique part about it is that I hand drew all the graphics and I scanned them in. And then I had to adjust them so
Charles Max_Wood:
Oh
Brett_Chalupa:
they
Charles Max_Wood:
nice.
Brett_Chalupa:
lined up. Yeah, but it's like cute and silly and it'll be free and it's public domain. That playing Snake and getting to 30 pieces long is really annoying. So what I do is you just code in some stuff that says, if you're not in the production build, which is really easy to do in Dragon Ruby, if you press the one key, grow by one length. So I just jam the one key, now I'm 30 pieces long and can test that. So debug mode shortcuts and features are so fun, so useful. other examples. In Destroy All Goblins, there's a button
Valentino_Stoll:
you
Brett_Chalupa:
you can press to toggle invincibility so that you're not just like... so you can actually progress and test
Charles Max_Wood:
God
Brett_Chalupa:
things
Charles Max_Wood:
mode.
Brett_Chalupa:
out. Yeah, totally! Yep, god mode. I think anything... like the moment you're working on a game and you find it tedious
Valentino_Stoll:
I'm sorry, I'm sorry.
Brett_Chalupa:
to get to a certain point, like a level
Valentino_Stoll:
I'm sorry, I'm sorry.
Brett_Chalupa:
or an area
Charles Max_Wood:
Mm-hmm.
Brett_Chalupa:
or
Valentino_Stoll:
I'm sorry, I'm sorry.
Brett_Chalupa:
a level of power or something, just
Valentino_Stoll:
I'm sorry, I'm sorry.
Brett_Chalupa:
add a way to shortcut that
Valentino_Stoll:
I'm sorry, I'm sorry.
Brett_Chalupa:
so that you can actually test the things that you're changing much
Valentino_Stoll:
I'm sorry, I'm sorry.
Brett_Chalupa:
more
Valentino_Stoll:
I'm sorry, I'm sorry.
Brett_Chalupa:
of coding
Valentino_Stoll:
I'm sorry, I'm sorry. I'm sorry, I'm sorry. I'm sorry, I'm sorry. I'm sorry, I'm sorry. I'm sorry, I'm sorry. I'm sorry, I'm sorry. I'm sorry, I'm sorry.
Brett_Chalupa:
and thinking about your games that's really meaningful. Because if you need to make it easy for your snake to grow by one length, well, maybe I should have a method called grow snake. And then you pass in whatever, the data structure. So then you can call that from in the game, but then you can also call that from your code that
Valentino_Stoll:
I'm sorry, I'm sorry.
Brett_Chalupa:
your debug mode shortcut. So
Valentino_Stoll:
I'm sorry, I'm sorry.
Brett_Chalupa:
I think it
Charles Max_Wood:
Right.
Brett_Chalupa:
leads to this
Valentino_Stoll:
I'm sorry, I'm sorry.
Brett_Chalupa:
architecture that's
Valentino_Stoll:
I'm sorry, I'm sorry.
Brett_Chalupa:
really valuable.
Valentino_Stoll:
I'm sorry, I'm sorry.
Brett_Chalupa:
If it's not
Valentino_Stoll:
I'm sorry, I'm sorry.
Brett_Chalupa:
too in the weeds,
Valentino_Stoll:
I'm sorry, I'm sorry. I'm sorry, I'm sorry. I'm sorry, I'm sorry. I'm sorry, I'm sorry. I'm sorry, I'm sorry. I'm sorry, I'm sorry. I'm sorry, I'm sorry. I'm sorry, I'm sorry.
Brett_Chalupa:
I'd love to talk about some of the coding architecture stuff and what's interesting about it in Dragon Ruby, because it's quite different than I think most Rubyists are familiar with, in a way that's
Charles Max_Wood:
Yeah,
Brett_Chalupa:
very
Charles Max_Wood:
I just...
Brett_Chalupa:
fun and liberating.
Charles Max_Wood:
I just, before you go there, it's funny that you brought up the cheat codes for the book club. So last night, you know, we did the book club for top end devs and we've been reading clean architecture and that's one of the things that Uncle Bob actually put in the book was that you need to have in order to test your applications ways of getting around the brittle parts of your application, which is usually the UI, right? So in that case, yeah, he talks about having a test API that you hit to put it into the state you want so that you, right, and that's what you're talking about here. I just thought it was interesting that this is another application that I hadn't really thought too deeply about that, oh, yeah. So anyway. So anyway,
Brett_Chalupa:
And part of that too is like when you have that more modular design of your code, right? You can have that test API framework. You can have cheat codes. And also generally that code's easier to write automated tests for, which is just
Charles Max_Wood:
Right.
Brett_Chalupa:
so valuable and in Dragon Ruby, there's a test runner and there's that test DSL that I wrote called Dragon test. And you take that and you piece it together and you're like, oh yeah, like this complex thing. unit tested and that feels like really powerful because it's using the cheat code, it's using the game, and it's really easy to test. It's a, yeah, it just feels good. It's good architecture.
Charles Max_Wood:
So yeah, so let's dive into the architecture because I would imagine that it looks a little different from say my Rails apps or Sinatra apps that I'm building.
Brett_Chalupa:
Yeah, I... This is maybe one of the big community contention
Valentino_Stoll:
you
Brett_Chalupa:
points, the big splits. So Amir has shared that the design of the API is inspired by functional programming. And it really shows.
Charles Max_Wood:
Mm-hmm.
Brett_Chalupa:
It's centered around the data you have, these simple data structures, which are 99% of the time hashes. And then you change them based upon your game logic. some methods that you call. There's no classes that you need to know. There's
Valentino_Stoll:
I'm sorry, I'm sorry.
Brett_Chalupa:
no, I've never once written.new
Valentino_Stoll:
I'm sorry, I'm sorry.
Brett_Chalupa:
in any of the Ruby
Valentino_Stoll:
I'm sorry, I'm sorry.
Brett_Chalupa:
games I've written, and I've made about
Valentino_Stoll:
I'm sorry, I'm sorry.
Brett_Chalupa:
five or six in the last few
Valentino_Stoll:
I'm sorry, I'm sorry.
Brett_Chalupa:
months. So
Valentino_Stoll:
I'm sorry, I'm sorry.
Brett_Chalupa:
by default, all the samples
Valentino_Stoll:
I'm sorry, I'm sorry.
Brett_Chalupa:
are like, a
Valentino_Stoll:
I'm sorry, I'm sorry.
Brett_Chalupa:
majority of the samples in the
Valentino_Stoll:
I'm sorry, I'm sorry.
Brett_Chalupa:
book
Valentino_Stoll:
I'm sorry, I'm sorry. I'm sorry, I'm sorry. I'm sorry, I'm sorry. I'm sorry, I'm sorry. I'm sorry, I'm sorry.
Brett_Chalupa:
that I wrote doesn't use OO. And I think when you come from a Ruby world, and especially Rails, You have this inheritance where like your models that you're inheriting from active record bass are what's flowing through your application, you're changing them, you're updating
Charles Max_Wood:
Mm-hmm.
Brett_Chalupa:
them, you're thinking about things in terms of objects. But Dragon Ruby wants you to think about things in terms of data that you pass into methods that adjust them or calculate based on it. And I remember the first day I started writing Dragon Ruby, I was like, okay, great, I'm gonna go and OO the heck out of this, right? I'm gonna wrap everything and do all this stuff. And, but then what ends up happening is that like, interactions about your game before you even understand them fully and then it becomes much more difficult to change so if you
Valentino_Stoll:
you
Brett_Chalupa:
have a hash with a bunch of attributes about what's happening in your game, that's a lot easier to change than going and renaming a bunch of classes or trying to figure out like, oh, what's the generic name for this class? Should it be entity or actor or sprite? And oh, then you figure out the inheritance tree. Oh, the apple is a sprite, but the apple doesn't have AI, so it's not, you know, whatever,
Charles Max_Wood:
Mm-hmm.
Brett_Chalupa:
like you can. people have and can apply OO to game development in a way that I'm sure works well. But Amir and Dragon Ruby and the docs and the book really encourage you to think about things functionally. And it's been eye-opening to, cause Ruby gives you all these tools, right? Like a ton of OO tools, everything's an object. Like, so, oh, I guess I should make objects too. But then when you go and you think like, I'm just gonna make a bunch of methods that I pass data into. And this beautiful thing happens where it's easier to test them. It's easier to replicate the state of things because you just have a hash in memory that you're modifying and adjusting instead of all these instances of objects. And I think it's made the code a lot cleaner. It's a lot easier to reason about. So the architecture
Valentino_Stoll:
you
Brett_Chalupa:
approach I've taken, that scale the framework takes and that I've really been enjoying is putting class methods and modules. So if you have a player, which is really common, called capital P player, the constant dot tick. And then you pass data into it. And tick is just what runs that 60 times a second in the game loop. And then from there calls out other methods and yeah, it's been really weird. Like it feels bad. It feels like I'm doing bad things because it's not the usual like Ruby way of doing things. But I gotta say, I just love it. And it mirrors a lot of like modern web programming Like if anyone's used React or similar components where you have a bunch of data in the client-side data store, and then you're just changing the state, it's reacting based upon the data changing, it feels super good to me at least. So yeah,
Charles Max_Wood:
Mm-hmm.
Brett_Chalupa:
that's been a really big difference. And then I go back into my day job work where we have these complex inheritance trees. difficult to reason about because you don't know what the
Valentino_Stoll:
you
Brett_Chalupa:
data you have at any given point is and then what it means to be in the database. Yeah, I don't know. I like that about making games with Dragon Ruby and having the stakes below is that I can experiment and try things without having a bunch of dogma around like, oh, I'm doing an entity component system, which is a really trendy game programming.
Charles Max_Wood:
Mm-hmm.
Brett_Chalupa:
Everyone's like, oh, God, I have an ECS, which maybe it would be helpful. The idea of instead of saying like, what if I just like try it and see what feels good? And I think when you write code for long enough, those, like you know what feels right and what feels good. And when you go and you write the code and then you refactor it and you're like, ooh, that's better. Like that's a nicer API or it's easier to test or reuse. Like that muscle memory starts to happen really cool to apply it to like a different style of programming or a different paradigm.
Valentino_Stoll:
That's an interesting concept to think of it in that functional way, which makes me wonder, maybe there's something missing. Can you control the frames per second or is that a fixed thing?
Brett_Chalupa:
Fixed, yep.
Valentino_Stoll:
It's fixed. We were talking to the mirror before, there's so much you can do to optimize based on that, because you know it's fixed and it's going to continue doing that. So you can optimize how the code is running in certain ways. So it'd be interesting of see somebody apply this to something that's not game. Maybe you have some post-processing background job that periodically runs at a specific time and you want it to process in batches of things. I feel like this almost feels very familiar. I would be interested to see I feel like that would be a huge, it would make things a lot more easier to reason about, right? Because I feel like I'm always like, you know, one of the hardest problems with like background jobs is like any dependency. Like as soon as they
Charles Max_Wood:
Mm-hmm.
Valentino_Stoll:
become dependent and they have to like process something next, like, but if it's all like, you know, part of this ecosystem that, you know, has ticks and like, you know, is just always running, like I feel like there's an opportunity there. Not that I want people to not make games.
Brett_Chalupa:
No,
Charles Max_Wood:
Ha ha ha ha ha ha ha ha ha ha ha ha ha ha ha ha ha ha ha ha ha ha ha ha ha ha ha ha ha ha ha ha ha ha ha ha ha ha ha ha ha ha ha ha ha ha ha ha ha ha ha ha ha ha ha ha ha ha ha ha ha ha ha ha ha ha ha ha ha ha ha ha ha ha ha ha ha ha ha ha ha ha ha ha ha ha ha ha ha ha ha ha ha ha ha ha ha ha ha ha ha ha ha ha ha ha ha ha ha ha ha ha ha ha ha ha ha ha ha ha ha ha ha ha ha ha ha ha ha ha ha ha ha ha ha ha ha ha ha ha ha ha ha ha ha ha ha ha ha ha ha ha ha ha ha ha ha ha ha ha ha ha ha ha ha ha ha ha ha ha ha ha ha ha ha ha ha ha ha ha ha ha ha ha ha ha ha ha ha ha ha ha ha ha ha ha ha ha ha ha ha ha ha ha ha ha ha ha ha ha ha ha ha ha ha ha ha ha ha ha ha ha ha
Brett_Chalupa:
I agree. I think too, just functional Ruby is really an interesting idea to interrogate and think about. And I think Sinatra is a really good example of this thing where you can just have your Sinatra app and it's just a bunch of, it's just basically methods, right? That are responding to HTTP verbs. And I think the question becomes, when it gets a little more complex, Do you reach for classes and objects, or do you reach towards just passing that data through different places? And yeah, I'm really interested in understanding more about how farther I can take this or how I can take it and apply it to things. I think there's a space for a book or a resource or a guide that's like, here's how to do functional Ruby and here's why you should try it. And I don't know. something to think about.
Valentino_Stoll:
I always love
Charles Max_Wood:
Yeah.
Valentino_Stoll:
Jim Weirich's, you know, Lambda calc talk. I mean, that was just
Charles Max_Wood:
Yep.
Valentino_Stoll:
eye-opening to me. But
Charles Max_Wood:
Well,
Valentino_Stoll:
before we run out of
Charles Max_Wood:
and
Valentino_Stoll:
time,
Charles Max_Wood:
there.
Valentino_Stoll:
I wanted to just quickly like transition, because I'm super curious, like have you deployed this anywhere? Like, is this running on, you know, game operating systems? Like, what is that process like, you know, XYZ?
Brett_Chalupa:
Yeah, yeah, I'd love to. So, Destroy All Goblins is just like free and available for Windows, Mac, Linux. And you can just download it from the itch.io page, which is cool. So you can go to brettchalupa.itch.io and you'll find Destroy All Goblins and some other things I'm working on. You'll find Slither, that cute snake game. And I'll talk about that process of how you deploy it. Cause it's incredible. So a
Charles Max_Wood:
Mm-hmm.
Brett_Chalupa:
big part of Dragon Ruby So you don't have to install anything. You get a zip for your operating system, you unzip it, you run the executable, and that's it. You don't have to install anything with homebrew, whatever. It's, I've never used any piece of software for making, for writing code that's like that, which is really special. And then how you deploy it is special. So because the game's just running Ruby code, Ruby code can run anywhere. So when you get the engine, it has basically wrappers every platform from iOS to Mac to Android to Linux to Windows. And it just takes your Ruby code and inserts it into the wrapper with a command. So your game builds as quickly as your Ruby code copies into those wrappers, basically. So you can go take your game, make changes, save it, commit it, bump the version, run one command and push it in less than 60 seconds, have a new version updated on itch. can go and automate it to publish to other places too. But it's so disturbingly fast that it's almost dangerous. Because you're like, oh, I can just. It's as easy as pushing to Heroku. It truly is. And
Charles Max_Wood:
Oh wow.
Brett_Chalupa:
that's what's incredible. I've never used any game engine that you can get cross-platform builds on one platform. So another game engine I've used, who I won't name, I have to go and I have to boot up a VM for each operating system and compile it on there. That's like slow and not fun, right? That's like not how I want to spend my time. So you get that. Awesome. And then on the mobile side. Dragon Ruby has a HTTP server built in that, so on my iPhone, I can work on Slither, the snake game. It's making requests to my Mac OS computer over the local network. And when a Ruby file changes, it hot loads it on my phone running. Like, so I can on my Mac OS computer change Ruby code, it
Valentino_Stoll:
I'm sorry, I'm sorry.
Brett_Chalupa:
automatically refreshes on my phone,
Valentino_Stoll:
I'm sorry, I'm sorry.
Brett_Chalupa:
and I can test it out.
Valentino_Stoll:
I'm sorry, I'm sorry. I'm sorry, I'm sorry.
Brett_Chalupa:
cycle for
Valentino_Stoll:
I'm sorry, I'm sorry.
Brett_Chalupa:
making games I've ever
Valentino_Stoll:
I'm sorry, I'm sorry.
Brett_Chalupa:
seen. And it's
Valentino_Stoll:
I'm sorry, I'm sorry.
Brett_Chalupa:
like, I just can't
Valentino_Stoll:
I'm sorry, I'm sorry. I'm sorry, I'm sorry. I'm sorry, I'm sorry. I'm sorry, I'm sorry. I'm sorry, I'm sorry. I'm sorry, I'm sorry. I'm sorry, I'm sorry.
Brett_Chalupa:
overstate how fun and
Valentino_Stoll:
you
Brett_Chalupa:
exciting that is. And to get it
Valentino_Stoll:
you
Brett_Chalupa:
on Android, like to get my game, the Snake game, working on Android, it took me five minutes.
Valentino_Stoll:
I'm sorry, I'm sorry.
Brett_Chalupa:
And everything just worked.
Valentino_Stoll:
I'm sorry, I'm sorry.
Brett_Chalupa:
That's not how things go in the
Valentino_Stoll:
I'm sorry, I'm sorry.
Brett_Chalupa:
world of desktop
Valentino_Stoll:
I'm sorry, I'm sorry.
Brett_Chalupa:
and mobile development. So
Valentino_Stoll:
I'm sorry, I'm sorry.
Brett_Chalupa:
yeah.
Charles Max_Wood:
That's awesome.
Valentino_Stoll:
you
Charles Max_Wood:
So...
Valentino_Stoll:
Yeah, you've really got me inspired here.
Charles Max_Wood:
Yeah, one
Brett_Chalupa:
Yeah,
Charles Max_Wood:
thing that I'm
Brett_Chalupa:
like...
Charles Max_Wood:
wondering is just selling it like you've mentioned putting it out for free, but Yeah, I mean, can you just like, you know, I guess you just put it on steam, right? And they just load it up like anything else.
Brett_Chalupa:
Yeah, totally. And so Steam, these days, it used to be different. But these days, in the Google Play Store and the Apple App Store, you have to register as a developer. And for Apple,
Charles Max_Wood:
Right.
Brett_Chalupa:
you pay $99. And for Steam, you pay $100 or so. You can put your game on there. And you can charge for it. You can on itch, too. And I think that's my goal, right? I'm early stages. Yeah, I've got some game programming background But I'm like, coming fresh out of Rails, thinking about that whole world and the web. But I'm excited and I'm inspired and I've got a decade of Ruby experience. So it's like, and you find
Charles Max_Wood:
Mm-hmm.
Valentino_Stoll:
you
Brett_Chalupa:
this tool that's got this incredible developer experience and
Valentino_Stoll:
you
Brett_Chalupa:
you wanna make games, it's like, hit the ground running. And I think it's the, I'm at like stage one and then I think the next stage is like, okay, well, let's sell some games, right? And let's charge for them. possible because how I'm thinking about this and this game stuff is like thinking about like a business, right? Like, yeah, you can do it for fun as a hobby. A lot of people do. But my perspective on it is like, I want this to be a business and I want to be able to be creative and write code and make cool, weird games. And it'd be nice if I could do that for my day job, right? So step one is like, I have to get the skills and I have
Charles Max_Wood:
Mm-hmm.
Brett_Chalupa:
like empowers me to be the most creative and work quickly and accomplish those goals. So I feel like DragonRuby's done that. So to me, it's like, okay, if this is like an investment and a decision, like a business decision to use this engine, I wanna feel really good about it. And I do, and then the second thing is like, I want the community to just feel amazing. Because I think if I invest time into the community and the resources, that will make the engine better. So it's like it's like a win-win-win and I've been working on like follow-ups to the book which I'm working on a zine so it's like a print zine. I made stickers and it has
Charles Max_Wood:
Ha ha!
Brett_Chalupa:
it's like imagine you're excited about making games you go you order this zine for four bucks or whatever you know at cost I'll mail it to you and it's like got tutorials it's got interviews A lot of things we've talked about here, like that kind of thing, right? So making a zine, I'll write a sequel to the book that covers more advanced topics. Like, I just, I want, I want someone who is as excited as I am to see it and have a really smooth transition into making games and being creative and expressing themselves and having fun. Cause like, it's just straight up fun, which is the best part.
Charles Max_Wood:
Awesome. Yeah, I'm pretty, I really want to go try it out. Just dive in a little bit.
Valentino_Stoll:
Yeah, I'm serving through your itch now and there's a lot of fun ones in there.
Brett_Chalupa:
Yeah, I think it's about having
Charles Max_Wood:
Yeah.
Brett_Chalupa:
fun and don't put the pressure on yourself, right? That's the most important thing is have fun, take the pressure off, learn some things, and finish it and put it out there and share it because that's the unsung skill is finishing.
Valentino_Stoll:
That just reminds me of Adam Gordon-Levitt that we've had on before. And he interviews the guy from Apple that made the first drawing app. And his first thing was like he just released the source code in some local computer publication. And somebody was like, hey, this is cool.
Brett_Chalupa:
I love that.
Valentino_Stoll:
And there's this long story. But like, you know, it started out with just something simple. He was having some fun and, you know, shared it with everybody, you know.
Brett_Chalupa:
I love
Charles Max_Wood:
Yep.
Brett_Chalupa:
that. That idea too of like, here's just like some source code like on a computer, like a local computer. That's like the kind of vibe that I want the zine to have. So there's a snake, there's just the code for snake. It doesn't explain any of it. And you know, the goal is like you get the zine, it arrive in the mail and you type this snake in and you learn how to, you know, make snake. And there's some other like cool surprises that really take like sharing code in a way that's different than GitHub or a GitHub gist I think there's just some really neat cool stuff you can do there.
Charles Max_Wood:
Yep, absolutely. Well, I'll definitely be diving in. Where do I get the book?
Brett_Chalupa:
The book is at book.dragonriders.community, which I can't believe community is a top level domain, but it is and yeah, you'll find it all there. There's links to PDF version if you wanna read it offline. And you can also play the game you'll be making in the web just to get a sense of what that is.
Charles Max_Wood:
Very cool. All right, well, anything else before we do picks?
Brett_Chalupa:
No, I
Charles Max_Wood:
I'm
Brett_Chalupa:
just
Charles Max_Wood:
gonna
Brett_Chalupa:
say...
Charles Max_Wood:
take that as a no.
Brett_Chalupa:
Yeah.
Charles Max_Wood:
All right, well, let's,
Valentino_Stoll:
you
Charles Max_Wood:
so I said picks, but we need
Valentino_Stoll:
you
Charles Max_Wood:
to do promos first. So this is a new segment, if you haven't listened to the show for a while, where we just talk about what we're working on that people ought to know about. So Valentino, what are you working on that people should know about?
Valentino_Stoll:
So I work for a company, Doximity. It's basically a social network for doctors. But I've been working on this really fun project. We have these hack days at the end of the quarter where we get to work on kind of whatever we want. And somebody kind of mused with all these chat GPT stories coming out, oh, we should, you know. So somebody had posted a thing where, you know, patients get rejected for medicine items and oh, wouldn't it be nice if we could have ChatGPT generate some denial, you know, rebuttal letter to these insurance companies. And so it snowballed and kind of we built this thing where, you know, you can say, hey, generate a, you know, insurance denial, you know, a number of different things, and it'll generate a special prompt and give you a completion with a letter. And then since we allow faxing for doctors, the doctors can then take that and then fax it to the insurers who we already have fax numbers for and basically automate a lot of this flow so that they can provide actual care for their patients that are getting denied care. Right? like working with this like you know AI stuff it's just been a lot fun it'll be at Doximity.com slash doc-gpt really looking forward to releasing that today
Charles Max_Wood:
Nice.
Brett_Chalupa:
awesome.
Charles Max_Wood:
So what I'm working on, I'm getting ready to launch a new podcast and we're gonna put it out next week. I'm gonna be putting up a few episodes every week. Some of them will be free, some of them will be premium and it's called Catapult Your Coding Career. And so we're gonna be talking about, it's not just career advice. I've been talking to a lot of different people And the kinds of things that people are getting hung up on aren't always the, well gee, what do I put on my resume? We're gonna cover that stuff. But it's also, hey, how do I stay current on the latest and greatest thing in front-end JavaScript or whatever? How do I figure out why I'm not getting any job interviews? I feel stuck at work, right? I'm not learning
Valentino_Stoll:
you
Charles Max_Wood:
anything new, I'm just doing the same old thing every day
Valentino_Stoll:
you
Charles Max_Wood:
and I don't feel like I'm advancing. I'm a junior developer, I'm not getting a whole lot of support at work, and
Valentino_Stoll:
you
Charles Max_Wood:
I don't know what to do to move ahead. And so I'm going to be talking about these things and answering the questions. Some of these questions are probably going to come in a couple of parts. Hey, here's how you do the first part, here's how you do the second part, or maybe here's one approach, here's another approach. I recommend three things, so here are three episodes. But yeah, that's what I'm going to be diving into. the point is is whatever you need to know or learn as technical or soft skills or project management skills or you know whatever management skills for leadership skills for managers we're gonna talk through all of those kinds of things and just open the gate to yeah how do I how do I move my career up to the point both from a fulfillment and maybe a pay range down to, it gives me the hours that I need in order to support my lifestyle, right? So if you have kids or you have a parent you have to take care of or whatever, right? It's, hey, you know, how do you build a career that will support the kind of life you wanna have? And at the same time, it's fulfilling on its own enough so that it's not a job, it's something you enjoy doing since you spend so much time there. That's what we're putting together. If you go look for it in the podcast apps, when it shows up, the artwork has a rocket on it. It's a red rocket, I think. So anyway, yeah, it says catapult in the name and I put a rocket on it, because I think rockets are cool. But anyway, so that's what I'm working on. That's kind of the big push coming up. And then the book club, we're finishing up clean architecture and beginning in February,
Valentino_Stoll:
I'm sorry, I'm sorry. I'm sorry, I'm sorry.
Charles Max_Wood:
Docker Kubernetes deployment
Valentino_Stoll:
I'm sorry, I'm sorry.
Charles Max_Wood:
focus book.
Valentino_Stoll:
I'm sorry, I'm sorry.
Charles Max_Wood:
Those
Valentino_Stoll:
I'm sorry, I'm sorry.
Charles Max_Wood:
are the things that I'm working on. How
Valentino_Stoll:
I'm sorry, I'm sorry.
Charles Max_Wood:
about you, Brett? What are you working on that people should know about?
Valentino_Stoll:
I'm sorry, I'm sorry.
Brett_Chalupa:
Yeah, I am working
Valentino_Stoll:
I'm sorry, I'm sorry.
Brett_Chalupa:
on Slither,
Valentino_Stoll:
I'm sorry, I'm sorry.
Brett_Chalupa:
the public domain cute snake
Valentino_Stoll:
I'm sorry, I'm sorry.
Brett_Chalupa:
game. That is available on web
Valentino_Stoll:
I'm sorry, I'm sorry.
Brett_Chalupa:
now and will be on
Valentino_Stoll:
I'm sorry, I'm sorry. I'm sorry, I'm sorry. I'm sorry, I'm sorry.
Brett_Chalupa:
iOS and Android soon. It'll be my first game on those
Valentino_Stoll:
I'm sorry, I'm sorry.
Brett_Chalupa:
platforms. And then I think my
Valentino_Stoll:
I'm sorry, I'm sorry.
Brett_Chalupa:
next project is
Valentino_Stoll:
I'm sorry, I'm sorry.
Brett_Chalupa:
going to be called Daily Dungeon.
Valentino_Stoll:
I'm sorry, I'm sorry.
Brett_Chalupa:
It is going to be a dungeon
Valentino_Stoll:
I'm sorry, I'm sorry.
Brett_Chalupa:
crawler with procedurally generated
Valentino_Stoll:
I'm sorry, I'm sorry.
Brett_Chalupa:
dungeons, but you can only play it once
Valentino_Stoll:
I'm sorry, I'm sorry.
Brett_Chalupa:
a day. And the random seed
Valentino_Stoll:
I'm sorry, I'm sorry.
Brett_Chalupa:
will be the current date. So everyone will
Valentino_Stoll:
I'm sorry, I'm sorry. I'm sorry, I'm sorry. I'm sorry, I'm sorry. I'm sorry, I'm sorry. I'm sorry, I'm sorry. I'm sorry, I'm sorry.
Brett_Chalupa:
have the same seed but you can only play it once per day and it'll be like a non-addictive, fun, cute art, rogue-like game. So I think that's the next big, you know, the next step for a more complex game that I want to make is Daily Dungeon. And yeah, I think the Dragon Ruby zine will be out in a couple weeks and eventually, yeah, people will be able to read that and buy a physical copy if they want to, which is fun.
Charles Max_Wood:
Cool. All right, well let's do some picks. Valentino, why don't you throw some picks at us?
Valentino_Stoll:
Yeah, my first pick is this app I came across called Amazing AI for the Mac. And it basically uses some, you know, AI image generation with the new M1 stable image diffusion to quickly generate photos from a prompt. Really fun to play with. And you don't need to like sign up for an account or anything. And it's free. Super fun. And let's see, that's pretty much it. Yeah, that was the latest thing I've been working, been having fun with.
Charles Max_Wood:
Awesome. I'm gonna throw out a few picks. I always do a board game pick. So I'll start out with that one. I'm gonna pick a card game, it's called Karma. And it's pretty simple. Board game geek waits it at one, right? So it's simple enough to where younger kids can play. But it's a fun game and it's a fun game to play with adults. Takes about 20 minutes to play a game. And what it is is you deal nine cards to everybody. You don't look at the cards, three of them face
Valentino_Stoll:
you
Charles Max_Wood:
down without looking at them. Then you look at the cards, you put the three highest cards on top of those. And then you start out, the first person puts
Valentino_Stoll:
you
Charles Max_Wood:
down usually their lowest card on the discard pile because it's empty, you can put whatever you want. And then everybody else after that has to either match or beat the number. If you can't match or beat the number, you pick up the discard pile, right? Pretty simple. Has karma cards and the karma cards are essentially wilds so you can play them at any time So one of them is choose somebody to pick up the discard pile. So even if they can play on it, they get the pile. And then you pull that out of the game so that it doesn't get played again. The rest of them stay in the game. So there's one that's play a card that's five and under. And so the person after you has to play a card that's five or lower, or they have to pick up the pile. And so if you know they're into their higher cards, right? mess them up or whatever. But anyway, after the draw pile runs out, because you draw back up to three after every turn, when the draw pile runs out, when you run out of cards in your hand, then what you do is you start playing the cards that are face up in front of you. And once all those cards are gone, then you can play the cards that are face down. But you play them on your turn by flipping it over, seeing if you can beat the discard pile. And if you can't, then you have to card pile. And then you have to run out of cards again before you can play another card or play another face down card or face up card if you're you know playing them. So those are called table cards. One of your karma cards lets you play a table card and you can play any one you wanted because you've played the karma card is a wild and so anything beats a wild so you can write. So anyway I mean that's it that's the whole game. There you go you know how to play karma. I think we got it for Christmas last year and it's been a lot of fun. So I'm going to pick that. As far as other picks go, I've been watching 1923, which is one of the spin-off series from Yellowstone. I really like Yellowstone, but the spin-off series have been better than Yellowstone, I just have to say. So 1883 was awesome. I really, really loved that. It's just a terrific show. And one of the things I like is that they don't gloss over some of the ugly stuff that happened in the past. I mean, I don't feel like at this point it makes sense to make modern society make amends for the things that were done in the past. Cause the people who did them and the people they did them to, I mean, they're not here anymore, right? But we can acknowledge, hey, we don't ever want to be those people again, right? just to look at kind of the mindset. It's like, okay, how do you get to a mindset where that actually makes any sense? The other thing that was funny was that
Valentino_Stoll:
I'm sorry, I'm sorry.
Charles Max_Wood:
the last episode I watched,
Valentino_Stoll:
I'm sorry, I'm sorry.
Charles Max_Wood:
there's
Valentino_Stoll:
I'm sorry, I'm sorry.
Charles Max_Wood:
a guy in town that's saying
Valentino_Stoll:
I'm sorry, I'm sorry.
Charles Max_Wood:
we're installing electricity into
Valentino_Stoll:
I'm sorry, I'm sorry.
Charles Max_Wood:
buildings, right? Something we all take for
Valentino_Stoll:
I'm sorry, I'm sorry.
Charles Max_Wood:
granted today. And
Valentino_Stoll:
I'm sorry, I'm sorry.
Charles Max_Wood:
he's selling, you know, he's like,
Valentino_Stoll:
I'm sorry, I'm sorry.
Charles Max_Wood:
we'll sell you the
Valentino_Stoll:
I'm sorry, I'm sorry.
Charles Max_Wood:
electric
Valentino_Stoll:
I'm sorry, I'm sorry. I'm sorry, I'm sorry. I'm sorry, I'm sorry. I'm sorry, I'm sorry. I'm sorry, I'm sorry.
Charles Max_Wood:
and stuff like that. And it's funny because all the men are going, what do we need that for? And then, you know, as they're walking away, two of the women look at each other and go, that washing machine makes a whole lot of sense to me, right? Because they had to wash the clothes by hand. And that's just kind of the way they divided the labor, right? The men drove
Valentino_Stoll:
Yn ystod y cyfle, mae'r cyfle wedi'i ddod yn ystod y cyfle.
Charles Max_Wood:
the cattle and slept on the ground and, you know, did all that. And the women,
Valentino_Stoll:
Mae'r cyfle wedi'i ddod yn ystod y cyfle.
Charles Max_Wood:
you know, washed the clothes and kept the house and whatever.
Valentino_Stoll:
Mae'r cyfle wedi'i ddod yn ystod y cyfle.
Charles Max_Wood:
And so anyway, it was interesting just to kind of see
Valentino_Stoll:
Mae'r cyfle wedi'i ddod yn ystod y cyfle.
Charles Max_Wood:
that perspective
Valentino_Stoll:
Mae'r cyfle wedi'i ddod yn ystod y cyfle.
Charles Max_Wood:
that and then I
Valentino_Stoll:
Mae'r cyfle wedi'i ddod yn ystod y cyfle.
Charles Max_Wood:
also have started listening to on
Valentino_Stoll:
Mae'r cyfle wedi'i ddod yn ystod y cyfle.
Charles Max_Wood:
Audible
Valentino_Stoll:
Mae'r cyfle wedi'i ddod yn ystod y cyfle.
Charles Max_Wood:
the Mistborn books again.
Valentino_Stoll:
Mae'r cyfle wedi'i ddod yn ystod y cyfle.
Charles Max_Wood:
And so because there was a new there's a new book called The Lost Metal that came out and it's
Valentino_Stoll:
I'm sorry, I'm sorry.
Charles Max_Wood:
from the second phase of that
Valentino_Stoll:
I'm sorry, I'm sorry.
Charles Max_Wood:
with Wax and Wayne. It doesn't have it's
Valentino_Stoll:
I'm sorry, I'm sorry.
Charles Max_Wood:
not Vin and Ellen and Kelsey
Valentino_Stoll:
I'm sorry, I'm sorry.
Charles Max_Wood:
and that crew. But
Valentino_Stoll:
I'm sorry, I'm sorry.
Charles Max_Wood:
I was like, well,
Valentino_Stoll:
I'm sorry, I'm sorry.
Charles Max_Wood:
heck, I'm going to listen to all of them because they all happened
Valentino_Stoll:
I'm sorry, I'm sorry.
Charles Max_Wood:
in the same.
Valentino_Stoll:
I'm sorry, I'm sorry.
Charles Max_Wood:
world structure, right?
Valentino_Stoll:
I'm sorry, I'm sorry.
Charles Max_Wood:
And I know eventually Brandon Sanderson's
Valentino_Stoll:
I'm sorry, I'm sorry.
Charles Max_Wood:
planning on doing like crossovers
Valentino_Stoll:
I'm sorry, I'm sorry.
Charles Max_Wood:
where, you know,
Valentino_Stoll:
I'm sorry, I'm sorry.
Charles Max_Wood:
different characters with different
Valentino_Stoll:
I'm sorry, I'm sorry.
Charles Max_Wood:
investitures,
Valentino_Stoll:
I'm sorry, I'm sorry.
Charles Max_Wood:
right? From the different shards. I could go on and on about the Cosmere, but there's gonna be crossovers and you're gonna see some of your favorite characters crossover. And I'm kind of wondering in the Lost Metal, and this may be a spoiler. I haven't read it yet. So
Valentino_Stoll:
I'm sorry, I'm sorry.
Charles Max_Wood:
it's a theory right now.
Valentino_Stoll:
I'm sorry, I'm sorry.
Charles Max_Wood:
But if you read,
Valentino_Stoll:
I'm sorry, I'm sorry.
Charles Max_Wood:
he has a series of short stories called Arcanum
Valentino_Stoll:
I'm sorry, I'm sorry.
Charles Max_Wood:
Unbound. And
Valentino_Stoll:
I'm sorry, I'm sorry.
Charles Max_Wood:
it basically one of the
Valentino_Stoll:
I'm sorry, I'm sorry.
Charles Max_Wood:
stories is when Kelsier gets
Valentino_Stoll:
I'm sorry, I'm sorry.
Charles Max_Wood:
killed in Mistborn. I'm sorry, these
Valentino_Stoll:
I'm sorry, I'm sorry.
Charles Max_Wood:
books came out so long ago that I don't care about spoilers
Valentino_Stoll:
I'm sorry, I'm sorry.
Charles Max_Wood:
anymore. When
Valentino_Stoll:
I'm sorry, I'm sorry.
Charles Max_Wood:
he gets killed, his
Valentino_Stoll:
I'm sorry, I'm sorry.
Charles Max_Wood:
spirit kind of moves on and they're,
Valentino_Stoll:
I'm sorry, I'm sorry.
Charles Max_Wood:
you know, they move
Valentino_Stoll:
I'm sorry, I'm sorry. I'm sorry, I'm sorry.
Charles Max_Wood:
through different realms to get there. But when he did it, he kind of deviated and he absorbed the preservation shard.
Valentino_Stoll:
Yn ystod y cyfle, mae'r cyfle wedi'i ddod yn ystod y cyfle.
Charles Max_Wood:
by doing that he basically unchained himself
Valentino_Stoll:
Mae'r cyfle wedi'i ddod yn ystod y cyfle.
Charles Max_Wood:
from the natural progression after you pass
Valentino_Stoll:
Mae'r cyfle wedi'i ddod yn ystod y cyfle.
Charles Max_Wood:
on and Brandon Sanderson
Valentino_Stoll:
Mae'r cyfle wedi'i ddod yn ystod y cyfle.
Charles Max_Wood:
has basically said that Kelsier is gonna come back somehow
Valentino_Stoll:
Mae'r cyfle wedi'i ddod yn ystod y cyfle.
Charles Max_Wood:
and So I'm wondering if in the lost metal
Valentino_Stoll:
Mae'r cyfle wedi'i ddod yn ystod y cyfle.
Charles Max_Wood:
There's something that allows
Valentino_Stoll:
Mae'r cyfle wedi'i ddod yn ystod y cyfle.
Charles Max_Wood:
him to come back. I also have a theory that
Valentino_Stoll:
Mae'r cyfle wedi'i ddod yn ystod y cyfle.
Charles Max_Wood:
The the Chandra that you know absorbs his
Valentino_Stoll:
Mae'r cyfle wedi'i ddod yn ystod y cyfle.
Charles Max_Wood:
bones and you know kind of reconstructs bring on the revolution in the in the Mistborn books. I'm totally going,
Valentino_Stoll:
Yn ystod y cyfle, mae'r cyfle wedi'i ddod yn ystod y cyfle.
Charles Max_Wood:
I love this stuff, but I think that's gonna be a thing, right? Where the Chandra
Valentino_Stoll:
Mae'r cyfle wedi'i ddod yn ystod y cyfle.
Charles Max_Wood:
basically reconstructs his body and then there's some way that he can
Valentino_Stoll:
Mae'r cyfle wedi'i ddod yn ystod y cyfle.
Charles Max_Wood:
re-inhabit it. But anyway,
Valentino_Stoll:
Mae'r cyfle wedi'i ddod yn ystod y cyfle.
Charles Max_Wood:
so that's me spitballing on this stuff, but I love,
Valentino_Stoll:
Mae'r cyfle wedi'i ddod yn ystod y cyfle.
Charles Max_Wood:
I really love these books. There are a whole bunch of them and
Valentino_Stoll:
Mae'r cyfle wedi'i ddod yn ystod y cyfle.
Charles Max_Wood:
Brandon Sanderson's actually been recruiting people
Valentino_Stoll:
Mae'r cyfle wedi'i ddod yn ystod y cyfle.
Charles Max_Wood:
to co-author some of the books to
Valentino_Stoll:
Mae'r cyfle wedi'i ddod yn ystod y cyfle.
Charles Max_Wood:
So
Valentino_Stoll:
Mae'r cyfle wedi'i ddod yn ystod y cyfle.
Charles Max_Wood:
you'll see this in some of his series where it's written by Brandon Sanderson and somebody
Valentino_Stoll:
Yn ystod y cyfle, mae'r cyfle wedi'i ddod yn ystod y cyfle.
Charles Max_Wood:
else. And he just consults on the book and makes sure that
Valentino_Stoll:
Mae'r cyfle wedi'i ddod yn ystod y cyfle.
Charles Max_Wood:
the style matches and stuff like that. So anyway,
Valentino_Stoll:
Mae'r cyfle wedi'i ddod yn ystod y cyfle.
Charles Max_Wood:
I'm excited for The Lost Metal. I've been reading Mistborn.
Valentino_Stoll:
Mae'r cyfle wedi'i ddod yn ystod y cyfle.
Charles Max_Wood:
They are terrific books. If you haven't read them, I'm sorry I
Valentino_Stoll:
Mae'r cyfle wedi'i ddod yn ystod y cyfle.
Charles Max_Wood:
spoiled some of it for you, but
Valentino_Stoll:
Mae'r cyfle wedi'i ddod yn ystod y cyfle.
Charles Max_Wood:
it's so good. And the first book's a heist
Valentino_Stoll:
Mae'r cyfle wedi'i ddod yn ystod y cyfle.
Charles Max_Wood:
book, which is, anyway.
Valentino_Stoll:
Mae'r cyfle wedi'i ddod yn ystod y cyfle.
Charles Max_Wood:
Those are my picks. I went
Valentino_Stoll:
Mae'r cyfle wedi'i ddod yn ystod y cyfle.
Charles Max_Wood:
on and on and on, but those are my picks. Brett, what are your picks?
Brett_Chalupa:
My picks are
Valentino_Stoll:
I'm sorry, I'm sorry.
Brett_Chalupa:
game related. I figured
Valentino_Stoll:
I'm sorry, I'm sorry.
Brett_Chalupa:
two of them are and one isn't. We'll start with the one that isn't.
Valentino_Stoll:
I'm sorry, I'm sorry.
Brett_Chalupa:
I've been reading I Have the Christie's
Valentino_Stoll:
I'm sorry, I'm sorry.
Brett_Chalupa:
Mortar on the Orient Express.
Valentino_Stoll:
I'm sorry, I'm sorry.
Brett_Chalupa:
And I think
Charles Max_Wood:
Oh
Brett_Chalupa:
I
Charles Max_Wood:
nice.
Brett_Chalupa:
Have
Valentino_Stoll:
I'm sorry, I'm sorry.
Brett_Chalupa:
the Christie. She's just amazing.
Valentino_Stoll:
I'm sorry, I'm sorry.
Brett_Chalupa:
Like they flow
Valentino_Stoll:
I'm sorry, I'm sorry.
Brett_Chalupa:
so well. It's,
Valentino_Stoll:
I'm sorry, I'm sorry.
Brett_Chalupa:
I'm
Valentino_Stoll:
I'm sorry, I'm sorry. I'm sorry, I'm sorry. I'm sorry, I'm sorry. I'm sorry, I'm sorry. I'm sorry, I'm sorry.
Brett_Chalupa:
enraptured. I don't know what's gonna happen because I haven't read it before. I haven't seen the movies or anything.
Valentino_Stoll:
I'm sorry, I'm sorry.
Brett_Chalupa:
So yeah, I'm loving that.
Valentino_Stoll:
I'm sorry, I'm sorry.
Brett_Chalupa:
I didn't know that M.Dot
Valentino_Stoll:
I'm sorry, I'm sorry. I'm sorry, I'm sorry.
Brett_Chalupa:
Monsieur? I thought every
Valentino_Stoll:
I'm sorry, I'm sorry.
Brett_Chalupa:
single character's name started
Valentino_Stoll:
I'm sorry, I'm sorry.
Brett_Chalupa:
with M. It's like,
Valentino_Stoll:
I'm sorry, I'm sorry.
Brett_Chalupa:
why is this
Valentino_Stoll:
I'm sorry, I'm sorry. I'm sorry, I'm sorry. I'm sorry, I'm sorry. I'm sorry, I'm sorry. I'm sorry, I'm sorry. I'm sorry, I'm sorry. I'm sorry, I'm sorry.
Brett_Chalupa:
author naming everyone M? Like, this is out of control. And then I did some research and realized that it's not that. So, just a tip, if you do read it, not every single character's name starts with M.
Charles Max_Wood:
I've made worse assumptions reading books, so you're good.
Brett_Chalupa:
I wanna recommend a book called How to Make a Video Game All
Valentino_Stoll:
I'm sorry, I'm sorry.
Brett_Chalupa:
by Yourself. It's a very clear book
Valentino_Stoll:
I'm sorry, I'm sorry.
Brett_Chalupa:
based on the title about what it is.
Valentino_Stoll:
I'm sorry, I'm sorry.
Brett_Chalupa:
It's by this author, Matt Hackett.
Valentino_Stoll:
I'm sorry, I'm sorry.
Brett_Chalupa:
You can go and order a print
Valentino_Stoll:
I'm sorry, I'm sorry.
Brett_Chalupa:
copy or read it from Kindle.
Valentino_Stoll:
I'm sorry, I'm sorry.
Brett_Chalupa:
I read this book
Valentino_Stoll:
I'm sorry, I'm sorry.
Brett_Chalupa:
in the hospital after
Valentino_Stoll:
I'm sorry, I'm sorry.
Brett_Chalupa:
my baby was born when I couldn't
Valentino_Stoll:
I'm sorry, I'm sorry.
Brett_Chalupa:
sleep and I just devoured it.
Valentino_Stoll:
I'm sorry, I'm sorry.
Brett_Chalupa:
It's like the kindling
Valentino_Stoll:
I'm sorry, I'm sorry. I'm sorry, I'm sorry. I'm sorry, I'm sorry. I'm sorry, I'm sorry.
Brett_Chalupa:
that lit this flame of
Valentino_Stoll:
you
Brett_Chalupa:
what I'm currently interested in working on. So that's how to make a video game
Valentino_Stoll:
I'm sorry, I'm sorry.
Brett_Chalupa:
yourself. It's really wonderful
Valentino_Stoll:
I'm sorry, I'm sorry.
Brett_Chalupa:
and gets you in the
Valentino_Stoll:
I'm sorry, I'm sorry.
Brett_Chalupa:
mindset of how to go about
Valentino_Stoll:
I'm sorry, I'm sorry.
Brett_Chalupa:
this without talking about
Valentino_Stoll:
I'm sorry, I'm sorry.
Brett_Chalupa:
code. So it's for,
Valentino_Stoll:
I'm sorry, I'm sorry.
Brett_Chalupa:
you know,
Valentino_Stoll:
I'm sorry, I'm sorry. I'm sorry, I'm sorry. I'm sorry, I'm sorry. I'm sorry, I'm sorry. I'm sorry, I'm sorry. I'm sorry, I'm sorry. I'm sorry, I'm sorry. I'm sorry, I'm sorry.
Brett_Chalupa:
it's like a vibe and a mindset and a feeling that it's trying to
Valentino_Stoll:
I'm sorry, I'm sorry.
Brett_Chalupa:
get you focused. So I love that book.
Valentino_Stoll:
I'm sorry, I'm sorry.
Charles Max_Wood:
Mm-hmm.
Brett_Chalupa:
And then my third pick
Valentino_Stoll:
I'm sorry, I'm sorry.
Brett_Chalupa:
is the monthly game club game
Valentino_Stoll:
I'm sorry, I'm sorry.
Brett_Chalupa:
from the Dragon Ruby community that we're
Valentino_Stoll:
I'm sorry, I'm sorry.
Brett_Chalupa:
playing. It's called
Valentino_Stoll:
I'm sorry, I'm sorry. I'm sorry, I'm sorry. I'm sorry, I'm sorry.
Brett_Chalupa:
a tongue full of a name, but the
Valentino_Stoll:
I'm sorry, I'm sorry.
Brett_Chalupa:
Momodoro series is like,
Valentino_Stoll:
I'm sorry, I'm sorry.
Brett_Chalupa:
imagine like
Valentino_Stoll:
I'm sorry, I'm sorry. I'm sorry, I'm sorry. I'm sorry, I'm sorry. I'm sorry, I'm sorry.
Brett_Chalupa:
old Metroid and
Valentino_Stoll:
Yn ystod y cyfle, mae'r cyfle wedi'i ddod yn ystod y cyfle.
Brett_Chalupa:
Castlevania games and kind of like Mega Man-ish.
Valentino_Stoll:
Mae'r cyfle wedi'i ddod yn ystod y cyfle.
Brett_Chalupa:
It's an action 2D platformer, pixel art. It's really beautiful
Valentino_Stoll:
Mae'r cyfle wedi'i ddod yn ystod y cyfle.
Brett_Chalupa:
and
Valentino_Stoll:
Mae'r cyfle wedi'i ddod yn ystod y cyfle. Mae'r cyfle wedi'i ddod yn ystod y cyfle. Mae'r cyfle wedi'i ddod yn ystod y cyfle. Mae'r cyfle wedi'i ddod yn ystod y cyfle.
Brett_Chalupa:
really been enjoying it. It's a little tough, but it has amazing art too. And it's from around 2015. So it's a modern retro inspired
Valentino_Stoll:
I'm sorry, I'm sorry.
Brett_Chalupa:
game. And
Valentino_Stoll:
I'm sorry, I'm sorry.
Brett_Chalupa:
my favorite thing about it is
Valentino_Stoll:
I'm sorry, I'm sorry.
Brett_Chalupa:
that as I'm playing it,
Valentino_Stoll:
I'm sorry, I'm sorry.
Brett_Chalupa:
I go, oh,
Valentino_Stoll:
I'm sorry, I'm sorry.
Brett_Chalupa:
I need to know how to do that. I'm gonna
Valentino_Stoll:
I'm sorry, I'm sorry.
Brett_Chalupa:
take that and I'm gonna put that in my game.
Valentino_Stoll:
I'm sorry, I'm sorry.
Brett_Chalupa:
Oh,
Valentino_Stoll:
I'm sorry, I'm sorry. I'm sorry, I'm sorry. I'm sorry, I'm sorry. I'm sorry, I'm sorry. I'm sorry, I'm sorry. I'm sorry, I'm sorry. I'm sorry, I'm sorry.
Brett_Chalupa:
it's not too far advanced from what I can do, right? Like if you go and play the new God of War game or whatever, you know, huge AAA 3D game that exists, I don't know how to do any of that stuff. Maybe I could kind of figure it out and hand wave explain it, but when I play 2D games, games, modern 2D games, I go, oh, I see how the systems are working. And I think I know how I could code that.
Valentino_Stoll:
I'm sorry, I'm sorry.
Brett_Chalupa:
And that's just like a
Valentino_Stoll:
I'm sorry, I'm sorry.
Brett_Chalupa:
really amazing feeling to have
Valentino_Stoll:
I'm sorry, I'm sorry.
Brett_Chalupa:
that be within reach and have fun
Valentino_Stoll:
I'm sorry, I'm sorry.
Brett_Chalupa:
playing it. And this is
Valentino_Stoll:
I'm sorry, I'm sorry.
Brett_Chalupa:
a little thing, but it's like one of the
Valentino_Stoll:
I'm sorry, I'm sorry.
Brett_Chalupa:
special parts about game
Valentino_Stoll:
I'm sorry, I'm sorry.
Brett_Chalupa:
development and game feel is that
Valentino_Stoll:
I'm sorry, I'm sorry.
Brett_Chalupa:
you're running around, you're jumping, you're exploring,
Valentino_Stoll:
I'm sorry, I'm sorry. I'm sorry, I'm sorry. I'm sorry, I'm sorry. I'm sorry, I'm sorry. I'm sorry, I'm sorry. I'm sorry, I'm sorry.
Brett_Chalupa:
and then you go into this new section of the map and there's this huge enemy that's stomping on the ground and it shakes the controller just a little
Valentino_Stoll:
I'm sorry, I'm sorry.
Brett_Chalupa:
bit. adds to that intimidation
Valentino_Stoll:
I'm sorry, I'm sorry.
Brett_Chalupa:
factor that
Valentino_Stoll:
I'm sorry, I'm sorry.
Brett_Chalupa:
I love in games
Valentino_Stoll:
I'm sorry, I'm sorry.
Brett_Chalupa:
where, like,
Valentino_Stoll:
I'm sorry, I'm sorry.
Brett_Chalupa:
who would think that just this little
Valentino_Stoll:
I'm sorry, I'm sorry.
Brett_Chalupa:
motor inside of a thing vibrating,
Valentino_Stoll:
I'm sorry, I'm sorry.
Brett_Chalupa:
you know, could fill you with dread,
Valentino_Stoll:
I'm sorry, I'm sorry.
Brett_Chalupa:
but when you have, when nothing
Valentino_Stoll:
I'm sorry, I'm sorry.
Brett_Chalupa:
else
Valentino_Stoll:
I'm sorry, I'm sorry. I'm sorry, I'm sorry. I'm sorry, I'm sorry. I'm sorry, I'm sorry. I'm sorry, I'm sorry.
Brett_Chalupa:
vibrates and then you have this enemy that, you know, shakes the controller, you're just, it's like, that's the good stuff in games. I really, really love those moments and feelings. So that's Momodoro, Reverie Under the Moonlight. Those are my picks.
Charles Max_Wood:
Awesome. All right, so I didn't ask this
Valentino_Stoll:
I'd like
Charles Max_Wood:
before.
Valentino_Stoll:
to add one more pick.
Charles Max_Wood:
Oh, go ahead.
Valentino_Stoll:
Your story reminded me of this video short on why props matter. And they go through a list of very popular movies and different props in the movies and keeping the story just very riveting. And it's a really great short. I recommend it.
Charles Max_Wood:
Awesome. So people want to connect with you somehow, Brett. Where do they find you?
Brett_Chalupa:
Yeah, you can go to my website. It's www.bretchalupa.com. And there you'll find my newsletter where I send out emails about what I'm working on, what I'm learning, things I finished. I've got a blog there that I'm working on updating more. And that also links out to a Mastodon, which Mastodon is like, I'll tell you the server I'm on if I can remember it. It's gamedev.place. You can find me there. I'm BrettMakesGames on there. And I just post updates about what I'm working on. And yeah, github.com slash BrettShalupa. If you're interested in the coding aspects, I really try to open source everything that I work on that isn't like... You know, like I can imagine I'll work on a bigger game or something that is a commercial project that I don't open source, but for now for freeware and learning, everything is just there and, um, love, love sharing code there and, uh, contributing stuff there.
Charles Max_Wood:
Awesome. All right, well, let's go ahead and wrap it up here. Thanks for coming, Brett. This was a lot of fun.
Brett_Chalupa:
Yeah, thank
Charles Max_Wood:
And
Brett_Chalupa:
you for having me. This was a blast.
Valentino_Stoll:
Yeah,
Charles Max_Wood:
yeah,
Valentino_Stoll:
it was super
Charles Max_Wood:
till next
Valentino_Stoll:
fun.
Charles Max_Wood:
time, folks. Max out. me.