Not an easy matter. You will need a new scene for your city, plus all the correct entry points and passages. Then you have to configure it to work with mnu_town or whatever, which is a long python script that uses registers to determine the current town and etc. If you want your towns to be different from the default towns than it's an easier matter. Your first problem is that you need to change the mission template from mis_tpl_lead_charge to mis_tpl_visit_town_default (not sure about the mis_tpl part, but you'll see what's correct) That way you won't end up fighting. Then you'll need to make a new menu, mno_dragonmount for example, and give it some options like a few "visit the _______ " and a "leave". For each "visit" put in a "jump_to_scene(scn_dragonmount_castle)" which of course is another scene you'll have to make. I think close_window or change_screen_return is the correct call for leaving a town, but I'm not positive. Or you could just ride to the edge of the scene. Next, you'll need to add entry points in each scene where you want troops to be, and then change the scene where they appear in troops.py to match. (You can only do this with governor or merchant troops, not common combat troops, because then they could only spawn in that one town and not anywhere else. There's another python script that selects random troops to place at the gates but I really don't know how it works)
That's just a general idea, take a look at Winter's Python tutorials if you want something more detailed.