Creating Map Zones - Dungeons-of-Kathallion/Bane-Of-Wargs GitHub Wiki

Introduction

Map zones are sort of places, a thing that regroups different map points into a single 'zone'. They can be viewed as a structure (like a village, a forge, an hostel, a castle...) or a specific 'biome'. Map zones are used to differentiate different map points from others, creating regions in the map. There're many types of map zones; a few one who're interactive and all the others who're just here to add some variety. In this wiki page you'll learn about every type of map zone, their specificity and how you define them in the zone.yaml data file, which is the file where map zones are located and defined.

Note that it's recommended to check the Map Zones Representatives Characters wiki page for additional knowledge.

Explanation

The only zone types who change of yaml keys, are the interactive ones such as villages, hostels, forges, blacksmiths, churches and finally castles. Every other zone types (that you'll find at the Map Zones Representatives Characters wiki page) defines the same. Here's a little index where you'll easily access to every zone type definition:

Generic Zones

<zone id>:
  name: <zone displayed name(str)>
  description: <zone description(str)>
  type: <zone type(str)>
  map:
    map full: |  # the vanilla template but you can use anyone you'd like
      x__________x
      |          |
      |          |
      |          |
      |          |
      x__________x
    map raw: |  # the vanilla template but you can use anyone you'd like
      x__________x  # the map raw key isn't required, it's just to keep
      |          |  # a clear map without the yaml data color codes
      |          |  # that're in the map full key
      |          |
      |          |
      x__________x
  enemy spawning: <enemy list id(str)>  # not required
  • name // here you'll enter the display name of the map zone.
  • description // here you'll enter a clear and concise description of the map zone that'll be displayed in the player's diary.
  • type // here you'll enter the map zone type. Find every possible types at the Map Zones Representatives Characters wiki page.
  • map
    • map full // here you'll enter a multi-string that is the map zone representative ASCII art-image. This can contain yaml data color codes. Find a complete guide to map zone ASCII art creation here.
    • map raw // this field is used in the vanilla game data to stores the map ASCII art without the yaml data color codes. This field isn't required.
  • enemy spawning // this determines which enemy list to spawn at night when the player meets an enemy. This field isn't required: if you don't specify it, it's by the default the 'generic' enemy list id which'll be chosen.

Villages

<zone id>:
  name: <zone displayed name(str)>
  description: <zone description(str)>
  type: "village"
  map:
    map full: |  # the vanilla template but you can use anyone you'd like
      x__________x
      |          |
      |          |
      |          |
      |          |
      x__________x
    map raw: |  # the vanilla template but you can use anyone you'd like
      x__________x  # the map raw key isn't required, it's just to keep
      |          |  # a clear map without the yaml data color codes
      |          |  # that're in the map full key
      |          |
      |          |
      x__________x
  news: <texts(list)>
  content:
    hostels: <map zones id(list)>  # put "- None" for none
    blacksmiths: <map zones id(list)>  # put "- None" for none
    forges: <map zones id(list)>  # put "- None" for none
    stables: <map zones id(list)>  # put "- None" for none
    churches: <map zones id(list)>  # put "- None" for none
    groceries: <map zones id(list)>  # put "- None" for none
    harbors: <map zones id(list)>  # put "- None" for none
  • name // here you'll enter the display name of the map zone.
  • description // here you'll enter a clear and concise description of the map zone that'll be displayed in the player's diary.
  • type // here you'll enter the map zone type: village.
  • map
    • map full // here you'll enter a multi-string that is the map zone representative ASCII art-image. This can contain yaml data color codes.
    • map raw // this field is used in the vanilla game data to stores the map ASCII art without the yaml data color codes. This field isn't required.
  • news // a list of strings that gets displayed in the UI, as news.
  • content
    • hostels // the list of map zones that are hostels, that're in the village. Put "- None" for none.
    • blacksmiths // the list of map zones that are blacksmiths, that're in the village. Put "- None" for none.
    • forges // the list of map zones that are forges, that're in the village. Put "- None" for none.
    • stables // the list of map zones that are stables, that're in the village. Put "- None" for none.
    • churches // the list of map zones that are churches, that're in the village. Put "- None" for none.
    • groceries // the list of map zones that are groceries, that're in the village. Put "- None" for none.
    • groceries // the list of map zones that are harbors, that're in the village. Put "- None" for none.

Hostels

<zone id>:
  name: <zone displayed name(str)>
  description: <zone description(str)>
  type: "hostel"
  map:
    map full: |  # the vanilla template but you can use anyone you'd like
      x__________x
      |          |
      |          |
      |          |
      |          |
      x__________x
    map raw: |  # the vanilla template but you can use anyone you'd like
      x__________x  # the map raw key isn't required, it's just to keep
      |          |  # a clear map without the yaml data color codes
      |          |  # that're in the map full key
      |          |
      |          |
      x__________x
  cost value: <coefficient(float)>
  sleep gold: <sleep payment(float)>
  news: <texts(list)>
  sells:
    drinks: <drinks(list)>  # put "- None" for none
    items: <items(list)>  # put "- None" for none
  buys:
    items: <items(list)>  # put "- None" for none
  discounts:
    time space: <game days(float)>
    chance: <percentage(float)>
    discount:
      max dropoff: <percentage(float)>
      min dropoff: <percentage(float)>
  • name // here you'll enter the display name of the map zone.
  • description // here you'll enter a clear and concise description of the map zone that'll be displayed in the player's diary.
  • type // here you'll enter the map zone type: hostel.
  • map
    • map full // here you'll enter a multi-string that is the map zone representative ASCII art-image. This can contain yaml data color codes.
    • map raw // this field is used in the vanilla game data to stores the map ASCII art without the yaml data color codes. This field isn't required.
  • cost value // the cost value of this hostel.
  • sleep gold // how much gold the player pays to sleep here.
  • news // a list of strings that gets displayed in the UI, as news.
  • sells
    • drinks // the list of drinks id that're sold at this hostel. Put "- None" for none.
    • items // the list of items id that're bought by the player at this hostel. Put "- None" for none.
  • buys
    • items // the list of items id that're sold by the player at this hostel. Put "- None" for none.
  • discounts
    • time space // this floating number signifies that a discount have a chance to possibly happen every time space game days.
    • chance // this is a percentage (floating number between 0 and 1), that determines the chance a discount has to happen every time space days.
    • discount
      • max dropoff // the maximum dropoff percentage that can possibly happen (floating number between 0 and 1 ex: .35 means a -35% dropoff at maximum). Note that you need to take in count the map zone cost value coefficient.
      • min dropoff // the minimum dropoff percentage that can possibly happen (floating number between 0 and 1 ex: .35 means a -35% dropoff at minimum). Note that you need to take in count the map zone cost value coefficient.

Forges

<zone id>:
  name: <zone displayed name(str)>
  description: <zone description(str)>
  type: "forge"
  map:
    map full: |  # the vanilla template but you can use anyone you'd like
      x__________x
      |          |
      |          |
      |          |
      |          |
      x__________x
    map raw: |  # the vanilla template but you can use anyone you'd like
      x__________x  # the map raw key isn't required, it's just to keep
      |          |  # a clear map without the yaml data color codes
      |          |  # that're in the map full key
      |          |
      |          |
      x__________x
  cost value: <coefficient(float)>
  news: <texts(list)>
  forge:
    buys: <items id(list)>  # put "- None" for none
    sells: <items id(list)>  # put "- None" for none
  discounts:
    time space: <game days(float)>
    chance: <percentage(float)>
    discount:
      max dropoff: <percentage(float)>
      min dropoff: <percentage(float)>
  • name // here you'll enter the display name of the map zone.
  • description // here you'll enter a clear and concise description of the map zone that'll be displayed in the player's diary.
  • type // here you'll enter the map zone type: forge.
  • map
    • map full // here you'll enter a multi-string that is the map zone representative ASCII art-image. This can contain yaml data color codes.
    • map raw // this field is used in the vanilla game data to stores the map ASCII art without the yaml data color codes. This field isn't required.
  • cost value // the cost value of this forge.
  • news // a list of strings that gets displayed in the UI, as news.
  • forge
    • buys // the list of items id that're sold by the player at this forge. Put "- None" for none.
    • sells // the list of items id that're bought by the player at this forge. Put "- None" for none.
  • discounts
    • time space // this floating number signifies that a discount have a chance to possibly happen every time space game days.
    • chance // this is a percentage (floating number between 0 and 1), that determines the chance a discount has to happen every time space days.
    • discount
      • max dropoff // the maximum dropoff percentage that can possibly happen (floating number between 0 and 1 ex: .35 means a -35% dropoff at maximum). Note that you need to take in count the map zone cost value coefficient.
      • min dropoff // the minimum dropoff percentage that can possibly happen (floating number between 0 and 1 ex: .35 means a -35% dropoff at minimum). Note that you need to take in count the map zone cost value coefficient.

Stables

<zone id>:
  name: <zone displayed name(str)>
  description: <zone description(str)>
  type: "stable"
  map:
    map full: |  # the vanilla template but you can use anyone you'd like
      x__________x
      |          |
      |          |
      |          |
      |          |
      x__________x
    map raw: |  # the vanilla template but you can use anyone you'd like
      x__________x  # the map raw key isn't required, it's just to keep
      |          |  # a clear map without the yaml data color codes
      |          |  # that're in the map full key
      |          |
      |          |
      x__________x
  cost value: <coefficient(float)>
  training gold: <gold payment(float)>
  deposit gold: <gold payment(float)>
  news: <texts(list)>
  stable:
    sells:
      mounts: <mounts id(list)>  # put "- None" for none
      drinks: <drinks id(list)>  # put "- None" for none
      items: <items id(list)>  # put "- None" for none
    stables: <stable types(list)>
  discounts:
    time space: <game days(float)>
    chance: <percentage(float)>
    discount:
      max dropoff: <percentage(float)>
      min dropoff: <percentage(float)>
  • name // here you'll enter the display name of the map zone.
  • description // here you'll enter a clear and concise description of the map zone that'll be displayed in the player's diary.
  • type // here you'll enter the map zone type: stable.
  • map
    • map full // here you'll enter a multi-string that is the map zone representative ASCII art-image. This can contain yaml data color codes.
    • map raw // this field is used in the vanilla game data to stores the map ASCII art without the yaml data color codes. This field isn't required.
  • cost value // the cost value of this stable.
  • training gold // the amount of gold that's owed for training your mount here a whole game day. This can be lowered if there's a discount at this stable.
  • deposit gold // the amount of gold that's owed for depositing your mount here a whole game day. This can be lowered if there's a discount at this stable.
  • news // a list of strings that gets displayed in the UI, as news.
  • stable
    • sells
      • mounts // the list of mounts id that're sold at this stable. Put "- None" for none.
      • drinks // the list of drinks id that're sold at this stable. Put "- None" for none.
      • items // the list of items id that're sold at this stable. Put "- None" for none.
    • stables // this is the list of 'stable types', that this stable has to offer. Checked with the mount required stable key. Only mounts that've one of the string in this list will be able to be trained and deposited at this stable.
  • discounts
    • time space // this floating number signifies that a discount have a chance to possibly happen every time space game days.
    • chance // this is a percentage (floating number between 0 and 1), that determines the chance a discount has to happen every time space days.
    • discount
      • max dropoff // the maximum dropoff percentage that can possibly happen (floating number between 0 and 1 ex: .35 means a -35% dropoff at maximum). Note that you need to take in count the map zone cost value coefficient.
      • min dropoff // the minimum dropoff percentage that can possibly happen (floating number between 0 and 1 ex: .35 means a -35% dropoff at minimum). Note that you need to take in count the map zone cost value coefficient.

Blacksmiths

<zone id>:
  name: <zone displayed name(str)>
  description: <zone description(str)>
  type: "blacksmith"
  map:
    map full: |  # the vanilla template but you can use anyone you'd like
      x__________x
      |          |
      |          |
      |          |
      |          |
      x__________x
    map raw: |  # the vanilla template but you can use anyone you'd like
      x__________x  # the map raw key isn't required, it's just to keep
      |          |  # a clear map without the yaml data color codes
      |          |  # that're in the map full key
      |          |
      |          |
      x__________x
  cost value: <coefficient(float)>
  news: <texts(list)>
  blacksmith:
    buys: <items id(list)>  # put "- None" for none
    orders:  # put "- None" for none
      <item id>:
        gold: <payment(float)>
        time needed: <game days(float)>
        needed materials: <items id(list)>
  discounts:
    time space: <game days(float)>
    chance: <percentage(float)>
    discount:
      max dropoff: <percentage(float)>
      min dropoff: <percentage(float)>
  • name // here you'll enter the display name of the map zone.
  • description // here you'll enter a clear and concise description of the map zone that'll be displayed in the player's diary.
  • type // here you'll enter the map zone type: blacksmith.
  • map
    • map full // here you'll enter a multi-string that is the map zone representative ASCII art-image. This can contain yaml data color codes.
    • map raw // this field is used in the vanilla game data to stores the map ASCII art without the yaml data color codes. This field isn't required.
  • cost value // the cost value of this blacksmith.
  • news // a list of strings that gets displayed in the UI, as news.
  • blacksmith
    • buys // a list of item id, that're sold by the player at this blacksmith. Put "- None" for none.
    • orders // this directory contain directories that determines the equipment pieces that can be ordered at this blacksmith. Put "- None" for none.
      • <item id> // the id of the item that's ordered
        • gold // this is the gold payment when you order this equipment
        • time needed // the waiting time in game days, that must pass before being able to collect that order
        • needed materials // a list of item id, that're required to be owned by the player to order that piece of equipment. These items will be removed from the player's inventory.
  • discounts
    • time space // this floating number signifies that a discount have a chance to possibly happen every time space game days.
    • chance // this is a percentage (floating number between 0 and 1), that determines the chance a discount has to happen every time space days.
    • discount
      • max dropoff // the maximum dropoff percentage that can possibly happen (floating number between 0 and 1 ex: .35 means a -35% dropoff at maximum). Note that you need to take in count the map zone cost value coefficient.
      • min dropoff // the minimum dropoff percentage that can possibly happen (floating number between 0 and 1 ex: .35 means a -35% dropoff at minimum). Note that you need to take in count the map zone cost value coefficient.

Churches

<zone id>:
  name: <zone displayed name(str)>
  description: <zone description(str)>
  type: "church"
  map:
    map full: |  # the vanilla template but you can use anyone you'd like
      x__________x
      |          |
      |          |
      |          |
      |          |
      x__________x
    map raw: |  # the vanilla template but you can use anyone you'd like
      x__________x  # the map raw key isn't required, it's just to keep
      |          |  # a clear map without the yaml data color codes
      |          |  # that're in the map full key
      |          |
      |          |
      x__________x
  news: <texts(list)>
  rest hp restoring percentage: <percentage(float)>
  exp exchange max health percentage: <percentage(float)>
  • name // here you'll enter the display name of the map zone.
  • description // here you'll enter a clear and concise description of the map zone that'll be displayed in the player's diary.
  • type // here you'll enter the map zone type: church.
  • map
    • map full // here you'll enter a multi-string that is the map zone representative ASCII art-image. This can contain yaml data color codes.
    • map raw // this field is used in the vanilla game data to stores the map ASCII art without the yaml data color codes. This field isn't required.
  • news // a list of strings that gets displayed in the UI, as news.
  • rest hp restoring percentage // this is the percentage of hp the player'll get restored every time he rests at this church. (a value of .3 will make the player get added 35% of its max health to its health points player["health"] += player["max health"] * .3.
  • exp exchange max health percentage // when the player will exchange exp in this church, he will get added round(exp_given * exp_exchange_max_health_percentage) max health point. This value is the percentage of exp that's kept to determine how many max health points should be added to the player.

Grocery Stores

<zone id>:
  name: <zone displayed name(str)>
  description: <zone description(str)>
  type: "grocery"
  map:
    map full: |  # the vanilla template but you can use anyone you'd like
      x__________x
      |          |
      |          |
      |          |
      |          |
      x__________x
    map raw: |  # the vanilla template but you can use anyone you'd like
      x__________x  # the map raw key isn't required, it's just to keep
      |          |  # a clear map without the yaml data color codes
      |          |  # that're in the map full key
      |          |
      |          |
      x__________x
  cost value: <coefficient(float)>
  news: <texts(list)>
  items sold: <items id(list)>
  discounts:
    time space: <game days(float)>
    chance: <percentage(float)>
    discount:
      max dropoff: <percentage(float)>
      min dropoff: <percentage(float)>
  • name // here you'll enter the display name of the map zone.
  • description // here you'll enter a clear and concise description of the map zone that'll be displayed in the player's diary.
  • type // here you'll enter the map zone type: grocery.
  • map
    • map full // here you'll enter a multi-string that is the map zone representative ASCII art-image. This can contain yaml data color codes.
    • map raw // this field is used in the vanilla game data to stores the map ASCII art without the yaml data color codes. This field isn't required.
  • cost value // the cost value of this blacksmith.
  • news // a list of strings that gets displayed in the UI, as news.
  • items sold // this is the list of items id that can possibly get sold at this grocery store. Every day, the sold items get randomly picked up from this list to generate the sold items of that day.
  • discounts
    • time space // this floating number signifies that a discount have a chance to possibly happen every time space game days.
    • chance // this is a percentage (floating number between 0 and 1), that determines the chance a discount has to happen every time space days.
    • discount
      • max dropoff // the maximum dropoff percentage that can possibly happen (floating number between 0 and 1 ex: .35 means a -35% dropoff at maximum). Note that you need to take in count the map zone cost value coefficient.
      • min dropoff // the minimum dropoff percentage that can possibly happen (floating number between 0 and 1 ex: .35 means a -35% dropoff at minimum). Note that you need to take in count the map zone cost value coefficient.

Harbors

<zone id>:
  name: <zone displayed name(str)>
  description: <zone description(str)>
  type: "harbor"
  map:
    map full: |  # the vanilla template but you can use anyone you'd like
      x__________x
      |          |
      |          |
      |          |
      |          |
      x__________x
    map raw: |  # the vanilla template but you can use anyone you'd like
      x__________x  # the map raw key isn't required, it's just to keep
      |          |  # a clear map without the yaml data color codes
      |          |  # that're in the map full key
      |          |
      |          |
      x__________x
  news: <texts(list)>
  travels:
    <ticket name>:
      destination: <map point(int)>
      travel time: <seconds(float)>
      cost: <ticket payment(float)>
  discounts:
    time space: <game days(float)>
    chance: <percentage(float)>
    discount:
      max dropoff: <percentage(float)>
      min dropoff: <percentage(float)>
  • name // here you'll enter the display name of the map zone.
  • description // here you'll enter a clear and concise description of the map zone that'll be displayed in the player's diary.
  • type // here you'll enter the map zone type: harbor.
  • map
    • map full // here you'll enter a multi-string that is the map zone representative ASCII art-image. This can contain yaml data color codes.
    • map raw // this field is used in the vanilla game data to stores the map ASCII art without the yaml data color codes. This field isn't required.
  • news // a list of strings that gets displayed in the UI, as news.
  • travels // this is a dictionary of dictionaries, that determines the different tickets you can buy at this harbor and their destinations.
    • <ticket name> // the id of that dictionary is used as the name of the ticket in the UI.
      • destination // this is the map point digit were the player'll be transported.
      • travel time // this is the travel time in seconds.
      • cost // this is the gold payment of the ticket.
  • discounts
    • time space // this floating number signifies that a discount have a chance to possibly happen every time space game days.
    • chance // this is a percentage (floating number between 0 and 1), that determines the chance a discount has to happen every time space days.
    • discount
      • max dropoff // the maximum dropoff percentage that can possibly happen (floating number between 0 and 1 ex: .35 means a -35% dropoff at maximum). Note that you need to take in count the map zone cost value coefficient.
      • min dropoff // the minimum dropoff percentage that can possibly happen (floating number between 0 and 1 ex: .35 means a -35% dropoff at minimum). Note that you need to take in count the map zone cost value coefficient.

Dungeons

Hint: check the Gameplay Guide 'dungeons' header for an explanation of dungeons.

<zone id>:
  name: <zone displayed name(str)>
  description: <zone description(str)>
  type: "dungeon"
  map:
    map full: |  # the vanilla template but you can use anyone you'd like
      x__________x
      |          |
      |          |
      |          |
      |          |
      x__________x
    map raw: |  # the vanilla template but you can use anyone you'd like
      x__________x  # the map raw key isn't required, it's just to keep
      |          |  # a clear map without the yaml data color codes
      |          |  # that're in the map full key
      |          |
      |          |
      x__________x
  enemy spawning: <enemy list id(str)>
  dungeon:
    name: <display name(str)>
    dungeon map: <path to imgs file(str)>
    rooms number: <number of rooms(int)>
    reward dialog: <ran dialog(str)>
    no escape: <false | true(bool)>
    rooms:
      <room id>:
        room type: <fight | boss-fight | enigma(str)>
        room digit: <number of the room(int)>
        room fight data:  # for 'fight' & 'boss-fight' types
          enemy list spawn: <enemy list id(str)>
          no run away: <false | true(bool)>
          item reward: <items id(list)>  # not required
          gold reward: <gold given(float)>  # not required
        room enigma data:  # for 'enigma' type
          script name: <script py(str)>
          arguments: <arguments id(str)>  # not required
  • name // here you'll enter the display name of the map zone.
  • description // here you'll enter a clear and concise description of the map zone that'll be displayed in the player's diary.
  • type // here you'll enter the map zone type: dungeon.
  • map
    • map full // here you'll enter a multi-string that is the map zone representative ASCII art-image. This can contain yaml data color codes.
    • map raw // this field is used in the vanilla game data to stores the map ASCII art without the yaml data color codes. This field isn't required.
  • enemy spawning // this determines which enemy list to spawn at night when the player meets an enemy. This field isn't required: if you don't specify it, it's by the default the 'generic' enemy list id which'll be chosen.
  • dungeon
    • name // the display name of the dungeon.
    • dungeon map // the name of the file at the imgs/ folder to display as a map.
    • rooms number // the total number of rooms of this dungeon.
    • reward dialog // the dialog to run when completing this dungeon.
    • no escape // determines if the player is able to exit this dungeon or not, until it's completed (let the player flee the dungeon).
    • rooms
      • <room id>
        • room type // the type of this room, either 'fight', 'boss-fight' or 'enigma'.
        • room digit // the number of this room.
        • room fight data // only for rooms of types 'fight' or 'boss-fight'.
          • enemy list spawn // the enemy list id to use to make enemies spawn.
          • no run away // determines if the player's able to flee from battle in this room. Either true or false.
          • item reward // the list of items id to give to the player. This field isn't required.
          • gold reward // the amount of gold to give to the player. This field isn't required.
        • room enigma data // only for rooms of type 'enigma'.
          • script name // the name of your custom script in the scripts/ directory, with the extension (.py).
          • arguments // the list of game re-usable variables to give to that script. This field isn't required.
⚠️ **GitHub.com Fallback** ⚠️