WEBVTT

1
00:00:01.600 --> 00:00:05.600
>> Hello and welcome to the Haskell weekly
podcast as you might have guessed this

2
00:00:05.600 --> 00:00:09.400
show is about Haskell, which is a purely
functional programming language.

3
00:00:09.400 --> 00:00:13.900
I'm your host Dustin Segers and
I'm an engineer here at IT Pro TV.

4
00:00:13.900 --> 00:00:15.200
>> Hi, I'm Cody Goodman.

5
00:00:15.200 --> 00:00:18.400
I'm a senior engineer here at IT Pro TV.

6
00:00:18.400 --> 00:00:20.400
What are we talking about today Dustin?

7
00:00:20.400 --> 00:00:23.400
>> We're talking about game
development and Haskell.

8
00:00:23.400 --> 00:00:24.800
I thought it would be cool to

9
00:00:25.800 --> 00:00:29.100
kind of bring together my
love of game development and

10
00:00:29.100 --> 00:00:34.100
video games in general and Haskell, which
is what I use daily here at IT Pro TV.

11
00:00:34.100 --> 00:00:36.400
I actually have a few questions for
you and

12
00:00:36.400 --> 00:00:41.300
I figured it would be cool to kind of
just look into the Haskell Game Dev

13
00:00:41.300 --> 00:00:44.300
community and space and
see what all was out there.

14
00:00:44.300 --> 00:00:45.300
>> Yeah.

15
00:00:45.300 --> 00:00:48.400
I think a lot of people are in
your position, you know,

16
00:00:48.400 --> 00:00:52.500
if you browse the Haskell subreddit,
you'll see occasionally questions about

17
00:00:52.500 --> 00:00:56.800
people want to make games and
people frustrated trying to make games.

18
00:00:56.800 --> 00:00:59.900
So if you don't take the right path,
it can be pretty frustrating.

19
00:01:01.600 --> 00:01:04.376
One recommendation I've
seen over the years and

20
00:01:04.376 --> 00:01:08.673
tried a little myself is to start
out with a 2D library called gloss.

21
00:01:08.673 --> 00:01:09.336
>> Gotcha.

22
00:01:09.336 --> 00:01:10.459
Have you ever heard of it?

23
00:01:10.459 --> 00:01:13.200
>> Yeah actually are our lead engineer.

24
00:01:13.200 --> 00:01:17.600
I think he did a few just
very basic games using gloss.

25
00:01:17.600 --> 00:01:24.400
I heard it was super intuitive and
quick to get something up on the screen.

26
00:01:24.400 --> 00:01:25.400
>> Right, right.

27
00:01:25.400 --> 00:01:26.500
Yeah.
That's that's one of

28
00:01:26.500 --> 00:01:31.000
the reasons I recommend it and I think
a lot of other people recommend it is

29
00:01:31.000 --> 00:01:34.800
you can you can draw window and
draw a circle and a single line and

30
00:01:34.800 --> 00:01:39.500
it's all and you know plain English words
that you might be able to guess yourself.

31
00:01:39.500 --> 00:01:40.600
>> Nice.

32
00:01:40.600 --> 00:01:43.100
>> You know gloss is really
aimed at simplicity.

33
00:01:43.100 --> 00:01:48.000
There's a ton of tutorials available,
not just like basic tutorials,

34
00:01:48.000 --> 00:01:51.400
but tutorials of you know,
how do you make pong?

35
00:01:51.400 --> 00:01:52.000
>> Yeah.

36
00:01:52.000 --> 00:01:52.600
>> Right.

37
00:01:52.600 --> 00:01:58.100
It's more of an end to end thing which has
Haskells sorely lacking in other areas,

38
00:01:58.100 --> 00:02:02.300
but when you're just getting started,
it's a new paradigm, a new language.

39
00:02:02.300 --> 00:02:04.800
You you need you know
a little bit of hand-holding.

40
00:02:04.800 --> 00:02:09.199
You just get all the way from point A to
point B at least exactly least once.

41
00:02:10.800 --> 00:02:11.300
>> That's it.

42
00:02:11.300 --> 00:02:14.600
So gloss seems really
attractive to me in that aspect

