Source code for evennia.contrib.grid.xyzgrid.example

"""
Example xymaps to use with the XYZgrid contrib. Build outside of the game using
the `evennia xyzgrid` launcher command.

First add the launcher extension in your mygame/server/conf/settings.py:

    EXTRA_LAUNCHER_COMMANDS['xyzgrid'] = 'evennia.contrib.grid.xyzgrid.launchcmd.xyzcommand'

Then

    evennia xyzgrid init
    evennia xyzgrid add evennia.contrib.grid.xyzgrid.map_example
    evennia xyzgrid build




"""

from evennia.contrib.grid.xyzgrid import xymap_legend

# default prototype parent. It's important that
# the typeclass inherits from the XYZRoom (or XYZExit)
# if adding the evennia.contrib.grid.xyzgrid.prototypes to
# settings.PROTOTYPE_MODULES, one could just set the
# prototype_parent to 'xyz_room' and 'xyz_exit' here
# instead.

ROOM_PARENT = {
    "key": "An empty room",
    "prototype_key": "xyz_exit_prototype",
    # "prototype_parent": "xyz_room",
    "typeclass": "evennia.contrib.grid.xyzgrid.xyzroom.XYZRoom",
    "desc": "An empty room.",
}

EXIT_PARENT = {
    "prototype_key": "xyz_exit_prototype",
    # "prototype_parent": "xyz_exit",
    "typeclass": "evennia.contrib.grid.xyzgrid.xyzroom.XYZExit",
    "desc": "A path to the next location.",
}


# ---------------------------------------- map1
# The large tree
#
# this exemplifies the various map symbols
# but is not heavily prototyped

MAP1 = r"""
                       1
 + 0 1 2 3 4 5 6 7 8 9 0

 8   #-------#-#-------I
      \               /
 7     #-#---#     t-#
       |\    |
 6   #i#-#b--#-t
       |     |
 5     o-#---#
          \ /
 4     o---#-#
      /    d
 3   #-----+-------#
           |       d
 2         |       |
           v       u
 1         #---#>#-#
          /
 0       #-T

 + 0 1 2 3 4 5 6 7 8 9 0
                       1
"""


