WEBVTT

1
00:00:01.000 --> 00:00:04.759
How'd you like to listen to dot
net rocks with no ads? Easy?

2
00:00:05.320 --> 00:00:09.880
Become a patron For just five dollars
a month you get access to a private

3
00:00:10.000 --> 00:00:14.359
RSS feed where all the shows have
no ADS. Twenty dollars a month will

4
00:00:14.400 --> 00:00:18.800
get you that and a special dot
net Rocks patron mug. Sign up now

5
00:00:18.839 --> 00:00:23.760
at Patreon dot dot net rocks dot
com. Hey Carlin, Richard Here,

6
00:00:24.079 --> 00:00:29.280
as you may have heard, NDC
is back offering their incredible in person conferences

7
00:00:29.320 --> 00:00:33.240
around the world, and we'd like
to tell you about them. NDC Oslow

8
00:00:33.240 --> 00:00:37.039
will be made twenty first through the
twenty fifth. Go to NDC Oslo dot

9
00:00:37.119 --> 00:00:42.759
com to register. NDC Copenhagen is
happening August twenty seventh through the thirty first.

10
00:00:43.320 --> 00:00:48.960
Go to NDC Copenhagen dot com for
more information. NDC Porto is happening

11
00:00:49.000 --> 00:00:53.280
October sixteenth through the twentieth. The
early bird discount for DC Porto ends July

12
00:00:53.560 --> 00:00:58.280
twenty first. Go to Eddcporto dot
com to register and check out the full

13
00:00:58.320 --> 00:01:18.400
lineup of conferences at DC conferences dot
com. Hey, welcome back to dot

14
00:01:18.439 --> 00:01:22.319
net Rocks. This is Carl Franklin
and this is Richard Campbell and uh wow,

15
00:01:22.319 --> 00:01:25.159
this is gonna be a good talk. Huh doom sharp, It's gonna

16
00:01:25.200 --> 00:01:27.200
be some fun. Yeah, it's
gonna be fun. A couple of Belgians

17
00:01:27.200 --> 00:01:30.599
on Friday night. You know they
got beers. I'm sure they got beers.

18
00:01:30.920 --> 00:01:34.879
What could go wrong? It could
go wrong? Yeah, how you

19
00:01:34.879 --> 00:01:38.200
doing, buddy? I am well, you know, it was a real

20
00:01:38.280 --> 00:01:42.799
flurry of travel for a while there, but finally I am in a place

21
00:01:42.519 --> 00:01:48.879
so at home for a few weeks
before MVP summit, right yeah, And

22
00:01:49.159 --> 00:01:52.400
I will not be going to the
MVP summit, but I wish you the

23
00:01:52.439 --> 00:01:55.719
best, have a good time.
Yeah, it's only a drive for me,

24
00:01:56.000 --> 00:01:59.040
right, like right, there's almost
no excuse not to go, and

25
00:01:59.159 --> 00:02:00.799
only gonna do is drive. I'm
down. So what's up with you?

26
00:02:01.159 --> 00:02:05.840
Ah? Well, Um, here's
an interesting thing. I got an email

27
00:02:06.079 --> 00:02:12.000
from Freeconomics Radio. Cool, Yeah, Freconomics, great podcast and great books.

28
00:02:12.919 --> 00:02:16.879
And they basically want to interview somebody
who's kind of local to me,

29
00:02:19.159 --> 00:02:23.000
and they wanted to know if my
studio is available for them to, you

30
00:02:23.039 --> 00:02:27.599
know, for me to host a
guest. And they use Riverside and they're

31
00:02:27.639 --> 00:02:34.479
like, you know, do you
do podcasts? Since before the word podcast

32
00:02:34.560 --> 00:02:38.240
exists. Yeah. Yes, so
I'm really chuffed. They're going to um,

33
00:02:38.680 --> 00:02:43.479
they're gonna bring somebody in later in
the week and they're going to record

34
00:02:43.599 --> 00:02:46.360
from my space. Nice. So
you're just going to do production work for

35
00:02:46.400 --> 00:02:51.120
them to host the guests. All
I'm doing is hosting and making sure that

36
00:02:51.159 --> 00:02:53.960
they that we get a local recording
and they're using riverside, you know.

37
00:02:54.039 --> 00:02:58.759
So it's yeah, so that I'm
going to do a local wayfile recording with

38
00:02:58.879 --> 00:03:01.240
audition just to be safe, finge
or you know, leave them alone for

39
00:03:01.319 --> 00:03:07.800
an hour and hopefully you get credit. Yeah. Yeah, so that's what's

40
00:03:07.840 --> 00:03:10.560
exciting to me. Hey, let's
roll the crazy music for better no framework.

41
00:03:20.199 --> 00:03:23.840
So I actually created a class out
of necessity and it was so useful

42
00:03:23.919 --> 00:03:28.199
that I created a class library made
a new get package out of it.

43
00:03:28.199 --> 00:03:35.159
It's called AVN observable and so this
is I basically use observable collection of T

44
00:03:35.439 --> 00:03:39.439
as the base class. So observable
collection of T is a list or a

45
00:03:39.479 --> 00:03:47.800
collection that's generic that essentially allows you
to handle events whenever the something in the

46
00:03:47.879 --> 00:03:55.919
list changes. Right, So I
also included a selected item T property,

47
00:03:57.159 --> 00:04:00.199
So whatever the T is that you
you know, the type is that you

48
00:04:00.240 --> 00:04:04.680
pass in the selected item property will
be of that type as well, and

49
00:04:04.759 --> 00:04:10.560
it handles all the stuff that you
need for binding. So there's weirdness when

50
00:04:10.560 --> 00:04:15.560
you're binding with collections and you have
the sort of selecting item and edit it,

51
00:04:16.040 --> 00:04:19.519
and what happens after you edit it? Does you know? The list

52
00:04:19.560 --> 00:04:26.279
has to update? The UI has
to update, right, So basically that's

53
00:04:26.319 --> 00:04:30.439
that's what it does. And I
wrote a Blazer demo, a MAUI demo,

54
00:04:30.560 --> 00:04:32.959
a WPF demo, in a Windows
Forms demo, and it's all there

55
00:04:33.560 --> 00:04:38.399
in the in the GitHub repost.
So it's GitHub dot com, slash Carl

56
00:04:38.480 --> 00:04:43.319
Franklin, slash avn observable. Nice. That's cool, man, It is

57
00:04:43.319 --> 00:04:46.199
cool. And I love that that
is a possible solution, right. It's

58
00:04:46.199 --> 00:04:49.800
like, hey, I can work
around this in my app, or I

59
00:04:49.839 --> 00:04:54.759
can just make a new library.
Yeah, abstract that problem away so it's

60
00:04:54.759 --> 00:04:58.639
consistent across the stacks exactly. I
love it. Yeah, that's a good

61
00:04:58.680 --> 00:05:00.360
idea. So who's talking to it? My friend grabbed a comment off a

62
00:05:00.399 --> 00:05:05.680
show eighteen thirty three, the one
we did at Sweatuga, the Maui panel

63
00:05:05.759 --> 00:05:11.480
discussion when we talked to David and
Maddie and had a lot of good conversation.

64
00:05:11.519 --> 00:05:14.279
That was really a fun show.
And that's actually where the show we're

65
00:05:14.319 --> 00:05:16.639
about to do came from. I
think they're all talking and Sweden about this.

66
00:05:17.079 --> 00:05:20.639
Yeah, and jayon Software had this
comment. He says, I have

67
00:05:20.720 --> 00:05:24.759
not done any friend end work at
c sharp for the past ten years or

68
00:05:24.800 --> 00:05:27.680
so. I went to what's you
when it comes to front end development in

69
00:05:27.759 --> 00:05:31.319
c sharp space? And I am
lost Microsoft alone as so many front end

70
00:05:31.319 --> 00:05:35.720
frameworks from Windforms, web Forms,
MAUI, Blazer, WPF, whin ui

71
00:05:35.920 --> 00:05:40.199
UWP. I think it's time you
do a show comparing all of these.

