Programming Throwdown - Unity
Episode Date: February 2, 2015This show covers Unity: A Toolchain and set of three scripting languages primarily for making games. Tools of the show: Jason: Meld http://meldmerge.org/ Patrick: Space Marshals http://www.pi...xelbite.se/pbsite3/?page_id=7675 ★ Support this podcast on Patreon ★
Transcript
Discussion (0)
Hosting provided by Host Tornado.
They offer website hosting packages, dedicated servers, and VPS solutions.
HostT.net.
Programming Throwdown, Episode 40, Unity.
Take it away, Patrick.
So I'll start off with a little bit of a rant.
Pre versus post increment.
So I got into a discussion with people at work and for a long time I have always just done,
so the biggest example is in a for loop in the final variable change parameter,
the normal one you do is an increment plus plus and so i do uh i plus plus or whatever
so for i equals zero i is less than 10 i plus plus that's just always done it this way um and
if i put a an increment on a line by itself i do the plus plus like it just reads more naturally
to me like this variable you're taking the variable and you're incrementing it
you're not incrementing something that you're going to read later so uh and then of course if
you put it in line with other stuff i actually tend to try to avoid that um like in a statement
because i actually find like i will do it occasionally but i find it to be a more cognitive
load so i'd rather uh either have it be a post-increment
so that it just happens at the end
and it's like I put it on another line
or do it on a separate line all by itself.
And so someone pointed out to me
in one of my code reviews
that I was doing post-increment
and that the quote-unquote standard we were using
was pre-increment.
And I said, nah, that's not true.
And so then I went through all of it.
I wrote a grep command to i went through all of like i you know
wrote a grep command to grep through all of our code and sure enough uh except for just a couple
small other cases from other people every one of the team had been doing pre-increment except me
and all the code checked in that was post-increment every single one of them except those like two
other cases was me and it was like oh it was like one of those sinking moments where like i was
hoping to be triumphant because like oh see everyone's using post increment sometimes there's
no standard and then it was like yeah i'm wrong that's i don't know where it came from the worst
is when like yeah like it's it's too late at that point you know like when the project starts you
can try to fight for what you believe in but if if it's been going on for six months and you've been doing it one way and everyone
team's been doing another way then you just have to bite the bullet man that's so i did so i i
swallowed my pride and uh submitted a a change to convert all of my post increments to pre-increments
but i still i still catch myself writing theincrements and then having to fix it later.
Yeah, I feel the same way.
I mean, like compilers now are so smart
that the difference is kind of negligible, if anything.
Like, I don't even know if the instructions
end up different at the end.
You know, because like,
if one really was better than the other,
the compiler, I mean, you know because like if if one really was better than the other the compiler i mean you know there's no way to there's no way you that i know of actually i guess maybe if you used a comma
right like if you had i plus plus comma and then like some more logic here versus the like that's
the only way where putting the prefix versus post fix you know and this this
other logic also had an eye like print eye that's the only way where you could end up with different
behavior by swapping them and nobody does that right no i would not allow that in a code review
yeah that's terrible so anyways i just have this bad like i guess i looked it up at one point i
think they said it was like the original the c book or whatever kernegy richard richard
something anyways uh kerningham oh why do i always forget the name wait does someone in
your code review quoted a c book no a deceived programming book by kerninghan oh man i always
always mess up the name uh anyways and in that
one i think is where brian kerningham and dennis richie i was combining the two okay brain fart um
the in this book they do the post increment like i did and so like i guess maybe it's being from
the states and going to college here in the united states like the de facto way is writing it
this way um but i guess people from other places don't they use the pre-increment um and so that's
just what they're used to uh and then it's defensible to them i guess i don't know gotcha
but everyone i've ever seen until that day had always done like and then like everyone on the
team was doing pre-increment I'm just like what
how am I the only one out here I've never
like been fussed at for
this before you should
you should you should just
have a comment you should write a regex
that puts a comment instead of every
for loop and it just says like
this the only
pre-increment
symbol should be America I don't know I don't
know so I'm just curious okay but you're also post increment so I'm trying to
figure out where the previous post came from yeah so there was somebody on my
team like so in a for loop, it doesn't matter.
I don't think anyone can really make an argue
that it matters from a compiler perspective.
So there has to be just like a legacy or like a guideline.
So there was someone on my last team
who was really into the pre-increment.
And that person was from Suriname,
like former or post-British Guyana,
like South America.
And so maybe it is like American-verse.
Like maybe people,
like Europeans and South Americans,
learned pre-increment
and we learned post-increment somehow.
I don't really know how that happened.
I have, yeah.
I have no idea.
All right, anyways, that's my that's
my rant uh so on to an interesting topic i was talking to someone about cooking and so i actually
enjoy cooking um and i uh don't do it as much as i should i'm a little pretty busy at work but um
i do enjoy when i do it uh and baking i've been baking bread recently but have like a not a new
year's resolution but like kind a not a new year's
resolution but like kind of a goal this year to it doesn't last long right my parents used to bake
bread and it was like a brick two days later you pretty much have to eat it that day no well i don't
end up having that much leftover after the first day but okay i don't make a lot of it and it does
tend to last two or three days at least and then i typically either am tired of it or get rid of it oh okay but no it must be doing a better job i don't i don't know that maybe i no i don't know
um but then i was like talking people like oh no i can't cook whatever and i'm like well
you get instructions it's like reading a program and you just like follow the thing that recipe has
yeah you really can't go wrong well but i find out like it's actually very rare for
people to follow recipes i think part of it is you have to fail like for example the first time i
learned how to cook i was just completely on my own and um you know they told me to like put the
rice in i just was making rice like the simplest thing they told me put the put the rice in. I just was making rice, like the simplest thing. They told me to put the rice in,
put the water in and then boil it or like simmer it for,
I don't remember how many minutes.
Right.
But I left it on hot.
And I guess,
you know,
when you're supposed to simmer,
you're supposed to put it on low and it didn't,
it didn't say simmer on low.
It just said simmer.
So I don't know what that meant.
And,
uh,
I left,
I came back and like,
even like the pan
itself was ruined like the rice it just kind of like destroyed the enamel like the teflon on the
pan but the point is like you know you either you get formal training or you just like make mistakes
like that and destroy things and i think like what you're talking about is actually a metaphor for
a lot of things like there are people who are just afraid to like take kind of
chances and like the ambiguity i don't i don't know if it's like afraid probably is like very
is too strong language but it's more just like oh this is really ambiguous this is really hard
i'm not going to try this versus i'm going to like fill in all the ambiguity, you know, by chance and then see what happens, right?
Yeah, and I guess it's somewhat like people who, so you can make mistakes like what you're saying
or like where there's ambiguity in the instructions.
But I mean all sorts of people who it's like, well, I've never made this dish before,
but, you know, I feel like I can do better than what this person's saying.
Like, oh, they call for like a cup of milk.
I don't have any milk.
I'll just use a cup of butter instead.
That'll be the same.
That's kind of egregious.
But like people I talk to do this kind of stuff.
Like, oh, I'll substitute.
You know, it says like, you know, X amount of flour.
Well, the only flour I have is like almond flour.
So like it'll be okay.
Yeah. well, the only flour I have is like almond flour. So like, it'll be okay. Yeah, and some of it's like not knowing,
but it's just people don't like,
the more I don't know,
the more I try to like follow some guideposts
like the instructions or a YouTube video
or like something.
I don't pretend like I know better, but yeah.
Yeah, I mean, I think, yeah,
you have to follow it closely
and then you'll still probably make mistakes.
But then over time, like I've gotten to the point now where like, for example, I think, yeah, you have to follow it closely and then you'll still probably make mistakes. But then over time, like I've gotten to the point now where, um, like for example, this
morning I was making scrambled eggs and I just kind of like put in enough milk when
I was mixing the eggs so that it just kind of looked right.
And I was like, I've made so many scrambled eggs at this point.
I don't have to really measure anything.
But the first time you were going to make scrambled eggs, like, first time it's like i followed the recipe like to a t yeah exactly
i bought like cream i never even used cream no one drinks coffee in this house but like i bought
cream because it said to use cream instead of milk you know yeah okay so that's the same way i do it
yeah okay but apparently this is uncommon and then people like don't understand why they fail
such a hard time for that like especially if i'm trying a brand new recipe and i have to do absolutely
everything absolutely perfect there was one that had a rub it was it was a burger recipe
and this was a rub and i was following the recipe kind of line by line um and then the thing is it
didn't tell me how much of the rub to put on the meat like it didn't say
it didn't have like a like how much rub i made how many pounds of meat i could season with it
and i was just like oh no like what if i over season it and that's where you have to just bite
the bullet and just hope you get it right you know yeah cooking is actually so freaking fun
i like cooking yeah so anyways cooking programming okay all right
on to on to actual technical topic uh well i guess we didn't do the ordering very well for
the show so i'm up first again so you just hear a lot of no worry so far um this is an article
about why at stack exchange they still believe in private offices so a lot of um press has come out around several big companies
talking about open offices where uh there aren't the many many people kind of essentially sit in
a large room and there may be like desk divisions in rows or pods but essentially everyone's in an
open room where you can just hear people shouting this used to be called a bullpen yeah that's what
i know it by but now people call it more politely open office plan and it's used to be called a bullpen yeah that's what i know it by but now
people call it more politely open office plan and it's supposed to be like a perk and it's
deliberate and it's great uh and that's like the new wave but increasingly people are like wait a
second this doesn't make sense for anyone except for like cost savings um they try to so the the
pros from the people who say open offices are good is that,
uh, you get dynamic interaction between people, right?
So you're all at work.
The purpose of being at work instead of just working at home is to be around other people.
And so when you have an open office plan, you're hearing conversations that you might
not have otherwise you interact with them.
Uh, and this is, you know, leads to big productivity boosts in the long term.
But the cons are you hear everyone.
And people are loud or talking about stuff you're not interested.
It's very hard to focus because anyone can just come up to you and start talking to you, even if you're in the middle of something important.
And so these are kind of cons.
And this article, Stack Exchange Company, is saying why they believe in private offices.
You can read this article.
And from my standpoint, I think there's somewhere in between.
So some places have offices with only one to two people in them.
That, to me, is a little lonely and maybe not good.
So the best I've had is I was in a room with like four to five people who were in a very
uh like the team was a you know very specific part of a sub team and so these people i was people i
worked together with a lot and so i needed to have a lot of interaction with and we had a door we
could close so if we needed to have like a meeting we didn't go somewhere we just closed our door and
had our meeting um also like the chance of me interrupting someone who doesn't care about what
i'm talking about is really low because like i become these are people i work with day in and day out so
we all understand each other and we're more comfortable saying like hey like not right now
like i'm busy or whatever um and so i found like that four to six people in a quote-unquote office
closed space that was like for me uh some of the best work environment i've had yeah yeah i was i was thinking the same thing i mean i had i've worked in places that had the
huge bullpen actually we worked together at uh you know like a bullpen environment
and actually in that case it worked where we worked because it was very quiet it was just
naturally very quiet so that was an anomaly i don't think that's
normal no but uh um but generally yeah i've worked in bullpen environments where you know it's just
there's like there's like an air hockey table behind you and there's like people playing ping
pong next to you and and you know somebody else like there's always someone coming back or going
to something and it's just very distracting it's like hard to focus um
but then uh you know in the office environment it can feel a little lonely i mean
the situation i have now there's two of us in an office and then there's just like rows of offices
and so um like most people just have their doors open. So it's kind of like having the bullpen kind of style where you can just yell at somebody, like, through your doors and it kind of works.
It looks like from this article that the walls are made of glass.
That probably makes a tremendous difference.
You know, because, I mean, that way it's like you don't have the noise, but you can just easily just get somebody's attention, too.
But, yeah, this is very hard there's no clear answer they all seem to have their ups and
downs which one's your favorite is it your favorite was the office yeah having an office
with like four four to six people more than six just gets too many office that's a it's not a
normal i mean it's a bit it's just, I mean, a room, right?
Like, offices.
Oh, I see.
So, like, I can have up to six people.
I think when you get under, if you just have, like, one or two, I think there is, like you're saying, for now, people might have their door open.
But if the, it's very hard to control, right?
Suddenly the culture could just become everyone has their door closed.
And then you lose all of that right um versus having your immediate team which you it's really hard to work with a team of more than
you know six people like it's not hard but like you begin to end up with naturally some sort of
sub teaming happening yeah right and so i think to me that that is the thing when you have the
big open spaces people it's like open on headphones it's like well a you can still come up and talk to me and b if i have headphones all the time why am i not
just at home like yeah exactly i can't hear these dynamic conversations the thing about the office
is like when you really need a focus you can close the door and that's just kind of like the universal
sign for like i'm in the zone right now you know and like provided that like sort of you manage your door
like you know responsibly then that's like that that's like a tremendous benefit yeah um yeah so
the next article is react native this is so freaking exciting because I've been wanting
something like this forever um so I'll tell you a little bit of history. So, so well, first React Native is the React.js
kind of paradigm, but applied to native. And so I'll tell you what that means. So,
you know, we just, we were talking before the show a little bit about kind of,
you know, web and just how like HTML and JavaScript and CSS, these things have
come such a long way and there's just so much infrastructure around them. And the browsers
themselves are so complex and so efficient that laying out, you know, laying out divs and, you
know, getting good spacing and things like that, putting images in the right space, loading pages fast,
etc. Right. It's just such a beautiful piece of infrastructure. And that making things for the
web, especially, you know, things where you just want to display a lot of data or things where you
want some kind of interactive form or something like that. It's just nothing can really beat it.
On top of that, if you make a website, you make it for everybody, right? I mean,
with a little bit of good CSS, you can make a website and it can work on mobile and on desktop and it just kind of magically works everywhere. And with respect to desktop, it actually like
looks and feels good on everyone's desktop.
Mobile, not so much, right?
So, you know, originally Facebook tried to do the whole HTML5 app,
where they basically just took the Facebook website and, you know,
just from a tech standpoint, like crushed it into an app where, you know,
when you started Facebook, it looked like you're going to some native app but it's really just taking you to a web page where you know the address bar and other things
are hidden so it just it feels like it feels like an app but you're really you're on the internet
um and the thing about it is on native you know and we could just argue this to death like like
why is like whether this is a good idea
or whether this can change if it's like fundamental or not but the reality is the web experience on
native sucks right like the android browser the the chrome on ios and on android and webkit
all of it is kind of terrible um and that's why facebook bailed on the you know web the web app app
and uh i wouldn't say it's terrible it's terrible if you're trying to use like what we now accommodate
as like an app like web app apps on those browsers are terrible let me think about that
i make that too many apps in a row so so like gmail like gmail like i
don't my gmail app it is a website but it's really an app um and to use that on those browsers is not
a good experience for me but like going to a blog for instance like i think the normal ones are fine
i actually don't like the apps that are like forum readers. They just don't work well for me. Yeah, that's a good point.
So maybe what it is, I think actually to be more specific,
I think that web app apps are in the uncanny valley
where like, you know, they respond pretty well and everything.
But when you, you know, say flip a switch
and it's really just some kind of like JavaScript mock of what a native switch would look and feel like, it behaves just slightly different.
And it's different enough that it makes you hate yourself.
It's in that uncanny.
It's almost like if you get it like a completely different experience on the web, you're much better off than trying to make it feel like a native app, you know?
Anyways, you don't have to do any of that nonsense, because there's React Native now.
It just came out. And so the idea is, similar to how React.js is this JavaScript library that
lets you build a bunch of widgets programmatically.
And as the name suggests, all the widgets are reactive.
So if I wanted to make, say, a chat program, all I do is I say,
hey, here's a chat widget.
It's backed by this array.
Hey, here's a button widget.
It's, you know, when you press it, this function gets called.
And then whenever you press the button, the function gets called. That's pretty clear. But also whenever that array changes, it re-renders your chat window. So you don't have
to say something like, you know, listen for new chat messages when you get them, you know, clear
out the window and redraw it.
Like you just say, hey, look, this window is this chat array and it's just magically
done.
So React Native is the same thing for native and it's cross platform.
So what these guys have done is they've defined like, you know, like a button in this react javascript language and they've kept it
very similar to the web there are some differences of things which just didn't translate well
but some things like buttons are almost exactly the same so you define some button in react.js
and then on android you get a native android button then on i you get the iOS button and if you define a widget like map for example
you'll get the native
Apple maps on iOS and you'll get the native
Google maps on Android
so they try their best to do the right thing there
and it's all reactive like I said
so you could have a map widget
and you can say okay I have this location variable
and whenever this location variable changes
recenter my map and it just magically works
so it's pretty cool
I don't think it's out yet
so just read some articles on it
Facebook put out some videos
and be ready yeah
that's right so our next article is windows 10 uh and the exciting thing everyone wants to talk
about about windows 10 is the fact that microsoft is moving to a free for consumers asterisk all
sorts of caveats potentially people whether that's true or not.
But the long story short is that it appears that Windows instead of,
or Microsoft, sorry, instead of trying to gain a lot of money from selling new versions of Windows and waiting for people to upgrade,
to try to make sure everyone's upgraded on to something
vaguely resembling the latest version,
as opposed to tons of people still running Windows XP,
is to offer windows
10 free as an upgrade to people who have i think at least windows 7 if i read correctly that's right
yeah so if you have windows 7 or later license you can upgrade to windows 10 for free and then
it looks like they're moving towards uh updating again for free so instead of having very long
lasting os's it sounds like their intention is to move to kind of a more frequent cycle.
Right.
And then that way that they can, again, push features and keep people on something akin to what you get on Android or iOS, right?
Instead of your computer just coming with an OS and just sticking with it.
OSX does something similar, right?
Like they update
yeah what is about once a year or once every other year um it depends more much more frequent than
windows um from microsoft and so everyone's kind of assumed to be running something that is pretty
new yeah it's pretty cool i mean there's a chicken and egg problem that this solves right which is
um developers are sitting on windows xp or windows 7 um they're making apps using that so of course
they're really interested in backwards compatibility and then you know you end up with
no one having any reason to update um like you know as soon as a program
like if if tomorrow steam told me hey you know to run steam you need to have windows 10 well then
shoot i'm going on windows 10 i mean i have no choice and so um that's sort of i think the
environment that they want to cultivate one where you know there's no reason for people who already have windows to not be on the latest
and then once you know say 90 of people running windows are running 10 then developers can start
saying well why am i going to support seven if you could just go to 10 for free and everyone's
done it so then you know you'll see developers dropping support for older versions
of windows um and that will you know force more people to upgrade and so on and so forth so
and i think it's it's you know the other strategic thing for microsoft is they want to start
getting into this cloud business like they want to compete with dropbox on you know cloud sharing
and things like that and so you so let's say something else comes out
that's like Dropbox but different.
Like it's a service.
It's like some kind of desktop app you download.
But instead of synchronizing your files,
it synchronizes your contacts.
So it's contact box.
Then if Microsoft sees, contacts okay so it's it's it's contact box then like uh you know if windows if microsoft sees oh
that's a pretty cool desktop app they could bake it into windows 11 they can come up with microsoft
contact box and it's part of the os and they can kind of run these people out which is something
they haven't been able to do in the past so strategically it's a really good decision
um it probably should have been made like 20 years ago, but I guess we'll let it slide.
So then the next article, this is pretty cool.
I never knew this existed.
So if you're writing JavaScript right now on the web you're writing um ecma script 5 and so the deal is you know ecma
script is like the formal um definition of javascript like the formal name of that language
and most people are writing 5 um now they're coming out with the JavaScript version 6.
Actually, it's already out.
But the problem is, again, you have this adoption problem.
If I write it in 6, 90% of the people aren't going to be able to use my website.
And so that's a problem.
So they wrote this transpiler.
So basically, you can write your code as if everyone's running the latest bleeding edge, you know, Chrome or Firefox.
And for people who aren't, they can run the JavaScript 5 version of your code.
And maybe it's a little slower or something like that, but functionally, it should do exactly the same thing.
And it allows you to sort of make that transition and start writing JavaScript 6 now.
It's pretty cool.
Very nice.
Time for book of the show.
Book, book, book, book of the show.
Book of the show.
My book of the show,
it's kind of a little different than usual,
but I actually found out that there's this magazine
called Game Developer Magazine and they stopped printing issues, than usual but i actually found out that there's this magazine called game developer magazine
and uh they stopped printing issues i think like five six years ago um and you but you can actually
get all of the issues for free so it's pretty cool i mean you can just flip through um literally any
issue of this magazine you can just download it and flip through a pdf of it so um if you're into game
development or you're uh um into sort of the history of of game development things like that
this is a pretty cool uh resource to check out i think i remember reading that magazine in college
i think there was like issues around the computer science building somewhere uh nice everybody wanted to be a
game developer in college so yeah that's true if you ask around software engineers like almost
everybody says oh i got into it because i wanted to make games well i should have uh specified yeah
in the computer science area i don't think if you walk to random pieces of campus it probably would
have said that yeah right i didn't
go to those places i would have just gotten beat up so yeah that's true because sports uh sports um
sports injury majors just crush us uh that's a topic for another time um my book of the week
is a book of the show is misborn, the final empire by Brandon Sanderson,
which I've recommended.
I think at least one other book of his before.
And this is a book I just finished.
It was really good.
I really enjoyed it.
Oh yeah.
I guess it's considered fantasy.
Okay.
But it was very suspenseful.
It's a little long,
but not the longest way.
But it,
it just,
for whatever reason,
it was like very action packed on my edge of my seat. it it just for whatever reason it's like very action-packed
on my edge of my seat and it was like really enjoying it is it part of like a series or
could you just read this one so uh you could just read this one but when you get to the end you will
run to read the next one and i think it's the beginning of a series i think there's three in
the series and then i think maybe a prequel or something that they wrote later um but this is
the first one i read uh and i try not to read too much even like the titles of like other books in a series
because i'm always afraid it's going to be like a spoiler yeah yeah right and i don't want to say
too much about this book either um but it involves uh there's some stuff about like a little bit of
like alchemy almost in it um which is kind of cool okay so but i very very much enjoyed this book and i just
started on the second one like i went to start listening to another book uh so i listened to a
lot of my books on audio during my commute and so um i went to start like you know reading listening
to another book and uh i was just like no i want to go find out what happens i like started this book the second one
of this series so it was that good cool do you use the uh what is it called um the books on tape
audible yeah okay yeah i want to look into that i don't uh i've never used it before but now i
started taking the shuttle um just because it's uh it's just kind of more
convenient but it does make the commute longer because that's the stuff so yeah i'm looking for
something to do yeah um i totally do that so the library also is a good source of audiobooks
oh cool even online so they have books on cd um which of course you can do. Or they have a lot of them.
I think it's called Overdrive, which is like essentially Audible,
but like for the library.
Okay.
And so you should check that out.
I read a lot of specifically like science fiction,
and so they tend not to have the books I'm really interested in.
But I do browse every so often.
And there are good books on there.
Cool.
Cool.
Check it out um time for
all right of the show it's a tool of the show my tool of the show i can't believe that i haven't
done this one already but i flipped through the archives and it's the first time but this is
probably my favorite tool ever um it's MELD ever. It is MELD
and it is amazing.
So basically, just take
whatever you know about diff
tools and throw it out the window.
Because MELD just makes it so much easier.
So MELD is a diff tool.
It compares
two or three
files and it will show you the differences either between
the two or among the three files so you can you can hook meld into git so if you
ever do like a git diff or a git merge meld will just automatically come up and
take over it's pretty awesome.
If you do like a git merge and there's a merge conflict,
meld will pop up and the left panel will show what you have.
The right panel will show what is on the remote
and the middle will show what git tried to do automatically,
which, you know, will be like somewhere in the middle, right?
But it's pretty cool.
You can also, if you are in a Git repository, you can just type meld, and it will automatically
diff what you have, like your working copy against the repository, like against head.
So if you want to do, instead of doing a a git diff um you get like a graphical git diff
kind of for free um it's pretty awesome um it has a couple of issues on mac um it's kind of
there's some there's some problems there i'm actually i want to put together like a meld mac
package the issue is right now meld uses the x quartz which is like
max x11 kind of rendering interface um but it can use regular quartz it just has to be recompiled so
um i'll probably put together like a package for that or something maybe try and like put it in
homebrew or something like that but But even the X11 is pretty decent.
And if you're on Linux or Windows, it just magically works.
Yep.
This is what I use.
I use MELD.
Oh, you use MELD?
Nice.
It's good stuff.
Although I think when I do git diff, it just gives me the –
I have to give diff tool
we'll bring it up yeah you have to do actually you have to do diff tool and then you have to pass
dash dash dir dash diff oh so i don't type that oh yeah so the way you know to diff tool
it it assumes that whatever tool you're using can only diff one file at a time.
So it keeps popping up.
Yeah, it just keeps saying yes or no.
So if you do dash dash dir diff, then it knows to take the entire diff and put it in mail.
Oh, I'm going to try that tomorrow because I use this tool every day.
Yeah, yeah.
And if you configure your git in a certain way then you don't even
have to do the diff tool or the deer diff i mean i'm gonna try that as well it's just it just
magically works nice these are valuable tips jason and you just give them away for free
for free can you believe it actually it costs money to give them away like we we pay for the bandwidth so
other people can learn this for free my tool of the show is not nearly as useful but it is guaranteed
to uh no it's not guaranteed to anything it will waste time this is an ios game i think they said
they're coming out for android as well uh i should be more diligent about looking that up i do most of my quote unquote
video gaming uh on my ipad uh in the evenings and so um this is called space marshals uh and this is
a game for the ipad uh and i think iphone too but i know definitely on the ipad that's where i play
on ios and it is a tactical shooter so um a dual stick tactical
shooter and rather than running around and trying to shoot lots of things um you're it's kind of
almost like metal gear solid and like that you're trying to crouch and hide and then you're trying
to avoid the attention of the guards and you can do things like throw rocks that make noises and then the
guards will walk over to see what's happening and then you can ambush them from behind
but if you shoot them with a loud gun it'll alert the other guards so then you may want to choose
like a quiet gun that does less damage but it's quiet and so there's all sorts of interesting
trades and mechanisms for encouraging you to replay the level and do better and you get a
score and based on how good you do you get rewards and so they just announced and I'm very
excited that they're coming out the first one is only I think 10 or 14
levels doesn't take terribly long and it was kind of like oh this is a little bit
short but they're gonna come out with the second set of levels as a free
update to the game. Oh, nice.
It'll get more gameplay, which will be awesome.
So is this one of these pay-to-win kind of games?
No.
I think you just buy the game,
and then I don't think you can pay anything more.
Oh, great. That's perfect.
Yeah.
I'm not a big in-app purchase person.
No.
I've gotten to the point now where if there's in-app purchases i'll almost never install it like i'm it has to be something where it's like content you know like buy another
level or something then i'll think about it but if i go to the in-app purchases and it's like
any kind of bs currency like if there's if if it's like there are rubies 500 rubies six
yeah i'm like forget it i'm out
uh but i really enjoyed this game this game's a lot of fun uh and it's good too because check
this out that the dual stick shooter thing a lot of a lot of games i don't feel like go well on the
tablets um just because like precision nature but due to the pacing of this one, I feel like it works really well.
So definitely check it out.
Yeah, do you think it will work on the phone?
Or is it the kind of, like, even if they built it for the phone,
would the user interface, like, with the dual analog sticks work?
Except for your, like, finger covering up a decent-sized portion of the screen,
I think it would work.
Cool. Yeah, I'll have to check it out
all right time for our discussion of unity unity um yeah so first to talk about unity we have to
talk about game engines of which unity is one um i know so know. So a lot of people, you know,
when they first try to make a game,
I know I did this.
You probably did this too, Patrick.
You try to, you don't use a game engine.
Like when I, my first game that I made,
I used just like, I guess like Visual Basic or something.
I think it was like C++, but it was like the GDI something or i think it was like c++ but it was like the uh
gdi that's what it was called like it's where like the windows you actually like it was like
a desktop application where i was like drawing circles and stuff on like an actual you know
desktop window yeah i was right i was doing like raw open gl calls oh so you're like moving on up already yeah so what i learned is that it just it
there was constant flickering because the circles weren't being drawn um and erased at the same rate
as the monitor was refreshing so you know you'd have a circle erased and before you could redraw
it the monitor would refresh and so sometimes the circle was there sometimes have a circle erased and before you could redraw it, the monitor would refresh.
And so sometimes the circle was there, sometimes it wasn't.
And so you just end up with all these weird issues that, you know, you don't really think about.
You know, when you're designing a website or something like that, you don't think about weird things like flickering and frames per second and things like that.
Because the browser is kind of doing all that for you and because things aren't really moving around that fast and if they are you're using flash or
something like that um but when you deal with a game engine or when dealing with a game where
there's a lot of objects moving all over the place maybe there's a camera and the camera you know is
moving your eyes are effectively moving which means the whole universe is going in
the other direction um that's where you end up with all these weird artifacts and slowness and
things like that and so game engines are these sort of low level you know drawing music playing, you know, physics, engines that can run very quickly
and can give people sort of immediate feedback in a world where things are constantly changing.
Yeah, I think the difference is like when you're writing, you know, a Windows application or a Mac application,
you have a UI, but it's just a basically a bunch of
event handlers that fire when the user does something versus in a game yeah there's stuff
going on all the time right like creatures are moving around the enemies are doing something
like stuff is always happening right yeah that's right. So typically games are designed to run at 60 FPS.
I know that like when they do backporting,
so if you try and run Grand Theft Auto 4 on Xbox 360,
it runs at 30 FPS.
But for the most part, things run at 60 FPS.
And what that means is that's 60 frames per second.
So you have 1 60th of a second to do everything like you know
everything Patrick was talking about like all those people they have to move
like take a little bit of a step forward you know all the cars they have to move
a little bit forward they all have to make noise you know the camera if you're
moving forward that means the whole world has to move backwards to give you
the feeling of going forward and all that has to happen and get pushed to the graphics card the sound card and all those other
peripherals in 16 milliseconds which is which is which is no time at all um so this would be really
hard for you to do by uh you know um by scratch it would be it would be pretty it'd be pretty much impossible
no you can't do it but what you end up doing is recreating most of what a game engine provides
you end up writing it yourself right like this is what happened to me i wrote this game
and i was like oh i need to handle the death sequence of like the character and i was like oh
this is something later i've realized
like oh game engines just have like these kinds of things thought out like there's a level start
and a level end um or a game start and a game end versus me like i had to write like oh i'm
in a splash screen now i'm in the game um yeah absolutely i mean i think that um you know if you actually i don't think it's even possible
like if you just if you wanted to make a game and you want it to be like very interactive 3d
things like that and run in real time but not use like open gl or direct x it's pretty much
impossible because those are the ways, those are the APIs that
give you access to the graphics card and OpenAL or DirectSound, that's how you get access
to the sound card.
Otherwise, you just, you're not able to use, you know, all of the hardware on the machine
and you can't, you know, you can't run fast enough.
So, yeah, so you need very special APIs,
which give you a ton of, like, control,
an incredible amount of control so that you can do things very quickly. But they also will allow you to do very bad things.
If you, you know, and OpenGL is a lot better now.
But actually, there was a time where i gave patrick
remember i gave you a version of maim this is we were traveling for work yes i do and uh i gave
patrick a version of maim that had some bad opengl code and his screen flipped in other words like
like his screen rotated 90 degrees and it stayed that way
i had to reboot even when he closed the program his laptop screen like he had to turn his head
to read everything until he shut down so i mean that's the kind of control you get but it but it
comes at a big price um the other thing that a game engine is really like uh known for is is
which patrick alluded to earlier is the content creation pipeline.
So you might have an artist or a game designer, and he's not a programmer, right?
I mean, he's just somebody who knows a lot about games and sort of how to, you know, where to reward the player for exploring and how to create like nice niches how to make them buy
that in in-game currency jason hates yeah how to buy like an extra 100 twiddly bits um like where
to create kind of funnels where you can create a lot of action and force people to have to
experience that action so there's not like large parts of the game that people aren't experiencing
um so they know a lot about sort of the game design and the storytelling, but they know nothing about coding.
And so there needs to be a way for those people to take the scripts that you write for them and inject them into the game using some kind of nice graphical environment. And there has to be a way for the artists to take pictures of backdrops,
take little 3D models
that they're making in some completely separate
third-party program,
and feed that into your game engine.
Someone might make a death animation in Blender
and then go to 3D Studio Max
to make a dialogue animation. And somehow these things need to 3D Studio Max to make like a dialogue animation and somehow
these things need to flow into your game engine so you know commercial or popular you know open
source game engines will have a content creation pipeline yeah even how to take a model and like
get the polygon drawing that OpenGL needs to do right like this is something that you have to code
by yourself when you're writing in OpenGL
or find an individual library for every aspect of it.
This is one of the pains for us was like,
what is a tool that we can integrate well
that allows us to use any 3D modeling program
to create a model of a boat and put it in the game
and not have to like draw every individual polygon?
Yeah, exactly. Yep. And then you get into texturing and put it in the game and not have to like draw every individual polygon yeah exactly yeah
and then you get into texturing and there's just there's a whole world full of of um
like you know content related tools and things like that that you know that a game engine has
to support um there's some other kind of more modular parts of the game engine, you know, AI, you know,
pathfinding or some kind of state machine.
There's physics engines, you know, like Angry Birds where you launch the bird and it goes
kind of flying through the air and crashes and reacts kind of like a ping pong or sorry,
like a pool table, like a billiards table.
So all of these are kind of you know a game engine will typically
have your modules for all of these other tasks um so now we've kind of described game engines
let's kind of walk through sort of a history of game engines um well maybe a little less of a
history more of like an overview yeah that's true history is boring
like a chronological yeah there's a ton of game engines that came out in the past like i mean
the id soft like id one id two id three the games like you know duke nukem and all of those
there's engines behind all of those but um it would take us all day to cover the first game
engine i ever used and this is a pretty high level uh game engine it's called
like rpg maker and this is i think still like they still make versions of it to today and that's
basically if there are a lot of rpg games which are really similar like japanese rpgs of a certain
era think like final fantasy three four five like that that time range um yeah or what would that be like dragon quest four uh
three like six i think up to like maybe six so like before kind of well at least the ones i was
using before 3d they're all very similar you've got some guy on a world map and he kind of wanders
around and occasionally he gets a random fight and then occasionally he like goes into some town
and then there's like a more detailed zelda-esque like detailed city map and he goes around and typically there aren't random
fights there or there may be or whatever um and so what it does is is it created a very generic
kind of game like this but then it allowed you to make the sprite for your hero and the sprite for
your party and how many people would you allow in your party and when you go into the town here's a
character what do they look like what script do they follow and you would type
out the script and you know here's what tiles do you want to use for the city um and they had like
a lot of i guess template games which you could start with and then kind of like modify and it
was almost like a choose your own adventure to build an rpg make rpg and then at the end of it
like you could start with an example project and then at the end of it like you could start with
an example project and just change the name of the characters or you know change your own uh
like sort of like leveling system i feel like that's that's a big part of these games is sort
of like how the character progression yeah so i i mean i'm trying to remember now correctly but
at a minimum like you could specify kind of like how you wanted like this monster gives this many experience points so of course like the first thing you do
because you want to be awesome is like this monster has like one health and like a million
experience points right that doesn't make for like a fun game but that's what you do because it's fun
um yeah and so stuff like that but then you know ultimately at the time like i wasn't really
into programming uh so this is like pretty early on and so i didn't get into the whole like
scripting part of it as much but that's a big aspect as well like how do you do leveling like
well here's your generic leveling system but if you want to write your own you can too
um yeah right i i played this i had this one called Unlimited Adventures
which is very similar to
RPG Maker but it was
from the Forgotten Realms people
so it was all like the Dungeons and Dragons
rule base and the first thing
I did I made this
thing where like you
walk to the town and when you enter
the town there was a huge battle
between these like
400 city guards versus
like 120 dragons and uh and the battle took like three hours and i was like you know this is
totally awesome and i gave it to a friend of mine and he's like yeah i let that run overnight and i
came back and it was you know like my computer had crashed so it was like i realized it was like actually really
hard to make a good game like one that's true like as a game developer you get caught up in
like the mechanics and things like that and then you end up like kind of self-absorbed then you
give it to somebody who you know isn't like hasn't been like walking through the development process
and they're like yeah this is crap yeah yeah um and so similar to the description rpg maker
i guess in a way is i remember playing all the lucas arts point and click adventures um yeah
and these all run on a similar that's called scum oh the name just escaped me it's like scripting for
script creation utility for maniac mansion i looked it up i cheated um okay and so these were
if you remember like the indiana jones and the fate of atlantis i remember playing this game and
it was so hard i had to like barely just got internet i would like go on the internet and
look up like how do you get past this level uh grim fandango um what are those like the monkey island uh games these were all
games that were written in this uh scum language and you would be able to provide like here's
the verbs i want to use here's the nouns i want to use and here's the picture of the town
that I want this adventure to take place and where the special areas are yeah so
I've used scum VM a little bit they had a game that was free or I guess like GPL
or something on scum VM called like was it like a flight of the amazon queen or something like
that and there was another one called beneath the steel sky have you played these ones yes
yes yeah yeah that was pretty cool it's pretty amazing um so you can write your own uh using the
same same engine is it hard to make like i mean is it some weird format or is it do they have a scum vm maker i've not actually tried
that one so i don't know yeah i should i'll check it out i should i should try one i guess we should
make a crazy adventure game where you have to survive silicon valley i i think you should have
to survive having uh two kids running around the house causing havoc that's that's like
playing on impossible find the tv remote that one of your children is deliberately hiding because
they think it's funny use belt on no i'm just uh low level game engines uh yeah seriously these don't ever do that okay
low level game engine um so so we talked about high level you know rpg maker scum vm things like
that and we'll talk about unity but um a lot of these like they don't give you kind of raw access right so um you know
in say they're not generic you can't use them to make any kind of game you want
right the ones we've talked about so far yeah exactly yeah like if you
um if you want to say like you can't make a flight simulator in rpg maker yeah exactly you know it
doesn't make sense so i mean at the low level like what is every game doing um nowadays right
it's doing one of two things either drawing triangles in 3d that are getting kind of crushed
into 2d by the gpu getting rasterized um or they're drawing sprites in 2D,
so which are just kind of, you know, pictures that they're drawing in 2D,
or some combination of the two, right?
Same thing with audio. What are you doing?
You're taking a variety of audio signals that are positioned in either 2D or 3D,
and then you are muxing them together, are mixing them together into one signal and then sending that to an
audio processor.
So what these low-level engines do is they try to abstract as much as possible while
still giving you the freedom to do what we just described like to make any game you could
ever want um so the most common one is sdl so sdl is um you know has things like you know add audio
track or you know draw 2d box draw sprite move sprite things like that and then under the hood they've written what that means
you know in a hundred different platforms so if you draw a box on windows or if you draw a box
on linux or on the iphone or on the you know android phone or whatever there's a there's a
line of code that handles that so sdl just think of it as like the same draw box function
implemented like 30 different ways
so that when you call it, you don't have to think about it.
SMFL is similar.
It's a little bit more modern, but it's the same idea.
There's also this combination of three libraries, ogre, ois, and openal.
Ogre does graphics, ois does input, and openal does sound. When you put the
three of them together you have kind of the same thing. There's hacks which is
very similar and then something is becoming much more popular now is the whole HTML5 canvas thing, which is pretty cool.
So, you know, in canvas, you can say like raw things like draw a circle, move a circle, things like that.
And then it will sort of do the right thing.
So on the iPhone, the HTML5 canvas will call whatever the, you know know low level draw circle function is for the iphone
so um yeah the low level ones are cool i mean it's it's pretty clear like if you use a low
level as the name suggests you're going to be writing a lot more code i mean talking about like
the uh content creation stuff we mentioned earlier you're
going to be doing all of that from scratch and it's going to take you know months and months
but you know that's the fun part yeah it's true but if you want to make something like say
minecraft which is just very very different like uh you know minecraft it's it's the world is made
up of like a billion of those little cubes and you can't just draw a billion cubes in 16 milliseconds.
It just doesn't work.
So you have to be really clever about which cubes I draw and stuff like that.
And so whenever you need that much kind of precise control,
then you have to use a low-level engine.
And that's why you don't see a lot of like really fancy artwork
and things like that in minecraft because they um you can't just take some model that you made in like blender with
the animations and everything and just put it in minecraft and it magically worked
um yeah if you're going to do everything you need a disproportionately large team
the more you're going to do right if you're going to do everything from scratch right um you need a disproportionately large team the more you're gonna do right if you're gonna do
everything from scratch right um you need more and more people and then more people to handle the
the interactions between them yeah exactly so you end up with like 100 person game teams
yeah can you imagine like a hundred people all working to make one is that reasonable i mean i
feel like i saw
something about some of the games now getting to that size yeah i totally believe it but uh that's
pretty wild i mean there's i think there's the other day i was uh talking to a friend of mine
who worked at ea and he said there was there's like a handful of people who work on the madden
football and all they do is the grass like they try and make the grass look as realistic as possible.
But there's like an army of people just for the grass.
So it happens.
Yeah, like you said, it's not surprising.
Yeah.
So, okay, Unity.
So Unity is a high level game engine. So it's doing a lot of work for you.
The basic premise behind Unity is that you have this thing called prefabs.
And the idea is this, let's say you're making some Grand Theft Auto level, right?
So you have a bunch of streets and at the end of every street you have a traffic light.
Well, you don't want to have to create 10 billion traffic lights.
And then, oh, I don't really like the way the traffic light looks,
so I have to go and change all of them, and it would take forever.
So you have this idea called a prefab, where you sort of design one traffic light that you know kind of looks
really well and captures as much of the essence of all the traffic lights as you can capture
and then you just instantiate that prefab all over the place and so then if later on if your
boss comes to you and says hey i really want the traffic lights to be orange instead of yellow, you could
change the prefab and then all of the objects in your world magically get corrected.
So that's kind of the premise behind Unity.
So you have prefabs, you have game objects, which are instances of prefabs, and then you
can assign scripts to either.
So you can say, you know know all traffic lights will use this
script um and so in a way it's very kind of functional because you don't really there's
no guarantees on the order of the scripts and things like that especially if you're creating
objects dynamically and so you know there's some like update function that captures how traffic lights interact with things around them.
Time.
And move over time.
Yeah, change over time.
Yeah, yeah.
And so that function just kind of runs on the traffic lights.
All kind of work independently. so when you move to one of these uh game engines but specifically unity one of the things that
jason was talking about before is that you gain cross-platformness to to say that way uh and so
that is that if you are running on desktop and you decide you want to move to ios because you
heard that was the hotness or to android you can you can take your game that's mostly developed and with very little work
just run it on the others because you're working at a higher level and so those abstractions handle
moving to the other platforms that's right that's right and even you can even write in three
different languages um and it all just kind of gets compiled down to the same thing. So Unity has UnityScript, which is kind of like JavaScript,
but it doesn't have all the same functions, all the same features of JavaScript,
and the syntax is a little different.
There's Unity C Sharp, which is exactly C Sharp in terms of syntax,
but not all the libraries from C Sharp are there.
It's kind of like a subset
of c-sharp and then there's boo which is this language is inspired by python as a syntax that's
similar to python but uh um but again it's only for unity um and so it's pretty cool you can you
know you can have a team of people and they don't necessarily all have to be writing in the same
language although it'd probably be better if everyone was consistent but you can have a you know unity script script
for your traffic light that you know calls a unity c sharp script to say is there anyone around me
like is there anyone within 100 meters and if there is then the traffic light yells at them or something um so i thought you know it was
uh it was pretty cool how like you um can kind of design all these scripts independently and
then see sort of i think this is called emergent behavior where it's sort of like the sum is
greater than you know or the the whole is greater than the sum of the parts.
And so it's like you design this traffic light
and it kind of tries to react to anything that comes near it.
And then, you know, you design cars, you design people,
and eventually you end up with this thing that feels very lifelike
and you end up with these kind of very complex behaviors
that you could have never really scripted. Another thing about Unity, it's pretty cool. It has all of those
things we talked about. It has, you know, the content creation. You can easily take models
from Blender, Maya, 3D Studio and import them into Unity. And also a lot of people have written plugins for Unity.
Some of them cost money. Some of them are free. But, you know, someone even wrote like a Minecraft
kind of plugin. Somebody else wrote a plugin for doing like toon shading. So if you want your game
to look like, you know, it's a cartoon. And so, you know, the plugins are really what's going to get you closer
to one of these low-level game engines.
When you need to do something that Unity can't handle,
then you can rely on one of these plugins,
so you're not just totally lost.
All of those plugins and the framework to handle plugins
and the cross-compatibility do give you a productivity boost.
So instead of spending time creating them all on your own
and essentially creating your own version of those things,
you are able to offload that to people who have already done it.
And that saves you time and gets you down to the cool part
about figuring out your awesome AI or your witty story
or your amazing animations.
But yeah, but that comes at a price.
So, you know, all those people...
Cost in US dollars.
That's right.
All those people who made all of those low-level things
want to get paid.
And so you can use the base Unity for free,
but it's pretty limiting.
I mean, you can't really use plugins.
So even if someone else made a plugin that fixes your problem
or that adds some functionality to Unity that you need,
you can't use it because you only have the basic.
To use plugins or to make your own plugins,
you have to get Unity Pro, which it's $1,500 base.
And then if you want to do Android, it's another $1,500. If you want to do Android, it's another $1,500.
If you want to do iOS, it's another $1,500.
So to publish a game on Android, iOS, and desktop with Unity Pro,
you have to spend $4,500, which is pretty steep.
I mean, hopefully you can make that money back in sales,
but that's rather tough, I mean.
So is it possible with, so you looked more at this than me but the if you have just the unity base could you make a game maybe you couldn't release on ios because of this fee but is it possible to
make a game on the desktop that would be actually like people would pay to play um yeah you definitely could do it um i think you might even be able to make
a unity so the unity pro for ios costs money but you can use the unity basic on any of the
platforms for free so you can even make an android game and charge for it um the only thing is other
than you're not getting the plug-ins
and a bunch of other features like skeletal animation
and some things like that,
or like this inverse kinematics.
But other than that, you have a Unity splash screen.
So when someone launches your app,
the first thing they'll see is like powered by Unity
for a few seconds, which, you know, that's not too bad.
And if my app makes it to the big leagues and sells a million copies, they'll see is like powered by unity for a few seconds which you know that's not too bad and if
my app makes it into the big leagues and sells a million copies do i owe some fee per copy to i
don't think it's is it per copy i know that uh if you sell more than i think it's like 100 grand
or maybe it's even 10 grand then you have to buy pro so part of their license says you can't make more than a certain amount.
But I don't think there's any kind of rev share
model or anything like that.
So I think that
once you pay for the Pro,
and I'm just double checking now.
Yeah, once you pay for the Pro,
you own it. If you make a billion dollars,
it's fine.
But you could do it, you could try it out, it if you make a billion dollars it's fine that's nice yeah so you could but you
could do it you could try it out and if you make a game you think is awesome you could ship it and
then when you get to a hundred thousand and you deal with it i guess that's a good problem to have
yeah yeah i mean if you can get away with unity basic then um yeah you can you can always push
to put the game out and then retroactively pay them.
I'm sure they wouldn't mind.
But one thing about Unity is that for what you get, it's actually remarkably cheap.
Like the Unreal Engine, I think is like $100,000 or something ridiculous.
Unreal Engine pricing.
So if you want Unreal engine 4 it is it doesn't even say so i know that uh the github student package did we talk about that last time
if you're a student and you register with the dot edu address you can go to like github and
have like all these free services oh yeah that's right trial things um
i thought we talked about it but if we didn't you should check it out i think we talked about it
like three or four episodes ago yeah there i think they offer uh i know they offer i think an unreal
engine uh license or something you can use for small time stuff uh and getting a taste for it as part of that package oh okay nice so ironically uh unreal
4 they just changed their pricing model recently and now it's 20 per month plus five percent of
your revenue ah okay so now it's that's kind of like an interesting dynamic i mean because i mean five percent is
really nothing right like even even if you made a hundred thousand dollars in revenue then uh
that's just five grand which is the price of unity for all of the uh oh yeah os's
yeah so i'm looking at it now. If you are a student,
which presumably probably means you have a.edu email address,
that's typically how they do that.
The GitHub student pack includes a subscription to Unreal Engine 4.
Gotcha.
So you don't have to pay the $20 a month.
I don't know what happens if you make like a billion dollars.
I don't know.
Wow, that's amazing.
Actually, the Unreal Engine, you get the entire source code for the engine,
which is something you don't get with Unity, even with the pro version,
which is pretty cool.
I mean, if you ever wanted to know how like a game engine works,
you could just get this subscription for a month and then cancel it and
for 20 bucks i mean even if you're not a student then for 20 bucks you get the source code for
ue4 and you can check out how it works it's pretty amazing
cool all right well i think that's a wrap thanks Thanks to you all for listening. Yeah, so, you know, short story is Unity is pretty awesome.
It takes some getting used to.
It's definitely not, it's definitely intended for, you know, game designers.
And I learned very quickly that I'm not a game designer.
So you had a bunch of stick figures running around the screen.
Yeah, it didn't feel natural to me.
I kind of wanted, like, I'm like, oh, well oh how am i going to design this like crazy particle engine and i
realized like this is really meant for like building a gigantic level and having a bunch of
like experiences and i was thinking about more in terms of like like i was thinking about like a
board game engine that would like play any board game and like kind
of like encode the rules in a script and it's just like I was trying to like put a square peg in a
round hole but but for people who are like designing a real game and have kind of a background in game
design I think this is an amazing tool so cool all right until next time yeah have a good one guys catch you later the intro music
is axo by biner pilot programming throwdown is distributed under a creative commons attribution
share alike 2.0 license you're free to share copy distribute transmit the work to remix adapt the work but you must provide attribution to
Patrick and I and share alike in kind