ZlizEQMap

ZlizEQMap is a map tool mainly designed for servers that emulate old versions of EverQuest. It features a local database of maps from the old EQAtlas website (now hosted on allakabor.com and tessmage.com), along with player positioning (x plotted on map), transparent overlay, waypoints, zone connections, and more.


Table of Contents

1 Download
2 Features
3 Screenshots
4 Requirements
5 Installation and Running
6 Usage
6.1 Other Features
7 Settings
8 Tips
9 How it Works
10 Adding New Maps
11 FAQ (Problem Solving)
12 Contact
13 Source Code and Map Editing
14 Version History
14.1 v8 (January 21, 2017)
14.2 v7 (September 16, 2016)
14.3 v6 (September 5, 2015)
14.4 v5 (August 3, 2015)
14.5 v4 (January 11, 2015)
14.6 v3 (November 16, 2014)
14.7 v2 (November 1, 2014)
14.8 v1 (October 25, 2014)


Download

Download the latest version of ZlizEQMap

Features
Screenshots


General map view; player location marked by red arrow.


Displaying map overlay feature; adjustable window transparency.

Requirements

Tested on Windows 7 64-bit.

Installation and Running
  1. Extract the contents of the .zip file to any directory you like
  2. Run ZlizEQMap.exe

Running it for the first time, a form will pop up where you must input the path to your EverQuest directory. Second, choose a zone dataset that matches the server you want to play on. You must also choose whether the log files for your EQ install are found in the \Logs subdirectory or in the root EQ directory. For somewhat modern clients such as Titanium, often used by Project1999, choose the "\Logs directory" option. For The Al'Kabor Project (EQMac client), choose the "Root directory" option.

All of the options can be changed later.

Furthermore, you can click a button to enable logging permanently in EQ.

Click OK, and the map window will open, by default in East Commonlands.

Usage

First, you must enable logging in EverQuest, if you haven't done it already upon the first run of the program. Open your EQ directory in a file explorer and find the file named "eqclient.ini". Open it in your favorite text editor, and look for a line starting with "Log=". If it says "Log=TRUE", logging is enabled. If it says "Log=FALSE", simply change it to "Log=TRUE". Save the file and exit your text editor. EQ will now automatically log everything you see in your chat window(s) to text files named after your character and server, for example "eqlog_Zliz_project1999.txt".

If the program hasn't switched zones already for you (it won't detect it on the very first load, and not always if you start it up after having started EQ - a design/performance compromise), choose the zone you're in in the combobox in the top right corner.

As soon as the slightest thing is added to your log file (anything in your chat windows for example), the program will pick it up and display the name of the active character in the program's title bar at the top.

Now type /loc in-game and your position will be updated within a second with a red 'x' on the map. It's a good idea to make a macro (social) with /loc in it, bound to an easily accessible hotkey.

You can furthermore make it show the direction you're facing. This is dependent on performing a successful Sense Heading within 1 second before you do the /loc. If your Sense Heading fails or is on cooldown, the normal 'x' will be shown. In order to best make this work, make a macro like this:

/doability 1
/loc
...where the "1" after /doability points to the position your Sense Heading skill is in on the 2x3 "Abilities" grid.

If you run "off the map" and perform a /loc, a red circle will be shown instead of an 'x' where your location was last plotted. You will see this if you run down the East Commonlands tunnel towards Northern Desert of Ro, as the map only contains the mouth of the tunnel where traders hang out. Another zone where this is prominent is Eastern Plains of Karana, where the very long gorge leading towards Highpass Hold is not drawn on the map.

Other Features
Settings

Click the "Settings & Help" button in the bottom right corner to open a form where you adjust certain settings and find help.

At the top are the settings for the two possible profiles you can use. After starting the program, Profile 1 will be filled out with the settings you entered upon starting. You may fill out the second profile and switch between the two, for example if you're actively playing on two different servers.

For somewhat modern clients such as Titanium, often used by Project1999, choose the "\Logs directory" option. For The Al'Kabor Project (EQMac client), choose the "Root directory" option.

Settings, including some you can't tweak via the GUI, are stored in a file named "ZlizEQMap.ini" located in the "%appdata%\ZlizEQMap" directory (%appdata% is expanded to the ..\AppData\Roaming directory for your Windows user account).

Tips

The program works best when placed on a secondary monitor while you play EQ on your primary, so you can view the map while playing.