72
00:05:40.519 --> 00:05:44.120
If not, I'm going to go
back to coding everything in JavaScript and packaging

73
00:05:44.120 --> 00:05:47.480
an electron. No, don't do
that, Okay, Jay running around with

74
00:05:47.519 --> 00:05:50.399
the gun point of your own head
saying one move and idiot gets it.

75
00:05:50.720 --> 00:05:54.560
Not a good plan, Like that's
not the way. You know, you

76
00:05:54.639 --> 00:05:57.800
can't blame Microsoft. I mean they
have their their employees have to do something

77
00:05:57.800 --> 00:06:00.839
when they come to work in the
morning. You know, Yeah, we

78
00:06:00.879 --> 00:06:03.519
need to fix this. Oh,
let's make a new framework. Yeah,

79
00:06:03.560 --> 00:06:08.160
we've done this show, Like,
go back and have a listen. To

80
00:06:08.199 --> 00:06:11.199
the show we did with Brian Lagunis
a couple of years ago. We ran

81
00:06:11.360 --> 00:06:15.519
down those stacks. We've also talked
about Abylonia. We've talked about Oh no,

82
00:06:15.879 --> 00:06:19.040
like I'm aware of the complexities,
and we've definitely been working on the

83
00:06:19.079 --> 00:06:25.879
problem because it's a sharcated problem.
Yeah, but you know, nothing's gonna

84
00:06:25.879 --> 00:06:30.120
make me build it an electron man. That's a tough call. So you

85
00:06:30.160 --> 00:06:32.680
know, go ahead, Jivid,
try on some of the choices, and

86
00:06:32.680 --> 00:06:35.600
we're going to talk about some of
the crazy stuff you could do. We

87
00:06:35.720 --> 00:06:40.560
see Sharpe and Maui today. Yeah, so, Jay, thank you so

88
00:06:40.639 --> 00:06:42.879
much for your comment. And a
copy of music Code Buy is on its

89
00:06:42.879 --> 00:06:45.120
way to you. And if you'd
like a copy of music Code by right

90
00:06:45.160 --> 00:06:48.000
a comment on the website at dot
net rocks dot com or on the facebooks.

91
00:06:48.000 --> 00:06:50.319
We publish every show there, and
if you comment there and everything the

92
00:06:50.399 --> 00:06:54.319
show, we'll send you a copy
music Code Buy. And hey, you

93
00:06:54.360 --> 00:06:56.480
know what, you can follow us
on Twitter if you want to, but

94
00:06:56.680 --> 00:07:00.639
you should follow us on Mastodon.
I'm at Carl Franklin at tech hub dot

95
00:07:00.720 --> 00:07:05.600
social, and I'm Rich Campbell at
maston Social And now I think We've had

96
00:07:05.639 --> 00:07:10.600
more engagement on masketon lately than we
have had on Twitter, even though I

97
00:07:10.639 --> 00:07:15.639
have like a thousand followers or so
and I have almost fifteen thousand followers on

98
00:07:15.639 --> 00:07:19.720
Twitter. Seems like the Twitter followers
just don't comment as much or retweet as

99
00:07:19.839 --> 00:07:24.040
much. There's just more noise out
there, I think. Yeah, the

100
00:07:24.560 --> 00:07:27.839
folks that are on mastone are pretty
engaged, which is fun. Yeah,

101
00:07:27.879 --> 00:07:30.560
that's what I'm trying to say,
Richard. Yeah, all right, let's

102
00:07:30.639 --> 00:07:35.879
bring on our guests. Wesley Cabooz
and Nico vermach So. Wesley is a

103
00:07:35.959 --> 00:07:42.120
coding architect at x Spirit in Belgium
by day and a gaming slash piano playing

104
00:07:42.160 --> 00:07:46.680
geek at night. He loves sharing
his knowledge with others and tries to coach

105
00:07:46.720 --> 00:07:51.079
people in doing the same by co
organizing meetups in Belgium and speaking at conferences.

106
00:07:51.120 --> 00:08:00.519
And sometimes he gets crazy ideas like
pouring doom into c sharp. Who

107
00:08:00.560 --> 00:08:05.000
would do that? He's gone crazy, That's not a thing. And Nickovermack

108
00:08:05.240 --> 00:08:11.759
is a application architect or an application
architect and Microsoft MVP from Belgium. He's

109
00:08:11.800 --> 00:08:16.199
part of the Belgian Visual Studio user
group and a crew member of Tech orama

110
00:08:16.279 --> 00:08:18.959
where you and I are going to
be speaking in May, right, Richard,

111
00:08:18.360 --> 00:08:22.079
Yeah, absolutely, and probably recording
a few shows. Yeah, and

112
00:08:22.160 --> 00:08:26.720
I'm doing a Malley workshop. Cool. When not playing around with technology,

113
00:08:28.079 --> 00:08:33.919
you can find Nico playing guitar or
riding his motorcycle. I sense that there's

114
00:08:33.960 --> 00:08:37.159
this music kind of thing happening,
and maybe what clued me into this is

115
00:08:37.360 --> 00:08:41.639
all the instruments that are hanging on
the wall and set up behind you.

116
00:08:41.120 --> 00:08:46.080
It's just like you're like a rock
band set here. Yes, so this

117
00:08:46.200 --> 00:08:50.480
is actually the rehearsal space of my
heart ruck slash heavy metal cover band.

118
00:08:50.639 --> 00:08:54.679
Wow. Nice. What's the name
of your band? It doesn't actually have

119
00:08:54.720 --> 00:08:58.759
an official name yet, so we've
only been around for a couple of months

120
00:08:58.039 --> 00:09:01.840
or just getting to know each oldn
Okay And who is speaking? Is this

121
00:09:01.879 --> 00:09:07.679
Wesley or Nico? N Okay?
Nico, I have I have a suggestion

122
00:09:07.759 --> 00:09:16.559
for the name of your band.
It should be Yeah, didn't you spill

123
00:09:16.639 --> 00:09:28.919
that out? Oh man, it's
my friend, uh great drummer who plays

124
00:09:28.000 --> 00:09:33.000
with us once in a while.
He also plays in this just absolute scream

125
00:09:33.000 --> 00:09:37.279
oh band you know, and uh, yeah, I always have let's say

126
00:09:37.960 --> 00:09:48.440
the name of this band is and
this song is called all right. Well,

127
00:09:48.440 --> 00:09:52.039
anyway, where do we start doom
and c sharp who had the crazy

128
00:09:52.080 --> 00:09:54.519
idea in the first place? Well, yeah, that would be me,

129
00:09:56.039 --> 00:10:03.200
Wesley. Yeah. So, um, to get started was I saw this

130
00:10:03.399 --> 00:10:09.200
video on the internet by David Whitney. You know, he did the session

131
00:10:09.240 --> 00:10:15.759
a while ago on emulating a game
Boy in Donet Corps, and that actually

132
00:10:15.799 --> 00:10:20.200
got to be inspired to try to
do the same. So yeah, I

133
00:10:20.240 --> 00:10:26.159
started with that, reading all about
the game boy, trying to create the

134
00:10:26.240 --> 00:10:31.279
emulator and so on so forth.
A few weeks months nights later, I

135
00:10:31.360 --> 00:10:39.679
had something working. Also could do
some sessions at local meetups and conferences on

136
00:10:39.720 --> 00:10:46.600
the same topic, and then I
thought, hmm, that's done. What's

137
00:10:46.679 --> 00:10:52.000
next? Because I know David was
talking about looking at he was looking at

138
00:10:52.000 --> 00:10:56.919
the Mario sixty four source code from
Nintendo that was released, So essentially you're

139
00:10:58.080 --> 00:11:01.639
by emulator. You mean like you
can take the ROMs out of these games

140
00:11:01.639 --> 00:11:03.840
and run them out of PC or
Mac. Yeah indeed, yeah, yeah,

141
00:11:03.919 --> 00:11:09.039
and that's now running in dotnet six
as well on Windows forms. But

142
00:11:09.080 --> 00:11:15.519
then after a while, because I
was actually looking into also creating a blazer,

