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.