I recently started a new short-term campaign for some friends, using Dolmenwood and The Black Hack. At one point, they were celebrating Thistlemote's (one of the PCs, a woodgrue) birthday by having a huge bash in the Laughing Pig, their town's tavern.
Some time after midnight, a Vague began. They are in the middle of winter, and occasionally during winter in the Dolmenwood an unseason of mists and undeath occurs. They see, through the fog, a horde of horrible figures shambling towards the town. I wanted a dawn of the dead style scene where our heroes try to fend off zombies that are punching their way through the windows and doors of a ramshackle building and they have to fight to survive and protect the villagers trapped with them, franticly shoring up the walls and taking out zombies with whatever's lying around.
So I improvised some siege survival mechanics.
The tavern has 20 HP, represented by a d20 placed in the centre of the table. As the tavern took damage and was shore up round by round it was fun to change the number on the die and have tension when it went down quite low.
I rolled 3d8 (1 HD per player, in line with Black Hack's recommendation of "HD budget" for a random encounter) to determine the number of zombies that were attacking, as an abstraction. I ended up with 20 again (very Magic: the Gathering, 20 HP a side...). As PCs whittled away the number of zombies from the pool, the number would go down. I treated it as that specific number of zombies, all with just 1 HP--but 20 zombies isn't really a "horde" so I kept the number of zombies vague for the players, with occasional hints like "there's about half of them left" or "you've downed most of them".
Each round, (which I abstracted as Minutes in the Black Hack way) each PC could do one thing, as usual, with the following alterations:
If they attack the horde of zombies, they make the attempt as normal, with each point of successful damage taking out that number of zombies from the pool.
In addition, each PC could ALSO command some underlings. In this case, there were three groups of underlings in the tavern: some visiting woodgrues, some burly porters, and a few villagers. One group for each of my PCs. In order to get any given group to listen, first a commander has to make a charisma test.
If they succeed then they can either get the underlings to do something, like attack the horde, or shore up the tavern's defenses. No matter what they did, the porters had a d8, the woodgrues a d6, and the villagers a d4. So if you get the villagers to shore up the tavern they roll a d4 and add that result to the tavern's HP--but instead you can get the villagers to attack the horde, in which case they'll do d4 damage to the pool of zombies. (I improvised sensible average numbers for the underlings attacks, like 8 for the villagers, 12 for woodgrues ranged attacks, etc).
At the end of each round, the zombie horde attacked, with no chance of failure since they're just battering the side of the tavern. I'd roll a d6 for each surviving HD of zombies. So while the number of zombies was above 16 I rolled three dice for damage, when it went below I rolled two dice, and when there were less than 8 I rolled a single die. In addition, I would use a d6 for damage dice while more than half the horde was intact, but once less than half were left I used d4s.
That's it!
This simple on-the-fly abstraction led to interesting decisions being made each round, a constant juggling of taking out zombies and shoring up the tavern, while finding other ways to end the seige (Thistlemote used her pied piper ability to lead away some zombies to drown in the river, while the elf Smiles-Tolerantly snuck out with some porters to find the thing that the leader of the zombie horde was after).
If I were to use it again, the numbers could use some rejiggering as at times it felt too easy to shore up the tavern for a lot of HP -- once there were less than half the zombies left it basically was inevitable that the players would succeed, sucking much of the tension away. I also had the NPC tavern owner act on his own each round, shoring up for a d6 of HP each time, which helped the PCs a -lot-. I think maybe individuals should only be able to shore up for a d4, or not at all and let it only be an underling group ability. Maybe some sort of test for a group to successfully shore up would be good too.
One thing I wish I'd thought of was to use morale checks for the underlings. Once a PC had succeeded in their charisma check to command a group, they never had to do one again and their underlings would always do what was commanded. I would do morale checks for the underlings, probably when they fail an attack or when zombies reach a certain threshold of damage. I'd planned on making them all do morale checks if the zombies breached the walls (at which point they'd start taking out underlings)--but the zombies never got in. I think the closest they got was when the tavern was at 5 HP, but the following round three different groups all shored it up and it was nearly full again.
I should say that this all was inspired by a distant memory of a seige system I'd read about on some OSR blog that I fully can't find anymore, so if I've copied someone else's work entirely-- whoops!
In any case, there you go: an easy, hackable system for a seige!