143
00:11:15.600 --> 00:11:20.320
was some version of that but I
got stuck because treading was not a

144
00:11:20.399 --> 00:11:22.080
thing yet, right, right.
So I was looking at another project,

145
00:11:22.159 --> 00:11:26.120
and I was talking with David and
he was looking at the Mario sixty four,

146
00:11:26.159 --> 00:11:30.639
and I thought, maybe this time
I need to do something different than

147
00:11:30.679 --> 00:11:35.759
just copying David. And then I
thought, why not poor Doom because the

148
00:11:35.840 --> 00:11:41.559
source code is also available, and
well I had just Doom use an engine

149
00:11:41.639 --> 00:11:43.799
that other games use. Or is
it just that one game. It's just

150
00:11:43.919 --> 00:11:48.120
that one game. Yeah, I
mean it's from the it's from the early

151
00:11:48.240 --> 00:11:52.399
nineties, right, like this is
vintage vintage. Yeah. Yeah, I

152
00:11:52.440 --> 00:11:54.360
remember when it came out, but
I don't know if it had evolved.

153
00:11:56.039 --> 00:11:58.720
Well, the only thing that evolved
in the original source code is that they

154
00:12:00.360 --> 00:12:07.200
they run both the Doom one UH
files and also Doom two, so they

155
00:12:07.320 --> 00:12:11.840
use the same EXE file for both
of the games. But that's all that

156
00:12:11.879 --> 00:12:16.399
they really do. So it was
not I don't I don't think it was

157
00:12:16.440 --> 00:12:20.840
reused for something else. I mean
it also written from the ground up,

158
00:12:20.879 --> 00:12:26.279
because they they've done it's software,
did Wolfnstein? Yeah, before that,

159
00:12:26.320 --> 00:12:31.519
but they they redid everything for Doom. They probably used some ideas, but

160
00:12:31.159 --> 00:12:35.480
it was written from scratch as far
as I know. I mean, I

161
00:12:35.480 --> 00:12:39.480
mean, ultimately they did make this
thing called the Doom Engine, and that

162
00:12:39.679 --> 00:12:45.399
eventually evolved into the Quake engine.
Right, this is all John Carmack stuff,

163
00:12:45.519 --> 00:12:48.159
right, like, yeah, the
same guy that's like Oculus, and

164
00:12:48.440 --> 00:12:52.639
you know now it is quit from
those guys, Like that's all Carmack.

165
00:12:52.120 --> 00:12:56.919
Wow. Yeah, I never I
never got into the scrolling shoot them up

166
00:12:56.919 --> 00:13:01.639
games, but I certainly watched my
friends play them. So so what happened

167
00:13:01.639 --> 00:13:05.679
next? Well, I just well, I say, I just but I

168
00:13:05.120 --> 00:13:11.679
opened up the repository and I just
got started at the first thing, which

169
00:13:11.799 --> 00:13:20.440
is trying to load the wat file, which is where's all the data.

170
00:13:20.519 --> 00:13:28.559
It's it's just one big file which
has a directory structure, and then saying

171
00:13:28.440 --> 00:13:33.559
if you want to load the first
map, then you have to jump to

172
00:13:33.639 --> 00:13:37.080
that byte location in this file.
And then you have a list of the

173
00:13:37.159 --> 00:13:41.879
map contents like the vertegues, the
lines, the sectors and the textures being

174
00:13:43.000 --> 00:13:46.639
used and whatnot. So it's all
binary. There's no Jason here or anything.

175
00:13:46.080 --> 00:13:52.480
Yeah, that's all. That's all
good old binary asky data. And

176
00:13:54.440 --> 00:14:00.120
then I just started writing code using
the typical stream reader stuff. In in

177
00:14:00.320 --> 00:14:03.360
dot net to try and read the
file. And the first thing that I

178
00:14:03.399 --> 00:14:09.279
wanted to show is the logo when
you start the game, so you get

179
00:14:09.320 --> 00:14:13.799
that big doom logo in your face. That's the guy with the two guns,

180
00:14:13.240 --> 00:14:18.799
you know, with lemons all around
him. Yeah. So um.

181
00:14:18.440 --> 00:14:22.879
I started working on that part and
the game loop, which was at that

182
00:14:24.000 --> 00:14:31.360
point just running get what file,
show something on screen. And I got

183
00:14:31.399 --> 00:14:37.960
that far actually pretty quickly, so
that was a real good motivation to keep

184
00:14:37.000 --> 00:14:43.080
going. And then I started working
on the menu and then gradually working on

185
00:14:43.919 --> 00:14:52.279
just sporting file by file until I
got the first renders of the first level.

186
00:14:52.480 --> 00:14:54.639
Yeah. Wow, okay, Now, I mean all the underlying code

187
00:14:54.720 --> 00:14:58.320
was written in C, right,
like yeah, so yeah, I mean

188
00:14:58.320 --> 00:15:01.960
I could see you crime and end
the WAZ but how did it end up

189
00:15:01.960 --> 00:15:07.559
in dot net? Um? Yeah, you can translate C cos I mean,

190
00:15:07.600 --> 00:15:11.639
it does help if you have knowledge
of the C language, but it's

191
00:15:11.720 --> 00:15:16.600
pretty portable to C sharp. Interesting. And also this is old school C.

192
00:15:16.879 --> 00:15:20.799
This is like nineteen ninety C.
Yeah, yeah it is. But

193
00:15:20.919 --> 00:15:24.240
that's also benefit, probably because it
doesn't use a lot of it doesn't use

194
00:15:24.279 --> 00:15:30.159
any classes or right, the fancy
C plus plus things like multiple inheritance.

195
00:15:30.799 --> 00:15:37.679
How did the graphics translate? The
graphics were Actually they use like indexed color,

196
00:15:37.600 --> 00:15:43.320
so they have a different pellette of
colors that they use, and then

197
00:15:43.440 --> 00:15:48.240
they reference each color pixel by pixel
and they just have a view on one

198
00:15:48.320 --> 00:15:56.360
giant buffer filled with the pixels like
line per line. Wow. So but

199
00:15:56.759 --> 00:15:58.480
yeah, so you have to be
in a sort of a graphics mode though,

200
00:16:00.799 --> 00:16:03.799
and the c sharp that doesn't.
I didn't. I didn't know c

201
00:16:03.960 --> 00:16:07.159
sharp was fast enough to do that
without some sort of direct dex or some

202
00:16:07.200 --> 00:16:11.480
sort of you know, it can
handle it perfectly fine without anything of that

203
00:16:11.720 --> 00:16:18.120
likely. Yeah, I'm well,
I started using WPF for the window,

204
00:16:19.039 --> 00:16:23.200
and I just use double buffering,
so I have one array of screen bytes

205
00:16:23.279 --> 00:16:27.080
coming in and then when that's done, I flipped the buffers and that's more

206
00:16:27.120 --> 00:16:33.120
than fast enough. Then you get
sixty frames a second that way, Um,

207
00:16:33.559 --> 00:16:37.320
it's not sixty because the doom engine
is only thirty fps. But right,

208
00:16:37.600 --> 00:16:41.399
you don't see any stutters or anything, so I'm pretty sure that I'm

209
00:16:41.440 --> 00:16:44.639
hitting the thirty fps. It occurs
to me, though, that your screen

210
00:16:44.679 --> 00:16:48.600
resolution is also a lot lower than
your typical PC screen, right, Yeah,

211
00:16:48.720 --> 00:16:52.399
I think I don't know it out
of my head, but I think

212
00:16:52.399 --> 00:16:56.279
it's three twenty by two forty.
Yeah, yeah that makes sense now,

213
00:16:56.399 --> 00:17:00.440
yeah, nineteen nineties game. That
helps, Yeah, that that helps.

214
00:17:00.720 --> 00:17:06.000
Yeah, and then we just used
the WPF up scaling to make it nicer.

215
00:17:06.880 --> 00:17:08.640
Yeah, so you're only you know, you're drawing like seventy five thousand

