Programming Throwdown - 168: Godot
Episode Date: November 20, 2023Intro topic: What are expectations on developers that have nothing to do with programmingNews/Links:Pushing for a lower dev estimate is like negotiating weather with a Meteorologisthttps://sm...artguess.is/blog/your-estimate-is-less-than-that/Announcing python in excelhttps://techcommunity.microsoft.com/t5/excel-blog/announcing-python-in-excel-combining-the-power-of-python-and-the/ba-p/38934397 Habits of Highly Effective Software Engineershttps://makingsmallercircles.com/articles/7-habits-of-highly-effective-software-engineers/Raspberry pi 5 begins shippinghttps://www.phoronix.com/news/Raspberry-Pi-5-ShippingBook of the ShowPatrick:Harry Potter and the Sorcerer's Stone Illustrated Editionhttps://amzn.to/3St3L35Jason: The Pete and Sebastian Showhttps://podcasts.apple.com/us/podcast/the-pete-and-sebastian-show/id570256898Patreon Plug https://www.patreon.com/programmingthrowdown?ty=hTool of the ShowPatrick: Obsidianobsidian.mdJason:Ink by Inklehttps://github.com/inkle/inkTopic: GodotWhat is a game engine?Graphics, animation, particle effectsTilemapsEntity component systemsPhysicsSoundI/OInput handling (touchscreen, joystick)GDScriptWhy use a game engine?PortabilityAllow for testing individual components of the gameLibraries for ads, in-app-purchasesGodotOpen sourceFocused on 2-D but now many 3-D featuresGreat development environmentAI HeroStarted in phaser (development rut)Moved to Godot, rapid prototyping ★ Support this podcast on Patreon ★
Transcript
Discussion (0)
programming throwdown episode 168 good oh take it away patrick welcome everyone uh starting with a bit of a uh a rant is that i
don't know man it's so negative i have something to rant about we have a cup a pair of rants
oh okay is there a word for that you know there's like a flock of geese is there a word for
a gaggle of rants okay all right going to buy right so one of the things that has been like a recurring theme
and it feels like it's getting worse now i guess like to set the context if this is your
uh first first episode with us you maybe you don't know but i'm i don't know how you would call the
like role of software i do so maybe it's particular to the kinds of software i do but it's
it's been persistent so it's some combination of embedded application engineering maybe web is a bit better
i don't know um but maybe back end is pretty similar and that is the number of things you're
expected to know how to do on a computer that really don't have anything to do with programming
but you're just like you're supposed to know how to take care of it like just
random things not just the kind of slightly strange things like you need to know how to set
up your computer like plug in the keyboard and mouse and you know monitor not admittedly these
things aren't hard and most of us know how to do them but like this isn't really related to
programming like you could not know how to swap hard drives on your computer install new ram but
occasionally someone the other day had a hard drive you know crap out and and so the it person just like sent them a new hard drive in the
internal mail and like here installed a new hard drive or whatever now people i mean that is not
common okay i mean weird right but like you wouldn't be also surprised that a programmer
was expected to know like how to install their own hard drive like because it's i guess it's part of
my rant it's just par for the course weird for you know the company or whatever but just you know
not that but like you know dealing with errors in your operating system um you know finagling
issues about network connectivity uh even if you don't develop a software that has anything to do
with you know sockets and you know ip connections and just any of that stuff, you're still expected to know how to debug that at some some level and kind of
figure it out. And then also things about just like setting up your develop environment, right?
Like having your ID ID set up properly and getting all of the compilers working and all of that.
There's no just like, sit down and here's a text box. And your sort of expectation is to just,
you know, type in the program and i guess
that's true with a lot of jobs there's like lots of extra stuff you need to know um but but it gets
really esoteric so i develop in c++ which is especially bad so just the amount of like how to
get your systems libraries installed correctly so they can be accessed but the same is true
python even when using pip or virtual
environment or whatever like you still have issues with like conflicting packages and package managers
and linux stuff so it's not sufficient to just you know most people would know windows or mac os but
probably need to know linux you know and how to debug various issues when you mess something up
in one of your paths and you know how to have your profile set up and so anyways
my rant is just becoming like there's some stuff for like fixing this and virtual development
environments but they're not here yet and i guess i would say they can't come soon enough
yeah i mean a couple of things there one we have this wiki page for it's called landing your first
pull request and it's a freaking enormous like there's just
like an insane amount of things you have to do um we have a github bot that actually merges
all the pull requests like you don't actually merge them yourself and so yeah you have to like
you know run all the unit tests and then run lint, and there's a billion different kinds of Lint.
There's MyPy, and then there's Flake,
which both, I guess, check different things.
They're not totally overlapping.
And then there's all these other things.
As you said, there's the pip dependencies,
making sure that's all okay.
And then to your point,
do this wacky thing where everything runs in
a Docker container.
Like you actually can't run anything on your own computer because as you said, you don't
have any of the libraries or anything.
So, so everything has to run inside this Docker container, which is kind of painful.
If you need to use GDB, you know, or any type of debugger, you have to do this remote GDB or you TCP into your own computer.
It's just weird.
But yeah, I mean, it's like a huge laundry list of stuff.
And none of it has anything to do with the code that you wrote.
That entire document, you could just be adding a semicolon and you have to go through that whole thing.
The other part of it is, I think in general, just stepping back a bit, there's just enormous cognitive overhead that there wasn't before.
I was thinking about travel agents and how you'd have a travel agent kind of book everything for you and find the right
flight and all of that um now travel agents are even before our time really i mean i actually
never used one but um but now you know you have to do all that yourself and and you know the search
and retrieval is really good so that you know normal normies normal people like us could do it at all but um but still it's like
cognitive overhead that you didn't have before and uh you know i think the same thing with the bank
and you have an issue with your amazon package or something it's just there's an extraordinary
amount of cognitive overhead and i think as a programmer it also just seems to keep increasing
the amount of things that you have to do i was watching some movie the
other day i don't even remember what movie it was and it was just one of the funny standout things
was the person wanted to fly somewhere so they drove to the airport to go inside the airport
to book a ticket they weren't flying they just like went to the airport for the purpose of like
talking to a booking agent and booking a ticket and it was like oh i yeah i guess that makes sense
like people did that like that you
know or like you said you phoned up someone or phoned up uh yeah you know and i think that
happened to me the other day we were trying to book something online it was having a glitch and
we had to like talk to a person and like do it verbally and they were reciting back to us like
the various times and it was just like oh man this is yeah in some ways it's lots better but
as you pointed out like the number of
tyranny of choice i guess like the number of things right from and the number and it just like everything becomes an analytical decision and yeah it's yeah i mean to riffing off your
point you know i i i've never had a company send me a hard drive or anything like that but i did
have a hardware failure um uh yesterday it was really weird i was on my computer
and this is my personal computer um and then all of a sudden like steam was updating some
game in the background and i was i was coding something up um i was actually working on
which we should talk about at some point. But I was bringing that back.
And all of a sudden, like, I look and I see, oh, Steam is updating some game.
And it's been updating for almost the entire day.
Uh-oh.
And basically, you know, it's like a ton of triage.
What I found out was my hard drive was only reading and writing at 800 kilobytes a second.
And I was immediately yeah i was thinking oh man i'm gonna lose this hard drive you know and i just bought it and it has all my stuff on it and you
know i started getting kind of nervous um but then i was like you know the i ran all the smart tests
and diagnostics everything everything came back fine it's just nothing would actually finish like scanning the drive i thought maybe i needed to free up space but i didn't um and it turns out
the sata cable was bad it went bad oh and i've basically been using the same sata cables for
probably 15 years or something just because i keep you know when i get new ones they just go in a box
and i just already have the other one plugged in a drive and i change it i'm not changing the drive and the
seda cable at the same time really ever um so yeah i just swapped out the seda cable but it was
definitely it kind of scared me and to your point like like you know i don't know like we have to
fix these things ourselves i don't really know like who i would even i don't know like we have to fix these things ourselves i don't really know like who i would
even i don't think geek squad will come and go look at this homebrew machine that's i mean they
will but they'll also do 100 other things you didn't want yeah that's right i'll never like
five copies of norton antivirus or something uh yeah the other one i'll drop just here for anyone
who runs into it hdmi cables are not all the same so over the years if you're still using a really old hdmi cable it may not be able to like support the proper bandwidth if you're
trying to like you know do 4k blu-rays or something it's just something i was unaware of but
really i didn't know that yeah wow how do you know is it is it printed on the cable or anything
that's a great question to try it you just buy the one that has the bandwidth you want and use it.
Well, you know, that's the advantage of us being our own geek squad is like, you know,
if something doesn't work, you know, we can order a cable and it's only eight bucks.
And it's like still a tiny fraction of the cost of getting someone to come to your house.
So like if you order the cable cable it's wrong it's like
well i have an upgraded cable now and i can keep debugging and then you end up with the uh the box
of cables that every geek has in the closet which is just i have it and actually folks at home you
know we stopped doing video because uh we felt like we had to you know get all prettied up and
everything so we stopped doing that but but folks at home can't see the giant box of cables that patrick can see in the background um oh
another thing that happened to me last week so i went through a period where i was ordering a ton
of stuff from aliexpress and these these like straight from china things and uh slowly slowly
it's like come to be just a terrible investment.
And this is really the capstone on it. I have a Raspberry Pi 4. And I bought this
thing that could control multiple servos because every year my Halloween scare bot just gets more
and more extreme. And so it's at the point now where I needed something to control a bunch of servos. So there's this little I2C module communicates over I2C controls a bunch
of servos. And the way it works is you connect the I2C pins to the Raspberry Pi, you connect
the 3.3 volts to the Raspberry Pi, and that powers the board and sends all the signals.
And then separately in the servo controller,
you connect like a power supply, right?
To power these servos.
Because servos use way more electricity than the whole Raspberry Pi, right?
So even one of them probably does.
So I set it all up.
It looks all correct.
One thing that was kind of a tip-off was my power supply was saying
it was plugged in when it wasn't that should have been a tip-off that something bad was going to
happen so but but being an idiot i i plugged it in anyways and smoke started coming out of the
raspberry pi and the raspberry pi got completely nuked um the the
the sd card burnt my finger when i popped it out and uh i was so so mad you know first i was
thought what did i do and i'm looking at everything and it looks fine and then you know i get the
multimeter and it turns out this is shorted and it's just a bad component that i that i got you know as cheap as possible trying to save i i saved
two dollars off what it would cost on amazon and i fried like 120 bucks worth of equipment
um and i was so freaking mad unbelievably mad. But what can you do, man?
I just had to throw the raspberry pie in the garbage
and get another one and move on.
Yeah, I guess there's a tip there too,
just for people who want to play with that kind of stuff.
Well, first of all, there's a high potential
the stuff you would have bought at Amazon
would have been exactly the same,
just like pre-labeled.
But the second thing is do not plug things
you get like that for the first time into
your computer usb port for for basically the same reason so if you have some usb powered device or
whatever you get off like get uh what do you i don't know what you call that like the one that
like a wall wart or something else like a splitter uh no like uh don't like even if it needs data
right like you need to like like a thumb drive or whatever right
so a thumb drive could have a short the same way but if you at least plug it into something that
isn't going to like an old computer or something that isn't like your nice computer because if you
have a short in it but you know like usb drives are just a little different but i'm thinking like
one of these dev boards or something you soldered up and you accidentally you know solder across it
plug it into something that will basically like you're okay losing rather than your computer computer one because
yeah the same thing can happen and then you'll fry your usb port or even your motherboard it's
bad days yep yep and this is the this is the second time something like this has happened to
me and and uh the first time was my fault first First time was totally my fault. This time is not my fault, but, but the one telltale sign is if things have power that
shouldn't, that was sort of the common denominator. It's like this, this thing is not yet plugged in
the wall and the light is on and I'm getting a voltage reading on it. That's all you're only
supposed to get when it's plugged into the wall like that right there if you ever see something on that shouldn't be on um yeah i told the story
years ago but in my first project i did it on a metal bench and uh shorted everything i mean that
was incredibly dumb but but you know the sign there was you know that the lights were still on
and i hadn't plugged it in yet so that's the
thing to look for free power yeah i mean i thought that i had a scarabot and a perpetual energy
machine what i actually had was just accurate smoke yeah all right is it time for our news of
the show let's do it what's your news all right so my first one well i guess these are mostly links
i don't think we have any news i guess i have a little bit of news so my first one is a blog uh
this is smartguess.is um anyways and it's talking about software estimates which are notoriously
very difficult i i don't even think it's a junior senior thing i think it's just
very difficult i'm thankful that i'm not in a high stakes software negotiating like
dev estimate
thing because i just i can't imagine but they were kind of making analogy that it's like negotiating
with a meteorologist um there's some caveats i immediately sort of got the content i like read
it to make sure you know like but just reading that it was one of those ones like just reading
the headline was enough for me to derive like lots of value and smile from it then the person
is talking about accurately so
like if you you're keeping all the bounds the same like keeping the requirements the same and all of
this like the estimate is the estimate to ask the estimate to be lower is is is just like making the
you know just making your stuff come late or you know becoming a problem and no one fusses when
you come in too low they only fuss if you come in too high so there's always this pressure to
come in faster and shorter um and you know that's that's just kind of, it's kind of silly.
I know you could change the requirements, you can split things up, you could reassign new people or
more people. I mean, those things are, they're all possible. But in general, yeah, like the
estimate is the estimate for the, you know, kind of statement of work. And so trying to negotiate
with it just doesn't work. But you know as i've as i've
become more and more of a person you know trying to work with others i i will say i do find that
sometimes people give me very very low estimates and i tried to tell them in general don't don't
and someone in someone was reading some commentary about about this this post as well this one was
pointing out correctly that uh programmers naively
think they're going to have like their high output like peak output for how long would it take to
solve this problem at peak output but then we forget is how much of the day are you actually
at peak output you know are you have to go to meetings you're getting interrupted you're helping
code review other people's stuff so there's this balance between like yeah focused time it's this
amount of hours but you're not going to have all focused time and additionally you kind of often
need to estimate calendar time and your calendar time you know you have a lot less than you think
yeah i mean the thing where i'm really struggling here right now is is is this idea that that folks
are much more like people really overestimate how fungible,
I don't know if that's the right word,
but like, so for example,
you talked about doing embedding and web and all of that.
Very few people have that union of skills.
And so if there's somebody who really knows embedded DSP
and you're behind schedule on
the website, you'll hear folks say, oh, just add this person to the website to get it done
faster.
And then it just never works out well because it's just for so many reasons.
I mean, one, the person doesn't want to build a website.
They want to keep doing their DSP work.
Two, it's like that person has to now get trained in that other skill, which takes time. And it might be a good thing to do, but it's definitely not going to accelerate the schedule.
And so I think this is like a problem of we're in this sort of in-between phase where everyone's still called a software engineer at a lot of companies.
But I feel like that will probably change if it hasn't already.
But yeah, that's another problem.
It's like, we have eight people.
Just put all eight people on this thing and it'll get done.
It's like, well, it doesn't really work that way.
My news story is announcing python in excel so you know we are predictors of the future patrick
we're basically we're basically amazing so we talked about excel months ago two or three months
ago and talked about how it would uh be awesome if you could do python or these other things in
excel sure enough microsoft they must have been listening to Programming Throwdown.
They announced Python in Excel.
And actually, Guido is the first place I heard it from.
He posted about it on Twitter, but it had also been on the news and everything.
And it's pretty awesome.
I think the way it works is it spins up and sort of like a ephemeral virtual environment to execute this is a great way to get um you know python in
the hands of millions and millions of people who up until now probably never even heard about it
and i guess the reverse for people who know how to do python to not be frustrated with i don't
understand how to get this excel function to do what i want yeah that's true it's true if you need to you know do like some real advanced stat stuff you
need sci-pi but you know you don't have any easy way to get an excel i wonder you know all those
companies that do kind of excel python like there's one i think it's called xbb but there's
these uh excel you know python bindings
that they sell commercially those people are probably not happy with this news but i mean i
think for the overall uh community it's a huge win if you've not watched it i just i was watching it
the other day because i was trying to do something with pivot tables don't ask anyways uh there's a
there's a i i don't know what to say famous
there's a classic so joel spolsky i think he used to be at microsoft originally founded fog
creek software like i feel like a few years ago i don't hear that much about him anymore but i feel
like he was one of the sort of uh he had a big blog it was at joel joel on software i think yeah
that's right joel yeah and he would he was like one like pushing for like developer productivity
and like you know getting nice chairs and more monitors and like you he was like one like pushing for like developer productivity and like you know
getting nice chairs and more monitors and like you know basically like treat your engineers you
know kind of nice at a time when uh maybe that wasn't as common or i don't say wasn't uh it
happens more now than it used to uh and i feel like he was one of the the people that pushed
for that anyways he has a youtube video you can kind of search it you suck at excel and uh he
sort of shows that actually like you can do a lot with Excel, like pivot tables, or almost, there's some VC people who
say this is like, every so often, you know, I forget what the cadence is, that basically,
someone shows up with a startup that is basically could be solved with just a pivot table in Excel.
And so, you know, most people underestimate just how much you can do uh with just pasting all
your data and and you know running the functions on it yeah totally totally um so yeah folks
definitely check that out and uh report back if you're using it let us know how you're using it
yeah i want to see i guess i saw i need it needs to be eminently googleable when i want to solve
something someone to put like here here's the Python here.
Yeah.
Here's the like 80% solution.
Yeah,
that's right.
There's been a lot of discord in our discord.
So,
uh,
folks have been very active in discord,
which is really cool.
So,
you know,
generally we always say email us,
emails,
emails,
but,
but,
uh,
you can also go on the discord and there's a whole community of people there,
which is pretty neat.
We're not discourse, there's discourse on Discord.
Oh, you're right.
Discord would be like disagreement, right?
Oh no.
There's harmony in Discord.
My next article is
Seven Habits of Highly Effective Software Engineers.
This is at the blog, makings dot com uh and this is oh i don't i don't know it's one of those kind
of like classic corporate things if you ever like if you're if you had a big company and they offer
like sort of self-betterment training you'll get the seven habits of highly effective people
and it's things you know i don't know whenever take these, I feel like it's things you kind of know, they're just like putting a catchy name on
it. So like, you know, highly effective people always look for win-win solutions. So don't
compromise, you know, you look for win-win ways for, you know, what the person you're trying to
reach agreement with makes them better and it makes you better. So it's just kind of like things
that I feel are, I don't know, a little a little obvious but you know they're helpful to have a framework and and maybe maybe they're you know good anyways so this
person has seven habits of highly effective software engineers presumably riffing on that
same same thing um i i don't know that i read them or not but but go read them you know the
first one is like actively prototype new ideas and that one really you know sort of resonates with me is uh i feel in general it is difficult
but people sort of are unwilling to just commit to trying kind of like the hard bit well first
identifying the hard bit is not easy but trying to like find some like core hard bit and like just
write a little bit of code and convince yourself that your approach works or that and like maybe
you throw it away maybe you don't but like tell yourself you you know kind of will throw it away you're not trying to get it
right and then you're going to do it again but also you know try to bound it try to make it small
and so i feel like this is one of those uh you know things that that people can miss out so he
has sort of you know documentation about code reviews just getting stuff done so um i feel like
go read that i won't i won't read you all
seven i guess that's a spoiler then then i'll steal traffic so i won't uh so go so go read that
that post yeah i mean the one that really resonates to me right off the bat is a quick
and timely code reviews i remember when i um was engineer i would get so unbelievably frustrated
when you know people would sit on a code review for weeks
um that would just grind my gears more than anything else and you know i i think the reason
why it happens is at least i don't know i don't know if you're like this patrick you might be more
methodical but i go through bursts where there will be like two three weeks where i will just
put an unbelievable amount of
energy into whatever work thing i'm doing and then i'll have a couple of weeks where you know i
honestly like won't work really that hard and it averages out you know so it works out well but
i'm very bursty worker and so when i'm in that you know burst and someone just doesn't review a code well that basically cuts all that energy
short like it's kind of wasted and then you know by the time they review it now i'm like not that
interested in it anymore and so it's just you what you end up with is not making any progress
because of that right um so so that's one thing to recognize is like when you're reviewing that
person just wrote that they're probably like really into it and so you might not be into it but you have to at least
pretend like you're into it for the code review yeah i think the the bursty thing is part of it
i think it works for the code reviewers too like i think i you know try to communicate to people
like schedule time you know at the end of the day or you know before you start your work or
just like something when you're out of focus to go do the code review so that you know like you
said other people aren't kind of blocked and then we also try to establish cultural things like how
long is it like you can start requiring if no one reviews your code within you know two days you
know you can start pinging people and be like hey someone review my code um but don't start pinging
them you know like 30 minutes after you send it in and be like, Hey, because, you know, people
are focused, they're doing stuff or they're at lunch or whatever. Like, you know, that, you know,
you gotta have reasonable, I guess on both sides. Um, but yeah, try to sort of get to them. And
then also, you know, make sure that the team's culture like moves towards the ability to do
code reviews. So not giant, not giant you know 10 000 line changes
that weren't communicated and are like deeply impactful to infrastructure those discussions
should be settled beforehand it is a pet peeve of mine that people try to sort of settle team
strategy decisions in code review it's just it's not good that's not the right place to do it
yeah i mean one thing that took me many years to learn i think i've said on the show before but it's worth repeating is get get really good at
interactive get rebasing and resetting and all of that because you know i would you know and this is
part of the bursty thing you know i would end up with like a 10,000 line code review.
And, you know, I didn't know that there was a way that I could break that apart.
You know, a simple way other than like a really painful thing where I was just, I don't know, copying and pasting from github.com or something. Like I just didn't have the technical fortitude to understand like, okay, here's some interactive way where i can break this
change into like 20 different changes and test each one in isolation so yeah if you find yourself
submitting huge peer reviews don't do that but like but but not just don't do that like learn the
techniques and the technology where you could break that down um all right my next one is raspberry pi 5 begin shipping
um so i uh yeah i have a raspberry pi 5 on back order i have always done this uh ever since
actually i probably learned about raspberry pi from you patrick i feel like you're the only person who would uh who i'd have the raspberry
pie connection with but um but ever since i got onto raspberry pie i've been ordering them when
they came out um and you know it takes forever to get to you but it's the base price you know
that raspberry pie offers you're not getting upcharged by anybody um so mine's coming sometime in december um that's what they say but
uh yeah i ordered it apparently it's way stronger than the four uh in terms of compute um so that'll
be kind of interesting i don't know what i'm going to do with it yet but uh yeah that's tbd
we'll have to figure it out i feel like it's been a little i was mentioning to to the jason
earlier when before when i saw that he you know had this up i feel like it's been so sad to me
that the raspberry pies went from like a really low barrier entry into you know some embedded
stuff to scares and hard to find and it used to be like that when they would first come out but
then they would just be you know pretty ubiquitous but the supply chain thing they just never really sort of hit there
there's like this combination i haven't looked at i think it's a combination of things but um
you know it it's it's sort of unfortunate that it's a little less accessible you can't just go
on amazon and get a reasonably priced one these days um this is you know become very difficult
there's lots of cool things people have been doing and like you mentioned jason like hooking up to the i squared c ports is something
a lot of people if you you know go on news articles or even myself replace them with just
getting older like used enterprise mini pcs which are probably more powerful and they can run windows
and stuff but they don't have all that library for hardware interactivity.
So the embedded stuff is is not really workable there.
If you just need something to be a NAS.
Well, you can probably do pretty, pretty good for yourself not using a Raspberry Pi.
But for all those hardware embedded projects, like it's really it's really the best sort of easy introduction to that.
And it's just, yeah, I'm excited.
The Raspberry Pi, I hope they sort of figure out the shortage.
There's some stuff floating around, too, with these new RISC-V boards or RISC-V.
I don't know actually how you say it, but.
I think it's five.
Yeah.
Is it five?
Okay.
RISC-V boards and stuff too.
So I'm hopeful there'll be more of this like medium embedded space where it's running an
OS, you know, like Linux, but still has this like really nice hardware, I2C, SPI connect a little monitor to it i think that's a it's a great space yeah totally you know
one thing i'm surprised is that unlike um arduino which is just full of uh aftermarket
you know version like you can get an elegoo arduino uno or like there's a million different
companies that are making just following the spec in the case ofduino uno or like there's a million different companies that are making
just following the spec in the case of raspberry pi there's there's really nobody who there's
there's no company producing raspberry pi at least that i know of uh you know much cheaper
i mean i think it's the soc so the the arduino used a pretty ubiquitous chip for its processor it was like a i think a pick
um anyways made by microchip or whatever so it was like a very like common piece but i think the
raspberry pi the like processor which is part of why it was so cheap whatever is this sort of they
did all the integration work but it was a basically relatively hard to get piece and they managed to
negotiate like a good price for it or whatever which is the
actual processor that it's running and so i don't i haven't looked at the five yet but i kind of
assume it's the same thing it's like uh economies of scale and it's like not a ubiquitous piece and
so the combination makes a little hard to to duplicate yeah that makes sense i do also have
an intel knuck which is your mini pc and that's running my nas and all
of that and that is amazing i actually i had some issue where it wouldn't detect my hard drive every
now and then um i updated the bios just as a hail mary before buying another one and just saying
we're done but actually updating the bios fixed it so uh it was a hail mary pass that actually got a touchdown i guess did you try swapping the sata cables
no that would be oh my gosh i broke two sata cables uh this one though the hard drive just
plugs right into the knuck so i think okay um but uh but uh um yeah actually a lot of uh weird really esoteric hardware issues lately
that seems to be the october trend for me but yeah many pcs are amazing highly recommend them
uh really fun they're so cheap now intel was selling them half off for the uh amazon prime
day i don't know what they are now but uh prices are very reasonable
there's also you mentioned aliexpress before i have seen an uptick in the number of like
i don't know we call them like like smaller brands they're just brands you would never
recognize selling kind of like old intel atom um chips or even celerons or um those kinds of
things in that sort of mini pc form factor or even fanless
not really again competing for like the hardware embedded stuff which raspberry pi is again if you
want to do any of that definitely go raspberry pi or arduino um but yeah for that sort of like
nas like home networking kind of stuff yeah there's there's some pretty cool cool options
now and like ones that are like usbc powered and
oh wow you know so yeah pretty cool that's super neat um all right time for book of the show what's
your book patrick oh man you did the good intro and i cut it okay all right my book of the show
is is an old one but i've been i've been going back through it uh you know my kids are getting
old now whatever so so we've been going through the which is harry potter and the sorcerer's stone but the
illustrated edition at some point one of our family members picked this up which is a nice
big book like not thick like you know the harry potter books are thick but this is like wide like
tall and wide which is just a nice form factor and it has just beautiful illustrations in it
uh and so i feel like it's just it's just one of those things you know everyone begs to to be able to see the page instead of instead of just uh just reading it
so i've been really really enjoying that maybe it's a bit of a cop-out but uh that's what i have
reading time's been a little limited so i'm going way in the way back machine to pull up this one
uh but but yeah it doesn't ever recommend it if you if you weren't aware that they have illustrated
editions or if you have you know i guess that that's a there's an xkcd comic about that like how many people are born each year thus
if you say like you know what seven eight nine before you can kind of start getting kids into
harry potter like there's you know millions of kids who sort of coming into it so if you have
one of those in your life wow your own kid or you know somebody you know anyways looking for a gift idea
shout out to this or if you've never read the series yourself i mean i don't think everyone
on earth has read maybe nearly but not everyone so if you've not read it before this is a great
way to to get into that very cool yeah i haven't read the illustrated edition of this but i've read
the illustrated edition of uh terry pratchett by the color of
magic and uh yeah i'd also read the original color of magic yeah the illustrated edition is
amazing it's similar what you said it's a huge it's a very like wide tall book and uh has a lot
of beautiful illustrations it's a lot of fun my book of the show is actually a show of the show. It's the Pete and Sebastian show,
which is another podcast. You know, there's been so much negativity. And I mean, I know this is
almost becoming itself a stereotype, but there's just so much negativity on the news that I just
felt like I needed, you know, something I basically needed something funny, some comedy,
something positive and funny,
and where I knew that they weren't going to talk about the news.
So if you don't want to hear about the news,
you should listen to Programming Throwdown.
But after you've heard Programming Throwdown,
if you still don't want to hear about the news,
you should listen to the Pete and Sebastian show.
Those guys are hilarious.
They're right around our age.
So, you know, they don't really I don't know if that matters that much.
But, you know, some of the references, you know, are of our era.
So that part of it is kind of nice, too.
But, you know, they're really funny.
They riff on each other pretty well.
And, you know, it's just like some nice banter
to listen what kind of show is it it's basically uh it's it's just a comedy show so what they'll
do is they'll show up with three or four topics so for example in the last episode i saw one of
the topic was basically vermin uh getting into their. So like raccoons getting into their backyard
and things like that.
And the way they deal with it and the pest control guy
and how does someone get into that career?
And just, it's hilarious.
I was just dying laughing.
They also, you know, they're comedians.
They have a very infectious laugh.
I think that's almost par for the course to be a comedian.
It's, yeah, it's a riot highly recommend it um there's there's a bunch of really good comedy podcasts
uh i'm sure i didn't stumble on them on patreon but only after you subscribe to
our patreon so go to patreon.com slash programming throwdown and please sponsor us support us we
really do appreciate it we take that money and ultimately put it to getting more folks to learn about programming.
And we're going to take some of it, whatever we have left over, and use it for gifts on the
Christmas raffle, which is something we do every year. And it's coming up in a couple of months.
So we try and give all of it back to the community, or we do give all of it back to the community in
some way, shape, or form. And we try and use it as best we can to get more folks into programming and we really appreciate
your support on that i'm going to try to do it jason style it is time for tool of the show
that's amazing what's your tool to show patrick uh my tool to show is Obsidian, which is you can find at obsidian.md.
This is, I guess you'd call it a note taking app, but it's sort of there's a collection
of these.
I think there's one called Notion.
There's Obsidian.
And they have phone apps, but also desktop apps.
And it's sort of your ability to sort of take notes for yourself, but not just
a singular note, multiple notes, but also provide links between them, categorize them and just sort
of like organize your sort of thoughts. We've talked about I think I've talked about Google
Keep before Google Keep works pretty well, too. But this one is a little bit better for sort of
hierarchy and interlinking. And then there's a
bunch of, you know, sort of community provided plugins. They do not, they do sell a way to
synchronize across your devices, but you can also provide your own synchronization. And the nice
thing about Obsidian is it's all just text files. So each note is a file and each file is a markdown text file. So that's sort of
its strength. And I guess maybe a little bit its weakness. So rather than a lot of companies will
do a proprietary database, or even like a SQLite database, a little harder here, if you know,
the company shuts down, it's not open source, at least I don't think it's open source. But if the
company shuts down,
you just have like a directory of text files. So it'd be very straightforward for you to recover that to import it into something else. I know it just feels like if you're going to get invested
in something that you're, you know, wanting to use, I feel like it's a really nice take on it.
And I'm having something I've been trying to sort of follow a lot of techniques have built
up around sort of this organization uh like life operating system and like there's like a lot of
these but i and i've been trying to sort of get into it people point out it becomes a trap where
you like start trying to like get over organized and making notes itself becomes like a hobby
as opposed to just facilitating your thing so i don don't know. I find it very intriguing.
I feel like I have this constant to-do list that is in my head and getting more organized
is one of those things.
So I've been trying out this Obsidian on my phone and then on my desktop as well as a
way to sort of take notes about what I'm doing, provide like topics, but also link
to other notes.
And so I've been enjoying it
check it out obsidian at obsidian.md very cool yeah so i just looked it up obsidian is not open
source but um but you were saying you could sync it like with google drive or something yeah so
like i i use an iphone so i am able to use icloud and just like the directory and there's some there's
some warnings to be sure like you got to be a little careful but i for instance would can't
think of an example where i would be editing on my phone and my desktop at the same time
this is only for me so the you know sort of synchronization should be pretty straightforward
um they do offer like a a sort of uh it not very expensive, a monthly fee if you want to sort
of support the developer, but also enable like proper, you know, full featured syncing,
which can work.
But again, the thing I like is just that you can see it.
You can just open it with notepad or whatever VI pointed at the, you know, folder and you
can totally see all of your markdown.
Yeah, that is awesome.
That is really cool.
I was using, oh, i was using oh i was using
workflowy for a while um but uh but yeah like kind of like what you said you know i found myself
spending more time writing things in workflowy i ended up switching to uh when i got this
remarkable i ended up switching to just writing everything on the tablet. But yeah, I do think having the right note-taking app
is really important.
It kind of reduces that cognitive load
we were just talking about.
Because once you write it down,
it doesn't have to be in your head anymore,
as long as you're willing to look at it every now and then.
My tool of the show is Ink by Inkle.
So I've talked about...
Actually, I think, know i've talked about actually i think patrick you talked
about the 80 the 80 days or maybe i've always been the one anyways uh inkle is this company
that makes a bunch of interactive fiction books there's i think it's called 80 days around the
world oh okay um and then there's overboard which is by the same company and a bunch of folks so they
released their i don't want to say engine but they're they're basically system for creating
these text-based games and it has like a nice markup and everything um they open sourced it
and um it's a scripting language is what they call it um it has a has like a nice template style
where you can kind of uh you know mad lib different things into it um and the reason this came up was
i guess people have been porting it to other game engines so they recently ported it to unreal
i think someone's working on a port to godot or getting it to compile with godot
um but yeah i thought that was pretty neat um it looks really fun if you want to create a
you know an interactive game similar to the ones that ankle has made
um definitely check it out i think it's a really neat tool
oh very cool all right something else getting pushed into my queue. Okay. It goes on your obsidian.
Yeah. Hang on. I'm going to write it down. I'm going to link.
All right. I think with that, it is time to talk about our topic of the show, which is Godot.
Yeah, Patrick. So you haven't tried Godot yet, right?
No, I haven't. I've kind of watched the tutorials
read the stuff I'm familiar with the the system been tracking it for for quite a while but it
yeah writing a game in Godot is like again one of those things in my queue I haven't managed to pop
it out just yet yeah I mean my experience with Godot was um you know I had this ai hero game i talked about on earlier episode and originally that was written
in phaser which was a javascript um library and phaser i guess phaser is technically a game engine
but um the thing about phaser is you know it basically gives you all the libraries like
here's a graphics library here's a physics library but you still have to kind of code all the game up yourself and where i got stuck was
on the sort of way to be an efficient game development you know engineer like for example
imagine if you had a bug at the boss of your game and the only way you could fix the bug
is by playing through the entire game,
getting to the boss and then trying to recreate the bug.
Well, it'd be super frustrating, right?
It'd take you hours and hours to encounter the bug
and all of that.
Now that's a pretty extreme example.
But if you break that down,
you can kind of end up in a situation
where it's really time consuming and difficult to debug anything.
And actually, even more than debugging, you really have to, a friend put it really nicely, find the fun.
When you first make a game, unless you're just re-skinning another game and keeping the mechanics identical,
when you create a game originally it's
it's not very fun at least none of the ones i made were very fun and um for ai hero you know
the original concept of the game was where where you would sort of bring your own shapes like it's
like oh i need a circle here oh i need a line here i need a curve here and and
you'd sort of draw from this toolbox of shapes and um that ended up not being very fun because
you know if you got it wrong it was really frustrating or like often the more complex
shape like a curve could do anything a line could do right so you just always pick the curve
and it got to this point where it yeah it wasn't very fun and um i couldn't really
iterate quicker quickly because of what we just talked about and so i got stuck and so i put it
down um when i ported it to godot you know obviously it still wasn't fun because i just
straight ported it to godot exactly as it was but i could um you know and we'll talk about this when we talk about godot
but i could go into specific parts of the puzzle and just play that part in isolation or just look
at a certain curve in isolation and play around with it and eventually that was what allowed me to
find the fun in that game um so so that was my experience with godot and overall i'm a i'm a big
fan i think game engines and maybe it sort of changed today but i think like this example like
you're saying jason there's nothing that could have like you're a capable programmer you could
have uh coded all of this yourself right so the things we're going to talk about that are like the components of a game engine it's it's really like a almost like a menu and many game engines
are pretty flexible and that they like let you order stuff off the menu but you can also kind
of like sub in your own thing and i think some people get into any you kind of see uh post
mortems or whatever get into their own like i'm just going to build my own game engine or i'm building something so different or so off nominally like the expected path that i'm going to start by
building my game engine and they just never finish building the game engine and you just sort of get
into this you know sort of thing and i think like you know it is it's like programming language
choice in a way which is that you know probably there are many
ways to solve it and for every person in every situation it's just going to be you know going
to pick one and and hope for the best but i think like starting with that basic game loop right where
uh unlike most applications at least that i write you know they sort of start they do some
processing and then they end that's not how a game works. A game doesn't, I mean, I guess at some high level, you exit the game, but you get into
this loop, right?
And so just setting up the loop and forcing, like you were saying, to get into the process
of rapidly testing and getting to the part where you have a sort of working prototype
somewhat as quickly as possible also helps with the motivation.
And I think that gets underestimated that like having something
that's a demoable and you know playable and sort of excites you helps you stick with it
yeah you're totally right um i mean think about like some of the really iconic games
um and uh i'm going to sort of date myself here but like super mario 3 for example on nintendo
there was one level where you got this boot
and the boot would let you walk over spikes you could jump really high you could like step on
things and and kill them that you know you couldn't without the boot it just radically
changed the game and and there was only one level where you had the boot and that level was kind of
designed around the boot um you know
there's just a lot of spikes that you wouldn't be able to survive otherwise and stuff like that
um and so yeah i mean you know the game developers and designers you know they had an idea and they
tested that idea and they built a whole level around that idea and then when you fast forward to modern mario games you know i play
uh what is it called the one on the switch where four people could play and only one person needs
to win is oh yeah that's right super mario 3d um what i find when i play these games is basically
almost every level kind of has some kind of trick to it or something kind of unique
like one level will have you know platforms that flip over when you jump on them another level
will have you know something else and so and so you have to be able to test all these concepts
uh independently and very quickly and game engines are really really good at doing that
i don't i think we talked about unity briefly
before but since then i've read the masters of doom uh which i think we had at a book a show
before which is basically how john romero and john carmack uh kind of started their game studio and
how they sort of evolved it and you know i think one of the things through through that that that
sort of impacted me is the sort of separation of concerns,
I guess you'll call it,
which is John Romero just had this ability
to create levels and interesting mechanics,
like you were saying.
And John Carmack would focus,
I hope I'm getting this right.
I think I'm getting it right.
John Carmack is like very specifically
on like at the time,
the limited hardware, right?
And sort of saying,
how do I optimize rendering a 3d scene so think
about like wolfenstein 3d or eventually doom like how do i get the levels encoded textured
blitted onto the screen so that you know john carmack can kind of push the engine and and sort
of work the fun and i think you know talking about you know we're talking about good dough here and
tries to give you that same separation of concern. Like you focus on the half of creating with the tools, like Jason is saying,
the mechanics and the interesting bits is the part that they're,
they're not really going to be able to provide you that you got to,
you got to bring that yourself.
Yeah. And you're getting to what you were saying earlier,
just circling back to that, you know,
I go to a lot of video game development meetups.
Like if you're in austin and
you're at one of these you probably run into me at some point and um a lot of the time i see people
who have a really interesting game engine um but then there's there's no fun it's not there's no
fun there so for example i saw one recently where it was like minecraft uh you know the engine was like minecraft
where it's all voxels um but you had a grappling hook kind of like spider-man's web web fingers
right so you could swing around the level and then you also had these rockets that could just blow
big craters in the level and with the two of of them, you could actually, you know, dig tunnels or dig up from the ground. And it, it was like a joy to swing around the levels and
put holes in the ground, but it was, it was just an engine, right? Like there was, there was no fun
there. And, um, and I think that, you know, it might be better to have, let's say, built that in Godot,
even if you're getting five frames per second or something.
But you could figure out what the fun is.
What can I add to this game to make it really fun?
And then if you have to rewrite it, it's fine, because at that point you've done the rapid prototyping
and you've sort of found the fun, and now you just have to recode it it's probably better to do that and end up with
two copies of your game than to start building your own engine so maybe maybe that's a good
segue where at least i'll force it is uh like what what gig game engine is and then specifically
godot's kind of version i think talking generically we already mentioned i already mentioned the the sort of loop the sort of execution loop and in that you're going to have
stages and one of those stages is going to be input handling which yes everyone could write
themselves but you really don't want to which is how do you handle keyboard input multiple keys
pressed down at the same time mouse input clicks and you know all of that kind of like input
handling as well as like just some of the stuff
that, you know, hey, you want to make a menu on the screen, we talked about, I think it was last
time, right about desktop UIs. And we were, we were alluding to game UIs, but you really don't
want to write a windowing system or a menu system, you know, from from scratch. And so they're going
to bring that kind of stuff as well. Yeah, totally, totally.
And they're going to do it in a way that is cross-platform.
So in my case, when I use the JavaScript game engine,
they had a way of running it on the phone.
And this is a little bit beyond me,
so I'm not going to try and explain how that works.
But then when I switched to Godot, that was one of the things that I really wanted to make sure.
Because although I was playtesting and developing on my computer, my intent was for almost everybody to play this on their phone.
And so similar to if you're doing Raspberry Pi or Arduino stuff, you have to kind of cross-compile, right?
And you have to make whatever you're doing work in that other architecture.
And there could be all sorts of little nits there.
And so Godot has this nice way of saying,
okay, you can use your mouse on your computer
or you can use the touchscreen on your phone.
And they sort of like
have one api that can kind of handle all of that i didn't even think about that so yeah i guess
we've been dodging the the big one though which is also just the actual kind of rendering engine
which i think is what all probably most people think about first as the thing they don't want
to go solve themselves um no one wants to write directly in open gl although you can um and now i guess that story again to your your cross-platform
and portability is is probably a bit of a different story with direct x and open gl and shaders and
you know so they're going to provide that ability to push 3d or 2d assets which would be like sprites particle effects models that you load or sprite
sheets if you're if you're doing sort of sprites and push those through and then handling things
like rigging and animation and they're going to have sort of file formats worked out and even in
the case of like editors for that stuff as well so so not just oh i'm in a script file like you
know writing all this stuff
by hand which may work but how would you join with someone else who wants to contribute to your game
and say hey listen like why don't you handle tweaking the run animation um and you know
here's the editor and here's the keyframes and you know allow you to figure out that kind of stuff
yeah totally i mean i honestly to this day i have no idea how how the hardware you know graphics
acceleration stuff uh works on android or ios i don't know if they both use the same thing or if
there's two different ones and godot had to write everything twice um i mean the godot system or
unity or any of these is is handling all of that for you so So you run it on your computer,
which it could even be OpenGL or DirectX.
I don't know that either because Godot is handling all of that.
And then when you run it on the phone,
it just works and they've done their best
to make sure you get exactly the same experience
on all these different devices,
which is actually really remarkable
if you think about it.
Another piece of this is the editor the editor is
extremely important um you know phaser and these other game engines they don't they don't have a
development environment they're a set of libraries and you're meant to write your game in them but
but you know godot comes with a editor the editor is also written in Godot, which is kind of interesting.
It shows that it actually works for something.
But the editor is beautiful.
And you drag and drop different sprites or sounds,
and it'll do positional audio and all of that.
And then you can also do...
So the editor gives you scenes so for example you know one of my scenes
in my game is the main menu and there's a bunch of little boxes like hit boxes that you could click
on for the different options of the menu and all of that but then they have a recursive the scenes are recursive so you can actually for
example um you know each level of my game had a scene for each line so your point of the game is
you're drawing these lines to kind of uh uh separate different groups of dots. And each line is a sub-scene.
And so you can actually drill into the line scene
and you can manipulate a single line.
And when you click the button,
it should grow a little bit to like acknowledge
that you've tapped the button and everything.
And you can test all of that in isolation very, very quickly.
And then when you are comfortable then you can
spiral back out and test the larger scene um there's some things you'll have to contend with
so for example you know if you're testing the line scene by itself then you've never loaded a
level and so if you you know like one of the issues I ran into was when I'm testing the line scene,
I would drag the line and then it would crash because it would see, oh, did the player solve
the level with the, where the line is now?
And there is no level.
So you have to deal with that.
But what you get in exchange is the ability to test each of these different components.
And I found that to be really the thing that got the game
across the finish line so other things that that i think time with editor are you know as jason's
already mentioning with the scenes but often uh many games have levels um and for levels you need
some sort of map or you know yeah sort of environment and so having the ability to do
that is something i i remember i guess that was like unreal tournament or something way back in
the day came with or no it was half-life i remember had an editor and you could download
the editor and you could like make your own oh yeah levels it's called like hammer or something
i don't remember i'll have to look it up now but you know people started shipping that hey listen like anyone can kind of create their own own level here uh and you know it's just a way
of defining it but again this is something that sort of i guess i overused the python thing
batteries included that when you want to go build a level here's a way to allow others to build
levels for your game um so if you're you know building a logic puzzler or jason was just member uh
mentioning uh the inkle stuff and sort of like hey they built a robust way for even others to
reuse their approach and so so being able to kind of have the level editing and sort of either 2d
or 3d sort of be be included as a as another a good separation of concerns to allow other people
to build out those pieces while you're focusing on maybe some of the mechanics
yeah totally it was valves hammer editor and uh i remember uh playing with that too that was a
blast another one i played a lot with was um the starcraft editor starcraft one had this amazing
editor um and you could actually take the maps you made
and play them with your friends on battle.net and they would download the map from you and they
joined the the game and everything um but uh um but yeah you know there is nothing more demotivating
than like you know you edit a json file and then it takes like three minutes
to compile and then you join you know you start the game you have to click new game you have to
choose your character you do all that you have to like skip to the right level and then oh the json
file was wrong the level is like unplayable and you have to do the whole thing over again right
and so um yeah when people say they're going to build their own game engine i think a lot of them the level's like unplayable and you have to do the whole thing over again. Right. And so, um,
yeah,
when people say they're going to build their own game engine,
I think a lot of them think about,
you know,
what,
what,
what do I want the engine to do?
Uh,
uh,
you know,
to,
to like to render or to play,
like,
what does,
what do I want the engine to do for the player?
That's usually what people think about,
but what you really need to think about is what can the engine do for me to make me as a developer you know 100x more productive especially if you're a
solo or a small group or you're doing a one of these game jams or you only have three days
you really need the editor to do so much for you
the i think i just make like put two and two together maybe i'm wrong i'll have i'd have to
look i think there's been like a uh uprising a resurgence uh increase in people doing procedural
games um in part well we should talk about that we have that perpetually on our list
um but something like wave wave function collapse uh and other uh perlin noise and these kinds of
things for doing procedural generation. You
mentioned Minecraft, right? Kind of famously does this, but other even more elaborate games as well,
trying to sort of do every game is unique, you know, or a little different, but there's rules
that are obeyed to make sure it's sort of still playable. And I think some of that, not all of it,
of course, very fun game mechanic, right? And sort of almost adds that infinite replayability if you
can make it fun, but also gets you out of having to build levels right so i think there's this
temptation to for some of those games to say well i don't have to sit down and design a fun level
like i'm just going to work on an algorithm and if it's not fun the person will just regenerate
you know the world or we'll just do something again and it's you know i i think can be not
not always but i think it can start
to be a little bit of a, of a crutch because someone just saying like, Hey, it's kind of more
fun to work on an algorithm to make levels than to actually sit down and make levels. If you're
sort of a programmer by, by trade or by inclination, um, some of that sort of artistic
crafting and designing the, the sort of perfect one. And I think that's interesting. We were
talking about, I think I mentioned last episode or two episodes ago about Factorio,
but interesting. I was thinking about this. There's another game, Satisfactory, which is
sort of similar to Factorio. And interestingly in Satisfactory, the game, the map is actually static.
So they have one map and they've sort of over time, they want to add new features. And so they
have to like tell you, hey, when we do this upgrade, this portion of the map
warning, like if you're building something elaborate here, you won't really be able to
upgrade because this portion is going to change.
Like we want to change this portion of the map versus something like, you know, Victoria,
whatever, like you're playing on your seed, you're playing on your specific incarnation.
So stuff can be added but you
wouldn't really see it unless you regenerated so the same like minecraft and minecraft added a new
biome right like you wouldn't see that new biome unless you sort of regenerated uh and so there's
this interesting dichotomy between like a static map and uh you know designed and uh procedurally
generated one yeah totally i think that there's this,
it's another one of these traps,
kind of like building your own engine.
But there's this trap where you think that,
oh, I'm going to make a sandbox,
I think is what they're called.
I'm going to make a sandbox game
where I'm just going to throw
a bunch of mechanics together.
And that way I get to do all the fun stuff
without having to do
things i think is not very fun like designing levels or having very scripted situations right
and and actually it's really really really hard to make a sandbox game um there's a few of them
um they've gotten kind of a cult following um you know i mean other than minecraft i mean minecraft
is is kind of like the michael jordan or the beatles or whatever it's kind of like its own
entity right but if you take away minecraft you know the sandbox games like like x4 for example
or um gary's um gary's mod's a good one um you know a lot of them you know they're just very hard to
pull off and so i would suggest to folks who are making their first game um you know make something
that has like pretty well defined levels where you can just reduce the the scope it turns out making things more complex is very easy but making things fun uh is
like for example in mario you know what i at least what i think we're getting into sort of like uh
really subjective territory here but i think what's fun about mario is that you have all these
very simple systems like the goomba is very simple the little like fireball that spins you
know the what do you call that thing you know i'm talking about the wall of fire that no it's not a
ball oh the rotating arm of fire yeah yeah the rotating arm of fireballs so so all of these
things all the speed runners are really mad at us right now yeah i know we're gonna get email
there's gonna be discord and discord over this. Um, is, you know,
in isolation, they're trivial, right? In isolation, they're trivial to overcome,
but it's when you compose them in different ways that it becomes really interesting. And, uh, um,
and so, you know, start with something really simple. Uh, everyone says this, I'm not inventing
something new here, but, but start with something simple that's very scripted
and then work your way up
by adding more and more complex systems.
And again, like a library,
I mean, a tool chain like Godot
is really important for that.
I don't know why we're on subjective game dev advice.
Having never built a game,
I would say I think one of the things too, but, but I guess
cross cross pollinating from other stuff is don't set out to build your dream game first.
I mean, that does work.
There are stories.
You can Google them about people who like their very first game was successful and amazing
or whatever.
But I think much more common, like set your sights on something like attainable.
You can, you can, you can kind of iterate on the the dream game the fantasy game
the one day i'm going to build this but for now you know sort of just execute on on you know sort
of what what's in your in your scope to finish and get sort of the reps in of you know start to end
and actually sort of doesn't have to be amazing or you don't have to you don't have to send it to
anyone but just like complete and playable uh and you know have a beginning and a middle and an end
and jason mentioned game jams,
but this is my like secret thing.
It's like one day I'm going to sign up
for a game jam.
He's going to force me to do this.
Like it's time bound.
We need to do it, Patrick.
Oh, no, we need to do it.
We got to take like three days off work
when there's a game jam and make a game.
All right.
I got to do practice before that.
But all right.
The line is drawn.
Trying to get back onto Godot.
Physics, we didn't talk about as well this is
another one where maybe people either think it's too easy or too hard but uh having a physics
engine and not worrying about all the things that that come with it collision detection you know
right gravity adding you know parameters that you can script to other functions or actions or
superpowers like jason mentioned know, having a boot that
turns off the spikes, right? Like you want to code all that logic with a, you know, spaghetti function,
look, like, yeah, you could do that. You know, or you could let a system that sort of has all those
things, you know, handle it for you. Yeah, I mean, another thing that's really complicated is, you
know, look at Mario, for example for example you know certain things are affected by
physics like uh like the mushroom falling off the edge of a ledge or something right um but then you
know there's certain things where you just need a lot more control like if mario is controlled by a
physics engine it would be just too unreliable and uh you know obviously speed runners would be really upset
it's like oh you know my computer you know skipped a frame and mario couldn't make that jump or
something but but then also like you know it would just be too complicated for for beginner players
to really understand you know so so so you need mario where when you jump he has an extremely fixed trajectory
uh he could even change trajectory in midair and things that are like physically unplausible
um but then you need you know mushrooms and barrels and stuff that are just normal physics
things and so you know godot has uh I'm not going to get the terminology right, but it basically
has a concept for, I think they call it a static dynamic body or something.
I don't remember.
Anyways, but there's a concept for like, here's a thing that I want to exist in my
physics universe, but I'm going to be controlling it directly.
And you'd use that for something like a player.
I think it's called a kinematic body.
And then they have dynamic bodies so you could just use little circles you know to represent the mushrooms and
the barrels and everything um and they they handle like what happens when one type of body bounces
off another one because that's another issue is like you know what if you have like total control
over mario let's say there's something like a barrel and mario pushes
the barrel against the wall you know what happens is that barrel gets squeezed and then explode you
know like you see in physics engines i go flying or does mario stop moving like there's all this
complexity and uh the game engine you know will really help you navigate all of that talking about barrels and pushing in this
i think um also and you can correct me if i'm wrong but i was telling jace is one of those
things who pops up with discord uh not in our discord just in general which is entity component
systems uh like one of those game development philosophies so i think good joe jason mentioned
scenes and the sort of hierarchy um but i think
good dough famously does not sort of natively push the entity component system uh which is one way of
handling what we're talking about which is hey you have all these things moving around you have
enemies and you have you know rotating fire flame arms and swords and pickups and all of these things
need to be sort of tracked inventories and what's in your backpack and you and all of these things need to be sort of tracked inventories and what's
in your backpack and you know all of these things you know need to be handled rendered updated every
frame and so it becomes a a place to sort of you know be be rigorous in how you're going to
not handle each specific object uniquely but handle sort of all objects collectively in a in
a common way and have a common sort of thing.
And so the entity component system approach,
oh, I'm going to see if I can get this right.
So entities are roughly sort of IDs into the world.
So rather than everything being a pointer,
you give everything a unique ID
so that the system can refer to other IDs
and do things like garbage collection off frame
or phasing them out or changing them between levels. And so entities are, and then the component is sort of like the thing in the
sort of inheritance hierarchy. It's like, it is an object, it has properties and attributes that
you can add, and they can be common across like this is a, this is a barrel. Do you want barrels
to be destroyable or not? So does it have a destroyable attribute or it's not is it squishy or non is it rigid or not rigid i guess there we go uh and then the system
is the yeah the thing that runs it right it hooks up all of the calls that need to be routed between
each other and does the updates and sort of flows everything through um and it's a a way of modeling
um this that the other places take i think there's some sort of extensions to Godot
that will allow you to implement this.
It's not a game engine unique thing.
You could develop other code that uses the same kind of logic.
But this is just one of the things some game engines use.
And then Godot uses a sort of hierarchy instead
through sort of inheritance to show some of this
and sort of a more i think
am i am i sort of on the right track yeah no you're nailing it yeah yeah okay good uh but this
is one of those trade-offs that your game engine i think it's a little bit you know i described like
a menu but it's sort of like it may bring its own approach it doesn't prevent you from using
something different and really going in in in sort of the ecs the entity component system, but it's sort of out of the box.
It's not going to kind of do all that piping for you.
And this is one of those people will go a pine
for long blog posts about the pros or cons
of such an approach.
Yeah, I mean, one thing where I tried to make a game
a long time ago, just in C++ from scratch,
I tried to write my own game engine, it was not um but to be fair it was a text base is like one of these rogue type games where i didn't need a
lot of graphics but um one of the things that really tripped me up back then was circular
references you know like if i if i have a sword then like the person has the sword, the sword's attached to the person.
And just like what, how do you break that reference elegantly? Like, for example, what if you have a sword that is like a, you know, like a magical sword that disappears after 10 seconds?
Like it's part of a spell, right?
And like as you're swinging the sword the 10 seconds
are up you know like there's weird things like that where like oh you know the sword disappeared
but now like you know you'd already committed to swinging the sword so you get these weird effects
right um and you know one thing godot does it has this like a type of queuing system where you queue an object to be freed but it kind of
keeps it around for a little bit longer just to make sure that you don't have this this uh uh
sort of uh so it's a form of deadlock in a way sort of deadlock issue um and and that fixed uh
a variety of issues i had especially when i was changing levels in AI hero and I was trying to like tear everything down.
Um, you know, with Godot, it just kind of like took care of all of that for me, but
I know in past projects, you know, I've had a bunch of issues where even Mame Hub, Mame
Hub crashes on exit and I still don't know how to fix it.
So, so, um, you know, it kind of alleviates all of those those issues for you of
dealing with you know c++ pointer nastiness um speaking of c++ we haven't said so godot
programming languages do you you want to take the alternative yeah um good good call man um so yeah so godot uses something called gd script uh have you seen this
patrick yes yeah it's it's very similar to python um there's just a few tiny differences
but uh um but yeah i found it very approachable in the beginning um i didn't want to have to learn another language to
be honest so i thought let me try godot with the c sharp there is a she they call it godot mono
um but that was just plagued with issues i mean it was brand new when i was trying it out this
was godot 3 and um it's just i just had so many technical issues I was like let me you know
there's not that much code in AI hero let me just learn try out this Godot script and I'm so glad I
did I mean it took almost no time to learn um you know there's just a few like really subtle
differences like I think you know in Python you use enumerate when you want to get a uh
um so if you want to get like if you want to uh do a for loop over a list of objects but you also
need the index so you need the object and its index at the same time in python you do like 4x
in enumerate my list right i think good oh it's something different but it's like these kind of really minor things um and in exchange like you know it was such a better developer experience
um now i think the c-sharp is getting much more mature i think you can also do stuff uh in c++
as well so i think c++ c-sharp gd script those are kind of the the core ones and then i think
they're you know like in general bindings for other stuff, if you if
you kind of want to, but you sort of start to leave the I know there's like some core
functionality, you want to kind of stay in if you if you don't know that you need to
specifically do something or you're on a, you know, quest, you want to say stay in kind
of one of those.
So the other thing that we alluded to, like I mentioned, when we were talking about entity component systems or the sort of plugins but
i think another thing a game engine gets you is again this like core functionality being there
and and offering stuff is you can go get other libraries to do things for you so we've talked
about that when we talked about unity and they have sort of the marketplace as always like you
know paid and free sort of extensions.
Godot has something similar.
So there's things that you can go grab and just add in that you really wouldn't want to do from scratch.
So you want to show ads, what kind of ads you want to show, you know, like little banner
ads or like, you're going to get all of that for you.
Or, you know, please, I don't even want to go down, never had to do it myself.
But like, you want to offer unlocks or you know in-app purchases
or do a please don't freemium game that has micro transactions like you really want to code up all
that stuff by yourself like no so yeah i mean talking to all these different services because
you have to talk to the google service for android and the ios service for apple so you're not you
you will have to at least code it twice and it's probably going to be
very painful godot just handles it what is the in-app equivalent for pc is there one i i don't
actually know like is there a dlc right this is okay so like you would just like steam app or
through like i don't know like how would okay yeah it's a good so you know i yeah okay there's
two types of microtransactions right
there's there's dlc and then there's kind of like buying you know uh i guess like cosmetic stuff or
or buying like advancement in the game right um that second one yeah i really don't know what
your options are for pc but the first one would definitely be dlc like you could say you know
like polytopia is a good example where uh you have to buy the different races you know to play them
and and it kind of like unlocks a bit more of the game um and in steam you just make each race a dlc
and buy it through there good though when it was early was a lot of tutorials and stuff for platformers and sort of like you
know i guess basic phone games you know the sort of casual casual games i guess like 2d stuff but
i think and i think that was what you were describing sort of sort of your game to be
to ai here is this sort of like but yeah but recently they've added they've been working
pretty hard to become more fully featured as like a 3d game engine as well yeah i mean i don't have any experience with it uh but uh or unity that matter for i haven't done
a lot of 3d uh stuff in a long time but um but yeah i think you know godot is trying to be really
you know feature complete with unity and unreal and those alternatives, which is great. I wouldn't,
my personal advice, I wouldn't start with a 3D game. There are, you know, people will say there's
advantages. Like if you have a 3D mesh, it doesn't have to look as detailed as a 2D sprite. Like you
could basically get away with a lot more on the art side. I't know i'm a little skeptical of that to be honest i feel like you
could have pretty low quality art even in 2d if you have a solid uh game hook um so yeah i would
definitely start with with 2d but good dough you know think about good does you if you do eventually
want to get a career in gaming or you do you know you have a vision for a 3d game you want to build
yourself up to it you know you could do the whole thing you could build yourself up in godot and
know that it'll it'll support your 3d game that you want to build um getting back to your component
system something that really struck me that took a while for me to get used to is there's no like main function you know like there's no entry point so the way it works is
you attach functions to individual entities so like i attach this function to like uh let's just
use mario as an example so you'd actually attach code to a goomba and that code would say like
every tick you know move left until i hit a wall then move
right and you would like actually just attach that code to the goomba and it just floats
in isolation and you could attach that same code to the turtle uh you could even say in that code
like 90 of it's the same but you could even have a clause saying like, if turtle, then like,
uh, let Mario turn me into like from a living turtle to a shell or whatever.
Um, but, uh, so, so you can do some peering and stuff, but it's not like a traditional
program where you start with main and then you set up some things and then you have a
for loop that loops through all your characters.
Like there's none of that like you're writing like little tiny snippets of code and you're relying on the engine
to systematize all of that um that was something that took a ton of getting used to and writing
code that was not garbage uh in that way was actually took a lot of practice um uh but uh but
i also once i got used to it i really enjoyed it i like
the fact that you know i could just like create a new thing give it some code and it could just
live in the in the existing universe um that part of it was really exciting
well being the uh one of the two of us that have actually written a game in godot all right you
gotta give it a rating yeah so you know i've tried unity um you know i've tried phaser and a bunch of
these i definitely give godot an a plus i really loved it um i didn't make any money off my game
my game's totally free there's no in-app purchase or anything but if i did i would give all that money to godot they deserve it um so the godot gets a hundred percent
of the proceeds from a hundred percent of zero philanthropist to jason such a philanthropist
um i was really really impressed honestly i think if you're getting started this is
unquestionably the way to go.
You know, I think that Godot is open source, totally open source.
You can fork it.
You can make changes to it.
I mean, all of that.
We didn't talk about that.
That's not the reason I would use it.
I actually think it is much simpler.
Unity is very, very complicated. And, you know, there's definitely
advantages to that. But I think if you're starting out, Godot is just such a beautiful,
very simple experience. In the same way as Next.js, it is very opinionated. As I said,
there's no main function, you know, for your
global data. You know, you have to do it using this like special global object. And in the
beginning, I was a little frustrated with all of the sort of the opinionated nature of it.
But once, you know, at the end of it, when I launched my game, at that point, I had totally come to understand
why they had made those design decisions.
So I definitely think Godot is a great place to get started.
There's a really solid community.
And you never have to worry about licensing issues or any of that.
Even if your game isn't a huge hit know it's still a lot of red tape to
have to jump through uh getting the professional unity account or i don't even know what it is
oh you know with godot it's like when my game was ready you know i just shipped it so uh so yeah i'd
highly recommend it um there's one thing oh there's uh godot 3 and god 4. I jumped on the Godot 4 bandwagon a little bit too early,
and it was in rough shape.
You actually can't go back.
If you go to 4, you can't go back to 3 unless you, you know,
you can with source control, obviously,
but you lose whatever progress you've made in 4.
But at this point, I think 4 is mature enough
that folks can go straight
to good to four and uh and it's uh it's been a lot of fun
awesome well you know you mentioned earlier but you know shout out to the shout out to the patreon
sticking with us and all our supporters and people listening to us i this is a great episode
uh game development we always talk about that it's like one of those first things that everyone and all our supporters and people listening to us. This is a great episode.
Game development, we always talk about that.
It's like one of those first things that everyone always attempts to get in.
And so it's a great gateway.
I was going to say drug, that sounds bad.
Gateway, just gateway.
The great gateway to programming.
The great gateway.
That's a hard thing to say, great gateway.
Great gateway, yep.
The great Gatsby.
So yeah,
it's,
it's awesome.
Thanks.
Yeah.
As Patrick said,
thanks so much for our patrons.
We're going to do the giveaway.
So if you've ever wanted to be a programming throwdown patron,
now is a great time.
You could theoretically make money where you could be a patron for a dollar,
get a prize and then punch out.
You know, we'll, we won't. We won't hold it against you.
I will say, actually, I feel a little bit bad.
I said this is private, so it's not actually incriminating anyone.
Someone did do something interesting.
Elect to become a patron, send me a message saying they should be on our show,
and then cancel their patronage before we even got one dollar.
I thought that was clever, but I didn't respond.
I felt like that was maybe beyond the pale.
But being a patron, you know, giving us one buck and then winning a T-shirt, I think, is totally above water.
I'm totally quoted.
Unethical life pro tips right here.
Patrick is shaking his head. I'm out, man. I'm totally cool with it. Unethical life pro tips right here. Patrick is shaking his hand.
I'm not, man.
I'm not.
All right.
Well, hey, it's a pleasure to come record the show with Patrick for you all.
We have a great time and we will catch you all on the next one. music by eric barn dollar programming throwdown is distributed under a creative commons
attribution share alike 2.0 license you're free to share copy, transmit the work, to remix, adapt the work, but you must provide
attribution to Patrick and I, and share alike in kind.