If you're familiar with AHK scripting, I recommend binding a hotkey to activate the program. This way, you can make it a sort-of map overlay that you can activate with a hotkey while playing. Here's an example to bind Win+H to make it activate the program:

#IfWinExist, ahk_exe ZlizEQMap.exe
#h::
WinActivate, ahk_exe ZlizEQMap.exe
return
#IfWinExist

You can furthermore use WinEQ2 (or AHK for that matter) to bind a hotkey to activate EQ again after you've viewed the map, allowing you to quickly switch back and forth.

How it Works

The program scans your EQ directory for log files, and picks the file to monitor which has been last modified. When you log in a character, EQ will start logging to that file and the program will pick it up. The log file is then scanned for changes every 500 milliseconds. Don't worry, only changes since the last polling are read, and read in a stream, not to memory. The relevant log file events are zone changes, /loc output, and sense heading, which are used to make the whole thing work.

The program has a store of all zones in plain .txt files in the \ZoneData directory with metadata that describes the zones. Correspondingly, the maps (image files) are found in the \ZoneMaps directory. Feel free to open them, just don't mess around with the files unless you know what you're doing. For those interested, here's what the .txt file for East Commonlands (ecommons1.txt) means:

475|143|7234|3152
Orc Camp ("Orc Camp 2")
Inn with Alcohol, Cloth Armor, Magician Books, Spell Components, Tiny Daggers, and Gems (Inn 4)
Hut with Shields, Food, Herbs, and Compass
...

475 and 143 are the pixel point (475, 143) on the map image file where loc (0, 0) in EQ is located
7234 and 3152 are the total number of EQ coords (on the X-axis and Y-axis respectively) that the map image file contains.
All lines after the first are map legend data. Lines starting with a * are shown as bullet points (unordered list) at the bottom, after the legend.

The program looks for an image file with a name matching the .txt file, so in this case it will load ecommons1.jpg.

The "full" zone names are translated via the files named ZoneData-*.txt, where the * represents the map package (typically servername), for example ZoneData-Project1999.txt

The zone connections are stored in the ZoneConnections.txt file.

Adding New Maps

The program can be extended with new maps without requiring editing of the code. Here's how.

First, you will need a simple image editing or viewing program, I recommend Paint.NET. Second, go online and find a good image with a map of the zone you want to add. The classic EQAtlas, which is the source for almost all Classic maps in the program, is mirrored here: EQAtlas @ Alla Kabor, and you can also find a large repository of Classic, Kunark and Velious maps on EverQuest Map Preserve. Note that in order for the program to properly plot your position on the map, you must be able to determine the scale of the map, i.e. have a coordinate grid printed on the map. Almost all of the old EQAtlas maps have this.

In this example, we'll add a map of The Nexus from the Luclin expansion. The best map is found on EQAtlas here:

http://www.allakabor.com/eqatlas/images/nexus.jpg


Click for large image

Download this image to your computer. Note that both JPG, GIF and PNG images are supported. Now to find the correct name and location for the file: Open the ZlizEQMap directory, go to the ZoneMaps sub-directory, and you will see a number of sub-directories, roughly one for each era or continent of the game. There is already a directory named 07Luclin (the 07 is just for sorting), so save the nexus.jpg image there. Next, every image needs to have a proper name and a trailing number. The naming convention for zones is typically their "short name" in EQ, which for example is "nro" (long name: "Northern Desert of Ro"). An obvious choice for The Nexus zone is "nexus". Since this image will be the primary map for The Nexus, name file nexus1.jpg, and place it in the 07Luclin directory.

Next, some data about the map image's coordinates and location need to calculated by hand, as it would otherwise be impossible for the ZlizEQMap program to determine where you are when perform a /loc in-game. Open the map image in Paint.NET. We need to figure out three things:

  1. At which pixel-point the (0,0) loc of the map is
  2. How many coords the map image contains on the X-axis (horizontal)
  3. How many coords the map image contains on the Y-axis (vertical)

To figure out all these, we need to use the "Rectangle Select" tool (in the Tools window, top left) in Paint.NET. It also helps to utilize the zoom in/out feature (Ctrl + mouse wheel) for precision's sake. The Nexus map's (0,0) coordinate is right in the center, where it says "Arrival Spot"). Zoom in for precision, then click on the (0,0) coordinate and start dragging a little square, it doesn't matter how large. You will see the status bar in the bottom of the window update and display info about "Selection top left". It should say approximately 263, 258. This means that the pixel-point coordinate 263, 258 is where the (0,0) EQ location is on the map image.


