Treasure maps

 
Post new topic   Reply to topic    mudlab.org Forum Index -> Design
View previous topic :: View next topic  
Author Message
Alister



Joined: 13 May 2005
Posts: 62
Location: Alberta, Canada

PostPosted: Tue Aug 10, 2010 9:59 am    Post subject: Treasure maps Reply with quote

My mud has these things called treasure maps. They sometimes drop when players are fighting monsters. When read, they give an overhead view of a location in the world. If players find that location and dig while holding the corresponding map, they can reveal buried treasure. This is one of those ideas that I thought would just be a cute little side game, but its been met with such overwhelming success on my mud I thought Id share the idea and discuss why it works so well.

When a player loots a treasure map, they can read it and see the following information:

Code:

> read map
===============================================================================
This is a treasure map.  Dig at its location to reveal a treasure.  It
corresponds to somewhere north and west of Moonhaven.  This map's difficulty is
25 (out of 100).  You are not at all close.  This item has an encumbrance of
0.10.

oowwwwwwww""""""""""ffffffffffffff
wwwwww""""""""""ffffffffffffffffff
""""""""""""ffffffffffffffffffffff
""""""""ffffffffffffffffffffffffff
ffffffffffffffffffffffffffffffffff
ffffffffffffffffffffffffffffffffff
ffffffffffffffffffffffffffffffffff
ffffffffffffffffffffffffffffffffff
ffffffffffffffffxxffffffffffffffff
''''''ffffffffffffffffffffffffffff
''''''''''''ff''''ffffffffffffffff
''''''''''''''''''''ffffffffffffff
''''''''''''''''''''''ffffffffffff
^^^^^^^^''''''''ff''''''ffffffffff
^^^^^^^^^^^^''''''''''''ffffffffff
^^^^^^^^^^^^^^''''''''''''ffffffff
^^^^^^^^^^^^^^''''''''''''''ff~~~~
===============================================================================


Sometimes you get very distinct locations like the one above, which can be easy to find given the approximate direction and distance from a landmark (the main city). However, sometimes you get slightly tougher maps that do not correspond to one obvious location. This is common with beach shores:

Code:

> read map
a treasure map (inv) (kwds: map, treasure map)
===============================================================================
This is a treasure map.  Dig at its location to reveal a treasure.  It
corresponds to somewhere north and slightly east of Moonhaven.  This map's
difficulty is 86 (out of 100).  You are getting close.  This item has an
encumbrance of 0.10.

