Testing on various code bases
I have tested the mapper on various MUDs, in order to confirm whether or not it works, and also to tweak the way it works. Various MUDs have had challenging differences to the way they present their output.
I chose a MUD at random from each code base type (as listed on MUD Connector), preferring one with a higher ranking on MUD Connector, as that was more likely to have an active player base. I skipped a few code bases that only had one or two MUDs listed (or none).
If your MUD code base is not listed, or if its output differs substantially from the one I tested, use the ideas shown below to adapt the mapper to it. With luck, it will work without any customising, however see the suggestions in the post above to get some ideas for what to do if you need to do some work to make it function reliably.
You could browse through these triggers and find ideas for you own MUD, to help make the mapper more reliable.
Any configuration options not specified can be assumed to be the default.
This should be taken as a guide, as individual MUD developers may have changed colour schemes, layouts, and so on, and thus not conform exactly to what I tested. Also, your own configuration options on the MUD may change the way output is displayed (for example, “brief” mode might suppress rooms descriptions which will throw out the mapper).
Also see my post about adapting the mapper for Alter Aeon.
AFKMud (Armageddon)
(DikuMUD derivative)
Configuration
mapper config when_to_draw description
mapper config activate_description_after_exits No
mapper config activate_description_after_room_name Yes
mapper config add_newline_to_prompt Yes
mapper config blank_line_terminates_line_type No
mapper config exits_on_room_name Yes
mapper config include_exits_in_hash Yes
mapper config exits_is_single_line No
mapper config exit_lines_start_with_direction No
Aber (TerraFirmA)
(Terra Adventure Engine Ver 6.2.0 )
Configuration
mapper config when_to_draw exits
mapper config activate_description_after_exits No
mapper config activate_description_after_room_name Yes
mapper config add_newline_to_prompt Yes
mapper config blank_line_terminates_line_type No
mapper config exits_on_room_name No
mapper config include_exits_in_hash Yes
mapper config exits_is_single_line No
mapper config exit_lines_start_with_direction Yes
Notes
To help the mapper learn the exits lines the following triggers should be added to your world file.
See http://www.gammon.com.au/pasting for how to copy from below and paste into your world file.
<!-- Exits lines -->
<triggers>
<trigger
enabled="y"
keep_evaluating="y"
match="^ (North|South|East|West|Up|Down)\s+\: "
regexp="y"
send_to="12"
sequence="100"
>
<send>
check (CallPlugin ("99c74b2685e425d3b6ed6a7d", "set_line_type", "exits"))
check (CallPlugin ("99c74b2685e425d3b6ed6a7d", "do_not_deduce_line_type", "exits"))
</send>
</trigger>
<!-- Room name -->
<trigger
enabled="y"
keep_evaluating="y"
match="^You are standing (in|on|at) (?<location>.*)$"
regexp="y"
send_to="12"
sequence="100"
>
<send>
-- extract out room nane from the line
local location = "%<location>"
-- capitalize the name
location = location:sub (1, 1):upper () .. location:sub (2)
-- get rid of any trailing period
if location:sub (-1) == "." then
location = location:sub (1, -2)
end -- if ends with period
-- tell the mapper it is a room name with our extracted name
check (CallPlugin ("99c74b2685e425d3b6ed6a7d", "set_line_type", "room_name", location))
</send>
</trigger>
<!-- Prompt -->
<!-- Modify this trigger if you are using a different prompt -->
<trigger
enabled="y"
keep_evaluating="y"
match="TerraFirmA>"
send_to="12"
sequence="100"
>
<send>
check (CallPlugin ("99c74b2685e425d3b6ed6a7d", "set_line_type", "prompt"))
</send>
</trigger>
<!-- Things in the room -->
<trigger
keep_evaluating="y"
match="You see : "
send_to="12"
sequence="100"
>
<send>
check (CallPlugin ("99c74b2685e425d3b6ed6a7d", "set_line_type", "ignore"))
</send>
</trigger>
</triggers>
Ack!mud (MaDDness)
In-game configuration
config
[ Keyword ] Option
[-nosummon ] You may be summoned.
[-novisit ] You may be 'visited'.
[+COLOR ] You recieve 'ANSI' color.
[+AUTOEXIT ] You automatically see exits.
[-autoloot ] You don't automatically loot corpses.
[-autogold ] You don't automatically take money from corpses.
[-autosac ] You don't automatically sacrifice corpses.
[-autoass ] You don't automatically assist your group members.
[+BLANK ] You have a blank line before your prompt.
[-brief ] You see long descriptions.
[+COMBINE ] You see object lists in combined format.
[+PROMPT ] You have a prompt.
[+TELNETGA ] You receive a telnet GA sequence.
[+FULLANSI ] Your client supports FULL ANSI.
[-display ] Your are not viewing the ASCII display map.
[-justify ] Your are not viewing rooms space justified.
Terminal set to: 25 Rows, 80 Columns.
I think the ones I changed were:
config +color
config +autoexit
config +blank
config +telnetga
congig +prompt
config +fullansi
config -display
Now in MUSHclient activate world configuration -> Appearance -> Output -> “Convert IAC EOR/GA to new line”. That makes prompt lines have a newline.
Configuration
mapper config when_to_draw description
mapper config activate_description_after_exits Yes
mapper config activate_description_after_room_name No
mapper config add_newline_to_prompt No
mapper config blank_line_terminates_line_type Yes
mapper config exits_on_room_name No
mapper config include_exits_in_hash Yes
mapper config exits_is_single_line Yes
mapper config exit_lines_start_with_direction No
Circlemud (4 Dimensions)
Configuration
mapper config when_to_draw description
mapper config activate_description_after_exits Yes
mapper config activate_description_after_room_name No
mapper config add_newline_to_prompt No
mapper config blank_line_terminates_line_type Yes
mapper config exits_on_room_name No
mapper config include_exits_in_hash Yes
mapper config exits_is_single_line No
mapper config exit_lines_start_with_direction No
CoffeeMud (Coffee MUD)
Configuration
mapper config when_to_draw exits
mapper config activate_description_after_exits No
mapper config activate_description_after_room_name Yes
mapper config add_newline_to_prompt No
mapper config blank_line_terminates_line_type Yes
mapper config exits_on_room_name No
mapper config include_exits_in_hash Yes
mapper config exits_is_single_line No
mapper config exit_lines_start_with_direction Yes
Notes
To help the mapper learn the exits lines the following triggers should be added to your world file.
See http://www.gammon.com.au/pasting for how to copy from below and paste into your world file.
If you are using a different prompt change the prompt trigger (below) to match it.
<!-- Prompt -->
<triggers>
<trigger
enabled="y"
match="<*Hp *m *mv>*"
send_to="12"
sequence="100"
name="Prompt_line"
>
<send>
check (CallPlugin ("99c74b2685e425d3b6ed6a7d", "set_line_type", "prompt"))
check (CallPlugin ("99c74b2685e425d3b6ed6a7d", "do_not_deduce_line_type", "prompt"))
</send>
</trigger>
<!-- Exits lines -->
<trigger
enabled="y"
match="^(North|South|East|West|Up|Down)\s*: "
regexp="y"
send_to="12"
sequence="100"
name="Exits_line"
>
<send>
check (CallPlugin ("99c74b2685e425d3b6ed6a7d", "set_line_type", "exits", "%1"))
check (CallPlugin ("99c74b2685e425d3b6ed6a7d", "do_not_deduce_line_type", "exits"))
</send>
</trigger>
</triggers>
DUM (Frandum)
Prompt
Set your prompt to be more noticeable, and have a newline, similar to this:
config prompt <%h/%Hhp %s/%Ssp>\n
Configuration
mapper config when_to_draw description
mapper config activate_description_after_exits Yes
mapper config activate_description_after_room_name No
mapper config add_newline_to_prompt No
mapper config blank_line_terminates_line_type No
mapper config exits_on_room_name No
mapper config include_exits_in_hash Yes
mapper config exits_is_single_line No
mapper config prompt_is_single_line Yes
mapper config exit_lines_start_with_direction No
mapper config sort_exits Yes
Notes
To help the mapper learn the exits lines the following triggers should be added to your world file.
See http://www.gammon.com.au/pasting for how to copy from below and paste into your world file.
<!-- All lines - look for cyan on black -->
<triggers>
<trigger
back_colour="8"
enabled="y"
keep_evaluating="y"
match="*"
match_back_colour="y"
match_text_colour="y"
name="Contents_in_cyan"
send_to="12"
sequence="100"
text_colour="14"
>
<send>
check (CallPlugin ("99c74b2685e425d3b6ed6a7d", "set_line_type", "ignore")) -- ignore all lines in cyan on black
check (CallPlugin ("99c74b2685e425d3b6ed6a7d", "do_not_deduce_line_type", "description")) -- no descriptions follow these lines
</send>
</trigger>
<!-- Exits -->
<trigger
enabled="y"
match="Obvious exits: *"
name="Exits_line"
send_to="12"
sequence="100"
>
<send>
check (CallPlugin ("99c74b2685e425d3b6ed6a7d", "set_line_type", "exits", "%1")) -- it's an exits line
check (CallPlugin ("99c74b2685e425d3b6ed6a7d", "do_not_deduce_line_type", "exits")) -- so don't deduce them
check (CallPlugin ("99c74b2685e425d3b6ed6a7d", "deduce_line_type", "description")) -- descriptions follow exits
-- backtrack and pick up the room name (the line before the exits)
local last_line = GetLinesInBufferCount ()
-- go back 10 lines looking for an output line
for line = last_line - 1, last_line - 10, -1 do
if GetLineInfo (line, 4) or GetLineInfo (line, 5) then
-- note or input line, ignore it
else
-- the room name is the previous line to the description
check (CallPlugin ("99c74b2685e425d3b6ed6a7d", "set_line_type_contents", "room_name", GetLineInfo (line, 1) ))
break
end -- output line
end -- for
</send>
</trigger>
<!-- There is xxx here (white on black) -->
<trigger
back_colour="8"
enabled="y"
match="There is * here."
match_back_colour="y"
match_text_colour="y"
name="Room_contents_line"
send_to="12"
sequence="100"
text_colour="15"
>
<send>
check (CallPlugin ("99c74b2685e425d3b6ed6a7d", "set_line_type", "ignore")) -- ignore this line
check (CallPlugin ("99c74b2685e425d3b6ed6a7d", "do_not_deduce_line_type", "description")) -- no descriptions follow these lines
</send>
</trigger>
</triggers>
Dawn (The Gathering)
Configuration
mapper config when_to_draw exits
mapper config activate_description_after_exits No
mapper config activate_description_after_room_name Yes
mapper config add_newline_to_prompt No
mapper config blank_line_terminates_line_type No
mapper config exits_on_room_name No
mapper config include_exits_in_hash Yes
mapper config exits_is_single_line Yes
mapper config prompt_is_single_line Yes
mapper config exit_lines_start_with_direction No
mapper config sort_exits Yes
Notes
To help the mapper learn the exits lines the following triggers should be added to your world file.
See http://www.gammon.com.au/pasting for how to copy from below and paste into your world file.
<!-- Room name -->
<triggers>
<trigger
back_colour="8"
enabled="y"
keep_evaluating="y"
match="* [*]*"
match_back_colour="y"
match_inverse="y"
match_italic="y"
name="Room_name"
send_to="12"
sequence="100"
>
<send>
function callmap (...)
check (CallPlugin ("99c74b2685e425d3b6ed6a7d", unpack ({ ... }) ))
end -- callmap
callmap ("set_line_type", "room_name", "%1") -- this is a room name
callmap ("do_not_deduce_line_type", "room_name") -- so don't try to deduce them
callmap ("deduce_line_type", "description") -- start deducing descriptions
callmap ("set_area_name", WorldName () .. ": %2")-- the area name is wildcard #2
</send>
</trigger>
<!-- Exits -->
<trigger
back_colour="8"
enabled="y"
keep_evaluating="y"
match="[Exits: *]"
match_back_colour="y"
match_bold="y"
match_inverse="y"
match_italic="y"
match_text_colour="y"
name="Exits_Line"
send_to="12"
sequence="100"
text_colour="15"
>
<send>
function callmap (...)
check (CallPlugin ("99c74b2685e425d3b6ed6a7d", unpack ({ ... }) ))
end -- callmap
callmap ("set_line_type", "exits") -- this is an exit
callmap ("do_not_deduce_line_type", "exits") -- so don't deduce exits
callmap ("do_not_deduce_line_type", "description") -- and no descriptions follow exits
</send>
</trigger>
</triggers>
Training
Don’t bother training exit lines and room names, as the triggers will override that. Train descriptions, prompts, and “do not move” lines.
Dikumud (Arctic)
This one was a bit challenging because I couldn’t find a way of showing the exits automatically, except they were on the prompt line. So, a bit of scripting was needed to pull them from the prompt, put spaces between them, and process them as exits.
In MUSHclient activate world configuration -> Appearance -> Output -> “Convert IAC EOR/GA to new line”. That makes prompt lines have a newline.
Configuration
mapper config when_to_draw prompt
mapper config activate_description_after_exits No
mapper config activate_description_after_room_name Yes
mapper config add_newline_to_prompt No
mapper config blank_line_terminates_line_type No
mapper config exits_on_room_name No
mapper config include_exits_in_hash Yes
mapper config exits_is_single_line No
mapper config prompt_is_single_line Yes
mapper config exit_lines_start_with_direction No
mapper config sort_exits Yes
mapper config status_background black
mapper config status_border #1B1B1B
mapper config status_text lightgreen
mapper config uid_size 4
mapper config show_info No
mapper config show_warnings Yes
mapper config show_room_and_exits No
Notes
To help the mapper learn the exits lines the following triggers should be added to your world file.
See http://www.gammon.com.au/pasting for how to copy from below and paste into your world file.
<!-- Ignore lines in red -->
<triggers>
<trigger
back_colour="8"
bold="y"
enabled="y"
match="*"
match_back_colour="y"
match_bold="y"
match_inverse="y"
match_italic="y"
match_text_colour="y"
name="Ignore_Line"
send_to="12"
sequence="100"
text_colour="9"
>
<send>
check (CallPlugin ("99c74b2685e425d3b6ed6a7d", "set_line_type", "ignore"))
</send>
</trigger>
<!-- Cyan lines without quotes in them often are room names -->
<trigger
back_colour="8"
enabled="y"
keep_evaluating="y"
match="*"
match_back_colour="y"
match_bold="y"
match_inverse="y"
match_italic="y"
match_text_colour="y"
name="Room_Name"
send_to="12"
sequence="100"
text_colour="14"
>
<send>
if not string.match ("%1", "'") then
check (CallPlugin ("99c74b2685e425d3b6ed6a7d", "set_line_type", "room_name"))
end -- if line doesn't have a quote in it
</send>
</trigger>
<!-- Prompt line - extract the exits -->
<trigger
enabled="y"
keep_evaluating="y"
match="* Exits:*> "
name="Exits_Line"
send_to="12"
sequence="100"
>
<send>
function callmap (...)
check (CallPlugin ("99c74b2685e425d3b6ed6a7d", unpack ({ ... }) ))
end -- callmap
callmap ("set_line_type", "prompt") -- this is a prompt
callmap ("do_not_deduce_line_type", "prompt") -- so don't deduce prompts
-- set the exits to be the exit letters with a space between them
callmap ("set_line_type_contents", "exits", string.gsub ("%2", "%a", "%%1 "))
</send>
</trigger>
</triggers>
Envy (Kallindor)
(Diku based)
Configuration
mapper config when_to_draw exits
mapper config activate_description_after_exits No
mapper config activate_description_after_room_name No
mapper config add_newline_to_prompt No
mapper config blank_line_terminates_line_type No
mapper config exits_on_room_name No
mapper config include_exits_in_hash Yes
mapper config exits_is_single_line Yes
mapper config prompt_is_single_line Yes
mapper config exit_lines_start_with_direction No
mapper config sort_exits No
Notes
To help the mapper learn the room names and exits lines the following triggers should be added to your world file.
See http://www.gammon.com.au/pasting for how to copy from below and paste into your world file.
<triggers>
<!-- Room names -->
<trigger
back_colour="8"
bold="y"
enabled="y"
keep_evaluating="y"
match="*"
match_back_colour="y"
match_bold="y"
match_inverse="y"
match_italic="y"
match_text_colour="y"
name="Room_name_line"
send_to="12"
sequence="100"
text_colour="15"
>
<send>
function callmap (...)
check (CallPlugin ("99c74b2685e425d3b6ed6a7d", unpack ({ ... }) ))
end -- callmap
callmap ("set_line_type", "room_name") -- this is a room name (bold white on black)
callmap ("do_not_deduce_line_type", "room_name") -- so don't try to deduce them
callmap ("deduce_line_type", "description") -- descriptions follow room names
</send>
</trigger>
<!-- Exits -->
<trigger
back_colour="8"
bold="y"
enabled="y"
keep_evaluating="y"
match="[Exits: *]"
match_back_colour="y"
match_bold="y"
match_inverse="y"
match_italic="y"
match_text_colour="y"
name="Exits_Line"
send_to="12"
sequence="100"
text_colour="14"
>
<send>
function callmap (...)
check (CallPlugin ("99c74b2685e425d3b6ed6a7d", unpack ({ ... }) ))
end -- callmap
callmap ("set_line_type", "exits", "%1") -- this is an exits line (bold cyan on black)
callmap ("do_not_deduce_line_type", "exits") -- so don't try to deduce them
callmap ("do_not_deduce_line_type", "description") -- no descriptions until a room name
</send>
</trigger>
</triggers>
GodWars (Dark Skies)
The GodWars MUDs were rather challenging because they didn’t always have room descriptions, and without room descriptions you cannot hash up the description to get a room ID.
In the case of Dark Skies, you could put the room name in the prompt, so I hashed up the room name and exits, in the hope that it would give a unique hash most of the time.
Put exits and room name into your prompt, and then activate the custom prompt.
prompt <%h/%Hhp %m/%Mm %v/%vmv [%E] [%r]>%l
prompt on
config -map
config +telnetga
In MUSHclient activate world configuration -> Appearance -> Output -> “Convert IAC EOR/GA to new line”. That makes prompt lines have a newline.
Configuration
mapper config when_to_draw prompt
mapper config activate_description_after_exits No
mapper config activate_description_after_room_name No
mapper config add_newline_to_prompt Yes
mapper config blank_line_terminates_line_type No
mapper config exits_on_room_name No
mapper config include_exits_in_hash Yes
mapper config exits_is_single_line No
mapper config prompt_is_single_line Yes
mapper config exit_lines_start_with_direction No
mapper config sort_exits No
Notes
To help the mapper learn the room names and exits lines the following triggers should be added to your world file.
See http://www.gammon.com.au/pasting for how to copy from below and paste into your world file.
<triggers>
<!-- Prompt line -->
<trigger
back_colour="8"
enabled="y"
match="<* [*] [*]>*"
match_back_colour="y"
match_bold="y"
match_inverse="y"
match_italic="y"
match_text_colour="y"
name="Prompt_Line"
send_to="12"
sequence="100"
text_colour="15"
>
<send>
function callmap (...)
check (CallPlugin ("99c74b2685e425d3b6ed6a7d", unpack ({ ... }) ))
end -- callmap
callmap ("set_line_type", "prompt") -- this is a prompt line
callmap ("do_not_deduce_line_type", "prompt") -- so don't try to deduce them
callmap ("do_not_deduce_line_type", "description") -- no descriptions after prompts
callmap ("set_uid", "%2/%3") -- Exits and room name hashed will be the UID
callmap ("set_line_type_contents", "room_name", "%3") -- set the room name
-- set the exits to be the exit letters with a space between them
callmap ("set_line_type_contents", "exits", string.gsub ("%2", "%a", "%%1 "))
</send>
</trigger>
<!-- Exits line -->
<trigger
back_colour="8"
bold="y"
enabled="y"
keep_evaluating="y"
match="[Exits: *]"
match_back_colour="y"
match_bold="y"
match_inverse="y"
match_italic="y"
match_text_colour="y"
send_to="12"
sequence="100"
text_colour="9"
>
<send>
function callmap (...)
check (CallPlugin ("99c74b2685e425d3b6ed6a7d", unpack ({ ... }) ))
end -- callmap
callmap ("set_line_type", "exits", "%1") -- this is an exits line (bold cyan on black)
callmap ("do_not_deduce_line_type", "exits") -- so don't try to deduce them
callmap ("deduce_line_type", "description") -- descriptions after exits
</send>
</trigger>
</triggers>
LP (3Scapes)
Configuration
mapper config when_to_draw exits
mapper config activate_description_after_exits No
mapper config activate_description_after_room_name No
mapper config add_newline_to_prompt Yes
mapper config blank_line_terminates_line_type No
mapper config exits_on_room_name No
mapper config include_exits_in_hash Yes
mapper config exits_is_single_line Yes
mapper config prompt_is_single_line Yes
mapper config exit_lines_start_with_direction No
mapper config sort_exits No
Notes
To help the mapper learn the room names and exits lines the following triggers should be added to your world file.
See http://www.gammon.com.au/pasting for how to copy from below and paste into your world file.
<triggers>
<!-- Description lines seem to be yellow on black -->
<trigger
back_colour="8"
enabled="y"
keep_evaluating="y"
match="*"
match_back_colour="y"
match_bold="y"
match_inverse="y"
match_italic="y"
match_text_colour="y"
name="Description"
send_to="12"
sequence="100"
text_colour="11"
>
<send>
function callmap (...)
check (CallPlugin ("99c74b2685e425d3b6ed6a7d", unpack ({ ... }) ))
end -- callmap
if description_ok then
callmap ("set_line_type", "description")
end -- if
</send>
</trigger>
<!-- Room names have a minimap on the right and exits in brackets
The regexp allows for the minimap symbols, you may be able to change this
if you can turn the minimap off.
-->
<trigger
enabled="y"
keep_evaluating="y"
match="^(.*?) \([a-zA-Z,]+\)\s+[NSEW]? \-[-UD]\-\*\-[-UD]\-*"
name="Room_name"
send_to="12"
sequence="100"
regexp="y"
>
<send>
function callmap (...)
check (CallPlugin ("99c74b2685e425d3b6ed6a7d", unpack ({ ... }) ))
end -- callmap
callmap ("set_line_type", "room_name" , "%1") -- this is a room name
callmap ("do_not_deduce_line_type", "room_name") -- so don't try to deduce them
callmap ("deduce_line_type", "description") -- descriptions after room names
description_ok = true
</send>
</trigger>
<!-- Prompt (simple prompt of "> "). Need to set this so it isn't thought of as "can't move" -->
<trigger
back_colour="8"
enabled="y"
match="> "
match_back_colour="y"
match_bold="y"
match_inverse="y"
match_italic="y"
match_text_colour="y"
name="Prompt_Line"
regexp="y"
send_to="12"
sequence="100"
text_colour="15"
>
<send>
function callmap (...)
check (CallPlugin ("99c74b2685e425d3b6ed6a7d", unpack ({ ... }) ))
end -- callmap
callmap ("set_line_type", "prompt") -- this is a prompt
callmap ("do_not_deduce_line_type", "prompt") -- so don't deduce prompts
</send>
</trigger>
<!-- Exits line -->
<trigger
back_colour="8"
bold="y"
enabled="y"
keep_evaluating="y"
match="^ There (is|are) [a-z]+ obvious exits?: (?<exits>.*)"
match_back_colour="y"
match_bold="y"
match_inverse="y"
match_italic="y"
match_text_colour="y"
name="Exits_Line"
regexp="y"
send_to="12"
sequence="100"
text_colour="11"
>
<send>
function callmap (...)
check (CallPlugin ("99c74b2685e425d3b6ed6a7d", unpack ({ ... }) ))
end -- callmap
callmap ("set_line_type", "exits", "%<exits>") -- this is an exits line
callmap ("do_not_deduce_line_type", "exits") -- so don't try to deduce them
callmap ("do_not_deduce_line_type", "description") -- no descriptions after exits
description_ok = false
</send>
</trigger>
<!-- A line with 60 spaces is part of the minimap, so it isn't a description or "cannot move" line -->
<trigger
enabled="y"
match="^ {60,}"
name="Map_line"
regexp="y"
send_to="12"
sequence="100"
>
<send>
function callmap (...)
check (CallPlugin ("99c74b2685e425d3b6ed6a7d", unpack ({ ... }) ))
end -- callmap
callmap ("set_not_line_type", "description") -- this isn't a description
callmap ("set_not_line_type", "cannot_move") -- nor a "cannot move" line
</send>
</trigger>
</triggers>
MOO (Sindome)
Server configuration
@ansi 256
As expected, this didn’t map very well. The exits lines were fairly free-format and easily confused with description lines.
Configuration
mapper config when_to_draw exits
mapper config activate_description_after_exits No
mapper config activate_description_after_room_name No
mapper config add_newline_to_prompt No
mapper config blank_line_terminates_line_type No
mapper config exits_on_room_name No
mapper config include_exits_in_hash Yes
mapper config exits_is_single_line Yes
mapper config prompt_is_single_line Yes
mapper config exit_lines_start_with_direction No
mapper config sort_exits No
Notes
To help the mapper learn the room names and exits lines the following triggers should be added to your world file.
See http://www.gammon.com.au/pasting for how to copy from below and paste into your world file.
<triggers>
<!-- Room name: red on black -->
<trigger
enabled="y"
keep_evaluating="y"
match="*"
name="Room_name"
send_to="14"
sequence="100"
>
<send>
function callmap (...)
check (CallPlugin ("99c74b2685e425d3b6ed6a7d", unpack ({ ... }) ))
end -- callmap
if TriggerStyleRuns [1].textcolour == ColourNameToRGB ('red') and
TriggerStyleRuns [1].backcolour == ColourNameToRGB ('black') then
callmap ("set_line_type", "room_name") -- this is a room name
callmap ("do_not_deduce_line_type", "room_name") -- so don't try to deduce them
callmap ("deduce_line_type", "description") -- descriptions after room names
end -- if correct colour
</send>
</trigger>
<!-- Ignore lines telling you where you moved to -->
<trigger
back_colour="8"
enabled="y"
match="^You (head|make your way) (.*?)$"
match_back_colour="y"
match_text_colour="y"
name="Movement_line"
regexp="y"
send_to="12"
sequence="100"
text_colour="15"
>
<send>
function callmap (...)
check (CallPlugin ("99c74b2685e425d3b6ed6a7d", unpack ({ ... }) ))
end -- callmap
callmap ("set_line_type", "ignore")
</send>
</trigger>
</triggers>
MUCK (Winter’s Oasis)
As expected, MUCK/MUSH/MUX games similar to this are not suitable for the mapper. They use non-compass directions like:
Obvious Exits: (T) Tutorial, (IM) IC Museum, (ML) MUCK Learning Lab,
(O) OOC Nexus
A mapper which, by its nature, is designed to take you north/south/east/west is not going to map such locations at all efficiently.
This is not a criticism of the MUCK, it is just a fact of life. MUCK/MUSH/MUX games tend to be more like sandbox worlds, where you can build things, and the output can vary wildly depending on player input.
MUSH (M*U*S*H)
PennMUSH seemed a bit more hopeful than Winter’s Oasis (above) as it actually had compass directions listed as room exits. However I was stymied a bit because there was no prompt as such, and without a prompt line there is nothing to trigger drawing the room, since you don’t know how many exits there are until you get a non-exits line, and you don’t get that if things are quiet.
There was talk in the help files about turning on IAC EOR/GA (GOAHEAD) but I couldn’t see how to do that for my character.
MUX (Maelstrom Earth)
As expected, MUCK/MUSH/MUX games similar to this are not suitable for the mapper. They use non-compass directions like:
Meeting Rooms <MR> Free Code Room <FCR> Quiet Room <QR>
IC Nexus <IC> Chargen <CG> RP Suites <RP>
A mapper which, by its nature, is designed to take you north/south/east/west is not going to map such locations at all efficiently.
This is not a criticism of the MUX, it is just a fact of life. MUCK/MUSH/MUX games tend to be more like sandbox worlds, where you can build things, and the output can vary wildly depending on player input.
Merc (Avatar MUD)
(Diku based)
Configuration
mapper config when_to_draw description
mapper config activate_description_after_exits No
mapper config activate_description_after_room_name No
mapper config add_newline_to_prompt No
mapper config blank_line_terminates_line_type No
mapper config exits_on_room_name No
mapper config include_exits_in_hash Yes
mapper config exits_is_single_line Yes
mapper config prompt_is_single_line Yes
mapper config exit_lines_start_with_direction No
mapper config sort_exits No
Notes
To help the mapper learn the room names and exits lines the following triggers should be added to your world file.
See http://www.gammon.com.au/pasting for how to copy from below and paste into your world file.
<triggers>
<!-- Cyan on black lines are not descriptions but rather things in the room -->
<trigger
back_colour="8"
enabled="y"
keep_evaluating="y"
match="*"
match_back_colour="y"
match_bold="y"
match_inverse="y"
match_italic="y"
match_text_colour="y"
send_to="12"
sequence="100"
text_colour="14"
>
<send>
function callmap (...)
check (CallPlugin ("99c74b2685e425d3b6ed6a7d", unpack ({ ... }) ))
end -- callmap
callmap ("set_not_line_type", "description") -- this isn't a description
</send>
</trigger>
<!-- Prompt lines -->
<trigger
enabled="y"
keep_evaluating="y"
match="<*>"
name="Prompt_Line"
send_to="12"
sequence="100"
>
<send>
function callmap (...)
check (CallPlugin ("99c74b2685e425d3b6ed6a7d", unpack ({ ... }) ))
end -- callmap
callmap ("set_line_type", "prompt")
callmap ("do_not_deduce_line_type", "prompt")
callmap ("do_not_deduce_line_type", "description")
</send>
</trigger>
<!-- Exits lines -->
<trigger
back_colour="8"
enabled="y"
keep_evaluating="y"
match="[Exits: *]"
match_back_colour="y"
match_bold="y"
match_inverse="y"
match_italic="y"
match_text_colour="y"
name="Exits_Line"
send_to="12"
sequence="100"
text_colour="15"
>
<send>
function callmap (...)
check (CallPlugin ("99c74b2685e425d3b6ed6a7d", unpack ({ ... }) ))
end -- callmap
callmap ("set_line_type", "exits", "%1")
callmap ("do_not_deduce_line_type", "exits")
callmap ("do_not_deduce_line_type", "room_name")
callmap ("deduce_line_type", "description")
-- backtrack and pick up the room name (the line before the exits)
local last_line = GetLinesInBufferCount ()
-- go back 10 lines looking for an output line
for line = last_line - 1, last_line - 10, -1 do
if GetLineInfo (line, 4) or GetLineInfo (line, 5) then
-- note or input line, ignore it
else
-- the room name is the previous line to the description
callmap ("set_line_type_contents", "room_name", GetLineInfo (line, 1) )
break
end -- output line
end -- for
</send>
</trigger>
</triggers>
Mordor (Mordor)
I didn’t have much luck with Mordor, because they seemed to have an outdoor map without room descriptions.
Possibly with more knowledge of how to configure the MUD it could be got to work. I had reasonable success mapping the town.
Example rooms I was able to map:
C3BC Needful Things (Wedding)
EE84 North End of the Galleria (Wedding)
556C Nosin's Finest Weapons (Trading Village)
0E58 Nuryan's Tailor Shop (Trading Village)
FF8B Rings and Things (Wedding)
0C27 Room of Healing (Trading Village)
5653 South End of the Galleria (Wedding)
2A6E Sweet Delights and Indulgences (Trading Village)
F4DC The Communal Storage Area (Trading Village)
CC92 the market square.
2C9E The Reception Hall (Wedding)
BED0 The Tower Exit (MORDOR School)
603D The Village Fountain (Trading Village)
0F73 The Village General Goods (Trading Village)
EFBF The Village Inn and Tavern (Trading Village)
EAF3 Town Meeting Hall (Trading Village)
9426 Truly Scrumptious (Wedding)
Rom (Prophecy)
(Heavily modified ROM)
Configuration
mapper config when_to_draw prompt
mapper config activate_description_after_exits No
mapper config activate_description_after_room_name No
mapper config add_newline_to_prompt No
mapper config blank_line_terminates_line_type Yes
mapper config exits_on_room_name No
mapper config include_exits_in_hash Yes
mapper config exits_is_single_line Yes
mapper config prompt_is_single_line Yes
mapper config exit_lines_start_with_direction No
Prompt
Set your prompt to show the room name in square brackets, like this:
prompt <%h/%Hhp %m/%Mm %v/%Vmv %Xtnl [%r] >%c%c
You can add colours, but the trigger expects the prompt to look like that. If you want a different prompt, amend the trigger (below). The important things are:
- That the trigger actually fires (temporarily set it to recolour the line to check that)
- That the room name is captured as wildcard #1
Triggers
To help the mapper learn the room name the following trigger should be added to your world file.
See http://www.gammon.com.au/pasting for how to copy from below and paste into your world file.
<!-- All lines - suppress lines that are not descriptions -->
<triggers>
<trigger
enabled="y"
keep_evaluating="y"
match="*"
name="All_lines"
send_to="12"
sequence="1"
>
<send>
-- after exits we don't have descriptions
if have_exits then
check (CallPlugin ("99c74b2685e425d3b6ed6a7d", "set_not_line_type", "description"))
end -- if
</send>
</trigger>
<!-- Exits -->
<trigger
enabled="y"
keep_evaluating="y"
match="[Exits: *]"
name="Exits_line"
send_to="12"
sequence="100"
>
<send>
check (CallPlugin ("99c74b2685e425d3b6ed6a7d", "set_line_type", "exits", "%1"))
check (CallPlugin ("99c74b2685e425d3b6ed6a7d", "do_not_deduce_line_type", "exits"))
have_exits = true
</send>
</trigger>
<!-- Prompt -->
<trigger
enabled="y"
match="^<\d+/\d+hp \d+/\d+m \d+/\d+mv \d+tnl \[(.*)\] >"
name="Prompt_line"
regexp="y"
send_to="12"
sequence="100"
>
<send>
function callmap (...)
check (CallPlugin ("99c74b2685e425d3b6ed6a7d", unpack ({ ... }) ))
end -- callmap
callmap ("set_line_type", "prompt") -- this is a prompt
callmap ("do_not_deduce_line_type", "prompt") -- so don't deduce prompts
callmap ("set_line_type_contents", "room_name", "%1") -- it also has the room name on it
callmap ("do_not_deduce_line_type", "room_name") -- so don't deduce room names
have_exits = false
</send>
</trigger>
</triggers>
Training
Don’t bother training exit lines and prompts, as the triggers will override that. Train descriptions, and “do not move” lines.
Rot
(Not tested yet)
SWR
(Not tested yet)
SMAUG
(Not tested yet, however see Stock SmaugFUSS below)
Stock SmaugFUSS
Configuration
mapper config when_to_draw exits
mapper config activate_description_after_exits No
mapper config activate_description_after_room_name No
mapper config add_newline_to_prompt No
mapper config blank_line_terminates_line_type No
mapper config exits_on_room_name No
mapper config include_exits_in_hash Yes
mapper config exits_is_single_line No
mapper config exit_lines_start_with_direction No
TBA
(Not tested yet)
VME
(Not tested yet)
|