-
-
Notifications
You must be signed in to change notification settings - Fork 6
Adding support for dungeon facades (MDT combined view)
With Dragonflight Season 3, Nnoggie who makes MDT has resorted to combining floors so that all enemies would be visible from a single map view, rather than having enemies split across multiple floors. For MDT this is the default and only view available. For Keystone.guru, I still want both views to be available (split floors and facade, as I call them).
This document outlines how the process works and how you can make a new dungeon support facades as well.
Note
It is important to know that Keystone.guru does NOT save ANYTHING side from Floor Unions and Floor Union Areas on "facade" floors. All enemies etc. are stored on the actual floors they reside on in-game. This is very important for the functioning of the site. This relates to things like the Auto Route Creator where I need to translate a map position to a position in-game. Otherwise I can't know which enemy was possibly killed and reconstruct the route. It's also important for the SimulationCraft integration where this same trick is done to determine proper delays between pulls. If a user has enabled Facade mode all enemy positions are translated to the facade purely for display purposes. Even when they place objects themselves on the Facade map, I use Floor Unions and their Floor Union Areas to place their objects on the correct floor.
Since the MDT mapping is leading, I have to convert MDT's version of a mapping into a split floor myself. For this page I will take the Ruby Life Pools as an example, since that's literally what I'm converting right now while writing the documentation. MDT presents me with the mapping as follows:
This is all the info I have. Meaning, I have a single floor with enemies spread across the map. Enemies are not put on "floor 1" or "floor 2", no, they are all on a singular floor. Since I do want all enemies and elements of the map spread across their actual floors I have to go and split it up.
In order to tackle this problem, I have created a new element called a Floor Union. On the facade view you can add this Floor Union as a way of saying "this is how the original floor is projected on the facade view". You can place the Floor Union where you want, then size it up properly and rotate it how you want. Then, when it's time to translate an MDT position to a Keystone.guru position (migrate it to the proper floor) it will look at these Floor Unions and then determine which floor it should go into. Since this may still be a bit vague, here's overlaid images from the Halls of Infusion to demonstrate this:

Second floor overlaid on top of the MDT combined view
Floor Unions (orange) & Floor Union Areas (green) in the mapping
As you can see from the above image, the orange areas overlap. This is a problem because when enemies fall into this shared space, which floor do they belong to? The solution to this is Floor Union Areas. They can be created to precisely map which Floor Union belongs to which coordinate space. This is the green area that you can see in the image. The Floor Union Area must be hard coupled with a Floor Union by linking its IDs.
Note
You must cover the entirety of the map with a Floor Union Area so that any notes people may add in MDT/Keystone.guru are also imported/exported properly to their correct floors.
If the dungeon is new you can skip this step - you just hit "Add mapping version" at http://localhost:8008/admin/dungeon/ruby-life-pools (for example) and you get your first empty mapping version you can play around with.
If you have an existing mapping, you should hit "Add bare mapping version" instead. This will take the previous mapping version's icons, floor unions (areas) and floor switches and discard the rest. This is handy to start from a blank slate again. Then, you can proceed with the next step to add new Floor Unions & Areas to import the mapping.
I think Floor Union Areas don't really require more explanation. Cover what you think is a certain floor and extend the areas logically so that the map is completely filled. Done.
Now how to place the Floor Unions properly? The first course of action is finding the image center. When you have found that, you must find the image center in the facade and place the Floor Union there. For example, in Gimp you can go to Image -> Guides -> New Guide (By Percent) and add two guides at 50%, horizontally and vertically. Then you open up the image of the individual floor (find it on pages like https://wowpedia.fandom.com/wiki/Ruby_Life_Pools) and see where the center is:
Now that we know the center, we can already place the Floor Union at the correct position in the mapping.
Now we need to figure out what size and rotation we need to give this Floor Union. We go back to Gimp and try to overlay the floor as precise as possible. First, we match the center of the image to the same location of the center of that floor on the facade. When moving there's a handy little dot which shows the center of the image you're dragging. I also reduced the transparancy to 60% so I can see the facade as a backdrop and match the centers up. I've highlighted it with red here.
Then, I scale/rotate the image. If there's a rotation I do that first, but sometimes there's no rotation so you just have to scale. In this case there's a subtle scaling, the flower with water around it is not centered, while on the facade it is. So I just rotate the image until it does match up. I ended up with a 5 degree rotation.
Then, we scale up the image until it matches up exactly. You may need to adjust the rotation or slightly move the image still until it matches up for 99%. You don't need to keep track of the scaling factor nor the exact rotation. You can measure the rotation with the Measure tool. I ended up with a 6.88 degree rotation, so we'll just round that up to 7 (the rotation in Floor Unions does support fractions though).
Now, we can go back to our mapping and size up/rotate our Floor Union. I just punch in some numbers and save, see where it ends up:
Now I have to make sure that the scale aligns with what Gimp tells me. For this I use references on the map. These references must match up with the Floor Union size:
I had to move the Floor Union left ever so slightly, and I ended up with a size of 260 (good first guess). Now this Floor Union is configured.
Finally, we need to couple the Floor Union to the Floor Union Area:
And now we're all set! Repeat this process for each floor on the dungeon/facade and when you import the MDT mapping everything will be translated for you and you don't need to worry about any of it anymore.
- Fundamentals
- Maintaining the server
- Maintaining Keystone.guru
- Creating a new Release
- Creating a new Expansion
- Creating a new Season
- Creating a new Affix
- Creating a new Dungeon
- Creating new map tiles
- Creating new NPC Portrait icons
- Creating a new Affix
- Creating mapping for a new Dungeon
- Editing an existing mapping (through MDT)
- Adding support for dungeon facades
- Technical debt