216
00:17:08.640 --> 00:17:14.119
pixels at three twenty by two hundred
yep per frame. That's just that's not

217
00:17:14.240 --> 00:17:17.400
that much day, it's not that
bad. Yeah, it's just gonna look

218
00:17:17.440 --> 00:17:22.200
a little small on my four K
screen. Well, you can always give

219
00:17:22.200 --> 00:17:25.880
it a go. It will actually
look pretty good. Yeah. Yeah.

220
00:17:25.960 --> 00:17:27.960
Do I say, you're you're doing
the upscaling, which is you know,

221
00:17:29.119 --> 00:17:33.160
efficient software. Ye are you?
So are you using like texture maps or

222
00:17:33.200 --> 00:17:40.480
anything like that for the three D
stuff extruding? And it's I didn't introduce

223
00:17:40.559 --> 00:17:45.240
any new technology while porting. This
is like one on one port from the

224
00:17:45.279 --> 00:17:48.240
original code. I even left the
bugs and there wasn't any of that.

225
00:17:48.440 --> 00:17:52.599
So no, yeah, they didn't
use it. Um And it's also not

226
00:17:52.839 --> 00:17:57.200
real three D. It's like a
pseudo three D that they're doing. They

227
00:17:57.279 --> 00:18:02.000
call it like two point five D
something like that. Yeah, yeah,

228
00:18:02.079 --> 00:18:07.640
something like that because you can't move
in the Z right dimension because if you

229
00:18:07.680 --> 00:18:11.480
shoot straight and there's a there's someone
above you, you'll actually shoot everyone in

230
00:18:11.519 --> 00:18:18.559
that vertical line right right? Oh
I see yeah? So you so is

231
00:18:18.559 --> 00:18:21.039
it that you can't move in the
y access because they know you can move

232
00:18:21.039 --> 00:18:23.200
forward over? Yeah? Why yeah, sorry, yeah, yeah, it's

233
00:18:23.240 --> 00:18:26.680
a it's always strange thinking in three
D. Right. So you can shoot

234
00:18:26.720 --> 00:18:30.880
straight ahead, that's it. You
can't go up or down. Yeah,

235
00:18:30.920 --> 00:18:33.000
you shoot straight ahead and then if
there's someone below you or above you,

236
00:18:33.160 --> 00:18:37.359
as long as you can see them, you're hitting and gaining them. All

237
00:18:37.440 --> 00:18:40.880
right. Wow, you weren't supposed
to have above and below right like it'

238
00:18:40.960 --> 00:18:44.359
all? This is also supposed to
be that sort of dungeon, you know,

239
00:18:44.640 --> 00:18:48.960
square grid moving around thing. So
well, there is a bit of

240
00:18:48.039 --> 00:18:51.839
heights. There are stairs in the
game, so you can move up the

241
00:18:51.920 --> 00:18:56.279
stairs and then but I don't think
there's jumping as far as I can recall

242
00:18:56.079 --> 00:19:00.480
before that, Like that's how old
the game we're talking about. Goes shake

243
00:19:00.519 --> 00:19:03.640
in his head for jumping, Nico. What was your part in all this?

244
00:19:04.400 --> 00:19:08.440
Well, my part started. You
know what's up group that we're both

245
00:19:08.440 --> 00:19:14.200
in and wes Lee was posting images
of this progress. I would like,

246
00:19:14.240 --> 00:19:18.240
oh, that's that sounds like fun. And then came a message, Hey,

247
00:19:18.240 --> 00:19:21.960
you know I'm poorting Doom to C
sharp. Would you like to try

248
00:19:22.000 --> 00:19:26.839
to get it on mobile phones using
Maui? And so yeah, that's what

249
00:19:26.880 --> 00:19:34.880
I call a nerd snipe. Wow, So I cloned Wesle's coats. I

250
00:19:34.920 --> 00:19:40.160
don't think I ever really looked at
all the game codes because that I just

251
00:19:40.200 --> 00:19:44.640
started a new or. I added
a new Maui project to the solution.

252
00:19:45.720 --> 00:19:51.200
I referenced the libraries, and everything
just started building. So then I had

253
00:19:51.240 --> 00:19:53.839
to figure out how to do the
rendering because the right wall bit map was

254
00:19:53.880 --> 00:19:59.920
not there on Maui, right,
so I had to convert everything to ski

255
00:20:00.039 --> 00:20:03.680
yeah sharp. Yeah, of course
it turns out that was it. The

256
00:20:03.720 --> 00:20:08.440
index colors was not supported. Yeah, so yeah, there was a lot

257
00:20:08.480 --> 00:20:15.680
of work to be done there.
And sorry, the color mapping we've been

258
00:20:15.599 --> 00:20:19.240
yeah, yeah, at some point
we got a very blue version of Dooms.

259
00:20:22.279 --> 00:20:30.359
It turns out that the two color
channels were inverted on Maui. Yeah,

260
00:20:30.640 --> 00:20:33.400
there's a lot of red and Doom
normally, so you've got a lot

261
00:20:33.400 --> 00:20:36.839
of blue there. Was a lot
of blue. All the demons are bleeding

262
00:20:36.880 --> 00:20:45.319
blue, and it was almost doomed, doomed by IF sixty five. And

263
00:20:45.359 --> 00:20:49.079
then of course it was converting the
physical controls to touch based. What's the

264
00:20:49.160 --> 00:20:52.000
right way to make it work on
a phone? Yeah, but that's also

265
00:20:52.039 --> 00:20:59.680
where you saw the cross platform thing
coming to play. I could just capture

266
00:20:59.720 --> 00:21:03.559
the the dutchy events on the images
that I used as controls, and I

267
00:21:03.559 --> 00:21:07.039
could just plus it into Wesley's code
and it would just work. And that

268
00:21:07.200 --> 00:21:11.400
was a really interesting exercise. Yeah, and I'm kidding, Yeah, wasd

269
00:21:11.519 --> 00:21:15.119
doesn't not doesn't make a lot of
sense on the phone. No, and

270
00:21:15.200 --> 00:21:19.160
apparently neither does it in Maui,
even though you can you can target desktop

271
00:21:19.200 --> 00:21:25.200
platforms. Right, does it actually
work on the Windows and Mac platforms?

272
00:21:25.680 --> 00:21:29.039
I haven't tried it on the Mac
yet, but it does run on Windows.

273
00:21:29.880 --> 00:21:33.000
So if you run the Maui version
on Windows, it uses win Youwi.

274
00:21:33.279 --> 00:21:37.000
Yeah. Right. Mac is definitely
the redheaded stepchild of Maui, isn't

275
00:21:37.039 --> 00:21:41.279
it, maco es Yes, it's
kind of like the last priority. Well,

276
00:21:41.279 --> 00:21:45.519
when I was running it on my
laptop using Maui through win Ui,

277
00:21:45.240 --> 00:21:51.039
um, I figured how hard can
it be to to make use of the

278
00:21:51.119 --> 00:21:56.640
keyboard U turns out it's kind of
hard because keyboard support is not there for

279
00:21:56.759 --> 00:22:00.880
MAUI, right, Oh really,
except when you're in input controls like a

280
00:22:00.960 --> 00:22:04.960
textbox, then it just works.
But if you just want to capture your

281
00:22:06.079 --> 00:22:10.759
key down and key up events,
it doesn't work. MAUI swallows them all.

282
00:22:11.240 --> 00:22:17.839
So what I needed to do was
arriety behavior that crawls up the visual

283
00:22:17.880 --> 00:22:22.279
tree all the way until I exit
MAUGI land, and then I can hook

284
00:22:22.319 --> 00:22:26.480
up event handers in the actual WINDU
eye controls and that made it work.

285
00:22:26.640 --> 00:22:32.079
But about three weeks to figure that
out. But it's that's all specific to

286
00:22:32.119 --> 00:22:37.759
the Windows implementation, right, Like
so much reportability on that part. Yeah,

287
00:22:37.759 --> 00:22:41.519
but it does show the strength of
MAUI to go cross platform and platform

288
00:22:41.559 --> 00:22:45.920
specific at the same time, right, Yeah, the fact that you can

