The Hearthstone Tavern project
Intro
I've been over this on both this blog and on Twitter many times before. I'm a big fan of the Hearthstone Tavern model that Blizzard added back in 8.2.5. I even made thread in the community council about it. The model is great. It has an amazing atmosphere and is what I believe genuinely a work of art. However, it was never used.
More info on how the Tavern was supposed to be used in WoW can be found in an earlier blog post here.
I've been wanting to use it in some projects over the years, but I always run into the fact it has no exterior model. Granted, there is a good amount of mystery around the tavern (see the lore section later on) so it not having an exterior model isn't a huge surprise, but I wanted to take a stab at it anyways. This is largely going to be a learning project as I struggle my way through giving it an exterior. Come with me on with me on this journey and maybe we'll both learn something.
Warning: I am a notorious reinvent-the-wheel type of person who likes doing things my own way. There will be a lot of that in this post, which is my longest blog post yet.
What we're working with
Concept art
There's not a ton of stuff out there on the exterior, most of the appearances of the tavern only have the interior. There is an impression of the Hearthstone Tavern in the Overwatch map "Blizzard World" but it is basically just a normal human tavern.
There is however this post by artist Vasili Zorin who made a bit of concept art of the tavern for the the animated short "Hearth and Home" back when he was at Blizzard (he is now at Valve!).
This art by Vasili Zorin is to my knowledge, the only known existing (but not necessarily canon) art.
The lore
There is a good bit of mystery on the tavern and how it operates, in official stories it's usually described as appearing in a time of need. In the animated short "Hearth and Home" the main character Ava is teleported into it by a Hearthstone board. Both her and the interior of the tavern appear later on in "New Pack Day", "Win or Lose" and the Warcraft Rumble Announce Trailer.
Both the tavern's main hall and fancy side room, to my surprise, also appeared recently in the WoW comic "Seasons" (YouTube, PDF). In it, it is described as a secret place beyond Xal'atath's reach. While the frame before it appears to be in Stormwind, there's signs of a teleport happening to get to said place. Notably, except for a bartender in classic Bartender Bob apparel, there are no signs of Hearthstone. Curious.
The interior WoW model
In case you haven't seen it in its proper in-game glory before (and I won't be posting too many interior shots for post length reasons), check out Leyst's video that showcased it back when it was added in 8.2.5.
Obviously, the existing interior model is the model we'll have to make a fitting exterior for. The model itself uses many assets and textures from the human building kit and introduced some textures that are still used in human buildings today so there's definitely precedent for making it a human-themed exterior as well.
The model has 3 separate WMO groups:
- "mainhall" (highlighted in orange below)
- "library" (on the top left)
- "fancyroom" (on the right)
The main hall is based on the interior that appears in the animated Hearthstone shorts (and as such some of the concepts). The "library" is a modified version of the human garrison mage tower interior and "fancyroom" appears to be entirely custom, just like the main hall.
Stuff I already did
Here's a screencap of the Blender file that I've messed around with throughout the years.
The only usable thing that really came out of it was the resized/slightly reworked tavern entrance (yes, I know the roof has inconsistent colors in these screenshots).
Here we go!
Set up tooling
The modding community made a great add-on for Blender called WoW Blender Studio that allows you to import/export WMOs (Bigger models) and M2s (Smaller models) in to and out of Blender.
There's only 2 things that are important to make note of, the way it was integrated with Blender requires Blender 3.4 to be used and, like most community made modding tools, it only really works with WotLK versions of WoW file formats. Not great since I'm targeting modern WoW, but not the end of the world.
To get models from their WotLK format that is output by WBS to a more modern format I'm using a tool called SLFiledataConverter as well as some tooling I made specifically for this project. More on the latter, well, later.
Proof of concept
To test the tooling pipeline (Blender -> WBS -> Upconvert WMO to Legion -> Patch into the game) I wanted to try getting the entrance I made earlier into the game. WBS took some figuring out, but I got there in the end! If you're wondering why there's another entrance in the background, it's because I swapped missingwmo.wmo (the WMO the game loads if the WMO is missing) with the entrance.
Kitbashing
I'm not a 3D modeling artist. I'm not a texture artist. I'm not that creative. I know some of the basic working of Blender, but that's about it. To get an exterior going, I'll need to take apart existing models to harvest bits of geometry that would be a good fit. Effectively kitbashing, but with 3D models.
One of those models that really fits the vibe I'm going for is the Frontier Inn model that was added in Dragonflight. This model, like the tavern, hasn't been used in the game and I'm assuming it is from an earlier phase of Dragonflight development where the initial settlement was more human-themed (there's a few more WMOs that point to this as well).
While it is a relatively large model (look at the sign at the entrance to get a good idea of the scale), it is most definitely not large enough to encompass the interior model of the tavern. For this, I'll have to take apart pieces of the model into a kit that I can somewhat easily reuse to build out the exterior of the tavern.
And take it apart, I did. My apologies to the original artists of this model.
Concepting the exterior
With the parts I had 'extracted' from the Frontier Inn model, I went to work on combining these bits into something that looked good enough (to me).
The initial entrance I made really didn't fit with the textures that the Frontier Inn walls use, but I went ahead regardless in the hopes I could fix this later on.
Step by step, I got to something that started to look like a real exterior!
I also needed a roof, just as a placeholder I grabbed the roof mesh from the stable that is used for the Trading Post in Stormwind and made it much wider to at least cover the front. Another thing I tried is getting the entrance to use some of the same textures as the rest of the exterior so it'd fit in better. There's also some basic UV remapping done there, but I really don't know what I'm doing so it looks pretty bad.
I wanted to get it to a point where I would be able to export it to the game again to get a good look at it. After a lot joining of the various kitbashed parts and setting up the materials for exporting, I got it to an acceptable point where I think the concept I was going for was getting pretty clear.
One export and a bit of fiddling with patching in the missing materials later, I got it in-game!
If you manage to ignore the glaring UV issues and the fact it's just not finished, it's looking pretty good!
With this method of making the exterior clearly working, I decided to move on for now to the next part of this project that I expected to be troublesome.
"That door"
"Beyond this hearth(-stone tavern), that door"
The interior model has a closed door. While I'll probably make two versions of the model, one with a door and one without, for future project reasons I want to be able to have a separate door object there that can open/close.
"That door"
I had two options here (that I could think of).
- Downport the model to 3.3.5 so I can edit it in WBS, remove the door and convert it back up.
- Surgically remove the door manually.
Option 1 got thrown out relatively quickly after seeing various modern bits of the model getting lost in the conversion process. I wanted to keep it as intact as humanly possible as to not ruin how amazing it is. This meant having to remove the door in a more manual fashion, AKA Option 2.
Warning: This is where things get rough and a bit technical.
I largely know the basics on how the WMO file format works. Surely I can just edit the file to my wishes and just disable the faces of the door. I grabbed my old model viewer project in which I can control the (really rough) rendering of things and mapped out which specific triangles/faces I wanted to remove by slowly disabling more and more things until I found the exact face I wanted gone.
This took a bit more effort than I had initially expected (no shit) so I wrote up a quick tool that took in the needed information and set the relevant indices to 0 (I chose not to fully remove them as that would jumble up the original file). This ended up being a rather large amount of faces, but I got there in the end (although I might still be missing one here and there).
With those faces set to use only vertice 0, the inner door frame is now completely empty, but a rather glaring issue has popped up. Obviously the wall behind it wasn't perfectly formed around the door and why it would it be, there's usually a door in front of it.
To solve this I did the most sane thing ever and mapped out the face numbers, the specific vertices and then the 3D coordinates of said vertices.
A lot of trial and error later I got it down to 8 coordinates I had to update with the tool to get it to fit.
At this time I also noticed a tiny light shaft placed in front of the door window that I had to remove, but this was pretty easy. It is a separate model (doodad), so I just set the scale of it to 0.
With that fixed and the vertices around the door frame updated, it looked pretty damn good (outside of some mildly displaced UVs that I hope will remain largely unnoticed).
Now, you'd think that was it, but there's still a collision mesh there so you still can't actually walk through the damn door. I can't blanket remove the collision mesh in that area since you'd just fall through the floor, so it is time to find yet another specific vertice to change the coordinates of.
WoW's WMOs use BSP (Binary Space Partioning) trees for detecting collision, a technique originally developed for Quake that is far too complex for me to explain so I'll link to this video for those who are curious, but you don't need to watch it to understand the rest of this paragraph.
Basically, some of the triangles/vertices in the WMO are exclusively for this collision mesh. Without diving into the entire BSP rabbit hole, I checked which triangles were used by the collision mesh and then which vertices were connected to it (thanks for the tip schlumpf). Then I found a specific vertice I could move to make an adequate hole.
Although this was done through editing the file itself with my hacky tool, here is a visual representation of what that did to the collision mesh. Not perfect, but good enough.
Merging the WMOs
An important part that I need to do is merge the exterior group I made with the interior groups into one single WMO.
My first attempt at adding the group involved updating the original Tavern root WMO to reference the new group file I added as well as add the group to all the other bits that reference groups. It was largely successful, the obvious thing being that the materials are wrong.
The reason why the materials are wrong is that materials are stored inside the root WMO and the group WMO refers to these by number. The materials from the new group WMO I made obviously don't match the ones in the original tavern's root WMO that I added the new group to, so it has the wrong materials.
After adding a feature to my tool where it reads the original materials, the new materials, merges them and updates the new group, it looked much better!
With that out of the way, it's time to figure out how portals work. The easiest way to explain portals is that they are 'windows' between the WMO groups used for doors or other sorts of entrance. They are used for hiding specific groups if they're not in view amongst other things.
Both the root WMO file and the group WMO file both reference these portals, so I had to patch all of them. It took me a long time to figure out what exactly the right order of portals was, but with the help of a broken WotLK-converted version that did have working portals, I was able to map out the various changes I needed to do.
The version I'm working on ("8xp_hearthstonetavern") is on the left, the WotLK version ("int") is on the right. Changes I needed to make to my version are after the arrows. G(x) = group index, PS = portal start, PC = portal count, P(x) = portal info index, PR(x) = portal reference index. -1 or 1 is the portal's side.
With that implemented into the patching tool, we can now look inside from the outside...
... and vice versa!
I will definitely need to do a bunch of tweaking later on to fix up any weird geometry that's sticking in/out, but I'm going to call this step complete.
Finish basic exterior
With that done, it's time to move on to the rest of the exterior to get a 'closed' model around the interior. That includes a roof. The concept art has a high pointy roof, something I don't have the modeling ability for. With some input from friends, the only real choice was to go for the Frontier Inn roof but heavily modified.
A few resized and combined roofs already looked somewhat acceptable.
With some basic recoloring done it looked pretty fitting.
I had to change the texture for the roof trims -- this will however change back in the next few screenshots as it reverted to the in-game texture.
Over time, I was able to build out the exterior. Here's the first version of the front of the tavern with the rough geometry/texturing done. It looks pretty bland and requires far more detailing work.
There's two areas of note that require some imagination for the exterior layout.
The interior has a hallway leading to the library group, but that same hallway also splits off to a staircase going to a closed door. Naturally, there is nothing behind that door, but we still have to build the exterior like there is, so I started blocking out some basic exterior around said imaginary room.
Another area of note is the library room. It being based on the human garrison mage tower means it has an arguably perfect exterior made for it already, but after some messing around it became apparent that I wasn't able to fit that in well with the rest of the exterior, even with a bunch of retexturing. Shame.
...so another square building extension it is. At least for now. The interior windows don't match up at all and that's a bit annoying, so I might come back to this later.
With that blocked out, here is the basic layout that I'm going for. Ignore the roof trims.
A grueling day of copy pasting and moving around vertices/faces later, I've arrived at the point where there is now a basic enough exterior to cover the entire interior model.
In Blender:
In-game:
I'm sure I'll be fixing/improving stuff as I encounter it (there's several issues already in the above videos), but I'd say the basic exterior, except for details like windows and whatever I come up with, is done now.
Fixing things
Outside of many many random things like UV issues, gaps and other things I fixed (and will keep fixing) I won't bore you with, some were notable.
One of the things is that the interior group has some lights outside that I need to disable as they show up only when the interior is loaded. One of said lights can be seen blipping in and out of existence:
The tavern has 178 lights and I had to figure out which lights these were. After some work, I disabled light 45, 46 and 48 through my tool, which fixes the above issue.
Another thing is that the interior model has some geometry sticking out that I need to patch out similarly to how I patched out the door. The interior has more geometry sticking out in other places, but these places don't show up as the interior is only loaded when the interior is shown through the door portal.
With those vertices patched in my tool, those are now gone!
Some of the windows that were copied from the inside model also need recoloring as they should be yellow looking outside-in.
This is as good of a job as I could do without actually texturing something myself.
One final thing I wanted to make is a version of the model with the front door closed.
Yeah, there's no door knob, I know. I've hidden the door mesh in the stairs until I need it in the future at which point I'll add a door knob doodad.
In closing
Done for now
There are a bunch of issues I want to fix with the WMO and just like my programming projects there's always some of that that can be done, but it's in well enough shape now for me to get going on the various things I want to do with it.
Some issues that I will likely be fixing over the next few months (some of which I'll need expert help with):
- This atrocious door transition, will need a bunch of modeling work as well as figuring out how real WMO lighting transitions work in WoW.
- Ugly UVs, frankly can not be bothered as this is tedious work I am not good enough yet.
- Collision problems in some places, this is a hard problem that isn't a big issue right now as it's largely the exterior walls above ground level that have this issue.
Things I want to maybe look into adding:
- Interior updates (Warcraft Rumble machine, some of the things from the earlier mentioned cinematics)
- Some NPCs based on the cinematics/Hearthstone.
- More doodads. MORE!
I did a Twitch stream (VOD available here or here if the Twitch one expires) that goes into the process of working on the model and adds some world around the tavern (and a balcony above the entrance) that I'm pretty happy with, just as an impression. Granted this is all very dodgy lore wise given the tavern's mysterious/ephemeral place, but it still adds some flavor that teases the imagination.
Screenshots
The stable area with a random door in the back.
Ignore the broken mountain in the distance, it is my test map after all.
It started snowing!
The loading dock/break area that the door behind the bar leads to.
The back is still fully modeled, albeit a bit boring. Maybe I'll add some stuff here in the future!
Video
Quick fly-around video of the exterior. Video bitrate isn't great, but you can get a pretty good idea of it.
Release (v1)
Blender (3.4)
You can download the .blend file here (~61MB ZIP). Note that the interior tavern model included is very broken and is only there for scale/scavenging for reasons mentioned earlier in the post.
While the resources are packed, keep in mind that a bunch of things will require a fully setup WBS as well as have all the referenced assets available to WBS to function properly. The exterior model itself should be viewable in standard Blender though (excluding doodads which will likely be missing textures due to no WBS).
WoW WMO
A WMO download for modern WoW (8.2.5+) is also available here. FileDataID wise the WMO expects 8xp_hearthstonetavern_003.wmo
(the new exterior group) to have FileDataID 929010716
and purple_roof_trim.blp
to have FileDataID 929010715
. The other files need to overwrite the existing Hearthstone Tavern files.
Note: I won't give any support in regards to the model (and it definitely still has a lot of issues) or setting up any of the tooling/Blender/in-game stuff. If you want to use the model anywhere, please do let me know and don't use it on for-profit private servers, thanks. :)
Credits
Many thanks to my friends who have helped me out throughout this project (specifically Implave and Belvane!). Obviously credits go out to the Blizzard artists that worked on the original tavern model in any shape or form. Same goes for the Frontier Inn that I largely harvested parts from. I'd also like to thank the people who worked on the modding tools that made this project possible in the first place.
That's all folks! I'm sure the tavern will make an appearance in a future project blog post. No clue how long that project is going to take, but I'm sure I'll learn just as much on that one as I did making this exterior.
Thanks for reading!