oooooooooooooooooooooooooooooooooo
oooooooooooooooooooooooowwwwwwwwoo
oooooooooooooooooowwwwwwwwwwwwwwww
oooooooooooowwwwwwwwww""""""""""ww
wwoooowwwwwwwwwwww""""""""""""""""
wwwwwwwwwwww""""""""""ffffffffff""
""""""""""""""""""ffffffffffffffff
""""""""""""ffffffffffffffffffffff
ffffffffffffffffxxffffffffffffffff
ffffffffffffffffffffffffffffffffff
ffffffffffffffffffffffffffffffffff
ffffffffffffffffffffffff''ffffffff
ffffffffffffffffffffffffffffffffff
ffffffffffffffffffffffffffffffffff
ffffffffffffffffffffffffffffffffff
ffffffffff''ff''ffffff''ffffffffff
ffffffffffffffffffffffffffffffffff
===============================================================================


Players head off in the direction the map says the treasure is, and try to find the exact spot. You need a fairly big world to make this sort of exploration interesting. But of course, this means players can get lost. One of the tools players have at their disposal for treasure hunting is the scan command, which shows a large areas surrounding the player:

Code:

> scan
ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffFFff''
ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffFFFFFF
ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffFFFFff
ffffffffffffffffffffffffffff''ffffffffffffffffffffffffffffffffffffffffffff
ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
--ffffffffffffffff''ffffffffffffffffffffffffffffffffffffffffffffffffffffff
ff--------------------------ffffffffffffffffffffffffffffffffffffffffffffff
ffffffffffffffffffff''ffffff--ffff''ffffffffffffffffffffffffffffffffffff''
ffffffffffffffffffffff''ffffff--ffffffffffffffffffffffffffffffffffffff''''
ffffffFFffffffff''ffffffffffffff--ffffffffffffffffffffffffffffff''ffffff''
ffffFFffffffffffffffffffffffffffff--ffffffffffffffffffffffffffffffffffff''
ffFFFFffffffffffffffffffffffffffffff--ffffffffffffffffffffff''ffffffffff''
FFFFffFFffFF''ffffffffffffffffffffffff--ffffffffffffffffffffffffffffffffff
''ffFFffFFffffffffffffffffffffffffffffff--ffffffffffff''ffffffffffffffff''
FFFFFFffffffffffffffffffffffffffffffff''ff--------------------------------
ffFFffFFffffffffffffffffffffffffffffffff--ffffffff''ffffffffffffffffffffff
ff''ffffFFffffffffffffffffffffffffffxx--ffffffffffffffffff''ffffff''ffffff
''ffFFffffffffffffffff''ff------------ffffffff''''ffff''''''ffffff''ffffff
ffffffffffffffffffffffff--ffffffffffffffffffffff''ff''ff''''''ffff''ffffff
ff''ffffffffffffff''''--ffffffffffffffffffffffff''ffffFFffffffffff''''''''
ffffffffffffffpp''''--ffffffffffffffffffffff''''''FFff''ffffffffff''ff''##
ffffffffpp''pppppp--ffppffffffffffff''ffffff''''ffffFFffffffffff''''''''##
ffffffppffpppppp--ppffpp''ff''ffffffffffffffffff''''''''''''''''''''''''##
ffppffffpppppp--ffppppffpp''ffffff''''''''ffffff''FF''''''''''''''''''''##
ffffffpppppp''--''ppppppffppffffppffff''ff''ffffff''''''''''''''''''''''##
ffpp''pppppppp--ppppppppppffppffff'''''''''''''''''''''''''''$'$'$'$'$'$##
ppffpppppppppp----------------------------------------------------------..
ffffpppppppppp--''pppp''ppppppffffpppp''ff''''''''ffff'''''''$'$'$'$'$'$##
ffpppppppppppp--hhpp''ppppppppppppff''ppppffffffffffffff''''''''''''''''##
pp''pppppppphh--''hhhhpppppp''pppppppp''pppppp''ff''''ff''''''''''''''''##
pppppppphhhhpp--hhhhpppppppppppppppp''pppp''''''ppppff''''''''''''''''''##
pppppppphhhh--hhhhpphhppppppppppppppppppppffpppp''''''''''''''''''''''''##
pppppphhhhhh--hhhhhhhhppppppppppppppppppppppppppppffpppp''''''''''''''''##
hhhhhhpphhhh--p$hhhhhhhhpppppppppppppppppppppp''pppppp''''''''''''''''''''
wwwwwwwwwwww==wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww


That's basically the entire game. No deep, detailed mechanics. I just sample a random room from the world, print it onto a map, and players go off to find the location. Despite its simplicity, players really enjoy this. I think there's two main reasons why this works so well.

First, it's a very qualitatively different experience than fighting monsters. What you often see is after players have been fighting monsters for a few days straight, they will take a break and just go treasure hunting. It provides a nice change of pace. Treasure hunting is a slow process, but engaging, and ideal for times where you want to play but you don't have the attention span to fight a dragon.

Second, although players are given useful information about the treasure's location in the form of relative directions and distance from the main city, and an overview of the exact location, they are not given directions relative to their current location. This is a big deal. It means players cannot follow rigid rules for finding the map, such as "walk east; look at map and see if I got closer; if I did, repeat. If not, pick a new direction". It's not an easily scriptable process, and thus it doesn't turn into a repetitive grind. Players have to continuously be trying to match up the terrain detail on their map to the terrain detail of their current location visually, and not follow scripted rules.

You may have noticed that the two treasure maps presented above have different difficulty ratings. I get these numbers by calculating the entropy over the room terrain types on the map. The higher the entropy, the easier the map. This is fairly good at mapping non-descript locations to high difficulties and specific locations to low difficulties. For example, here's an extremely easy map that is correctly labeled as such:

Code:

> read map
a treasure map (inv) (kwds: map, treasure map)
===============================================================================
This is a treasure map.  Dig at its location to reveal a treasure.  It
corresponds to somewhere north and slightly west of Moonhaven.  This map's
difficulty is 2 (out of 100).  You are not at all close.  This item has an
encumbrance of 0.10.

fffffffffffffffffffffffff*ffffffff
ffffffffffffffffffffffffffffffffff
ffffffffffffffffff''fffffff*ff''ff
ffffffffffffffffff''ffffffffffffff
fffffffffffffffffffff*fffffffff*~~
ffffffffffffffffffffff~~~~~~~~~~~~
ffffffffff~~~~~~~~~~~~~~ffssssff~~
~~~~~~~~~~~~fffff*ffffffssffssssff
''''''''''''''''xxffffffffffssssss
''##############''f*f*ffffssffssss
''##          ##''ffffffffffffffss
''##          ##'*ffffffffffffffff
''##          ##'of*ffffffffffffff
''##          ##''ffffffffffffffhh
''##          ##''ffffhhffffhhhhhh
''######==######''ffffffhhhhhhhhhh
''''''''''''''''''hhffhhhhHHhhhhhh
===============================================================================


As you can see, the terrain is quite varied. Entropy correctly picks this out as a distinct location in the world. It also easily picks out most non-descript locations such as the following:

Code:

> read map
treasure map (inv) (kwds: map, treasure map)
===============================================================================
This is a treasure map.  Dig at its location to reveal a treasure.  It
corresponds to somewhere slightly north and far west of Moonhaven.  This map's
difficulty is 96 (out of 100).  You are not at all close.  This item has an
encumbrance of 0.10.

ffffffffffffffffffffffffffffffffff
ffffffffffffffffffffffffffffffffff
ffffffffffffffffffffffffffffffffff
ffffffffffffffffffffffffffffffffff
ffffffffffffffffffffffffffffffffff
ffffffffffffffffffffffffffffffffff
ffffffffffffffffffffffffffffffffff
ffffffffffffffffffffffffffffffffff
ffffffffffffffffxxffffffffffffffff
ffffffffffffffffffffffffffffffffff
ffffffffffffffffffffffffffffffffff
ffffffffffffffffffffffffffffffffff
ffffffffffffffffffffffffffffffffff
ffffffffffffffffffffffffffffffffff
ffffffffffffffffffffffffffffpppppp
ffffffffffffffffffffpppppppppppppp
ffffffffffffpppppppppppppppppppppp
===============================================================================


What it doesn't do so well is handle landmarks that aren't expressed as highly varied terrain. For example, locations near to roads:

Code:

> read map
a treasure map (inv) (kwds: map, treasure map)
===============================================================================
This is a treasure map.  Dig at its location to reveal a treasure.  It
corresponds to somewhere slightly north and slightly east of Moonhaven.  This
map's difficulty is 75 (out of 100).  You are not at all close.  This item has
an encumbrance of 0.10.

ffffffffFFffffffffffffffffffffffff
ffffffffffffffffffffffFFffffffffff
ffffffffffffffff''''''''''''''ffff
ffffffffffffffffffffffffffffffffff
ffffffffffffffffffffffffffffffffff
ffffffffffffffffffffffffffffffffff
ffffffffffffffffffffffffffffffffff
ff''ffffffffffffffffffffffffffffff
ff''ffffffffffffxxffffffffffffffff
''''''ffffffffffffffFFffffffffffff
''''''ffffffffffffffffffffffffffff
''''''ffffffffFFffffffffffffffff--
''''''ffffffffffffffffffFFffff--ff
ff''ffffffff''ffffffffffffff--ffff
ffffffffffffffffff''ffffff--ffff''
--------------------------''ffffff
ffffffffffff''''ffffffffff--ffffff
===============================================================================


Thankfully, in my game world. these locations are few and far between and don't really impact the experience that much. If they did, I could probably work around the problem by artificially lowering the difficulty of maps that contained roads, or by simply requiring map locations to be a certain distance away from roads.

The only other major problem I've been faced with is making maps accessible to my blind players. Unfortunately, I cannot think of any way to do this without making maps trivially solvable by performing a gradient descent.

But, overall, this feature has been an overwhelming success on my mud.
Back to top
View user's profile Send private message Send e-mail Visit poster's website
Author Message
KaVir



Joined: 11 May 2005
Posts: 565
Location: Munich

PostPosted: Tue Aug 10, 2010 10:57 am    Post subject: Reply with quote

Nice idea, although personally I'd be put off by the accessability issue (around 20% of my active players use a screen reader). The only solution I can think of would be to offer an alternative minigame for blind players.

In regard to scripting, couldn't someone just use 'scan' to create a map of the entire world, and then write a script to run through it looking for a match?
Back to top
View user's profile Send private message Visit poster's website
Author Message
Alister



Joined: 13 May 2005
Posts: 62
Location: Alberta, Canada

PostPosted: Tue Aug 10, 2010 11:17 am    Post subject: Reply with quote

KaVir wrote:
Nice idea, although personally I'd be put off by the accessability issue (around 20% of my active players use a screen reader). The only solution I can think of would be to offer an alternative minigame for blind players.


Yeah, the fact that blind players can't use maps is incredibly unfortunate. An alternative minigame would be nice, but I have yet to think up anything sufficiently interesting.

KaVir wrote:
In regard to scripting, couldn't someone just use 'scan' to create a map of the entire world, and then write a script to run through it looking for a match?


Now that you mention it, probably. Nobody has tried this yet (to my knowledge).
Back to top
View user's profile Send private message Send e-mail Visit poster's website
Author Message
chaos



Joined: 24 Aug 2007
Posts: 35
Location: New Jersey

PostPosted: Thu Sep 09, 2010 3:30 am    Post subject: Reply with quote

That's pretty brilliant; I love it. I don't suppose you'd share your entropy calculation algorithm?

You could address the scan-database issue, and maybe add some flavor, by fuzzing the map a little, reflecting limited abilities on the part of the cartographer, damage, or terrain change since the map was drawn.
Back to top
View user's profile Send private message Visit poster's website
Author Message
Alister



Joined: 13 May 2005
Posts: 62
Location: Alberta, Canada

PostPosted: Mon Sep 13, 2010 9:49 am    Post subject: Reply with quote

chaos wrote:
I don't suppose you'd share your entropy calculation algorithm?


Code:

def entropy(vals):
    freqs = { }
    for v in vals:
        if not v in freqs:
            freqs[v] = 0.
        freqs[v] += 1.

    entropy = 0.
    for val, freq in freqs.iteritems():
        entropy += -(freq/len(vals)) * math.log(freq/len(vals))

    return entropy
Back to top
View user's profile Send private message Send e-mail Visit poster's website
Display posts from previous:   
Post new topic   Reply to topic    mudlab.org Forum Index -> Design All times are GMT
Page 1 of 1

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum

Powered by phpBB © 2001, 2002 phpBB Group
BBTech Template by © 2003-04 MDesign