Click for large image

Second, we need to figure out how many EQ coords the map image contains on the X-axis (horizontal) and Y-axis (vertical), respectively. To calculate the X-axis, use the Rectangle Select tool, and draw a box from the vertical line on the left where it says "500" at the top, to the line on the right where it says "-500". The height of the box doesn't matter, since we are calculating horizontal pixels. The bottom status bar will now update again, and it should say approximately "Bounding rectangle size: 454 x __". This means that for each 454 pixels of the image, there are 1000 EQ coordinates, since we drew a rectangle spanning 1000 EQ coords (from 500 to -500). Now we need to convert this into how many coords there are on the total width of the image, via a simple calculation. Make a note of the total width of the image, which can be seen in the bottom status bar, second from right (572x532 in this case). The formula is:
total coords = (selected coords) / (selected pixels) * (total image pixel width)
total coords = 1000 / 454 * 572
= 1260 (rounded)


Click for large image

Third, for the Y-axis. The procedure is precisely the same: Draw a box from the top coordinate line (+500) to the bottom (-500) to cover 1000 pixels. There are approximately 452 pixels, and the image is 532 pixels tall, so the calculation is:

total coords = 1000 / 452 * 532
= 1177 (rounded)


Click for large image

For other maps which are not as simple as The Nexus map, you can fundamentally use any amount of pixels to perform the above calculation, it doesn't have to be 1000. For precision, always draw a box as large as possible; for example on the huge map for Iceclad Ocean, you could draw a box that is 20000 pixels wide, to get the best precision.

Now we have the numbers we need.

Enter the ZoneData sub-directory of the ZlizEQMap directory. Again, each sub-directory represents an era or continent of EQ, and these directories contain meta-data about the zone map images, such as the coordinates and the legend. Create a new text file with precisely the same name as the map image (remember the number 1), but with a .txt extension: nexus1.txt. Open the file in your favorite text editor. The first line needs to contain the four numbers we calculated in the earlier steps, separated by the pipe | character, in the following order:

(X-axis location of 0,0)|(Y-axis location of 0,0)|(total coords of the image horizontally)|(total coords of the image vertically)

In our example this is:

263|258|1260|1177

Optionally, you can write one more pipe | and then type a name that further describes the map. This is usually used for sub-maps to describe which area of the zone the map is for. See for example the gfaydark2.txt file in the 02Faydwer directory, where the first line reads:

275|265|5978|6180|Kelethin

On the rest of the lines, you can optionally enter (typically copy/paste from EQAtlas) the data for the legend of the zone image, the helper text that explains what the different numbers on the map mean. The Nexus map has no legend on EQAtlas, but other zones have up to 20 or more. Simply enter one legend line per line, without the number in front, and the legend will be automatically displayed with numbers in the program. See for example the gfaydark1.txt file in the 02Faydwer directory to see a sample of a zone with legend text. To add un-ordered bullet points at the end of the list, write a * (asterisk) in front of the line.

275|265|5978|6180
Orc Camps
Abandoned Druid Ring
Bandit Camp
Wizard Ring

Finally, the zone information needs to be tied together in two files:

ZoneConnections.txt: Contains information about which zones connect to which
ZoneData-________.txt: Contains server/emu-specific information about the in-game names of the zones, for example ZoneData-Project1999.txt.

A few notes about these files: Lines starting with // are comments, and ignored, and the actual order of the zones and continents do not matter, as everything is sorted automatically by the program.

The zone connections are optional to enter, but an entry must exist in the ZoneConnections.txt file. Scroll down to the line that says "// 07Luclin" and enter a new line after the existing, so it looks like, for example, this:

// 07Luclin
shadeweaver=sharvahl
sharvahl=shadeweaver
nexus=

Next, the ZoneData-________.txt file must be edited so the program knows the full name of the zone you see in-game when entering the zone, and so that it can automatically switch maps as you zone. As each emulated server can determine its own custom names for zones, and because they are very inconsistent, even across emu servers of the same era, this name needs to be server/emu-specific. Let's assume we are editing data for the The Al'Kabor Project emu (TAK), so we will edit the file ZoneData-The Al'Kabor Project.txt, which contains zone data for TAK.

Either in-game, or by checking your log files, find the actual name displayed when you enter the zone ("You have entered _______"). Let's assume in this example that the full name of the zone is literally "The Nexus", but on some servers it might just be "Nexus", and this has to be verified in-game. Scroll down to where it says "// 07Luclin", and add another line like this:

// 07Luclin
shadeweaver=Shadeweaver's Thicket
sharvahl=Shar Vahl
nexus=The Nexus

All done! It's a lot of work, but all this data is necessary. Restart ZlizEQMap, and you should see The Nexus available as a zone available in the Zone drop-down in the top right of the program, organized under Luclin zones. The map will also automatically be displayed when entering the zone, and if you did the math correctly, your position will be plotted as you perform a /loc in-game.

To go further, you can add all the other Luclin maps, and work on perfecting all the zone connections between the maps if you wish. You can also add multiple maps per zone, which can be useful in dungeons. Simple add extra sets of files; for example nexus2.jpg and a matching nexus2.txt file describing the map image. Both maps will then be loaded. See for example the map for Befallen (Antonica zone), which has two maps. It is however impossible for the game to know which sub-map it should display, so you will have to switch manually.

You can also add a whole new zone data set for a new emu server, by simply creating a new ZoneData-________.txt file, for example ZoneData-PEQ The Grand Creation.txt. All the map images, their coordinate and legend data, and the zone connections are shared across all servers (it's assumed they are the same), but the in-game long zone names might be different.

FAQ (Problem Solving)

Q: The program crashes upon startup or just suddenly while playing.
A: First, try to delete the program's settings file. Open Explorer or Start->Run and type "%appdata%" (without quotes). In the directory that opens, locate the directory "ZlizEQMap", and delete the file "ZlizEQMap.ini" found inside. Now try to start the program again and enter the basic settings from scratch.
If you still have problems, send me a screenshot including steps to reproduce the error. See the Contact section below for email.

Q: The program isn't showing my position and isn't picking up my active log file
A: In rare cases, EQ will not log even though logging is turned on. Restart the client and it should be fixed.

Q: My 'x' position on the map is slightly inaccurate
A: This is to be expected. The maps are hand-drawn, and I have gathered metadata about the map dimensions by hand, one by one.

Q: My 'x' position on the map is way off
A: There are two possible reasons: Either I messed something up, or the map you're on is just not accurate. Particularly the maps for Freeport and Neriak are between somewhat and totally off, the worst example being Neriak Third Gate. I assume our old friend Muse, the creator of EQAtlas, made these as his first maps and did not draw them to scale.

If you experience weird positioning of the 'x' in zones other than Freeport and Neriak, contact me and I will check it out.

Q: A red circle is being shown instead of the 'x'
A: You've run "off the map", see above section

Q: As I switched zones or clicked a connected zones link, I get a dialog box with an error saying "Unable to find zone 'xxx' in Zone Data"
A: I have probably made a typing error. Let me know.

Q: I'm trying to match the in-game /loc output to the map locs, but X and Y appear reversed?
A: Remember that EQ outputs locs in the format of (Y, X, Z). Furthermore, the X-axis is reversed, so increasing X numbers means you're travellings west.

Q: I launched the program after EQ, and it automatically switched to my zone after a while
A: I coded it such that the program checks the last 5000 bytes in the active log file upon startup for a potential zone change. This is so that it in most cases switches to the correct zone, but only after something else has been logged to the log file, making it the active log file.

Q: After doing a /loc it takes relatively long (1-2 seconds) for the program to plot the red x on the map
A: This might be because you have a very large log file. Camp, then delete the character's log file (or rename it if you want to save it for future parsing). EQ will create a fresh one upon re-entering the world.

Contact

Contact me at zlizeq@almx.dk

Source Code and Map Editing

Download the source code for the latest version of ZlizEQMap

The program is coded in C# and made with Visual Studio 2010. The contents of the \ZoneMaps has been omitted from the .zip file due to size; simply copy the \ZoneMaps directory from the program directory to your development directory.

You can add (or edit) other maps by adding .txt and corresponding image files (.jpg, .gif or .png extensions supported) in the manner described above, and everything will be dynamically added to the program upon restarting it. You can add new continents by adding a new directory under the \ZoneMaps and \ZoneData directories, prefixed with a number for sorting purposes.

Version History

v8 (January 21, 2017)
v7 (September 16, 2016)
v6 (September 5, 2015)
v5 (August 3, 2015)
v4 (January 11, 2015)
v3 (November 16, 2014)
v2 (November 1, 2014)
v1 (October 25, 2014)



Zliz's EverQuest Compendium | About | Contact