summaryrefslogtreecommitdiffstats
path: root/2023/talks/adventure.md
blob: 2654ce1bc8c4d14c7d253977115d5ec61201d809 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
[[!meta title="An Org-Mode based text adventure game for learning the basics of Emacs, inside Emacs, written in Emacs Lisp"]]
[[!meta copyright="Copyright © 2023 Chung-hong Chan"]]
[[!inline pages="internal(2023/info/adventure-nav)" raw="yes"]]

<!-- Initially generated with emacsconf-publish-talk-page and then left alone for manual editing -->
<!-- You can manually edit this file to update the abstract, add links, etc. --->


# An Org-Mode based text adventure game for learning the basics of Emacs, inside Emacs, written in Emacs Lisp
Chung-hong Chan (he/his/him, er/sein/ihn/ihm, 佢/他)

[[!inline pages="internal(2023/info/adventure-before)" raw="yes"]]

I am experimenting with using org-mode as a HyperCard-like text
adventure game engine. In this talk, I am going to demonstrate a text
adventure game for learning the basics of Emacs. Through solving
puzzles and programming your companion robot, Emi, you will learn how
to use the built-in Emacs help system, the mechanic of emacs
customization and the basics of programming Emacs Lisp. I believe this
game is ideal as a light-hearted complement to the `C-h t` tutorial.

About the speaker:

Dr Chung-hong Chan is a senior researcher at GESIS Leibniz Institute for the Social Sciences, Germany.

# Discussion

-   <https://github.com/chainsawriot/orgdungeon>
-   Q: Maybe the Emacs tutorial could be adapted to this game flow?
    -   A: Unfortunately, that would be quite difficult. The Emacs tutorial is more about the basics (cursor movement, buffer management etc). And those bits are quite difficult to demo in the current text adventure format. I think a game format like vim-adventures[vim-adventures](https://vim-adventures.com/) would be better.
-   Q: What was something that you learned about Org-Mode/Emacs in
    working on this tutorial?
    -   A: ~(eval (car (read-from-string string)))~
-   Q: Could you please elaborate what's the background of this game?
    What's the motivation why you choose this game as introduction for
    a newbie ton enter the Emacs world?
    -   A: The background of this game is a bit silly. It’s actually my wife wanted to create a (general) video game last year and I told her I can create a puzzle game as well. I have no experience in programming any video game, but I enjoy playing niche video games such as Tetris and TIS-100.
	    I have tried to create educational material for R programmers to learn emacs, e.g. [this](https://github.com/chainsawriot/essaprimer) and [this](https://github.com/chainsawriot/presentation-typeless). Actually, the game presented so far is covering the same material of the latter tutorial. But I don’t think the written tutorial is as effective as this game.
	    There are so many introductory emacs tutorials. C-h t, for example, is quite good. If the path to emacs is from 0 to 100, those tutorials are good for going from 0 to maybe 20. It is nice to get the feet wet. I think that the gateway to really enjoy emacs, i.e. beyond 20, is to customize emacs so that emacs becomes your own tool. However, there is a huge perceived knowledge barrier of “learning emacs lisp” and “learning emacs internal”. From my own experience, the trick is stop “learning” (from an educational perspective, one can’t learn something for the sake of learning something.), but to “do.” The best way to immediately do something, is to play a game.
-   Q: Thank you for the talk! Really cool project! How many planes are
    you planning to make and what more will you teach the players? + 
    Q: Do you have an end goal for this game? That is, what information
    do you want it to cover or will it be never ending?
    -   A: I am going to answer both questions jointly. The plan is to at least allow the users to write a 10-LOC function in emacs lisp.
-   Q: What is plane? Is that something like a question set in the game?
    -   A: I am not a D&D player. But my wife told me [a Plane](https://en.wikipedia.org/wiki/Plane_(Dungeons_%26_Dragons)) is one parallel universe. But you are right, one Plane in this game is basically one question set, or one puzzle.
-   Q: Is it for programmers? Non-programmers? Or general?
    -   A: I really hope that this is for everyone. But given the emacs userbase is like 90% programmers, I don’t mind this game is geared towards the programmer type wanting to “go beyond 20-   Q: What is the link to your GitHub repository?
    -   A: It is above in the notes and links...
    -   <https://github.com/chainsawriot/orgdungeon>
-   Q: Is `(find-file org-file-name)`  [skip-to-plane] a effective
    way to load information from your org-files? 
	- A: Probably not. The original idea was to have one giant org file and jump between headlines. But the current approach is easier to implement.
-   I love this idea of using emacs to teach emacs! It is a good
    continuation of C-h t. The adventure should not replace C-h t but be
    its next step after finishing C-h t. Good job!
- Q: i am wondering what is the naming scheme of the planes, since there are large spaces between the numbering which i guess could be like how you leave space in between basic lines?
  - A:
- with how simple the system seems it would be interesting if people forked it and add their own tutorials for their projects
- neat idea for learning about emacs!
- that was actually my first thought - it is good template for tutorial of complicated custom functions.
- Yeah, that sounds pretty interesting as an idea
- I mean, it is beautiful presentation of fun hacking, but I don't see it as real text adventure... But great intro and wish you good luck with it.
- so good thank you i will check this game out
- interesting idea
- i will definitely keep this game in mind since i have mostly just started my emacs journey

[[!inline pages="internal(2023/info/adventure-after)" raw="yes"]]

[[!inline pages="internal(2023/info/adventure-nav)" raw="yes"]]