43
00:02:14.600 --> 00:02:18.800
mainly because I'm not super
proficient at Haskell.

44
00:02:18.800 --> 00:02:24.200
I've only been doing it for
a little while, but I do enjoy it and

45
00:02:24.200 --> 00:02:28.700
I think I have more experience in
game development mainly as a hobby

46
00:02:30.200 --> 00:02:33.000
right versus you know
programming in Haskell.

47
00:02:33.000 --> 00:02:36.200
So I would like to merge both of them and

48
00:02:36.200 --> 00:02:39.300
gloss seems like a pretty good
pretty good way to do that.

49
00:02:39.300 --> 00:02:45.500
>> Yeah, and for people trying to merge
their game development experience or

50
00:02:45.500 --> 00:02:50.500
interest in their love Haskell,
you'll probably run into a functional

51
00:02:50.500 --> 00:02:54.600
reactive programming which you have few
are really in proficient in a school.

52
00:02:54.600 --> 00:02:59.100
It can be a bit of a mind Bender
wrap your head around that.

53
00:02:59.100 --> 00:03:02.000
>> Gotcha, yeah.
I actually just doing a little bit

54
00:03:02.000 --> 00:03:03.200
of research before this podcast.

55
00:03:03.200 --> 00:03:08.100
We stumbled upon FRP functional
reactive programming and

56
00:03:08.100 --> 00:03:13.100
then also just your classic mean
Iterating over your main game Loop.

57
00:03:14.400 --> 00:03:19.200
And do you have any like,
I guess a concise way,

58
00:03:19.200 --> 00:03:25.000
if you could explain functional reactive
programming to those who don't know?

59
00:03:25.000 --> 00:03:31.100
>> I didn't come up with the best
answer myself, but I looked around and

60
00:03:31.100 --> 00:03:36.800
hope I'd say the name right here T
cange Elvis as they talk on answering

61
00:03:36.800 --> 00:03:40.900
that that question, you know, you have
to have a whole talk to answer it yet.

62
00:03:40.900 --> 00:03:46.000
He says if I had to summarize it
in one sentence, I would say that

63
00:03:46.000 --> 00:03:50.600
functional reactive programming is
programming with time varying values.

64
00:03:51.700 --> 00:03:55.400
Now, that's not the most satisfying
answer person one who might already be

65
00:03:55.400 --> 00:03:56.200
overwhelmed.

66
00:03:56.200 --> 00:03:56.900
>> Yeah.

67
00:03:56.900 --> 00:04:01.900
Yeah, but basically that's for

68
00:04:01.900 --> 00:04:05.300
lack of anything better
to use at this moment.

69
00:04:05.300 --> 00:04:08.200
It's state right like so
I represent State.

70
00:04:08.200 --> 00:04:08.700
>> Yeah.

71
00:04:08.700 --> 00:04:10.700
It's a lot like state.

72
00:04:10.700 --> 00:04:15.300
The so it's still encodes
the information that state would encode

73
00:04:15.300 --> 00:04:20.500
the difference would be that the way
that these things composed together or

74
00:04:20.500 --> 00:04:23.300
different we won't get too deep into that.

75
00:04:23.300 --> 00:04:26.700
And that's why the reasons we
recommend gloss to start out with.

76
00:04:26.700 --> 00:04:31.500
Yeah, so you can just you
know gloss over FRP I guess.

77
00:04:31.500 --> 00:04:33.000
>> Yeah, see what you did there.

78
00:04:34.200 --> 00:04:35.400
Okay, cool.

79
00:04:35.400 --> 00:04:40.300
So do we have any like games
that may have used FRP and

80
00:04:40.300 --> 00:04:43.312
examples of that or up top your head?

81
00:04:43.312 --> 00:04:47.200
Or any packages that might implement or
use this?

82
00:04:47.200 --> 00:04:53.200
>> Yeah recent a recent really cool
game with an interesting premise that

83
00:04:53.200 --> 00:04:58.400
we might recognize
the roots of is people mon.

84
00:04:58.400 --> 00:04:59.000
>> Yes.

85
00:05:00.300 --> 00:05:04.500
I did see that believe is by
Alex Stewart like wrecked.

86
00:05:04.500 --> 00:05:06.000
>> Right, right.