289
00:22:45.079 --> 00:22:49.400
poke down into the platform stuff.
But when you went to if you were

290
00:22:49.400 --> 00:22:52.799
going to now do this for the
Mac, you're gonna have to write it

291
00:22:52.920 --> 00:22:55.759
some different platform or like, does
that end up being a separate set of

292
00:22:55.759 --> 00:23:00.160
files or is that just that if
Windows, then if Mac, then the

293
00:23:00.599 --> 00:23:04.279
behaviors are actually different files. But
then the goats to attach them is actually

294
00:23:04.359 --> 00:23:08.440
the preprocessor of things. I mean, that's the whole the basics of the

295
00:23:08.480 --> 00:23:11.680
game, right, Like, where
where does the game get weirder from there?

296
00:23:11.720 --> 00:23:15.720
I'm just trying to remember that's it's
an old game now, But does

297
00:23:15.720 --> 00:23:21.279
it get any extra challenges when you
get to like the boss levels, it

298
00:23:21.319 --> 00:23:25.920
will probably press right now if you
try to get that far right, I

299
00:23:25.920 --> 00:23:29.359
can remember being able to go to
the next level. Yeah, took a

300
00:23:29.359 --> 00:23:32.480
while too. Yeah, that's a
good milestones like get a level to work,

301
00:23:33.480 --> 00:23:36.400
be able to finish a level,
like actually, okay, you you're

302
00:23:36.440 --> 00:23:37.880
at the end, now, can
we load a new level? Well,

303
00:23:38.079 --> 00:23:44.039
loading the new level was probably already
working, because that's also happening when you

304
00:23:44.119 --> 00:23:48.880
load the first level. But in
between you get this intermission screening doom where

305
00:23:48.920 --> 00:23:52.200
they show you the map of full
boss oh right, the planet where you're

306
00:23:52.200 --> 00:23:57.039
on, and then that's right,
you're doing you're doing the moons of Mars.

307
00:23:57.119 --> 00:24:02.240
And then they show you you just
had that level done. This is

308
00:24:02.279 --> 00:24:07.599
your result. You had like that
many enemies you killed? You killed all

309
00:24:07.640 --> 00:24:11.720
of them or killed only a percentage? Right? You found so many items,

310
00:24:11.759 --> 00:24:15.200
you found so many secrets, and
you took way too much time to

311
00:24:15.240 --> 00:24:19.039
get there. This level is like
double in thirty seconds according to them,

312
00:24:19.079 --> 00:24:23.519
And if you want to go through
everything, you take typically four or five

313
00:24:23.559 --> 00:24:27.279
minutes, right, if you know
the level. If you don't know the

314
00:24:27.319 --> 00:24:30.960
level, it's going to be more. Well, we're completion this, right.

315
00:24:30.000 --> 00:24:33.599
You have to find every secret,
you have to kill every bad guy.

316
00:24:33.119 --> 00:24:38.880
Yeah, but then it uses the
state's insight to transfer from your playing

317
00:24:38.920 --> 00:24:44.279
a level to you're going to the
intermission screen and then you're loading the next

318
00:24:44.319 --> 00:24:49.480
level, and then the boss fight
will might still work. But then after

319
00:24:49.519 --> 00:24:56.119
the boss dies, there's also a
specific trigger that you need to implement because

320
00:24:56.160 --> 00:24:59.119
you're not then going to an intermission
screen, but you're going to go to

321
00:25:00.359 --> 00:25:03.559
end of the episode screen. Yeah. It's like closing cut screen. Yeah,

322
00:25:03.640 --> 00:25:07.920
and that's probably not working yet.
Do you remember when playing eight bit

323
00:25:08.960 --> 00:25:14.759
arcade games in the early eighties when
if you got to level two hundred and

324
00:25:14.759 --> 00:25:18.480
fifty five, level two hundred and
fifty six, it would just stop.

325
00:25:18.880 --> 00:25:23.000
Yeah, it's like the killed screen. Yeah, back man, if you

326
00:25:23.039 --> 00:25:26.880
get too many points that your points
go negative or something. Yeah, yeah,

327
00:25:27.079 --> 00:25:36.039
yeah, yeah, eight bit problems
nothing like signed imagers how are the

328
00:25:36.279 --> 00:25:41.000
cut screens even stored? Like,
that's a whole other problem. Um.

329
00:25:41.119 --> 00:25:45.599
Some of them are just images,
right, just like the logo. Um.

330
00:25:45.920 --> 00:25:52.240
Others use scrolling text right, so
they have a fund defined also in

331
00:25:52.200 --> 00:25:57.920
textures, so to speak. And
then they just rolled texts one digita or

332
00:25:59.039 --> 00:26:03.240
one character at a time. Um. And then they play a typical song

333
00:26:03.599 --> 00:26:07.240
during those screens as well music.
I love it. Well, it's actually

334
00:26:07.240 --> 00:26:11.759
midi files in this case. Wow, even more challenged by itself to me.

335
00:26:12.000 --> 00:26:18.680
Yeah, yeah, parting midi files. Yeah, but those sound pretty

336
00:26:18.680 --> 00:26:23.359
well on on a modern Windows machine
because you have a pretty decent sound library

337
00:26:23.400 --> 00:26:27.799
installed by default. Um, and
if you want, if you if you

338
00:26:27.880 --> 00:26:33.319
have like a good sound library yourself, you might be able to plug that

339
00:26:33.359 --> 00:26:37.839
one in and have even better hi
fi sound if you want. Yeah,

340
00:26:37.880 --> 00:26:41.440
maybe better than the original. Yeah
yeah, yeah, I think it already

341
00:26:41.480 --> 00:26:47.119
sounds better than the original. Yeah, because I think they had to use

342
00:26:47.920 --> 00:26:51.400
their own sound banks in the past. And then if you had, if

343
00:26:51.440 --> 00:26:53.559
you had like a gust sound card, you could probably make it sound better.

344
00:26:56.119 --> 00:26:59.799
I never had one cards. There's
a card. Yeah. Me and

345
00:27:00.279 --> 00:27:04.039
sound Blaster, I have a history
with the sound Blaster Richard knows. But

346
00:27:06.119 --> 00:27:10.400
I was working for the company that
did the midisequencer and the MIDI connector box

347
00:27:10.680 --> 00:27:14.799
for the sound Blaster, and I
wrote the MIDI files that come with it.

348
00:27:15.839 --> 00:27:18.440
So all the all the sampled MIDI
files, that's me. Yeah,

349
00:27:18.559 --> 00:27:23.839
so a twelve year old me at
your code running then, yeah, back

350
00:27:23.920 --> 00:27:26.119
in the day. Well, I
didn't write the code. I just wrote

351
00:27:26.160 --> 00:27:30.400
the MIDI files. All right,
Well, stick around because we're gonna have

352
00:27:30.480 --> 00:27:37.680
more with Nico and Wesley coming right
up after this. And we're back.

353
00:27:37.920 --> 00:27:41.119
You're listening to dot Net and Rocks. I'm Carl Franklin. That's my buddy

354
00:27:41.200 --> 00:27:45.720
Richard Campbell. Hey, and that's
my new friends Nico and Wesley who were

355
00:27:45.720 --> 00:27:52.160
going to see a tech orama and
they're talking about doing c sharp port of

356
00:27:52.359 --> 00:27:57.200
Doom. And I got to ask
this question, if somebody wanted to look

357
00:27:57.240 --> 00:28:03.720
at that code and maybe new c
sharp but didn't know much about graphics programming,

358
00:28:04.000 --> 00:28:07.240
are they going to learn something?
What are they going to learn?

359
00:28:07.720 --> 00:28:15.000
They're gonna learn probably a lot about
how to get graphics on screen in the

360
00:28:15.039 --> 00:28:23.400
most elaborate way possible. But that's
just because they, I mean, they

361
00:28:23.599 --> 00:28:29.079
in software had to write everything from
scratch as well, keeping in mind that

362
00:28:29.160 --> 00:28:36.079
it was supposed to run. I
think they targeted at three eighty six CPU

