<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wiki.runerealm.org/index.php?action=history&amp;feed=atom&amp;title=RuneScape%3AMap</id>
	<title>RuneScape:Map - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.runerealm.org/index.php?action=history&amp;feed=atom&amp;title=RuneScape%3AMap"/>
	<link rel="alternate" type="text/html" href="https://wiki.runerealm.org/index.php?title=RuneScape:Map&amp;action=history"/>
	<updated>2026-04-30T12:59:53Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.41.1</generator>
	<entry>
		<id>https://wiki.runerealm.org/index.php?title=RuneScape:Map&amp;diff=34377&amp;oldid=prev</id>
		<title>Alex: Created page with &quot;{{external|rs}} {{otheruses|the cartography project|documentation and help creating maps|RuneScape:Create Map}}  This page contains documentation for the cartographer project. This project is still in development and is prone to changes. This project uses the codename &#039;&#039;Doogle&#039;&#039; or &#039;&#039;Doogle Maps&#039;&#039; sometimes.  {| class=&quot;wikitable&quot; |- ! View/Create Maps !! Issues !! Development |- |  Open the map: &lt;maplink mapid=0 plane=0 zoom=2 x=3293 y=3139 text=&quot;click here&quot;/&gt; * OSRS pro...&quot;</title>
		<link rel="alternate" type="text/html" href="https://wiki.runerealm.org/index.php?title=RuneScape:Map&amp;diff=34377&amp;oldid=prev"/>
		<updated>2024-10-16T14:07:21Z</updated>

		<summary type="html">&lt;p&gt;Created page with &amp;quot;{{external|rs}} {{otheruses|the cartography project|documentation and help creating maps|RuneScape:Create Map}}  This page contains documentation for the cartographer project. This project is still in development and is prone to changes. This project uses the codename &amp;#039;&amp;#039;Doogle&amp;#039;&amp;#039; or &amp;#039;&amp;#039;Doogle Maps&amp;#039;&amp;#039; sometimes.  {| class=&amp;quot;wikitable&amp;quot; |- ! View/Create Maps !! Issues !! Development |- |  Open the map: &amp;lt;maplink mapid=0 plane=0 zoom=2 x=3293 y=3139 text=&amp;quot;click here&amp;quot;/&amp;gt; * OSRS pro...&amp;quot;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;{{external|rs}}&lt;br /&gt;
{{otheruses|the cartography project|documentation and help creating maps|RuneScape:Create Map}}&lt;br /&gt;
&lt;br /&gt;
This page contains documentation for the cartographer project. This project is still in development and is prone to changes. This project uses the codename &amp;#039;&amp;#039;Doogle&amp;#039;&amp;#039; or &amp;#039;&amp;#039;Doogle Maps&amp;#039;&amp;#039; sometimes.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! View/Create Maps !! Issues !! Development&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
Open the map: &amp;lt;maplink mapid=0 plane=0 zoom=2 x=3293 y=3139 text=&amp;quot;click here&amp;quot;/&amp;gt;&lt;br /&gt;
* OSRS production version: https://maps.runescape.wiki/osrs/&lt;br /&gt;
* RS3 production version: https://maps.runescape.wiki/rs (not online)&lt;br /&gt;
&lt;br /&gt;
[[RuneScape:Create Map|Create a map]]&lt;br /&gt;
&lt;br /&gt;
[[RuneScape:Map/mapIDs|Map IDs (for non-surface maps)]]&lt;br /&gt;
||&lt;br /&gt;
Report the problems you have here (follow link of item): &lt;br /&gt;
* [https://gitlab.com/weirdgloop/map-tile-generator/issues Tiles, map background], &lt;br /&gt;
* [https://gitlab.com/weirdgloop/doogle-maps/issues Interface on maps.runescape.wiki], &lt;br /&gt;
* [https://gitlab.com/weirdgloop/extensions/kartographer/issues wiki interface, wiki integration], &lt;br /&gt;
* [https://gitlab.com/weirdgloop/extensions/kartographer/issues other issues, if not sure], or join us on [[meta:Discord|Discord]] #cartographers)&lt;br /&gt;
&lt;br /&gt;
[[RuneScape:Sandbox|Test if maps are displayed correctly]]&lt;br /&gt;
||&lt;br /&gt;
* Design documents: https://docs.google.com/document/d/1xv7iVBkG6eWDrXFhIYi77AVodJc0D-4Aqn0ncZXKJfw&lt;br /&gt;
* Muckups (UI): https://sketch.cloud/s/Eq5O2&lt;br /&gt;
* [[meta:Discord|Discord]]: #cartographers&lt;br /&gt;
&lt;br /&gt;
Code repo&amp;#039;s:&lt;br /&gt;
* Map tile generator: https://gitlab.com/weirdgloop/map-tile-generator&lt;br /&gt;
* Stand alone map: https://gitlab.com/weirdgloop/doogle-maps&lt;br /&gt;
* Kartographer extension for wiki: https://gitlab.com/weirdgloop/extensions/kartographer&lt;br /&gt;
&lt;br /&gt;
Want to help with the development? You are more then welcome! Join the Discord channel above and let us know.&amp;lt;br&amp;gt; &lt;br /&gt;
(You don&amp;#039;t have to know programming, we also have a need for other skills.)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Example for a (quest) map:&lt;br /&gt;
{{Map|width=450|height=450|mtype=pin&lt;br /&gt;
|3208:3213,title:Quest start,desc:Talk to the cook,icon:yellowPin&lt;br /&gt;
|3211:3246,title:Buy a bucket and a pot&lt;br /&gt;
|3172:3320,title:Milk a cow&lt;br /&gt;
|3166:3306,title:Mill some flour&lt;br /&gt;
|3177:3306,title:Get an egg&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Map Creation ==&lt;br /&gt;
=== Old School RuneScape ===&lt;br /&gt;
The map for OSRS are created using modified version of the [https://github.com/runelite/runelite RuneLite] [https://github.com/runelite/runelite/blob/master/cache/src/main/java/net/runelite/cache/MapImageDumper.java MapImageDumper] script. It uses the game cache as the source for the maps. This provides easily updatable maps.&lt;br /&gt;
The code for this can be found at: https://gitlab.com/weirdgloop/map-tile-generator&lt;br /&gt;
&lt;br /&gt;
This script creates map regions at different resolution levels:&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
File:Map region_Zoom_0.png|Zoom level 0, 64x64px, 1px per game square&lt;br /&gt;
File:Map region_Zoom_1.png|Zoom level 1, 128x128px, 2px per game square&lt;br /&gt;
File:Map region_Zoom_2.png|Zoom level 2, 256x256px, 4px per game square&lt;br /&gt;
File:Map region_Zoom_3.png|Zoom level 3, 512x512px, 8px per game square&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
These map regions include ground colour, roads, buildings, doors, walls, trees and other objects. Icons are not included in these renders.&lt;br /&gt;
&lt;br /&gt;
There map regions are then processed into maptiles that can be used for viewing the map. These tiles are all 256x256px but created using different map regions. This process uses [https://www.imagemagick.org/ ImageMagick] ([https://www.imagemagick.org/script/montage.php montage] and [https://www.imagemagick.org/script/convert.php convert]) to combine and split image to create the desired result. This process is automated using a [[wikipedia:en:Shell_script|Bash shell script]]:&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
File:Map tile_Zoom_-1.png|Zoom level -1&lt;br /&gt;
File:Map tile_Zoom_0.png|Zoom level 0&lt;br /&gt;
File:Map tile_Zoom_1.png|Zoom level 1&lt;br /&gt;
File:Map region_Zoom_2.png|Zoom level 2&lt;br /&gt;
File:Map tile_Zoom_3.png|Zoom level 3&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
These tiles are directly used by Leaflet to display the map.&lt;br /&gt;
&lt;br /&gt;
==== Layering Creation ====&lt;br /&gt;
[[File:OSRS_Layers_of_Map_creation_example.png|thumb|400px|Combining of tiles to create zoom layer 2 and 3 tiles and names]]&lt;br /&gt;
Combining and splitting images for use in Leaflet we have different zoom levels: 3,2,1,0,-1,-2,-3 &lt;br /&gt;
The map scales exponential (2^x) for each zoom level. This is the same as most [https://wiki.openstreetmap.org/wiki/Slippy_Map slippy map] systems / GIS systems.&lt;br /&gt;
It comes down to, if you zoom in each tile splits into 4 pieces, if you zoom out each tile is a combination of 4 pieces.&lt;br /&gt;
&lt;br /&gt;
So zoom level 4 (400%) is created by splitting the image into (2^2)*(2^2)=16 images of 256x256 like this (but this is not used on our OSRS maps):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 0  1  2  3&lt;br /&gt;
 4  5  6  7&lt;br /&gt;
 8  9 10 11&lt;br /&gt;
12 13 14 15&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
At zoom level 3 (200%) is created by splitting the image into (2^1)*(2^1)=4 images of 256x256 like this:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
0 1&lt;br /&gt;
2 3&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Zoom level 2 (100%) just the same image (2^0)*(2^0)=1 image. (that is why in the script zoom level 2 just copies all the images (that are in the range we are working on). This is the same size as a region in OSRS.&amp;lt;br&amp;gt;&lt;br /&gt;
Zoom level 1 (50%) is created by combining 4 images (128x128) to create a 256x256 image.&amp;lt;br&amp;gt;&lt;br /&gt;
Zoom level 0 (25%) is created by combining 16 images (64x64) to create a 256x256 image.&amp;lt;br&amp;gt;&lt;br /&gt;
...etc...&lt;br /&gt;
&lt;br /&gt;
=== RuneScape 3 ===&lt;br /&gt;
Similar process as OSRS.&lt;br /&gt;
&lt;br /&gt;
== Data Collection ==&lt;br /&gt;
The map uses varies sources of data to populate the map. A list can be found here.&lt;br /&gt;
&lt;br /&gt;
=== Old School RuneScape ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Data Name !! Data Source !! Processing tool !! Notes&lt;br /&gt;
|-&lt;br /&gt;
| Map tiles || Game Cache || RuneLite || See: [[#Map_Creation|above]]&lt;br /&gt;
|-&lt;br /&gt;
| Map icons || Game Cache, Manual (user defined) || RuneLite || &lt;br /&gt;
|-&lt;br /&gt;
| Map bounds (MapID) || Game Cache, Manual (user defined) || RuneLite ||&lt;br /&gt;
|-&lt;br /&gt;
| Map labels || Game Cache, Manual (user defined) || RuneLite ||&lt;br /&gt;
|-&lt;br /&gt;
| NPC locations || RuneLite, Manual (user defined) || ? || Not implemented&lt;br /&gt;
|-&lt;br /&gt;
| Path data || Game Cache || RuneLite? || &lt;br /&gt;
|-&lt;br /&gt;
| Map Area&amp;#039;s || Manual (user defined) || GeoJSON || Not implemented&lt;br /&gt;
|-&lt;br /&gt;
| Item spawn locations || Game Cache?, Manual (user defined)? || GeoJSON || Not implemented&lt;br /&gt;
|-&lt;br /&gt;
| Quest steps ||  Manual (user defined) || GeoJSON || Not implemented&lt;br /&gt;
|-&lt;br /&gt;
| Teleport locations ||  Manual (user defined), Game Cache?, RuneLite? || GeoJSON || Not implemented, possible source: [https://github.com/runelite/runelite/blob/master/runelite-client/src/main/java/net/runelite/client/plugins/worldmap/TeleportLocationData.java RuneLite], [https://docs.google.com/spreadsheets/d/1vPoRTxYBQeluEjmO_M4NzOOJYaGjSc88Ikuw4m55f2w/edit#gid=0 Manual], [https://docs.google.com/spreadsheets/d/16h4qJwfHFd7aBtrE4hEqRl1w23WOlQgsnijx5-_lBgs/edit Manual 2]&lt;br /&gt;
|-&lt;br /&gt;
| Map links (doors, portals, ...) || Game Cache, Manual (user defined) || ? || ?&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Map Implementation ==&lt;br /&gt;
The map implementation for OSRS and RS3 use the same codebase. This codebase can be found here: https://gitlab.com/weirdgloop/doogle-maps&lt;br /&gt;
For the wiki we use a modified version of the [https://www.mediawiki.org/wiki/Extension:Kartographer Kartographer extension]. This codebase can be found here: https://gitlab.com/weirdgloop/extensions/kartographer&lt;br /&gt;
&lt;br /&gt;
The map implementation uses [https://leafletjs.com/ Leaflet] for the map implementation and [https://gulpjs.com/ Gulp] for project compelation.&lt;br /&gt;
&lt;br /&gt;
=== Map tiles ===&lt;br /&gt;
The map tiles are available under the path: &amp;lt;code&amp;gt;tiles/{mapID}_{cacheVersion}/{z}/{p}_{x}_{-y}.png&amp;lt;/code&amp;gt; &lt;br /&gt;
; Definition lists&lt;br /&gt;
; mapID : the map bounds (0=RuneScape Surface, 1=Acient Cavern), mapID&amp;#039;s smaller then 10000 are exported from game cache, mapID&amp;#039;s larger then 10000 are user defined. Map ids can be found at [[RuneScape:Map/mapIDs]]&lt;br /&gt;
; cacheVersion: version numbering for when a map has been updated. (in format: YYYY-MM-DD_{1-9}, with the last digit being the update of that day, usualy 1 )&lt;br /&gt;
; z: zoom level, supported zoom level from -3 (zoomed out) to 3 (zoomed in), map can zoom to level 5 but this just scales the zoom level 3 images.&lt;br /&gt;
; p: planes, the floor levels, these go from 0 to 3, dungeons and basements are displaced on the map and support same planes (see mapID)&lt;br /&gt;
; x: x-coordinate of bottom left corner of map this changes depending on the zoom level. Zoom level 2 correspond with game coordinates*&lt;br /&gt;
; y/-y: y-coordinate of bottom left corner of map this changes depending on the zoom level. Zoom level 2 correspond with game coordinates*&lt;br /&gt;
&lt;br /&gt;
=== Loading data ===&lt;br /&gt;
To better support different datasets, iconsets and layers most of the data is loaded from JSON files the main file that is loaded is &amp;#039;dataloader.json&amp;#039;. This file contains the different mapID&amp;#039;s, icon sets and layers. &lt;br /&gt;
&lt;br /&gt;
Loading data follows the following structure: (this might change a little bit)&lt;br /&gt;
# load dataloader.json&lt;br /&gt;
#* create dataproviders&lt;br /&gt;
#** dataprovider -&amp;gt; IconProvider (async)&lt;br /&gt;
#*** create iconclasses&lt;br /&gt;
#*** create iconlist&lt;br /&gt;
#**** icon -&amp;gt; filename (files not downloaded until used)&lt;br /&gt;
#* wait for dataproviders to be downloaded and created&lt;br /&gt;
#** baseMaps -&amp;gt; BaseLayerBuilder&lt;br /&gt;
#** overlayMaps -&amp;gt; IconLayerBuilder&lt;br /&gt;
#*** dataSource -&amp;gt; download and parse geojson (async)&lt;br /&gt;
#** add baseMaps and overlayMaps added to map controllers&lt;br /&gt;
# baseMaps displayed&lt;br /&gt;
# overlayMaps displayed when ready&lt;br /&gt;
&lt;br /&gt;
=== Config files ===&lt;br /&gt;
The file below gives more info about this format, as json does not support comments we added &amp;#039;//&amp;#039; before a line comment. (Note: This is not a valid json file)&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;json&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;datasources&amp;quot;:[ // a list of all data sources, currently only for iconsets&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;id&amp;quot;: 0, // Id used for data provider&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;icons&amp;quot;, // Type of datasource, currently only supports &amp;#039;icons&amp;#039;&lt;br /&gt;
      &amp;quot;name&amp;quot;: &amp;quot;Map markers&amp;quot;, // Human readable name for iconset&lt;br /&gt;
      &amp;quot;dataproviders&amp;quot;: { // Files used to create data provider&lt;br /&gt;
        &amp;quot;iconclasses&amp;quot;: &amp;quot;data/MarkersClasses.json&amp;quot;, // relative or absolute path to icon classes&lt;br /&gt;
        &amp;quot;iconlist&amp;quot;: &amp;quot;data/Markers.json&amp;quot;, // relative or absolute path to list of all icons in dataset. This list can be reused by multiple providers &lt;br /&gt;
        &amp;quot;defaultIconClass&amp;quot;: &amp;quot;Marker&amp;quot; // default icon class used for &amp;#039;iconlist&amp;#039;, need to be defined in &amp;#039;iconclasses&amp;#039;-file&lt;br /&gt;
      }&lt;br /&gt;
    },{ // next data provider&lt;br /&gt;
      &amp;quot;id&amp;quot;: 1,&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;icons&amp;quot;,&lt;br /&gt;
      &amp;quot;name&amp;quot;: &amp;quot;Main RS map icons&amp;quot;,&lt;br /&gt;
      &amp;quot;dataproviders&amp;quot;: {&lt;br /&gt;
        &amp;quot;iconclasses&amp;quot;: &amp;quot;data/MainIconClasses.json&amp;quot;,&lt;br /&gt;
        &amp;quot;iconlist&amp;quot;: &amp;quot;data/MainIcons.json&amp;quot;,&lt;br /&gt;
        &amp;quot;defaultIconClass&amp;quot;: &amp;quot;MapIcon&amp;quot;&lt;br /&gt;
      }&lt;br /&gt;
    },{&lt;br /&gt;
     ...&lt;br /&gt;
    }&lt;br /&gt;
  ],&lt;br /&gt;
  &amp;quot;baseMaps&amp;quot;:[ // A list of all baseMaps (background of map), only one can be displayed at any moment&lt;br /&gt;
    // mapID=0 is displayed on opening of map&lt;br /&gt;
    // Ordered in select box using mapID (might be changes to order in this file later (TODO) )&lt;br /&gt;
    // mapID order has not have to be incremental, id&amp;#039;s can be skipped&lt;br /&gt;
    { &lt;br /&gt;
      &amp;quot;mapId&amp;quot;: 0, // mapID used when creating path for files, see above (section:Map tiles)&lt;br /&gt;
      &amp;quot;name&amp;quot;: &amp;quot;RuneScape Surface&amp;quot;, // name as displayed in select box&lt;br /&gt;
      &amp;quot;center&amp;quot;: [3225, 3219], // the center of the map, view moves here when basemap is switched&lt;br /&gt;
      &amp;quot;bounds&amp;quot;: [ [0, 0], [12800, 12800] ] // bounds of map, tiles outside of this bounds are not loaded and limits panning movement.&lt;br /&gt;
      &amp;quot;zoomLimits&amp;quot;: [-3, 5], // Zoom limits [minZoom, maxZoom]&lt;br /&gt;
      &amp;quot;defaultZoom&amp;quot;: 1, // Default zoom level, when map opens&lt;br /&gt;
      &amp;quot;maxNativeZoom&amp;quot;: 3, // Maximum zoom where there are tiles for, other zoom levels will have scaled version of max native zoom.&lt;br /&gt;
      &amp;quot;attribution&amp;quot;: &amp;quot;My Map Licence&amp;quot; // optional, attribution for this layer. Allows HTML. Default licence will always be displayed (see main config file)&lt;br /&gt;
    },{ // More items in the list&lt;br /&gt;
      &amp;quot;mapId&amp;quot;: 1,&lt;br /&gt;
      &amp;quot;name&amp;quot;: &amp;quot;Ancient Cavern&amp;quot;,&lt;br /&gt;
      &amp;quot;center&amp;quot;: [1760, 5344],&lt;br /&gt;
      &amp;quot;bounds&amp;quot;: [ [0, 0], [12800, 12800] ],&lt;br /&gt;
      &amp;quot;zoomLimits&amp;quot;: [-3, 5],&lt;br /&gt;
      &amp;quot;defaultZoom&amp;quot;: 1,&lt;br /&gt;
      &amp;quot;maxNativeZoom&amp;quot;: 3&lt;br /&gt;
    },{&lt;br /&gt;
      ...&lt;br /&gt;
    }&lt;br /&gt;
  ],&lt;br /&gt;
  &amp;quot;overlayMaps&amp;quot;:[&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;id&amp;quot;: 1, // unique id used internally to track overlay&lt;br /&gt;
      &amp;quot;name&amp;quot;: &amp;quot;Main map icons&amp;quot;, // name used in display in UI (TODO)&lt;br /&gt;
      &amp;quot;parentLayer&amp;quot;: &amp;quot;icons&amp;quot;, // grouping of layer under other layer (not implemented, might change)&lt;br /&gt;
      &amp;quot;displayOnLoad&amp;quot;: true, // if true, it is displayed on opening of map&lt;br /&gt;
      &amp;quot;dataSource&amp;quot;: &amp;quot;data/MainMapIconLoc.json&amp;quot; // relative or absolute path to a GeoJSON formatted file (see below)&lt;br /&gt;
    }&lt;br /&gt;
  ]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Example of datasources.dataproviders.iconclasses file. Note: because of image been down on canvas things might not work correct, please report them if you find some.&lt;br /&gt;
&amp;#039;MainIconClasses.json&amp;#039;:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;json&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;MapIcon&amp;quot;: { // Class name&lt;br /&gt;
    &amp;quot;options&amp;quot;: { // options as defined by: https://leafletjs.com/reference-1.4.0.html#icon&lt;br /&gt;
      // Properties &amp;#039;iconUrl&amp;#039; and &amp;#039;iconSize&amp;#039; will be overwritten by datasources.dataproviders.iconlist file&lt;br /&gt;
      &amp;quot;iconAnchor&amp;quot;: [0,0], // optional, The coordinates of the &amp;quot;tip&amp;quot; of the icon (relative to its top left corner).&lt;br /&gt;
      &amp;quot;popupAnchor&amp;quot;: [0,0], // optional, The coordinates of the point from which popups will &amp;quot;open&amp;quot;, relative to the icon anchor.&lt;br /&gt;
      &amp;quot;tooltipAnchor&amp;quot;: [0,0], // optional, The coordinates of the point from which tooltips will &amp;quot;open&amp;quot;, relative to the icon anchor.&lt;br /&gt;
      &amp;quot;shadowUrl&amp;quot;: &amp;quot;images/orb.png&amp;quot;, // optional, The URL to the icon shadow image. If not specified, no shadow image will be created.&lt;br /&gt;
      &amp;quot;shadowSize&amp;quot;: [25,25], // optional, Size of the shadow image in pixels.&lt;br /&gt;
      &amp;quot;shadowAnchor&amp;quot;: [-3.5,28.5], // optional, The coordinates of the &amp;quot;tip&amp;quot; of the shadow (relative to its top left corner) (the same as iconAnchor if not specified).&lt;br /&gt;
      &amp;quot;className&amp;quot;: &amp;#039;&amp;#039;, // optional, A custom class name (CSS) to assign to both icon and shadow images. Empty by default.&lt;br /&gt;
      &amp;quot;shadowUrl&amp;quot;: null // optional, relative path used as shadow object&lt;br /&gt;
    }&lt;br /&gt;
    // More properties might be added later for adding styles to markers&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;MapIconOrb&amp;quot;:{ // other Classes, classes can be unused&lt;br /&gt;
    &amp;quot;options&amp;quot;: {&lt;br /&gt;
      &amp;quot;shadowUrl&amp;quot;: &amp;quot;images/orb.png&amp;quot;,&lt;br /&gt;
      &amp;quot;shadowSize&amp;quot;: [25,25]&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Example of datasources.dataproviders.iconlist file. &lt;br /&gt;
&amp;#039;MainIcons.json&amp;#039;:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;json&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;folder&amp;quot;: &amp;quot;icons/&amp;quot;, // folder prefix for all image names in this file&lt;br /&gt;
  &amp;quot;icons&amp;quot;: { // list of all icons&lt;br /&gt;
    &amp;quot;general_store&amp;quot;:{ // unique name in this data provider used in GeoJSON file to reference this icon&lt;br /&gt;
      &amp;quot;filename&amp;quot;: &amp;quot;1448-0.png&amp;quot;, // filename on in folder where to find the image file&lt;br /&gt;
      &amp;quot;name&amp;quot;: &amp;quot;General store&amp;quot;, // Human readable name for icon, might be displayed later&lt;br /&gt;
      &amp;quot;width&amp;quot;: 15, // width in pixels of icon on map, if different from actual file, image will be scaled&lt;br /&gt;
      &amp;quot;height&amp;quot;: 15, // height in pixels of icon on map, if different from actual file, image will be scaled&lt;br /&gt;
      &amp;quot;iconClass&amp;quot;: &amp;quot;MapIconOrb&amp;quot; // optional, if different iconclass wanted to be used then defaultIconClass&lt;br /&gt;
      &amp;quot;wiki-link&amp;quot;: &amp;quot;General store&amp;quot;, // Not used at the moment, might change&lt;br /&gt;
      &amp;quot;category&amp;quot;: &amp;quot;others&amp;quot;, // Not used at the moment, might change&lt;br /&gt;
    }, // other icons&lt;br /&gt;
    &amp;quot;sword_shop&amp;quot;:{&lt;br /&gt;
      &amp;quot;filename&amp;quot;: &amp;quot;1449-0.png&amp;quot;,&lt;br /&gt;
      &amp;quot;name&amp;quot;: &amp;quot;Sword shop&amp;quot;,&lt;br /&gt;
      &amp;quot;width&amp;quot;: 15,&lt;br /&gt;
      &amp;quot;height&amp;quot;: 15,&lt;br /&gt;
      &amp;quot;wiki-link&amp;quot;: &amp;quot;Sword shop&amp;quot;,&lt;br /&gt;
      &amp;quot;category&amp;quot;: &amp;quot;others&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;magic_shop&amp;quot;:{&lt;br /&gt;
      &amp;quot;filename&amp;quot;: &amp;quot;1450-0.png&amp;quot;,&lt;br /&gt;
      &amp;quot;name&amp;quot;: &amp;quot;Magic shop&amp;quot;,&lt;br /&gt;
      &amp;quot;width&amp;quot;: 15,&lt;br /&gt;
      &amp;quot;height&amp;quot;: 15,&lt;br /&gt;
      &amp;quot;wiki-link&amp;quot;: &amp;quot;Magic shop&amp;quot;,&lt;br /&gt;
      &amp;quot;category&amp;quot;: &amp;quot;others&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    ...&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Map Overlay (icons, markers, shapes) ====&lt;br /&gt;
Example of overlayMaps.dataSource file:&lt;br /&gt;
&amp;#039;MainMapIconLoc.json&amp;#039;&lt;br /&gt;
Note: these files use the [http://geojson.org/ GeoJSON] file format with added &amp;#039;properties&amp;#039; fields.&lt;br /&gt;
To create these file tools like http://geojson.io could be created to make this easier.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;json&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;type&amp;quot;: &amp;quot;FeatureCollection&amp;quot;, // Start all files with a &amp;#039;FeatureCollection&amp;#039;&lt;br /&gt;
  &amp;quot;features&amp;quot;: [ // list of all features on map&lt;br /&gt;
    { // draw a marker&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;Feature&amp;quot;,&lt;br /&gt;
      &amp;quot;properties&amp;quot;: { // This point uses the icons in the providers, for icons not in providers look at the next items&lt;br /&gt;
        &amp;quot;providerID&amp;quot;: 1, // Id of icon provider see: datasources.id&lt;br /&gt;
        &amp;quot;icon&amp;quot;: &amp;quot;general_store&amp;quot;, // name as defined in datasources.dataproviders.iconlist&lt;br /&gt;
        // if both (providerID and icon) properties are not given, or image not found, it will fall back to a grey marker&lt;br /&gt;
        &amp;quot;mapID&amp;quot;: 0, // mapID of when to display icon can be number (0) of array of numbers ([0,1]) to display on multiple maps&lt;br /&gt;
        &amp;quot;zoom&amp;quot;: [0, 5], // optional, only display this feature between zoom levels, [minZoom, maxZoom]&lt;br /&gt;
        // Popup will only be availible is one of the following properties are added: &amp;#039;title&amp;#039; and/or &amp;#039;description&amp;#039;&lt;br /&gt;
        &amp;quot;title&amp;quot;: &amp;quot;[[Lumbridge General Store]] Buy now!&amp;quot;, // optional, only works inline wiki in &amp;lt;mapframe&amp;gt; or &amp;lt;maplink&amp;gt;, Added any wikitext and this will be displayed in popup&lt;br /&gt;
        &amp;quot;description&amp;quot;: &amp;quot;Buy your [[File:Bucket.png]] here, only 2 gp&amp;quot; // optional, only works inline wiki in &amp;lt;mapframe&amp;gt; or &amp;lt;maplink&amp;gt;, Added any wikitext and this will be displayed in popup&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;geometry&amp;quot;: {&lt;br /&gt;
        &amp;quot;type&amp;quot;: &amp;quot;Point&amp;quot;, // a point is a marker&lt;br /&gt;
        &amp;quot;coordinates&amp;quot;: [&lt;br /&gt;
          3203, // x coordinate&lt;br /&gt;
          3208, // y coordinate&lt;br /&gt;
          0 // plane&lt;br /&gt;
        ]&lt;br /&gt;
      }&lt;br /&gt;
    },&lt;br /&gt;
    { // other points&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;Feature&amp;quot;,&lt;br /&gt;
      &amp;quot;properties&amp;quot;: { // This point uses an image from the wiki as its icon&lt;br /&gt;
        &amp;quot;iconWikiLink&amp;quot;: &amp;quot;Egg.png&amp;quot;, // Link to image, not this value is case sensitive&lt;br /&gt;
        &amp;quot;iconSize&amp;quot;: [15,20], // The size of the icon on the map [width,height], if image is a different size is will be scaled&lt;br /&gt;
        // if both (iconWikiLink and iconSize) properties are not given it will fall back to a grey marker&lt;br /&gt;
        &amp;quot;mapID&amp;quot;: [0,1]&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;geometry&amp;quot;: {&lt;br /&gt;
        &amp;quot;type&amp;quot;: &amp;quot;Point&amp;quot;,&lt;br /&gt;
        &amp;quot;coordinates&amp;quot;: [&lt;br /&gt;
          3223,&lt;br /&gt;
          3262,&lt;br /&gt;
          0&lt;br /&gt;
        ]&lt;br /&gt;
      }&lt;br /&gt;
    },&lt;br /&gt;
    { // a line on map&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;Feature&amp;quot;,&lt;br /&gt;
      &amp;quot;properties&amp;quot;: {&lt;br /&gt;
        &amp;quot;navigation&amp;quot;: false // optional, if true, use path-finding tool to draw path, if false, use normal (straight) line&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;geometry&amp;quot;: {&lt;br /&gt;
        &amp;quot;type&amp;quot;: &amp;quot;LineString&amp;quot;, // a line in geojson&lt;br /&gt;
        &amp;quot;coordinates&amp;quot;: [&lt;br /&gt;
          [3208,3213,0], // coordinates of all the points in line&lt;br /&gt;
          [3211,3246,0],&lt;br /&gt;
          [3174,3317,0],&lt;br /&gt;
          [3166,3306,0],&lt;br /&gt;
          [3177,3306,0],&lt;br /&gt;
          [3208,3213,0] // this happens to be a closed path, but doesn&amp;#039;t have to be&lt;br /&gt;
        ]&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
    // for more features look in GeoJSON standard, other features include: Polygon, MultiPoint, MultiLineString and MultiPolygon&lt;br /&gt;
  ]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The main config file:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;json&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;basePathURL&amp;quot;: &amp;quot;https://chisel.weirdgloop.org/&amp;quot;, // path prefix for pathfinding. Path suffix example: &amp;quot;/pathfinder/path.json?...&amp;quot;&lt;br /&gt;
	&amp;quot;baseTileURL&amp;quot;: &amp;quot;https://maps.runescape.wiki/osrs/&amp;quot;, // path prefix (appended by tileURLFormat) for downloading base maps&lt;br /&gt;
  &amp;quot;tileURLFormat&amp;quot;: &amp;quot;tiles/{mapID}_{cacheVersion}/{z}/{p}_{x}_{-y}.png&amp;quot;, // format for how the tiles are stored&lt;br /&gt;
  &amp;quot;attribution&amp;quot;: &amp;quot;&amp;lt;a href=\&amp;quot;https://weirdgloop.org/licensing/\&amp;quot; target=\&amp;quot;_blank\&amp;quot;&amp;gt;License&amp;lt;/a&amp;gt;&amp;quot;, // attribution field on map&lt;br /&gt;
	&amp;quot;dataloaderFile&amp;quot;: &amp;quot;https://maps.runescape.wiki/osrs/data/dataloader.json&amp;quot;, // path to the main dataloader file&lt;br /&gt;
  &amp;quot;wikiImageURL&amp;quot;: &amp;quot;https://oldschool.runescape.wiki/images/&amp;quot; // path prefix for image used on overlayMaps. Path suffix example: &amp;quot;/4/41/Old_School_RuneScape_logo.png&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== The future ==&lt;br /&gt;
There are many features we still have in mind and/or are working on. Here you find a short list of some of them and there status.&lt;br /&gt;
Questions about these features can always be asked in the Discord channel.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Project !! Description !! Status !! Who to ask&lt;br /&gt;
|-&lt;br /&gt;
| Path finding &lt;br /&gt;
|| How to get from point A to point be as fast as possible? Navigation with teleports, items, [[sailing]] ;) or just running.&amp;lt;br&amp;gt; Tailored to the transportations you have unlocked. &lt;br /&gt;
|| Working prototype, need more data&lt;br /&gt;
|| [[User:Cook_Me_Plox]]&lt;br /&gt;
|-&lt;br /&gt;
| Search &lt;br /&gt;
|| Type in a location and find it on the map. &lt;br /&gt;
|| Concept worked out, inactive&lt;br /&gt;
|| /&lt;br /&gt;
|-&lt;br /&gt;
| Maps for RS3 &lt;br /&gt;
|| Maps for RS3 &lt;br /&gt;
|| Active&lt;br /&gt;
|| [[User:Cook_Me_Plox]]&lt;br /&gt;
|-&lt;br /&gt;
| Labels &lt;br /&gt;
|| Labels for various locations on the map. Like cities and towns.&lt;br /&gt;
|| Inactive, but work is partly done&lt;br /&gt;
|| [[User:Ralpha]]&lt;br /&gt;
|-&lt;br /&gt;
| GeoJSON.io for RS &lt;br /&gt;
|| Create maps using a variant of http://geojson.io for RS&lt;br /&gt;
|| [https://mejrs.github.io/ Working prototype]&lt;br /&gt;
|| [https://runescape.wiki/w/User:Mejrs User:Mejrs]&lt;br /&gt;
|-&lt;br /&gt;
| ...&lt;br /&gt;
|| Have an other idea, let us know!&lt;br /&gt;
|| Always open for suggestions&lt;br /&gt;
|| &lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Alex</name></author>
	</entry>
</feed>