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
