WEBVTT
00:00:08.559 --> 00:00:16.074
CORWIN: Okay. So I'm gonna start with my demo Emacs here.
00:00:16.074 --> 00:00:18.000
Erik, we're ready.
00:00:18.000 --> 00:00:31.840
AMIN: We are live.
00:00:31.840 --> 00:00:35.440
ERIK: Okay, so you're starting then.
00:00:35.440 --> 00:00:39.200
CORWIN: I guess I'll start right now. Here we go.
00:00:39.200 --> 00:00:43.440
So I'm a Windows user, as we talked about yesterday.
00:00:43.440 --> 00:00:47.440
I'm going to try to start Emacs for you now.
00:00:47.440 --> 00:00:49.360
I've got it pinned to this thing,
00:00:49.360 --> 00:00:52.879
but mostly what I actually do
00:00:52.879 --> 00:00:56.320
is grab a file explorer and head to my desktop
00:00:56.320 --> 00:01:00.559
where I have all sorts of Emacs.
00:01:00.559 --> 00:01:10.840
Erik, can you make sure that your VLC is muted?
00:01:10.840 --> 00:01:39.360
ERIK: Okay, give me a second, please.
00:01:39.360 --> 00:01:41.920
CORWIN: I do. Okay. All right.
00:01:41.920 --> 00:01:44.560
We should be working again now. My apologies for that.
00:01:44.560 --> 00:01:47.360
All right. Handling technical problems in real-time
00:01:47.360 --> 00:01:49.600
is what Emacs is all about.
00:01:49.600 --> 00:01:52.799
As we're coding, we're constantly making errors, and fixing them,
00:01:52.799 --> 00:01:54.880
and learning from the kinds of errors that we make,
00:01:54.880 --> 00:01:57.759
and adjusting the editor to be easier to use.
00:01:57.759 --> 00:02:02.640
So today we'll try to build on some of the ideas we introduced yesterday
00:02:02.640 --> 00:02:07.280
around how a community can help us learn Emacs faster,
00:02:07.280 --> 00:02:12.160
and how we can think broadly about the people in our team
00:02:12.160 --> 00:02:15.920
when we decide how what kind of Emacs configuration
00:02:15.920 --> 00:02:18.000
we're going to have going for our project.
00:02:18.000 --> 00:02:21.120
So I'm just going to fire up my normal Emacs config now,
00:02:21.120 --> 00:02:24.720
so that we get hopefully a nice pretty demo
00:02:24.720 --> 00:02:28.080
or at least some slides.
00:02:28.080 --> 00:02:30.720
For safety, we're going to avoid the server,
00:02:30.720 --> 00:02:33.360
because I hate it when it crashes.
00:02:33.360 --> 00:02:41.120
It's a little less stable under Windows, I think.
00:02:41.120 --> 00:02:43.200
And well, while this starts up,
00:02:43.200 --> 00:02:44.800
I'll just briefly introduce
00:02:44.800 --> 00:02:47.680
my lifelong friend Erik Elmshauser
00:02:47.680 --> 00:02:50.400
who's hanging in the wings and waiting impatiently
00:02:50.400 --> 00:02:54.400
for us to be able to start our slides.
00:02:54.400 --> 00:02:58.560
ERIK: Hello, everybody. I'm Erik.
00:02:58.560 --> 00:03:03.200
CORWIN: So you've heard plenty from me already this conference,
00:03:03.200 --> 00:03:09.120
I suppose, so I'm just going to...
00:03:09.120 --> 00:03:10.560
So Erik and I have worked things out
00:03:10.560 --> 00:03:12.400
so that he'll do most of the talking today.
00:03:12.400 --> 00:03:14.159
I'll drive us through some code parts,
00:03:14.159 --> 00:03:16.159
but the hope is that we'll just focus
00:03:16.159 --> 00:03:17.599
a little more on the game.
00:03:17.599 --> 00:03:19.360
If you have questions about the game at all,
00:03:19.360 --> 00:03:28.480
please don't hesitate to ask those as well as your Emacs questions.
00:03:28.480 --> 00:03:30.840
I think we're starting out.
00:03:30.840 --> 00:03:41.200
Welcome. Let's cut away here so we can show some faces.
00:03:41.200 --> 00:03:43.920
I lost you, Erik.
00:03:43.920 --> 00:03:45.040
ERIK: Why would you do that?
00:03:45.040 --> 00:03:48.319
CORWIN: There he is.
00:03:48.319 --> 00:03:50.000
Let's just do one more thing
00:03:50.000 --> 00:03:53.280
because that's just kind of offensive.
00:03:53.280 --> 00:03:55.439
I'm going to kill off that cute wallpaper
00:03:55.439 --> 00:03:59.360
we all were playing with yesterday,
00:03:59.360 --> 00:04:02.640
although that's not so bad anymore.
00:04:02.640 --> 00:04:04.480
Oh, that's terrible. It's got to come back.
00:04:04.480 --> 00:04:11.120
I'm sorry, everybody.
00:04:11.120 --> 00:04:16.720
Oh my dear. All right.
00:04:16.720 --> 00:04:25.040
We just opened Emacs, so I have to open my slideshow,
00:04:25.040 --> 00:04:28.479
and there we are.
00:04:28.479 --> 00:04:32.560
Okay, Erik, I think I'm about as ready as I get.
00:04:32.560 --> 00:04:35.120
ERIK: Cool. Well, let's begin here.
00:04:35.120 --> 00:04:37.840
Welcome to the dungeon, everybody.
00:04:37.840 --> 00:04:38.320
As you're aware, I'm Erik and this is Corwin,
00:04:38.320 --> 00:04:43.040
and this is the Dungeon project that we've been working on
00:04:43.040 --> 00:04:45.120
for about a year now.
00:04:45.120 --> 00:04:52.000
The Dungeon game is based on
00:04:52.000 --> 00:04:53.360
a tradition of gaming
00:04:53.360 --> 00:04:55.520
that came out of the University of Minnesota
00:04:55.520 --> 00:04:57.520
back in the 1950s,
00:04:57.520 --> 00:05:00.320
as far as we can tell.
00:05:00.320 --> 00:05:03.360
It is a predecessor, an ancestor of
00:05:03.360 --> 00:05:05.199
most of the commercial role-playing games
00:05:05.199 --> 00:05:07.919
that you have heard of or maybe tried out
00:05:07.919 --> 00:05:11.919
from various stores and friends, what have you.
00:05:11.919 --> 00:05:14.800
So one of the first things we want to talk about is:
00:05:14.800 --> 00:05:17.039
What is it that sets Dungeon apart?
00:05:17.039 --> 00:05:19.680
why is it... what is it about this game
00:05:19.680 --> 00:05:22.479
that makes us want to continue bringing it forward,
00:05:22.479 --> 00:05:26.479
when there are so many games already commercially available
00:05:26.479 --> 00:05:28.479
that are descended from it?
00:05:28.479 --> 00:05:34.160
Dungeon is kind of a simpler game.
00:05:34.160 --> 00:05:40.400
Like we don't do a lot of the mechanics that you think about.
00:05:40.400 --> 00:05:44.560
What is it that defines your character? Stats and skills and attributes?
00:05:44.560 --> 00:05:48.080
We just don't deal with it in Dungeon.
00:05:48.080 --> 00:05:54.720
But Dungeon... The simplicity of it allows it
00:05:54.720 --> 00:06:01.840
to be a vehicle for creativity more than just a numbers project.
00:06:01.840 --> 00:06:04.240
So that's kind of why we like it,
00:06:04.240 --> 00:06:08.533
but also it makes it a tricky problem
00:06:08.533 --> 00:06:12.567
when it comes to writing a computer game to mimic
00:06:12.567 --> 00:06:16.400
the game that we played with paper and dice around a table.
00:06:16.400 --> 00:06:24.000
CORWIN: So when we look at it as kind of a technology problem... Whoops...
00:06:24.000 --> 00:06:27.919
When we try to... Heyo. I'm sorry. I got ahead of us.
00:06:27.919 --> 00:06:32.160
I'll cut back.
00:06:32.160 --> 00:06:35.520
ERIK: I thought we were doing fine
00:06:35.520 --> 00:06:40.319
CORWIN: Okay, well then. I'll just... yeah. Either way.
00:06:40.319 --> 00:06:43.360
ERIK: So we've been friends since...
00:06:43.360 --> 00:06:46.479
It was our parents' idea, basically.
00:06:46.479 --> 00:06:53.120
Our parents are friends, and we learned this game from our parents.
00:06:53.120 --> 00:07:02.479
Specifically, I learned it from Corwin when I was 7 or 8.
00:07:02.479 --> 00:07:06.400
CORWIN: Yeah, that's where... that's my cue in, right?
00:07:09.599 --> 00:07:14.560
My folks and Erik's folks were really tight.
00:07:14.560 --> 00:07:17.360
They used to run science fiction conventions together.
00:07:17.360 --> 00:07:22.400
Our play featured imaginative role-playing.
00:07:22.400 --> 00:07:28.639
Usually we would find ways to work the computers into things.
00:07:28.639 --> 00:07:35.000
I don't know. I hardly have memories that precede Erik.
00:07:35.000 --> 00:07:39.199
ERIK: Also, it turns out we're both kind of nerds.
00:07:39.199 --> 00:07:46.560
I learned to program from my mother back in the early 80s,
00:07:46.560 --> 00:07:49.039
and for as long as we've been friends,
00:07:49.039 --> 00:07:52.800
basically we've also been into playing with computers.
00:07:52.800 --> 00:07:56.720
Over the years, we've worked with many, many different systems.
00:07:56.720 --> 00:07:59.700
We've played with Ataris, Apples, and Amigas
00:07:59.700 --> 00:08:03.567
for a long time before either of us got PC clones
00:08:03.567 --> 00:08:07.967
and Windows or DOS or Linux or any of those systems.
00:08:07.967 --> 00:08:11.360
We went through all of them, and kinda liked them.
00:08:11.360 --> 00:08:17.919
So we also always thought, like,
00:08:17.919 --> 00:08:22.639
how is it that we can use these cool computers that we're into
00:08:22.639 --> 00:08:25.967
to build this Dungeon game that we're into?
00:08:25.967 --> 00:08:28.319
'Cause that's what you do, right?
00:08:28.319 --> 00:08:32.080
CORWIN: That's certainly what we did.
00:08:32.080 --> 00:08:35.039
So after some decades of bike-shedding
00:08:35.039 --> 00:08:39.039
where we saw really a lot of changes in the technology field,
00:08:39.039 --> 00:08:40.159
cell phones were invented,
00:08:40.159 --> 00:08:41.919
smartphones were invented...
00:08:41.919 --> 00:08:45.360
Text messaging in particular had a dramatic impact
00:08:45.360 --> 00:08:49.519
on what we thought Dungeon would have to be able to do to be more fun
00:08:49.519 --> 00:08:54.720
than scribbling in graph paper.
00:08:54.720 --> 00:08:58.480
Yeah, either way.
00:08:58.480 --> 00:09:01.519
ERIK: We've been using Linux since the mid 90s
00:09:01.519 --> 00:09:06.160
I don't remember exactly when I did my first Linux install,
00:09:06.160 --> 00:09:11.200
but I really liked it from the get-go,
00:09:11.200 --> 00:09:17.267
and I think it was shortly after I
installed it on a 486,
00:09:17.267 --> 00:09:18.900
I went over to Corwin's house
00:09:18.900 --> 00:09:23.360
and we spent a couple of months screwing around with it.
00:09:23.360 --> 00:09:28.800
CORWIN: I'll add, I remember the day that I learned about the formation of GNU.
00:09:28.800 --> 00:09:33.440
It had a life. I mean, I read lots of licenses.
00:09:33.440 --> 00:09:38.480
I think a lot of us have written our own SWAG license code
00:09:38.480 --> 00:09:42.080
and I definitely credit the formation of GNU
00:09:42.080 --> 00:09:48.640
to my being interested in thinking about that.
00:09:48.640 --> 00:09:50.720
Right. I am working the slides here. Okay.
00:09:50.720 --> 00:09:54.800
Well. So yeah, this is your turn.
00:09:54.800 --> 00:09:57.360
I already mentioned Jeff yesterday,
00:09:57.360 --> 00:10:00.399
so your turn to take it for a few slides.
00:10:00.399 --> 00:10:07.600
ERIK: Along with learning Linux, we started learning the various tools
00:10:07.600 --> 00:10:11.680
that were available through the GNU free software movement.
00:10:11.680 --> 00:10:16.560
It didn't take very long before we got into using Emacs.
00:10:16.560 --> 00:10:21.839
When we were working as software developers back in the 90s,
00:10:21.839 --> 00:10:25.200
we both were using Emacs in an office environment
00:10:25.200 --> 00:10:28.959
with some other developers.
00:10:28.959 --> 00:10:32.367
It was obviously a very powerful tool,
00:10:32.367 --> 00:10:40.560
and we have really enjoyed using it for a couple of decades since then.
00:10:40.560 --> 00:10:48.880
CORWIN: I'm not going to go on at length about my love for Emacs here.
00:10:48.880 --> 00:10:52.480
So we put together a project.
00:10:52.480 --> 00:10:54.033
Each time we rehearse this,
00:10:54.033 --> 00:10:56.320
Erik introduces it with it's my story to tell,
00:10:56.320 --> 00:10:58.000
but since our flow is already to hell
00:10:58.000 --> 00:11:00.880
and we're just having a conversation with you today,
00:11:00.880 --> 00:11:05.920
I'll just jump in and say from a project standpoint,
00:11:05.920 --> 00:11:08.160
the project owes its inception
00:11:08.160 --> 00:11:10.320
to a tremendous number of people in fandom
00:11:10.320 --> 00:11:15.680
that encouraged us to just do crazy projects.
00:11:15.680 --> 00:11:17.760
In this case, to our friends
00:11:17.760 --> 00:11:20.640
that were hanging out with us on Discord all the time
00:11:20.640 --> 00:11:22.560
while we played different games.
00:11:22.560 --> 00:11:25.200
And through that, and while I was
00:11:25.200 --> 00:11:26.640
fooling with Emacs,
00:11:26.640 --> 00:11:34.000
generally other people played games,
00:11:34.000 --> 00:11:35.519
the pieces fell into place.
00:11:35.519 --> 00:11:37.279
We were all there, so we could talk about it,
00:11:37.279 --> 00:11:39.760
and the idea got exciting again.
00:11:39.760 --> 00:11:41.920
We started going back to all the places
00:11:41.920 --> 00:11:44.160
that we had had trouble with it in the past.
00:11:44.160 --> 00:11:45.760
It really did seem to add up.
00:11:45.760 --> 00:11:48.880
We built proof of concepts to do hard stuff quickly.
00:11:48.880 --> 00:11:54.880
I guess we'll probably head into that that area now.
00:11:54.880 --> 00:11:59.300
ERIK: This slide mentions: Why build a role-playing game in Emacs?
00:11:59.300 --> 00:12:03.360
I was watching the last presentation
00:12:03.360 --> 00:12:08.167
and there was a slide about all of the
problems
00:12:08.167 --> 00:12:10.333
that Emacs poses for retro gaming,
00:12:10.333 --> 00:12:14.100
where it interrupts the game loops and
it waits for user input.
00:12:14.100 --> 00:12:17.667
That was a whole list of reasons why
00:12:17.667 --> 00:12:21.233
Emacs actually does exactly what we want in our project
00:12:21.233 --> 00:12:31.360
and why Dungeon is a natural fit for Emacs.
00:12:31.360 --> 00:12:36.480
CORWIN: Hey there. Yeah, go ahead and continue.
00:12:36.480 --> 00:12:38.639
I just got a phone call, I think from Leo,
00:12:38.639 --> 00:12:40.639
so I'm going to mute.
00:12:40.639 --> 00:12:47.279
ERIK: So what we did in the project was basically
00:12:47.279 --> 00:12:49.680
come up with our minimum play-testable candidate.
00:12:49.680 --> 00:12:50.959
We listed all of the things
00:12:50.959 --> 00:12:54.240
that we need to be able to make the project do
00:12:54.240 --> 00:12:59.519
in order to recreate the Dungeon experience that we had
00:12:59.519 --> 00:13:01.279
with paper and dice sitting around a
00:13:01.279 --> 00:13:05.600
table when we were kids.
00:13:02.160 --> 00:13:12.570
And, I mean, we've, you know, it took a while for us to kind of
00:13:12.570 --> 00:13:15.870
tease apart the problem in a way where we could actually
00:13:15.870 --> 00:13:19.370
list out all of the features, like, what are the problems
00:13:19.370 --> 00:13:22.160
we have to solve and how do we solve them?
00:13:27.160 --> 00:13:31.050
So, creating any free software, any self-organizing free
00:13:31.050 --> 00:13:34.740
software project is challenging to start with, and we're
00:13:34.740 --> 00:13:38.530
generally people with a bunch of other responsibilities by
00:13:38.530 --> 00:13:43.570
the time we get to it. So, it's not just, hey, you know,
00:13:43.570 --> 00:13:48.350
the general herding cats, it's, you know, trying to make it
00:13:48.350 --> 00:13:50.160
a part of your life, too.
00:13:52.160 --> 00:13:56.570
That being kind of a, you know, challenging battle, we kind
00:13:56.570 --> 00:14:00.580
of aligned on some principles that we wanted to adhere to
00:14:00.580 --> 00:14:04.160
once we started taking the project seriously.
00:14:04.160 --> 00:14:10.640
Like, you know, particularly recognizing GNU in specific as
00:14:10.640 --> 00:14:14.160
we focus on giving back to the community.
00:14:15.160 --> 00:14:19.830
Taking what we learned as Perl programmers and, you know,
00:14:19.830 --> 00:14:23.920
bringing that spirit forward into our work and maybe
00:14:23.920 --> 00:14:28.830
specifically support, making sure that we can, you know,
00:14:28.830 --> 00:14:34.160
write functions for the game in Perl if we want to.
00:14:35.160 --> 00:14:40.250
And then to use the game as a vehicle to make people look
00:14:40.250 --> 00:14:45.510
beyond the typically open source – sorry, typically nom
00:14:45.510 --> 00:14:50.290
inally open source at best, generally pretty closed world of
00:14:50.290 --> 00:14:52.160
computer gaming.
00:14:52.160 --> 00:14:55.260
A lot of Windows users out there, a lot of non-free
00:14:55.260 --> 00:14:58.670
communication tools, and a lot of, you know, a lot of
00:14:58.670 --> 00:15:02.160
ground to cover from a free software perspective.
00:15:03.160 --> 00:15:08.160
So what can Emacs do from a gaming standpoint to open that up?
00:15:08.160 --> 00:15:12.960
And not to mention the hubris of the, you know, the two of
00:15:12.960 --> 00:15:17.600
us with a few friends basically deciding to take on what
00:15:17.600 --> 00:15:20.160
amounts to a huge project.
00:15:20.160 --> 00:15:24.080
You know, we're essentially a year in now and we haven't
00:15:24.080 --> 00:15:29.160
really gotten over halfway to our minimum play testable candidate.
00:15:30.160 --> 00:15:34.160
It's a work in progress. We've got a long road to go.
00:15:34.160 --> 00:15:37.310
There's at least 50 items on the things that we think are
00:15:37.310 --> 00:15:40.390
critical to be able to introduce it to my younger kids, for
00:15:40.390 --> 00:15:41.160
example.
00:15:41.160 --> 00:15:48.650
Okay, so we're in the accomplishments section. So we're
00:15:48.650 --> 00:15:51.700
supposed to be talking about the things that we have
00:15:51.700 --> 00:15:54.160
succeeded in doing in our first year.
00:15:55.160 --> 00:15:59.580
We have succeeded in working with data in org documents,
00:15:59.580 --> 00:16:04.030
using org mode tables to store the data that we're going to
00:16:04.030 --> 00:16:07.160
use in the various parts of our game.
00:16:07.160 --> 00:16:14.440
And we've had a lot of success with svg.el. It started with
00:16:14.440 --> 00:16:18.130
drawing maps and we have another talk about our mapping
00:16:18.130 --> 00:16:20.160
specifically coming up next.
00:16:21.160 --> 00:16:25.160
So we'll put off some of that discussion for a separate talk.
00:16:25.160 --> 00:16:30.050
But we've also succeeded in getting into a bunch of
00:16:30.050 --> 00:16:36.770
different elements of the game where we're, you know,
00:16:36.770 --> 00:16:39.340
making a lot of progress using this drawing engine we
00:16:39.340 --> 00:16:43.360
developed to also draw this other thing and also draw this
00:16:43.360 --> 00:16:45.160
other thing and also draw this other thing.
00:16:46.160 --> 00:16:46.160
And we kind of backed into, we've got this aesthetic
00:16:46.161 --> 00:16:54.750
and we're using it to draw interfaces for all of the different
00:16:54.750 --> 00:16:56.160
parts of the game.
00:16:56.160 --> 00:17:08.160
So let's talk a little bit about what works now.
00:17:11.160 --> 00:17:15.330
First of all, there's the mapping part that Erik mentioned
00:17:15.330 --> 00:17:19.040
and we'll jump here into, we'll start opening up some files
00:17:19.040 --> 00:17:20.160
and looking around.
00:17:20.160 --> 00:17:25.060
But then also later we'll fire up an IELM and look at some
00:17:25.060 --> 00:17:28.160
of the other proofs of concept.
00:17:28.160 --> 00:17:31.350
So hopefully we can pivot the second talk more toward the
00:17:31.350 --> 00:17:34.520
demos as we skip some of the interactive stuff that might
00:17:34.520 --> 00:17:37.160
be mentioned in the slides that we go by.
00:17:37.160 --> 00:17:38.160
Okay.
00:17:38.160 --> 00:17:48.160
So, maps, visual battleboard.
00:17:48.160 --> 00:17:51.160
The battleboard...
00:17:51.160 --> 00:17:55.160
I'm just going to skip it Erik, we'll hit it in the next one.
00:17:55.160 --> 00:17:57.160
Okay.
00:17:57.160 --> 00:18:03.160
Hang on.
00:18:05.160 --> 00:18:07.660
Okay, so I'm just going to go ahead and open up maps and
00:18:07.660 --> 00:18:12.490
let you talk from the SVG process itself, because that's
00:18:12.490 --> 00:18:15.160
the interesting part to me.
00:18:15.160 --> 00:18:21.160
Okay.
00:18:22.160 --> 00:18:26.350
Talk about the SVG process, like what do you think exactly
00:18:26.350 --> 00:18:31.310
we want to talk about? How we turn our data into an image
00:18:31.310 --> 00:18:34.160
or what are you hoping for?
00:18:34.160 --> 00:18:40.140
Yeah, so I mean did you want to talk more from the hand-d
00:18:40.140 --> 00:18:43.160
rawn SVG graphics at all?
00:18:43.160 --> 00:18:48.160
I thought we were going to save that stuff for the pathing talk.
00:18:48.160 --> 00:18:49.160
Okay, that sounds fine.
00:18:49.160 --> 00:18:50.160
But we can go into it right now if you want.
00:18:50.160 --> 00:18:54.640
Yeah, so we've got about 10 minutes before the turn where
00:18:54.640 --> 00:18:58.470
we thought we would first take any questions that are
00:18:58.470 --> 00:19:00.160
hanging out there.
00:19:00.160 --> 00:19:04.160
I unfortunately closed the Etherpad, but I can open it again real quick.
00:19:04.160 --> 00:19:09.850
Or you can jump into the pathing stuff now, or I can just
00:19:09.850 --> 00:19:14.160
throw open an IELM and we can start the demos.
00:19:15.160 --> 00:19:20.600
So let me invite Amin or Sacha back in, or Leo, if any of
00:19:20.600 --> 00:19:23.350
you want to join the conversation and make a suggestion as
00:19:23.350 --> 00:19:27.160
to how we balance between the remaining time.
00:19:27.160 --> 00:19:30.300
The rest of what we have left starts in on toward the
00:19:30.300 --> 00:19:34.250
technical, so especially if there would be questions about
00:19:34.250 --> 00:19:37.160
the game right now, that would be awesome.
00:19:37.160 --> 00:19:42.160
And I'm going to get seated again.
00:19:44.160 --> 00:19:48.870
I'm not sure if I talk over the stream, if you'll hear it,
00:19:48.870 --> 00:19:57.160
because I'm just watching your stream, but I can try writing on IRC.
00:20:01.160 --> 00:20:06.140
Sure, yeah, questions would be cool. Or, yeah, well Erik,
00:20:06.140 --> 00:20:08.980
why don't you just go ahead and start walking us through
00:20:08.980 --> 00:20:12.000
the hand drawn SVG stuff just a little bit, because I think
00:20:12.000 --> 00:20:14.950
if that isn't interesting to people, we can just preempt
00:20:14.950 --> 00:20:16.160
for a question.
00:20:17.160 --> 00:20:23.010
Okay, so historically when we decided to actually start
00:20:23.010 --> 00:20:27.080
writing code, one of the very first things we wanted to do
00:20:27.080 --> 00:20:30.990
was the maps, because initially it seemed like the maps
00:20:30.990 --> 00:20:34.750
were going to be one of the biggest challenges in terms of
00:20:34.750 --> 00:20:37.160
how do we get a text editor to draw pictures for us.
00:20:40.160 --> 00:20:44.350
So, we pretty quickly decided we wanted to work with SVGs
00:20:44.350 --> 00:20:48.370
because it allowed us to leverage the power of Emacs as a
00:20:48.370 --> 00:20:53.680
text editor and a text manipulator to write text graphics
00:20:53.680 --> 00:20:56.160
with the SVG format.
00:20:56.160 --> 00:20:59.770
So we did some SVG graphics by hand, we went in and just
00:20:59.770 --> 00:21:03.620
started hand coding things that looked visually like the
00:21:03.620 --> 00:21:07.300
maps we used to draw by hand on graph paper when we were,
00:21:07.300 --> 00:21:10.160
you know, sitting around the table.
00:21:10.160 --> 00:21:13.160
Yep, absolutely.
00:21:13.160 --> 00:21:17.610
What emerged from that is as we started working on some of
00:21:17.610 --> 00:21:22.140
these files, this particular image is a test of some 20
00:21:22.140 --> 00:21:25.910
wide water with some beaches around it and a special
00:21:25.910 --> 00:21:29.160
chamber kind of off to the side called a clapper.
00:21:29.160 --> 00:21:32.960
And this was the way we would code is by sketching by hand
00:21:32.960 --> 00:21:36.940
all of these things to look right. And then we would take
00:21:36.940 --> 00:21:40.810
that code and we noticed it became real repetitive as we
00:21:40.810 --> 00:21:45.160
would go like chunk of water chunk of water chunk of water.
00:21:45.160 --> 00:21:48.860
And we're like okay so what we really need is to define a
00:21:48.860 --> 00:21:52.620
set of, we call it tiles, but like you can think of it as
00:21:52.620 --> 00:21:56.660
rubber stamps where we write this graphics code, and then
00:21:56.660 --> 00:22:01.160
we're able to repeat it in different places around the map.
00:22:01.160 --> 00:22:05.680
You want to flip over to code view and show that or do we
00:22:05.680 --> 00:22:09.160
want to move into. Sure.
00:22:09.160 --> 00:22:10.160
Code view.
00:22:10.160 --> 00:22:14.700
So, you know, you can see just really obviously here the
00:22:14.700 --> 00:22:19.240
only thing that's changing from chunk of water to chunk of
00:22:19.240 --> 00:22:22.160
water is the x and y coordinates.
00:22:22.160 --> 00:22:26.990
And, you know, we can skip getting into the SVG directives
00:22:26.990 --> 00:22:31.640
and how all of the path statements actually work, but you
00:22:31.640 --> 00:22:36.230
can trust us, all of these D equals and there's m's and h's
00:22:36.230 --> 00:22:41.160
and V's that turns out to be horizontal lines and vertical
00:22:41.160 --> 00:22:42.160
lines and cursor moves
00:22:42.160 --> 00:22:46.900
kind of like turtle graphics if anyone remembers that far
00:22:46.900 --> 00:22:50.910
back, and we're picking up our pen and dropping it and
00:22:50.910 --> 00:22:54.160
drawing lines around on our map.
00:22:54.160 --> 00:22:58.090
Okay, so we do have a few questions if you want to take
00:22:58.090 --> 00:23:01.160
them now otherwise we can also jump in.
00:23:01.160 --> 00:23:05.160
Let's get them while they're fresh. Okay, sounds good.
00:23:05.160 --> 00:23:08.540
So we'll probably shift to question and answer mode for up
00:23:08.540 --> 00:23:12.490
to 15 minutes here. So if you do have questions, maybe
00:23:12.490 --> 00:23:15.740
stack rank, go ahead and sort the questions a little for us
00:23:15.740 --> 00:23:18.880
or comment on them to let us know which ones you want to
00:23:18.880 --> 00:23:21.540
see us get here if we start getting a little long winded or
00:23:21.540 --> 00:23:23.160
not just a long, we'll take direction.
00:23:23.160 --> 00:23:26.160
But thanks for your questions.
00:23:26.160 --> 00:23:30.050
I'd like to see a demo as well we'll look at that with the
00:23:30.050 --> 00:23:33.160
remaining time after this question block.
00:23:33.160 --> 00:23:38.000
More about what the game is okay sure. So let's let's take
00:23:38.000 --> 00:23:42.510
our one minute each swing at what the game is, you want to
00:23:42.510 --> 00:23:45.160
go first, I called weapons.
00:23:45.160 --> 00:23:47.160
Okay.
00:23:47.160 --> 00:23:52.180
Dungeon is like role playing games, but you don't really do
00:23:52.180 --> 00:23:56.990
role playing like the, for me the thing the core of being a
00:23:56.990 --> 00:24:01.400
role playing game is you take on the role of being your
00:24:01.400 --> 00:24:06.500
character and you play your character and dungeons not like
00:24:06.500 --> 00:24:08.160
that dungeon.
00:24:08.160 --> 00:24:11.160
You can play.
00:24:11.160 --> 00:24:14.660
So, the dungeon party always has eight characters in it.
00:24:14.660 --> 00:24:17.890
There's four in the front row and four in the back row and
00:24:17.890 --> 00:24:22.160
you march through the dungeon, fighting, whatever you encounter.
00:24:22.160 --> 00:24:25.700
And if there's one player you play all eight characters.
00:24:25.700 --> 00:24:29.180
And depending on how many players you have you split up the
00:24:29.180 --> 00:24:33.160
party in whatever way seems fair and equitable to everybody.
00:24:33.160 --> 00:24:36.010
And similarly I said the dungeon is kind of a simple game
00:24:36.010 --> 00:24:38.720
like there's only three races and there's only three
00:24:38.720 --> 00:24:42.160
classes, all of your characters are either human elf dwarf.
00:24:42.160 --> 00:24:45.680
They're all a warrior, a priest or a wizard, and all of
00:24:45.680 --> 00:24:49.400
these characters have, you know, special properties and
00:24:49.400 --> 00:24:52.820
special talents, that is why they come together in this
00:24:52.820 --> 00:24:54.160
party of eight.
00:24:54.160 --> 00:24:57.730
So essentially dungeon is a game about making up all of
00:24:57.730 --> 00:25:01.530
these eight characters and stomping through the dungeon
00:25:01.530 --> 00:25:04.160
killing things taking their stuff.
00:25:04.160 --> 00:25:08.120
Well you're way over but I don't know how much I have to
00:25:08.120 --> 00:25:12.160
add to that. I will just add that if, if you're.
00:25:12.160 --> 00:25:15.570
If one's passion as a dungeon master is killing player
00:25:15.570 --> 00:25:19.210
characters this game is meant for you. You don't have to
00:25:19.210 --> 00:25:23.050
build your game like that. But that's definitely a thing
00:25:23.050 --> 00:25:25.160
that people do with this game.
00:25:25.160 --> 00:25:28.430
And then as Erik said, it just encourages you to put your
00:25:28.430 --> 00:25:32.160
creativity on the table to bring all the different elements.
00:25:32.160 --> 00:25:35.830
Hopefully, this may be clear in our slides since we were a
00:25:35.830 --> 00:25:39.430
little fumbling for the first few minutes of the talk
00:25:39.431 --> 00:25:44.160
but there's also a kind of a player's guide that I started a few years ago.
00:25:44.160 --> 00:25:47.950
That's not super complete, but does cover some
00:25:47.950 --> 00:25:52.160
of the high level basics of the game that Erik's been talking from.
00:25:52.160 --> 00:25:55.800
And I would add that some of the things that you know some
00:25:55.800 --> 00:25:58.890
of what makes dungeon great is that there's a lot of
00:25:58.890 --> 00:26:02.950
mystery about it, like the player's handbook doesn't tell
00:26:02.950 --> 00:26:07.020
you all of the rules, or like any really mystery and like
00:26:07.020 --> 00:26:09.160
there's mazes and there's puzzles,
00:26:09.160 --> 00:26:12.650
and you have to figure out how things work, and like we've
00:26:12.650 --> 00:26:16.020
got all of these treasure items in there that could help
00:26:16.020 --> 00:26:20.160
you deal with a particular monster if it occurs to you to use it.
00:26:20.160 --> 00:26:24.160
And, you know, like that. There's a lot of.
00:26:24.160 --> 00:26:27.450
You don't know what's going on you're dropped in the middle
00:26:27.450 --> 00:26:30.680
of this situation and you have to try and survive and level
00:26:30.680 --> 00:26:33.750
up and figure it out. And if you succeed in doing that for
00:26:33.750 --> 00:26:36.520
a long enough eventually you start realizing that there are
00:26:36.520 --> 00:26:40.890
big picture puzzles that there are, you know, there is more to this than just
00:26:40.890 --> 00:26:43.160
killing things and taking their stuff.
00:26:43.160 --> 00:26:46.190
And that's where the joy of designing these games comes in
00:26:46.190 --> 00:26:48.890
for me is like designing the mazes and designing the
00:26:48.890 --> 00:26:51.890
puzzles and like, oh yeah and then they're going to come
00:26:51.890 --> 00:26:51.890
out of this room and you know what they're going to do.
00:26:51.891 --> 00:26:57.160
They're wanting to go that way.
00:26:57.160 --> 00:27:00.160
So I'm going to put the trap right there.
00:27:00.160 --> 00:27:00.160
And I walk right into it every time.
00:27:00.161 --> 00:27:00.161
And then when the party does get in your map
00:27:00.162 --> 00:27:00.162
and they do exactly what you thought and they hit the trap
00:27:00.163 --> 00:27:07.820
it's just really satisfying
00:27:07.820 --> 00:27:07.820
to watch the look on their little faces
00:27:07.821 --> 00:27:12.160
as they squirm and struggle to stay alive.
00:27:12.160 --> 00:27:14.580
Yeah, that's, that's what I was trying to get at. Thanks.
00:27:14.580 --> 00:27:18.160
All right, that was perfect for me. All right.
00:27:18.160 --> 00:27:21.360
So so highlight your question for me if you think it's
00:27:21.360 --> 00:27:24.800
important we grab it here before we jump into demos,
00:27:24.801 --> 00:27:28.160
but otherwise I think it's time to try running some code.
00:27:28.160 --> 00:27:30.160
Let's say.
00:27:30.160 --> 00:27:37.160
Okay, I say do it. Okay, so you less less camera more more emacs now.
00:27:37.160 --> 00:27:40.380
And hopefully I could find the right emacs the right
00:27:40.380 --> 00:27:43.160
desktop. All right, there we are.
00:27:43.160 --> 00:27:49.160
So we'll try to fire up
00:27:49.160 --> 00:27:59.160
a command right now. And I usually like to do the full path to emacs.
00:27:59.160 --> 00:28:07.160
When I'm going to run it under minus q.
00:28:07.160 --> 00:28:13.160
All right.
00:28:13.160 --> 00:28:17.160
Let's have some IELM.
00:28:17.160 --> 00:28:23.270
All right, and then I'm also going to do a load file on the
00:28:23.270 --> 00:28:29.790
net script that you can find in the repository in the emacs
00:28:29.790 --> 00:28:36.160
user and it's init scripts
00:28:36.160 --> 00:28:41.160
users folder
00:28:41.160 --> 00:28:48.160
nice.
00:28:48.160 --> 00:28:51.530
And it's called init-dm because that happened to fit with
00:28:51.531 --> 00:28:54.160
my naming scheme, potentially terrible.
00:28:54.160 --> 00:28:54.160
All right, and with that loaded in theory some very basic stuff will work
00:28:54.161 --> 00:28:54.161
even without us doing anything in IELM
00:28:54.162 --> 00:29:05.870
so I think the last thing Erik was talking about
00:29:05.871 --> 00:29:07.160
was the SVG code behind the maps.
00:29:07.160 --> 00:29:11.800
There as kind of the technical thread so we'll just fire
00:29:11.800 --> 00:29:15.160
open the maps, pick a dungeon level.
00:29:15.160 --> 00:29:17.160
Let's pick a pretty one.
00:29:17.160 --> 00:29:19.160
Okay, if I show this.
00:29:19.160 --> 00:29:23.160
Yeah, whatever.
00:29:23.160 --> 00:29:27.160
Is that the surface. Yeah.
00:29:27.160 --> 00:29:32.740
And let's scale it here I think if I recall that fun like
00:29:32.740 --> 00:29:36.820
once, once we got the engine up and running a little bit.
00:29:36.820 --> 00:29:40.870
We decided to do some experimentation about seeing
00:29:40.871 --> 00:29:47.160
what we could do to push the limits of our tile engine.
00:29:47.160 --> 00:29:54.450
So we more or less on the surface map, I basically started
00:29:54.450 --> 00:29:54.450
with almost no tiles from below like the water
00:29:54.451 --> 00:30:01.370
and the beaches and the general store and the stairs were existing tiles
00:30:01.371 --> 00:30:04.730
but then we were like this is going to be surface maps.
00:30:04.731 --> 00:30:07.160
We're outdoors so I want hills
00:30:07.160 --> 00:30:11.150
and I want trees, and I want grass, and it took a little
00:30:11.150 --> 00:30:15.430
while playing with SVG to come up with some acceptable code,
00:30:15.430 --> 00:30:19.610
but once the like the grass gets tiled out, it kind of,
00:30:19.610 --> 00:30:24.510
you know, gives the illusion of grass, and, you know, these
00:30:24.510 --> 00:30:25.160
are all in my estimation
00:30:25.160 --> 00:30:29.970
of crude graphics, but we're at the proof of concept stage,
00:30:29.970 --> 00:30:34.130
and it definitely proves that we can use our graphics
00:30:34.130 --> 00:30:38.490
engine to decide what we want our maps to look like, and
00:30:38.490 --> 00:30:42.970
real quickly compose new map tiles and stamp out a bunch of
00:30:42.970 --> 00:30:44.160
new maps.
00:30:44.160 --> 00:30:48.050
So now I'll show off one of the other things. So the next
00:30:48.050 --> 00:30:51.680
thing we did once we once we had the maps doing, and we
00:30:51.680 --> 00:30:56.040
haven't gotten into the features of the maps we can we can
00:30:56.040 --> 00:30:59.200
appoint time to that or not, but there are a number of
00:30:59.200 --> 00:31:01.160
features there that we can look at.
00:31:01.160 --> 00:31:06.310
The, we then wanted to try to see if that could make other
00:31:06.310 --> 00:31:11.550
interfaces more appealing so we built stuff like, that's
00:31:11.550 --> 00:31:14.160
going to be the map again.
00:31:14.160 --> 00:31:18.580
I'll just run it here through I am so it's more obvious
00:31:18.580 --> 00:31:20.160
what I'm doing.
00:31:20.160 --> 00:31:23.160
So let's look next to the character sheet.
00:31:23.160 --> 00:31:27.160
Oops.
00:31:27.160 --> 00:31:33.160
And alt P doesn't work. Okay.
00:31:33.160 --> 00:31:35.160
That's a bummer.
00:31:35.160 --> 00:31:38.160
That is not auto loaded.
00:31:38.160 --> 00:31:41.120
So this, this project is a bit of a mess right now, y'all,
00:31:41.120 --> 00:31:43.800
it does some stuff that's really exciting to us but the
00:31:43.800 --> 00:31:46.560
code is terrible and we need all the help we can get being
00:31:46.560 --> 00:31:49.160
told what our problems are and how to fix them.
00:31:49.160 --> 00:31:53.160
So that is if you take nothing away from this talk.
00:31:53.160 --> 00:32:00.160
Take away from it that we could use your help.
00:32:00.160 --> 00:32:03.692
Yeah, that doubles back to when we were talking about
00:32:03.693 --> 00:32:07.800
Larry Wall's cardinal virtues of programming like we definitely
00:32:07.800 --> 00:32:11.160
took on some hubris, thinking we could do this.
00:32:11.160 --> 00:32:14.300
We might not be wrong, but we could do it easier with more
00:32:14.300 --> 00:32:18.160
hands, you know, many hands make light work. All right.
00:32:18.160 --> 00:32:21.160
I'll bite.
00:32:21.160 --> 00:32:24.580
Yeah, and the character she won't load for us today I had
00:32:24.580 --> 00:32:27.880
some problems with my version control I had to revert my
00:32:27.880 --> 00:32:31.290
thing I threw all my local changes in a stash and it's it's
00:32:31.290 --> 00:32:35.160
a terrible mess let's look at stuff I tested already today.
00:32:35.160 --> 00:32:40.160
Before you got the battle board available.
00:32:40.160 --> 00:32:42.160
Let's find out.
00:32:42.160 --> 00:32:46.160
First of all, the library.
00:32:46.160 --> 00:32:57.160
In fact, actually, your basic require should work.
00:32:57.160 --> 00:32:59.160
No.
00:32:59.160 --> 00:33:03.490
You can try a load library. You know what, let's, I'm just
00:33:03.490 --> 00:33:07.350
going to go ahead and give it to you as a lab beast, since
00:33:07.350 --> 00:33:10.160
that's probably more fun to watch.
00:33:10.160 --> 00:33:16.570
So we'll take it from my own and this is more likely to be
00:33:16.570 --> 00:33:17.160
healthy.
00:33:17.160 --> 00:33:19.160
Since only some of the time.
00:33:19.160 --> 00:33:25.160
First we have to control x, all the IDM.
00:33:25.160 --> 00:33:30.360
All right, and having then loaded the net control you have
00:33:30.360 --> 00:33:35.550
nine should give me the maps, and we can verify things work
00:33:35.550 --> 00:33:39.160
in a basic way just by changing level.
00:33:39.160 --> 00:33:44.160
Let's look at something else.
00:33:44.160 --> 00:33:49.380
I mentioned, there were a number of bindings, show them
00:33:49.380 --> 00:33:50.160
briefly.
00:33:50.160 --> 00:33:55.820
We wrote our own functions to handle movement. Some of
00:33:55.820 --> 00:34:00.872
those in SVG dot el the left, left and right movements
00:34:00.873 --> 00:34:07.160
didn't seem to work quite quite likely coding, of course.
00:34:07.160 --> 00:34:10.160
Um, all right, enough.
00:34:10.160 --> 00:34:13.160
So let's, let's see if battle board works now.
00:34:13.160 --> 00:34:16.160
I really thought that was on F7.
00:34:16.160 --> 00:34:19.160
Up that's the character sheet suite.
00:34:19.160 --> 00:34:25.160
Okay, how to use your bindings.
00:34:25.160 --> 00:34:28.160
So that looks a little better.
00:34:28.160 --> 00:34:34.160
So let's talk about the character sheet.
00:34:34.160 --> 00:34:36.160
Yeah.
00:34:36.160 --> 00:34:40.570
So the character sheet was our first big repurposing of the
00:34:40.570 --> 00:34:45.160
engine that we couldn't do the battle board program that.
00:34:45.160 --> 00:34:54.160
Let's see if that runs now to.
00:34:54.160 --> 00:35:01.160
It's not interactive if it does.
00:35:01.160 --> 00:35:05.160
Good.
00:35:05.160 --> 00:35:09.160
So,
00:35:09.160 --> 00:35:12.360
try smex guess? No joy. All right, I'm not sure what's
00:35:12.360 --> 00:35:14.160
up with the battle board Erik.
00:35:14.160 --> 00:35:17.190
We haven't messed with that one for a while in fact we had
00:35:17.190 --> 00:35:20.270
discussed using its code as an example so maybe we'll debug
00:35:20.270 --> 00:35:21.160
it with you.
00:35:21.160 --> 00:35:24.160
I'll certainly check for questions first.
00:35:24.160 --> 00:35:29.740
Um, the. So the character sheet which is not scaling
00:35:29.740 --> 00:35:31.160
ideally here.
00:35:31.160 --> 00:35:36.160
See if reloading it does anything.
00:35:36.160 --> 00:35:37.160
Nope.
00:35:37.160 --> 00:35:40.660
As far as I can tell, assuming you don't have this
00:35:40.660 --> 00:35:43.160
implemented character sheet.
00:35:43.160 --> 00:35:49.800
That's right, there's everything in scale, it take in order
00:35:49.800 --> 00:35:54.160
to get what you were looking at there.
00:35:54.160 --> 00:35:56.160
All right.
00:35:56.160 --> 00:36:03.201
This, this whole thing is hard coded, basically to the
00:36:03.202 --> 00:36:08.160
gills, except for things like this.
00:36:08.160 --> 00:36:11.780
This program represents a re implementation of the drawing
00:36:11.780 --> 00:36:17.420
engine using all of the same things. Let's see that
00:36:17.420 --> 00:36:20.160
selected so
00:36:20.160 --> 00:36:23.160
we'll just try bringing up a map again.
00:36:23.160 --> 00:36:27.180
There's one and you'll notice DM map doesn't know anything
00:36:27.180 --> 00:36:31.240
about the new draw engine, and there are a couple of places
00:36:31.240 --> 00:36:35.160
where the new draw engine is still hooked in to the.
00:36:35.160 --> 00:36:38.250
For example, particularly the sizing of the graph paper
00:36:38.250 --> 00:36:43.160
background. So I've started the work in DM draw.
00:36:44.160 --> 00:36:47.950
Of trying to show how exactly we did this removing the, how
00:36:47.950 --> 00:36:51.040
did we get data out of org mode that I talked about
00:36:51.040 --> 00:36:56.410
yesterday with our ETL flows, and just focusing on what how
00:36:56.410 --> 00:37:00.580
did we solve the problem of predicated drawing, which I
00:37:00.580 --> 00:37:04.290
realized we didn't really talk about so should I jump into
00:37:04.290 --> 00:37:05.160
that.
00:37:05.160 --> 00:37:06.160
Yeah, I guess.
00:37:06.160 --> 00:37:09.160
How are we on time, we have time for detours.
00:37:09.160 --> 00:37:12.450
Um, yeah, it looks like we could spend two or three minutes
00:37:12.450 --> 00:37:15.160
on that and then come back for the questions.
00:37:15.160 --> 00:37:18.160
Cool.
00:37:18.160 --> 00:37:21.440
And I'm just going to peek into my org mode into my chat
00:37:21.440 --> 00:37:24.970
conference and I don't see anybody talking to me from the
00:37:24.970 --> 00:37:29.160
organizer channel, so I'm gonna assume that's a good guess.
00:37:29.160 --> 00:37:33.700
All right, so let's go ahead and play with the map a
00:37:33.700 --> 00:37:38.170
little then that is pretty fun and so much fun that we
00:37:38.170 --> 00:37:42.640
had to curtail play sessions in order to keep working on
00:37:42.640 --> 00:37:44.160
the project.
00:37:44.160 --> 00:37:52.160
So, I'll, I'll do the.
00:37:52.160 --> 00:37:58.516
Um, we'll try to find something different from any gift
00:37:58.517 --> 00:38:01.160
I've shared here right.
00:38:01.160 --> 00:38:06.160
So here we are in a random. Go ahead, Erik, you feel.
00:38:06.160 --> 00:38:10.660
Okay, so what we're, what Corwin is doing here is he's
00:38:10.660 --> 00:38:15.380
about to put the map into play mode, which is going to turn
00:38:15.380 --> 00:38:17.160
on the fog of war.
00:38:17.160 --> 00:38:21.100
And then we're going to use the fog of war and the, the
00:38:21.100 --> 00:38:25.230
play mode to kind of reveal the map, one square at a time
00:38:25.230 --> 00:38:28.160
like we would during a play session.
00:38:28.160 --> 00:38:32.350
So we'll just drop the party randomly somewhere onto this
00:38:32.350 --> 00:38:36.160
map looks like we're on alpha maze level three here.
00:38:36.160 --> 00:38:46.160
And then we'll walk around a little.
00:38:46.160 --> 00:38:52.280
Okay, so we're halfway there. I'll have to, I'll have to do
00:38:52.280 --> 00:38:55.540
a full redraw the sketch the sketching stuff has has has
00:38:55.540 --> 00:38:58.980
broken things here like I said, the two aren't separated
00:38:58.980 --> 00:39:01.910
once I run them in the same instance, they're not
00:39:01.910 --> 00:39:03.160
predictable.
00:39:03.160 --> 00:39:08.060
Okay, so let me elaborate here when he says the sketching
00:39:08.060 --> 00:39:12.960
stuff. The current focus of our work is to turn all of this
00:39:12.960 --> 00:39:17.940
map stuff we've got into a basically a WYSIWYG map editor,
00:39:17.940 --> 00:39:22.330
where we can get into the tiles, and we'll be able to
00:39:22.330 --> 00:39:24.160
select the tile and basically rubber
00:39:24.160 --> 00:39:30.510
stamp it into a map graphically, and then save the map file
00:39:30.510 --> 00:39:36.470
out and load it back in later, so that we're able to just
00:39:36.470 --> 00:39:40.160
pound out these maps real fast.
00:39:40.160 --> 00:39:44.480
Using a graphical editor rather than having to hand code
00:39:44.480 --> 00:39:48.160
every symbol and every square of the tables.
00:39:48.160 --> 00:39:51.160
So the process of doing that.
00:39:51.160 --> 00:39:56.190
I hate them on things are a mess we've got covers off those
00:39:56.190 --> 00:40:03.160
wires hanging out different stuff works on different days.
00:40:03.160 --> 00:40:06.860
Well, I will say in our defense this is exactly why we
00:40:06.860 --> 00:40:10.880
staged a complicated thing, and probably we should have
00:40:10.880 --> 00:40:14.510
just gone with that instead of trying to give you the
00:40:14.510 --> 00:40:18.460
experience of, of what it's like to use Emacs to do this
00:40:18.460 --> 00:40:21.160
which is sort of the last
00:40:21.160 --> 00:40:26.450
thought there and my apologies for that if that's made it
00:40:26.450 --> 00:40:31.650
harder to follow the thread. Let's check back now for
00:40:31.650 --> 00:40:37.160
questions and see if anybody wants to redirect at all.
00:40:37.160 --> 00:40:41.438
Oh yep, this. So what you're looking at all uses
00:40:41.439 --> 00:40:46.860
progrmamatic SVG generation for question number four there,
00:40:46.860 --> 00:40:52.160
have you played with generating SVGs programmatically in Emacs.
00:40:52.160 --> 00:40:58.160
That is what the maps are doing in terms of
00:40:58.160 --> 00:41:01.860
being more explicit about that we started hand coding
00:41:01.860 --> 00:41:05.650
things and once we got the, the idea of what the code was
00:41:05.650 --> 00:41:10.160
going to look like we switched to doing it programmatically.
00:41:10.160 --> 00:41:13.330
So, we were going to open up maybe now we've got time we
00:41:13.330 --> 00:41:16.910
can get into the tileset real quick. Sure, we definitely
00:41:16.910 --> 00:41:19.820
didn't do any of the pathing slides and so now we've
00:41:19.820 --> 00:41:23.160
skipped over some stuff we were going to present.
00:41:23.160 --> 00:41:27.030
Yeah, that's right we skipped a whole bunch of slides and I
00:41:27.030 --> 00:41:31.160
can certainly go back to them they're open here obviously.
00:41:31.160 --> 00:41:34.110
I'm right I was just showing off the sketching tool,
00:41:34.110 --> 00:41:37.530
briefly in that context but I think you're right, let's, we
00:41:37.530 --> 00:41:40.800
can jump over to the actually I should finish with this now
00:41:40.800 --> 00:41:42.160
having teased it.
00:41:42.160 --> 00:41:46.970
So let's do the same thing here Ctrl H M, and you'll see in
00:41:46.970 --> 00:41:52.160
this case there are very few key bindings that are set up.
00:41:52.160 --> 00:41:57.320
This shift delete has a terror or shift with a control
00:41:57.320 --> 00:42:01.920
delete, it would seem to be. So that has a couple obvious
00:42:01.920 --> 00:42:06.590
bugs with it right didn't pick it didn't pick up those
00:42:06.590 --> 00:42:12.160
control points until I reuse them not clearing that stack.
00:42:12.160 --> 00:42:16.720
I think we can also should probably think about whether the
00:42:16.720 --> 00:42:21.060
origin should return and hey marking that origin would be
00:42:21.060 --> 00:42:25.370
nice. So there's a tremendous amount to do here this is
00:42:25.370 --> 00:42:30.090
just showing that it is possible to use, essentially like a
00:42:30.090 --> 00:42:31.160
touch input to,
00:42:31.160 --> 00:42:40.730
yeah, and then also we can switch over to our place tool,
00:42:40.730 --> 00:42:46.830
and hopefully we can get a nice big menu of all the tiles that
00:42:46.830 --> 00:42:50.160
Erik prepared for the game maps.
00:42:50.160 --> 00:42:55.160
That was probably a terrible choice but there you have just
00:42:55.160 --> 00:42:57.160
a bit of corridor right.
00:42:57.160 --> 00:43:01.160
That looks.
00:43:01.160 --> 00:43:03.160
And even the click.
00:43:03.160 --> 00:43:06.870
Yep, and this click action here is the last thing I
00:43:06.870 --> 00:43:10.510
was working on before I dropped everything to build the
00:43:10.510 --> 00:43:14.160
decks that we will soon share for this conference.
00:43:14.160 --> 00:43:20.160
So okay, back to the tile sets.
00:43:20.160 --> 00:43:24.130
So the way we approached drawing it programmatically is we
00:43:24.130 --> 00:43:28.160
broke our code up into little snippets we called tiles.
00:43:28.160 --> 00:43:31.240
And so this is where I was going to open up the tiles out
00:43:31.240 --> 00:43:34.610
here, basically each tile has a name, and then with that
00:43:34.610 --> 00:43:38.160
name we place data into different layers of the image.
00:43:38.160 --> 00:43:43.290
Some of the layers are just SVG paths, and the data is just
00:43:43.290 --> 00:43:48.430
SVG commands, like we saw in that handwritten code, and
00:43:48.430 --> 00:43:53.560
some of it is compositions of other tiles, so a tile can be
00:43:53.560 --> 00:43:56.160
made up of other tiles.
00:43:56.160 --> 00:44:00.270
Furthermore, some of these tiles have conditional code in
00:44:00.270 --> 00:44:04.460
it, where like some of this stuff is talking about elf and
00:44:04.460 --> 00:44:05.160
bang elf.
00:44:05.160 --> 00:44:09.540
So the map is going to be drawn differently depending on
00:44:09.540 --> 00:44:13.160
whether or not there's elves in the party.
00:44:13.160 --> 00:44:17.160
So, and that's the demo they broke.
00:44:17.160 --> 00:44:20.160
So the engine has to make all those decisions.
00:44:20.160 --> 00:44:22.887
And that's what we're calling predicated drawing. Oh, there's
00:44:22.888 --> 00:44:26.810
a special room here. Do you have any elves? You do. So I
00:44:26.810 --> 00:44:33.160
draw it the "there is elves" way.
00:44:33.160 --> 00:44:37.440
Yeah, so we built up the set of tiles, and then we
00:44:37.440 --> 00:44:42.450
basically made map files, which take our map and break it
00:44:42.450 --> 00:44:46.840
up into XY grids, and then we drop these tiles into
00:44:46.840 --> 00:44:49.160
positions on the map.
00:44:49.160 --> 00:44:52.060
So we can use the same tile square after square after
00:44:52.060 --> 00:44:55.470
square. When there's a corridor north-south, it's the same
00:44:55.470 --> 00:44:59.980
tile over and over again. And that makes it easy to reuse
00:44:59.980 --> 00:45:01.160
the code.
00:45:01.160 --> 00:45:12.370
And also, when we go to present the -- what am I trying to
00:45:12.370 --> 00:45:16.180
say -- the drawing in fog of war mode, as we move down the
00:45:16.180 --> 00:45:20.280
corridor, we can just add the necessary code one bit at a
00:45:20.280 --> 00:45:24.160
time to the visible image, so that what we're displaying
00:45:24.160 --> 00:45:28.160
doesn't contain any data except what the party has already
00:45:28.160 --> 00:45:30.160
discovered.
00:45:30.160 --> 00:45:34.720
And thus we have kind of spoiler-rich documents sitting on
00:45:34.720 --> 00:45:39.120
the GM server, and then less -- and spoiler-free data that
00:45:39.120 --> 00:45:43.160
flows down to the org mode files on the player system.
00:45:43.160 --> 00:45:47.660
And the only real challenge is making sure that nothing
00:45:47.660 --> 00:45:52.230
that the game does can mess with the users -- the players'
00:45:52.230 --> 00:45:56.610
data file, in case they might have their own notes and
00:45:56.610 --> 00:46:03.800
things in it. That would be the one, you know, number one
00:46:03.800 --> 00:46:06.160
thing to avoid.
00:46:06.160 --> 00:46:09.200
Another thing we can talk about here is that there are
00:46:09.200 --> 00:46:12.350
layers. You can see this table at the bottom has tile and
00:46:12.350 --> 00:46:16.860
overlay. The overlay column is just going to contain some
00:46:16.860 --> 00:46:19.160
actual SVG XML style tags.
00:46:19.160 --> 00:46:23.100
So that's where we can add whatever text elements or other
00:46:23.100 --> 00:46:27.120
SVG, like raw SVG tags we want. Whereas a lot of the other
00:46:27.120 --> 00:46:30.980
layers are going to be like path layers, we've got water
00:46:30.980 --> 00:46:33.160
layers and beach layers.
00:46:33.160 --> 00:46:36.370
And our plan was to have a style sheet that defines how
00:46:36.370 --> 00:46:39.790
each of those layers are represented. So like when the
00:46:39.790 --> 00:46:43.140
water gets drawn blue and it's got arrows on it giving it
00:46:43.140 --> 00:46:47.140
direction, all of that can be customized with a style sheet
00:46:47.140 --> 00:46:50.160
to change the water to be whatever you want.
00:46:50.160 --> 00:46:53.430
And like we have beaches as yellow, but maybe you like
00:46:53.430 --> 00:46:56.160
beaches as red or, you know, whatever.
00:46:56.160 --> 00:47:03.570
So we also built some test programs and various -- I'm not
00:47:03.570 --> 00:47:05.900
sure what kind of shape we're going to find these in, but
00:47:05.900 --> 00:47:07.160
we can try running them.
00:47:07.160 --> 00:47:13.950
Here, for example, is just a very basic -- using the same
00:47:13.950 --> 00:47:21.160
file to define the tiles and then the layout, so to speak.
00:47:21.160 --> 00:47:25.160
Oh, look at that.
00:47:25.160 --> 00:47:29.160
There's the layout. Okay, so that actually looks fine. Tile.
00:47:29.160 --> 00:47:33.430
And it's path. So this is defining a tile named "seas" and
00:47:33.430 --> 00:47:37.160
it's going to have a list of tiles defined above.
00:47:37.160 --> 00:47:41.120
And you'll notice also that we can just sort of freely
00:47:41.120 --> 00:47:44.750
define and redefine and it sort of figures out, oh, this
00:47:44.750 --> 00:47:47.160
must still be part of the B row.
00:47:47.160 --> 00:48:00.160
We could also have done this.
00:48:00.160 --> 00:48:08.160
Okay, so this would work as would this.
00:48:08.160 --> 00:48:11.930
>> Early on in development when we were talking about
00:48:11.930 --> 00:48:16.520
getting data in and out of these org tables, it was kind of
00:48:16.520 --> 00:48:22.160
a priority to us to leave the way the data is organized
00:48:22.160 --> 00:48:25.160
open to the users and to the dungeon masters.
00:48:25.160 --> 00:48:30.860
So while we set our tile set apart from our map sets, this
00:48:30.860 --> 00:48:36.430
clearly shows that you can cram a tile set and a map into a
00:48:36.430 --> 00:48:38.160
single file.
00:48:38.160 --> 00:48:41.170
So in situations like the surface where we're using
00:48:41.170 --> 00:48:44.610
different tiles from other maps, maybe it makes sense to
00:48:44.610 --> 00:48:47.890
move, you know, those tiles just into the file with your
00:48:47.890 --> 00:48:49.160
map.
00:48:49.160 --> 00:48:51.880
But we also wanted to make sure, like, it's hard for us to
00:48:51.880 --> 00:48:54.640
predict how other people are going to want to use this when
00:48:54.640 --> 00:48:56.160
they design their games.
00:48:56.160 --> 00:49:00.780
So we wanted to leave it as versatile as possible about how
00:49:00.780 --> 00:49:02.160
you can use it.
00:49:02.160 --> 00:49:04.810
>> Where it matters, right? Not support every feature in
00:49:04.810 --> 00:49:05.160
the world.
00:49:05.160 --> 00:49:08.560
I can't count the number of times I said, Erik, Erik, Erik,
00:49:08.560 --> 00:49:12.000
hey, if we do it like this, people will be -- and he just,
00:49:12.000 --> 00:49:14.160
like, does it have to do that?
00:49:14.160 --> 00:49:19.090
Like, do we need it right away? Do you have to really
00:49:19.090 --> 00:49:21.160
rewrite everything so it can all do that?
00:49:21.160 --> 00:49:26.160
And a lot of those conversations, too.
00:49:26.160 --> 00:49:30.160
But the key flexibilities are really there.
00:49:30.160 --> 00:49:32.160
People might want to use a lot of different files.
00:49:32.160 --> 00:49:34.160
They might want to lay the tables out however they want.
00:49:34.160 --> 00:49:37.590
They have to be able to say, hey, this is a table that has
00:49:37.590 --> 00:49:40.950
data that's controlled by the game, and everything else in
00:49:40.950 --> 00:49:43.160
the file is not the game's problem.
00:49:43.160 --> 00:49:45.980
>> And our table, some of our tables started getting really
00:49:45.980 --> 00:49:48.160
wide, so we started striping the tables.
00:49:48.160 --> 00:49:52.140
We'll repeat the same table over and over and over again to
00:49:52.140 --> 00:49:56.180
get all of the columns in there without making it, you know,
00:49:56.180 --> 00:49:58.160
a million miles wide.
00:49:58.160 --> 00:49:59.160
>> Yeah.
00:49:59.160 --> 00:50:02.450
Do you want to -- should I go ahead and pull open, like, a
00:50:02.450 --> 00:50:04.160
level here, do you think?
00:50:04.160 --> 00:50:05.160
>> Sure.
00:50:05.160 --> 00:50:06.160
>> Just to have shown it.
00:50:06.160 --> 00:50:08.750
>> The file set's a great example of striped tables if you
00:50:08.750 --> 00:50:11.160
look down, like, in the level change feature.
00:50:11.160 --> 00:50:18.160
>> Oh, sure.
00:50:18.160 --> 00:50:21.160
>> Sorry, I'm not quite sitting well to my keyboard here.
00:50:21.160 --> 00:50:30.160
I can just readjust things real quick.
00:50:30.160 --> 00:50:33.920
So what, you know, you can see here, like, some of these
00:50:33.920 --> 00:50:38.160
tables got real wide when we're stuffing SVG tags into them.
00:50:38.160 --> 00:50:44.160
And what we -- oh, maybe it's not in these.
00:50:44.160 --> 00:50:50.160
I thought it was.
00:50:50.160 --> 00:50:51.160
It's special, probably.
00:50:51.160 --> 00:50:52.160
>> Yeah.
00:50:52.160 --> 00:50:54.160
No, there it is, yeah.
00:50:54.160 --> 00:50:55.160
It was in level change.
00:50:55.160 --> 00:50:57.160
It does the table key repeat.
00:50:57.160 --> 00:50:58.160
>> Okay, great.
00:50:58.160 --> 00:50:59.720
>> You were just scrolling up and down so fast I didn't
00:50:59.720 --> 00:51:00.160
realize.
00:51:00.160 --> 00:51:04.270
So this first table, we've got path and what is that,
00:51:04.270 --> 00:51:05.160
stairs?
00:51:05.160 --> 00:51:09.010
So the stairs level is one that draws in, like, a pink
00:51:09.010 --> 00:51:13.160
color to highlight places where you can change level.
00:51:13.160 --> 00:51:16.120
And then if we scroll down to the second half of this
00:51:16.120 --> 00:51:19.380
section, the second table is going to have all of these
00:51:19.380 --> 00:51:24.000
same tiles in it, but instead of path and stairs, we're
00:51:24.000 --> 00:51:27.160
going to have other columns.
00:51:27.160 --> 00:51:31.160
Can we see the next table?
00:51:31.160 --> 00:51:32.160
There we go.
00:51:32.160 --> 00:51:35.610
So the same tiles, only here we've got overlay,
00:51:35.610 --> 00:51:38.160
documentation, and behavior.
00:51:38.160 --> 00:51:40.160
And I guess we haven't talked about this at all.
00:51:40.160 --> 00:51:44.920
The behavior column was our concept of a way that we could
00:51:44.920 --> 00:51:50.100
attach functions, basically, to these different areas of
00:51:50.100 --> 00:51:51.160
the map.
00:51:51.160 --> 00:51:55.920
Because sometimes when you enter an area, we want it to do
00:51:55.920 --> 00:51:57.160
something.
00:51:57.160 --> 00:52:00.880
Like when you enter a stairs down, maybe we want it to
00:52:00.880 --> 00:52:04.850
change to the next level and draw the stairs up behind you
00:52:04.850 --> 00:52:08.160
and draw you where you are on the next level.
00:52:08.160 --> 00:52:13.470
So these are like hooks where we could attach functions or,
00:52:13.470 --> 00:52:18.390
you know, macros or whatever to make the map have these
00:52:18.390 --> 00:52:23.160
behaviors as we get further towards automation.
00:52:23.160 --> 00:52:25.160
Cool.
00:52:25.160 --> 00:52:31.160
So that's that should be pretty close to our time.
00:52:31.160 --> 00:52:34.160
Questions or just say goodbye.
00:52:34.160 --> 00:52:38.160
Yeah, so there's the I'm sorry we couldn't show it earlier.
00:52:38.160 --> 00:52:41.160
There is the battle board.
00:52:41.160 --> 00:52:46.160
And so this is used just to keep track of hit points.
00:52:46.160 --> 00:52:50.540
So with this example, battle board, dm battle board.el,
00:52:50.540 --> 00:52:54.590
there's there's a complete example of not only in a single
00:52:54.590 --> 00:52:58.430
file reaper, we filling out the tell the cells and the
00:52:58.430 --> 00:53:03.720
tiles, but then coming in and keeping the org mode file in
00:53:03.720 --> 00:53:06.160
sync with with clicks.
00:53:06.160 --> 00:53:11.040
So, and I can press the star key and set my damage to minus
00:53:11.040 --> 00:53:14.160
one and take the damage back off.
00:53:14.160 --> 00:53:17.770
I just haven't spent a lot of time building up fancy bind
00:53:17.770 --> 00:53:21.620
ings for this, you'll also find that the crew probably find
00:53:21.620 --> 00:53:25.270
how I figure out what was clicked on in the code hard, but
00:53:25.270 --> 00:53:30.010
if I just assign something recognizable for damage, and
00:53:30.010 --> 00:53:33.160
then come into.
00:53:33.160 --> 00:53:39.030
It will now have opened the org mode file behind the scenes
00:53:39.030 --> 00:53:41.160
because it's changing it.
00:53:41.160 --> 00:53:48.340
And we can then look at that file a little bit and
00:53:48.340 --> 00:53:54.130
hopefully that is on large enough you can kind of see there
00:53:54.130 --> 00:53:57.160
's our 17 damage landed in armor.
00:53:57.160 --> 00:54:04.200
The logic that sits behind that to figure out the part of
00:54:04.200 --> 00:54:10.160
the screen is not necessarily our finest work.
00:54:10.160 --> 00:54:12.960
But it does work and that's one kind of stuff was used on
00:54:12.960 --> 00:54:16.030
the map a little bit too. We didn't really get to show that
00:54:16.030 --> 00:54:18.970
in the demo but as you're scrolling around there's like a
00:54:18.970 --> 00:54:22.160
highlighter that that, you know, we were drawing on.
00:54:22.160 --> 00:54:26.160
Oh sure, show you which square you've got selected.
00:54:26.160 --> 00:54:30.300
We were having trouble with that code. Initially, and we
00:54:30.300 --> 00:54:33.160
were sometimes revealing the wrong.
00:54:33.160 --> 00:54:38.160
Okay.
00:54:38.160 --> 00:54:41.320
And I don't know how we're set for time but I just saw a
00:54:41.320 --> 00:54:45.240
message from Trixie that she could jump on if we want her.
00:54:45.240 --> 00:54:48.290
Oh, that would be amazing. Yeah, go ahead and invite her in
00:54:48.290 --> 00:54:51.160
I'll just cut to the scene as soon as she's in.
00:54:51.160 --> 00:54:54.160
I think.
00:54:54.160 --> 00:54:58.080
Yeah, so we're reaching the ask me anything portion of the
00:54:58.080 --> 00:55:01.760
program here with what, with what time we have left for
00:55:01.760 --> 00:55:03.160
your questions.
00:55:03.160 --> 00:55:09.170
Please correct me if we're still like 10 minutes, you know,
00:55:09.170 --> 00:55:15.450
if we're, if we're more than like 15 to 20 minutes from our
00:55:15.450 --> 00:55:20.560
time but I suspect we've left way left way less than that
00:55:20.560 --> 00:55:25.160
and out of respect for all the other presenters.
00:55:25.160 --> 00:55:29.160
I don't want to close that actually.
00:55:29.160 --> 00:55:33.060
I think I may have found an old version of my slides that
00:55:33.060 --> 00:55:35.160
can have some good stuff.
00:55:35.160 --> 00:55:40.220
It's been an event for a couple of weeks here I had a break
00:55:40.220 --> 00:55:45.190
in and my somebody got into our bank accounts and nasty
00:55:45.190 --> 00:55:51.160
business, just a lot going on over, over this whole year I think.
00:55:51.160 --> 00:55:54.160
Any more questions to share.
00:55:54.160 --> 00:56:02.240
Sure. So, I think there was at least one we deferred a
00:56:02.240 --> 00:56:06.160
little bit with the game is
00:56:06.160 --> 00:56:08.990
always eight characters that can be divided right that's so
00:56:08.990 --> 00:56:11.660
always eight characters that can be divided between the
00:56:11.660 --> 00:56:14.540
party is the classic formula, it actually works pretty well
00:56:14.540 --> 00:56:16.160
for a conversational group.
00:56:16.160 --> 00:56:18.810
I think the idea that role playing games are about talking
00:56:18.810 --> 00:56:21.330
to each other and being good at them is about taking
00:56:21.330 --> 00:56:23.770
excellent notes. So, when you're sitting around with a
00:56:23.770 --> 00:56:26.070
group of people and you're going to have to wait for them
00:56:26.070 --> 00:56:29.410
while they dig through their notes and listen to all of the
00:56:29.410 --> 00:56:33.160
things they find interesting to say, and try to reach an
00:56:33.160 --> 00:56:35.160
imaginative place that you can stay together.
00:56:35.160 --> 00:56:38.800
And when you're doing all that and working in dice and
00:56:38.800 --> 00:56:43.250
remembering the rules. It's actually a complicated activity,
00:56:43.250 --> 00:56:47.340
I liken it more to a bridge game, then to like, you know,
00:56:47.340 --> 00:56:51.310
part cheesy or perhaps even like risk or access and allies
00:56:51.310 --> 00:56:55.620
or other games that have have definitely the strategy to
00:56:55.620 --> 00:56:57.160
them but I don't.
00:56:57.160 --> 00:57:01.160
Erik, your thoughts.
00:57:02.160 --> 00:57:05.160
I think that's fair.
00:57:05.160 --> 00:57:08.880
You know yes definitely. The, the tradition is to always
00:57:08.880 --> 00:57:12.600
have eight characters in the party, and, you know, one of
00:57:12.600 --> 00:57:16.320
the great things about dungeon is that everybody who writes
00:57:16.320 --> 00:57:19.730
their own dungeon gets to write their own rules, and is
00:57:19.730 --> 00:57:22.160
free to change whatever you want.
00:57:22.160 --> 00:57:26.700
I've definitely seen people try to take on challenging that
00:57:26.700 --> 00:57:30.160
always eight characters in a party thing.
00:57:30.160 --> 00:57:33.460
I've seen people take approaches like every player gets two
00:57:33.460 --> 00:57:36.570
characters and then you can have a party ranging from two
00:57:36.570 --> 00:57:40.130
to 10, or there's always going to be 10 or there's, you
00:57:40.130 --> 00:57:43.340
know, this or that or people have tried stuff, and none of
00:57:43.340 --> 00:57:47.170
it has really worked out very satisfactorily we always seem
00:57:47.170 --> 00:57:50.160
to keep coming back to our party of eight.
00:57:50.160 --> 00:57:55.710
It's, it's one of the things that dungeon that you can't
00:57:55.710 --> 00:57:59.290
change when you write your own dungeon. And that's the
00:57:59.290 --> 00:58:03.900
reason it's so complicated as a, as a software project why
00:58:03.900 --> 00:58:08.640
it's taken us decades, because trying to model the data for
00:58:08.640 --> 00:58:13.820
example or really any attempt, quantify it in specific
00:58:13.820 --> 00:58:16.160
terms always falls to examples.
00:58:16.160 --> 00:58:20.740
You know dungeons usually have elves, elves, dwarves and
00:58:20.740 --> 00:58:25.160
humans. They have priests, wizards and warriors.
00:58:25.160 --> 00:58:29.330
They have eight characters in the party. The Balrogs are
00:58:29.330 --> 00:58:34.160
particularly nasty and live in a room of some specific shape.
00:58:34.160 --> 00:58:57.160
And they have spoilers.
00:58:57.160 --> 00:59:00.900
So let's touch on special power real quick since that's one
00:59:00.900 --> 00:59:04.820
of the things that is kind of unique to dungeon. And one of
00:59:04.820 --> 00:59:08.710
the things that is the biggest challenge to us and trying
00:59:08.710 --> 00:59:12.160
to code a system like this for automated play.
00:59:12.160 --> 00:59:15.680
And that's that every character gets a unique special power
00:59:15.680 --> 00:59:19.300
and traditionally you negotiate your special power with the
00:59:19.300 --> 00:59:22.600
dungeon master when you create your character, and
00:59:22.600 --> 00:59:25.970
occasionally throughout the course of the characters life
00:59:25.970 --> 00:59:29.160
their special power might change due to game circumstances,
00:59:29.160 --> 00:59:34.160
usually it improves but sometimes not.
00:59:34.160 --> 00:59:37.180
So those are the most fun conversations right sometimes we
00:59:37.180 --> 00:59:39.820
have fun gaming sessions where we barely get all the
00:59:39.820 --> 00:59:42.800
characters created and started, because we get off into
00:59:42.800 --> 00:59:45.780
arguing about the special powers no Zelda special powers
00:59:45.780 --> 00:59:49.160
obviously the candle Come on.
00:59:49.160 --> 00:59:54.160
Also that was like, not so.
00:59:54.160 --> 01:00:02.160
I still have my t shirt. Hey, there she is. Let's cut scene.
01:00:02.160 --> 01:00:05.890
I'm going to be working with fun filters today, because
01:00:05.890 --> 01:00:12.250
that's what we got going on over here. All right, I'm going
01:00:12.250 --> 01:00:19.160
to recut everybody hang on tight.
01:00:19.160 --> 01:00:21.160
All right, there's Erik.
01:00:21.160 --> 01:00:24.160
This is going to be Erik for a second home.
01:00:24.160 --> 01:00:27.680
No worries. And welcome to that welcome to the stream. Trix
01:00:27.680 --> 01:00:29.160
ie horror.
01:00:29.160 --> 01:00:33.410
Who is one of our project team members somebody who's
01:00:33.410 --> 01:00:37.160
learning Emacs as part of the project, and.
01:00:37.160 --> 01:00:42.690
Yeah, I particularly wanted to invite you on to talk about
01:00:42.690 --> 01:00:47.700
your experience learning Emacs I think you have run into
01:00:47.700 --> 01:00:52.900
places where it's a pain in the butt to learn Emacs and that
01:00:52.900 --> 01:00:56.160
this is a safe space to talk about that.
01:00:56.160 --> 01:01:02.160
I'll jump in by saying the Emacs cheat sheet.
01:01:02.160 --> 01:01:07.160
I think it's the one that can do puts out is a lifesaver.
01:01:07.160 --> 01:01:12.030
I think there's a little bit of a vocabulary disconnect,
01:01:12.030 --> 01:01:16.050
like, and this actually kind of comes up a lot in
01:01:16.050 --> 01:01:21.080
conversation with Corwin and Erik and I, but coffee paste
01:01:21.080 --> 01:01:25.160
versus what yank and w, whatever w killing yank.
01:01:25.160 --> 01:01:28.160
Yeah.
01:01:28.160 --> 01:01:31.380
Why would you even do that to us right where where were you
01:01:31.380 --> 01:01:34.810
when zeros park happened. No, I understand that makes sense.
01:01:34.810 --> 01:01:39.160
What else.
01:01:39.160 --> 01:01:41.920
I mean you don't have to sit here and rag on Emacs but we're
01:01:41.920 --> 01:01:44.160
here for that. That's all I'm saying.
01:01:44.160 --> 01:01:48.250
I think that's the biggest thing, like, I'm, I'm used to,
01:01:48.250 --> 01:01:52.170
like, just kind of the very binary nature of like, nope,
01:01:52.170 --> 01:01:55.160
that didn't work, try something else.
01:01:55.160 --> 01:02:00.680
So, as long as you're willing to try other stuff like Emacs
01:02:00.680 --> 01:02:07.160
will be fine. So, it's a tough cookie it can take it.
01:02:07.160 --> 01:02:14.430
The only thing that happens is you have to install it
01:02:14.430 --> 01:02:21.160
through your file that you hopefully have a backup of.
01:02:21.160 --> 01:02:25.160
Um, are there more questions in the hopper.
01:02:25.160 --> 01:02:29.500
If anybody does have any questions up there for hope for
01:02:29.500 --> 01:02:34.210
Erik or I so just to summarize, I've known Erik, I've known
01:02:34.210 --> 01:02:38.640
Erik, my whole life, I've known hope around a decade we
01:02:38.640 --> 01:02:41.760
work together on a project for, for a science fiction
01:02:41.760 --> 01:02:42.160
convention.
01:02:42.160 --> 01:02:45.160
Yeah.
01:02:45.160 --> 01:02:49.360
I've written a few conventions and then I also helped with
01:02:49.360 --> 01:02:53.710
I just wrote a bio. So this should like all theoretically
01:02:53.710 --> 01:02:55.160
be in my head right.
01:02:55.160 --> 01:03:01.660
I want to refer to my own bio project coordinator for
01:03:01.660 --> 01:03:03.160
dungeon mode.
01:03:03.160 --> 01:03:07.160
I was a bird assistant good credit.
01:03:07.160 --> 01:03:13.160
And family friend to the Bruce. Oh,
01:03:13.160 --> 01:03:17.870
yeah, we've gotten a ton of support from a lot of our
01:03:17.870 --> 01:03:21.720
lifelong friends people, and also people that we just met.
01:03:21.720 --> 01:03:24.160
Maybe that's a that's a great segue.
01:03:24.160 --> 01:03:26.900
Do throw your questions in there I'm going to fill for just
01:03:26.900 --> 01:03:29.160
a second and then we'll probably cut away.
01:03:29.160 --> 01:03:35.970
But, I'm thinking thematically actually, that's that's too
01:03:35.970 --> 01:03:38.810
abrupt so we need to go around the room, Erik you had hours
01:03:38.810 --> 01:03:41.480
and hours to rehearse hope kind of jumped in on the last
01:03:41.480 --> 01:03:42.160
minute.
01:03:42.160 --> 01:03:47.050
So let's let's, is it okay to pick on you or do you want me
01:03:47.050 --> 01:03:48.160
to get mine.
01:03:48.160 --> 01:03:51.490
What are you asking me to do what do you what do you want
01:03:51.490 --> 01:03:55.280
people to take away from this talk, you know, as we think
01:03:55.280 --> 01:03:59.010
about dungeon and sharing it's sharing its tradition, as we
01:03:59.010 --> 01:04:03.160
think about learning Emacs, and like making that awesome.
01:04:03.160 --> 01:04:08.210
And just, you know, generally what's up with free software
01:04:08.210 --> 01:04:13.160
and trying to make computers a tool to make people freer.
01:04:13.160 --> 01:04:18.160
Yeah, I'm going to ask like five questions. Yeah, so just
01:04:18.160 --> 01:04:19.160
jump in.
01:04:19.160 --> 01:04:24.160
I think that dungeon is a lot of fun. And, you know, I'm, I
01:04:24.160 --> 01:04:29.260
've played many commercial role playing games over the years
01:04:29.260 --> 01:04:32.160
, and I've enjoyed all of them.
01:04:32.160 --> 01:04:36.500
But there's very few of them that I've had as many belly
01:04:36.500 --> 01:04:41.410
laughs and as much just joy, playing as from dungeon. And I
01:04:41.410 --> 01:04:44.500
think, you know, the magic of it is, you know, like any
01:04:44.500 --> 01:04:47.400
game like the real magic is the people you play with and
01:04:47.400 --> 01:04:50.160
having fun with your friends.
01:04:50.160 --> 01:04:53.780
And what I would hope that people can take away from is
01:04:53.780 --> 01:04:57.900
that dungeon has the ability to be that magical thing. And
01:04:57.900 --> 01:05:01.870
hopefully we can get our project to the point where it gets
01:05:01.870 --> 01:05:06.160
out of the way and lets you have that fun with your friends.
01:05:06.160 --> 01:05:12.180
So I think there's a lot of work to do we could use some
01:05:12.180 --> 01:05:19.330
help. So if you're interested in having fun. Come help us
01:05:19.330 --> 01:05:22.160
build this fun tool.
01:05:22.160 --> 01:05:25.370
Alright so I just got the call that we've got just about
01:05:25.370 --> 01:05:29.160
two to three minutes left, and we should start our wrap up.
01:05:29.160 --> 01:05:31.160
Wrap up.
01:05:31.160 --> 01:05:35.090
Yeah, so I'll see if I can charge the room with some energy
01:05:35.090 --> 01:05:38.160
unless you're ready to have that at home.
01:05:38.160 --> 01:05:43.160
Here, here's, here's what I want people to take away.
01:05:43.160 --> 01:05:47.160
Were you like, No, okay.
01:05:47.160 --> 01:05:54.160
I'm not getting your audio hope.
01:05:54.160 --> 01:05:57.160
So my end, maybe I just need to speak up.
01:05:57.160 --> 01:06:01.160
Is this better, let me know when I'm coming through.
01:06:01.160 --> 01:06:05.160
Okay, cool.
01:06:05.160 --> 01:06:07.160
I was gonna say go ahead.
01:06:07.160 --> 01:06:11.240
I didn't. Okay. I mean I don't know that I know what I want
01:06:11.240 --> 01:06:15.290
to say either except a whole ton of thank you. So, I will,
01:06:15.290 --> 01:06:19.160
I will save those for the, for the literal end here.
01:06:19.160 --> 01:06:26.630
And instead, what I would say is, as we build our amazing
01:06:26.630 --> 01:06:32.160
innovations and explore our ideas in Emacs.
01:06:32.160 --> 01:06:34.980
We are fighting our own ego for the will to get them done,
01:06:34.980 --> 01:06:37.740
it's hard and we're not sure if they're going to be a good
01:06:37.740 --> 01:06:39.960
idea and will it excite people and part of our
01:06:39.960 --> 01:06:42.780
responsibility is to excite people so that they can feel
01:06:42.780 --> 01:06:44.160
good about liking them.
01:06:44.160 --> 01:06:47.930
If you come off and you're like hey this is a terrible idea
01:06:47.930 --> 01:06:51.470
it's really hard to be like, no I love that idea works
01:06:51.470 --> 01:06:55.160
theatrically but in larger groups may not scale.
01:06:55.160 --> 01:07:00.160
So that's a crucible for ideas and a crucible for teams.
01:07:00.160 --> 01:07:05.280
The first part is definitely healthy. The second part,
01:07:05.280 --> 01:07:10.070
there's a lot we can we can do, you know, having a front
01:07:10.070 --> 01:07:15.160
and and and good faith conversations on that subject.
01:07:15.160 --> 01:07:19.600
Anybody else want to want to wade in after that sorry that
01:07:19.600 --> 01:07:23.160
that was more of a calm down than a fire out.
01:07:23.160 --> 01:07:25.160
Okay.
01:07:25.160 --> 01:07:27.160
I think.
01:07:27.160 --> 01:07:32.180
The first part of this but I think we would be remiss not
01:07:32.180 --> 01:07:35.860
to highlight org mode, a little bit. Yeah, like, that's,
01:07:35.860 --> 01:07:39.280
that's our bread and butter. Yeah, our whole project is
01:07:39.280 --> 01:07:40.160
built on org mode.
01:07:40.160 --> 01:07:44.580
Right. And I'm just really excited because, like, I have, I
01:07:44.580 --> 01:07:48.670
don't have ADHD, but I have like something similar. And so,
01:07:48.670 --> 01:07:52.230
like to know that there's something that exists, that is
01:07:52.230 --> 01:07:54.160
like purely hierarchical.
01:07:54.160 --> 01:07:59.170
It's incredible, like I can just run a report, basically
01:07:59.170 --> 01:08:03.550
and get all of my like to do lists that I didn't have to
01:08:03.550 --> 01:08:06.160
put in one specific place.
01:08:06.160 --> 01:08:13.190
And, like, that's kind of been a complex issue for me of
01:08:13.190 --> 01:08:16.680
like, okay, I have all these to do lists, like in Google
01:08:16.680 --> 01:08:19.160
Keep or whatever like what do I do with them now.
01:08:19.160 --> 01:08:24.160
So being able to like pull them into one list.
01:08:24.160 --> 01:08:27.160
And then recycle through them is really incredible.
01:08:27.160 --> 01:08:35.500
And I think taking dungeon and like using it to like
01:08:35.500 --> 01:08:40.160
combining it with org mode basically really.
01:08:40.160 --> 01:08:44.210
I'm excited about it and I'm excited to see like what it
01:08:44.210 --> 01:08:46.160
can do for player groups.
01:08:46.160 --> 01:08:49.190
Especially now that quarantine like I was excited about
01:08:49.190 --> 01:08:50.160
dungeon mode.
01:08:50.160 --> 01:08:54.040
Before the pandemic and now like I'm only more enthusiastic.
01:08:54.040 --> 01:08:57.940
So, yeah, definitely the pandemic has been the greatest
01:08:57.940 --> 01:09:01.720
thing that happened to this game, terrible terrible as it
01:09:01.720 --> 01:09:05.090
is to say that it, if we needed a hobby and it turns out
01:09:05.090 --> 01:09:11.160
role playing games are are really good.
01:09:11.160 --> 01:09:16.610
So, so I think that's probably about our time. I'm guessing
01:09:16.610 --> 01:09:21.160
that's my call. And thank you very much.
01:09:21.160 --> 01:09:24.970
Thank you everybody will be around for discord and stuff
01:09:24.970 --> 01:09:27.160
later come catch us if you want to talk.
01:09:27.160 --> 01:09:30.160
Okay.