363
00:28:36.480 --> 00:28:41.680
in the day without a floating point
coprocessor right, not a d X,

364
00:28:41.400 --> 00:28:51.480
not a DX and sx indeed,
which means they actually implemented a fixed floating

365
00:28:51.599 --> 00:28:59.799
point class themselves to do all of
the trigonometry operations faster than they could do

366
00:29:00.119 --> 00:29:06.960
on a PC without the floating points
math code processor. So if you want

367
00:29:07.000 --> 00:29:11.519
to look at the graphics code,
um, there's a part that's really easy,

368
00:29:11.599 --> 00:29:18.319
which is the just the basic logo
images that's bitmap pixel data. But

369
00:29:18.440 --> 00:29:26.720
then index colors um the renderer that's
something else because they use the BSP trees

370
00:29:26.839 --> 00:29:32.279
where they they go through all the
sectors to find out which sectors you're seeing,

371
00:29:32.359 --> 00:29:34.279
and then they find out which walls
they need to render, and then

372
00:29:34.559 --> 00:29:40.960
which textures and then there's a light
mapping and that's all them from scratch.

373
00:29:41.440 --> 00:29:48.039
How how pretty was the original C
code where the variables like abc x Y

374
00:29:48.759 --> 00:29:55.480
it was it commented the it's actually
pretty well structured. Also a lot of

375
00:29:55.839 --> 00:30:00.200
decently named variables, and that's good. They do have the only the only

376
00:30:00.240 --> 00:30:04.640
eyes and Jay's or counters, So
that's fine. There are some, well,

377
00:30:04.720 --> 00:30:08.720
quite a lot of comments in there. Some comments are not for publication.

378
00:30:11.839 --> 00:30:15.519
Yeah, I'm more appropriate than others. Yeah, do you come out

379
00:30:15.519 --> 00:30:19.519
across any comments like what the hell
was I thinking here? There? There's

380
00:30:19.559 --> 00:30:25.680
a lot of those, and also
I think there's still some we need to

381
00:30:25.680 --> 00:30:29.720
fix this and something else. Yeah, from nineteen ninety three. I love

382
00:30:29.759 --> 00:30:33.079
it. Yeah, yeah, yeah, because there's one bug in the code

383
00:30:33.880 --> 00:30:40.400
that I noticed while I was coding
well I want to say copying over,

384
00:30:40.480 --> 00:30:45.480
but translating it from C to C
sharp. I was like, this doesn't

385
00:30:45.480 --> 00:30:52.240
look right, and I left it
in there. I marked it for fixing

386
00:30:52.279 --> 00:30:55.720
it later. Yeah, it's a
good that's a good comment. This doesn't

387
00:30:55.759 --> 00:31:00.720
look right. And then a bunch
of code. It smells bad. Nothing

388
00:31:00.759 --> 00:31:03.279
as permanent as temporary code, of
course. Yeah. Yeah, but I

389
00:31:03.319 --> 00:31:07.599
actually lifted in because it is a
very well known book in all of the

390
00:31:07.640 --> 00:31:12.480
doom Sour sports. And then you
can either choose to fix it or you

391
00:31:12.519 --> 00:31:17.480
can choose to stay like a vanilla
ports and keep it in right in,

392
00:31:17.559 --> 00:31:22.599
stick with the vintage. Yeah,
that's the game that created the first BFGFG.

393
00:31:22.000 --> 00:31:29.880
Yes, also the big fricking gun. Oh okay, Like that's which

394
00:31:29.920 --> 00:31:33.519
is a meme, right, I
mean so many games even and even movies

395
00:31:33.240 --> 00:31:37.079
have a BFG of some kind.
But you're talking about the gun at the

396
00:31:37.079 --> 00:31:41.559
bottom of the screen that in the
first person. Yeah, it's right that

397
00:31:41.559 --> 00:31:45.480
you're that you're playing with. But
also like the weapons in Doom were part

398
00:31:45.480 --> 00:31:48.400
of the fun, like the chainsaw, that's some good fun, right,

399
00:31:48.960 --> 00:31:53.680
the shotgun boys effective of course,
the mini gun your rotary canon. But

400
00:31:53.799 --> 00:31:59.920
the BFG was kind of the end
of game superpowered gun. But you only

401
00:32:00.000 --> 00:32:01.680
had so much AMMO for it,
Like you had to pick your moment when

402
00:32:01.720 --> 00:32:05.240
you were going to use the BFG, just like in real life. And

403
00:32:05.279 --> 00:32:08.480
there's so many games meats the weapons
fun. I don't know if you ever

404
00:32:08.559 --> 00:32:14.240
played the Redneck Rampage. I think
you could shoot chickens or put a chicken

405
00:32:14.240 --> 00:32:20.279
on your soutgun or something, but
it was some Redneck rampage in the game.

406
00:32:20.319 --> 00:32:22.880
What are the first games where you
could basically make your weapons like you

407
00:32:22.880 --> 00:32:27.160
you pull them together or that would
have been one of the zombie games.

408
00:32:27.200 --> 00:32:32.680
But there's this sort of recognition that
people love ridiculous weapons, make them from

409
00:32:32.799 --> 00:32:38.440
chickens, or yeah for fire using
using chickens as the projectile. Oh yeah,

410
00:32:38.519 --> 00:32:45.160
yeah, yeah, that's the Plight
term for something completely absurd, the

411
00:32:45.319 --> 00:32:52.960
bf CG. Here you go,
the big freaking chicken gun. Anyway,

412
00:32:52.039 --> 00:32:57.480
the language was not as careful as
we were being at the moment. Yeah,

413
00:32:57.519 --> 00:33:00.279
that's where all that came That's what
maybe think of it. It's like

414
00:33:00.440 --> 00:33:05.599
obscenity in Doom. Oh wait,
that's where that came from. So,

415
00:33:06.000 --> 00:33:12.319
um, did this inspire you to
go on and do something else like port

416
00:33:12.480 --> 00:33:17.799
port I don't know, graphics framework
or a game framework that a bunch of

417
00:33:17.839 --> 00:33:22.799
other things. I mean what comes
to mind for me is MAME multi arcade

418
00:33:22.160 --> 00:33:29.799
machine emulator, which I just got
sucked into big time and I still do.

419
00:33:30.720 --> 00:33:32.960
But did it did it inspire?
Are you going to stop at Doom?

420
00:33:32.960 --> 00:33:37.359
I guess that's what I'm saying.
Um, well, Doom is not

421
00:33:37.480 --> 00:33:42.000
yet completely finished. I mean it's
if I have to put a number on

422
00:33:42.039 --> 00:33:46.559
it, it's probably in a eighty
percent state finished right now, right and

423
00:33:46.599 --> 00:33:50.720
I want to get near one hundred. I'm not sure if I'm gonna get

424
00:33:50.759 --> 00:33:54.480
to one hundred because I'm doubting if
I want to do the networking stuff,

425
00:33:55.599 --> 00:34:00.799
dude. Multiplayer Yeah, I know, I know when that first came out

426
00:34:00.920 --> 00:34:05.200
in Doom, like it was a
huge crisis, like universities were banning it.

427
00:34:05.559 --> 00:34:07.680
I was a networking guy back then, and I got all kinds of

428
00:34:07.720 --> 00:34:12.760
calls of like, how do I
block Doom multiplayer? Do my actual multiplayer?

429
00:34:12.920 --> 00:34:15.079
Yeah? I didn't know that you
could play it even with a serial

430
00:34:15.119 --> 00:34:20.719
cable between two PCs. Yeah,
nice, wow, because we I mean,

431
00:34:20.719 --> 00:34:22.239
it's ninety three, like a lots
of people don't have networking yet,

432
00:34:22.320 --> 00:34:28.039
right, Like those are expensive features. But this, this was the This

433
00:34:28.159 --> 00:34:31.280
leads to duke Um three D,
right, which really you talk about the

434
00:34:31.280 --> 00:34:42.679
definitive first person multiplayer game for land
parties, talking about strong language. Oh