87
00:05:06.000 --> 00:05:11.200
And so the premise is that
you you catch people and

88
00:05:11.200 --> 00:05:15.000
battle with them and style of Pokémon.

89
00:05:15.000 --> 00:05:15.600
>> I got you.

90
00:05:15.600 --> 00:05:16.400
That's pretty funny.

91
00:05:16.400 --> 00:05:17.600
Yeah, I did.

92
00:05:17.600 --> 00:05:21.800
I got a chance to at least watch
the little trailer for it and

93
00:05:21.800 --> 00:05:26.900
go to the site but I have not yet
played it I plan to play it here.

94
00:05:26.900 --> 00:05:31.000
It's pretty short, but looks pretty
entertaining at the very least.

95
00:05:31.000 --> 00:05:34.800
>> And I recommend at least check out
their homepage is some pretty hilarious

96
00:05:34.800 --> 00:05:36.200
images on got you.

97
00:05:39.500 --> 00:05:40.200
Let's see.

98
00:05:40.200 --> 00:05:42.100
So people mine.

99
00:05:42.100 --> 00:05:49.000
Was it based on it was yamp,
I think okay, which is an FRP Library,

100
00:05:49.000 --> 00:05:54.600
you'll notice that the more complex
examples of Haskell games use FRP.

101
00:05:54.600 --> 00:05:58.300
I think we had an exception
which used a classic game Loop,

102
00:05:58.300 --> 00:06:02.600
which we'll talk about in a second, but

103
00:06:02.600 --> 00:06:10.800
just to answer why these libraries might
prefer FRP as as complexity skills up.

104
00:06:10.800 --> 00:06:15.800
FRP seems to have some
advantages over the classic game

105
00:06:15.800 --> 00:06:21.200
Loop much in the way that Haskell has
advantages over imperative languages.

106
00:06:21.200 --> 00:06:23.300
>> Yeah, that actually reminds me Cody.

107
00:06:23.300 --> 00:06:29.000
We will be linking the package
Yabba as well as people Mon and

108
00:06:29.000 --> 00:06:33.200
other things mentioned in this podcast
on our Haskell weekly podcast page.

109
00:06:33.200 --> 00:06:37.900
So if you're, you know interested in,

110
00:06:37.900 --> 00:06:42.600
you know finding these not really having
to Google them even though you totally can

111
00:06:42.600 --> 00:06:45.900
we'll have those links available
at the Haskell weekly podcast page

112
00:06:45.900 --> 00:06:50.600
what the mention of people Mon and then
also Pokemon, which is a mainstream game.

113
00:06:50.600 --> 00:06:55.900
I found out just a little while ago

114
00:06:55.900 --> 00:07:00.200
that there was actually a Haskell game
that was greenlit on Steam now, they've

115
00:07:00.200 --> 00:07:04.800
retired the whole green light thing on
Steam, but so this is a little bit older,

116
00:07:05.800 --> 00:07:10.500
but it was still pretty cool to see
that I think it was even back in 2012.

117
00:07:10.500 --> 00:07:15.100
Right people were using Haskell to create
games and they actually, you know,

118
00:07:15.100 --> 00:07:16.900
we're getting somewhere with it.

119
00:07:16.900 --> 00:07:18.600
>> Trail Blazers for sure.

120
00:07:19.600 --> 00:07:22.000
That was Nikki in the robots.

121
00:07:22.000 --> 00:07:27.800
And I remember watching on excitedly
in their development blog and

122
00:07:27.800 --> 00:07:32.800
tracking their progress trying to get
everything building myself is exciting and

123
00:07:32.800 --> 00:07:34.800
then to see that they
got on Steam Greenlight.

124
00:07:34.800 --> 00:07:35.900
It was like wow.

125
00:07:35.900 --> 00:07:41.000
So in 2012, it's possible to write
a Haskell game if you put in enough effort

126
00:07:41.000 --> 00:07:43.900
and get it greenlit on Steam.

127
00:07:43.900 --> 00:07:45.000
>> It's actually really cool.

128
00:07:45.000 --> 00:07:48.400
Yeah and
notice that I went to their page and

129
00:07:48.400 --> 00:07:53.200
I did a little a little snooping
around and I saw their Tech stack