[docs]class TransitionToCave(xymap_legend.TransitionMapNode): """ A transition from 'the large tree' to 'the small cave' map. This node is never spawned into a room but only acts as a target for finding the exit's destination. """ symbol = "T" target_map_xyz = (1, 0, "the small cave")
# extends the default legend LEGEND_MAP1 = {"T": TransitionToCave} # link coordinates to rooms PROTOTYPES_MAP1 = { # node/room prototypes (3, 0): { "key": "Dungeon Entrance", "desc": "To the east, a narrow opening leads into darkness.", }, (4, 1): { "key": "Under the foilage of a giant tree", "desc": "High above the branches of a giant tree blocks out the sunlight. A slide " "leading down from the upper branches ends here.", }, (4, 4): { "key": "The slide", "desc": "A slide leads down to the ground from here. It looks like a one-way trip.", }, (6, 1): { "key": "Thorny path", "desc": "To the east is a pathway of thorns. If you get through, you don't think you'll be " "able to get back here the same way.", }, (8, 1): {"key": "By a large tree", "desc": "You are standing at the root of a great tree."}, (8, 3): {"key": "At the top of the tree", "desc": "You are at the top of the tree."}, (3, 7): { "key": "Dense foilage", "desc": "The foilage to the east is extra dense. It will take forever to get through it.", }, (5, 6): { "key": "On a huge branch", "desc": "To the east is a glowing light, may be a teleporter to a higher branch.", }, (9, 7): { "key": "On an enormous branch", "desc": "To the west is a glowing light. It may be a teleporter to a lower branch.", }, (10, 8): { "key": "A gorgeous view", "desc": "The view from here is breathtaking, showing the forest stretching far and wide.", }, # default rooms ("*", "*"): { "key": "Among the branches of a giant tree", "desc": "These branches are wide enough to easily walk on. There's green all around.", }, # directional prototypes (3, 0, "e"): {"desc": "A dark passage into the underworld."}, } for key, prot in PROTOTYPES_MAP1.items(): if len(key) == 2: # we don't want to give exits the room typeclass! prot["prototype_parent"] = ROOM_PARENT else: prot["prototype_parent"] = EXIT_PARENT XYMAP_DATA_MAP1 = { "zcoord": "the large tree", "map": MAP1, "legend": LEGEND_MAP1, "prototypes": PROTOTYPES_MAP1, } # -------------------------------------- map2 # The small cave # this gives prototypes for every room MAP2 = r""" + 0 1 2 3 3 #-#-# |x| 2 #-#-# | \ 1 #---# | / 0 T-#-# + 0 1 2 3 """ # custom map node
[docs]class TransitionToLargeTree(xymap_legend.TransitionMapNode): """ A transition from 'the small cave' to 'the large tree' map. This node is never spawned into a room by only acts as a target for finding the exit's destination. """ symbol = "T" target_map_xyz = (3, 0, "the large tree")
# this extends the default legend (that defines #,-+ etc) LEGEND_MAP2 = {"T": TransitionToLargeTree} # prototypes for specific locations PROTOTYPES_MAP2 = { # node/rooms prototype overrides (1, 0): { "key": "The entrance", "desc": "This is the entrance to a small cave leading into the ground. " "Light sifts in from the outside, while cavernous passages disappear " "into darkness.", }, (2, 0): { "key": "A gruesome sight.", "desc": "Something was killed here recently. The smell is unbearable.", }, (1, 1): { "key": "A dark pathway", "desc": "The path splits three ways here. To the north a faint light can be seen.", }, (3, 2): { "key": "Stagnant water", "desc": "A pool of stagnant, black water dominates this small chamber. To the nortwest " "a faint light can be seen.", }, (0, 2): {"key": "A dark alcove", "desc": "This alcove is empty."}, (1, 2): { "key": "South-west corner of the atrium", "desc": "Sunlight sifts down into a large underground chamber. Weeds and grass sprout " "between the stones.", }, (2, 2): { "key": "South-east corner of the atrium", "desc": "Sunlight sifts down into a large underground chamber. Weeds and grass sprout " "between the stones.", }, (1, 3): { "key": "North-west corner of the atrium", "desc": "Sunlight sifts down into a large underground chamber. Weeds and grass sprout " "between the stones.", }, (2, 3): { "key": "North-east corner of the atrium", "desc": "Sunlight sifts down into a large underground chamber. Weeds and grass sprout " "between the stones. To the east is a dark passage.", }, (3, 3): { "key": "Craggy crevice", "desc": "This is the deepest part of the dungeon. The path shrinks away and there " "is no way to continue deeper.", }, # default fallback for undefined nodes ("*", "*"): {"key": "A dark room", "desc": "A dark, but empty, room."}, # directional prototypes (1, 0, "w"): {"desc": "A narrow path to the fresh air of the outside world."}, # directional fallbacks for unset directions ("*", "*", "*"): {"desc": "A dark passage"}, } # this is required by the prototypes, but we add it all at once so we don't # need to add it to every line above for key, prot in PROTOTYPES_MAP2.items(): if len(key) == 2: # we don't want to give exits the room typeclass! prot["prototype_parent"] = ROOM_PARENT else: prot["prototype_parent"] = EXIT_PARENT XYMAP_DATA_MAP2 = { "map": MAP2, "zcoord": "the small cave", "legend": LEGEND_MAP2, "prototypes": PROTOTYPES_MAP2, "options": {"map_visual_range": 1, "map_mode": "scan"}, } # This is read by the parser XYMAP_DATA_LIST = [XYMAP_DATA_MAP1, XYMAP_DATA_MAP2]