(Our games are) the result of a lot of work by a lot of people,
all of whom have contributed their time and energy for free,
being rewarded only by the pleasure of keeping alive
one of the best freeware games available anywhere.
— Angband guide
People sometimes ask me about Tangaria’s and multiplayer roguelike games origin. In short: Tangaria is a PW/M/Angband variant and a part of the *bands family:
(click on blue arrows to go to particular chapter of this article; or at the link to go to website)
1980 → Rogue ↘ ⇒ Hack (1982) → NetHack (1987)
⇓
1983 → Moria ↘
1987 → Umoria ↘
1990 → Angband ↘ → ZAngband (1994)
1997 → MAngband ↘
2000 → PernMAngband ↘
2001 → TomeNET ↘
2007 → PWMAngband ↘
2019 → Tangaria ↘
The heart of multiplayer roguelikes came from the game (M)Angband which has an incredibly complex history that starts from Moria, based at concept roguelike genre’s father – Rogue.
Rogue
Rogue is the game that established the genre and inspired all other roguelikes. Rogue was written in 1980 by Michael Toy, Glenn Wichman and Ken Arnold for Unix as a freely-distributed executable (public domain software); later on came several commercial ports of the game for a range of personal computers.
Rogue inspired programmers to develop a number of similar games like Hack (1982) and Moria (1983), as Toy, Wichman, and Arnold had not released the source code of the game until 1986; so developers all over the world wrote their own ‘variants’ of Rogue.
Rogue’s gameplay was inspired by Dungeons & Dragons with the original story: go down all levels of a dungeon, killing monsters and plundering treasures, until finding the Amulet of Yendor; then bring it back to the surface. This storyline was taken by NetHack (1987), while Moria took another approach – you start not it the dungeon, but actually in town (hello, Diablo!).
Moria
First Moria version came as “VMS Moria“, by Robert Alan Koeneke (1985) who was inspired by Rogue. It’s also called The Dungeons of Moria.
Story of the game in a letter from Robert Alan Koeneke:
Newsgroups: rec.games.roguelike.angband,rec.games.roguelike.moria
Subject: Early history of Moria
Date: Wed, 21 Feb 1996 04:20:51 GMT
I had some email show up asking about the origin of Moria, and its relation to Rogue. So I thought I would just post some text on the early days of Moria.
First of all, yes, I really am the Robert Koeneke who wrote the first Moria. I had a lot of mail accusing me of pulling their leg and such. I just recently connected to Internet (yes, I work for a company in the dark ages where Internet is concerned) and was real surprised to find Moria in the news groups… Angband was an even bigger surprise, since I have never seen it. I probably spoke to its originator though… I have given permission to lots of people through the years to enhance, modify, or whatever as long as they freely distributed the results. I have always been a proponent of sharing games, not selling them.
Anyway…
Around 1980 or 81 I was enrolled in engineering courses at the University of Oklahoma. The engineering lab ran on a PDP 1170 under an early version of UNIX. I was always good at computers, so it was natural for me to get to know the system administrators. They invited me one night to stay and play some games, an early startrek game, The Colossal Cave Adventure (later just ‘Adventure’), and late one night, a new dungeon game called ‘Rogue’.
So yes, I was exposed to Rogue before Moria was even a gleam in my eye. In fact, Rogue was directly responsible for millions of hours of play time wasted on Moria and its descendents…
Soon after playing Rogue (and man, was I HOOKED), I got a job in a different department as a student assistant in computers. I worked on one of the early VAX 11/780’s running VMS, and no games were available for it at that time. The engineering lab got a real geek of an administrator who thought the only purpose of a computer was WORK! Imagine… Soooo, no more games, and no more rogue!
This was intolerable! So I decided to write my own rogue game, Moria Beta 1.0. I had three languages available on my VMS system. Fortran IV, PASCAL V1.?, and BASIC. Since most of the game was string manipulation, I wrote the first attempt at Moria in VMS BASIC, and it looked a LOT like Rogue, at least what I could remember of it. Then I began getting ideas of how to improve it, how it should work differently, and I pretty much didn’t touch it for about a year.
Around 1983, two things happened that caused Moria to be born in its recognizable form. I was engaged to be married, and the only cure for THAT is to work so hard you can’t think about it; and I was enrolled for fall to take an operating systems class in PASCAL.
So, I investigated the new version of VMS PASCAL and found out it had a new feature. Variable length strings! Wow…
That summer I finished Moria 1.0 in VMS PASCAL. I learned more about data structures, optimization, and just plain programming that summer then in all of my years in school. I soon drew a crowd of devoted Moria players… All at OU.
I asked Jimmey Todd, a good friend of mine, to write a better character generator for the game, and so the skills and history were born. Jimmey helped out on many of the functions in the game as well. This would have been about Moria 2.0
In the following two years, I listened a lot to my players and kept making enhancements to the game to fix problems, to challenge them, and to keep them going. If anyone managed to win, I immediately found out how, and ‘enhanced’ the game to make it harder. I once vowed it was ‘unbeatable’, and a week later a friend of mine beat it! His character, ‘Iggy’, was placed into the game as ‘The Evil Iggy’, and immortalized… And of course, I went in and plugged up the trick he used to win…
Around 1985 I started sending out source to other universities. Just before a OU / Texas football clash, I was asked to send a copy to the University of Texas… I couldn’t resist… I modified it so that the beggar on the town level was ‘An OU football fan’ and they moved at maximum rate. They also multiplied at maximum rate… So the first step you took and woke one up, it crossed the floor increasing to hundreds of them and pounded you into oblivion… I soon received a call and provided instructions on how to ‘de-enhance’ the game!
Around 1986 – 87 I released Moria 4.7, my last official release. I was working on a Moria 5.0 when I left OU to go to work for American Airlines (and yes, I still work there). Moria 5.0 was a complete rewrite, and contained many neat enhancements, features, you name it. It had water, streams, lakes, pools, with water monsters. It had ‘mysterious orbs’ which could be carried like torches for light but also gave off magical aura’s (like protection from fire, or aggravate monster…). It had new weapons and treasures… I left it with the student assistants at OU to be finished, but I guess it soon died on the vine. As far as I know, that source was lost…
I gave permission to anyone who asked to work on the game. Several people asked if they could convert it to C, and I said fine as long as a complete credit history was maintained, and that it could NEVER be sold, only given. So I guess one or more of them succeeded in their efforts to rewrite it in C.
I have since received thousands of letters from all over the world from players telling about their exploits, and from administrators cursing the day I was born… I received mail from behind the iron curtain (while it was still standing) talking about the game on VAX’s (which supposedly couldn’t be there due to export laws). I used to have a map with pins for every letter I received, but I gave up on that!
I am very happy to learn my creation keeps on going… I plan to download it and Angband and play them… Maybe something has been added that will surprise me! That would be nice… I never got to play Moria and be surprised…
Robert Alan Koeneke
VMS Moria Version 4.8 (Robert Alan Koeneke & Jimmey Wayne Todd Jr.):
V0.1 03/25/83 / RAK
V1.0 05/01/84: Dungeon Generator, Moria Module / RAK
Character Generator, miscellaneous / RAK & JWT
V2.0 07/10/84 Town Level & Misc / RAK
V3.0 11/20/84 Internal Help & Misc / RAK
V4.0 01/20/85 Source Release Version / RAK
Umoria
Then came “Umoria” (Unix Moria), by James E. Wilson (1989). In February 1987 Jamestook the original Moria 4.8 sources and started porting it to the C language, running on the UNIX operating system. The first official release (v4.85) was posted to the comp.sources.games mailing list on November 5, 1987.
Umoria also fixed many bugs, spelling errors, and inconsistencies in the original Moria sources. It also introduced character re-rolling (in the later versions), but otherwise had few changes from the original game.
As C is a much more portable language than the original Pascal, it became easier for Umoria to be ported to various other computer systems such as IBM-PC, Atari ST, Amiga, Macintosh, Apple IIGS, VM/SP, Archimedes.
Umoria 5.x had a unified source for the UNIX/IBM-PC/Atari/Mac/VMS/Amiga ports and was released in early 1989. It included lots of new features, many of which were borrowed from BRUCE Moria — developed in 1988 by Christopher J. Stuart at the Monash University, Melbourne, Australia (Clayton campus) — along with many more bug fixes. All floating point code was eliminated, many play balance improvements were added, and various type/structure changes were introduced to reduce the game size and allow fixes for pervasive bugs.
This version was sometimes called Moria 5.x, but it should not be confused with Moria UB 5.0 (1987).
The following email was posted by James E. Wilson to the rec.games.roguelike.moria mailing list in January 2006:
I started work on Umoria in February 1987. I somehow acquired play testers in April. I don’t recall exactly how, but I was at a university, so maybe they saw me playing it on a public terminal and asked for a copy. The game slowly spread around the Berkeley area. By November, the game was in good enough shape that I could post it to comp.sources.games. I think I was still calling it UNIX Moria then, to distinguish it from the original, but the comp.sources.games moderator shortened it to Umoria, and that name has stuck. After the comp.sources.games posting, the game was widely available, and things just grew from there. The Usenet rec.games.moria group was created sometime around Jan 1, 1988, and was where most of the early discussions about it occurred.
I originally got involved with Moria because I was tired of playing other games. I spent a lot of time playing games such as rogue and hack, and was looking for something different to try. There was a game called UltraRogue that I enjoyed playing. Unfortunately, it had some very frustrating bugs, and it was only available as a binary. I spent some time investigating the possibilities of trying to decompile it and fix it. Before I got very far, I chanced upon a copy of the VMS Pascal Moria sources and quickly decided that porting the sources to Unix was a better project than trying to fix UltraRogue. After I gained some fame as the Umoria author, I did manage to get a copy of of the UltraRogue sources, but by then it was too late, and I wasn’t sure if I had a legal copy of the sources, so I never did anything with them.
The original game was written in VAX/VMS Pascal with some VAX/VMS Assembler. I did not have access to a VMS machine, and both the Pascal and Assembler code would not work with Unix because of many uses of VMS extensions. Since C was a more common language for Unix anyways, I decided to just convert the whole thing to C. Much of the initial syntax conversion was done via Emacs macros. Then it was just a matter of tweaking the sources until they would compile. The hardest part was finding and fixing all of the off-by-one errors, as Pascal array indexing starts at 1, and C array indexing starts at 0. It took me years to find and fix all of the off-by-one errors. I still can’t believe how hard it was to find them all. At least, I hope I found them all.
Mostly what I remember about the early years of working on Umoria was that it was a good introduction to software engineering principles. I had to learn how to deal with bugs, bug fixes, release schedules, making and distributing releases, etc. It was just a game, but I learned many valuable lessons about real world software development while working on it.
One of my favorite moments from my Umoria years is when I got mail from one of the authors of rogue. I recognized the name right away, and had to ask. He confirmed that he was one of the rogue authors, and that he was a fan of Umoria. That made my day.
The credits in the PC/Windows game Diablo mention that it was inspired in part by Umoria.
- Contributors to Umoria:
James E. Wilson – original developer
D.G. Kneller – MS-DOS Moria port
Christopher J. Stuart – recall, options, inventory, and running code
Curtis McCauley – Macintosh Moria port
Stephen A. Jacobs – Atari ST Moria port
William Setzer – object naming code
David J. Grabiner – numerous bug reports, and consistency checking
Dan Bernstein – UNIX hangup signal fix, many bug fixes
and many others…
Angband
Angband was created in 1990 by Alex Cutler and Andy Astrand, with the help of other students at the University of Warwick; it was based on the existing code for Umoria 5.2.1. They wanted to expand the game, keeping or even strengthening the grounding in Tolkien lore, while adding more monsters and items, including unique monsters and artifact items, plus activation, pseudo-sensing, level feelings, and special dungeon rooms.
Over time, Sean Marsh, Geoff Hill, Charles Teague, and others, worked on the source, releasing a copy known as “Angband 2.4.frog_knows” at some point, which ran only on Unix systems, but which was ported by various people to various other systems. One of the most significant ports was the “PC Angband 1.4” port, for old DOS machines, which added color and various other significant changes, only some of which ever made it back into the official source.
Then Charles Swiger took over, sometime in late 1993, cleaning up the code, fixing a lot of bugs, and bringing together various patches from various people, resulting in several versions of Angband, starting with Angband 2.5.1 (?), and leading up to the release of Angband 2.6.1 (and Angband 2.6.2) in late 1994. Some of the changes during this period were based on suggestions from the “net”, and from various related games, including “UMoria 5.5”, “PC Angband 1.4”, and “FAngband”.
Angband 2.6.1 was primarily targeted towards Unix/NeXT machines, and it required the use of the low level “curses” commands for all screen manipulation and keypress interaction. Each release had to be ported from scratch to any new platforms, normally by creating visual display code that acted as a “curses” emulator. One such port was “Macintosh Angband 2.6.1”, by Keith Randall, which added support for color, and which formed the basis for the first release of Angband 2.7.0.
During the last half of 1994, Ben Harrison had been playing with the Angband source, primarily to investigate the possibility of making some kind of automatic player for Angband, like the old “rogue-o-matic” program for the game “Rogue”. The difficulty of compiling a version for the Macintosh, and the complexity of the code, prevented this, and so Ben began cleaning up the code in various ways for his personal use.
In late 1994, Charles Swiger announced that he was starting a real job and would no longer be able to be the Angband maintainer. This induced some amount of uproar in the Angband community (as represented by the Angband newsgroup), with various people attempting to form “committees” to take over the maintenance of Angband. Since committees have never given us anything but trouble (think “COBOL”), there was very little resistance when, on the first day of 1995, Ben made his code available, calling it “Angband 2.7.0”, and by default, taking over as the new maintainer of Angband.
Angband 2.7.0 was a very clean (but very buggy) rewrite that, among other things, allowed extremely simple porting to multiple platforms, starting with Unix and Macintosh, and by the time most of the bugs were cleaned up, in Angband 2.7.2, including X11, and various IBM machines. Angband 2.7.4 was released to the “ftp.cis.ksu.edu” site, and quickly gained acceptance, perhaps helped by the OS2 and Windows and Amiga and Linux ports. Angband 2.7.5 and 2.7.6 added important capabilities such as macros and user pref files, and continued to clean up the source. Angband 2.7.8 was released to the major ftp archives as the first “stable” version in a year or so, with new “help files” and “spoiler files” for the “online help”, plus a variety of minor tweaks and some new features.
After Angband 2.7.8 was released, Ben created a web site to keep track of all the changes made in each version (though a few may have been missed), and acquired the use of a new development ftp server to supplement the official “mirror” server. This web site is now permanently located at the Official Angband Home Page (http://www.thangorodrim.net/). Unfortunately, the next six versions were numbered Angband 2.7.9v1 to Angband 2.7.9v6, but really each were rather major updates. Angband 2.8.0 and 2.8.1 were released using a more normal version scheme. Angband 2.8.2 and 2.8.3 add a few random features, clean up some code, and provide graphics support and such for a few more platforms.
After the release of Angband 2.8.3 Ben’s free time was more and more occupied by his work. He released a beta version of Angband 2.8.5, introducing many new features, but couldn’t give as much attention to maintaining the game as he wanted to. Meanwhile, an “unofficial” version by Robert Ruehlmann, incorporating three popular patches (the “Easy Patch” by Tim Baker, for opening doors and disarming traps without specifying the direction: Greg Wooledge’s “Random Artifacts” patch: and Keldon Jones’s “Optional Monster AI Improvement”), named “2.8.3h”, was gaining popularity.
So in March 2000, Robert Ruehlmann offered to take over Angband and started to fix the remaining bugs in the Angband 2.8.5 beta. The resulting version was to be released as Angband 2.9.0. Further bugfixes and a couple of new features – including many in the realms of user-customizability, with greater control over ego-items, player races and classes, monsters, items and artifacts – have led to the current version.
And with the greater amount of user-customizability that is now possible, it was inevitable that SOMEBODY would eventually go and actually do something with it. Jonathan Ellis started customizing the user-editable text files in the ‘edit’ directory for his own personal use – originally, only by fixing bugs and inconsistencies (less powerful monsters being worth more experience per kill than more powerful ones, dragons doing a decent amount of damage in melee, monsters with two claws and one mouth getting one claw and three bite attacks, and so on).
At first, this was all that could really be done with it: adding new monsters and items was impossible, as the limits were fixed. And so only three new monsters made an appearance, each of them replacing an existing monster in the order: and one new artifact – “The Palantir of Westernesse”. Gameplay balance could be tweaked somewhat, by changing the level, power and rarity of certain items and monsters: and some changes were made, mostly with the attempt to reduce the notorious “triple whammy” effect of needing poison, confusion and nether resistance (or over 550 hps, if without nether resistance) all at once, straight after passing 2000′, forcing excessive scumming before this depth or risking unavoidable instant death: and then having nothing left to do but dive straight to 4000′ and scum for speed items, missing out on some of the most interesting depths of the dungeon. This problem, at least, could be addressed, but actual new things were less easy to add…
That all changed with Angband 2.9.1, which for the first time moved the limits themselves to a separate user-editable file, and allowed more monsters and items to be created without removing the old ones. At the same time, a patch by Matthias Kurzke was incorporated which allowed the creation of new ego-items. Various new powers, for the player and monsters, were added to the game – but no items or monsters yet had these powers (resist fear, poison brand, lose charisma, summon greater demons, and so on): indeed, arguably it could be said that the game had not even adjusted properly to Ben Harrison’s fractional speed system (Angband 2.7.0) or the addition of the other attack forms such as shards, sound, chaos, nexus and so on (even before Ben.)
The Official Angband Home Page (http://rephial.org/) serves not only as the most up to date description of Angband, but also lists changes made between versions, and changes planned for upcoming versions, and lists various email addresses and web sites related to Angband.
Some of the changes between Angband 2.6.1 and 3.0.6
It is very hard to pin down, along the way from 2.6.2 to 3.0.6, exactly what changes were made, and exactly when they were made. Most releases involved so many changes from the previous release as to make “diff files” not very useful, since often the diff files are as long as the code itself. Most of the changes, with the notable exception of the creation of some of the new ‘main-xxx.c’ files for the various new platforms, and a few other minor exceptions generally noted directly in comments in the source, were written by Ben or Robert, either spontaneously, or, more commonly, as the result of a suggestion or comment by an Angband player.
The most important modification was a massive “code level cleanup” for 2.7.x, largely completed in 2.7.8, that made all other modifications much simpler and safer. This cleanup was so massive that in many places the code is no longer recognizable, for example, via “diff -r”, often because it was rewritten from scratch.
The second most important modification was the design of a generic ‘z-term.c’ package, which allows Angband to be ported to a new machine with as few as 50 lines of code. Angband 2.9.3 thus runs without modification on many machines, including Macintosh, PowerMac, Unix/X11, Unix/Curses, Amiga, Windows, OS2-386, DOS-386, and even DOS-286.
It would be difficult to list all of the changes between Angband 2.6.1 and 3.0.6, because many of them were made in passing during the massive code level cleanup. Many of the changes are invisible to the user, but still provide increased simplicity and efficiency, and decreased code size, or make other more visable changes possible. For example, the new ‘project()’ code that handles all bolts, beams, and balls, the new ‘update_view()’ code that simplifies line of sight computation, or the new ‘generate()’ code that builds new levels in the dungeon. Many changes have been made to increase efficiency, including the new ‘process_monsters()’ and ‘update_monsters()’ functions, and the new ‘objdes()’ and ‘light_spot()’ routines. The generic ‘z-term.c’ package yielded efficient screen updates, and enabled the efficient use of color.
The most visible (to ordinary players) changes that happened as a result of Ben Harrison’s maintainership were:
- a far greater degree of user-customizability as shown by the ‘info.txt’ files
- the “fractional” speed system, with +10 in the new scheme equalling +1 in old money
- object stacking, the ability to have more than one object in a square: first tried in 2.7.9, completed in 2.8.2.
It should also be pointed out at this point that the far cleaner nature of Ben’s code as compared to previous versions has given many other people the opportunity to base code for their own Angband variants on it. And so a plethora of new variants have appeared, many of them far more different from Angband now than Angband ever was from Moria, and yet still based on Ben’s coding ideals for Angband.
For Angband 2.9.0, the first few new visible features were a random artifact generator (originally developed from a variant by Greg Wooledge), an option to improve monster AI (believed to have originally started out life in a patch written by Keldon Jones), and a patch to allow easier handling of opening and closing doors and disarming traps (by Tim Baker). For Angband 2.9.1 has also come such things as the ability to increase the size of the editable text files and thus the number of monsters, artifacts, items, ego-items and vaults in the game (many new vaults were written by Chris Weisiger, some by others, and the number of vaults in the game at this time was doubled), and much greater customizability of ego-items has become possible thanks to a patch written by Matthias Kurzke. It is also now possible to add new character races to the game, and to edit the shopkeepers with respect to their greed, tolerance of haggling and reactions to the character based on his race. Angband 2.9.2 adds support for poison branded weapons to the game. Angband 2.9.3 made the character class itself customizable to an extent.
Previous Versions
Angband 2.0
Alex Cutler, Andy Astrand, Sean Marsh, Geoff Hill, Charles Teague.Version
Angband 2.4 : 05/09/1993
Angband 2.5 : 12/05/1993
Charles Swiger
Angband 2.6 : 09/04/1994
Charles Swiger
Version 2.7 : 01/01/1995
Ben HarrisonVersion
Angband 2.8 : 01/01/1997
Ben Harrison
Version 2.9 : 04/10/2000
Robert Ruehlmann
Contributors (incomplete)
Peter Berger, “Prfnoff”, Arcum Dagsson, Ed Cogburn, Matthias Kurzke, Ben Harrison, Steven Fuerst, Julian Lighton, Andrew Hill, Werner Baer, Tom Morton, “Cyric the Mad”, Chris Kern, Tim Baker, Jurriaan Kalkman, Alexander Wilkins, Mauro Scarpa, John I’anson-Holton, “facade”, Dennis van Es, Kenneth A. Strom, Wei-Hwa Huang, Nikodemus, Timo Pietilä, Greg Wooledge, Keldon Jones, Shayne Steele, Dr. Andrew White, Musus Umbra, Jonathan Ellis
MAngband
MAngband (Multiplayer Angband) was created by Keldon Jones, in 1997. At that time, the latest Angband version was 2.7.9, which was a lovechild of Ben Harrison, who rewrote an insanely large amount of code, unifying and refactoring things, bringing several diverging codebases (the EMX port, the Amiga port, the Windows port, etc) back into fold. Of particular note was a Z-Term
interface, which created a proper abstraction layer on top of different display front ends. From then on, porting Angband to a new platform was a matter of writing a main-xxx file, implementing 10-20 functions, responsible for initializing windows, drawing text on screen, plotting graphics and playing sounds. MAngband still using this idiom in modern days.
When Keldon Jones set out to make a multi-player version, he had split the Angband code into two parts, the client and the server. The server would, naturally, process all gameplay-related things, like dungeon generation and monster turns, while the client would allow players to interact with the world.
There is a common misconception, that MAngband client is just a glorified dumb terminal, not too different from Telnet
. That is not true at all. The client retained all the interface bits of the Angband program, like item query and directional prompts, the ability to read and write user preferences files, the macro system and all that jazz. MAngband client did not ever send raw keystrokes to the server, each command and interesting action was assigned to a network packet, each with it’s own schema. Upon receiving those, the server did not transfer those to keystrokes either, but did required, command-specific, processing.
One very fortunate bit of Ben Harrison’s refactor was the fact, that each interface element that required redrawing on screen was assigned each own redraw flag. For example, when player’s hit points were updated, say, due to a monster attack, a special bit flag PR_HP
was set. At some point, after each dungeon turn, the game would check if that flag is set. Then, and only then, would it call the appropriate prt_hp
function to actually plot new values onto the screen.
This allowed Keldon Jones to “hook into” this system. He did not have to hack each and every function to inject new network code. Instead, at the appropriate time, the server would check, if PR_HP
was set. If it was, it meant that it’s time to re-send those values to the client! The various functions and parts of code that were actually responsible for setting those flags remained identical to Angband. On the client-side the same flags were set once a network update was received. Then, the drawing-to-screen proceeded as usual.
(Preempting ahead, this ingenious solution allowed us to port large bits of Angband code from later versions, without changing anything! This whole process of placing network stuff in-between Angband stuff is now known as “Keldonizing”, and MAngband, generally tries to follow this principle).
Another fortunate thing was the separation of each game command into cmd_
and do_cmd_
functions. The cmd_
functions were responsible for getting player input, and checking for errors. The do_cmd_
functions were performing the actual action. For example, pressing E
would invoke cmd_eat
function, which would query the player, “Which item?”. After picking a strip of beef jerky, the do_cmd_eat
function would handle all necessary things, like restoring her hunger level, and removing said strip from her inventory.
As you might’ve already guessed, the cmd_
functions went to the client and the do_cmd_
functions went to the server! In-between, Keldon injected his network layer stuff, so that a network packet would transmit player’s intent. It would be appropriate to note here, that a “command queue” concept was introduced. Similar to the “keyboard queue” on the client, this server-side queue would hold all requested commands, and only execute the related do_cmd_
functions once the player would have enough energy.
“Energy” was another concept already present in Angband. As different monsters had different “speed” ratings, the turn order was always shifting around. A monster, or a player, would only be able to act as they had reached enough. A full-turn action would require 100 energy, a half-turn action would require 50 energy. Depending on monster/player speed, each tick would add a different amount to the counter. Thus, fast monsters could reach the desired “100” value faster. Therefore, turning such turn-based game into “real-time” was relatively straight-forward: you just run ticks on a timer, and add appropriate energy, already balanced well, by speed.
Finally, the “amount of energy needed to perform full-turn action” was also hacked upon. Each dungeon level got assigned a pre-defined factor, so that the deeper players went, the slower the game would play.
And thus, the transition to real-time was made, without compromising any of the Angband concepts. Since that time, several other online roguelikes were made out of the MAngband codebase, and they all rely heavily of this.
Finally, a concept of “ghosts” was introduced. This gave players a chance to avoid permadeath, and to continue playing even after death. Ghosts could float up from the dungeon and resurrect themselves at the temple (shop ‘4’) losing 50% of their experience. Along those lines, PvP (player-versus-player) combat was added, making it a true multi-player roguelike.
Keldon Jones wrote many other fine things, which would be too numerous to list. You might want to examine the changelog file to see some of his patch notes. However, the most important thing he did, was providing MAngband with a template, so that new generations could turn any roguelike game into a multiplayer/real-time experience. We owe it all to him.
Reign of Alex Dingle
After about a year of hacking on MAngband, Keldon Jones went to create other interesting things. True to Angband tradition, a new maintainer had to be chosen. Keep in mind, that beside taking care of the codebase, a MAngband maintainer is also responsible for hosting the “flagship” server, so that people could actually play the game.
Alex Dingle was responsible for turning this proof-of-concept game into a proper MMO. Things like player houses, wilderness, ability to resurrect other players by reading a Scroll of Life, proper XP sharing between party members, healing prayers for priests and paladins (along with an option to target friendly characters and not just monsters/hostile players), ensuring that things like “slow monster” spells actually affect other players, multitude of interface improvements, DM menu and admin characters, the list goes on and on.
Most of the MAngband “traditions” come from this era (years 1998-2002, version 0.5.4D to 0.7.0). The most important technical achievement was the switch to proper TCP/IP, leaving UDP/IP and the various hacks on top of it behind. A lot of fine-tuning to the game speed and command handling was done to make the gameplay as smooth as possible for a real-time game.
And don’t forget that casting polymorph onto other players now turned them into fruitbats 🙂
Reign of Crimson
During the Alex Dingle’s reign, lots and lots of patches were added by Crimson, who had been an invaluable contributor, and was a natural choice to be the next maintainer.
Robert L. Seifer, aka Crimson, maintained a rolling-release policy, so that the game was constantly being updated on the live server. Due to this fact, the version history is a bit muddied during his era.
There was a huge list of bugs, server crashes and other problems that persisted from the very early days of MAngband, dating back to Keldon era. Most of those were now addressed, players would no longer encounter empty items or crash the server by sending wrong item indexes.
In addition, Crimson maintained an “Ironman” variant, similar to Angband ironman challenge. Closer to the end of his reign, this variant was folded back into MAngband codebase, making it a server option.
An IRC channel #mangband was also maintained by him and a first ever IRC-to-game bridge was deployed. This allowed people on IRC to chat with players in the game and vice-versa.
Crimson also added audit code, which tracked all player-to-player item/gold transactions, to prevent abuse and “cheeze”.
At the very end of his time, an SVN repository was created, to hold the code in a proper version-controlled system. As he was looking for the next maintainer, he wanted to make sure the code history would get preserved.
MAngband Project Team
Graham King (aka Jug) became the 4th maintainer. During his reign, a “MAngband Project Team” was formed, which finally turned MAngband development into a true open-source process. This was another milestone, that changed the way MAngband was developed forever.
From now on, bugs would be tracked on an issue tracker (trac), changes and patches would be accepted from all over the world in a timely fashion, and all discussions related to the future of the game would happen “in the open”, and not over private emails between maintainers and contributors.
He has also cleaned up the source code significantly, removed rogue bits of code that crept in from PernMangband, removed the dedicated console protocol in favor of telnet (thus nuking a specialized “console” program), simplified the IRC bridge interface (allowing for a very easy way to write new bridges and bots), introduced online high scores and brought an unseen-before stability to the server. The “stable” version of 1.1.0 became a cornerstone, which allowed us to host server instances uninterrupted for years.
For the first time ever, new code from upsteam Angband has began to pour back into MAngband. Angband development has been sporadic, with huge downtimes, but during that time a new devteam (led by takkaria) took over, so there were a lot of new and exciting improvements, which MAngband absorbed. That included new monsters and spells from Angband 3.0.6, along with several new game mechanics and re-balancing.
Most importantly, the band, that has formed under his command, worked long and hard to release 1.1.0, fixing over 100+ critical bugs, in a true team effort. A set of guidelines was formed (what “MAngband is and isn’t”, “how to work with issues”, “how to format commits”) which is still serving the game.
At around 2013, the development was moved from svn to git, and trac was dumped in favour of github issues. All commit history and ticket history was preserved. This was also Jug’s doing, and has saved us from bitrot doom.
The long haul to 1.5.0
After releasing 1.1.0 the MAngband Project Team decided it’s time for a major rewrite, that would simplify and improve lots of important aspects of the game, to make modding and future work easier. One of the driving ideas was to allow variant development that doesn’t break protocol compatibility (“generalizing” parts of the protocol).
This long haul took about 10 years, culminating, finally in the release of 1.5.0 version. There have been around 2000 commits, and 1000 closed issues, so it would be pointless to list it all here. Thankfully, all that is documented in our source repository and the closed ticket/issues.
Among interesting changes, was the move to automake/autoconf build system (instead of custom Makefiles for each platform), addition of virtually all Angband features (to a certain date), complete rewrite of the lower-level network layers and the introduction of Time Bubbles, which add the last missing piece to the whole “online roguelike” concept. That’s also the version that finally added custom House Building.
This is pretty much where MAngband is now; there is three additional “chapters” as conclusions.
On XPilot, netcode and GPL
When MAngband was conceived, the whole low-level networking code was copy-pasted from a classic Unix game, called “XPilot”. XPilot was a fast-paced arcade game, which pitted players, who controlled physics-based space fighters in a deathmatch arena, with a top-down perspective.
This brought two important consequences.
Firstly, the game was using the UDP protocol, which is best-suited for twitch-based games, where losing a packet or two, is considered fine, as long as you receive subsequent updates. Since it was pretty clear that this approach is not suitable for online roguelikes, where each and every packet is of deadly importance and the order of packets *MUST* be sequential, a new “guaranteed delivery” protocol was written *on top* of UDP, turning it into a crude version of TCP.
About 3 years later, that “piggyback” protocol was replaced by a TCP proper. No UDP packets were any longer involved, although the code, at places, looked like they were. This work was done by our second maintainer, Alex Dingle, and was instrumental to making MAngband what it is today. This version is known as 0.7.0 and is still considered a classic milestone in MAngband history.
Secondly, XPilot was sporting the GPL license. Angband and therefore, MAngband, were under the “Angband/Moria license”. The two are completely incompatible with each other.
It placed in MAngband into a legally grey area: it couldn’t switch to GPL without nuking all the Angband code, and it couldn’t switch to Moria license, without nuking the network code. Thus, no “free” linux distribution would ever accept the game into their repositories. Thankfully, the XPilot team never tried to enforce the GPL copyright, nor did the Angband maintainers tried to enforce the Moria license.
To complicate matters even more, additional code written by MAngband maintainers over time, was explicitly non-GPL.
Two interesting developments happened since then. First, the “Angband open-source initiative” began in the early 2000s, and finished in 2009. That is an interesting story in itself, best described elsewhere, but long story short, around 200+ contributors were tracked down and asked to re-license their work for GPL. Bits of codes that weren’t re-licensed, were nuked from the codebase.
This could’ve freed MAngband from this horrible entanglement, however, that would’ve also meant that we would have to nuke all of the Keldon’s code. That task was conceived impossible, as MAngband *was* and *is* Keldon Jones. In addition, the several maintainers who had added their own invaluable contributions were explicitly against GPL.
The second interesting development was at around 2011, when new low-level network code was written for MAngband. We have nuked and removed all and any traces of XPilot from the codebase, finally freeing MAngband from this entanglement! The first release with the new netcode was 1.5.0, done under MAngband Project Team.
As of now, Angband is dual-licensed under GPL and Moria licenses, so that each variant maintainer could continue with either path. To wit: MAngband opts for the Angband/Moria license each time it ports new things from Angband.
In conclusion: MAngband is covered by Moria/Angband license. It is not a GPL game.
On the technical side of things, the new netcode is no longer a mess of “fake-TCP-over-UDP-tunred-into-real-TCP”, it was written with TCP in mind, simplifying things tenfold.
On variants
Being a variant by itself, MAngband has also spawned several notorious variants.
First came PernMAngband, which was developed in conjunction with PernAngband, by DarkGod (yes, it was easy enough to add the same change to an Angband variant, AND a MAngband variant, due to codebases being practically identical). For a while, PernMAngband shared the same metaserver with MAngband, as the clients were compatible.
The games eventually became known as Tome and TomeNet. TomeNet is probably the most popular online roguelike, and has tons of own history to document, which could be found on it’s website.
Around the same time, PWMAngband began development. The one and only author, PowerWyrm, has adopted parts of all then-existing forks, adding even more stuff on top of them. The game is still in development, and, unbelievably, has all the latest codebase changes from Angband (unlike MAngband, which is still stuck in 2.7-3.2 era).
MAngband, at it’s core, still resembles Angband 2.7.9 (with bits of 3.0.6-3.2 sprinkled in), PWMAngband, on the other hand, looks like Angband 4.1 (which is *vastly* different, due to 20+ years of refactoring).
There were others, like the cheeze server, PvP server, Berendol’s variant, and many other minor variants, but those did not persist to the present day.
This history was written by Flambard. MAngband brought a lot of new features to Vanilla Angband for this 20 years and right now devteam works hard in the attempt to unite multiplayer roguelike development under new network protocol (see: Multiplayer Variants Network Manifesto).
MAngband Project Team Members
- Graham King (aka Jug)
- Bill Seymour (aka Billsey)
- Warrior
- Flambard
- Thorbear
- evileye
- PowerWyrm
- Fink (retired)
Retired Long Term Maintainers
- Keldon Jones is the original MAngband author (January 1997 – October 1998) and was the guy who actually turned ‘Angband’ into ‘MAngband’.
- Alex Dingle (aka Turtle/wortle) was second maintainer (October 1998 – September 2002) and did significant and long term work adding features and removing bugs.
- Robert L. Seifer (aka Crimson) was third maintainer (September 2002 – December 2007) providing a reliable game server and website as well as adding features and fixing bugs.
Historical Acknowledgements
- Ketchetwahmeegwun T. Southall (aka kettek) wrote a new SDL2 port.
- Mark Heath (aka silicontrip) improved build system to handle OSX seamlessly.
- Torben Hohn updated build system to automake.
- Gregory Velichansky (aka hmaon) wrote the original SDL port.
- Hao Chen (aka Hao) wrote the original metaserver, and for many years hosted the MAngband metaserver, anonymous ftp archive, and game server on his computer. And he provided some OSX binaries too!
- Dan Liberatore (aka Berendol) graciously maintained the the mangband forums up until 2007, as well as significant cleanup and bug patching work.
- Chris Atenasio kept the now defunct automated archive of the mailing list. He has also added a few extra features such as dungeon master vault generation.
- Andreas Karlsson did the original port of the Windows server.
- Garrett Pease did the original port of the Windows client.
- Marco G. Salvagno wrote a port of the client to OS/2.
- Timo Hirvi has done some beta testing and has put up with lots of server crashes, etc. He also made the original web interface to the original metaserver.
- Donald Sharp has written a patch to allow the server to log its output to a file. He’s also sent a patch for multiple configuration blocks in the .mangrc file.
- Dave Thaler has sent in a lot of patches fixing various network problems.
- Adam Olsen created the original website.
PernMAngband
PernMAngband appeared from PernAngband (which was based on Zangband 2.2.0) and MAngband. It’s often told that PernMAngband was developed by DarkGod. But not all know that actually actually a lot of multiplayer stuff in PernMAngband was implemented by EvilEye, while DarkGod worked mainly on singleplayer PernAngband.
PernMAngband had a quite tragic life. There some remembering from EvilEye which I’ve gathered from MAngband discord channel:
The players kept asking for features… and they got them. And they kept cheating. And I probably wasn’t in a good place. Ended up zapping them/wrecking the town with a summon. And got banned 🙂 The end. Then the repo that existed before was turned into TomeNET (which become kinda a separate game at this stage) when DGs added towns. I hated that, and that was when CBlue ended up taking over (and I went mad).
After that there was yet another disaster: Crimson (MAngband maintainer) banned DarkGod from metaserver. There was good reason, though: the incompatible clients caused confusion (new monsters → broke visual mappings). As Flambard now remembers this situation: “MAngband devs should’ve fixed the protocol right then. But DarkGod was like: “I’ll just go and make my own”, and so it went…”.
And it wasn’t the end of misfortune. PernMAngband had a few details from the Pern series by Anne McCaffrey (like the Dragonrider race, some themed monsters and quests), though wasn’t based on the Pern universe to any great extent… Nonetheless, late February of 2002, McCaffrey’s son emailed DarkGod with threatening legal action unless the game was renamed and all Pern elements were removed (apparently the computer game rights had been awarded to Ubisoft).
So.. DarkGod renamed the game to TomeNET (Tales of Middle-Earth). Over a series of releases he has erased nearly all traces of Pern lore. PernMAngband ended it’s unfortunate existence.
But still there are some features in PernMAngband which are more advanced then in modern MMORL’s, for example, custom housing system. Our community hopes that in time PernMAngband heritage will be recovered and it’s features will be implemented once more.
Change list for PernMangband
– Added random artifacts
– Mage damaging spells upgraded in destructive power
– Sleep Monsters II is gone, replaced by Tidal Wave
– Acid Bolt is gone, replaced by Mana Strike(a powerfull spell but only a bolt)
– Reduced the spell cost and failure rate of some mage spells to make them more
usefull
– GoI is stackable but 1/2 will only reduce the damage instead of ignoring it
– Added Gloves of Magic, that reduce fighting but increase mana(from 10 to 100%)
Now Mages will hopefully play in a more “mage-like” way
– Added the Yeek race, -5 to all stats, bad HP, but very few experience
needed to gain a level.
– Add the Sorceror class
– Ball spells from party members dont hurt anymore
– Sorcerors can project wraithfrom, speed, shield on other players
– Got a permanent server(198.252.166.41) thanks a lot Crimson !
– Rings & lights artifacts
14/12/2000
– Damn I always forgot to make this up to date … ok so lots of
things changed …
– Mimic class that can polymorph at will into any monster they have
“studied”(killed 🙂 enough
– Much more things I cant remeber .. ok I promise I’ll TRY to get this
uptodate … mhh …
16/12/2000
– Mimics can now use the powers of the monster they are polymorphed into
– Old clients no more works with new server(3.0.7)
28/03/2001
– Telepath Class, uses crystals, can fusion with otehr people
– Grond inscribed with !E wont earthquake
– Mage Staffs of Power wont increase casting speed
– Grond WILL increase casting speed by 4
– DragonRiders get a ESP radius of (lvl/2)
– DragonRiders lost resist poison
– DragonRiders resistancess comes at lvl 10 15 20 25
01/04/2001
– Telepaths can now cast their spells with their energy instead of the
controlled guy energy
– Telepaths got 3 new Telekinesis spells
– Mind links needs 20 + d15 turns to be ended
– Telepaths got 1 new Psychoportation spell
16/04/2001
– Fixed a bug in the polymorph ring generation that could hang the game
– Mimics polymorph will cycle throught the possible forms instead of
randomly selecting them
24/07/2001 (evileye)
– Fixed a bug in server (common/types.h) which has player_type.dun_depth as s16b,
but uses pointer to s32b in load/save routines. Likewise with object_type.
This does not manifest in some machines.
– Fixed lack of null termination in self knowledge and *identification*.
– Fixed the “psi-powers” bug with rods.
– Fixed wand bug which could reduce the pval of other items.
– tot_dam_aux_player was getting resistances the wrong way round (and redefining
arg p_ptr).
– uncommented 744/745 of server/xtra1.c
– made king code multi-king friendly (made movement hook for each player)
25/07/2001 (evileye)
– Fixed up target_set_friendly so that it works with non party players
and respects hostilities.
– Fixed “the (nothing) you are wearing is cursed” problem which annoys
recently deceased players.
– Blood bond should not crash now.
– Added curse item spell for rogues (not fully implemented).
– Cleaned up various code and added protos for some funcs
25/07/2001 (darkgod)
– Fury, Dig, Spin warrior technics
– Fixed DSM being dopepd without unpolying
– Fixed morphing and not lossing eq wit eq is inscribed !
– /me works in chat
26/07/2001 (evileye)
– Fixed password prompt in client
– Bug in netserver which could result in bus fault fixed.
– Added Player menu to wizard commands (framework mainly)
– Added wizard level genocide
27/07/2001 (evileye)
– Fixed double experience bug on priests and sorcerors.
28/07/2001 (darkgod)
– Ghost cant gain experience
– Diving as a ghost dont affect recall depth
28/07/2001 (evileye)
– Cloned monsters do not drop anymore, and yield no experience
Mimic count is no longer updated either.
30/07/2007
– Telepaths dont share hp anymore, it was:
1) silyl given the idea of only the spirit of the telepath moving
2) cheezy
– Telepaths only share half their mana
– Player levels now goes up to 100
– Monster can ain levels up to 500
02/08/2001
– Randarts rarer
– Randart power reduced
– Max 2 EA on randarts
– Max +7 mana on randarts
– Tidal Wave mana/level increased
– Healing in hellish mode is now only 3/4 instead of 1/2
– Player Golems! One can find pieces of golem and make a powerfull ally
– Level requirement for objects, exepct for the char that found it
– Level requirments on objects
– One can inscribe an object #of the Fool to get the object to display:
“The Dager of the Fool”
– Races get different mana
– race restrict class
– Mana penality for armor increased
– Increased speed effect at high levels
04/08/2001
– New houses ready for testing prior to potential server reset
– Extended dungeon. After level 100(5000′) it loops to pseudo level 1
but with all monsters gaining +100 level
– No lev restriction on parties, but only opeople in the +/-7 level range will
gain xp
05/08/2001
– Finished Archers books
– 90 day player timeout added.
05/08/2001 – PernMangband 3.2.0
08/18/2001 – Client Changes (Client 3.2.1) -Zz
– You can specify an argument in Windows and client will connect directly
bypassing meta server (previously this only worked for Unix clients)
– Multiple colors for different types of messages in recall window
(death, kill, private messages, etc.)
– CTRL-O works like CTRL-P except only shows important messages – good for
review after a long fight or long AFK.
TomeNET
TomeNET created around 2001 (originally under the name of “PernMAngband”) as a fork of MAngband which got some ToME design added to it (also featuring some Zangband and Cthulu Angband monsters). TomeNET loosely bases on the stories of J.R.R. Tolkien mainly “The Lord Of The Rings”, hence the name “the Troubles of Middle Earth” or alternatively “the Tales of Middle Earth”. The final goal in TomeNET is to destroy the fallen god Melkor who is known by the name of Morgoth, Lord of Darkness.
Original developers are DarkGod, Evileye and Jir. Zz, Tanix and C. Blue also contributed code, and after the original development team dropped out one by one over the course of the following two years, C. Blue became the only active maintainer of the project. Two more years later, he formed a new development team: Mikael, Adam (implemented Runemaster), Moltor (creator of arcade shooter variant); later on, Relsiet (runecraft) and Kurzel (runecraft, arcade server) joined the team.
Features:
- skill-based progression system which provides a lot of different class builds
- powerful macro system
- several game modes (permadeath, infinite resurrections, PvP-mode, ironman, soloist); normal and RPG server rulesets
- special events (Dungeon Keeper, Highlander Tournament, Arena Monster Challenge)
- artifact and golem creation
- post-king gameplay (insanely dangerous dungeons)
- 1100+ monsters
- ego-monsters system
- 250+ static artifacts, 200+ special item powers, 1000+ items
- 200+ features/terrain types
- multiple towns at persistent world map which initially randomly generated
- dungeon features (eg inclusion of sand areas in ‘cave’ dungeons)
- parties and guilds system
- new races and classes (18 races and 13+ classes)
- new spells and spellbooks system
- different combat stances and specials skills (requires stamina)
- dual-wielding, parrying, dodge, block
- advanced AI
- day/night changes, four seasons, weather
- sound effects and dynamic background music
- LUA scripting support
- auto-update system
- auto-inscriptions
- casino and Go game
- dungeon towns for IDDC
- storage houses
- Fire-till-kill system
- web-site ladder and shops monitoring
- quest system
- binaries for Microsoft Windows, Linux and Mac OS X.
PWMAngband
PWMAngband (PowerWyrmMAngband) was created by PowerWyrm when had the idea to start a new variant based on latest MAngband 0.7.3. In 2007, the MAngband community made the MAngband source code easily available through a svn repository, with a development website allowing to track any change in the source code. This was the basic framework PowerWyrm was waiting for to start his own variant. So in April 2007, he started to implement basic features from TomeNET 3.x into the MAngband code: races, classes, monsters, objects. Next goal was to implement the latest Vanilla Angband features.
Features specific to PWMAngband:
- New Vanilla Angband features:
- ID system based at runes
- curses system
- traps system
- advanced item management (squelching)
- ‘no_selling’ game mode
- ‘R’est system
- feelings system
- disconnected stairs
- new classes
- MAngband features (compared to MAng features which got TomeNET):
- time bubble
- tileset support
- advanced tileset support for terrain (allow up to 65025 different tiles)
- dragon race (brings new system of character development in time)
- elementalist and summoner classes
- expensive Black Market
- new post-win content
- a wilderness area with multiple towns and dungeons
- compatibility with Zeno’s Necklace of the Eye frontend (isometric view, 3D, VR)
- dungeon brackets system
- new monsters and monster’s flags
- new server options (no artifacts, no selling, no stores, birth start kit, etc)
- unhardcoded features for game customization
- new flags for terrain
- customized town features
- advanced races/classes customization
- fire-till-kill and auto-retaliate options
- fortunate cookies (as a tool for NPC dialogues)
Tangaria
So.. And the story came to Tangaria, which is yet another variant. Tangaria based at PWMAngband, which based on MAngband, which based at Angband which based at Moria… In Russia such sequence called matryoshka 🙂
Tangaria founded in 2019 by Tangar Igroglaz (author of the article which you are reading right now). But wait… There were three multiplayer variants available already, why to create a new one?
After playing MMORPGs for a half of my life (I’ve started playing Ultima Online in 1999), I tried multiplayer roguelikes (MMORL) in 2015. I was deeply amazed at depth of the MMORLs and liked it so much that my main ambition for long time become to promote multiplayer roguelike genre as though MMORL games was immensely interesting, they got a very low playerbase. I’ve worked on the promotion of multiplayer roguelikes via my youtube channels and websites for some years, but I found that it’s pretty hard to convince ‘modern’ gamer even to try roguelike game because of oldschool symbol-based (ASCII) display. We needed at least basic graphics to popularize the genre.
So before I’ve started Tangaria, I’ve played only (and exclusively) TomeNET for 3 years. I’ve made 1-bit tileset for TomeNET and believed that online roguelikes should be only played with very minimalistic graphic appearance – so it would be easier to ‘read’ game’s situation. But after all these years, one day I went to try PWMAngband in graphical mode – and I was amazed that it’s actually pretty possible to play multiplayer roguelike in real-time with ‘pictures’. You remember pictures with the same effort as you remember glyphs/letters in symbolic roguelikes; and of course for a newcomer in this genre, playing with graphics is much easier than playing in ASCII.
At the same time having graphics could greatly enhance gameplay – as with text symbols we are quite limited with objects to display: chair, table, candle, bookshelf, etc – all these objects are forced to have the same symbol *
in ASCII as there we limited to 255 glyphs which are divided between monsters, items, players… there is no space left to add something, we came to the limit a long time ago. Proper graphical tileset removes this limitation.
So.. Back in time – I’ve tried to persuade TomeNET’s devs to repair tileset (it existed dozen years ago), but unfortunately no one was interested to repair it. So eventually, after a certain disagreement with TomeNET devs considering ‘Soloist’ chars participation in-game events (this cheating was considered legal by devs somehow) – I’ve gave a try to play PWMA and was amazed that it already had a working graphical tileset.. actually PWMA had several working tilesets included to the game in those times.
But again, at that time I didn’t had any plans to create my variant. Everything began when I’ve switched my attention to PWMA and found out that there weren’t any online servers to play. I’ve decided to start my own, tiny server. I hosted it at trial accounts at Amazon, MS Azure, Google Cloud – moving around different hostings every few months. At first, there was just a small community of players, but it has been grown in time…
Slowly I’ve started to experiment with server config. My goal was to solve all main online roguelikes problems which I’ve encountered in TomeNET and PWMA – ESP/mapping radius, non-permadeath, multiple characters per account, etc. After I’ve got hooked by PWMA and got certain vision about its enhancement and suggested PowerWyrm (PWMA maintainer) to implement my ideas to PWMA; but PowerWyrm liked his game ‘as it is’… so I’ve decided to create my own variant to embody my concepts. And PowerWyrm greatly helped with it by implementing awesome features which transformed PWMA into a real ‘game engine’ that provided rich variety of features for enhancements.
So, the main reason why Tangaria was created was that I’ve become not satisfied with gameplay in other multiplayer roguelikes; which I love very much and greatly respect their devs, but IMHO all the trinity (MAng, TN, PWMA) had ‘roguelikish‘ gaps in their gameplay, eg player are allowed to have more than one character; which in this particular genre – online multiplayer roguelike – will always brings cheating (giving items from high-level char to low-level), hoarding items in houses and eventually old players have pointless and boring 1-45 level gameplay (and even 50+ will eventually be boring if you are collecting good stuff for years, which is most typical gameplay style for MAng and TN).
Another problem is that mid/end-game *band multiplayer (and therefore real-time) gameplay is spoiled by ‘full ESP’ with unlimited radius. Players shouldn’t see all monsters at the whole level all the time in multiplayer variants. Limit ESP is essential for roguelikish experience in real-time mode when you have to make decisions fast. It feels weird when you have to ‘L’ook around level all the time like mad – it makes gameplay at end-game more predictable (easy and boring) and at the same time more tedious.
The same thing with revealing a map with magic on a too big radius – Magic Mapping breaks exploration and makes players gameplay ‘semi-automatic’: come to the level, press 2 hotkeys to reveal level, move 2 screens, repeat… Dull. There are several ways to solve this problem (except reducing radius) – eg to add hallucination for certain time after player casted Magic Mapping magic or just add cooldown for such spells. Magic Mapping should be manual and important action, which suited for certain situations; not just semi-automatic repeating grind.
Another doom of rlg spirit is a non-permadeath mode (they call it “everlasting”). When new player come to the game and start an everlasting character – he won’t be able later on to move to proper roguelike permadeath mode and will stay in a this newbie-mode forever. Players should learn to play roguelikes properly from beginning.
And there were much much more cheezing and even close to cheating stuff. Stair-scumming (fixed in Tangaria with disconnected stairs), the possibility to grind low-level dungeons (fixed with dungeon brackets), pointless food (totally reworked), summoning staves grind, etc… All these problems are solved in Tangaria.
So, back to the time when I’ve just established my PWMA server – I’ve started to modify some internal staff and rebalance the game – eg made food much rarer and valuable, as, without rework, food mechanics was too simple and boring (go town -> buy cheap food, repeat). Eventually I started to rebalance all kind of stuff – items, monsters, shops, dungeons etc – and ‘server’ become to grow into something bigger than just yet another variant.
At this point, I want to thank PowerWyrm who helped me a lot in understanding how to work with PWMA ‘game engine’. He explained details of internal stuff and introduced great new features which Tangaria heavily required to become a better place. Not all stuff which I suggested, PowerWyrm agreed to implement, we got different points of view on matters, but eventually, we managed to find a compromise in a lot of questions. Actually PowerWyrm’s approach about working separately at each own variant helped us to avoid grudges which often happens between energetic people. If PowerWyrm implements certain stuff which I don’t like – I just do not include it to Tangaria. And vice versa – if I add something interesting or have an idea which PowerWyrm likes – he includes is to PWMA. So eventually everything feels like we are working on the same project (which we all eventually do – in our multiplayer roguelike family!).
So after a while, I’ve started to work on the tileset, to enhance game graphics. PWMA already had great Gervais’s tileset included, but it had only monsters/items in it; almost without terrain and interior. And at this particular point, I’ve really hoped that working on new graphics appearance of the game could inspire other multiplayer roguelike developers to combine their efforts and to work together at ‘game engine’ core, which could be the same for all online roguelike games; I thought that we will unite, overcoming their differences, to start joint work. Of course (it’s a bit sad, but it seems the only way because of a lot of different stuff in server code), each of us would work at its own game, but they could have common mutual ‘core’ with modules which could be customized for each game by its own accord.
Anyway… After my fervent requests, PowerWyrm implemented in ‘PWMAngband 1.2.0 build 2’ new great system which allowed to bind 65025 graphical tiles… It made it possible not only to overcome 255 glyphs limit, but gave the way to use a whole new approach to world-building and dungeons generation – to make the game look really beautiful!
Creating a new tileset was a very long process.. But eventually, it’s live. After that I’ve started work on pure game design – I’ve added dozens of new races and classes, changed a lot of gameplay mechanics, enhanced dungeons design (each dungeon will have its own unique appearance) etc. List of main Tangaria’s features could be found there.
Finally, at the end of April 2021 I’ve started coding stuff and Tangaria now got github repo. Before that it was 2 years of game designing through config files which proves that (PW)(M)Angband is perfect roguelike engine 😉
That’s it for now, I’ll edit/write more stuff into this page later. Please contact me if there is a mistake or inaccuracy in this article! And you are very welcome in our Discord channel ʕ •ᴥ•ʔ
multiplayer roguelike <3