https://en.wiktionary.org/wiki/TIMTOWTDI (Because it can be said as an acronym, I tend to use it in favour of the initialism 'original'.)
I hadn't yet decided if the other was "...[Say/Spell] Acronyms Correctly", or something else, but clearly at least *I* had been understood, despite myself... 
Can't believe it's Tim Toady and not more like Tic Tac Toe - Tim Tow Tdii (Tea). My was "There Is More Than One Way To Skin A Cat."
Anyway.
ahem.
It took me about 4 days to get any work in at all and then I did all the work.
Things left to do:
Allow Migrants to build buildings.
Work out the logic for tech-checking.
Everything else is done or will just be recycled code. So let's discuss what was done:
Here's the controller, right now - it uses the same methods to determine where you clicked - checking the sprite size. Until I find enough issues with this that I need to change it, I'll never change it.
The info_dump.clear() thing need to be removed, just from some testing before. I actually will quickly edit the code file now.
Also, I just didn't determine any controls for the mouse, so to "click", you have to press the up arrow. Look, this is early days still.
Instead of doing any of the checks in the controller, I left everything in a "bottom-up" configuration. You click on the command center, for example, and it calls a function in command center that is named "info_pass()". This means I need to build that function in everything that can be clicked (which is determined by the click_allow group). Luckily, the game will crash if I click on something that doesn't have that function - so it's easy to test! The info is stored in info_dump, which is called by the controller's parent: the camera. We'll talk about that in a bit.
The command center is pictured above - the info_pass() just sends up those same variables we've seen before, which have a few variations this time. Cost of things is stored in the global, and I've also included a fan-gamey thing where fort (and migrant) names are generated upon instancing. The tech option is just a string, but the global will keep track of whether the tech has been researched or not. I'll need to add that logic in later.
So, we can see that the command center, when asked to info_pass will make info_dump look something like this:
info_dump = ["Smallhands: Mountainhome", "Hire Migrant (200)", "Research Military"]
So how do we use that information?
Unfortunately, I'm a monster.

This is bad and I should feel bad (but I don't.)
Let's go through this line-by-line.
first, home (I have no idea why I named it that) grabs the info from the info_dump, if there is one.
The buttons on the UI are then all cleared and reset.
If home has multiple bits of information, those are placed on the buttons and the buttons are enabled. There's an exception here for the resource nodes, which pass a number up (i.e., not a string) and that info is placed on a button, but it doesn't look like a button.
If there's no info except a name, then just the name is displayed.
This is not very modular and also I'm not sure if I'm a big fan of all the work this method would require if we have like....4 playable factions.
Anyway, there's where I'm done.
I added a randomization level to the map - which will come with some issues, but oh well. This just throws a command center and 8 metal nodes around the map.
Finally, here's some examples of the dwarf names and fort names that are generated. Finding fort names was easy (thanks for the Hall of Legends), but finding the dwarven names is lacking. Does anyone know of a list of dwarven names? All else fails, I can use legend mode.
(Dwarven names are just the first few dwarven words, but dwarves don't name their kids things like "spring" or "angel", so some seem a bit off.)