435
00:34:42.719 --> 00:34:45.440
yeah, it's time to kick ass
and chew bubble gum. And I'm all

436
00:34:45.440 --> 00:34:54.280
out of gum. To answer the
question, I'm not sure yet if there's

437
00:34:54.519 --> 00:34:59.679
gone what the next thing is going
to be, Because this idea really started

438
00:34:59.719 --> 00:35:04.920
when I had a lot of free
time in the summer so I could well,

439
00:35:05.000 --> 00:35:08.440
you know, I spent most of
my time at that point working from

440
00:35:08.440 --> 00:35:13.000
home, right, which went I
went from one week sitting at my desk

441
00:35:13.039 --> 00:35:19.719
in my place too having vacation,
waking up, booting my PC and starting

442
00:35:19.719 --> 00:35:23.559
to work on Doom. So summer
is coming up again. I know a

443
00:35:23.639 --> 00:35:27.840
new project, but I'm not sure
yet if I'm going to start on a

444
00:35:27.920 --> 00:35:32.320
game engine, because I know someone
else started working on a Maui game engine,

445
00:35:34.239 --> 00:35:37.840
and then on the on the Mauie
side of things, I got nerds

446
00:35:37.920 --> 00:35:44.199
niped again. Oh no. So
when we met in Sweden in February two

447
00:35:44.239 --> 00:35:49.599
weeks later, Wessie and I were
actually in Canada at Kung Fu and we

448
00:35:49.599 --> 00:35:52.079
were in the speaker room working on
Doom and someone said, you know what

449
00:35:52.159 --> 00:35:57.320
would be fun if you could if
you could control your Android version by just

450
00:35:57.440 --> 00:36:02.360
walking around holding your phone right.
Well, hey, accelerometer. Yeah,

451
00:36:02.719 --> 00:36:06.840
so now we're trying to to do
that. You have to have a big

452
00:36:06.920 --> 00:36:10.800
room. Yeah well, I mean
tip to walk forward side to side and

453
00:36:10.840 --> 00:36:15.559
then press somewhere for firing, and
then then make like a shooting motion to

454
00:36:15.800 --> 00:36:19.079
fire. Together. There you go. You just have to be a clear

455
00:36:19.400 --> 00:36:27.239
room. Not included, oh Man. Redneck Rampage was based on the Build

456
00:36:27.280 --> 00:36:30.679
engine that they made Duke nukeab with, and the build Egite was a copy

457
00:36:30.760 --> 00:36:35.000
of the Doom engine like these are
all related. All these games we're talking

458
00:36:35.000 --> 00:36:38.480
about, Rutneck Rampage. I always
considered the Redneck version of Duke Nukam right

459
00:36:38.679 --> 00:36:43.800
because they looked so similar in graphics. Oh, it's there comes out a

460
00:36:43.880 --> 00:36:46.199
year later, right, like it's
they're all from the same origin and that

461
00:36:46.320 --> 00:36:51.960
same style of game. And have
you guys ever used Unity three D?

462
00:36:52.400 --> 00:37:00.639
I've played around with it. Yeah, yeah, not really into the I

463
00:37:00.679 --> 00:37:06.159
can't say that I've built something that
I'm proud of with Unity. We did

464
00:37:06.199 --> 00:37:10.400
try to create a game once.
Uh we want what engine did we use

465
00:37:10.400 --> 00:37:15.119
again? Mona game? Mona game? Yeah game. Yeah, we tried

466
00:37:15.159 --> 00:37:21.480
to make a breakout game with that. Actually pretty far, its basically done.

467
00:37:21.920 --> 00:37:24.159
We just needed to build X amount
of levels and just publish it.

468
00:37:24.440 --> 00:37:28.760
Yeah, but all the fun stuff
was done, So we move down two

469
00:37:28.800 --> 00:37:30.559
different projects. Yeah, I know, right, well, and the bar

470
00:37:30.679 --> 00:37:34.719
so high for Unity. You look
at some of the Unity games that are

471
00:37:34.719 --> 00:37:37.719
out there, like they're amazing.
Hartstone is a Unity It's a tough company

472
00:37:37.719 --> 00:37:40.559
to hang out in. It's a
long way from two point five D.

473
00:37:42.079 --> 00:37:45.360
Yeah, and it's not a free
tool. I mean Wizards. Hartstone is

474
00:37:45.599 --> 00:37:50.920
built with Unity and it's not a
free tool either, Nope, yeah,

475
00:37:51.079 --> 00:37:53.159
no, but lots of great graphic
glasses and things like. You've got a

476
00:37:53.199 --> 00:37:58.719
lot to work with if you go
down that path. Yeah, it's it's

477
00:37:58.760 --> 00:38:01.079
not free, but they have a
lot of free assets that can get you

478
00:38:01.239 --> 00:38:07.320
going already to build something pretty nice. But then again, you can say

479
00:38:07.320 --> 00:38:09.960
the same about Unreal Engine. Yeah, but in Unity you can use C

480
00:38:10.119 --> 00:38:15.880
sharp, that's true, right,
or that other language, the one we

481
00:38:15.880 --> 00:38:22.280
don't talk about, the one that
the j language that shall not be named,

482
00:38:22.880 --> 00:38:28.239
Oh no, Joeld the mark.
But you know, it's so much

483
00:38:28.280 --> 00:38:31.280
game development is just done. And
see it's nice to be, you know,

484
00:38:31.360 --> 00:38:35.800
working in in c sharp like it
just that's the language, you know,

485
00:38:35.920 --> 00:38:40.480
and and it's safer. Like you
think debugging business appses are tried debugging

486
00:38:40.519 --> 00:38:49.199
games? Try debugging memory leads?
Yeah. Yeah. At some point while

487
00:38:49.320 --> 00:38:55.880
porting the game, I had the
level loaded and the graphics looked almost perfect,

488
00:38:57.639 --> 00:39:01.239
and then you started try to start
moving, so you press forwards and

489
00:39:01.360 --> 00:39:07.679
you're shut into the wall like light
speed ahead. I was like, uh,

490
00:39:09.159 --> 00:39:14.360
I'm not sure what's happening right now, and I'm not sure how I'm

491
00:39:14.480 --> 00:39:17.960
going to find out what's going wrong. So yeah, that's like an experience

492
00:39:19.000 --> 00:39:27.239
I had in the seventies. Nice
you mean when you were five. But

493
00:39:27.480 --> 00:39:30.119
you're you're exactly right. It's like, you know, this is not forms

494
00:39:30.159 --> 00:39:35.280
over data, right, there's no
consistent UI here. This is you're trying

495
00:39:35.280 --> 00:39:42.400
to create an illusion of three dimensional
motion. So uh, And and the

496
00:39:42.519 --> 00:39:46.079
idea that you have impacts or there
are surfaces that they're projectiles, that that

497
00:39:46.360 --> 00:39:51.880
you have things that move. That
makes sense that you can discern an enemy

498
00:39:52.000 --> 00:39:55.320
from the wall, and then it
follows some kinds of rules of physics,

499
00:39:55.400 --> 00:40:00.679
like there's a lot of pieces that
have to work right to not toss you

500
00:40:00.760 --> 00:40:05.360
out of the illusion that is a
game. At least collision detection work because

501
00:40:05.400 --> 00:40:10.679
the wall did stop me. Did
you get the damage for slumming into the

502
00:40:10.719 --> 00:40:15.360
wall? No? Did it make
a sound like it does? Make it

503
00:40:15.440 --> 00:40:21.719
sound like whatever doom guy hits the
wall, he does like he makes a

504
00:40:21.719 --> 00:40:24.679
little grunt. So that worked.
Did the collision detective work that they played

505
00:40:24.719 --> 00:40:30.639
the sound? Yeah, these are
all the things we forget about the fact

506
00:40:30.679 --> 00:40:34.239
that you got to write the code
it says on a collision, you know,

507
00:40:34.559 --> 00:40:38.599
account for damage, create that visualization, and play that that sound like

508
00:40:39.119 --> 00:40:44.320
and then it all has to be
timely or it does the metaphor doesn't work