130
00:07:53.200 --> 00:07:58.100
consisted of hipmunk,
which is the physics engine, right?

131
00:07:58.100 --> 00:07:58.800
Yeah.

132
00:07:58.800 --> 00:08:01.600
It's a Haskell take on chipmunk.

133
00:08:01.600 --> 00:08:03.800
Hmm, which is pretty cool.

134
00:08:03.800 --> 00:08:06.100
It looks like the package
is now deprecated.

135
00:08:06.100 --> 00:08:09.900
So it might be a little old, but
it was still nice and cool to see that,

136
00:08:09.900 --> 00:08:13.800
you know the community is out there and
they're doing things with it.

137
00:08:13.800 --> 00:08:16.300
>> You know, I rewatch that Nikki and

138
00:08:16.300 --> 00:08:22.300
the robots video after after looking
around for some examples and

139
00:08:22.300 --> 00:08:26.600
it just made me think you know, what would
it take to revive Nikki in the robots and

140
00:08:26.600 --> 00:08:30.400
make it something compiling something
that people for instance in this

141
00:08:30.400 --> 00:08:34.700
podcast you heard about this could go and
download the source code and try it out.

142
00:08:34.700 --> 00:08:40.700
How much work is it to update that there
was an older FPS game made in Haskell.

143
00:08:40.700 --> 00:08:42.400
I can't recall the name of it.

144
00:08:42.400 --> 00:08:46.200
But somebody did the work
to like bring it current.

145
00:08:46.200 --> 00:08:47.400
Well, it's really cool.

146
00:08:47.400 --> 00:08:48.400
>> Nice.

147
00:08:48.400 --> 00:08:51.000
>> Maybe somebody maybe Me Maybe you or

148
00:08:51.000 --> 00:08:54.500
someone hearing this can try
to revive Nikki in the robot.

149
00:08:54.500 --> 00:08:55.400
>> Right?

150
00:08:55.400 --> 00:08:59.300
And it's also just it would
be good to I guess have

151
00:09:00.600 --> 00:09:04.900
something else to do to merge
these I guess these hobbies and

152
00:09:04.900 --> 00:09:09.700
this love of Haskell together and
which would help progress.

153
00:09:09.700 --> 00:09:11.600
You know, my Gillan has school as well.

154
00:09:12.900 --> 00:09:18.194
So I guess that's like another right other
bonus and doing this on the topic of that.

155
00:09:18.194 --> 00:09:20.942
>> On the topic of that,
there's also Dino Rush,

156
00:09:20.942 --> 00:09:25.894
you know if you're wanting to merge your
hobbies with Haskell and game development,

157
00:09:25.894 --> 00:09:30.086
but you're kind of new, you might want
to use like a classic game Loop and

158
00:09:30.086 --> 00:09:34.100
Dino Rush actually went that route and
they used a classic game Loop.

159
00:09:34.100 --> 00:09:39.100
So highly recommend anyone who
wants to do that to check out

160
00:09:39.100 --> 00:09:43.700
their blog posts that I think you're
probably going to put the resources to yes

161
00:09:44.800 --> 00:09:49.000
download the source code get it
building poke around in there.

162
00:09:49.000 --> 00:09:49.700
>> Nice.

163
00:09:49.700 --> 00:09:54.400
Yeah, I'm definitely going to do that
actually went to the page earlier and

164
00:09:54.400 --> 00:09:56.700
checked it out and it's pretty cool.

165
00:09:56.700 --> 00:09:59.800
I like the pixel art for the game.

166
00:09:59.800 --> 00:10:00.500
It looks pretty.

167
00:10:00.500 --> 00:10:05.500
>> Right and in for context their
game Diner Rush, it's you know,

168
00:10:05.500 --> 00:10:09.000
when you lose internet
connection on Google Chrome.

169
00:10:09.000 --> 00:10:10.400
Yes, there's a little diner.

170
00:10:10.400 --> 00:10:11.700
Jumping over stuff.

171
00:10:11.700 --> 00:10:14.700
>> I think we have a high score board
somewhere around in the office.

172
00:10:14.700 --> 00:10:16.100
Yep.

173
00:10:16.100 --> 00:10:16.600
>> Yep.

