Pat Gunn (dachte) wrote,
Pat Gunn

My History with Roguelikes

  • 1986-ish - I first played a port of rogue to DOS. I always found it difficult, and never got very far.
  • 1994 - I played a few more games of this sort by this time, including one called Dungeons and Dragons (probably not from TSR). Ahh, highschool, good times.
  • 1998 - I started playing a roguelike called ADOM. It was very pretty, had an overworld, and was really advanced. The lead developer eventually announced that the source would be released. This was exciting - by this time I was playing several roguelikes, but ADOM was the most advanced
  • 1999 - Thomas Biskup, the ADOM developer, went back on his plans. I left the ADOM community, and started to play a lot more of the Moria/Angband variants.
  • 2000 - I offer some patches to the Zangband developers to help it build more easily on Linux. They prove to be so conservative with the source that unless it is broken for one of them, they won't accept patches. As some of the same people are involved in most of the Angband family of roguelikes, I decide to move to a "bad boy" variant, PernAngband, which has a reputation for being both really creative and kind of unstable. After the build patches, I eventually start combing the source for typos (the main developer, DarkGod, being French, there were many), and eventually get to revamping parts of the code. Another developer, Vaevictus, joins and the three of us get to know each other reasonably well.
  • 2000 - I start having ideas for my own roguelike, done in Perl instead of C. I start sketching out ideas, while I continue to work on Pernband (which is renamed to ToME out of legal threats from whoever writes the Pern books. One of my ideas, ascii-movie recording/playing, I implement first in Perl as part of the grab-bag of code snippets that would become MoLD and then port to C for ToME, hooking into the graphics layer to allow both recording and playing of movies. Vaevictus later hacks it so it does colour, and it eventually becomes pretty popular.
  • 2001 - I put what I have on sourceforge, with a prototype of MoLD that does some stuff and a partial rewrite that implements an event system (it or an energy-system would be needed for interesting effects). The rewrite is nowhere near done, and does not yet do anyhing interesting
  • 2002 - Vaevictus joins me early in the year as I work towards getting the rewrite closer to functionality. Life events prevent me from continuing work beyond June, so I hand the project over to him. I also stop contributing to ToME, partly because of said life event and partly because DarkGod integrates LUA, which I do not know and don't particularly like, into the codebase.
  • 2004 - Vaevictus apparently lost interest in or time for the project around this time. He took it a bit further in some aspects.

So, this leaves me, as far as I can tell, with three codebases to work with for the class.

  • The prototype - The code is very simple, fast, and functional. It lacks an event loop though, so it would need some reworking to be able to do advanced effects.
  • The rewrite as I left it. As far as I can tell, this is not left in a remotely working state, but it's pretty decent still.
  • The rewrite as Vaevictus left it. It's playable, but for some reason it's pretty slow.
I am inclined to present all three to the "class" and see what people think. My thoughts on what to present when:

  • First class: Talk about roguelikes in general, go over some history, and if there's time, briefly discuss the necessary issues in writing a roguelike. I'll "assign" people to download and install Nethack and an angband variant of their choice (ideally ToME) and play them a bit.
  • If-needed class: Review Perl programming, talk about code standards, doing OO in Perl, installing needed modules, etc etc.
  • Second class: Code review of both the prototype and the rewrite(s). We'll talk about code refactoring as well, and what I would like to happen with the codebase before going further. If there are enough people, as "homework" we'll divide up whatever codebase we decide to work with by everyone and have them clean their part and change methods to use named arguments.
  • Third class: Curses, SDL, and other approaches to graphics in roguelikes. We'll go over how graphics independence is done in ToME/Zangband and talk about various other ways to abstract this away. We'll look at what I did to hopefully keep this not-too-difficult for MoLD. Interested people with a lot of time on their hands might consider filling in the glue for a SDL/X11 port.
  • Fourth class: Maps and Monsters. These are design/programming challenges for roguelikes. MoLD doesn't do enough in the way of maps, and while Vaevictus implemented monsters, he only did so partway. We'll use ToME to understand various tacks to making interesting levels and doing monster AI (much of which is really old code dating back to Moria or the original Angband).
  • Fifth class: The fantasy element. What makes roguelikes have such a replay value? How important is art? How important is creativity and expansiveness versus play balance? We'll talk about different kinds of roguelike players and challenges people sometimes set for themselves (like Zangband/ToME's "Ironman" settings), and ways to approach randomness.
  • "Between classes": People will talk about what they're doing with the code
  • Last class: Multiplayer turn-based roguelikes - we'll take a look at MAngband, PernMangband (or whatever ToME's version of it is called now) and other gross hacks that have (more-or-less) successfully dealt with the challenges of making a playable multiplayer roguelike. We'll also possibly talk about quirky features some roguelikes have implemented (like my CMovie format, NewAngband's "different" approaches to classes, ADOM's skill system, and similar).

Useful links for people who want to get a head start:

Hopefully this is a good plan, and hopefully I'll manage to get 5-15 (more would be welcome, actually) interested folks. People who are not Perl wizards are still welcome, and I can actually teach Perl (without preaching it) to anyone who doesn't know it but knows any C-family language decently well.

  • Testing functions in Perl

    (Nothing particularly profound or my-idea-centric here, and I was tempted to post it to my personal blog instead, but it's worth trying to learn…

  • Abstract strategies for abstraction

    There are a few purposes of abstraction in programming; one of them is to construct a uniform API that is independent of the backend that can work…

  • Statistical Software Components

    A few months ago I mentioned my big library of useful generic C/Perl functions (libpgunn). There are plenty of other general-purpose libraries out…

  • Post a new comment


    Anonymous comments are disabled in this journal

    default userpic

    Your reply will be screened

    Your IP address will be recorded