509
00:40:44.360 --> 00:40:51.440
either. Hit the wall, pause, It's right. It's a lot of

510
00:40:51.960 --> 00:40:57.679
moving pieces that have to work together. And then that in the doom game

511
00:40:57.760 --> 00:41:01.920
you see that as as the doom
loop. So what typically happen happens in

512
00:41:01.960 --> 00:41:07.559
every game is um, you look
at the input from the player, you

513
00:41:07.679 --> 00:41:15.559
process that input, you process everything
else like monsters or the monsters get their

514
00:41:15.599 --> 00:41:20.599
turn to move, get their turn
to shoot, you move the projectiles like

515
00:41:20.800 --> 00:41:23.639
ye, and then you update the
sounds, you draw the world, and

516
00:41:23.679 --> 00:41:28.920
then you start over again. Yeah, that's one of the hardest things I

517
00:41:29.039 --> 00:41:34.719
found to grasp as an application developer. Where you working in an event based

518
00:41:34.719 --> 00:41:39.039
world, your application is is waiting
for your user to interact. If you're

519
00:41:39.039 --> 00:41:44.239
building a game, then your world
is alive. There's stuff happening even if

520
00:41:44.239 --> 00:41:47.239
you're not interacting with it. Yep. Just because the players AFK doesn't mean

521
00:41:47.320 --> 00:41:52.280
the world's AFK exactly. I think
you mentioned this, but does it did

522
00:41:52.320 --> 00:41:59.519
it try the frames at a timer
or did it rely on the timing of

523
00:41:59.519 --> 00:42:06.079
the CP you, um, it
uses some form of timing to uh pace

524
00:42:06.159 --> 00:42:14.000
itself because otherwise a game from nineteen
ninety three would yeah slam you into the

525
00:42:14.000 --> 00:42:19.360
wall. Oh yeah, that was
noted. You know, I'm old enough

526
00:42:19.400 --> 00:42:23.679
to remember when we're all our computers
were one Mega Hurts. We only had

527
00:42:23.719 --> 00:42:28.199
the one Megaherts sixty five O two
and then a three Mega Hurts sixty five

528
00:42:28.239 --> 00:42:31.639
two came out and all games were
unplayable because they were three times faster now

529
00:42:31.639 --> 00:42:36.880
and the original XT clones had a
turbo mode switch which could turn which would

530
00:42:36.920 --> 00:42:39.960
turn it into eight Mega Hurts from
four point seven seven four point seven seven

531
00:42:39.960 --> 00:42:45.360
to eight, so four point seven
seven for games and then eight for everything

532
00:42:45.360 --> 00:42:51.159
else to three. Yeah, turbo
switch. It took me years to figure

533
00:42:51.199 --> 00:42:55.639
out why you should why one would
switch the turbo off, right, because

534
00:42:55.679 --> 00:43:00.039
I've never had a PC with the
turbo button, but I've heard of it.

535
00:43:00.599 --> 00:43:04.599
Was wondering why would you on purpose
slow down your computer? Now,

536
00:43:04.639 --> 00:43:07.480
we thought it was a feature because
we get to speed it up. Yeah,

537
00:43:07.559 --> 00:43:13.199
yeah, you think you're good play
this fast? Yeah, I just

538
00:43:13.239 --> 00:43:15.440
remember, I know this is welcome
to four old guys. Try to talk.

539
00:43:16.079 --> 00:43:22.679
Um. I remember when I got
my first twelve hundred BOD modem and

540
00:43:22.800 --> 00:43:27.039
I was really mad because I couldn't
read the text as it came across the

541
00:43:27.079 --> 00:43:32.320
modem like I could with my three
hundred BOD modem. I could actually read

542
00:43:32.360 --> 00:43:37.320
it as it was drawing on the
screen. And then with the twenty four

543
00:43:37.920 --> 00:43:42.000
modem, Holy crap, the whole
screen just appears at once. Yeah,

544
00:43:42.440 --> 00:43:45.719
blessing and a curse. Oh well, I guess the moral of the story

545
00:43:45.800 --> 00:43:49.000
is, don't get used to your
tech. You know it's going to change.

546
00:43:49.519 --> 00:43:52.159
Yeah, well, in that certainty
about how we time things like how

547
00:43:52.559 --> 00:43:57.639
how fast should that loop run?
What's the what is the heartbeat of it?

548
00:43:58.000 --> 00:44:01.360
Yeah? Yeah, and you know
JavaScript floating point works and C sharp

549
00:44:01.760 --> 00:44:08.119
weird? Yeah yeah. Should it
just be number? Now that with Doud

550
00:44:08.159 --> 00:44:14.480
Crockford told us should just be number? Oh in JavaScript? Yeah? Everything?

551
00:44:15.280 --> 00:44:19.800
Yeah? Why do we have to
discern different types of numbers? All

552
00:44:19.880 --> 00:44:23.519
right, guys, anything else that
you want to share, divulge or admit

553
00:44:23.760 --> 00:44:30.920
before we hang up? No?
No, really? Okay? Are you

554
00:44:30.960 --> 00:44:36.199
looking for contributors? Wesley is there
to try and get this thing finished?

555
00:44:36.440 --> 00:44:39.599
I think so? Yeah. Yeah, I mean well especially on the on

556
00:44:39.639 --> 00:44:44.039
the Android level as well, because
we got sound working on Android, but

557
00:44:44.199 --> 00:44:50.079
music is not working yet. There
Okay. It's again interesting because Wesley got

558
00:44:50.800 --> 00:44:57.440
the media files working in the WPF
version through an external yellow and when we

559
00:44:57.559 --> 00:45:02.000
loaded that yellow into MAUI and run
it on when Ui we had sounds,

560
00:45:02.000 --> 00:45:06.840
we had, we had music.
Well on androids we don't, so we

561
00:45:06.920 --> 00:45:09.000
still need to fix that, right, okay, so kind of find those

562
00:45:09.079 --> 00:45:13.519
kinds of mappings for each of these
platforms. Have you even have you tried

563
00:45:13.519 --> 00:45:19.639
it on iOS? Um? I've
had it run on iOS once, but

564
00:45:19.800 --> 00:45:24.280
I don't live that much access to
iOS devices, right, that's the internal

565
00:45:24.320 --> 00:45:30.119
problem that you need a mach to
build for a mach. Yeah, yeah,

566
00:45:30.320 --> 00:45:34.400
you can run to your own Windows
on your iOS device. You can

567
00:45:34.519 --> 00:45:38.800
use Cloud for a mac. Yeah, all right. Well anyway, hey,

568
00:45:38.800 --> 00:45:42.719
we'll see you in May and at
tech Aroma, and we put all

569
00:45:42.760 --> 00:45:45.960
the links to all the things that
we're talking about on dot and rocks dot

570
00:45:46.000 --> 00:45:51.400
com, so go there and check
it out. Everybody. Thanks you guys,

571
00:45:52.000 --> 00:45:54.320
thank you. Yeah, it's nice
talking to you. Yes, you

572
00:45:54.360 --> 00:45:59.119
two, And we'll talk to you, dear listener next time. I'm dot

573
00:45:59.159 --> 00:46:23.880
net rocks. Dot net Rocks is
brought to you by Franklin's Net and produced

574
00:46:23.880 --> 00:46:30.519
by Pop Studios, a full service
audio, video and post production facility located

575
00:46:30.559 --> 00:46:35.159
physically in New London, Connecticut,
and of course in the cloud online at

576
00:46:35.199 --> 00:46:40.760
pwop dot com. Visit our website
at dt n et r ocks dot com

577
00:46:40.800 --> 00:46:45.639
for RSS feeds, downloads, mobile
apps, comments, and access to the

578
00:46:45.679 --> 00:46:51.360
full archives going back to show number
one, recorded in September two thousand and

579
00:46:51.360 --> 00:46:53.800
two. And make sure you check
out our sponsors. They keep us in

580
00:46:53.840 --> 00:47:02.119
business. Now, go write some
code sext time. The band do a

581
00:47:02.360 --> 00:47:08.960
summer times hard than my text ready