174
00:10:16.600 --> 00:10:17.700
I remember that day.

175
00:10:19.800 --> 00:10:23.000
>> Those examples are pretty
inspiring Cody, but

176
00:10:23.000 --> 00:10:26.400
if I get lost, how could I get support?

177
00:10:26.400 --> 00:10:29.200
>> Right, you know, we're talking
about Nikki in the robots and their

178
00:10:29.200 --> 00:10:33.500
Trail Blazers there wasn't there weren't
really a lot of people trying to do have

179
00:10:33.500 --> 00:10:37.700
school Game Dev back then so they had to
figure out all these things yourself, but

180
00:10:37.700 --> 00:10:42.508
then at some point past that they started
a for someone started a subreddit

181
00:10:42.508 --> 00:10:48.000
called are / Haskell Game Dev and

182
00:10:48.000 --> 00:10:51.300
they made a Wiki of how to get started.

183
00:10:51.300 --> 00:10:56.700
Now they're getting started I think
is more fitted to complex games and

184
00:10:56.700 --> 00:11:01.500
I would still recommend using gloss to get
started since it'll won't get you up and

185
00:11:01.500 --> 00:11:06.400
running the fastest but
some really good resources there.

186
00:11:06.400 --> 00:11:12.100
They also have a Haskell Game Dev Channel
on freenode if you're familiar with

187
00:11:12.100 --> 00:11:18.300
IRC chat and you can usually get pretty
quick help in the Haskell chat room.

188
00:11:18.300 --> 00:11:20.800
I'm guessing
the Haskell Game Dev is similar,

189
00:11:22.100 --> 00:11:24.100
then there's always stack Overflow.

190
00:11:24.100 --> 00:11:27.100
I've noticed quite a few
Game Dev questions and

191
00:11:27.100 --> 00:11:30.100
ask will get answered on stack Overflow.

192
00:11:30.100 --> 00:11:30.600
>> Gotcha.

193
00:11:30.600 --> 00:11:31.900
Nice.

194
00:11:31.900 --> 00:11:38.000
Yeah, I'll definitely give those a shot
it just to clarify somebody coming from

195
00:11:38.000 --> 00:11:43.600
let's say unity3d developing their
there's nothing like that currently for

196
00:11:43.600 --> 00:11:48.100
the high school Community right
like is basically C sharp for

197
00:11:48.100 --> 00:11:51.200
the most part in right Unity, right?

198
00:11:51.200 --> 00:11:54.100
>> Yeah.
Nothing is complete is Unity.

199
00:11:54.100 --> 00:11:59.200
There is a game engine that I think
attempted to be something like Unity

200
00:11:59.200 --> 00:12:04.600
called Helm that you might want to take a
look at I think it's still compiles latest

201
00:12:04.600 --> 00:12:11.700
GHC and is is working couldn't find any
good game examples of Though got you.

202
00:12:11.700 --> 00:12:12.500
>> Okay, cool.

203
00:12:12.500 --> 00:12:14.398
Thanks for
being on the show with me today Cody.

204
00:12:14.398 --> 00:12:15.148
>> No problem.

205
00:12:15.148 --> 00:12:16.930
It's been a lot of fun and thank you for
listening to the Haskell weekly podcast.

206
00:12:16.930 --> 00:12:19.661
>> And thank you for
listening to the Haskell Weekly Podcast.

207
00:12:19.661 --> 00:12:24.476
If you liked what you heard find out
more at our website Haskell Weekly News.

208
00:12:24.476 --> 00:12:27.600
Also, please rate and review us on iTunes.

209
00:12:27.600 --> 00:12:28.700
It helps a lot.

210
00:12:28.700 --> 00:12:32.900
Ask a weekly is brought to you by it pro
TV the tech skills development platform

211
00:12:32.900 --> 00:12:36.300
for it professionals and
also our employer.

212
00:12:36.300 --> 00:12:37.200
Yeah that too.

213
00:12:37.200 --> 00:12:44.700
It's a senior sis admins and network
admins to www.1800fairoffer.com needs.

214
00:12:44.700 --> 00:12:45.900
Thanks again for listening.

215
00:12:45.900 --> 00:12:47.200
We'll see you again next week.
