Topic 010 - MetaHack

started 1999-03-26

What is MetaHack?

It'd be nice to be able to port your NetHack characters to Angband and vice-versa. This sort of "dungeon hopping" would be trivial if Roguelike developers had decided upon a saved game standard, but they didn't. It'd also be easy if they'd used more modular programming (see Topic 009 - A la Carte Gaming), where you could take a Character module and attach it to an Interface module and a World module, but they didn't.

So, if we're going to write a "MetaHack" program ourselves (any volunteers?), we'll need three things: a save point superset, a save file converter, and a front end.

Save Point Superset

This would have to be the superset of all the current saved game data elements, and the most extensive description of each element.

For example, if NetHack's weapon stats are: WeaponID, ToHit, BlessedOrCursed, RustLevel, and Enscription (a total guess) and Larn's weapons stats are: WeaponID, ToHit, ToDamage, and WearAndTear then the MetaHack saved game standard must include fields for: WeaponID, ToHit, ToDamage, BlessedOrCursed, RustLevel, WearAndTear, and Enscription.

As a result, the MetaHack saved game files will be much larger than any of the individual games' saved game files.

Save File Converter

This would convert all of the individual games' save files into the MetaHack save format and vice versa. The MetaHack files will always be the "master" files, since you lose information if you depend on the individual games' save formats.

For example, let's say your Angband character has a +2 ToHit, +4 ToDamage sword. If you were to port that character to Rogue's Quest, which only uses ToHit, then you will need to save the +4 ToDamage information somewhere other than the Rogue's Quest save files. Likewise for Wands of Wishing (they exist in NetHack but not in Angband), different types of spell books, etc.

Somehow you need a way to represent special items in the different games, even if they have no function in that game (like the Wand of Wishing in Angband). Maybe you can represent them by using enscriptions, but it shouldn't matter if you change the enscriptions in the games, since the "master" specs of each item are stored in the MetaHack saved game.

An alternative to item enscriptions would be to simply not allow objects into a game in which they cannot be represented with sufficient accuracy. The player might have to enter each new dungeon naked, or have special objects "stored" for him. This is one of the big challenges: deciding how to handle unrepresentable items.

Front End

MetaHack's interface should perpetuate the role playing metaphor, hiding details like saved game formats and inter-game conversions from the player. It should provide a consistent and "believable" means for storing nonportable items and regulating the dungeon hopping. The inter-game interface might even become an exploratorive game in itself.

Storing Nonportable Items

Certain items might not be representable in every game. You need a way to jump from NetHack to Angband without permanently losing your Wand of Wishing. Even though you can't use the Wand of Wishing in Angband, you should be able to use it again in NetHack when you return.

One way to doing this would be to have a "meta-home". Whenever you change games, any items which cannot be used in the destination game would be automatically stored in the meta-home. Whenever you enter enter a game in which an item can be represented, it moves from the meta-home to your inventory.

Regulating the Dungeon Hopping

It wouldn't be "fair" for a character who's getting his butt kicked in one game to "teleport" to another game, rest up, and then "teleport" back to the first game. MetaHack should only allow characters to "teleport" out of their dungeon if they are in well-defined (and ideally "safe") locations, or posess certain items or abilities.

For example, NetHack's teleport point could be the upward stairs on dungeon level 1. Angband could let you teleport if you are in your home in a town. Other games could have similar fixed-points from which MetaHack would allow teleportation.

Teleport points should not have to be added to individual games. Instead, MetaHack would monitor the save files. Games with auto-save would enable MetaHack to notify the player in real-time when inter-game teleportation is available. Otherwise, the player will probably have to save manually in order for MetaHack to be able to detect the player's location.

Exploratorive Game in Itself

MetaHack could present the player with a complete world in which he would then have to explore in order to find the entrances to the different sub-games. Just imagine what that would be like!

Walking around in the wilderness, it starts to snow, and you are starving, so you try to find shelter in the forest and stumble across a portal to another world! You jump through and find yourself outside the gates of Rampart... "Ah, shoot!" you say to yourself. In order to escape Omega, you have to become a member of the magician's guild, and you are a fighter, so you've got a lot of training to do... :)

Conclusion

I think a program like MetaHack would be relatively easy to write compared to making yet another Rogue clone, and would earn itself a much broader, and possibly more enthusiastic, audience.

If the individual Roguelike developers could supply the code for writing and reading their games' save files, a simple version of MetaHack could be up and running within a couple of weeks.

Topic 010 - MetaHack

started 1999-03-26